All files index_bundle.js

99.73% Statements 16655/16700
100% Branches 10/10
100% Functions 0/0
99.73% Lines 16655/16700

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 10765 10766 10767 10768 10769 10770 10771 10772 10773 10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 10802 10803 10804 10805 10806 10807 10808 10809 10810 10811 10812 10813 10814 10815 10816 10817 10818 10819 10820 10821 10822 10823 10824 10825 10826 10827 10828 10829 10830 10831 10832 10833 10834 10835 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 10850 10851 10852 10853 10854 10855 10856 10857 10858 10859 10860 10861 10862 10863 10864 10865 10866 10867 10868 10869 10870 10871 10872 10873 10874 10875 10876 10877 10878 10879 10880 10881 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 10920 10921 10922 10923 10924 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 10935 10936 10937 10938 10939 10940 10941 10942 10943 10944 10945 10946 10947 10948 10949 10950 10951 10952 10953 10954 10955 10956 10957 10958 10959 10960 10961 10962 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 10988 10989 10990 10991 10992 10993 10994 10995 10996 10997 10998 10999 11000 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11019 11020 11021 11022 11023 11024 11025 11026 11027 11028 11029 11030 11031 11032 11033 11034 11035 11036 11037 11038 11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 11087 11088 11089 11090 11091 11092 11093 11094 11095 11096 11097 11098 11099 11100 11101 11102 11103 11104 11105 11106 11107 11108 11109 11110 11111 11112 11113 11114 11115 11116 11117 11118 11119 11120 11121 11122 11123 11124 11125 11126 11127 11128 11129 11130 11131 11132 11133 11134 11135 11136 11137 11138 11139 11140 11141 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 11190 11191 11192 11193 11194 11195 11196 11197 11198 11199 11200 11201 11202 11203 11204 11205 11206 11207 11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 11218 11219 11220 11221 11222 11223 11224 11225 11226 11227 11228 11229 11230 11231 11232 11233 11234 11235 11236 11237 11238 11239 11240 11241 11242 11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 11286 11287 11288 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 11312 11313 11314 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 11338 11339 11340 11341 11342 11343 11344 11345 11346 11347 11348 11349 11350 11351 11352 11353 11354 11355 11356 11357 11358 11359 11360 11361 11362 11363 11364 11365 11366 11367 11368 11369 11370 11371 11372 11373 11374 11375 11376 11377 11378 11379 11380 11381 11382 11383 11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 11407 11408 11409 11410 11411 11412 11413 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 11439 11440 11441 11442 11443 11444 11445 11446 11447 11448 11449 11450 11451 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 11484 11485 11486 11487 11488 11489 11490 11491 11492 11493 11494 11495 11496 11497 11498 11499 11500 11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 11515 11516 11517 11518 11519 11520 11521 11522 11523 11524 11525 11526 11527 11528 11529 11530 11531 11532 11533 11534 11535 11536 11537 11538 11539 11540 11541 11542 11543 11544 11545 11546 11547 11548 11549 11550 11551 11552 11553 11554 11555 11556 11557 11558 11559 11560 11561 11562 11563 11564 11565 11566 11567 11568 11569 11570 11571 11572 11573 11574 11575 11576 11577 11578 11579 11580 11581 11582 11583 11584 11585 11586 11587 11588 11589 11590 11591 11592 11593 11594 11595 11596 11597 11598 11599 11600 11601 11602 11603 11604 11605 11606 11607 11608 11609 11610 11611 11612 11613 11614 11615 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 11634 11635 11636 11637 11638 11639 11640 11641 11642 11643 11644 11645 11646 11647 11648 11649 11650 11651 11652 11653 11654 11655 11656 11657 11658 11659 11660 11661 11662 11663 11664 11665 11666 11667 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 11700 11701 11702 11703 11704 11705 11706 11707 11708 11709 11710 11711 11712 11713 11714 11715 11716 11717 11718 11719 11720 11721 11722 11723 11724 11725 11726 11727 11728 11729 11730 11731 11732 11733 11734 11735 11736 11737 11738 11739 11740 11741 11742 11743 11744 11745 11746 11747 11748 11749 11750 11751 11752 11753 11754 11755 11756 11757 11758 11759 11760 11761 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 11787 11788 11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 11893 11894 11895 11896 11897 11898 11899 11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 11965 11966 11967 11968 11969 11970 11971 11972 11973 11974 11975 11976 11977 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 11998 11999 12000 12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 13224 13225 13226 13227 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 13280 13281 13282 13283 13284 13285 13286 13287 13288 13289 13290 13291 13292 13293 13294 13295 13296 13297 13298 13299 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 13320 13321 13322 13323 13324 13325 13326 13327 13328 13329 13330 13331 13332 13333 13334 13335 13336 13337 13338 13339 13340 13341 13342 13343 13344 13345 13346 13347 13348 13349 13350 13351 13352 13353 13354 13355 13356 13357 13358 13359 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 13377 13378 13379 13380 13381 13382 13383 13384 13385 13386 13387 13388 13389 13390 13391 13392 13393 13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 13408 13409 13410 13411 13412 13413 13414 13415 13416 13417 13418 13419 13420 13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 13435 13436 13437 13438 13439 13440 13441 13442 13443 13444 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 13614 13615 13616 13617 13618 13619 13620 13621 13622 13623 13624 13625 13626 13627 13628 13629 13630 13631 13632 13633 13634 13635 13636 13637 13638 13639 13640 13641 13642 13643 13644 13645 13646 13647 13648 13649 13650 13651 13652 13653 13654 13655 13656 13657 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 13690 13691 13692 13693 13694 13695 13696 13697 13698 13699 13700 13701 13702 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 13713 13714 13715 13716 13717 13718 13719 13720 13721 13722 13723 13724 13725 13726 13727 13728 13729 13730 13731 13732 13733 13734 13735 13736 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 13802 13803 13804 13805 13806 13807 13808 13809 13810 13811 13812 13813 13814 13815 13816 13817 13818 13819 13820 13821 13822 13823 13824 13825 13826 13827 13828 13829 13830 13831 13832 13833 13834 13835 13836 13837 13838 13839 13840 13841 13842 13843 13844 13845 13846 13847 13848 13849 13850 13851 13852 13853 13854 13855 13856 13857 13858 13859 13860 13861 13862 13863 13864 13865 13866 13867 13868 13869 13870 13871 13872 13873 13874 13875 13876 13877 13878 13879 13880 13881 13882 13883 13884 13885 13886 13887 13888 13889 13890 13891 13892 13893 13894 13895 13896 13897 13898 13899 13900 13901 13902 13903 13904 13905 13906 13907 13908 13909 13910 13911 13912 13913 13914 13915 13916 13917 13918 13919 13920 13921 13922 13923 13924 13925 13926 13927 13928 13929 13930 13931 13932 13933 13934 13935 13936 13937 13938 13939 13940 13941 13942 13943 13944 13945 13946 13947 13948 13949 13950 13951 13952 13953 13954 13955 13956 13957 13958 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 14547 14548 14549 14550 14551 14552 14553 14554 14555 14556 14557 14558 14559 14560 14561 14562 14563 14564 14565 14566 14567 14568 14569 14570 14571 14572 14573 14574 14575 14576 14577 14578 14579 14580 14581 14582 14583 14584 14585 14586 14587 14588 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 14604 14605 14606 14607 14608 14609 14610 14611 14612 14613 14614 14615 14616 14617 14618 14619 14620 14621 14622 14623 14624 14625 14626 14627 14628 14629 14630 14631 14632 14633 14634 14635 14636 14637 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14648 14649 14650 14651 14652 14653 14654 14655 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 14682 14683 14684 14685 14686 14687 14688 14689 14690 14691 14692 14693 14694 14695 14696 14697 14698 14699 14700 14701 14702 14703 14704 14705 14706 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 14737 14738 14739 14740 14741 14742 14743 14744 14745 14746 14747 14748 14749 14750 14751 14752 14753 14754 14755 14756 14757 14758 14759 14760 14761 14762 14763 14764 14765 14766 14767 14768 14769 14770 14771 14772 14773 14774 14775 14776 14777 14778 14779 14780 14781 14782 14783 14784 14785 14786 14787 14788 14789 14790 14791 14792 14793 14794 14795 14796 14797 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989 15990 15991 15992 15993 15994 15995 15996 15997 15998 15999 16000 16001 16002 16003 16004 16005 16006 16007 16008 16009 16010 16011 16012 16013 16014 16015 16016 16017 16018 16019 16020 16021 16022 16023 16024 16025 16026 16027 16028 16029 16030 16031 16032 16033 16034 16035 16036 16037 16038 16039 16040 16041 16042 16043 16044 16045 16046 16047 16048 16049 16050 16051 16052 16053 16054 16055 16056 16057 16058 16059 16060 16061 16062 16063 16064 16065 16066 16067 16068 16069 16070 16071 16072 16073 16074 16075 16076 16077 16078 16079 16080 16081 16082 16083 16084 16085 16086 16087 16088 16089 16090 16091 16092 16093 16094 16095 16096 16097 16098 16099 16100 16101 16102 16103 16104 16105 16106 16107 16108 16109 16110 16111 16112 16113 16114 16115 16116 16117 16118 16119 16120 16121 16122 16123 16124 16125 16126 16127 16128 16129 16130 16131 16132 16133 16134 16135 16136 16137 16138 16139 16140 16141 16142 16143 16144 16145 16146 16147 16148 16149 16150 16151 16152 16153 16154 16155 16156 16157 16158 16159 16160 16161 16162 16163 16164 16165 16166 16167 16168 16169 16170 16171 16172 16173 16174 16175 16176 16177 16178 16179 16180 16181 16182 16183 16184 16185 16186 16187 16188 16189 16190 16191 16192 16193 16194 16195 16196 16197 16198 16199 16200 16201 16202 16203 16204 16205 16206 16207 16208 16209 16210 16211 16212 16213 16214 16215 16216 16217 16218 16219 16220 16221 16222 16223 16224 16225 16226 16227 16228 16229 16230 16231 16232 16233 16234 16235 16236 16237 16238 16239 16240 16241 16242 16243 16244 16245 16246 16247 16248 16249 16250 16251 16252 16253 16254 16255 16256 16257 16258 16259 16260 16261 16262 16263 16264 16265 16266 16267 16268 16269 16270 16271 16272 16273 16274 16275 16276 16277 16278 16279 16280 16281 16282 16283 16284 16285 16286 16287 16288 16289 16290 16291 16292 16293 16294 16295 16296 16297 16298 16299 16300 16301 16302 16303 16304 16305 16306 16307 16308 16309 16310 16311 16312 16313 16314 16315 16316 16317 16318 16319 16320 16321 16322 16323 16324 16325 16326 16327 16328 16329 16330 16331 16332 16333 16334 16335 16336 16337 16338 16339 16340 16341 16342 16343 16344 16345 16346 16347 16348 16349 16350 16351 16352 16353 16354 16355 16356 16357 16358 16359 16360 16361 16362 16363 16364 16365 16366 16367 16368 16369 16370 16371 16372 16373 16374 16375 16376 16377 16378 16379 16380 16381 16382 16383 16384 16385 16386 16387 16388 16389 16390 16391 16392 16393 16394 16395 16396 16397 16398 16399 16400 16401 16402 16403 16404 16405 16406 16407 16408 16409 16410 16411 16412 16413 16414 16415 16416 16417 16418 16419 16420 16421 16422 16423 16424 16425 16426 16427 16428 16429 16430 16431 16432 16433 16434 16435 16436 16437 16438 16439 16440 16441 16442 16443 16444 16445 16446 16447 16448 16449 16450 16451 16452 16453 16454 16455 16456 16457 16458 16459 16460 16461 16462 16463 16464 16465 16466 16467 16468 16469 16470 16471 16472 16473 16474 16475 16476 16477 16478 16479 16480 16481 16482 16483 16484 16485 16486 16487 16488 16489 16490 16491 16492 16493 16494 16495 16496 16497 16498 16499 16500 16501 16502 16503 16504 16505 16506 16507 16508 16509 16510 16511 16512 16513 16514 16515 16516 16517 16518 16519 16520 16521 16522 16523 16524 16525 16526 16527 16528 16529 16530 16531 16532 16533 16534 16535 16536 16537 16538 16539 16540 16541 16542 16543 16544 16545 16546 16547 16548 16549 16550 16551 16552 16553 16554 16555 16556 16557 16558 16559 16560 16561 16562 16563 16564 16565 16566 16567 16568 16569 16570 16571 16572 16573 16574 16575 16576 16577 16578 16579 16580 16581 16582 16583 16584 16585 16586 16587 16588 16589 16590 16591 16592 16593 16594 16595 16596 16597 16598 16599 16600 16601 16602 16603 16604 16605 16606 16607 16608 16609 16610 16611 16612 16613 16614 16615 16616 16617 16618 16619 16620 16621 16622 16623 16624 16625 16626 16627 16628 16629 16630 16631 16632 16633 16634 16635 16636 16637 16638 16639 16640 16641 16642 16643 16644 16645 16646 16647 16648 16649 16650 16651 16652 16653 16654 16655 16656 16657 16658 16659 16660 16661 16662 16663 16664 16665 16666 16667 16668 16669 16670 16671 16672 16673 16674 16675 16676 16677 16678 16679 16680 16681 16682 16683 16684 16685 16686 16687 16688 16689 16690 16691 16692 16693 16694 16695 16696 16697 16698 16699 167001x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x           1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                     1x 1x               1x 1x   1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x             1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x           1x 1x 1x 1x 1x 1x           1x 1x 1x 1x 1x 1x           1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
 
/***/ "./node_modules/ansi-html/index.js":
/*!*****************************************!*\
  !*** ./node_modules/ansi-html/index.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n  reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n  black: '000',\n  red: 'ff0000',\n  green: '209805',\n  yellow: 'e8bf03',\n  blue: '0000ff',\n  magenta: 'ff00ff',\n  cyan: '00ffee',\n  lightgrey: 'f0f0f0',\n  darkgrey: '888'\n}\nvar _styles = {\n  30: 'black',\n  31: 'red',\n  32: 'green',\n  33: 'yellow',\n  34: 'blue',\n  35: 'magenta',\n  36: 'cyan',\n  37: 'lightgrey'\n}\nvar _openTags = {\n  '1': 'font-weight:bold', // bold\n  '2': 'opacity:0.5', // dim\n  '3': '<i>', // italic\n  '4': '<u>', // underscore\n  '8': 'display:none', // hidden\n  '9': '<del>' // delete\n}\nvar _closeTags = {\n  '23': '</i>', // reset italic\n  '24': '</u>', // reset underscore\n  '29': '</del>' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n  _closeTags[n] = '</span>'\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n  // Returns the text if the string has no ANSI escape code.\n  if (!_regANSI.test(text)) {\n    return text\n  }\n\n  // Cache opened sequence.\n  var ansiCodes = []\n  // Replace with markup.\n  var ret = text.replace(/\\033\\[(\\d+)*m/g, function (match, seq) {\n    var ot = _openTags[seq]\n    if (ot) {\n      // If current sequence has been opened, close it.\n      if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n        ansiCodes.pop()\n        return '</span>'\n      }\n      // Open tag.\n      ansiCodes.push(seq)\n      return ot[0] === '<' ? ot : '<span style=\"' + ot + ';\">'\n    }\n\n    var ct = _closeTags[seq]\n    if (ct) {\n      // Pop sequence\n      ansiCodes.pop()\n      return ct\n    }\n    return ''\n  })\n\n  // Make sure tags are closed.\n  var l = ansiCodes.length\n  ;(l > 0) && (ret += Array(l + 1).join('</span>'))\n\n  return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n  if (typeof colors !== 'object') {\n    throw new Error('`colors` parameter must be an Object.')\n  }\n\n  var _finalColors = {}\n  for (var key in _defColors) {\n    var hex = colors.hasOwnProperty(key) ? colors[key] : null\n    if (!hex) {\n      _finalColors[key] = _defColors[key]\n      continue\n    }\n    if ('reset' === key) {\n      if (typeof hex === 'string') {\n        hex = [hex]\n      }\n      if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n        return typeof h !== 'string'\n      })) {\n        throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n      }\n      var defHexColor = _defColors[key]\n      if (!hex[0]) {\n        hex[0] = defHexColor[0]\n      }\n      if (hex.length === 1 || !hex[1]) {\n        hex = [hex[0]]\n        hex.push(defHexColor[1])\n      }\n\n      hex = hex.slice(0, 2)\n    } else if (typeof hex !== 'string') {\n      throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n    }\n    _finalColors[key] = hex\n  }\n  _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n  _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n  Object.defineProperty(ansiHTML.tags, 'open', {\n    get: function () { return _openTags }\n  })\n  Object.defineProperty(ansiHTML.tags, 'close', {\n    get: function () { return _closeTags }\n  })\n} else {\n  ansiHTML.tags.open = _openTags\n  ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n  // reset all\n  _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n  // inverse\n  _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n  // dark grey\n  _openTags['90'] = 'color:#' + colors.darkgrey\n\n  for (var code in _styles) {\n    var color = _styles[code]\n    var oriColor = colors[color] || '000'\n    _openTags[code] = 'color:#' + oriColor\n    code = parseInt(code)\n    _openTags[(code + 10).toString()] = 'background:#' + oriColor\n  }\n}\n\nansiHTML.reset()\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW5zaS1odG1sL2luZGV4LmpzPzRlMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQVk7O0FBRVo7O0FBRUE7QUFDQSxtREFBbUQsSUFBSSxTQUFTLE1BQU0sSUFBSTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLHNCQUFzQjtBQUN0QixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDLFVBQVUsK0JBQStCO0FBQ2hGO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9hbnNpLWh0bWwvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBhbnNpSFRNTFxuXG4vLyBSZWZlcmVuY2UgdG8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9hbnNpLXJlZ2V4XG52YXIgX3JlZ0FOU0kgPSAvKD86KD86XFx1MDAxYlxcWyl8XFx1MDA5YikoPzooPzpbMC05XXsxLDN9KT8oPzooPzo7WzAtOV17MCwzfSkqKT9bQS1NfGYtbV0pfFxcdTAwMWJbQS1NXS9cblxudmFyIF9kZWZDb2xvcnMgPSB7XG4gIHJlc2V0OiBbJ2ZmZicsICcwMDAnXSwgLy8gW0ZPUkVHUk9VRF9DT0xPUiwgQkFDS0dST1VORF9DT0xPUl1cbiAgYmxhY2s6ICcwMDAnLFxuICByZWQ6ICdmZjAwMDAnLFxuICBncmVlbjogJzIwOTgwNScsXG4gIHllbGxvdzogJ2U4YmYwMycsXG4gIGJsdWU6ICcwMDAwZmYnLFxuICBtYWdlbnRhOiAnZmYwMGZmJyxcbiAgY3lhbjogJzAwZmZlZScsXG4gIGxpZ2h0Z3JleTogJ2YwZjBmMCcsXG4gIGRhcmtncmV5OiAnODg4J1xufVxudmFyIF9zdHlsZXMgPSB7XG4gIDMwOiAnYmxhY2snLFxuICAzMTogJ3JlZCcsXG4gIDMyOiAnZ3JlZW4nLFxuICAzMzogJ3llbGxvdycsXG4gIDM0OiAnYmx1ZScsXG4gIDM1OiAnbWFnZW50YScsXG4gIDM2OiAnY3lhbicsXG4gIDM3OiAnbGlnaHRncmV5J1xufVxudmFyIF9vcGVuVGFncyA9IHtcbiAgJzEnOiAnZm9udC13ZWlnaHQ6Ym9sZCcsIC8vIGJvbGRcbiAgJzInOiAnb3BhY2l0eTowLjUnLCAvLyBkaW1cbiAgJzMnOiAnPGk+JywgLy8gaXRhbGljXG4gICc0JzogJzx1PicsIC8vIHVuZGVyc2NvcmVcbiAgJzgnOiAnZGlzcGxheTpub25lJywgLy8gaGlkZGVuXG4gICc5JzogJzxkZWw+JyAvLyBkZWxldGVcbn1cbnZhciBfY2xvc2VUYWdzID0ge1xuICAnMjMnOiAnPC9pPicsIC8vIHJlc2V0IGl0YWxpY1xuICAnMjQnOiAnPC91PicsIC8vIHJlc2V0IHVuZGVyc2NvcmVcbiAgJzI5JzogJzwvZGVsPicgLy8gcmVzZXQgZGVsZXRlXG59XG5cbjtbMCwgMjEsIDIyLCAyNywgMjgsIDM5LCA0OV0uZm9yRWFjaChmdW5jdGlvbiAobikge1xuICBfY2xvc2VUYWdzW25dID0gJzwvc3Bhbj4nXG59KVxuXG4vKipcbiAqIENvbnZlcnRzIHRleHQgd2l0aCBBTlNJIGNvbG9yIGNvZGVzIHRvIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHtTdHJpbmd9IHRleHRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBhbnNpSFRNTCAodGV4dCkge1xuICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGlmIHRoZSBzdHJpbmcgaGFzIG5vIEFOU0kgZXNjYXBlIGNvZGUuXG4gIGlmICghX3JlZ0FOU0kudGVzdCh0ZXh0KSkge1xuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICAvLyBDYWNoZSBvcGVuZWQgc2VxdWVuY2UuXG4gIHZhciBhbnNpQ29kZXMgPSBbXVxuICAvLyBSZXBsYWNlIHdpdGggbWFya3VwLlxuICB2YXIgcmV0ID0gdGV4dC5yZXBsYWNlKC9cXDAzM1xcWyhcXGQrKSptL2csIGZ1bmN0aW9uIChtYXRjaCwgc2VxKSB7XG4gICAgdmFyIG90ID0gX29wZW5UYWdzW3NlcV1cbiAgICBpZiAob3QpIHtcbiAgICAgIC8vIElmIGN1cnJlbnQgc2VxdWVuY2UgaGFzIGJlZW4gb3BlbmVkLCBjbG9zZSBpdC5cbiAgICAgIGlmICghIX5hbnNpQ29kZXMuaW5kZXhPZihzZXEpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXh0cmEtYm9vbGVhbi1jYXN0XG4gICAgICAgIGFuc2lDb2Rlcy5wb3AoKVxuICAgICAgICByZXR1cm4gJzwvc3Bhbj4nXG4gICAgICB9XG4gICAgICAvLyBPcGVuIHRhZy5cbiAgICAgIGFuc2lDb2Rlcy5wdXNoKHNlcSlcbiAgICAgIHJldHVybiBvdFswXSA9PT0gJzwnID8gb3QgOiAnPHNwYW4gc3R5bGU9XCInICsgb3QgKyAnO1wiPidcbiAgICB9XG5cbiAgICB2YXIgY3QgPSBfY2xvc2VUYWdzW3NlcV1cbiAgICBpZiAoY3QpIHtcbiAgICAgIC8vIFBvcCBzZXF1ZW5jZVxuICAgICAgYW5zaUNvZGVzLnBvcCgpXG4gICAgICByZXR1cm4gY3RcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH0pXG5cbiAgLy8gTWFrZSBzdXJlIHRhZ3MgYXJlIGNsb3NlZC5cbiAgdmFyIGwgPSBhbnNpQ29kZXMubGVuZ3RoXG4gIDsobCA+IDApICYmIChyZXQgKz0gQXJyYXkobCArIDEpLmpvaW4oJzwvc3Bhbj4nKSlcblxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogQ3VzdG9taXplIGNvbG9ycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb2xvcnMgcmVmZXJlbmNlIHRvIF9kZWZDb2xvcnNcbiAqL1xuYW5zaUhUTUwuc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICBpZiAodHlwZW9mIGNvbG9ycyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bjb2xvcnNgIHBhcmFtZXRlciBtdXN0IGJlIGFuIE9iamVjdC4nKVxuICB9XG5cbiAgdmFyIF9maW5hbENvbG9ycyA9IHt9XG4gIGZvciAodmFyIGtleSBpbiBfZGVmQ29sb3JzKSB7XG4gICAgdmFyIGhleCA9IGNvbG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpID8gY29sb3JzW2tleV0gOiBudWxsXG4gICAgaWYgKCFoZXgpIHtcbiAgICAgIF9maW5hbENvbG9yc1trZXldID0gX2RlZkNvbG9yc1trZXldXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoJ3Jlc2V0JyA9PT0ga2V5KSB7XG4gICAgICBpZiAodHlwZW9mIGhleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGV4ID0gW2hleF1cbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShoZXgpIHx8IGhleC5sZW5ndGggPT09IDAgfHwgaGV4LnNvbWUoZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBoICE9PSAnc3RyaW5nJ1xuICAgICAgfSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdmFsdWUgb2YgYCcgKyBrZXkgKyAnYCBwcm9wZXJ0eSBtdXN0IGJlIGFuIEFycmF5IGFuZCBlYWNoIGl0ZW0gY291bGQgb25seSBiZSBhIGhleCBzdHJpbmcsIGUuZy46IEZGMDAwMCcpXG4gICAgICB9XG4gICAgICB2YXIgZGVmSGV4Q29sb3IgPSBfZGVmQ29sb3JzW2tleV1cbiAgICAgIGlmICghaGV4WzBdKSB7XG4gICAgICAgIGhleFswXSA9IGRlZkhleENvbG9yWzBdXG4gICAgICB9XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSB8fCAhaGV4WzFdKSB7XG4gICAgICAgIGhleCA9IFtoZXhbMF1dXG4gICAgICAgIGhleC5wdXNoKGRlZkhleENvbG9yWzFdKVxuICAgICAgfVxuXG4gICAgICBoZXggPSBoZXguc2xpY2UoMCwgMilcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBvZiBgJyArIGtleSArICdgIHByb3BlcnR5IG11c3QgYmUgYSBoZXggc3RyaW5nLCBlLmcuOiBGRjAwMDAnKVxuICAgIH1cbiAgICBfZmluYWxDb2xvcnNba2V5XSA9IGhleFxuICB9XG4gIF9zZXRUYWdzKF9maW5hbENvbG9ycylcbn1cblxuLyoqXG4gKiBSZXNldCBjb2xvcnMuXG4gKi9cbmFuc2lIVE1MLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICBfc2V0VGFncyhfZGVmQ29sb3JzKVxufVxuXG4vKipcbiAqIEV4cG9zZSB0YWdzLCBpbmNsdWRpbmcgb3BlbiBhbmQgY2xvc2UuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5hbnNpSFRNTC50YWdzID0ge31cblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ29wZW4nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfb3BlblRhZ3MgfVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ2Nsb3NlJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX2Nsb3NlVGFncyB9XG4gIH0pXG59IGVsc2Uge1xuICBhbnNpSFRNTC50YWdzLm9wZW4gPSBfb3BlblRhZ3NcbiAgYW5zaUhUTUwudGFncy5jbG9zZSA9IF9jbG9zZVRhZ3Ncbn1cblxuZnVuY3Rpb24gX3NldFRhZ3MgKGNvbG9ycykge1xuICAvLyByZXNldCBhbGxcbiAgX29wZW5UYWdzWycwJ10gPSAnZm9udC13ZWlnaHQ6bm9ybWFsO29wYWNpdHk6MTtjb2xvcjojJyArIGNvbG9ycy5yZXNldFswXSArICc7YmFja2dyb3VuZDojJyArIGNvbG9ycy5yZXNldFsxXVxuICAvLyBpbnZlcnNlXG4gIF9vcGVuVGFnc1snNyddID0gJ2NvbG9yOiMnICsgY29sb3JzLnJlc2V0WzFdICsgJztiYWNrZ3JvdW5kOiMnICsgY29sb3JzLnJlc2V0WzBdXG4gIC8vIGRhcmsgZ3JleVxuICBfb3BlblRhZ3NbJzkwJ10gPSAnY29sb3I6IycgKyBjb2xvcnMuZGFya2dyZXlcblxuICBmb3IgKHZhciBjb2RlIGluIF9zdHlsZXMpIHtcbiAgICB2YXIgY29sb3IgPSBfc3R5bGVzW2NvZGVdXG4gICAgdmFyIG9yaUNvbG9yID0gY29sb3JzW2NvbG9yXSB8fCAnMDAwJ1xuICAgIF9vcGVuVGFnc1tjb2RlXSA9ICdjb2xvcjojJyArIG9yaUNvbG9yXG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUpXG4gICAgX29wZW5UYWdzWyhjb2RlICsgMTApLnRvU3RyaW5nKCldID0gJ2JhY2tncm91bmQ6IycgKyBvcmlDb2xvclxuICB9XG59XG5cbmFuc2lIVE1MLnJlc2V0KClcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ansi-html/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/ansi-regex/index.js":
/*!******************************************!*\
  !*** ./node_modules/ansi-regex/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\nmodule.exports = function () {\n\treturn /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcz85ZWVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2QkFBNkIsWUFBWSxJQUFJLElBQUksTUFBTSxJQUFJO0FBQzNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLVBSWmNmLW5xcnk9PjxdL2c7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ansi-regex/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/eventemitter3/index.js":
/*!*********************************************!*\
  !*** ./node_modules/eventemitter3/index.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif (true) {\n  module.exports = EventEmitter;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcz9iYTEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLEVBQUU7QUFDYixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5REFBeUQsT0FBTztBQUNoRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsZUFBZSxZQUFZO0FBQzNCOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNELCtEQUErRDtBQUMvRCxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFO0FBQ0EsMERBQTBELFNBQVM7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsU0FBUztBQUNwQixXQUFXLEVBQUU7QUFDYixhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDJEQUEyRCxZQUFZO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBNkI7QUFDakM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/eventemitter3/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/events/events.js":
/*!***************************************!*\
  !*** ./node_modules/events/events.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = $getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  var args = [];\n  for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    ReflectApply(this.listener, this.target, args);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcz9mYWExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0MsUUFBUTtBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSx5QkFBeUI7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gJGdldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gJGdldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9ICRnZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBSZWZsZWN0QXBwbHkodGhpcy5saXN0ZW5lciwgdGhpcy50YXJnZXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/events/events.js\n");

/***/ }),
 
/***/ "./node_modules/html-entities/index.js":
/*!*********************************************!*\
  !*** ./node_modules/html-entities/index.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("module.exports = {\n  XmlEntities: __webpack_require__(/*! ./lib/xml-entities.js */ \"./node_modules/html-entities/lib/xml-entities.js\"),\n  Html4Entities: __webpack_require__(/*! ./lib/html4-entities.js */ \"./node_modules/html-entities/lib/html4-entities.js\"),\n  Html5Entities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\"),\n  AllHtmlEntities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\")\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9pbmRleC5qcz84MmM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLCtFQUF1QjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBeUI7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsbUZBQXlCO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG1GQUF5QjtBQUNwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9odG1sLWVudGl0aWVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhtbEVudGl0aWVzOiByZXF1aXJlKCcuL2xpYi94bWwtZW50aXRpZXMuanMnKSxcbiAgSHRtbDRFbnRpdGllczogcmVxdWlyZSgnLi9saWIvaHRtbDQtZW50aXRpZXMuanMnKSxcbiAgSHRtbDVFbnRpdGllczogcmVxdWlyZSgnLi9saWIvaHRtbDUtZW50aXRpZXMuanMnKSxcbiAgQWxsSHRtbEVudGl0aWVzOiByZXF1aXJlKCcuL2xpYi9odG1sNS1lbnRpdGllcy5qcycpXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/html-entities/lib/html4-entities.js":
/*!**********************************************************!*\
  !*** ./node_modules/html-entities/lib/html4-entities.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];\nvar HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];\n\nvar alphaIndex = {};\nvar numIndex = {};\n\nvar i = 0;\nvar length = HTML_ALPHA.length;\nwhile (i < length) {\n    var a = HTML_ALPHA[i];\n    var c = HTML_CODES[i];\n    alphaIndex[a] = String.fromCharCode(c);\n    numIndex[c] = a;\n    i++;\n}\n\n/**\n * @constructor\n */\nfunction Html4Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.decode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n        var chr;\n        if (entity.charAt(0) === \"#\") {\n            var code = entity.charAt(1).toLowerCase() === 'x' ?\n                parseInt(entity.substr(2), 16) :\n                parseInt(entity.substr(1));\n\n            if (!(isNaN(code) || code < -32768 || code > 65535)) {\n                chr = String.fromCharCode(code);\n            }\n        } else {\n            chr = alphaIndex[entity];\n        }\n        return chr || s;\n    });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.decode = function(str) {\n    return new Html4Entities().decode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var alpha = numIndex[str.charCodeAt(i)];\n        result += alpha ? \"&\" + alpha + \";\" : str.charAt(i);\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encode = function(str) {\n    return new Html4Entities().encode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonUTF = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var cc = str.charCodeAt(i);\n        var alpha = numIndex[cc];\n        if (alpha) {\n            result += \"&\" + alpha + \";\";\n        } else if (cc < 32 || cc > 126) {\n            result += \"&#\" + cc + \";\";\n        } else {\n            result += str.charAt(i);\n        }\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonUTF = function(str) {\n    return new Html4Entities().encodeNonUTF(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonASCII = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var c = str.charCodeAt(i);\n        if (c <= 255) {\n            result += str[i++];\n            continue;\n        }\n        result += '&#' + c + ';';\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonASCII = function(str) {\n    return new Html4Entities().encodeNonASCII(str);\n};\n\nmodule.exports = Html4Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDQtZW50aXRpZXMuanM/MWYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLFNBQVM7QUFDVCxvQ0FBb0M7QUFDcEMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL2h0bWw0LWVudGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEhUTUxfQUxQSEEgPSBbJ2Fwb3MnLCAnbmJzcCcsICdpZXhjbCcsICdjZW50JywgJ3BvdW5kJywgJ2N1cnJlbicsICd5ZW4nLCAnYnJ2YmFyJywgJ3NlY3QnLCAndW1sJywgJ2NvcHknLCAnb3JkZicsICdsYXF1bycsICdub3QnLCAnc2h5JywgJ3JlZycsICdtYWNyJywgJ2RlZycsICdwbHVzbW4nLCAnc3VwMicsICdzdXAzJywgJ2FjdXRlJywgJ21pY3JvJywgJ3BhcmEnLCAnbWlkZG90JywgJ2NlZGlsJywgJ3N1cDEnLCAnb3JkbScsICdyYXF1bycsICdmcmFjMTQnLCAnZnJhYzEyJywgJ2ZyYWMzNCcsICdpcXVlc3QnLCAnQWdyYXZlJywgJ0FhY3V0ZScsICdBY2lyYycsICdBdGlsZGUnLCAnQXVtbCcsICdBcmluZycsICdBZWxpZycsICdDY2VkaWwnLCAnRWdyYXZlJywgJ0VhY3V0ZScsICdFY2lyYycsICdFdW1sJywgJ0lncmF2ZScsICdJYWN1dGUnLCAnSWNpcmMnLCAnSXVtbCcsICdFVEgnLCAnTnRpbGRlJywgJ09ncmF2ZScsICdPYWN1dGUnLCAnT2NpcmMnLCAnT3RpbGRlJywgJ091bWwnLCAndGltZXMnLCAnT3NsYXNoJywgJ1VncmF2ZScsICdVYWN1dGUnLCAnVWNpcmMnLCAnVXVtbCcsICdZYWN1dGUnLCAnVEhPUk4nLCAnc3psaWcnLCAnYWdyYXZlJywgJ2FhY3V0ZScsICdhY2lyYycsICdhdGlsZGUnLCAnYXVtbCcsICdhcmluZycsICdhZWxpZycsICdjY2VkaWwnLCAnZWdyYXZlJywgJ2VhY3V0ZScsICdlY2lyYycsICdldW1sJywgJ2lncmF2ZScsICdpYWN1dGUnLCAnaWNpcmMnLCAnaXVtbCcsICdldGgnLCAnbnRpbGRlJywgJ29ncmF2ZScsICdvYWN1dGUnLCAnb2NpcmMnLCAnb3RpbGRlJywgJ291bWwnLCAnZGl2aWRlJywgJ29zbGFzaCcsICd1Z3JhdmUnLCAndWFjdXRlJywgJ3VjaXJjJywgJ3V1bWwnLCAneWFjdXRlJywgJ3Rob3JuJywgJ3l1bWwnLCAncXVvdCcsICdhbXAnLCAnbHQnLCAnZ3QnLCAnT0VsaWcnLCAnb2VsaWcnLCAnU2Nhcm9uJywgJ3NjYXJvbicsICdZdW1sJywgJ2NpcmMnLCAndGlsZGUnLCAnZW5zcCcsICdlbXNwJywgJ3RoaW5zcCcsICd6d25qJywgJ3p3aicsICdscm0nLCAncmxtJywgJ25kYXNoJywgJ21kYXNoJywgJ2xzcXVvJywgJ3JzcXVvJywgJ3NicXVvJywgJ2xkcXVvJywgJ3JkcXVvJywgJ2JkcXVvJywgJ2RhZ2dlcicsICdEYWdnZXInLCAncGVybWlsJywgJ2xzYXF1bycsICdyc2FxdW8nLCAnZXVybycsICdmbm9mJywgJ0FscGhhJywgJ0JldGEnLCAnR2FtbWEnLCAnRGVsdGEnLCAnRXBzaWxvbicsICdaZXRhJywgJ0V0YScsICdUaGV0YScsICdJb3RhJywgJ0thcHBhJywgJ0xhbWJkYScsICdNdScsICdOdScsICdYaScsICdPbWljcm9uJywgJ1BpJywgJ1JobycsICdTaWdtYScsICdUYXUnLCAnVXBzaWxvbicsICdQaGknLCAnQ2hpJywgJ1BzaScsICdPbWVnYScsICdhbHBoYScsICdiZXRhJywgJ2dhbW1hJywgJ2RlbHRhJywgJ2Vwc2lsb24nLCAnemV0YScsICdldGEnLCAndGhldGEnLCAnaW90YScsICdrYXBwYScsICdsYW1iZGEnLCAnbXUnLCAnbnUnLCAneGknLCAnb21pY3JvbicsICdwaScsICdyaG8nLCAnc2lnbWFmJywgJ3NpZ21hJywgJ3RhdScsICd1cHNpbG9uJywgJ3BoaScsICdjaGknLCAncHNpJywgJ29tZWdhJywgJ3RoZXRhc3ltJywgJ3Vwc2loJywgJ3BpdicsICdidWxsJywgJ2hlbGxpcCcsICdwcmltZScsICdQcmltZScsICdvbGluZScsICdmcmFzbCcsICd3ZWllcnAnLCAnaW1hZ2UnLCAncmVhbCcsICd0cmFkZScsICdhbGVmc3ltJywgJ2xhcnInLCAndWFycicsICdyYXJyJywgJ2RhcnInLCAnaGFycicsICdjcmFycicsICdsQXJyJywgJ3VBcnInLCAnckFycicsICdkQXJyJywgJ2hBcnInLCAnZm9yYWxsJywgJ3BhcnQnLCAnZXhpc3QnLCAnZW1wdHknLCAnbmFibGEnLCAnaXNpbicsICdub3RpbicsICduaScsICdwcm9kJywgJ3N1bScsICdtaW51cycsICdsb3dhc3QnLCAncmFkaWMnLCAncHJvcCcsICdpbmZpbicsICdhbmcnLCAnYW5kJywgJ29yJywgJ2NhcCcsICdjdXAnLCAnaW50JywgJ3RoZXJlNCcsICdzaW0nLCAnY29uZycsICdhc3ltcCcsICduZScsICdlcXVpdicsICdsZScsICdnZScsICdzdWInLCAnc3VwJywgJ25zdWInLCAnc3ViZScsICdzdXBlJywgJ29wbHVzJywgJ290aW1lcycsICdwZXJwJywgJ3Nkb3QnLCAnbGNlaWwnLCAncmNlaWwnLCAnbGZsb29yJywgJ3JmbG9vcicsICdsYW5nJywgJ3JhbmcnLCAnbG96JywgJ3NwYWRlcycsICdjbHVicycsICdoZWFydHMnLCAnZGlhbXMnXTtcbnZhciBIVE1MX0NPREVTID0gWzM5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAzNCwgMzgsIDYwLCA2MiwgMzM4LCAzMzksIDM1MiwgMzUzLCAzNzYsIDcxMCwgNzMyLCA4MTk0LCA4MTk1LCA4MjAxLCA4MjA0LCA4MjA1LCA4MjA2LCA4MjA3LCA4MjExLCA4MjEyLCA4MjE2LCA4MjE3LCA4MjE4LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjQwLCA4MjQ5LCA4MjUwLCA4MzY0LCA0MDIsIDkxMywgOTE0LCA5MTUsIDkxNiwgOTE3LCA5MTgsIDkxOSwgOTIwLCA5MjEsIDkyMiwgOTIzLCA5MjQsIDkyNSwgOTI2LCA5MjcsIDkyOCwgOTI5LCA5MzEsIDkzMiwgOTMzLCA5MzQsIDkzNSwgOTM2LCA5MzcsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTc3LCA5NzgsIDk4MiwgODIyNiwgODIzMCwgODI0MiwgODI0MywgODI1NCwgODI2MCwgODQ3MiwgODQ2NSwgODQ3NiwgODQ4MiwgODUwMSwgODU5MiwgODU5MywgODU5NCwgODU5NSwgODU5NiwgODYyOSwgODY1NiwgODY1NywgODY1OCwgODY1OSwgODY2MCwgODcwNCwgODcwNiwgODcwNywgODcwOSwgODcxMSwgODcxMiwgODcxMywgODcxNSwgODcxOSwgODcyMSwgODcyMiwgODcyNywgODczMCwgODczMywgODczNCwgODczNiwgODc0MywgODc0NCwgODc0NSwgODc0NiwgODc0NywgODc1NiwgODc2NCwgODc3MywgODc3NiwgODgwMCwgODgwMSwgODgwNCwgODgwNSwgODgzNCwgODgzNSwgODgzNiwgODgzOCwgODgzOSwgODg1MywgODg1NSwgODg2OSwgODkwMSwgODk2OCwgODk2OSwgODk3MCwgODk3MSwgOTAwMSwgOTAwMiwgOTY3NCwgOTgyNCwgOTgyNywgOTgyOSwgOTgzMF07XG5cbnZhciBhbHBoYUluZGV4ID0ge307XG52YXIgbnVtSW5kZXggPSB7fTtcblxudmFyIGkgPSAwO1xudmFyIGxlbmd0aCA9IEhUTUxfQUxQSEEubGVuZ3RoO1xud2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICB2YXIgYSA9IEhUTUxfQUxQSEFbaV07XG4gICAgdmFyIGMgPSBIVE1MX0NPREVTW2ldO1xuICAgIGFscGhhSW5kZXhbYV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgIG51bUluZGV4W2NdID0gYTtcbiAgICBpKys7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEh0bWw0RW50aXRpZXMoKSB7fVxuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mKCM/W1xcd1xcZF0rKTs/L2csIGZ1bmN0aW9uKHMsIGVudGl0eSkge1xuICAgICAgICB2YXIgY2hyO1xuICAgICAgICBpZiAoZW50aXR5LmNoYXJBdCgwKSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gZW50aXR5LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAneCcgP1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGVudGl0eS5zdWJzdHIoMiksIDE2KSA6XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoZW50aXR5LnN1YnN0cigxKSk7XG5cbiAgICAgICAgICAgIGlmICghKGlzTmFOKGNvZGUpIHx8IGNvZGUgPCAtMzI3NjggfHwgY29kZSA+IDY1NTM1KSkge1xuICAgICAgICAgICAgICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHIgPSBhbHBoYUluZGV4W2VudGl0eV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNociB8fCBzO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNEVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSHRtbDRFbnRpdGllcygpLmRlY29kZShzdHIpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNEVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGFscGhhID0gbnVtSW5kZXhbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgICAgICByZXN1bHQgKz0gYWxwaGEgPyBcIiZcIiArIGFscGhhICsgXCI7XCIgOiBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNEVudGl0aWVzKCkuZW5jb2RlKHN0cik7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgY2MgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGFscGhhID0gbnVtSW5kZXhbY2NdO1xuICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiZcIiArIGFscGhhICsgXCI7XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY2MgPCAzMiB8fCBjYyA+IDEyNikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IFwiJiNcIiArIGNjICsgXCI7XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNEVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDw9IDI1NSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHN0cltpKytdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9ICcmIycgKyBjICsgJzsnO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IEh0bWw0RW50aXRpZXMoKS5lbmNvZGVOb25BU0NJSShzdHIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIdG1sNEVudGl0aWVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html4-entities.js\n");
 
/***/ }),
 
/***/ "./node_modules/html-entities/lib/html5-entities.js":
/*!**********************************************************!*\
  !*** ./node_modules/html-entities/lib/html5-entities.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];\n\nvar alphaIndex = {};\nvar charIndex = {};\n\ncreateIndexes(alphaIndex, charIndex);\n\n/**\n * @constructor\n */\nfunction Html5Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.decode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n        var chr;\n        if (entity.charAt(0) === \"#\") {\n            var code = entity.charAt(1) === 'x' ?\n                parseInt(entity.substr(2).toLowerCase(), 16) :\n                parseInt(entity.substr(1));\n\n            if (!(isNaN(code) || code < -32768 || code > 65535)) {\n                chr = String.fromCharCode(code);\n            }\n        } else {\n            chr = alphaIndex[entity];\n        }\n        return chr || s;\n    });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.decode = function(str) {\n    return new Html5Entities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var charInfo = charIndex[str.charCodeAt(i)];\n        if (charInfo) {\n            var alpha = charInfo[str.charCodeAt(i + 1)];\n            if (alpha) {\n                i++;\n            } else {\n                alpha = charInfo[''];\n            }\n            if (alpha) {\n                result += \"&\" + alpha + \";\";\n                i++;\n                continue;\n            }\n        }\n        result += str.charAt(i);\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encode = function(str) {\n    return new Html5Entities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonUTF = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var c = str.charCodeAt(i);\n        var charInfo = charIndex[c];\n        if (charInfo) {\n            var alpha = charInfo[str.charCodeAt(i + 1)];\n            if (alpha) {\n                i++;\n            } else {\n                alpha = charInfo[''];\n            }\n            if (alpha) {\n                result += \"&\" + alpha + \";\";\n                i++;\n                continue;\n            }\n        }\n        if (c < 32 || c > 126) {\n            result += '&#' + c + ';';\n        } else {\n            result += str.charAt(i);\n        }\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonUTF = function(str) {\n    return new Html5Entities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonASCII = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var c = str.charCodeAt(i);\n        if (c <= 255) {\n            result += str[i++];\n            continue;\n        }\n        result += '&#' + c + ';';\n        i++\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonASCII = function(str) {\n    return new Html5Entities().encodeNonASCII(str);\n };\n\n/**\n * @param {Object} alphaIndex Passed by reference.\n * @param {Object} charIndex Passed by reference.\n */\nfunction createIndexes(alphaIndex, charIndex) {\n    var i = ENTITIES.length;\n    var _results = [];\n    while (i--) {\n        var e = ENTITIES[i];\n        var alpha = e[0];\n        var chars = e[1];\n        var chr = chars[0];\n        var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;\n        var charInfo;\n        if (addChar) {\n            charInfo = charIndex[chr] = charIndex[chr] || {};\n        }\n        if (chars[1]) {\n            var chr2 = chars[1];\n            alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);\n            _results.push(addChar && (charInfo[chr2] = alpha));\n        } else {\n            alphaIndex[alpha] = String.fromCharCode(chr);\n            _results.push(addChar && (charInfo[''] = alpha));\n        }\n    }\n}\n\nmodule.exports = Html5Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDUtZW50aXRpZXMuanM/MTdmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL2h0bWw1LWVudGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEVOVElUSUVTID0gW1snQWFjdXRlJywgWzE5M11dLCBbJ2FhY3V0ZScsIFsyMjVdXSwgWydBYnJldmUnLCBbMjU4XV0sIFsnYWJyZXZlJywgWzI1OV1dLCBbJ2FjJywgWzg3NjZdXSwgWydhY2QnLCBbODc2N11dLCBbJ2FjRScsIFs4NzY2LCA4MTldXSwgWydBY2lyYycsIFsxOTRdXSwgWydhY2lyYycsIFsyMjZdXSwgWydhY3V0ZScsIFsxODBdXSwgWydBY3knLCBbMTA0MF1dLCBbJ2FjeScsIFsxMDcyXV0sIFsnQUVsaWcnLCBbMTk4XV0sIFsnYWVsaWcnLCBbMjMwXV0sIFsnYWYnLCBbODI4OV1dLCBbJ0FmcicsIFsxMjAwNjhdXSwgWydhZnInLCBbMTIwMDk0XV0sIFsnQWdyYXZlJywgWzE5Ml1dLCBbJ2FncmF2ZScsIFsyMjRdXSwgWydhbGVmc3ltJywgWzg1MDFdXSwgWydhbGVwaCcsIFs4NTAxXV0sIFsnQWxwaGEnLCBbOTEzXV0sIFsnYWxwaGEnLCBbOTQ1XV0sIFsnQW1hY3InLCBbMjU2XV0sIFsnYW1hY3InLCBbMjU3XV0sIFsnYW1hbGcnLCBbMTA4MTVdXSwgWydhbXAnLCBbMzhdXSwgWydBTVAnLCBbMzhdXSwgWydhbmRhbmQnLCBbMTA4MzddXSwgWydBbmQnLCBbMTA4MzVdXSwgWydhbmQnLCBbODc0M11dLCBbJ2FuZGQnLCBbMTA4NDRdXSwgWydhbmRzbG9wZScsIFsxMDg0MF1dLCBbJ2FuZHYnLCBbMTA4NDJdXSwgWydhbmcnLCBbODczNl1dLCBbJ2FuZ2UnLCBbMTA2NjBdXSwgWydhbmdsZScsIFs4NzM2XV0sIFsnYW5nbXNkYWEnLCBbMTA2NjRdXSwgWydhbmdtc2RhYicsIFsxMDY2NV1dLCBbJ2FuZ21zZGFjJywgWzEwNjY2XV0sIFsnYW5nbXNkYWQnLCBbMTA2NjddXSwgWydhbmdtc2RhZScsIFsxMDY2OF1dLCBbJ2FuZ21zZGFmJywgWzEwNjY5XV0sIFsnYW5nbXNkYWcnLCBbMTA2NzBdXSwgWydhbmdtc2RhaCcsIFsxMDY3MV1dLCBbJ2FuZ21zZCcsIFs4NzM3XV0sIFsnYW5ncnQnLCBbODczNV1dLCBbJ2FuZ3J0dmInLCBbODg5NF1dLCBbJ2FuZ3J0dmJkJywgWzEwNjUzXV0sIFsnYW5nc3BoJywgWzg3MzhdXSwgWydhbmdzdCcsIFsxOTddXSwgWydhbmd6YXJyJywgWzkwODRdXSwgWydBb2dvbicsIFsyNjBdXSwgWydhb2dvbicsIFsyNjFdXSwgWydBb3BmJywgWzEyMDEyMF1dLCBbJ2FvcGYnLCBbMTIwMTQ2XV0sIFsnYXBhY2lyJywgWzEwODYzXV0sIFsnYXAnLCBbODc3Nl1dLCBbJ2FwRScsIFsxMDg2NF1dLCBbJ2FwZScsIFs4Nzc4XV0sIFsnYXBpZCcsIFs4Nzc5XV0sIFsnYXBvcycsIFszOV1dLCBbJ0FwcGx5RnVuY3Rpb24nLCBbODI4OV1dLCBbJ2FwcHJveCcsIFs4Nzc2XV0sIFsnYXBwcm94ZXEnLCBbODc3OF1dLCBbJ0FyaW5nJywgWzE5N11dLCBbJ2FyaW5nJywgWzIyOV1dLCBbJ0FzY3InLCBbMTE5OTY0XV0sIFsnYXNjcicsIFsxMTk5OTBdXSwgWydBc3NpZ24nLCBbODc4OF1dLCBbJ2FzdCcsIFs0Ml1dLCBbJ2FzeW1wJywgWzg3NzZdXSwgWydhc3ltcGVxJywgWzg3ODFdXSwgWydBdGlsZGUnLCBbMTk1XV0sIFsnYXRpbGRlJywgWzIyN11dLCBbJ0F1bWwnLCBbMTk2XV0sIFsnYXVtbCcsIFsyMjhdXSwgWydhd2NvbmludCcsIFs4NzU1XV0sIFsnYXdpbnQnLCBbMTA3NjldXSwgWydiYWNrY29uZycsIFs4NzgwXV0sIFsnYmFja2Vwc2lsb24nLCBbMTAxNF1dLCBbJ2JhY2twcmltZScsIFs4MjQ1XV0sIFsnYmFja3NpbScsIFs4NzY1XV0sIFsnYmFja3NpbWVxJywgWzg5MDldXSwgWydCYWNrc2xhc2gnLCBbODcyNl1dLCBbJ0JhcnYnLCBbMTA5ODNdXSwgWydiYXJ2ZWUnLCBbODg5M11dLCBbJ2JhcndlZCcsIFs4OTY1XV0sIFsnQmFyd2VkJywgWzg5NjZdXSwgWydiYXJ3ZWRnZScsIFs4OTY1XV0sIFsnYmJyaycsIFs5MTQxXV0sIFsnYmJya3RicmsnLCBbOTE0Ml1dLCBbJ2Jjb25nJywgWzg3ODBdXSwgWydCY3knLCBbMTA0MV1dLCBbJ2JjeScsIFsxMDczXV0sIFsnYmRxdW8nLCBbODIyMl1dLCBbJ2JlY2F1cycsIFs4NzU3XV0sIFsnYmVjYXVzZScsIFs4NzU3XV0sIFsnQmVjYXVzZScsIFs4NzU3XV0sIFsnYmVtcHR5dicsIFsxMDY3Ml1dLCBbJ2JlcHNpJywgWzEwMTRdXSwgWydiZXJub3UnLCBbODQ5Ml1dLCBbJ0Jlcm5vdWxsaXMnLCBbODQ5Ml1dLCBbJ0JldGEnLCBbOTE0XV0sIFsnYmV0YScsIFs5NDZdXSwgWydiZXRoJywgWzg1MDJdXSwgWydiZXR3ZWVuJywgWzg4MTJdXSwgWydCZnInLCBbMTIwMDY5XV0sIFsnYmZyJywgWzEyMDA5NV1dLCBbJ2JpZ2NhcCcsIFs4ODk4XV0sIFsnYmlnY2lyYycsIFs5NzExXV0sIFsnYmlnY3VwJywgWzg4OTldXSwgWydiaWdvZG90JywgWzEwNzUyXV0sIFsnYmlnb3BsdXMnLCBbMTA3NTNdXSwgWydiaWdvdGltZXMnLCBbMTA3NTRdXSwgWydiaWdzcWN1cCcsIFsxMDc1OF1dLCBbJ2JpZ3N0YXInLCBbOTczM11dLCBbJ2JpZ3RyaWFuZ2xlZG93bicsIFs5NjYxXV0sIFsnYmlndHJpYW5nbGV1cCcsIFs5NjUxXV0sIFsnYmlndXBsdXMnLCBbMTA3NTZdXSwgWydiaWd2ZWUnLCBbODg5N11dLCBbJ2JpZ3dlZGdlJywgWzg4OTZdXSwgWydia2Fyb3cnLCBbMTA1MDldXSwgWydibGFja2xvemVuZ2UnLCBbMTA3MzFdXSwgWydibGFja3NxdWFyZScsIFs5NjQyXV0sIFsnYmxhY2t0cmlhbmdsZScsIFs5NjUyXV0sIFsnYmxhY2t0cmlhbmdsZWRvd24nLCBbOTY2Ml1dLCBbJ2JsYWNrdHJpYW5nbGVsZWZ0JywgWzk2NjZdXSwgWydibGFja3RyaWFuZ2xlcmlnaHQnLCBbOTY1Nl1dLCBbJ2JsYW5rJywgWzkyNTFdXSwgWydibGsxMicsIFs5NjE4XV0sIFsnYmxrMTQnLCBbOTYxN11dLCBbJ2JsazM0JywgWzk2MTldXSwgWydibG9jaycsIFs5NjA4XV0sIFsnYm5lJywgWzYxLCA4NDIxXV0sIFsnYm5lcXVpdicsIFs4ODAxLCA4NDIxXV0sIFsnYk5vdCcsIFsxMDk4OV1dLCBbJ2Jub3QnLCBbODk3Nl1dLCBbJ0JvcGYnLCBbMTIwMTIxXV0sIFsnYm9wZicsIFsxMjAxNDddXSwgWydib3QnLCBbODg2OV1dLCBbJ2JvdHRvbScsIFs4ODY5XV0sIFsnYm93dGllJywgWzg5MDRdXSwgWydib3hib3gnLCBbMTA2OTddXSwgWydib3hkbCcsIFs5NDg4XV0sIFsnYm94ZEwnLCBbOTU1N11dLCBbJ2JveERsJywgWzk1NThdXSwgWydib3hETCcsIFs5NTU5XV0sIFsnYm94ZHInLCBbOTQ4NF1dLCBbJ2JveGRSJywgWzk1NTRdXSwgWydib3hEcicsIFs5NTU1XV0sIFsnYm94RFInLCBbOTU1Nl1dLCBbJ2JveGgnLCBbOTQ3Ml1dLCBbJ2JveEgnLCBbOTU1Ml1dLCBbJ2JveGhkJywgWzk1MTZdXSwgWydib3hIZCcsIFs5NTcyXV0sIFsnYm94aEQnLCBbOTU3M11dLCBbJ2JveEhEJywgWzk1NzRdXSwgWydib3hodScsIFs5NTI0XV0sIFsnYm94SHUnLCBbOTU3NV1dLCBbJ2JveGhVJywgWzk1NzZdXSwgWydib3hIVScsIFs5NTc3XV0sIFsnYm94bWludXMnLCBbODg2M11dLCBbJ2JveHBsdXMnLCBbODg2Ml1dLCBbJ2JveHRpbWVzJywgWzg4NjRdXSwgWydib3h1bCcsIFs5NDk2XV0sIFsnYm94dUwnLCBbOTU2M11dLCBbJ2JveFVsJywgWzk1NjRdXSwgWydib3hVTCcsIFs5NTY1XV0sIFsnYm94dXInLCBbOTQ5Ml1dLCBbJ2JveHVSJywgWzk1NjBdXSwgWydib3hVcicsIFs5NTYxXV0sIFsnYm94VVInLCBbOTU2Ml1dLCBbJ2JveHYnLCBbOTQ3NF1dLCBbJ2JveFYnLCBbOTU1M11dLCBbJ2JveHZoJywgWzk1MzJdXSwgWydib3h2SCcsIFs5NTc4XV0sIFsnYm94VmgnLCBbOTU3OV1dLCBbJ2JveFZIJywgWzk1ODBdXSwgWydib3h2bCcsIFs5NTA4XV0sIFsnYm94dkwnLCBbOTU2OV1dLCBbJ2JveFZsJywgWzk1NzBdXSwgWydib3hWTCcsIFs5NTcxXV0sIFsnYm94dnInLCBbOTUwMF1dLCBbJ2JveHZSJywgWzk1NjZdXSwgWydib3hWcicsIFs5NTY3XV0sIFsnYm94VlInLCBbOTU2OF1dLCBbJ2JwcmltZScsIFs4MjQ1XV0sIFsnYnJldmUnLCBbNzI4XV0sIFsnQnJldmUnLCBbNzI4XV0sIFsnYnJ2YmFyJywgWzE2Nl1dLCBbJ2JzY3InLCBbMTE5OTkxXV0sIFsnQnNjcicsIFs4NDkyXV0sIFsnYnNlbWknLCBbODI3MV1dLCBbJ2JzaW0nLCBbODc2NV1dLCBbJ2JzaW1lJywgWzg5MDldXSwgWydic29sYicsIFsxMDY5M11dLCBbJ2Jzb2wnLCBbOTJdXSwgWydic29saHN1YicsIFsxMDE4NF1dLCBbJ2J1bGwnLCBbODIyNl1dLCBbJ2J1bGxldCcsIFs4MjI2XV0sIFsnYnVtcCcsIFs4NzgyXV0sIFsnYnVtcEUnLCBbMTA5MjZdXSwgWydidW1wZScsIFs4NzgzXV0sIFsnQnVtcGVxJywgWzg3ODJdXSwgWydidW1wZXEnLCBbODc4M11dLCBbJ0NhY3V0ZScsIFsyNjJdXSwgWydjYWN1dGUnLCBbMjYzXV0sIFsnY2FwYW5kJywgWzEwODIwXV0sIFsnY2FwYnJjdXAnLCBbMTA4MjVdXSwgWydjYXBjYXAnLCBbMTA4MjddXSwgWydjYXAnLCBbODc0NV1dLCBbJ0NhcCcsIFs4OTE0XV0sIFsnY2FwY3VwJywgWzEwODIzXV0sIFsnY2FwZG90JywgWzEwODE2XV0sIFsnQ2FwaXRhbERpZmZlcmVudGlhbEQnLCBbODUxN11dLCBbJ2NhcHMnLCBbODc0NSwgNjUwMjRdXSwgWydjYXJldCcsIFs4MjU3XV0sIFsnY2Fyb24nLCBbNzExXV0sIFsnQ2F5bGV5cycsIFs4NDkzXV0sIFsnY2NhcHMnLCBbMTA4MjldXSwgWydDY2Fyb24nLCBbMjY4XV0sIFsnY2Nhcm9uJywgWzI2OV1dLCBbJ0NjZWRpbCcsIFsxOTldXSwgWydjY2VkaWwnLCBbMjMxXV0sIFsnQ2NpcmMnLCBbMjY0XV0sIFsnY2NpcmMnLCBbMjY1XV0sIFsnQ2NvbmludCcsIFs4NzUyXV0sIFsnY2N1cHMnLCBbMTA4MjhdXSwgWydjY3Vwc3NtJywgWzEwODMyXV0sIFsnQ2RvdCcsIFsyNjZdXSwgWydjZG90JywgWzI2N11dLCBbJ2NlZGlsJywgWzE4NF1dLCBbJ0NlZGlsbGEnLCBbMTg0XV0sIFsnY2VtcHR5dicsIFsxMDY3NF1dLCBbJ2NlbnQnLCBbMTYyXV0sIFsnY2VudGVyZG90JywgWzE4M11dLCBbJ0NlbnRlckRvdCcsIFsxODNdXSwgWydjZnInLCBbMTIwMDk2XV0sIFsnQ2ZyJywgWzg0OTNdXSwgWydDSGN5JywgWzEwNjNdXSwgWydjaGN5JywgWzEwOTVdXSwgWydjaGVjaycsIFsxMDAwM11dLCBbJ2NoZWNrbWFyaycsIFsxMDAwM11dLCBbJ0NoaScsIFs5MzVdXSwgWydjaGknLCBbOTY3XV0sIFsnY2lyYycsIFs3MTBdXSwgWydjaXJjZXEnLCBbODc5MV1dLCBbJ2NpcmNsZWFycm93bGVmdCcsIFs4NjM0XV0sIFsnY2lyY2xlYXJyb3dyaWdodCcsIFs4NjM1XV0sIFsnY2lyY2xlZGFzdCcsIFs4ODU5XV0sIFsnY2lyY2xlZGNpcmMnLCBbODg1OF1dLCBbJ2NpcmNsZWRkYXNoJywgWzg4NjFdXSwgWydDaXJjbGVEb3QnLCBbODg1N11dLCBbJ2NpcmNsZWRSJywgWzE3NF1dLCBbJ2NpcmNsZWRTJywgWzk0MTZdXSwgWydDaXJjbGVNaW51cycsIFs4ODU0XV0sIFsnQ2lyY2xlUGx1cycsIFs4ODUzXV0sIFsnQ2lyY2xlVGltZXMnLCBbODg1NV1dLCBbJ2NpcicsIFs5Njc1XV0sIFsnY2lyRScsIFsxMDY5MV1dLCBbJ2NpcmUnLCBbODc5MV1dLCBbJ2NpcmZuaW50JywgWzEwNzY4XV0sIFsnY2lybWlkJywgWzEwOTkxXV0sIFsnY2lyc2NpcicsIFsxMDY5MF1dLCBbJ0Nsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCcsIFs4NzU0XV0sIFsnY2x1YnMnLCBbOTgyN11dLCBbJ2NsdWJzdWl0JywgWzk4MjddXSwgWydjb2xvbicsIFs1OF1dLCBbJ0NvbG9uJywgWzg3NTldXSwgWydDb2xvbmUnLCBbMTA4NjhdXSwgWydjb2xvbmUnLCBbODc4OF1dLCBbJ2NvbG9uZXEnLCBbODc4OF1dLCBbJ2NvbW1hJywgWzQ0XV0sIFsnY29tbWF0JywgWzY0XV0sIFsnY29tcCcsIFs4NzA1XV0sIFsnY29tcGZuJywgWzg3MjhdXSwgWydjb21wbGVtZW50JywgWzg3MDVdXSwgWydjb21wbGV4ZXMnLCBbODQ1MF1dLCBbJ2NvbmcnLCBbODc3M11dLCBbJ2Nvbmdkb3QnLCBbMTA4NjFdXSwgWydDb25ncnVlbnQnLCBbODgwMV1dLCBbJ2NvbmludCcsIFs4NzUwXV0sIFsnQ29uaW50JywgWzg3NTFdXSwgWydDb250b3VySW50ZWdyYWwnLCBbODc1MF1dLCBbJ2NvcGYnLCBbMTIwMTQ4XV0sIFsnQ29wZicsIFs4NDUwXV0sIFsnY29wcm9kJywgWzg3MjBdXSwgWydDb3Byb2R1Y3QnLCBbODcyMF1dLCBbJ2NvcHknLCBbMTY5XV0sIFsnQ09QWScsIFsxNjldXSwgWydjb3B5c3InLCBbODQ3MV1dLCBbJ0NvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnLCBbODc1NV1dLCBbJ2NyYXJyJywgWzg2MjldXSwgWydjcm9zcycsIFsxMDAwN11dLCBbJ0Nyb3NzJywgWzEwNzk5XV0sIFsnQ3NjcicsIFsxMTk5NjZdXSwgWydjc2NyJywgWzExOTk5Ml1dLCBbJ2NzdWInLCBbMTA5NTldXSwgWydjc3ViZScsIFsxMDk2MV1dLCBbJ2NzdXAnLCBbMTA5NjBdXSwgWydjc3VwZScsIFsxMDk2Ml1dLCBbJ2N0ZG90JywgWzg5NDNdXSwgWydjdWRhcnJsJywgWzEwNTUyXV0sIFsnY3VkYXJycicsIFsxMDU0OV1dLCBbJ2N1ZXByJywgWzg5MjZdXSwgWydjdWVzYycsIFs4OTI3XV0sIFsnY3VsYXJyJywgWzg2MzBdXSwgWydjdWxhcnJwJywgWzEwNTU3XV0sIFsnY3VwYnJjYXAnLCBbMTA4MjRdXSwgWydjdXBjYXAnLCBbMTA4MjJdXSwgWydDdXBDYXAnLCBbODc4MV1dLCBbJ2N1cCcsIFs4NzQ2XV0sIFsnQ3VwJywgWzg5MTVdXSwgWydjdXBjdXAnLCBbMTA4MjZdXSwgWydjdXBkb3QnLCBbODg0NV1dLCBbJ2N1cG9yJywgWzEwODIxXV0sIFsnY3VwcycsIFs4NzQ2LCA2NTAyNF1dLCBbJ2N1cmFycicsIFs4NjMxXV0sIFsnY3VyYXJybScsIFsxMDU1Nl1dLCBbJ2N1cmx5ZXFwcmVjJywgWzg5MjZdXSwgWydjdXJseWVxc3VjYycsIFs4OTI3XV0sIFsnY3VybHl2ZWUnLCBbODkxMF1dLCBbJ2N1cmx5d2VkZ2UnLCBbODkxMV1dLCBbJ2N1cnJlbicsIFsxNjRdXSwgWydjdXJ2ZWFycm93bGVmdCcsIFs4NjMwXV0sIFsnY3VydmVhcnJvd3JpZ2h0JywgWzg2MzFdXSwgWydjdXZlZScsIFs4OTEwXV0sIFsnY3V3ZWQnLCBbODkxMV1dLCBbJ2N3Y29uaW50JywgWzg3NTRdXSwgWydjd2ludCcsIFs4NzUzXV0sIFsnY3lsY3R5JywgWzkwMDVdXSwgWydkYWdnZXInLCBbODIyNF1dLCBbJ0RhZ2dlcicsIFs4MjI1XV0sIFsnZGFsZXRoJywgWzg1MDRdXSwgWydkYXJyJywgWzg1OTVdXSwgWydEYXJyJywgWzg2MDldXSwgWydkQXJyJywgWzg2NTldXSwgWydkYXNoJywgWzgyMDhdXSwgWydEYXNodicsIFsxMDk4MF1dLCBbJ2Rhc2h2JywgWzg4NjddXSwgWydkYmthcm93JywgWzEwNTExXV0sIFsnZGJsYWMnLCBbNzMzXV0sIFsnRGNhcm9uJywgWzI3MF1dLCBbJ2RjYXJvbicsIFsyNzFdXSwgWydEY3knLCBbMTA0NF1dLCBbJ2RjeScsIFsxMDc2XV0sIFsnZGRhZ2dlcicsIFs4MjI1XV0sIFsnZGRhcnInLCBbODY1MF1dLCBbJ0REJywgWzg1MTddXSwgWydkZCcsIFs4NTE4XV0sIFsnRERvdHJhaGQnLCBbMTA1MTNdXSwgWydkZG90c2VxJywgWzEwODcxXV0sIFsnZGVnJywgWzE3Nl1dLCBbJ0RlbCcsIFs4NzExXV0sIFsnRGVsdGEnLCBbOTE2XV0sIFsnZGVsdGEnLCBbOTQ4XV0sIFsnZGVtcHR5dicsIFsxMDY3M11dLCBbJ2RmaXNodCcsIFsxMDYyM11dLCBbJ0RmcicsIFsxMjAwNzFdXSwgWydkZnInLCBbMTIwMDk3XV0sIFsnZEhhcicsIFsxMDU5N11dLCBbJ2RoYXJsJywgWzg2NDNdXSwgWydkaGFycicsIFs4NjQyXV0sIFsnRGlhY3JpdGljYWxBY3V0ZScsIFsxODBdXSwgWydEaWFjcml0aWNhbERvdCcsIFs3MjldXSwgWydEaWFjcml0aWNhbERvdWJsZUFjdXRlJywgWzczM11dLCBbJ0RpYWNyaXRpY2FsR3JhdmUnLCBbOTZdXSwgWydEaWFjcml0aWNhbFRpbGRlJywgWzczMl1dLCBbJ2RpYW0nLCBbODkwMF1dLCBbJ2RpYW1vbmQnLCBbODkwMF1dLCBbJ0RpYW1vbmQnLCBbODkwMF1dLCBbJ2RpYW1vbmRzdWl0JywgWzk4MzBdXSwgWydkaWFtcycsIFs5ODMwXV0sIFsnZGllJywgWzE2OF1dLCBbJ0RpZmZlcmVudGlhbEQnLCBbODUxOF1dLCBbJ2RpZ2FtbWEnLCBbOTg5XV0sIFsnZGlzaW4nLCBbODk0Nl1dLCBbJ2RpdicsIFsyNDddXSwgWydkaXZpZGUnLCBbMjQ3XV0sIFsnZGl2aWRlb250aW1lcycsIFs4OTAzXV0sIFsnZGl2b254JywgWzg5MDNdXSwgWydESmN5JywgWzEwMjZdXSwgWydkamN5JywgWzExMDZdXSwgWydkbGNvcm4nLCBbODk5MF1dLCBbJ2RsY3JvcCcsIFs4OTczXV0sIFsnZG9sbGFyJywgWzM2XV0sIFsnRG9wZicsIFsxMjAxMjNdXSwgWydkb3BmJywgWzEyMDE0OV1dLCBbJ0RvdCcsIFsxNjhdXSwgWydkb3QnLCBbNzI5XV0sIFsnRG90RG90JywgWzg0MTJdXSwgWydkb3RlcScsIFs4Nzg0XV0sIFsnZG90ZXFkb3QnLCBbODc4NV1dLCBbJ0RvdEVxdWFsJywgWzg3ODRdXSwgWydkb3RtaW51cycsIFs4NzYwXV0sIFsnZG90cGx1cycsIFs4NzI0XV0sIFsnZG90c3F1YXJlJywgWzg4NjVdXSwgWydkb3VibGViYXJ3ZWRnZScsIFs4OTY2XV0sIFsnRG91YmxlQ29udG91ckludGVncmFsJywgWzg3NTFdXSwgWydEb3VibGVEb3QnLCBbMTY4XV0sIFsnRG91YmxlRG93bkFycm93JywgWzg2NTldXSwgWydEb3VibGVMZWZ0QXJyb3cnLCBbODY1Nl1dLCBbJ0RvdWJsZUxlZnRSaWdodEFycm93JywgWzg2NjBdXSwgWydEb3VibGVMZWZ0VGVlJywgWzEwOTgwXV0sIFsnRG91YmxlTG9uZ0xlZnRBcnJvdycsIFsxMDIzMl1dLCBbJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdycsIFsxMDIzNF1dLCBbJ0RvdWJsZUxvbmdSaWdodEFycm93JywgWzEwMjMzXV0sIFsnRG91YmxlUmlnaHRBcnJvdycsIFs4NjU4XV0sIFsnRG91YmxlUmlnaHRUZWUnLCBbODg3Ml1dLCBbJ0RvdWJsZVVwQXJyb3cnLCBbODY1N11dLCBbJ0RvdWJsZVVwRG93bkFycm93JywgWzg2NjFdXSwgWydEb3VibGVWZXJ0aWNhbEJhcicsIFs4NzQxXV0sIFsnRG93bkFycm93QmFyJywgWzEwNTE1XV0sIFsnZG93bmFycm93JywgWzg1OTVdXSwgWydEb3duQXJyb3cnLCBbODU5NV1dLCBbJ0Rvd25hcnJvdycsIFs4NjU5XV0sIFsnRG93bkFycm93VXBBcnJvdycsIFs4NjkzXV0sIFsnRG93bkJyZXZlJywgWzc4NV1dLCBbJ2Rvd25kb3duYXJyb3dzJywgWzg2NTBdXSwgWydkb3duaGFycG9vbmxlZnQnLCBbODY0M11dLCBbJ2Rvd25oYXJwb29ucmlnaHQnLCBbODY0Ml1dLCBbJ0Rvd25MZWZ0UmlnaHRWZWN0b3InLCBbMTA1NzZdXSwgWydEb3duTGVmdFRlZVZlY3RvcicsIFsxMDU5MF1dLCBbJ0Rvd25MZWZ0VmVjdG9yQmFyJywgWzEwNTgyXV0sIFsnRG93bkxlZnRWZWN0b3InLCBbODYzN11dLCBbJ0Rvd25SaWdodFRlZVZlY3RvcicsIFsxMDU5MV1dLCBbJ0Rvd25SaWdodFZlY3RvckJhcicsIFsxMDU4M11dLCBbJ0Rvd25SaWdodFZlY3RvcicsIFs4NjQxXV0sIFsnRG93blRlZUFycm93JywgWzg2MTVdXSwgWydEb3duVGVlJywgWzg4NjhdXSwgWydkcmJrYXJvdycsIFsxMDUxMl1dLCBbJ2RyY29ybicsIFs4OTkxXV0sIFsnZHJjcm9wJywgWzg5NzJdXSwgWydEc2NyJywgWzExOTk2N11dLCBbJ2RzY3InLCBbMTE5OTkzXV0sIFsnRFNjeScsIFsxMDI5XV0sIFsnZHNjeScsIFsxMTA5XV0sIFsnZHNvbCcsIFsxMDc0Ml1dLCBbJ0RzdHJvaycsIFsyNzJdXSwgWydkc3Ryb2snLCBbMjczXV0sIFsnZHRkb3QnLCBbODk0NV1dLCBbJ2R0cmknLCBbOTY2M11dLCBbJ2R0cmlmJywgWzk2NjJdXSwgWydkdWFycicsIFs4NjkzXV0sIFsnZHVoYXInLCBbMTA2MDddXSwgWydkd2FuZ2xlJywgWzEwNjYyXV0sIFsnRFpjeScsIFsxMDM5XV0sIFsnZHpjeScsIFsxMTE5XV0sIFsnZHppZ3JhcnInLCBbMTAyMzldXSwgWydFYWN1dGUnLCBbMjAxXV0sIFsnZWFjdXRlJywgWzIzM11dLCBbJ2Vhc3RlcicsIFsxMDg2Ml1dLCBbJ0VjYXJvbicsIFsyODJdXSwgWydlY2Fyb24nLCBbMjgzXV0sIFsnRWNpcmMnLCBbMjAyXV0sIFsnZWNpcmMnLCBbMjM0XV0sIFsnZWNpcicsIFs4NzkwXV0sIFsnZWNvbG9uJywgWzg3ODldXSwgWydFY3knLCBbMTA2OV1dLCBbJ2VjeScsIFsxMTAxXV0sIFsnZUREb3QnLCBbMTA4NzFdXSwgWydFZG90JywgWzI3OF1dLCBbJ2Vkb3QnLCBbMjc5XV0sIFsnZURvdCcsIFs4Nzg1XV0sIFsnZWUnLCBbODUxOV1dLCBbJ2VmRG90JywgWzg3ODZdXSwgWydFZnInLCBbMTIwMDcyXV0sIFsnZWZyJywgWzEyMDA5OF1dLCBbJ2VnJywgWzEwOTA2XV0sIFsnRWdyYXZlJywgWzIwMF1dLCBbJ2VncmF2ZScsIFsyMzJdXSwgWydlZ3MnLCBbMTA5MDJdXSwgWydlZ3Nkb3QnLCBbMTA5MDRdXSwgWydlbCcsIFsxMDkwNV1dLCBbJ0VsZW1lbnQnLCBbODcxMl1dLCBbJ2VsaW50ZXJzJywgWzkxOTFdXSwgWydlbGwnLCBbODQ2N11dLCBbJ2VscycsIFsxMDkwMV1dLCBbJ2Vsc2RvdCcsIFsxMDkwM11dLCBbJ0VtYWNyJywgWzI3NF1dLCBbJ2VtYWNyJywgWzI3NV1dLCBbJ2VtcHR5JywgWzg3MDldXSwgWydlbXB0eXNldCcsIFs4NzA5XV0sIFsnRW1wdHlTbWFsbFNxdWFyZScsIFs5NzIzXV0sIFsnZW1wdHl2JywgWzg3MDldXSwgWydFbXB0eVZlcnlTbWFsbFNxdWFyZScsIFs5NjQzXV0sIFsnZW1zcDEzJywgWzgxOTZdXSwgWydlbXNwMTQnLCBbODE5N11dLCBbJ2Vtc3AnLCBbODE5NV1dLCBbJ0VORycsIFszMzBdXSwgWydlbmcnLCBbMzMxXV0sIFsnZW5zcCcsIFs4MTk0XV0sIFsnRW9nb24nLCBbMjgwXV0sIFsnZW9nb24nLCBbMjgxXV0sIFsnRW9wZicsIFsxMjAxMjRdXSwgWydlb3BmJywgWzEyMDE1MF1dLCBbJ2VwYXInLCBbODkxN11dLCBbJ2VwYXJzbCcsIFsxMDcyM11dLCBbJ2VwbHVzJywgWzEwODY1XV0sIFsnZXBzaScsIFs5NDldXSwgWydFcHNpbG9uJywgWzkxN11dLCBbJ2Vwc2lsb24nLCBbOTQ5XV0sIFsnZXBzaXYnLCBbMTAxM11dLCBbJ2VxY2lyYycsIFs4NzkwXV0sIFsnZXFjb2xvbicsIFs4Nzg5XV0sIFsnZXFzaW0nLCBbODc3MF1dLCBbJ2Vxc2xhbnRndHInLCBbMTA5MDJdXSwgWydlcXNsYW50bGVzcycsIFsxMDkwMV1dLCBbJ0VxdWFsJywgWzEwODY5XV0sIFsnZXF1YWxzJywgWzYxXV0sIFsnRXF1YWxUaWxkZScsIFs4NzcwXV0sIFsnZXF1ZXN0JywgWzg3OTldXSwgWydFcXVpbGlicml1bScsIFs4NjUyXV0sIFsnZXF1aXYnLCBbODgwMV1dLCBbJ2VxdWl2REQnLCBbMTA4NzJdXSwgWydlcXZwYXJzbCcsIFsxMDcyNV1dLCBbJ2VyYXJyJywgWzEwNjA5XV0sIFsnZXJEb3QnLCBbODc4N11dLCBbJ2VzY3InLCBbODQ5NV1dLCBbJ0VzY3InLCBbODQ5Nl1dLCBbJ2VzZG90JywgWzg3ODRdXSwgWydFc2ltJywgWzEwODY3XV0sIFsnZXNpbScsIFs4NzcwXV0sIFsnRXRhJywgWzkxOV1dLCBbJ2V0YScsIFs5NTFdXSwgWydFVEgnLCBbMjA4XV0sIFsnZXRoJywgWzI0MF1dLCBbJ0V1bWwnLCBbMjAzXV0sIFsnZXVtbCcsIFsyMzVdXSwgWydldXJvJywgWzgzNjRdXSwgWydleGNsJywgWzMzXV0sIFsnZXhpc3QnLCBbODcwN11dLCBbJ0V4aXN0cycsIFs4NzA3XV0sIFsnZXhwZWN0YXRpb24nLCBbODQ5Nl1dLCBbJ2V4cG9uZW50aWFsZScsIFs4NTE5XV0sIFsnRXhwb25lbnRpYWxFJywgWzg1MTldXSwgWydmYWxsaW5nZG90c2VxJywgWzg3ODZdXSwgWydGY3knLCBbMTA2MF1dLCBbJ2ZjeScsIFsxMDkyXV0sIFsnZmVtYWxlJywgWzk3OTJdXSwgWydmZmlsaWcnLCBbNjQyNTldXSwgWydmZmxpZycsIFs2NDI1Nl1dLCBbJ2ZmbGxpZycsIFs2NDI2MF1dLCBbJ0ZmcicsIFsxMjAwNzNdXSwgWydmZnInLCBbMTIwMDk5XV0sIFsnZmlsaWcnLCBbNjQyNTddXSwgWydGaWxsZWRTbWFsbFNxdWFyZScsIFs5NzI0XV0sIFsnRmlsbGVkVmVyeVNtYWxsU3F1YXJlJywgWzk2NDJdXSwgWydmamxpZycsIFsxMDIsIDEwNl1dLCBbJ2ZsYXQnLCBbOTgzN11dLCBbJ2ZsbGlnJywgWzY0MjU4XV0sIFsnZmx0bnMnLCBbOTY0OV1dLCBbJ2Zub2YnLCBbNDAyXV0sIFsnRm9wZicsIFsxMjAxMjVdXSwgWydmb3BmJywgWzEyMDE1MV1dLCBbJ2ZvcmFsbCcsIFs4NzA0XV0sIFsnRm9yQWxsJywgWzg3MDRdXSwgWydmb3JrJywgWzg5MTZdXSwgWydmb3JrdicsIFsxMDk2OV1dLCBbJ0ZvdXJpZXJ0cmYnLCBbODQ5N11dLCBbJ2ZwYXJ0aW50JywgWzEwNzY1XV0sIFsnZnJhYzEyJywgWzE4OV1dLCBbJ2ZyYWMxMycsIFs4NTMxXV0sIFsnZnJhYzE0JywgWzE4OF1dLCBbJ2ZyYWMxNScsIFs4NTMzXV0sIFsnZnJhYzE2JywgWzg1MzddXSwgWydmcmFjMTgnLCBbODUzOV1dLCBbJ2ZyYWMyMycsIFs4NTMyXV0sIFsnZnJhYzI1JywgWzg1MzRdXSwgWydmcmFjMzQnLCBbMTkwXV0sIFsnZnJhYzM1JywgWzg1MzVdXSwgWydmcmFjMzgnLCBbODU0MF1dLCBbJ2ZyYWM0NScsIFs4NTM2XV0sIFsnZnJhYzU2JywgWzg1MzhdXSwgWydmcmFjNTgnLCBbODU0MV1dLCBbJ2ZyYWM3OCcsIFs4NTQyXV0sIFsnZnJhc2wnLCBbODI2MF1dLCBbJ2Zyb3duJywgWzg5OTRdXSwgWydmc2NyJywgWzExOTk5NV1dLCBbJ0ZzY3InLCBbODQ5N11dLCBbJ2dhY3V0ZScsIFs1MDFdXSwgWydHYW1tYScsIFs5MTVdXSwgWydnYW1tYScsIFs5NDddXSwgWydHYW1tYWQnLCBbOTg4XV0sIFsnZ2FtbWFkJywgWzk4OV1dLCBbJ2dhcCcsIFsxMDg4Nl1dLCBbJ0dicmV2ZScsIFsyODZdXSwgWydnYnJldmUnLCBbMjg3XV0sIFsnR2NlZGlsJywgWzI5MF1dLCBbJ0djaXJjJywgWzI4NF1dLCBbJ2djaXJjJywgWzI4NV1dLCBbJ0djeScsIFsxMDQzXV0sIFsnZ2N5JywgWzEwNzVdXSwgWydHZG90JywgWzI4OF1dLCBbJ2dkb3QnLCBbMjg5XV0sIFsnZ2UnLCBbODgwNV1dLCBbJ2dFJywgWzg4MDddXSwgWydnRWwnLCBbMTA4OTJdXSwgWydnZWwnLCBbODkyM11dLCBbJ2dlcScsIFs4ODA1XV0sIFsnZ2VxcScsIFs4ODA3XV0sIFsnZ2Vxc2xhbnQnLCBbMTA4NzhdXSwgWydnZXNjYycsIFsxMDkyMV1dLCBbJ2dlcycsIFsxMDg3OF1dLCBbJ2dlc2RvdCcsIFsxMDg4MF1dLCBbJ2dlc2RvdG8nLCBbMTA4ODJdXSwgWydnZXNkb3RvbCcsIFsxMDg4NF1dLCBbJ2dlc2wnLCBbODkyMywgNjUwMjRdXSwgWydnZXNsZXMnLCBbMTA5MDBdXSwgWydHZnInLCBbMTIwMDc0XV0sIFsnZ2ZyJywgWzEyMDEwMF1dLCBbJ2dnJywgWzg4MTFdXSwgWydHZycsIFs4OTIxXV0sIFsnZ2dnJywgWzg5MjFdXSwgWydnaW1lbCcsIFs4NTAzXV0sIFsnR0pjeScsIFsxMDI3XV0sIFsnZ2pjeScsIFsxMTA3XV0sIFsnZ2xhJywgWzEwOTE3XV0sIFsnZ2wnLCBbODgyM11dLCBbJ2dsRScsIFsxMDg5OF1dLCBbJ2dsaicsIFsxMDkxNl1dLCBbJ2duYXAnLCBbMTA4OTBdXSwgWydnbmFwcHJveCcsIFsxMDg5MF1dLCBbJ2duZScsIFsxMDg4OF1dLCBbJ2duRScsIFs4ODA5XV0sIFsnZ25lcScsIFsxMDg4OF1dLCBbJ2duZXFxJywgWzg4MDldXSwgWydnbnNpbScsIFs4OTM1XV0sIFsnR29wZicsIFsxMjAxMjZdXSwgWydnb3BmJywgWzEyMDE1Ml1dLCBbJ2dyYXZlJywgWzk2XV0sIFsnR3JlYXRlckVxdWFsJywgWzg4MDVdXSwgWydHcmVhdGVyRXF1YWxMZXNzJywgWzg5MjNdXSwgWydHcmVhdGVyRnVsbEVxdWFsJywgWzg4MDddXSwgWydHcmVhdGVyR3JlYXRlcicsIFsxMDkxNF1dLCBbJ0dyZWF0ZXJMZXNzJywgWzg4MjNdXSwgWydHcmVhdGVyU2xhbnRFcXVhbCcsIFsxMDg3OF1dLCBbJ0dyZWF0ZXJUaWxkZScsIFs4ODE5XV0sIFsnR3NjcicsIFsxMTk5NzBdXSwgWydnc2NyJywgWzg0NThdXSwgWydnc2ltJywgWzg4MTldXSwgWydnc2ltZScsIFsxMDg5NF1dLCBbJ2dzaW1sJywgWzEwODk2XV0sIFsnZ3RjYycsIFsxMDkxOV1dLCBbJ2d0Y2lyJywgWzEwODc0XV0sIFsnZ3QnLCBbNjJdXSwgWydHVCcsIFs2Ml1dLCBbJ0d0JywgWzg4MTFdXSwgWydndGRvdCcsIFs4OTE5XV0sIFsnZ3RsUGFyJywgWzEwNjQ1XV0sIFsnZ3RxdWVzdCcsIFsxMDg3Nl1dLCBbJ2d0cmFwcHJveCcsIFsxMDg4Nl1dLCBbJ2d0cmFycicsIFsxMDYxNl1dLCBbJ2d0cmRvdCcsIFs4OTE5XV0sIFsnZ3RyZXFsZXNzJywgWzg5MjNdXSwgWydndHJlcXFsZXNzJywgWzEwODkyXV0sIFsnZ3RybGVzcycsIFs4ODIzXV0sIFsnZ3Ryc2ltJywgWzg4MTldXSwgWydndmVydG5lcXEnLCBbODgwOSwgNjUwMjRdXSwgWydndm5FJywgWzg4MDksIDY1MDI0XV0sIFsnSGFjZWsnLCBbNzExXV0sIFsnaGFpcnNwJywgWzgyMDJdXSwgWydoYWxmJywgWzE4OV1dLCBbJ2hhbWlsdCcsIFs4NDU5XV0sIFsnSEFSRGN5JywgWzEwNjZdXSwgWydoYXJkY3knLCBbMTA5OF1dLCBbJ2hhcnJjaXInLCBbMTA1NjhdXSwgWydoYXJyJywgWzg1OTZdXSwgWydoQXJyJywgWzg2NjBdXSwgWydoYXJydycsIFs4NjIxXV0sIFsnSGF0JywgWzk0XV0sIFsnaGJhcicsIFs4NDYzXV0sIFsnSGNpcmMnLCBbMjkyXV0sIFsnaGNpcmMnLCBbMjkzXV0sIFsnaGVhcnRzJywgWzk4MjldXSwgWydoZWFydHN1aXQnLCBbOTgyOV1dLCBbJ2hlbGxpcCcsIFs4MjMwXV0sIFsnaGVyY29uJywgWzg4ODldXSwgWydoZnInLCBbMTIwMTAxXV0sIFsnSGZyJywgWzg0NjBdXSwgWydIaWxiZXJ0U3BhY2UnLCBbODQ1OV1dLCBbJ2hrc2Vhcm93JywgWzEwNTMzXV0sIFsnaGtzd2Fyb3cnLCBbMTA1MzRdXSwgWydob2FycicsIFs4NzAzXV0sIFsnaG9tdGh0JywgWzg3NjNdXSwgWydob29rbGVmdGFycm93JywgWzg2MTddXSwgWydob29rcmlnaHRhcnJvdycsIFs4NjE4XV0sIFsnaG9wZicsIFsxMjAxNTNdXSwgWydIb3BmJywgWzg0NjFdXSwgWydob3JiYXInLCBbODIxM11dLCBbJ0hvcml6b250YWxMaW5lJywgWzk0NzJdXSwgWydoc2NyJywgWzExOTk5N11dLCBbJ0hzY3InLCBbODQ1OV1dLCBbJ2hzbGFzaCcsIFs4NDYzXV0sIFsnSHN0cm9rJywgWzI5NF1dLCBbJ2hzdHJvaycsIFsyOTVdXSwgWydIdW1wRG93bkh1bXAnLCBbODc4Ml1dLCBbJ0h1bXBFcXVhbCcsIFs4NzgzXV0sIFsnaHlidWxsJywgWzgyNTldXSwgWydoeXBoZW4nLCBbODIwOF1dLCBbJ0lhY3V0ZScsIFsyMDVdXSwgWydpYWN1dGUnLCBbMjM3XV0sIFsnaWMnLCBbODI5MV1dLCBbJ0ljaXJjJywgWzIwNl1dLCBbJ2ljaXJjJywgWzIzOF1dLCBbJ0ljeScsIFsxMDQ4XV0sIFsnaWN5JywgWzEwODBdXSwgWydJZG90JywgWzMwNF1dLCBbJ0lFY3knLCBbMTA0NV1dLCBbJ2llY3knLCBbMTA3N11dLCBbJ2lleGNsJywgWzE2MV1dLCBbJ2lmZicsIFs4NjYwXV0sIFsnaWZyJywgWzEyMDEwMl1dLCBbJ0lmcicsIFs4NDY1XV0sIFsnSWdyYXZlJywgWzIwNF1dLCBbJ2lncmF2ZScsIFsyMzZdXSwgWydpaScsIFs4NTIwXV0sIFsnaWlpaW50JywgWzEwNzY0XV0sIFsnaWlpbnQnLCBbODc0OV1dLCBbJ2lpbmZpbicsIFsxMDcxNl1dLCBbJ2lpb3RhJywgWzg0ODldXSwgWydJSmxpZycsIFszMDZdXSwgWydpamxpZycsIFszMDddXSwgWydJbWFjcicsIFsyOThdXSwgWydpbWFjcicsIFsyOTldXSwgWydpbWFnZScsIFs4NDY1XV0sIFsnSW1hZ2luYXJ5SScsIFs4NTIwXV0sIFsnaW1hZ2xpbmUnLCBbODQ2NF1dLCBbJ2ltYWdwYXJ0JywgWzg0NjVdXSwgWydpbWF0aCcsIFszMDVdXSwgWydJbScsIFs4NDY1XV0sIFsnaW1vZicsIFs4ODg3XV0sIFsnaW1wZWQnLCBbNDM3XV0sIFsnSW1wbGllcycsIFs4NjU4XV0sIFsnaW5jYXJlJywgWzg0NTNdXSwgWydpbicsIFs4NzEyXV0sIFsnaW5maW4nLCBbODczNF1dLCBbJ2luZmludGllJywgWzEwNzE3XV0sIFsnaW5vZG90JywgWzMwNV1dLCBbJ2ludGNhbCcsIFs4ODkwXV0sIFsnaW50JywgWzg3NDddXSwgWydJbnQnLCBbODc0OF1dLCBbJ2ludGVnZXJzJywgWzg0ODRdXSwgWydJbnRlZ3JhbCcsIFs4NzQ3XV0sIFsnaW50ZXJjYWwnLCBbODg5MF1dLCBbJ0ludGVyc2VjdGlvbicsIFs4ODk4XV0sIFsnaW50bGFyaGsnLCBbMTA3NzVdXSwgWydpbnRwcm9kJywgWzEwODEyXV0sIFsnSW52aXNpYmxlQ29tbWEnLCBbODI5MV1dLCBbJ0ludmlzaWJsZVRpbWVzJywgWzgyOTBdXSwgWydJT2N5JywgWzEwMjVdXSwgWydpb2N5JywgWzExMDVdXSwgWydJb2dvbicsIFszMDJdXSwgWydpb2dvbicsIFszMDNdXSwgWydJb3BmJywgWzEyMDEyOF1dLCBbJ2lvcGYnLCBbMTIwMTU0XV0sIFsnSW90YScsIFs5MjFdXSwgWydpb3RhJywgWzk1M11dLCBbJ2lwcm9kJywgWzEwODEyXV0sIFsnaXF1ZXN0JywgWzE5MV1dLCBbJ2lzY3InLCBbMTE5OTk4XV0sIFsnSXNjcicsIFs4NDY0XV0sIFsnaXNpbicsIFs4NzEyXV0sIFsnaXNpbmRvdCcsIFs4OTQ5XV0sIFsnaXNpbkUnLCBbODk1M11dLCBbJ2lzaW5zJywgWzg5NDhdXSwgWydpc2luc3YnLCBbODk0N11dLCBbJ2lzaW52JywgWzg3MTJdXSwgWydpdCcsIFs4MjkwXV0sIFsnSXRpbGRlJywgWzI5Nl1dLCBbJ2l0aWxkZScsIFsyOTddXSwgWydJdWtjeScsIFsxMDMwXV0sIFsnaXVrY3knLCBbMTExMF1dLCBbJ0l1bWwnLCBbMjA3XV0sIFsnaXVtbCcsIFsyMzldXSwgWydKY2lyYycsIFszMDhdXSwgWydqY2lyYycsIFszMDldXSwgWydKY3knLCBbMTA0OV1dLCBbJ2pjeScsIFsxMDgxXV0sIFsnSmZyJywgWzEyMDA3N11dLCBbJ2pmcicsIFsxMjAxMDNdXSwgWydqbWF0aCcsIFs1NjddXSwgWydKb3BmJywgWzEyMDEyOV1dLCBbJ2pvcGYnLCBbMTIwMTU1XV0sIFsnSnNjcicsIFsxMTk5NzNdXSwgWydqc2NyJywgWzExOTk5OV1dLCBbJ0pzZXJjeScsIFsxMDMyXV0sIFsnanNlcmN5JywgWzExMTJdXSwgWydKdWtjeScsIFsxMDI4XV0sIFsnanVrY3knLCBbMTEwOF1dLCBbJ0thcHBhJywgWzkyMl1dLCBbJ2thcHBhJywgWzk1NF1dLCBbJ2thcHBhdicsIFsxMDA4XV0sIFsnS2NlZGlsJywgWzMxMF1dLCBbJ2tjZWRpbCcsIFszMTFdXSwgWydLY3knLCBbMTA1MF1dLCBbJ2tjeScsIFsxMDgyXV0sIFsnS2ZyJywgWzEyMDA3OF1dLCBbJ2tmcicsIFsxMjAxMDRdXSwgWydrZ3JlZW4nLCBbMzEyXV0sIFsnS0hjeScsIFsxMDYxXV0sIFsna2hjeScsIFsxMDkzXV0sIFsnS0pjeScsIFsxMDM2XV0sIFsna2pjeScsIFsxMTE2XV0sIFsnS29wZicsIFsxMjAxMzBdXSwgWydrb3BmJywgWzEyMDE1Nl1dLCBbJ0tzY3InLCBbMTE5OTc0XV0sIFsna3NjcicsIFsxMjAwMDBdXSwgWydsQWFycicsIFs4NjY2XV0sIFsnTGFjdXRlJywgWzMxM11dLCBbJ2xhY3V0ZScsIFszMTRdXSwgWydsYWVtcHR5dicsIFsxMDY3Nl1dLCBbJ2xhZ3JhbicsIFs4NDY2XV0sIFsnTGFtYmRhJywgWzkyM11dLCBbJ2xhbWJkYScsIFs5NTVdXSwgWydsYW5nJywgWzEwMjE2XV0sIFsnTGFuZycsIFsxMDIxOF1dLCBbJ2xhbmdkJywgWzEwNjQxXV0sIFsnbGFuZ2xlJywgWzEwMjE2XV0sIFsnbGFwJywgWzEwODg1XV0sIFsnTGFwbGFjZXRyZicsIFs4NDY2XV0sIFsnbGFxdW8nLCBbMTcxXV0sIFsnbGFycmInLCBbODY3Nl1dLCBbJ2xhcnJiZnMnLCBbMTA1MjddXSwgWydsYXJyJywgWzg1OTJdXSwgWydMYXJyJywgWzg2MDZdXSwgWydsQXJyJywgWzg2NTZdXSwgWydsYXJyZnMnLCBbMTA1MjVdXSwgWydsYXJyaGsnLCBbODYxN11dLCBbJ2xhcnJscCcsIFs4NjE5XV0sIFsnbGFycnBsJywgWzEwNTUzXV0sIFsnbGFycnNpbScsIFsxMDYxMV1dLCBbJ2xhcnJ0bCcsIFs4NjEwXV0sIFsnbGF0YWlsJywgWzEwNTIxXV0sIFsnbEF0YWlsJywgWzEwNTIzXV0sIFsnbGF0JywgWzEwOTIzXV0sIFsnbGF0ZScsIFsxMDkyNV1dLCBbJ2xhdGVzJywgWzEwOTI1LCA2NTAyNF1dLCBbJ2xiYXJyJywgWzEwNTA4XV0sIFsnbEJhcnInLCBbMTA1MTBdXSwgWydsYmJyaycsIFsxMDA5OF1dLCBbJ2xicmFjZScsIFsxMjNdXSwgWydsYnJhY2snLCBbOTFdXSwgWydsYnJrZScsIFsxMDYzNV1dLCBbJ2xicmtzbGQnLCBbMTA2MzldXSwgWydsYnJrc2x1JywgWzEwNjM3XV0sIFsnTGNhcm9uJywgWzMxN11dLCBbJ2xjYXJvbicsIFszMThdXSwgWydMY2VkaWwnLCBbMzE1XV0sIFsnbGNlZGlsJywgWzMxNl1dLCBbJ2xjZWlsJywgWzg5NjhdXSwgWydsY3ViJywgWzEyM11dLCBbJ0xjeScsIFsxMDUxXV0sIFsnbGN5JywgWzEwODNdXSwgWydsZGNhJywgWzEwNTUwXV0sIFsnbGRxdW8nLCBbODIyMF1dLCBbJ2xkcXVvcicsIFs4MjIyXV0sIFsnbGRyZGhhcicsIFsxMDU5OV1dLCBbJ2xkcnVzaGFyJywgWzEwNTcxXV0sIFsnbGRzaCcsIFs4NjI2XV0sIFsnbGUnLCBbODgwNF1dLCBbJ2xFJywgWzg4MDZdXSwgWydMZWZ0QW5nbGVCcmFja2V0JywgWzEwMjE2XV0sIFsnTGVmdEFycm93QmFyJywgWzg2NzZdXSwgWydsZWZ0YXJyb3cnLCBbODU5Ml1dLCBbJ0xlZnRBcnJvdycsIFs4NTkyXV0sIFsnTGVmdGFycm93JywgWzg2NTZdXSwgWydMZWZ0QXJyb3dSaWdodEFycm93JywgWzg2NDZdXSwgWydsZWZ0YXJyb3d0YWlsJywgWzg2MTBdXSwgWydMZWZ0Q2VpbGluZycsIFs4OTY4XV0sIFsnTGVmdERvdWJsZUJyYWNrZXQnLCBbMTAyMTRdXSwgWydMZWZ0RG93blRlZVZlY3RvcicsIFsxMDU5M11dLCBbJ0xlZnREb3duVmVjdG9yQmFyJywgWzEwNTg1XV0sIFsnTGVmdERvd25WZWN0b3InLCBbODY0M11dLCBbJ0xlZnRGbG9vcicsIFs4OTcwXV0sIFsnbGVmdGhhcnBvb25kb3duJywgWzg2MzddXSwgWydsZWZ0aGFycG9vbnVwJywgWzg2MzZdXSwgWydsZWZ0bGVmdGFycm93cycsIFs4NjQ3XV0sIFsnbGVmdHJpZ2h0YXJyb3cnLCBbODU5Nl1dLCBbJ0xlZnRSaWdodEFycm93JywgWzg1OTZdXSwgWydMZWZ0cmlnaHRhcnJvdycsIFs4NjYwXV0sIFsnbGVmdHJpZ2h0YXJyb3dzJywgWzg2NDZdXSwgWydsZWZ0cmlnaHRoYXJwb29ucycsIFs4NjUxXV0sIFsnbGVmdHJpZ2h0c3F1aWdhcnJvdycsIFs4NjIxXV0sIFsnTGVmdFJpZ2h0VmVjdG9yJywgWzEwNTc0XV0sIFsnTGVmdFRlZUFycm93JywgWzg2MTJdXSwgWydMZWZ0VGVlJywgWzg4NjddXSwgWydMZWZ0VGVlVmVjdG9yJywgWzEwNTg2XV0sIFsnbGVmdHRocmVldGltZXMnLCBbODkwN11dLCBbJ0xlZnRUcmlhbmdsZUJhcicsIFsxMDcwM11dLCBbJ0xlZnRUcmlhbmdsZScsIFs4ODgyXV0sIFsnTGVmdFRyaWFuZ2xlRXF1YWwnLCBbODg4NF1dLCBbJ0xlZnRVcERvd25WZWN0b3InLCBbMTA1NzddXSwgWydMZWZ0VXBUZWVWZWN0b3InLCBbMTA1OTJdXSwgWydMZWZ0VXBWZWN0b3JCYXInLCBbMTA1ODRdXSwgWydMZWZ0VXBWZWN0b3InLCBbODYzOV1dLCBbJ0xlZnRWZWN0b3JCYXInLCBbMTA1NzhdXSwgWydMZWZ0VmVjdG9yJywgWzg2MzZdXSwgWydsRWcnLCBbMTA4OTFdXSwgWydsZWcnLCBbODkyMl1dLCBbJ2xlcScsIFs4ODA0XV0sIFsnbGVxcScsIFs4ODA2XV0sIFsnbGVxc2xhbnQnLCBbMTA4NzddXSwgWydsZXNjYycsIFsxMDkyMF1dLCBbJ2xlcycsIFsxMDg3N11dLCBbJ2xlc2RvdCcsIFsxMDg3OV1dLCBbJ2xlc2RvdG8nLCBbMTA4ODFdXSwgWydsZXNkb3RvcicsIFsxMDg4M11dLCBbJ2xlc2cnLCBbODkyMiwgNjUwMjRdXSwgWydsZXNnZXMnLCBbMTA4OTldXSwgWydsZXNzYXBwcm94JywgWzEwODg1XV0sIFsnbGVzc2RvdCcsIFs4OTE4XV0sIFsnbGVzc2VxZ3RyJywgWzg5MjJdXSwgWydsZXNzZXFxZ3RyJywgWzEwODkxXV0sIFsnTGVzc0VxdWFsR3JlYXRlcicsIFs4OTIyXV0sIFsnTGVzc0Z1bGxFcXVhbCcsIFs4ODA2XV0sIFsnTGVzc0dyZWF0ZXInLCBbODgyMl1dLCBbJ2xlc3NndHInLCBbODgyMl1dLCBbJ0xlc3NMZXNzJywgWzEwOTEzXV0sIFsnbGVzc3NpbScsIFs4ODE4XV0sIFsnTGVzc1NsYW50RXF1YWwnLCBbMTA4NzddXSwgWydMZXNzVGlsZGUnLCBbODgxOF1dLCBbJ2xmaXNodCcsIFsxMDYyMF1dLCBbJ2xmbG9vcicsIFs4OTcwXV0sIFsnTGZyJywgWzEyMDA3OV1dLCBbJ2xmcicsIFsxMjAxMDVdXSwgWydsZycsIFs4ODIyXV0sIFsnbGdFJywgWzEwODk3XV0sIFsnbEhhcicsIFsxMDU5NF1dLCBbJ2xoYXJkJywgWzg2MzddXSwgWydsaGFydScsIFs4NjM2XV0sIFsnbGhhcnVsJywgWzEwNjAyXV0sIFsnbGhibGsnLCBbOTYwNF1dLCBbJ0xKY3knLCBbMTAzM11dLCBbJ2xqY3knLCBbMTExM11dLCBbJ2xsYXJyJywgWzg2NDddXSwgWydsbCcsIFs4ODEwXV0sIFsnTGwnLCBbODkyMF1dLCBbJ2xsY29ybmVyJywgWzg5OTBdXSwgWydMbGVmdGFycm93JywgWzg2NjZdXSwgWydsbGhhcmQnLCBbMTA2MDNdXSwgWydsbHRyaScsIFs5NzIyXV0sIFsnTG1pZG90JywgWzMxOV1dLCBbJ2xtaWRvdCcsIFszMjBdXSwgWydsbW91c3RhY2hlJywgWzkxMzZdXSwgWydsbW91c3QnLCBbOTEzNl1dLCBbJ2xuYXAnLCBbMTA4ODldXSwgWydsbmFwcHJveCcsIFsxMDg4OV1dLCBbJ2xuZScsIFsxMDg4N11dLCBbJ2xuRScsIFs4ODA4XV0sIFsnbG5lcScsIFsxMDg4N11dLCBbJ2xuZXFxJywgWzg4MDhdXSwgWydsbnNpbScsIFs4OTM0XV0sIFsnbG9hbmcnLCBbMTAyMjBdXSwgWydsb2FycicsIFs4NzAxXV0sIFsnbG9icmsnLCBbMTAyMTRdXSwgWydsb25nbGVmdGFycm93JywgWzEwMjI5XV0sIFsnTG9uZ0xlZnRBcnJvdycsIFsxMDIyOV1dLCBbJ0xvbmdsZWZ0YXJyb3cnLCBbMTAyMzJdXSwgWydsb25nbGVmdHJpZ2h0YXJyb3cnLCBbMTAyMzFdXSwgWydMb25nTGVmdFJpZ2h0QXJyb3cnLCBbMTAyMzFdXSwgWydMb25nbGVmdHJpZ2h0YXJyb3cnLCBbMTAyMzRdXSwgWydsb25nbWFwc3RvJywgWzEwMjM2XV0sIFsnbG9uZ3JpZ2h0YXJyb3cnLCBbMTAyMzBdXSwgWydMb25nUmlnaHRBcnJvdycsIFsxMDIzMF1dLCBbJ0xvbmdyaWdodGFycm93JywgWzEwMjMzXV0sIFsnbG9vcGFycm93bGVmdCcsIFs4NjE5XV0sIFsnbG9vcGFycm93cmlnaHQnLCBbODYyMF1dLCBbJ2xvcGFyJywgWzEwNjI5XV0sIFsnTG9wZicsIFsxMjAxMzFdXSwgWydsb3BmJywgWzEyMDE1N11dLCBbJ2xvcGx1cycsIFsxMDc5N11dLCBbJ2xvdGltZXMnLCBbMTA4MDRdXSwgWydsb3dhc3QnLCBbODcyN11dLCBbJ2xvd2JhcicsIFs5NV1dLCBbJ0xvd2VyTGVmdEFycm93JywgWzg2MDFdXSwgWydMb3dlclJpZ2h0QXJyb3cnLCBbODYwMF1dLCBbJ2xveicsIFs5Njc0XV0sIFsnbG96ZW5nZScsIFs5Njc0XV0sIFsnbG96ZicsIFsxMDczMV1dLCBbJ2xwYXInLCBbNDBdXSwgWydscGFybHQnLCBbMTA2NDNdXSwgWydscmFycicsIFs4NjQ2XV0sIFsnbHJjb3JuZXInLCBbODk5MV1dLCBbJ2xyaGFyJywgWzg2NTFdXSwgWydscmhhcmQnLCBbMTA2MDVdXSwgWydscm0nLCBbODIwNl1dLCBbJ2xydHJpJywgWzg4OTVdXSwgWydsc2FxdW8nLCBbODI0OV1dLCBbJ2xzY3InLCBbMTIwMDAxXV0sIFsnTHNjcicsIFs4NDY2XV0sIFsnbHNoJywgWzg2MjRdXSwgWydMc2gnLCBbODYyNF1dLCBbJ2xzaW0nLCBbODgxOF1dLCBbJ2xzaW1lJywgWzEwODkzXV0sIFsnbHNpbWcnLCBbMTA4OTVdXSwgWydsc3FiJywgWzkxXV0sIFsnbHNxdW8nLCBbODIxNl1dLCBbJ2xzcXVvcicsIFs4MjE4XV0sIFsnTHN0cm9rJywgWzMyMV1dLCBbJ2xzdHJvaycsIFszMjJdXSwgWydsdGNjJywgWzEwOTE4XV0sIFsnbHRjaXInLCBbMTA4NzNdXSwgWydsdCcsIFs2MF1dLCBbJ0xUJywgWzYwXV0sIFsnTHQnLCBbODgxMF1dLCBbJ2x0ZG90JywgWzg5MThdXSwgWydsdGhyZWUnLCBbODkwN11dLCBbJ2x0aW1lcycsIFs4OTA1XV0sIFsnbHRsYXJyJywgWzEwNjE0XV0sIFsnbHRxdWVzdCcsIFsxMDg3NV1dLCBbJ2x0cmknLCBbOTY2N11dLCBbJ2x0cmllJywgWzg4ODRdXSwgWydsdHJpZicsIFs5NjY2XV0sIFsnbHRyUGFyJywgWzEwNjQ2XV0sIFsnbHVyZHNoYXInLCBbMTA1NzBdXSwgWydsdXJ1aGFyJywgWzEwNTk4XV0sIFsnbHZlcnRuZXFxJywgWzg4MDgsIDY1MDI0XV0sIFsnbHZuRScsIFs4ODA4LCA2NTAyNF1dLCBbJ21hY3InLCBbMTc1XV0sIFsnbWFsZScsIFs5Nzk0XV0sIFsnbWFsdCcsIFsxMDAxNl1dLCBbJ21hbHRlc2UnLCBbMTAwMTZdXSwgWydNYXAnLCBbMTA1MDFdXSwgWydtYXAnLCBbODYxNF1dLCBbJ21hcHN0bycsIFs4NjE0XV0sIFsnbWFwc3RvZG93bicsIFs4NjE1XV0sIFsnbWFwc3RvbGVmdCcsIFs4NjEyXV0sIFsnbWFwc3RvdXAnLCBbODYxM11dLCBbJ21hcmtlcicsIFs5NjQ2XV0sIFsnbWNvbW1hJywgWzEwNzkzXV0sIFsnTWN5JywgWzEwNTJdXSwgWydtY3knLCBbMTA4NF1dLCBbJ21kYXNoJywgWzgyMTJdXSwgWydtRERvdCcsIFs4NzYyXV0sIFsnbWVhc3VyZWRhbmdsZScsIFs4NzM3XV0sIFsnTWVkaXVtU3BhY2UnLCBbODI4N11dLCBbJ01lbGxpbnRyZicsIFs4NDk5XV0sIFsnTWZyJywgWzEyMDA4MF1dLCBbJ21mcicsIFsxMjAxMDZdXSwgWydtaG8nLCBbODQ4N11dLCBbJ21pY3JvJywgWzE4MV1dLCBbJ21pZGFzdCcsIFs0Ml1dLCBbJ21pZGNpcicsIFsxMDk5Ml1dLCBbJ21pZCcsIFs4NzM5XV0sIFsnbWlkZG90JywgWzE4M11dLCBbJ21pbnVzYicsIFs4ODYzXV0sIFsnbWludXMnLCBbODcyMl1dLCBbJ21pbnVzZCcsIFs4NzYwXV0sIFsnbWludXNkdScsIFsxMDc5NF1dLCBbJ01pbnVzUGx1cycsIFs4NzIzXV0sIFsnbWxjcCcsIFsxMDk3MV1dLCBbJ21sZHInLCBbODIzMF1dLCBbJ21ucGx1cycsIFs4NzIzXV0sIFsnbW9kZWxzJywgWzg4NzFdXSwgWydNb3BmJywgWzEyMDEzMl1dLCBbJ21vcGYnLCBbMTIwMTU4XV0sIFsnbXAnLCBbODcyM11dLCBbJ21zY3InLCBbMTIwMDAyXV0sIFsnTXNjcicsIFs4NDk5XV0sIFsnbXN0cG9zJywgWzg3NjZdXSwgWydNdScsIFs5MjRdXSwgWydtdScsIFs5NTZdXSwgWydtdWx0aW1hcCcsIFs4ODg4XV0sIFsnbXVtYXAnLCBbODg4OF1dLCBbJ25hYmxhJywgWzg3MTFdXSwgWydOYWN1dGUnLCBbMzIzXV0sIFsnbmFjdXRlJywgWzMyNF1dLCBbJ25hbmcnLCBbODczNiwgODQwMl1dLCBbJ25hcCcsIFs4Nzc3XV0sIFsnbmFwRScsIFsxMDg2NCwgODI0XV0sIFsnbmFwaWQnLCBbODc3OSwgODI0XV0sIFsnbmFwb3MnLCBbMzI5XV0sIFsnbmFwcHJveCcsIFs4Nzc3XV0sIFsnbmF0dXJhbCcsIFs5ODM4XV0sIFsnbmF0dXJhbHMnLCBbODQ2OV1dLCBbJ25hdHVyJywgWzk4MzhdXSwgWyduYnNwJywgWzE2MF1dLCBbJ25idW1wJywgWzg3ODIsIDgyNF1dLCBbJ25idW1wZScsIFs4NzgzLCA4MjRdXSwgWyduY2FwJywgWzEwODE5XV0sIFsnTmNhcm9uJywgWzMyN11dLCBbJ25jYXJvbicsIFszMjhdXSwgWydOY2VkaWwnLCBbMzI1XV0sIFsnbmNlZGlsJywgWzMyNl1dLCBbJ25jb25nJywgWzg3NzVdXSwgWyduY29uZ2RvdCcsIFsxMDg2MSwgODI0XV0sIFsnbmN1cCcsIFsxMDgxOF1dLCBbJ05jeScsIFsxMDUzXV0sIFsnbmN5JywgWzEwODVdXSwgWyduZGFzaCcsIFs4MjExXV0sIFsnbmVhcmhrJywgWzEwNTMyXV0sIFsnbmVhcnInLCBbODU5OV1dLCBbJ25lQXJyJywgWzg2NjNdXSwgWyduZWFycm93JywgWzg1OTldXSwgWyduZScsIFs4ODAwXV0sIFsnbmVkb3QnLCBbODc4NCwgODI0XV0sIFsnTmVnYXRpdmVNZWRpdW1TcGFjZScsIFs4MjAzXV0sIFsnTmVnYXRpdmVUaGlja1NwYWNlJywgWzgyMDNdXSwgWydOZWdhdGl2ZVRoaW5TcGFjZScsIFs4MjAzXV0sIFsnTmVnYXRpdmVWZXJ5VGhpblNwYWNlJywgWzgyMDNdXSwgWyduZXF1aXYnLCBbODgwMl1dLCBbJ25lc2VhcicsIFsxMDUzNl1dLCBbJ25lc2ltJywgWzg3NzAsIDgyNF1dLCBbJ05lc3RlZEdyZWF0ZXJHcmVhdGVyJywgWzg4MTFdXSwgWydOZXN0ZWRMZXNzTGVzcycsIFs4ODEwXV0sIFsnbmV4aXN0JywgWzg3MDhdXSwgWyduZXhpc3RzJywgWzg3MDhdXSwgWydOZnInLCBbMTIwMDgxXV0sIFsnbmZyJywgWzEyMDEwN11dLCBbJ25nRScsIFs4ODA3LCA4MjRdXSwgWyduZ2UnLCBbODgxN11dLCBbJ25nZXEnLCBbODgxN11dLCBbJ25nZXFxJywgWzg4MDcsIDgyNF1dLCBbJ25nZXFzbGFudCcsIFsxMDg3OCwgODI0XV0sIFsnbmdlcycsIFsxMDg3OCwgODI0XV0sIFsnbkdnJywgWzg5MjEsIDgyNF1dLCBbJ25nc2ltJywgWzg4MjFdXSwgWyduR3QnLCBbODgxMSwgODQwMl1dLCBbJ25ndCcsIFs4ODE1XV0sIFsnbmd0cicsIFs4ODE1XV0sIFsnbkd0dicsIFs4ODExLCA4MjRdXSwgWyduaGFycicsIFs4NjIyXV0sIFsnbmhBcnInLCBbODY1NF1dLCBbJ25ocGFyJywgWzEwOTk0XV0sIFsnbmknLCBbODcxNV1dLCBbJ25pcycsIFs4OTU2XV0sIFsnbmlzZCcsIFs4OTU0XV0sIFsnbml2JywgWzg3MTVdXSwgWydOSmN5JywgWzEwMzRdXSwgWyduamN5JywgWzExMTRdXSwgWydubGFycicsIFs4NjAyXV0sIFsnbmxBcnInLCBbODY1M11dLCBbJ25sZHInLCBbODIyOV1dLCBbJ25sRScsIFs4ODA2LCA4MjRdXSwgWydubGUnLCBbODgxNl1dLCBbJ25sZWZ0YXJyb3cnLCBbODYwMl1dLCBbJ25MZWZ0YXJyb3cnLCBbODY1M11dLCBbJ25sZWZ0cmlnaHRhcnJvdycsIFs4NjIyXV0sIFsnbkxlZnRyaWdodGFycm93JywgWzg2NTRdXSwgWydubGVxJywgWzg4MTZdXSwgWydubGVxcScsIFs4ODA2LCA4MjRdXSwgWydubGVxc2xhbnQnLCBbMTA4NzcsIDgyNF1dLCBbJ25sZXMnLCBbMTA4NzcsIDgyNF1dLCBbJ25sZXNzJywgWzg4MTRdXSwgWyduTGwnLCBbODkyMCwgODI0XV0sIFsnbmxzaW0nLCBbODgyMF1dLCBbJ25MdCcsIFs4ODEwLCA4NDAyXV0sIFsnbmx0JywgWzg4MTRdXSwgWydubHRyaScsIFs4OTM4XV0sIFsnbmx0cmllJywgWzg5NDBdXSwgWyduTHR2JywgWzg4MTAsIDgyNF1dLCBbJ25taWQnLCBbODc0MF1dLCBbJ05vQnJlYWsnLCBbODI4OF1dLCBbJ05vbkJyZWFraW5nU3BhY2UnLCBbMTYwXV0sIFsnbm9wZicsIFsxMjAxNTldXSwgWydOb3BmJywgWzg0NjldXSwgWydOb3QnLCBbMTA5ODhdXSwgWydub3QnLCBbMTcyXV0sIFsnTm90Q29uZ3J1ZW50JywgWzg4MDJdXSwgWydOb3RDdXBDYXAnLCBbODgxM11dLCBbJ05vdERvdWJsZVZlcnRpY2FsQmFyJywgWzg3NDJdXSwgWydOb3RFbGVtZW50JywgWzg3MTNdXSwgWydOb3RFcXVhbCcsIFs4ODAwXV0sIFsnTm90RXF1YWxUaWxkZScsIFs4NzcwLCA4MjRdXSwgWydOb3RFeGlzdHMnLCBbODcwOF1dLCBbJ05vdEdyZWF0ZXInLCBbODgxNV1dLCBbJ05vdEdyZWF0ZXJFcXVhbCcsIFs4ODE3XV0sIFsnTm90R3JlYXRlckZ1bGxFcXVhbCcsIFs4ODA3LCA4MjRdXSwgWydOb3RHcmVhdGVyR3JlYXRlcicsIFs4ODExLCA4MjRdXSwgWydOb3RHcmVhdGVyTGVzcycsIFs4ODI1XV0sIFsnTm90R3JlYXRlclNsYW50RXF1YWwnLCBbMTA4NzgsIDgyNF1dLCBbJ05vdEdyZWF0ZXJUaWxkZScsIFs4ODIxXV0sIFsnTm90SHVtcERvd25IdW1wJywgWzg3ODIsIDgyNF1dLCBbJ05vdEh1bXBFcXVhbCcsIFs4NzgzLCA4MjRdXSwgWydub3RpbicsIFs4NzEzXV0sIFsnbm90aW5kb3QnLCBbODk0OSwgODI0XV0sIFsnbm90aW5FJywgWzg5NTMsIDgyNF1dLCBbJ25vdGludmEnLCBbODcxM11dLCBbJ25vdGludmInLCBbODk1MV1dLCBbJ25vdGludmMnLCBbODk1MF1dLCBbJ05vdExlZnRUcmlhbmdsZUJhcicsIFsxMDcwMywgODI0XV0sIFsnTm90TGVmdFRyaWFuZ2xlJywgWzg5MzhdXSwgWydOb3RMZWZ0VHJpYW5nbGVFcXVhbCcsIFs4OTQwXV0sIFsnTm90TGVzcycsIFs4ODE0XV0sIFsnTm90TGVzc0VxdWFsJywgWzg4MTZdXSwgWydOb3RMZXNzR3JlYXRlcicsIFs4ODI0XV0sIFsnTm90TGVzc0xlc3MnLCBbODgxMCwgODI0XV0sIFsnTm90TGVzc1NsYW50RXF1YWwnLCBbMTA4NzcsIDgyNF1dLCBbJ05vdExlc3NUaWxkZScsIFs4ODIwXV0sIFsnTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInLCBbMTA5MTQsIDgyNF1dLCBbJ05vdE5lc3RlZExlc3NMZXNzJywgWzEwOTEzLCA4MjRdXSwgWydub3RuaScsIFs4NzE2XV0sIFsnbm90bml2YScsIFs4NzE2XV0sIFsnbm90bml2YicsIFs4OTU4XV0sIFsnbm90bml2YycsIFs4OTU3XV0sIFsnTm90UHJlY2VkZXMnLCBbODgzMl1dLCBbJ05vdFByZWNlZGVzRXF1YWwnLCBbMTA5MjcsIDgyNF1dLCBbJ05vdFByZWNlZGVzU2xhbnRFcXVhbCcsIFs4OTI4XV0sIFsnTm90UmV2ZXJzZUVsZW1lbnQnLCBbODcxNl1dLCBbJ05vdFJpZ2h0VHJpYW5nbGVCYXInLCBbMTA3MDQsIDgyNF1dLCBbJ05vdFJpZ2h0VHJpYW5nbGUnLCBbODkzOV1dLCBbJ05vdFJpZ2h0VHJpYW5nbGVFcXVhbCcsIFs4OTQxXV0sIFsnTm90U3F1YXJlU3Vic2V0JywgWzg4NDcsIDgyNF1dLCBbJ05vdFNxdWFyZVN1YnNldEVxdWFsJywgWzg5MzBdXSwgWydOb3RTcXVhcmVTdXBlcnNldCcsIFs4ODQ4LCA4MjRdXSwgWydOb3RTcXVhcmVTdXBlcnNldEVxdWFsJywgWzg5MzFdXSwgWydOb3RTdWJzZXQnLCBbODgzNCwgODQwMl1dLCBbJ05vdFN1YnNldEVxdWFsJywgWzg4NDBdXSwgWydOb3RTdWNjZWVkcycsIFs4ODMzXV0sIFsnTm90U3VjY2VlZHNFcXVhbCcsIFsxMDkyOCwgODI0XV0sIFsnTm90U3VjY2VlZHNTbGFudEVxdWFsJywgWzg5MjldXSwgWydOb3RTdWNjZWVkc1RpbGRlJywgWzg4MzEsIDgyNF1dLCBbJ05vdFN1cGVyc2V0JywgWzg4MzUsIDg0MDJdXSwgWydOb3RTdXBlcnNldEVxdWFsJywgWzg4NDFdXSwgWydOb3RUaWxkZScsIFs4NzY5XV0sIFsnTm90VGlsZGVFcXVhbCcsIFs4NzcyXV0sIFsnTm90VGlsZGVGdWxsRXF1YWwnLCBbODc3NV1dLCBbJ05vdFRpbGRlVGlsZGUnLCBbODc3N11dLCBbJ05vdFZlcnRpY2FsQmFyJywgWzg3NDBdXSwgWyducGFyYWxsZWwnLCBbODc0Ml1dLCBbJ25wYXInLCBbODc0Ml1dLCBbJ25wYXJzbCcsIFsxMTAwNSwgODQyMV1dLCBbJ25wYXJ0JywgWzg3MDYsIDgyNF1dLCBbJ25wb2xpbnQnLCBbMTA3NzJdXSwgWyducHInLCBbODgzMl1dLCBbJ25wcmN1ZScsIFs4OTI4XV0sIFsnbnByZWMnLCBbODgzMl1dLCBbJ25wcmVjZXEnLCBbMTA5MjcsIDgyNF1dLCBbJ25wcmUnLCBbMTA5MjcsIDgyNF1dLCBbJ25yYXJyYycsIFsxMDU0NywgODI0XV0sIFsnbnJhcnInLCBbODYwM11dLCBbJ25yQXJyJywgWzg2NTVdXSwgWyducmFycncnLCBbODYwNSwgODI0XV0sIFsnbnJpZ2h0YXJyb3cnLCBbODYwM11dLCBbJ25SaWdodGFycm93JywgWzg2NTVdXSwgWyducnRyaScsIFs4OTM5XV0sIFsnbnJ0cmllJywgWzg5NDFdXSwgWyduc2MnLCBbODgzM11dLCBbJ25zY2N1ZScsIFs4OTI5XV0sIFsnbnNjZScsIFsxMDkyOCwgODI0XV0sIFsnTnNjcicsIFsxMTk5NzddXSwgWyduc2NyJywgWzEyMDAwM11dLCBbJ25zaG9ydG1pZCcsIFs4NzQwXV0sIFsnbnNob3J0cGFyYWxsZWwnLCBbODc0Ml1dLCBbJ25zaW0nLCBbODc2OV1dLCBbJ25zaW1lJywgWzg3NzJdXSwgWyduc2ltZXEnLCBbODc3Ml1dLCBbJ25zbWlkJywgWzg3NDBdXSwgWyduc3BhcicsIFs4NzQyXV0sIFsnbnNxc3ViZScsIFs4OTMwXV0sIFsnbnNxc3VwZScsIFs4OTMxXV0sIFsnbnN1YicsIFs4ODM2XV0sIFsnbnN1YkUnLCBbMTA5NDksIDgyNF1dLCBbJ25zdWJlJywgWzg4NDBdXSwgWyduc3Vic2V0JywgWzg4MzQsIDg0MDJdXSwgWyduc3Vic2V0ZXEnLCBbODg0MF1dLCBbJ25zdWJzZXRlcXEnLCBbMTA5NDksIDgyNF1dLCBbJ25zdWNjJywgWzg4MzNdXSwgWyduc3VjY2VxJywgWzEwOTI4LCA4MjRdXSwgWyduc3VwJywgWzg4MzddXSwgWyduc3VwRScsIFsxMDk1MCwgODI0XV0sIFsnbnN1cGUnLCBbODg0MV1dLCBbJ25zdXBzZXQnLCBbODgzNSwgODQwMl1dLCBbJ25zdXBzZXRlcScsIFs4ODQxXV0sIFsnbnN1cHNldGVxcScsIFsxMDk1MCwgODI0XV0sIFsnbnRnbCcsIFs4ODI1XV0sIFsnTnRpbGRlJywgWzIwOV1dLCBbJ250aWxkZScsIFsyNDFdXSwgWydudGxnJywgWzg4MjRdXSwgWydudHJpYW5nbGVsZWZ0JywgWzg5MzhdXSwgWydudHJpYW5nbGVsZWZ0ZXEnLCBbODk0MF1dLCBbJ250cmlhbmdsZXJpZ2h0JywgWzg5MzldXSwgWydudHJpYW5nbGVyaWdodGVxJywgWzg5NDFdXSwgWydOdScsIFs5MjVdXSwgWydudScsIFs5NTddXSwgWydudW0nLCBbMzVdXSwgWydudW1lcm8nLCBbODQ3MF1dLCBbJ251bXNwJywgWzgxOTldXSwgWydudmFwJywgWzg3ODEsIDg0MDJdXSwgWydudmRhc2gnLCBbODg3Nl1dLCBbJ252RGFzaCcsIFs4ODc3XV0sIFsnblZkYXNoJywgWzg4NzhdXSwgWyduVkRhc2gnLCBbODg3OV1dLCBbJ252Z2UnLCBbODgwNSwgODQwMl1dLCBbJ252Z3QnLCBbNjIsIDg0MDJdXSwgWydudkhhcnInLCBbMTA1MDBdXSwgWydudmluZmluJywgWzEwNzE4XV0sIFsnbnZsQXJyJywgWzEwNDk4XV0sIFsnbnZsZScsIFs4ODA0LCA4NDAyXV0sIFsnbnZsdCcsIFs2MCwgODQwMl1dLCBbJ252bHRyaWUnLCBbODg4NCwgODQwMl1dLCBbJ252ckFycicsIFsxMDQ5OV1dLCBbJ252cnRyaWUnLCBbODg4NSwgODQwMl1dLCBbJ252c2ltJywgWzg3NjQsIDg0MDJdXSwgWydud2FyaGsnLCBbMTA1MzFdXSwgWydud2FycicsIFs4NTk4XV0sIFsnbndBcnInLCBbODY2Ml1dLCBbJ253YXJyb3cnLCBbODU5OF1dLCBbJ253bmVhcicsIFsxMDUzNV1dLCBbJ09hY3V0ZScsIFsyMTFdXSwgWydvYWN1dGUnLCBbMjQzXV0sIFsnb2FzdCcsIFs4ODU5XV0sIFsnT2NpcmMnLCBbMjEyXV0sIFsnb2NpcmMnLCBbMjQ0XV0sIFsnb2NpcicsIFs4ODU4XV0sIFsnT2N5JywgWzEwNTRdXSwgWydvY3knLCBbMTA4Nl1dLCBbJ29kYXNoJywgWzg4NjFdXSwgWydPZGJsYWMnLCBbMzM2XV0sIFsnb2RibGFjJywgWzMzN11dLCBbJ29kaXYnLCBbMTA4MDhdXSwgWydvZG90JywgWzg4NTddXSwgWydvZHNvbGQnLCBbMTA2ODRdXSwgWydPRWxpZycsIFszMzhdXSwgWydvZWxpZycsIFszMzldXSwgWydvZmNpcicsIFsxMDY4N11dLCBbJ09mcicsIFsxMjAwODJdXSwgWydvZnInLCBbMTIwMTA4XV0sIFsnb2dvbicsIFs3MzFdXSwgWydPZ3JhdmUnLCBbMjEwXV0sIFsnb2dyYXZlJywgWzI0Ml1dLCBbJ29ndCcsIFsxMDY4OV1dLCBbJ29oYmFyJywgWzEwNjc3XV0sIFsnb2htJywgWzkzN11dLCBbJ29pbnQnLCBbODc1MF1dLCBbJ29sYXJyJywgWzg2MzRdXSwgWydvbGNpcicsIFsxMDY4Nl1dLCBbJ29sY3Jvc3MnLCBbMTA2ODNdXSwgWydvbGluZScsIFs4MjU0XV0sIFsnb2x0JywgWzEwNjg4XV0sIFsnT21hY3InLCBbMzMyXV0sIFsnb21hY3InLCBbMzMzXV0sIFsnT21lZ2EnLCBbOTM3XV0sIFsnb21lZ2EnLCBbOTY5XV0sIFsnT21pY3JvbicsIFs5MjddXSwgWydvbWljcm9uJywgWzk1OV1dLCBbJ29taWQnLCBbMTA2NzhdXSwgWydvbWludXMnLCBbODg1NF1dLCBbJ09vcGYnLCBbMTIwMTM0XV0sIFsnb29wZicsIFsxMjAxNjBdXSwgWydvcGFyJywgWzEwNjc5XV0sIFsnT3BlbkN1cmx5RG91YmxlUXVvdGUnLCBbODIyMF1dLCBbJ09wZW5DdXJseVF1b3RlJywgWzgyMTZdXSwgWydvcGVycCcsIFsxMDY4MV1dLCBbJ29wbHVzJywgWzg4NTNdXSwgWydvcmFycicsIFs4NjM1XV0sIFsnT3InLCBbMTA4MzZdXSwgWydvcicsIFs4NzQ0XV0sIFsnb3JkJywgWzEwODQ1XV0sIFsnb3JkZXInLCBbODUwMF1dLCBbJ29yZGVyb2YnLCBbODUwMF1dLCBbJ29yZGYnLCBbMTcwXV0sIFsnb3JkbScsIFsxODZdXSwgWydvcmlnb2YnLCBbODg4Nl1dLCBbJ29yb3InLCBbMTA4MzhdXSwgWydvcnNsb3BlJywgWzEwODM5XV0sIFsnb3J2JywgWzEwODQzXV0sIFsnb1MnLCBbOTQxNl1dLCBbJ09zY3InLCBbMTE5OTc4XV0sIFsnb3NjcicsIFs4NTAwXV0sIFsnT3NsYXNoJywgWzIxNl1dLCBbJ29zbGFzaCcsIFsyNDhdXSwgWydvc29sJywgWzg4NTZdXSwgWydPdGlsZGUnLCBbMjEzXV0sIFsnb3RpbGRlJywgWzI0NV1dLCBbJ290aW1lc2FzJywgWzEwODA2XV0sIFsnT3RpbWVzJywgWzEwODA3XV0sIFsnb3RpbWVzJywgWzg4NTVdXSwgWydPdW1sJywgWzIxNF1dLCBbJ291bWwnLCBbMjQ2XV0sIFsnb3ZiYXInLCBbOTAyMV1dLCBbJ092ZXJCYXInLCBbODI1NF1dLCBbJ092ZXJCcmFjZScsIFs5MTgyXV0sIFsnT3ZlckJyYWNrZXQnLCBbOTE0MF1dLCBbJ092ZXJQYXJlbnRoZXNpcycsIFs5MTgwXV0sIFsncGFyYScsIFsxODJdXSwgWydwYXJhbGxlbCcsIFs4NzQxXV0sIFsncGFyJywgWzg3NDFdXSwgWydwYXJzaW0nLCBbMTA5OTVdXSwgWydwYXJzbCcsIFsxMTAwNV1dLCBbJ3BhcnQnLCBbODcwNl1dLCBbJ1BhcnRpYWxEJywgWzg3MDZdXSwgWydQY3knLCBbMTA1NV1dLCBbJ3BjeScsIFsxMDg3XV0sIFsncGVyY250JywgWzM3XV0sIFsncGVyaW9kJywgWzQ2XV0sIFsncGVybWlsJywgWzgyNDBdXSwgWydwZXJwJywgWzg4NjldXSwgWydwZXJ0ZW5rJywgWzgyNDFdXSwgWydQZnInLCBbMTIwMDgzXV0sIFsncGZyJywgWzEyMDEwOV1dLCBbJ1BoaScsIFs5MzRdXSwgWydwaGknLCBbOTY2XV0sIFsncGhpdicsIFs5ODFdXSwgWydwaG1tYXQnLCBbODQ5OV1dLCBbJ3Bob25lJywgWzk3NDJdXSwgWydQaScsIFs5MjhdXSwgWydwaScsIFs5NjBdXSwgWydwaXRjaGZvcmsnLCBbODkxNl1dLCBbJ3BpdicsIFs5ODJdXSwgWydwbGFuY2snLCBbODQ2M11dLCBbJ3BsYW5ja2gnLCBbODQ2Ml1dLCBbJ3BsYW5rdicsIFs4NDYzXV0sIFsncGx1c2FjaXInLCBbMTA3ODddXSwgWydwbHVzYicsIFs4ODYyXV0sIFsncGx1c2NpcicsIFsxMDc4Nl1dLCBbJ3BsdXMnLCBbNDNdXSwgWydwbHVzZG8nLCBbODcyNF1dLCBbJ3BsdXNkdScsIFsxMDc4OV1dLCBbJ3BsdXNlJywgWzEwODY2XV0sIFsnUGx1c01pbnVzJywgWzE3N11dLCBbJ3BsdXNtbicsIFsxNzddXSwgWydwbHVzc2ltJywgWzEwNzkwXV0sIFsncGx1c3R3bycsIFsxMDc5MV1dLCBbJ3BtJywgWzE3N11dLCBbJ1BvaW5jYXJlcGxhbmUnLCBbODQ2MF1dLCBbJ3BvaW50aW50JywgWzEwNzczXV0sIFsncG9wZicsIFsxMjAxNjFdXSwgWydQb3BmJywgWzg0NzNdXSwgWydwb3VuZCcsIFsxNjNdXSwgWydwcmFwJywgWzEwOTM1XV0sIFsnUHInLCBbMTA5MzldXSwgWydwcicsIFs4ODI2XV0sIFsncHJjdWUnLCBbODgyOF1dLCBbJ3ByZWNhcHByb3gnLCBbMTA5MzVdXSwgWydwcmVjJywgWzg4MjZdXSwgWydwcmVjY3VybHllcScsIFs4ODI4XV0sIFsnUHJlY2VkZXMnLCBbODgyNl1dLCBbJ1ByZWNlZGVzRXF1YWwnLCBbMTA5MjddXSwgWydQcmVjZWRlc1NsYW50RXF1YWwnLCBbODgyOF1dLCBbJ1ByZWNlZGVzVGlsZGUnLCBbODgzMF1dLCBbJ3ByZWNlcScsIFsxMDkyN11dLCBbJ3ByZWNuYXBwcm94JywgWzEwOTM3XV0sIFsncHJlY25lcXEnLCBbMTA5MzNdXSwgWydwcmVjbnNpbScsIFs4OTM2XV0sIFsncHJlJywgWzEwOTI3XV0sIFsncHJFJywgWzEwOTMxXV0sIFsncHJlY3NpbScsIFs4ODMwXV0sIFsncHJpbWUnLCBbODI0Ml1dLCBbJ1ByaW1lJywgWzgyNDNdXSwgWydwcmltZXMnLCBbODQ3M11dLCBbJ3BybmFwJywgWzEwOTM3XV0sIFsncHJuRScsIFsxMDkzM11dLCBbJ3BybnNpbScsIFs4OTM2XV0sIFsncHJvZCcsIFs4NzE5XV0sIFsnUHJvZHVjdCcsIFs4NzE5XV0sIFsncHJvZmFsYXInLCBbOTAwNl1dLCBbJ3Byb2ZsaW5lJywgWzg5NzhdXSwgWydwcm9mc3VyZicsIFs4OTc5XV0sIFsncHJvcCcsIFs4NzMzXV0sIFsnUHJvcG9ydGlvbmFsJywgWzg3MzNdXSwgWydQcm9wb3J0aW9uJywgWzg3NTldXSwgWydwcm9wdG8nLCBbODczM11dLCBbJ3Byc2ltJywgWzg4MzBdXSwgWydwcnVyZWwnLCBbODg4MF1dLCBbJ1BzY3InLCBbMTE5OTc5XV0sIFsncHNjcicsIFsxMjAwMDVdXSwgWydQc2knLCBbOTM2XV0sIFsncHNpJywgWzk2OF1dLCBbJ3B1bmNzcCcsIFs4MjAwXV0sIFsnUWZyJywgWzEyMDA4NF1dLCBbJ3FmcicsIFsxMjAxMTBdXSwgWydxaW50JywgWzEwNzY0XV0sIFsncW9wZicsIFsxMjAxNjJdXSwgWydRb3BmJywgWzg0NzRdXSwgWydxcHJpbWUnLCBbODI3OV1dLCBbJ1FzY3InLCBbMTE5OTgwXV0sIFsncXNjcicsIFsxMjAwMDZdXSwgWydxdWF0ZXJuaW9ucycsIFs4NDYxXV0sIFsncXVhdGludCcsIFsxMDc3NF1dLCBbJ3F1ZXN0JywgWzYzXV0sIFsncXVlc3RlcScsIFs4Nzk5XV0sIFsncXVvdCcsIFszNF1dLCBbJ1FVT1QnLCBbMzRdXSwgWydyQWFycicsIFs4NjY3XV0sIFsncmFjZScsIFs4NzY1LCA4MTddXSwgWydSYWN1dGUnLCBbMzQwXV0sIFsncmFjdXRlJywgWzM0MV1dLCBbJ3JhZGljJywgWzg3MzBdXSwgWydyYWVtcHR5dicsIFsxMDY3NV1dLCBbJ3JhbmcnLCBbMTAyMTddXSwgWydSYW5nJywgWzEwMjE5XV0sIFsncmFuZ2QnLCBbMTA2NDJdXSwgWydyYW5nZScsIFsxMDY2MV1dLCBbJ3JhbmdsZScsIFsxMDIxN11dLCBbJ3JhcXVvJywgWzE4N11dLCBbJ3JhcnJhcCcsIFsxMDYxM11dLCBbJ3JhcnJiJywgWzg2NzddXSwgWydyYXJyYmZzJywgWzEwNTI4XV0sIFsncmFycmMnLCBbMTA1NDddXSwgWydyYXJyJywgWzg1OTRdXSwgWydSYXJyJywgWzg2MDhdXSwgWydyQXJyJywgWzg2NThdXSwgWydyYXJyZnMnLCBbMTA1MjZdXSwgWydyYXJyaGsnLCBbODYxOF1dLCBbJ3JhcnJscCcsIFs4NjIwXV0sIFsncmFycnBsJywgWzEwNTY1XV0sIFsncmFycnNpbScsIFsxMDYxMl1dLCBbJ1JhcnJ0bCcsIFsxMDUxOF1dLCBbJ3JhcnJ0bCcsIFs4NjExXV0sIFsncmFycncnLCBbODYwNV1dLCBbJ3JhdGFpbCcsIFsxMDUyMl1dLCBbJ3JBdGFpbCcsIFsxMDUyNF1dLCBbJ3JhdGlvJywgWzg3NThdXSwgWydyYXRpb25hbHMnLCBbODQ3NF1dLCBbJ3JiYXJyJywgWzEwNTA5XV0sIFsnckJhcnInLCBbMTA1MTFdXSwgWydSQmFycicsIFsxMDUxMl1dLCBbJ3JiYnJrJywgWzEwMDk5XV0sIFsncmJyYWNlJywgWzEyNV1dLCBbJ3JicmFjaycsIFs5M11dLCBbJ3JicmtlJywgWzEwNjM2XV0sIFsncmJya3NsZCcsIFsxMDYzOF1dLCBbJ3JicmtzbHUnLCBbMTA2NDBdXSwgWydSY2Fyb24nLCBbMzQ0XV0sIFsncmNhcm9uJywgWzM0NV1dLCBbJ1JjZWRpbCcsIFszNDJdXSwgWydyY2VkaWwnLCBbMzQzXV0sIFsncmNlaWwnLCBbODk2OV1dLCBbJ3JjdWInLCBbMTI1XV0sIFsnUmN5JywgWzEwNTZdXSwgWydyY3knLCBbMTA4OF1dLCBbJ3JkY2EnLCBbMTA1NTFdXSwgWydyZGxkaGFyJywgWzEwNjAxXV0sIFsncmRxdW8nLCBbODIyMV1dLCBbJ3JkcXVvcicsIFs4MjIxXV0sIFsnQ2xvc2VDdXJseURvdWJsZVF1b3RlJywgWzgyMjFdXSwgWydyZHNoJywgWzg2MjddXSwgWydyZWFsJywgWzg0NzZdXSwgWydyZWFsaW5lJywgWzg0NzVdXSwgWydyZWFscGFydCcsIFs4NDc2XV0sIFsncmVhbHMnLCBbODQ3N11dLCBbJ1JlJywgWzg0NzZdXSwgWydyZWN0JywgWzk2NDVdXSwgWydyZWcnLCBbMTc0XV0sIFsnUkVHJywgWzE3NF1dLCBbJ1JldmVyc2VFbGVtZW50JywgWzg3MTVdXSwgWydSZXZlcnNlRXF1aWxpYnJpdW0nLCBbODY1MV1dLCBbJ1JldmVyc2VVcEVxdWlsaWJyaXVtJywgWzEwNjA3XV0sIFsncmZpc2h0JywgWzEwNjIxXV0sIFsncmZsb29yJywgWzg5NzFdXSwgWydyZnInLCBbMTIwMTExXV0sIFsnUmZyJywgWzg0NzZdXSwgWydySGFyJywgWzEwNTk2XV0sIFsncmhhcmQnLCBbODY0MV1dLCBbJ3JoYXJ1JywgWzg2NDBdXSwgWydyaGFydWwnLCBbMTA2MDRdXSwgWydSaG8nLCBbOTI5XV0sIFsncmhvJywgWzk2MV1dLCBbJ3Job3YnLCBbMTAwOV1dLCBbJ1JpZ2h0QW5nbGVCcmFja2V0JywgWzEwMjE3XV0sIFsnUmlnaHRBcnJvd0JhcicsIFs4Njc3XV0sIFsncmlnaHRhcnJvdycsIFs4NTk0XV0sIFsnUmlnaHRBcnJvdycsIFs4NTk0XV0sIFsnUmlnaHRhcnJvdycsIFs4NjU4XV0sIFsnUmlnaHRBcnJvd0xlZnRBcnJvdycsIFs4NjQ0XV0sIFsncmlnaHRhcnJvd3RhaWwnLCBbODYxMV1dLCBbJ1JpZ2h0Q2VpbGluZycsIFs4OTY5XV0sIFsnUmlnaHREb3VibGVCcmFja2V0JywgWzEwMjE1XV0sIFsnUmlnaHREb3duVGVlVmVjdG9yJywgWzEwNTg5XV0sIFsnUmlnaHREb3duVmVjdG9yQmFyJywgWzEwNTgxXV0sIFsnUmlnaHREb3duVmVjdG9yJywgWzg2NDJdXSwgWydSaWdodEZsb29yJywgWzg5NzFdXSwgWydyaWdodGhhcnBvb25kb3duJywgWzg2NDFdXSwgWydyaWdodGhhcnBvb251cCcsIFs4NjQwXV0sIFsncmlnaHRsZWZ0YXJyb3dzJywgWzg2NDRdXSwgWydyaWdodGxlZnRoYXJwb29ucycsIFs4NjUyXV0sIFsncmlnaHRyaWdodGFycm93cycsIFs4NjQ5XV0sIFsncmlnaHRzcXVpZ2Fycm93JywgWzg2MDVdXSwgWydSaWdodFRlZUFycm93JywgWzg2MTRdXSwgWydSaWdodFRlZScsIFs4ODY2XV0sIFsnUmlnaHRUZWVWZWN0b3InLCBbMTA1ODddXSwgWydyaWdodHRocmVldGltZXMnLCBbODkwOF1dLCBbJ1JpZ2h0VHJpYW5nbGVCYXInLCBbMTA3MDRdXSwgWydSaWdodFRyaWFuZ2xlJywgWzg4ODNdXSwgWydSaWdodFRyaWFuZ2xlRXF1YWwnLCBbODg4NV1dLCBbJ1JpZ2h0VXBEb3duVmVjdG9yJywgWzEwNTc1XV0sIFsnUmlnaHRVcFRlZVZlY3RvcicsIFsxMDU4OF1dLCBbJ1JpZ2h0VXBWZWN0b3JCYXInLCBbMTA1ODBdXSwgWydSaWdodFVwVmVjdG9yJywgWzg2MzhdXSwgWydSaWdodFZlY3RvckJhcicsIFsxMDU3OV1dLCBbJ1JpZ2h0VmVjdG9yJywgWzg2NDBdXSwgWydyaW5nJywgWzczMF1dLCBbJ3Jpc2luZ2RvdHNlcScsIFs4Nzg3XV0sIFsncmxhcnInLCBbODY0NF1dLCBbJ3JsaGFyJywgWzg2NTJdXSwgWydybG0nLCBbODIwN11dLCBbJ3Jtb3VzdGFjaGUnLCBbOTEzN11dLCBbJ3Jtb3VzdCcsIFs5MTM3XV0sIFsncm5taWQnLCBbMTA5OTBdXSwgWydyb2FuZycsIFsxMDIyMV1dLCBbJ3JvYXJyJywgWzg3MDJdXSwgWydyb2JyaycsIFsxMDIxNV1dLCBbJ3JvcGFyJywgWzEwNjMwXV0sIFsncm9wZicsIFsxMjAxNjNdXSwgWydSb3BmJywgWzg0NzddXSwgWydyb3BsdXMnLCBbMTA3OThdXSwgWydyb3RpbWVzJywgWzEwODA1XV0sIFsnUm91bmRJbXBsaWVzJywgWzEwNjA4XV0sIFsncnBhcicsIFs0MV1dLCBbJ3JwYXJndCcsIFsxMDY0NF1dLCBbJ3JwcG9saW50JywgWzEwNzcwXV0sIFsncnJhcnInLCBbODY0OV1dLCBbJ1JyaWdodGFycm93JywgWzg2NjddXSwgWydyc2FxdW8nLCBbODI1MF1dLCBbJ3JzY3InLCBbMTIwMDA3XV0sIFsnUnNjcicsIFs4NDc1XV0sIFsncnNoJywgWzg2MjVdXSwgWydSc2gnLCBbODYyNV1dLCBbJ3JzcWInLCBbOTNdXSwgWydyc3F1bycsIFs4MjE3XV0sIFsncnNxdW9yJywgWzgyMTddXSwgWydDbG9zZUN1cmx5UXVvdGUnLCBbODIxN11dLCBbJ3J0aHJlZScsIFs4OTA4XV0sIFsncnRpbWVzJywgWzg5MDZdXSwgWydydHJpJywgWzk2NTddXSwgWydydHJpZScsIFs4ODg1XV0sIFsncnRyaWYnLCBbOTY1Nl1dLCBbJ3J0cmlsdHJpJywgWzEwNzAyXV0sIFsnUnVsZURlbGF5ZWQnLCBbMTA3NDBdXSwgWydydWx1aGFyJywgWzEwNjAwXV0sIFsncngnLCBbODQ3OF1dLCBbJ1NhY3V0ZScsIFszNDZdXSwgWydzYWN1dGUnLCBbMzQ3XV0sIFsnc2JxdW8nLCBbODIxOF1dLCBbJ3NjYXAnLCBbMTA5MzZdXSwgWydTY2Fyb24nLCBbMzUyXV0sIFsnc2Nhcm9uJywgWzM1M11dLCBbJ1NjJywgWzEwOTQwXV0sIFsnc2MnLCBbODgyN11dLCBbJ3NjY3VlJywgWzg4MjldXSwgWydzY2UnLCBbMTA5MjhdXSwgWydzY0UnLCBbMTA5MzJdXSwgWydTY2VkaWwnLCBbMzUwXV0sIFsnc2NlZGlsJywgWzM1MV1dLCBbJ1NjaXJjJywgWzM0OF1dLCBbJ3NjaXJjJywgWzM0OV1dLCBbJ3NjbmFwJywgWzEwOTM4XV0sIFsnc2NuRScsIFsxMDkzNF1dLCBbJ3NjbnNpbScsIFs4OTM3XV0sIFsnc2Nwb2xpbnQnLCBbMTA3NzFdXSwgWydzY3NpbScsIFs4ODMxXV0sIFsnU2N5JywgWzEwNTddXSwgWydzY3knLCBbMTA4OV1dLCBbJ3Nkb3RiJywgWzg4NjVdXSwgWydzZG90JywgWzg5MDFdXSwgWydzZG90ZScsIFsxMDg1NF1dLCBbJ3NlYXJoaycsIFsxMDUzM11dLCBbJ3NlYXJyJywgWzg2MDBdXSwgWydzZUFycicsIFs4NjY0XV0sIFsnc2VhcnJvdycsIFs4NjAwXV0sIFsnc2VjdCcsIFsxNjddXSwgWydzZW1pJywgWzU5XV0sIFsnc2Vzd2FyJywgWzEwNTM3XV0sIFsnc2V0bWludXMnLCBbODcyNl1dLCBbJ3NldG1uJywgWzg3MjZdXSwgWydzZXh0JywgWzEwMDM4XV0sIFsnU2ZyJywgWzEyMDA4Nl1dLCBbJ3NmcicsIFsxMjAxMTJdXSwgWydzZnJvd24nLCBbODk5NF1dLCBbJ3NoYXJwJywgWzk4MzldXSwgWydTSENIY3knLCBbMTA2NV1dLCBbJ3NoY2hjeScsIFsxMDk3XV0sIFsnU0hjeScsIFsxMDY0XV0sIFsnc2hjeScsIFsxMDk2XV0sIFsnU2hvcnREb3duQXJyb3cnLCBbODU5NV1dLCBbJ1Nob3J0TGVmdEFycm93JywgWzg1OTJdXSwgWydzaG9ydG1pZCcsIFs4NzM5XV0sIFsnc2hvcnRwYXJhbGxlbCcsIFs4NzQxXV0sIFsnU2hvcnRSaWdodEFycm93JywgWzg1OTRdXSwgWydTaG9ydFVwQXJyb3cnLCBbODU5M11dLCBbJ3NoeScsIFsxNzNdXSwgWydTaWdtYScsIFs5MzFdXSwgWydzaWdtYScsIFs5NjNdXSwgWydzaWdtYWYnLCBbOTYyXV0sIFsnc2lnbWF2JywgWzk2Ml1dLCBbJ3NpbScsIFs4NzY0XV0sIFsnc2ltZG90JywgWzEwODU4XV0sIFsnc2ltZScsIFs4NzcxXV0sIFsnc2ltZXEnLCBbODc3MV1dLCBbJ3NpbWcnLCBbMTA5MTBdXSwgWydzaW1nRScsIFsxMDkxMl1dLCBbJ3NpbWwnLCBbMTA5MDldXSwgWydzaW1sRScsIFsxMDkxMV1dLCBbJ3NpbW5lJywgWzg3NzRdXSwgWydzaW1wbHVzJywgWzEwNzg4XV0sIFsnc2ltcmFycicsIFsxMDYxMF1dLCBbJ3NsYXJyJywgWzg1OTJdXSwgWydTbWFsbENpcmNsZScsIFs4NzI4XV0sIFsnc21hbGxzZXRtaW51cycsIFs4NzI2XV0sIFsnc21hc2hwJywgWzEwODAzXV0sIFsnc21lcGFyc2wnLCBbMTA3MjRdXSwgWydzbWlkJywgWzg3MzldXSwgWydzbWlsZScsIFs4OTk1XV0sIFsnc210JywgWzEwOTIyXV0sIFsnc210ZScsIFsxMDkyNF1dLCBbJ3NtdGVzJywgWzEwOTI0LCA2NTAyNF1dLCBbJ1NPRlRjeScsIFsxMDY4XV0sIFsnc29mdGN5JywgWzExMDBdXSwgWydzb2xiYXInLCBbOTAyM11dLCBbJ3NvbGInLCBbMTA2OTJdXSwgWydzb2wnLCBbNDddXSwgWydTb3BmJywgWzEyMDEzOF1dLCBbJ3NvcGYnLCBbMTIwMTY0XV0sIFsnc3BhZGVzJywgWzk4MjRdXSwgWydzcGFkZXN1aXQnLCBbOTgyNF1dLCBbJ3NwYXInLCBbODc0MV1dLCBbJ3NxY2FwJywgWzg4NTFdXSwgWydzcWNhcHMnLCBbODg1MSwgNjUwMjRdXSwgWydzcWN1cCcsIFs4ODUyXV0sIFsnc3FjdXBzJywgWzg4NTIsIDY1MDI0XV0sIFsnU3FydCcsIFs4NzMwXV0sIFsnc3FzdWInLCBbODg0N11dLCBbJ3Nxc3ViZScsIFs4ODQ5XV0sIFsnc3FzdWJzZXQnLCBbODg0N11dLCBbJ3Nxc3Vic2V0ZXEnLCBbODg0OV1dLCBbJ3Nxc3VwJywgWzg4NDhdXSwgWydzcXN1cGUnLCBbODg1MF1dLCBbJ3Nxc3Vwc2V0JywgWzg4NDhdXSwgWydzcXN1cHNldGVxJywgWzg4NTBdXSwgWydzcXVhcmUnLCBbOTYzM11dLCBbJ1NxdWFyZScsIFs5NjMzXV0sIFsnU3F1YXJlSW50ZXJzZWN0aW9uJywgWzg4NTFdXSwgWydTcXVhcmVTdWJzZXQnLCBbODg0N11dLCBbJ1NxdWFyZVN1YnNldEVxdWFsJywgWzg4NDldXSwgWydTcXVhcmVTdXBlcnNldCcsIFs4ODQ4XV0sIFsnU3F1YXJlU3VwZXJzZXRFcXVhbCcsIFs4ODUwXV0sIFsnU3F1YXJlVW5pb24nLCBbODg1Ml1dLCBbJ3NxdWFyZicsIFs5NjQyXV0sIFsnc3F1JywgWzk2MzNdXSwgWydzcXVmJywgWzk2NDJdXSwgWydzcmFycicsIFs4NTk0XV0sIFsnU3NjcicsIFsxMTk5ODJdXSwgWydzc2NyJywgWzEyMDAwOF1dLCBbJ3NzZXRtbicsIFs4NzI2XV0sIFsnc3NtaWxlJywgWzg5OTVdXSwgWydzc3RhcmYnLCBbODkwMl1dLCBbJ1N0YXInLCBbODkwMl1dLCBbJ3N0YXInLCBbOTczNF1dLCBbJ3N0YXJmJywgWzk3MzNdXSwgWydzdHJhaWdodGVwc2lsb24nLCBbMTAxM11dLCBbJ3N0cmFpZ2h0cGhpJywgWzk4MV1dLCBbJ3N0cm5zJywgWzE3NV1dLCBbJ3N1YicsIFs4ODM0XV0sIFsnU3ViJywgWzg5MTJdXSwgWydzdWJkb3QnLCBbMTA5NDFdXSwgWydzdWJFJywgWzEwOTQ5XV0sIFsnc3ViZScsIFs4ODM4XV0sIFsnc3ViZWRvdCcsIFsxMDk0N11dLCBbJ3N1Ym11bHQnLCBbMTA5NDVdXSwgWydzdWJuRScsIFsxMDk1NV1dLCBbJ3N1Ym5lJywgWzg4NDJdXSwgWydzdWJwbHVzJywgWzEwOTQzXV0sIFsnc3VicmFycicsIFsxMDYxN11dLCBbJ3N1YnNldCcsIFs4ODM0XV0sIFsnU3Vic2V0JywgWzg5MTJdXSwgWydzdWJzZXRlcScsIFs4ODM4XV0sIFsnc3Vic2V0ZXFxJywgWzEwOTQ5XV0sIFsnU3Vic2V0RXF1YWwnLCBbODgzOF1dLCBbJ3N1YnNldG5lcScsIFs4ODQyXV0sIFsnc3Vic2V0bmVxcScsIFsxMDk1NV1dLCBbJ3N1YnNpbScsIFsxMDk1MV1dLCBbJ3N1YnN1YicsIFsxMDk2NV1dLCBbJ3N1YnN1cCcsIFsxMDk2M11dLCBbJ3N1Y2NhcHByb3gnLCBbMTA5MzZdXSwgWydzdWNjJywgWzg4MjddXSwgWydzdWNjY3VybHllcScsIFs4ODI5XV0sIFsnU3VjY2VlZHMnLCBbODgyN11dLCBbJ1N1Y2NlZWRzRXF1YWwnLCBbMTA5MjhdXSwgWydTdWNjZWVkc1NsYW50RXF1YWwnLCBbODgyOV1dLCBbJ1N1Y2NlZWRzVGlsZGUnLCBbODgzMV1dLCBbJ3N1Y2NlcScsIFsxMDkyOF1dLCBbJ3N1Y2NuYXBwcm94JywgWzEwOTM4XV0sIFsnc3VjY25lcXEnLCBbMTA5MzRdXSwgWydzdWNjbnNpbScsIFs4OTM3XV0sIFsnc3VjY3NpbScsIFs4ODMxXV0sIFsnU3VjaFRoYXQnLCBbODcxNV1dLCBbJ3N1bScsIFs4NzIxXV0sIFsnU3VtJywgWzg3MjFdXSwgWydzdW5nJywgWzk4MzRdXSwgWydzdXAxJywgWzE4NV1dLCBbJ3N1cDInLCBbMTc4XV0sIFsnc3VwMycsIFsxNzldXSwgWydzdXAnLCBbODgzNV1dLCBbJ1N1cCcsIFs4OTEzXV0sIFsnc3VwZG90JywgWzEwOTQyXV0sIFsnc3VwZHN1YicsIFsxMDk2OF1dLCBbJ3N1cEUnLCBbMTA5NTBdXSwgWydzdXBlJywgWzg4MzldXSwgWydzdXBlZG90JywgWzEwOTQ4XV0sIFsnU3VwZXJzZXQnLCBbODgzNV1dLCBbJ1N1cGVyc2V0RXF1YWwnLCBbODgzOV1dLCBbJ3N1cGhzb2wnLCBbMTAxODVdXSwgWydzdXBoc3ViJywgWzEwOTY3XV0sIFsnc3VwbGFycicsIFsxMDYxOV1dLCBbJ3N1cG11bHQnLCBbMTA5NDZdXSwgWydzdXBuRScsIFsxMDk1Nl1dLCBbJ3N1cG5lJywgWzg4NDNdXSwgWydzdXBwbHVzJywgWzEwOTQ0XV0sIFsnc3Vwc2V0JywgWzg4MzVdXSwgWydTdXBzZXQnLCBbODkxM11dLCBbJ3N1cHNldGVxJywgWzg4MzldXSwgWydzdXBzZXRlcXEnLCBbMTA5NTBdXSwgWydzdXBzZXRuZXEnLCBbODg0M11dLCBbJ3N1cHNldG5lcXEnLCBbMTA5NTZdXSwgWydzdXBzaW0nLCBbMTA5NTJdXSwgWydzdXBzdWInLCBbMTA5NjRdXSwgWydzdXBzdXAnLCBbMTA5NjZdXSwgWydzd2FyaGsnLCBbMTA1MzRdXSwgWydzd2FycicsIFs4NjAxXV0sIFsnc3dBcnInLCBbODY2NV1dLCBbJ3N3YXJyb3cnLCBbODYwMV1dLCBbJ3N3bndhcicsIFsxMDUzOF1dLCBbJ3N6bGlnJywgWzIyM11dLCBbJ1RhYicsIFs5XV0sIFsndGFyZ2V0JywgWzg5ODJdXSwgWydUYXUnLCBbOTMyXV0sIFsndGF1JywgWzk2NF1dLCBbJ3RicmsnLCBbOTE0MF1dLCBbJ1RjYXJvbicsIFszNTZdXSwgWyd0Y2Fyb24nLCBbMzU3XV0sIFsnVGNlZGlsJywgWzM1NF1dLCBbJ3RjZWRpbCcsIFszNTVdXSwgWydUY3knLCBbMTA1OF1dLCBbJ3RjeScsIFsxMDkwXV0sIFsndGRvdCcsIFs4NDExXV0sIFsndGVscmVjJywgWzg5ODFdXSwgWydUZnInLCBbMTIwMDg3XV0sIFsndGZyJywgWzEyMDExM11dLCBbJ3RoZXJlNCcsIFs4NzU2XV0sIFsndGhlcmVmb3JlJywgWzg3NTZdXSwgWydUaGVyZWZvcmUnLCBbODc1Nl1dLCBbJ1RoZXRhJywgWzkyMF1dLCBbJ3RoZXRhJywgWzk1Ml1dLCBbJ3RoZXRhc3ltJywgWzk3N11dLCBbJ3RoZXRhdicsIFs5NzddXSwgWyd0aGlja2FwcHJveCcsIFs4Nzc2XV0sIFsndGhpY2tzaW0nLCBbODc2NF1dLCBbJ1RoaWNrU3BhY2UnLCBbODI4NywgODIwMl1dLCBbJ1RoaW5TcGFjZScsIFs4MjAxXV0sIFsndGhpbnNwJywgWzgyMDFdXSwgWyd0aGthcCcsIFs4Nzc2XV0sIFsndGhrc2ltJywgWzg3NjRdXSwgWydUSE9STicsIFsyMjJdXSwgWyd0aG9ybicsIFsyNTRdXSwgWyd0aWxkZScsIFs3MzJdXSwgWydUaWxkZScsIFs4NzY0XV0sIFsnVGlsZGVFcXVhbCcsIFs4NzcxXV0sIFsnVGlsZGVGdWxsRXF1YWwnLCBbODc3M11dLCBbJ1RpbGRlVGlsZGUnLCBbODc3Nl1dLCBbJ3RpbWVzYmFyJywgWzEwODAxXV0sIFsndGltZXNiJywgWzg4NjRdXSwgWyd0aW1lcycsIFsyMTVdXSwgWyd0aW1lc2QnLCBbMTA4MDBdXSwgWyd0aW50JywgWzg3NDldXSwgWyd0b2VhJywgWzEwNTM2XV0sIFsndG9wYm90JywgWzkwMTRdXSwgWyd0b3BjaXInLCBbMTA5OTNdXSwgWyd0b3AnLCBbODg2OF1dLCBbJ1RvcGYnLCBbMTIwMTM5XV0sIFsndG9wZicsIFsxMjAxNjVdXSwgWyd0b3Bmb3JrJywgWzEwOTcwXV0sIFsndG9zYScsIFsxMDUzN11dLCBbJ3RwcmltZScsIFs4MjQ0XV0sIFsndHJhZGUnLCBbODQ4Ml1dLCBbJ1RSQURFJywgWzg0ODJdXSwgWyd0cmlhbmdsZScsIFs5NjUzXV0sIFsndHJpYW5nbGVkb3duJywgWzk2NjNdXSwgWyd0cmlhbmdsZWxlZnQnLCBbOTY2N11dLCBbJ3RyaWFuZ2xlbGVmdGVxJywgWzg4ODRdXSwgWyd0cmlhbmdsZXEnLCBbODc5Nl1dLCBbJ3RyaWFuZ2xlcmlnaHQnLCBbOTY1N11dLCBbJ3RyaWFuZ2xlcmlnaHRlcScsIFs4ODg1XV0sIFsndHJpZG90JywgWzk3MDhdXSwgWyd0cmllJywgWzg3OTZdXSwgWyd0cmltaW51cycsIFsxMDgxMF1dLCBbJ1RyaXBsZURvdCcsIFs4NDExXV0sIFsndHJpcGx1cycsIFsxMDgwOV1dLCBbJ3RyaXNiJywgWzEwNzAxXV0sIFsndHJpdGltZScsIFsxMDgxMV1dLCBbJ3RycGV6aXVtJywgWzkxODZdXSwgWydUc2NyJywgWzExOTk4M11dLCBbJ3RzY3InLCBbMTIwMDA5XV0sIFsnVFNjeScsIFsxMDYyXV0sIFsndHNjeScsIFsxMDk0XV0sIFsnVFNIY3knLCBbMTAzNV1dLCBbJ3RzaGN5JywgWzExMTVdXSwgWydUc3Ryb2snLCBbMzU4XV0sIFsndHN0cm9rJywgWzM1OV1dLCBbJ3R3aXh0JywgWzg4MTJdXSwgWyd0d29oZWFkbGVmdGFycm93JywgWzg2MDZdXSwgWyd0d29oZWFkcmlnaHRhcnJvdycsIFs4NjA4XV0sIFsnVWFjdXRlJywgWzIxOF1dLCBbJ3VhY3V0ZScsIFsyNTBdXSwgWyd1YXJyJywgWzg1OTNdXSwgWydVYXJyJywgWzg2MDddXSwgWyd1QXJyJywgWzg2NTddXSwgWydVYXJyb2NpcicsIFsxMDU2OV1dLCBbJ1VicmN5JywgWzEwMzhdXSwgWyd1YnJjeScsIFsxMTE4XV0sIFsnVWJyZXZlJywgWzM2NF1dLCBbJ3VicmV2ZScsIFszNjVdXSwgWydVY2lyYycsIFsyMTldXSwgWyd1Y2lyYycsIFsyNTFdXSwgWydVY3knLCBbMTA1OV1dLCBbJ3VjeScsIFsxMDkxXV0sIFsndWRhcnInLCBbODY0NV1dLCBbJ1VkYmxhYycsIFszNjhdXSwgWyd1ZGJsYWMnLCBbMzY5XV0sIFsndWRoYXInLCBbMTA2MDZdXSwgWyd1ZmlzaHQnLCBbMTA2MjJdXSwgWydVZnInLCBbMTIwMDg4XV0sIFsndWZyJywgWzEyMDExNF1dLCBbJ1VncmF2ZScsIFsyMTddXSwgWyd1Z3JhdmUnLCBbMjQ5XV0sIFsndUhhcicsIFsxMDU5NV1dLCBbJ3VoYXJsJywgWzg2MzldXSwgWyd1aGFycicsIFs4NjM4XV0sIFsndWhibGsnLCBbOTYwMF1dLCBbJ3VsY29ybicsIFs4OTg4XV0sIFsndWxjb3JuZXInLCBbODk4OF1dLCBbJ3VsY3JvcCcsIFs4OTc1XV0sIFsndWx0cmknLCBbOTcyMF1dLCBbJ1VtYWNyJywgWzM2Ml1dLCBbJ3VtYWNyJywgWzM2M11dLCBbJ3VtbCcsIFsxNjhdXSwgWydVbmRlckJhcicsIFs5NV1dLCBbJ1VuZGVyQnJhY2UnLCBbOTE4M11dLCBbJ1VuZGVyQnJhY2tldCcsIFs5MTQxXV0sIFsnVW5kZXJQYXJlbnRoZXNpcycsIFs5MTgxXV0sIFsnVW5pb24nLCBbODg5OV1dLCBbJ1VuaW9uUGx1cycsIFs4ODQ2XV0sIFsnVW9nb24nLCBbMzcwXV0sIFsndW9nb24nLCBbMzcxXV0sIFsnVW9wZicsIFsxMjAxNDBdXSwgWyd1b3BmJywgWzEyMDE2Nl1dLCBbJ1VwQXJyb3dCYXInLCBbMTA1MTRdXSwgWyd1cGFycm93JywgWzg1OTNdXSwgWydVcEFycm93JywgWzg1OTNdXSwgWydVcGFycm93JywgWzg2NTddXSwgWydVcEFycm93RG93bkFycm93JywgWzg2NDVdXSwgWyd1cGRvd25hcnJvdycsIFs4NTk3XV0sIFsnVXBEb3duQXJyb3cnLCBbODU5N11dLCBbJ1VwZG93bmFycm93JywgWzg2NjFdXSwgWydVcEVxdWlsaWJyaXVtJywgWzEwNjA2XV0sIFsndXBoYXJwb29ubGVmdCcsIFs4NjM5XV0sIFsndXBoYXJwb29ucmlnaHQnLCBbODYzOF1dLCBbJ3VwbHVzJywgWzg4NDZdXSwgWydVcHBlckxlZnRBcnJvdycsIFs4NTk4XV0sIFsnVXBwZXJSaWdodEFycm93JywgWzg1OTldXSwgWyd1cHNpJywgWzk2NV1dLCBbJ1Vwc2knLCBbOTc4XV0sIFsndXBzaWgnLCBbOTc4XV0sIFsnVXBzaWxvbicsIFs5MzNdXSwgWyd1cHNpbG9uJywgWzk2NV1dLCBbJ1VwVGVlQXJyb3cnLCBbODYxM11dLCBbJ1VwVGVlJywgWzg4NjldXSwgWyd1cHVwYXJyb3dzJywgWzg2NDhdXSwgWyd1cmNvcm4nLCBbODk4OV1dLCBbJ3VyY29ybmVyJywgWzg5ODldXSwgWyd1cmNyb3AnLCBbODk3NF1dLCBbJ1VyaW5nJywgWzM2Nl1dLCBbJ3VyaW5nJywgWzM2N11dLCBbJ3VydHJpJywgWzk3MjFdXSwgWydVc2NyJywgWzExOTk4NF1dLCBbJ3VzY3InLCBbMTIwMDEwXV0sIFsndXRkb3QnLCBbODk0NF1dLCBbJ1V0aWxkZScsIFszNjBdXSwgWyd1dGlsZGUnLCBbMzYxXV0sIFsndXRyaScsIFs5NjUzXV0sIFsndXRyaWYnLCBbOTY1Ml1dLCBbJ3V1YXJyJywgWzg2NDhdXSwgWydVdW1sJywgWzIyMF1dLCBbJ3V1bWwnLCBbMjUyXV0sIFsndXdhbmdsZScsIFsxMDY2M11dLCBbJ3ZhbmdydCcsIFsxMDY1Ml1dLCBbJ3ZhcmVwc2lsb24nLCBbMTAxM11dLCBbJ3ZhcmthcHBhJywgWzEwMDhdXSwgWyd2YXJub3RoaW5nJywgWzg3MDldXSwgWyd2YXJwaGknLCBbOTgxXV0sIFsndmFycGknLCBbOTgyXV0sIFsndmFycHJvcHRvJywgWzg3MzNdXSwgWyd2YXJyJywgWzg1OTddXSwgWyd2QXJyJywgWzg2NjFdXSwgWyd2YXJyaG8nLCBbMTAwOV1dLCBbJ3ZhcnNpZ21hJywgWzk2Ml1dLCBbJ3ZhcnN1YnNldG5lcScsIFs4ODQyLCA2NTAyNF1dLCBbJ3ZhcnN1YnNldG5lcXEnLCBbMTA5NTUsIDY1MDI0XV0sIFsndmFyc3Vwc2V0bmVxJywgWzg4NDMsIDY1MDI0XV0sIFsndmFyc3Vwc2V0bmVxcScsIFsxMDk1NiwgNjUwMjRdXSwgWyd2YXJ0aGV0YScsIFs5NzddXSwgWyd2YXJ0cmlhbmdsZWxlZnQnLCBbODg4Ml1dLCBbJ3ZhcnRyaWFuZ2xlcmlnaHQnLCBbODg4M11dLCBbJ3ZCYXInLCBbMTA5ODRdXSwgWydWYmFyJywgWzEwOTg3XV0sIFsndkJhcnYnLCBbMTA5ODVdXSwgWydWY3knLCBbMTA0Ml1dLCBbJ3ZjeScsIFsxMDc0XV0sIFsndmRhc2gnLCBbODg2Nl1dLCBbJ3ZEYXNoJywgWzg4NzJdXSwgWydWZGFzaCcsIFs4ODczXV0sIFsnVkRhc2gnLCBbODg3NV1dLCBbJ1ZkYXNobCcsIFsxMDk4Ml1dLCBbJ3ZlZWJhcicsIFs4ODkxXV0sIFsndmVlJywgWzg3NDRdXSwgWydWZWUnLCBbODg5N11dLCBbJ3ZlZWVxJywgWzg3OTRdXSwgWyd2ZWxsaXAnLCBbODk0Ml1dLCBbJ3ZlcmJhcicsIFsxMjRdXSwgWydWZXJiYXInLCBbODIxNF1dLCBbJ3ZlcnQnLCBbMTI0XV0sIFsnVmVydCcsIFs4MjE0XV0sIFsnVmVydGljYWxCYXInLCBbODczOV1dLCBbJ1ZlcnRpY2FsTGluZScsIFsxMjRdXSwgWydWZXJ0aWNhbFNlcGFyYXRvcicsIFsxMDA3Ml1dLCBbJ1ZlcnRpY2FsVGlsZGUnLCBbODc2OF1dLCBbJ1ZlcnlUaGluU3BhY2UnLCBbODIwMl1dLCBbJ1ZmcicsIFsxMjAwODldXSwgWyd2ZnInLCBbMTIwMTE1XV0sIFsndmx0cmknLCBbODg4Ml1dLCBbJ3Zuc3ViJywgWzg4MzQsIDg0MDJdXSwgWyd2bnN1cCcsIFs4ODM1LCA4NDAyXV0sIFsnVm9wZicsIFsxMjAxNDFdXSwgWyd2b3BmJywgWzEyMDE2N11dLCBbJ3Zwcm9wJywgWzg3MzNdXSwgWyd2cnRyaScsIFs4ODgzXV0sIFsnVnNjcicsIFsxMTk5ODVdXSwgWyd2c2NyJywgWzEyMDAxMV1dLCBbJ3ZzdWJuRScsIFsxMDk1NSwgNjUwMjRdXSwgWyd2c3VibmUnLCBbODg0MiwgNjUwMjRdXSwgWyd2c3VwbkUnLCBbMTA5NTYsIDY1MDI0XV0sIFsndnN1cG5lJywgWzg4NDMsIDY1MDI0XV0sIFsnVnZkYXNoJywgWzg4NzRdXSwgWyd2emlnemFnJywgWzEwNjUwXV0sIFsnV2NpcmMnLCBbMzcyXV0sIFsnd2NpcmMnLCBbMzczXV0sIFsnd2VkYmFyJywgWzEwODQ3XV0sIFsnd2VkZ2UnLCBbODc0M11dLCBbJ1dlZGdlJywgWzg4OTZdXSwgWyd3ZWRnZXEnLCBbODc5M11dLCBbJ3dlaWVycCcsIFs4NDcyXV0sIFsnV2ZyJywgWzEyMDA5MF1dLCBbJ3dmcicsIFsxMjAxMTZdXSwgWydXb3BmJywgWzEyMDE0Ml1dLCBbJ3dvcGYnLCBbMTIwMTY4XV0sIFsnd3AnLCBbODQ3Ml1dLCBbJ3dyJywgWzg3NjhdXSwgWyd3cmVhdGgnLCBbODc2OF1dLCBbJ1dzY3InLCBbMTE5OTg2XV0sIFsnd3NjcicsIFsxMjAwMTJdXSwgWyd4Y2FwJywgWzg4OThdXSwgWyd4Y2lyYycsIFs5NzExXV0sIFsneGN1cCcsIFs4ODk5XV0sIFsneGR0cmknLCBbOTY2MV1dLCBbJ1hmcicsIFsxMjAwOTFdXSwgWyd4ZnInLCBbMTIwMTE3XV0sIFsneGhhcnInLCBbMTAyMzFdXSwgWyd4aEFycicsIFsxMDIzNF1dLCBbJ1hpJywgWzkyNl1dLCBbJ3hpJywgWzk1OF1dLCBbJ3hsYXJyJywgWzEwMjI5XV0sIFsneGxBcnInLCBbMTAyMzJdXSwgWyd4bWFwJywgWzEwMjM2XV0sIFsneG5pcycsIFs4OTU1XV0sIFsneG9kb3QnLCBbMTA3NTJdXSwgWydYb3BmJywgWzEyMDE0M11dLCBbJ3hvcGYnLCBbMTIwMTY5XV0sIFsneG9wbHVzJywgWzEwNzUzXV0sIFsneG90aW1lJywgWzEwNzU0XV0sIFsneHJhcnInLCBbMTAyMzBdXSwgWyd4ckFycicsIFsxMDIzM11dLCBbJ1hzY3InLCBbMTE5OTg3XV0sIFsneHNjcicsIFsxMjAwMTNdXSwgWyd4c3FjdXAnLCBbMTA3NThdXSwgWyd4dXBsdXMnLCBbMTA3NTZdXSwgWyd4dXRyaScsIFs5NjUxXV0sIFsneHZlZScsIFs4ODk3XV0sIFsneHdlZGdlJywgWzg4OTZdXSwgWydZYWN1dGUnLCBbMjIxXV0sIFsneWFjdXRlJywgWzI1M11dLCBbJ1lBY3knLCBbMTA3MV1dLCBbJ3lhY3knLCBbMTEwM11dLCBbJ1ljaXJjJywgWzM3NF1dLCBbJ3ljaXJjJywgWzM3NV1dLCBbJ1ljeScsIFsxMDY3XV0sIFsneWN5JywgWzEwOTldXSwgWyd5ZW4nLCBbMTY1XV0sIFsnWWZyJywgWzEyMDA5Ml1dLCBbJ3lmcicsIFsxMjAxMThdXSwgWydZSWN5JywgWzEwMzFdXSwgWyd5aWN5JywgWzExMTFdXSwgWydZb3BmJywgWzEyMDE0NF1dLCBbJ3lvcGYnLCBbMTIwMTcwXV0sIFsnWXNjcicsIFsxMTk5ODhdXSwgWyd5c2NyJywgWzEyMDAxNF1dLCBbJ1lVY3knLCBbMTA3MF1dLCBbJ3l1Y3knLCBbMTEwMl1dLCBbJ3l1bWwnLCBbMjU1XV0sIFsnWXVtbCcsIFszNzZdXSwgWydaYWN1dGUnLCBbMzc3XV0sIFsnemFjdXRlJywgWzM3OF1dLCBbJ1pjYXJvbicsIFszODFdXSwgWyd6Y2Fyb24nLCBbMzgyXV0sIFsnWmN5JywgWzEwNDddXSwgWyd6Y3knLCBbMTA3OV1dLCBbJ1pkb3QnLCBbMzc5XV0sIFsnemRvdCcsIFszODBdXSwgWyd6ZWV0cmYnLCBbODQ4OF1dLCBbJ1plcm9XaWR0aFNwYWNlJywgWzgyMDNdXSwgWydaZXRhJywgWzkxOF1dLCBbJ3pldGEnLCBbOTUwXV0sIFsnemZyJywgWzEyMDExOV1dLCBbJ1pmcicsIFs4NDg4XV0sIFsnWkhjeScsIFsxMDQ2XV0sIFsnemhjeScsIFsxMDc4XV0sIFsnemlncmFycicsIFs4NjY5XV0sIFsnem9wZicsIFsxMjAxNzFdXSwgWydab3BmJywgWzg0ODRdXSwgWydac2NyJywgWzExOTk4OV1dLCBbJ3pzY3InLCBbMTIwMDE1XV0sIFsnendqJywgWzgyMDVdXSwgWyd6d25qJywgWzgyMDRdXV07XG5cbnZhciBhbHBoYUluZGV4ID0ge307XG52YXIgY2hhckluZGV4ID0ge307XG5cbmNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSHRtbDVFbnRpdGllcygpIHt9XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuSHRtbDVFbnRpdGllcy5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYoIz9bXFx3XFxkXSspOz8vZywgZnVuY3Rpb24ocywgZW50aXR5KSB7XG4gICAgICAgIHZhciBjaHI7XG4gICAgICAgIGlmIChlbnRpdHkuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgICAgICAgdmFyIGNvZGUgPSBlbnRpdHkuY2hhckF0KDEpID09PSAneCcgP1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGVudGl0eS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgMTYpIDpcbiAgICAgICAgICAgICAgICBwYXJzZUludChlbnRpdHkuc3Vic3RyKDEpKTtcblxuICAgICAgICAgICAgaWYgKCEoaXNOYU4oY29kZSkgfHwgY29kZSA8IC0zMjc2OCB8fCBjb2RlID4gNjU1MzUpKSB7XG4gICAgICAgICAgICAgICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNociA9IGFscGhhSW5kZXhbZW50aXR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hyIHx8IHM7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBIdG1sNUVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSHRtbDVFbnRpdGllcygpLmRlY29kZShzdHIpO1xuIH07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuSHRtbDVFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaGFySW5mbyA9IGNoYXJJbmRleFtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGlmIChjaGFySW5mbykge1xuICAgICAgICAgICAgdmFyIGFscGhhID0gY2hhckluZm9bc3RyLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxwaGEgPSBjaGFySW5mb1snJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG4gSHRtbDVFbnRpdGllcy5lbmNvZGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IEh0bWw1RW50aXRpZXMoKS5lbmNvZGUoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw1RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgY2hhckluZm8gPSBjaGFySW5kZXhbY107XG4gICAgICAgIGlmIChjaGFySW5mbykge1xuICAgICAgICAgICAgdmFyIGFscGhhID0gY2hhckluZm9bc3RyLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxwaGEgPSBjaGFySW5mb1snJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIEh0bWw1RW50aXRpZXMuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNUVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gfTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNUVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGVOb25BU0NJSSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8PSAyNTUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzdHJbaSsrXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgaSsrXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBIdG1sNUVudGl0aWVzLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNUVudGl0aWVzKCkuZW5jb2RlTm9uQVNDSUkoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbHBoYUluZGV4IFBhc3NlZCBieSByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY2hhckluZGV4IFBhc3NlZCBieSByZWZlcmVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KSB7XG4gICAgdmFyIGkgPSBFTlRJVElFUy5sZW5ndGg7XG4gICAgdmFyIF9yZXN1bHRzID0gW107XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICB2YXIgZSA9IEVOVElUSUVTW2ldO1xuICAgICAgICB2YXIgYWxwaGEgPSBlWzBdO1xuICAgICAgICB2YXIgY2hhcnMgPSBlWzFdO1xuICAgICAgICB2YXIgY2hyID0gY2hhcnNbMF07XG4gICAgICAgIHZhciBhZGRDaGFyID0gKGNociA8IDMyIHx8IGNociA+IDEyNikgfHwgY2hyID09PSA2MiB8fCBjaHIgPT09IDYwIHx8IGNociA9PT0gMzggfHwgY2hyID09PSAzNCB8fCBjaHIgPT09IDM5O1xuICAgICAgICB2YXIgY2hhckluZm87XG4gICAgICAgIGlmIChhZGRDaGFyKSB7XG4gICAgICAgICAgICBjaGFySW5mbyA9IGNoYXJJbmRleFtjaHJdID0gY2hhckluZGV4W2Nocl0gfHwge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJzWzFdKSB7XG4gICAgICAgICAgICB2YXIgY2hyMiA9IGNoYXJzWzFdO1xuICAgICAgICAgICAgYWxwaGFJbmRleFthbHBoYV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocikgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChhZGRDaGFyICYmIChjaGFySW5mb1tjaHIyXSA9IGFscGhhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbHBoYUluZGV4W2FscGhhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKTtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goYWRkQ2hhciAmJiAoY2hhckluZm9bJyddID0gYWxwaGEpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIdG1sNUVudGl0aWVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html5-entities.js\n");
 
/***/ }),
 
/***/ "./node_modules/html-entities/lib/xml-entities.js":
/*!********************************************************!*\
  !*** ./node_modules/html-entities/lib/xml-entities.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("var ALPHA_INDEX = {\n    '&lt': '<',\n    '&gt': '>',\n    '&quot': '\"',\n    '&apos': '\\'',\n    '&amp': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&apos;': '\\'',\n    '&amp;': '&'\n};\n\nvar CHAR_INDEX = {\n    60: 'lt',\n    62: 'gt',\n    34: 'quot',\n    39: 'apos',\n    38: 'amp'\n};\n\nvar CHAR_S_INDEX = {\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    '\\'': '&apos;',\n    '&': '&amp;'\n};\n\n/**\n * @constructor\n */\nfunction XmlEntities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    return str.replace(/<|>|\"|'|&/g, function(s) {\n        return CHAR_S_INDEX[s];\n    });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encode = function(str) {\n    return new XmlEntities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.decode = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {\n        if (s.charAt(1) === '#') {\n            var code = s.charAt(2).toLowerCase() === 'x' ?\n                parseInt(s.substr(3), 16) :\n                parseInt(s.substr(2));\n\n            if (isNaN(code) || code < -32768 || code > 65535) {\n                return '';\n            }\n            return String.fromCharCode(code);\n        }\n        return ALPHA_INDEX[s] || s;\n    });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.decode = function(str) {\n    return new XmlEntities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonUTF = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLength = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLength) {\n        var c = str.charCodeAt(i);\n        var alpha = CHAR_INDEX[c];\n        if (alpha) {\n            result += \"&\" + alpha + \";\";\n            i++;\n            continue;\n        }\n        if (c < 32 || c > 126) {\n            result += '&#' + c + ';';\n        } else {\n            result += str.charAt(i);\n        }\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonUTF = function(str) {\n    return new XmlEntities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonASCII = function(str) {\n    if (!str || !str.length) {\n        return '';\n    }\n    var strLenght = str.length;\n    var result = '';\n    var i = 0;\n    while (i < strLenght) {\n        var c = str.charCodeAt(i);\n        if (c <= 255) {\n            result += str[i++];\n            continue;\n        }\n        result += '&#' + c + ';';\n        i++;\n    }\n    return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonASCII = function(str) {\n    return new XmlEntities().encodeNonASCII(str);\n };\n\nmodule.exports = XmlEntities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIveG1sLWVudGl0aWVzLmpzPzUwMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7QUFDVCxXQUFXO0FBQ1gsV0FBVztBQUNYLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL3htbC1lbnRpdGllcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBBTFBIQV9JTkRFWCA9IHtcbiAgICAnJmx0JzogJzwnLFxuICAgICcmZ3QnOiAnPicsXG4gICAgJyZxdW90JzogJ1wiJyxcbiAgICAnJmFwb3MnOiAnXFwnJyxcbiAgICAnJmFtcCc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJmFwb3M7JzogJ1xcJycsXG4gICAgJyZhbXA7JzogJyYnXG59O1xuXG52YXIgQ0hBUl9JTkRFWCA9IHtcbiAgICA2MDogJ2x0JyxcbiAgICA2MjogJ2d0JyxcbiAgICAzNDogJ3F1b3QnLFxuICAgIDM5OiAnYXBvcycsXG4gICAgMzg6ICdhbXAnXG59O1xuXG52YXIgQ0hBUl9TX0lOREVYID0ge1xuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgICdcXCcnOiAnJmFwb3M7JyxcbiAgICAnJic6ICcmYW1wOydcbn07XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFhtbEVudGl0aWVzKCkge31cblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5YbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLzx8PnxcInwnfCYvZywgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gQ0hBUl9TX0lOREVYW3NdO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG4gWG1sRW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBYbWxFbnRpdGllcygpLmVuY29kZShzdHIpO1xuIH07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuWG1sRW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIz9bMC05YS16QS1aXSs7Py9nLCBmdW5jdGlvbihzKSB7XG4gICAgICAgIGlmIChzLmNoYXJBdCgxKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB2YXIgY29kZSA9IHMuY2hhckF0KDIpLnRvTG93ZXJDYXNlKCkgPT09ICd4JyA/XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMyksIDE2KSA6XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMikpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29kZSkgfHwgY29kZSA8IC0zMjc2OCB8fCBjb2RlID4gNjU1MzUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQUxQSEFfSU5ERVhbc10gfHwgcztcbiAgICB9KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIFhtbEVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgWG1sRW50aXRpZXMoKS5kZWNvZGUoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblhtbEVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGVOb25VVEYgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGFscGhhID0gQ0hBUl9JTkRFWFtjXTtcbiAgICAgICAgaWYgKGFscGhhKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI2KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyYjJyArIGMgKyAnOyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBYbWxFbnRpdGllcy5lbmNvZGVOb25VVEYgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gfTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5YbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5naHQgPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5naHQpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPD0gMjU1KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyW2krK107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gJyYjJyArIGMgKyAnOyc7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIFhtbEVudGl0aWVzLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBYbWxFbnRpdGllcygpLmVuY29kZU5vbkFTQ0lJKHN0cik7XG4gfTtcblxubW9kdWxlLmV4cG9ydHMgPSBYbWxFbnRpdGllcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/xml-entities.js\n");
 
/***/ }),
 
/***/ "./node_modules/loglevel/lib/loglevel.js":
/*!***********************************************!*\
  !*** ./node_modules/loglevel/lib/loglevel.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n    \"use strict\";\n    if (true) {\n        !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    } else {}\n}(this, function () {\n    \"use strict\";\n\n    // Slightly dubious tricks to cut down minimized file size\n    var noop = function() {};\n    var undefinedType = \"undefined\";\n    var isIE = (typeof window !== undefinedType) && (\n        /Trident\\/|MSIE /.test(window.navigator.userAgent)\n    );\n\n    var logMethods = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n    ];\n\n    // Cross-browser bind equivalent that works at least back to IE6\n    function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n            return method.bind(obj);\n        } else {\n            try {\n                return Function.prototype.bind.call(method, obj);\n            } catch (e) {\n                // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n                return function() {\n                    return Function.prototype.apply.apply(method, [obj, arguments]);\n                };\n            }\n        }\n    }\n\n    // Trace() doesn't print the message in IE, so for that case we need to wrap it\n    function traceForIE() {\n        if (console.log) {\n            if (console.log.apply) {\n                console.log.apply(console, arguments);\n            } else {\n                // In old IE, native console methods themselves don't have apply().\n                Function.prototype.apply.apply(console.log, [console, arguments]);\n            }\n        }\n        if (console.trace) console.trace();\n    }\n\n    // Build the best logging method possible for this env\n    // Wherever possible we want to bind, not wrap, to preserve stack traces\n    function realMethod(methodName) {\n        if (methodName === 'debug') {\n            methodName = 'log';\n        }\n\n        if (typeof console === undefinedType) {\n            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (methodName === 'trace' && isIE) {\n            return traceForIE;\n        } else if (console[methodName] !== undefined) {\n            return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n            return bindMethod(console, 'log');\n        } else {\n            return noop;\n        }\n    }\n\n    // These private functions always need `this` to be set properly\n\n    function replaceLoggingMethods(level, loggerName) {\n        /*jshint validthis:true */\n        for (var i = 0; i < logMethods.length; i++) {\n            var methodName = logMethods[i];\n            this[methodName] = (i < level) ?\n                noop :\n                this.methodFactory(methodName, level, loggerName);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n    }\n\n    // In old IE versions, the console isn't present until you first open it.\n    // We build realMethod() replacements here that regenerate logging methods\n    function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n        return function () {\n            if (typeof console !== undefinedType) {\n                replaceLoggingMethods.call(this, level, loggerName);\n                this[methodName].apply(this, arguments);\n            }\n        };\n    }\n\n    // By default, we use closely bound real methods wherever possible, and\n    // otherwise we wait for a console to appear, and then try again.\n    function defaultMethodFactory(methodName, level, loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) ||\n               enableLoggingWhenConsoleArrives.apply(this, arguments);\n    }\n\n    function Logger(name, defaultLevel, factory) {\n      var self = this;\n      var currentLevel;\n      var storageKey = \"loglevel\";\n      if (name) {\n        storageKey += \":\" + name;\n      }\n\n      function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n          if (typeof window === undefinedType) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage[storageKey] = levelName;\n              return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n      }\n\n      function getPersistedLevel() {\n          var storedLevel;\n\n          if (typeof window === undefinedType) return;\n\n          try {\n              storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n              try {\n                  var cookie = window.document.cookie;\n                  var location = cookie.indexOf(\n                      encodeURIComponent(storageKey) + \"=\");\n                  if (location !== -1) {\n                      storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n                  }\n              } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n              storedLevel = undefined;\n          }\n\n          return storedLevel;\n      }\n\n      /*\n       *\n       * Public logger API - see https://github.com/pimterry/loglevel for details\n       *\n       */\n\n      self.name = name;\n\n      self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n          \"ERROR\": 4, \"SILENT\": 5};\n\n      self.methodFactory = factory || defaultMethodFactory;\n\n      self.getLevel = function () {\n          return currentLevel;\n      };\n\n      self.setLevel = function (level, persist) {\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n              level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n              currentLevel = level;\n              if (persist !== false) {  // defaults to true\n                  persistLevelIfPossible(level);\n              }\n              replaceLoggingMethods.call(self, level, name);\n              if (typeof console === undefinedType && level < self.levels.SILENT) {\n                  return \"No console available for logging\";\n              }\n          } else {\n              throw \"log.setLevel() called with invalid level: \" + level;\n          }\n      };\n\n      self.setDefaultLevel = function (level) {\n          if (!getPersistedLevel()) {\n              self.setLevel(level, false);\n          }\n      };\n\n      self.enableAll = function(persist) {\n          self.setLevel(self.levels.TRACE, persist);\n      };\n\n      self.disableAll = function(persist) {\n          self.setLevel(self.levels.SILENT, persist);\n      };\n\n      // Initialize with the right level\n      var initialLevel = getPersistedLevel();\n      if (initialLevel == null) {\n          initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n      }\n      self.setLevel(initialLevel, false);\n    }\n\n    /*\n     *\n     * Top-level API\n     *\n     */\n\n    var defaultLogger = new Logger();\n\n    var _loggersByName = {};\n    defaultLogger.getLogger = function getLogger(name) {\n        if (typeof name !== \"string\" || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(\n            name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n        }\n        return logger;\n    };\n\n    // Grab the current global log variable in case of overwrite\n    var _log = (typeof window !== undefinedType) ? window.log : undefined;\n    defaultLogger.noConflict = function() {\n        if (typeof window !== undefinedType &&\n               window.log === defaultLogger) {\n            window.log = _log;\n        }\n\n        return defaultLogger;\n    };\n\n    defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n    };\n\n    return defaultLogger;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzPzVjN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBMEM7QUFDbEQsUUFBUSxvQ0FBTyxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0dBQUM7QUFDMUIsS0FBSyxNQUFNLEVBSU47QUFDTCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekIsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckUsV0FBVztBQUNYOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiogbG9nbGV2ZWwgLSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWxcbipcbiogQ29weXJpZ2h0IChjKSAyMDEzIFRpbSBQZXJyeVxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4qL1xuKGZ1bmN0aW9uIChyb290LCBkZWZpbml0aW9uKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LmxvZyA9IGRlZmluaXRpb24oKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIC8vIFNsaWdodGx5IGR1YmlvdXMgdHJpY2tzIHRvIGN1dCBkb3duIG1pbmltaXplZCBmaWxlIHNpemVcbiAgICB2YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307XG4gICAgdmFyIHVuZGVmaW5lZFR5cGUgPSBcInVuZGVmaW5lZFwiO1xuICAgIHZhciBpc0lFID0gKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUpICYmIChcbiAgICAgICAgL1RyaWRlbnRcXC98TVNJRSAvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKTtcblxuICAgIHZhciBsb2dNZXRob2RzID0gW1xuICAgICAgICBcInRyYWNlXCIsXG4gICAgICAgIFwiZGVidWdcIixcbiAgICAgICAgXCJpbmZvXCIsXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICBcImVycm9yXCJcbiAgICBdO1xuXG4gICAgLy8gQ3Jvc3MtYnJvd3NlciBiaW5kIGVxdWl2YWxlbnQgdGhhdCB3b3JrcyBhdCBsZWFzdCBiYWNrIHRvIElFNlxuICAgIGZ1bmN0aW9uIGJpbmRNZXRob2Qob2JqLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciBtZXRob2QgPSBvYmpbbWV0aG9kTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmJpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QuYmluZChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChtZXRob2QsIG9iaik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWlzc2luZyBiaW5kIHNoaW0gb3IgSUU4ICsgTW9kZXJuaXpyLCBmYWxsYmFjayB0byB3cmFwcGluZ1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShtZXRob2QsIFtvYmosIGFyZ3VtZW50c10pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFjZSgpIGRvZXNuJ3QgcHJpbnQgdGhlIG1lc3NhZ2UgaW4gSUUsIHNvIGZvciB0aGF0IGNhc2Ugd2UgbmVlZCB0byB3cmFwIGl0XG4gICAgZnVuY3Rpb24gdHJhY2VGb3JJRSgpIHtcbiAgICAgICAgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgICAgICBpZiAoY29uc29sZS5sb2cuYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBvbGQgSUUsIG5hdGl2ZSBjb25zb2xlIG1ldGhvZHMgdGhlbXNlbHZlcyBkb24ndCBoYXZlIGFwcGx5KCkuXG4gICAgICAgICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KGNvbnNvbGUubG9nLCBbY29uc29sZSwgYXJndW1lbnRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnNvbGUudHJhY2UpIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmVzdCBsb2dnaW5nIG1ldGhvZCBwb3NzaWJsZSBmb3IgdGhpcyBlbnZcbiAgICAvLyBXaGVyZXZlciBwb3NzaWJsZSB3ZSB3YW50IHRvIGJpbmQsIG5vdCB3cmFwLCB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZXNcbiAgICBmdW5jdGlvbiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdkZWJ1ZycpIHtcbiAgICAgICAgICAgIG1ldGhvZE5hbWUgPSAnbG9nJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBtZXRob2QgcG9zc2libGUsIGZvciBub3cgLSBmaXhlZCBsYXRlciBieSBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3RyYWNlJyAmJiBpc0lFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VGb3JJRTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW21ldGhvZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbGUubG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsICdsb2cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgcHJpdmF0ZSBmdW5jdGlvbnMgYWx3YXlzIG5lZWQgYHRoaXNgIHRvIGJlIHNldCBwcm9wZXJseVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsLCBsb2dnZXJOYW1lKSB7XG4gICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBsb2dNZXRob2RzW2ldO1xuICAgICAgICAgICAgdGhpc1ttZXRob2ROYW1lXSA9IChpIDwgbGV2ZWwpID9cbiAgICAgICAgICAgICAgICBub29wIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmaW5lIGxvZy5sb2cgYXMgYW4gYWxpYXMgZm9yIGxvZy5kZWJ1Z1xuICAgICAgICB0aGlzLmxvZyA9IHRoaXMuZGVidWc7XG4gICAgfVxuXG4gICAgLy8gSW4gb2xkIElFIHZlcnNpb25zLCB0aGUgY29uc29sZSBpc24ndCBwcmVzZW50IHVudGlsIHlvdSBmaXJzdCBvcGVuIGl0LlxuICAgIC8vIFdlIGJ1aWxkIHJlYWxNZXRob2QoKSByZXBsYWNlbWVudHMgaGVyZSB0aGF0IHJlZ2VuZXJhdGUgbG9nZ2luZyBtZXRob2RzXG4gICAgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lLCBsZXZlbCwgbG9nZ2VyTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwodGhpcywgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB3ZSB1c2UgY2xvc2VseSBib3VuZCByZWFsIG1ldGhvZHMgd2hlcmV2ZXIgcG9zc2libGUsIGFuZFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3YWl0IGZvciBhIGNvbnNvbGUgdG8gYXBwZWFyLCBhbmQgdGhlbiB0cnkgYWdhaW4uXG4gICAgZnVuY3Rpb24gZGVmYXVsdE1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpIHtcbiAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgICAgcmV0dXJuIHJlYWxNZXRob2QobWV0aG9kTmFtZSkgfHxcbiAgICAgICAgICAgICAgIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2dnZXIobmFtZSwgZGVmYXVsdExldmVsLCBmYWN0b3J5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgY3VycmVudExldmVsO1xuICAgICAgdmFyIHN0b3JhZ2VLZXkgPSBcImxvZ2xldmVsXCI7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBzdG9yYWdlS2V5ICs9IFwiOlwiICsgbmFtZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGVyc2lzdExldmVsSWZQb3NzaWJsZShsZXZlbE51bSkge1xuICAgICAgICAgIHZhciBsZXZlbE5hbWUgPSAobG9nTWV0aG9kc1tsZXZlbE51bV0gfHwgJ3NpbGVudCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gbGV2ZWxOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gVXNlIHNlc3Npb24gY29va2llIGFzIGZhbGxiYWNrXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9XCIgKyBsZXZlbE5hbWUgKyBcIjtcIjtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldFBlcnNpc3RlZExldmVsKCkge1xuICAgICAgICAgIHZhciBzdG9yZWRMZXZlbDtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWRUeXBlKSByZXR1cm47XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV07XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llcyBpZiBsb2NhbCBzdG9yYWdlIGdpdmVzIHVzIG5vdGhpbmdcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY29va2llID0gd2luZG93LmRvY3VtZW50LmNvb2tpZTtcbiAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNvb2tpZS5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlS2V5KSArIFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9eKFteO10rKS8uZXhlYyhjb29raWUuc2xpY2UobG9jYXRpb24pKVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHRoZSBzdG9yZWQgbGV2ZWwgaXMgbm90IHZhbGlkLCB0cmVhdCBpdCBhcyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG4gICAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN0b3JlZExldmVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdG9yZWRMZXZlbDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqXG4gICAgICAgKiBQdWJsaWMgbG9nZ2VyIEFQSSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWwgZm9yIGRldGFpbHNcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgc2VsZi5uYW1lID0gbmFtZTtcblxuICAgICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXG4gICAgICAgICAgXCJFUlJPUlwiOiA0LCBcIlNJTEVOVFwiOiA1fTtcblxuICAgICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZmFjdG9yeSB8fCBkZWZhdWx0TWV0aG9kRmFjdG9yeTtcblxuICAgICAgc2VsZi5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudExldmVsO1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCwgcGVyc2lzdCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIgJiYgc2VsZi5sZXZlbHNbbGV2ZWwudG9VcHBlckNhc2UoKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiICYmIGxldmVsID49IDAgJiYgbGV2ZWwgPD0gc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGxldmVsO1xuICAgICAgICAgICAgICBpZiAocGVyc2lzdCAhPT0gZmFsc2UpIHsgIC8vIGRlZmF1bHRzIHRvIHRydWVcbiAgICAgICAgICAgICAgICAgIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYsIGxldmVsLCBuYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlICYmIGxldmVsIDwgc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJObyBjb25zb2xlIGF2YWlsYWJsZSBmb3IgbG9nZ2luZ1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgXCJsb2cuc2V0TGV2ZWwoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIGxldmVsOiBcIiArIGxldmVsO1xuICAgICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNlbGYuc2V0RGVmYXVsdExldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7XG4gICAgICAgICAgaWYgKCFnZXRQZXJzaXN0ZWRMZXZlbCgpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlRSQUNFLCBwZXJzaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYuZGlzYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlNJTEVOVCwgcGVyc2lzdCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBJbml0aWFsaXplIHdpdGggdGhlIHJpZ2h0IGxldmVsXG4gICAgICB2YXIgaW5pdGlhbExldmVsID0gZ2V0UGVyc2lzdGVkTGV2ZWwoKTtcbiAgICAgIGlmIChpbml0aWFsTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgICAgIGluaXRpYWxMZXZlbCA9IGRlZmF1bHRMZXZlbCA9PSBudWxsID8gXCJXQVJOXCIgOiBkZWZhdWx0TGV2ZWw7XG4gICAgICB9XG4gICAgICBzZWxmLnNldExldmVsKGluaXRpYWxMZXZlbCwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICpcbiAgICAgKiBUb3AtbGV2ZWwgQVBJXG4gICAgICpcbiAgICAgKi9cblxuICAgIHZhciBkZWZhdWx0TG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4gICAgdmFyIF9sb2dnZXJzQnlOYW1lID0ge307XG4gICAgZGVmYXVsdExvZ2dlci5nZXRMb2dnZXIgPSBmdW5jdGlvbiBnZXRMb2dnZXIobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgfHwgbmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBzdXBwbHkgYSBuYW1lIHdoZW4gY3JlYXRpbmcgYSBsb2dnZXIuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdO1xuICAgICAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICAgIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdID0gbmV3IExvZ2dlcihcbiAgICAgICAgICAgIG5hbWUsIGRlZmF1bHRMb2dnZXIuZ2V0TGV2ZWwoKSwgZGVmYXVsdExvZ2dlci5tZXRob2RGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH07XG5cbiAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGdsb2JhbCBsb2cgdmFyaWFibGUgaW4gY2FzZSBvZiBvdmVyd3JpdGVcbiAgICB2YXIgX2xvZyA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSA/IHdpbmRvdy5sb2cgOiB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdExvZ2dlci5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlICYmXG4gICAgICAgICAgICAgICB3aW5kb3cubG9nID09PSBkZWZhdWx0TG9nZ2VyKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9nID0gX2xvZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xuICAgIH07XG5cbiAgICBkZWZhdWx0TG9nZ2VyLmdldExvZ2dlcnMgPSBmdW5jdGlvbiBnZXRMb2dnZXJzKCkge1xuICAgICAgICByZXR1cm4gX2xvZ2dlcnNCeU5hbWU7XG4gICAgfTtcblxuICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/loglevel/lib/loglevel.js\n");
 
/***/ }),
 
/***/ "./node_modules/node-libs-browser/node_modules/punycode/punycode.js":
/*!**************************************************************************!*\
  !*** ./node_modules/node-libs-browser/node_modules/punycode/punycode.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports =  true && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule =  true && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttrue\n\t) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n\n}(this));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzPzE5ODUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxDQUFDOztBQUVEO0FBQ0EsbUJBQW1CLEtBQTBCO0FBQzdDO0FBQ0Esa0JBQWtCLEtBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLFNBQVM7QUFDckI7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVksU0FBUztBQUNyQjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSxLQUFLO0FBQ0wsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixtQ0FBbUM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLFdBQVc7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCOztBQUV4Qix5Q0FBeUMscUJBQXFCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLG9CQUFvQjs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQixpQkFBaUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLGlCQUFpQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFFVTtBQUNaO0FBQ0EsRUFBRSxtQ0FBbUI7QUFDckI7QUFDQSxHQUFHO0FBQUEsb0dBQUM7QUFDSixFQUFFLE1BQU0sRUFhTjs7QUFFRixDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuNC4xJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/Camera.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/Camera.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Matrix4 = __webpack_require__(/*! ../../../src/math/Matrix4 */ \"./node_modules/phaser/src/math/Matrix4.js\");\r\nvar RandomXYZ = __webpack_require__(/*! ../../../src/math/RandomXYZ */ \"./node_modules/phaser/src/math/RandomXYZ.js\");\r\nvar RandomXYZW = __webpack_require__(/*! ../../../src/math/RandomXYZW */ \"./node_modules/phaser/src/math/RandomXYZW.js\");\r\nvar RotateVec3 = __webpack_require__(/*! ../../../src/math/RotateVec3 */ \"./node_modules/phaser/src/math/RotateVec3.js\");\r\nvar Set = __webpack_require__(/*! ../../../src/structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar Sprite3D = __webpack_require__(/*! ./sprite3d/Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../src/math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../../src/math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n//  Local cache vars\r\nvar tmpVec3 = new Vector3();\r\nvar tmpVec4 = new Vector4();\r\nvar dirvec = new Vector3();\r\nvar rightvec = new Vector3();\r\nvar billboardMatrix = new Matrix4();\r\n\r\n//  @author attribute https://github.com/mattdesl/cam3d/wiki\r\n\r\n/**\r\n * @typedef {object} RayDef\r\n *\r\n * @property {Phaser.Math.Vector3} origin - [description]\r\n * @property {Phaser.Math.Vector3} direction - [description]\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar Camera = new Class({\r\n\r\n    initialize:\r\n\r\n    function Camera (scene)\r\n    {\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @since 3.0.0\r\n         */\r\n        this.displayList = scene.sys.displayList;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#updateList\r\n         * @type {Phaser.GameObjects.UpdateList}\r\n         * @since 3.0.0\r\n         */\r\n        this.updateList = scene.sys.updateList;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#direction\r\n         * @type {Phaser.Math.Vector3}\r\n         * @since 3.0.0\r\n         */\r\n        this.direction = new Vector3(0, 0, -1);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#up\r\n         * @type {Phaser.Math.Vector3}\r\n         * @since 3.0.0\r\n         */\r\n        this.up = new Vector3(0, 1, 0);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#position\r\n         * @type {Phaser.Math.Vector3}\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector3();\r\n\r\n\r\n        /**\r\n         *  The mapping from 3D size units to pixels.\r\n         *  In the default case 1 3D unit = 128 pixels. So a sprite that is\r\n         *  256 x 128 px in size will be 2 x 1 units.\r\n         *  Change to whatever best fits your game assets.\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#pixelScale\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.pixelScale = 128;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#projection\r\n         * @type {Phaser.Math.Matrix4}\r\n         * @since 3.0.0\r\n         */\r\n        this.projection = new Matrix4();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#view\r\n         * @type {Phaser.Math.Matrix4}\r\n         * @since 3.0.0\r\n         */\r\n        this.view = new Matrix4();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#combined\r\n         * @type {Phaser.Math.Matrix4}\r\n         * @since 3.0.0\r\n         */\r\n        this.combined = new Matrix4();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#invProjectionView\r\n         * @type {Phaser.Math.Matrix4}\r\n         * @since 3.0.0\r\n         */\r\n        this.invProjectionView = new Matrix4();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#near\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.near = 1;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#far\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.far = 100;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#ray\r\n         * @type {RayDef}\r\n         * @since 3.0.0\r\n         */\r\n        this.ray = {\r\n            origin: new Vector3(),\r\n            direction: new Vector3()\r\n        };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#viewportWidth\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportWidth = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#viewportHeight\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportHeight = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#billboardMatrixDirty\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.billboardMatrixDirty = true;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D#children\r\n         * @type {Phaser.Structs.Set.<Phaser.GameObjects.GameObject>}\r\n         * @since 3.0.0\r\n         */\r\n        this.children = new Set();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} z - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setPosition: function (x, y, z)\r\n    {\r\n        this.position.set(x, y, z);\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setScene\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setScene: function (scene)\r\n    {\r\n        this.scene = scene;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setPixelScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setPixelScale: function (value)\r\n    {\r\n        this.pixelScale = value;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Sprite3D} sprite3D - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite3D} [description]\r\n     */\r\n    add: function (sprite3D)\r\n    {\r\n        this.children.set(sprite3D);\r\n\r\n        this.displayList.add(sprite3D.gameObject);\r\n        this.updateList.add(sprite3D.gameObject);\r\n\r\n        this.updateChildren();\r\n\r\n        return sprite3D;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    remove: function (child)\r\n    {\r\n        this.displayList.remove(child.gameObject);\r\n        this.updateList.remove(child.gameObject);\r\n\r\n        this.children.delete(child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    clear: function ()\r\n    {\r\n        var children = this.getChildren();\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            this.remove(children[i]);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#getChildren\r\n     * @since 3.0.0\r\n     *\r\n     * @return {array} [description]\r\n     */\r\n    getChildren: function ()\r\n    {\r\n        return this.children.entries;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} z - [description]\r\n     * @param {string} key - [description]\r\n     * @param {(string|number)} frame - [description]\r\n     * @param {boolean} [visible=true] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite3D} [description]\r\n     */\r\n    create: function (x, y, z, key, frame, visible)\r\n    {\r\n        if (visible === undefined) { visible = true; }\r\n\r\n        var child = new Sprite3D(this.scene, x, y, z, key, frame);\r\n\r\n        this.displayList.add(child.gameObject);\r\n        this.updateList.add(child.gameObject);\r\n\r\n        child.visible = visible;\r\n\r\n        this.children.set(child);\r\n\r\n        this.updateChildren();\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#createMultiple\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} quantity - [description]\r\n     * @param {string} key - [description]\r\n     * @param {(string|number)} frame - [description]\r\n     * @param {boolean} [visible=true] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite3D[]} [description]\r\n     */\r\n    createMultiple: function (quantity, key, frame, visible)\r\n    {\r\n        if (visible === undefined) { visible = true; }\r\n\r\n        var output = [];\r\n\r\n        for (var i = 0; i < quantity; i++)\r\n        {\r\n            var child = new Sprite3D(this.scene, 0, 0, 0, key, frame);\r\n\r\n            this.displayList.add(child.gameObject);\r\n            this.updateList.add(child.gameObject);\r\n\r\n            child.visible = visible;\r\n\r\n            this.children.set(child);\r\n\r\n            output.push(child);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    //  Create a bunch of Sprite3D objects in a rectangle\r\n    //  size and spacing are Vec3s (or if integers are converted to vec3s)\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#createRect\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|{x:number,y:number})} size - [description]\r\n     * @param {(number|{x:number,y:number,z:number})} spacing - [description]\r\n     * @param {string} key - [description]\r\n     * @param {(string|number)} [frame] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite3D[]} [description]\r\n     */\r\n    createRect: function (size, spacing, key, frame)\r\n    {\r\n        if (typeof size === 'number') { size = { x: size, y: size, z: size }; }\r\n        if (typeof spacing === 'number') { spacing = { x: spacing, y: spacing, z: spacing }; }\r\n\r\n        var quantity = size.x * size.y * size.z;\r\n\r\n        var sprites = this.createMultiple(quantity, key, frame);\r\n\r\n        var i = 0;\r\n\r\n        for (var z = 0.5 - (size.z / 2); z < (size.z / 2); z++)\r\n        {\r\n            for (var y = 0.5 - (size.y / 2); y < (size.y / 2); y++)\r\n            {\r\n                for (var x = 0.5 - (size.x / 2); x < (size.x / 2); x++)\r\n                {\r\n                    var bx = (x * spacing.x);\r\n                    var by = (y * spacing.y);\r\n                    var bz = (z * spacing.z);\r\n\r\n                    sprites[i].position.set(bx, by, bz);\r\n\r\n                    i++;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.update();\r\n\r\n        return sprites;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#randomSphere\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [radius=1] - [description]\r\n     * @param {Phaser.GameObjects.Sprite3D[]} [sprites] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    randomSphere: function (radius, sprites)\r\n    {\r\n        if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n        for (var i = 0; i < sprites.length; i++)\r\n        {\r\n            RandomXYZ(sprites[i].position, radius);\r\n        }\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#randomCube\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [scale=1] - [description]\r\n     * @param {Phaser.GameObjects.Sprite3D[]} [sprites] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    randomCube: function (scale, sprites)\r\n    {\r\n        if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n        for (var i = 0; i < sprites.length; i++)\r\n        {\r\n            RandomXYZW(sprites[i].position, scale);\r\n        }\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#translateChildren\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} vec3 - [description]\r\n     * @param {Phaser.GameObjects.Sprite3D[]} sprites - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    translateChildren: function (vec3, sprites)\r\n    {\r\n        if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n        for (var i = 0; i < sprites.length; i++)\r\n        {\r\n            sprites[i].position.add(vec3);\r\n        }\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#transformChildren\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat4 - [description]\r\n     * @param {Phaser.GameObjects.Sprite3D[]} sprites - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    transformChildren: function (mat4, sprites)\r\n    {\r\n        if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n        for (var i = 0; i < sprites.length; i++)\r\n        {\r\n            sprites[i].position.transformMat4(mat4);\r\n        }\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * Sets the width and height of the viewport. Does not update any matrices.\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setViewport\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setViewport: function (width, height)\r\n    {\r\n        this.viewportWidth = width;\r\n        this.viewportHeight = height;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * Translates this camera by a specified Vector3 object\r\n     * or x, y, z parameters. Any undefined x y z values will\r\n     * default to zero, leaving that component unaffected.\r\n     * If you wish to set the camera position directly call setPosition instead.\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#translate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|object)} x - [description]\r\n     * @param {number} [y] - [description]\r\n     * @param {number} [z] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    translate: function (x, y, z)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            this.position.x += x.x || 0;\r\n            this.position.y += x.y || 0;\r\n            this.position.z += x.z || 0;\r\n        }\r\n        else\r\n        {\r\n            this.position.x += x || 0;\r\n            this.position.y += y || 0;\r\n            this.position.z += z || 0;\r\n        }\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#lookAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|object)} x - [description]\r\n     * @param {number} [y] - [description]\r\n     * @param {number} [z] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    lookAt: function (x, y, z)\r\n    {\r\n        var dir = this.direction;\r\n        var up = this.up;\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            dir.copy(x);\r\n        }\r\n        else\r\n        {\r\n            dir.set(x, y, z);\r\n        }\r\n\r\n        dir.subtract(this.position).normalize();\r\n\r\n        //  Calculate right vector\r\n        tmpVec3.copy(dir).cross(up).normalize();\r\n\r\n        //  Calculate up vector\r\n        up.copy(tmpVec3).cross(dir).normalize();\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#rotate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - [description]\r\n     * @param {Phaser.Math.Vector3} axis - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    rotate: function (radians, axis)\r\n    {\r\n        RotateVec3(this.direction, axis, radians);\r\n        RotateVec3(this.up, axis, radians);\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#rotateAround\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} point - [description]\r\n     * @param {number} radians - [description]\r\n     * @param {Phaser.Math.Vector3} axis - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    rotateAround: function (point, radians, axis)\r\n    {\r\n        tmpVec3.copy(point).subtract(this.position);\r\n\r\n        this.translate(tmpVec3);\r\n        this.rotate(radians, axis);\r\n        this.translate(tmpVec3.negate());\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#project\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} vec - [description]\r\n     * @param {Phaser.Math.Vector4} out - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector4} [description]\r\n     */\r\n    project: function (vec, out)\r\n    {\r\n        if (out === undefined) { out = new Vector4(); }\r\n\r\n        //  TODO: support viewport XY\r\n        var viewportWidth = this.viewportWidth;\r\n        var viewportHeight = this.viewportHeight;\r\n        var n = Camera.NEAR_RANGE;\r\n        var f = Camera.FAR_RANGE;\r\n\r\n        //  For useful Z and W values we should do the usual steps: clip space -> NDC -> window coords\r\n\r\n        //  Implicit 1.0 for w component\r\n        tmpVec4.set(vec.x, vec.y, vec.z, 1.0);\r\n\r\n        //  Transform into clip space\r\n        tmpVec4.transformMat4(this.combined);\r\n\r\n        //  Avoid divide by zero when 0x0x0 camera projects to a 0x0x0 vec3\r\n        if (tmpVec4.w === 0)\r\n        {\r\n            tmpVec4.w = 1;\r\n        }\r\n\r\n        //  Now into NDC\r\n        tmpVec4.x = tmpVec4.x / tmpVec4.w;\r\n        tmpVec4.y = tmpVec4.y / tmpVec4.w;\r\n        tmpVec4.z = tmpVec4.z / tmpVec4.w;\r\n\r\n        //  And finally into window coordinates\r\n        out.x = viewportWidth / 2 * tmpVec4.x + (0 + viewportWidth / 2);\r\n        out.y = viewportHeight / 2 * tmpVec4.y + (0 + viewportHeight / 2);\r\n        out.z = (f - n) / 2 * tmpVec4.z + (f + n) / 2;\r\n\r\n        //  If the out vector has a fourth component, we also store (1/clip.w), same idea as gl_FragCoord.w\r\n        if (out.w === 0 || out.w)\r\n        {\r\n            out.w = 1 / tmpVec4.w;\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#unproject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} vec - [description]\r\n     * @param {Phaser.Math.Vector3} out - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector3} [description]\r\n     */\r\n    unproject: function (vec, out)\r\n    {\r\n        if (out === undefined) { out = new Vector3(); }\r\n\r\n        var viewport = tmpVec4.set(0, 0, this.viewportWidth, this.viewportHeight);\r\n\r\n        return out.copy(vec).unproject(viewport, this.invProjectionView);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#getPickRay\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} [y] - [description]\r\n     *\r\n     * @return {RayDef} [description]\r\n     */\r\n    getPickRay: function (x, y)\r\n    {\r\n        var origin = this.ray.origin.set(x, y, 0);\r\n        var direction = this.ray.direction.set(x, y, 1);\r\n        var viewport = tmpVec4.set(0, 0, this.viewportWidth, this.viewportHeight);\r\n        var mtx = this.invProjectionView;\r\n\r\n        origin.unproject(viewport, mtx);\r\n\r\n        direction.unproject(viewport, mtx);\r\n\r\n        direction.subtract(origin).normalize();\r\n\r\n        return this.ray;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#updateChildren\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    updateChildren: function ()\r\n    {\r\n        var children = this.children.entries;\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            children[i].project(this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    //  Overridden by subclasses\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#update\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    update: function ()\r\n    {\r\n        return this.updateChildren();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#updateBillboardMatrix\r\n     * @since 3.0.0\r\n     */\r\n    updateBillboardMatrix: function ()\r\n    {\r\n        var dir = dirvec.set(this.direction).negate();\r\n\r\n        // Better view-aligned billboards might use this:\r\n        // var dir = tmp.set(camera.position).subtract(p).normalize();\r\n\r\n        var right = rightvec.set(this.up).cross(dir).normalize();\r\n        var up = tmpVec3.set(dir).cross(right).normalize();\r\n\r\n        var out = billboardMatrix.val;\r\n\r\n        out[0] = right.x;\r\n        out[1] = right.y;\r\n        out[2] = right.z;\r\n        out[3] = 0;\r\n\r\n        out[4] = up.x;\r\n        out[5] = up.y;\r\n        out[6] = up.z;\r\n        out[7] = 0;\r\n\r\n        out[8] = dir.x;\r\n        out[9] = dir.y;\r\n        out[10] = dir.z;\r\n        out[11] = 0;\r\n\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = 0;\r\n        out[15] = 1;\r\n\r\n        this.billboardMatrixDirty = false;\r\n    },\r\n\r\n    /**\r\n     * This is a utility function for canvas 3D rendering,\r\n     * which determines the \"point size\" of a camera-facing\r\n     * sprite billboard given its 3D world position\r\n     * (origin at center of sprite) and its world width\r\n     * and height in x/y.\r\n     *\r\n     * We place into the output Vector2 the scaled width\r\n     * and height. If no `out` is specified, a new Vector2\r\n     * will be created for convenience (this should be avoided\r\n     * in tight loops).\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#getPointSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} vec - The position of the 3D Sprite.\r\n     * @param {Phaser.Math.Vector2} size - The x and y dimensions.\r\n     * @param {Phaser.Math.Vector2} out - The result, scaled x and y dimensions.\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    getPointSize: function (vec, size, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        // TODO: optimize this with a simple distance calculation:\r\n        // https://developer.valvesoftware.com/wiki/Field_of_View\r\n\r\n        if (this.billboardMatrixDirty)\r\n        {\r\n            this.updateBillboardMatrix();\r\n        }\r\n\r\n        var tmp = tmpVec3;\r\n\r\n        var dx = (size.x / this.pixelScale) / 2;\r\n        var dy = (size.y / this.pixelScale) / 2;\r\n\r\n        tmp.set(-dx, -dy, 0).transformMat4(billboardMatrix).add(vec);\r\n\r\n        this.project(tmp, tmp);\r\n\r\n        var tlx = tmp.x;\r\n        var tly = tmp.y;\r\n\r\n        tmp.set(dx, dy, 0).transformMat4(billboardMatrix).add(vec);\r\n\r\n        this.project(tmp, tmp);\r\n\r\n        var brx = tmp.x;\r\n        var bry = tmp.y;\r\n\r\n        // var w = Math.abs(brx - tlx);\r\n        // var h = Math.abs(bry - tly);\r\n\r\n        //  Allow the projection to get negative ...\r\n        var w = brx - tlx;\r\n        var h = bry - tly;\r\n\r\n        return out.set(w, h);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.children.clear();\r\n\r\n        this.scene = undefined;\r\n        this.children = undefined;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setX: function (value)\r\n    {\r\n        this.position.x = value;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setY: function (value)\r\n    {\r\n        this.position.y = value;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.Camera#setZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n     */\r\n    setZ: function (value)\r\n    {\r\n        this.position.z = value;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Cameras.Sprite3D.Camera#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.x = value;\r\n            this.update();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Cameras.Sprite3D.Camera#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.y = value;\r\n            this.update();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Cameras.Sprite3D.Camera#z\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    z: {\r\n        get: function ()\r\n        {\r\n            return this.position.z;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.z = value;\r\n            this.update();\r\n        }\r\n    }\r\n\r\n});\r\n\r\nCamera.FAR_RANGE = 1.0;\r\nCamera.NEAR_RANGE = 0.0;\r\n\r\nmodule.exports = Camera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL0NhbWVyYS5qcz80NjFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsZ0ZBQTZCO0FBQ3JELGlCQUFpQixtQkFBTyxDQUFDLGtGQUE4QjtBQUN2RCxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBOEI7QUFDdkQsVUFBVSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsNEZBQXFCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7QUFDakQsY0FBYyxtQkFBTyxDQUFDLDRFQUEyQjtBQUNqRCxjQUFjLG1CQUFPLENBQUMsNEVBQTJCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGdCQUFnQjs7QUFFcEQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGdCQUFnQjtBQUMvQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7O0FBRXBEOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTLGtCQUFrQixFQUFFO0FBQzVDLGVBQWUsU0FBUywyQkFBMkIsRUFBRTtBQUNyRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTLDZCQUE2QjtBQUM3RSwwQ0FBMEMsWUFBWSxzQ0FBc0M7O0FBRTVGOztBQUVBOztBQUVBOztBQUVBLHdDQUF3QyxrQkFBa0I7QUFDMUQ7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlEO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsOEJBQThCOztBQUVsRSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsOEJBQThCOztBQUVsRSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyw4QkFBOEI7O0FBRWxFLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDhCQUE4Qjs7QUFFbEUsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9DYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNYXRyaXg0ID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvTWF0cml4NCcpO1xyXG52YXIgUmFuZG9tWFlaID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvUmFuZG9tWFlaJyk7XHJcbnZhciBSYW5kb21YWVpXID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvUmFuZG9tWFlaVycpO1xyXG52YXIgUm90YXRlVmVjMyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9tYXRoL1JvdGF0ZVZlYzMnKTtcclxudmFyIFNldCA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9zdHJ1Y3RzL1NldCcpO1xyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL3Nwcml0ZTNkL1Nwcml0ZTNEJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvVmVjdG9yMicpO1xyXG52YXIgVmVjdG9yMyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9tYXRoL1ZlY3RvcjMnKTtcclxudmFyIFZlY3RvcjQgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3I0Jyk7XHJcblxyXG4vLyAgTG9jYWwgY2FjaGUgdmFyc1xyXG52YXIgdG1wVmVjMyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciB0bXBWZWM0ID0gbmV3IFZlY3RvcjQoKTtcclxudmFyIGRpcnZlYyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciByaWdodHZlYyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciBiaWxsYm9hcmRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLy8gIEBhdXRob3IgYXR0cmlidXRlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9jYW0zZC93aWtpXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gUmF5RGVmXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLk1hdGguVmVjdG9yM30gb3JpZ2luIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5NYXRoLlZlY3RvcjN9IGRpcmVjdGlvbiAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBDYW1lcmFcclxuICogQG1lbWJlck9mIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIENhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmEgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gc2NlbmUuc3lzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCN1cGRhdGVMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IHNjZW5lLnN5cy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNkaXJlY3Rpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjdXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3Bvc2l0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiAgVGhlIG1hcHBpbmcgZnJvbSAzRCBzaXplIHVuaXRzIHRvIHBpeGVscy5cclxuICAgICAgICAgKiAgSW4gdGhlIGRlZmF1bHQgY2FzZSAxIDNEIHVuaXQgPSAxMjggcGl4ZWxzLiBTbyBhIHNwcml0ZSB0aGF0IGlzXHJcbiAgICAgICAgICogIDI1NiB4IDEyOCBweCBpbiBzaXplIHdpbGwgYmUgMiB4IDEgdW5pdHMuXHJcbiAgICAgICAgICogIENoYW5nZSB0byB3aGF0ZXZlciBiZXN0IGZpdHMgeW91ciBnYW1lIGFzc2V0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3BpeGVsU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGl4ZWxTY2FsZSA9IDEyODtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbiA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3ZpZXdcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguTWF0cml4NH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNjb21iaW5lZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29tYmluZWQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNpbnZQcm9qZWN0aW9uVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52UHJvamVjdGlvblZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNuZWFyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZWFyID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjZmFyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZhciA9IDEwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjcmF5XHJcbiAgICAgICAgICogQHR5cGUge1JheURlZn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJheSA9IHtcclxuICAgICAgICAgICAgb3JpZ2luOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IG5ldyBWZWN0b3IzKClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCN2aWV3cG9ydFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydFdpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0Qjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjYmlsbGJvYXJkTWF0cml4RGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgU2V0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnNldCh4LCB5LCB6KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFNjZW5lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNjZW5lOiBmdW5jdGlvbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0UGl4ZWxTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQaXhlbFNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5waXhlbFNjYWxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBzcHJpdGUzRCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0R9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoc3ByaXRlM0QpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zZXQoc3ByaXRlM0QpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0LmFkZChzcHJpdGUzRC5nYW1lT2JqZWN0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKHNwcml0ZTNELmdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGUzRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdC5yZW1vdmUoY2hpbGQuZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0LnJlbW92ZShjaGlsZC5nYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5kZWxldGUoY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjZ2V0Q2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2FycmF5fSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpfSBmcmFtZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKHgsIHksIHosIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZpc2libGUgPT09IHVuZGVmaW5lZCkgeyB2aXNpYmxlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgU3ByaXRlM0QodGhpcy5zY2VuZSwgeCwgeSwgeiwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkLmdhbWVPYmplY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGNoaWxkLnZpc2libGUgPSB2aXNpYmxlO1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldChjaGlsZCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNjcmVhdGVNdWx0aXBsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHF1YW50aXR5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpfSBmcmFtZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTXVsdGlwbGU6IGZ1bmN0aW9uIChxdWFudGl0eSwga2V5LCBmcmFtZSwgdmlzaWJsZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIDAsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgICAgICBjaGlsZC52aXNpYmxlID0gdmlzaWJsZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KGNoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBDcmVhdGUgYSBidW5jaCBvZiBTcHJpdGUzRCBvYmplY3RzIGluIGEgcmVjdGFuZ2xlXHJcbiAgICAvLyAgc2l6ZSBhbmQgc3BhY2luZyBhcmUgVmVjM3MgKG9yIGlmIGludGVnZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdmVjM3MpXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNjcmVhdGVSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8e3g6bnVtYmVyLHk6bnVtYmVyfSl9IHNpemUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8e3g6bnVtYmVyLHk6bnVtYmVyLHo6bnVtYmVyfSl9IHNwYWNpbmcgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IFtmcmFtZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlUmVjdDogZnVuY3Rpb24gKHNpemUsIHNwYWNpbmcsIGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzaXplID09PSAnbnVtYmVyJykgeyBzaXplID0geyB4OiBzaXplLCB5OiBzaXplLCB6OiBzaXplIH07IH1cclxuICAgICAgICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7IHNwYWNpbmcgPSB7IHg6IHNwYWNpbmcsIHk6IHNwYWNpbmcsIHo6IHNwYWNpbmcgfTsgfVxyXG5cclxuICAgICAgICB2YXIgcXVhbnRpdHkgPSBzaXplLnggKiBzaXplLnkgKiBzaXplLno7XHJcblxyXG4gICAgICAgIHZhciBzcHJpdGVzID0gdGhpcy5jcmVhdGVNdWx0aXBsZShxdWFudGl0eSwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgeiA9IDAuNSAtIChzaXplLnogLyAyKTsgeiA8IChzaXplLnogLyAyKTsgeisrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDAuNSAtIChzaXplLnkgLyAyKTsgeSA8IChzaXplLnkgLyAyKTsgeSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMC41IC0gKHNpemUueCAvIDIpOyB4IDwgKHNpemUueCAvIDIpOyB4KyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ4ID0gKHggKiBzcGFjaW5nLngpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBieSA9ICh5ICogc3BhY2luZy55KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYnogPSAoeiAqIHNwYWNpbmcueik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNwcml0ZXNbaV0ucG9zaXRpb24uc2V0KGJ4LCBieSwgYnopO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNyYW5kb21TcGhlcmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzPTFdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0RbXX0gW3Nwcml0ZXNdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByYW5kb21TcGhlcmU6IGZ1bmN0aW9uIChyYWRpdXMsIHNwcml0ZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwcml0ZXMgPT09IHVuZGVmaW5lZCkgeyBzcHJpdGVzID0gdGhpcy5nZXRDaGlsZHJlbigpOyB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ByaXRlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFJhbmRvbVhZWihzcHJpdGVzW2ldLnBvc2l0aW9uLCByYWRpdXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3JhbmRvbUN1YmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRFtdfSBbc3ByaXRlc10gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJhbmRvbUN1YmU6IGZ1bmN0aW9uIChzY2FsZSwgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgUmFuZG9tWFlaVyhzcHJpdGVzW2ldLnBvc2l0aW9uLCBzY2FsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdHJhbnNsYXRlQ2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdmVjMyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IHNwcml0ZXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAodmVjMywgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlc1tpXS5wb3NpdGlvbi5hZGQodmVjMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdHJhbnNmb3JtQ2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gbWF0NCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IHNwcml0ZXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUNoaWxkcmVuOiBmdW5jdGlvbiAobWF0NCwgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlc1tpXS5wb3NpdGlvbi50cmFuc2Zvcm1NYXQ0KG1hdDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdmlld3BvcnQuIERvZXMgbm90IHVwZGF0ZSBhbnkgbWF0cmljZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0Vmlld3BvcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGVzIHRoaXMgY2FtZXJhIGJ5IGEgc3BlY2lmaWVkIFZlY3RvcjMgb2JqZWN0XHJcbiAgICAgKiBvciB4LCB5LCB6IHBhcmFtZXRlcnMuIEFueSB1bmRlZmluZWQgeCB5IHogdmFsdWVzIHdpbGxcclxuICAgICAqIGRlZmF1bHQgdG8gemVybywgbGVhdmluZyB0aGF0IGNvbXBvbmVudCB1bmFmZmVjdGVkLlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gc2V0IHRoZSBjYW1lcmEgcG9zaXRpb24gZGlyZWN0bHkgY2FsbCBzZXRQb3NpdGlvbiBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3RyYW5zbGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfG9iamVjdCl9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt6XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ICs9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgKz0geC55IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueiArPSB4LnogfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ICs9IHggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ICs9IHkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ICs9IHogfHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNsb29rQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxvYmplY3QpfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbel0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24gKHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uO1xyXG4gICAgICAgIHZhciB1cCA9IHRoaXMudXA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkaXIuY29weSh4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGlyLnNldCh4LCB5LCB6KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRpci5zdWJ0cmFjdCh0aGlzLnBvc2l0aW9uKS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgLy8gIENhbGN1bGF0ZSByaWdodCB2ZWN0b3JcclxuICAgICAgICB0bXBWZWMzLmNvcHkoZGlyKS5jcm9zcyh1cCkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vICBDYWxjdWxhdGUgdXAgdmVjdG9yXHJcbiAgICAgICAgdXAuY29weSh0bXBWZWMzKS5jcm9zcyhkaXIpLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcm90YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gYXhpcyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkaWFucywgYXhpcylcclxuICAgIHtcclxuICAgICAgICBSb3RhdGVWZWMzKHRoaXMuZGlyZWN0aW9uLCBheGlzLCByYWRpYW5zKTtcclxuICAgICAgICBSb3RhdGVWZWMzKHRoaXMudXAsIGF4aXMsIHJhZGlhbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcm90YXRlQXJvdW5kXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHBvaW50IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IGF4aXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogZnVuY3Rpb24gKHBvaW50LCByYWRpYW5zLCBheGlzKVxyXG4gICAge1xyXG4gICAgICAgIHRtcFZlYzMuY29weShwb2ludCkuc3VidHJhY3QodGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlKHRtcFZlYzMpO1xyXG4gICAgICAgIHRoaXMucm90YXRlKHJhZGlhbnMsIGF4aXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlKHRtcFZlYzMubmVnYXRlKCkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcHJvamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSB2ZWMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjR9IG91dCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Q6IGZ1bmN0aW9uICh2ZWMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjQoKTsgfVxyXG5cclxuICAgICAgICAvLyAgVE9ETzogc3VwcG9ydCB2aWV3cG9ydCBYWVxyXG4gICAgICAgIHZhciB2aWV3cG9ydFdpZHRoID0gdGhpcy52aWV3cG9ydFdpZHRoO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydEhlaWdodCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgdmFyIG4gPSBDYW1lcmEuTkVBUl9SQU5HRTtcclxuICAgICAgICB2YXIgZiA9IENhbWVyYS5GQVJfUkFOR0U7XHJcblxyXG4gICAgICAgIC8vICBGb3IgdXNlZnVsIFogYW5kIFcgdmFsdWVzIHdlIHNob3VsZCBkbyB0aGUgdXN1YWwgc3RlcHM6IGNsaXAgc3BhY2UgLT4gTkRDIC0+IHdpbmRvdyBjb29yZHNcclxuXHJcbiAgICAgICAgLy8gIEltcGxpY2l0IDEuMCBmb3IgdyBjb21wb25lbnRcclxuICAgICAgICB0bXBWZWM0LnNldCh2ZWMueCwgdmVjLnksIHZlYy56LCAxLjApO1xyXG5cclxuICAgICAgICAvLyAgVHJhbnNmb3JtIGludG8gY2xpcCBzcGFjZVxyXG4gICAgICAgIHRtcFZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmNvbWJpbmVkKTtcclxuXHJcbiAgICAgICAgLy8gIEF2b2lkIGRpdmlkZSBieSB6ZXJvIHdoZW4gMHgweDAgY2FtZXJhIHByb2plY3RzIHRvIGEgMHgweDAgdmVjM1xyXG4gICAgICAgIGlmICh0bXBWZWM0LncgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0bXBWZWM0LncgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE5vdyBpbnRvIE5EQ1xyXG4gICAgICAgIHRtcFZlYzQueCA9IHRtcFZlYzQueCAvIHRtcFZlYzQudztcclxuICAgICAgICB0bXBWZWM0LnkgPSB0bXBWZWM0LnkgLyB0bXBWZWM0Lnc7XHJcbiAgICAgICAgdG1wVmVjNC56ID0gdG1wVmVjNC56IC8gdG1wVmVjNC53O1xyXG5cclxuICAgICAgICAvLyAgQW5kIGZpbmFsbHkgaW50byB3aW5kb3cgY29vcmRpbmF0ZXNcclxuICAgICAgICBvdXQueCA9IHZpZXdwb3J0V2lkdGggLyAyICogdG1wVmVjNC54ICsgKDAgKyB2aWV3cG9ydFdpZHRoIC8gMik7XHJcbiAgICAgICAgb3V0LnkgPSB2aWV3cG9ydEhlaWdodCAvIDIgKiB0bXBWZWM0LnkgKyAoMCArIHZpZXdwb3J0SGVpZ2h0IC8gMik7XHJcbiAgICAgICAgb3V0LnogPSAoZiAtIG4pIC8gMiAqIHRtcFZlYzQueiArIChmICsgbikgLyAyO1xyXG5cclxuICAgICAgICAvLyAgSWYgdGhlIG91dCB2ZWN0b3IgaGFzIGEgZm91cnRoIGNvbXBvbmVudCwgd2UgYWxzbyBzdG9yZSAoMS9jbGlwLncpLCBzYW1lIGlkZWEgYXMgZ2xfRnJhZ0Nvb3JkLndcclxuICAgICAgICBpZiAob3V0LncgPT09IDAgfHwgb3V0LncpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQudyA9IDEgLyB0bXBWZWM0Lnc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN1bnByb2plY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yNH0gdmVjIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBvdXQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB1bnByb2plY3Q6IGZ1bmN0aW9uICh2ZWMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjMoKTsgfVxyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0bXBWZWM0LnNldCgwLCAwLCB0aGlzLnZpZXdwb3J0V2lkdGgsIHRoaXMudmlld3BvcnRIZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodmVjKS51bnByb2plY3Qodmlld3BvcnQsIHRoaXMuaW52UHJvamVjdGlvblZpZXcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNnZXRQaWNrUmF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UmF5RGVmfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFBpY2tSYXk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLnJheS5vcmlnaW4uc2V0KHgsIHksIDApO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnJheS5kaXJlY3Rpb24uc2V0KHgsIHksIDEpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRtcFZlYzQuc2V0KDAsIDAsIHRoaXMudmlld3BvcnRXaWR0aCwgdGhpcy52aWV3cG9ydEhlaWdodCk7XHJcbiAgICAgICAgdmFyIG10eCA9IHRoaXMuaW52UHJvamVjdGlvblZpZXc7XHJcblxyXG4gICAgICAgIG9yaWdpbi51bnByb2plY3Qodmlld3BvcnQsIG10eCk7XHJcblxyXG4gICAgICAgIGRpcmVjdGlvbi51bnByb2plY3Qodmlld3BvcnQsIG10eCk7XHJcblxyXG4gICAgICAgIGRpcmVjdGlvbi5zdWJ0cmFjdChvcmlnaW4pLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3VwZGF0ZUNoaWxkcmVuXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5lbnRyaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baV0ucHJvamVjdCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyAgT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdXBkYXRlQmlsbGJvYXJkTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQmlsbGJvYXJkTWF0cml4OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkaXIgPSBkaXJ2ZWMuc2V0KHRoaXMuZGlyZWN0aW9uKS5uZWdhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gQmV0dGVyIHZpZXctYWxpZ25lZCBiaWxsYm9hcmRzIG1pZ2h0IHVzZSB0aGlzOlxyXG4gICAgICAgIC8vIHZhciBkaXIgPSB0bXAuc2V0KGNhbWVyYS5wb3NpdGlvbikuc3VidHJhY3QocCkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZhciByaWdodCA9IHJpZ2h0dmVjLnNldCh0aGlzLnVwKS5jcm9zcyhkaXIpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB1cCA9IHRtcFZlYzMuc2V0KGRpcikuY3Jvc3MocmlnaHQpLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgb3V0ID0gYmlsbGJvYXJkTWF0cml4LnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gcmlnaHQueDtcclxuICAgICAgICBvdXRbMV0gPSByaWdodC55O1xyXG4gICAgICAgIG91dFsyXSA9IHJpZ2h0Lno7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzRdID0gdXAueDtcclxuICAgICAgICBvdXRbNV0gPSB1cC55O1xyXG4gICAgICAgIG91dFs2XSA9IHVwLno7XHJcbiAgICAgICAgb3V0WzddID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzhdID0gZGlyLng7XHJcbiAgICAgICAgb3V0WzldID0gZGlyLnk7XHJcbiAgICAgICAgb3V0WzEwXSA9IGRpci56O1xyXG4gICAgICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgICAgICBvdXRbMTJdID0gMDtcclxuICAgICAgICBvdXRbMTNdID0gMDtcclxuICAgICAgICBvdXRbMTRdID0gMDtcclxuICAgICAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBjYW52YXMgM0QgcmVuZGVyaW5nLFxyXG4gICAgICogd2hpY2ggZGV0ZXJtaW5lcyB0aGUgXCJwb2ludCBzaXplXCIgb2YgYSBjYW1lcmEtZmFjaW5nXHJcbiAgICAgKiBzcHJpdGUgYmlsbGJvYXJkIGdpdmVuIGl0cyAzRCB3b3JsZCBwb3NpdGlvblxyXG4gICAgICogKG9yaWdpbiBhdCBjZW50ZXIgb2Ygc3ByaXRlKSBhbmQgaXRzIHdvcmxkIHdpZHRoXHJcbiAgICAgKiBhbmQgaGVpZ2h0IGluIHgveS5cclxuICAgICAqXHJcbiAgICAgKiBXZSBwbGFjZSBpbnRvIHRoZSBvdXRwdXQgVmVjdG9yMiB0aGUgc2NhbGVkIHdpZHRoXHJcbiAgICAgKiBhbmQgaGVpZ2h0LiBJZiBubyBgb3V0YCBpcyBzcGVjaWZpZWQsIGEgbmV3IFZlY3RvcjJcclxuICAgICAqIHdpbGwgYmUgY3JlYXRlZCBmb3IgY29udmVuaWVuY2UgKHRoaXMgc2hvdWxkIGJlIGF2b2lkZWRcclxuICAgICAqIGluIHRpZ2h0IGxvb3BzKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNnZXRQb2ludFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gdmVjIC0gVGhlIHBvc2l0aW9uIG9mIHRoZSAzRCBTcHJpdGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNpemUgLSBUaGUgeCBhbmQgeSBkaW1lbnNpb25zLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBvdXQgLSBUaGUgcmVzdWx0LCBzY2FsZWQgeCBhbmQgeSBkaW1lbnNpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRTaXplOiBmdW5jdGlvbiAodmVjLCBzaXplLCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpcyB3aXRoIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uOlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLnZhbHZlc29mdHdhcmUuY29tL3dpa2kvRmllbGRfb2ZfVmlld1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmlsbGJvYXJkTWF0cml4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG1wID0gdG1wVmVjMztcclxuXHJcbiAgICAgICAgdmFyIGR4ID0gKHNpemUueCAvIHRoaXMucGl4ZWxTY2FsZSkgLyAyO1xyXG4gICAgICAgIHZhciBkeSA9IChzaXplLnkgLyB0aGlzLnBpeGVsU2NhbGUpIC8gMjtcclxuXHJcbiAgICAgICAgdG1wLnNldCgtZHgsIC1keSwgMCkudHJhbnNmb3JtTWF0NChiaWxsYm9hcmRNYXRyaXgpLmFkZCh2ZWMpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2plY3QodG1wLCB0bXApO1xyXG5cclxuICAgICAgICB2YXIgdGx4ID0gdG1wLng7XHJcbiAgICAgICAgdmFyIHRseSA9IHRtcC55O1xyXG5cclxuICAgICAgICB0bXAuc2V0KGR4LCBkeSwgMCkudHJhbnNmb3JtTWF0NChiaWxsYm9hcmRNYXRyaXgpLmFkZCh2ZWMpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2plY3QodG1wLCB0bXApO1xyXG5cclxuICAgICAgICB2YXIgYnJ4ID0gdG1wLng7XHJcbiAgICAgICAgdmFyIGJyeSA9IHRtcC55O1xyXG5cclxuICAgICAgICAvLyB2YXIgdyA9IE1hdGguYWJzKGJyeCAtIHRseCk7XHJcbiAgICAgICAgLy8gdmFyIGggPSBNYXRoLmFicyhicnkgLSB0bHkpO1xyXG5cclxuICAgICAgICAvLyAgQWxsb3cgdGhlIHByb2plY3Rpb24gdG8gZ2V0IG5lZ2F0aXZlIC4uLlxyXG4gICAgICAgIHZhciB3ID0gYnJ4IC0gdGx4O1xyXG4gICAgICAgIHZhciBoID0gYnJ5IC0gdGx5O1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldCh3LCBoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0WVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRZOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNzZXRaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFo6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnogPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLno7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnogPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkNhbWVyYS5GQVJfUkFOR0UgPSAxLjA7XHJcbkNhbWVyYS5ORUFSX1JBTkdFID0gMC4wO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYW1lcmE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/Camera.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/CameraManager.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/CameraManager.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar OrthographicCamera = __webpack_require__(/*! ./OrthographicCamera */ \"./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\");\r\nvar PerspectiveCamera = __webpack_require__(/*! ./PerspectiveCamera */ \"./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../../src/plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class CameraManager\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar CameraManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function CameraManager (scene)\r\n    {\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.CameraManager#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.CameraManager#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * An Array of the Camera objects being managed by this Camera Manager.\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.CameraManager#cameras\r\n         * @type {Phaser.Cameras.Sprite3D.Camera[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.cameras = [];\r\n\r\n        scene.sys.events.once('boot', this.boot, this);\r\n        scene.sys.events.on('start', this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Cameras.Scene3D.CameraManager#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once('destroy', this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on('update', this.update, this);\r\n        eventEmitter.once('shutdown', this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [fieldOfView=80] - [description]\r\n     * @param {number} [width] - [description]\r\n     * @param {number} [height] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n     */\r\n    add: function (fieldOfView, width, height)\r\n    {\r\n        return this.addPerspectiveCamera(fieldOfView, width, height);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#addOrthographicCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n     */\r\n    addOrthographicCamera: function (width, height)\r\n    {\r\n        var config = this.scene.sys.game.config;\r\n\r\n        if (width === undefined) { width = config.width; }\r\n        if (height === undefined) { height = config.height; }\r\n\r\n        var camera = new OrthographicCamera(this.scene, width, height);\r\n\r\n        this.cameras.push(camera);\r\n\r\n        return camera;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#addPerspectiveCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [fieldOfView=80] - [description]\r\n     * @param {number} [width] - [description]\r\n     * @param {number} [height] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n     */\r\n    addPerspectiveCamera: function (fieldOfView, width, height)\r\n    {\r\n        var config = this.scene.sys.game.config;\r\n\r\n        if (fieldOfView === undefined) { fieldOfView = 80; }\r\n        if (width === undefined) { width = config.width; }\r\n        if (height === undefined) { height = config.height; }\r\n\r\n        var camera = new PerspectiveCamera(this.scene, fieldOfView, width, height);\r\n\r\n        this.cameras.push(camera);\r\n\r\n        return camera;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#getCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - [description]\r\n     *\r\n     * @return {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} [description]\r\n     */\r\n    getCamera: function (name)\r\n    {\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            if (this.cameras[i].name === name)\r\n            {\r\n                return this.cameras[i];\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#removeCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} camera - [description]\r\n     */\r\n    removeCamera: function (camera)\r\n    {\r\n        var cameraIndex = this.cameras.indexOf(camera);\r\n\r\n        if (cameraIndex !== -1)\r\n        {\r\n            this.cameras.splice(cameraIndex, 1);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#removeAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} [description]\r\n     */\r\n    removeAll: function ()\r\n    {\r\n        while (this.cameras.length > 0)\r\n        {\r\n            var camera = this.cameras.pop();\r\n\r\n            camera.destroy();\r\n        }\r\n\r\n        return this.main;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} timestep - [description]\r\n     * @param {number} delta - [description]\r\n     */\r\n    update: function (timestep, delta)\r\n    {\r\n        for (var i = 0, l = this.cameras.length; i < l; ++i)\r\n        {\r\n            this.cameras[i].update(timestep, delta);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off('update', this.update, this);\r\n        eventEmitter.off('shutdown', this.shutdown, this);\r\n\r\n        this.removeAll();\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.CameraManager#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off('start', this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('CameraManager3D', CameraManager, 'cameras3d');\r\n\r\nmodule.exports = CameraManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL0NhbWVyYU1hbmFnZXIuanM/M2FhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM5Qyx5QkFBeUIsbUJBQU8sQ0FBQyw4RkFBc0I7QUFDdkQsd0JBQXdCLG1CQUFPLENBQUMsNEZBQXFCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLDBGQUFrQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxzQkFBc0I7QUFDeEQsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBDQUEwQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0Msa0JBQWtCO0FBQzFELGtDQUFrQyxzQkFBc0I7QUFDeEQsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1RkFBdUY7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUZBQXVGO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUZBQXVGO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9DYW1lcmFNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgT3J0aG9ncmFwaGljQ2FtZXJhID0gcmVxdWlyZSgnLi9PcnRob2dyYXBoaWNDYW1lcmEnKTtcclxudmFyIFBlcnNwZWN0aXZlQ2FtZXJhID0gcmVxdWlyZSgnLi9QZXJzcGVjdGl2ZUNhbWVyYScpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgQ2FtZXJhTWFuYWdlclxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQ2FtZXJhTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmFNYW5hZ2VyIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBBcnJheSBvZiB0aGUgQ2FtZXJhIG9iamVjdHMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIENhbWVyYSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNjYW1lcmFzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IFtdO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoJ2Jvb3QnLCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oJ3N0YXJ0JywgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTNELkNhbWVyYU1hbmFnZXIjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZSgnZGVzdHJveScsIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoJ3NodXRkb3duJywgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmllbGRPZlZpZXc9ODBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmF9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGVyc3BlY3RpdmVDYW1lcmEoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjYWRkT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBhZGRPcnRob2dyYXBoaWNDYW1lcmE6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLmNvbmZpZztcclxuXHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBjb25maWcud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh0aGlzLnNjZW5lLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzLnB1c2goY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI2FkZFBlcnNwZWN0aXZlQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpZWxkT2ZWaWV3PTgwXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGFkZFBlcnNwZWN0aXZlQ2FtZXJhOiBmdW5jdGlvbiAoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuc2NlbmUuc3lzLmdhbWUuY29uZmlnO1xyXG5cclxuICAgICAgICBpZiAoZmllbGRPZlZpZXcgPT09IHVuZGVmaW5lZCkgeyBmaWVsZE9mVmlldyA9IDgwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBjb25maWcud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHRoaXMuc2NlbmUsIGZpZWxkT2ZWaWV3LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzLnB1c2goY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI2dldENhbWVyYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSl9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FtZXJhcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbWVyYXNbaV0ubmFtZSA9PT0gbmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNyZW1vdmVDYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSl9IGNhbWVyYSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFJbmRleCA9IHRoaXMuY2FtZXJhcy5pbmRleE9mKGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmFJbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXMuc3BsaWNlKGNhbWVyYUluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmF8UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmEpfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5jYW1lcmFzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmFzLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RlcCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZXN0ZXAsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSA8IGw7ICsraSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhc1tpXS51cGRhdGUodGltZXN0ZXAsIGRlbHRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKCdzaHV0ZG93bicsIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZignc3RhcnQnLCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0NhbWVyYU1hbmFnZXIzRCcsIENhbWVyYU1hbmFnZXIsICdjYW1lcmFzM2QnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FtZXJhTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/CameraManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\n\r\n//  Local cache vars\r\nvar tmpVec3 = new Vector3();\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class OrthographicCamera\r\n * @extends Phaser.Cameras.Sprite3D.Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n * @param {integer} [viewportWidth=0] - [description]\r\n * @param {integer} [viewportHeight=0] - [description]\r\n */\r\nvar OrthographicCamera = new Class({\r\n\r\n    Extends: Camera,\r\n\r\n    initialize:\r\n\r\n    function OrthographicCamera (scene, viewportWidth, viewportHeight)\r\n    {\r\n        if (viewportWidth === undefined) { viewportWidth = 0; }\r\n        if (viewportHeight === undefined) { viewportHeight = 0; }\r\n\r\n        Camera.call(this, scene);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.OrthographicCamera#viewportWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportWidth = viewportWidth;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.OrthographicCamera#viewportHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportHeight = viewportHeight;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.OrthographicCamera#_zoom\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._zoom = 1.0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.OrthographicCamera#near\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.near = 0;\r\n\r\n        this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.OrthographicCamera#setToOrtho\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} yDown - [description]\r\n     * @param {number} [viewportWidth] - [description]\r\n     * @param {number} [viewportHeight] - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n     */\r\n    setToOrtho: function (yDown, viewportWidth, viewportHeight)\r\n    {\r\n        if (viewportWidth === undefined) { viewportWidth = this.viewportWidth; }\r\n        if (viewportHeight === undefined) { viewportHeight = this.viewportHeight; }\r\n\r\n        var zoom = this.zoom;\r\n\r\n        this.up.set(0, (yDown) ? -1 : 1, 0);\r\n        this.direction.set(0, 0, (yDown) ? 1 : -1);\r\n        this.position.set(zoom * viewportWidth / 2, zoom * viewportHeight / 2, 0);\r\n\r\n        this.viewportWidth = viewportWidth;\r\n        this.viewportHeight = viewportHeight;\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.OrthographicCamera#update\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n     */\r\n    update: function ()\r\n    {\r\n        var w = this.viewportWidth;\r\n        var h = this.viewportHeight;\r\n        var near = Math.abs(this.near);\r\n        var far = Math.abs(this.far);\r\n        var zoom = this.zoom;\r\n\r\n        if (w === 0 || h === 0)\r\n        {\r\n            //  What to do here... hmm?\r\n            return this;\r\n        }\r\n\r\n        this.projection.ortho(\r\n            zoom * -w / 2, zoom * w / 2,\r\n            zoom * -h / 2, zoom * h / 2,\r\n            near,\r\n            far\r\n        );\r\n\r\n        //  Build the view matrix\r\n        tmpVec3.copy(this.position).add(this.direction);\r\n\r\n        this.view.lookAt(this.position, tmpVec3, this.up);\r\n\r\n        //  Projection * view matrix\r\n        this.combined.copy(this.projection).multiply(this.view);\r\n\r\n        //  Invert combined matrix, used for unproject\r\n        this.invProjectionView.copy(this.combined).invert();\r\n\r\n        this.billboardMatrixDirty = true;\r\n\r\n        this.updateChildren();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Cameras.Sprite3D.OrthographicCamera#zoom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    zoom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._zoom;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._zoom = value;\r\n            this.update();\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = OrthographicCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL09ydGhvZ3JhcGhpY0NhbWVyYS5qcz9mMDhmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsWUFBWSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM5QyxjQUFjLG1CQUFPLENBQUMsNEVBQTJCOztBQUVqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLG1CQUFtQjtBQUM3RCwyQ0FBMkMsb0JBQW9COztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQ0FBMkM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG9DQUFvQztBQUM5RSwyQ0FBMkMsc0NBQXNDOztBQUVqRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9jYW1lcmEzZC9zcmMvT3J0aG9ncmFwaGljQ2FtZXJhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW1lcmEgPSByZXF1aXJlKCcuL0NhbWVyYScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjMgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3IzJyk7XHJcblxyXG4vLyAgTG9jYWwgY2FjaGUgdmFyc1xyXG52YXIgdG1wVmVjMyA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBPcnRob2dyYXBoaWNDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhXHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdmlld3BvcnRXaWR0aD0wXSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdmlld3BvcnRIZWlnaHQ9MF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljQ2FtZXJhID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBDYW1lcmEsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBPcnRob2dyYXBoaWNDYW1lcmEgKHNjZW5lLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlld3BvcnRXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0V2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0SGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgdmlld3BvcnRIZWlnaHQgPSAwOyB9XHJcblxyXG4gICAgICAgIENhbWVyYS5jYWxsKHRoaXMsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3ZpZXdwb3J0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmEjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYSNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl96b29tID0gMS4wO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmEjbmVhclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmVhciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3NldFRvT3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5RG93biAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlld3BvcnRXaWR0aF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZpZXdwb3J0SGVpZ2h0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmF9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgc2V0VG9PcnRobzogZnVuY3Rpb24gKHlEb3duLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlld3BvcnRXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0V2lkdGggPSB0aGlzLnZpZXdwb3J0V2lkdGg7IH1cclxuICAgICAgICBpZiAodmlld3BvcnRIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyB2aWV3cG9ydEhlaWdodCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb207XHJcblxyXG4gICAgICAgIHRoaXMudXAuc2V0KDAsICh5RG93bikgPyAtMSA6IDEsIDApO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldCgwLCAwLCAoeURvd24pID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnNldCh6b29tICogdmlld3BvcnRXaWR0aCAvIDIsIHpvb20gKiB2aWV3cG9ydEhlaWdodCAvIDIsIDApO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoO1xyXG4gICAgICAgIHRoaXMudmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdyA9IHRoaXMudmlld3BvcnRXaWR0aDtcclxuICAgICAgICB2YXIgaCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBNYXRoLmFicyh0aGlzLm5lYXIpO1xyXG4gICAgICAgIHZhciBmYXIgPSBNYXRoLmFicyh0aGlzLmZhcik7XHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb207XHJcblxyXG4gICAgICAgIGlmICh3ID09PSAwIHx8IGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2hhdCB0byBkbyBoZXJlLi4uIGhtbT9cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb2plY3Rpb24ub3J0aG8oXHJcbiAgICAgICAgICAgIHpvb20gKiAtdyAvIDIsIHpvb20gKiB3IC8gMixcclxuICAgICAgICAgICAgem9vbSAqIC1oIC8gMiwgem9vbSAqIGggLyAyLFxyXG4gICAgICAgICAgICBuZWFyLFxyXG4gICAgICAgICAgICBmYXJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyAgQnVpbGQgdGhlIHZpZXcgbWF0cml4XHJcbiAgICAgICAgdG1wVmVjMy5jb3B5KHRoaXMucG9zaXRpb24pLmFkZCh0aGlzLmRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudmlldy5sb29rQXQodGhpcy5wb3NpdGlvbiwgdG1wVmVjMywgdGhpcy51cCk7XHJcblxyXG4gICAgICAgIC8vICBQcm9qZWN0aW9uICogdmlldyBtYXRyaXhcclxuICAgICAgICB0aGlzLmNvbWJpbmVkLmNvcHkodGhpcy5wcm9qZWN0aW9uKS5tdWx0aXBseSh0aGlzLnZpZXcpO1xyXG5cclxuICAgICAgICAvLyAgSW52ZXJ0IGNvbWJpbmVkIG1hdHJpeCwgdXNlZCBmb3IgdW5wcm9qZWN0XHJcbiAgICAgICAgdGhpcy5pbnZQcm9qZWN0aW9uVmlldy5jb3B5KHRoaXMuY29tYmluZWQpLmludmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbGxib2FyZE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3pvb21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgem9vbToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fem9vbTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3pvb20gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\n\r\n//  Local cache vars\r\nvar tmpVec3 = new Vector3();\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class PerspectiveCamera\r\n * @extends Phaser.Cameras.Sprite3D.Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n * @param {integer} [fieldOfView=80] - [description]\r\n * @param {integer} [viewportWidth=0] - [description]\r\n * @param {integer} [viewportHeight=0] - [description]\r\n */\r\nvar PerspectiveCamera = new Class({\r\n\r\n    Extends: Camera,\r\n\r\n    //  FOV is converted to radians automatically\r\n    initialize:\r\n\r\n    function PerspectiveCamera (scene, fieldOfView, viewportWidth, viewportHeight)\r\n    {\r\n        if (fieldOfView === undefined) { fieldOfView = 80; }\r\n        if (viewportWidth === undefined) { viewportWidth = 0; }\r\n        if (viewportHeight === undefined) { viewportHeight = 0; }\r\n\r\n        Camera.call(this, scene);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#viewportWidth\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportWidth = viewportWidth;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#viewportHeight\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.viewportHeight = viewportHeight;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#fieldOfView\r\n         * @type {integer}\r\n         * @default 80\r\n         * @since 3.0.0\r\n         */\r\n        this.fieldOfView = fieldOfView * Math.PI / 180;\r\n\r\n        this.update();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.PerspectiveCamera#setFOV\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n     */\r\n    setFOV: function (value)\r\n    {\r\n        this.fieldOfView = value * Math.PI / 180;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Cameras.Sprite3D.PerspectiveCamera#update\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n     */\r\n    update: function ()\r\n    {\r\n        var aspect = this.viewportWidth / this.viewportHeight;\r\n\r\n        //  Create a perspective matrix for our camera\r\n        this.projection.perspective(\r\n            this.fieldOfView,\r\n            aspect,\r\n            Math.abs(this.near),\r\n            Math.abs(this.far)\r\n        );\r\n\r\n        //  Build the view matrix\r\n        tmpVec3.copy(this.position).add(this.direction);\r\n\r\n        this.view.lookAt(this.position, tmpVec3, this.up);\r\n\r\n        //  Projection * view matrix\r\n        this.combined.copy(this.projection).multiply(this.view);\r\n\r\n        //  Invert combined matrix, used for unproject\r\n        this.invProjectionView.copy(this.combined).invert();\r\n\r\n        this.billboardMatrixDirty = true;\r\n\r\n        this.updateChildren();\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = PerspectiveCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL1BlcnNwZWN0aXZlQ2FtZXJhLmpzPzEzOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxzRUFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCO0FBQzFELDBDQUEwQyxtQkFBbUI7QUFDN0QsMkNBQTJDLG9CQUFvQjs7QUFFL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9QZXJzcGVjdGl2ZUNhbWVyYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi9DYW1lcmEnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBWZWN0b3IzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvVmVjdG9yMycpO1xyXG5cclxuLy8gIExvY2FsIGNhY2hlIHZhcnNcclxudmFyIHRtcFZlYzMgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgUGVyc3BlY3RpdmVDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhXHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZmllbGRPZlZpZXc9ODBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt2aWV3cG9ydFdpZHRoPTBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt2aWV3cG9ydEhlaWdodD0wXSAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZUNhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ2FtZXJhLFxyXG5cclxuICAgIC8vICBGT1YgaXMgY29udmVydGVkIHRvIHJhZGlhbnMgYXV0b21hdGljYWxseVxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVyYSAoc2NlbmUsIGZpZWxkT2ZWaWV3LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoZmllbGRPZlZpZXcgPT09IHVuZGVmaW5lZCkgeyBmaWVsZE9mVmlldyA9IDgwOyB9XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0V2lkdGggPT09IHVuZGVmaW5lZCkgeyB2aWV3cG9ydFdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmICh2aWV3cG9ydEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0SGVpZ2h0ID0gMDsgfVxyXG5cclxuICAgICAgICBDYW1lcmEuY2FsbCh0aGlzLCBzY2VuZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhI3ZpZXdwb3J0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmEjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSNmaWVsZE9mVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDgwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWVsZE9mVmlldyA9IGZpZWxkT2ZWaWV3ICogTWF0aC5QSSAvIDE4MDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSNzZXRGT1ZcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBzZXRGT1Y6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpZWxkT2ZWaWV3ID0gdmFsdWUgKiBNYXRoLlBJIC8gMTgwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXNwZWN0ID0gdGhpcy52aWV3cG9ydFdpZHRoIC8gdGhpcy52aWV3cG9ydEhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIENyZWF0ZSBhIHBlcnNwZWN0aXZlIG1hdHJpeCBmb3Igb3VyIGNhbWVyYVxyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbi5wZXJzcGVjdGl2ZShcclxuICAgICAgICAgICAgdGhpcy5maWVsZE9mVmlldyxcclxuICAgICAgICAgICAgYXNwZWN0LFxyXG4gICAgICAgICAgICBNYXRoLmFicyh0aGlzLm5lYXIpLFxyXG4gICAgICAgICAgICBNYXRoLmFicyh0aGlzLmZhcilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyAgQnVpbGQgdGhlIHZpZXcgbWF0cml4XHJcbiAgICAgICAgdG1wVmVjMy5jb3B5KHRoaXMucG9zaXRpb24pLmFkZCh0aGlzLmRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudmlldy5sb29rQXQodGhpcy5wb3NpdGlvbiwgdG1wVmVjMywgdGhpcy51cCk7XHJcblxyXG4gICAgICAgIC8vICBQcm9qZWN0aW9uICogdmlldyBtYXRyaXhcclxuICAgICAgICB0aGlzLmNvbWJpbmVkLmNvcHkodGhpcy5wcm9qZWN0aW9uKS5tdWx0aXBseSh0aGlzLnZpZXcpO1xyXG5cclxuICAgICAgICAvLyAgSW52ZXJ0IGNvbWJpbmVkIG1hdHJpeCwgdXNlZCBmb3IgdW5wcm9qZWN0XHJcbiAgICAgICAgdGhpcy5pbnZQcm9qZWN0aW9uVmlldy5jb3B5KHRoaXMuY29tYmluZWQpLmludmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbGxib2FyZE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Sprite3D\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Camera: __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\"),\r\n    CameraManager: __webpack_require__(/*! ./CameraManager */ \"./node_modules/phaser/plugins/camera3d/src/CameraManager.js\"),\r\n    OrthographicCamera: __webpack_require__(/*! ./OrthographicCamera */ \"./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\"),\r\n    PerspectiveCamera: __webpack_require__(/*! ./PerspectiveCamera */ \"./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL2luZGV4LmpzPzI5YjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWlCO0FBQzVDLHdCQUF3QixtQkFBTyxDQUFDLDhGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyw0RkFBcUI7O0FBRXBEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbWVyYTogcmVxdWlyZSgnLi9DYW1lcmEnKSxcclxuICAgIENhbWVyYU1hbmFnZXI6IHJlcXVpcmUoJy4vQ2FtZXJhTWFuYWdlcicpLFxyXG4gICAgT3J0aG9ncmFwaGljQ2FtZXJhOiByZXF1aXJlKCcuL09ydGhvZ3JhcGhpY0NhbWVyYScpLFxyXG4gICAgUGVyc3BlY3RpdmVDYW1lcmE6IHJlcXVpcmUoJy4vUGVyc3BlY3RpdmVDYW1lcmEnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameObject = __webpack_require__(/*! ../../../../src/gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Sprite = __webpack_require__(/*! ../../../../src/gameobjects/sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../../src/math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../../../src/math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Sprite 3D Game Object.\r\n *\r\n * The Sprite 3D object is an encapsulation of a standard Sprite object, with additional methods to allow\r\n * it to be rendered by a 3D Camera. The Sprite can be positioned anywhere within 3D space.\r\n *\r\n * @class Sprite3D\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberOf Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The x position of this Game Object.\r\n * @param {number} y - The y position of this Game Object.\r\n * @param {number} z - The z position of this Game Object.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Sprite3D = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    initialize:\r\n\r\n    function Sprite3D (scene, x, y, z, texture, frame)\r\n    {\r\n        GameObject.call(this, scene, 'Sprite3D');\r\n\r\n        /**\r\n         * The encapsulated Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#gameObject\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.gameObject = new Sprite(scene, 0, 0, texture, frame);\r\n\r\n        /**\r\n         * The position of the Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#position\r\n         * @type {Phaser.Math.Vector4}\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector4(x, y, z);\r\n\r\n        /**\r\n         * The 2D size of the Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#size\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = new Vector2(this.gameObject.width, this.gameObject.height);\r\n\r\n        /**\r\n         * The 2D scale of the Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#scale\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.scale = new Vector2(1, 1);\r\n\r\n        /**\r\n         * Whether to automatically set the horizontal scale of the encapsulated Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#adjustScaleX\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.adjustScaleX = true;\r\n\r\n        /**\r\n         * Whether to automatically set the vertical scale of the encapsulated Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#adjustScaleY\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.adjustScaleY = true;\r\n\r\n        /**\r\n         * The visible state of the Game Object.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite3D#_visible\r\n         * @type {boolean}\r\n         * @default true\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._visible = true;\r\n    },\r\n\r\n    /**\r\n     * Project this Sprite onto the given 3D Camera.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite3D#project\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Sprite3D.Camera} camera - The 3D Camera onto which to project this Sprite.\r\n     */\r\n    project: function (camera)\r\n    {\r\n        var pos = this.position;\r\n\r\n        var gameObject = this.gameObject;\r\n\r\n        camera.project(pos, gameObject);\r\n\r\n        camera.getPointSize(pos, this.size, this.scale);\r\n\r\n        if (this.scale.x <= 0 || this.scale.y <= 0)\r\n        {\r\n            gameObject.setVisible(false);\r\n        }\r\n        else\r\n        {\r\n            if (!gameObject.visible)\r\n            {\r\n                gameObject.setVisible(true);\r\n            }\r\n\r\n            if (this.adjustScaleX)\r\n            {\r\n                gameObject.scaleX = this.scale.x;\r\n            }\r\n\r\n            if (this.adjustScaleY)\r\n            {\r\n                gameObject.scaleY = this.scale.y;\r\n            }\r\n\r\n            gameObject.setDepth(gameObject.z * -1);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Set the visible state of the Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite3D#setVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The visible state of the Game Object.\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite3D} This Sprite3D Object.\r\n     */\r\n    setVisible: function (value)\r\n    {\r\n        this.visible = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The visible state of the Game Object.\r\n     *\r\n     * An invisible Game Object will skip rendering, but will still process update logic.\r\n     *\r\n     * @name Phaser.GameObjects.Sprite3D#visible\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    visible: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._visible;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._visible = value;\r\n            this.gameObject.visible = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The x position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Sprite3D#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.x = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Sprite3D#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.y = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The z position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Sprite3D#z\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    z: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.z;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.z = value;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Sprite3D;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNELmpzPzg2YjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw2RUFBNkI7QUFDakQsaUJBQWlCLG1CQUFPLENBQUMsbUdBQXdDO0FBQ2pFLGFBQWEsbUJBQU8sQ0FBQyx5R0FBMkM7QUFDaEUsY0FBYyxtQkFBTyxDQUFDLCtFQUE4QjtBQUNwRCxjQUFjLG1CQUFPLENBQUMsK0VBQThCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNELmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Jyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9tYXRoL1ZlY3RvcjInKTtcclxudmFyIFZlY3RvcjQgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3I0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNwcml0ZSAzRCBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhlIFNwcml0ZSAzRCBvYmplY3QgaXMgYW4gZW5jYXBzdWxhdGlvbiBvZiBhIHN0YW5kYXJkIFNwcml0ZSBvYmplY3QsIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIHRvIGFsbG93XHJcbiAqIGl0IHRvIGJlIHJlbmRlcmVkIGJ5IGEgM0QgQ2FtZXJhLiBUaGUgU3ByaXRlIGNhbiBiZSBwb3NpdGlvbmVkIGFueXdoZXJlIHdpdGhpbiAzRCBzcGFjZS5cclxuICpcclxuICogQGNsYXNzIFNwcml0ZTNEXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBTcHJpdGUzRCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNwcml0ZTNEIChzY2VuZSwgeCwgeSwgeiwgdGV4dHVyZSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnU3ByaXRlM0QnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuY2Fwc3VsYXRlZCBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjZ2FtZU9iamVjdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWVPYmplY3QgPSBuZXcgU3ByaXRlKHNjZW5lLCAwLCAwLCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3Bvc2l0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3I0KHgsIHksIHopO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgMkQgc2l6ZSBvZiB0aGUgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3NpemVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpemUgPSBuZXcgVmVjdG9yMih0aGlzLmdhbWVPYmplY3Qud2lkdGgsIHRoaXMuZ2FtZU9iamVjdC5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgMkQgc2NhbGUgb2YgdGhlIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNzY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGUgZW5jYXBzdWxhdGVkIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNhZGp1c3RTY2FsZVhcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGp1c3RTY2FsZVggPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGUgZW5jYXBzdWxhdGVkIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNhZGp1c3RTY2FsZVlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGp1c3RTY2FsZVkgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjX3Zpc2libGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9qZWN0IHRoaXMgU3ByaXRlIG9udG8gdGhlIGdpdmVuIDNEIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNwcm9qZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gY2FtZXJhIC0gVGhlIDNEIENhbWVyYSBvbnRvIHdoaWNoIHRvIHByb2plY3QgdGhpcyBTcHJpdGUuXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Q6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zaXRpb247XHJcblxyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBjYW1lcmEucHJvamVjdChwb3MsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBjYW1lcmEuZ2V0UG9pbnRTaXplKHBvcywgdGhpcy5zaXplLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NhbGUueCA8PSAwIHx8IHRoaXMuc2NhbGUueSA8PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LnZpc2libGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3Quc2V0VmlzaWJsZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWRqdXN0U2NhbGVYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjYWxlWCA9IHRoaXMuc2NhbGUueDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWRqdXN0U2NhbGVZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjYWxlWSA9IHRoaXMuc2NhbGUueTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXREZXB0aChnYW1lT2JqZWN0LnogKiAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0Qjc2V0VmlzaWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0R9IFRoaXMgU3ByaXRlM0QgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBpbnZpc2libGUgR2FtZSBPYmplY3Qgd2lsbCBza2lwIHJlbmRlcmluZywgYnV0IHdpbGwgc3RpbGwgcHJvY2VzcyB1cGRhdGUgbG9naWMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3Zpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZpc2libGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU9iamVjdC52aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB6IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi56O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGUzRDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../../../../src/gameobjects/BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar BuildGameObjectAnimation = __webpack_require__(/*! ../../../../src/gameobjects/BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../../../src/gameobjects/GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../../src/utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Sprite3D = __webpack_require__(/*! ./Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\n\r\n/**\r\n * Creates a new Sprite3D Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Sprite3D Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#sprite3D\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('sprite3D', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n    var sprite = new Sprite3D(this.scene, 0, 0, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, sprite, config);\r\n\r\n    //  Sprite specific config options:\r\n\r\n    BuildGameObjectAnimation(sprite, config);\r\n\r\n    return sprite;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNEQ3JlYXRvci5qcz84NTI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyw2R0FBNkM7QUFDM0UsK0JBQStCLG1CQUFPLENBQUMsK0hBQXNEO0FBQzdGLHdCQUF3QixtQkFBTyxDQUFDLGlIQUErQztBQUMvRSx1QkFBdUIsbUJBQU8sQ0FBQyxpSEFBK0M7QUFDOUUsZUFBZSxtQkFBTyxDQUFDLG1GQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9jYW1lcmEzZC9zcmMvc3ByaXRlM2QvU3ByaXRlM0RDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBCdWlsZEdhbWVPYmplY3RBbmltYXRpb24gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uJyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL1Nwcml0ZTNEJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBTcHJpdGUzRCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU3ByaXRlM0QgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3Nwcml0ZTNEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3Rlcignc3ByaXRlM0QnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuXHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHNwcml0ZSwgY29uZmlnKTtcclxuXHJcbiAgICAvLyAgU3ByaXRlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zOlxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbihzcHJpdGUsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdENyZWF0b3IgY29udGV4dC5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Sprite3D = __webpack_require__(/*! ./Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../../../src/gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Sprite3D Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Sprite3D Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#sprite3D\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object.\r\n * @param {number} y - The vertical position of this Game Object.\r\n * @param {number} z - The z position of this Game Object.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('sprite3D', function (x, y, z, key, frame)\r\n{\r\n    var sprite = new Sprite3D(this.scene, x, y, z, key, frame);\r\n\r\n    this.displayList.add(sprite.gameObject);\r\n    this.updateList.add(sprite.gameObject);\r\n\r\n    return sprite;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNERmFjdG9yeS5qcz8zZDM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsbUZBQVk7QUFDbkMsd0JBQXdCLG1CQUFPLENBQUMsaUhBQStDOztBQUUvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNERmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL1Nwcml0ZTNEJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3ByaXRlM0QgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBTcHJpdGUzRCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3ByaXRlM0RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdzcHJpdGUzRCcsIGZ1bmN0aW9uICh4LCB5LCB6LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIHgsIHksIHosIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZS5nYW1lT2JqZWN0KTtcclxuICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoc3ByaXRlLmdhbWVPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/AdInstance.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/AdInstance.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} AdInstance\r\n *\r\n * @property {any} instance - Represents an instance of an ad.\r\n * @property {string} placementID - The Audience Network placement ID of this ad instance.\r\n * @property {boolean} shown - Has this ad already been shown in-game?\r\n * @property {boolean} video - Is this a video ad?\r\n */\r\n\r\nvar AdInstance = function (placementID, instance, video)\r\n{\r\n    return {\r\n        instance: instance,\r\n        placementID: placementID,\r\n        shown: false,\r\n        video: video\r\n    };\r\n};\r\n\r\nmodule.exports = AdInstance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9BZEluc3RhbmNlLmpzP2Y4ZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsT0FBTztBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0FkSW5zdGFuY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFkSW5zdGFuY2VcclxuICpcclxuICogQHByb3BlcnR5IHthbnl9IGluc3RhbmNlIC0gUmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhbiBhZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlbWVudElEIC0gVGhlIEF1ZGllbmNlIE5ldHdvcmsgcGxhY2VtZW50IElEIG9mIHRoaXMgYWQgaW5zdGFuY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2hvd24gLSBIYXMgdGhpcyBhZCBhbHJlYWR5IGJlZW4gc2hvd24gaW4tZ2FtZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSB2aWRlbyAtIElzIHRoaXMgYSB2aWRlbyBhZD9cclxuICovXHJcblxyXG52YXIgQWRJbnN0YW5jZSA9IGZ1bmN0aW9uIChwbGFjZW1lbnRJRCwgaW5zdGFuY2UsIHZpZGVvKVxyXG57XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcclxuICAgICAgICBwbGFjZW1lbnRJRDogcGxhY2VtZW50SUQsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHZpZGVvOiB2aWRlb1xyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWRJbnN0YW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/AdInstance.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* eslint no-console: 0 */\r\n\r\n/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar AdInstance = __webpack_require__(/*! ./AdInstance */ \"./node_modules/phaser/plugins/fbinstant/src/AdInstance.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DataManager = __webpack_require__(/*! ../../../src/data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Leaderboard = __webpack_require__(/*! ./Leaderboard */ \"./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js\");\r\nvar Product = __webpack_require__(/*! ./Product */ \"./node_modules/phaser/plugins/fbinstant/src/Product.js\");\r\nvar Purchase = __webpack_require__(/*! ./Purchase */ \"./node_modules/phaser/plugins/fbinstant/src/Purchase.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Facebook Instant Games Plugin for Phaser 3 provides a seamless bridge between Phaser\r\n * and the Facebook Instant Games API version 6.2.\r\n * \r\n * You can access this plugin via the `facebook` property in a Scene, i.e:\r\n * \r\n * ```javascript\r\n * this.facebook.getPlatform();\r\n * ```\r\n * \r\n * If this is unavailable please check to make sure you're using a build of Phaser that has\r\n * this plugin within it. You can quickly check this by looking at the dev tools console\r\n * header - the Phaser version number will have `-FB` after it if this plugin is loaded.\r\n *\r\n * If you are building your own version of Phaser then use this Webpack DefinePlugin flag:\r\n * \r\n * `\"typeof PLUGIN_FBINSTANT\": JSON.stringify(true)`\r\n * \r\n * You will find that every Instant Games API method has a mapping in this plugin.\r\n * For a full list please consult either the plugin documentation, or the 6.2 SDK documentation\r\n * at https://developers.facebook.com/docs/games/instant-games/sdk/fbinstant6.2\r\n * \r\n * Internally this plugin uses its own Data Manager to handle seamless user data updates and provides\r\n * handy functions for advertisement displaying, opening share dialogs, logging, leaderboards, purchase API requests,\r\n * loader integration and more.\r\n * \r\n * To get started with Facebook Instant Games you will need to register on Facebook and create a new Instant\r\n * Game app that has its own unique app ID. Facebook have also provided a dashboard interface for setting up\r\n * various features for your game, including leaderboards, ad requests and the payments API. There are lots\r\n * of guides on the Facebook Developers portal to assist with setting these\r\n * various systems up: https://developers.facebook.com/docs/games/instant-games/guides\r\n * \r\n * For more details follow the Quick Start guide here: https://developers.facebook.com/docs/games/instant-games\r\n *\r\n * @class FacebookInstantGamesPlugin\r\n * @memberOf Phaser\r\n * @constructor\r\n * @extends Phaser.Events.EventEmitter\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance.\r\n */\r\nvar FacebookInstantGamesPlugin = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function FacebookInstantGamesPlugin (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Phaser.Game instance.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#game\r\n         * @type {Phaser.Game}\r\n         * @readOnly\r\n         * @since 3.13.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A Data Manager instance.\r\n         * It allows you to store, query and retrieve any key/value data you may need to store.\r\n         * It's also used internally by the plugin to store FBIG API data.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#data\r\n         * @type {Phaser.Data.DataManager}\r\n         * @since 3.13.0\r\n         */\r\n        this.data = new DataManager(this);\r\n\r\n        this.on('setdata', this.setDataHandler, this);\r\n        this.on('changedata', this.changeDataHandler, this);\r\n\r\n        /**\r\n         * Has the Facebook Instant Games API loaded yet?\r\n         * This is set automatically during the boot process.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#hasLoaded\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.hasLoaded = false;\r\n\r\n        /**\r\n         * Is the Data Manager currently locked?\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#dataLocked\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.dataLocked = false;\r\n\r\n        /**\r\n         * A list of the Facebook Instant Games APIs that are available,\r\n         * based on the given platform, context and user privacy settings.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#supportedAPIs\r\n         * @type {string[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.supportedAPIs = [];\r\n\r\n        /**\r\n         * Holds the entry point that the game was launched from.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#entryPoint\r\n         * @type {string}\r\n         * @since 3.13.0\r\n         */\r\n        this.entryPoint = '';\r\n\r\n        /**\r\n         * An object that contains any data associated with the entry point that the game was launched from.\r\n         * The contents of the object are developer-defined, and can occur from entry points on different platforms.\r\n         * This will return null for older mobile clients, as well as when there is no data associated with the particular entry point.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#entryPointData\r\n         * @type {any}\r\n         * @since 3.13.0\r\n         */\r\n        this.entryPointData = null;\r\n\r\n        /**\r\n         * A unique identifier for the current game context. This represents a specific context\r\n         * that the game is being played in (for example, a particular messenger conversation or facebook post).\r\n         * The identifier will be null if game is being played in a solo context.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#contextID\r\n         * @type {string}\r\n         * @since 3.13.0\r\n         */\r\n        this.contextID = null;\r\n\r\n        /**\r\n         * The current context in which your game is running. This can be either `null` or\r\n         * one of:\r\n         * \r\n         * `POST` - The game is running inside of a Facebook post.\r\n         * `THREAD` - The game is running inside a Facebook Messenger thread.\r\n         * `GROUP` - The game is running inside a Facebook Group.\r\n         * `SOLO` - This is the default context, the player is the only participant.\r\n         * \r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#contextType\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.contextType = null;\r\n\r\n        /**\r\n         * The current locale.\r\n         * See https://origincache.facebook.com/developers/resources/?id=FacebookLocales.xml for a complete list of supported locale values.\r\n         * Use this to determine what languages the current game should be localized with.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#locale\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.locale = null;\r\n\r\n        /**\r\n         * The platform on which the game is currently running, i.e. `IOS`.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#platform\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.platform = null;\r\n\r\n        /**\r\n         * The string representation of the Facebook Instant Games SDK version being used.\r\n         * This value is populated automatically during boot.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#version\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.version = null;\r\n\r\n        /**\r\n         * Holds the id of the player. This is a string based ID, the same as `FBInstant.player.getID()`.\r\n         * This value is populated automatically during boot if the API is supported.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#playerID\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.playerID = null;\r\n\r\n        /**\r\n         * The player's localized display name.\r\n         * This value is populated automatically during boot if the API is supported.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#playerName\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.playerName = null;\r\n\r\n        /**\r\n         * A url to the player's public profile photo. The photo will always be a square, and with dimensions\r\n         * of at least 200x200. When rendering it in the game, the exact dimensions should never be assumed to be constant.\r\n         * It's recommended to always scale the image to a desired size before rendering.\r\n         * This value is populated automatically during boot if the API is supported.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#playerPhotoURL\r\n         * @type {?string}\r\n         * @since 3.13.0\r\n         */\r\n        this.playerPhotoURL = null;\r\n\r\n        /**\r\n         * Whether a player can subscribe to the game bot or not.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#playerCanSubscribeBot\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.playerCanSubscribeBot = false;\r\n\r\n        /**\r\n         * Does the current platform and context allow for use of the payments API?\r\n         * Currently this is only available on Facebook.com and Android 6+.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#paymentsReady\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.paymentsReady = false;\r\n\r\n        /**\r\n         * The set of products that are registered to the game.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#catalog\r\n         * @type {Product[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.catalog = [];\r\n\r\n        /**\r\n         * Contains all of the player's unconsumed purchases.\r\n         * The game must fetch the current player's purchases as soon as the client indicates that it is ready to perform payments-related operations,\r\n         * i.e. at game start. The game can then process and consume any purchases that are waiting to be consumed.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#purchases\r\n         * @type {Purchase[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.purchases = [];\r\n\r\n        /**\r\n         * Contains all of the leaderboard data, as populated by the `getLeaderboard()` method.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#leaderboards\r\n         * @type {Phaser.FacebookInstantGamesLeaderboard[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.leaderboards = {};\r\n\r\n        /**\r\n         * Contains AdInstance objects, as created by the `preloadAds()` method.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesPlugin#ads\r\n         * @type {AdInstance[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.ads = [];\r\n    },\r\n\r\n    /**\r\n     * Internal set data handler.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#setDataHandler\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @param {Phaser.Data.DataManager} parent - The parent Data Manager instance.\r\n     * @param {string} key - The key of the data.\r\n     * @param {any} value - The value of the data.\r\n     */\r\n    setDataHandler: function (parent, key, value)\r\n    {\r\n        if (this.dataLocked)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var data = {};\r\n\r\n        data[key] = value;\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.setDataAsync(data).then(function ()\r\n        {\r\n            _this.emit('savedata', data);\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Internal change data handler.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#changeDataHandler\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @param {Phaser.Data.DataManager} parent - The parent Data Manager instance.\r\n     * @param {string} key - The key of the data.\r\n     * @param {any} value - The value of the data.\r\n     */\r\n    changeDataHandler: function (parent, key, value)\r\n    {\r\n        if (this.dataLocked)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var data = {};\r\n\r\n        data[key] = value;\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.setDataAsync(data).then(function ()\r\n        {\r\n            _this.emit('savedata', data);\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Call this method from your `Scene.preload` in order to sync the load progress\r\n     * of the Phaser Loader with the Facebook Instant Games loader display, i.e.:\r\n     * \r\n     * ```javascript\r\n     * this.facebook.showLoadProgress(this);\r\n     * this.facebook.once('startgame', this.startGame, this);\r\n     * ```\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#showLoadProgress\r\n     * @since 3.13.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene for which you want to show loader progress for.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    showLoadProgress: function (scene)\r\n    {\r\n        scene.load.on('progress', function (value)\r\n        {\r\n            if (!this.hasLoaded)\r\n            {\r\n                FBInstant.setLoadingProgress(value * 100);\r\n            }\r\n\r\n        }, this);\r\n\r\n        scene.load.on('complete', function ()\r\n        {\r\n            if (!this.hasLoaded)\r\n            {\r\n                this.hasLoaded = true;\r\n\r\n                FBInstant.startGameAsync().then(this.gameStartedHandler.bind(this));\r\n            }\r\n            \r\n        }, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically when the game has finished loading,\r\n     * if you used the `showLoadProgress` method. If your game doesn't need to\r\n     * load any assets, or you're managing the load yourself, then call this\r\n     * method directly to start the API running.\r\n     * \r\n     * When the API has finished starting this plugin will emit a `startgame` event\r\n     * which you should listen for.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#gameStarted\r\n     * @since 3.13.0\r\n     */\r\n    gameStarted: function ()\r\n    {\r\n        if (!this.hasLoaded)\r\n        {\r\n            this.hasLoaded = true;\r\n\r\n            FBInstant.startGameAsync().then(this.gameStartedHandler.bind(this));\r\n        }\r\n        else\r\n        {\r\n            this.gameStartedHandler();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The internal gameStarted handler.\r\n     * \r\n     * @method Phaser.FacebookInstantGamesPlugin#gameStartedHandler\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    gameStartedHandler: function ()\r\n    {\r\n        var APIs = FBInstant.getSupportedAPIs();\r\n\r\n        var supported = {};\r\n\r\n        var dotToUpper = function (match)\r\n        {\r\n            return match[1].toUpperCase();\r\n        };\r\n\r\n        APIs.forEach(function (api)\r\n        {\r\n            api = api.replace(/\\../g, dotToUpper);\r\n\r\n            supported[api] = true;\r\n        });\r\n\r\n        this.supportedAPIs = supported;\r\n\r\n        this.getID();\r\n        this.getType();\r\n        this.getLocale();\r\n        this.getPlatform();\r\n        this.getSDKVersion();\r\n\r\n        this.getPlayerID();\r\n        this.getPlayerName();\r\n        this.getPlayerPhotoURL();\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.onPause(function ()\r\n        {\r\n            _this.emit('pause');\r\n        });\r\n\r\n        FBInstant.getEntryPointAsync().then(function (entrypoint)\r\n        {\r\n            _this.entryPoint = entrypoint;\r\n            _this.entryPointData = FBInstant.getEntryPointData();\r\n\r\n            _this.emit('startgame');\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        //  Facebook.com and Android 6 only\r\n        if (this.supportedAPIs.paymentsPurchaseAsync)\r\n        {\r\n            FBInstant.payments.onReady(function ()\r\n            {\r\n                _this.paymentsReady = true;\r\n\r\n            }).catch(function (e)\r\n            {\r\n                console.warn(e);\r\n            });\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks to see if a given Facebook Instant Games API is available or not.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#checkAPI\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} api - The API to check for, i.e. `player.getID`.\r\n     * \r\n     * @return {boolean} `true` if the API is supported, otherwise `false`.\r\n     */\r\n    checkAPI: function (api)\r\n    {\r\n        if (!this.supportedAPIs[api])\r\n        {\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return true;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns the unique identifier for the current game context. This represents a specific context\r\n     * that the game is being played in (for example, a particular messenger conversation or facebook post).\r\n     * The identifier will be null if game is being played in a solo context.\r\n     * \r\n     * It is only populated if `contextGetID` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getID\r\n     * @since 3.13.0\r\n     * \r\n     * @return {string} The context ID.\r\n     */\r\n    getID: function ()\r\n    {\r\n        if (!this.contextID && this.supportedAPIs.contextGetID)\r\n        {\r\n            this.contextID = FBInstant.context.getID();\r\n        }\r\n\r\n        return this.contextID;\r\n    },\r\n\r\n    /**\r\n     * Returns the current context in which your game is running. This can be either `null` or one of:\r\n     * \r\n     * `POST` - The game is running inside of a Facebook post.\r\n     * `THREAD` - The game is running inside a Facebook Messenger thread.\r\n     * `GROUP` - The game is running inside a Facebook Group.\r\n     * `SOLO` - This is the default context, the player is the only participant.\r\n     * \r\n     * It is only populated if `contextGetType` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getType\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The context type.\r\n     */\r\n    getType: function ()\r\n    {\r\n        if (!this.contextType && this.supportedAPIs.contextGetType)\r\n        {\r\n            this.contextType = FBInstant.context.getType();\r\n        }\r\n\r\n        return this.contextType;\r\n    },\r\n\r\n    /**\r\n     * Returns the current locale.\r\n     * See https://origincache.facebook.com/developers/resources/?id=FacebookLocales.xml for a complete list of supported locale values.\r\n     * Use this to determine what languages the current game should be localized with.\r\n     * It is only populated if `getLocale` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getLocale\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The current locale.\r\n     */\r\n    getLocale: function ()\r\n    {\r\n        if (!this.locale && this.supportedAPIs.getLocale)\r\n        {\r\n            this.locale = FBInstant.getLocale();\r\n        }\r\n\r\n        return this.locale;\r\n    },\r\n\r\n    /**\r\n     * Returns the platform on which the game is currently running, i.e. `IOS`.\r\n     * It is only populated if `getPlatform` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPlatform\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The current platform.\r\n     */\r\n    getPlatform: function ()\r\n    {\r\n        if (!this.platform && this.supportedAPIs.getPlatform)\r\n        {\r\n            this.platform = FBInstant.getPlatform();\r\n        }\r\n\r\n        return this.platform;\r\n    },\r\n\r\n    /**\r\n     * Returns the string representation of the Facebook Instant Games SDK version being used.\r\n     * It is only populated if `getSDKVersion` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getSDKVersion\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The sdk version.\r\n     */\r\n    getSDKVersion: function ()\r\n    {\r\n        if (!this.version && this.supportedAPIs.getSDKVersion)\r\n        {\r\n            this.version = FBInstant.getSDKVersion();\r\n        }\r\n\r\n        return this.version;\r\n    },\r\n\r\n    /**\r\n     * Returns the id of the player. This is a string based ID, the same as `FBInstant.player.getID()`.\r\n     * It is only populated if `playerGetID` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPlayerID\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The player ID.\r\n     */\r\n    getPlayerID: function ()\r\n    {\r\n        if (!this.playerID && this.supportedAPIs.playerGetID)\r\n        {\r\n            this.playerID = FBInstant.player.getID();\r\n        }\r\n\r\n        return this.playerID;\r\n    },\r\n\r\n    /**\r\n     * Returns the player's localized display name.\r\n     * It is only populated if `playerGetName` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPlayerName\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The player's localized display name.\r\n     */\r\n    getPlayerName: function ()\r\n    {\r\n        if (!this.playerName && this.supportedAPIs.playerGetName)\r\n        {\r\n            this.playerName = FBInstant.player.getName();\r\n        }\r\n\r\n        return this.playerName;\r\n    },\r\n\r\n    /**\r\n     * Returns the url to the player's public profile photo. The photo will always be a square, and with dimensions\r\n     * of at least 200x200. When rendering it in the game, the exact dimensions should never be assumed to be constant.\r\n     * It's recommended to always scale the image to a desired size before rendering.\r\n     * It is only populated if `playerGetPhoto` is in the list of supported APIs.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPlayerPhotoURL\r\n     * @since 3.13.0\r\n     * \r\n     * @return {?string} The player's photo url.\r\n     */\r\n    getPlayerPhotoURL: function ()\r\n    {\r\n        if (!this.playerPhotoURL && this.supportedAPIs.playerGetPhoto)\r\n        {\r\n            this.playerPhotoURL = FBInstant.player.getPhoto();\r\n        }\r\n\r\n        return this.playerPhotoURL;\r\n    },\r\n\r\n    /**\r\n     * Load the player's photo and store it in the Texture Manager, ready for use in-game.\r\n     * \r\n     * This method works by using a Scene Loader instance and then asking the Loader to\r\n     * retrieve the image.\r\n     * \r\n     * When complete the plugin will emit a `photocomplete` event, along with the key of the photo.\r\n     * \r\n     * ```javascript\r\n     * this.facebook.loadPlayerPhoto(this, 'player').once('photocomplete', function (key) {\r\n     *   this.add.image(x, y, 'player');\r\n     * }, this);\r\n     * ```\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#loadPlayerPhoto\r\n     * @since 3.13.0\r\n     * \r\n     * @param {Phaser.Scene} scene - The Scene that will be responsible for loading this photo.\r\n     * @param {string} key - The key to use when storing the photo in the Texture Manager.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    loadPlayerPhoto: function (scene, key)\r\n    {\r\n        if (this.playerPhotoURL)\r\n        {\r\n            scene.load.setCORS('anonymous');\r\n    \r\n            scene.load.image(key, this.playerPhotoURL);\r\n    \r\n            scene.load.once('filecomplete-image-' + key, function ()\r\n            {\r\n                this.emit('photocomplete', key);\r\n\r\n            }, this);\r\n    \r\n            scene.load.start();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if the current player can subscribe to the game bot.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they can subscribe, the `playerCanSubscribeBot` property is set to `true`\r\n     * and this plugin will emit the `cansubscribebot` event.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `cansubscribebotfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#canSubscribeBot\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    canSubscribeBot: function ()\r\n    {\r\n        if (this.supportedAPIs.playerCanSubscribeBotAsync)\r\n        {\r\n            var _this = this;\r\n\r\n            FBInstant.player.canSubscribeBotAsync().then(function ()\r\n            {\r\n                _this.playerCanSubscribeBot = true;\r\n\r\n                _this.emit('cansubscribebot');\r\n\r\n            }).catch(function (e)\r\n            {\r\n                _this.emit('cansubscribebotfail', e);\r\n            });\r\n        }\r\n        else\r\n        {\r\n            this.emit('cansubscribebotfail');\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Subscribes the current player to the game bot.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `subscribebot` event.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `subscribebotfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#subscribeBot\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    subscribeBot: function ()\r\n    {\r\n        if (this.playerCanSubscribeBot)\r\n        {\r\n            var _this = this;\r\n\r\n            FBInstant.player.subscribeBotAsync().then(function ()\r\n            {\r\n                _this.emit('subscribebot');\r\n\r\n            }).catch(function (e)\r\n            {\r\n                _this.emit('subscribebotfail', e);\r\n            });\r\n        }\r\n        else\r\n        {\r\n            this.emit('subscribebotfail');\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the associated data from the player based on the given key, or array of keys.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes the data is set into this plugins Data Manager and the\r\n     * `getdata` event will be emitted.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getData\r\n     * @since 3.13.0\r\n     * \r\n     * @param {(string|string[])} keys - The key/s of the data to retrieve.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getData: function (keys)\r\n    {\r\n        if (!this.checkAPI('playerGetDataAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (!Array.isArray(keys))\r\n        {\r\n            keys = [ keys ];\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.getDataAsync(keys).then(function (data)\r\n        {\r\n            _this.dataLocked = true;\r\n\r\n            for (var key in data)\r\n            {\r\n                _this.data.set(key, data[key]);\r\n            }\r\n\r\n            _this.dataLocked = false;\r\n\r\n            _this.emit('getdata', data);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set data to be saved to the designated cloud storage of the current player. The game can store up to 1MB of data for each unique player.\r\n     * \r\n     * The data save is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * Data managed via this plugins Data Manager instance is automatically synced with Facebook. However, you can call this\r\n     * method directly if you need to replace the data object directly.\r\n     * \r\n     * When the APIs `setDataAsync` call resolves it will emit the `savedata` event from this plugin. If the call fails for some\r\n     * reason it will emit `savedatafail` instead.\r\n     * \r\n     * The call resolving does not necessarily mean that the input has already been persisted. Rather, it means that the data was valid and\r\n     * has been scheduled to be saved. It also guarantees that all values that were set are now available in `getData`.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#saveData\r\n     * @since 3.13.0\r\n     * \r\n     * @param {object} data - An object containing a set of key-value pairs that should be persisted to cloud storage.\r\n     * The object must contain only serializable values - any non-serializable values will cause the entire modification to be rejected.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    saveData: function (data)\r\n    {\r\n        if (!this.checkAPI('playerSetDataAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.setDataAsync(data).then(function ()\r\n        {\r\n            _this.emit('savedata', data);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('savedatafail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Immediately flushes any changes to the player data to the designated cloud storage.\r\n     * This function is expensive, and should primarily be used for critical changes where persistence needs to be immediate\r\n     * and known by the game. Non-critical changes should rely on the platform to persist them in the background.\r\n     * NOTE: Calls to player.setDataAsync will be rejected while this function's result is pending.\r\n     * \r\n     * Data managed via this plugins Data Manager instance is automatically synced with Facebook. However, you can call this\r\n     * method directly if you need to flush the data directly.\r\n     * \r\n     * When the APIs `flushDataAsync` call resolves it will emit the `flushdata` event from this plugin. If the call fails for some\r\n     * reason it will emit `flushdatafail` instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#flushData\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    flushData: function ()\r\n    {\r\n        if (!this.checkAPI('playerFlushDataAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.flushDataAsync().then(function ()\r\n        {\r\n            _this.emit('flushdata');\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('flushdatafail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieve stats from the designated cloud storage of the current player.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes the `getstats` event will be emitted along with the data object returned.\r\n     * \r\n     * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n     * it will emit a `getstatsfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getStats\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string[]} [keys] - An optional array of unique keys to retrieve stats for. If the function is called without it, it will fetch all stats.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getStats: function (keys)\r\n    {\r\n        if (!this.checkAPI('playerGetStatsAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.getStatsAsync(keys).then(function (data)\r\n        {\r\n            _this.emit('getstats', data);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('getstatsfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Save the stats of the current player to the designated cloud storage.\r\n     * \r\n     * Stats in the Facebook Instant Games API are purely numerical values paired with a string-based key. Only numbers can be saved as stats,\r\n     * all other data types will be ignored.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes the `savestats` event will be emitted along with the data object returned.\r\n     * \r\n     * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n     * it will emit a `savestatsfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#saveStats\r\n     * @since 3.13.0\r\n     * \r\n     * @param {object} data - An object containing a set of key-value pairs that should be persisted to cloud storage as stats. Note that only numerical values are stored.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    saveStats: function (data)\r\n    {\r\n        if (!this.checkAPI('playerSetStatsAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var output = {};\r\n\r\n        for (var key in data)\r\n        {\r\n            if (typeof data[key] === 'number')\r\n            {\r\n                output[key] = data[key];\r\n            }\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.setStatsAsync(output).then(function ()\r\n        {\r\n            _this.emit('savestats', output);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('savestatsfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Increment the stats of the current player and save them to the designated cloud storage.\r\n     * \r\n     * Stats in the Facebook Instant Games API are purely numerical values paired with a string-based key. Only numbers can be saved as stats,\r\n     * all other data types will be ignored.\r\n     * \r\n     * The data object provided for this call should contain offsets for how much to modify the stats by:\r\n     * \r\n     * ```javascript\r\n     * this.facebook.incStats({\r\n     *     level: 1,\r\n     *     zombiesSlain: 17,\r\n     *     rank: -1\r\n     * });\r\n     * ```\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes the `incstats` event will be emitted along with the data object returned.\r\n     * \r\n     * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n     * it will emit a `incstatsfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#incStats\r\n     * @since 3.13.0\r\n     * \r\n     * @param {object} data - An object containing a set of key-value pairs indicating how much to increment each stat in cloud storage. Note that only numerical values are processed.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    incStats: function (data)\r\n    {\r\n        if (!this.checkAPI('playerIncrementStatsAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var output = {};\r\n\r\n        for (var key in data)\r\n        {\r\n            if (typeof data[key] === 'number')\r\n            {\r\n                output[key] = data[key];\r\n            }\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.incrementStatsAsync(output).then(function (stats)\r\n        {\r\n            _this.emit('incstats', stats);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('incstatsfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the data associated with the individual gameplay session for the current context.\r\n     * \r\n     * This function should be called whenever the game would like to update the current session data.\r\n     * \r\n     * This session data may be used to populate a variety of payloads, such as game play webhooks.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#saveSession\r\n     * @since 3.13.0\r\n     * \r\n     * @param {object} data - An arbitrary data object, which must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    saveSession: function (data)\r\n    {\r\n        if (!this.checkAPI('setSessionData'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var test = JSON.stringify(data);\r\n\r\n        if (test.length <= 1000)\r\n        {\r\n            FBInstant.setSessionData(data);\r\n        }\r\n        else\r\n        {\r\n            console.warn('Session data too long. Max 1000 chars.');\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n     * \r\n     * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n     * \r\n     * This data must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n     * \r\n     * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#openShare\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} text - A text message to be shared.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {object} [sessionData] - A blob of data to attach to the share.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    openShare: function (text, key, frame, sessionData)\r\n    {\r\n        return this._share('SHARE', text, key, frame, sessionData);\r\n    },\r\n\r\n    /**\r\n     * This invokes a dialog to let the user invite a friend to play this game, either as a message in Messenger or as a post on the user's timeline.\r\n     * \r\n     * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n     * \r\n     * This data must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n     * \r\n     * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#openInvite\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} text - A text message to be shared.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {object} [sessionData] - A blob of data to attach to the share.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    openInvite: function (text, key, frame, sessionData)\r\n    {\r\n        return this._share('INVITE', text, key, frame, sessionData);\r\n    },\r\n\r\n    /**\r\n     * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n     * \r\n     * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n     * \r\n     * This data must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n     * \r\n     * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#openRequest\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} text - A text message to be shared.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {object} [sessionData] - A blob of data to attach to the share.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    openRequest: function (text, key, frame, sessionData)\r\n    {\r\n        return this._share('REQUEST', text, key, frame, sessionData);\r\n    },\r\n\r\n    /**\r\n     * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n     * \r\n     * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n     * \r\n     * This data must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n     * \r\n     * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#openChallenge\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} text - A text message to be shared.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {object} [sessionData] - A blob of data to attach to the share.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    openChallenge: function (text, key, frame, sessionData)\r\n    {\r\n        return this._share('CHALLENGE', text, key, frame, sessionData);\r\n    },\r\n\r\n    /**\r\n     * Internal share handler.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#_share\r\n     * @private\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} intent - (\"INVITE\" | \"REQUEST\" | \"CHALLENGE\" | \"SHARE\") Indicates the intent of the share.\r\n     * @param {string} text - A text message to be shared.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {object} [sessionData] - A blob of data to attach to the share.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    _share: function (intent, text, key, frame, sessionData)\r\n    {\r\n        if (!this.checkAPI('shareAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (sessionData === undefined) { sessionData = {}; }\r\n\r\n        if (key)\r\n        {\r\n            var imageData = this.game.textures.getBase64(key, frame);\r\n        }\r\n\r\n        // intent (\"INVITE\" | \"REQUEST\" | \"CHALLENGE\" | \"SHARE\") Indicates the intent of the share.\r\n        // image string A base64 encoded image to be shared.\r\n        // text string A text message to be shared.\r\n        // data Object? A blob of data to attach to the share. All game sessions launched from the share will be able to access this blob through FBInstant.getEntryPointData().\r\n\r\n        var payload = {\r\n            intent: intent,\r\n            image: imageData,\r\n            text: text,\r\n            data: sessionData\r\n        };\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.shareAsync(payload).then(function ()\r\n        {\r\n            _this.emit('resume');\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This function determines whether the number of participants in the current game context is between a given minimum and maximum, inclusive.\r\n     * If one of the bounds is null only the other bound will be checked against.\r\n     * It will always return the original result for the first call made in a context in a given game play session.\r\n     * Subsequent calls, regardless of arguments, will return the answer to the original query until a context change occurs and the query result is reset.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#isSizeBetween\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} [min] - The minimum bound of the context size query.\r\n     * @param {integer} [max] - The maximum bound of the context size query.\r\n     * \r\n     * @return {object} The Context Size Response object in the format: `{answer: boolean, minSize: number?, maxSize: number?}`.\r\n     */\r\n    isSizeBetween: function (min, max)\r\n    {\r\n        if (!this.checkAPI('contextIsSizeBetween'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        return FBInstant.context.isSizeBetween(min, max);\r\n    },\r\n\r\n    /**\r\n     * Request a switch into a specific context. If the player does not have permission to enter that context,\r\n     * or if the player does not provide permission for the game to enter that context, this will emit a `switchfail` event.\r\n     * \r\n     * Otherwise, the plugin will emit the `switch` event when the game has switched into the specified context.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#switchContext\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} contextID - The ID of the desired context.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    switchContext: function (contextID)\r\n    {\r\n        if (!this.checkAPI('contextSwitchAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (contextID !== this.contextID)\r\n        {\r\n            var _this = this;\r\n\r\n            FBInstant.context.switchAsync(contextID).then(function ()\r\n            {\r\n                _this.contextID = FBInstant.context.getID();\r\n\r\n                _this.emit('switch', _this.contextID);\r\n\r\n            }).catch(function (e)\r\n            {\r\n                _this.emit('switchfail', e);\r\n            });\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * A filter that may be applied to a Context Choose operation.\r\n     * \r\n     * 'NEW_CONTEXT_ONLY' - Prefer to only surface contexts the game has not been played in before.\r\n     * 'INCLUDE_EXISTING_CHALLENGES' - Include the \"Existing Challenges\" section, which surfaces actively played-in contexts that the player is a part of.\r\n     * 'NEW_PLAYERS_ONLY' - In sections containing individuals, prefer people who have not played the game.\r\n     * \r\n     * @typedef {string} ContextFilter\r\n     */\r\n\r\n    /**\r\n     * A configuration object that may be applied to a Context Choose operation.\r\n     * \r\n     * @typedef {object} ChooseContextConfig\r\n     * @property {ContextFilter[]} [filters] - The set of filters to apply to the context suggestions: 'NEW_CONTEXT_ONLY', 'INCLUDE_EXISTING_CHALLENGES' or 'NEW_PLAYERS_ONLY'.\r\n     * @property {number} [maxSize] - The maximum number of participants that a suggested context should ideally have.\r\n     * @property {number} [minSize] - The minimum number of participants that a suggested context should ideally have.\r\n     */\r\n\r\n    /**\r\n     * Opens a context selection dialog for the player. If the player selects an available context,\r\n     * the client will attempt to switch into that context, and emit the `choose` event if successful.\r\n     * Otherwise, if the player exits the menu or the client fails to switch into the new context, the `choosefail` event will be emitted.\r\n     * \r\n     * @method Phaser.FacebookInstantGamesPlugin#chooseContext\r\n     * @since 3.13.0\r\n     * \r\n     * @param {ChooseContextConfig} [options] - An object specifying conditions on the contexts that should be offered.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    chooseContext: function (options)\r\n    {\r\n        if (!this.checkAPI('contextChooseAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.context.chooseAsync(options).then(function ()\r\n        {\r\n            _this.contextID = FBInstant.context.getID();\r\n            _this.emit('choose', _this.contextID);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('choosefail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Attempts to create or switch into a context between a specified player and the current player.\r\n     * This plugin will emit the `create` event once the context switch is completed.\r\n     * If the API call fails, such as if the player listed is not a Connected Player of the current player or if the\r\n     * player does not provide permission to enter the new context, then the plugin will emit a 'createfail' event.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#createContext\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} playerID - ID of the player.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    createContext: function (playerID)\r\n    {\r\n        if (!this.checkAPI('contextCreateAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.context.createAsync(playerID).then(function ()\r\n        {\r\n            _this.contextID = FBInstant.context.getID();\r\n            _this.emit('create', _this.contextID);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('createfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fetches an array of ConnectedPlayer objects containing information about active players\r\n     * (people who played the game in the last 90 days) that are connected to the current player.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `players` event along\r\n     * with the player data.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `playersfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPlayers\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getPlayers: function ()\r\n    {\r\n        if (!this.checkAPI('playerGetConnectedPlayersAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.player.getConnectedPlayersAsync().then(function (players)\r\n        {\r\n            _this.emit('players', players);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('playersfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fetches the game's product catalog.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `getcatalog` event along\r\n     * with the catalog data.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `getcatalogfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getCatalog\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getCatalog: function ()\r\n    {\r\n        if (!this.paymentsReady)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n        var catalog = this.catalog;\r\n\r\n        FBInstant.payments.getCatalogAsync().then(function (data)\r\n        {\r\n            catalog = [];\r\n\r\n            data.forEach(function (item)\r\n            {\r\n                catalog.push(Product(item));\r\n            });\r\n\r\n            _this.emit('getcatalog', catalog);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('getcatalogfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fetches a single Product from the game's product catalog.\r\n     * \r\n     * The product catalog must have been populated using `getCatalog` prior to calling this method.\r\n     * \r\n     * Use this to look-up product details based on a purchase list.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getProduct\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} productID - The Product ID of the item to get from the catalog.\r\n     * \r\n     * @return {?Product} The Product from the catalog, or `null` if it couldn't be found or the catalog isn't populated.\r\n     */\r\n    getProduct: function (productID)\r\n    {\r\n        for (var i = 0; i < this.catalog.length; i++)\r\n        {\r\n            if (this.catalog[i].productID === productID)\r\n            {\r\n                return this.catalog[i];\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Begins the purchase flow for a specific product.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `purchase` event along\r\n     * with the purchase data.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `purchasefail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#purchase\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} productID - The identifier of the product to purchase.\r\n     * @param {string} [developerPayload] - An optional developer-specified payload, to be included in the returned purchase's signed request.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    purchase: function (productID, developerPayload)\r\n    {\r\n        if (!this.paymentsReady)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var config = {productID: productID};\r\n\r\n        if (developerPayload)\r\n        {\r\n            config.developerPayload = developerPayload;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.payments.purchaseAsync(config).then(function (data)\r\n        {\r\n            var purchase = Purchase(data);\r\n\r\n            _this.emit('purchase', purchase);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('purchasefail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fetches all of the player's unconsumed purchases. The game must fetch the current player's purchases\r\n     * as soon as the client indicates that it is ready to perform payments-related operations,\r\n     * i.e. at game start. The game can then process and consume any purchases that are waiting to be consumed.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `getpurchases` event along\r\n     * with the purchase data.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `getpurchasesfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getPurchases\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getPurchases: function ()\r\n    {\r\n        if (!this.paymentsReady)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n        var purchases = this.purchases;\r\n\r\n        FBInstant.payments.getPurchasesAsync().then(function (data)\r\n        {\r\n            purchases = [];\r\n\r\n            data.forEach(function (item)\r\n            {\r\n                purchases.push(Purchase(item));\r\n            });\r\n\r\n            _this.emit('getpurchases', purchases);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('getpurchasesfail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Consumes a specific purchase belonging to the current player. Before provisioning a product's effects to the player,\r\n     * the game should request the consumption of the purchased product. Once the purchase is successfully consumed,\r\n     * the game should immediately provide the player with the effects of their purchase.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If they are successfully subscribed this plugin will emit the `consumepurchase` event along\r\n     * with the purchase data.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `consumepurchasefail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#consumePurchase\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} purchaseToken - The purchase token of the purchase that should be consumed.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    consumePurchase: function (purchaseToken)\r\n    {\r\n        if (!this.paymentsReady)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.payments.consumePurchaseAsync(purchaseToken).then(function ()\r\n        {\r\n            _this.emit('consumepurchase', purchaseToken);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('consumepurchasefail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Informs Facebook of a custom update that occurred in the game.\r\n     * This will temporarily yield control to Facebook and Facebook will decide what to do based on what the update is.\r\n     * Once Facebook returns control to the game the plugin will emit an `update` or `updatefail` event.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * The `text` parameter is an update payload with the following structure:\r\n     * \r\n     * ```\r\n     * text: {\r\n     *     default: 'X just invaded Y\\'s village!',\r\n     *     localizations: {\r\n     *         ar_AR: 'X \\u0641\\u0642\\u0637 \\u063A\\u0632\\u062A ' +\r\n     *         '\\u0642\\u0631\\u064A\\u0629 Y!',\r\n     *         en_US: 'X just invaded Y\\'s village!',\r\n     *         es_LA: '\\u00A1X acaba de invadir el pueblo de Y!',\r\n     *     }\r\n     * }\r\n     * ```\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#update\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} cta - The call to action text.\r\n     * @param {object} text - The text object.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {string} template - The update template key.\r\n     * @param {object} updateData - The update data object payload.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    update: function (cta, text, key, frame, template, updateData)\r\n    {\r\n        return this._update('CUSTOM', cta, text, key, frame, template, updateData);\r\n    },\r\n\r\n    /**\r\n     * Informs Facebook of a leaderboard update that occurred in the game.\r\n     * This will temporarily yield control to Facebook and Facebook will decide what to do based on what the update is.\r\n     * Once Facebook returns control to the game the plugin will emit an `update` or `updatefail` event.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * The `text` parameter is an update payload with the following structure:\r\n     * \r\n     * ```\r\n     * text: {\r\n     *     default: 'X just invaded Y\\'s village!',\r\n     *     localizations: {\r\n     *         ar_AR: 'X \\u0641\\u0642\\u0637 \\u063A\\u0632\\u062A ' +\r\n     *         '\\u0642\\u0631\\u064A\\u0629 Y!',\r\n     *         en_US: 'X just invaded Y\\'s village!',\r\n     *         es_LA: '\\u00A1X acaba de invadir el pueblo de Y!',\r\n     *     }\r\n     * }\r\n     * ```\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#updateLeaderboard\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} cta - The call to action text.\r\n     * @param {object} text - The text object.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {string} template - The update template key.\r\n     * @param {object} updateData - The update data object payload.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    updateLeaderboard: function (cta, text, key, frame, template, updateData)\r\n    {\r\n        return this._update('LEADERBOARD', cta, text, key, frame, template, updateData);\r\n    },\r\n\r\n    /**\r\n     * Internal update handler.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#_update\r\n     * @private\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} action - The update action.\r\n     * @param {string} cta - The call to action text.\r\n     * @param {object} text - The text object.\r\n     * @param {string} key - The key of the texture to use as the share image.\r\n     * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n     * @param {string} template - The update template key.\r\n     * @param {object} updateData - The update data object payload.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    _update: function (action, cta, text, key, frame, template, updateData)\r\n    {\r\n        if (!this.checkAPI('shareAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (cta === undefined) { cta = ''; }\r\n\r\n        if (typeof text === 'string')\r\n        {\r\n            text = {default: text};\r\n        }\r\n\r\n        if (updateData === undefined) { updateData = {}; }\r\n\r\n        if (key)\r\n        {\r\n            var imageData = this.game.textures.getBase64(key, frame);\r\n        }\r\n\r\n        var payload = {\r\n            action: action,\r\n            cta: cta,\r\n            image: imageData,\r\n            text: text,\r\n            template: template,\r\n            data: updateData,\r\n            strategy: 'IMMEDIATE',\r\n            notification: 'NO_PUSH'\r\n        };\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.updateAsync(payload).then(function ()\r\n        {\r\n            _this.emit('update');\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('updatefail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Request that the client switch to a different Instant Game.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If the game switches successfully this plugin will emit the `switchgame` event and the client will load the new game.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `switchgamefail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#switchGame\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} appID - The Application ID of the Instant Game to switch to. The application must be an Instant Game, and must belong to the same business as the current game.\r\n     * @param {object} [data] - An optional data payload. This will be set as the entrypoint data for the game being switched to. Must be less than or equal to 1000 characters when stringified.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    switchGame: function (appID, data)\r\n    {\r\n        if (!this.checkAPI('switchGameAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (data)\r\n        {\r\n            var test = JSON.stringify(data);\r\n\r\n            if (test.length > 1000)\r\n            {\r\n                console.warn('Switch Game data too long. Max 1000 chars.');\r\n                return this;\r\n            }\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.switchGameAsync(appID, data).then(function ()\r\n        {\r\n            _this.emit('switchgame', appID);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            _this.emit('switchgamefail', e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Prompts the user to create a shortcut to the game if they are eligible to.\r\n     * Can only be called once per session.\r\n     * \r\n     * It makes an async call to the API, so the result isn't available immediately.\r\n     * \r\n     * If the user choose to create a shortcut this plugin will emit the `shortcutcreated` event.\r\n     * \r\n     * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n     * was rejected, it will emit a `shortcutcreatedfail` event instead.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#createShortcut\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    createShortcut: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        FBInstant.canCreateShortcutAsync().then(function (canCreateShortcut)\r\n        {\r\n            if (canCreateShortcut)\r\n            {\r\n                FBInstant.createShortcutAsync().then(function ()\r\n                {\r\n                    _this.emit('shortcutcreated');\r\n\r\n                }).catch(function (e)\r\n                {\r\n                    _this.emit('shortcutfailed', e);\r\n                });\r\n            }\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Quits the game.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#quit\r\n     * @since 3.13.0\r\n     */\r\n    quit: function ()\r\n    {\r\n        FBInstant.quit();\r\n    },\r\n\r\n    /**\r\n     * Log an app event with FB Analytics.\r\n     * \r\n     * See https://developers.facebook.com/docs/javascript/reference/v2.8#app_events for more details about FB Analytics.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#log\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} name - Name of the event. Must be 2 to 40 characters, and can only contain '_', '-', ' ', and alphanumeric characters.\r\n     * @param {number} [value] - An optional numeric value that FB Analytics can calculate a sum with.\r\n     * @param {object} [params] - An optional object that can contain up to 25 key-value pairs to be logged with the event. Keys must be 2 to 40 characters, and can only contain '_', '-', ' ', and alphanumeric characters. Values must be less than 100 characters in length.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    log: function (name, value, params)\r\n    {\r\n        if (!this.checkAPI('logEvent'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (params === undefined) { params = {}; }\r\n\r\n        if (name.length >= 2 && name.length <= 40)\r\n        {\r\n            FBInstant.logEvent(name, parseFloat(value), params);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Attempt to create an instance of an interstitial ad.\r\n     * \r\n     * If the instance is created successfully then the ad is preloaded ready for display in-game via the method `showAd()`.\r\n     * \r\n     * If the ad loads it will emit the `adloaded` event, passing the AdInstance as the only parameter.\r\n     * \r\n     * If the ad cannot be displayed because there was no inventory to fill it, it will emit the `adsnofill` event.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#preloadAds\r\n     * @since 3.13.0\r\n     * \r\n     * @param {(string|string[])} placementID - The ad placement ID, or an array of IDs, as created in your Audience Network settings within Facebook.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    preloadAds: function (placementID)\r\n    {\r\n        if (!this.checkAPI('getInterstitialAdAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (!Array.isArray(placementID))\r\n        {\r\n            placementID = [ placementID ];\r\n        }\r\n\r\n        var i;\r\n        var _this = this;\r\n\r\n        var total = 0;\r\n\r\n        for (i = 0; i < this.ads.length; i++)\r\n        {\r\n            if (!this.ads[i].shown)\r\n            {\r\n                total++;\r\n            }\r\n        }\r\n\r\n        if (total + placementID.length >= 3)\r\n        {\r\n            console.warn('Too many AdInstances. Show an ad before loading more');\r\n            return this;\r\n        }\r\n\r\n        for (i = 0; i < placementID.length; i++)\r\n        {\r\n            var id = placementID[i];\r\n            var data;\r\n\r\n            FBInstant.getInterstitialAdAsync(id).then(function (interstitial)\r\n            {\r\n                data = interstitial;\r\n\r\n                return interstitial.loadAsync();\r\n\r\n            }).then(function ()\r\n            {\r\n                var ad = AdInstance(id, data, false);\r\n\r\n                _this.ads.push(ad);\r\n\r\n                _this.emit('adloaded', ad);\r\n\r\n            }).catch(function (e)\r\n            {\r\n                if (e.code === 'ADS_NO_FILL')\r\n                {\r\n                    _this.emit('adsnofill', id);\r\n                }\r\n                else if (e.code === 'ADS_FREQUENT_LOAD')\r\n                {\r\n                    _this.emit('adsfrequentload', id);\r\n                }\r\n                else\r\n                {\r\n                    console.warn(e);\r\n                }\r\n            });\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Attempt to create an instance of an rewarded video ad.\r\n     * \r\n     * If the instance is created successfully then the ad is preloaded ready for display in-game via the method `showVideo()`.\r\n     * \r\n     * If the ad loads it will emit the `adloaded` event, passing the AdInstance as the only parameter.\r\n     * \r\n     * If the ad cannot be displayed because there was no inventory to fill it, it will emit the `adsnofill` event.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#preloadVideoAds\r\n     * @since 3.13.0\r\n     * \r\n     * @param {(string|string[])} placementID - The ad placement ID, or an array of IDs, as created in your Audience Network settings within Facebook.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    preloadVideoAds: function (placementID)\r\n    {\r\n        if (!this.checkAPI('getRewardedVideoAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (!Array.isArray(placementID))\r\n        {\r\n            placementID = [ placementID ];\r\n        }\r\n\r\n        var i;\r\n        var _this = this;\r\n\r\n        var total = 0;\r\n\r\n        for (i = 0; i < this.ads.length; i++)\r\n        {\r\n            if (!this.ads[i].shown)\r\n            {\r\n                total++;\r\n            }\r\n        }\r\n\r\n        if (total + placementID.length >= 3)\r\n        {\r\n            console.warn('Too many AdInstances. Show an ad before loading more');\r\n            return this;\r\n        }\r\n\r\n        for (i = 0; i < placementID.length; i++)\r\n        {\r\n            var id = placementID[i];\r\n            var data;\r\n\r\n            FBInstant.getRewardedVideoAsync(id).then(function (reward)\r\n            {\r\n                data = reward;\r\n\r\n                return reward.loadAsync();\r\n\r\n            }).then(function ()\r\n            {\r\n                var ad = AdInstance(id, data, true);\r\n\r\n                _this.ads.push(ad);\r\n\r\n                _this.emit('adloaded', ad);\r\n\r\n            }).catch(function (e)\r\n            {\r\n                if (e.code === 'ADS_NO_FILL')\r\n                {\r\n                    _this.emit('adsnofill', id);\r\n                }\r\n                else if (e.code === 'ADS_FREQUENT_LOAD')\r\n                {\r\n                    _this.emit('adsfrequentload', id);\r\n                }\r\n                else\r\n                {\r\n                    console.warn(e);\r\n                }\r\n            });\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Displays a previously loaded interstitial ad.\r\n     * \r\n     * If the ad is successfully displayed this plugin will emit the `adfinished` event, with the AdInstance object as its parameter.\r\n     * \r\n     * If the ad cannot be displayed, it will emit the `adsnotloaded` event.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#showAd\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} placementID - The ad placement ID to display.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    showAd: function (placementID)\r\n    {\r\n        var _this = this;\r\n\r\n        for (var i = 0; i < this.ads.length; i++)\r\n        {\r\n            var ad = this.ads[i];\r\n\r\n            if (ad.placementID === placementID && !ad.shown)\r\n            {\r\n                ad.instance.showAsync().then(function ()\r\n                {\r\n                    ad.shown = true;\r\n\r\n                    _this.emit('adfinished', ad);\r\n\r\n                }).catch(function (e)\r\n                {\r\n                    if (e.code === 'ADS_NOT_LOADED')\r\n                    {\r\n                        _this.emit('adsnotloaded', ad);\r\n                    }\r\n                    else if (e.code === 'RATE_LIMITED')\r\n                    {\r\n                        _this.emit('adratelimited', ad);\r\n                    }\r\n                    \r\n                    _this.emit('adshowerror', e, ad);\r\n                });\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Displays a previously loaded interstitial video ad.\r\n     * \r\n     * If the ad is successfully displayed this plugin will emit the `adfinished` event, with the AdInstance object as its parameter.\r\n     * \r\n     * If the ad cannot be displayed, it will emit the `adsnotloaded` event.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#showVideo\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} placementID - The ad placement ID to display.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    showVideo: function (placementID)\r\n    {\r\n        var _this = this;\r\n\r\n        for (var i = 0; i < this.ads.length; i++)\r\n        {\r\n            var ad = this.ads[i];\r\n\r\n            if (ad.placementID === placementID && ad.video && !ad.shown)\r\n            {\r\n                ad.instance.showAsync().then(function ()\r\n                {\r\n                    ad.shown = true;\r\n\r\n                    _this.emit('adfinished', ad);\r\n\r\n                }).catch(function (e)\r\n                {\r\n                    if (e.code === 'ADS_NOT_LOADED')\r\n                    {\r\n                        _this.emit('adsnotloaded', ad);\r\n                    }\r\n                    else if (e.code === 'RATE_LIMITED')\r\n                    {\r\n                        _this.emit('adratelimited', ad);\r\n                    }\r\n                    \r\n                    _this.emit('adshowerror', e, ad);\r\n                });\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Attempts to match the current player with other users looking for people to play with.\r\n     * If successful, a new Messenger group thread will be created containing the matched players and the player will\r\n     * be context switched to that thread. This plugin will also dispatch the `matchplayer` event, containing the new context ID and Type.\r\n     * \r\n     * The default minimum and maximum number of players in one matched thread are 2 and 20 respectively,\r\n     * depending on how many players are trying to get matched around the same time.\r\n     * \r\n     * The values can be changed in `fbapp-config.json`. See the Bundle Config documentation for documentation about `fbapp-config.json`.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#matchPlayer\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} [matchTag] - Optional extra information about the player used to group them with similar players. Players will only be grouped with other players with exactly the same tag. The tag must only include letters, numbers, and underscores and be 100 characters or less in length.\r\n     * @param {boolean} [switchImmediately=false] - Optional extra parameter that specifies whether the player should be immediately switched to the new context when a match is found. By default this will be false which will mean the player needs explicitly press play after being matched to switch to the new context.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    matchPlayer: function (matchTag, switchImmediately)\r\n    {\r\n        if (matchTag === undefined) { matchTag = null; }\r\n        if (switchImmediately === undefined) { switchImmediately = false; }\r\n\r\n        if (!this.checkAPI('matchPlayerAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.matchPlayerAsync(matchTag, switchImmediately).then(function ()\r\n        {\r\n            _this.getID();\r\n            _this.getType();\r\n\r\n            _this.emit('matchplayer', _this.contextID, _this.contextType);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fetch a specific leaderboard belonging to this Instant Game.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes the `getleaderboard` event will be emitted along with a Leaderboard object instance.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#getLeaderboard\r\n     * @since 3.13.0\r\n     * \r\n     * @param {string} name - The name of the leaderboard. Each leaderboard for an Instant Game must have its own distinct name.\r\n     * \r\n     * @return {this} This Facebook Instant Games Plugin instance.\r\n     */\r\n    getLeaderboard: function (name)\r\n    {\r\n        if (!this.checkAPI('getLeaderboardAsync'))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        FBInstant.getLeaderboardAsync(name).then(function (data)\r\n        {\r\n            var leaderboard = new Leaderboard(_this, data);\r\n\r\n            _this.leaderboards[name] = leaderboard;\r\n\r\n            _this.emit('getleaderboard', leaderboard);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Quits the Facebook API and then destroys this plugin.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesPlugin#destroy\r\n     * @since 3.13.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        FBInstant.quit();\r\n\r\n        this.data.destroy();\r\n\r\n        this.removeAllListeners();\r\n\r\n        this.catalog = [];\r\n        this.purchases = [];\r\n        this.leaderboards = [];\r\n        this.ads = [];\r\n\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = FacebookInstantGamesPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbi5qcz8wYTNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywrRUFBYztBQUN2QyxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLG9GQUErQjtBQUN6RCxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBZTtBQUN6QyxjQUFjLG1CQUFPLENBQUMseUVBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLDJFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUF3QjtBQUN2QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLGtCQUFrQjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTyxtREFBbUQsb0RBQW9EO0FBQzlIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCLGtCQUFrQixnQkFBZ0I7QUFDbEMsa0JBQWtCLE9BQU87QUFDekIsa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQSx1Q0FBdUMsaUJBQWlCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7QUFDdEQsOENBQThDLDJCQUEyQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1jb25zb2xlOiAwICovXHJcblxyXG4vKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkSW5zdGFuY2UgPSByZXF1aXJlKCcuL0FkSW5zdGFuY2UnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9kYXRhL0RhdGFNYW5hZ2VyJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBMZWFkZXJib2FyZCA9IHJlcXVpcmUoJy4vTGVhZGVyYm9hcmQnKTtcclxudmFyIFByb2R1Y3QgPSByZXF1aXJlKCcuL1Byb2R1Y3QnKTtcclxudmFyIFB1cmNoYXNlID0gcmVxdWlyZSgnLi9QdXJjaGFzZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGZvciBQaGFzZXIgMyBwcm92aWRlcyBhIHNlYW1sZXNzIGJyaWRnZSBiZXR3ZWVuIFBoYXNlclxyXG4gKiBhbmQgdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIHZlcnNpb24gNi4yLlxyXG4gKiBcclxuICogWW91IGNhbiBhY2Nlc3MgdGhpcyBwbHVnaW4gdmlhIHRoZSBgZmFjZWJvb2tgIHByb3BlcnR5IGluIGEgU2NlbmUsIGkuZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5mYWNlYm9vay5nZXRQbGF0Zm9ybSgpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIElmIHRoaXMgaXMgdW5hdmFpbGFibGUgcGxlYXNlIGNoZWNrIHRvIG1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgYSBidWlsZCBvZiBQaGFzZXIgdGhhdCBoYXNcclxuICogdGhpcyBwbHVnaW4gd2l0aGluIGl0LiBZb3UgY2FuIHF1aWNrbHkgY2hlY2sgdGhpcyBieSBsb29raW5nIGF0IHRoZSBkZXYgdG9vbHMgY29uc29sZVxyXG4gKiBoZWFkZXIgLSB0aGUgUGhhc2VyIHZlcnNpb24gbnVtYmVyIHdpbGwgaGF2ZSBgLUZCYCBhZnRlciBpdCBpZiB0aGlzIHBsdWdpbiBpcyBsb2FkZWQuXHJcbiAqXHJcbiAqIElmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBvd24gdmVyc2lvbiBvZiBQaGFzZXIgdGhlbiB1c2UgdGhpcyBXZWJwYWNrIERlZmluZVBsdWdpbiBmbGFnOlxyXG4gKiBcclxuICogYFwidHlwZW9mIFBMVUdJTl9GQklOU1RBTlRcIjogSlNPTi5zdHJpbmdpZnkodHJ1ZSlgXHJcbiAqIFxyXG4gKiBZb3Ugd2lsbCBmaW5kIHRoYXQgZXZlcnkgSW5zdGFudCBHYW1lcyBBUEkgbWV0aG9kIGhhcyBhIG1hcHBpbmcgaW4gdGhpcyBwbHVnaW4uXHJcbiAqIEZvciBhIGZ1bGwgbGlzdCBwbGVhc2UgY29uc3VsdCBlaXRoZXIgdGhlIHBsdWdpbiBkb2N1bWVudGF0aW9uLCBvciB0aGUgNi4yIFNESyBkb2N1bWVudGF0aW9uXHJcbiAqIGF0IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzL3Nkay9mYmluc3RhbnQ2LjJcclxuICogXHJcbiAqIEludGVybmFsbHkgdGhpcyBwbHVnaW4gdXNlcyBpdHMgb3duIERhdGEgTWFuYWdlciB0byBoYW5kbGUgc2VhbWxlc3MgdXNlciBkYXRhIHVwZGF0ZXMgYW5kIHByb3ZpZGVzXHJcbiAqIGhhbmR5IGZ1bmN0aW9ucyBmb3IgYWR2ZXJ0aXNlbWVudCBkaXNwbGF5aW5nLCBvcGVuaW5nIHNoYXJlIGRpYWxvZ3MsIGxvZ2dpbmcsIGxlYWRlcmJvYXJkcywgcHVyY2hhc2UgQVBJIHJlcXVlc3RzLFxyXG4gKiBsb2FkZXIgaW50ZWdyYXRpb24gYW5kIG1vcmUuXHJcbiAqIFxyXG4gKiBUbyBnZXQgc3RhcnRlZCB3aXRoIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgeW91IHdpbGwgbmVlZCB0byByZWdpc3RlciBvbiBGYWNlYm9vayBhbmQgY3JlYXRlIGEgbmV3IEluc3RhbnRcclxuICogR2FtZSBhcHAgdGhhdCBoYXMgaXRzIG93biB1bmlxdWUgYXBwIElELiBGYWNlYm9vayBoYXZlIGFsc28gcHJvdmlkZWQgYSBkYXNoYm9hcmQgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwXHJcbiAqIHZhcmlvdXMgZmVhdHVyZXMgZm9yIHlvdXIgZ2FtZSwgaW5jbHVkaW5nIGxlYWRlcmJvYXJkcywgYWQgcmVxdWVzdHMgYW5kIHRoZSBwYXltZW50cyBBUEkuIFRoZXJlIGFyZSBsb3RzXHJcbiAqIG9mIGd1aWRlcyBvbiB0aGUgRmFjZWJvb2sgRGV2ZWxvcGVycyBwb3J0YWwgdG8gYXNzaXN0IHdpdGggc2V0dGluZyB0aGVzZVxyXG4gKiB2YXJpb3VzIHN5c3RlbXMgdXA6IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzL2d1aWRlc1xyXG4gKiBcclxuICogRm9yIG1vcmUgZGV0YWlscyBmb2xsb3cgdGhlIFF1aWNrIFN0YXJ0IGd1aWRlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzXHJcbiAqXHJcbiAqIEBjbGFzcyBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpblxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcmVhZE9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBEYXRhIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgICAgICogSXQgYWxsb3dzIHlvdSB0byBzdG9yZSwgcXVlcnkgYW5kIHJldHJpZXZlIGFueSBrZXkvdmFsdWUgZGF0YSB5b3UgbWF5IG5lZWQgdG8gc3RvcmUuXHJcbiAgICAgICAgICogSXQncyBhbHNvIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgcGx1Z2luIHRvIHN0b3JlIEZCSUcgQVBJIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uKCdzZXRkYXRhJywgdGhpcy5zZXREYXRhSGFuZGxlciwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbignY2hhbmdlZGF0YScsIHRoaXMuY2hhbmdlRGF0YUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYXMgdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGxvYWRlZCB5ZXQ/XHJcbiAgICAgICAgICogVGhpcyBpcyBzZXQgYXV0b21hdGljYWxseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNoYXNMb2FkZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIERhdGEgTWFuYWdlciBjdXJyZW50bHkgbG9ja2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2RhdGFMb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBBUElzIHRoYXQgYXJlIGF2YWlsYWJsZSxcclxuICAgICAgICAgKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gcGxhdGZvcm0sIGNvbnRleHQgYW5kIHVzZXIgcHJpdmFjeSBzZXR0aW5ncy5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3N1cHBvcnRlZEFQSXNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3VwcG9ydGVkQVBJcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb2xkcyB0aGUgZW50cnkgcG9pbnQgdGhhdCB0aGUgZ2FtZSB3YXMgbGF1bmNoZWQgZnJvbS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2VudHJ5UG9pbnRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVudHJ5UG9pbnQgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRyeSBwb2ludCB0aGF0IHRoZSBnYW1lIHdhcyBsYXVuY2hlZCBmcm9tLlxyXG4gICAgICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGFyZSBkZXZlbG9wZXItZGVmaW5lZCwgYW5kIGNhbiBvY2N1ciBmcm9tIGVudHJ5IHBvaW50cyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLlxyXG4gICAgICAgICAqIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBmb3Igb2xkZXIgbW9iaWxlIGNsaWVudHMsIGFzIHdlbGwgYXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFydGljdWxhciBlbnRyeSBwb2ludC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2VudHJ5UG9pbnREYXRhXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyeVBvaW50RGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGdhbWUgY29udGV4dC4gVGhpcyByZXByZXNlbnRzIGEgc3BlY2lmaWMgY29udGV4dFxyXG4gICAgICAgICAqIHRoYXQgdGhlIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIChmb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIG1lc3NlbmdlciBjb252ZXJzYXRpb24gb3IgZmFjZWJvb2sgcG9zdCkuXHJcbiAgICAgICAgICogVGhlIGlkZW50aWZpZXIgd2lsbCBiZSBudWxsIGlmIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIGEgc29sbyBjb250ZXh0LlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgcG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGJvb3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY29udGV4dElEXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0SUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBjb250ZXh0IGluIHdoaWNoIHlvdXIgZ2FtZSBpcyBydW5uaW5nLiBUaGlzIGNhbiBiZSBlaXRoZXIgYG51bGxgIG9yXHJcbiAgICAgICAgICogb25lIG9mOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGBQT1NUYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIG9mIGEgRmFjZWJvb2sgcG9zdC5cclxuICAgICAgICAgKiBgVEhSRUFEYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIGEgRmFjZWJvb2sgTWVzc2VuZ2VyIHRocmVhZC5cclxuICAgICAgICAgKiBgR1JPVVBgIC0gVGhlIGdhbWUgaXMgcnVubmluZyBpbnNpZGUgYSBGYWNlYm9vayBHcm91cC5cclxuICAgICAgICAgKiBgU09MT2AgLSBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbnRleHQsIHRoZSBwbGF5ZXIgaXMgdGhlIG9ubHkgcGFydGljaXBhbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNjb250ZXh0VHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHRUeXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICAgICAqIFNlZSBodHRwczovL29yaWdpbmNhY2hlLmZhY2Vib29rLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy8/aWQ9RmFjZWJvb2tMb2NhbGVzLnhtbCBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBsb2NhbGUgdmFsdWVzLlxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIGRldGVybWluZSB3aGF0IGxhbmd1YWdlcyB0aGUgY3VycmVudCBnYW1lIHNob3VsZCBiZSBsb2NhbGl6ZWQgd2l0aC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2xvY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvY2FsZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwbGF0Zm9ybSBvbiB3aGljaCB0aGUgZ2FtZSBpcyBjdXJyZW50bHkgcnVubmluZywgaS5lLiBgSU9TYC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXRmb3JtXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFNESyB2ZXJzaW9uIGJlaW5nIHVzZWQuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiN2ZXJzaW9uXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvbGRzIHRoZSBpZCBvZiB0aGUgcGxheWVyLiBUaGlzIGlzIGEgc3RyaW5nIGJhc2VkIElELCB0aGUgc2FtZSBhcyBgRkJJbnN0YW50LnBsYXllci5nZXRJRCgpYC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290IGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXllcklEXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxheWVySUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGxheWVyJ3MgbG9jYWxpemVkIGRpc3BsYXkgbmFtZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290IGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXllck5hbWVcclxuICAgICAgICAgKiBAdHlwZSB7P3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbGF5ZXJOYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB1cmwgdG8gdGhlIHBsYXllcidzIHB1YmxpYyBwcm9maWxlIHBob3RvLiBUaGUgcGhvdG8gd2lsbCBhbHdheXMgYmUgYSBzcXVhcmUsIGFuZCB3aXRoIGRpbWVuc2lvbnNcclxuICAgICAgICAgKiBvZiBhdCBsZWFzdCAyMDB4MjAwLiBXaGVuIHJlbmRlcmluZyBpdCBpbiB0aGUgZ2FtZSwgdGhlIGV4YWN0IGRpbWVuc2lvbnMgc2hvdWxkIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgY29uc3RhbnQuXHJcbiAgICAgICAgICogSXQncyByZWNvbW1lbmRlZCB0byBhbHdheXMgc2NhbGUgdGhlIGltYWdlIHRvIGEgZGVzaXJlZCBzaXplIGJlZm9yZSByZW5kZXJpbmcuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdCBpZiB0aGUgQVBJIGlzIHN1cHBvcnRlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNwbGF5ZXJQaG90b1VSTFxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXllclBob3RvVVJMID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBhIHBsYXllciBjYW4gc3Vic2NyaWJlIHRvIHRoZSBnYW1lIGJvdCBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcGxheWVyQ2FuU3Vic2NyaWJlQm90XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxheWVyQ2FuU3Vic2NyaWJlQm90ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIGN1cnJlbnQgcGxhdGZvcm0gYW5kIGNvbnRleHQgYWxsb3cgZm9yIHVzZSBvZiB0aGUgcGF5bWVudHMgQVBJP1xyXG4gICAgICAgICAqIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIEZhY2Vib29rLmNvbSBhbmQgQW5kcm9pZCA2Ky5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNwYXltZW50c1JlYWR5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF5bWVudHNSZWFkeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0IG9mIHByb2R1Y3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY2F0YWxvZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQcm9kdWN0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2F0YWxvZyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWlucyBhbGwgb2YgdGhlIHBsYXllcidzIHVuY29uc3VtZWQgcHVyY2hhc2VzLlxyXG4gICAgICAgICAqIFRoZSBnYW1lIG11c3QgZmV0Y2ggdGhlIGN1cnJlbnQgcGxheWVyJ3MgcHVyY2hhc2VzIGFzIHNvb24gYXMgdGhlIGNsaWVudCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZWFkeSB0byBwZXJmb3JtIHBheW1lbnRzLXJlbGF0ZWQgb3BlcmF0aW9ucyxcclxuICAgICAgICAgKiBpLmUuIGF0IGdhbWUgc3RhcnQuIFRoZSBnYW1lIGNhbiB0aGVuIHByb2Nlc3MgYW5kIGNvbnN1bWUgYW55IHB1cmNoYXNlcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIGNvbnN1bWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3B1cmNoYXNlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQdXJjaGFzZVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnB1cmNoYXNlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWlucyBhbGwgb2YgdGhlIGxlYWRlcmJvYXJkIGRhdGEsIGFzIHBvcHVsYXRlZCBieSB0aGUgYGdldExlYWRlcmJvYXJkKClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsZWFkZXJib2FyZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmRbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWFkZXJib2FyZHMgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udGFpbnMgQWRJbnN0YW5jZSBvYmplY3RzLCBhcyBjcmVhdGVkIGJ5IHRoZSBgcHJlbG9hZEFkcygpYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jYWRzXHJcbiAgICAgICAgICogQHR5cGUge0FkSW5zdGFuY2VbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZHMgPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBzZXQgZGF0YSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NldERhdGFIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IHBhcmVudCAtIFRoZSBwYXJlbnQgRGF0YSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFIYW5kbGVyOiBmdW5jdGlvbiAocGFyZW50LCBrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjaGFuZ2UgZGF0YSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NoYW5nZURhdGFIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IHBhcmVudCAtIFRoZSBwYXJlbnQgRGF0YSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZURhdGFIYW5kbGVyOiBmdW5jdGlvbiAocGFyZW50LCBrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIGZyb20geW91ciBgU2NlbmUucHJlbG9hZGAgaW4gb3JkZXIgdG8gc3luYyB0aGUgbG9hZCBwcm9ncmVzc1xyXG4gICAgICogb2YgdGhlIFBoYXNlciBMb2FkZXIgd2l0aCB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBsb2FkZXIgZGlzcGxheSwgaS5lLjpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5mYWNlYm9vay5zaG93TG9hZFByb2dyZXNzKHRoaXMpO1xyXG4gICAgICogdGhpcy5mYWNlYm9vay5vbmNlKCdzdGFydGdhbWUnLCB0aGlzLnN0YXJ0R2FtZSwgdGhpcyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNzaG93TG9hZFByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIGZvciB3aGljaCB5b3Ugd2FudCB0byBzaG93IGxvYWRlciBwcm9ncmVzcyBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNob3dMb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICBzY2VuZS5sb2FkLm9uKCdwcm9ncmVzcycsIGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNMb2FkZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZCSW5zdGFudC5zZXRMb2FkaW5nUHJvZ3Jlc3ModmFsdWUgKiAxMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBzY2VuZS5sb2FkLm9uKCdjb21wbGV0ZScsIGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzTG9hZGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgRkJJbnN0YW50LnN0YXJ0R2FtZUFzeW5jKCkudGhlbih0aGlzLmdhbWVTdGFydGVkSGFuZGxlci5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZ2FtZSBoYXMgZmluaXNoZWQgbG9hZGluZyxcclxuICAgICAqIGlmIHlvdSB1c2VkIHRoZSBgc2hvd0xvYWRQcm9ncmVzc2AgbWV0aG9kLiBJZiB5b3VyIGdhbWUgZG9lc24ndCBuZWVkIHRvXHJcbiAgICAgKiBsb2FkIGFueSBhc3NldHMsIG9yIHlvdSdyZSBtYW5hZ2luZyB0aGUgbG9hZCB5b3Vyc2VsZiwgdGhlbiBjYWxsIHRoaXNcclxuICAgICAqIG1ldGhvZCBkaXJlY3RseSB0byBzdGFydCB0aGUgQVBJIHJ1bm5pbmcuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIEFQSSBoYXMgZmluaXNoZWQgc3RhcnRpbmcgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IGEgYHN0YXJ0Z2FtZWAgZXZlbnRcclxuICAgICAqIHdoaWNoIHlvdSBzaG91bGQgbGlzdGVuIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnYW1lU3RhcnRlZFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBnYW1lU3RhcnRlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzTG9hZGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LnN0YXJ0R2FtZUFzeW5jKCkudGhlbih0aGlzLmdhbWVTdGFydGVkSGFuZGxlci5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lU3RhcnRlZEhhbmRsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGludGVybmFsIGdhbWVTdGFydGVkIGhhbmRsZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dhbWVTdGFydGVkSGFuZGxlclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgZ2FtZVN0YXJ0ZWRIYW5kbGVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBBUElzID0gRkJJbnN0YW50LmdldFN1cHBvcnRlZEFQSXMoKTtcclxuXHJcbiAgICAgICAgdmFyIHN1cHBvcnRlZCA9IHt9O1xyXG5cclxuICAgICAgICB2YXIgZG90VG9VcHBlciA9IGZ1bmN0aW9uIChtYXRjaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEFQSXMuZm9yRWFjaChmdW5jdGlvbiAoYXBpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXBpID0gYXBpLnJlcGxhY2UoL1xcLi4vZywgZG90VG9VcHBlcik7XHJcblxyXG4gICAgICAgICAgICBzdXBwb3J0ZWRbYXBpXSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VwcG9ydGVkQVBJcyA9IHN1cHBvcnRlZDtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJRCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0VHlwZSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0TG9jYWxlKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF0Zm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U0RLVmVyc2lvbigpO1xyXG5cclxuICAgICAgICB0aGlzLmdldFBsYXllcklEKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF5ZXJOYW1lKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF5ZXJQaG90b1VSTCgpO1xyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQub25QYXVzZShmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgncGF1c2UnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LmdldEVudHJ5UG9pbnRBc3luYygpLnRoZW4oZnVuY3Rpb24gKGVudHJ5cG9pbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbnRyeVBvaW50ID0gZW50cnlwb2ludDtcclxuICAgICAgICAgICAgX3RoaXMuZW50cnlQb2ludERhdGEgPSBGQkluc3RhbnQuZ2V0RW50cnlQb2ludERhdGEoKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ3N0YXJ0Z2FtZScpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gIEZhY2Vib29rLmNvbSBhbmQgQW5kcm9pZCA2IG9ubHlcclxuICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRBUElzLnBheW1lbnRzUHVyY2hhc2VBc3luYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5vblJlYWR5KGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnBheW1lbnRzUmVhZHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSBnaXZlbiBGYWNlYm9vayBJbnN0YW50IEdhbWVzIEFQSSBpcyBhdmFpbGFibGUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NoZWNrQVBJXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgQVBJIHRvIGNoZWNrIGZvciwgaS5lLiBgcGxheWVyLmdldElEYC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY2hlY2tBUEk6IGZ1bmN0aW9uIChhcGkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZEFQSXNbYXBpXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBnYW1lIGNvbnRleHQuIFRoaXMgcmVwcmVzZW50cyBhIHNwZWNpZmljIGNvbnRleHRcclxuICAgICAqIHRoYXQgdGhlIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIChmb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIG1lc3NlbmdlciBjb252ZXJzYXRpb24gb3IgZmFjZWJvb2sgcG9zdCkuXHJcbiAgICAgKiBUaGUgaWRlbnRpZmllciB3aWxsIGJlIG51bGwgaWYgZ2FtZSBpcyBiZWluZyBwbGF5ZWQgaW4gYSBzb2xvIGNvbnRleHQuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBjb250ZXh0R2V0SURgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldElEXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRleHQgSUQuXHJcbiAgICAgKi9cclxuICAgIGdldElEOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0SUQgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmNvbnRleHRHZXRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dElEID0gRkJJbnN0YW50LmNvbnRleHQuZ2V0SUQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRJRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQgaW4gd2hpY2ggeW91ciBnYW1lIGlzIHJ1bm5pbmcuIFRoaXMgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3Igb25lIG9mOlxyXG4gICAgICogXHJcbiAgICAgKiBgUE9TVGAgLSBUaGUgZ2FtZSBpcyBydW5uaW5nIGluc2lkZSBvZiBhIEZhY2Vib29rIHBvc3QuXHJcbiAgICAgKiBgVEhSRUFEYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIGEgRmFjZWJvb2sgTWVzc2VuZ2VyIHRocmVhZC5cclxuICAgICAqIGBHUk9VUGAgLSBUaGUgZ2FtZSBpcyBydW5uaW5nIGluc2lkZSBhIEZhY2Vib29rIEdyb3VwLlxyXG4gICAgICogYFNPTE9gIC0gVGhpcyBpcyB0aGUgZGVmYXVsdCBjb250ZXh0LCB0aGUgcGxheWVyIGlzIHRoZSBvbmx5IHBhcnRpY2lwYW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgY29udGV4dEdldFR5cGVgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFR5cGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIGNvbnRleHQgdHlwZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VHlwZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGV4dFR5cGUgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmNvbnRleHRHZXRUeXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0VHlwZSA9IEZCSW5zdGFudC5jb250ZXh0LmdldFR5cGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRUeXBlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICogU2VlIGh0dHBzOi8vb3JpZ2luY2FjaGUuZmFjZWJvb2suY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzLz9pZD1GYWNlYm9va0xvY2FsZXMueG1sIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZSB2YWx1ZXMuXHJcbiAgICAgKiBVc2UgdGhpcyB0byBkZXRlcm1pbmUgd2hhdCBsYW5ndWFnZXMgdGhlIGN1cnJlbnQgZ2FtZSBzaG91bGQgYmUgbG9jYWxpemVkIHdpdGguXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0TG9jYWxlYCBpcyBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRMb2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICovXHJcbiAgICBnZXRMb2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZSAmJiB0aGlzLnN1cHBvcnRlZEFQSXMuZ2V0TG9jYWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGUgPSBGQkluc3RhbnQuZ2V0TG9jYWxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGdhbWUgaXMgY3VycmVudGx5IHJ1bm5pbmcsIGkuZS4gYElPU2AuXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0UGxhdGZvcm1gIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXRmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBjdXJyZW50IHBsYXRmb3JtLlxyXG4gICAgICovXHJcbiAgICBnZXRQbGF0Zm9ybTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucGxhdGZvcm0gJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmdldFBsYXRmb3JtKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IEZCSW5zdGFudC5nZXRQbGF0Zm9ybSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhdGZvcm07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFNESyB2ZXJzaW9uIGJlaW5nIHVzZWQuXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0U0RLVmVyc2lvbmAgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0U0RLVmVyc2lvblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgc2RrIHZlcnNpb24uXHJcbiAgICAgKi9cclxuICAgIGdldFNES1ZlcnNpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnNpb24gJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmdldFNES1ZlcnNpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnNpb24gPSBGQkluc3RhbnQuZ2V0U0RLVmVyc2lvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgcGxheWVyLiBUaGlzIGlzIGEgc3RyaW5nIGJhc2VkIElELCB0aGUgc2FtZSBhcyBgRkJJbnN0YW50LnBsYXllci5nZXRJRCgpYC5cclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBwbGF5ZXJHZXRJRGAgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0UGxheWVySURcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllciBJRC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVySUQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllcklEICYmIHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJHZXRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVySUQgPSBGQkluc3RhbnQucGxheWVyLmdldElEKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJJRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwbGF5ZXIncyBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lLlxyXG4gICAgICogSXQgaXMgb25seSBwb3B1bGF0ZWQgaWYgYHBsYXllckdldE5hbWVgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXllck5hbWVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllcidzIGxvY2FsaXplZCBkaXNwbGF5IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFBsYXllck5hbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllck5hbWUgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLnBsYXllckdldE5hbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllck5hbWUgPSBGQkluc3RhbnQucGxheWVyLmdldE5hbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXllck5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdXJsIHRvIHRoZSBwbGF5ZXIncyBwdWJsaWMgcHJvZmlsZSBwaG90by4gVGhlIHBob3RvIHdpbGwgYWx3YXlzIGJlIGEgc3F1YXJlLCBhbmQgd2l0aCBkaW1lbnNpb25zXHJcbiAgICAgKiBvZiBhdCBsZWFzdCAyMDB4MjAwLiBXaGVuIHJlbmRlcmluZyBpdCBpbiB0aGUgZ2FtZSwgdGhlIGV4YWN0IGRpbWVuc2lvbnMgc2hvdWxkIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgY29uc3RhbnQuXHJcbiAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBzY2FsZSB0aGUgaW1hZ2UgdG8gYSBkZXNpcmVkIHNpemUgYmVmb3JlIHJlbmRlcmluZy5cclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBwbGF5ZXJHZXRQaG90b2AgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0UGxheWVyUGhvdG9VUkxcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllcidzIHBob3RvIHVybC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVyUGhvdG9VUkw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllclBob3RvVVJMICYmIHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJHZXRQaG90bylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyUGhvdG9VUkwgPSBGQkluc3RhbnQucGxheWVyLmdldFBob3RvKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJQaG90b1VSTDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIHRoZSBwbGF5ZXIncyBwaG90byBhbmQgc3RvcmUgaXQgaW4gdGhlIFRleHR1cmUgTWFuYWdlciwgcmVhZHkgZm9yIHVzZSBpbi1nYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3b3JrcyBieSB1c2luZyBhIFNjZW5lIExvYWRlciBpbnN0YW5jZSBhbmQgdGhlbiBhc2tpbmcgdGhlIExvYWRlciB0b1xyXG4gICAgICogcmV0cmlldmUgdGhlIGltYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIGNvbXBsZXRlIHRoZSBwbHVnaW4gd2lsbCBlbWl0IGEgYHBob3RvY29tcGxldGVgIGV2ZW50LCBhbG9uZyB3aXRoIHRoZSBrZXkgb2YgdGhlIHBob3RvLlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmZhY2Vib29rLmxvYWRQbGF5ZXJQaG90byh0aGlzLCAncGxheWVyJykub25jZSgncGhvdG9jb21wbGV0ZScsIGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAqICAgdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ3BsYXllcicpO1xyXG4gICAgICogfSwgdGhpcyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsb2FkUGxheWVyUGhvdG9cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGlzIHBob3RvLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gdXNlIHdoZW4gc3RvcmluZyB0aGUgcGhvdG8gaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbG9hZFBsYXllclBob3RvOiBmdW5jdGlvbiAoc2NlbmUsIGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXJQaG90b1VSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjZW5lLmxvYWQuc2V0Q09SUygnYW5vbnltb3VzJyk7XHJcbiAgICBcclxuICAgICAgICAgICAgc2NlbmUubG9hZC5pbWFnZShrZXksIHRoaXMucGxheWVyUGhvdG9VUkwpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHNjZW5lLmxvYWQub25jZSgnZmlsZWNvbXBsZXRlLWltYWdlLScgKyBrZXksIGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGhvdG9jb21wbGV0ZScsIGtleSk7XHJcblxyXG4gICAgICAgICAgICB9LCB0aGlzKTtcclxuICAgIFxyXG4gICAgICAgICAgICBzY2VuZS5sb2FkLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgcGxheWVyIGNhbiBzdWJzY3JpYmUgdG8gdGhlIGdhbWUgYm90LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbiBzdWJzY3JpYmUsIHRoZSBgcGxheWVyQ2FuU3Vic2NyaWJlQm90YCBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgXHJcbiAgICAgKiBhbmQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgY2Fuc3Vic2NyaWJlYm90YCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBjYW5zdWJzY3JpYmVib3RmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NhblN1YnNjcmliZUJvdFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjYW5TdWJzY3JpYmVCb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3RBc3luYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBGQkluc3RhbnQucGxheWVyLmNhblN1YnNjcmliZUJvdEFzeW5jKCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NhbnN1YnNjcmliZWJvdCcpO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NhbnN1YnNjcmliZWJvdGZhaWwnLCBlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnY2Fuc3Vic2NyaWJlYm90ZmFpbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaWJlcyB0aGUgY3VycmVudCBwbGF5ZXIgdG8gdGhlIGdhbWUgYm90LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGFyZSBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBzdWJzY3JpYmVib3RgIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHN1YnNjcmliZWJvdGZhaWxgIGV2ZW50IGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc3Vic2NyaWJlQm90XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN1YnNjcmliZUJvdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LnBsYXllci5zdWJzY3JpYmVCb3RBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3Vic2NyaWJlYm90Jyk7XHJcblxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3Vic2NyaWJlYm90ZmFpbCcsIGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdzdWJzY3JpYmVib3RmYWlsJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIGRhdGEgZnJvbSB0aGUgcGxheWVyIGJhc2VkIG9uIHRoZSBnaXZlbiBrZXksIG9yIGFycmF5IG9mIGtleXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGRhdGEgaXMgc2V0IGludG8gdGhpcyBwbHVnaW5zIERhdGEgTWFuYWdlciBhbmQgdGhlXHJcbiAgICAgKiBgZ2V0ZGF0YWAgZXZlbnQgd2lsbCBiZSBlbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldERhdGFcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5cyAtIFRoZSBrZXkvcyBvZiB0aGUgZGF0YSB0byByZXRyaWV2ZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKGtleXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJHZXREYXRhQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5cyA9IFsga2V5cyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5nZXREYXRhQXN5bmMoa2V5cykudGhlbihmdW5jdGlvbiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFMb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmRhdGEuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMuZGF0YUxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0ZGF0YScsIGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGF0YSB0byBiZSBzYXZlZCB0byB0aGUgZGVzaWduYXRlZCBjbG91ZCBzdG9yYWdlIG9mIHRoZSBjdXJyZW50IHBsYXllci4gVGhlIGdhbWUgY2FuIHN0b3JlIHVwIHRvIDFNQiBvZiBkYXRhIGZvciBlYWNoIHVuaXF1ZSBwbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIHNhdmUgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBEYXRhIG1hbmFnZWQgdmlhIHRoaXMgcGx1Z2lucyBEYXRhIE1hbmFnZXIgaW5zdGFuY2UgaXMgYXV0b21hdGljYWxseSBzeW5jZWQgd2l0aCBGYWNlYm9vay4gSG93ZXZlciwgeW91IGNhbiBjYWxsIHRoaXNcclxuICAgICAqIG1ldGhvZCBkaXJlY3RseSBpZiB5b3UgbmVlZCB0byByZXBsYWNlIHRoZSBkYXRhIG9iamVjdCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgQVBJcyBgc2V0RGF0YUFzeW5jYCBjYWxsIHJlc29sdmVzIGl0IHdpbGwgZW1pdCB0aGUgYHNhdmVkYXRhYCBldmVudCBmcm9tIHRoaXMgcGx1Z2luLiBJZiB0aGUgY2FsbCBmYWlscyBmb3Igc29tZVxyXG4gICAgICogcmVhc29uIGl0IHdpbGwgZW1pdCBgc2F2ZWRhdGFmYWlsYCBpbnN0ZWFkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY2FsbCByZXNvbHZpbmcgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBpbnB1dCBoYXMgYWxyZWFkeSBiZWVuIHBlcnNpc3RlZC4gUmF0aGVyLCBpdCBtZWFucyB0aGF0IHRoZSBkYXRhIHdhcyB2YWxpZCBhbmRcclxuICAgICAqIGhhcyBiZWVuIHNjaGVkdWxlZCB0byBiZSBzYXZlZC4gSXQgYWxzbyBndWFyYW50ZWVzIHRoYXQgYWxsIHZhbHVlcyB0aGF0IHdlcmUgc2V0IGFyZSBub3cgYXZhaWxhYmxlIGluIGBnZXREYXRhYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNzYXZlRGF0YVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFRoZSBvYmplY3QgbXVzdCBjb250YWluIG9ubHkgc2VyaWFsaXphYmxlIHZhbHVlcyAtIGFueSBub24tc2VyaWFsaXphYmxlIHZhbHVlcyB3aWxsIGNhdXNlIHRoZSBlbnRpcmUgbW9kaWZpY2F0aW9uIHRvIGJlIHJlamVjdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzYXZlRGF0YTogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJTZXREYXRhQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdzYXZlZGF0YWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1tZWRpYXRlbHkgZmx1c2hlcyBhbnkgY2hhbmdlcyB0byB0aGUgcGxheWVyIGRhdGEgdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZW5zaXZlLCBhbmQgc2hvdWxkIHByaW1hcmlseSBiZSB1c2VkIGZvciBjcml0aWNhbCBjaGFuZ2VzIHdoZXJlIHBlcnNpc3RlbmNlIG5lZWRzIHRvIGJlIGltbWVkaWF0ZVxyXG4gICAgICogYW5kIGtub3duIGJ5IHRoZSBnYW1lLiBOb24tY3JpdGljYWwgY2hhbmdlcyBzaG91bGQgcmVseSBvbiB0aGUgcGxhdGZvcm0gdG8gcGVyc2lzdCB0aGVtIGluIHRoZSBiYWNrZ3JvdW5kLlxyXG4gICAgICogTk9URTogQ2FsbHMgdG8gcGxheWVyLnNldERhdGFBc3luYyB3aWxsIGJlIHJlamVjdGVkIHdoaWxlIHRoaXMgZnVuY3Rpb24ncyByZXN1bHQgaXMgcGVuZGluZy5cclxuICAgICAqIFxyXG4gICAgICogRGF0YSBtYW5hZ2VkIHZpYSB0aGlzIHBsdWdpbnMgRGF0YSBNYW5hZ2VyIGluc3RhbmNlIGlzIGF1dG9tYXRpY2FsbHkgc3luY2VkIHdpdGggRmFjZWJvb2suIEhvd2V2ZXIsIHlvdSBjYW4gY2FsbCB0aGlzXHJcbiAgICAgKiBtZXRob2QgZGlyZWN0bHkgaWYgeW91IG5lZWQgdG8gZmx1c2ggdGhlIGRhdGEgZGlyZWN0bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIEFQSXMgYGZsdXNoRGF0YUFzeW5jYCBjYWxsIHJlc29sdmVzIGl0IHdpbGwgZW1pdCB0aGUgYGZsdXNoZGF0YWAgZXZlbnQgZnJvbSB0aGlzIHBsdWdpbi4gSWYgdGhlIGNhbGwgZmFpbHMgZm9yIHNvbWVcclxuICAgICAqIHJlYXNvbiBpdCB3aWxsIGVtaXQgYGZsdXNoZGF0YWZhaWxgIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZmx1c2hEYXRhXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZsdXNoRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckZsdXNoRGF0YUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wbGF5ZXIuZmx1c2hEYXRhQXN5bmMoKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdmbHVzaGRhdGEnKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdmbHVzaGRhdGFmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlIHN0YXRzIGZyb20gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZSBvZiB0aGUgY3VycmVudCBwbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBnZXRzdGF0c2AgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGFsb25nIHdpdGggdGhlIGRhdGEgb2JqZWN0IHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgY2FsbCBmYWlscywgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3Qgd2FzIHJlamVjdGVkLFxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGdldHN0YXRzZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBba2V5c10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiB1bmlxdWUga2V5cyB0byByZXRyaWV2ZSBzdGF0cyBmb3IuIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBpdCwgaXQgd2lsbCBmZXRjaCBhbGwgc3RhdHMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXRzOiBmdW5jdGlvbiAoa2V5cylcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckdldFN0YXRzQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5nZXRTdGF0c0FzeW5jKGtleXMpLnRoZW4oZnVuY3Rpb24gKGRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdnZXRzdGF0cycsIGRhdGEpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHN0YXRzZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIHRoZSBzdGF0cyBvZiB0aGUgY3VycmVudCBwbGF5ZXIgdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogU3RhdHMgaW4gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGFyZSBwdXJlbHkgbnVtZXJpY2FsIHZhbHVlcyBwYWlyZWQgd2l0aCBhIHN0cmluZy1iYXNlZCBrZXkuIE9ubHkgbnVtYmVycyBjYW4gYmUgc2F2ZWQgYXMgc3RhdHMsXHJcbiAgICAgKiBhbGwgb3RoZXIgZGF0YSB0eXBlcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBzYXZlc3RhdHNgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBhbG9uZyB3aXRoIHRoZSBkYXRhIG9iamVjdCByZXR1cm5lZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGNhbGwgZmFpbHMsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0IHdhcyByZWplY3RlZCxcclxuICAgICAqIGl0IHdpbGwgZW1pdCBhIGBzYXZlc3RhdHNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NhdmVTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gY2xvdWQgc3RvcmFnZSBhcyBzdGF0cy4gTm90ZSB0aGF0IG9ubHkgbnVtZXJpY2FsIHZhbHVlcyBhcmUgc3RvcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzYXZlU3RhdHM6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgncGxheWVyU2V0U3RhdHNBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2tleV0gPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRba2V5XSA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXRTdGF0c0FzeW5jKG91dHB1dCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZXN0YXRzJywgb3V0cHV0KTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdzYXZlc3RhdHNmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluY3JlbWVudCB0aGUgc3RhdHMgb2YgdGhlIGN1cnJlbnQgcGxheWVyIGFuZCBzYXZlIHRoZW0gdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogU3RhdHMgaW4gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGFyZSBwdXJlbHkgbnVtZXJpY2FsIHZhbHVlcyBwYWlyZWQgd2l0aCBhIHN0cmluZy1iYXNlZCBrZXkuIE9ubHkgbnVtYmVycyBjYW4gYmUgc2F2ZWQgYXMgc3RhdHMsXHJcbiAgICAgKiBhbGwgb3RoZXIgZGF0YSB0eXBlcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIG9iamVjdCBwcm92aWRlZCBmb3IgdGhpcyBjYWxsIHNob3VsZCBjb250YWluIG9mZnNldHMgZm9yIGhvdyBtdWNoIHRvIG1vZGlmeSB0aGUgc3RhdHMgYnk6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuZmFjZWJvb2suaW5jU3RhdHMoe1xyXG4gICAgICogICAgIGxldmVsOiAxLFxyXG4gICAgICogICAgIHpvbWJpZXNTbGFpbjogMTcsXHJcbiAgICAgKiAgICAgcmFuazogLTFcclxuICAgICAqIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBpbmNzdGF0c2AgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGFsb25nIHdpdGggdGhlIGRhdGEgb2JqZWN0IHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgY2FsbCBmYWlscywgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3Qgd2FzIHJlamVjdGVkLFxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGluY3N0YXRzZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNpbmNTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBpbmRpY2F0aW5nIGhvdyBtdWNoIHRvIGluY3JlbWVudCBlYWNoIHN0YXQgaW4gY2xvdWQgc3RvcmFnZS4gTm90ZSB0aGF0IG9ubHkgbnVtZXJpY2FsIHZhbHVlcyBhcmUgcHJvY2Vzc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBpbmNTdGF0czogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJJbmNyZW1lbnRTdGF0c0FzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGxheWVyLmluY3JlbWVudFN0YXRzQXN5bmMob3V0cHV0KS50aGVuKGZ1bmN0aW9uIChzdGF0cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luY3N0YXRzJywgc3RhdHMpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luY3N0YXRzZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kaXZpZHVhbCBnYW1lcGxheSBzZXNzaW9uIGZvciB0aGUgY3VycmVudCBjb250ZXh0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGdhbWUgd291bGQgbGlrZSB0byB1cGRhdGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHNlc3Npb24gZGF0YSBtYXkgYmUgdXNlZCB0byBwb3B1bGF0ZSBhIHZhcmlldHkgb2YgcGF5bG9hZHMsIHN1Y2ggYXMgZ2FtZSBwbGF5IHdlYmhvb2tzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NhdmVTZXNzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gQW4gYXJiaXRyYXJ5IGRhdGEgb2JqZWN0LCB3aGljaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwIGNoYXJhY3RlcnMgd2hlbiBzdHJpbmdpZmllZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2F2ZVNlc3Npb246IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnc2V0U2Vzc2lvbkRhdGEnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRlc3QgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRlc3QubGVuZ3RoIDw9IDEwMDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGQkluc3RhbnQuc2V0U2Vzc2lvbkRhdGEoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU2Vzc2lvbiBkYXRhIHRvbyBsb25nLiBNYXggMTAwMCBjaGFycy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaW52b2tlcyBhIGRpYWxvZyB0byBsZXQgdGhlIHVzZXIgc2hhcmUgc3BlY2lmaWVkIGNvbnRlbnQsIGVpdGhlciBhcyBhIG1lc3NhZ2UgaW4gTWVzc2VuZ2VyIG9yIGFzIGEgcG9zdCBvbiB0aGUgdXNlcidzIHRpbWVsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBBIGJsb2Igb2YgZGF0YSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNoYXJlIHdoaWNoIGV2ZXJ5IGdhbWUgc2Vzc2lvbiBsYXVuY2hlZCBmcm9tIHRoZSBzaGFyZSB3aWxsIGJlIGFibGUgdG8gYWNjZXNzIHZpYSB0aGUgYHRoaXMuZW50cnlQb2ludERhdGFgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGRhdGEgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHlvdSBzaG91bGQgY29uc2lkZXIgeW91ciBnYW1lIHBhdXNlZC4gTGlzdGVuIG91dCBmb3IgdGhlIGByZXN1bWVgIGV2ZW50IGZyb20gdGhpcyBwbHVnaW4gdG8ga25vdyB3aGVuIHRoZSBkaWFsb2cgaGFzIGJlZW4gY2xvc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdXNlciBtYXkgY2hvb3NlIHRvIGNhbmNlbCB0aGUgc2hhcmUgYWN0aW9uIGFuZCBjbG9zZSB0aGUgZGlhbG9nLiBUaGUgcmVzdWx0aW5nIGByZXN1bWVgIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCByZWdhcmRsZXNzIGlmIHRoZSB1c2VyIGFjdHVhbGx5IHNoYXJlZCB0aGUgY29udGVudCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jb3BlblNoYXJlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gQSB0ZXh0IG1lc3NhZ2UgdG8gYmUgc2hhcmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJhbWVdIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2Vzc2lvbkRhdGFdIC0gQSBibG9iIG9mIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBzaGFyZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb3BlblNoYXJlOiBmdW5jdGlvbiAodGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlKCdTSEFSRScsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludm9rZXMgYSBkaWFsb2cgdG8gbGV0IHRoZSB1c2VyIGludml0ZSBhIGZyaWVuZCB0byBwbGF5IHRoaXMgZ2FtZSwgZWl0aGVyIGFzIGEgbWVzc2FnZSBpbiBNZXNzZW5nZXIgb3IgYXMgYSBwb3N0IG9uIHRoZSB1c2VyJ3MgdGltZWxpbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEEgYmxvYiBvZiBkYXRhIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2hhcmUgd2hpY2ggZXZlcnkgZ2FtZSBzZXNzaW9uIGxhdW5jaGVkIGZyb20gdGhlIHNoYXJlIHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdmlhIHRoZSBgdGhpcy5lbnRyeVBvaW50RGF0YWAgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgZGF0YSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwIGNoYXJhY3RlcnMgd2hlbiBzdHJpbmdpZmllZC5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgeW91IHNob3VsZCBjb25zaWRlciB5b3VyIGdhbWUgcGF1c2VkLiBMaXN0ZW4gb3V0IGZvciB0aGUgYHJlc3VtZWAgZXZlbnQgZnJvbSB0aGlzIHBsdWdpbiB0byBrbm93IHdoZW4gdGhlIGRpYWxvZyBoYXMgYmVlbiBjbG9zZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB1c2VyIG1heSBjaG9vc2UgdG8gY2FuY2VsIHRoZSBzaGFyZSBhY3Rpb24gYW5kIGNsb3NlIHRoZSBkaWFsb2cuIFRoZSByZXN1bHRpbmcgYHJlc3VtZWAgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIHJlZ2FyZGxlc3MgaWYgdGhlIHVzZXIgYWN0dWFsbHkgc2hhcmVkIHRoZSBjb250ZW50IG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNvcGVuSW52aXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gQSB0ZXh0IG1lc3NhZ2UgdG8gYmUgc2hhcmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJhbWVdIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2Vzc2lvbkRhdGFdIC0gQSBibG9iIG9mIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBzaGFyZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb3Blbkludml0ZTogZnVuY3Rpb24gKHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZSgnSU5WSVRFJywgdGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaW52b2tlcyBhIGRpYWxvZyB0byBsZXQgdGhlIHVzZXIgc2hhcmUgc3BlY2lmaWVkIGNvbnRlbnQsIGVpdGhlciBhcyBhIG1lc3NhZ2UgaW4gTWVzc2VuZ2VyIG9yIGFzIGEgcG9zdCBvbiB0aGUgdXNlcidzIHRpbWVsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBBIGJsb2Igb2YgZGF0YSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNoYXJlIHdoaWNoIGV2ZXJ5IGdhbWUgc2Vzc2lvbiBsYXVuY2hlZCBmcm9tIHRoZSBzaGFyZSB3aWxsIGJlIGFibGUgdG8gYWNjZXNzIHZpYSB0aGUgYHRoaXMuZW50cnlQb2ludERhdGFgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGRhdGEgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHlvdSBzaG91bGQgY29uc2lkZXIgeW91ciBnYW1lIHBhdXNlZC4gTGlzdGVuIG91dCBmb3IgdGhlIGByZXN1bWVgIGV2ZW50IGZyb20gdGhpcyBwbHVnaW4gdG8ga25vdyB3aGVuIHRoZSBkaWFsb2cgaGFzIGJlZW4gY2xvc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdXNlciBtYXkgY2hvb3NlIHRvIGNhbmNlbCB0aGUgc2hhcmUgYWN0aW9uIGFuZCBjbG9zZSB0aGUgZGlhbG9nLiBUaGUgcmVzdWx0aW5nIGByZXN1bWVgIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCByZWdhcmRsZXNzIGlmIHRoZSB1c2VyIGFjdHVhbGx5IHNoYXJlZCB0aGUgY29udGVudCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jb3BlblJlcXVlc3RcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvcGVuUmVxdWVzdDogZnVuY3Rpb24gKHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZSgnUkVRVUVTVCcsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludm9rZXMgYSBkaWFsb2cgdG8gbGV0IHRoZSB1c2VyIHNoYXJlIHNwZWNpZmllZCBjb250ZW50LCBlaXRoZXIgYXMgYSBtZXNzYWdlIGluIE1lc3NlbmdlciBvciBhcyBhIHBvc3Qgb24gdGhlIHVzZXIncyB0aW1lbGluZS5cclxuICAgICAqIFxyXG4gICAgICogQSBibG9iIG9mIGRhdGEgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzaGFyZSB3aGljaCBldmVyeSBnYW1lIHNlc3Npb24gbGF1bmNoZWQgZnJvbSB0aGUgc2hhcmUgd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB2aWEgdGhlIGB0aGlzLmVudHJ5UG9pbnREYXRhYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkYXRhIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgY2hhcmFjdGVycyB3aGVuIHN0cmluZ2lmaWVkLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHlvdXIgZ2FtZSBwYXVzZWQuIExpc3RlbiBvdXQgZm9yIHRoZSBgcmVzdW1lYCBldmVudCBmcm9tIHRoaXMgcGx1Z2luIHRvIGtub3cgd2hlbiB0aGUgZGlhbG9nIGhhcyBiZWVuIGNsb3NlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHVzZXIgbWF5IGNob29zZSB0byBjYW5jZWwgdGhlIHNoYXJlIGFjdGlvbiBhbmQgY2xvc2UgdGhlIGRpYWxvZy4gVGhlIHJlc3VsdGluZyBgcmVzdW1lYCBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgcmVnYXJkbGVzcyBpZiB0aGUgdXNlciBhY3R1YWxseSBzaGFyZWQgdGhlIGNvbnRlbnQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI29wZW5DaGFsbGVuZ2VcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvcGVuQ2hhbGxlbmdlOiBmdW5jdGlvbiAodGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlKCdDSEFMTEVOR0UnLCB0ZXh0LCBrZXksIGZyYW1lLCBzZXNzaW9uRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgc2hhcmUgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNfc2hhcmVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlbnQgLSAoXCJJTlZJVEVcIiB8IFwiUkVRVUVTVFwiIHwgXCJDSEFMTEVOR0VcIiB8IFwiU0hBUkVcIikgSW5kaWNhdGVzIHRoZSBpbnRlbnQgb2YgdGhlIHNoYXJlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBfc2hhcmU6IGZ1bmN0aW9uIChpbnRlbnQsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnc2hhcmVBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2Vzc2lvbkRhdGEgPT09IHVuZGVmaW5lZCkgeyBzZXNzaW9uRGF0YSA9IHt9OyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gdGhpcy5nYW1lLnRleHR1cmVzLmdldEJhc2U2NChrZXksIGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGludGVudCAoXCJJTlZJVEVcIiB8IFwiUkVRVUVTVFwiIHwgXCJDSEFMTEVOR0VcIiB8IFwiU0hBUkVcIikgSW5kaWNhdGVzIHRoZSBpbnRlbnQgb2YgdGhlIHNoYXJlLlxyXG4gICAgICAgIC8vIGltYWdlIHN0cmluZyBBIGJhc2U2NCBlbmNvZGVkIGltYWdlIHRvIGJlIHNoYXJlZC5cclxuICAgICAgICAvLyB0ZXh0IHN0cmluZyBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgICAgLy8gZGF0YSBPYmplY3Q/IEEgYmxvYiBvZiBkYXRhIHRvIGF0dGFjaCB0byB0aGUgc2hhcmUuIEFsbCBnYW1lIHNlc3Npb25zIGxhdW5jaGVkIGZyb20gdGhlIHNoYXJlIHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhpcyBibG9iIHRocm91Z2ggRkJJbnN0YW50LmdldEVudHJ5UG9pbnREYXRhKCkuXHJcblxyXG4gICAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBpbnRlbnQ6IGludGVudCxcclxuICAgICAgICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcclxuICAgICAgICAgICAgdGV4dDogdGV4dCxcclxuICAgICAgICAgICAgZGF0YTogc2Vzc2lvbkRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQuc2hhcmVBc3luYyhwYXlsb2FkKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdyZXN1bWUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgaW4gdGhlIGN1cnJlbnQgZ2FtZSBjb250ZXh0IGlzIGJldHdlZW4gYSBnaXZlbiBtaW5pbXVtIGFuZCBtYXhpbXVtLCBpbmNsdXNpdmUuXHJcbiAgICAgKiBJZiBvbmUgb2YgdGhlIGJvdW5kcyBpcyBudWxsIG9ubHkgdGhlIG90aGVyIGJvdW5kIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0LlxyXG4gICAgICogSXQgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXN1bHQgZm9yIHRoZSBmaXJzdCBjYWxsIG1hZGUgaW4gYSBjb250ZXh0IGluIGEgZ2l2ZW4gZ2FtZSBwbGF5IHNlc3Npb24uXHJcbiAgICAgKiBTdWJzZXF1ZW50IGNhbGxzLCByZWdhcmRsZXNzIG9mIGFyZ3VtZW50cywgd2lsbCByZXR1cm4gdGhlIGFuc3dlciB0byB0aGUgb3JpZ2luYWwgcXVlcnkgdW50aWwgYSBjb250ZXh0IGNoYW5nZSBvY2N1cnMgYW5kIHRoZSBxdWVyeSByZXN1bHQgaXMgcmVzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jaXNTaXplQmV0d2VlblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW5dIC0gVGhlIG1pbmltdW0gYm91bmQgb2YgdGhlIGNvbnRleHQgc2l6ZSBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heF0gLSBUaGUgbWF4aW11bSBib3VuZCBvZiB0aGUgY29udGV4dCBzaXplIHF1ZXJ5LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBDb250ZXh0IFNpemUgUmVzcG9uc2Ugb2JqZWN0IGluIHRoZSBmb3JtYXQ6IGB7YW5zd2VyOiBib29sZWFuLCBtaW5TaXplOiBudW1iZXI/LCBtYXhTaXplOiBudW1iZXI/fWAuXHJcbiAgICAgKi9cclxuICAgIGlzU2l6ZUJldHdlZW46IGZ1bmN0aW9uIChtaW4sIG1heClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ2NvbnRleHRJc1NpemVCZXR3ZWVuJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBGQkluc3RhbnQuY29udGV4dC5pc1NpemVCZXR3ZWVuKG1pbiwgbWF4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXF1ZXN0IGEgc3dpdGNoIGludG8gYSBzcGVjaWZpYyBjb250ZXh0LiBJZiB0aGUgcGxheWVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBlbnRlciB0aGF0IGNvbnRleHQsXHJcbiAgICAgKiBvciBpZiB0aGUgcGxheWVyIGRvZXMgbm90IHByb3ZpZGUgcGVybWlzc2lvbiBmb3IgdGhlIGdhbWUgdG8gZW50ZXIgdGhhdCBjb250ZXh0LCB0aGlzIHdpbGwgZW1pdCBhIGBzd2l0Y2hmYWlsYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogT3RoZXJ3aXNlLCB0aGUgcGx1Z2luIHdpbGwgZW1pdCB0aGUgYHN3aXRjaGAgZXZlbnQgd2hlbiB0aGUgZ2FtZSBoYXMgc3dpdGNoZWQgaW50byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc3dpdGNoQ29udGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dElEIC0gVGhlIElEIG9mIHRoZSBkZXNpcmVkIGNvbnRleHQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3aXRjaENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SUQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdjb250ZXh0U3dpdGNoQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJRCAhPT0gdGhpcy5jb250ZXh0SUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmNvbnRleHQuc3dpdGNoQXN5bmMoY29udGV4dElEKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmNvbnRleHRJRCA9IEZCSW5zdGFudC5jb250ZXh0LmdldElEKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3dpdGNoJywgX3RoaXMuY29udGV4dElEKTtcclxuXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdzd2l0Y2hmYWlsJywgZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmaWx0ZXIgdGhhdCBtYXkgYmUgYXBwbGllZCB0byBhIENvbnRleHQgQ2hvb3NlIG9wZXJhdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogJ05FV19DT05URVhUX09OTFknIC0gUHJlZmVyIHRvIG9ubHkgc3VyZmFjZSBjb250ZXh0cyB0aGUgZ2FtZSBoYXMgbm90IGJlZW4gcGxheWVkIGluIGJlZm9yZS5cclxuICAgICAqICdJTkNMVURFX0VYSVNUSU5HX0NIQUxMRU5HRVMnIC0gSW5jbHVkZSB0aGUgXCJFeGlzdGluZyBDaGFsbGVuZ2VzXCIgc2VjdGlvbiwgd2hpY2ggc3VyZmFjZXMgYWN0aXZlbHkgcGxheWVkLWluIGNvbnRleHRzIHRoYXQgdGhlIHBsYXllciBpcyBhIHBhcnQgb2YuXHJcbiAgICAgKiAnTkVXX1BMQVlFUlNfT05MWScgLSBJbiBzZWN0aW9ucyBjb250YWluaW5nIGluZGl2aWR1YWxzLCBwcmVmZXIgcGVvcGxlIHdobyBoYXZlIG5vdCBwbGF5ZWQgdGhlIGdhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEB0eXBlZGVmIHtzdHJpbmd9IENvbnRleHRGaWx0ZXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGF0IG1heSBiZSBhcHBsaWVkIHRvIGEgQ29udGV4dCBDaG9vc2Ugb3BlcmF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBDaG9vc2VDb250ZXh0Q29uZmlnXHJcbiAgICAgKiBAcHJvcGVydHkge0NvbnRleHRGaWx0ZXJbXX0gW2ZpbHRlcnNdIC0gVGhlIHNldCBvZiBmaWx0ZXJzIHRvIGFwcGx5IHRvIHRoZSBjb250ZXh0IHN1Z2dlc3Rpb25zOiAnTkVXX0NPTlRFWFRfT05MWScsICdJTkNMVURFX0VYSVNUSU5HX0NIQUxMRU5HRVMnIG9yICdORVdfUExBWUVSU19PTkxZJy5cclxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4U2l6ZV0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljaXBhbnRzIHRoYXQgYSBzdWdnZXN0ZWQgY29udGV4dCBzaG91bGQgaWRlYWxseSBoYXZlLlxyXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFttaW5TaXplXSAtIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgdGhhdCBhIHN1Z2dlc3RlZCBjb250ZXh0IHNob3VsZCBpZGVhbGx5IGhhdmUuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgY29udGV4dCBzZWxlY3Rpb24gZGlhbG9nIGZvciB0aGUgcGxheWVyLiBJZiB0aGUgcGxheWVyIHNlbGVjdHMgYW4gYXZhaWxhYmxlIGNvbnRleHQsXHJcbiAgICAgKiB0aGUgY2xpZW50IHdpbGwgYXR0ZW1wdCB0byBzd2l0Y2ggaW50byB0aGF0IGNvbnRleHQsIGFuZCBlbWl0IHRoZSBgY2hvb3NlYCBldmVudCBpZiBzdWNjZXNzZnVsLlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcGxheWVyIGV4aXRzIHRoZSBtZW51IG9yIHRoZSBjbGllbnQgZmFpbHMgdG8gc3dpdGNoIGludG8gdGhlIG5ldyBjb250ZXh0LCB0aGUgYGNob29zZWZhaWxgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY2hvb3NlQ29udGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0Nob29zZUNvbnRleHRDb25maWd9IFtvcHRpb25zXSAtIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGNvbmRpdGlvbnMgb24gdGhlIGNvbnRleHRzIHRoYXQgc2hvdWxkIGJlIG9mZmVyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNob29zZUNvbnRleHQ6IGZ1bmN0aW9uIChvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnY29udGV4dENob29zZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jb250ZXh0LmNob29zZUFzeW5jKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmNvbnRleHRJRCA9IEZCSW5zdGFudC5jb250ZXh0LmdldElEKCk7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Nob29zZScsIF90aGlzLmNvbnRleHRJRCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnY2hvb3NlZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0cyB0byBjcmVhdGUgb3Igc3dpdGNoIGludG8gYSBjb250ZXh0IGJldHdlZW4gYSBzcGVjaWZpZWQgcGxheWVyIGFuZCB0aGUgY3VycmVudCBwbGF5ZXIuXHJcbiAgICAgKiBUaGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBjcmVhdGVgIGV2ZW50IG9uY2UgdGhlIGNvbnRleHQgc3dpdGNoIGlzIGNvbXBsZXRlZC5cclxuICAgICAqIElmIHRoZSBBUEkgY2FsbCBmYWlscywgc3VjaCBhcyBpZiB0aGUgcGxheWVyIGxpc3RlZCBpcyBub3QgYSBDb25uZWN0ZWQgUGxheWVyIG9mIHRoZSBjdXJyZW50IHBsYXllciBvciBpZiB0aGVcclxuICAgICAqIHBsYXllciBkb2VzIG5vdCBwcm92aWRlIHBlcm1pc3Npb24gdG8gZW50ZXIgdGhlIG5ldyBjb250ZXh0LCB0aGVuIHRoZSBwbHVnaW4gd2lsbCBlbWl0IGEgJ2NyZWF0ZWZhaWwnIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NyZWF0ZUNvbnRleHRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXllcklEIC0gSUQgb2YgdGhlIHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ29udGV4dDogZnVuY3Rpb24gKHBsYXllcklEKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnY29udGV4dENyZWF0ZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jb250ZXh0LmNyZWF0ZUFzeW5jKHBsYXllcklEKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5jb250ZXh0SUQgPSBGQkluc3RhbnQuY29udGV4dC5nZXRJRCgpO1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjcmVhdGUnLCBfdGhpcy5jb250ZXh0SUQpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NyZWF0ZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyBhbiBhcnJheSBvZiBDb25uZWN0ZWRQbGF5ZXIgb2JqZWN0cyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBwbGF5ZXJzXHJcbiAgICAgKiAocGVvcGxlIHdobyBwbGF5ZWQgdGhlIGdhbWUgaW4gdGhlIGxhc3QgOTAgZGF5cykgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZSBjdXJyZW50IHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgcGxheWVyc2AgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIHBsYXllciBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHBsYXllcnNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXllcnNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckdldENvbm5lY3RlZFBsYXllcnNBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGxheWVyLmdldENvbm5lY3RlZFBsYXllcnNBc3luYygpLnRoZW4oZnVuY3Rpb24gKHBsYXllcnMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwbGF5ZXJzJywgcGxheWVycyk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgncGxheWVyc2ZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyB0aGUgZ2FtZSdzIHByb2R1Y3QgY2F0YWxvZy5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgZ2V0Y2F0YWxvZ2AgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIGNhdGFsb2cgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBnZXRjYXRhbG9nZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRDYXRhbG9nXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldENhdGFsb2c6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNhdGFsb2cgPSB0aGlzLmNhdGFsb2c7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5nZXRDYXRhbG9nQXN5bmMoKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2F0YWxvZyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYXRhbG9nLnB1c2goUHJvZHVjdChpdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0Y2F0YWxvZycsIGNhdGFsb2cpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldGNhdGFsb2dmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZldGNoZXMgYSBzaW5nbGUgUHJvZHVjdCBmcm9tIHRoZSBnYW1lJ3MgcHJvZHVjdCBjYXRhbG9nLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcHJvZHVjdCBjYXRhbG9nIG11c3QgaGF2ZSBiZWVuIHBvcHVsYXRlZCB1c2luZyBgZ2V0Q2F0YWxvZ2AgcHJpb3IgdG8gY2FsbGluZyB0aGlzIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogVXNlIHRoaXMgdG8gbG9vay11cCBwcm9kdWN0IGRldGFpbHMgYmFzZWQgb24gYSBwdXJjaGFzZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFByb2R1Y3RcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2R1Y3RJRCAtIFRoZSBQcm9kdWN0IElEIG9mIHRoZSBpdGVtIHRvIGdldCBmcm9tIHRoZSBjYXRhbG9nLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHs/UHJvZHVjdH0gVGhlIFByb2R1Y3QgZnJvbSB0aGUgY2F0YWxvZywgb3IgYG51bGxgIGlmIGl0IGNvdWxkbid0IGJlIGZvdW5kIG9yIHRoZSBjYXRhbG9nIGlzbid0IHBvcHVsYXRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdDogZnVuY3Rpb24gKHByb2R1Y3RJRClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2F0YWxvZy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGFsb2dbaV0ucHJvZHVjdElEID09PSBwcm9kdWN0SUQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGFsb2dbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZ2lucyB0aGUgcHVyY2hhc2UgZmxvdyBmb3IgYSBzcGVjaWZpYyBwcm9kdWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGFyZSBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBwdXJjaGFzZWAgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIHB1cmNoYXNlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZXkgY2Fubm90LCBpLmUuIGl0J3Mgbm90IGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLCBvciB0aGUgcmVxdWVzdFxyXG4gICAgICogd2FzIHJlamVjdGVkLCBpdCB3aWxsIGVtaXQgYSBgcHVyY2hhc2VmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3B1cmNoYXNlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9kdWN0SUQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJvZHVjdCB0byBwdXJjaGFzZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGV2ZWxvcGVyUGF5bG9hZF0gLSBBbiBvcHRpb25hbCBkZXZlbG9wZXItc3BlY2lmaWVkIHBheWxvYWQsIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBwdXJjaGFzZSdzIHNpZ25lZCByZXF1ZXN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdXJjaGFzZTogZnVuY3Rpb24gKHByb2R1Y3RJRCwgZGV2ZWxvcGVyUGF5bG9hZClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucGF5bWVudHNSZWFkeSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHtwcm9kdWN0SUQ6IHByb2R1Y3RJRH07XHJcblxyXG4gICAgICAgIGlmIChkZXZlbG9wZXJQYXlsb2FkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uZmlnLmRldmVsb3BlclBheWxvYWQgPSBkZXZlbG9wZXJQYXlsb2FkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBheW1lbnRzLnB1cmNoYXNlQXN5bmMoY29uZmlnKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHB1cmNoYXNlID0gUHVyY2hhc2UoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwdXJjaGFzZScsIHB1cmNoYXNlKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwdXJjaGFzZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyBhbGwgb2YgdGhlIHBsYXllcidzIHVuY29uc3VtZWQgcHVyY2hhc2VzLiBUaGUgZ2FtZSBtdXN0IGZldGNoIHRoZSBjdXJyZW50IHBsYXllcidzIHB1cmNoYXNlc1xyXG4gICAgICogYXMgc29vbiBhcyB0aGUgY2xpZW50IGluZGljYXRlcyB0aGF0IGl0IGlzIHJlYWR5IHRvIHBlcmZvcm0gcGF5bWVudHMtcmVsYXRlZCBvcGVyYXRpb25zLFxyXG4gICAgICogaS5lLiBhdCBnYW1lIHN0YXJ0LiBUaGUgZ2FtZSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBjb25zdW1lIGFueSBwdXJjaGFzZXMgdGhhdCBhcmUgd2FpdGluZyB0byBiZSBjb25zdW1lZC5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgZ2V0cHVyY2hhc2VzYCBldmVudCBhbG9uZ1xyXG4gICAgICogd2l0aCB0aGUgcHVyY2hhc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBnZXRwdXJjaGFzZXNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFB1cmNoYXNlc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRQdXJjaGFzZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHB1cmNoYXNlcyA9IHRoaXMucHVyY2hhc2VzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGF5bWVudHMuZ2V0UHVyY2hhc2VzQXN5bmMoKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHVyY2hhc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHB1cmNoYXNlcy5wdXNoKFB1cmNoYXNlKGl0ZW0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdnZXRwdXJjaGFzZXMnLCBwdXJjaGFzZXMpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHB1cmNoYXNlc2ZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3VtZXMgYSBzcGVjaWZpYyBwdXJjaGFzZSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgcGxheWVyLiBCZWZvcmUgcHJvdmlzaW9uaW5nIGEgcHJvZHVjdCdzIGVmZmVjdHMgdG8gdGhlIHBsYXllcixcclxuICAgICAqIHRoZSBnYW1lIHNob3VsZCByZXF1ZXN0IHRoZSBjb25zdW1wdGlvbiBvZiB0aGUgcHVyY2hhc2VkIHByb2R1Y3QuIE9uY2UgdGhlIHB1cmNoYXNlIGlzIHN1Y2Nlc3NmdWxseSBjb25zdW1lZCxcclxuICAgICAqIHRoZSBnYW1lIHNob3VsZCBpbW1lZGlhdGVseSBwcm92aWRlIHRoZSBwbGF5ZXIgd2l0aCB0aGUgZWZmZWN0cyBvZiB0aGVpciBwdXJjaGFzZS5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgY29uc3VtZXB1cmNoYXNlYCBldmVudCBhbG9uZ1xyXG4gICAgICogd2l0aCB0aGUgcHVyY2hhc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBjb25zdW1lcHVyY2hhc2VmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NvbnN1bWVQdXJjaGFzZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHVyY2hhc2VUb2tlbiAtIFRoZSBwdXJjaGFzZSB0b2tlbiBvZiB0aGUgcHVyY2hhc2UgdGhhdCBzaG91bGQgYmUgY29uc3VtZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNvbnN1bWVQdXJjaGFzZTogZnVuY3Rpb24gKHB1cmNoYXNlVG9rZW4pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5jb25zdW1lUHVyY2hhc2VBc3luYyhwdXJjaGFzZVRva2VuKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjb25zdW1lcHVyY2hhc2UnLCBwdXJjaGFzZVRva2VuKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjb25zdW1lcHVyY2hhc2VmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZm9ybXMgRmFjZWJvb2sgb2YgYSBjdXN0b20gdXBkYXRlIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGdhbWUuXHJcbiAgICAgKiBUaGlzIHdpbGwgdGVtcG9yYXJpbHkgeWllbGQgY29udHJvbCB0byBGYWNlYm9vayBhbmQgRmFjZWJvb2sgd2lsbCBkZWNpZGUgd2hhdCB0byBkbyBiYXNlZCBvbiB3aGF0IHRoZSB1cGRhdGUgaXMuXHJcbiAgICAgKiBPbmNlIEZhY2Vib29rIHJldHVybnMgY29udHJvbCB0byB0aGUgZ2FtZSB0aGUgcGx1Z2luIHdpbGwgZW1pdCBhbiBgdXBkYXRlYCBvciBgdXBkYXRlZmFpbGAgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IG1ha2VzIGFuIGFzeW5jIGNhbGwgdG8gdGhlIEFQSSwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgdGV4dGAgcGFyYW1ldGVyIGlzIGFuIHVwZGF0ZSBwYXlsb2FkIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYFxyXG4gICAgICogdGV4dDoge1xyXG4gICAgICogICAgIGRlZmF1bHQ6ICdYIGp1c3QgaW52YWRlZCBZXFwncyB2aWxsYWdlIScsXHJcbiAgICAgKiAgICAgbG9jYWxpemF0aW9uczoge1xyXG4gICAgICogICAgICAgICBhcl9BUjogJ1ggXFx1MDY0MVxcdTA2NDJcXHUwNjM3IFxcdTA2M0FcXHUwNjMyXFx1MDYyQSAnICtcclxuICAgICAqICAgICAgICAgJ1xcdTA2NDJcXHUwNjMxXFx1MDY0QVxcdTA2MjkgWSEnLFxyXG4gICAgICogICAgICAgICBlbl9VUzogJ1gganVzdCBpbnZhZGVkIFlcXCdzIHZpbGxhZ2UhJyxcclxuICAgICAqICAgICAgICAgZXNfTEE6ICdcXHUwMEExWCBhY2FiYSBkZSBpbnZhZGlyIGVsIHB1ZWJsbyBkZSBZIScsXHJcbiAgICAgKiAgICAgfVxyXG4gICAgICogfVxyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgnQ1VTVE9NJywgY3RhLCB0ZXh0LCBrZXksIGZyYW1lLCB0ZW1wbGF0ZSwgdXBkYXRlRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5mb3JtcyBGYWNlYm9vayBvZiBhIGxlYWRlcmJvYXJkIHVwZGF0ZSB0aGF0IG9jY3VycmVkIGluIHRoZSBnYW1lLlxyXG4gICAgICogVGhpcyB3aWxsIHRlbXBvcmFyaWx5IHlpZWxkIGNvbnRyb2wgdG8gRmFjZWJvb2sgYW5kIEZhY2Vib29rIHdpbGwgZGVjaWRlIHdoYXQgdG8gZG8gYmFzZWQgb24gd2hhdCB0aGUgdXBkYXRlIGlzLlxyXG4gICAgICogT25jZSBGYWNlYm9vayByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIGdhbWUgdGhlIHBsdWdpbiB3aWxsIGVtaXQgYW4gYHVwZGF0ZWAgb3IgYHVwZGF0ZWZhaWxgIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYHRleHRgIHBhcmFtZXRlciBpcyBhbiB1cGRhdGUgcGF5bG9hZCB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHRleHQ6IHtcclxuICAgICAqICAgICBkZWZhdWx0OiAnWCBqdXN0IGludmFkZWQgWVxcJ3MgdmlsbGFnZSEnLFxyXG4gICAgICogICAgIGxvY2FsaXphdGlvbnM6IHtcclxuICAgICAqICAgICAgICAgYXJfQVI6ICdYIFxcdTA2NDFcXHUwNjQyXFx1MDYzNyBcXHUwNjNBXFx1MDYzMlxcdTA2MkEgJyArXHJcbiAgICAgKiAgICAgICAgICdcXHUwNjQyXFx1MDYzMVxcdTA2NEFcXHUwNjI5IFkhJyxcclxuICAgICAqICAgICAgICAgZW5fVVM6ICdYIGp1c3QgaW52YWRlZCBZXFwncyB2aWxsYWdlIScsXHJcbiAgICAgKiAgICAgICAgIGVzX0xBOiAnXFx1MDBBMVggYWNhYmEgZGUgaW52YWRpciBlbCBwdWVibG8gZGUgWSEnLFxyXG4gICAgICogICAgIH1cclxuICAgICAqIH1cclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3VwZGF0ZUxlYWRlcmJvYXJkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxlYWRlcmJvYXJkOiBmdW5jdGlvbiAoY3RhLCB0ZXh0LCBrZXksIGZyYW1lLCB0ZW1wbGF0ZSwgdXBkYXRlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCdMRUFERVJCT0FSRCcsIGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHVwZGF0ZSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI191cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgdXBkYXRlIGFjdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdzaGFyZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdGEgPT09IHVuZGVmaW5lZCkgeyBjdGEgPSAnJzsgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dCA9IHtkZWZhdWx0OiB0ZXh0fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVEYXRhID09PSB1bmRlZmluZWQpIHsgdXBkYXRlRGF0YSA9IHt9OyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gdGhpcy5nYW1lLnRleHR1cmVzLmdldEJhc2U2NChrZXksIGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgICAgICAgICAgY3RhOiBjdGEsXHJcbiAgICAgICAgICAgIGltYWdlOiBpbWFnZURhdGEsXHJcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgICAgICAgICAgZGF0YTogdXBkYXRlRGF0YSxcclxuICAgICAgICAgICAgc3RyYXRlZ3k6ICdJTU1FRElBVEUnLFxyXG4gICAgICAgICAgICBub3RpZmljYXRpb246ICdOT19QVVNIJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC51cGRhdGVBc3luYyhwYXlsb2FkKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCd1cGRhdGVmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgY2xpZW50IHN3aXRjaCB0byBhIGRpZmZlcmVudCBJbnN0YW50IEdhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IG1ha2VzIGFuIGFzeW5jIGNhbGwgdG8gdGhlIEFQSSwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBnYW1lIHN3aXRjaGVzIHN1Y2Nlc3NmdWxseSB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBzd2l0Y2hnYW1lYCBldmVudCBhbmQgdGhlIGNsaWVudCB3aWxsIGxvYWQgdGhlIG5ldyBnYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHN3aXRjaGdhbWVmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3N3aXRjaEdhbWVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElEIC0gVGhlIEFwcGxpY2F0aW9uIElEIG9mIHRoZSBJbnN0YW50IEdhbWUgdG8gc3dpdGNoIHRvLiBUaGUgYXBwbGljYXRpb24gbXVzdCBiZSBhbiBJbnN0YW50IEdhbWUsIGFuZCBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBidXNpbmVzcyBhcyB0aGUgY3VycmVudCBnYW1lLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgcGF5bG9hZC4gVGhpcyB3aWxsIGJlIHNldCBhcyB0aGUgZW50cnlwb2ludCBkYXRhIGZvciB0aGUgZ2FtZSBiZWluZyBzd2l0Y2hlZCB0by4gTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3aXRjaEdhbWU6IGZ1bmN0aW9uIChhcHBJRCwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3N3aXRjaEdhbWVBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXN0ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdC5sZW5ndGggPiAxMDAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N3aXRjaCBHYW1lIGRhdGEgdG9vIGxvbmcuIE1heCAxMDAwIGNoYXJzLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5zd2l0Y2hHYW1lQXN5bmMoYXBwSUQsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ3N3aXRjaGdhbWUnLCBhcHBJRCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3dpdGNoZ2FtZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvbXB0cyB0aGUgdXNlciB0byBjcmVhdGUgYSBzaG9ydGN1dCB0byB0aGUgZ2FtZSBpZiB0aGV5IGFyZSBlbGlnaWJsZSB0by5cclxuICAgICAqIENhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBzZXNzaW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgdXNlciBjaG9vc2UgdG8gY3JlYXRlIGEgc2hvcnRjdXQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgc2hvcnRjdXRjcmVhdGVkYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBzaG9ydGN1dGNyZWF0ZWRmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NyZWF0ZVNob3J0Y3V0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNob3J0Y3V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jYW5DcmVhdGVTaG9ydGN1dEFzeW5jKCkudGhlbihmdW5jdGlvbiAoY2FuQ3JlYXRlU2hvcnRjdXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY2FuQ3JlYXRlU2hvcnRjdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZCSW5zdGFudC5jcmVhdGVTaG9ydGN1dEFzeW5jKCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3Nob3J0Y3V0Y3JlYXRlZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3Nob3J0Y3V0ZmFpbGVkJywgZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWl0cyB0aGUgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNxdWl0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIHF1aXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgRkJJbnN0YW50LnF1aXQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgYW4gYXBwIGV2ZW50IHdpdGggRkIgQW5hbHl0aWNzLlxyXG4gICAgICogXHJcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL2phdmFzY3JpcHQvcmVmZXJlbmNlL3YyLjgjYXBwX2V2ZW50cyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IEZCIEFuYWx5dGljcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsb2dcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBldmVudC4gTXVzdCBiZSAyIHRvIDQwIGNoYXJhY3RlcnMsIGFuZCBjYW4gb25seSBjb250YWluICdfJywgJy0nLCAnICcsIGFuZCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWVdIC0gQW4gb3B0aW9uYWwgbnVtZXJpYyB2YWx1ZSB0aGF0IEZCIEFuYWx5dGljcyBjYW4gY2FsY3VsYXRlIGEgc3VtIHdpdGguXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gLSBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBjYW4gY29udGFpbiB1cCB0byAyNSBrZXktdmFsdWUgcGFpcnMgdG8gYmUgbG9nZ2VkIHdpdGggdGhlIGV2ZW50LiBLZXlzIG11c3QgYmUgMiB0byA0MCBjaGFyYWN0ZXJzLCBhbmQgY2FuIG9ubHkgY29udGFpbiAnXycsICctJywgJyAnLCBhbmQgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFZhbHVlcyBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycyBpbiBsZW5ndGguXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGxvZzogZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwYXJhbXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdsb2dFdmVudCcpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHsgcGFyYW1zID0ge307IH1cclxuXHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID49IDIgJiYgbmFtZS5sZW5ndGggPD0gNDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGQkluc3RhbnQubG9nRXZlbnQobmFtZSwgcGFyc2VGbG9hdCh2YWx1ZSksIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBpbnRlcnN0aXRpYWwgYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB0aGVuIHRoZSBhZCBpcyBwcmVsb2FkZWQgcmVhZHkgZm9yIGRpc3BsYXkgaW4tZ2FtZSB2aWEgdGhlIG1ldGhvZCBgc2hvd0FkKClgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgbG9hZHMgaXQgd2lsbCBlbWl0IHRoZSBgYWRsb2FkZWRgIGV2ZW50LCBwYXNzaW5nIHRoZSBBZEluc3RhbmNlIGFzIHRoZSBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaW52ZW50b3J5IHRvIGZpbGwgaXQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vZmlsbGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcHJlbG9hZEFkc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQsIG9yIGFuIGFycmF5IG9mIElEcywgYXMgY3JlYXRlZCBpbiB5b3VyIEF1ZGllbmNlIE5ldHdvcmsgc2V0dGluZ3Mgd2l0aGluIEZhY2Vib29rLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcmVsb2FkQWRzOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdnZXRJbnRlcnN0aXRpYWxBZEFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwbGFjZW1lbnRJRCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnRJRCA9IFsgcGxhY2VtZW50SUQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHNbaV0uc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCArIHBsYWNlbWVudElELmxlbmd0aCA+PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUb28gbWFueSBBZEluc3RhbmNlcy4gU2hvdyBhbiBhZCBiZWZvcmUgbG9hZGluZyBtb3JlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudElELmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gcGxhY2VtZW50SURbaV07XHJcbiAgICAgICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmdldEludGVyc3RpdGlhbEFkQXN5bmMoaWQpLnRoZW4oZnVuY3Rpb24gKGludGVyc3RpdGlhbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IGludGVyc3RpdGlhbDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJzdGl0aWFsLmxvYWRBc3luYygpO1xyXG5cclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWQgPSBBZEluc3RhbmNlKGlkLCBkYXRhLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWRzLnB1c2goYWQpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkbG9hZGVkJywgYWQpO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdBRFNfTk9fRklMTCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnYWRzbm9maWxsJywgaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnQURTX0ZSRVFVRU5UX0xPQUQnKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2ZyZXF1ZW50bG9hZCcsIGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gcmV3YXJkZWQgdmlkZW8gYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB0aGVuIHRoZSBhZCBpcyBwcmVsb2FkZWQgcmVhZHkgZm9yIGRpc3BsYXkgaW4tZ2FtZSB2aWEgdGhlIG1ldGhvZCBgc2hvd1ZpZGVvKClgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgbG9hZHMgaXQgd2lsbCBlbWl0IHRoZSBgYWRsb2FkZWRgIGV2ZW50LCBwYXNzaW5nIHRoZSBBZEluc3RhbmNlIGFzIHRoZSBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaW52ZW50b3J5IHRvIGZpbGwgaXQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vZmlsbGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcHJlbG9hZFZpZGVvQWRzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHBsYWNlbWVudElEIC0gVGhlIGFkIHBsYWNlbWVudCBJRCwgb3IgYW4gYXJyYXkgb2YgSURzLCBhcyBjcmVhdGVkIGluIHlvdXIgQXVkaWVuY2UgTmV0d29yayBzZXR0aW5ncyB3aXRoaW4gRmFjZWJvb2suXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHByZWxvYWRWaWRlb0FkczogZnVuY3Rpb24gKHBsYWNlbWVudElEKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnZ2V0UmV3YXJkZWRWaWRlb0FzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwbGFjZW1lbnRJRCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnRJRCA9IFsgcGxhY2VtZW50SUQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHNbaV0uc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCArIHBsYWNlbWVudElELmxlbmd0aCA+PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUb28gbWFueSBBZEluc3RhbmNlcy4gU2hvdyBhbiBhZCBiZWZvcmUgbG9hZGluZyBtb3JlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudElELmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gcGxhY2VtZW50SURbaV07XHJcbiAgICAgICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmdldFJld2FyZGVkVmlkZW9Bc3luYyhpZCkudGhlbihmdW5jdGlvbiAocmV3YXJkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gcmV3YXJkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXdhcmQubG9hZEFzeW5jKCk7XHJcblxyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBhZCA9IEFkSW5zdGFuY2UoaWQsIGRhdGEsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmFkcy5wdXNoKGFkKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdhZGxvYWRlZCcsIGFkKTtcclxuXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQURTX05PX0ZJTEwnKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vZmlsbCcsIGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PT0gJ0FEU19GUkVRVUVOVF9MT0FEJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdhZHNmcmVxdWVudGxvYWQnLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXlzIGEgcHJldmlvdXNseSBsb2FkZWQgaW50ZXJzdGl0aWFsIGFkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgaXMgc3VjY2Vzc2Z1bGx5IGRpc3BsYXllZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBhZGZpbmlzaGVkYCBldmVudCwgd2l0aCB0aGUgQWRJbnN0YW5jZSBvYmplY3QgYXMgaXRzIHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vdGxvYWRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc2hvd0FkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQgdG8gZGlzcGxheS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2hvd0FkOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhZCA9IHRoaXMuYWRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFkLnBsYWNlbWVudElEID09PSBwbGFjZW1lbnRJRCAmJiAhYWQuc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkLmluc3RhbmNlLnNob3dBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhZC5zaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkZmluaXNoZWQnLCBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0FEU19OT1RfTE9BREVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vdGxvYWRlZCcsIGFkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnUkFURV9MSU1JVEVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkcmF0ZWxpbWl0ZWQnLCBhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2hvd2Vycm9yJywgZSwgYWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXlzIGEgcHJldmlvdXNseSBsb2FkZWQgaW50ZXJzdGl0aWFsIHZpZGVvIGFkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgaXMgc3VjY2Vzc2Z1bGx5IGRpc3BsYXllZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBhZGZpbmlzaGVkYCBldmVudCwgd2l0aCB0aGUgQWRJbnN0YW5jZSBvYmplY3QgYXMgaXRzIHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vdGxvYWRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc2hvd1ZpZGVvXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQgdG8gZGlzcGxheS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2hvd1ZpZGVvOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhZCA9IHRoaXMuYWRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFkLnBsYWNlbWVudElEID09PSBwbGFjZW1lbnRJRCAmJiBhZC52aWRlbyAmJiAhYWQuc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkLmluc3RhbmNlLnNob3dBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhZC5zaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkZmluaXNoZWQnLCBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0FEU19OT1RfTE9BREVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vdGxvYWRlZCcsIGFkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnUkFURV9MSU1JVEVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkcmF0ZWxpbWl0ZWQnLCBhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2hvd2Vycm9yJywgZSwgYWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHRzIHRvIG1hdGNoIHRoZSBjdXJyZW50IHBsYXllciB3aXRoIG90aGVyIHVzZXJzIGxvb2tpbmcgZm9yIHBlb3BsZSB0byBwbGF5IHdpdGguXHJcbiAgICAgKiBJZiBzdWNjZXNzZnVsLCBhIG5ldyBNZXNzZW5nZXIgZ3JvdXAgdGhyZWFkIHdpbGwgYmUgY3JlYXRlZCBjb250YWluaW5nIHRoZSBtYXRjaGVkIHBsYXllcnMgYW5kIHRoZSBwbGF5ZXIgd2lsbFxyXG4gICAgICogYmUgY29udGV4dCBzd2l0Y2hlZCB0byB0aGF0IHRocmVhZC4gVGhpcyBwbHVnaW4gd2lsbCBhbHNvIGRpc3BhdGNoIHRoZSBgbWF0Y2hwbGF5ZXJgIGV2ZW50LCBjb250YWluaW5nIHRoZSBuZXcgY29udGV4dCBJRCBhbmQgVHlwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRlZmF1bHQgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgcGxheWVycyBpbiBvbmUgbWF0Y2hlZCB0aHJlYWQgYXJlIDIgYW5kIDIwIHJlc3BlY3RpdmVseSxcclxuICAgICAqIGRlcGVuZGluZyBvbiBob3cgbWFueSBwbGF5ZXJzIGFyZSB0cnlpbmcgdG8gZ2V0IG1hdGNoZWQgYXJvdW5kIHRoZSBzYW1lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgaW4gYGZiYXBwLWNvbmZpZy5qc29uYC4gU2VlIHRoZSBCdW5kbGUgQ29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGRvY3VtZW50YXRpb24gYWJvdXQgYGZiYXBwLWNvbmZpZy5qc29uYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNtYXRjaFBsYXllclxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW21hdGNoVGFnXSAtIE9wdGlvbmFsIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwbGF5ZXIgdXNlZCB0byBncm91cCB0aGVtIHdpdGggc2ltaWxhciBwbGF5ZXJzLiBQbGF5ZXJzIHdpbGwgb25seSBiZSBncm91cGVkIHdpdGggb3RoZXIgcGxheWVycyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgdGFnLiBUaGUgdGFnIG11c3Qgb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyBhbmQgYmUgMTAwIGNoYXJhY3RlcnMgb3IgbGVzcyBpbiBsZW5ndGguXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzd2l0Y2hJbW1lZGlhdGVseT1mYWxzZV0gLSBPcHRpb25hbCBleHRyYSBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgcGxheWVyIHNob3VsZCBiZSBpbW1lZGlhdGVseSBzd2l0Y2hlZCB0byB0aGUgbmV3IGNvbnRleHQgd2hlbiBhIG1hdGNoIGlzIGZvdW5kLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBiZSBmYWxzZSB3aGljaCB3aWxsIG1lYW4gdGhlIHBsYXllciBuZWVkcyBleHBsaWNpdGx5IHByZXNzIHBsYXkgYWZ0ZXIgYmVpbmcgbWF0Y2hlZCB0byBzd2l0Y2ggdG8gdGhlIG5ldyBjb250ZXh0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBtYXRjaFBsYXllcjogZnVuY3Rpb24gKG1hdGNoVGFnLCBzd2l0Y2hJbW1lZGlhdGVseSlcclxuICAgIHtcclxuICAgICAgICBpZiAobWF0Y2hUYWcgPT09IHVuZGVmaW5lZCkgeyBtYXRjaFRhZyA9IG51bGw7IH1cclxuICAgICAgICBpZiAoc3dpdGNoSW1tZWRpYXRlbHkgPT09IHVuZGVmaW5lZCkgeyBzd2l0Y2hJbW1lZGlhdGVseSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnbWF0Y2hQbGF5ZXJBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQubWF0Y2hQbGF5ZXJBc3luYyhtYXRjaFRhZywgc3dpdGNoSW1tZWRpYXRlbHkpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmdldElEKCk7XHJcbiAgICAgICAgICAgIF90aGlzLmdldFR5cGUoKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ21hdGNocGxheWVyJywgX3RoaXMuY29udGV4dElELCBfdGhpcy5jb250ZXh0VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIGEgc3BlY2lmaWMgbGVhZGVyYm9hcmQgYmVsb25naW5nIHRvIHRoaXMgSW5zdGFudCBHYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGF0YSBpcyByZXF1ZXN0ZWQgaW4gYW4gYXN5bmMgY2FsbCwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIGNhbGwgY29tcGxldGVzIHRoZSBgZ2V0bGVhZGVyYm9hcmRgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBhbG9uZyB3aXRoIGEgTGVhZGVyYm9hcmQgb2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldExlYWRlcmJvYXJkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxlYWRlcmJvYXJkLiBFYWNoIGxlYWRlcmJvYXJkIGZvciBhbiBJbnN0YW50IEdhbWUgbXVzdCBoYXZlIGl0cyBvd24gZGlzdGluY3QgbmFtZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVhZGVyYm9hcmQ6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnZ2V0TGVhZGVyYm9hcmRBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQuZ2V0TGVhZGVyYm9hcmRBc3luYyhuYW1lKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxlYWRlcmJvYXJkID0gbmV3IExlYWRlcmJvYXJkKF90aGlzLCBkYXRhKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmxlYWRlcmJvYXJkc1tuYW1lXSA9IGxlYWRlcmJvYXJkO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0bGVhZGVyYm9hcmQnLCBsZWFkZXJib2FyZCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWl0cyB0aGUgRmFjZWJvb2sgQVBJIGFuZCB0aGVuIGRlc3Ryb3lzIHRoaXMgcGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBGQkluc3RhbnQucXVpdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLmNhdGFsb2cgPSBbXTtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGVhZGVyYm9hcmRzID0gW107XHJcbiAgICAgICAgdGhpcy5hZHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar LeaderboardScore = __webpack_require__(/*! ./LeaderboardScore */ \"./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js\");\r\n\r\n/**\r\n * @classdesc\r\n * This class represents one single Leaderboard that belongs to a Facebook Instant Game.\r\n * \r\n * You do not need to instantiate this class directly, it will be created when you use the\r\n * `getLeaderboard()` method of the main plugin.\r\n *\r\n * @class FacebookInstantGamesLeaderboard\r\n * @memberOf Phaser\r\n * @constructor\r\n * @extends Phaser.Events.EventEmitter\r\n * @since 3.13.0\r\n * \r\n * @param {Phaser.FacebookInstantGamesPlugin} plugin - A reference to the Facebook Instant Games Plugin.\r\n * @param {any} data - An Instant Game leaderboard instance.\r\n */\r\nvar Leaderboard = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Leaderboard (plugin, data)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Facebook Instant Games Plugin.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#plugin\r\n         * @type {Phaser.FacebookInstantGamesPlugin}\r\n         * @since 3.13.0\r\n         */\r\n        this.plugin = plugin;\r\n\r\n        /**\r\n         * An Instant Game leaderboard instance.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#ref\r\n         * @type {any}\r\n         * @since 3.13.0\r\n         */\r\n        this.ref = data;\r\n\r\n        /**\r\n         * The name of the leaderboard.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#name\r\n         * @type {string}\r\n         * @since 3.13.0\r\n         */\r\n        this.name = data.getName();\r\n\r\n        /**\r\n         * The ID of the context that the leaderboard is associated with, or null if the leaderboard is not tied to a particular context.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#contextID\r\n         * @type {string}\r\n         * @since 3.13.0\r\n         */\r\n        this.contextID = data.getContextID();\r\n\r\n        /**\r\n         * The total number of player entries in the leaderboard.\r\n         * This value defaults to zero. Populate it via the `getEntryCount()` method.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#entryCount\r\n         * @type {integer}\r\n         * @since 3.13.0\r\n         */\r\n        this.entryCount = 0;\r\n\r\n        /**\r\n         * The players score object.\r\n         * This value defaults to `null`. Populate it via the `getPlayerScore()` method.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#playerScore\r\n         * @type {LeaderboardScore}\r\n         * @since 3.13.0\r\n         */\r\n        this.playerScore = null;\r\n\r\n        /**\r\n         * The scores in the Leaderboard from the currently requested range.\r\n         * This value defaults to an empty array. Populate it via the `getScores()` method.\r\n         * The contents of this array are reset each time `getScores()` is called.\r\n         *\r\n         * @name Phaser.FacebookInstantGamesLeaderboard#scores\r\n         * @type {LeaderboardScore[]}\r\n         * @since 3.13.0\r\n         */\r\n        this.scores = [];\r\n\r\n        this.getEntryCount();\r\n    },\r\n\r\n    /**\r\n     * Fetches the total number of player entries in the leaderboard.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes this Leaderboard will emit the `getentrycount` event along with the count and name of the Leaderboard.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesLeaderboard#getEntryCount\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Leaderboard instance.\r\n     */\r\n    getEntryCount: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        this.ref.getEntryCountAsync().then(function (count)\r\n        {\r\n            _this.entryCount = count;\r\n\r\n            _this.emit('getentrycount', count, _this.name);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the player's score. If the player has an existing score, the old score will only be replaced if the new score is better than it.\r\n     * NOTE: If the leaderboard is associated with a specific context, the game must be in that context to set a score for the player.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes this Leaderboard will emit the `setscore` event along with the LeaderboardScore object and the name of the Leaderboard.\r\n     * \r\n     * If the save fails the event will send `null` as the score value.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesLeaderboard#setScore\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} score - The new score for the player. Must be a 64-bit integer number.\r\n     * @param {(string|any)} [data] - Metadata to associate with the stored score. Must be less than 2KB in size. If an object is given it will be passed to `JSON.stringify`.\r\n     * \r\n     * @return {this} This Leaderboard instance.\r\n     */\r\n    setScore: function (score, data)\r\n    {\r\n        if (data === undefined) { data = ''; }\r\n\r\n        if (typeof data === 'object')\r\n        {\r\n            data = JSON.stringify(data);\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        this.ref.setScoreAsync(score, data).then(function (entry)\r\n        {\r\n            if (entry)\r\n            {\r\n                var score = LeaderboardScore(entry);\r\n\r\n                _this.playerScore = score;\r\n    \r\n                _this.emit('setscore', score, _this.name);\r\n            }\r\n            else\r\n            {\r\n                _this.emit('setscore', null, _this.name);\r\n            }\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the players leaderboard entry and stores it in the `playerScore` property.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes this Leaderboard will emit the `getplayerscore` event along with the score and the name of the Leaderboard.\r\n     * \r\n     * If the player has not yet saved a score, the event will send `null` as the score value, and `playerScore` will be set to `null` as well.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesLeaderboard#getPlayerScore\r\n     * @since 3.13.0\r\n     * \r\n     * @return {this} This Leaderboard instance.\r\n     */\r\n    getPlayerScore: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        this.ref.getPlayerEntryAsync().then(function (entry)\r\n        {\r\n            if (entry)\r\n            {\r\n                var score = LeaderboardScore(entry);\r\n\r\n                _this.playerScore = score;\r\n    \r\n                _this.emit('getplayerscore', score, _this.name);\r\n            }\r\n            else\r\n            {\r\n                _this.emit('getplayerscore', null, _this.name);\r\n            }\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieves a set of leaderboard entries, ordered by score ranking in the leaderboard.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes this Leaderboard will emit the `getscores` event along with an array of LeaderboardScore entries and the name of the Leaderboard.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesLeaderboard#getScores\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} [count=10] - The number of entries to attempt to fetch from the leaderboard. Currently, up to a maximum of 100 entries may be fetched per query.\r\n     * @param {integer} [offset=0] - The offset from the top of the leaderboard that entries will be fetched from.\r\n     * \r\n     * @return {this} This Leaderboard instance.\r\n     */\r\n    getScores: function (count, offset)\r\n    {\r\n        if (count === undefined) { count = 10; }\r\n        if (offset === undefined) { offset = 0; }\r\n\r\n        var _this = this;\r\n\r\n        this.ref.getEntriesAsync(count, offset).then(function (entries)\r\n        {\r\n            _this.scores = [];\r\n\r\n            entries.forEach(function (entry)\r\n            {\r\n                _this.scores.push(LeaderboardScore(entry));\r\n            });\r\n\r\n            _this.emit('getscores', _this.scores, _this.name);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieves a set of leaderboard entries, based on the current player's connected players (including the current player), ordered by local rank within the set of connected players.\r\n     * \r\n     * The data is requested in an async call, so the result isn't available immediately.\r\n     * \r\n     * When the call completes this Leaderboard will emit the `getconnectedscores` event along with an array of LeaderboardScore entries and the name of the Leaderboard.\r\n     *\r\n     * @method Phaser.FacebookInstantGamesLeaderboard#getConnectedScores\r\n     * @since 3.16.0\r\n     * \r\n     * @return {this} This Leaderboard instance.\r\n     */\r\n    getConnectedScores: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        this.ref.getConnectedPlayerEntriesAsync().then(function (entries)\r\n        {\r\n            _this.scores = [];\r\n\r\n            entries.forEach(function (entry)\r\n            {\r\n                _this.scores.push(LeaderboardScore(entry));\r\n            });\r\n\r\n            _this.emit('getconnectedscores', _this.scores, _this.name);\r\n\r\n        }).catch(function (e)\r\n        {\r\n            console.warn(e);\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Leaderboard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9MZWFkZXJib2FyZC5qcz8yYTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLDJGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QyxXQUFXLElBQUk7QUFDZjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxZQUFZO0FBQzlDLG1DQUFtQyxZQUFZOztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0xlYWRlcmJvYXJkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgTGVhZGVyYm9hcmRTY29yZSA9IHJlcXVpcmUoJy4vTGVhZGVyYm9hcmRTY29yZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIG9uZSBzaW5nbGUgTGVhZGVyYm9hcmQgdGhhdCBiZWxvbmdzIHRvIGEgRmFjZWJvb2sgSW5zdGFudCBHYW1lLlxyXG4gKiBcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IHdpbGwgYmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlXHJcbiAqIGBnZXRMZWFkZXJib2FyZCgpYCBtZXRob2Qgb2YgdGhlIG1haW4gcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZFxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbn0gcGx1Z2luIC0gQSByZWZlcmVuY2UgdG8gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIEFuIEluc3RhbnQgR2FtZSBsZWFkZXJib2FyZCBpbnN0YW5jZS5cclxuICovXHJcbnZhciBMZWFkZXJib2FyZCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGVhZGVyYm9hcmQgKHBsdWdpbiwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjcGx1Z2luXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIEluc3RhbnQgR2FtZSBsZWFkZXJib2FyZCBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI3JlZlxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVmID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGxlYWRlcmJvYXJkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGEuZ2V0TmFtZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgSUQgb2YgdGhlIGNvbnRleHQgdGhhdCB0aGUgbGVhZGVyYm9hcmQgaXMgYXNzb2NpYXRlZCB3aXRoLCBvciBudWxsIGlmIHRoZSBsZWFkZXJib2FyZCBpcyBub3QgdGllZCB0byBhIHBhcnRpY3VsYXIgY29udGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2NvbnRleHRJRFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dElEID0gZGF0YS5nZXRDb250ZXh0SUQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwbGF5ZXIgZW50cmllcyBpbiB0aGUgbGVhZGVyYm9hcmQuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBkZWZhdWx0cyB0byB6ZXJvLiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRFbnRyeUNvdW50KClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2VudHJ5Q291bnRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyeUNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBsYXllcnMgc2NvcmUgb2JqZWN0LlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYG51bGxgLiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRQbGF5ZXJTY29yZSgpYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNwbGF5ZXJTY29yZVxyXG4gICAgICAgICAqIEB0eXBlIHtMZWFkZXJib2FyZFNjb3JlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXllclNjb3JlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjb3JlcyBpbiB0aGUgTGVhZGVyYm9hcmQgZnJvbSB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCByYW5nZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGRlZmF1bHRzIHRvIGFuIGVtcHR5IGFycmF5LiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRTY29yZXMoKWAgbWV0aG9kLlxyXG4gICAgICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSByZXNldCBlYWNoIHRpbWUgYGdldFNjb3JlcygpYCBpcyBjYWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNzY29yZXNcclxuICAgICAgICAgKiBAdHlwZSB7TGVhZGVyYm9hcmRTY29yZVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmdldEVudHJ5Q291bnQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGZXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGxheWVyIGVudHJpZXMgaW4gdGhlIGxlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGF0YSBpcyByZXF1ZXN0ZWQgaW4gYW4gYXN5bmMgY2FsbCwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIGNhbGwgY29tcGxldGVzIHRoaXMgTGVhZGVyYm9hcmQgd2lsbCBlbWl0IHRoZSBgZ2V0ZW50cnljb3VudGAgZXZlbnQgYWxvbmcgd2l0aCB0aGUgY291bnQgYW5kIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjZ2V0RW50cnlDb3VudFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRFbnRyeUNvdW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLmdldEVudHJ5Q291bnRBc3luYygpLnRoZW4oZnVuY3Rpb24gKGNvdW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW50cnlDb3VudCA9IGNvdW50O1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0ZW50cnljb3VudCcsIGNvdW50LCBfdGhpcy5uYW1lKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHBsYXllcidzIHNjb3JlLiBJZiB0aGUgcGxheWVyIGhhcyBhbiBleGlzdGluZyBzY29yZSwgdGhlIG9sZCBzY29yZSB3aWxsIG9ubHkgYmUgcmVwbGFjZWQgaWYgdGhlIG5ldyBzY29yZSBpcyBiZXR0ZXIgdGhhbiBpdC5cclxuICAgICAqIE5PVEU6IElmIHRoZSBsZWFkZXJib2FyZCBpcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBjb250ZXh0LCB0aGUgZ2FtZSBtdXN0IGJlIGluIHRoYXQgY29udGV4dCB0byBzZXQgYSBzY29yZSBmb3IgdGhlIHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYHNldHNjb3JlYCBldmVudCBhbG9uZyB3aXRoIHRoZSBMZWFkZXJib2FyZFNjb3JlIG9iamVjdCBhbmQgdGhlIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgc2F2ZSBmYWlscyB0aGUgZXZlbnQgd2lsbCBzZW5kIGBudWxsYCBhcyB0aGUgc2NvcmUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNzZXRTY29yZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHNjb3JlIC0gVGhlIG5ldyBzY29yZSBmb3IgdGhlIHBsYXllci4gTXVzdCBiZSBhIDY0LWJpdCBpbnRlZ2VyIG51bWJlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbZGF0YV0gLSBNZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc3RvcmVkIHNjb3JlLiBNdXN0IGJlIGxlc3MgdGhhbiAyS0IgaW4gc2l6ZS4gSWYgYW4gb2JqZWN0IGlzIGdpdmVuIGl0IHdpbGwgYmUgcGFzc2VkIHRvIGBKU09OLnN0cmluZ2lmeWAuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTGVhZGVyYm9hcmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjb3JlOiBmdW5jdGlvbiAoc2NvcmUsIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgeyBkYXRhID0gJyc7IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLnNldFNjb3JlQXN5bmMoc2NvcmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NvcmUgPSBMZWFkZXJib2FyZFNjb3JlKGVudHJ5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wbGF5ZXJTY29yZSA9IHNjb3JlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdzZXRzY29yZScsIHNjb3JlLCBfdGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3NldHNjb3JlJywgbnVsbCwgX3RoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBsYXllcnMgbGVhZGVyYm9hcmQgZW50cnkgYW5kIHN0b3JlcyBpdCBpbiB0aGUgYHBsYXllclNjb3JlYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYGdldHBsYXllcnNjb3JlYCBldmVudCBhbG9uZyB3aXRoIHRoZSBzY29yZSBhbmQgdGhlIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgcGxheWVyIGhhcyBub3QgeWV0IHNhdmVkIGEgc2NvcmUsIHRoZSBldmVudCB3aWxsIHNlbmQgYG51bGxgIGFzIHRoZSBzY29yZSB2YWx1ZSwgYW5kIGBwbGF5ZXJTY29yZWAgd2lsbCBiZSBzZXQgdG8gYG51bGxgIGFzIHdlbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNnZXRQbGF5ZXJTY29yZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRQbGF5ZXJTY29yZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlZi5nZXRQbGF5ZXJFbnRyeUFzeW5jKCkudGhlbihmdW5jdGlvbiAoZW50cnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzY29yZSA9IExlYWRlcmJvYXJkU2NvcmUoZW50cnkpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLnBsYXllclNjb3JlID0gc2NvcmU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHBsYXllcnNjb3JlJywgc2NvcmUsIF90aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0cGxheWVyc2NvcmUnLCBudWxsLCBfdGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGEgc2V0IG9mIGxlYWRlcmJvYXJkIGVudHJpZXMsIG9yZGVyZWQgYnkgc2NvcmUgcmFua2luZyBpbiB0aGUgbGVhZGVyYm9hcmQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhpcyBMZWFkZXJib2FyZCB3aWxsIGVtaXQgdGhlIGBnZXRzY29yZXNgIGV2ZW50IGFsb25nIHdpdGggYW4gYXJyYXkgb2YgTGVhZGVyYm9hcmRTY29yZSBlbnRyaWVzIGFuZCB0aGUgbmFtZSBvZiB0aGUgTGVhZGVyYm9hcmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNnZXRTY29yZXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9MTBdIC0gVGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGF0dGVtcHQgdG8gZmV0Y2ggZnJvbSB0aGUgbGVhZGVyYm9hcmQuIEN1cnJlbnRseSwgdXAgdG8gYSBtYXhpbXVtIG9mIDEwMCBlbnRyaWVzIG1heSBiZSBmZXRjaGVkIHBlciBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW29mZnNldD0wXSAtIFRoZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBsZWFkZXJib2FyZCB0aGF0IGVudHJpZXMgd2lsbCBiZSBmZXRjaGVkIGZyb20uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTGVhZGVyYm9hcmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldFNjb3JlczogZnVuY3Rpb24gKGNvdW50LCBvZmZzZXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsgY291bnQgPSAxMDsgfVxyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXQgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLmdldEVudHJpZXNBc3luYyhjb3VudCwgb2Zmc2V0KS50aGVuKGZ1bmN0aW9uIChlbnRyaWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuc2NvcmVzID0gW107XHJcblxyXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zY29yZXMucHVzaChMZWFkZXJib2FyZFNjb3JlKGVudHJ5KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0c2NvcmVzJywgX3RoaXMuc2NvcmVzLCBfdGhpcy5uYW1lKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIHNldCBvZiBsZWFkZXJib2FyZCBlbnRyaWVzLCBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGF5ZXIncyBjb25uZWN0ZWQgcGxheWVycyAoaW5jbHVkaW5nIHRoZSBjdXJyZW50IHBsYXllciksIG9yZGVyZWQgYnkgbG9jYWwgcmFuayB3aXRoaW4gdGhlIHNldCBvZiBjb25uZWN0ZWQgcGxheWVycy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYGdldGNvbm5lY3RlZHNjb3Jlc2AgZXZlbnQgYWxvbmcgd2l0aCBhbiBhcnJheSBvZiBMZWFkZXJib2FyZFNjb3JlIGVudHJpZXMgYW5kIHRoZSBuYW1lIG9mIHRoZSBMZWFkZXJib2FyZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2dldENvbm5lY3RlZFNjb3Jlc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRDb25uZWN0ZWRTY29yZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5yZWYuZ2V0Q29ubmVjdGVkUGxheWVyRW50cmllc0FzeW5jKCkudGhlbihmdW5jdGlvbiAoZW50cmllcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLnNjb3JlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2NvcmVzLnB1c2goTGVhZGVyYm9hcmRTY29yZShlbnRyeSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldGNvbm5lY3RlZHNjb3JlcycsIF90aGlzLnNjb3JlcywgX3RoaXMubmFtZSk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWFkZXJib2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} LeaderboardScore\r\n *\r\n * @property {integer} score - An integer score value.\r\n * @property {string} scoreFormatted - The score value, formatted with the score format associated with the leaderboard.\r\n * @property {integer} timestamp - The Unix timestamp of when the leaderboard entry was last updated.\r\n * @property {integer} rank - The entry's leaderboard ranking.\r\n * @property {string} data - The developer-specified payload associated with the score, or null if one was not set.\r\n * @property {string} playerName - The player's localized display name.\r\n * @property {string} playerPhotoURL -  A url to the player's public profile photo.\r\n * @property {string} playerID - The game's unique identifier for the player.\r\n */\r\n\r\nvar LeaderboardScore = function (entry)\r\n{\r\n    return {\r\n        score: entry.getScore(),\r\n        scoreFormatted: entry.getFormattedScore(),\r\n        timestamp: entry.getTimestamp(),\r\n        rank: entry.getRank(),\r\n        data: entry.getExtraData(),\r\n        playerName: entry.getPlayer().getName(),\r\n        playerPhotoURL: entry.getPlayer().getPhoto(),\r\n        playerID: entry.getPlayer().getID()\r\n    };\r\n};\r\n\r\nmodule.exports = LeaderboardScore;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9MZWFkZXJib2FyZFNjb3JlLmpzP2MwNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsT0FBTztBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0xlYWRlcmJvYXJkU2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExlYWRlcmJvYXJkU2NvcmVcclxuICpcclxuICogQHByb3BlcnR5IHtpbnRlZ2VyfSBzY29yZSAtIEFuIGludGVnZXIgc2NvcmUgdmFsdWUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY29yZUZvcm1hdHRlZCAtIFRoZSBzY29yZSB2YWx1ZSwgZm9ybWF0dGVkIHdpdGggdGhlIHNjb3JlIGZvcm1hdCBhc3NvY2lhdGVkIHdpdGggdGhlIGxlYWRlcmJvYXJkLlxyXG4gKiBAcHJvcGVydHkge2ludGVnZXJ9IHRpbWVzdGFtcCAtIFRoZSBVbml4IHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBsZWFkZXJib2FyZCBlbnRyeSB3YXMgbGFzdCB1cGRhdGVkLlxyXG4gKiBAcHJvcGVydHkge2ludGVnZXJ9IHJhbmsgLSBUaGUgZW50cnkncyBsZWFkZXJib2FyZCByYW5raW5nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0YSAtIFRoZSBkZXZlbG9wZXItc3BlY2lmaWVkIHBheWxvYWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzY29yZSwgb3IgbnVsbCBpZiBvbmUgd2FzIG5vdCBzZXQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJOYW1lIC0gVGhlIHBsYXllcidzIGxvY2FsaXplZCBkaXNwbGF5IG5hbWUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJQaG90b1VSTCAtICBBIHVybCB0byB0aGUgcGxheWVyJ3MgcHVibGljIHByb2ZpbGUgcGhvdG8uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJJRCAtIFRoZSBnYW1lJ3MgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwbGF5ZXIuXHJcbiAqL1xyXG5cclxudmFyIExlYWRlcmJvYXJkU2NvcmUgPSBmdW5jdGlvbiAoZW50cnkpXHJcbntcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc2NvcmU6IGVudHJ5LmdldFNjb3JlKCksXHJcbiAgICAgICAgc2NvcmVGb3JtYXR0ZWQ6IGVudHJ5LmdldEZvcm1hdHRlZFNjb3JlKCksXHJcbiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS5nZXRUaW1lc3RhbXAoKSxcclxuICAgICAgICByYW5rOiBlbnRyeS5nZXRSYW5rKCksXHJcbiAgICAgICAgZGF0YTogZW50cnkuZ2V0RXh0cmFEYXRhKCksXHJcbiAgICAgICAgcGxheWVyTmFtZTogZW50cnkuZ2V0UGxheWVyKCkuZ2V0TmFtZSgpLFxyXG4gICAgICAgIHBsYXllclBob3RvVVJMOiBlbnRyeS5nZXRQbGF5ZXIoKS5nZXRQaG90bygpLFxyXG4gICAgICAgIHBsYXllcklEOiBlbnRyeS5nZXRQbGF5ZXIoKS5nZXRJRCgpXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWFkZXJib2FyZFNjb3JlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/Product.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/Product.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../src/utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @typedef {object} Product\r\n *\r\n * @property {string} [title] - The title of the product.\r\n * @property {string} [productID] - The product's game-specified identifier.\r\n * @property {string} [description] - The product description.\r\n * @property {string} [imageURI] - A link to the product's associated image.\r\n * @property {string} [price] - The price of the product.\r\n * @property {string} [priceCurrencyCode] - The currency code for the product.\r\n */\r\n\r\nvar Product = function (data)\r\n{\r\n    return {\r\n        title: GetFastValue(data, 'title', ''),\r\n        productID: GetFastValue(data, 'productID', ''),\r\n        description: GetFastValue(data, 'description', ''),\r\n        imageURI: GetFastValue(data, 'imageURI', ''),\r\n        price: GetFastValue(data, 'price', ''),\r\n        priceCurrencyCode: GetFastValue(data, 'priceCurrencyCode', '')\r\n    };\r\n};\r\n\r\nmodule.exports = Product;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9Qcm9kdWN0LmpzPzhkNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLHNHQUF3Qzs7QUFFbkU7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2ZiaW5zdGFudC9zcmMvUHJvZHVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcm9kdWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGl0bGVdIC0gVGhlIHRpdGxlIG9mIHRoZSBwcm9kdWN0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Byb2R1Y3RJRF0gLSBUaGUgcHJvZHVjdCdzIGdhbWUtc3BlY2lmaWVkIGlkZW50aWZpZXIuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dIC0gVGhlIHByb2R1Y3QgZGVzY3JpcHRpb24uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW1hZ2VVUkldIC0gQSBsaW5rIHRvIHRoZSBwcm9kdWN0J3MgYXNzb2NpYXRlZCBpbWFnZS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmljZV0gLSBUaGUgcHJpY2Ugb2YgdGhlIHByb2R1Y3QuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpY2VDdXJyZW5jeUNvZGVdIC0gVGhlIGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwcm9kdWN0LlxyXG4gKi9cclxuXHJcbnZhciBQcm9kdWN0ID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6IEdldEZhc3RWYWx1ZShkYXRhLCAndGl0bGUnLCAnJyksXHJcbiAgICAgICAgcHJvZHVjdElEOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3Byb2R1Y3RJRCcsICcnKSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogR2V0RmFzdFZhbHVlKGRhdGEsICdkZXNjcmlwdGlvbicsICcnKSxcclxuICAgICAgICBpbWFnZVVSSTogR2V0RmFzdFZhbHVlKGRhdGEsICdpbWFnZVVSSScsICcnKSxcclxuICAgICAgICBwcmljZTogR2V0RmFzdFZhbHVlKGRhdGEsICdwcmljZScsICcnKSxcclxuICAgICAgICBwcmljZUN1cnJlbmN5Q29kZTogR2V0RmFzdFZhbHVlKGRhdGEsICdwcmljZUN1cnJlbmN5Q29kZScsICcnKVxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvZHVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Product.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/plugins/fbinstant/src/Purchase.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/plugins/fbinstant/src/Purchase.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2018 Photon Storm Ltd.\r\n * @license      {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../src/utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @typedef {object} Purchase\r\n *\r\n * @property {string} [developerPayload] - A developer-specified string, provided during the purchase of the product.\r\n * @property {string} [paymentID] - The identifier for the purchase transaction.\r\n * @property {string} [productID] - The product's game-specified identifier.\r\n * @property {string} [purchaseTime] - Unix timestamp of when the purchase occurred.\r\n * @property {string} [purchaseToken] - A token representing the purchase that may be used to consume the purchase.\r\n * @property {string} [signedRequest] - Server-signed encoding of the purchase request.\r\n */\r\n\r\nvar Purchase = function (data)\r\n{\r\n    return {\r\n        developerPayload: GetFastValue(data, 'developerPayload', ''),\r\n        paymentID: GetFastValue(data, 'paymentID', ''),\r\n        productID: GetFastValue(data, 'productID', ''),\r\n        purchaseTime: GetFastValue(data, 'purchaseTime', ''),\r\n        purchaseToken: GetFastValue(data, 'purchaseToken', ''),\r\n        signedRequest: GetFastValue(data, 'signedRequest', '')\r\n    };\r\n};\r\n\r\nmodule.exports = Purchase;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9QdXJjaGFzZS5qcz9mOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxzR0FBd0M7O0FBRW5FO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL1B1cmNoYXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFB1cmNoYXNlXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGV2ZWxvcGVyUGF5bG9hZF0gLSBBIGRldmVsb3Blci1zcGVjaWZpZWQgc3RyaW5nLCBwcm92aWRlZCBkdXJpbmcgdGhlIHB1cmNoYXNlIG9mIHRoZSBwcm9kdWN0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BheW1lbnRJRF0gLSBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHB1cmNoYXNlIHRyYW5zYWN0aW9uLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Byb2R1Y3RJRF0gLSBUaGUgcHJvZHVjdCdzIGdhbWUtc3BlY2lmaWVkIGlkZW50aWZpZXIuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHVyY2hhc2VUaW1lXSAtIFVuaXggdGltZXN0YW1wIG9mIHdoZW4gdGhlIHB1cmNoYXNlIG9jY3VycmVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3B1cmNoYXNlVG9rZW5dIC0gQSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHB1cmNoYXNlIHRoYXQgbWF5IGJlIHVzZWQgdG8gY29uc3VtZSB0aGUgcHVyY2hhc2UuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2lnbmVkUmVxdWVzdF0gLSBTZXJ2ZXItc2lnbmVkIGVuY29kaW5nIG9mIHRoZSBwdXJjaGFzZSByZXF1ZXN0LlxyXG4gKi9cclxuXHJcbnZhciBQdXJjaGFzZSA9IGZ1bmN0aW9uIChkYXRhKVxyXG57XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldmVsb3BlclBheWxvYWQ6IEdldEZhc3RWYWx1ZShkYXRhLCAnZGV2ZWxvcGVyUGF5bG9hZCcsICcnKSxcclxuICAgICAgICBwYXltZW50SUQ6IEdldEZhc3RWYWx1ZShkYXRhLCAncGF5bWVudElEJywgJycpLFxyXG4gICAgICAgIHByb2R1Y3RJRDogR2V0RmFzdFZhbHVlKGRhdGEsICdwcm9kdWN0SUQnLCAnJyksXHJcbiAgICAgICAgcHVyY2hhc2VUaW1lOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3B1cmNoYXNlVGltZScsICcnKSxcclxuICAgICAgICBwdXJjaGFzZVRva2VuOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3B1cmNoYXNlVG9rZW4nLCAnJyksXHJcbiAgICAgICAgc2lnbmVkUmVxdWVzdDogR2V0RmFzdFZhbHVlKGRhdGEsICdzaWduZWRSZXF1ZXN0JywgJycpXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQdXJjaGFzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Purchase.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/Angle.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/actions/Angle.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `angle` property,\r\n * and then adds the given value to each of their `angle` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `Angle(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.Angle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `angle` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar Angle = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'angle', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = Angle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0FuZ2xlLmpzPzAzZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvQW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgYSBwdWJsaWMgYGFuZ2xlYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgYW5nbGVgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEFuZ2xlKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYGFuZ2xlYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBBbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAnYW5nbGUnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Angle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/Call.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/actions/Call.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and passes each of them to the given callback.\r\n *\r\n * @function Phaser.Actions.Call\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {Phaser.Types.Actions.CallCallback} callback - The callback to be invoked. It will be passed just one argument: the item from the array.\r\n * @param {*} context - The scope in which the callback will be invoked.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that was passed to this Action.\r\n */\r\nvar Call = function (items, callback, context)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n\r\n        callback.call(context, item);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = Call;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0NhbGwuanM/ZjQxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLGtDQUFrQztBQUM3QyxXQUFXLEVBQUU7QUFDYjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0NhbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCBwYXNzZXMgZWFjaCBvZiB0aGVtIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkNhbGxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BY3Rpb25zLkNhbGxDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4gSXQgd2lsbCBiZSBwYXNzZWQganVzdCBvbmUgYXJndW1lbnQ6IHRoZSBpdGVtIGZyb20gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgQ2FsbCA9IGZ1bmN0aW9uIChpdGVtcywgY2FsbGJhY2ssIGNvbnRleHQpXHJcbntcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbGw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Call.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/GetFirst.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/actions/GetFirst.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and returns the first element in the array that has properties which match\r\n * all of those specified in the `compare` object. For example, if the compare object was: `{ scaleX: 0.5, alpha: 1 }`\r\n * then it would return the first item which had the property `scaleX` set to 0.5 and `alpha` set to 1.\r\n *\r\n * To use this with a Group: `GetFirst(group.getChildren(), compare, index)`\r\n *\r\n * @function Phaser.Actions.GetFirst\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be searched by this action.\r\n * @param {object} compare - The comparison object. Each property in this object will be checked against the items of the array.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n *\r\n * @return {?(object|Phaser.GameObjects.GameObject)} The first object in the array that matches the comparison object, or `null` if no match was found.\r\n */\r\nvar GetFirst = function (items, compare, index)\r\n{\r\n    if (index === undefined) { index = 0; }\r\n\r\n    for (var i = index; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n\r\n        var match = true;\r\n\r\n        for (var property in compare)\r\n        {\r\n            if (item[property] !== compare[property])\r\n            {\r\n                match = false;\r\n            }\r\n        }\r\n\r\n        if (match)\r\n        {\r\n            return item;\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\nmodule.exports = GetFirst;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldEZpcnN0LmpzP2M5ZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQSw2RkFBNkYsd0JBQXdCO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldEZpcnN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgdGhhdCBoYXMgcHJvcGVydGllcyB3aGljaCBtYXRjaFxyXG4gKiBhbGwgb2YgdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBgY29tcGFyZWAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBhcmUgb2JqZWN0IHdhczogYHsgc2NhbGVYOiAwLjUsIGFscGhhOiAxIH1gXHJcbiAqIHRoZW4gaXQgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBpdGVtIHdoaWNoIGhhZCB0aGUgcHJvcGVydHkgYHNjYWxlWGAgc2V0IHRvIDAuNSBhbmQgYGFscGhhYCBzZXQgdG8gMS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgR2V0Rmlyc3QoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgY29tcGFyZSwgaW5kZXgpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuR2V0Rmlyc3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgc2VhcmNoZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wYXJlIC0gVGhlIGNvbXBhcmlzb24gb2JqZWN0LiBFYWNoIHByb3BlcnR5IGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBpdGVtcyBvZiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqXHJcbiAqIEByZXR1cm4gez8ob2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0KX0gVGhlIGZpcnN0IG9iamVjdCBpbiB0aGUgYXJyYXkgdGhhdCBtYXRjaGVzIHRoZSBjb21wYXJpc29uIG9iamVjdCwgb3IgYG51bGxgIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC5cclxuICovXHJcbnZhciBHZXRGaXJzdCA9IGZ1bmN0aW9uIChpdGVtcywgY29tcGFyZSwgaW5kZXgpXHJcbntcclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgIHZhciBtYXRjaCA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbXBhcmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtwcm9wZXJ0eV0gIT09IGNvbXBhcmVbcHJvcGVydHldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0Y2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEZpcnN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GetFirst.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/GetLast.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/actions/GetLast.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and returns the last element in the array that has properties which match\r\n * all of those specified in the `compare` object. For example, if the compare object was: `{ scaleX: 0.5, alpha: 1 }`\r\n * then it would return the last item which had the property `scaleX` set to 0.5 and `alpha` set to 1.\r\n *\r\n * To use this with a Group: `GetLast(group.getChildren(), compare, index)`\r\n *\r\n * @function Phaser.Actions.GetLast\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be searched by this action.\r\n * @param {object} compare - The comparison object. Each property in this object will be checked against the items of the array.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n *\r\n * @return {?(object|Phaser.GameObjects.GameObject)} The last object in the array that matches the comparison object, or `null` if no match was found.\r\n */\r\nvar GetLast = function (items, compare, index)\r\n{\r\n    if (index === undefined) { index = 0; }\r\n\r\n    for (var i = index; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n\r\n        var match = true;\r\n\r\n        for (var property in compare)\r\n        {\r\n            if (item[property] !== compare[property])\r\n            {\r\n                match = false;\r\n            }\r\n        }\r\n\r\n        if (match)\r\n        {\r\n            return item;\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\nmodule.exports = GetLast;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldExhc3QuanM/OWU2MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBLDZGQUE2Rix3QkFBd0I7QUFDckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVzs7QUFFekMsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvR2V0TGFzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgdGhhdCBoYXMgcHJvcGVydGllcyB3aGljaCBtYXRjaFxyXG4gKiBhbGwgb2YgdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBgY29tcGFyZWAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBhcmUgb2JqZWN0IHdhczogYHsgc2NhbGVYOiAwLjUsIGFscGhhOiAxIH1gXHJcbiAqIHRoZW4gaXQgd291bGQgcmV0dXJuIHRoZSBsYXN0IGl0ZW0gd2hpY2ggaGFkIHRoZSBwcm9wZXJ0eSBgc2NhbGVYYCBzZXQgdG8gMC41IGFuZCBgYWxwaGFgIHNldCB0byAxLlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBHZXRMYXN0KGdyb3VwLmdldENoaWxkcmVuKCksIGNvbXBhcmUsIGluZGV4KWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkdldExhc3RcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgc2VhcmNoZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wYXJlIC0gVGhlIGNvbXBhcmlzb24gb2JqZWN0LiBFYWNoIHByb3BlcnR5IGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBpdGVtcyBvZiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqXHJcbiAqIEByZXR1cm4gez8ob2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0KX0gVGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNvbXBhcmlzb24gb2JqZWN0LCBvciBgbnVsbGAgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLlxyXG4gKi9cclxudmFyIEdldExhc3QgPSBmdW5jdGlvbiAoaXRlbXMsIGNvbXBhcmUsIGluZGV4KVxyXG57XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgeyBpbmRleCA9IDA7IH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2ggPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb21wYXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bcHJvcGVydHldICE9PSBjb21wYXJlW3Byb3BlcnR5XSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMYXN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GetLast.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/GridAlign.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/actions/GridAlign.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AlignIn = __webpack_require__(/*! ../display/align/in/QuickSet */ \"./node_modules/phaser/src/display/align/in/QuickSet.js\");\r\nvar CONST = __webpack_require__(/*! ../display/align/const */ \"./node_modules/phaser/src/display/align/const.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar Zone = __webpack_require__(/*! ../gameobjects/zone/Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\n\r\nvar tempZone = new Zone({ sys: { queueDepthSort: NOOP, events: { once: NOOP } } }, 0, 0, 1, 1);\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `x` and `y` properties,\r\n * and then aligns them based on the grid configuration given to this action.\r\n *\r\n * @function Phaser.Actions.GridAlign\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {Phaser.Types.Actions.GridAlignConfig} options - The GridAlign Configuration object.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar GridAlign = function (items, options)\r\n{\r\n    if (options === undefined) { options = {}; }\r\n\r\n    var width = GetFastValue(options, 'width', -1);\r\n    var height = GetFastValue(options, 'height', -1);\r\n    var cellWidth = GetFastValue(options, 'cellWidth', 1);\r\n    var cellHeight = GetFastValue(options, 'cellHeight', cellWidth);\r\n    var position = GetFastValue(options, 'position', CONST.TOP_LEFT);\r\n    var x = GetFastValue(options, 'x', 0);\r\n    var y = GetFastValue(options, 'y', 0);\r\n\r\n    var cx = 0;\r\n    var cy = 0;\r\n    var w = (width * cellWidth);\r\n    var h = (height * cellHeight);\r\n\r\n    tempZone.setPosition(x, y);\r\n    tempZone.setSize(cellWidth, cellHeight);\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        AlignIn(items[i], tempZone, position);\r\n\r\n        if (width === -1)\r\n        {\r\n            //  We keep laying them out horizontally until we've done them all\r\n            cy += cellHeight;\r\n            tempZone.y += cellHeight;\r\n\r\n            if (cy === h)\r\n            {\r\n                cy = 0;\r\n                tempZone.x += cellWidth;\r\n                tempZone.y = y;\r\n            }\r\n        }\r\n        else if (height === -1)\r\n        {\r\n            //  We keep laying them out vertically until we've done them all\r\n            cx += cellWidth;\r\n            tempZone.x += cellWidth;\r\n\r\n            if (cx === w)\r\n            {\r\n                cx = 0;\r\n                tempZone.x = x;\r\n                tempZone.y += cellHeight;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  We keep laying them out until we hit the column limit\r\n            cx += cellWidth;\r\n            tempZone.x += cellWidth;\r\n\r\n            if (cx === w)\r\n            {\r\n                cx = 0;\r\n                cy += cellHeight;\r\n                tempZone.x = x;\r\n                tempZone.y += cellHeight;\r\n\r\n                if (cy === h)\r\n                {\r\n                    //  We've hit the column limit, so return, even if there are items left\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = GridAlign;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dyaWRBbGlnbi5qcz9iYTFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsNEZBQThCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxnRkFBd0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELFdBQVcsbUJBQU8sQ0FBQyw4REFBZTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsb0ZBQTBCOztBQUU3Qyx5QkFBeUIsT0FBTyxnQ0FBZ0MsYUFBYSxFQUFFLEVBQUU7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLHFDQUFxQztBQUNoRDtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxjQUFjOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvR3JpZEFsaWduLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWxpZ25JbiA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvYWxpZ24vaW4vUXVpY2tTZXQnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vZGlzcGxheS9hbGlnbi9jb25zdCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFpvbmUgPSByZXF1aXJlKCcuLi9nYW1lb2JqZWN0cy96b25lL1pvbmUnKTtcclxuXHJcbnZhciB0ZW1wWm9uZSA9IG5ldyBab25lKHsgc3lzOiB7IHF1ZXVlRGVwdGhTb3J0OiBOT09QLCBldmVudHM6IHsgb25jZTogTk9PUCB9IH0gfSwgMCwgMCwgMSwgMSk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMsXHJcbiAqIGFuZCB0aGVuIGFsaWducyB0aGVtIGJhc2VkIG9uIHRoZSBncmlkIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gdG8gdGhpcyBhY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5HcmlkQWxpZ25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BY3Rpb25zLkdyaWRBbGlnbkNvbmZpZ30gb3B0aW9ucyAtIFRoZSBHcmlkQWxpZ24gQ29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBHcmlkQWxpZ24gPSBmdW5jdGlvbiAoaXRlbXMsIG9wdGlvbnMpXHJcbntcclxuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsgb3B0aW9ucyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHdpZHRoID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd3aWR0aCcsIC0xKTtcclxuICAgIHZhciBoZWlnaHQgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2hlaWdodCcsIC0xKTtcclxuICAgIHZhciBjZWxsV2lkdGggPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2NlbGxXaWR0aCcsIDEpO1xyXG4gICAgdmFyIGNlbGxIZWlnaHQgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2NlbGxIZWlnaHQnLCBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIHBvc2l0aW9uID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdwb3NpdGlvbicsIENPTlNULlRPUF9MRUZUKTtcclxuICAgIHZhciB4ID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAneScsIDApO1xyXG5cclxuICAgIHZhciBjeCA9IDA7XHJcbiAgICB2YXIgY3kgPSAwO1xyXG4gICAgdmFyIHcgPSAod2lkdGggKiBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIGggPSAoaGVpZ2h0ICogY2VsbEhlaWdodCk7XHJcblxyXG4gICAgdGVtcFpvbmUuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICB0ZW1wWm9uZS5zZXRTaXplKGNlbGxXaWR0aCwgY2VsbEhlaWdodCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBBbGlnbkluKGl0ZW1zW2ldLCB0ZW1wWm9uZSwgcG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAod2lkdGggPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGtlZXAgbGF5aW5nIHRoZW0gb3V0IGhvcml6b250YWxseSB1bnRpbCB3ZSd2ZSBkb25lIHRoZW0gYWxsXHJcbiAgICAgICAgICAgIGN5ICs9IGNlbGxIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRlbXBab25lLnkgKz0gY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjeSA9PT0gaClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3kgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcFpvbmUueCArPSBjZWxsV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0ZW1wWm9uZS55ID0geTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoZWlnaHQgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGtlZXAgbGF5aW5nIHRoZW0gb3V0IHZlcnRpY2FsbHkgdW50aWwgd2UndmUgZG9uZSB0aGVtIGFsbFxyXG4gICAgICAgICAgICBjeCArPSBjZWxsV2lkdGg7XHJcbiAgICAgICAgICAgIHRlbXBab25lLnggKz0gY2VsbFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKGN4ID09PSB3KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjeCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0ZW1wWm9uZS54ID0geDtcclxuICAgICAgICAgICAgICAgIHRlbXBab25lLnkgKz0gY2VsbEhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2Uga2VlcCBsYXlpbmcgdGhlbSBvdXQgdW50aWwgd2UgaGl0IHRoZSBjb2x1bW4gbGltaXRcclxuICAgICAgICAgICAgY3ggKz0gY2VsbFdpZHRoO1xyXG4gICAgICAgICAgICB0ZW1wWm9uZS54ICs9IGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjeCA9PT0gdylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3ggPSAwO1xyXG4gICAgICAgICAgICAgICAgY3kgKz0gY2VsbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHRlbXBab25lLnggPSB4O1xyXG4gICAgICAgICAgICAgICAgdGVtcFpvbmUueSArPSBjZWxsSGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjeSA9PT0gaClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgV2UndmUgaGl0IHRoZSBjb2x1bW4gbGltaXQsIHNvIHJldHVybiwgZXZlbiBpZiB0aGVyZSBhcmUgaXRlbXMgbGVmdFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3JpZEFsaWduO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GridAlign.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/IncAlpha.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/actions/IncAlpha.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `alpha` property,\r\n * and then adds the given value to each of their `alpha` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncAlpha(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncAlpha\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `alpha` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncAlpha = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'alpha', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncAlpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY0FscGhhLmpzP2M4ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvSW5jQWxwaGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgYSBwdWJsaWMgYGFscGhhYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgYWxwaGFgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEluY0FscGhhKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkluY0FscGhhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYGFscGhhYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBJbmNBbHBoYSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAnYWxwaGEnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY0FscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncAlpha.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/IncX.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/actions/IncX.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `x` property,\r\n * and then adds the given value to each of their `x` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `x` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncX = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'x', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1guanM/Mzg4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9JbmNYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIGB4YCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgeGAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgSW5jWChncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIEluY1ggPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3gnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1g7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/IncXY.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/actions/IncXY.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `x` and `y` properties,\r\n * and then adds the given value to each of them.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncXY(group.getChildren(), x, y, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.IncXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} x - The amount to be added to the `x` property.\r\n * @param {number} [y=x] - The amount to be added to the `y` property. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncXY = function (items, x, y, stepX, stepY, index, direction)\r\n{\r\n    if (y === undefined || y === null) { y = x; }\r\n\r\n    PropertyValueInc(items, 'x', x, stepX, index, direction);\r\n\r\n    return PropertyValueInc(items, 'y', y, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = IncXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1hZLmpzPzUwNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTzs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvSW5jWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMsXHJcbiAqIGFuZCB0aGVuIGFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIGVhY2ggb2YgdGhlbS5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEluY1hZKGdyb3VwLmdldENoaWxkcmVuKCksIHgsIHksIHN0ZXBYLCBzdGVwWSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgeWAgcHJvcGVydHkuIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgeGAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB5YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBJbmNYWSA9IGZ1bmN0aW9uIChpdGVtcywgeCwgeSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IG51bGwpIHsgeSA9IHg7IH1cclxuXHJcbiAgICBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAneCcsIHgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3knLCB5LCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1hZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/IncY.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/actions/IncY.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `y` property,\r\n * and then adds the given value to each of their `y` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `y` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncY = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'y', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1kuanM/MzhiYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9JbmNZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIGB5YCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgeWAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgSW5jWShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHlgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIEluY1kgPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3knLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1k7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlaceOnCircle.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlaceOnCircle.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of a Circle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Circle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to position the Game Objects on.\r\n * @param {number} [startAngle=0] - Optional angle to start position from, in radians.\r\n * @param {number} [endAngle=6.28] - Optional angle to stop position at, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnCircle = function (items, circle, startAngle, endAngle)\r\n{\r\n    if (startAngle === undefined) { startAngle = 0; }\r\n    if (endAngle === undefined) { endAngle = 6.28; }\r\n\r\n    var angle = startAngle;\r\n    var angleStep = (endAngle - startAngle) / items.length;\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].x = circle.x + (circle.radius * Math.cos(angle));\r\n        items[i].y = circle.y + (circle.radius * Math.sin(angle));\r\n\r\n        angle += angleStep;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlaceOnCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25DaXJjbGUuanM/ZGQ1MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxnQkFBZ0I7QUFDbkQsaUNBQWlDLGlCQUFpQjs7QUFFbEQ7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25DaXJjbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgYW5kIHBvc2l0aW9ucyB0aGVtIG9uIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGFyb3VuZCB0aGUgcGVyaW1ldGVyIG9mIGEgQ2lyY2xlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuQ2lyY2xlYCBTaGFwZSB0byB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIHBhc3MgaXRzIGBnZW9tYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlBsYWNlT25DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRBbmdsZT0wXSAtIE9wdGlvbmFsIGFuZ2xlIHRvIHN0YXJ0IHBvc2l0aW9uIGZyb20sIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kQW5nbGU9Ni4yOF0gLSBPcHRpb25hbCBhbmdsZSB0byBzdG9wIHBvc2l0aW9uIGF0LCBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25DaXJjbGUgPSBmdW5jdGlvbiAoaXRlbXMsIGNpcmNsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpXHJcbntcclxuICAgIGlmIChzdGFydEFuZ2xlID09PSB1bmRlZmluZWQpIHsgc3RhcnRBbmdsZSA9IDA7IH1cclxuICAgIGlmIChlbmRBbmdsZSA9PT0gdW5kZWZpbmVkKSB7IGVuZEFuZ2xlID0gNi4yODsgfVxyXG5cclxuICAgIHZhciBhbmdsZSA9IHN0YXJ0QW5nbGU7XHJcbiAgICB2YXIgYW5nbGVTdGVwID0gKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkgLyBpdGVtcy5sZW5ndGg7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpdGVtc1tpXS54ID0gY2lyY2xlLnggKyAoY2lyY2xlLnJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSk7XHJcbiAgICAgICAgaXRlbXNbaV0ueSA9IGNpcmNsZS55ICsgKGNpcmNsZS5yYWRpdXMgKiBNYXRoLnNpbihhbmdsZSkpO1xyXG5cclxuICAgICAgICBhbmdsZSArPSBhbmdsZVN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlaceOnEllipse.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlaceOnEllipse.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of an Ellipse.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Ellipse` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnEllipse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to position the Game Objects on.\r\n * @param {number} [startAngle=0] - Optional angle to start position from, in radians.\r\n * @param {number} [endAngle=6.28] - Optional angle to stop position at, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnEllipse = function (items, ellipse, startAngle, endAngle)\r\n{\r\n    if (startAngle === undefined) { startAngle = 0; }\r\n    if (endAngle === undefined) { endAngle = 6.28; }\r\n\r\n    var angle = startAngle;\r\n    var angleStep = (endAngle - startAngle) / items.length;\r\n\r\n    var a = ellipse.width / 2;\r\n    var b = ellipse.height / 2;\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].x = ellipse.x + a * Math.cos(angle);\r\n        items[i].y = ellipse.y + b * Math.sin(angle);\r\n\r\n        angle += angleStep;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlaceOnEllipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25FbGxpcHNlLmpzP2MwYTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCO0FBQ25ELGlDQUFpQyxpQkFBaUI7O0FBRWxEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBvbiBldmVubHkgc3BhY2VkIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiBhbiBFbGxpcHNlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5QbGFjZU9uRWxsaXBzZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydEFuZ2xlPTBdIC0gT3B0aW9uYWwgYW5nbGUgdG8gc3RhcnQgcG9zaXRpb24gZnJvbSwgaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmRBbmdsZT02LjI4XSAtIE9wdGlvbmFsIGFuZ2xlIHRvIHN0b3AgcG9zaXRpb24gYXQsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxhY2VPbkVsbGlwc2UgPSBmdW5jdGlvbiAoaXRlbXMsIGVsbGlwc2UsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKVxyXG57XHJcbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0QW5nbGUgPSAwOyB9XHJcbiAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDYuMjg7IH1cclxuXHJcbiAgICB2YXIgYW5nbGUgPSBzdGFydEFuZ2xlO1xyXG4gICAgdmFyIGFuZ2xlU3RlcCA9IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gaXRlbXMubGVuZ3RoO1xyXG5cclxuICAgIHZhciBhID0gZWxsaXBzZS53aWR0aCAvIDI7XHJcbiAgICB2YXIgYiA9IGVsbGlwc2UuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnggPSBlbGxpcHNlLnggKyBhICogTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGl0ZW1zW2ldLnkgPSBlbGxpcHNlLnkgKyBiICogTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuICAgICAgICBhbmdsZSArPSBhbmdsZVN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uRWxsaXBzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnEllipse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlaceOnLine.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlaceOnLine.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetPoints = __webpack_require__(/*! ../geom/line/GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\n\r\n/**\r\n * Positions an array of Game Objects on evenly spaced points of a Line.\r\n *\r\n * @function Phaser.Actions.PlaceOnLine\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Line} line - The Line to position the Game Objects on.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnLine = function (items, line)\r\n{\r\n    var points = GetPoints(line, items.length);\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n        var point = points[i];\r\n\r\n        item.x = point.x;\r\n        item.y = point.y;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlaceOnLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25MaW5lLmpzP2I5NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uTGluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4uL2dlb20vbGluZS9HZXRQb2ludHMnKTtcclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIG9uIGV2ZW5seSBzcGFjZWQgcG9pbnRzIG9mIGEgTGluZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlBsYWNlT25MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3RzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25MaW5lID0gZnVuY3Rpb24gKGl0ZW1zLCBsaW5lKVxyXG57XHJcbiAgICB2YXIgcG9pbnRzID0gR2V0UG9pbnRzKGxpbmUsIGl0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXTtcclxuXHJcbiAgICAgICAgaXRlbS54ID0gcG9pbnQueDtcclxuICAgICAgICBpdGVtLnkgPSBwb2ludC55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGxhY2VPbkxpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlaceOnRectangle.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlaceOnRectangle.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MarchingAnts = __webpack_require__(/*! ../geom/rectangle/MarchingAnts */ \"./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\");\r\nvar RotateLeft = __webpack_require__(/*! ../utils/array/RotateLeft */ \"./node_modules/phaser/src/utils/array/RotateLeft.js\");\r\nvar RotateRight = __webpack_require__(/*! ../utils/array/RotateRight */ \"./node_modules/phaser/src/utils/array/RotateRight.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of a Rectangle.\r\n * \r\n * Placement starts from the top-left of the rectangle, and proceeds in a clockwise direction.\r\n * If the `shift` parameter is given you can offset where placement begins.\r\n *\r\n * @function Phaser.Actions.PlaceOnRectangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to position the Game Objects on.\r\n * @param {integer} [shift=1] - An optional positional offset.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnRectangle = function (items, rect, shift)\r\n{\r\n    if (shift === undefined) { shift = 0; }\r\n\r\n    var points = MarchingAnts(rect, false, items.length);\r\n\r\n    if (shift > 0)\r\n    {\r\n        RotateLeft(points, shift);\r\n    }\r\n    else if (shift < 0)\r\n    {\r\n        RotateRight(points, Math.abs(shift));\r\n    }\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].x = points[i].x;\r\n        items[i].y = points[i].y;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlaceOnRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25SZWN0YW5nbGUuanM/NTQ5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0dBQWdDO0FBQzNELGlCQUFpQixtQkFBTyxDQUFDLHNGQUEyQjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBNEI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTWFyY2hpbmdBbnRzID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvTWFyY2hpbmdBbnRzJyk7XHJcbnZhciBSb3RhdGVMZWZ0ID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvUm90YXRlTGVmdCcpO1xyXG52YXIgUm90YXRlUmlnaHQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9Sb3RhdGVSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gb24gZXZlbmx5IHNwYWNlZCBwb2ludHMgYXJvdW5kIHRoZSBwZXJpbWV0ZXIgb2YgYSBSZWN0YW5nbGUuXHJcbiAqIFxyXG4gKiBQbGFjZW1lbnQgc3RhcnRzIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGUsIGFuZCBwcm9jZWVkcyBpbiBhIGNsb2Nrd2lzZSBkaXJlY3Rpb24uXHJcbiAqIElmIHRoZSBgc2hpZnRgIHBhcmFtZXRlciBpcyBnaXZlbiB5b3UgY2FuIG9mZnNldCB3aGVyZSBwbGFjZW1lbnQgYmVnaW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUGxhY2VPblJlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3NoaWZ0PTFdIC0gQW4gb3B0aW9uYWwgcG9zaXRpb25hbCBvZmZzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxhY2VPblJlY3RhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgcmVjdCwgc2hpZnQpXHJcbntcclxuICAgIGlmIChzaGlmdCA9PT0gdW5kZWZpbmVkKSB7IHNoaWZ0ID0gMDsgfVxyXG5cclxuICAgIHZhciBwb2ludHMgPSBNYXJjaGluZ0FudHMocmVjdCwgZmFsc2UsIGl0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHNoaWZ0ID4gMClcclxuICAgIHtcclxuICAgICAgICBSb3RhdGVMZWZ0KHBvaW50cywgc2hpZnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2hpZnQgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIFJvdGF0ZVJpZ2h0KHBvaW50cywgTWF0aC5hYnMoc2hpZnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnggPSBwb2ludHNbaV0ueDtcclxuICAgICAgICBpdGVtc1tpXS55ID0gcG9pbnRzW2ldLnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlaceOnTriangle.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlaceOnTriangle.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BresenhamPoints = __webpack_require__(/*! ../geom/line/BresenhamPoints */ \"./node_modules/phaser/src/geom/line/BresenhamPoints.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the edges of a Triangle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Triangle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnTriangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to position the Game Objects on.\r\n * @param {number} [stepRate=1] - An optional step rate, to increase or decrease the packing of the Game Objects on the lines.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnTriangle = function (items, triangle, stepRate)\r\n{\r\n    var p1 = BresenhamPoints({ x1: triangle.x1, y1: triangle.y1, x2: triangle.x2, y2: triangle.y2 }, stepRate);\r\n    var p2 = BresenhamPoints({ x1: triangle.x2, y1: triangle.y2, x2: triangle.x3, y2: triangle.y3 }, stepRate);\r\n    var p3 = BresenhamPoints({ x1: triangle.x3, y1: triangle.y3, x2: triangle.x1, y2: triangle.y1 }, stepRate);\r\n\r\n    //  Remove overlaps\r\n    p1.pop();\r\n    p2.pop();\r\n    p3.pop();\r\n\r\n    p1 = p1.concat(p2, p3);\r\n\r\n    var step = p1.length / items.length;\r\n    var p = 0;\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n        var point = p1[Math.floor(p)];\r\n\r\n        item.x = point.x;\r\n        item.y = point.y;\r\n\r\n        p += step;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlaceOnTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25UcmlhbmdsZS5qcz9kZWNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyw0RkFBOEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixxRUFBcUU7QUFDbkcsOEJBQThCLHFFQUFxRTtBQUNuRyw4QkFBOEIscUVBQXFFOztBQUVuRztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCcmVzZW5oYW1Qb2ludHMgPSByZXF1aXJlKCcuLi9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBvbiBldmVubHkgc3BhY2VkIHBvaW50cyBhcm91bmQgdGhlIGVkZ2VzIG9mIGEgVHJpYW5nbGUuXHJcbiAqIFxyXG4gKiBJZiB5b3Ugd2lzaCB0byBwYXNzIGEgYFBoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5QbGFjZU9uVHJpYW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGU9MV0gLSBBbiBvcHRpb25hbCBzdGVwIHJhdGUsIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBwYWNraW5nIG9mIHRoZSBHYW1lIE9iamVjdHMgb24gdGhlIGxpbmVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25UcmlhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgdHJpYW5nbGUsIHN0ZXBSYXRlKVxyXG57XHJcbiAgICB2YXIgcDEgPSBCcmVzZW5oYW1Qb2ludHMoeyB4MTogdHJpYW5nbGUueDEsIHkxOiB0cmlhbmdsZS55MSwgeDI6IHRyaWFuZ2xlLngyLCB5MjogdHJpYW5nbGUueTIgfSwgc3RlcFJhdGUpO1xyXG4gICAgdmFyIHAyID0gQnJlc2VuaGFtUG9pbnRzKHsgeDE6IHRyaWFuZ2xlLngyLCB5MTogdHJpYW5nbGUueTIsIHgyOiB0cmlhbmdsZS54MywgeTI6IHRyaWFuZ2xlLnkzIH0sIHN0ZXBSYXRlKTtcclxuICAgIHZhciBwMyA9IEJyZXNlbmhhbVBvaW50cyh7IHgxOiB0cmlhbmdsZS54MywgeTE6IHRyaWFuZ2xlLnkzLCB4MjogdHJpYW5nbGUueDEsIHkyOiB0cmlhbmdsZS55MSB9LCBzdGVwUmF0ZSk7XHJcblxyXG4gICAgLy8gIFJlbW92ZSBvdmVybGFwc1xyXG4gICAgcDEucG9wKCk7XHJcbiAgICBwMi5wb3AoKTtcclxuICAgIHAzLnBvcCgpO1xyXG5cclxuICAgIHAxID0gcDEuY29uY2F0KHAyLCBwMyk7XHJcblxyXG4gICAgdmFyIHN0ZXAgPSBwMS5sZW5ndGggLyBpdGVtcy5sZW5ndGg7XHJcbiAgICB2YXIgcCA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHAxW01hdGguZmxvb3IocCldO1xyXG5cclxuICAgICAgICBpdGVtLnggPSBwb2ludC54O1xyXG4gICAgICAgIGl0ZW0ueSA9IHBvaW50Lnk7XHJcblxyXG4gICAgICAgIHAgKz0gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBsYWNlT25UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PlayAnimation.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/actions/PlayAnimation.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Play an animation with the given key, starting at the given startFrame on all Game Objects in items.\r\n *\r\n * @function Phaser.Actions.PlayAnimation\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} key - The name of the animation to play.\r\n * @param {(string|integer)} [startFrame] - The starting frame of the animation with the given key.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlayAnimation = function (items, key, startFrame)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].anims.play(key, startFrame);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PlayAnimation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYXlBbmltYXRpb24uanM/NmI5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGF5QW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUGxheSBhbiBhbmltYXRpb24gd2l0aCB0aGUgZ2l2ZW4ga2V5LCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gc3RhcnRGcmFtZSBvbiBhbGwgR2FtZSBPYmplY3RzIGluIGl0ZW1zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUGxheUFuaW1hdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbc3RhcnRGcmFtZV0gLSBUaGUgc3RhcnRpbmcgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB3aXRoIHRoZSBnaXZlbiBrZXkuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxheUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChpdGVtcywga2V5LCBzdGFydEZyYW1lKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLmFuaW1zLnBsYXkoa2V5LCBzdGFydEZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBsYXlBbmltYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlayAnimation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PropertyValueInc.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/actions/PropertyValueInc.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public property as defined in `key`,\r\n * and then adds the given value to it.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `PropertyValueInc(group.getChildren(), key, value, step)`\r\n *\r\n * @function Phaser.Actions.PropertyValueInc\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to be added to the property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar PropertyValueInc = function (items, key, value, step, index, direction)\r\n{\r\n    if (step === undefined) { step = 0; }\r\n    if (index === undefined) { index = 0; }\r\n    if (direction === undefined) { direction = 1; }\r\n\r\n    var i;\r\n    var t = 0;\r\n    var end = items.length;\r\n\r\n    if (direction === 1)\r\n    {\r\n        //  Start to End\r\n        for (i = index; i < end; i++)\r\n        {\r\n            items[i][key] += value + (t * step);\r\n            t++;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        //  End to Start\r\n        for (i = index; i >= 0; i--)\r\n        {\r\n            items[i][key] += value + (t * step);\r\n            t++;\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PropertyValueInc;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Byb3BlcnR5VmFsdWVJbmMuanM/MTk3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLDhCQUE4QixXQUFXO0FBQ3pDLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUHJvcGVydHlWYWx1ZUluYy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIHByb3BlcnR5IGFzIGRlZmluZWQgaW4gYGtleWAsXHJcbiAqIGFuZCB0aGVuIGFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIGl0LlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBQcm9wZXJ0eVZhbHVlSW5jKGdyb3VwLmdldENoaWxkcmVuKCksIGtleSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUHJvcGVydHlWYWx1ZUluY1xyXG4gKiBAc2luY2UgMy4zLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IGZ1bmN0aW9uIChpdGVtcywga2V5LCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHN0ZXAgPT09IHVuZGVmaW5lZCkgeyBzdGVwID0gMDsgfVxyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSAwOyB9XHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHsgZGlyZWN0aW9uID0gMTsgfVxyXG5cclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHQgPSAwO1xyXG4gICAgdmFyIGVuZCA9IGl0ZW1zLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTdGFydCB0byBFbmRcclxuICAgICAgICBmb3IgKGkgPSBpbmRleDsgaSA8IGVuZDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1ba2V5XSArPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEVuZCB0byBTdGFydFxyXG4gICAgICAgIGZvciAoaSA9IGluZGV4OyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gKz0gdmFsdWUgKyAodCAqIHN0ZXApO1xyXG4gICAgICAgICAgICB0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvcGVydHlWYWx1ZUluYztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PropertyValueInc.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/PropertyValueSet.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/actions/PropertyValueSet.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public property as defined in `key`,\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `PropertyValueSet(group.getChildren(), key, value, step)`\r\n *\r\n * @function Phaser.Actions.PropertyValueSet\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar PropertyValueSet = function (items, key, value, step, index, direction)\r\n{\r\n    if (step === undefined) { step = 0; }\r\n    if (index === undefined) { index = 0; }\r\n    if (direction === undefined) { direction = 1; }\r\n\r\n    var i;\r\n    var t = 0;\r\n    var end = items.length;\r\n\r\n    if (direction === 1)\r\n    {\r\n        //  Start to End\r\n        for (i = index; i < end; i++)\r\n        {\r\n            items[i][key] = value + (t * step);\r\n            t++;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        //  End to Start\r\n        for (i = index; i >= 0; i--)\r\n        {\r\n            items[i][key] = value + (t * step);\r\n            t++;\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = PropertyValueSet;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Byb3BlcnR5VmFsdWVTZXQuanM/MGI3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLDhCQUE4QixXQUFXO0FBQ3pDLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUHJvcGVydHlWYWx1ZVNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIHByb3BlcnR5IGFzIGRlZmluZWQgaW4gYGtleWAsXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBQcm9wZXJ0eVZhbHVlU2V0KGdyb3VwLmdldENoaWxkcmVuKCksIGtleSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUHJvcGVydHlWYWx1ZVNldFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSBmdW5jdGlvbiAoaXRlbXMsIGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIGlmIChzdGVwID09PSB1bmRlZmluZWQpIHsgc3RlcCA9IDA7IH1cclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGRpcmVjdGlvbiA9IDE7IH1cclxuXHJcbiAgICB2YXIgaTtcclxuICAgIHZhciB0ID0gMDtcclxuICAgIHZhciBlbmQgPSBpdGVtcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gMSlcclxuICAgIHtcclxuICAgICAgICAvLyAgU3RhcnQgdG8gRW5kXHJcbiAgICAgICAgZm9yIChpID0gaW5kZXg7IGkgPCBlbmQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEVuZCB0byBTdGFydFxyXG4gICAgICAgIGZvciAoaSA9IGluZGV4OyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQcm9wZXJ0eVZhbHVlU2V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PropertyValueSet.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RandomCircle.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/actions/RandomCircle.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/circle/Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Circle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Circle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomCircle = function (items, circle)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        Random(circle, items[i]);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RandomCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUNpcmNsZS5qcz80ZGZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsOEVBQXVCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUNpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4uL2dlb20vY2lyY2xlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIENpcmNsZS5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIHRvIHBhc3MgYSBgUGhhc2VyLkdhbWVPYmplY3RzLkNpcmNsZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5SYW5kb21DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbUNpcmNsZSA9IGZ1bmN0aW9uIChpdGVtcywgY2lyY2xlKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShjaXJjbGUsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbUNpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RandomEllipse.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/actions/RandomEllipse.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/ellipse/Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Ellipse.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Ellipse` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomEllipse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomEllipse = function (items, ellipse)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        Random(ellipse, items[i]);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RandomEllipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUVsbGlwc2UuanM/NmVjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9SYW5kb21FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9lbGxpcHNlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIEVsbGlwc2UuXHJcbiAqIFxyXG4gKiBJZiB5b3Ugd2lzaCB0byBwYXNzIGEgYFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlYCBTaGFwZSB0byB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIHBhc3MgaXRzIGBnZW9tYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlJhbmRvbUVsbGlwc2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbUVsbGlwc2UgPSBmdW5jdGlvbiAoaXRlbXMsIGVsbGlwc2UpXHJcbntcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgUmFuZG9tKGVsbGlwc2UsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbUVsbGlwc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomEllipse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RandomLine.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/actions/RandomLine.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/line/Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations on the Line.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Line` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomLine\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Line} line - The Line to position the Game Objects randomly on.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomLine = function (items, line)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        Random(line, items[i]);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RandomLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUxpbmUuanM/NmU3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDBFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9SYW5kb21MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9saW5lL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0aGUgTGluZS5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIHRvIHBhc3MgYSBgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmVgIFNoYXBlIHRvIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgcGFzcyBpdHMgYGdlb21gIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tTGluZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyByYW5kb21seSBvbi5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSYW5kb21MaW5lID0gZnVuY3Rpb24gKGl0ZW1zLCBsaW5lKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShsaW5lLCBpdGVtc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21MaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RandomRectangle.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/actions/RandomRectangle.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/rectangle/Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Rectangle.\r\n *\r\n * @function Phaser.Actions.RandomRectangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomRectangle = function (items, rect)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        Random(rect, items[i]);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RandomRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbVJlY3RhbmdsZS5qcz82MjcwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsb0ZBQTBCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUmFuZG9tUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBhdCByYW5kb20gbG9jYXRpb25zIHdpdGhpbiB0aGUgUmVjdGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyB3aXRoaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUmFuZG9tUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGl0ZW1zLCByZWN0KVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShyZWN0LCBpdGVtc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RandomTriangle.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/actions/RandomTriangle.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/triangle/Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Triangle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Triangle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomTriangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomTriangle = function (items, triangle)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        Random(triangle, items[i]);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RandomTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbVRyaWFuZ2xlLmpzP2Y2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxrRkFBeUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUmFuZG9tVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuLi9nZW9tL3RyaWFuZ2xlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIFRyaWFuZ2xlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGVgIFNoYXBlIHRvIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgcGFzcyBpdHMgYGdlb21gIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tVHJpYW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbVRyaWFuZ2xlID0gZnVuY3Rpb24gKGl0ZW1zLCB0cmlhbmdsZSlcclxue1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBSYW5kb20odHJpYW5nbGUsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVRyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/Rotate.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/actions/Rotate.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `rotation` property,\r\n * and then adds the given value to each of their `rotation` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `Rotate(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `rotation` property (in radians).\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar Rotate = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'rotation', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZS5qcz81ZjI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgcm90YXRpb25gIHByb3BlcnR5LFxyXG4gKiBhbmQgdGhlbiBhZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byBlYWNoIG9mIHRoZWlyIGByb3RhdGlvbmAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgUm90YXRlKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlJvdGF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgKGluIHJhZGlhbnMpLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJvdGF0ZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAncm90YXRpb24nLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Rotate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RotateAround.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/actions/RotateAround.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundDistance = __webpack_require__(/*! ../math/RotateAroundDistance */ \"./node_modules/phaser/src/math/RotateAroundDistance.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * Rotates each item around the given point by the given angle.\r\n *\r\n * @function Phaser.Actions.RotateAround\r\n * @since 3.0.0\r\n * @see Phaser.Math.RotateAroundDistance\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {object} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RotateAround = function (items, point, angle)\r\n{\r\n    var x = point.x;\r\n    var y = point.y;\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n\r\n        RotateAroundDistance(item, x, y, angle, Math.max(1, DistanceBetween(item.x, item.y, x, y)));\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RotateAround;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZUFyb3VuZC5qcz83Njg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDakUsc0JBQXNCLG1CQUFPLENBQUMsb0dBQWtDOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUm90YXRlQXJvdW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUm90YXRlQXJvdW5kRGlzdGFuY2UgPSByZXF1aXJlKCcuLi9tYXRoL1JvdGF0ZUFyb3VuZERpc3RhbmNlJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgZWFjaCBpdGVtIGFyb3VuZCB0aGUgZ2l2ZW4gcG9pbnQgYnkgdGhlIGdpdmVuIGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUm90YXRlQXJvdW5kXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAc2VlIFBoYXNlci5NYXRoLlJvdGF0ZUFyb3VuZERpc3RhbmNlXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludCAtIEFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHJvdGF0ZSBieSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmQgPSBmdW5jdGlvbiAoaXRlbXMsIHBvaW50LCBhbmdsZSlcclxue1xyXG4gICAgdmFyIHggPSBwb2ludC54O1xyXG4gICAgdmFyIHkgPSBwb2ludC55O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgUm90YXRlQXJvdW5kRGlzdGFuY2UoaXRlbSwgeCwgeSwgYW5nbGUsIE1hdGgubWF4KDEsIERpc3RhbmNlQmV0d2VlbihpdGVtLngsIGl0ZW0ueSwgeCwgeSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZUFyb3VuZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RotateAround.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/RotateAroundDistance.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/actions/RotateAroundDistance.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathRotateAroundDistance = __webpack_require__(/*! ../math/RotateAroundDistance */ \"./node_modules/phaser/src/math/RotateAroundDistance.js\");\r\n\r\n/**\r\n * Rotates an array of Game Objects around a point by the given angle and distance.\r\n *\r\n * @function Phaser.Actions.RotateAroundDistance\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {object} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n * @param {number} distance - The distance from the point of rotation in pixels.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RotateAroundDistance = function (items, point, angle, distance)\r\n{\r\n    var x = point.x;\r\n    var y = point.y;\r\n\r\n    //  There's nothing to do\r\n    if (distance === 0)\r\n    {\r\n        return items;\r\n    }\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        MathRotateAroundDistance(items[i], x, y, angle, distance);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = RotateAroundDistance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZUFyb3VuZERpc3RhbmNlLmpzP2MyYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLCtCQUErQixtQkFBTyxDQUFDLDRGQUE4Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9Sb3RhdGVBcm91bmREaXN0YW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1hdGhSb3RhdGVBcm91bmREaXN0YW5jZSA9IHJlcXVpcmUoJy4uL21hdGgvUm90YXRlQXJvdW5kRGlzdGFuY2UnKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhcm91bmQgYSBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIGRpc3RhbmNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUm90YXRlQXJvdW5kRGlzdGFuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludCAtIEFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHJvdGF0ZSBieSwgaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50IG9mIHJvdGF0aW9uIGluIHBpeGVscy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmREaXN0YW5jZSA9IGZ1bmN0aW9uIChpdGVtcywgcG9pbnQsIGFuZ2xlLCBkaXN0YW5jZSlcclxue1xyXG4gICAgdmFyIHggPSBwb2ludC54O1xyXG4gICAgdmFyIHkgPSBwb2ludC55O1xyXG5cclxuICAgIC8vICBUaGVyZSdzIG5vdGhpbmcgdG8gZG9cclxuICAgIGlmIChkaXN0YW5jZSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBNYXRoUm90YXRlQXJvdW5kRGlzdGFuY2UoaXRlbXNbaV0sIHgsIHksIGFuZ2xlLCBkaXN0YW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmREaXN0YW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RotateAroundDistance.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/ScaleX.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/actions/ScaleX.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `scaleX` property,\r\n * and then adds the given value to each of their `scaleX` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.ScaleX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `scaleX` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleX = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'scaleX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWC5qcz84ZmFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgc2NhbGVYYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgc2NhbGVYYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVgoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWGAgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2NhbGVYID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlWDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/ScaleXY.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/actions/ScaleXY.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `scaleX` and `scaleY` properties,\r\n * and then adds the given value to each of them.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleXY(group.getChildren(), scaleX, scaleY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.ScaleXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scaleX - The amount to be added to the `scaleX` property.\r\n * @param {number} [scaleY] - The amount to be added to the `scaleY` property. If `undefined` or `null` it uses the `scaleX` value.\r\n * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleXY = function (items, scaleX, scaleY, stepX, stepY, index, direction)\r\n{\r\n    if (scaleY === undefined || scaleY === null) { scaleY = scaleX; }\r\n\r\n    PropertyValueInc(items, 'scaleX', scaleX, stepX, index, direction);\r\n\r\n    return PropertyValueInc(items, 'scaleY', scaleY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWFkuanM/MTRiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxpQkFBaUI7O0FBRW5FOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGBzY2FsZVhgIGFuZCBgc2NhbGVZYCBwcm9wZXJ0aWVzLFxyXG4gKiBhbmQgdGhlbiBhZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byBlYWNoIG9mIHRoZW0uXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcFhgIGFuZCBgc3RlcFlgIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVhZKGdyb3VwLmdldENoaWxkcmVuKCksIHNjYWxlWCwgc2NhbGVZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgc2NhbGVYYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZVldIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWWAgcHJvcGVydHkuIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgc2NhbGVYYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY2FsZVhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2NhbGVZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTY2FsZVhZID0gZnVuY3Rpb24gKGl0ZW1zLCBzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoc2NhbGVZID09PSB1bmRlZmluZWQgfHwgc2NhbGVZID09PSBudWxsKSB7IHNjYWxlWSA9IHNjYWxlWDsgfVxyXG5cclxuICAgIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVgnLCBzY2FsZVgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3NjYWxlWScsIHNjYWxlWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2FsZVhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/ScaleY.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/actions/ScaleY.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `scaleY` property,\r\n * and then adds the given value to each of their `scaleY` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.ScaleY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `scaleY` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleY = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueInc(items, 'scaleY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWS5qcz9jYjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgc2NhbGVZYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgc2NhbGVZYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWWAgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2NhbGVZID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVknLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetAlpha.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetAlpha.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `alpha`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetAlpha(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetAlpha\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetAlpha = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'alpha', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetAlpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEFscGhhLmpzPzk4NWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0QWxwaGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgYWxwaGFgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRBbHBoYShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRBbHBoYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRBbHBoYSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnYWxwaGEnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldEFscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetAlpha.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetBlendMode.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetBlendMode.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `blendMode`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetBlendMode(group.getChildren(), value)`\r\n *\r\n * @function Phaser.Actions.SetBlendMode\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetBlendMode = function (items, value, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'blendMode', value, 0, index, direction);\r\n};\r\n\r\nmodule.exports = SetBlendMode;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEJsZW5kTW9kZS5qcz9iZWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0QmxlbmRNb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYGJsZW5kTW9kZWBcclxuICogYW5kIHRoZW4gc2V0cyBpdCB0byB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldEJsZW5kTW9kZShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRCbGVuZE1vZGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnYmxlbmRNb2RlJywgdmFsdWUsIDAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRCbGVuZE1vZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetBlendMode.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetDepth.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetDepth.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `depth`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetDepth(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetDepth\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetDepth = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'depth', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetDepth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldERlcHRoLmpzP2MyN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0RGVwdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgZGVwdGhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXREZXB0aChncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXREZXB0aFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXREZXB0aCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnZGVwdGgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldERlcHRoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetDepth.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetHitArea.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetHitArea.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Passes all provided Game Objects to the Input Manager to enable them for input with identical areas and callbacks.\r\n * \r\n * @see {@link Phaser.GameObjects.GameObject#setInteractive}\r\n *\r\n * @function Phaser.Actions.SetHitArea\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {*} hitArea - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SetHitArea = function (items, hitArea, hitAreaCallback)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].setInteractive(hitArea, hitAreaCallback);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = SetHitArea;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEhpdEFyZWEuanM/NDE3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLEVBQUU7QUFDYixXQUFXLG1DQUFtQztBQUM5QztBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEhpdEFyZWEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQYXNzZXMgYWxsIHByb3ZpZGVkIEdhbWUgT2JqZWN0cyB0byB0aGUgSW5wdXQgTWFuYWdlciB0byBlbmFibGUgdGhlbSBmb3IgaW5wdXQgd2l0aCBpZGVudGljYWwgYXJlYXMgYW5kIGNhbGxiYWNrcy5cclxuICogXHJcbiAqIEBzZWUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0SGl0QXJlYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHsqfSBoaXRBcmVhIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBHYW1lIE9iamVjdCBpcyBpbnRlcmFjdGVkIHdpdGguIElmIHlvdSBwcm92aWRlIGEgc2hhcGUgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgY2FsbGJhY2suXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0SGl0QXJlYSA9IGZ1bmN0aW9uIChpdGVtcywgaGl0QXJlYSwgaGl0QXJlYUNhbGxiYWNrKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnNldEludGVyYWN0aXZlKGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRIaXRBcmVhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetHitArea.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetOrigin.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetOrigin.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `originX` and `originY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetOrigin(group.getChildren(), originX, originY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetOrigin\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} originX - The amount to set the `originX` property to.\r\n * @param {number} [originY] - The amount to set the `originY` property to. If `undefined` or `null` it uses the `originX` value.\r\n * @param {number} [stepX=0] - This is added to the `originX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `originY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetOrigin = function (items, originX, originY, stepX, stepY, index, direction)\r\n{\r\n    if (originY === undefined || originY === null) { originY = originX; }\r\n\r\n    PropertyValueSet(items, 'originX', originX, stepX, index, direction);\r\n\r\n    return PropertyValueSet(items, 'originY', originY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetOrigin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldE9yaWdpbi5qcz8xMjUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG1CQUFtQjs7QUFFdkU7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0T3JpZ2luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydGllcyBgb3JpZ2luWGAgYW5kIGBvcmlnaW5ZYFxyXG4gKiBhbmQgdGhlbiBzZXRzIHRoZW0gdG8gdGhlIGdpdmVuIHZhbHVlcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldE9yaWdpbihncm91cC5nZXRDaGlsZHJlbigpLCBvcmlnaW5YLCBvcmlnaW5ZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0T3JpZ2luXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IG9yaWdpblggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYG9yaWdpblhgIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29yaWdpblldIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIGBvcmlnaW5ZYCBwcm9wZXJ0eSB0by4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGBvcmlnaW5YYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBvcmlnaW5YYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBZPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpbllgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldE9yaWdpbiA9IGZ1bmN0aW9uIChpdGVtcywgb3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAob3JpZ2luWSA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpblkgPT09IG51bGwpIHsgb3JpZ2luWSA9IG9yaWdpblg7IH1cclxuXHJcbiAgICBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnb3JpZ2luWCcsIG9yaWdpblgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ29yaWdpblknLCBvcmlnaW5ZLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldE9yaWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetOrigin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetRotation.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetRotation.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `rotation`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetRotation(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetRotation\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetRotation = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'rotation', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetRotation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFJvdGF0aW9uLmpzPzgxMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0Um90YXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgcm90YXRpb25gXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRSb3RhdGlvbihncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRSb3RhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRSb3RhdGlvbiA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAncm90YXRpb24nLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFJvdGF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetRotation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScale.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScale.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `scaleX` and `scaleY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScale(group.getChildren(), scaleX, scaleY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetScale\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scaleX - The amount to set the `scaleX` property to.\r\n * @param {number} [scaleY] - The amount to set the `scaleY` property to. If `undefined` or `null` it uses the `scaleX` value.\r\n * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScale = function (items, scaleX, scaleY, stepX, stepY, index, direction)\r\n{\r\n    if (scaleY === undefined || scaleY === null) { scaleY = scaleX; }\r\n\r\n    PropertyValueSet(items, 'scaleX', scaleX, stepX, index, direction);\r\n\r\n    return PropertyValueSet(items, 'scaleY', scaleY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetScale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlLmpzPzA3Y2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaUJBQWlCOztBQUVuRTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY2FsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnRpZXMgYHNjYWxlWGAgYW5kIGBzY2FsZVlgXHJcbiAqIGFuZCB0aGVuIHNldHMgdGhlbSB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBYYCBhbmQgYHN0ZXBZYCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0U2NhbGUoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgc2NhbGVYLCBzY2FsZVksIHN0ZXBYLCBzdGVwWSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRTY2FsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHNjYWxlWGAgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgc2NhbGVZYCBwcm9wZXJ0eSB0by4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGBzY2FsZVhgIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHNjYWxlWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY2FsZVlgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlID0gZnVuY3Rpb24gKGl0ZW1zLCBzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoc2NhbGVZID09PSB1bmRlZmluZWQgfHwgc2NhbGVZID09PSBudWxsKSB7IHNjYWxlWSA9IHNjYWxlWDsgfVxyXG5cclxuICAgIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICdzY2FsZVgnLCBzY2FsZVgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3NjYWxlWScsIHNjYWxlWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScale.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScaleX.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScaleX.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scaleX`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScaleX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScaleX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScaleX = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'scaleX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScaleX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWC5qcz9jZTQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGBzY2FsZVhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY2FsZVgoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2NhbGVYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlWCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnc2NhbGVYJywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZVg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScaleX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScaleY.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScaleY.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scaleY`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScaleY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScaleY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScaleY = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'scaleY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScaleY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWS5qcz83NTk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGBzY2FsZVlgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY2FsZVkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2NhbGVZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlWSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnc2NhbGVZJywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZVk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScaleY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScrollFactor.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScrollFactor.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `scrollFactorX` and `scrollFactorY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactor(group.getChildren(), scrollFactorX, scrollFactorY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactor\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scrollFactorX - The amount to set the `scrollFactorX` property to.\r\n * @param {number} [scrollFactorY] - The amount to set the `scrollFactorY` property to. If `undefined` or `null` it uses the `scrollFactorX` value.\r\n * @param {number} [stepX=0] - This is added to the `scrollFactorX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scrollFactorY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactor = function (items, scrollFactorX, scrollFactorY, stepX, stepY, index, direction)\r\n{\r\n    if (scrollFactorY === undefined || scrollFactorY === null) { scrollFactorY = scrollFactorX; }\r\n\r\n    PropertyValueSet(items, 'scrollFactorX', scrollFactorX, stepX, index, direction);\r\n\r\n    return PropertyValueSet(items, 'scrollFactorY', scrollFactorY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3Rvci5qcz84MTc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLCtCQUErQjs7QUFFL0Y7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0U2Nyb2xsRmFjdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydGllcyBgc2Nyb2xsRmFjdG9yWGAgYW5kIGBzY3JvbGxGYWN0b3JZYFxyXG4gKiBhbmQgdGhlbiBzZXRzIHRoZW0gdG8gdGhlIGdpdmVuIHZhbHVlcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldFNjcm9sbEZhY3Rvcihncm91cC5nZXRDaGlsZHJlbigpLCBzY3JvbGxGYWN0b3JYLCBzY3JvbGxGYWN0b3JZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2Nyb2xsRmFjdG9yXHJcbiAqIEBzaW5jZSAzLjIxLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxGYWN0b3JYIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIGBzY3JvbGxGYWN0b3JYYCBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY3JvbGxGYWN0b3JZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgc2Nyb2xsRmFjdG9yWWAgcHJvcGVydHkgdG8uIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgc2Nyb2xsRmFjdG9yWGAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2Nyb2xsRmFjdG9yWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY3JvbGxGYWN0b3JZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRTY3JvbGxGYWN0b3IgPSBmdW5jdGlvbiAoaXRlbXMsIHNjcm9sbEZhY3RvclgsIHNjcm9sbEZhY3RvclksIHN0ZXBYLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHNjcm9sbEZhY3RvclkgPT09IHVuZGVmaW5lZCB8fCBzY3JvbGxGYWN0b3JZID09PSBudWxsKSB7IHNjcm9sbEZhY3RvclkgPSBzY3JvbGxGYWN0b3JYOyB9XHJcblxyXG4gICAgUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclgnLCBzY3JvbGxGYWN0b3JYLCBzdGVwWCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICdzY3JvbGxGYWN0b3JZJywgc2Nyb2xsRmFjdG9yWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY3JvbGxGYWN0b3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScrollFactorX.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScrollFactorX.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scrollFactorX`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactorX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactorX\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactorX = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'scrollFactorX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactorX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3RvclguanM/YWFkNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY3JvbGxGYWN0b3JYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHNjcm9sbEZhY3RvclhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY3JvbGxGYWN0b3JYKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFNjcm9sbEZhY3RvclhcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjcm9sbEZhY3RvclggPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFNjcm9sbEZhY3Rvclg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactorX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetScrollFactorY.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetScrollFactorY.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scrollFactorY`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactorY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactorY\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactorY = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'scrollFactorY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactorY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3RvclkuanM/MzJhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY3JvbGxGYWN0b3JZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHNjcm9sbEZhY3RvcllgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY3JvbGxGYWN0b3JZKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFNjcm9sbEZhY3RvcllcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjcm9sbEZhY3RvclkgPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclknLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFNjcm9sbEZhY3Rvclk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactorY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetTint.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetTint.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public method setTint() and then updates it to the given value(s). You can specify tint color per corner or provide only one color value for `topLeft` parameter, in which case whole item will be tinted with that color.\r\n *\r\n * @function Phaser.Actions.SetTint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {number} topLeft - The tint being applied to top-left corner of item. If other parameters are given no value, this tint will be applied to whole item.\r\n * @param {number} [topRight] - The tint to be applied to top-right corner of item.\r\n * @param {number} [bottomLeft] - The tint to be applied to the bottom-left corner of item.\r\n * @param {number} [bottomRight] - The tint to be applied to the bottom-right corner of item.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SetTint = function (items, topLeft, topRight, bottomLeft, bottomRight)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].setTint(topLeft, topRight, bottomLeft, bottomRight);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = SetTint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFRpbnQuanM/ODM2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRUaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBtZXRob2Qgc2V0VGludCgpIGFuZCB0aGVuIHVwZGF0ZXMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlKHMpLiBZb3UgY2FuIHNwZWNpZnkgdGludCBjb2xvciBwZXIgY29ybmVyIG9yIHByb3ZpZGUgb25seSBvbmUgY29sb3IgdmFsdWUgZm9yIGB0b3BMZWZ0YCBwYXJhbWV0ZXIsIGluIHdoaWNoIGNhc2Ugd2hvbGUgaXRlbSB3aWxsIGJlIHRpbnRlZCB3aXRoIHRoYXQgY29sb3IuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRUaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wTGVmdCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdG9wLWxlZnQgY29ybmVyIG9mIGl0ZW0uIElmIG90aGVyIHBhcmFtZXRlcnMgYXJlIGdpdmVuIG5vIHZhbHVlLCB0aGlzIHRpbnQgd2lsbCBiZSBhcHBsaWVkIHRvIHdob2xlIGl0ZW0uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0b3AtcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYm90dG9tTGVmdF0gLSBUaGUgdGludCB0byBiZSBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBjb3JuZXIgb2YgaXRlbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgdGludCB0byBiZSBhcHBsaWVkIHRvIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0VGludCA9IGZ1bmN0aW9uIChpdGVtcywgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnNldFRpbnQodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFRpbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetTint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetVisible.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetVisible.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `visible`\r\n * and then sets it to the given value.\r\n *\r\n * To use this with a Group: `SetVisible(group.getChildren(), value)`\r\n *\r\n * @function Phaser.Actions.SetVisible\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {boolean} value - The value to set the property to.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetVisible = function (items, value, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'visible', value, 0, index, direction);\r\n};\r\n\r\nmodule.exports = SetVisible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFZpc2libGUuanM/YWM3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0VmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGB2aXNpYmxlYFxyXG4gKiBhbmQgdGhlbiBzZXRzIGl0IHRvIHRoZSBnaXZlbiB2YWx1ZS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0VmlzaWJsZShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRWaXNpYmxlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRWaXNpYmxlID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICd2aXNpYmxlJywgdmFsdWUsIDAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetVisible.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetX.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetX.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `x`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetX = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'x', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFguanM/ZWFlYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRYKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAneCcsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0WDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetXY.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetXY.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `x` and `y`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetXY(group.getChildren(), x, y, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} x - The amount to set the `x` property to.\r\n * @param {number} [y=x] - The amount to set the `y` property to. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetXY = function (items, x, y, stepX, stepY, index, direction)\r\n{\r\n    if (y === undefined || y === null) { y = x; }\r\n\r\n    PropertyValueSet(items, 'x', x, stepX, index, direction);\r\n\r\n    return PropertyValueSet(items, 'y', y, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFhZLmpzP2MyNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTzs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0WFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIGB4YCBhbmQgYHlgXHJcbiAqIGFuZCB0aGVuIHNldHMgdGhlbSB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBYYCBhbmQgYHN0ZXBZYCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0WFkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgeCwgeSwgc3RlcFgsIHN0ZXBZKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFhZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHhgIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHlgIHByb3BlcnR5IHRvLiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHhgIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WFkgPSBmdW5jdGlvbiAoaXRlbXMsIHgsIHksIHN0ZXBYLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCB8fCB5ID09PSBudWxsKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3gnLCB4LCBzdGVwWCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICd5JywgeSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRYWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SetY.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/actions/SetY.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `y`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetY = function (items, value, step, index, direction)\r\n{\r\n    return PropertyValueSet(items, 'y', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFkuanM/ZWRhOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHlgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRZKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAneScsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0WTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/ShiftPosition.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/actions/ShiftPosition.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Iterate through the items array changing the position of each element to be that of the element that came before\r\n * it in the array (or after it if direction = 1)\r\n * \r\n * The first items position is set to x/y.\r\n * \r\n * The final x/y coords are returned\r\n *\r\n * @function Phaser.Actions.ShiftPosition\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {number} x - The x coordinate to place the first item in the array at.\r\n * @param {number} y - The y coordinate to place the first item in the array at.\r\n * @param {integer} [direction=0] - The iteration direction. 0 = first to last and 1 = last to first.\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An optional objec to store the final objects position in.\r\n *\r\n * @return {Phaser.Math.Vector2} The output vector.\r\n */\r\nvar ShiftPosition = function (items, x, y, direction, output)\r\n{\r\n    if (direction === undefined) { direction = 0; }\r\n    if (output === undefined) { output = new Vector2(); }\r\n\r\n    var px;\r\n    var py;\r\n\r\n    if (items.length > 1)\r\n    {\r\n        var i;\r\n        var cx;\r\n        var cy;\r\n        var cur;\r\n\r\n        if (direction === 0)\r\n        {\r\n            //  Bottom to Top\r\n\r\n            var len = items.length - 1;\r\n\r\n            px = items[len].x;\r\n            py = items[len].y;\r\n\r\n            for (i = len - 1; i >= 0; i--)\r\n            {\r\n                //  Current item\r\n                cur = items[i];\r\n\r\n                //  Get current item x/y, to be passed to the next item in the list\r\n                cx = cur.x;\r\n                cy = cur.y;\r\n\r\n                //  Set current item to the previous items x/y\r\n                cur.x = px;\r\n                cur.y = py;\r\n\r\n                //  Set current as previous\r\n                px = cx;\r\n                py = cy;\r\n            }\r\n\r\n            //  Update the head item to the new x/y coordinates\r\n            items[len].x = x;\r\n            items[len].y = y;\r\n        }\r\n        else\r\n        {\r\n            //  Top to Bottom\r\n\r\n            px = items[0].x;\r\n            py = items[0].y;\r\n\r\n            for (i = 1; i < items.length; i++)\r\n            {\r\n                //  Current item\r\n                cur = items[i];\r\n\r\n                //  Get current item x/y, to be passed to the next item in the list\r\n                cx = cur.x;\r\n                cy = cur.y;\r\n\r\n                //  Set current item to the previous items x/y\r\n                cur.x = px;\r\n                cur.y = py;\r\n\r\n                //  Set current as previous\r\n                px = cx;\r\n                py = cy;\r\n            }\r\n\r\n            //  Update the head item to the new x/y coordinates\r\n            items[0].x = x;\r\n            items[0].y = y;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        px = items[0].x;\r\n        py = items[0].y;\r\n\r\n        items[0].x = x;\r\n        items[0].y = y;\r\n    }\r\n\r\n    //  Return the final set of coordinates as they're effectively lost from the shift and may be needed\r\n\r\n    output.x = px;\r\n    output.y = py;\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = ShiftPosition;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NoaWZ0UG9zaXRpb24uanM/MTZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTtBQUNqRCwrQkFBK0Isd0JBQXdCOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NoaWZ0UG9zaXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBhcnJheSBjaGFuZ2luZyB0aGUgcG9zaXRpb24gb2YgZWFjaCBlbGVtZW50IHRvIGJlIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGhhdCBjYW1lIGJlZm9yZVxyXG4gKiBpdCBpbiB0aGUgYXJyYXkgKG9yIGFmdGVyIGl0IGlmIGRpcmVjdGlvbiA9IDEpXHJcbiAqIFxyXG4gKiBUaGUgZmlyc3QgaXRlbXMgcG9zaXRpb24gaXMgc2V0IHRvIHgveS5cclxuICogXHJcbiAqIFRoZSBmaW5hbCB4L3kgY29vcmRzIGFyZSByZXR1cm5lZFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2hpZnRQb3NpdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXNdXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gcGxhY2UgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IGF0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gcGxhY2UgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IGF0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MF0gLSBUaGUgaXRlcmF0aW9uIGRpcmVjdGlvbi4gMCA9IGZpcnN0IHRvIGxhc3QgYW5kIDEgPSBsYXN0IHRvIGZpcnN0LlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb3B0aW9uYWwgb2JqZWMgdG8gc3RvcmUgdGhlIGZpbmFsIG9iamVjdHMgcG9zaXRpb24gaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBvdXRwdXQgdmVjdG9yLlxyXG4gKi9cclxudmFyIFNoaWZ0UG9zaXRpb24gPSBmdW5jdGlvbiAoaXRlbXMsIHgsIHksIGRpcmVjdGlvbiwgb3V0cHV0KVxyXG57XHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHsgZGlyZWN0aW9uID0gMDsgfVxyXG4gICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICB2YXIgcHg7XHJcbiAgICB2YXIgcHk7XHJcblxyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGN4O1xyXG4gICAgICAgIHZhciBjeTtcclxuICAgICAgICB2YXIgY3VyO1xyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEJvdHRvbSB0byBUb3BcclxuXHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBpdGVtcy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgcHggPSBpdGVtc1tsZW5dLng7XHJcbiAgICAgICAgICAgIHB5ID0gaXRlbXNbbGVuXS55O1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBDdXJyZW50IGl0ZW1cclxuICAgICAgICAgICAgICAgIGN1ciA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBHZXQgY3VycmVudCBpdGVtIHgveSwgdG8gYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgICAgIGN4ID0gY3VyLng7XHJcbiAgICAgICAgICAgICAgICBjeSA9IGN1ci55O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBpdGVtIHRvIHRoZSBwcmV2aW91cyBpdGVtcyB4L3lcclxuICAgICAgICAgICAgICAgIGN1ci54ID0gcHg7XHJcbiAgICAgICAgICAgICAgICBjdXIueSA9IHB5O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBhcyBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgcHggPSBjeDtcclxuICAgICAgICAgICAgICAgIHB5ID0gY3k7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBVcGRhdGUgdGhlIGhlYWQgaXRlbSB0byB0aGUgbmV3IHgveSBjb29yZGluYXRlc1xyXG4gICAgICAgICAgICBpdGVtc1tsZW5dLnggPSB4O1xyXG4gICAgICAgICAgICBpdGVtc1tsZW5dLnkgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVG9wIHRvIEJvdHRvbVxyXG5cclxuICAgICAgICAgICAgcHggPSBpdGVtc1swXS54O1xyXG4gICAgICAgICAgICBweSA9IGl0ZW1zWzBdLnk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBDdXJyZW50IGl0ZW1cclxuICAgICAgICAgICAgICAgIGN1ciA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBHZXQgY3VycmVudCBpdGVtIHgveSwgdG8gYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgICAgIGN4ID0gY3VyLng7XHJcbiAgICAgICAgICAgICAgICBjeSA9IGN1ci55O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBpdGVtIHRvIHRoZSBwcmV2aW91cyBpdGVtcyB4L3lcclxuICAgICAgICAgICAgICAgIGN1ci54ID0gcHg7XHJcbiAgICAgICAgICAgICAgICBjdXIueSA9IHB5O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBhcyBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgcHggPSBjeDtcclxuICAgICAgICAgICAgICAgIHB5ID0gY3k7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBVcGRhdGUgdGhlIGhlYWQgaXRlbSB0byB0aGUgbmV3IHgveSBjb29yZGluYXRlc1xyXG4gICAgICAgICAgICBpdGVtc1swXS54ID0geDtcclxuICAgICAgICAgICAgaXRlbXNbMF0ueSA9IHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHB4ID0gaXRlbXNbMF0ueDtcclxuICAgICAgICBweSA9IGl0ZW1zWzBdLnk7XHJcblxyXG4gICAgICAgIGl0ZW1zWzBdLnggPSB4O1xyXG4gICAgICAgIGl0ZW1zWzBdLnkgPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBSZXR1cm4gdGhlIGZpbmFsIHNldCBvZiBjb29yZGluYXRlcyBhcyB0aGV5J3JlIGVmZmVjdGl2ZWx5IGxvc3QgZnJvbSB0aGUgc2hpZnQgYW5kIG1heSBiZSBuZWVkZWRcclxuXHJcbiAgICBvdXRwdXQueCA9IHB4O1xyXG4gICAgb3V0cHV0LnkgPSBweTtcclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGlmdFBvc2l0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ShiftPosition.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/Shuffle.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/actions/Shuffle.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayShuffle = __webpack_require__(/*! ../utils/array/Shuffle */ \"./node_modules/phaser/src/utils/array/Shuffle.js\");\r\n\r\n/**\r\n * Shuffles the array in place. The shuffled array is both modified and returned.\r\n *\r\n * @function Phaser.Actions.Shuffle\r\n * @since 3.0.0\r\n * @see Phaser.Utils.Array.Shuffle\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar Shuffle = function (items)\r\n{\r\n    return ArrayShuffle(items);\r\n};\r\n\r\nmodule.exports = Shuffle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NodWZmbGUuanM/MGIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQ7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TaHVmZmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXJyYXlTaHVmZmxlID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvU2h1ZmZsZScpO1xyXG5cclxuLyoqXHJcbiAqIFNodWZmbGVzIHRoZSBhcnJheSBpbiBwbGFjZS4gVGhlIHNodWZmbGVkIGFycmF5IGlzIGJvdGggbW9kaWZpZWQgYW5kIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2h1ZmZsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHNlZSBQaGFzZXIuVXRpbHMuQXJyYXkuU2h1ZmZsZVxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNodWZmbGUgPSBmdW5jdGlvbiAoaXRlbXMpXHJcbntcclxuICAgIHJldHVybiBBcnJheVNodWZmbGUoaXRlbXMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaHVmZmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Shuffle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SmoothStep.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/actions/SmoothStep.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathSmoothStep = __webpack_require__(/*! ../math/SmoothStep */ \"./node_modules/phaser/src/math/SmoothStep.js\");\r\n\r\n/**\r\n * Smoothstep is a sigmoid-like interpolation and clamping function.\r\n * \r\n * The function depends on three parameters, the input x, the \"left edge\" and the \"right edge\", with the left edge being assumed smaller than the right edge. The function receives a real number x as an argument and returns 0 if x is less than or equal to the left edge, 1 if x is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial, between 0 and 1 otherwise. The slope of the smoothstep function is zero at both edges. This is convenient for creating a sequence of transitions using smoothstep to interpolate each segment as an alternative to using more sophisticated or expensive interpolation techniques.\r\n *\r\n * @function Phaser.Actions.SmoothStep\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to interpolate.\r\n * @param {number} min - The minimum interpolation value.\r\n * @param {number} max - The maximum interpolation value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SmoothStep = function (items, property, min, max, inc)\r\n{\r\n    if (inc === undefined) { inc = false; }\r\n\r\n    var step = Math.abs(max - min) / items.length;\r\n    var i;\r\n\r\n    if (inc)\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] += MathSmoothStep(i * step, min, max);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] = MathSmoothStep(i * step, min, max);\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = SmoothStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aFN0ZXAuanM/MTRlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsd0VBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsYUFBYTs7QUFFekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aFN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNYXRoU21vb3RoU3RlcCA9IHJlcXVpcmUoJy4uL21hdGgvU21vb3RoU3RlcCcpO1xyXG5cclxuLyoqXHJcbiAqIFNtb290aHN0ZXAgaXMgYSBzaWdtb2lkLWxpa2UgaW50ZXJwb2xhdGlvbiBhbmQgY2xhbXBpbmcgZnVuY3Rpb24uXHJcbiAqIFxyXG4gKiBUaGUgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aHJlZSBwYXJhbWV0ZXJzLCB0aGUgaW5wdXQgeCwgdGhlIFwibGVmdCBlZGdlXCIgYW5kIHRoZSBcInJpZ2h0IGVkZ2VcIiwgd2l0aCB0aGUgbGVmdCBlZGdlIGJlaW5nIGFzc3VtZWQgc21hbGxlciB0aGFuIHRoZSByaWdodCBlZGdlLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYSByZWFsIG51bWJlciB4IGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIDAgaWYgeCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlZnQgZWRnZSwgMSBpZiB4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmlnaHQgZWRnZSwgYW5kIHNtb290aGx5IGludGVycG9sYXRlcywgdXNpbmcgYSBIZXJtaXRlIHBvbHlub21pYWwsIGJldHdlZW4gMCBhbmQgMSBvdGhlcndpc2UuIFRoZSBzbG9wZSBvZiB0aGUgc21vb3Roc3RlcCBmdW5jdGlvbiBpcyB6ZXJvIGF0IGJvdGggZWRnZXMuIFRoaXMgaXMgY29udmVuaWVudCBmb3IgY3JlYXRpbmcgYSBzZXF1ZW5jZSBvZiB0cmFuc2l0aW9ucyB1c2luZyBzbW9vdGhzdGVwIHRvIGludGVycG9sYXRlIGVhY2ggc2VnbWVudCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgb3IgZXhwZW5zaXZlIGludGVycG9sYXRpb24gdGVjaG5pcXVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNtb290aFN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiB0aGUgR2FtZSBPYmplY3QgdG8gaW50ZXJwb2xhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSBpbnRlcnBvbGF0aW9uIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gaW50ZXJwb2xhdGlvbiB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbaW5jPWZhbHNlXSAtIFNob3VsZCB0aGUgdmFsdWVzIGJlIGluY3JlbWVudGVkPyBgdHJ1ZWAgb3Igc2V0IChgZmFsc2VgKVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNtb290aFN0ZXAgPSBmdW5jdGlvbiAoaXRlbXMsIHByb3BlcnR5LCBtaW4sIG1heCwgaW5jKVxyXG57XHJcbiAgICBpZiAoaW5jID09PSB1bmRlZmluZWQpIHsgaW5jID0gZmFsc2U7IH1cclxuXHJcbiAgICB2YXIgc3RlcCA9IE1hdGguYWJzKG1heCAtIG1pbikgLyBpdGVtcy5sZW5ndGg7XHJcbiAgICB2YXIgaTtcclxuXHJcbiAgICBpZiAoaW5jKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW3Byb3BlcnR5XSArPSBNYXRoU21vb3RoU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpdGVtc1tpXVtwcm9wZXJ0eV0gPSBNYXRoU21vb3RoU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aFN0ZXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SmoothStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/SmootherStep.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/actions/SmootherStep.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathSmootherStep = __webpack_require__(/*! ../math/SmootherStep */ \"./node_modules/phaser/src/math/SmootherStep.js\");\r\n\r\n/**\r\n * Smootherstep is a sigmoid-like interpolation and clamping function.\r\n * \r\n * The function depends on three parameters, the input x, the \"left edge\" and the \"right edge\", with the left edge being assumed smaller than the right edge. The function receives a real number x as an argument and returns 0 if x is less than or equal to the left edge, 1 if x is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial, between 0 and 1 otherwise. The slope of the smoothstep function is zero at both edges. This is convenient for creating a sequence of transitions using smoothstep to interpolate each segment as an alternative to using more sophisticated or expensive interpolation techniques.\r\n *\r\n * @function Phaser.Actions.SmootherStep\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to interpolate.\r\n * @param {number} min - The minimum interpolation value.\r\n * @param {number} max - The maximum interpolation value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SmootherStep = function (items, property, min, max, inc)\r\n{\r\n    if (inc === undefined) { inc = false; }\r\n\r\n    var step = Math.abs(max - min) / items.length;\r\n    var i;\r\n\r\n    if (inc)\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] += MathSmootherStep(i * step, min, max);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] = MathSmootherStep(i * step, min, max);\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = SmootherStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aGVyU3RlcC5qcz8zYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBc0I7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixhQUFhOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU21vb3RoZXJTdGVwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTWF0aFNtb290aGVyU3RlcCA9IHJlcXVpcmUoJy4uL21hdGgvU21vb3RoZXJTdGVwJyk7XHJcblxyXG4vKipcclxuICogU21vb3RoZXJzdGVwIGlzIGEgc2lnbW9pZC1saWtlIGludGVycG9sYXRpb24gYW5kIGNsYW1waW5nIGZ1bmN0aW9uLlxyXG4gKiBcclxuICogVGhlIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhyZWUgcGFyYW1ldGVycywgdGhlIGlucHV0IHgsIHRoZSBcImxlZnQgZWRnZVwiIGFuZCB0aGUgXCJyaWdodCBlZGdlXCIsIHdpdGggdGhlIGxlZnQgZWRnZSBiZWluZyBhc3N1bWVkIHNtYWxsZXIgdGhhbiB0aGUgcmlnaHQgZWRnZS4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVhbCBudW1iZXIgeCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyAwIGlmIHggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2UsIDEgaWYgeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJpZ2h0IGVkZ2UsIGFuZCBzbW9vdGhseSBpbnRlcnBvbGF0ZXMsIHVzaW5nIGEgSGVybWl0ZSBwb2x5bm9taWFsLCBiZXR3ZWVuIDAgYW5kIDEgb3RoZXJ3aXNlLiBUaGUgc2xvcGUgb2YgdGhlIHNtb290aHN0ZXAgZnVuY3Rpb24gaXMgemVybyBhdCBib3RoIGVkZ2VzLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGNyZWF0aW5nIGEgc2VxdWVuY2Ugb2YgdHJhbnNpdGlvbnMgdXNpbmcgc21vb3Roc3RlcCB0byBpbnRlcnBvbGF0ZSBlYWNoIHNlZ21lbnQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIG9yIGV4cGVuc2l2ZSBpbnRlcnBvbGF0aW9uIHRlY2huaXF1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TbW9vdGhlclN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiB0aGUgR2FtZSBPYmplY3QgdG8gaW50ZXJwb2xhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSBpbnRlcnBvbGF0aW9uIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gaW50ZXJwb2xhdGlvbiB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbaW5jPWZhbHNlXSAtIFNob3VsZCB0aGUgdmFsdWVzIGJlIGluY3JlbWVudGVkPyBgdHJ1ZWAgb3Igc2V0IChgZmFsc2VgKVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNtb290aGVyU3RlcCA9IGZ1bmN0aW9uIChpdGVtcywgcHJvcGVydHksIG1pbiwgbWF4LCBpbmMpXHJcbntcclxuICAgIGlmIChpbmMgPT09IHVuZGVmaW5lZCkgeyBpbmMgPSBmYWxzZTsgfVxyXG5cclxuICAgIHZhciBzdGVwID0gTWF0aC5hYnMobWF4IC0gbWluKSAvIGl0ZW1zLmxlbmd0aDtcclxuICAgIHZhciBpO1xyXG5cclxuICAgIGlmIChpbmMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldICs9IE1hdGhTbW9vdGhlclN0ZXAoaSAqIHN0ZXAsIG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldID0gTWF0aFNtb290aGVyU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aGVyU3RlcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SmootherStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/Spread.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/actions/Spread.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and then modifies their `property` so the value equals, or is incremented, by the\r\n * calculated spread value.\r\n * \r\n * The spread value is derived from the given `min` and `max` values and the total number of items in the array.\r\n * \r\n * For example, to cause an array of Sprites to change in alpha from 0 to 1 you could call:\r\n * \r\n * ```javascript\r\n * Phaser.Actions.Spread(itemsArray, 'alpha', 0, 1);\r\n * ```\r\n *\r\n * @function Phaser.Actions.Spread\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to spread.\r\n * @param {number} min - The minimum value.\r\n * @param {number} max - The maximum value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that were passed to this Action.\r\n */\r\nvar Spread = function (items, property, min, max, inc)\r\n{\r\n    if (inc === undefined) { inc = false; }\r\n\r\n    var step = Math.abs(max - min) / items.length;\r\n    var i;\r\n\r\n    if (inc)\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] += i * step + min;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        for (i = 0; i < items.length; i++)\r\n        {\r\n            items[i][property] = i * step + min;\r\n        }\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = Spread;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NwcmVhZC5qcz85MGZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixhQUFhOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU3ByZWFkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCB0aGVuIG1vZGlmaWVzIHRoZWlyIGBwcm9wZXJ0eWAgc28gdGhlIHZhbHVlIGVxdWFscywgb3IgaXMgaW5jcmVtZW50ZWQsIGJ5IHRoZVxyXG4gKiBjYWxjdWxhdGVkIHNwcmVhZCB2YWx1ZS5cclxuICogXHJcbiAqIFRoZSBzcHJlYWQgdmFsdWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBnaXZlbiBgbWluYCBhbmQgYG1heGAgdmFsdWVzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheS5cclxuICogXHJcbiAqIEZvciBleGFtcGxlLCB0byBjYXVzZSBhbiBhcnJheSBvZiBTcHJpdGVzIHRvIGNoYW5nZSBpbiBhbHBoYSBmcm9tIDAgdG8gMSB5b3UgY291bGQgY2FsbDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogUGhhc2VyLkFjdGlvbnMuU3ByZWFkKGl0ZW1zQXJyYXksICdhbHBoYScsIDAsIDEpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNwcmVhZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIHRoZSBHYW1lIE9iamVjdCB0byBzcHJlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmM9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2YWx1ZXMgYmUgaW5jcmVtZW50ZWQ/IGB0cnVlYCBvciBzZXQgKGBmYWxzZWApXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNwcmVhZCA9IGZ1bmN0aW9uIChpdGVtcywgcHJvcGVydHksIG1pbiwgbWF4LCBpbmMpXHJcbntcclxuICAgIGlmIChpbmMgPT09IHVuZGVmaW5lZCkgeyBpbmMgPSBmYWxzZTsgfVxyXG5cclxuICAgIHZhciBzdGVwID0gTWF0aC5hYnMobWF4IC0gbWluKSAvIGl0ZW1zLmxlbmd0aDtcclxuICAgIHZhciBpO1xyXG5cclxuICAgIGlmIChpbmMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldICs9IGkgKiBzdGVwICsgbWluO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpdGVtc1tpXVtwcm9wZXJ0eV0gPSBpICogc3RlcCArIG1pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcHJlYWQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Spread.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/ToggleVisible.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/actions/ToggleVisible.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and toggles the visibility of each one.\r\n * Those previously `visible = false` will become `visible = true`, and vice versa.\r\n *\r\n * @function Phaser.Actions.ToggleVisible\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar ToggleVisible = function (items)\r\n{\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        items[i].visible = !items[i].visible;\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = ToggleVisible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1RvZ2dsZVZpc2libGUuanM/MWJlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvVG9nZ2xlVmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgdG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiBlYWNoIG9uZS5cclxuICogVGhvc2UgcHJldmlvdXNseSBgdmlzaWJsZSA9IGZhbHNlYCB3aWxsIGJlY29tZSBgdmlzaWJsZSA9IHRydWVgLCBhbmQgdmljZSB2ZXJzYS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlRvZ2dsZVZpc2libGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgVG9nZ2xlVmlzaWJsZSA9IGZ1bmN0aW9uIChpdGVtcylcclxue1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpdGVtc1tpXS52aXNpYmxlID0gIWl0ZW1zW2ldLnZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb2dnbGVWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ToggleVisible.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/WrapInRectangle.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/actions/WrapInRectangle.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       samme <samme.npm@gmail.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Wrap = __webpack_require__(/*! ../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * Wrap each item's coordinates within a rectangle's area.\r\n *\r\n * @function Phaser.Actions.WrapInRectangle\r\n * @since 3.0.0\r\n * @see Phaser.Math.Wrap\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle.\r\n * @param {number} [padding=0] - An amount added to each side of the rectangle during the operation.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar WrapInRectangle = function (items, rect, padding)\r\n{\r\n    if (padding === undefined)\r\n    {\r\n        padding = 0;\r\n    }\r\n\r\n    for (var i = 0; i < items.length; i++)\r\n    {\r\n        var item = items[i];\r\n\r\n        item.x = Wrap(item.x, rect.left - padding, rect.right + padding);\r\n        item.y = Wrap(item.y, rect.top - padding, rect.bottom + padding);\r\n    }\r\n\r\n    return items;\r\n};\r\n\r\nmodule.exports = WrapInRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1dyYXBJblJlY3RhbmdsZS5qcz81OGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyw0REFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvV3JhcEluUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgc2FtbWUgPHNhbW1lLm5wbUBnbWFpbC5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgV3JhcCA9IHJlcXVpcmUoJy4uL21hdGgvV3JhcCcpO1xyXG5cclxuLyoqXHJcbiAqIFdyYXAgZWFjaCBpdGVtJ3MgY29vcmRpbmF0ZXMgd2l0aGluIGEgcmVjdGFuZ2xlJ3MgYXJlYS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLldyYXBJblJlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHNlZSBQaGFzZXIuTWF0aC5XcmFwXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwYWRkaW5nPTBdIC0gQW4gYW1vdW50IGFkZGVkIHRvIGVhY2ggc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIGR1cmluZyB0aGUgb3BlcmF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFdyYXBJblJlY3RhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgcmVjdCwgcGFkZGluZylcclxue1xyXG4gICAgaWYgKHBhZGRpbmcgPT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBwYWRkaW5nID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgIGl0ZW0ueCA9IFdyYXAoaXRlbS54LCByZWN0LmxlZnQgLSBwYWRkaW5nLCByZWN0LnJpZ2h0ICsgcGFkZGluZyk7XHJcbiAgICAgICAgaXRlbS55ID0gV3JhcChpdGVtLnksIHJlY3QudG9wIC0gcGFkZGluZywgcmVjdC5ib3R0b20gKyBwYWRkaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBJblJlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/WrapInRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/actions/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/actions/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Actions\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Angle: __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/actions/Angle.js\"),\r\n    Call: __webpack_require__(/*! ./Call */ \"./node_modules/phaser/src/actions/Call.js\"),\r\n    GetFirst: __webpack_require__(/*! ./GetFirst */ \"./node_modules/phaser/src/actions/GetFirst.js\"),\r\n    GetLast: __webpack_require__(/*! ./GetLast */ \"./node_modules/phaser/src/actions/GetLast.js\"),\r\n    GridAlign: __webpack_require__(/*! ./GridAlign */ \"./node_modules/phaser/src/actions/GridAlign.js\"),\r\n    IncAlpha: __webpack_require__(/*! ./IncAlpha */ \"./node_modules/phaser/src/actions/IncAlpha.js\"),\r\n    IncX: __webpack_require__(/*! ./IncX */ \"./node_modules/phaser/src/actions/IncX.js\"),\r\n    IncXY: __webpack_require__(/*! ./IncXY */ \"./node_modules/phaser/src/actions/IncXY.js\"),\r\n    IncY: __webpack_require__(/*! ./IncY */ \"./node_modules/phaser/src/actions/IncY.js\"),\r\n    PlaceOnCircle: __webpack_require__(/*! ./PlaceOnCircle */ \"./node_modules/phaser/src/actions/PlaceOnCircle.js\"),\r\n    PlaceOnEllipse: __webpack_require__(/*! ./PlaceOnEllipse */ \"./node_modules/phaser/src/actions/PlaceOnEllipse.js\"),\r\n    PlaceOnLine: __webpack_require__(/*! ./PlaceOnLine */ \"./node_modules/phaser/src/actions/PlaceOnLine.js\"),\r\n    PlaceOnRectangle: __webpack_require__(/*! ./PlaceOnRectangle */ \"./node_modules/phaser/src/actions/PlaceOnRectangle.js\"),\r\n    PlaceOnTriangle: __webpack_require__(/*! ./PlaceOnTriangle */ \"./node_modules/phaser/src/actions/PlaceOnTriangle.js\"),\r\n    PlayAnimation: __webpack_require__(/*! ./PlayAnimation */ \"./node_modules/phaser/src/actions/PlayAnimation.js\"),\r\n    PropertyValueInc: __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\"),\r\n    PropertyValueSet: __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\"),\r\n    RandomCircle: __webpack_require__(/*! ./RandomCircle */ \"./node_modules/phaser/src/actions/RandomCircle.js\"),\r\n    RandomEllipse: __webpack_require__(/*! ./RandomEllipse */ \"./node_modules/phaser/src/actions/RandomEllipse.js\"),\r\n    RandomLine: __webpack_require__(/*! ./RandomLine */ \"./node_modules/phaser/src/actions/RandomLine.js\"),\r\n    RandomRectangle: __webpack_require__(/*! ./RandomRectangle */ \"./node_modules/phaser/src/actions/RandomRectangle.js\"),\r\n    RandomTriangle: __webpack_require__(/*! ./RandomTriangle */ \"./node_modules/phaser/src/actions/RandomTriangle.js\"),\r\n    Rotate: __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/actions/Rotate.js\"),\r\n    RotateAround: __webpack_require__(/*! ./RotateAround */ \"./node_modules/phaser/src/actions/RotateAround.js\"),\r\n    RotateAroundDistance: __webpack_require__(/*! ./RotateAroundDistance */ \"./node_modules/phaser/src/actions/RotateAroundDistance.js\"),\r\n    ScaleX: __webpack_require__(/*! ./ScaleX */ \"./node_modules/phaser/src/actions/ScaleX.js\"),\r\n    ScaleXY: __webpack_require__(/*! ./ScaleXY */ \"./node_modules/phaser/src/actions/ScaleXY.js\"),\r\n    ScaleY: __webpack_require__(/*! ./ScaleY */ \"./node_modules/phaser/src/actions/ScaleY.js\"),\r\n    SetAlpha: __webpack_require__(/*! ./SetAlpha */ \"./node_modules/phaser/src/actions/SetAlpha.js\"),\r\n    SetBlendMode: __webpack_require__(/*! ./SetBlendMode */ \"./node_modules/phaser/src/actions/SetBlendMode.js\"),\r\n    SetDepth: __webpack_require__(/*! ./SetDepth */ \"./node_modules/phaser/src/actions/SetDepth.js\"),\r\n    SetHitArea: __webpack_require__(/*! ./SetHitArea */ \"./node_modules/phaser/src/actions/SetHitArea.js\"),\r\n    SetOrigin: __webpack_require__(/*! ./SetOrigin */ \"./node_modules/phaser/src/actions/SetOrigin.js\"),\r\n    SetRotation: __webpack_require__(/*! ./SetRotation */ \"./node_modules/phaser/src/actions/SetRotation.js\"),\r\n    SetScale: __webpack_require__(/*! ./SetScale */ \"./node_modules/phaser/src/actions/SetScale.js\"),\r\n    SetScaleX: __webpack_require__(/*! ./SetScaleX */ \"./node_modules/phaser/src/actions/SetScaleX.js\"),\r\n    SetScaleY: __webpack_require__(/*! ./SetScaleY */ \"./node_modules/phaser/src/actions/SetScaleY.js\"),\r\n    SetScrollFactor: __webpack_require__(/*! ./SetScrollFactor */ \"./node_modules/phaser/src/actions/SetScrollFactor.js\"),\r\n    SetScrollFactorX: __webpack_require__(/*! ./SetScrollFactorX */ \"./node_modules/phaser/src/actions/SetScrollFactorX.js\"),\r\n    SetScrollFactorY: __webpack_require__(/*! ./SetScrollFactorY */ \"./node_modules/phaser/src/actions/SetScrollFactorY.js\"),\r\n    SetTint: __webpack_require__(/*! ./SetTint */ \"./node_modules/phaser/src/actions/SetTint.js\"),\r\n    SetVisible: __webpack_require__(/*! ./SetVisible */ \"./node_modules/phaser/src/actions/SetVisible.js\"),\r\n    SetX: __webpack_require__(/*! ./SetX */ \"./node_modules/phaser/src/actions/SetX.js\"),\r\n    SetXY: __webpack_require__(/*! ./SetXY */ \"./node_modules/phaser/src/actions/SetXY.js\"),\r\n    SetY: __webpack_require__(/*! ./SetY */ \"./node_modules/phaser/src/actions/SetY.js\"),\r\n    ShiftPosition: __webpack_require__(/*! ./ShiftPosition */ \"./node_modules/phaser/src/actions/ShiftPosition.js\"),\r\n    Shuffle: __webpack_require__(/*! ./Shuffle */ \"./node_modules/phaser/src/actions/Shuffle.js\"),\r\n    SmootherStep: __webpack_require__(/*! ./SmootherStep */ \"./node_modules/phaser/src/actions/SmootherStep.js\"),\r\n    SmoothStep: __webpack_require__(/*! ./SmoothStep */ \"./node_modules/phaser/src/actions/SmoothStep.js\"),\r\n    Spread: __webpack_require__(/*! ./Spread */ \"./node_modules/phaser/src/actions/Spread.js\"),\r\n    ToggleVisible: __webpack_require__(/*! ./ToggleVisible */ \"./node_modules/phaser/src/actions/ToggleVisible.js\"),\r\n    WrapInRectangle: __webpack_require__(/*! ./WrapInRectangle */ \"./node_modules/phaser/src/actions/WrapInRectangle.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL2luZGV4LmpzP2I1NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMkRBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLHlEQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLG1FQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMseURBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLDJEQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyx5REFBUTtBQUMxQixtQkFBbUIsbUJBQU8sQ0FBQywyRUFBaUI7QUFDNUMsb0JBQW9CLG1CQUFPLENBQUMsNkVBQWtCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVFQUFlO0FBQ3hDLHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsbUJBQW1CLG1CQUFPLENBQUMsMkVBQWlCO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQyxpRkFBb0I7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMseUVBQWdCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFpQjtBQUM1QyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRUFBYztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsb0JBQW9CLG1CQUFPLENBQUMsNkVBQWtCO0FBQzlDLFlBQVksbUJBQU8sQ0FBQyw2REFBVTtBQUM5QixrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsMEJBQTBCLG1CQUFPLENBQUMseUZBQXdCO0FBQzFELFlBQVksbUJBQU8sQ0FBQyw2REFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFVO0FBQzlCLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLGlFQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLHFFQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBYTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyx1RUFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMsaUVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLG1FQUFhO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBYTtBQUNwQyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsaUZBQW9CO0FBQ2xELHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMscUVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLHlEQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQywyREFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMseURBQVE7QUFDMUIsbUJBQW1CLG1CQUFPLENBQUMsMkVBQWlCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQywrREFBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMscUVBQWM7QUFDdEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFVO0FBQzlCLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFpQjtBQUM1QyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7O0FBRWhEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkFjdGlvbnNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBbmdsZTogcmVxdWlyZSgnLi9BbmdsZScpLFxyXG4gICAgQ2FsbDogcmVxdWlyZSgnLi9DYWxsJyksXHJcbiAgICBHZXRGaXJzdDogcmVxdWlyZSgnLi9HZXRGaXJzdCcpLFxyXG4gICAgR2V0TGFzdDogcmVxdWlyZSgnLi9HZXRMYXN0JyksXHJcbiAgICBHcmlkQWxpZ246IHJlcXVpcmUoJy4vR3JpZEFsaWduJyksXHJcbiAgICBJbmNBbHBoYTogcmVxdWlyZSgnLi9JbmNBbHBoYScpLFxyXG4gICAgSW5jWDogcmVxdWlyZSgnLi9JbmNYJyksXHJcbiAgICBJbmNYWTogcmVxdWlyZSgnLi9JbmNYWScpLFxyXG4gICAgSW5jWTogcmVxdWlyZSgnLi9JbmNZJyksXHJcbiAgICBQbGFjZU9uQ2lyY2xlOiByZXF1aXJlKCcuL1BsYWNlT25DaXJjbGUnKSxcclxuICAgIFBsYWNlT25FbGxpcHNlOiByZXF1aXJlKCcuL1BsYWNlT25FbGxpcHNlJyksXHJcbiAgICBQbGFjZU9uTGluZTogcmVxdWlyZSgnLi9QbGFjZU9uTGluZScpLFxyXG4gICAgUGxhY2VPblJlY3RhbmdsZTogcmVxdWlyZSgnLi9QbGFjZU9uUmVjdGFuZ2xlJyksXHJcbiAgICBQbGFjZU9uVHJpYW5nbGU6IHJlcXVpcmUoJy4vUGxhY2VPblRyaWFuZ2xlJyksXHJcbiAgICBQbGF5QW5pbWF0aW9uOiByZXF1aXJlKCcuL1BsYXlBbmltYXRpb24nKSxcclxuICAgIFByb3BlcnR5VmFsdWVJbmM6IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpLFxyXG4gICAgUHJvcGVydHlWYWx1ZVNldDogcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0JyksXHJcbiAgICBSYW5kb21DaXJjbGU6IHJlcXVpcmUoJy4vUmFuZG9tQ2lyY2xlJyksXHJcbiAgICBSYW5kb21FbGxpcHNlOiByZXF1aXJlKCcuL1JhbmRvbUVsbGlwc2UnKSxcclxuICAgIFJhbmRvbUxpbmU6IHJlcXVpcmUoJy4vUmFuZG9tTGluZScpLFxyXG4gICAgUmFuZG9tUmVjdGFuZ2xlOiByZXF1aXJlKCcuL1JhbmRvbVJlY3RhbmdsZScpLFxyXG4gICAgUmFuZG9tVHJpYW5nbGU6IHJlcXVpcmUoJy4vUmFuZG9tVHJpYW5nbGUnKSxcclxuICAgIFJvdGF0ZTogcmVxdWlyZSgnLi9Sb3RhdGUnKSxcclxuICAgIFJvdGF0ZUFyb3VuZDogcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmQnKSxcclxuICAgIFJvdGF0ZUFyb3VuZERpc3RhbmNlOiByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZERpc3RhbmNlJyksXHJcbiAgICBTY2FsZVg6IHJlcXVpcmUoJy4vU2NhbGVYJyksXHJcbiAgICBTY2FsZVhZOiByZXF1aXJlKCcuL1NjYWxlWFknKSxcclxuICAgIFNjYWxlWTogcmVxdWlyZSgnLi9TY2FsZVknKSxcclxuICAgIFNldEFscGhhOiByZXF1aXJlKCcuL1NldEFscGhhJyksXHJcbiAgICBTZXRCbGVuZE1vZGU6IHJlcXVpcmUoJy4vU2V0QmxlbmRNb2RlJyksXHJcbiAgICBTZXREZXB0aDogcmVxdWlyZSgnLi9TZXREZXB0aCcpLFxyXG4gICAgU2V0SGl0QXJlYTogcmVxdWlyZSgnLi9TZXRIaXRBcmVhJyksXHJcbiAgICBTZXRPcmlnaW46IHJlcXVpcmUoJy4vU2V0T3JpZ2luJyksXHJcbiAgICBTZXRSb3RhdGlvbjogcmVxdWlyZSgnLi9TZXRSb3RhdGlvbicpLFxyXG4gICAgU2V0U2NhbGU6IHJlcXVpcmUoJy4vU2V0U2NhbGUnKSxcclxuICAgIFNldFNjYWxlWDogcmVxdWlyZSgnLi9TZXRTY2FsZVgnKSxcclxuICAgIFNldFNjYWxlWTogcmVxdWlyZSgnLi9TZXRTY2FsZVknKSxcclxuICAgIFNldFNjcm9sbEZhY3RvcjogcmVxdWlyZSgnLi9TZXRTY3JvbGxGYWN0b3InKSxcclxuICAgIFNldFNjcm9sbEZhY3Rvclg6IHJlcXVpcmUoJy4vU2V0U2Nyb2xsRmFjdG9yWCcpLFxyXG4gICAgU2V0U2Nyb2xsRmFjdG9yWTogcmVxdWlyZSgnLi9TZXRTY3JvbGxGYWN0b3JZJyksXHJcbiAgICBTZXRUaW50OiByZXF1aXJlKCcuL1NldFRpbnQnKSxcclxuICAgIFNldFZpc2libGU6IHJlcXVpcmUoJy4vU2V0VmlzaWJsZScpLFxyXG4gICAgU2V0WDogcmVxdWlyZSgnLi9TZXRYJyksXHJcbiAgICBTZXRYWTogcmVxdWlyZSgnLi9TZXRYWScpLFxyXG4gICAgU2V0WTogcmVxdWlyZSgnLi9TZXRZJyksXHJcbiAgICBTaGlmdFBvc2l0aW9uOiByZXF1aXJlKCcuL1NoaWZ0UG9zaXRpb24nKSxcclxuICAgIFNodWZmbGU6IHJlcXVpcmUoJy4vU2h1ZmZsZScpLFxyXG4gICAgU21vb3RoZXJTdGVwOiByZXF1aXJlKCcuL1Ntb290aGVyU3RlcCcpLFxyXG4gICAgU21vb3RoU3RlcDogcmVxdWlyZSgnLi9TbW9vdGhTdGVwJyksXHJcbiAgICBTcHJlYWQ6IHJlcXVpcmUoJy4vU3ByZWFkJyksXHJcbiAgICBUb2dnbGVWaXNpYmxlOiByZXF1aXJlKCcuL1RvZ2dsZVZpc2libGUnKSxcclxuICAgIFdyYXBJblJlY3RhbmdsZTogcmVxdWlyZSgnLi9XcmFwSW5SZWN0YW5nbGUnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/Animation.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/animations/Animation.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\nvar FindClosestInSorted = __webpack_require__(/*! ../utils/array/FindClosestInSorted */ \"./node_modules/phaser/src/utils/array/FindClosestInSorted.js\");\r\nvar Frame = __webpack_require__(/*! ./AnimationFrame */ \"./node_modules/phaser/src/animations/AnimationFrame.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Frame based Animation.\r\n *\r\n * This consists of a key, some default values (like the frame rate) and a bunch of Frame objects.\r\n *\r\n * The Animation Manager creates these. Game Objects don't own an instance of these directly.\r\n * Game Objects have the Animation Component, which are like playheads to global Animations (these objects)\r\n * So multiple Game Objects can have playheads all pointing to this one Animation instance.\r\n *\r\n * @class Animation\r\n * @memberof Phaser.Animations\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationManager} manager - A reference to the global Animation Manager\r\n * @param {string} key - The unique identifying string for this animation.\r\n * @param {Phaser.Types.Animations.Animation} config - The Animation configuration.\r\n */\r\nvar Animation = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Animation (manager, key, config)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the global Animation Manager.\r\n         *\r\n         * @name Phaser.Animations.Animation#manager\r\n         * @type {Phaser.Animations.AnimationManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * The unique identifying string for this animation.\r\n         *\r\n         * @name Phaser.Animations.Animation#key\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.key = key;\r\n\r\n        /**\r\n         * A frame based animation (as opposed to a bone based animation)\r\n         *\r\n         * @name Phaser.Animations.Animation#type\r\n         * @type {string}\r\n         * @default frame\r\n         * @since 3.0.0\r\n         */\r\n        this.type = 'frame';\r\n\r\n        /**\r\n         * Extract all the frame data into the frames array.\r\n         *\r\n         * @name Phaser.Animations.Animation#frames\r\n         * @type {Phaser.Animations.AnimationFrame[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.frames = this.getFrames(\r\n            manager.textureManager,\r\n            GetValue(config, 'frames', []),\r\n            GetValue(config, 'defaultTextureKey', null)\r\n        );\r\n\r\n        /**\r\n         * The frame rate of playback in frames per second (default 24 if duration is null)\r\n         *\r\n         * @name Phaser.Animations.Animation#frameRate\r\n         * @type {integer}\r\n         * @default 24\r\n         * @since 3.0.0\r\n         */\r\n        this.frameRate = GetValue(config, 'frameRate', null);\r\n\r\n        /**\r\n         * How long the animation should play for, in milliseconds.\r\n         * If the `frameRate` property has been set then it overrides this value,\r\n         * otherwise the `frameRate` is derived from `duration`.\r\n         *\r\n         * @name Phaser.Animations.Animation#duration\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = GetValue(config, 'duration', null);\r\n\r\n        if (this.duration === null && this.frameRate === null)\r\n        {\r\n            //  No duration or frameRate given, use default frameRate of 24fps\r\n            this.frameRate = 24;\r\n            this.duration = (this.frameRate / this.frames.length) * 1000;\r\n        }\r\n        else if (this.duration && this.frameRate === null)\r\n        {\r\n            //  Duration given but no frameRate, so set the frameRate based on duration\r\n            //  I.e. 12 frames in the animation, duration = 4000 ms\r\n            //  So frameRate is 12 / (4000 / 1000) = 3 fps\r\n            this.frameRate = this.frames.length / (this.duration / 1000);\r\n        }\r\n        else\r\n        {\r\n            //  frameRate given, derive duration from it (even if duration also specified)\r\n            //  I.e. 15 frames in the animation, frameRate = 30 fps\r\n            //  So duration is 15 / 30 = 0.5 * 1000 (half a second, or 500ms)\r\n            this.duration = (this.frames.length / this.frameRate) * 1000;\r\n        }\r\n\r\n        /**\r\n         * How many ms per frame, not including frame specific modifiers.\r\n         *\r\n         * @name Phaser.Animations.Animation#msPerFrame\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.msPerFrame = 1000 / this.frameRate;\r\n\r\n        /**\r\n         * Skip frames if the time lags, or always advanced anyway?\r\n         *\r\n         * @name Phaser.Animations.Animation#skipMissedFrames\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.skipMissedFrames = GetValue(config, 'skipMissedFrames', true);\r\n\r\n        /**\r\n         * The delay in ms before the playback will begin.\r\n         *\r\n         * @name Phaser.Animations.Animation#delay\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.delay = GetValue(config, 'delay', 0);\r\n\r\n        /**\r\n         * Number of times to repeat the animation. Set to -1 to repeat forever.\r\n         *\r\n         * @name Phaser.Animations.Animation#repeat\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.repeat = GetValue(config, 'repeat', 0);\r\n\r\n        /**\r\n         * The delay in ms before the a repeat play starts.\r\n         *\r\n         * @name Phaser.Animations.Animation#repeatDelay\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.repeatDelay = GetValue(config, 'repeatDelay', 0);\r\n\r\n        /**\r\n         * Should the animation yoyo (reverse back down to the start) before repeating?\r\n         *\r\n         * @name Phaser.Animations.Animation#yoyo\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.yoyo = GetValue(config, 'yoyo', false);\r\n\r\n        /**\r\n         * Should the GameObject's `visible` property be set to `true` when the animation starts to play?\r\n         *\r\n         * @name Phaser.Animations.Animation#showOnStart\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.showOnStart = GetValue(config, 'showOnStart', false);\r\n\r\n        /**\r\n         * Should the GameObject's `visible` property be set to `false` when the animation finishes?\r\n         *\r\n         * @name Phaser.Animations.Animation#hideOnComplete\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.hideOnComplete = GetValue(config, 'hideOnComplete', false);\r\n\r\n        /**\r\n         * Global pause. All Game Objects using this Animation instance are impacted by this property.\r\n         *\r\n         * @name Phaser.Animations.Animation#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        this.manager.on(Events.PAUSE_ALL, this.pause, this);\r\n        this.manager.on(Events.RESUME_ALL, this.resume, this);\r\n    },\r\n\r\n    /**\r\n     * Add frames to the end of the animation.\r\n     *\r\n     * @method Phaser.Animations.Animation#addFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Animations.AnimationFrame[])} config - [description]\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    addFrame: function (config)\r\n    {\r\n        return this.addFrameAt(this.frames.length, config);\r\n    },\r\n\r\n    /**\r\n     * Add frame/s into the animation.\r\n     *\r\n     * @method Phaser.Animations.Animation#addFrameAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index to insert the frame at within the animation.\r\n     * @param {(string|Phaser.Types.Animations.AnimationFrame[])} config - [description]\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    addFrameAt: function (index, config)\r\n    {\r\n        var newFrames = this.getFrames(this.manager.textureManager, config);\r\n\r\n        if (newFrames.length > 0)\r\n        {\r\n            if (index === 0)\r\n            {\r\n                this.frames = newFrames.concat(this.frames);\r\n            }\r\n            else if (index === this.frames.length)\r\n            {\r\n                this.frames = this.frames.concat(newFrames);\r\n            }\r\n            else\r\n            {\r\n                var pre = this.frames.slice(0, index);\r\n                var post = this.frames.slice(index);\r\n\r\n                this.frames = pre.concat(newFrames, post);\r\n            }\r\n\r\n            this.updateFrameSequence();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check if the given frame index is valid.\r\n     *\r\n     * @method Phaser.Animations.Animation#checkFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index to be checked.\r\n     *\r\n     * @return {boolean} `true` if the index is valid, otherwise `false`.\r\n     */\r\n    checkFrame: function (index)\r\n    {\r\n        return (index >= 0 && index < this.frames.length);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#completeAnimation\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     */\r\n    completeAnimation: function (component)\r\n    {\r\n        if (this.hideOnComplete)\r\n        {\r\n            component.parent.visible = false;\r\n        }\r\n\r\n        component.stop();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#getFirstTick\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     * @param {boolean} [includeDelay=true] - [description]\r\n     */\r\n    getFirstTick: function (component, includeDelay)\r\n    {\r\n        if (includeDelay === undefined) { includeDelay = true; }\r\n\r\n        //  When is the first update due?\r\n        component.accumulator = 0;\r\n        component.nextTick = component.msPerFrame + component.currentFrame.duration;\r\n\r\n        if (includeDelay)\r\n        {\r\n            component.nextTick += component._delay;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns the AnimationFrame at the provided index\r\n     *\r\n     * @method Phaser.Animations.Animation#getFrameAt\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index in the AnimationFrame array\r\n     *\r\n     * @return {Phaser.Animations.AnimationFrame} The frame at the index provided from the animation sequence\r\n     */\r\n    getFrameAt: function (index)\r\n    {\r\n        return this.frames[index];\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#getFrames\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.TextureManager} textureManager - [description]\r\n     * @param {(string|Phaser.Types.Animations.AnimationFrame[])} frames - [description]\r\n     * @param {string} [defaultTextureKey] - [description]\r\n     *\r\n     * @return {Phaser.Animations.AnimationFrame[]} [description]\r\n     */\r\n    getFrames: function (textureManager, frames, defaultTextureKey)\r\n    {\r\n        var out = [];\r\n        var prev;\r\n        var animationFrame;\r\n        var index = 1;\r\n        var i;\r\n        var textureKey;\r\n\r\n        //  if frames is a string, we'll get all the frames from the texture manager as if it's a sprite sheet\r\n        if (typeof frames === 'string')\r\n        {\r\n            textureKey = frames;\r\n\r\n            var texture = textureManager.get(textureKey);\r\n            var frameKeys = texture.getFrameNames();\r\n\r\n            frames = [];\r\n\r\n            frameKeys.forEach(function (idx, value)\r\n            {\r\n                frames.push({ key: textureKey, frame: value });\r\n            });\r\n        }\r\n\r\n        if (!Array.isArray(frames) || frames.length === 0)\r\n        {\r\n            return out;\r\n        }\r\n\r\n        for (i = 0; i < frames.length; i++)\r\n        {\r\n            var item = frames[i];\r\n\r\n            var key = GetValue(item, 'key', defaultTextureKey);\r\n\r\n            if (!key)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            //  Could be an integer or a string\r\n            var frame = GetValue(item, 'frame', 0);\r\n\r\n            //  The actual texture frame\r\n            var textureFrame = textureManager.getFrame(key, frame);\r\n\r\n            animationFrame = new Frame(key, frame, index, textureFrame);\r\n\r\n            animationFrame.duration = GetValue(item, 'duration', 0);\r\n\r\n            animationFrame.isFirst = (!prev);\r\n\r\n            //  The previously created animationFrame\r\n            if (prev)\r\n            {\r\n                prev.nextFrame = animationFrame;\r\n\r\n                animationFrame.prevFrame = prev;\r\n            }\r\n\r\n            out.push(animationFrame);\r\n\r\n            prev = animationFrame;\r\n\r\n            index++;\r\n        }\r\n\r\n        if (out.length > 0)\r\n        {\r\n            animationFrame.isLast = true;\r\n\r\n            //  Link them end-to-end, so they loop\r\n            animationFrame.nextFrame = out[0];\r\n\r\n            out[0].prevFrame = animationFrame;\r\n\r\n            //  Generate the progress data\r\n\r\n            var slice = 1 / (out.length - 1);\r\n\r\n            for (i = 0; i < out.length; i++)\r\n            {\r\n                out[i].progress = i * slice;\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#getNextTick\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     */\r\n    getNextTick: function (component)\r\n    {\r\n        // accumulator += delta * _timeScale\r\n        // after a large delta surge (perf issue for example) we need to adjust for it here\r\n\r\n        //  When is the next update due?\r\n        component.accumulator -= component.nextTick;\r\n\r\n        component.nextTick = component.msPerFrame + component.currentFrame.duration;\r\n    },\r\n\r\n    /**\r\n     * Loads the Animation values into the Animation Component.\r\n     *\r\n     * @method Phaser.Animations.Animation#load\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to load values into.\r\n     * @param {integer} startFrame - The start frame of the animation to load.\r\n     */\r\n    load: function (component, startFrame)\r\n    {\r\n        if (startFrame >= this.frames.length)\r\n        {\r\n            startFrame = 0;\r\n        }\r\n\r\n        if (component.currentAnim !== this)\r\n        {\r\n            component.currentAnim = this;\r\n\r\n            component.frameRate = this.frameRate;\r\n            component.duration = this.duration;\r\n            component.msPerFrame = this.msPerFrame;\r\n            component.skipMissedFrames = this.skipMissedFrames;\r\n\r\n            component._delay = this.delay;\r\n            component._repeat = this.repeat;\r\n            component._repeatDelay = this.repeatDelay;\r\n            component._yoyo = this.yoyo;\r\n        }\r\n\r\n        var frame = this.frames[startFrame];\r\n\r\n        if (startFrame === 0 && !component.forward)\r\n        {\r\n            frame = this.getLastFrame();\r\n        }\r\n\r\n        component.updateFrame(frame);\r\n    },\r\n\r\n    /**\r\n     * Returns the frame closest to the given progress value between 0 and 1.\r\n     *\r\n     * @method Phaser.Animations.Animation#getFrameByProgress\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - A value between 0 and 1.\r\n     *\r\n     * @return {Phaser.Animations.AnimationFrame} The frame closest to the given progress value.\r\n     */\r\n    getFrameByProgress: function (value)\r\n    {\r\n        value = Clamp(value, 0, 1);\r\n\r\n        return FindClosestInSorted(value, this.frames, 'progress');\r\n    },\r\n\r\n    /**\r\n     * Advance the animation frame.\r\n     *\r\n     * @method Phaser.Animations.Animation#nextFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to advance.\r\n     */\r\n    nextFrame: function (component)\r\n    {\r\n        var frame = component.currentFrame;\r\n\r\n        //  TODO: Add frame skip support\r\n\r\n        if (frame.isLast)\r\n        {\r\n            //  We're at the end of the animation\r\n\r\n            //  Yoyo? (happens before repeat)\r\n            if (component._yoyo)\r\n            {\r\n                this.handleYoyoFrame(component, false);\r\n            }\r\n            else if (component.repeatCounter > 0)\r\n            {\r\n                //  Repeat (happens before complete)\r\n\r\n                if (component._reverse && component.forward)\r\n                {\r\n                    component.forward = false;\r\n                }\r\n                else\r\n                {\r\n                    this.repeatAnimation(component);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                this.completeAnimation(component);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.updateAndGetNextTick(component, frame.nextFrame);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Handle the yoyo functionality in nextFrame and previousFrame methods.\r\n     *\r\n     * @method Phaser.Animations.Animation#handleYoyoFrame\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to advance.\r\n     * @param {boolean} isReverse - Is animation in reverse mode? (Default: false)\r\n     */\r\n    handleYoyoFrame: function (component, isReverse)\r\n    {\r\n        if (!isReverse) { isReverse = false; }\r\n\r\n        if (component._reverse === !isReverse && component.repeatCounter > 0)\r\n        {\r\n            component.forward = isReverse;\r\n\r\n            this.repeatAnimation(component);\r\n\r\n            return;\r\n        }\r\n\r\n        if (component._reverse !== isReverse && component.repeatCounter === 0)\r\n        {\r\n            this.completeAnimation(component);\r\n\r\n            return;\r\n        }\r\n        \r\n        component.forward = isReverse;\r\n\r\n        var frame = (isReverse) ? component.currentFrame.nextFrame : component.currentFrame.prevFrame;\r\n\r\n        this.updateAndGetNextTick(component, frame);\r\n    },\r\n\r\n    /**\r\n     * Returns the animation last frame.\r\n     *\r\n     * @method Phaser.Animations.Animation#getLastFrame\r\n     * @since 3.12.0\r\n     *\r\n     * @return {Phaser.Animations.AnimationFrame} component - The Animation Last Frame.\r\n     */\r\n    getLastFrame: function ()\r\n    {\r\n        return this.frames[this.frames.length - 1];\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#previousFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     */\r\n    previousFrame: function (component)\r\n    {\r\n        var frame = component.currentFrame;\r\n\r\n        //  TODO: Add frame skip support\r\n\r\n        if (frame.isFirst)\r\n        {\r\n            //  We're at the start of the animation\r\n\r\n            if (component._yoyo)\r\n            {\r\n                this.handleYoyoFrame(component, true);\r\n            }\r\n            else if (component.repeatCounter > 0)\r\n            {\r\n                if (component._reverse && !component.forward)\r\n                {\r\n                    component.currentFrame = this.getLastFrame();\r\n                    this.repeatAnimation(component);\r\n                }\r\n                else\r\n                {\r\n                    //  Repeat (happens before complete)\r\n                    component.forward = true;\r\n                    this.repeatAnimation(component);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                this.completeAnimation(component);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.updateAndGetNextTick(component, frame.prevFrame);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Update Frame and Wait next tick.\r\n     *\r\n     * @method Phaser.Animations.Animation#updateAndGetNextTick\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} frame - An Animation frame.\r\n     */\r\n    updateAndGetNextTick: function (component, frame)\r\n    {\r\n        component.updateFrame(frame);\r\n\r\n        this.getNextTick(component);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#removeFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} frame - [description]\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    removeFrame: function (frame)\r\n    {\r\n        var index = this.frames.indexOf(frame);\r\n\r\n        if (index !== -1)\r\n        {\r\n            this.removeFrameAt(index);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a frame from the AnimationFrame array at the provided index\r\n     * and updates the animation accordingly.\r\n     *\r\n     * @method Phaser.Animations.Animation#removeFrameAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index in the AnimationFrame array\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    removeFrameAt: function (index)\r\n    {\r\n        this.frames.splice(index, 1);\r\n\r\n        this.updateFrameSequence();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#repeatAnimation\r\n     * @fires Phaser.Animations.Events#ANIMATION_REPEAT\r\n     * @fires Phaser.Animations.Events#SPRITE_ANIMATION_REPEAT\r\n     * @fires Phaser.Animations.Events#SPRITE_ANIMATION_KEY_REPEAT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     */\r\n    repeatAnimation: function (component)\r\n    {\r\n        if (component._pendingStop === 2)\r\n        {\r\n            return this.completeAnimation(component);\r\n        }\r\n\r\n        if (component._repeatDelay > 0 && component.pendingRepeat === false)\r\n        {\r\n            component.pendingRepeat = true;\r\n            component.accumulator -= component.nextTick;\r\n            component.nextTick += component._repeatDelay;\r\n        }\r\n        else\r\n        {\r\n            component.repeatCounter--;\r\n\r\n            component.updateFrame(component.currentFrame[(component.forward) ? 'nextFrame' : 'prevFrame']);\r\n\r\n            if (component.isPlaying)\r\n            {\r\n                this.getNextTick(component);\r\n\r\n                component.pendingRepeat = false;\r\n\r\n                var frame = component.currentFrame;\r\n                var parent = component.parent;\r\n\r\n                this.emit(Events.ANIMATION_REPEAT, this, frame);\r\n\r\n                parent.emit(Events.SPRITE_ANIMATION_KEY_REPEAT + this.key, this, frame, component.repeatCounter, parent);\r\n\r\n                parent.emit(Events.SPRITE_ANIMATION_REPEAT, this, frame, component.repeatCounter, parent);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the texture frame the animation uses for rendering.\r\n     *\r\n     * @method Phaser.Animations.Animation#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n     */\r\n    setFrame: function (component)\r\n    {\r\n        //  Work out which frame should be set next on the child, and set it\r\n        if (component.forward)\r\n        {\r\n            this.nextFrame(component);\r\n        }\r\n        else\r\n        {\r\n            this.previousFrame(component);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Converts the animation data to JSON.\r\n     *\r\n     * @method Phaser.Animations.Animation#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Animations.JSONAnimation} [description]\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var output = {\r\n            key: this.key,\r\n            type: this.type,\r\n            frames: [],\r\n            frameRate: this.frameRate,\r\n            duration: this.duration,\r\n            skipMissedFrames: this.skipMissedFrames,\r\n            delay: this.delay,\r\n            repeat: this.repeat,\r\n            repeatDelay: this.repeatDelay,\r\n            yoyo: this.yoyo,\r\n            showOnStart: this.showOnStart,\r\n            hideOnComplete: this.hideOnComplete\r\n        };\r\n\r\n        this.frames.forEach(function (frame)\r\n        {\r\n            output.frames.push(frame.toJSON());\r\n        });\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#updateFrameSequence\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    updateFrameSequence: function ()\r\n    {\r\n        var len = this.frames.length;\r\n        var slice = 1 / (len - 1);\r\n\r\n        var frame;\r\n\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            frame = this.frames[i];\r\n\r\n            frame.index = i + 1;\r\n            frame.isFirst = false;\r\n            frame.isLast = false;\r\n            frame.progress = i * slice;\r\n\r\n            if (i === 0)\r\n            {\r\n                frame.isFirst = true;\r\n\r\n                if (len === 1)\r\n                {\r\n                    frame.isLast = true;\r\n                    frame.nextFrame = frame;\r\n                    frame.prevFrame = frame;\r\n                }\r\n                else\r\n                {\r\n                    frame.isLast = false;\r\n                    frame.prevFrame = this.frames[len - 1];\r\n                    frame.nextFrame = this.frames[i + 1];\r\n                }\r\n            }\r\n            else if (i === len - 1 && len > 1)\r\n            {\r\n                frame.isLast = true;\r\n                frame.prevFrame = this.frames[len - 2];\r\n                frame.nextFrame = this.frames[0];\r\n            }\r\n            else if (len > 1)\r\n            {\r\n                frame.prevFrame = this.frames[i - 1];\r\n                frame.nextFrame = this.frames[i + 1];\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.paused = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Animations.Animation} This Animation object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.paused = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.Animation#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.manager.off(Events.PAUSE_ALL, this.pause, this);\r\n        this.manager.off(Events.RESUME_ALL, this.resume, this);\r\n\r\n        this.manager.remove(this.key);\r\n\r\n        for (var i = 0; i < this.frames.length; i++)\r\n        {\r\n            this.frames[i].destroy();\r\n        }\r\n\r\n        this.frames = [];\r\n\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Animation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbi5qcz9hOWY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsOERBQWU7QUFDbkMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsMEJBQTBCLG1CQUFPLENBQUMsd0dBQW9DO0FBQ3RFLFlBQVksbUJBQU8sQ0FBQyxnRkFBa0I7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxrQ0FBa0M7QUFDN0M7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxxQkFBcUI7O0FBRTlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtCQUErQjtBQUM5QyxlQUFlLGtEQUFrRDtBQUNqRSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsZ0NBQWdDO0FBQzdELGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQkFBbUI7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0NBQXNDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEZpbmRDbG9zZXN0SW5Tb3J0ZWQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9GaW5kQ2xvc2VzdEluU29ydGVkJyk7XHJcbnZhciBGcmFtZSA9IHJlcXVpcmUoJy4vQW5pbWF0aW9uRnJhbWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEZyYW1lIGJhc2VkIEFuaW1hdGlvbi5cclxuICpcclxuICogVGhpcyBjb25zaXN0cyBvZiBhIGtleSwgc29tZSBkZWZhdWx0IHZhbHVlcyAobGlrZSB0aGUgZnJhbWUgcmF0ZSkgYW5kIGEgYnVuY2ggb2YgRnJhbWUgb2JqZWN0cy5cclxuICpcclxuICogVGhlIEFuaW1hdGlvbiBNYW5hZ2VyIGNyZWF0ZXMgdGhlc2UuIEdhbWUgT2JqZWN0cyBkb24ndCBvd24gYW4gaW5zdGFuY2Ugb2YgdGhlc2UgZGlyZWN0bHkuXHJcbiAqIEdhbWUgT2JqZWN0cyBoYXZlIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LCB3aGljaCBhcmUgbGlrZSBwbGF5aGVhZHMgdG8gZ2xvYmFsIEFuaW1hdGlvbnMgKHRoZXNlIG9iamVjdHMpXHJcbiAqIFNvIG11bHRpcGxlIEdhbWUgT2JqZWN0cyBjYW4gaGF2ZSBwbGF5aGVhZHMgYWxsIHBvaW50aW5nIHRvIHRoaXMgb25lIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkFuaW1hdGlvbnNcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXJ9IG1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBhbmltYXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBjb25maWcgLSBUaGUgQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24uXHJcbiAqL1xyXG52YXIgQW5pbWF0aW9uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBbmltYXRpb24gKG1hbmFnZXIsIGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdW5pcXVlIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBhbmltYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24ja2V5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmtleSA9IGtleTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmcmFtZSBiYXNlZCBhbmltYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBib25lIGJhc2VkIGFuaW1hdGlvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCBmcmFtZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9ICdmcmFtZSc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEV4dHJhY3QgYWxsIHRoZSBmcmFtZSBkYXRhIGludG8gdGhlIGZyYW1lcyBhcnJheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNmcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKFxyXG4gICAgICAgICAgICBtYW5hZ2VyLnRleHR1cmVNYW5hZ2VyLFxyXG4gICAgICAgICAgICBHZXRWYWx1ZShjb25maWcsICdmcmFtZXMnLCBbXSksXHJcbiAgICAgICAgICAgIEdldFZhbHVlKGNvbmZpZywgJ2RlZmF1bHRUZXh0dXJlS2V5JywgbnVsbClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgcmF0ZSBvZiBwbGF5YmFjayBpbiBmcmFtZXMgcGVyIHNlY29uZCAoZGVmYXVsdCAyNCBpZiBkdXJhdGlvbiBpcyBudWxsKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2ZyYW1lUmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDI0XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVJhdGUgPSBHZXRWYWx1ZShjb25maWcsICdmcmFtZVJhdGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IGxvbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgcGxheSBmb3IsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKiBJZiB0aGUgYGZyYW1lUmF0ZWAgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRoZW4gaXQgb3ZlcnJpZGVzIHRoaXMgdmFsdWUsXHJcbiAgICAgICAgICogb3RoZXJ3aXNlIHRoZSBgZnJhbWVSYXRlYCBpcyBkZXJpdmVkIGZyb20gYGR1cmF0aW9uYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBHZXRWYWx1ZShjb25maWcsICdkdXJhdGlvbicsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiA9PT0gbnVsbCAmJiB0aGlzLmZyYW1lUmF0ZSA9PT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBObyBkdXJhdGlvbiBvciBmcmFtZVJhdGUgZ2l2ZW4sIHVzZSBkZWZhdWx0IGZyYW1lUmF0ZSBvZiAyNGZwc1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lUmF0ZSA9IDI0O1xyXG4gICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gKHRoaXMuZnJhbWVSYXRlIC8gdGhpcy5mcmFtZXMubGVuZ3RoKSAqIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZHVyYXRpb24gJiYgdGhpcy5mcmFtZVJhdGUgPT09IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRHVyYXRpb24gZ2l2ZW4gYnV0IG5vIGZyYW1lUmF0ZSwgc28gc2V0IHRoZSBmcmFtZVJhdGUgYmFzZWQgb24gZHVyYXRpb25cclxuICAgICAgICAgICAgLy8gIEkuZS4gMTIgZnJhbWVzIGluIHRoZSBhbmltYXRpb24sIGR1cmF0aW9uID0gNDAwMCBtc1xyXG4gICAgICAgICAgICAvLyAgU28gZnJhbWVSYXRlIGlzIDEyIC8gKDQwMDAgLyAxMDAwKSA9IDMgZnBzXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVSYXRlID0gdGhpcy5mcmFtZXMubGVuZ3RoIC8gKHRoaXMuZHVyYXRpb24gLyAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIGZyYW1lUmF0ZSBnaXZlbiwgZGVyaXZlIGR1cmF0aW9uIGZyb20gaXQgKGV2ZW4gaWYgZHVyYXRpb24gYWxzbyBzcGVjaWZpZWQpXHJcbiAgICAgICAgICAgIC8vICBJLmUuIDE1IGZyYW1lcyBpbiB0aGUgYW5pbWF0aW9uLCBmcmFtZVJhdGUgPSAzMCBmcHNcclxuICAgICAgICAgICAgLy8gIFNvIGR1cmF0aW9uIGlzIDE1IC8gMzAgPSAwLjUgKiAxMDAwIChoYWxmIGEgc2Vjb25kLCBvciA1MDBtcylcclxuICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9ICh0aGlzLmZyYW1lcy5sZW5ndGggLyB0aGlzLmZyYW1lUmF0ZSkgKiAxMDAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG1hbnkgbXMgcGVyIGZyYW1lLCBub3QgaW5jbHVkaW5nIGZyYW1lIHNwZWNpZmljIG1vZGlmaWVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNtc1BlckZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tc1BlckZyYW1lID0gMTAwMCAvIHRoaXMuZnJhbWVSYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTa2lwIGZyYW1lcyBpZiB0aGUgdGltZSBsYWdzLCBvciBhbHdheXMgYWR2YW5jZWQgYW55d2F5P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3NraXBNaXNzZWRGcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2tpcE1pc3NlZEZyYW1lcyA9IEdldFZhbHVlKGNvbmZpZywgJ3NraXBNaXNzZWRGcmFtZXMnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlbGF5IGluIG1zIGJlZm9yZSB0aGUgcGxheWJhY2sgd2lsbCBiZWdpbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNkZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGF5ID0gR2V0VmFsdWUoY29uZmlnLCAnZGVsYXknLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgYW5pbWF0aW9uLiBTZXQgdG8gLTEgdG8gcmVwZWF0IGZvcmV2ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jcmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0ID0gR2V0VmFsdWUoY29uZmlnLCAncmVwZWF0JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWxheSBpbiBtcyBiZWZvcmUgdGhlIGEgcmVwZWF0IHBsYXkgc3RhcnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3JlcGVhdERlbGF5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0RGVsYXkgPSBHZXRWYWx1ZShjb25maWcsICdyZXBlYXREZWxheScsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTaG91bGQgdGhlIGFuaW1hdGlvbiB5b3lvIChyZXZlcnNlIGJhY2sgZG93biB0byB0aGUgc3RhcnQpIGJlZm9yZSByZXBlYXRpbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55b3lvID0gR2V0VmFsdWUoY29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBHYW1lT2JqZWN0J3MgYHZpc2libGVgIHByb3BlcnR5IGJlIHNldCB0byBgdHJ1ZWAgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cyB0byBwbGF5P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3Nob3dPblN0YXJ0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dPblN0YXJ0ID0gR2V0VmFsdWUoY29uZmlnLCAnc2hvd09uU3RhcnQnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgR2FtZU9iamVjdCdzIGB2aXNpYmxlYCBwcm9wZXJ0eSBiZSBzZXQgdG8gYGZhbHNlYCB3aGVuIHRoZSBhbmltYXRpb24gZmluaXNoZXM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jaGlkZU9uQ29tcGxldGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGlkZU9uQ29tcGxldGUgPSBHZXRWYWx1ZShjb25maWcsICdoaWRlT25Db21wbGV0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIHBhdXNlLiBBbGwgR2FtZSBPYmplY3RzIHVzaW5nIHRoaXMgQW5pbWF0aW9uIGluc3RhbmNlIGFyZSBpbXBhY3RlZCBieSB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3BhdXNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLm9uKEV2ZW50cy5QQVVTRV9BTEwsIHRoaXMucGF1c2UsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5vbihFdmVudHMuUkVTVU1FX0FMTCwgdGhpcy5yZXN1bWUsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBmcmFtZXMgdG8gdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2FkZEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXSl9IGNvbmZpZyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IFRoaXMgQW5pbWF0aW9uIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkRnJhbWU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRnJhbWVBdCh0aGlzLmZyYW1lcy5sZW5ndGgsIGNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZyYW1lL3MgaW50byB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2FkZEZyYW1lQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggdG8gaW5zZXJ0IHRoZSBmcmFtZSBhdCB3aXRoaW4gdGhlIGFuaW1hdGlvbi5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdKX0gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGRGcmFtZUF0OiBmdW5jdGlvbiAoaW5kZXgsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgbmV3RnJhbWVzID0gdGhpcy5nZXRGcmFtZXModGhpcy5tYW5hZ2VyLnRleHR1cmVNYW5hZ2VyLCBjb25maWcpO1xyXG5cclxuICAgICAgICBpZiAobmV3RnJhbWVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gbmV3RnJhbWVzLmNvbmNhdCh0aGlzLmZyYW1lcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuZnJhbWVzLmxlbmd0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSB0aGlzLmZyYW1lcy5jb25jYXQobmV3RnJhbWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmUgPSB0aGlzLmZyYW1lcy5zbGljZSgwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zdCA9IHRoaXMuZnJhbWVzLnNsaWNlKGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lcyA9IHByZS5jb25jYXQobmV3RnJhbWVzLCBwb3N0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcmFtZVNlcXVlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZnJhbWUgaW5kZXggaXMgdmFsaWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jY2hlY2tGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCB0byBiZSBjaGVja2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5kZXggaXMgdmFsaWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjaGVja0ZyYW1lOiBmdW5jdGlvbiAoaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5mcmFtZXMubGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jY29tcGxldGVBbmltYXRpb25cclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNvbXBsZXRlQW5pbWF0aW9uOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVPbkNvbXBsZXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnQuc3RvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNnZXRGaXJzdFRpY2tcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlRGVsYXk9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudCwgaW5jbHVkZURlbGF5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpbmNsdWRlRGVsYXkgPT09IHVuZGVmaW5lZCkgeyBpbmNsdWRlRGVsYXkgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8vICBXaGVuIGlzIHRoZSBmaXJzdCB1cGRhdGUgZHVlP1xyXG4gICAgICAgIGNvbXBvbmVudC5hY2N1bXVsYXRvciA9IDA7XHJcbiAgICAgICAgY29tcG9uZW50Lm5leHRUaWNrID0gY29tcG9uZW50Lm1zUGVyRnJhbWUgKyBjb21wb25lbnQuY3VycmVudEZyYW1lLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICBpZiAoaW5jbHVkZURlbGF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50Lm5leHRUaWNrICs9IGNvbXBvbmVudC5fZGVsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIEFuaW1hdGlvbkZyYW1lIGF0IHRoZSBwcm92aWRlZCBpbmRleFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldEZyYW1lQXRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggaW4gdGhlIEFuaW1hdGlvbkZyYW1lIGFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IFRoZSBmcmFtZSBhdCB0aGUgaW5kZXggcHJvdmlkZWQgZnJvbSB0aGUgYW5pbWF0aW9uIHNlcXVlbmNlXHJcbiAgICAgKi9cclxuICAgIGdldEZyYW1lQXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZXNbaW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNnZXRGcmFtZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyfSB0ZXh0dXJlTWFuYWdlciAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdKX0gZnJhbWVzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0VGV4dHVyZUtleV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZXM6IGZ1bmN0aW9uICh0ZXh0dXJlTWFuYWdlciwgZnJhbWVzLCBkZWZhdWx0VGV4dHVyZUtleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcbiAgICAgICAgdmFyIHByZXY7XHJcbiAgICAgICAgdmFyIGFuaW1hdGlvbkZyYW1lO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDE7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHRleHR1cmVLZXk7XHJcblxyXG4gICAgICAgIC8vICBpZiBmcmFtZXMgaXMgYSBzdHJpbmcsIHdlJ2xsIGdldCBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSB0ZXh0dXJlIG1hbmFnZXIgYXMgaWYgaXQncyBhIHNwcml0ZSBzaGVldFxyXG4gICAgICAgIGlmICh0eXBlb2YgZnJhbWVzID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmVLZXkgPSBmcmFtZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVNYW5hZ2VyLmdldCh0ZXh0dXJlS2V5KTtcclxuICAgICAgICAgICAgdmFyIGZyYW1lS2V5cyA9IHRleHR1cmUuZ2V0RnJhbWVOYW1lcygpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVzID0gW107XHJcblxyXG4gICAgICAgICAgICBmcmFtZUtleXMuZm9yRWFjaChmdW5jdGlvbiAoaWR4LCB2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWVzLnB1c2goeyBrZXk6IHRleHR1cmVLZXksIGZyYW1lOiB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWVzKSB8fCBmcmFtZXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGZyYW1lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBHZXRWYWx1ZShpdGVtLCAna2V5JywgZGVmYXVsdFRleHR1cmVLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgQ291bGQgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZ1xyXG4gICAgICAgICAgICB2YXIgZnJhbWUgPSBHZXRWYWx1ZShpdGVtLCAnZnJhbWUnLCAwKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBUaGUgYWN0dWFsIHRleHR1cmUgZnJhbWVcclxuICAgICAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRleHR1cmVNYW5hZ2VyLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUgPSBuZXcgRnJhbWUoa2V5LCBmcmFtZSwgaW5kZXgsIHRleHR1cmVGcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZS5kdXJhdGlvbiA9IEdldFZhbHVlKGl0ZW0sICdkdXJhdGlvbicsIDApO1xyXG5cclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUuaXNGaXJzdCA9ICghcHJldik7XHJcblxyXG4gICAgICAgICAgICAvLyAgVGhlIHByZXZpb3VzbHkgY3JlYXRlZCBhbmltYXRpb25GcmFtZVxyXG4gICAgICAgICAgICBpZiAocHJldilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcHJldi5uZXh0RnJhbWUgPSBhbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25GcmFtZS5wcmV2RnJhbWUgPSBwcmV2O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvdXQucHVzaChhbmltYXRpb25GcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBwcmV2ID0gYW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG91dC5sZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUuaXNMYXN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBMaW5rIHRoZW0gZW5kLXRvLWVuZCwgc28gdGhleSBsb29wXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lLm5leHRGcmFtZSA9IG91dFswXTtcclxuXHJcbiAgICAgICAgICAgIG91dFswXS5wcmV2RnJhbWUgPSBhbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBHZW5lcmF0ZSB0aGUgcHJvZ3Jlc3MgZGF0YVxyXG5cclxuICAgICAgICAgICAgdmFyIHNsaWNlID0gMSAvIChvdXQubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRbaV0ucHJvZ3Jlc3MgPSBpICogc2xpY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldE5leHRUaWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXROZXh0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudClcclxuICAgIHtcclxuICAgICAgICAvLyBhY2N1bXVsYXRvciArPSBkZWx0YSAqIF90aW1lU2NhbGVcclxuICAgICAgICAvLyBhZnRlciBhIGxhcmdlIGRlbHRhIHN1cmdlIChwZXJmIGlzc3VlIGZvciBleGFtcGxlKSB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgaXQgaGVyZVxyXG5cclxuICAgICAgICAvLyAgV2hlbiBpcyB0aGUgbmV4dCB1cGRhdGUgZHVlP1xyXG4gICAgICAgIGNvbXBvbmVudC5hY2N1bXVsYXRvciAtPSBjb21wb25lbnQubmV4dFRpY2s7XHJcblxyXG4gICAgICAgIGNvbXBvbmVudC5uZXh0VGljayA9IGNvbXBvbmVudC5tc1BlckZyYW1lICsgY29tcG9uZW50LmN1cnJlbnRGcmFtZS5kdXJhdGlvbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyB0aGUgQW5pbWF0aW9uIHZhbHVlcyBpbnRvIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2xvYWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gVGhlIEFuaW1hdGlvbiBDb21wb25lbnQgdG8gbG9hZCB2YWx1ZXMgaW50by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnRGcmFtZSAtIFRoZSBzdGFydCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIGxvYWQuXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChjb21wb25lbnQsIHN0YXJ0RnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPj0gdGhpcy5mcmFtZXMubGVuZ3RoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3RhcnRGcmFtZSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50LmN1cnJlbnRBbmltICE9PSB0aGlzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LmN1cnJlbnRBbmltID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5mcmFtZVJhdGUgPSB0aGlzLmZyYW1lUmF0ZTtcclxuICAgICAgICAgICAgY29tcG9uZW50LmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICAgICAgY29tcG9uZW50Lm1zUGVyRnJhbWUgPSB0aGlzLm1zUGVyRnJhbWU7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5za2lwTWlzc2VkRnJhbWVzID0gdGhpcy5za2lwTWlzc2VkRnJhbWVzO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50Ll9kZWxheSA9IHRoaXMuZGVsYXk7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5fcmVwZWF0ID0gdGhpcy5yZXBlYXQ7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5fcmVwZWF0RGVsYXkgPSB0aGlzLnJlcGVhdERlbGF5O1xyXG4gICAgICAgICAgICBjb21wb25lbnQuX3lveW8gPSB0aGlzLnlveW87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmZyYW1lc1tzdGFydEZyYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPT09IDAgJiYgIWNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWUgPSB0aGlzLmdldExhc3RGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUZyYW1lKGZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmcmFtZSBjbG9zZXN0IHRvIHRoZSBnaXZlbiBwcm9ncmVzcyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jZ2V0RnJhbWVCeVByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gVGhlIGZyYW1lIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIHByb2dyZXNzIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZUJ5UHJvZ3Jlc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB2YWx1ZSA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEZpbmRDbG9zZXN0SW5Tb3J0ZWQodmFsdWUsIHRoaXMuZnJhbWVzLCAncHJvZ3Jlc3MnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlIHRoZSBhbmltYXRpb24gZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jbmV4dEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gVGhlIEFuaW1hdGlvbiBDb21wb25lbnQgdG8gYWR2YW5jZS5cclxuICAgICAqL1xyXG4gICAgbmV4dEZyYW1lOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudC5jdXJyZW50RnJhbWU7XHJcblxyXG4gICAgICAgIC8vICBUT0RPOiBBZGQgZnJhbWUgc2tpcCBzdXBwb3J0XHJcblxyXG4gICAgICAgIGlmIChmcmFtZS5pc0xhc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uXHJcblxyXG4gICAgICAgICAgICAvLyAgWW95bz8gKGhhcHBlbnMgYmVmb3JlIHJlcGVhdClcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5feW95bylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVZb3lvRnJhbWUoY29tcG9uZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgUmVwZWF0IChoYXBwZW5zIGJlZm9yZSBjb21wbGV0ZSlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXZlcnNlICYmIGNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5mb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBlYXRBbmltYXRpb24oY29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBbmltYXRpb24oY29tcG9uZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFuZEdldE5leHRUaWNrKGNvbXBvbmVudCwgZnJhbWUubmV4dEZyYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIHRoZSB5b3lvIGZ1bmN0aW9uYWxpdHkgaW4gbmV4dEZyYW1lIGFuZCBwcmV2aW91c0ZyYW1lIG1ldGhvZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jaGFuZGxlWW95b0ZyYW1lXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBUaGUgQW5pbWF0aW9uIENvbXBvbmVudCB0byBhZHZhbmNlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpc1JldmVyc2UgLSBJcyBhbmltYXRpb24gaW4gcmV2ZXJzZSBtb2RlPyAoRGVmYXVsdDogZmFsc2UpXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZVlveW9GcmFtZTogZnVuY3Rpb24gKGNvbXBvbmVudCwgaXNSZXZlcnNlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghaXNSZXZlcnNlKSB7IGlzUmV2ZXJzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmIChjb21wb25lbnQuX3JldmVyc2UgPT09ICFpc1JldmVyc2UgJiYgY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LmZvcndhcmQgPSBpc1JldmVyc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5fcmV2ZXJzZSAhPT0gaXNSZXZlcnNlICYmIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFuaW1hdGlvbihjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb21wb25lbnQuZm9yd2FyZCA9IGlzUmV2ZXJzZTtcclxuXHJcbiAgICAgICAgdmFyIGZyYW1lID0gKGlzUmV2ZXJzZSkgPyBjb21wb25lbnQuY3VycmVudEZyYW1lLm5leHRGcmFtZSA6IGNvbXBvbmVudC5jdXJyZW50RnJhbWUucHJldkZyYW1lO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUFuZEdldE5leHRUaWNrKGNvbXBvbmVudCwgZnJhbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGFuaW1hdGlvbiBsYXN0IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldExhc3RGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBjb21wb25lbnQgLSBUaGUgQW5pbWF0aW9uIExhc3QgRnJhbWUuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3RGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMubGVuZ3RoIC0gMV07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3ByZXZpb3VzRnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHByZXZpb3VzRnJhbWU6IGZ1bmN0aW9uIChjb21wb25lbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50LmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgLy8gIFRPRE86IEFkZCBmcmFtZSBza2lwIHN1cHBvcnRcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lLmlzRmlyc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhbmltYXRpb25cclxuXHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuX3lveW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlWW95b0ZyYW1lKGNvbXBvbmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXZlcnNlICYmICFjb21wb25lbnQuZm9yd2FyZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY3VycmVudEZyYW1lID0gdGhpcy5nZXRMYXN0RnJhbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBSZXBlYXQgKGhhcHBlbnMgYmVmb3JlIGNvbXBsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5mb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQW5kR2V0TmV4dFRpY2soY29tcG9uZW50LCBmcmFtZS5wcmV2RnJhbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgRnJhbWUgYW5kIFdhaXQgbmV4dCB0aWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3VwZGF0ZUFuZEdldE5leHRUaWNrXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gQW4gQW5pbWF0aW9uIGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVBbmRHZXROZXh0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudCwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUZyYW1lKGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXROZXh0VGljayhjb21wb25lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZW1vdmVGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBUaGlzIEFuaW1hdGlvbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5mcmFtZXMuaW5kZXhPZihmcmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lQXQoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGZyYW1lIGZyb20gdGhlIEFuaW1hdGlvbkZyYW1lIGFycmF5IGF0IHRoZSBwcm92aWRlZCBpbmRleFxyXG4gICAgICogYW5kIHVwZGF0ZXMgdGhlIGFuaW1hdGlvbiBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZW1vdmVGcmFtZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IGluIHRoZSBBbmltYXRpb25GcmFtZSBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVGcmFtZUF0OiBmdW5jdGlvbiAoaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVGcmFtZVNlcXVlbmNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZXBlYXRBbmltYXRpb25cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjQU5JTUFUSU9OX1JFUEVBVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1JFUEVBVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHJlcGVhdEFuaW1hdGlvbjogZnVuY3Rpb24gKGNvbXBvbmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29tcG9uZW50Ll9wZW5kaW5nU3RvcCA9PT0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlQW5pbWF0aW9uKGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXBlYXREZWxheSA+IDAgJiYgY29tcG9uZW50LnBlbmRpbmdSZXBlYXQgPT09IGZhbHNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnBlbmRpbmdSZXBlYXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb21wb25lbnQuYWNjdW11bGF0b3IgLT0gY29tcG9uZW50Lm5leHRUaWNrO1xyXG4gICAgICAgICAgICBjb21wb25lbnQubmV4dFRpY2sgKz0gY29tcG9uZW50Ll9yZXBlYXREZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnJlcGVhdENvdW50ZXItLTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVGcmFtZShjb21wb25lbnQuY3VycmVudEZyYW1lWyhjb21wb25lbnQuZm9yd2FyZCkgPyAnbmV4dEZyYW1lJyA6ICdwcmV2RnJhbWUnXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmlzUGxheWluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXROZXh0VGljayhjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50LmN1cnJlbnRGcmFtZTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQU5JTUFUSU9OX1JFUEVBVCwgdGhpcywgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVQgKyB0aGlzLmtleSwgdGhpcywgZnJhbWUsIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyLCBwYXJlbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVCwgdGhpcywgZnJhbWUsIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyLCBwYXJlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgZnJhbWUgdGhlIGFuaW1hdGlvbiB1c2VzIGZvciByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXb3JrIG91dCB3aGljaCBmcmFtZSBzaG91bGQgYmUgc2V0IG5leHQgb24gdGhlIGNoaWxkLCBhbmQgc2V0IGl0XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0RnJhbWUoY29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ZyYW1lKGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoZSBhbmltYXRpb24gZGF0YSB0byBKU09OLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuSlNPTkFuaW1hdGlvbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBmcmFtZXM6IFtdLFxyXG4gICAgICAgICAgICBmcmFtZVJhdGU6IHRoaXMuZnJhbWVSYXRlLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcclxuICAgICAgICAgICAgc2tpcE1pc3NlZEZyYW1lczogdGhpcy5za2lwTWlzc2VkRnJhbWVzLFxyXG4gICAgICAgICAgICBkZWxheTogdGhpcy5kZWxheSxcclxuICAgICAgICAgICAgcmVwZWF0OiB0aGlzLnJlcGVhdCxcclxuICAgICAgICAgICAgcmVwZWF0RGVsYXk6IHRoaXMucmVwZWF0RGVsYXksXHJcbiAgICAgICAgICAgIHlveW86IHRoaXMueW95byxcclxuICAgICAgICAgICAgc2hvd09uU3RhcnQ6IHRoaXMuc2hvd09uU3RhcnQsXHJcbiAgICAgICAgICAgIGhpZGVPbkNvbXBsZXRlOiB0aGlzLmhpZGVPbkNvbXBsZXRlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXQuZnJhbWVzLnB1c2goZnJhbWUudG9KU09OKCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiN1cGRhdGVGcmFtZVNlcXVlbmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IFRoaXMgQW5pbWF0aW9uIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRnJhbWVTZXF1ZW5jZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5mcmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBzbGljZSA9IDEgLyAobGVuIC0gMSk7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy5mcmFtZXNbaV07XHJcblxyXG4gICAgICAgICAgICBmcmFtZS5pbmRleCA9IGkgKyAxO1xyXG4gICAgICAgICAgICBmcmFtZS5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZyYW1lLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmcmFtZS5wcm9ncmVzcyA9IGkgKiBzbGljZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZS5pc0ZpcnN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGVuID09PSAxKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lLmlzTGFzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gdGhpcy5mcmFtZXNbbGVuIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IGxlbiAtIDEgJiYgbGVuID4gMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWUuaXNMYXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGZyYW1lLnByZXZGcmFtZSA9IHRoaXMuZnJhbWVzW2xlbiAtIDJdO1xyXG4gICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGVuID4gMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gdGhpcy5mcmFtZXNbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbaSArIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5vZmYoRXZlbnRzLlBBVVNFX0FMTCwgdGhpcy5wYXVzZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLm9mZihFdmVudHMuUkVTVU1FX0FMTCwgdGhpcy5yZXN1bWUsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlKHRoaXMua2V5KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQW5pbWF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/Animation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/AnimationFrame.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/animations/AnimationFrame.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single frame in an Animation sequence.\r\n *\r\n * An AnimationFrame consists of a reference to the Texture it uses for rendering, references to other\r\n * frames in the animation, and index data. It also has the ability to modify the animation timing.\r\n *\r\n * AnimationFrames are generated automatically by the Animation class.\r\n *\r\n * @class AnimationFrame\r\n * @memberof Phaser.Animations\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {string} textureKey - The key of the Texture this AnimationFrame uses.\r\n * @param {(string|integer)} textureFrame - The key of the Frame within the Texture that this AnimationFrame uses.\r\n * @param {integer} index - The index of this AnimationFrame within the Animation sequence.\r\n * @param {Phaser.Textures.Frame} frame - A reference to the Texture Frame this AnimationFrame uses for rendering.\r\n */\r\nvar AnimationFrame = new Class({\r\n\r\n    initialize:\r\n\r\n    function AnimationFrame (textureKey, textureFrame, index, frame)\r\n    {\r\n        /**\r\n         * The key of the Texture this AnimationFrame uses.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#textureKey\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.textureKey = textureKey;\r\n\r\n        /**\r\n         * The key of the Frame within the Texture that this AnimationFrame uses.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#textureFrame\r\n         * @type {(string|integer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.textureFrame = textureFrame;\r\n\r\n        /**\r\n         * The index of this AnimationFrame within the Animation sequence.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#index\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.index = index;\r\n\r\n        /**\r\n         * A reference to the Texture Frame this AnimationFrame uses for rendering.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = frame;\r\n\r\n        /**\r\n         * Is this the first frame in an animation sequence?\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#isFirst\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isFirst = false;\r\n\r\n        /**\r\n         * Is this the last frame in an animation sequence?\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#isLast\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isLast = false;\r\n\r\n        /**\r\n         * A reference to the AnimationFrame that comes before this one in the animation, if any.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#prevFrame\r\n         * @type {?Phaser.Animations.AnimationFrame}\r\n         * @default null\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.prevFrame = null;\r\n\r\n        /**\r\n         * A reference to the AnimationFrame that comes after this one in the animation, if any.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#nextFrame\r\n         * @type {?Phaser.Animations.AnimationFrame}\r\n         * @default null\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.nextFrame = null;\r\n\r\n        /**\r\n         * Additional time (in ms) that this frame should appear for during playback.\r\n         * The value is added onto the msPerFrame set by the animation.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#duration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * What % through the animation does this frame come?\r\n         * This value is generated when the animation is created and cached here.\r\n         *\r\n         * @name Phaser.Animations.AnimationFrame#progress\r\n         * @type {number}\r\n         * @default 0\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.progress = 0;\r\n    },\r\n\r\n    /**\r\n     * Generates a JavaScript object suitable for converting to JSON.\r\n     *\r\n     * @method Phaser.Animations.AnimationFrame#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Animations.JSONAnimationFrame} The AnimationFrame data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            key: this.textureKey,\r\n            frame: this.textureFrame,\r\n            duration: this.duration\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Destroys this object by removing references to external resources and callbacks.\r\n     *\r\n     * @method Phaser.Animations.AnimationFrame#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.frame = undefined;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = AnimationFrame;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbkZyYW1lLmpzPzUwMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbkZyYW1lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgZnJhbWUgaW4gYW4gQW5pbWF0aW9uIHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBBbiBBbmltYXRpb25GcmFtZSBjb25zaXN0cyBvZiBhIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBpdCB1c2VzIGZvciByZW5kZXJpbmcsIHJlZmVyZW5jZXMgdG8gb3RoZXJcclxuICogZnJhbWVzIGluIHRoZSBhbmltYXRpb24sIGFuZCBpbmRleCBkYXRhLiBJdCBhbHNvIGhhcyB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIGFuaW1hdGlvbiB0aW1pbmcuXHJcbiAqXHJcbiAqIEFuaW1hdGlvbkZyYW1lcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEFuaW1hdGlvbiBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvbkZyYW1lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQW5pbWF0aW9uc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEFuaW1hdGlvbkZyYW1lIHVzZXMuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gdGV4dHVyZUZyYW1lIC0gVGhlIGtleSBvZiB0aGUgRnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlIHRoYXQgdGhpcyBBbmltYXRpb25GcmFtZSB1c2VzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoaXMgQW5pbWF0aW9uRnJhbWUgd2l0aGluIHRoZSBBbmltYXRpb24gc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBmcmFtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUZXh0dXJlIEZyYW1lIHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcyBmb3IgcmVuZGVyaW5nLlxyXG4gKi9cclxudmFyIEFuaW1hdGlvbkZyYW1lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRnJhbWUsIGluZGV4LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3RleHR1cmVLZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUtleSA9IHRleHR1cmVLZXk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIEZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZSB0aGF0IHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3RleHR1cmVGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHsoc3RyaW5nfGludGVnZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUZyYW1lID0gdGV4dHVyZUZyYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyBBbmltYXRpb25GcmFtZSB3aXRoaW4gdGhlIEFuaW1hdGlvbiBzZXF1ZW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2luZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBGcmFtZSB0aGlzIEFuaW1hdGlvbkZyYW1lIHVzZXMgZm9yIHJlbmRlcmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgdGhlIGZpcnN0IGZyYW1lIGluIGFuIGFuaW1hdGlvbiBzZXF1ZW5jZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2lzRmlyc3RcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIHRoZSBsYXN0IGZyYW1lIGluIGFuIGFuaW1hdGlvbiBzZXF1ZW5jZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2lzTGFzdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbkZyYW1lIHRoYXQgY29tZXMgYmVmb3JlIHRoaXMgb25lIGluIHRoZSBhbmltYXRpb24sIGlmIGFueS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3ByZXZGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldkZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbkZyYW1lIHRoYXQgY29tZXMgYWZ0ZXIgdGhpcyBvbmUgaW4gdGhlIGFuaW1hdGlvbiwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWUjbmV4dEZyYW1lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZXh0RnJhbWUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBZGRpdGlvbmFsIHRpbWUgKGluIG1zKSB0aGF0IHRoaXMgZnJhbWUgc2hvdWxkIGFwcGVhciBmb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBpcyBhZGRlZCBvbnRvIHRoZSBtc1BlckZyYW1lIHNldCBieSB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWUjZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hhdCAlIHRocm91Z2ggdGhlIGFuaW1hdGlvbiBkb2VzIHRoaXMgZnJhbWUgY29tZT9cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBhbmltYXRpb24gaXMgY3JlYXRlZCBhbmQgY2FjaGVkIGhlcmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZSNwcm9ncmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHN1aXRhYmxlIGZvciBjb252ZXJ0aW5nIHRvIEpTT04uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZSN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkpTT05BbmltYXRpb25GcmFtZX0gVGhlIEFuaW1hdGlvbkZyYW1lIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBrZXk6IHRoaXMudGV4dHVyZUtleSxcclxuICAgICAgICAgICAgZnJhbWU6IHRoaXMudGV4dHVyZUZyYW1lLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvblxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBvYmplY3QgYnkgcmVtb3ZpbmcgcmVmZXJlbmNlcyB0byBleHRlcm5hbCByZXNvdXJjZXMgYW5kIGNhbGxiYWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQW5pbWF0aW9uRnJhbWU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/AnimationFrame.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/AnimationManager.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/animations/AnimationManager.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Animation = __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/animations/Animation.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CustomMap = __webpack_require__(/*! ../structs/Map */ \"./node_modules/phaser/src/structs/Map.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Pad = __webpack_require__(/*! ../utils/string/Pad */ \"./node_modules/phaser/src/utils/string/Pad.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Animation Manager.\r\n *\r\n * Animations are managed by the global Animation Manager. This is a singleton class that is\r\n * responsible for creating and delivering animations and their corresponding data to all Game Objects.\r\n * Unlike plugins it is owned by the Game instance, not the Scene.\r\n *\r\n * Sprites and other Game Objects get the data they need from the AnimationManager.\r\n *\r\n * @class AnimationManager\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Animations\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance.\r\n */\r\nvar AnimationManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function AnimationManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Phaser.Game instance.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#game\r\n         * @type {Phaser.Game}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A reference to the Texture Manager.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#textureManager\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.textureManager = null;\r\n\r\n        /**\r\n         * The global time scale of the Animation Manager.\r\n         *\r\n         * This scales the time delta between two frames, thus influencing the speed of time for the Animation Manager.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#globalTimeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.globalTimeScale = 1;\r\n\r\n        /**\r\n         * The Animations registered in the Animation Manager.\r\n         *\r\n         * This map should be modified with the {@link #add} and {@link #create} methods of the Animation Manager.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#anims\r\n         * @type {Phaser.Structs.Map.<string, Phaser.Animations.Animation>}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.anims = new CustomMap();\r\n\r\n        /**\r\n         * Whether the Animation Manager is paused along with all of its Animations.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        /**\r\n         * The name of this Animation Manager.\r\n         *\r\n         * @name Phaser.Animations.AnimationManager#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = 'AnimationManager';\r\n\r\n        game.events.once(GameEvents.BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * Registers event listeners after the Game boots.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#boot\r\n     * @listens Phaser.Core.Events#DESTROY\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.textureManager = this.game.textures;\r\n\r\n        this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Animation to the Animation Manager.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#add\r\n     * @fires Phaser.Animations.Events#ADD_ANIMATION\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key under which the Animation should be added. The Animation will be updated with it. Must be unique.\r\n     * @param {Phaser.Animations.Animation} animation - The Animation which should be added to the Animation Manager.\r\n     *\r\n     * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n     */\r\n    add: function (key, animation)\r\n    {\r\n        if (this.anims.has(key))\r\n        {\r\n            console.warn('Animation key exists: ' + key);\r\n\r\n            return;\r\n        }\r\n\r\n        animation.key = key;\r\n\r\n        this.anims.set(key, animation);\r\n\r\n        this.emit(Events.ADD_ANIMATION, key, animation);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the given key is already in use within the Animation Manager or not.\r\n     * \r\n     * Animations are global. Keys created in one scene can be used from any other Scene in your game. They are not Scene specific.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#exists\r\n     * @since 3.16.0\r\n     *\r\n     * @param {string} key - The key of the Animation to check.\r\n     *\r\n     * @return {boolean} `true` if the Animation already exists in the Animation Manager, or `false` if the key is available.\r\n     */\r\n    exists: function (key)\r\n    {\r\n        return this.anims.has(key);\r\n    },\r\n\r\n    /**\r\n     * Creates a new Animation and adds it to the Animation Manager.\r\n     * \r\n     * Animations are global. Once created, you can use them in any Scene in your game. They are not Scene specific.\r\n     * \r\n     * If an invalid key is given this method will return `false`.\r\n     * \r\n     * If you pass the key of an animation that already exists in the Animation Manager, that animation will be returned.\r\n     * \r\n     * A brand new animation is only created if the key is valid and not already in use.\r\n     * \r\n     * If you wish to re-use an existing key, call `AnimationManager.remove` first, then this method.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#create\r\n     * @fires Phaser.Animations.Events#ADD_ANIMATION\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Animations.Animation} config - The configuration settings for the Animation.\r\n     *\r\n     * @return {(Phaser.Animations.Animation|false)} The Animation that was created, or `false` is the key is already in use.\r\n     */\r\n    create: function (config)\r\n    {\r\n        var key = config.key;\r\n\r\n        var anim = false;\r\n\r\n        if (key)\r\n        {\r\n            anim = this.get(key);\r\n\r\n            if (!anim)\r\n            {\r\n                anim = new Animation(this, key, config);\r\n\r\n                this.anims.set(key, anim);\r\n        \r\n                this.emit(Events.ADD_ANIMATION, key, anim);\r\n            }\r\n        }\r\n\r\n        return anim;\r\n    },\r\n\r\n    /**\r\n     * Loads this Animation Manager's Animations and settings from a JSON object.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#fromJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Animations.JSONAnimations|Phaser.Types.Animations.JSONAnimation)} data - The JSON object to parse.\r\n     * @param {boolean} [clearCurrentAnimations=false] - If set to `true`, the current animations will be removed (`anims.clear()`). If set to `false` (default), the animations in `data` will be added.\r\n     *\r\n     * @return {Phaser.Animations.Animation[]} An array containing all of the Animation objects that were created as a result of this call.\r\n     */\r\n    fromJSON: function (data, clearCurrentAnimations)\r\n    {\r\n        if (clearCurrentAnimations === undefined) { clearCurrentAnimations = false; }\r\n\r\n        if (clearCurrentAnimations)\r\n        {\r\n            this.anims.clear();\r\n        }\r\n\r\n        //  Do we have a String (i.e. from JSON, or an Object?)\r\n        if (typeof data === 'string')\r\n        {\r\n            data = JSON.parse(data);\r\n        }\r\n\r\n        var output = [];\r\n\r\n        //  Array of animations, or a single animation?\r\n        if (data.hasOwnProperty('anims') && Array.isArray(data.anims))\r\n        {\r\n            for (var i = 0; i < data.anims.length; i++)\r\n            {\r\n                output.push(this.create(data.anims[i]));\r\n            }\r\n\r\n            if (data.hasOwnProperty('globalTimeScale'))\r\n            {\r\n                this.globalTimeScale = data.globalTimeScale;\r\n            }\r\n        }\r\n        else if (data.hasOwnProperty('key') && data.type === 'frame')\r\n        {\r\n            output.push(this.create(data));\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#generateFrameNames\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key for the texture containing the animation frames.\r\n     * @param {Phaser.Types.Animations.GenerateFrameNames} [config] - The configuration object for the animation frame names.\r\n     *\r\n     * @return {Phaser.Types.Animations.AnimationFrame[]} The array of {@link Phaser.Types.Animations.AnimationFrame} objects.\r\n     */\r\n    generateFrameNames: function (key, config)\r\n    {\r\n        var prefix = GetValue(config, 'prefix', '');\r\n        var start = GetValue(config, 'start', 0);\r\n        var end = GetValue(config, 'end', 0);\r\n        var suffix = GetValue(config, 'suffix', '');\r\n        var zeroPad = GetValue(config, 'zeroPad', 0);\r\n        var out = GetValue(config, 'outputArray', []);\r\n        var frames = GetValue(config, 'frames', false);\r\n\r\n        var texture = this.textureManager.get(key);\r\n\r\n        if (!texture)\r\n        {\r\n            return out;\r\n        }\r\n\r\n        var diff = (start < end) ? 1 : -1;\r\n\r\n        //  Adjust because we use i !== end in the for loop\r\n        end += diff;\r\n\r\n        var i;\r\n        var frame;\r\n\r\n        if (!config)\r\n        {\r\n            //  Use every frame in the atlas?\r\n            frames = texture.getFrameNames();\r\n\r\n            for (i = 0; i < frames.length; i++)\r\n            {\r\n                out.push({ key: key, frame: frames[i] });\r\n            }\r\n        }\r\n        else if (Array.isArray(frames))\r\n        {\r\n            //  Have they provided their own custom frame sequence array?\r\n            for (i = 0; i < frames.length; i++)\r\n            {\r\n                frame = prefix + Pad(frames[i], zeroPad, '0', 1) + suffix;\r\n\r\n                if (texture.has(frame))\r\n                {\r\n                    out.push({ key: key, frame: frame });\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (i = start; i !== end; i += diff)\r\n            {\r\n                frame = prefix + Pad(i, zeroPad, '0', 1) + suffix;\r\n\r\n                if (texture.has(frame))\r\n                {\r\n                    out.push({ key: key, frame: frame });\r\n                }\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Generate an array of {@link Phaser.Types.Animations.AnimationFrame} objects from a texture key and configuration object.\r\n     *\r\n     * Generates objects with numbered frame names, as configured by the given {@link Phaser.Types.Animations.GenerateFrameNumbers}.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#generateFrameNumbers\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key for the texture containing the animation frames.\r\n     * @param {Phaser.Types.Animations.GenerateFrameNumbers} config - The configuration object for the animation frames.\r\n     *\r\n     * @return {Phaser.Types.Animations.AnimationFrame[]} The array of {@link Phaser.Types.Animations.AnimationFrame} objects.\r\n     */\r\n    generateFrameNumbers: function (key, config)\r\n    {\r\n        var startFrame = GetValue(config, 'start', 0);\r\n        var endFrame = GetValue(config, 'end', -1);\r\n        var firstFrame = GetValue(config, 'first', false);\r\n        var out = GetValue(config, 'outputArray', []);\r\n        var frames = GetValue(config, 'frames', false);\r\n\r\n        var texture = this.textureManager.get(key);\r\n\r\n        if (!texture)\r\n        {\r\n            return out;\r\n        }\r\n\r\n        if (firstFrame && texture.has(firstFrame))\r\n        {\r\n            out.push({ key: key, frame: firstFrame });\r\n        }\r\n\r\n        var i;\r\n\r\n        //  Have they provided their own custom frame sequence array?\r\n        if (Array.isArray(frames))\r\n        {\r\n            for (i = 0; i < frames.length; i++)\r\n            {\r\n                if (texture.has(frames[i]))\r\n                {\r\n                    out.push({ key: key, frame: frames[i] });\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  No endFrame then see if we can get it\r\n            if (endFrame === -1)\r\n            {\r\n                endFrame = texture.frameTotal;\r\n            }\r\n\r\n            var diff = (startFrame < endFrame) ? 1 : -1;\r\n\r\n            //  Adjust because we use i !== end in the for loop\r\n            endFrame += diff;\r\n\r\n            for (i = startFrame; i !== endFrame; i += diff)\r\n            {\r\n                if (texture.has(i))\r\n                {\r\n                    out.push({ key: key, frame: i });\r\n                }\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Get an Animation.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the Animation to retrieve.\r\n     *\r\n     * @return {Phaser.Animations.Animation} The Animation.\r\n     */\r\n    get: function (key)\r\n    {\r\n        return this.anims.get(key);\r\n    },\r\n\r\n    /**\r\n     * Load an Animation into a Game Object's Animation Component.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#load\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to load the animation into.\r\n     * @param {string} key - The key of the animation to load.\r\n     * @param {(string|integer)} [startFrame] - The name of a start frame to set on the loaded animation.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object with the animation loaded into it.\r\n     */\r\n    load: function (child, key, startFrame)\r\n    {\r\n        var anim = this.get(key);\r\n\r\n        if (anim)\r\n        {\r\n            anim.load(child, startFrame);\r\n        }\r\n        else\r\n        {\r\n            console.warn('Missing animation: ' + key);\r\n        }\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * Pause all animations.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#pauseAll\r\n     * @fires Phaser.Animations.Events#PAUSE_ALL\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n     */\r\n    pauseAll: function ()\r\n    {\r\n        if (!this.paused)\r\n        {\r\n            this.paused = true;\r\n\r\n            this.emit(Events.PAUSE_ALL);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Play an animation on the given Game Objects that have an Animation Component.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#play\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the animation to play on the Game Object.\r\n     * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Objects to play the animation on.\r\n     *\r\n     * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n     */\r\n    play: function (key, child)\r\n    {\r\n        if (!Array.isArray(child))\r\n        {\r\n            child = [ child ];\r\n        }\r\n\r\n        var anim = this.get(key);\r\n\r\n        if (!anim)\r\n        {\r\n            return;\r\n        }\r\n\r\n        for (var i = 0; i < child.length; i++)\r\n        {\r\n            child[i].anims.play(key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Remove an animation.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#remove\r\n     * @fires Phaser.Animations.Events#REMOVE_ANIMATION\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the animation to remove.\r\n     *\r\n     * @return {Phaser.Animations.Animation} [description]\r\n     */\r\n    remove: function (key)\r\n    {\r\n        var anim = this.get(key);\r\n\r\n        if (anim)\r\n        {\r\n            this.emit(Events.REMOVE_ANIMATION, key, anim);\r\n\r\n            this.anims.delete(key);\r\n        }\r\n\r\n        return anim;\r\n    },\r\n\r\n    /**\r\n     * Resume all paused animations.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#resumeAll\r\n     * @fires Phaser.Animations.Events#RESUME_ALL\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n     */\r\n    resumeAll: function ()\r\n    {\r\n        if (this.paused)\r\n        {\r\n            this.paused = false;\r\n\r\n            this.emit(Events.RESUME_ALL);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes an array of Game Objects that have an Animation Component and then\r\n     * starts the given animation playing on them, each one offset by the\r\n     * `stagger` amount given to this method.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#staggerPlay\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n     *\r\n     * @param {string} key - The key of the animation to play on the Game Objects.\r\n     * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} children - An array of Game Objects to play the animation on. They must have an Animation Component.\r\n     * @param {number} [stagger=0] - The amount of time, in milliseconds, to offset each play time by.\r\n     *\r\n     * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n     */\r\n    staggerPlay: function (key, children, stagger)\r\n    {\r\n        if (stagger === undefined) { stagger = 0; }\r\n\r\n        if (!Array.isArray(children))\r\n        {\r\n            children = [ children ];\r\n        }\r\n\r\n        var anim = this.get(key);\r\n\r\n        if (!anim)\r\n        {\r\n            return;\r\n        }\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            children[i].anims.delayedPlay(stagger * i, key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Get the animation data as javascript object by giving key, or get the data of all animations as array of objects, if key wasn't provided.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - [description]\r\n     *\r\n     * @return {Phaser.Types.Animations.JSONAnimations} [description]\r\n     */\r\n    toJSON: function (key)\r\n    {\r\n        if (key !== undefined && key !== '')\r\n        {\r\n            return this.anims.get(key).toJSON();\r\n        }\r\n        else\r\n        {\r\n            var output = {\r\n                anims: [],\r\n                globalTimeScale: this.globalTimeScale\r\n            };\r\n\r\n            this.anims.each(function (animationKey, animation)\r\n            {\r\n                output.anims.push(animation.toJSON());\r\n            });\r\n\r\n            return output;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroy this Animation Manager and clean up animation definitions and references to other objects.\r\n     * This method should not be called directly. It will be called automatically as a response to a `destroy` event from the Phaser.Game instance.\r\n     *\r\n     * @method Phaser.Animations.AnimationManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.anims.clear();\r\n\r\n        this.textureManager = null;\r\n\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = AnimationManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbk1hbmFnZXIuanM/NDVmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsb0ZBQTBCO0FBQ2pELFVBQVUsbUJBQU8sQ0FBQywwRUFBcUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsV0FBVyxNQUFNLGNBQWM7QUFDaEY7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0NBQWtDO0FBQ2pEO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzRkFBc0Y7QUFDckcsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0NBQWdDOztBQUVuRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMkNBQTJDO0FBQzFEO0FBQ0EsZ0JBQWdCLHlDQUF5QyxlQUFlLDZDQUE2QztBQUNySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLDBCQUEwQiw2QkFBNkI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHlCQUF5QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFdBQVc7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHlCQUF5QjtBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNkJBQTZCLDZDQUE2QztBQUMxRTtBQUNBLGdGQUFnRixtREFBbUQ7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0IseUNBQXlDLGVBQWUsNkNBQTZDO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiw4QkFBOEI7QUFDcEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsNkJBQTZCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGdCQUFnQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIscUJBQXFCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdDQUFnQztBQUNqRDtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDhEQUE4RDtBQUM3RSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvQW5pbWF0aW9uTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vQW5pbWF0aW9uJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDdXN0b21NYXAgPSByZXF1aXJlKCcuLi9zdHJ1Y3RzL01hcCcpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIFBhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL3N0cmluZy9QYWQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICpcclxuICogQW5pbWF0aW9ucyBhcmUgbWFuYWdlZCBieSB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLiBUaGlzIGlzIGEgc2luZ2xldG9uIGNsYXNzIHRoYXQgaXNcclxuICogcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBkZWxpdmVyaW5nIGFuaW1hdGlvbnMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGF0YSB0byBhbGwgR2FtZSBPYmplY3RzLlxyXG4gKiBVbmxpa2UgcGx1Z2lucyBpdCBpcyBvd25lZCBieSB0aGUgR2FtZSBpbnN0YW5jZSwgbm90IHRoZSBTY2VuZS5cclxuICpcclxuICogU3ByaXRlcyBhbmQgb3RoZXIgR2FtZSBPYmplY3RzIGdldCB0aGUgZGF0YSB0aGV5IG5lZWQgZnJvbSB0aGUgQW5pbWF0aW9uTWFuYWdlci5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvbk1hbmFnZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5BbmltYXRpb25zXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICovXHJcbnZhciBBbmltYXRpb25NYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBbmltYXRpb25NYW5hZ2VyIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGdhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3RleHR1cmVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlcn1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBnbG9iYWwgdGltZSBzY2FsZSBvZiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIHNjYWxlcyB0aGUgdGltZSBkZWx0YSBiZXR3ZWVuIHR3byBmcmFtZXMsIHRodXMgaW5mbHVlbmNpbmcgdGhlIHNwZWVkIG9mIHRpbWUgZm9yIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZ2xvYmFsVGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxUaW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQW5pbWF0aW9ucyByZWdpc3RlcmVkIGluIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgbWFwIHNob3VsZCBiZSBtb2RpZmllZCB3aXRoIHRoZSB7QGxpbmsgI2FkZH0gYW5kIHtAbGluayAjY3JlYXRlfSBtZXRob2RzIG9mIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjYW5pbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuTWFwLjxzdHJpbmcsIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbj59XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5pbXMgPSBuZXcgQ3VzdG9tTWFwKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEFuaW1hdGlvbiBNYW5hZ2VyIGlzIHBhdXNlZCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgQW5pbWF0aW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjcGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5hbWUgPSAnQW5pbWF0aW9uTWFuYWdlcic7XHJcblxyXG4gICAgICAgIGdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMgYWZ0ZXIgdGhlIEdhbWUgYm9vdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5Db3JlLkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gdGhpcy5nYW1lLnRleHR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgQW5pbWF0aW9uIHRvIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjYWRkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHVuZGVyIHdoaWNoIHRoZSBBbmltYXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgQW5pbWF0aW9uIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGl0LiBNdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBUaGUgQW5pbWF0aW9uIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoa2V5LCBhbmltYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5pbXMuaGFzKGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0FuaW1hdGlvbiBrZXkgZXhpc3RzOiAnICsga2V5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFuaW1hdGlvbi5rZXkgPSBrZXk7XHJcblxyXG4gICAgICAgIHRoaXMuYW5pbXMuc2V0KGtleSwgYW5pbWF0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BRERfQU5JTUFUSU9OLCBrZXksIGFuaW1hdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGtleSBpcyBhbHJlYWR5IGluIHVzZSB3aXRoaW4gdGhlIEFuaW1hdGlvbiBNYW5hZ2VyIG9yIG5vdC5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgZ2xvYmFsLiBLZXlzIGNyZWF0ZWQgaW4gb25lIHNjZW5lIGNhbiBiZSB1c2VkIGZyb20gYW55IG90aGVyIFNjZW5lIGluIHlvdXIgZ2FtZS4gVGhleSBhcmUgbm90IFNjZW5lIHNwZWNpZmljLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNleGlzdHNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgQW5pbWF0aW9uIGFscmVhZHkgZXhpc3RzIGluIHRoZSBBbmltYXRpb24gTWFuYWdlciwgb3IgYGZhbHNlYCBpZiB0aGUga2V5IGlzIGF2YWlsYWJsZS5cclxuICAgICAqL1xyXG4gICAgZXhpc3RzOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuaW1zLmhhcyhrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQW5pbWF0aW9uIGFuZCBhZGRzIGl0IHRvIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgZ2xvYmFsLiBPbmNlIGNyZWF0ZWQsIHlvdSBjYW4gdXNlIHRoZW0gaW4gYW55IFNjZW5lIGluIHlvdXIgZ2FtZS4gVGhleSBhcmUgbm90IFNjZW5lIHNwZWNpZmljLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBhbiBpbnZhbGlkIGtleSBpcyBnaXZlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBgZmFsc2VgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgcGFzcyB0aGUga2V5IG9mIGFuIGFuaW1hdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBBbmltYXRpb24gTWFuYWdlciwgdGhhdCBhbmltYXRpb24gd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIFxyXG4gICAgICogQSBicmFuZCBuZXcgYW5pbWF0aW9uIGlzIG9ubHkgY3JlYXRlZCBpZiB0aGUga2V5IGlzIHZhbGlkIGFuZCBub3QgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIHJlLXVzZSBhbiBleGlzdGluZyBrZXksIGNhbGwgYEFuaW1hdGlvbk1hbmFnZXIucmVtb3ZlYCBmaXJzdCwgdGhlbiB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjY3JlYXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIEFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufGZhbHNlKX0gVGhlIEFuaW1hdGlvbiB0aGF0IHdhcyBjcmVhdGVkLCBvciBgZmFsc2VgIGlzIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIga2V5ID0gY29uZmlnLmtleTtcclxuXHJcbiAgICAgICAgdmFyIGFuaW0gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhbmltID0gbmV3IEFuaW1hdGlvbih0aGlzLCBrZXksIGNvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltcy5zZXQoa2V5LCBhbmltKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQUREX0FOSU1BVElPTiwga2V5LCBhbmltKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFuaW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZHMgdGhpcyBBbmltYXRpb24gTWFuYWdlcidzIEFuaW1hdGlvbnMgYW5kIHNldHRpbmdzIGZyb20gYSBKU09OIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZnJvbUpTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5KU09OQW5pbWF0aW9uc3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5KU09OQW5pbWF0aW9uKX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCB0byBwYXJzZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NsZWFyQ3VycmVudEFuaW1hdGlvbnM9ZmFsc2VdIC0gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGN1cnJlbnQgYW5pbWF0aW9ucyB3aWxsIGJlIHJlbW92ZWQgKGBhbmltcy5jbGVhcigpYCkuIElmIHNldCB0byBgZmFsc2VgIChkZWZhdWx0KSwgdGhlIGFuaW1hdGlvbnMgaW4gYGRhdGFgIHdpbGwgYmUgYWRkZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBBbmltYXRpb24gb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGNhbGwuXHJcbiAgICAgKi9cclxuICAgIGZyb21KU09OOiBmdW5jdGlvbiAoZGF0YSwgY2xlYXJDdXJyZW50QW5pbWF0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xlYXJDdXJyZW50QW5pbWF0aW9ucyA9PT0gdW5kZWZpbmVkKSB7IGNsZWFyQ3VycmVudEFuaW1hdGlvbnMgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoY2xlYXJDdXJyZW50QW5pbWF0aW9ucylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbXMuY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEbyB3ZSBoYXZlIGEgU3RyaW5nIChpLmUuIGZyb20gSlNPTiwgb3IgYW4gT2JqZWN0PylcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIC8vICBBcnJheSBvZiBhbmltYXRpb25zLCBvciBhIHNpbmdsZSBhbmltYXRpb24/XHJcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2FuaW1zJykgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFuaW1zKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5hbmltcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godGhpcy5jcmVhdGUoZGF0YS5hbmltc1tpXSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnZ2xvYmFsVGltZVNjYWxlJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsVGltZVNjYWxlID0gZGF0YS5nbG9iYWxUaW1lU2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgna2V5JykgJiYgZGF0YS50eXBlID09PSAnZnJhbWUnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2godGhpcy5jcmVhdGUoZGF0YSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2dlbmVyYXRlRnJhbWVOYW1lc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgZm9yIHRoZSB0ZXh0dXJlIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBmcmFtZXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkdlbmVyYXRlRnJhbWVOYW1lc30gW2NvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhbmltYXRpb24gZnJhbWUgbmFtZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX0gVGhlIGFycmF5IG9mIHtAbGluayBQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGcmFtZU5hbWVzOiBmdW5jdGlvbiAoa2V5LCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByZWZpeCA9IEdldFZhbHVlKGNvbmZpZywgJ3ByZWZpeCcsICcnKTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBHZXRWYWx1ZShjb25maWcsICdzdGFydCcsIDApO1xyXG4gICAgICAgIHZhciBlbmQgPSBHZXRWYWx1ZShjb25maWcsICdlbmQnLCAwKTtcclxuICAgICAgICB2YXIgc3VmZml4ID0gR2V0VmFsdWUoY29uZmlnLCAnc3VmZml4JywgJycpO1xyXG4gICAgICAgIHZhciB6ZXJvUGFkID0gR2V0VmFsdWUoY29uZmlnLCAnemVyb1BhZCcsIDApO1xyXG4gICAgICAgIHZhciBvdXQgPSBHZXRWYWx1ZShjb25maWcsICdvdXRwdXRBcnJheScsIFtdKTtcclxuICAgICAgICB2YXIgZnJhbWVzID0gR2V0VmFsdWUoY29uZmlnLCAnZnJhbWVzJywgZmFsc2UpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZU1hbmFnZXIuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZiA9IChzdGFydCA8IGVuZCkgPyAxIDogLTE7XHJcblxyXG4gICAgICAgIC8vICBBZGp1c3QgYmVjYXVzZSB3ZSB1c2UgaSAhPT0gZW5kIGluIHRoZSBmb3IgbG9vcFxyXG4gICAgICAgIGVuZCArPSBkaWZmO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZnJhbWU7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFVzZSBldmVyeSBmcmFtZSBpbiB0aGUgYXRsYXM/XHJcbiAgICAgICAgICAgIGZyYW1lcyA9IHRleHR1cmUuZ2V0RnJhbWVOYW1lcygpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2goeyBrZXk6IGtleSwgZnJhbWU6IGZyYW1lc1tpXSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZyYW1lcykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSGF2ZSB0aGV5IHByb3ZpZGVkIHRoZWlyIG93biBjdXN0b20gZnJhbWUgc2VxdWVuY2UgYXJyYXk/XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyYW1lID0gcHJlZml4ICsgUGFkKGZyYW1lc1tpXSwgemVyb1BhZCwgJzAnLCAxKSArIHN1ZmZpeDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5oYXMoZnJhbWUpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKHsga2V5OiBrZXksIGZyYW1lOiBmcmFtZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSAhPT0gZW5kOyBpICs9IGRpZmYpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyYW1lID0gcHJlZml4ICsgUGFkKGksIHplcm9QYWQsICcwJywgMSkgKyBzdWZmaXg7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuaGFzKGZyYW1lKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogZnJhbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgYW4gYXJyYXkgb2Yge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBvYmplY3RzIGZyb20gYSB0ZXh0dXJlIGtleSBhbmQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogR2VuZXJhdGVzIG9iamVjdHMgd2l0aCBudW1iZXJlZCBmcmFtZSBuYW1lcywgYXMgY29uZmlndXJlZCBieSB0aGUgZ2l2ZW4ge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkdlbmVyYXRlRnJhbWVOdW1iZXJzfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZ2VuZXJhdGVGcmFtZU51bWJlcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB0aGUgdGV4dHVyZSBjb250YWluaW5nIHRoZSBhbmltYXRpb24gZnJhbWVzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5HZW5lcmF0ZUZyYW1lTnVtYmVyc30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYW5pbWF0aW9uIGZyYW1lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdfSBUaGUgYXJyYXkgb2Yge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZyYW1lTnVtYmVyczogZnVuY3Rpb24gKGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdGFydEZyYW1lID0gR2V0VmFsdWUoY29uZmlnLCAnc3RhcnQnLCAwKTtcclxuICAgICAgICB2YXIgZW5kRnJhbWUgPSBHZXRWYWx1ZShjb25maWcsICdlbmQnLCAtMSk7XHJcbiAgICAgICAgdmFyIGZpcnN0RnJhbWUgPSBHZXRWYWx1ZShjb25maWcsICdmaXJzdCcsIGZhbHNlKTtcclxuICAgICAgICB2YXIgb3V0ID0gR2V0VmFsdWUoY29uZmlnLCAnb3V0cHV0QXJyYXknLCBbXSk7XHJcbiAgICAgICAgdmFyIGZyYW1lcyA9IEdldFZhbHVlKGNvbmZpZywgJ2ZyYW1lcycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmVNYW5hZ2VyLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpcnN0RnJhbWUgJiYgdGV4dHVyZS5oYXMoZmlyc3RGcmFtZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogZmlyc3RGcmFtZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG5cclxuICAgICAgICAvLyAgSGF2ZSB0aGV5IHByb3ZpZGVkIHRoZWlyIG93biBjdXN0b20gZnJhbWUgc2VxdWVuY2UgYXJyYXk/XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZnJhbWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmhhcyhmcmFtZXNbaV0pKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKHsga2V5OiBrZXksIGZyYW1lOiBmcmFtZXNbaV0gfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5vIGVuZEZyYW1lIHRoZW4gc2VlIGlmIHdlIGNhbiBnZXQgaXRcclxuICAgICAgICAgICAgaWYgKGVuZEZyYW1lID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW5kRnJhbWUgPSB0ZXh0dXJlLmZyYW1lVG90YWw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gKHN0YXJ0RnJhbWUgPCBlbmRGcmFtZSkgPyAxIDogLTE7XHJcblxyXG4gICAgICAgICAgICAvLyAgQWRqdXN0IGJlY2F1c2Ugd2UgdXNlIGkgIT09IGVuZCBpbiB0aGUgZm9yIGxvb3BcclxuICAgICAgICAgICAgZW5kRnJhbWUgKz0gZGlmZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0RnJhbWU7IGkgIT09IGVuZEZyYW1lOyBpICs9IGRpZmYpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmhhcyhpKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogaSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYW4gQW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNnZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBBbmltYXRpb24gdG8gcmV0cmlldmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBUaGUgQW5pbWF0aW9uLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5pbXMuZ2V0KGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBhbiBBbmltYXRpb24gaW50byBhIEdhbWUgT2JqZWN0J3MgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjbG9hZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gbG9hZCB0aGUgYW5pbWF0aW9uIGludG8uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIGxvYWQuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtzdGFydEZyYW1lXSAtIFRoZSBuYW1lIG9mIGEgc3RhcnQgZnJhbWUgdG8gc2V0IG9uIHRoZSBsb2FkZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3Qgd2l0aCB0aGUgYW5pbWF0aW9uIGxvYWRlZCBpbnRvIGl0LlxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoY2hpbGQsIGtleSwgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5pbSA9IHRoaXMuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmIChhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYW5pbS5sb2FkKGNoaWxkLCBzdGFydEZyYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNzaW5nIGFuaW1hdGlvbjogJyArIGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgYWxsIGFuaW1hdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3BhdXNlQWxsXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1BBVVNFX0FMTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGF1c2VBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUEFVU0VfQUxMKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXkgYW4gYW5pbWF0aW9uIG9uIHRoZSBnaXZlbiBHYW1lIE9iamVjdHMgdGhhdCBoYXZlIGFuIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3BsYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSBvbiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0cyB0byBwbGF5IHRoZSBhbmltYXRpb24gb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGxheTogZnVuY3Rpb24gKGtleSwgY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkID0gWyBjaGlsZCBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIWFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRbaV0uYW5pbXMucGxheShrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjcmVtb3ZlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1JFTU9WRV9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoYW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVNT1ZFX0FOSU1BVElPTiwga2V5LCBhbmltKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYW5pbXMuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5pbTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWUgYWxsIHBhdXNlZCBhbmltYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNyZXN1bWVBbGxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjUkVTVU1FX0FMTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lQWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFU1VNRV9BTEwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBhbiBBbmltYXRpb24gQ29tcG9uZW50IGFuZCB0aGVuXHJcbiAgICAgKiBzdGFydHMgdGhlIGdpdmVuIGFuaW1hdGlvbiBwbGF5aW5nIG9uIHRoZW0sIGVhY2ggb25lIG9mZnNldCBieSB0aGVcclxuICAgICAqIGBzdGFnZ2VyYCBhbW91bnQgZ2l2ZW4gdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3N0YWdnZXJQbGF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSBvbiB0aGUgR2FtZSBPYmplY3RzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZHJlbiAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBwbGF5IHRoZSBhbmltYXRpb24gb24uIFRoZXkgbXVzdCBoYXZlIGFuIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YWdnZXI9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gb2Zmc2V0IGVhY2ggcGxheSB0aW1lIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXJ9IFRoaXMgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN0YWdnZXJQbGF5OiBmdW5jdGlvbiAoa2V5LCBjaGlsZHJlbiwgc3RhZ2dlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RhZ2dlciA9PT0gdW5kZWZpbmVkKSB7IHN0YWdnZXIgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IFsgY2hpbGRyZW4gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmFuaW1zLmRlbGF5ZWRQbGF5KHN0YWdnZXIgKiBpLCBrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBhbmltYXRpb24gZGF0YSBhcyBqYXZhc2NyaXB0IG9iamVjdCBieSBnaXZpbmcga2V5LCBvciBnZXQgdGhlIGRhdGEgb2YgYWxsIGFuaW1hdGlvbnMgYXMgYXJyYXkgb2Ygb2JqZWN0cywgaWYga2V5IHdhc24ndCBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkpTT05BbmltYXRpb25zfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQgJiYga2V5ICE9PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1zLmdldChrZXkpLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgYW5pbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGltZVNjYWxlOiB0aGlzLmdsb2JhbFRpbWVTY2FsZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hbmltcy5lYWNoKGZ1bmN0aW9uIChhbmltYXRpb25LZXksIGFuaW1hdGlvbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LmFuaW1zLnB1c2goYW5pbWF0aW9uLnRvSlNPTigpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoaXMgQW5pbWF0aW9uIE1hbmFnZXIgYW5kIGNsZWFuIHVwIGFuaW1hdGlvbiBkZWZpbml0aW9ucyBhbmQgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXMgYSByZXNwb25zZSB0byBhIGBkZXN0cm95YCBldmVudCBmcm9tIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmltcy5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmltYXRpb25NYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/AnimationManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Add Animation Event.\r\n * \r\n * This event is dispatched when a new animation is added to the global Animation Manager.\r\n * \r\n * This can happen either as a result of an animation instance being added to the Animation Manager,\r\n * or the Animation Manager creating a new animation directly.\r\n *\r\n * @event Phaser.Animations.Events#ADD_ANIMATION\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Animation that was added to the global Animation Manager.\r\n * @param {Phaser.Animations.Animation} animation - An instance of the newly created Animation.\r\n */\r\nmodule.exports = 'add';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BRERfQU5JTUFUSU9OX0VWRU5ULmpzPzAzOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL0FERF9BTklNQVRJT05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQWRkIEFuaW1hdGlvbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGEgbmV3IGFuaW1hdGlvbiBpcyBhZGRlZCB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gKiBcclxuICogVGhpcyBjYW4gaGFwcGVuIGVpdGhlciBhcyBhIHJlc3VsdCBvZiBhbiBhbmltYXRpb24gaW5zdGFuY2UgYmVpbmcgYWRkZWQgdG8gdGhlIEFuaW1hdGlvbiBNYW5hZ2VyLFxyXG4gKiBvciB0aGUgQW5pbWF0aW9uIE1hbmFnZXIgY3JlYXRpbmcgYSBuZXcgYW5pbWF0aW9uIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBbiBpbnN0YW5jZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBBbmltYXRpb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhZGQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Complete Event.\r\n * \r\n * This event is dispatched by an Animation instance when it completes, i.e. finishes playing or is manually stopped.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all complete the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQuanM/Mjg5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQW5pbWF0aW9uIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IGNvbXBsZXRlcywgaS5lLiBmaW5pc2hlcyBwbGF5aW5nIG9yIGlzIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAqIFxyXG4gKiBCZSBjYXJlZnVsIHdpdGggdGhlIHZvbHVtZSBvZiBldmVudHMgdGhpcyBjb3VsZCBnZW5lcmF0ZS4gSWYgYSBncm91cCBvZiBTcHJpdGVzIGFsbCBjb21wbGV0ZSB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBjb21wbGV0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBjb21wbGV0ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Repeat Event.\r\n * \r\n * This event is dispatched when a currently playing animation repeats.\r\n * \r\n * The event is dispatched directly from the Animation object itself. Which means that listeners\r\n * bound to this event will be invoked every time the Animation repeats, for every Game Object that may have it.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that repeated.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation was on when it repeated.\r\n */\r\nmodule.exports = 'repeat';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fUkVQRUFUX0VWRU5ULmpzP2ZjZmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvQU5JTUFUSU9OX1JFUEVBVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBbmltYXRpb24gUmVwZWF0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gcmVwZWF0cy5cclxuICogXHJcbiAqIFRoZSBldmVudCBpcyBkaXNwYXRjaGVkIGRpcmVjdGx5IGZyb20gdGhlIEFuaW1hdGlvbiBvYmplY3QgaXRzZWxmLiBXaGljaCBtZWFucyB0aGF0IGxpc3RlbmVyc1xyXG4gKiBib3VuZCB0byB0aGlzIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBldmVyeSB0aW1lIHRoZSBBbmltYXRpb24gcmVwZWF0cywgZm9yIGV2ZXJ5IEdhbWUgT2JqZWN0IHRoYXQgbWF5IGhhdmUgaXQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjQU5JTUFUSU9OX1JFUEVBVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHJlcGVhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gd2FzIG9uIHdoZW4gaXQgcmVwZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZXBlYXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Restart Event.\r\n * \r\n * This event is dispatched by an Animation instance when it restarts.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all restart the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that restarted playing.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'restart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fUkVTVEFSVF9FVkVOVC5qcz9mMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL0FOSU1BVElPTl9SRVNUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFuaW1hdGlvbiBSZXN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IHJlc3RhcnRzLlxyXG4gKiBcclxuICogQmUgY2FyZWZ1bCB3aXRoIHRoZSB2b2x1bWUgb2YgZXZlbnRzIHRoaXMgY291bGQgZ2VuZXJhdGUuIElmIGEgZ3JvdXAgb2YgU3ByaXRlcyBhbGwgcmVzdGFydCB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fUkVTVEFSVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHJlc3RhcnRlZCBwbGF5aW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gcmVzdGFydGVkIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHJlc3RhcnRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Start Event.\r\n * \r\n * This event is dispatched by an Animation instance when it starts playing.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all play the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that started playing.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fU1RBUlRfRVZFTlQuanM/OTEyZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQW5pbWF0aW9uIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IHN0YXJ0cyBwbGF5aW5nLlxyXG4gKiBcclxuICogQmUgY2FyZWZ1bCB3aXRoIHRoZSB2b2x1bWUgb2YgZXZlbnRzIHRoaXMgY291bGQgZ2VuZXJhdGUuIElmIGEgZ3JvdXAgb2YgU3ByaXRlcyBhbGwgcGxheSB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBzdGFydGVkIHBsYXlpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBzdGFydGVkIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHN0YXJ0ZWQgcGxheWluZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pause All Animations Event.\r\n * \r\n * This event is dispatched when the global Animation Manager is told to pause.\r\n * \r\n * When this happens all current animations will stop updating, although it doesn't necessarily mean\r\n * that the game has paused as well.\r\n *\r\n * @event Phaser.Animations.Events#PAUSE_ALL\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pauseall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9QQVVTRV9BTExfRVZFTlQuanM/MTNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvUEFVU0VfQUxMX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBhdXNlIEFsbCBBbmltYXRpb25zIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlciBpcyB0b2xkIHRvIHBhdXNlLlxyXG4gKiBcclxuICogV2hlbiB0aGlzIGhhcHBlbnMgYWxsIGN1cnJlbnQgYW5pbWF0aW9ucyB3aWxsIHN0b3AgdXBkYXRpbmcsIGFsdGhvdWdoIGl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhblxyXG4gKiB0aGF0IHRoZSBnYW1lIGhhcyBwYXVzZWQgYXMgd2VsbC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNQQVVTRV9BTExcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwYXVzZWFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Remove Animation Event.\r\n * \r\n * This event is dispatched when an animation is removed from the global Animation Manager.\r\n *\r\n * @event Phaser.Animations.Events#REMOVE_ANIMATION\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Animation that was removed from the global Animation Manager.\r\n * @param {Phaser.Animations.Animation} animation - An instance of the removed Animation.\r\n */\r\nmodule.exports = 'remove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRU1PVkVfQU5JTUFUSU9OX0VWRU5ULmpzP2MxNGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1JFTU9WRV9BTklNQVRJT05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUmVtb3ZlIEFuaW1hdGlvbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGFuIGFuaW1hdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlci5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNSRU1PVkVfQU5JTUFUSU9OXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIEFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlci5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEFuIGluc3RhbmNlIG9mIHRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3JlbW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Resume All Animations Event.\r\n * \r\n * This event is dispatched when the global Animation Manager resumes, having been previously paused.\r\n * \r\n * When this happens all current animations will continue updating again.\r\n *\r\n * @event Phaser.Animations.Events#RESUME_ALL\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resumeall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRVNVTUVfQUxMX0VWRU5ULmpzPzNhNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRVNVTUVfQUxMX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFJlc3VtZSBBbGwgQW5pbWF0aW9ucyBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIgcmVzdW1lcywgaGF2aW5nIGJlZW4gcHJldmlvdXNseSBwYXVzZWQuXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaGFwcGVucyBhbGwgY3VycmVudCBhbmltYXRpb25zIHdpbGwgY29udGludWUgdXBkYXRpbmcgYWdhaW4uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjUkVTVU1FX0FMTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZWFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js ***!
  \**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Complete Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation finishes playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationcomplete', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_COMPLETE` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'animationcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFX0VWRU5ULmpzPzc2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25jb21wbGV0ZScsIGxpc3RlbmVyKWBcclxuICogXHJcbiAqIFRoaXMgc2FtZSBldmVudCBpcyBkaXNwYXRjaGVkIGZvciBhbGwgYW5pbWF0aW9ucy4gVG8gbGlzdGVuIGZvciBhIHNwZWNpZmljIGFuaW1hdGlvbiwgdXNlIHRoZSBgU1BSSVRFX0FOSU1BVElPTl9LRVlfQ09NUExFVEVgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBjb21wbGV0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBjb21wbGV0ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbmNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Complete Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation finishes playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationcomplete-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationcomplete-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'animationcomplete-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURV9FVkVOVC5qcz82MjAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25jb21wbGV0ZS1rZXknLCBsaXN0ZW5lcilgIHdoZXJlIGBrZXlgIGlzIHRoZSBrZXkgb2ZcclxuICogdGhlIGFuaW1hdGlvbi4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGtleSAnZXhwbG9kZScgeW91IHNob3VsZCBsaXN0ZW4gZm9yIGBhbmltYXRpb25jb21wbGV0ZS1leHBsb2RlYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IGNvbXBsZXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIGNvbXBsZXRlZCBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gY29tcGxldGVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9uY29tcGxldGUtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js ***!
  \****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Repeat Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation repeats playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrepeat-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationrepeat-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that is repeating on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {integer} repeatCount - The number of times the Animation has repeated so far.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation repeated playing.\r\n */\r\nmodule.exports = 'animationrepeat-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVRfRVZFTlQuanM/MzhjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVQRUFUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IFJlcGVhdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNwcml0ZSB3aGVuIGEgc3BlY2lmaWMgYW5pbWF0aW9uIHJlcGVhdHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXBlYXQta2V5JywgbGlzdGVuZXIpYCB3aGVyZSBga2V5YCBpcyB0aGUga2V5IG9mXHJcbiAqIHRoZSBhbmltYXRpb24uIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGFuIGFuaW1hdGlvbiB3aXRoIHRoZSBrZXkgJ2V4cGxvZGUnIHlvdSBzaG91bGQgbGlzdGVuIGZvciBgYW5pbWF0aW9ucmVwZWF0LWV4cGxvZGVgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fS0VZX1JFUEVBVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IGlzIHJlcGVhdGluZyBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlcGVhdENvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgQW5pbWF0aW9uIGhhcyByZXBlYXRlZCBzbyBmYXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHJlcGVhdGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25yZXBlYXQtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js ***!
  \*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Restart Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation restarts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrestart-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationrestart-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was restarted on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'animationrestart-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUX0VWRU5ULmpzPzk2MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVTVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIEtleSBSZXN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gcmVzdGFydHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXN0YXJ0LWtleScsIGxpc3RlbmVyKWAgd2hlcmUgYGtleWAgaXMgdGhlIGtleSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhbiBhbmltYXRpb24gd2l0aCB0aGUga2V5ICdleHBsb2RlJyB5b3Ugc2hvdWxkIGxpc3RlbiBmb3IgYGFuaW1hdGlvbnJlc3RhcnQtZXhwbG9kZWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVTVEFSVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHdhcyByZXN0YXJ0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHJlc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiByZXN0YXJ0ZWQgcGxheWluZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbnJlc3RhcnQtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Start Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation starts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationstart-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationstart-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was started on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'animationstart-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9TVEFSVF9FVkVOVC5qcz81MDk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gc3RhcnRzIHBsYXlpbmcgb24gaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9uc3RhcnQta2V5JywgbGlzdGVuZXIpYCB3aGVyZSBga2V5YCBpcyB0aGUga2V5IG9mXHJcbiAqIHRoZSBhbmltYXRpb24uIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGFuIGFuaW1hdGlvbiB3aXRoIHRoZSBrZXkgJ2V4cGxvZGUnIHlvdSBzaG91bGQgbGlzdGVuIGZvciBgYW5pbWF0aW9uc3RhcnQtZXhwbG9kZWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCB3YXMgc3RhcnRlZCBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiBzdGFydGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25zdGFydC0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js ***!
  \****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Update Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation playing on it updates. This happens when the animation changes frame,\r\n * based on the animation frame rate and other factors like `timeScale` and `delay`.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationupdate-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationupdate-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_UPDATE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that has updated on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame of the Animation.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation updated.\r\n */\r\nmodule.exports = 'animationupdate-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVfRVZFTlQuanM/YzBmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIEtleSBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhIHNwZWNpZmljIGFuaW1hdGlvbiBwbGF5aW5nIG9uIGl0IHVwZGF0ZXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gY2hhbmdlcyBmcmFtZSxcclxuICogYmFzZWQgb24gdGhlIGFuaW1hdGlvbiBmcmFtZSByYXRlIGFuZCBvdGhlciBmYWN0b3JzIGxpa2UgYHRpbWVTY2FsZWAgYW5kIGBkZWxheWAuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9udXBkYXRlLWtleScsIGxpc3RlbmVyKWAgd2hlcmUgYGtleWAgaXMgdGhlIGtleSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhbiBhbmltYXRpb24gd2l0aCB0aGUga2V5ICdleHBsb2RlJyB5b3Ugc2hvdWxkIGxpc3RlbiBmb3IgYGFuaW1hdGlvbnVwZGF0ZS1leHBsb2RlYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBoYXMgdXBkYXRlZCBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSBvZiB0aGUgQW5pbWF0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiB1cGRhdGVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9udXBkYXRlLSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Repeat Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation repeats playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrepeat', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_REPEAT` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that is repeating on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {integer} repeatCount - The number of times the Animation has repeated so far.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation repeated playing.\r\n */\r\nmodule.exports = 'animationrepeat';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVF9FVkVOVC5qcz80ZGM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fUkVQRUFUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gUmVwZWF0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYW4gYW5pbWF0aW9uIHJlcGVhdHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXBlYXQnLCBsaXN0ZW5lcilgXHJcbiAqIFxyXG4gKiBUaGlzIHNhbWUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBmb3IgYWxsIGFuaW1hdGlvbnMuIFRvIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBhbmltYXRpb24sIHVzZSB0aGUgYFNQUklURV9BTklNQVRJT05fS0VZX1JFUEVBVGAgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9SRVBFQVRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBpcyByZXBlYXRpbmcgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSByZXBlYXRDb3VudCAtIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIEFuaW1hdGlvbiBoYXMgcmVwZWF0ZWQgc28gZmFyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiByZXBlYXRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9ucmVwZWF0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js ***!
  \*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Restart Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation restarts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrestart', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_RESTART` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was restarted on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'animationrestart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1JFU1RBUlRfRVZFTlQuanM/ZTIyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fUkVTVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIFJlc3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gcmVzdGFydHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXN0YXJ0JywgbGlzdGVuZXIpYFxyXG4gKiBcclxuICogVGhpcyBzYW1lIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBhbmltYXRpb25zLiBUbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMgYW5pbWF0aW9uLCB1c2UgdGhlIGBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUYCBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1JFU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCB3YXMgcmVzdGFydGVkIG9uIHRoZSBTcHJpdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiByZXN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gcmVzdGFydGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25yZXN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Start Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation starts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationstart', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_START` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was started on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'animationstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5ULmpzPzMyZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gc3RhcnRzIHBsYXlpbmcgb24gaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9uc3RhcnQnLCBsaXN0ZW5lcilgXHJcbiAqIFxyXG4gKiBUaGlzIHNhbWUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBmb3IgYWxsIGFuaW1hdGlvbnMuIFRvIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBhbmltYXRpb24sIHVzZSB0aGUgYFNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUYCBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQW5pbWF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gc3RhcnRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9uc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Update Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation playing on it updates. This happens when the animation changes frame,\r\n * based on the animation frame rate and other factors like `timeScale` and `delay`.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationupdate', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_UPDATE` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_UPDATE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that has updated on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame of the Animation.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation updated.\r\n */\r\nmodule.exports = 'animationupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVC5qcz83NjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIFVwZGF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNwcml0ZSB3aGVuIGFuIGFuaW1hdGlvbiBwbGF5aW5nIG9uIGl0IHVwZGF0ZXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gY2hhbmdlcyBmcmFtZSxcclxuICogYmFzZWQgb24gdGhlIGFuaW1hdGlvbiBmcmFtZSByYXRlIGFuZCBvdGhlciBmYWN0b3JzIGxpa2UgYHRpbWVTY2FsZWAgYW5kIGBkZWxheWAuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9udXBkYXRlJywgbGlzdGVuZXIpYFxyXG4gKiBcclxuICogVGhpcyBzYW1lIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBhbmltYXRpb25zLiBUbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMgYW5pbWF0aW9uLCB1c2UgdGhlIGBTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQW5pbWF0aW9uIHRoYXQgaGFzIHVwZGF0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgb2YgdGhlIEFuaW1hdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gdXBkYXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbnVwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/events/index.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/animations/events/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Animations.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ADD_ANIMATION: __webpack_require__(/*! ./ADD_ANIMATION_EVENT */ \"./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js\"),\r\n    ANIMATION_COMPLETE: __webpack_require__(/*! ./ANIMATION_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js\"),\r\n    ANIMATION_REPEAT: __webpack_require__(/*! ./ANIMATION_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js\"),\r\n    ANIMATION_RESTART: __webpack_require__(/*! ./ANIMATION_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js\"),\r\n    ANIMATION_START: __webpack_require__(/*! ./ANIMATION_START_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js\"),\r\n    PAUSE_ALL: __webpack_require__(/*! ./PAUSE_ALL_EVENT */ \"./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js\"),\r\n    REMOVE_ANIMATION: __webpack_require__(/*! ./REMOVE_ANIMATION_EVENT */ \"./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js\"),\r\n    RESUME_ALL: __webpack_require__(/*! ./RESUME_ALL_EVENT */ \"./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js\"),\r\n    SPRITE_ANIMATION_COMPLETE: __webpack_require__(/*! ./SPRITE_ANIMATION_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js\"),\r\n    SPRITE_ANIMATION_KEY_COMPLETE: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js\"),\r\n    SPRITE_ANIMATION_KEY_REPEAT: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js\"),\r\n    SPRITE_ANIMATION_KEY_RESTART: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js\"),\r\n    SPRITE_ANIMATION_KEY_START: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_START_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js\"),\r\n    SPRITE_ANIMATION_KEY_UPDATE: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_UPDATE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js\"),\r\n    SPRITE_ANIMATION_REPEAT: __webpack_require__(/*! ./SPRITE_ANIMATION_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js\"),\r\n    SPRITE_ANIMATION_RESTART: __webpack_require__(/*! ./SPRITE_ANIMATION_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js\"),\r\n    SPRITE_ANIMATION_START: __webpack_require__(/*! ./SPRITE_ANIMATION_START_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js\"),\r\n    SPRITE_ANIMATION_UPDATE: __webpack_require__(/*! ./SPRITE_ANIMATION_UPDATE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9pbmRleC5qcz83OWZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLDJHQUE0QjtBQUM1RCxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMseUdBQTJCO0FBQzFELHFCQUFxQixtQkFBTyxDQUFDLHFHQUF5QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMseUZBQW1CO0FBQzFDLHNCQUFzQixtQkFBTyxDQUFDLHVHQUEwQjtBQUN4RCxnQkFBZ0IsbUJBQU8sQ0FBQywyRkFBb0I7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMseUhBQW1DO0FBQzFFLG1DQUFtQyxtQkFBTyxDQUFDLGlJQUF1QztBQUNsRixpQ0FBaUMsbUJBQU8sQ0FBQyw2SEFBcUM7QUFDOUUsa0NBQWtDLG1CQUFPLENBQUMsK0hBQXNDO0FBQ2hGLGdDQUFnQyxtQkFBTyxDQUFDLDJIQUFvQztBQUM1RSxpQ0FBaUMsbUJBQU8sQ0FBQyw2SEFBcUM7QUFDOUUsNkJBQTZCLG1CQUFPLENBQUMscUhBQWlDO0FBQ3RFLDhCQUE4QixtQkFBTyxDQUFDLHVIQUFrQztBQUN4RSw0QkFBNEIsbUJBQU8sQ0FBQyxtSEFBZ0M7QUFDcEUsNkJBQTZCLG1CQUFPLENBQUMscUhBQWlDOztBQUV0RSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBRERfQU5JTUFUSU9OOiByZXF1aXJlKCcuL0FERF9BTklNQVRJT05fRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9DT01QTEVURTogcmVxdWlyZSgnLi9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9SRVBFQVQ6IHJlcXVpcmUoJy4vQU5JTUFUSU9OX1JFUEVBVF9FVkVOVCcpLFxyXG4gICAgQU5JTUFUSU9OX1JFU1RBUlQ6IHJlcXVpcmUoJy4vQU5JTUFUSU9OX1JFU1RBUlRfRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9TVEFSVDogcmVxdWlyZSgnLi9BTklNQVRJT05fU1RBUlRfRVZFTlQnKSxcclxuICAgIFBBVVNFX0FMTDogcmVxdWlyZSgnLi9QQVVTRV9BTExfRVZFTlQnKSxcclxuICAgIFJFTU9WRV9BTklNQVRJT046IHJlcXVpcmUoJy4vUkVNT1ZFX0FOSU1BVElPTl9FVkVOVCcpLFxyXG4gICAgUkVTVU1FX0FMTDogcmVxdWlyZSgnLi9SRVNVTUVfQUxMX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFNQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVQ6IHJlcXVpcmUoJy4vU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVQRUFUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX1JFU1RBUlRfRVZFTlQnKSxcclxuICAgIFNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX1NUQVJUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEU6IHJlcXVpcmUoJy4vU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX1JFUEVBVDogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVF9FVkVOVCcpLFxyXG4gICAgU1BSSVRFX0FOSU1BVElPTl9SRVNUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fUkVTVEFSVF9FVkVOVCcpLFxyXG4gICAgU1BSSVRFX0FOSU1BVElPTl9TVEFSVDogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX1VQREFURTogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/animations/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/animations/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Animations\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Animation: __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/animations/Animation.js\"),\r\n    AnimationFrame: __webpack_require__(/*! ./AnimationFrame */ \"./node_modules/phaser/src/animations/AnimationFrame.js\"),\r\n    AnimationManager: __webpack_require__(/*! ./AnimationManager */ \"./node_modules/phaser/src/animations/AnimationManager.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2luZGV4LmpzPzYyOWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQWE7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsZ0ZBQWtCO0FBQzlDLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkFuaW1hdGlvbnNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBbmltYXRpb246IHJlcXVpcmUoJy4vQW5pbWF0aW9uJyksXHJcbiAgICBBbmltYXRpb25GcmFtZTogcmVxdWlyZSgnLi9BbmltYXRpb25GcmFtZScpLFxyXG4gICAgQW5pbWF0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9BbmltYXRpb25NYW5hZ2VyJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/BaseCache.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/cache/BaseCache.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CustomMap = __webpack_require__(/*! ../structs/Map */ \"./node_modules/phaser/src/structs/Map.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cache/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The BaseCache is a base Cache class that can be used for storing references to any kind of data.\r\n *\r\n * Data can be added, retrieved and removed based on the given keys.\r\n *\r\n * Keys are string-based.\r\n *\r\n * @class BaseCache\r\n * @memberof Phaser.Cache\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar BaseCache = new Class({\r\n\r\n    initialize:\r\n\r\n    function BaseCache ()\r\n    {\r\n        /**\r\n         * The Map in which the cache objects are stored.\r\n         *\r\n         * You can query the Map directly or use the BaseCache methods.\r\n         *\r\n         * @name Phaser.Cache.BaseCache#entries\r\n         * @type {Phaser.Structs.Map.<String, *>}\r\n         * @since 3.0.0\r\n         */\r\n        this.entries = new CustomMap();\r\n\r\n        /**\r\n         * An instance of EventEmitter used by the cache to emit related events.\r\n         *\r\n         * @name Phaser.Cache.BaseCache#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = new EventEmitter();\r\n    },\r\n\r\n    /**\r\n     * Adds an item to this cache. The item is referenced by a unique string, which you are responsible\r\n     * for setting and keeping track of. The item can only be retrieved by using this string.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#add\r\n     * @fires Phaser.Cache.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique key by which the data added to the cache will be referenced.\r\n     * @param {*} data - The data to be stored in the cache.\r\n     *\r\n     * @return {Phaser.Cache.BaseCache} This BaseCache object.\r\n     */\r\n    add: function (key, data)\r\n    {\r\n        this.entries.set(key, data);\r\n\r\n        this.events.emit(Events.ADD, this, key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if this cache contains an item matching the given key.\r\n     * This performs the same action as `BaseCache.exists`.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#has\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique key of the item to be checked in this cache.\r\n     *\r\n     * @return {boolean} Returns `true` if the cache contains an item matching the given key, otherwise `false`.\r\n     */\r\n    has: function (key)\r\n    {\r\n        return this.entries.has(key);\r\n    },\r\n\r\n    /**\r\n     * Checks if this cache contains an item matching the given key.\r\n     * This performs the same action as `BaseCache.has` and is called directly by the Loader.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#exists\r\n     * @since 3.7.0\r\n     *\r\n     * @param {string} key - The unique key of the item to be checked in this cache.\r\n     *\r\n     * @return {boolean} Returns `true` if the cache contains an item matching the given key, otherwise `false`.\r\n     */\r\n    exists: function (key)\r\n    {\r\n        return this.entries.has(key);\r\n    },\r\n\r\n    /**\r\n     * Gets an item from this cache based on the given key.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique key of the item to be retrieved from this cache.\r\n     *\r\n     * @return {*} The item in the cache, or `null` if no item matching the given key was found.\r\n     */\r\n    get: function (key)\r\n    {\r\n        return this.entries.get(key);\r\n    },\r\n\r\n    /**\r\n     * Removes and item from this cache based on the given key.\r\n     *\r\n     * If an entry matching the key is found it is removed from the cache and a `remove` event emitted.\r\n     * No additional checks are done on the item removed. If other systems or parts of your game code\r\n     * are relying on this item, it is up to you to sever those relationships prior to removing the item.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#remove\r\n     * @fires Phaser.Cache.Events#REMOVE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique key of the item to remove from the cache.\r\n     *\r\n     * @return {Phaser.Cache.BaseCache} This BaseCache object.\r\n     */\r\n    remove: function (key)\r\n    {\r\n        var entry = this.get(key);\r\n\r\n        if (entry)\r\n        {\r\n            this.entries.delete(key);\r\n\r\n            this.events.emit(Events.REMOVE, this, key, entry.data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns all keys in use in this cache.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#getKeys\r\n     * @since 3.17.0\r\n     *\r\n     * @return {string[]} Array containing all the keys.\r\n     */\r\n    getKeys: function ()\r\n    {\r\n        return this.entries.keys();\r\n    },\r\n\r\n    /**\r\n     * Destroys this cache and all items within it.\r\n     *\r\n     * @method Phaser.Cache.BaseCache#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.entries.clear();\r\n        this.events.removeAllListeners();\r\n\r\n        this.entries = null;\r\n        this.events = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BaseCache;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9CYXNlQ2FjaGUuanM/ZTZlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL0Jhc2VDYWNoZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1c3RvbU1hcCA9IHJlcXVpcmUoJy4uL3N0cnVjdHMvTWFwJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEJhc2VDYWNoZSBpcyBhIGJhc2UgQ2FjaGUgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc3RvcmluZyByZWZlcmVuY2VzIHRvIGFueSBraW5kIG9mIGRhdGEuXHJcbiAqXHJcbiAqIERhdGEgY2FuIGJlIGFkZGVkLCByZXRyaWV2ZWQgYW5kIHJlbW92ZWQgYmFzZWQgb24gdGhlIGdpdmVuIGtleXMuXHJcbiAqXHJcbiAqIEtleXMgYXJlIHN0cmluZy1iYXNlZC5cclxuICpcclxuICogQGNsYXNzIEJhc2VDYWNoZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhY2hlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBCYXNlQ2FjaGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZUNhY2hlICgpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hcCBpbiB3aGljaCB0aGUgY2FjaGUgb2JqZWN0cyBhcmUgc3RvcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBxdWVyeSB0aGUgTWFwIGRpcmVjdGx5IG9yIHVzZSB0aGUgQmFzZUNhY2hlIG1ldGhvZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2VudHJpZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuTWFwLjxTdHJpbmcsICo+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBDdXN0b21NYXAoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgRXZlbnRFbWl0dGVyIHVzZWQgYnkgdGhlIGNhY2hlIHRvIGVtaXQgcmVsYXRlZCBldmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhpcyBjYWNoZS4gVGhlIGl0ZW0gaXMgcmVmZXJlbmNlZCBieSBhIHVuaXF1ZSBzdHJpbmcsIHdoaWNoIHlvdSBhcmUgcmVzcG9uc2libGVcclxuICAgICAqIGZvciBzZXR0aW5nIGFuZCBrZWVwaW5nIHRyYWNrIG9mLiBUaGUgaXRlbSBjYW4gb25seSBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGhpcyBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2FkZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYWNoZS5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgYnkgd2hpY2ggdGhlIGRhdGEgYWRkZWQgdG8gdGhlIGNhY2hlIHdpbGwgYmUgcmVmZXJlbmNlZC5cclxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSAtIFRoZSBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX0gVGhpcyBCYXNlQ2FjaGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5BREQsIHRoaXMsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGlzIGNhY2hlIGNvbnRhaW5zIGFuIGl0ZW0gbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS5cclxuICAgICAqIFRoaXMgcGVyZm9ybXMgdGhlIHNhbWUgYWN0aW9uIGFzIGBCYXNlQ2FjaGUuZXhpc3RzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjaGFzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGl0ZW0gdG8gYmUgY2hlY2tlZCBpbiB0aGlzIGNhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBjYWNoZSBjb250YWlucyBhbiBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBoYXM6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBjYWNoZSBjb250YWlucyBhbiBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkuXHJcbiAgICAgKiBUaGlzIHBlcmZvcm1zIHRoZSBzYW1lIGFjdGlvbiBhcyBgQmFzZUNhY2hlLmhhc2AgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgTG9hZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhY2hlLkJhc2VDYWNoZSNleGlzdHNcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgaXRlbSB0byBiZSBjaGVja2VkIGluIHRoaXMgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhY2hlIGNvbnRhaW5zIGFuIGl0ZW0gbWF0Y2hpbmcgdGhlIGdpdmVuIGtleSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0czogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYW4gaXRlbSBmcm9tIHRoaXMgY2FjaGUgYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGl0ZW0gdG8gYmUgcmV0cmlldmVkIGZyb20gdGhpcyBjYWNoZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgaXRlbSBpbiB0aGUgY2FjaGUsIG9yIGBudWxsYCBpZiBubyBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuZCBpdGVtIGZyb20gdGhpcyBjYWNoZSBiYXNlZCBvbiB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIGFuIGVudHJ5IG1hdGNoaW5nIHRoZSBrZXkgaXMgZm91bmQgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBhbmQgYSBgcmVtb3ZlYCBldmVudCBlbWl0dGVkLlxyXG4gICAgICogTm8gYWRkaXRpb25hbCBjaGVja3MgYXJlIGRvbmUgb24gdGhlIGl0ZW0gcmVtb3ZlZC4gSWYgb3RoZXIgc3lzdGVtcyBvciBwYXJ0cyBvZiB5b3VyIGdhbWUgY29kZVxyXG4gICAgICogYXJlIHJlbHlpbmcgb24gdGhpcyBpdGVtLCBpdCBpcyB1cCB0byB5b3UgdG8gc2V2ZXIgdGhvc2UgcmVsYXRpb25zaGlwcyBwcmlvciB0byByZW1vdmluZyB0aGUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjcmVtb3ZlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhY2hlLkV2ZW50cyNSRU1PVkVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX0gVGhpcyBCYXNlQ2FjaGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUkVNT1ZFLCB0aGlzLCBrZXksIGVudHJ5LmRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwga2V5cyBpbiB1c2UgaW4gdGhpcyBjYWNoZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjZ2V0S2V5c1xyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBjb250YWluaW5nIGFsbCB0aGUga2V5cy5cclxuICAgICAqL1xyXG4gICAgZ2V0S2V5czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmtleXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGNhY2hlIGFuZCBhbGwgaXRlbXMgd2l0aGluIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhY2hlLkJhc2VDYWNoZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVudHJpZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZUNhY2hlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/BaseCache.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/CacheManager.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/cache/CacheManager.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCache = __webpack_require__(/*! ./BaseCache */ \"./node_modules/phaser/src/cache/BaseCache.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Cache Manager is the global cache owned and maintained by the Game instance.\r\n *\r\n * Various systems, such as the file Loader, rely on this cache in order to store the files\r\n * it has loaded. The manager itself doesn't store any files, but instead owns multiple BaseCache\r\n * instances, one per type of file. You can also add your own custom caches.\r\n *\r\n * @class CacheManager\r\n * @memberof Phaser.Cache\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance that owns this CacheManager.\r\n */\r\nvar CacheManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function CacheManager (game)\r\n    {\r\n        /**\r\n         * A reference to the Phaser.Game instance that owns this CacheManager.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#game\r\n         * @type {Phaser.Game}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A Cache storing all binary files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#binary\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.binary = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all bitmap font data files, typically added via the Loader.\r\n         * Only the font data is stored in this cache, the textures are part of the Texture Manager.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#bitmapFont\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.bitmapFont = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all JSON data files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#json\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.json = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all physics data files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#physics\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.physics = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all shader source files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#shader\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.shader = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all non-streaming audio files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#audio\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.audio = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all non-streaming video files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#video\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.20.0\r\n         */\r\n        this.video = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all text files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#text\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.text = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all html files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#html\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.12.0\r\n         */\r\n        this.html = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all WaveFront OBJ files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#obj\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.obj = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all tilemap data files, typically added via the Loader.\r\n         * Only the data is stored in this cache, the textures are part of the Texture Manager.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#tilemap\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilemap = new BaseCache();\r\n\r\n        /**\r\n         * A Cache storing all xml data files, typically added via the Loader.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#xml\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.0.0\r\n         */\r\n        this.xml = new BaseCache();\r\n\r\n        /**\r\n         * An object that contains your own custom BaseCache entries.\r\n         * Add to this via the `addCustom` method.\r\n         *\r\n         * @name Phaser.Cache.CacheManager#custom\r\n         * @type {Object.<Phaser.Cache.BaseCache>}\r\n         * @since 3.0.0\r\n         */\r\n        this.custom = {};\r\n\r\n        this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Add your own custom Cache for storing your own files.\r\n     * The cache will be available under `Cache.custom.key`.\r\n     * The cache will only be created if the key is not already in use.\r\n     *\r\n     * @method Phaser.Cache.CacheManager#addCustom\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique key of your custom cache.\r\n     *\r\n     * @return {Phaser.Cache.BaseCache} A reference to the BaseCache that was created. If the key was already in use, a reference to the existing cache is returned instead.\r\n     */\r\n    addCustom: function (key)\r\n    {\r\n        if (!this.custom.hasOwnProperty(key))\r\n        {\r\n            this.custom[key] = new BaseCache();\r\n        }\r\n\r\n        return this.custom[key];\r\n    },\r\n\r\n    /**\r\n     * Removes all entries from all BaseCaches and destroys all custom caches.\r\n     *\r\n     * @method Phaser.Cache.CacheManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        var keys = [\r\n            'binary',\r\n            'bitmapFont',\r\n            'json',\r\n            'physics',\r\n            'shader',\r\n            'audio',\r\n            'video',\r\n            'text',\r\n            'html',\r\n            'obj',\r\n            'tilemap',\r\n            'xml'\r\n        ];\r\n\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            this[keys[i]].destroy();\r\n            this[keys[i]] = null;\r\n        }\r\n\r\n        for (var key in this.custom)\r\n        {\r\n            this.custom[key].destroy();\r\n        }\r\n\r\n        this.custom = null;\r\n\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = CacheManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9DYWNoZU1hbmFnZXIuanM/MmYyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsaUVBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FjaGUvQ2FjaGVNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZUNhY2hlID0gcmVxdWlyZSgnLi9CYXNlQ2FjaGUnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIENhY2hlIE1hbmFnZXIgaXMgdGhlIGdsb2JhbCBjYWNoZSBvd25lZCBhbmQgbWFpbnRhaW5lZCBieSB0aGUgR2FtZSBpbnN0YW5jZS5cclxuICpcclxuICogVmFyaW91cyBzeXN0ZW1zLCBzdWNoIGFzIHRoZSBmaWxlIExvYWRlciwgcmVseSBvbiB0aGlzIGNhY2hlIGluIG9yZGVyIHRvIHN0b3JlIHRoZSBmaWxlc1xyXG4gKiBpdCBoYXMgbG9hZGVkLiBUaGUgbWFuYWdlciBpdHNlbGYgZG9lc24ndCBzdG9yZSBhbnkgZmlsZXMsIGJ1dCBpbnN0ZWFkIG93bnMgbXVsdGlwbGUgQmFzZUNhY2hlXHJcbiAqIGluc3RhbmNlcywgb25lIHBlciB0eXBlIG9mIGZpbGUuIFlvdSBjYW4gYWxzbyBhZGQgeW91ciBvd24gY3VzdG9tIGNhY2hlcy5cclxuICpcclxuICogQGNsYXNzIENhY2hlTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhY2hlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhpcyBDYWNoZU1hbmFnZXIuXHJcbiAqL1xyXG52YXIgQ2FjaGVNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENhY2hlTWFuYWdlciAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgQ2FjaGVNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIGJpbmFyeSBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNiaW5hcnlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJpbmFyeSA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBiaXRtYXAgZm9udCBkYXRhIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICogT25seSB0aGUgZm9udCBkYXRhIGlzIHN0b3JlZCBpbiB0aGlzIGNhY2hlLCB0aGUgdGV4dHVyZXMgYXJlIHBhcnQgb2YgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjYml0bWFwRm9udFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYml0bWFwRm9udCA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBKU09OIGRhdGEgZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjanNvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuanNvbiA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBwaHlzaWNzIGRhdGEgZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjcGh5c2ljc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcyA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBzaGFkZXIgc291cmNlIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3NoYWRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIG5vbi1zdHJlYW1pbmcgYXVkaW8gZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjYXVkaW9cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF1ZGlvID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIG5vbi1zdHJlYW1pbmcgdmlkZW8gZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjdmlkZW9cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCB0ZXh0IGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHQgPSBuZXcgQmFzZUNhY2hlKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgQ2FjaGUgc3RvcmluZyBhbGwgaHRtbCBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNodG1sXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaHRtbCA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBXYXZlRnJvbnQgT0JKIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI29ialxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JqID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIHRpbGVtYXAgZGF0YSBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqIE9ubHkgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoaXMgY2FjaGUsIHRoZSB0ZXh0dXJlcyBhcmUgcGFydCBvZiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciN0aWxlbWFwXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlbWFwID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIHhtbCBkYXRhIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3htbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueG1sID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyB5b3VyIG93biBjdXN0b20gQmFzZUNhY2hlIGVudHJpZXMuXHJcbiAgICAgICAgICogQWRkIHRvIHRoaXMgdmlhIHRoZSBgYWRkQ3VzdG9tYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2N1c3RvbVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPFBoYXNlci5DYWNoZS5CYXNlQ2FjaGU+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VzdG9tID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub25jZShHYW1lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHlvdXIgb3duIGN1c3RvbSBDYWNoZSBmb3Igc3RvcmluZyB5b3VyIG93biBmaWxlcy5cclxuICAgICAqIFRoZSBjYWNoZSB3aWxsIGJlIGF2YWlsYWJsZSB1bmRlciBgQ2FjaGUuY3VzdG9tLmtleWAuXHJcbiAgICAgKiBUaGUgY2FjaGUgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2FkZEN1c3RvbVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUga2V5IG9mIHlvdXIgY3VzdG9tIGNhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9IEEgcmVmZXJlbmNlIHRvIHRoZSBCYXNlQ2FjaGUgdGhhdCB3YXMgY3JlYXRlZC4gSWYgdGhlIGtleSB3YXMgYWxyZWFkeSBpbiB1c2UsIGEgcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBjYWNoZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhZGRDdXN0b206IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21ba2V5XSA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSBhbGwgQmFzZUNhY2hlcyBhbmQgZGVzdHJveXMgYWxsIGN1c3RvbSBjYWNoZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBrZXlzID0gW1xyXG4gICAgICAgICAgICAnYmluYXJ5JyxcclxuICAgICAgICAgICAgJ2JpdG1hcEZvbnQnLFxyXG4gICAgICAgICAgICAnanNvbicsXHJcbiAgICAgICAgICAgICdwaHlzaWNzJyxcclxuICAgICAgICAgICAgJ3NoYWRlcicsXHJcbiAgICAgICAgICAgICdhdWRpbycsXHJcbiAgICAgICAgICAgICd2aWRlbycsXHJcbiAgICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICAgJ2h0bWwnLFxyXG4gICAgICAgICAgICAnb2JqJyxcclxuICAgICAgICAgICAgJ3RpbGVtYXAnLFxyXG4gICAgICAgICAgICAneG1sJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5c1tpXV0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmN1c3RvbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tW2tleV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jdXN0b20gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhY2hlTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/CacheManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/events/ADD_EVENT.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/cache/events/ADD_EVENT.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Cache Add Event.\r\n * \r\n * This event is dispatched by any Cache that extends the BaseCache each time a new object is added to it.\r\n *\r\n * @event Phaser.Cache.Events#ADD\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cache.BaseCache} cache - The cache to which the object was added.\r\n * @param {string} key - The key of the object added to the cache.\r\n * @param {*} object - A reference to the object that was added to the cache.\r\n */\r\nmodule.exports = 'add';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvQUREX0VWRU5ULmpzPzAzYjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9BRERfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FjaGUgQWRkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFueSBDYWNoZSB0aGF0IGV4dGVuZHMgdGhlIEJhc2VDYWNoZSBlYWNoIHRpbWUgYSBuZXcgb2JqZWN0IGlzIGFkZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhY2hlLkV2ZW50cyNBRERcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9IGNhY2hlIC0gVGhlIGNhY2hlIHRvIHdoaWNoIHRoZSBvYmplY3Qgd2FzIGFkZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBjYWNoZS5cclxuICogQHBhcmFtIHsqfSBvYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FkZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/ADD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/events/REMOVE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/cache/events/REMOVE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Cache Remove Event.\r\n * \r\n * This event is dispatched by any Cache that extends the BaseCache each time an object is removed from it.\r\n *\r\n * @event Phaser.Cache.Events#REMOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cache.BaseCache} cache - The cache from which the object was removed.\r\n * @param {string} key - The key of the object removed from the cache.\r\n * @param {*} object - A reference to the object that was removed from the cache.\r\n */\r\nmodule.exports = 'remove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvUkVNT1ZFX0VWRU5ULmpzPzNiYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9SRU1PVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FjaGUgUmVtb3ZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFueSBDYWNoZSB0aGF0IGV4dGVuZHMgdGhlIEJhc2VDYWNoZSBlYWNoIHRpbWUgYW4gb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSBpdC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYWNoZS5FdmVudHMjUkVNT1ZFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfSBjYWNoZSAtIFRoZSBjYWNoZSBmcm9tIHdoaWNoIHRoZSBvYmplY3Qgd2FzIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBvYmplY3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS5cclxuICogQHBhcmFtIHsqfSBvYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZW1vdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/REMOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/events/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/cache/events/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cache.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ADD: __webpack_require__(/*! ./ADD_EVENT */ \"./node_modules/phaser/src/cache/events/ADD_EVENT.js\"),\r\n    REMOVE: __webpack_require__(/*! ./REMOVE_EVENT */ \"./node_modules/phaser/src/cache/events/REMOVE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvaW5kZXguanM/NzEwNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsbUJBQU8sQ0FBQyx3RUFBYTtBQUM5QixZQUFZLG1CQUFPLENBQUMsOEVBQWdCOztBQUVwQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhY2hlLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFERDogcmVxdWlyZSgnLi9BRERfRVZFTlQnKSxcclxuICAgIFJFTU9WRTogcmVxdWlyZSgnLi9SRU1PVkVfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cache/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/cache/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cache\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BaseCache: __webpack_require__(/*! ./BaseCache */ \"./node_modules/phaser/src/cache/BaseCache.js\"),\r\n    CacheManager: __webpack_require__(/*! ./CacheManager */ \"./node_modules/phaser/src/cache/CacheManager.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cache/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9pbmRleC5qcz8zOTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGlFQUFhO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLHVFQUFnQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsaUVBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FjaGUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DYWNoZVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJhc2VDYWNoZTogcmVxdWlyZSgnLi9CYXNlQ2FjaGUnKSxcclxuICAgIENhY2hlTWFuYWdlcjogcmVxdWlyZSgnLi9DYWNoZU1hbmFnZXInKSxcclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/BaseCamera.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/BaseCamera.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar ValueToColor = __webpack_require__(/*! ../../display/color/ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Base Camera class.\r\n *\r\n * The Camera is the way in which all games are rendered in Phaser. They provide a view into your game world,\r\n * and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis.\r\n * \r\n * The Base Camera is extended by the Camera class, which adds in special effects including Fade,\r\n * Flash and Camera Shake, as well as the ability to follow Game Objects.\r\n * \r\n * The Base Camera was introduced in Phaser 3.12. It was split off from the Camera class, to allow\r\n * you to isolate special effects as needed. Therefore the 'since' values for properties of this class relate\r\n * to when they were added to the Camera class.\r\n *\r\n * @class BaseCamera\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.12.0\r\n * \r\n * @extends Phaser.Events.EventEmitter\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {number} x - The x position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} y - The y position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} width - The width of the Camera, in pixels.\r\n * @param {number} height - The height of the Camera, in pixels.\r\n */\r\nvar BaseCamera = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.Visible\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function BaseCamera (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = 0; }\r\n\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Scene this camera belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene;\r\n\r\n        /**\r\n         * A reference to the Game Scene Manager.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#sceneManager\r\n         * @type {Phaser.Scenes.SceneManager}\r\n         * @since 3.12.0\r\n         */\r\n        this.sceneManager;\r\n\r\n        /**\r\n         * A reference to the Game Scale Manager.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#scaleManager\r\n         * @type {Phaser.Scale.ScaleManager}\r\n         * @since 3.16.0\r\n         */\r\n        this.scaleManager;\r\n\r\n        /**\r\n         * A reference to the Scene's Camera Manager to which this Camera belongs.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#cameraManager\r\n         * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n         * @since 3.17.0\r\n         */\r\n        this.cameraManager;\r\n\r\n        /**\r\n         * The Camera ID. Assigned by the Camera Manager and used to handle camera exclusion.\r\n         * This value is a bitmask.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#id\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.id = 0;\r\n\r\n        /**\r\n         * The name of the Camera. This is left empty for your own use.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * This property is un-used in v3.16.\r\n         * \r\n         * The resolution of the Game, used in most Camera calculations.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#resolution\r\n         * @type {number}\r\n         * @readonly\r\n         * @deprecated\r\n         * @since 3.12.0\r\n         */\r\n        this.resolution = 1;\r\n\r\n        /**\r\n         * Should this camera round its pixel values to integers?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#roundPixels\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.roundPixels = false;\r\n\r\n        /**\r\n         * Is this Camera visible or not?\r\n         *\r\n         * A visible camera will render and perform input tests.\r\n         * An invisible camera will not render anything and will skip input tests.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#visible\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.10.0\r\n         */\r\n\r\n        /**\r\n         * Is this Camera using a bounds to restrict scrolling movement?\r\n         *\r\n         * Set this property along with the bounds via `Camera.setBounds`.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#useBounds\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.useBounds = false;\r\n\r\n        /**\r\n         * The World View is a Rectangle that defines the area of the 'world' the Camera is currently looking at.\r\n         * This factors in the Camera viewport size, zoom and scroll position and is updated in the Camera preRender step.\r\n         * If you have enabled Camera bounds the worldview will be clamped to those bounds accordingly.\r\n         * You can use it for culling or intersection checks.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#worldView\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.worldView = new Rectangle();\r\n\r\n        /**\r\n         * Is this Camera dirty?\r\n         * \r\n         * A dirty Camera has had either its viewport size, bounds, scroll, rotation or zoom levels changed since the last frame.\r\n         * \r\n         * This flag is cleared during the `postRenderCamera` method of the renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#dirty\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.11.0\r\n         */\r\n        this.dirty = true;\r\n\r\n        /**\r\n         * The x position of the Camera viewport, relative to the top-left of the game canvas.\r\n         * The viewport is the area into which the camera renders.\r\n         * To adjust the position the camera is looking at in the game world, see the `scrollX` value.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#x\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._x = x;\r\n\r\n        /**\r\n         * The y position of the Camera, relative to the top-left of the game canvas.\r\n         * The viewport is the area into which the camera renders.\r\n         * To adjust the position the camera is looking at in the game world, see the `scrollY` value.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#y\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._y = y;\r\n\r\n        /**\r\n         * Internal Camera X value multiplied by the resolution.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_cx\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._cx = 0;\r\n\r\n        /**\r\n         * Internal Camera Y value multiplied by the resolution.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_cy\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._cy = 0;\r\n\r\n        /**\r\n         * Internal Camera Width value multiplied by the resolution.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_cw\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._cw = 0;\r\n\r\n        /**\r\n         * Internal Camera Height value multiplied by the resolution.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_ch\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._ch = 0;\r\n\r\n        /**\r\n         * The width of the Camera viewport, in pixels.\r\n         *\r\n         * The viewport is the area into which the Camera renders. Setting the viewport does\r\n         * not restrict where the Camera can scroll to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_width\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._width = width;\r\n\r\n        /**\r\n         * The height of the Camera viewport, in pixels.\r\n         *\r\n         * The viewport is the area into which the Camera renders. Setting the viewport does\r\n         * not restrict where the Camera can scroll to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_height\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._height = height;\r\n\r\n        /**\r\n         * The bounds the camera is restrained to during scrolling.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_bounds\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._bounds = new Rectangle();\r\n\r\n        /**\r\n         * The horizontal scroll position of this Camera.\r\n         *\r\n         * Change this value to cause the Camera to scroll around your Scene.\r\n         *\r\n         * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n         * will automatically adjust the Camera scroll values accordingly.\r\n         *\r\n         * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_scrollX\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this._scrollX = 0;\r\n\r\n        /**\r\n         * The vertical scroll position of this Camera.\r\n         *\r\n         * Change this value to cause the Camera to scroll around your Scene.\r\n         *\r\n         * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n         * will automatically adjust the Camera scroll values accordingly.\r\n         *\r\n         * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_scrollY\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this._scrollY = 0;\r\n\r\n        /**\r\n         * The Camera zoom value. Change this value to zoom in, or out of, a Scene.\r\n         *\r\n         * A value of 0.5 would zoom the Camera out, so you can now see twice as much\r\n         * of the Scene as before. A value of 2 would zoom the Camera in, so every pixel\r\n         * now takes up 2 pixels when rendered.\r\n         *\r\n         * Set to 1 to return to the default zoom level.\r\n         *\r\n         * Be careful to never set this value to zero.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_zoom\r\n         * @type {number}\r\n         * @private\r\n         * @default 1\r\n         * @since 3.11.0\r\n         */\r\n        this._zoom = 1;\r\n\r\n        /**\r\n         * The rotation of the Camera in radians.\r\n         *\r\n         * Camera rotation always takes place based on the Camera viewport. By default, rotation happens\r\n         * in the center of the viewport. You can adjust this with the `originX` and `originY` properties.\r\n         *\r\n         * Rotation influences the rendering of _all_ Game Objects visible by this Camera. However, it does not\r\n         * rotate the Camera viewport itself, which always remains an axis-aligned rectangle.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_rotation\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this._rotation = 0;\r\n\r\n        /**\r\n         * A local transform matrix used for internal calculations.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#matrix\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.matrix = new TransformMatrix();\r\n\r\n        /**\r\n         * Does this Camera have a transparent background?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#transparent\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.transparent = true;\r\n\r\n        /**\r\n         * The background color of this Camera. Only used if `transparent` is `false`.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#backgroundColor\r\n         * @type {Phaser.Display.Color}\r\n         * @since 3.0.0\r\n         */\r\n        this.backgroundColor = ValueToColor('rgba(0,0,0,0)');\r\n\r\n        /**\r\n         * The Camera alpha value. Setting this property impacts every single object that this Camera\r\n         * renders. You can either set the property directly, i.e. via a Tween, to fade a Camera in or out,\r\n         * or via the chainable `setAlpha` method instead.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#alpha\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.11.0\r\n         */\r\n\r\n        /**\r\n         * Should the camera cull Game Objects before checking them for input hit tests?\r\n         * In some special cases it may be beneficial to disable this.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#disableCull\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.disableCull = false;\r\n\r\n        /**\r\n         * A temporary array of culled objects.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#culledObjects\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @default []\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.culledObjects = [];\r\n\r\n        /**\r\n         * The mid-point of the Camera in 'world' coordinates.\r\n         *\r\n         * Use it to obtain exactly where in the world the center of the camera is currently looking.\r\n         *\r\n         * This value is updated in the preRender method, after the scroll values and follower\r\n         * have been processed.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#midPoint\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.midPoint = new Vector2(width / 2, height / 2);\r\n\r\n        /**\r\n         * The horizontal origin of rotation for this Camera.\r\n         *\r\n         * By default the camera rotates around the center of the viewport.\r\n         *\r\n         * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n         * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n         *\r\n         * See `setOrigin` to set both origins in a single, chainable call.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#originX\r\n         * @type {number}\r\n         * @default 0.5\r\n         * @since 3.11.0\r\n         */\r\n        this.originX = 0.5;\r\n\r\n        /**\r\n         * The vertical origin of rotation for this Camera.\r\n         *\r\n         * By default the camera rotates around the center of the viewport.\r\n         *\r\n         * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n         * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n         *\r\n         * See `setOrigin` to set both origins in a single, chainable call.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#originY\r\n         * @type {number}\r\n         * @default 0.5\r\n         * @since 3.11.0\r\n         */\r\n        this.originY = 0.5;\r\n\r\n        /**\r\n         * Does this Camera have a custom viewport?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_customViewport\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.12.0\r\n         */\r\n        this._customViewport = false;\r\n\r\n        /**\r\n         * The Mask this Camera is using during render.\r\n         * Set the mask using the `setMask` method. Remove the mask using the `clearMask` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#mask\r\n         * @type {?(Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask)}\r\n         * @since 3.17.0\r\n         */\r\n        this.mask = null;\r\n\r\n        /**\r\n         * The Camera that this Camera uses for translation during masking.\r\n         * \r\n         * If the mask is fixed in position this will be a reference to\r\n         * the CameraManager.default instance. Otherwise, it'll be a reference\r\n         * to itself.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.BaseCamera#_maskCamera\r\n         * @type {?Phaser.Cameras.Scene2D.BaseCamera}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this._maskCamera = null;\r\n    },\r\n\r\n    /**\r\n     * Set the Alpha level of this Camera. The alpha controls the opacity of the Camera as it renders.\r\n     * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setAlpha\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} [value=1] - The Camera alpha value.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n\r\n    /**\r\n     * Sets the rotation origin of this Camera.\r\n     *\r\n     * The values are given in the range 0 to 1 and are only used when calculating Camera rotation.\r\n     *\r\n     * By default the camera rotates around the center of the viewport.\r\n     *\r\n     * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n     * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setOrigin\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} [x=0.5] - The horizontal origin value.\r\n     * @param {number} [y=x] - The vertical origin value. If not defined it will be set to the value of `x`.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    setOrigin: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0.5; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.originX = x;\r\n        this.originY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates what the Camera.scrollX and scrollY values would need to be in order to move\r\n     * the Camera so it is centered on the given x and y coordinates, without actually moving\r\n     * the Camera there. The results are clamped based on the Camera bounds, if set.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#getScroll\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate to center on.\r\n     * @param {number} y - The vertical coordinate to center on.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vec2 to store the values in. If not given a new Vec2 is created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The scroll coordinates stored in the `x` and `y` properties.\r\n     */\r\n    getScroll: function (x, y, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var originX = this.width * 0.5;\r\n        var originY = this.height * 0.5;\r\n\r\n        out.x = x - originX;\r\n        out.y = y - originY;\r\n\r\n        if (this.useBounds)\r\n        {\r\n            out.x = this.clampX(out.x);\r\n            out.y = this.clampY(out.y);\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Moves the Camera horizontally so that it is centered on the given x coordinate, bounds allowing.\r\n     * Calling this does not change the scrollY value.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#centerOnX\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate to center on.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    centerOnX: function (x)\r\n    {\r\n        var originX = this.width * 0.5;\r\n\r\n        this.midPoint.x = x;\r\n\r\n        this.scrollX = x - originX;\r\n\r\n        if (this.useBounds)\r\n        {\r\n            this.scrollX = this.clampX(this.scrollX);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the Camera vertically so that it is centered on the given y coordinate, bounds allowing.\r\n     * Calling this does not change the scrollX value.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#centerOnY\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} y - The vertical coordinate to center on.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    centerOnY: function (y)\r\n    {\r\n        var originY = this.height * 0.5;\r\n\r\n        this.midPoint.y = y;\r\n\r\n        this.scrollY = y - originY;\r\n\r\n        if (this.useBounds)\r\n        {\r\n            this.scrollY = this.clampY(this.scrollY);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the Camera so that it is centered on the given coordinates, bounds allowing.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#centerOn\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate to center on.\r\n     * @param {number} y - The vertical coordinate to center on.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    centerOn: function (x, y)\r\n    {\r\n        this.centerOnX(x);\r\n        this.centerOnY(y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the Camera so that it is looking at the center of the Camera Bounds, if enabled.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#centerToBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    centerToBounds: function ()\r\n    {\r\n        if (this.useBounds)\r\n        {\r\n            var bounds = this._bounds;\r\n            var originX = this.width * 0.5;\r\n            var originY = this.height * 0.5;\r\n\r\n            this.midPoint.set(bounds.centerX, bounds.centerY);\r\n\r\n            this.scrollX = bounds.centerX - originX;\r\n            this.scrollY = bounds.centerY - originY;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the Camera so that it is re-centered based on its viewport size.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#centerToSize\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    centerToSize: function ()\r\n    {\r\n        this.scrollX = this.width * 0.5;\r\n        this.scrollY = this.height * 0.5;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes an array of Game Objects and returns a new array featuring only those objects\r\n     * visible by this camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#cull\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.GameObject[]} G - [renderableObjects,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject[]} renderableObjects - An array of Game Objects to cull.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} An array of Game Objects visible to this Camera.\r\n     */\r\n    cull: function (renderableObjects)\r\n    {\r\n        if (this.disableCull)\r\n        {\r\n            return renderableObjects;\r\n        }\r\n\r\n        var cameraMatrix = this.matrix.matrix;\r\n\r\n        var mva = cameraMatrix[0];\r\n        var mvb = cameraMatrix[1];\r\n        var mvc = cameraMatrix[2];\r\n        var mvd = cameraMatrix[3];\r\n\r\n        /* First Invert Matrix */\r\n        var determinant = (mva * mvd) - (mvb * mvc);\r\n\r\n        if (!determinant)\r\n        {\r\n            return renderableObjects;\r\n        }\r\n\r\n        var mve = cameraMatrix[4];\r\n        var mvf = cameraMatrix[5];\r\n\r\n        var scrollX = this.scrollX;\r\n        var scrollY = this.scrollY;\r\n        var cameraW = this.width;\r\n        var cameraH = this.height;\r\n        var culledObjects = this.culledObjects;\r\n        var length = renderableObjects.length;\r\n\r\n        determinant = 1 / determinant;\r\n\r\n        culledObjects.length = 0;\r\n\r\n        for (var index = 0; index < length; ++index)\r\n        {\r\n            var object = renderableObjects[index];\r\n\r\n            if (!object.hasOwnProperty('width') || object.parentContainer)\r\n            {\r\n                culledObjects.push(object);\r\n                continue;\r\n            }\r\n\r\n            var objectW = object.width;\r\n            var objectH = object.height;\r\n            var objectX = (object.x - (scrollX * object.scrollFactorX)) - (objectW * object.originX);\r\n            var objectY = (object.y - (scrollY * object.scrollFactorY)) - (objectH * object.originY);\r\n            var tx = (objectX * mva + objectY * mvc + mve);\r\n            var ty = (objectX * mvb + objectY * mvd + mvf);\r\n            var tw = ((objectX + objectW) * mva + (objectY + objectH) * mvc + mve);\r\n            var th = ((objectX + objectW) * mvb + (objectY + objectH) * mvd + mvf);\r\n            var cullTop = this.y;\r\n            var cullBottom = cullTop + cameraH;\r\n            var cullLeft = this.x;\r\n            var cullRight = cullLeft + cameraW;\r\n\r\n            if ((tw > cullLeft && tx < cullRight) && (th > cullTop && ty < cullBottom))\r\n            {\r\n                culledObjects.push(object);\r\n            }\r\n        }\r\n\r\n        return culledObjects;\r\n    },\r\n\r\n    /**\r\n     * Converts the given `x` and `y` coordinates into World space, based on this Cameras transform.\r\n     * You can optionally provide a Vector2, or similar object, to store the results in.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#getWorldPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {number} x - The x position to convert to world space.\r\n     * @param {number} y - The y position to convert to world space.\r\n     * @param {(object|Phaser.Math.Vector2)} [output] - An optional object to store the results in. If not provided a new Vector2 will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} An object holding the converted values in its `x` and `y` properties.\r\n     */\r\n    getWorldPoint: function (x, y, output)\r\n    {\r\n        if (output === undefined) { output = new Vector2(); }\r\n\r\n        var cameraMatrix = this.matrix.matrix;\r\n\r\n        var mva = cameraMatrix[0];\r\n        var mvb = cameraMatrix[1];\r\n        var mvc = cameraMatrix[2];\r\n        var mvd = cameraMatrix[3];\r\n        var mve = cameraMatrix[4];\r\n        var mvf = cameraMatrix[5];\r\n\r\n        //  Invert Matrix\r\n        var determinant = (mva * mvd) - (mvb * mvc);\r\n\r\n        if (!determinant)\r\n        {\r\n            output.x = x;\r\n            output.y = y;\r\n\r\n            return output;\r\n        }\r\n\r\n        determinant = 1 / determinant;\r\n\r\n        var ima = mvd * determinant;\r\n        var imb = -mvb * determinant;\r\n        var imc = -mvc * determinant;\r\n        var imd = mva * determinant;\r\n        var ime = (mvc * mvf - mvd * mve) * determinant;\r\n        var imf = (mvb * mve - mva * mvf) * determinant;\r\n\r\n        var c = Math.cos(this.rotation);\r\n        var s = Math.sin(this.rotation);\r\n\r\n        var zoom = this.zoom;\r\n        var res = this.resolution;\r\n\r\n        var scrollX = this.scrollX;\r\n        var scrollY = this.scrollY;\r\n\r\n        //  Works for zoom of 1 with any resolution, but resolution > 1 and zoom !== 1 breaks\r\n        var sx = x + ((scrollX * c - scrollY * s) * zoom);\r\n        var sy = y + ((scrollX * s + scrollY * c) * zoom);\r\n\r\n        //  Apply transform to point\r\n        output.x = (sx * ima + sy * imc) * res + ime;\r\n        output.y = (sx * imb + sy * imd) * res + imf;\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Given a Game Object, or an array of Game Objects, it will update all of their camera filter settings\r\n     * so that they are ignored by this Camera. This means they will not be rendered by this Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#ignore\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group)} entries - The Game Object, or array of Game Objects, to be ignored by this Camera.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    ignore: function (entries)\r\n    {\r\n        var id = this.id;\r\n\r\n        if (!Array.isArray(entries))\r\n        {\r\n            entries = [ entries ];\r\n        }\r\n\r\n        for (var i = 0; i < entries.length; i++)\r\n        {\r\n            var entry = entries[i];\r\n\r\n            if (Array.isArray(entry))\r\n            {\r\n                this.ignore(entry);\r\n            }\r\n            else if (entry.isParent)\r\n            {\r\n                this.ignore(entry.getChildren());\r\n            }\r\n            else\r\n            {\r\n                entry.cameraFilter |= id;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal preRender step.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#preRender\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} resolution - The game resolution, as set in the Scale Manager.\r\n     */\r\n    preRender: function (resolution)\r\n    {\r\n        var width = this.width;\r\n        var height = this.height;\r\n\r\n        var halfWidth = width * 0.5;\r\n        var halfHeight = height * 0.5;\r\n\r\n        var zoom = this.zoom * resolution;\r\n        var matrix = this.matrix;\r\n\r\n        var originX = width * this.originX;\r\n        var originY = height * this.originY;\r\n\r\n        var sx = this.scrollX;\r\n        var sy = this.scrollY;\r\n\r\n        if (this.useBounds)\r\n        {\r\n            sx = this.clampX(sx);\r\n            sy = this.clampY(sy);\r\n        }\r\n\r\n        if (this.roundPixels)\r\n        {\r\n            originX = Math.round(originX);\r\n            originY = Math.round(originY);\r\n        }\r\n\r\n        //  Values are in pixels and not impacted by zooming the Camera\r\n        this.scrollX = sx;\r\n        this.scrollY = sy;\r\n\r\n        var midX = sx + halfWidth;\r\n        var midY = sy + halfHeight;\r\n\r\n        //  The center of the camera, in world space, so taking zoom into account\r\n        //  Basically the pixel value of what it's looking at in the middle of the cam\r\n        this.midPoint.set(midX, midY);\r\n\r\n        var displayWidth = width / zoom;\r\n        var displayHeight = height / zoom;\r\n\r\n        this.worldView.setTo(\r\n            midX - (displayWidth / 2),\r\n            midY - (displayHeight / 2),\r\n            displayWidth,\r\n            displayHeight\r\n        );\r\n\r\n        matrix.applyITRS(this.x + originX, this.y + originY, this.rotation, zoom, zoom);\r\n        matrix.translate(-originX, -originY);\r\n    },\r\n\r\n    /**\r\n     * Takes an x value and checks it's within the range of the Camera bounds, adjusting if required.\r\n     * Do not call this method if you are not using camera bounds.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#clampX\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The value to horizontally scroll clamp.\r\n     *\r\n     * @return {number} The adjusted value to use as scrollX.\r\n     */\r\n    clampX: function (x)\r\n    {\r\n        var bounds = this._bounds;\r\n\r\n        var dw = this.displayWidth;\r\n\r\n        var bx = bounds.x + ((dw - this.width) / 2);\r\n        var bw = Math.max(bx, bx + bounds.width - dw);\r\n\r\n        if (x < bx)\r\n        {\r\n            x = bx;\r\n        }\r\n        else if (x > bw)\r\n        {\r\n            x = bw;\r\n        }\r\n\r\n        return x;\r\n    },\r\n\r\n    /**\r\n     * Takes a y value and checks it's within the range of the Camera bounds, adjusting if required.\r\n     * Do not call this method if you are not using camera bounds.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#clampY\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} y - The value to vertically scroll clamp.\r\n     *\r\n     * @return {number} The adjusted value to use as scrollY.\r\n     */\r\n    clampY: function (y)\r\n    {\r\n        var bounds = this._bounds;\r\n\r\n        var dh = this.displayHeight;\r\n\r\n        var by = bounds.y + ((dh - this.height) / 2);\r\n        var bh = Math.max(by, by + bounds.height - dh);\r\n\r\n        if (y < by)\r\n        {\r\n            y = by;\r\n        }\r\n        else if (y > bh)\r\n        {\r\n            y = bh;\r\n        }\r\n\r\n        return y;\r\n    },\r\n\r\n    /*\r\n        var gap = this._zoomInversed;\r\n        return gap * Math.round((src.x - this.scrollX * src.scrollFactorX) / gap);\r\n    */\r\n\r\n    /**\r\n     * If this Camera has previously had movement bounds set on it, this will remove them.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#removeBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    removeBounds: function ()\r\n    {\r\n        this.useBounds = false;\r\n\r\n        this.dirty = true;\r\n\r\n        this._bounds.setEmpty();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the rotation of this Camera. This causes everything it renders to appear rotated.\r\n     *\r\n     * Rotating a camera does not rotate the viewport itself, it is applied during rendering.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The cameras angle of rotation, given in degrees.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setAngle: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.rotation = DegToRad(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the background color for this Camera.\r\n     *\r\n     * By default a Camera has a transparent background but it can be given a solid color, with any level\r\n     * of transparency, via this method.\r\n     *\r\n     * The color value can be specified using CSS color notation, hex or numbers.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setBackgroundColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|number|Phaser.Types.Display.InputColorObject)} [color='rgba(0,0,0,0)'] - The color value. In CSS, hex or numeric color notation.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setBackgroundColor: function (color)\r\n    {\r\n        if (color === undefined) { color = 'rgba(0,0,0,0)'; }\r\n\r\n        this.backgroundColor = ValueToColor(color);\r\n\r\n        this.transparent = (this.backgroundColor.alpha === 0);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the bounds of the Camera. The bounds are an axis-aligned rectangle.\r\n     * \r\n     * The Camera bounds controls where the Camera can scroll to, stopping it from scrolling off the\r\n     * edges and into blank space. It does not limit the placement of Game Objects, or where\r\n     * the Camera viewport can be positioned.\r\n     * \r\n     * Temporarily disable the bounds by changing the boolean `Camera.useBounds`.\r\n     * \r\n     * Clear the bounds entirely by calling `Camera.removeBounds`.\r\n     * \r\n     * If you set bounds that are smaller than the viewport it will stop the Camera from being\r\n     * able to scroll. The bounds can be positioned where-ever you wish. By default they are from\r\n     * 0x0 to the canvas width x height. This means that the coordinate 0x0 is the top left of\r\n     * the Camera bounds. However, you can position them anywhere. So if you wanted a game world\r\n     * that was 2048x2048 in size, with 0x0 being the center of it, you can set the bounds x/y\r\n     * to be -1024, -1024, with a width and height of 2048. Depending on your game you may find\r\n     * it easier for 0x0 to be the top-left of the bounds, or you may wish 0x0 to be the middle.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} x - The top-left x coordinate of the bounds.\r\n     * @param {integer} y - The top-left y coordinate of the bounds.\r\n     * @param {integer} width - The width of the bounds, in pixels.\r\n     * @param {integer} height - The height of the bounds, in pixels.\r\n     * @param {boolean} [centerOn=false] - If `true` the Camera will automatically be centered on the new bounds.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setBounds: function (x, y, width, height, centerOn)\r\n    {\r\n        if (centerOn === undefined) { centerOn = false; }\r\n\r\n        this._bounds.setTo(x, y, width, height);\r\n\r\n        this.dirty = true;\r\n        this.useBounds = true;\r\n\r\n        if (centerOn)\r\n        {\r\n            this.centerToBounds();\r\n        }\r\n        else\r\n        {\r\n            this.scrollX = this.clampX(this.scrollX);\r\n            this.scrollY = this.clampY(this.scrollY);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a rectangle containing the bounds of the Camera.\r\n     * \r\n     * If the Camera does not have any bounds the rectangle will be empty.\r\n     * \r\n     * The rectangle is a copy of the bounds, so is safe to modify.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#getBounds\r\n     * @since 3.16.0\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} [out] - An optional Rectangle to store the bounds in. If not given, a new Rectangle will be created.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} A rectangle containing the bounds of this Camera.\r\n     */\r\n    getBounds: function (out)\r\n    {\r\n        if (out === undefined) { out = new Rectangle(); }\r\n\r\n        var source = this._bounds;\r\n\r\n        out.setTo(source.x, source.y, source.width, source.height);\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Sets the name of this Camera.\r\n     * This value is for your own use and isn't used internally.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setName\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [value=''] - The name of the Camera.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setName: function (value)\r\n    {\r\n        if (value === undefined) { value = ''; }\r\n\r\n        this.name = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the position of the Camera viewport within the game.\r\n     *\r\n     * This does not change where the camera is 'looking'. See `setScroll` to control that.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The top-left x coordinate of the Camera viewport.\r\n     * @param {number} [y=x] - The top-left y coordinate of the Camera viewport.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the rotation of this Camera. This causes everything it renders to appear rotated.\r\n     *\r\n     * Rotating a camera does not rotate the viewport itself, it is applied during rendering.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The rotation of the Camera, in radians.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setRotation: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.rotation = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Should the Camera round pixel values to whole integers when rendering Game Objects?\r\n     * \r\n     * In some types of game, especially with pixel art, this is required to prevent sub-pixel aliasing.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setRoundPixels\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - `true` to round Camera pixels, `false` to not.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setRoundPixels: function (value)\r\n    {\r\n        this.roundPixels = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Scene the Camera is bound to.\r\n     * \r\n     * Also populates the `resolution` property and updates the internal size values.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setScene\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene the camera is bound to.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setScene: function (scene)\r\n    {\r\n        if (this.scene && this._customViewport)\r\n        {\r\n            this.sceneManager.customViewports--;\r\n        }\r\n\r\n        this.scene = scene;\r\n\r\n        var sys = scene.sys;\r\n\r\n        this.sceneManager = sys.game.scene;\r\n        this.scaleManager = sys.scale;\r\n        this.cameraManager = sys.cameras;\r\n\r\n        var res = this.scaleManager.resolution;\r\n\r\n        this.resolution = res;\r\n\r\n        this._cx = this._x * res;\r\n        this._cy = this._y * res;\r\n        this._cw = this._width * res;\r\n        this._ch = this._height * res;\r\n\r\n        this.updateSystem();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the position of where the Camera is looking within the game.\r\n     * You can also modify the properties `Camera.scrollX` and `Camera.scrollY` directly.\r\n     * Use this method, or the scroll properties, to move your camera around the game world.\r\n     *\r\n     * This does not change where the camera viewport is placed. See `setPosition` to control that.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setScroll\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the Camera in the game world.\r\n     * @param {number} [y=x] - The y coordinate of the Camera in the game world.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setScroll: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.scrollX = x;\r\n        this.scrollY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the size of the Camera viewport.\r\n     *\r\n     * By default a Camera is the same size as the game, but can be made smaller via this method,\r\n     * allowing you to create mini-cam style effects by creating and positioning a smaller Camera\r\n     * viewport within your game.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} width - The width of the Camera viewport.\r\n     * @param {integer} [height=width] - The height of the Camera viewport.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This method sets the position and size of the Camera viewport in a single call.\r\n     *\r\n     * If you're trying to change where the Camera is looking at in your game, then see\r\n     * the method `Camera.setScroll` instead. This method is for changing the viewport\r\n     * itself, not what the camera can see.\r\n     *\r\n     * By default a Camera is the same size as the game, but can be made smaller via this method,\r\n     * allowing you to create mini-cam style effects by creating and positioning a smaller Camera\r\n     * viewport within your game.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setViewport\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The top-left x coordinate of the Camera viewport.\r\n     * @param {number} y - The top-left y coordinate of the Camera viewport.\r\n     * @param {integer} width - The width of the Camera viewport.\r\n     * @param {integer} [height=width] - The height of the Camera viewport.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setViewport: function (x, y, width, height)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the zoom value of the Camera.\r\n     *\r\n     * Changing to a smaller value, such as 0.5, will cause the camera to 'zoom out'.\r\n     * Changing to a larger value, such as 2, will cause the camera to 'zoom in'.\r\n     *\r\n     * A value of 1 means 'no zoom' and is the default.\r\n     *\r\n     * Changing the zoom does not impact the Camera viewport in any way, it is only applied during rendering.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setZoom\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=1] - The zoom value of the Camera. The minimum it can be is 0.001.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n     */\r\n    setZoom: function (value)\r\n    {\r\n        if (value === undefined) { value = 1; }\r\n\r\n        if (value === 0)\r\n        {\r\n            value = 0.001;\r\n        }\r\n\r\n        this.zoom = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the mask to be applied to this Camera during rendering.\r\n     *\r\n     * The mask must have been previously created and can be either a GeometryMask or a BitmapMask.\r\n     * \r\n     * Bitmap Masks only work on WebGL. Geometry Masks work on both WebGL and Canvas.\r\n     *\r\n     * If a mask is already set on this Camera it will be immediately replaced.\r\n     * \r\n     * Masks have no impact on physics or input detection. They are purely a rendering component\r\n     * that allows you to limit what is visible during the render pass.\r\n     * \r\n     * Note: You cannot mask a Camera that has `renderToTexture` set.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setMask\r\n     * @since 3.17.0\r\n     *\r\n     * @param {(Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask)} mask - The mask this Camera will use when rendering.\r\n     * @param {boolean} [fixedPosition=true] - Should the mask translate along with the Camera, or be fixed in place and not impacted by the Cameras transform?\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    setMask: function (mask, fixedPosition)\r\n    {\r\n        if (fixedPosition === undefined) { fixedPosition = true; }\r\n\r\n        this.mask = mask;\r\n\r\n        this._maskCamera = (fixedPosition) ? this.cameraManager.default : this;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clears the mask that this Camera was using.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#clearMask\r\n     * @since 3.17.0\r\n     *\r\n     * @param {boolean} [destroyMask=false] - Destroy the mask before clearing it?\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    clearMask: function (destroyMask)\r\n    {\r\n        if (destroyMask === undefined) { destroyMask = false; }\r\n\r\n        if (destroyMask && this.mask)\r\n        {\r\n            this.mask.destroy();\r\n        }\r\n\r\n        this.mask = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the visibility of this Camera.\r\n     *\r\n     * An invisible Camera will skip rendering and input tests of everything it can see.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#setVisible\r\n     * @since 3.10.0\r\n     *\r\n     * @param {boolean} value - The visible state of the Camera.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n\r\n    /**\r\n     * Returns an Object suitable for JSON storage containing all of the Camera viewport and rendering properties.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Cameras.Scene2D.JSONCamera} A well-formed object suitable for conversion to JSON.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var output = {\r\n            name: this.name,\r\n            x: this.x,\r\n            y: this.y,\r\n            width: this.width,\r\n            height: this.height,\r\n            zoom: this.zoom,\r\n            rotation: this.rotation,\r\n            roundPixels: this.roundPixels,\r\n            scrollX: this.scrollX,\r\n            scrollY: this.scrollY,\r\n            backgroundColor: this.backgroundColor.rgba\r\n        };\r\n\r\n        if (this.useBounds)\r\n        {\r\n            output['bounds'] = {\r\n                x: this._bounds.x,\r\n                y: this._bounds.y,\r\n                width: this._bounds.width,\r\n                height: this._bounds.height\r\n            };\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Internal method called automatically by the Camera Manager.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#update\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function ()\r\n    {\r\n        //  NOOP\r\n    },\r\n\r\n    /**\r\n     * Internal method called automatically when the viewport changes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#updateSystem\r\n     * @private\r\n     * @since 3.12.0\r\n     */\r\n    updateSystem: function ()\r\n    {\r\n        if (!this.scaleManager)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var custom = (this._x !== 0 || this._y !== 0 || this.scaleManager.width !== this._width || this.scaleManager.height !== this._height);\r\n\r\n        var sceneManager = this.sceneManager;\r\n\r\n        if (custom && !this._customViewport)\r\n        {\r\n            //  We need a custom viewport for this Camera\r\n            sceneManager.customViewports++;\r\n        }\r\n        else if (!custom && this._customViewport)\r\n        {\r\n            //  We're turning off a custom viewport for this Camera\r\n            sceneManager.customViewports--;\r\n        }\r\n\r\n        this.dirty = true;\r\n        this._customViewport = custom;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Camera instance and its internal properties and references.\r\n     * Once destroyed you cannot use this Camera again, even if re-added to a Camera Manager.\r\n     * \r\n     * This method is called automatically by `CameraManager.remove` if that methods `runDestroy` argument is `true`, which is the default.\r\n     * \r\n     * Unless you have a specific reason otherwise, always use `CameraManager.remove` and allow it to handle the camera destruction,\r\n     * rather than calling this method directly.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.BaseCamera#destroy\r\n     * @fires Phaser.Cameras.Scene2D.Events#DESTROY\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.emit(Events.DESTROY, this);\r\n\r\n        this.removeAllListeners();\r\n\r\n        this.matrix.destroy();\r\n\r\n        this.culledObjects = [];\r\n\r\n        if (this._customViewport)\r\n        {\r\n            //  We're turning off a custom viewport for this Camera\r\n            this.sceneManager.customViewports--;\r\n        }\r\n\r\n        this._bounds = null;\r\n\r\n        this.scene = null;\r\n        this.scaleManager = null;\r\n        this.sceneManager = null;\r\n        this.cameraManager = null;\r\n    },\r\n\r\n    /**\r\n     * The x position of the Camera viewport, relative to the top-left of the game canvas.\r\n     * The viewport is the area into which the camera renders.\r\n     * To adjust the position the camera is looking at in the game world, see the `scrollX` value.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._x = value;\r\n            this._cx = value * this.resolution;\r\n            this.updateSystem();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y position of the Camera viewport, relative to the top-left of the game canvas.\r\n     * The viewport is the area into which the camera renders.\r\n     * To adjust the position the camera is looking at in the game world, see the `scrollY` value.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._y = value;\r\n            this._cy = value * this.resolution;\r\n            this.updateSystem();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The width of the Camera viewport, in pixels.\r\n     *\r\n     * The viewport is the area into which the Camera renders. Setting the viewport does\r\n     * not restrict where the Camera can scroll to.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#width\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    width: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._width;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._width = value;\r\n            this._cw = value * this.resolution;\r\n            this.updateSystem();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The height of the Camera viewport, in pixels.\r\n     *\r\n     * The viewport is the area into which the Camera renders. Setting the viewport does\r\n     * not restrict where the Camera can scroll to.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#height\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    height: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._height;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._height = value;\r\n            this._ch = value * this.resolution;\r\n            this.updateSystem();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal scroll position of this Camera.\r\n     *\r\n     * Change this value to cause the Camera to scroll around your Scene.\r\n     *\r\n     * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n     * will automatically adjust the Camera scroll values accordingly.\r\n     *\r\n     * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#scrollX\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    scrollX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scrollX;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._scrollX = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical scroll position of this Camera.\r\n     *\r\n     * Change this value to cause the Camera to scroll around your Scene.\r\n     *\r\n     * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n     * will automatically adjust the Camera scroll values accordingly.\r\n     *\r\n     * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#scrollY\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    scrollY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scrollY;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._scrollY = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Camera zoom value. Change this value to zoom in, or out of, a Scene.\r\n     *\r\n     * A value of 0.5 would zoom the Camera out, so you can now see twice as much\r\n     * of the Scene as before. A value of 2 would zoom the Camera in, so every pixel\r\n     * now takes up 2 pixels when rendered.\r\n     *\r\n     * Set to 1 to return to the default zoom level.\r\n     *\r\n     * Be careful to never set this value to zero.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#zoom\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    zoom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._zoom;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._zoom = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The rotation of the Camera in radians.\r\n     *\r\n     * Camera rotation always takes place based on the Camera viewport. By default, rotation happens\r\n     * in the center of the viewport. You can adjust this with the `originX` and `originY` properties.\r\n     *\r\n     * Rotation influences the rendering of _all_ Game Objects visible by this Camera. However, it does not\r\n     * rotate the Camera viewport itself, which always remains an axis-aligned rectangle.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#rotation\r\n     * @type {number}\r\n     * @private\r\n     * @default 0\r\n     * @since 3.11.0\r\n     */\r\n    rotation: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._rotation;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._rotation = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal position of the center of the Camera's viewport, relative to the left of the game canvas.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#centerX\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    centerX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + (0.5 * this.width);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical position of the center of the Camera's viewport, relative to the top of the game canvas.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#centerY\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    centerY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + (0.5 * this.height);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The displayed width of the camera viewport, factoring in the camera zoom level.\r\n     *\r\n     * If a camera has a viewport width of 800 and a zoom of 0.5 then its display width\r\n     * would be 1600, as it's displaying twice as many pixels as zoom level 1.\r\n     *\r\n     * Equally, a camera with a width of 800 and zoom of 2 would have a display width\r\n     * of 400 pixels.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#displayWidth\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.11.0\r\n     */\r\n    displayWidth: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.width / this.zoom;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The displayed height of the camera viewport, factoring in the camera zoom level.\r\n     *\r\n     * If a camera has a viewport height of 600 and a zoom of 0.5 then its display height\r\n     * would be 1200, as it's displaying twice as many pixels as zoom level 1.\r\n     *\r\n     * Equally, a camera with a height of 600 and zoom of 2 would have a display height\r\n     * of 300 pixels.\r\n     *\r\n     * @name Phaser.Cameras.Scene2D.BaseCamera#displayHeight\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.11.0\r\n     */\r\n    displayHeight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.height / this.zoom;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BaseCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0Jhc2VDYW1lcmEuanM/YTJjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBOEI7QUFDdkQsZUFBZSxtQkFBTyxDQUFDLHVFQUFxQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELHNCQUFzQixtQkFBTyxDQUFDLHlIQUE4QztBQUM1RSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBa0M7QUFDN0QsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLFlBQVk7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFNBQVM7QUFDdkMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0NBQWdDO0FBQ2pEO0FBQ0EsZUFBZSxnQ0FBZ0M7QUFDL0M7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx3QkFBd0I7O0FBRTNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5RkFBeUY7QUFDeEc7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNEQUFzRDtBQUNyRTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1QkFBdUI7O0FBRXZEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7O0FBRTlDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0VBQW9FO0FBQ25GLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0I7O0FBRWhFOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MscUJBQXFCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0Jhc2VDYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybU1hdHJpeCcpO1xyXG52YXIgVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jb2xvci9WYWx1ZVRvQ29sb3InKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZSBDYW1lcmEgY2xhc3MuXHJcbiAqXHJcbiAqIFRoZSBDYW1lcmEgaXMgdGhlIHdheSBpbiB3aGljaCBhbGwgZ2FtZXMgYXJlIHJlbmRlcmVkIGluIFBoYXNlci4gVGhleSBwcm92aWRlIGEgdmlldyBpbnRvIHlvdXIgZ2FtZSB3b3JsZCxcclxuICogYW5kIGNhbiBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCB6b29tZWQgYW5kIHNjcm9sbGVkIGFjY29yZGluZ2x5LlxyXG4gKlxyXG4gKiBBIENhbWVyYSBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IFRoZSB2aWV3cG9ydCBhbmQgdGhlIHNjcm9sbCB2YWx1ZXMuXHJcbiAqXHJcbiAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgcGh5c2ljYWwgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB3aXRoaW4geW91ciBnYW1lLiBDYW1lcmFzLCBieSBkZWZhdWx0LCBhcmVcclxuICogY3JlYXRlZCB0aGUgc2FtZSBzaXplIGFzIHlvdXIgZ2FtZSwgYnV0IHRoZWlyIHBvc2l0aW9uIGFuZCBzaXplIGNhbiBiZSBzZXQgdG8gYW55dGhpbmcuIFRoaXMgbWVhbnMgaWYgeW91XHJcbiAqIHdhbnRlZCB0byBjcmVhdGUgYSBjYW1lcmEgdGhhdCB3YXMgMzIweDIwMCBpbiBzaXplLCBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHlvdXIgZ2FtZSxcclxuICogeW91J2QgYWRqdXN0IHRoZSB2aWV3cG9ydCB0byBkbyB0aGF0ICh1c2luZyBtZXRob2RzIGxpa2UgYHNldFZpZXdwb3J0YCBhbmQgYHNldFNpemVgKS5cclxuICpcclxuICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBpbiB5b3VyIGdhbWUsIHRoZW4geW91IHNjcm9sbCBpdC4gWW91IGNhbiBkbyB0aGlzXHJcbiAqIHZpYSB0aGUgcHJvcGVydGllcyBgc2Nyb2xsWGAgYW5kIGBzY3JvbGxZYCBvciB0aGUgbWV0aG9kIGBzZXRTY3JvbGxgLiBTY3JvbGxpbmcgaGFzIG5vIGltcGFjdCBvbiB0aGVcclxuICogdmlld3BvcnQsIGFuZCBjaGFuZ2luZyB0aGUgdmlld3BvcnQgaGFzIG5vIGltcGFjdCBvbiB0aGUgc2Nyb2xsaW5nLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIHdpbGwgcmVuZGVyIGFsbCBHYW1lIE9iamVjdHMgaXQgY2FuIHNlZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyB1c2luZyB0aGUgYGlnbm9yZWAgbWV0aG9kLFxyXG4gKiBhbGxvd2luZyB5b3UgdG8gZmlsdGVyIEdhbWUgT2JqZWN0cyBvdXQgb24gYSBwZXItQ2FtZXJhIGJhc2lzLlxyXG4gKiBcclxuICogVGhlIEJhc2UgQ2FtZXJhIGlzIGV4dGVuZGVkIGJ5IHRoZSBDYW1lcmEgY2xhc3MsIHdoaWNoIGFkZHMgaW4gc3BlY2lhbCBlZmZlY3RzIGluY2x1ZGluZyBGYWRlLFxyXG4gKiBGbGFzaCBhbmQgQ2FtZXJhIFNoYWtlLCBhcyB3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvIGZvbGxvdyBHYW1lIE9iamVjdHMuXHJcbiAqIFxyXG4gKiBUaGUgQmFzZSBDYW1lcmEgd2FzIGludHJvZHVjZWQgaW4gUGhhc2VyIDMuMTIuIEl0IHdhcyBzcGxpdCBvZmYgZnJvbSB0aGUgQ2FtZXJhIGNsYXNzLCB0byBhbGxvd1xyXG4gKiB5b3UgdG8gaXNvbGF0ZSBzcGVjaWFsIGVmZmVjdHMgYXMgbmVlZGVkLiBUaGVyZWZvcmUgdGhlICdzaW5jZScgdmFsdWVzIGZvciBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MgcmVsYXRlXHJcbiAqIHRvIHdoZW4gdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBDYW1lcmEgY2xhc3MuXHJcbiAqXHJcbiAqIEBjbGFzcyBCYXNlQ2FtZXJhXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJEXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqIFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIENhbWVyYSwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgQ2FtZXJhLCBpbiBwaXhlbHMuXHJcbiAqL1xyXG52YXIgQmFzZUNhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZUNhbWVyYSAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAwOyB9XHJcblxyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhpcyBjYW1lcmEgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgU2NlbmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY2VuZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NjYWxlTWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjYWxlTWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgQ2FtZXJhIE1hbmFnZXIgdG8gd2hpY2ggdGhpcyBDYW1lcmEgYmVsb25ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjYW1lcmFNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmFNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIElELiBBc3NpZ25lZCBieSB0aGUgQ2FtZXJhIE1hbmFnZXIgYW5kIHVzZWQgdG8gaGFuZGxlIGNhbWVyYSBleGNsdXNpb24uXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBhIGJpdG1hc2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBDYW1lcmEuIFRoaXMgaXMgbGVmdCBlbXB0eSBmb3IgeW91ciBvd24gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdW4tdXNlZCBpbiB2My4xNi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgR2FtZSwgdXNlZCBpbiBtb3N0IENhbWVyYSBjYWxjdWxhdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcmVzb2x1dGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoaXMgY2FtZXJhIHJvdW5kIGl0cyBwaXhlbCB2YWx1ZXMgdG8gaW50ZWdlcnM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcm91bmRQaXhlbHNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBDYW1lcmEgdmlzaWJsZSBvciBub3Q/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZpc2libGUgY2FtZXJhIHdpbGwgcmVuZGVyIGFuZCBwZXJmb3JtIGlucHV0IHRlc3RzLlxyXG4gICAgICAgICAqIEFuIGludmlzaWJsZSBjYW1lcmEgd2lsbCBub3QgcmVuZGVyIGFueXRoaW5nIGFuZCB3aWxsIHNraXAgaW5wdXQgdGVzdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjdmlzaWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgQ2FtZXJhIHVzaW5nIGEgYm91bmRzIHRvIHJlc3RyaWN0IHNjcm9sbGluZyBtb3ZlbWVudD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0aGlzIHByb3BlcnR5IGFsb25nIHdpdGggdGhlIGJvdW5kcyB2aWEgYENhbWVyYS5zZXRCb3VuZHNgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3VzZUJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51c2VCb3VuZHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdvcmxkIFZpZXcgaXMgYSBSZWN0YW5nbGUgdGhhdCBkZWZpbmVzIHRoZSBhcmVhIG9mIHRoZSAnd29ybGQnIHRoZSBDYW1lcmEgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXHJcbiAgICAgICAgICogVGhpcyBmYWN0b3JzIGluIHRoZSBDYW1lcmEgdmlld3BvcnQgc2l6ZSwgem9vbSBhbmQgc2Nyb2xsIHBvc2l0aW9uIGFuZCBpcyB1cGRhdGVkIGluIHRoZSBDYW1lcmEgcHJlUmVuZGVyIHN0ZXAuXHJcbiAgICAgICAgICogSWYgeW91IGhhdmUgZW5hYmxlZCBDYW1lcmEgYm91bmRzIHRoZSB3b3JsZHZpZXcgd2lsbCBiZSBjbGFtcGVkIHRvIHRob3NlIGJvdW5kcyBhY2NvcmRpbmdseS5cclxuICAgICAgICAgKiBZb3UgY2FuIHVzZSBpdCBmb3IgY3VsbGluZyBvciBpbnRlcnNlY3Rpb24gY2hlY2tzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3dvcmxkVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud29ybGRWaWV3ID0gbmV3IFJlY3RhbmdsZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIENhbWVyYSBkaXJ0eT9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIGRpcnR5IENhbWVyYSBoYXMgaGFkIGVpdGhlciBpdHMgdmlld3BvcnQgc2l6ZSwgYm91bmRzLCBzY3JvbGwsIHJvdGF0aW9uIG9yIHpvb20gbGV2ZWxzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBmbGFnIGlzIGNsZWFyZWQgZHVyaW5nIHRoZSBgcG9zdFJlbmRlckNhbWVyYWAgbWV0aG9kIG9mIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICAgICAqIFRvIGFkanVzdCB0aGUgcG9zaXRpb24gdGhlIGNhbWVyYSBpcyBsb29raW5nIGF0IGluIHRoZSBnYW1lIHdvcmxkLCBzZWUgdGhlIGBzY3JvbGxYYCB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3ggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBjYW1lcmEgcmVuZGVycy5cclxuICAgICAgICAgKiBUbyBhZGp1c3QgdGhlIHBvc2l0aW9uIHRoZSBjYW1lcmEgaXMgbG9va2luZyBhdCBpbiB0aGUgZ2FtZSB3b3JsZCwgc2VlIHRoZSBgc2Nyb2xsWWAgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl95ID0geTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFggdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2N4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFkgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2N5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFdpZHRoIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIHJlc29sdXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX2N3XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jdyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIENhbWVyYSBIZWlnaHQgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY2hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIGluIHBpeGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICAgICAqIG5vdCByZXN0cmljdCB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIGluIHBpeGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICAgICAqIG5vdCByZXN0cmljdCB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYm91bmRzIHRoZSBjYW1lcmEgaXMgcmVzdHJhaW5lZCB0byBkdXJpbmcgc2Nyb2xsaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19ib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYm91bmRzID0gbmV3IFJlY3RhbmdsZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byBjYXVzZSB0aGUgQ2FtZXJhIHRvIHNjcm9sbCBhcm91bmQgeW91ciBTY2VuZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEFsdGVybmF0aXZlbHksIHNldHRpbmcgdGhlIENhbWVyYSB0byBmb2xsb3cgYSBHYW1lIE9iamVjdCwgdmlhIHRoZSBgc3RhcnRGb2xsb3dgIG1ldGhvZCxcclxuICAgICAgICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBDYW1lcmEgc2Nyb2xsIHZhbHVlcyBhY2NvcmRpbmdseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFlvdSBjYW4gc2V0IHRoZSBib3VuZHMgd2l0aGluIHdoaWNoIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB2aWEgdGhlIGBzZXRCb3VuZHNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfc2Nyb2xsWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoaXMgQ2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2hhbmdlIHRoaXMgdmFsdWUgdG8gY2F1c2UgdGhlIENhbWVyYSB0byBzY3JvbGwgYXJvdW5kIHlvdXIgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBbHRlcm5hdGl2ZWx5LCBzZXR0aW5nIHRoZSBDYW1lcmEgdG8gZm9sbG93IGEgR2FtZSBPYmplY3QsIHZpYSB0aGUgYHN0YXJ0Rm9sbG93YCBtZXRob2QsXHJcbiAgICAgICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgQ2FtZXJhIHNjcm9sbCB2YWx1ZXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBZb3UgY2FuIHNldCB0aGUgYm91bmRzIHdpdGhpbiB3aGljaCB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdmlhIHRoZSBgc2V0Qm91bmRzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3Njcm9sbFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zY3JvbGxZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENhbWVyYSB6b29tIHZhbHVlLiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byB6b29tIGluLCBvciBvdXQgb2YsIGEgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDAuNSB3b3VsZCB6b29tIHRoZSBDYW1lcmEgb3V0LCBzbyB5b3UgY2FuIG5vdyBzZWUgdHdpY2UgYXMgbXVjaFxyXG4gICAgICAgICAqIG9mIHRoZSBTY2VuZSBhcyBiZWZvcmUuIEEgdmFsdWUgb2YgMiB3b3VsZCB6b29tIHRoZSBDYW1lcmEgaW4sIHNvIGV2ZXJ5IHBpeGVsXHJcbiAgICAgICAgICogbm93IHRha2VzIHVwIDIgcGl4ZWxzIHdoZW4gcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZXQgdG8gMSB0byByZXR1cm4gdG8gdGhlIGRlZmF1bHQgem9vbSBsZXZlbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJlIGNhcmVmdWwgdG8gbmV2ZXIgc2V0IHRoaXMgdmFsdWUgdG8gemVyby5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3pvb20gPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIENhbWVyYSBpbiByYWRpYW5zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2FtZXJhIHJvdGF0aW9uIGFsd2F5cyB0YWtlcyBwbGFjZSBiYXNlZCBvbiB0aGUgQ2FtZXJhIHZpZXdwb3J0LiBCeSBkZWZhdWx0LCByb3RhdGlvbiBoYXBwZW5zXHJcbiAgICAgICAgICogaW4gdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQuIFlvdSBjYW4gYWRqdXN0IHRoaXMgd2l0aCB0aGUgYG9yaWdpblhgIGFuZCBgb3JpZ2luWWAgcHJvcGVydGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFJvdGF0aW9uIGluZmx1ZW5jZXMgdGhlIHJlbmRlcmluZyBvZiBfYWxsXyBHYW1lIE9iamVjdHMgdmlzaWJsZSBieSB0aGlzIENhbWVyYS4gSG93ZXZlciwgaXQgZG9lcyBub3RcclxuICAgICAgICAgKiByb3RhdGUgdGhlIENhbWVyYSB2aWV3cG9ydCBpdHNlbGYsIHdoaWNoIGFsd2F5cyByZW1haW5zIGFuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3JvdGF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxvY2FsIHRyYW5zZm9ybSBtYXRyaXggdXNlZCBmb3IgaW50ZXJuYWwgY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRG9lcyB0aGlzIENhbWVyYSBoYXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN0cmFuc3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBDYW1lcmEuIE9ubHkgdXNlZCBpZiBgdHJhbnNwYXJlbnRgIGlzIGBmYWxzZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5EaXNwbGF5LkNvbG9yfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gVmFsdWVUb0NvbG9yKCdyZ2JhKDAsMCwwLDApJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgYWxwaGEgdmFsdWUuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbXBhY3RzIGV2ZXJ5IHNpbmdsZSBvYmplY3QgdGhhdCB0aGlzIENhbWVyYVxyXG4gICAgICAgICAqIHJlbmRlcnMuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGUgcHJvcGVydHkgZGlyZWN0bHksIGkuZS4gdmlhIGEgVHdlZW4sIHRvIGZhZGUgYSBDYW1lcmEgaW4gb3Igb3V0LFxyXG4gICAgICAgICAqIG9yIHZpYSB0aGUgY2hhaW5hYmxlIGBzZXRBbHBoYWAgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjYWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgY2FtZXJhIGN1bGwgR2FtZSBPYmplY3RzIGJlZm9yZSBjaGVja2luZyB0aGVtIGZvciBpbnB1dCBoaXQgdGVzdHM/XHJcbiAgICAgICAgICogSW4gc29tZSBzcGVjaWFsIGNhc2VzIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvIGRpc2FibGUgdGhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkaXNhYmxlQ3VsbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ3VsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBhcnJheSBvZiBjdWxsZWQgb2JqZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjdWxsZWRPYmplY3RzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VsbGVkT2JqZWN0cyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWlkLXBvaW50IG9mIHRoZSBDYW1lcmEgaW4gJ3dvcmxkJyBjb29yZGluYXRlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFVzZSBpdCB0byBvYnRhaW4gZXhhY3RseSB3aGVyZSBpbiB0aGUgd29ybGQgdGhlIGNlbnRlciBvZiB0aGUgY2FtZXJhIGlzIGN1cnJlbnRseSBsb29raW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyB1cGRhdGVkIGluIHRoZSBwcmVSZW5kZXIgbWV0aG9kLCBhZnRlciB0aGUgc2Nyb2xsIHZhbHVlcyBhbmQgZm9sbG93ZXJcclxuICAgICAgICAgKiBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21pZFBvaW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWlkUG9pbnQgPSBuZXcgVmVjdG9yMih3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gb2Ygcm90YXRpb24gZm9yIHRoaXMgQ2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGUgY2FtZXJhIHJvdGF0ZXMgYXJvdW5kIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2hhbmdpbmcgdGhlIG9yaWdpbiBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgcG9pbnQgaW4gdGhlIHZpZXdwb3J0IGZyb20gd2hpY2ggcm90YXRpb24gaGFwcGVucy5cclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDAgd291bGQgcm90YXRlIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSB2aWV3cG9ydC4gQSB2YWx1ZSBvZiAxIGZyb20gdGhlIGJvdHRvbSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSBgc2V0T3JpZ2luYCB0byBzZXQgYm90aCBvcmlnaW5zIGluIGEgc2luZ2xlLCBjaGFpbmFibGUgY2FsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNvcmlnaW5YXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0gMC41O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgb3JpZ2luIG9mIHJvdGF0aW9uIGZvciB0aGlzIENhbWVyYS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIENoYW5naW5nIHRoZSBvcmlnaW4gYWxsb3dzIHlvdSB0byBhZGp1c3QgdGhlIHBvaW50IGluIHRoZSB2aWV3cG9ydCBmcm9tIHdoaWNoIHJvdGF0aW9uIGhhcHBlbnMuXHJcbiAgICAgICAgICogQSB2YWx1ZSBvZiAwIHdvdWxkIHJvdGF0ZSBmcm9tIHRoZSB0b3AtbGVmdCBvZiB0aGUgdmlld3BvcnQuIEEgdmFsdWUgb2YgMSBmcm9tIHRoZSBib3R0b20gcmlnaHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgYHNldE9yaWdpbmAgdG8gc2V0IGJvdGggb3JpZ2lucyBpbiBhIHNpbmdsZSwgY2hhaW5hYmxlIGNhbGwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjb3JpZ2luWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3JpZ2luWSA9IDAuNTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRG9lcyB0aGlzIENhbWVyYSBoYXZlIGEgY3VzdG9tIHZpZXdwb3J0P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19jdXN0b21WaWV3cG9ydFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3VzdG9tVmlld3BvcnQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hc2sgdGhpcyBDYW1lcmEgaXMgdXNpbmcgZHVyaW5nIHJlbmRlci5cclxuICAgICAgICAgKiBTZXQgdGhlIG1hc2sgdXNpbmcgdGhlIGBzZXRNYXNrYCBtZXRob2QuIFJlbW92ZSB0aGUgbWFzayB1c2luZyB0aGUgYGNsZWFyTWFza2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21hc2tcclxuICAgICAgICAgKiBAdHlwZSB7PyhQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhhdCB0aGlzIENhbWVyYSB1c2VzIGZvciB0cmFuc2xhdGlvbiBkdXJpbmcgbWFza2luZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJZiB0aGUgbWFzayBpcyBmaXhlZCBpbiBwb3NpdGlvbiB0aGlzIHdpbGwgYmUgYSByZWZlcmVuY2UgdG9cclxuICAgICAgICAgKiB0aGUgQ2FtZXJhTWFuYWdlci5kZWZhdWx0IGluc3RhbmNlLiBPdGhlcndpc2UsIGl0J2xsIGJlIGEgcmVmZXJlbmNlXHJcbiAgICAgICAgICogdG8gaXRzZWxmLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19tYXNrQ2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbWFza0NhbWVyYSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIENhbWVyYS4gVGhlIGFscGhhIGNvbnRyb2xzIHRoZSBvcGFjaXR5IG9mIHRoZSBDYW1lcmEgYXMgaXQgcmVuZGVycy5cclxuICAgICAqIEFscGhhIHZhbHVlcyBhcmUgcHJvdmlkZWQgYXMgYSBmbG9hdCBiZXR3ZWVuIDAsIGZ1bGx5IHRyYW5zcGFyZW50LCBhbmQgMSwgZnVsbHkgb3BhcXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0xXSAtIFRoZSBDYW1lcmEgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJvdGF0aW9uIG9yaWdpbiBvZiB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBnaXZlbiBpbiB0aGUgcmFuZ2UgMCB0byAxIGFuZCBhcmUgb25seSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQ2FtZXJhIHJvdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgb3JpZ2luIGFsbG93cyB5b3UgdG8gYWRqdXN0IHRoZSBwb2ludCBpbiB0aGUgdmlld3BvcnQgZnJvbSB3aGljaCByb3RhdGlvbiBoYXBwZW5zLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIHdvdWxkIHJvdGF0ZSBmcm9tIHRoZSB0b3AtbGVmdCBvZiB0aGUgdmlld3BvcnQuIEEgdmFsdWUgb2YgMSBmcm9tIHRoZSBib3R0b20gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTAuNV0gLSBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgb3JpZ2luIHZhbHVlLiBJZiBub3QgZGVmaW5lZCBpdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgYHhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRPcmlnaW46IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDAuNTsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0geDtcclxuICAgICAgICB0aGlzLm9yaWdpblkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHdoYXQgdGhlIENhbWVyYS5zY3JvbGxYIGFuZCBzY3JvbGxZIHZhbHVlcyB3b3VsZCBuZWVkIHRvIGJlIGluIG9yZGVyIHRvIG1vdmVcclxuICAgICAqIHRoZSBDYW1lcmEgc28gaXQgaXMgY2VudGVyZWQgb24gdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0ZXMsIHdpdGhvdXQgYWN0dWFsbHkgbW92aW5nXHJcbiAgICAgKiB0aGUgQ2FtZXJhIHRoZXJlLiBUaGUgcmVzdWx0cyBhcmUgY2xhbXBlZCBiYXNlZCBvbiB0aGUgQ2FtZXJhIGJvdW5kcywgaWYgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2dldFNjcm9sbFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlYzIgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlYzIgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgc2Nyb2xsIGNvb3JkaW5hdGVzIHN0b3JlZCBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0U2Nyb2xsOiBmdW5jdGlvbiAoeCwgeSwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5YID0gdGhpcy53aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0ICogMC41O1xyXG5cclxuICAgICAgICBvdXQueCA9IHggLSBvcmlnaW5YO1xyXG4gICAgICAgIG91dC55ID0geSAtIG9yaWdpblk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZUJvdW5kcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG91dC54ID0gdGhpcy5jbGFtcFgob3V0LngpO1xyXG4gICAgICAgICAgICBvdXQueSA9IHRoaXMuY2xhbXBZKG91dC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBob3Jpem9udGFsbHkgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgZ2l2ZW4geCBjb29yZGluYXRlLCBib3VuZHMgYWxsb3dpbmcuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBzY3JvbGxZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlck9uWFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyT25YOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3JpZ2luWCA9IHRoaXMud2lkdGggKiAwLjU7XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQueCA9IHg7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHggLSBvcmlnaW5YO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51c2VCb3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFggPSB0aGlzLmNsYW1wWCh0aGlzLnNjcm9sbFgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSB2ZXJ0aWNhbGx5IHNvIHRoYXQgaXQgaXMgY2VudGVyZWQgb24gdGhlIGdpdmVuIHkgY29vcmRpbmF0ZSwgYm91bmRzIGFsbG93aW5nLlxyXG4gICAgICogQ2FsbGluZyB0aGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgc2Nyb2xsWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjZW50ZXJPbllcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjZW50ZXJPblk6IGZ1bmN0aW9uICh5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvcmlnaW5ZID0gdGhpcy5oZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHkgLSBvcmlnaW5ZO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51c2VCb3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSB0aGlzLmNsYW1wWSh0aGlzLnNjcm9sbFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcywgYm91bmRzIGFsbG93aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlck9uXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgdG8gY2VudGVyIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNlbnRlck9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNlbnRlck9uWCh4KTtcclxuICAgICAgICB0aGlzLmNlbnRlck9uWSh5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIGxvb2tpbmcgYXQgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIEJvdW5kcywgaWYgZW5hYmxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjZW50ZXJUb0JvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyVG9Cb3VuZHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuICAgICAgICAgICAgdmFyIG9yaWdpblggPSB0aGlzLndpZHRoICogMC41O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0ICogMC41O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoYm91bmRzLmNlbnRlclgsIGJvdW5kcy5jZW50ZXJZKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWCA9IGJvdW5kcy5jZW50ZXJYIC0gb3JpZ2luWDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gYm91bmRzLmNlbnRlclkgLSBvcmlnaW5ZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIHJlLWNlbnRlcmVkIGJhc2VkIG9uIGl0cyB2aWV3cG9ydCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlclRvU2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyVG9TaXplOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHRoaXMud2lkdGggKiAwLjU7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxZID0gdGhpcy5oZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcmV0dXJucyBhIG5ldyBhcnJheSBmZWF0dXJpbmcgb25seSB0aG9zZSBvYmplY3RzXHJcbiAgICAgKiB2aXNpYmxlIGJ5IHRoaXMgY2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2N1bGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW3JlbmRlcmFibGVPYmplY3RzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSByZW5kZXJhYmxlT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBjdWxsLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB2aXNpYmxlIHRvIHRoaXMgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBjdWxsOiBmdW5jdGlvbiAocmVuZGVyYWJsZU9iamVjdHMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUN1bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZU9iamVjdHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhTWF0cml4ID0gdGhpcy5tYXRyaXgubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbXZhID0gY2FtZXJhTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBtdmIgPSBjYW1lcmFNYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIG12YyA9IGNhbWVyYU1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbXZkID0gY2FtZXJhTWF0cml4WzNdO1xyXG5cclxuICAgICAgICAvKiBGaXJzdCBJbnZlcnQgTWF0cml4ICovXHJcbiAgICAgICAgdmFyIGRldGVybWluYW50ID0gKG12YSAqIG12ZCkgLSAobXZiICogbXZjKTtcclxuXHJcbiAgICAgICAgaWYgKCFkZXRlcm1pbmFudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlT2JqZWN0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtdmUgPSBjYW1lcmFNYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIG12ZiA9IGNhbWVyYU1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIHNjcm9sbFggPSB0aGlzLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIHNjcm9sbFkgPSB0aGlzLnNjcm9sbFk7XHJcbiAgICAgICAgdmFyIGNhbWVyYVcgPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHZhciBjYW1lcmFIID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN1bGxlZE9iamVjdHMgPSB0aGlzLmN1bGxlZE9iamVjdHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHJlbmRlcmFibGVPYmplY3RzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZGV0ZXJtaW5hbnQgPSAxIC8gZGV0ZXJtaW5hbnQ7XHJcblxyXG4gICAgICAgIGN1bGxlZE9iamVjdHMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSByZW5kZXJhYmxlT2JqZWN0c1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnd2lkdGgnKSB8fCBvYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjdWxsZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgb2JqZWN0VyA9IG9iamVjdC53aWR0aDtcclxuICAgICAgICAgICAgdmFyIG9iamVjdEggPSBvYmplY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgb2JqZWN0WCA9IChvYmplY3QueCAtIChzY3JvbGxYICogb2JqZWN0LnNjcm9sbEZhY3RvclgpKSAtIChvYmplY3RXICogb2JqZWN0Lm9yaWdpblgpO1xyXG4gICAgICAgICAgICB2YXIgb2JqZWN0WSA9IChvYmplY3QueSAtIChzY3JvbGxZICogb2JqZWN0LnNjcm9sbEZhY3RvclkpKSAtIChvYmplY3RIICogb2JqZWN0Lm9yaWdpblkpO1xyXG4gICAgICAgICAgICB2YXIgdHggPSAob2JqZWN0WCAqIG12YSArIG9iamVjdFkgKiBtdmMgKyBtdmUpO1xyXG4gICAgICAgICAgICB2YXIgdHkgPSAob2JqZWN0WCAqIG12YiArIG9iamVjdFkgKiBtdmQgKyBtdmYpO1xyXG4gICAgICAgICAgICB2YXIgdHcgPSAoKG9iamVjdFggKyBvYmplY3RXKSAqIG12YSArIChvYmplY3RZICsgb2JqZWN0SCkgKiBtdmMgKyBtdmUpO1xyXG4gICAgICAgICAgICB2YXIgdGggPSAoKG9iamVjdFggKyBvYmplY3RXKSAqIG12YiArIChvYmplY3RZICsgb2JqZWN0SCkgKiBtdmQgKyBtdmYpO1xyXG4gICAgICAgICAgICB2YXIgY3VsbFRvcCA9IHRoaXMueTtcclxuICAgICAgICAgICAgdmFyIGN1bGxCb3R0b20gPSBjdWxsVG9wICsgY2FtZXJhSDtcclxuICAgICAgICAgICAgdmFyIGN1bGxMZWZ0ID0gdGhpcy54O1xyXG4gICAgICAgICAgICB2YXIgY3VsbFJpZ2h0ID0gY3VsbExlZnQgKyBjYW1lcmFXO1xyXG5cclxuICAgICAgICAgICAgaWYgKCh0dyA+IGN1bGxMZWZ0ICYmIHR4IDwgY3VsbFJpZ2h0KSAmJiAodGggPiBjdWxsVG9wICYmIHR5IDwgY3VsbEJvdHRvbSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1bGxlZE9iamVjdHMucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VsbGVkT2JqZWN0cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgaW50byBXb3JsZCBzcGFjZSwgYmFzZWQgb24gdGhpcyBDYW1lcmFzIHRyYW5zZm9ybS5cclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgVmVjdG9yMiwgb3Igc2ltaWxhciBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2dldFdvcmxkUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gdG8gY29udmVydCB0byB3b3JsZCBzcGFjZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gdG8gY29udmVydCB0byB3b3JsZCBzcGFjZS5cclxuICAgICAqIEBwYXJhbSB7KG9iamVjdHxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gW291dHB1dF0gLSBBbiBvcHRpb25hbCBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBBbiBvYmplY3QgaG9sZGluZyB0aGUgY29udmVydGVkIHZhbHVlcyBpbiBpdHMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb2ludDogZnVuY3Rpb24gKHgsIHksIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhTWF0cml4ID0gdGhpcy5tYXRyaXgubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbXZhID0gY2FtZXJhTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBtdmIgPSBjYW1lcmFNYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIG12YyA9IGNhbWVyYU1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbXZkID0gY2FtZXJhTWF0cml4WzNdO1xyXG4gICAgICAgIHZhciBtdmUgPSBjYW1lcmFNYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIG12ZiA9IGNhbWVyYU1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgLy8gIEludmVydCBNYXRyaXhcclxuICAgICAgICB2YXIgZGV0ZXJtaW5hbnQgPSAobXZhICogbXZkKSAtIChtdmIgKiBtdmMpO1xyXG5cclxuICAgICAgICBpZiAoIWRldGVybWluYW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnggPSB4O1xyXG4gICAgICAgICAgICBvdXRwdXQueSA9IHk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGV0ZXJtaW5hbnQgPSAxIC8gZGV0ZXJtaW5hbnQ7XHJcblxyXG4gICAgICAgIHZhciBpbWEgPSBtdmQgKiBkZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgaW1iID0gLW12YiAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWMgPSAtbXZjICogZGV0ZXJtaW5hbnQ7XHJcbiAgICAgICAgdmFyIGltZCA9IG12YSAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWUgPSAobXZjICogbXZmIC0gbXZkICogbXZlKSAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWYgPSAobXZiICogbXZlIC0gbXZhICogbXZmKSAqIGRldGVybWluYW50O1xyXG5cclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4odGhpcy5yb3RhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciB6b29tID0gdGhpcy56b29tO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxYID0gdGhpcy5zY3JvbGxYO1xyXG4gICAgICAgIHZhciBzY3JvbGxZID0gdGhpcy5zY3JvbGxZO1xyXG5cclxuICAgICAgICAvLyAgV29ya3MgZm9yIHpvb20gb2YgMSB3aXRoIGFueSByZXNvbHV0aW9uLCBidXQgcmVzb2x1dGlvbiA+IDEgYW5kIHpvb20gIT09IDEgYnJlYWtzXHJcbiAgICAgICAgdmFyIHN4ID0geCArICgoc2Nyb2xsWCAqIGMgLSBzY3JvbGxZICogcykgKiB6b29tKTtcclxuICAgICAgICB2YXIgc3kgPSB5ICsgKChzY3JvbGxYICogcyArIHNjcm9sbFkgKiBjKSAqIHpvb20pO1xyXG5cclxuICAgICAgICAvLyAgQXBwbHkgdHJhbnNmb3JtIHRvIHBvaW50XHJcbiAgICAgICAgb3V0cHV0LnggPSAoc3ggKiBpbWEgKyBzeSAqIGltYykgKiByZXMgKyBpbWU7XHJcbiAgICAgICAgb3V0cHV0LnkgPSAoc3ggKiBpbWIgKyBzeSAqIGltZCkgKiByZXMgKyBpbWY7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBHYW1lIE9iamVjdCwgb3IgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBpdCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlaXIgY2FtZXJhIGZpbHRlciBzZXR0aW5nc1xyXG4gICAgICogc28gdGhhdCB0aGV5IGFyZSBpZ25vcmVkIGJ5IHRoaXMgQ2FtZXJhLiBUaGlzIG1lYW5zIHRoZXkgd2lsbCBub3QgYmUgcmVuZGVyZWQgYnkgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaWdub3JlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCl9IGVudHJpZXMgLSBUaGUgR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gYmUgaWdub3JlZCBieSB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBpZ25vcmU6IGZ1bmN0aW9uIChlbnRyaWVzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJpZXMgPSBbIGVudHJpZXMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc1BhcmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUoZW50cnkuZ2V0Q2hpbGRyZW4oKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeS5jYW1lcmFGaWx0ZXIgfD0gaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHByZVJlbmRlciBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3ByZVJlbmRlclxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc29sdXRpb24gLSBUaGUgZ2FtZSByZXNvbHV0aW9uLCBhcyBzZXQgaW4gdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAqIDAuNTtcclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb20gKiByZXNvbHV0aW9uO1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB3aWR0aCAqIHRoaXMub3JpZ2luWDtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IGhlaWdodCAqIHRoaXMub3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIHN4ID0gdGhpcy5zY3JvbGxYO1xyXG4gICAgICAgIHZhciBzeSA9IHRoaXMuc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ggPSB0aGlzLmNsYW1wWChzeCk7XHJcbiAgICAgICAgICAgIHN5ID0gdGhpcy5jbGFtcFkoc3kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcmlnaW5YID0gTWF0aC5yb3VuZChvcmlnaW5YKTtcclxuICAgICAgICAgICAgb3JpZ2luWSA9IE1hdGgucm91bmQob3JpZ2luWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVmFsdWVzIGFyZSBpbiBwaXhlbHMgYW5kIG5vdCBpbXBhY3RlZCBieSB6b29taW5nIHRoZSBDYW1lcmFcclxuICAgICAgICB0aGlzLnNjcm9sbFggPSBzeDtcclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSBzeTtcclxuXHJcbiAgICAgICAgdmFyIG1pZFggPSBzeCArIGhhbGZXaWR0aDtcclxuICAgICAgICB2YXIgbWlkWSA9IHN5ICsgaGFsZkhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBjZW50ZXIgb2YgdGhlIGNhbWVyYSwgaW4gd29ybGQgc3BhY2UsIHNvIHRha2luZyB6b29tIGludG8gYWNjb3VudFxyXG4gICAgICAgIC8vICBCYXNpY2FsbHkgdGhlIHBpeGVsIHZhbHVlIG9mIHdoYXQgaXQncyBsb29raW5nIGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGNhbVxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KG1pZFgsIG1pZFkpO1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheVdpZHRoID0gd2lkdGggLyB6b29tO1xyXG4gICAgICAgIHZhciBkaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0IC8gem9vbTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFZpZXcuc2V0VG8oXHJcbiAgICAgICAgICAgIG1pZFggLSAoZGlzcGxheVdpZHRoIC8gMiksXHJcbiAgICAgICAgICAgIG1pZFkgLSAoZGlzcGxheUhlaWdodCAvIDIpLFxyXG4gICAgICAgICAgICBkaXNwbGF5V2lkdGgsXHJcbiAgICAgICAgICAgIGRpc3BsYXlIZWlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXRyaXguYXBwbHlJVFJTKHRoaXMueCArIG9yaWdpblgsIHRoaXMueSArIG9yaWdpblksIHRoaXMucm90YXRpb24sIHpvb20sIHpvb20pO1xyXG4gICAgICAgIG1hdHJpeC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhbiB4IHZhbHVlIGFuZCBjaGVja3MgaXQncyB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBDYW1lcmEgYm91bmRzLCBhZGp1c3RpbmcgaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBpZiB5b3UgYXJlIG5vdCB1c2luZyBjYW1lcmEgYm91bmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NsYW1wWFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHZhbHVlIHRvIGhvcml6b250YWxseSBzY3JvbGwgY2xhbXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWRqdXN0ZWQgdmFsdWUgdG8gdXNlIGFzIHNjcm9sbFguXHJcbiAgICAgKi9cclxuICAgIGNsYW1wWDogZnVuY3Rpb24gKHgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuXHJcbiAgICAgICAgdmFyIGR3ID0gdGhpcy5kaXNwbGF5V2lkdGg7XHJcblxyXG4gICAgICAgIHZhciBieCA9IGJvdW5kcy54ICsgKChkdyAtIHRoaXMud2lkdGgpIC8gMik7XHJcbiAgICAgICAgdmFyIGJ3ID0gTWF0aC5tYXgoYngsIGJ4ICsgYm91bmRzLndpZHRoIC0gZHcpO1xyXG5cclxuICAgICAgICBpZiAoeCA8IGJ4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IGJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh4ID4gYncpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ID0gYnc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHkgdmFsdWUgYW5kIGNoZWNrcyBpdCdzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIENhbWVyYSBib3VuZHMsIGFkanVzdGluZyBpZiByZXF1aXJlZC5cclxuICAgICAqIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGlmIHlvdSBhcmUgbm90IHVzaW5nIGNhbWVyYSBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjY2xhbXBZXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmFsdWUgdG8gdmVydGljYWxseSBzY3JvbGwgY2xhbXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWRqdXN0ZWQgdmFsdWUgdG8gdXNlIGFzIHNjcm9sbFkuXHJcbiAgICAgKi9cclxuICAgIGNsYW1wWTogZnVuY3Rpb24gKHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuXHJcbiAgICAgICAgdmFyIGRoID0gdGhpcy5kaXNwbGF5SGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgYnkgPSBib3VuZHMueSArICgoZGggLSB0aGlzLmhlaWdodCkgLyAyKTtcclxuICAgICAgICB2YXIgYmggPSBNYXRoLm1heChieSwgYnkgKyBib3VuZHMuaGVpZ2h0IC0gZGgpO1xyXG5cclxuICAgICAgICBpZiAoeSA8IGJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeSA9IGJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh5ID4gYmgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB5ID0gYmg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH0sXHJcblxyXG4gICAgLypcclxuICAgICAgICB2YXIgZ2FwID0gdGhpcy5fem9vbUludmVyc2VkO1xyXG4gICAgICAgIHJldHVybiBnYXAgKiBNYXRoLnJvdW5kKChzcmMueCAtIHRoaXMuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYKSAvIGdhcCk7XHJcbiAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBDYW1lcmEgaGFzIHByZXZpb3VzbHkgaGFkIG1vdmVtZW50IGJvdW5kcyBzZXQgb24gaXQsIHRoaXMgd2lsbCByZW1vdmUgdGhlbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNyZW1vdmVCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUJvdW5kczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnVzZUJvdW5kcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRzLnNldEVtcHR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcm90YXRpb24gb2YgdGhpcyBDYW1lcmEuIFRoaXMgY2F1c2VzIGV2ZXJ5dGhpbmcgaXQgcmVuZGVycyB0byBhcHBlYXIgcm90YXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBSb3RhdGluZyBhIGNhbWVyYSBkb2VzIG5vdCByb3RhdGUgdGhlIHZpZXdwb3J0IGl0c2VsZiwgaXQgaXMgYXBwbGllZCBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIC0gVGhlIGNhbWVyYXMgYW5nbGUgb2Ygcm90YXRpb24sIGdpdmVuIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IERlZ1RvUmFkKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCBhIENhbWVyYSBoYXMgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGJ1dCBpdCBjYW4gYmUgZ2l2ZW4gYSBzb2xpZCBjb2xvciwgd2l0aCBhbnkgbGV2ZWxcclxuICAgICAqIG9mIHRyYW5zcGFyZW5jeSwgdmlhIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBjb2xvciB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIENTUyBjb2xvciBub3RhdGlvbiwgaGV4IG9yIG51bWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0QmFja2dyb3VuZENvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyfFBoYXNlci5UeXBlcy5EaXNwbGF5LklucHV0Q29sb3JPYmplY3QpfSBbY29sb3I9J3JnYmEoMCwwLDAsMCknXSAtIFRoZSBjb2xvciB2YWx1ZS4gSW4gQ1NTLCBoZXggb3IgbnVtZXJpYyBjb2xvciBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICBpZiAoY29sb3IgPT09IHVuZGVmaW5lZCkgeyBjb2xvciA9ICdyZ2JhKDAsMCwwLDApJzsgfVxyXG5cclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IFZhbHVlVG9Db2xvcihjb2xvcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSAodGhpcy5iYWNrZ3JvdW5kQ29sb3IuYWxwaGEgPT09IDApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGJvdW5kcyBvZiB0aGUgQ2FtZXJhLiBUaGUgYm91bmRzIGFyZSBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIGJvdW5kcyBjb250cm9scyB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8sIHN0b3BwaW5nIGl0IGZyb20gc2Nyb2xsaW5nIG9mZiB0aGVcclxuICAgICAqIGVkZ2VzIGFuZCBpbnRvIGJsYW5rIHNwYWNlLiBJdCBkb2VzIG5vdCBsaW1pdCB0aGUgcGxhY2VtZW50IG9mIEdhbWUgT2JqZWN0cywgb3Igd2hlcmVcclxuICAgICAqIHRoZSBDYW1lcmEgdmlld3BvcnQgY2FuIGJlIHBvc2l0aW9uZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIGJvdW5kcyBieSBjaGFuZ2luZyB0aGUgYm9vbGVhbiBgQ2FtZXJhLnVzZUJvdW5kc2AuXHJcbiAgICAgKiBcclxuICAgICAqIENsZWFyIHRoZSBib3VuZHMgZW50aXJlbHkgYnkgY2FsbGluZyBgQ2FtZXJhLnJlbW92ZUJvdW5kc2AuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSBzZXQgYm91bmRzIHRoYXQgYXJlIHNtYWxsZXIgdGhhbiB0aGUgdmlld3BvcnQgaXQgd2lsbCBzdG9wIHRoZSBDYW1lcmEgZnJvbSBiZWluZ1xyXG4gICAgICogYWJsZSB0byBzY3JvbGwuIFRoZSBib3VuZHMgY2FuIGJlIHBvc2l0aW9uZWQgd2hlcmUtZXZlciB5b3Ugd2lzaC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBmcm9tXHJcbiAgICAgKiAweDAgdG8gdGhlIGNhbnZhcyB3aWR0aCB4IGhlaWdodC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlIDB4MCBpcyB0aGUgdG9wIGxlZnQgb2ZcclxuICAgICAqIHRoZSBDYW1lcmEgYm91bmRzLiBIb3dldmVyLCB5b3UgY2FuIHBvc2l0aW9uIHRoZW0gYW55d2hlcmUuIFNvIGlmIHlvdSB3YW50ZWQgYSBnYW1lIHdvcmxkXHJcbiAgICAgKiB0aGF0IHdhcyAyMDQ4eDIwNDggaW4gc2l6ZSwgd2l0aCAweDAgYmVpbmcgdGhlIGNlbnRlciBvZiBpdCwgeW91IGNhbiBzZXQgdGhlIGJvdW5kcyB4L3lcclxuICAgICAqIHRvIGJlIC0xMDI0LCAtMTAyNCwgd2l0aCBhIHdpZHRoIGFuZCBoZWlnaHQgb2YgMjA0OC4gRGVwZW5kaW5nIG9uIHlvdXIgZ2FtZSB5b3UgbWF5IGZpbmRcclxuICAgICAqIGl0IGVhc2llciBmb3IgMHgwIHRvIGJlIHRoZSB0b3AtbGVmdCBvZiB0aGUgYm91bmRzLCBvciB5b3UgbWF5IHdpc2ggMHgwIHRvIGJlIHRoZSBtaWRkbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgdG9wLWxlZnQgeCBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgdG9wLWxlZnQgeSBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBib3VuZHMsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYm91bmRzLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjZW50ZXJPbj1mYWxzZV0gLSBJZiBgdHJ1ZWAgdGhlIENhbWVyYSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2VudGVyZWQgb24gdGhlIG5ldyBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VudGVyT24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNlbnRlck9uID09PSB1bmRlZmluZWQpIHsgY2VudGVyT24gPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9ib3VuZHMuc2V0VG8oeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlQm91bmRzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGNlbnRlck9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jZW50ZXJUb0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFggPSB0aGlzLmNsYW1wWCh0aGlzLnNjcm9sbFgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSB0aGlzLmNsYW1wWSh0aGlzLnNjcm9sbFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJlY3RhbmdsZSBjb250YWluaW5nIHRoZSBib3VuZHMgb2YgdGhlIENhbWVyYS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIENhbWVyYSBkb2VzIG5vdCBoYXZlIGFueSBib3VuZHMgdGhlIHJlY3RhbmdsZSB3aWxsIGJlIGVtcHR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVjdGFuZ2xlIGlzIGEgY29weSBvZiB0aGUgYm91bmRzLCBzbyBpcyBzYWZlIHRvIG1vZGlmeS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNnZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBbiBvcHRpb25hbCBSZWN0YW5nbGUgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuLCBhIG5ldyBSZWN0YW5nbGUgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gQSByZWN0YW5nbGUgY29udGFpbmluZyB0aGUgYm91bmRzIG9mIHRoaXMgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYm91bmRzO1xyXG5cclxuICAgICAgICBvdXQuc2V0VG8oc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGZvciB5b3VyIG93biB1c2UgYW5kIGlzbid0IHVzZWQgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXROYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPScnXSAtIFRoZSBuYW1lIG9mIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gJyc7IH1cclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIENhbWVyYSB2aWV3cG9ydCB3aXRoaW4gdGhlIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNhbWVyYSBpcyAnbG9va2luZycuIFNlZSBgc2V0U2Nyb2xsYCB0byBjb250cm9sIHRoYXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRvcC1sZWZ0IHggY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHRvcC1sZWZ0IHkgY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSByb3RhdGlvbiBvZiB0aGlzIENhbWVyYS4gVGhpcyBjYXVzZXMgZXZlcnl0aGluZyBpdCByZW5kZXJzIHRvIGFwcGVhciByb3RhdGVkLlxyXG4gICAgICpcclxuICAgICAqIFJvdGF0aW5nIGEgY2FtZXJhIGRvZXMgbm90IHJvdGF0ZSB0aGUgdmlld3BvcnQgaXRzZWxmLCBpdCBpcyBhcHBsaWVkIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0Um90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gLSBUaGUgcm90YXRpb24gb2YgdGhlIENhbWVyYSwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSb3RhdGlvbjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3VsZCB0aGUgQ2FtZXJhIHJvdW5kIHBpeGVsIHZhbHVlcyB0byB3aG9sZSBpbnRlZ2VycyB3aGVuIHJlbmRlcmluZyBHYW1lIE9iamVjdHM/XHJcbiAgICAgKiBcclxuICAgICAqIEluIHNvbWUgdHlwZXMgb2YgZ2FtZSwgZXNwZWNpYWxseSB3aXRoIHBpeGVsIGFydCwgdGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHN1Yi1waXhlbCBhbGlhc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRSb3VuZFBpeGVsc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIGB0cnVlYCB0byByb3VuZCBDYW1lcmEgcGl4ZWxzLCBgZmFsc2VgIHRvIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSb3VuZFBpeGVsczogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgU2NlbmUgdGhlIENhbWVyYSBpcyBib3VuZCB0by5cclxuICAgICAqIFxyXG4gICAgICogQWxzbyBwb3B1bGF0ZXMgdGhlIGByZXNvbHV0aW9uYCBwcm9wZXJ0eSBhbmQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgc2l6ZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0U2NlbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0aGUgY2FtZXJhIGlzIGJvdW5kIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjZW5lOiBmdW5jdGlvbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUgJiYgdGhpcy5fY3VzdG9tVmlld3BvcnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIHN5cyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZU1hbmFnZXIgPSBzeXMuZ2FtZS5zY2VuZTtcclxuICAgICAgICB0aGlzLnNjYWxlTWFuYWdlciA9IHN5cy5zY2FsZTtcclxuICAgICAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSBzeXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuc2NhbGVNYW5hZ2VyLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fY3ggPSB0aGlzLl94ICogcmVzO1xyXG4gICAgICAgIHRoaXMuX2N5ID0gdGhpcy5feSAqIHJlcztcclxuICAgICAgICB0aGlzLl9jdyA9IHRoaXMuX3dpZHRoICogcmVzO1xyXG4gICAgICAgIHRoaXMuX2NoID0gdGhpcy5faGVpZ2h0ICogcmVzO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVN5c3RlbSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyB3aXRoaW4gdGhlIGdhbWUuXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGBDYW1lcmEuc2Nyb2xsWGAgYW5kIGBDYW1lcmEuc2Nyb2xsWWAgZGlyZWN0bHkuXHJcbiAgICAgKiBVc2UgdGhpcyBtZXRob2QsIG9yIHRoZSBzY3JvbGwgcHJvcGVydGllcywgdG8gbW92ZSB5b3VyIGNhbWVyYSBhcm91bmQgdGhlIGdhbWUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNhbWVyYSB2aWV3cG9ydCBpcyBwbGFjZWQuIFNlZSBgc2V0UG9zaXRpb25gIHRvIGNvbnRyb2wgdGhhdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRTY3JvbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIGluIHRoZSBnYW1lIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIGluIHRoZSBnYW1lIHdvcmxkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFggPSB4O1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgc2l6ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgYSBDYW1lcmEgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZ2FtZSwgYnV0IGNhbiBiZSBtYWRlIHNtYWxsZXIgdmlhIHRoaXMgbWV0aG9kLFxyXG4gICAgICogYWxsb3dpbmcgeW91IHRvIGNyZWF0ZSBtaW5pLWNhbSBzdHlsZSBlZmZlY3RzIGJ5IGNyZWF0aW5nIGFuZCBwb3NpdGlvbmluZyBhIHNtYWxsZXIgQ2FtZXJhXHJcbiAgICAgKiB2aWV3cG9ydCB3aXRoaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCBpbiBhIHNpbmdsZSBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSdyZSB0cnlpbmcgdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBhdCBpbiB5b3VyIGdhbWUsIHRoZW4gc2VlXHJcbiAgICAgKiB0aGUgbWV0aG9kIGBDYW1lcmEuc2V0U2Nyb2xsYCBpbnN0ZWFkLiBUaGlzIG1ldGhvZCBpcyBmb3IgY2hhbmdpbmcgdGhlIHZpZXdwb3J0XHJcbiAgICAgKiBpdHNlbGYsIG5vdCB3aGF0IHRoZSBjYW1lcmEgY2FuIHNlZS5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGdhbWUsIGJ1dCBjYW4gYmUgbWFkZSBzbWFsbGVyIHZpYSB0aGlzIG1ldGhvZCxcclxuICAgICAqIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgbWluaS1jYW0gc3R5bGUgZWZmZWN0cyBieSBjcmVhdGluZyBhbmQgcG9zaXRpb25pbmcgYSBzbWFsbGVyIENhbWVyYVxyXG4gICAgICogdmlld3BvcnQgd2l0aGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRWaWV3cG9ydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgdG9wLWxlZnQgeCBjb29yZGluYXRlIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0b3AtbGVmdCB5IGNvb3JkaW5hdGUgb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgem9vbSB2YWx1ZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIENoYW5naW5nIHRvIGEgc21hbGxlciB2YWx1ZSwgc3VjaCBhcyAwLjUsIHdpbGwgY2F1c2UgdGhlIGNhbWVyYSB0byAnem9vbSBvdXQnLlxyXG4gICAgICogQ2hhbmdpbmcgdG8gYSBsYXJnZXIgdmFsdWUsIHN1Y2ggYXMgMiwgd2lsbCBjYXVzZSB0aGUgY2FtZXJhIHRvICd6b29tIGluJy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgJ25vIHpvb20nIGFuZCBpcyB0aGUgZGVmYXVsdC5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgem9vbSBkb2VzIG5vdCBpbXBhY3QgdGhlIENhbWVyYSB2aWV3cG9ydCBpbiBhbnkgd2F5LCBpdCBpcyBvbmx5IGFwcGxpZWQgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRab29tXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTFdIC0gVGhlIHpvb20gdmFsdWUgb2YgdGhlIENhbWVyYS4gVGhlIG1pbmltdW0gaXQgY2FuIGJlIGlzIDAuMDAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFpvb206IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWUgPSAwLjAwMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuem9vbSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXNrIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBDYW1lcmEgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbWFzayBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGNyZWF0ZWQgYW5kIGNhbiBiZSBlaXRoZXIgYSBHZW9tZXRyeU1hc2sgb3IgYSBCaXRtYXBNYXNrLlxyXG4gICAgICogXHJcbiAgICAgKiBCaXRtYXAgTWFza3Mgb25seSB3b3JrIG9uIFdlYkdMLiBHZW9tZXRyeSBNYXNrcyB3b3JrIG9uIGJvdGggV2ViR0wgYW5kIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIG1hc2sgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBDYW1lcmEgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSByZXBsYWNlZC5cclxuICAgICAqIFxyXG4gICAgICogTWFza3MgaGF2ZSBubyBpbXBhY3Qgb24gcGh5c2ljcyBvciBpbnB1dCBkZXRlY3Rpb24uIFRoZXkgYXJlIHB1cmVseSBhIHJlbmRlcmluZyBjb21wb25lbnRcclxuICAgICAqIHRoYXQgYWxsb3dzIHlvdSB0byBsaW1pdCB3aGF0IGlzIHZpc2libGUgZHVyaW5nIHRoZSByZW5kZXIgcGFzcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZTogWW91IGNhbm5vdCBtYXNrIGEgQ2FtZXJhIHRoYXQgaGFzIGByZW5kZXJUb1RleHR1cmVgIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRNYXNrXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFza3xQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2spfSBtYXNrIC0gVGhlIG1hc2sgdGhpcyBDYW1lcmEgd2lsbCB1c2Ugd2hlbiByZW5kZXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaXhlZFBvc2l0aW9uPXRydWVdIC0gU2hvdWxkIHRoZSBtYXNrIHRyYW5zbGF0ZSBhbG9uZyB3aXRoIHRoZSBDYW1lcmEsIG9yIGJlIGZpeGVkIGluIHBsYWNlIGFuZCBub3QgaW1wYWN0ZWQgYnkgdGhlIENhbWVyYXMgdHJhbnNmb3JtP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNYXNrOiBmdW5jdGlvbiAobWFzaywgZml4ZWRQb3NpdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoZml4ZWRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGZpeGVkUG9zaXRpb24gPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XHJcblxyXG4gICAgICAgIHRoaXMuX21hc2tDYW1lcmEgPSAoZml4ZWRQb3NpdGlvbikgPyB0aGlzLmNhbWVyYU1hbmFnZXIuZGVmYXVsdCA6IHRoaXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgbWFzayB0aGF0IHRoaXMgQ2FtZXJhIHdhcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjbGVhck1hc2tcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZXN0cm95TWFzaz1mYWxzZV0gLSBEZXN0cm95IHRoZSBtYXNrIGJlZm9yZSBjbGVhcmluZyBpdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2xlYXJNYXNrOiBmdW5jdGlvbiAoZGVzdHJveU1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lNYXNrID09PSB1bmRlZmluZWQpIHsgZGVzdHJveU1hc2sgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZGVzdHJveU1hc2sgJiYgdGhpcy5tYXNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXNrLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQW4gaW52aXNpYmxlIENhbWVyYSB3aWxsIHNraXAgcmVuZGVyaW5nIGFuZCBpbnB1dCB0ZXN0cyBvZiBldmVyeXRoaW5nIGl0IGNhbiBzZWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0VmlzaWJsZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIE9iamVjdCBzdWl0YWJsZSBmb3IgSlNPTiBzdG9yYWdlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQgYW5kIHJlbmRlcmluZyBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5KU09OQ2FtZXJhfSBBIHdlbGwtZm9ybWVkIG9iamVjdCBzdWl0YWJsZSBmb3IgY29udmVyc2lvbiB0byBKU09OLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICB4OiB0aGlzLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMueSxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgIHpvb206IHRoaXMuem9vbSxcclxuICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb24sXHJcbiAgICAgICAgICAgIHJvdW5kUGl4ZWxzOiB0aGlzLnJvdW5kUGl4ZWxzLFxyXG4gICAgICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXHJcbiAgICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvci5yZ2JhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0Wydib3VuZHMnXSA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuX2JvdW5kcy54LFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5fYm91bmRzLnksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fYm91bmRzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9ib3VuZHMuaGVpZ2h0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjdXBkYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5PT1BcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN1cGRhdGVTeXN0ZW1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVN5c3RlbTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2NhbGVNYW5hZ2VyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbSA9ICh0aGlzLl94ICE9PSAwIHx8IHRoaXMuX3kgIT09IDAgfHwgdGhpcy5zY2FsZU1hbmFnZXIud2lkdGggIT09IHRoaXMuX3dpZHRoIHx8IHRoaXMuc2NhbGVNYW5hZ2VyLmhlaWdodCAhPT0gdGhpcy5faGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWFuYWdlciA9IHRoaXMuc2NlbmVNYW5hZ2VyO1xyXG5cclxuICAgICAgICBpZiAoY3VzdG9tICYmICF0aGlzLl9jdXN0b21WaWV3cG9ydClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSBuZWVkIGEgY3VzdG9tIHZpZXdwb3J0IGZvciB0aGlzIENhbWVyYVxyXG4gICAgICAgICAgICBzY2VuZU1hbmFnZXIuY3VzdG9tVmlld3BvcnRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFjdXN0b20gJiYgdGhpcy5fY3VzdG9tVmlld3BvcnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgdHVybmluZyBvZmYgYSBjdXN0b20gdmlld3BvcnQgZm9yIHRoaXMgQ2FtZXJhXHJcbiAgICAgICAgICAgIHNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbVZpZXdwb3J0ID0gY3VzdG9tO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgQ2FtZXJhIGluc3RhbmNlIGFuZCBpdHMgaW50ZXJuYWwgcHJvcGVydGllcyBhbmQgcmVmZXJlbmNlcy5cclxuICAgICAqIE9uY2UgZGVzdHJveWVkIHlvdSBjYW5ub3QgdXNlIHRoaXMgQ2FtZXJhIGFnYWluLCBldmVuIGlmIHJlLWFkZGVkIHRvIGEgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGBDYW1lcmFNYW5hZ2VyLnJlbW92ZWAgaWYgdGhhdCBtZXRob2RzIGBydW5EZXN0cm95YCBhcmd1bWVudCBpcyBgdHJ1ZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxyXG4gICAgICogXHJcbiAgICAgKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gb3RoZXJ3aXNlLCBhbHdheXMgdXNlIGBDYW1lcmFNYW5hZ2VyLnJlbW92ZWAgYW5kIGFsbG93IGl0IHRvIGhhbmRsZSB0aGUgY2FtZXJhIGRlc3RydWN0aW9uLFxyXG4gICAgICogcmF0aGVyIHRoYW4gY2FsbGluZyB0aGlzIG1ldGhvZCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ERVNUUk9ZLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXRyaXguZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmN1bGxlZE9iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbVZpZXdwb3J0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlJ3JlIHR1cm5pbmcgb2ZmIGEgY3VzdG9tIHZpZXdwb3J0IGZvciB0aGlzIENhbWVyYVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NhbGVNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFNYW5hZ2VyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICogVG8gYWRqdXN0IHRoZSBwb3NpdGlvbiB0aGUgY2FtZXJhIGlzIGxvb2tpbmcgYXQgaW4gdGhlIGdhbWUgd29ybGQsIHNlZSB0aGUgYHNjcm9sbFhgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl94ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N4ID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICogVG8gYWRqdXN0IHRoZSBwb3NpdGlvbiB0aGUgY2FtZXJhIGlzIGxvb2tpbmcgYXQgaW4gdGhlIGdhbWUgd29ybGQsIHNlZSB0aGUgYHNjcm9sbFlgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N5ID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydCwgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICogbm90IHJlc3RyaWN0IHdoZXJlIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjd2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fY3cgPSB2YWx1ZSAqIHRoaXMucmVzb2x1dGlvbjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTeXN0ZW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCwgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICogbm90IHJlc3RyaWN0IHdoZXJlIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaGVpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQ2hhbmdlIHRoaXMgdmFsdWUgdG8gY2F1c2UgdGhlIENhbWVyYSB0byBzY3JvbGwgYXJvdW5kIHlvdXIgU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQWx0ZXJuYXRpdmVseSwgc2V0dGluZyB0aGUgQ2FtZXJhIHRvIGZvbGxvdyBhIEdhbWUgT2JqZWN0LCB2aWEgdGhlIGBzdGFydEZvbGxvd2AgbWV0aG9kLFxyXG4gICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgQ2FtZXJhIHNjcm9sbCB2YWx1ZXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGJvdW5kcyB3aXRoaW4gd2hpY2ggdGhlIENhbWVyYSBjYW4gc2Nyb2xsIHZpYSB0aGUgYHNldEJvdW5kc2AgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY3JvbGxYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxYID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byBjYXVzZSB0aGUgQ2FtZXJhIHRvIHNjcm9sbCBhcm91bmQgeW91ciBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBBbHRlcm5hdGl2ZWx5LCBzZXR0aW5nIHRoZSBDYW1lcmEgdG8gZm9sbG93IGEgR2FtZSBPYmplY3QsIHZpYSB0aGUgYHN0YXJ0Rm9sbG93YCBtZXRob2QsXHJcbiAgICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBDYW1lcmEgc2Nyb2xsIHZhbHVlcyBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYm91bmRzIHdpdGhpbiB3aGljaCB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdmlhIHRoZSBgc2V0Qm91bmRzYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3Njcm9sbFlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2Nyb2xsWToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsWTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHpvb20gdmFsdWUuIENoYW5nZSB0aGlzIHZhbHVlIHRvIHpvb20gaW4sIG9yIG91dCBvZiwgYSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAuNSB3b3VsZCB6b29tIHRoZSBDYW1lcmEgb3V0LCBzbyB5b3UgY2FuIG5vdyBzZWUgdHdpY2UgYXMgbXVjaFxyXG4gICAgICogb2YgdGhlIFNjZW5lIGFzIGJlZm9yZS4gQSB2YWx1ZSBvZiAyIHdvdWxkIHpvb20gdGhlIENhbWVyYSBpbiwgc28gZXZlcnkgcGl4ZWxcclxuICAgICAqIG5vdyB0YWtlcyB1cCAyIHBpeGVscyB3aGVuIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIFNldCB0byAxIHRvIHJldHVybiB0byB0aGUgZGVmYXVsdCB6b29tIGxldmVsLlxyXG4gICAgICpcclxuICAgICAqIEJlIGNhcmVmdWwgdG8gbmV2ZXIgc2V0IHRoaXMgdmFsdWUgdG8gemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjem9vbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB6b29tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b29tO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fem9vbSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgQ2FtZXJhIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQ2FtZXJhIHJvdGF0aW9uIGFsd2F5cyB0YWtlcyBwbGFjZSBiYXNlZCBvbiB0aGUgQ2FtZXJhIHZpZXdwb3J0LiBCeSBkZWZhdWx0LCByb3RhdGlvbiBoYXBwZW5zXHJcbiAgICAgKiBpbiB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC4gWW91IGNhbiBhZGp1c3QgdGhpcyB3aXRoIHRoZSBgb3JpZ2luWGAgYW5kIGBvcmlnaW5ZYCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIFJvdGF0aW9uIGluZmx1ZW5jZXMgdGhlIHJlbmRlcmluZyBvZiBfYWxsXyBHYW1lIE9iamVjdHMgdmlzaWJsZSBieSB0aGlzIENhbWVyYS4gSG93ZXZlciwgaXQgZG9lcyBub3RcclxuICAgICAqIHJvdGF0ZSB0aGUgQ2FtZXJhIHZpZXdwb3J0IGl0c2VsZiwgd2hpY2ggYWx3YXlzIHJlbWFpbnMgYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICByb3RhdGlvbjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSdzIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgbGVmdCBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlclhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgY2VudGVyWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgKDAuNSAqIHRoaXMud2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSdzIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjY2VudGVyWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBjZW50ZXJZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyAoMC41ICogdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGUgY2FtZXJhIHZpZXdwb3J0LCBmYWN0b3JpbmcgaW4gdGhlIGNhbWVyYSB6b29tIGxldmVsLlxyXG4gICAgICpcclxuICAgICAqIElmIGEgY2FtZXJhIGhhcyBhIHZpZXdwb3J0IHdpZHRoIG9mIDgwMCBhbmQgYSB6b29tIG9mIDAuNSB0aGVuIGl0cyBkaXNwbGF5IHdpZHRoXHJcbiAgICAgKiB3b3VsZCBiZSAxNjAwLCBhcyBpdCdzIGRpc3BsYXlpbmcgdHdpY2UgYXMgbWFueSBwaXhlbHMgYXMgem9vbSBsZXZlbCAxLlxyXG4gICAgICpcclxuICAgICAqIEVxdWFsbHksIGEgY2FtZXJhIHdpdGggYSB3aWR0aCBvZiA4MDAgYW5kIHpvb20gb2YgMiB3b3VsZCBoYXZlIGEgZGlzcGxheSB3aWR0aFxyXG4gICAgICogb2YgNDAwIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjZGlzcGxheVdpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlXaWR0aDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aCAvIHRoaXMuem9vbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoZSBjYW1lcmEgdmlld3BvcnQsIGZhY3RvcmluZyBpbiB0aGUgY2FtZXJhIHpvb20gbGV2ZWwuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBjYW1lcmEgaGFzIGEgdmlld3BvcnQgaGVpZ2h0IG9mIDYwMCBhbmQgYSB6b29tIG9mIDAuNSB0aGVuIGl0cyBkaXNwbGF5IGhlaWdodFxyXG4gICAgICogd291bGQgYmUgMTIwMCwgYXMgaXQncyBkaXNwbGF5aW5nIHR3aWNlIGFzIG1hbnkgcGl4ZWxzIGFzIHpvb20gbGV2ZWwgMS5cclxuICAgICAqXHJcbiAgICAgKiBFcXVhbGx5LCBhIGNhbWVyYSB3aXRoIGEgaGVpZ2h0IG9mIDYwMCBhbmQgem9vbSBvZiAyIHdvdWxkIGhhdmUgYSBkaXNwbGF5IGhlaWdodFxyXG4gICAgICogb2YgMzAwIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodCAvIHRoaXMuem9vbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VDYW1lcmE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/BaseCamera.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/Camera.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/Camera.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCamera = __webpack_require__(/*! ./BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar CenterOn = __webpack_require__(/*! ../../geom/rectangle/CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Effects = __webpack_require__(/*! ./effects */ \"./node_modules/phaser/src/cameras/2d/effects/index.js\");\r\nvar Linear = __webpack_require__(/*! ../../math/Linear */ \"./node_modules/phaser/src/math/Linear.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera.\r\n *\r\n * The Camera is the way in which all games are rendered in Phaser. They provide a view into your game world,\r\n * and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis.\r\n *\r\n * A Camera also has built-in special effects including Fade, Flash and Camera Shake.\r\n *\r\n * @class Camera\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Cameras.Scene2D.BaseCamera\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.Tint\r\n *\r\n * @param {number} x - The x position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} y - The y position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} width - The width of the Camera, in pixels.\r\n * @param {number} height - The height of the Camera, in pixels.\r\n */\r\nvar Camera = new Class({\r\n\r\n    Extends: BaseCamera,\r\n\r\n    Mixins: [\r\n        Components.Flip,\r\n        Components.Tint\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Camera (x, y, width, height)\r\n    {\r\n        BaseCamera.call(this, x, y, width, height);\r\n\r\n        /**\r\n         * Does this Camera allow the Game Objects it renders to receive input events?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#inputEnabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.inputEnabled = true;\r\n\r\n        /**\r\n         * The Camera Fade effect handler.\r\n         * To fade this camera see the `Camera.fade` methods.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#fadeEffect\r\n         * @type {Phaser.Cameras.Scene2D.Effects.Fade}\r\n         * @since 3.5.0\r\n         */\r\n        this.fadeEffect = new Effects.Fade(this);\r\n\r\n        /**\r\n         * The Camera Flash effect handler.\r\n         * To flash this camera see the `Camera.flash` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#flashEffect\r\n         * @type {Phaser.Cameras.Scene2D.Effects.Flash}\r\n         * @since 3.5.0\r\n         */\r\n        this.flashEffect = new Effects.Flash(this);\r\n\r\n        /**\r\n         * The Camera Shake effect handler.\r\n         * To shake this camera see the `Camera.shake` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#shakeEffect\r\n         * @type {Phaser.Cameras.Scene2D.Effects.Shake}\r\n         * @since 3.5.0\r\n         */\r\n        this.shakeEffect = new Effects.Shake(this);\r\n\r\n        /**\r\n         * The Camera Pan effect handler.\r\n         * To pan this camera see the `Camera.pan` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#panEffect\r\n         * @type {Phaser.Cameras.Scene2D.Effects.Pan}\r\n         * @since 3.11.0\r\n         */\r\n        this.panEffect = new Effects.Pan(this);\r\n\r\n        /**\r\n         * The Camera Zoom effect handler.\r\n         * To zoom this camera see the `Camera.zoom` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#zoomEffect\r\n         * @type {Phaser.Cameras.Scene2D.Effects.Zoom}\r\n         * @since 3.11.0\r\n         */\r\n        this.zoomEffect = new Effects.Zoom(this);\r\n\r\n        /**\r\n         * The linear interpolation value to use when following a target.\r\n         *\r\n         * Can also be set via `setLerp` or as part of the `startFollow` call.\r\n         *\r\n         * The default values of 1 means the camera will instantly snap to the target coordinates.\r\n         * A lower value, such as 0.1 means the camera will more slowly track the target, giving\r\n         * a smooth transition. You can set the horizontal and vertical values independently, and also\r\n         * adjust this value in real-time during your game.\r\n         *\r\n         * Be sure to keep the value between 0 and 1. A value of zero will disable tracking on that axis.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#lerp\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.9.0\r\n         */\r\n        this.lerp = new Vector2(1, 1);\r\n\r\n        /**\r\n         * The values stored in this property are subtracted from the Camera targets position, allowing you to\r\n         * offset the camera from the actual target x/y coordinates by this amount.\r\n         * Can also be set via `setFollowOffset` or as part of the `startFollow` call.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#followOffset\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.9.0\r\n         */\r\n        this.followOffset = new Vector2();\r\n\r\n        /**\r\n         * The Camera dead zone.\r\n         *\r\n         * The deadzone is only used when the camera is following a target.\r\n         *\r\n         * It defines a rectangular region within which if the target is present, the camera will not scroll.\r\n         * If the target moves outside of this area, the camera will begin scrolling in order to follow it.\r\n         *\r\n         * The `lerp` values that you can set for a follower target also apply when using a deadzone.\r\n         *\r\n         * You can directly set this property to be an instance of a Rectangle. Or, you can use the\r\n         * `setDeadzone` method for a chainable approach.\r\n         *\r\n         * The rectangle you provide can have its dimensions adjusted dynamically, however, please\r\n         * note that its position is updated every frame, as it is constantly re-centered on the cameras mid point.\r\n         *\r\n         * Calling `setDeadzone` with no arguments will reset an active deadzone, as will setting this property\r\n         * to `null`.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#deadzone\r\n         * @type {?Phaser.Geom.Rectangle}\r\n         * @since 3.11.0\r\n         */\r\n        this.deadzone = null;\r\n\r\n        /**\r\n         * Internal follow target reference.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#_follow\r\n         * @type {?any}\r\n         * @private\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this._follow = null;\r\n\r\n        /**\r\n         * Is this Camera rendering directly to the canvas or to a texture?\r\n         *\r\n         * Enable rendering to texture with the method `setRenderToTexture` (just enabling this boolean won't be enough)\r\n         *\r\n         * Once enabled you can toggle it by switching this property.\r\n         *\r\n         * To properly remove a render texture you should call the `clearRenderToTexture()` method.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#renderToTexture\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.13.0\r\n         */\r\n        this.renderToTexture = false;\r\n\r\n        /**\r\n         * If this Camera has been set to render to a texture then this holds a reference\r\n         * to the HTML Canvas Element that the Camera is drawing to.\r\n         *\r\n         * Enable texture rendering using the method `setRenderToTexture`.\r\n         *\r\n         * This is only populated if Phaser is running with the Canvas Renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.13.0\r\n         */\r\n        this.canvas = null;\r\n\r\n        /**\r\n         * If this Camera has been set to render to a texture then this holds a reference\r\n         * to the Rendering Context belonging to the Canvas element the Camera is drawing to.\r\n         *\r\n         * Enable texture rendering using the method `setRenderToTexture`.\r\n         *\r\n         * This is only populated if Phaser is running with the Canvas Renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#context\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.13.0\r\n         */\r\n        this.context = null;\r\n\r\n        /**\r\n         * If this Camera has been set to render to a texture then this holds a reference\r\n         * to the GL Texture belonging the Camera is drawing to.\r\n         *\r\n         * Enable texture rendering using the method `setRenderToTexture`.\r\n         *\r\n         * This is only set if Phaser is running with the WebGL Renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#glTexture\r\n         * @type {?WebGLTexture}\r\n         * @since 3.13.0\r\n         */\r\n        this.glTexture = null;\r\n\r\n        /**\r\n         * If this Camera has been set to render to a texture then this holds a reference\r\n         * to the GL Frame Buffer belonging the Camera is drawing to.\r\n         *\r\n         * Enable texture rendering using the method `setRenderToTexture`.\r\n         *\r\n         * This is only set if Phaser is running with the WebGL Renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#framebuffer\r\n         * @type {?WebGLFramebuffer}\r\n         * @since 3.13.0\r\n         */\r\n        this.framebuffer = null;\r\n\r\n        /**\r\n         * If this Camera has been set to render to a texture and to use a custom pipeline,\r\n         * then this holds a reference to the pipeline the Camera is drawing with.\r\n         *\r\n         * Enable texture rendering using the method `setRenderToTexture`.\r\n         *\r\n         * This is only set if Phaser is running with the WebGL Renderer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Camera#pipeline\r\n         * @type {any}\r\n         * @since 3.13.0\r\n         */\r\n        this.pipeline = null;\r\n    },\r\n\r\n    /**\r\n     * Sets the Camera to render to a texture instead of to the main canvas.\r\n     *\r\n     * The Camera will redirect all Game Objects it's asked to render to this texture.\r\n     *\r\n     * During the render sequence, the texture itself will then be rendered to the main canvas.\r\n     *\r\n     * Doing this gives you the ability to modify the texture before this happens,\r\n     * allowing for special effects such as Camera specific shaders, or post-processing\r\n     * on the texture.\r\n     *\r\n     * If running under Canvas the Camera will render to its `canvas` property.\r\n     *\r\n     * If running under WebGL the Camera will create a frame buffer, which is stored in its `framebuffer` and `glTexture` properties.\r\n     *\r\n     * If you set a camera to render to a texture then it will emit 2 events during the render loop:\r\n     *\r\n     * First, it will emit the event `prerender`. This happens right before any Game Object's are drawn to the Camera texture.\r\n     *\r\n     * Then, it will emit the event `postrender`. This happens after all Game Object's have been drawn, but right before the\r\n     * Camera texture is rendered to the main game canvas. It's the final point at which you can manipulate the texture before\r\n     * it appears in-game.\r\n     *\r\n     * You should not enable this unless you plan on actually using the texture it creates\r\n     * somehow, otherwise you're just doubling the work required to render your game.\r\n     *\r\n     * To temporarily disable rendering to a texture, toggle the `renderToTexture` boolean.\r\n     *\r\n     * If you no longer require the Camera to render to a texture, call the `clearRenderToTexture` method,\r\n     * which will delete the respective textures and free-up resources.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#setRenderToTexture\r\n     * @since 3.13.0\r\n     *\r\n     * @param {(string|Phaser.Renderer.WebGL.WebGLPipeline)} [pipeline] - An optional WebGL Pipeline to render with, can be either a string which is the name of the pipeline, or a pipeline reference.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    setRenderToTexture: function (pipeline)\r\n    {\r\n        var renderer = this.scene.sys.game.renderer;\r\n\r\n        if (renderer.gl)\r\n        {\r\n            this.glTexture = renderer.createTextureFromSource(null, this.width, this.height, 0);\r\n            this.framebuffer = renderer.createFramebuffer(this.width, this.height, this.glTexture, false);\r\n        }\r\n        else\r\n        {\r\n            this.canvas = CanvasPool.create2D(this, this.width, this.height);\r\n            this.context = this.canvas.getContext('2d');\r\n        }\r\n\r\n        this.renderToTexture = true;\r\n\r\n        if (pipeline)\r\n        {\r\n            this.setPipeline(pipeline);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the WebGL pipeline this Camera is using when rendering to a texture.\r\n     *\r\n     * You can pass either the string-based name of the pipeline, or a reference to the pipeline itself.\r\n     *\r\n     * Call this method with no arguments to clear any previously set pipeline.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#setPipeline\r\n     * @since 3.13.0\r\n     *\r\n     * @param {(string|Phaser.Renderer.WebGL.WebGLPipeline)} [pipeline] - The WebGL Pipeline to render with, can be either a string which is the name of the pipeline, or a pipeline reference. Or if left empty it will clear the pipeline.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    setPipeline: function (pipeline)\r\n    {\r\n        if (typeof pipeline === 'string')\r\n        {\r\n            var renderer = this.scene.sys.game.renderer;\r\n\r\n            if (renderer.gl && renderer.hasPipeline(pipeline))\r\n            {\r\n                this.pipeline = renderer.getPipeline(pipeline);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.pipeline = pipeline;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If this Camera was set to render to a texture, this will clear the resources it was using and\r\n     * redirect it to render back to the primary Canvas again.\r\n     *\r\n     * If you only wish to temporarily disable rendering to a texture then you can toggle the\r\n     * property `renderToTexture` instead.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#clearRenderToTexture\r\n     * @since 3.13.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    clearRenderToTexture: function ()\r\n    {\r\n        if (!this.scene)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var renderer = this.scene.sys.game.renderer;\r\n\r\n        if (!renderer)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (renderer.gl)\r\n        {\r\n            if (this.framebuffer)\r\n            {\r\n                renderer.deleteFramebuffer(this.framebuffer);\r\n            }\r\n\r\n            if (this.glTexture)\r\n            {\r\n                renderer.deleteTexture(this.glTexture);\r\n            }\r\n\r\n            this.framebuffer = null;\r\n            this.glTexture = null;\r\n            this.pipeline = null;\r\n        }\r\n        else\r\n        {\r\n            CanvasPool.remove(this);\r\n\r\n            this.canvas = null;\r\n            this.context = null;\r\n        }\r\n\r\n        this.renderToTexture = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Camera dead zone.\r\n     *\r\n     * The deadzone is only used when the camera is following a target.\r\n     *\r\n     * It defines a rectangular region within which if the target is present, the camera will not scroll.\r\n     * If the target moves outside of this area, the camera will begin scrolling in order to follow it.\r\n     *\r\n     * The deadzone rectangle is re-positioned every frame so that it is centered on the mid-point\r\n     * of the camera. This allows you to use the object for additional game related checks, such as\r\n     * testing if an object is within it or not via a Rectangle.contains call.\r\n     *\r\n     * The `lerp` values that you can set for a follower target also apply when using a deadzone.\r\n     *\r\n     * Calling this method with no arguments will reset an active deadzone.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#setDeadzone\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} [width] - The width of the deadzone rectangle in pixels. If not specified the deadzone is removed.\r\n     * @param {number} [height] - The height of the deadzone rectangle in pixels.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    setDeadzone: function (width, height)\r\n    {\r\n        if (width === undefined)\r\n        {\r\n            this.deadzone = null;\r\n        }\r\n        else\r\n        {\r\n            if (this.deadzone)\r\n            {\r\n                this.deadzone.width = width;\r\n                this.deadzone.height = height;\r\n            }\r\n            else\r\n            {\r\n                this.deadzone = new Rectangle(0, 0, width, height);\r\n            }\r\n\r\n            if (this._follow)\r\n            {\r\n                var originX = this.width / 2;\r\n                var originY = this.height / 2;\r\n\r\n                var fx = this._follow.x - this.followOffset.x;\r\n                var fy = this._follow.y - this.followOffset.y;\r\n\r\n                this.midPoint.set(fx, fy);\r\n\r\n                this.scrollX = fx - originX;\r\n                this.scrollY = fy - originY;\r\n            }\r\n\r\n            CenterOn(this.deadzone, this.midPoint.x, this.midPoint.y);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fades the Camera in from the given color over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#fadeIn\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    fadeIn: function (duration, red, green, blue, callback, context)\r\n    {\r\n        return this.fadeEffect.start(false, duration, red, green, blue, true, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Fades the Camera out to the given color over the duration specified.\r\n     * This is an alias for Camera.fade that forces the fade to start, regardless of existing fades.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#fadeOut\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    fadeOut: function (duration, red, green, blue, callback, context)\r\n    {\r\n        return this.fadeEffect.start(true, duration, red, green, blue, true, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Fades the Camera from the given color to transparent over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#fadeFrom\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    fadeFrom: function (duration, red, green, blue, force, callback, context)\r\n    {\r\n        return this.fadeEffect.start(false, duration, red, green, blue, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Fades the Camera from transparent to the given color over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#fade\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    fade: function (duration, red, green, blue, force, callback, context)\r\n    {\r\n        return this.fadeEffect.start(true, duration, red, green, blue, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Flashes the Camera by setting it to the given color immediately and then fading it away again quickly over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#flash\r\n     * @fires Phaser.Cameras.Scene2D.Events#FLASH_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [duration=250] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=255] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=255] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=255] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    flash: function (duration, red, green, blue, force, callback, context)\r\n    {\r\n        return this.flashEffect.start(duration, red, green, blue, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Shakes the Camera by the given intensity over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#shake\r\n     * @fires Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [duration=100] - The duration of the effect in milliseconds.\r\n     * @param {(number|Phaser.Math.Vector2)} [intensity=0.05] - The intensity of the shake.\r\n     * @param {boolean} [force=false] - Force the shake effect to start immediately, even if already running.\r\n     * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    shake: function (duration, intensity, force, callback, context)\r\n    {\r\n        return this.shakeEffect.start(duration, intensity, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n     * over the duration and with the ease specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#pan\r\n     * @fires Phaser.Cameras.Scene2D.Events#PAN_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The destination x coordinate to scroll the center of the Camera viewport to.\r\n     * @param {number} y - The destination y coordinate to scroll the center of the Camera viewport to.\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n     * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n     * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    pan: function (x, y, duration, ease, force, callback, context)\r\n    {\r\n        return this.panEffect.start(x, y, duration, ease, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#zoomTo\r\n     * @fires Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} zoom - The target Camera zoom value.\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n     * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n     * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    zoomTo: function (zoom, duration, ease, force, callback, context)\r\n    {\r\n        return this.zoomEffect.start(zoom, duration, ease, force, callback, context);\r\n    },\r\n\r\n    /**\r\n     * Internal preRender step.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#preRender\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} resolution - The game resolution, as set in the Scale Manager.\r\n     */\r\n    preRender: function (resolution)\r\n    {\r\n        var width = this.width;\r\n        var height = this.height;\r\n\r\n        var halfWidth = width * 0.5;\r\n        var halfHeight = height * 0.5;\r\n\r\n        var zoom = this.zoom * resolution;\r\n        var matrix = this.matrix;\r\n\r\n        var originX = width * this.originX;\r\n        var originY = height * this.originY;\r\n\r\n        var follow = this._follow;\r\n        var deadzone = this.deadzone;\r\n\r\n        var sx = this.scrollX;\r\n        var sy = this.scrollY;\r\n\r\n        if (deadzone)\r\n        {\r\n            CenterOn(deadzone, this.midPoint.x, this.midPoint.y);\r\n        }\r\n\r\n        if (follow && !this.panEffect.isRunning)\r\n        {\r\n            var fx = (follow.x - this.followOffset.x);\r\n            var fy = (follow.y - this.followOffset.y);\r\n\r\n            if (deadzone)\r\n            {\r\n                if (fx < deadzone.x)\r\n                {\r\n                    sx = Linear(sx, sx - (deadzone.x - fx), this.lerp.x);\r\n                }\r\n                else if (fx > deadzone.right)\r\n                {\r\n                    sx = Linear(sx, sx + (fx - deadzone.right), this.lerp.x);\r\n                }\r\n\r\n                if (fy < deadzone.y)\r\n                {\r\n                    sy = Linear(sy, sy - (deadzone.y - fy), this.lerp.y);\r\n                }\r\n                else if (fy > deadzone.bottom)\r\n                {\r\n                    sy = Linear(sy, sy + (fy - deadzone.bottom), this.lerp.y);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                sx = Linear(sx, fx - originX, this.lerp.x);\r\n                sy = Linear(sy, fy - originY, this.lerp.y);\r\n            }\r\n        }\r\n\r\n        if (this.useBounds)\r\n        {\r\n            sx = this.clampX(sx);\r\n            sy = this.clampY(sy);\r\n        }\r\n\r\n        if (this.roundPixels)\r\n        {\r\n            originX = Math.round(originX);\r\n            originY = Math.round(originY);\r\n        }\r\n\r\n        //  Values are in pixels and not impacted by zooming the Camera\r\n        this.scrollX = sx;\r\n        this.scrollY = sy;\r\n\r\n        var midX = sx + halfWidth;\r\n        var midY = sy + halfHeight;\r\n\r\n        //  The center of the camera, in world space, so taking zoom into account\r\n        //  Basically the pixel value of what it's looking at in the middle of the cam\r\n        this.midPoint.set(midX, midY);\r\n\r\n        var displayWidth = width / zoom;\r\n        var displayHeight = height / zoom;\r\n\r\n        this.worldView.setTo(\r\n            midX - (displayWidth / 2),\r\n            midY - (displayHeight / 2),\r\n            displayWidth,\r\n            displayHeight\r\n        );\r\n\r\n        matrix.applyITRS(this.x + originX, this.y + originY, this.rotation, zoom, zoom);\r\n        matrix.translate(-originX, -originY);\r\n\r\n        this.shakeEffect.preRender();\r\n    },\r\n\r\n    /**\r\n     * Sets the linear interpolation value to use when following a target.\r\n     *\r\n     * The default values of 1 means the camera will instantly snap to the target coordinates.\r\n     * A lower value, such as 0.1 means the camera will more slowly track the target, giving\r\n     * a smooth transition. You can set the horizontal and vertical values independently, and also\r\n     * adjust this value in real-time during your game.\r\n     *\r\n     * Be sure to keep the value between 0 and 1. A value of zero will disable tracking on that axis.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#setLerp\r\n     * @since 3.9.0\r\n     *\r\n     * @param {number} [x=1] - The amount added to the horizontal linear interpolation of the follow target.\r\n     * @param {number} [y=1] - The amount added to the vertical linear interpolation of the follow target.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    setLerp: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 1; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.lerp.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical offset of the camera from its follow target.\r\n     * The values are subtracted from the targets position during the Cameras update step.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#setFollowOffset\r\n     * @since 3.9.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal offset from the camera follow target.x position.\r\n     * @param {number} [y=0] - The vertical offset from the camera follow target.y position.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    setFollowOffset: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        this.followOffset.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Camera to follow a Game Object.\r\n     *\r\n     * When enabled the Camera will automatically adjust its scroll position to keep the target Game Object\r\n     * in its center.\r\n     *\r\n     * You can set the linear interpolation value used in the follow code.\r\n     * Use low lerp values (such as 0.1) to automatically smooth the camera motion.\r\n     *\r\n     * If you find you're getting a slight \"jitter\" effect when following an object it's probably to do with sub-pixel\r\n     * rendering of the targets position. This can be rounded by setting the `roundPixels` argument to `true` to\r\n     * force full pixel rounding rendering. Note that this can still be broken if you have specified a non-integer zoom\r\n     * value on the camera. So be sure to keep the camera zoom to integers.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#startFollow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|object)} target - The target for the Camera to follow.\r\n     * @param {boolean} [roundPixels=false] - Round the camera position to whole integers to avoid sub-pixel rendering?\r\n     * @param {number} [lerpX=1] - A value between 0 and 1. This value specifies the amount of linear interpolation to use when horizontally tracking the target. The closer the value to 1, the faster the camera will track.\r\n     * @param {number} [lerpY=1] - A value between 0 and 1. This value specifies the amount of linear interpolation to use when vertically tracking the target. The closer the value to 1, the faster the camera will track.\r\n     * @param {number} [offsetX=0] - The horizontal offset from the camera follow target.x position.\r\n     * @param {number} [offsetY=0] - The vertical offset from the camera follow target.y position.\r\n     *\r\n     * @return {this} This Camera instance.\r\n     */\r\n    startFollow: function (target, roundPixels, lerpX, lerpY, offsetX, offsetY)\r\n    {\r\n        if (roundPixels === undefined) { roundPixels = false; }\r\n        if (lerpX === undefined) { lerpX = 1; }\r\n        if (lerpY === undefined) { lerpY = lerpX; }\r\n        if (offsetX === undefined) { offsetX = 0; }\r\n        if (offsetY === undefined) { offsetY = offsetX; }\r\n\r\n        this._follow = target;\r\n\r\n        this.roundPixels = roundPixels;\r\n\r\n        lerpX = Clamp(lerpX, 0, 1);\r\n        lerpY = Clamp(lerpY, 0, 1);\r\n\r\n        this.lerp.set(lerpX, lerpY);\r\n\r\n        this.followOffset.set(offsetX, offsetY);\r\n\r\n        var originX = this.width / 2;\r\n        var originY = this.height / 2;\r\n\r\n        var fx = target.x - offsetX;\r\n        var fy = target.y - offsetY;\r\n\r\n        this.midPoint.set(fx, fy);\r\n\r\n        this.scrollX = fx - originX;\r\n        this.scrollY = fy - originY;\r\n\r\n        if (this.useBounds)\r\n        {\r\n            this.scrollX = this.clampX(this.scrollX);\r\n            this.scrollY = this.clampY(this.scrollY);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops a Camera from following a Game Object, if previously set via `Camera.startFollow`.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#stopFollow\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    stopFollow: function ()\r\n    {\r\n        this._follow = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets any active FX, such as a fade, flash or shake. Useful to call after a fade in order to\r\n     * remove the fade.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#resetFX\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n     */\r\n    resetFX: function ()\r\n    {\r\n        this.panEffect.reset();\r\n        this.shakeEffect.reset();\r\n        this.flashEffect.reset();\r\n        this.fadeEffect.reset();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method called automatically by the Camera Manager.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#update\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (this.visible)\r\n        {\r\n            this.panEffect.update(time, delta);\r\n            this.zoomEffect.update(time, delta);\r\n            this.shakeEffect.update(time, delta);\r\n            this.flashEffect.update(time, delta);\r\n            this.fadeEffect.update(time, delta);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Camera instance. You rarely need to call this directly.\r\n     *\r\n     * Called by the Camera Manager. If you wish to destroy a Camera please use `CameraManager.remove` as\r\n     * cameras are stored in a pool, ready for recycling later, and calling this directly will prevent that.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Camera#destroy\r\n     * @fires Phaser.Cameras.Scene2D.Events#DESTROY\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.clearRenderToTexture();\r\n\r\n        this.resetFX();\r\n\r\n        BaseCamera.prototype.destroy.call(this);\r\n\r\n        this._follow = null;\r\n\r\n        this.deadzone = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Camera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0NhbWVyYS5qcz9jODZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx3RUFBYztBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLDJGQUErQjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsaUVBQWtCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQThCO0FBQ3ZELGNBQWMsbUJBQU8sQ0FBQyx3RUFBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQztBQUN4RCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsUUFBUTtBQUN2QixlQUFlLCtDQUErQztBQUM5RDtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsK0NBQStDO0FBQzlEO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTzs7QUFFckM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MscUJBQXFCO0FBQzdELGtDQUFrQyxXQUFXO0FBQzdDLGtDQUFrQyxlQUFlO0FBQ2pELG9DQUFvQyxhQUFhO0FBQ2pELG9DQUFvQyxtQkFBbUI7O0FBRXZEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9DYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCYXNlQ2FtZXJhID0gcmVxdWlyZSgnLi9CYXNlQ2FtZXJhJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ2VudGVyT24gPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbicpO1xyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgRWZmZWN0cyA9IHJlcXVpcmUoJy4vZWZmZWN0cycpO1xyXG52YXIgTGluZWFyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9MaW5lYXInKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDYW1lcmEuXHJcbiAqXHJcbiAqIFRoZSBDYW1lcmEgaXMgdGhlIHdheSBpbiB3aGljaCBhbGwgZ2FtZXMgYXJlIHJlbmRlcmVkIGluIFBoYXNlci4gVGhleSBwcm92aWRlIGEgdmlldyBpbnRvIHlvdXIgZ2FtZSB3b3JsZCxcclxuICogYW5kIGNhbiBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCB6b29tZWQgYW5kIHNjcm9sbGVkIGFjY29yZGluZ2x5LlxyXG4gKlxyXG4gKiBBIENhbWVyYSBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IFRoZSB2aWV3cG9ydCBhbmQgdGhlIHNjcm9sbCB2YWx1ZXMuXHJcbiAqXHJcbiAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgcGh5c2ljYWwgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB3aXRoaW4geW91ciBnYW1lLiBDYW1lcmFzLCBieSBkZWZhdWx0LCBhcmVcclxuICogY3JlYXRlZCB0aGUgc2FtZSBzaXplIGFzIHlvdXIgZ2FtZSwgYnV0IHRoZWlyIHBvc2l0aW9uIGFuZCBzaXplIGNhbiBiZSBzZXQgdG8gYW55dGhpbmcuIFRoaXMgbWVhbnMgaWYgeW91XHJcbiAqIHdhbnRlZCB0byBjcmVhdGUgYSBjYW1lcmEgdGhhdCB3YXMgMzIweDIwMCBpbiBzaXplLCBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHlvdXIgZ2FtZSxcclxuICogeW91J2QgYWRqdXN0IHRoZSB2aWV3cG9ydCB0byBkbyB0aGF0ICh1c2luZyBtZXRob2RzIGxpa2UgYHNldFZpZXdwb3J0YCBhbmQgYHNldFNpemVgKS5cclxuICpcclxuICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBpbiB5b3VyIGdhbWUsIHRoZW4geW91IHNjcm9sbCBpdC4gWW91IGNhbiBkbyB0aGlzXHJcbiAqIHZpYSB0aGUgcHJvcGVydGllcyBgc2Nyb2xsWGAgYW5kIGBzY3JvbGxZYCBvciB0aGUgbWV0aG9kIGBzZXRTY3JvbGxgLiBTY3JvbGxpbmcgaGFzIG5vIGltcGFjdCBvbiB0aGVcclxuICogdmlld3BvcnQsIGFuZCBjaGFuZ2luZyB0aGUgdmlld3BvcnQgaGFzIG5vIGltcGFjdCBvbiB0aGUgc2Nyb2xsaW5nLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIHdpbGwgcmVuZGVyIGFsbCBHYW1lIE9iamVjdHMgaXQgY2FuIHNlZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyB1c2luZyB0aGUgYGlnbm9yZWAgbWV0aG9kLFxyXG4gKiBhbGxvd2luZyB5b3UgdG8gZmlsdGVyIEdhbWUgT2JqZWN0cyBvdXQgb24gYSBwZXItQ2FtZXJhIGJhc2lzLlxyXG4gKlxyXG4gKiBBIENhbWVyYSBhbHNvIGhhcyBidWlsdC1pbiBzcGVjaWFsIGVmZmVjdHMgaW5jbHVkaW5nIEZhZGUsIEZsYXNoIGFuZCBDYW1lcmEgU2hha2UuXHJcbiAqXHJcbiAqIEBjbGFzcyBDYW1lcmFcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIENhbWVyYSwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgQ2FtZXJhLCBpbiBwaXhlbHMuXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCYXNlQ2FtZXJhLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnRcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmEgKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgQmFzZUNhbWVyYS5jYWxsKHRoaXMsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb2VzIHRoaXMgQ2FtZXJhIGFsbG93IHRoZSBHYW1lIE9iamVjdHMgaXQgcmVuZGVycyB0byByZWNlaXZlIGlucHV0IGV2ZW50cz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2lucHV0RW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0RW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgRmFkZSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyBmYWRlIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS5mYWRlYCBtZXRob2RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUVmZmVjdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZhZGVFZmZlY3QgPSBuZXcgRWZmZWN0cy5GYWRlKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIEZsYXNoIGVmZmVjdCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRvIGZsYXNoIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS5mbGFzaGAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmxhc2hFZmZlY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNofVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmxhc2hFZmZlY3QgPSBuZXcgRWZmZWN0cy5GbGFzaCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENhbWVyYSBTaGFrZSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyBzaGFrZSB0aGlzIGNhbWVyYSBzZWUgdGhlIGBDYW1lcmEuc2hha2VgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NoYWtlRWZmZWN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZX1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWtlRWZmZWN0ID0gbmV3IEVmZmVjdHMuU2hha2UodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgUGFuIGVmZmVjdCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRvIHBhbiB0aGlzIGNhbWVyYSBzZWUgdGhlIGBDYW1lcmEucGFuYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNwYW5FZmZlY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYW5FZmZlY3QgPSBuZXcgRWZmZWN0cy5QYW4odGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgWm9vbSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyB6b29tIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS56b29tYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSN6b29tRWZmZWN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21FZmZlY3QgPSBuZXcgRWZmZWN0cy5ab29tKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGluZWFyIGludGVycG9sYXRpb24gdmFsdWUgdG8gdXNlIHdoZW4gZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2FuIGFsc28gYmUgc2V0IHZpYSBgc2V0TGVycGAgb3IgYXMgcGFydCBvZiB0aGUgYHN0YXJ0Rm9sbG93YCBjYWxsLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWVzIG9mIDEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIGluc3RhbnRseSBzbmFwIHRvIHRoZSB0YXJnZXQgY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICogQSBsb3dlciB2YWx1ZSwgc3VjaCBhcyAwLjEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIG1vcmUgc2xvd2x5IHRyYWNrIHRoZSB0YXJnZXQsIGdpdmluZ1xyXG4gICAgICAgICAqIGEgc21vb3RoIHRyYW5zaXRpb24uIFlvdSBjYW4gc2V0IHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB2YWx1ZXMgaW5kZXBlbmRlbnRseSwgYW5kIGFsc29cclxuICAgICAgICAgKiBhZGp1c3QgdGhpcyB2YWx1ZSBpbiByZWFsLXRpbWUgZHVyaW5nIHlvdXIgZ2FtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJlIHN1cmUgdG8ga2VlcCB0aGUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBBIHZhbHVlIG9mIHplcm8gd2lsbCBkaXNhYmxlIHRyYWNraW5nIG9uIHRoYXQgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2xlcnBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxlcnAgPSBuZXcgVmVjdG9yMigxLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhpcyBwcm9wZXJ0eSBhcmUgc3VidHJhY3RlZCBmcm9tIHRoZSBDYW1lcmEgdGFyZ2V0cyBwb3NpdGlvbiwgYWxsb3dpbmcgeW91IHRvXHJcbiAgICAgICAgICogb2Zmc2V0IHRoZSBjYW1lcmEgZnJvbSB0aGUgYWN0dWFsIHRhcmdldCB4L3kgY29vcmRpbmF0ZXMgYnkgdGhpcyBhbW91bnQuXHJcbiAgICAgICAgICogQ2FuIGFsc28gYmUgc2V0IHZpYSBgc2V0Rm9sbG93T2Zmc2V0YCBvciBhcyBwYXJ0IG9mIHRoZSBgc3RhcnRGb2xsb3dgIGNhbGwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmb2xsb3dPZmZzZXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgZGVhZCB6b25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlYWR6b25lIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBjYW1lcmEgaXMgZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSXQgZGVmaW5lcyBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gd2hpY2ggaWYgdGhlIHRhcmdldCBpcyBwcmVzZW50LCB0aGUgY2FtZXJhIHdpbGwgbm90IHNjcm9sbC5cclxuICAgICAgICAgKiBJZiB0aGUgdGFyZ2V0IG1vdmVzIG91dHNpZGUgb2YgdGhpcyBhcmVhLCB0aGUgY2FtZXJhIHdpbGwgYmVnaW4gc2Nyb2xsaW5nIGluIG9yZGVyIHRvIGZvbGxvdyBpdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBgbGVycGAgdmFsdWVzIHRoYXQgeW91IGNhbiBzZXQgZm9yIGEgZm9sbG93ZXIgdGFyZ2V0IGFsc28gYXBwbHkgd2hlbiB1c2luZyBhIGRlYWR6b25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBkaXJlY3RseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBiZSBhbiBpbnN0YW5jZSBvZiBhIFJlY3RhbmdsZS4gT3IsIHlvdSBjYW4gdXNlIHRoZVxyXG4gICAgICAgICAqIGBzZXREZWFkem9uZWAgbWV0aG9kIGZvciBhIGNoYWluYWJsZSBhcHByb2FjaC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSByZWN0YW5nbGUgeW91IHByb3ZpZGUgY2FuIGhhdmUgaXRzIGRpbWVuc2lvbnMgYWRqdXN0ZWQgZHluYW1pY2FsbHksIGhvd2V2ZXIsIHBsZWFzZVxyXG4gICAgICAgICAqIG5vdGUgdGhhdCBpdHMgcG9zaXRpb24gaXMgdXBkYXRlZCBldmVyeSBmcmFtZSwgYXMgaXQgaXMgY29uc3RhbnRseSByZS1jZW50ZXJlZCBvbiB0aGUgY2FtZXJhcyBtaWQgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDYWxsaW5nIGBzZXREZWFkem9uZWAgd2l0aCBubyBhcmd1bWVudHMgd2lsbCByZXNldCBhbiBhY3RpdmUgZGVhZHpvbmUsIGFzIHdpbGwgc2V0dGluZyB0aGlzIHByb3BlcnR5XHJcbiAgICAgICAgICogdG8gYG51bGxgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZGVhZHpvbmVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5HZW9tLlJlY3RhbmdsZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWFkem9uZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGZvbGxvdyB0YXJnZXQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjX2ZvbGxvd1xyXG4gICAgICAgICAqIEB0eXBlIHs/YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZvbGxvdyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgQ2FtZXJhIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgY2FudmFzIG9yIHRvIGEgdGV4dHVyZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVuYWJsZSByZW5kZXJpbmcgdG8gdGV4dHVyZSB3aXRoIHRoZSBtZXRob2QgYHNldFJlbmRlclRvVGV4dHVyZWAgKGp1c3QgZW5hYmxpbmcgdGhpcyBib29sZWFuIHdvbid0IGJlIGVub3VnaClcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE9uY2UgZW5hYmxlZCB5b3UgY2FuIHRvZ2dsZSBpdCBieSBzd2l0Y2hpbmcgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRvIHByb3Blcmx5IHJlbW92ZSBhIHJlbmRlciB0ZXh0dXJlIHlvdSBzaG91bGQgY2FsbCB0aGUgYGNsZWFyUmVuZGVyVG9UZXh0dXJlKClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3JlbmRlclRvVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIHRoZW4gdGhpcyBob2xkcyBhIHJlZmVyZW5jZVxyXG4gICAgICAgICAqIHRvIHRoZSBIVE1MIENhbnZhcyBFbGVtZW50IHRoYXQgdGhlIENhbWVyYSBpcyBkcmF3aW5nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRW5hYmxlIHRleHR1cmUgcmVuZGVyaW5nIHVzaW5nIHRoZSBtZXRob2QgYHNldFJlbmRlclRvVGV4dHVyZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIGlzIG9ubHkgcG9wdWxhdGVkIGlmIFBoYXNlciBpcyBydW5uaW5nIHdpdGggdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIENhbWVyYSBoYXMgYmVlbiBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSB0aGVuIHRoaXMgaG9sZHMgYSByZWZlcmVuY2VcclxuICAgICAgICAgKiB0byB0aGUgUmVuZGVyaW5nIENvbnRleHQgYmVsb25naW5nIHRvIHRoZSBDYW52YXMgZWxlbWVudCB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBwb3B1bGF0ZWQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIHRoZW4gdGhpcyBob2xkcyBhIHJlZmVyZW5jZVxyXG4gICAgICAgICAqIHRvIHRoZSBHTCBUZXh0dXJlIGJlbG9uZ2luZyB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBzZXQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNnbFRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7P1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIENhbWVyYSBoYXMgYmVlbiBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSB0aGVuIHRoaXMgaG9sZHMgYSByZWZlcmVuY2VcclxuICAgICAgICAgKiB0byB0aGUgR0wgRnJhbWUgQnVmZmVyIGJlbG9uZ2luZyB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBzZXQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmcmFtZWJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHs/V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIGFuZCB0byB1c2UgYSBjdXN0b20gcGlwZWxpbmUsXHJcbiAgICAgICAgICogdGhlbiB0aGlzIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBwaXBlbGluZSB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgd2l0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVuYWJsZSB0ZXh0dXJlIHJlbmRlcmluZyB1c2luZyB0aGUgbWV0aG9kIGBzZXRSZW5kZXJUb1RleHR1cmVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBvbmx5IHNldCBpZiBQaGFzZXIgaXMgcnVubmluZyB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3BpcGVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5waXBlbGluZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQ2FtZXJhIHRvIHJlbmRlciB0byBhIHRleHR1cmUgaW5zdGVhZCBvZiB0byB0aGUgbWFpbiBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIENhbWVyYSB3aWxsIHJlZGlyZWN0IGFsbCBHYW1lIE9iamVjdHMgaXQncyBhc2tlZCB0byByZW5kZXIgdG8gdGhpcyB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIER1cmluZyB0aGUgcmVuZGVyIHNlcXVlbmNlLCB0aGUgdGV4dHVyZSBpdHNlbGYgd2lsbCB0aGVuIGJlIHJlbmRlcmVkIHRvIHRoZSBtYWluIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBEb2luZyB0aGlzIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIHRleHR1cmUgYmVmb3JlIHRoaXMgaGFwcGVucyxcclxuICAgICAqIGFsbG93aW5nIGZvciBzcGVjaWFsIGVmZmVjdHMgc3VjaCBhcyBDYW1lcmEgc3BlY2lmaWMgc2hhZGVycywgb3IgcG9zdC1wcm9jZXNzaW5nXHJcbiAgICAgKiBvbiB0aGUgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBydW5uaW5nIHVuZGVyIENhbnZhcyB0aGUgQ2FtZXJhIHdpbGwgcmVuZGVyIHRvIGl0cyBgY2FudmFzYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBydW5uaW5nIHVuZGVyIFdlYkdMIHRoZSBDYW1lcmEgd2lsbCBjcmVhdGUgYSBmcmFtZSBidWZmZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiBpdHMgYGZyYW1lYnVmZmVyYCBhbmQgYGdsVGV4dHVyZWAgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3Ugc2V0IGEgY2FtZXJhIHRvIHJlbmRlciB0byBhIHRleHR1cmUgdGhlbiBpdCB3aWxsIGVtaXQgMiBldmVudHMgZHVyaW5nIHRoZSByZW5kZXIgbG9vcDpcclxuICAgICAqXHJcbiAgICAgKiBGaXJzdCwgaXQgd2lsbCBlbWl0IHRoZSBldmVudCBgcHJlcmVuZGVyYC4gVGhpcyBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBhbnkgR2FtZSBPYmplY3QncyBhcmUgZHJhd24gdG8gdGhlIENhbWVyYSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIFRoZW4sIGl0IHdpbGwgZW1pdCB0aGUgZXZlbnQgYHBvc3RyZW5kZXJgLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIEdhbWUgT2JqZWN0J3MgaGF2ZSBiZWVuIGRyYXduLCBidXQgcmlnaHQgYmVmb3JlIHRoZVxyXG4gICAgICogQ2FtZXJhIHRleHR1cmUgaXMgcmVuZGVyZWQgdG8gdGhlIG1haW4gZ2FtZSBjYW52YXMuIEl0J3MgdGhlIGZpbmFsIHBvaW50IGF0IHdoaWNoIHlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgdGV4dHVyZSBiZWZvcmVcclxuICAgICAqIGl0IGFwcGVhcnMgaW4tZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3Ugc2hvdWxkIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IHBsYW4gb24gYWN0dWFsbHkgdXNpbmcgdGhlIHRleHR1cmUgaXQgY3JlYXRlc1xyXG4gICAgICogc29tZWhvdywgb3RoZXJ3aXNlIHlvdSdyZSBqdXN0IGRvdWJsaW5nIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHJlbmRlciB5b3VyIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogVG8gdGVtcG9yYXJpbHkgZGlzYWJsZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCB0b2dnbGUgdGhlIGByZW5kZXJUb1RleHR1cmVgIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IG5vIGxvbmdlciByZXF1aXJlIHRoZSBDYW1lcmEgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgY2FsbCB0aGUgYGNsZWFyUmVuZGVyVG9UZXh0dXJlYCBtZXRob2QsXHJcbiAgICAgKiB3aGljaCB3aWxsIGRlbGV0ZSB0aGUgcmVzcGVjdGl2ZSB0ZXh0dXJlcyBhbmQgZnJlZS11cCByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNzZXRSZW5kZXJUb1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUpfSBbcGlwZWxpbmVdIC0gQW4gb3B0aW9uYWwgV2ViR0wgUGlwZWxpbmUgdG8gcmVuZGVyIHdpdGgsIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lLCBvciBhIHBpcGVsaW5lIHJlZmVyZW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFJlbmRlclRvVGV4dHVyZTogZnVuY3Rpb24gKHBpcGVsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gcmVuZGVyZXIuY3JlYXRlVGV4dHVyZUZyb21Tb3VyY2UobnVsbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gcmVuZGVyZXIuY3JlYXRlRnJhbWVidWZmZXIodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMuZ2xUZXh0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUyRCh0aGlzLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclRvVGV4dHVyZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChwaXBlbGluZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgV2ViR0wgcGlwZWxpbmUgdGhpcyBDYW1lcmEgaXMgdXNpbmcgd2hlbiByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gcGFzcyBlaXRoZXIgdGhlIHN0cmluZy1iYXNlZCBuYW1lIG9mIHRoZSBwaXBlbGluZSwgb3IgYSByZWZlcmVuY2UgdG8gdGhlIHBpcGVsaW5lIGl0c2VsZi5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIHRvIGNsZWFyIGFueSBwcmV2aW91c2x5IHNldCBwaXBlbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NldFBpcGVsaW5lXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lKX0gW3BpcGVsaW5lXSAtIFRoZSBXZWJHTCBQaXBlbGluZSB0byByZW5kZXIgd2l0aCwgY2FuIGJlIGVpdGhlciBhIHN0cmluZyB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUsIG9yIGEgcGlwZWxpbmUgcmVmZXJlbmNlLiBPciBpZiBsZWZ0IGVtcHR5IGl0IHdpbGwgY2xlYXIgdGhlIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBpcGVsaW5lID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVsaW5lID0gcmVuZGVyZXIuZ2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSBwaXBlbGluZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoaXMgQ2FtZXJhIHdhcyBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgdGhpcyB3aWxsIGNsZWFyIHRoZSByZXNvdXJjZXMgaXQgd2FzIHVzaW5nIGFuZFxyXG4gICAgICogcmVkaXJlY3QgaXQgdG8gcmVuZGVyIGJhY2sgdG8gdGhlIHByaW1hcnkgQ2FudmFzIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBvbmx5IHdpc2ggdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlIHRoZW4geW91IGNhbiB0b2dnbGUgdGhlXHJcbiAgICAgKiBwcm9wZXJ0eSBgcmVuZGVyVG9UZXh0dXJlYCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjY2xlYXJSZW5kZXJUb1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyUmVuZGVyVG9UZXh0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmICghcmVuZGVyZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZWJ1ZmZlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdsVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuZGVsZXRlVGV4dHVyZSh0aGlzLmdsVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENhbWVyYSBkZWFkIHpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRlYWR6b25lIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBjYW1lcmEgaXMgZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICpcclxuICAgICAqIEl0IGRlZmluZXMgYSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHdoaWNoIGlmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCwgdGhlIGNhbWVyYSB3aWxsIG5vdCBzY3JvbGwuXHJcbiAgICAgKiBJZiB0aGUgdGFyZ2V0IG1vdmVzIG91dHNpZGUgb2YgdGhpcyBhcmVhLCB0aGUgY2FtZXJhIHdpbGwgYmVnaW4gc2Nyb2xsaW5nIGluIG9yZGVyIHRvIGZvbGxvdyBpdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVhZHpvbmUgcmVjdGFuZ2xlIGlzIHJlLXBvc2l0aW9uZWQgZXZlcnkgZnJhbWUgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgbWlkLXBvaW50XHJcbiAgICAgKiBvZiB0aGUgY2FtZXJhLiBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBvYmplY3QgZm9yIGFkZGl0aW9uYWwgZ2FtZSByZWxhdGVkIGNoZWNrcywgc3VjaCBhc1xyXG4gICAgICogdGVzdGluZyBpZiBhbiBvYmplY3QgaXMgd2l0aGluIGl0IG9yIG5vdCB2aWEgYSBSZWN0YW5nbGUuY29udGFpbnMgY2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYGxlcnBgIHZhbHVlcyB0aGF0IHlvdSBjYW4gc2V0IGZvciBhIGZvbGxvd2VyIHRhcmdldCBhbHNvIGFwcGx5IHdoZW4gdXNpbmcgYSBkZWFkem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIHdpbGwgcmVzZXQgYW4gYWN0aXZlIGRlYWR6b25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc2V0RGVhZHpvbmVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgZGVhZHpvbmUgcmVjdGFuZ2xlIGluIHBpeGVscy4gSWYgbm90IHNwZWNpZmllZCB0aGUgZGVhZHpvbmUgaXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGRlYWR6b25lIHJlY3RhbmdsZSBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZWFkem9uZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlYWR6b25lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVhZHpvbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZHpvbmUud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZHpvbmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFkem9uZSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9mb2xsb3cpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5YID0gdGhpcy53aWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnggPSB0aGlzLl9mb2xsb3cueCAtIHRoaXMuZm9sbG93T2Zmc2V0Lng7XHJcbiAgICAgICAgICAgICAgICB2YXIgZnkgPSB0aGlzLl9mb2xsb3cueSAtIHRoaXMuZm9sbG93T2Zmc2V0Lnk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoZngsIGZ5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFggPSBmeCAtIG9yaWdpblg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSBmeSAtIG9yaWdpblk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIENlbnRlck9uKHRoaXMuZGVhZHpvbmUsIHRoaXMubWlkUG9pbnQueCwgdGhpcy5taWRQb2ludC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgaW4gZnJvbSB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUluXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfSU5fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTEwMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSByZWQgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSAtIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAqIEl0IGlzIHNlbnQgdHdvIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSBhbmQgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmYWRlSW46IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUVmZmVjdC5zdGFydChmYWxzZSwgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIHRydWUsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWRlcyB0aGUgQ2FtZXJhIG91dCB0byB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICogVGhpcyBpcyBhbiBhbGlhcyBmb3IgQ2FtZXJhLmZhZGUgdGhhdCBmb3JjZXMgdGhlIGZhZGUgdG8gc3RhcnQsIHJlZ2FyZGxlc3Mgb2YgZXhpc3RpbmcgZmFkZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmYWRlT3V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX09VVF9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgZ3JlZW4gY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYmx1ZT0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZhZGVPdXQ6IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUVmZmVjdC5zdGFydCh0cnVlLCBkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgdHJ1ZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgZnJvbSB0aGUgZ2l2ZW4gY29sb3IgdG8gdHJhbnNwYXJlbnQgb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUZyb21cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX0lOX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgZ3JlZW4gY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYmx1ZT0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IHR3byBhcmd1bWVudHM6IEEgcmVmZXJlbmNlIHRvIHRoZSBjYW1lcmEgYW5kIGEgcHJvZ3Jlc3MgYW1vdW50IGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGhvdyBjb21wbGV0ZSB0aGUgZWZmZWN0IGlzLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLiBEZWZhdWx0cyB0byB0aGUgU2NlbmUgdG8gd2hpY2ggdGhlIENhbWVyYSBiZWxvbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZmFkZUZyb206IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVFZmZlY3Quc3RhcnQoZmFsc2UsIGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgZnJvbSB0cmFuc3BhcmVudCB0byB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTEwMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSByZWQgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZhZGU6IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVFZmZlY3Quc3RhcnQodHJ1ZSwgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhc2hlcyB0aGUgQ2FtZXJhIGJ5IHNldHRpbmcgaXQgdG8gdGhlIGdpdmVuIGNvbG9yIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZhZGluZyBpdCBhd2F5IGFnYWluIHF1aWNrbHkgb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmxhc2hcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGTEFTSF9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0yNTBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0yNTVdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBncmVlbiBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZsYXNoOiBmdW5jdGlvbiAoZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbGFzaEVmZmVjdC5zdGFydChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFrZXMgdGhlIENhbWVyYSBieSB0aGUgZ2l2ZW4gaW50ZW5zaXR5IG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NoYWtlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gW2ludGVuc2l0eT0wLjA1XSAtIFRoZSBpbnRlbnNpdHkgb2YgdGhlIHNoYWtlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIHNoYWtlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNoYWtlOiBmdW5jdGlvbiAoZHVyYXRpb24sIGludGVuc2l0eSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoYWtlRWZmZWN0LnN0YXJ0KGR1cmF0aW9uLCBpbnRlbnNpdHksIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCBzY3JvbGwgdGhlIENhbWVyYSBzbyB0aGF0IHRoZSBjZW50ZXIgb2YgaXRzIHZpZXdwb3J0IGZpbmlzaGVzIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbixcclxuICAgICAqIG92ZXIgdGhlIGR1cmF0aW9uIGFuZCB3aXRoIHRoZSBlYXNlIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3BhblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGRlc3RpbmF0aW9uIHggY29vcmRpbmF0ZSB0byBzY3JvbGwgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgZGVzdGluYXRpb24geSBjb29yZGluYXRlIHRvIHNjcm9sbCB0aGUgY2VudGVyIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFtlYXNlPSdMaW5lYXInXSAtIFRoZSBlYXNlIHRvIHVzZSBmb3IgdGhlIHBhbi4gQ2FuIGJlIGFueSBvZiB0aGUgUGhhc2VyIEVhc2luZyBjb25zdGFudHMgb3IgYSBjdXN0b20gZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgcGFuIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IGZvdXIgYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhLCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcyxcclxuICAgICAqIHRoZSBjdXJyZW50IGNhbWVyYSBzY3JvbGwgeCBjb29yZGluYXRlIGFuZCB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHBhbjogZnVuY3Rpb24gKHgsIHksIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuRWZmZWN0LnN0YXJ0KHgsIHksIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZWZmZWN0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIHRvIHRoZSBnaXZlbiBzY2FsZSwgb3ZlciB0aGUgZHVyYXRpb24gYW5kIHdpdGggdGhlIGVhc2Ugc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjem9vbVRvXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjWk9PTV9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gem9vbSAtIFRoZSB0YXJnZXQgQ2FtZXJhIHpvb20gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFtlYXNlPSdMaW5lYXInXSAtIFRoZSBlYXNlIHRvIHVzZSBmb3IgdGhlIHBhbi4gQ2FuIGJlIGFueSBvZiB0aGUgUGhhc2VyIEVhc2luZyBjb25zdGFudHMgb3IgYSBjdXN0b20gZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgcGFuIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IGZvdXIgYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhLCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcyxcclxuICAgICAqIHRoZSBjdXJyZW50IGNhbWVyYSBzY3JvbGwgeCBjb29yZGluYXRlIGFuZCB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHpvb21UbzogZnVuY3Rpb24gKHpvb20sIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuem9vbUVmZmVjdC5zdGFydCh6b29tLCBkdXJhdGlvbiwgZWFzZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwcmVSZW5kZXIgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3ByZVJlbmRlclxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc29sdXRpb24gLSBUaGUgZ2FtZSByZXNvbHV0aW9uLCBhcyBzZXQgaW4gdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAqIDAuNTtcclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb20gKiByZXNvbHV0aW9uO1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB3aWR0aCAqIHRoaXMub3JpZ2luWDtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IGhlaWdodCAqIHRoaXMub3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIGZvbGxvdyA9IHRoaXMuX2ZvbGxvdztcclxuICAgICAgICB2YXIgZGVhZHpvbmUgPSB0aGlzLmRlYWR6b25lO1xyXG5cclxuICAgICAgICB2YXIgc3ggPSB0aGlzLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIHN5ID0gdGhpcy5zY3JvbGxZO1xyXG5cclxuICAgICAgICBpZiAoZGVhZHpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDZW50ZXJPbihkZWFkem9uZSwgdGhpcy5taWRQb2ludC54LCB0aGlzLm1pZFBvaW50LnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvbGxvdyAmJiAhdGhpcy5wYW5FZmZlY3QuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZ4ID0gKGZvbGxvdy54IC0gdGhpcy5mb2xsb3dPZmZzZXQueCk7XHJcbiAgICAgICAgICAgIHZhciBmeSA9IChmb2xsb3cueSAtIHRoaXMuZm9sbG93T2Zmc2V0LnkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRlYWR6b25lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnggPCBkZWFkem9uZS54KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBzeCAtIChkZWFkem9uZS54IC0gZngpLCB0aGlzLmxlcnAueCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmeCA+IGRlYWR6b25lLnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBzeCArIChmeCAtIGRlYWR6b25lLnJpZ2h0KSwgdGhpcy5sZXJwLngpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmeSA8IGRlYWR6b25lLnkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3kgPSBMaW5lYXIoc3ksIHN5IC0gKGRlYWR6b25lLnkgLSBmeSksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ5ID4gZGVhZHpvbmUuYm90dG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5ID0gTGluZWFyKHN5LCBzeSArIChmeSAtIGRlYWR6b25lLmJvdHRvbSksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBmeCAtIG9yaWdpblgsIHRoaXMubGVycC54KTtcclxuICAgICAgICAgICAgICAgIHN5ID0gTGluZWFyKHN5LCBmeSAtIG9yaWdpblksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ggPSB0aGlzLmNsYW1wWChzeCk7XHJcbiAgICAgICAgICAgIHN5ID0gdGhpcy5jbGFtcFkoc3kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcmlnaW5YID0gTWF0aC5yb3VuZChvcmlnaW5YKTtcclxuICAgICAgICAgICAgb3JpZ2luWSA9IE1hdGgucm91bmQob3JpZ2luWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVmFsdWVzIGFyZSBpbiBwaXhlbHMgYW5kIG5vdCBpbXBhY3RlZCBieSB6b29taW5nIHRoZSBDYW1lcmFcclxuICAgICAgICB0aGlzLnNjcm9sbFggPSBzeDtcclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSBzeTtcclxuXHJcbiAgICAgICAgdmFyIG1pZFggPSBzeCArIGhhbGZXaWR0aDtcclxuICAgICAgICB2YXIgbWlkWSA9IHN5ICsgaGFsZkhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBjZW50ZXIgb2YgdGhlIGNhbWVyYSwgaW4gd29ybGQgc3BhY2UsIHNvIHRha2luZyB6b29tIGludG8gYWNjb3VudFxyXG4gICAgICAgIC8vICBCYXNpY2FsbHkgdGhlIHBpeGVsIHZhbHVlIG9mIHdoYXQgaXQncyBsb29raW5nIGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGNhbVxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KG1pZFgsIG1pZFkpO1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheVdpZHRoID0gd2lkdGggLyB6b29tO1xyXG4gICAgICAgIHZhciBkaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0IC8gem9vbTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFZpZXcuc2V0VG8oXHJcbiAgICAgICAgICAgIG1pZFggLSAoZGlzcGxheVdpZHRoIC8gMiksXHJcbiAgICAgICAgICAgIG1pZFkgLSAoZGlzcGxheUhlaWdodCAvIDIpLFxyXG4gICAgICAgICAgICBkaXNwbGF5V2lkdGgsXHJcbiAgICAgICAgICAgIGRpc3BsYXlIZWlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXRyaXguYXBwbHlJVFJTKHRoaXMueCArIG9yaWdpblgsIHRoaXMueSArIG9yaWdpblksIHRoaXMucm90YXRpb24sIHpvb20sIHpvb20pO1xyXG4gICAgICAgIG1hdHJpeC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFrZUVmZmVjdC5wcmVSZW5kZXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiB2YWx1ZSB0byB1c2Ugd2hlbiBmb2xsb3dpbmcgYSB0YXJnZXQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWVzIG9mIDEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIGluc3RhbnRseSBzbmFwIHRvIHRoZSB0YXJnZXQgY29vcmRpbmF0ZXMuXHJcbiAgICAgKiBBIGxvd2VyIHZhbHVlLCBzdWNoIGFzIDAuMSBtZWFucyB0aGUgY2FtZXJhIHdpbGwgbW9yZSBzbG93bHkgdHJhY2sgdGhlIHRhcmdldCwgZ2l2aW5nXHJcbiAgICAgKiBhIHNtb290aCB0cmFuc2l0aW9uLiBZb3UgY2FuIHNldCB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzIGluZGVwZW5kZW50bHksIGFuZCBhbHNvXHJcbiAgICAgKiBhZGp1c3QgdGhpcyB2YWx1ZSBpbiByZWFsLXRpbWUgZHVyaW5nIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBCZSBzdXJlIHRvIGtlZXAgdGhlIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4gQSB2YWx1ZSBvZiB6ZXJvIHdpbGwgZGlzYWJsZSB0cmFja2luZyBvbiB0aGF0IGF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNzZXRMZXJwXHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MV0gLSBUaGUgYW1vdW50IGFkZGVkIHRvIHRoZSBob3Jpem9udGFsIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHRoZSBmb2xsb3cgdGFyZ2V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTFdIC0gVGhlIGFtb3VudCBhZGRlZCB0byB0aGUgdmVydGljYWwgbGluZWFyIGludGVycG9sYXRpb24gb2YgdGhlIGZvbGxvdyB0YXJnZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldExlcnA6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDE7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMubGVycC5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgY2FtZXJhIGZyb20gaXRzIGZvbGxvdyB0YXJnZXQuXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBzdWJ0cmFjdGVkIGZyb20gdGhlIHRhcmdldHMgcG9zaXRpb24gZHVyaW5nIHRoZSBDYW1lcmFzIHVwZGF0ZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc2V0Rm9sbG93T2Zmc2V0XHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgY2FtZXJhIGZvbGxvdyB0YXJnZXQueCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgY2FtZXJhIGZvbGxvdyB0YXJnZXQueSBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9sbG93T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENhbWVyYSB0byBmb2xsb3cgYSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGVuYWJsZWQgdGhlIENhbWVyYSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IGl0cyBzY3JvbGwgcG9zaXRpb24gdG8ga2VlcCB0aGUgdGFyZ2V0IEdhbWUgT2JqZWN0XHJcbiAgICAgKiBpbiBpdHMgY2VudGVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiB2YWx1ZSB1c2VkIGluIHRoZSBmb2xsb3cgY29kZS5cclxuICAgICAqIFVzZSBsb3cgbGVycCB2YWx1ZXMgKHN1Y2ggYXMgMC4xKSB0byBhdXRvbWF0aWNhbGx5IHNtb290aCB0aGUgY2FtZXJhIG1vdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZmluZCB5b3UncmUgZ2V0dGluZyBhIHNsaWdodCBcImppdHRlclwiIGVmZmVjdCB3aGVuIGZvbGxvd2luZyBhbiBvYmplY3QgaXQncyBwcm9iYWJseSB0byBkbyB3aXRoIHN1Yi1waXhlbFxyXG4gICAgICogcmVuZGVyaW5nIG9mIHRoZSB0YXJnZXRzIHBvc2l0aW9uLiBUaGlzIGNhbiBiZSByb3VuZGVkIGJ5IHNldHRpbmcgdGhlIGByb3VuZFBpeGVsc2AgYXJndW1lbnQgdG8gYHRydWVgIHRvXHJcbiAgICAgKiBmb3JjZSBmdWxsIHBpeGVsIHJvdW5kaW5nIHJlbmRlcmluZy4gTm90ZSB0aGF0IHRoaXMgY2FuIHN0aWxsIGJlIGJyb2tlbiBpZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBub24taW50ZWdlciB6b29tXHJcbiAgICAgKiB2YWx1ZSBvbiB0aGUgY2FtZXJhLiBTbyBiZSBzdXJlIHRvIGtlZXAgdGhlIGNhbWVyYSB6b29tIHRvIGludGVnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc3RhcnRGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fG9iamVjdCl9IHRhcmdldCAtIFRoZSB0YXJnZXQgZm9yIHRoZSBDYW1lcmEgdG8gZm9sbG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcm91bmRQaXhlbHM9ZmFsc2VdIC0gUm91bmQgdGhlIGNhbWVyYSBwb3NpdGlvbiB0byB3aG9sZSBpbnRlZ2VycyB0byBhdm9pZCBzdWItcGl4ZWwgcmVuZGVyaW5nP1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZXJwWD0xXSAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGxpbmVhciBpbnRlcnBvbGF0aW9uIHRvIHVzZSB3aGVuIGhvcml6b250YWxseSB0cmFja2luZyB0aGUgdGFyZ2V0LiBUaGUgY2xvc2VyIHRoZSB2YWx1ZSB0byAxLCB0aGUgZmFzdGVyIHRoZSBjYW1lcmEgd2lsbCB0cmFjay5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVycFk9MV0gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4gVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaW50ZXJwb2xhdGlvbiB0byB1c2Ugd2hlbiB2ZXJ0aWNhbGx5IHRyYWNraW5nIHRoZSB0YXJnZXQuIFRoZSBjbG9zZXIgdGhlIHZhbHVlIHRvIDEsIHRoZSBmYXN0ZXIgdGhlIGNhbWVyYSB3aWxsIHRyYWNrLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gVGhlIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIGNhbWVyYSBmb2xsb3cgdGFyZ2V0LnggcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBUaGUgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIGNhbWVyYSBmb2xsb3cgdGFyZ2V0LnkgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0Rm9sbG93OiBmdW5jdGlvbiAodGFyZ2V0LCByb3VuZFBpeGVscywgbGVycFgsIGxlcnBZLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyb3VuZFBpeGVscyA9PT0gdW5kZWZpbmVkKSB7IHJvdW5kUGl4ZWxzID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAobGVycFggPT09IHVuZGVmaW5lZCkgeyBsZXJwWCA9IDE7IH1cclxuICAgICAgICBpZiAobGVycFkgPT09IHVuZGVmaW5lZCkgeyBsZXJwWSA9IGxlcnBYOyB9XHJcbiAgICAgICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IG9mZnNldFg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fZm9sbG93ID0gdGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLnJvdW5kUGl4ZWxzID0gcm91bmRQaXhlbHM7XHJcblxyXG4gICAgICAgIGxlcnBYID0gQ2xhbXAobGVycFgsIDAsIDEpO1xyXG4gICAgICAgIGxlcnBZID0gQ2xhbXAobGVycFksIDAsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnAuc2V0KGxlcnBYLCBsZXJwWSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9sbG93T2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB0aGlzLndpZHRoIC8gMjtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgdmFyIGZ4ID0gdGFyZ2V0LnggLSBvZmZzZXRYO1xyXG4gICAgICAgIHZhciBmeSA9IHRhcmdldC55IC0gb2Zmc2V0WTtcclxuXHJcbiAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoZngsIGZ5KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxYID0gZnggLSBvcmlnaW5YO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IGZ5IC0gb3JpZ2luWTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxYID0gdGhpcy5jbGFtcFgodGhpcy5zY3JvbGxYKTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gdGhpcy5jbGFtcFkodGhpcy5zY3JvbGxZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGEgQ2FtZXJhIGZyb20gZm9sbG93aW5nIGEgR2FtZSBPYmplY3QsIGlmIHByZXZpb3VzbHkgc2V0IHZpYSBgQ2FtZXJhLnN0YXJ0Rm9sbG93YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3N0b3BGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc3RvcEZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9mb2xsb3cgPSBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgYW55IGFjdGl2ZSBGWCwgc3VjaCBhcyBhIGZhZGUsIGZsYXNoIG9yIHNoYWtlLiBVc2VmdWwgdG8gY2FsbCBhZnRlciBhIGZhZGUgaW4gb3JkZXIgdG9cclxuICAgICAqIHJlbW92ZSB0aGUgZmFkZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3Jlc2V0RlhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVzZXRGWDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhbkVmZmVjdC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuc2hha2VFZmZlY3QucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmZsYXNoRWZmZWN0LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5mYWRlRWZmZWN0LnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBnZW5lcmF0ZWQgYnkgdGhlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIG9yIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhbkVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21FZmZlY3QudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICAgICAgdGhpcy5zaGFrZUVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmZsYXNoRWZmZWN0LnVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFkZUVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIENhbWVyYSBpbnN0YW5jZS4gWW91IHJhcmVseSBuZWVkIHRvIGNhbGwgdGhpcyBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIENhbWVyYSBNYW5hZ2VyLiBJZiB5b3Ugd2lzaCB0byBkZXN0cm95IGEgQ2FtZXJhIHBsZWFzZSB1c2UgYENhbWVyYU1hbmFnZXIucmVtb3ZlYCBhc1xyXG4gICAgICogY2FtZXJhcyBhcmUgc3RvcmVkIGluIGEgcG9vbCwgcmVhZHkgZm9yIHJlY3ljbGluZyBsYXRlciwgYW5kIGNhbGxpbmcgdGhpcyBkaXJlY3RseSB3aWxsIHByZXZlbnQgdGhhdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2Rlc3Ryb3lcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNsZWFyUmVuZGVyVG9UZXh0dXJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRGWCgpO1xyXG5cclxuICAgICAgICBCYXNlQ2FtZXJhLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvbGxvdyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZGVhZHpvbmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbWVyYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/Camera.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/CameraManager.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/CameraManager.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/src/cameras/2d/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar ScaleEvents = __webpack_require__(/*! ../../scale/events */ \"./node_modules/phaser/src/scale/events/index.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Camera Manager is a plugin that belongs to a Scene and is responsible for managing all of the Scene Cameras.\r\n * \r\n * By default you can access the Camera Manager from within a Scene using `this.cameras`, although this can be changed\r\n * in your game config.\r\n * \r\n * Create new Cameras using the `add` method. Or extend the Camera class with your own addition code and then add\r\n * the new Camera in using the `addExisting` method.\r\n * \r\n * Cameras provide a view into your game world, and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis. The Camera Manager can manage up to 31 unique \r\n * 'Game Object ignore capable' Cameras. Any Cameras beyond 31 that you create will all be given a Camera ID of\r\n * zero, meaning that they cannot be used for Game Object exclusion. This means if you need your Camera to ignore\r\n * Game Objects, make sure it's one of the first 31 created.\r\n *\r\n * A Camera also has built-in special effects including Fade, Flash, Camera Shake, Pan and Zoom.\r\n *\r\n * @class CameraManager\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that owns the Camera Manager plugin.\r\n */\r\nvar CameraManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function CameraManager (scene)\r\n    {\r\n        /**\r\n         * The Scene that owns the Camera Manager plugin.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems handler for the Scene that owns the Camera Manager.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * All Cameras created by, or added to, this Camera Manager, will have their `roundPixels`\r\n         * property set to match this value. By default it is set to match the value set in the\r\n         * game configuration, but can be changed at any point. Equally, individual cameras can\r\n         * also be changed as needed.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#roundPixels\r\n         * @type {boolean}\r\n         * @since 3.11.0\r\n         */\r\n        this.roundPixels = scene.sys.game.config.roundPixels;\r\n\r\n        /**\r\n         * An Array of the Camera objects being managed by this Camera Manager.\r\n         * The Cameras are updated and rendered in the same order in which they appear in this array.\r\n         * Do not directly add or remove entries to this array. However, you can move the contents\r\n         * around the array should you wish to adjust the display order.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#cameras\r\n         * @type {Phaser.Cameras.Scene2D.Camera[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.cameras = [];\r\n\r\n        /**\r\n         * A handy reference to the 'main' camera. By default this is the first Camera the\r\n         * Camera Manager creates. You can also set it directly, or use the `makeMain` argument\r\n         * in the `add` and `addExisting` methods. It allows you to access it from your game:\r\n         * \r\n         * ```javascript\r\n         * var cam = this.cameras.main;\r\n         * ```\r\n         * \r\n         * Also see the properties `camera1`, `camera2` and so on.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#main\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @since 3.0.0\r\n         */\r\n        this.main;\r\n\r\n        /**\r\n         * A default un-transformed Camera that doesn't exist on the camera list and doesn't\r\n         * count towards the total number of cameras being managed. It exists for other\r\n         * systems, as well as your own code, should they require a basic un-transformed\r\n         * camera instance from which to calculate a view matrix.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.CameraManager#default\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @since 3.17.0\r\n         */\r\n        this.default;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#boot\r\n     * @private\r\n     * @listens Phaser.Scenes.Events#DESTROY\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        var sys = this.systems;\r\n\r\n        if (sys.settings.cameras)\r\n        {\r\n            //  We have cameras to create\r\n            this.fromJSON(sys.settings.cameras);\r\n        }\r\n        else\r\n        {\r\n            //  Make one\r\n            this.add();\r\n        }\r\n\r\n        this.main = this.cameras[0];\r\n\r\n        //  Create a default camera\r\n        this.default = new Camera(0, 0, sys.scale.width, sys.scale.height).setScene(this.scene);\r\n\r\n        sys.game.scale.on(ScaleEvents.RESIZE, this.onResize, this);\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#start\r\n     * @private\r\n     * @listens Phaser.Scenes.Events#UPDATE\r\n     * @listens Phaser.Scenes.Events#SHUTDOWN\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (!this.main)\r\n        {\r\n            var sys = this.systems;\r\n\r\n            if (sys.settings.cameras)\r\n            {\r\n                //  We have cameras to create\r\n                this.fromJSON(sys.settings.cameras);\r\n            }\r\n            else\r\n            {\r\n                //  Make one\r\n                this.add();\r\n            }\r\n    \r\n            this.main = this.cameras[0];\r\n        }\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Adds a new Camera into the Camera Manager. The Camera Manager can support up to 31 different Cameras.\r\n     * \r\n     * Each Camera has its own viewport, which controls the size of the Camera and its position within the canvas.\r\n     * \r\n     * Use the `Camera.scrollX` and `Camera.scrollY` properties to change where the Camera is looking, or the\r\n     * Camera methods such as `centerOn`. Cameras also have built in special effects, such as fade, flash, shake,\r\n     * pan and zoom.\r\n     * \r\n     * By default Cameras are transparent and will render anything that they can see based on their `scrollX`\r\n     * and `scrollY` values. Game Objects can be set to be ignored by a Camera by using the `Camera.ignore` method.\r\n     * \r\n     * The Camera will have its `roundPixels` property set to whatever `CameraManager.roundPixels` is. You can change\r\n     * it after creation if required.\r\n     * \r\n     * See the Camera class documentation for more details.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [x=0] - The horizontal position of the Camera viewport.\r\n     * @param {integer} [y=0] - The vertical position of the Camera viewport.\r\n     * @param {integer} [width] - The width of the Camera viewport. If not given it'll be the game config size.\r\n     * @param {integer} [height] - The height of the Camera viewport. If not given it'll be the game config size.\r\n     * @param {boolean} [makeMain=false] - Set this Camera as being the 'main' camera. This just makes the property `main` a reference to it.\r\n     * @param {string} [name=''] - The name of the Camera.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The newly created Camera.\r\n     */\r\n    add: function (x, y, width, height, makeMain, name)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.scene.sys.scale.width; }\r\n        if (height === undefined) { height = this.scene.sys.scale.height; }\r\n        if (makeMain === undefined) { makeMain = false; }\r\n        if (name === undefined) { name = ''; }\r\n\r\n        var camera = new Camera(x, y, width, height);\r\n\r\n        camera.setName(name);\r\n        camera.setScene(this.scene);\r\n        camera.setRoundPixels(this.roundPixels);\r\n\r\n        camera.id = this.getNextID();\r\n\r\n        this.cameras.push(camera);\r\n\r\n        if (makeMain)\r\n        {\r\n            this.main = camera;\r\n        }\r\n\r\n        return camera;\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Camera into the Camera Manager.\r\n     * \r\n     * The Camera should either be a `Phaser.Cameras.Scene2D.Camera` instance, or a class that extends from it.\r\n     * \r\n     * The Camera will have its `roundPixels` property set to whatever `CameraManager.roundPixels` is. You can change\r\n     * it after addition if required.\r\n     * \r\n     * The Camera will be assigned an ID, which is used for Game Object exclusion and then added to the\r\n     * manager. As long as it doesn't already exist in the manager it will be added then returned.\r\n     * \r\n     * If this method returns `null` then the Camera already exists in this Camera Manager.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#addExisting\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to be added to the Camera Manager.\r\n     * @param {boolean} [makeMain=false] - Set this Camera as being the 'main' camera. This just makes the property `main` a reference to it.\r\n     *\r\n     * @return {?Phaser.Cameras.Scene2D.Camera} The Camera that was added to the Camera Manager, or `null` if it couldn't be added.\r\n     */\r\n    addExisting: function (camera, makeMain)\r\n    {\r\n        if (makeMain === undefined) { makeMain = false; }\r\n\r\n        var index = this.cameras.indexOf(camera);\r\n\r\n        if (index === -1)\r\n        {\r\n            camera.id = this.getNextID();\r\n\r\n            camera.setRoundPixels(this.roundPixels);\r\n\r\n            this.cameras.push(camera);\r\n\r\n            if (makeMain)\r\n            {\r\n                this.main = camera;\r\n            }\r\n    \r\n            return camera;\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Gets the next available Camera ID number.\r\n     * \r\n     * The Camera Manager supports up to 31 unique cameras, after which the ID returned will always be zero.\r\n     * You can create additional cameras beyond 31, but they cannot be used for Game Object exclusion.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#getNextID\r\n     * @private\r\n     * @since 3.11.0\r\n     *\r\n     * @return {number} The next available Camera ID, or 0 if they're all already in use.\r\n     */\r\n    getNextID: function ()\r\n    {\r\n        var cameras = this.cameras;\r\n\r\n        var testID = 1;\r\n\r\n        //  Find the first free camera ID we can use\r\n\r\n        for (var t = 0; t < 32; t++)\r\n        {\r\n            var found = false;\r\n\r\n            for (var i = 0; i < cameras.length; i++)\r\n            {\r\n                var camera = cameras[i];\r\n\r\n                if (camera && camera.id === testID)\r\n                {\r\n                    found = true;\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            if (found)\r\n            {\r\n                testID = testID << 1;\r\n            }\r\n            else\r\n            {\r\n                return testID;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * Gets the total number of Cameras in this Camera Manager.\r\n     * \r\n     * If the optional `isVisible` argument is set it will only count Cameras that are currently visible.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#getTotal\r\n     * @since 3.11.0\r\n     * \r\n     * @param {boolean} [isVisible=false] - Set the `true` to only include visible Cameras in the total.\r\n     *\r\n     * @return {integer} The total number of Cameras in this Camera Manager.\r\n     */\r\n    getTotal: function (isVisible)\r\n    {\r\n        if (isVisible === undefined) { isVisible = false; }\r\n\r\n        var total = 0;\r\n\r\n        var cameras = this.cameras;\r\n\r\n        for (var i = 0; i < cameras.length; i++)\r\n        {\r\n            var camera = cameras[i];\r\n\r\n            if (!isVisible || (isVisible && camera.visible))\r\n            {\r\n                total++;\r\n            }\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * Populates this Camera Manager based on the given configuration object, or an array of config objects.\r\n     * \r\n     * See the `Phaser.Types.Cameras.Scene2D.CameraConfig` documentation for details of the object structure.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#fromJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.Cameras.Scene2D.CameraConfig|Phaser.Types.Cameras.Scene2D.CameraConfig[])} config - A Camera configuration object, or an array of them, to be added to this Camera Manager.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.CameraManager} This Camera Manager instance.\r\n     */\r\n    fromJSON: function (config)\r\n    {\r\n        if (!Array.isArray(config))\r\n        {\r\n            config = [ config ];\r\n        }\r\n\r\n        var gameWidth = this.scene.sys.scale.width;\r\n        var gameHeight = this.scene.sys.scale.height;\r\n\r\n        for (var i = 0; i < config.length; i++)\r\n        {\r\n            var cameraConfig = config[i];\r\n\r\n            var x = GetFastValue(cameraConfig, 'x', 0);\r\n            var y = GetFastValue(cameraConfig, 'y', 0);\r\n            var width = GetFastValue(cameraConfig, 'width', gameWidth);\r\n            var height = GetFastValue(cameraConfig, 'height', gameHeight);\r\n\r\n            var camera = this.add(x, y, width, height);\r\n\r\n            //  Direct properties\r\n            camera.name = GetFastValue(cameraConfig, 'name', '');\r\n            camera.zoom = GetFastValue(cameraConfig, 'zoom', 1);\r\n            camera.rotation = GetFastValue(cameraConfig, 'rotation', 0);\r\n            camera.scrollX = GetFastValue(cameraConfig, 'scrollX', 0);\r\n            camera.scrollY = GetFastValue(cameraConfig, 'scrollY', 0);\r\n            camera.roundPixels = GetFastValue(cameraConfig, 'roundPixels', false);\r\n            camera.visible = GetFastValue(cameraConfig, 'visible', true);\r\n\r\n            // Background Color\r\n\r\n            var backgroundColor = GetFastValue(cameraConfig, 'backgroundColor', false);\r\n\r\n            if (backgroundColor)\r\n            {\r\n                camera.setBackgroundColor(backgroundColor);\r\n            }\r\n\r\n            //  Bounds\r\n\r\n            var boundsConfig = GetFastValue(cameraConfig, 'bounds', null);\r\n\r\n            if (boundsConfig)\r\n            {\r\n                var bx = GetFastValue(boundsConfig, 'x', 0);\r\n                var by = GetFastValue(boundsConfig, 'y', 0);\r\n                var bwidth = GetFastValue(boundsConfig, 'width', gameWidth);\r\n                var bheight = GetFastValue(boundsConfig, 'height', gameHeight);\r\n\r\n                camera.setBounds(bx, by, bwidth, bheight);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets a Camera based on its name.\r\n     * \r\n     * Camera names are optional and don't have to be set, so this method is only of any use if you\r\n     * have given your Cameras unique names.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#getCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of the Camera.\r\n     *\r\n     * @return {?Phaser.Cameras.Scene2D.Camera} The first Camera with a name matching the given string, otherwise `null`.\r\n     */\r\n    getCamera: function (name)\r\n    {\r\n        var cameras = this.cameras;\r\n\r\n        for (var i = 0; i < cameras.length; i++)\r\n        {\r\n            if (cameras[i].name === name)\r\n            {\r\n                return cameras[i];\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all cameras below the given Pointer.\r\n     * \r\n     * The first camera in the array is the top-most camera in the camera list.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#getCamerasBelowPointer\r\n     * @since 3.10.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to check against.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera[]} An array of cameras below the Pointer.\r\n     */\r\n    getCamerasBelowPointer: function (pointer)\r\n    {\r\n        var cameras = this.cameras;\r\n\r\n        var x = pointer.x;\r\n        var y = pointer.y;\r\n\r\n        var output = [];\r\n\r\n        for (var i = 0; i < cameras.length; i++)\r\n        {\r\n            var camera = cameras[i];\r\n\r\n            if (camera.visible && camera.inputEnabled && RectangleContains(camera, x, y))\r\n            {\r\n                //  So the top-most camera is at the top of the search array\r\n                output.unshift(camera);\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Removes the given Camera, or an array of Cameras, from this Camera Manager.\r\n     * \r\n     * If found in the Camera Manager it will be immediately removed from the local cameras array.\r\n     * If also currently the 'main' camera, 'main' will be reset to be camera 0.\r\n     * \r\n     * The removed Cameras are automatically destroyed if the `runDestroy` argument is `true`, which is the default.\r\n     * If you wish to re-use the cameras then set this to `false`, but know that they will retain their references\r\n     * and internal data until destroyed or re-added to a Camera Manager.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Cameras.Scene2D.Camera|Phaser.Cameras.Scene2D.Camera[])} camera - The Camera, or an array of Cameras, to be removed from this Camera Manager.\r\n     * @param {boolean} [runDestroy=true] - Automatically call `Camera.destroy` on each Camera removed from this Camera Manager.\r\n     * \r\n     * @return {integer} The total number of Cameras removed.\r\n     */\r\n    remove: function (camera, runDestroy)\r\n    {\r\n        if (runDestroy === undefined) { runDestroy = true; }\r\n\r\n        if (!Array.isArray(camera))\r\n        {\r\n            camera = [ camera ];\r\n        }\r\n\r\n        var total = 0;\r\n        var cameras = this.cameras;\r\n\r\n        for (var i = 0; i < camera.length; i++)\r\n        {\r\n            var index = cameras.indexOf(camera[i]);\r\n\r\n            if (index !== -1)\r\n            {\r\n                if (runDestroy)\r\n                {\r\n                    cameras[index].destroy();\r\n                }\r\n\r\n                cameras.splice(index, 1);\r\n\r\n                total++;\r\n            }\r\n        }\r\n\r\n        if (!this.main && cameras[0])\r\n        {\r\n            this.main = cameras[0];\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * The internal render method. This is called automatically by the Scene and should not be invoked directly.\r\n     * \r\n     * It will iterate through all local cameras and render them in turn, as long as they're visible and have\r\n     * an alpha level > 0.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#render\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Renderer that will render the children to this camera.\r\n     * @param {Phaser.GameObjects.GameObject[]} children - An array of renderable Game Objects.\r\n     * @param {number} interpolation - Interpolation value. Reserved for future use.\r\n     */\r\n    render: function (renderer, children, interpolation)\r\n    {\r\n        var scene = this.scene;\r\n        var cameras = this.cameras;\r\n\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            var camera = cameras[i];\r\n\r\n            if (camera.visible && camera.alpha > 0)\r\n            {\r\n                //  Hard-coded to 1 for now\r\n                camera.preRender(1);\r\n\r\n                renderer.render(scene, children, interpolation, camera);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resets this Camera Manager.\r\n     * \r\n     * This will iterate through all current Cameras, destroying them all, then it will reset the\r\n     * cameras array, reset the ID counter and create 1 new single camera using the default values.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#resetAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The freshly created main Camera.\r\n     */\r\n    resetAll: function ()\r\n    {\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            this.cameras[i].destroy();\r\n        }\r\n\r\n        this.cameras = [];\r\n\r\n        this.main = this.add();\r\n\r\n        return this.main;\r\n    },\r\n\r\n    /**\r\n     * The main update loop. Called automatically when the Scene steps.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#update\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            this.cameras[i].update(time, delta);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The event handler that manages the `resize` event dispatched by the Scale Manager.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#onResize\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Structs.Size} gameSize - The default Game Size object. This is the un-modified game dimensions.\r\n     * @param {Phaser.Structs.Size} baseSize - The base Size object. The game dimensions multiplied by the resolution. The canvas width / height values match this.\r\n     */\r\n    onResize: function (gameSize, baseSize, displaySize, resolution, previousWidth, previousHeight)\r\n    {\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            var cam = this.cameras[i];\r\n\r\n            //  if camera is at 0x0 and was the size of the previous game size, then we can safely assume it\r\n            //  should be updated to match the new game size too\r\n\r\n            if (cam._x === 0 && cam._y === 0 && cam._width === previousWidth && cam._height === previousHeight)\r\n            {\r\n                cam.setSize(baseSize.width, baseSize.height);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resizes all cameras to the given dimensions.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#resize\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} width - The new width of the camera.\r\n     * @param {number} height - The new height of the camera.\r\n     */\r\n    resize: function (width, height)\r\n    {\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            this.cameras[i].setSize(width, height);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.main = undefined;\r\n\r\n        for (var i = 0; i < this.cameras.length; i++)\r\n        {\r\n            this.cameras[i].destroy();\r\n        }\r\n\r\n        this.cameras = [];\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.CameraManager#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.default.destroy();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('CameraManager', CameraManager, 'cameras');\r\n\r\nmodule.exports = CameraManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0NhbWVyYU1hbmFnZXIuanM/MDI2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdFQUFVO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBK0I7QUFDL0Qsa0JBQWtCLG1CQUFPLENBQUMsMkVBQW9CO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLDJFQUFvQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxvQ0FBb0M7QUFDdEUsbUNBQW1DLHNDQUFzQztBQUN6RSxxQ0FBcUMsa0JBQWtCO0FBQ3ZELGlDQUFpQyxXQUFXOztBQUU1Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCOztBQUV2RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsUUFBUTtBQUMvQjtBQUNBOztBQUVBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1COztBQUUxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGLGVBQWUsZ0NBQWdDO0FBQy9DLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9DYW1lcmFNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi9DYW1lcmEnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgUmVjdGFuZ2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9Db250YWlucycpO1xyXG52YXIgU2NhbGVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9zY2FsZS9ldmVudHMnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQ2FtZXJhIE1hbmFnZXIgaXMgYSBwbHVnaW4gdGhhdCBiZWxvbmdzIHRvIGEgU2NlbmUgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgb2YgdGhlIFNjZW5lIENhbWVyYXMuXHJcbiAqIFxyXG4gKiBCeSBkZWZhdWx0IHlvdSBjYW4gYWNjZXNzIHRoZSBDYW1lcmEgTWFuYWdlciBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nIGB0aGlzLmNhbWVyYXNgLCBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkXHJcbiAqIGluIHlvdXIgZ2FtZSBjb25maWcuXHJcbiAqIFxyXG4gKiBDcmVhdGUgbmV3IENhbWVyYXMgdXNpbmcgdGhlIGBhZGRgIG1ldGhvZC4gT3IgZXh0ZW5kIHRoZSBDYW1lcmEgY2xhc3Mgd2l0aCB5b3VyIG93biBhZGRpdGlvbiBjb2RlIGFuZCB0aGVuIGFkZFxyXG4gKiB0aGUgbmV3IENhbWVyYSBpbiB1c2luZyB0aGUgYGFkZEV4aXN0aW5nYCBtZXRob2QuXHJcbiAqIFxyXG4gKiBDYW1lcmFzIHByb3ZpZGUgYSB2aWV3IGludG8geW91ciBnYW1lIHdvcmxkLCBhbmQgY2FuIGJlIHBvc2l0aW9uZWQsIHJvdGF0ZWQsIHpvb21lZCBhbmQgc2Nyb2xsZWQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIEEgQ2FtZXJhIGNvbnNpc3RzIG9mIHR3byBlbGVtZW50czogVGhlIHZpZXdwb3J0IGFuZCB0aGUgc2Nyb2xsIHZhbHVlcy5cclxuICpcclxuICogVGhlIHZpZXdwb3J0IGlzIHRoZSBwaHlzaWNhbCBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgQ2FtZXJhIHdpdGhpbiB5b3VyIGdhbWUuIENhbWVyYXMsIGJ5IGRlZmF1bHQsIGFyZVxyXG4gKiBjcmVhdGVkIHRoZSBzYW1lIHNpemUgYXMgeW91ciBnYW1lLCBidXQgdGhlaXIgcG9zaXRpb24gYW5kIHNpemUgY2FuIGJlIHNldCB0byBhbnl0aGluZy4gVGhpcyBtZWFucyBpZiB5b3VcclxuICogd2FudGVkIHRvIGNyZWF0ZSBhIGNhbWVyYSB0aGF0IHdhcyAzMjB4MjAwIGluIHNpemUsIHBvc2l0aW9uZWQgaW4gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgeW91ciBnYW1lLFxyXG4gKiB5b3UnZCBhZGp1c3QgdGhlIHZpZXdwb3J0IHRvIGRvIHRoYXQgKHVzaW5nIG1ldGhvZHMgbGlrZSBgc2V0Vmlld3BvcnRgIGFuZCBgc2V0U2l6ZWApLlxyXG4gKlxyXG4gKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2Ugd2hlcmUgdGhlIENhbWVyYSBpcyBsb29raW5nIGluIHlvdXIgZ2FtZSwgdGhlbiB5b3Ugc2Nyb2xsIGl0LiBZb3UgY2FuIGRvIHRoaXNcclxuICogdmlhIHRoZSBwcm9wZXJ0aWVzIGBzY3JvbGxYYCBhbmQgYHNjcm9sbFlgIG9yIHRoZSBtZXRob2QgYHNldFNjcm9sbGAuIFNjcm9sbGluZyBoYXMgbm8gaW1wYWN0IG9uIHRoZVxyXG4gKiB2aWV3cG9ydCwgYW5kIGNoYW5naW5nIHRoZSB2aWV3cG9ydCBoYXMgbm8gaW1wYWN0IG9uIHRoZSBzY3JvbGxpbmcuXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQgYSBDYW1lcmEgd2lsbCByZW5kZXIgYWxsIEdhbWUgT2JqZWN0cyBpdCBjYW4gc2VlLiBZb3UgY2FuIGNoYW5nZSB0aGlzIHVzaW5nIHRoZSBgaWdub3JlYCBtZXRob2QsXHJcbiAqIGFsbG93aW5nIHlvdSB0byBmaWx0ZXIgR2FtZSBPYmplY3RzIG91dCBvbiBhIHBlci1DYW1lcmEgYmFzaXMuIFRoZSBDYW1lcmEgTWFuYWdlciBjYW4gbWFuYWdlIHVwIHRvIDMxIHVuaXF1ZSBcclxuICogJ0dhbWUgT2JqZWN0IGlnbm9yZSBjYXBhYmxlJyBDYW1lcmFzLiBBbnkgQ2FtZXJhcyBiZXlvbmQgMzEgdGhhdCB5b3UgY3JlYXRlIHdpbGwgYWxsIGJlIGdpdmVuIGEgQ2FtZXJhIElEIG9mXHJcbiAqIHplcm8sIG1lYW5pbmcgdGhhdCB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBHYW1lIE9iamVjdCBleGNsdXNpb24uIFRoaXMgbWVhbnMgaWYgeW91IG5lZWQgeW91ciBDYW1lcmEgdG8gaWdub3JlXHJcbiAqIEdhbWUgT2JqZWN0cywgbWFrZSBzdXJlIGl0J3Mgb25lIG9mIHRoZSBmaXJzdCAzMSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBBIENhbWVyYSBhbHNvIGhhcyBidWlsdC1pbiBzcGVjaWFsIGVmZmVjdHMgaW5jbHVkaW5nIEZhZGUsIEZsYXNoLCBDYW1lcmEgU2hha2UsIFBhbiBhbmQgWm9vbS5cclxuICpcclxuICogQGNsYXNzIENhbWVyYU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCBvd25zIHRoZSBDYW1lcmEgTWFuYWdlciBwbHVnaW4uXHJcbiAqL1xyXG52YXIgQ2FtZXJhTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmFNYW5hZ2VyIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoZSBDYW1lcmEgTWFuYWdlciBwbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlN5c3RlbXMgaGFuZGxlciBmb3IgdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbGwgQ2FtZXJhcyBjcmVhdGVkIGJ5LCBvciBhZGRlZCB0bywgdGhpcyBDYW1lcmEgTWFuYWdlciwgd2lsbCBoYXZlIHRoZWlyIGByb3VuZFBpeGVsc2BcclxuICAgICAgICAgKiBwcm9wZXJ0eSBzZXQgdG8gbWF0Y2ggdGhpcyB2YWx1ZS4gQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gbWF0Y2ggdGhlIHZhbHVlIHNldCBpbiB0aGVcclxuICAgICAgICAgKiBnYW1lIGNvbmZpZ3VyYXRpb24sIGJ1dCBjYW4gYmUgY2hhbmdlZCBhdCBhbnkgcG9pbnQuIEVxdWFsbHksIGluZGl2aWR1YWwgY2FtZXJhcyBjYW5cclxuICAgICAgICAgKiBhbHNvIGJlIGNoYW5nZWQgYXMgbmVlZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3JvdW5kUGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSBzY2VuZS5zeXMuZ2FtZS5jb25maWcucm91bmRQaXhlbHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIEFycmF5IG9mIHRoZSBDYW1lcmEgb2JqZWN0cyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgICAgICogVGhlIENhbWVyYXMgYXJlIHVwZGF0ZWQgYW5kIHJlbmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoaXMgYXJyYXkuXHJcbiAgICAgICAgICogRG8gbm90IGRpcmVjdGx5IGFkZCBvciByZW1vdmUgZW50cmllcyB0byB0aGlzIGFycmF5LiBIb3dldmVyLCB5b3UgY2FuIG1vdmUgdGhlIGNvbnRlbnRzXHJcbiAgICAgICAgICogYXJvdW5kIHRoZSBhcnJheSBzaG91bGQgeW91IHdpc2ggdG8gYWRqdXN0IHRoZSBkaXNwbGF5IG9yZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2NhbWVyYXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBoYW5keSByZWZlcmVuY2UgdG8gdGhlICdtYWluJyBjYW1lcmEuIEJ5IGRlZmF1bHQgdGhpcyBpcyB0aGUgZmlyc3QgQ2FtZXJhIHRoZVxyXG4gICAgICAgICAqIENhbWVyYSBNYW5hZ2VyIGNyZWF0ZXMuIFlvdSBjYW4gYWxzbyBzZXQgaXQgZGlyZWN0bHksIG9yIHVzZSB0aGUgYG1ha2VNYWluYCBhcmd1bWVudFxyXG4gICAgICAgICAqIGluIHRoZSBgYWRkYCBhbmQgYGFkZEV4aXN0aW5nYCBtZXRob2RzLiBJdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBpdCBmcm9tIHlvdXIgZ2FtZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgICAgICogdmFyIGNhbSA9IHRoaXMuY2FtZXJhcy5tYWluO1xyXG4gICAgICAgICAqIGBgYFxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFsc28gc2VlIHRoZSBwcm9wZXJ0aWVzIGBjYW1lcmExYCwgYGNhbWVyYTJgIGFuZCBzbyBvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNtYWluXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFpbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHVuLXRyYW5zZm9ybWVkIENhbWVyYSB0aGF0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIGNhbWVyYSBsaXN0IGFuZCBkb2Vzbid0XHJcbiAgICAgICAgICogY291bnQgdG93YXJkcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNhbWVyYXMgYmVpbmcgbWFuYWdlZC4gSXQgZXhpc3RzIGZvciBvdGhlclxyXG4gICAgICAgICAqIHN5c3RlbXMsIGFzIHdlbGwgYXMgeW91ciBvd24gY29kZSwgc2hvdWxkIHRoZXkgcmVxdWlyZSBhIGJhc2ljIHVuLXRyYW5zZm9ybWVkXHJcbiAgICAgICAgICogY2FtZXJhIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gY2FsY3VsYXRlIGEgdmlldyBtYXRyaXguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZGVmYXVsdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0O1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGxpc3RlbnMgUGhhc2VyLlNjZW5lcy5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN5cyA9IHRoaXMuc3lzdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN5cy5zZXR0aW5ncy5jYW1lcmFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGhhdmUgY2FtZXJhcyB0byBjcmVhdGVcclxuICAgICAgICAgICAgdGhpcy5mcm9tSlNPTihzeXMuc2V0dGluZ3MuY2FtZXJhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNYWtlIG9uZVxyXG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tYWluID0gdGhpcy5jYW1lcmFzWzBdO1xyXG5cclxuICAgICAgICAvLyAgQ3JlYXRlIGEgZGVmYXVsdCBjYW1lcmFcclxuICAgICAgICB0aGlzLmRlZmF1bHQgPSBuZXcgQ2FtZXJhKDAsIDAsIHN5cy5zY2FsZS53aWR0aCwgc3lzLnNjYWxlLmhlaWdodCkuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcblxyXG4gICAgICAgIHN5cy5nYW1lLnNjYWxlLm9uKFNjYWxlRXZlbnRzLlJFU0laRSwgdGhpcy5vblJlc2l6ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5TY2VuZXMuRXZlbnRzI1VQREFURVxyXG4gICAgICogQGxpc3RlbnMgUGhhc2VyLlNjZW5lcy5FdmVudHMjU0hVVERPV05cclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMubWFpbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzeXMgPSB0aGlzLnN5c3RlbXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3lzLnNldHRpbmdzLmNhbWVyYXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSBoYXZlIGNhbWVyYXMgdG8gY3JlYXRlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21KU09OKHN5cy5zZXR0aW5ncy5jYW1lcmFzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBNYWtlIG9uZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMubWFpbiA9IHRoaXMuY2FtZXJhc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgQ2FtZXJhIGludG8gdGhlIENhbWVyYSBNYW5hZ2VyLiBUaGUgQ2FtZXJhIE1hbmFnZXIgY2FuIHN1cHBvcnQgdXAgdG8gMzEgZGlmZmVyZW50IENhbWVyYXMuXHJcbiAgICAgKiBcclxuICAgICAqIEVhY2ggQ2FtZXJhIGhhcyBpdHMgb3duIHZpZXdwb3J0LCB3aGljaCBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgQ2FtZXJhIGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjYW52YXMuXHJcbiAgICAgKiBcclxuICAgICAqIFVzZSB0aGUgYENhbWVyYS5zY3JvbGxYYCBhbmQgYENhbWVyYS5zY3JvbGxZYCBwcm9wZXJ0aWVzIHRvIGNoYW5nZSB3aGVyZSB0aGUgQ2FtZXJhIGlzIGxvb2tpbmcsIG9yIHRoZVxyXG4gICAgICogQ2FtZXJhIG1ldGhvZHMgc3VjaCBhcyBgY2VudGVyT25gLiBDYW1lcmFzIGFsc28gaGF2ZSBidWlsdCBpbiBzcGVjaWFsIGVmZmVjdHMsIHN1Y2ggYXMgZmFkZSwgZmxhc2gsIHNoYWtlLFxyXG4gICAgICogcGFuIGFuZCB6b29tLlxyXG4gICAgICogXHJcbiAgICAgKiBCeSBkZWZhdWx0IENhbWVyYXMgYXJlIHRyYW5zcGFyZW50IGFuZCB3aWxsIHJlbmRlciBhbnl0aGluZyB0aGF0IHRoZXkgY2FuIHNlZSBiYXNlZCBvbiB0aGVpciBgc2Nyb2xsWGBcclxuICAgICAqIGFuZCBgc2Nyb2xsWWAgdmFsdWVzLiBHYW1lIE9iamVjdHMgY2FuIGJlIHNldCB0byBiZSBpZ25vcmVkIGJ5IGEgQ2FtZXJhIGJ5IHVzaW5nIHRoZSBgQ2FtZXJhLmlnbm9yZWAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHdpbGwgaGF2ZSBpdHMgYHJvdW5kUGl4ZWxzYCBwcm9wZXJ0eSBzZXQgdG8gd2hhdGV2ZXIgYENhbWVyYU1hbmFnZXIucm91bmRQaXhlbHNgIGlzLiBZb3UgY2FuIGNoYW5nZVxyXG4gICAgICogaXQgYWZ0ZXIgY3JlYXRpb24gaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSB0aGUgQ2FtZXJhIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuIElmIG5vdCBnaXZlbiBpdCdsbCBiZSB0aGUgZ2FtZSBjb25maWcgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuIElmIG5vdCBnaXZlbiBpdCdsbCBiZSB0aGUgZ2FtZSBjb25maWcgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21ha2VNYWluPWZhbHNlXSAtIFNldCB0aGlzIENhbWVyYSBhcyBiZWluZyB0aGUgJ21haW4nIGNhbWVyYS4gVGhpcyBqdXN0IG1ha2VzIHRoZSBwcm9wZXJ0eSBgbWFpbmAgYSByZWZlcmVuY2UgdG8gaXQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9JyddIC0gVGhlIG5hbWUgb2YgdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIG5ld2x5IGNyZWF0ZWQgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtYWtlTWFpbiwgbmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUuaGVpZ2h0OyB9XHJcbiAgICAgICAgaWYgKG1ha2VNYWluID09PSB1bmRlZmluZWQpIHsgbWFrZU1haW4gPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHsgbmFtZSA9ICcnOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBjYW1lcmEuc2V0TmFtZShuYW1lKTtcclxuICAgICAgICBjYW1lcmEuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcbiAgICAgICAgY2FtZXJhLnNldFJvdW5kUGl4ZWxzKHRoaXMucm91bmRQaXhlbHMpO1xyXG5cclxuICAgICAgICBjYW1lcmEuaWQgPSB0aGlzLmdldE5leHRJRCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChjYW1lcmEpO1xyXG5cclxuICAgICAgICBpZiAobWFrZU1haW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1haW4gPSBjYW1lcmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgQ2FtZXJhIGludG8gdGhlIENhbWVyYSBNYW5hZ2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHNob3VsZCBlaXRoZXIgYmUgYSBgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFgIGluc3RhbmNlLCBvciBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBmcm9tIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHdpbGwgaGF2ZSBpdHMgYHJvdW5kUGl4ZWxzYCBwcm9wZXJ0eSBzZXQgdG8gd2hhdGV2ZXIgYENhbWVyYU1hbmFnZXIucm91bmRQaXhlbHNgIGlzLiBZb3UgY2FuIGNoYW5nZVxyXG4gICAgICogaXQgYWZ0ZXIgYWRkaXRpb24gaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBDYW1lcmEgd2lsbCBiZSBhc3NpZ25lZCBhbiBJRCwgd2hpY2ggaXMgdXNlZCBmb3IgR2FtZSBPYmplY3QgZXhjbHVzaW9uIGFuZCB0aGVuIGFkZGVkIHRvIHRoZVxyXG4gICAgICogbWFuYWdlci4gQXMgbG9uZyBhcyBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIG1hbmFnZXIgaXQgd2lsbCBiZSBhZGRlZCB0aGVuIHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYCB0aGVuIHRoZSBDYW1lcmEgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNhZGRFeGlzdGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBiZSBhZGRlZCB0byB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYWtlTWFpbj1mYWxzZV0gLSBTZXQgdGhpcyBDYW1lcmEgYXMgYmVpbmcgdGhlICdtYWluJyBjYW1lcmEuIFRoaXMganVzdCBtYWtlcyB0aGUgcHJvcGVydHkgYG1haW5gIGEgcmVmZXJlbmNlIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgQ2FtZXJhIE1hbmFnZXIsIG9yIGBudWxsYCBpZiBpdCBjb3VsZG4ndCBiZSBhZGRlZC5cclxuICAgICAqL1xyXG4gICAgYWRkRXhpc3Rpbmc6IGZ1bmN0aW9uIChjYW1lcmEsIG1ha2VNYWluKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChtYWtlTWFpbiA9PT0gdW5kZWZpbmVkKSB7IG1ha2VNYWluID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYW1lcmFzLmluZGV4T2YoY2FtZXJhKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbWVyYS5pZCA9IHRoaXMuZ2V0TmV4dElEKCk7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuc2V0Um91bmRQaXhlbHModGhpcy5yb3VuZFBpeGVscyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1ha2VNYWluKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW4gPSBjYW1lcmE7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmV4dCBhdmFpbGFibGUgQ2FtZXJhIElEIG51bWJlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIENhbWVyYSBNYW5hZ2VyIHN1cHBvcnRzIHVwIHRvIDMxIHVuaXF1ZSBjYW1lcmFzLCBhZnRlciB3aGljaCB0aGUgSUQgcmV0dXJuZWQgd2lsbCBhbHdheXMgYmUgemVyby5cclxuICAgICAqIFlvdSBjYW4gY3JlYXRlIGFkZGl0aW9uYWwgY2FtZXJhcyBiZXlvbmQgMzEsIGJ1dCB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBHYW1lIE9iamVjdCBleGNsdXNpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZ2V0TmV4dElEXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgYXZhaWxhYmxlIENhbWVyYSBJRCwgb3IgMCBpZiB0aGV5J3JlIGFsbCBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TmV4dElEOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB2YXIgdGVzdElEID0gMTtcclxuXHJcbiAgICAgICAgLy8gIEZpbmQgdGhlIGZpcnN0IGZyZWUgY2FtZXJhIElEIHdlIGNhbiB1c2VcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCAzMjsgdCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1lcmFzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYW1lcmEgJiYgY2FtZXJhLmlkID09PSB0ZXN0SUQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRlc3RJRCA9IHRlc3RJRCA8PCAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RJRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIENhbWVyYXMgaW4gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIG9wdGlvbmFsIGBpc1Zpc2libGVgIGFyZ3VtZW50IGlzIHNldCBpdCB3aWxsIG9ubHkgY291bnQgQ2FtZXJhcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNnZXRUb3RhbFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1Zpc2libGU9ZmFsc2VdIC0gU2V0IHRoZSBgdHJ1ZWAgdG8gb25seSBpbmNsdWRlIHZpc2libGUgQ2FtZXJhcyBpbiB0aGUgdG90YWwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBDYW1lcmFzIGluIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsOiBmdW5jdGlvbiAoaXNWaXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpc1Zpc2libGUgPT09IHVuZGVmaW5lZCkgeyBpc1Zpc2libGUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG5cclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IGNhbWVyYXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzVmlzaWJsZSB8fCAoaXNWaXNpYmxlICYmIGNhbWVyYS52aXNpYmxlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG90YWwrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvcHVsYXRlcyB0aGlzIENhbWVyYSBNYW5hZ2VyIGJhc2VkIG9uIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYW4gYXJyYXkgb2YgY29uZmlnIG9iamVjdHMuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSB0aGUgYFBoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhQ29uZmlnYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIHRoZSBvYmplY3Qgc3RydWN0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2Zyb21KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUNvbmZpZ3xQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUNvbmZpZ1tdKX0gY29uZmlnIC0gQSBDYW1lcmEgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZW0sIHRvIGJlIGFkZGVkIHRvIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyfSBUaGlzIENhbWVyYSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmcm9tSlNPTjogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IFsgY29uZmlnIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2FtZVdpZHRoID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUud2lkdGg7XHJcbiAgICAgICAgdmFyIGdhbWVIZWlnaHQgPSB0aGlzLnNjZW5lLnN5cy5zY2FsZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYUNvbmZpZyA9IGNvbmZpZ1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3gnLCAwKTtcclxuICAgICAgICAgICAgdmFyIHkgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnd2lkdGgnLCBnYW1lV2lkdGgpO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ2hlaWdodCcsIGdhbWVIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuYWRkKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIERpcmVjdCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNhbWVyYS5uYW1lID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ25hbWUnLCAnJyk7XHJcbiAgICAgICAgICAgIGNhbWVyYS56b29tID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3pvb20nLCAxKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3JvdGF0aW9uJywgMCk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5zY3JvbGxYID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3Njcm9sbFgnLCAwKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjcm9sbFkgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnc2Nyb2xsWScsIDApO1xyXG4gICAgICAgICAgICBjYW1lcmEucm91bmRQaXhlbHMgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAncm91bmRQaXhlbHMnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS52aXNpYmxlID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3Zpc2libGUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJhY2tncm91bmQgQ29sb3JcclxuXHJcbiAgICAgICAgICAgIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnYmFja2dyb3VuZENvbG9yJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgQm91bmRzXHJcblxyXG4gICAgICAgICAgICB2YXIgYm91bmRzQ29uZmlnID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ2JvdW5kcycsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvdW5kc0NvbmZpZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ4ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3gnLCAwKTtcclxuICAgICAgICAgICAgICAgIHZhciBieSA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd5JywgMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYndpZHRoID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3dpZHRoJywgZ2FtZVdpZHRoKTtcclxuICAgICAgICAgICAgICAgIHZhciBiaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ2hlaWdodCcsIGdhbWVIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYS5zZXRCb3VuZHMoYngsIGJ5LCBid2lkdGgsIGJoZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgQ2FtZXJhIGJhc2VkIG9uIGl0cyBuYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBDYW1lcmEgbmFtZXMgYXJlIG9wdGlvbmFsIGFuZCBkb24ndCBoYXZlIHRvIGJlIHNldCwgc28gdGhpcyBtZXRob2QgaXMgb25seSBvZiBhbnkgdXNlIGlmIHlvdVxyXG4gICAgICogaGF2ZSBnaXZlbiB5b3VyIENhbWVyYXMgdW5pcXVlIG5hbWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2dldENhbWVyYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIGZpcnN0IENhbWVyYSB3aXRoIGEgbmFtZSBtYXRjaGluZyB0aGUgZ2l2ZW4gc3RyaW5nLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhc1tpXS5uYW1lID09PSBuYW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FtZXJhc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY2FtZXJhcyBiZWxvdyB0aGUgZ2l2ZW4gUG9pbnRlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgYXJyYXkgaXMgdGhlIHRvcC1tb3N0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZ2V0Q2FtZXJhc0JlbG93UG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBjaGVjayBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhW119IEFuIGFycmF5IG9mIGNhbWVyYXMgYmVsb3cgdGhlIFBvaW50ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldENhbWVyYXNCZWxvd1BvaW50ZXI6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB2YXIgeCA9IHBvaW50ZXIueDtcclxuICAgICAgICB2YXIgeSA9IHBvaW50ZXIueTtcclxuXHJcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW1lcmEudmlzaWJsZSAmJiBjYW1lcmEuaW5wdXRFbmFibGVkICYmIFJlY3RhbmdsZUNvbnRhaW5zKGNhbWVyYSwgeCwgeSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBTbyB0aGUgdG9wLW1vc3QgY2FtZXJhIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHNlYXJjaCBhcnJheVxyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBDYW1lcmEsIG9yIGFuIGFycmF5IG9mIENhbWVyYXMsIGZyb20gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgZm91bmQgaW4gdGhlIENhbWVyYSBNYW5hZ2VyIGl0IHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBjYW1lcmFzIGFycmF5LlxyXG4gICAgICogSWYgYWxzbyBjdXJyZW50bHkgdGhlICdtYWluJyBjYW1lcmEsICdtYWluJyB3aWxsIGJlIHJlc2V0IHRvIGJlIGNhbWVyYSAwLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVtb3ZlZCBDYW1lcmFzIGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3llZCBpZiB0aGUgYHJ1bkRlc3Ryb3lgIGFyZ3VtZW50IGlzIGB0cnVlYCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byByZS11c2UgdGhlIGNhbWVyYXMgdGhlbiBzZXQgdGhpcyB0byBgZmFsc2VgLCBidXQga25vdyB0aGF0IHRoZXkgd2lsbCByZXRhaW4gdGhlaXIgcmVmZXJlbmNlc1xyXG4gICAgICogYW5kIGludGVybmFsIGRhdGEgdW50aWwgZGVzdHJveWVkIG9yIHJlLWFkZGVkIHRvIGEgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVtdKX0gY2FtZXJhIC0gVGhlIENhbWVyYSwgb3IgYW4gYXJyYXkgb2YgQ2FtZXJhcywgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtydW5EZXN0cm95PXRydWVdIC0gQXV0b21hdGljYWxseSBjYWxsIGBDYW1lcmEuZGVzdHJveWAgb24gZWFjaCBDYW1lcmEgcmVtb3ZlZCBmcm9tIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2YgQ2FtZXJhcyByZW1vdmVkLlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChjYW1lcmEsIHJ1bkRlc3Ryb3kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJ1bkRlc3Ryb3kgPT09IHVuZGVmaW5lZCkgeyBydW5EZXN0cm95ID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FtZXJhKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbWVyYSA9IFsgY2FtZXJhIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYXMuaW5kZXhPZihjYW1lcmFbaV0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJ1bkRlc3Ryb3kpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhc1tpbmRleF0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWFpbiAmJiBjYW1lcmFzWzBdKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYWluID0gY2FtZXJhc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgcmVuZGVyIG1ldGhvZC4gVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgYW5kIHNob3VsZCBub3QgYmUgaW52b2tlZCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogSXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggYWxsIGxvY2FsIGNhbWVyYXMgYW5kIHJlbmRlciB0aGVtIGluIHR1cm4sIGFzIGxvbmcgYXMgdGhleSdyZSB2aXNpYmxlIGFuZCBoYXZlXHJcbiAgICAgKiBhbiBhbHBoYSBsZXZlbCA+IDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjcmVuZGVyXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX0gcmVuZGVyZXIgLSBUaGUgUmVuZGVyZXIgdGhhdCB3aWxsIHJlbmRlciB0aGUgY2hpbGRyZW4gdG8gdGhpcyBjYW1lcmEuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGNoaWxkcmVuIC0gQW4gYXJyYXkgb2YgcmVuZGVyYWJsZSBHYW1lIE9iamVjdHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvbiAtIEludGVycG9sYXRpb24gdmFsdWUuIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2hpbGRyZW4sIGludGVycG9sYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW1lcmEudmlzaWJsZSAmJiBjYW1lcmEuYWxwaGEgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSGFyZC1jb2RlZCB0byAxIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5wcmVSZW5kZXIoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjaGlsZHJlbiwgaW50ZXJwb2xhdGlvbiwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB3aWxsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgY3VycmVudCBDYW1lcmFzLCBkZXN0cm95aW5nIHRoZW0gYWxsLCB0aGVuIGl0IHdpbGwgcmVzZXQgdGhlXHJcbiAgICAgKiBjYW1lcmFzIGFycmF5LCByZXNldCB0aGUgSUQgY291bnRlciBhbmQgY3JlYXRlIDEgbmV3IHNpbmdsZSBjYW1lcmEgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3Jlc2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIGZyZXNobHkgY3JlYXRlZCBtYWluIENhbWVyYS5cclxuICAgICAqL1xyXG4gICAgcmVzZXRBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXNbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubWFpbiA9IHRoaXMuYWRkKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AuIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIFNjZW5lIHN0ZXBzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3VwZGF0ZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXNbaV0udXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGhhbmRsZXIgdGhhdCBtYW5hZ2VzIHRoZSBgcmVzaXplYCBldmVudCBkaXNwYXRjaGVkIGJ5IHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI29uUmVzaXplXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBnYW1lU2l6ZSAtIFRoZSBkZWZhdWx0IEdhbWUgU2l6ZSBvYmplY3QuIFRoaXMgaXMgdGhlIHVuLW1vZGlmaWVkIGdhbWUgZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX0gYmFzZVNpemUgLSBUaGUgYmFzZSBTaXplIG9iamVjdC4gVGhlIGdhbWUgZGltZW5zaW9ucyBtdWx0aXBsaWVkIGJ5IHRoZSByZXNvbHV0aW9uLiBUaGUgY2FudmFzIHdpZHRoIC8gaGVpZ2h0IHZhbHVlcyBtYXRjaCB0aGlzLlxyXG4gICAgICovXHJcbiAgICBvblJlc2l6ZTogZnVuY3Rpb24gKGdhbWVTaXplLCBiYXNlU2l6ZSwgZGlzcGxheVNpemUsIHJlc29sdXRpb24sIHByZXZpb3VzV2lkdGgsIHByZXZpb3VzSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbSA9IHRoaXMuY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBpZiBjYW1lcmEgaXMgYXQgMHgwIGFuZCB3YXMgdGhlIHNpemUgb2YgdGhlIHByZXZpb3VzIGdhbWUgc2l6ZSwgdGhlbiB3ZSBjYW4gc2FmZWx5IGFzc3VtZSBpdFxyXG4gICAgICAgICAgICAvLyAgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIG5ldyBnYW1lIHNpemUgdG9vXHJcblxyXG4gICAgICAgICAgICBpZiAoY2FtLl94ID09PSAwICYmIGNhbS5feSA9PT0gMCAmJiBjYW0uX3dpZHRoID09PSBwcmV2aW91c1dpZHRoICYmIGNhbS5faGVpZ2h0ID09PSBwcmV2aW91c0hlaWdodClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FtLnNldFNpemUoYmFzZVNpemUud2lkdGgsIGJhc2VTaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplcyBhbGwgY2FtZXJhcyB0byB0aGUgZ2l2ZW4gZGltZW5zaW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNyZXNpemVcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbWVyYS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgY2FtZXJhLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmFzW2ldLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYWluID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FtZXJhcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhc1tpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVmYXVsdC5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5QbHVnaW5DYWNoZS5yZWdpc3RlcignQ2FtZXJhTWFuYWdlcicsIENhbWVyYU1hbmFnZXIsICdjYW1lcmFzJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbWVyYU1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/CameraManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/Fade.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/Fade.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Fade effect.\r\n *\r\n * This effect will fade the camera viewport to the given color, over the duration specified.\r\n *\r\n * Only the camera viewport is faded. None of the objects it is displaying are impacted, i.e. their colors do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect, if required.\r\n *\r\n * @class Fade\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Fade = new Class({\r\n\r\n    initialize:\r\n\r\n    function Fade (camera)\r\n    {\r\n        /**\r\n         * The Camera this effect belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @readonly\r\n         * @since 3.5.0\r\n         */\r\n        this.camera = camera;\r\n\r\n        /**\r\n         * Is this effect actively running?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.5.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * Has this effect finished running?\r\n         *\r\n         * This is different from `isRunning` because it remains set to `true` when the effect is over,\r\n         * until the effect is either reset or started again.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#isComplete\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.5.0\r\n         */\r\n        this.isComplete = false;\r\n\r\n        /**\r\n         * The direction of the fade.\r\n         * `true` = fade out (transparent to color), `false` = fade in (color to transparent)\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#direction\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.5.0\r\n         */\r\n        this.direction = true;\r\n\r\n        /**\r\n         * The duration of the effect, in milliseconds.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#duration\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.5.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The value of the red color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#red\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.red = 0;\r\n\r\n        /**\r\n         * The value of the green color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#green\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.green = 0;\r\n\r\n        /**\r\n         * The value of the blue color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#blue\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.blue = 0;\r\n\r\n        /**\r\n         * The value of the alpha channel used during the fade effect.\r\n         * A value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#alpha\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.alpha = 0;\r\n\r\n        /**\r\n         * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#progress\r\n         * @type {number}\r\n         * @since 3.5.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Effect elapsed timer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#_elapsed\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * This callback is invoked every frame for the duration of the effect.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#_onUpdate\r\n         * @type {?Phaser.Types.Cameras.Scene2D.CameraFadeCallback}\r\n         * @private\r\n         * @default null\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * On Complete callback scope.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Fade#_onUpdateScope\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdateScope;\r\n    },\r\n\r\n    /**\r\n     * Fades the Camera to or from the given color over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#start\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n     * @since 3.5.0\r\n     *\r\n     * @param {boolean} [direction=true] - The direction of the fade. `true` = fade out (transparent to color), `false` = fade in (color to transparent)\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraFadeCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n     */\r\n    start: function (direction, duration, red, green, blue, force, callback, context)\r\n    {\r\n        if (direction === undefined) { direction = true; }\r\n        if (duration === undefined) { duration = 1000; }\r\n        if (red === undefined) { red = 0; }\r\n        if (green === undefined) { green = 0; }\r\n        if (blue === undefined) { blue = 0; }\r\n        if (force === undefined) { force = false; }\r\n        if (callback === undefined) { callback = null; }\r\n        if (context === undefined) { context = this.camera.scene; }\r\n\r\n        if (!force && this.isRunning)\r\n        {\r\n            return this.camera;\r\n        }\r\n\r\n        this.isRunning = true;\r\n        this.isComplete = false;\r\n        this.duration = duration;\r\n        this.direction = direction;\r\n        this.progress = 0;\r\n\r\n        this.red = red;\r\n        this.green = green;\r\n        this.blue = blue;\r\n        this.alpha = (direction) ? Number.MIN_VALUE : 1;\r\n\r\n        this._elapsed = 0;\r\n\r\n        this._onUpdate = callback;\r\n        this._onUpdateScope = context;\r\n\r\n        var eventName = (direction) ? Events.FADE_OUT_START : Events.FADE_IN_START;\r\n\r\n        this.camera.emit(eventName, this.camera, this, duration, red, green, blue);\r\n\r\n        return this.camera;\r\n    },\r\n\r\n    /**\r\n     * The main update loop for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#update\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._elapsed += delta;\r\n\r\n        this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n        if (this._onUpdate)\r\n        {\r\n            this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n        }\r\n\r\n        if (this._elapsed < this.duration)\r\n        {\r\n            this.alpha = (this.direction) ? this.progress : 1 - this.progress;\r\n        }\r\n        else\r\n        {\r\n            this.alpha = (this.direction) ? 1 : 0;\r\n            this.effectComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called internally by the Canvas Renderer.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#postRenderCanvas\r\n     * @since 3.5.0\r\n     *\r\n     * @param {CanvasRenderingContext2D} ctx - The Canvas context to render to.\r\n     *\r\n     * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n     */\r\n    postRenderCanvas: function (ctx)\r\n    {\r\n        if (!this.isRunning && !this.isComplete)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var camera = this.camera;\r\n\r\n        ctx.fillStyle = 'rgba(' + this.red + ',' + this.green + ',' + this.blue + ',' + this.alpha + ')';\r\n        ctx.fillRect(camera._cx, camera._cy, camera._cw, camera._ch);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Called internally by the WebGL Renderer.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#postRenderWebGL\r\n     * @since 3.5.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline} pipeline - The WebGL Pipeline to render to.\r\n     * @param {function} getTintFunction - A function that will return the gl safe tint colors.\r\n     *\r\n     * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n     */\r\n    postRenderWebGL: function (pipeline, getTintFunction)\r\n    {\r\n        if (!this.isRunning && !this.isComplete)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var camera = this.camera;\r\n        var red = this.red / 255;\r\n        var blue = this.blue / 255;\r\n        var green = this.green / 255;\r\n\r\n        pipeline.drawFillRect(\r\n            camera._cx, camera._cy, camera._cw, camera._ch,\r\n            getTintFunction(red, green, blue, 1),\r\n            this.alpha\r\n        );\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Called internally when the effect completes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#effectComplete\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n     * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n     * @since 3.5.0\r\n     */\r\n    effectComplete: function ()\r\n    {\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        this.isRunning = false;\r\n        this.isComplete = true;\r\n\r\n        var eventName = (this.direction) ? Events.FADE_OUT_COMPLETE : Events.FADE_IN_COMPLETE;\r\n\r\n        this.camera.emit(eventName, this.camera, this);\r\n    },\r\n\r\n    /**\r\n     * Resets this camera effect.\r\n     * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#reset\r\n     * @since 3.5.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.isRunning = false;\r\n        this.isComplete = false;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n    },\r\n\r\n    /**\r\n     * Destroys this effect, releasing it from the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Fade#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.camera = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Fade;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvRmFkZS5qcz85MjQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsb0VBQXFCO0FBQ3pDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHVFQUFXOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0Q7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxrQkFBa0I7QUFDeEQscUNBQXFDLGlCQUFpQjtBQUN0RCxnQ0FBZ0MsU0FBUztBQUN6QyxrQ0FBa0MsV0FBVztBQUM3QyxpQ0FBaUMsVUFBVTtBQUMzQyxrQ0FBa0MsZUFBZTtBQUNqRCxxQ0FBcUMsaUJBQWlCO0FBQ3RELG9DQUFvQyw2QkFBNkI7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBb0Q7QUFDbkUsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9GYWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQ2FtZXJhIEZhZGUgZWZmZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGVmZmVjdCB3aWxsIGZhZGUgdGhlIGNhbWVyYSB2aWV3cG9ydCB0byB0aGUgZ2l2ZW4gY29sb3IsIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICpcclxuICogT25seSB0aGUgY2FtZXJhIHZpZXdwb3J0IGlzIGZhZGVkLiBOb25lIG9mIHRoZSBvYmplY3RzIGl0IGlzIGRpc3BsYXlpbmcgYXJlIGltcGFjdGVkLCBpLmUuIHRoZWlyIGNvbG9ycyBkb1xyXG4gKiBub3QgY2hhbmdlLlxyXG4gKlxyXG4gKiBUaGUgZWZmZWN0IHdpbGwgZGlzcGF0Y2ggc2V2ZXJhbCBldmVudHMgb24gdGhlIENhbWVyYSBpdHNlbGYgYW5kIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGBvblVwZGF0ZWAgY2FsbGJhY2ssXHJcbiAqIHdoaWNoIGlzIGludm9rZWQgZWFjaCBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGlmIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgRmFkZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy41LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBGYWRlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZhZGUgKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgZWZmZWN0IGFjdGl2ZWx5IHJ1bm5pbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhhcyB0aGlzIGVmZmVjdCBmaW5pc2hlZCBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBgaXNSdW5uaW5nYCBiZWNhdXNlIGl0IHJlbWFpbnMgc2V0IHRvIGB0cnVlYCB3aGVuIHRoZSBlZmZlY3QgaXMgb3ZlcixcclxuICAgICAgICAgKiB1bnRpbCB0aGUgZWZmZWN0IGlzIGVpdGhlciByZXNldCBvciBzdGFydGVkIGFnYWluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjaXNDb21wbGV0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIGZhZGUuXHJcbiAgICAgICAgICogYHRydWVgID0gZmFkZSBvdXQgKHRyYW5zcGFyZW50IHRvIGNvbG9yKSwgYGZhbHNlYCA9IGZhZGUgaW4gKGNvbG9yIHRvIHRyYW5zcGFyZW50KVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZGlyZWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcmVkIGNvbG9yIGNoYW5uZWwgdGhlIGNhbWVyYSB3aWxsIHVzZSBmb3IgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNyZWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIHRoZSBncmVlbiBjb2xvciBjaGFubmVsIHRoZSBjYW1lcmEgd2lsbCB1c2UgZm9yIHRoZSBmYWRlIGVmZmVjdC5cclxuICAgICAgICAgKiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZ3JlZW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGJsdWUgY29sb3IgY2hhbm5lbCB0aGUgY2FtZXJhIHdpbGwgdXNlIGZvciB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2JsdWVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgYWxwaGEgY2hhbm5lbCB1c2VkIGR1cmluZyB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNhbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBlZmZlY3QgaXMgcnVubmluZyB0aGlzIGhvbGRzIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRWZmZWN0IGVsYXBzZWQgdGltZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNfZWxhcHNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI19vblVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFGYWRlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWRlcyB0aGUgQ2FtZXJhIHRvIG9yIGZyb20gdGhlIGdpdmVuIGNvbG9yIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI3N0YXJ0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX1NUQVJUXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXJlY3Rpb249dHJ1ZV0gLSBUaGUgZGlyZWN0aW9uIG9mIHRoZSBmYWRlLiBgdHJ1ZWAgPSBmYWRlIG91dCAodHJhbnNwYXJlbnQgdG8gY29sb3IpLCBgZmFsc2VgID0gZmFkZSBpbiAoY29sb3IgdG8gdHJhbnNwYXJlbnQpXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3JlZD0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgcmVkIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2dyZWVuPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBncmVlbiBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBibHVlIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIEZvcmNlIHRoZSBlZmZlY3QgdG8gc3RhcnQgaW1tZWRpYXRlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUZhZGVDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAqIEl0IGlzIHNlbnQgdHdvIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSBhbmQgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoZSBDYW1lcmEgb24gd2hpY2ggdGhlIGVmZmVjdCB3YXMgc3RhcnRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIChkaXJlY3Rpb24sIGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGRpcmVjdGlvbiA9IHRydWU7IH1cclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDA7IH1cclxuICAgICAgICBpZiAocmVkID09PSB1bmRlZmluZWQpIHsgcmVkID0gMDsgfVxyXG4gICAgICAgIGlmIChncmVlbiA9PT0gdW5kZWZpbmVkKSB7IGdyZWVuID0gMDsgfVxyXG4gICAgICAgIGlmIChibHVlID09PSB1bmRlZmluZWQpIHsgYmx1ZSA9IDA7IH1cclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gdGhpcy5jYW1lcmEuc2NlbmU7IH1cclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucmVkID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBncmVlbjtcclxuICAgICAgICB0aGlzLmJsdWUgPSBibHVlO1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAoZGlyZWN0aW9uKSA/IE51bWJlci5NSU5fVkFMVUUgOiAxO1xyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IChkaXJlY3Rpb24pID8gRXZlbnRzLkZBREVfT1VUX1NUQVJUIDogRXZlbnRzLkZBREVfSU5fU1RBUlQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoZXZlbnROYW1lLCB0aGlzLmNhbWVyYSwgdGhpcywgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhID0gKHRoaXMuZGlyZWN0aW9uKSA/IHRoaXMucHJvZ3Jlc3MgOiAxIC0gdGhpcy5wcm9ncmVzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9ICh0aGlzLmRpcmVjdGlvbikgPyAxIDogMDtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjcG9zdFJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgY29udGV4dCB0byByZW5kZXIgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBlZmZlY3QgZHJldyB0byB0aGUgcmVuZGVyZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyQ2FudmFzOiBmdW5jdGlvbiAoY3R4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1J1bm5pbmcgJiYgIXRoaXMuaXNDb21wbGV0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0aGlzLnJlZCArICcsJyArIHRoaXMuZ3JlZW4gKyAnLCcgKyB0aGlzLmJsdWUgKyAnLCcgKyB0aGlzLmFscGhhICsgJyknO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdChjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjcG9zdFJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdG8gcmVuZGVyIHRvLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0VGludEZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIHRoZSBnbCBzYWZlIHRpbnQgY29sb3JzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZWZmZWN0IGRyZXcgdG8gdGhlIHJlbmRlcmVyLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcG9zdFJlbmRlcldlYkdMOiBmdW5jdGlvbiAocGlwZWxpbmUsIGdldFRpbnRGdW5jdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nICYmICF0aGlzLmlzQ29tcGxldGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7XHJcbiAgICAgICAgdmFyIHJlZCA9IHRoaXMucmVkIC8gMjU1O1xyXG4gICAgICAgIHZhciBibHVlID0gdGhpcy5ibHVlIC8gMjU1O1xyXG4gICAgICAgIHZhciBncmVlbiA9IHRoaXMuZ3JlZW4gLyAyNTU7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgY2FtZXJhLl9jeCwgY2FtZXJhLl9jeSwgY2FtZXJhLl9jdywgY2FtZXJhLl9jaCxcclxuICAgICAgICAgICAgZ2V0VGludEZ1bmN0aW9uKHJlZCwgZ3JlZW4sIGJsdWUsIDEpLFxyXG4gICAgICAgICAgICB0aGlzLmFscGhhXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgd2hlbiB0aGUgZWZmZWN0IGNvbXBsZXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZWZmZWN0Q29tcGxldGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSAodGhpcy5kaXJlY3Rpb24pID8gRXZlbnRzLkZBREVfT1VUX0NPTVBMRVRFIDogRXZlbnRzLkZBREVfSU5fQ09NUExFVEU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoZXZlbnROYW1lLCB0aGlzLmNhbWVyYSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoaXMgY2FtZXJhIGVmZmVjdC5cclxuICAgICAqIElmIGl0IHdhcyBwcmV2aW91c2x5IHJ1bm5pbmcsIGl0IHN0b3BzIGluc3RhbnRseSB3aXRob3V0IGNhbGxpbmcgaXRzIG9uQ29tcGxldGUgY2FsbGJhY2sgb3IgZW1pdHRpbmcgYW4gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGVmZmVjdCwgcmVsZWFzaW5nIGl0IGZyb20gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZhZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Fade.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/Flash.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/Flash.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Flash effect.\r\n *\r\n * This effect will flash the camera viewport to the given color, over the duration specified.\r\n *\r\n * Only the camera viewport is flashed. None of the objects it is displaying are impacted, i.e. their colors do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect, if required.\r\n *\r\n * @class Flash\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Flash = new Class({\r\n\r\n    initialize:\r\n\r\n    function Flash (camera)\r\n    {\r\n        /**\r\n         * The Camera this effect belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @readonly\r\n         * @since 3.5.0\r\n         */\r\n        this.camera = camera;\r\n\r\n        /**\r\n         * Is this effect actively running?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.5.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * The duration of the effect, in milliseconds.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#duration\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.5.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The value of the red color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#red\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.red = 0;\r\n\r\n        /**\r\n         * The value of the green color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#green\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.green = 0;\r\n\r\n        /**\r\n         * The value of the blue color channel the camera will use for the fade effect.\r\n         * A value between 0 and 255.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#blue\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.blue = 0;\r\n\r\n        /**\r\n         * The value of the alpha channel used during the fade effect.\r\n         * A value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#alpha\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.alpha = 0;\r\n\r\n        /**\r\n         * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#progress\r\n         * @type {number}\r\n         * @since 3.5.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Effect elapsed timer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#_elapsed\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * This callback is invoked every frame for the duration of the effect.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#_onUpdate\r\n         * @type {?Phaser.Types.Cameras.Scene2D.CameraFlashCallback}\r\n         * @private\r\n         * @default null\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * On Complete callback scope.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Flash#_onUpdateScope\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdateScope;\r\n    },\r\n\r\n    /**\r\n     * Flashes the Camera to or from the given color over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#start\r\n     * @fires Phaser.Cameras.Scene2D.Events#FLASH_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} [duration=250] - The duration of the effect in milliseconds.\r\n     * @param {integer} [red=255] - The amount to fade the red channel towards. A value between 0 and 255.\r\n     * @param {integer} [green=255] - The amount to fade the green channel towards. A value between 0 and 255.\r\n     * @param {integer} [blue=255] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n     * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraFlashCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n     */\r\n    start: function (duration, red, green, blue, force, callback, context)\r\n    {\r\n        if (duration === undefined) { duration = 250; }\r\n        if (red === undefined) { red = 255; }\r\n        if (green === undefined) { green = 255; }\r\n        if (blue === undefined) { blue = 255; }\r\n        if (force === undefined) { force = false; }\r\n        if (callback === undefined) { callback = null; }\r\n        if (context === undefined) { context = this.camera.scene; }\r\n\r\n        if (!force && this.isRunning)\r\n        {\r\n            return this.camera;\r\n        }\r\n\r\n        this.isRunning = true;\r\n        this.duration = duration;\r\n        this.progress = 0;\r\n\r\n        this.red = red;\r\n        this.green = green;\r\n        this.blue = blue;\r\n        this.alpha = 1;\r\n\r\n        this._elapsed = 0;\r\n\r\n        this._onUpdate = callback;\r\n        this._onUpdateScope = context;\r\n\r\n        this.camera.emit(Events.FLASH_START, this.camera, this, duration, red, green, blue);\r\n\r\n        return this.camera;\r\n    },\r\n\r\n    /**\r\n     * The main update loop for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#update\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._elapsed += delta;\r\n\r\n        this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n        if (this._onUpdate)\r\n        {\r\n            this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n        }\r\n\r\n        if (this._elapsed < this.duration)\r\n        {\r\n            this.alpha = 1 - this.progress;\r\n        }\r\n        else\r\n        {\r\n            this.effectComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called internally by the Canvas Renderer.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#postRenderCanvas\r\n     * @since 3.5.0\r\n     *\r\n     * @param {CanvasRenderingContext2D} ctx - The Canvas context to render to.\r\n     *\r\n     * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n     */\r\n    postRenderCanvas: function (ctx)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var camera = this.camera;\r\n\r\n        ctx.fillStyle = 'rgba(' + this.red + ',' + this.green + ',' + this.blue + ',' + this.alpha + ')';\r\n        ctx.fillRect(camera._cx, camera._cy, camera._cw, camera._ch);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Called internally by the WebGL Renderer.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#postRenderWebGL\r\n     * @since 3.5.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline} pipeline - The WebGL Pipeline to render to.\r\n     * @param {function} getTintFunction - A function that will return the gl safe tint colors.\r\n     *\r\n     * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n     */\r\n    postRenderWebGL: function (pipeline, getTintFunction)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var camera = this.camera;\r\n        var red = this.red / 255;\r\n        var blue = this.blue / 255;\r\n        var green = this.green / 255;\r\n\r\n        pipeline.drawFillRect(\r\n            camera._cx, camera._cy, camera._cw, camera._ch,\r\n            getTintFunction(red, green, blue, 1),\r\n            this.alpha\r\n        );\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Called internally when the effect completes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#effectComplete\r\n     * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n     * @since 3.5.0\r\n     */\r\n    effectComplete: function ()\r\n    {\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        this.isRunning = false;\r\n\r\n        this.camera.emit(Events.FLASH_COMPLETE, this.camera, this);\r\n    },\r\n\r\n    /**\r\n     * Resets this camera effect.\r\n     * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#reset\r\n     * @since 3.5.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.isRunning = false;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n    },\r\n\r\n    /**\r\n     * Destroys this effect, releasing it from the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Flash#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.camera = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Flash;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvRmxhc2guanM/YzZmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG9FQUFxQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBVzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRCxnQ0FBZ0MsV0FBVztBQUMzQyxrQ0FBa0MsYUFBYTtBQUMvQyxpQ0FBaUMsWUFBWTtBQUM3QyxrQ0FBa0MsZUFBZTtBQUNqRCxxQ0FBcUMsaUJBQWlCO0FBQ3RELG9DQUFvQyw2QkFBNkI7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBb0Q7QUFDbkUsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9GbGFzaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBGbGFzaCBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgZmxhc2ggdGhlIGNhbWVyYSB2aWV3cG9ydCB0byB0aGUgZ2l2ZW4gY29sb3IsIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICpcclxuICogT25seSB0aGUgY2FtZXJhIHZpZXdwb3J0IGlzIGZsYXNoZWQuIE5vbmUgb2YgdGhlIG9iamVjdHMgaXQgaXMgZGlzcGxheWluZyBhcmUgaW1wYWN0ZWQsIGkuZS4gdGhlaXIgY29sb3JzIGRvXHJcbiAqIG5vdCBjaGFuZ2UuXHJcbiAqXHJcbiAqIFRoZSBlZmZlY3Qgd2lsbCBkaXNwYXRjaCBzZXZlcmFsIGV2ZW50cyBvbiB0aGUgQ2FtZXJhIGl0c2VsZiBhbmQgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYG9uVXBkYXRlYCBjYWxsYmFjayxcclxuICogd2hpY2ggaXMgaW52b2tlZCBlYWNoIGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaWYgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBGbGFzaFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy41LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBGbGFzaCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBGbGFzaCAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhpcyBlZmZlY3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgZWZmZWN0IGFjdGl2ZWx5IHJ1bm5pbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHJlZCBjb2xvciBjaGFubmVsIHRoZSBjYW1lcmEgd2lsbCB1c2UgZm9yIHRoZSBmYWRlIGVmZmVjdC5cclxuICAgICAgICAgKiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3JlZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGdyZWVuIGNvbG9yIGNoYW5uZWwgdGhlIGNhbWVyYSB3aWxsIHVzZSBmb3IgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjZ3JlZW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGJsdWUgY29sb3IgY2hhbm5lbCB0aGUgY2FtZXJhIHdpbGwgdXNlIGZvciB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNibHVlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGFscGhhIGNoYW5uZWwgdXNlZCBkdXJpbmcgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2FscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIGVmZmVjdCBpcyBydW5uaW5nIHRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRWZmZWN0IGVsYXBzZWQgdGltZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUZsYXNoQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI19vblVwZGF0ZVNjb3BlXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhc2hlcyB0aGUgQ2FtZXJhIHRvIG9yIGZyb20gdGhlIGdpdmVuIGNvbG9yIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNzdGFydFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTI1MF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MjU1XSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgcmVkIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2dyZWVuPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MjU1XSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFGbGFzaENhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSBvbiB3aGljaCB0aGUgZWZmZWN0IHdhcyBzdGFydGVkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uID09PSB1bmRlZmluZWQpIHsgZHVyYXRpb24gPSAyNTA7IH1cclxuICAgICAgICBpZiAocmVkID09PSB1bmRlZmluZWQpIHsgcmVkID0gMjU1OyB9XHJcbiAgICAgICAgaWYgKGdyZWVuID09PSB1bmRlZmluZWQpIHsgZ3JlZW4gPSAyNTU7IH1cclxuICAgICAgICBpZiAoYmx1ZSA9PT0gdW5kZWZpbmVkKSB7IGJsdWUgPSAyNTU7IH1cclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gdGhpcy5jYW1lcmEuc2NlbmU7IH1cclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucmVkID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBncmVlbjtcclxuICAgICAgICB0aGlzLmJsdWUgPSBibHVlO1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuRkxBU0hfU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWFpbiB1cGRhdGUgbG9vcCBmb3IgdGhpcyBlZmZlY3QuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhID0gMSAtIHRoaXMucHJvZ3Jlc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0Q29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNwb3N0UmVuZGVyQ2FudmFzXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVGhlIENhbnZhcyBjb250ZXh0IHRvIHJlbmRlciB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGVmZmVjdCBkcmV3IHRvIHRoZSByZW5kZXJlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXJDYW52YXM6IGZ1bmN0aW9uIChjdHgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0aGlzLnJlZCArICcsJyArIHRoaXMuZ3JlZW4gKyAnLCcgKyB0aGlzLmJsdWUgKyAnLCcgKyB0aGlzLmFscGhhICsgJyknO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdChjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3Bvc3RSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmV9IHBpcGVsaW5lIC0gVGhlIFdlYkdMIFBpcGVsaW5lIHRvIHJlbmRlciB0by5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldFRpbnRGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiB0aGUgZ2wgc2FmZSB0aW50IGNvbG9ycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGVmZmVjdCBkcmV3IHRvIHRoZSByZW5kZXJlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXJXZWJHTDogZnVuY3Rpb24gKHBpcGVsaW5lLCBnZXRUaW50RnVuY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuICAgICAgICB2YXIgcmVkID0gdGhpcy5yZWQgLyAyNTU7XHJcbiAgICAgICAgdmFyIGJsdWUgPSB0aGlzLmJsdWUgLyAyNTU7XHJcbiAgICAgICAgdmFyIGdyZWVuID0gdGhpcy5ncmVlbiAvIDI1NTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuZHJhd0ZpbGxSZWN0KFxyXG4gICAgICAgICAgICBjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoLFxyXG4gICAgICAgICAgICBnZXRUaW50RnVuY3Rpb24ocmVkLCBncmVlbiwgYmx1ZSwgMSksXHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLkZMQVNIX0NPTVBMRVRFLCB0aGlzLmNhbWVyYSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoaXMgY2FtZXJhIGVmZmVjdC5cclxuICAgICAqIElmIGl0IHdhcyBwcmV2aW91c2x5IHJ1bm5pbmcsIGl0IHN0b3BzIGluc3RhbnRseSB3aXRob3V0IGNhbGxpbmcgaXRzIG9uQ29tcGxldGUgY2FsbGJhY2sgb3IgZW1pdHRpbmcgYW4gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBlZmZlY3QsIHJlbGVhc2luZyBpdCBmcm9tIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmxhc2g7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Flash.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/Pan.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/Pan.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EaseMap = __webpack_require__(/*! ../../../math/easing/EaseMap */ \"./node_modules/phaser/src/math/easing/EaseMap.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Pan effect.\r\n *\r\n * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n * over the duration and with the ease specified.\r\n *\r\n * Only the camera scroll is moved. None of the objects it is displaying are impacted, i.e. their positions do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Pan\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Pan = new Class({\r\n\r\n    initialize:\r\n\r\n    function Pan (camera)\r\n    {\r\n        /**\r\n         * The Camera this effect belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.camera = camera;\r\n\r\n        /**\r\n         * Is this effect actively running?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.11.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * The duration of the effect, in milliseconds.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#duration\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The starting scroll coordinates to pan the camera from.\r\n         * \r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#source\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.11.0\r\n         */\r\n        this.source = new Vector2();\r\n\r\n        /**\r\n         * The constantly updated value based on zoom.\r\n         * \r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#current\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.11.0\r\n         */\r\n        this.current = new Vector2();\r\n\r\n        /**\r\n         * The destination scroll coordinates to pan the camera to.\r\n         * \r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#destination\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.11.0\r\n         */\r\n        this.destination = new Vector2();\r\n\r\n        /**\r\n         * The ease function to use during the pan.\r\n         * \r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#ease\r\n         * @type {function}\r\n         * @since 3.11.0\r\n         */\r\n        this.ease;\r\n\r\n        /**\r\n         * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#progress\r\n         * @type {number}\r\n         * @since 3.11.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Effect elapsed timer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#_elapsed\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * This callback is invoked every frame for the duration of the effect.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#_onUpdate\r\n         * @type {?Phaser.Types.Cameras.Scene2D.CameraPanCallback}\r\n         * @private\r\n         * @default null\r\n         * @since 3.11.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * On Complete callback scope.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Pan#_onUpdateScope\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._onUpdateScope;\r\n    },\r\n\r\n    /**\r\n     * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n     * over the duration and with the ease specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Pan#start\r\n     * @fires Phaser.Cameras.Scene2D.Events#PAN_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The destination x coordinate to scroll the center of the Camera viewport to.\r\n     * @param {number} y - The destination y coordinate to scroll the center of the Camera viewport to.\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n     * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n     * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n     */\r\n    start: function (x, y, duration, ease, force, callback, context)\r\n    {\r\n        if (duration === undefined) { duration = 1000; }\r\n        if (ease === undefined) { ease = EaseMap.Linear; }\r\n        if (force === undefined) { force = false; }\r\n        if (callback === undefined) { callback = null; }\r\n        if (context === undefined) { context = this.camera.scene; }\r\n\r\n        var cam = this.camera;\r\n\r\n        if (!force && this.isRunning)\r\n        {\r\n            return cam;\r\n        }\r\n\r\n        this.isRunning = true;\r\n        this.duration = duration;\r\n        this.progress = 0;\r\n\r\n        //  Starting from\r\n        this.source.set(cam.scrollX, cam.scrollY);\r\n\r\n        //  Destination\r\n        this.destination.set(x, y);\r\n\r\n        //  Zoom factored version\r\n        cam.getScroll(x, y, this.current);\r\n\r\n        //  Using this ease\r\n        if (typeof ease === 'string' && EaseMap.hasOwnProperty(ease))\r\n        {\r\n            this.ease = EaseMap[ease];\r\n        }\r\n        else if (typeof ease === 'function')\r\n        {\r\n            this.ease = ease;\r\n        }\r\n\r\n        this._elapsed = 0;\r\n\r\n        this._onUpdate = callback;\r\n        this._onUpdateScope = context;\r\n\r\n        this.camera.emit(Events.PAN_START, this.camera, this, duration, x, y);\r\n\r\n        return cam;\r\n    },\r\n\r\n    /**\r\n     * The main update loop for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Pan#update\r\n     * @since 3.11.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._elapsed += delta;\r\n\r\n        var progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n        this.progress = progress;\r\n\r\n        var cam = this.camera;\r\n\r\n        if (this._elapsed < this.duration)\r\n        {\r\n            var v = this.ease(progress);\r\n\r\n            cam.getScroll(this.destination.x, this.destination.y, this.current);\r\n\r\n            var x = this.source.x + ((this.current.x - this.source.x) * v);\r\n            var y = this.source.y + ((this.current.y - this.source.y) * v);\r\n\r\n            cam.setScroll(x, y);\r\n\r\n            if (this._onUpdate)\r\n            {\r\n                this._onUpdate.call(this._onUpdateScope, cam, progress, x, y);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            cam.centerOn(this.destination.x, this.destination.y);\r\n\r\n            if (this._onUpdate)\r\n            {\r\n                this._onUpdate.call(this._onUpdateScope, cam, progress, cam.scrollX, cam.scrollY);\r\n            }\r\n    \r\n            this.effectComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called internally when the effect completes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Pan#effectComplete\r\n     * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n     * @since 3.11.0\r\n     */\r\n    effectComplete: function ()\r\n    {\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        this.isRunning = false;\r\n\r\n        this.camera.emit(Events.PAN_COMPLETE, this.camera, this);\r\n    },\r\n\r\n    /**\r\n     * Resets this camera effect.\r\n     * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Pan#reset\r\n     * @since 3.11.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.isRunning = false;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n    },\r\n\r\n    /**\r\n     * Destroys this effect, releasing it from the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Pan#destroy\r\n     * @since 3.11.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.camera = null;\r\n        this.source = null;\r\n        this.destination = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Pan;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvUGFuLmpzPzI0YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvRUFBcUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsc0ZBQThCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyx1RUFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsd0VBQXVCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSwrQ0FBK0M7QUFDOUQ7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGlCQUFpQjtBQUN0RCxpQ0FBaUMsdUJBQXVCO0FBQ3hELGtDQUFrQyxlQUFlO0FBQ2pELHFDQUFxQyxpQkFBaUI7QUFDdEQsb0NBQW9DLDZCQUE2Qjs7QUFFakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvUGFuLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXNlTWFwID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9lYXNpbmcvRWFzZU1hcCcpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBQYW4gZWZmZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGVmZmVjdCB3aWxsIHNjcm9sbCB0aGUgQ2FtZXJhIHNvIHRoYXQgdGhlIGNlbnRlciBvZiBpdHMgdmlld3BvcnQgZmluaXNoZXMgYXQgdGhlIGdpdmVuIGRlc3RpbmF0aW9uLFxyXG4gKiBvdmVyIHRoZSBkdXJhdGlvbiBhbmQgd2l0aCB0aGUgZWFzZSBzcGVjaWZpZWQuXHJcbiAqXHJcbiAqIE9ubHkgdGhlIGNhbWVyYSBzY3JvbGwgaXMgbW92ZWQuIE5vbmUgb2YgdGhlIG9iamVjdHMgaXQgaXMgZGlzcGxheWluZyBhcmUgaW1wYWN0ZWQsIGkuZS4gdGhlaXIgcG9zaXRpb25zIGRvXHJcbiAqIG5vdCBjaGFuZ2UuXHJcbiAqXHJcbiAqIFRoZSBlZmZlY3Qgd2lsbCBkaXNwYXRjaCBzZXZlcmFsIGV2ZW50cyBvbiB0aGUgQ2FtZXJhIGl0c2VsZiBhbmQgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYG9uVXBkYXRlYCBjYWxsYmFjayxcclxuICogd2hpY2ggaXMgaW52b2tlZCBlYWNoIGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpZiByZXF1aXJlZC5cclxuICpcclxuICogQGNsYXNzIFBhblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMS4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhpcyBlZmZlY3QgaXMgYWN0aW5nIHVwb24uXHJcbiAqL1xyXG52YXIgUGFuID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhpcyBlZmZlY3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBlZmZlY3QgYWN0aXZlbHkgcnVubmluZz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgc2Nyb2xsIGNvb3JkaW5hdGVzIHRvIHBhbiB0aGUgY2FtZXJhIGZyb20uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29uc3RhbnRseSB1cGRhdGVkIHZhbHVlIGJhc2VkIG9uIHpvb20uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNjdXJyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZXN0aW5hdGlvbiBzY3JvbGwgY29vcmRpbmF0ZXMgdG8gcGFuIHRoZSBjYW1lcmEgdG8uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNkZXN0aW5hdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVhc2UgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyB0aGUgcGFuLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jZWFzZVxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lYXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIGVmZmVjdCBpcyBydW5uaW5nIHRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNwcm9ncmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFZmZlY3QgZWxhcHNlZCB0aW1lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNfb25VcGRhdGVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbiBDb21wbGV0ZSBjYWxsYmFjayBzY29wZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCBzY3JvbGwgdGhlIENhbWVyYSBzbyB0aGF0IHRoZSBjZW50ZXIgb2YgaXRzIHZpZXdwb3J0IGZpbmlzaGVzIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbixcclxuICAgICAqIG92ZXIgdGhlIGR1cmF0aW9uIGFuZCB3aXRoIHRoZSBlYXNlIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNQQU5fU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNQQU5fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBkZXN0aW5hdGlvbiB4IGNvb3JkaW5hdGUgdG8gc2Nyb2xsIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGRlc3RpbmF0aW9uIHkgY29vcmRpbmF0ZSB0byBzY3JvbGwgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0IHRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24pfSBbZWFzZT0nTGluZWFyJ10gLSBUaGUgZWFzZSB0byB1c2UgZm9yIHRoZSBwYW4uIENhbiBiZSBhbnkgb2YgdGhlIFBoYXNlciBFYXNpbmcgY29uc3RhbnRzIG9yIGEgY3VzdG9tIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIHBhbiBlZmZlY3QgdG8gc3RhcnQgaW1tZWRpYXRlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVBhbkNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCBmb3VyIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSwgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMsXHJcbiAgICAgKiB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHggY29vcmRpbmF0ZSBhbmQgdGhlIGN1cnJlbnQgY2FtZXJhIHNjcm9sbCB5IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoZSBDYW1lcmEgb24gd2hpY2ggdGhlIGVmZmVjdCB3YXMgc3RhcnRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICh4LCB5LCBkdXJhdGlvbiwgZWFzZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGR1cmF0aW9uID0gMTAwMDsgfVxyXG4gICAgICAgIGlmIChlYXNlID09PSB1bmRlZmluZWQpIHsgZWFzZSA9IEVhc2VNYXAuTGluZWFyOyB9XHJcbiAgICAgICAgaWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHsgZm9yY2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY29udGV4dCA9IHRoaXMuY2FtZXJhLnNjZW5lOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW0gPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvLyAgU3RhcnRpbmcgZnJvbVxyXG4gICAgICAgIHRoaXMuc291cmNlLnNldChjYW0uc2Nyb2xsWCwgY2FtLnNjcm9sbFkpO1xyXG5cclxuICAgICAgICAvLyAgRGVzdGluYXRpb25cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgLy8gIFpvb20gZmFjdG9yZWQgdmVyc2lvblxyXG4gICAgICAgIGNhbS5nZXRTY3JvbGwoeCwgeSwgdGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgLy8gIFVzaW5nIHRoaXMgZWFzZVxyXG4gICAgICAgIGlmICh0eXBlb2YgZWFzZSA9PT0gJ3N0cmluZycgJiYgRWFzZU1hcC5oYXNPd25Qcm9wZXJ0eShlYXNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZWFzZSA9IEVhc2VNYXBbZWFzZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBlYXNlID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lYXNlID0gZWFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBjb250ZXh0O1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5lbWl0KEV2ZW50cy5QQU5fU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdmFyIHByb2dyZXNzID0gQ2xhbXAodGhpcy5fZWxhcHNlZCAvIHRoaXMuZHVyYXRpb24sIDAsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblxyXG4gICAgICAgIHZhciBjYW0gPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2VsYXBzZWQgPCB0aGlzLmR1cmF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLmVhc2UocHJvZ3Jlc3MpO1xyXG5cclxuICAgICAgICAgICAgY2FtLmdldFNjcm9sbCh0aGlzLmRlc3RpbmF0aW9uLngsIHRoaXMuZGVzdGluYXRpb24ueSwgdGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gdGhpcy5zb3VyY2UueCArICgodGhpcy5jdXJyZW50LnggLSB0aGlzLnNvdXJjZS54KSAqIHYpO1xyXG4gICAgICAgICAgICB2YXIgeSA9IHRoaXMuc291cmNlLnkgKyAoKHRoaXMuY3VycmVudC55IC0gdGhpcy5zb3VyY2UueSkgKiB2KTtcclxuXHJcbiAgICAgICAgICAgIGNhbS5zZXRTY3JvbGwoeCwgeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb25VcGRhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlLmNhbGwodGhpcy5fb25VcGRhdGVTY29wZSwgY2FtLCBwcm9ncmVzcywgeCwgeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLmNlbnRlck9uKHRoaXMuZGVzdGluYXRpb24ueCwgdGhpcy5kZXN0aW5hdGlvbi55KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vblVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCBjYW0sIHByb2dyZXNzLCBjYW0uc2Nyb2xsWCwgY2FtLnNjcm9sbFkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNlZmZlY3RDb21wbGV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLlBBTl9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBlZmZlY3QsIHJlbGVhc2luZyBpdCBmcm9tIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuUGFuI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFuO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Pan.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/Shake.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/Shake.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Shake effect.\r\n *\r\n * This effect will shake the camera viewport by a random amount, bounded by the specified intensity, each frame.\r\n *\r\n * Only the camera viewport is moved. None of the objects it is displaying are impacted, i.e. their positions do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Shake\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Shake = new Class({\r\n\r\n    initialize:\r\n\r\n    function Shake (camera)\r\n    {\r\n        /**\r\n         * The Camera this effect belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @readonly\r\n         * @since 3.5.0\r\n         */\r\n        this.camera = camera;\r\n\r\n        /**\r\n         * Is this effect actively running?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.5.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * The duration of the effect, in milliseconds.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#duration\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.5.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The intensity of the effect. Use small float values. The default when the effect starts is 0.05.\r\n         * This is a Vector2 object, allowing you to control the shake intensity independently across x and y.\r\n         * You can modify this value while the effect is active to create more varied shake effects.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#intensity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.5.0\r\n         */\r\n        this.intensity = new Vector2();\r\n\r\n        /**\r\n         * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#progress\r\n         * @type {number}\r\n         * @since 3.5.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Effect elapsed timer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#_elapsed\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * How much to offset the camera by horizontally.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#_offsetX\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._offsetX = 0;\r\n\r\n        /**\r\n         * How much to offset the camera by vertically.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#_offsetY\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._offsetY = 0;\r\n\r\n        /**\r\n         * This callback is invoked every frame for the duration of the effect.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#_onUpdate\r\n         * @type {?Phaser.Types.Cameras.Scene2D.CameraShakeCallback}\r\n         * @private\r\n         * @default null\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * On Complete callback scope.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Shake#_onUpdateScope\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdateScope;\r\n    },\r\n\r\n    /**\r\n     * Shakes the Camera by the given intensity over the duration specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#start\r\n     * @fires Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} [duration=100] - The duration of the effect in milliseconds.\r\n     * @param {(number|Phaser.Math.Vector2)} [intensity=0.05] - The intensity of the shake.\r\n     * @param {boolean} [force=false] - Force the shake effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraShakeCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n     */\r\n    start: function (duration, intensity, force, callback, context)\r\n    {\r\n        if (duration === undefined) { duration = 100; }\r\n        if (intensity === undefined) { intensity = 0.05; }\r\n        if (force === undefined) { force = false; }\r\n        if (callback === undefined) { callback = null; }\r\n        if (context === undefined) { context = this.camera.scene; }\r\n\r\n        if (!force && this.isRunning)\r\n        {\r\n            return this.camera;\r\n        }\r\n\r\n        this.isRunning = true;\r\n        this.duration = duration;\r\n        this.progress = 0;\r\n\r\n        if (typeof intensity === 'number')\r\n        {\r\n            this.intensity.set(intensity);\r\n        }\r\n        else\r\n        {\r\n            this.intensity.set(intensity.x, intensity.y);\r\n        }\r\n\r\n        this._elapsed = 0;\r\n        this._offsetX = 0;\r\n        this._offsetY = 0;\r\n\r\n        this._onUpdate = callback;\r\n        this._onUpdateScope = context;\r\n\r\n        this.camera.emit(Events.SHAKE_START, this.camera, this, duration, intensity);\r\n\r\n        return this.camera;\r\n    },\r\n\r\n    /**\r\n     * The pre-render step for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#preRender\r\n     * @since 3.5.0\r\n     */\r\n    preRender: function ()\r\n    {\r\n        if (this.isRunning)\r\n        {\r\n            this.camera.matrix.translate(this._offsetX, this._offsetY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The main update loop for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#update\r\n     * @since 3.5.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._elapsed += delta;\r\n\r\n        this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n        if (this._onUpdate)\r\n        {\r\n            this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n        }\r\n\r\n        if (this._elapsed < this.duration)\r\n        {\r\n            var intensity = this.intensity;\r\n            var width = this.camera._cw;\r\n            var height = this.camera._ch;\r\n            var zoom = this.camera.zoom;\r\n\r\n            this._offsetX = (Math.random() * intensity.x * width * 2 - intensity.x * width) * zoom;\r\n            this._offsetY = (Math.random() * intensity.y * height * 2 - intensity.y * height) * zoom;\r\n\r\n            if (this.camera.roundPixels)\r\n            {\r\n                this._offsetX = Math.round(this._offsetX);\r\n                this._offsetY = Math.round(this._offsetY);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.effectComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called internally when the effect completes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#effectComplete\r\n     * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n     * @since 3.5.0\r\n     */\r\n    effectComplete: function ()\r\n    {\r\n        this._offsetX = 0;\r\n        this._offsetY = 0;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        this.isRunning = false;\r\n\r\n        this.camera.emit(Events.SHAKE_COMPLETE, this.camera, this);\r\n    },\r\n\r\n    /**\r\n     * Resets this camera effect.\r\n     * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#reset\r\n     * @since 3.5.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.isRunning = false;\r\n\r\n        this._offsetX = 0;\r\n        this._offsetY = 0;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n    },\r\n\r\n    /**\r\n     * Destroys this effect, releasing it from the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Shake#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.camera = null;\r\n        this.intensity = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Shake;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvU2hha2UuanM/YzgyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG9FQUFxQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsd0VBQXVCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QixlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRCxzQ0FBc0Msa0JBQWtCO0FBQ3hELGtDQUFrQyxlQUFlO0FBQ2pELHFDQUFxQyxpQkFBaUI7QUFDdEQsb0NBQW9DLDZCQUE2Qjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9TaGFrZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBTaGFrZSBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgc2hha2UgdGhlIGNhbWVyYSB2aWV3cG9ydCBieSBhIHJhbmRvbSBhbW91bnQsIGJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBpbnRlbnNpdHksIGVhY2ggZnJhbWUuXHJcbiAqXHJcbiAqIE9ubHkgdGhlIGNhbWVyYSB2aWV3cG9ydCBpcyBtb3ZlZC4gTm9uZSBvZiB0aGUgb2JqZWN0cyBpdCBpcyBkaXNwbGF5aW5nIGFyZSBpbXBhY3RlZCwgaS5lLiB0aGVpciBwb3NpdGlvbnMgZG9cclxuICogbm90IGNoYW5nZS5cclxuICpcclxuICogVGhlIGVmZmVjdCB3aWxsIGRpc3BhdGNoIHNldmVyYWwgZXZlbnRzIG9uIHRoZSBDYW1lcmEgaXRzZWxmIGFuZCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhbiBgb25VcGRhdGVgIGNhbGxiYWNrLFxyXG4gKiB3aGljaCBpcyBpbnZva2VkIGVhY2ggZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGlmIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgU2hha2VcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuNS4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhpcyBlZmZlY3QgaXMgYWN0aW5nIHVwb24uXHJcbiAqL1xyXG52YXIgU2hha2UgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU2hha2UgKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIGVmZmVjdCBhY3RpdmVseSBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI2lzUnVubmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVuc2l0eSBvZiB0aGUgZWZmZWN0LiBVc2Ugc21hbGwgZmxvYXQgdmFsdWVzLiBUaGUgZGVmYXVsdCB3aGVuIHRoZSBlZmZlY3Qgc3RhcnRzIGlzIDAuMDUuXHJcbiAgICAgICAgICogVGhpcyBpcyBhIFZlY3RvcjIgb2JqZWN0LCBhbGxvd2luZyB5b3UgdG8gY29udHJvbCB0aGUgc2hha2UgaW50ZW5zaXR5IGluZGVwZW5kZW50bHkgYWNyb3NzIHggYW5kIHkuXHJcbiAgICAgICAgICogWW91IGNhbiBtb2RpZnkgdGhpcyB2YWx1ZSB3aGlsZSB0aGUgZWZmZWN0IGlzIGFjdGl2ZSB0byBjcmVhdGUgbW9yZSB2YXJpZWQgc2hha2UgZWZmZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmludGVuc2l0eSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgZWZmZWN0IGlzIHJ1bm5pbmcgdGhpcyBob2xkcyB0aGUgY3VycmVudCBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcywgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjcHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFZmZlY3QgZWxhcHNlZCB0aW1lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNfZWxhcHNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG11Y2ggdG8gb2Zmc2V0IHRoZSBjYW1lcmEgYnkgaG9yaXpvbnRhbGx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI19vZmZzZXRYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG11Y2ggdG8gb2Zmc2V0IHRoZSBjYW1lcmEgYnkgdmVydGljYWxseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNfb2Zmc2V0WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVNoYWtlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI19vblVwZGF0ZVNjb3BlXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hha2VzIHRoZSBDYW1lcmEgYnkgdGhlIGdpdmVuIGludGVuc2l0eSBvdmVyIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2Ujc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1NIQUtFX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSBbaW50ZW5zaXR5PTAuMDVdIC0gVGhlIGludGVuc2l0eSBvZiB0aGUgc2hha2UuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgc2hha2UgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFTaGFrZUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSBvbiB3aGljaCB0aGUgZWZmZWN0IHdhcyBzdGFydGVkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGR1cmF0aW9uLCBpbnRlbnNpdHksIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDsgfVxyXG4gICAgICAgIGlmIChpbnRlbnNpdHkgPT09IHVuZGVmaW5lZCkgeyBpbnRlbnNpdHkgPSAwLjA1OyB9XHJcbiAgICAgICAgaWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHsgZm9yY2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY29udGV4dCA9IHRoaXMuY2FtZXJhLnNjZW5lOyB9XHJcblxyXG4gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW1lcmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGludGVuc2l0eSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmludGVuc2l0eS5zZXQoaW50ZW5zaXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pbnRlbnNpdHkuc2V0KGludGVuc2l0eS54LCBpbnRlbnNpdHkueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuU0hBS0VfU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgaW50ZW5zaXR5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcmUtcmVuZGVyIHN0ZXAgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI3ByZVJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5tYXRyaXgudHJhbnNsYXRlKHRoaXMuX29mZnNldFgsIHRoaXMuX29mZnNldFkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWFpbiB1cGRhdGUgbG9vcCBmb3IgdGhpcyBlZmZlY3QuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuY2FtZXJhLl9jaDtcclxuICAgICAgICAgICAgdmFyIHpvb20gPSB0aGlzLmNhbWVyYS56b29tO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0WCA9IChNYXRoLnJhbmRvbSgpICogaW50ZW5zaXR5LnggKiB3aWR0aCAqIDIgLSBpbnRlbnNpdHkueCAqIHdpZHRoKSAqIHpvb207XHJcbiAgICAgICAgICAgIHRoaXMuX29mZnNldFkgPSAoTWF0aC5yYW5kb20oKSAqIGludGVuc2l0eS55ICogaGVpZ2h0ICogMiAtIGludGVuc2l0eS55ICogaGVpZ2h0KSAqIHpvb207XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYW1lcmEucm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFggPSBNYXRoLnJvdW5kKHRoaXMuX29mZnNldFgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IE1hdGgucm91bmQodGhpcy5fb2Zmc2V0WSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5lbWl0KEV2ZW50cy5TSEFLRV9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WCA9IDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGVmZmVjdCwgcmVsZWFzaW5nIGl0IGZyb20gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmludGVuc2l0eSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hha2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Shake.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/Zoom.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/Zoom.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EaseMap = __webpack_require__(/*! ../../../math/easing/EaseMap */ \"./node_modules/phaser/src/math/easing/EaseMap.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Zoom effect.\r\n *\r\n * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Zoom\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Zoom = new Class({\r\n\r\n    initialize:\r\n\r\n    function Zoom (camera)\r\n    {\r\n        /**\r\n         * The Camera this effect belongs to.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.camera = camera;\r\n\r\n        /**\r\n         * Is this effect actively running?\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.11.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * The duration of the effect, in milliseconds.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#duration\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The starting zoom value;\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#source\r\n         * @type {number}\r\n         * @since 3.11.0\r\n         */\r\n        this.source = 1;\r\n\r\n        /**\r\n         * The destination zoom value.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#destination\r\n         * @type {number}\r\n         * @since 3.11.0\r\n         */\r\n        this.destination = 1;\r\n\r\n        /**\r\n         * The ease function to use during the zoom.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#ease\r\n         * @type {function}\r\n         * @since 3.11.0\r\n         */\r\n        this.ease;\r\n\r\n        /**\r\n         * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#progress\r\n         * @type {number}\r\n         * @since 3.11.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Effect elapsed timer.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#_elapsed\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * This callback is invoked every frame for the duration of the effect.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#_onUpdate\r\n         * @type {?Phaser.Types.Cameras.Scene2D.CameraZoomCallback}\r\n         * @private\r\n         * @default null\r\n         * @since 3.11.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * On Complete callback scope.\r\n         *\r\n         * @name Phaser.Cameras.Scene2D.Effects.Zoom#_onUpdateScope\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._onUpdateScope;\r\n    },\r\n\r\n    /**\r\n     * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Zoom#start\r\n     * @fires Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n     * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} zoom - The target Camera zoom value.\r\n     * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n     * @param {(string|function)} [ease='Linear'] - The ease to use for the Zoom. Can be any of the Phaser Easing constants or a custom function.\r\n     * @param {boolean} [force=false] - Force the zoom effect to start immediately, even if already running.\r\n     * @param {Phaser.Types.Cameras.Scene2D.CameraZoomCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n     * It is sent three arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n     * and the current camera zoom value.\r\n     * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n     *\r\n     * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n     */\r\n    start: function (zoom, duration, ease, force, callback, context)\r\n    {\r\n        if (duration === undefined) { duration = 1000; }\r\n        if (ease === undefined) { ease = EaseMap.Linear; }\r\n        if (force === undefined) { force = false; }\r\n        if (callback === undefined) { callback = null; }\r\n        if (context === undefined) { context = this.camera.scene; }\r\n\r\n        var cam = this.camera;\r\n\r\n        if (!force && this.isRunning)\r\n        {\r\n            return cam;\r\n        }\r\n\r\n        this.isRunning = true;\r\n        this.duration = duration;\r\n        this.progress = 0;\r\n\r\n        //  Starting from\r\n        this.source = cam.zoom;\r\n\r\n        //  Zooming to\r\n        this.destination = zoom;\r\n\r\n        //  Using this ease\r\n        if (typeof ease === 'string' && EaseMap.hasOwnProperty(ease))\r\n        {\r\n            this.ease = EaseMap[ease];\r\n        }\r\n        else if (typeof ease === 'function')\r\n        {\r\n            this.ease = ease;\r\n        }\r\n\r\n        this._elapsed = 0;\r\n\r\n        this._onUpdate = callback;\r\n        this._onUpdateScope = context;\r\n\r\n        this.camera.emit(Events.ZOOM_START, this.camera, this, duration, zoom);\r\n\r\n        return cam;\r\n    },\r\n\r\n    /**\r\n     * The main update loop for this effect. Called automatically by the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Zoom#update\r\n     * @since 3.11.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._elapsed += delta;\r\n\r\n        this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n        if (this._elapsed < this.duration)\r\n        {\r\n            this.camera.zoom = this.source + ((this.destination - this.source) * this.ease(this.progress));\r\n\r\n            if (this._onUpdate)\r\n            {\r\n                this._onUpdate.call(this._onUpdateScope, this.camera, this.progress, this.camera.zoom);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.camera.zoom = this.destination;\r\n\r\n            if (this._onUpdate)\r\n            {\r\n                this._onUpdate.call(this._onUpdateScope, this.camera, this.progress, this.destination);\r\n            }\r\n\r\n            this.effectComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called internally when the effect completes.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Zoom#effectComplete\r\n     * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n     * @since 3.11.0\r\n     */\r\n    effectComplete: function ()\r\n    {\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        this.isRunning = false;\r\n\r\n        this.camera.emit(Events.ZOOM_COMPLETE, this.camera, this);\r\n    },\r\n\r\n    /**\r\n     * Resets this camera effect.\r\n     * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Zoom#reset\r\n     * @since 3.11.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.isRunning = false;\r\n\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n    },\r\n\r\n    /**\r\n     * Destroys this effect, releasing it from the Camera.\r\n     *\r\n     * @method Phaser.Cameras.Scene2D.Effects.Zoom#destroy\r\n     * @since 3.11.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.camera = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Zoom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvWm9vbS5qcz8zZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsb0VBQXFCO0FBQ3pDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLHNGQUE4QjtBQUNwRCxhQUFhLG1CQUFPLENBQUMsdUVBQVc7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsUUFBUTtBQUN2QixlQUFlLGdEQUFnRDtBQUMvRDtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsaUJBQWlCO0FBQ3RELGlDQUFpQyx1QkFBdUI7QUFDeEQsa0NBQWtDLGVBQWU7QUFDakQscUNBQXFDLGlCQUFpQjtBQUN0RCxvQ0FBb0MsNkJBQTZCOztBQUVqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvWm9vbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRWFzZU1hcCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgvZWFzaW5nL0Vhc2VNYXAnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDYW1lcmEgWm9vbSBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIHRvIHRoZSBnaXZlbiBzY2FsZSwgb3ZlciB0aGUgZHVyYXRpb24gYW5kIHdpdGggdGhlIGVhc2Ugc3BlY2lmaWVkLlxyXG4gKlxyXG4gKiBUaGUgZWZmZWN0IHdpbGwgZGlzcGF0Y2ggc2V2ZXJhbCBldmVudHMgb24gdGhlIENhbWVyYSBpdHNlbGYgYW5kIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGBvblVwZGF0ZWAgY2FsbGJhY2ssXHJcbiAqIHdoaWNoIGlzIGludm9rZWQgZWFjaCBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaWYgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBab29tXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjExLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBab29tID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFpvb20gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIGVmZmVjdCBhY3RpdmVseSBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0YXJ0aW5nIHpvb20gdmFsdWU7XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvdXJjZSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZXN0aW5hdGlvbiB6b29tIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZGVzdGluYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVhc2UgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyB0aGUgem9vbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI2Vhc2VcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZWFzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBlZmZlY3QgaXMgcnVubmluZyB0aGlzIGhvbGRzIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVmZmVjdCBlbGFwc2VkIHRpbWVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVpvb21DYWxsYmFja31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCB6b29tIHRoZSBDYW1lcmEgdG8gdGhlIGdpdmVuIHNjYWxlLCBvdmVyIHRoZSBkdXJhdGlvbiBhbmQgd2l0aCB0aGUgZWFzZSBzcGVjaWZpZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNzdGFydFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHpvb20gLSBUaGUgdGFyZ2V0IENhbWVyYSB6b29tIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24pfSBbZWFzZT0nTGluZWFyJ10gLSBUaGUgZWFzZSB0byB1c2UgZm9yIHRoZSBab29tLiBDYW4gYmUgYW55IG9mIHRoZSBQaGFzZXIgRWFzaW5nIGNvbnN0YW50cyBvciBhIGN1c3RvbSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIEZvcmNlIHRoZSB6b29tIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhWm9vbUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0aHJlZSBhcmd1bWVudHM6IEEgcmVmZXJlbmNlIHRvIHRoZSBjYW1lcmEsIGEgcHJvZ3Jlc3MgYW1vdW50IGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGhvdyBjb21wbGV0ZSB0aGUgZWZmZWN0IGlzLFxyXG4gICAgICogYW5kIHRoZSBjdXJyZW50IGNhbWVyYSB6b29tIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLiBEZWZhdWx0cyB0byB0aGUgU2NlbmUgdG8gd2hpY2ggdGhlIENhbWVyYSBiZWxvbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGUgQ2FtZXJhIG9uIHdoaWNoIHRoZSBlZmZlY3Qgd2FzIHN0YXJ0ZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoem9vbSwgZHVyYXRpb24sIGVhc2UsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDA7IH1cclxuICAgICAgICBpZiAoZWFzZSA9PT0gdW5kZWZpbmVkKSB7IGVhc2UgPSBFYXNlTWFwLkxpbmVhcjsgfVxyXG4gICAgICAgIGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7IGZvcmNlID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNvbnRleHQgPSB0aGlzLmNhbWVyYS5zY2VuZTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtID0gdGhpcy5jYW1lcmE7XHJcblxyXG4gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLy8gIFN0YXJ0aW5nIGZyb21cclxuICAgICAgICB0aGlzLnNvdXJjZSA9IGNhbS56b29tO1xyXG5cclxuICAgICAgICAvLyAgWm9vbWluZyB0b1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSB6b29tO1xyXG5cclxuICAgICAgICAvLyAgVXNpbmcgdGhpcyBlYXNlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBlYXNlID09PSAnc3RyaW5nJyAmJiBFYXNlTWFwLmhhc093blByb3BlcnR5KGVhc2UpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lYXNlID0gRWFzZU1hcFtlYXNlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVhc2UgPT09ICdmdW5jdGlvbicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVhc2UgPSBlYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLlpPT01fU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgem9vbSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgKz0gZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBDbGFtcCh0aGlzLl9lbGFwc2VkIC8gdGhpcy5kdXJhdGlvbiwgMCwgMSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbGFwc2VkIDwgdGhpcy5kdXJhdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnpvb20gPSB0aGlzLnNvdXJjZSArICgodGhpcy5kZXN0aW5hdGlvbiAtIHRoaXMuc291cmNlKSAqIHRoaXMuZWFzZSh0aGlzLnByb2dyZXNzKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb25VcGRhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlLmNhbGwodGhpcy5fb25VcGRhdGVTY29wZSwgdGhpcy5jYW1lcmEsIHRoaXMucHJvZ3Jlc3MsIHRoaXMuY2FtZXJhLnpvb20pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnpvb20gPSB0aGlzLmRlc3RpbmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblVwZGF0ZS5jYWxsKHRoaXMuX29uVXBkYXRlU2NvcGUsIHRoaXMuY2FtZXJhLCB0aGlzLnByb2dyZXNzLCB0aGlzLmRlc3RpbmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZWZmZWN0Q29tcGxldGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGVmZmVjdENvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuWk9PTV9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgZWZmZWN0LCByZWxlYXNpbmcgaXQgZnJvbSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFpvb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Zoom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/effects/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/effects/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D.Effects\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Fade: __webpack_require__(/*! ./Fade */ \"./node_modules/phaser/src/cameras/2d/effects/Fade.js\"),\r\n    Flash: __webpack_require__(/*! ./Flash */ \"./node_modules/phaser/src/cameras/2d/effects/Flash.js\"),\r\n    Pan: __webpack_require__(/*! ./Pan */ \"./node_modules/phaser/src/cameras/2d/effects/Pan.js\"),\r\n    Shake: __webpack_require__(/*! ./Shake */ \"./node_modules/phaser/src/cameras/2d/effects/Shake.js\"),\r\n    Zoom: __webpack_require__(/*! ./Zoom */ \"./node_modules/phaser/src/cameras/2d/effects/Zoom.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvaW5kZXguanM/ZTMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxvRUFBUTtBQUMxQixXQUFXLG1CQUFPLENBQUMsc0VBQVM7QUFDNUIsU0FBUyxtQkFBTyxDQUFDLGtFQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyxzRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsb0VBQVE7O0FBRTFCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9lZmZlY3RzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBGYWRlOiByZXF1aXJlKCcuL0ZhZGUnKSxcclxuICAgIEZsYXNoOiByZXF1aXJlKCcuL0ZsYXNoJyksXHJcbiAgICBQYW46IHJlcXVpcmUoJy4vUGFuJyksXHJcbiAgICBTaGFrZTogcmVxdWlyZSgnLi9TaGFrZScpLFxyXG4gICAgWm9vbTogcmVxdWlyZSgnLi9ab29tJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Destroy Camera Event.\r\n * \r\n * This event is dispatched by a Camera instance when it is destroyed by the Camera Manager.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that was destroyed.\r\n */\r\nmodule.exports = 'cameradestroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzP2RmMmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBEZXN0cm95IENhbWVyYSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIGl0IGlzIGRlc3Ryb3llZCBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB3YXMgZGVzdHJveWVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZGVzdHJveSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade In Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade In Effect completes.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeincomplete', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerafadeincomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX0NPTVBMRVRFX0VWRU5ULmpzP2NjNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxvQ0FBb0M7QUFDL0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL0ZBREVfSU5fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIEZhZGUgSW4gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmFkZSBJbiBFZmZlY3QgY29tcGxldGVzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBDYW1lcmEgaW5zdGFuY2UgdXNpbmcgYENhbWVyYS5vbignY2FtZXJhZmFkZWluY29tcGxldGUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlfSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZWluY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade In Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade In Effect starts.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeinstart', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'camerafadeinstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX1NUQVJUX0VWRU5ULmpzP2Y5ZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBGYWRlIEluIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIEZhZGUgSW4gRWZmZWN0IHN0YXJ0cy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nIGBDYW1lcmEub24oJ2NhbWVyYWZhZGVpbnN0YXJ0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfSU5fU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgY2hhbm5lbCB2YWx1ZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZWluc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade Out Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade Out Effect completes.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeoutcomplete', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerafadeoutcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9DT01QTEVURV9FVkVOVC5qcz9jY2I2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsb0NBQW9DO0FBQy9DO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9DT01QTEVURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgRmFkZSBPdXQgQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmFkZSBPdXQgRWZmZWN0IGNvbXBsZXRlcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nIGBDYW1lcmEub24oJ2NhbWVyYWZhZGVvdXRjb21wbGV0ZScsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX09VVF9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlfSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZW91dGNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade Out Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade Out Effect starts.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeoutstart', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'camerafadeoutstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9TVEFSVF9FVkVOVC5qcz8yZTNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvRkFERV9PVVRfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIEZhZGUgT3V0IFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIEZhZGUgT3V0IEVmZmVjdCBzdGFydHMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIENhbWVyYSBpbnN0YW5jZSB1c2luZyBgQ2FtZXJhLm9uKCdjYW1lcmFmYWRlb3V0c3RhcnQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgY2hhbm5lbCB2YWx1ZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZW91dHN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Flash Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Flash Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Flash} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'cameraflashcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9DT01QTEVURV9FVkVOVC5qcz9hN2I0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL0ZMQVNIX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBGbGFzaCBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBGbGFzaCBFZmZlY3QgY29tcGxldGVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2h9IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFmbGFzaGNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Flash Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Flash Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FLASH_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Flash} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'cameraflashstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9TVEFSVF9FVkVOVC5qcz9lZDQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9TVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgRmxhc2ggU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmxhc2ggRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjMuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IHRoZSBlZmZlY3QgYmVnYW4gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNofSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcmVkIC0gVGhlIHJlZCBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGdyZWVuIC0gVGhlIGdyZWVuIGNvbG9yIGNoYW5uZWwgdmFsdWUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gYmx1ZSAtIFRoZSBibHVlIGNvbG9yIGNoYW5uZWwgdmFsdWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFmbGFzaHN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pan Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Pan Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Pan} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerapancomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fQ09NUExFVEVfRVZFTlQuanM/OTk1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsbUNBQW1DO0FBQzlDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFBhbiBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBQYW4gRWZmZWN0IGNvbXBsZXRlcy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW59IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFwYW5jb21wbGV0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pan Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Pan Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PAN_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Pan} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} x - The destination scroll x coordinate.\r\n * @param {number} y - The destination scroll y coordinate.\r\n */\r\nmodule.exports = 'camerapanstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fU1RBUlRfRVZFTlQuanM/NGQ0NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsbUNBQW1DO0FBQzlDLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFBhbiBTdGFydCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBQYW4gRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9TVEFSVFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW59IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZGVzdGluYXRpb24gc2Nyb2xsIHggY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgZGVzdGluYXRpb24gc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NhbWVyYXBhbnN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Post-Render Event.\r\n * \r\n * This event is dispatched by a Camera instance after is has finished rendering.\r\n * It is only dispatched if the Camera is rendering to a texture.\r\n * \r\n * Listen to it from a Camera instance using: `camera.on('postrender', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#POST_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that has finished rendering to a texture.\r\n */\r\nmodule.exports = 'postrender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QT1NUX1JFTkRFUl9FVkVOVC5qcz9jZTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQ0FBa0M7QUFDN0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL1BPU1RfUkVOREVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBQb3N0LVJlbmRlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSBhZnRlciBpcyBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLlxyXG4gKiBJdCBpcyBvbmx5IGRpc3BhdGNoZWQgaWYgdGhlIENhbWVyYSBpcyByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBDYW1lcmEgaW5zdGFuY2UgdXNpbmc6IGBjYW1lcmEub24oJ3Bvc3RyZW5kZXInLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjUE9TVF9SRU5ERVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IGhhcyBmaW5pc2hlZCByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pre-Render Event.\r\n * \r\n * This event is dispatched by a Camera instance when it is about to render.\r\n * It is only dispatched if the Camera is rendering to a texture.\r\n * \r\n * Listen to it from a Camera instance using: `camera.on('prerender', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PRE_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that is about to render to a texture.\r\n */\r\nmodule.exports = 'prerender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QUkVfUkVOREVSX0VWRU5ULmpzPzY5MjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvUFJFX1JFTkRFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgUHJlLVJlbmRlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIGl0IGlzIGFib3V0IHRvIHJlbmRlci5cclxuICogSXQgaXMgb25seSBkaXNwYXRjaGVkIGlmIHRoZSBDYW1lcmEgaXMgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nOiBgY2FtZXJhLm9uKCdwcmVyZW5kZXInLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjUFJFX1JFTkRFUlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgaXMgYWJvdXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Shake Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Shake Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Shake} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerashakecomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9TSEFLRV9DT01QTEVURV9FVkVOVC5qcz9kNDM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL1NIQUtFX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBTaGFrZSBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBTaGFrZSBFZmZlY3QgY29tcGxldGVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2V9IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFzaGFrZWNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Shake Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Shake Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Shake} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} intensity - The intensity of the effect.\r\n */\r\nmodule.exports = 'camerashakestart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9TSEFLRV9TVEFSVF9FVkVOVC5qcz80ZDdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvU0hBS0VfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFNoYWtlIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIFNoYWtlIEVmZmVjdCBzdGFydHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9TVEFSVFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZW5zaXR5IC0gVGhlIGludGVuc2l0eSBvZiB0aGUgZWZmZWN0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhc2hha2VzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Zoom Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Zoom Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Zoom} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerazoomcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX0NPTVBMRVRFX0VWRU5ULmpzPzFjYTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLG9DQUFvQztBQUMvQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvWk9PTV9DT01QTEVURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgWm9vbSBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBab29tIEVmZmVjdCBjb21wbGV0ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAqIEBzaW5jZSAzLjMuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IHRoZSBlZmZlY3QgYmVnYW4gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb219IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmF6b29tY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Zoom Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Zoom Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Zoom} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} zoom - The destination zoom value.\r\n */\r\nmodule.exports = 'camerazoomstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX1NUQVJUX0VWRU5ULmpzP2Q0YmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBab29tIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIFpvb20gRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gem9vbSAtIFRoZSBkZXN0aW5hdGlvbiB6b29tIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhem9vbXN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/events/index.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/events/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js\"),\r\n    FADE_IN_COMPLETE: __webpack_require__(/*! ./FADE_IN_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js\"),\r\n    FADE_IN_START: __webpack_require__(/*! ./FADE_IN_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js\"),\r\n    FADE_OUT_COMPLETE: __webpack_require__(/*! ./FADE_OUT_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js\"),\r\n    FADE_OUT_START: __webpack_require__(/*! ./FADE_OUT_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js\"),\r\n    FLASH_COMPLETE: __webpack_require__(/*! ./FLASH_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js\"),\r\n    FLASH_START: __webpack_require__(/*! ./FLASH_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js\"),\r\n    PAN_COMPLETE: __webpack_require__(/*! ./PAN_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js\"),\r\n    PAN_START: __webpack_require__(/*! ./PAN_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js\"),\r\n    POST_RENDER: __webpack_require__(/*! ./POST_RENDER_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js\"),\r\n    PRE_RENDER: __webpack_require__(/*! ./PRE_RENDER_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js\"),\r\n    SHAKE_COMPLETE: __webpack_require__(/*! ./SHAKE_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js\"),\r\n    SHAKE_START: __webpack_require__(/*! ./SHAKE_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js\"),\r\n    ZOOM_COMPLETE: __webpack_require__(/*! ./ZOOM_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js\"),\r\n    ZOOM_START: __webpack_require__(/*! ./ZOOM_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9pbmRleC5qcz9jNTc3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHFGQUFpQjtBQUN0QyxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELHVCQUF1QixtQkFBTyxDQUFDLHlHQUEyQjtBQUMxRCxvQkFBb0IsbUJBQU8sQ0FBQyxtR0FBd0I7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsbUdBQXdCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLDZGQUFxQjtBQUM5QyxrQkFBa0IsbUJBQU8sQ0FBQywrRkFBc0I7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLHlGQUFtQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBcUI7QUFDOUMsZ0JBQWdCLG1CQUFPLENBQUMsMkZBQW9CO0FBQzVDLG9CQUFvQixtQkFBTyxDQUFDLG1HQUF3QjtBQUNwRCxpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBcUI7QUFDOUMsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDJGQUFvQjs7QUFFNUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIEZBREVfSU5fQ09NUExFVEU6IHJlcXVpcmUoJy4vRkFERV9JTl9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRkFERV9JTl9TVEFSVDogcmVxdWlyZSgnLi9GQURFX0lOX1NUQVJUX0VWRU5UJyksXHJcbiAgICBGQURFX09VVF9DT01QTEVURTogcmVxdWlyZSgnLi9GQURFX09VVF9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRkFERV9PVVRfU1RBUlQ6IHJlcXVpcmUoJy4vRkFERV9PVVRfU1RBUlRfRVZFTlQnKSxcclxuICAgIEZMQVNIX0NPTVBMRVRFOiByZXF1aXJlKCcuL0ZMQVNIX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBGTEFTSF9TVEFSVDogcmVxdWlyZSgnLi9GTEFTSF9TVEFSVF9FVkVOVCcpLFxyXG4gICAgUEFOX0NPTVBMRVRFOiByZXF1aXJlKCcuL1BBTl9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgUEFOX1NUQVJUOiByZXF1aXJlKCcuL1BBTl9TVEFSVF9FVkVOVCcpLFxyXG4gICAgUE9TVF9SRU5ERVI6IHJlcXVpcmUoJy4vUE9TVF9SRU5ERVJfRVZFTlQnKSxcclxuICAgIFBSRV9SRU5ERVI6IHJlcXVpcmUoJy4vUFJFX1JFTkRFUl9FVkVOVCcpLFxyXG4gICAgU0hBS0VfQ09NUExFVEU6IHJlcXVpcmUoJy4vU0hBS0VfQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFNIQUtFX1NUQVJUOiByZXF1aXJlKCcuL1NIQUtFX1NUQVJUX0VWRU5UJyksXHJcbiAgICBaT09NX0NPTVBMRVRFOiByZXF1aXJlKCcuL1pPT01fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFpPT01fU1RBUlQ6IHJlcXVpcmUoJy4vWk9PTV9TVEFSVF9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/2d/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/cameras/2d/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Camera: __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/src/cameras/2d/Camera.js\"),\r\n    BaseCamera: __webpack_require__(/*! ./BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\"),\r\n    CameraManager: __webpack_require__(/*! ./CameraManager */ \"./node_modules/phaser/src/cameras/2d/CameraManager.js\"),\r\n    Effects: __webpack_require__(/*! ./effects */ \"./node_modules/phaser/src/cameras/2d/effects/index.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2luZGV4LmpzPzFmMDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQVU7QUFDOUIsZ0JBQWdCLG1CQUFPLENBQUMsd0VBQWM7QUFDdEMsbUJBQW1CLG1CQUFPLENBQUMsOEVBQWlCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQyx3RUFBVztBQUNoQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbWVyYTogcmVxdWlyZSgnLi9DYW1lcmEnKSxcclxuICAgIEJhc2VDYW1lcmE6IHJlcXVpcmUoJy4vQmFzZUNhbWVyYScpLFxyXG4gICAgQ2FtZXJhTWFuYWdlcjogcmVxdWlyZSgnLi9DYW1lcmFNYW5hZ2VyJyksXHJcbiAgICBFZmZlY3RzOiByZXF1aXJlKCcuL2VmZmVjdHMnKSxcclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/controls/FixedKeyControl.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/controls/FixedKeyControl.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Fixed Key Camera Control.\r\n *\r\n * This allows you to control the movement and zoom of a camera using the defined keys.\r\n *\r\n * ```javascript\r\n * var camControl = new FixedKeyControl({\r\n *     camera: this.cameras.main,\r\n *     left: cursors.left,\r\n *     right: cursors.right,\r\n *     speed: float OR { x: 0, y: 0 }\r\n * });\r\n * ```\r\n *\r\n * Movement is precise and has no 'smoothing' applied to it.\r\n *\r\n * You must call the `update` method of this controller every frame.\r\n *\r\n * @class FixedKeyControl\r\n * @memberof Phaser.Cameras.Controls\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Cameras.Controls.FixedKeyControlConfig} config - The Fixed Key Control configuration object.\r\n */\r\nvar FixedKeyControl = new Class({\r\n\r\n    initialize:\r\n\r\n    function FixedKeyControl (config)\r\n    {\r\n        /**\r\n         * The Camera that this Control will update.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#camera\r\n         * @type {?Phaser.Cameras.Scene2D.Camera}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.camera = GetValue(config, 'camera', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera left.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#left\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.left = GetValue(config, 'left', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera right.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#right\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.right = GetValue(config, 'right', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera up.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#up\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.up = GetValue(config, 'up', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera down.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#down\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.down = GetValue(config, 'down', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will zoom the Camera in.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#zoomIn\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomIn = GetValue(config, 'zoomIn', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will zoom the Camera out.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#zoomOut\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomOut = GetValue(config, 'zoomOut', null);\r\n\r\n        /**\r\n         * The speed at which the camera will zoom if the `zoomIn` or `zoomOut` keys are pressed.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#zoomSpeed\r\n         * @type {number}\r\n         * @default 0.01\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomSpeed = GetValue(config, 'zoomSpeed', 0.01);\r\n\r\n        /**\r\n         * The horizontal speed the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#speedX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.speedX = 0;\r\n\r\n        /**\r\n         * The vertical speed the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#speedY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.speedY = 0;\r\n\r\n        var speed = GetValue(config, 'speed', null);\r\n\r\n        if (typeof speed === 'number')\r\n        {\r\n            this.speedX = speed;\r\n            this.speedY = speed;\r\n        }\r\n        else\r\n        {\r\n            this.speedX = GetValue(config, 'speed.x', 0);\r\n            this.speedY = GetValue(config, 'speed.y', 0);\r\n        }\r\n\r\n        /**\r\n         * Internal property to track the current zoom level.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#_zoom\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._zoom = 0;\r\n\r\n        /**\r\n         * A flag controlling if the Controls will update the Camera or not.\r\n         *\r\n         * @name Phaser.Cameras.Controls.FixedKeyControl#active\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.active = (this.camera !== null);\r\n    },\r\n\r\n    /**\r\n     * Starts the Key Control running, providing it has been linked to a camera.\r\n     *\r\n     * @method Phaser.Cameras.Controls.FixedKeyControl#start\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n     */\r\n    start: function ()\r\n    {\r\n        this.active = (this.camera !== null);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops this Key Control from running. Call `start` to start it again.\r\n     *\r\n     * @method Phaser.Cameras.Controls.FixedKeyControl#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.active = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds this Key Control to a camera.\r\n     *\r\n     * @method Phaser.Cameras.Controls.FixedKeyControl#setCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera to bind this Key Control to.\r\n     *\r\n     * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n     */\r\n    setCamera: function (camera)\r\n    {\r\n        this.camera = camera;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Applies the results of pressing the control keys to the Camera.\r\n     *\r\n     * You must call this every step, it is not called automatically.\r\n     *\r\n     * @method Phaser.Cameras.Controls.FixedKeyControl#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (delta)\r\n    {\r\n        if (!this.active)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (delta === undefined) { delta = 1; }\r\n\r\n        var cam = this.camera;\r\n\r\n        if (this.up && this.up.isDown)\r\n        {\r\n            cam.scrollY -= ((this.speedY * delta) | 0);\r\n        }\r\n        else if (this.down && this.down.isDown)\r\n        {\r\n            cam.scrollY += ((this.speedY * delta) | 0);\r\n        }\r\n\r\n        if (this.left && this.left.isDown)\r\n        {\r\n            cam.scrollX -= ((this.speedX * delta) | 0);\r\n        }\r\n        else if (this.right && this.right.isDown)\r\n        {\r\n            cam.scrollX += ((this.speedX * delta) | 0);\r\n        }\r\n\r\n        //  Camera zoom\r\n\r\n        if (this.zoomIn && this.zoomIn.isDown)\r\n        {\r\n            cam.zoom -= this.zoomSpeed;\r\n\r\n            if (cam.zoom < 0.1)\r\n            {\r\n                cam.zoom = 0.1;\r\n            }\r\n        }\r\n        else if (this.zoomOut && this.zoomOut.isDown)\r\n        {\r\n            cam.zoom += this.zoomSpeed;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Key Control.\r\n     *\r\n     * @method Phaser.Cameras.Controls.FixedKeyControl#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.camera = null;\r\n\r\n        this.left = null;\r\n        this.right = null;\r\n        this.up = null;\r\n        this.down = null;\r\n\r\n        this.zoomIn = null;\r\n        this.zoomOut = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = FixedKeyControl;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL0ZpeGVkS2V5Q29udHJvbC5qcz9mNjY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdDQUF3QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdDQUF3QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0Isd0NBQXdDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy9jb250cm9scy9GaXhlZEtleUNvbnRyb2wuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBGaXhlZCBLZXkgQ2FtZXJhIENvbnRyb2wuXHJcbiAqXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBtb3ZlbWVudCBhbmQgem9vbSBvZiBhIGNhbWVyYSB1c2luZyB0aGUgZGVmaW5lZCBrZXlzLlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBjYW1Db250cm9sID0gbmV3IEZpeGVkS2V5Q29udHJvbCh7XHJcbiAqICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhcy5tYWluLFxyXG4gKiAgICAgbGVmdDogY3Vyc29ycy5sZWZ0LFxyXG4gKiAgICAgcmlnaHQ6IGN1cnNvcnMucmlnaHQsXHJcbiAqICAgICBzcGVlZDogZmxvYXQgT1IgeyB4OiAwLCB5OiAwIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBNb3ZlbWVudCBpcyBwcmVjaXNlIGFuZCBoYXMgbm8gJ3Ntb290aGluZycgYXBwbGllZCB0byBpdC5cclxuICpcclxuICogWW91IG11c3QgY2FsbCB0aGUgYHVwZGF0ZWAgbWV0aG9kIG9mIHRoaXMgY29udHJvbGxlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogQGNsYXNzIEZpeGVkS2V5Q29udHJvbFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbENvbmZpZ30gY29uZmlnIC0gVGhlIEZpeGVkIEtleSBDb250cm9sIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIEZpeGVkS2V5Q29udHJvbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBGaXhlZEtleUNvbnRyb2wgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoYXQgdGhpcyBDb250cm9sIHdpbGwgdXBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gR2V0VmFsdWUoY29uZmlnLCAnY2FtZXJhJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIGxlZnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjbGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IHRvIGJlIHByZXNzZWQgdGhhdCB3aWxsIG1vdmUgdGhlIENhbWVyYSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNyaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3JpZ2h0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIHVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3VwXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gR2V0VmFsdWUoY29uZmlnLCAndXAnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCBtb3ZlIHRoZSBDYW1lcmEgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNkb3duXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd24gPSBHZXRWYWx1ZShjb25maWcsICdkb3duJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIGluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3pvb21JblxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tSW4gPSBHZXRWYWx1ZShjb25maWcsICd6b29tSW4nLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCB6b29tIHRoZSBDYW1lcmEgb3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3pvb21PdXRcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuem9vbU91dCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21PdXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBjYW1lcmEgd2lsbCB6b29tIGlmIHRoZSBgem9vbUluYCBvciBgem9vbU91dGAga2V5cyBhcmUgcHJlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCN6b29tU3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21TcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21TcGVlZCcsIDAuMDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNwZWVkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNwZWVkWSA9IDA7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3NwZWVkJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFggPSBzcGVlZDtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFkgPSBzcGVlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFggPSBHZXRWYWx1ZShjb25maWcsICdzcGVlZC54JywgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlZWRZID0gR2V0VmFsdWUoY29uZmlnLCAnc3BlZWQueScsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdG8gdHJhY2sgdGhlIGN1cnJlbnQgem9vbSBsZXZlbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fem9vbSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyBjb250cm9sbGluZyBpZiB0aGUgQ29udHJvbHMgd2lsbCB1cGRhdGUgdGhlIENhbWVyYSBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSAodGhpcy5jYW1lcmEgIT09IG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgS2V5IENvbnRyb2wgcnVubmluZywgcHJvdmlkaW5nIGl0IGhhcyBiZWVuIGxpbmtlZCB0byBhIGNhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzdGFydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sfSBUaGlzIEtleSBDb250cm9sIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9ICh0aGlzLmNhbWVyYSAhPT0gbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoaXMgS2V5IENvbnRyb2wgZnJvbSBydW5uaW5nLiBDYWxsIGBzdGFydGAgdG8gc3RhcnQgaXQgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sfSBUaGlzIEtleSBDb250cm9sIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIHRoaXMgS2V5IENvbnRyb2wgdG8gYSBjYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjc2V0Q2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRvIGJpbmQgdGhpcyBLZXkgQ29udHJvbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgcmVzdWx0cyBvZiBwcmVzc2luZyB0aGUgY29udHJvbCBrZXlzIHRvIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogWW91IG11c3QgY2FsbCB0aGlzIGV2ZXJ5IHN0ZXAsIGl0IGlzIG5vdCBjYWxsZWQgYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsdGEgPT09IHVuZGVmaW5lZCkgeyBkZWx0YSA9IDE7IH1cclxuXHJcbiAgICAgICAgdmFyIGNhbSA9IHRoaXMuY2FtZXJhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51cCAmJiB0aGlzLnVwLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS5zY3JvbGxZIC09ICgodGhpcy5zcGVlZFkgKiBkZWx0YSkgfCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kb3duICYmIHRoaXMuZG93bi5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWSArPSAoKHRoaXMuc3BlZWRZICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWCAtPSAoKHRoaXMuc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmlnaHQgJiYgdGhpcy5yaWdodC5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWCArPSAoKHRoaXMuc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2FtZXJhIHpvb21cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuem9vbUluICYmIHRoaXMuem9vbUluLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS56b29tIC09IHRoaXMuem9vbVNwZWVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbS56b29tIDwgMC4xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYW0uem9vbSA9IDAuMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnpvb21PdXQgJiYgdGhpcy56b29tT3V0LmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS56b29tICs9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleSBDb250cm9sLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVwID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRvd24gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnpvb21JbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy56b29tT3V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaXhlZEtleUNvbnRyb2w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/FixedKeyControl.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Smoothed Key Camera Control.\r\n *\r\n * This allows you to control the movement and zoom of a camera using the defined keys.\r\n * Unlike the Fixed Camera Control you can also provide physics values for acceleration, drag and maxSpeed for smoothing effects.\r\n *\r\n * ```javascript\r\n * var controlConfig = {\r\n *     camera: this.cameras.main,\r\n *     left: cursors.left,\r\n *     right: cursors.right,\r\n *     up: cursors.up,\r\n *     down: cursors.down,\r\n *     zoomIn: this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q),\r\n *     zoomOut: this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E),\r\n *     zoomSpeed: 0.02,\r\n *     acceleration: 0.06,\r\n *     drag: 0.0005,\r\n *     maxSpeed: 1.0\r\n * };\r\n * ```\r\n * \r\n * You must call the `update` method of this controller every frame.\r\n *\r\n * @class SmoothedKeyControl\r\n * @memberof Phaser.Cameras.Controls\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Cameras.Controls.SmoothedKeyControlConfig} config - The Smoothed Key Control configuration object.\r\n */\r\nvar SmoothedKeyControl = new Class({\r\n\r\n    initialize:\r\n\r\n    function SmoothedKeyControl (config)\r\n    {\r\n        /**\r\n         * The Camera that this Control will update.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#camera\r\n         * @type {?Phaser.Cameras.Scene2D.Camera}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.camera = GetValue(config, 'camera', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera left.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#left\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.left = GetValue(config, 'left', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera right.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#right\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.right = GetValue(config, 'right', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera up.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#up\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.up = GetValue(config, 'up', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will move the Camera down.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#down\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.down = GetValue(config, 'down', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will zoom the Camera in.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomIn\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomIn = GetValue(config, 'zoomIn', null);\r\n\r\n        /**\r\n         * The Key to be pressed that will zoom the Camera out.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomOut\r\n         * @type {?Phaser.Input.Keyboard.Key}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomOut = GetValue(config, 'zoomOut', null);\r\n\r\n        /**\r\n         * The speed at which the camera will zoom if the `zoomIn` or `zoomOut` keys are pressed.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomSpeed\r\n         * @type {number}\r\n         * @default 0.01\r\n         * @since 3.0.0\r\n         */\r\n        this.zoomSpeed = GetValue(config, 'zoomSpeed', 0.01);\r\n\r\n        /**\r\n         * The horizontal acceleration the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#accelX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelX = 0;\r\n\r\n        /**\r\n         * The vertical acceleration the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#accelY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelY = 0;\r\n\r\n        var accel = GetValue(config, 'acceleration', null);\r\n\r\n        if (typeof accel === 'number')\r\n        {\r\n            this.accelX = accel;\r\n            this.accelY = accel;\r\n        }\r\n        else\r\n        {\r\n            this.accelX = GetValue(config, 'acceleration.x', 0);\r\n            this.accelY = GetValue(config, 'acceleration.y', 0);\r\n        }\r\n\r\n        /**\r\n         * The horizontal drag applied to the camera when it is moving.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#dragX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.dragX = 0;\r\n\r\n        /**\r\n         * The vertical drag applied to the camera when it is moving.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#dragY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.dragY = 0;\r\n\r\n        var drag = GetValue(config, 'drag', null);\r\n\r\n        if (typeof drag === 'number')\r\n        {\r\n            this.dragX = drag;\r\n            this.dragY = drag;\r\n        }\r\n        else\r\n        {\r\n            this.dragX = GetValue(config, 'drag.x', 0);\r\n            this.dragY = GetValue(config, 'drag.y', 0);\r\n        }\r\n\r\n        /**\r\n         * The maximum horizontal speed the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#maxSpeedX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.maxSpeedX = 0;\r\n\r\n        /**\r\n         * The maximum vertical speed the camera will move.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#maxSpeedY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.maxSpeedY = 0;\r\n\r\n        var maxSpeed = GetValue(config, 'maxSpeed', null);\r\n\r\n        if (typeof maxSpeed === 'number')\r\n        {\r\n            this.maxSpeedX = maxSpeed;\r\n            this.maxSpeedY = maxSpeed;\r\n        }\r\n        else\r\n        {\r\n            this.maxSpeedX = GetValue(config, 'maxSpeed.x', 0);\r\n            this.maxSpeedY = GetValue(config, 'maxSpeed.y', 0);\r\n        }\r\n\r\n        /**\r\n         * Internal property to track the speed of the control.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#_speedX\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._speedX = 0;\r\n\r\n        /**\r\n         * Internal property to track the speed of the control.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#_speedY\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._speedY = 0;\r\n\r\n        /**\r\n         * Internal property to track the zoom of the control.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#_zoom\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._zoom = 0;\r\n\r\n        /**\r\n         * A flag controlling if the Controls will update the Camera or not.\r\n         *\r\n         * @name Phaser.Cameras.Controls.SmoothedKeyControl#active\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.active = (this.camera !== null);\r\n    },\r\n\r\n    /**\r\n     * Starts the Key Control running, providing it has been linked to a camera.\r\n     *\r\n     * @method Phaser.Cameras.Controls.SmoothedKeyControl#start\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n     */\r\n    start: function ()\r\n    {\r\n        this.active = (this.camera !== null);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops this Key Control from running. Call `start` to start it again.\r\n     *\r\n     * @method Phaser.Cameras.Controls.SmoothedKeyControl#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.active = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds this Key Control to a camera.\r\n     *\r\n     * @method Phaser.Cameras.Controls.SmoothedKeyControl#setCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera to bind this Key Control to.\r\n     *\r\n     * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n     */\r\n    setCamera: function (camera)\r\n    {\r\n        this.camera = camera;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Applies the results of pressing the control keys to the Camera.\r\n     *\r\n     * You must call this every step, it is not called automatically.\r\n     *\r\n     * @method Phaser.Cameras.Controls.SmoothedKeyControl#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (delta)\r\n    {\r\n        if (!this.active)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (delta === undefined) { delta = 1; }\r\n\r\n        var cam = this.camera;\r\n\r\n        //  Apply Deceleration\r\n\r\n        if (this._speedX > 0)\r\n        {\r\n            this._speedX -= this.dragX * delta;\r\n\r\n            if (this._speedX < 0)\r\n            {\r\n                this._speedX = 0;\r\n            }\r\n        }\r\n        else if (this._speedX < 0)\r\n        {\r\n            this._speedX += this.dragX * delta;\r\n\r\n            if (this._speedX > 0)\r\n            {\r\n                this._speedX = 0;\r\n            }\r\n        }\r\n\r\n        if (this._speedY > 0)\r\n        {\r\n            this._speedY -= this.dragY * delta;\r\n\r\n            if (this._speedY < 0)\r\n            {\r\n                this._speedY = 0;\r\n            }\r\n        }\r\n        else if (this._speedY < 0)\r\n        {\r\n            this._speedY += this.dragY * delta;\r\n\r\n            if (this._speedY > 0)\r\n            {\r\n                this._speedY = 0;\r\n            }\r\n        }\r\n\r\n        //  Check for keys\r\n\r\n        if (this.up && this.up.isDown)\r\n        {\r\n            this._speedY += this.accelY;\r\n\r\n            if (this._speedY > this.maxSpeedY)\r\n            {\r\n                this._speedY = this.maxSpeedY;\r\n            }\r\n        }\r\n        else if (this.down && this.down.isDown)\r\n        {\r\n            this._speedY -= this.accelY;\r\n\r\n            if (this._speedY < -this.maxSpeedY)\r\n            {\r\n                this._speedY = -this.maxSpeedY;\r\n            }\r\n        }\r\n\r\n        if (this.left && this.left.isDown)\r\n        {\r\n            this._speedX += this.accelX;\r\n\r\n            if (this._speedX > this.maxSpeedX)\r\n            {\r\n                this._speedX = this.maxSpeedX;\r\n            }\r\n        }\r\n        else if (this.right && this.right.isDown)\r\n        {\r\n            this._speedX -= this.accelX;\r\n\r\n            if (this._speedX < -this.maxSpeedX)\r\n            {\r\n                this._speedX = -this.maxSpeedX;\r\n            }\r\n        }\r\n\r\n        //  Camera zoom\r\n\r\n        if (this.zoomIn && this.zoomIn.isDown)\r\n        {\r\n            this._zoom = -this.zoomSpeed;\r\n        }\r\n        else if (this.zoomOut && this.zoomOut.isDown)\r\n        {\r\n            this._zoom = this.zoomSpeed;\r\n        }\r\n        else\r\n        {\r\n            this._zoom = 0;\r\n        }\r\n\r\n        //  Apply to Camera\r\n\r\n        if (this._speedX !== 0)\r\n        {\r\n            cam.scrollX -= ((this._speedX * delta) | 0);\r\n        }\r\n\r\n        if (this._speedY !== 0)\r\n        {\r\n            cam.scrollY -= ((this._speedY * delta) | 0);\r\n        }\r\n\r\n        if (this._zoom !== 0)\r\n        {\r\n            cam.zoom += this._zoom;\r\n\r\n            if (cam.zoom < 0.001)\r\n            {\r\n                cam.zoom = 0.001;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Key Control.\r\n     *\r\n     * @method Phaser.Cameras.Controls.SmoothedKeyControl#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.camera = null;\r\n\r\n        this.left = null;\r\n        this.right = null;\r\n        this.up = null;\r\n        this.down = null;\r\n\r\n        this.zoomIn = null;\r\n        this.zoomOut = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = SmoothedKeyControl;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL1Ntb290aGVkS2V5Q29udHJvbC5qcz9lZmM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQXVEO0FBQ2xFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy9jb250cm9scy9TbW9vdGhlZEtleUNvbnRyb2wuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBTbW9vdGhlZCBLZXkgQ2FtZXJhIENvbnRyb2wuXHJcbiAqXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBtb3ZlbWVudCBhbmQgem9vbSBvZiBhIGNhbWVyYSB1c2luZyB0aGUgZGVmaW5lZCBrZXlzLlxyXG4gKiBVbmxpa2UgdGhlIEZpeGVkIENhbWVyYSBDb250cm9sIHlvdSBjYW4gYWxzbyBwcm92aWRlIHBoeXNpY3MgdmFsdWVzIGZvciBhY2NlbGVyYXRpb24sIGRyYWcgYW5kIG1heFNwZWVkIGZvciBzbW9vdGhpbmcgZWZmZWN0cy5cclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgY29udHJvbENvbmZpZyA9IHtcclxuICogICAgIGNhbWVyYTogdGhpcy5jYW1lcmFzLm1haW4sXHJcbiAqICAgICBsZWZ0OiBjdXJzb3JzLmxlZnQsXHJcbiAqICAgICByaWdodDogY3Vyc29ycy5yaWdodCxcclxuICogICAgIHVwOiBjdXJzb3JzLnVwLFxyXG4gKiAgICAgZG93bjogY3Vyc29ycy5kb3duLFxyXG4gKiAgICAgem9vbUluOiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUSksXHJcbiAqICAgICB6b29tT3V0OiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRSksXHJcbiAqICAgICB6b29tU3BlZWQ6IDAuMDIsXHJcbiAqICAgICBhY2NlbGVyYXRpb246IDAuMDYsXHJcbiAqICAgICBkcmFnOiAwLjAwMDUsXHJcbiAqICAgICBtYXhTcGVlZDogMS4wXHJcbiAqIH07XHJcbiAqIGBgYFxyXG4gKiBcclxuICogWW91IG11c3QgY2FsbCB0aGUgYHVwZGF0ZWAgbWV0aG9kIG9mIHRoaXMgY29udHJvbGxlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogQGNsYXNzIFNtb290aGVkS2V5Q29udHJvbFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbENvbmZpZ30gY29uZmlnIC0gVGhlIFNtb290aGVkIEtleSBDb250cm9sIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIFNtb290aGVkS2V5Q29udHJvbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTbW9vdGhlZEtleUNvbnRyb2wgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoYXQgdGhpcyBDb250cm9sIHdpbGwgdXBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gR2V0VmFsdWUoY29uZmlnLCAnY2FtZXJhJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIGxlZnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjbGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IHRvIGJlIHByZXNzZWQgdGhhdCB3aWxsIG1vdmUgdGhlIENhbWVyYSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNyaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3JpZ2h0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIHVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3VwXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gR2V0VmFsdWUoY29uZmlnLCAndXAnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCBtb3ZlIHRoZSBDYW1lcmEgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNkb3duXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd24gPSBHZXRWYWx1ZShjb25maWcsICdkb3duJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIGluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3pvb21JblxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tSW4gPSBHZXRWYWx1ZShjb25maWcsICd6b29tSW4nLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCB6b29tIHRoZSBDYW1lcmEgb3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3pvb21PdXRcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuem9vbU91dCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21PdXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBjYW1lcmEgd2lsbCB6b29tIGlmIHRoZSBgem9vbUluYCBvciBgem9vbU91dGAga2V5cyBhcmUgcHJlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCN6b29tU3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21TcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21TcGVlZCcsIDAuMDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gdGhlIGNhbWVyYSB3aWxsIG1vdmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjYWNjZWxYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY2NlbFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgYWNjZWxlcmF0aW9uIHRoZSBjYW1lcmEgd2lsbCBtb3ZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI2FjY2VsWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGFjY2VsID0gR2V0VmFsdWUoY29uZmlnLCAnYWNjZWxlcmF0aW9uJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgYWNjZWwgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFggPSBhY2NlbDtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFkgPSBhY2NlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFggPSBHZXRWYWx1ZShjb25maWcsICdhY2NlbGVyYXRpb24ueCcsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsWSA9IEdldFZhbHVlKGNvbmZpZywgJ2FjY2VsZXJhdGlvbi55JywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBkcmFnIGFwcGxpZWQgdG8gdGhlIGNhbWVyYSB3aGVuIGl0IGlzIG1vdmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNkcmFnWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHJhZ1ggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgZHJhZyBhcHBsaWVkIHRvIHRoZSBjYW1lcmEgd2hlbiBpdCBpcyBtb3ZpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjZHJhZ1lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRyYWdZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRyYWcgPSBHZXRWYWx1ZShjb25maWcsICdkcmFnJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZHJhZyA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdYID0gZHJhZztcclxuICAgICAgICAgICAgdGhpcy5kcmFnWSA9IGRyYWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ1ggPSBHZXRWYWx1ZShjb25maWcsICdkcmFnLngnLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5kcmFnWSA9IEdldFZhbHVlKGNvbmZpZywgJ2RyYWcueScsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNtYXhTcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNwZWVkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHZlcnRpY2FsIHNwZWVkIHRoZSBjYW1lcmEgd2lsbCBtb3ZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI21heFNwZWVkWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4U3BlZWRZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIG1heFNwZWVkID0gR2V0VmFsdWUoY29uZmlnLCAnbWF4U3BlZWQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXhTcGVlZCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWCA9IG1heFNwZWVkO1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWSA9IG1heFNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWCA9IEdldFZhbHVlKGNvbmZpZywgJ21heFNwZWVkLngnLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5tYXhTcGVlZFkgPSBHZXRWYWx1ZShjb25maWcsICdtYXhTcGVlZC55JywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0byB0cmFjayB0aGUgc3BlZWQgb2YgdGhlIGNvbnRyb2wuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjX3NwZWVkWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3BlZWRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdG8gdHJhY2sgdGhlIHNwZWVkIG9mIHRoZSBjb250cm9sLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI19zcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3NwZWVkWSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHByb3BlcnR5IHRvIHRyYWNrIHRoZSB6b29tIG9mIHRoZSBjb250cm9sLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI196b29tXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl96b29tID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIGNvbnRyb2xsaW5nIGlmIHRoZSBDb250cm9scyB3aWxsIHVwZGF0ZSB0aGUgQ2FtZXJhIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZSA9ICh0aGlzLmNhbWVyYSAhPT0gbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBLZXkgQ29udHJvbCBydW5uaW5nLCBwcm92aWRpbmcgaXQgaGFzIGJlZW4gbGlua2VkIHRvIGEgY2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gKHRoaXMuY2FtZXJhICE9PSBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhpcyBLZXkgQ29udHJvbCBmcm9tIHJ1bm5pbmcuIENhbGwgYHN0YXJ0YCB0byBzdGFydCBpdCBhZ2Fpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNzdG9wXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZHMgdGhpcyBLZXkgQ29udHJvbCB0byBhIGNhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNzZXRDYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdG8gYmluZCB0aGlzIEtleSBDb250cm9sIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbH0gVGhpcyBLZXkgQ29udHJvbCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSByZXN1bHRzIG9mIHByZXNzaW5nIHRoZSBjb250cm9sIGtleXMgdG8gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgbXVzdCBjYWxsIHRoaXMgZXZlcnkgc3RlcCwgaXQgaXMgbm90IGNhbGxlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gdW5kZWZpbmVkKSB7IGRlbHRhID0gMTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtID0gdGhpcy5jYW1lcmE7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBEZWNlbGVyYXRpb25cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGVlZFggLT0gdGhpcy5kcmFnWCAqIGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc3BlZWRYIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWCArPSB0aGlzLmRyYWdYICogZGVsdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3BlZWRYID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRYID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGVlZFkgLT0gdGhpcy5kcmFnWSAqIGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc3BlZWRZIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWSArPSB0aGlzLmRyYWdZICogZGVsdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3BlZWRZID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRZID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIENoZWNrIGZvciBrZXlzXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwICYmIHRoaXMudXAuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRZICs9IHRoaXMuYWNjZWxZO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA+IHRoaXMubWF4U3BlZWRZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGVlZFkgPSB0aGlzLm1heFNwZWVkWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRvd24gJiYgdGhpcy5kb3duLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWSAtPSB0aGlzLmFjY2VsWTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zcGVlZFkgPCAtdGhpcy5tYXhTcGVlZFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWSA9IC10aGlzLm1heFNwZWVkWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGVmdCAmJiB0aGlzLmxlZnQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRYICs9IHRoaXMuYWNjZWxYO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA+IHRoaXMubWF4U3BlZWRYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGVlZFggPSB0aGlzLm1heFNwZWVkWDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRYIC09IHRoaXMuYWNjZWxYO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA8IC10aGlzLm1heFNwZWVkWClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRYID0gLXRoaXMubWF4U3BlZWRYO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2FtZXJhIHpvb21cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuem9vbUluICYmIHRoaXMuem9vbUluLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3pvb20gPSAtdGhpcy56b29tU3BlZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuem9vbU91dCAmJiB0aGlzLnpvb21PdXQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fem9vbSA9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl96b29tID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBBcHBseSB0byBDYW1lcmFcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS5zY3JvbGxYIC09ICgodGhpcy5fc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc3BlZWRZICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLnNjcm9sbFkgLT0gKCh0aGlzLl9zcGVlZFkgKiBkZWx0YSkgfCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl96b29tICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLnpvb20gKz0gdGhpcy5fem9vbTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW0uem9vbSA8IDAuMDAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYW0uem9vbSA9IDAuMDAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgS2V5IENvbnRyb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXAgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZG93biA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuem9vbUluID0gbnVsbDtcclxuICAgICAgICB0aGlzLnpvb21PdXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aGVkS2V5Q29udHJvbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/controls/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/cameras/controls/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Controls\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    FixedKeyControl: __webpack_require__(/*! ./FixedKeyControl */ \"./node_modules/phaser/src/cameras/controls/FixedKeyControl.js\"),\r\n    SmoothedKeyControl: __webpack_require__(/*! ./SmoothedKeyControl */ \"./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL2luZGV4LmpzP2Y4MGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBbUI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsOEZBQXNCOztBQUV0RCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvY29udHJvbHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRml4ZWRLZXlDb250cm9sOiByZXF1aXJlKCcuL0ZpeGVkS2V5Q29udHJvbCcpLFxyXG4gICAgU21vb3RoZWRLZXlDb250cm9sOiByZXF1aXJlKCcuL1Ntb290aGVkS2V5Q29udHJvbCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/cameras/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/cameras/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Types.Cameras\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Controls: __webpack_require__(/*! ./controls */ \"./node_modules/phaser/src/cameras/controls/index.js\"),\r\n    Scene2D: __webpack_require__(/*! ./2d */ \"./node_modules/phaser/src/cameras/2d/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2luZGV4LmpzPzkwZTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHVFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQywyREFBTTs7QUFFM0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5UeXBlcy5DYW1lcmFzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ29udHJvbHM6IHJlcXVpcmUoJy4vY29udHJvbHMnKSxcclxuICAgIFNjZW5lMkQ6IHJlcXVpcmUoJy4vMmQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/const.js":
/*!******************************************!*\
  !*** ./node_modules/phaser/src/const.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Global constants.\r\n * \r\n * @ignore\r\n */\r\n\r\nvar CONST = {\r\n\r\n    /**\r\n     * Phaser Release Version\r\n     * \r\n     * @name Phaser.VERSION\r\n     * @const\r\n     * @type {string}\r\n     * @since 3.0.0\r\n     */\r\n    VERSION: '3.21.0',\r\n\r\n    BlendModes: __webpack_require__(/*! ./renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\"),\r\n\r\n    ScaleModes: __webpack_require__(/*! ./renderer/ScaleModes */ \"./node_modules/phaser/src/renderer/ScaleModes.js\"),\r\n\r\n    /**\r\n     * AUTO Detect Renderer.\r\n     * \r\n     * @name Phaser.AUTO\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    AUTO: 0,\r\n\r\n    /**\r\n     * Canvas Renderer.\r\n     * \r\n     * @name Phaser.CANVAS\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CANVAS: 1,\r\n\r\n    /**\r\n     * WebGL Renderer.\r\n     * \r\n     * @name Phaser.WEBGL\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    WEBGL: 2,\r\n\r\n    /**\r\n     * Headless Renderer.\r\n     * \r\n     * @name Phaser.HEADLESS\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    HEADLESS: 3,\r\n\r\n    /**\r\n     * In Phaser the value -1 means 'forever' in lots of cases, this const allows you to use it instead\r\n     * to help you remember what the value is doing in your code.\r\n     * \r\n     * @name Phaser.FOREVER\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FOREVER: -1,\r\n\r\n    /**\r\n     * Direction constant.\r\n     * \r\n     * @name Phaser.NONE\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NONE: 4,\r\n\r\n    /**\r\n     * Direction constant.\r\n     * \r\n     * @name Phaser.UP\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    UP: 5,\r\n\r\n    /**\r\n     * Direction constant.\r\n     * \r\n     * @name Phaser.DOWN\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    DOWN: 6,\r\n\r\n    /**\r\n     * Direction constant.\r\n     * \r\n     * @name Phaser.LEFT\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LEFT: 7,\r\n\r\n    /**\r\n     * Direction constant.\r\n     * \r\n     * @name Phaser.RIGHT\r\n     * @const\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    RIGHT: 8\r\n\r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb25zdC5qcz9hN2U5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF1Qjs7QUFFL0MsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXVCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBHbG9iYWwgY29uc3RhbnRzLlxyXG4gKiBcclxuICogQGlnbm9yZVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBoYXNlciBSZWxlYXNlIFZlcnNpb25cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlZFUlNJT05cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBWRVJTSU9OOiAnMy4yMS4wJyxcclxuXHJcbiAgICBCbGVuZE1vZGVzOiByZXF1aXJlKCcuL3JlbmRlcmVyL0JsZW5kTW9kZXMnKSxcclxuXHJcbiAgICBTY2FsZU1vZGVzOiByZXF1aXJlKCcuL3JlbmRlcmVyL1NjYWxlTW9kZXMnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFVVE8gRGV0ZWN0IFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQVVUT1xyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBBVVRPOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ0FOVkFTXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENBTlZBUzogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuV0VCR0xcclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgV0VCR0w6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWFkbGVzcyBSZW5kZXJlci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkhFQURMRVNTXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEhFQURMRVNTOiAzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gUGhhc2VyIHRoZSB2YWx1ZSAtMSBtZWFucyAnZm9yZXZlcicgaW4gbG90cyBvZiBjYXNlcywgdGhpcyBjb25zdCBhbGxvd3MgeW91IHRvIHVzZSBpdCBpbnN0ZWFkXHJcbiAgICAgKiB0byBoZWxwIHlvdSByZW1lbWJlciB3aGF0IHRoZSB2YWx1ZSBpcyBkb2luZyBpbiB5b3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5GT1JFVkVSXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZPUkVWRVI6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlyZWN0aW9uIGNvbnN0YW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTk9ORVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOT05FOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlyZWN0aW9uIGNvbnN0YW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVVBcclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVVA6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5ET1dOXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERPV046IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5MRUZUXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExFRlQ6IDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5SSUdIVFxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBSSUdIVDogOFxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/Config.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/core/Config.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Device = __webpack_require__(/*! ../device */ \"./node_modules/phaser/src/device/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar PhaserMath = __webpack_require__(/*! ../math/ */ \"./node_modules/phaser/src/math/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar DefaultPlugins = __webpack_require__(/*! ../plugins/DefaultPlugins */ \"./node_modules/phaser/src/plugins/DefaultPlugins.js\");\r\nvar ValueToColor = __webpack_require__(/*! ../display/color/ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The active game configuration settings, parsed from a {@link Phaser.Types.Core.GameConfig} object.\r\n *\r\n * @class Config\r\n * @memberof Phaser.Core\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Core.GameConfig} [GameConfig] - The configuration object for your Phaser Game instance.\r\n *\r\n * @see Phaser.Game#config\r\n */\r\nvar Config = new Class({\r\n\r\n    initialize:\r\n\r\n    function Config (config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        var defaultBannerColor = [\r\n            '#ff0000',\r\n            '#ffff00',\r\n            '#00ff00',\r\n            '#00ffff',\r\n            '#000000'\r\n        ];\r\n\r\n        var defaultBannerTextColor = '#ffffff';\r\n\r\n        /**\r\n         * @const {(integer|string)} Phaser.Core.Config#width - The width of the underlying canvas, in pixels.\r\n         */\r\n        this.width = GetValue(config, 'width', 1024);\r\n\r\n        /**\r\n         * @const {(integer|string)} Phaser.Core.Config#height - The height of the underlying canvas, in pixels.\r\n         */\r\n        this.height = GetValue(config, 'height', 768);\r\n\r\n        /**\r\n         * @const {(Phaser.Scale.ZoomType|integer)} Phaser.Core.Config#zoom - The zoom factor, as used by the Scale Manager.\r\n         */\r\n        this.zoom = GetValue(config, 'zoom', 1);\r\n\r\n        /**\r\n         * @const {number} Phaser.Core.Config#resolution - The canvas device pixel resolution. Currently un-used.\r\n         */\r\n        this.resolution = GetValue(config, 'resolution', 1);\r\n\r\n        /**\r\n         * @const {?*} Phaser.Core.Config#parent - A parent DOM element into which the canvas created by the renderer will be injected.\r\n         */\r\n        this.parent = GetValue(config, 'parent', undefined);\r\n\r\n        /**\r\n         * @const {Phaser.Scale.ScaleModeType} Phaser.Core.Config#scaleMode - The scale mode as used by the Scale Manager. The default is zero, which is no scaling.\r\n         */\r\n        this.scaleMode = GetValue(config, 'scaleMode', 0);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#expandParent - Is the Scale Manager allowed to adjust the CSS height property of the parent to be 100%?\r\n         */\r\n        this.expandParent = GetValue(config, 'expandParent', true);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#autoRound - Automatically round the display and style sizes of the canvas. This can help with performance in lower-powered devices.\r\n         */\r\n        this.autoRound = GetValue(config, 'autoRound', false);\r\n\r\n        /**\r\n         * @const {Phaser.Scale.CenterType} Phaser.Core.Config#autoCenter - Automatically center the canvas within the parent?\r\n         */\r\n        this.autoCenter = GetValue(config, 'autoCenter', 0);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#resizeInterval - How many ms should elapse before checking if the browser size has changed?\r\n         */\r\n        this.resizeInterval = GetValue(config, 'resizeInterval', 500);\r\n\r\n        /**\r\n         * @const {?(HTMLElement|string)} Phaser.Core.Config#fullscreenTarget - The DOM element that will be sent into full screen mode, or its `id`. If undefined Phaser will create its own div and insert the canvas into it when entering fullscreen mode.\r\n         */\r\n        this.fullscreenTarget = GetValue(config, 'fullscreenTarget', null);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#minWidth - The minimum width, in pixels, the canvas will scale down to. A value of zero means no minimum.\r\n         */\r\n        this.minWidth = GetValue(config, 'minWidth', 0);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#maxWidth - The maximum width, in pixels, the canvas will scale up to. A value of zero means no maximum.\r\n         */\r\n        this.maxWidth = GetValue(config, 'maxWidth', 0);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#minHeight - The minimum height, in pixels, the canvas will scale down to. A value of zero means no minimum.\r\n         */\r\n        this.minHeight = GetValue(config, 'minHeight', 0);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#maxHeight - The maximum height, in pixels, the canvas will scale up to. A value of zero means no maximum.\r\n         */\r\n        this.maxHeight = GetValue(config, 'maxHeight', 0);\r\n\r\n        //  Scale Manager - Anything set in here over-rides anything set above\r\n\r\n        var scaleConfig = GetValue(config, 'scale', null);\r\n\r\n        if (scaleConfig)\r\n        {\r\n            this.width = GetValue(scaleConfig, 'width', this.width);\r\n            this.height = GetValue(scaleConfig, 'height', this.height);\r\n            this.zoom = GetValue(scaleConfig, 'zoom', this.zoom);\r\n            this.resolution = GetValue(scaleConfig, 'resolution', this.resolution);\r\n            this.parent = GetValue(scaleConfig, 'parent', this.parent);\r\n            this.scaleMode = GetValue(scaleConfig, 'mode', this.scaleMode);\r\n            this.expandParent = GetValue(scaleConfig, 'expandParent', this.expandParent);\r\n            this.autoRound = GetValue(scaleConfig, 'autoRound', this.autoRound);\r\n            this.autoCenter = GetValue(scaleConfig, 'autoCenter', this.autoCenter);\r\n            this.resizeInterval = GetValue(scaleConfig, 'resizeInterval', this.resizeInterval);\r\n            this.fullscreenTarget = GetValue(scaleConfig, 'fullscreenTarget', this.fullscreenTarget);\r\n            this.minWidth = GetValue(scaleConfig, 'min.width', this.minWidth);\r\n            this.maxWidth = GetValue(scaleConfig, 'max.width', this.maxWidth);\r\n            this.minHeight = GetValue(scaleConfig, 'min.height', this.minHeight);\r\n            this.maxHeight = GetValue(scaleConfig, 'max.height', this.maxHeight);\r\n        }\r\n\r\n        /**\r\n         * @const {number} Phaser.Core.Config#renderType - Force Phaser to use a specific renderer. Can be `CONST.CANVAS`, `CONST.WEBGL`, `CONST.HEADLESS` or `CONST.AUTO` (default)\r\n         */\r\n        this.renderType = GetValue(config, 'type', CONST.AUTO);\r\n\r\n        /**\r\n         * @const {?HTMLCanvasElement} Phaser.Core.Config#canvas - Force Phaser to use your own Canvas element instead of creating one.\r\n         */\r\n        this.canvas = GetValue(config, 'canvas', null);\r\n\r\n        /**\r\n         * @const {?(CanvasRenderingContext2D|WebGLRenderingContext)} Phaser.Core.Config#context - Force Phaser to use your own Canvas context instead of creating one.\r\n         */\r\n        this.context = GetValue(config, 'context', null);\r\n\r\n        /**\r\n         * @const {?string} Phaser.Core.Config#canvasStyle - Optional CSS attributes to be set on the canvas object created by the renderer.\r\n         */\r\n        this.canvasStyle = GetValue(config, 'canvasStyle', null);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#customEnvironment - Is Phaser running under a custom (non-native web) environment? If so, set this to `true` to skip internal Feature detection. If `true` the `renderType` cannot be left as `AUTO`.\r\n         */\r\n        this.customEnvironment = GetValue(config, 'customEnvironment', false);\r\n\r\n        /**\r\n         * @const {?object} Phaser.Core.Config#sceneConfig - The default Scene configuration object.\r\n         */\r\n        this.sceneConfig = GetValue(config, 'scene', null);\r\n\r\n        /**\r\n         * @const {string[]} Phaser.Core.Config#seed - A seed which the Random Data Generator will use. If not given, a dynamic seed based on the time is used.\r\n         */\r\n        this.seed = GetValue(config, 'seed', [ (Date.now() * Math.random()).toString() ]);\r\n\r\n        PhaserMath.RND = new PhaserMath.RandomDataGenerator(this.seed);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#gameTitle - The title of the game.\r\n         */\r\n        this.gameTitle = GetValue(config, 'title', '');\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#gameURL - The URL of the game.\r\n         */\r\n        this.gameURL = GetValue(config, 'url', 'https://phaser.io');\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#gameVersion - The version of the game.\r\n         */\r\n        this.gameVersion = GetValue(config, 'version', '');\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#autoFocus - If `true` the window will automatically be given focus immediately and on any future mousedown event.\r\n         */\r\n        this.autoFocus = GetValue(config, 'autoFocus', true);\r\n\r\n        //  DOM Element Container\r\n\r\n        /**\r\n         * @const {?boolean} Phaser.Core.Config#domCreateContainer - Should the game create a div element to act as a DOM Container? Only enable if you're using DOM Element objects. You must provide a parent object if you use this feature.\r\n         */\r\n        this.domCreateContainer = GetValue(config, 'dom.createContainer', false);\r\n\r\n        /**\r\n         * @const {?boolean} Phaser.Core.Config#domBehindCanvas - Should the DOM Container that is created (if `dom.createContainer` is true) be positioned behind (true) or over the top (false, the default) of the game canvas?\r\n         */\r\n        this.domBehindCanvas = GetValue(config, 'dom.behindCanvas', false);\r\n\r\n        //  Input\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputKeyboard - Enable the Keyboard Plugin. This can be disabled in games that don't need keyboard input.\r\n         */\r\n        this.inputKeyboard = GetValue(config, 'input.keyboard', true);\r\n\r\n        /**\r\n         * @const {*} Phaser.Core.Config#inputKeyboardEventTarget - The DOM Target to listen for keyboard events on. Defaults to `window` if not specified.\r\n         */\r\n        this.inputKeyboardEventTarget = GetValue(config, 'input.keyboard.target', window);\r\n\r\n        /**\r\n         * @const {?integer[]} Phaser.Core.Config#inputKeyboardCapture - `preventDefault` will be called on every non-modified key which has a key code in this array. By default, it is empty.\r\n         */\r\n        this.inputKeyboardCapture = GetValue(config, 'input.keyboard.capture', []);\r\n\r\n        /**\r\n         * @const {(boolean|object)} Phaser.Core.Config#inputMouse - Enable the Mouse Plugin. This can be disabled in games that don't need mouse input.\r\n         */\r\n        this.inputMouse = GetValue(config, 'input.mouse', true);\r\n\r\n        /**\r\n         * @const {?*} Phaser.Core.Config#inputMouseEventTarget - The DOM Target to listen for mouse events on. Defaults to the game canvas if not specified.\r\n         */\r\n        this.inputMouseEventTarget = GetValue(config, 'input.mouse.target', null);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputMouseCapture - Should mouse events be captured? I.e. have prevent default called on them.\r\n         */\r\n        this.inputMouseCapture = GetValue(config, 'input.mouse.capture', true);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputTouch - Enable the Touch Plugin. This can be disabled in games that don't need touch input.\r\n         */\r\n        this.inputTouch = GetValue(config, 'input.touch', Device.input.touch);\r\n\r\n        /**\r\n         * @const {?*} Phaser.Core.Config#inputTouchEventTarget - The DOM Target to listen for touch events on. Defaults to the game canvas if not specified.\r\n         */\r\n        this.inputTouchEventTarget = GetValue(config, 'input.touch.target', null);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputTouchCapture - Should touch events be captured? I.e. have prevent default called on them.\r\n         */\r\n        this.inputTouchCapture = GetValue(config, 'input.touch.capture', true);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#inputActivePointers - The number of Pointer objects created by default. In a mouse-only, or non-multi touch game, you can leave this as 1.\r\n         */\r\n        this.inputActivePointers = GetValue(config, 'input.activePointers', 1);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#inputSmoothFactor - The smoothing factor to apply during Pointer movement. See {@link Phaser.Input.Pointer#smoothFactor}.\r\n         */\r\n        this.inputSmoothFactor = GetValue(config, 'input.smoothFactor', 0);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputWindowEvents - Should Phaser listen for input events on the Window? If you disable this, events like 'POINTER_UP_OUTSIDE' will no longer fire.\r\n         */\r\n        this.inputWindowEvents = GetValue(config, 'input.windowEvents', true);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#inputGamepad - Enable the Gamepad Plugin. This can be disabled in games that don't need gamepad input.\r\n         */\r\n        this.inputGamepad = GetValue(config, 'input.gamepad', false);\r\n\r\n        /**\r\n         * @const {*} Phaser.Core.Config#inputGamepadEventTarget - The DOM Target to listen for gamepad events on. Defaults to `window` if not specified.\r\n         */\r\n        this.inputGamepadEventTarget = GetValue(config, 'input.gamepad.target', window);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#disableContextMenu - Set to `true` to disable the right-click context menu.\r\n         */\r\n        this.disableContextMenu = GetValue(config, 'disableContextMenu', false);\r\n\r\n        /**\r\n         * @const {Phaser.Types.Core.AudioConfig} Phaser.Core.Config#audio - The Audio Configuration object.\r\n         */\r\n        this.audio = GetValue(config, 'audio');\r\n\r\n        //  If you do: { banner: false } it won't display any banner at all\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#hideBanner - Don't write the banner line to the console.log.\r\n         */\r\n        this.hideBanner = (GetValue(config, 'banner', null) === false);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#hidePhaser - Omit Phaser's name and version from the banner.\r\n         */\r\n        this.hidePhaser = GetValue(config, 'banner.hidePhaser', false);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#bannerTextColor - The color of the banner text.\r\n         */\r\n        this.bannerTextColor = GetValue(config, 'banner.text', defaultBannerTextColor);\r\n\r\n        /**\r\n         * @const {string[]} Phaser.Core.Config#bannerBackgroundColor - The background colors of the banner.\r\n         */\r\n        this.bannerBackgroundColor = GetValue(config, 'banner.background', defaultBannerColor);\r\n\r\n        if (this.gameTitle === '' && this.hidePhaser)\r\n        {\r\n            this.hideBanner = true;\r\n        }\r\n\r\n        /**\r\n         * @const {?Phaser.Types.Core.FPSConfig} Phaser.Core.Config#fps - The Frame Rate Configuration object, as parsed by the Timestep class.\r\n         */\r\n        this.fps = GetValue(config, 'fps', null);\r\n\r\n        //  Renderer Settings\r\n        //  These can either be in a `render` object within the Config, or specified on their own\r\n\r\n        var renderConfig = GetValue(config, 'render', config);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#antialias - When set to `true`, WebGL uses linear interpolation to draw scaled or rotated textures, giving a smooth appearance. When set to `false`, WebGL uses nearest-neighbor interpolation, giving a crisper appearance. `false` also disables antialiasing of the game canvas itself, if the browser supports it, when the game canvas is scaled.\r\n         */\r\n        this.antialias = GetValue(renderConfig, 'antialias', true);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#antialiasGL - Sets the `antialias` property when the WebGL context is created. Setting this value does not impact any subsequent textures that are created, or the canvas style attributes.\r\n         */\r\n        this.antialiasGL = GetValue(renderConfig, 'antialiasGL', true);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#mipmapFilter - Sets the `mipmapFilter` property when the WebGL renderer is created.\r\n         */\r\n        this.mipmapFilter = GetValue(renderConfig, 'mipmapFilter', 'LINEAR');\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#desynchronized - When set to `true` it will create a desynchronized context for both 2D and WebGL. See https://developers.google.com/web/updates/2019/05/desynchronized for details.\r\n         */\r\n        this.desynchronized = GetValue(renderConfig, 'desynchronized', false);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#roundPixels - Draw texture-based Game Objects at only whole-integer positions. Game Objects without textures, like Graphics, ignore this property.\r\n         */\r\n        this.roundPixels = GetValue(renderConfig, 'roundPixels', false);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#pixelArt - Prevent pixel art from becoming blurred when scaled. It will remain crisp (tells the WebGL renderer to automatically create textures using a linear filter mode).\r\n         */\r\n        this.pixelArt = GetValue(renderConfig, 'pixelArt', this.zoom !== 1);\r\n\r\n        if (this.pixelArt)\r\n        {\r\n            this.antialias = false;\r\n            this.roundPixels = true;\r\n        }\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#transparent - Whether the game canvas will have a transparent background.\r\n         */\r\n        this.transparent = GetValue(renderConfig, 'transparent', false);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#clearBeforeRender - Whether the game canvas will be cleared between each rendering frame. You can disable this if you have a full-screen background image or game object.\r\n         */\r\n        this.clearBeforeRender = GetValue(renderConfig, 'clearBeforeRender', true);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#premultipliedAlpha - In WebGL mode, sets the drawing buffer to contain colors with pre-multiplied alpha.\r\n         */\r\n        this.premultipliedAlpha = GetValue(renderConfig, 'premultipliedAlpha', true);\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#failIfMajorPerformanceCaveat - Let the browser abort creating a WebGL context if it judges performance would be unacceptable.\r\n         */\r\n        this.failIfMajorPerformanceCaveat = GetValue(renderConfig, 'failIfMajorPerformanceCaveat', false);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#powerPreference - \"high-performance\", \"low-power\" or \"default\". A hint to the browser on how much device power the game might use.\r\n         */\r\n        this.powerPreference = GetValue(renderConfig, 'powerPreference', 'default');\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#batchSize - The default WebGL Batch size.\r\n         */\r\n        this.batchSize = GetValue(renderConfig, 'batchSize', 2000);\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#maxLights - The maximum number of lights allowed to be visible within range of a single Camera in the LightManager.\r\n         */\r\n        this.maxLights = GetValue(renderConfig, 'maxLights', 10);\r\n\r\n        var bgc = GetValue(config, 'backgroundColor', 0);\r\n\r\n        /**\r\n         * @const {Phaser.Display.Color} Phaser.Core.Config#backgroundColor - The background color of the game canvas. The default is black. This value is ignored if `transparent` is set to `true`.\r\n         */\r\n        this.backgroundColor = ValueToColor(bgc);\r\n\r\n        if (bgc === 0 && this.transparent)\r\n        {\r\n            this.backgroundColor.alpha = 0;\r\n        }\r\n\r\n        /**\r\n         * @const {Phaser.Types.Core.BootCallback} Phaser.Core.Config#preBoot - Called before Phaser boots. Useful for initializing anything not related to Phaser that Phaser may require while booting.\r\n         */\r\n        this.preBoot = GetValue(config, 'callbacks.preBoot', NOOP);\r\n\r\n        /**\r\n         * @const {Phaser.Types.Core.BootCallback} Phaser.Core.Config#postBoot - A function to run at the end of the boot sequence. At this point, all the game systems have started and plugins have been loaded.\r\n         */\r\n        this.postBoot = GetValue(config, 'callbacks.postBoot', NOOP);\r\n\r\n        /**\r\n         * @const {Phaser.Types.Core.PhysicsConfig} Phaser.Core.Config#physics - The Physics Configuration object.\r\n         */\r\n        this.physics = GetValue(config, 'physics', {});\r\n\r\n        /**\r\n         * @const {(boolean|string)} Phaser.Core.Config#defaultPhysicsSystem - The default physics system. It will be started for each scene. Either 'arcade', 'impact' or 'matter'.\r\n         */\r\n        this.defaultPhysicsSystem = GetValue(this.physics, 'default', false);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#loaderBaseURL - A URL used to resolve paths given to the loader. Example: 'http://labs.phaser.io/assets/'.\r\n         */\r\n        this.loaderBaseURL = GetValue(config, 'loader.baseURL', '');\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#loaderPath - A URL path used to resolve relative paths given to the loader. Example: 'images/sprites/'.\r\n         */\r\n        this.loaderPath = GetValue(config, 'loader.path', '');\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#loaderMaxParallelDownloads - Maximum parallel downloads allowed for resources (Default to 32).\r\n         */\r\n        this.loaderMaxParallelDownloads = GetValue(config, 'loader.maxParallelDownloads', 32);\r\n\r\n        /**\r\n         * @const {(string|undefined)} Phaser.Core.Config#loaderCrossOrigin - 'anonymous', 'use-credentials', or `undefined`. If you're not making cross-origin requests, leave this as `undefined`. See {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes}.\r\n         */\r\n        this.loaderCrossOrigin = GetValue(config, 'loader.crossOrigin', undefined);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#loaderResponseType - The response type of the XHR request, e.g. `blob`, `text`, etc.\r\n         */\r\n        this.loaderResponseType = GetValue(config, 'loader.responseType', '');\r\n\r\n        /**\r\n         * @const {boolean} Phaser.Core.Config#loaderAsync - Should the XHR request use async or not?\r\n         */\r\n        this.loaderAsync = GetValue(config, 'loader.async', true);\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#loaderUser - Optional username for all XHR requests.\r\n         */\r\n        this.loaderUser = GetValue(config, 'loader.user', '');\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#loaderPassword - Optional password for all XHR requests.\r\n         */\r\n        this.loaderPassword = GetValue(config, 'loader.password', '');\r\n\r\n        /**\r\n         * @const {integer} Phaser.Core.Config#loaderTimeout - Optional XHR timeout value, in ms.\r\n         */\r\n        this.loaderTimeout = GetValue(config, 'loader.timeout', 0);\r\n\r\n        /*\r\n         * Allows `plugins` property to either be an array, in which case it just replaces\r\n         * the default plugins like previously, or a config object.\r\n         *\r\n         * plugins: {\r\n         *    global: [\r\n         *        { key: 'TestPlugin', plugin: TestPlugin, start: true, data: { msg: 'The plugin is alive' } },\r\n         *    ],\r\n         *    scene: [\r\n         *        { key: 'WireFramePlugin', plugin: WireFramePlugin, systemKey: 'wireFramePlugin', sceneKey: 'wireframe' }\r\n         *    ],\r\n         *    default: [], OR\r\n         *    defaultMerge: [\r\n         *        'ModPlayer'\r\n         *    ]\r\n         * }\r\n         */\r\n\r\n        /**\r\n         * @const {any} Phaser.Core.Config#installGlobalPlugins - An array of global plugins to be installed.\r\n         */\r\n        this.installGlobalPlugins = [];\r\n\r\n        /**\r\n         * @const {any} Phaser.Core.Config#installScenePlugins - An array of Scene level plugins to be installed.\r\n         */\r\n        this.installScenePlugins = [];\r\n\r\n        var plugins = GetValue(config, 'plugins', null);\r\n        var defaultPlugins = DefaultPlugins.DefaultScene;\r\n\r\n        if (plugins)\r\n        {\r\n            //  Old 3.7 array format?\r\n            if (Array.isArray(plugins))\r\n            {\r\n                this.defaultPlugins = plugins;\r\n            }\r\n            else if (IsPlainObject(plugins))\r\n            {\r\n                this.installGlobalPlugins = GetFastValue(plugins, 'global', []);\r\n                this.installScenePlugins = GetFastValue(plugins, 'scene', []);\r\n\r\n                if (Array.isArray(plugins.default))\r\n                {\r\n                    defaultPlugins = plugins.default;\r\n                }\r\n                else if (Array.isArray(plugins.defaultMerge))\r\n                {\r\n                    defaultPlugins = defaultPlugins.concat(plugins.defaultMerge);\r\n                }\r\n            }\r\n        }\r\n\r\n        /**\r\n         * @const {any} Phaser.Core.Config#defaultPlugins - The plugins installed into every Scene (in addition to CoreScene and Global).\r\n         */\r\n        this.defaultPlugins = defaultPlugins;\r\n\r\n        //  Default / Missing Images\r\n        var pngPrefix = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAg';\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#defaultImage - A base64 encoded PNG that will be used as the default blank texture.\r\n         */\r\n        this.defaultImage = GetValue(config, 'images.default', pngPrefix + 'AQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg==');\r\n\r\n        /**\r\n         * @const {string} Phaser.Core.Config#missingImage - A base64 encoded PNG that will be used as the default texture when a texture is assigned that is missing or not loaded.\r\n         */\r\n        this.missingImage = GetValue(config, 'images.missing', pngPrefix + 'CAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg==');\r\n\r\n        if (window)\r\n        {\r\n            if (window.FORCE_WEBGL)\r\n            {\r\n                this.renderType = CONST.WEBGL;\r\n            }\r\n            else if (window.FORCE_CANVAS)\r\n            {\r\n                this.renderType = CONST.CANVAS;\r\n            }\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Config;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NvbmZpZy5qcz81M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyxvREFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7QUFDakQsb0JBQW9CLG1CQUFPLENBQUMsOEZBQStCO0FBQzNELGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyw4REFBZTtBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsOEZBQStCOztBQUUxRDtBQUNBO0FBQ0EsMERBQTBELG1DQUFtQztBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsa0RBQWtEO0FBQ3JFO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixFQUFFO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVEsb0dBQW9HLHdDQUF3QztBQUN2SztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsRUFBRTtBQUNyQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTs7QUFFQSx3QkFBd0IsZ0JBQWdCOztBQUV4QztBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQSxxREFBcUQ7O0FBRXJEO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG1CQUFtQixvS0FBb0ssaUZBQWlGO0FBQzNSO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNERBQTRELDZCQUE2QixFQUFFO0FBQzlHO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSTtBQUN2QjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLElBQUk7QUFDdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSTtBQUN2QjtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9Db25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBEZXZpY2UgPSByZXF1aXJlKCcuLi9kZXZpY2UnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFBoYXNlck1hdGggPSByZXF1aXJlKCcuLi9tYXRoLycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIERlZmF1bHRQbHVnaW5zID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9EZWZhdWx0UGx1Z2lucycpO1xyXG52YXIgVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jb2xvci9WYWx1ZVRvQ29sb3InKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBhY3RpdmUgZ2FtZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBwYXJzZWQgZnJvbSBhIHtAbGluayBQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBvYmplY3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBDb25maWdcclxuICogQG1lbWJlcm9mIFBoYXNlci5Db3JlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBbR2FtZUNvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHlvdXIgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBzZWUgUGhhc2VyLkdhbWUjY29uZmlnXHJcbiAqL1xyXG52YXIgQ29uZmlnID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENvbmZpZyAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdEJhbm5lckNvbG9yID0gW1xyXG4gICAgICAgICAgICAnI2ZmMDAwMCcsXHJcbiAgICAgICAgICAgICcjZmZmZjAwJyxcclxuICAgICAgICAgICAgJyMwMGZmMDAnLFxyXG4gICAgICAgICAgICAnIzAwZmZmZicsXHJcbiAgICAgICAgICAgICcjMDAwMDAwJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0QmFubmVyVGV4dENvbG9yID0gJyNmZmZmZmYnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3QgeyhpbnRlZ2VyfHN0cmluZyl9IFBoYXNlci5Db3JlLkNvbmZpZyN3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdW5kZXJseWluZyBjYW52YXMsIGluIHBpeGVscy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gR2V0VmFsdWUoY29uZmlnLCAnd2lkdGgnLCAxMDI0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHsoaW50ZWdlcnxzdHJpbmcpfSBQaGFzZXIuQ29yZS5Db25maWcjaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdW5kZXJseWluZyBjYW52YXMsIGluIHBpeGVscy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIDc2OCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KFBoYXNlci5TY2FsZS5ab29tVHlwZXxpbnRlZ2VyKX0gUGhhc2VyLkNvcmUuQ29uZmlnI3pvb20gLSBUaGUgem9vbSBmYWN0b3IsIGFzIHVzZWQgYnkgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tID0gR2V0VmFsdWUoY29uZmlnLCAnem9vbScsIDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge251bWJlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI3Jlc29sdXRpb24gLSBUaGUgY2FudmFzIGRldmljZSBwaXhlbCByZXNvbHV0aW9uLiBDdXJyZW50bHkgdW4tdXNlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc29sdXRpb24gPSBHZXRWYWx1ZShjb25maWcsICdyZXNvbHV0aW9uJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Pyp9IFBoYXNlci5Db3JlLkNvbmZpZyNwYXJlbnQgLSBBIHBhcmVudCBET00gZWxlbWVudCBpbnRvIHdoaWNoIHRoZSBjYW52YXMgY3JlYXRlZCBieSB0aGUgcmVuZGVyZXIgd2lsbCBiZSBpbmplY3RlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IEdldFZhbHVlKGNvbmZpZywgJ3BhcmVudCcsIHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7UGhhc2VyLlNjYWxlLlNjYWxlTW9kZVR5cGV9IFBoYXNlci5Db3JlLkNvbmZpZyNzY2FsZU1vZGUgLSBUaGUgc2NhbGUgbW9kZSBhcyB1c2VkIGJ5IHRoZSBTY2FsZSBNYW5hZ2VyLiBUaGUgZGVmYXVsdCBpcyB6ZXJvLCB3aGljaCBpcyBubyBzY2FsaW5nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVNb2RlID0gR2V0VmFsdWUoY29uZmlnLCAnc2NhbGVNb2RlJywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2V4cGFuZFBhcmVudCAtIElzIHRoZSBTY2FsZSBNYW5hZ2VyIGFsbG93ZWQgdG8gYWRqdXN0IHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIHRoZSBwYXJlbnQgdG8gYmUgMTAwJT9cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV4cGFuZFBhcmVudCA9IEdldFZhbHVlKGNvbmZpZywgJ2V4cGFuZFBhcmVudCcsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNhdXRvUm91bmQgLSBBdXRvbWF0aWNhbGx5IHJvdW5kIHRoZSBkaXNwbGF5IGFuZCBzdHlsZSBzaXplcyBvZiB0aGUgY2FudmFzLiBUaGlzIGNhbiBoZWxwIHdpdGggcGVyZm9ybWFuY2UgaW4gbG93ZXItcG93ZXJlZCBkZXZpY2VzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b1JvdW5kID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b1JvdW5kJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5TY2FsZS5DZW50ZXJUeXBlfSBQaGFzZXIuQ29yZS5Db25maWcjYXV0b0NlbnRlciAtIEF1dG9tYXRpY2FsbHkgY2VudGVyIHRoZSBjYW52YXMgd2l0aGluIHRoZSBwYXJlbnQ/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hdXRvQ2VudGVyID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b0NlbnRlcicsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNyZXNpemVJbnRlcnZhbCAtIEhvdyBtYW55IG1zIHNob3VsZCBlbGFwc2UgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSBicm93c2VyIHNpemUgaGFzIGNoYW5nZWQ/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNpemVJbnRlcnZhbCA9IEdldFZhbHVlKGNvbmZpZywgJ3Jlc2l6ZUludGVydmFsJywgNTAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/KEhUTUxFbGVtZW50fHN0cmluZyl9IFBoYXNlci5Db3JlLkNvbmZpZyNmdWxsc2NyZWVuVGFyZ2V0IC0gVGhlIERPTSBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZW50IGludG8gZnVsbCBzY3JlZW4gbW9kZSwgb3IgaXRzIGBpZGAuIElmIHVuZGVmaW5lZCBQaGFzZXIgd2lsbCBjcmVhdGUgaXRzIG93biBkaXYgYW5kIGluc2VydCB0aGUgY2FudmFzIGludG8gaXQgd2hlbiBlbnRlcmluZyBmdWxsc2NyZWVuIG1vZGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuVGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnZnVsbHNjcmVlblRhcmdldCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNtaW5XaWR0aCAtIFRoZSBtaW5pbXVtIHdpZHRoLCBpbiBwaXhlbHMsIHRoZSBjYW52YXMgd2lsbCBzY2FsZSBkb3duIHRvLiBBIHZhbHVlIG9mIHplcm8gbWVhbnMgbm8gbWluaW11bS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pbldpZHRoID0gR2V0VmFsdWUoY29uZmlnLCAnbWluV2lkdGgnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjbWF4V2lkdGggLSBUaGUgbWF4aW11bSB3aWR0aCwgaW4gcGl4ZWxzLCB0aGUgY2FudmFzIHdpbGwgc2NhbGUgdXAgdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtYXhpbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4V2lkdGggPSBHZXRWYWx1ZShjb25maWcsICdtYXhXaWR0aCcsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNtaW5IZWlnaHQgLSBUaGUgbWluaW11bSBoZWlnaHQsIGluIHBpeGVscywgdGhlIGNhbnZhcyB3aWxsIHNjYWxlIGRvd24gdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtaW5pbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWluSGVpZ2h0ID0gR2V0VmFsdWUoY29uZmlnLCAnbWluSGVpZ2h0JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7aW50ZWdlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI21heEhlaWdodCAtIFRoZSBtYXhpbXVtIGhlaWdodCwgaW4gcGl4ZWxzLCB0aGUgY2FudmFzIHdpbGwgc2NhbGUgdXAgdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtYXhpbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gR2V0VmFsdWUoY29uZmlnLCAnbWF4SGVpZ2h0JywgMCk7XHJcblxyXG4gICAgICAgIC8vICBTY2FsZSBNYW5hZ2VyIC0gQW55dGhpbmcgc2V0IGluIGhlcmUgb3Zlci1yaWRlcyBhbnl0aGluZyBzZXQgYWJvdmVcclxuXHJcbiAgICAgICAgdmFyIHNjYWxlQ29uZmlnID0gR2V0VmFsdWUoY29uZmlnLCAnc2NhbGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnd2lkdGgnLCB0aGlzLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy56b29tID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICd6b29tJywgdGhpcy56b29tKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdyZXNvbHV0aW9uJywgdGhpcy5yZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ3BhcmVudCcsIHRoaXMucGFyZW50KTtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZU1vZGUgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21vZGUnLCB0aGlzLnNjYWxlTW9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kUGFyZW50ID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdleHBhbmRQYXJlbnQnLCB0aGlzLmV4cGFuZFBhcmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1JvdW5kID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdhdXRvUm91bmQnLCB0aGlzLmF1dG9Sb3VuZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NlbnRlciA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnYXV0b0NlbnRlcicsIHRoaXMuYXV0b0NlbnRlcik7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplSW50ZXJ2YWwgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ3Jlc2l6ZUludGVydmFsJywgdGhpcy5yZXNpemVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbHNjcmVlblRhcmdldCA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnZnVsbHNjcmVlblRhcmdldCcsIHRoaXMuZnVsbHNjcmVlblRhcmdldCk7XHJcbiAgICAgICAgICAgIHRoaXMubWluV2lkdGggPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21pbi53aWR0aCcsIHRoaXMubWluV2lkdGgpO1xyXG4gICAgICAgICAgICB0aGlzLm1heFdpZHRoID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdtYXgud2lkdGgnLCB0aGlzLm1heFdpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5taW5IZWlnaHQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21pbi5oZWlnaHQnLCB0aGlzLm1pbkhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdtYXguaGVpZ2h0JywgdGhpcy5tYXhIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtudW1iZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNyZW5kZXJUeXBlIC0gRm9yY2UgUGhhc2VyIHRvIHVzZSBhIHNwZWNpZmljIHJlbmRlcmVyLiBDYW4gYmUgYENPTlNULkNBTlZBU2AsIGBDT05TVC5XRUJHTGAsIGBDT05TVC5IRUFETEVTU2Agb3IgYENPTlNULkFVVE9gIChkZWZhdWx0KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyVHlwZSA9IEdldFZhbHVlKGNvbmZpZywgJ3R5cGUnLCBDT05TVC5BVVRPKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/SFRNTENhbnZhc0VsZW1lbnR9IFBoYXNlci5Db3JlLkNvbmZpZyNjYW52YXMgLSBGb3JjZSBQaGFzZXIgdG8gdXNlIHlvdXIgb3duIENhbnZhcyBlbGVtZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAnY2FudmFzJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7PyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gUGhhc2VyLkNvcmUuQ29uZmlnI2NvbnRleHQgLSBGb3JjZSBQaGFzZXIgdG8gdXNlIHlvdXIgb3duIENhbnZhcyBjb250ZXh0IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IEdldFZhbHVlKGNvbmZpZywgJ2NvbnRleHQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjY2FudmFzU3R5bGUgLSBPcHRpb25hbCBDU1MgYXR0cmlidXRlcyB0byBiZSBzZXQgb24gdGhlIGNhbnZhcyBvYmplY3QgY3JlYXRlZCBieSB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXNTdHlsZSA9IEdldFZhbHVlKGNvbmZpZywgJ2NhbnZhc1N0eWxlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2N1c3RvbUVudmlyb25tZW50IC0gSXMgUGhhc2VyIHJ1bm5pbmcgdW5kZXIgYSBjdXN0b20gKG5vbi1uYXRpdmUgd2ViKSBlbnZpcm9ubWVudD8gSWYgc28sIHNldCB0aGlzIHRvIGB0cnVlYCB0byBza2lwIGludGVybmFsIEZlYXR1cmUgZGV0ZWN0aW9uLiBJZiBgdHJ1ZWAgdGhlIGByZW5kZXJUeXBlYCBjYW5ub3QgYmUgbGVmdCBhcyBgQVVUT2AuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21FbnZpcm9ubWVudCA9IEdldFZhbHVlKGNvbmZpZywgJ2N1c3RvbUVudmlyb25tZW50JywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9vYmplY3R9IFBoYXNlci5Db3JlLkNvbmZpZyNzY2VuZUNvbmZpZyAtIFRoZSBkZWZhdWx0IFNjZW5lIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVDb25maWcgPSBHZXRWYWx1ZShjb25maWcsICdzY2VuZScsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ1tdfSBQaGFzZXIuQ29yZS5Db25maWcjc2VlZCAtIEEgc2VlZCB3aGljaCB0aGUgUmFuZG9tIERhdGEgR2VuZXJhdG9yIHdpbGwgdXNlLiBJZiBub3QgZ2l2ZW4sIGEgZHluYW1pYyBzZWVkIGJhc2VkIG9uIHRoZSB0aW1lIGlzIHVzZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZWVkID0gR2V0VmFsdWUoY29uZmlnLCAnc2VlZCcsIFsgKERhdGUubm93KCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpIF0pO1xyXG5cclxuICAgICAgICBQaGFzZXJNYXRoLlJORCA9IG5ldyBQaGFzZXJNYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IodGhpcy5zZWVkKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIGdhbWUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lVGl0bGUgPSBHZXRWYWx1ZShjb25maWcsICd0aXRsZScsICcnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVVJMIC0gVGhlIFVSTCBvZiB0aGUgZ2FtZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWVVUkwgPSBHZXRWYWx1ZShjb25maWcsICd1cmwnLCAnaHR0cHM6Ly9waGFzZXIuaW8nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVmVyc2lvbiAtIFRoZSB2ZXJzaW9uIG9mIHRoZSBnYW1lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZVZlcnNpb24gPSBHZXRWYWx1ZShjb25maWcsICd2ZXJzaW9uJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNhdXRvRm9jdXMgLSBJZiBgdHJ1ZWAgdGhlIHdpbmRvdyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZ2l2ZW4gZm9jdXMgaW1tZWRpYXRlbHkgYW5kIG9uIGFueSBmdXR1cmUgbW91c2Vkb3duIGV2ZW50LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b0ZvY3VzID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b0ZvY3VzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vICBET00gRWxlbWVudCBDb250YWluZXJcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2RvbUNyZWF0ZUNvbnRhaW5lciAtIFNob3VsZCB0aGUgZ2FtZSBjcmVhdGUgYSBkaXYgZWxlbWVudCB0byBhY3QgYXMgYSBET00gQ29udGFpbmVyPyBPbmx5IGVuYWJsZSBpZiB5b3UncmUgdXNpbmcgRE9NIEVsZW1lbnQgb2JqZWN0cy4gWW91IG11c3QgcHJvdmlkZSBhIHBhcmVudCBvYmplY3QgaWYgeW91IHVzZSB0aGlzIGZlYXR1cmUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb21DcmVhdGVDb250YWluZXIgPSBHZXRWYWx1ZShjb25maWcsICdkb20uY3JlYXRlQ29udGFpbmVyJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9ib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjZG9tQmVoaW5kQ2FudmFzIC0gU2hvdWxkIHRoZSBET00gQ29udGFpbmVyIHRoYXQgaXMgY3JlYXRlZCAoaWYgYGRvbS5jcmVhdGVDb250YWluZXJgIGlzIHRydWUpIGJlIHBvc2l0aW9uZWQgYmVoaW5kICh0cnVlKSBvciBvdmVyIHRoZSB0b3AgKGZhbHNlLCB0aGUgZGVmYXVsdCkgb2YgdGhlIGdhbWUgY2FudmFzP1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZG9tQmVoaW5kQ2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAnZG9tLmJlaGluZENhbnZhcycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLy8gIElucHV0XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0S2V5Ym9hcmQgLSBFbmFibGUgdGhlIEtleWJvYXJkIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIGtleWJvYXJkIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRLZXlib2FyZCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmtleWJvYXJkJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0S2V5Ym9hcmRFdmVudFRhcmdldCAtIFRoZSBET00gVGFyZ2V0IHRvIGxpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uLiBEZWZhdWx0cyB0byBgd2luZG93YCBpZiBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRLZXlib2FyZEV2ZW50VGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQua2V5Ym9hcmQudGFyZ2V0Jywgd2luZG93KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/aW50ZWdlcltdfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRLZXlib2FyZENhcHR1cmUgLSBgcHJldmVudERlZmF1bHRgIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IG5vbi1tb2RpZmllZCBrZXkgd2hpY2ggaGFzIGEga2V5IGNvZGUgaW4gdGhpcyBhcnJheS4gQnkgZGVmYXVsdCwgaXQgaXMgZW1wdHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dEtleWJvYXJkQ2FwdHVyZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmtleWJvYXJkLmNhcHR1cmUnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KGJvb2xlYW58b2JqZWN0KX0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0TW91c2UgLSBFbmFibGUgdGhlIE1vdXNlIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIG1vdXNlIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRNb3VzZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0Lm1vdXNlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Pyp9IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dE1vdXNlRXZlbnRUYXJnZXQgLSBUaGUgRE9NIFRhcmdldCB0byBsaXN0ZW4gZm9yIG1vdXNlIGV2ZW50cyBvbi4gRGVmYXVsdHMgdG8gdGhlIGdhbWUgY2FudmFzIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dE1vdXNlRXZlbnRUYXJnZXQgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5tb3VzZS50YXJnZXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRNb3VzZUNhcHR1cmUgLSBTaG91bGQgbW91c2UgZXZlbnRzIGJlIGNhcHR1cmVkPyBJLmUuIGhhdmUgcHJldmVudCBkZWZhdWx0IGNhbGxlZCBvbiB0aGVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRNb3VzZUNhcHR1cmUgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5tb3VzZS5jYXB0dXJlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0VG91Y2ggLSBFbmFibGUgdGhlIFRvdWNoIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIHRvdWNoIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRUb3VjaCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoJywgRGV2aWNlLmlucHV0LnRvdWNoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0VG91Y2hFdmVudFRhcmdldCAtIFRoZSBET00gVGFyZ2V0IHRvIGxpc3RlbiBmb3IgdG91Y2ggZXZlbnRzIG9uLiBEZWZhdWx0cyB0byB0aGUgZ2FtZSBjYW52YXMgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0VG91Y2hFdmVudFRhcmdldCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoLnRhcmdldCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dFRvdWNoQ2FwdHVyZSAtIFNob3VsZCB0b3VjaCBldmVudHMgYmUgY2FwdHVyZWQ/IEkuZS4gaGF2ZSBwcmV2ZW50IGRlZmF1bHQgY2FsbGVkIG9uIHRoZW0uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dFRvdWNoQ2FwdHVyZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoLmNhcHR1cmUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRBY3RpdmVQb2ludGVycyAtIFRoZSBudW1iZXIgb2YgUG9pbnRlciBvYmplY3RzIGNyZWF0ZWQgYnkgZGVmYXVsdC4gSW4gYSBtb3VzZS1vbmx5LCBvciBub24tbXVsdGkgdG91Y2ggZ2FtZSwgeW91IGNhbiBsZWF2ZSB0aGlzIGFzIDEuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dEFjdGl2ZVBvaW50ZXJzID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQuYWN0aXZlUG9pbnRlcnMnLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRTbW9vdGhGYWN0b3IgLSBUaGUgc21vb3RoaW5nIGZhY3RvciB0byBhcHBseSBkdXJpbmcgUG9pbnRlciBtb3ZlbWVudC4gU2VlIHtAbGluayBQaGFzZXIuSW5wdXQuUG9pbnRlciNzbW9vdGhGYWN0b3J9LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRTbW9vdGhGYWN0b3IgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5zbW9vdGhGYWN0b3InLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRXaW5kb3dFdmVudHMgLSBTaG91bGQgUGhhc2VyIGxpc3RlbiBmb3IgaW5wdXQgZXZlbnRzIG9uIHRoZSBXaW5kb3c/IElmIHlvdSBkaXNhYmxlIHRoaXMsIGV2ZW50cyBsaWtlICdQT0lOVEVSX1VQX09VVFNJREUnIHdpbGwgbm8gbG9uZ2VyIGZpcmUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dFdpbmRvd0V2ZW50cyA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LndpbmRvd0V2ZW50cycsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dEdhbWVwYWQgLSBFbmFibGUgdGhlIEdhbWVwYWQgUGx1Z2luLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCBpbiBnYW1lcyB0aGF0IGRvbid0IG5lZWQgZ2FtZXBhZCBpbnB1dC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0R2FtZXBhZCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmdhbWVwYWQnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0R2FtZXBhZEV2ZW50VGFyZ2V0IC0gVGhlIERPTSBUYXJnZXQgdG8gbGlzdGVuIGZvciBnYW1lcGFkIGV2ZW50cyBvbi4gRGVmYXVsdHMgdG8gYHdpbmRvd2AgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0R2FtZXBhZEV2ZW50VGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQuZ2FtZXBhZC50YXJnZXQnLCB3aW5kb3cpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNkaXNhYmxlQ29udGV4dE1lbnUgLSBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgdGhlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSA9IEdldFZhbHVlKGNvbmZpZywgJ2Rpc2FibGVDb250ZXh0TWVudScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5BdWRpb0NvbmZpZ30gUGhhc2VyLkNvcmUuQ29uZmlnI2F1ZGlvIC0gVGhlIEF1ZGlvIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXVkaW8gPSBHZXRWYWx1ZShjb25maWcsICdhdWRpbycpO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IGRvOiB7IGJhbm5lcjogZmFsc2UgfSBpdCB3b24ndCBkaXNwbGF5IGFueSBiYW5uZXIgYXQgYWxsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2hpZGVCYW5uZXIgLSBEb24ndCB3cml0ZSB0aGUgYmFubmVyIGxpbmUgdG8gdGhlIGNvbnNvbGUubG9nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGlkZUJhbm5lciA9IChHZXRWYWx1ZShjb25maWcsICdiYW5uZXInLCBudWxsKSA9PT0gZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNoaWRlUGhhc2VyIC0gT21pdCBQaGFzZXIncyBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gdGhlIGJhbm5lci5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhpZGVQaGFzZXIgPSBHZXRWYWx1ZShjb25maWcsICdiYW5uZXIuaGlkZVBoYXNlcicsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNiYW5uZXJUZXh0Q29sb3IgLSBUaGUgY29sb3Igb2YgdGhlIGJhbm5lciB0ZXh0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFubmVyVGV4dENvbG9yID0gR2V0VmFsdWUoY29uZmlnLCAnYmFubmVyLnRleHQnLCBkZWZhdWx0QmFubmVyVGV4dENvbG9yKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmdbXX0gUGhhc2VyLkNvcmUuQ29uZmlnI2Jhbm5lckJhY2tncm91bmRDb2xvciAtIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyBvZiB0aGUgYmFubmVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFubmVyQmFja2dyb3VuZENvbG9yID0gR2V0VmFsdWUoY29uZmlnLCAnYmFubmVyLmJhY2tncm91bmQnLCBkZWZhdWx0QmFubmVyQ29sb3IpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nYW1lVGl0bGUgPT09ICcnICYmIHRoaXMuaGlkZVBoYXNlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZUJhbm5lciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9QaGFzZXIuVHlwZXMuQ29yZS5GUFNDb25maWd9IFBoYXNlci5Db3JlLkNvbmZpZyNmcHMgLSBUaGUgRnJhbWUgUmF0ZSBDb25maWd1cmF0aW9uIG9iamVjdCwgYXMgcGFyc2VkIGJ5IHRoZSBUaW1lc3RlcCBjbGFzcy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZwcyA9IEdldFZhbHVlKGNvbmZpZywgJ2ZwcycsIG51bGwpO1xyXG5cclxuICAgICAgICAvLyAgUmVuZGVyZXIgU2V0dGluZ3NcclxuICAgICAgICAvLyAgVGhlc2UgY2FuIGVpdGhlciBiZSBpbiBhIGByZW5kZXJgIG9iamVjdCB3aXRoaW4gdGhlIENvbmZpZywgb3Igc3BlY2lmaWVkIG9uIHRoZWlyIG93blxyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQ29uZmlnID0gR2V0VmFsdWUoY29uZmlnLCAncmVuZGVyJywgY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjYW50aWFsaWFzIC0gV2hlbiBzZXQgdG8gYHRydWVgLCBXZWJHTCB1c2VzIGxpbmVhciBpbnRlcnBvbGF0aW9uIHRvIGRyYXcgc2NhbGVkIG9yIHJvdGF0ZWQgdGV4dHVyZXMsIGdpdmluZyBhIHNtb290aCBhcHBlYXJhbmNlLiBXaGVuIHNldCB0byBgZmFsc2VgLCBXZWJHTCB1c2VzIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiwgZ2l2aW5nIGEgY3Jpc3BlciBhcHBlYXJhbmNlLiBgZmFsc2VgIGFsc28gZGlzYWJsZXMgYW50aWFsaWFzaW5nIG9mIHRoZSBnYW1lIGNhbnZhcyBpdHNlbGYsIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGl0LCB3aGVuIHRoZSBnYW1lIGNhbnZhcyBpcyBzY2FsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbnRpYWxpYXMgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdhbnRpYWxpYXMnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjYW50aWFsaWFzR0wgLSBTZXRzIHRoZSBgYW50aWFsaWFzYCBwcm9wZXJ0eSB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIGNyZWF0ZWQuIFNldHRpbmcgdGhpcyB2YWx1ZSBkb2VzIG5vdCBpbXBhY3QgYW55IHN1YnNlcXVlbnQgdGV4dHVyZXMgdGhhdCBhcmUgY3JlYXRlZCwgb3IgdGhlIGNhbnZhcyBzdHlsZSBhdHRyaWJ1dGVzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW50aWFsaWFzR0wgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdhbnRpYWxpYXNHTCcsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI21pcG1hcEZpbHRlciAtIFNldHMgdGhlIGBtaXBtYXBGaWx0ZXJgIHByb3BlcnR5IHdoZW4gdGhlIFdlYkdMIHJlbmRlcmVyIGlzIGNyZWF0ZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taXBtYXBGaWx0ZXIgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdtaXBtYXBGaWx0ZXInLCAnTElORUFSJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2Rlc3luY2hyb25pemVkIC0gV2hlbiBzZXQgdG8gYHRydWVgIGl0IHdpbGwgY3JlYXRlIGEgZGVzeW5jaHJvbml6ZWQgY29udGV4dCBmb3IgYm90aCAyRCBhbmQgV2ViR0wuIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvdXBkYXRlcy8yMDE5LzA1L2Rlc3luY2hyb25pemVkIGZvciBkZXRhaWxzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVzeW5jaHJvbml6ZWQgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdkZXN5bmNocm9uaXplZCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjcm91bmRQaXhlbHMgLSBEcmF3IHRleHR1cmUtYmFzZWQgR2FtZSBPYmplY3RzIGF0IG9ubHkgd2hvbGUtaW50ZWdlciBwb3NpdGlvbnMuIEdhbWUgT2JqZWN0cyB3aXRob3V0IHRleHR1cmVzLCBsaWtlIEdyYXBoaWNzLCBpZ25vcmUgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJvdW5kUGl4ZWxzID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncm91bmRQaXhlbHMnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI3BpeGVsQXJ0IC0gUHJldmVudCBwaXhlbCBhcnQgZnJvbSBiZWNvbWluZyBibHVycmVkIHdoZW4gc2NhbGVkLiBJdCB3aWxsIHJlbWFpbiBjcmlzcCAodGVsbHMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHRleHR1cmVzIHVzaW5nIGEgbGluZWFyIGZpbHRlciBtb2RlKS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpeGVsQXJ0ID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncGl4ZWxBcnQnLCB0aGlzLnpvb20gIT09IDEpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5waXhlbEFydClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYW50aWFsaWFzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjdHJhbnNwYXJlbnQgLSBXaGV0aGVyIHRoZSBnYW1lIGNhbnZhcyB3aWxsIGhhdmUgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICd0cmFuc3BhcmVudCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjY2xlYXJCZWZvcmVSZW5kZXIgLSBXaGV0aGVyIHRoZSBnYW1lIGNhbnZhcyB3aWxsIGJlIGNsZWFyZWQgYmV0d2VlbiBlYWNoIHJlbmRlcmluZyBmcmFtZS4gWW91IGNhbiBkaXNhYmxlIHRoaXMgaWYgeW91IGhhdmUgYSBmdWxsLXNjcmVlbiBiYWNrZ3JvdW5kIGltYWdlIG9yIGdhbWUgb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdjbGVhckJlZm9yZVJlbmRlcicsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNwcmVtdWx0aXBsaWVkQWxwaGEgLSBJbiBXZWJHTCBtb2RlLCBzZXRzIHRoZSBkcmF3aW5nIGJ1ZmZlciB0byBjb250YWluIGNvbG9ycyB3aXRoIHByZS1tdWx0aXBsaWVkIGFscGhhLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncHJlbXVsdGlwbGllZEFscGhhJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgLSBMZXQgdGhlIGJyb3dzZXIgYWJvcnQgY3JlYXRpbmcgYSBXZWJHTCBjb250ZXh0IGlmIGl0IGp1ZGdlcyBwZXJmb3JtYW5jZSB3b3VsZCBiZSB1bmFjY2VwdGFibGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAnZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNwb3dlclByZWZlcmVuY2UgLSBcImhpZ2gtcGVyZm9ybWFuY2VcIiwgXCJsb3ctcG93ZXJcIiBvciBcImRlZmF1bHRcIi4gQSBoaW50IHRvIHRoZSBicm93c2VyIG9uIGhvdyBtdWNoIGRldmljZSBwb3dlciB0aGUgZ2FtZSBtaWdodCB1c2UuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3dlclByZWZlcmVuY2UgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdwb3dlclByZWZlcmVuY2UnLCAnZGVmYXVsdCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNiYXRjaFNpemUgLSBUaGUgZGVmYXVsdCBXZWJHTCBCYXRjaCBzaXplLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmF0Y2hTaXplID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAnYmF0Y2hTaXplJywgMjAwMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7aW50ZWdlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI21heExpZ2h0cyAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaWdodHMgYWxsb3dlZCB0byBiZSB2aXNpYmxlIHdpdGhpbiByYW5nZSBvZiBhIHNpbmdsZSBDYW1lcmEgaW4gdGhlIExpZ2h0TWFuYWdlci5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heExpZ2h0cyA9IEdldFZhbHVlKHJlbmRlckNvbmZpZywgJ21heExpZ2h0cycsIDEwKTtcclxuXHJcbiAgICAgICAgdmFyIGJnYyA9IEdldFZhbHVlKGNvbmZpZywgJ2JhY2tncm91bmRDb2xvcicsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBQaGFzZXIuQ29yZS5Db25maWcjYmFja2dyb3VuZENvbG9yIC0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGdhbWUgY2FudmFzLiBUaGUgZGVmYXVsdCBpcyBibGFjay4gVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGB0cmFuc3BhcmVudGAgaXMgc2V0IHRvIGB0cnVlYC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IFZhbHVlVG9Db2xvcihiZ2MpO1xyXG5cclxuICAgICAgICBpZiAoYmdjID09PSAwICYmIHRoaXMudHJhbnNwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvci5hbHBoYSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5UeXBlcy5Db3JlLkJvb3RDYWxsYmFja30gUGhhc2VyLkNvcmUuQ29uZmlnI3ByZUJvb3QgLSBDYWxsZWQgYmVmb3JlIFBoYXNlciBib290cy4gVXNlZnVsIGZvciBpbml0aWFsaXppbmcgYW55dGhpbmcgbm90IHJlbGF0ZWQgdG8gUGhhc2VyIHRoYXQgUGhhc2VyIG1heSByZXF1aXJlIHdoaWxlIGJvb3RpbmcuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmVCb290ID0gR2V0VmFsdWUoY29uZmlnLCAnY2FsbGJhY2tzLnByZUJvb3QnLCBOT09QKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5Cb290Q2FsbGJhY2t9IFBoYXNlci5Db3JlLkNvbmZpZyNwb3N0Qm9vdCAtIEEgZnVuY3Rpb24gdG8gcnVuIGF0IHRoZSBlbmQgb2YgdGhlIGJvb3Qgc2VxdWVuY2UuIEF0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZ2FtZSBzeXN0ZW1zIGhhdmUgc3RhcnRlZCBhbmQgcGx1Z2lucyBoYXZlIGJlZW4gbG9hZGVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9zdEJvb3QgPSBHZXRWYWx1ZShjb25maWcsICdjYWxsYmFja3MucG9zdEJvb3QnLCBOT09QKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5QaHlzaWNzQ29uZmlnfSBQaGFzZXIuQ29yZS5Db25maWcjcGh5c2ljcyAtIFRoZSBQaHlzaWNzIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcyA9IEdldFZhbHVlKGNvbmZpZywgJ3BoeXNpY3MnLCB7fSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KGJvb2xlYW58c3RyaW5nKX0gUGhhc2VyLkNvcmUuQ29uZmlnI2RlZmF1bHRQaHlzaWNzU3lzdGVtIC0gVGhlIGRlZmF1bHQgcGh5c2ljcyBzeXN0ZW0uIEl0IHdpbGwgYmUgc3RhcnRlZCBmb3IgZWFjaCBzY2VuZS4gRWl0aGVyICdhcmNhZGUnLCAnaW1wYWN0JyBvciAnbWF0dGVyJy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRQaHlzaWNzU3lzdGVtID0gR2V0VmFsdWUodGhpcy5waHlzaWNzLCAnZGVmYXVsdCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJCYXNlVVJMIC0gQSBVUkwgdXNlZCB0byByZXNvbHZlIHBhdGhzIGdpdmVuIHRvIHRoZSBsb2FkZXIuIEV4YW1wbGU6ICdodHRwOi8vbGFicy5waGFzZXIuaW8vYXNzZXRzLycuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJCYXNlVVJMID0gR2V0VmFsdWUoY29uZmlnLCAnbG9hZGVyLmJhc2VVUkwnLCAnJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyUGF0aCAtIEEgVVJMIHBhdGggdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIHBhdGhzIGdpdmVuIHRvIHRoZSBsb2FkZXIuIEV4YW1wbGU6ICdpbWFnZXMvc3ByaXRlcy8nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyUGF0aCA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5wYXRoJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJNYXhQYXJhbGxlbERvd25sb2FkcyAtIE1heGltdW0gcGFyYWxsZWwgZG93bmxvYWRzIGFsbG93ZWQgZm9yIHJlc291cmNlcyAoRGVmYXVsdCB0byAzMikuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJNYXhQYXJhbGxlbERvd25sb2FkcyA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5tYXhQYXJhbGxlbERvd25sb2FkcycsIDMyKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHsoc3RyaW5nfHVuZGVmaW5lZCl9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJDcm9zc09yaWdpbiAtICdhbm9ueW1vdXMnLCAndXNlLWNyZWRlbnRpYWxzJywgb3IgYHVuZGVmaW5lZGAuIElmIHlvdSdyZSBub3QgbWFraW5nIGNyb3NzLW9yaWdpbiByZXF1ZXN0cywgbGVhdmUgdGhpcyBhcyBgdW5kZWZpbmVkYC4gU2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlc30uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJDcm9zc09yaWdpbiA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5jcm9zc09yaWdpbicsIHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyUmVzcG9uc2VUeXBlIC0gVGhlIHJlc3BvbnNlIHR5cGUgb2YgdGhlIFhIUiByZXF1ZXN0LCBlLmcuIGBibG9iYCwgYHRleHRgLCBldGMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJSZXNwb25zZVR5cGUgPSBHZXRWYWx1ZShjb25maWcsICdsb2FkZXIucmVzcG9uc2VUeXBlJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJBc3luYyAtIFNob3VsZCB0aGUgWEhSIHJlcXVlc3QgdXNlIGFzeW5jIG9yIG5vdD9cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlckFzeW5jID0gR2V0VmFsdWUoY29uZmlnLCAnbG9hZGVyLmFzeW5jJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyVXNlciAtIE9wdGlvbmFsIHVzZXJuYW1lIGZvciBhbGwgWEhSIHJlcXVlc3RzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyVXNlciA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci51c2VyJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI2xvYWRlclBhc3N3b3JkIC0gT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGFsbCBYSFIgcmVxdWVzdHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJQYXNzd29yZCA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5wYXNzd29yZCcsICcnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyVGltZW91dCAtIE9wdGlvbmFsIFhIUiB0aW1lb3V0IHZhbHVlLCBpbiBtcy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlclRpbWVvdXQgPSBHZXRWYWx1ZShjb25maWcsICdsb2FkZXIudGltZW91dCcsIDApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIEFsbG93cyBgcGx1Z2luc2AgcHJvcGVydHkgdG8gZWl0aGVyIGJlIGFuIGFycmF5LCBpbiB3aGljaCBjYXNlIGl0IGp1c3QgcmVwbGFjZXNcclxuICAgICAgICAgKiB0aGUgZGVmYXVsdCBwbHVnaW5zIGxpa2UgcHJldmlvdXNseSwgb3IgYSBjb25maWcgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogcGx1Z2luczoge1xyXG4gICAgICAgICAqICAgIGdsb2JhbDogW1xyXG4gICAgICAgICAqICAgICAgICB7IGtleTogJ1Rlc3RQbHVnaW4nLCBwbHVnaW46IFRlc3RQbHVnaW4sIHN0YXJ0OiB0cnVlLCBkYXRhOiB7IG1zZzogJ1RoZSBwbHVnaW4gaXMgYWxpdmUnIH0gfSxcclxuICAgICAgICAgKiAgICBdLFxyXG4gICAgICAgICAqICAgIHNjZW5lOiBbXHJcbiAgICAgICAgICogICAgICAgIHsga2V5OiAnV2lyZUZyYW1lUGx1Z2luJywgcGx1Z2luOiBXaXJlRnJhbWVQbHVnaW4sIHN5c3RlbUtleTogJ3dpcmVGcmFtZVBsdWdpbicsIHNjZW5lS2V5OiAnd2lyZWZyYW1lJyB9XHJcbiAgICAgICAgICogICAgXSxcclxuICAgICAgICAgKiAgICBkZWZhdWx0OiBbXSwgT1JcclxuICAgICAgICAgKiAgICBkZWZhdWx0TWVyZ2U6IFtcclxuICAgICAgICAgKiAgICAgICAgJ01vZFBsYXllcidcclxuICAgICAgICAgKiAgICBdXHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2FueX0gUGhhc2VyLkNvcmUuQ29uZmlnI2luc3RhbGxHbG9iYWxQbHVnaW5zIC0gQW4gYXJyYXkgb2YgZ2xvYmFsIHBsdWdpbnMgdG8gYmUgaW5zdGFsbGVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5zdGFsbEdsb2JhbFBsdWdpbnMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHthbnl9IFBoYXNlci5Db3JlLkNvbmZpZyNpbnN0YWxsU2NlbmVQbHVnaW5zIC0gQW4gYXJyYXkgb2YgU2NlbmUgbGV2ZWwgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnN0YWxsU2NlbmVQbHVnaW5zID0gW107XHJcblxyXG4gICAgICAgIHZhciBwbHVnaW5zID0gR2V0VmFsdWUoY29uZmlnLCAncGx1Z2lucycsIG51bGwpO1xyXG4gICAgICAgIHZhciBkZWZhdWx0UGx1Z2lucyA9IERlZmF1bHRQbHVnaW5zLkRlZmF1bHRTY2VuZTtcclxuXHJcbiAgICAgICAgaWYgKHBsdWdpbnMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgT2xkIDMuNyBhcnJheSBmb3JtYXQ/XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQbHVnaW5zID0gcGx1Z2lucztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChJc1BsYWluT2JqZWN0KHBsdWdpbnMpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxHbG9iYWxQbHVnaW5zID0gR2V0RmFzdFZhbHVlKHBsdWdpbnMsICdnbG9iYWwnLCBbXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxTY2VuZVBsdWdpbnMgPSBHZXRGYXN0VmFsdWUocGx1Z2lucywgJ3NjZW5lJywgW10pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMuZGVmYXVsdCkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFBsdWdpbnMgPSBwbHVnaW5zLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMuZGVmYXVsdE1lcmdlKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UGx1Z2lucyA9IGRlZmF1bHRQbHVnaW5zLmNvbmNhdChwbHVnaW5zLmRlZmF1bHRNZXJnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7YW55fSBQaGFzZXIuQ29yZS5Db25maWcjZGVmYXVsdFBsdWdpbnMgLSBUaGUgcGx1Z2lucyBpbnN0YWxsZWQgaW50byBldmVyeSBTY2VuZSAoaW4gYWRkaXRpb24gdG8gQ29yZVNjZW5lIGFuZCBHbG9iYWwpLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFBsdWdpbnMgPSBkZWZhdWx0UGx1Z2lucztcclxuXHJcbiAgICAgICAgLy8gIERlZmF1bHQgLyBNaXNzaW5nIEltYWdlc1xyXG4gICAgICAgIHZhciBwbmdQcmVmaXggPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNkZWZhdWx0SW1hZ2UgLSBBIGJhc2U2NCBlbmNvZGVkIFBORyB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBibGFuayB0ZXh0dXJlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEltYWdlID0gR2V0VmFsdWUoY29uZmlnLCAnaW1hZ2VzLmRlZmF1bHQnLCBwbmdQcmVmaXggKyAnQVFNQUFBQkp0T2kzQUFBQUExQk1WRVgvLy8rbnhCdklBQUFBQVhSU1RsTUFRT2JZWmdBQUFCVkpSRUZVZUY3TndJRUFBQUFBZ0tEOXFkZW9jQU1Bb0FBQm0zRGtjQUFBQUFCSlJVNUVya0pnZ2c9PScpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI21pc3NpbmdJbWFnZSAtIEEgYmFzZTY0IGVuY29kZWQgUE5HIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHRleHR1cmUgd2hlbiBhIHRleHR1cmUgaXMgYXNzaWduZWQgdGhhdCBpcyBtaXNzaW5nIG9yIG5vdCBsb2FkZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taXNzaW5nSW1hZ2UgPSBHZXRWYWx1ZShjb25maWcsICdpbWFnZXMubWlzc2luZycsIHBuZ1ByZWZpeCArICdDQUlBQUFEOEdPMmpBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUo5SlJFRlVlTnEwMXNzT3d5QU1SRkc0NnYvL010MUVTbWdoK0RGbUUyR1BPQkFSS2IyTlZqbysxN1BYTEQ4YTErcGw1K0Erd1NnRnlneW1XWUhCYjBGdHNLaEpEZFpsbmNHMkl6SjRheW9NRHYyMHdUbVNNekNsRWdiV1lOVEFrUTBaK09KK0EvZVduQWFSOStveENGNE9zMEg4aHRzTVVwK3B3Y2dCQmlNTm5Bd0Y4R3FJZ0wyaEF6YUdGRmdaYXVEUEtBQm1vd1o0R0wzNjkvMHJ3QUNwMnlBL3R0bXZzUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5GT1JDRV9XRUJHTClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUeXBlID0gQ09OU1QuV0VCR0w7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAod2luZG93LkZPUkNFX0NBTlZBUylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUeXBlID0gQ09OU1QuQ0FOVkFTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbmZpZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/Config.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/CreateRenderer.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/core/CreateRenderer.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasInterpolation = __webpack_require__(/*! ../display/canvas/CanvasInterpolation */ \"./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Features = __webpack_require__(/*! ../device/Features */ \"./node_modules/phaser/src/device/Features.js\");\r\n\r\n/**\r\n * Called automatically by Phaser.Game and responsible for creating the renderer it will use.\r\n *\r\n * Relies upon two webpack global flags to be defined: `WEBGL_RENDERER` and `CANVAS_RENDERER` during build time, but not at run-time.\r\n *\r\n * @function Phaser.Core.CreateRenderer\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance on which the renderer will be set.\r\n */\r\nvar CreateRenderer = function (game)\r\n{\r\n    var config = game.config;\r\n\r\n    if ((config.customEnvironment || config.canvas) && config.renderType === CONST.AUTO)\r\n    {\r\n        throw new Error('Must set explicit renderType in custom environment');\r\n    }\r\n\r\n    //  Not a custom environment, didn't provide their own canvas and not headless, so determine the renderer:\r\n    if (!config.customEnvironment && !config.canvas && config.renderType !== CONST.HEADLESS)\r\n    {\r\n        if (config.renderType === CONST.CANVAS || (config.renderType !== CONST.CANVAS && !Features.webGL))\r\n        {\r\n            if (Features.canvas)\r\n            {\r\n                //  They requested Canvas and their browser supports it\r\n                config.renderType = CONST.CANVAS;\r\n            }\r\n            else\r\n            {\r\n                throw new Error('Cannot create Canvas or WebGL context, aborting.');\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  Game requested WebGL and browser says it supports it\r\n            config.renderType = CONST.WEBGL;\r\n        }\r\n    }\r\n\r\n    //  Pixel Art mode?\r\n    if (!config.antialias)\r\n    {\r\n        CanvasPool.disableSmoothing();\r\n    }\r\n\r\n    var baseSize = game.scale.baseSize;\r\n\r\n    var width = baseSize.width;\r\n    var height = baseSize.height;\r\n\r\n    //  Does the game config provide its own canvas element to use?\r\n    if (config.canvas)\r\n    {\r\n        game.canvas = config.canvas;\r\n\r\n        game.canvas.width = width;\r\n        game.canvas.height = height;\r\n    }\r\n    else\r\n    {\r\n        game.canvas = CanvasPool.create(game, width, height, config.renderType);\r\n    }\r\n\r\n    //  Does the game config provide some canvas css styles to use?\r\n    if (config.canvasStyle)\r\n    {\r\n        game.canvas.style = config.canvasStyle;\r\n    }\r\n\r\n    //  Pixel Art mode?\r\n    if (!config.antialias)\r\n    {\r\n        CanvasInterpolation.setCrisp(game.canvas);\r\n    }\r\n\r\n    if (config.renderType === CONST.HEADLESS)\r\n    {\r\n        //  Nothing more to do here\r\n        return;\r\n    }\r\n\r\n    var CanvasRenderer;\r\n    var WebGLRenderer;\r\n\r\n    if (true)\r\n    {\r\n        CanvasRenderer = __webpack_require__(/*! ../renderer/canvas/CanvasRenderer */ \"./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js\");\r\n        WebGLRenderer = __webpack_require__(/*! ../renderer/webgl/WebGLRenderer */ \"./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js\");\r\n\r\n        //  Let the config pick the renderer type, as both are included\r\n        if (config.renderType === CONST.WEBGL)\r\n        {\r\n            game.renderer = new WebGLRenderer(game);\r\n        }\r\n        else\r\n        {\r\n            game.renderer = new CanvasRenderer(game);\r\n            game.context = game.renderer.gameContext;\r\n        }\r\n    }\r\n\r\n    if (false)\r\n    {}\r\n\r\n    if (false)\r\n    {}\r\n};\r\n\r\nmodule.exports = CreateRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NyZWF0ZVJlbmRlcmVyLmpzP2FmMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLDBCQUEwQixtQkFBTyxDQUFDLDhHQUF1QztBQUN6RSxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDdkQsWUFBWSxtQkFBTyxDQUFDLG9EQUFVO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyx3RUFBb0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFFBQVEsSUFBK0M7QUFDdkQ7QUFDQSx5QkFBeUIsbUJBQU8sQ0FBQyxzR0FBbUM7QUFDcEUsd0JBQXdCLG1CQUFPLENBQUMsa0dBQWlDOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsS0FBZ0Q7QUFDeEQsSUFBSSxFQU9DOztBQUVMLFFBQVEsS0FBZ0Q7QUFDeEQsSUFBSSxFQVNDO0FBQ0w7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NyZWF0ZVJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FudmFzSW50ZXJwb2xhdGlvbiA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvY2FudmFzL0NhbnZhc0ludGVycG9sYXRpb24nKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGZWF0dXJlcyA9IHJlcXVpcmUoJy4uL2RldmljZS9GZWF0dXJlcycpO1xyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IFBoYXNlci5HYW1lIGFuZCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGl0IHdpbGwgdXNlLlxyXG4gKlxyXG4gKiBSZWxpZXMgdXBvbiB0d28gd2VicGFjayBnbG9iYWwgZmxhZ3MgdG8gYmUgZGVmaW5lZDogYFdFQkdMX1JFTkRFUkVSYCBhbmQgYENBTlZBU19SRU5ERVJFUmAgZHVyaW5nIGJ1aWxkIHRpbWUsIGJ1dCBub3QgYXQgcnVuLXRpbWUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ29yZS5DcmVhdGVSZW5kZXJlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIFRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZSBvbiB3aGljaCB0aGUgcmVuZGVyZXIgd2lsbCBiZSBzZXQuXHJcbiAqL1xyXG52YXIgQ3JlYXRlUmVuZGVyZXIgPSBmdW5jdGlvbiAoZ2FtZSlcclxue1xyXG4gICAgdmFyIGNvbmZpZyA9IGdhbWUuY29uZmlnO1xyXG5cclxuICAgIGlmICgoY29uZmlnLmN1c3RvbUVudmlyb25tZW50IHx8IGNvbmZpZy5jYW52YXMpICYmIGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5BVVRPKVxyXG4gICAge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzZXQgZXhwbGljaXQgcmVuZGVyVHlwZSBpbiBjdXN0b20gZW52aXJvbm1lbnQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm90IGEgY3VzdG9tIGVudmlyb25tZW50LCBkaWRuJ3QgcHJvdmlkZSB0aGVpciBvd24gY2FudmFzIGFuZCBub3QgaGVhZGxlc3MsIHNvIGRldGVybWluZSB0aGUgcmVuZGVyZXI6XHJcbiAgICBpZiAoIWNvbmZpZy5jdXN0b21FbnZpcm9ubWVudCAmJiAhY29uZmlnLmNhbnZhcyAmJiBjb25maWcucmVuZGVyVHlwZSAhPT0gQ09OU1QuSEVBRExFU1MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5DQU5WQVMgfHwgKGNvbmZpZy5yZW5kZXJUeXBlICE9PSBDT05TVC5DQU5WQVMgJiYgIUZlYXR1cmVzLndlYkdMKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChGZWF0dXJlcy5jYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGV5IHJlcXVlc3RlZCBDYW52YXMgYW5kIHRoZWlyIGJyb3dzZXIgc3VwcG9ydHMgaXRcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5yZW5kZXJUeXBlID0gQ09OU1QuQ0FOVkFTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIENhbnZhcyBvciBXZWJHTCBjb250ZXh0LCBhYm9ydGluZy4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgR2FtZSByZXF1ZXN0ZWQgV2ViR0wgYW5kIGJyb3dzZXIgc2F5cyBpdCBzdXBwb3J0cyBpdFxyXG4gICAgICAgICAgICBjb25maWcucmVuZGVyVHlwZSA9IENPTlNULldFQkdMO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgUGl4ZWwgQXJ0IG1vZGU/XHJcbiAgICBpZiAoIWNvbmZpZy5hbnRpYWxpYXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzUG9vbC5kaXNhYmxlU21vb3RoaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJhc2VTaXplID0gZ2FtZS5zY2FsZS5iYXNlU2l6ZTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSBiYXNlU2l6ZS53aWR0aDtcclxuICAgIHZhciBoZWlnaHQgPSBiYXNlU2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgLy8gIERvZXMgdGhlIGdhbWUgY29uZmlnIHByb3ZpZGUgaXRzIG93biBjYW52YXMgZWxlbWVudCB0byB1c2U/XHJcbiAgICBpZiAoY29uZmlnLmNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBnYW1lLmNhbnZhcyA9IGNvbmZpZy5jYW52YXM7XHJcblxyXG4gICAgICAgIGdhbWUuY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgZ2FtZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGdhbWUuY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUoZ2FtZSwgd2lkdGgsIGhlaWdodCwgY29uZmlnLnJlbmRlclR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBEb2VzIHRoZSBnYW1lIGNvbmZpZyBwcm92aWRlIHNvbWUgY2FudmFzIGNzcyBzdHlsZXMgdG8gdXNlP1xyXG4gICAgaWYgKGNvbmZpZy5jYW52YXNTdHlsZSlcclxuICAgIHtcclxuICAgICAgICBnYW1lLmNhbnZhcy5zdHlsZSA9IGNvbmZpZy5jYW52YXNTdHlsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgUGl4ZWwgQXJ0IG1vZGU/XHJcbiAgICBpZiAoIWNvbmZpZy5hbnRpYWxpYXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzSW50ZXJwb2xhdGlvbi5zZXRDcmlzcChnYW1lLmNhbnZhcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5IRUFETEVTUylcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyBtb3JlIHRvIGRvIGhlcmVcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIENhbnZhc1JlbmRlcmVyO1xyXG4gICAgdmFyIFdlYkdMUmVuZGVyZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUiAmJiB0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG4gICAge1xyXG4gICAgICAgIENhbnZhc1JlbmRlcmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyk7XHJcbiAgICAgICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVyL3dlYmdsL1dlYkdMUmVuZGVyZXInKTtcclxuXHJcbiAgICAgICAgLy8gIExldCB0aGUgY29uZmlnIHBpY2sgdGhlIHJlbmRlcmVyIHR5cGUsIGFzIGJvdGggYXJlIGluY2x1ZGVkXHJcbiAgICAgICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5XRUJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWUucmVuZGVyZXIgPSBuZXcgV2ViR0xSZW5kZXJlcihnYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcihnYW1lKTtcclxuICAgICAgICAgICAgZ2FtZS5jb250ZXh0ID0gZ2FtZS5yZW5kZXJlci5nYW1lQ29udGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUiAmJiAhdHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxuICAgIHtcclxuICAgICAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvd2ViZ2wvV2ViR0xSZW5kZXJlcicpO1xyXG5cclxuICAgICAgICAvLyAgRm9yY2UgdGhlIHR5cGUgdG8gV2ViR0wsIHJlZ2FyZGxlc3Mgd2hhdCB3YXMgcmVxdWVzdGVkXHJcbiAgICAgICAgY29uZmlnLnJlbmRlclR5cGUgPSBDT05TVC5XRUJHTDtcclxuXHJcbiAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBXZWJHTFJlbmRlcmVyKGdhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdHlwZW9mIFdFQkdMX1JFTkRFUkVSICYmIHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlci9jYW52YXMvQ2FudmFzUmVuZGVyZXInKTtcclxuXHJcbiAgICAgICAgLy8gIEZvcmNlIHRoZSB0eXBlIHRvIENhbnZhcywgcmVnYXJkbGVzcyB3aGF0IHdhcyByZXF1ZXN0ZWRcclxuICAgICAgICBjb25maWcucmVuZGVyVHlwZSA9IENPTlNULkNBTlZBUztcclxuXHJcbiAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcihnYW1lKTtcclxuXHJcbiAgICAgICAgZ2FtZS5jb250ZXh0ID0gZ2FtZS5yZW5kZXJlci5nYW1lQ29udGV4dDtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/CreateRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/DebugHeader.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/core/DebugHeader.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\n\r\n/**\r\n * Called automatically by Phaser.Game and responsible for creating the console.log debug header.\r\n *\r\n * You can customize or disable the header via the Game Config object.\r\n *\r\n * @function Phaser.Core.DebugHeader\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance which will output this debug header.\r\n */\r\nvar DebugHeader = function (game)\r\n{\r\n    var config = game.config;\r\n\r\n    if (config.hideBanner)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var renderType = 'WebGL';\r\n\r\n    if (config.renderType === CONST.CANVAS)\r\n    {\r\n        renderType = 'Canvas';\r\n    }\r\n    else if (config.renderType === CONST.HEADLESS)\r\n    {\r\n        renderType = 'Headless';\r\n    }\r\n\r\n    var audioConfig = config.audio;\r\n    var deviceAudio = game.device.audio;\r\n\r\n    var audioType;\r\n\r\n    if (deviceAudio.webAudio && !(audioConfig && audioConfig.disableWebAudio))\r\n    {\r\n        audioType = 'Web Audio';\r\n    }\r\n    else if ((audioConfig && audioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n    {\r\n        audioType = 'No Audio';\r\n    }\r\n    else\r\n    {\r\n        audioType = 'HTML5 Audio';\r\n    }\r\n\r\n    if (!game.device.browser.ie)\r\n    {\r\n        var c = '';\r\n        var args = [ c ];\r\n\r\n        if (Array.isArray(config.bannerBackgroundColor))\r\n        {\r\n            var lastColor;\r\n\r\n            config.bannerBackgroundColor.forEach(function (color)\r\n            {\r\n                c = c.concat('%c ');\r\n\r\n                args.push('background: ' + color);\r\n\r\n                lastColor = color;\r\n\r\n            });\r\n\r\n            //  inject the text color\r\n            args[args.length - 1] = 'color: ' + config.bannerTextColor + '; background: ' + lastColor;\r\n        }\r\n        else\r\n        {\r\n            c = c.concat('%c ');\r\n\r\n            args.push('color: ' + config.bannerTextColor + '; background: ' + config.bannerBackgroundColor);\r\n        }\r\n\r\n        //  URL link background color (always white)\r\n        args.push('background: #fff');\r\n\r\n        if (config.gameTitle)\r\n        {\r\n            c = c.concat(config.gameTitle);\r\n\r\n            if (config.gameVersion)\r\n            {\r\n                c = c.concat(' v' + config.gameVersion);\r\n            }\r\n\r\n            if (!config.hidePhaser)\r\n            {\r\n                c = c.concat(' / ');\r\n            }\r\n        }\r\n\r\n        var fb = (typeof PLUGIN_FBINSTANT) ? '-FB' : '';\r\n\r\n        if (!config.hidePhaser)\r\n        {\r\n            c = c.concat('Phaser v' + CONST.VERSION + fb + ' (' + renderType + ' | ' + audioType + ')');\r\n        }\r\n\r\n        c = c.concat(' %c ' + config.gameURL);\r\n\r\n        //  Inject the new string back into the args array\r\n        args[0] = c;\r\n\r\n        console.log.apply(console, args);\r\n    }\r\n    else if (window['console'])\r\n    {\r\n        console.log('Phaser v' + CONST.VERSION + ' / https://phaser.io');\r\n    }\r\n};\r\n\r\nmodule.exports = DebugHeader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0RlYnVnSGVhZGVyLmpzPzBlMTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvREFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTs7QUFFYjtBQUNBLDJFQUEyRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQ7QUFDN0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9EZWJ1Z0hlYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBQaGFzZXIuR2FtZSBhbmQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBjb25zb2xlLmxvZyBkZWJ1ZyBoZWFkZXIuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY3VzdG9taXplIG9yIGRpc2FibGUgdGhlIGhlYWRlciB2aWEgdGhlIEdhbWUgQ29uZmlnIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Db3JlLkRlYnVnSGVhZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIFBoYXNlci5HYW1lIGluc3RhbmNlIHdoaWNoIHdpbGwgb3V0cHV0IHRoaXMgZGVidWcgaGVhZGVyLlxyXG4gKi9cclxudmFyIERlYnVnSGVhZGVyID0gZnVuY3Rpb24gKGdhbWUpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBnYW1lLmNvbmZpZztcclxuXHJcbiAgICBpZiAoY29uZmlnLmhpZGVCYW5uZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUeXBlID0gJ1dlYkdMJztcclxuXHJcbiAgICBpZiAoY29uZmlnLnJlbmRlclR5cGUgPT09IENPTlNULkNBTlZBUylcclxuICAgIHtcclxuICAgICAgICByZW5kZXJUeXBlID0gJ0NhbnZhcyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb25maWcucmVuZGVyVHlwZSA9PT0gQ09OU1QuSEVBRExFU1MpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyVHlwZSA9ICdIZWFkbGVzcyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gY29uZmlnLmF1ZGlvO1xyXG4gICAgdmFyIGRldmljZUF1ZGlvID0gZ2FtZS5kZXZpY2UuYXVkaW87XHJcblxyXG4gICAgdmFyIGF1ZGlvVHlwZTtcclxuXHJcbiAgICBpZiAoZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIShhdWRpb0NvbmZpZyAmJiBhdWRpb0NvbmZpZy5kaXNhYmxlV2ViQXVkaW8pKVxyXG4gICAge1xyXG4gICAgICAgIGF1ZGlvVHlwZSA9ICdXZWIgQXVkaW8nO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKGF1ZGlvQ29uZmlnICYmIGF1ZGlvQ29uZmlnLm5vQXVkaW8pIHx8ICghZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIWRldmljZUF1ZGlvLmF1ZGlvRGF0YSkpXHJcbiAgICB7XHJcbiAgICAgICAgYXVkaW9UeXBlID0gJ05vIEF1ZGlvJztcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBhdWRpb1R5cGUgPSAnSFRNTDUgQXVkaW8nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZ2FtZS5kZXZpY2UuYnJvd3Nlci5pZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgYyA9ICcnO1xyXG4gICAgICAgIHZhciBhcmdzID0gWyBjIF07XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5iYW5uZXJCYWNrZ3JvdW5kQ29sb3IpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxhc3RDb2xvcjtcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5iYW5uZXJCYWNrZ3JvdW5kQ29sb3IuZm9yRWFjaChmdW5jdGlvbiAoY29sb3IpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMgPSBjLmNvbmNhdCgnJWMgJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKCdiYWNrZ3JvdW5kOiAnICsgY29sb3IpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxhc3RDb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgaW5qZWN0IHRoZSB0ZXh0IGNvbG9yXHJcbiAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9ICdjb2xvcjogJyArIGNvbmZpZy5iYW5uZXJUZXh0Q29sb3IgKyAnOyBiYWNrZ3JvdW5kOiAnICsgbGFzdENvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjID0gYy5jb25jYXQoJyVjICcpO1xyXG5cclxuICAgICAgICAgICAgYXJncy5wdXNoKCdjb2xvcjogJyArIGNvbmZpZy5iYW5uZXJUZXh0Q29sb3IgKyAnOyBiYWNrZ3JvdW5kOiAnICsgY29uZmlnLmJhbm5lckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVVJMIGxpbmsgYmFja2dyb3VuZCBjb2xvciAoYWx3YXlzIHdoaXRlKVxyXG4gICAgICAgIGFyZ3MucHVzaCgnYmFja2dyb3VuZDogI2ZmZicpO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmdhbWVUaXRsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGMgPSBjLmNvbmNhdChjb25maWcuZ2FtZVRpdGxlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ2FtZVZlcnNpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMgPSBjLmNvbmNhdCgnIHYnICsgY29uZmlnLmdhbWVWZXJzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb25maWcuaGlkZVBoYXNlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYyA9IGMuY29uY2F0KCcgLyAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZiID0gKHR5cGVvZiBQTFVHSU5fRkJJTlNUQU5UKSA/ICctRkInIDogJyc7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmhpZGVQaGFzZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjID0gYy5jb25jYXQoJ1BoYXNlciB2JyArIENPTlNULlZFUlNJT04gKyBmYiArICcgKCcgKyByZW5kZXJUeXBlICsgJyB8ICcgKyBhdWRpb1R5cGUgKyAnKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYyA9IGMuY29uY2F0KCcgJWMgJyArIGNvbmZpZy5nYW1lVVJMKTtcclxuXHJcbiAgICAgICAgLy8gIEluamVjdCB0aGUgbmV3IHN0cmluZyBiYWNrIGludG8gdGhlIGFyZ3MgYXJyYXlcclxuICAgICAgICBhcmdzWzBdID0gYztcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh3aW5kb3dbJ2NvbnNvbGUnXSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUGhhc2VyIHYnICsgQ09OU1QuVkVSU0lPTiArICcgLyBodHRwczovL3BoYXNlci5pbycpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEZWJ1Z0hlYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/DebugHeader.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/Game.js":
/*!**********************************************!*\
  !*** ./node_modules/phaser/src/core/Game.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\nvar AnimationManager = __webpack_require__(/*! ../animations/AnimationManager */ \"./node_modules/phaser/src/animations/AnimationManager.js\");\r\nvar CacheManager = __webpack_require__(/*! ../cache/CacheManager */ \"./node_modules/phaser/src/cache/CacheManager.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Config = __webpack_require__(/*! ./Config */ \"./node_modules/phaser/src/core/Config.js\");\r\nvar CreateDOMContainer = __webpack_require__(/*! ../dom/CreateDOMContainer */ \"./node_modules/phaser/src/dom/CreateDOMContainer.js\");\r\nvar CreateRenderer = __webpack_require__(/*! ./CreateRenderer */ \"./node_modules/phaser/src/core/CreateRenderer.js\");\r\nvar DataManager = __webpack_require__(/*! ../data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar DebugHeader = __webpack_require__(/*! ./DebugHeader */ \"./node_modules/phaser/src/core/DebugHeader.js\");\r\nvar Device = __webpack_require__(/*! ../device */ \"./node_modules/phaser/src/device/index.js\");\r\nvar DOMContentLoaded = __webpack_require__(/*! ../dom/DOMContentLoaded */ \"./node_modules/phaser/src/dom/DOMContentLoaded.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar InputManager = __webpack_require__(/*! ../input/InputManager */ \"./node_modules/phaser/src/input/InputManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar PluginManager = __webpack_require__(/*! ../plugins/PluginManager */ \"./node_modules/phaser/src/plugins/PluginManager.js\");\r\nvar ScaleManager = __webpack_require__(/*! ../scale/ScaleManager */ \"./node_modules/phaser/src/scale/ScaleManager.js\");\r\nvar SceneManager = __webpack_require__(/*! ../scene/SceneManager */ \"./node_modules/phaser/src/scene/SceneManager.js\");\r\nvar TextureEvents = __webpack_require__(/*! ../textures/events */ \"./node_modules/phaser/src/textures/events/index.js\");\r\nvar TextureManager = __webpack_require__(/*! ../textures/TextureManager */ \"./node_modules/phaser/src/textures/TextureManager.js\");\r\nvar TimeStep = __webpack_require__(/*! ./TimeStep */ \"./node_modules/phaser/src/core/TimeStep.js\");\r\nvar VisibilityHandler = __webpack_require__(/*! ./VisibilityHandler */ \"./node_modules/phaser/src/core/VisibilityHandler.js\");\r\n\r\nif (typeof FEATURE_SOUND)\r\n{\r\n    var SoundManagerCreator = __webpack_require__(/*! ../sound/SoundManagerCreator */ \"./node_modules/phaser/src/sound/SoundManagerCreator.js\");\r\n}\r\n\r\nif (typeof PLUGIN_FBINSTANT)\r\n{\r\n    var FacebookInstantGamesPlugin = __webpack_require__(/*! ../../plugins/fbinstant/src/FacebookInstantGamesPlugin */ \"./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js\");\r\n}\r\n\r\n/**\r\n * @classdesc\r\n * The Phaser.Game instance is the main controller for the entire Phaser game. It is responsible\r\n * for handling the boot process, parsing the configuration values, creating the renderer,\r\n * and setting-up all of the global Phaser systems, such as sound and input.\r\n * Once that is complete it will start the Scene Manager and then begin the main game loop.\r\n *\r\n * You should generally avoid accessing any of the systems created by Game, and instead use those\r\n * made available to you via the Phaser.Scene Systems class instead.\r\n *\r\n * @class Game\r\n * @memberof Phaser\r\n * @constructor\r\n * @fires Phaser.Core.Events#BLUR\r\n * @fires Phaser.Core.Events#FOCUS\r\n * @fires Phaser.Core.Events#HIDDEN\r\n * @fires Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Core.GameConfig} [GameConfig] - The configuration object for your Phaser Game instance.\r\n */\r\nvar Game = new Class({\r\n\r\n    initialize:\r\n\r\n    function Game (config)\r\n    {\r\n        /**\r\n         * The parsed Game Configuration object.\r\n         *\r\n         * The values stored within this object are read-only and should not be changed at run-time.\r\n         *\r\n         * @name Phaser.Game#config\r\n         * @type {Phaser.Core.Config}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.config = new Config(config);\r\n\r\n        /**\r\n         * A reference to either the Canvas or WebGL Renderer that this Game is using.\r\n         *\r\n         * @name Phaser.Game#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.renderer = null;\r\n\r\n        /**\r\n         * A reference to an HTML Div Element used as the DOM Element Container.\r\n         *\r\n         * Only set if `createDOMContainer` is `true` in the game config (by default it is `false`) and\r\n         * if you provide a parent element to insert the Phaser Game inside.\r\n         *\r\n         * See the DOM Element Game Object for more details.\r\n         *\r\n         * @name Phaser.Game#domContainer\r\n         * @type {HTMLDivElement}\r\n         * @since 3.17.0\r\n         */\r\n        this.domContainer = null;\r\n\r\n        /**\r\n         * A reference to the HTML Canvas Element that Phaser uses to render the game.\r\n         * This is created automatically by Phaser unless you provide a `canvas` property\r\n         * in your Game Config.\r\n         *\r\n         * @name Phaser.Game#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.canvas = null;\r\n\r\n        /**\r\n         * A reference to the Rendering Context belonging to the Canvas Element this game is rendering to.\r\n         * If the game is running under Canvas it will be a 2d Canvas Rendering Context.\r\n         * If the game is running under WebGL it will be a WebGL Rendering Context.\r\n         * This context is created automatically by Phaser unless you provide a `context` property\r\n         * in your Game Config.\r\n         *\r\n         * @name Phaser.Game#context\r\n         * @type {(CanvasRenderingContext2D|WebGLRenderingContext)}\r\n         * @since 3.0.0\r\n         */\r\n        this.context = null;\r\n\r\n        /**\r\n         * A flag indicating when this Game instance has finished its boot process.\r\n         *\r\n         * @name Phaser.Game#isBooted\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isBooted = false;\r\n\r\n        /**\r\n         * A flag indicating if this Game is currently running its game step or not.\r\n         *\r\n         * @name Phaser.Game#isRunning\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * An Event Emitter which is used to broadcast game-level events from the global systems.\r\n         *\r\n         * @name Phaser.Game#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = new EventEmitter();\r\n\r\n        /**\r\n         * An instance of the Animation Manager.\r\n         *\r\n         * The Animation Manager is a global system responsible for managing all animations used within your game.\r\n         *\r\n         * @name Phaser.Game#anims\r\n         * @type {Phaser.Animations.AnimationManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.anims = new AnimationManager(this);\r\n\r\n        /**\r\n         * An instance of the Texture Manager.\r\n         *\r\n         * The Texture Manager is a global system responsible for managing all textures being used by your game.\r\n         *\r\n         * @name Phaser.Game#textures\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.textures = new TextureManager(this);\r\n\r\n        /**\r\n         * An instance of the Cache Manager.\r\n         *\r\n         * The Cache Manager is a global system responsible for caching, accessing and releasing external game assets.\r\n         *\r\n         * @name Phaser.Game#cache\r\n         * @type {Phaser.Cache.CacheManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cache = new CacheManager(this);\r\n\r\n        /**\r\n         * An instance of the Data Manager\r\n         *\r\n         * @name Phaser.Game#registry\r\n         * @type {Phaser.Data.DataManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.registry = new DataManager(this);\r\n\r\n        /**\r\n         * An instance of the Input Manager.\r\n         *\r\n         * The Input Manager is a global system responsible for the capture of browser-level input events.\r\n         *\r\n         * @name Phaser.Game#input\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.input = new InputManager(this, this.config);\r\n\r\n        /**\r\n         * An instance of the Scene Manager.\r\n         *\r\n         * The Scene Manager is a global system responsible for creating, modifying and updating the Scenes in your game.\r\n         *\r\n         * @name Phaser.Game#scene\r\n         * @type {Phaser.Scenes.SceneManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = new SceneManager(this, this.config.sceneConfig);\r\n\r\n        /**\r\n         * A reference to the Device inspector.\r\n         *\r\n         * Contains information about the device running this game, such as OS, browser vendor and feature support.\r\n         * Used by various systems to determine capabilities and code paths.\r\n         *\r\n         * @name Phaser.Game#device\r\n         * @type {Phaser.DeviceConf}\r\n         * @since 3.0.0\r\n         */\r\n        this.device = Device;\r\n\r\n        /**\r\n         * An instance of the Scale Manager.\r\n         *\r\n         * The Scale Manager is a global system responsible for handling scaling of the game canvas.\r\n         *\r\n         * @name Phaser.Game#scale\r\n         * @type {Phaser.Scale.ScaleManager}\r\n         * @since 3.16.0\r\n         */\r\n        this.scale = new ScaleManager(this, this.config);\r\n\r\n        /**\r\n         * An instance of the base Sound Manager.\r\n         *\r\n         * The Sound Manager is a global system responsible for the playback and updating of all audio in your game.\r\n         *\r\n         * You can disable the inclusion of the Sound Manager in your build by toggling the webpack `FEATURE_SOUND` flag.\r\n         *\r\n         * @name Phaser.Game#sound\r\n         * @type {(Phaser.Sound.NoAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager|Phaser.Sound.WebAudioSoundManager)}\r\n         * @since 3.0.0\r\n         */\r\n        this.sound = null;\r\n\r\n        if (typeof FEATURE_SOUND)\r\n        {\r\n            this.sound = SoundManagerCreator.create(this);\r\n        }\r\n\r\n        /**\r\n         * An instance of the Time Step.\r\n         *\r\n         * The Time Step is a global system responsible for setting-up and responding to the browser frame events, processing\r\n         * them and calculating delta values. It then automatically calls the game step.\r\n         *\r\n         * @name Phaser.Game#loop\r\n         * @type {Phaser.Core.TimeStep}\r\n         * @since 3.0.0\r\n         */\r\n        this.loop = new TimeStep(this, this.config.fps);\r\n\r\n        /**\r\n         * An instance of the Plugin Manager.\r\n         *\r\n         * The Plugin Manager is a global system that allows plugins to register themselves with it, and can then install\r\n         * those plugins into Scenes as required.\r\n         *\r\n         * @name Phaser.Game#plugins\r\n         * @type {Phaser.Plugins.PluginManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.plugins = new PluginManager(this, this.config);\r\n\r\n        if (typeof PLUGIN_FBINSTANT)\r\n        {\r\n            /**\r\n             * An instance of the Facebook Instant Games Plugin.\r\n             *\r\n             * This will only be available if the plugin has been built into Phaser,\r\n             * or you're using the special Facebook Instant Games custom build.\r\n             *\r\n             * @name Phaser.Game#facebook\r\n             * @type {Phaser.FacebookInstantGamesPlugin}\r\n             * @since 3.13.0\r\n             */\r\n            this.facebook = new FacebookInstantGamesPlugin(this);\r\n        }\r\n\r\n        /**\r\n         * Is this Game pending destruction at the start of the next frame?\r\n         *\r\n         * @name Phaser.Game#pendingDestroy\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.pendingDestroy = false;\r\n\r\n        /**\r\n         * Remove the Canvas once the destroy is over?\r\n         *\r\n         * @name Phaser.Game#removeCanvas\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this.removeCanvas = false;\r\n\r\n        /**\r\n         * Remove everything when the game is destroyed.\r\n         * You cannot create a new Phaser instance on the same web page after doing this.\r\n         *\r\n         * @name Phaser.Game#noReturn\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.noReturn = false;\r\n\r\n        /**\r\n         * Does the window the game is running in currently have focus or not?\r\n         * This is modified by the VisibilityHandler.\r\n         *\r\n         * @name Phaser.Game#hasFocus\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.9.0\r\n         */\r\n        this.hasFocus = false;\r\n\r\n        //  Wait for the DOM Ready event, then call boot.\r\n        DOMContentLoaded(this.boot.bind(this));\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically when the DOM is ready. It is responsible for creating the renderer,\r\n     * displaying the Debug Header, adding the game canvas to the DOM and emitting the 'boot' event.\r\n     * It listens for a 'ready' event from the base systems and once received it will call `Game.start`.\r\n     *\r\n     * @method Phaser.Game#boot\r\n     * @protected\r\n     * @fires Phaser.Core.Events#BOOT\r\n     * @listens Phaser.Textures.Events#READY\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        if (!PluginCache.hasCore('EventEmitter'))\r\n        {\r\n            console.warn('Aborting. Core Plugins missing.');\r\n            return;\r\n        }\r\n\r\n        this.isBooted = true;\r\n\r\n        this.config.preBoot(this);\r\n\r\n        this.scale.preBoot();\r\n\r\n        CreateRenderer(this);\r\n\r\n        CreateDOMContainer(this);\r\n\r\n        DebugHeader(this);\r\n\r\n        AddToDOM(this.canvas, this.config.parent);\r\n\r\n        //  The Texture Manager has to wait on a couple of non-blocking events before it's fully ready.\r\n        //  So it will emit this internal event when done:\r\n        this.textures.once(TextureEvents.READY, this.texturesReady, this);\r\n\r\n        this.events.emit(Events.BOOT);\r\n    },\r\n\r\n    /**\r\n     * Called automatically when the Texture Manager has finished setting up and preparing the\r\n     * default textures.\r\n     *\r\n     * @method Phaser.Game#texturesReady\r\n     * @private\r\n     * @fires Phaser.Game#ready\r\n     * @since 3.12.0\r\n     */\r\n    texturesReady: function ()\r\n    {\r\n        //  Start all the other systems\r\n        this.events.emit(Events.READY);\r\n\r\n        this.start();\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Game.boot once all of the global systems have finished setting themselves up.\r\n     * By this point the Game is now ready to start the main loop running.\r\n     * It will also enable the Visibility Handler.\r\n     *\r\n     * @method Phaser.Game#start\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    start: function ()\r\n    {\r\n        this.isRunning = true;\r\n\r\n        this.config.postBoot(this);\r\n\r\n        if (this.renderer)\r\n        {\r\n            this.loop.start(this.step.bind(this));\r\n        }\r\n        else\r\n        {\r\n            this.loop.start(this.headlessStep.bind(this));\r\n        }\r\n\r\n        VisibilityHandler(this);\r\n\r\n        var eventEmitter = this.events;\r\n\r\n        eventEmitter.on(Events.HIDDEN, this.onHidden, this);\r\n        eventEmitter.on(Events.VISIBLE, this.onVisible, this);\r\n        eventEmitter.on(Events.BLUR, this.onBlur, this);\r\n        eventEmitter.on(Events.FOCUS, this.onFocus, this);\r\n    },\r\n\r\n    /**\r\n     * The main Game Step. Called automatically by the Time Step, once per browser frame (typically as a result of\r\n     * Request Animation Frame, or Set Timeout on very old browsers.)\r\n     *\r\n     * The step will update the global managers first, then proceed to update each Scene in turn, via the Scene Manager.\r\n     *\r\n     * It will then render each Scene in turn, via the Renderer. This process emits `prerender` and `postrender` events.\r\n     *\r\n     * @method Phaser.Game#step\r\n     * @fires Phaser.Core.Events#PRE_STEP_EVENT\r\n     * @fires Phaser.Core.Events#STEP_EVENT\r\n     * @fires Phaser.Core.Events#POST_STEP_EVENT\r\n     * @fires Phaser.Core.Events#PRE_RENDER_EVENT\r\n     * @fires Phaser.Core.Events#POST_RENDER_EVENT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    step: function (time, delta)\r\n    {\r\n        if (this.pendingDestroy)\r\n        {\r\n            return this.runDestroy();\r\n        }\r\n\r\n        var eventEmitter = this.events;\r\n\r\n        //  Global Managers like Input and Sound update in the prestep\r\n\r\n        eventEmitter.emit(Events.PRE_STEP, time, delta);\r\n\r\n        //  This is mostly meant for user-land code and plugins\r\n\r\n        eventEmitter.emit(Events.STEP, time, delta);\r\n\r\n        //  Update the Scene Manager and all active Scenes\r\n\r\n        this.scene.update(time, delta);\r\n\r\n        //  Our final event before rendering starts\r\n\r\n        eventEmitter.emit(Events.POST_STEP, time, delta);\r\n\r\n        var renderer = this.renderer;\r\n\r\n        //  Run the Pre-render (clearing the canvas, setting background colors, etc)\r\n\r\n        renderer.preRender();\r\n\r\n        eventEmitter.emit(Events.PRE_RENDER, renderer, time, delta);\r\n\r\n        //  The main render loop. Iterates all Scenes and all Cameras in those scenes, rendering to the renderer instance.\r\n\r\n        this.scene.render(renderer);\r\n\r\n        //  The Post-Render call. Tidies up loose end, takes snapshots, etc.\r\n\r\n        renderer.postRender();\r\n\r\n        //  The final event before the step repeats. Your last chance to do anything to the canvas before it all starts again.\r\n\r\n        eventEmitter.emit(Events.POST_RENDER, renderer, time, delta);\r\n    },\r\n\r\n    /**\r\n     * A special version of the Game Step for the HEADLESS renderer only.\r\n     *\r\n     * The main Game Step. Called automatically by the Time Step, once per browser frame (typically as a result of\r\n     * Request Animation Frame, or Set Timeout on very old browsers.)\r\n     *\r\n     * The step will update the global managers first, then proceed to update each Scene in turn, via the Scene Manager.\r\n     *\r\n     * This process emits `prerender` and `postrender` events, even though nothing actually displays.\r\n     *\r\n     * @method Phaser.Game#headlessStep\r\n     * @fires Phaser.Game#prerenderEvent\r\n     * @fires Phaser.Game#postrenderEvent\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    headlessStep: function (time, delta)\r\n    {\r\n        if (this.pendingDestroy)\r\n        {\r\n            return this.runDestroy();\r\n        }\r\n\r\n        var eventEmitter = this.events;\r\n\r\n        //  Global Managers\r\n\r\n        eventEmitter.emit(Events.PRE_STEP, time, delta);\r\n\r\n        eventEmitter.emit(Events.STEP, time, delta);\r\n\r\n        //  Scenes\r\n\r\n        this.scene.update(time, delta);\r\n\r\n        eventEmitter.emit(Events.POST_STEP, time, delta);\r\n\r\n        //  Render\r\n\r\n        eventEmitter.emit(Events.PRE_RENDER);\r\n\r\n        eventEmitter.emit(Events.POST_RENDER);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by the Visibility Handler.\r\n     * This will pause the main loop and then emit a pause event.\r\n     *\r\n     * @method Phaser.Game#onHidden\r\n     * @protected\r\n     * @fires Phaser.Core.Events#PAUSE\r\n     * @since 3.0.0\r\n     */\r\n    onHidden: function ()\r\n    {\r\n        this.loop.pause();\r\n\r\n        this.events.emit(Events.PAUSE);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by the Visibility Handler.\r\n     * This will resume the main loop and then emit a resume event.\r\n     *\r\n     * @method Phaser.Game#onVisible\r\n     * @protected\r\n     * @fires Phaser.Core.Events#RESUME\r\n     * @since 3.0.0\r\n     */\r\n    onVisible: function ()\r\n    {\r\n        this.loop.resume();\r\n\r\n        this.events.emit(Events.RESUME);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by the Visibility Handler.\r\n     * This will set the main loop into a 'blurred' state, which pauses it.\r\n     *\r\n     * @method Phaser.Game#onBlur\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onBlur: function ()\r\n    {\r\n        this.hasFocus = false;\r\n\r\n        this.loop.blur();\r\n    },\r\n\r\n    /**\r\n     * Called automatically by the Visibility Handler.\r\n     * This will set the main loop into a 'focused' state, which resumes it.\r\n     *\r\n     * @method Phaser.Game#onFocus\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onFocus: function ()\r\n    {\r\n        this.hasFocus = true;\r\n\r\n        this.loop.focus();\r\n    },\r\n\r\n    /**\r\n     * Returns the current game frame.\r\n     *\r\n     * When the game starts running, the frame is incremented every time Request Animation Frame, or Set Timeout, fires.\r\n     *\r\n     * @method Phaser.Game#getFrame\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The current game frame.\r\n     */\r\n    getFrame: function ()\r\n    {\r\n        return this.loop.frame;\r\n    },\r\n\r\n    /**\r\n     * Returns the time that the current game step started at, as based on `performance.now`.\r\n     *\r\n     * @method Phaser.Game#getTime\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The current game timestamp.\r\n     */\r\n    getTime: function ()\r\n    {\r\n        return this.loop.now;\r\n    },\r\n\r\n    /**\r\n     * Flags this Game instance as needing to be destroyed on the _next frame_, making this an asynchronous operation.\r\n     *\r\n     * It will wait until the current frame has completed and then call `runDestroy` internally.\r\n     *\r\n     * If you need to react to the games eventual destruction, listen for the `DESTROY` event.\r\n     *\r\n     * If you **do not** need to run Phaser again on the same web page you can set the `noReturn` argument to `true` and it will free-up\r\n     * memory being held by the core Phaser plugins. If you do need to create another game instance on the same page, leave this as `false`.\r\n     *\r\n     * @method Phaser.Game#destroy\r\n     * @fires Phaser.Core.Events#DESTROY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} removeCanvas - Set to `true` if you would like the parent canvas element removed from the DOM, or `false` to leave it in place.\r\n     * @param {boolean} [noReturn=false] - If `true` all the core Phaser plugins are destroyed. You cannot create another instance of Phaser on the same web page if you do this.\r\n     */\r\n    destroy: function (removeCanvas, noReturn)\r\n    {\r\n        if (noReturn === undefined) { noReturn = false; }\r\n\r\n        this.pendingDestroy = true;\r\n\r\n        this.removeCanvas = removeCanvas;\r\n        this.noReturn = noReturn;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Phaser.Game instance, all global systems, all sub-systems and all Scenes.\r\n     *\r\n     * @method Phaser.Game#runDestroy\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    runDestroy: function ()\r\n    {\r\n        this.events.emit(Events.DESTROY);\r\n\r\n        this.events.removeAllListeners();\r\n\r\n        this.scene.destroy();\r\n\r\n        if (this.renderer)\r\n        {\r\n            this.renderer.destroy();\r\n        }\r\n\r\n        if (this.removeCanvas && this.canvas)\r\n        {\r\n            CanvasPool.remove(this.canvas);\r\n\r\n            if (this.canvas.parentNode)\r\n            {\r\n                this.canvas.parentNode.removeChild(this.canvas);\r\n            }\r\n        }\r\n\r\n        if (this.domContainer)\r\n        {\r\n            this.domContainer.parentNode.removeChild(this.domContainer);\r\n        }\r\n\r\n        this.loop.destroy();\r\n\r\n        this.pendingDestroy = false;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Game;\r\n\r\n/**\r\n * \"Computers are good at following instructions, but not at reading your mind.\" - Donald Knuth\r\n */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0dhbWUuanM/MjJkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFpQjtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnR0FBZ0M7QUFDL0QsbUJBQW1CLG1CQUFPLENBQUMsOEVBQXVCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN2RCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQywwREFBVTtBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDNUQscUJBQXFCLG1CQUFPLENBQUMsMEVBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN6QyxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsdUJBQXVCLG1CQUFPLENBQUMsa0ZBQXlCO0FBQ3hELG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxnRUFBVTtBQUMvQixtQkFBbUIsbUJBQU8sQ0FBQyw4RUFBdUI7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLG9GQUEwQjtBQUN0RCxtQkFBbUIsbUJBQU8sQ0FBQyw4RUFBdUI7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsOEVBQXVCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLDhFQUFvQjtBQUNoRCxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBNEI7QUFDekQsZUFBZSxtQkFBTyxDQUFDLDhEQUFZO0FBQ25DLHdCQUF3QixtQkFBTyxDQUFDLGdGQUFxQjs7QUFFckQ7QUFDQTtBQUNBLDhCQUE4QixtQkFBTyxDQUFDLDRGQUE4QjtBQUNwRTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDLG1CQUFPLENBQUMseUlBQXdEO0FBQ3JHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvR2FtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkZFRvRE9NID0gcmVxdWlyZSgnLi4vZG9tL0FkZFRvRE9NJyk7XHJcbnZhciBBbmltYXRpb25NYW5hZ2VyID0gcmVxdWlyZSgnLi4vYW5pbWF0aW9ucy9BbmltYXRpb25NYW5hZ2VyJyk7XHJcbnZhciBDYWNoZU1hbmFnZXIgPSByZXF1aXJlKCcuLi9jYWNoZS9DYWNoZU1hbmFnZXInKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb25maWcgPSByZXF1aXJlKCcuL0NvbmZpZycpO1xyXG52YXIgQ3JlYXRlRE9NQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZG9tL0NyZWF0ZURPTUNvbnRhaW5lcicpO1xyXG52YXIgQ3JlYXRlUmVuZGVyZXIgPSByZXF1aXJlKCcuL0NyZWF0ZVJlbmRlcmVyJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4uL2RhdGEvRGF0YU1hbmFnZXInKTtcclxudmFyIERlYnVnSGVhZGVyID0gcmVxdWlyZSgnLi9EZWJ1Z0hlYWRlcicpO1xyXG52YXIgRGV2aWNlID0gcmVxdWlyZSgnLi4vZGV2aWNlJyk7XHJcbnZhciBET01Db250ZW50TG9hZGVkID0gcmVxdWlyZSgnLi4vZG9tL0RPTUNvbnRlbnRMb2FkZWQnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBJbnB1dE1hbmFnZXIgPSByZXF1aXJlKCcuLi9pbnB1dC9JbnB1dE1hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgUGx1Z2luTWFuYWdlciA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luTWFuYWdlcicpO1xyXG52YXIgU2NhbGVNYW5hZ2VyID0gcmVxdWlyZSgnLi4vc2NhbGUvU2NhbGVNYW5hZ2VyJyk7XHJcbnZhciBTY2VuZU1hbmFnZXIgPSByZXF1aXJlKCcuLi9zY2VuZS9TY2VuZU1hbmFnZXInKTtcclxudmFyIFRleHR1cmVFdmVudHMgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9ldmVudHMnKTtcclxudmFyIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZU1hbmFnZXInKTtcclxudmFyIFRpbWVTdGVwID0gcmVxdWlyZSgnLi9UaW1lU3RlcCcpO1xyXG52YXIgVmlzaWJpbGl0eUhhbmRsZXIgPSByZXF1aXJlKCcuL1Zpc2liaWxpdHlIYW5kbGVyJyk7XHJcblxyXG5pZiAodHlwZW9mIEZFQVRVUkVfU09VTkQpXHJcbntcclxuICAgIHZhciBTb3VuZE1hbmFnZXJDcmVhdG9yID0gcmVxdWlyZSgnLi4vc291bmQvU291bmRNYW5hZ2VyQ3JlYXRvcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFBMVUdJTl9GQklOU1RBTlQpXHJcbntcclxuICAgIHZhciBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiA9IHJlcXVpcmUoJy4uLy4uL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbicpO1xyXG59XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UgaXMgdGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGVudGlyZSBQaGFzZXIgZ2FtZS4gSXQgaXMgcmVzcG9uc2libGVcclxuICogZm9yIGhhbmRsaW5nIHRoZSBib290IHByb2Nlc3MsIHBhcnNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCBjcmVhdGluZyB0aGUgcmVuZGVyZXIsXHJcbiAqIGFuZCBzZXR0aW5nLXVwIGFsbCBvZiB0aGUgZ2xvYmFsIFBoYXNlciBzeXN0ZW1zLCBzdWNoIGFzIHNvdW5kIGFuZCBpbnB1dC5cclxuICogT25jZSB0aGF0IGlzIGNvbXBsZXRlIGl0IHdpbGwgc3RhcnQgdGhlIFNjZW5lIE1hbmFnZXIgYW5kIHRoZW4gYmVnaW4gdGhlIG1haW4gZ2FtZSBsb29wLlxyXG4gKlxyXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBhdm9pZCBhY2Nlc3NpbmcgYW55IG9mIHRoZSBzeXN0ZW1zIGNyZWF0ZWQgYnkgR2FtZSwgYW5kIGluc3RlYWQgdXNlIHRob3NlXHJcbiAqIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSB2aWEgdGhlIFBoYXNlci5TY2VuZSBTeXN0ZW1zIGNsYXNzIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBHYW1lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjQkxVUlxyXG4gKiBAZmlyZXMgUGhhc2VyLkNvcmUuRXZlbnRzI0ZPQ1VTXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjSElEREVOXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjVklTSUJMRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBbR2FtZUNvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHlvdXIgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgR2FtZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHYW1lIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBhcnNlZCBHYW1lIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBzdG9yZWQgd2l0aGluIHRoaXMgb2JqZWN0IGFyZSByZWFkLW9ubHkgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhdCBydW4tdGltZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2NvbmZpZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ29yZS5Db25maWd9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBuZXcgQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhpcyBHYW1lIGlzIHVzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byBhbiBIVE1MIERpdiBFbGVtZW50IHVzZWQgYXMgdGhlIERPTSBFbGVtZW50IENvbnRhaW5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE9ubHkgc2V0IGlmIGBjcmVhdGVET01Db250YWluZXJgIGlzIGB0cnVlYCBpbiB0aGUgZ2FtZSBjb25maWcgKGJ5IGRlZmF1bHQgaXQgaXMgYGZhbHNlYCkgYW5kXHJcbiAgICAgICAgICogaWYgeW91IHByb3ZpZGUgYSBwYXJlbnQgZWxlbWVudCB0byBpbnNlcnQgdGhlIFBoYXNlciBHYW1lIGluc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSB0aGUgRE9NIEVsZW1lbnQgR2FtZSBPYmplY3QgZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2RvbUNvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRGl2RWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb21Db250YWluZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgSFRNTCBDYW52YXMgRWxlbWVudCB0aGF0IFBoYXNlciB1c2VzIHRvIHJlbmRlciB0aGUgZ2FtZS5cclxuICAgICAgICAgKiBUaGlzIGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBQaGFzZXIgdW5sZXNzIHlvdSBwcm92aWRlIGEgYGNhbnZhc2AgcHJvcGVydHlcclxuICAgICAgICAgKiBpbiB5b3VyIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFJlbmRlcmluZyBDb250ZXh0IGJlbG9uZ2luZyB0byB0aGUgQ2FudmFzIEVsZW1lbnQgdGhpcyBnYW1lIGlzIHJlbmRlcmluZyB0by5cclxuICAgICAgICAgKiBJZiB0aGUgZ2FtZSBpcyBydW5uaW5nIHVuZGVyIENhbnZhcyBpdCB3aWxsIGJlIGEgMmQgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqIElmIHRoZSBnYW1lIGlzIHJ1bm5pbmcgdW5kZXIgV2ViR0wgaXQgd2lsbCBiZSBhIFdlYkdMIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqIFRoaXMgY29udGV4dCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgUGhhc2VyIHVubGVzcyB5b3UgcHJvdmlkZSBhIGBjb250ZXh0YCBwcm9wZXJ0eVxyXG4gICAgICAgICAqIGluIHlvdXIgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNjb250ZXh0XHJcbiAgICAgICAgICogQHR5cGUgeyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyB3aGVuIHRoaXMgR2FtZSBpbnN0YW5jZSBoYXMgZmluaXNoZWQgaXRzIGJvb3QgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2lzQm9vdGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0Jvb3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIEdhbWUgaXMgY3VycmVudGx5IHJ1bm5pbmcgaXRzIGdhbWUgc3RlcCBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBFdmVudCBFbWl0dGVyIHdoaWNoIGlzIHVzZWQgdG8gYnJvYWRjYXN0IGdhbWUtbGV2ZWwgZXZlbnRzIGZyb20gdGhlIGdsb2JhbCBzeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgQW5pbWF0aW9uIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgYW5pbWF0aW9ucyB1c2VkIHdpdGhpbiB5b3VyIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNhbmltc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5pbXMgPSBuZXcgQW5pbWF0aW9uTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBUZXh0dXJlIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgdGV4dHVyZXMgYmVpbmcgdXNlZCBieSB5b3VyIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSN0ZXh0dXJlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IG5ldyBUZXh0dXJlTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIENhY2hlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgQ2FjaGUgTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIGNhY2hpbmcsIGFjY2Vzc2luZyBhbmQgcmVsZWFzaW5nIGV4dGVybmFsIGdhbWUgYXNzZXRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlID0gbmV3IENhY2hlTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIERhdGEgTWFuYWdlclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjcmVnaXN0cnlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBEYXRhTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgSW5wdXQgTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIHRoZSBjYXB0dXJlIG9mIGJyb3dzZXItbGV2ZWwgaW5wdXQgZXZlbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjaW5wdXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0TWFuYWdlcih0aGlzLCB0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBTY2VuZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZywgbW9kaWZ5aW5nIGFuZCB1cGRhdGluZyB0aGUgU2NlbmVzIGluIHlvdXIgZ2FtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBuZXcgU2NlbmVNYW5hZ2VyKHRoaXMsIHRoaXMuY29uZmlnLnNjZW5lQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIERldmljZSBpbnNwZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhpcyBnYW1lLCBzdWNoIGFzIE9TLCBicm93c2VyIHZlbmRvciBhbmQgZmVhdHVyZSBzdXBwb3J0LlxyXG4gICAgICAgICAqIFVzZWQgYnkgdmFyaW91cyBzeXN0ZW1zIHRvIGRldGVybWluZSBjYXBhYmlsaXRpZXMgYW5kIGNvZGUgcGF0aHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNkZXZpY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRldmljZUNvbmZ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZXZpY2UgPSBEZXZpY2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFNjYWxlIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzY2FsaW5nIG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NjYWxlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgU2NhbGVNYW5hZ2VyKHRoaXMsIHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIGJhc2UgU291bmQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBTb3VuZCBNYW5hZ2VyIGlzIGEgZ2xvYmFsIHN5c3RlbSByZXNwb25zaWJsZSBmb3IgdGhlIHBsYXliYWNrIGFuZCB1cGRhdGluZyBvZiBhbGwgYXVkaW8gaW4geW91ciBnYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBkaXNhYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIFNvdW5kIE1hbmFnZXIgaW4geW91ciBidWlsZCBieSB0b2dnbGluZyB0aGUgd2VicGFjayBgRkVBVFVSRV9TT1VORGAgZmxhZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NvdW5kXHJcbiAgICAgICAgICogQHR5cGUgeyhQaGFzZXIuU291bmQuTm9BdWRpb1NvdW5kTWFuYWdlcnxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlcnxQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291bmQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIEZFQVRVUkVfU09VTkQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNvdW5kID0gU291bmRNYW5hZ2VyQ3JlYXRvci5jcmVhdGUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgVGltZSBTdGVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFRpbWUgU3RlcCBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIHNldHRpbmctdXAgYW5kIHJlc3BvbmRpbmcgdG8gdGhlIGJyb3dzZXIgZnJhbWUgZXZlbnRzLCBwcm9jZXNzaW5nXHJcbiAgICAgICAgICogdGhlbSBhbmQgY2FsY3VsYXRpbmcgZGVsdGEgdmFsdWVzLiBJdCB0aGVuIGF1dG9tYXRpY2FsbHkgY2FsbHMgdGhlIGdhbWUgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2xvb3BcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNvcmUuVGltZVN0ZXB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb29wID0gbmV3IFRpbWVTdGVwKHRoaXMsIHRoaXMuY29uZmlnLmZwcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBQbHVnaW4gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBQbHVnaW4gTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gdGhhdCBhbGxvd3MgcGx1Z2lucyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggaXQsIGFuZCBjYW4gdGhlbiBpbnN0YWxsXHJcbiAgICAgICAgICogdGhvc2UgcGx1Z2lucyBpbnRvIFNjZW5lcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3BsdWdpbnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBuZXcgUGx1Z2luTWFuYWdlcih0aGlzLCB0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgUExVR0lOX0ZCSU5TVEFOVClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4uXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgcGx1Z2luIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLFxyXG4gICAgICAgICAgICAgKiBvciB5b3UncmUgdXNpbmcgdGhlIHNwZWNpYWwgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBjdXN0b20gYnVpbGQuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2ZhY2Vib29rXHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW59XHJcbiAgICAgICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMuZmFjZWJvb2sgPSBuZXcgRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4odGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIEdhbWUgcGVuZGluZyBkZXN0cnVjdGlvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZnJhbWU/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNwZW5kaW5nRGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW1vdmUgdGhlIENhbnZhcyBvbmNlIHRoZSBkZXN0cm95IGlzIG92ZXI/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNyZW1vdmVDYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2FudmFzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbW92ZSBldmVyeXRoaW5nIHdoZW4gdGhlIGdhbWUgaXMgZGVzdHJveWVkLlxyXG4gICAgICAgICAqIFlvdSBjYW5ub3QgY3JlYXRlIGEgbmV3IFBoYXNlciBpbnN0YW5jZSBvbiB0aGUgc2FtZSB3ZWIgcGFnZSBhZnRlciBkb2luZyB0aGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjbm9SZXR1cm5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5vUmV0dXJuID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIHdpbmRvdyB0aGUgZ2FtZSBpcyBydW5uaW5nIGluIGN1cnJlbnRseSBoYXZlIGZvY3VzIG9yIG5vdD9cclxuICAgICAgICAgKiBUaGlzIGlzIG1vZGlmaWVkIGJ5IHRoZSBWaXNpYmlsaXR5SGFuZGxlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2hhc0ZvY3VzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgV2FpdCBmb3IgdGhlIERPTSBSZWFkeSBldmVudCwgdGhlbiBjYWxsIGJvb3QuXHJcbiAgICAgICAgRE9NQ29udGVudExvYWRlZCh0aGlzLmJvb3QuYmluZCh0aGlzKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgRE9NIGlzIHJlYWR5LiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIHJlbmRlcmVyLFxyXG4gICAgICogZGlzcGxheWluZyB0aGUgRGVidWcgSGVhZGVyLCBhZGRpbmcgdGhlIGdhbWUgY2FudmFzIHRvIHRoZSBET00gYW5kIGVtaXR0aW5nIHRoZSAnYm9vdCcgZXZlbnQuXHJcbiAgICAgKiBJdCBsaXN0ZW5zIGZvciBhICdyZWFkeScgZXZlbnQgZnJvbSB0aGUgYmFzZSBzeXN0ZW1zIGFuZCBvbmNlIHJlY2VpdmVkIGl0IHdpbGwgY2FsbCBgR2FtZS5zdGFydGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNib290XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNvcmUuRXZlbnRzI0JPT1RcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5UZXh0dXJlcy5FdmVudHMjUkVBRFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghUGx1Z2luQ2FjaGUuaGFzQ29yZSgnRXZlbnRFbWl0dGVyJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Fib3J0aW5nLiBDb3JlIFBsdWdpbnMgbWlzc2luZy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Jvb3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnLnByZUJvb3QodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGUucHJlQm9vdCgpO1xyXG5cclxuICAgICAgICBDcmVhdGVSZW5kZXJlcih0aGlzKTtcclxuXHJcbiAgICAgICAgQ3JlYXRlRE9NQ29udGFpbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICBEZWJ1Z0hlYWRlcih0aGlzKTtcclxuXHJcbiAgICAgICAgQWRkVG9ET00odGhpcy5jYW52YXMsIHRoaXMuY29uZmlnLnBhcmVudCk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgVGV4dHVyZSBNYW5hZ2VyIGhhcyB0byB3YWl0IG9uIGEgY291cGxlIG9mIG5vbi1ibG9ja2luZyBldmVudHMgYmVmb3JlIGl0J3MgZnVsbHkgcmVhZHkuXHJcbiAgICAgICAgLy8gIFNvIGl0IHdpbGwgZW1pdCB0aGlzIGludGVybmFsIGV2ZW50IHdoZW4gZG9uZTpcclxuICAgICAgICB0aGlzLnRleHR1cmVzLm9uY2UoVGV4dHVyZUV2ZW50cy5SRUFEWSwgdGhpcy50ZXh0dXJlc1JlYWR5LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuQk9PVCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgVGV4dHVyZSBNYW5hZ2VyIGhhcyBmaW5pc2hlZCBzZXR0aW5nIHVwIGFuZCBwcmVwYXJpbmcgdGhlXHJcbiAgICAgKiBkZWZhdWx0IHRleHR1cmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjdGV4dHVyZXNSZWFkeVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZSNyZWFkeVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlc1JlYWR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTdGFydCBhbGwgdGhlIG90aGVyIHN5c3RlbXNcclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRUFEWSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBHYW1lLmJvb3Qgb25jZSBhbGwgb2YgdGhlIGdsb2JhbCBzeXN0ZW1zIGhhdmUgZmluaXNoZWQgc2V0dGluZyB0aGVtc2VsdmVzIHVwLlxyXG4gICAgICogQnkgdGhpcyBwb2ludCB0aGUgR2FtZSBpcyBub3cgcmVhZHkgdG8gc3RhcnQgdGhlIG1haW4gbG9vcCBydW5uaW5nLlxyXG4gICAgICogSXQgd2lsbCBhbHNvIGVuYWJsZSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjc3RhcnRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnLnBvc3RCb290KHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcC5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcC5zdGFydCh0aGlzLmhlYWRsZXNzU3RlcC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFZpc2liaWxpdHlIYW5kbGVyKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihFdmVudHMuSElEREVOLCB0aGlzLm9uSGlkZGVuLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLlZJU0lCTEUsIHRoaXMub25WaXNpYmxlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLkJMVVIsIHRoaXMub25CbHVyLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLkZPQ1VTLCB0aGlzLm9uRm9jdXMsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYWluIEdhbWUgU3RlcC4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFRpbWUgU3RlcCwgb25jZSBwZXIgYnJvd3NlciBmcmFtZSAodHlwaWNhbGx5IGFzIGEgcmVzdWx0IG9mXHJcbiAgICAgKiBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgU2V0IFRpbWVvdXQgb24gdmVyeSBvbGQgYnJvd3NlcnMuKVxyXG4gICAgICpcclxuICAgICAqIFRoZSBzdGVwIHdpbGwgdXBkYXRlIHRoZSBnbG9iYWwgbWFuYWdlcnMgZmlyc3QsIHRoZW4gcHJvY2VlZCB0byB1cGRhdGUgZWFjaCBTY2VuZSBpbiB0dXJuLCB2aWEgdGhlIFNjZW5lIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogSXQgd2lsbCB0aGVuIHJlbmRlciBlYWNoIFNjZW5lIGluIHR1cm4sIHZpYSB0aGUgUmVuZGVyZXIuIFRoaXMgcHJvY2VzcyBlbWl0cyBgcHJlcmVuZGVyYCBhbmQgYHBvc3RyZW5kZXJgIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI3N0ZXBcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUFJFX1NURVBfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjU1RFUF9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNQT1NUX1NURVBfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUFJFX1JFTkRFUl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNQT1NUX1JFTkRFUl9FVkVOVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIHN0ZXA6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRGVzdHJveSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLmV2ZW50cztcclxuXHJcbiAgICAgICAgLy8gIEdsb2JhbCBNYW5hZ2VycyBsaWtlIElucHV0IGFuZCBTb3VuZCB1cGRhdGUgaW4gdGhlIHByZXN0ZXBcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBSRV9TVEVQLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGlzIG1vc3RseSBtZWFudCBmb3IgdXNlci1sYW5kIGNvZGUgYW5kIHBsdWdpbnNcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlNURVAsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSB0aGUgU2NlbmUgTWFuYWdlciBhbmQgYWxsIGFjdGl2ZSBTY2VuZXNcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS51cGRhdGUodGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgT3VyIGZpbmFsIGV2ZW50IGJlZm9yZSByZW5kZXJpbmcgc3RhcnRzXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QT1NUX1NURVAsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLy8gIFJ1biB0aGUgUHJlLXJlbmRlciAoY2xlYXJpbmcgdGhlIGNhbnZhcywgc2V0dGluZyBiYWNrZ3JvdW5kIGNvbG9ycywgZXRjKVxyXG5cclxuICAgICAgICByZW5kZXJlci5wcmVSZW5kZXIoKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBSRV9SRU5ERVIsIHJlbmRlcmVyLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgbWFpbiByZW5kZXIgbG9vcC4gSXRlcmF0ZXMgYWxsIFNjZW5lcyBhbmQgYWxsIENhbWVyYXMgaW4gdGhvc2Ugc2NlbmVzLCByZW5kZXJpbmcgdG8gdGhlIHJlbmRlcmVyIGluc3RhbmNlLlxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vICBUaGUgUG9zdC1SZW5kZXIgY2FsbC4gVGlkaWVzIHVwIGxvb3NlIGVuZCwgdGFrZXMgc25hcHNob3RzLCBldGMuXHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnBvc3RSZW5kZXIoKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBmaW5hbCBldmVudCBiZWZvcmUgdGhlIHN0ZXAgcmVwZWF0cy4gWW91ciBsYXN0IGNoYW5jZSB0byBkbyBhbnl0aGluZyB0byB0aGUgY2FudmFzIGJlZm9yZSBpdCBhbGwgc3RhcnRzIGFnYWluLlxyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuUE9TVF9SRU5ERVIsIHJlbmRlcmVyLCB0aW1lLCBkZWx0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIEdhbWUgU3RlcCBmb3IgdGhlIEhFQURMRVNTIHJlbmRlcmVyIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1haW4gR2FtZSBTdGVwLiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVGltZSBTdGVwLCBvbmNlIHBlciBicm93c2VyIGZyYW1lICh0eXBpY2FsbHkgYXMgYSByZXN1bHQgb2ZcclxuICAgICAqIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBTZXQgVGltZW91dCBvbiB2ZXJ5IG9sZCBicm93c2Vycy4pXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHN0ZXAgd2lsbCB1cGRhdGUgdGhlIGdsb2JhbCBtYW5hZ2VycyBmaXJzdCwgdGhlbiBwcm9jZWVkIHRvIHVwZGF0ZSBlYWNoIFNjZW5lIGluIHR1cm4sIHZpYSB0aGUgU2NlbmUgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHByb2Nlc3MgZW1pdHMgYHByZXJlbmRlcmAgYW5kIGBwb3N0cmVuZGVyYCBldmVudHMsIGV2ZW4gdGhvdWdoIG5vdGhpbmcgYWN0dWFsbHkgZGlzcGxheXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNoZWFkbGVzc1N0ZXBcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZSNwcmVyZW5kZXJFdmVudFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lI3Bvc3RyZW5kZXJFdmVudFxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIGhlYWRsZXNzU3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuRGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuZXZlbnRzO1xyXG5cclxuICAgICAgICAvLyAgR2xvYmFsIE1hbmFnZXJzXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QUkVfU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgU2NlbmVzXHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBPU1RfU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgUmVuZGVyXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QUkVfUkVOREVSKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBPU1RfUkVOREVSKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICogVGhpcyB3aWxsIHBhdXNlIHRoZSBtYWluIGxvb3AgYW5kIHRoZW4gZW1pdCBhIHBhdXNlIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjb25IaWRkZW5cclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUEFVU0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkhpZGRlbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvb3AucGF1c2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUEFVU0UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBWaXNpYmlsaXR5IEhhbmRsZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgcmVzdW1lIHRoZSBtYWluIGxvb3AgYW5kIHRoZW4gZW1pdCBhIHJlc3VtZSBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI29uVmlzaWJsZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNSRVNVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblZpc2libGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5sb29wLnJlc3VtZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRVNVTUUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBWaXNpYmlsaXR5IEhhbmRsZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgc2V0IHRoZSBtYWluIGxvb3AgaW50byBhICdibHVycmVkJyBzdGF0ZSwgd2hpY2ggcGF1c2VzIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjb25CbHVyXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25CbHVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb29wLmJsdXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICogVGhpcyB3aWxsIHNldCB0aGUgbWFpbiBsb29wIGludG8gYSAnZm9jdXNlZCcgc3RhdGUsIHdoaWNoIHJlc3VtZXMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNvbkZvY3VzXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25Gb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb29wLmZvY3VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBnYW1lIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gdGhlIGdhbWUgc3RhcnRzIHJ1bm5pbmcsIHRoZSBmcmFtZSBpcyBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBTZXQgVGltZW91dCwgZmlyZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNnZXRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgZ2FtZSBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RnJhbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcC5mcmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIHRoYXQgdGhlIGN1cnJlbnQgZ2FtZSBzdGVwIHN0YXJ0ZWQgYXQsIGFzIGJhc2VkIG9uIGBwZXJmb3JtYW5jZS5ub3dgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjZ2V0VGltZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgZ2FtZSB0aW1lc3RhbXAuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcC5ub3c7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZ3MgdGhpcyBHYW1lIGluc3RhbmNlIGFzIG5lZWRpbmcgdG8gYmUgZGVzdHJveWVkIG9uIHRoZSBfbmV4dCBmcmFtZV8sIG1ha2luZyB0aGlzIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSXQgd2lsbCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IGZyYW1lIGhhcyBjb21wbGV0ZWQgYW5kIHRoZW4gY2FsbCBgcnVuRGVzdHJveWAgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byByZWFjdCB0byB0aGUgZ2FtZXMgZXZlbnR1YWwgZGVzdHJ1Y3Rpb24sIGxpc3RlbiBmb3IgdGhlIGBERVNUUk9ZYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgKipkbyBub3QqKiBuZWVkIHRvIHJ1biBQaGFzZXIgYWdhaW4gb24gdGhlIHNhbWUgd2ViIHBhZ2UgeW91IGNhbiBzZXQgdGhlIGBub1JldHVybmAgYXJndW1lbnQgdG8gYHRydWVgIGFuZCBpdCB3aWxsIGZyZWUtdXBcclxuICAgICAqIG1lbW9yeSBiZWluZyBoZWxkIGJ5IHRoZSBjb3JlIFBoYXNlciBwbHVnaW5zLiBJZiB5b3UgZG8gbmVlZCB0byBjcmVhdGUgYW5vdGhlciBnYW1lIGluc3RhbmNlIG9uIHRoZSBzYW1lIHBhZ2UsIGxlYXZlIHRoaXMgYXMgYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI2Rlc3Ryb3lcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZW1vdmVDYW52YXMgLSBTZXQgdG8gYHRydWVgIGlmIHlvdSB3b3VsZCBsaWtlIHRoZSBwYXJlbnQgY2FudmFzIGVsZW1lbnQgcmVtb3ZlZCBmcm9tIHRoZSBET00sIG9yIGBmYWxzZWAgdG8gbGVhdmUgaXQgaW4gcGxhY2UuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtub1JldHVybj1mYWxzZV0gLSBJZiBgdHJ1ZWAgYWxsIHRoZSBjb3JlIFBoYXNlciBwbHVnaW5zIGFyZSBkZXN0cm95ZWQuIFlvdSBjYW5ub3QgY3JlYXRlIGFub3RoZXIgaW5zdGFuY2Ugb2YgUGhhc2VyIG9uIHRoZSBzYW1lIHdlYiBwYWdlIGlmIHlvdSBkbyB0aGlzLlxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAocmVtb3ZlQ2FudmFzLCBub1JldHVybilcclxuICAgIHtcclxuICAgICAgICBpZiAobm9SZXR1cm4gPT09IHVuZGVmaW5lZCkgeyBub1JldHVybiA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUNhbnZhcyA9IHJlbW92ZUNhbnZhcztcclxuICAgICAgICB0aGlzLm5vUmV0dXJuID0gbm9SZXR1cm47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBQaGFzZXIuR2FtZSBpbnN0YW5jZSwgYWxsIGdsb2JhbCBzeXN0ZW1zLCBhbGwgc3ViLXN5c3RlbXMgYW5kIGFsbCBTY2VuZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNydW5EZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHJ1bkRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuREVTVFJPWSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUNhbnZhcyAmJiB0aGlzLmNhbnZhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHRoaXMuY2FudmFzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbnZhcy5wYXJlbnROb2RlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZG9tQ29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kb21Db250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbUNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvb3AuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZTtcclxuXHJcbi8qKlxyXG4gKiBcIkNvbXB1dGVycyBhcmUgZ29vZCBhdCBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zLCBidXQgbm90IGF0IHJlYWRpbmcgeW91ciBtaW5kLlwiIC0gRG9uYWxkIEtudXRoXHJcbiAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/Game.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/TimeStep.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/core/TimeStep.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar RequestAnimationFrame = __webpack_require__(/*! ../dom/RequestAnimationFrame */ \"./node_modules/phaser/src/dom/RequestAnimationFrame.js\");\r\n\r\n//  Frame Rate config\r\n//      fps: {\r\n//          min: 10,\r\n//          target: 60,\r\n//          forceSetTimeOut: false,\r\n//          deltaHistory: 10,\r\n//          panicMax: 120\r\n//     }\r\n\r\n// http://www.testufo.com/#test=animation-time-graph\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class TimeStep\r\n * @memberof Phaser.Core\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance that owns this Time Step.\r\n * @param {Phaser.Types.Core.FPSConfig} config\r\n */\r\nvar TimeStep = new Class({\r\n\r\n    initialize:\r\n\r\n    function TimeStep (game, config)\r\n    {\r\n        /**\r\n         * A reference to the Phaser.Game instance.\r\n         *\r\n         * @name Phaser.Core.TimeStep#game\r\n         * @type {Phaser.Game}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Core.TimeStep#raf\r\n         * @type {Phaser.DOM.RequestAnimationFrame}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.raf = new RequestAnimationFrame();\r\n\r\n        /**\r\n         * A flag that is set once the TimeStep has started running and toggled when it stops.\r\n         *\r\n         * @name Phaser.Core.TimeStep#started\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.started = false;\r\n\r\n        /**\r\n         * A flag that is set once the TimeStep has started running and toggled when it stops.\r\n         * The difference between this value and `started` is that `running` is toggled when\r\n         * the TimeStep is sent to sleep, where-as `started` remains `true`, only changing if\r\n         * the TimeStep is actually stopped, not just paused.\r\n         *\r\n         * @name Phaser.Core.TimeStep#running\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.running = false;\r\n\r\n        /**\r\n         * The minimum fps rate you want the Time Step to run at.\r\n         *\r\n         * @name Phaser.Core.TimeStep#minFps\r\n         * @type {integer}\r\n         * @default 5\r\n         * @since 3.0.0\r\n         */\r\n        this.minFps = GetValue(config, 'min', 5);\r\n\r\n        /**\r\n         * The target fps rate for the Time Step to run at.\r\n         *\r\n         * Setting this value will not actually change the speed at which the browser runs, that is beyond\r\n         * the control of Phaser. Instead, it allows you to determine performance issues and if the Time Step\r\n         * is spiraling out of control.\r\n         *\r\n         * @name Phaser.Core.TimeStep#targetFps\r\n         * @type {integer}\r\n         * @default 60\r\n         * @since 3.0.0\r\n         */\r\n        this.targetFps = GetValue(config, 'target', 60);\r\n\r\n        /**\r\n         * The minFps value in ms.\r\n         * Defaults to 200ms between frames (i.e. super slow!)\r\n         *\r\n         * @name Phaser.Core.TimeStep#_min\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._min = 1000 / this.minFps;\r\n\r\n        /**\r\n         * The targetFps value in ms.\r\n         * Defaults to 16.66ms between frames (i.e. normal)\r\n         *\r\n         * @name Phaser.Core.TimeStep#_target\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._target = 1000 / this.targetFps;\r\n\r\n        /**\r\n         * An exponential moving average of the frames per second.\r\n         *\r\n         * @name Phaser.Core.TimeStep#actualFps\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 60\r\n         * @since 3.0.0\r\n         */\r\n        this.actualFps = this.targetFps;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Core.TimeStep#nextFpsUpdate\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.nextFpsUpdate = 0;\r\n\r\n        /**\r\n         * The number of frames processed this second.\r\n         *\r\n         * @name Phaser.Core.TimeStep#framesThisSecond\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.framesThisSecond = 0;\r\n\r\n        /**\r\n         * A callback to be invoked each time the Time Step steps.\r\n         *\r\n         * @name Phaser.Core.TimeStep#callback\r\n         * @type {Phaser.Types.Core.TimeStepCallback}\r\n         * @default NOOP\r\n         * @since 3.0.0\r\n         */\r\n        this.callback = NOOP;\r\n\r\n        /**\r\n         * You can force the Time Step to use Set Timeout instead of Request Animation Frame by setting\r\n         * the `forceSetTimeOut` property to `true` in the Game Configuration object. It cannot be changed at run-time.\r\n         *\r\n         * @name Phaser.Core.TimeStep#forceSetTimeOut\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.forceSetTimeOut = GetValue(config, 'forceSetTimeOut', false);\r\n\r\n        /**\r\n         * The time, calculated at the start of the current step, as smoothed by the delta value.\r\n         *\r\n         * @name Phaser.Core.TimeStep#time\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.time = 0;\r\n\r\n        /**\r\n         * The time at which the game started running. This value is adjusted if the game is then\r\n         * paused and resumes.\r\n         *\r\n         * @name Phaser.Core.TimeStep#startTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.startTime = 0;\r\n\r\n        /**\r\n         * The time, as returned by `performance.now` of the previous step.\r\n         *\r\n         * @name Phaser.Core.TimeStep#lastTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.lastTime = 0;\r\n\r\n        /**\r\n         * The current frame the game is on. This counter is incremented once every game step, regardless of how much\r\n         * time has passed and is unaffected by delta smoothing.\r\n         *\r\n         * @name Phaser.Core.TimeStep#frame\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = 0;\r\n\r\n        /**\r\n         * Is the browser currently considered in focus by the Page Visibility API?\r\n         * This value is set in the `blur` method, which is called automatically by the Game instance.\r\n         *\r\n         * @name Phaser.Core.TimeStep#inFocus\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.inFocus = true;\r\n\r\n        /**\r\n         * The timestamp at which the game became paused, as determined by the Page Visibility API.\r\n         *\r\n         * @name Phaser.Core.TimeStep#_pauseTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._pauseTime = 0;\r\n\r\n        /**\r\n         * An internal counter to allow for the browser 'cooling down' after coming back into focus.\r\n         *\r\n         * @name Phaser.Core.TimeStep#_coolDown\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._coolDown = 0;\r\n\r\n        /**\r\n         * The delta time, in ms, since the last game step. This is a clamped and smoothed average value.\r\n         *\r\n         * @name Phaser.Core.TimeStep#delta\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.delta = 0;\r\n\r\n        /**\r\n         * Internal index of the delta history position.\r\n         *\r\n         * @name Phaser.Core.TimeStep#deltaIndex\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.deltaIndex = 0;\r\n\r\n        /**\r\n         * Internal array holding the previous delta values, used for delta smoothing.\r\n         *\r\n         * @name Phaser.Core.TimeStep#deltaHistory\r\n         * @type {integer[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.deltaHistory = [];\r\n\r\n        /**\r\n         * The maximum number of delta values that are retained in order to calculate a smoothed moving average.\r\n         * \r\n         * This can be changed in the Game Config via the `fps.deltaHistory` property. The default is 10.\r\n         *\r\n         * @name Phaser.Core.TimeStep#deltaSmoothingMax\r\n         * @type {integer}\r\n         * @default 10\r\n         * @since 3.0.0\r\n         */\r\n        this.deltaSmoothingMax = GetValue(config, 'deltaHistory', 10);\r\n\r\n        /**\r\n         * The number of frames that the cooldown is set to after the browser panics over the FPS rate, usually\r\n         * as a result of switching tabs and regaining focus.\r\n         * \r\n         * This can be changed in the Game Config via the `fps.panicMax` property. The default is 120.\r\n         *\r\n         * @name Phaser.Core.TimeStep#panicMax\r\n         * @type {integer}\r\n         * @default 120\r\n         * @since 3.0.0\r\n         */\r\n        this.panicMax = GetValue(config, 'panicMax', 120);\r\n\r\n        /**\r\n         * The actual elapsed time in ms between one update and the next.\r\n         * \r\n         * Unlike with `delta`, no smoothing, capping, or averaging is applied to this value.\r\n         * So please be careful when using this value in math calculations.\r\n         *\r\n         * @name Phaser.Core.TimeStep#rawDelta\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.rawDelta = 0;\r\n\r\n        /**\r\n         * The time, as returned by `performance.now` at the very start of the current step.\r\n         * This can differ from the `time` value in that it isn't calculated based on the delta value.\r\n         *\r\n         * @name Phaser.Core.TimeStep#now\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.18.0\r\n         */\r\n        this.now = 0;\r\n    },\r\n\r\n    /**\r\n     * Called by the Game instance when the DOM window.onBlur event triggers.\r\n     *\r\n     * @method Phaser.Core.TimeStep#blur\r\n     * @since 3.0.0\r\n     */\r\n    blur: function ()\r\n    {\r\n        this.inFocus = false;\r\n    },\r\n\r\n    /**\r\n     * Called by the Game instance when the DOM window.onFocus event triggers.\r\n     *\r\n     * @method Phaser.Core.TimeStep#focus\r\n     * @since 3.0.0\r\n     */\r\n    focus: function ()\r\n    {\r\n        this.inFocus = true;\r\n\r\n        this.resetDelta();\r\n    },\r\n\r\n    /**\r\n     * Called when the visibility API says the game is 'hidden' (tab switch out of view, etc)\r\n     *\r\n     * @method Phaser.Core.TimeStep#pause\r\n     * @since 3.0.0\r\n     */\r\n    pause: function ()\r\n    {\r\n        this._pauseTime = window.performance.now();\r\n    },\r\n\r\n    /**\r\n     * Called when the visibility API says the game is 'visible' again (tab switch back into view, etc)\r\n     *\r\n     * @method Phaser.Core.TimeStep#resume\r\n     * @since 3.0.0\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.resetDelta();\r\n\r\n        this.startTime += this.time - this._pauseTime;\r\n    },\r\n\r\n    /**\r\n     * Resets the time, lastTime, fps averages and delta history.\r\n     * Called automatically when a browser sleeps them resumes.\r\n     *\r\n     * @method Phaser.Core.TimeStep#resetDelta\r\n     * @since 3.0.0\r\n     */\r\n    resetDelta: function ()\r\n    {\r\n        var now = window.performance.now();\r\n\r\n        this.time = now;\r\n        this.lastTime = now;\r\n        this.nextFpsUpdate = now + 1000;\r\n        this.framesThisSecond = 0;\r\n\r\n        //  Pre-populate smoothing array\r\n\r\n        for (var i = 0; i < this.deltaSmoothingMax; i++)\r\n        {\r\n            this.deltaHistory[i] = Math.min(this._target, this.deltaHistory[i]);\r\n        }\r\n\r\n        this.delta = 0;\r\n        this.deltaIndex = 0;\r\n\r\n        this._coolDown = this.panicMax;\r\n    },\r\n\r\n    /**\r\n     * Starts the Time Step running, if it is not already doing so.\r\n     * Called automatically by the Game Boot process.\r\n     *\r\n     * @method Phaser.Core.TimeStep#start\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Core.TimeStepCallback} callback - The callback to be invoked each time the Time Step steps.\r\n     */\r\n    start: function (callback)\r\n    {\r\n        if (this.started)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.started = true;\r\n        this.running = true;\r\n\r\n        for (var i = 0; i < this.deltaSmoothingMax; i++)\r\n        {\r\n            this.deltaHistory[i] = this._target;\r\n        }\r\n\r\n        this.resetDelta();\r\n\r\n        this.startTime = window.performance.now();\r\n\r\n        this.callback = callback;\r\n\r\n        this.raf.start(this.step.bind(this), this.forceSetTimeOut, this._target);\r\n    },\r\n\r\n    /**\r\n     * The main step method. This is called each time the browser updates, either by Request Animation Frame,\r\n     * or by Set Timeout. It is responsible for calculating the delta values, frame totals, cool down history and more.\r\n     * You generally should never call this method directly.\r\n     *\r\n     * @method Phaser.Core.TimeStep#step\r\n     * @since 3.0.0\r\n     */\r\n    step: function ()\r\n    {\r\n        //  Because the timestamp passed in from raf represents the beginning of the main thread frame that we’re currently in,\r\n        //  not the actual time now. As we want to compare this time value against Event timeStamps and the like, we need a\r\n        //  more accurate one:\r\n\r\n        var time = window.performance.now();\r\n\r\n        this.now = time;\r\n\r\n        var before = time - this.lastTime;\r\n\r\n        if (before < 0)\r\n        {\r\n            //  Because, Chrome.\r\n            before = 0;\r\n        }\r\n\r\n        this.rawDelta = before;\r\n\r\n        var idx = this.deltaIndex;\r\n        var history = this.deltaHistory;\r\n        var max = this.deltaSmoothingMax;\r\n\r\n        //  delta time (time is in ms)\r\n        var dt = before;\r\n\r\n        //  When a browser switches tab, then comes back again, it takes around 10 frames before\r\n        //  the delta time settles down so we employ a 'cooling down' period before we start\r\n        //  trusting the delta values again, to avoid spikes flooding through our delta average\r\n\r\n        if (this._coolDown > 0 || !this.inFocus)\r\n        {\r\n            this._coolDown--;\r\n\r\n            dt = Math.min(dt, this._target);\r\n        }\r\n\r\n        if (dt > this._min)\r\n        {\r\n            //  Probably super bad start time or browser tab context loss,\r\n            //  so use the last 'sane' dt value\r\n\r\n            dt = history[idx];\r\n\r\n            //  Clamp delta to min (in case history has become corrupted somehow)\r\n            dt = Math.min(dt, this._min);\r\n        }\r\n\r\n        //  Smooth out the delta over the previous X frames\r\n\r\n        //  add the delta to the smoothing array\r\n        history[idx] = dt;\r\n\r\n        //  adjusts the delta history array index based on the smoothing count\r\n        //  this stops the array growing beyond the size of deltaSmoothingMax\r\n        this.deltaIndex++;\r\n\r\n        if (this.deltaIndex > max)\r\n        {\r\n            this.deltaIndex = 0;\r\n        }\r\n\r\n        //  Delta Average\r\n        var avg = 0;\r\n\r\n        //  Loop the history array, adding the delta values together\r\n\r\n        for (var i = 0; i < max; i++)\r\n        {\r\n            avg += history[i];\r\n        }\r\n\r\n        //  Then divide by the array length to get the average delta\r\n        avg /= max;\r\n\r\n        //  Set as the world delta value\r\n        this.delta = avg;\r\n\r\n        //  Real-world timer advance\r\n        this.time += this.rawDelta;\r\n\r\n        // Update the estimate of the frame rate, `fps`. Every second, the number\r\n        // of frames that occurred in that second are included in an exponential\r\n        // moving average of all frames per second, with an alpha of 0.25. This\r\n        // means that more recent seconds affect the estimated frame rate more than\r\n        // older seconds.\r\n        //\r\n        // When a browser window is NOT minimized, but is covered up (i.e. you're using\r\n        // another app which has spawned a window over the top of the browser), then it\r\n        // will start to throttle the raf callback time. It waits for a while, and then\r\n        // starts to drop the frame rate at 1 frame per second until it's down to just over 1fps.\r\n        // So if the game was running at 60fps, and the player opens a new window, then\r\n        // after 60 seconds (+ the 'buffer time') it'll be down to 1fps, so rafin'g at 1Hz.\r\n        //\r\n        // When they make the game visible again, the frame rate is increased at a rate of\r\n        // approx. 8fps, back up to 60fps (or the max it can obtain)\r\n        //\r\n        // There is no easy way to determine if this drop in frame rate is because the\r\n        // browser is throttling raf, or because the game is struggling with performance\r\n        // because you're asking it to do too much on the device.\r\n\r\n        if (time > this.nextFpsUpdate)\r\n        {\r\n            //  Compute the new exponential moving average with an alpha of 0.25.\r\n            this.actualFps = 0.25 * this.framesThisSecond + 0.75 * this.actualFps;\r\n            this.nextFpsUpdate = time + 1000;\r\n            this.framesThisSecond = 0;\r\n        }\r\n\r\n        this.framesThisSecond++;\r\n\r\n        //  Interpolation - how far between what is expected and where we are?\r\n        var interpolation = avg / this._target;\r\n\r\n        this.callback(time, avg, interpolation);\r\n\r\n        //  Shift time value over\r\n        this.lastTime = time;\r\n\r\n        this.frame++;\r\n    },\r\n\r\n    /**\r\n     * Manually calls `TimeStep.step`.\r\n     *\r\n     * @method Phaser.Core.TimeStep#tick\r\n     * @since 3.0.0\r\n     */\r\n    tick: function ()\r\n    {\r\n        this.step();\r\n    },\r\n\r\n    /**\r\n     * Sends the TimeStep to sleep, stopping Request Animation Frame (or SetTimeout) and toggling the `running` flag to false.\r\n     *\r\n     * @method Phaser.Core.TimeStep#sleep\r\n     * @since 3.0.0\r\n     */\r\n    sleep: function ()\r\n    {\r\n        if (this.running)\r\n        {\r\n            this.raf.stop();\r\n\r\n            this.running = false;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Wakes-up the TimeStep, restarting Request Animation Frame (or SetTimeout) and toggling the `running` flag to true.\r\n     * The `seamless` argument controls if the wake-up should adjust the start time or not.\r\n     *\r\n     * @method Phaser.Core.TimeStep#wake\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [seamless=false] - Adjust the startTime based on the lastTime values.\r\n     */\r\n    wake: function (seamless)\r\n    {\r\n        if (this.running)\r\n        {\r\n            this.sleep();\r\n        }\r\n        else if (seamless)\r\n        {\r\n            this.startTime += -this.lastTime + (this.lastTime + window.performance.now());\r\n        }\r\n\r\n        this.raf.start(this.step.bind(this), this.useRAF);\r\n\r\n        this.running = true;\r\n\r\n        this.step();\r\n    },\r\n\r\n    /**\r\n     * Gets the duration which the game has been running, in seconds.\r\n     *\r\n     * @method Phaser.Core.TimeStep#getDuration\r\n     * @since 3.17.0\r\n     *\r\n     * @return {number} The duration in seconds.\r\n     */\r\n    getDuration: function ()\r\n    {\r\n        return Math.round(this.lastTime - this.startTime) / 1000;\r\n    },\r\n\r\n    /**\r\n     * Gets the duration which the game has been running, in ms.\r\n     *\r\n     * @method Phaser.Core.TimeStep#getDurationMS\r\n     * @since 3.17.0\r\n     *\r\n     * @return {number} The duration in ms.\r\n     */\r\n    getDurationMS: function ()\r\n    {\r\n        return Math.round(this.lastTime - this.startTime);\r\n    },\r\n\r\n    /**\r\n     * Stops the TimeStep running.\r\n     *\r\n     * @method Phaser.Core.TimeStep#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Core.TimeStep} The TimeStep object.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.running = false;\r\n        this.started = false;\r\n\r\n        this.raf.stop();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Destroys the TimeStep. This will stop Request Animation Frame, stop the step, clear the callbacks and null\r\n     * any objects.\r\n     *\r\n     * @method Phaser.Core.TimeStep#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.stop();\r\n\r\n        this.callback = NOOP;\r\n\r\n        this.raf = null;\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TimeStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL1RpbWVTdGVwLmpzP2ZkZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxXQUFXLG1CQUFPLENBQUMsOERBQWU7QUFDbEMsNEJBQTRCLG1CQUFPLENBQUMsNEZBQThCOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLDRCQUE0QjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qiw0QkFBNEI7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvVGltZVN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJlcXVpcmUoJy4uL2RvbS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcclxuXHJcbi8vICBGcmFtZSBSYXRlIGNvbmZpZ1xyXG4vLyAgICAgIGZwczoge1xyXG4vLyAgICAgICAgICBtaW46IDEwLFxyXG4vLyAgICAgICAgICB0YXJnZXQ6IDYwLFxyXG4vLyAgICAgICAgICBmb3JjZVNldFRpbWVPdXQ6IGZhbHNlLFxyXG4vLyAgICAgICAgICBkZWx0YUhpc3Rvcnk6IDEwLFxyXG4vLyAgICAgICAgICBwYW5pY01heDogMTIwXHJcbi8vICAgICB9XHJcblxyXG4vLyBodHRwOi8vd3d3LnRlc3R1Zm8uY29tLyN0ZXN0PWFuaW1hdGlvbi10aW1lLWdyYXBoXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBUaW1lU3RlcFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNvcmVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlIHRoYXQgb3ducyB0aGlzIFRpbWUgU3RlcC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5GUFNDb25maWd9IGNvbmZpZ1xyXG4gKi9cclxudmFyIFRpbWVTdGVwID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRpbWVTdGVwIChnYW1lLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNyYWZcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyB0aGF0IGlzIHNldCBvbmNlIHRoZSBUaW1lU3RlcCBoYXMgc3RhcnRlZCBydW5uaW5nIGFuZCB0b2dnbGVkIHdoZW4gaXQgc3RvcHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNzdGFydGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgaXMgc2V0IG9uY2UgdGhlIFRpbWVTdGVwIGhhcyBzdGFydGVkIHJ1bm5pbmcgYW5kIHRvZ2dsZWQgd2hlbiBpdCBzdG9wcy5cclxuICAgICAgICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgdmFsdWUgYW5kIGBzdGFydGVkYCBpcyB0aGF0IGBydW5uaW5nYCBpcyB0b2dnbGVkIHdoZW5cclxuICAgICAgICAgKiB0aGUgVGltZVN0ZXAgaXMgc2VudCB0byBzbGVlcCwgd2hlcmUtYXMgYHN0YXJ0ZWRgIHJlbWFpbnMgYHRydWVgLCBvbmx5IGNoYW5naW5nIGlmXHJcbiAgICAgICAgICogdGhlIFRpbWVTdGVwIGlzIGFjdHVhbGx5IHN0b3BwZWQsIG5vdCBqdXN0IHBhdXNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI3J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWluaW11bSBmcHMgcmF0ZSB5b3Ugd2FudCB0aGUgVGltZSBTdGVwIHRvIHJ1biBhdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI21pbkZwc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pbkZwcyA9IEdldFZhbHVlKGNvbmZpZywgJ21pbicsIDUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGFyZ2V0IGZwcyByYXRlIGZvciB0aGUgVGltZSBTdGVwIHRvIHJ1biBhdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBhY3R1YWxseSBjaGFuZ2UgdGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBicm93c2VyIHJ1bnMsIHRoYXQgaXMgYmV5b25kXHJcbiAgICAgICAgICogdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBJbnN0ZWFkLCBpdCBhbGxvd3MgeW91IHRvIGRldGVybWluZSBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIGlmIHRoZSBUaW1lIFN0ZXBcclxuICAgICAgICAgKiBpcyBzcGlyYWxpbmcgb3V0IG9mIGNvbnRyb2wuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCN0YXJnZXRGcHNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCA2MFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0RnBzID0gR2V0VmFsdWUoY29uZmlnLCAndGFyZ2V0JywgNjApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWluRnBzIHZhbHVlIGluIG1zLlxyXG4gICAgICAgICAqIERlZmF1bHRzIHRvIDIwMG1zIGJldHdlZW4gZnJhbWVzIChpLmUuIHN1cGVyIHNsb3chKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjX21pblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9taW4gPSAxMDAwIC8gdGhpcy5taW5GcHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0YXJnZXRGcHMgdmFsdWUgaW4gbXMuXHJcbiAgICAgICAgICogRGVmYXVsdHMgdG8gMTYuNjZtcyBiZXR3ZWVuIGZyYW1lcyAoaS5lLiBub3JtYWwpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNfdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IDEwMDAgLyB0aGlzLnRhcmdldEZwcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2Ugb2YgdGhlIGZyYW1lcyBwZXIgc2Vjb25kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjYWN0dWFsRnBzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgNjBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdHVhbEZwcyA9IHRoaXMudGFyZ2V0RnBzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNuZXh0RnBzVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmV4dEZwc1VwZGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHByb2Nlc3NlZCB0aGlzIHNlY29uZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2ZyYW1lc1RoaXNTZWNvbmRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZXNUaGlzU2Vjb25kID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggdGltZSB0aGUgVGltZSBTdGVwIHN0ZXBzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjY2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkNvcmUuVGltZVN0ZXBDYWxsYmFja31cclxuICAgICAgICAgKiBAZGVmYXVsdCBOT09QXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFlvdSBjYW4gZm9yY2UgdGhlIFRpbWUgU3RlcCB0byB1c2UgU2V0IFRpbWVvdXQgaW5zdGVhZCBvZiBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBieSBzZXR0aW5nXHJcbiAgICAgICAgICogdGhlIGBmb3JjZVNldFRpbWVPdXRgIHByb3BlcnR5IHRvIGB0cnVlYCBpbiB0aGUgR2FtZSBDb25maWd1cmF0aW9uIG9iamVjdC4gSXQgY2Fubm90IGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNmb3JjZVNldFRpbWVPdXRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9yY2VTZXRUaW1lT3V0ID0gR2V0VmFsdWUoY29uZmlnLCAnZm9yY2VTZXRUaW1lT3V0JywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSwgY2FsY3VsYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc3RlcCwgYXMgc21vb3RoZWQgYnkgdGhlIGRlbHRhIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjdGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBnYW1lIHN0YXJ0ZWQgcnVubmluZy4gVGhpcyB2YWx1ZSBpcyBhZGp1c3RlZCBpZiB0aGUgZ2FtZSBpcyB0aGVuXHJcbiAgICAgICAgICogcGF1c2VkIGFuZCByZXN1bWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RhcnRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSwgYXMgcmV0dXJuZWQgYnkgYHBlcmZvcm1hbmNlLm5vd2Agb2YgdGhlIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNsYXN0VGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBmcmFtZSB0aGUgZ2FtZSBpcyBvbi4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIG9uY2UgZXZlcnkgZ2FtZSBzdGVwLCByZWdhcmRsZXNzIG9mIGhvdyBtdWNoXHJcbiAgICAgICAgICogdGltZSBoYXMgcGFzc2VkIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IGRlbHRhIHNtb290aGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgYnJvd3NlciBjdXJyZW50bHkgY29uc2lkZXJlZCBpbiBmb2N1cyBieSB0aGUgUGFnZSBWaXNpYmlsaXR5IEFQST9cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHNldCBpbiB0aGUgYGJsdXJgIG1ldGhvZCwgd2hpY2ggaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNpbkZvY3VzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5Gb2N1cyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lc3RhbXAgYXQgd2hpY2ggdGhlIGdhbWUgYmVjYW1lIHBhdXNlZCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgUGFnZSBWaXNpYmlsaXR5IEFQSS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI19wYXVzZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BhdXNlVGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVybmFsIGNvdW50ZXIgdG8gYWxsb3cgZm9yIHRoZSBicm93c2VyICdjb29saW5nIGRvd24nIGFmdGVyIGNvbWluZyBiYWNrIGludG8gZm9jdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNfY29vbERvd25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jb29sRG93biA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgc2luY2UgdGhlIGxhc3QgZ2FtZSBzdGVwLiBUaGlzIGlzIGEgY2xhbXBlZCBhbmQgc21vb3RoZWQgYXZlcmFnZSB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2RlbHRhXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBpbmRleCBvZiB0aGUgZGVsdGEgaGlzdG9yeSBwb3NpdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2RlbHRhSW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YUluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgYXJyYXkgaG9sZGluZyB0aGUgcHJldmlvdXMgZGVsdGEgdmFsdWVzLCB1c2VkIGZvciBkZWx0YSBzbW9vdGhpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNkZWx0YUhpc3RvcnlcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcltdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGFIaXN0b3J5ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWx0YSB2YWx1ZXMgdGhhdCBhcmUgcmV0YWluZWQgaW4gb3JkZXIgdG8gY2FsY3VsYXRlIGEgc21vb3RoZWQgbW92aW5nIGF2ZXJhZ2UuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgY2hhbmdlZCBpbiB0aGUgR2FtZSBDb25maWcgdmlhIHRoZSBgZnBzLmRlbHRhSGlzdG9yeWAgcHJvcGVydHkuIFRoZSBkZWZhdWx0IGlzIDEwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZGVsdGFTbW9vdGhpbmdNYXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGFTbW9vdGhpbmdNYXggPSBHZXRWYWx1ZShjb25maWcsICdkZWx0YUhpc3RvcnknLCAxMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgdGhlIGNvb2xkb3duIGlzIHNldCB0byBhZnRlciB0aGUgYnJvd3NlciBwYW5pY3Mgb3ZlciB0aGUgRlBTIHJhdGUsIHVzdWFsbHlcclxuICAgICAgICAgKiBhcyBhIHJlc3VsdCBvZiBzd2l0Y2hpbmcgdGFicyBhbmQgcmVnYWluaW5nIGZvY3VzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgY2FuIGJlIGNoYW5nZWQgaW4gdGhlIEdhbWUgQ29uZmlnIHZpYSB0aGUgYGZwcy5wYW5pY01heGAgcHJvcGVydHkuIFRoZSBkZWZhdWx0IGlzIDEyMC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI3BhbmljTWF4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTIwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYW5pY01heCA9IEdldFZhbHVlKGNvbmZpZywgJ3BhbmljTWF4JywgMTIwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFjdHVhbCBlbGFwc2VkIHRpbWUgaW4gbXMgYmV0d2VlbiBvbmUgdXBkYXRlIGFuZCB0aGUgbmV4dC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBVbmxpa2Ugd2l0aCBgZGVsdGFgLCBubyBzbW9vdGhpbmcsIGNhcHBpbmcsIG9yIGF2ZXJhZ2luZyBpcyBhcHBsaWVkIHRvIHRoaXMgdmFsdWUuXHJcbiAgICAgICAgICogU28gcGxlYXNlIGJlIGNhcmVmdWwgd2hlbiB1c2luZyB0aGlzIHZhbHVlIGluIG1hdGggY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcmF3RGVsdGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJhd0RlbHRhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUsIGFzIHJldHVybmVkIGJ5IGBwZXJmb3JtYW5jZS5ub3dgIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgICAgICogVGhpcyBjYW4gZGlmZmVyIGZyb20gdGhlIGB0aW1lYCB2YWx1ZSBpbiB0aGF0IGl0IGlzbid0IGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGRlbHRhIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjbm93XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubm93ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIEdhbWUgaW5zdGFuY2Ugd2hlbiB0aGUgRE9NIHdpbmRvdy5vbkJsdXIgZXZlbnQgdHJpZ2dlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNibHVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYmx1cjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmluRm9jdXMgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIEdhbWUgaW5zdGFuY2Ugd2hlbiB0aGUgRE9NIHdpbmRvdy5vbkZvY3VzIGV2ZW50IHRyaWdnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZm9jdXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBmb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmluRm9jdXMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0RGVsdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlzaWJpbGl0eSBBUEkgc2F5cyB0aGUgZ2FtZSBpcyAnaGlkZGVuJyAodGFiIHN3aXRjaCBvdXQgb2YgdmlldywgZXRjKVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wYXVzZVRpbWUgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpc2liaWxpdHkgQVBJIHNheXMgdGhlIGdhbWUgaXMgJ3Zpc2libGUnIGFnYWluICh0YWIgc3dpdGNoIGJhY2sgaW50byB2aWV3LCBldGMpXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldERlbHRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lICs9IHRoaXMudGltZSAtIHRoaXMuX3BhdXNlVGltZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHRpbWUsIGxhc3RUaW1lLCBmcHMgYXZlcmFnZXMgYW5kIGRlbHRhIGhpc3RvcnkuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGEgYnJvd3NlciBzbGVlcHMgdGhlbSByZXN1bWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcmVzZXREZWx0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RGVsdGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5vdyA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgdGhpcy50aW1lID0gbm93O1xyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBub3c7XHJcbiAgICAgICAgdGhpcy5uZXh0RnBzVXBkYXRlID0gbm93ICsgMTAwMDtcclxuICAgICAgICB0aGlzLmZyYW1lc1RoaXNTZWNvbmQgPSAwO1xyXG5cclxuICAgICAgICAvLyAgUHJlLXBvcHVsYXRlIHNtb290aGluZyBhcnJheVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVsdGFTbW9vdGhpbmdNYXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsdGFIaXN0b3J5W2ldID0gTWF0aC5taW4odGhpcy5fdGFyZ2V0LCB0aGlzLmRlbHRhSGlzdG9yeVtpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRlbHRhID0gMDtcclxuICAgICAgICB0aGlzLmRlbHRhSW5kZXggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9jb29sRG93biA9IHRoaXMucGFuaWNNYXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBUaW1lIFN0ZXAgcnVubmluZywgaWYgaXQgaXMgbm90IGFscmVhZHkgZG9pbmcgc28uXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZSBCb290IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNzdGFydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5UaW1lU3RlcENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggdGltZSB0aGUgVGltZSBTdGVwIHN0ZXBzLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRlbHRhU21vb3RoaW5nTWF4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlbHRhSGlzdG9yeVtpXSA9IHRoaXMuX3RhcmdldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXREZWx0YSgpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICB0aGlzLnJhZi5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSwgdGhpcy5mb3JjZVNldFRpbWVPdXQsIHRoaXMuX3RhcmdldCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gc3RlcCBtZXRob2QuIFRoaXMgaXMgY2FsbGVkIGVhY2ggdGltZSB0aGUgYnJvd3NlciB1cGRhdGVzLCBlaXRoZXIgYnkgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsXHJcbiAgICAgKiBvciBieSBTZXQgVGltZW91dC4gSXQgaXMgcmVzcG9uc2libGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBkZWx0YSB2YWx1ZXMsIGZyYW1lIHRvdGFscywgY29vbCBkb3duIGhpc3RvcnkgYW5kIG1vcmUuXHJcbiAgICAgKiBZb3UgZ2VuZXJhbGx5IHNob3VsZCBuZXZlciBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RlcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0ZXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJlY2F1c2UgdGhlIHRpbWVzdGFtcCBwYXNzZWQgaW4gZnJvbSByYWYgcmVwcmVzZW50cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIHRocmVhZCBmcmFtZSB0aGF0IHdl4oCZcmUgY3VycmVudGx5IGluLFxyXG4gICAgICAgIC8vICBub3QgdGhlIGFjdHVhbCB0aW1lIG5vdy4gQXMgd2Ugd2FudCB0byBjb21wYXJlIHRoaXMgdGltZSB2YWx1ZSBhZ2FpbnN0IEV2ZW50IHRpbWVTdGFtcHMgYW5kIHRoZSBsaWtlLCB3ZSBuZWVkIGFcclxuICAgICAgICAvLyAgbW9yZSBhY2N1cmF0ZSBvbmU6XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLm5vdyA9IHRpbWU7XHJcblxyXG4gICAgICAgIHZhciBiZWZvcmUgPSB0aW1lIC0gdGhpcy5sYXN0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKGJlZm9yZSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSwgQ2hyb21lLlxyXG4gICAgICAgICAgICBiZWZvcmUgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yYXdEZWx0YSA9IGJlZm9yZTtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGVsdGFJbmRleDtcclxuICAgICAgICB2YXIgaGlzdG9yeSA9IHRoaXMuZGVsdGFIaXN0b3J5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLmRlbHRhU21vb3RoaW5nTWF4O1xyXG5cclxuICAgICAgICAvLyAgZGVsdGEgdGltZSAodGltZSBpcyBpbiBtcylcclxuICAgICAgICB2YXIgZHQgPSBiZWZvcmU7XHJcblxyXG4gICAgICAgIC8vICBXaGVuIGEgYnJvd3NlciBzd2l0Y2hlcyB0YWIsIHRoZW4gY29tZXMgYmFjayBhZ2FpbiwgaXQgdGFrZXMgYXJvdW5kIDEwIGZyYW1lcyBiZWZvcmVcclxuICAgICAgICAvLyAgdGhlIGRlbHRhIHRpbWUgc2V0dGxlcyBkb3duIHNvIHdlIGVtcGxveSBhICdjb29saW5nIGRvd24nIHBlcmlvZCBiZWZvcmUgd2Ugc3RhcnRcclxuICAgICAgICAvLyAgdHJ1c3RpbmcgdGhlIGRlbHRhIHZhbHVlcyBhZ2FpbiwgdG8gYXZvaWQgc3Bpa2VzIGZsb29kaW5nIHRocm91Z2ggb3VyIGRlbHRhIGF2ZXJhZ2VcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2Nvb2xEb3duID4gMCB8fCAhdGhpcy5pbkZvY3VzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29vbERvd24tLTtcclxuXHJcbiAgICAgICAgICAgIGR0ID0gTWF0aC5taW4oZHQsIHRoaXMuX3RhcmdldCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZHQgPiB0aGlzLl9taW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUHJvYmFibHkgc3VwZXIgYmFkIHN0YXJ0IHRpbWUgb3IgYnJvd3NlciB0YWIgY29udGV4dCBsb3NzLFxyXG4gICAgICAgICAgICAvLyAgc28gdXNlIHRoZSBsYXN0ICdzYW5lJyBkdCB2YWx1ZVxyXG5cclxuICAgICAgICAgICAgZHQgPSBoaXN0b3J5W2lkeF07XHJcblxyXG4gICAgICAgICAgICAvLyAgQ2xhbXAgZGVsdGEgdG8gbWluIChpbiBjYXNlIGhpc3RvcnkgaGFzIGJlY29tZSBjb3JydXB0ZWQgc29tZWhvdylcclxuICAgICAgICAgICAgZHQgPSBNYXRoLm1pbihkdCwgdGhpcy5fbWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTbW9vdGggb3V0IHRoZSBkZWx0YSBvdmVyIHRoZSBwcmV2aW91cyBYIGZyYW1lc1xyXG5cclxuICAgICAgICAvLyAgYWRkIHRoZSBkZWx0YSB0byB0aGUgc21vb3RoaW5nIGFycmF5XHJcbiAgICAgICAgaGlzdG9yeVtpZHhdID0gZHQ7XHJcblxyXG4gICAgICAgIC8vICBhZGp1c3RzIHRoZSBkZWx0YSBoaXN0b3J5IGFycmF5IGluZGV4IGJhc2VkIG9uIHRoZSBzbW9vdGhpbmcgY291bnRcclxuICAgICAgICAvLyAgdGhpcyBzdG9wcyB0aGUgYXJyYXkgZ3Jvd2luZyBiZXlvbmQgdGhlIHNpemUgb2YgZGVsdGFTbW9vdGhpbmdNYXhcclxuICAgICAgICB0aGlzLmRlbHRhSW5kZXgrKztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVsdGFJbmRleCA+IG1heClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsdGFJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgRGVsdGEgQXZlcmFnZVxyXG4gICAgICAgIHZhciBhdmcgPSAwO1xyXG5cclxuICAgICAgICAvLyAgTG9vcCB0aGUgaGlzdG9yeSBhcnJheSwgYWRkaW5nIHRoZSBkZWx0YSB2YWx1ZXMgdG9nZXRoZXJcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGF2ZyArPSBoaXN0b3J5W2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFRoZW4gZGl2aWRlIGJ5IHRoZSBhcnJheSBsZW5ndGggdG8gZ2V0IHRoZSBhdmVyYWdlIGRlbHRhXHJcbiAgICAgICAgYXZnIC89IG1heDtcclxuXHJcbiAgICAgICAgLy8gIFNldCBhcyB0aGUgd29ybGQgZGVsdGEgdmFsdWVcclxuICAgICAgICB0aGlzLmRlbHRhID0gYXZnO1xyXG5cclxuICAgICAgICAvLyAgUmVhbC13b3JsZCB0aW1lciBhZHZhbmNlXHJcbiAgICAgICAgdGhpcy50aW1lICs9IHRoaXMucmF3RGVsdGE7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZXN0aW1hdGUgb2YgdGhlIGZyYW1lIHJhdGUsIGBmcHNgLiBFdmVyeSBzZWNvbmQsIHRoZSBudW1iZXJcclxuICAgICAgICAvLyBvZiBmcmFtZXMgdGhhdCBvY2N1cnJlZCBpbiB0aGF0IHNlY29uZCBhcmUgaW5jbHVkZWQgaW4gYW4gZXhwb25lbnRpYWxcclxuICAgICAgICAvLyBtb3ZpbmcgYXZlcmFnZSBvZiBhbGwgZnJhbWVzIHBlciBzZWNvbmQsIHdpdGggYW4gYWxwaGEgb2YgMC4yNS4gVGhpc1xyXG4gICAgICAgIC8vIG1lYW5zIHRoYXQgbW9yZSByZWNlbnQgc2Vjb25kcyBhZmZlY3QgdGhlIGVzdGltYXRlZCBmcmFtZSByYXRlIG1vcmUgdGhhblxyXG4gICAgICAgIC8vIG9sZGVyIHNlY29uZHMuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXaGVuIGEgYnJvd3NlciB3aW5kb3cgaXMgTk9UIG1pbmltaXplZCwgYnV0IGlzIGNvdmVyZWQgdXAgKGkuZS4geW91J3JlIHVzaW5nXHJcbiAgICAgICAgLy8gYW5vdGhlciBhcHAgd2hpY2ggaGFzIHNwYXduZWQgYSB3aW5kb3cgb3ZlciB0aGUgdG9wIG9mIHRoZSBicm93c2VyKSwgdGhlbiBpdFxyXG4gICAgICAgIC8vIHdpbGwgc3RhcnQgdG8gdGhyb3R0bGUgdGhlIHJhZiBjYWxsYmFjayB0aW1lLiBJdCB3YWl0cyBmb3IgYSB3aGlsZSwgYW5kIHRoZW5cclxuICAgICAgICAvLyBzdGFydHMgdG8gZHJvcCB0aGUgZnJhbWUgcmF0ZSBhdCAxIGZyYW1lIHBlciBzZWNvbmQgdW50aWwgaXQncyBkb3duIHRvIGp1c3Qgb3ZlciAxZnBzLlxyXG4gICAgICAgIC8vIFNvIGlmIHRoZSBnYW1lIHdhcyBydW5uaW5nIGF0IDYwZnBzLCBhbmQgdGhlIHBsYXllciBvcGVucyBhIG5ldyB3aW5kb3csIHRoZW5cclxuICAgICAgICAvLyBhZnRlciA2MCBzZWNvbmRzICgrIHRoZSAnYnVmZmVyIHRpbWUnKSBpdCdsbCBiZSBkb3duIHRvIDFmcHMsIHNvIHJhZmluJ2cgYXQgMUh6LlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2hlbiB0aGV5IG1ha2UgdGhlIGdhbWUgdmlzaWJsZSBhZ2FpbiwgdGhlIGZyYW1lIHJhdGUgaXMgaW5jcmVhc2VkIGF0IGEgcmF0ZSBvZlxyXG4gICAgICAgIC8vIGFwcHJveC4gOGZwcywgYmFjayB1cCB0byA2MGZwcyAob3IgdGhlIG1heCBpdCBjYW4gb2J0YWluKVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZHJvcCBpbiBmcmFtZSByYXRlIGlzIGJlY2F1c2UgdGhlXHJcbiAgICAgICAgLy8gYnJvd3NlciBpcyB0aHJvdHRsaW5nIHJhZiwgb3IgYmVjYXVzZSB0aGUgZ2FtZSBpcyBzdHJ1Z2dsaW5nIHdpdGggcGVyZm9ybWFuY2VcclxuICAgICAgICAvLyBiZWNhdXNlIHlvdSdyZSBhc2tpbmcgaXQgdG8gZG8gdG9vIG11Y2ggb24gdGhlIGRldmljZS5cclxuXHJcbiAgICAgICAgaWYgKHRpbWUgPiB0aGlzLm5leHRGcHNVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ29tcHV0ZSB0aGUgbmV3IGV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlIHdpdGggYW4gYWxwaGEgb2YgMC4yNS5cclxuICAgICAgICAgICAgdGhpcy5hY3R1YWxGcHMgPSAwLjI1ICogdGhpcy5mcmFtZXNUaGlzU2Vjb25kICsgMC43NSAqIHRoaXMuYWN0dWFsRnBzO1xyXG4gICAgICAgICAgICB0aGlzLm5leHRGcHNVcGRhdGUgPSB0aW1lICsgMTAwMDtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXNUaGlzU2Vjb25kID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzVGhpc1NlY29uZCsrO1xyXG5cclxuICAgICAgICAvLyAgSW50ZXJwb2xhdGlvbiAtIGhvdyBmYXIgYmV0d2VlbiB3aGF0IGlzIGV4cGVjdGVkIGFuZCB3aGVyZSB3ZSBhcmU/XHJcbiAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBhdmcgLyB0aGlzLl90YXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgYXZnLCBpbnRlcnBvbGF0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gIFNoaWZ0IHRpbWUgdmFsdWUgb3ZlclxyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSB0aW1lO1xyXG5cclxuICAgICAgICB0aGlzLmZyYW1lKys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgY2FsbHMgYFRpbWVTdGVwLnN0ZXBgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjdGlja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGVwKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIFRpbWVTdGVwIHRvIHNsZWVwLCBzdG9wcGluZyBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSAob3IgU2V0VGltZW91dCkgYW5kIHRvZ2dsaW5nIHRoZSBgcnVubmluZ2AgZmxhZyB0byBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Db3JlLlRpbWVTdGVwI3NsZWVwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2xlZXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmFmLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXYWtlcy11cCB0aGUgVGltZVN0ZXAsIHJlc3RhcnRpbmcgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgKG9yIFNldFRpbWVvdXQpIGFuZCB0b2dnbGluZyB0aGUgYHJ1bm5pbmdgIGZsYWcgdG8gdHJ1ZS5cclxuICAgICAqIFRoZSBgc2VhbWxlc3NgIGFyZ3VtZW50IGNvbnRyb2xzIGlmIHRoZSB3YWtlLXVwIHNob3VsZCBhZGp1c3QgdGhlIHN0YXJ0IHRpbWUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjd2FrZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2VhbWxlc3M9ZmFsc2VdIC0gQWRqdXN0IHRoZSBzdGFydFRpbWUgYmFzZWQgb24gdGhlIGxhc3RUaW1lIHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgd2FrZTogZnVuY3Rpb24gKHNlYW1sZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNsZWVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYW1sZXNzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgKz0gLXRoaXMubGFzdFRpbWUgKyAodGhpcy5sYXN0VGltZSArIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJhZi5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSwgdGhpcy51c2VSQUYpO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnN0ZXAoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkdXJhdGlvbiB3aGljaCB0aGUgZ2FtZSBoYXMgYmVlbiBydW5uaW5nLCBpbiBzZWNvbmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXREdXJhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmxhc3RUaW1lIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkdXJhdGlvbiB3aGljaCB0aGUgZ2FtZSBoYXMgYmVlbiBydW5uaW5nLCBpbiBtcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Db3JlLlRpbWVTdGVwI2dldER1cmF0aW9uTVNcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBpbiBtcy5cclxuICAgICAqL1xyXG4gICAgZ2V0RHVyYXRpb25NUzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmxhc3RUaW1lIC0gdGhpcy5zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBUaW1lU3RlcCBydW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNvcmUuVGltZVN0ZXB9IFRoZSBUaW1lU3RlcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmFmLnN0b3AoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIFRpbWVTdGVwLiBUaGlzIHdpbGwgc3RvcCBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgc3RvcCB0aGUgc3RlcCwgY2xlYXIgdGhlIGNhbGxiYWNrcyBhbmQgbnVsbFxyXG4gICAgICogYW55IG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcblxyXG4gICAgICAgIHRoaXMucmFmID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVTdGVwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/TimeStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/VisibilityHandler.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/core/VisibilityHandler.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * The Visibility Handler is responsible for listening out for document level visibility change events.\r\n * This includes `visibilitychange` if the browser supports it, and blur and focus events. It then uses\r\n * the provided Event Emitter and fires the related events.\r\n *\r\n * @function Phaser.Core.VisibilityHandler\r\n * @fires Phaser.Core.Events#BLUR\r\n * @fires Phaser.Core.Events#FOCUS\r\n * @fires Phaser.Core.Events#HIDDEN\r\n * @fires Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Game instance this Visibility Handler is working on.\r\n */\r\nvar VisibilityHandler = function (game)\r\n{\r\n    var hiddenVar;\r\n    var eventEmitter = game.events;\r\n\r\n    if (document.hidden !== undefined)\r\n    {\r\n        hiddenVar = 'visibilitychange';\r\n    }\r\n    else\r\n    {\r\n        var vendors = [ 'webkit', 'moz', 'ms' ];\r\n\r\n        vendors.forEach(function (prefix)\r\n        {\r\n            if (document[prefix + 'Hidden'] !== undefined)\r\n            {\r\n                document.hidden = function ()\r\n                {\r\n                    return document[prefix + 'Hidden'];\r\n                };\r\n\r\n                hiddenVar = prefix + 'visibilitychange';\r\n            }\r\n\r\n        });\r\n    }\r\n\r\n    var onChange = function (event)\r\n    {\r\n        if (document.hidden || event.type === 'pause')\r\n        {\r\n            eventEmitter.emit(Events.HIDDEN);\r\n        }\r\n        else\r\n        {\r\n            eventEmitter.emit(Events.VISIBLE);\r\n        }\r\n    };\r\n\r\n    if (hiddenVar)\r\n    {\r\n        document.addEventListener(hiddenVar, onChange, false);\r\n    }\r\n\r\n    window.onblur = function ()\r\n    {\r\n        eventEmitter.emit(Events.BLUR);\r\n    };\r\n\r\n    window.onfocus = function ()\r\n    {\r\n        eventEmitter.emit(Events.FOCUS);\r\n    };\r\n\r\n    //  Automatically give the window focus unless config says otherwise\r\n    if (window.focus && game.config.autoFocus)\r\n    {\r\n        window.focus();\r\n    }\r\n};\r\n\r\nmodule.exports = VisibilityHandler;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL1Zpc2liaWxpdHlIYW5kbGVyLmpzP2E4MzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxnRUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvVmlzaWJpbGl0eUhhbmRsZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaXNpYmlsaXR5IEhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIGxpc3RlbmluZyBvdXQgZm9yIGRvY3VtZW50IGxldmVsIHZpc2liaWxpdHkgY2hhbmdlIGV2ZW50cy5cclxuICogVGhpcyBpbmNsdWRlcyBgdmlzaWJpbGl0eWNoYW5nZWAgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgaXQsIGFuZCBibHVyIGFuZCBmb2N1cyBldmVudHMuIEl0IHRoZW4gdXNlc1xyXG4gKiB0aGUgcHJvdmlkZWQgRXZlbnQgRW1pdHRlciBhbmQgZmlyZXMgdGhlIHJlbGF0ZWQgZXZlbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkNvcmUuVmlzaWJpbGl0eUhhbmRsZXJcclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNCTFVSXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjRk9DVVNcclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNISURERU5cclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNWSVNJQkxFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIEdhbWUgaW5zdGFuY2UgdGhpcyBWaXNpYmlsaXR5IEhhbmRsZXIgaXMgd29ya2luZyBvbi5cclxuICovXHJcbnZhciBWaXNpYmlsaXR5SGFuZGxlciA9IGZ1bmN0aW9uIChnYW1lKVxyXG57XHJcbiAgICB2YXIgaGlkZGVuVmFyO1xyXG4gICAgdmFyIGV2ZW50RW1pdHRlciA9IGdhbWUuZXZlbnRzO1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5oaWRkZW4gIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBoaWRkZW5WYXIgPSAndmlzaWJpbGl0eWNoYW5nZSc7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlbmRvcnMgPSBbICd3ZWJraXQnLCAnbW96JywgJ21zJyBdO1xyXG5cclxuICAgICAgICB2ZW5kb3JzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFtwcmVmaXggKyAnSGlkZGVuJ10gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuaGlkZGVuID0gZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRbcHJlZml4ICsgJ0hpZGRlbiddO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBoaWRkZW5WYXIgPSBwcmVmaXggKyAndmlzaWJpbGl0eWNoYW5nZSc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5oaWRkZW4gfHwgZXZlbnQudHlwZSA9PT0gJ3BhdXNlJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5ISURERU4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuVklTSUJMRSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoaGlkZGVuVmFyKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoaGlkZGVuVmFyLCBvbkNoYW5nZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5vbmJsdXIgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5CTFVSKTtcclxuICAgIH07XHJcblxyXG4gICAgd2luZG93Lm9uZm9jdXMgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5GT0NVUyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICBBdXRvbWF0aWNhbGx5IGdpdmUgdGhlIHdpbmRvdyBmb2N1cyB1bmxlc3MgY29uZmlnIHNheXMgb3RoZXJ3aXNlXHJcbiAgICBpZiAod2luZG93LmZvY3VzICYmIGdhbWUuY29uZmlnLmF1dG9Gb2N1cylcclxuICAgIHtcclxuICAgICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlzaWJpbGl0eUhhbmRsZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/VisibilityHandler.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/BLUR_EVENT.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/core/events/BLUR_EVENT.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Blur Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the window in which the Game instance is embedded\r\n * enters a blurred state. The blur event is raised when the window loses focus. This can happen if a user swaps\r\n * tab, or if they simply remove focus from the browser to another app.\r\n *\r\n * @event Phaser.Core.Events#BLUR\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'blur';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CTFVSX0VWRU5ULmpzPzg2MDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CTFVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgQmx1ciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBWaXNpYmlsaXR5IEhhbmRsZXIgd2hlbiB0aGUgd2luZG93IGluIHdoaWNoIHRoZSBHYW1lIGluc3RhbmNlIGlzIGVtYmVkZGVkXHJcbiAqIGVudGVycyBhIGJsdXJyZWQgc3RhdGUuIFRoZSBibHVyIGV2ZW50IGlzIHJhaXNlZCB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHVzZXIgc3dhcHNcclxuICogdGFiLCBvciBpZiB0aGV5IHNpbXBseSByZW1vdmUgZm9jdXMgZnJvbSB0aGUgYnJvd3NlciB0byBhbm90aGVyIGFwcC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNCTFVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYmx1cic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/BLUR_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/BOOT_EVENT.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/core/events/BOOT_EVENT.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Boot Event.\r\n * \r\n * This event is dispatched when the Phaser Game instance has finished booting, but before it is ready to start running.\r\n * The global systems use this event to know when to set themselves up, dispatching their own `ready` events as required.\r\n *\r\n * @event Phaser.Core.Events#BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CT09UX0VWRU5ULmpzPzgyMWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvQk9PVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIEJvb3QgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UgaGFzIGZpbmlzaGVkIGJvb3RpbmcsIGJ1dCBiZWZvcmUgaXQgaXMgcmVhZHkgdG8gc3RhcnQgcnVubmluZy5cclxuICogVGhlIGdsb2JhbCBzeXN0ZW1zIHVzZSB0aGlzIGV2ZW50IHRvIGtub3cgd2hlbiB0byBzZXQgdGhlbXNlbHZlcyB1cCwgZGlzcGF0Y2hpbmcgdGhlaXIgb3duIGByZWFkeWAgZXZlbnRzIGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0JPT1RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdib290JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/BOOT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Context Lost Event.\r\n * \r\n * This event is dispatched by the Game if the WebGL Renderer it is using encounters a WebGL Context Lost event from the browser.\r\n * \r\n * The partner event is `CONTEXT_RESTORED`.\r\n *\r\n * @event Phaser.Core.Events#CONTEXT_LOST\r\n * @since 3.19.0\r\n */\r\nmodule.exports = 'contextlost';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX0xPU1RfRVZFTlQuanM/NDliMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0NPTlRFWFRfTE9TVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIENvbnRleHQgTG9zdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBpZiB0aGUgV2ViR0wgUmVuZGVyZXIgaXQgaXMgdXNpbmcgZW5jb3VudGVycyBhIFdlYkdMIENvbnRleHQgTG9zdCBldmVudCBmcm9tIHRoZSBicm93c2VyLlxyXG4gKiBcclxuICogVGhlIHBhcnRuZXIgZXZlbnQgaXMgYENPTlRFWFRfUkVTVE9SRURgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0NPTlRFWFRfTE9TVFxyXG4gKiBAc2luY2UgMy4xOS4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjb250ZXh0bG9zdCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Context Restored Event.\r\n * \r\n * This event is dispatched by the Game if the WebGL Renderer it is using encounters a WebGL Context Restored event from the browser.\r\n * \r\n * The partner event is `CONTEXT_LOST`.\r\n *\r\n * @event Phaser.Core.Events#CONTEXT_RESTORED\r\n * @since 3.19.0\r\n */\r\nmodule.exports = 'contextrestored';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX1JFU1RPUkVEX0VWRU5ULmpzPzcxZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX1JFU1RPUkVEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgQ29udGV4dCBSZXN0b3JlZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBpZiB0aGUgV2ViR0wgUmVuZGVyZXIgaXQgaXMgdXNpbmcgZW5jb3VudGVycyBhIFdlYkdMIENvbnRleHQgUmVzdG9yZWQgZXZlbnQgZnJvbSB0aGUgYnJvd3Nlci5cclxuICogXHJcbiAqIFRoZSBwYXJ0bmVyIGV2ZW50IGlzIGBDT05URVhUX0xPU1RgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0NPTlRFWFRfUkVTVE9SRURcclxuICogQHNpbmNlIDMuMTkuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY29udGV4dHJlc3RvcmVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/DESTROY_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/DESTROY_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Destroy Event.\r\n * \r\n * This event is dispatched when the game instance has been told to destroy itself.\r\n * Lots of internal systems listen to this event in order to clear themselves out.\r\n * Custom plugins and game code should also do the same.\r\n *\r\n * @event Phaser.Core.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzPzNmZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgRGVzdHJveSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBnYW1lIGluc3RhbmNlIGhhcyBiZWVuIHRvbGQgdG8gZGVzdHJveSBpdHNlbGYuXHJcbiAqIExvdHMgb2YgaW50ZXJuYWwgc3lzdGVtcyBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBvcmRlciB0byBjbGVhciB0aGVtc2VsdmVzIG91dC5cclxuICogQ3VzdG9tIHBsdWdpbnMgYW5kIGdhbWUgY29kZSBzaG91bGQgYWxzbyBkbyB0aGUgc2FtZS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZGVzdHJveSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/FOCUS_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/FOCUS_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Focus Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the window in which the Game instance is embedded\r\n * enters a focused state. The focus event is raised when the window re-gains focus, having previously lost it.\r\n *\r\n * @event Phaser.Core.Events#FOCUS\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'focus';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9GT0NVU19FVkVOVC5qcz82ODMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0ZPQ1VTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgRm9jdXMgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWUgVmlzaWJpbGl0eSBIYW5kbGVyIHdoZW4gdGhlIHdpbmRvdyBpbiB3aGljaCB0aGUgR2FtZSBpbnN0YW5jZSBpcyBlbWJlZGRlZFxyXG4gKiBlbnRlcnMgYSBmb2N1c2VkIHN0YXRlLiBUaGUgZm9jdXMgZXZlbnQgaXMgcmFpc2VkIHdoZW4gdGhlIHdpbmRvdyByZS1nYWlucyBmb2N1cywgaGF2aW5nIHByZXZpb3VzbHkgbG9zdCBpdC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNGT0NVU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2ZvY3VzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/FOCUS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/HIDDEN_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/HIDDEN_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Hidden Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the document in which the Game instance is embedded\r\n * enters a hidden state. Only browsers that support the Visibility API will cause this event to be emitted.\r\n * \r\n * In most modern browsers, when the document enters a hidden state, the Request Animation Frame and setTimeout, which\r\n * control the main game loop, will automatically pause. There is no way to stop this from happening. It is something\r\n * your game should account for in its own code, should the pause be an issue (i.e. for multiplayer games)\r\n *\r\n * @event Phaser.Core.Events#HIDDEN\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'hidden';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ISURERU5fRVZFTlQuanM/N2RkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0hJRERFTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIEhpZGRlbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBWaXNpYmlsaXR5IEhhbmRsZXIgd2hlbiB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdGhlIEdhbWUgaW5zdGFuY2UgaXMgZW1iZWRkZWRcclxuICogZW50ZXJzIGEgaGlkZGVuIHN0YXRlLiBPbmx5IGJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0aGUgVmlzaWJpbGl0eSBBUEkgd2lsbCBjYXVzZSB0aGlzIGV2ZW50IHRvIGJlIGVtaXR0ZWQuXHJcbiAqIFxyXG4gKiBJbiBtb3N0IG1vZGVybiBicm93c2Vycywgd2hlbiB0aGUgZG9jdW1lbnQgZW50ZXJzIGEgaGlkZGVuIHN0YXRlLCB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgYW5kIHNldFRpbWVvdXQsIHdoaWNoXHJcbiAqIGNvbnRyb2wgdGhlIG1haW4gZ2FtZSBsb29wLCB3aWxsIGF1dG9tYXRpY2FsbHkgcGF1c2UuIFRoZXJlIGlzIG5vIHdheSB0byBzdG9wIHRoaXMgZnJvbSBoYXBwZW5pbmcuIEl0IGlzIHNvbWV0aGluZ1xyXG4gKiB5b3VyIGdhbWUgc2hvdWxkIGFjY291bnQgZm9yIGluIGl0cyBvd24gY29kZSwgc2hvdWxkIHRoZSBwYXVzZSBiZSBhbiBpc3N1ZSAoaS5lLiBmb3IgbXVsdGlwbGF5ZXIgZ2FtZXMpXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjSElEREVOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnaGlkZGVuJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/HIDDEN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/PAUSE_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/PAUSE_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pause Event.\r\n * \r\n * This event is dispatched when the Game loop enters a paused state, usually as a result of the Visibility Handler.\r\n *\r\n * @event Phaser.Core.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QQVVTRV9FVkVOVC5qcz82MWQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QQVVTRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIFBhdXNlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIEdhbWUgbG9vcCBlbnRlcnMgYSBwYXVzZWQgc3RhdGUsIHVzdWFsbHkgYXMgYSByZXN1bHQgb2YgdGhlIFZpc2liaWxpdHkgSGFuZGxlci5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNQQVVTRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Post-Render Event.\r\n * \r\n * This event is dispatched right at the end of the render process.\r\n * \r\n * Every Scene will have rendered and been drawn to the canvas by the time this event is fired.\r\n * Use it for any last minute post-processing before the next game step begins.\r\n *\r\n * @event Phaser.Core.Events#POST_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - A reference to the current renderer being used by the Game instance.\r\n */\r\nmodule.exports = 'postrender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QT1NUX1JFTkRFUl9FVkVOVC5qcz85Mzg3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBNEU7QUFDdkY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1BPU1RfUkVOREVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUG9zdC1SZW5kZXIgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyIHByb2Nlc3MuXHJcbiAqIFxyXG4gKiBFdmVyeSBTY2VuZSB3aWxsIGhhdmUgcmVuZGVyZWQgYW5kIGJlZW4gZHJhd24gdG8gdGhlIGNhbnZhcyBieSB0aGUgdGltZSB0aGlzIGV2ZW50IGlzIGZpcmVkLlxyXG4gKiBVc2UgaXQgZm9yIGFueSBsYXN0IG1pbnV0ZSBwb3N0LXByb2Nlc3NpbmcgYmVmb3JlIHRoZSBuZXh0IGdhbWUgc3RlcCBiZWdpbnMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUE9TVF9SRU5ERVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlciBiZWluZyB1c2VkIGJ5IHRoZSBHYW1lIGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/POST_STEP_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/POST_STEP_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Post-Step Event.\r\n * \r\n * This event is dispatched after the Scene Manager has updated.\r\n * Hook into it from plugins or systems that need to do things before the render starts.\r\n *\r\n * @event Phaser.Core.Events#POST_STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'poststep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QT1NUX1NURVBfRVZFTlQuanM/NWY5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvUE9TVF9TVEVQX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUG9zdC1TdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBTY2VuZSBNYW5hZ2VyIGhhcyB1cGRhdGVkLlxyXG4gKiBIb29rIGludG8gaXQgZnJvbSBwbHVnaW5zIG9yIHN5c3RlbXMgdGhhdCBuZWVkIHRvIGRvIHRoaW5ncyBiZWZvcmUgdGhlIHJlbmRlciBzdGFydHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUE9TVF9TVEVQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Bvc3RzdGVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/POST_STEP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pre-Render Event.\r\n * \r\n * This event is dispatched immediately before any of the Scenes have started to render.\r\n * \r\n * The renderer will already have been initialized this frame, clearing itself and preparing to receive the Scenes for rendering, but it won't have actually drawn anything yet.\r\n *\r\n * @event Phaser.Core.Events#PRE_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - A reference to the current renderer being used by the Game instance.\r\n */\r\nmodule.exports = 'prerender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfUkVOREVSX0VWRU5ULmpzP2NjZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBNEU7QUFDdkY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1BSRV9SRU5ERVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBQcmUtUmVuZGVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBhbnkgb2YgdGhlIFNjZW5lcyBoYXZlIHN0YXJ0ZWQgdG8gcmVuZGVyLlxyXG4gKiBcclxuICogVGhlIHJlbmRlcmVyIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdGhpcyBmcmFtZSwgY2xlYXJpbmcgaXRzZWxmIGFuZCBwcmVwYXJpbmcgdG8gcmVjZWl2ZSB0aGUgU2NlbmVzIGZvciByZW5kZXJpbmcsIGJ1dCBpdCB3b24ndCBoYXZlIGFjdHVhbGx5IGRyYXduIGFueXRoaW5nIHlldC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNQUkVfUkVOREVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXIgYmVpbmcgdXNlZCBieSB0aGUgR2FtZSBpbnN0YW5jZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pre-Step Event.\r\n * \r\n * This event is dispatched before the main Game Step starts. By this point in the game cycle none of the Scene updates have yet happened.\r\n * Hook into it from plugins or systems that need to update before the Scene Manager does.\r\n *\r\n * @event Phaser.Core.Events#PRE_STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'prestep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfU1RFUF9FVkVOVC5qcz9hN2E4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfU1RFUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIFByZS1TdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGUgbWFpbiBHYW1lIFN0ZXAgc3RhcnRzLiBCeSB0aGlzIHBvaW50IGluIHRoZSBnYW1lIGN5Y2xlIG5vbmUgb2YgdGhlIFNjZW5lIHVwZGF0ZXMgaGF2ZSB5ZXQgaGFwcGVuZWQuXHJcbiAqIEhvb2sgaW50byBpdCBmcm9tIHBsdWdpbnMgb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gdXBkYXRlIGJlZm9yZSB0aGUgU2NlbmUgTWFuYWdlciBkb2VzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI1BSRV9TVEVQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXN0ZXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/READY_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/READY_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Ready Event.\r\n * \r\n * This event is dispatched when the Phaser Game instance has finished booting, the Texture Manager is fully ready,\r\n * and all local systems are now able to start.\r\n *\r\n * @event Phaser.Core.Events#READY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'ready';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9SRUFEWV9FVkVOVC5qcz82MDIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1JFQURZX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUmVhZHkgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UgaGFzIGZpbmlzaGVkIGJvb3RpbmcsIHRoZSBUZXh0dXJlIE1hbmFnZXIgaXMgZnVsbHkgcmVhZHksXHJcbiAqIGFuZCBhbGwgbG9jYWwgc3lzdGVtcyBhcmUgbm93IGFibGUgdG8gc3RhcnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUkVBRFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZWFkeSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/READY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/RESUME_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/RESUME_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Resume Event.\r\n * \r\n * This event is dispatched when the game loop leaves a paused state and resumes running.\r\n *\r\n * @event Phaser.Core.Events#RESUME\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9SRVNVTUVfRVZFTlQuanM/YzYxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUmVzdW1lIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIGdhbWUgbG9vcCBsZWF2ZXMgYSBwYXVzZWQgc3RhdGUgYW5kIHJlc3VtZXMgcnVubmluZy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNSRVNVTUVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZXN1bWUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/STEP_EVENT.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/core/events/STEP_EVENT.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Step Event.\r\n * \r\n * This event is dispatched after the Game Pre-Step and before the Scene Manager steps.\r\n * Hook into it from plugins or systems that need to update before the Scene Manager does, but after the core Systems have.\r\n *\r\n * @event Phaser.Core.Events#STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'step';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9TVEVQX0VWRU5ULmpzP2MzOGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1NURVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBTdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBHYW1lIFByZS1TdGVwIGFuZCBiZWZvcmUgdGhlIFNjZW5lIE1hbmFnZXIgc3RlcHMuXHJcbiAqIEhvb2sgaW50byBpdCBmcm9tIHBsdWdpbnMgb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gdXBkYXRlIGJlZm9yZSB0aGUgU2NlbmUgTWFuYWdlciBkb2VzLCBidXQgYWZ0ZXIgdGhlIGNvcmUgU3lzdGVtcyBoYXZlLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI1NURVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RlcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/STEP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/VISIBLE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/core/events/VISIBLE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Visible Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the document in which the Game instance is embedded\r\n * enters a visible state, previously having been hidden.\r\n * \r\n * Only browsers that support the Visibility API will cause this event to be emitted.\r\n *\r\n * @event Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'visible';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9WSVNJQkxFX0VWRU5ULmpzPzEwYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1ZJU0lCTEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBWaXNpYmxlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBHYW1lIFZpc2liaWxpdHkgSGFuZGxlciB3aGVuIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0aGUgR2FtZSBpbnN0YW5jZSBpcyBlbWJlZGRlZFxyXG4gKiBlbnRlcnMgYSB2aXNpYmxlIHN0YXRlLCBwcmV2aW91c2x5IGhhdmluZyBiZWVuIGhpZGRlbi5cclxuICogXHJcbiAqIE9ubHkgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHRoZSBWaXNpYmlsaXR5IEFQSSB3aWxsIGNhdXNlIHRoaXMgZXZlbnQgdG8gYmUgZW1pdHRlZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNWSVNJQkxFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndmlzaWJsZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/VISIBLE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/events/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/core/events/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Core.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BLUR: __webpack_require__(/*! ./BLUR_EVENT */ \"./node_modules/phaser/src/core/events/BLUR_EVENT.js\"),\r\n    BOOT: __webpack_require__(/*! ./BOOT_EVENT */ \"./node_modules/phaser/src/core/events/BOOT_EVENT.js\"),\r\n    CONTEXT_LOST: __webpack_require__(/*! ./CONTEXT_LOST_EVENT */ \"./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js\"),\r\n    CONTEXT_RESTORED: __webpack_require__(/*! ./CONTEXT_RESTORED_EVENT */ \"./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js\"),\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/core/events/DESTROY_EVENT.js\"),\r\n    FOCUS: __webpack_require__(/*! ./FOCUS_EVENT */ \"./node_modules/phaser/src/core/events/FOCUS_EVENT.js\"),\r\n    HIDDEN: __webpack_require__(/*! ./HIDDEN_EVENT */ \"./node_modules/phaser/src/core/events/HIDDEN_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/core/events/PAUSE_EVENT.js\"),\r\n    POST_RENDER: __webpack_require__(/*! ./POST_RENDER_EVENT */ \"./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js\"),\r\n    POST_STEP: __webpack_require__(/*! ./POST_STEP_EVENT */ \"./node_modules/phaser/src/core/events/POST_STEP_EVENT.js\"),\r\n    PRE_RENDER: __webpack_require__(/*! ./PRE_RENDER_EVENT */ \"./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js\"),\r\n    PRE_STEP: __webpack_require__(/*! ./PRE_STEP_EVENT */ \"./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js\"),\r\n    READY: __webpack_require__(/*! ./READY_EVENT */ \"./node_modules/phaser/src/core/events/READY_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/core/events/RESUME_EVENT.js\"),\r\n    STEP: __webpack_require__(/*! ./STEP_EVENT */ \"./node_modules/phaser/src/core/events/STEP_EVENT.js\"),\r\n    VISIBLE: __webpack_require__(/*! ./VISIBLE_EVENT */ \"./node_modules/phaser/src/core/events/VISIBLE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9pbmRleC5qcz84MDU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLHlFQUFjO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyx5RUFBYztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsaUdBQTBCO0FBQ3hELGFBQWEsbUJBQU8sQ0FBQywrRUFBaUI7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLDJFQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyw2RUFBZ0I7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDJFQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUFxQjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsbUZBQW1CO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUFvQjtBQUM1QyxjQUFjLG1CQUFPLENBQUMsaUZBQWtCO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsNkVBQWdCO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyx5RUFBYztBQUNoQyxhQUFhLG1CQUFPLENBQUMsK0VBQWlCOztBQUV0QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ29yZS5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBCTFVSOiByZXF1aXJlKCcuL0JMVVJfRVZFTlQnKSxcclxuICAgIEJPT1Q6IHJlcXVpcmUoJy4vQk9PVF9FVkVOVCcpLFxyXG4gICAgQ09OVEVYVF9MT1NUOiByZXF1aXJlKCcuL0NPTlRFWFRfTE9TVF9FVkVOVCcpLFxyXG4gICAgQ09OVEVYVF9SRVNUT1JFRDogcmVxdWlyZSgnLi9DT05URVhUX1JFU1RPUkVEX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIEZPQ1VTOiByZXF1aXJlKCcuL0ZPQ1VTX0VWRU5UJyksXHJcbiAgICBISURERU46IHJlcXVpcmUoJy4vSElEREVOX0VWRU5UJyksXHJcbiAgICBQQVVTRTogcmVxdWlyZSgnLi9QQVVTRV9FVkVOVCcpLFxyXG4gICAgUE9TVF9SRU5ERVI6IHJlcXVpcmUoJy4vUE9TVF9SRU5ERVJfRVZFTlQnKSxcclxuICAgIFBPU1RfU1RFUDogcmVxdWlyZSgnLi9QT1NUX1NURVBfRVZFTlQnKSxcclxuICAgIFBSRV9SRU5ERVI6IHJlcXVpcmUoJy4vUFJFX1JFTkRFUl9FVkVOVCcpLFxyXG4gICAgUFJFX1NURVA6IHJlcXVpcmUoJy4vUFJFX1NURVBfRVZFTlQnKSxcclxuICAgIFJFQURZOiByZXF1aXJlKCcuL1JFQURZX0VWRU5UJyksXHJcbiAgICBSRVNVTUU6IHJlcXVpcmUoJy4vUkVTVU1FX0VWRU5UJyksXHJcbiAgICBTVEVQOiByZXF1aXJlKCcuL1NURVBfRVZFTlQnKSxcclxuICAgIFZJU0lCTEU6IHJlcXVpcmUoJy4vVklTSUJMRV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/core/index.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/core/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Core\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Config: __webpack_require__(/*! ./Config */ \"./node_modules/phaser/src/core/Config.js\"),\r\n    CreateRenderer: __webpack_require__(/*! ./CreateRenderer */ \"./node_modules/phaser/src/core/CreateRenderer.js\"),\r\n    DebugHeader: __webpack_require__(/*! ./DebugHeader */ \"./node_modules/phaser/src/core/DebugHeader.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\"),\r\n    TimeStep: __webpack_require__(/*! ./TimeStep */ \"./node_modules/phaser/src/core/TimeStep.js\"),\r\n    VisibilityHandler: __webpack_require__(/*! ./VisibilityHandler */ \"./node_modules/phaser/src/core/VisibilityHandler.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2luZGV4LmpzP2U4NDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsMEVBQWtCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyxnRUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQXFCOztBQUVwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5Db3JlXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ29uZmlnOiByZXF1aXJlKCcuL0NvbmZpZycpLFxyXG4gICAgQ3JlYXRlUmVuZGVyZXI6IHJlcXVpcmUoJy4vQ3JlYXRlUmVuZGVyZXInKSxcclxuICAgIERlYnVnSGVhZGVyOiByZXF1aXJlKCcuL0RlYnVnSGVhZGVyJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgICBUaW1lU3RlcDogcmVxdWlyZSgnLi9UaW1lU3RlcCcpLFxyXG4gICAgVmlzaWJpbGl0eUhhbmRsZXI6IHJlcXVpcmUoJy4vVmlzaWJpbGl0eUhhbmRsZXInKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/GenerateTexture.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/create/GenerateTexture.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Arne16 = __webpack_require__(/*! ./palettes/Arne16 */ \"./node_modules/phaser/src/create/palettes/Arne16.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Create.GenerateTexture\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Create.GenerateTextureConfig} config - [description]\r\n *\r\n * @return {HTMLCanvasElement} [description]\r\n */\r\nvar GenerateTexture = function (config)\r\n{\r\n    var data = GetValue(config, 'data', []);\r\n    var canvas = GetValue(config, 'canvas', null);\r\n    var palette = GetValue(config, 'palette', Arne16);\r\n    var pixelWidth = GetValue(config, 'pixelWidth', 1);\r\n    var pixelHeight = GetValue(config, 'pixelHeight', pixelWidth);\r\n    var resizeCanvas = GetValue(config, 'resizeCanvas', true);\r\n    var clearCanvas = GetValue(config, 'clearCanvas', true);\r\n    var preRender = GetValue(config, 'preRender', null);\r\n    var postRender = GetValue(config, 'postRender', null);\r\n\r\n    var width = Math.floor(Math.abs(data[0].length * pixelWidth));\r\n    var height = Math.floor(Math.abs(data.length * pixelHeight));\r\n\r\n    if (!canvas)\r\n    {\r\n        canvas = CanvasPool.create2D(this, width, height);\r\n        resizeCanvas = false;\r\n        clearCanvas = false;\r\n    }\r\n\r\n    if (resizeCanvas)\r\n    {\r\n        canvas.width = width;\r\n        canvas.height = height;\r\n    }\r\n\r\n    var ctx = canvas.getContext('2d');\r\n\r\n    if (clearCanvas)\r\n    {\r\n        ctx.clearRect(0, 0, width, height);\r\n    }\r\n\r\n    //  preRender Callback?\r\n    if (preRender)\r\n    {\r\n        preRender(canvas, ctx);\r\n    }\r\n\r\n    //  Draw it\r\n    for (var y = 0; y < data.length; y++)\r\n    {\r\n        var row = data[y];\r\n\r\n        for (var x = 0; x < row.length; x++)\r\n        {\r\n            var d = row[x];\r\n\r\n            if (d !== '.' && d !== ' ')\r\n            {\r\n                ctx.fillStyle = palette[d];\r\n                ctx.fillRect(x * pixelWidth, y * pixelHeight, pixelWidth, pixelHeight);\r\n            }\r\n        }\r\n    }\r\n\r\n    //  postRender Callback?\r\n    if (postRender)\r\n    {\r\n        postRender(canvas, ctx);\r\n    }\r\n\r\n    return canvas;\r\n};\r\n\r\nmodule.exports = GenerateTexture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvR2VuZXJhdGVUZXh0dXJlLmpzPzNkNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyw4RUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQThCO0FBQ3ZELGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL0dlbmVyYXRlVGV4dHVyZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFybmUxNiA9IHJlcXVpcmUoJy4vcGFsZXR0ZXMvQXJuZTE2Jyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3JlYXRlLkdlbmVyYXRlVGV4dHVyZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLkdlbmVyYXRlVGV4dHVyZUNvbmZpZ30gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHZhciBkYXRhID0gR2V0VmFsdWUoY29uZmlnLCAnZGF0YScsIFtdKTtcclxuICAgIHZhciBjYW52YXMgPSBHZXRWYWx1ZShjb25maWcsICdjYW52YXMnLCBudWxsKTtcclxuICAgIHZhciBwYWxldHRlID0gR2V0VmFsdWUoY29uZmlnLCAncGFsZXR0ZScsIEFybmUxNik7XHJcbiAgICB2YXIgcGl4ZWxXaWR0aCA9IEdldFZhbHVlKGNvbmZpZywgJ3BpeGVsV2lkdGgnLCAxKTtcclxuICAgIHZhciBwaXhlbEhlaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3BpeGVsSGVpZ2h0JywgcGl4ZWxXaWR0aCk7XHJcbiAgICB2YXIgcmVzaXplQ2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAncmVzaXplQ2FudmFzJywgdHJ1ZSk7XHJcbiAgICB2YXIgY2xlYXJDYW52YXMgPSBHZXRWYWx1ZShjb25maWcsICdjbGVhckNhbnZhcycsIHRydWUpO1xyXG4gICAgdmFyIHByZVJlbmRlciA9IEdldFZhbHVlKGNvbmZpZywgJ3ByZVJlbmRlcicsIG51bGwpO1xyXG4gICAgdmFyIHBvc3RSZW5kZXIgPSBHZXRWYWx1ZShjb25maWcsICdwb3N0UmVuZGVyJywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5mbG9vcihNYXRoLmFicyhkYXRhWzBdLmxlbmd0aCAqIHBpeGVsV2lkdGgpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmZsb29yKE1hdGguYWJzKGRhdGEubGVuZ3RoICogcGl4ZWxIZWlnaHQpKTtcclxuXHJcbiAgICBpZiAoIWNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIHJlc2l6ZUNhbnZhcyA9IGZhbHNlO1xyXG4gICAgICAgIGNsZWFyQ2FudmFzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc2l6ZUNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICBpZiAoY2xlYXJDYW52YXMpXHJcbiAgICB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgcHJlUmVuZGVyIENhbGxiYWNrP1xyXG4gICAgaWYgKHByZVJlbmRlcilcclxuICAgIHtcclxuICAgICAgICBwcmVSZW5kZXIoY2FudmFzLCBjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBEcmF3IGl0XHJcbiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGRhdGEubGVuZ3RoOyB5KyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJvdyA9IGRhdGFbeV07XHJcblxyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgcm93Lmxlbmd0aDsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGQgPSByb3dbeF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZCAhPT0gJy4nICYmIGQgIT09ICcgJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhbGV0dGVbZF07XHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoeCAqIHBpeGVsV2lkdGgsIHkgKiBwaXhlbEhlaWdodCwgcGl4ZWxXaWR0aCwgcGl4ZWxIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBwb3N0UmVuZGVyIENhbGxiYWNrP1xyXG4gICAgaWYgKHBvc3RSZW5kZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcG9zdFJlbmRlcihjYW52YXMsIGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2VuZXJhdGVUZXh0dXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/GenerateTexture.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/create/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Create\r\n */\r\n\r\nmodule.exports = {\r\n  \r\n    GenerateTexture: __webpack_require__(/*! ./GenerateTexture */ \"./node_modules/phaser/src/create/GenerateTexture.js\"),\r\n    Palettes: __webpack_require__(/*! ./palettes */ \"./node_modules/phaser/src/create/palettes/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvaW5kZXguanM/OWIwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLDhFQUFtQjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsc0VBQVk7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ3JlYXRlXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgXHJcbiAgICBHZW5lcmF0ZVRleHR1cmU6IHJlcXVpcmUoJy4vR2VuZXJhdGVUZXh0dXJlJyksXHJcbiAgICBQYWxldHRlczogcmVxdWlyZSgnLi9wYWxldHRlcycpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/Arne16.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/Arne16.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.ARNE16\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n    0: '#000',\r\n    1: '#9D9D9D',\r\n    2: '#FFF',\r\n    3: '#BE2633',\r\n    4: '#E06F8B',\r\n    5: '#493C2B',\r\n    6: '#A46422',\r\n    7: '#EB8931',\r\n    8: '#F7E26B',\r\n    9: '#2F484E',\r\n    A: '#44891A',\r\n    B: '#A3CE27',\r\n    C: '#1B2632',\r\n    D: '#005784',\r\n    E: '#31A2F2',\r\n    F: '#B2DCEF'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQXJuZTE2LmpzPzkzNWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9Bcm5lMTYuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgYnkgW0FybmVdKGh0dHA6Ly9hbmRyb2lkYXJ0cy5jb20vcGFsZXR0ZS8xNnBhbC5odG0pXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5DcmVhdGUuUGFsZXR0ZXMuQVJORTE2XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkNyZWF0ZS5QYWxldHRlfVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICAwOiAnIzAwMCcsXHJcbiAgICAxOiAnIzlEOUQ5RCcsXHJcbiAgICAyOiAnI0ZGRicsXHJcbiAgICAzOiAnI0JFMjYzMycsXHJcbiAgICA0OiAnI0UwNkY4QicsXHJcbiAgICA1OiAnIzQ5M0MyQicsXHJcbiAgICA2OiAnI0E0NjQyMicsXHJcbiAgICA3OiAnI0VCODkzMScsXHJcbiAgICA4OiAnI0Y3RTI2QicsXHJcbiAgICA5OiAnIzJGNDg0RScsXHJcbiAgICBBOiAnIzQ0ODkxQScsXHJcbiAgICBCOiAnI0EzQ0UyNycsXHJcbiAgICBDOiAnIzFCMjYzMicsXHJcbiAgICBEOiAnIzAwNTc4NCcsXHJcbiAgICBFOiAnIzMxQTJGMicsXHJcbiAgICBGOiAnI0IyRENFRidcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/Arne16.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/C64.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/C64.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette inspired by the Commodore 64.\r\n *\r\n * @name Phaser.Create.Palettes.C64\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n    0: '#000',\r\n    1: '#fff',\r\n    2: '#8b4131',\r\n    3: '#7bbdc5',\r\n    4: '#8b41ac',\r\n    5: '#6aac41',\r\n    6: '#3931a4',\r\n    7: '#d5de73',\r\n    8: '#945a20',\r\n    9: '#5a4100',\r\n    A: '#bd736a',\r\n    B: '#525252',\r\n    C: '#838383',\r\n    D: '#acee8b',\r\n    E: '#7b73de',\r\n    F: '#acacac'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQzY0LmpzPzU5MTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9DNjQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgaW5zcGlyZWQgYnkgdGhlIENvbW1vZG9yZSA2NC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkNyZWF0ZS5QYWxldHRlcy5DNjRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLlBhbGV0dGV9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDA6ICcjMDAwJyxcclxuICAgIDE6ICcjZmZmJyxcclxuICAgIDI6ICcjOGI0MTMxJyxcclxuICAgIDM6ICcjN2JiZGM1JyxcclxuICAgIDQ6ICcjOGI0MWFjJyxcclxuICAgIDU6ICcjNmFhYzQxJyxcclxuICAgIDY6ICcjMzkzMWE0JyxcclxuICAgIDc6ICcjZDVkZTczJyxcclxuICAgIDg6ICcjOTQ1YTIwJyxcclxuICAgIDk6ICcjNWE0MTAwJyxcclxuICAgIEE6ICcjYmQ3MzZhJyxcclxuICAgIEI6ICcjNTI1MjUyJyxcclxuICAgIEM6ICcjODM4MzgzJyxcclxuICAgIEQ6ICcjYWNlZThiJyxcclxuICAgIEU6ICcjN2I3M2RlJyxcclxuICAgIEY6ICcjYWNhY2FjJ1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/C64.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/CGA.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/CGA.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color CGA inspired palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.CGA\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n    0: '#000',\r\n    1: '#2234d1',\r\n    2: '#0c7e45',\r\n    3: '#44aacc',\r\n    4: '#8a3622',\r\n    5: '#5c2e78',\r\n    6: '#aa5c3d',\r\n    7: '#b5b5b5',\r\n    8: '#5e606e',\r\n    9: '#4c81fb',\r\n    A: '#6cd947',\r\n    B: '#7be2f9',\r\n    C: '#eb8a60',\r\n    D: '#e23d69',\r\n    E: '#ffd93f',\r\n    F: '#fff'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQ0dBLmpzPzY5ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9DR0EuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIENHQSBpbnNwaXJlZCBwYWxldHRlIGJ5IFtBcm5lXShodHRwOi8vYW5kcm9pZGFydHMuY29tL3BhbGV0dGUvMTZwYWwuaHRtKVxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzLkNHQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHR5cGUge1BoYXNlci5UeXBlcy5DcmVhdGUuUGFsZXR0ZX1cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMDogJyMwMDAnLFxyXG4gICAgMTogJyMyMjM0ZDEnLFxyXG4gICAgMjogJyMwYzdlNDUnLFxyXG4gICAgMzogJyM0NGFhY2MnLFxyXG4gICAgNDogJyM4YTM2MjInLFxyXG4gICAgNTogJyM1YzJlNzgnLFxyXG4gICAgNjogJyNhYTVjM2QnLFxyXG4gICAgNzogJyNiNWI1YjUnLFxyXG4gICAgODogJyM1ZTYwNmUnLFxyXG4gICAgOTogJyM0YzgxZmInLFxyXG4gICAgQTogJyM2Y2Q5NDcnLFxyXG4gICAgQjogJyM3YmUyZjknLFxyXG4gICAgQzogJyNlYjhhNjAnLFxyXG4gICAgRDogJyNlMjNkNjknLFxyXG4gICAgRTogJyNmZmQ5M2YnLFxyXG4gICAgRjogJyNmZmYnXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/CGA.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/JMP.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/JMP.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color JMP palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.JMP\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n    0: '#000',\r\n    1: '#191028',\r\n    2: '#46af45',\r\n    3: '#a1d685',\r\n    4: '#453e78',\r\n    5: '#7664fe',\r\n    6: '#833129',\r\n    7: '#9ec2e8',\r\n    8: '#dc534b',\r\n    9: '#e18d79',\r\n    A: '#d6b97b',\r\n    B: '#e9d8a1',\r\n    C: '#216c4b',\r\n    D: '#d365c8',\r\n    E: '#afaab9',\r\n    F: '#f5f4eb'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvSk1QLmpzP2FhMmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9KTVAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIEpNUCBwYWxldHRlIGJ5IFtBcm5lXShodHRwOi8vYW5kcm9pZGFydHMuY29tL3BhbGV0dGUvMTZwYWwuaHRtKVxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzLkpNUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHR5cGUge1BoYXNlci5UeXBlcy5DcmVhdGUuUGFsZXR0ZX1cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMDogJyMwMDAnLFxyXG4gICAgMTogJyMxOTEwMjgnLFxyXG4gICAgMjogJyM0NmFmNDUnLFxyXG4gICAgMzogJyNhMWQ2ODUnLFxyXG4gICAgNDogJyM0NTNlNzgnLFxyXG4gICAgNTogJyM3NjY0ZmUnLFxyXG4gICAgNjogJyM4MzMxMjknLFxyXG4gICAgNzogJyM5ZWMyZTgnLFxyXG4gICAgODogJyNkYzUzNGInLFxyXG4gICAgOTogJyNlMThkNzknLFxyXG4gICAgQTogJyNkNmI5N2InLFxyXG4gICAgQjogJyNlOWQ4YTEnLFxyXG4gICAgQzogJyMyMTZjNGInLFxyXG4gICAgRDogJyNkMzY1YzgnLFxyXG4gICAgRTogJyNhZmFhYjknLFxyXG4gICAgRjogJyNmNWY0ZWInXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/JMP.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/MSX.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/MSX.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette inspired by Japanese computers like the MSX.\r\n *\r\n * @name Phaser.Create.Palettes.MSX\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n    0: '#000',\r\n    1: '#191028',\r\n    2: '#46af45',\r\n    3: '#a1d685',\r\n    4: '#453e78',\r\n    5: '#7664fe',\r\n    6: '#833129',\r\n    7: '#9ec2e8',\r\n    8: '#dc534b',\r\n    9: '#e18d79',\r\n    A: '#d6b97b',\r\n    B: '#e9d8a1',\r\n    C: '#216c4b',\r\n    D: '#d365c8',\r\n    E: '#afaab9',\r\n    F: '#fff'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvTVNYLmpzPzRiZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9NU1guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgaW5zcGlyZWQgYnkgSmFwYW5lc2UgY29tcHV0ZXJzIGxpa2UgdGhlIE1TWC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkNyZWF0ZS5QYWxldHRlcy5NU1hcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLlBhbGV0dGV9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDA6ICcjMDAwJyxcclxuICAgIDE6ICcjMTkxMDI4JyxcclxuICAgIDI6ICcjNDZhZjQ1JyxcclxuICAgIDM6ICcjYTFkNjg1JyxcclxuICAgIDQ6ICcjNDUzZTc4JyxcclxuICAgIDU6ICcjNzY2NGZlJyxcclxuICAgIDY6ICcjODMzMTI5JyxcclxuICAgIDc6ICcjOWVjMmU4JyxcclxuICAgIDg6ICcjZGM1MzRiJyxcclxuICAgIDk6ICcjZTE4ZDc5JyxcclxuICAgIEE6ICcjZDZiOTdiJyxcclxuICAgIEI6ICcjZTlkOGExJyxcclxuICAgIEM6ICcjMjE2YzRiJyxcclxuICAgIEQ6ICcjZDM2NWM4JyxcclxuICAgIEU6ICcjYWZhYWI5JyxcclxuICAgIEY6ICcjZmZmJ1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/MSX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/create/palettes/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/create/palettes/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Create.Palettes\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ARNE16: __webpack_require__(/*! ./Arne16 */ \"./node_modules/phaser/src/create/palettes/Arne16.js\"),\r\n    C64: __webpack_require__(/*! ./C64 */ \"./node_modules/phaser/src/create/palettes/C64.js\"),\r\n    CGA: __webpack_require__(/*! ./CGA */ \"./node_modules/phaser/src/create/palettes/CGA.js\"),\r\n    JMP: __webpack_require__(/*! ./JMP */ \"./node_modules/phaser/src/create/palettes/JMP.js\"),\r\n    MSX: __webpack_require__(/*! ./MSX */ \"./node_modules/phaser/src/create/palettes/MSX.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvaW5kZXguanM/YzBmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBVTtBQUM5QixTQUFTLG1CQUFPLENBQUMsK0RBQU87QUFDeEIsU0FBUyxtQkFBTyxDQUFDLCtEQUFPO0FBQ3hCLFNBQVMsbUJBQU8sQ0FBQywrREFBTztBQUN4QixTQUFTLG1CQUFPLENBQUMsK0RBQU87O0FBRXhCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL3BhbGV0dGVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQVJORTE2OiByZXF1aXJlKCcuL0FybmUxNicpLFxyXG4gICAgQzY0OiByZXF1aXJlKCcuL0M2NCcpLFxyXG4gICAgQ0dBOiByZXF1aXJlKCcuL0NHQScpLFxyXG4gICAgSk1QOiByZXF1aXJlKCcuL0pNUCcpLFxyXG4gICAgTVNYOiByZXF1aXJlKCcuL01TWCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/CubicBezierCurve.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/curves/CubicBezierCurve.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CubicBezier = __webpack_require__(/*! ../math/interpolation/CubicBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A higher-order Bézier curve constructed of four points.\r\n *\r\n * @class CubicBezier\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Math.Vector2|Phaser.Math.Vector2[])} p0 - Start point, or an array of point pairs.\r\n * @param {Phaser.Math.Vector2} p1 - Control Point 1.\r\n * @param {Phaser.Math.Vector2} p2 - Control Point 2.\r\n * @param {Phaser.Math.Vector2} p3 - End Point.\r\n */\r\nvar CubicBezierCurve = new Class({\r\n\r\n    Extends: Curve,\r\n\r\n    initialize:\r\n\r\n    function CubicBezierCurve (p0, p1, p2, p3)\r\n    {\r\n        Curve.call(this, 'CubicBezierCurve');\r\n\r\n        if (Array.isArray(p0))\r\n        {\r\n            p3 = new Vector2(p0[6], p0[7]);\r\n            p2 = new Vector2(p0[4], p0[5]);\r\n            p1 = new Vector2(p0[2], p0[3]);\r\n            p0 = new Vector2(p0[0], p0[1]);\r\n        }\r\n\r\n        /**\r\n         * The start point of this curve.\r\n         *\r\n         * @name Phaser.Curves.CubicBezier#p0\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p0 = p0;\r\n\r\n        /**\r\n         * The first control point of this curve.\r\n         *\r\n         * @name Phaser.Curves.CubicBezier#p1\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p1 = p1;\r\n\r\n        /**\r\n         * The second control point of this curve.\r\n         *\r\n         * @name Phaser.Curves.CubicBezier#p2\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p2 = p2;\r\n\r\n        /**\r\n         * The end point of this curve.\r\n         *\r\n         * @name Phaser.Curves.CubicBezier#p3\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p3 = p3;\r\n    },\r\n\r\n    /**\r\n     * Gets the starting point on the curve.\r\n     *\r\n     * @method Phaser.Curves.CubicBezier#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.p0);\r\n    },\r\n\r\n    /**\r\n     * Returns the resolution of this curve.\r\n     *\r\n     * @method Phaser.Curves.CubicBezier#getResolution\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} divisions - The amount of divisions used by this curve.\r\n     *\r\n     * @return {number} The resolution of the curve.\r\n     */\r\n    getResolution: function (divisions)\r\n    {\r\n        return divisions;\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.CubicBezier#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var p0 = this.p0;\r\n        var p1 = this.p1;\r\n        var p2 = this.p2;\r\n        var p3 = this.p3;\r\n\r\n        return out.set(CubicBezier(t, p0.x, p1.x, p2.x, p3.x), CubicBezier(t, p0.y, p1.y, p2.y, p3.y));\r\n    },\r\n\r\n    /**\r\n     * Draws this curve to the specified graphics object.\r\n     *\r\n     * @method Phaser.Curves.CubicBezier#draw\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The graphics object this curve should be drawn to.\r\n     * @param {integer} [pointsTotal=32] - The number of intermediary points that make up this curve. A higher number of points will result in a smoother curve.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The graphics object this curve was drawn to. Useful for method chaining.\r\n     */\r\n    draw: function (graphics, pointsTotal)\r\n    {\r\n        if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n        var points = this.getPoints(pointsTotal);\r\n\r\n        graphics.beginPath();\r\n        graphics.moveTo(this.p0.x, this.p0.y);\r\n\r\n        for (var i = 1; i < points.length; i++)\r\n        {\r\n            graphics.lineTo(points[i].x, points[i].y);\r\n        }\r\n\r\n        graphics.strokePath();\r\n\r\n        //  So you can chain graphics calls\r\n        return graphics;\r\n    },\r\n\r\n    /**\r\n     * Returns a JSON object that describes this curve.\r\n     *\r\n     * @method Phaser.Curves.CubicBezier#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            type: this.type,\r\n            points: [\r\n                this.p0.x, this.p0.y,\r\n                this.p1.x, this.p1.y,\r\n                this.p2.x, this.p2.y,\r\n                this.p3.x, this.p3.y\r\n            ]\r\n        };\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Generates a curve from a JSON object.\r\n *\r\n * @function Phaser.Curves.CubicBezier.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.CubicBezier} The curve generated from the JSON object.\r\n */\r\nCubicBezierCurve.fromJSON = function (data)\r\n{\r\n    var points = data.points;\r\n\r\n    var p0 = new Vector2(points[0], points[1]);\r\n    var p1 = new Vector2(points[2], points[3]);\r\n    var p2 = new Vector2(points[4], points[5]);\r\n    var p3 = new Vector2(points[6], points[7]);\r\n\r\n    return new CubicBezierCurve(p0, p1, p2, p3);\r\n};\r\n\r\nmodule.exports = CubicBezierCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvQ3ViaWNCZXppZXJDdXJ2ZS5qcz8yMmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdJQUFnRDtBQUMxRSxZQUFZLG1CQUFPLENBQUMsMERBQVM7QUFDN0IsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRDQUE0QztBQUN2RCxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBLGVBQWUsNEJBQTRCO0FBQzNDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGtCQUFrQjs7QUFFMUQ7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3VydmVzL0N1YmljQmV6aWVyQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1YmljQmV6aWVyID0gcmVxdWlyZSgnLi4vbWF0aC9pbnRlcnBvbGF0aW9uL0N1YmljQmV6aWVySW50ZXJwb2xhdGlvbicpO1xyXG52YXIgQ3VydmUgPSByZXF1aXJlKCcuL0N1cnZlJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIGhpZ2hlci1vcmRlciBCw6l6aWVyIGN1cnZlIGNvbnN0cnVjdGVkIG9mIGZvdXIgcG9pbnRzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ3ViaWNCZXppZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkN1cnZlcy5DdXJ2ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkN1cnZlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0gcDAgLSBTdGFydCBwb2ludCwgb3IgYW4gYXJyYXkgb2YgcG9pbnQgcGFpcnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDEgLSBDb250cm9sIFBvaW50IDEuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDIgLSBDb250cm9sIFBvaW50IDIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDMgLSBFbmQgUG9pbnQuXHJcbiAqL1xyXG52YXIgQ3ViaWNCZXppZXJDdXJ2ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ3VydmUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDdWJpY0JlemllckN1cnZlIChwMCwgcDEsIHAyLCBwMylcclxuICAgIHtcclxuICAgICAgICBDdXJ2ZS5jYWxsKHRoaXMsICdDdWJpY0JlemllckN1cnZlJyk7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHAwKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHAzID0gbmV3IFZlY3RvcjIocDBbNl0sIHAwWzddKTtcclxuICAgICAgICAgICAgcDIgPSBuZXcgVmVjdG9yMihwMFs0XSwgcDBbNV0pO1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKHAwWzJdLCBwMFszXSk7XHJcbiAgICAgICAgICAgIHAwID0gbmV3IFZlY3RvcjIocDBbMF0sIHAwWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGFydCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQgb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjcDFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAxID0gcDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzZWNvbmQgY29udHJvbCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwMlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDIgPSBwMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuZCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwM1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDMgPSBwMztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1YmljQmV6aWVyI2dldFN0YXJ0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRTdGFydFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuY29weSh0aGlzLnAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1YmljQmV6aWVyI2dldFJlc29sdXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc2lvbnMgLSBUaGUgYW1vdW50IG9mIGRpdmlzaW9ucyB1c2VkIGJ5IHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY3VydmUuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc29sdXRpb246IGZ1bmN0aW9uIChkaXZpc2lvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRpdmlzaW9ucztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcG9pbnQgYXQgcmVsYXRpdmUgcG9zaXRpb24gaW4gY3VydmUgYWNjb3JkaW5nIHRvIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICh0LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5wMDtcclxuICAgICAgICB2YXIgcDEgPSB0aGlzLnAxO1xyXG4gICAgICAgIHZhciBwMiA9IHRoaXMucDI7XHJcbiAgICAgICAgdmFyIHAzID0gdGhpcy5wMztcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5zZXQoQ3ViaWNCZXppZXIodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCksIEN1YmljQmV6aWVyKHQsIHAwLnksIHAxLnksIHAyLnksIHAzLnkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGlzIGN1cnZlIHRvIHRoZSBzcGVjaWZpZWQgZ3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBHIC0gW2dyYXBoaWNzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gVGhlIGdyYXBoaWNzIG9iamVjdCB0aGlzIGN1cnZlIHNob3VsZCBiZSBkcmF3biB0by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3BvaW50c1RvdGFsPTMyXSAtIFRoZSBudW1iZXIgb2YgaW50ZXJtZWRpYXJ5IHBvaW50cyB0aGF0IG1ha2UgdXAgdGhpcyBjdXJ2ZS4gQSBoaWdoZXIgbnVtYmVyIG9mIHBvaW50cyB3aWxsIHJlc3VsdCBpbiBhIHNtb290aGVyIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0aGlzIGN1cnZlIHdhcyBkcmF3biB0by4gVXNlZnVsIGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGRyYXc6IGZ1bmN0aW9uIChncmFwaGljcywgcG9pbnRzVG90YWwpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBvaW50c1RvdGFsID09PSB1bmRlZmluZWQpIHsgcG9pbnRzVG90YWwgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5nZXRQb2ludHMocG9pbnRzVG90YWwpO1xyXG5cclxuICAgICAgICBncmFwaGljcy5iZWdpblBhdGgoKTtcclxuICAgICAgICBncmFwaGljcy5tb3ZlVG8odGhpcy5wMC54LCB0aGlzLnAwLnkpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdyYXBoaWNzLmxpbmVUbyhwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICAvLyAgU28geW91IGNhbiBjaGFpbiBncmFwaGljcyBjYWxsc1xyXG4gICAgICAgIHJldHVybiBncmFwaGljcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgSlNPTiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wMS54LCB0aGlzLnAxLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAyLngsIHRoaXMucDIueSxcclxuICAgICAgICAgICAgICAgIHRoaXMucDMueCwgdGhpcy5wMy55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgY3VydmUgZnJvbSBhIEpTT04gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkN1cnZlcy5DdWJpY0Jlemllci5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5DdWJpY0Jlemllcn0gVGhlIGN1cnZlIGdlbmVyYXRlZCBmcm9tIHRoZSBKU09OIG9iamVjdC5cclxuICovXHJcbkN1YmljQmV6aWVyQ3VydmUuZnJvbUpTT04gPSBmdW5jdGlvbiAoZGF0YSlcclxue1xyXG4gICAgdmFyIHBvaW50cyA9IGRhdGEucG9pbnRzO1xyXG5cclxuICAgIHZhciBwMCA9IG5ldyBWZWN0b3IyKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcclxuICAgIHZhciBwMSA9IG5ldyBWZWN0b3IyKHBvaW50c1syXSwgcG9pbnRzWzNdKTtcclxuICAgIHZhciBwMiA9IG5ldyBWZWN0b3IyKHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcclxuICAgIHZhciBwMyA9IG5ldyBWZWN0b3IyKHBvaW50c1s2XSwgcG9pbnRzWzddKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUocDAsIHAxLCBwMiwgcDMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdWJpY0JlemllckN1cnZlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/CubicBezierCurve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/Curve.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/curves/Curve.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FromPoints = __webpack_require__(/*! ../geom/rectangle/FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Base Curve class, which all other curve types extend.\r\n *\r\n * Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n *\r\n * @class Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {string} type - [description]\r\n */\r\nvar Curve = new Class({\r\n\r\n    initialize:\r\n\r\n    function Curve (type)\r\n    {\r\n        /**\r\n         * String based identifier for the type of curve.\r\n         *\r\n         * @name Phaser.Curves.Curve#type\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = type;\r\n\r\n        /**\r\n         * The default number of divisions within the curve.\r\n         *\r\n         * @name Phaser.Curves.Curve#defaultDivisions\r\n         * @type {integer}\r\n         * @default 5\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultDivisions = 5;\r\n\r\n        /**\r\n         * The quantity of arc length divisions within the curve.\r\n         *\r\n         * @name Phaser.Curves.Curve#arcLengthDivisions\r\n         * @type {integer}\r\n         * @default 100\r\n         * @since 3.0.0\r\n         */\r\n        this.arcLengthDivisions = 100;\r\n\r\n        /**\r\n         * An array of cached arc length values.\r\n         *\r\n         * @name Phaser.Curves.Curve#cacheArcLengths\r\n         * @type {number[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.cacheArcLengths = [];\r\n\r\n        /**\r\n         * Does the data of this curve need updating?\r\n         *\r\n         * @name Phaser.Curves.Curve#needsUpdate\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.needsUpdate = true;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Curves.Curve#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * A temporary calculation Vector.\r\n         *\r\n         * @name Phaser.Curves.Curve#_tmpVec2A\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tmpVec2A = new Vector2();\r\n\r\n        /**\r\n         * A temporary calculation Vector.\r\n         *\r\n         * @name Phaser.Curves.Curve#_tmpVec2B\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tmpVec2B = new Vector2();\r\n    },\r\n\r\n    /**\r\n     * Draws this curve on the given Graphics object.\r\n     *\r\n     * The curve is drawn using `Graphics.strokePoints` so will be drawn at whatever the present Graphics stroke color is.\r\n     * The Graphics object is not cleared before the draw, so the curve will appear on-top of anything else already rendered to it.\r\n     *\r\n     * @method Phaser.Curves.Curve#draw\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The Graphics instance onto which this curve will be drawn.\r\n     * @param {integer} [pointsTotal=32] - The resolution of the curve. The higher the value the smoother it will render, at the cost of rendering performance.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The Graphics object to which the curve was drawn.\r\n     */\r\n    draw: function (graphics, pointsTotal)\r\n    {\r\n        if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n        //  So you can chain graphics calls\r\n        return graphics.strokePoints(this.getPoints(pointsTotal));\r\n    },\r\n    \r\n    /**\r\n     * Returns a Rectangle where the position and dimensions match the bounds of this Curve.\r\n     *\r\n     * You can control the accuracy of the bounds. The value given is used to work out how many points\r\n     * to plot across the curve. Higher values are more accurate at the cost of calculation speed.\r\n     *\r\n     * @method Phaser.Curves.Curve#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the bounds in. If falsey a new object will be created.\r\n     * @param {integer} [accuracy=16] - The accuracy of the bounds calculations.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} A Rectangle object holding the bounds of this curve. If `out` was given it will be this object.\r\n     */\r\n    getBounds: function (out, accuracy)\r\n    {\r\n        if (!out) { out = new Rectangle(); }\r\n        if (accuracy === undefined) { accuracy = 16; }\r\n\r\n        var len = this.getLength();\r\n\r\n        if (accuracy > len)\r\n        {\r\n            accuracy = len / 2;\r\n        }\r\n\r\n        //  The length of the curve in pixels\r\n        //  So we'll have 1 spaced point per 'accuracy' pixels\r\n\r\n        var spaced = Math.max(1, Math.round(len / accuracy));\r\n\r\n        return FromPoints(this.getSpacedPoints(spaced), out);\r\n    },\r\n\r\n    /**\r\n     * Returns an array of points, spaced out X distance pixels apart.\r\n     * The smaller the distance, the larger the array will be.\r\n     *\r\n     * @method Phaser.Curves.Curve#getDistancePoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} distance - The distance, in pixels, between each point along the curve.\r\n     *\r\n     * @return {Phaser.Geom.Point[]} An Array of Point objects.\r\n     */\r\n    getDistancePoints: function (distance)\r\n    {\r\n        var len = this.getLength();\r\n\r\n        var spaced = Math.max(1, len / distance);\r\n\r\n        return this.getSpacedPoints(spaced);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getEndPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - Optional Vector object to store the result in.\r\n     *\r\n     * @return {Phaser.Math.Vector2} Vector2 containing the coordinates of the curves end point.\r\n     */\r\n    getEndPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return this.getPointAt(1, out);\r\n    },\r\n\r\n    /**\r\n     * Get total curve arc length\r\n     *\r\n     * @method Phaser.Curves.Curve#getLength\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getLength: function ()\r\n    {\r\n        var lengths = this.getLengths();\r\n\r\n        return lengths[lengths.length - 1];\r\n    },\r\n\r\n\r\n    /**\r\n     * Get list of cumulative segment lengths\r\n     *\r\n     * @method Phaser.Curves.Curve#getLengths\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [divisions] - [description]\r\n     *\r\n     * @return {number[]} [description]\r\n     */\r\n    getLengths: function (divisions)\r\n    {\r\n        if (divisions === undefined) { divisions = this.arcLengthDivisions; }\r\n\r\n        if ((this.cacheArcLengths.length === divisions + 1) && !this.needsUpdate)\r\n        {\r\n            return this.cacheArcLengths;\r\n        }\r\n\r\n        this.needsUpdate = false;\r\n\r\n        var cache = [];\r\n        var current;\r\n        var last = this.getPoint(0, this._tmpVec2A);\r\n        var sum = 0;\r\n\r\n        cache.push(0);\r\n\r\n        for (var p = 1; p <= divisions; p++)\r\n        {\r\n            current = this.getPoint(p / divisions, this._tmpVec2B);\r\n\r\n            sum += current.distance(last);\r\n\r\n            cache.push(sum);\r\n\r\n            last.copy(current);\r\n        }\r\n\r\n        this.cacheArcLengths = cache;\r\n\r\n        return cache; // { sums: cache, sum:sum }; Sum is in the last element.\r\n    },\r\n\r\n    // Get point at relative position in curve according to arc length\r\n\r\n    // - u [0 .. 1]\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getPointAt\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} u - [description]\r\n     * @param {Phaser.Math.Vector2} [out] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    getPointAt: function (u, out)\r\n    {\r\n        var t = this.getUtoTmapping(u);\r\n\r\n        return this.getPoint(t, out);\r\n    },\r\n\r\n    // Get sequence of points using getPoint( t )\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} divisions - The number of evenly spaced points from the curve to return. If falsy, step param will be used to calculate the number of points.\r\n     * @param {number} step - Step between points. Used to calculate the number of points to return when divisions is falsy. Ignored if divisions is positive.     \r\n     * @param {(array|Phaser.Math.Vector2[])} [out] - An optional array to store the points in.\r\n     *\r\n     * @return {(array|Phaser.Math.Vector2[])} An array of Points from the curve.\r\n     */\r\n    getPoints: function (divisions, stepRate, out)\r\n    {\r\n        if (out === undefined) { out = []; }\r\n\r\n        //  If divisions is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n        if (!divisions)\r\n        {\r\n            if (!stepRate)\r\n            {\r\n                divisions = this.defaultDivisions;\r\n            }\r\n            else\r\n            {\r\n                divisions = this.getLength() / stepRate;\r\n            }\r\n        }\r\n\r\n        for (var d = 0; d <= divisions; d++)\r\n        {\r\n            out.push(this.getPoint(d / divisions));\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    getRandomPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return this.getPoint(Math.random(), out);\r\n    },\r\n\r\n    // Get sequence of points using getPointAt( u )\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getSpacedPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [divisions] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2[]} [description]\r\n     */\r\n    getSpacedPoints: function (divisions)\r\n    {\r\n        if (divisions === undefined) { divisions = this.defaultDivisions; }\r\n\r\n        var points = [];\r\n\r\n        for (var d = 0; d <= divisions; d++)\r\n        {\r\n            var t = this.getUtoTmapping(d / divisions, null, divisions);\r\n\r\n            points.push(this.getPoint(t));\r\n        }\r\n\r\n        return points;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return this.getPointAt(0, out);\r\n    },\r\n\r\n    /**\r\n     * Returns a unit vector tangent at t\r\n     * In case any sub curve does not implement its tangent derivation,\r\n     * 2 points a small delta apart will be used to find its gradient\r\n     * which seems to give a reasonable approximation\r\n     *\r\n     * @method Phaser.Curves.Curve#getTangent\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - [description]\r\n     * @param {Phaser.Math.Vector2} [out] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} Vector approximating the tangent line at the point t (delta +/- 0.0001)\r\n     */\r\n    getTangent: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var delta = 0.0001;\r\n        var t1 = t - delta;\r\n        var t2 = t + delta;\r\n\r\n        // Capping in case of danger\r\n\r\n        if (t1 < 0)\r\n        {\r\n            t1 = 0;\r\n        }\r\n\r\n        if (t2 > 1)\r\n        {\r\n            t2 = 1;\r\n        }\r\n\r\n        this.getPoint(t1, this._tmpVec2A);\r\n        this.getPoint(t2, out);\r\n\r\n        return out.subtract(this._tmpVec2A).normalize();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getTangentAt\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} u - [description]\r\n     * @param {Phaser.Math.Vector2} [out] - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    getTangentAt: function (u, out)\r\n    {\r\n        var t = this.getUtoTmapping(u);\r\n\r\n        return this.getTangent(t, out);\r\n    },\r\n\r\n    //  Given a distance in pixels, get a t to find p.\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getTFromDistance\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} distance - [description]\r\n     * @param {integer} [divisions] - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getTFromDistance: function (distance, divisions)\r\n    {\r\n        if (distance <= 0)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        return this.getUtoTmapping(0, distance, divisions);\r\n    },\r\n\r\n    // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#getUtoTmapping\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} u - [description]\r\n     * @param {integer} distance - [description]\r\n     * @param {integer} [divisions] - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getUtoTmapping: function (u, distance, divisions)\r\n    {\r\n        var arcLengths = this.getLengths(divisions);\r\n\r\n        var i = 0;\r\n        var il = arcLengths.length;\r\n\r\n        var targetArcLength; // The targeted u distance value to get\r\n\r\n        if (distance)\r\n        {\r\n            //  Cannot overshoot the curve\r\n            targetArcLength = Math.min(distance, arcLengths[il - 1]);\r\n        }\r\n        else\r\n        {\r\n            targetArcLength = u * arcLengths[il - 1];\r\n        }\r\n\r\n        // binary search for the index with largest value smaller than target u distance\r\n\r\n        var low = 0;\r\n        var high = il - 1;\r\n        var comparison;\r\n\r\n        while (low <= high)\r\n        {\r\n            i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n            comparison = arcLengths[i] - targetArcLength;\r\n\r\n            if (comparison < 0)\r\n            {\r\n                low = i + 1;\r\n            }\r\n            else if (comparison > 0)\r\n            {\r\n                high = i - 1;\r\n            }\r\n            else\r\n            {\r\n                high = i;\r\n                break;\r\n            }\r\n        }\r\n\r\n        i = high;\r\n\r\n        if (arcLengths[i] === targetArcLength)\r\n        {\r\n            return i / (il - 1);\r\n        }\r\n\r\n        // we could get finer grain at lengths, or use simple interpolation between two points\r\n\r\n        var lengthBefore = arcLengths[i];\r\n        var lengthAfter = arcLengths[i + 1];\r\n\r\n        var segmentLength = lengthAfter - lengthBefore;\r\n\r\n        // determine where we are between the 'before' and 'after' points\r\n\r\n        var segmentFraction = (targetArcLength - lengthBefore) / segmentLength;\r\n\r\n        // add that fractional amount to t\r\n\r\n        return (i + segmentFraction) / (il - 1);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Curve#updateArcLengths\r\n     * @since 3.0.0\r\n     */\r\n    updateArcLengths: function ()\r\n    {\r\n        this.needsUpdate = true;\r\n\r\n        this.getLengths();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Curve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvQ3VydmUuanM/Nzg0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDdkQsZ0JBQWdCLG1CQUFPLENBQUMsMEZBQTZCO0FBQ3JELGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCOztBQUUxRDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix1QkFBdUI7QUFDMUMscUNBQXFDLGVBQWU7O0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxxQ0FBcUM7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixLQUFLLHdCQUF3QjtBQUNsRCxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQ0FBbUM7O0FBRXpFOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9DdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZyb21Qb2ludHMgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZSBDdXJ2ZSBjbGFzcywgd2hpY2ggYWxsIG90aGVyIGN1cnZlIHR5cGVzIGV4dGVuZC5cclxuICpcclxuICogQmFzZWQgb24gdGhlIHRocmVlLmpzIEN1cnZlIGNsYXNzZXMgY3JlYXRlZCBieSBbeno4NV0oaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZylcclxuICpcclxuICogQGNsYXNzIEN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ3VydmUgKHR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RyaW5nIGJhc2VkIGlkZW50aWZpZXIgZm9yIHRoZSB0eXBlIG9mIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBudW1iZXIgb2YgZGl2aXNpb25zIHdpdGhpbiB0aGUgY3VydmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2RlZmF1bHREaXZpc2lvbnNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCA1XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RGl2aXNpb25zID0gNTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHF1YW50aXR5IG9mIGFyYyBsZW5ndGggZGl2aXNpb25zIHdpdGhpbiB0aGUgY3VydmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2FyY0xlbmd0aERpdmlzaW9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0gMTAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBjYWNoZWQgYXJjIGxlbmd0aCB2YWx1ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2NhY2hlQXJjTGVuZ3Roc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FjaGVBcmNMZW5ndGhzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIGRhdGEgb2YgdGhpcyBjdXJ2ZSBuZWVkIHVwZGF0aW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNuZWVkc1VwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBjYWxjdWxhdGlvbiBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI190bXBWZWMyQVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBjYWxjdWxhdGlvbiBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI190bXBWZWMyQlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkIgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoaXMgY3VydmUgb24gdGhlIGdpdmVuIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgY3VydmUgaXMgZHJhd24gdXNpbmcgYEdyYXBoaWNzLnN0cm9rZVBvaW50c2Agc28gd2lsbCBiZSBkcmF3biBhdCB3aGF0ZXZlciB0aGUgcHJlc2VudCBHcmFwaGljcyBzdHJva2UgY29sb3IgaXMuXHJcbiAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IGlzIG5vdCBjbGVhcmVkIGJlZm9yZSB0aGUgZHJhdywgc28gdGhlIGN1cnZlIHdpbGwgYXBwZWFyIG9uLXRvcCBvZiBhbnl0aGluZyBlbHNlIGFscmVhZHkgcmVuZGVyZWQgdG8gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2RyYXdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IEcgLSBbZ3JhcGhpY3MsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3MgLSBUaGUgR3JhcGhpY3MgaW5zdGFuY2Ugb250byB3aGljaCB0aGlzIGN1cnZlIHdpbGwgYmUgZHJhd24uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtwb2ludHNUb3RhbD0zMl0gLSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY3VydmUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBzbW9vdGhlciBpdCB3aWxsIHJlbmRlciwgYXQgdGhlIGNvc3Qgb2YgcmVuZGVyaW5nIHBlcmZvcm1hbmNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIEdyYXBoaWNzIG9iamVjdCB0byB3aGljaCB0aGUgY3VydmUgd2FzIGRyYXduLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwb2ludHNUb3RhbCA9PT0gdW5kZWZpbmVkKSB7IHBvaW50c1RvdGFsID0gMzI7IH1cclxuXHJcbiAgICAgICAgLy8gIFNvIHlvdSBjYW4gY2hhaW4gZ3JhcGhpY3MgY2FsbHNcclxuICAgICAgICByZXR1cm4gZ3JhcGhpY3Muc3Ryb2tlUG9pbnRzKHRoaXMuZ2V0UG9pbnRzKHBvaW50c1RvdGFsKSk7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBSZWN0YW5nbGUgd2hlcmUgdGhlIHBvc2l0aW9uIGFuZCBkaW1lbnNpb25zIG1hdGNoIHRoZSBib3VuZHMgb2YgdGhpcyBDdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGNvbnRyb2wgdGhlIGFjY3VyYWN5IG9mIHRoZSBib3VuZHMuIFRoZSB2YWx1ZSBnaXZlbiBpcyB1c2VkIHRvIHdvcmsgb3V0IGhvdyBtYW55IHBvaW50c1xyXG4gICAgICogdG8gcGxvdCBhY3Jvc3MgdGhlIGN1cnZlLiBIaWdoZXIgdmFsdWVzIGFyZSBtb3JlIGFjY3VyYXRlIGF0IHRoZSBjb3N0IG9mIGNhbGN1bGF0aW9uIHNwZWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0XSAtIFRoZSBSZWN0YW5nbGUgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgZmFsc2V5IGEgbmV3IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthY2N1cmFjeT0xNl0gLSBUaGUgYWNjdXJhY3kgb2YgdGhlIGJvdW5kcyBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBBIFJlY3RhbmdsZSBvYmplY3QgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoaXMgY3VydmUuIElmIGBvdXRgIHdhcyBnaXZlbiBpdCB3aWxsIGJlIHRoaXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQsIGFjY3VyYWN5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0KSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA9PT0gdW5kZWZpbmVkKSB7IGFjY3VyYWN5ID0gMTY7IH1cclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA+IGxlbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjY3VyYWN5ID0gbGVuIC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGUgbGVuZ3RoIG9mIHRoZSBjdXJ2ZSBpbiBwaXhlbHNcclxuICAgICAgICAvLyAgU28gd2UnbGwgaGF2ZSAxIHNwYWNlZCBwb2ludCBwZXIgJ2FjY3VyYWN5JyBwaXhlbHNcclxuXHJcbiAgICAgICAgdmFyIHNwYWNlZCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQobGVuIC8gYWNjdXJhY3kpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEZyb21Qb2ludHModGhpcy5nZXRTcGFjZWRQb2ludHMoc3BhY2VkKSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50cywgc3BhY2VkIG91dCBYIGRpc3RhbmNlIHBpeGVscyBhcGFydC5cclxuICAgICAqIFRoZSBzbWFsbGVyIHRoZSBkaXN0YW5jZSwgdGhlIGxhcmdlciB0aGUgYXJyYXkgd2lsbCBiZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0RGlzdGFuY2VQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gZGlzdGFuY2UgLSBUaGUgZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiBlYWNoIHBvaW50IGFsb25nIHRoZSBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBBcnJheSBvZiBQb2ludCBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZVBvaW50czogZnVuY3Rpb24gKGRpc3RhbmNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpO1xyXG5cclxuICAgICAgICB2YXIgc3BhY2VkID0gTWF0aC5tYXgoMSwgbGVuIC8gZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTcGFjZWRQb2ludHMoc3BhY2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldEVuZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gT3B0aW9uYWwgVmVjdG9yIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFZlY3RvcjIgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnZlcyBlbmQgcG9pbnQuXHJcbiAgICAgKi9cclxuICAgIGdldEVuZFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50QXQoMSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdG90YWwgY3VydmUgYXJjIGxlbmd0aFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxlbmd0aHMgPSB0aGlzLmdldExlbmd0aHMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aHNbbGVuZ3Rocy5sZW5ndGggLSAxXTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGxpc3Qgb2YgY3VtdWxhdGl2ZSBzZWdtZW50IGxlbmd0aHNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0TGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGhzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9uczsgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aCA9PT0gZGl2aXNpb25zICsgMSkgJiYgIXRoaXMubmVlZHNVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IFtdO1xyXG4gICAgICAgIHZhciBjdXJyZW50O1xyXG4gICAgICAgIHZhciBsYXN0ID0gdGhpcy5nZXRQb2ludCgwLCB0aGlzLl90bXBWZWMyQSk7XHJcbiAgICAgICAgdmFyIHN1bSA9IDA7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1c2goMCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHAgPSAxOyBwIDw9IGRpdmlzaW9uczsgcCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuZ2V0UG9pbnQocCAvIGRpdmlzaW9ucywgdGhpcy5fdG1wVmVjMkIpO1xyXG5cclxuICAgICAgICAgICAgc3VtICs9IGN1cnJlbnQuZGlzdGFuY2UobGFzdCk7XHJcblxyXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHN1bSk7XHJcblxyXG4gICAgICAgICAgICBsYXN0LmNvcHkoY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGU7IC8vIHsgc3VtczogY2FjaGUsIHN1bTpzdW0gfTsgU3VtIGlzIGluIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJjIGxlbmd0aFxyXG5cclxuICAgIC8vIC0gdSBbMCAuLiAxXVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRQb2ludEF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludEF0OiBmdW5jdGlvbiAodSwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyh1KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQodCwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gR2V0IHNlcXVlbmNlIG9mIHBvaW50cyB1c2luZyBnZXRQb2ludCggdCApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkaXZpc2lvbnMgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGZyb20gdGhlIGN1cnZlIHRvIHJldHVybi4gSWYgZmFsc3ksIHN0ZXAgcGFyYW0gd2lsbCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBvaW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gU3RlcCBiZXR3ZWVuIHBvaW50cy4gVXNlZCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwb2ludHMgdG8gcmV0dXJuIHdoZW4gZGl2aXNpb25zIGlzIGZhbHN5LiBJZ25vcmVkIGlmIGRpdmlzaW9ucyBpcyBwb3NpdGl2ZS4gICAgIFxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSB0byBzdG9yZSB0aGUgcG9pbnRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuTWF0aC5WZWN0b3IyW10pfSBBbiBhcnJheSBvZiBQb2ludHMgZnJvbSB0aGUgY3VydmUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKGRpdmlzaW9ucywgc3RlcFJhdGUsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAgICAgLy8gIElmIGRpdmlzaW9ucyBpcyBhIGZhbHNleSB2YWx1ZSAoZmFsc2UsIG51bGwsIDAsIHVuZGVmaW5lZCwgZXRjKSB0aGVuIHdlIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgc3RlcFJhdGUgaW5zdGVhZC5cclxuICAgICAgICBpZiAoIWRpdmlzaW9ucylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghc3RlcFJhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRpdmlzaW9ucyA9IHRoaXMuZGVmYXVsdERpdmlzaW9ucztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRpdmlzaW9ucyA9IHRoaXMuZ2V0TGVuZ3RoKCkgLyBzdGVwUmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh0aGlzLmdldFBvaW50KGQgLyBkaXZpc2lvbnMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50KE1hdGgucmFuZG9tKCksIG91dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnRBdCggdSApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFNwYWNlZFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSB0aGlzLmRlZmF1bHREaXZpc2lvbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyhkIC8gZGl2aXNpb25zLCBudWxsLCBkaXZpc2lvbnMpO1xyXG5cclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5nZXRQb2ludCh0KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnRBdCgwLCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB1bml0IHZlY3RvciB0YW5nZW50IGF0IHRcclxuICAgICAqIEluIGNhc2UgYW55IHN1YiBjdXJ2ZSBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIHRhbmdlbnQgZGVyaXZhdGlvbixcclxuICAgICAqIDIgcG9pbnRzIGEgc21hbGwgZGVsdGEgYXBhcnQgd2lsbCBiZSB1c2VkIHRvIGZpbmQgaXRzIGdyYWRpZW50XHJcbiAgICAgKiB3aGljaCBzZWVtcyB0byBnaXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFRhbmdlbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBWZWN0b3IgYXBwcm94aW1hdGluZyB0aGUgdGFuZ2VudCBsaW5lIGF0IHRoZSBwb2ludCB0IChkZWx0YSArLy0gMC4wMDAxKVxyXG4gICAgICovXHJcbiAgICBnZXRUYW5nZW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YSA9IDAuMDAwMTtcclxuICAgICAgICB2YXIgdDEgPSB0IC0gZGVsdGE7XHJcbiAgICAgICAgdmFyIHQyID0gdCArIGRlbHRhO1xyXG5cclxuICAgICAgICAvLyBDYXBwaW5nIGluIGNhc2Ugb2YgZGFuZ2VyXHJcblxyXG4gICAgICAgIGlmICh0MSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0MSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodDIgPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdDIgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQb2ludCh0MSwgdGhpcy5fdG1wVmVjMkEpO1xyXG4gICAgICAgIHRoaXMuZ2V0UG9pbnQodDIsIG91dCk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuc3VidHJhY3QodGhpcy5fdG1wVmVjMkEpLm5vcm1hbGl6ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0VGFuZ2VudEF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRUYW5nZW50QXQ6IGZ1bmN0aW9uICh1LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKHUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUYW5nZW50KHQsIG91dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBHaXZlbiBhIGRpc3RhbmNlIGluIHBpeGVscywgZ2V0IGEgdCB0byBmaW5kIHAuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0VEZyb21EaXN0YW5jZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkaXN0YW5jZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpdmlzaW9uc10gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFRGcm9tRGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSwgZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXN0YW5jZSA8PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVdG9UbWFwcGluZygwLCBkaXN0YW5jZSwgZGl2aXNpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gR2l2ZW4gdSAoIDAgLi4gMSApLCBnZXQgYSB0IHRvIGZpbmQgcC4gVGhpcyBnaXZlcyB5b3UgcG9pbnRzIHdoaWNoIGFyZSBlcXVpZGlzdGFudFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRVdG9UbWFwcGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRpc3RhbmNlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0VXRvVG1hcHBpbmc6IGZ1bmN0aW9uICh1LCBkaXN0YW5jZSwgZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmNMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKGRpdmlzaW9ucyk7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIgaWwgPSBhcmNMZW5ndGhzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldEFyY0xlbmd0aDsgLy8gVGhlIHRhcmdldGVkIHUgZGlzdGFuY2UgdmFsdWUgdG8gZ2V0XHJcblxyXG4gICAgICAgIGlmIChkaXN0YW5jZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDYW5ub3Qgb3ZlcnNob290IHRoZSBjdXJ2ZVxyXG4gICAgICAgICAgICB0YXJnZXRBcmNMZW5ndGggPSBNYXRoLm1pbihkaXN0YW5jZSwgYXJjTGVuZ3Roc1tpbCAtIDFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0QXJjTGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbaWwgLSAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBpbmRleCB3aXRoIGxhcmdlc3QgdmFsdWUgc21hbGxlciB0aGFuIHRhcmdldCB1IGRpc3RhbmNlXHJcblxyXG4gICAgICAgIHZhciBsb3cgPSAwO1xyXG4gICAgICAgIHZhciBoaWdoID0gaWwgLSAxO1xyXG4gICAgICAgIHZhciBjb21wYXJpc29uO1xyXG5cclxuICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpID0gTWF0aC5mbG9vcihsb3cgKyAoaGlnaCAtIGxvdykgLyAyKTsgLy8gbGVzcyBsaWtlbHkgdG8gb3ZlcmZsb3csIHRob3VnaCBwcm9iYWJseSBub3QgaXNzdWUgaGVyZSwgSlMgZG9lc24ndCByZWFsbHkgaGF2ZSBpbnRlZ2VycywgYWxsIG51bWJlcnMgYXJlIGZsb2F0c1xyXG5cclxuICAgICAgICAgICAgY29tcGFyaXNvbiA9IGFyY0xlbmd0aHNbaV0gLSB0YXJnZXRBcmNMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tcGFyaXNvbiA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBoaWdoID0gaSAtIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBoaWdoID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gaGlnaDtcclxuXHJcbiAgICAgICAgaWYgKGFyY0xlbmd0aHNbaV0gPT09IHRhcmdldEFyY0xlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBpIC8gKGlsIC0gMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBjb3VsZCBnZXQgZmluZXIgZ3JhaW4gYXQgbGVuZ3Rocywgb3IgdXNlIHNpbXBsZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xyXG5cclxuICAgICAgICB2YXIgbGVuZ3RoQmVmb3JlID0gYXJjTGVuZ3Roc1tpXTtcclxuICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXIgPSBhcmNMZW5ndGhzW2kgKyAxXTtcclxuXHJcbiAgICAgICAgdmFyIHNlZ21lbnRMZW5ndGggPSBsZW5ndGhBZnRlciAtIGxlbmd0aEJlZm9yZTtcclxuXHJcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXJlIHdlIGFyZSBiZXR3ZWVuIHRoZSAnYmVmb3JlJyBhbmQgJ2FmdGVyJyBwb2ludHNcclxuXHJcbiAgICAgICAgdmFyIHNlZ21lbnRGcmFjdGlvbiA9ICh0YXJnZXRBcmNMZW5ndGggLSBsZW5ndGhCZWZvcmUpIC8gc2VnbWVudExlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gYWRkIHRoYXQgZnJhY3Rpb25hbCBhbW91bnQgdG8gdFxyXG5cclxuICAgICAgICByZXR1cm4gKGkgKyBzZWdtZW50RnJhY3Rpb24pIC8gKGlsIC0gMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSN1cGRhdGVBcmNMZW5ndGhzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQXJjTGVuZ3RoczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRMZW5ndGhzKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/Curve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/EllipseCurve.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/curves/EllipseCurve.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar DegToRad = __webpack_require__(/*! ../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar RadToDeg = __webpack_require__(/*! ../math/RadToDeg */ \"./node_modules/phaser/src/math/RadToDeg.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Elliptical Curve derived from the Base Curve class.\r\n * \r\n * See https://en.wikipedia.org/wiki/Elliptic_curve for more details.\r\n *\r\n * @class Ellipse\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.Curves.EllipseCurveConfig)} [x=0] - The x coordinate of the ellipse, or an Ellipse Curve configuration object.\r\n * @param {number} [y=0] - The y coordinate of the ellipse.\r\n * @param {number} [xRadius=0] - The horizontal radius of ellipse.\r\n * @param {number} [yRadius=0] - The vertical radius of ellipse.\r\n * @param {integer} [startAngle=0] - The start angle of the ellipse, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the ellipse, in degrees.\r\n * @param {boolean} [clockwise=false] - Whether the ellipse angles are given as clockwise (`true`) or counter-clockwise (`false`).\r\n * @param {integer} [rotation=0] - The rotation of the ellipse, in degrees.\r\n */\r\nvar EllipseCurve = new Class({\r\n\r\n    Extends: Curve,\r\n\r\n    initialize:\r\n\r\n    function EllipseCurve (x, y, xRadius, yRadius, startAngle, endAngle, clockwise, rotation)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            var config = x;\r\n\r\n            x = GetValue(config, 'x', 0);\r\n            y = GetValue(config, 'y', 0);\r\n            xRadius = GetValue(config, 'xRadius', 0);\r\n            yRadius = GetValue(config, 'yRadius', xRadius);\r\n            startAngle = GetValue(config, 'startAngle', 0);\r\n            endAngle = GetValue(config, 'endAngle', 360);\r\n            clockwise = GetValue(config, 'clockwise', false);\r\n            rotation = GetValue(config, 'rotation', 0);\r\n        }\r\n        else\r\n        {\r\n            if (yRadius === undefined) { yRadius = xRadius; }\r\n            if (startAngle === undefined) { startAngle = 0; }\r\n            if (endAngle === undefined) { endAngle = 360; }\r\n            if (clockwise === undefined) { clockwise = false; }\r\n            if (rotation === undefined) { rotation = 0; }\r\n        }\r\n\r\n        Curve.call(this, 'EllipseCurve');\r\n\r\n        //  Center point\r\n\r\n        /**\r\n         * The center point of the ellipse. Used for calculating rotation.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#p0\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p0 = new Vector2(x, y);\r\n\r\n        /**\r\n         * The horizontal radius of the ellipse.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_xRadius\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._xRadius = xRadius;\r\n\r\n        /**\r\n         * The vertical radius of the ellipse.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_yRadius\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._yRadius = yRadius;\r\n\r\n        //  Radians\r\n\r\n        /**\r\n         * The starting angle of the ellipse in radians.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_startAngle\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._startAngle = DegToRad(startAngle);\r\n\r\n        /**\r\n         * The end angle of the ellipse in radians.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_endAngle\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._endAngle = DegToRad(endAngle);\r\n\r\n        /**\r\n         * Anti-clockwise direction.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_clockwise\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._clockwise = clockwise;\r\n\r\n        /**\r\n         * The rotation of the arc.\r\n         *\r\n         * @name Phaser.Curves.Ellipse#_rotation\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._rotation = DegToRad(rotation);\r\n    },\r\n\r\n    /**\r\n     * Gets the starting point on the curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return this.getPoint(0, out);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Ellipse#getResolution\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} divisions - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getResolution: function (divisions)\r\n    {\r\n        return divisions * 2;\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var twoPi = Math.PI * 2;\r\n        var deltaAngle = this._endAngle - this._startAngle;\r\n        var samePoints = Math.abs(deltaAngle) < Number.EPSILON;\r\n\r\n        // ensures that deltaAngle is 0 .. 2 PI\r\n        while (deltaAngle < 0)\r\n        {\r\n            deltaAngle += twoPi;\r\n        }\r\n\r\n        while (deltaAngle > twoPi)\r\n        {\r\n            deltaAngle -= twoPi;\r\n        }\r\n\r\n        if (deltaAngle < Number.EPSILON)\r\n        {\r\n            if (samePoints)\r\n            {\r\n                deltaAngle = 0;\r\n            }\r\n            else\r\n            {\r\n                deltaAngle = twoPi;\r\n            }\r\n        }\r\n\r\n        if (this._clockwise && !samePoints)\r\n        {\r\n            if (deltaAngle === twoPi)\r\n            {\r\n                deltaAngle = - twoPi;\r\n            }\r\n            else\r\n            {\r\n                deltaAngle = deltaAngle - twoPi;\r\n            }\r\n        }\r\n\r\n        var angle = this._startAngle + t * deltaAngle;\r\n        var x = this.p0.x + this._xRadius * Math.cos(angle);\r\n        var y = this.p0.y + this._yRadius * Math.sin(angle);\r\n\r\n        if (this._rotation !== 0)\r\n        {\r\n            var cos = Math.cos(this._rotation);\r\n            var sin = Math.sin(this._rotation);\r\n\r\n            var tx = x - this.p0.x;\r\n            var ty = y - this.p0.y;\r\n\r\n            // Rotate the point about the center of the ellipse.\r\n            x = tx * cos - ty * sin + this.p0.x;\r\n            y = tx * sin + ty * cos + this.p0.y;\r\n        }\r\n\r\n        return out.set(x, y);\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal radius of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setXRadius\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The horizontal radius of this curve.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setXRadius: function (value)\r\n    {\r\n        this.xRadius = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical radius of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setYRadius\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The vertical radius of this curve.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setYRadius: function (value)\r\n    {\r\n        this.yRadius = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the width of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setWidth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The width of this curve.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setWidth: function (value)\r\n    {\r\n        this.xRadius = value * 2;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the height of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setHeight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The height of this curve.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setHeight: function (value)\r\n    {\r\n        this.yRadius = value * 2;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the start angle of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setStartAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The start angle of this curve, in radians.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setStartAngle: function (value)\r\n    {\r\n        this.startAngle = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the end angle of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setEndAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The end angle of this curve, in radians.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setEndAngle: function (value)\r\n    {\r\n        this.endAngle = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets if this curve extends clockwise or anti-clockwise.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setClockwise\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The clockwise state of this curve.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setClockwise: function (value)\r\n    {\r\n        this.clockwise = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the rotation of this curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#setRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The rotation of this curve, in radians.\r\n     *\r\n     * @return {Phaser.Curves.Ellipse} This curve object.\r\n     */\r\n    setRotation: function (value)\r\n    {\r\n        this.rotation = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The x coordinate of the center of the ellipse.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.p0.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.p0.x = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y coordinate of the center of the ellipse.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.p0.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.p0.y = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal radius of the ellipse.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#xRadius\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    xRadius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._xRadius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._xRadius = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical radius of the ellipse.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#yRadius\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    yRadius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._yRadius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._yRadius = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The start angle of the ellipse in degrees.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#startAngle\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    startAngle: {\r\n\r\n        get: function ()\r\n        {\r\n            return RadToDeg(this._startAngle);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._startAngle = DegToRad(value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The end angle of the ellipse in degrees.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#endAngle\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    endAngle: {\r\n\r\n        get: function ()\r\n        {\r\n            return RadToDeg(this._endAngle);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._endAngle = DegToRad(value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * `true` if the ellipse rotation is clockwise or `false` if anti-clockwise.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#clockwise\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    clockwise: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._clockwise;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._clockwise = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The rotation of the ellipse, relative to the center, in degrees.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#angle\r\n     * @type {number}\r\n     * @since 3.14.0\r\n     */\r\n    angle: {\r\n\r\n        get: function ()\r\n        {\r\n            return RadToDeg(this._rotation);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._rotation = DegToRad(value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The rotation of the ellipse, relative to the center, in radians.\r\n     *\r\n     * @name Phaser.Curves.Ellipse#rotation\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    rotation: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._rotation;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._rotation = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * JSON serialization of the curve.\r\n     *\r\n     * @method Phaser.Curves.Ellipse#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONEllipseCurve} The JSON object containing this curve data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            type: this.type,\r\n            x: this.p0.x,\r\n            y: this.p0.y,\r\n            xRadius: this._xRadius,\r\n            yRadius: this._yRadius,\r\n            startAngle: RadToDeg(this._startAngle),\r\n            endAngle: RadToDeg(this._endAngle),\r\n            clockwise: this._clockwise,\r\n            rotation: RadToDeg(this._rotation)\r\n        };\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Creates a curve from the provided Ellipse Curve Configuration object.\r\n *\r\n * @function Phaser.Curves.Ellipse.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONEllipseCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Ellipse} The ellipse curve constructed from the configuration object.\r\n */\r\nEllipseCurve.fromJSON = function (data)\r\n{\r\n    return new EllipseCurve(data);\r\n};\r\n\r\nmodule.exports = EllipseCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvRWxsaXBzZUN1cnZlLmpzP2ViNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxvRUFBa0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsb0VBQWtCO0FBQ3pDLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0RBQWdEO0FBQzNELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0QsMkNBQTJDLGdCQUFnQjtBQUMzRCx5Q0FBeUMsZ0JBQWdCO0FBQ3pELDBDQUEwQyxtQkFBbUI7QUFDN0QseUNBQXlDLGNBQWM7QUFDdkQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUNBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hEO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9FbGxpcHNlQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgUmFkVG9EZWcgPSByZXF1aXJlKCcuLi9tYXRoL1JhZFRvRGVnJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFbGxpcHRpY2FsIEN1cnZlIGRlcml2ZWQgZnJvbSB0aGUgQmFzZSBDdXJ2ZSBjbGFzcy5cclxuICogXHJcbiAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbGxpcHRpY19jdXJ2ZSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRWxsaXBzZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ3VydmVzLkN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5DdXJ2ZXMuRWxsaXBzZUN1cnZlQ29uZmlnKX0gW3g9MF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbGxpcHNlLCBvciBhbiBFbGxpcHNlIEN1cnZlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3hSYWRpdXM9MF0gLSBUaGUgaG9yaXpvbnRhbCByYWRpdXMgb2YgZWxsaXBzZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5UmFkaXVzPTBdIC0gVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRBbmdsZT0zNjBdIC0gVGhlIGVuZCBhbmdsZSBvZiB0aGUgZWxsaXBzZSwgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbY2xvY2t3aXNlPWZhbHNlXSAtIFdoZXRoZXIgdGhlIGVsbGlwc2UgYW5nbGVzIGFyZSBnaXZlbiBhcyBjbG9ja3dpc2UgKGB0cnVlYCkgb3IgY291bnRlci1jbG9ja3dpc2UgKGBmYWxzZWApLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtyb3RhdGlvbj0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgaW4gZGVncmVlcy5cclxuICovXHJcbnZhciBFbGxpcHNlQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRWxsaXBzZUN1cnZlICh4LCB5LCB4UmFkaXVzLCB5UmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgY2xvY2t3aXNlLCByb3RhdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gR2V0VmFsdWUoY29uZmlnLCAneCcsIDApO1xyXG4gICAgICAgICAgICB5ID0gR2V0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICB4UmFkaXVzID0gR2V0VmFsdWUoY29uZmlnLCAneFJhZGl1cycsIDApO1xyXG4gICAgICAgICAgICB5UmFkaXVzID0gR2V0VmFsdWUoY29uZmlnLCAneVJhZGl1cycsIHhSYWRpdXMpO1xyXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gR2V0VmFsdWUoY29uZmlnLCAnc3RhcnRBbmdsZScsIDApO1xyXG4gICAgICAgICAgICBlbmRBbmdsZSA9IEdldFZhbHVlKGNvbmZpZywgJ2VuZEFuZ2xlJywgMzYwKTtcclxuICAgICAgICAgICAgY2xvY2t3aXNlID0gR2V0VmFsdWUoY29uZmlnLCAnY2xvY2t3aXNlJywgZmFsc2UpO1xyXG4gICAgICAgICAgICByb3RhdGlvbiA9IEdldFZhbHVlKGNvbmZpZywgJ3JvdGF0aW9uJywgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh5UmFkaXVzID09PSB1bmRlZmluZWQpIHsgeVJhZGl1cyA9IHhSYWRpdXM7IH1cclxuICAgICAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPT09IHVuZGVmaW5lZCkgeyBzdGFydEFuZ2xlID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDM2MDsgfVxyXG4gICAgICAgICAgICBpZiAoY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgY2xvY2t3aXNlID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgaWYgKHJvdGF0aW9uID09PSB1bmRlZmluZWQpIHsgcm90YXRpb24gPSAwOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDdXJ2ZS5jYWxsKHRoaXMsICdFbGxpcHNlQ3VydmUnKTtcclxuXHJcbiAgICAgICAgLy8gIENlbnRlciBwb2ludFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2VudGVyIHBvaW50IG9mIHRoZSBlbGxpcHNlLiBVc2VkIGZvciBjYWxjdWxhdGluZyByb3RhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBuZXcgVmVjdG9yMih4LCB5KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI194UmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3hSYWRpdXMgPSB4UmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI195UmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3lSYWRpdXMgPSB5UmFkaXVzO1xyXG5cclxuICAgICAgICAvLyAgUmFkaWFuc1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgYW5nbGUgb2YgdGhlIGVsbGlwc2UgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfc3RhcnRBbmdsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zdGFydEFuZ2xlID0gRGVnVG9SYWQoc3RhcnRBbmdsZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBlbmQgYW5nbGUgb2YgdGhlIGVsbGlwc2UgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfZW5kQW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBEZWdUb1JhZChlbmRBbmdsZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFudGktY2xvY2t3aXNlIGRpcmVjdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfY2xvY2t3aXNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jbG9ja3dpc2UgPSBjbG9ja3dpc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgYXJjLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI19yb3RhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IERlZ1RvUmFkKHJvdGF0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQoMCwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzaW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zICogMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcG9pbnQgYXQgcmVsYXRpdmUgcG9zaXRpb24gaW4gY3VydmUgYWNjb3JkaW5nIHRvIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcclxuICAgICAgICB2YXIgZGVsdGFBbmdsZSA9IHRoaXMuX2VuZEFuZ2xlIC0gdGhpcy5fc3RhcnRBbmdsZTtcclxuICAgICAgICB2YXIgc2FtZVBvaW50cyA9IE1hdGguYWJzKGRlbHRhQW5nbGUpIDwgTnVtYmVyLkVQU0lMT047XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZXMgdGhhdCBkZWx0YUFuZ2xlIGlzIDAgLi4gMiBQSVxyXG4gICAgICAgIHdoaWxlIChkZWx0YUFuZ2xlIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlbHRhQW5nbGUgKz0gdHdvUGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZGVsdGFBbmdsZSA+IHR3b1BpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsdGFBbmdsZSAtPSB0d29QaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWx0YUFuZ2xlIDwgTnVtYmVyLkVQU0lMT04pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc2FtZVBvaW50cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YUFuZ2xlID0gdHdvUGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jbG9ja3dpc2UgJiYgIXNhbWVQb2ludHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZGVsdGFBbmdsZSA9PT0gdHdvUGkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhQW5nbGUgPSAtIHR3b1BpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IGRlbHRhQW5nbGUgLSB0d29QaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGFuZ2xlID0gdGhpcy5fc3RhcnRBbmdsZSArIHQgKiBkZWx0YUFuZ2xlO1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy5wMC54ICsgdGhpcy5feFJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICB2YXIgeSA9IHRoaXMucDAueSArIHRoaXMuX3lSYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGlvbiAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGlzLl9yb3RhdGlvbik7XHJcbiAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbih0aGlzLl9yb3RhdGlvbik7XHJcblxyXG4gICAgICAgICAgICB2YXIgdHggPSB4IC0gdGhpcy5wMC54O1xyXG4gICAgICAgICAgICB2YXIgdHkgPSB5IC0gdGhpcy5wMC55O1xyXG5cclxuICAgICAgICAgICAgLy8gUm90YXRlIHRoZSBwb2ludCBhYm91dCB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAgICB4ID0gdHggKiBjb3MgLSB0eSAqIHNpbiArIHRoaXMucDAueDtcclxuICAgICAgICAgICAgeSA9IHR4ICogc2luICsgdHkgKiBjb3MgKyB0aGlzLnAwLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldCh4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldFhSYWRpdXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFhSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnhSYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgcmFkaXVzIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2Ujc2V0WVJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFlSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnlSYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGggb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRXaWR0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHdpZHRoIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnhSYWRpdXMgPSB2YWx1ZSAqIDI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldEhlaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGhlaWdodCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhlaWdodDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueVJhZGl1cyA9IHZhbHVlICogMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc3RhcnQgYW5nbGUgb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRTdGFydEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgc3RhcnQgYW5nbGUgb2YgdGhpcyBjdXJ2ZSwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLkVsbGlwc2V9IFRoaXMgY3VydmUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdGFydEFuZ2xlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGVuZCBhbmdsZSBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldEVuZEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgZW5kIGFuZ2xlIG9mIHRoaXMgY3VydmUsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RW5kQW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVuZEFuZ2xlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgaWYgdGhpcyBjdXJ2ZSBleHRlbmRzIGNsb2Nrd2lzZSBvciBhbnRpLWNsb2Nrd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRDbG9ja3dpc2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgY2xvY2t3aXNlIHN0YXRlIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2xvY2t3aXNlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jbG9ja3dpc2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcm90YXRpb24gb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRSb3RhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJvdGF0aW9uIG9mIHRoaXMgY3VydmUsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRpb246IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAwLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnAwLnggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAwLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnAwLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeFJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4UmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl94UmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5feFJhZGl1cyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeVJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5UmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl95UmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5feVJhZGl1cyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3N0YXJ0QW5nbGVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gUmFkVG9EZWcodGhpcy5fc3RhcnRBbmdsZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFuZ2xlID0gRGVnVG9SYWQodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVuZCBhbmdsZSBvZiB0aGUgZWxsaXBzZSBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNlbmRBbmdsZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBlbmRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gUmFkVG9EZWcodGhpcy5fZW5kQW5nbGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBEZWdUb1JhZCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBgdHJ1ZWAgaWYgdGhlIGVsbGlwc2Ugcm90YXRpb24gaXMgY2xvY2t3aXNlIG9yIGBmYWxzZWAgaWYgYW50aS1jbG9ja3dpc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI2Nsb2Nrd2lzZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2xvY2t3aXNlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9ja3dpc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jbG9ja3dpc2UgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgcmVsYXRpdmUgdG8gdGhlIGNlbnRlciwgaW4gZGVncmVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjYW5nbGVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBSYWRUb0RlZyh0aGlzLl9yb3RhdGlvbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IERlZ1RvUmFkKHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgcmVsYXRpdmUgdG8gdGhlIGNlbnRlciwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2Ujcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcm90YXRpb24gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEpTT04gc2VyaWFsaXphdGlvbiBvZiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05FbGxpcHNlQ3VydmV9IFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgeDogdGhpcy5wMC54LFxyXG4gICAgICAgICAgICB5OiB0aGlzLnAwLnksXHJcbiAgICAgICAgICAgIHhSYWRpdXM6IHRoaXMuX3hSYWRpdXMsXHJcbiAgICAgICAgICAgIHlSYWRpdXM6IHRoaXMuX3lSYWRpdXMsXHJcbiAgICAgICAgICAgIHN0YXJ0QW5nbGU6IFJhZFRvRGVnKHRoaXMuX3N0YXJ0QW5nbGUpLFxyXG4gICAgICAgICAgICBlbmRBbmdsZTogUmFkVG9EZWcodGhpcy5fZW5kQW5nbGUpLFxyXG4gICAgICAgICAgICBjbG9ja3dpc2U6IHRoaXMuX2Nsb2Nrd2lzZSxcclxuICAgICAgICAgICAgcm90YXRpb246IFJhZFRvRGVnKHRoaXMuX3JvdGF0aW9uKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgY3VydmUgZnJvbSB0aGUgcHJvdmlkZWQgRWxsaXBzZSBDdXJ2ZSBDb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZS5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05FbGxpcHNlQ3VydmV9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIGN1cnZlIGRhdGEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhlIGVsbGlwc2UgY3VydmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG5FbGxpcHNlQ3VydmUuZnJvbUpTT04gPSBmdW5jdGlvbiAoZGF0YSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlQ3VydmUoZGF0YSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2VDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/EllipseCurve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/LineCurve.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/curves/LineCurve.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar FromPoints = __webpack_require__(/*! ../geom/rectangle/FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\nvar tmpVec2 = new Vector2();\r\n\r\n/**\r\n * @classdesc\r\n * A LineCurve is a \"curve\" comprising exactly two points (a line segment).\r\n *\r\n * @class Line\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Math.Vector2|number[])} p0 - The first endpoint.\r\n * @param {Phaser.Math.Vector2} [p1] - The second endpoint.\r\n */\r\nvar LineCurve = new Class({\r\n\r\n    Extends: Curve,\r\n\r\n    initialize:\r\n\r\n    //  vec2s or array\r\n    function LineCurve (p0, p1)\r\n    {\r\n        Curve.call(this, 'LineCurve');\r\n\r\n        if (Array.isArray(p0))\r\n        {\r\n            p1 = new Vector2(p0[2], p0[3]);\r\n            p0 = new Vector2(p0[0], p0[1]);\r\n        }\r\n\r\n        /**\r\n         * The first endpoint.\r\n         *\r\n         * @name Phaser.Curves.Line#p0\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p0 = p0;\r\n\r\n        /**\r\n         * The second endpoint.\r\n         *\r\n         * @name Phaser.Curves.Line#p1\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p1 = p1;\r\n\r\n        //  Override default Curve.arcLengthDivisions\r\n\r\n        /**\r\n         * The quantity of arc length divisions within the curve.\r\n         *\r\n         * @name Phaser.Curves.Line#arcLengthDivisions\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.arcLengthDivisions = 1;\r\n    },\r\n\r\n    /**\r\n     * Returns a Rectangle where the position and dimensions match the bounds of this Curve.\r\n     *\r\n     * @method Phaser.Curves.Line#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} [out] - A Rectangle object to store the bounds in. If not given a new Rectangle will be created.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} A Rectangle object holding the bounds of this curve. If `out` was given it will be this object.\r\n     */\r\n    getBounds: function (out)\r\n    {\r\n        if (out === undefined) { out = new Rectangle(); }\r\n\r\n        return FromPoints([ this.p0, this.p1 ], out);\r\n    },\r\n\r\n    /**\r\n     * Gets the starting point on the curve.\r\n     *\r\n     * @method Phaser.Curves.Line#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.p0);\r\n    },\r\n\r\n    /**\r\n     * Gets the resolution of the line.\r\n     *\r\n     * @method Phaser.Curves.Line#getResolution\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [divisions=1] - The number of divisions to consider.\r\n     *\r\n     * @return {number} The resolution. Equal to the number of divisions.\r\n     */\r\n    getResolution: function (divisions)\r\n    {\r\n        if (divisions === undefined) { divisions = 1; }\r\n\r\n        return divisions;\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.Line#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        if (t === 1)\r\n        {\r\n            return out.copy(this.p1);\r\n        }\r\n\r\n        out.copy(this.p1).subtract(this.p0).scale(t).add(this.p0);\r\n\r\n        return out;\r\n    },\r\n\r\n    // Line curve is linear, so we can overwrite default getPointAt\r\n\r\n    /**\r\n     * Gets a point at a given position on the line.\r\n     *\r\n     * @method Phaser.Curves.Line#getPointAt\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} u - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPointAt: function (u, out)\r\n    {\r\n        return this.getPoint(u, out);\r\n    },\r\n\r\n    /**\r\n     * Gets the slope of the line as a unit vector.\r\n     *\r\n     * @method Phaser.Curves.Line#getTangent\r\n     * @since 3.0.0\r\n     * \r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @return {Phaser.Math.Vector2} The tangent vector.\r\n     */\r\n    getTangent: function ()\r\n    {\r\n        var tangent = tmpVec2.copy(this.p1).subtract(this.p0);\r\n\r\n        return tangent.normalize();\r\n    },\r\n\r\n    //  Override default Curve.draw because this is better than calling getPoints on a line!\r\n\r\n    /**\r\n     * Draws this curve on the given Graphics object.\r\n     *\r\n     * The curve is drawn using `Graphics.lineBetween` so will be drawn at whatever the present Graphics line color is.\r\n     * The Graphics object is not cleared before the draw, so the curve will appear on-top of anything else already rendered to it.\r\n     *\r\n     * @method Phaser.Curves.Line#draw\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The Graphics instance onto which this curve will be drawn.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The Graphics object to which the curve was drawn.\r\n     */\r\n    draw: function (graphics)\r\n    {\r\n        graphics.lineBetween(this.p0.x, this.p0.y, this.p1.x, this.p1.y);\r\n\r\n        //  So you can chain graphics calls\r\n        return graphics;\r\n    },\r\n\r\n    /**\r\n     * Gets a JSON representation of the line.\r\n     *\r\n     * @method Phaser.Curves.Line#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            type: this.type,\r\n            points: [\r\n                this.p0.x, this.p0.y,\r\n                this.p1.x, this.p1.y\r\n            ]\r\n        };\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Configures this line from a JSON representation.\r\n *\r\n * @function Phaser.Curves.Line.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Line} A new LineCurve object.\r\n */\r\nLineCurve.fromJSON = function (data)\r\n{\r\n    var points = data.points;\r\n\r\n    var p0 = new Vector2(points[0], points[1]);\r\n    var p1 = new Vector2(points[2], points[3]);\r\n\r\n    return new LineCurve(p0, p1);\r\n};\r\n\r\nmodule.exports = LineCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvTGluZUN1cnZlLmpzPzQ3NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGlCQUFpQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQywwRkFBNkI7QUFDckQsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCOztBQUV2RDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3VydmVzL0xpbmVDdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEJhc2VkIG9uIHRoZSB0aHJlZS5qcyBDdXJ2ZSBjbGFzc2VzIGNyZWF0ZWQgYnkgW3p6ODVdKGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cpXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ3VydmUgPSByZXF1aXJlKCcuL0N1cnZlJyk7XHJcbnZhciBGcm9tUG9pbnRzID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvRnJvbVBvaW50cycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG52YXIgdG1wVmVjMiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIExpbmVDdXJ2ZSBpcyBhIFwiY3VydmVcIiBjb21wcmlzaW5nIGV4YWN0bHkgdHdvIHBvaW50cyAoYSBsaW5lIHNlZ21lbnQpLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ3VydmVzLkN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxudW1iZXJbXSl9IHAwIC0gVGhlIGZpcnN0IGVuZHBvaW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtwMV0gLSBUaGUgc2Vjb25kIGVuZHBvaW50LlxyXG4gKi9cclxudmFyIExpbmVDdXJ2ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ3VydmUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdmVjMnMgb3IgYXJyYXlcclxuICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZSAocDAsIHAxKVxyXG4gICAge1xyXG4gICAgICAgIEN1cnZlLmNhbGwodGhpcywgJ0xpbmVDdXJ2ZScpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwMCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKHAwWzJdLCBwMFszXSk7XHJcbiAgICAgICAgICAgIHAwID0gbmV3IFZlY3RvcjIocDBbMF0sIHAwWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaXJzdCBlbmRwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuTGluZSNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNlY29uZCBlbmRwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuTGluZSNwMVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDEgPSBwMTtcclxuXHJcbiAgICAgICAgLy8gIE92ZXJyaWRlIGRlZmF1bHQgQ3VydmUuYXJjTGVuZ3RoRGl2aXNpb25zXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBxdWFudGl0eSBvZiBhcmMgbGVuZ3RoIGRpdmlzaW9ucyB3aXRoaW4gdGhlIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5MaW5lI2FyY0xlbmd0aERpdmlzaW9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJlY3RhbmdsZSB3aGVyZSB0aGUgcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgbWF0Y2ggdGhlIGJvdW5kcyBvZiB0aGlzIEN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBIFJlY3RhbmdsZSBvYmplY3QgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFJlY3RhbmdsZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBBIFJlY3RhbmdsZSBvYmplY3QgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoaXMgY3VydmUuIElmIGBvdXRgIHdhcyBnaXZlbiBpdCB3aWxsIGJlIHRoaXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gRnJvbVBvaW50cyhbIHRoaXMucDAsIHRoaXMucDEgXSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlc29sdXRpb24gb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkaXZpc2lvbnM9MV0gLSBUaGUgbnVtYmVyIG9mIGRpdmlzaW9ucyB0byBjb25zaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uLiBFcXVhbCB0byB0aGUgbnVtYmVyIG9mIGRpdmlzaW9ucy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoZGl2aXNpb25zID09PSB1bmRlZmluZWQpIHsgZGl2aXNpb25zID0gMTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgY3VydmUgdG8gcmV0dXJuLiBXaGVyZSAwIGlzIHRoZSBzdGFydCBhbmQgMSBpcyB0aGUgZW5kLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIGlmICh0ID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0LmNvcHkodGhpcy5wMSkuc3VidHJhY3QodGhpcy5wMCkuc2NhbGUodCkuYWRkKHRoaXMucDApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXRcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBwb2ludCBhdCBhIGdpdmVuIHBvc2l0aW9uIG9uIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldFBvaW50QXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRBdDogZnVuY3Rpb24gKHUsIG91dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludCh1LCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHNsb3BlIG9mIHRoZSBsaW5lIGFzIGEgdW5pdCB2ZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0VGFuZ2VudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSB0YW5nZW50IHZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgZ2V0VGFuZ2VudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGFuZ2VudCA9IHRtcFZlYzIuY29weSh0aGlzLnAxKS5zdWJ0cmFjdCh0aGlzLnAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhbmdlbnQubm9ybWFsaXplKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBPdmVycmlkZSBkZWZhdWx0IEN1cnZlLmRyYXcgYmVjYXVzZSB0aGlzIGlzIGJldHRlciB0aGFuIGNhbGxpbmcgZ2V0UG9pbnRzIG9uIGEgbGluZSFcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoaXMgY3VydmUgb24gdGhlIGdpdmVuIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgY3VydmUgaXMgZHJhd24gdXNpbmcgYEdyYXBoaWNzLmxpbmVCZXR3ZWVuYCBzbyB3aWxsIGJlIGRyYXduIGF0IHdoYXRldmVyIHRoZSBwcmVzZW50IEdyYXBoaWNzIGxpbmUgY29sb3IgaXMuXHJcbiAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IGlzIG5vdCBjbGVhcmVkIGJlZm9yZSB0aGUgZHJhdywgc28gdGhlIGN1cnZlIHdpbGwgYXBwZWFyIG9uLXRvcCBvZiBhbnl0aGluZyBlbHNlIGFscmVhZHkgcmVuZGVyZWQgdG8gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZHJhd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gRyAtIFtncmFwaGljcywkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBncmFwaGljcyAtIFRoZSBHcmFwaGljcyBpbnN0YW5jZSBvbnRvIHdoaWNoIHRoaXMgY3VydmUgd2lsbCBiZSBkcmF3bi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoZSBHcmFwaGljcyBvYmplY3QgdG8gd2hpY2ggdGhlIGN1cnZlIHdhcyBkcmF3bi5cclxuICAgICAqL1xyXG4gICAgZHJhdzogZnVuY3Rpb24gKGdyYXBoaWNzKVxyXG4gICAge1xyXG4gICAgICAgIGdyYXBoaWNzLmxpbmVCZXR3ZWVuKHRoaXMucDAueCwgdGhpcy5wMC55LCB0aGlzLnAxLngsIHRoaXMucDEueSk7XHJcblxyXG4gICAgICAgIC8vICBTbyB5b3UgY2FuIGNoYWluIGdyYXBoaWNzIGNhbGxzXHJcbiAgICAgICAgcmV0dXJuIGdyYXBoaWNzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OQ3VydmV9IFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgcG9pbnRzOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAwLngsIHRoaXMucDAueSxcclxuICAgICAgICAgICAgICAgIHRoaXMucDEueCwgdGhpcy5wMS55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJlcyB0aGlzIGxpbmUgZnJvbSBhIEpTT04gcmVwcmVzZW50YXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLkxpbmUuZnJvbUpTT05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OQ3VydmV9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIGN1cnZlIGRhdGEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuTGluZX0gQSBuZXcgTGluZUN1cnZlIG9iamVjdC5cclxuICovXHJcbkxpbmVDdXJ2ZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChkYXRhKVxyXG57XHJcbiAgICB2YXIgcG9pbnRzID0gZGF0YS5wb2ludHM7XHJcblxyXG4gICAgdmFyIHAwID0gbmV3IFZlY3RvcjIocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xyXG4gICAgdmFyIHAxID0gbmV3IFZlY3RvcjIocG9pbnRzWzJdLCBwb2ludHNbM10pO1xyXG5cclxuICAgIHJldHVybiBuZXcgTGluZUN1cnZlKHAwLCBwMSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/LineCurve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/QuadraticBezierCurve.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/curves/QuadraticBezierCurve.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar QuadraticBezierInterpolation = __webpack_require__(/*! ../math/interpolation/QuadraticBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class QuadraticBezier\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.2.0\r\n *\r\n * @param {(Phaser.Math.Vector2|number[])} p0 - Start point, or an array of point pairs.\r\n * @param {Phaser.Math.Vector2} p1 - Control Point 1.\r\n * @param {Phaser.Math.Vector2} p2 - Control Point 2.\r\n */\r\nvar QuadraticBezier = new Class({\r\n\r\n    Extends: Curve,\r\n\r\n    initialize:\r\n\r\n    function QuadraticBezier (p0, p1, p2)\r\n    {\r\n        Curve.call(this, 'QuadraticBezier');\r\n\r\n        if (Array.isArray(p0))\r\n        {\r\n            p2 = new Vector2(p0[4], p0[5]);\r\n            p1 = new Vector2(p0[2], p0[3]);\r\n            p0 = new Vector2(p0[0], p0[1]);\r\n        }\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Curves.QuadraticBezier#p0\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.2.0\r\n         */\r\n        this.p0 = p0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Curves.QuadraticBezier#p1\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.2.0\r\n         */\r\n        this.p1 = p1;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Curves.QuadraticBezier#p2\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.2.0\r\n         */\r\n        this.p2 = p2;\r\n    },\r\n\r\n    /**\r\n     * Gets the starting point on the curve.\r\n     *\r\n     * @method Phaser.Curves.QuadraticBezier#getStartPoint\r\n     * @since 3.2.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.p0);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.QuadraticBezier#getResolution\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} divisions - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getResolution: function (divisions)\r\n    {\r\n        return divisions;\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.QuadraticBezier#getPoint\r\n     * @since 3.2.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var p0 = this.p0;\r\n        var p1 = this.p1;\r\n        var p2 = this.p2;\r\n\r\n        return out.set(\r\n            QuadraticBezierInterpolation(t, p0.x, p1.x, p2.x),\r\n            QuadraticBezierInterpolation(t, p0.y, p1.y, p2.y)\r\n        );\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.QuadraticBezier#draw\r\n     * @since 3.2.0\r\n     *\r\n     * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - `Graphics` object to draw onto.\r\n     * @param {integer} [pointsTotal=32] - Number of points to be used for drawing the curve. Higher numbers result in smoother curve but require more processing.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} `Graphics` object that was drawn to.\r\n     */\r\n    draw: function (graphics, pointsTotal)\r\n    {\r\n        if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n        var points = this.getPoints(pointsTotal);\r\n\r\n        graphics.beginPath();\r\n        graphics.moveTo(this.p0.x, this.p0.y);\r\n\r\n        for (var i = 1; i < points.length; i++)\r\n        {\r\n            graphics.lineTo(points[i].x, points[i].y);\r\n        }\r\n\r\n        graphics.strokePath();\r\n\r\n        //  So you can chain graphics calls\r\n        return graphics;\r\n    },\r\n\r\n    /**\r\n     * Converts the curve into a JSON compatible object.\r\n     *\r\n     * @method Phaser.Curves.QuadraticBezier#toJSON\r\n     * @since 3.2.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            type: this.type,\r\n            points: [\r\n                this.p0.x, this.p0.y,\r\n                this.p1.x, this.p1.y,\r\n                this.p2.x, this.p2.y\r\n            ]\r\n        };\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Creates a curve from a JSON object, e. g. created by `toJSON`.\r\n *\r\n * @function Phaser.Curves.QuadraticBezier.fromJSON\r\n * @since 3.2.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.QuadraticBezier} The created curve instance.\r\n */\r\nQuadraticBezier.fromJSON = function (data)\r\n{\r\n    var points = data.points;\r\n\r\n    var p0 = new Vector2(points[0], points[1]);\r\n    var p1 = new Vector2(points[2], points[3]);\r\n    var p2 = new Vector2(points[4], points[5]);\r\n\r\n    return new QuadraticBezier(p0, p1, p2);\r\n};\r\n\r\nmodule.exports = QuadraticBezier;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvUXVhZHJhdGljQmV6aWVyQ3VydmUuanM/Y2UyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsMERBQVM7QUFDN0IsbUNBQW1DLG1CQUFPLENBQUMsd0lBQW9EO0FBQy9GLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCOztBQUUxRDs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9RdWFkcmF0aWNCZXppZXJDdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgUXVhZHJhdGljQmV6aWVySW50ZXJwb2xhdGlvbiA9IHJlcXVpcmUoJy4uL21hdGgvaW50ZXJwb2xhdGlvbi9RdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBRdWFkcmF0aWNCZXppZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkN1cnZlcy5DdXJ2ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkN1cnZlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8bnVtYmVyW10pfSBwMCAtIFN0YXJ0IHBvaW50LCBvciBhbiBhcnJheSBvZiBwb2ludCBwYWlycy5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwMSAtIENvbnRyb2wgUG9pbnQgMS5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwMiAtIENvbnRyb2wgUG9pbnQgMi5cclxuICovXHJcbnZhciBRdWFkcmF0aWNCZXppZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyIChwMCwgcDEsIHAyKVxyXG4gICAge1xyXG4gICAgICAgIEN1cnZlLmNhbGwodGhpcywgJ1F1YWRyYXRpY0JlemllcicpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwMCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMiA9IG5ldyBWZWN0b3IyKHAwWzRdLCBwMFs1XSk7XHJcbiAgICAgICAgICAgIHAxID0gbmV3IFZlY3RvcjIocDBbMl0sIHAwWzNdKTtcclxuICAgICAgICAgICAgcDAgPSBuZXcgVmVjdG9yMihwMFswXSwgcDBbMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjcDBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAwID0gcDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUXVhZHJhdGljQmV6aWVyI3AxXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wMSA9IHAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNwMlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDIgPSBwMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNnZXRTdGFydFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0U3RhcnRQb2ludDogZnVuY3Rpb24gKG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodGhpcy5wMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzaW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICh0LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5wMDtcclxuICAgICAgICB2YXIgcDEgPSB0aGlzLnAxO1xyXG4gICAgICAgIHZhciBwMiA9IHRoaXMucDI7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuc2V0KFxyXG4gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uKHQsIHAwLngsIHAxLngsIHAyLngpLFxyXG4gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uKHQsIHAwLnksIHAxLnksIHAyLnkpXHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBHIC0gW2dyYXBoaWNzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gYEdyYXBoaWNzYCBvYmplY3QgdG8gZHJhdyBvbnRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcG9pbnRzVG90YWw9MzJdIC0gTnVtYmVyIG9mIHBvaW50cyB0byBiZSB1c2VkIGZvciBkcmF3aW5nIHRoZSBjdXJ2ZS4gSGlnaGVyIG51bWJlcnMgcmVzdWx0IGluIHNtb290aGVyIGN1cnZlIGJ1dCByZXF1aXJlIG1vcmUgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGBHcmFwaGljc2Agb2JqZWN0IHRoYXQgd2FzIGRyYXduIHRvLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwb2ludHNUb3RhbCA9PT0gdW5kZWZpbmVkKSB7IHBvaW50c1RvdGFsID0gMzI7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2V0UG9pbnRzKHBvaW50c1RvdGFsKTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3MuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHRoaXMucDAueCwgdGhpcy5wMC55KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBncmFwaGljcy5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdyYXBoaWNzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgLy8gIFNvIHlvdSBjYW4gY2hhaW4gZ3JhcGhpY3MgY2FsbHNcclxuICAgICAgICByZXR1cm4gZ3JhcGhpY3M7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhlIGN1cnZlIGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wMS54LCB0aGlzLnAxLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAyLngsIHRoaXMucDIueVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBjdXJ2ZSBmcm9tIGEgSlNPTiBvYmplY3QsIGUuIGcuIGNyZWF0ZWQgYnkgYHRvSlNPTmAuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0Jlemllci5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4yLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXJ9IFRoZSBjcmVhdGVkIGN1cnZlIGluc3RhbmNlLlxyXG4gKi9cclxuUXVhZHJhdGljQmV6aWVyLmZyb21KU09OID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHZhciBwb2ludHMgPSBkYXRhLnBvaW50cztcclxuXHJcbiAgICB2YXIgcDAgPSBuZXcgVmVjdG9yMihwb2ludHNbMF0sIHBvaW50c1sxXSk7XHJcbiAgICB2YXIgcDEgPSBuZXcgVmVjdG9yMihwb2ludHNbMl0sIHBvaW50c1szXSk7XHJcbiAgICB2YXIgcDIgPSBuZXcgVmVjdG9yMihwb2ludHNbNF0sIHBvaW50c1s1XSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWFkcmF0aWNCZXppZXIocDAsIHAxLCBwMik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWRyYXRpY0JlemllcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/QuadraticBezierCurve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/SplineCurve.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/curves/SplineCurve.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar CatmullRom = __webpack_require__(/*! ../math/CatmullRom */ \"./node_modules/phaser/src/math/CatmullRom.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class Spline\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2[]} [points] - [description]\r\n */\r\nvar SplineCurve = new Class({\r\n\r\n    Extends: Curve,\r\n\r\n    initialize:\r\n\r\n    function SplineCurve (points)\r\n    {\r\n        if (points === undefined) { points = []; }\r\n\r\n        Curve.call(this, 'SplineCurve');\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Curves.Spline#points\r\n         * @type {Phaser.Math.Vector2[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.points = [];\r\n\r\n        this.addPoints(points);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Spline#addPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2[]|number[]|number[][])} points - [description]\r\n     *\r\n     * @return {Phaser.Curves.Spline} This curve object.\r\n     */\r\n    addPoints: function (points)\r\n    {\r\n        for (var i = 0; i < points.length; i++)\r\n        {\r\n            var p = new Vector2();\r\n\r\n            if (typeof points[i] === 'number')\r\n            {\r\n                p.x = points[i];\r\n                p.y = points[i + 1];\r\n                i++;\r\n            }\r\n            else if (Array.isArray(points[i]))\r\n            {\r\n                //  An array of arrays?\r\n                p.x = points[i][0];\r\n                p.y = points[i][1];\r\n            }\r\n            else\r\n            {\r\n                p.x = points[i].x;\r\n                p.y = points[i].y;\r\n            }\r\n\r\n            this.points.push(p);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Spline#addPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     *\r\n     * @return {Phaser.Math.Vector2} [description]\r\n     */\r\n    addPoint: function (x, y)\r\n    {\r\n        var vec = new Vector2(x, y);\r\n\r\n        this.points.push(vec);\r\n\r\n        return vec;\r\n    },\r\n\r\n    /**\r\n     * Gets the starting point on the curve.\r\n     *\r\n     * @method Phaser.Curves.Spline#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.points[0]);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Spline#getResolution\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} divisions - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getResolution: function (divisions)\r\n    {\r\n        return divisions * this.points.length;\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.Spline#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var points = this.points;\r\n\r\n        var point = (points.length - 1) * t;\r\n\r\n        var intPoint = Math.floor(point);\r\n\r\n        var weight = point - intPoint;\r\n\r\n        var p0 = points[(intPoint === 0) ? intPoint : intPoint - 1];\r\n        var p1 = points[intPoint];\r\n        var p2 = points[(intPoint > points.length - 2) ? points.length - 1 : intPoint + 1];\r\n        var p3 = points[(intPoint > points.length - 3) ? points.length - 1 : intPoint + 2];\r\n\r\n        return out.set(CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), CatmullRom(weight, p0.y, p1.y, p2.y, p3.y));\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Curves.Spline#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var points = [];\r\n\r\n        for (var i = 0; i < this.points.length; i++)\r\n        {\r\n            points.push(this.points[i].x);\r\n            points.push(this.points[i].y);\r\n        }\r\n\r\n        return {\r\n            type: this.type,\r\n            points: points\r\n        };\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Curves.Spline.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Spline} [description]\r\n */\r\nSplineCurve.fromJSON = function (data)\r\n{\r\n    return new SplineCurve(data.points);\r\n};\r\n\r\nmodule.exports = SplineCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvU3BsaW5lQ3VydmUuanM/YWIyYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsd0VBQW9CO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRDQUE0QztBQUMzRDtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvU3BsaW5lQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENhdG11bGxSb20gPSByZXF1aXJlKCcuLi9tYXRoL0NhdG11bGxSb20nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgU3BsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5DdXJ2ZXMuQ3VydmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5DdXJ2ZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gW3BvaW50c10gLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgU3BsaW5lQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU3BsaW5lQ3VydmUgKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBpZiAocG9pbnRzID09PSB1bmRlZmluZWQpIHsgcG9pbnRzID0gW107IH1cclxuXHJcbiAgICAgICAgQ3VydmUuY2FsbCh0aGlzLCAnU3BsaW5lQ3VydmUnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5TcGxpbmUjcG9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYWRkUG9pbnRzKHBvaW50cyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjYWRkUG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyW118bnVtYmVyW118bnVtYmVyW11bXSl9IHBvaW50cyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlNwbGluZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50czogZnVuY3Rpb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcG9pbnRzW2ldID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcC54ID0gcG9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcC55ID0gcG9pbnRzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBvaW50c1tpXSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBBbiBhcnJheSBvZiBhcnJheXM/XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwb2ludHNbaV1bMF07XHJcbiAgICAgICAgICAgICAgICBwLnkgPSBwb2ludHNbaV1bMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwb2ludHNbaV0ueDtcclxuICAgICAgICAgICAgICAgIHAueSA9IHBvaW50c1tpXS55O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKHApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjYWRkUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBhZGRQb2ludDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlYyA9IG5ldyBWZWN0b3IyKHgsIHkpO1xyXG5cclxuICAgICAgICB0aGlzLnBvaW50cy5wdXNoKHZlYyk7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc3RhcnRpbmcgcG9pbnQgb24gdGhlIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucG9pbnRzWzBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlNwbGluZSNnZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aXNpb25zIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBkaXZpc2lvbnMgKiB0aGlzLnBvaW50cy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBsZW5ndGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlNwbGluZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IChwb2ludHMubGVuZ3RoIC0gMSkgKiB0O1xyXG5cclxuICAgICAgICB2YXIgaW50UG9pbnQgPSBNYXRoLmZsb29yKHBvaW50KTtcclxuXHJcbiAgICAgICAgdmFyIHdlaWdodCA9IHBvaW50IC0gaW50UG9pbnQ7XHJcblxyXG4gICAgICAgIHZhciBwMCA9IHBvaW50c1soaW50UG9pbnQgPT09IDApID8gaW50UG9pbnQgOiBpbnRQb2ludCAtIDFdO1xyXG4gICAgICAgIHZhciBwMSA9IHBvaW50c1tpbnRQb2ludF07XHJcbiAgICAgICAgdmFyIHAyID0gcG9pbnRzWyhpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAyKSA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAxXTtcclxuICAgICAgICB2YXIgcDMgPSBwb2ludHNbKGludFBvaW50ID4gcG9pbnRzLmxlbmd0aCAtIDMpID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDJdO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldChDYXRtdWxsUm9tKHdlaWdodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCksIENhdG11bGxSb20od2VpZ2h0LCBwMC55LCBwMS55LCBwMi55LCBwMy55KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5wb2ludHNbaV0ueCk7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IHBvaW50c1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLlNwbGluZS5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5TcGxpbmV9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcblNwbGluZUN1cnZlLmZyb21KU09OID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHJldHVybiBuZXcgU3BsaW5lQ3VydmUoZGF0YS5wb2ludHMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcGxpbmVDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/SplineCurve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/curves/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Curves\r\n */\r\n\r\nmodule.exports = {\r\n    Path: __webpack_require__(/*! ./path/Path */ \"./node_modules/phaser/src/curves/path/Path.js\"),\r\n\r\n    CubicBezier: __webpack_require__(/*! ./CubicBezierCurve */ \"./node_modules/phaser/src/curves/CubicBezierCurve.js\"),\r\n    Curve: __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\"),\r\n    Ellipse: __webpack_require__(/*! ./EllipseCurve */ \"./node_modules/phaser/src/curves/EllipseCurve.js\"),\r\n    Line: __webpack_require__(/*! ./LineCurve */ \"./node_modules/phaser/src/curves/LineCurve.js\"),\r\n    QuadraticBezier: __webpack_require__(/*! ./QuadraticBezierCurve */ \"./node_modules/phaser/src/curves/QuadraticBezierCurve.js\"),\r\n    Spline: __webpack_require__(/*! ./SplineCurve */ \"./node_modules/phaser/src/curves/SplineCurve.js\")\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvaW5kZXguanM/OTcxNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLGtFQUFhOztBQUUvQixpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBb0I7QUFDN0MsV0FBVyxtQkFBTyxDQUFDLDBEQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyx3RUFBZ0I7QUFDckMsVUFBVSxtQkFBTyxDQUFDLGtFQUFhO0FBQy9CLHFCQUFxQixtQkFBTyxDQUFDLHdGQUF3QjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsc0VBQWU7QUFDbkMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DdXJ2ZXNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIFBhdGg6IHJlcXVpcmUoJy4vcGF0aC9QYXRoJyksXHJcblxyXG4gICAgQ3ViaWNCZXppZXI6IHJlcXVpcmUoJy4vQ3ViaWNCZXppZXJDdXJ2ZScpLFxyXG4gICAgQ3VydmU6IHJlcXVpcmUoJy4vQ3VydmUnKSxcclxuICAgIEVsbGlwc2U6IHJlcXVpcmUoJy4vRWxsaXBzZUN1cnZlJyksXHJcbiAgICBMaW5lOiByZXF1aXJlKCcuL0xpbmVDdXJ2ZScpLFxyXG4gICAgUXVhZHJhdGljQmV6aWVyOiByZXF1aXJlKCcuL1F1YWRyYXRpY0JlemllckN1cnZlJyksXHJcbiAgICBTcGxpbmU6IHJlcXVpcmUoJy4vU3BsaW5lQ3VydmUnKVxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/path/MoveTo.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/curves/path/MoveTo.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A MoveTo Curve is a very simple curve consisting of only a single point. Its intended use is to move the ending point in a Path.\r\n *\r\n * @class MoveTo\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - `x` pixel coordinate.\r\n * @param {number} [y] - `y` pixel coordinate.\r\n */\r\nvar MoveTo = new Class({\r\n\r\n    initialize:\r\n\r\n    function MoveTo (x, y)\r\n    {\r\n        //  Skip length calcs in paths\r\n\r\n        /**\r\n         * Denotes that this Curve does not influence the bounds, points, and drawing of its parent Path. Must be `false` or some methods in the parent Path will throw errors.\r\n         *\r\n         * @name Phaser.Curves.MoveTo#active\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.active = false;\r\n\r\n        /**\r\n         * The lone point which this curve consists of.\r\n         *\r\n         * @name Phaser.Curves.MoveTo#p0\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.p0 = new Vector2(x, y);\r\n    },\r\n\r\n    /**\r\n     * Get point at relative position in curve according to length.\r\n     *\r\n     * @method Phaser.Curves.MoveTo#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n     * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.p0);\r\n    },\r\n\r\n    /**\r\n     * Retrieves the point at given position in the curve. This will always return this curve's only point.\r\n     *\r\n     * @method Phaser.Curves.MoveTo#getPointAt\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} u - The position in the path to retrieve, between 0 and 1. Not used.\r\n     * @param {Phaser.Math.Vector2} [out] - An optional vector in which to store the point.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The modified `out` vector, or a new `Vector2` if none was provided.\r\n     */\r\n    getPointAt: function (u, out)\r\n    {\r\n        return this.getPoint(u, out);\r\n    },\r\n\r\n    /**\r\n     * Gets the resolution of this curve.\r\n     *\r\n     * @method Phaser.Curves.MoveTo#getResolution\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The resolution of this curve. For a MoveTo the value is always 1.\r\n     */\r\n    getResolution: function ()\r\n    {\r\n        return 1;\r\n    },\r\n\r\n    /**\r\n     * Gets the length of this curve.\r\n     *\r\n     * @method Phaser.Curves.MoveTo#getLength\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this curve. For a MoveTo the value is always 0.\r\n     */\r\n    getLength: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * Converts this curve into a JSON-serializable object.\r\n     *\r\n     * @method Phaser.Curves.MoveTo#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONCurve} A primitive object with the curve's type and only point.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return {\r\n            type: 'MoveTo',\r\n            points: [\r\n                this.p0.x, this.p0.y\r\n            ]\r\n        };\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MoveTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvcGF0aC9Nb3ZlVG8uanM/ZDczOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9wYXRoL01vdmVUby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgTW92ZVRvIEN1cnZlIGlzIGEgdmVyeSBzaW1wbGUgY3VydmUgY29uc2lzdGluZyBvZiBvbmx5IGEgc2luZ2xlIHBvaW50LiBJdHMgaW50ZW5kZWQgdXNlIGlzIHRvIG1vdmUgdGhlIGVuZGluZyBwb2ludCBpbiBhIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBNb3ZlVG9cclxuICogQG1lbWJlcm9mIFBoYXNlci5DdXJ2ZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gYHhgIHBpeGVsIGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBgeWAgcGl4ZWwgY29vcmRpbmF0ZS5cclxuICovXHJcbnZhciBNb3ZlVG8gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTW92ZVRvICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTa2lwIGxlbmd0aCBjYWxjcyBpbiBwYXRoc1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZW5vdGVzIHRoYXQgdGhpcyBDdXJ2ZSBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGJvdW5kcywgcG9pbnRzLCBhbmQgZHJhd2luZyBvZiBpdHMgcGFyZW50IFBhdGguIE11c3QgYmUgYGZhbHNlYCBvciBzb21lIG1ldGhvZHMgaW4gdGhlIHBhcmVudCBQYXRoIHdpbGwgdGhyb3cgZXJyb3JzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbG9uZSBwb2ludCB3aGljaCB0aGlzIGN1cnZlIGNvbnNpc3RzIG9mLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jcDBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAwID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBsZW5ndGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodGhpcy5wMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBwb2ludCBhdCBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgY3VydmUuIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRoaXMgY3VydmUncyBvbmx5IHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jZ2V0UG9pbnRBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHUgLSBUaGUgcG9zaXRpb24gaW4gdGhlIHBhdGggdG8gcmV0cmlldmUsIGJldHdlZW4gMCBhbmQgMS4gTm90IHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQW4gb3B0aW9uYWwgdmVjdG9yIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgdmVjdG9yLCBvciBhIG5ldyBgVmVjdG9yMmAgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50QXQ6IGZ1bmN0aW9uICh1LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQodSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuIEZvciBhIE1vdmVUbyB0aGUgdmFsdWUgaXMgYWx3YXlzIDEuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc29sdXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGlzIGN1cnZlLiBGb3IgYSBNb3ZlVG8gdGhlIHZhbHVlIGlzIGFsd2F5cyAwLlxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhpcyBjdXJ2ZSBpbnRvIGEgSlNPTi1zZXJpYWxpemFibGUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gQSBwcmltaXRpdmUgb2JqZWN0IHdpdGggdGhlIGN1cnZlJ3MgdHlwZSBhbmQgb25seSBwb2ludC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdNb3ZlVG8nLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vdmVUbztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/path/MoveTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/curves/path/Path.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/curves/path/Path.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CubicBezierCurve = __webpack_require__(/*! ../CubicBezierCurve */ \"./node_modules/phaser/src/curves/CubicBezierCurve.js\");\r\nvar EllipseCurve = __webpack_require__(/*! ../EllipseCurve */ \"./node_modules/phaser/src/curves/EllipseCurve.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar LineCurve = __webpack_require__(/*! ../LineCurve */ \"./node_modules/phaser/src/curves/LineCurve.js\");\r\nvar MovePathTo = __webpack_require__(/*! ./MoveTo */ \"./node_modules/phaser/src/curves/path/MoveTo.js\");\r\nvar QuadraticBezierCurve = __webpack_require__(/*! ../QuadraticBezierCurve */ \"./node_modules/phaser/src/curves/QuadraticBezierCurve.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar SplineCurve = __webpack_require__(/*! ../SplineCurve */ \"./node_modules/phaser/src/curves/SplineCurve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Path combines multiple Curves into one continuous compound curve.\r\n * It does not matter how many Curves are in the Path or what type they are.\r\n *\r\n * A Curve in a Path does not have to start where the previous Curve ends - that is to say, a Path does not\r\n * have to be an uninterrupted curve. Only the order of the Curves influences the actual points on the Path.\r\n *\r\n * @class Path\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The X coordinate of the Path's starting point or a {@link Phaser.Types.Curves.JSONPath}.\r\n * @param {number} [y=0] - The Y coordinate of the Path's starting point.\r\n */\r\nvar Path = new Class({\r\n\r\n    initialize:\r\n\r\n    function Path (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        /**\r\n         * The name of this Path.\r\n         * Empty by default and never populated by Phaser, this is left for developers to use.\r\n         *\r\n         * @name Phaser.Curves.Path#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * The list of Curves which make up this Path.\r\n         *\r\n         * @name Phaser.Curves.Path#curves\r\n         * @type {Phaser.Curves.Curve[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.curves = [];\r\n\r\n        /**\r\n         * The cached length of each Curve in the Path.\r\n         *\r\n         * Used internally by {@link #getCurveLengths}.\r\n         *\r\n         * @name Phaser.Curves.Path#cacheLengths\r\n         * @type {number[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.cacheLengths = [];\r\n\r\n        /**\r\n         * Automatically closes the path.\r\n         *\r\n         * @name Phaser.Curves.Path#autoClose\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.autoClose = false;\r\n\r\n        /**\r\n         * The starting point of the Path.\r\n         *\r\n         * This is not necessarily equivalent to the starting point of the first Curve in the Path. In an empty Path, it's also treated as the ending point.\r\n         *\r\n         * @name Phaser.Curves.Path#startPoint\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.startPoint = new Vector2();\r\n\r\n        /**\r\n         * A temporary vector used to avoid object creation when adding a Curve to the Path.\r\n         *\r\n         * @name Phaser.Curves.Path#_tmpVec2A\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tmpVec2A = new Vector2();\r\n\r\n        /**\r\n         * A temporary vector used to avoid object creation when adding a Curve to the Path.\r\n         *\r\n         * @name Phaser.Curves.Path#_tmpVec2B\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tmpVec2B = new Vector2();\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            this.fromJSON(x);\r\n        }\r\n        else\r\n        {\r\n            this.startPoint.set(x, y);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Appends a Curve to the end of the Path.\r\n     *\r\n     * The Curve does not have to start where the Path ends or, for an empty Path, at its defined starting point.\r\n     *\r\n     * @method Phaser.Curves.Path#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Curves.Curve} curve - The Curve to append.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    add: function (curve)\r\n    {\r\n        this.curves.push(curve);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a circular Ellipse Curve positioned at the end of the Path.\r\n     *\r\n     * @method Phaser.Curves.Path#circleTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the circle.\r\n     * @param {boolean} [clockwise=false] - `true` to create a clockwise circle as opposed to a counter-clockwise circle.\r\n     * @param {number} [rotation=0] - The rotation of the circle in degrees.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    circleTo: function (radius, clockwise, rotation)\r\n    {\r\n        if (clockwise === undefined) { clockwise = false; }\r\n\r\n        return this.ellipseTo(radius, radius, 0, 360, clockwise, rotation);\r\n    },\r\n\r\n    /**\r\n     * Ensures that the Path is closed.\r\n     *\r\n     * A closed Path starts and ends at the same point. If the Path is not closed, a straight Line Curve will be created from the ending point directly to the starting point. During the check, the actual starting point of the Path, i.e. the starting point of the first Curve, will be used as opposed to the Path's defined {@link startPoint}, which could differ.\r\n     *\r\n     * Calling this method on an empty Path will result in an error.\r\n     *\r\n     * @method Phaser.Curves.Path#closePath\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    closePath: function ()\r\n    {\r\n        // Add a line curve if start and end of lines are not connected\r\n        var startPoint = this.curves[0].getPoint(0);\r\n        var endPoint = this.curves[this.curves.length - 1].getPoint(1);\r\n\r\n        if (!startPoint.equals(endPoint))\r\n        {\r\n            //  This will copy a reference to the vectors, which probably isn't sensible\r\n            this.curves.push(new LineCurve(endPoint, startPoint));\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a cubic bezier curve starting at the previous end point and ending at p3, using p1 and p2 as control points.\r\n     *\r\n     * @method Phaser.Curves.Path#cubicBezierTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|Phaser.Math.Vector2)} x - The x coordinate of the end point. Or, if a Vec2, the p1 value.\r\n     * @param {(number|Phaser.Math.Vector2)} y - The y coordinate of the end point. Or, if a Vec2, the p2 value.\r\n     * @param {(number|Phaser.Math.Vector2)} control1X - The x coordinate of the first control point. Or, if a Vec2, the p3 value.\r\n     * @param {number} [control1Y] - The y coordinate of the first control point. Not used if vec2s are provided as the first 3 arguments.\r\n     * @param {number} [control2X] - The x coordinate of the second control point. Not used if vec2s are provided as the first 3 arguments.\r\n     * @param {number} [control2Y] - The y coordinate of the second control point. Not used if vec2s are provided as the first 3 arguments.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    cubicBezierTo: function (x, y, control1X, control1Y, control2X, control2Y)\r\n    {\r\n        var p0 = this.getEndPoint();\r\n        var p1;\r\n        var p2;\r\n        var p3;\r\n\r\n        //  Assume they're all vec2s\r\n        if (x instanceof Vector2)\r\n        {\r\n            p1 = x;\r\n            p2 = y;\r\n            p3 = control1X;\r\n        }\r\n        else\r\n        {\r\n            p1 = new Vector2(control1X, control1Y);\r\n            p2 = new Vector2(control2X, control2Y);\r\n            p3 = new Vector2(x, y);\r\n        }\r\n\r\n        return this.add(new CubicBezierCurve(p0, p1, p2, p3));\r\n    },\r\n\r\n    //  Creates a quadratic bezier curve starting at the previous end point and ending at p2, using p1 as a control point\r\n\r\n    /**\r\n     * Creates a Quadratic Bezier Curve starting at the ending point of the Path.\r\n     *\r\n     * @method Phaser.Curves.Path#quadraticBezierTo\r\n     * @since 3.2.0\r\n     *\r\n     * @param {(number|Phaser.Math.Vector2[])} x - The X coordinate of the second control point or, if it's a `Vector2`, the first control point.\r\n     * @param {number} [y] - The Y coordinate of the second control point or, if `x` is a `Vector2`, the second control point.\r\n     * @param {number} [controlX] - If `x` is not a `Vector2`, the X coordinate of the first control point.\r\n     * @param {number} [controlY] - If `x` is not a `Vector2`, the Y coordinate of the first control point.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    quadraticBezierTo: function (x, y, controlX, controlY)\r\n    {\r\n        var p0 = this.getEndPoint();\r\n        var p1;\r\n        var p2;\r\n\r\n        //  Assume they're all vec2s\r\n        if (x instanceof Vector2)\r\n        {\r\n            p1 = x;\r\n            p2 = y;\r\n        }\r\n        else\r\n        {\r\n            p1 = new Vector2(controlX, controlY);\r\n            p2 = new Vector2(x, y);\r\n        }\r\n\r\n        return this.add(new QuadraticBezierCurve(p0, p1, p2));\r\n    },\r\n\r\n    /**\r\n     * Draws all Curves in the Path to a Graphics Game Object.\r\n     *\r\n     * @method Phaser.Curves.Path#draw\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.GameObjects.Graphics} G - [out,$return]\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The Graphics Game Object to draw to.\r\n     * @param {integer} [pointsTotal=32] - The number of points to draw for each Curve. Higher numbers result in a smoother curve but require more processing.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The Graphics object which was drawn to.\r\n     */\r\n    draw: function (graphics, pointsTotal)\r\n    {\r\n        for (var i = 0; i < this.curves.length; i++)\r\n        {\r\n            var curve = this.curves[i];\r\n\r\n            if (!curve.active)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            curve.draw(graphics, pointsTotal);\r\n        }\r\n\r\n        return graphics;\r\n    },\r\n\r\n    /**\r\n     * Creates an ellipse curve positioned at the previous end point, using the given parameters.\r\n     *\r\n     * @method Phaser.Curves.Path#ellipseTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [xRadius=0] - The horizontal radius of ellipse.\r\n     * @param {number} [yRadius=0] - The vertical radius of ellipse.\r\n     * @param {integer} [startAngle=0] - The start angle of the ellipse, in degrees.\r\n     * @param {integer} [endAngle=360] - The end angle of the ellipse, in degrees.\r\n     * @param {boolean} [clockwise=false] - Whether the ellipse angles are given as clockwise (`true`) or counter-clockwise (`false`).\r\n     * @param {number} [rotation=0] - The rotation of the ellipse, in degrees.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    ellipseTo: function (xRadius, yRadius, startAngle, endAngle, clockwise, rotation)\r\n    {\r\n        var ellipse = new EllipseCurve(0, 0, xRadius, yRadius, startAngle, endAngle, clockwise, rotation);\r\n\r\n        var end = this.getEndPoint(this._tmpVec2A);\r\n\r\n        //  Calculate where to center the ellipse\r\n        var start = ellipse.getStartPoint(this._tmpVec2B);\r\n\r\n        end.subtract(start);\r\n\r\n        ellipse.x = end.x;\r\n        ellipse.y = end.y;\r\n\r\n        return this.add(ellipse);\r\n    },\r\n\r\n    /**\r\n     * Creates a Path from a Path Configuration object.\r\n     *\r\n     * The provided object should be a {@link Phaser.Types.Curves.JSONPath}, as returned by {@link #toJSON}. Providing a malformed object may cause errors.\r\n     *\r\n     * @method Phaser.Curves.Path#fromJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Curves.JSONPath} data - The JSON object containing the Path data.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    fromJSON: function (data)\r\n    {\r\n        //  data should be an object matching the Path.toJSON object structure.\r\n\r\n        this.curves = [];\r\n        this.cacheLengths = [];\r\n\r\n        this.startPoint.set(data.x, data.y);\r\n\r\n        this.autoClose = data.autoClose;\r\n\r\n        for (var i = 0; i < data.curves.length; i++)\r\n        {\r\n            var curve = data.curves[i];\r\n\r\n            switch (curve.type)\r\n            {\r\n                case 'LineCurve':\r\n                    this.add(LineCurve.fromJSON(curve));\r\n                    break;\r\n\r\n                case 'EllipseCurve':\r\n                    this.add(EllipseCurve.fromJSON(curve));\r\n                    break;\r\n\r\n                case 'SplineCurve':\r\n                    this.add(SplineCurve.fromJSON(curve));\r\n                    break;\r\n\r\n                case 'CubicBezierCurve':\r\n                    this.add(CubicBezierCurve.fromJSON(curve));\r\n                    break;\r\n\r\n                case 'QuadraticBezierCurve':\r\n                    this.add(QuadraticBezierCurve.fromJSON(curve));\r\n                    break;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a Rectangle with a position and size matching the bounds of this Path.\r\n     *\r\n     * @method Phaser.Curves.Path#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the bounds in.\r\n     * @param {integer} [accuracy=16] - The accuracy of the bounds calculations. Higher values are more accurate at the cost of calculation speed.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} The modified `out` Rectangle, or a new Rectangle if none was provided.\r\n     */\r\n    getBounds: function (out, accuracy)\r\n    {\r\n        if (out === undefined) { out = new Rectangle(); }\r\n        if (accuracy === undefined) { accuracy = 16; }\r\n\r\n        out.x = Number.MAX_VALUE;\r\n        out.y = Number.MAX_VALUE;\r\n\r\n        var bounds = new Rectangle();\r\n        var maxRight = MATH_CONST.MIN_SAFE_INTEGER;\r\n        var maxBottom = MATH_CONST.MIN_SAFE_INTEGER;\r\n\r\n        for (var i = 0; i < this.curves.length; i++)\r\n        {\r\n            var curve = this.curves[i];\r\n\r\n            if (!curve.active)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            curve.getBounds(bounds, accuracy);\r\n\r\n            out.x = Math.min(out.x, bounds.x);\r\n            out.y = Math.min(out.y, bounds.y);\r\n\r\n            maxRight = Math.max(maxRight, bounds.right);\r\n            maxBottom = Math.max(maxBottom, bounds.bottom);\r\n        }\r\n\r\n        out.right = maxRight;\r\n        out.bottom = maxBottom;\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Returns an array containing the length of the Path at the end of each Curve.\r\n     *\r\n     * The result of this method will be cached to avoid recalculating it in subsequent calls. The cache is only invalidated when the {@link #curves} array changes in length, leading to potential inaccuracies if a Curve in the Path is changed, or if a Curve is removed and another is added in its place.\r\n     *\r\n     * @method Phaser.Curves.Path#getCurveLengths\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number[]} An array containing the length of the Path at the end of each one of its Curves.\r\n     */\r\n    getCurveLengths: function ()\r\n    {\r\n        // We use cache values if curves and cache array are same length\r\n\r\n        if (this.cacheLengths.length === this.curves.length)\r\n        {\r\n            return this.cacheLengths;\r\n        }\r\n\r\n        // Get length of sub-curve\r\n        // Push sums into cached array\r\n\r\n        var lengths = [];\r\n        var sums = 0;\r\n\r\n        for (var i = 0; i < this.curves.length; i++)\r\n        {\r\n            sums += this.curves[i].getLength();\r\n\r\n            lengths.push(sums);\r\n        }\r\n\r\n        this.cacheLengths = lengths;\r\n\r\n        return lengths;\r\n    },\r\n\r\n    /**\r\n     * Returns the ending point of the Path.\r\n     *\r\n     * A Path's ending point is equivalent to the ending point of the last Curve in the Path. For an empty Path, the ending point is at the Path's defined {@link #startPoint}.\r\n     *\r\n     * @method Phaser.Curves.Path#getEndPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - The object to store the point in.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The modified `out` object, or a new Vector2 if none was provided.\r\n     */\r\n    getEndPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        if (this.curves.length > 0)\r\n        {\r\n            this.curves[this.curves.length - 1].getPoint(1, out);\r\n        }\r\n        else\r\n        {\r\n            out.copy(this.startPoint);\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Returns the total length of the Path.\r\n     *\r\n     * @see {@link #getCurveLengths}\r\n     *\r\n     * @method Phaser.Curves.Path#getLength\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The total length of the Path.\r\n     */\r\n    getLength: function ()\r\n    {\r\n        var lens = this.getCurveLengths();\r\n\r\n        return lens[lens.length - 1];\r\n    },\r\n\r\n    // To get accurate point with reference to\r\n    // entire path distance at time t,\r\n    // following has to be done:\r\n\r\n    // 1. Length of each sub path have to be known\r\n    // 2. Locate and identify type of curve\r\n    // 3. Get t for the curve\r\n    // 4. Return curve.getPointAt(t')\r\n\r\n    /**\r\n     * Calculates the coordinates of the point at the given normalized location (between 0 and 1) on the Path.\r\n     *\r\n     * The location is relative to the entire Path, not to an individual Curve. A location of 0.5 is always in the middle of the Path and is thus an equal distance away from both its starting and ending points. In a Path with one Curve, it would be in the middle of the Curve; in a Path with two Curves, it could be anywhere on either one of them depending on their lengths.\r\n     *\r\n     * @method Phaser.Curves.Path#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {number} t - The location of the point to return, between 0 and 1.\r\n     * @param {Phaser.Math.Vector2} [out] - The object in which to store the calculated point.\r\n     *\r\n     * @return {?Phaser.Math.Vector2} The modified `out` object, or a new `Vector2` if none was provided.\r\n     */\r\n    getPoint: function (t, out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        var d = t * this.getLength();\r\n        var curveLengths = this.getCurveLengths();\r\n        var i = 0;\r\n\r\n        while (i < curveLengths.length)\r\n        {\r\n            if (curveLengths[i] >= d)\r\n            {\r\n                var diff = curveLengths[i] - d;\r\n                var curve = this.curves[i];\r\n\r\n                var segmentLength = curve.getLength();\r\n                var u = (segmentLength === 0) ? 0 : 1 - diff / segmentLength;\r\n\r\n                return curve.getPointAt(u, out);\r\n            }\r\n\r\n            i++;\r\n        }\r\n\r\n        // loop where sum != 0, sum > d , sum+1 <d\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Returns the defined starting point of the Path.\r\n     *\r\n     * This is not necessarily equal to the starting point of the first Curve if it differs from {@link startPoint}.\r\n     *\r\n     * @method Phaser.Curves.Path#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [divisions=12] - The number of points to divide the path in to.\r\n     *\r\n     * @return {Phaser.Math.Vector2[]} An array of Vector2 objects that containing the points along the Path.\r\n     */\r\n    getPoints: function (divisions)\r\n    {\r\n        if (divisions === undefined) { divisions = 12; }\r\n\r\n        var points = [];\r\n        var last;\r\n\r\n        for (var i = 0; i < this.curves.length; i++)\r\n        {\r\n            var curve = this.curves[i];\r\n\r\n            if (!curve.active)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var resolution = curve.getResolution(divisions);\r\n\r\n            var pts = curve.getPoints(resolution);\r\n\r\n            for (var j = 0; j < pts.length; j++)\r\n            {\r\n                var point = pts[j];\r\n\r\n                if (last && last.equals(point))\r\n                {\r\n                    // ensures no consecutive points are duplicates\r\n                    continue;\r\n                }\r\n\r\n                points.push(point);\r\n\r\n                last = point;\r\n            }\r\n        }\r\n\r\n        if (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0]))\r\n        {\r\n            points.push(points[0]);\r\n        }\r\n\r\n        return points;\r\n    },\r\n\r\n    /**\r\n     * Returns a randomly chosen point anywhere on the path. This follows the same rules as `getPoint` in that it may return a point on any Curve inside this path.\r\n     * \r\n     * When calling this method multiple times, the points are not guaranteed to be equally spaced spatially.\r\n     *\r\n     * @method Phaser.Curves.Path#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - `Vector2` instance that should be used for storing the result. If `undefined` a new `Vector2` will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The modified `out` object, or a new `Vector2` if none was provided.\r\n     */\r\n    getRandomPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return this.getPoint(Math.random(), out);\r\n    },\r\n\r\n    /**\r\n     * Divides this Path into a set of equally spaced points,\r\n     * \r\n     * The resulting points are equally spaced with respect to the points' position on the path, but not necessarily equally spaced spatially.\r\n     *\r\n     * @method Phaser.Curves.Path#getSpacedPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [divisions=40] - The amount of points to divide this Path into.\r\n     *\r\n     * @return {Phaser.Math.Vector2[]} A list of the points this path was subdivided into.\r\n     */\r\n    getSpacedPoints: function (divisions)\r\n    {\r\n        if (divisions === undefined) { divisions = 40; }\r\n\r\n        var points = [];\r\n\r\n        for (var i = 0; i <= divisions; i++)\r\n        {\r\n            points.push(this.getPoint(i / divisions));\r\n        }\r\n\r\n        if (this.autoClose)\r\n        {\r\n            points.push(points[0]);\r\n        }\r\n\r\n        return points;\r\n    },\r\n\r\n    /**\r\n     * Returns the starting point of the Path.\r\n     *\r\n     * @method Phaser.Curves.Path#getStartPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [out] - `Vector2` instance that should be used for storing the result. If `undefined` a new `Vector2` will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The modified `out` object, or a new Vector2 if none was provided.\r\n     */\r\n    getStartPoint: function (out)\r\n    {\r\n        if (out === undefined) { out = new Vector2(); }\r\n\r\n        return out.copy(this.startPoint);\r\n    },\r\n\r\n    /**\r\n     * Creates a line curve from the previous end point to x/y.\r\n     *\r\n     * @method Phaser.Curves.Path#lineTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|Phaser.Math.Vector2)} x - The X coordinate of the line's end point, or a `Vector2` containing the entire end point.\r\n     * @param {number} [y] - The Y coordinate of the line's end point, if a number was passed as the X parameter.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    lineTo: function (x, y)\r\n    {\r\n        if (x instanceof Vector2)\r\n        {\r\n            this._tmpVec2B.copy(x);\r\n        }\r\n        else\r\n        {\r\n            this._tmpVec2B.set(x, y);\r\n        }\r\n\r\n        var end = this.getEndPoint(this._tmpVec2A);\r\n\r\n        return this.add(new LineCurve([ end.x, end.y, this._tmpVec2B.x, this._tmpVec2B.y ]));\r\n    },\r\n\r\n    /**\r\n     * Creates a spline curve starting at the previous end point, using the given points on the curve.\r\n     *\r\n     * @method Phaser.Curves.Path#splineTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2[]} points - The points the newly created spline curve should consist of.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    splineTo: function (points)\r\n    {\r\n        points.unshift(this.getEndPoint());\r\n\r\n        return this.add(new SplineCurve(points));\r\n    },\r\n\r\n    /**\r\n     * Creates a \"gap\" in this path from the path's current end point to the given coordinates.\r\n     * \r\n     * After calling this function, this Path's end point will be equal to the given coordinates\r\n     *\r\n     * @method Phaser.Curves.Path#moveTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|Phaser.Math.Vector2)} x - The X coordinate of the position to move the path's end point to, or a `Vector2` containing the entire new end point.\r\n     * @param {number} y - The Y coordinate of the position to move the path's end point to, if a number was passed as the X coordinate.\r\n     *\r\n     * @return {Phaser.Curves.Path} This Path object.\r\n     */\r\n    moveTo: function (x, y)\r\n    {\r\n        if (x instanceof Vector2)\r\n        {\r\n            return this.add(new MovePathTo(x.x, x.y));\r\n        }\r\n        else\r\n        {\r\n            return this.add(new MovePathTo(x, y));\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Converts this Path to a JSON object containing the path information and its constituent curves.\r\n     *\r\n     * @method Phaser.Curves.Path#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Curves.JSONPath} The JSON object containing this path's data.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var out = [];\r\n\r\n        for (var i = 0; i < this.curves.length; i++)\r\n        {\r\n            out.push(this.curves[i].toJSON());\r\n        }\r\n\r\n        return {\r\n            type: 'Path',\r\n            x: this.startPoint.x,\r\n            y: this.startPoint.y,\r\n            autoClose: this.autoClose,\r\n            curves: out\r\n        };\r\n    },\r\n\r\n    /**\r\n     * cacheLengths must be recalculated.\r\n     *\r\n     * @method Phaser.Curves.Path#updateArcLengths\r\n     * @since 3.0.0\r\n     */\r\n    updateArcLengths: function ()\r\n    {\r\n        this.cacheLengths = [];\r\n\r\n        this.getCurveLengths();\r\n    },\r\n\r\n    /**\r\n     * Disposes of this Path, clearing its internal references to objects so they can be garbage-collected.\r\n     *\r\n     * @method Phaser.Curves.Path#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.curves.length = 0;\r\n        this.cacheLengths.length = 0;\r\n        this.startPoint = undefined;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Creates a new Path Object.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#path\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Path.\r\n * @param {number} y - The vertical position of this Path.\r\n *\r\n * @return {Phaser.Curves.Path} The Path Object that was created.\r\n */\r\nGameObjectFactory.register('path', function (x, y)\r\n{\r\n    return new Path(x, y);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n\r\nmodule.exports = Path;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvcGF0aC9QYXRoLmpzPzA2NmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLHlFQUFpQjtBQUM1Qyx3QkFBd0IsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsaUVBQVU7QUFDbkMsMkJBQTJCLG1CQUFPLENBQUMseUZBQXlCO0FBQzVELGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQztBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPLDZEQUE2RCxtQ0FBbUM7QUFDbEgsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1QkFBdUI7QUFDdEQ7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsbUJBQW1COztBQUV6RDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsbVVBQW1VLGlCQUFpQjtBQUNwVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBLGVBQWUsNEJBQTRCO0FBQzNDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxtQ0FBbUMsa0JBQWtCLGNBQWM7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZELHFDQUFxQyxlQUFlOztBQUVwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJLGNBQWM7QUFDcko7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDRKQUE0SixrQkFBa0I7QUFDOUs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb1JBQW9SO0FBQ3BSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csaUJBQWlCO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCOztBQUV0RDtBQUNBOztBQUVBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsZ0JBQWdCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCOztBQUV0RDs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksbUJBQW1CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9wYXRoL1BhdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1YmljQmV6aWVyQ3VydmUgPSByZXF1aXJlKCcuLi9DdWJpY0JlemllckN1cnZlJyk7XHJcbnZhciBFbGxpcHNlQ3VydmUgPSByZXF1aXJlKCcuLi9FbGxpcHNlQ3VydmUnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIExpbmVDdXJ2ZSA9IHJlcXVpcmUoJy4uL0xpbmVDdXJ2ZScpO1xyXG52YXIgTW92ZVBhdGhUbyA9IHJlcXVpcmUoJy4vTW92ZVRvJyk7XHJcbnZhciBRdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IHJlcXVpcmUoJy4uL1F1YWRyYXRpY0JlemllckN1cnZlJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFNwbGluZUN1cnZlID0gcmVxdWlyZSgnLi4vU3BsaW5lQ3VydmUnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBhdGggY29tYmluZXMgbXVsdGlwbGUgQ3VydmVzIGludG8gb25lIGNvbnRpbnVvdXMgY29tcG91bmQgY3VydmUuXHJcbiAqIEl0IGRvZXMgbm90IG1hdHRlciBob3cgbWFueSBDdXJ2ZXMgYXJlIGluIHRoZSBQYXRoIG9yIHdoYXQgdHlwZSB0aGV5IGFyZS5cclxuICpcclxuICogQSBDdXJ2ZSBpbiBhIFBhdGggZG9lcyBub3QgaGF2ZSB0byBzdGFydCB3aGVyZSB0aGUgcHJldmlvdXMgQ3VydmUgZW5kcyAtIHRoYXQgaXMgdG8gc2F5LCBhIFBhdGggZG9lcyBub3RcclxuICogaGF2ZSB0byBiZSBhbiB1bmludGVycnVwdGVkIGN1cnZlLiBPbmx5IHRoZSBvcmRlciBvZiB0aGUgQ3VydmVzIGluZmx1ZW5jZXMgdGhlIGFjdHVhbCBwb2ludHMgb24gdGhlIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXRoXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgUGF0aCdzIHN0YXJ0aW5nIHBvaW50IG9yIGEge0BsaW5rIFBoYXNlci5UeXBlcy5DdXJ2ZXMuSlNPTlBhdGh9LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBQYXRoJ3Mgc3RhcnRpbmcgcG9pbnQuXHJcbiAqL1xyXG52YXIgUGF0aCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQYXRoICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgUGF0aC5cclxuICAgICAgICAgKiBFbXB0eSBieSBkZWZhdWx0IGFuZCBuZXZlciBwb3B1bGF0ZWQgYnkgUGhhc2VyLCB0aGlzIGlzIGxlZnQgZm9yIGRldmVsb3BlcnMgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5QYXRoI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsaXN0IG9mIEN1cnZlcyB3aGljaCBtYWtlIHVwIHRoaXMgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUGF0aCNjdXJ2ZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZVtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhY2hlZCBsZW5ndGggb2YgZWFjaCBDdXJ2ZSBpbiB0aGUgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgI2dldEN1cnZlTGVuZ3Roc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjY2FjaGVMZW5ndGhzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHBhdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjYXV0b0Nsb3NlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF1dG9DbG9zZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIFBhdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBlcXVpdmFsZW50IHRvIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgZmlyc3QgQ3VydmUgaW4gdGhlIFBhdGguIEluIGFuIGVtcHR5IFBhdGgsIGl0J3MgYWxzbyB0cmVhdGVkIGFzIHRoZSBlbmRpbmcgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjc3RhcnRQb2ludFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IHZlY3RvciB1c2VkIHRvIGF2b2lkIG9iamVjdCBjcmVhdGlvbiB3aGVuIGFkZGluZyBhIEN1cnZlIHRvIHRoZSBQYXRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5QYXRoI190bXBWZWMyQVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSB2ZWN0b3IgdXNlZCB0byBhdm9pZCBvYmplY3QgY3JlYXRpb24gd2hlbiBhZGRpbmcgYSBDdXJ2ZSB0byB0aGUgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUGF0aCNfdG1wVmVjMkJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RtcFZlYzJCID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbUpTT04oeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2ludC5zZXQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYSBDdXJ2ZSB0byB0aGUgZW5kIG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBDdXJ2ZSBkb2VzIG5vdCBoYXZlIHRvIHN0YXJ0IHdoZXJlIHRoZSBQYXRoIGVuZHMgb3IsIGZvciBhbiBlbXB0eSBQYXRoLCBhdCBpdHMgZGVmaW5lZCBzdGFydGluZyBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZX0gY3VydmUgLSBUaGUgQ3VydmUgdG8gYXBwZW5kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY3VydmUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBjaXJjdWxhciBFbGxpcHNlIEN1cnZlIHBvc2l0aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNjaXJjbGVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb2Nrd2lzZT1mYWxzZV0gLSBgdHJ1ZWAgdG8gY3JlYXRlIGEgY2xvY2t3aXNlIGNpcmNsZSBhcyBvcHBvc2VkIHRvIGEgY291bnRlci1jbG9ja3dpc2UgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyb3RhdGlvbj0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGUgY2lyY2xlIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjaXJjbGVUbzogZnVuY3Rpb24gKHJhZGl1cywgY2xvY2t3aXNlLCByb3RhdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgY2xvY2t3aXNlID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxsaXBzZVRvKHJhZGl1cywgcmFkaXVzLCAwLCAzNjAsIGNsb2Nrd2lzZSwgcm90YXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgdGhhdCB0aGUgUGF0aCBpcyBjbG9zZWQuXHJcbiAgICAgKlxyXG4gICAgICogQSBjbG9zZWQgUGF0aCBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIHNhbWUgcG9pbnQuIElmIHRoZSBQYXRoIGlzIG5vdCBjbG9zZWQsIGEgc3RyYWlnaHQgTGluZSBDdXJ2ZSB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgZW5kaW5nIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBzdGFydGluZyBwb2ludC4gRHVyaW5nIHRoZSBjaGVjaywgdGhlIGFjdHVhbCBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aCwgaS5lLiB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGZpcnN0IEN1cnZlLCB3aWxsIGJlIHVzZWQgYXMgb3Bwb3NlZCB0byB0aGUgUGF0aCdzIGRlZmluZWQge0BsaW5rIHN0YXJ0UG9pbnR9LCB3aGljaCBjb3VsZCBkaWZmZXIuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbiBlbXB0eSBQYXRoIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2Nsb3NlUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbG9zZVBhdGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gQWRkIGEgbGluZSBjdXJ2ZSBpZiBzdGFydCBhbmQgZW5kIG9mIGxpbmVzIGFyZSBub3QgY29ubmVjdGVkXHJcbiAgICAgICAgdmFyIHN0YXJ0UG9pbnQgPSB0aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKTtcclxuICAgICAgICB2YXIgZW5kUG9pbnQgPSB0aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGggLSAxXS5nZXRQb2ludCgxKTtcclxuXHJcbiAgICAgICAgaWYgKCFzdGFydFBvaW50LmVxdWFscyhlbmRQb2ludCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVGhpcyB3aWxsIGNvcHkgYSByZWZlcmVuY2UgdG8gdGhlIHZlY3RvcnMsIHdoaWNoIHByb2JhYmx5IGlzbid0IHNlbnNpYmxlXHJcbiAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2gobmV3IExpbmVDdXJ2ZShlbmRQb2ludCwgc3RhcnRQb2ludCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIGN1YmljIGJlemllciBjdXJ2ZSBzdGFydGluZyBhdCB0aGUgcHJldmlvdXMgZW5kIHBvaW50IGFuZCBlbmRpbmcgYXQgcDMsIHVzaW5nIHAxIGFuZCBwMiBhcyBjb250cm9sIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNjdWJpY0JlemllclRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMil9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQuIE9yLCBpZiBhIFZlYzIsIHRoZSBwMSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuTWF0aC5WZWN0b3IyKX0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludC4gT3IsIGlmIGEgVmVjMiwgdGhlIHAyIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSBjb250cm9sMVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiBPciwgaWYgYSBWZWMyLCB0aGUgcDMgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2wxWV0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiBOb3QgdXNlZCBpZiB2ZWMycyBhcmUgcHJvdmlkZWQgYXMgdGhlIGZpcnN0IDMgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb250cm9sMlhdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuIE5vdCB1c2VkIGlmIHZlYzJzIGFyZSBwcm92aWRlZCBhcyB0aGUgZmlyc3QgMyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2wyWV0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludC4gTm90IHVzZWQgaWYgdmVjMnMgYXJlIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCAzIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlBhdGh9IFRoaXMgUGF0aCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGN1YmljQmV6aWVyVG86IGZ1bmN0aW9uICh4LCB5LCBjb250cm9sMVgsIGNvbnRyb2wxWSwgY29udHJvbDJYLCBjb250cm9sMlkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5nZXRFbmRQb2ludCgpO1xyXG4gICAgICAgIHZhciBwMTtcclxuICAgICAgICB2YXIgcDI7XHJcbiAgICAgICAgdmFyIHAzO1xyXG5cclxuICAgICAgICAvLyAgQXNzdW1lIHRoZXkncmUgYWxsIHZlYzJzXHJcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBWZWN0b3IyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcDEgPSB4O1xyXG4gICAgICAgICAgICBwMiA9IHk7XHJcbiAgICAgICAgICAgIHAzID0gY29udHJvbDFYO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKGNvbnRyb2wxWCwgY29udHJvbDFZKTtcclxuICAgICAgICAgICAgcDIgPSBuZXcgVmVjdG9yMihjb250cm9sMlgsIGNvbnRyb2wyWSk7XHJcbiAgICAgICAgICAgIHAzID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IEN1YmljQmV6aWVyQ3VydmUocDAsIHAxLCBwMiwgcDMpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gIENyZWF0ZXMgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQgYW5kIGVuZGluZyBhdCBwMiwgdXNpbmcgcDEgYXMgYSBjb250cm9sIHBvaW50XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgUXVhZHJhdGljIEJlemllciBDdXJ2ZSBzdGFydGluZyBhdCB0aGUgZW5kaW5nIHBvaW50IG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI3F1YWRyYXRpY0JlemllclRvXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBjb250cm9sIHBvaW50IG9yLCBpZiBpdCdzIGEgYFZlY3RvcjJgLCB0aGUgZmlyc3QgY29udHJvbCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludCBvciwgaWYgYHhgIGlzIGEgYFZlY3RvcjJgLCB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2xYXSAtIElmIGB4YCBpcyBub3QgYSBgVmVjdG9yMmAsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2xZXSAtIElmIGB4YCBpcyBub3QgYSBgVmVjdG9yMmAsIHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBxdWFkcmF0aWNCZXppZXJUbzogZnVuY3Rpb24gKHgsIHksIGNvbnRyb2xYLCBjb250cm9sWSlcclxuICAgIHtcclxuICAgICAgICB2YXIgcDAgPSB0aGlzLmdldEVuZFBvaW50KCk7XHJcbiAgICAgICAgdmFyIHAxO1xyXG4gICAgICAgIHZhciBwMjtcclxuXHJcbiAgICAgICAgLy8gIEFzc3VtZSB0aGV5J3JlIGFsbCB2ZWMyc1xyXG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgVmVjdG9yMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHAxID0geDtcclxuICAgICAgICAgICAgcDIgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKGNvbnRyb2xYLCBjb250cm9sWSk7XHJcbiAgICAgICAgICAgIHAyID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IFF1YWRyYXRpY0JlemllckN1cnZlKHAwLCBwMSwgcDIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyBhbGwgQ3VydmVzIGluIHRoZSBQYXRoIHRvIGEgR3JhcGhpY3MgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZHJhd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gRyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3MgLSBUaGUgR3JhcGhpY3MgR2FtZSBPYmplY3QgdG8gZHJhdyB0by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3BvaW50c1RvdGFsPTMyXSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIHRvIGRyYXcgZm9yIGVhY2ggQ3VydmUuIEhpZ2hlciBudW1iZXJzIHJlc3VsdCBpbiBhIHNtb290aGVyIGN1cnZlIGJ1dCByZXF1aXJlIG1vcmUgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoZSBHcmFwaGljcyBvYmplY3Qgd2hpY2ggd2FzIGRyYXduIHRvLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3VydmUuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VydmUuZHJhdyhncmFwaGljcywgcG9pbnRzVG90YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyYXBoaWNzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gZWxsaXBzZSBjdXJ2ZSBwb3NpdGlvbmVkIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQsIHVzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2VsbGlwc2VUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4UmFkaXVzPTBdIC0gVGhlIGhvcml6b250YWwgcmFkaXVzIG9mIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3lSYWRpdXM9MF0gLSBUaGUgdmVydGljYWwgcmFkaXVzIG9mIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kQW5nbGU9MzYwXSAtIFRoZSBlbmQgYW5nbGUgb2YgdGhlIGVsbGlwc2UsIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9ja3dpc2U9ZmFsc2VdIC0gV2hldGhlciB0aGUgZWxsaXBzZSBhbmdsZXMgYXJlIGdpdmVuIGFzIGNsb2Nrd2lzZSAoYHRydWVgKSBvciBjb3VudGVyLWNsb2Nrd2lzZSAoYGZhbHNlYCkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdGF0aW9uPTBdIC0gVGhlIHJvdGF0aW9uIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZWxsaXBzZVRvOiBmdW5jdGlvbiAoeFJhZGl1cywgeVJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGNsb2Nrd2lzZSwgcm90YXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVsbGlwc2UgPSBuZXcgRWxsaXBzZUN1cnZlKDAsIDAsIHhSYWRpdXMsIHlSYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBjbG9ja3dpc2UsIHJvdGF0aW9uKTtcclxuXHJcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMuZ2V0RW5kUG9pbnQodGhpcy5fdG1wVmVjMkEpO1xyXG5cclxuICAgICAgICAvLyAgQ2FsY3VsYXRlIHdoZXJlIHRvIGNlbnRlciB0aGUgZWxsaXBzZVxyXG4gICAgICAgIHZhciBzdGFydCA9IGVsbGlwc2UuZ2V0U3RhcnRQb2ludCh0aGlzLl90bXBWZWMyQik7XHJcblxyXG4gICAgICAgIGVuZC5zdWJ0cmFjdChzdGFydCk7XHJcblxyXG4gICAgICAgIGVsbGlwc2UueCA9IGVuZC54O1xyXG4gICAgICAgIGVsbGlwc2UueSA9IGVuZC55O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQoZWxsaXBzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFBhdGggZnJvbSBhIFBhdGggQ29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQgYmUgYSB7QGxpbmsgUGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OUGF0aH0sIGFzIHJldHVybmVkIGJ5IHtAbGluayAjdG9KU09OfS4gUHJvdmlkaW5nIGEgbWFsZm9ybWVkIG9iamVjdCBtYXkgY2F1c2UgZXJyb3JzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2Zyb21KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DdXJ2ZXMuSlNPTlBhdGh9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgUGF0aCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZnJvbUpTT046IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBkYXRhIHNob3VsZCBiZSBhbiBvYmplY3QgbWF0Y2hpbmcgdGhlIFBhdGgudG9KU09OIG9iamVjdCBzdHJ1Y3R1cmUuXHJcblxyXG4gICAgICAgIHRoaXMuY3VydmVzID0gW107XHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFBvaW50LnNldChkYXRhLngsIGRhdGEueSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0Nsb3NlID0gZGF0YS5hdXRvQ2xvc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5jdXJ2ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VydmUgPSBkYXRhLmN1cnZlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VydmUudHlwZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnTGluZUN1cnZlJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZChMaW5lQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdFbGxpcHNlQ3VydmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKEVsbGlwc2VDdXJ2ZS5mcm9tSlNPTihjdXJ2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NwbGluZUN1cnZlJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZChTcGxpbmVDdXJ2ZS5mcm9tSlNPTihjdXJ2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0N1YmljQmV6aWVyQ3VydmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKEN1YmljQmV6aWVyQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdRdWFkcmF0aWNCZXppZXJDdXJ2ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoUXVhZHJhdGljQmV6aWVyQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJlY3RhbmdsZSB3aXRoIGEgcG9zaXRpb24gYW5kIHNpemUgbWF0Y2hpbmcgdGhlIGJvdW5kcyBvZiB0aGlzIFBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBUaGUgUmVjdGFuZ2xlIHRvIHN0b3JlIHRoZSBib3VuZHMgaW4uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthY2N1cmFjeT0xNl0gLSBUaGUgYWNjdXJhY3kgb2YgdGhlIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEhpZ2hlciB2YWx1ZXMgYXJlIG1vcmUgYWNjdXJhdGUgYXQgdGhlIGNvc3Qgb2YgY2FsY3VsYXRpb24gc3BlZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbW9kaWZpZWQgYG91dGAgUmVjdGFuZ2xlLCBvciBhIG5ldyBSZWN0YW5nbGUgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldEJvdW5kczogZnVuY3Rpb24gKG91dCwgYWNjdXJhY3kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA9PT0gdW5kZWZpbmVkKSB7IGFjY3VyYWN5ID0gMTY7IH1cclxuXHJcbiAgICAgICAgb3V0LnggPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgIG91dC55ID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoKTtcclxuICAgICAgICB2YXIgbWF4UmlnaHQgPSBNQVRIX0NPTlNULk1JTl9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgdmFyIG1heEJvdHRvbSA9IE1BVEhfQ09OU1QuTUlOX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnZlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJ2ZS5hY3RpdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjdXJ2ZS5nZXRCb3VuZHMoYm91bmRzLCBhY2N1cmFjeSk7XHJcblxyXG4gICAgICAgICAgICBvdXQueCA9IE1hdGgubWluKG91dC54LCBib3VuZHMueCk7XHJcbiAgICAgICAgICAgIG91dC55ID0gTWF0aC5taW4ob3V0LnksIGJvdW5kcy55KTtcclxuXHJcbiAgICAgICAgICAgIG1heFJpZ2h0ID0gTWF0aC5tYXgobWF4UmlnaHQsIGJvdW5kcy5yaWdodCk7XHJcbiAgICAgICAgICAgIG1heEJvdHRvbSA9IE1hdGgubWF4KG1heEJvdHRvbSwgYm91bmRzLmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQucmlnaHQgPSBtYXhSaWdodDtcclxuICAgICAgICBvdXQuYm90dG9tID0gbWF4Qm90dG9tO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBQYXRoIGF0IHRoZSBlbmQgb2YgZWFjaCBDdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FjaGVkIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgaW4gc3Vic2VxdWVudCBjYWxscy4gVGhlIGNhY2hlIGlzIG9ubHkgaW52YWxpZGF0ZWQgd2hlbiB0aGUge0BsaW5rICNjdXJ2ZXN9IGFycmF5IGNoYW5nZXMgaW4gbGVuZ3RoLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpbmFjY3VyYWNpZXMgaWYgYSBDdXJ2ZSBpbiB0aGUgUGF0aCBpcyBjaGFuZ2VkLCBvciBpZiBhIEN1cnZlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgaXMgYWRkZWQgaW4gaXRzIHBsYWNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2dldEN1cnZlTGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgUGF0aCBhdCB0aGUgZW5kIG9mIGVhY2ggb25lIG9mIGl0cyBDdXJ2ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldEN1cnZlTGVuZ3RoczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBXZSB1c2UgY2FjaGUgdmFsdWVzIGlmIGN1cnZlcyBhbmQgY2FjaGUgYXJyYXkgYXJlIHNhbWUgbGVuZ3RoXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGggPT09IHRoaXMuY3VydmVzLmxlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdldCBsZW5ndGggb2Ygc3ViLWN1cnZlXHJcbiAgICAgICAgLy8gUHVzaCBzdW1zIGludG8gY2FjaGVkIGFycmF5XHJcblxyXG4gICAgICAgIHZhciBsZW5ndGhzID0gW107XHJcbiAgICAgICAgdmFyIHN1bXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VydmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3VtcyArPSB0aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKTtcclxuXHJcbiAgICAgICAgICAgIGxlbmd0aHMucHVzaChzdW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FjaGVMZW5ndGhzID0gbGVuZ3RocztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZW5kaW5nIHBvaW50IG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEEgUGF0aCdzIGVuZGluZyBwb2ludCBpcyBlcXVpdmFsZW50IHRvIHRoZSBlbmRpbmcgcG9pbnQgb2YgdGhlIGxhc3QgQ3VydmUgaW4gdGhlIFBhdGguIEZvciBhbiBlbXB0eSBQYXRoLCB0aGUgZW5kaW5nIHBvaW50IGlzIGF0IHRoZSBQYXRoJ3MgZGVmaW5lZCB7QGxpbmsgI3N0YXJ0UG9pbnR9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2dldEVuZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gVGhlIG9iamVjdCB0byBzdG9yZSB0aGUgcG9pbnQgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIG1vZGlmaWVkIGBvdXRgIG9iamVjdCwgb3IgYSBuZXcgVmVjdG9yMiBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RW5kUG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VydmVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGggLSAxXS5nZXRQb2ludCgxLCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQuY29weSh0aGlzLnN0YXJ0UG9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIFBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSB7QGxpbmsgI2dldEN1cnZlTGVuZ3Roc31cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgUGF0aC5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVuZ3RoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsZW5zID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbnNbbGVucy5sZW5ndGggLSAxXTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVG8gZ2V0IGFjY3VyYXRlIHBvaW50IHdpdGggcmVmZXJlbmNlIHRvXHJcbiAgICAvLyBlbnRpcmUgcGF0aCBkaXN0YW5jZSBhdCB0aW1lIHQsXHJcbiAgICAvLyBmb2xsb3dpbmcgaGFzIHRvIGJlIGRvbmU6XHJcblxyXG4gICAgLy8gMS4gTGVuZ3RoIG9mIGVhY2ggc3ViIHBhdGggaGF2ZSB0byBiZSBrbm93blxyXG4gICAgLy8gMi4gTG9jYXRlIGFuZCBpZGVudGlmeSB0eXBlIG9mIGN1cnZlXHJcbiAgICAvLyAzLiBHZXQgdCBmb3IgdGhlIGN1cnZlXHJcbiAgICAvLyA0LiBSZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCh0JylcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBhdCB0aGUgZ2l2ZW4gbm9ybWFsaXplZCBsb2NhdGlvbiAoYmV0d2VlbiAwIGFuZCAxKSBvbiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIGVudGlyZSBQYXRoLCBub3QgdG8gYW4gaW5kaXZpZHVhbCBDdXJ2ZS4gQSBsb2NhdGlvbiBvZiAwLjUgaXMgYWx3YXlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFBhdGggYW5kIGlzIHRodXMgYW4gZXF1YWwgZGlzdGFuY2UgYXdheSBmcm9tIGJvdGggaXRzIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9pbnRzLiBJbiBhIFBhdGggd2l0aCBvbmUgQ3VydmUsIGl0IHdvdWxkIGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIEN1cnZlOyBpbiBhIFBhdGggd2l0aCB0d28gQ3VydmVzLCBpdCBjb3VsZCBiZSBhbnl3aGVyZSBvbiBlaXRoZXIgb25lIG9mIHRoZW0gZGVwZW5kaW5nIG9uIHRoZWlyIGxlbmd0aHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIGxvY2F0aW9uIG9mIHRoZSBwb2ludCB0byByZXR1cm4sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBUaGUgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjYWxjdWxhdGVkIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBgVmVjdG9yMmAgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7XHJcbiAgICAgICAgdmFyIGN1cnZlTGVuZ3RocyA9IHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSAoaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3VydmVMZW5ndGhzW2ldID49IGQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBkaWZmID0gY3VydmVMZW5ndGhzW2ldIC0gZDtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBzZWdtZW50TGVuZ3RoID0gY3VydmUuZ2V0TGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdSA9IChzZWdtZW50TGVuZ3RoID09PSAwKSA/IDAgOiAxIC0gZGlmZiAvIHNlZ21lbnRMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnZlLmdldFBvaW50QXQodSwgb3V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbG9vcCB3aGVyZSBzdW0gIT0gMCwgc3VtID4gZCAsIHN1bSsxIDxkXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBlcXVhbCB0byB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGZpcnN0IEN1cnZlIGlmIGl0IGRpZmZlcnMgZnJvbSB7QGxpbmsgc3RhcnRQb2ludH0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXZpc2lvbnM9MTJdIC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gZGl2aWRlIHRoZSBwYXRoIGluIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gQW4gYXJyYXkgb2YgVmVjdG9yMiBvYmplY3RzIHRoYXQgY29udGFpbmluZyB0aGUgcG9pbnRzIGFsb25nIHRoZSBQYXRoLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChkaXZpc2lvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkKSB7IGRpdmlzaW9ucyA9IDEyOyB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuICAgICAgICB2YXIgbGFzdDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnZlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJ2ZS5hY3RpdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGN1cnZlLmdldFJlc29sdXRpb24oZGl2aXNpb25zKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwdHMgPSBjdXJ2ZS5nZXRQb2ludHMocmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGorKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcHRzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QuZXF1YWxzKHBvaW50KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmVzIG5vIGNvbnNlY3V0aXZlIHBvaW50cyBhcmUgZHVwbGljYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0ID0gcG9pbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSAmJiBwb2ludHMubGVuZ3RoID4gMSAmJiAhcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXS5lcXVhbHMocG9pbnRzWzBdKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHBvaW50c1swXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb21seSBjaG9zZW4gcG9pbnQgYW55d2hlcmUgb24gdGhlIHBhdGguIFRoaXMgZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBgZ2V0UG9pbnRgIGluIHRoYXQgaXQgbWF5IHJldHVybiBhIHBvaW50IG9uIGFueSBDdXJ2ZSBpbnNpZGUgdGhpcyBwYXRoLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIGNhbGxpbmcgdGhpcyBtZXRob2QgbXVsdGlwbGUgdGltZXMsIHRoZSBwb2ludHMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGVxdWFsbHkgc3BhY2VkIHNwYXRpYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIGBWZWN0b3IyYCBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSByZXN1bHQuIElmIGB1bmRlZmluZWRgIGEgbmV3IGBWZWN0b3IyYCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIG1vZGlmaWVkIGBvdXRgIG9iamVjdCwgb3IgYSBuZXcgYFZlY3RvcjJgIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb21Qb2ludDogZnVuY3Rpb24gKG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludChNYXRoLnJhbmRvbSgpLCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZXMgdGhpcyBQYXRoIGludG8gYSBzZXQgb2YgZXF1YWxseSBzcGFjZWQgcG9pbnRzLFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVzdWx0aW5nIHBvaW50cyBhcmUgZXF1YWxseSBzcGFjZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBwb2ludHMnIHBvc2l0aW9uIG9uIHRoZSBwYXRoLCBidXQgbm90IG5lY2Vzc2FyaWx5IGVxdWFsbHkgc3BhY2VkIHNwYXRpYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRTcGFjZWRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpdmlzaW9ucz00MF0gLSBUaGUgYW1vdW50IG9mIHBvaW50cyB0byBkaXZpZGUgdGhpcyBQYXRoIGludG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMltdfSBBIGxpc3Qgb2YgdGhlIHBvaW50cyB0aGlzIHBhdGggd2FzIHN1YmRpdmlkZWQgaW50by5cclxuICAgICAqL1xyXG4gICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSA0MDsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGRpdmlzaW9uczsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5nZXRQb2ludChpIC8gZGl2aXNpb25zKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludHNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBvaW50cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRTdGFydFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gYFZlY3RvcjJgIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdC4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgYFZlY3RvcjJgIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBWZWN0b3IyIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBnZXRTdGFydFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuY29weSh0aGlzLnN0YXJ0UG9pbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBsaW5lIGN1cnZlIGZyb20gdGhlIHByZXZpb3VzIGVuZCBwb2ludCB0byB4L3kuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjbGluZVRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMil9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBsaW5lJ3MgZW5kIHBvaW50LCBvciBhIGBWZWN0b3IyYCBjb250YWluaW5nIHRoZSBlbnRpcmUgZW5kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGxpbmUncyBlbmQgcG9pbnQsIGlmIGEgbnVtYmVyIHdhcyBwYXNzZWQgYXMgdGhlIFggcGFyYW1ldGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgbGluZVRvOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFZlY3RvcjIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90bXBWZWMyQi5jb3B5KHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90bXBWZWMyQi5zZXQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5kID0gdGhpcy5nZXRFbmRQb2ludCh0aGlzLl90bXBWZWMyQSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZChuZXcgTGluZUN1cnZlKFsgZW5kLngsIGVuZC55LCB0aGlzLl90bXBWZWMyQi54LCB0aGlzLl90bXBWZWMyQi55IF0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgc3BsaW5lIGN1cnZlIHN0YXJ0aW5nIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQsIHVzaW5nIHRoZSBnaXZlbiBwb2ludHMgb24gdGhlIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI3NwbGluZVRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gcG9pbnRzIC0gVGhlIHBvaW50cyB0aGUgbmV3bHkgY3JlYXRlZCBzcGxpbmUgY3VydmUgc2hvdWxkIGNvbnNpc3Qgb2YuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzcGxpbmVUbzogZnVuY3Rpb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBwb2ludHMudW5zaGlmdCh0aGlzLmdldEVuZFBvaW50KCkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IFNwbGluZUN1cnZlKHBvaW50cykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBcImdhcFwiIGluIHRoaXMgcGF0aCBmcm9tIHRoZSBwYXRoJ3MgY3VycmVudCBlbmQgcG9pbnQgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gICAgICogXHJcbiAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoaXMgUGF0aCdzIGVuZCBwb2ludCB3aWxsIGJlIGVxdWFsIHRvIHRoZSBnaXZlbiBjb29yZGluYXRlc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9zaXRpb24gdG8gbW92ZSB0aGUgcGF0aCdzIGVuZCBwb2ludCB0bywgb3IgYSBgVmVjdG9yMmAgY29udGFpbmluZyB0aGUgZW50aXJlIG5ldyBlbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvc2l0aW9uIHRvIG1vdmUgdGhlIHBhdGgncyBlbmQgcG9pbnQgdG8sIGlmIGEgbnVtYmVyIHdhcyBwYXNzZWQgYXMgdGhlIFggY29vcmRpbmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlBhdGh9IFRoaXMgUGF0aCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBWZWN0b3IyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKG5ldyBNb3ZlUGF0aFRvKHgueCwgeC55KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChuZXcgTW92ZVBhdGhUbyh4LCB5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoaXMgUGF0aCB0byBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhdGggaW5mb3JtYXRpb24gYW5kIGl0cyBjb25zdGl0dWVudCBjdXJ2ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05QYXRofSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIHBhdGgncyBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VydmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0LnB1c2godGhpcy5jdXJ2ZXNbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICB4OiB0aGlzLnN0YXJ0UG9pbnQueCxcclxuICAgICAgICAgICAgeTogdGhpcy5zdGFydFBvaW50LnksXHJcbiAgICAgICAgICAgIGF1dG9DbG9zZTogdGhpcy5hdXRvQ2xvc2UsXHJcbiAgICAgICAgICAgIGN1cnZlczogb3V0XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWNoZUxlbmd0aHMgbXVzdCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjdXBkYXRlQXJjTGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUFyY0xlbmd0aHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlcyBvZiB0aGlzIFBhdGgsIGNsZWFyaW5nIGl0cyBpbnRlcm5hbCByZWZlcmVuY2VzIHRvIG9iamVjdHMgc28gdGhleSBjYW4gYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUGF0aCBPYmplY3QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3BhdGhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBQYXRoLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIFBhdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhlIFBhdGggT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncGF0aCcsIGZ1bmN0aW9uICh4LCB5KVxyXG57XHJcbiAgICByZXR1cm4gbmV3IFBhdGgoeCwgeSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/path/Path.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/DataManager.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/data/DataManager.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/data/events/index.js\");\r\n\r\n/**\r\n * @callback DataEachCallback\r\n *\r\n * @param {*} parent - The parent object of the DataManager.\r\n * @param {string} key - The key of the value.\r\n * @param {*} value - The value.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The Data Manager Component features a means to store pieces of data specific to a Game Object, System or Plugin.\r\n * You can then search, query it, and retrieve the data. The parent must either extend EventEmitter,\r\n * or have a property called `events` that is an instance of it.\r\n *\r\n * @class DataManager\r\n * @memberof Phaser.Data\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} parent - The object that this DataManager belongs to.\r\n * @param {Phaser.Events.EventEmitter} eventEmitter - The DataManager's event emitter.\r\n */\r\nvar DataManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function DataManager (parent, eventEmitter)\r\n    {\r\n        /**\r\n         * The object that this DataManager belongs to.\r\n         *\r\n         * @name Phaser.Data.DataManager#parent\r\n         * @type {*}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = parent;\r\n\r\n        /**\r\n         * The DataManager's event emitter.\r\n         *\r\n         * @name Phaser.Data.DataManager#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = eventEmitter;\r\n\r\n        if (!eventEmitter)\r\n        {\r\n            this.events = (parent.events) ? parent.events : parent;\r\n        }\r\n\r\n        /**\r\n         * The data list.\r\n         *\r\n         * @name Phaser.Data.DataManager#list\r\n         * @type {Object.<string, *>}\r\n         * @default {}\r\n         * @since 3.0.0\r\n         */\r\n        this.list = {};\r\n\r\n        /**\r\n         * The public values list. You can use this to access anything you have stored\r\n         * in this Data Manager. For example, if you set a value called `gold` you can\r\n         * access it via:\r\n         *\r\n         * ```javascript\r\n         * this.data.values.gold;\r\n         * ```\r\n         *\r\n         * You can also modify it directly:\r\n         * \r\n         * ```javascript\r\n         * this.data.values.gold += 1000;\r\n         * ```\r\n         *\r\n         * Doing so will emit a `setdata` event from the parent of this Data Manager.\r\n         * \r\n         * Do not modify this object directly. Adding properties directly to this object will not\r\n         * emit any events. Always use `DataManager.set` to create new items the first time around.\r\n         *\r\n         * @name Phaser.Data.DataManager#values\r\n         * @type {Object.<string, *>}\r\n         * @default {}\r\n         * @since 3.10.0\r\n         */\r\n        this.values = {};\r\n\r\n        /**\r\n         * Whether setting data is frozen for this DataManager.\r\n         *\r\n         * @name Phaser.Data.DataManager#_frozen\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._frozen = false;\r\n\r\n        if (!parent.hasOwnProperty('sys') && this.events)\r\n        {\r\n            this.events.once('destroy', this.destroy, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Retrieves the value for the given key, or undefined if it doesn't exist.\r\n     *\r\n     * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\r\n     * \r\n     * ```javascript\r\n     * this.data.get('gold');\r\n     * ```\r\n     *\r\n     * Or access the value directly:\r\n     * \r\n     * ```javascript\r\n     * this.data.values.gold;\r\n     * ```\r\n     *\r\n     * You can also pass in an array of keys, in which case an array of values will be returned:\r\n     * \r\n     * ```javascript\r\n     * this.data.get([ 'gold', 'armor', 'health' ]);\r\n     * ```\r\n     *\r\n     * This approach is useful for destructuring arrays in ES6.\r\n     *\r\n     * @method Phaser.Data.DataManager#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\r\n     *\r\n     * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\r\n     */\r\n    get: function (key)\r\n    {\r\n        var list = this.list;\r\n\r\n        if (Array.isArray(key))\r\n        {\r\n            var output = [];\r\n\r\n            for (var i = 0; i < key.length; i++)\r\n            {\r\n                output.push(list[key[i]]);\r\n            }\r\n\r\n            return output;\r\n        }\r\n        else\r\n        {\r\n            return list[key];\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Retrieves all data values in a new object.\r\n     *\r\n     * @method Phaser.Data.DataManager#getAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Object.<string, *>} All data values.\r\n     */\r\n    getAll: function ()\r\n    {\r\n        var results = {};\r\n\r\n        for (var key in this.list)\r\n        {\r\n            if (this.list.hasOwnProperty(key))\r\n            {\r\n                results[key] = this.list[key];\r\n            }\r\n        }\r\n\r\n        return results;\r\n    },\r\n\r\n    /**\r\n     * Queries the DataManager for the values of keys matching the given regular expression.\r\n     *\r\n     * @method Phaser.Data.DataManager#query\r\n     * @since 3.0.0\r\n     *\r\n     * @param {RegExp} search - A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).\r\n     *\r\n     * @return {Object.<string, *>} The values of the keys matching the search string.\r\n     */\r\n    query: function (search)\r\n    {\r\n        var results = {};\r\n\r\n        for (var key in this.list)\r\n        {\r\n            if (this.list.hasOwnProperty(key) && key.match(search))\r\n            {\r\n                results[key] = this.list[key];\r\n            }\r\n        }\r\n\r\n        return results;\r\n    },\r\n\r\n    /**\r\n     * Sets a value for the given key. If the key doesn't already exist in the Data Manager then it is created.\r\n     * \r\n     * ```javascript\r\n     * data.set('name', 'Red Gem Stone');\r\n     * ```\r\n     *\r\n     * You can also pass in an object of key value pairs as the first argument:\r\n     *\r\n     * ```javascript\r\n     * data.set({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\r\n     * ```\r\n     *\r\n     * To get a value back again you can call `get`:\r\n     * \r\n     * ```javascript\r\n     * data.get('gold');\r\n     * ```\r\n     * \r\n     * Or you can access the value directly via the `values` property, where it works like any other variable:\r\n     * \r\n     * ```javascript\r\n     * data.values.gold += 50;\r\n     * ```\r\n     *\r\n     * When the value is first set, a `setdata` event is emitted.\r\n     *\r\n     * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\r\n     * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata-PlayerLives`.\r\n     * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\r\n     *\r\n     * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\r\n     * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n     *\r\n     * @method Phaser.Data.DataManager#set\r\n     * @fires Phaser.Data.Events#SET_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|object)} key - The key to set the value for. Or an object or key value pairs. If an object the `data` argument is ignored.\r\n     * @param {*} data - The value to set for the given key. If an object is provided as the key this argument is ignored.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    set: function (key, data)\r\n    {\r\n        if (this._frozen)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (typeof key === 'string')\r\n        {\r\n            return this.setValue(key, data);\r\n        }\r\n        else\r\n        {\r\n            for (var entry in key)\r\n            {\r\n                this.setValue(entry, key[entry]);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal value setter, called automatically by the `set` method.\r\n     *\r\n     * @method Phaser.Data.DataManager#setValue\r\n     * @fires Phaser.Data.Events#SET_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n     * @private\r\n     * @since 3.10.0\r\n     *\r\n     * @param {string} key - The key to set the value for.\r\n     * @param {*} data - The value to set.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    setValue: function (key, data)\r\n    {\r\n        if (this._frozen)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (this.has(key))\r\n        {\r\n            //  Hit the key getter, which will in turn emit the events.\r\n            this.values[key] = data;\r\n        }\r\n        else\r\n        {\r\n            var _this = this;\r\n            var list = this.list;\r\n            var events = this.events;\r\n            var parent = this.parent;\r\n\r\n            Object.defineProperty(this.values, key, {\r\n\r\n                enumerable: true,\r\n                \r\n                configurable: true,\r\n\r\n                get: function ()\r\n                {\r\n                    return list[key];\r\n                },\r\n\r\n                set: function (value)\r\n                {\r\n                    if (!_this._frozen)\r\n                    {\r\n                        var previousValue = list[key];\r\n                        list[key] = value;\r\n\r\n                        events.emit(Events.CHANGE_DATA, parent, key, value, previousValue);\r\n                        events.emit(Events.CHANGE_DATA_KEY + key, parent, value, previousValue);\r\n                    }\r\n                }\r\n\r\n            });\r\n\r\n            list[key] = data;\r\n\r\n            events.emit(Events.SET_DATA, parent, key, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes all data entries to the given callback.\r\n     *\r\n     * @method Phaser.Data.DataManager#each\r\n     * @since 3.0.0\r\n     *\r\n     * @param {DataEachCallback} callback - The function to call.\r\n     * @param {*} [context] - Value to use as `this` when executing callback.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    each: function (callback, context)\r\n    {\r\n        var args = [ this.parent, null, undefined ];\r\n\r\n        for (var i = 1; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (var key in this.list)\r\n        {\r\n            args[1] = key;\r\n            args[2] = this.list[key];\r\n\r\n            callback.apply(context, args);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Merge the given object of key value pairs into this DataManager.\r\n     *\r\n     * Any newly created values will emit a `setdata` event. Any updated values (see the `overwrite` argument)\r\n     * will emit a `changedata` event.\r\n     *\r\n     * @method Phaser.Data.DataManager#merge\r\n     * @fires Phaser.Data.Events#SET_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA\r\n     * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Object.<string, *>} data - The data to merge.\r\n     * @param {boolean} [overwrite=true] - Whether to overwrite existing data. Defaults to true.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    merge: function (data, overwrite)\r\n    {\r\n        if (overwrite === undefined) { overwrite = true; }\r\n\r\n        //  Merge data from another component into this one\r\n        for (var key in data)\r\n        {\r\n            if (data.hasOwnProperty(key) && (overwrite || (!overwrite && !this.has(key))))\r\n            {\r\n                this.setValue(key, data[key]);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Remove the value for the given key.\r\n     *\r\n     * If the key is found in this Data Manager it is removed from the internal lists and a\r\n     * `removedata` event is emitted.\r\n     * \r\n     * You can also pass in an array of keys, in which case all keys in the array will be removed:\r\n     * \r\n     * ```javascript\r\n     * this.data.remove([ 'gold', 'armor', 'health' ]);\r\n     * ```\r\n     *\r\n     * @method Phaser.Data.DataManager#remove\r\n     * @fires Phaser.Data.Events#REMOVE_DATA\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} key - The key to remove, or an array of keys to remove.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    remove: function (key)\r\n    {\r\n        if (this._frozen)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (Array.isArray(key))\r\n        {\r\n            for (var i = 0; i < key.length; i++)\r\n            {\r\n                this.removeValue(key[i]);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            return this.removeValue(key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal value remover, called automatically by the `remove` method.\r\n     *\r\n     * @method Phaser.Data.DataManager#removeValue\r\n     * @private\r\n     * @fires Phaser.Data.Events#REMOVE_DATA\r\n     * @since 3.10.0\r\n     *\r\n     * @param {string} key - The key to set the value for.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    removeValue: function (key)\r\n    {\r\n        if (this.has(key))\r\n        {\r\n            var data = this.list[key];\r\n\r\n            delete this.list[key];\r\n            delete this.values[key];\r\n\r\n            this.events.emit(Events.REMOVE_DATA, this.parent, key, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieves the data associated with the given 'key', deletes it from this Data Manager, then returns it.\r\n     *\r\n     * @method Phaser.Data.DataManager#pop\r\n     * @fires Phaser.Data.Events#REMOVE_DATA\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the value to retrieve and delete.\r\n     *\r\n     * @return {*} The value of the given key.\r\n     */\r\n    pop: function (key)\r\n    {\r\n        var data = undefined;\r\n\r\n        if (!this._frozen && this.has(key))\r\n        {\r\n            data = this.list[key];\r\n\r\n            delete this.list[key];\r\n            delete this.values[key];\r\n\r\n            this.events.emit(Events.REMOVE_DATA, this.parent, key, data);\r\n        }\r\n\r\n        return data;\r\n    },\r\n\r\n    /**\r\n     * Determines whether the given key is set in this Data Manager.\r\n     * \r\n     * Please note that the keys are case-sensitive and must be valid JavaScript Object property strings.\r\n     * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n     *\r\n     * @method Phaser.Data.DataManager#has\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key to check.\r\n     *\r\n     * @return {boolean} Returns `true` if the key exists, otherwise `false`.\r\n     */\r\n    has: function (key)\r\n    {\r\n        return this.list.hasOwnProperty(key);\r\n    },\r\n\r\n    /**\r\n     * Freeze or unfreeze this Data Manager. A frozen Data Manager will block all attempts\r\n     * to create new values or update existing ones.\r\n     *\r\n     * @method Phaser.Data.DataManager#setFreeze\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - Whether to freeze or unfreeze the Data Manager.\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    setFreeze: function (value)\r\n    {\r\n        this._frozen = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Delete all data in this Data Manager and unfreeze it.\r\n     *\r\n     * @method Phaser.Data.DataManager#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Data.DataManager} This DataManager object.\r\n     */\r\n    reset: function ()\r\n    {\r\n        for (var key in this.list)\r\n        {\r\n            delete this.list[key];\r\n            delete this.values[key];\r\n        }\r\n\r\n        this._frozen = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Destroy this data manager.\r\n     *\r\n     * @method Phaser.Data.DataManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.events.off(Events.CHANGE_DATA);\r\n        this.events.off(Events.SET_DATA);\r\n        this.events.off(Events.REMOVE_DATA);\r\n\r\n        this.parent = null;\r\n    },\r\n\r\n    /**\r\n     * Gets or sets the frozen state of this Data Manager.\r\n     * A frozen Data Manager will block all attempts to create new values or update existing ones.\r\n     *\r\n     * @name Phaser.Data.DataManager#freeze\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    freeze: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._frozen;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._frozen = (value) ? true : false;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Return the total number of entries in this Data Manager.\r\n     *\r\n     * @name Phaser.Data.DataManager#count\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    count: {\r\n\r\n        get: function ()\r\n        {\r\n            var i = 0;\r\n\r\n            for (var key in this.list)\r\n            {\r\n                if (this.list[key] !== undefined)\r\n                {\r\n                    i++;\r\n                }\r\n            }\r\n\r\n            return i;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = DataManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL0RhdGFNYW5hZ2VyLmpzPzQ1MzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLGdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxLQUFLO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQTJEO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhOztBQUViOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsRUFBRTtBQUNqQixlQUFlLEtBQUs7QUFDcEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGtCQUFrQjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvRGF0YU1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBEYXRhRWFjaENhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gcGFyZW50IC0gVGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIERhdGFNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBnYW1lIG9iamVjdCwga2V5LCBhbmQgZGF0YS5cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgRGF0YSBNYW5hZ2VyIENvbXBvbmVudCBmZWF0dXJlcyBhIG1lYW5zIHRvIHN0b3JlIHBpZWNlcyBvZiBkYXRhIHNwZWNpZmljIHRvIGEgR2FtZSBPYmplY3QsIFN5c3RlbSBvciBQbHVnaW4uXHJcbiAqIFlvdSBjYW4gdGhlbiBzZWFyY2gsIHF1ZXJ5IGl0LCBhbmQgcmV0cmlldmUgdGhlIGRhdGEuIFRoZSBwYXJlbnQgbXVzdCBlaXRoZXIgZXh0ZW5kIEV2ZW50RW1pdHRlcixcclxuICogb3IgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBgZXZlbnRzYCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIGl0LlxyXG4gKlxyXG4gKiBAY2xhc3MgRGF0YU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EYXRhXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCAtIFRoZSBvYmplY3QgdGhhdCB0aGlzIERhdGFNYW5hZ2VyIGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGV2ZW50RW1pdHRlciAtIFRoZSBEYXRhTWFuYWdlcidzIGV2ZW50IGVtaXR0ZXIuXHJcbiAqL1xyXG52YXIgRGF0YU1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGF0YU1hbmFnZXIgKHBhcmVudCwgZXZlbnRFbWl0dGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBvYmplY3QgdGhhdCB0aGlzIERhdGFNYW5hZ2VyIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNwYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7Kn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIERhdGFNYW5hZ2VyJ3MgZXZlbnQgZW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IGV2ZW50RW1pdHRlcjtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudEVtaXR0ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cyA9IChwYXJlbnQuZXZlbnRzKSA/IHBhcmVudC5ldmVudHMgOiBwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGF0YSBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjbGlzdFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgKj59XHJcbiAgICAgICAgICogQGRlZmF1bHQge31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpc3QgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHB1YmxpYyB2YWx1ZXMgbGlzdC4gWW91IGNhbiB1c2UgdGhpcyB0byBhY2Nlc3MgYW55dGhpbmcgeW91IGhhdmUgc3RvcmVkXHJcbiAgICAgICAgICogaW4gdGhpcyBEYXRhIE1hbmFnZXIuIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IGEgdmFsdWUgY2FsbGVkIGBnb2xkYCB5b3UgY2FuXHJcbiAgICAgICAgICogYWNjZXNzIGl0IHZpYTpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAgICAgKiB0aGlzLmRhdGEudmFsdWVzLmdvbGQ7XHJcbiAgICAgICAgICogYGBgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBZb3UgY2FuIGFsc28gbW9kaWZ5IGl0IGRpcmVjdGx5OlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAgICAgKiB0aGlzLmRhdGEudmFsdWVzLmdvbGQgKz0gMTAwMDtcclxuICAgICAgICAgKiBgYGBcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIERvaW5nIHNvIHdpbGwgZW1pdCBhIGBzZXRkYXRhYCBldmVudCBmcm9tIHRoZSBwYXJlbnQgb2YgdGhpcyBEYXRhIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRG8gbm90IG1vZGlmeSB0aGlzIG9iamVjdCBkaXJlY3RseS4gQWRkaW5nIHByb3BlcnRpZXMgZGlyZWN0bHkgdG8gdGhpcyBvYmplY3Qgd2lsbCBub3RcclxuICAgICAgICAgKiBlbWl0IGFueSBldmVudHMuIEFsd2F5cyB1c2UgYERhdGFNYW5hZ2VyLnNldGAgdG8gY3JlYXRlIG5ldyBpdGVtcyB0aGUgZmlyc3QgdGltZSBhcm91bmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciN2YWx1ZXNcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsICo+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHt9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgc2V0dGluZyBkYXRhIGlzIGZyb3plbiBmb3IgdGhpcyBEYXRhTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI19mcm96ZW5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZnJvemVuID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50Lmhhc093blByb3BlcnR5KCdzeXMnKSAmJiB0aGlzLmV2ZW50cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLm9uY2UoJ2Rlc3Ryb3knLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gYWNjZXNzIHZhbHVlcyB2aWEgdGhlIGB2YWx1ZXNgIG9iamVjdC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSBrZXkgY2FsbGVkIGBnb2xkYCB5b3UgY2FuIGRvIGVpdGhlcjpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLmdldCgnZ29sZCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT3IgYWNjZXNzIHRoZSB2YWx1ZSBkaXJlY3RseTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLnZhbHVlcy5nb2xkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gYXJyYXkgb2Yga2V5cywgaW4gd2hpY2ggY2FzZSBhbiBhcnJheSBvZiB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLmdldChbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGFwcHJvYWNoIGlzIHVzZWZ1bCBmb3IgZGVzdHJ1Y3R1cmluZyBhcnJheXMgaW4gRVM2LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgYW4gYXJyYXkgb2Yga2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFsdWUgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBrZXksIG9yIGFuIGFycmF5IG9mIHZhbHVlcywgdGhlIG9yZGVyIG9mIHdoaWNoIHdpbGwgbWF0Y2ggdGhlIGlucHV0IGFycmF5LlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLmxpc3Q7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gobGlzdFtrZXlbaV1dKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGFsbCBkYXRhIHZhbHVlcyBpbiBhIG5ldyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNnZXRBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCAqPn0gQWxsIGRhdGEgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QuaGFzT3duUHJvcGVydHkoa2V5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gdGhpcy5saXN0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJpZXMgdGhlIERhdGFNYW5hZ2VyIGZvciB0aGUgdmFsdWVzIG9mIGtleXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI3F1ZXJ5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gc2VhcmNoIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LiBJZiBhIG5vbi1SZWdFeHAgb2JqZWN0IG9iaiBpcyBwYXNzZWQsIGl0IGlzIGltcGxpY2l0bHkgY29udmVydGVkIHRvIGEgUmVnRXhwIGJ5IHVzaW5nIG5ldyBSZWdFeHAob2JqKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgKj59IFRoZSB2YWx1ZXMgb2YgdGhlIGtleXMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VhcmNoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmxpc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0Lmhhc093blByb3BlcnR5KGtleSkgJiYga2V5Lm1hdGNoKHNlYXJjaCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXkuIElmIHRoZSBrZXkgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSBEYXRhIE1hbmFnZXIgdGhlbiBpdCBpcyBjcmVhdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnNldCgnbmFtZScsICdSZWQgR2VtIFN0b25lJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvYmplY3Qgb2Yga2V5IHZhbHVlIHBhaXJzIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnNldCh7IG5hbWU6ICdSZWQgR2VtIFN0b25lJywgbGV2ZWw6IDIsIG93bmVyOiAnTGluaycsIGdvbGQ6IDUwIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogVG8gZ2V0IGEgdmFsdWUgYmFjayBhZ2FpbiB5b3UgY2FuIGNhbGwgYGdldGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIGRhdGEuZ2V0KCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogT3IgeW91IGNhbiBhY2Nlc3MgdGhlIHZhbHVlIGRpcmVjdGx5IHZpYSB0aGUgYHZhbHVlc2AgcHJvcGVydHksIHdoZXJlIGl0IHdvcmtzIGxpa2UgYW55IG90aGVyIHZhcmlhYmxlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnZhbHVlcy5nb2xkICs9IDUwO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiB0aGUgdmFsdWUgaXMgZmlyc3Qgc2V0LCBhIGBzZXRkYXRhYCBldmVudCBpcyBlbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIGEgYGNoYW5nZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgaW5zdGVhZCwgYWxvbmcgYW4gZXZlbnQgbmFtZWQgYWZ0ZXIgdGhlIGtleS5cclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXBkYXRlZCBhbiBleGlzdGluZyBrZXkgY2FsbGVkIGBQbGF5ZXJMaXZlc2AgdGhlbiBpdCB3b3VsZCBlbWl0IHRoZSBldmVudCBgY2hhbmdlZGF0YS1QbGF5ZXJMaXZlc2AuXHJcbiAgICAgKiBUaGVzZSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHJlZ2FyZGxlc3MgaWYgeW91IHVzZSB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIHZhbHVlLCBvciB0aGUgZGlyZWN0IGB2YWx1ZXNgIHNldHRlci5cclxuICAgICAqXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkYXRhIGtleXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCBtdXN0IGJlIHZhbGlkIEphdmFTY3JpcHQgT2JqZWN0IHByb3BlcnR5IHN0cmluZ3MuXHJcbiAgICAgKiBUaGlzIG1lYW5zIHRoZSBrZXlzIGBnb2xkYCBhbmQgYEdvbGRgIGFyZSB0cmVhdGVkIGFzIHR3byB1bmlxdWUgdmFsdWVzIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjc2V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1NFVF9EQVRBXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBX0tFWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG9iamVjdCl9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuIE9yIGFuIG9iamVjdCBvciBrZXkgdmFsdWUgcGFpcnMuIElmIGFuIG9iamVjdCB0aGUgYGRhdGFgIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgZ2l2ZW4ga2V5LiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgYXMgdGhlIGtleSB0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Zyb3plbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUoa2V5LCBkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgZW50cnkgaW4ga2V5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKGVudHJ5LCBrZXlbZW50cnldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdmFsdWUgc2V0dGVyLCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYHNldGAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjc2V0VmFsdWVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjU0VUX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFfS0VZXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIHNldCB0aGUgdmFsdWUgZm9yLlxyXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIC0gVGhlIHZhbHVlIHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn0gVGhpcyBEYXRhTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcm96ZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhcyhrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEhpdCB0aGUga2V5IGdldHRlciwgd2hpY2ggd2lsbCBpbiB0dXJuIGVtaXQgdGhlIGV2ZW50cy5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5saXN0O1xyXG4gICAgICAgICAgICB2YXIgZXZlbnRzID0gdGhpcy5ldmVudHM7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnZhbHVlcywga2V5LCB7XHJcblxyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG5cclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl9mcm96ZW4pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGxpc3Rba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFtrZXldID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFdmVudHMuQ0hBTkdFX0RBVEEsIHBhcmVudCwga2V5LCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEV2ZW50cy5DSEFOR0VfREFUQV9LRVkgKyBrZXksIHBhcmVudCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGlzdFtrZXldID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KEV2ZW50cy5TRVRfREFUQSwgcGFyZW50LCBrZXksIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBkYXRhIGVudHJpZXMgdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtEYXRhRWFjaENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY29udGV4dF0gLSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGdhbWUgb2JqZWN0LCBrZXksIGFuZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gWyB0aGlzLnBhcmVudCwgbnVsbCwgdW5kZWZpbmVkIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5saXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1sxXSA9IGtleTtcclxuICAgICAgICAgICAgYXJnc1syXSA9IHRoaXMubGlzdFtrZXldO1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXJnZSB0aGUgZ2l2ZW4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBpbnRvIHRoaXMgRGF0YU1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQW55IG5ld2x5IGNyZWF0ZWQgdmFsdWVzIHdpbGwgZW1pdCBhIGBzZXRkYXRhYCBldmVudC4gQW55IHVwZGF0ZWQgdmFsdWVzIChzZWUgdGhlIGBvdmVyd3JpdGVgIGFyZ3VtZW50KVxyXG4gICAgICogd2lsbCBlbWl0IGEgYGNoYW5nZWRhdGFgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjbWVyZ2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjU0VUX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFfS0VZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCAqPn0gZGF0YSAtIFRoZSBkYXRhIHRvIG1lcmdlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3ZlcndyaXRlPXRydWVdIC0gV2hldGhlciB0byBvdmVyd3JpdGUgZXhpc3RpbmcgZGF0YS4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn0gVGhpcyBEYXRhTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1lcmdlOiBmdW5jdGlvbiAoZGF0YSwgb3ZlcndyaXRlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdmVyd3JpdGUgPT09IHVuZGVmaW5lZCkgeyBvdmVyd3JpdGUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8vICBNZXJnZSBkYXRhIGZyb20gYW5vdGhlciBjb21wb25lbnQgaW50byB0aGlzIG9uZVxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAob3ZlcndyaXRlIHx8ICghb3ZlcndyaXRlICYmICF0aGlzLmhhcyhrZXkpKSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgaXMgZm91bmQgaW4gdGhpcyBEYXRhIE1hbmFnZXIgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbCBsaXN0cyBhbmQgYVxyXG4gICAgICogYHJlbW92ZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGFycmF5IG9mIGtleXMsIGluIHdoaWNoIGNhc2UgYWxsIGtleXMgaW4gdGhlIGFycmF5IHdpbGwgYmUgcmVtb3ZlZDpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLnJlbW92ZShbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI3JlbW92ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5EYXRhLkV2ZW50cyNSRU1PVkVfREFUQVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5IC0gVGhlIGtleSB0byByZW1vdmUsIG9yIGFuIGFycmF5IG9mIGtleXMgdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcm96ZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWYWx1ZShrZXlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVZhbHVlKGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSByZW1vdmVyLCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYHJlbW92ZWAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjcmVtb3ZlVmFsdWVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVWYWx1ZTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5saXN0W2tleV07XHJcblxyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5saXN0W2tleV07XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUkVNT1ZFX0RBVEEsIHRoaXMucGFyZW50LCBrZXksIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gJ2tleScsIGRlbGV0ZXMgaXQgZnJvbSB0aGlzIERhdGEgTWFuYWdlciwgdGhlbiByZXR1cm5zIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjcG9wXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUgYW5kIGRlbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFsdWUgb2YgdGhlIGdpdmVuIGtleS5cclxuICAgICAqL1xyXG4gICAgcG9wOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkYXRhID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2Zyb3plbiAmJiB0aGlzLmhhcyhrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YSA9IHRoaXMubGlzdFtrZXldO1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLlJFTU9WRV9EQVRBLCB0aGlzLnBhcmVudCwga2V5LCBkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IGlzIHNldCBpbiB0aGlzIERhdGEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUga2V5cyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIG11c3QgYmUgdmFsaWQgSmF2YVNjcmlwdCBPYmplY3QgcHJvcGVydHkgc3RyaW5ncy5cclxuICAgICAqIFRoaXMgbWVhbnMgdGhlIGtleXMgYGdvbGRgIGFuZCBgR29sZGAgYXJlIHRyZWF0ZWQgYXMgdHdvIHVuaXF1ZSB2YWx1ZXMgd2l0aGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBrZXkgZXhpc3RzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGcmVlemUgb3IgdW5mcmVlemUgdGhpcyBEYXRhIE1hbmFnZXIuIEEgZnJvemVuIERhdGEgTWFuYWdlciB3aWxsIGJsb2NrIGFsbCBhdHRlbXB0c1xyXG4gICAgICogdG8gY3JlYXRlIG5ldyB2YWx1ZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNzZXRGcmVlemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBXaGV0aGVyIHRvIGZyZWV6ZSBvciB1bmZyZWV6ZSB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJlZXplOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZnJvemVuID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZSBhbGwgZGF0YSBpbiB0aGlzIERhdGEgTWFuYWdlciBhbmQgdW5mcmVlemUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5saXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Zyb3plbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoaXMgZGF0YSBtYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLkNIQU5HRV9EQVRBKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlNFVF9EQVRBKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlJFTU9WRV9EQVRBKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZnJvemVuIHN0YXRlIG9mIHRoaXMgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICogQSBmcm96ZW4gRGF0YSBNYW5hZ2VyIHdpbGwgYmxvY2sgYWxsIGF0dGVtcHRzIHRvIGNyZWF0ZSBuZXcgdmFsdWVzIG9yIHVwZGF0ZSBleGlzdGluZyBvbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI2ZyZWV6ZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJlZXplOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW47XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9mcm96ZW4gPSAodmFsdWUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIERhdGEgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNjb3VudFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY291bnQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGlzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdFtrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFNYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/DataManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/DataManagerPlugin.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/data/DataManagerPlugin.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DataManager = __webpack_require__(/*! ./DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Data Component features a means to store pieces of data specific to a Game Object, System or Plugin.\r\n * You can then search, query it, and retrieve the data. The parent must either extend EventEmitter,\r\n * or have a property called `events` that is an instance of it.\r\n *\r\n * @class DataManagerPlugin\r\n * @extends Phaser.Data.DataManager\r\n * @memberof Phaser.Data\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene that this DataManager belongs to.\r\n */\r\nvar DataManagerPlugin = new Class({\r\n\r\n    Extends: DataManager,\r\n\r\n    initialize:\r\n\r\n    function DataManagerPlugin (scene)\r\n    {\r\n        DataManager.call(this, scene, scene.sys.events);\r\n\r\n        /**\r\n         * A reference to the Scene that this DataManager belongs to.\r\n         *\r\n         * @name Phaser.Data.DataManagerPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene's Systems.\r\n         *\r\n         * @name Phaser.Data.DataManagerPlugin#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Data.DataManagerPlugin#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.events = this.systems.events;\r\n\r\n        this.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Data.DataManagerPlugin#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        this.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Data.DataManagerPlugin#shutdown\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Data.DataManagerPlugin#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        DataManager.prototype.destroy.call(this);\r\n\r\n        this.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('DataManagerPlugin', DataManagerPlugin, 'data');\r\n\r\nmodule.exports = DataManagerPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL0RhdGFNYW5hZ2VyUGx1Z2luLmpzP2QzMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsb0VBQWU7QUFDekMsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvRGF0YU1hbmFnZXJQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4vRGF0YU1hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBEYXRhIENvbXBvbmVudCBmZWF0dXJlcyBhIG1lYW5zIHRvIHN0b3JlIHBpZWNlcyBvZiBkYXRhIHNwZWNpZmljIHRvIGEgR2FtZSBPYmplY3QsIFN5c3RlbSBvciBQbHVnaW4uXHJcbiAqIFlvdSBjYW4gdGhlbiBzZWFyY2gsIHF1ZXJ5IGl0LCBhbmQgcmV0cmlldmUgdGhlIGRhdGEuIFRoZSBwYXJlbnQgbXVzdCBlaXRoZXIgZXh0ZW5kIEV2ZW50RW1pdHRlcixcclxuICogb3IgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBgZXZlbnRzYCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIGl0LlxyXG4gKlxyXG4gKiBAY2xhc3MgRGF0YU1hbmFnZXJQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EYXRhXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBEYXRhTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIERhdGFNYW5hZ2VyUGx1Z2luID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBEYXRhTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIERhdGFNYW5hZ2VyUGx1Z2luIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICBEYXRhTWFuYWdlci5jYWxsKHRoaXMsIHNjZW5lLCBzY2VuZS5zeXMuZXZlbnRzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBEYXRhTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlclBsdWdpbiNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyUGx1Z2luI3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlclBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBEYXRhTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5QbHVnaW5DYWNoZS5yZWdpc3RlcignRGF0YU1hbmFnZXJQbHVnaW4nLCBEYXRhTWFuYWdlclBsdWdpbiwgJ2RhdGEnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGF0YU1hbmFnZXJQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/DataManagerPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Change Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item in the data store is changed.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * a change data event from a Game Object you would use: `sprite.data.on('changedata', listener)`.\r\n * \r\n * This event is dispatched for all items that change in the Data Manager.\r\n * To listen for the change of a specific item, use the `CHANGE_DATA_KEY_EVENT` event.\r\n *\r\n * @event Phaser.Data.Events#CHANGE_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that the Data Manager responsible for this event belongs to.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} value - The new value of the item in the Data Manager.\r\n * @param {any} previousValue - The previous value of the item in the Data Manager.\r\n */\r\nmodule.exports = 'changedata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9FVkVOVC5qcz81OTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDaGFuZ2UgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGFuIGl0ZW0gaW4gdGhlIGRhdGEgc3RvcmUgaXMgY2hhbmdlZC5cclxuICogXHJcbiAqIEdhbWUgT2JqZWN0cyB3aXRoIGRhdGEgZW5hYmxlZCBoYXZlIGFuIGluc3RhbmNlIG9mIGEgRGF0YSBNYW5hZ2VyIHVuZGVyIHRoZSBgZGF0YWAgcHJvcGVydHkuIFNvLCB0byBsaXN0ZW4gZm9yXHJcbiAqIGEgY2hhbmdlIGRhdGEgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHlvdSB3b3VsZCB1c2U6IGBzcHJpdGUuZGF0YS5vbignY2hhbmdlZGF0YScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBpdGVtcyB0aGF0IGNoYW5nZSBpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoZSBjaGFuZ2Ugb2YgYSBzcGVjaWZpYyBpdGVtLCB1c2UgdGhlIGBDSEFOR0VfREFUQV9LRVlfRVZFTlRgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50IGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgZGF0YSBpdGVtIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBpdGVtIGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBwcmV2aW91c1ZhbHVlIC0gVGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBpdGVtIGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjaGFuZ2VkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Change Data Key Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item in the data store is changed.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the change of a specific data item from a Game Object you would use: `sprite.data.on('changedata-key', listener)`,\r\n * where `key` is the unique string key of the data item. For example, if you have a data item stored called `gold`\r\n * then you can listen for `sprite.data.on('changedata-gold')`.\r\n *\r\n * @event Phaser.Data.Events#CHANGE_DATA_KEY\r\n * @since 3.16.1\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} value - The item that was updated in the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n * @param {any} previousValue - The previous item that was updated in the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'changedata-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9LRVlfRVZFTlQuanM/YTQ3ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixXQUFXLE9BQU87QUFDbEIsV0FBVyxJQUFJO0FBQ2YsV0FBVyxJQUFJO0FBQ2Y7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvZXZlbnRzL0NIQU5HRV9EQVRBX0tFWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDaGFuZ2UgRGF0YSBLZXkgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBEYXRhIE1hbmFnZXIgd2hlbiBhbiBpdGVtIGluIHRoZSBkYXRhIHN0b3JlIGlzIGNoYW5nZWQuXHJcbiAqIFxyXG4gKiBHYW1lIE9iamVjdHMgd2l0aCBkYXRhIGVuYWJsZWQgaGF2ZSBhbiBpbnN0YW5jZSBvZiBhIERhdGEgTWFuYWdlciB1bmRlciB0aGUgYGRhdGFgIHByb3BlcnR5LiBTbywgdG8gbGlzdGVuIGZvclxyXG4gKiB0aGUgY2hhbmdlIG9mIGEgc3BlY2lmaWMgZGF0YSBpdGVtIGZyb20gYSBHYW1lIE9iamVjdCB5b3Ugd291bGQgdXNlOiBgc3ByaXRlLmRhdGEub24oJ2NoYW5nZWRhdGEta2V5JywgbGlzdGVuZXIpYCxcclxuICogd2hlcmUgYGtleWAgaXMgdGhlIHVuaXF1ZSBzdHJpbmcga2V5IG9mIHRoZSBkYXRhIGl0ZW0uIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGRhdGEgaXRlbSBzdG9yZWQgY2FsbGVkIGBnb2xkYFxyXG4gKiB0aGVuIHlvdSBjYW4gbGlzdGVuIGZvciBgc3ByaXRlLmRhdGEub24oJ2NoYW5nZWRhdGEtZ29sZCcpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5EYXRhLkV2ZW50cyNDSEFOR0VfREFUQV9LRVlcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBpbnN0YW5jZSBvZiB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGRhdGEgaXRlbSB3aXRoaW4gdGhlIERhdGEgTWFuYWdlci5cclxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGl0ZW0gdGhhdCB3YXMgdXBkYXRlZCBpbiB0aGUgRGF0YSBNYW5hZ2VyLiBUaGlzIGNhbiBiZSBvZiBhbnkgZGF0YSB0eXBlLCBpLmUuIGEgc3RyaW5nLCBib29sZWFuLCBudW1iZXIsIG9iamVjdCBvciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHthbnl9IHByZXZpb3VzVmFsdWUgLSBUaGUgcHJldmlvdXMgaXRlbSB0aGF0IHdhcyB1cGRhdGVkIGluIHRoZSBEYXRhIE1hbmFnZXIuIFRoaXMgY2FuIGJlIG9mIGFueSBkYXRhIHR5cGUsIGkuZS4gYSBzdHJpbmcsIGJvb2xlYW4sIG51bWJlciwgb2JqZWN0IG9yIGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2hhbmdlZGF0YS0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Remove Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item is removed from it.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the removal of a data item on a Game Object you would use: `sprite.data.on('removedata', listener)`.\r\n *\r\n * @event Phaser.Data.Events#REMOVE_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} data - The item that was removed from the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'removedata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9SRU1PVkVfREFUQV9FVkVOVC5qcz8xZTBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9SRU1PVkVfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBSZW1vdmUgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGFuIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGl0LlxyXG4gKiBcclxuICogR2FtZSBPYmplY3RzIHdpdGggZGF0YSBlbmFibGVkIGhhdmUgYW4gaW5zdGFuY2Ugb2YgYSBEYXRhIE1hbmFnZXIgdW5kZXIgdGhlIGBkYXRhYCBwcm9wZXJ0eS4gU28sIHRvIGxpc3RlbiBmb3JcclxuICogdGhlIHJlbW92YWwgb2YgYSBkYXRhIGl0ZW0gb24gYSBHYW1lIE9iamVjdCB5b3Ugd291bGQgdXNlOiBgc3ByaXRlLmRhdGEub24oJ3JlbW92ZWRhdGEnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBpbnN0YW5jZSBvZiB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGRhdGEgaXRlbSB3aXRoaW4gdGhlIERhdGEgTWFuYWdlci5cclxuICogQHBhcmFtIHthbnl9IGRhdGEgLSBUaGUgaXRlbSB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIERhdGEgTWFuYWdlci4gVGhpcyBjYW4gYmUgb2YgYW55IGRhdGEgdHlwZSwgaS5lLiBhIHN0cmluZywgYm9vbGVhbiwgbnVtYmVyLCBvYmplY3Qgb3IgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZW1vdmVkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/events/SET_DATA_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/data/events/SET_DATA_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Set Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when a new item is added to the data store.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the addition of a new data item on a Game Object you would use: `sprite.data.on('setdata', listener)`.\r\n *\r\n * @event Phaser.Data.Events#SET_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} data - The item that was added to the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'setdata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9TRVRfREFUQV9FVkVOVC5qcz9hMmNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9TRVRfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTZXQgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGEgbmV3IGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGRhdGEgc3RvcmUuXHJcbiAqIFxyXG4gKiBHYW1lIE9iamVjdHMgd2l0aCBkYXRhIGVuYWJsZWQgaGF2ZSBhbiBpbnN0YW5jZSBvZiBhIERhdGEgTWFuYWdlciB1bmRlciB0aGUgYGRhdGFgIHByb3BlcnR5LiBTbywgdG8gbGlzdGVuIGZvclxyXG4gKiB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZGF0YSBpdGVtIG9uIGEgR2FtZSBPYmplY3QgeW91IHdvdWxkIHVzZTogYHNwcml0ZS5kYXRhLm9uKCdzZXRkYXRhJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5EYXRhLkV2ZW50cyNTRVRfREFUQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7YW55fSBwYXJlbnQgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgb3ducyB0aGUgaW5zdGFuY2Ugb2YgdGhlIERhdGEgTWFuYWdlciByZXNwb25zaWJsZSBmb3IgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBkYXRhIGl0ZW0gd2l0aGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBkYXRhIC0gVGhlIGl0ZW0gdGhhdCB3YXMgYWRkZWQgdG8gdGhlIERhdGEgTWFuYWdlci4gVGhpcyBjYW4gYmUgb2YgYW55IGRhdGEgdHlwZSwgaS5lLiBhIHN0cmluZywgYm9vbGVhbiwgbnVtYmVyLCBvYmplY3Qgb3IgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzZXRkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/SET_DATA_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/events/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/data/events/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Data.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CHANGE_DATA: __webpack_require__(/*! ./CHANGE_DATA_EVENT */ \"./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js\"),\r\n    CHANGE_DATA_KEY: __webpack_require__(/*! ./CHANGE_DATA_KEY_EVENT */ \"./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js\"),\r\n    REMOVE_DATA: __webpack_require__(/*! ./REMOVE_DATA_EVENT */ \"./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js\"),\r\n    SET_DATA: __webpack_require__(/*! ./SET_DATA_EVENT */ \"./node_modules/phaser/src/data/events/SET_DATA_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9pbmRleC5qcz85M2FlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXFCO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLCtGQUF5QjtBQUN0RCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDOUMsY0FBYyxtQkFBTyxDQUFDLGlGQUFrQjs7QUFFeEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRhdGEuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ0hBTkdFX0RBVEE6IHJlcXVpcmUoJy4vQ0hBTkdFX0RBVEFfRVZFTlQnKSxcclxuICAgIENIQU5HRV9EQVRBX0tFWTogcmVxdWlyZSgnLi9DSEFOR0VfREFUQV9LRVlfRVZFTlQnKSxcclxuICAgIFJFTU9WRV9EQVRBOiByZXF1aXJlKCcuL1JFTU9WRV9EQVRBX0VWRU5UJyksXHJcbiAgICBTRVRfREFUQTogcmVxdWlyZSgnLi9TRVRfREFUQV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/data/index.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/data/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Data\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    DataManager: __webpack_require__(/*! ./DataManager */ \"./node_modules/phaser/src/data/DataManager.js\"),\r\n    DataManagerPlugin: __webpack_require__(/*! ./DataManagerPlugin */ \"./node_modules/phaser/src/data/DataManagerPlugin.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/data/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2luZGV4LmpzP2IwOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLGdFQUFVOztBQUU5QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EYXRhXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRGF0YU1hbmFnZXI6IHJlcXVpcmUoJy4vRGF0YU1hbmFnZXInKSxcclxuICAgIERhdGFNYW5hZ2VyUGx1Z2luOiByZXF1aXJlKCcuL0RhdGFNYW5hZ2VyUGx1Z2luJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Audio.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/device/Audio.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\n\r\n/**\r\n * Determines the audio playback capabilities of the device running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.audio` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Audio\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} audioData - Can this device play HTML Audio tags?\r\n * @property {boolean} dolby - Can this device play EC-3 Dolby Digital Plus files?\r\n * @property {boolean} m4a - Can this device can play m4a files.\r\n * @property {boolean} mp3 - Can this device play mp3 files?\r\n * @property {boolean} ogg - Can this device play ogg files?\r\n * @property {boolean} opus - Can this device play opus files?\r\n * @property {boolean} wav - Can this device play wav files?\r\n * @property {boolean} webAudio - Does this device have the Web Audio API?\r\n * @property {boolean} webm - Can this device play webm files?\r\n */\r\nvar Audio = {\r\n\r\n    audioData: false,\r\n    dolby: false,\r\n    m4a: false,\r\n    mp3: false,\r\n    ogg: false,\r\n    opus: false,\r\n    wav: false,\r\n    webAudio: false,\r\n    webm: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n    Audio.audioData = !!(window['Audio']);\r\n\r\n    Audio.webAudio = !!(window['AudioContext'] || window['webkitAudioContext']);\r\n\r\n    var audioElement = document.createElement('audio');\r\n\r\n    var result = !!audioElement.canPlayType;\r\n\r\n    try\r\n    {\r\n        if (result)\r\n        {\r\n            if (audioElement.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''))\r\n            {\r\n                Audio.ogg = true;\r\n            }\r\n\r\n            if (audioElement.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, '') || audioElement.canPlayType('audio/opus;').replace(/^no$/, ''))\r\n            {\r\n                Audio.opus = true;\r\n            }\r\n\r\n            if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, ''))\r\n            {\r\n                Audio.mp3 = true;\r\n            }\r\n\r\n            //  Mimetypes accepted:\r\n            //  developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\r\n            //  bit.ly/iphoneoscodecs\r\n            if (audioElement.canPlayType('audio/wav; codecs=\"1\"').replace(/^no$/, ''))\r\n            {\r\n                Audio.wav = true;\r\n            }\r\n\r\n            if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, ''))\r\n            {\r\n                Audio.m4a = true;\r\n            }\r\n\r\n            if (audioElement.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, ''))\r\n            {\r\n                Audio.webm = true;\r\n            }\r\n\r\n            if (audioElement.canPlayType('audio/mp4;codecs=\"ec-3\"') !== '')\r\n            {\r\n                if (Browser.edge)\r\n                {\r\n                    Audio.dolby = true;\r\n                }\r\n                else if (Browser.safari && Browser.safariVersion >= 9)\r\n                {\r\n                    if ((/Mac OS X (\\d+)_(\\d+)/).test(navigator.userAgent))\r\n                    {\r\n                        var major = parseInt(RegExp.$1, 10);\r\n                        var minor = parseInt(RegExp.$2, 10);\r\n\r\n                        if ((major === 10 && minor >= 11) || major > 10)\r\n                        {\r\n                            Audio.dolby = true;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    catch (e)\r\n    {\r\n        //  Nothing to do here\r\n    }\r\n\r\n    return Audio;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQXVkaW8uanM/MjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLDhEQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9ELDZFQUE2RTtBQUNqSTtBQUNBO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBOztBQUVBLHNEQUFzRCwwQ0FBMEM7QUFDaEc7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RldmljZS9BdWRpby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJyb3dzZXIgPSByZXF1aXJlKCcuL0Jyb3dzZXInKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSBhdWRpbyBwbGF5YmFjayBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZSBydW5uaW5nIHRoaXMgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqIFRoZXNlIHZhbHVlcyBhcmUgcmVhZC1vbmx5IGFuZCBwb3B1bGF0ZWQgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlIG9mIHRoZSBnYW1lLlxyXG4gKiBUaGV5IGFyZSB0aGVuIHJlZmVyZW5jZWQgYnkgaW50ZXJuYWwgZ2FtZSBzeXN0ZW1zIGFuZCBhcmUgYXZhaWxhYmxlIGZvciB5b3UgdG8gYWNjZXNzXHJcbiAqIHZpYSBgdGhpcy5zeXMuZ2FtZS5kZXZpY2UuYXVkaW9gIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuQXVkaW9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGF1ZGlvRGF0YSAtIENhbiB0aGlzIGRldmljZSBwbGF5IEhUTUwgQXVkaW8gdGFncz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBkb2xieSAtIENhbiB0aGlzIGRldmljZSBwbGF5IEVDLTMgRG9sYnkgRGlnaXRhbCBQbHVzIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG00YSAtIENhbiB0aGlzIGRldmljZSBjYW4gcGxheSBtNGEgZmlsZXMuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbXAzIC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgbXAzIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9nZyAtIENhbiB0aGlzIGRldmljZSBwbGF5IG9nZyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBvcHVzIC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgb3B1cyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSB3YXYgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSB3YXYgZmlsZXM/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2ViQXVkaW8gLSBEb2VzIHRoaXMgZGV2aWNlIGhhdmUgdGhlIFdlYiBBdWRpbyBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2VibSAtIENhbiB0aGlzIGRldmljZSBwbGF5IHdlYm0gZmlsZXM/XHJcbiAqL1xyXG52YXIgQXVkaW8gPSB7XHJcblxyXG4gICAgYXVkaW9EYXRhOiBmYWxzZSxcclxuICAgIGRvbGJ5OiBmYWxzZSxcclxuICAgIG00YTogZmFsc2UsXHJcbiAgICBtcDM6IGZhbHNlLFxyXG4gICAgb2dnOiBmYWxzZSxcclxuICAgIG9wdXM6IGZhbHNlLFxyXG4gICAgd2F2OiBmYWxzZSxcclxuICAgIHdlYkF1ZGlvOiBmYWxzZSxcclxuICAgIHdlYm06IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBBdWRpby5hdWRpb0RhdGEgPSAhISh3aW5kb3dbJ0F1ZGlvJ10pO1xyXG5cclxuICAgIEF1ZGlvLndlYkF1ZGlvID0gISEod2luZG93WydBdWRpb0NvbnRleHQnXSB8fCB3aW5kb3dbJ3dlYmtpdEF1ZGlvQ29udGV4dCddKTtcclxuXHJcbiAgICB2YXIgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gISFhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGU7XHJcblxyXG4gICAgdHJ5XHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlc3VsdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBBdWRpby5vZ2cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz1cIm9wdXNcIicpLnJlcGxhY2UoL15ubyQvLCAnJykgfHwgYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9vcHVzOycpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvLm9wdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9tcGVnOycpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvLm1wMyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBNaW1ldHlwZXMgYWNjZXB0ZWQ6XHJcbiAgICAgICAgICAgIC8vICBkZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vTWVkaWFfZm9ybWF0c19zdXBwb3J0ZWRfYnlfdGhlX2F1ZGlvX2FuZF92aWRlb19lbGVtZW50c1xyXG4gICAgICAgICAgICAvLyAgYml0Lmx5L2lwaG9uZW9zY29kZWNzXHJcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2F1ZGlvL3dhdjsgY29kZWNzPVwiMVwiJykucmVwbGFjZSgvXm5vJC8sICcnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgQXVkaW8ud2F2ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8veC1tNGE7JykgfHwgYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9hYWM7JykucmVwbGFjZSgvXm5vJC8sICcnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgQXVkaW8ubTRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8vd2VibTsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBBdWRpby53ZWJtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8vbXA0O2NvZGVjcz1cImVjLTNcIicpICE9PSAnJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIuZWRnZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBBdWRpby5kb2xieSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChCcm93c2VyLnNhZmFyaSAmJiBCcm93c2VyLnNhZmFyaVZlcnNpb24gPj0gOSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKC9NYWMgT1MgWCAoXFxkKylfKFxcZCspLykudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvciA9IHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlub3IgPSBwYXJzZUludChSZWdFeHAuJDIsIDEwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFqb3IgPT09IDEwICYmIG1pbm9yID49IDExKSB8fCBtYWpvciA+IDEwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpby5kb2xieSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyB0byBkbyBoZXJlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEF1ZGlvO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGluaXQoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Audio.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Browser.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/device/Browser.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\");\r\n\r\n/**\r\n * Determines the browser type and version running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.browser` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Browser\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} chrome - Set to true if running in Chrome.\r\n * @property {boolean} edge - Set to true if running in Microsoft Edge browser.\r\n * @property {boolean} firefox - Set to true if running in Firefox.\r\n * @property {boolean} ie - Set to true if running in Internet Explorer 11 or less (not Edge).\r\n * @property {boolean} mobileSafari - Set to true if running in Mobile Safari.\r\n * @property {boolean} opera - Set to true if running in Opera.\r\n * @property {boolean} safari - Set to true if running in Safari.\r\n * @property {boolean} silk - Set to true if running in the Silk browser (as used on the Amazon Kindle)\r\n * @property {boolean} trident - Set to true if running a Trident version of Internet Explorer (IE11+)\r\n * @property {number} chromeVersion - If running in Chrome this will contain the major version number.\r\n * @property {number} firefoxVersion - If running in Firefox this will contain the major version number.\r\n * @property {number} ieVersion - If running in Internet Explorer this will contain the major version number. Beyond IE10 you should use Browser.trident and Browser.tridentVersion.\r\n * @property {number} safariVersion - If running in Safari this will contain the major version number.\r\n * @property {number} tridentVersion - If running in Internet Explorer 11 this will contain the major version number. See {@link http://msdn.microsoft.com/en-us/library/ie/ms537503(v=vs.85).aspx}\r\n */\r\nvar Browser = {\r\n\r\n    chrome: false,\r\n    chromeVersion: 0,\r\n    edge: false,\r\n    firefox: false,\r\n    firefoxVersion: 0,\r\n    ie: false,\r\n    ieVersion: 0,\r\n    mobileSafari: false,\r\n    opera: false,\r\n    safari: false,\r\n    safariVersion: 0,\r\n    silk: false,\r\n    trident: false,\r\n    tridentVersion: 0\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n    var ua = navigator.userAgent;\r\n\r\n    if (/Edge\\/\\d+/.test(ua))\r\n    {\r\n        Browser.edge = true;\r\n    }\r\n    else if ((/Chrome\\/(\\d+)/).test(ua) && !OS.windowsPhone)\r\n    {\r\n        Browser.chrome = true;\r\n        Browser.chromeVersion = parseInt(RegExp.$1, 10);\r\n    }\r\n    else if ((/Firefox\\D+(\\d+)/).test(ua))\r\n    {\r\n        Browser.firefox = true;\r\n        Browser.firefoxVersion = parseInt(RegExp.$1, 10);\r\n    }\r\n    else if ((/AppleWebKit/).test(ua) && OS.iOS)\r\n    {\r\n        Browser.mobileSafari = true;\r\n    }\r\n    else if ((/MSIE (\\d+\\.\\d+);/).test(ua))\r\n    {\r\n        Browser.ie = true;\r\n        Browser.ieVersion = parseInt(RegExp.$1, 10);\r\n    }\r\n    else if ((/Opera/).test(ua))\r\n    {\r\n        Browser.opera = true;\r\n    }\r\n    else if ((/Safari/).test(ua) && !OS.windowsPhone)\r\n    {\r\n        Browser.safari = true;\r\n    }\r\n    else if ((/Trident\\/(\\d+\\.\\d+)(.*)rv:(\\d+\\.\\d+)/).test(ua))\r\n    {\r\n        Browser.ie = true;\r\n        Browser.trident = true;\r\n        Browser.tridentVersion = parseInt(RegExp.$1, 10);\r\n        Browser.ieVersion = parseInt(RegExp.$3, 10);\r\n    }\r\n\r\n    //  Silk gets its own if clause because its ua also contains 'Safari'\r\n    if ((/Silk/).test(ua))\r\n    {\r\n        Browser.silk = true;\r\n    }\r\n\r\n    return Browser;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQnJvd3Nlci5qcz9hNjJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxTQUFTLG1CQUFPLENBQUMsb0RBQU07O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTyxzR0FBc0c7QUFDM0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBPUyA9IHJlcXVpcmUoJy4vT1MnKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSBicm93c2VyIHR5cGUgYW5kIHZlcnNpb24gcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmJyb3dzZXJgIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuQnJvd3NlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hyb21lIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBDaHJvbWUuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZWRnZSAtIFNldCB0byB0cnVlIGlmIHJ1bm5pbmcgaW4gTWljcm9zb2Z0IEVkZ2UgYnJvd3Nlci5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBmaXJlZm94IC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBGaXJlZm94LlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGllIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMSBvciBsZXNzIChub3QgRWRnZSkuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbW9iaWxlU2FmYXJpIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBNb2JpbGUgU2FmYXJpLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZXJhIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBPcGVyYS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzYWZhcmkgLSBTZXQgdG8gdHJ1ZSBpZiBydW5uaW5nIGluIFNhZmFyaS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzaWxrIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiB0aGUgU2lsayBicm93c2VyIChhcyB1c2VkIG9uIHRoZSBBbWF6b24gS2luZGxlKVxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRyaWRlbnQgLSBTZXQgdG8gdHJ1ZSBpZiBydW5uaW5nIGEgVHJpZGVudCB2ZXJzaW9uIG9mIEludGVybmV0IEV4cGxvcmVyIChJRTExKylcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNocm9tZVZlcnNpb24gLSBJZiBydW5uaW5nIGluIENocm9tZSB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmaXJlZm94VmVyc2lvbiAtIElmIHJ1bm5pbmcgaW4gRmlyZWZveCB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZVZlcnNpb24gLSBJZiBydW5uaW5nIGluIEludGVybmV0IEV4cGxvcmVyIHRoaXMgd2lsbCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gQmV5b25kIElFMTAgeW91IHNob3VsZCB1c2UgQnJvd3Nlci50cmlkZW50IGFuZCBCcm93c2VyLnRyaWRlbnRWZXJzaW9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2FmYXJpVmVyc2lvbiAtIElmIHJ1bm5pbmcgaW4gU2FmYXJpIHRoaXMgd2lsbCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRyaWRlbnRWZXJzaW9uIC0gSWYgcnVubmluZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMSB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuIFNlZSB7QGxpbmsgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM3NTAzKHY9dnMuODUpLmFzcHh9XHJcbiAqL1xyXG52YXIgQnJvd3NlciA9IHtcclxuXHJcbiAgICBjaHJvbWU6IGZhbHNlLFxyXG4gICAgY2hyb21lVmVyc2lvbjogMCxcclxuICAgIGVkZ2U6IGZhbHNlLFxyXG4gICAgZmlyZWZveDogZmFsc2UsXHJcbiAgICBmaXJlZm94VmVyc2lvbjogMCxcclxuICAgIGllOiBmYWxzZSxcclxuICAgIGllVmVyc2lvbjogMCxcclxuICAgIG1vYmlsZVNhZmFyaTogZmFsc2UsXHJcbiAgICBvcGVyYTogZmFsc2UsXHJcbiAgICBzYWZhcmk6IGZhbHNlLFxyXG4gICAgc2FmYXJpVmVyc2lvbjogMCxcclxuICAgIHNpbGs6IGZhbHNlLFxyXG4gICAgdHJpZGVudDogZmFsc2UsXHJcbiAgICB0cmlkZW50VmVyc2lvbjogMFxyXG5cclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaXQgKClcclxue1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuXHJcbiAgICBpZiAoL0VkZ2VcXC9cXGQrLy50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmVkZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKC9DaHJvbWVcXC8oXFxkKykvKS50ZXN0KHVhKSAmJiAhT1Mud2luZG93c1Bob25lKVxyXG4gICAge1xyXG4gICAgICAgIEJyb3dzZXIuY2hyb21lID0gdHJ1ZTtcclxuICAgICAgICBCcm93c2VyLmNocm9tZVZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvRmlyZWZveFxcRCsoXFxkKykvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmZpcmVmb3ggPSB0cnVlO1xyXG4gICAgICAgIEJyb3dzZXIuZmlyZWZveFZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvQXBwbGVXZWJLaXQvKS50ZXN0KHVhKSAmJiBPUy5pT1MpXHJcbiAgICB7XHJcbiAgICAgICAgQnJvd3Nlci5tb2JpbGVTYWZhcmkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKC9NU0lFIChcXGQrXFwuXFxkKyk7LykudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgQnJvd3Nlci5pZSA9IHRydWU7XHJcbiAgICAgICAgQnJvd3Nlci5pZVZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvT3BlcmEvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLm9wZXJhID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvU2FmYXJpLykudGVzdCh1YSkgJiYgIU9TLndpbmRvd3NQaG9uZSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLnNhZmFyaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoL1RyaWRlbnRcXC8oXFxkK1xcLlxcZCspKC4qKXJ2OihcXGQrXFwuXFxkKykvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmllID0gdHJ1ZTtcclxuICAgICAgICBCcm93c2VyLnRyaWRlbnQgPSB0cnVlO1xyXG4gICAgICAgIEJyb3dzZXIudHJpZGVudFZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgICAgICBCcm93c2VyLmllVmVyc2lvbiA9IHBhcnNlSW50KFJlZ0V4cC4kMywgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBTaWxrIGdldHMgaXRzIG93biBpZiBjbGF1c2UgYmVjYXVzZSBpdHMgdWEgYWxzbyBjb250YWlucyAnU2FmYXJpJ1xyXG4gICAgaWYgKCgvU2lsay8pLnRlc3QodWEpKVxyXG4gICAge1xyXG4gICAgICAgIEJyb3dzZXIuc2lsayA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEJyb3dzZXI7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Browser.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/CanvasFeatures.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/device/CanvasFeatures.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Determines the canvas features of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.canvasFeatures` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.CanvasFeatures\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} supportInverseAlpha - Set to true if the browser supports inversed alpha.\r\n * @property {boolean} supportNewBlendModes - Set to true if the browser supports new canvas blend modes.\r\n */\r\nvar CanvasFeatures = {\r\n\r\n    supportInverseAlpha: false,\r\n    supportNewBlendModes: false\r\n\r\n};\r\n\r\nfunction checkBlendMode ()\r\n{\r\n    var pngHead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/';\r\n    var pngEnd = 'AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==';\r\n\r\n    var magenta = new Image();\r\n\r\n    magenta.onload = function ()\r\n    {\r\n        var yellow = new Image();\r\n\r\n        yellow.onload = function ()\r\n        {\r\n            var canvas = CanvasPool.create(yellow, 6, 1);\r\n            var context = canvas.getContext('2d');\r\n\r\n            context.globalCompositeOperation = 'multiply';\r\n\r\n            context.drawImage(magenta, 0, 0);\r\n            context.drawImage(yellow, 2, 0);\r\n\r\n            if (!context.getImageData(2, 0, 1, 1))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            var data = context.getImageData(2, 0, 1, 1).data;\r\n\r\n            CanvasPool.remove(yellow);\r\n\r\n            CanvasFeatures.supportNewBlendModes = (data[0] === 255 && data[1] === 0 && data[2] === 0);\r\n        };\r\n\r\n        yellow.src = pngHead + '/wCKxvRF' + pngEnd;\r\n    };\r\n\r\n    magenta.src = pngHead + 'AP804Oa6' + pngEnd;\r\n\r\n    return false;\r\n}\r\n\r\nfunction checkInverseAlpha ()\r\n{\r\n    var canvas = CanvasPool.create(this, 2, 1);\r\n    var context = canvas.getContext('2d');\r\n\r\n    context.fillStyle = 'rgba(10, 20, 30, 0.5)';\r\n\r\n    //  Draw a single pixel\r\n    context.fillRect(0, 0, 1, 1);\r\n\r\n    //  Get the color values\r\n    var s1 = context.getImageData(0, 0, 1, 1);\r\n\r\n    if (s1 === null)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    //  Plot them to x2\r\n    context.putImageData(s1, 1, 0);\r\n\r\n    //  Get those values\r\n    var s2 = context.getImageData(1, 0, 1, 1);\r\n\r\n    //  Compare and return\r\n    return (s2.data[0] === s1.data[0] && s2.data[1] === s1.data[1] && s2.data[2] === s1.data[2] && s2.data[3] === s1.data[3]);\r\n}\r\n\r\nfunction init ()\r\n{\r\n    if (document !== undefined)\r\n    {\r\n        CanvasFeatures.supportNewBlendModes = checkBlendMode();\r\n        CanvasFeatures.supportInverseAlpha = checkInverseAlpha();\r\n    }\r\n\r\n    return CanvasFeatures;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQ2FudmFzRmVhdHVyZXMuanM/ZTgxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsNEZBQThCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RldmljZS9DYW52YXNGZWF0dXJlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB0aGUgY2FudmFzIGZlYXR1cmVzIG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5jYW52YXNGZWF0dXJlc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5DYW52YXNGZWF0dXJlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3VwcG9ydEludmVyc2VBbHBoYSAtIFNldCB0byB0cnVlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGludmVyc2VkIGFscGhhLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN1cHBvcnROZXdCbGVuZE1vZGVzIC0gU2V0IHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgbmV3IGNhbnZhcyBibGVuZCBtb2Rlcy5cclxuICovXHJcbnZhciBDYW52YXNGZWF0dXJlcyA9IHtcclxuXHJcbiAgICBzdXBwb3J0SW52ZXJzZUFscGhhOiBmYWxzZSxcclxuICAgIHN1cHBvcnROZXdCbGVuZE1vZGVzOiBmYWxzZVxyXG5cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrQmxlbmRNb2RlICgpXHJcbntcclxuICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XHJcbiAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XHJcblxyXG4gICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBtYWdlbnRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICB5ZWxsb3cub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh5ZWxsb3csIDYsIDEpO1xyXG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsIDAsIDEsIDEpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwgMCwgMSwgMSkuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHllbGxvdyk7XHJcblxyXG4gICAgICAgICAgICBDYW52YXNGZWF0dXJlcy5zdXBwb3J0TmV3QmxlbmRNb2RlcyA9IChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XHJcbiAgICB9O1xyXG5cclxuICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0ludmVyc2VBbHBoYSAoKVxyXG57XHJcbiAgICB2YXIgY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUodGhpcywgMiwgMSk7XHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMTAsIDIwLCAzMCwgMC41KSc7XHJcblxyXG4gICAgLy8gIERyYXcgYSBzaW5nbGUgcGl4ZWxcclxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgLy8gIEdldCB0aGUgY29sb3IgdmFsdWVzXHJcbiAgICB2YXIgczEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcclxuXHJcbiAgICBpZiAoczEgPT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBQbG90IHRoZW0gdG8geDJcclxuICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKHMxLCAxLCAwKTtcclxuXHJcbiAgICAvLyAgR2V0IHRob3NlIHZhbHVlc1xyXG4gICAgdmFyIHMyID0gY29udGV4dC5nZXRJbWFnZURhdGEoMSwgMCwgMSwgMSk7XHJcblxyXG4gICAgLy8gIENvbXBhcmUgYW5kIHJldHVyblxyXG4gICAgcmV0dXJuIChzMi5kYXRhWzBdID09PSBzMS5kYXRhWzBdICYmIHMyLmRhdGFbMV0gPT09IHMxLmRhdGFbMV0gJiYgczIuZGF0YVsyXSA9PT0gczEuZGF0YVsyXSAmJiBzMi5kYXRhWzNdID09PSBzMS5kYXRhWzNdKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBDYW52YXNGZWF0dXJlcy5zdXBwb3J0TmV3QmxlbmRNb2RlcyA9IGNoZWNrQmxlbmRNb2RlKCk7XHJcbiAgICAgICAgQ2FudmFzRmVhdHVyZXMuc3VwcG9ydEludmVyc2VBbHBoYSA9IGNoZWNrSW52ZXJzZUFscGhhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIENhbnZhc0ZlYXR1cmVzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGluaXQoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/CanvasFeatures.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Features.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/device/Features.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\");\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Determines the features of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.features` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Features\r\n * @since 3.0.0\r\n * \r\n * @property {?boolean} canvasBitBltShift - True if canvas supports a 'copy' bitblt onto itself when the source and destination regions overlap.\r\n * @property {boolean} canvas - Is canvas available?\r\n * @property {boolean} file - Is file available?\r\n * @property {boolean} fileSystem - Is fileSystem available?\r\n * @property {boolean} getUserMedia - Does the device support the getUserMedia API?\r\n * @property {boolean} littleEndian - Is the device big or little endian? (only detected if the browser supports TypedArrays)\r\n * @property {boolean} localStorage - Is localStorage available?\r\n * @property {boolean} pointerLock - Is Pointer Lock available?\r\n * @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views?\r\n * @property {boolean} vibration - Does the device support the Vibration API?\r\n * @property {boolean} webGL - Is webGL available?\r\n * @property {boolean} worker - Is worker available?\r\n */\r\nvar Features = {\r\n\r\n    canvas: false,\r\n    canvasBitBltShift: null,\r\n    file: false,\r\n    fileSystem: false,\r\n    getUserMedia: true,\r\n    littleEndian: false,\r\n    localStorage: false,\r\n    pointerLock: false,\r\n    support32bit: false,\r\n    vibration: false,\r\n    webGL: false,\r\n    worker: false\r\n\r\n};\r\n\r\n// Check Little or Big Endian system.\r\n// @author Matt DesLauriers (@mattdesl)\r\nfunction checkIsLittleEndian ()\r\n{\r\n    var a = new ArrayBuffer(4);\r\n    var b = new Uint8Array(a);\r\n    var c = new Uint32Array(a);\r\n\r\n    b[0] = 0xa1;\r\n    b[1] = 0xb2;\r\n    b[2] = 0xc3;\r\n    b[3] = 0xd4;\r\n\r\n    if (c[0] === 0xd4c3b2a1)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (c[0] === 0xa1b2c3d4)\r\n    {\r\n        return false;\r\n    }\r\n    else\r\n    {\r\n        //  Could not determine endianness\r\n        return null;\r\n    }\r\n}\r\n\r\nfunction init ()\r\n{\r\n    Features.canvas = !!window['CanvasRenderingContext2D'];\r\n\r\n    try\r\n    {\r\n        Features.localStorage = !!localStorage.getItem;\r\n    }\r\n    catch (error)\r\n    {\r\n        Features.localStorage = false;\r\n    }\r\n\r\n    Features.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob'];\r\n    Features.fileSystem = !!window['requestFileSystem'];\r\n\r\n    var isUint8 = false;\r\n\r\n    var testWebGL = function ()\r\n    {\r\n        if (window['WebGLRenderingContext'])\r\n        {\r\n            try\r\n            {\r\n                var canvas = CanvasPool.createWebGL(this);\r\n\r\n                var ctx = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\r\n\r\n                var canvas2D = CanvasPool.create2D(this);\r\n\r\n                var ctx2D = canvas2D.getContext('2d');\r\n\r\n                //  Can't be done on a webgl context\r\n                var image = ctx2D.createImageData(1, 1);\r\n\r\n                //  Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray.\r\n                //  @author Matt DesLauriers (@mattdesl)\r\n                isUint8 = image.data instanceof Uint8ClampedArray;\r\n\r\n                CanvasPool.remove(canvas);\r\n                CanvasPool.remove(canvas2D);\r\n\r\n                return !!ctx;\r\n            }\r\n            catch (e)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    };\r\n\r\n    Features.webGL = testWebGL();\r\n\r\n    Features.worker = !!window['Worker'];\r\n\r\n    Features.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;\r\n\r\n    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;\r\n\r\n    window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\r\n\r\n    Features.getUserMedia = Features.getUserMedia && !!navigator.getUserMedia && !!window.URL;\r\n\r\n    // Older versions of firefox (< 21) apparently claim support but user media does not actually work\r\n    if (Browser.firefox && Browser.firefoxVersion < 21)\r\n    {\r\n        Features.getUserMedia = false;\r\n    }\r\n\r\n    // Excludes iOS versions as they generally wrap UIWebView (eg. Safari WebKit) and it\r\n    // is safer to not try and use the fast copy-over method.\r\n    if (!OS.iOS && (Browser.ie || Browser.firefox || Browser.chrome))\r\n    {\r\n        Features.canvasBitBltShift = true;\r\n    }\r\n\r\n    // Known not to work\r\n    if (Browser.safari || Browser.mobileSafari)\r\n    {\r\n        Features.canvasBitBltShift = false;\r\n    }\r\n\r\n    navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;\r\n\r\n    if (navigator.vibrate)\r\n    {\r\n        Features.vibration = true;\r\n    }\r\n\r\n    if (typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint32Array !== 'undefined')\r\n    {\r\n        Features.littleEndian = checkIsLittleEndian();\r\n    }\r\n\r\n    Features.support32bit = (\r\n        typeof ArrayBuffer !== 'undefined' &&\r\n        typeof Uint8ClampedArray !== 'undefined' &&\r\n        typeof Int32Array !== 'undefined' &&\r\n        Features.littleEndian !== null &&\r\n        isUint8\r\n    );\r\n\r\n    return Features;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRmVhdHVyZXMuanM/MmJjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsU0FBUyxtQkFBTyxDQUFDLG9EQUFNO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyw4REFBVztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0ZlYXR1cmVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgT1MgPSByZXF1aXJlKCcuL09TJyk7XHJcbnZhciBCcm93c2VyID0gcmVxdWlyZSgnLi9Ccm93c2VyJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGZlYXR1cmVzIG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5mZWF0dXJlc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5GZWF0dXJlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGNhbnZhc0JpdEJsdFNoaWZ0IC0gVHJ1ZSBpZiBjYW52YXMgc3VwcG9ydHMgYSAnY29weScgYml0Ymx0IG9udG8gaXRzZWxmIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaW9ucyBvdmVybGFwLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbnZhcyAtIElzIGNhbnZhcyBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmlsZSAtIElzIGZpbGUgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZpbGVTeXN0ZW0gLSBJcyBmaWxlU3lzdGVtIGF2YWlsYWJsZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBnZXRVc2VyTWVkaWEgLSBEb2VzIHRoZSBkZXZpY2Ugc3VwcG9ydCB0aGUgZ2V0VXNlck1lZGlhIEFQST9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBsaXR0bGVFbmRpYW4gLSBJcyB0aGUgZGV2aWNlIGJpZyBvciBsaXR0bGUgZW5kaWFuPyAob25seSBkZXRlY3RlZCBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBUeXBlZEFycmF5cylcclxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2NhbFN0b3JhZ2UgLSBJcyBsb2NhbFN0b3JhZ2UgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBvaW50ZXJMb2NrIC0gSXMgUG9pbnRlciBMb2NrIGF2YWlsYWJsZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzdXBwb3J0MzJiaXQgLSBEb2VzIHRoZSBkZXZpY2UgY29udGV4dCBzdXBwb3J0IDMyYml0IHBpeGVsIG1hbmlwdWxhdGlvbiB1c2luZyBhcnJheSBidWZmZXIgdmlld3M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdmlicmF0aW9uIC0gRG9lcyB0aGUgZGV2aWNlIHN1cHBvcnQgdGhlIFZpYnJhdGlvbiBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2ViR0wgLSBJcyB3ZWJHTCBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd29ya2VyIC0gSXMgd29ya2VyIGF2YWlsYWJsZT9cclxuICovXHJcbnZhciBGZWF0dXJlcyA9IHtcclxuXHJcbiAgICBjYW52YXM6IGZhbHNlLFxyXG4gICAgY2FudmFzQml0Qmx0U2hpZnQ6IG51bGwsXHJcbiAgICBmaWxlOiBmYWxzZSxcclxuICAgIGZpbGVTeXN0ZW06IGZhbHNlLFxyXG4gICAgZ2V0VXNlck1lZGlhOiB0cnVlLFxyXG4gICAgbGl0dGxlRW5kaWFuOiBmYWxzZSxcclxuICAgIGxvY2FsU3RvcmFnZTogZmFsc2UsXHJcbiAgICBwb2ludGVyTG9jazogZmFsc2UsXHJcbiAgICBzdXBwb3J0MzJiaXQ6IGZhbHNlLFxyXG4gICAgdmlicmF0aW9uOiBmYWxzZSxcclxuICAgIHdlYkdMOiBmYWxzZSxcclxuICAgIHdvcmtlcjogZmFsc2VcclxuXHJcbn07XHJcblxyXG4vLyBDaGVjayBMaXR0bGUgb3IgQmlnIEVuZGlhbiBzeXN0ZW0uXHJcbi8vIEBhdXRob3IgTWF0dCBEZXNMYXVyaWVycyAoQG1hdHRkZXNsKVxyXG5mdW5jdGlvbiBjaGVja0lzTGl0dGxlRW5kaWFuICgpXHJcbntcclxuICAgIHZhciBhID0gbmV3IEFycmF5QnVmZmVyKDQpO1xyXG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShhKTtcclxuICAgIHZhciBjID0gbmV3IFVpbnQzMkFycmF5KGEpO1xyXG5cclxuICAgIGJbMF0gPSAweGExO1xyXG4gICAgYlsxXSA9IDB4YjI7XHJcbiAgICBiWzJdID0gMHhjMztcclxuICAgIGJbM10gPSAweGQ0O1xyXG5cclxuICAgIGlmIChjWzBdID09PSAweGQ0YzNiMmExKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjWzBdID09PSAweGExYjJjM2Q0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgQ291bGQgbm90IGRldGVybWluZSBlbmRpYW5uZXNzXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXQgKClcclxue1xyXG4gICAgRmVhdHVyZXMuY2FudmFzID0gISF3aW5kb3dbJ0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCddO1xyXG5cclxuICAgIHRyeVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmxvY2FsU3RvcmFnZSA9ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW07XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgICAgRmVhdHVyZXMubG9jYWxTdG9yYWdlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgRmVhdHVyZXMuZmlsZSA9ICEhd2luZG93WydGaWxlJ10gJiYgISF3aW5kb3dbJ0ZpbGVSZWFkZXInXSAmJiAhIXdpbmRvd1snRmlsZUxpc3QnXSAmJiAhIXdpbmRvd1snQmxvYiddO1xyXG4gICAgRmVhdHVyZXMuZmlsZVN5c3RlbSA9ICEhd2luZG93WydyZXF1ZXN0RmlsZVN5c3RlbSddO1xyXG5cclxuICAgIHZhciBpc1VpbnQ4ID0gZmFsc2U7XHJcblxyXG4gICAgdmFyIHRlc3RXZWJHTCA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpbmRvd1snV2ViR0xSZW5kZXJpbmdDb250ZXh0J10pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0cnlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlV2ViR0wodGhpcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2FudmFzMkQgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdHgyRCA9IGNhbnZhczJELmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIENhbid0IGJlIGRvbmUgb24gYSB3ZWJnbCBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBjdHgyRC5jcmVhdGVJbWFnZURhdGEoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFRlc3QgdG8gc2VlIGlmIEltYWdlRGF0YSB1c2VzIENhbnZhc1BpeGVsQXJyYXkgb3IgVWludDhDbGFtcGVkQXJyYXkuXHJcbiAgICAgICAgICAgICAgICAvLyAgQGF1dGhvciBNYXR0IERlc0xhdXJpZXJzIChAbWF0dGRlc2wpXHJcbiAgICAgICAgICAgICAgICBpc1VpbnQ4ID0gaW1hZ2UuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZShjYW52YXMyRCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEhY3R4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgRmVhdHVyZXMud2ViR0wgPSB0ZXN0V2ViR0woKTtcclxuXHJcbiAgICBGZWF0dXJlcy53b3JrZXIgPSAhIXdpbmRvd1snV29ya2VyJ107XHJcblxyXG4gICAgRmVhdHVyZXMucG9pbnRlckxvY2sgPSAncG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudCB8fCAnbW96UG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudCB8fCAnd2Via2l0UG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudDtcclxuXHJcbiAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0gbmF2aWdhdG9yLmdldFVzZXJNZWRpYSB8fCBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIHx8IG5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEgfHwgbmF2aWdhdG9yLm1zR2V0VXNlck1lZGlhIHx8IG5hdmlnYXRvci5vR2V0VXNlck1lZGlhO1xyXG5cclxuICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkwgfHwgd2luZG93Lm1velVSTCB8fCB3aW5kb3cubXNVUkw7XHJcblxyXG4gICAgRmVhdHVyZXMuZ2V0VXNlck1lZGlhID0gRmVhdHVyZXMuZ2V0VXNlck1lZGlhICYmICEhbmF2aWdhdG9yLmdldFVzZXJNZWRpYSAmJiAhIXdpbmRvdy5VUkw7XHJcblxyXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgZmlyZWZveCAoPCAyMSkgYXBwYXJlbnRseSBjbGFpbSBzdXBwb3J0IGJ1dCB1c2VyIG1lZGlhIGRvZXMgbm90IGFjdHVhbGx5IHdvcmtcclxuICAgIGlmIChCcm93c2VyLmZpcmVmb3ggJiYgQnJvd3Nlci5maXJlZm94VmVyc2lvbiA8IDIxKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmdldFVzZXJNZWRpYSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4Y2x1ZGVzIGlPUyB2ZXJzaW9ucyBhcyB0aGV5IGdlbmVyYWxseSB3cmFwIFVJV2ViVmlldyAoZWcuIFNhZmFyaSBXZWJLaXQpIGFuZCBpdFxyXG4gICAgLy8gaXMgc2FmZXIgdG8gbm90IHRyeSBhbmQgdXNlIHRoZSBmYXN0IGNvcHktb3ZlciBtZXRob2QuXHJcbiAgICBpZiAoIU9TLmlPUyAmJiAoQnJvd3Nlci5pZSB8fCBCcm93c2VyLmZpcmVmb3ggfHwgQnJvd3Nlci5jaHJvbWUpKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmNhbnZhc0JpdEJsdFNoaWZ0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLbm93biBub3QgdG8gd29ya1xyXG4gICAgaWYgKEJyb3dzZXIuc2FmYXJpIHx8IEJyb3dzZXIubW9iaWxlU2FmYXJpKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmNhbnZhc0JpdEJsdFNoaWZ0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdG9yLnZpYnJhdGUgPSBuYXZpZ2F0b3IudmlicmF0ZSB8fCBuYXZpZ2F0b3Iud2Via2l0VmlicmF0ZSB8fCBuYXZpZ2F0b3IubW96VmlicmF0ZSB8fCBuYXZpZ2F0b3IubXNWaWJyYXRlO1xyXG5cclxuICAgIGlmIChuYXZpZ2F0b3IudmlicmF0ZSlcclxuICAgIHtcclxuICAgICAgICBGZWF0dXJlcy52aWJyYXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgVWludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmxpdHRsZUVuZGlhbiA9IGNoZWNrSXNMaXR0bGVFbmRpYW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBGZWF0dXJlcy5zdXBwb3J0MzJiaXQgPSAoXHJcbiAgICAgICAgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgIHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICBGZWF0dXJlcy5saXR0bGVFbmRpYW4gIT09IG51bGwgJiZcclxuICAgICAgICBpc1VpbnQ4XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBGZWF0dXJlcztcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBpbml0KCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Features.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Fullscreen.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/device/Fullscreen.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the full screen support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.fullscreen` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Fullscreen\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} available - Does the browser support the Full Screen API?\r\n * @property {boolean} keyboard - Does the browser support access to the Keyboard during Full Screen mode?\r\n * @property {string} cancel - If the browser supports the Full Screen API this holds the call you need to use to cancel it.\r\n * @property {string} request - If the browser supports the Full Screen API this holds the call you need to use to activate it.\r\n */\r\nvar Fullscreen = {\r\n\r\n    available: false,\r\n    cancel: '',\r\n    keyboard: false,\r\n    request: ''\r\n\r\n};\r\n\r\n/**\r\n* Checks for support of the Full Screen API.\r\n* \r\n* @ignore\r\n*/\r\nfunction init ()\r\n{\r\n    var i;\r\n\r\n    var suffix1 = 'Fullscreen';\r\n    var suffix2 = 'FullScreen';\r\n\r\n    var fs = [\r\n        'request' + suffix1,\r\n        'request' + suffix2,\r\n        'webkitRequest' + suffix1,\r\n        'webkitRequest' + suffix2,\r\n        'msRequest' + suffix1,\r\n        'msRequest' + suffix2,\r\n        'mozRequest' + suffix2,\r\n        'mozRequest' + suffix1\r\n    ];\r\n\r\n    for (i = 0; i < fs.length; i++)\r\n    {\r\n        if (document.documentElement[fs[i]])\r\n        {\r\n            Fullscreen.available = true;\r\n            Fullscreen.request = fs[i];\r\n            break;\r\n        }\r\n    }\r\n\r\n    var cfs = [\r\n        'cancel' + suffix2,\r\n        'exit' + suffix1,\r\n        'webkitCancel' + suffix2,\r\n        'webkitExit' + suffix1,\r\n        'msCancel' + suffix2,\r\n        'msExit' + suffix1,\r\n        'mozCancel' + suffix2,\r\n        'mozExit' + suffix1\r\n    ];\r\n\r\n    if (Fullscreen.available)\r\n    {\r\n        for (i = 0; i < cfs.length; i++)\r\n        {\r\n            if (document[cfs[i]])\r\n            {\r\n                Fullscreen.cancel = cfs[i];\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    //  Keyboard Input?\r\n    //  Safari 5.1 says it supports fullscreen keyboard, but is lying.\r\n    if (window['Element'] && Element['ALLOW_KEYBOARD_INPUT'] && !(/ Version\\/5\\.1(?:\\.\\d+)? Safari\\//).test(navigator.userAgent))\r\n    {\r\n        Fullscreen.keyboard = true;\r\n    }\r\n\r\n    Object.defineProperty(Fullscreen, 'active', { get: function () { return !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement); } });\r\n\r\n    return Fullscreen;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRnVsbHNjcmVlbi5qcz9kZjAyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsbUJBQW1CLDRJQUE0SSxFQUFFLEVBQUU7O0FBRXBOO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRnVsbHNjcmVlbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGZ1bGwgc2NyZWVuIHN1cHBvcnQgb2YgdGhlIGJyb3dzZXIgcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmZ1bGxzY3JlZW5gIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuRnVsbHNjcmVlblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXZhaWxhYmxlIC0gRG9lcyB0aGUgYnJvd3NlciBzdXBwb3J0IHRoZSBGdWxsIFNjcmVlbiBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2V5Ym9hcmQgLSBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgYWNjZXNzIHRvIHRoZSBLZXlib2FyZCBkdXJpbmcgRnVsbCBTY3JlZW4gbW9kZT9cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbmNlbCAtIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBGdWxsIFNjcmVlbiBBUEkgdGhpcyBob2xkcyB0aGUgY2FsbCB5b3UgbmVlZCB0byB1c2UgdG8gY2FuY2VsIGl0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVxdWVzdCAtIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBGdWxsIFNjcmVlbiBBUEkgdGhpcyBob2xkcyB0aGUgY2FsbCB5b3UgbmVlZCB0byB1c2UgdG8gYWN0aXZhdGUgaXQuXHJcbiAqL1xyXG52YXIgRnVsbHNjcmVlbiA9IHtcclxuXHJcbiAgICBhdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgY2FuY2VsOiAnJyxcclxuICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgIHJlcXVlc3Q6ICcnXHJcblxyXG59O1xyXG5cclxuLyoqXHJcbiogQ2hlY2tzIGZvciBzdXBwb3J0IG9mIHRoZSBGdWxsIFNjcmVlbiBBUEkuXHJcbiogXHJcbiogQGlnbm9yZVxyXG4qL1xyXG5mdW5jdGlvbiBpbml0ICgpXHJcbntcclxuICAgIHZhciBpO1xyXG5cclxuICAgIHZhciBzdWZmaXgxID0gJ0Z1bGxzY3JlZW4nO1xyXG4gICAgdmFyIHN1ZmZpeDIgPSAnRnVsbFNjcmVlbic7XHJcblxyXG4gICAgdmFyIGZzID0gW1xyXG4gICAgICAgICdyZXF1ZXN0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ3JlcXVlc3QnICsgc3VmZml4MixcclxuICAgICAgICAnd2Via2l0UmVxdWVzdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICd3ZWJraXRSZXF1ZXN0JyArIHN1ZmZpeDIsXHJcbiAgICAgICAgJ21zUmVxdWVzdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICdtc1JlcXVlc3QnICsgc3VmZml4MixcclxuICAgICAgICAnbW96UmVxdWVzdCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICdtb3pSZXF1ZXN0JyArIHN1ZmZpeDFcclxuICAgIF07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGZzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZnNbaV1dKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRnVsbHNjcmVlbi5hdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBGdWxsc2NyZWVuLnJlcXVlc3QgPSBmc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBjZnMgPSBbXHJcbiAgICAgICAgJ2NhbmNlbCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICdleGl0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ3dlYmtpdENhbmNlbCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICd3ZWJraXRFeGl0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ21zQ2FuY2VsJyArIHN1ZmZpeDIsXHJcbiAgICAgICAgJ21zRXhpdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICdtb3pDYW5jZWwnICsgc3VmZml4MixcclxuICAgICAgICAnbW96RXhpdCcgKyBzdWZmaXgxXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChGdWxsc2NyZWVuLmF2YWlsYWJsZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2ZzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50W2Nmc1tpXV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZ1bGxzY3JlZW4uY2FuY2VsID0gY2ZzW2ldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEtleWJvYXJkIElucHV0P1xyXG4gICAgLy8gIFNhZmFyaSA1LjEgc2F5cyBpdCBzdXBwb3J0cyBmdWxsc2NyZWVuIGtleWJvYXJkLCBidXQgaXMgbHlpbmcuXHJcbiAgICBpZiAod2luZG93WydFbGVtZW50J10gJiYgRWxlbWVudFsnQUxMT1dfS0VZQk9BUkRfSU5QVVQnXSAmJiAhKC8gVmVyc2lvblxcLzVcXC4xKD86XFwuXFxkKyk/IFNhZmFyaVxcLy8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXHJcbiAgICB7XHJcbiAgICAgICAgRnVsbHNjcmVlbi5rZXlib2FyZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bGxzY3JlZW4sICdhY3RpdmUnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gISEoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk7IH0gfSk7XHJcblxyXG4gICAgcmV0dXJuIEZ1bGxzY3JlZW47XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Fullscreen.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Input.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/device/Input.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\n\r\n/**\r\n * Determines the input support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.input` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Input\r\n * @since 3.0.0\r\n * \r\n * @property {?string} wheelType - The newest type of Wheel/Scroll event supported: 'wheel', 'mousewheel', 'DOMMouseScroll'\r\n * @property {boolean} gamepads - Is navigator.getGamepads available?\r\n * @property {boolean} mspointer - Is mspointer available?\r\n * @property {boolean} touch - Is touch available?\r\n */\r\nvar Input = {\r\n\r\n    gamepads: false,\r\n    mspointer: false,\r\n    touch: false,\r\n    wheelEvent: null\r\n    \r\n};\r\n\r\nfunction init ()\r\n{\r\n    if ('ontouchstart' in document.documentElement || (navigator.maxTouchPoints && navigator.maxTouchPoints >= 1))\r\n    {\r\n        Input.touch = true;\r\n    }\r\n\r\n    if (navigator.msPointerEnabled || navigator.pointerEnabled)\r\n    {\r\n        Input.mspointer = true;\r\n    }\r\n\r\n    if (navigator.getGamepads)\r\n    {\r\n        Input.gamepads = true;\r\n    }\r\n\r\n    // See https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n    if ('onwheel' in window || (Browser.ie && 'WheelEvent' in window))\r\n    {\r\n        // DOM3 Wheel Event: FF 17+, IE 9+, Chrome 31+, Safari 7+\r\n        Input.wheelEvent = 'wheel';\r\n    }\r\n    else if ('onmousewheel' in window)\r\n    {\r\n        // Non-FF legacy: IE 6-9, Chrome 1-31, Safari 5-7.\r\n        Input.wheelEvent = 'mousewheel';\r\n    }\r\n    else if (Browser.firefox && 'MouseScrollEvent' in window)\r\n    {\r\n        // FF prior to 17. This should probably be scrubbed.\r\n        Input.wheelEvent = 'DOMMouseScroll';\r\n    }\r\n\r\n    return Input;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvSW5wdXQuanM/MGY0MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLDhEQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0lucHV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnJvd3NlciA9IHJlcXVpcmUoJy4vQnJvd3NlcicpO1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGlucHV0IHN1cHBvcnQgb2YgdGhlIGJyb3dzZXIgcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmlucHV0YCBmcm9tIHdpdGhpbiBhbnkgU2NlbmUuXHJcbiAqIFxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlLklucHV0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB3aGVlbFR5cGUgLSBUaGUgbmV3ZXN0IHR5cGUgb2YgV2hlZWwvU2Nyb2xsIGV2ZW50IHN1cHBvcnRlZDogJ3doZWVsJywgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ2FtZXBhZHMgLSBJcyBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG1zcG9pbnRlciAtIElzIG1zcG9pbnRlciBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG91Y2ggLSBJcyB0b3VjaCBhdmFpbGFibGU/XHJcbiAqL1xyXG52YXIgSW5wdXQgPSB7XHJcblxyXG4gICAgZ2FtZXBhZHM6IGZhbHNlLFxyXG4gICAgbXNwb2ludGVyOiBmYWxzZSxcclxuICAgIHRvdWNoOiBmYWxzZSxcclxuICAgIHdoZWVsRXZlbnQ6IG51bGxcclxuICAgIFxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IChuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID49IDEpKVxyXG4gICAge1xyXG4gICAgICAgIElucHV0LnRvdWNoID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgfHwgbmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkKVxyXG4gICAge1xyXG4gICAgICAgIElucHV0Lm1zcG9pbnRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5hdmlnYXRvci5nZXRHYW1lcGFkcylcclxuICAgIHtcclxuICAgICAgICBJbnB1dC5nYW1lcGFkcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy93aGVlbFxyXG4gICAgaWYgKCdvbndoZWVsJyBpbiB3aW5kb3cgfHwgKEJyb3dzZXIuaWUgJiYgJ1doZWVsRXZlbnQnIGluIHdpbmRvdykpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gRE9NMyBXaGVlbCBFdmVudDogRkYgMTcrLCBJRSA5KywgQ2hyb21lIDMxKywgU2FmYXJpIDcrXHJcbiAgICAgICAgSW5wdXQud2hlZWxFdmVudCA9ICd3aGVlbCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgnb25tb3VzZXdoZWVsJyBpbiB3aW5kb3cpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gTm9uLUZGIGxlZ2FjeTogSUUgNi05LCBDaHJvbWUgMS0zMSwgU2FmYXJpIDUtNy5cclxuICAgICAgICBJbnB1dC53aGVlbEV2ZW50ID0gJ21vdXNld2hlZWwnO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoQnJvd3Nlci5maXJlZm94ICYmICdNb3VzZVNjcm9sbEV2ZW50JyBpbiB3aW5kb3cpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gRkYgcHJpb3IgdG8gMTcuIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHNjcnViYmVkLlxyXG4gICAgICAgIElucHV0LndoZWVsRXZlbnQgPSAnRE9NTW91c2VTY3JvbGwnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBJbnB1dDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBpbml0KCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Input.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/OS.js":
/*!**********************************************!*\
  !*** ./node_modules/phaser/src/device/OS.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* WEBPACK VAR INJECTION */(function(process) {/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the operating system of the device running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.os` from within any Scene.\r\n *\r\n * @typedef {object} Phaser.Device.OS\r\n * @since 3.0.0\r\n *\r\n * @property {boolean} android - Is running on android?\r\n * @property {boolean} chromeOS - Is running on chromeOS?\r\n * @property {boolean} cordova - Is the game running under Apache Cordova?\r\n * @property {boolean} crosswalk - Is the game running under the Intel Crosswalk XDK?\r\n * @property {boolean} desktop - Is running on a desktop?\r\n * @property {boolean} ejecta - Is the game running under Ejecta?\r\n * @property {boolean} electron - Is the game running under GitHub Electron?\r\n * @property {boolean} iOS - Is running on iOS?\r\n * @property {boolean} iPad - Is running on iPad?\r\n * @property {boolean} iPhone - Is running on iPhone?\r\n * @property {boolean} kindle - Is running on an Amazon Kindle?\r\n * @property {boolean} linux - Is running on linux?\r\n * @property {boolean} macOS - Is running on macOS?\r\n * @property {boolean} node - Is the game running under Node.js?\r\n * @property {boolean} nodeWebkit - Is the game running under Node-Webkit?\r\n * @property {boolean} webApp - Set to true if running as a WebApp, i.e. within a WebView\r\n * @property {boolean} windows - Is running on windows?\r\n * @property {boolean} windowsPhone - Is running on a Windows Phone?\r\n * @property {number} iOSVersion - If running in iOS this will contain the major version number.\r\n * @property {number} pixelRatio - PixelRatio of the host device?\r\n */\r\nvar OS = {\r\n\r\n    android: false,\r\n    chromeOS: false,\r\n    cordova: false,\r\n    crosswalk: false,\r\n    desktop: false,\r\n    ejecta: false,\r\n    electron: false,\r\n    iOS: false,\r\n    iOSVersion: 0,\r\n    iPad: false,\r\n    iPhone: false,\r\n    kindle: false,\r\n    linux: false,\r\n    macOS: false,\r\n    node: false,\r\n    nodeWebkit: false,\r\n    pixelRatio: 1,\r\n    webApp: false,\r\n    windows: false,\r\n    windowsPhone: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n    var ua = navigator.userAgent;\r\n\r\n    if (/Windows/.test(ua))\r\n    {\r\n        OS.windows = true;\r\n    }\r\n    else if (/Mac OS/.test(ua) && !(/like Mac OS/.test(ua)))\r\n    {\r\n        OS.macOS = true;\r\n    }\r\n    else if (/Android/.test(ua))\r\n    {\r\n        OS.android = true;\r\n    }\r\n    else if (/Linux/.test(ua))\r\n    {\r\n        OS.linux = true;\r\n    }\r\n    else if (/iP[ao]d|iPhone/i.test(ua))\r\n    {\r\n        OS.iOS = true;\r\n\r\n        (navigator.appVersion).match(/OS (\\d+)/);\r\n\r\n        OS.iOSVersion = parseInt(RegExp.$1, 10);\r\n\r\n        OS.iPhone = ua.toLowerCase().indexOf('iphone') !== -1;\r\n        OS.iPad = ua.toLowerCase().indexOf('ipad') !== -1;\r\n    }\r\n    else if (/Kindle/.test(ua) || (/\\bKF[A-Z][A-Z]+/).test(ua) || (/Silk.*Mobile Safari/).test(ua))\r\n    {\r\n        OS.kindle = true;\r\n\r\n        // This will NOT detect early generations of Kindle Fire, I think there is no reliable way...\r\n        // E.g. \"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true\"\r\n    }\r\n    else if (/CrOS/.test(ua))\r\n    {\r\n        OS.chromeOS = true;\r\n    }\r\n\r\n    if (/Windows Phone/i.test(ua) || (/IEMobile/i).test(ua))\r\n    {\r\n        OS.android = false;\r\n        OS.iOS = false;\r\n        OS.macOS = false;\r\n        OS.windows = true;\r\n        OS.windowsPhone = true;\r\n    }\r\n\r\n    var silk = (/Silk/).test(ua);\r\n\r\n    if (OS.windows || OS.macOS || (OS.linux && !silk) || OS.chromeOS)\r\n    {\r\n        OS.desktop = true;\r\n    }\r\n\r\n    //  Windows Phone / Table reset\r\n    if (OS.windowsPhone || ((/Windows NT/i.test(ua)) && (/Touch/i.test(ua))))\r\n    {\r\n        OS.desktop = false;\r\n    }\r\n\r\n    //  WebApp mode in iOS\r\n    if (navigator.standalone)\r\n    {\r\n        OS.webApp = true;\r\n    }\r\n\r\n    if (window.cordova !== undefined)\r\n    {\r\n        OS.cordova = true;\r\n    }\r\n\r\n    if (typeof process !== 'undefined' && process.versions && process.versions.node)\r\n    {\r\n        OS.node = true;\r\n    }\r\n\r\n    if (OS.node && typeof process.versions === 'object')\r\n    {\r\n        OS.nodeWebkit = !!process.versions['node-webkit'];\r\n\r\n        OS.electron = !!process.versions.electron;\r\n    }\r\n\r\n    if (window.ejecta !== undefined)\r\n    {\r\n        OS.ejecta = true;\r\n    }\r\n\r\n    if ((/Crosswalk/).test(ua))\r\n    {\r\n        OS.crosswalk = true;\r\n    }\r\n\r\n    OS.pixelRatio = window['devicePixelRatio'] || 1;\r\n\r\n    return OS;\r\n}\r\n\r\nmodule.exports = init();\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvT1MuanM/YTIwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEdBQUcsdUJBQXVCLE9BQU87QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL09TLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvZiB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5vc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlLk9TXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFuZHJvaWQgLSBJcyBydW5uaW5nIG9uIGFuZHJvaWQ/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hyb21lT1MgLSBJcyBydW5uaW5nIG9uIGNocm9tZU9TP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvcmRvdmEgLSBJcyB0aGUgZ2FtZSBydW5uaW5nIHVuZGVyIEFwYWNoZSBDb3Jkb3ZhP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNyb3Nzd2FsayAtIElzIHRoZSBnYW1lIHJ1bm5pbmcgdW5kZXIgdGhlIEludGVsIENyb3Nzd2FsayBYREs/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVza3RvcCAtIElzIHJ1bm5pbmcgb24gYSBkZXNrdG9wP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVqZWN0YSAtIElzIHRoZSBnYW1lIHJ1bm5pbmcgdW5kZXIgRWplY3RhP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVsZWN0cm9uIC0gSXMgdGhlIGdhbWUgcnVubmluZyB1bmRlciBHaXRIdWIgRWxlY3Ryb24/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaU9TIC0gSXMgcnVubmluZyBvbiBpT1M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaVBhZCAtIElzIHJ1bm5pbmcgb24gaVBhZD9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBpUGhvbmUgLSBJcyBydW5uaW5nIG9uIGlQaG9uZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBraW5kbGUgLSBJcyBydW5uaW5nIG9uIGFuIEFtYXpvbiBLaW5kbGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbGludXggLSBJcyBydW5uaW5nIG9uIGxpbnV4P1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG1hY09TIC0gSXMgcnVubmluZyBvbiBtYWNPUz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBub2RlIC0gSXMgdGhlIGdhbWUgcnVubmluZyB1bmRlciBOb2RlLmpzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vZGVXZWJraXQgLSBJcyB0aGUgZ2FtZSBydW5uaW5nIHVuZGVyIE5vZGUtV2Via2l0P1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdlYkFwcCAtIFNldCB0byB0cnVlIGlmIHJ1bm5pbmcgYXMgYSBXZWJBcHAsIGkuZS4gd2l0aGluIGEgV2ViVmlld1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdpbmRvd3MgLSBJcyBydW5uaW5nIG9uIHdpbmRvd3M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2luZG93c1Bob25lIC0gSXMgcnVubmluZyBvbiBhIFdpbmRvd3MgUGhvbmU/XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpT1NWZXJzaW9uIC0gSWYgcnVubmluZyBpbiBpT1MgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGl4ZWxSYXRpbyAtIFBpeGVsUmF0aW8gb2YgdGhlIGhvc3QgZGV2aWNlP1xyXG4gKi9cclxudmFyIE9TID0ge1xyXG5cclxuICAgIGFuZHJvaWQ6IGZhbHNlLFxyXG4gICAgY2hyb21lT1M6IGZhbHNlLFxyXG4gICAgY29yZG92YTogZmFsc2UsXHJcbiAgICBjcm9zc3dhbGs6IGZhbHNlLFxyXG4gICAgZGVza3RvcDogZmFsc2UsXHJcbiAgICBlamVjdGE6IGZhbHNlLFxyXG4gICAgZWxlY3Ryb246IGZhbHNlLFxyXG4gICAgaU9TOiBmYWxzZSxcclxuICAgIGlPU1ZlcnNpb246IDAsXHJcbiAgICBpUGFkOiBmYWxzZSxcclxuICAgIGlQaG9uZTogZmFsc2UsXHJcbiAgICBraW5kbGU6IGZhbHNlLFxyXG4gICAgbGludXg6IGZhbHNlLFxyXG4gICAgbWFjT1M6IGZhbHNlLFxyXG4gICAgbm9kZTogZmFsc2UsXHJcbiAgICBub2RlV2Via2l0OiBmYWxzZSxcclxuICAgIHBpeGVsUmF0aW86IDEsXHJcbiAgICB3ZWJBcHA6IGZhbHNlLFxyXG4gICAgd2luZG93czogZmFsc2UsXHJcbiAgICB3aW5kb3dzUGhvbmU6IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG5cclxuICAgIGlmICgvV2luZG93cy8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1Mud2luZG93cyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgvTWFjIE9TLy50ZXN0KHVhKSAmJiAhKC9saWtlIE1hYyBPUy8udGVzdCh1YSkpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLm1hY09TID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9BbmRyb2lkLy50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBPUy5hbmRyb2lkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9MaW51eC8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MubGludXggPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoL2lQW2FvXWR8aVBob25lL2kudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuaU9TID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uKS5tYXRjaCgvT1MgKFxcZCspLyk7XHJcblxyXG4gICAgICAgIE9TLmlPU1ZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuXHJcbiAgICAgICAgT1MuaVBob25lID0gdWEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdpcGhvbmUnKSAhPT0gLTE7XHJcbiAgICAgICAgT1MuaVBhZCA9IHVhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaXBhZCcpICE9PSAtMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9LaW5kbGUvLnRlc3QodWEpIHx8ICgvXFxiS0ZbQS1aXVtBLVpdKy8pLnRlc3QodWEpIHx8ICgvU2lsay4qTW9iaWxlIFNhZmFyaS8pLnRlc3QodWEpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmtpbmRsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIFRoaXMgd2lsbCBOT1QgZGV0ZWN0IGVhcmx5IGdlbmVyYXRpb25zIG9mIEtpbmRsZSBGaXJlLCBJIHRoaW5rIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheS4uLlxyXG4gICAgICAgIC8vIEUuZy4gXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAxMF82XzM7IGVuLXVzOyBTaWxrLzEuMS4wLTgwKSBBcHBsZVdlYktpdC81MzMuMTYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzUuMCBTYWZhcmkvNTMzLjE2IFNpbGstQWNjZWxlcmF0ZWQ9dHJ1ZVwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgvQ3JPUy8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuY2hyb21lT1MgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvV2luZG93cyBQaG9uZS9pLnRlc3QodWEpIHx8ICgvSUVNb2JpbGUvaSkudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuYW5kcm9pZCA9IGZhbHNlO1xyXG4gICAgICAgIE9TLmlPUyA9IGZhbHNlO1xyXG4gICAgICAgIE9TLm1hY09TID0gZmFsc2U7XHJcbiAgICAgICAgT1Mud2luZG93cyA9IHRydWU7XHJcbiAgICAgICAgT1Mud2luZG93c1Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2lsayA9ICgvU2lsay8pLnRlc3QodWEpO1xyXG5cclxuICAgIGlmIChPUy53aW5kb3dzIHx8IE9TLm1hY09TIHx8IChPUy5saW51eCAmJiAhc2lsaykgfHwgT1MuY2hyb21lT1MpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuZGVza3RvcCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFdpbmRvd3MgUGhvbmUgLyBUYWJsZSByZXNldFxyXG4gICAgaWYgKE9TLndpbmRvd3NQaG9uZSB8fCAoKC9XaW5kb3dzIE5UL2kudGVzdCh1YSkpICYmICgvVG91Y2gvaS50ZXN0KHVhKSkpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmRlc2t0b3AgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgV2ViQXBwIG1vZGUgaW4gaU9TXHJcbiAgICBpZiAobmF2aWdhdG9yLnN0YW5kYWxvbmUpXHJcbiAgICB7XHJcbiAgICAgICAgT1Mud2ViQXBwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmNvcmRvdmEgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBPUy5jb3Jkb3ZhID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKVxyXG4gICAge1xyXG4gICAgICAgIE9TLm5vZGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChPUy5ub2RlICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICBPUy5ub2RlV2Via2l0ID0gISFwcm9jZXNzLnZlcnNpb25zWydub2RlLXdlYmtpdCddO1xyXG5cclxuICAgICAgICBPUy5lbGVjdHJvbiA9ICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmVqZWN0YSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmVqZWN0YSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCgvQ3Jvc3N3YWxrLykudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuY3Jvc3N3YWxrID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBPUy5waXhlbFJhdGlvID0gd2luZG93WydkZXZpY2VQaXhlbFJhdGlvJ10gfHwgMTtcclxuXHJcbiAgICByZXR1cm4gT1M7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/OS.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/Video.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/device/Video.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the video support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.video` from within any Scene.\r\n * \r\n * In Phaser 3.20 the properties were renamed to drop the 'Video' suffix.\r\n * \r\n * @typedef {object} Phaser.Device.Video\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} h264 - Can this device play h264 mp4 video files?\r\n * @property {boolean} hls - Can this device play hls video files?\r\n * @property {boolean} mp4 - Can this device play h264 mp4 video files?\r\n * @property {boolean} ogg - Can this device play ogg video files?\r\n * @property {boolean} vp9 - Can this device play vp9 video files?\r\n * @property {boolean} webm - Can this device play webm video files?\r\n */\r\nvar Video = {\r\n\r\n    h264: false,\r\n    hls: false,\r\n    mp4: false,\r\n    ogg: false,\r\n    vp9: false,\r\n    webm: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n    var videoElement = document.createElement('video');\r\n    var result = !!videoElement.canPlayType;\r\n\r\n    try\r\n    {\r\n        if (result)\r\n        {\r\n            if (videoElement.canPlayType('video/ogg; codecs=\"theora\"').replace(/^no$/, ''))\r\n            {\r\n                Video.ogg = true;\r\n            }\r\n\r\n            if (videoElement.canPlayType('video/mp4; codecs=\"avc1.42E01E\"').replace(/^no$/, ''))\r\n            {\r\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\r\n                Video.h264 = true;\r\n                Video.mp4 = true;\r\n            }\r\n\r\n            if (videoElement.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/, ''))\r\n            {\r\n                Video.webm = true;\r\n            }\r\n\r\n            if (videoElement.canPlayType('video/webm; codecs=\"vp9\"').replace(/^no$/, ''))\r\n            {\r\n                Video.vp9 = true;\r\n            }\r\n\r\n            if (videoElement.canPlayType('application/x-mpegURL; codecs=\"avc1.42E01E\"').replace(/^no$/, ''))\r\n            {\r\n                Video.hls = true;\r\n            }\r\n        }\r\n    }\r\n    catch (e)\r\n    {\r\n        //  Nothing to do\r\n    }\r\n\r\n    return Video;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvVmlkZW8uanM/OTUxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvVmlkZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSB2aWRlbyBzdXBwb3J0IG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS52aWRlb2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogSW4gUGhhc2VyIDMuMjAgdGhlIHByb3BlcnRpZXMgd2VyZSByZW5hbWVkIHRvIGRyb3AgdGhlICdWaWRlbycgc3VmZml4LlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5WaWRlb1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaDI2NCAtIENhbiB0aGlzIGRldmljZSBwbGF5IGgyNjQgbXA0IHZpZGVvIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGhscyAtIENhbiB0aGlzIGRldmljZSBwbGF5IGhscyB2aWRlbyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBtcDQgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSBoMjY0IG1wNCB2aWRlbyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBvZ2cgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSBvZ2cgdmlkZW8gZmlsZXM/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdnA5IC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgdnA5IHZpZGVvIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdlYm0gLSBDYW4gdGhpcyBkZXZpY2UgcGxheSB3ZWJtIHZpZGVvIGZpbGVzP1xyXG4gKi9cclxudmFyIFZpZGVvID0ge1xyXG5cclxuICAgIGgyNjQ6IGZhbHNlLFxyXG4gICAgaGxzOiBmYWxzZSxcclxuICAgIG1wNDogZmFsc2UsXHJcbiAgICBvZ2c6IGZhbHNlLFxyXG4gICAgdnA5OiBmYWxzZSxcclxuICAgIHdlYm06IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICB2YXIgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgIHZhciByZXN1bHQgPSAhIXZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZTtcclxuXHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgICBpZiAocmVzdWx0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9XCJ0aGVvcmFcIicpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFZpZGVvLm9nZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPVwiYXZjMS40MkUwMUVcIicpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgUXVpY2tUaW1lLCB0aGlzIHZhbHVlIHdpbGwgYmUgYHVuZGVmaW5lZGAuIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvNTQ2XHJcbiAgICAgICAgICAgICAgICBWaWRlby5oMjY0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIFZpZGVvLm1wNCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ3ZpZGVvL3dlYm07IGNvZGVjcz1cInZwOCwgdm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby53ZWJtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgndmlkZW8vd2VibTsgY29kZWNzPVwidnA5XCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby52cDkgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi94LW1wZWdVUkw7IGNvZGVjcz1cImF2YzEuNDJFMDFFXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby5obHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gZG9cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVmlkZW87XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Video.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/device/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/device/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  This singleton is instantiated as soon as Phaser loads,\r\n//  before a Phaser.Game instance has even been created.\r\n//  Which means all instances of Phaser Games can share it,\r\n//  without having to re-poll the device all over again\r\n\r\n/**\r\n * @namespace Phaser.Device\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.DeviceConf\r\n *\r\n * @property {Phaser.Device.OS} os - The OS Device functions.\r\n * @property {Phaser.Device.Browser} browser - The Browser Device functions.\r\n * @property {Phaser.Device.Features} features - The Features Device functions.\r\n * @property {Phaser.Device.Input} input - The Input Device functions.\r\n * @property {Phaser.Device.Audio} audio - The Audio Device functions.\r\n * @property {Phaser.Device.Video} video - The Video Device functions.\r\n * @property {Phaser.Device.Fullscreen} fullscreen - The Fullscreen Device functions.\r\n * @property {Phaser.Device.CanvasFeatures} canvasFeatures - The Canvas Device functions.\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    os: __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\"),\r\n    browser: __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\"),\r\n    features: __webpack_require__(/*! ./Features */ \"./node_modules/phaser/src/device/Features.js\"),\r\n    input: __webpack_require__(/*! ./Input */ \"./node_modules/phaser/src/device/Input.js\"),\r\n    audio: __webpack_require__(/*! ./Audio */ \"./node_modules/phaser/src/device/Audio.js\"),\r\n    video: __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/device/Video.js\"),\r\n    fullscreen: __webpack_require__(/*! ./Fullscreen */ \"./node_modules/phaser/src/device/Fullscreen.js\"),\r\n    canvasFeatures: __webpack_require__(/*! ./CanvasFeatures */ \"./node_modules/phaser/src/device/CanvasFeatures.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvaW5kZXguanM/NGI4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLGlCQUFpQjtBQUMvQixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLHlCQUF5QjtBQUN2QyxjQUFjLDZCQUE2QjtBQUMzQzs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsb0RBQU07QUFDdEIsYUFBYSxtQkFBTyxDQUFDLDhEQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxnRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsMERBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLDBEQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQywwREFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBYztBQUN0QyxvQkFBb0IsbUJBQU8sQ0FBQyw0RUFBa0I7O0FBRTlDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgVGhpcyBzaW5nbGV0b24gaXMgaW5zdGFudGlhdGVkIGFzIHNvb24gYXMgUGhhc2VyIGxvYWRzLFxyXG4vLyAgYmVmb3JlIGEgUGhhc2VyLkdhbWUgaW5zdGFuY2UgaGFzIGV2ZW4gYmVlbiBjcmVhdGVkLlxyXG4vLyAgV2hpY2ggbWVhbnMgYWxsIGluc3RhbmNlcyBvZiBQaGFzZXIgR2FtZXMgY2FuIHNoYXJlIGl0LFxyXG4vLyAgd2l0aG91dCBoYXZpbmcgdG8gcmUtcG9sbCB0aGUgZGV2aWNlIGFsbCBvdmVyIGFnYWluXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGV2aWNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlQ29uZlxyXG4gKlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuT1N9IG9zIC0gVGhlIE9TIERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5Ccm93c2VyfSBicm93c2VyIC0gVGhlIEJyb3dzZXIgRGV2aWNlIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtQaGFzZXIuRGV2aWNlLkZlYXR1cmVzfSBmZWF0dXJlcyAtIFRoZSBGZWF0dXJlcyBEZXZpY2UgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuSW5wdXR9IGlucHV0IC0gVGhlIElucHV0IERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5BdWRpb30gYXVkaW8gLSBUaGUgQXVkaW8gRGV2aWNlIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtQaGFzZXIuRGV2aWNlLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBEZXZpY2UgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuRnVsbHNjcmVlbn0gZnVsbHNjcmVlbiAtIFRoZSBGdWxsc2NyZWVuIERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5DYW52YXNGZWF0dXJlc30gY2FudmFzRmVhdHVyZXMgLSBUaGUgQ2FudmFzIERldmljZSBmdW5jdGlvbnMuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgb3M6IHJlcXVpcmUoJy4vT1MnKSxcclxuICAgIGJyb3dzZXI6IHJlcXVpcmUoJy4vQnJvd3NlcicpLFxyXG4gICAgZmVhdHVyZXM6IHJlcXVpcmUoJy4vRmVhdHVyZXMnKSxcclxuICAgIGlucHV0OiByZXF1aXJlKCcuL0lucHV0JyksXHJcbiAgICBhdWRpbzogcmVxdWlyZSgnLi9BdWRpbycpLFxyXG4gICAgdmlkZW86IHJlcXVpcmUoJy4vVmlkZW8nKSxcclxuICAgIGZ1bGxzY3JlZW46IHJlcXVpcmUoJy4vRnVsbHNjcmVlbicpLFxyXG4gICAgY2FudmFzRmVhdHVyZXM6IHJlcXVpcmUoJy4vQ2FudmFzRmVhdHVyZXMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/const.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/display/align/const.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ALIGN_CONST = {\r\n\r\n    /**\r\n    * A constant representing a top-left alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.TOP_LEFT\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    TOP_LEFT: 0,\r\n\r\n    /**\r\n    * A constant representing a top-center alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.TOP_CENTER\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    TOP_CENTER: 1,\r\n\r\n    /**\r\n    * A constant representing a top-right alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.TOP_RIGHT\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    TOP_RIGHT: 2,\r\n\r\n    /**\r\n    * A constant representing a left-top alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.LEFT_TOP\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    LEFT_TOP: 3,\r\n\r\n    /**\r\n    * A constant representing a left-center alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.LEFT_CENTER\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    LEFT_CENTER: 4,\r\n\r\n    /**\r\n    * A constant representing a left-bottom alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.LEFT_BOTTOM\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    LEFT_BOTTOM: 5,\r\n\r\n    /**\r\n    * A constant representing a center alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.CENTER\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    CENTER: 6,\r\n\r\n    /**\r\n    * A constant representing a right-top alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.RIGHT_TOP\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    RIGHT_TOP: 7,\r\n\r\n    /**\r\n    * A constant representing a right-center alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.RIGHT_CENTER\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    RIGHT_CENTER: 8,\r\n\r\n    /**\r\n    * A constant representing a right-bottom alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.RIGHT_BOTTOM\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    RIGHT_BOTTOM: 9,\r\n\r\n    /**\r\n    * A constant representing a bottom-left alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.BOTTOM_LEFT\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    BOTTOM_LEFT: 10,\r\n\r\n    /**\r\n    * A constant representing a bottom-center alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.BOTTOM_CENTER\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    BOTTOM_CENTER: 11,\r\n\r\n    /**\r\n    * A constant representing a bottom-right alignment or position.\r\n    * @constant\r\n    * @name Phaser.Display.Align.BOTTOM_RIGHT\r\n    * @since 3.0.0\r\n    * @type {integer}\r\n    */\r\n    BOTTOM_RIGHT: 12\r\n\r\n};\r\n\r\nmodule.exports = ALIGN_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2NvbnN0LmpzP2Y1ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBTElHTl9DT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSB0b3AtbGVmdCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfTEVGVFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgVE9QX0xFRlQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgdG9wLWNlbnRlciBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfQ0VOVEVSXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBUT1BfQ0VOVEVSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHRvcC1yaWdodCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfUklHSFRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIFRPUF9SSUdIVDogMixcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBsZWZ0LXRvcCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5MRUZUX1RPUFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgTEVGVF9UT1A6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgbGVmdC1jZW50ZXIgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uTEVGVF9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIExFRlRfQ0VOVEVSOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIGxlZnQtYm90dG9tIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLkxFRlRfQk9UVE9NXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBMRUZUX0JPVFRPTTogNSxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBjZW50ZXIgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uQ0VOVEVSXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBDRU5URVI6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgcmlnaHQtdG9wIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLlJJR0hUX1RPUFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgUklHSFRfVE9QOiA3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHJpZ2h0LWNlbnRlciBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5SSUdIVF9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIFJJR0hUX0NFTlRFUjogOCxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSByaWdodC1ib3R0b20gYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uUklHSFRfQk9UVE9NXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBSSUdIVF9CT1RUT006IDksXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgYm90dG9tLWxlZnQgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uQk9UVE9NX0xFRlRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9MRUZUOiAxMCxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBib3R0b20tY2VudGVyIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLkJPVFRPTV9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9DRU5URVI6IDExLFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIGJvdHRvbS1yaWdodCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5CT1RUT01fUklHSFRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9SSUdIVDogMTJcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFMSUdOX0NPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/BottomCenter.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/BottomCenter.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetCenterX(gameObject, GetCenterX(alignIn) + offsetX);\r\n    SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUNlbnRlci5qcz8xMzVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldEJvdHRvbScpO1xyXG52YXIgU2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJYJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIGJvdHRvbSBjZW50ZXIgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uQm90dG9tQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUNlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduSW4pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/BottomLeft.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/BottomLeft.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom left of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomLeft = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n    SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUxlZnQuanM/OTllOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUxlZnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldExlZnQnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0TGVmdCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20gbGVmdCBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Cb3R0b21MZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUxlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnbkluKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Qm90dG9tKGdhbWVPYmplY3QsIEdldEJvdHRvbShhbGlnbkluKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3R0b21MZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/BottomRight.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/BottomRight.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom right of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomRight = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n    SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbVJpZ2h0LmpzP2M4NDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9Cb3R0b21SaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFJpZ2h0Jyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20gcmlnaHQgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uQm90dG9tUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgQm90dG9tUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduSW4pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbVJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/Center.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/Center.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CenterOn = __webpack_require__(/*! ../../bounds/CenterOn */ \"./node_modules/phaser/src/display/bounds/CenterOn.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.Center\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar Center = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    CenterOn(gameObject, GetCenterX(alignIn) + offsetX, GetCenterY(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = Center;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0NlbnRlci5qcz80Nzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3Qzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9DZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDZW50ZXJPbiA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9DZW50ZXJPbicpO1xyXG52YXIgR2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRDZW50ZXJYJyk7XHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLkNlbnRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBDZW50ZXIgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIENlbnRlck9uKGdhbWVPYmplY3QsIEdldENlbnRlclgoYWxpZ25JbikgKyBvZmZzZXRYLCBHZXRDZW50ZXJZKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/Center.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/LeftCenter.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/LeftCenter.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the left center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.LeftCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n    SetCenterY(gameObject, GetCenterY(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = LeftCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0xlZnRDZW50ZXIuanM/OGNlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0xlZnRDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJZJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgbGVmdCBjZW50ZXIgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uTGVmdENlbnRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBMZWZ0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRMZWZ0KGdhbWVPYmplY3QsIEdldExlZnQoYWxpZ25JbikgLSBvZmZzZXRYKTtcclxuICAgIFNldENlbnRlclkoZ2FtZU9iamVjdCwgR2V0Q2VudGVyWShhbGlnbkluKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWZ0Q2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/LeftCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/QuickSet.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/QuickSet.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ALIGN_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/display/align/const.js\");\r\n\r\nvar AlignInMap = [];\r\n\r\nAlignInMap[ALIGN_CONST.BOTTOM_CENTER] = __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/in/BottomCenter.js\");\r\nAlignInMap[ALIGN_CONST.BOTTOM_LEFT] = __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/in/BottomLeft.js\");\r\nAlignInMap[ALIGN_CONST.BOTTOM_RIGHT] = __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/in/BottomRight.js\");\r\nAlignInMap[ALIGN_CONST.CENTER] = __webpack_require__(/*! ./Center */ \"./node_modules/phaser/src/display/align/in/Center.js\");\r\nAlignInMap[ALIGN_CONST.LEFT_CENTER] = __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/in/LeftCenter.js\");\r\nAlignInMap[ALIGN_CONST.RIGHT_CENTER] = __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/in/RightCenter.js\");\r\nAlignInMap[ALIGN_CONST.TOP_CENTER] = __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/in/TopCenter.js\");\r\nAlignInMap[ALIGN_CONST.TOP_LEFT] = __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/in/TopLeft.js\");\r\nAlignInMap[ALIGN_CONST.TOP_RIGHT] = __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/in/TopRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned relative to the other.\r\n * The alignment used is based on the `position` argument, which is an `ALIGN_CONST` value, such as `LEFT_CENTER` or `TOP_RIGHT`.\r\n *\r\n * @function Phaser.Display.Align.In.QuickSet\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [child,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {integer} position - The position to align the Game Object with. This is an align constant, such as `ALIGN_CONST.LEFT_CENTER`.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar QuickSet = function (child, alignIn, position, offsetX, offsetY)\r\n{\r\n    return AlignInMap[position](child, alignIn, offsetX, offsetY);\r\n};\r\n\r\nmodule.exports = QuickSet;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1F1aWNrU2V0LmpzPzA5MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFVOztBQUVwQzs7QUFFQSx3Q0FBd0MsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDaEUsc0NBQXNDLG1CQUFPLENBQUMsOEVBQWM7QUFDNUQsdUNBQXVDLG1CQUFPLENBQUMsZ0ZBQWU7QUFDOUQsaUNBQWlDLG1CQUFPLENBQUMsc0VBQVU7QUFDbkQsc0NBQXNDLG1CQUFPLENBQUMsOEVBQWM7QUFDNUQsdUNBQXVDLG1CQUFPLENBQUMsZ0ZBQWU7QUFDOUQscUNBQXFDLG1CQUFPLENBQUMsNEVBQWE7QUFDMUQsbUNBQW1DLG1CQUFPLENBQUMsd0VBQVc7QUFDdEQsb0NBQW9DLG1CQUFPLENBQUMsMEVBQVk7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1F1aWNrU2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQUxJR05fQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG5cclxudmFyIEFsaWduSW5NYXAgPSBbXTtcclxuXHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuQk9UVE9NX0NFTlRFUl0gPSByZXF1aXJlKCcuL0JvdHRvbUNlbnRlcicpO1xyXG5BbGlnbkluTWFwW0FMSUdOX0NPTlNULkJPVFRPTV9MRUZUXSA9IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpO1xyXG5BbGlnbkluTWFwW0FMSUdOX0NPTlNULkJPVFRPTV9SSUdIVF0gPSByZXF1aXJlKCcuL0JvdHRvbVJpZ2h0Jyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuQ0VOVEVSXSA9IHJlcXVpcmUoJy4vQ2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuTEVGVF9DRU5URVJdID0gcmVxdWlyZSgnLi9MZWZ0Q2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuUklHSFRfQ0VOVEVSXSA9IHJlcXVpcmUoJy4vUmlnaHRDZW50ZXInKTtcclxuQWxpZ25Jbk1hcFtBTElHTl9DT05TVC5UT1BfQ0VOVEVSXSA9IHJlcXVpcmUoJy4vVG9wQ2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuVE9QX0xFRlRdID0gcmVxdWlyZSgnLi9Ub3BMZWZ0Jyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuVE9QX1JJR0hUXSA9IHJlcXVpcmUoJy4vVG9wUmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGUgb3RoZXIuXHJcbiAqIFRoZSBhbGlnbm1lbnQgdXNlZCBpcyBiYXNlZCBvbiB0aGUgYHBvc2l0aW9uYCBhcmd1bWVudCwgd2hpY2ggaXMgYW4gYEFMSUdOX0NPTlNUYCB2YWx1ZSwgc3VjaCBhcyBgTEVGVF9DRU5URVJgIG9yIGBUT1BfUklHSFRgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uUXVpY2tTZXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtjaGlsZCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcG9zaXRpb24gLSBUaGUgcG9zaXRpb24gdG8gYWxpZ24gdGhlIEdhbWUgT2JqZWN0IHdpdGguIFRoaXMgaXMgYW4gYWxpZ24gY29uc3RhbnQsIHN1Y2ggYXMgYEFMSUdOX0NPTlNULkxFRlRfQ0VOVEVSYC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFF1aWNrU2V0ID0gZnVuY3Rpb24gKGNoaWxkLCBhbGlnbkluLCBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgcmV0dXJuIEFsaWduSW5NYXBbcG9zaXRpb25dKGNoaWxkLCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVpY2tTZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/QuickSet.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/RightCenter.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/RightCenter.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the right center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.RightCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n    SetCenterY(gameObject, GetCenterY(alignIn) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = RightCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1JpZ2h0Q2VudGVyLmpzPzI2OWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9SaWdodENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWScpO1xyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIFNldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWScpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgcmlnaHQgY2VudGVyIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLlJpZ2h0Q2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFJpZ2h0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRSaWdodChnYW1lT2JqZWN0LCBHZXRSaWdodChhbGlnbkluKSArIG9mZnNldFgpO1xyXG4gICAgU2V0Q2VudGVyWShnYW1lT2JqZWN0LCBHZXRDZW50ZXJZKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJpZ2h0Q2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/RightCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/TopCenter.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/TopCenter.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetCenterX(gameObject, GetCenterX(alignIn) + offsetX);\r\n    SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcENlbnRlci5qcz8zYmVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW4vVG9wQ2VudGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRDZW50ZXJYJyk7XHJcbnZhciBHZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0VG9wJyk7XHJcbnZhciBTZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldENlbnRlclgnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgdG9wIGNlbnRlciBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Ub3BDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wQ2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRDZW50ZXJYKGdhbWVPYmplY3QsIEdldENlbnRlclgoYWxpZ25JbikgKyBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25JbikgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9wQ2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/TopLeft.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/TopLeft.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top left of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopLeft = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n    SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcExlZnQuanM/OWVlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW4vVG9wTGVmdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRMZWZ0Jyk7XHJcbnZhciBTZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0VG9wJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLlRvcExlZnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wTGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0TGVmdChnYW1lT2JqZWN0LCBHZXRMZWZ0KGFsaWduSW4pIC0gb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduSW4pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcExlZnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/TopRight.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/TopRight.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top right of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopRight = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n    SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcFJpZ2h0LmpzPzVlNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQywrRUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcFJpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFJpZ2h0Jyk7XHJcbnZhciBTZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0VG9wJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIHRvcCByaWdodCBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Ub3BSaWdodFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBUb3BSaWdodCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0UmlnaHQoZ2FtZU9iamVjdCwgR2V0UmlnaHQoYWxpZ25JbikgKyBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25JbikgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9wUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/in/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/align/in/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Align.In\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BottomCenter: __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/in/BottomCenter.js\"),\r\n    BottomLeft: __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/in/BottomLeft.js\"),\r\n    BottomRight: __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/in/BottomRight.js\"),\r\n    Center: __webpack_require__(/*! ./Center */ \"./node_modules/phaser/src/display/align/in/Center.js\"),\r\n    LeftCenter: __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/in/LeftCenter.js\"),\r\n    QuickSet: __webpack_require__(/*! ./QuickSet */ \"./node_modules/phaser/src/display/align/in/QuickSet.js\"),\r\n    RightCenter: __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/in/RightCenter.js\"),\r\n    TopCenter: __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/in/TopCenter.js\"),\r\n    TopLeft: __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/in/TopLeft.js\"),\r\n    TopRight: __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/in/TopRight.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL2luZGV4LmpzPzI1OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLHNFQUFVO0FBQzlCLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFjO0FBQ3RDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTtBQUNsQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4QyxlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5JblxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJvdHRvbUNlbnRlcjogcmVxdWlyZSgnLi9Cb3R0b21DZW50ZXInKSxcclxuICAgIEJvdHRvbUxlZnQ6IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpLFxyXG4gICAgQm90dG9tUmlnaHQ6IHJlcXVpcmUoJy4vQm90dG9tUmlnaHQnKSxcclxuICAgIENlbnRlcjogcmVxdWlyZSgnLi9DZW50ZXInKSxcclxuICAgIExlZnRDZW50ZXI6IHJlcXVpcmUoJy4vTGVmdENlbnRlcicpLFxyXG4gICAgUXVpY2tTZXQ6IHJlcXVpcmUoJy4vUXVpY2tTZXQnKSxcclxuICAgIFJpZ2h0Q2VudGVyOiByZXF1aXJlKCcuL1JpZ2h0Q2VudGVyJyksXHJcbiAgICBUb3BDZW50ZXI6IHJlcXVpcmUoJy4vVG9wQ2VudGVyJyksXHJcbiAgICBUb3BMZWZ0OiByZXF1aXJlKCcuL1RvcExlZnQnKSxcclxuICAgIFRvcFJpZ2h0OiByZXF1aXJlKCcuL1RvcFJpZ2h0JylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/display/align/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/display/align/const.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Align\r\n */\r\n\r\nvar Align = {\r\n\r\n    In: __webpack_require__(/*! ./in */ \"./node_modules/phaser/src/display/align/in/index.js\"),\r\n    To: __webpack_require__(/*! ./to */ \"./node_modules/phaser/src/display/align/to/index.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nAlign = Extend(false, Align, CONST);\r\n\r\nmodule.exports = Align;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luZGV4LmpzPzhjMmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsbUZBQTJCOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBTyxDQUFDLGlFQUFNO0FBQ3RCLFFBQVEsbUJBQU8sQ0FBQyxpRUFBTTs7QUFFdEI7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkFsaWduXHJcbiAqL1xyXG5cclxudmFyIEFsaWduID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL2luJyksXHJcbiAgICBUbzogcmVxdWlyZSgnLi90bycpXHJcblxyXG59O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcbkFsaWduID0gRXh0ZW5kKGZhbHNlLCBBbGlnbiwgQ09OU1QpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbGlnbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/BottomCenter.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/BottomCenter.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetCenterX(gameObject, GetCenterX(alignTo) + offsetX);\r\n    SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbUNlbnRlci5qcz8xOGM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxhQUFhLG1CQUFPLENBQUMsK0VBQXFCOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Cb3R0b21DZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclgnKTtcclxudmFyIFNldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFRvcCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIGJvdHRvbSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uQm90dG9tQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUNlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/BottomLeft.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/BottomLeft.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom left position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomLeft = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetLeft(alignTo) - offsetX);\r\n    SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbUxlZnQuanM/NjM3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Cb3R0b21MZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldEJvdHRvbScpO1xyXG52YXIgR2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRMZWZ0Jyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBib3R0b20gbGVmdCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5Cb3R0b21MZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUxlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0VG9wKGdhbWVPYmplY3QsIEdldEJvdHRvbShhbGlnblRvKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3R0b21MZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/BottomRight.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/BottomRight.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom right position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomRight = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetRight(alignTo) + offsetX);\r\n    SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BottomRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbVJpZ2h0LmpzPzM3YTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vQm90dG9tUmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRSaWdodCcpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBib3R0b20gcmlnaHQgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uQm90dG9tUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgQm90dG9tUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbVJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/LeftBottom.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/LeftBottom.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left bottom position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftBottom = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n    SetBottom(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = LeftBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRCb3R0b20uanM/M2JjZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRCb3R0b20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldExlZnQnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFJpZ2h0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgbmV4dCB0byB0aGUgbGVmdCBib3R0b20gcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uTGVmdEJvdHRvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25UbyAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBMZWZ0Qm90dG9tID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduVG8sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRSaWdodChnYW1lT2JqZWN0LCBHZXRMZWZ0KGFsaWduVG8pIC0gb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExlZnRCb3R0b207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftBottom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/LeftCenter.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/LeftCenter.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n    SetCenterY(gameObject, GetCenterY(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = LeftCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRDZW50ZXIuanM/MDc4NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJZJyk7XHJcbnZhciBTZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIGxlZnQgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLlRvLkxlZnRDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgTGVmdENlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0UmlnaHQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Q2VudGVyWShnYW1lT2JqZWN0LCBHZXRDZW50ZXJZKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExlZnRDZW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/LeftTop.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/LeftTop.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left top position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftTop = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n    SetTop(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = LeftTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRUb3AuanM/MjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vTGVmdFRvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBsZWZ0IHRvcCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5MZWZ0VG9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIExlZnRUb3AgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldExlZnQoYWxpZ25UbykgLSBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25UbykgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGVmdFRvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftTop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/RightBottom.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/RightBottom.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right bottom position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightBottom = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n    SetBottom(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = RightBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0Qm90dG9tLmpzPzE1MjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9SaWdodEJvdHRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFJpZ2h0Jyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSByaWdodCBib3R0b20gcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uUmlnaHRCb3R0b21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgUmlnaHRCb3R0b20gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0UmlnaHQoYWxpZ25UbykgKyBvZmZzZXRYKTtcclxuICAgIFNldEJvdHRvbShnYW1lT2JqZWN0LCBHZXRCb3R0b20oYWxpZ25UbykgKyBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmlnaHRCb3R0b207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightBottom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/RightCenter.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/RightCenter.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n    SetCenterY(gameObject, GetCenterY(alignTo) + offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = RightCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0Q2VudGVyLmpzPzZiZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9SaWdodENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWScpO1xyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIFNldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWScpO1xyXG52YXIgU2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRMZWZ0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgbmV4dCB0byB0aGUgcmlnaHQgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLlRvLlJpZ2h0Q2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFJpZ2h0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduVG8sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRMZWZ0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRDZW50ZXJZKGdhbWVPYmplY3QsIEdldENlbnRlclkoYWxpZ25UbykgKyBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmlnaHRDZW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/RightTop.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/RightTop.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right top position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightTop = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n    SetTop(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = RightTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0VG9wLmpzPzZiNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsaUZBQXNCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQywrRUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0VG9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0TGVmdCcpO1xyXG52YXIgU2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFRvcCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIHJpZ2h0IHRvcCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5SaWdodFRvcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25UbyAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBSaWdodFRvcCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0TGVmdChnYW1lT2JqZWN0LCBHZXRSaWdodChhbGlnblRvKSArIG9mZnNldFgpO1xyXG4gICAgU2V0VG9wKGdhbWVPYmplY3QsIEdldFRvcChhbGlnblRvKSAtIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSaWdodFRvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightTop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/TopCenter.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/TopCenter.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetCenterX(gameObject, GetCenterX(alignTo) + offsetX);\r\n    SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcENlbnRlci5qcz8yNThjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Ub3BDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclgnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIHRvcCBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uVG9wQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFRvcENlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduVG8pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/TopLeft.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/TopLeft.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top left position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopLeft = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetLeft(gameObject, GetLeft(alignTo) - offsetX);\r\n    SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcExlZnQuanM/NTk1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Ub3BMZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRMZWZ0Jyk7XHJcbnZhciBHZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0VG9wJyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSB0b3AgbGVmdCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5Ub3BMZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFRvcExlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Qm90dG9tKGdhbWVPYmplY3QsIEdldFRvcChhbGlnblRvKSAtIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb3BMZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/TopRight.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/TopRight.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top right position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopRight = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    SetRight(gameObject, GetRight(alignTo) + offsetX);\r\n    SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = TopRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcFJpZ2h0LmpzP2ZiMjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLG1GQUF1Qjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vVG9wUmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRSaWdodCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldEJvdHRvbScpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSB0b3AgcmlnaHQgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uVG9wUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduVG8pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcFJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/align/to/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/align/to/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Align.To\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BottomCenter: __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/to/BottomCenter.js\"),\r\n    BottomLeft: __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/to/BottomLeft.js\"),\r\n    BottomRight: __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/to/BottomRight.js\"),\r\n    LeftBottom: __webpack_require__(/*! ./LeftBottom */ \"./node_modules/phaser/src/display/align/to/LeftBottom.js\"),\r\n    LeftCenter: __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/to/LeftCenter.js\"),\r\n    LeftTop: __webpack_require__(/*! ./LeftTop */ \"./node_modules/phaser/src/display/align/to/LeftTop.js\"),\r\n    RightBottom: __webpack_require__(/*! ./RightBottom */ \"./node_modules/phaser/src/display/align/to/RightBottom.js\"),\r\n    RightCenter: __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/to/RightCenter.js\"),\r\n    RightTop: __webpack_require__(/*! ./RightTop */ \"./node_modules/phaser/src/display/align/to/RightTop.js\"),\r\n    TopCenter: __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/to/TopCenter.js\"),\r\n    TopLeft: __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/to/TopLeft.js\"),\r\n    TopRight: __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/to/TopRight.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL2luZGV4LmpzP2ZiZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5Ub1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJvdHRvbUNlbnRlcjogcmVxdWlyZSgnLi9Cb3R0b21DZW50ZXInKSxcclxuICAgIEJvdHRvbUxlZnQ6IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpLFxyXG4gICAgQm90dG9tUmlnaHQ6IHJlcXVpcmUoJy4vQm90dG9tUmlnaHQnKSxcclxuICAgIExlZnRCb3R0b206IHJlcXVpcmUoJy4vTGVmdEJvdHRvbScpLFxyXG4gICAgTGVmdENlbnRlcjogcmVxdWlyZSgnLi9MZWZ0Q2VudGVyJyksXHJcbiAgICBMZWZ0VG9wOiByZXF1aXJlKCcuL0xlZnRUb3AnKSxcclxuICAgIFJpZ2h0Qm90dG9tOiByZXF1aXJlKCcuL1JpZ2h0Qm90dG9tJyksXHJcbiAgICBSaWdodENlbnRlcjogcmVxdWlyZSgnLi9SaWdodENlbnRlcicpLFxyXG4gICAgUmlnaHRUb3A6IHJlcXVpcmUoJy4vUmlnaHRUb3AnKSxcclxuICAgIFRvcENlbnRlcjogcmVxdWlyZSgnLi9Ub3BDZW50ZXInKSxcclxuICAgIFRvcExlZnQ6IHJlcXVpcmUoJy4vVG9wTGVmdCcpLFxyXG4gICAgVG9wUmlnaHQ6IHJlcXVpcmUoJy4vVG9wUmlnaHQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/CenterOn.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/CenterOn.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetCenterX = __webpack_require__(/*! ./SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetCenterY = __webpack_require__(/*! ./SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\n\r\n/**\r\n * Positions the Game Object so that it is centered on the given coordinates.\r\n *\r\n * @function Phaser.Display.Bounds.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} x - The horizontal coordinate to position the Game Object on.\r\n * @param {number} y - The vertical coordinate to position the Game Object on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar CenterOn = function (gameObject, x, y)\r\n{\r\n    SetCenterX(gameObject, x);\r\n\r\n    return SetCenterY(gameObject, y);\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9DZW50ZXJPbi5qcz8wMmVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBYztBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4vU2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4vU2V0Q2VudGVyWScpO1xyXG5cclxuLyoqXHJcbiAqIFBvc2l0aW9ucyB0aGUgR2FtZSBPYmplY3Qgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuQ2VudGVyT25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3Qgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0IG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgeCwgeSlcclxue1xyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCB4KTtcclxuXHJcbiAgICByZXR1cm4gU2V0Q2VudGVyWShnYW1lT2JqZWN0LCB5KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VudGVyT247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/CenterOn.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetBottom.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetBottom.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the bottom coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetBottom\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The bottom coordinate of the bounds of the Game Object.\r\n */\r\nvar GetBottom = function (gameObject)\r\n{\r\n    return (gameObject.y + gameObject.height) - (gameObject.height * gameObject.originY);\r\n};\r\n\r\nmodule.exports = GetBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRCb3R0b20uanM/MmMxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0dldEJvdHRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJvdHRvbSBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0Qm90dG9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGdldCB0aGUgYm91bmRzIHZhbHVlIGZyb20uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGJvdHRvbSBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldEJvdHRvbSA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKGdhbWVPYmplY3QueSArIGdhbWVPYmplY3QuaGVpZ2h0KSAtIChnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEJvdHRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetBottom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetCenterX.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetCenterX.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the center x coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetCenterX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The center x coordinate of the bounds of the Game Object.\r\n */\r\nvar GetCenterX = function (gameObject)\r\n{\r\n    return gameObject.x - (gameObject.width * gameObject.originX) + (gameObject.width * 0.5);\r\n};\r\n\r\nmodule.exports = GetCenterX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJYLmpzPzgxNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2VudGVyIHggY29vcmRpbmF0ZSBmcm9tIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldENlbnRlclhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2VudGVyIHggY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRDZW50ZXJYID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LnggLSAoZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWCkgKyAoZ2FtZU9iamVjdC53aWR0aCAqIDAuNSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRlclg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetCenterX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetCenterY.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetCenterY.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the center y coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetCenterY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The center y coordinate of the bounds of the Game Object.\r\n */\r\nvar GetCenterY = function (gameObject)\r\n{\r\n    return gameObject.y - (gameObject.height * gameObject.originY) + (gameObject.height * 0.5);\r\n};\r\n\r\nmodule.exports = GetCenterY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJZLmpzP2JiNTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2VudGVyIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldENlbnRlcllcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2VudGVyIHkgY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRDZW50ZXJZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LnkgLSAoZ2FtZU9iamVjdC5oZWlnaHQgKiBnYW1lT2JqZWN0Lm9yaWdpblkpICsgKGdhbWVPYmplY3QuaGVpZ2h0ICogMC41KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Q2VudGVyWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetCenterY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetLeft.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetLeft.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the left coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetLeft\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The left coordinate of the bounds of the Game Object.\r\n */\r\nvar GetLeft = function (gameObject)\r\n{\r\n    return gameObject.x - (gameObject.width * gameObject.originX);\r\n};\r\n\r\nmodule.exports = GetLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRMZWZ0LmpzPzQzOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRMZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbGVmdCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0TGVmdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBnZXQgdGhlIGJvdW5kcyB2YWx1ZSBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgR2V0TGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdC54IC0gKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetOffsetX.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetOffsetX.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the amount the Game Object is visually offset from its x coordinate.\r\n * This is the same as `width * origin.x`.\r\n * This value will only be > 0 if `origin.x` is not equal to zero.\r\n *\r\n * @function Phaser.Display.Bounds.GetOffsetX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The horizontal offset of the Game Object.\r\n */\r\nvar GetOffsetX = function (gameObject)\r\n{\r\n    return gameObject.width * gameObject.originX;\r\n};\r\n\r\nmodule.exports = GetOffsetX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRPZmZzZXRYLmpzPzk1MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0T2Zmc2V0WC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFtb3VudCB0aGUgR2FtZSBPYmplY3QgaXMgdmlzdWFsbHkgb2Zmc2V0IGZyb20gaXRzIHggY29vcmRpbmF0ZS5cclxuICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgd2lkdGggKiBvcmlnaW4ueGAuXHJcbiAqIFRoaXMgdmFsdWUgd2lsbCBvbmx5IGJlID4gMCBpZiBgb3JpZ2luLnhgIGlzIG5vdCBlcXVhbCB0byB6ZXJvLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldE9mZnNldFhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldE9mZnNldFggPSBmdW5jdGlvbiAoZ2FtZU9iamVjdClcclxue1xyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblg7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE9mZnNldFg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetOffsetX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetOffsetY.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetOffsetY.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the amount the Game Object is visually offset from its y coordinate.\r\n * This is the same as `width * origin.y`.\r\n * This value will only be > 0 if `origin.y` is not equal to zero.\r\n *\r\n * @function Phaser.Display.Bounds.GetOffsetY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The vertical offset of the Game Object.\r\n */\r\nvar GetOffsetY = function (gameObject)\r\n{\r\n    return gameObject.height * gameObject.originY;\r\n};\r\n\r\nmodule.exports = GetOffsetY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRPZmZzZXRZLmpzPzgxNGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0T2Zmc2V0WS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFtb3VudCB0aGUgR2FtZSBPYmplY3QgaXMgdmlzdWFsbHkgb2Zmc2V0IGZyb20gaXRzIHkgY29vcmRpbmF0ZS5cclxuICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgd2lkdGggKiBvcmlnaW4ueWAuXHJcbiAqIFRoaXMgdmFsdWUgd2lsbCBvbmx5IGJlID4gMCBpZiBgb3JpZ2luLnlgIGlzIG5vdCBlcXVhbCB0byB6ZXJvLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldE9mZnNldFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVydGljYWwgb2Zmc2V0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRPZmZzZXRZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0T2Zmc2V0WTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetOffsetY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetRight.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetRight.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the right coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetRight\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The right coordinate of the bounds of the Game Object.\r\n */\r\nvar GetRight = function (gameObject)\r\n{\r\n    return (gameObject.x + gameObject.width) - (gameObject.width * gameObject.originX);\r\n};\r\n\r\nmodule.exports = GetRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRSaWdodC5qcz9iNjMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0UmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSByaWdodCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0UmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmlnaHQgY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRSaWdodCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKGdhbWVPYmplY3QueCArIGdhbWVPYmplY3Qud2lkdGgpIC0gKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRSaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/GetTop.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/GetTop.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the top coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetTop\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The top coordinate of the bounds of the Game Object.\r\n */\r\nvar GetTop = function (gameObject)\r\n{\r\n    return gameObject.y - (gameObject.height * gameObject.originY);\r\n};\r\n\r\nmodule.exports = GetTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRUb3AuanM/NGFmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0dldFRvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRvcCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0VG9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGdldCB0aGUgYm91bmRzIHZhbHVlIGZyb20uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldFRvcCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdC55IC0gKGdhbWVPYmplY3QuaGVpZ2h0ICogZ2FtZU9iamVjdC5vcmlnaW5ZKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VG9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetTop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetBottom.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetBottom.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the bottom of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetBottom = function (gameObject, value)\r\n{\r\n    gameObject.y = (value - gameObject.height) + (gameObject.height * gameObject.originY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRCb3R0b20uanM/YzNlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvU2V0Qm90dG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBHYW1lIE9iamVjdCBzbyB0aGF0IHRoZSBib3R0b20gb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRCb3R0b21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRCb3R0b20gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueSA9ICh2YWx1ZSAtIGdhbWVPYmplY3QuaGVpZ2h0KSArIChnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldEJvdHRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetBottom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetCenterX.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetCenterX.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the center top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetCenterX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} x - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetCenterX = function (gameObject, x)\r\n{\r\n    var offsetX = gameObject.width * gameObject.originX;\r\n\r\n    gameObject.x = (x + offsetX) - (gameObject.width * 0.5);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetCenterX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRDZW50ZXJYLmpzP2M0NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldENlbnRlclguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGNlbnRlciB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRDZW50ZXJYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRDZW50ZXJYID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgpXHJcbntcclxuICAgIHZhciBvZmZzZXRYID0gZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWDtcclxuXHJcbiAgICBnYW1lT2JqZWN0LnggPSAoeCArIG9mZnNldFgpIC0gKGdhbWVPYmplY3Qud2lkdGggKiAwLjUpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRDZW50ZXJYO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetCenterX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetCenterY.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetCenterY.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the center top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetCenterY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} y - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetCenterY = function (gameObject, y)\r\n{\r\n    var offsetY = gameObject.height * gameObject.originY;\r\n\r\n    gameObject.y = (y + offsetY) - (gameObject.height * 0.5);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetCenterY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRDZW50ZXJZLmpzPzU4MDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldENlbnRlclkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGNlbnRlciB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRDZW50ZXJZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRDZW50ZXJZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIHkpXHJcbntcclxuICAgIHZhciBvZmZzZXRZID0gZ2FtZU9iamVjdC5oZWlnaHQgKiBnYW1lT2JqZWN0Lm9yaWdpblk7XHJcblxyXG4gICAgZ2FtZU9iamVjdC55ID0gKHkgKyBvZmZzZXRZKSAtIChnYW1lT2JqZWN0LmhlaWdodCAqIDAuNSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldENlbnRlclk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetCenterY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetLeft.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetLeft.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the left of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetLeft = function (gameObject, value)\r\n{\r\n    gameObject.x = value + (gameObject.width * gameObject.originX);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRMZWZ0LmpzP2Y3N2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldExlZnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGxlZnQgb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRMZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3QgYm91bmRzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgU2V0TGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCB2YWx1ZSlcclxue1xyXG4gICAgZ2FtZU9iamVjdC54ID0gdmFsdWUgKyAoZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWCk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldExlZnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetRight.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetRight.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the left of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetRight = function (gameObject, value)\r\n{\r\n    gameObject.x = (value - gameObject.width) + (gameObject.width * gameObject.originX);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRSaWdodC5qcz9kODEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRSaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBvc2l0aW9ucyB0aGUgR2FtZSBPYmplY3Qgc28gdGhhdCB0aGUgbGVmdCBvZiBpdHMgYm91bmRzIGFsaWducyB3aXRoIHRoZSBnaXZlbiBjb29yZGluYXRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLlNldFJpZ2h0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3QgYm91bmRzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgU2V0UmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueCA9ICh2YWx1ZSAtIGdhbWVPYmplY3Qud2lkdGgpICsgKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRSaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/SetTop.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/SetTop.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetTop = function (gameObject, value)\r\n{\r\n    gameObject.y = value + (gameObject.height * gameObject.originY);\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = SetTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRUb3AuanM/YTBhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvU2V0VG9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBHYW1lIE9iamVjdCBzbyB0aGF0IHRoZSB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRUb3BcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRUb3AgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueSA9IHZhbHVlICsgKGdhbWVPYmplY3QuaGVpZ2h0ICogZ2FtZU9iamVjdC5vcmlnaW5ZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VG9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetTop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/bounds/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/display/bounds/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Bounds\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CenterOn: __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/display/bounds/CenterOn.js\"),\r\n    GetBottom: __webpack_require__(/*! ./GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\"),\r\n    GetCenterX: __webpack_require__(/*! ./GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\"),\r\n    GetCenterY: __webpack_require__(/*! ./GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\"),\r\n    GetLeft: __webpack_require__(/*! ./GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\"),\r\n    GetOffsetX: __webpack_require__(/*! ./GetOffsetX */ \"./node_modules/phaser/src/display/bounds/GetOffsetX.js\"),\r\n    GetOffsetY: __webpack_require__(/*! ./GetOffsetY */ \"./node_modules/phaser/src/display/bounds/GetOffsetY.js\"),\r\n    GetRight: __webpack_require__(/*! ./GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\"),\r\n    GetTop: __webpack_require__(/*! ./GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\"),\r\n    SetBottom: __webpack_require__(/*! ./SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\"),\r\n    SetCenterX: __webpack_require__(/*! ./SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\"),\r\n    SetCenterY: __webpack_require__(/*! ./SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\"),\r\n    SetLeft: __webpack_require__(/*! ./SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\"),\r\n    SetRight: __webpack_require__(/*! ./SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\"),\r\n    SetTop: __webpack_require__(/*! ./SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\")\r\n    \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9pbmRleC5qcz82MjU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHdFQUFZO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQywwRUFBYTtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxhQUFhLG1CQUFPLENBQUMsc0VBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsY0FBYyxtQkFBTyxDQUFDLHdFQUFZO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyxvRUFBVTtBQUM5QixlQUFlLG1CQUFPLENBQUMsMEVBQWE7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHNFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyx3RUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsb0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkJvdW5kc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENlbnRlck9uOiByZXF1aXJlKCcuL0NlbnRlck9uJyksXHJcbiAgICBHZXRCb3R0b206IHJlcXVpcmUoJy4vR2V0Qm90dG9tJyksXHJcbiAgICBHZXRDZW50ZXJYOiByZXF1aXJlKCcuL0dldENlbnRlclgnKSxcclxuICAgIEdldENlbnRlclk6IHJlcXVpcmUoJy4vR2V0Q2VudGVyWScpLFxyXG4gICAgR2V0TGVmdDogcmVxdWlyZSgnLi9HZXRMZWZ0JyksXHJcbiAgICBHZXRPZmZzZXRYOiByZXF1aXJlKCcuL0dldE9mZnNldFgnKSxcclxuICAgIEdldE9mZnNldFk6IHJlcXVpcmUoJy4vR2V0T2Zmc2V0WScpLFxyXG4gICAgR2V0UmlnaHQ6IHJlcXVpcmUoJy4vR2V0UmlnaHQnKSxcclxuICAgIEdldFRvcDogcmVxdWlyZSgnLi9HZXRUb3AnKSxcclxuICAgIFNldEJvdHRvbTogcmVxdWlyZSgnLi9TZXRCb3R0b20nKSxcclxuICAgIFNldENlbnRlclg6IHJlcXVpcmUoJy4vU2V0Q2VudGVyWCcpLFxyXG4gICAgU2V0Q2VudGVyWTogcmVxdWlyZSgnLi9TZXRDZW50ZXJZJyksXHJcbiAgICBTZXRMZWZ0OiByZXF1aXJlKCcuL1NldExlZnQnKSxcclxuICAgIFNldFJpZ2h0OiByZXF1aXJlKCcuL1NldFJpZ2h0JyksXHJcbiAgICBTZXRUb3A6IHJlcXVpcmUoJy4vU2V0VG9wJylcclxuICAgIFxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/CanvasInterpolation.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/CanvasInterpolation.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas.CanvasInterpolation\r\n * @since 3.0.0\r\n */\r\nvar CanvasInterpolation = {\r\n\r\n    /**\r\n     * Sets the CSS image-rendering property on the given canvas to be 'crisp' (aka 'optimize contrast' on webkit).\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasInterpolation.setCrisp\r\n     * @since 3.0.0\r\n     * \r\n     * @param {HTMLCanvasElement} canvas - The canvas object to have the style set on.\r\n     * \r\n     * @return {HTMLCanvasElement} The canvas.\r\n     */\r\n    setCrisp: function (canvas)\r\n    {\r\n        var types = [ 'optimizeSpeed', '-moz-crisp-edges', '-o-crisp-edges', '-webkit-optimize-contrast', 'optimize-contrast', 'crisp-edges', 'pixelated' ];\r\n\r\n        types.forEach(function (type)\r\n        {\r\n            canvas.style['image-rendering'] = type;\r\n        });\r\n\r\n        canvas.style.msInterpolationMode = 'nearest-neighbor';\r\n\r\n        return canvas;\r\n    },\r\n\r\n    /**\r\n     * Sets the CSS image-rendering property on the given canvas to be 'bicubic' (aka 'auto').\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasInterpolation.setBicubic\r\n     * @since 3.0.0\r\n     * \r\n     * @param {HTMLCanvasElement} canvas - The canvas object to have the style set on.\r\n     * \r\n     * @return {HTMLCanvasElement} The canvas.\r\n     */\r\n    setBicubic: function (canvas)\r\n    {\r\n        canvas.style['image-rendering'] = 'auto';\r\n        canvas.style.msInterpolationMode = 'bicubic';\r\n\r\n        return canvas;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = CanvasInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNJbnRlcnBvbGF0aW9uLmpzP2JiYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzSW50ZXJwb2xhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBDYW52YXNJbnRlcnBvbGF0aW9uID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQ1NTIGltYWdlLXJlbmRlcmluZyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gY2FudmFzIHRvIGJlICdjcmlzcCcgKGFrYSAnb3B0aW1pemUgY29udHJhc3QnIG9uIHdlYmtpdCkuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNJbnRlcnBvbGF0aW9uLnNldENyaXNwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzIC0gVGhlIGNhbnZhcyBvYmplY3QgdG8gaGF2ZSB0aGUgc3R5bGUgc2V0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcy5cclxuICAgICAqL1xyXG4gICAgc2V0Q3Jpc3A6IGZ1bmN0aW9uIChjYW52YXMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHR5cGVzID0gWyAnb3B0aW1pemVTcGVlZCcsICctbW96LWNyaXNwLWVkZ2VzJywgJy1vLWNyaXNwLWVkZ2VzJywgJy13ZWJraXQtb3B0aW1pemUtY29udHJhc3QnLCAnb3B0aW1pemUtY29udHJhc3QnLCAnY3Jpc3AtZWRnZXMnLCAncGl4ZWxhdGVkJyBdO1xyXG5cclxuICAgICAgICB0eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FudmFzLnN0eWxlWydpbWFnZS1yZW5kZXJpbmcnXSA9IHR5cGU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5tc0ludGVycG9sYXRpb25Nb2RlID0gJ25lYXJlc3QtbmVpZ2hib3InO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENTUyBpbWFnZS1yZW5kZXJpbmcgcHJvcGVydHkgb24gdGhlIGdpdmVuIGNhbnZhcyB0byBiZSAnYmljdWJpYycgKGFrYSAnYXV0bycpLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzSW50ZXJwb2xhdGlvbi5zZXRCaWN1YmljXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzIC0gVGhlIGNhbnZhcyBvYmplY3QgdG8gaGF2ZSB0aGUgc3R5bGUgc2V0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcy5cclxuICAgICAqL1xyXG4gICAgc2V0QmljdWJpYzogZnVuY3Rpb24gKGNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ2F1dG8nO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5tc0ludGVycG9sYXRpb25Nb2RlID0gJ2JpY3ViaWMnO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzSW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/CanvasPool.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/CanvasPool.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Smoothing = __webpack_require__(/*! ./Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\");\r\n\r\n// The pool into which the canvas elements are placed.\r\nvar pool = [];\r\n\r\n//  Automatically apply smoothing(false) to created Canvas elements\r\nvar _disableContextSmoothing = false;\r\n\r\n/**\r\n * The CanvasPool is a global static object, that allows Phaser to recycle and pool 2D Context Canvas DOM elements.\r\n * It does not pool WebGL Contexts, because once the context options are set they cannot be modified again, \r\n * which is useless for some of the Phaser pipelines / renderer.\r\n *\r\n * This singleton is instantiated as soon as Phaser loads, before a Phaser.Game instance has even been created.\r\n * Which means all instances of Phaser Games on the same page can share the one single pool.\r\n *\r\n * @namespace Phaser.Display.Canvas.CanvasPool\r\n * @since 3.0.0\r\n */\r\nvar CanvasPool = function ()\r\n{\r\n    /**\r\n     * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} parent - The parent of the Canvas object.\r\n     * @param {integer} [width=1] - The width of the Canvas.\r\n     * @param {integer} [height=1] - The height of the Canvas.\r\n     * @param {integer} [canvasType=Phaser.CANVAS] - The type of the Canvas. Either `Phaser.CANVAS` or `Phaser.WEBGL`.\r\n     * @param {boolean} [selfParent=false] - Use the generated Canvas element as the parent?\r\n     *\r\n     * @return {HTMLCanvasElement} The canvas element that was created or pulled from the pool\r\n     */\r\n    var create = function (parent, width, height, canvasType, selfParent)\r\n    {\r\n        if (width === undefined) { width = 1; }\r\n        if (height === undefined) { height = 1; }\r\n        if (canvasType === undefined) { canvasType = CONST.CANVAS; }\r\n        if (selfParent === undefined) { selfParent = false; }\r\n\r\n        var canvas;\r\n        var container = first(canvasType);\r\n\r\n        if (container === null)\r\n        {\r\n            container = {\r\n                parent: parent,\r\n                canvas: document.createElement('canvas'),\r\n                type: canvasType\r\n            };\r\n\r\n            if (canvasType === CONST.CANVAS)\r\n            {\r\n                pool.push(container);\r\n            }\r\n\r\n            canvas = container.canvas;\r\n        }\r\n        else\r\n        {\r\n            container.parent = parent;\r\n\r\n            canvas = container.canvas;\r\n        }\r\n\r\n        if (selfParent)\r\n        {\r\n            container.parent = canvas;\r\n        }\r\n\r\n        canvas.width = width;\r\n        canvas.height = height;\r\n\r\n        if (_disableContextSmoothing && canvasType === CONST.CANVAS)\r\n        {\r\n            Smoothing.disable(canvas.getContext('2d'));\r\n        }\r\n\r\n        return canvas;\r\n    };\r\n\r\n    /**\r\n     * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.create2D\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} parent - The parent of the Canvas object.\r\n     * @param {integer} [width=1] - The width of the Canvas.\r\n     * @param {integer} [height=1] - The height of the Canvas.\r\n     *\r\n     * @return {HTMLCanvasElement} The created canvas.\r\n     */\r\n    var create2D = function (parent, width, height)\r\n    {\r\n        return create(parent, width, height, CONST.CANVAS);\r\n    };\r\n\r\n    /**\r\n     * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.createWebGL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} parent - The parent of the Canvas object.\r\n     * @param {integer} [width=1] - The width of the Canvas.\r\n     * @param {integer} [height=1] - The height of the Canvas.\r\n     *\r\n     * @return {HTMLCanvasElement} The created WebGL canvas.\r\n     */\r\n    var createWebGL = function (parent, width, height)\r\n    {\r\n        return create(parent, width, height, CONST.WEBGL);\r\n    };\r\n\r\n    /**\r\n     * Gets the first free canvas index from the pool.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.first\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [canvasType=Phaser.CANVAS] - The type of the Canvas. Either `Phaser.CANVAS` or `Phaser.WEBGL`.\r\n     *\r\n     * @return {HTMLCanvasElement} The first free canvas, or `null` if a WebGL canvas was requested or if the pool doesn't have free canvases.\r\n     */\r\n    var first = function (canvasType)\r\n    {\r\n        if (canvasType === undefined) { canvasType = CONST.CANVAS; }\r\n\r\n        if (canvasType === CONST.WEBGL)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        for (var i = 0; i < pool.length; i++)\r\n        {\r\n            var container = pool[i];\r\n\r\n            if (!container.parent && container.type === canvasType)\r\n            {\r\n                return container;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    /**\r\n     * Looks up a canvas based on its parent, and if found puts it back in the pool, freeing it up for re-use.\r\n     * The canvas has its width and height set to 1, and its parent attribute nulled.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} parent - The canvas or the parent of the canvas to free.\r\n     */\r\n    var remove = function (parent)\r\n    {\r\n        //  Check to see if the parent is a canvas object\r\n        var isCanvas = parent instanceof HTMLCanvasElement;\r\n\r\n        pool.forEach(function (container)\r\n        {\r\n            if ((isCanvas && container.canvas === parent) || (!isCanvas && container.parent === parent))\r\n            {\r\n                container.parent = null;\r\n                container.canvas.width = 1;\r\n                container.canvas.height = 1;\r\n            }\r\n        });\r\n    };\r\n\r\n    /**\r\n     * Gets the total number of used canvas elements in the pool.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.total\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of used canvases.\r\n     */\r\n    var total = function ()\r\n    {\r\n        var c = 0;\r\n\r\n        pool.forEach(function (container)\r\n        {\r\n            if (container.parent)\r\n            {\r\n                c++;\r\n            }\r\n        });\r\n\r\n        return c;\r\n    };\r\n\r\n    /**\r\n     * Gets the total number of free canvas elements in the pool.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.free\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of free canvases.\r\n     */\r\n    var free = function ()\r\n    {\r\n        return pool.length - total();\r\n    };\r\n\r\n    /**\r\n     * Disable context smoothing on any new Canvas element created.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.disableSmoothing\r\n     * @since 3.0.0\r\n     */\r\n    var disableSmoothing = function ()\r\n    {\r\n        _disableContextSmoothing = true;\r\n    };\r\n\r\n    /**\r\n     * Enable context smoothing on any new Canvas element created.\r\n     *\r\n     * @function Phaser.Display.Canvas.CanvasPool.enableSmoothing\r\n     * @since 3.0.0\r\n     */\r\n    var enableSmoothing = function ()\r\n    {\r\n        _disableContextSmoothing = false;\r\n    };\r\n\r\n    return {\r\n        create2D: create2D,\r\n        create: create,\r\n        createWebGL: createWebGL,\r\n        disableSmoothing: disableSmoothing,\r\n        enableSmoothing: enableSmoothing,\r\n        first: first,\r\n        free: free,\r\n        pool: pool,\r\n        remove: remove,\r\n        total: total\r\n    };\r\n};\r\n\r\n//  If we export the called function here, it'll only be invoked once (not every time it's required).\r\nmodule.exports = CanvasPool();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sLmpzPzMwODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLFlBQVk7QUFDL0MsdUNBQXVDLDJCQUEyQjtBQUNsRSx1Q0FBdUMsb0JBQW9COztBQUUzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsMkJBQTJCOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcclxudmFyIFNtb290aGluZyA9IHJlcXVpcmUoJy4vU21vb3RoaW5nJyk7XHJcblxyXG4vLyBUaGUgcG9vbCBpbnRvIHdoaWNoIHRoZSBjYW52YXMgZWxlbWVudHMgYXJlIHBsYWNlZC5cclxudmFyIHBvb2wgPSBbXTtcclxuXHJcbi8vICBBdXRvbWF0aWNhbGx5IGFwcGx5IHNtb290aGluZyhmYWxzZSkgdG8gY3JlYXRlZCBDYW52YXMgZWxlbWVudHNcclxudmFyIF9kaXNhYmxlQ29udGV4dFNtb290aGluZyA9IGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW52YXNQb29sIGlzIGEgZ2xvYmFsIHN0YXRpYyBvYmplY3QsIHRoYXQgYWxsb3dzIFBoYXNlciB0byByZWN5Y2xlIGFuZCBwb29sIDJEIENvbnRleHQgQ2FudmFzIERPTSBlbGVtZW50cy5cclxuICogSXQgZG9lcyBub3QgcG9vbCBXZWJHTCBDb250ZXh0cywgYmVjYXVzZSBvbmNlIHRoZSBjb250ZXh0IG9wdGlvbnMgYXJlIHNldCB0aGV5IGNhbm5vdCBiZSBtb2RpZmllZCBhZ2FpbiwgXHJcbiAqIHdoaWNoIGlzIHVzZWxlc3MgZm9yIHNvbWUgb2YgdGhlIFBoYXNlciBwaXBlbGluZXMgLyByZW5kZXJlci5cclxuICpcclxuICogVGhpcyBzaW5nbGV0b24gaXMgaW5zdGFudGlhdGVkIGFzIHNvb24gYXMgUGhhc2VyIGxvYWRzLCBiZWZvcmUgYSBQaGFzZXIuR2FtZSBpbnN0YW5jZSBoYXMgZXZlbiBiZWVuIGNyZWF0ZWQuXHJcbiAqIFdoaWNoIG1lYW5zIGFsbCBpbnN0YW5jZXMgb2YgUGhhc2VyIEdhbWVzIG9uIHRoZSBzYW1lIHBhZ2UgY2FuIHNoYXJlIHRoZSBvbmUgc2luZ2xlIHBvb2wuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgQ2FudmFzUG9vbCA9IGZ1bmN0aW9uICgpXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDYW52YXMgRE9NIGVsZW1lbnQsIG9yIHB1bGxzIG9uZSBmcm9tIHRoZSBwb29sIGlmIGZyZWUuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmNyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2NhbnZhc1R5cGU9UGhhc2VyLkNBTlZBU10gLSBUaGUgdHlwZSBvZiB0aGUgQ2FudmFzLiBFaXRoZXIgYFBoYXNlci5DQU5WQVNgIG9yIGBQaGFzZXIuV0VCR0xgLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZlBhcmVudD1mYWxzZV0gLSBVc2UgdGhlIGdlbmVyYXRlZCBDYW52YXMgZWxlbWVudCBhcyB0aGUgcGFyZW50P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZCBvciBwdWxsZWQgZnJvbSB0aGUgcG9vbFxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlID0gZnVuY3Rpb24gKHBhcmVudCwgd2lkdGgsIGhlaWdodCwgY2FudmFzVHlwZSwgc2VsZlBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDE7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTsgfVxyXG4gICAgICAgIGlmIChjYW52YXNUeXBlID09PSB1bmRlZmluZWQpIHsgY2FudmFzVHlwZSA9IENPTlNULkNBTlZBUzsgfVxyXG4gICAgICAgIGlmIChzZWxmUGFyZW50ID09PSB1bmRlZmluZWQpIHsgc2VsZlBhcmVudCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW52YXM7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGZpcnN0KGNhbnZhc1R5cGUpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGFpbmVyID0ge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjYW52YXM6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogY2FudmFzVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbnZhc1R5cGUgPT09IENPTlNULkNBTlZBUylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcG9vbC5wdXNoKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhbnZhcyA9IGNvbnRhaW5lci5jYW52YXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICBjYW52YXMgPSBjb250YWluZXIuY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGZQYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250YWluZXIucGFyZW50ID0gY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKF9kaXNhYmxlQ29udGV4dFNtb290aGluZyAmJiBjYW52YXNUeXBlID09PSBDT05TVC5DQU5WQVMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTbW9vdGhpbmcuZGlzYWJsZShjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FudmFzIERPTSBlbGVtZW50LCBvciBwdWxscyBvbmUgZnJvbSB0aGUgcG9vbCBpZiBmcmVlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5jcmVhdGUyRFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNyZWF0ZWQgY2FudmFzLlxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlMkQgPSBmdW5jdGlvbiAocGFyZW50LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGUocGFyZW50LCB3aWR0aCwgaGVpZ2h0LCBDT05TVC5DQU5WQVMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FudmFzIERPTSBlbGVtZW50LCBvciBwdWxscyBvbmUgZnJvbSB0aGUgcG9vbCBpZiBmcmVlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5jcmVhdGVXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNyZWF0ZWQgV2ViR0wgY2FudmFzLlxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlV2ViR0wgPSBmdW5jdGlvbiAocGFyZW50LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGUocGFyZW50LCB3aWR0aCwgaGVpZ2h0LCBDT05TVC5XRUJHTCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZmlyc3QgZnJlZSBjYW52YXMgaW5kZXggZnJvbSB0aGUgcG9vbC5cclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2wuZmlyc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2NhbnZhc1R5cGU9UGhhc2VyLkNBTlZBU10gLSBUaGUgdHlwZSBvZiB0aGUgQ2FudmFzLiBFaXRoZXIgYFBoYXNlci5DQU5WQVNgIG9yIGBQaGFzZXIuV0VCR0xgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgZmlyc3QgZnJlZSBjYW52YXMsIG9yIGBudWxsYCBpZiBhIFdlYkdMIGNhbnZhcyB3YXMgcmVxdWVzdGVkIG9yIGlmIHRoZSBwb29sIGRvZXNuJ3QgaGF2ZSBmcmVlIGNhbnZhc2VzLlxyXG4gICAgICovXHJcbiAgICB2YXIgZmlyc3QgPSBmdW5jdGlvbiAoY2FudmFzVHlwZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FudmFzVHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNhbnZhc1R5cGUgPSBDT05TVC5DQU5WQVM7IH1cclxuXHJcbiAgICAgICAgaWYgKGNhbnZhc1R5cGUgPT09IENPTlNULldFQkdMKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvb2wubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gcG9vbFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLnBhcmVudCAmJiBjb250YWluZXIudHlwZSA9PT0gY2FudmFzVHlwZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MgdXAgYSBjYW52YXMgYmFzZWQgb24gaXRzIHBhcmVudCwgYW5kIGlmIGZvdW5kIHB1dHMgaXQgYmFjayBpbiB0aGUgcG9vbCwgZnJlZWluZyBpdCB1cCBmb3IgcmUtdXNlLlxyXG4gICAgICogVGhlIGNhbnZhcyBoYXMgaXRzIHdpZHRoIGFuZCBoZWlnaHQgc2V0IHRvIDEsIGFuZCBpdHMgcGFyZW50IGF0dHJpYnV0ZSBudWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLnJlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgY2FudmFzIG9yIHRoZSBwYXJlbnQgb2YgdGhlIGNhbnZhcyB0byBmcmVlLlxyXG4gICAgICovXHJcbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwYXJlbnQgaXMgYSBjYW52YXMgb2JqZWN0XHJcbiAgICAgICAgdmFyIGlzQ2FudmFzID0gcGFyZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgICAgIHBvb2wuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKChpc0NhbnZhcyAmJiBjb250YWluZXIuY2FudmFzID09PSBwYXJlbnQpIHx8ICghaXNDYW52YXMgJiYgY29udGFpbmVyLnBhcmVudCA9PT0gcGFyZW50KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2FudmFzLndpZHRoID0gMTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB1c2VkIGNhbnZhcyBlbGVtZW50cyBpbiB0aGUgcG9vbC5cclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2wudG90YWxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgdXNlZCBjYW52YXNlcy5cclxuICAgICAqL1xyXG4gICAgdmFyIHRvdGFsID0gZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYyA9IDA7XHJcblxyXG4gICAgICAgIHBvb2wuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5wYXJlbnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZSBjYW52YXMgZWxlbWVudHMgaW4gdGhlIHBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmZyZWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgZnJlZSBjYW52YXNlcy5cclxuICAgICAqL1xyXG4gICAgdmFyIGZyZWUgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBwb29sLmxlbmd0aCAtIHRvdGFsKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBjb250ZXh0IHNtb290aGluZyBvbiBhbnkgbmV3IENhbnZhcyBlbGVtZW50IGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmRpc2FibGVTbW9vdGhpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2YXIgZGlzYWJsZVNtb290aGluZyA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgX2Rpc2FibGVDb250ZXh0U21vb3RoaW5nID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgY29udGV4dCBzbW9vdGhpbmcgb24gYW55IG5ldyBDYW52YXMgZWxlbWVudCBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5lbmFibGVTbW9vdGhpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2YXIgZW5hYmxlU21vb3RoaW5nID0gZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBfZGlzYWJsZUNvbnRleHRTbW9vdGhpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjcmVhdGUyRDogY3JlYXRlMkQsXHJcbiAgICAgICAgY3JlYXRlOiBjcmVhdGUsXHJcbiAgICAgICAgY3JlYXRlV2ViR0w6IGNyZWF0ZVdlYkdMLFxyXG4gICAgICAgIGRpc2FibGVTbW9vdGhpbmc6IGRpc2FibGVTbW9vdGhpbmcsXHJcbiAgICAgICAgZW5hYmxlU21vb3RoaW5nOiBlbmFibGVTbW9vdGhpbmcsXHJcbiAgICAgICAgZmlyc3Q6IGZpcnN0LFxyXG4gICAgICAgIGZyZWU6IGZyZWUsXHJcbiAgICAgICAgcG9vbDogcG9vbCxcclxuICAgICAgICByZW1vdmU6IHJlbW92ZSxcclxuICAgICAgICB0b3RhbDogdG90YWxcclxuICAgIH07XHJcbn07XHJcblxyXG4vLyAgSWYgd2UgZXhwb3J0IHRoZSBjYWxsZWQgZnVuY3Rpb24gaGVyZSwgaXQnbGwgb25seSBiZSBpbnZva2VkIG9uY2UgKG5vdCBldmVyeSB0aW1lIGl0J3MgcmVxdWlyZWQpLlxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1Bvb2woKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/CanvasPool.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/Smoothing.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/Smoothing.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Browser specific prefix, so not going to change between contexts, only between browsers\r\nvar prefix = '';\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas.Smoothing\r\n * @since 3.0.0\r\n */\r\nvar Smoothing = function ()\r\n{\r\n    /**\r\n     * Gets the Smoothing Enabled vendor prefix being used on the given context, or null if not set.\r\n     *\r\n     * @function Phaser.Display.Canvas.Smoothing.getPrefix\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The canvas context to check.\r\n     *\r\n     * @return {string} The name of the property on the context which controls image smoothing (either `imageSmoothingEnabled` or a vendor-prefixed version thereof), or `null` if not supported.\r\n     */\r\n    var getPrefix = function (context)\r\n    {\r\n        var vendors = [ 'i', 'webkitI', 'msI', 'mozI', 'oI' ];\r\n\r\n        for (var i = 0; i < vendors.length; i++)\r\n        {\r\n            var s = vendors[i] + 'mageSmoothingEnabled';\r\n\r\n            if (s in context)\r\n            {\r\n                return s;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    /**\r\n     * Sets the Image Smoothing property on the given context. Set to false to disable image smoothing.\r\n     * By default browsers have image smoothing enabled, which isn't always what you visually want, especially\r\n     * when using pixel art in a game. Note that this sets the property on the context itself, so that any image\r\n     * drawn to the context will be affected. This sets the property across all current browsers but support is\r\n     * patchy on earlier browsers, especially on mobile.\r\n     *\r\n     * @function Phaser.Display.Canvas.Smoothing.enable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context on which to enable smoothing.\r\n     *\r\n     * @return {(CanvasRenderingContext2D|WebGLRenderingContext)} The provided context.\r\n     */\r\n    var enable = function (context)\r\n    {\r\n        if (prefix === '')\r\n        {\r\n            prefix = getPrefix(context);\r\n        }\r\n\r\n        if (prefix)\r\n        {\r\n            context[prefix] = true;\r\n        }\r\n\r\n        return context;\r\n    };\r\n\r\n    /**\r\n     * Sets the Image Smoothing property on the given context. Set to false to disable image smoothing.\r\n     * By default browsers have image smoothing enabled, which isn't always what you visually want, especially\r\n     * when using pixel art in a game. Note that this sets the property on the context itself, so that any image\r\n     * drawn to the context will be affected. This sets the property across all current browsers but support is\r\n     * patchy on earlier browsers, especially on mobile.\r\n     *\r\n     * @function Phaser.Display.Canvas.Smoothing.disable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context on which to disable smoothing.\r\n     *\r\n     * @return {(CanvasRenderingContext2D|WebGLRenderingContext)} The provided context.\r\n     */\r\n    var disable = function (context)\r\n    {\r\n        if (prefix === '')\r\n        {\r\n            prefix = getPrefix(context);\r\n        }\r\n\r\n        if (prefix)\r\n        {\r\n            context[prefix] = false;\r\n        }\r\n\r\n        return context;\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if the given context has image smoothing enabled, otherwise returns `false`.\r\n     * Returns null if no smoothing prefix is available.\r\n     *\r\n     * @function Phaser.Display.Canvas.Smoothing.isEnabled\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context to check.\r\n     *\r\n     * @return {?boolean} `true` if smoothing is enabled on the context, otherwise `false`. `null` if not supported.\r\n     */\r\n    var isEnabled = function (context)\r\n    {\r\n        return (prefix !== null) ? context[prefix] : null;\r\n    };\r\n\r\n    return {\r\n        disable: disable,\r\n        enable: enable,\r\n        getPrefix: getPrefix,\r\n        isEnabled: isEnabled\r\n    };\r\n\r\n};\r\n\r\nmodule.exports = Smoothing();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9TbW9vdGhpbmcuanM/NzZkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGdCQUFnQixpREFBaUQ7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaURBQWlEO0FBQ2hFO0FBQ0EsZ0JBQWdCLGlEQUFpRDtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpREFBaUQ7QUFDaEU7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY2FudmFzL1Ntb290aGluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEJyb3dzZXIgc3BlY2lmaWMgcHJlZml4LCBzbyBub3QgZ29pbmcgdG8gY2hhbmdlIGJldHdlZW4gY29udGV4dHMsIG9ubHkgYmV0d2VlbiBicm93c2Vyc1xyXG52YXIgcHJlZml4ID0gJyc7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFNtb290aGluZyA9IGZ1bmN0aW9uICgpXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgU21vb3RoaW5nIEVuYWJsZWQgdmVuZG9yIHByZWZpeCBiZWluZyB1c2VkIG9uIHRoZSBnaXZlbiBjb250ZXh0LCBvciBudWxsIGlmIG5vdCBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5TbW9vdGhpbmcuZ2V0UHJlZml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gY29udGV4dCAtIFRoZSBjYW52YXMgY29udGV4dCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dCB3aGljaCBjb250cm9scyBpbWFnZSBzbW9vdGhpbmcgKGVpdGhlciBgaW1hZ2VTbW9vdGhpbmdFbmFibGVkYCBvciBhIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uIHRoZXJlb2YpLCBvciBgbnVsbGAgaWYgbm90IHN1cHBvcnRlZC5cclxuICAgICAqL1xyXG4gICAgdmFyIGdldFByZWZpeCA9IGZ1bmN0aW9uIChjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2ZW5kb3JzID0gWyAnaScsICd3ZWJraXRJJywgJ21zSScsICdtb3pJJywgJ29JJyBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcyA9IHZlbmRvcnNbaV0gKyAnbWFnZVNtb290aGluZ0VuYWJsZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHMgaW4gY29udGV4dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEltYWdlIFNtb290aGluZyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gY29udGV4dC4gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgaW1hZ2Ugc21vb3RoaW5nLlxyXG4gICAgICogQnkgZGVmYXVsdCBicm93c2VycyBoYXZlIGltYWdlIHNtb290aGluZyBlbmFibGVkLCB3aGljaCBpc24ndCBhbHdheXMgd2hhdCB5b3UgdmlzdWFsbHkgd2FudCwgZXNwZWNpYWxseVxyXG4gICAgICogd2hlbiB1c2luZyBwaXhlbCBhcnQgaW4gYSBnYW1lLiBOb3RlIHRoYXQgdGhpcyBzZXRzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dCBpdHNlbGYsIHNvIHRoYXQgYW55IGltYWdlXHJcbiAgICAgKiBkcmF3biB0byB0aGUgY29udGV4dCB3aWxsIGJlIGFmZmVjdGVkLiBUaGlzIHNldHMgdGhlIHByb3BlcnR5IGFjcm9zcyBhbGwgY3VycmVudCBicm93c2VycyBidXQgc3VwcG9ydCBpc1xyXG4gICAgICogcGF0Y2h5IG9uIGVhcmxpZXIgYnJvd3NlcnMsIGVzcGVjaWFsbHkgb24gbW9iaWxlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nLmVuYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCBvbiB3aGljaCB0byBlbmFibGUgc21vb3RoaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gVGhlIHByb3ZpZGVkIGNvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIHZhciBlbmFibGUgPSBmdW5jdGlvbiAoY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAocHJlZml4ID09PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByZWZpeCA9IGdldFByZWZpeChjb250ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcmVmaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0W3ByZWZpeF0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgSW1hZ2UgU21vb3RoaW5nIHByb3BlcnR5IG9uIHRoZSBnaXZlbiBjb250ZXh0LiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBpbWFnZSBzbW9vdGhpbmcuXHJcbiAgICAgKiBCeSBkZWZhdWx0IGJyb3dzZXJzIGhhdmUgaW1hZ2Ugc21vb3RoaW5nIGVuYWJsZWQsIHdoaWNoIGlzbid0IGFsd2F5cyB3aGF0IHlvdSB2aXN1YWxseSB3YW50LCBlc3BlY2lhbGx5XHJcbiAgICAgKiB3aGVuIHVzaW5nIHBpeGVsIGFydCBpbiBhIGdhbWUuIE5vdGUgdGhhdCB0aGlzIHNldHMgdGhlIHByb3BlcnR5IG9uIHRoZSBjb250ZXh0IGl0c2VsZiwgc28gdGhhdCBhbnkgaW1hZ2VcclxuICAgICAqIGRyYXduIHRvIHRoZSBjb250ZXh0IHdpbGwgYmUgYWZmZWN0ZWQuIFRoaXMgc2V0cyB0aGUgcHJvcGVydHkgYWNyb3NzIGFsbCBjdXJyZW50IGJyb3dzZXJzIGJ1dCBzdXBwb3J0IGlzXHJcbiAgICAgKiBwYXRjaHkgb24gZWFybGllciBicm93c2VycywgZXNwZWNpYWxseSBvbiBtb2JpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5TbW9vdGhpbmcuZGlzYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCBvbiB3aGljaCB0byBkaXNhYmxlIHNtb290aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IFRoZSBwcm92aWRlZCBjb250ZXh0LlxyXG4gICAgICovXHJcbiAgICB2YXIgZGlzYWJsZSA9IGZ1bmN0aW9uIChjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwcmVmaXggPT09ICcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJlZml4ID0gZ2V0UHJlZml4KGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByZWZpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRleHRbcHJlZml4XSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGNvbnRleHQgaGFzIGltYWdlIHNtb290aGluZyBlbmFibGVkLCBvdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgLlxyXG4gICAgICogUmV0dXJucyBudWxsIGlmIG5vIHNtb290aGluZyBwcmVmaXggaXMgYXZhaWxhYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nLmlzRW5hYmxlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/Ym9vbGVhbn0gYHRydWVgIGlmIHNtb290aGluZyBpcyBlbmFibGVkIG9uIHRoZSBjb250ZXh0LCBvdGhlcndpc2UgYGZhbHNlYC4gYG51bGxgIGlmIG5vdCBzdXBwb3J0ZWQuXHJcbiAgICAgKi9cclxuICAgIHZhciBpc0VuYWJsZWQgPSBmdW5jdGlvbiAoY29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHByZWZpeCAhPT0gbnVsbCkgPyBjb250ZXh0W3ByZWZpeF0gOiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRpc2FibGU6IGRpc2FibGUsXHJcbiAgICAgICAgZW5hYmxlOiBlbmFibGUsXHJcbiAgICAgICAgZ2V0UHJlZml4OiBnZXRQcmVmaXgsXHJcbiAgICAgICAgaXNFbmFibGVkOiBpc0VuYWJsZWRcclxuICAgIH07XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbW9vdGhpbmcoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/Smoothing.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/TouchAction.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/TouchAction.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the touch-action property on the canvas style. Can be used to disable default browser touch actions.\r\n *\r\n * @function Phaser.Display.Canvas.TouchAction\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The canvas element to have the style applied to.\r\n * @param {string} [value='none'] - The touch action value to set on the canvas. Set to `none` to disable touch actions.\r\n *\r\n * @return {HTMLCanvasElement} The canvas element.\r\n */\r\nvar TouchAction = function (canvas, value)\r\n{\r\n    if (value === undefined) { value = 'none'; }\r\n\r\n    canvas.style['msTouchAction'] = value;\r\n    canvas.style['ms-touch-action'] = value;\r\n    canvas.style['touch-action'] = value;\r\n\r\n    return canvas;\r\n};\r\n\r\nmodule.exports = TouchAction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9Ub3VjaEFjdGlvbi5qcz9kNzMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZ0JBQWdCOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY2FudmFzL1RvdWNoQWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgdG91Y2gtYWN0aW9uIHByb3BlcnR5IG9uIHRoZSBjYW52YXMgc3R5bGUuIENhbiBiZSB1c2VkIHRvIGRpc2FibGUgZGVmYXVsdCBicm93c2VyIHRvdWNoIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuVG91Y2hBY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBjYW52YXMgZWxlbWVudCB0byBoYXZlIHRoZSBzdHlsZSBhcHBsaWVkIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPSdub25lJ10gLSBUaGUgdG91Y2ggYWN0aW9uIHZhbHVlIHRvIHNldCBvbiB0aGUgY2FudmFzLiBTZXQgdG8gYG5vbmVgIHRvIGRpc2FibGUgdG91Y2ggYWN0aW9ucy5cclxuICpcclxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBjYW52YXMgZWxlbWVudC5cclxuICovXHJcbnZhciBUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIChjYW52YXMsIHZhbHVlKVxyXG57XHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9ICdub25lJzsgfVxyXG5cclxuICAgIGNhbnZhcy5zdHlsZVsnbXNUb3VjaEFjdGlvbiddID0gdmFsdWU7XHJcbiAgICBjYW52YXMuc3R5bGVbJ21zLXRvdWNoLWFjdGlvbiddID0gdmFsdWU7XHJcbiAgICBjYW52YXMuc3R5bGVbJ3RvdWNoLWFjdGlvbiddID0gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG91Y2hBY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/TouchAction.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/UserSelect.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/UserSelect.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the user-select property on the canvas style. Can be used to disable default browser selection actions.\r\n *\r\n * @function Phaser.Display.Canvas.UserSelect\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The canvas element to have the style applied to.\r\n * @param {string} [value='none'] - The touch callout value to set on the canvas. Set to `none` to disable touch callouts.\r\n *\r\n * @return {HTMLCanvasElement} The canvas element.\r\n */\r\nvar UserSelect = function (canvas, value)\r\n{\r\n    if (value === undefined) { value = 'none'; }\r\n\r\n    var vendors = [\r\n        '-webkit-',\r\n        '-khtml-',\r\n        '-moz-',\r\n        '-ms-',\r\n        ''\r\n    ];\r\n\r\n    vendors.forEach(function (vendor)\r\n    {\r\n        canvas.style[vendor + 'user-select'] = value;\r\n    });\r\n\r\n    canvas.style['-webkit-touch-callout'] = value;\r\n    canvas.style['-webkit-tap-highlight-color'] = 'rgba(0, 0, 0, 0)';\r\n\r\n    return canvas;\r\n};\r\n\r\nmodule.exports = UserSelect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9Vc2VyU2VsZWN0LmpzPzA5ZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixnQkFBZ0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jYW52YXMvVXNlclNlbGVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHVzZXItc2VsZWN0IHByb3BlcnR5IG9uIHRoZSBjYW52YXMgc3R5bGUuIENhbiBiZSB1c2VkIHRvIGRpc2FibGUgZGVmYXVsdCBicm93c2VyIHNlbGVjdGlvbiBhY3Rpb25zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLlVzZXJTZWxlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBjYW52YXMgZWxlbWVudCB0byBoYXZlIHRoZSBzdHlsZSBhcHBsaWVkIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPSdub25lJ10gLSBUaGUgdG91Y2ggY2FsbG91dCB2YWx1ZSB0byBzZXQgb24gdGhlIGNhbnZhcy4gU2V0IHRvIGBub25lYCB0byBkaXNhYmxlIHRvdWNoIGNhbGxvdXRzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcyBlbGVtZW50LlxyXG4gKi9cclxudmFyIFVzZXJTZWxlY3QgPSBmdW5jdGlvbiAoY2FudmFzLCB2YWx1ZSlcclxue1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAnbm9uZSc7IH1cclxuXHJcbiAgICB2YXIgdmVuZG9ycyA9IFtcclxuICAgICAgICAnLXdlYmtpdC0nLFxyXG4gICAgICAgICcta2h0bWwtJyxcclxuICAgICAgICAnLW1vei0nLFxyXG4gICAgICAgICctbXMtJyxcclxuICAgICAgICAnJ1xyXG4gICAgXTtcclxuXHJcbiAgICB2ZW5kb3JzLmZvckVhY2goZnVuY3Rpb24gKHZlbmRvcilcclxuICAgIHtcclxuICAgICAgICBjYW52YXMuc3R5bGVbdmVuZG9yICsgJ3VzZXItc2VsZWN0J10gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5zdHlsZVsnLXdlYmtpdC10b3VjaC1jYWxsb3V0J10gPSB2YWx1ZTtcclxuICAgIGNhbnZhcy5zdHlsZVsnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJ10gPSAncmdiYSgwLCAwLCAwLCAwKSc7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVXNlclNlbGVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/UserSelect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/canvas/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/display/canvas/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CanvasInterpolation: __webpack_require__(/*! ./CanvasInterpolation */ \"./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\"),\r\n    CanvasPool: __webpack_require__(/*! ./CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\"),\r\n    Smoothing: __webpack_require__(/*! ./Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\"),\r\n    TouchAction: __webpack_require__(/*! ./TouchAction */ \"./node_modules/phaser/src/display/canvas/TouchAction.js\"),\r\n    UserSelect: __webpack_require__(/*! ./UserSelect */ \"./node_modules/phaser/src/display/canvas/UserSelect.js\")\r\n    \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9pbmRleC5qcz85ZTM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsOEZBQXVCO0FBQ3hELGdCQUFnQixtQkFBTyxDQUFDLDRFQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQywwRUFBYTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw4RUFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYzs7QUFFdEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ2FudmFzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ2FudmFzSW50ZXJwb2xhdGlvbjogcmVxdWlyZSgnLi9DYW52YXNJbnRlcnBvbGF0aW9uJyksXHJcbiAgICBDYW52YXNQb29sOiByZXF1aXJlKCcuL0NhbnZhc1Bvb2wnKSxcclxuICAgIFNtb290aGluZzogcmVxdWlyZSgnLi9TbW9vdGhpbmcnKSxcclxuICAgIFRvdWNoQWN0aW9uOiByZXF1aXJlKCcuL1RvdWNoQWN0aW9uJyksXHJcbiAgICBVc2VyU2VsZWN0OiByZXF1aXJlKCcuL1VzZXJTZWxlY3QnKVxyXG4gICAgXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/Color.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/display/color/Color.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\nvar GetColor32 = __webpack_require__(/*! ./GetColor32 */ \"./node_modules/phaser/src/display/color/GetColor32.js\");\r\nvar HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\nvar RGBToHSV = __webpack_require__(/*! ./RGBToHSV */ \"./node_modules/phaser/src/display/color/RGBToHSV.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Color\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The Color class holds a single color value and allows for easy modification and reading of it.\r\n *\r\n * @class Color\r\n * @memberof Phaser.Display\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [red=0] - The red color value. A number between 0 and 255.\r\n * @param {integer} [green=0] - The green color value. A number between 0 and 255.\r\n * @param {integer} [blue=0] - The blue color value. A number between 0 and 255.\r\n * @param {integer} [alpha=255] - The alpha value. A number between 0 and 255.\r\n */\r\nvar Color = new Class({\r\n\r\n    initialize:\r\n\r\n    function Color (red, green, blue, alpha)\r\n    {\r\n        if (red === undefined) { red = 0; }\r\n        if (green === undefined) { green = 0; }\r\n        if (blue === undefined) { blue = 0; }\r\n        if (alpha === undefined) { alpha = 255; }\r\n\r\n        /**\r\n         * The internal red color value.\r\n         *\r\n         * @name Phaser.Display.Color#r\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.r = 0;\r\n\r\n        /**\r\n         * The internal green color value.\r\n         *\r\n         * @name Phaser.Display.Color#g\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.g = 0;\r\n\r\n        /**\r\n         * The internal blue color value.\r\n         *\r\n         * @name Phaser.Display.Color#b\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.b = 0;\r\n\r\n        /**\r\n         * The internal alpha color value.\r\n         *\r\n         * @name Phaser.Display.Color#a\r\n         * @type {number}\r\n         * @private\r\n         * @default 255\r\n         * @since 3.0.0\r\n         */\r\n        this.a = 255;\r\n\r\n        /**\r\n         * The hue color value. A number between 0 and 1.\r\n         * This is the base color.\r\n         *\r\n         * @name Phaser.Display.Color#_h\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._h = 0;\r\n\r\n        /**\r\n         * The saturation color value. A number between 0 and 1.\r\n         * This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n         *\r\n         * @name Phaser.Display.Color#_s\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._s = 0;\r\n\r\n        /**\r\n         * The lightness color value. A number between 0 and 1.\r\n         * This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n         *\r\n         * @name Phaser.Display.Color#_v\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._v = 0;\r\n\r\n        /**\r\n         * Is this color update locked?\r\n         *\r\n         * @name Phaser.Display.Color#_locked\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._locked = false;\r\n\r\n        /**\r\n         * An array containing the calculated color values for WebGL use.\r\n         *\r\n         * @name Phaser.Display.Color#gl\r\n         * @type {number[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.gl = [ 0, 0, 0, 1 ];\r\n\r\n        /**\r\n         * Pre-calculated internal color value.\r\n         *\r\n         * @name Phaser.Display.Color#_color\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._color = 0;\r\n\r\n        /**\r\n         * Pre-calculated internal color32 value.\r\n         *\r\n         * @name Phaser.Display.Color#_color32\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._color32 = 0;\r\n\r\n        /**\r\n         * Pre-calculated internal color rgb string value.\r\n         *\r\n         * @name Phaser.Display.Color#_rgba\r\n         * @type {string}\r\n         * @private\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this._rgba = '';\r\n\r\n        this.setTo(red, green, blue, alpha);\r\n    },\r\n\r\n    /**\r\n     * Sets this color to be transparent. Sets all values to zero.\r\n     *\r\n     * @method Phaser.Display.Color#transparent\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    transparent: function ()\r\n    {\r\n        this._locked = true;\r\n\r\n        this.red = 0;\r\n        this.green = 0;\r\n        this.blue = 0;\r\n        this.alpha = 0;\r\n\r\n        this._locked = false;\r\n\r\n        return this.update(true);\r\n    },\r\n\r\n    /**\r\n     * Sets the color of this Color component.\r\n     *\r\n     * @method Phaser.Display.Color#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} red - The red color value. A number between 0 and 255.\r\n     * @param {integer} green - The green color value. A number between 0 and 255.\r\n     * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n     * @param {integer} [alpha=255] - The alpha value. A number between 0 and 255.\r\n     * @param {boolean} [updateHSV=true] - Update the HSV values after setting the RGB values?\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    setTo: function (red, green, blue, alpha, updateHSV)\r\n    {\r\n        if (alpha === undefined) { alpha = 255; }\r\n        if (updateHSV === undefined) { updateHSV = true; }\r\n\r\n        this._locked = true;\r\n\r\n        this.red = red;\r\n        this.green = green;\r\n        this.blue = blue;\r\n        this.alpha = alpha;\r\n\r\n        this._locked = false;\r\n\r\n        return this.update(updateHSV);\r\n    },\r\n\r\n    /**\r\n     * Sets the red, green, blue and alpha GL values of this Color component.\r\n     *\r\n     * @method Phaser.Display.Color#setGLTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} red - The red color value. A number between 0 and 1.\r\n     * @param {number} green - The green color value. A number between 0 and 1.\r\n     * @param {number} blue - The blue color value. A number between 0 and 1.\r\n     * @param {number} [alpha=1] - The alpha value. A number between 0 and 1.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    setGLTo: function (red, green, blue, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        this._locked = true;\r\n\r\n        this.redGL = red;\r\n        this.greenGL = green;\r\n        this.blueGL = blue;\r\n        this.alphaGL = alpha;\r\n\r\n        this._locked = false;\r\n\r\n        return this.update(true);\r\n    },\r\n\r\n    /**\r\n     * Sets the color based on the color object given.\r\n     *\r\n     * @method Phaser.Display.Color#setFromRGB\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Display.InputColorObject} color - An object containing `r`, `g`, `b` and optionally `a` values in the range 0 to 255.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    setFromRGB: function (color)\r\n    {\r\n        this._locked = true;\r\n\r\n        this.red = color.r;\r\n        this.green = color.g;\r\n        this.blue = color.b;\r\n\r\n        if (color.hasOwnProperty('a'))\r\n        {\r\n            this.alpha = color.a;\r\n        }\r\n\r\n        this._locked = false;\r\n\r\n        return this.update(true);\r\n    },\r\n\r\n    /**\r\n     * Sets the color based on the hue, saturation and lightness values given.\r\n     *\r\n     * @method Phaser.Display.Color#setFromHSV\r\n     * @since 3.13.0\r\n     *\r\n     * @param {number} h - The hue, in the range 0 - 1. This is the base color.\r\n     * @param {number} s - The saturation, in the range 0 - 1. This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n     * @param {number} v - The value, in the range 0 - 1. This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    setFromHSV: function (h, s, v)\r\n    {\r\n        return HSVToRGB(h, s, v, this);\r\n    },\r\n\r\n    /**\r\n     * Updates the internal cache values.\r\n     *\r\n     * @method Phaser.Display.Color#update\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    update: function (updateHSV)\r\n    {\r\n        if (updateHSV === undefined) { updateHSV = false; }\r\n\r\n        if (this._locked)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var r = this.r;\r\n        var g = this.g;\r\n        var b = this.b;\r\n        var a = this.a;\r\n\r\n        this._color = GetColor(r, g, b);\r\n        this._color32 = GetColor32(r, g, b, a);\r\n        this._rgba = 'rgba(' + r + ',' + g + ',' + b + ',' + (a / 255) + ')';\r\n\r\n        if (updateHSV)\r\n        {\r\n            RGBToHSV(r, g, b, this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the internal hsv cache values.\r\n     *\r\n     * @method Phaser.Display.Color#updateHSV\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    updateHSV: function ()\r\n    {\r\n        var r = this.r;\r\n        var g = this.g;\r\n        var b = this.b;\r\n\r\n        RGBToHSV(r, g, b, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a new Color component using the values from this one.\r\n     *\r\n     * @method Phaser.Display.Color#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Display.Color} A new Color object.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Color(this.r, this.g, this.b, this.a);\r\n    },\r\n\r\n    /**\r\n     * Sets this Color object to be grayscaled based on the shade value given.\r\n     *\r\n     * @method Phaser.Display.Color#gray\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} shade - A value between 0 and 255.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    gray: function (shade)\r\n    {\r\n        return this.setTo(shade, shade, shade);\r\n    },\r\n\r\n    /**\r\n     * Sets this Color object to be a random color between the `min` and `max` values given.\r\n     *\r\n     * @method Phaser.Display.Color#random\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} [min=0] - The minimum random color value. Between 0 and 255.\r\n     * @param {integer} [max=255] - The maximum random color value. Between 0 and 255.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    random: function (min, max)\r\n    {\r\n        if (min === undefined) { min = 0; }\r\n        if (max === undefined) { max = 255; }\r\n\r\n        var r = Math.floor(min + Math.random() * (max - min));\r\n        var g = Math.floor(min + Math.random() * (max - min));\r\n        var b = Math.floor(min + Math.random() * (max - min));\r\n\r\n        return this.setTo(r, g, b);\r\n    },\r\n\r\n    /**\r\n     * Sets this Color object to be a random grayscale color between the `min` and `max` values given.\r\n     *\r\n     * @method Phaser.Display.Color#randomGray\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} [min=0] - The minimum random color value. Between 0 and 255.\r\n     * @param {integer} [max=255] - The maximum random color value. Between 0 and 255.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    randomGray: function (min, max)\r\n    {\r\n        if (min === undefined) { min = 0; }\r\n        if (max === undefined) { max = 255; }\r\n\r\n        var s = Math.floor(min + Math.random() * (max - min));\r\n\r\n        return this.setTo(s, s, s);\r\n    },\r\n\r\n    /**\r\n     * Increase the saturation of this Color by the percentage amount given.\r\n     * The saturation is the amount of the base color in the hue.\r\n     *\r\n     * @method Phaser.Display.Color#saturate\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    saturate: function (amount)\r\n    {\r\n        this.s += amount / 100;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Decrease the saturation of this Color by the percentage amount given.\r\n     * The saturation is the amount of the base color in the hue.\r\n     *\r\n     * @method Phaser.Display.Color#desaturate\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    desaturate: function (amount)\r\n    {\r\n        this.s -= amount / 100;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Increase the lightness of this Color by the percentage amount given.\r\n     *\r\n     * @method Phaser.Display.Color#lighten\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    lighten: function (amount)\r\n    {\r\n        this.v += amount / 100;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Decrease the lightness of this Color by the percentage amount given.\r\n     *\r\n     * @method Phaser.Display.Color#darken\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    darken: function (amount)\r\n    {\r\n        this.v -= amount / 100;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Brighten this Color by the percentage amount given.\r\n     *\r\n     * @method Phaser.Display.Color#brighten\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n     *\r\n     * @return {Phaser.Display.Color} This Color object.\r\n     */\r\n    brighten: function (amount)\r\n    {\r\n        var r = this.r;\r\n        var g = this.g;\r\n        var b = this.b;\r\n\r\n        r = Math.max(0, Math.min(255, r - Math.round(255 * - (amount / 100))));\r\n        g = Math.max(0, Math.min(255, g - Math.round(255 * - (amount / 100))));\r\n        b = Math.max(0, Math.min(255, b - Math.round(255 * - (amount / 100))));\r\n\r\n        return this.setTo(r, g, b);\r\n    },\r\n\r\n    /**\r\n     * The color of this Color component, not including the alpha channel.\r\n     *\r\n     * @name Phaser.Display.Color#color\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    color: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._color;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The color of this Color component, including the alpha channel.\r\n     *\r\n     * @name Phaser.Display.Color#color32\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    color32: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._color32;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The color of this Color component as a string which can be used in CSS color values.\r\n     *\r\n     * @name Phaser.Display.Color#rgba\r\n     * @type {string}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    rgba: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._rgba;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The red color value, normalized to the range 0 to 1.\r\n     *\r\n     * @name Phaser.Display.Color#redGL\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    redGL: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gl[0];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.gl[0] = Math.min(Math.abs(value), 1);\r\n\r\n            this.r = Math.floor(this.gl[0] * 255);\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The green color value, normalized to the range 0 to 1.\r\n     *\r\n     * @name Phaser.Display.Color#greenGL\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    greenGL: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gl[1];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.gl[1] = Math.min(Math.abs(value), 1);\r\n\r\n            this.g = Math.floor(this.gl[1] * 255);\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The blue color value, normalized to the range 0 to 1.\r\n     *\r\n     * @name Phaser.Display.Color#blueGL\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    blueGL: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gl[2];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.gl[2] = Math.min(Math.abs(value), 1);\r\n\r\n            this.b = Math.floor(this.gl[2] * 255);\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha color value, normalized to the range 0 to 1.\r\n     *\r\n     * @name Phaser.Display.Color#alphaGL\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    alphaGL: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gl[3];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.gl[3] = Math.min(Math.abs(value), 1);\r\n\r\n            this.a = Math.floor(this.gl[3] * 255);\r\n\r\n            this.update();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The red color value, normalized to the range 0 to 255.\r\n     *\r\n     * @name Phaser.Display.Color#red\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    red: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.r;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            value = Math.floor(Math.abs(value));\r\n\r\n            this.r = Math.min(value, 255);\r\n\r\n            this.gl[0] = value / 255;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The green color value, normalized to the range 0 to 255.\r\n     *\r\n     * @name Phaser.Display.Color#green\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    green: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.g;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            value = Math.floor(Math.abs(value));\r\n\r\n            this.g = Math.min(value, 255);\r\n\r\n            this.gl[1] = value / 255;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The blue color value, normalized to the range 0 to 255.\r\n     *\r\n     * @name Phaser.Display.Color#blue\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    blue: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.b;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            value = Math.floor(Math.abs(value));\r\n\r\n            this.b = Math.min(value, 255);\r\n\r\n            this.gl[2] = value / 255;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha color value, normalized to the range 0 to 255.\r\n     *\r\n     * @name Phaser.Display.Color#alpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    alpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.a;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            value = Math.floor(Math.abs(value));\r\n\r\n            this.a = Math.min(value, 255);\r\n\r\n            this.gl[3] = value / 255;\r\n\r\n            this.update();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The hue color value. A number between 0 and 1.\r\n     * This is the base color.\r\n     *\r\n     * @name Phaser.Display.Color#h\r\n     * @type {number}\r\n     * @since 3.13.0\r\n     */\r\n    h: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._h;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._h = value;\r\n\r\n            HSVToRGB(value, this._s, this._v, this);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The saturation color value. A number between 0 and 1.\r\n     * This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n     *\r\n     * @name Phaser.Display.Color#s\r\n     * @type {number}\r\n     * @since 3.13.0\r\n     */\r\n    s: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._s;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._s = value;\r\n\r\n            HSVToRGB(this._h, value, this._v, this);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The lightness color value. A number between 0 and 1.\r\n     * This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n     *\r\n     * @name Phaser.Display.Color#v\r\n     * @type {number}\r\n     * @since 3.13.0\r\n     */\r\n    v: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._v;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._v = value;\r\n\r\n            HSVToRGB(this._h, this._s, value, this);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Color;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yLmpzPzM4NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVFQUFZO0FBQ25DLGlCQUFpQixtQkFBTyxDQUFDLDJFQUFjO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxlQUFlLG1CQUFPLENBQUMsdUVBQVk7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsa0NBQWtDLFdBQVc7QUFDN0MsaUNBQWlDLFVBQVU7QUFDM0Msa0NBQWtDLGFBQWE7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQyxzQ0FBc0Msa0JBQWtCOztBQUV4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JEO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsZ0NBQWdDLFdBQVc7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsZ0NBQWdDLFdBQVc7O0FBRTNDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0Q29sb3IgPSByZXF1aXJlKCcuL0dldENvbG9yJyk7XHJcbnZhciBHZXRDb2xvcjMyID0gcmVxdWlyZSgnLi9HZXRDb2xvcjMyJyk7XHJcbnZhciBIU1ZUb1JHQiA9IHJlcXVpcmUoJy4vSFNWVG9SR0InKTtcclxudmFyIFJHQlRvSFNWID0gcmVxdWlyZSgnLi9SR0JUb0hTVicpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ29sb3JcclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQ29sb3IgY2xhc3MgaG9sZHMgYSBzaW5nbGUgY29sb3IgdmFsdWUgYW5kIGFsbG93cyBmb3IgZWFzeSBtb2RpZmljYXRpb24gYW5kIHJlYWRpbmcgb2YgaXQuXHJcbiAqXHJcbiAqIEBjbGFzcyBDb2xvclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkRpc3BsYXlcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTBdIC0gVGhlIGJsdWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbHBoYT0yNTVdIC0gVGhlIGFscGhhIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICovXHJcbnZhciBDb2xvciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDb2xvciAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlZCA9PT0gdW5kZWZpbmVkKSB7IHJlZCA9IDA7IH1cclxuICAgICAgICBpZiAoZ3JlZW4gPT09IHVuZGVmaW5lZCkgeyBncmVlbiA9IDA7IH1cclxuICAgICAgICBpZiAoYmx1ZSA9PT0gdW5kZWZpbmVkKSB7IGJsdWUgPSAwOyB9XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAyNTU7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIHJlZCBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuciA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBncmVlbiBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2dcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBibHVlIGNvbG9yIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGFscGhhIGNvbG9yIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAyNTVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmEgPSAyNTU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBodWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKiBUaGlzIGlzIHRoZSBiYXNlIGNvbG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9oID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNhdHVyYXRpb24gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNfc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGlnaHRuZXNzIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICogVGhpcyBjb250cm9scyBob3cgZGFyayB0aGUgY29sb3IgaXMuIFdoZXJlIDEgaXMgYXMgYnJpZ2h0IGFzIHBvc3NpYmxlIGFuZCAwIGlzIGJsYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX3ZcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBjb2xvciB1cGRhdGUgbG9ja2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2xvY2tlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjYWxjdWxhdGVkIGNvbG9yIHZhbHVlcyBmb3IgV2ViR0wgdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbCA9IFsgMCwgMCwgMCwgMSBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI19jb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY29sb3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvcjMyIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2NvbG9yMzJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvbG9yMzIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvciByZ2Igc3RyaW5nIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX3JnYmFcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZ2JhID0gJyc7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG8ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBjb2xvciB0byBiZSB0cmFuc3BhcmVudC4gU2V0cyBhbGwgdmFsdWVzIHRvIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN0cmFuc3BhcmVudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB0cmFuc3BhcmVudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5ncmVlbiA9IDA7XHJcbiAgICAgICAgdGhpcy5ibHVlID0gMDtcclxuICAgICAgICB0aGlzLmFscGhhID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGlzIENvbG9yIGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthbHBoYT0yNTVdIC0gVGhlIGFscGhhIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZUhTVj10cnVlXSAtIFVwZGF0ZSB0aGUgSFNWIHZhbHVlcyBhZnRlciBzZXR0aW5nIHRoZSBSR0IgdmFsdWVzP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG86IGZ1bmN0aW9uIChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgdXBkYXRlSFNWKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMjU1OyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZUhTViA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZUhTViA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWQgPSByZWQ7XHJcbiAgICAgICAgdGhpcy5ncmVlbiA9IGdyZWVuO1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IGJsdWU7XHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHVwZGF0ZUhTVik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmVkLCBncmVlbiwgYmx1ZSBhbmQgYWxwaGEgR0wgdmFsdWVzIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc2V0R0xUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYT0xXSAtIFRoZSBhbHBoYSB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0R0xUbzogZnVuY3Rpb24gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlZEdMID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW5HTCA9IGdyZWVuO1xyXG4gICAgICAgIHRoaXMuYmx1ZUdMID0gYmx1ZTtcclxuICAgICAgICB0aGlzLmFscGhhR0wgPSBhbHBoYTtcclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBiYXNlZCBvbiB0aGUgY29sb3Igb2JqZWN0IGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc2V0RnJvbVJHQlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5JbnB1dENvbG9yT2JqZWN0fSBjb2xvciAtIEFuIG9iamVjdCBjb250YWluaW5nIGByYCwgYGdgLCBgYmAgYW5kIG9wdGlvbmFsbHkgYGFgIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUkdCOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWQgPSBjb2xvci5yO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBjb2xvci5nO1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IGNvbG9yLmI7XHJcblxyXG4gICAgICAgIGlmIChjb2xvci5oYXNPd25Qcm9wZXJ0eSgnYScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9IGNvbG9yLmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbG9yIGJhc2VkIG9uIHRoZSBodWUsIHNhdHVyYXRpb24gYW5kIGxpZ2h0bmVzcyB2YWx1ZXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNzZXRGcm9tSFNWXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGggLSBUaGUgaHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgaXMgdGhlIGJhc2UgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcyAtIFRoZSBzYXR1cmF0aW9uLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IG11Y2ggb2YgdGhlIGh1ZSB3aWxsIGJlIGluIHRoZSBmaW5hbCBjb2xvciwgd2hlcmUgMSBpcyBmdWxseSBzYXR1cmF0ZWQgYW5kIDAgd2lsbCBnaXZlIHlvdSB3aGl0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZyb21IU1Y6IGZ1bmN0aW9uIChoLCBzLCB2KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBIU1ZUb1JHQihoLCBzLCB2LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjYWNoZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN1cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHVwZGF0ZUhTVilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlSFNWID09PSB1bmRlZmluZWQpIHsgdXBkYXRlSFNWID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLnI7XHJcbiAgICAgICAgdmFyIGcgPSB0aGlzLmc7XHJcbiAgICAgICAgdmFyIGIgPSB0aGlzLmI7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLmE7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbG9yID0gR2V0Q29sb3IociwgZywgYik7XHJcbiAgICAgICAgdGhpcy5fY29sb3IzMiA9IEdldENvbG9yMzIociwgZywgYiwgYSk7XHJcbiAgICAgICAgdGhpcy5fcmdiYSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyAoYSAvIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVIU1YpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSR0JUb0hTVihyLCBnLCBiLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGhzdiBjYWNoZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN1cGRhdGVIU1ZcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVIU1Y6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLnI7XHJcbiAgICAgICAgdmFyIGcgPSB0aGlzLmc7XHJcbiAgICAgICAgdmFyIGIgPSB0aGlzLmI7XHJcblxyXG4gICAgICAgIFJHQlRvSFNWKHIsIGcsIGIsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IENvbG9yIGNvbXBvbmVudCB1c2luZyB0aGUgdmFsdWVzIGZyb20gdGhpcyBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNjbG9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IEEgbmV3IENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcih0aGlzLnIsIHRoaXMuZywgdGhpcy5iLCB0aGlzLmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBDb2xvciBvYmplY3QgdG8gYmUgZ3JheXNjYWxlZCBiYXNlZCBvbiB0aGUgc2hhZGUgdmFsdWUgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNncmF5XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc2hhZGUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ3JheTogZnVuY3Rpb24gKHNoYWRlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFRvKHNoYWRlLCBzaGFkZSwgc2hhZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBDb2xvciBvYmplY3QgdG8gYmUgYSByYW5kb20gY29sb3IgYmV0d2VlbiB0aGUgYG1pbmAgYW5kIGBtYXhgIHZhbHVlcyBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI3JhbmRvbVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW49MF0gLSBUaGUgbWluaW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWF4PTI1NV0gLSBUaGUgbWF4aW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAobWluLCBtYXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7IG1pbiA9IDA7IH1cclxuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMjU1OyB9XHJcblxyXG4gICAgICAgIHZhciByID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG4gICAgICAgIHZhciBnID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG4gICAgICAgIHZhciBiID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRUbyhyLCBnLCBiKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgQ29sb3Igb2JqZWN0IHRvIGJlIGEgcmFuZG9tIGdyYXlzY2FsZSBjb2xvciBiZXR3ZWVuIHRoZSBgbWluYCBhbmQgYG1heGAgdmFsdWVzIGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3IjcmFuZG9tR3JheVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW49MF0gLSBUaGUgbWluaW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWF4PTI1NV0gLSBUaGUgbWF4aW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmFuZG9tR3JheTogZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkgeyBtaW4gPSAwOyB9XHJcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7IG1heCA9IDI1NTsgfVxyXG5cclxuICAgICAgICB2YXIgcyA9IE1hdGguZmxvb3IobWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8ocywgcywgcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5jcmVhc2UgdGhlIHNhdHVyYXRpb24gb2YgdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKiBUaGUgc2F0dXJhdGlvbiBpcyB0aGUgYW1vdW50IG9mIHRoZSBiYXNlIGNvbG9yIGluIHRoZSBodWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNzYXR1cmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNhdHVyYXRlOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucyArPSBhbW91bnQgLyAxMDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY3JlYXNlIHRoZSBzYXR1cmF0aW9uIG9mIHRoaXMgQ29sb3IgYnkgdGhlIHBlcmNlbnRhZ2UgYW1vdW50IGdpdmVuLlxyXG4gICAgICogVGhlIHNhdHVyYXRpb24gaXMgdGhlIGFtb3VudCBvZiB0aGUgYmFzZSBjb2xvciBpbiB0aGUgaHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZGVzYXR1cmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRlc2F0dXJhdGU6IGZ1bmN0aW9uIChhbW91bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zIC09IGFtb3VudCAvIDEwMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5jcmVhc2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGlzIENvbG9yIGJ5IHRoZSBwZXJjZW50YWdlIGFtb3VudCBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI2xpZ2h0ZW5cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBhbW91bnQgLSBUaGUgcGVyY2VudGFnZSBhbW91bnQgdG8gY2hhbmdlIHRoaXMgY29sb3IgYnkuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaWdodGVuOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudiArPSBhbW91bnQgLyAxMDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY3JlYXNlIHRoZSBsaWdodG5lc3Mgb2YgdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNkYXJrZW5cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBhbW91bnQgLSBUaGUgcGVyY2VudGFnZSBhbW91bnQgdG8gY2hhbmdlIHRoaXMgY29sb3IgYnkuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBkYXJrZW46IGZ1bmN0aW9uIChhbW91bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52IC09IGFtb3VudCAvIDEwMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJpZ2h0ZW4gdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNicmlnaHRlblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGJyaWdodGVuOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciByID0gdGhpcy5yO1xyXG4gICAgICAgIHZhciBnID0gdGhpcy5nO1xyXG4gICAgICAgIHZhciBiID0gdGhpcy5iO1xyXG5cclxuICAgICAgICByID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCByIC0gTWF0aC5yb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xyXG4gICAgICAgIGcgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIGcgLSBNYXRoLnJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XHJcbiAgICAgICAgYiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgYiAtIE1hdGgucm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8ociwgZywgYik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LCBub3QgaW5jbHVkaW5nIHRoZSBhbHBoYSBjaGFubmVsLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2NvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGFscGhhIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjY29sb3IzMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNvbG9yMzI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yMzI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sb3Igb2YgdGhpcyBDb2xvciBjb21wb25lbnQgYXMgYSBzdHJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgaW4gQ1NTIGNvbG9yIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZ2JhXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmdiYToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmdiYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByZWQgY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZWRHTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZWRHTDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nbFswXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xbMF0gPSBNYXRoLm1pbihNYXRoLmFicyh2YWx1ZSksIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5mbG9vcih0aGlzLmdsWzBdICogMjU1KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyZWVuIGNvbG9yIHZhbHVlLCBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZ3JlZW5HTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBncmVlbkdMOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdsWzFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nbFsxXSA9IE1hdGgubWluKE1hdGguYWJzKHZhbHVlKSwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmcgPSBNYXRoLmZsb29yKHRoaXMuZ2xbMV0gKiAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmx1ZSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2JsdWVHTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibHVlR0w6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2xbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdsWzJdID0gTWF0aC5taW4oTWF0aC5hYnModmFsdWUpLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYiA9IE1hdGguZmxvb3IodGhpcy5nbFsyXSAqIDI1NSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbHBoYSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2FscGhhR0xcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGFHTDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nbFszXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xbM10gPSBNYXRoLm1pbihNYXRoLmFicyh2YWx1ZSksIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hID0gTWF0aC5mbG9vcih0aGlzLmdsWzNdICogMjU1KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcmVkIGNvbG9yIHZhbHVlLCBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDI1NS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZWRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFswXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JlZW4gY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2dyZWVuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGdyZWVuOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZyA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFsxXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmx1ZSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAyNTUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYmx1ZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibHVlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFsyXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2FscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmE7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYSA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFszXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBodWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGJhc2UgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjaFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgaDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIEhTVlRvUkdCKHZhbHVlLCB0aGlzLl9zLCB0aGlzLl92LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzYXR1cmF0aW9uIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgczoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3MgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIEhTVlRvUkdCKHRoaXMuX2gsIHZhbHVlLCB0aGlzLl92LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsaWdodG5lc3MgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciN2XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICB2OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgSFNWVG9SR0IodGhpcy5faCwgdGhpcy5fcywgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/Color.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/ColorToRGBA.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/ColorToRGBA.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts the given color value into an Object containing r,g,b and a properties.\r\n *\r\n * @function Phaser.Display.Color.ColorToRGBA\r\n * @since 3.0.0\r\n *\r\n * @param {number} color - A color value, optionally including the alpha value.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the parsed color values.\r\n */\r\nvar ColorToRGBA = function (color)\r\n{\r\n    var output = {\r\n        r: color >> 16 & 0xFF,\r\n        g: color >> 8 & 0xFF,\r\n        b: color & 0xFF,\r\n        a: 255\r\n    };\r\n\r\n    if (color > 16777215)\r\n    {\r\n        output.a = color >>> 24;\r\n    }\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = ColorToRGBA;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yVG9SR0JBLmpzP2RmMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9Db2xvclRvUkdCQS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBjb2xvciB2YWx1ZSBpbnRvIGFuIE9iamVjdCBjb250YWluaW5nIHIsZyxiIGFuZCBhIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5Db2xvclRvUkdCQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yIC0gQSBjb2xvciB2YWx1ZSwgb3B0aW9uYWxseSBpbmNsdWRpbmcgdGhlIGFscGhhIHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgQ29sb3JUb1JHQkEgPSBmdW5jdGlvbiAoY29sb3IpXHJcbntcclxuICAgIHZhciBvdXRwdXQgPSB7XHJcbiAgICAgICAgcjogY29sb3IgPj4gMTYgJiAweEZGLFxyXG4gICAgICAgIGc6IGNvbG9yID4+IDggJiAweEZGLFxyXG4gICAgICAgIGI6IGNvbG9yICYgMHhGRixcclxuICAgICAgICBhOiAyNTVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvbG9yID4gMTY3NzcyMTUpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LmEgPSBjb2xvciA+Pj4gMjQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JUb1JHQkE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ColorToRGBA.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/ComponentToHex.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/ComponentToHex.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns a string containing a hex representation of the given color component.\r\n *\r\n * @function Phaser.Display.Color.ComponentToHex\r\n * @since 3.0.0\r\n *\r\n * @param {integer} color - The color channel to get the hex value for, must be a value between 0 and 255.\r\n *\r\n * @return {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64.\r\n */\r\nvar ComponentToHex = function (color)\r\n{\r\n    var hex = color.toString(16);\r\n\r\n    return (hex.length === 1) ? '0' + hex : hex;\r\n};\r\n\r\nmodule.exports = ComponentToHex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbXBvbmVudFRvSGV4LmpzP2FmZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9Db21wb25lbnRUb0hleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gY29sb3IgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuQ29tcG9uZW50VG9IZXhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gY29sb3IgLSBUaGUgY29sb3IgY2hhbm5lbCB0byBnZXQgdGhlIGhleCB2YWx1ZSBmb3IsIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBBIHN0cmluZyBvZiBsZW5ndGggMiBjaGFyYWN0ZXJzLCBpLmUuIDI1NSA9IGZmLCAxMDAgPSA2NC5cclxuICovXHJcbnZhciBDb21wb25lbnRUb0hleCA9IGZ1bmN0aW9uIChjb2xvcilcclxue1xyXG4gICAgdmFyIGhleCA9IGNvbG9yLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICByZXR1cm4gKGhleC5sZW5ndGggPT09IDEpID8gJzAnICsgaGV4IDogaGV4O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnRUb0hleDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ComponentToHex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/GetColor.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/color/GetColor.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given 3 separate color values this will return an integer representation of it.\r\n *\r\n * @function Phaser.Display.Color.GetColor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} red - The red color value. A number between 0 and 255.\r\n * @param {integer} green - The green color value. A number between 0 and 255.\r\n * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar GetColor = function (red, green, blue)\r\n{\r\n    return red << 16 | green << 8 | blue;\r\n};\r\n\r\nmodule.exports = GetColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yLmpzPzE2N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogR2l2ZW4gMyBzZXBhcmF0ZSBjb2xvciB2YWx1ZXMgdGhpcyB3aWxsIHJldHVybiBhbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGl0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuR2V0Q29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcmVkIC0gVGhlIHJlZCBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZ3JlZW4gLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbWJpbmVkIGNvbG9yIHZhbHVlLlxyXG4gKi9cclxudmFyIEdldENvbG9yID0gZnVuY3Rpb24gKHJlZCwgZ3JlZW4sIGJsdWUpXHJcbntcclxuICAgIHJldHVybiByZWQgPDwgMTYgfCBncmVlbiA8PCA4IHwgYmx1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Q29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/GetColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/GetColor32.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/GetColor32.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given an alpha and 3 color values this will return an integer representation of it.\r\n *\r\n * @function Phaser.Display.Color.GetColor32\r\n * @since 3.0.0\r\n *\r\n * @param {integer} red - The red color value. A number between 0 and 255.\r\n * @param {integer} green - The green color value. A number between 0 and 255.\r\n * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n * @param {integer} alpha - The alpha color value. A number between 0 and 255.\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar GetColor32 = function (red, green, blue, alpha)\r\n{\r\n    return alpha << 24 | red << 16 | green << 8 | blue;\r\n};\r\n\r\nmodule.exports = GetColor32;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yMzIuanM/NTk0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yMzIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBhbHBoYSBhbmQgMyBjb2xvciB2YWx1ZXMgdGhpcyB3aWxsIHJldHVybiBhbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGl0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuR2V0Q29sb3IzMlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSByZWQgLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gYmx1ZSAtIFRoZSBibHVlIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbHBoYSAtIFRoZSBhbHBoYSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbWJpbmVkIGNvbG9yIHZhbHVlLlxyXG4gKi9cclxudmFyIEdldENvbG9yMzIgPSBmdW5jdGlvbiAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpXHJcbntcclxuICAgIHJldHVybiBhbHBoYSA8PCAyNCB8IHJlZCA8PCAxNiB8IGdyZWVuIDw8IDggfCBibHVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRDb2xvcjMyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/GetColor32.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/HSLToColor.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/HSLToColor.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar HueToComponent = __webpack_require__(/*! ./HueToComponent */ \"./node_modules/phaser/src/display/color/HueToComponent.js\");\r\n\r\n/**\r\n * Converts HSL (hue, saturation and lightness) values to a Phaser Color object.\r\n *\r\n * @function Phaser.Display.Color.HSLToColor\r\n * @since 3.0.0\r\n *\r\n * @param {number} h - The hue value in the range 0 to 1.\r\n * @param {number} s - The saturation value in the range 0 to 1.\r\n * @param {number} l - The lightness value in the range 0 to 1.\r\n *\r\n * @return {Phaser.Display.Color} A Color object created from the results of the h, s and l values.\r\n */\r\nvar HSLToColor = function (h, s, l)\r\n{\r\n    // achromatic by default\r\n    var r = l;\r\n    var g = l;\r\n    var b = l;\r\n\r\n    if (s !== 0)\r\n    {\r\n        var q = (l < 0.5) ? l * (1 + s) : l + s - l * s;\r\n        var p = 2 * l - q;\r\n\r\n        r = HueToComponent(p, q, h + 1 / 3);\r\n        g = HueToComponent(p, q, h);\r\n        b = HueToComponent(p, q, h - 1 / 3);\r\n    }\r\n\r\n    var color = new Color();\r\n\r\n    return color.setGLTo(r, g, b, 1);\r\n};\r\n\r\nmodule.exports = HSLToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTTFRvQ29sb3IuanM/NmM1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTO0FBQzdCLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU0xUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcbnZhciBIdWVUb0NvbXBvbmVudCA9IHJlcXVpcmUoJy4vSHVlVG9Db21wb25lbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBIU0wgKGh1ZSwgc2F0dXJhdGlvbiBhbmQgbGlnaHRuZXNzKSB2YWx1ZXMgdG8gYSBQaGFzZXIgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSFNMVG9Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGggLSBUaGUgaHVlIHZhbHVlIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIC0gVGhlIHNhdHVyYXRpb24gdmFsdWUgaW4gdGhlIHJhbmdlIDAgdG8gMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGwgLSBUaGUgbGlnaHRuZXNzIHZhbHVlIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgdGhlIGgsIHMgYW5kIGwgdmFsdWVzLlxyXG4gKi9cclxudmFyIEhTTFRvQ29sb3IgPSBmdW5jdGlvbiAoaCwgcywgbClcclxue1xyXG4gICAgLy8gYWNocm9tYXRpYyBieSBkZWZhdWx0XHJcbiAgICB2YXIgciA9IGw7XHJcbiAgICB2YXIgZyA9IGw7XHJcbiAgICB2YXIgYiA9IGw7XHJcblxyXG4gICAgaWYgKHMgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHEgPSAobCA8IDAuNSkgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XHJcbiAgICAgICAgdmFyIHAgPSAyICogbCAtIHE7XHJcblxyXG4gICAgICAgIHIgPSBIdWVUb0NvbXBvbmVudChwLCBxLCBoICsgMSAvIDMpO1xyXG4gICAgICAgIGcgPSBIdWVUb0NvbXBvbmVudChwLCBxLCBoKTtcclxuICAgICAgICBiID0gSHVlVG9Db21wb25lbnQocCwgcSwgaCAtIDEgLyAzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29sb3IgPSBuZXcgQ29sb3IoKTtcclxuXHJcbiAgICByZXR1cm4gY29sb3Iuc2V0R0xUbyhyLCBnLCBiLCAxKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFNMVG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSLToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/HSVColorWheel.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/HSVColorWheel.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\n\r\n/**\r\n * Get HSV color wheel values in an array which will be 360 elements in size.\r\n *\r\n * @function Phaser.Display.Color.HSVColorWheel\r\n * @since 3.0.0\r\n *\r\n * @param {number} [s=1] - The saturation, in the range 0 - 1.\r\n * @param {number} [v=1] - The value, in the range 0 - 1.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject[]} An array containing 360 elements, where each contains a single numeric value corresponding to the color at that point in the HSV color wheel.\r\n */\r\nvar HSVColorWheel = function (s, v)\r\n{\r\n    if (s === undefined) { s = 1; }\r\n    if (v === undefined) { v = 1; }\r\n\r\n    var colors = [];\r\n\r\n    for (var c = 0; c <= 359; c++)\r\n    {\r\n        colors.push(HSVToRGB(c / 359, s, v));\r\n    }\r\n\r\n    return colors;\r\n};\r\n\r\nmodule.exports = HSVColorWheel;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTVkNvbG9yV2hlZWwuanM/ZjY0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtQ0FBbUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE9BQU87QUFDakMsMEJBQTBCLE9BQU87O0FBRWpDOztBQUVBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU1ZDb2xvcldoZWVsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSFNWVG9SR0IgPSByZXF1aXJlKCcuL0hTVlRvUkdCJyk7XHJcblxyXG4vKipcclxuICogR2V0IEhTViBjb2xvciB3aGVlbCB2YWx1ZXMgaW4gYW4gYXJyYXkgd2hpY2ggd2lsbCBiZSAzNjAgZWxlbWVudHMgaW4gc2l6ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhTVkNvbG9yV2hlZWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcz0xXSAtIFRoZSBzYXR1cmF0aW9uLCBpbiB0aGUgcmFuZ2UgMCAtIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdj0xXSAtIFRoZSB2YWx1ZSwgaW4gdGhlIHJhbmdlIDAgLSAxLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdFtdfSBBbiBhcnJheSBjb250YWluaW5nIDM2MCBlbGVtZW50cywgd2hlcmUgZWFjaCBjb250YWlucyBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbG9yIGF0IHRoYXQgcG9pbnQgaW4gdGhlIEhTViBjb2xvciB3aGVlbC5cclxuICovXHJcbnZhciBIU1ZDb2xvcldoZWVsID0gZnVuY3Rpb24gKHMsIHYpXHJcbntcclxuICAgIGlmIChzID09PSB1bmRlZmluZWQpIHsgcyA9IDE7IH1cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHsgdiA9IDE7IH1cclxuXHJcbiAgICB2YXIgY29sb3JzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPD0gMzU5OyBjKyspXHJcbiAgICB7XHJcbiAgICAgICAgY29sb3JzLnB1c2goSFNWVG9SR0IoYyAvIDM1OSwgcywgdikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2xvcnM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhTVkNvbG9yV2hlZWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSVColorWheel.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/HSVToRGB.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/color/HSVToRGB.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\n\r\n/**\r\n * Converts an HSV (hue, saturation and value) color value to RGB.\r\n * Conversion formula from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes HSV values are contained in the set [0, 1].\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.HSVToRGB\r\n * @since 3.0.0\r\n *\r\n * @param {number} h - The hue, in the range 0 - 1. This is the base color.\r\n * @param {number} s - The saturation, in the range 0 - 1. This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n * @param {number} v - The value, in the range 0 - 1. This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n * @param {(Phaser.Types.Display.ColorObject|Phaser.Display.Color)} [out] - A Color object to store the results in. If not given a new ColorObject will be created.\r\n *\r\n * @return {(Phaser.Types.Display.ColorObject|Phaser.Display.Color)} An object with the red, green and blue values set in the r, g and b properties.\r\n */\r\nvar HSVToRGB = function (h, s, v, out)\r\n{\r\n    if (s === undefined) { s = 1; }\r\n    if (v === undefined) { v = 1; }\r\n\r\n    var i = Math.floor(h * 6);\r\n    var f = h * 6 - i;\r\n\r\n    var p = Math.floor((v * (1 - s)) * 255);\r\n    var q = Math.floor((v * (1 - f * s)) * 255);\r\n    var t = Math.floor((v * (1 - (1 - f) * s)) * 255);\r\n\r\n    v = Math.floor(v *= 255);\r\n\r\n    var r = v;\r\n    var g = v;\r\n    var b = v;\r\n\r\n    var c = i % 6;\r\n\r\n    if (c === 0)\r\n    {\r\n        g = t;\r\n        b = p;\r\n    }\r\n    else if (c === 1)\r\n    {\r\n        r = q;\r\n        b = p;\r\n    }\r\n    else if (c === 2)\r\n    {\r\n        r = p;\r\n        b = t;\r\n    }\r\n    else if (c === 3)\r\n    {\r\n        r = p;\r\n        g = q;\r\n    }\r\n    else if (c === 4)\r\n    {\r\n        r = t;\r\n        g = p;\r\n    }\r\n    else if (c === 5)\r\n    {\r\n        g = p;\r\n        b = q;\r\n    }\r\n\r\n    if (!out)\r\n    {\r\n        return { r: r, g: g, b: b, color: GetColor(r, g, b) };\r\n    }\r\n    else if (out.setTo)\r\n    {\r\n        return out.setTo(r, g, b, out.alpha, false);\r\n    }\r\n    else\r\n    {\r\n        out.r = r;\r\n        out.g = g;\r\n        out.b = b;\r\n        out.color = GetColor(r, g, b);\r\n\r\n        return out;\r\n    }\r\n};\r\n\r\nmodule.exports = HSVToRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTVlRvUkdCLmpzP2YxYTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyx3REFBd0Q7QUFDbkU7QUFDQSxZQUFZLHdEQUF3RDtBQUNwRTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTztBQUNqQywwQkFBMEIsT0FBTzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU1ZUb1JHQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENvbG9yID0gcmVxdWlyZSgnLi9HZXRDb2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGFuIEhTViAoaHVlLCBzYXR1cmF0aW9uIGFuZCB2YWx1ZSkgY29sb3IgdmFsdWUgdG8gUkdCLlxyXG4gKiBDb252ZXJzaW9uIGZvcm11bGEgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS5cclxuICogQXNzdW1lcyBIU1YgdmFsdWVzIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMV0uXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgTWljaGFlbCBKYWNrc29uIChodHRwczovL2dpdGh1Yi5jb20vbWppamFja3NvbilcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhTVlRvUkdCXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaCAtIFRoZSBodWUsIGluIHRoZSByYW5nZSAwIC0gMS4gVGhpcyBpcyB0aGUgYmFzZSBjb2xvci5cclxuICogQHBhcmFtIHtudW1iZXJ9IHMgLSBUaGUgc2F0dXJhdGlvbiwgaW4gdGhlIHJhbmdlIDAgLSAxLiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBbb3V0XSAtIEEgQ29sb3Igb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgZ2l2ZW4gYSBuZXcgQ29sb3JPYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBBbiBvYmplY3Qgd2l0aCB0aGUgcmVkLCBncmVlbiBhbmQgYmx1ZSB2YWx1ZXMgc2V0IGluIHRoZSByLCBnIGFuZCBiIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgSFNWVG9SR0IgPSBmdW5jdGlvbiAoaCwgcywgdiwgb3V0KVxyXG57XHJcbiAgICBpZiAocyA9PT0gdW5kZWZpbmVkKSB7IHMgPSAxOyB9XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7IHYgPSAxOyB9XHJcblxyXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKGggKiA2KTtcclxuICAgIHZhciBmID0gaCAqIDYgLSBpO1xyXG5cclxuICAgIHZhciBwID0gTWF0aC5mbG9vcigodiAqICgxIC0gcykpICogMjU1KTtcclxuICAgIHZhciBxID0gTWF0aC5mbG9vcigodiAqICgxIC0gZiAqIHMpKSAqIDI1NSk7XHJcbiAgICB2YXIgdCA9IE1hdGguZmxvb3IoKHYgKiAoMSAtICgxIC0gZikgKiBzKSkgKiAyNTUpO1xyXG5cclxuICAgIHYgPSBNYXRoLmZsb29yKHYgKj0gMjU1KTtcclxuXHJcbiAgICB2YXIgciA9IHY7XHJcbiAgICB2YXIgZyA9IHY7XHJcbiAgICB2YXIgYiA9IHY7XHJcblxyXG4gICAgdmFyIGMgPSBpICUgNjtcclxuXHJcbiAgICBpZiAoYyA9PT0gMClcclxuICAgIHtcclxuICAgICAgICBnID0gdDtcclxuICAgICAgICBiID0gcDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGMgPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgciA9IHE7XHJcbiAgICAgICAgYiA9IHA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIHIgPSBwO1xyXG4gICAgICAgIGIgPSB0O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYyA9PT0gMylcclxuICAgIHtcclxuICAgICAgICByID0gcDtcclxuICAgICAgICBnID0gcTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGMgPT09IDQpXHJcbiAgICB7XHJcbiAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgZyA9IHA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjID09PSA1KVxyXG4gICAge1xyXG4gICAgICAgIGcgPSBwO1xyXG4gICAgICAgIGIgPSBxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3V0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7IHI6IHIsIGc6IGcsIGI6IGIsIGNvbG9yOiBHZXRDb2xvcihyLCBnLCBiKSB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3V0LnNldFRvKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBvdXQuc2V0VG8ociwgZywgYiwgb3V0LmFscGhhLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnIgPSByO1xyXG4gICAgICAgIG91dC5nID0gZztcclxuICAgICAgICBvdXQuYiA9IGI7XHJcbiAgICAgICAgb3V0LmNvbG9yID0gR2V0Q29sb3IociwgZywgYik7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhTVlRvUkdCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSVToRGB.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/HexStringToColor.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/HexStringToColor.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts a hex string into a Phaser Color object.\r\n * \r\n * The hex string can supplied as `'#0033ff'` or the short-hand format of `'#03f'`; it can begin with an optional \"#\" or \"0x\", or be unprefixed.\r\n *\r\n * An alpha channel is _not_ supported.\r\n *\r\n * @function Phaser.Display.Color.HexStringToColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} hex - The hex color value to convert, such as `#0033ff` or the short-hand format: `#03f`.\r\n *\r\n * @return {Phaser.Display.Color} A Color object populated by the values of the given string.\r\n */\r\nvar HexStringToColor = function (hex)\r\n{\r\n    var color = new Color();\r\n\r\n    // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\r\n    hex = hex.replace(/^(?:#|0x)?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (m, r, g, b)\r\n    {\r\n        return r + r + g + g + b + b;\r\n    });\r\n\r\n    var result = (/^(?:#|0x)?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\r\n\r\n    if (result)\r\n    {\r\n        var r = parseInt(result[1], 16);\r\n        var g = parseInt(result[2], 16);\r\n        var b = parseInt(result[3], 16);\r\n\r\n        color.setTo(r, g, b);\r\n    }\r\n\r\n    return color;\r\n};\r\n\r\nmodule.exports = HexStringToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hleFN0cmluZ1RvQ29sb3IuanM/MzUwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHNDQUFzQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IZXhTdHJpbmdUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgYSBoZXggc3RyaW5nIGludG8gYSBQaGFzZXIgQ29sb3Igb2JqZWN0LlxyXG4gKiBcclxuICogVGhlIGhleCBzdHJpbmcgY2FuIHN1cHBsaWVkIGFzIGAnIzAwMzNmZidgIG9yIHRoZSBzaG9ydC1oYW5kIGZvcm1hdCBvZiBgJyMwM2YnYDsgaXQgY2FuIGJlZ2luIHdpdGggYW4gb3B0aW9uYWwgXCIjXCIgb3IgXCIweFwiLCBvciBiZSB1bnByZWZpeGVkLlxyXG4gKlxyXG4gKiBBbiBhbHBoYSBjaGFubmVsIGlzIF9ub3RfIHN1cHBvcnRlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhleFN0cmluZ1RvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXggLSBUaGUgaGV4IGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQsIHN1Y2ggYXMgYCMwMDMzZmZgIG9yIHRoZSBzaG9ydC1oYW5kIGZvcm1hdDogYCMwM2ZgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QgcG9wdWxhdGVkIGJ5IHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIHN0cmluZy5cclxuICovXHJcbnZhciBIZXhTdHJpbmdUb0NvbG9yID0gZnVuY3Rpb24gKGhleClcclxue1xyXG4gICAgdmFyIGNvbG9yID0gbmV3IENvbG9yKCk7XHJcblxyXG4gICAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14oPzojfDB4KT8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2ksIGZ1bmN0aW9uIChtLCByLCBnLCBiKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiByICsgciArIGcgKyBnICsgYiArIGI7XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gKC9eKD86I3wweCk/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pKS5leGVjKGhleCk7XHJcblxyXG4gICAgaWYgKHJlc3VsdClcclxuICAgIHtcclxuICAgICAgICB2YXIgciA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpO1xyXG4gICAgICAgIHZhciBnID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxNik7XHJcbiAgICAgICAgdmFyIGIgPSBwYXJzZUludChyZXN1bHRbM10sIDE2KTtcclxuXHJcbiAgICAgICAgY29sb3Iuc2V0VG8ociwgZywgYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIZXhTdHJpbmdUb0NvbG9yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HexStringToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/HueToComponent.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/HueToComponent.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts a hue to an RGB color.\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.HueToComponent\r\n * @since 3.0.0\r\n *\r\n * @param {number} p\r\n * @param {number} q\r\n * @param {number} t\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar HueToComponent = function (p, q, t)\r\n{\r\n    if (t < 0)\r\n    {\r\n        t += 1;\r\n    }\r\n\r\n    if (t > 1)\r\n    {\r\n        t -= 1;\r\n    }\r\n\r\n    if (t < 1 / 6)\r\n    {\r\n        return p + (q - p) * 6 * t;\r\n    }\r\n\r\n    if (t < 1 / 2)\r\n    {\r\n        return q;\r\n    }\r\n\r\n    if (t < 2 / 3)\r\n    {\r\n        return p + (q - p) * (2 / 3 - t) * 6;\r\n    }\r\n\r\n    return p;\r\n};\r\n\r\nmodule.exports = HueToComponent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0h1ZVRvQ29tcG9uZW50LmpzP2RiZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvSHVlVG9Db21wb25lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIGh1ZSB0byBhbiBSR0IgY29sb3IuXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgTWljaGFlbCBKYWNrc29uIChodHRwczovL2dpdGh1Yi5jb20vbWppamFja3NvbilcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkh1ZVRvQ29tcG9uZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gcVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb21iaW5lZCBjb2xvciB2YWx1ZS5cclxuICovXHJcbnZhciBIdWVUb0NvbXBvbmVudCA9IGZ1bmN0aW9uIChwLCBxLCB0KVxyXG57XHJcbiAgICBpZiAodCA8IDApXHJcbiAgICB7XHJcbiAgICAgICAgdCArPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0ID4gMSlcclxuICAgIHtcclxuICAgICAgICB0IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHQgPCAxIC8gNilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodCA8IDEgLyAyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0IDwgMiAvIDMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIdWVUb0NvbXBvbmVudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HueToComponent.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/IntegerToColor.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/IntegerToColor.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar IntegerToRGB = __webpack_require__(/*! ./IntegerToRGB */ \"./node_modules/phaser/src/display/color/IntegerToRGB.js\");\r\n\r\n/**\r\n * Converts the given color value into an instance of a Color object.\r\n *\r\n * @function Phaser.Display.Color.IntegerToColor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} input - The color value to convert into a Color object.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar IntegerToColor = function (input)\r\n{\r\n    var rgb = IntegerToRGB(input);\r\n\r\n    return new Color(rgb.r, rgb.g, rgb.b, rgb.a);\r\n};\r\n\r\nmodule.exports = IntegerToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb0NvbG9yLmpzPzYwMWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUztBQUM3QixtQkFBbUIsbUJBQU8sQ0FBQywrRUFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcbnZhciBJbnRlZ2VyVG9SR0IgPSByZXF1aXJlKCcuL0ludGVnZXJUb1JHQicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBjb2xvciB2YWx1ZSBpbnRvIGFuIGluc3RhbmNlIG9mIGEgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZWdlclRvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5wdXQgLSBUaGUgY29sb3IgdmFsdWUgdG8gY29udmVydCBpbnRvIGEgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgSW50ZWdlclRvQ29sb3IgPSBmdW5jdGlvbiAoaW5wdXQpXHJcbntcclxuICAgIHZhciByZ2IgPSBJbnRlZ2VyVG9SR0IoaW5wdXQpO1xyXG5cclxuICAgIHJldHVybiBuZXcgQ29sb3IocmdiLnIsIHJnYi5nLCByZ2IuYiwgcmdiLmEpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlZ2VyVG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/IntegerToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/IntegerToRGB.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/IntegerToRGB.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Return the component parts of a color as an Object with the properties alpha, red, green, blue.\r\n *\r\n * Alpha will only be set if it exists in the given color (0xAARRGGBB)\r\n *\r\n * @function Phaser.Display.Color.IntegerToRGB\r\n * @since 3.0.0\r\n *\r\n * @param {integer} input - The color value to convert into a Color object.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object with the red, green and blue values set in the r, g and b properties.\r\n */\r\nvar IntegerToRGB = function (color)\r\n{\r\n    if (color > 16777215)\r\n    {\r\n        //  The color value has an alpha component\r\n        return {\r\n            a: color >>> 24,\r\n            r: color >> 16 & 0xFF,\r\n            g: color >> 8 & 0xFF,\r\n            b: color & 0xFF\r\n        };\r\n    }\r\n    else\r\n    {\r\n        return {\r\n            a: 255,\r\n            r: color >> 16 & 0xFF,\r\n            g: color >> 8 & 0xFF,\r\n            b: color & 0xFF\r\n        };\r\n    }\r\n};\r\n\r\nmodule.exports = IntegerToRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb1JHQi5qcz9iYzdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvSW50ZWdlclRvUkdCLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBjb21wb25lbnQgcGFydHMgb2YgYSBjb2xvciBhcyBhbiBPYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBhbHBoYSwgcmVkLCBncmVlbiwgYmx1ZS5cclxuICpcclxuICogQWxwaGEgd2lsbCBvbmx5IGJlIHNldCBpZiBpdCBleGlzdHMgaW4gdGhlIGdpdmVuIGNvbG9yICgweEFBUlJHR0JCKVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZWdlclRvUkdCXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGlucHV0IC0gVGhlIGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQgaW50byBhIENvbG9yIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R9IEFuIG9iamVjdCB3aXRoIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVlcyBzZXQgaW4gdGhlIHIsIGcgYW5kIGIgcHJvcGVydGllcy5cclxuICovXHJcbnZhciBJbnRlZ2VyVG9SR0IgPSBmdW5jdGlvbiAoY29sb3IpXHJcbntcclxuICAgIGlmIChjb2xvciA+IDE2Nzc3MjE1KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUaGUgY29sb3IgdmFsdWUgaGFzIGFuIGFscGhhIGNvbXBvbmVudFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGE6IGNvbG9yID4+PiAyNCxcclxuICAgICAgICAgICAgcjogY29sb3IgPj4gMTYgJiAweEZGLFxyXG4gICAgICAgICAgICBnOiBjb2xvciA+PiA4ICYgMHhGRixcclxuICAgICAgICAgICAgYjogY29sb3IgJiAweEZGXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhOiAyNTUsXHJcbiAgICAgICAgICAgIHI6IGNvbG9yID4+IDE2ICYgMHhGRixcclxuICAgICAgICAgICAgZzogY29sb3IgPj4gOCAmIDB4RkYsXHJcbiAgICAgICAgICAgIGI6IGNvbG9yICYgMHhGRlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVnZXJUb1JHQjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/IntegerToRGB.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/Interpolate.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/Interpolate.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Linear = __webpack_require__(/*! ../../math/Linear */ \"./node_modules/phaser/src/math/Linear.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Color.Interpolate\r\n * @memberof Phaser.Display.Color\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * Interpolates between the two given color ranges over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.RGBWithRGB\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {number} r1 - Red value.\r\n * @param {number} g1 - Blue value.\r\n * @param {number} b1 - Green value.\r\n * @param {number} r2 - Red value.\r\n * @param {number} g2 - Blue value.\r\n * @param {number} b2 - Green value.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar RGBWithRGB = function (r1, g1, b1, r2, g2, b2, length, index)\r\n{\r\n    if (length === undefined) { length = 100; }\r\n    if (index === undefined) { index = 0; }\r\n\r\n    var t = index / length;\r\n\r\n    return {\r\n        r: Linear(r1, r2, t),\r\n        g: Linear(g1, g2, t),\r\n        b: Linear(b1, b2, t)\r\n    };\r\n};\r\n\r\n/**\r\n * Interpolates between the two given color objects over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.ColorWithColor\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Display.Color} color1 - The first Color object.\r\n * @param {Phaser.Display.Color} color2 - The second Color object.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar ColorWithColor = function (color1, color2, length, index)\r\n{\r\n    if (length === undefined) { length = 100; }\r\n    if (index === undefined) { index = 0; }\r\n\r\n    return RGBWithRGB(color1.r, color1.g, color1.b, color2.r, color2.g, color2.b, length, index);\r\n};\r\n\r\n/**\r\n * Interpolates between the Color object and color values over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.ColorWithRGB\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Display.Color} color1 - The first Color object.\r\n * @param {number} r - Red value.\r\n * @param {number} g - Blue value.\r\n * @param {number} b - Green value.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar ColorWithRGB = function (color, r, g, b, length, index)\r\n{\r\n    if (length === undefined) { length = 100; }\r\n    if (index === undefined) { index = 0; }\r\n\r\n    return RGBWithRGB(color.r, color.g, color.b, r, g, b, length, index);\r\n};\r\n\r\nmodule.exports = {\r\n\r\n    RGBWithRGB: RGBWithRGB,\r\n    ColorWithRGB: ColorWithRGB,\r\n    ColorWithColor: ColorWithColor\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVycG9sYXRlLmpzPzZjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsY0FBYztBQUM3Qyw4QkFBOEIsV0FBVzs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGNBQWM7QUFDN0MsOEJBQThCLFdBQVc7O0FBRXpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsY0FBYztBQUM3Qyw4QkFBOEIsV0FBVzs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVycG9sYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZWFyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9MaW5lYXInKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG4vKipcclxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdGhlIHR3byBnaXZlbiBjb2xvciByYW5nZXMgb3ZlciB0aGUgbGVuZ3RoIHN1cHBsaWVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZXJwb2xhdGUuUkdCV2l0aFJHQlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZXJwb2xhdGVcclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHIxIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZzEgLSBCbHVlIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYjEgLSBHcmVlbiB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHIyIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZzIgLSBCbHVlIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYjIgLSBHcmVlbiB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MTAwXSAtIERpc3RhbmNlIHRvIGludGVycG9sYXRlIG92ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF0gLSBJbmRleCB0byBzdGFydCBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVycG9sYXRlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgUkdCV2l0aFJHQiA9IGZ1bmN0aW9uIChyMSwgZzEsIGIxLCByMiwgZzIsIGIyLCBsZW5ndGgsIGluZGV4KVxyXG57XHJcbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHsgbGVuZ3RoID0gMTAwOyB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgeyBpbmRleCA9IDA7IH1cclxuXHJcbiAgICB2YXIgdCA9IGluZGV4IC8gbGVuZ3RoO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcjogTGluZWFyKHIxLCByMiwgdCksXHJcbiAgICAgICAgZzogTGluZWFyKGcxLCBnMiwgdCksXHJcbiAgICAgICAgYjogTGluZWFyKGIxLCBiMiwgdClcclxuICAgIH07XHJcbn07XHJcblxyXG4vKipcclxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdGhlIHR3byBnaXZlbiBjb2xvciBvYmplY3RzIG92ZXIgdGhlIGxlbmd0aCBzdXBwbGllZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlLkNvbG9yV2l0aENvbG9yXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5Db2xvci5JbnRlcnBvbGF0ZVxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBjb2xvcjEgLSBUaGUgZmlyc3QgQ29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBjb2xvcjIgLSBUaGUgc2Vjb25kIENvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MTAwXSAtIERpc3RhbmNlIHRvIGludGVycG9sYXRlIG92ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF0gLSBJbmRleCB0byBzdGFydCBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVycG9sYXRlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgQ29sb3JXaXRoQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIsIGxlbmd0aCwgaW5kZXgpXHJcbntcclxuICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkgeyBsZW5ndGggPSAxMDA7IH1cclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG5cclxuICAgIHJldHVybiBSR0JXaXRoUkdCKGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIsIGNvbG9yMi5yLCBjb2xvcjIuZywgY29sb3IyLmIsIGxlbmd0aCwgaW5kZXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHRoZSBDb2xvciBvYmplY3QgYW5kIGNvbG9yIHZhbHVlcyBvdmVyIHRoZSBsZW5ndGggc3VwcGxpZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5JbnRlcnBvbGF0ZS5Db2xvcldpdGhSR0JcclxuICogQG1lbWJlcm9mIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlXHJcbiAqIEBzdGF0aWNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IGNvbG9yMSAtIFRoZSBmaXJzdCBDb2xvciBvYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZyAtIEJsdWUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gR3JlZW4gdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTEwMF0gLSBEaXN0YW5jZSB0byBpbnRlcnBvbGF0ZSBvdmVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdIC0gSW5kZXggdG8gc3RhcnQgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlcnBvbGF0ZWQgY29sb3IgdmFsdWVzLlxyXG4gKi9cclxudmFyIENvbG9yV2l0aFJHQiA9IGZ1bmN0aW9uIChjb2xvciwgciwgZywgYiwgbGVuZ3RoLCBpbmRleClcclxue1xyXG4gICAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7IGxlbmd0aCA9IDEwMDsgfVxyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSAwOyB9XHJcblxyXG4gICAgcmV0dXJuIFJHQldpdGhSR0IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgciwgZywgYiwgbGVuZ3RoLCBpbmRleCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBSR0JXaXRoUkdCOiBSR0JXaXRoUkdCLFxyXG4gICAgQ29sb3JXaXRoUkdCOiBDb2xvcldpdGhSR0IsXHJcbiAgICBDb2xvcldpdGhDb2xvcjogQ29sb3JXaXRoQ29sb3JcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/Interpolate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/ObjectToColor.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/ObjectToColor.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts an object containing `r`, `g`, `b` and `a` properties into a Color class instance.\r\n *\r\n * @function Phaser.Display.Color.ObjectToColor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Display.InputColorObject} input - An object containing `r`, `g`, `b` and `a` properties in the range 0 to 255.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar ObjectToColor = function (input)\r\n{\r\n    return new Color(input.r, input.g, input.b, input.a);\r\n};\r\n\r\nmodule.exports = ObjectToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL09iamVjdFRvQ29sb3IuanM/MWNmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL09iamVjdFRvQ29sb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb2xvciA9IHJlcXVpcmUoJy4vQ29sb3InKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBvYmplY3QgY29udGFpbmluZyBgcmAsIGBnYCwgYGJgIGFuZCBgYWAgcHJvcGVydGllcyBpbnRvIGEgQ29sb3IgY2xhc3MgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5PYmplY3RUb0NvbG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5EaXNwbGF5LklucHV0Q29sb3JPYmplY3R9IGlucHV0IC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYHJgLCBgZ2AsIGBiYCBhbmQgYGFgIHByb3BlcnRpZXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgT2JqZWN0VG9Db2xvciA9IGZ1bmN0aW9uIChpbnB1dClcclxue1xyXG4gICAgcmV0dXJuIG5ldyBDb2xvcihpbnB1dC5yLCBpbnB1dC5nLCBpbnB1dC5iLCBpbnB1dC5hKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0VG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ObjectToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/RGBStringToColor.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/RGBStringToColor.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts a CSS 'web' string into a Phaser Color object.\r\n * \r\n * The web string can be in the format `'rgb(r,g,b)'` or `'rgba(r,g,b,a)'` where r/g/b are in the range [0..255] and a is in the range [0..1].\r\n *\r\n * @function Phaser.Display.Color.RGBStringToColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} rgb - The CSS format color string, using the `rgb` or `rgba` format.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar RGBStringToColor = function (rgb)\r\n{\r\n    var color = new Color();\r\n\r\n    var result = (/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d+(?:\\.\\d+)?))?\\s*\\)$/).exec(rgb.toLowerCase());\r\n\r\n    if (result)\r\n    {\r\n        var r = parseInt(result[1], 10);\r\n        var g = parseInt(result[2], 10);\r\n        var b = parseInt(result[3], 10);\r\n        var a = (result[4] !== undefined) ? parseFloat(result[4]) : 1;\r\n\r\n        color.setTo(r, g, b, a * 255);\r\n    }\r\n\r\n    return color;\r\n};\r\n\r\nmodule.exports = RGBStringToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlN0cmluZ1RvQ29sb3IuanM/Zjk3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvUkdCU3RyaW5nVG9Db2xvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgQ1NTICd3ZWInIHN0cmluZyBpbnRvIGEgUGhhc2VyIENvbG9yIG9iamVjdC5cclxuICogXHJcbiAqIFRoZSB3ZWIgc3RyaW5nIGNhbiBiZSBpbiB0aGUgZm9ybWF0IGAncmdiKHIsZyxiKSdgIG9yIGAncmdiYShyLGcsYixhKSdgIHdoZXJlIHIvZy9iIGFyZSBpbiB0aGUgcmFuZ2UgWzAuLjI1NV0gYW5kIGEgaXMgaW4gdGhlIHJhbmdlIFswLi4xXS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJHQlN0cmluZ1RvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSByZ2IgLSBUaGUgQ1NTIGZvcm1hdCBjb2xvciBzdHJpbmcsIHVzaW5nIHRoZSBgcmdiYCBvciBgcmdiYWAgZm9ybWF0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgUkdCU3RyaW5nVG9Db2xvciA9IGZ1bmN0aW9uIChyZ2IpXHJcbntcclxuICAgIHZhciBjb2xvciA9IG5ldyBDb2xvcigpO1xyXG5cclxuICAgIHZhciByZXN1bHQgPSAoL15yZ2JhP1xcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqKD86LFxccyooXFxkKyg/OlxcLlxcZCspPykpP1xccypcXCkkLykuZXhlYyhyZ2IudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgaWYgKHJlc3VsdClcclxuICAgIHtcclxuICAgICAgICB2YXIgciA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTApO1xyXG4gICAgICAgIHZhciBnID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCk7XHJcbiAgICAgICAgdmFyIGIgPSBwYXJzZUludChyZXN1bHRbM10sIDEwKTtcclxuICAgICAgICB2YXIgYSA9IChyZXN1bHRbNF0gIT09IHVuZGVmaW5lZCkgPyBwYXJzZUZsb2F0KHJlc3VsdFs0XSkgOiAxO1xyXG5cclxuICAgICAgICBjb2xvci5zZXRUbyhyLCBnLCBiLCBhICogMjU1KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sb3I7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJHQlN0cmluZ1RvQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBStringToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/RGBToHSV.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/display/color/RGBToHSV.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts an RGB color value to HSV (hue, saturation and value).\r\n * Conversion formula from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes RGB values are contained in the set [0, 255] and returns h, s and v in the set [0, 1].\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.RGBToHSV\r\n * @since 3.0.0\r\n *\r\n * @param {integer} r - The red color value. A number between 0 and 255.\r\n * @param {integer} g - The green color value. A number between 0 and 255.\r\n * @param {integer} b - The blue color value. A number between 0 and 255.\r\n * @param {(Phaser.Types.Display.HSVColorObject|Phaser.Display.Color)} [out] - An object to store the color values in. If not given an HSV Color Object will be created.\r\n *\r\n * @return {(Phaser.Types.Display.HSVColorObject|Phaser.Display.Color)} An object with the properties `h`, `s` and `v` set.\r\n */\r\nvar RGBToHSV = function (r, g, b, out)\r\n{\r\n    if (out === undefined) { out = { h: 0, s: 0, v: 0 }; }\r\n\r\n    r /= 255;\r\n    g /= 255;\r\n    b /= 255;\r\n\r\n    var min = Math.min(r, g, b);\r\n    var max = Math.max(r, g, b);\r\n    var d = max - min;\r\n\r\n    // achromatic by default\r\n    var h = 0;\r\n    var s = (max === 0) ? 0 : d / max;\r\n    var v = max;\r\n\r\n    if (max !== min)\r\n    {\r\n        if (max === r)\r\n        {\r\n            h = (g - b) / d + ((g < b) ? 6 : 0);\r\n        }\r\n        else if (max === g)\r\n        {\r\n            h = (b - r) / d + 2;\r\n        }\r\n        else if (max === b)\r\n        {\r\n            h = (r - g) / d + 4;\r\n        }\r\n\r\n        h /= 6;\r\n    }\r\n\r\n    if (out.hasOwnProperty('_h'))\r\n    {\r\n        out._h = h;\r\n        out._s = s;\r\n        out._v = v;\r\n    }\r\n    else\r\n    {\r\n        out.h = h;\r\n        out.s = s;\r\n        out.v = v;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = RGBToHSV;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlRvSFNWLmpzPzc3OTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMkRBQTJEO0FBQ3RFO0FBQ0EsWUFBWSwyREFBMkQ7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFFBQVEsb0JBQW9COztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvUkdCVG9IU1YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWIChodWUsIHNhdHVyYXRpb24gYW5kIHZhbHVlKS5cclxuICogQ29udmVyc2lvbiBmb3JtdWxhIGZyb20gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuXHJcbiAqIEFzc3VtZXMgUkdCIHZhbHVlcyBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kIHJldHVybnMgaCwgcyBhbmQgdiBpbiB0aGUgc2V0IFswLCAxXS5cclxuICogQmFzZWQgb24gY29kZSBieSBNaWNoYWVsIEphY2tzb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9tamlqYWNrc29uKVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuUkdCVG9IU1ZcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gciAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGcgLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGIgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5EaXNwbGF5LkhTVkNvbG9yT2JqZWN0fFBoYXNlci5EaXNwbGF5LkNvbG9yKX0gW291dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIGNvbG9yIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGFuIEhTViBDb2xvciBPYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuSFNWQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBBbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBgaGAsIGBzYCBhbmQgYHZgIHNldC5cclxuICovXHJcbnZhciBSR0JUb0hTViA9IGZ1bmN0aW9uIChyLCBnLCBiLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSB7IGg6IDAsIHM6IDAsIHY6IDAgfTsgfVxyXG5cclxuICAgIHIgLz0gMjU1O1xyXG4gICAgZyAvPSAyNTU7XHJcbiAgICBiIC89IDI1NTtcclxuXHJcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XHJcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XHJcbiAgICB2YXIgZCA9IG1heCAtIG1pbjtcclxuXHJcbiAgICAvLyBhY2hyb21hdGljIGJ5IGRlZmF1bHRcclxuICAgIHZhciBoID0gMDtcclxuICAgIHZhciBzID0gKG1heCA9PT0gMCkgPyAwIDogZCAvIG1heDtcclxuICAgIHZhciB2ID0gbWF4O1xyXG5cclxuICAgIGlmIChtYXggIT09IG1pbilcclxuICAgIHtcclxuICAgICAgICBpZiAobWF4ID09PSByKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKChnIDwgYikgPyA2IDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1heCA9PT0gZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZCArIDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1heCA9PT0gYilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoIC89IDY7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG91dC5oYXNPd25Qcm9wZXJ0eSgnX2gnKSlcclxuICAgIHtcclxuICAgICAgICBvdXQuX2ggPSBoO1xyXG4gICAgICAgIG91dC5fcyA9IHM7XHJcbiAgICAgICAgb3V0Ll92ID0gdjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBvdXQuaCA9IGg7XHJcbiAgICAgICAgb3V0LnMgPSBzO1xyXG4gICAgICAgIG91dC52ID0gdjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSR0JUb0hTVjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBToHSV.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/RGBToString.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/RGBToString.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ComponentToHex = __webpack_require__(/*! ./ComponentToHex */ \"./node_modules/phaser/src/display/color/ComponentToHex.js\");\r\n\r\n/**\r\n * Converts the color values into an HTML compatible color string, prefixed with either `#` or `0x`.\r\n *\r\n * @function Phaser.Display.Color.RGBToString\r\n * @since 3.0.0\r\n *\r\n * @param {integer} r - The red color value. A number between 0 and 255.\r\n * @param {integer} g - The green color value. A number between 0 and 255.\r\n * @param {integer} b - The blue color value. A number between 0 and 255.\r\n * @param {integer} [a=255] - The alpha value. A number between 0 and 255.\r\n * @param {string} [prefix=#] - The prefix of the string. Either `#` or `0x`.\r\n *\r\n * @return {string} A string-based representation of the color values.\r\n */\r\nvar RGBToString = function (r, g, b, a, prefix)\r\n{\r\n    if (a === undefined) { a = 255; }\r\n    if (prefix === undefined) { prefix = '#'; }\r\n\r\n    if (prefix === '#')\r\n    {\r\n        return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\r\n    }\r\n    else\r\n    {\r\n        return '0x' + ComponentToHex(a) + ComponentToHex(r) + ComponentToHex(g) + ComponentToHex(b);\r\n    }\r\n};\r\n\r\nmodule.exports = RGBToString;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlRvU3RyaW5nLmpzPzM0NzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsU0FBUztBQUNuQywrQkFBK0IsY0FBYzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9SR0JUb1N0cmluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbXBvbmVudFRvSGV4ID0gcmVxdWlyZSgnLi9Db21wb25lbnRUb0hleCcpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBjb2xvciB2YWx1ZXMgaW50byBhbiBIVE1MIGNvbXBhdGlibGUgY29sb3Igc3RyaW5nLCBwcmVmaXhlZCB3aXRoIGVpdGhlciBgI2Agb3IgYDB4YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJHQlRvU3RyaW5nXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHIgLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBnIC0gVGhlIGdyZWVuIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBiIC0gVGhlIGJsdWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthPTI1NV0gLSBUaGUgYWxwaGEgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0jXSAtIFRoZSBwcmVmaXggb2YgdGhlIHN0cmluZy4gRWl0aGVyIGAjYCBvciBgMHhgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgc3RyaW5nLWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgUkdCVG9TdHJpbmcgPSBmdW5jdGlvbiAociwgZywgYiwgYSwgcHJlZml4KVxyXG57XHJcbiAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IGEgPSAyNTU7IH1cclxuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkgeyBwcmVmaXggPSAnIyc7IH1cclxuXHJcbiAgICBpZiAocHJlZml4ID09PSAnIycpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICcjJyArICgoMSA8PCAyNCkgKyAociA8PCAxNikgKyAoZyA8PCA4KSArIGIpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gJzB4JyArIENvbXBvbmVudFRvSGV4KGEpICsgQ29tcG9uZW50VG9IZXgocikgKyBDb21wb25lbnRUb0hleChnKSArIENvbXBvbmVudFRvSGV4KGIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSR0JUb1N0cmluZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBToString.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/RandomRGB.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/RandomRGB.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Between = __webpack_require__(/*! ../../math/Between */ \"./node_modules/phaser/src/math/Between.js\");\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Creates a new Color object where the r, g, and b values have been set to random values\r\n * based on the given min max values.\r\n *\r\n * @function Phaser.Display.Color.RandomRGB\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [min=0] - The minimum value to set the random range from (between 0 and 255)\r\n * @param {integer} [max=255] - The maximum value to set the random range from (between 0 and 255)\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar RandomRGB = function (min, max)\r\n{\r\n    if (min === undefined) { min = 0; }\r\n    if (max === undefined) { max = 255; }\r\n\r\n    return new Color(Between(min, max), Between(min, max), Between(min, max));\r\n};\r\n\r\nmodule.exports = RandomRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JhbmRvbVJHQi5qcz83MjQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMscUVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxpRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFNBQVM7QUFDckMsNEJBQTRCLFdBQVc7O0FBRXZDO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JhbmRvbVJHQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL0JldHdlZW4nKTtcclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ29sb3Igb2JqZWN0IHdoZXJlIHRoZSByLCBnLCBhbmQgYiB2YWx1ZXMgaGF2ZSBiZWVuIHNldCB0byByYW5kb20gdmFsdWVzXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBtaW4gbWF4IHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJhbmRvbVJHQlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbbWluPTBdIC0gVGhlIG1pbmltdW0gdmFsdWUgdG8gc2V0IHRoZSByYW5kb20gcmFuZ2UgZnJvbSAoYmV0d2VlbiAwIGFuZCAyNTUpXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0yNTVdIC0gVGhlIG1heGltdW0gdmFsdWUgdG8gc2V0IHRoZSByYW5kb20gcmFuZ2UgZnJvbSAoYmV0d2VlbiAwIGFuZCAyNTUpXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdC5cclxuICovXHJcbnZhciBSYW5kb21SR0IgPSBmdW5jdGlvbiAobWluLCBtYXgpXHJcbntcclxuICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkgeyBtaW4gPSAwOyB9XHJcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMjU1OyB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBDb2xvcihCZXR3ZWVuKG1pbiwgbWF4KSwgQmV0d2VlbihtaW4sIG1heCksIEJldHdlZW4obWluLCBtYXgpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tUkdCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RandomRGB.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/ValueToColor.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/display/color/ValueToColor.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HexStringToColor = __webpack_require__(/*! ./HexStringToColor */ \"./node_modules/phaser/src/display/color/HexStringToColor.js\");\r\nvar IntegerToColor = __webpack_require__(/*! ./IntegerToColor */ \"./node_modules/phaser/src/display/color/IntegerToColor.js\");\r\nvar ObjectToColor = __webpack_require__(/*! ./ObjectToColor */ \"./node_modules/phaser/src/display/color/ObjectToColor.js\");\r\nvar RGBStringToColor = __webpack_require__(/*! ./RGBStringToColor */ \"./node_modules/phaser/src/display/color/RGBStringToColor.js\");\r\n\r\n/**\r\n * Converts the given source color value into an instance of a Color class.\r\n * The value can be either a string, prefixed with `rgb` or a hex string, a number or an Object.\r\n *\r\n * @function Phaser.Display.Color.ValueToColor\r\n * @since 3.0.0\r\n *\r\n * @param {(string|number|Phaser.Types.Display.InputColorObject)} input - The source color value to convert.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar ValueToColor = function (input)\r\n{\r\n    var t = typeof input;\r\n\r\n    switch (t)\r\n    {\r\n        case 'string':\r\n\r\n            if (input.substr(0, 3).toLowerCase() === 'rgb')\r\n            {\r\n                return RGBStringToColor(input);\r\n            }\r\n            else\r\n            {\r\n                return HexStringToColor(input);\r\n            }\r\n\r\n        case 'number':\r\n\r\n            return IntegerToColor(input);\r\n\r\n        case 'object':\r\n\r\n            return ObjectToColor(input);\r\n    }\r\n};\r\n\r\nmodule.exports = ValueToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1ZhbHVlVG9Db2xvci5qcz82Mjg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBb0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsbUZBQWtCO0FBQy9DLG9CQUFvQixtQkFBTyxDQUFDLGlGQUFpQjtBQUM3Qyx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzREFBc0Q7QUFDakU7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1ZhbHVlVG9Db2xvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEhleFN0cmluZ1RvQ29sb3IgPSByZXF1aXJlKCcuL0hleFN0cmluZ1RvQ29sb3InKTtcclxudmFyIEludGVnZXJUb0NvbG9yID0gcmVxdWlyZSgnLi9JbnRlZ2VyVG9Db2xvcicpO1xyXG52YXIgT2JqZWN0VG9Db2xvciA9IHJlcXVpcmUoJy4vT2JqZWN0VG9Db2xvcicpO1xyXG52YXIgUkdCU3RyaW5nVG9Db2xvciA9IHJlcXVpcmUoJy4vUkdCU3RyaW5nVG9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBzb3VyY2UgY29sb3IgdmFsdWUgaW50byBhbiBpbnN0YW5jZSBvZiBhIENvbG9yIGNsYXNzLlxyXG4gKiBUaGUgdmFsdWUgY2FuIGJlIGVpdGhlciBhIHN0cmluZywgcHJlZml4ZWQgd2l0aCBgcmdiYCBvciBhIGhleCBzdHJpbmcsIGEgbnVtYmVyIG9yIGFuIE9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlZhbHVlVG9Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcnxQaGFzZXIuVHlwZXMuRGlzcGxheS5JbnB1dENvbG9yT2JqZWN0KX0gaW5wdXQgLSBUaGUgc291cmNlIGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdC5cclxuICovXHJcbnZhciBWYWx1ZVRvQ29sb3IgPSBmdW5jdGlvbiAoaW5wdXQpXHJcbntcclxuICAgIHZhciB0ID0gdHlwZW9mIGlucHV0O1xyXG5cclxuICAgIHN3aXRjaCAodClcclxuICAgIHtcclxuICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG5cclxuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cigwLCAzKS50b0xvd2VyQ2FzZSgpID09PSAncmdiJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJHQlN0cmluZ1RvQ29sb3IoaW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEhleFN0cmluZ1RvQ29sb3IoaW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgJ251bWJlcic6XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSW50ZWdlclRvQ29sb3IoaW5wdXQpO1xyXG5cclxuICAgICAgICBjYXNlICdvYmplY3QnOlxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdFRvQ29sb3IoaW5wdXQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWYWx1ZVRvQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ValueToColor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/color/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/display/color/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\nColor.ColorToRGBA = __webpack_require__(/*! ./ColorToRGBA */ \"./node_modules/phaser/src/display/color/ColorToRGBA.js\");\r\nColor.ComponentToHex = __webpack_require__(/*! ./ComponentToHex */ \"./node_modules/phaser/src/display/color/ComponentToHex.js\");\r\nColor.GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\nColor.GetColor32 = __webpack_require__(/*! ./GetColor32 */ \"./node_modules/phaser/src/display/color/GetColor32.js\");\r\nColor.HexStringToColor = __webpack_require__(/*! ./HexStringToColor */ \"./node_modules/phaser/src/display/color/HexStringToColor.js\");\r\nColor.HSLToColor = __webpack_require__(/*! ./HSLToColor */ \"./node_modules/phaser/src/display/color/HSLToColor.js\");\r\nColor.HSVColorWheel = __webpack_require__(/*! ./HSVColorWheel */ \"./node_modules/phaser/src/display/color/HSVColorWheel.js\");\r\nColor.HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\nColor.HueToComponent = __webpack_require__(/*! ./HueToComponent */ \"./node_modules/phaser/src/display/color/HueToComponent.js\");\r\nColor.IntegerToColor = __webpack_require__(/*! ./IntegerToColor */ \"./node_modules/phaser/src/display/color/IntegerToColor.js\");\r\nColor.IntegerToRGB = __webpack_require__(/*! ./IntegerToRGB */ \"./node_modules/phaser/src/display/color/IntegerToRGB.js\");\r\nColor.Interpolate = __webpack_require__(/*! ./Interpolate */ \"./node_modules/phaser/src/display/color/Interpolate.js\");\r\nColor.ObjectToColor = __webpack_require__(/*! ./ObjectToColor */ \"./node_modules/phaser/src/display/color/ObjectToColor.js\");\r\nColor.RandomRGB = __webpack_require__(/*! ./RandomRGB */ \"./node_modules/phaser/src/display/color/RandomRGB.js\");\r\nColor.RGBStringToColor = __webpack_require__(/*! ./RGBStringToColor */ \"./node_modules/phaser/src/display/color/RGBStringToColor.js\");\r\nColor.RGBToHSV = __webpack_require__(/*! ./RGBToHSV */ \"./node_modules/phaser/src/display/color/RGBToHSV.js\");\r\nColor.RGBToString = __webpack_require__(/*! ./RGBToString */ \"./node_modules/phaser/src/display/color/RGBToString.js\");\r\nColor.ValueToColor = __webpack_require__(/*! ./ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\n\r\nmodule.exports = Color;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL2luZGV4LmpzPzYzYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUzs7QUFFN0Isb0JBQW9CLG1CQUFPLENBQUMsNkVBQWU7QUFDM0MsdUJBQXVCLG1CQUFPLENBQUMsbUZBQWtCO0FBQ2pELGlCQUFpQixtQkFBTyxDQUFDLHVFQUFZO0FBQ3JDLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFjO0FBQ3pDLHlCQUF5QixtQkFBTyxDQUFDLHVGQUFvQjtBQUNyRCxtQkFBbUIsbUJBQU8sQ0FBQywyRUFBYztBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQyxpRkFBaUI7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsdUVBQVk7QUFDckMsdUJBQXVCLG1CQUFPLENBQUMsbUZBQWtCO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLG1GQUFrQjtBQUNqRCxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDN0Msb0JBQW9CLG1CQUFPLENBQUMsNkVBQWU7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsaUZBQWlCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLHlFQUFhO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLHVGQUFvQjtBQUNyRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RUFBWTtBQUNyQyxvQkFBb0IsbUJBQU8sQ0FBQyw2RUFBZTtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBZ0I7O0FBRTdDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuQ29sb3IuQ29sb3JUb1JHQkEgPSByZXF1aXJlKCcuL0NvbG9yVG9SR0JBJyk7XHJcbkNvbG9yLkNvbXBvbmVudFRvSGV4ID0gcmVxdWlyZSgnLi9Db21wb25lbnRUb0hleCcpO1xyXG5Db2xvci5HZXRDb2xvciA9IHJlcXVpcmUoJy4vR2V0Q29sb3InKTtcclxuQ29sb3IuR2V0Q29sb3IzMiA9IHJlcXVpcmUoJy4vR2V0Q29sb3IzMicpO1xyXG5Db2xvci5IZXhTdHJpbmdUb0NvbG9yID0gcmVxdWlyZSgnLi9IZXhTdHJpbmdUb0NvbG9yJyk7XHJcbkNvbG9yLkhTTFRvQ29sb3IgPSByZXF1aXJlKCcuL0hTTFRvQ29sb3InKTtcclxuQ29sb3IuSFNWQ29sb3JXaGVlbCA9IHJlcXVpcmUoJy4vSFNWQ29sb3JXaGVlbCcpO1xyXG5Db2xvci5IU1ZUb1JHQiA9IHJlcXVpcmUoJy4vSFNWVG9SR0InKTtcclxuQ29sb3IuSHVlVG9Db21wb25lbnQgPSByZXF1aXJlKCcuL0h1ZVRvQ29tcG9uZW50Jyk7XHJcbkNvbG9yLkludGVnZXJUb0NvbG9yID0gcmVxdWlyZSgnLi9JbnRlZ2VyVG9Db2xvcicpO1xyXG5Db2xvci5JbnRlZ2VyVG9SR0IgPSByZXF1aXJlKCcuL0ludGVnZXJUb1JHQicpO1xyXG5Db2xvci5JbnRlcnBvbGF0ZSA9IHJlcXVpcmUoJy4vSW50ZXJwb2xhdGUnKTtcclxuQ29sb3IuT2JqZWN0VG9Db2xvciA9IHJlcXVpcmUoJy4vT2JqZWN0VG9Db2xvcicpO1xyXG5Db2xvci5SYW5kb21SR0IgPSByZXF1aXJlKCcuL1JhbmRvbVJHQicpO1xyXG5Db2xvci5SR0JTdHJpbmdUb0NvbG9yID0gcmVxdWlyZSgnLi9SR0JTdHJpbmdUb0NvbG9yJyk7XHJcbkNvbG9yLlJHQlRvSFNWID0gcmVxdWlyZSgnLi9SR0JUb0hTVicpO1xyXG5Db2xvci5SR0JUb1N0cmluZyA9IHJlcXVpcmUoJy4vUkdCVG9TdHJpbmcnKTtcclxuQ29sb3IuVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi9WYWx1ZVRvQ29sb3InKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/display/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Align: __webpack_require__(/*! ./align */ \"./node_modules/phaser/src/display/align/index.js\"),\r\n    BaseShader: __webpack_require__(/*! ./shader/BaseShader */ \"./node_modules/phaser/src/display/shader/BaseShader.js\"),\r\n    Bounds: __webpack_require__(/*! ./bounds */ \"./node_modules/phaser/src/display/bounds/index.js\"),\r\n    Canvas: __webpack_require__(/*! ./canvas */ \"./node_modules/phaser/src/display/canvas/index.js\"),\r\n    Color: __webpack_require__(/*! ./color */ \"./node_modules/phaser/src/display/color/index.js\"),\r\n    Masks: __webpack_require__(/*! ./mask */ \"./node_modules/phaser/src/display/mask/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2luZGV4LmpzP2VhNTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsaUVBQVM7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsbUZBQXFCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxtRUFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMsbUVBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLGlFQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQywrREFBUTs7QUFFM0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFsaWduOiByZXF1aXJlKCcuL2FsaWduJyksXHJcbiAgICBCYXNlU2hhZGVyOiByZXF1aXJlKCcuL3NoYWRlci9CYXNlU2hhZGVyJyksXHJcbiAgICBCb3VuZHM6IHJlcXVpcmUoJy4vYm91bmRzJyksXHJcbiAgICBDYW52YXM6IHJlcXVpcmUoJy4vY2FudmFzJyksXHJcbiAgICBDb2xvcjogcmVxdWlyZSgnLi9jb2xvcicpLFxyXG4gICAgTWFza3M6IHJlcXVpcmUoJy4vbWFzaycpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/mask/BitmapMask.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/display/mask/BitmapMask.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Bitmap Mask combines the alpha (opacity) of a masked pixel with the alpha of another pixel.\r\n * Unlike the Geometry Mask, which is a clipping path, a Bitmap Mask behaves like an alpha mask,\r\n * not a clipping path. It is only available when using the WebGL Renderer.\r\n *\r\n * A Bitmap Mask can use any Game Object to determine the alpha of each pixel of the masked Game Object(s).\r\n * For any given point of a masked Game Object's texture, the pixel's alpha will be multiplied by the alpha\r\n * of the pixel at the same position in the Bitmap Mask's Game Object. The color of the pixel from the\r\n * Bitmap Mask doesn't matter.\r\n *\r\n * For example, if a pure blue pixel with an alpha of 0.95 is masked with a pure red pixel with an\r\n * alpha of 0.5, the resulting pixel will be pure blue with an alpha of 0.475. Naturally, this means\r\n * that a pixel in the mask with an alpha of 0 will hide the corresponding pixel in all masked Game Objects\r\n *  A pixel with an alpha of 1 in the masked Game Object will receive the same alpha as the\r\n * corresponding pixel in the mask.\r\n *\r\n * The Bitmap Mask's location matches the location of its Game Object, not the location of the\r\n * masked objects. Moving or transforming the underlying Game Object will change the mask\r\n * (and affect the visibility of any masked objects), whereas moving or transforming a masked object\r\n * will not affect the mask.\r\n *\r\n * The Bitmap Mask will not render its Game Object by itself. If the Game Object is not in a\r\n * Scene's display list, it will only be used for the mask and its full texture will not be directly\r\n * visible. Adding the underlying Game Object to a Scene will not cause any problems - it will\r\n * render as a normal Game Object and will also serve as a mask.\r\n *\r\n * @class BitmapMask\r\n * @memberof Phaser.Display.Masks\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which this Bitmap Mask will be used in.\r\n * @param {Phaser.GameObjects.GameObject} renderable - A renderable Game Object that uses a texture, such as a Sprite.\r\n */\r\nvar BitmapMask = new Class({\r\n\r\n    initialize:\r\n\r\n    function BitmapMask (scene, renderable)\r\n    {\r\n        var renderer = scene.sys.game.renderer;\r\n\r\n        /**\r\n         * A reference to either the Canvas or WebGL Renderer that this Mask is using.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.11.0\r\n         */\r\n        this.renderer = renderer;\r\n\r\n        /**\r\n         * A renderable Game Object that uses a texture, such as a Sprite.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#bitmapMask\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.bitmapMask = renderable;\r\n\r\n        /**\r\n         * The texture used for the mask's framebuffer.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#maskTexture\r\n         * @type {WebGLTexture}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.maskTexture = null;\r\n\r\n        /**\r\n         * The texture used for the main framebuffer.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#mainTexture\r\n         * @type {WebGLTexture}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.mainTexture = null;\r\n\r\n        /**\r\n         * Whether the Bitmap Mask is dirty and needs to be updated.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#dirty\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.dirty = true;\r\n\r\n        /**\r\n         * The framebuffer to which a masked Game Object is rendered.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#mainFramebuffer\r\n         * @type {WebGLFramebuffer}\r\n         * @since 3.0.0\r\n         */\r\n        this.mainFramebuffer = null;\r\n\r\n        /**\r\n         * The framebuffer to which the Bitmap Mask's masking Game Object is rendered.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#maskFramebuffer\r\n         * @type {WebGLFramebuffer}\r\n         * @since 3.0.0\r\n         */\r\n        this.maskFramebuffer = null;\r\n\r\n        /**\r\n         * The previous framebuffer set in the renderer before this one was enabled.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#prevFramebuffer\r\n         * @type {WebGLFramebuffer}\r\n         * @since 3.17.0\r\n         */\r\n        this.prevFramebuffer = null;\r\n\r\n        /**\r\n         * Whether to invert the masks alpha.\r\n         *\r\n         * If `true`, the alpha of the masking pixel will be inverted before it's multiplied with the masked pixel. Essentially, this means that a masked area will be visible only if the corresponding area in the mask is invisible.\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#invertAlpha\r\n         * @type {boolean}\r\n         * @since 3.1.2\r\n         */\r\n        this.invertAlpha = false;\r\n\r\n        /**\r\n         * Is this mask a stencil mask?\r\n         *\r\n         * @name Phaser.Display.Masks.BitmapMask#isStencil\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.isStencil = false;\r\n\r\n        if (renderer && renderer.gl)\r\n        {\r\n            var width = renderer.width;\r\n            var height = renderer.height;\r\n            var pot = ((width & (width - 1)) === 0 && (height & (height - 1)) === 0);\r\n            var gl = renderer.gl;\r\n            var wrap = pot ? gl.REPEAT : gl.CLAMP_TO_EDGE;\r\n            var filter = gl.LINEAR;\r\n\r\n            this.mainTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n            this.maskTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n            this.mainFramebuffer = renderer.createFramebuffer(width, height, this.mainTexture, true);\r\n            this.maskFramebuffer = renderer.createFramebuffer(width, height, this.maskTexture, true);\r\n\r\n            scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function (renderer)\r\n            {\r\n                var width = renderer.width;\r\n                var height = renderer.height;\r\n                var pot = ((width & (width - 1)) === 0 && (height & (height - 1)) === 0);\r\n                var gl = renderer.gl;\r\n                var wrap = pot ? gl.REPEAT : gl.CLAMP_TO_EDGE;\r\n                var filter = gl.LINEAR;\r\n\r\n                this.mainTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n                this.maskTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n                this.mainFramebuffer = renderer.createFramebuffer(width, height, this.mainTexture, true);\r\n                this.maskFramebuffer = renderer.createFramebuffer(width, height, this.maskTexture, true);\r\n\r\n            }, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets a new masking Game Object for the Bitmap Mask.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#setBitmap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} renderable - A renderable Game Object that uses a texture, such as a Sprite.\r\n     */\r\n    setBitmap: function (renderable)\r\n    {\r\n        this.bitmapMask = renderable;\r\n    },\r\n\r\n    /**\r\n     * Prepares the WebGL Renderer to render a Game Object with this mask applied.\r\n     *\r\n     * This renders the masking Game Object to the mask framebuffer and switches to the main framebuffer so that the masked Game Object will be rendered to it instead of being rendered directly to the frame.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#preRenderWebGL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The WebGL Renderer to prepare.\r\n     * @param {Phaser.GameObjects.GameObject} maskedObject - The masked Game Object which will be drawn.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to render to.\r\n     */\r\n    preRenderWebGL: function (renderer, maskedObject, camera)\r\n    {\r\n        renderer.pipelines.BitmapMaskPipeline.beginMask(this, maskedObject, camera);\r\n    },\r\n\r\n    /**\r\n     * Finalizes rendering of a masked Game Object.\r\n     *\r\n     * This resets the previously bound framebuffer and switches the WebGL Renderer to the Bitmap Mask Pipeline, which uses a special fragment shader to apply the masking effect.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#postRenderWebGL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The WebGL Renderer to clean up.\r\n     */\r\n    postRenderWebGL: function (renderer, camera)\r\n    {\r\n        renderer.pipelines.BitmapMaskPipeline.endMask(this, camera);\r\n    },\r\n\r\n    /**\r\n     * This is a NOOP method. Bitmap Masks are not supported by the Canvas Renderer.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#preRenderCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Canvas Renderer which would be rendered to.\r\n     * @param {Phaser.GameObjects.GameObject} mask - The masked Game Object which would be rendered.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to render to.\r\n     */\r\n    preRenderCanvas: function ()\r\n    {\r\n        // NOOP\r\n    },\r\n\r\n    /**\r\n     * This is a NOOP method. Bitmap Masks are not supported by the Canvas Renderer.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#postRenderCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Canvas Renderer which would be rendered to.\r\n     */\r\n    postRenderCanvas: function ()\r\n    {\r\n        // NOOP\r\n    },\r\n\r\n    /**\r\n     * Destroys this BitmapMask and nulls any references it holds.\r\n     * \r\n     * Note that if a Game Object is currently using this mask it will _not_ automatically detect you have destroyed it,\r\n     * so be sure to call `clearMask` on any Game Object using it, before destroying it.\r\n     *\r\n     * @method Phaser.Display.Masks.BitmapMask#destroy\r\n     * @since 3.7.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.bitmapMask = null;\r\n\r\n        var renderer = this.renderer;\r\n\r\n        if (renderer && renderer.gl)\r\n        {\r\n            renderer.deleteTexture(this.mainTexture);\r\n            renderer.deleteTexture(this.maskTexture);\r\n            renderer.deleteFramebuffer(this.mainFramebuffer);\r\n            renderer.deleteFramebuffer(this.maskFramebuffer);\r\n        }\r\n\r\n        this.mainTexture = null;\r\n        this.maskTexture = null;\r\n        this.mainFramebuffer = null;\r\n        this.maskFramebuffer = null;\r\n        this.prevFramebuffer = null;\r\n        this.renderer = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BitmapMask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svQml0bWFwTWFzay5qcz8yZGFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHlFQUFtQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRFQUE0RTtBQUMzRixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRFQUE0RTtBQUMzRixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0RUFBNEU7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9tYXNrL0JpdG1hcE1hc2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vY29yZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQml0bWFwIE1hc2sgY29tYmluZXMgdGhlIGFscGhhIChvcGFjaXR5KSBvZiBhIG1hc2tlZCBwaXhlbCB3aXRoIHRoZSBhbHBoYSBvZiBhbm90aGVyIHBpeGVsLlxyXG4gKiBVbmxpa2UgdGhlIEdlb21ldHJ5IE1hc2ssIHdoaWNoIGlzIGEgY2xpcHBpbmcgcGF0aCwgYSBCaXRtYXAgTWFzayBiZWhhdmVzIGxpa2UgYW4gYWxwaGEgbWFzayxcclxuICogbm90IGEgY2xpcHBpbmcgcGF0aC4gSXQgaXMgb25seSBhdmFpbGFibGUgd2hlbiB1c2luZyB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAqXHJcbiAqIEEgQml0bWFwIE1hc2sgY2FuIHVzZSBhbnkgR2FtZSBPYmplY3QgdG8gZGV0ZXJtaW5lIHRoZSBhbHBoYSBvZiBlYWNoIHBpeGVsIG9mIHRoZSBtYXNrZWQgR2FtZSBPYmplY3QocykuXHJcbiAqIEZvciBhbnkgZ2l2ZW4gcG9pbnQgb2YgYSBtYXNrZWQgR2FtZSBPYmplY3QncyB0ZXh0dXJlLCB0aGUgcGl4ZWwncyBhbHBoYSB3aWxsIGJlIG11bHRpcGxpZWQgYnkgdGhlIGFscGhhXHJcbiAqIG9mIHRoZSBwaXhlbCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0aGUgQml0bWFwIE1hc2sncyBHYW1lIE9iamVjdC4gVGhlIGNvbG9yIG9mIHRoZSBwaXhlbCBmcm9tIHRoZVxyXG4gKiBCaXRtYXAgTWFzayBkb2Vzbid0IG1hdHRlci5cclxuICpcclxuICogRm9yIGV4YW1wbGUsIGlmIGEgcHVyZSBibHVlIHBpeGVsIHdpdGggYW4gYWxwaGEgb2YgMC45NSBpcyBtYXNrZWQgd2l0aCBhIHB1cmUgcmVkIHBpeGVsIHdpdGggYW5cclxuICogYWxwaGEgb2YgMC41LCB0aGUgcmVzdWx0aW5nIHBpeGVsIHdpbGwgYmUgcHVyZSBibHVlIHdpdGggYW4gYWxwaGEgb2YgMC40NzUuIE5hdHVyYWxseSwgdGhpcyBtZWFuc1xyXG4gKiB0aGF0IGEgcGl4ZWwgaW4gdGhlIG1hc2sgd2l0aCBhbiBhbHBoYSBvZiAwIHdpbGwgaGlkZSB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBpbiBhbGwgbWFza2VkIEdhbWUgT2JqZWN0c1xyXG4gKiAgQSBwaXhlbCB3aXRoIGFuIGFscGhhIG9mIDEgaW4gdGhlIG1hc2tlZCBHYW1lIE9iamVjdCB3aWxsIHJlY2VpdmUgdGhlIHNhbWUgYWxwaGEgYXMgdGhlXHJcbiAqIGNvcnJlc3BvbmRpbmcgcGl4ZWwgaW4gdGhlIG1hc2suXHJcbiAqXHJcbiAqIFRoZSBCaXRtYXAgTWFzaydzIGxvY2F0aW9uIG1hdGNoZXMgdGhlIGxvY2F0aW9uIG9mIGl0cyBHYW1lIE9iamVjdCwgbm90IHRoZSBsb2NhdGlvbiBvZiB0aGVcclxuICogbWFza2VkIG9iamVjdHMuIE1vdmluZyBvciB0cmFuc2Zvcm1pbmcgdGhlIHVuZGVybHlpbmcgR2FtZSBPYmplY3Qgd2lsbCBjaGFuZ2UgdGhlIG1hc2tcclxuICogKGFuZCBhZmZlY3QgdGhlIHZpc2liaWxpdHkgb2YgYW55IG1hc2tlZCBvYmplY3RzKSwgd2hlcmVhcyBtb3Zpbmcgb3IgdHJhbnNmb3JtaW5nIGEgbWFza2VkIG9iamVjdFxyXG4gKiB3aWxsIG5vdCBhZmZlY3QgdGhlIG1hc2suXHJcbiAqXHJcbiAqIFRoZSBCaXRtYXAgTWFzayB3aWxsIG5vdCByZW5kZXIgaXRzIEdhbWUgT2JqZWN0IGJ5IGl0c2VsZi4gSWYgdGhlIEdhbWUgT2JqZWN0IGlzIG5vdCBpbiBhXHJcbiAqIFNjZW5lJ3MgZGlzcGxheSBsaXN0LCBpdCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdGhlIG1hc2sgYW5kIGl0cyBmdWxsIHRleHR1cmUgd2lsbCBub3QgYmUgZGlyZWN0bHlcclxuICogdmlzaWJsZS4gQWRkaW5nIHRoZSB1bmRlcmx5aW5nIEdhbWUgT2JqZWN0IHRvIGEgU2NlbmUgd2lsbCBub3QgY2F1c2UgYW55IHByb2JsZW1zIC0gaXQgd2lsbFxyXG4gKiByZW5kZXIgYXMgYSBub3JtYWwgR2FtZSBPYmplY3QgYW5kIHdpbGwgYWxzbyBzZXJ2ZSBhcyBhIG1hc2suXHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBNYXNrXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5NYXNrc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB3aGljaCB0aGlzIEJpdG1hcCBNYXNrIHdpbGwgYmUgdXNlZCBpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gcmVuZGVyYWJsZSAtIEEgcmVuZGVyYWJsZSBHYW1lIE9iamVjdCB0aGF0IHVzZXMgYSB0ZXh0dXJlLCBzdWNoIGFzIGEgU3ByaXRlLlxyXG4gKi9cclxudmFyIEJpdG1hcE1hc2sgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQml0bWFwTWFzayAoc2NlbmUsIHJlbmRlcmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhpcyBNYXNrIGlzIHVzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgdXNlcyBhIHRleHR1cmUsIHN1Y2ggYXMgYSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI2JpdG1hcE1hc2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iaXRtYXBNYXNrID0gcmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIG1hc2sncyBmcmFtZWJ1ZmZlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjbWFza1RleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xUZXh0dXJlfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hc2tUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIG1haW4gZnJhbWVidWZmZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI21haW5UZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYWluVGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEJpdG1hcCBNYXNrIGlzIGRpcnR5IGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZyYW1lYnVmZmVyIHRvIHdoaWNoIGEgbWFza2VkIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNtYWluRnJhbWVidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1haW5GcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmcmFtZWJ1ZmZlciB0byB3aGljaCB0aGUgQml0bWFwIE1hc2sncyBtYXNraW5nIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNtYXNrRnJhbWVidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hc2tGcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcmV2aW91cyBmcmFtZWJ1ZmZlciBzZXQgaW4gdGhlIHJlbmRlcmVyIGJlZm9yZSB0aGlzIG9uZSB3YXMgZW5hYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjcHJldkZyYW1lYnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMRnJhbWVidWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldkZyYW1lYnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBpbnZlcnQgdGhlIG1hc2tzIGFscGhhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSWYgYHRydWVgLCB0aGUgYWxwaGEgb2YgdGhlIG1hc2tpbmcgcGl4ZWwgd2lsbCBiZSBpbnZlcnRlZCBiZWZvcmUgaXQncyBtdWx0aXBsaWVkIHdpdGggdGhlIG1hc2tlZCBwaXhlbC4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCBhIG1hc2tlZCBhcmVhIHdpbGwgYmUgdmlzaWJsZSBvbmx5IGlmIHRoZSBjb3JyZXNwb25kaW5nIGFyZWEgaW4gdGhlIG1hc2sgaXMgaW52aXNpYmxlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNpbnZlcnRBbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEuMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52ZXJ0QWxwaGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBtYXNrIGEgc3RlbmNpbCBtYXNrP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNpc1N0ZW5jaWxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1N0ZW5jaWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBwb3QgPSAoKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHZhciB3cmFwID0gcG90ID8gZ2wuUkVQRUFUIDogZ2wuQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGdsLkxJTkVBUjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFpblRleHR1cmUgPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZmlsdGVyLCBmaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tUZXh0dXJlID0gcmVuZGVyZXIuY3JlYXRlVGV4dHVyZTJEKDAsIGZpbHRlciwgZmlsdGVyLCB3cmFwLCB3cmFwLCBnbC5SR0JBLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5tYWluRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1haW5UZXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5tYXNrRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1hc2tUZXh0dXJlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5nYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLkNPTlRFWFRfUkVTVE9SRUQsIGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvdCA9ICgod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgd3JhcCA9IHBvdCA/IGdsLlJFUEVBVCA6IGdsLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gZ2wuTElORUFSO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFpblRleHR1cmUgPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZmlsdGVyLCBmaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrVGV4dHVyZSA9IHJlbmRlcmVyLmNyZWF0ZVRleHR1cmUyRCgwLCBmaWx0ZXIsIGZpbHRlciwgd3JhcCwgd3JhcCwgZ2wuUkdCQSwgbnVsbCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5GcmFtZWJ1ZmZlciA9IHJlbmRlcmVyLmNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHRoaXMubWFpblRleHR1cmUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1hc2tUZXh0dXJlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IG1hc2tpbmcgR2FtZSBPYmplY3QgZm9yIHRoZSBCaXRtYXAgTWFzay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjc2V0Qml0bWFwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSByZW5kZXJhYmxlIC0gQSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgdXNlcyBhIHRleHR1cmUsIHN1Y2ggYXMgYSBTcHJpdGUuXHJcbiAgICAgKi9cclxuICAgIHNldEJpdG1hcDogZnVuY3Rpb24gKHJlbmRlcmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5iaXRtYXBNYXNrID0gcmVuZGVyYWJsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlcyB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gcmVuZGVyIGEgR2FtZSBPYmplY3Qgd2l0aCB0aGlzIG1hc2sgYXBwbGllZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHJlbmRlcnMgdGhlIG1hc2tpbmcgR2FtZSBPYmplY3QgdG8gdGhlIG1hc2sgZnJhbWVidWZmZXIgYW5kIHN3aXRjaGVzIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyIHNvIHRoYXQgdGhlIG1hc2tlZCBHYW1lIE9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIHRvIGl0IGluc3RlYWQgb2YgYmVpbmcgcmVuZGVyZWQgZGlyZWN0bHkgdG8gdGhlIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNwcmVSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIHRvIHByZXBhcmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBtYXNrZWRPYmplY3QgLSBUaGUgbWFza2VkIEdhbWUgT2JqZWN0IHdoaWNoIHdpbGwgYmUgZHJhd24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRvIHJlbmRlciB0by5cclxuICAgICAqL1xyXG4gICAgcHJlUmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWFza2VkT2JqZWN0LCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIucGlwZWxpbmVzLkJpdG1hcE1hc2tQaXBlbGluZS5iZWdpbk1hc2sodGhpcywgbWFza2VkT2JqZWN0LCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmFsaXplcyByZW5kZXJpbmcgb2YgYSBtYXNrZWQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyByZXNldHMgdGhlIHByZXZpb3VzbHkgYm91bmQgZnJhbWVidWZmZXIgYW5kIHN3aXRjaGVzIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgQml0bWFwIE1hc2sgUGlwZWxpbmUsIHdoaWNoIHVzZXMgYSBzcGVjaWFsIGZyYWdtZW50IHNoYWRlciB0byBhcHBseSB0aGUgbWFza2luZyBlZmZlY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI3Bvc3RSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIHRvIGNsZWFuIHVwLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJlbmRlcmVyLnBpcGVsaW5lcy5CaXRtYXBNYXNrUGlwZWxpbmUuZW5kTWFzayh0aGlzLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSBOT09QIG1ldGhvZC4gQml0bWFwIE1hc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDYW52YXMgUmVuZGVyZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI3ByZVJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIENhbnZhcyBSZW5kZXJlciB3aGljaCB3b3VsZCBiZSByZW5kZXJlZCB0by5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBUaGUgbWFza2VkIEdhbWUgT2JqZWN0IHdoaWNoIHdvdWxkIGJlIHJlbmRlcmVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byByZW5kZXIgdG8uXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBOT09QXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBhIE5PT1AgbWV0aG9kLiBCaXRtYXAgTWFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjcG9zdFJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIENhbnZhcyBSZW5kZXJlciB3aGljaCB3b3VsZCBiZSByZW5kZXJlZCB0by5cclxuICAgICAqL1xyXG4gICAgcG9zdFJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBOT09QXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCaXRtYXBNYXNrIGFuZCBudWxscyBhbnkgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGlmIGEgR2FtZSBPYmplY3QgaXMgY3VycmVudGx5IHVzaW5nIHRoaXMgbWFzayBpdCB3aWxsIF9ub3RfIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHlvdSBoYXZlIGRlc3Ryb3llZCBpdCxcclxuICAgICAqIHNvIGJlIHN1cmUgdG8gY2FsbCBgY2xlYXJNYXNrYCBvbiBhbnkgR2FtZSBPYmplY3QgdXNpbmcgaXQsIGJlZm9yZSBkZXN0cm95aW5nIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJpdG1hcE1hc2sgPSBudWxsO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMubWFpblRleHR1cmUpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMubWFza1RleHR1cmUpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLm1haW5GcmFtZWJ1ZmZlcik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMubWFza0ZyYW1lYnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFpblRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFza1RleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFpbkZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hc2tGcmFtZWJ1ZmZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcmV2RnJhbWVidWZmZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcE1hc2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/BitmapMask.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/mask/GeometryMask.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/mask/GeometryMask.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Geometry Mask can be applied to a Game Object to hide any pixels of it which don't intersect\r\n * a visible pixel from the geometry mask. The mask is essentially a clipping path which can only\r\n * make a masked pixel fully visible or fully invisible without changing its alpha (opacity).\r\n *\r\n * A Geometry Mask uses a Graphics Game Object to determine which pixels of the masked Game Object(s)\r\n * should be clipped. For any given point of a masked Game Object's texture, the pixel will only be displayed\r\n * if the Graphics Game Object of the Geometry Mask has a visible pixel at the same position. The color and\r\n * alpha of the pixel from the Geometry Mask do not matter.\r\n *\r\n * The Geometry Mask's location matches the location of its Graphics object, not the location of the masked objects.\r\n * Moving or transforming the underlying Graphics object will change the mask (and affect the visibility\r\n * of any masked objects), whereas moving or transforming a masked object will not affect the mask.\r\n * You can think of the Geometry Mask (or rather, of its Graphics object) as an invisible curtain placed\r\n * in front of all masked objects which has its own visual properties and, naturally, respects the camera's\r\n * visual properties, but isn't affected by and doesn't follow the masked objects by itself.\r\n *\r\n * @class GeometryMask\r\n * @memberof Phaser.Display.Masks\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - This parameter is not used.\r\n * @param {Phaser.GameObjects.Graphics} graphicsGeometry - The Graphics Game Object to use for the Geometry Mask. Doesn't have to be in the Display List.\r\n */\r\nvar GeometryMask = new Class({\r\n\r\n    initialize:\r\n\r\n    function GeometryMask (scene, graphicsGeometry)\r\n    {\r\n        /**\r\n         * The Graphics object which describes the Geometry Mask.\r\n         *\r\n         * @name Phaser.Display.Masks.GeometryMask#geometryMask\r\n         * @type {Phaser.GameObjects.Graphics}\r\n         * @since 3.0.0\r\n         */\r\n        this.geometryMask = graphicsGeometry;\r\n\r\n        /**\r\n         * Similar to the BitmapMasks invertAlpha setting this to true will then hide all pixels\r\n         * drawn to the Geometry Mask.\r\n         *\r\n         * @name Phaser.Display.Masks.GeometryMask#invertAlpha\r\n         * @type {boolean}\r\n         * @since 3.16.0\r\n         */\r\n        this.invertAlpha = false;\r\n\r\n        /**\r\n         * Is this mask a stencil mask?\r\n         *\r\n         * @name Phaser.Display.Masks.GeometryMask#isStencil\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.isStencil = true;\r\n\r\n        /**\r\n         * The current stencil level.\r\n         *\r\n         * @name Phaser.Display.Masks.GeometryMask#level\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this.level = 0;\r\n    },\r\n\r\n    /**\r\n     * Sets a new Graphics object for the Geometry Mask.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#setShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphicsGeometry - The Graphics object which will be used for the Geometry Mask.\r\n     * \r\n     * @return {this} This Geometry Mask\r\n     */\r\n    setShape: function (graphicsGeometry)\r\n    {\r\n        this.geometryMask = graphicsGeometry;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the `invertAlpha` property of this Geometry Mask.\r\n     * Inverting the alpha essentially flips the way the mask works.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#setInvertAlpha\r\n     * @since 3.17.0\r\n     *\r\n     * @param {boolean} [value=true] - Invert the alpha of this mask?\r\n     * \r\n     * @return {this} This Geometry Mask\r\n     */\r\n    setInvertAlpha: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.invertAlpha = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Renders the Geometry Mask's underlying Graphics object to the OpenGL stencil buffer and enables the stencil test, which clips rendered pixels according to the mask.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#preRenderWebGL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw to.\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object being rendered.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n     */\r\n    preRenderWebGL: function (renderer, child, camera)\r\n    {\r\n        var gl = renderer.gl;\r\n\r\n        //  Force flushing before drawing to stencil buffer\r\n        renderer.flush();\r\n\r\n        if (renderer.maskStack.length === 0)\r\n        {\r\n            gl.enable(gl.STENCIL_TEST);\r\n            gl.clear(gl.STENCIL_BUFFER_BIT);\r\n\r\n            renderer.maskCount = 0;\r\n        }\r\n\r\n        if (renderer.currentCameraMask.mask !== this)\r\n        {\r\n            renderer.currentMask.mask = this;\r\n        }\r\n\r\n        renderer.maskStack.push({ mask: this, camera: camera });\r\n\r\n        this.applyStencil(renderer, camera, true);\r\n\r\n        renderer.maskCount++;\r\n    },\r\n\r\n    /**\r\n     * Applies the current stencil mask to the renderer.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#applyStencil\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw to.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n     * @param {boolean} inc - Is this an INCR stencil or a DECR stencil?\r\n     */\r\n    applyStencil: function (renderer, camera, inc)\r\n    {\r\n        var gl = renderer.gl;\r\n        var geometryMask = this.geometryMask;\r\n        var level = renderer.maskCount;\r\n\r\n        gl.colorMask(false, false, false, false);\r\n\r\n        if (inc)\r\n        {\r\n            gl.stencilFunc(gl.EQUAL, level, 0xFF);\r\n            gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);\r\n        }\r\n        else\r\n        {\r\n            gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);\r\n            gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);\r\n        }\r\n\r\n        //  Write stencil buffer\r\n        geometryMask.renderWebGL(renderer, geometryMask, 0, camera);\r\n\r\n        renderer.flush();\r\n\r\n        gl.colorMask(true, true, true, true);\r\n        gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\r\n\r\n        if (inc)\r\n        {\r\n            if (this.invertAlpha)\r\n            {\r\n                gl.stencilFunc(gl.NOTEQUAL, level + 1, 0xFF);\r\n            }\r\n            else\r\n            {\r\n                gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);\r\n            }\r\n        }\r\n        else if (this.invertAlpha)\r\n        {\r\n            gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);\r\n        }\r\n        else\r\n        {\r\n            gl.stencilFunc(gl.EQUAL, level, 0xFF);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Flushes all rendered pixels and disables the stencil test of a WebGL context, thus disabling the mask for it.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#postRenderWebGL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw flush.\r\n     */\r\n    postRenderWebGL: function (renderer)\r\n    {\r\n        var gl = renderer.gl;\r\n\r\n        renderer.maskStack.pop();\r\n\r\n        renderer.maskCount--;\r\n\r\n        if (renderer.maskStack.length === 0)\r\n        {\r\n            //  If this is the only mask in the stack, flush and disable\r\n            renderer.flush();\r\n\r\n            renderer.currentMask.mask = null;\r\n\r\n            gl.disable(gl.STENCIL_TEST);\r\n        }\r\n        else\r\n        {\r\n            //  Force flush before disabling stencil test\r\n            renderer.flush();\r\n\r\n            var prev = renderer.maskStack[renderer.maskStack.length - 1];\r\n\r\n            prev.mask.applyStencil(renderer, prev.camera, false);\r\n\r\n            if (renderer.currentCameraMask.mask !== prev.mask)\r\n            {\r\n                renderer.currentMask.mask = prev.mask;\r\n                renderer.currentMask.camera = prev.camera;\r\n            }\r\n            else\r\n            {\r\n                renderer.currentMask.mask = null;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the clipping path of a 2D canvas context to the Geometry Mask's underlying Graphics object.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#preRenderCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - The Canvas Renderer instance to set the clipping path on.\r\n     * @param {Phaser.GameObjects.GameObject} mask - The Game Object being rendered.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n     */\r\n    preRenderCanvas: function (renderer, mask, camera)\r\n    {\r\n        var geometryMask = this.geometryMask;\r\n\r\n        renderer.currentContext.save();\r\n\r\n        geometryMask.renderCanvas(renderer, geometryMask, 0, camera, null, null, true);\r\n\r\n        renderer.currentContext.clip();\r\n    },\r\n\r\n    /**\r\n     * Restore the canvas context's previous clipping path, thus turning off the mask for it.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#postRenderCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - The Canvas Renderer instance being restored.\r\n     */\r\n    postRenderCanvas: function (renderer)\r\n    {\r\n        renderer.currentContext.restore();\r\n    },\r\n\r\n    /**\r\n     * Destroys this GeometryMask and nulls any references it holds.\r\n     *\r\n     * Note that if a Game Object is currently using this mask it will _not_ automatically detect you have destroyed it,\r\n     * so be sure to call `clearMask` on any Game Object using it, before destroying it.\r\n     *\r\n     * @method Phaser.Display.Masks.GeometryMask#destroy\r\n     * @since 3.7.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.geometryMask = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = GeometryMask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svR2VvbWV0cnlNYXNrLmpzPzYyOTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyw2QkFBNkI7O0FBRTlEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svR2VvbWV0cnlNYXNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBHZW9tZXRyeSBNYXNrIGNhbiBiZSBhcHBsaWVkIHRvIGEgR2FtZSBPYmplY3QgdG8gaGlkZSBhbnkgcGl4ZWxzIG9mIGl0IHdoaWNoIGRvbid0IGludGVyc2VjdFxyXG4gKiBhIHZpc2libGUgcGl4ZWwgZnJvbSB0aGUgZ2VvbWV0cnkgbWFzay4gVGhlIG1hc2sgaXMgZXNzZW50aWFsbHkgYSBjbGlwcGluZyBwYXRoIHdoaWNoIGNhbiBvbmx5XHJcbiAqIG1ha2UgYSBtYXNrZWQgcGl4ZWwgZnVsbHkgdmlzaWJsZSBvciBmdWxseSBpbnZpc2libGUgd2l0aG91dCBjaGFuZ2luZyBpdHMgYWxwaGEgKG9wYWNpdHkpLlxyXG4gKlxyXG4gKiBBIEdlb21ldHJ5IE1hc2sgdXNlcyBhIEdyYXBoaWNzIEdhbWUgT2JqZWN0IHRvIGRldGVybWluZSB3aGljaCBwaXhlbHMgb2YgdGhlIG1hc2tlZCBHYW1lIE9iamVjdChzKVxyXG4gKiBzaG91bGQgYmUgY2xpcHBlZC4gRm9yIGFueSBnaXZlbiBwb2ludCBvZiBhIG1hc2tlZCBHYW1lIE9iamVjdCdzIHRleHR1cmUsIHRoZSBwaXhlbCB3aWxsIG9ubHkgYmUgZGlzcGxheWVkXHJcbiAqIGlmIHRoZSBHcmFwaGljcyBHYW1lIE9iamVjdCBvZiB0aGUgR2VvbWV0cnkgTWFzayBoYXMgYSB2aXNpYmxlIHBpeGVsIGF0IHRoZSBzYW1lIHBvc2l0aW9uLiBUaGUgY29sb3IgYW5kXHJcbiAqIGFscGhhIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBHZW9tZXRyeSBNYXNrIGRvIG5vdCBtYXR0ZXIuXHJcbiAqXHJcbiAqIFRoZSBHZW9tZXRyeSBNYXNrJ3MgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24gb2YgaXRzIEdyYXBoaWNzIG9iamVjdCwgbm90IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWFza2VkIG9iamVjdHMuXHJcbiAqIE1vdmluZyBvciB0cmFuc2Zvcm1pbmcgdGhlIHVuZGVybHlpbmcgR3JhcGhpY3Mgb2JqZWN0IHdpbGwgY2hhbmdlIHRoZSBtYXNrIChhbmQgYWZmZWN0IHRoZSB2aXNpYmlsaXR5XHJcbiAqIG9mIGFueSBtYXNrZWQgb2JqZWN0cyksIHdoZXJlYXMgbW92aW5nIG9yIHRyYW5zZm9ybWluZyBhIG1hc2tlZCBvYmplY3Qgd2lsbCBub3QgYWZmZWN0IHRoZSBtYXNrLlxyXG4gKiBZb3UgY2FuIHRoaW5rIG9mIHRoZSBHZW9tZXRyeSBNYXNrIChvciByYXRoZXIsIG9mIGl0cyBHcmFwaGljcyBvYmplY3QpIGFzIGFuIGludmlzaWJsZSBjdXJ0YWluIHBsYWNlZFxyXG4gKiBpbiBmcm9udCBvZiBhbGwgbWFza2VkIG9iamVjdHMgd2hpY2ggaGFzIGl0cyBvd24gdmlzdWFsIHByb3BlcnRpZXMgYW5kLCBuYXR1cmFsbHksIHJlc3BlY3RzIHRoZSBjYW1lcmEnc1xyXG4gKiB2aXN1YWwgcHJvcGVydGllcywgYnV0IGlzbid0IGFmZmVjdGVkIGJ5IGFuZCBkb2Vzbid0IGZvbGxvdyB0aGUgbWFza2VkIG9iamVjdHMgYnkgaXRzZWxmLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2VvbWV0cnlNYXNrXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5NYXNrc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3NHZW9tZXRyeSAtIFRoZSBHcmFwaGljcyBHYW1lIE9iamVjdCB0byB1c2UgZm9yIHRoZSBHZW9tZXRyeSBNYXNrLiBEb2Vzbid0IGhhdmUgdG8gYmUgaW4gdGhlIERpc3BsYXkgTGlzdC5cclxuICovXHJcbnZhciBHZW9tZXRyeU1hc2sgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2VvbWV0cnlNYXNrIChzY2VuZSwgZ3JhcGhpY3NHZW9tZXRyeSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IHdoaWNoIGRlc2NyaWJlcyB0aGUgR2VvbWV0cnkgTWFzay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayNnZW9tZXRyeU1hc2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnlNYXNrID0gZ3JhcGhpY3NHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2ltaWxhciB0byB0aGUgQml0bWFwTWFza3MgaW52ZXJ0QWxwaGEgc2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB0aGVuIGhpZGUgYWxsIHBpeGVsc1xyXG4gICAgICAgICAqIGRyYXduIHRvIHRoZSBHZW9tZXRyeSBNYXNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2ludmVydEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52ZXJ0QWxwaGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBtYXNrIGEgc3RlbmNpbCBtYXNrP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2lzU3RlbmNpbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzU3RlbmNpbCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0ZW5jaWwgbGV2ZWwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjbGV2ZWxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxldmVsID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCBmb3IgdGhlIEdlb21ldHJ5IE1hc2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjc2V0U2hhcGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBncmFwaGljc0dlb21ldHJ5IC0gVGhlIEdyYXBoaWNzIG9iamVjdCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBHZW9tZXRyeSBNYXNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdlb21ldHJ5IE1hc2tcclxuICAgICAqL1xyXG4gICAgc2V0U2hhcGU6IGZ1bmN0aW9uIChncmFwaGljc0dlb21ldHJ5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnlNYXNrID0gZ3JhcGhpY3NHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGludmVydEFscGhhYCBwcm9wZXJ0eSBvZiB0aGlzIEdlb21ldHJ5IE1hc2suXHJcbiAgICAgKiBJbnZlcnRpbmcgdGhlIGFscGhhIGVzc2VudGlhbGx5IGZsaXBzIHRoZSB3YXkgdGhlIG1hc2sgd29ya3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjc2V0SW52ZXJ0QWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIEludmVydCB0aGUgYWxwaGEgb2YgdGhpcyBtYXNrP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdlb21ldHJ5IE1hc2tcclxuICAgICAqL1xyXG4gICAgc2V0SW52ZXJ0QWxwaGE6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnZlcnRBbHBoYSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXJzIHRoZSBHZW9tZXRyeSBNYXNrJ3MgdW5kZXJseWluZyBHcmFwaGljcyBvYmplY3QgdG8gdGhlIE9wZW5HTCBzdGVuY2lsIGJ1ZmZlciBhbmQgZW5hYmxlcyB0aGUgc3RlbmNpbCB0ZXN0LCB3aGljaCBjbGlwcyByZW5kZXJlZCBwaXhlbHMgYWNjb3JkaW5nIHRvIHRoZSBtYXNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI3ByZVJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIFRoZSBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZSB0byBkcmF3IHRvLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICovXHJcbiAgICBwcmVSZW5kZXJXZWJHTDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjaGlsZCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAvLyAgRm9yY2UgZmx1c2hpbmcgYmVmb3JlIGRyYXdpbmcgdG8gc3RlbmNpbCBidWZmZXJcclxuICAgICAgICByZW5kZXJlci5mbHVzaCgpO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIubWFza1N0YWNrLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIubWFza0NvdW50ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5jdXJyZW50Q2FtZXJhTWFzay5tYXNrICE9PSB0aGlzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudE1hc2subWFzayA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5tYXNrU3RhY2sucHVzaCh7IG1hc2s6IHRoaXMsIGNhbWVyYTogY2FtZXJhIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5U3RlbmNpbChyZW5kZXJlciwgY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIubWFza0NvdW50Kys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgY3VycmVudCBzdGVuY2lsIG1hc2sgdG8gdGhlIHJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2FwcGx5U3RlbmNpbFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlIHRvIGRyYXcgdG8uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmMgLSBJcyB0aGlzIGFuIElOQ1Igc3RlbmNpbCBvciBhIERFQ1Igc3RlbmNpbD9cclxuICAgICAqL1xyXG4gICAgYXBwbHlTdGVuY2lsOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgaW5jKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeU1hc2sgPSB0aGlzLmdlb21ldHJ5TWFzaztcclxuICAgICAgICB2YXIgbGV2ZWwgPSByZW5kZXJlci5tYXNrQ291bnQ7XHJcblxyXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuSU5DUik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCBsZXZlbCArIDEsIDB4RkYpO1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuREVDUik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgV3JpdGUgc3RlbmNpbCBidWZmZXJcclxuICAgICAgICBnZW9tZXRyeU1hc2sucmVuZGVyV2ViR0wocmVuZGVyZXIsIGdlb21ldHJ5TWFzaywgMCwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQKTtcclxuXHJcbiAgICAgICAgaWYgKGluYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludmVydEFscGhhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5OT1RFUVVBTCwgbGV2ZWwgKyAxLCAweEZGKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCBsZXZlbCArIDEsIDB4RkYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaW52ZXJ0QWxwaGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5OT1RFUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbHVzaGVzIGFsbCByZW5kZXJlZCBwaXhlbHMgYW5kIGRpc2FibGVzIHRoZSBzdGVuY2lsIHRlc3Qgb2YgYSBXZWJHTCBjb250ZXh0LCB0aHVzIGRpc2FibGluZyB0aGUgbWFzayBmb3IgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjcG9zdFJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIFRoZSBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZSB0byBkcmF3IGZsdXNoLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIubWFza1N0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICByZW5kZXJlci5tYXNrQ291bnQtLTtcclxuXHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLm1hc2tTdGFjay5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgdGhpcyBpcyB0aGUgb25seSBtYXNrIGluIHRoZSBzdGFjaywgZmx1c2ggYW5kIGRpc2FibGVcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmN1cnJlbnRNYXNrLm1hc2sgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRm9yY2UgZmx1c2ggYmVmb3JlIGRpc2FibGluZyBzdGVuY2lsIHRlc3RcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcmV2ID0gcmVuZGVyZXIubWFza1N0YWNrW3JlbmRlcmVyLm1hc2tTdGFjay5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIHByZXYubWFzay5hcHBseVN0ZW5jaWwocmVuZGVyZXIsIHByZXYuY2FtZXJhLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuY3VycmVudENhbWVyYU1hc2subWFzayAhPT0gcHJldi5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jdXJyZW50TWFzay5tYXNrID0gcHJldi5tYXNrO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudE1hc2suY2FtZXJhID0gcHJldi5jYW1lcmE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jdXJyZW50TWFzay5tYXNrID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjbGlwcGluZyBwYXRoIG9mIGEgMkQgY2FudmFzIGNvbnRleHQgdG8gdGhlIEdlb21ldHJ5IE1hc2sncyB1bmRlcmx5aW5nIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayNwcmVSZW5kZXJDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBUaGUgQ2FudmFzIFJlbmRlcmVyIGluc3RhbmNlIHRvIHNldCB0aGUgY2xpcHBpbmcgcGF0aCBvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICovXHJcbiAgICBwcmVSZW5kZXJDYW52YXM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWFzaywgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeU1hc2sgPSB0aGlzLmdlb21ldHJ5TWFzaztcclxuXHJcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudENvbnRleHQuc2F2ZSgpO1xyXG5cclxuICAgICAgICBnZW9tZXRyeU1hc2sucmVuZGVyQ2FudmFzKHJlbmRlcmVyLCBnZW9tZXRyeU1hc2ssIDAsIGNhbWVyYSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0LmNsaXAoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlIHRoZSBjYW52YXMgY29udGV4dCdzIHByZXZpb3VzIGNsaXBwaW5nIHBhdGgsIHRodXMgdHVybmluZyBvZmYgdGhlIG1hc2sgZm9yIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI3Bvc3RSZW5kZXJDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBUaGUgQ2FudmFzIFJlbmRlcmVyIGluc3RhbmNlIGJlaW5nIHJlc3RvcmVkLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyQ2FudmFzOiBmdW5jdGlvbiAocmVuZGVyZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudENvbnRleHQucmVzdG9yZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2VvbWV0cnlNYXNrIGFuZCBudWxscyBhbnkgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlIHRoYXQgaWYgYSBHYW1lIE9iamVjdCBpcyBjdXJyZW50bHkgdXNpbmcgdGhpcyBtYXNrIGl0IHdpbGwgX25vdF8gYXV0b21hdGljYWxseSBkZXRlY3QgeW91IGhhdmUgZGVzdHJveWVkIGl0LFxyXG4gICAgICogc28gYmUgc3VyZSB0byBjYWxsIGBjbGVhck1hc2tgIG9uIGFueSBHYW1lIE9iamVjdCB1c2luZyBpdCwgYmVmb3JlIGRlc3Ryb3lpbmcgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeU1hc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdlb21ldHJ5TWFzaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/GeometryMask.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/mask/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/display/mask/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Masks\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BitmapMask: __webpack_require__(/*! ./BitmapMask */ \"./node_modules/phaser/src/display/mask/BitmapMask.js\"),\r\n    GeometryMask: __webpack_require__(/*! ./GeometryMask */ \"./node_modules/phaser/src/display/mask/GeometryMask.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svaW5kZXguanM/YzRiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFnQjs7QUFFMUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5Lk1hc2tzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQml0bWFwTWFzazogcmVxdWlyZSgnLi9CaXRtYXBNYXNrJyksXHJcbiAgICBHZW9tZXRyeU1hc2s6IHJlcXVpcmUoJy4vR2VvbWV0cnlNYXNrJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/display/shader/BaseShader.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/display/shader/BaseShader.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A BaseShader is a small resource class that contains the data required for a WebGL Shader to be created.\r\n * \r\n * It contains the raw source code to the fragment and vertex shader, as well as an object that defines\r\n * the uniforms the shader requires, if any.\r\n * \r\n * BaseShaders are stored in the Shader Cache, available in a Scene via `this.cache.shaders` and are referenced\r\n * by a unique key-based string. Retrieve them via `this.cache.shaders.get(key)`.\r\n * \r\n * BaseShaders are created automatically by the GLSL File Loader when loading an external shader resource.\r\n * They can also be created at runtime, allowing you to use dynamically generated shader source code.\r\n * \r\n * Default fragment and vertex source is used if not provided in the constructor, setting-up a basic shader,\r\n * suitable for debug rendering.\r\n *\r\n * @class BaseShader\r\n * @memberof Phaser.Display\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {string} key - The key of this shader. Must be unique within the shader cache.\r\n * @param {string} [fragmentSrc] - The fragment source for the shader.\r\n * @param {string} [vertexSrc] - The vertex source for the shader.\r\n * @param {any} [uniforms] - Optional object defining the uniforms the shader uses.\r\n */\r\nvar BaseShader = new Class({\r\n\r\n    initialize:\r\n\r\n    function BaseShader (key, fragmentSrc, vertexSrc, uniforms)\r\n    {\r\n        if (!fragmentSrc || fragmentSrc === '')\r\n        {\r\n            fragmentSrc = [\r\n                'precision mediump float;',\r\n\r\n                'uniform vec2 resolution;',\r\n\r\n                'varying vec2 fragCoord;',\r\n\r\n                'void main () {',\r\n                '    vec2 uv = fragCoord / resolution.xy;',\r\n                '    gl_FragColor = vec4(uv.xyx, 1.0);',\r\n                '}'\r\n            ].join('\\n');\r\n        }\r\n\r\n        if (!vertexSrc || vertexSrc === '')\r\n        {\r\n            vertexSrc = [\r\n                'precision mediump float;',\r\n\r\n                'uniform mat4 uProjectionMatrix;',\r\n                'uniform mat4 uViewMatrix;',\r\n                'uniform vec2 uResolution;',\r\n\r\n                'attribute vec2 inPosition;',\r\n\r\n                'varying vec2 fragCoord;',\r\n\r\n                'void main () {',\r\n                'gl_Position = uProjectionMatrix * uViewMatrix * vec4(inPosition, 1.0, 1.0);',\r\n                'fragCoord = vec2(inPosition.x, uResolution.y - inPosition.y);',\r\n                '}'\r\n            ].join('\\n');\r\n        }\r\n\r\n        if (uniforms === undefined) { uniforms = null; }\r\n\r\n        /**\r\n         * The key of this shader, unique within the shader cache of this Phaser game instance.\r\n         *\r\n         * @name Phaser.Display.BaseShader#key\r\n         * @type {string}\r\n         * @since 3.17.0\r\n         */\r\n        this.key = key;\r\n\r\n        /**\r\n         * The source code, as a string, of the fragment shader being used.\r\n         *\r\n         * @name Phaser.Display.BaseShader#fragmentSrc\r\n         * @type {string}\r\n         * @since 3.17.0\r\n         */\r\n        this.fragmentSrc = fragmentSrc;\r\n\r\n        /**\r\n         * The source code, as a string, of the vertex shader being used.\r\n         *\r\n         * @name Phaser.Display.BaseShader#vertexSrc\r\n         * @type {string}\r\n         * @since 3.17.0\r\n         */\r\n        this.vertexSrc = vertexSrc;\r\n\r\n        /**\r\n         * The default uniforms for this shader.\r\n         *\r\n         * @name Phaser.Display.BaseShader#uniforms\r\n         * @type {?any}\r\n         * @since 3.17.0\r\n         */\r\n        this.uniforms = uniforms;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BaseShader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L3NoYWRlci9CYXNlU2hhZGVyLmpzP2FmODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekMseUNBQXlDOztBQUV6Qyx3Q0FBd0M7O0FBRXhDLCtCQUErQjtBQUMvQix5REFBeUQ7QUFDekQsc0RBQXNEO0FBQ3RELGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekMsZ0RBQWdEO0FBQ2hELDBDQUEwQztBQUMxQywwQ0FBMEM7O0FBRTFDLDJDQUEyQzs7QUFFM0Msd0NBQXdDOztBQUV4QywrQkFBK0I7QUFDL0IsNEZBQTRGO0FBQzVGLDhFQUE4RTtBQUM5RSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxxQ0FBcUMsaUJBQWlCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9zaGFkZXIvQmFzZVNoYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZVNoYWRlciBpcyBhIHNtYWxsIHJlc291cmNlIGNsYXNzIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgcmVxdWlyZWQgZm9yIGEgV2ViR0wgU2hhZGVyIHRvIGJlIGNyZWF0ZWQuXHJcbiAqIFxyXG4gKiBJdCBjb250YWlucyB0aGUgcmF3IHNvdXJjZSBjb2RlIHRvIHRoZSBmcmFnbWVudCBhbmQgdmVydGV4IHNoYWRlciwgYXMgd2VsbCBhcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzXHJcbiAqIHRoZSB1bmlmb3JtcyB0aGUgc2hhZGVyIHJlcXVpcmVzLCBpZiBhbnkuXHJcbiAqIFxyXG4gKiBCYXNlU2hhZGVycyBhcmUgc3RvcmVkIGluIHRoZSBTaGFkZXIgQ2FjaGUsIGF2YWlsYWJsZSBpbiBhIFNjZW5lIHZpYSBgdGhpcy5jYWNoZS5zaGFkZXJzYCBhbmQgYXJlIHJlZmVyZW5jZWRcclxuICogYnkgYSB1bmlxdWUga2V5LWJhc2VkIHN0cmluZy4gUmV0cmlldmUgdGhlbSB2aWEgYHRoaXMuY2FjaGUuc2hhZGVycy5nZXQoa2V5KWAuXHJcbiAqIFxyXG4gKiBCYXNlU2hhZGVycyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHTFNMIEZpbGUgTG9hZGVyIHdoZW4gbG9hZGluZyBhbiBleHRlcm5hbCBzaGFkZXIgcmVzb3VyY2UuXHJcbiAqIFRoZXkgY2FuIGFsc28gYmUgY3JlYXRlZCBhdCBydW50aW1lLCBhbGxvd2luZyB5b3UgdG8gdXNlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBzaGFkZXIgc291cmNlIGNvZGUuXHJcbiAqIFxyXG4gKiBEZWZhdWx0IGZyYWdtZW50IGFuZCB2ZXJ0ZXggc291cmNlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rvciwgc2V0dGluZy11cCBhIGJhc2ljIHNoYWRlcixcclxuICogc3VpdGFibGUgZm9yIGRlYnVnIHJlbmRlcmluZy5cclxuICpcclxuICogQGNsYXNzIEJhc2VTaGFkZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EaXNwbGF5XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoaXMgc2hhZGVyLiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHNoYWRlciBjYWNoZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtmcmFnbWVudFNyY10gLSBUaGUgZnJhZ21lbnQgc291cmNlIGZvciB0aGUgc2hhZGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZlcnRleFNyY10gLSBUaGUgdmVydGV4IHNvdXJjZSBmb3IgdGhlIHNoYWRlci5cclxuICogQHBhcmFtIHthbnl9IFt1bmlmb3Jtc10gLSBPcHRpb25hbCBvYmplY3QgZGVmaW5pbmcgdGhlIHVuaWZvcm1zIHRoZSBzaGFkZXIgdXNlcy5cclxuICovXHJcbnZhciBCYXNlU2hhZGVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJhc2VTaGFkZXIgKGtleSwgZnJhZ21lbnRTcmMsIHZlcnRleFNyYywgdW5pZm9ybXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFmcmFnbWVudFNyYyB8fCBmcmFnbWVudFNyYyA9PT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmcmFnbWVudFNyYyA9IFtcclxuICAgICAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgZnJhZ0Nvb3JkOycsXHJcblxyXG4gICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcclxuICAgICAgICAgICAgICAgICcgICAgdmVjMiB1diA9IGZyYWdDb29yZCAvIHJlc29sdXRpb24ueHk7JyxcclxuICAgICAgICAgICAgICAgICcgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh1di54eXgsIDEuMCk7JyxcclxuICAgICAgICAgICAgICAgICd9J1xyXG4gICAgICAgICAgICBdLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2ZXJ0ZXhTcmMgfHwgdmVydGV4U3JjID09PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZlcnRleFNyYyA9IFtcclxuICAgICAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7JyxcclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7JyxcclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247JyxcclxuXHJcbiAgICAgICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgaW5Qb3NpdGlvbjsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgZnJhZ0Nvb3JkOycsXHJcblxyXG4gICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcclxuICAgICAgICAgICAgICAgICdnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdVZpZXdNYXRyaXggKiB2ZWM0KGluUG9zaXRpb24sIDEuMCwgMS4wKTsnLFxyXG4gICAgICAgICAgICAgICAgJ2ZyYWdDb29yZCA9IHZlYzIoaW5Qb3NpdGlvbi54LCB1UmVzb2x1dGlvbi55IC0gaW5Qb3NpdGlvbi55KTsnLFxyXG4gICAgICAgICAgICAgICAgJ30nXHJcbiAgICAgICAgICAgIF0uam9pbignXFxuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodW5pZm9ybXMgPT09IHVuZGVmaW5lZCkgeyB1bmlmb3JtcyA9IG51bGw7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBvZiB0aGlzIHNoYWRlciwgdW5pcXVlIHdpdGhpbiB0aGUgc2hhZGVyIGNhY2hlIG9mIHRoaXMgUGhhc2VyIGdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyI2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc291cmNlIGNvZGUsIGFzIGEgc3RyaW5nLCBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyIGJlaW5nIHVzZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyI2ZyYWdtZW50U3JjXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc291cmNlIGNvZGUsIGFzIGEgc3RyaW5nLCBvZiB0aGUgdmVydGV4IHNoYWRlciBiZWluZyB1c2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlciN2ZXJ0ZXhTcmNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlciN1bmlmb3Jtc1xyXG4gICAgICAgICAqIEB0eXBlIHs/YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gdW5pZm9ybXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZVNoYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/shader/BaseShader.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/AddToDOM.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/dom/AddToDOM.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds the given element to the DOM. If a parent is provided the element is added as a child of the parent, providing it was able to access it.\r\n * If no parent was given it falls back to using `document.body`.\r\n *\r\n * @function Phaser.DOM.AddToDOM\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLElement} element - The element to be added to the DOM. Usually a Canvas object.\r\n * @param {(string|HTMLElement)} [parent] - The parent in which to add the element. Can be a string which is passed to `getElementById` or an actual DOM object.\r\n *\r\n * @return {HTMLElement} The element that was added to the DOM.\r\n */\r\nvar AddToDOM = function (element, parent)\r\n{\r\n    var target;\r\n\r\n    if (parent)\r\n    {\r\n        if (typeof parent === 'string')\r\n        {\r\n            //  Hopefully an element ID\r\n            target = document.getElementById(parent);\r\n        }\r\n        else if (typeof parent === 'object' && parent.nodeType === 1)\r\n        {\r\n            //  Quick test for a HTMLElement\r\n            target = parent;\r\n        }\r\n    }\r\n    else if (element.parentElement)\r\n    {\r\n        return element;\r\n    }\r\n\r\n    //  Fallback, covers an invalid ID and a non HTMLElement object\r\n    if (!target)\r\n    {\r\n        target = document.body;\r\n    }\r\n\r\n    target.appendChild(element);\r\n\r\n    return element;\r\n};\r\n\r\nmodule.exports = AddToDOM;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQWRkVG9ET00uanM/MWFkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQWRkVG9ET00uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSBET00uIElmIGEgcGFyZW50IGlzIHByb3ZpZGVkIHRoZSBlbGVtZW50IGlzIGFkZGVkIGFzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCwgcHJvdmlkaW5nIGl0IHdhcyBhYmxlIHRvIGFjY2VzcyBpdC5cclxuICogSWYgbm8gcGFyZW50IHdhcyBnaXZlbiBpdCBmYWxscyBiYWNrIHRvIHVzaW5nIGBkb2N1bWVudC5ib2R5YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5ET00uQWRkVG9ET01cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGUgRE9NLiBVc3VhbGx5IGEgQ2FudmFzIG9iamVjdC5cclxuICogQHBhcmFtIHsoc3RyaW5nfEhUTUxFbGVtZW50KX0gW3BhcmVudF0gLSBUaGUgcGFyZW50IGluIHdoaWNoIHRvIGFkZCB0aGUgZWxlbWVudC4gQ2FuIGJlIGEgc3RyaW5nIHdoaWNoIGlzIHBhc3NlZCB0byBgZ2V0RWxlbWVudEJ5SWRgIG9yIGFuIGFjdHVhbCBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gVGhlIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIERPTS5cclxuICovXHJcbnZhciBBZGRUb0RPTSA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnQpXHJcbntcclxuICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSG9wZWZ1bGx5IGFuIGVsZW1lbnQgSURcclxuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ29iamVjdCcgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFF1aWNrIHRlc3QgZm9yIGEgSFRNTEVsZW1lbnRcclxuICAgICAgICAgICAgdGFyZ2V0ID0gcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgRmFsbGJhY2ssIGNvdmVycyBhbiBpbnZhbGlkIElEIGFuZCBhIG5vbiBIVE1MRWxlbWVudCBvYmplY3RcclxuICAgIGlmICghdGFyZ2V0KVxyXG4gICAge1xyXG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBZGRUb0RPTTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/AddToDOM.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/CreateDOMContainer.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/dom/CreateDOMContainer.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\n\r\nvar CreateDOMContainer = function (game)\r\n{\r\n    var config = game.config;\r\n\r\n    if (!config.parent || !config.domCreateContainer)\r\n    {\r\n        return;\r\n    }\r\n\r\n    //  DOM Element Container\r\n    var div = document.createElement('div');\r\n\r\n    div.style.cssText = [\r\n        'display: block;',\r\n        'width: ' + game.scale.width + 'px;',\r\n        'height: ' + game.scale.height + 'px;',\r\n        'padding: 0; margin: 0;',\r\n        'position: absolute;',\r\n        'overflow: hidden;',\r\n        'pointer-events: none;',\r\n        'transform: scale(1);',\r\n        'transform-origin: left top;'\r\n    ].join(' ');\r\n\r\n    game.domContainer = div;\r\n\r\n    AddToDOM(div, config.parent);\r\n};\r\n\r\nmodule.exports = CreateDOMContainer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQ3JlYXRlRE9NQ29udGFpbmVyLmpzPzJjZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCLDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0Msb0JBQW9CLFdBQVc7QUFDL0IsNEJBQTRCO0FBQzVCLDBCQUEwQjtBQUMxQiw4QkFBOEI7QUFDOUIsNkJBQTZCO0FBQzdCLG9DQUFvQztBQUNwQzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL0NyZWF0ZURPTUNvbnRhaW5lci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkZFRvRE9NID0gcmVxdWlyZSgnLi4vZG9tL0FkZFRvRE9NJyk7XHJcblxyXG52YXIgQ3JlYXRlRE9NQ29udGFpbmVyID0gZnVuY3Rpb24gKGdhbWUpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBnYW1lLmNvbmZpZztcclxuXHJcbiAgICBpZiAoIWNvbmZpZy5wYXJlbnQgfHwgIWNvbmZpZy5kb21DcmVhdGVDb250YWluZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBET00gRWxlbWVudCBDb250YWluZXJcclxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IFtcclxuICAgICAgICAnZGlzcGxheTogYmxvY2s7JyxcclxuICAgICAgICAnd2lkdGg6ICcgKyBnYW1lLnNjYWxlLndpZHRoICsgJ3B4OycsXHJcbiAgICAgICAgJ2hlaWdodDogJyArIGdhbWUuc2NhbGUuaGVpZ2h0ICsgJ3B4OycsXHJcbiAgICAgICAgJ3BhZGRpbmc6IDA7IG1hcmdpbjogMDsnLFxyXG4gICAgICAgICdwb3NpdGlvbjogYWJzb2x1dGU7JyxcclxuICAgICAgICAnb3ZlcmZsb3c6IGhpZGRlbjsnLFxyXG4gICAgICAgICdwb2ludGVyLWV2ZW50czogbm9uZTsnLFxyXG4gICAgICAgICd0cmFuc2Zvcm06IHNjYWxlKDEpOycsXHJcbiAgICAgICAgJ3RyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wOydcclxuICAgIF0uam9pbignICcpO1xyXG5cclxuICAgIGdhbWUuZG9tQ29udGFpbmVyID0gZGl2O1xyXG5cclxuICAgIEFkZFRvRE9NKGRpdiwgY29uZmlnLnBhcmVudCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZURPTUNvbnRhaW5lcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/CreateDOMContainer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/DOMContentLoaded.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/dom/DOMContentLoaded.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ../device/OS */ \"./node_modules/phaser/src/device/OS.js\");\r\n\r\n/**\r\n * @callback ContentLoadedCallback\r\n */\r\n\r\n/**\r\n * Inspects the readyState of the document. If the document is already complete then it invokes the given callback.\r\n * If not complete it sets up several event listeners such as `deviceready`, and once those fire, it invokes the callback.\r\n * Called automatically by the Phaser.Game instance. Should not usually be accessed directly.\r\n *\r\n * @function Phaser.DOM.DOMContentLoaded\r\n * @since 3.0.0\r\n *\r\n * @param {ContentLoadedCallback} callback - The callback to be invoked when the device is ready and the DOM content is loaded.\r\n */\r\nvar DOMContentLoaded = function (callback)\r\n{\r\n    if (document.readyState === 'complete' || document.readyState === 'interactive')\r\n    {\r\n        callback();\r\n\r\n        return;\r\n    }\r\n\r\n    var check = function ()\r\n    {\r\n        document.removeEventListener('deviceready', check, true);\r\n        document.removeEventListener('DOMContentLoaded', check, true);\r\n        window.removeEventListener('load', check, true);\r\n\r\n        callback();\r\n    };\r\n\r\n    if (!document.body)\r\n    {\r\n        window.setTimeout(check, 20);\r\n    }\r\n    else if (OS.cordova)\r\n    {\r\n        //  Ref. http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready\r\n        document.addEventListener('deviceready', check, false);\r\n    }\r\n    else\r\n    {\r\n        document.addEventListener('DOMContentLoaded', check, true);\r\n        window.addEventListener('load', check, true);\r\n    }\r\n};\r\n\r\nmodule.exports = DOMContentLoaded;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vRE9NQ29udGVudExvYWRlZC5qcz9kOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxTQUFTLG1CQUFPLENBQUMsNERBQWM7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9ET01Db250ZW50TG9hZGVkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgT1MgPSByZXF1aXJlKCcuLi9kZXZpY2UvT1MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgQ29udGVudExvYWRlZENhbGxiYWNrXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluc3BlY3RzIHRoZSByZWFkeVN0YXRlIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIGRvY3VtZW50IGlzIGFscmVhZHkgY29tcGxldGUgdGhlbiBpdCBpbnZva2VzIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICogSWYgbm90IGNvbXBsZXRlIGl0IHNldHMgdXAgc2V2ZXJhbCBldmVudCBsaXN0ZW5lcnMgc3VjaCBhcyBgZGV2aWNlcmVhZHlgLCBhbmQgb25jZSB0aG9zZSBmaXJlLCBpdCBpbnZva2VzIHRoZSBjYWxsYmFjay5cclxuICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlLiBTaG91bGQgbm90IHVzdWFsbHkgYmUgYWNjZXNzZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRE9NLkRPTUNvbnRlbnRMb2FkZWRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q29udGVudExvYWRlZENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGRldmljZSBpcyByZWFkeSBhbmQgdGhlIERPTSBjb250ZW50IGlzIGxvYWRlZC5cclxuICovXHJcbnZhciBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG57XHJcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKVxyXG4gICAge1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RldmljZXJlYWR5JywgY2hlY2ssIHRydWUpO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBjaGVjaywgdHJ1ZSk7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjaGVjaywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghZG9jdW1lbnQuYm9keSlcclxuICAgIHtcclxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChjaGVjaywgMjApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoT1MuY29yZG92YSlcclxuICAgIHtcclxuICAgICAgICAvLyAgUmVmLiBodHRwOi8vZG9jcy5waG9uZWdhcC5jb20vZW4vMy41LjAvY29yZG92YV9ldmVudHNfZXZlbnRzLm1kLmh0bWwjZGV2aWNlcmVhZHlcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkZXZpY2VyZWFkeScsIGNoZWNrLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNoZWNrLCB0cnVlKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNoZWNrLCB0cnVlKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRE9NQ29udGVudExvYWRlZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/DOMContentLoaded.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/GetInnerHeight.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/dom/GetInnerHeight.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to determine the document inner height across iOS and standard devices.\r\n * Based on code by @tylerjpeterson\r\n *\r\n * @function Phaser.DOM.GetInnerHeight\r\n * @since 3.16.0\r\n *\r\n * @param {boolean} iOS - Is this running on iOS?\r\n *\r\n * @return {number} The inner height value.\r\n */\r\nvar GetInnerHeight = function (iOS)\r\n{\r\n\r\n    if (!iOS)\r\n    {\r\n        return window.innerHeight;\r\n    }\r\n\r\n    var axis = Math.abs(window.orientation);\r\n\r\n    var size = { w: 0, h: 0 };\r\n    \r\n    var ruler = document.createElement('div');\r\n\r\n    ruler.setAttribute('style', 'position: fixed; height: 100vh; width: 0; top: 0');\r\n\r\n    document.documentElement.appendChild(ruler);\r\n\r\n    size.w = (axis === 90) ? ruler.offsetHeight : window.innerWidth;\r\n    size.h = (axis === 90) ? window.innerWidth : ruler.offsetHeight;\r\n\r\n    document.documentElement.removeChild(ruler);\r\n\r\n    ruler = null;\r\n\r\n    if (Math.abs(window.orientation) !== 90)\r\n    {\r\n        return size.h;\r\n    }\r\n    else\r\n    {\r\n        return size.w;\r\n    }\r\n};\r\n\r\nmodule.exports = GetInnerHeight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0SW5uZXJIZWlnaHQuanM/ZGI2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7O0FBRUEsaURBQWlELGVBQWUsVUFBVTs7QUFFMUU7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0SW5uZXJIZWlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGRvY3VtZW50IGlubmVyIGhlaWdodCBhY3Jvc3MgaU9TIGFuZCBzdGFuZGFyZCBkZXZpY2VzLlxyXG4gKiBCYXNlZCBvbiBjb2RlIGJ5IEB0eWxlcmpwZXRlcnNvblxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRJbm5lckhlaWdodFxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaU9TIC0gSXMgdGhpcyBydW5uaW5nIG9uIGlPUz9cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5uZXIgaGVpZ2h0IHZhbHVlLlxyXG4gKi9cclxudmFyIEdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24gKGlPUylcclxue1xyXG5cclxuICAgIGlmICghaU9TKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGF4aXMgPSBNYXRoLmFicyh3aW5kb3cub3JpZW50YXRpb24pO1xyXG5cclxuICAgIHZhciBzaXplID0geyB3OiAwLCBoOiAwIH07XHJcbiAgICBcclxuICAgIHZhciBydWxlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICAgIHJ1bGVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncG9zaXRpb246IGZpeGVkOyBoZWlnaHQ6IDEwMHZoOyB3aWR0aDogMDsgdG9wOiAwJyk7XHJcblxyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHJ1bGVyKTtcclxuXHJcbiAgICBzaXplLncgPSAoYXhpcyA9PT0gOTApID8gcnVsZXIub2Zmc2V0SGVpZ2h0IDogd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBzaXplLmggPSAoYXhpcyA9PT0gOTApID8gd2luZG93LmlubmVyV2lkdGggOiBydWxlci5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHJ1bGVyKTtcclxuXHJcbiAgICBydWxlciA9IG51bGw7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKHdpbmRvdy5vcmllbnRhdGlvbikgIT09IDkwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBzaXplLmg7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHNpemUudztcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0SW5uZXJIZWlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetInnerHeight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/GetScreenOrientation.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/dom/GetScreenOrientation.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../scale/const */ \"./node_modules/phaser/src/scale/const/index.js\");\r\n\r\n/**\r\n * Attempts to determine the screen orientation using the Orientation API.\r\n *\r\n * @function Phaser.DOM.GetScreenOrientation\r\n * @since 3.16.0\r\n *\r\n * @param {number} width - The width of the viewport.\r\n * @param {number} height - The height of the viewport.\r\n *\r\n * @return {string} The orientation.\r\n */\r\nvar GetScreenOrientation = function (width, height)\r\n{\r\n    var screen = window.screen;\r\n    var orientation = (screen) ? screen.orientation || screen.mozOrientation || screen.msOrientation : false;\r\n\r\n    if (orientation && typeof orientation.type === 'string')\r\n    {\r\n        //  Screen Orientation API specification\r\n        return orientation.type;\r\n    }\r\n    else if (typeof orientation === 'string')\r\n    {\r\n        //  moz / ms-orientation are strings\r\n        return orientation;\r\n    }\r\n\r\n    if (screen)\r\n    {\r\n        return (screen.height > screen.width) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n    }\r\n    else if (typeof window.orientation === 'number')\r\n    {\r\n        //  This may change by device based on \"natural\" orientation.\r\n        return (window.orientation === 0 || window.orientation === 180) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n    }\r\n    else if (window.matchMedia)\r\n    {\r\n        if (window.matchMedia('(orientation: portrait)').matches)\r\n        {\r\n            return CONST.ORIENTATION.PORTRAIT;\r\n        }\r\n        else if (window.matchMedia('(orientation: landscape)').matches)\r\n        {\r\n            return CONST.ORIENTATION.LANDSCAPE;\r\n        }\r\n    }\r\n    \r\n    return (height > width) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n};\r\n\r\nmodule.exports = GetScreenOrientation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0U2NyZWVuT3JpZW50YXRpb24uanM/MTVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9HZXRTY3JlZW5PcmllbnRhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vc2NhbGUvY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIHNjcmVlbiBvcmllbnRhdGlvbiB1c2luZyB0aGUgT3JpZW50YXRpb24gQVBJLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRTY3JlZW5PcmllbnRhdGlvblxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgb3JpZW50YXRpb24uXHJcbiAqL1xyXG52YXIgR2V0U2NyZWVuT3JpZW50YXRpb24gPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxue1xyXG4gICAgdmFyIHNjcmVlbiA9IHdpbmRvdy5zY3JlZW47XHJcbiAgICB2YXIgb3JpZW50YXRpb24gPSAoc2NyZWVuKSA/IHNjcmVlbi5vcmllbnRhdGlvbiB8fCBzY3JlZW4ubW96T3JpZW50YXRpb24gfHwgc2NyZWVuLm1zT3JpZW50YXRpb24gOiBmYWxzZTtcclxuXHJcbiAgICBpZiAob3JpZW50YXRpb24gJiYgdHlwZW9mIG9yaWVudGF0aW9uLnR5cGUgPT09ICdzdHJpbmcnKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTY3JlZW4gT3JpZW50YXRpb24gQVBJIHNwZWNpZmljYXRpb25cclxuICAgICAgICByZXR1cm4gb3JpZW50YXRpb24udHlwZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBvcmllbnRhdGlvbiA9PT0gJ3N0cmluZycpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIG1veiAvIG1zLW9yaWVudGF0aW9uIGFyZSBzdHJpbmdzXHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY3JlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChzY3JlZW4uaGVpZ2h0ID4gc2NyZWVuLndpZHRoKSA/IENPTlNULk9SSUVOVEFUSU9OLlBPUlRSQUlUIDogQ09OU1QuT1JJRU5UQVRJT04uTEFORFNDQVBFO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoaXMgbWF5IGNoYW5nZSBieSBkZXZpY2UgYmFzZWQgb24gXCJuYXR1cmFsXCIgb3JpZW50YXRpb24uXHJcbiAgICAgICAgcmV0dXJuICh3aW5kb3cub3JpZW50YXRpb24gPT09IDAgfHwgd2luZG93Lm9yaWVudGF0aW9uID09PSAxODApID8gQ09OU1QuT1JJRU5UQVRJT04uUE9SVFJBSVQgOiBDT05TVC5PUklFTlRBVElPTi5MQU5EU0NBUEU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh3aW5kb3cubWF0Y2hNZWRpYSlcclxuICAgIHtcclxuICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykubWF0Y2hlcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBDT05TVC5PUklFTlRBVElPTi5QT1JUUkFJVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpLm1hdGNoZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gQ09OU1QuT1JJRU5UQVRJT04uTEFORFNDQVBFO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIChoZWlnaHQgPiB3aWR0aCkgPyBDT05TVC5PUklFTlRBVElPTi5QT1JUUkFJVCA6IENPTlNULk9SSUVOVEFUSU9OLkxBTkRTQ0FQRTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0U2NyZWVuT3JpZW50YXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetScreenOrientation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/GetTarget.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/dom/GetTarget.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to get the target DOM element based on the given value, which can be either\r\n * a string, in which case it will be looked-up by ID, or an element node. If nothing\r\n * can be found it will return a reference to the document.body.\r\n *\r\n * @function Phaser.DOM.GetTarget\r\n * @since 3.16.0\r\n *\r\n * @param {HTMLElement} element - The DOM element to look-up.\r\n */\r\nvar GetTarget = function (element)\r\n{\r\n    var target;\r\n\r\n    if (element !== '')\r\n    {\r\n        if (typeof element === 'string')\r\n        {\r\n            //  Hopefully an element ID\r\n            target = document.getElementById(element);\r\n        }\r\n        else if (element && element.nodeType === 1)\r\n        {\r\n            //  Quick test for a HTMLElement\r\n            target = element;\r\n        }\r\n    }\r\n\r\n    //  Fallback to the document body. Covers an invalid ID and a non HTMLElement object.\r\n    if (!target)\r\n    {\r\n        //  Use the full window\r\n        target = document.body;\r\n    }\r\n\r\n    return target;\r\n};\r\n\r\nmodule.exports = GetTarget;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0VGFyZ2V0LmpzPzM1MTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0VGFyZ2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQXR0ZW1wdHMgdG8gZ2V0IHRoZSB0YXJnZXQgRE9NIGVsZW1lbnQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlLCB3aGljaCBjYW4gYmUgZWl0aGVyXHJcbiAqIGEgc3RyaW5nLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgbG9va2VkLXVwIGJ5IElELCBvciBhbiBlbGVtZW50IG5vZGUuIElmIG5vdGhpbmdcclxuICogY2FuIGJlIGZvdW5kIGl0IHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudC5ib2R5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRUYXJnZXRcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGxvb2stdXAuXHJcbiAqL1xyXG52YXIgR2V0VGFyZ2V0ID0gZnVuY3Rpb24gKGVsZW1lbnQpXHJcbntcclxuICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT09ICcnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSG9wZWZ1bGx5IGFuIGVsZW1lbnQgSURcclxuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBRdWljayB0ZXN0IGZvciBhIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgIHRhcmdldCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBGYWxsYmFjayB0byB0aGUgZG9jdW1lbnQgYm9keS4gQ292ZXJzIGFuIGludmFsaWQgSUQgYW5kIGEgbm9uIEhUTUxFbGVtZW50IG9iamVjdC5cclxuICAgIGlmICghdGFyZ2V0KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBVc2UgdGhlIGZ1bGwgd2luZG93XHJcbiAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUYXJnZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetTarget.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/ParseXML.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/dom/ParseXML.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes the given data string and parses it as XML.\r\n * First tries to use the window.DOMParser and reverts to the Microsoft.XMLDOM if that fails.\r\n * The parsed XML object is returned, or `null` if there was an error while parsing the data.\r\n *\r\n * @function Phaser.DOM.ParseXML\r\n * @since 3.0.0\r\n *\r\n * @param {string} data - The XML source stored in a string.\r\n *\r\n * @return {?(DOMParser|ActiveXObject)} The parsed XML data, or `null` if the data could not be parsed.\r\n */\r\nvar ParseXML = function (data)\r\n{\r\n    var xml = '';\r\n\r\n    try\r\n    {\r\n        if (window['DOMParser'])\r\n        {\r\n            var domparser = new DOMParser();\r\n            xml = domparser.parseFromString(data, 'text/xml');\r\n        }\r\n        else\r\n        {\r\n            xml = new ActiveXObject('Microsoft.XMLDOM');\r\n            xml.loadXML(data);\r\n        }\r\n    }\r\n    catch (e)\r\n    {\r\n        xml = null;\r\n    }\r\n\r\n    if (!xml || !xml.documentElement || xml.getElementsByTagName('parsererror').length)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        return xml;\r\n    }\r\n};\r\n\r\nmodule.exports = ParseXML;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUGFyc2VYTUwuanM/MWU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL1BhcnNlWE1MLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgdGhlIGdpdmVuIGRhdGEgc3RyaW5nIGFuZCBwYXJzZXMgaXQgYXMgWE1MLlxyXG4gKiBGaXJzdCB0cmllcyB0byB1c2UgdGhlIHdpbmRvdy5ET01QYXJzZXIgYW5kIHJldmVydHMgdG8gdGhlIE1pY3Jvc29mdC5YTUxET00gaWYgdGhhdCBmYWlscy5cclxuICogVGhlIHBhcnNlZCBYTUwgb2JqZWN0IGlzIHJldHVybmVkLCBvciBgbnVsbGAgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIGRhdGEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRE9NLlBhcnNlWE1MXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBYTUwgc291cmNlIHN0b3JlZCBpbiBhIHN0cmluZy5cclxuICpcclxuICogQHJldHVybiB7PyhET01QYXJzZXJ8QWN0aXZlWE9iamVjdCl9IFRoZSBwYXJzZWQgWE1MIGRhdGEsIG9yIGBudWxsYCBpZiB0aGUgZGF0YSBjb3VsZCBub3QgYmUgcGFyc2VkLlxyXG4gKi9cclxudmFyIFBhcnNlWE1MID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHZhciB4bWwgPSAnJztcclxuXHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgICBpZiAod2luZG93WydET01QYXJzZXInXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICAgICAgICAgIHhtbCA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoZGF0YSwgJ3RleHQveG1sJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MRE9NJyk7XHJcbiAgICAgICAgICAgIHhtbC5sb2FkWE1MKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlKVxyXG4gICAge1xyXG4gICAgICAgIHhtbCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYXJzZXJlcnJvcicpLmxlbmd0aClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geG1sO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZVhNTDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/ParseXML.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/RemoveFromDOM.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/dom/RemoveFromDOM.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to remove the element from its parentNode in the DOM.\r\n *\r\n * @function Phaser.DOM.RemoveFromDOM\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLElement} element - The DOM element to remove from its parent node.\r\n */\r\nvar RemoveFromDOM = function (element)\r\n{\r\n    if (element.parentNode)\r\n    {\r\n        element.parentNode.removeChild(element);\r\n    }\r\n};\r\n\r\nmodule.exports = RemoveFromDOM;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUmVtb3ZlRnJvbURPTS5qcz8zYjRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9SZW1vdmVGcm9tRE9NLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gaXRzIHBhcmVudE5vZGUgaW4gdGhlIERPTS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5ET00uUmVtb3ZlRnJvbURPTVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byByZW1vdmUgZnJvbSBpdHMgcGFyZW50IG5vZGUuXHJcbiAqL1xyXG52YXIgUmVtb3ZlRnJvbURPTSA9IGZ1bmN0aW9uIChlbGVtZW50KVxyXG57XHJcbiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVtb3ZlRnJvbURPTTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/RemoveFromDOM.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/RequestAnimationFrame.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/dom/RequestAnimationFrame.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Abstracts away the use of RAF or setTimeOut for the core game update loop.\r\n * This is invoked automatically by the Phaser.Game instance.\r\n *\r\n * @class RequestAnimationFrame\r\n * @memberof Phaser.DOM\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar RequestAnimationFrame = new Class({\r\n\r\n    initialize:\r\n\r\n    function RequestAnimationFrame ()\r\n    {\r\n        /**\r\n         * True if RequestAnimationFrame is running, otherwise false.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#isRunning\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isRunning = false;\r\n\r\n        /**\r\n         * The callback to be invoked each step.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#callback\r\n         * @type {FrameRequestCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.callback = NOOP;\r\n\r\n        /**\r\n         * The most recent timestamp. Either a DOMHighResTimeStamp under RAF or `Date.now` under SetTimeout.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#tick\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.tick = 0;\r\n\r\n        /**\r\n         * True if the step is using setTimeout instead of RAF.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#isSetTimeOut\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isSetTimeOut = false;\r\n\r\n        /**\r\n         * The setTimeout or RAF callback ID used when canceling them.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#timeOutID\r\n         * @type {?number}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.timeOutID = null;\r\n\r\n        /**\r\n         * The previous time the step was called.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#lastTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.lastTime = 0;\r\n\r\n        /**\r\n         * The target FPS rate in ms.\r\n         * Only used when setTimeout is used instead of RAF.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#target\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.21.0\r\n         */\r\n        this.target = 0;\r\n\r\n        var _this = this;\r\n\r\n        /**\r\n         * The RAF step function.\r\n         * Updates the local tick value, invokes the callback and schedules another call to requestAnimationFrame.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#step\r\n         * @type {FrameRequestCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.step = function step ()\r\n        {\r\n            //  Because we cannot trust the time passed to this callback from the browser and need it kept in sync with event times\r\n            var timestamp = window.performance.now();\r\n\r\n            //  DOMHighResTimeStamp\r\n            _this.lastTime = _this.tick;\r\n\r\n            _this.tick = timestamp;\r\n\r\n            _this.callback(timestamp);\r\n\r\n            _this.timeOutID = window.requestAnimationFrame(step);\r\n        };\r\n\r\n        /**\r\n         * The SetTimeout step function.\r\n         * Updates the local tick value, invokes the callback and schedules another call to setTimeout.\r\n         *\r\n         * @name Phaser.DOM.RequestAnimationFrame#stepTimeout\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.stepTimeout = function stepTimeout ()\r\n        {\r\n            var d = Date.now();\r\n\r\n            var delay = Math.min(Math.max(_this.target * 2 + _this.tick - d, 0), _this.target);\r\n\r\n            _this.lastTime = _this.tick;\r\n\r\n            _this.tick = d;\r\n\r\n            _this.callback(d);\r\n\r\n            _this.timeOutID = window.setTimeout(stepTimeout, delay);\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Starts the requestAnimationFrame or setTimeout process running.\r\n     *\r\n     * @method Phaser.DOM.RequestAnimationFrame#start\r\n     * @since 3.0.0\r\n     *\r\n     * @param {FrameRequestCallback} callback - The callback to invoke each step.\r\n     * @param {boolean} forceSetTimeOut - Should it use SetTimeout, even if RAF is available?\r\n     * @param {number} targetFPS - The target fps rate (in ms). Only used when setTimeout is used.\r\n     */\r\n    start: function (callback, forceSetTimeOut, targetFPS)\r\n    {\r\n        if (this.isRunning)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.callback = callback;\r\n\r\n        this.isSetTimeOut = forceSetTimeOut;\r\n\r\n        this.target = targetFPS;\r\n\r\n        this.isRunning = true;\r\n\r\n        this.timeOutID = (forceSetTimeOut) ? window.setTimeout(this.stepTimeout, 0) : window.requestAnimationFrame(this.step);\r\n    },\r\n\r\n    /**\r\n     * Stops the requestAnimationFrame or setTimeout from running.\r\n     *\r\n     * @method Phaser.DOM.RequestAnimationFrame#stop\r\n     * @since 3.0.0\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.isRunning = false;\r\n\r\n        if (this.isSetTimeOut)\r\n        {\r\n            clearTimeout(this.timeOutID);\r\n        }\r\n        else\r\n        {\r\n            window.cancelAnimationFrame(this.timeOutID);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Stops the step from running and clears the callback reference.\r\n     *\r\n     * @method Phaser.DOM.RequestAnimationFrame#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.stop();\r\n\r\n        this.callback = NOOP;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = RequestAnimationFrame;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmpzPzdkMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDhEQUFlOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi91dGlscy9OT09QJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBYnN0cmFjdHMgYXdheSB0aGUgdXNlIG9mIFJBRiBvciBzZXRUaW1lT3V0IGZvciB0aGUgY29yZSBnYW1lIHVwZGF0ZSBsb29wLlxyXG4gKiBUaGlzIGlzIGludm9rZWQgYXV0b21hdGljYWxseSBieSB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICogQG1lbWJlcm9mIFBoYXNlci5ET01cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKClcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUcnVlIGlmIFJlcXVlc3RBbmltYXRpb25GcmFtZSBpcyBydW5uaW5nLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI2NhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge0ZyYW1lUmVxdWVzdENhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbW9zdCByZWNlbnQgdGltZXN0YW1wLiBFaXRoZXIgYSBET01IaWdoUmVzVGltZVN0YW1wIHVuZGVyIFJBRiBvciBgRGF0ZS5ub3dgIHVuZGVyIFNldFRpbWVvdXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSN0aWNrXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWNrID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVHJ1ZSBpZiB0aGUgc3RlcCBpcyB1c2luZyBzZXRUaW1lb3V0IGluc3RlYWQgb2YgUkFGLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjaXNTZXRUaW1lT3V0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzU2V0VGltZU91dCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0VGltZW91dCBvciBSQUYgY2FsbGJhY2sgSUQgdXNlZCB3aGVuIGNhbmNlbGluZyB0aGVtLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjdGltZU91dElEXHJcbiAgICAgICAgICogQHR5cGUgez9udW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZU91dElEID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByZXZpb3VzIHRpbWUgdGhlIHN0ZXAgd2FzIGNhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI2xhc3RUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0YXJnZXQgRlBTIHJhdGUgaW4gbXMuXHJcbiAgICAgICAgICogT25seSB1c2VkIHdoZW4gc2V0VGltZW91dCBpcyB1c2VkIGluc3RlYWQgb2YgUkFGLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFJBRiBzdGVwIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHRpY2sgdmFsdWUsIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBzY2hlZHVsZXMgYW5vdGhlciBjYWxsIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI3N0ZXBcclxuICAgICAgICAgKiBAdHlwZSB7RnJhbWVSZXF1ZXN0Q2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwID0gZnVuY3Rpb24gc3RlcCAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEJlY2F1c2Ugd2UgY2Fubm90IHRydXN0IHRoZSB0aW1lIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIGZyb20gdGhlIGJyb3dzZXIgYW5kIG5lZWQgaXQga2VwdCBpbiBzeW5jIHdpdGggZXZlbnQgdGltZXNcclxuICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBET01IaWdoUmVzVGltZVN0YW1wXHJcbiAgICAgICAgICAgIF90aGlzLmxhc3RUaW1lID0gX3RoaXMudGljaztcclxuXHJcbiAgICAgICAgICAgIF90aGlzLnRpY2sgPSB0aW1lc3RhbXA7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5jYWxsYmFjayh0aW1lc3RhbXApO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMudGltZU91dElEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2V0VGltZW91dCBzdGVwIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHRpY2sgdmFsdWUsIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBzY2hlZHVsZXMgYW5vdGhlciBjYWxsIHRvIHNldFRpbWVvdXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNzdGVwVGltZW91dFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0ZXBUaW1lb3V0ID0gZnVuY3Rpb24gc3RlcFRpbWVvdXQgKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWxheSA9IE1hdGgubWluKE1hdGgubWF4KF90aGlzLnRhcmdldCAqIDIgKyBfdGhpcy50aWNrIC0gZCwgMCksIF90aGlzLnRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5sYXN0VGltZSA9IF90aGlzLnRpY2s7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy50aWNrID0gZDtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmNhbGxiYWNrKGQpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMudGltZU91dElEID0gd2luZG93LnNldFRpbWVvdXQoc3RlcFRpbWVvdXQsIGRlbGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIG9yIHNldFRpbWVvdXQgcHJvY2VzcyBydW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RnJhbWVSZXF1ZXN0Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBlYWNoIHN0ZXAuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlU2V0VGltZU91dCAtIFNob3VsZCBpdCB1c2UgU2V0VGltZW91dCwgZXZlbiBpZiBSQUYgaXMgYXZhaWxhYmxlP1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldEZQUyAtIFRoZSB0YXJnZXQgZnBzIHJhdGUgKGluIG1zKS4gT25seSB1c2VkIHdoZW4gc2V0VGltZW91dCBpcyB1c2VkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrLCBmb3JjZVNldFRpbWVPdXQsIHRhcmdldEZQUylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZXRUaW1lT3V0ID0gZm9yY2VTZXRUaW1lT3V0O1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldEZQUztcclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRpbWVPdXRJRCA9IChmb3JjZVNldFRpbWVPdXQpID8gd2luZG93LnNldFRpbWVvdXQodGhpcy5zdGVwVGltZW91dCwgMCkgOiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc3RlcCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBvciBzZXRUaW1lb3V0IGZyb20gcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0VGltZU91dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVPdXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBzdGVwIGZyb20gcnVubmluZyBhbmQgY2xlYXJzIHRoZSBjYWxsYmFjayByZWZlcmVuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/RequestAnimationFrame.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/dom/index.js":
/*!**********************************************!*\
  !*** ./node_modules/phaser/src/dom/index.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.DOM\r\n */\r\n\r\nvar Dom = {\r\n\r\n    AddToDOM: __webpack_require__(/*! ./AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\"),\r\n    DOMContentLoaded: __webpack_require__(/*! ./DOMContentLoaded */ \"./node_modules/phaser/src/dom/DOMContentLoaded.js\"),\r\n    GetScreenOrientation: __webpack_require__(/*! ./GetScreenOrientation */ \"./node_modules/phaser/src/dom/GetScreenOrientation.js\"),\r\n    GetTarget: __webpack_require__(/*! ./GetTarget */ \"./node_modules/phaser/src/dom/GetTarget.js\"),\r\n    ParseXML: __webpack_require__(/*! ./ParseXML */ \"./node_modules/phaser/src/dom/ParseXML.js\"),\r\n    RemoveFromDOM: __webpack_require__(/*! ./RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\"),\r\n    RequestAnimationFrame: __webpack_require__(/*! ./RequestAnimationFrame */ \"./node_modules/phaser/src/dom/RequestAnimationFrame.js\")\r\n\r\n};\r\n\r\nmodule.exports = Dom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vaW5kZXguanM/YTcxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyw2REFBWTtBQUNsQyxzQkFBc0IsbUJBQU8sQ0FBQyw2RUFBb0I7QUFDbEQsMEJBQTBCLG1CQUFPLENBQUMscUZBQXdCO0FBQzFELGVBQWUsbUJBQU8sQ0FBQywrREFBYTtBQUNwQyxjQUFjLG1CQUFPLENBQUMsNkRBQVk7QUFDbEMsbUJBQW1CLG1CQUFPLENBQUMsdUVBQWlCO0FBQzVDLDJCQUEyQixtQkFBTyxDQUFDLHVGQUF5Qjs7QUFFNUQ7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5ET01cclxuICovXHJcblxyXG52YXIgRG9tID0ge1xyXG5cclxuICAgIEFkZFRvRE9NOiByZXF1aXJlKCcuL0FkZFRvRE9NJyksXHJcbiAgICBET01Db250ZW50TG9hZGVkOiByZXF1aXJlKCcuL0RPTUNvbnRlbnRMb2FkZWQnKSxcclxuICAgIEdldFNjcmVlbk9yaWVudGF0aW9uOiByZXF1aXJlKCcuL0dldFNjcmVlbk9yaWVudGF0aW9uJyksXHJcbiAgICBHZXRUYXJnZXQ6IHJlcXVpcmUoJy4vR2V0VGFyZ2V0JyksXHJcbiAgICBQYXJzZVhNTDogcmVxdWlyZSgnLi9QYXJzZVhNTCcpLFxyXG4gICAgUmVtb3ZlRnJvbURPTTogcmVxdWlyZSgnLi9SZW1vdmVGcm9tRE9NJyksXHJcbiAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHJlcXVpcmUoJy4vUmVxdWVzdEFuaW1hdGlvbkZyYW1lJylcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/events/EventEmitter.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/events/EventEmitter.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EE = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\n\r\n/**\r\n * @classdesc\r\n * EventEmitter is a Scene Systems plugin compatible version of eventemitter3.\r\n *\r\n * @class EventEmitter\r\n * @memberof Phaser.Events\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar EventEmitter = new Class({\r\n\r\n    Extends: EE,\r\n\r\n    initialize:\r\n\r\n    function EventEmitter ()\r\n    {\r\n        EE.call(this);\r\n    },\r\n\r\n    /**\r\n     * Removes all listeners.\r\n     *\r\n     * @method Phaser.Events.EventEmitter#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.removeAllListeners();\r\n    },\r\n\r\n    /**\r\n     * Removes all listeners.\r\n     *\r\n     * @method Phaser.Events.EventEmitter#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Return an array listing the events for which the emitter has registered listeners.\r\n *\r\n * @method Phaser.Events.EventEmitter#eventNames\r\n * @since 3.0.0\r\n *\r\n * @return {array}\r\n */\r\n\r\n/**\r\n * Return the listeners registered for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#listeners\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n *\r\n * @return {array} The registered listeners.\r\n */\r\n\r\n/**\r\n * Return the number of listeners listening to a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#listenerCount\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n *\r\n * @return {number} The number of listeners.\r\n */\r\n\r\n/**\r\n * Calls each of the listeners registered for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#emit\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {...*} [args] - Additional arguments that will be passed to the event handler.\r\n *\r\n * @return {boolean} `true` if the event had listeners, else `false`.\r\n */\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#on\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#addListener\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Add a one-time listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#once\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove the listeners of a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#removeListener\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} [fn] - Only remove the listeners that match this function.\r\n * @param {*} [context] - Only remove the listeners that have this context.\r\n * @param {boolean} [once] - Only remove one-time listeners.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove the listeners of a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#off\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} [fn] - Only remove the listeners that match this function.\r\n * @param {*} [context] - Only remove the listeners that have this context.\r\n * @param {boolean} [once] - Only remove one-time listeners.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove all listeners, or those of the specified event.\r\n *\r\n * @method Phaser.Events.EventEmitter#removeAllListeners\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} [event] - The event name.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\nPluginCache.register('EventEmitter', EventEmitter, 'events');\r\n\r\nmodule.exports = EventEmitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvRXZlbnRFbWl0dGVyLmpzP2NjY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLDREQUFlO0FBQ2hDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSxPQUFPO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsS0FBSztBQUNoQjtBQUNBLFlBQVksUUFBUTtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvRXZlbnRFbWl0dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRUUgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEV2ZW50RW1pdHRlciBpcyBhIFNjZW5lIFN5c3RlbXMgcGx1Z2luIGNvbXBhdGlibGUgdmVyc2lvbiBvZiBldmVudGVtaXR0ZXIzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRXZlbnRzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBFdmVudEVtaXR0ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEVFLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyICgpXHJcbiAgICB7XHJcbiAgICAgICAgRUUuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkIGxpc3RlbmVycy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNldmVudE5hbWVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNsaXN0ZW5lcnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjbGlzdGVuZXJDb3VudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyI2VtaXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIC0gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNhZGRMaXN0ZW5lclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIC0gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvbmNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3ltYm9sKX0gZXZlbnQgLSBUaGUgZXZlbnQgbmFtZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gLSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfSBgdGhpc2AuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjcmVtb3ZlTGlzdGVuZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvbmNlXSAtIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGB0aGlzYC5cclxuICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvZmZcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvbmNlXSAtIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGB0aGlzYC5cclxuICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjcmVtb3ZlQWxsTGlzdGVuZXJzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3ltYm9sKX0gW2V2ZW50XSAtIFRoZSBldmVudCBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdFdmVudEVtaXR0ZXInLCBFdmVudEVtaXR0ZXIsICdldmVudHMnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/events/EventEmitter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/events/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/events/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Events\r\n */\r\n\r\nmodule.exports = { EventEmitter: __webpack_require__(/*! ./EventEmitter */ \"./node_modules/phaser/src/events/EventEmitter.js\") };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvaW5kZXguanM/NDNmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlLG1CQUFPLENBQUMsd0VBQWdCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEV2ZW50RW1pdHRlcjogcmVxdWlyZSgnLi9FdmVudEVtaXR0ZXInKSB9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/BuildGameObject.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/BuildGameObject.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Builds a Game Object using the provided configuration object.\r\n *\r\n * @function Phaser.GameObjects.BuildGameObject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The initial GameObject.\r\n * @param {Phaser.Types.GameObjects.GameObjectConfig} config - The config to build the GameObject with.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The built Game Object.\r\n */\r\nvar BuildGameObject = function (scene, gameObject, config)\r\n{\r\n    //  Position\r\n\r\n    gameObject.x = GetAdvancedValue(config, 'x', 0);\r\n    gameObject.y = GetAdvancedValue(config, 'y', 0);\r\n    gameObject.depth = GetAdvancedValue(config, 'depth', 0);\r\n\r\n    //  Flip\r\n\r\n    gameObject.flipX = GetAdvancedValue(config, 'flipX', false);\r\n    gameObject.flipY = GetAdvancedValue(config, 'flipY', false);\r\n\r\n    //  Scale\r\n    //  Either: { scale: 2 } or { scale: { x: 2, y: 2 }}\r\n\r\n    var scale = GetAdvancedValue(config, 'scale', null);\r\n\r\n    if (typeof scale === 'number')\r\n    {\r\n        gameObject.setScale(scale);\r\n    }\r\n    else if (scale !== null)\r\n    {\r\n        gameObject.scaleX = GetAdvancedValue(scale, 'x', 1);\r\n        gameObject.scaleY = GetAdvancedValue(scale, 'y', 1);\r\n    }\r\n\r\n    //  ScrollFactor\r\n    //  Either: { scrollFactor: 2 } or { scrollFactor: { x: 2, y: 2 }}\r\n\r\n    var scrollFactor = GetAdvancedValue(config, 'scrollFactor', null);\r\n\r\n    if (typeof scrollFactor === 'number')\r\n    {\r\n        gameObject.setScrollFactor(scrollFactor);\r\n    }\r\n    else if (scrollFactor !== null)\r\n    {\r\n        gameObject.scrollFactorX = GetAdvancedValue(scrollFactor, 'x', 1);\r\n        gameObject.scrollFactorY = GetAdvancedValue(scrollFactor, 'y', 1);\r\n    }\r\n\r\n    //  Rotation\r\n\r\n    gameObject.rotation = GetAdvancedValue(config, 'rotation', 0);\r\n\r\n    var angle = GetAdvancedValue(config, 'angle', null);\r\n\r\n    if (angle !== null)\r\n    {\r\n        gameObject.angle = angle;\r\n    }\r\n\r\n    //  Alpha\r\n\r\n    gameObject.alpha = GetAdvancedValue(config, 'alpha', 1);\r\n\r\n    //  Origin\r\n    //  Either: { origin: 0.5 } or { origin: { x: 0.5, y: 0.5 }}\r\n\r\n    var origin = GetAdvancedValue(config, 'origin', null);\r\n\r\n    if (typeof origin === 'number')\r\n    {\r\n        gameObject.setOrigin(origin);\r\n    }\r\n    else if (origin !== null)\r\n    {\r\n        var ox = GetAdvancedValue(origin, 'x', 0.5);\r\n        var oy = GetAdvancedValue(origin, 'y', 0.5);\r\n\r\n        gameObject.setOrigin(ox, oy);\r\n    }\r\n\r\n    //  BlendMode\r\n\r\n    gameObject.blendMode = GetAdvancedValue(config, 'blendMode', BlendModes.NORMAL);\r\n\r\n    //  Visible\r\n\r\n    gameObject.visible = GetAdvancedValue(config, 'visible', true);\r\n\r\n    //  Add to Scene\r\n\r\n    var add = GetAdvancedValue(config, 'add', true);\r\n\r\n    if (add)\r\n    {\r\n        scene.sys.displayList.add(gameObject);\r\n    }\r\n\r\n    if (gameObject.preUpdate)\r\n    {\r\n        scene.sys.updateList.add(gameObject);\r\n    }\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = BuildGameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3QuanM/YzBhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLG9HQUFrQzs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsV0FBVyxLQUFLLFNBQVM7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0IsS0FBSyxnQkFBZ0I7O0FBRXhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlCQUFpQixjQUFjLEtBQUssVUFBVTs7QUFFOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGVuZE1vZGVzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvQmxlbmRNb2RlcycpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQnVpbGRzIGEgR2FtZSBPYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdhbWVPYmplY3RzLkJ1aWxkR2FtZU9iamVjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGluaXRpYWwgR2FtZU9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR2FtZU9iamVjdENvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZyB0byBidWlsZCB0aGUgR2FtZU9iamVjdCB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIGJ1aWx0IEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IGZ1bmN0aW9uIChzY2VuZSwgZ2FtZU9iamVjdCwgY29uZmlnKVxyXG57XHJcbiAgICAvLyAgUG9zaXRpb25cclxuXHJcbiAgICBnYW1lT2JqZWN0LnggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIGdhbWVPYmplY3QueSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgZ2FtZU9iamVjdC5kZXB0aCA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZGVwdGgnLCAwKTtcclxuXHJcbiAgICAvLyAgRmxpcFxyXG5cclxuICAgIGdhbWVPYmplY3QuZmxpcFggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZsaXBYJywgZmFsc2UpO1xyXG4gICAgZ2FtZU9iamVjdC5mbGlwWSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZmxpcFknLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIFNjYWxlXHJcbiAgICAvLyAgRWl0aGVyOiB7IHNjYWxlOiAyIH0gb3IgeyBzY2FsZTogeyB4OiAyLCB5OiAyIH19XHJcblxyXG4gICAgdmFyIHNjYWxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzY2FsZScsIG51bGwpO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc2NhbGUgPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0U2NhbGUoc2NhbGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2NhbGUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5zY2FsZVggPSBHZXRBZHZhbmNlZFZhbHVlKHNjYWxlLCAneCcsIDEpO1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2NhbGVZID0gR2V0QWR2YW5jZWRWYWx1ZShzY2FsZSwgJ3knLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgU2Nyb2xsRmFjdG9yXHJcbiAgICAvLyAgRWl0aGVyOiB7IHNjcm9sbEZhY3RvcjogMiB9IG9yIHsgc2Nyb2xsRmFjdG9yOiB7IHg6IDIsIHk6IDIgfX1cclxuXHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzY3JvbGxGYWN0b3InLCBudWxsKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHNjcm9sbEZhY3RvciA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRTY3JvbGxGYWN0b3Ioc2Nyb2xsRmFjdG9yKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHNjcm9sbEZhY3RvciAhPT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclggPSBHZXRBZHZhbmNlZFZhbHVlKHNjcm9sbEZhY3RvciwgJ3gnLCAxKTtcclxuICAgICAgICBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkgPSBHZXRBZHZhbmNlZFZhbHVlKHNjcm9sbEZhY3RvciwgJ3knLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgUm90YXRpb25cclxuXHJcbiAgICBnYW1lT2JqZWN0LnJvdGF0aW9uID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdyb3RhdGlvbicsIDApO1xyXG5cclxuICAgIHZhciBhbmdsZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYW5nbGUnLCBudWxsKTtcclxuXHJcbiAgICBpZiAoYW5nbGUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBBbHBoYVxyXG5cclxuICAgIGdhbWVPYmplY3QuYWxwaGEgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2FscGhhJywgMSk7XHJcblxyXG4gICAgLy8gIE9yaWdpblxyXG4gICAgLy8gIEVpdGhlcjogeyBvcmlnaW46IDAuNSB9IG9yIHsgb3JpZ2luOiB7IHg6IDAuNSwgeTogMC41IH19XHJcblxyXG4gICAgdmFyIG9yaWdpbiA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnb3JpZ2luJywgbnVsbCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0T3JpZ2luKG9yaWdpbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcmlnaW4gIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG94ID0gR2V0QWR2YW5jZWRWYWx1ZShvcmlnaW4sICd4JywgMC41KTtcclxuICAgICAgICB2YXIgb3kgPSBHZXRBZHZhbmNlZFZhbHVlKG9yaWdpbiwgJ3knLCAwLjUpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnNldE9yaWdpbihveCwgb3kpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBCbGVuZE1vZGVcclxuXHJcbiAgICBnYW1lT2JqZWN0LmJsZW5kTW9kZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYmxlbmRNb2RlJywgQmxlbmRNb2Rlcy5OT1JNQUwpO1xyXG5cclxuICAgIC8vICBWaXNpYmxlXHJcblxyXG4gICAgZ2FtZU9iamVjdC52aXNpYmxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd2aXNpYmxlJywgdHJ1ZSk7XHJcblxyXG4gICAgLy8gIEFkZCB0byBTY2VuZVxyXG5cclxuICAgIHZhciBhZGQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2FkZCcsIHRydWUpO1xyXG5cclxuICAgIGlmIChhZGQpXHJcbiAgICB7XHJcbiAgICAgICAgc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmFkZChnYW1lT2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ2FtZU9iamVjdC5wcmVVcGRhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgc2NlbmUuc3lzLnVwZGF0ZUxpc3QuYWRkKGdhbWVPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZEdhbWVPYmplY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/BuildGameObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAdvancedValue = __webpack_require__(/*! ../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Adds an Animation component to a Sprite and populates it based on the given config.\r\n *\r\n * @function Phaser.GameObjects.BuildGameObjectAnimation\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Sprite} sprite - The sprite to add an Animation component to.\r\n * @param {object} config - The animation config.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The updated Sprite.\r\n */\r\nvar BuildGameObjectAnimation = function (sprite, config)\r\n{\r\n    var animConfig = GetAdvancedValue(config, 'anims', null);\r\n\r\n    if (animConfig === null)\r\n    {\r\n        return sprite;\r\n    }\r\n\r\n    if (typeof animConfig === 'string')\r\n    {\r\n        //  { anims: 'key' }\r\n        sprite.anims.play(animConfig);\r\n    }\r\n    else if (typeof animConfig === 'object')\r\n    {\r\n        //  { anims: {\r\n        //              key: string\r\n        //              startFrame: [string|integer]\r\n        //              delay: [float]\r\n        //              repeat: [integer]\r\n        //              repeatDelay: [float]\r\n        //              yoyo: [boolean]\r\n        //              play: [boolean]\r\n        //              delayedPlay: [boolean]\r\n        //           }\r\n        //  }\r\n\r\n        var anims = sprite.anims;\r\n\r\n        var key = GetAdvancedValue(animConfig, 'key', undefined);\r\n        var startFrame = GetAdvancedValue(animConfig, 'startFrame', undefined);\r\n\r\n        var delay = GetAdvancedValue(animConfig, 'delay', 0);\r\n        var repeat = GetAdvancedValue(animConfig, 'repeat', 0);\r\n        var repeatDelay = GetAdvancedValue(animConfig, 'repeatDelay', 0);\r\n        var yoyo = GetAdvancedValue(animConfig, 'yoyo', false);\r\n\r\n        var play = GetAdvancedValue(animConfig, 'play', false);\r\n        var delayedPlay = GetAdvancedValue(animConfig, 'delayedPlay', 0);\r\n\r\n        anims.setDelay(delay);\r\n        anims.setRepeat(repeat);\r\n        anims.setRepeatDelay(repeatDelay);\r\n        anims.setYoyo(yoyo);\r\n\r\n        if (play)\r\n        {\r\n            anims.play(key, startFrame);\r\n        }\r\n        else if (delayedPlay > 0)\r\n        {\r\n            anims.delayedPlay(delayedPlay, key, startFrame);\r\n        }\r\n        else\r\n        {\r\n            anims.load(key);\r\n        }\r\n    }\r\n\r\n    return sprite;\r\n};\r\n\r\nmodule.exports = BuildGameObjectAnimation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3RBbmltYXRpb24uanM/NDJlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsb0dBQWtDOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBBbmltYXRpb24gY29tcG9uZW50IHRvIGEgU3ByaXRlIGFuZCBwb3B1bGF0ZXMgaXQgYmFzZWQgb24gdGhlIGdpdmVuIGNvbmZpZy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HYW1lT2JqZWN0cy5CdWlsZEdhbWVPYmplY3RBbmltYXRpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gc3ByaXRlIC0gVGhlIHNwcml0ZSB0byBhZGQgYW4gQW5pbWF0aW9uIGNvbXBvbmVudCB0by5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBhbmltYXRpb24gY29uZmlnLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBUaGUgdXBkYXRlZCBTcHJpdGUuXHJcbiAqL1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uID0gZnVuY3Rpb24gKHNwcml0ZSwgY29uZmlnKVxyXG57XHJcbiAgICB2YXIgYW5pbUNvbmZpZyA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYW5pbXMnLCBudWxsKTtcclxuXHJcbiAgICBpZiAoYW5pbUNvbmZpZyA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc3ByaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgYW5pbUNvbmZpZyA9PT0gJ3N0cmluZycpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHsgYW5pbXM6ICdrZXknIH1cclxuICAgICAgICBzcHJpdGUuYW5pbXMucGxheShhbmltQ29uZmlnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhbmltQ29uZmlnID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICAvLyAgeyBhbmltczoge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICBrZXk6IHN0cmluZ1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICBzdGFydEZyYW1lOiBbc3RyaW5nfGludGVnZXJdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIGRlbGF5OiBbZmxvYXRdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHJlcGVhdDogW2ludGVnZXJdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHJlcGVhdERlbGF5OiBbZmxvYXRdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHlveW86IFtib29sZWFuXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICBwbGF5OiBbYm9vbGVhbl1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgZGVsYXllZFBsYXk6IFtib29sZWFuXVxyXG4gICAgICAgIC8vICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gIH1cclxuXHJcbiAgICAgICAgdmFyIGFuaW1zID0gc3ByaXRlLmFuaW1zO1xyXG5cclxuICAgICAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShhbmltQ29uZmlnLCAna2V5JywgdW5kZWZpbmVkKTtcclxuICAgICAgICB2YXIgc3RhcnRGcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoYW5pbUNvbmZpZywgJ3N0YXJ0RnJhbWUnLCB1bmRlZmluZWQpO1xyXG5cclxuICAgICAgICB2YXIgZGVsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdkZWxheScsIDApO1xyXG4gICAgICAgIHZhciByZXBlYXQgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdyZXBlYXQnLCAwKTtcclxuICAgICAgICB2YXIgcmVwZWF0RGVsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdyZXBlYXREZWxheScsIDApO1xyXG4gICAgICAgIHZhciB5b3lvID0gR2V0QWR2YW5jZWRWYWx1ZShhbmltQ29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHBsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdwbGF5JywgZmFsc2UpO1xyXG4gICAgICAgIHZhciBkZWxheWVkUGxheSA9IEdldEFkdmFuY2VkVmFsdWUoYW5pbUNvbmZpZywgJ2RlbGF5ZWRQbGF5JywgMCk7XHJcblxyXG4gICAgICAgIGFuaW1zLnNldERlbGF5KGRlbGF5KTtcclxuICAgICAgICBhbmltcy5zZXRSZXBlYXQocmVwZWF0KTtcclxuICAgICAgICBhbmltcy5zZXRSZXBlYXREZWxheShyZXBlYXREZWxheSk7XHJcbiAgICAgICAgYW5pbXMuc2V0WW95byh5b3lvKTtcclxuXHJcbiAgICAgICAgaWYgKHBsYXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltcy5wbGF5KGtleSwgc3RhcnRGcmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRlbGF5ZWRQbGF5ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuaW1zLmRlbGF5ZWRQbGF5KGRlbGF5ZWRQbGF5LCBrZXksIHN0YXJ0RnJhbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltcy5sb2FkKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/DisplayList.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/DisplayList.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar List = __webpack_require__(/*! ../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar StableSort = __webpack_require__(/*! ../utils/array/StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Display List plugin.\r\n *\r\n * Display Lists belong to a Scene and maintain the list of Game Objects to render every frame.\r\n *\r\n * Some of these Game Objects may also be part of the Scene's [Update List]{@link Phaser.GameObjects.UpdateList}, for updating.\r\n *\r\n * @class DisplayList\r\n * @extends Phaser.Structs.List.<Phaser.GameObjects.GameObject>\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this Display List belongs to.\r\n */\r\nvar DisplayList = new Class({\r\n\r\n    Extends: List,\r\n\r\n    initialize:\r\n\r\n    function DisplayList (scene)\r\n    {\r\n        List.call(this, scene);\r\n\r\n        /**\r\n         * The flag the determines whether Game Objects should be sorted when `depthSort()` is called.\r\n         *\r\n         * @name Phaser.GameObjects.DisplayList#sortChildrenFlag\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.sortChildrenFlag = false;\r\n\r\n        /**\r\n         * The Scene that this Display List belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.DisplayList#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Scene's Systems.\r\n         *\r\n         * @name Phaser.GameObjects.DisplayList#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Force a sort of the display list on the next call to depthSort.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#queueDepthSort\r\n     * @since 3.0.0\r\n     */\r\n    queueDepthSort: function ()\r\n    {\r\n        this.sortChildrenFlag = true;\r\n    },\r\n\r\n    /**\r\n     * Immediately sorts the display list if the flag is set.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#depthSort\r\n     * @since 3.0.0\r\n     */\r\n    depthSort: function ()\r\n    {\r\n        if (this.sortChildrenFlag)\r\n        {\r\n            StableSort.inplace(this.list, this.sortByDepth);\r\n\r\n            this.sortChildrenFlag = false;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Compare the depth of two Game Objects.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#sortByDepth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} childA - The first Game Object.\r\n     * @param {Phaser.GameObjects.GameObject} childB - The second Game Object.\r\n     *\r\n     * @return {integer} The difference between the depths of each Game Object.\r\n     */\r\n    sortByDepth: function (childA, childB)\r\n    {\r\n        return childA._depth - childB._depth;\r\n    },\r\n\r\n    /**\r\n     * Returns an array which contains all objects currently on the Display List.\r\n     * This is a reference to the main list array, not a copy of it, so be careful not to modify it.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#getChildren\r\n     * @since 3.12.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} The group members.\r\n     */\r\n    getChildren: function ()\r\n    {\r\n        return this.list;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var i = this.list.length;\r\n\r\n        while (i--)\r\n        {\r\n            this.list[i].destroy(true);\r\n        }\r\n\r\n        this.list.length = 0;\r\n\r\n        this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.GameObjects.DisplayList#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('DisplayList', DisplayList, 'displayList');\r\n\r\nmodule.exports = DisplayList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9EaXNwbGF5TGlzdC5qcz8wOTNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxrRUFBaUI7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBMkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSxvQ0FBb0M7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9EaXNwbGF5TGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi9zdHJ1Y3RzL0xpc3QnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFN0YWJsZVNvcnQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9TdGFibGVTb3J0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgRGlzcGxheSBMaXN0IHBsdWdpbi5cclxuICpcclxuICogRGlzcGxheSBMaXN0cyBiZWxvbmcgdG8gYSBTY2VuZSBhbmQgbWFpbnRhaW4gdGhlIGxpc3Qgb2YgR2FtZSBPYmplY3RzIHRvIHJlbmRlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogU29tZSBvZiB0aGVzZSBHYW1lIE9iamVjdHMgbWF5IGFsc28gYmUgcGFydCBvZiB0aGUgU2NlbmUncyBbVXBkYXRlIExpc3Rde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fSwgZm9yIHVwZGF0aW5nLlxyXG4gKlxyXG4gKiBAY2xhc3MgRGlzcGxheUxpc3RcclxuICogQGV4dGVuZHMgUGhhc2VyLlN0cnVjdHMuTGlzdC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCB0aGlzIERpc3BsYXkgTGlzdCBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIERpc3BsYXlMaXN0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBMaXN0LFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGlzcGxheUxpc3QgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIExpc3QuY2FsbCh0aGlzLCBzY2VuZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmbGFnIHRoZSBkZXRlcm1pbmVzIHdoZXRoZXIgR2FtZSBPYmplY3RzIHNob3VsZCBiZSBzb3J0ZWQgd2hlbiBgZGVwdGhTb3J0KClgIGlzIGNhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzb3J0Q2hpbGRyZW5GbGFnXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvcnRDaGlsZHJlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRoYXQgdGhpcyBEaXNwbGF5IExpc3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUncyBTeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0I3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3QjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIGEgc29ydCBvZiB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBuZXh0IGNhbGwgdG8gZGVwdGhTb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0I3F1ZXVlRGVwdGhTb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcXVldWVEZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zb3J0Q2hpbGRyZW5GbGFnID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbW1lZGlhdGVseSBzb3J0cyB0aGUgZGlzcGxheSBsaXN0IGlmIHRoZSBmbGFnIGlzIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNkZXB0aFNvcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ydENoaWxkcmVuRmxhZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFN0YWJsZVNvcnQuaW5wbGFjZSh0aGlzLmxpc3QsIHRoaXMuc29ydEJ5RGVwdGgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0Q2hpbGRyZW5GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgdGhlIGRlcHRoIG9mIHR3byBHYW1lIE9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3Qjc29ydEJ5RGVwdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkQSAtIFRoZSBmaXJzdCBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkQiAtIFRoZSBzZWNvbmQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGVwdGhzIG9mIGVhY2ggR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNvcnRCeURlcHRoOiBmdW5jdGlvbiAoY2hpbGRBLCBjaGlsZEIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkQS5fZGVwdGggLSBjaGlsZEIuX2RlcHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggY29udGFpbnMgYWxsIG9iamVjdHMgY3VycmVudGx5IG9uIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKiBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtYWluIGxpc3QgYXJyYXksIG5vdCBhIGNvcHkgb2YgaXQsIHNvIGJlIGNhcmVmdWwgbm90IHRvIG1vZGlmeSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNnZXRDaGlsZHJlblxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IFRoZSBncm91cCBtZW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRDaGlsZHJlbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3Qjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0W2ldLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0Rpc3BsYXlMaXN0JywgRGlzcGxheUxpc3QsICdkaXNwbGF5TGlzdCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5TGlzdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/DisplayList.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/GameObject.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/GameObject.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ComponentsToJSON = __webpack_require__(/*! ./components/ToJSON */ \"./node_modules/phaser/src/gameobjects/components/ToJSON.js\");\r\nvar DataManager = __webpack_require__(/*! ../data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The base class that all Game Objects extend.\r\n * You don't create GameObjects directly and they cannot be added to the display list.\r\n * Instead, use them as the base for your own custom classes.\r\n *\r\n * @class GameObject\r\n * @memberof Phaser.GameObjects\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {string} type - A textual representation of the type of Game Object, i.e. `sprite`.\r\n */\r\nvar GameObject = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function GameObject (scene, type)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Scene to which this Game Object belongs.\r\n         * Game Objects can only belong to one Scene.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#scene\r\n         * @type {Phaser.Scene}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A textual representation of this Game Object, i.e. `sprite`.\r\n         * Used internally by Phaser but is available for your own custom classes to populate.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#type\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = type;\r\n\r\n        /**\r\n         * The current state of this Game Object.\r\n         * \r\n         * Phaser itself will never modify this value, although plugins may do so.\r\n         * \r\n         * Use this property to track the state of a Game Object during its lifetime. For example, it could move from\r\n         * a state of 'moving', to 'attacking', to 'dead'. The state value should be an integer (ideally mapped to a constant\r\n         * in your game code), or a string. These are recommended to keep it light and simple, with fast comparisons.\r\n         * If you need to store complex data about your Game Object, look at using the Data Component instead.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#state\r\n         * @type {(integer|string)}\r\n         * @since 3.16.0\r\n         */\r\n        this.state = 0;\r\n\r\n        /**\r\n         * The parent Container of this Game Object, if it has one.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#parentContainer\r\n         * @type {Phaser.GameObjects.Container}\r\n         * @since 3.4.0\r\n         */\r\n        this.parentContainer = null;\r\n\r\n        /**\r\n         * The name of this Game Object.\r\n         * Empty by default and never populated by Phaser, this is left for developers to use.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * The active state of this Game Object.\r\n         * A Game Object with an active state of `true` is processed by the Scenes UpdateList, if added to it.\r\n         * An active object is one which is having its logic and internal systems updated.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * The Tab Index of the Game Object.\r\n         * Reserved for future use by plugins and the Input Manager.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#tabIndex\r\n         * @type {integer}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.tabIndex = -1;\r\n\r\n        /**\r\n         * A Data Manager.\r\n         * It allows you to store, query and get key/value paired information specific to this Game Object.\r\n         * `null` by default. Automatically created if you use `getData` or `setData` or `setDataEnabled`.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#data\r\n         * @type {Phaser.Data.DataManager}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.data = null;\r\n\r\n        /**\r\n         * The flags that are compared against `RENDER_MASK` to determine if this Game Object will render or not.\r\n         * The bits are 0001 | 0010 | 0100 | 1000 set by the components Visible, Alpha, Transform and Texture respectively.\r\n         * If those components are not used by your custom class then you can use this bitmask as you wish.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#renderFlags\r\n         * @type {integer}\r\n         * @default 15\r\n         * @since 3.0.0\r\n         */\r\n        this.renderFlags = 15;\r\n\r\n        /**\r\n         * A bitmask that controls if this Game Object is drawn by a Camera or not.\r\n         * Not usually set directly, instead call `Camera.ignore`, however you can\r\n         * set this property directly using the Camera.id property:\r\n         *\r\n         * @example\r\n         * this.cameraFilter |= camera.id\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#cameraFilter\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.cameraFilter = 0;\r\n\r\n        /**\r\n         * If this Game Object is enabled for input then this property will contain an InteractiveObject instance.\r\n         * Not usually set directly. Instead call `GameObject.setInteractive()`.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#input\r\n         * @type {?Phaser.Types.Input.InteractiveObject}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.input = null;\r\n\r\n        /**\r\n         * If this Game Object is enabled for physics then this property will contain a reference to a Physics Body.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#body\r\n         * @type {?(object|Phaser.Physics.Arcade.Body|Phaser.Physics.Impact.Body)}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.body = null;\r\n\r\n        /**\r\n         * This Game Object will ignore all calls made to its destroy method if this flag is set to `true`.\r\n         * This includes calls that may come from a Group, Container or the Scene itself.\r\n         * While it allows you to persist a Game Object across Scenes, please understand you are entirely\r\n         * responsible for managing references to and from this Game Object.\r\n         *\r\n         * @name Phaser.GameObjects.GameObject#ignoreDestroy\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.5.0\r\n         */\r\n        this.ignoreDestroy = false;\r\n\r\n        //  Tell the Scene to re-sort the children\r\n        scene.sys.queueDepthSort();\r\n    },\r\n\r\n    /**\r\n     * Sets the `active` property of this Game Object and returns this Game Object for further chaining.\r\n     * A Game Object with its `active` property set to `true` will be updated by the Scenes UpdateList.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - True if this Game Object should be set as active, false if not.\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setActive: function (value)\r\n    {\r\n        this.active = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the `name` property of this Game Object and returns this Game Object for further chaining.\r\n     * The `name` property is not populated by Phaser and is presented for your own use.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setName\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} value - The name to be given to this Game Object.\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setName: function (value)\r\n    {\r\n        this.name = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the current state of this Game Object.\r\n     * \r\n     * Phaser itself will never modify the State of a Game Object, although plugins may do so.\r\n     * \r\n     * For example, a Game Object could change from a state of 'moving', to 'attacking', to 'dead'.\r\n     * The state value should typically be an integer (ideally mapped to a constant\r\n     * in your game code), but could also be a string. It is recommended to keep it light and simple.\r\n     * If you need to store complex data about your Game Object, look at using the Data Component instead.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setState\r\n     * @since 3.16.0\r\n     *\r\n     * @param {(integer|string)} value - The state of the Game Object.\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setState: function (value)\r\n    {\r\n        this.state = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a Data Manager component to this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setDataEnabled\r\n     * @since 3.0.0\r\n     * @see Phaser.Data.DataManager\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setDataEnabled: function ()\r\n    {\r\n        if (!this.data)\r\n        {\r\n            this.data = new DataManager(this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Allows you to store a key value pair within this Game Objects Data Manager.\r\n     *\r\n     * If the Game Object has not been enabled for data (via `setDataEnabled`) then it will be enabled\r\n     * before setting the value.\r\n     *\r\n     * If the key doesn't already exist in the Data Manager then it is created.\r\n     *\r\n     * ```javascript\r\n     * sprite.setData('name', 'Red Gem Stone');\r\n     * ```\r\n     *\r\n     * You can also pass in an object of key value pairs as the first argument:\r\n     *\r\n     * ```javascript\r\n     * sprite.setData({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\r\n     * ```\r\n     *\r\n     * To get a value back again you can call `getData`:\r\n     *\r\n     * ```javascript\r\n     * sprite.getData('gold');\r\n     * ```\r\n     *\r\n     * Or you can access the value directly via the `values` property, where it works like any other variable:\r\n     *\r\n     * ```javascript\r\n     * sprite.data.values.gold += 50;\r\n     * ```\r\n     *\r\n     * When the value is first set, a `setdata` event is emitted from this Game Object.\r\n     *\r\n     * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\r\n     * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata-PlayerLives`.\r\n     * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\r\n     *\r\n     * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\r\n     * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setData\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|object)} key - The key to set the value for. Or an object of key value pairs. If an object the `data` argument is ignored.\r\n     * @param {*} [data] - The value to set for the given key. If an object is provided as the key this argument is ignored.\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setData: function (key, value)\r\n    {\r\n        if (!this.data)\r\n        {\r\n            this.data = new DataManager(this);\r\n        }\r\n\r\n        this.data.set(key, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieves the value for the given key in this Game Objects Data Manager, or undefined if it doesn't exist.\r\n     *\r\n     * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\r\n     *\r\n     * ```javascript\r\n     * sprite.getData('gold');\r\n     * ```\r\n     *\r\n     * Or access the value directly:\r\n     *\r\n     * ```javascript\r\n     * sprite.data.values.gold;\r\n     * ```\r\n     *\r\n     * You can also pass in an array of keys, in which case an array of values will be returned:\r\n     *\r\n     * ```javascript\r\n     * sprite.getData([ 'gold', 'armor', 'health' ]);\r\n     * ```\r\n     *\r\n     * This approach is useful for destructuring arrays in ES6.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#getData\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\r\n     *\r\n     * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\r\n     */\r\n    getData: function (key)\r\n    {\r\n        if (!this.data)\r\n        {\r\n            this.data = new DataManager(this);\r\n        }\r\n\r\n        return this.data.get(key);\r\n    },\r\n\r\n    /**\r\n     * Pass this Game Object to the Input Manager to enable it for Input.\r\n     *\r\n     * Input works by using hit areas, these are nearly always geometric shapes, such as rectangles or circles, that act as the hit area\r\n     * for the Game Object. However, you can provide your own hit area shape and callback, should you wish to handle some more advanced\r\n     * input detection.\r\n     *\r\n     * If no arguments are provided it will try and create a rectangle hit area based on the texture frame the Game Object is using. If\r\n     * this isn't a texture-bound object, such as a Graphics or BitmapText object, this will fail, and you'll need to provide a specific\r\n     * shape for it to use.\r\n     *\r\n     * You can also provide an Input Configuration Object as the only argument to this method.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#setInteractive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n     * @param {boolean} [dropZone=false] - Should this Game Object be treated as a drop zone target?\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    setInteractive: function (shape, callback, dropZone)\r\n    {\r\n        this.scene.sys.input.enable(this, shape, callback, dropZone);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If this Game Object has previously been enabled for input, this will disable it.\r\n     *\r\n     * An object that is disabled for input stops processing or being considered for\r\n     * input events, but can be turned back on again at any time by simply calling\r\n     * `setInteractive()` with no arguments provided.\r\n     *\r\n     * If want to completely remove interaction from this Game Object then use `removeInteractive` instead.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#disableInteractive\r\n     * @since 3.7.0\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    disableInteractive: function ()\r\n    {\r\n        if (this.input)\r\n        {\r\n            this.input.enabled = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If this Game Object has previously been enabled for input, this will queue it\r\n     * for removal, causing it to no longer be interactive. The removal happens on\r\n     * the next game step, it is not immediate.\r\n     *\r\n     * The Interactive Object that was assigned to this Game Object will be destroyed,\r\n     * removed from the Input Manager and cleared from this Game Object.\r\n     *\r\n     * If you wish to re-enable this Game Object at a later date you will need to\r\n     * re-create its InteractiveObject by calling `setInteractive` again.\r\n     *\r\n     * If you wish to only temporarily stop an object from receiving input then use\r\n     * `disableInteractive` instead, as that toggles the interactive state, where-as\r\n     * this erases it completely.\r\n     * \r\n     * If you wish to resize a hit area, don't remove and then set it as being\r\n     * interactive. Instead, access the hitarea object directly and resize the shape\r\n     * being used. I.e.: `sprite.input.hitArea.setSize(width, height)` (assuming the\r\n     * shape is a Rectangle, which it is by default.)\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#removeInteractive\r\n     * @since 3.7.0\r\n     *\r\n     * @return {this} This GameObject.\r\n     */\r\n    removeInteractive: function ()\r\n    {\r\n        this.scene.sys.input.clear(this);\r\n\r\n        this.input = undefined;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * To be overridden by custom GameObjects. Allows base objects to be used in a Pool.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {...*} [args] - args\r\n     */\r\n    update: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Returns a JSON representation of the Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return ComponentsToJSON(this);\r\n    },\r\n\r\n    /**\r\n     * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n     * Also checks the Game Object against the given Cameras exclusion list.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#willRender\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to check against this Game Object.\r\n     *\r\n     * @return {boolean} True if the Game Object should be rendered, otherwise false.\r\n     */\r\n    willRender: function (camera)\r\n    {\r\n        return !(GameObject.RENDER_MASK !== this.renderFlags || (this.cameraFilter !== 0 && (this.cameraFilter & camera.id)));\r\n    },\r\n\r\n    /**\r\n     * Returns an array containing the display list index of either this Game Object, or if it has one,\r\n     * its parent Container. It then iterates up through all of the parent containers until it hits the\r\n     * root of the display list (which is index 0 in the returned array).\r\n     *\r\n     * Used internally by the InputPlugin but also useful if you wish to find out the display depth of\r\n     * this Game Object and all of its ancestors.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#getIndexList\r\n     * @since 3.4.0\r\n     *\r\n     * @return {integer[]} An array of display list position indexes.\r\n     */\r\n    getIndexList: function ()\r\n    {\r\n        // eslint-disable-next-line consistent-this\r\n        var child = this;\r\n        var parent = this.parentContainer;\r\n\r\n        var indexes = [];\r\n\r\n        while (parent)\r\n        {\r\n            // indexes.unshift([parent.getIndex(child), parent.name]);\r\n            indexes.unshift(parent.getIndex(child));\r\n\r\n            child = parent;\r\n\r\n            if (!parent.parentContainer)\r\n            {\r\n                break;\r\n            }\r\n            else\r\n            {\r\n                parent = parent.parentContainer;\r\n            }\r\n        }\r\n\r\n        // indexes.unshift([this.scene.sys.displayList.getIndex(child), 'root']);\r\n        indexes.unshift(this.scene.sys.displayList.getIndex(child));\r\n\r\n        return indexes;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Game Object removing it from the Display List and Update List and\r\n     * severing all ties to parent resources.\r\n     *\r\n     * Also removes itself from the Input Manager and Physics Manager if previously enabled.\r\n     *\r\n     * Use this to remove a Game Object from your game if you don't ever plan to use it again.\r\n     * As long as no reference to it exists within your own code it should become free for\r\n     * garbage collection by the browser.\r\n     *\r\n     * If you just want to temporarily disable an object then look at using the\r\n     * Game Object Pool instead of destroying it, as destroyed objects cannot be resurrected.\r\n     *\r\n     * @method Phaser.GameObjects.GameObject#destroy\r\n     * @fires Phaser.GameObjects.Events#DESTROY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [fromScene=false] - Is this Game Object being destroyed as the result of a Scene shutdown?\r\n     */\r\n    destroy: function (fromScene)\r\n    {\r\n        if (fromScene === undefined) { fromScene = false; }\r\n\r\n        //  This Game Object has already been destroyed\r\n        if (!this.scene || this.ignoreDestroy)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (this.preDestroy)\r\n        {\r\n            this.preDestroy.call(this);\r\n        }\r\n\r\n        this.emit(Events.DESTROY, this);\r\n\r\n        var sys = this.scene.sys;\r\n\r\n        if (!fromScene)\r\n        {\r\n            sys.displayList.remove(this);\r\n            sys.updateList.remove(this);\r\n        }\r\n\r\n        if (this.input)\r\n        {\r\n            sys.input.clear(this);\r\n            this.input = undefined;\r\n        }\r\n\r\n        if (this.data)\r\n        {\r\n            this.data.destroy();\r\n\r\n            this.data = undefined;\r\n        }\r\n\r\n        if (this.body)\r\n        {\r\n            this.body.destroy();\r\n            this.body = undefined;\r\n        }\r\n\r\n        //  Tell the Scene to re-sort the children\r\n        if (!fromScene)\r\n        {\r\n            sys.queueDepthSort();\r\n        }\r\n\r\n        this.active = false;\r\n        this.visible = false;\r\n\r\n        this.scene = undefined;\r\n\r\n        this.parentContainer = undefined;\r\n\r\n        this.removeAllListeners();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * The bitmask that `GameObject.renderFlags` is compared against to determine if the Game Object will render or not.\r\n *\r\n * @constant {integer} RENDER_MASK\r\n * @memberof Phaser.GameObjects.GameObject\r\n * @default\r\n */\r\nGameObject.RENDER_MASK = 15;\r\n\r\nmodule.exports = GameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0LmpzPzE1NzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsdUJBQXVCLG1CQUFPLENBQUMsdUZBQXFCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsdUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJEQUEyRDtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNENBQTRDO0FBQzNELGVBQWUsbUNBQW1DO0FBQ2xELGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0NBQXdDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL0dhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzVG9KU09OID0gcmVxdWlyZSgnLi9jb21wb25lbnRzL1RvSlNPTicpO1xyXG52YXIgRGF0YU1hbmFnZXIgPSByZXF1aXJlKCcuLi9kYXRhL0RhdGFNYW5hZ2VyJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgR2FtZSBPYmplY3RzIGV4dGVuZC5cclxuICogWW91IGRvbid0IGNyZWF0ZSBHYW1lT2JqZWN0cyBkaXJlY3RseSBhbmQgdGhleSBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGRpc3BsYXkgbGlzdC5cclxuICogSW5zdGVhZCwgdXNlIHRoZW0gYXMgdGhlIGJhc2UgZm9yIHlvdXIgb3duIGN1c3RvbSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBBIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgR2FtZSBPYmplY3QsIGkuZS4gYHNwcml0ZWAuXHJcbiAqL1xyXG52YXIgR2FtZU9iamVjdCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZU9iamVjdCAoc2NlbmUsIHR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuXHJcbiAgICAgICAgICogR2FtZSBPYmplY3RzIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QsIGkuZS4gYHNwcml0ZWAuXHJcbiAgICAgICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IFBoYXNlciBidXQgaXMgYXZhaWxhYmxlIGZvciB5b3VyIG93biBjdXN0b20gY2xhc3NlcyB0byBwb3B1bGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUGhhc2VyIGl0c2VsZiB3aWxsIG5ldmVyIG1vZGlmeSB0aGlzIHZhbHVlLCBhbHRob3VnaCBwbHVnaW5zIG1heSBkbyBzby5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byB0cmFjayB0aGUgc3RhdGUgb2YgYSBHYW1lIE9iamVjdCBkdXJpbmcgaXRzIGxpZmV0aW1lLiBGb3IgZXhhbXBsZSwgaXQgY291bGQgbW92ZSBmcm9tXHJcbiAgICAgICAgICogYSBzdGF0ZSBvZiAnbW92aW5nJywgdG8gJ2F0dGFja2luZycsIHRvICdkZWFkJy4gVGhlIHN0YXRlIHZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyIChpZGVhbGx5IG1hcHBlZCB0byBhIGNvbnN0YW50XHJcbiAgICAgICAgICogaW4geW91ciBnYW1lIGNvZGUpLCBvciBhIHN0cmluZy4gVGhlc2UgYXJlIHJlY29tbWVuZGVkIHRvIGtlZXAgaXQgbGlnaHQgYW5kIHNpbXBsZSwgd2l0aCBmYXN0IGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqIElmIHlvdSBuZWVkIHRvIHN0b3JlIGNvbXBsZXggZGF0YSBhYm91dCB5b3VyIEdhbWUgT2JqZWN0LCBsb29rIGF0IHVzaW5nIHRoZSBEYXRhIENvbXBvbmVudCBpbnN0ZWFkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7KGludGVnZXJ8c3RyaW5nKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgR2FtZSBPYmplY3QsIGlmIGl0IGhhcyBvbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNwYXJlbnRDb250YWluZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn1cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudENvbnRhaW5lciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogRW1wdHkgYnkgZGVmYXVsdCBhbmQgbmV2ZXIgcG9wdWxhdGVkIGJ5IFBoYXNlciwgdGhpcyBpcyBsZWZ0IGZvciBkZXZlbG9wZXJzIHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhY3RpdmUgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBBIEdhbWUgT2JqZWN0IHdpdGggYW4gYWN0aXZlIHN0YXRlIG9mIGB0cnVlYCBpcyBwcm9jZXNzZWQgYnkgdGhlIFNjZW5lcyBVcGRhdGVMaXN0LCBpZiBhZGRlZCB0byBpdC5cclxuICAgICAgICAgKiBBbiBhY3RpdmUgb2JqZWN0IGlzIG9uZSB3aGljaCBpcyBoYXZpbmcgaXRzIGxvZ2ljIGFuZCBpbnRlcm5hbCBzeXN0ZW1zIHVwZGF0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGFiIEluZGV4IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBieSBwbHVnaW5zIGFuZCB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3RhYkluZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhYkluZGV4ID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICAgICAqIEl0IGFsbG93cyB5b3UgdG8gc3RvcmUsIHF1ZXJ5IGFuZCBnZXQga2V5L3ZhbHVlIHBhaXJlZCBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIGBudWxsYCBieSBkZWZhdWx0LiBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgaWYgeW91IHVzZSBgZ2V0RGF0YWAgb3IgYHNldERhdGFgIG9yIGBzZXREYXRhRW5hYmxlZGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmxhZ3MgdGhhdCBhcmUgY29tcGFyZWQgYWdhaW5zdCBgUkVOREVSX01BU0tgIHRvIGRldGVybWluZSBpZiB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgcmVuZGVyIG9yIG5vdC5cclxuICAgICAgICAgKiBUaGUgYml0cyBhcmUgMDAwMSB8IDAwMTAgfCAwMTAwIHwgMTAwMCBzZXQgYnkgdGhlIGNvbXBvbmVudHMgVmlzaWJsZSwgQWxwaGEsIFRyYW5zZm9ybSBhbmQgVGV4dHVyZSByZXNwZWN0aXZlbHkuXHJcbiAgICAgICAgICogSWYgdGhvc2UgY29tcG9uZW50cyBhcmUgbm90IHVzZWQgYnkgeW91ciBjdXN0b20gY2xhc3MgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIGJpdG1hc2sgYXMgeW91IHdpc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNyZW5kZXJGbGFnc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDE1XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbGFncyA9IDE1O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJpdG1hc2sgdGhhdCBjb250cm9scyBpZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGRyYXduIGJ5IGEgQ2FtZXJhIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3QgdXN1YWxseSBzZXQgZGlyZWN0bHksIGluc3RlYWQgY2FsbCBgQ2FtZXJhLmlnbm9yZWAsIGhvd2V2ZXIgeW91IGNhblxyXG4gICAgICAgICAqIHNldCB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IHVzaW5nIHRoZSBDYW1lcmEuaWQgcHJvcGVydHk6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHRoaXMuY2FtZXJhRmlsdGVyIHw9IGNhbWVyYS5pZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjY2FtZXJhRmlsdGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmFGaWx0ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGVuYWJsZWQgZm9yIGlucHV0IHRoZW4gdGhpcyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYW4gSW50ZXJhY3RpdmVPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgICAgICogTm90IHVzdWFsbHkgc2V0IGRpcmVjdGx5LiBJbnN0ZWFkIGNhbGwgYEdhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmUoKWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNpbnB1dFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLklucHV0LkludGVyYWN0aXZlT2JqZWN0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBpcyBlbmFibGVkIGZvciBwaHlzaWNzIHRoZW4gdGhpcyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gYSBQaHlzaWNzIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNib2R5XHJcbiAgICAgICAgICogQHR5cGUgez8ob2JqZWN0fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5KX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBHYW1lIE9iamVjdCB3aWxsIGlnbm9yZSBhbGwgY2FsbHMgbWFkZSB0byBpdHMgZGVzdHJveSBtZXRob2QgaWYgdGhpcyBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgICAgICogVGhpcyBpbmNsdWRlcyBjYWxscyB0aGF0IG1heSBjb21lIGZyb20gYSBHcm91cCwgQ29udGFpbmVyIG9yIHRoZSBTY2VuZSBpdHNlbGYuXHJcbiAgICAgICAgICogV2hpbGUgaXQgYWxsb3dzIHlvdSB0byBwZXJzaXN0IGEgR2FtZSBPYmplY3QgYWNyb3NzIFNjZW5lcywgcGxlYXNlIHVuZGVyc3RhbmQgeW91IGFyZSBlbnRpcmVseVxyXG4gICAgICAgICAqIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyByZWZlcmVuY2VzIHRvIGFuZCBmcm9tIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNpZ25vcmVEZXN0cm95XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlnbm9yZURlc3Ryb3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gIFRlbGwgdGhlIFNjZW5lIHRvIHJlLXNvcnQgdGhlIGNoaWxkcmVuXHJcbiAgICAgICAgc2NlbmUuc3lzLnF1ZXVlRGVwdGhTb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGFjdGl2ZWAgcHJvcGVydHkgb2YgdGhpcyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyB0aGlzIEdhbWUgT2JqZWN0IGZvciBmdXJ0aGVyIGNoYWluaW5nLlxyXG4gICAgICogQSBHYW1lIE9iamVjdCB3aXRoIGl0cyBgYWN0aXZlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgU2NlbmVzIFVwZGF0ZUxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUcnVlIGlmIHRoaXMgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHNldCBhcyBhY3RpdmUsIGZhbHNlIGlmIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjdGl2ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGBuYW1lYCBwcm9wZXJ0eSBvZiB0aGlzIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIHRoaXMgR2FtZSBPYmplY3QgZm9yIGZ1cnRoZXIgY2hhaW5pbmcuXHJcbiAgICAgKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIG5vdCBwb3B1bGF0ZWQgYnkgUGhhc2VyIGFuZCBpcyBwcmVzZW50ZWQgZm9yIHlvdXIgb3duIHVzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldE5hbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBuYW1lIHRvIGJlIGdpdmVuIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXROYW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogUGhhc2VyIGl0c2VsZiB3aWxsIG5ldmVyIG1vZGlmeSB0aGUgU3RhdGUgb2YgYSBHYW1lIE9iamVjdCwgYWx0aG91Z2ggcGx1Z2lucyBtYXkgZG8gc28uXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBleGFtcGxlLCBhIEdhbWUgT2JqZWN0IGNvdWxkIGNoYW5nZSBmcm9tIGEgc3RhdGUgb2YgJ21vdmluZycsIHRvICdhdHRhY2tpbmcnLCB0byAnZGVhZCcuXHJcbiAgICAgKiBUaGUgc3RhdGUgdmFsdWUgc2hvdWxkIHR5cGljYWxseSBiZSBhbiBpbnRlZ2VyIChpZGVhbGx5IG1hcHBlZCB0byBhIGNvbnN0YW50XHJcbiAgICAgKiBpbiB5b3VyIGdhbWUgY29kZSksIGJ1dCBjb3VsZCBhbHNvIGJlIGEgc3RyaW5nLiBJdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwIGl0IGxpZ2h0IGFuZCBzaW1wbGUuXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byBzdG9yZSBjb21wbGV4IGRhdGEgYWJvdXQgeW91ciBHYW1lIE9iamVjdCwgbG9vayBhdCB1c2luZyB0aGUgRGF0YSBDb21wb25lbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldFN0YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSB2YWx1ZSAtIFRoZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdGF0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIERhdGEgTWFuYWdlciBjb21wb25lbnQgdG8gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldERhdGFFbmFibGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIEBzZWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFFbmFibGVkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dzIHlvdSB0byBzdG9yZSBhIGtleSB2YWx1ZSBwYWlyIHdpdGhpbiB0aGlzIEdhbWUgT2JqZWN0cyBEYXRhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIEdhbWUgT2JqZWN0IGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciBkYXRhICh2aWEgYHNldERhdGFFbmFibGVkYCkgdGhlbiBpdCB3aWxsIGJlIGVuYWJsZWRcclxuICAgICAqIGJlZm9yZSBzZXR0aW5nIHRoZSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgRGF0YSBNYW5hZ2VyIHRoZW4gaXQgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuc2V0RGF0YSgnbmFtZScsICdSZWQgR2VtIFN0b25lJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvYmplY3Qgb2Yga2V5IHZhbHVlIHBhaXJzIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuc2V0RGF0YSh7IG5hbWU6ICdSZWQgR2VtIFN0b25lJywgbGV2ZWw6IDIsIG93bmVyOiAnTGluaycsIGdvbGQ6IDUwIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogVG8gZ2V0IGEgdmFsdWUgYmFjayBhZ2FpbiB5b3UgY2FuIGNhbGwgYGdldERhdGFgOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5nZXREYXRhKCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBPciB5b3UgY2FuIGFjY2VzcyB0aGUgdmFsdWUgZGlyZWN0bHkgdmlhIHRoZSBgdmFsdWVzYCBwcm9wZXJ0eSwgd2hlcmUgaXQgd29ya3MgbGlrZSBhbnkgb3RoZXIgdmFyaWFibGU6XHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogc3ByaXRlLmRhdGEudmFsdWVzLmdvbGQgKz0gNTA7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBXaGVuIHRoZSB2YWx1ZSBpcyBmaXJzdCBzZXQsIGEgYHNldGRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgZnJvbSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIGEgYGNoYW5nZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgaW5zdGVhZCwgYWxvbmcgYW4gZXZlbnQgbmFtZWQgYWZ0ZXIgdGhlIGtleS5cclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXBkYXRlZCBhbiBleGlzdGluZyBrZXkgY2FsbGVkIGBQbGF5ZXJMaXZlc2AgdGhlbiBpdCB3b3VsZCBlbWl0IHRoZSBldmVudCBgY2hhbmdlZGF0YS1QbGF5ZXJMaXZlc2AuXHJcbiAgICAgKiBUaGVzZSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHJlZ2FyZGxlc3MgaWYgeW91IHVzZSB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIHZhbHVlLCBvciB0aGUgZGlyZWN0IGB2YWx1ZXNgIHNldHRlci5cclxuICAgICAqXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkYXRhIGtleXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCBtdXN0IGJlIHZhbGlkIEphdmFTY3JpcHQgT2JqZWN0IHByb3BlcnR5IHN0cmluZ3MuXHJcbiAgICAgKiBUaGlzIG1lYW5zIHRoZSBrZXlzIGBnb2xkYCBhbmQgYEdvbGRgIGFyZSB0cmVhdGVkIGFzIHR3byB1bmlxdWUgdmFsdWVzIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0RGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG9iamVjdCl9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuIE9yIGFuIG9iamVjdCBvZiBrZXkgdmFsdWUgcGFpcnMuIElmIGFuIG9iamVjdCB0aGUgYGRhdGFgIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0geyp9IFtkYXRhXSAtIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBnaXZlbiBrZXkuIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBhcyB0aGUga2V5IHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBpbiB0aGlzIEdhbWUgT2JqZWN0cyBEYXRhIE1hbmFnZXIsIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBhY2Nlc3MgdmFsdWVzIHZpYSB0aGUgYHZhbHVlc2Agb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIGtleSBjYWxsZWQgYGdvbGRgIHlvdSBjYW4gZG8gZWl0aGVyOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5nZXREYXRhKCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBPciBhY2Nlc3MgdGhlIHZhbHVlIGRpcmVjdGx5OlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5kYXRhLnZhbHVlcy5nb2xkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gYXJyYXkgb2Yga2V5cywgaW4gd2hpY2ggY2FzZSBhbiBhcnJheSBvZiB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuZ2V0RGF0YShbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGFwcHJvYWNoIGlzIHVzZWZ1bCBmb3IgZGVzdHJ1Y3R1cmluZyBhcnJheXMgaW4gRVM2LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZ2V0RGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUsIG9yIGFuIGFycmF5IG9mIGtleXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIHZhbHVlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4ga2V5LCBvciBhbiBhcnJheSBvZiB2YWx1ZXMsIHRoZSBvcmRlciBvZiB3aGljaCB3aWxsIG1hdGNoIHRoZSBpbnB1dCBhcnJheS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBEYXRhTWFuYWdlcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzcyB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBJbnB1dCBNYW5hZ2VyIHRvIGVuYWJsZSBpdCBmb3IgSW5wdXQuXHJcbiAgICAgKlxyXG4gICAgICogSW5wdXQgd29ya3MgYnkgdXNpbmcgaGl0IGFyZWFzLCB0aGVzZSBhcmUgbmVhcmx5IGFsd2F5cyBnZW9tZXRyaWMgc2hhcGVzLCBzdWNoIGFzIHJlY3RhbmdsZXMgb3IgY2lyY2xlcywgdGhhdCBhY3QgYXMgdGhlIGhpdCBhcmVhXHJcbiAgICAgKiBmb3IgdGhlIEdhbWUgT2JqZWN0LiBIb3dldmVyLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24gaGl0IGFyZWEgc2hhcGUgYW5kIGNhbGxiYWNrLCBzaG91bGQgeW91IHdpc2ggdG8gaGFuZGxlIHNvbWUgbW9yZSBhZHZhbmNlZFxyXG4gICAgICogaW5wdXQgZGV0ZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgaXQgd2lsbCB0cnkgYW5kIGNyZWF0ZSBhIHJlY3RhbmdsZSBoaXQgYXJlYSBiYXNlZCBvbiB0aGUgdGV4dHVyZSBmcmFtZSB0aGUgR2FtZSBPYmplY3QgaXMgdXNpbmcuIElmXHJcbiAgICAgKiB0aGlzIGlzbid0IGEgdGV4dHVyZS1ib3VuZCBvYmplY3QsIHN1Y2ggYXMgYSBHcmFwaGljcyBvciBCaXRtYXBUZXh0IG9iamVjdCwgdGhpcyB3aWxsIGZhaWwsIGFuZCB5b3UnbGwgbmVlZCB0byBwcm92aWRlIGEgc3BlY2lmaWNcclxuICAgICAqIHNoYXBlIGZvciBpdCB0byB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gSW5wdXQgQ29uZmlndXJhdGlvbiBPYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLklucHV0LklucHV0Q29uZmlndXJhdGlvbnxhbnkpfSBbc2hhcGVdIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSGl0QXJlYUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIEdhbWUgT2JqZWN0IGlzIGludGVyYWN0ZWQgd2l0aC4gSWYgeW91IHByb3ZpZGUgYSBzaGFwZSB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjay5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Ryb3Bab25lPWZhbHNlXSAtIFNob3VsZCB0aGlzIEdhbWUgT2JqZWN0IGJlIHRyZWF0ZWQgYXMgYSBkcm9wIHpvbmUgdGFyZ2V0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZU9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SW50ZXJhY3RpdmU6IGZ1bmN0aW9uIChzaGFwZSwgY2FsbGJhY2ssIGRyb3Bab25lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmlucHV0LmVuYWJsZSh0aGlzLCBzaGFwZSwgY2FsbGJhY2ssIGRyb3Bab25lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQgZm9yIGlucHV0LCB0aGlzIHdpbGwgZGlzYWJsZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBvYmplY3QgdGhhdCBpcyBkaXNhYmxlZCBmb3IgaW5wdXQgc3RvcHMgcHJvY2Vzc2luZyBvciBiZWluZyBjb25zaWRlcmVkIGZvclxyXG4gICAgICogaW5wdXQgZXZlbnRzLCBidXQgY2FuIGJlIHR1cm5lZCBiYWNrIG9uIGFnYWluIGF0IGFueSB0aW1lIGJ5IHNpbXBseSBjYWxsaW5nXHJcbiAgICAgKiBgc2V0SW50ZXJhY3RpdmUoKWAgd2l0aCBubyBhcmd1bWVudHMgcHJvdmlkZWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSBpbnRlcmFjdGlvbiBmcm9tIHRoaXMgR2FtZSBPYmplY3QgdGhlbiB1c2UgYHJlbW92ZUludGVyYWN0aXZlYCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZGlzYWJsZUludGVyYWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVJbnRlcmFjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQgZm9yIGlucHV0LCB0aGlzIHdpbGwgcXVldWUgaXRcclxuICAgICAqIGZvciByZW1vdmFsLCBjYXVzaW5nIGl0IHRvIG5vIGxvbmdlciBiZSBpbnRlcmFjdGl2ZS4gVGhlIHJlbW92YWwgaGFwcGVucyBvblxyXG4gICAgICogdGhlIG5leHQgZ2FtZSBzdGVwLCBpdCBpcyBub3QgaW1tZWRpYXRlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBJbnRlcmFjdGl2ZSBPYmplY3QgdGhhdCB3YXMgYXNzaWduZWQgdG8gdGhpcyBHYW1lIE9iamVjdCB3aWxsIGJlIGRlc3Ryb3llZCxcclxuICAgICAqIHJlbW92ZWQgZnJvbSB0aGUgSW5wdXQgTWFuYWdlciBhbmQgY2xlYXJlZCBmcm9tIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gcmUtZW5hYmxlIHRoaXMgR2FtZSBPYmplY3QgYXQgYSBsYXRlciBkYXRlIHlvdSB3aWxsIG5lZWQgdG9cclxuICAgICAqIHJlLWNyZWF0ZSBpdHMgSW50ZXJhY3RpdmVPYmplY3QgYnkgY2FsbGluZyBgc2V0SW50ZXJhY3RpdmVgIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIG9ubHkgdGVtcG9yYXJpbHkgc3RvcCBhbiBvYmplY3QgZnJvbSByZWNlaXZpbmcgaW5wdXQgdGhlbiB1c2VcclxuICAgICAqIGBkaXNhYmxlSW50ZXJhY3RpdmVgIGluc3RlYWQsIGFzIHRoYXQgdG9nZ2xlcyB0aGUgaW50ZXJhY3RpdmUgc3RhdGUsIHdoZXJlLWFzXHJcbiAgICAgKiB0aGlzIGVyYXNlcyBpdCBjb21wbGV0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byByZXNpemUgYSBoaXQgYXJlYSwgZG9uJ3QgcmVtb3ZlIGFuZCB0aGVuIHNldCBpdCBhcyBiZWluZ1xyXG4gICAgICogaW50ZXJhY3RpdmUuIEluc3RlYWQsIGFjY2VzcyB0aGUgaGl0YXJlYSBvYmplY3QgZGlyZWN0bHkgYW5kIHJlc2l6ZSB0aGUgc2hhcGVcclxuICAgICAqIGJlaW5nIHVzZWQuIEkuZS46IGBzcHJpdGUuaW5wdXQuaGl0QXJlYS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpYCAoYXNzdW1pbmcgdGhlXHJcbiAgICAgKiBzaGFwZSBpcyBhIFJlY3RhbmdsZSwgd2hpY2ggaXQgaXMgYnkgZGVmYXVsdC4pXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNyZW1vdmVJbnRlcmFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVJbnRlcmFjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5pbnB1dC5jbGVhcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG8gYmUgb3ZlcnJpZGRlbiBieSBjdXN0b20gR2FtZU9iamVjdHMuIEFsbG93cyBiYXNlIG9iamVjdHMgdG8gYmUgdXNlZCBpbiBhIFBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gYXJnc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQ29tcG9uZW50c1RvSlNPTih0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgcmVuZGVyTWFzayB3aXRoIHRoZSByZW5kZXJGbGFncyB0byBzZWUgaWYgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHJlbmRlciBvciBub3QuXHJcbiAgICAgKiBBbHNvIGNoZWNrcyB0aGUgR2FtZSBPYmplY3QgYWdhaW5zdCB0aGUgZ2l2ZW4gQ2FtZXJhcyBleGNsdXNpb24gbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3dpbGxSZW5kZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gY2hlY2sgYWdhaW5zdCB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IHNob3VsZCBiZSByZW5kZXJlZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICB3aWxsUmVuZGVyOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAhKEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmICh0aGlzLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRpc3BsYXkgbGlzdCBpbmRleCBvZiBlaXRoZXIgdGhpcyBHYW1lIE9iamVjdCwgb3IgaWYgaXQgaGFzIG9uZSxcclxuICAgICAqIGl0cyBwYXJlbnQgQ29udGFpbmVyLiBJdCB0aGVuIGl0ZXJhdGVzIHVwIHRocm91Z2ggYWxsIG9mIHRoZSBwYXJlbnQgY29udGFpbmVycyB1bnRpbCBpdCBoaXRzIHRoZVxyXG4gICAgICogcm9vdCBvZiB0aGUgZGlzcGxheSBsaXN0ICh3aGljaCBpcyBpbmRleCAwIGluIHRoZSByZXR1cm5lZCBhcnJheSkuXHJcbiAgICAgKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBJbnB1dFBsdWdpbiBidXQgYWxzbyB1c2VmdWwgaWYgeW91IHdpc2ggdG8gZmluZCBvdXQgdGhlIGRpc3BsYXkgZGVwdGggb2ZcclxuICAgICAqIHRoaXMgR2FtZSBPYmplY3QgYW5kIGFsbCBvZiBpdHMgYW5jZXN0b3JzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZ2V0SW5kZXhMaXN0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyW119IEFuIGFycmF5IG9mIGRpc3BsYXkgbGlzdCBwb3NpdGlvbiBpbmRleGVzLlxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleExpc3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpc1xyXG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICB2YXIgaW5kZXhlcyA9IFtdO1xyXG5cclxuICAgICAgICB3aGlsZSAocGFyZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaW5kZXhlcy51bnNoaWZ0KFtwYXJlbnQuZ2V0SW5kZXgoY2hpbGQpLCBwYXJlbnQubmFtZV0pO1xyXG4gICAgICAgICAgICBpbmRleGVzLnVuc2hpZnQocGFyZW50LmdldEluZGV4KGNoaWxkKSk7XHJcblxyXG4gICAgICAgICAgICBjaGlsZCA9IHBhcmVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyZW50LnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpbmRleGVzLnVuc2hpZnQoW3RoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmdldEluZGV4KGNoaWxkKSwgJ3Jvb3QnXSk7XHJcbiAgICAgICAgaW5kZXhlcy51bnNoaWZ0KHRoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmdldEluZGV4KGNoaWxkKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2FtZSBPYmplY3QgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgRGlzcGxheSBMaXN0IGFuZCBVcGRhdGUgTGlzdCBhbmRcclxuICAgICAqIHNldmVyaW5nIGFsbCB0aWVzIHRvIHBhcmVudCByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyByZW1vdmVzIGl0c2VsZiBmcm9tIHRoZSBJbnB1dCBNYW5hZ2VyIGFuZCBQaHlzaWNzIE1hbmFnZXIgaWYgcHJldmlvdXNseSBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB0aGlzIHRvIHJlbW92ZSBhIEdhbWUgT2JqZWN0IGZyb20geW91ciBnYW1lIGlmIHlvdSBkb24ndCBldmVyIHBsYW4gdG8gdXNlIGl0IGFnYWluLlxyXG4gICAgICogQXMgbG9uZyBhcyBubyByZWZlcmVuY2UgdG8gaXQgZXhpc3RzIHdpdGhpbiB5b3VyIG93biBjb2RlIGl0IHNob3VsZCBiZWNvbWUgZnJlZSBmb3JcclxuICAgICAqIGdhcmJhZ2UgY29sbGVjdGlvbiBieSB0aGUgYnJvd3Nlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UganVzdCB3YW50IHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgYW4gb2JqZWN0IHRoZW4gbG9vayBhdCB1c2luZyB0aGVcclxuICAgICAqIEdhbWUgT2JqZWN0IFBvb2wgaW5zdGVhZCBvZiBkZXN0cm95aW5nIGl0LCBhcyBkZXN0cm95ZWQgb2JqZWN0cyBjYW5ub3QgYmUgcmVzdXJyZWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tU2NlbmU9ZmFsc2VdIC0gSXMgdGhpcyBHYW1lIE9iamVjdCBiZWluZyBkZXN0cm95ZWQgYXMgdGhlIHJlc3VsdCBvZiBhIFNjZW5lIHNodXRkb3duP1xyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZnJvbVNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcm9tU2NlbmUgPT09IHVuZGVmaW5lZCkgeyBmcm9tU2NlbmUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICAvLyAgVGhpcyBHYW1lIE9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZFxyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSB8fCB0aGlzLmlnbm9yZURlc3Ryb3kpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVEZXN0cm95LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFU1RST1ksIHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgc3lzID0gdGhpcy5zY2VuZS5zeXM7XHJcblxyXG4gICAgICAgIGlmICghZnJvbVNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3lzLmRpc3BsYXlMaXN0LnJlbW92ZSh0aGlzKTtcclxuICAgICAgICAgICAgc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzeXMuaW5wdXQuY2xlYXIodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGVsbCB0aGUgU2NlbmUgdG8gcmUtc29ydCB0aGUgY2hpbGRyZW5cclxuICAgICAgICBpZiAoIWZyb21TY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN5cy5xdWV1ZURlcHRoU29ydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgYml0bWFzayB0aGF0IGBHYW1lT2JqZWN0LnJlbmRlckZsYWdzYCBpcyBjb21wYXJlZCBhZ2FpbnN0IHRvIGRldGVybWluZSBpZiB0aGUgR2FtZSBPYmplY3Qgd2lsbCByZW5kZXIgb3Igbm90LlxyXG4gKlxyXG4gKiBAY29uc3RhbnQge2ludGVnZXJ9IFJFTkRFUl9NQVNLXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAZGVmYXVsdFxyXG4gKi9cclxuR2FtZU9iamVjdC5SRU5ERVJfTUFTSyA9IDE1O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/GameObjectCreator.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/GameObjectCreator.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Game Object Creator is a Scene plugin that allows you to quickly create many common\r\n * types of Game Objects and return them. Unlike the Game Object Factory, they are not automatically\r\n * added to the Scene.\r\n *\r\n * Game Objects directly register themselves with the Creator and inject their own creation\r\n * methods into the class.\r\n *\r\n * @class GameObjectCreator\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs.\r\n */\r\nvar GameObjectCreator = new Class({\r\n\r\n    initialize:\r\n\r\n    function GameObjectCreator (scene)\r\n    {\r\n        /**\r\n         * The Scene to which this Game Object Creator belongs.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectCreator#scene\r\n         * @type {Phaser.Scene}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectCreator#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * A reference to the Scene Display List.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectCreator#displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.displayList;\r\n\r\n        /**\r\n         * A reference to the Scene Update List.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectCreator#updateList;\r\n         * @type {Phaser.GameObjects.UpdateList}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.updateList;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectCreator#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.displayList = this.systems.displayList;\r\n        this.updateList = this.systems.updateList;\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectCreator#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectCreator#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectCreator#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n        this.displayList = null;\r\n        this.updateList = null;\r\n    }\r\n\r\n});\r\n\r\n//  Static method called directly by the Game Object creator functions\r\n\r\nGameObjectCreator.register = function (factoryType, factoryFunction)\r\n{\r\n    if (!GameObjectCreator.prototype.hasOwnProperty(factoryType))\r\n    {\r\n        GameObjectCreator.prototype[factoryType] = factoryFunction;\r\n    }\r\n};\r\n\r\nGameObjectCreator.remove = function (factoryType)\r\n{\r\n    if (GameObjectCreator.prototype.hasOwnProperty(factoryType))\r\n    {\r\n        delete GameObjectCreator.prototype[factoryType];\r\n    }\r\n};\r\n\r\nPluginCache.register('GameObjectCreator', GameObjectCreator, 'make');\r\n\r\nmodule.exports = GameObjectCreator;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvci5qcz8wN2ZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvR2FtZU9iamVjdENyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgR2FtZSBPYmplY3QgQ3JlYXRvciBpcyBhIFNjZW5lIHBsdWdpbiB0aGF0IGFsbG93cyB5b3UgdG8gcXVpY2tseSBjcmVhdGUgbWFueSBjb21tb25cclxuICogdHlwZXMgb2YgR2FtZSBPYmplY3RzIGFuZCByZXR1cm4gdGhlbS4gVW5saWtlIHRoZSBHYW1lIE9iamVjdCBGYWN0b3J5LCB0aGV5IGFyZSBub3QgYXV0b21hdGljYWxseVxyXG4gKiBhZGRlZCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIEdhbWUgT2JqZWN0cyBkaXJlY3RseSByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggdGhlIENyZWF0b3IgYW5kIGluamVjdCB0aGVpciBvd24gY3JlYXRpb25cclxuICogbWV0aG9kcyBpbnRvIHRoZSBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIEdhbWVPYmplY3RDcmVhdG9yXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBGYWN0b3J5IGJlbG9uZ3MuXHJcbiAqL1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZU9iamVjdENyZWF0b3IgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IENyZWF0b3IgYmVsb25ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlN5c3RlbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIERpc3BsYXkgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNkaXNwbGF5TGlzdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3R9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3Q7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBVcGRhdGUgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciN1cGRhdGVMaXN0O1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdH1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdCA9IHRoaXMuc3lzdGVtcy5kaXNwbGF5TGlzdDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QgPSB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzaHV0ZG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2Rlc3Ryb3lcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8vICBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgR2FtZSBPYmplY3QgY3JlYXRvciBmdW5jdGlvbnNcclxuXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlLCBmYWN0b3J5RnVuY3Rpb24pXHJcbntcclxuICAgIGlmICghR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0Q3JlYXRvci5wcm90b3R5cGVbZmFjdG9yeVR5cGVdID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuR2FtZU9iamVjdENyZWF0b3IucmVtb3ZlID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlKVxyXG57XHJcbiAgICBpZiAoR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBkZWxldGUgR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlW2ZhY3RvcnlUeXBlXTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lT2JqZWN0Q3JlYXRvcicsIEdhbWVPYmplY3RDcmVhdG9yLCAnbWFrZScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lT2JqZWN0Q3JlYXRvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObjectCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/GameObjectFactory.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/GameObjectFactory.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Game Object Factory is a Scene plugin that allows you to quickly create many common\r\n * types of Game Objects and have them automatically registered with the Scene.\r\n *\r\n * Game Objects directly register themselves with the Factory and inject their own creation\r\n * methods into the class.\r\n *\r\n * @class GameObjectFactory\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs.\r\n */\r\nvar GameObjectFactory = new Class({\r\n\r\n    initialize:\r\n\r\n    function GameObjectFactory (scene)\r\n    {\r\n        /**\r\n         * The Scene to which this Game Object Factory belongs.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectFactory#scene\r\n         * @type {Phaser.Scene}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectFactory#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * A reference to the Scene Display List.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectFactory#displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.displayList;\r\n\r\n        /**\r\n         * A reference to the Scene Update List.\r\n         *\r\n         * @name Phaser.GameObjects.GameObjectFactory#updateList;\r\n         * @type {Phaser.GameObjects.UpdateList}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.updateList;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectFactory#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.displayList = this.systems.displayList;\r\n        this.updateList = this.systems.updateList;\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectFactory#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Game Object to this Scene.\r\n     * \r\n     * If the Game Object renders, it will be added to the Display List.\r\n     * If it has a `preUpdate` method, it will be added to the Update List.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectFactory#existing\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The child to be added to this Scene.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that was added.\r\n     */\r\n    existing: function (child)\r\n    {\r\n        if (child.renderCanvas || child.renderWebGL)\r\n        {\r\n            this.displayList.add(child);\r\n        }\r\n\r\n        if (child.preUpdate)\r\n        {\r\n            this.updateList.add(child);\r\n        }\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectFactory#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.GameObjects.GameObjectFactory#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n\r\n        this.displayList = null;\r\n        this.updateList = null;\r\n    }\r\n\r\n});\r\n\r\n//  Static method called directly by the Game Object factory functions\r\n\r\nGameObjectFactory.register = function (factoryType, factoryFunction)\r\n{\r\n    if (!GameObjectFactory.prototype.hasOwnProperty(factoryType))\r\n    {\r\n        GameObjectFactory.prototype[factoryType] = factoryFunction;\r\n    }\r\n};\r\n\r\nGameObjectFactory.remove = function (factoryType)\r\n{\r\n    if (GameObjectFactory.prototype.hasOwnProperty(factoryType))\r\n    {\r\n        delete GameObjectFactory.prototype[factoryType];\r\n    }\r\n};\r\n\r\nPluginCache.register('GameObjectFactory', GameObjectFactory, 'add');\r\n\r\nmodule.exports = GameObjectFactory;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0RmFjdG9yeS5qcz9jNWY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL0dhbWVPYmplY3RGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi9wbHVnaW5zL1BsdWdpbkNhY2hlJyk7XHJcbnZhciBTY2VuZUV2ZW50cyA9IHJlcXVpcmUoJy4uL3NjZW5lL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdhbWUgT2JqZWN0IEZhY3RvcnkgaXMgYSBTY2VuZSBwbHVnaW4gdGhhdCBhbGxvd3MgeW91IHRvIHF1aWNrbHkgY3JlYXRlIG1hbnkgY29tbW9uXHJcbiAqIHR5cGVzIG9mIEdhbWUgT2JqZWN0cyBhbmQgaGF2ZSB0aGVtIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBTY2VuZS5cclxuICpcclxuICogR2FtZSBPYmplY3RzIGRpcmVjdGx5IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCB0aGUgRmFjdG9yeSBhbmQgaW5qZWN0IHRoZWlyIG93biBjcmVhdGlvblxyXG4gKiBtZXRob2RzIGludG8gdGhlIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2FtZU9iamVjdEZhY3RvcnlcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IEZhY3RvcnkgYmVsb25ncy5cclxuICovXHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHYW1lT2JqZWN0RmFjdG9yeSAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgRmFjdG9yeSBiZWxvbmdzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUuU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNzeXN0ZW1zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU3lzdGVtc31cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgRGlzcGxheSBMaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFVwZGF0ZSBMaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3VwZGF0ZUxpc3Q7XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3Q7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjFcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gdGhpcy5zeXN0ZW1zLmRpc3BsYXlMaXN0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IHRoaXMuc3lzdGVtcy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGV4aXN0aW5nIEdhbWUgT2JqZWN0IHRvIHRoaXMgU2NlbmUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBHYW1lIE9iamVjdCByZW5kZXJzLCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKiBJZiBpdCBoYXMgYSBgcHJlVXBkYXRlYCBtZXRob2QsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIFVwZGF0ZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2V4aXN0aW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBjaGlsZCB0byBiZSBhZGRlZCB0byB0aGlzIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWRkZWQuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0aW5nOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNoaWxkLnJlbmRlckNhbnZhcyB8fCBjaGlsZC5yZW5kZXJXZWJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGlsZC5wcmVVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIHNodXR0aW5nIGRvd24uXHJcbiAgICAgKiBXZSBuZWVkIHRvIGtpbGwgYW5kIHJlc2V0IGFsbCBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFzIHdlbGwgYXMgc3RvcCBsaXN0ZW5pbmcgdG8gU2NlbmUgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8vICBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgR2FtZSBPYmplY3QgZmFjdG9yeSBmdW5jdGlvbnNcclxuXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlLCBmYWN0b3J5RnVuY3Rpb24pXHJcbntcclxuICAgIGlmICghR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0RmFjdG9yeS5wcm90b3R5cGVbZmFjdG9yeVR5cGVdID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuR2FtZU9iamVjdEZhY3RvcnkucmVtb3ZlID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlKVxyXG57XHJcbiAgICBpZiAoR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBkZWxldGUgR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlW2ZhY3RvcnlUeXBlXTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lT2JqZWN0RmFjdG9yeScsIEdhbWVPYmplY3RGYWN0b3J5LCAnYWRkJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdhbWVPYmplY3RGYWN0b3J5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObjectFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/UpdateList.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/UpdateList.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ProcessQueue = __webpack_require__(/*! ../structs/ProcessQueue */ \"./node_modules/phaser/src/structs/ProcessQueue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Update List plugin.\r\n *\r\n * Update Lists belong to a Scene and maintain the list Game Objects to be updated every frame.\r\n *\r\n * Some or all of these Game Objects may also be part of the Scene's [Display List]{@link Phaser.GameObjects.DisplayList}, for Rendering.\r\n *\r\n * @class UpdateList\r\n * @extends Phaser.Structs.ProcessQueue.<Phaser.GameObjects.GameObject>\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that the Update List belongs to.\r\n */\r\nvar UpdateList = new Class({\r\n\r\n    Extends: ProcessQueue,\r\n\r\n    initialize:\r\n\r\n    function UpdateList (scene)\r\n    {\r\n        ProcessQueue.call(this);\r\n\r\n        /**\r\n         * The Scene that the Update List belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Scene's Systems.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * The `pending` list is a selection of items which are due to be made 'active' in the next update.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#_pending\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.20.0\r\n         */\r\n\r\n        /**\r\n         * The `active` list is a selection of items which are considered active and should be updated.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#_active\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.20.0\r\n         */\r\n\r\n        /**\r\n         * The `destroy` list is a selection of items that were active and are awaiting being destroyed in the next update.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#_destroy\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.20.0\r\n         */\r\n\r\n        /**\r\n         * The total number of items awaiting processing.\r\n         *\r\n         * @name Phaser.GameObjects.UpdateList#_toProcess\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.PRE_UPDATE, this.update, this);\r\n        eventEmitter.on(SceneEvents.UPDATE, this.sceneUpdate, this);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The update step.\r\n     *\r\n     * Pre-updates every active Game Object in the list.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#sceneUpdate\r\n     * @since 3.20.0\r\n     *\r\n     * @param {number} time - The current timestamp.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    sceneUpdate: function (time, delta)\r\n    {\r\n        var list = this._active;\r\n        var length = list.length;\r\n\r\n        for (var i = 0; i < length; i++)\r\n        {\r\n            var gameObject = list[i];\r\n\r\n            if (gameObject.active)\r\n            {\r\n                gameObject.preUpdate.call(gameObject, time, delta);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * \r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var i = this._active.length;\r\n\r\n        while (i--)\r\n        {\r\n            this._active[i].destroy(true);\r\n        }\r\n\r\n        i = this._pending.length;\r\n\r\n        while (i--)\r\n        {\r\n            this._pending[i].destroy(true);\r\n        }\r\n\r\n        i = this._destroy.length;\r\n\r\n        while (i--)\r\n        {\r\n            this._destroy[i].destroy(true);\r\n        }\r\n\r\n        this._toProcess = 0;\r\n\r\n        this._pending = [];\r\n        this._active = [];\r\n        this._destroy = [];\r\n\r\n        this.removeAllListeners();\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.off(SceneEvents.UPDATE, this.sceneUpdate, this);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * \r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.systems.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n    /**\r\n     * Adds a new item to the Update List.\r\n     * \r\n     * The item is added to the pending list and made active in the next update.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} item - The item to add to the queue.\r\n     *\r\n     * @return {*} The item that was added.\r\n     */\r\n\r\n    /**\r\n     * Removes an item from the Update List.\r\n     * \r\n     * The item is added to the pending destroy and fully removed in the next update.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} item - The item to be removed from the queue.\r\n     *\r\n     * @return {*} The item that was removed.\r\n     */\r\n\r\n    /**\r\n     * Removes all active items from this Update List.\r\n     * \r\n     * All the items are marked as 'pending destroy' and fully removed in the next update.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#removeAll\r\n     * @since 3.20.0\r\n     *\r\n     * @return {this} This Update List object.\r\n     */\r\n\r\n    /**\r\n     * Update this queue. First it will process any items awaiting destruction, and remove them.\r\n     * \r\n     * Then it will check to see if there are any items pending insertion, and move them to an\r\n     * active state. Finally, it will return a list of active items for further processing.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#update\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Array.<*>} A list of active items.\r\n     */\r\n\r\n    /**\r\n     * Returns the current list of active items.\r\n     * \r\n     * This method returns a reference to the active list array, not a copy of it.\r\n     * Therefore, be careful to not modify this array outside of the ProcessQueue.\r\n     *\r\n     * @method Phaser.GameObjects.UpdateList#getActive\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Array.<*>} A list of active items.\r\n     */\r\n\r\n    /**\r\n     * The number of entries in the active list.\r\n     *\r\n     * @name Phaser.GameObjects.UpdateList#length\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.20.0\r\n     */\r\n});\r\n\r\nPluginCache.register('UpdateList', UpdateList, 'updateList');\r\n\r\nmodule.exports = UpdateList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9VcGRhdGVMaXN0LmpzPzEzZjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsbUJBQW1CLG1CQUFPLENBQUMsa0ZBQXlCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixxQ0FBcUM7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvVXBkYXRlTGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFByb2Nlc3NRdWV1ZSA9IHJlcXVpcmUoJy4uL3N0cnVjdHMvUHJvY2Vzc1F1ZXVlJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgVXBkYXRlIExpc3QgcGx1Z2luLlxyXG4gKlxyXG4gKiBVcGRhdGUgTGlzdHMgYmVsb25nIHRvIGEgU2NlbmUgYW5kIG1haW50YWluIHRoZSBsaXN0IEdhbWUgT2JqZWN0cyB0byBiZSB1cGRhdGVkIGV2ZXJ5IGZyYW1lLlxyXG4gKlxyXG4gKiBTb21lIG9yIGFsbCBvZiB0aGVzZSBHYW1lIE9iamVjdHMgbWF5IGFsc28gYmUgcGFydCBvZiB0aGUgU2NlbmUncyBbRGlzcGxheSBMaXN0XXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3R9LCBmb3IgUmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAY2xhc3MgVXBkYXRlTGlzdFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuU3RydWN0cy5Qcm9jZXNzUXVldWUuPFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0PlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRoYXQgdGhlIFVwZGF0ZSBMaXN0IGJlbG9uZ3MgdG8uXHJcbiAqL1xyXG52YXIgVXBkYXRlTGlzdCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogUHJvY2Vzc1F1ZXVlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVXBkYXRlTGlzdCAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgUHJvY2Vzc1F1ZXVlLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0aGF0IHRoZSBVcGRhdGUgTGlzdCBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lJ3MgU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGBwZW5kaW5nYCBsaXN0IGlzIGEgc2VsZWN0aW9uIG9mIGl0ZW1zIHdoaWNoIGFyZSBkdWUgdG8gYmUgbWFkZSAnYWN0aXZlJyBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNfcGVuZGluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Kj59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGBhY3RpdmVgIGxpc3QgaXMgYSBzZWxlY3Rpb24gb2YgaXRlbXMgd2hpY2ggYXJlIGNvbnNpZGVyZWQgYWN0aXZlIGFuZCBzaG91bGQgYmUgdXBkYXRlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I19hY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPCo+fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBgZGVzdHJveWAgbGlzdCBpcyBhIHNlbGVjdGlvbiBvZiBpdGVtcyB0aGF0IHdlcmUgYWN0aXZlIGFuZCBhcmUgYXdhaXRpbmcgYmVpbmcgZGVzdHJveWVkIGluIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I19kZXN0cm95XHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjwqPn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGF3YWl0aW5nIHByb2Nlc3NpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNfdG9Qcm9jZXNzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5VUERBVEUsIHRoaXMuc2NlbmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbmNlKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdXBkYXRlIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogUHJlLXVwZGF0ZXMgZXZlcnkgYWN0aXZlIEdhbWUgT2JqZWN0IGluIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3Qjc2NlbmVVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHNjZW5lVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnByZVVwZGF0ZS5jYWxsKGdhbWVPYmplY3QsIHRpbWUsIGRlbHRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIHNodXR0aW5nIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5fYWN0aXZlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVtpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuX3BlbmRpbmcubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1tpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuX2Rlc3Ryb3kubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveVtpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdG9Qcm9jZXNzID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy5wcmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnNjZW5lVXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG5ldyBpdGVtIHRvIHRoZSBVcGRhdGUgTGlzdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIHBlbmRpbmcgbGlzdCBhbmQgbWFkZSBhY3RpdmUgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0byBhZGQgdG8gdGhlIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIGFkZGVkLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgVXBkYXRlIExpc3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBpdGVtIGlzIGFkZGVkIHRvIHRoZSBwZW5kaW5nIGRlc3Ryb3kgYW5kIGZ1bGx5IHJlbW92ZWQgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGFjdGl2ZSBpdGVtcyBmcm9tIHRoaXMgVXBkYXRlIExpc3QuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCB0aGUgaXRlbXMgYXJlIG1hcmtlZCBhcyAncGVuZGluZyBkZXN0cm95JyBhbmQgZnVsbHkgcmVtb3ZlZCBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFVwZGF0ZSBMaXN0IG9iamVjdC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoaXMgcXVldWUuIEZpcnN0IGl0IHdpbGwgcHJvY2VzcyBhbnkgaXRlbXMgYXdhaXRpbmcgZGVzdHJ1Y3Rpb24sIGFuZCByZW1vdmUgdGhlbS5cclxuICAgICAqIFxyXG4gICAgICogVGhlbiBpdCB3aWxsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGl0ZW1zIHBlbmRpbmcgaW5zZXJ0aW9uLCBhbmQgbW92ZSB0aGVtIHRvIGFuXHJcbiAgICAgKiBhY3RpdmUgc3RhdGUuIEZpbmFsbHksIGl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBhY3RpdmUgaXRlbXMgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBIGxpc3Qgb2YgYWN0aXZlIGl0ZW1zLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxpc3Qgb2YgYWN0aXZlIGl0ZW1zLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgbGlzdCBhcnJheSwgbm90IGEgY29weSBvZiBpdC5cclxuICAgICAqIFRoZXJlZm9yZSwgYmUgY2FyZWZ1bCB0byBub3QgbW9kaWZ5IHRoaXMgYXJyYXkgb3V0c2lkZSBvZiB0aGUgUHJvY2Vzc1F1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjZ2V0QWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48Kj59IEEgbGlzdCBvZiBhY3RpdmUgaXRlbXMuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYWN0aXZlIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjbGVuZ3RoXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ1VwZGF0ZUxpc3QnLCBVcGRhdGVMaXN0LCAndXBkYXRlTGlzdCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBVcGRhdGVMaXN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/UpdateList.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the position, width and height of a BitmapText Game Object.\r\n *\r\n * Returns a BitmapTextSize object that contains global and local variants of the Game Objects x and y coordinates and\r\n * its width and height.\r\n *\r\n * The global position and size take into account the Game Object's position and scale.\r\n *\r\n * The local position and size just takes into account the font data.\r\n *\r\n * @function GetBitmapTextSize\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {(Phaser.GameObjects.DynamicBitmapText|Phaser.GameObjects.BitmapText)} src - The BitmapText to calculate the position, width and height of.\r\n * @param {boolean} [round] - Whether to round the results to the nearest integer.\r\n * @param {object} [out] - Optional object to store the results in, to save constant object creation.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapTextSize} The calculated position, width and height of the BitmapText.\r\n */\r\nvar GetBitmapTextSize = function (src, round, out)\r\n{\r\n    if (out === undefined)\r\n    {\r\n        out = {\r\n            local: {\r\n                x: 0,\r\n                y: 0,\r\n                width: 0,\r\n                height: 0\r\n            },\r\n            global: {\r\n                x: 0,\r\n                y: 0,\r\n                width: 0,\r\n                height: 0\r\n            },\r\n            lines: {\r\n                shortest: 0,\r\n                longest: 0,\r\n                lengths: null,\r\n                height: 0\r\n            },\r\n            wrappedText: '',\r\n            words: [],\r\n            maxWidth: 0,\r\n            scaleX: 0,\r\n            scaleY: 0\r\n        };\r\n\r\n        return out;\r\n    }\r\n\r\n    var text = src.text;\r\n    var textLength = text.length;\r\n    var maxWidth = src.maxWidth;\r\n    var wordWrapCharCode = src.wordWrapCharCode;\r\n\r\n    var bx = Number.MAX_VALUE;\r\n    var by = Number.MAX_VALUE;\r\n    var bw = 0;\r\n    var bh = 0;\r\n\r\n    var chars = src.fontData.chars;\r\n    var lineHeight = src.fontData.lineHeight;\r\n    var letterSpacing = src.letterSpacing;\r\n\r\n    var xAdvance = 0;\r\n    var yAdvance = 0;\r\n\r\n    var charCode = 0;\r\n\r\n    var glyph = null;\r\n\r\n    var x = 0;\r\n    var y = 0;\r\n\r\n    var scale = (src.fontSize / src.fontData.size);\r\n    var sx = scale * src.scaleX;\r\n    var sy = scale * src.scaleY;\r\n\r\n    var lastGlyph = null;\r\n    var lastCharCode = 0;\r\n    var lineWidths = [];\r\n    var shortestLine = Number.MAX_VALUE;\r\n    var longestLine = 0;\r\n    var currentLine = 0;\r\n    var currentLineWidth = 0;\r\n\r\n    var i;\r\n    var words = [];\r\n    var current = null;\r\n\r\n    //  Scan for breach of maxWidth and insert carriage-returns\r\n    if (maxWidth > 0 && out.maxWidth !== maxWidth)\r\n    {\r\n        for (i = 0; i < textLength; i++)\r\n        {\r\n            charCode = text.charCodeAt(i);\r\n\r\n            if (charCode === 10)\r\n            {\r\n                if (current !== null)\r\n                {\r\n                    words.push({\r\n                        word: current.word,\r\n                        i: current.i,\r\n                        x: current.x * sx,\r\n                        y: current.y * sy,\r\n                        w: current.w * sx,\r\n                        h: current.h * sy,\r\n                        cr: true\r\n                    });\r\n\r\n                    current = null;\r\n                }\r\n\r\n                xAdvance = 0;\r\n                yAdvance += lineHeight;\r\n                lastGlyph = null;\r\n\r\n                continue;\r\n            }\r\n\r\n            glyph = chars[charCode];\r\n\r\n            if (!glyph)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (lastGlyph !== null)\r\n            {\r\n                var glyphKerningOffset = glyph.kerning[lastCharCode];\r\n            }\r\n\r\n            if (charCode === wordWrapCharCode)\r\n            {\r\n                if (current !== null)\r\n                {\r\n                    words.push({\r\n                        word: current.word,\r\n                        i: current.i,\r\n                        x: current.x * sx,\r\n                        y: current.y * sy,\r\n                        w: current.w * sx,\r\n                        h: current.h * sy,\r\n                        cr: false\r\n                    });\r\n    \r\n                    current = null;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (current === null)\r\n                {\r\n                    //  We're starting a new word, recording the starting index, etc\r\n                    current = { word: '', i: i, x: xAdvance, y: yAdvance, w: 0, h: lineHeight, cr: false };\r\n                }\r\n\r\n                current.word = current.word.concat(text[i]);\r\n                current.w += glyph.xOffset + glyph.xAdvance + ((glyphKerningOffset !== undefined) ? glyphKerningOffset : 0);\r\n            }\r\n\r\n            xAdvance += glyph.xAdvance + letterSpacing;\r\n            lastGlyph = glyph;\r\n            lastCharCode = charCode;\r\n        }\r\n\r\n        //  Last word\r\n        if (current !== null)\r\n        {\r\n            words.push({\r\n                word: current.word,\r\n                i: current.i,\r\n                x: current.x * sx,\r\n                y: current.y * sy,\r\n                w: current.w * sx,\r\n                h: current.h * sy,\r\n                cr: false\r\n            });\r\n        }\r\n\r\n        //  Reset for the next loop\r\n        xAdvance = 0;\r\n        yAdvance = 0;\r\n        lastGlyph = null;\r\n        lastCharCode = 0;\r\n\r\n        //  Loop through the words array and see if we've got any > maxWidth\r\n        var prev;\r\n        var offset = 0;\r\n        var crs = [];\r\n\r\n        for (i = 0; i < words.length; i++)\r\n        {\r\n            var entry = words[i];\r\n            var left = entry.x;\r\n            var right = entry.x + entry.w;\r\n\r\n            if (prev)\r\n            {\r\n                var diff = left - (prev.x + prev.w);\r\n\r\n                offset = left - (diff + prev.w);\r\n\r\n                prev = null;\r\n            }\r\n\r\n            var checkLeft = left - offset;\r\n            var checkRight = right - offset;\r\n\r\n            if (checkLeft > maxWidth || checkRight > maxWidth)\r\n            {\r\n                crs.push(entry.i - 1);\r\n\r\n                if (entry.cr)\r\n                {\r\n                    crs.push(entry.i + entry.word.length);\r\n\r\n                    offset = 0;\r\n                    prev = null;\r\n                }\r\n                else\r\n                {\r\n                    prev = entry;\r\n                }\r\n            }\r\n            else if (entry.cr)\r\n            {\r\n                crs.push(entry.i + entry.word.length);\r\n\r\n                offset = 0;\r\n                prev = null;\r\n            }\r\n        }\r\n\r\n        var stringInsert = function (str, index, value)\r\n        {\r\n            return str.substr(0, index) + value + str.substr(index + 1);\r\n        };\r\n\r\n        for (i = crs.length - 1; i >= 0; i--)\r\n        {\r\n            // eslint-disable-next-line quotes\r\n            text = stringInsert(text, crs[i], \"\\n\");\r\n        }\r\n\r\n        out.maxWidth = maxWidth;\r\n        out.wrappedText = text;\r\n\r\n        textLength = text.length;\r\n\r\n        //  Recalculated in the next loop\r\n        words = [];\r\n        current = null;\r\n    }\r\n\r\n    for (i = 0; i < textLength; i++)\r\n    {\r\n        charCode = text.charCodeAt(i);\r\n\r\n        if (charCode === 10)\r\n        {\r\n            if (current !== null)\r\n            {\r\n                words.push({\r\n                    word: current.word,\r\n                    i: current.i,\r\n                    x: current.x * sx,\r\n                    y: current.y * sy,\r\n                    w: current.w * sx,\r\n                    h: current.h * sy\r\n                });\r\n\r\n                current = null;\r\n            }\r\n\r\n            xAdvance = 0;\r\n            yAdvance += lineHeight;\r\n            lastGlyph = null;\r\n\r\n            lineWidths[currentLine] = currentLineWidth;\r\n\r\n            if (currentLineWidth > longestLine)\r\n            {\r\n                longestLine = currentLineWidth;\r\n            }\r\n\r\n            if (currentLineWidth < shortestLine)\r\n            {\r\n                shortestLine = currentLineWidth;\r\n            }\r\n\r\n            currentLine++;\r\n            currentLineWidth = 0;\r\n\r\n            continue;\r\n        }\r\n\r\n        glyph = chars[charCode];\r\n\r\n        if (!glyph)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        x = xAdvance;\r\n        y = yAdvance;\r\n\r\n        if (lastGlyph !== null)\r\n        {\r\n            var kerningOffset = glyph.kerning[lastCharCode];\r\n\r\n            x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n        }\r\n\r\n        if (bx > x)\r\n        {\r\n            bx = x;\r\n        }\r\n\r\n        if (by > y)\r\n        {\r\n            by = y;\r\n        }\r\n\r\n        var gw = x + glyph.xAdvance;\r\n        var gh = y + lineHeight;\r\n\r\n        if (bw < gw)\r\n        {\r\n            bw = gw;\r\n        }\r\n\r\n        if (bh < gh)\r\n        {\r\n            bh = gh;\r\n        }\r\n\r\n        if (charCode === wordWrapCharCode)\r\n        {\r\n            if (current !== null)\r\n            {\r\n                words.push({\r\n                    word: current.word,\r\n                    i: current.i,\r\n                    x: current.x * sx,\r\n                    y: current.y * sy,\r\n                    w: current.w * sx,\r\n                    h: current.h * sy\r\n                });\r\n    \r\n                current = null;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            if (current === null)\r\n            {\r\n                //  We're starting a new word, recording the starting index, etc\r\n                current = { word: '', i: i, x: xAdvance, y: yAdvance, w: 0, h: lineHeight };\r\n            }\r\n\r\n            current.word = current.word.concat(text[i]);\r\n            current.w += glyph.xOffset + glyph.xAdvance + ((kerningOffset !== undefined) ? kerningOffset : 0);\r\n        }\r\n\r\n        xAdvance += glyph.xAdvance + letterSpacing;\r\n        lastGlyph = glyph;\r\n        lastCharCode = charCode;\r\n        currentLineWidth = gw * scale;\r\n    }\r\n\r\n    //  Last word\r\n    if (current !== null)\r\n    {\r\n        words.push({\r\n            word: current.word,\r\n            i: current.i,\r\n            x: current.x * sx,\r\n            y: current.y * sy,\r\n            w: current.w * sx,\r\n            h: current.h * sy\r\n        });\r\n    }\r\n\r\n    lineWidths[currentLine] = currentLineWidth;\r\n\r\n    if (currentLineWidth > longestLine)\r\n    {\r\n        longestLine = currentLineWidth;\r\n    }\r\n\r\n    if (currentLineWidth < shortestLine)\r\n    {\r\n        shortestLine = currentLineWidth;\r\n    }\r\n\r\n    var local = out.local;\r\n    var global = out.global;\r\n    var lines = out.lines;\r\n\r\n    local.x = bx * scale;\r\n    local.y = by * scale;\r\n    local.width = bw * scale;\r\n    local.height = bh * scale;\r\n\r\n    global.x = (src.x - src.displayOriginX) + (bx * sx);\r\n    global.y = (src.y - src.displayOriginY) + (by * sy);\r\n    global.width = bw * sx;\r\n    global.height = bh * sy;\r\n\r\n    lines.shortest = shortestLine;\r\n    lines.longest = longestLine;\r\n    lines.lengths = lineWidths;\r\n\r\n    if (round)\r\n    {\r\n        local.x = Math.round(local.x);\r\n        local.y = Math.round(local.y);\r\n        local.width = Math.round(local.width);\r\n        local.height = Math.round(local.height);\r\n\r\n        global.x = Math.round(global.x);\r\n        global.y = Math.round(global.y);\r\n        global.width = Math.round(global.width);\r\n        global.height = Math.round(global.height);\r\n\r\n        lines.shortest = Math.round(shortestLine);\r\n        lines.longest = Math.round(longestLine);\r\n    }\r\n\r\n    out.words = words;\r\n    out.lines.height = lineHeight;\r\n    out.scaleX = src.scaleX;\r\n    out.scaleY = src.scaleY;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetBitmapTextSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L0dldEJpdG1hcFRleHRTaXplLmpzPzM4NjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFFQUFxRTtBQUNoRixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9HZXRCaXRtYXBUZXh0U2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBCaXRtYXBUZXh0IEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBSZXR1cm5zIGEgQml0bWFwVGV4dFNpemUgb2JqZWN0IHRoYXQgY29udGFpbnMgZ2xvYmFsIGFuZCBsb2NhbCB2YXJpYW50cyBvZiB0aGUgR2FtZSBPYmplY3RzIHggYW5kIHkgY29vcmRpbmF0ZXMgYW5kXHJcbiAqIGl0cyB3aWR0aCBhbmQgaGVpZ2h0LlxyXG4gKlxyXG4gKiBUaGUgZ2xvYmFsIHBvc2l0aW9uIGFuZCBzaXplIHRha2UgaW50byBhY2NvdW50IHRoZSBHYW1lIE9iamVjdCdzIHBvc2l0aW9uIGFuZCBzY2FsZS5cclxuICpcclxuICogVGhlIGxvY2FsIHBvc2l0aW9uIGFuZCBzaXplIGp1c3QgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmb250IGRhdGEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBHZXRCaXRtYXBUZXh0U2l6ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0fFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0KX0gc3JjIC0gVGhlIEJpdG1hcFRleHQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCBvZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbcm91bmRdIC0gV2hldGhlciB0byByb3VuZCB0aGUgcmVzdWx0cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW291dF0gLSBPcHRpb25hbCBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4sIHRvIHNhdmUgY29uc3RhbnQgb2JqZWN0IGNyZWF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5CaXRtYXBUZXh0U2l6ZX0gVGhlIGNhbGN1bGF0ZWQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIEJpdG1hcFRleHQuXHJcbiAqL1xyXG52YXIgR2V0Qml0bWFwVGV4dFNpemUgPSBmdW5jdGlvbiAoc3JjLCByb3VuZCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0ID0ge1xyXG4gICAgICAgICAgICBsb2NhbDoge1xyXG4gICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnbG9iYWw6IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGluZXM6IHtcclxuICAgICAgICAgICAgICAgIHNob3J0ZXN0OiAwLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2VzdDogMCxcclxuICAgICAgICAgICAgICAgIGxlbmd0aHM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQ6ICcnLFxyXG4gICAgICAgICAgICB3b3JkczogW10sXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxyXG4gICAgICAgICAgICBzY2FsZVg6IDAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHQgPSBzcmMudGV4dDtcclxuICAgIHZhciB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICB2YXIgbWF4V2lkdGggPSBzcmMubWF4V2lkdGg7XHJcbiAgICB2YXIgd29yZFdyYXBDaGFyQ29kZSA9IHNyYy53b3JkV3JhcENoYXJDb2RlO1xyXG5cclxuICAgIHZhciBieCA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICB2YXIgYnkgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgdmFyIGJ3ID0gMDtcclxuICAgIHZhciBiaCA9IDA7XHJcblxyXG4gICAgdmFyIGNoYXJzID0gc3JjLmZvbnREYXRhLmNoYXJzO1xyXG4gICAgdmFyIGxpbmVIZWlnaHQgPSBzcmMuZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLmxldHRlclNwYWNpbmc7XHJcblxyXG4gICAgdmFyIHhBZHZhbmNlID0gMDtcclxuICAgIHZhciB5QWR2YW5jZSA9IDA7XHJcblxyXG4gICAgdmFyIGNoYXJDb2RlID0gMDtcclxuXHJcbiAgICB2YXIgZ2x5cGggPSBudWxsO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuXHJcbiAgICB2YXIgc2NhbGUgPSAoc3JjLmZvbnRTaXplIC8gc3JjLmZvbnREYXRhLnNpemUpO1xyXG4gICAgdmFyIHN4ID0gc2NhbGUgKiBzcmMuc2NhbGVYO1xyXG4gICAgdmFyIHN5ID0gc2NhbGUgKiBzcmMuc2NhbGVZO1xyXG5cclxuICAgIHZhciBsYXN0R2x5cGggPSBudWxsO1xyXG4gICAgdmFyIGxhc3RDaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xyXG4gICAgdmFyIHNob3J0ZXN0TGluZSA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICB2YXIgbG9uZ2VzdExpbmUgPSAwO1xyXG4gICAgdmFyIGN1cnJlbnRMaW5lID0gMDtcclxuICAgIHZhciBjdXJyZW50TGluZVdpZHRoID0gMDtcclxuXHJcbiAgICB2YXIgaTtcclxuICAgIHZhciB3b3JkcyA9IFtdO1xyXG4gICAgdmFyIGN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgIC8vICBTY2FuIGZvciBicmVhY2ggb2YgbWF4V2lkdGggYW5kIGluc2VydCBjYXJyaWFnZS1yZXR1cm5zXHJcbiAgICBpZiAobWF4V2lkdGggPiAwICYmIG91dC5tYXhXaWR0aCAhPT0gbWF4V2lkdGgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQ6IGN1cnJlbnQud29yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudC55ICogc3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3I6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeEFkdmFuY2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsYXN0R2x5cGggIT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBnbHlwaEtlcm5pbmdPZmZzZXQgPSBnbHlwaC5rZXJuaW5nW2xhc3RDaGFyQ29kZV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PT0gd29yZFdyYXBDaGFyQ29kZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQ6IGN1cnJlbnQud29yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudC55ICogc3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBXZSdyZSBzdGFydGluZyBhIG5ldyB3b3JkLCByZWNvcmRpbmcgdGhlIHN0YXJ0aW5nIGluZGV4LCBldGNcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0geyB3b3JkOiAnJywgaTogaSwgeDogeEFkdmFuY2UsIHk6IHlBZHZhbmNlLCB3OiAwLCBoOiBsaW5lSGVpZ2h0LCBjcjogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LndvcmQgPSBjdXJyZW50LndvcmQuY29uY2F0KHRleHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudC53ICs9IGdseXBoLnhPZmZzZXQgKyBnbHlwaC54QWR2YW5jZSArICgoZ2x5cGhLZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8gZ2x5cGhLZXJuaW5nT2Zmc2V0IDogMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gZ2x5cGg7XHJcbiAgICAgICAgICAgIGxhc3RDaGFyQ29kZSA9IGNoYXJDb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIExhc3Qgd29yZFxyXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB3b3JkOiBjdXJyZW50LndvcmQsXHJcbiAgICAgICAgICAgICAgICBpOiBjdXJyZW50LmksXHJcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgIHk6IGN1cnJlbnQueSAqIHN5LFxyXG4gICAgICAgICAgICAgICAgdzogY3VycmVudC53ICogc3gsXHJcbiAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgIGNyOiBmYWxzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXNldCBmb3IgdGhlIG5leHQgbG9vcFxyXG4gICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICB5QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSAwO1xyXG5cclxuICAgICAgICAvLyAgTG9vcCB0aHJvdWdoIHRoZSB3b3JkcyBhcnJheSBhbmQgc2VlIGlmIHdlJ3ZlIGdvdCBhbnkgPiBtYXhXaWR0aFxyXG4gICAgICAgIHZhciBwcmV2O1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBjcnMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gd29yZHNbaV07XHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gZW50cnkueDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gZW50cnkueCArIGVudHJ5Lnc7XHJcblxyXG4gICAgICAgICAgICBpZiAocHJldilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBsZWZ0IC0gKHByZXYueCArIHByZXYudyk7XHJcblxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVmdCAtIChkaWZmICsgcHJldi53KTtcclxuXHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNoZWNrTGVmdCA9IGxlZnQgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgIHZhciBjaGVja1JpZ2h0ID0gcmlnaHQgLSBvZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hlY2tMZWZ0ID4gbWF4V2lkdGggfHwgY2hlY2tSaWdodCA+IG1heFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcnMucHVzaChlbnRyeS5pIC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNycy5wdXNoKGVudHJ5LmkgKyBlbnRyeS53b3JkLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IGVudHJ5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVudHJ5LmNyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcnMucHVzaChlbnRyeS5pICsgZW50cnkud29yZC5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0cmluZ0luc2VydCA9IGZ1bmN0aW9uIChzdHIsIGluZGV4LCB2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGluZGV4KSArIHZhbHVlICsgc3RyLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGNycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZXNcclxuICAgICAgICAgICAgdGV4dCA9IHN0cmluZ0luc2VydCh0ZXh0LCBjcnNbaV0sIFwiXFxuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0Lm1heFdpZHRoID0gbWF4V2lkdGg7XHJcbiAgICAgICAgb3V0LndyYXBwZWRUZXh0ID0gdGV4dDtcclxuXHJcbiAgICAgICAgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyAgUmVjYWxjdWxhdGVkIGluIHRoZSBuZXh0IGxvb3BcclxuICAgICAgICB3b3JkcyA9IFtdO1xyXG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0TGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgY2hhckNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gMTApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZDogY3VycmVudC53b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGk6IGN1cnJlbnQuaSxcclxuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBjdXJyZW50LnkgKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICB3OiBjdXJyZW50LncgKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGxpbmVXaWR0aHNbY3VycmVudExpbmVdID0gY3VycmVudExpbmVXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvbmdlc3RMaW5lID0gY3VycmVudExpbmVXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPCBzaG9ydGVzdExpbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNob3J0ZXN0TGluZSA9IGN1cnJlbnRMaW5lV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHhBZHZhbmNlO1xyXG4gICAgICAgIHkgPSB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG5cclxuICAgICAgICAgICAgeCArPSAoa2VybmluZ09mZnNldCAhPT0gdW5kZWZpbmVkKSA/IGtlcm5pbmdPZmZzZXQgOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJ4ID4geClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ4ID0geDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChieSA+IHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBieSA9IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ3cgPSB4ICsgZ2x5cGgueEFkdmFuY2U7XHJcbiAgICAgICAgdmFyIGdoID0geSArIGxpbmVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChidyA8IGd3KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYncgPSBndztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiaCA8IGdoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYmggPSBnaDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gd29yZFdyYXBDaGFyQ29kZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JkOiBjdXJyZW50LndvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnQueCAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGN1cnJlbnQueSAqIHN5LFxyXG4gICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgIGg6IGN1cnJlbnQuaCAqIHN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSdyZSBzdGFydGluZyBhIG5ldyB3b3JkLCByZWNvcmRpbmcgdGhlIHN0YXJ0aW5nIGluZGV4LCBldGNcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB7IHdvcmQ6ICcnLCBpOiBpLCB4OiB4QWR2YW5jZSwgeTogeUFkdmFuY2UsIHc6IDAsIGg6IGxpbmVIZWlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VycmVudC53b3JkID0gY3VycmVudC53b3JkLmNvbmNhdCh0ZXh0W2ldKTtcclxuICAgICAgICAgICAgY3VycmVudC53ICs9IGdseXBoLnhPZmZzZXQgKyBnbHlwaC54QWR2YW5jZSArICgoa2VybmluZ09mZnNldCAhPT0gdW5kZWZpbmVkKSA/IGtlcm5pbmdPZmZzZXQgOiAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gZ3cgKiBzY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTGFzdCB3b3JkXHJcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICB3b3Jkcy5wdXNoKHtcclxuICAgICAgICAgICAgd29yZDogY3VycmVudC53b3JkLFxyXG4gICAgICAgICAgICBpOiBjdXJyZW50LmksXHJcbiAgICAgICAgICAgIHg6IGN1cnJlbnQueCAqIHN4LFxyXG4gICAgICAgICAgICB5OiBjdXJyZW50LnkgKiBzeSxcclxuICAgICAgICAgICAgdzogY3VycmVudC53ICogc3gsXHJcbiAgICAgICAgICAgIGg6IGN1cnJlbnQuaCAqIHN5XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVdpZHRoc1tjdXJyZW50TGluZV0gPSBjdXJyZW50TGluZVdpZHRoO1xyXG5cclxuICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmUpXHJcbiAgICB7XHJcbiAgICAgICAgbG9uZ2VzdExpbmUgPSBjdXJyZW50TGluZVdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50TGluZVdpZHRoIDwgc2hvcnRlc3RMaW5lKVxyXG4gICAge1xyXG4gICAgICAgIHNob3J0ZXN0TGluZSA9IGN1cnJlbnRMaW5lV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvY2FsID0gb3V0LmxvY2FsO1xyXG4gICAgdmFyIGdsb2JhbCA9IG91dC5nbG9iYWw7XHJcbiAgICB2YXIgbGluZXMgPSBvdXQubGluZXM7XHJcblxyXG4gICAgbG9jYWwueCA9IGJ4ICogc2NhbGU7XHJcbiAgICBsb2NhbC55ID0gYnkgKiBzY2FsZTtcclxuICAgIGxvY2FsLndpZHRoID0gYncgKiBzY2FsZTtcclxuICAgIGxvY2FsLmhlaWdodCA9IGJoICogc2NhbGU7XHJcblxyXG4gICAgZ2xvYmFsLnggPSAoc3JjLnggLSBzcmMuZGlzcGxheU9yaWdpblgpICsgKGJ4ICogc3gpO1xyXG4gICAgZ2xvYmFsLnkgPSAoc3JjLnkgLSBzcmMuZGlzcGxheU9yaWdpblkpICsgKGJ5ICogc3kpO1xyXG4gICAgZ2xvYmFsLndpZHRoID0gYncgKiBzeDtcclxuICAgIGdsb2JhbC5oZWlnaHQgPSBiaCAqIHN5O1xyXG5cclxuICAgIGxpbmVzLnNob3J0ZXN0ID0gc2hvcnRlc3RMaW5lO1xyXG4gICAgbGluZXMubG9uZ2VzdCA9IGxvbmdlc3RMaW5lO1xyXG4gICAgbGluZXMubGVuZ3RocyA9IGxpbmVXaWR0aHM7XHJcblxyXG4gICAgaWYgKHJvdW5kKVxyXG4gICAge1xyXG4gICAgICAgIGxvY2FsLnggPSBNYXRoLnJvdW5kKGxvY2FsLngpO1xyXG4gICAgICAgIGxvY2FsLnkgPSBNYXRoLnJvdW5kKGxvY2FsLnkpO1xyXG4gICAgICAgIGxvY2FsLndpZHRoID0gTWF0aC5yb3VuZChsb2NhbC53aWR0aCk7XHJcbiAgICAgICAgbG9jYWwuaGVpZ2h0ID0gTWF0aC5yb3VuZChsb2NhbC5oZWlnaHQpO1xyXG5cclxuICAgICAgICBnbG9iYWwueCA9IE1hdGgucm91bmQoZ2xvYmFsLngpO1xyXG4gICAgICAgIGdsb2JhbC55ID0gTWF0aC5yb3VuZChnbG9iYWwueSk7XHJcbiAgICAgICAgZ2xvYmFsLndpZHRoID0gTWF0aC5yb3VuZChnbG9iYWwud2lkdGgpO1xyXG4gICAgICAgIGdsb2JhbC5oZWlnaHQgPSBNYXRoLnJvdW5kKGdsb2JhbC5oZWlnaHQpO1xyXG5cclxuICAgICAgICBsaW5lcy5zaG9ydGVzdCA9IE1hdGgucm91bmQoc2hvcnRlc3RMaW5lKTtcclxuICAgICAgICBsaW5lcy5sb25nZXN0ID0gTWF0aC5yb3VuZChsb25nZXN0TGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0LndvcmRzID0gd29yZHM7XHJcbiAgICBvdXQubGluZXMuaGVpZ2h0ID0gbGluZUhlaWdodDtcclxuICAgIG91dC5zY2FsZVggPSBzcmMuc2NhbGVYO1xyXG4gICAgb3V0LnNjYWxlWSA9IHNyYy5zY2FsZVk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qml0bWFwVGV4dFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ./ParseXMLBitmapFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\n\r\n/**\r\n * Parse an XML Bitmap Font from an Atlas.\r\n *\r\n * Adds the parsed Bitmap Font data to the cache with the `fontName` key.\r\n *\r\n * @function ParseFromAtlas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to parse the Bitmap Font for.\r\n * @param {string} fontName - The key of the font to add to the Bitmap Font cache.\r\n * @param {string} textureKey - The key of the BitmapFont's texture.\r\n * @param {string} frameKey - The key of the BitmapFont texture's frame.\r\n * @param {string} xmlKey - The key of the XML data of the font to parse.\r\n * @param {integer} xSpacing - The x-axis spacing to add between each letter.\r\n * @param {integer} ySpacing - The y-axis spacing to add to the line height.\r\n *\r\n * @return {boolean} Whether the parsing was successful or not.\r\n */\r\nvar ParseFromAtlas = function (scene, fontName, textureKey, frameKey, xmlKey, xSpacing, ySpacing)\r\n{\r\n    var frame = scene.sys.textures.getFrame(textureKey, frameKey);\r\n    var xml = scene.sys.cache.xml.get(xmlKey);\r\n\r\n    if (frame && xml)\r\n    {\r\n        var data = ParseXMLBitmapFont(xml, xSpacing, ySpacing, frame);\r\n\r\n        scene.sys.cache.bitmapFont.add(fontName, { data: data, texture: textureKey, frame: frameKey });\r\n\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = ParseFromAtlas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlRnJvbUF0bGFzLmpzPzc3MWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLG9HQUFzQjs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtEQUFrRCxtREFBbUQ7O0FBRXJHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9QYXJzZUZyb21BdGxhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBhcnNlWE1MQml0bWFwRm9udCA9IHJlcXVpcmUoJy4vUGFyc2VYTUxCaXRtYXBGb250Jyk7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIEJpdG1hcCBGb250IGZyb20gYW4gQXRsYXMuXHJcbiAqXHJcbiAqIEFkZHMgdGhlIHBhcnNlZCBCaXRtYXAgRm9udCBkYXRhIHRvIHRoZSBjYWNoZSB3aXRoIHRoZSBgZm9udE5hbWVgIGtleS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBhcnNlRnJvbUF0bGFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gcGFyc2UgdGhlIEJpdG1hcCBGb250IGZvci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnROYW1lIC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byBhZGQgdG8gdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZUtleSAtIFRoZSBrZXkgb2YgdGhlIEJpdG1hcEZvbnQncyB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhbWVLZXkgLSBUaGUga2V5IG9mIHRoZSBCaXRtYXBGb250IHRleHR1cmUncyBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHhtbEtleSAtIFRoZSBrZXkgb2YgdGhlIFhNTCBkYXRhIG9mIHRoZSBmb250IHRvIHBhcnNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHhTcGFjaW5nIC0gVGhlIHgtYXhpcyBzcGFjaW5nIHRvIGFkZCBiZXR3ZWVuIGVhY2ggbGV0dGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHlTcGFjaW5nIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHBhcnNpbmcgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxyXG4gKi9cclxudmFyIFBhcnNlRnJvbUF0bGFzID0gZnVuY3Rpb24gKHNjZW5lLCBmb250TmFtZSwgdGV4dHVyZUtleSwgZnJhbWVLZXksIHhtbEtleSwgeFNwYWNpbmcsIHlTcGFjaW5nKVxyXG57XHJcbiAgICB2YXIgZnJhbWUgPSBzY2VuZS5zeXMudGV4dHVyZXMuZ2V0RnJhbWUodGV4dHVyZUtleSwgZnJhbWVLZXkpO1xyXG4gICAgdmFyIHhtbCA9IHNjZW5lLnN5cy5jYWNoZS54bWwuZ2V0KHhtbEtleSk7XHJcblxyXG4gICAgaWYgKGZyYW1lICYmIHhtbClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IFBhcnNlWE1MQml0bWFwRm9udCh4bWwsIHhTcGFjaW5nLCB5U3BhY2luZywgZnJhbWUpO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuY2FjaGUuYml0bWFwRm9udC5hZGQoZm9udE5hbWUsIHsgZGF0YTogZGF0YSwgdGV4dHVyZTogdGV4dHVyZUtleSwgZnJhbWU6IGZyYW1lS2V5IH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlRnJvbUF0bGFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Parses a Retro Font configuration object so you can pass it to the BitmapText constructor\r\n * and create a BitmapText object using a fixed-width retro font.\r\n *\r\n * @function Phaser.GameObjects.RetroFont.Parse\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Phaser Scene.\r\n * @param {Phaser.Types.GameObjects.BitmapText.RetroFontConfig} config - The font configuration object.\r\n *\r\n * @return {object} A parsed Bitmap Font data entry for the Bitmap Font cache.\r\n */\r\nvar ParseRetroFont = function (scene, config)\r\n{\r\n    var w = config.width;\r\n    var h = config.height;\r\n    var cx = Math.floor(w / 2);\r\n    var cy = Math.floor(h / 2);\r\n    var letters = GetValue(config, 'chars', '');\r\n\r\n    if (letters === '')\r\n    {\r\n        return;\r\n    }\r\n\r\n    var key = GetValue(config, 'image', '');\r\n    var offsetX = GetValue(config, 'offset.x', 0);\r\n    var offsetY = GetValue(config, 'offset.y', 0);\r\n    var spacingX = GetValue(config, 'spacing.x', 0);\r\n    var spacingY = GetValue(config, 'spacing.y', 0);\r\n    var lineSpacing = GetValue(config, 'lineSpacing', 0);\r\n\r\n    var charsPerRow = GetValue(config, 'charsPerRow', null);\r\n\r\n    if (charsPerRow === null)\r\n    {\r\n        charsPerRow = scene.sys.textures.getFrame(key).width / w;\r\n\r\n        if (charsPerRow > letters.length)\r\n        {\r\n            charsPerRow = letters.length;\r\n        }\r\n    }\r\n\r\n    var x = offsetX;\r\n    var y = offsetY;\r\n\r\n    var data = {\r\n        retroFont: true,\r\n        font: key,\r\n        size: w,\r\n        lineHeight: h + lineSpacing,\r\n        chars: {}\r\n    };\r\n\r\n    var r = 0;\r\n\r\n    for (var i = 0; i < letters.length; i++)\r\n    {\r\n        // var node = letters[i];\r\n\r\n        var charCode = letters.charCodeAt(i);\r\n\r\n        data.chars[charCode] =\r\n        {\r\n            x: x,\r\n            y: y,\r\n            width: w,\r\n            height: h,\r\n            centerX: cx,\r\n            centerY: cy,\r\n            xOffset: 0,\r\n            yOffset: 0,\r\n            xAdvance: w,\r\n            data: {},\r\n            kerning: {}\r\n        };\r\n\r\n        r++;\r\n\r\n        if (r === charsPerRow)\r\n        {\r\n            r = 0;\r\n            x = offsetX;\r\n            y += h + spacingY;\r\n        }\r\n        else\r\n        {\r\n            x += w + spacingX;\r\n        }\r\n    }\r\n\r\n    var entry = {\r\n        data: data,\r\n        frame: null,\r\n        texture: key\r\n    };\r\n\r\n    return entry;\r\n};\r\n\r\nmodule.exports = ParseRetroFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlUmV0cm9Gb250LmpzP2ZlNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsb0RBQW9EO0FBQy9EO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUGFyc2VSZXRyb0ZvbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFJldHJvIEZvbnQgY29uZmlndXJhdGlvbiBvYmplY3Qgc28geW91IGNhbiBwYXNzIGl0IHRvIHRoZSBCaXRtYXBUZXh0IGNvbnN0cnVjdG9yXHJcbiAqIGFuZCBjcmVhdGUgYSBCaXRtYXBUZXh0IG9iamVjdCB1c2luZyBhIGZpeGVkLXdpZHRoIHJldHJvIGZvbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlBhcnNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyIFNjZW5lLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LlJldHJvRm9udENvbmZpZ30gY29uZmlnIC0gVGhlIGZvbnQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gQSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YSBlbnRyeSBmb3IgdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKi9cclxudmFyIFBhcnNlUmV0cm9Gb250ID0gZnVuY3Rpb24gKHNjZW5lLCBjb25maWcpXHJcbntcclxuICAgIHZhciB3ID0gY29uZmlnLndpZHRoO1xyXG4gICAgdmFyIGggPSBjb25maWcuaGVpZ2h0O1xyXG4gICAgdmFyIGN4ID0gTWF0aC5mbG9vcih3IC8gMik7XHJcbiAgICB2YXIgY3kgPSBNYXRoLmZsb29yKGggLyAyKTtcclxuICAgIHZhciBsZXR0ZXJzID0gR2V0VmFsdWUoY29uZmlnLCAnY2hhcnMnLCAnJyk7XHJcblxyXG4gICAgaWYgKGxldHRlcnMgPT09ICcnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0VmFsdWUoY29uZmlnLCAnaW1hZ2UnLCAnJyk7XHJcbiAgICB2YXIgb2Zmc2V0WCA9IEdldFZhbHVlKGNvbmZpZywgJ29mZnNldC54JywgMCk7XHJcbiAgICB2YXIgb2Zmc2V0WSA9IEdldFZhbHVlKGNvbmZpZywgJ29mZnNldC55JywgMCk7XHJcbiAgICB2YXIgc3BhY2luZ1ggPSBHZXRWYWx1ZShjb25maWcsICdzcGFjaW5nLngnLCAwKTtcclxuICAgIHZhciBzcGFjaW5nWSA9IEdldFZhbHVlKGNvbmZpZywgJ3NwYWNpbmcueScsIDApO1xyXG4gICAgdmFyIGxpbmVTcGFjaW5nID0gR2V0VmFsdWUoY29uZmlnLCAnbGluZVNwYWNpbmcnLCAwKTtcclxuXHJcbiAgICB2YXIgY2hhcnNQZXJSb3cgPSBHZXRWYWx1ZShjb25maWcsICdjaGFyc1BlclJvdycsIG51bGwpO1xyXG5cclxuICAgIGlmIChjaGFyc1BlclJvdyA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICBjaGFyc1BlclJvdyA9IHNjZW5lLnN5cy50ZXh0dXJlcy5nZXRGcmFtZShrZXkpLndpZHRoIC8gdztcclxuXHJcbiAgICAgICAgaWYgKGNoYXJzUGVyUm93ID4gbGV0dGVycy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGFyc1BlclJvdyA9IGxldHRlcnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgeCA9IG9mZnNldFg7XHJcbiAgICB2YXIgeSA9IG9mZnNldFk7XHJcblxyXG4gICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgcmV0cm9Gb250OiB0cnVlLFxyXG4gICAgICAgIGZvbnQ6IGtleSxcclxuICAgICAgICBzaXplOiB3LFxyXG4gICAgICAgIGxpbmVIZWlnaHQ6IGggKyBsaW5lU3BhY2luZyxcclxuICAgICAgICBjaGFyczoge31cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHIgPSAwO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICAvLyB2YXIgbm9kZSA9IGxldHRlcnNbaV07XHJcblxyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IGxldHRlcnMuY2hhckNvZGVBdChpKTtcclxuXHJcbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgIGhlaWdodDogaCxcclxuICAgICAgICAgICAgY2VudGVyWDogY3gsXHJcbiAgICAgICAgICAgIGNlbnRlclk6IGN5LFxyXG4gICAgICAgICAgICB4T2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICB5T2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICB4QWR2YW5jZTogdyxcclxuICAgICAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcisrO1xyXG5cclxuICAgICAgICBpZiAociA9PT0gY2hhcnNQZXJSb3cpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgeCA9IG9mZnNldFg7XHJcbiAgICAgICAgICAgIHkgKz0gaCArIHNwYWNpbmdZO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ICs9IHcgKyBzcGFjaW5nWDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgZnJhbWU6IG51bGwsXHJcbiAgICAgICAgdGV4dHVyZToga2V5XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VSZXRyb0ZvbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Read an integer value from an XML Node.\r\n *\r\n * @function getValue\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Node} node - The XML Node.\r\n * @param {string} attribute - The attribute to read.\r\n *\r\n * @return {integer} The parsed value.\r\n */\r\nfunction getValue (node, attribute)\r\n{\r\n    return parseInt(node.getAttribute(attribute), 10);\r\n}\r\n\r\n/**\r\n * Parse an XML font to Bitmap Font data for the Bitmap Font cache.\r\n *\r\n * @function ParseXMLBitmapFont\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {XMLDocument} xml - The XML Document to parse the font from.\r\n * @param {integer} [xSpacing=0] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing=0] - The y-axis spacing to add to the line height.\r\n * @param {Phaser.Textures.Frame} [frame] - The texture frame to take into account while parsing.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapFontData} The parsed Bitmap Font data.\r\n */\r\nvar ParseXMLBitmapFont = function (xml, xSpacing, ySpacing, frame)\r\n{\r\n    if (xSpacing === undefined) { xSpacing = 0; }\r\n    if (ySpacing === undefined) { ySpacing = 0; }\r\n\r\n    var data = {};\r\n    var info = xml.getElementsByTagName('info')[0];\r\n    var common = xml.getElementsByTagName('common')[0];\r\n\r\n    data.font = info.getAttribute('face');\r\n    data.size = getValue(info, 'size');\r\n    data.lineHeight = getValue(common, 'lineHeight') + ySpacing;\r\n    data.chars = {};\r\n\r\n    var letters = xml.getElementsByTagName('char');\r\n\r\n    var adjustForTrim = (frame !== undefined && frame.trimmed);\r\n\r\n    if (adjustForTrim)\r\n    {\r\n        var top = frame.height;\r\n        var left = frame.width;\r\n    }\r\n\r\n    for (var i = 0; i < letters.length; i++)\r\n    {\r\n        var node = letters[i];\r\n\r\n        var charCode = getValue(node, 'id');\r\n        var gx = getValue(node, 'x');\r\n        var gy = getValue(node, 'y');\r\n        var gw = getValue(node, 'width');\r\n        var gh = getValue(node, 'height');\r\n\r\n        //  Handle frame trim issues\r\n\r\n        if (adjustForTrim)\r\n        {\r\n            if (gx < left)\r\n            {\r\n                left = gx;\r\n            }\r\n\r\n            if (gy < top)\r\n            {\r\n                top = gy;\r\n            }\r\n        }\r\n\r\n        data.chars[charCode] =\r\n        {\r\n            x: gx,\r\n            y: gy,\r\n            width: gw,\r\n            height: gh,\r\n            centerX: Math.floor(gw / 2),\r\n            centerY: Math.floor(gh / 2),\r\n            xOffset: getValue(node, 'xoffset'),\r\n            yOffset: getValue(node, 'yoffset'),\r\n            xAdvance: getValue(node, 'xadvance') + xSpacing,\r\n            data: {},\r\n            kerning: {}\r\n        };\r\n    }\r\n\r\n    if (adjustForTrim && top !== 0 && left !== 0)\r\n    {\r\n        //  Now we know the top and left coordinates of the glyphs in the original data\r\n        //  so we can work out how much to adjust the glyphs by\r\n\r\n        for (var code in data.chars)\r\n        {\r\n            var glyph = data.chars[code];\r\n\r\n            glyph.x -= frame.x;\r\n            glyph.y -= frame.y;\r\n        }\r\n    }\r\n\r\n    var kernings = xml.getElementsByTagName('kerning');\r\n\r\n    for (i = 0; i < kernings.length; i++)\r\n    {\r\n        var kern = kernings[i];\r\n\r\n        var first = getValue(kern, 'first');\r\n        var second = getValue(kern, 'second');\r\n        var amount = getValue(kern, 'amount');\r\n\r\n        data.chars[second].kerning[first] = amount;\r\n    }\r\n\r\n    return data;\r\n};\r\n\r\nmodule.exports = ParseXMLBitmapFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlWE1MQml0bWFwRm9udC5qcz8wYWU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGNBQWM7QUFDL0MsaUNBQWlDLGNBQWM7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlWE1MQml0bWFwRm9udC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWQgYW4gaW50ZWdlciB2YWx1ZSBmcm9tIGFuIFhNTCBOb2RlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gZ2V0VmFsdWVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBYTUwgTm9kZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgdG8gcmVhZC5cclxuICpcclxuICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHBhcnNlZCB2YWx1ZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFZhbHVlIChub2RlLCBhdHRyaWJ1dGUpXHJcbntcclxuICAgIHJldHVybiBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLCAxMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBhbiBYTUwgZm9udCB0byBCaXRtYXAgRm9udCBkYXRhIGZvciB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQYXJzZVhNTEJpdG1hcEZvbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MRG9jdW1lbnR9IHhtbCAtIFRoZSBYTUwgRG9jdW1lbnQgdG8gcGFyc2UgdGhlIGZvbnQgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmc9MF0gLSBUaGUgeC1heGlzIHNwYWNpbmcgdG8gYWRkIGJldHdlZW4gZWFjaCBsZXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3lTcGFjaW5nPTBdIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBbZnJhbWVdIC0gVGhlIHRleHR1cmUgZnJhbWUgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hpbGUgcGFyc2luZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwRm9udERhdGF9IFRoZSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YS5cclxuICovXHJcbnZhciBQYXJzZVhNTEJpdG1hcEZvbnQgPSBmdW5jdGlvbiAoeG1sLCB4U3BhY2luZywgeVNwYWNpbmcsIGZyYW1lKVxyXG57XHJcbiAgICBpZiAoeFNwYWNpbmcgPT09IHVuZGVmaW5lZCkgeyB4U3BhY2luZyA9IDA7IH1cclxuICAgIGlmICh5U3BhY2luZyA9PT0gdW5kZWZpbmVkKSB7IHlTcGFjaW5nID0gMDsgfVxyXG5cclxuICAgIHZhciBkYXRhID0ge307XHJcbiAgICB2YXIgaW5mbyA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xyXG4gICAgdmFyIGNvbW1vbiA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XHJcblxyXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcclxuICAgIGRhdGEuc2l6ZSA9IGdldFZhbHVlKGluZm8sICdzaXplJyk7XHJcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBnZXRWYWx1ZShjb21tb24sICdsaW5lSGVpZ2h0JykgKyB5U3BhY2luZztcclxuICAgIGRhdGEuY2hhcnMgPSB7fTtcclxuXHJcbiAgICB2YXIgbGV0dGVycyA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xyXG5cclxuICAgIHZhciBhZGp1c3RGb3JUcmltID0gKGZyYW1lICE9PSB1bmRlZmluZWQgJiYgZnJhbWUudHJpbW1lZCk7XHJcblxyXG4gICAgaWYgKGFkanVzdEZvclRyaW0pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRvcCA9IGZyYW1lLmhlaWdodDtcclxuICAgICAgICB2YXIgbGVmdCA9IGZyYW1lLndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZSA9IGxldHRlcnNbaV07XHJcblxyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IGdldFZhbHVlKG5vZGUsICdpZCcpO1xyXG4gICAgICAgIHZhciBneCA9IGdldFZhbHVlKG5vZGUsICd4Jyk7XHJcbiAgICAgICAgdmFyIGd5ID0gZ2V0VmFsdWUobm9kZSwgJ3knKTtcclxuICAgICAgICB2YXIgZ3cgPSBnZXRWYWx1ZShub2RlLCAnd2lkdGgnKTtcclxuICAgICAgICB2YXIgZ2ggPSBnZXRWYWx1ZShub2RlLCAnaGVpZ2h0Jyk7XHJcblxyXG4gICAgICAgIC8vICBIYW5kbGUgZnJhbWUgdHJpbSBpc3N1ZXNcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdEZvclRyaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZ3ggPCBsZWZ0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gZ3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChneSA8IHRvcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG9wID0gZ3k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGd4LFxyXG4gICAgICAgICAgICB5OiBneSxcclxuICAgICAgICAgICAgd2lkdGg6IGd3LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGdoLFxyXG4gICAgICAgICAgICBjZW50ZXJYOiBNYXRoLmZsb29yKGd3IC8gMiksXHJcbiAgICAgICAgICAgIGNlbnRlclk6IE1hdGguZmxvb3IoZ2ggLyAyKSxcclxuICAgICAgICAgICAgeE9mZnNldDogZ2V0VmFsdWUobm9kZSwgJ3hvZmZzZXQnKSxcclxuICAgICAgICAgICAgeU9mZnNldDogZ2V0VmFsdWUobm9kZSwgJ3lvZmZzZXQnKSxcclxuICAgICAgICAgICAgeEFkdmFuY2U6IGdldFZhbHVlKG5vZGUsICd4YWR2YW5jZScpICsgeFNwYWNpbmcsXHJcbiAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICBrZXJuaW5nOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFkanVzdEZvclRyaW0gJiYgdG9wICE9PSAwICYmIGxlZnQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vdyB3ZSBrbm93IHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgb2YgdGhlIGdseXBocyBpbiB0aGUgb3JpZ2luYWwgZGF0YVxyXG4gICAgICAgIC8vICBzbyB3ZSBjYW4gd29yayBvdXQgaG93IG11Y2ggdG8gYWRqdXN0IHRoZSBnbHlwaHMgYnlcclxuXHJcbiAgICAgICAgZm9yICh2YXIgY29kZSBpbiBkYXRhLmNoYXJzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdseXBoID0gZGF0YS5jaGFyc1tjb2RlXTtcclxuXHJcbiAgICAgICAgICAgIGdseXBoLnggLT0gZnJhbWUueDtcclxuICAgICAgICAgICAgZ2x5cGgueSAtPSBmcmFtZS55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIga2VybmluZ3MgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtlcm4gPSBrZXJuaW5nc1tpXTtcclxuXHJcbiAgICAgICAgdmFyIGZpcnN0ID0gZ2V0VmFsdWUoa2VybiwgJ2ZpcnN0Jyk7XHJcbiAgICAgICAgdmFyIHNlY29uZCA9IGdldFZhbHVlKGtlcm4sICdzZWNvbmQnKTtcclxuICAgICAgICB2YXIgYW1vdW50ID0gZ2V0VmFsdWUoa2VybiwgJ2Ftb3VudCcpO1xyXG5cclxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlWE1MQml0bWFwRm9udDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RETRO_FONT_CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/gameobjects/bitmaptext/const.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.RetroFont\r\n * @since 3.6.0\r\n */\r\n\r\nvar RetroFont = { Parse: __webpack_require__(/*! ./ParseRetroFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js\") };\r\n\r\n//   Merge in the consts\r\nRetroFont = Extend(false, RetroFont, RETRO_FONT_CONST);\r\n\r\nmodule.exports = RetroFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1JldHJvRm9udC5qcz9jNTk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQywwRUFBUztBQUN4QyxhQUFhLG1CQUFPLENBQUMsbUZBQTJCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsUUFBUSxtQkFBTyxDQUFDLDRGQUFrQjs7QUFFbkQ7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUmV0cm9Gb250LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUkVUUk9fRk9OVF9DT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnRcclxuICogQHNpbmNlIDMuNi4wXHJcbiAqL1xyXG5cclxudmFyIFJldHJvRm9udCA9IHsgUGFyc2U6IHJlcXVpcmUoJy4vUGFyc2VSZXRyb0ZvbnQnKSB9O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcblJldHJvRm9udCA9IEV4dGVuZChmYWxzZSwgUmV0cm9Gb250LCBSRVRST19GT05UX0NPTlNUKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmV0cm9Gb250O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/const.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/const.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RETRO_FONT_CONST = {\r\n\r\n    /**\r\n     * Text Set 1 =  !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET1\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET1: ' !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~',\r\n\r\n    /**\r\n     * Text Set 2 =  !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET2\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET2: ' !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n    /**\r\n     * Text Set 3 = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET3\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET3: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ',\r\n\r\n    /**\r\n     * Text Set 4 = ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET4\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET4: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789',\r\n\r\n    /**\r\n     * Text Set 5 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET5\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET5: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() \\'!?-*:0123456789',\r\n\r\n    /**\r\n     * Text Set 6 = ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' \r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET6\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET6: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.\\' ',\r\n\r\n    /**\r\n     * Text Set 7 = AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET7\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET7: 'AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-\\'39',\r\n\r\n    /**\r\n     * Text Set 8 = 0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET8\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET8: '0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n    /**\r\n     * Text Set 9 = ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET9\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET9: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,\\'\"?!',\r\n\r\n    /**\r\n     * Text Set 10 = ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET10\r\n     * @type {string}\r\n     * @since 3.6.0\r\n     */\r\n    TEXT_SET10: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n    /**\r\n     * Text Set 11 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789\r\n     * \r\n     * @name Phaser.GameObjects.RetroFont.TEXT_SET11\r\n     * @since 3.6.0\r\n     * @type {string}\r\n     */\r\n    TEXT_SET11: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()\\':;0123456789'\r\n\r\n};\r\n\r\nmodule.exports = RETRO_FONT_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2NvbnN0LmpzPzI5MTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0EsaURBQWlELGlFQUFpRSxFQUFFO0FBQ3BIO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDZDQUE2QyxpRUFBaUUsRUFBRTs7QUFFaEg7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0Esd0RBQXdEOztBQUV4RDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSRVRST19GT05UX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMSA9ICAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQxXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUMTogJyAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+JyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDIgPSAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQyOiAnICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMyA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSBcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDNcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQzOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5ICcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0IFNldCA0ID0gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDEyMzQ1Njc4OVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUNFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICovXHJcbiAgICBURVhUX1NFVDQ6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAwMTIzNDU2Nzg5JyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDUgPSBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi4sLygpICchPy0qOjAxMjM0NTY3ODlcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ1OiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouLC8oKSBcXCchPy0qOjAxMjM0NTY3ODknLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgNiA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIT86OzAxMjM0NTY3ODlcIigpLC0uJyBcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDZcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ2OiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVohPzo7MDEyMzQ1Njc4OVwiKCksLS5cXCcgJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDcgPSBBR01TWSs6NEJITlRaITs1Q0lPVS4/MDZESlBWLCgxN0VLUVdcIikyOEZMUlgtJzM5XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQ3XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUNzogJ0FHTVNZKzo0QkhOVFohOzVDSU9VLj8wNkRKUFYsKDE3RUtRV1wiKTI4RkxSWC1cXCczOScsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0IFNldCA4ID0gMDEyMzQ1Njc4OSAuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ4OiAnMDEyMzQ1Njc4OSAuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgOSA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaKCktMDEyMzQ1Njc4OS46LCdcIj8hXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQ5XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUOTogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaKCktMDEyMzQ1Njc4OS46LFxcJ1wiPyEnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMTAgPSBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUMTBcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQxMDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDExID0gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouLFwiLSshPygpJzo7MDEyMzQ1Njc4OVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUMTFcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQxMTogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLixcIi0rIT8oKVxcJzo7MDEyMzQ1Njc4OSdcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJFVFJPX0ZPTlRfQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js ***!
  \*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ../static/BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Render = __webpack_require__(/*! ./DynamicBitmapTextRender */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * Dynamic Bitmap Text objects are different from Static Bitmap Text in that they invoke a callback for each\r\n * letter being rendered during the render pass. This callback allows you to manipulate the properties of\r\n * each letter being rendered, such as its position, scale or tint, allowing you to create interesting effects\r\n * like jiggling text, which can't be done with Static text. This means that Dynamic Text takes more processing\r\n * time, so only use them if you require the callback ability they have.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * @class DynamicBitmapText\r\n * @extends Phaser.GameObjects.BitmapText\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} x - The x coordinate of this Game Object in world space.\r\n * @param {number} y - The y coordinate of this Game Object in world space.\r\n * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size of this Bitmap Text.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n */\r\nvar DynamicBitmapText = new Class({\r\n\r\n    Extends: BitmapText,\r\n\r\n    Mixins: [\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function DynamicBitmapText (scene, x, y, font, text, size, align)\r\n    {\r\n        BitmapText.call(this, scene, x, y, font, text, size, align);\r\n\r\n        this.type = 'DynamicBitmapText';\r\n\r\n        /**\r\n         * The horizontal scroll position of the Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#scrollX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollX = 0;\r\n\r\n        /**\r\n         * The vertical scroll position of the Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#scrollY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollY = 0;\r\n\r\n        /**\r\n         * The crop width of the Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#cropWidth\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.cropWidth = 0;\r\n\r\n        /**\r\n         * The crop height of the Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#cropHeight\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.cropHeight = 0;\r\n\r\n        /**\r\n         * A callback that alters how each character of the Bitmap Text is rendered.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#displayCallback\r\n         * @type {Phaser.Types.GameObjects.BitmapText.DisplayCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.displayCallback;\r\n\r\n        /**\r\n         * The data object that is populated during rendering, then passed to the displayCallback.\r\n         * You should modify this object then return it back from the callback. It's updated values\r\n         * will be used to render the specific glyph.\r\n         * \r\n         * Please note that if you need a reference to this object locally in your game code then you\r\n         * should shallow copy it, as it's updated and re-used for every glyph in the text.\r\n         *\r\n         * @name Phaser.GameObjects.DynamicBitmapText#callbackData\r\n         * @type {Phaser.Types.GameObjects.BitmapText.DisplayCallbackConfig}\r\n         * @since 3.11.0\r\n         */\r\n        this.callbackData = {\r\n            parent: this,\r\n            color: 0,\r\n            tint: {\r\n                topLeft: 0,\r\n                topRight: 0,\r\n                bottomLeft: 0,\r\n                bottomRight: 0\r\n            },\r\n            index: 0,\r\n            charCode: 0,\r\n            x: 0,\r\n            y: 0,\r\n            scale: 0,\r\n            rotation: 0,\r\n            data: 0\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Set the crop size of this Bitmap Text.\r\n     *\r\n     * @method Phaser.GameObjects.DynamicBitmapText#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the crop.\r\n     * @param {number} height - The height of the crop.\r\n     *\r\n     * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        this.cropWidth = width;\r\n        this.cropHeight = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a callback that alters how each character of the Bitmap Text is rendered.\r\n     *\r\n     * The callback receives a {@link Phaser.Types.GameObjects.BitmapText.DisplayCallbackConfig} object that contains information about the character that's\r\n     * about to be rendered.\r\n     *\r\n     * It should return an object with `x`, `y`, `scale` and `rotation` properties that will be used instead of the\r\n     * usual values when rendering.\r\n     *\r\n     * @method Phaser.GameObjects.DynamicBitmapText#setDisplayCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.BitmapText.DisplayCallback} callback - The display callback to set.\r\n     *\r\n     * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n     */\r\n    setDisplayCallback: function (callback)\r\n    {\r\n        this.displayCallback = callback;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the horizontal scroll position of this Bitmap Text.\r\n     *\r\n     * @method Phaser.GameObjects.DynamicBitmapText#setScrollX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The horizontal scroll position to set.\r\n     *\r\n     * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n     */\r\n    setScrollX: function (value)\r\n    {\r\n        this.scrollX = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the vertical scroll position of this Bitmap Text.\r\n     *\r\n     * @method Phaser.GameObjects.DynamicBitmapText#setScrollY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The vertical scroll position to set.\r\n     *\r\n     * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n     */\r\n    setScrollY: function (value)\r\n    {\r\n        this.scrollY = value;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = DynamicBitmapText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHQuanM/MTc3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUdBQXNCO0FBQy9DLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNIQUEyQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0VBQWdFO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9EQUFvRDtBQUNuRTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4uL3N0YXRpYy9CaXRtYXBUZXh0Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0R5bmFtaWNCaXRtYXBUZXh0UmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBCaXRtYXBUZXh0IG9iamVjdHMgd29yayBieSB0YWtpbmcgYSB0ZXh0dXJlIGZpbGUgYW5kIGFuIFhNTCBvciBKU09OIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHVyaW5nIHJlbmRlcmluZyBmb3IgZWFjaCBsZXR0ZXIgb2YgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGRpc3BsYXksIHByb3BvcnRpb25hbGx5IHNwYWNlZCBvdXQgYW5kIGFsaWduZWQgdG9cclxuICogbWF0Y2ggdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHluYW1pYyBCaXRtYXAgVGV4dCBvYmplY3RzIGFyZSBkaWZmZXJlbnQgZnJvbSBTdGF0aWMgQml0bWFwIFRleHQgaW4gdGhhdCB0aGV5IGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoXHJcbiAqIGxldHRlciBiZWluZyByZW5kZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLiBUaGlzIGNhbGxiYWNrIGFsbG93cyB5b3UgdG8gbWFuaXB1bGF0ZSB0aGUgcHJvcGVydGllcyBvZlxyXG4gKiBlYWNoIGxldHRlciBiZWluZyByZW5kZXJlZCwgc3VjaCBhcyBpdHMgcG9zaXRpb24sIHNjYWxlIG9yIHRpbnQsIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgaW50ZXJlc3RpbmcgZWZmZWN0c1xyXG4gKiBsaWtlIGppZ2dsaW5nIHRleHQsIHdoaWNoIGNhbid0IGJlIGRvbmUgd2l0aCBTdGF0aWMgdGV4dC4gVGhpcyBtZWFucyB0aGF0IER5bmFtaWMgVGV4dCB0YWtlcyBtb3JlIHByb2Nlc3NpbmdcclxuICogdGltZSwgc28gb25seSB1c2UgdGhlbSBpZiB5b3UgcmVxdWlyZSB0aGUgY2FsbGJhY2sgYWJpbGl0eSB0aGV5IGhhdmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogQGNsYXNzIER5bmFtaWNCaXRtYXBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBJdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGFueSBnaXZlbiB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFt0ZXh0XSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKi9cclxudmFyIER5bmFtaWNCaXRtYXBUZXh0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCaXRtYXBUZXh0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIER5bmFtaWNCaXRtYXBUZXh0IChzY2VuZSwgeCwgeSwgZm9udCwgdGV4dCwgc2l6ZSwgYWxpZ24pXHJcbiAgICB7XHJcbiAgICAgICAgQml0bWFwVGV4dC5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbik7XHJcblxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdEeW5hbWljQml0bWFwVGV4dCc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjc2Nyb2xsWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIEJpdG1hcCBUZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3Njcm9sbFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3JvcCB3aWR0aCBvZiB0aGUgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjY3JvcFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jcm9wV2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3JvcCBoZWlnaHQgb2YgdGhlIEJpdG1hcCBUZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I2Nyb3BIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNyb3BIZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgYWx0ZXJzIGhvdyBlYWNoIGNoYXJhY3RlciBvZiB0aGUgQml0bWFwIFRleHQgaXMgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjZGlzcGxheUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkRpc3BsYXlDYWxsYmFja31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlDYWxsYmFjaztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRhdGEgb2JqZWN0IHRoYXQgaXMgcG9wdWxhdGVkIGR1cmluZyByZW5kZXJpbmcsIHRoZW4gcGFzc2VkIHRvIHRoZSBkaXNwbGF5Q2FsbGJhY2suXHJcbiAgICAgICAgICogWW91IHNob3VsZCBtb2RpZnkgdGhpcyBvYmplY3QgdGhlbiByZXR1cm4gaXQgYmFjayBmcm9tIHRoZSBjYWxsYmFjay4gSXQncyB1cGRhdGVkIHZhbHVlc1xyXG4gICAgICAgICAqIHdpbGwgYmUgdXNlZCB0byByZW5kZXIgdGhlIHNwZWNpZmljIGdseXBoLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgaWYgeW91IG5lZWQgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbG9jYWxseSBpbiB5b3VyIGdhbWUgY29kZSB0aGVuIHlvdVxyXG4gICAgICAgICAqIHNob3VsZCBzaGFsbG93IGNvcHkgaXQsIGFzIGl0J3MgdXBkYXRlZCBhbmQgcmUtdXNlZCBmb3IgZXZlcnkgZ2x5cGggaW4gdGhlIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjY2FsbGJhY2tEYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkRpc3BsYXlDYWxsYmFja0NvbmZpZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0RhdGEgPSB7XHJcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcclxuICAgICAgICAgICAgY29sb3I6IDAsXHJcbiAgICAgICAgICAgIHRpbnQ6IHtcclxuICAgICAgICAgICAgICAgIHRvcExlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICB0b3BSaWdodDogMCxcclxuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICBib3R0b21SaWdodDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpbmRleDogMCxcclxuICAgICAgICAgICAgY2hhckNvZGU6IDAsXHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHNjYWxlOiAwLFxyXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcclxuICAgICAgICAgICAgZGF0YTogMFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjcm9wIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgY3JvcC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY3JvcFdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5jcm9wSGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjYWxsYmFjayB0aGF0IGFsdGVycyBob3cgZWFjaCBjaGFyYWN0ZXIgb2YgdGhlIEJpdG1hcCBUZXh0IGlzIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5EaXNwbGF5Q2FsbGJhY2tDb25maWd9IG9iamVjdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgdGhhdCdzXHJcbiAgICAgKiBhYm91dCB0byBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGB4YCwgYHlgLCBgc2NhbGVgIGFuZCBgcm90YXRpb25gIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVcclxuICAgICAqIHVzdWFsIHZhbHVlcyB3aGVuIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXREaXNwbGF5Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuRGlzcGxheUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBkaXNwbGF5IGNhbGxiYWNrIHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERpc3BsYXlDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXRTY3JvbGxYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2Nyb2xsWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3NldFNjcm9sbFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2Nyb2xsWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js ***!
  \***************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.DynamicBitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var text = src._text;\r\n    var textLength = text.length;\r\n\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (textLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        return;\r\n    }\r\n    \r\n    var textureFrame = src.frame;\r\n\r\n    var displayCallback = src.displayCallback;\r\n    var callbackData = src.callbackData;\r\n\r\n    var chars = src.fontData.chars;\r\n    var lineHeight = src.fontData.lineHeight;\r\n    var letterSpacing = src._letterSpacing;\r\n\r\n    var xAdvance = 0;\r\n    var yAdvance = 0;\r\n\r\n    var charCode = 0;\r\n\r\n    var glyph = null;\r\n    var glyphX = 0;\r\n    var glyphY = 0;\r\n    var glyphW = 0;\r\n    var glyphH = 0;\r\n\r\n    var x = 0;\r\n    var y = 0;\r\n\r\n    var lastGlyph = null;\r\n    var lastCharCode = 0;\r\n\r\n    var image = src.frame.source.image;\r\n\r\n    var textureX = textureFrame.cutX;\r\n    var textureY = textureFrame.cutY;\r\n\r\n    var rotation = 0;\r\n    var scale = 0;\r\n    var baseScale = (src._fontSize / src.fontData.size);\r\n\r\n    var align = src._align;\r\n    var currentLine = 0;\r\n    var lineOffsetX = 0;\r\n\r\n    //  Update the bounds - skipped internally if not dirty\r\n    src.getTextBounds(false);\r\n\r\n    var lineData = src._bounds.lines;\r\n\r\n    if (align === 1)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n    }\r\n    else if (align === 2)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n    }\r\n\r\n    ctx.translate(-src.displayOriginX, -src.displayOriginY);\r\n\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    if (src.cropWidth > 0 && src.cropHeight > 0)\r\n    {\r\n        ctx.beginPath();\r\n        ctx.rect(0, 0, src.cropWidth, src.cropHeight);\r\n        ctx.clip();\r\n    }\r\n\r\n    for (var i = 0; i < textLength; i++)\r\n    {\r\n        //  Reset the scale (in case the callback changed it)\r\n        scale = baseScale;\r\n        rotation = 0;\r\n\r\n        charCode = text.charCodeAt(i);\r\n\r\n        if (charCode === 10)\r\n        {\r\n            currentLine++;\r\n\r\n            if (align === 1)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n            }\r\n            else if (align === 2)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n            }\r\n\r\n            xAdvance = 0;\r\n            yAdvance += lineHeight;\r\n            lastGlyph = null;\r\n\r\n            continue;\r\n        }\r\n\r\n        glyph = chars[charCode];\r\n\r\n        if (!glyph)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        glyphX = textureX + glyph.x;\r\n        glyphY = textureY + glyph.y;\r\n\r\n        glyphW = glyph.width;\r\n        glyphH = glyph.height;\r\n\r\n        x = (glyph.xOffset + xAdvance) - src.scrollX;\r\n        y = (glyph.yOffset + yAdvance) - src.scrollY;\r\n\r\n        if (lastGlyph !== null)\r\n        {\r\n            var kerningOffset = glyph.kerning[lastCharCode];\r\n            x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n        }\r\n\r\n        if (displayCallback)\r\n        {\r\n            callbackData.index = i;\r\n            callbackData.charCode = charCode;\r\n            callbackData.x = x;\r\n            callbackData.y = y;\r\n            callbackData.scale = scale;\r\n            callbackData.rotation = rotation;\r\n            callbackData.data = glyph.data;\r\n\r\n            var output = displayCallback(callbackData);\r\n\r\n            x = output.x;\r\n            y = output.y;\r\n            scale = output.scale;\r\n            rotation = output.rotation;\r\n        }\r\n\r\n        x *= scale;\r\n        y *= scale;\r\n\r\n        x += lineOffsetX;\r\n\r\n        xAdvance += glyph.xAdvance + letterSpacing;\r\n        lastGlyph = glyph;\r\n        lastCharCode = charCode;\r\n\r\n        //  Nothing to render or a space? Then skip to the next glyph\r\n        if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        if (roundPixels)\r\n        {\r\n            x = Math.round(x);\r\n            y = Math.round(y);\r\n        }\r\n\r\n        ctx.save();\r\n\r\n        ctx.translate(x, y);\r\n\r\n        ctx.rotate(rotation);\r\n\r\n        ctx.scale(scale, scale);\r\n\r\n        ctx.drawImage(image, glyphX, glyphY, glyphW, glyphH, 0, 0, glyphW, glyphH);\r\n\r\n        ctx.restore();\r\n    }\r\n\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = DynamicBitmapTextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlci5qcz80YWQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBEeW5hbWljQml0bWFwVGV4dENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHRleHQgPSBzcmMuX3RleHQ7XHJcbiAgICB2YXIgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAodGV4dExlbmd0aCA9PT0gMCB8fCAhU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdmFyIHRleHR1cmVGcmFtZSA9IHNyYy5mcmFtZTtcclxuXHJcbiAgICB2YXIgZGlzcGxheUNhbGxiYWNrID0gc3JjLmRpc3BsYXlDYWxsYmFjaztcclxuICAgIHZhciBjYWxsYmFja0RhdGEgPSBzcmMuY2FsbGJhY2tEYXRhO1xyXG5cclxuICAgIHZhciBjaGFycyA9IHNyYy5mb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gc3JjLmZvbnREYXRhLmxpbmVIZWlnaHQ7XHJcbiAgICB2YXIgbGV0dGVyU3BhY2luZyA9IHNyYy5fbGV0dGVyU3BhY2luZztcclxuXHJcbiAgICB2YXIgeEFkdmFuY2UgPSAwO1xyXG4gICAgdmFyIHlBZHZhbmNlID0gMDtcclxuXHJcbiAgICB2YXIgY2hhckNvZGUgPSAwO1xyXG5cclxuICAgIHZhciBnbHlwaCA9IG51bGw7XHJcbiAgICB2YXIgZ2x5cGhYID0gMDtcclxuICAgIHZhciBnbHlwaFkgPSAwO1xyXG4gICAgdmFyIGdseXBoVyA9IDA7XHJcbiAgICB2YXIgZ2x5cGhIID0gMDtcclxuXHJcbiAgICB2YXIgeCA9IDA7XHJcbiAgICB2YXIgeSA9IDA7XHJcblxyXG4gICAgdmFyIGxhc3RHbHlwaCA9IG51bGw7XHJcbiAgICB2YXIgbGFzdENoYXJDb2RlID0gMDtcclxuXHJcbiAgICB2YXIgaW1hZ2UgPSBzcmMuZnJhbWUuc291cmNlLmltYWdlO1xyXG5cclxuICAgIHZhciB0ZXh0dXJlWCA9IHRleHR1cmVGcmFtZS5jdXRYO1xyXG4gICAgdmFyIHRleHR1cmVZID0gdGV4dHVyZUZyYW1lLmN1dFk7XHJcblxyXG4gICAgdmFyIHJvdGF0aW9uID0gMDtcclxuICAgIHZhciBzY2FsZSA9IDA7XHJcbiAgICB2YXIgYmFzZVNjYWxlID0gKHNyYy5fZm9udFNpemUgLyBzcmMuZm9udERhdGEuc2l6ZSk7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgudHJhbnNsYXRlKC1zcmMuZGlzcGxheU9yaWdpblgsIC1zcmMuZGlzcGxheU9yaWdpblkpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICBpZiAoc3JjLmNyb3BXaWR0aCA+IDAgJiYgc3JjLmNyb3BIZWlnaHQgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjdHgucmVjdCgwLCAwLCBzcmMuY3JvcFdpZHRoLCBzcmMuY3JvcEhlaWdodCk7XHJcbiAgICAgICAgY3R4LmNsaXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICAvLyAgUmVzZXQgdGhlIHNjYWxlIChpbiBjYXNlIHRoZSBjYWxsYmFjayBjaGFuZ2VkIGl0KVxyXG4gICAgICAgIHNjYWxlID0gYmFzZVNjYWxlO1xyXG4gICAgICAgIHJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgY2hhckNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gMTApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjdXJyZW50TGluZSsrO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFsaWduID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pIC8gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChhbGlnbiA9PT0gMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbY3VycmVudExpbmVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgeEFkdmFuY2UgPSAwO1xyXG4gICAgICAgICAgICB5QWR2YW5jZSArPSBsaW5lSGVpZ2h0O1xyXG4gICAgICAgICAgICBsYXN0R2x5cGggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2x5cGhYID0gdGV4dHVyZVggKyBnbHlwaC54O1xyXG4gICAgICAgIGdseXBoWSA9IHRleHR1cmVZICsgZ2x5cGgueTtcclxuXHJcbiAgICAgICAgZ2x5cGhXID0gZ2x5cGgud2lkdGg7XHJcbiAgICAgICAgZ2x5cGhIID0gZ2x5cGguaGVpZ2h0O1xyXG5cclxuICAgICAgICB4ID0gKGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZSkgLSBzcmMuc2Nyb2xsWDtcclxuICAgICAgICB5ID0gKGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZSkgLSBzcmMuc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlzcGxheUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmNoYXJDb2RlID0gY2hhckNvZGU7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS54ID0geDtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnkgPSB5O1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEuc2NhbGUgPSBzY2FsZTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5kYXRhID0gZ2x5cGguZGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBkaXNwbGF5Q2FsbGJhY2soY2FsbGJhY2tEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgeSA9IG91dHB1dC55O1xyXG4gICAgICAgICAgICBzY2FsZSA9IG91dHB1dC5zY2FsZTtcclxuICAgICAgICAgICAgcm90YXRpb24gPSBvdXRwdXQucm90YXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ICo9IHNjYWxlO1xyXG4gICAgICAgIHkgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJvdW5kUGl4ZWxzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IE1hdGgucm91bmQoeCk7XHJcbiAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvbik7XHJcblxyXG4gICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCBnbHlwaFgsIGdseXBoWSwgZ2x5cGhXLCBnbHlwaEgsIDAsIDAsIGdseXBoVywgZ2x5cGhIKTtcclxuXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dENhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Dynamic Bitmap Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Dynamic Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#dynamicBitmapText\r\n * @since 3.0.0\r\n *²\r\n * @param {Phaser.Types.GameObjects.BitmapText.BitmapTextConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('dynamicBitmapText', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var font = GetAdvancedValue(config, 'font', '');\r\n    var text = GetAdvancedValue(config, 'text', '');\r\n    var size = GetAdvancedValue(config, 'size', false);\r\n\r\n    var bitmapText = new BitmapText(this.scene, 0, 0, font, text, size);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, bitmapText, config);\r\n\r\n    return bitmapText;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDcmVhdG9yLmpzPzQzNWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDBHQUFxQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3Qzs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQXFEO0FBQ2hFLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkscUNBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0Q3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJpdG1hcFRleHQgPSByZXF1aXJlKCcuL0R5bmFtaWNCaXRtYXBUZXh0Jyk7XHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjZHluYW1pY0JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqwrJcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5CaXRtYXBUZXh0Q29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdkeW5hbWljQml0bWFwVGV4dCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBmb250ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmb250JywgJycpO1xyXG4gICAgdmFyIHRleHQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3RleHQnLCAnJyk7XHJcbiAgICB2YXIgc2l6ZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnc2l6ZScsIGZhbHNlKTtcclxuXHJcbiAgICB2YXIgYml0bWFwVGV4dCA9IG5ldyBCaXRtYXBUZXh0KHRoaXMuc2NlbmUsIDAsIDAsIGZvbnQsIHRleHQsIHNpemUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJpdG1hcFRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJpdG1hcFRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DynamicBitmapText = __webpack_require__(/*! ./DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Dynamic Bitmap Text Game Object and adds it to the Scene.\r\n * \r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * Dynamic Bitmap Text objects are different from Static Bitmap Text in that they invoke a callback for each\r\n * letter being rendered during the render pass. This callback allows you to manipulate the properties of\r\n * each letter being rendered, such as its position, scale or tint, allowing you to create interesting effects\r\n * like jiggling text, which can't be done with Static text. This means that Dynamic Text takes more processing\r\n * time, so only use them if you require the callback ability they have.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * Note: This method will only be available if the Dynamic Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#dynamicBitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} font - The key of the font to use from the BitmapFont cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size to set.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('dynamicBitmapText', function (x, y, font, text, size)\r\n{\r\n    return this.displayList.add(new DynamicBitmapText(this.scene, x, y, font, text, size));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRGYWN0b3J5LmpzPzcyNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDBHQUFxQjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQ0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0RmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIER5bmFtaWNCaXRtYXBUZXh0ID0gcmVxdWlyZSgnLi9EeW5hbWljQml0bWFwVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBCaXRtYXBUZXh0IG9iamVjdHMgd29yayBieSB0YWtpbmcgYSB0ZXh0dXJlIGZpbGUgYW5kIGFuIFhNTCBvciBKU09OIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHVyaW5nIHJlbmRlcmluZyBmb3IgZWFjaCBsZXR0ZXIgb2YgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGRpc3BsYXksIHByb3BvcnRpb25hbGx5IHNwYWNlZCBvdXQgYW5kIGFsaWduZWQgdG9cclxuICogbWF0Y2ggdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHluYW1pYyBCaXRtYXAgVGV4dCBvYmplY3RzIGFyZSBkaWZmZXJlbnQgZnJvbSBTdGF0aWMgQml0bWFwIFRleHQgaW4gdGhhdCB0aGV5IGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoXHJcbiAqIGxldHRlciBiZWluZyByZW5kZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLiBUaGlzIGNhbGxiYWNrIGFsbG93cyB5b3UgdG8gbWFuaXB1bGF0ZSB0aGUgcHJvcGVydGllcyBvZlxyXG4gKiBlYWNoIGxldHRlciBiZWluZyByZW5kZXJlZCwgc3VjaCBhcyBpdHMgcG9zaXRpb24sIHNjYWxlIG9yIHRpbnQsIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgaW50ZXJlc3RpbmcgZWZmZWN0c1xyXG4gKiBsaWtlIGppZ2dsaW5nIHRleHQsIHdoaWNoIGNhbid0IGJlIGRvbmUgd2l0aCBTdGF0aWMgdGV4dC4gVGhpcyBtZWFucyB0aGF0IER5bmFtaWMgVGV4dCB0YWtlcyBtb3JlIHByb2Nlc3NpbmdcclxuICogdGltZSwgc28gb25seSB1c2UgdGhlbSBpZiB5b3UgcmVxdWlyZSB0aGUgY2FsbGJhY2sgYWJpbGl0eSB0aGV5IGhhdmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZHluYW1pY0JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnQgLSBUaGUga2V5IG9mIHRoZSBmb250IHRvIHVzZSBmcm9tIHRoZSBCaXRtYXBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdGV4dF0gLSBUaGUgc3RyaW5nLCBvciBhcnJheSBvZiBzdHJpbmdzLCB0byBiZSBzZXQgYXMgdGhlIGNvbnRlbnQgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplXSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2R5bmFtaWNCaXRtYXBUZXh0JywgZnVuY3Rpb24gKHgsIHksIGZvbnQsIHRleHQsIHNpemUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgRHluYW1pY0JpdG1hcFRleHQodGhpcy5zY2VuZSwgeCwgeSwgZm9udCwgdGV4dCwgc2l6ZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./DynamicBitmapTextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./DynamicBitmapTextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRSZW5kZXIuanM/ODc5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLG9JQUFrQztBQUM1RDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsc0lBQW1DO0FBQzlEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9EeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js ***!
  \**************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.DynamicBitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DynamicBitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var text = src.text;\r\n    var textLength = text.length;\r\n\r\n    if (textLength === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var pipeline = this.pipeline;\r\n\r\n    renderer.setPipeline(pipeline, src);\r\n\r\n    var crop = (src.cropWidth > 0 || src.cropHeight > 0);\r\n\r\n    if (crop)\r\n    {\r\n        pipeline.flush();\r\n\r\n        renderer.pushScissor(\r\n            src.x,\r\n            src.y,\r\n            src.cropWidth * src.scaleX,\r\n            src.cropHeight * src.scaleY\r\n        );\r\n    }\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var spriteMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n    var fontMatrix = pipeline._tempMatrix4;\r\n\r\n    spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        spriteMatrix.e = src.x;\r\n        spriteMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n\r\n    var frame = src.frame;\r\n    var texture = frame.glTexture;\r\n    var textureX = frame.cutX;\r\n    var textureY = frame.cutY;\r\n    var textureWidth = texture.width;\r\n    var textureHeight = texture.height;\r\n\r\n    var tintEffect = (src._isTinted && src.tintFill);\r\n    var tintTL = Utils.getTintAppendFloatAlpha(src._tintTL, camera.alpha * src._alphaTL);\r\n    var tintTR = Utils.getTintAppendFloatAlpha(src._tintTR, camera.alpha * src._alphaTR);\r\n    var tintBL = Utils.getTintAppendFloatAlpha(src._tintBL, camera.alpha * src._alphaBL);\r\n    var tintBR = Utils.getTintAppendFloatAlpha(src._tintBR, camera.alpha * src._alphaBR);\r\n\r\n    pipeline.setTexture2D(texture, 0);\r\n\r\n    var xAdvance = 0;\r\n    var yAdvance = 0;\r\n    var charCode = 0;\r\n    var lastCharCode = 0;\r\n    var letterSpacing = src.letterSpacing;\r\n    var glyph;\r\n    var glyphX = 0;\r\n    var glyphY = 0;\r\n    var glyphW = 0;\r\n    var glyphH = 0;\r\n    var lastGlyph;\r\n    var scrollX = src.scrollX;\r\n    var scrollY = src.scrollY;\r\n\r\n    var fontData = src.fontData;\r\n    var chars = fontData.chars;\r\n    var lineHeight = fontData.lineHeight;\r\n    var scale = (src.fontSize / fontData.size);\r\n    var rotation = 0;\r\n\r\n    var align = src._align;\r\n    var currentLine = 0;\r\n    var lineOffsetX = 0;\r\n\r\n    //  Update the bounds - skipped internally if not dirty\r\n    src.getTextBounds(false);\r\n\r\n    var lineData = src._bounds.lines;\r\n\r\n    if (align === 1)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n    }\r\n    else if (align === 2)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n    }\r\n\r\n    var roundPixels = camera.roundPixels;\r\n    var displayCallback = src.displayCallback;\r\n    var callbackData = src.callbackData;\r\n\r\n    for (var i = 0; i < textLength; i++)\r\n    {\r\n        charCode = text.charCodeAt(i);\r\n\r\n        //  Carriage-return\r\n        if (charCode === 10)\r\n        {\r\n            currentLine++;\r\n\r\n            if (align === 1)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n            }\r\n            else if (align === 2)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n            }\r\n\r\n            xAdvance = 0;\r\n            yAdvance += lineHeight;\r\n            lastGlyph = null;\r\n\r\n            continue;\r\n        }\r\n\r\n        glyph = chars[charCode];\r\n\r\n        if (!glyph)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        glyphX = textureX + glyph.x;\r\n        glyphY = textureY + glyph.y;\r\n\r\n        glyphW = glyph.width;\r\n        glyphH = glyph.height;\r\n\r\n        var x = (glyph.xOffset + xAdvance) - scrollX;\r\n        var y = (glyph.yOffset + yAdvance) - scrollY;\r\n\r\n        if (lastGlyph !== null)\r\n        {\r\n            var kerningOffset = glyph.kerning[lastCharCode];\r\n            x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n        }\r\n\r\n        xAdvance += glyph.xAdvance + letterSpacing;\r\n        lastGlyph = glyph;\r\n        lastCharCode = charCode;\r\n\r\n        //  Nothing to render or a space? Then skip to the next glyph\r\n        if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        scale = (src.fontSize / src.fontData.size);\r\n        rotation = 0;\r\n\r\n        if (displayCallback)\r\n        {\r\n            callbackData.color = 0;\r\n            callbackData.tint.topLeft = tintTL;\r\n            callbackData.tint.topRight = tintTR;\r\n            callbackData.tint.bottomLeft = tintBL;\r\n            callbackData.tint.bottomRight = tintBR;\r\n            callbackData.index = i;\r\n            callbackData.charCode = charCode;\r\n            callbackData.x = x;\r\n            callbackData.y = y;\r\n            callbackData.scale = scale;\r\n            callbackData.rotation = rotation;\r\n            callbackData.data = glyph.data;\r\n\r\n            var output = displayCallback(callbackData);\r\n\r\n            x = output.x;\r\n            y = output.y;\r\n            scale = output.scale;\r\n            rotation = output.rotation;\r\n\r\n            if (output.color)\r\n            {\r\n                tintTL = output.color;\r\n                tintTR = output.color;\r\n                tintBL = output.color;\r\n                tintBR = output.color;\r\n            }\r\n            else\r\n            {\r\n                tintTL = output.tint.topLeft;\r\n                tintTR = output.tint.topRight;\r\n                tintBL = output.tint.bottomLeft;\r\n                tintBR = output.tint.bottomRight;\r\n            }\r\n\r\n            tintTL = Utils.getTintAppendFloatAlpha(tintTL, camera.alpha * src._alphaTL);\r\n            tintTR = Utils.getTintAppendFloatAlpha(tintTR, camera.alpha * src._alphaTR);\r\n            tintBL = Utils.getTintAppendFloatAlpha(tintBL, camera.alpha * src._alphaBL);\r\n            tintBR = Utils.getTintAppendFloatAlpha(tintBR, camera.alpha * src._alphaBR);\r\n        }\r\n\r\n        x *= scale;\r\n        y *= scale;\r\n\r\n        x -= src.displayOriginX;\r\n        y -= src.displayOriginY;\r\n\r\n        x += lineOffsetX;\r\n\r\n        fontMatrix.applyITRS(x, y, rotation, scale, scale);\r\n\r\n        calcMatrix.multiply(fontMatrix, spriteMatrix);\r\n\r\n        var u0 = glyphX / textureWidth;\r\n        var v0 = glyphY / textureHeight;\r\n        var u1 = (glyphX + glyphW) / textureWidth;\r\n        var v1 = (glyphY + glyphH) / textureHeight;\r\n\r\n        var xw = glyphW;\r\n        var yh = glyphH;\r\n\r\n        var tx0 = spriteMatrix.e;\r\n        var ty0 = spriteMatrix.f;\r\n\r\n        var tx1 = yh * spriteMatrix.c + spriteMatrix.e;\r\n        var ty1 = yh * spriteMatrix.d + spriteMatrix.f;\r\n\r\n        var tx2 = xw * spriteMatrix.a + yh * spriteMatrix.c + spriteMatrix.e;\r\n        var ty2 = xw * spriteMatrix.b + yh * spriteMatrix.d + spriteMatrix.f;\r\n\r\n        var tx3 = xw * spriteMatrix.a + spriteMatrix.e;\r\n        var ty3 = xw * spriteMatrix.b + spriteMatrix.f;\r\n\r\n        if (roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n    }\r\n\r\n    if (crop)\r\n    {\r\n        pipeline.flush();\r\n\r\n        renderer.popScissor();\r\n    }\r\n};\r\n\r\nmodule.exports = DynamicBitmapTextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzP2ViZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBEeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgdGV4dCA9IHNyYy50ZXh0O1xyXG4gICAgdmFyIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICBpZiAodGV4dExlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSwgc3JjKTtcclxuXHJcbiAgICB2YXIgY3JvcCA9IChzcmMuY3JvcFdpZHRoID4gMCB8fCBzcmMuY3JvcEhlaWdodCA+IDApO1xyXG5cclxuICAgIGlmIChjcm9wKVxyXG4gICAge1xyXG4gICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnB1c2hTY2lzc29yKFxyXG4gICAgICAgICAgICBzcmMueCxcclxuICAgICAgICAgICAgc3JjLnksXHJcbiAgICAgICAgICAgIHNyYy5jcm9wV2lkdGggKiBzcmMuc2NhbGVYLFxyXG4gICAgICAgICAgICBzcmMuY3JvcEhlaWdodCAqIHNyYy5zY2FsZVlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc3ByaXRlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcbiAgICB2YXIgZm9udE1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4NDtcclxuXHJcbiAgICBzcHJpdGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgPSBzcmMueTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmcmFtZSA9IHNyYy5mcmFtZTtcclxuICAgIHZhciB0ZXh0dXJlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG4gICAgdmFyIHRleHR1cmVYID0gZnJhbWUuY3V0WDtcclxuICAgIHZhciB0ZXh0dXJlWSA9IGZyYW1lLmN1dFk7XHJcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGV4dHVyZS53aWR0aDtcclxuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGV4dHVyZS5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHRpbnRFZmZlY3QgPSAoc3JjLl9pc1RpbnRlZCAmJiBzcmMudGludEZpbGwpO1xyXG4gICAgdmFyIHRpbnRUTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludFRMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVEwpO1xyXG4gICAgdmFyIHRpbnRUUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpO1xyXG4gICAgdmFyIHRpbnRCTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludEJMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQkwpO1xyXG4gICAgdmFyIHRpbnRCUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludEJSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQlIpO1xyXG5cclxuICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuXHJcbiAgICB2YXIgeEFkdmFuY2UgPSAwO1xyXG4gICAgdmFyIHlBZHZhbmNlID0gMDtcclxuICAgIHZhciBjaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGFzdENoYXJDb2RlID0gMDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLmxldHRlclNwYWNpbmc7XHJcbiAgICB2YXIgZ2x5cGg7XHJcbiAgICB2YXIgZ2x5cGhYID0gMDtcclxuICAgIHZhciBnbHlwaFkgPSAwO1xyXG4gICAgdmFyIGdseXBoVyA9IDA7XHJcbiAgICB2YXIgZ2x5cGhIID0gMDtcclxuICAgIHZhciBsYXN0R2x5cGg7XHJcbiAgICB2YXIgc2Nyb2xsWCA9IHNyYy5zY3JvbGxYO1xyXG4gICAgdmFyIHNjcm9sbFkgPSBzcmMuc2Nyb2xsWTtcclxuXHJcbiAgICB2YXIgZm9udERhdGEgPSBzcmMuZm9udERhdGE7XHJcbiAgICB2YXIgY2hhcnMgPSBmb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBzY2FsZSA9IChzcmMuZm9udFNpemUgLyBmb250RGF0YS5zaXplKTtcclxuICAgIHZhciByb3RhdGlvbiA9IDA7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcbiAgICB2YXIgZGlzcGxheUNhbGxiYWNrID0gc3JjLmRpc3BsYXlDYWxsYmFjaztcclxuICAgIHZhciBjYWxsYmFja0RhdGEgPSBzcmMuY2FsbGJhY2tEYXRhO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dExlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAvLyAgQ2FycmlhZ2UtcmV0dXJuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB4QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgICAgIHlBZHZhbmNlICs9IGxpbmVIZWlnaHQ7XHJcbiAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICBpZiAoIWdseXBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaFggPSB0ZXh0dXJlWCArIGdseXBoLng7XHJcbiAgICAgICAgZ2x5cGhZID0gdGV4dHVyZVkgKyBnbHlwaC55O1xyXG5cclxuICAgICAgICBnbHlwaFcgPSBnbHlwaC53aWR0aDtcclxuICAgICAgICBnbHlwaEggPSBnbHlwaC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciB4ID0gKGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZSkgLSBzY3JvbGxYO1xyXG4gICAgICAgIHZhciB5ID0gKGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZSkgLSBzY3JvbGxZO1xyXG5cclxuICAgICAgICBpZiAobGFzdEdseXBoICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGtlcm5pbmdPZmZzZXQgPSBnbHlwaC5rZXJuaW5nW2xhc3RDaGFyQ29kZV07XHJcbiAgICAgICAgICAgIHggKz0gKGtlcm5pbmdPZmZzZXQgIT09IHVuZGVmaW5lZCkgPyBrZXJuaW5nT2Zmc2V0IDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NhbGUgPSAoc3JjLmZvbnRTaXplIC8gc3JjLmZvbnREYXRhLnNpemUpO1xyXG4gICAgICAgIHJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGRpc3BsYXlDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5jb2xvciA9IDA7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS50aW50LnRvcExlZnQgPSB0aW50VEw7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS50aW50LnRvcFJpZ2h0ID0gdGludFRSO1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEudGludC5ib3R0b21MZWZ0ID0gdGludEJMO1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEudGludC5ib3R0b21SaWdodCA9IHRpbnRCUjtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmNoYXJDb2RlID0gY2hhckNvZGU7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS54ID0geDtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnkgPSB5O1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEuc2NhbGUgPSBzY2FsZTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5kYXRhID0gZ2x5cGguZGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBkaXNwbGF5Q2FsbGJhY2soY2FsbGJhY2tEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgeSA9IG91dHB1dC55O1xyXG4gICAgICAgICAgICBzY2FsZSA9IG91dHB1dC5zY2FsZTtcclxuICAgICAgICAgICAgcm90YXRpb24gPSBvdXRwdXQucm90YXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAob3V0cHV0LmNvbG9yKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aW50VEwgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50VFIgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50QkwgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50QlIgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aW50VEwgPSBvdXRwdXQudGludC50b3BMZWZ0O1xyXG4gICAgICAgICAgICAgICAgdGludFRSID0gb3V0cHV0LnRpbnQudG9wUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICB0aW50QkwgPSBvdXRwdXQudGludC5ib3R0b21MZWZ0O1xyXG4gICAgICAgICAgICAgICAgdGludEJSID0gb3V0cHV0LnRpbnQuYm90dG9tUmlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRpbnRUTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHRpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKTtcclxuICAgICAgICAgICAgdGludFRSID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGEodGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpO1xyXG4gICAgICAgICAgICB0aW50QkwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYSh0aW50QkwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCTCk7XHJcbiAgICAgICAgICAgIHRpbnRCUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHRpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggKj0gc2NhbGU7XHJcbiAgICAgICAgeSAqPSBzY2FsZTtcclxuXHJcbiAgICAgICAgeCAtPSBzcmMuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSAtPSBzcmMuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIGZvbnRNYXRyaXguYXBwbHlJVFJTKHgsIHksIHJvdGF0aW9uLCBzY2FsZSwgc2NhbGUpO1xyXG5cclxuICAgICAgICBjYWxjTWF0cml4Lm11bHRpcGx5KGZvbnRNYXRyaXgsIHNwcml0ZU1hdHJpeCk7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGdseXBoWCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICB2YXIgdjAgPSBnbHlwaFkgLyB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgIHZhciB1MSA9IChnbHlwaFggKyBnbHlwaFcpIC8gdGV4dHVyZVdpZHRoO1xyXG4gICAgICAgIHZhciB2MSA9IChnbHlwaFkgKyBnbHlwaEgpIC8gdGV4dHVyZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHh3ID0gZ2x5cGhXO1xyXG4gICAgICAgIHZhciB5aCA9IGdseXBoSDtcclxuXHJcbiAgICAgICAgdmFyIHR4MCA9IHNwcml0ZU1hdHJpeC5lO1xyXG4gICAgICAgIHZhciB0eTAgPSBzcHJpdGVNYXRyaXguZjtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IHloICogc3ByaXRlTWF0cml4LmMgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkxID0geWggKiBzcHJpdGVNYXRyaXguZCArIHNwcml0ZU1hdHJpeC5mO1xyXG5cclxuICAgICAgICB2YXIgdHgyID0geHcgKiBzcHJpdGVNYXRyaXguYSArIHloICogc3ByaXRlTWF0cml4LmMgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkyID0geHcgKiBzcHJpdGVNYXRyaXguYiArIHloICogc3ByaXRlTWF0cml4LmQgKyBzcHJpdGVNYXRyaXguZjtcclxuXHJcbiAgICAgICAgdmFyIHR4MyA9IHh3ICogc3ByaXRlTWF0cml4LmEgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkzID0geHcgKiBzcHJpdGVNYXRyaXguYiArIHNwcml0ZU1hdHJpeC5mO1xyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgdTAsIHYwLCB1MSwgdjEsIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCwgdGV4dHVyZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNyb3ApXHJcbiAgICB7XHJcbiAgICAgICAgcGlwZWxpbmUuZmx1c2goKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucG9wU2Npc3NvcigpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetBitmapTextSize = __webpack_require__(/*! ../GetBitmapTextSize */ \"./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js\");\r\nvar ParseFromAtlas = __webpack_require__(/*! ../ParseFromAtlas */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js\");\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ../ParseXMLBitmapFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\nvar Render = __webpack_require__(/*! ./BitmapTextRender */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): {@link http://www.angelcode.com/products/bmfont/|http://www.angelcode.com/products/bmfont/}\r\n * Glyph Designer (OS X, commercial): {@link http://www.71squared.com/en/glyphdesigner|http://www.71squared.com/en/glyphdesigner}\r\n * Littera (Web-based, free): {@link http://kvazars.com/littera/|http://kvazars.com/littera/}\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: {@link http://codebeautify.org/xmltojson|http://codebeautify.org/xmltojson}\r\n *\r\n * @class BitmapText\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} x - The x coordinate of this Game Object in world space.\r\n * @param {number} y - The y coordinate of this Game Object in world space.\r\n * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size of this Bitmap Text.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n */\r\nvar BitmapText = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Texture,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function BitmapText (scene, x, y, font, text, size, align)\r\n    {\r\n        if (text === undefined) { text = ''; }\r\n        if (align === undefined) { align = 0; }\r\n\r\n        GameObject.call(this, scene, 'BitmapText');\r\n\r\n        /**\r\n         * The key of the Bitmap Font used by this Bitmap Text.\r\n         * To change the font after creation please use `setFont`.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#font\r\n         * @type {string}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.font = font;\r\n\r\n        var entry = this.scene.sys.cache.bitmapFont.get(font);\r\n\r\n        /**\r\n         * The data of the Bitmap Font used by this Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#fontData\r\n         * @type {Phaser.Types.GameObjects.BitmapText.BitmapFontData}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.fontData = entry.data;\r\n\r\n        /**\r\n         * The text that this Bitmap Text object displays.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_text\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._text = '';\r\n\r\n        /**\r\n         * The font size of this Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_fontSize\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._fontSize = size || this.fontData.size;\r\n\r\n        /**\r\n         * Adds / Removes spacing between characters.\r\n         *\r\n         * Can be a negative or positive number.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_letterSpacing\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._letterSpacing = 0;\r\n\r\n        /**\r\n         * Controls the alignment of each line of text in this BitmapText object.\r\n         * Only has any effect when this BitmapText contains multiple lines of text, split with carriage-returns.\r\n         * Has no effect with single-lines of text.\r\n         *\r\n         * See the methods `setLeftAlign`, `setCenterAlign` and `setRightAlign`.\r\n         *\r\n         * 0 = Left aligned (default)\r\n         * 1 = Middle aligned\r\n         * 2 = Right aligned\r\n         *\r\n         * The alignment position is based on the longest line of text.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_align\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._align = align;\r\n\r\n        /**\r\n         * An object that describes the size of this Bitmap Text.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_bounds\r\n         * @type {Phaser.Types.GameObjects.BitmapText.BitmapTextSize}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._bounds = GetBitmapTextSize();\r\n\r\n        /**\r\n         * An internal dirty flag for bounds calculation.\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#_dirty\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._dirty = true;\r\n\r\n        /**\r\n         * Internal cache var holding the maxWidth.\r\n         * \r\n         * @name Phaser.GameObjects.BitmapText#_maxWidth\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.21.0\r\n         */\r\n        this._maxWidth = 0;\r\n\r\n        /**\r\n         * The character code used to detect for word wrapping.\r\n         * Defaults to 32 (a space character).\r\n         *\r\n         * @name Phaser.GameObjects.BitmapText#wordWrapCharCode\r\n         * @type {number}\r\n         * @since 3.21.0\r\n         */\r\n        this.wordWrapCharCode = 32;\r\n\r\n        this.setTexture(entry.texture, entry.frame);\r\n        this.setPosition(x, y);\r\n        this.setOrigin(0, 0);\r\n        this.initPipeline();\r\n\r\n        this.setText(text);\r\n    },\r\n\r\n    /**\r\n     * Set the lines of text in this BitmapText to be left-aligned.\r\n     * This only has any effect if this BitmapText contains more than one line of text.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setLeftAlign\r\n     * @since 3.11.0\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setLeftAlign: function ()\r\n    {\r\n        this._align = BitmapText.ALIGN_LEFT;\r\n\r\n        this._dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the lines of text in this BitmapText to be center-aligned.\r\n     * This only has any effect if this BitmapText contains more than one line of text.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setCenterAlign\r\n     * @since 3.11.0\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setCenterAlign: function ()\r\n    {\r\n        this._align = BitmapText.ALIGN_CENTER;\r\n\r\n        this._dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the lines of text in this BitmapText to be right-aligned.\r\n     * This only has any effect if this BitmapText contains more than one line of text.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setRightAlign\r\n     * @since 3.11.0\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setRightAlign: function ()\r\n    {\r\n        this._align = BitmapText.ALIGN_RIGHT;\r\n\r\n        this._dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the font size of this Bitmap Text.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setFontSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} size - The font size to set.\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setFontSize: function (size)\r\n    {\r\n        this._fontSize = size;\r\n\r\n        this._dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the letter spacing between each character of this Bitmap Text.\r\n     * Can be a positive value to increase the space, or negative to reduce it.\r\n     * Spacing is applied after the kerning values have been set.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setLetterSpacing\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} [spacing=0] - The amount of horizontal space to add between each character.\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setLetterSpacing: function (spacing)\r\n    {\r\n        if (spacing === undefined) { spacing = 0; }\r\n\r\n        this._letterSpacing = spacing;\r\n\r\n        this._dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the textual content of this BitmapText.\r\n     *\r\n     * An array of strings will be converted into multi-line text. Use the align methods to change multi-line alignment.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setText\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} value - The string, or array of strings, to be set as the content of this BitmapText.\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setText: function (value)\r\n    {\r\n        if (!value && value !== 0)\r\n        {\r\n            value = '';\r\n        }\r\n\r\n        if (Array.isArray(value))\r\n        {\r\n            value = value.join('\\n');\r\n        }\r\n\r\n        if (value !== this.text)\r\n        {\r\n            this._text = value.toString();\r\n\r\n            this._dirty = true;\r\n\r\n            this.updateDisplayOrigin();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the bounds of this Bitmap Text.\r\n     *\r\n     * An object is returned that contains the position, width and height of the Bitmap Text in local and global\r\n     * contexts.\r\n     *\r\n     * Local size is based on just the font size and a [0, 0] position.\r\n     *\r\n     * Global size takes into account the Game Object's scale, world position and display origin.\r\n     *\r\n     * Also in the object is data regarding the length of each line, should this be a multi-line BitmapText.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#getTextBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [round] - Whether to round the results to the nearest integer.\r\n     *\r\n     * @return {Phaser.Types.GameObjects.BitmapText.BitmapTextSize} An object that describes the size of this Bitmap Text.\r\n     */\r\n    getTextBounds: function (round)\r\n    {\r\n        //  local = The BitmapText based on fontSize and 0x0 coords\r\n        //  global = The BitmapText, taking into account scale and world position\r\n        //  lines = The BitmapText line data\r\n\r\n        var bounds = this._bounds;\r\n\r\n        if (this._dirty || this.scaleX !== bounds.scaleX || this.scaleY !== bounds.scaleY)\r\n        {\r\n            GetBitmapTextSize(this, round, bounds);\r\n\r\n            this._dirty = false;\r\n\r\n            this.updateDisplayOrigin();\r\n        }\r\n\r\n        return bounds;\r\n    },\r\n\r\n    /**\r\n     * Changes the font this BitmapText is using to render.\r\n     *\r\n     * The new texture is loaded and applied to the BitmapText. The existing test, size and alignment are preserved,\r\n     * unless overridden via the arguments.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setFont\r\n     * @since 3.11.0\r\n     *\r\n     * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n     * @param {number} [size] - The font size of this Bitmap Text. If not specified the current size will be used.\r\n     * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object. If not specified the current alignment will be used.\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setFont: function (key, size, align)\r\n    {\r\n        if (size === undefined) { size = this._fontSize; }\r\n        if (align === undefined) { align = this._align; }\r\n\r\n        if (key !== this.font)\r\n        {\r\n            var entry = this.scene.sys.cache.bitmapFont.get(key);\r\n\r\n            if (entry)\r\n            {\r\n                this.font = key;\r\n                this.fontData = entry.data;\r\n                this._fontSize = size;\r\n                this._align = align;\r\n\r\n                this.setTexture(entry.texture, entry.frame);\r\n\r\n                GetBitmapTextSize(this, false, this._bounds);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the maximum display width of this BitmapText in pixels.\r\n     *\r\n     * If `BitmapText.text` is longer than `maxWidth` then the lines will be automatically wrapped\r\n     * based on the previous whitespace character found in the line.\r\n     *\r\n     * If no whitespace was found then no wrapping will take place and consequently the `maxWidth` value will not be honored.\r\n     *\r\n     * Disable maxWidth by setting the value to 0.\r\n     * \r\n     * You can set the whitespace character to be searched for by setting the `wordWrapCharCode` parameter or property.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#setMaxWidth\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The maximum display width of this BitmapText in pixels. Set to zero to disable.\r\n     * @param {number} [wordWrapCharCode] - The character code to check for when word wrapping. Defaults to 32 (the space character).\r\n     *\r\n     * @return {this} This BitmapText Object.\r\n     */\r\n    setMaxWidth: function (value, wordWrapCharCode)\r\n    {\r\n        this._maxWidth = value;\r\n\r\n        this._dirty = true;\r\n\r\n        if (wordWrapCharCode !== undefined)\r\n        {\r\n            this.wordWrapCharCode = wordWrapCharCode;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Controls the alignment of each line of text in this BitmapText object.\r\n     *\r\n     * Only has any effect when this BitmapText contains multiple lines of text, split with carriage-returns.\r\n     * Has no effect with single-lines of text.\r\n     *\r\n     * See the methods `setLeftAlign`, `setCenterAlign` and `setRightAlign`.\r\n     *\r\n     * 0 = Left aligned (default)\r\n     * 1 = Middle aligned\r\n     * 2 = Right aligned\r\n     *\r\n     * The alignment position is based on the longest line of text.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#align\r\n     * @type {integer}\r\n     * @since 3.11.0\r\n     */\r\n    align: {\r\n\r\n        set: function (value)\r\n        {\r\n            this._align = value;\r\n            this._dirty = true;\r\n        },\r\n\r\n        get: function ()\r\n        {\r\n            return this._align;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The text that this Bitmap Text object displays.\r\n     *\r\n     * You can also use the method `setText` if you want a chainable way to change the text content.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#text\r\n     * @type {string}\r\n     * @since 3.0.0\r\n     */\r\n    text: {\r\n\r\n        set: function (value)\r\n        {\r\n            this.setText(value);\r\n        },\r\n\r\n        get: function ()\r\n        {\r\n            return this._text;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The font size of this Bitmap Text.\r\n     *\r\n     * You can also use the method `setFontSize` if you want a chainable way to change the font size.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#fontSize\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    fontSize: {\r\n\r\n        set: function (value)\r\n        {\r\n            this._fontSize = value;\r\n            this._dirty = true;\r\n        },\r\n\r\n        get: function ()\r\n        {\r\n            return this._fontSize;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Adds / Removes spacing between characters.\r\n     *\r\n     * Can be a negative or positive number.\r\n     *\r\n     * You can also use the method `setLetterSpacing` if you want a chainable way to change the letter spacing.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#letterSpacing\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    letterSpacing: {\r\n\r\n        set: function (value)\r\n        {\r\n            this._letterSpacing = value;\r\n            this._dirty = true;\r\n        },\r\n\r\n        get: function ()\r\n        {\r\n            return this._letterSpacing;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The maximum display width of this BitmapText in pixels.\r\n     *\r\n     * If BitmapText.text is longer than maxWidth then the lines will be automatically wrapped\r\n     * based on the last whitespace character found in the line.\r\n     *\r\n     * If no whitespace was found then no wrapping will take place and consequently the maxWidth value will not be honored.\r\n     *\r\n     * Disable maxWidth by setting the value to 0.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#maxWidth\r\n     * @type {number}\r\n     * @since 3.21.0\r\n     */\r\n    maxWidth: {\r\n\r\n        set: function (value)\r\n        {\r\n            this._maxWidth = value;\r\n            this._dirty = true;\r\n        },\r\n\r\n        get: function ()\r\n        {\r\n            return this._maxWidth;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The width of this Bitmap Text.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#width\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    width: {\r\n\r\n        get: function ()\r\n        {\r\n            this.getTextBounds(false);\r\n\r\n            return this._bounds.global.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The height of this bitmap text.\r\n     *\r\n     * @name Phaser.GameObjects.BitmapText#height\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    height: {\r\n\r\n        get: function ()\r\n        {\r\n            this.getTextBounds(false);\r\n\r\n            return this._bounds.global.height;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Build a JSON representation of this Bitmap Text.\r\n     *\r\n     * @method Phaser.GameObjects.BitmapText#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.GameObjects.BitmapText.JSONBitmapText} A JSON representation of this Bitmap Text.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var out = Components.ToJSON(this);\r\n\r\n        //  Extra data is added here\r\n\r\n        var data = {\r\n            font: this.font,\r\n            text: this.text,\r\n            fontSize: this.fontSize,\r\n            letterSpacing: this.letterSpacing,\r\n            align: this.align\r\n        };\r\n\r\n        out.data = data;\r\n\r\n        return out;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Left align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_LEFT\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_LEFT = 0;\r\n\r\n/**\r\n * Center align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_CENTER\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_CENTER = 1;\r\n\r\n/**\r\n * Right align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_RIGHT\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_RIGHT = 2;\r\n\r\n/**\r\n * Parse an XML Bitmap Font from an Atlas.\r\n *\r\n * Adds the parsed Bitmap Font data to the cache with the `fontName` key.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ParseFromAtlas\r\n * @type {function}\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to parse the Bitmap Font for.\r\n * @param {string} fontName - The key of the font to add to the Bitmap Font cache.\r\n * @param {string} textureKey - The key of the BitmapFont's texture.\r\n * @param {string} frameKey - The key of the BitmapFont texture's frame.\r\n * @param {string} xmlKey - The key of the XML data of the font to parse.\r\n * @param {integer} [xSpacing] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing] - The y-axis spacing to add to the line height.\r\n *\r\n * @return {boolean} Whether the parsing was successful or not.\r\n */\r\nBitmapText.ParseFromAtlas = ParseFromAtlas;\r\n\r\n/**\r\n * Parse an XML font to Bitmap Font data for the Bitmap Font cache.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ParseXMLBitmapFont\r\n * @type {function}\r\n * @since 3.17.0\r\n *\r\n * @param {XMLDocument} xml - The XML Document to parse the font from.\r\n * @param {integer} [xSpacing=0] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing=0] - The y-axis spacing to add to the line height.\r\n * @param {Phaser.Textures.Frame} [frame] - The texture frame to take into account while parsing.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapFontData} The parsed Bitmap Font data.\r\n */\r\nBitmapText.ParseXMLBitmapFont = ParseXMLBitmapFont;\r\n\r\nmodule.exports = BitmapText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0LmpzPzM3NGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLDZFQUFrQjtBQUMzQyx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBc0I7QUFDdEQscUJBQXFCLG1CQUFPLENBQUMsNkZBQW1CO0FBQ2hELHlCQUF5QixtQkFBTyxDQUFDLHFHQUF1QjtBQUN4RCxhQUFhLG1CQUFPLENBQUMsdUdBQW9COztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsdUNBQXVDO0FBQ3ZDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsbUhBQW1IO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QyxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsYUFBYTs7QUFFakQ7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsbURBQW1EO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdUJBQXVCO0FBQ3hELGtDQUFrQyxxQkFBcUI7O0FBRXZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1EQUFtRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLG1EQUFtRDtBQUMvRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0Qml0bWFwVGV4dFNpemUgPSByZXF1aXJlKCcuLi9HZXRCaXRtYXBUZXh0U2l6ZScpO1xyXG52YXIgUGFyc2VGcm9tQXRsYXMgPSByZXF1aXJlKCcuLi9QYXJzZUZyb21BdGxhcycpO1xyXG52YXIgUGFyc2VYTUxCaXRtYXBGb250ID0gcmVxdWlyZSgnLi4vUGFyc2VYTUxCaXRtYXBGb250Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyB3b3JrIGJ5IHRha2luZyBhIHRleHR1cmUgZmlsZSBhbmQgYW4gWE1MIG9yIEpTT04gZmlsZSB0aGF0IGRlc2NyaWJlcyB0aGUgZm9udCBzdHJ1Y3R1cmUuXHJcbiAqIFxyXG4gKiBEdXJpbmcgcmVuZGVyaW5nIGZvciBlYWNoIGxldHRlciBvZiB0aGUgdGV4dCBpcyByZW5kZXJlZCB0byB0aGUgZGlzcGxheSwgcHJvcG9ydGlvbmFsbHkgc3BhY2VkIG91dCBhbmQgYWxpZ25lZCB0b1xyXG4gKiBtYXRjaCB0aGUgZm9udCBzdHJ1Y3R1cmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKToge0BsaW5rIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvfGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvfVxyXG4gKiBHbHlwaCBEZXNpZ25lciAoT1MgWCwgY29tbWVyY2lhbCk6IHtAbGluayBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lcnxodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lcn1cclxuICogTGl0dGVyYSAoV2ViLWJhc2VkLCBmcmVlKToge0BsaW5rIGh0dHA6Ly9rdmF6YXJzLmNvbS9saXR0ZXJhL3xodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS99XHJcbiAqXHJcbiAqIEZvciBtb3N0IHVzZSBjYXNlcyBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWE1MLiBJZiB5b3Ugd2lzaCB0byB1c2UgSlNPTiwgdGhlIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSByZXN1bHQgb2ZcclxuICogY29udmVydGluZyBhIHZhbGlkIFhNTCBmaWxlIHRocm91Z2ggdGhlIHBvcHVsYXIgWDJKUyBsaWJyYXJ5LiBBbiBvbmxpbmUgdG9vbCBmb3IgY29udmVyc2lvbiBjYW4gYmUgZm91bmQgaGVyZToge0BsaW5rIGh0dHA6Ly9jb2RlYmVhdXRpZnkub3JnL3htbHRvanNvbnxodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb259XHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBJdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGFueSBnaXZlbiB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFt0ZXh0XSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKi9cclxudmFyIEJpdG1hcFRleHQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlBpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJpdG1hcFRleHQgKHNjZW5lLCB4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbilcclxuICAgIHtcclxuICAgICAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7IHRleHQgPSAnJzsgfVxyXG4gICAgICAgIGlmIChhbGlnbiA9PT0gdW5kZWZpbmVkKSB7IGFsaWduID0gMDsgfVxyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdCaXRtYXBUZXh0Jyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIEJpdG1hcCBGb250IHVzZWQgYnkgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKiBUbyBjaGFuZ2UgdGhlIGZvbnQgYWZ0ZXIgY3JlYXRpb24gcGxlYXNlIHVzZSBgc2V0Rm9udGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNmb250XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnQgPSBmb250O1xyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS5iaXRtYXBGb250LmdldChmb250KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRhdGEgb2YgdGhlIEJpdG1hcCBGb250IHVzZWQgYnkgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2ZvbnREYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkJpdG1hcEZvbnREYXRhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9udERhdGEgPSBlbnRyeS5kYXRhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCB0aGF0IHRoaXMgQml0bWFwIFRleHQgb2JqZWN0IGRpc3BsYXlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjX3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGV4dCA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZm9udCBzaXplIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfZm9udFNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZm9udFNpemUgPSBzaXplIHx8IHRoaXMuZm9udERhdGEuc2l6ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWRkcyAvIFJlbW92ZXMgc3BhY2luZyBiZXR3ZWVuIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDYW4gYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBudW1iZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfbGV0dGVyU3BhY2luZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9sZXR0ZXJTcGFjaW5nID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgdGhlIGFsaWdubWVudCBvZiBlYWNoIGxpbmUgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqIE9ubHkgaGFzIGFueSBlZmZlY3Qgd2hlbiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCwgc3BsaXQgd2l0aCBjYXJyaWFnZS1yZXR1cm5zLlxyXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3Qgd2l0aCBzaW5nbGUtbGluZXMgb2YgdGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSB0aGUgbWV0aG9kcyBgc2V0TGVmdEFsaWduYCwgYHNldENlbnRlckFsaWduYCBhbmQgYHNldFJpZ2h0QWxpZ25gLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogMCA9IExlZnQgYWxpZ25lZCAoZGVmYXVsdClcclxuICAgICAgICAgKiAxID0gTWlkZGxlIGFsaWduZWRcclxuICAgICAgICAgKiAyID0gUmlnaHQgYWxpZ25lZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGFsaWdubWVudCBwb3NpdGlvbiBpcyBiYXNlZCBvbiB0aGUgbG9uZ2VzdCBsaW5lIG9mIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfYWxpZ25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9hbGlnbiA9IGFsaWduO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I19ib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwVGV4dFNpemV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9ib3VuZHMgPSBHZXRCaXRtYXBUZXh0U2l6ZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBkaXJ0eSBmbGFnIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfZGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGNhY2hlIHZhciBob2xkaW5nIHRoZSBtYXhXaWR0aC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfbWF4V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNoYXJhY3RlciBjb2RlIHVzZWQgdG8gZGV0ZWN0IGZvciB3b3JkIHdyYXBwaW5nLlxyXG4gICAgICAgICAqIERlZmF1bHRzIHRvIDMyIChhIHNwYWNlIGNoYXJhY3RlcikuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCN3b3JkV3JhcENoYXJDb2RlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JkV3JhcENoYXJDb2RlID0gMzI7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZShlbnRyeS50ZXh0dXJlLCBlbnRyeS5mcmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigwLCAwKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHQodGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBsaW5lcyBvZiB0ZXh0IGluIHRoaXMgQml0bWFwVGV4dCB0byBiZSBsZWZ0LWFsaWduZWQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYgdGhpcyBCaXRtYXBUZXh0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0TGVmdEFsaWduXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TGVmdEFsaWduOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2FsaWduID0gQml0bWFwVGV4dC5BTElHTl9MRUZUO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbGluZXMgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgdG8gYmUgY2VudGVyLWFsaWduZWQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYgdGhpcyBCaXRtYXBUZXh0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0Q2VudGVyQWxpZ25cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEJpdG1hcFRleHQgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXJBbGlnbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9hbGlnbiA9IEJpdG1hcFRleHQuQUxJR05fQ0VOVEVSO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbGluZXMgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgdG8gYmUgcmlnaHQtYWxpZ25lZC5cclxuICAgICAqIFRoaXMgb25seSBoYXMgYW55IGVmZmVjdCBpZiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNzZXRSaWdodEFsaWduXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmlnaHRBbGlnbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9hbGlnbiA9IEJpdG1hcFRleHQuQUxJR05fUklHSFQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldEZvbnRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQml0bWFwVGV4dCBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTaXplOiBmdW5jdGlvbiAoc2l6ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9mb250U2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgYmV0d2VlbiBlYWNoIGNoYXJhY3RlciBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICogQ2FuIGJlIGEgcG9zaXRpdmUgdmFsdWUgdG8gaW5jcmVhc2UgdGhlIHNwYWNlLCBvciBuZWdhdGl2ZSB0byByZWR1Y2UgaXQuXHJcbiAgICAgKiBTcGFjaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGtlcm5pbmcgdmFsdWVzIGhhdmUgYmVlbiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNzZXRMZXR0ZXJTcGFjaW5nXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwYWNpbmc9MF0gLSBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgc3BhY2UgdG8gYWRkIGJldHdlZW4gZWFjaCBjaGFyYWN0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TGV0dGVyU3BhY2luZzogZnVuY3Rpb24gKHNwYWNpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwYWNpbmcgPT09IHVuZGVmaW5lZCkgeyBzcGFjaW5nID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLl9sZXR0ZXJTcGFjaW5nID0gc3BhY2luZztcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRleHR1YWwgY29udGVudCBvZiB0aGlzIEJpdG1hcFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIG11bHRpLWxpbmUgdGV4dC4gVXNlIHRoZSBhbGlnbiBtZXRob2RzIHRvIGNoYW5nZSBtdWx0aS1saW5lIGFsaWdubWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldFRleHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHZhbHVlIC0gVGhlIHN0cmluZywgb3IgYXJyYXkgb2Ygc3RyaW5ncywgdG8gYmUgc2V0IGFzIHRoZSBjb250ZW50IG9mIHRoaXMgQml0bWFwVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEJpdG1hcFRleHQgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnRleHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBib3VuZHMgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBvYmplY3QgaXMgcmV0dXJuZWQgdGhhdCBjb250YWlucyB0aGUgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIEJpdG1hcCBUZXh0IGluIGxvY2FsIGFuZCBnbG9iYWxcclxuICAgICAqIGNvbnRleHRzLlxyXG4gICAgICpcclxuICAgICAqIExvY2FsIHNpemUgaXMgYmFzZWQgb24ganVzdCB0aGUgZm9udCBzaXplIGFuZCBhIFswLCAwXSBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBHbG9iYWwgc2l6ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUsIHdvcmxkIHBvc2l0aW9uIGFuZCBkaXNwbGF5IG9yaWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBBbHNvIGluIHRoZSBvYmplY3QgaXMgZGF0YSByZWdhcmRpbmcgdGhlIGxlbmd0aCBvZiBlYWNoIGxpbmUsIHNob3VsZCB0aGlzIGJlIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjZ2V0VGV4dEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcm91bmRdIC0gV2hldGhlciB0byByb3VuZCB0aGUgcmVzdWx0cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkJpdG1hcFRleHRTaXplfSBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dEJvdW5kczogZnVuY3Rpb24gKHJvdW5kKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBsb2NhbCA9IFRoZSBCaXRtYXBUZXh0IGJhc2VkIG9uIGZvbnRTaXplIGFuZCAweDAgY29vcmRzXHJcbiAgICAgICAgLy8gIGdsb2JhbCA9IFRoZSBCaXRtYXBUZXh0LCB0YWtpbmcgaW50byBhY2NvdW50IHNjYWxlIGFuZCB3b3JsZCBwb3NpdGlvblxyXG4gICAgICAgIC8vICBsaW5lcyA9IFRoZSBCaXRtYXBUZXh0IGxpbmUgZGF0YVxyXG5cclxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGlydHkgfHwgdGhpcy5zY2FsZVggIT09IGJvdW5kcy5zY2FsZVggfHwgdGhpcy5zY2FsZVkgIT09IGJvdW5kcy5zY2FsZVkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBHZXRCaXRtYXBUZXh0U2l6ZSh0aGlzLCByb3VuZCwgYm91bmRzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBib3VuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgZm9udCB0aGlzIEJpdG1hcFRleHQgaXMgdXNpbmcgdG8gcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBuZXcgdGV4dHVyZSBpcyBsb2FkZWQgYW5kIGFwcGxpZWQgdG8gdGhlIEJpdG1hcFRleHQuIFRoZSBleGlzdGluZyB0ZXN0LCBzaXplIGFuZCBhbGlnbm1lbnQgYXJlIHByZXNlcnZlZCxcclxuICAgICAqIHVubGVzcyBvdmVycmlkZGVuIHZpYSB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0Rm9udFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LiBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHNpemUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYWxpZ249MF0gLSBUaGUgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0IG9iamVjdC4gSWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudCBhbGlnbm1lbnQgd2lsbCBiZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQml0bWFwVGV4dCBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnQ6IGZ1bmN0aW9uIChrZXksIHNpemUsIGFsaWduKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQpIHsgc2l6ZSA9IHRoaXMuX2ZvbnRTaXplOyB9XHJcbiAgICAgICAgaWYgKGFsaWduID09PSB1bmRlZmluZWQpIHsgYWxpZ24gPSB0aGlzLl9hbGlnbjsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5ICE9PSB0aGlzLmZvbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS5iaXRtYXBGb250LmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnREYXRhID0gZW50cnkuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnRTaXplID0gc2l6ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FsaWduID0gYWxpZ247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlKGVudHJ5LnRleHR1cmUsIGVudHJ5LmZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBHZXRCaXRtYXBUZXh0U2l6ZSh0aGlzLCBmYWxzZSwgdGhpcy5fYm91bmRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWF4aW11bSBkaXNwbGF5IHdpZHRoIG9mIHRoaXMgQml0bWFwVGV4dCBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYEJpdG1hcFRleHQudGV4dGAgaXMgbG9uZ2VyIHRoYW4gYG1heFdpZHRoYCB0aGVuIHRoZSBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgd3JhcHBlZFxyXG4gICAgICogYmFzZWQgb24gdGhlIHByZXZpb3VzIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGZvdW5kIGluIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIHdoaXRlc3BhY2Ugd2FzIGZvdW5kIHRoZW4gbm8gd3JhcHBpbmcgd2lsbCB0YWtlIHBsYWNlIGFuZCBjb25zZXF1ZW50bHkgdGhlIGBtYXhXaWR0aGAgdmFsdWUgd2lsbCBub3QgYmUgaG9ub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBEaXNhYmxlIG1heFdpZHRoIGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvIDAuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciB0byBiZSBzZWFyY2hlZCBmb3IgYnkgc2V0dGluZyB0aGUgYHdvcmRXcmFwQ2hhckNvZGVgIHBhcmFtZXRlciBvciBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldE1heFdpZHRoXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG1heGltdW0gZGlzcGxheSB3aWR0aCBvZiB0aGlzIEJpdG1hcFRleHQgaW4gcGl4ZWxzLiBTZXQgdG8gemVybyB0byBkaXNhYmxlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3b3JkV3JhcENoYXJDb2RlXSAtIFRoZSBjaGFyYWN0ZXIgY29kZSB0byBjaGVjayBmb3Igd2hlbiB3b3JkIHdyYXBwaW5nLiBEZWZhdWx0cyB0byAzMiAodGhlIHNwYWNlIGNoYXJhY3RlcikuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TWF4V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSwgd29yZFdyYXBDaGFyQ29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9tYXhXaWR0aCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh3b3JkV3JhcENoYXJDb2RlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmRXcmFwQ2hhckNvZGUgPSB3b3JkV3JhcENoYXJDb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgdGhlIGFsaWdubWVudCBvZiBlYWNoIGxpbmUgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIE9ubHkgaGFzIGFueSBlZmZlY3Qgd2hlbiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCwgc3BsaXQgd2l0aCBjYXJyaWFnZS1yZXR1cm5zLlxyXG4gICAgICogSGFzIG5vIGVmZmVjdCB3aXRoIHNpbmdsZS1saW5lcyBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIFNlZSB0aGUgbWV0aG9kcyBgc2V0TGVmdEFsaWduYCwgYHNldENlbnRlckFsaWduYCBhbmQgYHNldFJpZ2h0QWxpZ25gLlxyXG4gICAgICpcclxuICAgICAqIDAgPSBMZWZ0IGFsaWduZWQgKGRlZmF1bHQpXHJcbiAgICAgKiAxID0gTWlkZGxlIGFsaWduZWRcclxuICAgICAqIDIgPSBSaWdodCBhbGlnbmVkXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGFsaWdubWVudCBwb3NpdGlvbiBpcyBiYXNlZCBvbiB0aGUgbG9uZ2VzdCBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjYWxpZ25cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBhbGlnbjoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsaWduID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxpZ247XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGV4dCB0aGF0IHRoaXMgQml0bWFwIFRleHQgb2JqZWN0IGRpc3BsYXlzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1ldGhvZCBgc2V0VGV4dGAgaWYgeW91IHdhbnQgYSBjaGFpbmFibGUgd2F5IHRvIGNoYW5nZSB0aGUgdGV4dCBjb250ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3RleHRcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdGV4dDoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dCh2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9udCBzaXplIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHVzZSB0aGUgbWV0aG9kIGBzZXRGb250U2l6ZWAgaWYgeW91IHdhbnQgYSBjaGFpbmFibGUgd2F5IHRvIGNoYW5nZSB0aGUgZm9udCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2ZvbnRTaXplXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGZvbnRTaXplOiB7XHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9udFNpemUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250U2l6ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgLyBSZW1vdmVzIHNwYWNpbmcgYmV0d2VlbiBjaGFyYWN0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIENhbiBiZSBhIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBtZXRob2QgYHNldExldHRlclNwYWNpbmdgIGlmIHlvdSB3YW50IGEgY2hhaW5hYmxlIHdheSB0byBjaGFuZ2UgdGhlIGxldHRlciBzcGFjaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2xldHRlclNwYWNpbmdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGV0dGVyU3BhY2luZzoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldHRlclNwYWNpbmcgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZXR0ZXJTcGFjaW5nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gZGlzcGxheSB3aWR0aCBvZiB0aGlzIEJpdG1hcFRleHQgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpdG1hcFRleHQudGV4dCBpcyBsb25nZXIgdGhhbiBtYXhXaWR0aCB0aGVuIHRoZSBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgd3JhcHBlZFxyXG4gICAgICogYmFzZWQgb24gdGhlIGxhc3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgZm91bmQgaW4gdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gd2hpdGVzcGFjZSB3YXMgZm91bmQgdGhlbiBubyB3cmFwcGluZyB3aWxsIHRha2UgcGxhY2UgYW5kIGNvbnNlcXVlbnRseSB0aGUgbWF4V2lkdGggdmFsdWUgd2lsbCBub3QgYmUgaG9ub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBEaXNhYmxlIG1heFdpZHRoIGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjbWF4V2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKi9cclxuICAgIG1heFdpZHRoOiB7XHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF4V2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhXaWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3dpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZHMuZ2xvYmFsLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGlzIGJpdG1hcCB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2hlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRleHRCb3VuZHMoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kcy5nbG9iYWwuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkpTT05CaXRtYXBUZXh0fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSBDb21wb25lbnRzLlRvSlNPTih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIEV4dHJhIGRhdGEgaXMgYWRkZWQgaGVyZVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHtcclxuICAgICAgICAgICAgZm9udDogdGhpcy5mb250LFxyXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmZvbnRTaXplLFxyXG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiB0aGlzLmxldHRlclNwYWNpbmcsXHJcbiAgICAgICAgICAgIGFsaWduOiB0aGlzLmFsaWduXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgb3V0LmRhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogTGVmdCBhbGlnbiB0aGUgdGV4dCBjaGFyYWN0ZXJzIGluIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0IG9iamVjdC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQUxJR05fTEVGVFxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9MRUZUID0gMDtcclxuXHJcbi8qKlxyXG4gKiBDZW50ZXIgYWxpZ24gdGhlIHRleHQgY2hhcmFjdGVycyBpbiBhIG11bHRpLWxpbmUgQml0bWFwVGV4dCBvYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkFMSUdOX0NFTlRFUlxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9DRU5URVIgPSAxO1xyXG5cclxuLyoqXHJcbiAqIFJpZ2h0IGFsaWduIHRoZSB0ZXh0IGNoYXJhY3RlcnMgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5BTElHTl9SSUdIVFxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9SSUdIVCA9IDI7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIEJpdG1hcCBGb250IGZyb20gYW4gQXRsYXMuXHJcbiAqXHJcbiAqIEFkZHMgdGhlIHBhcnNlZCBCaXRtYXAgRm9udCBkYXRhIHRvIHRoZSBjYWNoZSB3aXRoIHRoZSBgZm9udE5hbWVgIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuUGFyc2VGcm9tQXRsYXNcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHBhcnNlIHRoZSBCaXRtYXAgRm9udCBmb3IuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250TmFtZSAtIFRoZSBrZXkgb2YgdGhlIGZvbnQgdG8gYWRkIHRvIHRoZSBCaXRtYXAgRm9udCBjYWNoZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSBCaXRtYXBGb250J3MgdGV4dHVyZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYW1lS2V5IC0gVGhlIGtleSBvZiB0aGUgQml0bWFwRm9udCB0ZXh0dXJlJ3MgZnJhbWUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxLZXkgLSBUaGUga2V5IG9mIHRoZSBYTUwgZGF0YSBvZiB0aGUgZm9udCB0byBwYXJzZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmddIC0gVGhlIHgtYXhpcyBzcGFjaW5nIHRvIGFkZCBiZXR3ZWVuIGVhY2ggbGV0dGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt5U3BhY2luZ10gLSBUaGUgeS1heGlzIHNwYWNpbmcgdG8gYWRkIHRvIHRoZSBsaW5lIGhlaWdodC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcGFyc2luZyB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuXHJcbiAqL1xyXG5CaXRtYXBUZXh0LlBhcnNlRnJvbUF0bGFzID0gUGFyc2VGcm9tQXRsYXM7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIGZvbnQgdG8gQml0bWFwIEZvbnQgZGF0YSBmb3IgdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5QYXJzZVhNTEJpdG1hcEZvbnRcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MRG9jdW1lbnR9IHhtbCAtIFRoZSBYTUwgRG9jdW1lbnQgdG8gcGFyc2UgdGhlIGZvbnQgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmc9MF0gLSBUaGUgeC1heGlzIHNwYWNpbmcgdG8gYWRkIGJldHdlZW4gZWFjaCBsZXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3lTcGFjaW5nPTBdIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBbZnJhbWVdIC0gVGhlIHRleHR1cmUgZnJhbWUgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hpbGUgcGFyc2luZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwRm9udERhdGF9IFRoZSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YS5cclxuICovXHJcbkJpdG1hcFRleHQuUGFyc2VYTUxCaXRtYXBGb250ID0gUGFyc2VYTUxCaXRtYXBGb250O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.BitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var text = src._text;\r\n    var textLength = text.length;\r\n\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (textLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        return;\r\n    }\r\n    \r\n    var textureFrame = src.frame;\r\n\r\n    var chars = src.fontData.chars;\r\n    var lineHeight = src.fontData.lineHeight;\r\n    var letterSpacing = src._letterSpacing;\r\n\r\n    var xAdvance = 0;\r\n    var yAdvance = 0;\r\n\r\n    var charCode = 0;\r\n\r\n    var glyph = null;\r\n    var glyphX = 0;\r\n    var glyphY = 0;\r\n    var glyphW = 0;\r\n    var glyphH = 0;\r\n\r\n    var x = 0;\r\n    var y = 0;\r\n\r\n    var lastGlyph = null;\r\n    var lastCharCode = 0;\r\n\r\n    var image = src.frame.source.image;\r\n\r\n    var textureX = textureFrame.cutX;\r\n    var textureY = textureFrame.cutY;\r\n\r\n    var scale = (src._fontSize / src.fontData.size);\r\n\r\n    var align = src._align;\r\n    var currentLine = 0;\r\n    var lineOffsetX = 0;\r\n\r\n    //  Update the bounds - skipped internally if not dirty\r\n    var bounds = src.getTextBounds(false);\r\n\r\n    //  In case the method above changed it (word wrapping)\r\n    if (src.maxWidth > 0)\r\n    {\r\n        text = bounds.wrappedText;\r\n        textLength = text.length;\r\n    }\r\n\r\n    var lineData = src._bounds.lines;\r\n\r\n    if (align === 1)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n    }\r\n    else if (align === 2)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n    }\r\n\r\n    ctx.translate(-src.displayOriginX, -src.displayOriginY);\r\n\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    for (var i = 0; i < textLength; i++)\r\n    {\r\n        charCode = text.charCodeAt(i);\r\n\r\n        if (charCode === 10)\r\n        {\r\n            currentLine++;\r\n\r\n            if (align === 1)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n            }\r\n            else if (align === 2)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n            }\r\n\r\n            xAdvance = 0;\r\n            yAdvance += lineHeight;\r\n            lastGlyph = null;\r\n\r\n            continue;\r\n        }\r\n\r\n        glyph = chars[charCode];\r\n\r\n        if (!glyph)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        glyphX = textureX + glyph.x;\r\n        glyphY = textureY + glyph.y;\r\n\r\n        glyphW = glyph.width;\r\n        glyphH = glyph.height;\r\n\r\n        x = glyph.xOffset + xAdvance;\r\n        y = glyph.yOffset + yAdvance;\r\n\r\n        if (lastGlyph !== null)\r\n        {\r\n            var kerningOffset = glyph.kerning[lastCharCode];\r\n            x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n        }\r\n\r\n        x *= scale;\r\n        y *= scale;\r\n\r\n        x += lineOffsetX;\r\n\r\n        xAdvance += glyph.xAdvance + letterSpacing;\r\n        lastGlyph = glyph;\r\n        lastCharCode = charCode;\r\n\r\n        //  Nothing to render or a space? Then skip to the next glyph\r\n        if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        if (roundPixels)\r\n        {\r\n            x = Math.round(x);\r\n            y = Math.round(y);\r\n        }\r\n\r\n        ctx.save();\r\n\r\n        ctx.translate(x, y);\r\n\r\n        ctx.scale(scale, scale);\r\n\r\n        ctx.drawImage(image, glyphX, glyphY, glyphW, glyphH, 0, 0, glyphW, glyphH);\r\n\r\n        ctx.restore();\r\n    }\r\n\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = BitmapTextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q2FudmFzUmVuZGVyZXIuanM/NDc3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEJpdG1hcFRleHRDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciB0ZXh0ID0gc3JjLl90ZXh0O1xyXG4gICAgdmFyIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKHRleHRMZW5ndGggPT09IDAgfHwgIVNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHZhciB0ZXh0dXJlRnJhbWUgPSBzcmMuZnJhbWU7XHJcblxyXG4gICAgdmFyIGNoYXJzID0gc3JjLmZvbnREYXRhLmNoYXJzO1xyXG4gICAgdmFyIGxpbmVIZWlnaHQgPSBzcmMuZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLl9sZXR0ZXJTcGFjaW5nO1xyXG5cclxuICAgIHZhciB4QWR2YW5jZSA9IDA7XHJcbiAgICB2YXIgeUFkdmFuY2UgPSAwO1xyXG5cclxuICAgIHZhciBjaGFyQ29kZSA9IDA7XHJcblxyXG4gICAgdmFyIGdseXBoID0gbnVsbDtcclxuICAgIHZhciBnbHlwaFggPSAwO1xyXG4gICAgdmFyIGdseXBoWSA9IDA7XHJcbiAgICB2YXIgZ2x5cGhXID0gMDtcclxuICAgIHZhciBnbHlwaEggPSAwO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuXHJcbiAgICB2YXIgbGFzdEdseXBoID0gbnVsbDtcclxuICAgIHZhciBsYXN0Q2hhckNvZGUgPSAwO1xyXG5cclxuICAgIHZhciBpbWFnZSA9IHNyYy5mcmFtZS5zb3VyY2UuaW1hZ2U7XHJcblxyXG4gICAgdmFyIHRleHR1cmVYID0gdGV4dHVyZUZyYW1lLmN1dFg7XHJcbiAgICB2YXIgdGV4dHVyZVkgPSB0ZXh0dXJlRnJhbWUuY3V0WTtcclxuXHJcbiAgICB2YXIgc2NhbGUgPSAoc3JjLl9mb250U2l6ZSAvIHNyYy5mb250RGF0YS5zaXplKTtcclxuXHJcbiAgICB2YXIgYWxpZ24gPSBzcmMuX2FsaWduO1xyXG4gICAgdmFyIGN1cnJlbnRMaW5lID0gMDtcclxuICAgIHZhciBsaW5lT2Zmc2V0WCA9IDA7XHJcblxyXG4gICAgLy8gIFVwZGF0ZSB0aGUgYm91bmRzIC0gc2tpcHBlZCBpbnRlcm5hbGx5IGlmIG5vdCBkaXJ0eVxyXG4gICAgdmFyIGJvdW5kcyA9IHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICAvLyAgSW4gY2FzZSB0aGUgbWV0aG9kIGFib3ZlIGNoYW5nZWQgaXQgKHdvcmQgd3JhcHBpbmcpXHJcbiAgICBpZiAoc3JjLm1heFdpZHRoID4gMClcclxuICAgIHtcclxuICAgICAgICB0ZXh0ID0gYm91bmRzLndyYXBwZWRUZXh0O1xyXG4gICAgICAgIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgudHJhbnNsYXRlKC1zcmMuZGlzcGxheU9yaWdpblgsIC1zcmMuZGlzcGxheU9yaWdpblkpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChpKTtcclxuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB4QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgICAgIHlBZHZhbmNlICs9IGxpbmVIZWlnaHQ7XHJcbiAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICBpZiAoIWdseXBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaFggPSB0ZXh0dXJlWCArIGdseXBoLng7XHJcbiAgICAgICAgZ2x5cGhZID0gdGV4dHVyZVkgKyBnbHlwaC55O1xyXG5cclxuICAgICAgICBnbHlwaFcgPSBnbHlwaC53aWR0aDtcclxuICAgICAgICBnbHlwaEggPSBnbHlwaC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHggPSBnbHlwaC54T2Zmc2V0ICsgeEFkdmFuY2U7XHJcbiAgICAgICAgeSA9IGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ICo9IHNjYWxlO1xyXG4gICAgICAgIHkgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJvdW5kUGl4ZWxzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IE1hdGgucm91bmQoeCk7XHJcbiAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcblxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIGdseXBoWCwgZ2x5cGhZLCBnbHlwaFcsIGdseXBoSCwgMCwgMCwgZ2x5cGhXLCBnbHlwaEgpO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGN0eC5yZXN0b3JlKCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHRDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Creates a new Bitmap Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#bitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.BitmapText.BitmapTextConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n * \r\n * @return {Phaser.GameObjects.BitmapText} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('bitmapText', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var font = GetValue(config, 'font', '');\r\n    var text = GetAdvancedValue(config, 'text', '');\r\n    var size = GetAdvancedValue(config, 'size', false);\r\n    var align = GetValue(config, 'align', 0);\r\n\r\n    var bitmapText = new BitmapText(this.scene, 0, 0, font, text, size, align);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, bitmapText, config);\r\n\r\n    return bitmapText;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q3JlYXRvci5qcz9jOGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywyRkFBYztBQUN2QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3QztBQUN2RSxlQUFlLG1CQUFPLENBQUMsMEZBQWdDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpO1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwVGV4dENvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignYml0bWFwVGV4dCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBmb250ID0gR2V0VmFsdWUoY29uZmlnLCAnZm9udCcsICcnKTtcclxuICAgIHZhciB0ZXh0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd0ZXh0JywgJycpO1xyXG4gICAgdmFyIHNpemUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3NpemUnLCBmYWxzZSk7XHJcbiAgICB2YXIgYWxpZ24gPSBHZXRWYWx1ZShjb25maWcsICdhbGlnbicsIDApO1xyXG5cclxuICAgIHZhciBiaXRtYXBUZXh0ID0gbmV3IEJpdG1hcFRleHQodGhpcy5zY2VuZSwgMCwgMCwgZm9udCwgdGV4dCwgc2l6ZSwgYWxpZ24pO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJpdG1hcFRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJpdG1hcFRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Bitmap Text Game Object and adds it to the Scene.\r\n * \r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * Note: This method will only be available if the Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#bitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} font - The key of the font to use from the BitmapFont cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size to set.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n *\r\n * @return {Phaser.GameObjects.BitmapText} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('bitmapText', function (x, y, font, text, size, align)\r\n{\r\n    return this.displayList.add(new BitmapText(this.scene, x, y, font, text, size, align));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0RmFjdG9yeS5qcz80MjEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywyRkFBYztBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKiBcclxuICogQml0bWFwVGV4dCBvYmplY3RzIHdvcmsgYnkgdGFraW5nIGEgdGV4dHVyZSBmaWxlIGFuZCBhbiBYTUwgb3IgSlNPTiBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSBmb250IHN0cnVjdHVyZS5cclxuICogXHJcbiAqIER1cmluZyByZW5kZXJpbmcgZm9yIGVhY2ggbGV0dGVyIG9mIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIHRvIHRoZSBkaXNwbGF5LCBwcm9wb3J0aW9uYWxseSBzcGFjZWQgb3V0IGFuZCBhbGlnbmVkIHRvXHJcbiAqIG1hdGNoIHRoZSBmb250IHN0cnVjdHVyZS5cclxuICogXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnQgLSBUaGUga2V5IG9mIHRoZSBmb250IHRvIHVzZSBmcm9tIHRoZSBCaXRtYXBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdGV4dF0gLSBUaGUgc3RyaW5nLCBvciBhcnJheSBvZiBzdHJpbmdzLCB0byBiZSBzZXQgYXMgdGhlIGNvbnRlbnQgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplXSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignYml0bWFwVGV4dCcsIGZ1bmN0aW9uICh4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbilcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBCaXRtYXBUZXh0KHRoaXMuc2NlbmUsIHgsIHksIGZvbnQsIHRleHQsIHNpemUsIGFsaWduKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./BitmapTextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./BitmapTextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0UmVuZGVyLmpzP2RkYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxxSEFBMkI7QUFDckQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVIQUE0QjtBQUN2RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.BitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var text = src._text;\r\n    var textLength = text.length;\r\n\r\n    if (textLength === 0)\r\n    {\r\n        return;\r\n    }\r\n \r\n    var pipeline = this.pipeline;\r\n\r\n    renderer.setPipeline(pipeline, src);\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var spriteMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        spriteMatrix.e = src.x;\r\n        spriteMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n\r\n    var frame = src.frame;\r\n    var texture = frame.glTexture;\r\n    var textureX = frame.cutX;\r\n    var textureY = frame.cutY;\r\n    var textureWidth = texture.width;\r\n    var textureHeight = texture.height;\r\n\r\n    var tintEffect = (src._isTinted && src.tintFill);\r\n    var tintTL = Utils.getTintAppendFloatAlpha(src._tintTL, camera.alpha * src._alphaTL);\r\n    var tintTR = Utils.getTintAppendFloatAlpha(src._tintTR, camera.alpha * src._alphaTR);\r\n    var tintBL = Utils.getTintAppendFloatAlpha(src._tintBL, camera.alpha * src._alphaBL);\r\n    var tintBR = Utils.getTintAppendFloatAlpha(src._tintBR, camera.alpha * src._alphaBR);\r\n\r\n    pipeline.setTexture2D(texture, 0);\r\n\r\n    var xAdvance = 0;\r\n    var yAdvance = 0;\r\n    var charCode = 0;\r\n    var lastCharCode = 0;\r\n    var letterSpacing = src._letterSpacing;\r\n    var glyph;\r\n    var glyphX = 0;\r\n    var glyphY = 0;\r\n    var glyphW = 0;\r\n    var glyphH = 0;\r\n    var lastGlyph;\r\n\r\n    var fontData = src.fontData;\r\n    var chars = fontData.chars;\r\n    var lineHeight = fontData.lineHeight;\r\n    var scale = (src._fontSize / fontData.size);\r\n\r\n    var align = src._align;\r\n    var currentLine = 0;\r\n    var lineOffsetX = 0;\r\n\r\n    //  Update the bounds - skipped internally if not dirty\r\n    var bounds = src.getTextBounds(false);\r\n\r\n    //  In case the method above changed it (word wrapping)\r\n    if (src.maxWidth > 0)\r\n    {\r\n        text = bounds.wrappedText;\r\n        textLength = text.length;\r\n    }\r\n\r\n    var lineData = src._bounds.lines;\r\n\r\n    if (align === 1)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n    }\r\n    else if (align === 2)\r\n    {\r\n        lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n    }\r\n\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    for (var i = 0; i < textLength; i++)\r\n    {\r\n        charCode = text.charCodeAt(i);\r\n\r\n        //  Carriage-return\r\n        if (charCode === 10)\r\n        {\r\n            currentLine++;\r\n\r\n            if (align === 1)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n            }\r\n            else if (align === 2)\r\n            {\r\n                lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n            }\r\n        \r\n            xAdvance = 0;\r\n            yAdvance += lineHeight;\r\n            lastGlyph = null;\r\n        \r\n            continue;\r\n        }\r\n\r\n        glyph = chars[charCode];\r\n\r\n        if (!glyph)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        glyphX = textureX + glyph.x;\r\n        glyphY = textureY + glyph.y;\r\n\r\n        glyphW = glyph.width;\r\n        glyphH = glyph.height;\r\n\r\n        var x = glyph.xOffset + xAdvance;\r\n        var y = glyph.yOffset + yAdvance;\r\n\r\n        if (lastGlyph !== null)\r\n        {\r\n            var kerningOffset = glyph.kerning[lastCharCode];\r\n            x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n        }\r\n\r\n        xAdvance += glyph.xAdvance + letterSpacing;\r\n        lastGlyph = glyph;\r\n        lastCharCode = charCode;\r\n\r\n        //  Nothing to render or a space? Then skip to the next glyph\r\n        if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        x *= scale;\r\n        y *= scale;\r\n\r\n        x -= src.displayOriginX;\r\n        y -= src.displayOriginY;\r\n\r\n        x += lineOffsetX;\r\n\r\n        var u0 = glyphX / textureWidth;\r\n        var v0 = glyphY / textureHeight;\r\n        var u1 = (glyphX + glyphW) / textureWidth;\r\n        var v1 = (glyphY + glyphH) / textureHeight;\r\n\r\n        var xw = x + (glyphW * scale);\r\n        var yh = y + (glyphH * scale);\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(x, yh);\r\n        var ty1 = calcMatrix.getY(x, yh);\r\n\r\n        var tx2 = calcMatrix.getX(xw, yh);\r\n        var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n        var tx3 = calcMatrix.getX(xw, y);\r\n        var ty3 = calcMatrix.getY(xw, y);\r\n\r\n        if (roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n    }\r\n};\r\n\r\nmodule.exports = BitmapTextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0V2ViR0xSZW5kZXJlci5qcz9kOWJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQml0bWFwVGV4dFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgdGV4dCA9IHNyYy5fdGV4dDtcclxuICAgIHZhciB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHRleHRMZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gXHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lLCBzcmMpO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc3ByaXRlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgc3ByaXRlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzcHJpdGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5mID0gc3JjLnk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhbWUgPSBzcmMuZnJhbWU7XHJcbiAgICB2YXIgdGV4dHVyZSA9IGZyYW1lLmdsVGV4dHVyZTtcclxuICAgIHZhciB0ZXh0dXJlWCA9IGZyYW1lLmN1dFg7XHJcbiAgICB2YXIgdGV4dHVyZVkgPSBmcmFtZS5jdXRZO1xyXG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRleHR1cmUud2lkdGg7XHJcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRleHR1cmUuaGVpZ2h0O1xyXG5cclxuICAgIHZhciB0aW50RWZmZWN0ID0gKHNyYy5faXNUaW50ZWQgJiYgc3JjLnRpbnRGaWxsKTtcclxuICAgIHZhciB0aW50VEwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKTtcclxuICAgIHZhciB0aW50VFIgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRUUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRSKTtcclxuICAgIHZhciB0aW50QkwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRCTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJMKTtcclxuICAgIHZhciB0aW50QlIgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKTtcclxuXHJcbiAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgdmFyIHhBZHZhbmNlID0gMDtcclxuICAgIHZhciB5QWR2YW5jZSA9IDA7XHJcbiAgICB2YXIgY2hhckNvZGUgPSAwO1xyXG4gICAgdmFyIGxhc3RDaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGV0dGVyU3BhY2luZyA9IHNyYy5fbGV0dGVyU3BhY2luZztcclxuICAgIHZhciBnbHlwaDtcclxuICAgIHZhciBnbHlwaFggPSAwO1xyXG4gICAgdmFyIGdseXBoWSA9IDA7XHJcbiAgICB2YXIgZ2x5cGhXID0gMDtcclxuICAgIHZhciBnbHlwaEggPSAwO1xyXG4gICAgdmFyIGxhc3RHbHlwaDtcclxuXHJcbiAgICB2YXIgZm9udERhdGEgPSBzcmMuZm9udERhdGE7XHJcbiAgICB2YXIgY2hhcnMgPSBmb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBzY2FsZSA9IChzcmMuX2ZvbnRTaXplIC8gZm9udERhdGEuc2l6ZSk7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHZhciBib3VuZHMgPSBzcmMuZ2V0VGV4dEJvdW5kcyhmYWxzZSk7XHJcblxyXG4gICAgLy8gIEluIGNhc2UgdGhlIG1ldGhvZCBhYm92ZSBjaGFuZ2VkIGl0ICh3b3JkIHdyYXBwaW5nKVxyXG4gICAgaWYgKHNyYy5tYXhXaWR0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdGV4dCA9IGJvdW5kcy53cmFwcGVkVGV4dDtcclxuICAgICAgICB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxpbmVEYXRhID0gc3JjLl9ib3VuZHMubGluZXM7XHJcblxyXG4gICAgaWYgKGFsaWduID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKSAvIDI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhbGlnbiA9PT0gMilcclxuICAgIHtcclxuICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvdW5kUGl4ZWxzID0gY2FtZXJhLnJvdW5kUGl4ZWxzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dExlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAvLyAgQ2FycmlhZ2UtcmV0dXJuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2x5cGhYID0gdGV4dHVyZVggKyBnbHlwaC54O1xyXG4gICAgICAgIGdseXBoWSA9IHRleHR1cmVZICsgZ2x5cGgueTtcclxuXHJcbiAgICAgICAgZ2x5cGhXID0gZ2x5cGgud2lkdGg7XHJcbiAgICAgICAgZ2x5cGhIID0gZ2x5cGguaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgeCA9IGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZTtcclxuICAgICAgICB2YXIgeSA9IGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4QWR2YW5jZSArPSBnbHlwaC54QWR2YW5jZSArIGxldHRlclNwYWNpbmc7XHJcbiAgICAgICAgbGFzdEdseXBoID0gZ2x5cGg7XHJcbiAgICAgICAgbGFzdENoYXJDb2RlID0gY2hhckNvZGU7XHJcblxyXG4gICAgICAgIC8vICBOb3RoaW5nIHRvIHJlbmRlciBvciBhIHNwYWNlPyBUaGVuIHNraXAgdG8gdGhlIG5leHQgZ2x5cGhcclxuICAgICAgICBpZiAoZ2x5cGhXID09PSAwIHx8IGdseXBoSCA9PT0gMCB8fCBjaGFyQ29kZSA9PT0gMzIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggKj0gc2NhbGU7XHJcbiAgICAgICAgeSAqPSBzY2FsZTtcclxuXHJcbiAgICAgICAgeCAtPSBzcmMuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSAtPSBzcmMuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGdseXBoWCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICB2YXIgdjAgPSBnbHlwaFkgLyB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgIHZhciB1MSA9IChnbHlwaFggKyBnbHlwaFcpIC8gdGV4dHVyZVdpZHRoO1xyXG4gICAgICAgIHZhciB2MSA9IChnbHlwaFkgKyBnbHlwaEgpIC8gdGV4dHVyZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHh3ID0geCArIChnbHlwaFcgKiBzY2FsZSk7XHJcbiAgICAgICAgdmFyIHloID0geSArIChnbHlwaEggKiBzY2FsZSk7XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeHcsIHloKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBjYWxjTWF0cml4LmdldFkoeHcsIHkpO1xyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgdTAsIHYwLCB1MSwgdjEsIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCwgdGV4dHVyZSwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHRXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/Blitter.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/Blitter.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlitterRender = __webpack_require__(/*! ./BlitterRender */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js\");\r\nvar Bob = __webpack_require__(/*! ./Bob */ \"./node_modules/phaser/src/gameobjects/blitter/Bob.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar List = __webpack_require__(/*! ../../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\n\r\n/**\r\n * @callback CreateCallback\r\n *\r\n * @param {Phaser.GameObjects.Bob} bob - The Bob that was created by the Blitter.\r\n * @param {integer} index - The position of the Bob within the Blitter display list.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * A Blitter Game Object.\r\n *\r\n * The Blitter Game Object is a special kind of container that creates, updates and manages Bob objects.\r\n * Bobs are designed for rendering speed rather than flexibility. They consist of a texture, or frame from a texture,\r\n * a position and an alpha value. You cannot scale or rotate them. They use a batched drawing method for speed\r\n * during rendering.\r\n *\r\n * A Blitter Game Object has one texture bound to it. Bobs created by the Blitter can use any Frame from this\r\n * Texture to render with, but they cannot use any other Texture. It is this single texture-bind that allows\r\n * them their speed.\r\n *\r\n * If you have a need to blast a large volume of frames around the screen then Blitter objects are well worth\r\n * investigating. They are especially useful for using as a base for your own special effects systems.\r\n *\r\n * @class Blitter\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} [x=0] - The x coordinate of this Game Object in world space.\r\n * @param {number} [y=0] - The y coordinate of this Game Object in world space.\r\n * @param {string} [texture='__DEFAULT'] - The key of the texture this Game Object will use for rendering. The Texture must already exist in the Texture Manager.\r\n * @param {(string|integer)} [frame=0] - The Frame of the Texture that this Game Object will use. Only set if the Texture has multiple frames, such as a Texture Atlas or Sprite Sheet.\r\n */\r\nvar Blitter = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Mask,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Size,\r\n        Components.Texture,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        BlitterRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Blitter (scene, x, y, texture, frame)\r\n    {\r\n        GameObject.call(this, scene, 'Blitter');\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setPosition(x, y);\r\n        this.initPipeline();\r\n\r\n        /**\r\n         * The children of this Blitter.\r\n         * This List contains all of the Bob objects created by the Blitter.\r\n         *\r\n         * @name Phaser.GameObjects.Blitter#children\r\n         * @type {Phaser.Structs.List.<Phaser.GameObjects.Bob>}\r\n         * @since 3.0.0\r\n         */\r\n        this.children = new List();\r\n\r\n        /**\r\n         * A transient array that holds all of the Bobs that will be rendered this frame.\r\n         * The array is re-populated whenever the dirty flag is set.\r\n         *\r\n         * @name Phaser.GameObjects.Blitter#renderList\r\n         * @type {Phaser.GameObjects.Bob[]}\r\n         * @default []\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.renderList = [];\r\n\r\n        /**\r\n         * Is the Blitter considered dirty?\r\n         * A 'dirty' Blitter has had its child count changed since the last frame.\r\n         *\r\n         * @name Phaser.GameObjects.Blitter#dirty\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.dirty = false;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Bob in this Blitter.\r\n     *\r\n     * The Bob is created at the given coordinates, relative to the Blitter and uses the given frame.\r\n     * A Bob can use any frame belonging to the texture bound to the Blitter.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The Frame the Bob will use. It _must_ be part of the Texture the parent Blitter object is using.\r\n     * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n     * @param {integer} [index] - The position in the Blitters Display List to add the new Bob at. Defaults to the top of the list.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} The newly created Bob object.\r\n     */\r\n    create: function (x, y, frame, visible, index)\r\n    {\r\n        if (visible === undefined) { visible = true; }\r\n        if (index === undefined) { index = this.children.length; }\r\n\r\n        if (frame === undefined)\r\n        {\r\n            frame = this.frame;\r\n        }\r\n        else if (!(frame instanceof Frame))\r\n        {\r\n            frame = this.texture.get(frame);\r\n        }\r\n\r\n        var bob = new Bob(this, x, y, frame, visible);\r\n\r\n        this.children.addAt(bob, index, false);\r\n\r\n        this.dirty = true;\r\n\r\n        return bob;\r\n    },\r\n\r\n    /**\r\n     * Creates multiple Bob objects within this Blitter and then passes each of them to the specified callback.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#createFromCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {CreateCallback} callback - The callback to invoke after creating a bob. It will be sent two arguments: The Bob and the index of the Bob.\r\n     * @param {integer} quantity - The quantity of Bob objects to create.\r\n     * @param {(string|integer|Phaser.Textures.Frame|string[]|integer[]|Phaser.Textures.Frame[])} [frame] - The Frame the Bobs will use. It must be part of the Blitter Texture.\r\n     * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n     *\r\n     * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that were created.\r\n     */\r\n    createFromCallback: function (callback, quantity, frame, visible)\r\n    {\r\n        var bobs = this.createMultiple(quantity, frame, visible);\r\n\r\n        for (var i = 0; i < bobs.length; i++)\r\n        {\r\n            var bob = bobs[i];\r\n\r\n            callback.call(this, bob, i);\r\n        }\r\n\r\n        return bobs;\r\n    },\r\n\r\n    /**\r\n     * Creates multiple Bobs in one call.\r\n     *\r\n     * The amount created is controlled by a combination of the `quantity` argument and the number of frames provided.\r\n     *\r\n     * If the quantity is set to 10 and you provide 2 frames, then 20 Bobs will be created. 10 with the first\r\n     * frame and 10 with the second.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#createMultiple\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} quantity - The quantity of Bob objects to create.\r\n     * @param {(string|integer|Phaser.Textures.Frame|string[]|integer[]|Phaser.Textures.Frame[])} [frame] - The Frame the Bobs will use. It must be part of the Blitter Texture.\r\n     * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n     *\r\n     * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that were created.\r\n     */\r\n    createMultiple: function (quantity, frame, visible)\r\n    {\r\n        if (frame === undefined) { frame = this.frame.name; }\r\n        if (visible === undefined) { visible = true; }\r\n\r\n        if (!Array.isArray(frame))\r\n        {\r\n            frame = [ frame ];\r\n        }\r\n\r\n        var bobs = [];\r\n        var _this = this;\r\n\r\n        frame.forEach(function (singleFrame)\r\n        {\r\n            for (var i = 0; i < quantity; i++)\r\n            {\r\n                bobs.push(_this.create(0, 0, singleFrame, visible));\r\n            }\r\n        });\r\n\r\n        return bobs;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given child can render or not, by checking its `visible` and `alpha` values.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#childCanRender\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Bob} child - The Bob to check for rendering.\r\n     *\r\n     * @return {boolean} Returns `true` if the given child can render, otherwise `false`.\r\n     */\r\n    childCanRender: function (child)\r\n    {\r\n        return (child.visible && child.alpha > 0);\r\n    },\r\n\r\n    /**\r\n     * Returns an array of Bobs to be rendered.\r\n     * If the Blitter is dirty then a new list is generated and stored in `renderList`.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#getRenderList\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that will be rendered this frame.\r\n     */\r\n    getRenderList: function ()\r\n    {\r\n        if (this.dirty)\r\n        {\r\n            this.renderList = this.children.list.filter(this.childCanRender, this);\r\n            this.dirty = false;\r\n        }\r\n\r\n        return this.renderList;\r\n    },\r\n\r\n    /**\r\n     * Removes all Bobs from the children List and clears the dirty flag.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#clear\r\n     * @since 3.0.0\r\n     */\r\n    clear: function ()\r\n    {\r\n        this.children.removeAll();\r\n        this.dirty = true;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Blitter#preDestroy\r\n     * @protected\r\n     * @since 3.9.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.children.destroy();\r\n\r\n        this.renderList = [];\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Blitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXIuanM/NDI2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsdUZBQWlCO0FBQzdDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQsa0NBQWtDLDhCQUE4Qjs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGtGQUFrRjtBQUNqRyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0ZBQWtGO0FBQ2pHLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QjtBQUMzRCxvQ0FBb0MsZ0JBQWdCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJsaXR0ZXJSZW5kZXIgPSByZXF1aXJlKCcuL0JsaXR0ZXJSZW5kZXInKTtcclxudmFyIEJvYiA9IHJlcXVpcmUoJy4vQm9iJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgRnJhbWUgPSByZXF1aXJlKCcuLi8uLi90ZXh0dXJlcy9GcmFtZScpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi8uLi9zdHJ1Y3RzL0xpc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgQ3JlYXRlQ2FsbGJhY2tcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBib2IgLSBUaGUgQm9iIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIEJsaXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgcG9zaXRpb24gb2YgdGhlIEJvYiB3aXRoaW4gdGhlIEJsaXR0ZXIgZGlzcGxheSBsaXN0LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmxpdHRlciBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhlIEJsaXR0ZXIgR2FtZSBPYmplY3QgaXMgYSBzcGVjaWFsIGtpbmQgb2YgY29udGFpbmVyIHRoYXQgY3JlYXRlcywgdXBkYXRlcyBhbmQgbWFuYWdlcyBCb2Igb2JqZWN0cy5cclxuICogQm9icyBhcmUgZGVzaWduZWQgZm9yIHJlbmRlcmluZyBzcGVlZCByYXRoZXIgdGhhbiBmbGV4aWJpbGl0eS4gVGhleSBjb25zaXN0IG9mIGEgdGV4dHVyZSwgb3IgZnJhbWUgZnJvbSBhIHRleHR1cmUsXHJcbiAqIGEgcG9zaXRpb24gYW5kIGFuIGFscGhhIHZhbHVlLiBZb3UgY2Fubm90IHNjYWxlIG9yIHJvdGF0ZSB0aGVtLiBUaGV5IHVzZSBhIGJhdGNoZWQgZHJhd2luZyBtZXRob2QgZm9yIHNwZWVkXHJcbiAqIGR1cmluZyByZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEEgQmxpdHRlciBHYW1lIE9iamVjdCBoYXMgb25lIHRleHR1cmUgYm91bmQgdG8gaXQuIEJvYnMgY3JlYXRlZCBieSB0aGUgQmxpdHRlciBjYW4gdXNlIGFueSBGcmFtZSBmcm9tIHRoaXNcclxuICogVGV4dHVyZSB0byByZW5kZXIgd2l0aCwgYnV0IHRoZXkgY2Fubm90IHVzZSBhbnkgb3RoZXIgVGV4dHVyZS4gSXQgaXMgdGhpcyBzaW5nbGUgdGV4dHVyZS1iaW5kIHRoYXQgYWxsb3dzXHJcbiAqIHRoZW0gdGhlaXIgc3BlZWQuXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIGEgbmVlZCB0byBibGFzdCBhIGxhcmdlIHZvbHVtZSBvZiBmcmFtZXMgYXJvdW5kIHRoZSBzY3JlZW4gdGhlbiBCbGl0dGVyIG9iamVjdHMgYXJlIHdlbGwgd29ydGhcclxuICogaW52ZXN0aWdhdGluZy4gVGhleSBhcmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIHVzaW5nIGFzIGEgYmFzZSBmb3IgeW91ciBvd24gc3BlY2lhbCBlZmZlY3RzIHN5c3RlbXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBCbGl0dGVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEl0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYW55IGdpdmVuIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RleHR1cmU9J19fREVGQVVMVCddIC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIGZvciByZW5kZXJpbmcuIFRoZSBUZXh0dXJlIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT0wXSAtIFRoZSBGcmFtZSBvZiB0aGUgVGV4dHVyZSB0aGF0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UuIE9ubHkgc2V0IGlmIHRoZSBUZXh0dXJlIGhhcyBtdWx0aXBsZSBmcmFtZXMsIHN1Y2ggYXMgYSBUZXh0dXJlIEF0bGFzIG9yIFNwcml0ZSBTaGVldC5cclxuICovXHJcbnZhciBCbGl0dGVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UZXh0dXJlLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBCbGl0dGVyUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmxpdHRlciAoc2NlbmUsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ0JsaXR0ZXInKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRleHR1cmUsIGZyYW1lKTtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIEJsaXR0ZXIuXHJcbiAgICAgICAgICogVGhpcyBMaXN0IGNvbnRhaW5zIGFsbCBvZiB0aGUgQm9iIG9iamVjdHMgY3JlYXRlZCBieSB0aGUgQmxpdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLkxpc3QuPFBoYXNlci5HYW1lT2JqZWN0cy5Cb2I+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgTGlzdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRyYW5zaWVudCBhcnJheSB0aGF0IGhvbGRzIGFsbCBvZiB0aGUgQm9icyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgdGhpcyBmcmFtZS5cclxuICAgICAgICAgKiBUaGUgYXJyYXkgaXMgcmUtcG9wdWxhdGVkIHdoZW5ldmVyIHRoZSBkaXJ0eSBmbGFnIGlzIHNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3JlbmRlckxpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYltdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIEJsaXR0ZXIgY29uc2lkZXJlZCBkaXJ0eT9cclxuICAgICAgICAgKiBBICdkaXJ0eScgQmxpdHRlciBoYXMgaGFkIGl0cyBjaGlsZCBjb3VudCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjZGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCb2IgaW4gdGhpcyBCbGl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBCb2IgaXMgY3JlYXRlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBCbGl0dGVyIGFuZCB1c2VzIHRoZSBnaXZlbiBmcmFtZS5cclxuICAgICAqIEEgQm9iIGNhbiB1c2UgYW55IGZyYW1lIGJlbG9uZ2luZyB0byB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgQmxpdHRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEJvYi4gQm9iIGNvb3JkaW5hdGUgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlciBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGV4dHVyZXMuRnJhbWUpfSBbZnJhbWVdIC0gVGhlIEZyYW1lIHRoZSBCb2Igd2lsbCB1c2UuIEl0IF9tdXN0XyBiZSBwYXJ0IG9mIHRoZSBUZXh0dXJlIHRoZSBwYXJlbnQgQmxpdHRlciBvYmplY3QgaXMgdXNpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gU2hvdWxkIHRoZSBjcmVhdGVkIEJvYiByZW5kZXIgb3Igbm90P1xyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXhdIC0gVGhlIHBvc2l0aW9uIGluIHRoZSBCbGl0dGVycyBEaXNwbGF5IExpc3QgdG8gYWRkIHRoZSBuZXcgQm9iIGF0LiBEZWZhdWx0cyB0byB0aGUgdG9wIG9mIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2J9IFRoZSBuZXdseSBjcmVhdGVkIEJvYiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKHgsIHksIGZyYW1lLCB2aXNpYmxlLCBpbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy5mcmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIShmcmFtZSBpbnN0YW5jZW9mIEZyYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy50ZXh0dXJlLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9iID0gbmV3IEJvYih0aGlzLCB4LCB5LCBmcmFtZSwgdmlzaWJsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uYWRkQXQoYm9iLCBpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvYjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIG11bHRpcGxlIEJvYiBvYmplY3RzIHdpdGhpbiB0aGlzIEJsaXR0ZXIgYW5kIHRoZW4gcGFzc2VzIGVhY2ggb2YgdGhlbSB0byB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjY3JlYXRlRnJvbUNhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NyZWF0ZUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgY3JlYXRpbmcgYSBib2IuIEl0IHdpbGwgYmUgc2VudCB0d28gYXJndW1lbnRzOiBUaGUgQm9iIGFuZCB0aGUgaW5kZXggb2YgdGhlIEJvYi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgcXVhbnRpdHkgb2YgQm9iIG9iamVjdHMgdG8gY3JlYXRlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRleHR1cmVzLkZyYW1lfHN0cmluZ1tdfGludGVnZXJbXXxQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXSl9IFtmcmFtZV0gLSBUaGUgRnJhbWUgdGhlIEJvYnMgd2lsbCB1c2UuIEl0IG11c3QgYmUgcGFydCBvZiB0aGUgQmxpdHRlciBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFNob3VsZCB0aGUgY3JlYXRlZCBCb2IgcmVuZGVyIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9iW119IEFuIGFycmF5IG9mIEJvYiBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgcXVhbnRpdHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib2JzID0gdGhpcy5jcmVhdGVNdWx0aXBsZShxdWFudGl0eSwgZnJhbWUsIHZpc2libGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvYnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYm9iID0gYm9ic1tpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgYm9iLCBpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBib2JzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgbXVsdGlwbGUgQm9icyBpbiBvbmUgY2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYW1vdW50IGNyZWF0ZWQgaXMgY29udHJvbGxlZCBieSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBgcXVhbnRpdHlgIGFyZ3VtZW50IGFuZCB0aGUgbnVtYmVyIG9mIGZyYW1lcyBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcXVhbnRpdHkgaXMgc2V0IHRvIDEwIGFuZCB5b3UgcHJvdmlkZSAyIGZyYW1lcywgdGhlbiAyMCBCb2JzIHdpbGwgYmUgY3JlYXRlZC4gMTAgd2l0aCB0aGUgZmlyc3RcclxuICAgICAqIGZyYW1lIGFuZCAxMCB3aXRoIHRoZSBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNjcmVhdGVNdWx0aXBsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBxdWFudGl0eSBvZiBCb2Igb2JqZWN0cyB0byBjcmVhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGV4dHVyZXMuRnJhbWV8c3RyaW5nW118aW50ZWdlcltdfFBoYXNlci5UZXh0dXJlcy5GcmFtZVtdKX0gW2ZyYW1lXSAtIFRoZSBGcmFtZSB0aGUgQm9icyB3aWxsIHVzZS4gSXQgbXVzdCBiZSBwYXJ0IG9mIHRoZSBCbGl0dGVyIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gU2hvdWxkIHRoZSBjcmVhdGVkIEJvYiByZW5kZXIgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2JbXX0gQW4gYXJyYXkgb2YgQm9iIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZU11bHRpcGxlOiBmdW5jdGlvbiAocXVhbnRpdHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5mcmFtZS5uYW1lOyB9XHJcbiAgICAgICAgaWYgKHZpc2libGUgPT09IHVuZGVmaW5lZCkgeyB2aXNpYmxlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWUgPSBbIGZyYW1lIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9icyA9IFtdO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZyYW1lLmZvckVhY2goZnVuY3Rpb24gKHNpbmdsZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2JzLnB1c2goX3RoaXMuY3JlYXRlKDAsIDAsIHNpbmdsZUZyYW1lLCB2aXNpYmxlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvYnM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBjaGlsZCBjYW4gcmVuZGVyIG9yIG5vdCwgYnkgY2hlY2tpbmcgaXRzIGB2aXNpYmxlYCBhbmQgYGFscGhhYCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNjaGlsZENhblJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBjaGlsZCAtIFRoZSBCb2IgdG8gY2hlY2sgZm9yIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gY2hpbGQgY2FuIHJlbmRlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNoaWxkQ2FuUmVuZGVyOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChjaGlsZC52aXNpYmxlICYmIGNoaWxkLmFscGhhID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBCb2JzIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgICogSWYgdGhlIEJsaXR0ZXIgaXMgZGlydHkgdGhlbiBhIG5ldyBsaXN0IGlzIGdlbmVyYXRlZCBhbmQgc3RvcmVkIGluIGByZW5kZXJMaXN0YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2dldFJlbmRlckxpc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2JbXX0gQW4gYXJyYXkgb2YgQm9iIG9iamVjdHMgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIHRoaXMgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSB0aGlzLmNoaWxkcmVuLmxpc3QuZmlsdGVyKHRoaXMuY2hpbGRDYW5SZW5kZXIsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIEJvYnMgZnJvbSB0aGUgY2hpbGRyZW4gTGlzdCBhbmQgY2xlYXJzIHRoZSBkaXJ0eSBmbGFnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnJlbW92ZUFsbCgpO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/Blitter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Blitter#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Blitter} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var list = src.getRenderList();\r\n\r\n    if (list.length === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var ctx = renderer.currentContext;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (alpha === 0)\r\n    {\r\n        //  Nothing to see, so abort early\r\n        return;\r\n    }\r\n\r\n    //  Blend Mode + Scale Mode\r\n    ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];\r\n\r\n    ctx.imageSmoothingEnabled = !(!renderer.antialias || src.frame.source.scaleMode);\r\n\r\n    var cameraScrollX = src.x - camera.scrollX * src.scrollFactorX;\r\n    var cameraScrollY = src.y - camera.scrollY * src.scrollFactorY;\r\n\r\n    ctx.save();\r\n\r\n    if (parentMatrix)\r\n    {\r\n        parentMatrix.copyToContext(ctx);\r\n    }\r\n\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    //  Render bobs\r\n    for (var i = 0; i < list.length; i++)\r\n    {\r\n        var bob = list[i];\r\n        var flip = (bob.flipX || bob.flipY);\r\n        var frame = bob.frame;\r\n        var cd = frame.canvasData;\r\n        var dx = frame.x;\r\n        var dy = frame.y;\r\n        var fx = 1;\r\n        var fy = 1;\r\n\r\n        var bobAlpha = bob.alpha * alpha;\r\n\r\n        if (bobAlpha === 0)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        ctx.globalAlpha = bobAlpha;\r\n    \r\n        if (!flip)\r\n        {\r\n            if (roundPixels)\r\n            {\r\n                dx = Math.round(dx);\r\n                dy = Math.round(dy);\r\n            }\r\n\r\n            ctx.drawImage(\r\n                frame.source.image,\r\n                cd.x,\r\n                cd.y,\r\n                cd.width,\r\n                cd.height,\r\n                dx + bob.x + cameraScrollX,\r\n                dy + bob.y + cameraScrollY,\r\n                cd.width,\r\n                cd.height\r\n            );\r\n        }\r\n        else\r\n        {\r\n            if (bob.flipX)\r\n            {\r\n                fx = -1;\r\n                dx -= cd.width;\r\n            }\r\n\r\n            if (bob.flipY)\r\n            {\r\n                fy = -1;\r\n                dy -= cd.height;\r\n            }\r\n\r\n            ctx.save();\r\n            ctx.translate(bob.x + cameraScrollX, bob.y + cameraScrollY);\r\n            ctx.scale(fx, fy);\r\n            ctx.drawImage(frame.source.image, cd.x, cd.y, cd.width, cd.height, dx, dy, cd.width, cd.height);\r\n            ctx.restore();\r\n        }\r\n    }\r\n    \r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = BlitterCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDYW52YXNSZW5kZXJlci5qcz80MzkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBCbGl0dGVyQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgbGlzdCA9IHNyYy5nZXRSZW5kZXJMaXN0KCk7XHJcblxyXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChhbHBoYSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyB0byBzZWUsIHNvIGFib3J0IGVhcmx5XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBCbGVuZCBNb2RlICsgU2NhbGUgTW9kZVxyXG4gICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbc3JjLmJsZW5kTW9kZV07XHJcblxyXG4gICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9ICEoIXJlbmRlcmVyLmFudGlhbGlhcyB8fCBzcmMuZnJhbWUuc291cmNlLnNjYWxlTW9kZSk7XHJcblxyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFggPSBzcmMueCAtIGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICB2YXIgY2FtZXJhU2Nyb2xsWSA9IHNyYy55IC0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgcGFyZW50TWF0cml4LmNvcHlUb0NvbnRleHQoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcblxyXG4gICAgLy8gIFJlbmRlciBib2JzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvYiA9IGxpc3RbaV07XHJcbiAgICAgICAgdmFyIGZsaXAgPSAoYm9iLmZsaXBYIHx8IGJvYi5mbGlwWSk7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gYm9iLmZyYW1lO1xyXG4gICAgICAgIHZhciBjZCA9IGZyYW1lLmNhbnZhc0RhdGE7XHJcbiAgICAgICAgdmFyIGR4ID0gZnJhbWUueDtcclxuICAgICAgICB2YXIgZHkgPSBmcmFtZS55O1xyXG4gICAgICAgIHZhciBmeCA9IDE7XHJcbiAgICAgICAgdmFyIGZ5ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIGJvYkFscGhhID0gYm9iLmFscGhhICogYWxwaGE7XHJcblxyXG4gICAgICAgIGlmIChib2JBbHBoYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gYm9iQWxwaGE7XHJcbiAgICBcclxuICAgICAgICBpZiAoIWZsaXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR4ID0gTWF0aC5yb3VuZChkeCk7XHJcbiAgICAgICAgICAgICAgICBkeSA9IE1hdGgucm91bmQoZHkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKFxyXG4gICAgICAgICAgICAgICAgZnJhbWUuc291cmNlLmltYWdlLFxyXG4gICAgICAgICAgICAgICAgY2QueCxcclxuICAgICAgICAgICAgICAgIGNkLnksXHJcbiAgICAgICAgICAgICAgICBjZC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGNkLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGR4ICsgYm9iLnggKyBjYW1lcmFTY3JvbGxYLFxyXG4gICAgICAgICAgICAgICAgZHkgKyBib2IueSArIGNhbWVyYVNjcm9sbFksXHJcbiAgICAgICAgICAgICAgICBjZC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGNkLmhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYm9iLmZsaXBYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmeCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZHggLT0gY2Qud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChib2IuZmxpcFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZ5ID0gLTE7XHJcbiAgICAgICAgICAgICAgICBkeSAtPSBjZC5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoYm9iLnggKyBjYW1lcmFTY3JvbGxYLCBib2IueSArIGNhbWVyYVNjcm9sbFkpO1xyXG4gICAgICAgICAgICBjdHguc2NhbGUoZngsIGZ5KTtcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShmcmFtZS5zb3VyY2UuaW1hZ2UsIGNkLngsIGNkLnksIGNkLndpZHRoLCBjZC5oZWlnaHQsIGR4LCBkeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGl0dGVyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Blitter = __webpack_require__(/*! ./Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Blitter Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Blitter Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#blitter\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Blitter} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('blitter', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n    var blitter = new Blitter(this.scene, 0, 0, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, blitter, config);\r\n\r\n    return blitter;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDcmVhdG9yLmpzP2E0MTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQywyRUFBVztBQUNqQyxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxpdHRlciA9IHJlcXVpcmUoJy4vQmxpdHRlcicpO1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEJsaXR0ZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEJsaXR0ZXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2JsaXR0ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ2JsaXR0ZXInLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuXHJcbiAgICB2YXIgYmxpdHRlciA9IG5ldyBCbGl0dGVyKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJsaXR0ZXIsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJsaXR0ZXI7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Blitter = __webpack_require__(/*! ./Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Blitter Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Blitter Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#blitter\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} key - The key of the Texture the Blitter object will use.\r\n * @param {(string|integer)} [frame] - The default Frame children of the Blitter will use.\r\n * \r\n * @return {Phaser.GameObjects.Blitter} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('blitter', function (x, y, key, frame)\r\n{\r\n    return this.displayList.add(new Blitter(this.scene, x, y, key, frame));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//  \r\n//  There are several properties available to use:\r\n//  \r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJGYWN0b3J5LmpzPzE1NjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQywyRUFBVztBQUNqQyx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlckZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGl0dGVyID0gcmVxdWlyZSgnLi9CbGl0dGVyJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBCbGl0dGVyIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQmxpdHRlciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjYmxpdHRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGUgQmxpdHRlciBvYmplY3Qgd2lsbCB1c2UuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBkZWZhdWx0IEZyYW1lIGNoaWxkcmVuIG9mIHRoZSBCbGl0dGVyIHdpbGwgdXNlLlxyXG4gKiBcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2JsaXR0ZXInLCBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBCbGl0dGVyKHRoaXMuc2NlbmUsIHgsIHksIGtleSwgZnJhbWUpKTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy8gIFxyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vLyAgXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./BlitterWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./BlitterCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJSZW5kZXIuanM/MmNjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHFHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdUdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9CbGl0dGVyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9CbGl0dGVyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Blitter#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Blitter} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var list = src.getRenderList();\r\n\r\n    if (list.length === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var pipeline = this.pipeline;\r\n\r\n    renderer.setPipeline(pipeline, src);\r\n\r\n    var cameraScrollX = camera.scrollX * src.scrollFactorX;\r\n    var cameraScrollY = camera.scrollY * src.scrollFactorY;\r\n\r\n    var calcMatrix = pipeline._tempMatrix1;\r\n\r\n    calcMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        calcMatrix.multiplyWithOffset(parentMatrix, -cameraScrollX, -cameraScrollY);\r\n\r\n        cameraScrollX = 0;\r\n        cameraScrollY = 0;\r\n    }\r\n\r\n    var blitterX = src.x - cameraScrollX;\r\n    var blitterY = src.y - cameraScrollY;\r\n    var prevTextureSourceIndex = -1;\r\n    var tintEffect = false;\r\n    var alpha = camera.alpha * src.alpha;\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    for (var index = 0; index < list.length; index++)\r\n    {\r\n        var bob = list[index];\r\n        var frame = bob.frame;\r\n        var bobAlpha = bob.alpha * alpha;\r\n\r\n        if (bobAlpha === 0)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var width = frame.width;\r\n        var height = frame.height;\r\n\r\n        var x = blitterX + bob.x + frame.x;\r\n        var y = blitterY + bob.y + frame.y;\r\n\r\n        if (bob.flipX)\r\n        {\r\n            width *= -1;\r\n            x += frame.width;\r\n        }\r\n\r\n        if (bob.flipY)\r\n        {\r\n            height *= -1;\r\n            y += frame.height;\r\n        }\r\n\r\n        var xw = x + width;\r\n        var yh = y + height;\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(xw, yh);\r\n        var ty1 = calcMatrix.getY(xw, yh);\r\n\r\n        var tint = Utils.getTintAppendFloatAlpha(bob.tint, bobAlpha);\r\n\r\n        //  Bind texture only if the Texture Source is different from before\r\n        if (frame.sourceIndex !== prevTextureSourceIndex)\r\n        {\r\n            pipeline.setTexture2D(frame.glTexture, 0);\r\n\r\n            prevTextureSourceIndex = frame.sourceIndex;\r\n        }\r\n\r\n        if (roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n        }\r\n\r\n        //  TL x/y, BL x/y, BR x/y, TR x/y\r\n        if (pipeline.batchQuad(tx0, ty0, tx0, ty1, tx1, ty1, tx1, ty0, frame.u0, frame.v0, frame.u1, frame.v1, tint, tint, tint, tint, tintEffect, frame.glTexture, 0))\r\n        {\r\n            prevTextureSourceIndex = -1;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = BlitterWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJXZWJHTFJlbmRlcmVyLmpzP2Q1MDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlcldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBCbGl0dGVyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBsaXN0ID0gc3JjLmdldFJlbmRlckxpc3QoKTtcclxuXHJcbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUsIHNyYyk7XHJcblxyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFggPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFkgPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG5cclxuICAgIGNhbGNNYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICBjYWxjTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmFTY3JvbGxYLCAtY2FtZXJhU2Nyb2xsWSk7XHJcblxyXG4gICAgICAgIGNhbWVyYVNjcm9sbFggPSAwO1xyXG4gICAgICAgIGNhbWVyYVNjcm9sbFkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBibGl0dGVyWCA9IHNyYy54IC0gY2FtZXJhU2Nyb2xsWDtcclxuICAgIHZhciBibGl0dGVyWSA9IHNyYy55IC0gY2FtZXJhU2Nyb2xsWTtcclxuICAgIHZhciBwcmV2VGV4dHVyZVNvdXJjZUluZGV4ID0gLTE7XHJcbiAgICB2YXIgdGludEVmZmVjdCA9IGZhbHNlO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG4gICAgdmFyIHJvdW5kUGl4ZWxzID0gY2FtZXJhLnJvdW5kUGl4ZWxzO1xyXG5cclxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9iID0gbGlzdFtpbmRleF07XHJcbiAgICAgICAgdmFyIGZyYW1lID0gYm9iLmZyYW1lO1xyXG4gICAgICAgIHZhciBib2JBbHBoYSA9IGJvYi5hbHBoYSAqIGFscGhhO1xyXG5cclxuICAgICAgICBpZiAoYm9iQWxwaGEgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciB4ID0gYmxpdHRlclggKyBib2IueCArIGZyYW1lLng7XHJcbiAgICAgICAgdmFyIHkgPSBibGl0dGVyWSArIGJvYi55ICsgZnJhbWUueTtcclxuXHJcbiAgICAgICAgaWYgKGJvYi5mbGlwWClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpZHRoICo9IC0xO1xyXG4gICAgICAgICAgICB4ICs9IGZyYW1lLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvYi5mbGlwWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlaWdodCAqPSAtMTtcclxuICAgICAgICAgICAgeSArPSBmcmFtZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeHcgPSB4ICsgd2lkdGg7XHJcbiAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHR4MCA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5KTtcclxuICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgsIHkpO1xyXG5cclxuICAgICAgICB2YXIgdHgxID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeWgpO1xyXG5cclxuICAgICAgICB2YXIgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKGJvYi50aW50LCBib2JBbHBoYSk7XHJcblxyXG4gICAgICAgIC8vICBCaW5kIHRleHR1cmUgb25seSBpZiB0aGUgVGV4dHVyZSBTb3VyY2UgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlXHJcbiAgICAgICAgaWYgKGZyYW1lLnNvdXJjZUluZGV4ICE9PSBwcmV2VGV4dHVyZVNvdXJjZUluZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKGZyYW1lLmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgICAgICBwcmV2VGV4dHVyZVNvdXJjZUluZGV4ID0gZnJhbWUuc291cmNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFRMIHgveSwgQkwgeC95LCBCUiB4L3ksIFRSIHgveVxyXG4gICAgICAgIGlmIChwaXBlbGluZS5iYXRjaFF1YWQodHgwLCB0eTAsIHR4MCwgdHkxLCB0eDEsIHR5MSwgdHgxLCB0eTAsIGZyYW1lLnUwLCBmcmFtZS52MCwgZnJhbWUudTEsIGZyYW1lLnYxLCB0aW50LCB0aW50LCB0aW50LCB0aW50LCB0aW50RWZmZWN0LCBmcmFtZS5nbFRleHR1cmUsIDApKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJldlRleHR1cmVTb3VyY2VJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmxpdHRlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/blitter/Bob.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/blitter/Bob.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Bob Game Object.\r\n *\r\n * A Bob belongs to a Blitter Game Object. The Blitter is responsible for managing and rendering this object.\r\n *\r\n * A Bob has a position, alpha value and a frame from a texture that it uses to render with. You can also toggle\r\n * the flipped and visible state of the Bob. The Frame the Bob uses to render can be changed dynamically, but it\r\n * must be a Frame within the Texture used by the parent Blitter.\r\n *\r\n * Bob positions are relative to the Blitter parent. So if you move the Blitter parent, all Bob children will\r\n * have their positions impacted by this change as well.\r\n *\r\n * You can manipulate Bob objects directly from your game code, but the creation and destruction of them should be\r\n * handled via the Blitter parent.\r\n *\r\n * @class Bob\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Blitter} blitter - The parent Blitter object is responsible for updating this Bob.\r\n * @param {number} x - The horizontal position of this Game Object in the world, relative to the parent Blitter position.\r\n * @param {number} y - The vertical position of this Game Object in the world, relative to the parent Blitter position.\r\n * @param {(string|integer)} frame - The Frame this Bob will render with, as defined in the Texture the parent Blitter is using.\r\n * @param {boolean} visible - Should the Bob render visible or not to start with?\r\n */\r\nvar Bob = new Class({\r\n\r\n    initialize:\r\n\r\n    function Bob (blitter, x, y, frame, visible)\r\n    {\r\n        /**\r\n         * The Blitter object that this Bob belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#parent\r\n         * @type {Phaser.GameObjects.Blitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = blitter;\r\n\r\n        /**\r\n         * The x position of this Bob, relative to the x position of the Blitter.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#x\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y position of this Bob, relative to the y position of the Blitter.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#y\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The frame that the Bob uses to render with.\r\n         * To change the frame use the `Bob.setFrame` method.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @protected\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = frame;\r\n\r\n        /**\r\n         * A blank object which can be used to store data related to this Bob in.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#data\r\n         * @type {object}\r\n         * @default {}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = {};\r\n\r\n        /**\r\n         * The tint value of this Bob.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#tint\r\n         * @type {number}\r\n         * @default 0xffffff\r\n         * @since 3.20.0\r\n         */\r\n        this.tint = 0xffffff;\r\n\r\n        /**\r\n         * The visible state of this Bob.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#_visible\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._visible = visible;\r\n\r\n        /**\r\n         * The alpha value of this Bob.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#_alpha\r\n         * @type {number}\r\n         * @private\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this._alpha = 1;\r\n\r\n        /**\r\n         * The horizontally flipped state of the Bob.\r\n         * A Bob that is flipped horizontally will render inversed on the horizontal axis.\r\n         * Flipping always takes place from the middle of the texture.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#flipX\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.flipX = false;\r\n\r\n        /**\r\n         * The vertically flipped state of the Bob.\r\n         * A Bob that is flipped vertically will render inversed on the vertical axis (i.e. upside down)\r\n         * Flipping always takes place from the middle of the texture.\r\n         *\r\n         * @name Phaser.GameObjects.Bob#flipY\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.flipY = false;\r\n    },\r\n\r\n    /**\r\n     * Changes the Texture Frame being used by this Bob.\r\n     * The frame must be part of the Texture the parent Blitter is using.\r\n     * If no value is given it will use the default frame of the Blitter parent.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The frame to be used during rendering.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setFrame: function (frame)\r\n    {\r\n        if (frame === undefined)\r\n        {\r\n            this.frame = this.parent.frame;\r\n        }\r\n        else if (frame instanceof Frame && frame.texture === this.parent.texture)\r\n        {\r\n            this.frame = frame;\r\n        }\r\n        else\r\n        {\r\n            this.frame = this.parent.texture.get(frame);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the horizontal and vertical flipped state of this Bob back to their default un-flipped state.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#resetFlip\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    resetFlip: function ()\r\n    {\r\n        this.flipX = false;\r\n        this.flipY = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets this Bob.\r\n     *\r\n     * Changes the position to the values given, and optionally changes the frame.\r\n     *\r\n     * Also resets the flipX and flipY values, sets alpha back to 1 and visible to true.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The Frame the Bob will use. It _must_ be part of the Texture the parent Blitter object is using.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    reset: function (x, y, frame)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        this.flipX = false;\r\n        this.flipY = false;\r\n\r\n        this._alpha = 1;\r\n        this._visible = true;\r\n\r\n        this.parent.dirty = true;\r\n\r\n        if (frame)\r\n        {\r\n            this.setFrame(frame);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Changes the position of this Bob to the values given.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setPosition\r\n     * @since 3.20.0\r\n     *\r\n     * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal flipped state of this Bob.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setFlipX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setFlipX: function (value)\r\n    {\r\n        this.flipX = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical flipped state of this Bob.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setFlipY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setFlipY: function (value)\r\n    {\r\n        this.flipY = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical flipped state of this Bob.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setFlip\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n     * @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setFlip: function (x, y)\r\n    {\r\n        this.flipX = x;\r\n        this.flipY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the visibility of this Bob.\r\n     * \r\n     * An invisible Bob will skip rendering.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The visible state of the Game Object.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setVisible: function (value)\r\n    {\r\n        this.visible = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the Alpha level of this Bob. The alpha controls the opacity of the Game Object as it renders.\r\n     * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n     * \r\n     * A Bob with alpha 0 will skip rendering.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The alpha value used for this Bob. Between 0 and 1.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setAlpha: function (value)\r\n    {\r\n        this.alpha = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the tint of this Bob.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#setTint\r\n     * @since 3.20.0\r\n     *\r\n     * @param {number} value - The tint value used for this Bob. Between 0 and 0xffffff.\r\n     *\r\n     * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n     */\r\n    setTint: function (value)\r\n    {\r\n        this.tint = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Bob instance.\r\n     * Removes itself from the Blitter and clears the parent, frame and data properties.\r\n     *\r\n     * @method Phaser.GameObjects.Bob#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.parent.dirty = true;\r\n\r\n        this.parent.children.remove(this);\r\n\r\n        this.parent = undefined;\r\n        this.frame = undefined;\r\n        this.data = undefined;\r\n    },\r\n\r\n    /**\r\n     * The visible state of the Bob.\r\n     * \r\n     * An invisible Bob will skip rendering.\r\n     *\r\n     * @name Phaser.GameObjects.Bob#visible\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    visible: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._visible;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.parent.dirty |= (this._visible !== value);\r\n            this._visible = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha value of the Bob, between 0 and 1.\r\n     * \r\n     * A Bob with alpha 0 will skip rendering.\r\n     *\r\n     * @name Phaser.GameObjects.Bob#alpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    alpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alpha;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.parent.dirty |= ((this._alpha > 0) !== (value > 0));\r\n            this._alpha = value;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Bob;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JvYi5qcz8zNDIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQm9iLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRnJhbWUgPSByZXF1aXJlKCcuLi8uLi90ZXh0dXJlcy9GcmFtZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBCb2IgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgQm9iIGJlbG9uZ3MgdG8gYSBCbGl0dGVyIEdhbWUgT2JqZWN0LiBUaGUgQmxpdHRlciBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgYW5kIHJlbmRlcmluZyB0aGlzIG9iamVjdC5cclxuICpcclxuICogQSBCb2IgaGFzIGEgcG9zaXRpb24sIGFscGhhIHZhbHVlIGFuZCBhIGZyYW1lIGZyb20gYSB0ZXh0dXJlIHRoYXQgaXQgdXNlcyB0byByZW5kZXIgd2l0aC4gWW91IGNhbiBhbHNvIHRvZ2dsZVxyXG4gKiB0aGUgZmxpcHBlZCBhbmQgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgQm9iLiBUaGUgRnJhbWUgdGhlIEJvYiB1c2VzIHRvIHJlbmRlciBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseSwgYnV0IGl0XHJcbiAqIG11c3QgYmUgYSBGcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUgdXNlZCBieSB0aGUgcGFyZW50IEJsaXR0ZXIuXHJcbiAqXHJcbiAqIEJvYiBwb3NpdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBCbGl0dGVyIHBhcmVudC4gU28gaWYgeW91IG1vdmUgdGhlIEJsaXR0ZXIgcGFyZW50LCBhbGwgQm9iIGNoaWxkcmVuIHdpbGxcclxuICogaGF2ZSB0aGVpciBwb3NpdGlvbnMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UgYXMgd2VsbC5cclxuICpcclxuICogWW91IGNhbiBtYW5pcHVsYXRlIEJvYiBvYmplY3RzIGRpcmVjdGx5IGZyb20geW91ciBnYW1lIGNvZGUsIGJ1dCB0aGUgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIHRoZW0gc2hvdWxkIGJlXHJcbiAqIGhhbmRsZWQgdmlhIHRoZSBCbGl0dGVyIHBhcmVudC5cclxuICpcclxuICogQGNsYXNzIEJvYlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlcn0gYmxpdHRlciAtIFRoZSBwYXJlbnQgQmxpdHRlciBvYmplY3QgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoaXMgQm9iLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEJsaXR0ZXIgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEJsaXR0ZXIgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgRnJhbWUgdGhpcyBCb2Igd2lsbCByZW5kZXIgd2l0aCwgYXMgZGVmaW5lZCBpbiB0aGUgVGV4dHVyZSB0aGUgcGFyZW50IEJsaXR0ZXIgaXMgdXNpbmcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJsZSAtIFNob3VsZCB0aGUgQm9iIHJlbmRlciB2aXNpYmxlIG9yIG5vdCB0byBzdGFydCB3aXRoP1xyXG4gKi9cclxudmFyIEJvYiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCb2IgKGJsaXR0ZXIsIHgsIHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCbGl0dGVyIG9iamVjdCB0aGF0IHRoaXMgQm9iIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IGJsaXR0ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgQm9iLCByZWxhdGl2ZSB0byB0aGUgeCBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBCb2IsIHJlbGF0aXZlIHRvIHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgdGhhdCB0aGUgQm9iIHVzZXMgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgICAgICogVG8gY2hhbmdlIHRoZSBmcmFtZSB1c2UgdGhlIGBCb2Iuc2V0RnJhbWVgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgYmxhbmsgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgcmVsYXRlZCB0byB0aGlzIEJvYiBpbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQGRlZmF1bHQge31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbnQgdmFsdWUgb2YgdGhpcyBCb2IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3RpbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDB4ZmZmZmZmXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGlzIEJvYi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjX3Zpc2libGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhpcyBCb2IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI19hbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbGx5IGZsaXBwZWQgc3RhdGUgb2YgdGhlIEJvYi5cclxuICAgICAgICAgKiBBIEJvYiB0aGF0IGlzIGZsaXBwZWQgaG9yaXpvbnRhbGx5IHdpbGwgcmVuZGVyIGludmVyc2VkIG9uIHRoZSBob3Jpem9udGFsIGF4aXMuXHJcbiAgICAgICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZmxpcFhcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZsaXBYID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbGx5IGZsaXBwZWQgc3RhdGUgb2YgdGhlIEJvYi5cclxuICAgICAgICAgKiBBIEJvYiB0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgdmVydGljYWwgYXhpcyAoaS5lLiB1cHNpZGUgZG93bilcclxuICAgICAgICAgKiBGbGlwcGluZyBhbHdheXMgdGFrZXMgcGxhY2UgZnJvbSB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNmbGlwWVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBUZXh0dXJlIEZyYW1lIGJlaW5nIHVzZWQgYnkgdGhpcyBCb2IuXHJcbiAgICAgKiBUaGUgZnJhbWUgbXVzdCBiZSBwYXJ0IG9mIHRoZSBUZXh0dXJlIHRoZSBwYXJlbnQgQmxpdHRlciBpcyB1c2luZy5cclxuICAgICAqIElmIG5vIHZhbHVlIGlzIGdpdmVuIGl0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGZyYW1lIG9mIHRoZSBCbGl0dGVyIHBhcmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2Ijc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UZXh0dXJlcy5GcmFtZSl9IFtmcmFtZV0gLSBUaGUgZnJhbWUgdG8gYmUgdXNlZCBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2J9IFRoaXMgQm9iIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMucGFyZW50LmZyYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmcmFtZSBpbnN0YW5jZW9mIEZyYW1lICYmIGZyYW1lLnRleHR1cmUgPT09IHRoaXMucGFyZW50LnRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLnBhcmVudC50ZXh0dXJlLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBCb2IgYmFjayB0byB0aGVpciBkZWZhdWx0IHVuLWZsaXBwZWQgc3RhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Jlc2V0RmxpcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RmxpcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBYID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBCb2IuXHJcbiAgICAgKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gdG8gdGhlIHZhbHVlcyBnaXZlbiwgYW5kIG9wdGlvbmFsbHkgY2hhbmdlcyB0aGUgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyByZXNldHMgdGhlIGZsaXBYIGFuZCBmbGlwWSB2YWx1ZXMsIHNldHMgYWxwaGEgYmFjayB0byAxIGFuZCB2aXNpYmxlIHRvIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBCb2IuIEJvYiBjb29yZGluYXRlIGFyZSByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gb2YgdGhlIEJsaXR0ZXIgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UZXh0dXJlcy5GcmFtZSl9IFtmcmFtZV0gLSBUaGUgRnJhbWUgdGhlIEJvYiB3aWxsIHVzZS4gSXQgX211c3RfIGJlIHBhcnQgb2YgdGhlIFRleHR1cmUgdGhlIHBhcmVudCBCbGl0dGVyIG9iamVjdCBpcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBUaGlzIEJvYiBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICh4LCB5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxpcFggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX2FscGhhID0gMTtcclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnQuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZyYW1lKGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgQm9iIHRvIHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEJvYi4gQm9iIGNvb3JkaW5hdGUgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEJvYi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2Ijc2V0RmxpcFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXBYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgQm9iLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRGbGlwWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBUaGlzIEJvYiBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBCb2IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldEZsaXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0geCAtIFRoZSBob3Jpem9udGFsIGZsaXBwZWQgc3RhdGUuIGBmYWxzZWAgZm9yIG5vIGZsaXAsIG9yIGB0cnVlYCB0byBiZSBmbGlwcGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB5IC0gVGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXA6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmxpcFggPSB4O1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgQm9iLlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBpbnZpc2libGUgQm9iIHdpbGwgc2tpcCByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldFZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIEJvYi4gVGhlIGFscGhhIGNvbnRyb2xzIHRoZSBvcGFjaXR5IG9mIHRoZSBHYW1lIE9iamVjdCBhcyBpdCByZW5kZXJzLlxyXG4gICAgICogQWxwaGEgdmFsdWVzIGFyZSBwcm92aWRlZCBhcyBhIGZsb2F0IGJldHdlZW4gMCwgZnVsbHkgdHJhbnNwYXJlbnQsIGFuZCAxLCBmdWxseSBvcGFxdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEEgQm9iIHdpdGggYWxwaGEgMCB3aWxsIHNraXAgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgZm9yIHRoaXMgQm9iLiBCZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0aW50IG9mIHRoaXMgQm9iLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRUaW50XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHRpbnQgdmFsdWUgdXNlZCBmb3IgdGhpcyBCb2IuIEJldHdlZW4gMCBhbmQgMHhmZmZmZmYuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbnQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRpbnQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCb2IgaW5zdGFuY2UuXHJcbiAgICAgKiBSZW1vdmVzIGl0c2VsZiBmcm9tIHRoZSBCbGl0dGVyIGFuZCBjbGVhcnMgdGhlIHBhcmVudCwgZnJhbWUgYW5kIGRhdGEgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudC5jaGlsZHJlbi5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBCb2IuXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGludmlzaWJsZSBCb2Igd2lsbCBza2lwIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Zpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZpc2libGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5kaXJ0eSB8PSAodGhpcy5fdmlzaWJsZSAhPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhlIEJvYiwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogXHJcbiAgICAgKiBBIEJvYiB3aXRoIGFscGhhIDAgd2lsbCBza2lwIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI2FscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRpcnR5IHw9ICgodGhpcy5fYWxwaGEgPiAwKSAhPT0gKHZhbHVlID4gMCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQm9iO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/Bob.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Alpha.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Alpha.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\n\r\n//  bitmask flag for GameObject.renderMask\r\nvar _FLAG = 2; // 0010\r\n\r\n/**\r\n * Provides methods used for setting the alpha properties of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Alpha\r\n * @since 3.0.0\r\n */\r\n\r\nvar Alpha = {\r\n\r\n    /**\r\n     * Private internal value. Holds the global alpha value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#_alpha\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _alpha: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the top-left alpha value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#_alphaTL\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _alphaTL: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the top-right alpha value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#_alphaTR\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _alphaTR: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the bottom-left alpha value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#_alphaBL\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _alphaBL: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the bottom-right alpha value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#_alphaBR\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _alphaBR: 1,\r\n\r\n    /**\r\n     * Clears all alpha values associated with this Game Object.\r\n     *\r\n     * Immediately sets the alpha levels back to 1 (fully opaque).\r\n     *\r\n     * @method Phaser.GameObjects.Components.Alpha#clearAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    clearAlpha: function ()\r\n    {\r\n        return this.setAlpha(1);\r\n    },\r\n\r\n    /**\r\n     * Set the Alpha level of this Game Object. The alpha controls the opacity of the Game Object as it renders.\r\n     * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n     *\r\n     * If your game is running under WebGL you can optionally specify four different alpha values, each of which\r\n     * correspond to the four corners of the Game Object. Under Canvas only the `topLeft` value given is used.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Alpha#setAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [topLeft=1] - The alpha value used for the top-left of the Game Object. If this is the only value given it's applied across the whole Game Object.\r\n     * @param {number} [topRight] - The alpha value used for the top-right of the Game Object. WebGL only.\r\n     * @param {number} [bottomLeft] - The alpha value used for the bottom-left of the Game Object. WebGL only.\r\n     * @param {number} [bottomRight] - The alpha value used for the bottom-right of the Game Object. WebGL only.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setAlpha: function (topLeft, topRight, bottomLeft, bottomRight)\r\n    {\r\n        if (topLeft === undefined) { topLeft = 1; }\r\n\r\n        //  Treat as if there is only one alpha value for the whole Game Object\r\n        if (topRight === undefined)\r\n        {\r\n            this.alpha = topLeft;\r\n        }\r\n        else\r\n        {\r\n            this._alphaTL = Clamp(topLeft, 0, 1);\r\n            this._alphaTR = Clamp(topRight, 0, 1);\r\n            this._alphaBL = Clamp(bottomLeft, 0, 1);\r\n            this._alphaBR = Clamp(bottomRight, 0, 1);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The alpha value of the Game Object.\r\n     *\r\n     * This is a global value, impacting the entire Game Object, not just a region of it.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#alpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    alpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alpha;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var v = Clamp(value, 0, 1);\r\n\r\n            this._alpha = v;\r\n            this._alphaTL = v;\r\n            this._alphaTR = v;\r\n            this._alphaBL = v;\r\n            this._alphaBR = v;\r\n\r\n            if (v === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha value starting from the top-left of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#alphaTopLeft\r\n     * @type {number}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    alphaTopLeft: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alphaTL;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var v = Clamp(value, 0, 1);\r\n\r\n            this._alphaTL = v;\r\n\r\n            if (v !== 0)\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha value starting from the top-right of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#alphaTopRight\r\n     * @type {number}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    alphaTopRight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alphaTR;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var v = Clamp(value, 0, 1);\r\n\r\n            this._alphaTR = v;\r\n\r\n            if (v !== 0)\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha value starting from the bottom-left of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#alphaBottomLeft\r\n     * @type {number}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    alphaBottomLeft: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alphaBL;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var v = Clamp(value, 0, 1);\r\n\r\n            this._alphaBL = v;\r\n\r\n            if (v !== 0)\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The alpha value starting from the bottom-right of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Alpha#alphaBottomRight\r\n     * @type {number}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    alphaBottomRight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._alphaBR;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var v = Clamp(value, 0, 1);\r\n\r\n            this._alphaBR = v;\r\n\r\n            if (v !== 0)\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Alpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FscGhhLmpzPzg2ZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRXRDO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FscGhhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0NsYW1wJyk7XHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gMjsgLy8gMDAxMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgYWxwaGEgcHJvcGVydGllcyBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgQWxwaGEgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgZ2xvYmFsIGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX2FscGhhOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHRvcC1sZWZ0IGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYVRMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYWxwaGFUTDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSB0b3AtcmlnaHQgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjX2FscGhhVFJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF9hbHBoYVRSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1sZWZ0IGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYUJMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYWxwaGFCTDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSBib3R0b20tcmlnaHQgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjX2FscGhhQlJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF9hbHBoYUJSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCBhbHBoYSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSW1tZWRpYXRlbHkgc2V0cyB0aGUgYWxwaGEgbGV2ZWxzIGJhY2sgdG8gMSAoZnVsbHkgb3BhcXVlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI2NsZWFyQWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyQWxwaGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0QWxwaGEoMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIEdhbWUgT2JqZWN0LiBUaGUgYWxwaGEgY29udHJvbHMgdGhlIG9wYWNpdHkgb2YgdGhlIEdhbWUgT2JqZWN0IGFzIGl0IHJlbmRlcnMuXHJcbiAgICAgKiBBbHBoYSB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGEgZmxvYXQgYmV0d2VlbiAwLCBmdWxseSB0cmFuc3BhcmVudCwgYW5kIDEsIGZ1bGx5IG9wYXF1ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3VyIGdhbWUgaXMgcnVubmluZyB1bmRlciBXZWJHTCB5b3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBmb3VyIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMsIGVhY2ggb2Ygd2hpY2hcclxuICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIGZvdXIgY29ybmVycyBvZiB0aGUgR2FtZSBPYmplY3QuIFVuZGVyIENhbnZhcyBvbmx5IHRoZSBgdG9wTGVmdGAgdmFsdWUgZ2l2ZW4gaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RvcExlZnQ9MV0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBmb3IgdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgdGhpcyBpcyB0aGUgb25seSB2YWx1ZSBnaXZlbiBpdCdzIGFwcGxpZWQgYWNyb3NzIHRoZSB3aG9sZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgZm9yIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LiBXZWJHTCBvbmx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21MZWZ0XSAtIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIGZvciB0aGUgYm90dG9tLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LiBXZWJHTCBvbmx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBmb3IgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuIFdlYkdMIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvcExlZnQgPT09IHVuZGVmaW5lZCkgeyB0b3BMZWZ0ID0gMTsgfVxyXG5cclxuICAgICAgICAvLyAgVHJlYXQgYXMgaWYgdGhlcmUgaXMgb25seSBvbmUgYWxwaGEgdmFsdWUgZm9yIHRoZSB3aG9sZSBHYW1lIE9iamVjdFxyXG4gICAgICAgIGlmICh0b3BSaWdodCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9IHRvcExlZnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVEwgPSBDbGFtcCh0b3BMZWZ0LCAwLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFUUiA9IENsYW1wKHRvcFJpZ2h0LCAwLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IENsYW1wKGJvdHRvbUxlZnQsIDAsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYUJSID0gQ2xhbXAoYm90dG9tUmlnaHQsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIGEgZ2xvYmFsIHZhbHVlLCBpbXBhY3RpbmcgdGhlIGVudGlyZSBHYW1lIE9iamVjdCwgbm90IGp1c3QgYSByZWdpb24gb2YgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVEwgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYVRSID0gdjtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhQlIgPSB2O1xyXG5cclxuICAgICAgICAgICAgaWYgKHYgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgJj0gfl9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHN0YXJ0aW5nIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYSNhbHBoYVRvcExlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGFUb3BMZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYVRMO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYVRMID0gdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgc3RhcnRpbmcgZnJvbSB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYSNhbHBoYVRvcFJpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhVG9wUmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhVFI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdiA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVFIgPSB2O1xyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSBzdGFydGluZyBmcm9tIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFCb3R0b21MZWZ0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhQm90dG9tTGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxwaGFCTDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gQ2xhbXAodmFsdWUsIDAsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IHY7XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHN0YXJ0aW5nIGZyb20gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFCb3R0b21SaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBhbHBoYUJvdHRvbVJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYUJSO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYUJSID0gdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Alpha.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Animation.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Animation.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseAnimation = __webpack_require__(/*! ../../animations/Animation */ \"./node_modules/phaser/src/animations/Animation.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../../animations/events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Game Object Animation Controller.\r\n *\r\n * This controller lives as an instance within a Game Object, accessible as `sprite.anims`.\r\n *\r\n * @class Animation\r\n * @memberof Phaser.GameObjects.Components\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} parent - The Game Object to which this animation controller belongs.\r\n */\r\nvar Animation = new Class({\r\n\r\n    initialize:\r\n\r\n    function Animation (parent)\r\n    {\r\n        /**\r\n         * The Game Object to which this animation controller belongs.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#parent\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = parent;\r\n\r\n        /**\r\n         * A reference to the global Animation Manager.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#animationManager\r\n         * @type {Phaser.Animations.AnimationManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.animationManager = parent.scene.sys.anims;\r\n\r\n        this.animationManager.once(Events.REMOVE_ANIMATION, this.remove, this);\r\n\r\n        /**\r\n         * Is an animation currently playing or not?\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#isPlaying\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isPlaying = false;\r\n\r\n        /**\r\n         * The current Animation loaded into this Animation Controller.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#currentAnim\r\n         * @type {?Phaser.Animations.Animation}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentAnim = null;\r\n\r\n        /**\r\n         * The current AnimationFrame being displayed by this Animation Controller.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#currentFrame\r\n         * @type {?Phaser.Animations.AnimationFrame}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentFrame = null;\r\n\r\n        /**\r\n         * The key of the next Animation to be loaded into this Animation Controller when the current animation completes.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#nextAnim\r\n         * @type {?string}\r\n         * @default null\r\n         * @since 3.16.0\r\n         */\r\n        this.nextAnim = null;\r\n\r\n        /**\r\n         * Time scale factor.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_timeScale\r\n         * @type {number}\r\n         * @private\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this._timeScale = 1;\r\n\r\n        /**\r\n         * The frame rate of playback in frames per second.\r\n         * The default is 24 if the `duration` property is `null`.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#frameRate\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.frameRate = 0;\r\n\r\n        /**\r\n         * How long the animation should play for, in milliseconds.\r\n         * If the `frameRate` property has been set then it overrides this value,\r\n         * otherwise the `frameRate` is derived from `duration`.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#duration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * ms per frame, not including frame specific modifiers that may be present in the Animation data.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#msPerFrame\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.msPerFrame = 0;\r\n\r\n        /**\r\n         * Skip frames if the time lags, or always advanced anyway?\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#skipMissedFrames\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.skipMissedFrames = true;\r\n\r\n        /**\r\n         * A delay before starting playback, in milliseconds.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_delay\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._delay = 0;\r\n\r\n        /**\r\n         * Number of times to repeat the animation (-1 for infinity)\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_repeat\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._repeat = 0;\r\n\r\n        /**\r\n         * Delay before the repeat starts, in milliseconds.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_repeatDelay\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._repeatDelay = 0;\r\n\r\n        /**\r\n         * Should the animation yoyo? (reverse back down to the start) before repeating?\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_yoyo\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._yoyo = false;\r\n\r\n        /**\r\n         * Will the playhead move forwards (`true`) or in reverse (`false`).\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#forward\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.forward = true;\r\n\r\n        /**\r\n         * An Internal trigger that's play the animation in reverse mode ('true') or not ('false'),\r\n         * needed because forward can be changed by yoyo feature.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_reverse\r\n         * @type {boolean}\r\n         * @default false\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._reverse = false;\r\n\r\n        /**\r\n         * Internal time overflow accumulator.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#accumulator\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accumulator = 0;\r\n\r\n        /**\r\n         * The time point at which the next animation frame will change.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#nextTick\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.nextTick = 0;\r\n\r\n        /**\r\n         * An internal counter keeping track of how many repeats are left to play.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#repeatCounter\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.repeatCounter = 0;\r\n\r\n        /**\r\n         * An internal flag keeping track of pending repeats.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#pendingRepeat\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.pendingRepeat = false;\r\n\r\n        /**\r\n         * Is the Animation paused?\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_paused\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._paused = false;\r\n\r\n        /**\r\n         * Was the animation previously playing before being paused?\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_wasPlaying\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._wasPlaying = false;\r\n\r\n        /**\r\n         * Internal property tracking if this Animation is waiting to stop.\r\n         *\r\n         * 0 = No\r\n         * 1 = Waiting for ms to pass\r\n         * 2 = Waiting for repeat\r\n         * 3 = Waiting for specific frame\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_pendingStop\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._pendingStop = 0;\r\n\r\n        /**\r\n         * Internal property used by _pendingStop.\r\n         *\r\n         * @name Phaser.GameObjects.Components.Animation#_pendingStopValue\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._pendingStopValue;\r\n    },\r\n\r\n    /**\r\n     * Sets an animation to be played immediately after the current one completes.\r\n     * \r\n     * The current animation must enter a 'completed' state for this to happen, i.e. finish all of its repeats, delays, etc, or have the `stop` method called directly on it.\r\n     * \r\n     * An animation set to repeat forever will never enter a completed state.\r\n     * \r\n     * You can chain a new animation at any point, including before the current one starts playing, during it, or when it ends (via its `animationcomplete` callback).\r\n     * Chained animations are specific to a Game Object, meaning different Game Objects can have different chained animations without impacting the global animation they're playing.\r\n     * \r\n     * Call this method with no arguments to reset the chained animation.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#chain\r\n     * @since 3.16.0\r\n     *\r\n     * @param {(string|Phaser.Animations.Animation)} [key] - The string-based key of the animation to play next, as defined previously in the Animation Manager. Or an Animation instance.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    chain: function (key)\r\n    {\r\n        if (key instanceof BaseAnimation)\r\n        {\r\n            key = key.key;\r\n        }\r\n\r\n        this.nextAnim = key;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Sets the amount of time, in milliseconds, that the animation will be delayed before starting playback.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setDelay\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} [value=0] - The amount of time, in milliseconds, to wait before starting playback.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    setDelay: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this._delay = value;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Gets the amount of time, in milliseconds that the animation will be delayed before starting playback.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getDelay\r\n     * @since 3.4.0\r\n     *\r\n     * @return {integer} The amount of time, in milliseconds, the Animation will wait before starting playback.\r\n     */\r\n    getDelay: function ()\r\n    {\r\n        return this._delay;\r\n    },\r\n\r\n    /**\r\n     * Waits for the specified delay, in milliseconds, then starts playback of the requested animation.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#delayedPlay\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} delay - The delay, in milliseconds, to wait before starting the animation playing.\r\n     * @param {string} key - The key of the animation to play.\r\n     * @param {integer} [startFrame=0] - The frame of the animation to start from.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    delayedPlay: function (delay, key, startFrame)\r\n    {\r\n        this.play(key, true, startFrame);\r\n\r\n        this.nextTick += delay;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Returns the key of the animation currently loaded into this component.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getCurrentKey\r\n     * @since 3.0.0\r\n     *\r\n     * @return {string} The key of the Animation loaded into this component.\r\n     */\r\n    getCurrentKey: function ()\r\n    {\r\n        if (this.currentAnim)\r\n        {\r\n            return this.currentAnim.key;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method used to load an animation into this component.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#load\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the animation to load.\r\n     * @param {integer} [startFrame=0] - The start frame of the animation to load.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    load: function (key, startFrame)\r\n    {\r\n        if (startFrame === undefined) { startFrame = 0; }\r\n\r\n        if (this.isPlaying)\r\n        {\r\n            this.stop();\r\n        }\r\n\r\n        //  Load the new animation in\r\n        this.animationManager.load(this, key, startFrame);\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Pause the current animation and set the `isPlaying` property to `false`.\r\n     * You can optionally pause it at a specific frame.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} [atFrame] - An optional frame to set after pausing the animation.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    pause: function (atFrame)\r\n    {\r\n        if (!this._paused)\r\n        {\r\n            this._paused = true;\r\n            this._wasPlaying = this.isPlaying;\r\n            this.isPlaying = false;\r\n        }\r\n\r\n        if (atFrame !== undefined)\r\n        {\r\n            this.updateFrame(atFrame);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Resumes playback of a paused animation and sets the `isPlaying` property to `true`.\r\n     * You can optionally tell it to start playback from a specific frame.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} [fromFrame] - An optional frame to set before restarting playback.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    resume: function (fromFrame)\r\n    {\r\n        if (this._paused)\r\n        {\r\n            this._paused = false;\r\n            this.isPlaying = this._wasPlaying;\r\n        }\r\n\r\n        if (fromFrame !== undefined)\r\n        {\r\n            this.updateFrame(fromFrame);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * `true` if the current animation is paused, otherwise `false`.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Animation#isPaused\r\n     * @readonly\r\n     * @type {boolean}\r\n     * @since 3.4.0\r\n     */\r\n    isPaused: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._paused;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Plays an Animation on a Game Object that has the Animation component, such as a Sprite.\r\n     * \r\n     * Animations are stored in the global Animation Manager and are referenced by a unique string-based key.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#play\r\n     * @fires Phaser.GameObjects.Components.Animation#onStartEvent\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Animations.Animation)} key - The string-based key of the animation to play, as defined previously in the Animation Manager. Or an Animation instance.\r\n     * @param {boolean} [ignoreIfPlaying=false] - If this animation is already playing then ignore this call.\r\n     * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    play: function (key, ignoreIfPlaying, startFrame)\r\n    {\r\n        if (ignoreIfPlaying === undefined) { ignoreIfPlaying = false; }\r\n        if (startFrame === undefined) { startFrame = 0; }\r\n\r\n        if (key instanceof BaseAnimation)\r\n        {\r\n            key = key.key;\r\n        }\r\n\r\n        if (ignoreIfPlaying && this.isPlaying && this.currentAnim.key === key)\r\n        {\r\n            return this.parent;\r\n        }\r\n\r\n        this.forward = true;\r\n        this._reverse = false;\r\n\r\n        return this._startAnimation(key, startFrame);\r\n    },\r\n\r\n    /**\r\n     * Plays an Animation (in reverse mode) on the Game Object that owns this Animation Component.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#playReverse\r\n     * @fires Phaser.GameObjects.Components.Animation#onStartEvent\r\n     * @since 3.12.0\r\n     *\r\n     * @param {(string|Phaser.Animations.Animation)} key - The string-based key of the animation to play, as defined previously in the Animation Manager. Or an Animation instance.\r\n     * @param {boolean} [ignoreIfPlaying=false] - If an animation is already playing then ignore this call.\r\n     * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    playReverse: function (key, ignoreIfPlaying, startFrame)\r\n    {\r\n        if (ignoreIfPlaying === undefined) { ignoreIfPlaying = false; }\r\n        if (startFrame === undefined) { startFrame = 0; }\r\n\r\n        if (key instanceof BaseAnimation)\r\n        {\r\n            key = key.key;\r\n        }\r\n\r\n        if (ignoreIfPlaying && this.isPlaying && this.currentAnim.key === key)\r\n        {\r\n            return this.parent;\r\n        }\r\n\r\n        this.forward = false;\r\n        this._reverse = true;\r\n\r\n        return this._startAnimation(key, startFrame);\r\n    },\r\n\r\n    /**\r\n     * Load an Animation and fires 'onStartEvent' event, extracted from 'play' method.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#_startAnimation\r\n     * @fires Phaser.Animations.Events#START_ANIMATION_EVENT\r\n     * @fires Phaser.Animations.Events#SPRITE_START_ANIMATION_EVENT\r\n     * @fires Phaser.Animations.Events#SPRITE_START_KEY_ANIMATION_EVENT\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The string-based key of the animation to play, as defined previously in the Animation Manager.\r\n     * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    _startAnimation: function (key, startFrame)\r\n    {\r\n        this.load(key, startFrame);\r\n\r\n        var anim = this.currentAnim;\r\n        var gameObject = this.parent;\r\n\r\n        if (!anim)\r\n        {\r\n            return gameObject;\r\n        }\r\n\r\n        //  Should give us 9,007,199,254,740,991 safe repeats\r\n        this.repeatCounter = (this._repeat === -1) ? Number.MAX_VALUE : this._repeat;\r\n\r\n        anim.getFirstTick(this);\r\n\r\n        this.isPlaying = true;\r\n        this.pendingRepeat = false;\r\n\r\n        if (anim.showOnStart)\r\n        {\r\n            gameObject.visible = true;\r\n        }\r\n\r\n        var frame = this.currentFrame;\r\n\r\n        anim.emit(Events.ANIMATION_START, anim, frame, gameObject);\r\n\r\n        gameObject.emit(Events.SPRITE_ANIMATION_KEY_START + key, anim, frame, gameObject);\r\n\r\n        gameObject.emit(Events.SPRITE_ANIMATION_START, anim, frame, gameObject);\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Reverse the Animation that is already playing on the Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#reverse\r\n     * @since 3.12.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    reverse: function ()\r\n    {\r\n        if (this.isPlaying)\r\n        {\r\n            this._reverse = !this._reverse;\r\n\r\n            this.forward = !this.forward;\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Returns a value between 0 and 1 indicating how far this animation is through, ignoring repeats and yoyos.\r\n     * If the animation has a non-zero repeat defined, `getProgress` and `getTotalProgress` will be different\r\n     * because `getProgress` doesn't include any repeats or repeat delays, whereas `getTotalProgress` does.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getProgress\r\n     * @since 3.4.0\r\n     *\r\n     * @return {number} The progress of the current animation, between 0 and 1.\r\n     */\r\n    getProgress: function ()\r\n    {\r\n        var p = this.currentFrame.progress;\r\n\r\n        if (!this.forward)\r\n        {\r\n            p = 1 - p;\r\n        }\r\n\r\n        return p;\r\n    },\r\n\r\n    /**\r\n     * Takes a value between 0 and 1 and uses it to set how far this animation is through playback.\r\n     * Does not factor in repeats or yoyos, but does handle playing forwards or backwards.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setProgress\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} [value=0] - The progress value, between 0 and 1.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    setProgress: function (value)\r\n    {\r\n        if (!this.forward)\r\n        {\r\n            value = 1 - value;\r\n        }\r\n\r\n        this.setCurrentFrame(this.currentAnim.getFrameByProgress(value));\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Handle the removal of an animation from the Animation Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The key of the removed Animation.\r\n     * @param {Phaser.Animations.Animation} [animation] - The removed Animation.\r\n     */\r\n    remove: function (key, animation)\r\n    {\r\n        if (animation === undefined) { animation = this.currentAnim; }\r\n\r\n        if (this.isPlaying && animation.key === this.currentAnim.key)\r\n        {\r\n            this.stop();\r\n\r\n            this.setCurrentFrame(this.currentAnim.frames[0]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Gets the number of times that the animation will repeat\r\n     * after its first iteration. For example, if returns 1, the animation will\r\n     * play a total of twice (the initial play plus 1 repeat).\r\n     * A value of -1 means the animation will repeat indefinitely.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getRepeat\r\n     * @since 3.4.0\r\n     *\r\n     * @return {integer} The number of times that the animation will repeat.\r\n     */\r\n    getRepeat: function ()\r\n    {\r\n        return this._repeat;\r\n    },\r\n\r\n    /**\r\n     * Sets the number of times that the animation should repeat\r\n     * after its first iteration. For example, if repeat is 1, the animation will\r\n     * play a total of twice (the initial play plus 1 repeat).\r\n     * To repeat indefinitely, use -1. repeat should always be an integer.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setRepeat\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} value - The number of times that the animation should repeat.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    setRepeat: function (value)\r\n    {\r\n        this._repeat = value;\r\n\r\n        this.repeatCounter = (value === -1) ? Number.MAX_VALUE : value;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Gets the amount of delay between repeats, if any.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getRepeatDelay\r\n     * @since 3.4.0\r\n     *\r\n     * @return {number} The delay between repeats.\r\n     */\r\n    getRepeatDelay: function ()\r\n    {\r\n        return this._repeatDelay;\r\n    },\r\n\r\n    /**\r\n     * Sets the amount of time in seconds between repeats.\r\n     * For example, if `repeat` is 2 and `repeatDelay` is 10, the animation will play initially,\r\n     * then wait for 10 seconds before repeating, then play again, then wait another 10 seconds\r\n     * before doing its final repeat.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setRepeatDelay\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - The delay to wait between repeats, in seconds.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    setRepeatDelay: function (value)\r\n    {\r\n        this._repeatDelay = value;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Restarts the current animation from its beginning, optionally including its delay value.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#restart\r\n     * @fires Phaser.Animations.Events#RESTART_ANIMATION_EVENT\r\n     * @fires Phaser.Animations.Events#SPRITE_RESTART_ANIMATION_EVENT\r\n     * @fires Phaser.Animations.Events#SPRITE_RESTART_KEY_ANIMATION_EVENT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [includeDelay=false] - Whether to include the delay value of the animation when restarting.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    restart: function (includeDelay)\r\n    {\r\n        if (includeDelay === undefined) { includeDelay = false; }\r\n\r\n        var anim = this.currentAnim;\r\n\r\n        anim.getFirstTick(this, includeDelay);\r\n\r\n        this.forward = true;\r\n        this.isPlaying = true;\r\n        this.pendingRepeat = false;\r\n        this._paused = false;\r\n\r\n        //  Set frame\r\n        this.updateFrame(anim.frames[0]);\r\n\r\n        var gameObject = this.parent;\r\n        var frame = this.currentFrame;\r\n\r\n        anim.emit(Events.ANIMATION_RESTART, anim, frame, gameObject);\r\n\r\n        gameObject.emit(Events.SPRITE_ANIMATION_KEY_RESTART + anim.key, anim, frame, gameObject);\r\n\r\n        gameObject.emit(Events.SPRITE_ANIMATION_RESTART, anim, frame, gameObject);\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Immediately stops the current animation from playing and dispatches the `animationcomplete` event.\r\n     * \r\n     * If no animation is set, no event will be dispatched.\r\n     * \r\n     * If there is another animation queued (via the `chain` method) then it will start playing immediately.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#stop\r\n     * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this._pendingStop = 0;\r\n\r\n        this.isPlaying = false;\r\n\r\n        var gameObject = this.parent;\r\n        var anim = this.currentAnim;\r\n        var frame = this.currentFrame;\r\n\r\n        if (anim)\r\n        {\r\n            anim.emit(Events.ANIMATION_COMPLETE, anim, frame, gameObject);\r\n\r\n            gameObject.emit(Events.SPRITE_ANIMATION_KEY_COMPLETE + anim.key, anim, frame, gameObject);\r\n    \r\n            gameObject.emit(Events.SPRITE_ANIMATION_COMPLETE, anim, frame, gameObject);\r\n        }\r\n\r\n        if (this.nextAnim)\r\n        {\r\n            var key = this.nextAnim;\r\n\r\n            this.nextAnim = null;\r\n\r\n            this.play(key);\r\n        }\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Stops the current animation from playing after the specified time delay, given in milliseconds.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#stopAfterDelay\r\n     * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} delay - The number of milliseconds to wait before stopping this animation.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    stopAfterDelay: function (delay)\r\n    {\r\n        this._pendingStop = 1;\r\n        this._pendingStopValue = delay;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Stops the current animation from playing when it next repeats.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#stopOnRepeat\r\n     * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    stopOnRepeat: function ()\r\n    {\r\n        this._pendingStop = 2;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Stops the current animation from playing when it next sets the given frame.\r\n     * If this frame doesn't exist within the animation it will not stop it from playing.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#stopOnFrame\r\n     * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} frame - The frame to check before stopping this animation.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    stopOnFrame: function (frame)\r\n    {\r\n        this._pendingStop = 3;\r\n        this._pendingStopValue = frame;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Sets the Time Scale factor, allowing you to make the animation go go faster or slower than default.\r\n     * Where 1 = normal speed (the default), 0.5 = half speed, 2 = double speed, etc.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setTimeScale\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} [value=1] - The time scale factor, where 1 is no change, 0.5 is half speed, etc.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n     */\r\n    setTimeScale: function (value)\r\n    {\r\n        if (value === undefined) { value = 1; }\r\n\r\n        this._timeScale = value;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Gets the Time Scale factor.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getTimeScale\r\n     * @since 3.4.0\r\n     *\r\n     * @return {number} The Time Scale value.\r\n     */\r\n    getTimeScale: function ()\r\n    {\r\n        return this._timeScale;\r\n    },\r\n\r\n    /**\r\n     * Returns the total number of frames in this animation.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getTotalFrames\r\n     * @since 3.4.0\r\n     *\r\n     * @return {integer} The total number of frames in this animation.\r\n     */\r\n    getTotalFrames: function ()\r\n    {\r\n        return this.currentAnim.frames.length;\r\n    },\r\n\r\n    /**\r\n     * The internal update loop for the Animation Component.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.currentAnim || !this.isPlaying || this.currentAnim.paused)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.accumulator += delta * this._timeScale;\r\n\r\n        if (this._pendingStop === 1)\r\n        {\r\n            this._pendingStopValue -= delta;\r\n\r\n            if (this._pendingStopValue <= 0)\r\n            {\r\n                return this.currentAnim.completeAnimation(this);\r\n            }\r\n        }\r\n\r\n        if (this.accumulator >= this.nextTick)\r\n        {\r\n            this.currentAnim.setFrame(this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the given Animation Frame as being the current frame\r\n     * and applies it to the parent Game Object, adjusting its size and origin as needed.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setCurrentFrame\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} animationFrame - The Animation Frame to set as being current.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n     */\r\n    setCurrentFrame: function (animationFrame)\r\n    {\r\n        var gameObject = this.parent;\r\n\r\n        this.currentFrame = animationFrame;\r\n\r\n        gameObject.texture = animationFrame.frame.texture;\r\n        gameObject.frame = animationFrame.frame;\r\n\r\n        if (gameObject.isCropped)\r\n        {\r\n            gameObject.frame.updateCropUVs(gameObject._crop, gameObject.flipX, gameObject.flipY);\r\n        }\r\n\r\n        gameObject.setSizeToFrame();\r\n\r\n        if (animationFrame.frame.customPivot)\r\n        {\r\n            gameObject.setOrigin(animationFrame.frame.pivotX, animationFrame.frame.pivotY);\r\n        }\r\n        else\r\n        {\r\n            gameObject.updateDisplayOrigin();\r\n        }\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Internal frame change handler.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#updateFrame\r\n     * @fires Phaser.Animations.Events#SPRITE_ANIMATION_UPDATE_EVENT\r\n     * @fires Phaser.Animations.Events#SPRITE_ANIMATION_KEY_UPDATE_EVENT\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Animations.AnimationFrame} animationFrame - The animation frame to change to.\r\n     */\r\n    updateFrame: function (animationFrame)\r\n    {\r\n        var gameObject = this.setCurrentFrame(animationFrame);\r\n\r\n        if (this.isPlaying)\r\n        {\r\n            if (animationFrame.setAlpha)\r\n            {\r\n                gameObject.alpha = animationFrame.alpha;\r\n            }\r\n\r\n            var anim = this.currentAnim;\r\n\r\n            gameObject.emit(Events.SPRITE_ANIMATION_KEY_UPDATE + anim.key, anim, animationFrame, gameObject);\r\n\r\n            gameObject.emit(Events.SPRITE_ANIMATION_UPDATE, anim, animationFrame, gameObject);\r\n\r\n            if (this._pendingStop === 3 && this._pendingStopValue === animationFrame)\r\n            {\r\n                this.currentAnim.completeAnimation(this);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Advances the animation to the next frame, regardless of the time or animation state.\r\n     * If the animation is set to repeat, or yoyo, this will still take effect.\r\n     * \r\n     * Calling this does not change the direction of the animation. I.e. if it was currently\r\n     * playing in reverse, calling this method doesn't then change the direction to forwards.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#nextFrame\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n     */\r\n    nextFrame: function ()\r\n    {\r\n        if (this.currentAnim)\r\n        {\r\n            this.currentAnim.nextFrame(this);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Advances the animation to the previous frame, regardless of the time or animation state.\r\n     * If the animation is set to repeat, or yoyo, this will still take effect.\r\n     * \r\n     * Calling this does not change the direction of the animation. I.e. if it was currently\r\n     * playing in forwards, calling this method doesn't then change the direction to backwards.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#previousFrame\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n     */\r\n    previousFrame: function ()\r\n    {\r\n        if (this.currentAnim)\r\n        {\r\n            this.currentAnim.previousFrame(this);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Sets if the current Animation will yoyo when it reaches the end.\r\n     * A yoyo'ing animation will play through consecutively, and then reverse-play back to the start again.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#setYoyo\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} [value=false] - `true` if the animation should yoyo, `false` to not.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n     */\r\n    setYoyo: function (value)\r\n    {\r\n        if (value === undefined) { value = false; }\r\n\r\n        this._yoyo = value;\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Gets if the current Animation will yoyo when it reaches the end.\r\n     * A yoyo'ing animation will play through consecutively, and then reverse-play back to the start again.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#getYoyo\r\n     * @since 3.4.0\r\n     *\r\n     * @return {boolean} `true` if the animation is set to yoyo, `false` if not.\r\n     */\r\n    getYoyo: function ()\r\n    {\r\n        return this._yoyo;\r\n    },\r\n\r\n    /**\r\n     * Destroy this Animation component.\r\n     *\r\n     * Unregisters event listeners and cleans up its references.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Animation#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.animationManager.off(Events.REMOVE_ANIMATION, this.remove, this);\r\n\r\n        this.animationManager = null;\r\n        this.parent = null;\r\n\r\n        this.currentAnim = null;\r\n        this.currentFrame = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Animation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FuaW1hdGlvbi5qcz9lYTg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDeEQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxhQUFhLG1CQUFPLENBQUMscUZBQXlCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDO0FBQ3BEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxnQkFBZ0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQztBQUNwRCxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMseUJBQXlCO0FBQ3JFLHVDQUF1QyxnQkFBZ0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7QUFDcEQsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHlCQUF5QjtBQUNyRSx1Q0FBdUMsZ0JBQWdCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsOEJBQThCOztBQUVwRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxzQkFBc0I7O0FBRS9EOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvQW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZUFuaW1hdGlvbiA9IHJlcXVpcmUoJy4uLy4uL2FuaW1hdGlvbnMvQW5pbWF0aW9uJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9hbmltYXRpb25zL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBHYW1lIE9iamVjdCBBbmltYXRpb24gQ29udHJvbGxlci5cclxuICpcclxuICogVGhpcyBjb250cm9sbGVyIGxpdmVzIGFzIGFuIGluc3RhbmNlIHdpdGhpbiBhIEdhbWUgT2JqZWN0LCBhY2Nlc3NpYmxlIGFzIGBzcHJpdGUuYW5pbXNgLlxyXG4gKlxyXG4gKiBAY2xhc3MgQW5pbWF0aW9uXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHBhcmVudCAtIFRoZSBHYW1lIE9iamVjdCB0byB3aGljaCB0aGlzIGFuaW1hdGlvbiBjb250cm9sbGVyIGJlbG9uZ3MuXHJcbiAqL1xyXG52YXIgQW5pbWF0aW9uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbiAocGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIE9iamVjdCB0byB3aGljaCB0aGlzIGFuaW1hdGlvbiBjb250cm9sbGVyIGJlbG9uZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2FuaW1hdGlvbk1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIgPSBwYXJlbnQuc2NlbmUuc3lzLmFuaW1zO1xyXG5cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIub25jZShFdmVudHMuUkVNT1ZFX0FOSU1BVElPTiwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyBhbiBhbmltYXRpb24gY3VycmVudGx5IHBsYXlpbmcgb3Igbm90P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2lzUGxheWluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgQW5pbWF0aW9uIGxvYWRlZCBpbnRvIHRoaXMgQW5pbWF0aW9uIENvbnRyb2xsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jY3VycmVudEFuaW1cclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QW5pbSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IEFuaW1hdGlvbkZyYW1lIGJlaW5nIGRpc3BsYXllZCBieSB0aGlzIEFuaW1hdGlvbiBDb250cm9sbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2N1cnJlbnRGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBvZiB0aGUgbmV4dCBBbmltYXRpb24gdG8gYmUgbG9hZGVkIGludG8gdGhpcyBBbmltYXRpb24gQ29udHJvbGxlciB3aGVuIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbmV4dEFuaW1cclxuICAgICAgICAgKiBAdHlwZSB7P3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmV4dEFuaW0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIHNjYWxlIGZhY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfdGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90aW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgcmF0ZSBvZiBwbGF5YmFjayBpbiBmcmFtZXMgcGVyIHNlY29uZC5cclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBpcyAyNCBpZiB0aGUgYGR1cmF0aW9uYCBwcm9wZXJ0eSBpcyBgbnVsbGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZnJhbWVSYXRlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVJhdGUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb3cgbG9uZyB0aGUgYW5pbWF0aW9uIHNob3VsZCBwbGF5IGZvciwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqIElmIHRoZSBgZnJhbWVSYXRlYCBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQgdGhlbiBpdCBvdmVycmlkZXMgdGhpcyB2YWx1ZSxcclxuICAgICAgICAgKiBvdGhlcndpc2UgdGhlIGBmcmFtZVJhdGVgIGlzIGRlcml2ZWQgZnJvbSBgZHVyYXRpb25gLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIG1zIHBlciBmcmFtZSwgbm90IGluY2x1ZGluZyBmcmFtZSBzcGVjaWZpYyBtb2RpZmllcnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgQW5pbWF0aW9uIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbXNQZXJGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXNQZXJGcmFtZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNraXAgZnJhbWVzIGlmIHRoZSB0aW1lIGxhZ3MsIG9yIGFsd2F5cyBhZHZhbmNlZCBhbnl3YXk/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2tpcE1pc3NlZEZyYW1lc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNraXBNaXNzZWRGcmFtZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGRlbGF5IGJlZm9yZSBzdGFydGluZyBwbGF5YmFjaywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI19kZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBOdW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBhbmltYXRpb24gKC0xIGZvciBpbmZpbml0eSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZXBlYXQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWxheSBiZWZvcmUgdGhlIHJlcGVhdCBzdGFydHMsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcmVwZWF0RGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlcGVhdERlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBhbmltYXRpb24geW95bz8gKHJldmVyc2UgYmFjayBkb3duIHRvIHRoZSBzdGFydCkgYmVmb3JlIHJlcGVhdGluZz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl95b3lvID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpbGwgdGhlIHBsYXloZWFkIG1vdmUgZm9yd2FyZHMgKGB0cnVlYCkgb3IgaW4gcmV2ZXJzZSAoYGZhbHNlYCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZm9yd2FyZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvcndhcmQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBJbnRlcm5hbCB0cmlnZ2VyIHRoYXQncyBwbGF5IHRoZSBhbmltYXRpb24gaW4gcmV2ZXJzZSBtb2RlICgndHJ1ZScpIG9yIG5vdCAoJ2ZhbHNlJyksXHJcbiAgICAgICAgICogbmVlZGVkIGJlY2F1c2UgZm9yd2FyZCBjYW4gYmUgY2hhbmdlZCBieSB5b3lvIGZlYXR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3JldmVyc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JldmVyc2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgdGltZSBvdmVyZmxvdyBhY2N1bXVsYXRvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNhY2N1bXVsYXRvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjdW11bGF0b3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSBwb2ludCBhdCB3aGljaCB0aGUgbmV4dCBhbmltYXRpb24gZnJhbWUgd2lsbCBjaGFuZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbmV4dFRpY2tcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5leHRUaWNrID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgY291bnRlciBrZWVwaW5nIHRyYWNrIG9mIGhvdyBtYW55IHJlcGVhdHMgYXJlIGxlZnQgdG8gcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNyZXBlYXRDb3VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXBlYXRDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgZmxhZyBrZWVwaW5nIHRyYWNrIG9mIHBlbmRpbmcgcmVwZWF0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwZW5kaW5nUmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBlbmRpbmdSZXBlYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIEFuaW1hdGlvbiBwYXVzZWQ/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3BhdXNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2FzIHRoZSBhbmltYXRpb24gcHJldmlvdXNseSBwbGF5aW5nIGJlZm9yZSBiZWluZyBwYXVzZWQ/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3dhc1BsYXlpbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fd2FzUGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0cmFja2luZyBpZiB0aGlzIEFuaW1hdGlvbiBpcyB3YWl0aW5nIHRvIHN0b3AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiAwID0gTm9cclxuICAgICAgICAgKiAxID0gV2FpdGluZyBmb3IgbXMgdG8gcGFzc1xyXG4gICAgICAgICAqIDIgPSBXYWl0aW5nIGZvciByZXBlYXRcclxuICAgICAgICAgKiAzID0gV2FpdGluZyBmb3Igc3BlY2lmaWMgZnJhbWVcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcGVuZGluZ1N0b3BcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdXNlZCBieSBfcGVuZGluZ1N0b3AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3BlbmRpbmdTdG9wVmFsdWVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3BWYWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFuIGFuaW1hdGlvbiB0byBiZSBwbGF5ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIGNvbXBsZXRlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGN1cnJlbnQgYW5pbWF0aW9uIG11c3QgZW50ZXIgYSAnY29tcGxldGVkJyBzdGF0ZSBmb3IgdGhpcyB0byBoYXBwZW4sIGkuZS4gZmluaXNoIGFsbCBvZiBpdHMgcmVwZWF0cywgZGVsYXlzLCBldGMsIG9yIGhhdmUgdGhlIGBzdG9wYCBtZXRob2QgY2FsbGVkIGRpcmVjdGx5IG9uIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBhbmltYXRpb24gc2V0IHRvIHJlcGVhdCBmb3JldmVyIHdpbGwgbmV2ZXIgZW50ZXIgYSBjb21wbGV0ZWQgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gY2hhaW4gYSBuZXcgYW5pbWF0aW9uIGF0IGFueSBwb2ludCwgaW5jbHVkaW5nIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgc3RhcnRzIHBsYXlpbmcsIGR1cmluZyBpdCwgb3Igd2hlbiBpdCBlbmRzICh2aWEgaXRzIGBhbmltYXRpb25jb21wbGV0ZWAgY2FsbGJhY2spLlxyXG4gICAgICogQ2hhaW5lZCBhbmltYXRpb25zIGFyZSBzcGVjaWZpYyB0byBhIEdhbWUgT2JqZWN0LCBtZWFuaW5nIGRpZmZlcmVudCBHYW1lIE9iamVjdHMgY2FuIGhhdmUgZGlmZmVyZW50IGNoYWluZWQgYW5pbWF0aW9ucyB3aXRob3V0IGltcGFjdGluZyB0aGUgZ2xvYmFsIGFuaW1hdGlvbiB0aGV5J3JlIHBsYXlpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMgdG8gcmVzZXQgdGhlIGNoYWluZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2NoYWluXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbil9IFtrZXldIC0gVGhlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIGFuaW1hdGlvbiB0byBwbGF5IG5leHQsIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuIE9yIGFuIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIGNoYWluOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBCYXNlQW5pbWF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0ga2V5LmtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmV4dEFuaW0gPSBrZXk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBiZSBkZWxheWVkIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdmFsdWU9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgc3RhcnRpbmcgcGxheWJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IG93bnMgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBzZXREZWxheTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLl9kZWxheSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBiZSBkZWxheWVkIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRoZSBBbmltYXRpb24gd2lsbCB3YWl0IGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqL1xyXG4gICAgZ2V0RGVsYXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGF5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIGRlbGF5LCBpbiBtaWxsaXNlY29uZHMsIHRoZW4gc3RhcnRzIHBsYXliYWNrIG9mIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2RlbGF5ZWRQbGF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5IC0gVGhlIGRlbGF5LCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBhbmltYXRpb24gcGxheWluZy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBUaGUgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgZGVsYXllZFBsYXk6IGZ1bmN0aW9uIChkZWxheSwga2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGxheShrZXksIHRydWUsIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICB0aGlzLm5leHRUaWNrICs9IGRlbGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUga2V5IG9mIHRoZSBhbmltYXRpb24gY3VycmVudGx5IGxvYWRlZCBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldEN1cnJlbnRLZXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIGxvYWRlZCBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50S2V5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0ua2V5O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCB0byBsb2FkIGFuIGFuaW1hdGlvbiBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2xvYWRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gbG9hZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBUaGUgc3RhcnQgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBsb2FkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKGtleSwgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RhcnRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0RnJhbWUgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGxheWluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIExvYWQgdGhlIG5ldyBhbmltYXRpb24gaW5cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIubG9hZCh0aGlzLCBrZXksIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCBzZXQgdGhlIGBpc1BsYXlpbmdgIHByb3BlcnR5IHRvIGBmYWxzZWAuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgcGF1c2UgaXQgYXQgYSBzcGVjaWZpYyBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gW2F0RnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgdG8gc2V0IGFmdGVyIHBhdXNpbmcgdGhlIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoYXRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhc1BsYXlpbmcgPSB0aGlzLmlzUGxheWluZztcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdEZyYW1lICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZyYW1lKGF0RnJhbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgcGxheWJhY2sgb2YgYSBwYXVzZWQgYW5pbWF0aW9uIGFuZCBzZXRzIHRoZSBgaXNQbGF5aW5nYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgdGVsbCBpdCB0byBzdGFydCBwbGF5YmFjayBmcm9tIGEgc3BlY2lmaWMgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBbZnJvbUZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIHRvIHNldCBiZWZvcmUgcmVzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKGZyb21GcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdGhpcy5fd2FzUGxheWluZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcm9tRnJhbWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJhbWUoZnJvbUZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGlzIHBhdXNlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2lzUGF1c2VkXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGlzUGF1c2VkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGF5cyBhbiBBbmltYXRpb24gb24gYSBHYW1lIE9iamVjdCB0aGF0IGhhcyB0aGUgQW5pbWF0aW9uIGNvbXBvbmVudCwgc3VjaCBhcyBhIFNwcml0ZS5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIgYW5kIGFyZSByZWZlcmVuY2VkIGJ5IGEgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGxheVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNvblN0YXJ0RXZlbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24pfSBrZXkgLSBUaGUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXksIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuIE9yIGFuIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUlmUGxheWluZz1mYWxzZV0gLSBJZiB0aGlzIGFuaW1hdGlvbiBpcyBhbHJlYWR5IHBsYXlpbmcgdGhlbiBpZ25vcmUgdGhpcyBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChrZXksIGlnbm9yZUlmUGxheWluZywgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaWdub3JlSWZQbGF5aW5nID09PSB1bmRlZmluZWQpIHsgaWdub3JlSWZQbGF5aW5nID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoc3RhcnRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0RnJhbWUgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBCYXNlQW5pbWF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0ga2V5LmtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZ25vcmVJZlBsYXlpbmcgJiYgdGhpcy5pc1BsYXlpbmcgJiYgdGhpcy5jdXJyZW50QW5pbS5rZXkgPT09IGtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcmV2ZXJzZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBbmltYXRpb24oa2V5LCBzdGFydEZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGF5cyBhbiBBbmltYXRpb24gKGluIHJldmVyc2UgbW9kZSkgb24gdGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGxheVJldmVyc2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25TdGFydEV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbil9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSwgYXMgZGVmaW5lZCBwcmV2aW91c2x5IGluIHRoZSBBbmltYXRpb24gTWFuYWdlci4gT3IgYW4gQW5pbWF0aW9uIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlSWZQbGF5aW5nPWZhbHNlXSAtIElmIGFuIGFuaW1hdGlvbiBpcyBhbHJlYWR5IHBsYXlpbmcgdGhlbiBpZ25vcmUgdGhpcyBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBsYXlSZXZlcnNlOiBmdW5jdGlvbiAoa2V5LCBpZ25vcmVJZlBsYXlpbmcsIHN0YXJ0RnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGlnbm9yZUlmUGxheWluZyA9PT0gdW5kZWZpbmVkKSB7IGlnbm9yZUlmUGxheWluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPT09IHVuZGVmaW5lZCkgeyBzdGFydEZyYW1lID0gMDsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgQmFzZUFuaW1hdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IGtleS5rZXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWdub3JlSWZQbGF5aW5nICYmIHRoaXMuaXNQbGF5aW5nICYmIHRoaXMuY3VycmVudEFuaW0ua2V5ID09PSBrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZXZlcnNlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QW5pbWF0aW9uKGtleSwgc3RhcnRGcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBhbiBBbmltYXRpb24gYW5kIGZpcmVzICdvblN0YXJ0RXZlbnQnIGV2ZW50LCBleHRyYWN0ZWQgZnJvbSAncGxheScgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI19zdGFydEFuaW1hdGlvblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTVEFSVF9BTklNQVRJT05fRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX1NUQVJUX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfU1RBUlRfS0VZX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXksIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEZyYW1lPTBdIC0gT3B0aW9uYWxseSBzdGFydCB0aGUgYW5pbWF0aW9uIHBsYXlpbmcgZnJvbSB0aGlzIGZyYW1lIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgX3N0YXJ0QW5pbWF0aW9uOiBmdW5jdGlvbiAoa2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubG9hZChrZXksIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICB2YXIgYW5pbSA9IHRoaXMuY3VycmVudEFuaW07XHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLnBhcmVudDtcclxuXHJcbiAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgU2hvdWxkIGdpdmUgdXMgOSwwMDcsMTk5LDI1NCw3NDAsOTkxIHNhZmUgcmVwZWF0c1xyXG4gICAgICAgIHRoaXMucmVwZWF0Q291bnRlciA9ICh0aGlzLl9yZXBlYXQgPT09IC0xKSA/IE51bWJlci5NQVhfVkFMVUUgOiB0aGlzLl9yZXBlYXQ7XHJcblxyXG4gICAgICAgIGFuaW0uZ2V0Rmlyc3RUaWNrKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChhbmltLnNob3dPblN0YXJ0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xyXG5cclxuICAgICAgICBhbmltLmVtaXQoRXZlbnRzLkFOSU1BVElPTl9TVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUICsga2V5LCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9TVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlIHRoZSBBbmltYXRpb24gdGhhdCBpcyBhbHJlYWR5IHBsYXlpbmcgb24gdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3JldmVyc2VcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJldmVyc2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZSA9ICF0aGlzLl9yZXZlcnNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mb3J3YXJkID0gIXRoaXMuZm9yd2FyZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGZhciB0aGlzIGFuaW1hdGlvbiBpcyB0aHJvdWdoLCBpZ25vcmluZyByZXBlYXRzIGFuZCB5b3lvcy5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaGFzIGEgbm9uLXplcm8gcmVwZWF0IGRlZmluZWQsIGBnZXRQcm9ncmVzc2AgYW5kIGBnZXRUb3RhbFByb2dyZXNzYCB3aWxsIGJlIGRpZmZlcmVudFxyXG4gICAgICogYmVjYXVzZSBgZ2V0UHJvZ3Jlc3NgIGRvZXNuJ3QgaW5jbHVkZSBhbnkgcmVwZWF0cyBvciByZXBlYXQgZGVsYXlzLCB3aGVyZWFzIGBnZXRUb3RhbFByb2dyZXNzYCBkb2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldFByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBwcm9ncmVzcyBvZiB0aGUgY3VycmVudCBhbmltYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZ3Jlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLmN1cnJlbnRGcmFtZS5wcm9ncmVzcztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcndhcmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwID0gMSAtIHA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSBhbmQgdXNlcyBpdCB0byBzZXQgaG93IGZhciB0aGlzIGFuaW1hdGlvbiBpcyB0aHJvdWdoIHBsYXliYWNrLlxyXG4gICAgICogRG9lcyBub3QgZmFjdG9yIGluIHJlcGVhdHMgb3IgeW95b3MsIGJ1dCBkb2VzIGhhbmRsZSBwbGF5aW5nIGZvcndhcmRzIG9yIGJhY2t3YXJkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRQcm9ncmVzc1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSBwcm9ncmVzcyB2YWx1ZSwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0UHJvZ3Jlc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9yd2FyZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gMSAtIHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RnJhbWUodGhpcy5jdXJyZW50QW5pbS5nZXRGcmFtZUJ5UHJvZ3Jlc3ModmFsdWUpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZSB0aGUgcmVtb3ZhbCBvZiBhbiBhbmltYXRpb24gZnJvbSB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUga2V5IG9mIHRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBbYW5pbWF0aW9uXSAtIFRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5LCBhbmltYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGFuaW1hdGlvbiA9IHRoaXMuY3VycmVudEFuaW07IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nICYmIGFuaW1hdGlvbi5rZXkgPT09IHRoaXMuY3VycmVudEFuaW0ua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRGcmFtZSh0aGlzLmN1cnJlbnRBbmltLmZyYW1lc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCByZXBlYXRcclxuICAgICAqIGFmdGVyIGl0cyBmaXJzdCBpdGVyYXRpb24uIEZvciBleGFtcGxlLCBpZiByZXR1cm5zIDEsIHRoZSBhbmltYXRpb24gd2lsbFxyXG4gICAgICogcGxheSBhIHRvdGFsIG9mIHR3aWNlICh0aGUgaW5pdGlhbCBwbGF5IHBsdXMgMSByZXBlYXQpLlxyXG4gICAgICogQSB2YWx1ZSBvZiAtMSBtZWFucyB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0IGluZGVmaW5pdGVseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXRSZXBlYXRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXBlYXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGVhdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHNob3VsZCByZXBlYXRcclxuICAgICAqIGFmdGVyIGl0cyBmaXJzdCBpdGVyYXRpb24uIEZvciBleGFtcGxlLCBpZiByZXBlYXQgaXMgMSwgdGhlIGFuaW1hdGlvbiB3aWxsXHJcbiAgICAgKiBwbGF5IGEgdG90YWwgb2YgdHdpY2UgKHRoZSBpbml0aWFsIHBsYXkgcGx1cyAxIHJlcGVhdCkuXHJcbiAgICAgKiBUbyByZXBlYXQgaW5kZWZpbml0ZWx5LCB1c2UgLTEuIHJlcGVhdCBzaG91bGQgYWx3YXlzIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2V0UmVwZWF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZhbHVlIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24gc2hvdWxkIHJlcGVhdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHNldFJlcGVhdDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3JlcGVhdCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlcGVhdENvdW50ZXIgPSAodmFsdWUgPT09IC0xKSA/IE51bWJlci5NQVhfVkFMVUUgOiB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFtb3VudCBvZiBkZWxheSBiZXR3ZWVuIHJlcGVhdHMsIGlmIGFueS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXRSZXBlYXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVsYXkgYmV0d2VlbiByZXBlYXRzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXBlYXREZWxheTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwZWF0RGVsYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIHJlcGVhdHMuXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYHJlcGVhdGAgaXMgMiBhbmQgYHJlcGVhdERlbGF5YCBpcyAxMCwgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkgaW5pdGlhbGx5LFxyXG4gICAgICogdGhlbiB3YWl0IGZvciAxMCBzZWNvbmRzIGJlZm9yZSByZXBlYXRpbmcsIHRoZW4gcGxheSBhZ2FpbiwgdGhlbiB3YWl0IGFub3RoZXIgMTAgc2Vjb25kc1xyXG4gICAgICogYmVmb3JlIGRvaW5nIGl0cyBmaW5hbCByZXBlYXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2V0UmVwZWF0RGVsYXlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBkZWxheSB0byB3YWl0IGJldHdlZW4gcmVwZWF0cywgaW4gc2Vjb25kcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHNldFJlcGVhdERlbGF5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcmVwZWF0RGVsYXkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RhcnRzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIGl0cyBiZWdpbm5pbmcsIG9wdGlvbmFsbHkgaW5jbHVkaW5nIGl0cyBkZWxheSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNyZXN0YXJ0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1JFU1RBUlRfQU5JTUFUSU9OX0VWRU5UXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9SRVNUQVJUX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfUkVTVEFSVF9LRVlfQU5JTUFUSU9OX0VWRU5UXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlRGVsYXk9ZmFsc2VdIC0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBkZWxheSB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzdGFydGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uIChpbmNsdWRlRGVsYXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVEZWxheSA9PT0gdW5kZWZpbmVkKSB7IGluY2x1ZGVEZWxheSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuXHJcbiAgICAgICAgYW5pbS5nZXRGaXJzdFRpY2sodGhpcywgaW5jbHVkZURlbGF5KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vICBTZXQgZnJhbWVcclxuICAgICAgICB0aGlzLnVwZGF0ZUZyYW1lKGFuaW0uZnJhbWVzWzBdKTtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgYW5pbS5lbWl0KEV2ZW50cy5BTklNQVRJT05fUkVTVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fS0VZX1JFU1RBUlQgKyBhbmltLmtleSwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fUkVTVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1tZWRpYXRlbHkgc3RvcHMgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZyb20gcGxheWluZyBhbmQgZGlzcGF0Y2hlcyB0aGUgYGFuaW1hdGlvbmNvbXBsZXRlYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYW5pbWF0aW9uIGlzIHNldCwgbm8gZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgKHZpYSB0aGUgYGNoYWluYCBtZXRob2QpIHRoZW4gaXQgd2lsbCBzdGFydCBwbGF5aW5nIGltbWVkaWF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25Db21wbGV0ZUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3AgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMucGFyZW50O1xyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltLmVtaXQoRXZlbnRzLkFOSU1BVElPTl9DT01QTEVURSwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURSArIGFuaW0ua2V5LCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcbiAgICBcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFLCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXh0QW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm5leHRBbmltO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5uZXh0QW5pbSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsYXkoa2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIHBsYXlpbmcgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lIGRlbGF5LCBnaXZlbiBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc3RvcEFmdGVyRGVsYXlcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25Db21wbGV0ZUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5IC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3RvcHBpbmcgdGhpcyBhbmltYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IG93bnMgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBzdG9wQWZ0ZXJEZWxheTogZnVuY3Rpb24gKGRlbGF5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMTtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlID0gZGVsYXk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgY3VycmVudCBhbmltYXRpb24gZnJvbSBwbGF5aW5nIHdoZW4gaXQgbmV4dCByZXBlYXRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BPblJlcGVhdFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNvbkNvbXBsZXRlRXZlbnRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc3RvcE9uUmVwZWF0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIHBsYXlpbmcgd2hlbiBpdCBuZXh0IHNldHMgdGhlIGdpdmVuIGZyYW1lLlxyXG4gICAgICogSWYgdGhpcyBmcmFtZSBkb2Vzbid0IGV4aXN0IHdpdGhpbiB0aGUgYW5pbWF0aW9uIGl0IHdpbGwgbm90IHN0b3AgaXQgZnJvbSBwbGF5aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BPbkZyYW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI29uQ29tcGxldGVFdmVudFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgZnJhbWUgdG8gY2hlY2sgYmVmb3JlIHN0b3BwaW5nIHRoaXMgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc3RvcE9uRnJhbWU6IGZ1bmN0aW9uIChmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcCA9IDM7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3BWYWx1ZSA9IGZyYW1lO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgVGltZSBTY2FsZSBmYWN0b3IsIGFsbG93aW5nIHlvdSB0byBtYWtlIHRoZSBhbmltYXRpb24gZ28gZ28gZmFzdGVyIG9yIHNsb3dlciB0aGFuIGRlZmF1bHQuXHJcbiAgICAgKiBXaGVyZSAxID0gbm9ybWFsIHNwZWVkICh0aGUgZGVmYXVsdCksIDAuNSA9IGhhbGYgc3BlZWQsIDIgPSBkb3VibGUgc3BlZWQsIGV0Yy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRUaW1lU2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MV0gLSBUaGUgdGltZSBzY2FsZSBmYWN0b3IsIHdoZXJlIDEgaXMgbm8gY2hhbmdlLCAwLjUgaXMgaGFsZiBzcGVlZCwgZXRjLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0VGltZVNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RpbWVTY2FsZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgVGltZSBTY2FsZSBmYWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZ2V0VGltZVNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBUaW1lIFNjYWxlIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRUaW1lU2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoaXMgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldFRvdGFsRnJhbWVzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGlzIGFuaW1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0VG90YWxGcmFtZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0uZnJhbWVzLmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3AgZm9yIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50QW5pbSB8fCAhdGhpcy5pc1BsYXlpbmcgfHwgdGhpcy5jdXJyZW50QW5pbS5wYXVzZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFjY3VtdWxhdG9yICs9IGRlbHRhICogdGhpcy5fdGltZVNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1N0b3AgPT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlIC09IGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTdG9wVmFsdWUgPD0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0uY29tcGxldGVBbmltYXRpb24odGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdG9yID49IHRoaXMubmV4dFRpY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltLnNldEZyYW1lKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiBBbmltYXRpb24gRnJhbWUgYXMgYmVpbmcgdGhlIGN1cnJlbnQgZnJhbWVcclxuICAgICAqIGFuZCBhcHBsaWVzIGl0IHRvIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QsIGFkanVzdGluZyBpdHMgc2l6ZSBhbmQgb3JpZ2luIGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRDdXJyZW50RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGFuaW1hdGlvbkZyYW1lIC0gVGhlIEFuaW1hdGlvbiBGcmFtZSB0byBzZXQgYXMgYmVpbmcgY3VycmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudCBiZWxvbmdzIHRvLlxyXG4gICAgICovXHJcbiAgICBzZXRDdXJyZW50RnJhbWU6IGZ1bmN0aW9uIChhbmltYXRpb25GcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMucGFyZW50O1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGFuaW1hdGlvbkZyYW1lO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnRleHR1cmUgPSBhbmltYXRpb25GcmFtZS5mcmFtZS50ZXh0dXJlO1xyXG4gICAgICAgIGdhbWVPYmplY3QuZnJhbWUgPSBhbmltYXRpb25GcmFtZS5mcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QuaXNDcm9wcGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5mcmFtZS51cGRhdGVDcm9wVVZzKGdhbWVPYmplY3QuX2Nyb3AsIGdhbWVPYmplY3QuZmxpcFgsIGdhbWVPYmplY3QuZmxpcFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRTaXplVG9GcmFtZSgpO1xyXG5cclxuICAgICAgICBpZiAoYW5pbWF0aW9uRnJhbWUuZnJhbWUuY3VzdG9tUGl2b3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldE9yaWdpbihhbmltYXRpb25GcmFtZS5mcmFtZS5waXZvdFgsIGFuaW1hdGlvbkZyYW1lLmZyYW1lLnBpdm90WSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZnJhbWUgY2hhbmdlIGhhbmRsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jdXBkYXRlRnJhbWVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9VUERBVEVfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFX0VWRU5UXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gYW5pbWF0aW9uRnJhbWUgLSBUaGUgYW5pbWF0aW9uIGZyYW1lIHRvIGNoYW5nZSB0by5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRnJhbWU6IGZ1bmN0aW9uIChhbmltYXRpb25GcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMuc2V0Q3VycmVudEZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGFuaW1hdGlvbkZyYW1lLnNldEFscGhhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmFscGhhID0gYW5pbWF0aW9uRnJhbWUuYWxwaGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFICsgYW5pbS5rZXksIGFuaW0sIGFuaW1hdGlvbkZyYW1lLCBnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9VUERBVEUsIGFuaW0sIGFuaW1hdGlvbkZyYW1lLCBnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RvcCA9PT0gMyAmJiB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlID09PSBhbmltYXRpb25GcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbS5jb21wbGV0ZUFuaW1hdGlvbih0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlcyB0aGUgYW5pbWF0aW9uIHRvIHRoZSBuZXh0IGZyYW1lLCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lIG9yIGFuaW1hdGlvbiBzdGF0ZS5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHJlcGVhdCwgb3IgeW95bywgdGhpcyB3aWxsIHN0aWxsIHRha2UgZWZmZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gSS5lLiBpZiBpdCB3YXMgY3VycmVudGx5XHJcbiAgICAgKiBwbGF5aW5nIGluIHJldmVyc2UsIGNhbGxpbmcgdGhpcyBtZXRob2QgZG9lc24ndCB0aGVuIGNoYW5nZSB0aGUgZGlyZWN0aW9uIHRvIGZvcndhcmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI25leHRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50IGJlbG9uZ3MgdG8uXHJcbiAgICAgKi9cclxuICAgIG5leHRGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW0ubmV4dEZyYW1lKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBhbmltYXRpb24gdG8gdGhlIHByZXZpb3VzIGZyYW1lLCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lIG9yIGFuaW1hdGlvbiBzdGF0ZS5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHJlcGVhdCwgb3IgeW95bywgdGhpcyB3aWxsIHN0aWxsIHRha2UgZWZmZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gSS5lLiBpZiBpdCB3YXMgY3VycmVudGx5XHJcbiAgICAgKiBwbGF5aW5nIGluIGZvcndhcmRzLCBjYWxsaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgdGhlbiBjaGFuZ2UgdGhlIGRpcmVjdGlvbiB0byBiYWNrd2FyZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcHJldmlvdXNGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50IGJlbG9uZ3MgdG8uXHJcbiAgICAgKi9cclxuICAgIHByZXZpb3VzRnJhbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltLnByZXZpb3VzRnJhbWUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBpZiB0aGUgY3VycmVudCBBbmltYXRpb24gd2lsbCB5b3lvIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kLlxyXG4gICAgICogQSB5b3lvJ2luZyBhbmltYXRpb24gd2lsbCBwbGF5IHRocm91Z2ggY29uc2VjdXRpdmVseSwgYW5kIHRoZW4gcmV2ZXJzZS1wbGF5IGJhY2sgdG8gdGhlIHN0YXJ0IGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3NldFlveW9cclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPWZhbHNlXSAtIGB0cnVlYCBpZiB0aGUgYW5pbWF0aW9uIHNob3VsZCB5b3lvLCBgZmFsc2VgIHRvIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudCBiZWxvbmdzIHRvLlxyXG4gICAgICovXHJcbiAgICBzZXRZb3lvOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl95b3lvID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IEFuaW1hdGlvbiB3aWxsIHlveW8gd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICAgKiBBIHlveW8naW5nIGFuaW1hdGlvbiB3aWxsIHBsYXkgdGhyb3VnaCBjb25zZWN1dGl2ZWx5LCBhbmQgdGhlbiByZXZlcnNlLXBsYXkgYmFjayB0byB0aGUgc3RhcnQgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZ2V0WW95b1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHlveW8sIGBmYWxzZWAgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBnZXRZb3lvOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl95b3lvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhpcyBBbmltYXRpb24gY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIFVucmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW5zIHVwIGl0cyByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uTWFuYWdlci5vZmYoRXZlbnRzLlJFTU9WRV9BTklNQVRJT04sIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmltYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Animation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/BlendMode.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/BlendMode.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\n\r\n/**\r\n * Provides methods used for setting the blend mode of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.BlendMode\r\n * @since 3.0.0\r\n */\r\n\r\nvar BlendMode = {\r\n\r\n    /**\r\n     * Private internal value. Holds the current blend mode.\r\n     * \r\n     * @name Phaser.GameObjects.Components.BlendMode#_blendMode\r\n     * @type {integer}\r\n     * @private\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    _blendMode: BlendModes.NORMAL,\r\n\r\n    /**\r\n     * Sets the Blend Mode being used by this Game Object.\r\n     *\r\n     * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\r\n     *\r\n     * Under WebGL only the following Blend Modes are available:\r\n     *\r\n     * * ADD\r\n     * * MULTIPLY\r\n     * * SCREEN\r\n     * * ERASE\r\n     *\r\n     * Canvas has more available depending on browser support.\r\n     *\r\n     * You can also create your own custom Blend Modes in WebGL.\r\n     *\r\n     * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\r\n     * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\r\n     * reasons try to be careful about the construction of your Scene and the frequency of which blend modes\r\n     * are used.\r\n     *\r\n     * @name Phaser.GameObjects.Components.BlendMode#blendMode\r\n     * @type {(Phaser.BlendModes|string)}\r\n     * @since 3.0.0\r\n     */\r\n    blendMode: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._blendMode;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (typeof value === 'string')\r\n            {\r\n                value = BlendModes[value];\r\n            }\r\n\r\n            value |= 0;\r\n\r\n            if (value >= -1)\r\n            {\r\n                this._blendMode = value;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the Blend Mode being used by this Game Object.\r\n     *\r\n     * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\r\n     *\r\n     * Under WebGL only the following Blend Modes are available:\r\n     *\r\n     * * ADD\r\n     * * MULTIPLY\r\n     * * SCREEN\r\n     * * ERASE (only works when rendering to a framebuffer, like a Render Texture)\r\n     *\r\n     * Canvas has more available depending on browser support.\r\n     *\r\n     * You can also create your own custom Blend Modes in WebGL.\r\n     *\r\n     * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\r\n     * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\r\n     * reasons try to be careful about the construction of your Scene and the frequency in which blend modes\r\n     * are used.\r\n     *\r\n     * @method Phaser.GameObjects.Components.BlendMode#setBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.BlendModes)} value - The BlendMode value. Either a string or a CONST.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setBlendMode: function (value)\r\n    {\r\n        this.blendMode = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = BlendMode;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0JsZW5kTW9kZS5qcz9iM2U1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0JsZW5kTW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJsZW5kTW9kZXMgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlci9CbGVuZE1vZGVzJyk7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBibGVuZCBtb2RlIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGN1cnJlbnQgYmxlbmQgbW9kZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlI19ibGVuZE1vZGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYmxlbmRNb2RlOiBCbGVuZE1vZGVzLk5PUk1BTCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJsZW5kIE1vZGUgYmVpbmcgdXNlZCBieSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2FuIGJlIGEgY29uc3QsIHN1Y2ggYXMgYFBoYXNlci5CbGVuZE1vZGVzLlNDUkVFTmAsIG9yIGFuIGludGVnZXIsIHN1Y2ggYXMgNCAoZm9yIE92ZXJsYXkpXHJcbiAgICAgKlxyXG4gICAgICogVW5kZXIgV2ViR0wgb25seSB0aGUgZm9sbG93aW5nIEJsZW5kIE1vZGVzIGFyZSBhdmFpbGFibGU6XHJcbiAgICAgKlxyXG4gICAgICogKiBBRERcclxuICAgICAqICogTVVMVElQTFlcclxuICAgICAqICogU0NSRUVOXHJcbiAgICAgKiAqIEVSQVNFXHJcbiAgICAgKlxyXG4gICAgICogQ2FudmFzIGhhcyBtb3JlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gYnJvd3NlciBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gY3VzdG9tIEJsZW5kIE1vZGVzIGluIFdlYkdMLlxyXG4gICAgICpcclxuICAgICAqIEJsZW5kIG1vZGVzIGhhdmUgZGlmZmVyZW50IGVmZmVjdHMgdW5kZXIgQ2FudmFzIGFuZCBXZWJHTCwgYW5kIGZyb20gYnJvd3NlciB0byBicm93c2VyLCBkZXBlbmRpbmdcclxuICAgICAqIG9uIHN1cHBvcnQuIEJsZW5kIE1vZGVzIGFsc28gY2F1c2UgYSBXZWJHTCBiYXRjaCBmbHVzaCBzaG91bGQgaXQgZW5jb3VudGVyIGEgbmV3IGJsZW5kIG1vZGUuIEZvciB0aGVzZVxyXG4gICAgICogcmVhc29ucyB0cnkgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgY29uc3RydWN0aW9uIG9mIHlvdXIgU2NlbmUgYW5kIHRoZSBmcmVxdWVuY3kgb2Ygd2hpY2ggYmxlbmQgbW9kZXNcclxuICAgICAqIGFyZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZSNibGVuZE1vZGVcclxuICAgICAqIEB0eXBlIHsoUGhhc2VyLkJsZW5kTW9kZXN8c3RyaW5nKX1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibGVuZE1vZGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IEJsZW5kTW9kZXNbdmFsdWVdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSB8PSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ibGVuZE1vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQmxlbmQgTW9kZSBiZWluZyB1c2VkIGJ5IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBjYW4gYmUgYSBjb25zdCwgc3VjaCBhcyBgUGhhc2VyLkJsZW5kTW9kZXMuU0NSRUVOYCwgb3IgYW4gaW50ZWdlciwgc3VjaCBhcyA0IChmb3IgT3ZlcmxheSlcclxuICAgICAqXHJcbiAgICAgKiBVbmRlciBXZWJHTCBvbmx5IHRoZSBmb2xsb3dpbmcgQmxlbmQgTW9kZXMgYXJlIGF2YWlsYWJsZTpcclxuICAgICAqXHJcbiAgICAgKiAqIEFERFxyXG4gICAgICogKiBNVUxUSVBMWVxyXG4gICAgICogKiBTQ1JFRU5cclxuICAgICAqICogRVJBU0UgKG9ubHkgd29ya3Mgd2hlbiByZW5kZXJpbmcgdG8gYSBmcmFtZWJ1ZmZlciwgbGlrZSBhIFJlbmRlciBUZXh0dXJlKVxyXG4gICAgICpcclxuICAgICAqIENhbnZhcyBoYXMgbW9yZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIGJyb3dzZXIgc3VwcG9ydC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGN1c3RvbSBCbGVuZCBNb2RlcyBpbiBXZWJHTC5cclxuICAgICAqXHJcbiAgICAgKiBCbGVuZCBtb2RlcyBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIHVuZGVyIENhbnZhcyBhbmQgV2ViR0wsIGFuZCBmcm9tIGJyb3dzZXIgdG8gYnJvd3NlciwgZGVwZW5kaW5nXHJcbiAgICAgKiBvbiBzdXBwb3J0LiBCbGVuZCBNb2RlcyBhbHNvIGNhdXNlIGEgV2ViR0wgYmF0Y2ggZmx1c2ggc2hvdWxkIGl0IGVuY291bnRlciBhIG5ldyBibGVuZCBtb2RlLiBGb3IgdGhlc2VcclxuICAgICAqIHJlYXNvbnMgdHJ5IHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhlIGNvbnN0cnVjdGlvbiBvZiB5b3VyIFNjZW5lIGFuZCB0aGUgZnJlcXVlbmN5IGluIHdoaWNoIGJsZW5kIG1vZGVzXHJcbiAgICAgKiBhcmUgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZSNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuQmxlbmRNb2Rlcyl9IHZhbHVlIC0gVGhlIEJsZW5kTW9kZSB2YWx1ZS4gRWl0aGVyIGEgc3RyaW5nIG9yIGEgQ09OU1QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QmxlbmRNb2RlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/BlendMode.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/ComputedSize.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/ComputedSize.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for calculating and setting the size of a non-Frame based Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.ComputedSize\r\n * @since 3.0.0\r\n */\r\n\r\nvar ComputedSize = {\r\n\r\n    /**\r\n     * The native (un-scaled) width of this Game Object.\r\n     * \r\n     * Changing this value will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n     * the `displayWidth` property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.ComputedSize#width\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    width: 0,\r\n\r\n    /**\r\n     * The native (un-scaled) height of this Game Object.\r\n     * \r\n     * Changing this value will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n     * the `displayHeight` property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.ComputedSize#height\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    height: 0,\r\n\r\n    /**\r\n     * The displayed width of this Game Object.\r\n     * \r\n     * This value takes into account the scale factor.\r\n     * \r\n     * Setting this value will adjust the Game Object's scale property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.ComputedSize#displayWidth\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayWidth: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.scaleX * this.width;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleX = value / this.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The displayed height of this Game Object.\r\n     * \r\n     * This value takes into account the scale factor.\r\n     * \r\n     * Setting this value will adjust the Game Object's scale property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.ComputedSize#displayHeight\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayHeight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.scaleY * this.height;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleY = value / this.height;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the internal size of this Game Object, as used for frame or physics body creation.\r\n     * \r\n     * This will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n     * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n     * to do so by giving pixel values.\r\n     * \r\n     * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n     * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n     * \r\n     * @method Phaser.GameObjects.Components.ComputedSize#setSize\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the display size of this Game Object.\r\n     * \r\n     * Calling this will adjust the scale.\r\n     * \r\n     * @method Phaser.GameObjects.Components.ComputedSize#setDisplaySize\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setDisplaySize: function (width, height)\r\n    {\r\n        this.displayWidth = width;\r\n        this.displayHeight = height;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = ComputedSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0NvbXB1dGVkU2l6ZS5qcz8wZmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0NvbXB1dGVkU2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgY2FsY3VsYXRpbmcgYW5kIHNldHRpbmcgdGhlIHNpemUgb2YgYSBub24tRnJhbWUgYmFzZWQgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIENvbXB1dGVkU2l6ZSA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHNpemUgdGhhdCB0aGUgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgaW4tZ2FtZS5cclxuICAgICAqIEZvciB0aGF0IHlvdSBuZWVkIHRvIGVpdGhlciBzZXQgdGhlIHNjYWxlIG9mIHRoZSBHYW1lIE9iamVjdCAoYHNldFNjYWxlYCkgb3IgdXNlXHJcbiAgICAgKiB0aGUgYGRpc3BsYXlXaWR0aGAgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZSN3aWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB3aWR0aDogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIHVzZVxyXG4gICAgICogdGhlIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI2hlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGlzcGxheWVkIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgdmFsdWUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBzY2FsZSBmYWN0b3IuXHJcbiAgICAgKiBcclxuICAgICAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGFkanVzdCB0aGUgR2FtZSBPYmplY3QncyBzY2FsZSBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI2Rpc3BsYXlXaWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5V2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVYICogdGhpcy53aWR0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVYID0gdmFsdWUgLyB0aGlzLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB2YWx1ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNjYWxlIGZhY3Rvci5cclxuICAgICAqIFxyXG4gICAgICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYWRqdXN0IHRoZSBHYW1lIE9iamVjdCdzIHNjYWxlIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemUjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlWSAqIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZVkgPSB2YWx1ZSAvIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBhcyB1c2VkIGZvciBmcmFtZSBvciBwaHlzaWNzIGJvZHkgY3JlYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIGNhbGwgdGhlXHJcbiAgICAgKiBgc2V0RGlzcGxheVNpemVgIG1ldGhvZCwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgY2hhbmdpbmcgdGhlIHNjYWxlIGJ1dCBhbGxvd3MgeW91XHJcbiAgICAgKiB0byBkbyBzbyBieSBnaXZpbmcgcGl4ZWwgdmFsdWVzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoaXMgR2FtZSBPYmplY3QgZm9yIGlucHV0LCBjaGFuZ2luZyB0aGUgc2l6ZSB3aWxsIF9ub3RfIGNoYW5nZSB0aGVcclxuICAgICAqIHNpemUgb2YgdGhlIGhpdCBhcmVhLiBUbyBkbyB0aGlzIHlvdSBzaG91bGQgYWRqdXN0IHRoZSBgaW5wdXQuaGl0QXJlYWAgb2JqZWN0IGRpcmVjdGx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzaXplIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyB3aWxsIGFkanVzdCB0aGUgc2NhbGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI3NldERpc3BsYXlTaXplXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldERpc3BsYXlTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wdXRlZFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ComputedSize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Crop.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Crop.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Crop\r\n * @since 3.12.0\r\n */\r\n\r\nvar Crop = {\r\n\r\n    /**\r\n     * The Texture this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Crop#texture\r\n     * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n     * @since 3.0.0\r\n     */\r\n    texture: null,\r\n\r\n    /**\r\n     * The Texture Frame this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Crop#frame\r\n     * @type {Phaser.Textures.Frame}\r\n     * @since 3.0.0\r\n     */\r\n    frame: null,\r\n\r\n    /**\r\n     * A boolean flag indicating if this Game Object is being cropped or not.\r\n     * You can toggle this at any time after `setCrop` has been called, to turn cropping on or off.\r\n     * Equally, calling `setCrop` with no arguments will reset the crop and disable it.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Crop#isCropped\r\n     * @type {boolean}\r\n     * @since 3.11.0\r\n     */\r\n    isCropped: false,\r\n\r\n    /**\r\n     * Applies a crop to a texture based Game Object, such as a Sprite or Image.\r\n     * \r\n     * The crop is a rectangle that limits the area of the texture frame that is visible during rendering.\r\n     * \r\n     * Cropping a Game Object does not change its size, dimensions, physics body or hit area, it just\r\n     * changes what is shown when rendered.\r\n     * \r\n     * The crop coordinates are relative to the texture frame, not the Game Object, meaning 0 x 0 is the top-left.\r\n     * \r\n     * Therefore, if you had a Game Object that had an 800x600 sized texture, and you wanted to show only the left\r\n     * half of it, you could call `setCrop(0, 0, 400, 600)`.\r\n     * \r\n     * It is also scaled to match the Game Object scale automatically. Therefore a crop rect of 100x50 would crop\r\n     * an area of 200x100 when applied to a Game Object that had a scale factor of 2.\r\n     * \r\n     * You can either pass in numeric values directly, or you can provide a single Rectangle object as the first argument.\r\n     * \r\n     * Call this method with no arguments at all to reset the crop, or toggle the property `isCropped` to `false`.\r\n     * \r\n     * You should do this if the crop rectangle becomes the same size as the frame itself, as it will allow\r\n     * the renderer to skip several internal calculations.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Crop#setCrop\r\n     * @since 3.11.0\r\n     *\r\n     * @param {(number|Phaser.Geom.Rectangle)} [x] - The x coordinate to start the crop from. Or a Phaser.Geom.Rectangle object, in which case the rest of the arguments are ignored.\r\n     * @param {number} [y] - The y coordinate to start the crop from.\r\n     * @param {number} [width] - The width of the crop rectangle in pixels.\r\n     * @param {number} [height] - The height of the crop rectangle in pixels.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setCrop: function (x, y, width, height)\r\n    {\r\n        if (x === undefined)\r\n        {\r\n            this.isCropped = false;\r\n        }\r\n        else if (this.frame)\r\n        {\r\n            if (typeof x === 'number')\r\n            {\r\n                this.frame.setCropUVs(this._crop, x, y, width, height, this.flipX, this.flipY);\r\n            }\r\n            else\r\n            {\r\n                var rect = x;\r\n\r\n                this.frame.setCropUVs(this._crop, rect.x, rect.y, rect.width, rect.height, this.flipX, this.flipY);\r\n            }\r\n\r\n            this.isCropped = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that returns a blank, well-formed crop object for use by a Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Crop#resetCropObject\r\n     * @private\r\n     * @since 3.12.0\r\n     * \r\n     * @return {object} The crop object.\r\n     */\r\n    resetCropObject: function ()\r\n    {\r\n        return { u0: 0, v0: 0, u1: 0, v1: 0, width: 0, height: 0, x: 0, y: 0, flipX: false, flipY: false, cx: 0, cy: 0, cw: 0, ch: 0 };\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Crop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0Nyb3AuanM/YTBlZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9Dcm9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSB0ZXh0dXJlIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ3JvcFxyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqL1xyXG5cclxudmFyIENyb3AgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3AjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3AjZnJhbWVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJhbWU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgR2FtZSBPYmplY3QgaXMgYmVpbmcgY3JvcHBlZCBvciBub3QuXHJcbiAgICAgKiBZb3UgY2FuIHRvZ2dsZSB0aGlzIGF0IGFueSB0aW1lIGFmdGVyIGBzZXRDcm9wYCBoYXMgYmVlbiBjYWxsZWQsIHRvIHR1cm4gY3JvcHBpbmcgb24gb3Igb2ZmLlxyXG4gICAgICogRXF1YWxseSwgY2FsbGluZyBgc2V0Q3JvcGAgd2l0aCBubyBhcmd1bWVudHMgd2lsbCByZXNldCB0aGUgY3JvcCBhbmQgZGlzYWJsZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wI2lzQ3JvcHBlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGlzQ3JvcHBlZDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGEgY3JvcCB0byBhIHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3QsIHN1Y2ggYXMgYSBTcHJpdGUgb3IgSW1hZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBjcm9wIGlzIGEgcmVjdGFuZ2xlIHRoYXQgbGltaXRzIHRoZSBhcmVhIG9mIHRoZSB0ZXh0dXJlIGZyYW1lIHRoYXQgaXMgdmlzaWJsZSBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBDcm9wcGluZyBhIEdhbWUgT2JqZWN0IGRvZXMgbm90IGNoYW5nZSBpdHMgc2l6ZSwgZGltZW5zaW9ucywgcGh5c2ljcyBib2R5IG9yIGhpdCBhcmVhLCBpdCBqdXN0XHJcbiAgICAgKiBjaGFuZ2VzIHdoYXQgaXMgc2hvd24gd2hlbiByZW5kZXJlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGNyb3AgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0dXJlIGZyYW1lLCBub3QgdGhlIEdhbWUgT2JqZWN0LCBtZWFuaW5nIDAgeCAwIGlzIHRoZSB0b3AtbGVmdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlcmVmb3JlLCBpZiB5b3UgaGFkIGEgR2FtZSBPYmplY3QgdGhhdCBoYWQgYW4gODAweDYwMCBzaXplZCB0ZXh0dXJlLCBhbmQgeW91IHdhbnRlZCB0byBzaG93IG9ubHkgdGhlIGxlZnRcclxuICAgICAqIGhhbGYgb2YgaXQsIHlvdSBjb3VsZCBjYWxsIGBzZXRDcm9wKDAsIDAsIDQwMCwgNjAwKWAuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGlzIGFsc28gc2NhbGVkIHRvIG1hdGNoIHRoZSBHYW1lIE9iamVjdCBzY2FsZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcmUgYSBjcm9wIHJlY3Qgb2YgMTAweDUwIHdvdWxkIGNyb3BcclxuICAgICAqIGFuIGFyZWEgb2YgMjAweDEwMCB3aGVuIGFwcGxpZWQgdG8gYSBHYW1lIE9iamVjdCB0aGF0IGhhZCBhIHNjYWxlIGZhY3RvciBvZiAyLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGVpdGhlciBwYXNzIGluIG51bWVyaWMgdmFsdWVzIGRpcmVjdGx5LCBvciB5b3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgUmVjdGFuZ2xlIG9iamVjdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMgYXQgYWxsIHRvIHJlc2V0IHRoZSBjcm9wLCBvciB0b2dnbGUgdGhlIHByb3BlcnR5IGBpc0Nyb3BwZWRgIHRvIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBzaG91bGQgZG8gdGhpcyBpZiB0aGUgY3JvcCByZWN0YW5nbGUgYmVjb21lcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBmcmFtZSBpdHNlbGYsIGFzIGl0IHdpbGwgYWxsb3dcclxuICAgICAqIHRoZSByZW5kZXJlciB0byBza2lwIHNldmVyYWwgaW50ZXJuYWwgY2FsY3VsYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ3JvcCNzZXRDcm9wXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5HZW9tLlJlY3RhbmdsZSl9IFt4XSAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgdGhlIGNyb3AgZnJvbS4gT3IgYSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDcm9wOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Q3JvcFVWcyh0aGlzLl9jcm9wLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0geDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLnNldENyb3BVVnModGhpcy5fY3JvcCwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgcmV0dXJucyBhIGJsYW5rLCB3ZWxsLWZvcm1lZCBjcm9wIG9iamVjdCBmb3IgdXNlIGJ5IGEgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wI3Jlc2V0Q3JvcE9iamVjdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3JvcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q3JvcE9iamVjdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geyB1MDogMCwgdjA6IDAsIHUxOiAwLCB2MTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeDogMCwgeTogMCwgZmxpcFg6IGZhbHNlLCBmbGlwWTogZmFsc2UsIGN4OiAwLCBjeTogMCwgY3c6IDAsIGNoOiAwIH07XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDcm9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Crop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Depth.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Depth.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the depth of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Depth\r\n * @since 3.0.0\r\n */\r\n\r\nvar Depth = {\r\n\r\n    /**\r\n     * Private internal value. Holds the depth of the Game Object.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Depth#_depth\r\n     * @type {integer}\r\n     * @private\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    _depth: 0,\r\n\r\n    /**\r\n     * The depth of this Game Object within the Scene.\r\n     * \r\n     * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\r\n     * of Game Objects, without actually moving their position in the display list.\r\n     *\r\n     * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\r\n     * value will always render in front of one with a lower value.\r\n     *\r\n     * Setting the depth will queue a depth sort event within the Scene.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Depth#depth\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    depth: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._depth;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scene.sys.queueDepthSort();\r\n            this._depth = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The depth of this Game Object within the Scene.\r\n     * \r\n     * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\r\n     * of Game Objects, without actually moving their position in the display list.\r\n     *\r\n     * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\r\n     * value will always render in front of one with a lower value.\r\n     *\r\n     * Setting the depth will queue a depth sort event within the Scene.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Depth#setDepth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} value - The depth of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setDepth: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.depth = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Depth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0RlcHRoLmpzP2IwYTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0RlcHRoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBkZXB0aCBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIERlcHRoID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGRlcHRoIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGgjX2RlcHRoXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX2RlcHRoOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlcHRoIG9mIHRoaXMgR2FtZSBPYmplY3Qgd2l0aGluIHRoZSBTY2VuZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRlcHRoIGlzIGFsc28ga25vd24gYXMgdGhlICd6LWluZGV4JyBpbiBzb21lIGVudmlyb25tZW50cywgYW5kIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSByZW5kZXJpbmcgb3JkZXJcclxuICAgICAqIG9mIEdhbWUgT2JqZWN0cywgd2l0aG91dCBhY3R1YWxseSBtb3ZpbmcgdGhlaXIgcG9zaXRpb24gaW4gdGhlIGRpc3BsYXkgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVwdGggc3RhcnRzIGZyb20gemVybyAodGhlIGRlZmF1bHQgdmFsdWUpIGFuZCBpbmNyZWFzZXMgZnJvbSB0aGF0IHBvaW50LiBBIEdhbWUgT2JqZWN0IHdpdGggYSBoaWdoZXIgZGVwdGhcclxuICAgICAqIHZhbHVlIHdpbGwgYWx3YXlzIHJlbmRlciBpbiBmcm9udCBvZiBvbmUgd2l0aCBhIGxvd2VyIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIFNldHRpbmcgdGhlIGRlcHRoIHdpbGwgcXVldWUgYSBkZXB0aCBzb3J0IGV2ZW50IHdpdGhpbiB0aGUgU2NlbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoI2RlcHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlcHRoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnF1ZXVlRGVwdGhTb3J0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVwdGggb2YgdGhpcyBHYW1lIE9iamVjdCB3aXRoaW4gdGhlIFNjZW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGVwdGggaXMgYWxzbyBrbm93biBhcyB0aGUgJ3otaW5kZXgnIGluIHNvbWUgZW52aXJvbm1lbnRzLCBhbmQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHJlbmRlcmluZyBvcmRlclxyXG4gICAgICogb2YgR2FtZSBPYmplY3RzLCB3aXRob3V0IGFjdHVhbGx5IG1vdmluZyB0aGVpciBwb3NpdGlvbiBpbiB0aGUgZGlzcGxheSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkZXB0aCBzdGFydHMgZnJvbSB6ZXJvICh0aGUgZGVmYXVsdCB2YWx1ZSkgYW5kIGluY3JlYXNlcyBmcm9tIHRoYXQgcG9pbnQuIEEgR2FtZSBPYmplY3Qgd2l0aCBhIGhpZ2hlciBkZXB0aFxyXG4gICAgICogdmFsdWUgd2lsbCBhbHdheXMgcmVuZGVyIGluIGZyb250IG9mIG9uZSB3aXRoIGEgbG93ZXIgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogU2V0dGluZyB0aGUgZGVwdGggd2lsbCBxdWV1ZSBhIGRlcHRoIHNvcnQgZXZlbnQgd2l0aGluIHRoZSBTY2VuZS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aCNzZXREZXB0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSBkZXB0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZXB0aDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLmRlcHRoID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVwdGg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Depth.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Flip.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Flip.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for visually flipping a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Flip\r\n * @since 3.0.0\r\n */\r\n\r\nvar Flip = {\r\n\r\n    /**\r\n     * The horizontally flipped state of the Game Object.\r\n     * \r\n     * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n     * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n     * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Flip#flipX\r\n     * @type {boolean}\r\n     * @default false\r\n     * @since 3.0.0\r\n     */\r\n    flipX: false,\r\n\r\n    /**\r\n     * The vertically flipped state of the Game Object.\r\n     * \r\n     * A Game Object that is flipped vertically will render inversed on the vertical axis (i.e. upside down)\r\n     * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n     * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Flip#flipY\r\n     * @type {boolean}\r\n     * @default false\r\n     * @since 3.0.0\r\n     */\r\n    flipY: false,\r\n\r\n    /**\r\n     * Toggles the horizontal flipped state of this Game Object.\r\n     * \r\n     * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n     * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n     * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#toggleFlipX\r\n     * @since 3.0.0\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    toggleFlipX: function ()\r\n    {\r\n        this.flipX = !this.flipX;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Toggles the vertical flipped state of this Game Object.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#toggleFlipY\r\n     * @since 3.0.0\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    toggleFlipY: function ()\r\n    {\r\n        this.flipY = !this.flipY;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal flipped state of this Game Object.\r\n     * \r\n     * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n     * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n     * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#setFlipX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFlipX: function (value)\r\n    {\r\n        this.flipX = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical flipped state of this Game Object.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#setFlipY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFlipY: function (value)\r\n    {\r\n        this.flipY = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical flipped state of this Game Object.\r\n     * \r\n     * A Game Object that is flipped will render inversed on the flipped axis.\r\n     * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n     * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#setFlip\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n     * @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFlip: function (x, y)\r\n    {\r\n        this.flipX = x;\r\n        this.flipY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the horizontal and vertical flipped state of this Game Object back to their default un-flipped state.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Flip#resetFlip\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    resetFlip: function ()\r\n    {\r\n        this.flipX = false;\r\n        this.flipY = false;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Flip;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0ZsaXAuanM/ZmM4NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9GbGlwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciB2aXN1YWxseSBmbGlwcGluZyBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgRmxpcCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsbHkgZmxpcHBlZCBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEEgR2FtZSBPYmplY3QgdGhhdCBpcyBmbGlwcGVkIGhvcml6b250YWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgaG9yaXpvbnRhbCBheGlzLlxyXG4gICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZSBhbmQgZG9lcyBub3QgaW1wYWN0IHRoZSBzY2FsZSB2YWx1ZS5cclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGh5c2ljcyBib2R5LCBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlIGJvZHkuIFRoaXMgaXMgYSByZW5kZXJpbmcgdG9nZ2xlIG9ubHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjZmxpcFhcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBmbGlwWDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWxseSBmbGlwcGVkIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQSBHYW1lIE9iamVjdCB0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgdmVydGljYWwgYXhpcyAoaS5lLiB1cHNpZGUgZG93bilcclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwI2ZsaXBZXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgaG9yaXpvbnRhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEEgR2FtZSBPYmplY3QgdGhhdCBpcyBmbGlwcGVkIGhvcml6b250YWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgaG9yaXpvbnRhbCBheGlzLlxyXG4gICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZSBhbmQgZG9lcyBub3QgaW1wYWN0IHRoZSBzY2FsZSB2YWx1ZS5cclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGh5c2ljcyBib2R5LCBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlIGJvZHkuIFRoaXMgaXMgYSByZW5kZXJpbmcgdG9nZ2xlIG9ubHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcCN0b2dnbGVGbGlwWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZUZsaXBYOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmxpcFggPSAhdGhpcy5mbGlwWDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgdmVydGljYWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjdG9nZ2xlRmxpcFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB0b2dnbGVGbGlwWTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gIXRoaXMuZmxpcFk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBBIEdhbWUgT2JqZWN0IHRoYXQgaXMgZmxpcHBlZCBob3Jpem9udGFsbHkgd2lsbCByZW5kZXIgaW52ZXJzZWQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjc2V0RmxpcFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXBYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcCNzZXRGbGlwWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQSBHYW1lIE9iamVjdCB0aGF0IGlzIGZsaXBwZWQgd2lsbCByZW5kZXIgaW52ZXJzZWQgb24gdGhlIGZsaXBwZWQgYXhpcy5cclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjc2V0RmxpcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB4IC0gVGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHkgLSBUaGUgaG9yaXpvbnRhbCBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHg7XHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGJhY2sgdG8gdGhlaXIgZGVmYXVsdCB1bi1mbGlwcGVkIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjcmVzZXRGbGlwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNldEZsaXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbGlwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Flip.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/GetBounds.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/GetBounds.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RotateAround = __webpack_require__(/*! ../../math/RotateAround */ \"./node_modules/phaser/src/math/RotateAround.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Provides methods used for obtaining the bounds of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.GetBounds\r\n * @since 3.0.0\r\n */\r\n\r\nvar GetBounds = {\r\n\r\n    /**\r\n     * Processes the bounds output vector before returning it.\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#prepareBoundsOutput\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} output - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    prepareBoundsOutput: function (output, includeParent)\r\n    {\r\n        if (includeParent === undefined) { includeParent = false; }\r\n\r\n        if (this.rotation !== 0)\r\n        {\r\n            RotateAround(output, this.x, this.y, this.rotation);\r\n        }\r\n\r\n        if (includeParent && this.parentContainer)\r\n        {\r\n            var parentMatrix = this.parentContainer.getBoundsTransformMatrix();\r\n\r\n            parentMatrix.transformPoint(output.x, output.y, output);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Gets the center coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getCenter\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getCenter: function (output)\r\n    {\r\n        if (output === undefined) { output = new Vector2(); }\r\n\r\n        output.x = this.x - (this.displayWidth * this.originX) + (this.displayWidth / 2);\r\n        output.y = this.y - (this.displayHeight * this.originY) + (this.displayHeight / 2);\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Gets the top-left corner coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getTopLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getTopLeft: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = this.x - (this.displayWidth * this.originX);\r\n        output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the top-center coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getTopCenter\r\n     * @since 3.18.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getTopCenter: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = (this.x - (this.displayWidth * this.originX)) + (this.displayWidth / 2);\r\n        output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the top-right corner coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getTopRight\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getTopRight: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n        output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the left-center coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getLeftCenter\r\n     * @since 3.18.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getLeftCenter: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = this.x - (this.displayWidth * this.originX);\r\n        output.y = (this.y - (this.displayHeight * this.originY)) + (this.displayHeight / 2);\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the right-center coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getRightCenter\r\n     * @since 3.18.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getRightCenter: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n        output.y = (this.y - (this.displayHeight * this.originY)) + (this.displayHeight / 2);\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the bottom-left corner coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getBottomLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getBottomLeft: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = this.x - (this.displayWidth * this.originX);\r\n        output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the bottom-center coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getBottomCenter\r\n     * @since 3.18.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getBottomCenter: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = (this.x - (this.displayWidth * this.originX)) + (this.displayWidth / 2);\r\n        output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the bottom-right corner coordinate of this Game Object, regardless of origin.\r\n     * The returned point is calculated in local space and does not factor in any parent containers\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getBottomRight\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n     * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n     */\r\n    getBottomRight: function (output, includeParent)\r\n    {\r\n        if (!output) { output = new Vector2(); }\r\n\r\n        output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n        output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n        return this.prepareBoundsOutput(output, includeParent);\r\n    },\r\n\r\n    /**\r\n     * Gets the bounds of this Game Object, regardless of origin.\r\n     * The values are stored and returned in a Rectangle, or Rectangle-like, object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.GetBounds#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Rectangle} O - [output,$return]\r\n     *\r\n     * @param {(Phaser.Geom.Rectangle|object)} [output] - An object to store the values in. If not provided a new Rectangle will be created.\r\n     *\r\n     * @return {(Phaser.Geom.Rectangle|object)} The values stored in the output object.\r\n     */\r\n    getBounds: function (output)\r\n    {\r\n        if (output === undefined) { output = new Rectangle(); }\r\n\r\n        //  We can use the output object to temporarily store the x/y coords in:\r\n\r\n        var TLx, TLy, TRx, TRy, BLx, BLy, BRx, BRy;\r\n\r\n        // Instead of doing a check if parent container is \r\n        // defined per corner we only do it once.\r\n        if (this.parentContainer)\r\n        {\r\n            var parentMatrix = this.parentContainer.getBoundsTransformMatrix();\r\n\r\n            this.getTopLeft(output);\r\n            parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n            TLx = output.x;\r\n            TLy = output.y;\r\n\r\n            this.getTopRight(output);\r\n            parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n            TRx = output.x;\r\n            TRy = output.y;\r\n\r\n            this.getBottomLeft(output);\r\n            parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n            BLx = output.x;\r\n            BLy = output.y;\r\n\r\n            this.getBottomRight(output);\r\n            parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n            BRx = output.x;\r\n            BRy = output.y;\r\n        }\r\n        else\r\n        {\r\n            this.getTopLeft(output);\r\n\r\n            TLx = output.x;\r\n            TLy = output.y;\r\n\r\n            this.getTopRight(output);\r\n\r\n            TRx = output.x;\r\n            TRy = output.y;\r\n\r\n            this.getBottomLeft(output);\r\n\r\n            BLx = output.x;\r\n            BLy = output.y;\r\n\r\n            this.getBottomRight(output);\r\n\r\n            BRx = output.x;\r\n            BRy = output.y;\r\n        }\r\n\r\n        output.x = Math.min(TLx, TRx, BLx, BRx);\r\n        output.y = Math.min(TLy, TRy, BLy, BRy);\r\n        output.width = Math.max(TLx, TRx, BLx, BRx) - output.x;\r\n        output.height = Math.max(TLy, TRy, BLy, BRy) - output.y;\r\n\r\n        return output;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0dldEJvdW5kcy5qcz83MGMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsK0VBQXlCO0FBQ3BELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHVCQUF1Qjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsd0JBQXdCOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isd0JBQXdCOztBQUU5QztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isd0JBQXdCOztBQUU5QztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywwQkFBMEI7O0FBRTdEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0dldEJvdW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUm90YXRlQXJvdW5kID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9Sb3RhdGVBcm91bmQnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIG9idGFpbmluZyB0aGUgYm91bmRzIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgR2V0Qm91bmRzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBib3VuZHMgb3V0cHV0IHZlY3RvciBiZWZvcmUgcmV0dXJuaW5nIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI3ByZXBhcmVCb3VuZHNPdXRwdXRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBvdXRwdXQgLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJlcGFyZUJvdW5kc091dHB1dDogZnVuY3Rpb24gKG91dHB1dCwgaW5jbHVkZVBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoaW5jbHVkZVBhcmVudCA9PT0gdW5kZWZpbmVkKSB7IGluY2x1ZGVQYXJlbnQgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb3RhdGlvbiAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFJvdGF0ZUFyb3VuZChvdXRwdXQsIHRoaXMueCwgdGhpcy55LCB0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbmNsdWRlUGFyZW50ICYmIHRoaXMucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE1hdHJpeCA9IHRoaXMucGFyZW50Q29udGFpbmVyLmdldEJvdW5kc1RyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAgICAgcGFyZW50TWF0cml4LnRyYW5zZm9ybVBvaW50KG91dHB1dC54LCBvdXRwdXQueSwgb3V0cHV0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY2VudGVyIGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCwgcmVnYXJkbGVzcyBvZiBvcmlnaW4uXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgcG9pbnQgaXMgY2FsY3VsYXRlZCBpbiBsb2NhbCBzcGFjZSBhbmQgZG9lcyBub3QgZmFjdG9yIGluIGFueSBwYXJlbnQgY29udGFpbmVyc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI2dldENlbnRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IHRoaXMueCAtICh0aGlzLmRpc3BsYXlXaWR0aCAqIHRoaXMub3JpZ2luWCkgKyAodGhpcy5kaXNwbGF5V2lkdGggLyAyKTtcclxuICAgICAgICBvdXRwdXQueSA9IHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpICsgKHRoaXMuZGlzcGxheUhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvcC1sZWZ0IGNvcm5lciBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QsIHJlZ2FyZGxlc3Mgb2Ygb3JpZ2luLlxyXG4gICAgICogVGhlIHJldHVybmVkIHBvaW50IGlzIGNhbGN1bGF0ZWQgaW4gbG9jYWwgc3BhY2UgYW5kIGRvZXMgbm90IGZhY3RvciBpbiBhbnkgcGFyZW50IGNvbnRhaW5lcnNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kcyNnZXRUb3BMZWZ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFRvcExlZnQ6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IHRoaXMueCAtICh0aGlzLmRpc3BsYXlXaWR0aCAqIHRoaXMub3JpZ2luWCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSB0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvcC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0VG9wQ2VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRUb3BDZW50ZXI6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArICh0aGlzLmRpc3BsYXlXaWR0aCAvIDIpO1xyXG4gICAgICAgIG91dHB1dC55ID0gdGhpcy55IC0gKHRoaXMuZGlzcGxheUhlaWdodCAqIHRoaXMub3JpZ2luWSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3AtcmlnaHQgY29ybmVyIGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCwgcmVnYXJkbGVzcyBvZiBvcmlnaW4uXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgcG9pbnQgaXMgY2FsY3VsYXRlZCBpbiBsb2NhbCBzcGFjZSBhbmQgZG9lcyBub3QgZmFjdG9yIGluIGFueSBwYXJlbnQgY29udGFpbmVyc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI2dldFRvcFJpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFRvcFJpZ2h0OiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSAodGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKSkgKyB0aGlzLmRpc3BsYXlXaWR0aDtcclxuICAgICAgICBvdXRwdXQueSA9IHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQm91bmRzT3V0cHV0KG91dHB1dCwgaW5jbHVkZVBhcmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbGVmdC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0TGVmdENlbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVmdENlbnRlcjogZnVuY3Rpb24gKG91dHB1dCwgaW5jbHVkZVBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoIW91dHB1dCkgeyBvdXRwdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIG91dHB1dC54ID0gdGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKTtcclxuICAgICAgICBvdXRwdXQueSA9ICh0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKSkgKyAodGhpcy5kaXNwbGF5SGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByaWdodC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0UmlnaHRDZW50ZXJcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFJpZ2h0Q2VudGVyOiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSAodGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKSkgKyB0aGlzLmRpc3BsYXlXaWR0aDtcclxuICAgICAgICBvdXRwdXQueSA9ICh0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKSkgKyAodGhpcy5kaXNwbGF5SGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBib3R0b20tbGVmdCBjb3JuZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tTGVmdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3R0b21MZWZ0OiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSB0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdHRvbS1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tQ2VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3R0b21DZW50ZXI6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArICh0aGlzLmRpc3BsYXlXaWR0aCAvIDIpO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tUmlnaHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Qm90dG9tUmlnaHQ6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArIHRoaXMuZGlzcGxheVdpZHRoO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdW5kcyBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBhbmQgcmV0dXJuZWQgaW4gYSBSZWN0YW5nbGUsIG9yIFJlY3RhbmdsZS1saWtlLCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICAvLyAgV2UgY2FuIHVzZSB0aGUgb3V0cHV0IG9iamVjdCB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgeC95IGNvb3JkcyBpbjpcclxuXHJcbiAgICAgICAgdmFyIFRMeCwgVEx5LCBUUngsIFRSeSwgQkx4LCBCTHksIEJSeCwgQlJ5O1xyXG5cclxuICAgICAgICAvLyBJbnN0ZWFkIG9mIGRvaW5nIGEgY2hlY2sgaWYgcGFyZW50IGNvbnRhaW5lciBpcyBcclxuICAgICAgICAvLyBkZWZpbmVkIHBlciBjb3JuZXIgd2Ugb25seSBkbyBpdCBvbmNlLlxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRNYXRyaXggPSB0aGlzLnBhcmVudENvbnRhaW5lci5nZXRCb3VuZHNUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wTGVmdChvdXRwdXQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXgudHJhbnNmb3JtUG9pbnQob3V0cHV0LngsIG91dHB1dC55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVEx4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRMeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRUb3BSaWdodChvdXRwdXQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXgudHJhbnNmb3JtUG9pbnQob3V0cHV0LngsIG91dHB1dC55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVFJ4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRSeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRCb3R0b21MZWZ0KG91dHB1dCk7XHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC50cmFuc2Zvcm1Qb2ludChvdXRwdXQueCwgb3V0cHV0LnksIG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCTHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQkx5ID0gb3V0cHV0Lnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEJvdHRvbVJpZ2h0KG91dHB1dCk7XHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC50cmFuc2Zvcm1Qb2ludChvdXRwdXQueCwgb3V0cHV0LnksIG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCUnggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQlJ5ID0gb3V0cHV0Lnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wTGVmdChvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVEx4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRMeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRUb3BSaWdodChvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVFJ4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRSeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRCb3R0b21MZWZ0KG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCTHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQkx5ID0gb3V0cHV0Lnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEJvdHRvbVJpZ2h0KG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCUnggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQlJ5ID0gb3V0cHV0Lnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IE1hdGgubWluKFRMeCwgVFJ4LCBCTHgsIEJSeCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSBNYXRoLm1pbihUTHksIFRSeSwgQkx5LCBCUnkpO1xyXG4gICAgICAgIG91dHB1dC53aWR0aCA9IE1hdGgubWF4KFRMeCwgVFJ4LCBCTHgsIEJSeCkgLSBvdXRwdXQueDtcclxuICAgICAgICBvdXRwdXQuaGVpZ2h0ID0gTWF0aC5tYXgoVEx5LCBUUnksIEJMeSwgQlJ5KSAtIG91dHB1dC55O1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qm91bmRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/GetBounds.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Mask.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Mask.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapMask = __webpack_require__(/*! ../../display/mask/BitmapMask */ \"./node_modules/phaser/src/display/mask/BitmapMask.js\");\r\nvar GeometryMask = __webpack_require__(/*! ../../display/mask/GeometryMask */ \"./node_modules/phaser/src/display/mask/GeometryMask.js\");\r\n\r\n/**\r\n * Provides methods used for getting and setting the mask of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Mask\r\n * @since 3.0.0\r\n */\r\n\r\nvar Mask = {\r\n\r\n    /**\r\n     * The Mask this Game Object is using during render.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Mask#mask\r\n     * @type {Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask}\r\n     * @since 3.0.0\r\n     */\r\n    mask: null,\r\n\r\n    /**\r\n     * Sets the mask that this Game Object will use to render with.\r\n     *\r\n     * The mask must have been previously created and can be either a GeometryMask or a BitmapMask.\r\n     * Note: Bitmap Masks only work on WebGL. Geometry Masks work on both WebGL and Canvas.\r\n     *\r\n     * If a mask is already set on this Game Object it will be immediately replaced.\r\n     * \r\n     * Masks are positioned in global space and are not relative to the Game Object to which they\r\n     * are applied. The reason for this is that multiple Game Objects can all share the same mask.\r\n     * \r\n     * Masks have no impact on physics or input detection. They are purely a rendering component\r\n     * that allows you to limit what is visible during the render pass.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Mask#setMask\r\n     * @since 3.6.2\r\n     *\r\n     * @param {Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask} mask - The mask this Game Object will use when rendering.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setMask: function (mask)\r\n    {\r\n        this.mask = mask;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clears the mask that this Game Object was using.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Mask#clearMask\r\n     * @since 3.6.2\r\n     *\r\n     * @param {boolean} [destroyMask=false] - Destroy the mask before clearing it?\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    clearMask: function (destroyMask)\r\n    {\r\n        if (destroyMask === undefined) { destroyMask = false; }\r\n\r\n        if (destroyMask && this.mask)\r\n        {\r\n            this.mask.destroy();\r\n        }\r\n\r\n        this.mask = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates and returns a Bitmap Mask. This mask can be used by any Game Object,\r\n     * including this one.\r\n     *\r\n     * To create the mask you need to pass in a reference to a renderable Game Object.\r\n     * A renderable Game Object is one that uses a texture to render with, such as an\r\n     * Image, Sprite, Render Texture or BitmapText.\r\n     *\r\n     * If you do not provide a renderable object, and this Game Object has a texture,\r\n     * it will use itself as the object. This means you can call this method to create\r\n     * a Bitmap Mask from any renderable Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Mask#createBitmapMask\r\n     * @since 3.6.2\r\n     * \r\n     * @param {Phaser.GameObjects.GameObject} [renderable] - A renderable Game Object that uses a texture, such as a Sprite.\r\n     *\r\n     * @return {Phaser.Display.Masks.BitmapMask} This Bitmap Mask that was created.\r\n     */\r\n    createBitmapMask: function (renderable)\r\n    {\r\n        if (renderable === undefined && (this.texture || this.shader))\r\n        {\r\n            // eslint-disable-next-line consistent-this\r\n            renderable = this;\r\n        }\r\n\r\n        return new BitmapMask(this.scene, renderable);\r\n    },\r\n\r\n    /**\r\n     * Creates and returns a Geometry Mask. This mask can be used by any Game Object,\r\n     * including this one.\r\n     *\r\n     * To create the mask you need to pass in a reference to a Graphics Game Object.\r\n     *\r\n     * If you do not provide a graphics object, and this Game Object is an instance\r\n     * of a Graphics object, then it will use itself to create the mask.\r\n     * \r\n     * This means you can call this method to create a Geometry Mask from any Graphics Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Mask#createGeometryMask\r\n     * @since 3.6.2\r\n     * \r\n     * @param {Phaser.GameObjects.Graphics} [graphics] - A Graphics Game Object. The geometry within it will be used as the mask.\r\n     *\r\n     * @return {Phaser.Display.Masks.GeometryMask} This Geometry Mask that was created.\r\n     */\r\n    createGeometryMask: function (graphics)\r\n    {\r\n        if (graphics === undefined && this.type === 'Graphics')\r\n        {\r\n            // eslint-disable-next-line consistent-this\r\n            graphics = this;\r\n        }\r\n\r\n        return new GeometryMask(this.scene, graphics);\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Mask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL01hc2suanM/ZTVkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsMkZBQStCO0FBQ3hELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrRUFBa0U7QUFDakY7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvTWFzay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJpdG1hcE1hc2sgPSByZXF1aXJlKCcuLi8uLi9kaXNwbGF5L21hc2svQml0bWFwTWFzaycpO1xyXG52YXIgR2VvbWV0cnlNYXNrID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9tYXNrL0dlb21ldHJ5TWFzaycpO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgbWFzayBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIE1hc2sgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTWFzayB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIGR1cmluZyByZW5kZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFzayNtYXNrXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFza3xQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2t9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbWFzazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1hc2sgdGhhdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtYXNrIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY3JlYXRlZCBhbmQgY2FuIGJlIGVpdGhlciBhIEdlb21ldHJ5TWFzayBvciBhIEJpdG1hcE1hc2suXHJcbiAgICAgKiBOb3RlOiBCaXRtYXAgTWFza3Mgb25seSB3b3JrIG9uIFdlYkdMLiBHZW9tZXRyeSBNYXNrcyB3b3JrIG9uIGJvdGggV2ViR0wgYW5kIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIG1hc2sgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBHYW1lIE9iamVjdCBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5IHJlcGxhY2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBNYXNrcyBhcmUgcG9zaXRpb25lZCBpbiBnbG9iYWwgc3BhY2UgYW5kIGFyZSBub3QgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0IHRvIHdoaWNoIHRoZXlcclxuICAgICAqIGFyZSBhcHBsaWVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgbXVsdGlwbGUgR2FtZSBPYmplY3RzIGNhbiBhbGwgc2hhcmUgdGhlIHNhbWUgbWFzay5cclxuICAgICAqIFxyXG4gICAgICogTWFza3MgaGF2ZSBubyBpbXBhY3Qgb24gcGh5c2ljcyBvciBpbnB1dCBkZXRlY3Rpb24uIFRoZXkgYXJlIHB1cmVseSBhIHJlbmRlcmluZyBjb21wb25lbnRcclxuICAgICAqIHRoYXQgYWxsb3dzIHlvdSB0byBsaW1pdCB3aGF0IGlzIHZpc2libGUgZHVyaW5nIHRoZSByZW5kZXIgcGFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2sjc2V0TWFza1xyXG4gICAgICogQHNpbmNlIDMuNi4yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFza30gbWFzayAtIFRoZSBtYXNrIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2Ugd2hlbiByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWFzazogZnVuY3Rpb24gKG1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBtYXNrIHRoYXQgdGhpcyBHYW1lIE9iamVjdCB3YXMgdXNpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrI2NsZWFyTWFza1xyXG4gICAgICogQHNpbmNlIDMuNi4yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveU1hc2s9ZmFsc2VdIC0gRGVzdHJveSB0aGUgbWFzayBiZWZvcmUgY2xlYXJpbmcgaXQ/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2xlYXJNYXNrOiBmdW5jdGlvbiAoZGVzdHJveU1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lNYXNrID09PSB1bmRlZmluZWQpIHsgZGVzdHJveU1hc2sgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZGVzdHJveU1hc2sgJiYgdGhpcy5tYXNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXNrLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBCaXRtYXAgTWFzay4gVGhpcyBtYXNrIGNhbiBiZSB1c2VkIGJ5IGFueSBHYW1lIE9iamVjdCxcclxuICAgICAqIGluY2x1ZGluZyB0aGlzIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBUbyBjcmVhdGUgdGhlIG1hc2sgeW91IG5lZWQgdG8gcGFzcyBpbiBhIHJlZmVyZW5jZSB0byBhIHJlbmRlcmFibGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBBIHJlbmRlcmFibGUgR2FtZSBPYmplY3QgaXMgb25lIHRoYXQgdXNlcyBhIHRleHR1cmUgdG8gcmVuZGVyIHdpdGgsIHN1Y2ggYXMgYW5cclxuICAgICAqIEltYWdlLCBTcHJpdGUsIFJlbmRlciBUZXh0dXJlIG9yIEJpdG1hcFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcmVuZGVyYWJsZSBvYmplY3QsIGFuZCB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHRleHR1cmUsXHJcbiAgICAgKiBpdCB3aWxsIHVzZSBpdHNlbGYgYXMgdGhlIG9iamVjdC4gVGhpcyBtZWFucyB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgdG8gY3JlYXRlXHJcbiAgICAgKiBhIEJpdG1hcCBNYXNrIGZyb20gYW55IHJlbmRlcmFibGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrI2NyZWF0ZUJpdG1hcE1hc2tcclxuICAgICAqIEBzaW5jZSAzLjYuMlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBbcmVuZGVyYWJsZV0gLSBBIHJlbmRlcmFibGUgR2FtZSBPYmplY3QgdGhhdCB1c2VzIGEgdGV4dHVyZSwgc3VjaCBhcyBhIFNwcml0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfSBUaGlzIEJpdG1hcCBNYXNrIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUJpdG1hcE1hc2s6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlID09PSB1bmRlZmluZWQgJiYgKHRoaXMudGV4dHVyZSB8fCB0aGlzLnNoYWRlcikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBNYXNrKHRoaXMuc2NlbmUsIHJlbmRlcmFibGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBHZW9tZXRyeSBNYXNrLiBUaGlzIG1hc2sgY2FuIGJlIHVzZWQgYnkgYW55IEdhbWUgT2JqZWN0LFxyXG4gICAgICogaW5jbHVkaW5nIHRoaXMgb25lLlxyXG4gICAgICpcclxuICAgICAqIFRvIGNyZWF0ZSB0aGUgbWFzayB5b3UgbmVlZCB0byBwYXNzIGluIGEgcmVmZXJlbmNlIHRvIGEgR3JhcGhpY3MgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgZ3JhcGhpY3Mgb2JqZWN0LCBhbmQgdGhpcyBHYW1lIE9iamVjdCBpcyBhbiBpbnN0YW5jZVxyXG4gICAgICogb2YgYSBHcmFwaGljcyBvYmplY3QsIHRoZW4gaXQgd2lsbCB1c2UgaXRzZWxmIHRvIGNyZWF0ZSB0aGUgbWFzay5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZWFucyB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgR2VvbWV0cnkgTWFzayBmcm9tIGFueSBHcmFwaGljcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2sjY3JlYXRlR2VvbWV0cnlNYXNrXHJcbiAgICAgKiBAc2luY2UgMy42LjJcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFtncmFwaGljc10gLSBBIEdyYXBoaWNzIEdhbWUgT2JqZWN0LiBUaGUgZ2VvbWV0cnkgd2l0aGluIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgbWFzay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2t9IFRoaXMgR2VvbWV0cnkgTWFzayB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVHZW9tZXRyeU1hc2s6IGZ1bmN0aW9uIChncmFwaGljcylcclxuICAgIHtcclxuICAgICAgICBpZiAoZ3JhcGhpY3MgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnR5cGUgPT09ICdHcmFwaGljcycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzXHJcbiAgICAgICAgICAgIGdyYXBoaWNzID0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnlNYXNrKHRoaXMuc2NlbmUsIGdyYXBoaWNzKTtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hc2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Mask.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Origin.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Origin.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the origin of a Game Object.\r\n * Values are normalized, given in the range 0 to 1.\r\n * Display values contain the calculated pixel values.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Origin\r\n * @since 3.0.0\r\n */\r\n\r\nvar Origin = {\r\n\r\n    /**\r\n     * A property indicating that a Game Object has this component.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Origin#_originComponent\r\n     * @type {boolean}\r\n     * @private\r\n     * @default true\r\n     * @since 3.2.0\r\n     */\r\n    _originComponent: true,\r\n\r\n    /**\r\n     * The horizontal origin of this Game Object.\r\n     * The origin maps the relationship between the size and position of the Game Object.\r\n     * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n     * Setting the value to 0 means the position now relates to the left of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Origin#originX\r\n     * @type {number}\r\n     * @default 0.5\r\n     * @since 3.0.0\r\n     */\r\n    originX: 0.5,\r\n\r\n    /**\r\n     * The vertical origin of this Game Object.\r\n     * The origin maps the relationship between the size and position of the Game Object.\r\n     * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n     * Setting the value to 0 means the position now relates to the top of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Origin#originY\r\n     * @type {number}\r\n     * @default 0.5\r\n     * @since 3.0.0\r\n     */\r\n    originY: 0.5,\r\n\r\n    //  private + read only\r\n    _displayOriginX: 0,\r\n    _displayOriginY: 0,\r\n\r\n    /**\r\n     * The horizontal display origin of this Game Object.\r\n     * The origin is a normalized value between 0 and 1.\r\n     * The displayOrigin is a pixel value, based on the size of the Game Object combined with the origin.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Origin#displayOriginX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayOriginX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._displayOriginX;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._displayOriginX = value;\r\n            this.originX = value / this.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical display origin of this Game Object.\r\n     * The origin is a normalized value between 0 and 1.\r\n     * The displayOrigin is a pixel value, based on the size of the Game Object combined with the origin.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Origin#displayOriginY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayOriginY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._displayOriginY;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._displayOriginY = value;\r\n            this.originY = value / this.height;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the origin of this Game Object.\r\n     *\r\n     * The values are given in the range 0 to 1.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Origin#setOrigin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0.5] - The horizontal origin value.\r\n     * @param {number} [y=x] - The vertical origin value. If not defined it will be set to the value of `x`.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setOrigin: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0.5; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.originX = x;\r\n        this.originY = y;\r\n\r\n        return this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the origin of this Game Object based on the Pivot values in its Frame.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Origin#setOriginFromFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setOriginFromFrame: function ()\r\n    {\r\n        if (!this.frame || !this.frame.customPivot)\r\n        {\r\n            return this.setOrigin();\r\n        }\r\n        else\r\n        {\r\n            this.originX = this.frame.pivotX;\r\n            this.originY = this.frame.pivotY;\r\n        }\r\n\r\n        return this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the display origin of this Game Object.\r\n     * The difference between this and setting the origin is that you can use pixel values for setting the display origin.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Origin#setDisplayOrigin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal display origin value.\r\n     * @param {number} [y=x] - The vertical display origin value. If not defined it will be set to the value of `x`.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setDisplayOrigin: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.displayOriginX = x;\r\n        this.displayOriginY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the Display Origin cached values internally stored on this Game Object.\r\n     * You don't usually call this directly, but it is exposed for edge-cases where you may.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Origin#updateDisplayOrigin\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateDisplayOrigin: function ()\r\n    {\r\n        this._displayOriginX = this.originX * this.width;\r\n        this._displayOriginY = this.originY * this.height;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Origin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL09yaWdpbi5qcz9iNDY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFNBQVM7QUFDdkMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9PcmlnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIG9yaWdpbiBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBWYWx1ZXMgYXJlIG5vcm1hbGl6ZWQsIGdpdmVuIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqIERpc3BsYXkgdmFsdWVzIGNvbnRhaW4gdGhlIGNhbGN1bGF0ZWQgcGl4ZWwgdmFsdWVzLlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIE9yaWdpbiA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcHJvcGVydHkgaW5kaWNhdGluZyB0aGF0IGEgR2FtZSBPYmplY3QgaGFzIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNfb3JpZ2luQ29tcG9uZW50XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqL1xyXG4gICAgX29yaWdpbkNvbXBvbmVudDogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIG9yaWdpbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG9yaWdpbiBtYXBzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC41LCBtZWFuaW5nIGFsbCBHYW1lIE9iamVjdHMgYXJlIHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlaXIgY2VudGVyLlxyXG4gICAgICogU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBtZWFucyB0aGUgcG9zaXRpb24gbm93IHJlbGF0ZXMgdG8gdGhlIGxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb3JpZ2luWDogMC41LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIG9yaWdpbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG9yaWdpbiBtYXBzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC41LCBtZWFuaW5nIGFsbCBHYW1lIE9iamVjdHMgYXJlIHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlaXIgY2VudGVyLlxyXG4gICAgICogU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBtZWFucyB0aGUgcG9zaXRpb24gbm93IHJlbGF0ZXMgdG8gdGhlIHRvcCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvcmlnaW5ZOiAwLjUsXHJcblxyXG4gICAgLy8gIHByaXZhdGUgKyByZWFkIG9ubHlcclxuICAgIF9kaXNwbGF5T3JpZ2luWDogMCxcclxuICAgIF9kaXNwbGF5T3JpZ2luWTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIGRpc3BsYXkgb3JpZ2luIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGUgb3JpZ2luIGlzIGEgbm9ybWFsaXplZCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBUaGUgZGlzcGxheU9yaWdpbiBpcyBhIHBpeGVsIHZhbHVlLCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgR2FtZSBPYmplY3QgY29tYmluZWQgd2l0aCB0aGUgb3JpZ2luLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNkaXNwbGF5T3JpZ2luWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5T3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5T3JpZ2luWCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9yaWdpblggPSB2YWx1ZSAvIHRoaXMud2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgZGlzcGxheSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gaXMgYSBub3JtYWxpemVkIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoZSBkaXNwbGF5T3JpZ2luIGlzIGEgcGl4ZWwgdmFsdWUsIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdCBjb21iaW5lZCB3aXRoIHRoZSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI2Rpc3BsYXlPcmlnaW5ZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlPcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlPcmlnaW5ZID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9IHZhbHVlIC8gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBnaXZlbiBpbiB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI3NldE9yaWdpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTAuNV0gLSBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgb3JpZ2luIHZhbHVlLiBJZiBub3QgZGVmaW5lZCBpdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgYHhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE9yaWdpbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMC41OyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLm9yaWdpblggPSB4O1xyXG4gICAgICAgIHRoaXMub3JpZ2luWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdCBiYXNlZCBvbiB0aGUgUGl2b3QgdmFsdWVzIGluIGl0cyBGcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNzZXRPcmlnaW5Gcm9tRnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE9yaWdpbkZyb21GcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUgfHwgIXRoaXMuZnJhbWUuY3VzdG9tUGl2b3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRPcmlnaW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gdGhpcy5mcmFtZS5waXZvdFg7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9IHRoaXMuZnJhbWUucGl2b3RZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgb3JpZ2luIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHNldHRpbmcgdGhlIG9yaWdpbiBpcyB0aGF0IHlvdSBjYW4gdXNlIHBpeGVsIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgZGlzcGxheSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW4jc2V0RGlzcGxheU9yaWdpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgZGlzcGxheSBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgZGlzcGxheSBvcmlnaW4gdmFsdWUuIElmIG5vdCBkZWZpbmVkIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiBgeGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RGlzcGxheU9yaWdpbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5T3JpZ2luWCA9IHg7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5T3JpZ2luWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIERpc3BsYXkgT3JpZ2luIGNhY2hlZCB2YWx1ZXMgaW50ZXJuYWxseSBzdG9yZWQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFlvdSBkb24ndCB1c3VhbGx5IGNhbGwgdGhpcyBkaXJlY3RseSwgYnV0IGl0IGlzIGV4cG9zZWQgZm9yIGVkZ2UtY2FzZXMgd2hlcmUgeW91IG1heS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiN1cGRhdGVEaXNwbGF5T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEaXNwbGF5T3JpZ2luOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlPcmlnaW5YID0gdGhpcy5vcmlnaW5YICogdGhpcy53aWR0aDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5T3JpZ2luWSA9IHRoaXMub3JpZ2luWSAqIHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9yaWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Origin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/PathFollower.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/PathFollower.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar GetBoolean = __webpack_require__(/*! ../../tweens/builders/GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar TWEEN_CONST = __webpack_require__(/*! ../../tweens/tween/const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Provides methods used for managing a Game Object following a Path.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.PathFollower\r\n * @since 3.17.0\r\n */\r\n\r\nvar PathFollower = {\r\n\r\n    /**\r\n     * The Path this PathFollower is following. It can only follow one Path at a time.\r\n     *\r\n     * @name Phaser.GameObjects.Components.PathFollower#path\r\n     * @type {Phaser.Curves.Path}\r\n     * @since 3.0.0\r\n     */\r\n    path: null,\r\n\r\n    /**\r\n     * Should the PathFollower automatically rotate to point in the direction of the Path?\r\n     *\r\n     * @name Phaser.GameObjects.Components.PathFollower#rotateToPath\r\n     * @type {boolean}\r\n     * @default false\r\n     * @since 3.0.0\r\n     */\r\n    rotateToPath: false,\r\n\r\n    /**\r\n     * If the PathFollower is rotating to match the Path (@see Phaser.GameObjects.PathFollower#rotateToPath)\r\n     * this value is added to the rotation value. This allows you to rotate objects to a path but control\r\n     * the angle of the rotation as well.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#pathRotationOffset\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    pathRotationOffset: 0,\r\n\r\n    /**\r\n     * An additional vector to add to the PathFollowers position, allowing you to offset it from the\r\n     * Path coordinates.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#pathOffset\r\n     * @type {Phaser.Math.Vector2}\r\n     * @since 3.0.0\r\n     */\r\n    pathOffset: null,\r\n\r\n    /**\r\n     * A Vector2 that stores the current point of the path the follower is on.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#pathVector\r\n     * @type {Phaser.Math.Vector2}\r\n     * @since 3.0.0\r\n     */\r\n    pathVector: null,\r\n\r\n    /**\r\n     * The Tween used for following the Path.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#pathTween\r\n     * @type {Phaser.Tweens.Tween}\r\n     * @since 3.0.0\r\n     */\r\n    pathTween: null,\r\n\r\n    /**\r\n     * Settings for the PathFollower.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#pathConfig\r\n     * @type {?Phaser.Types.GameObjects.PathFollower.PathConfig}\r\n     * @default null\r\n     * @since 3.0.0\r\n     */\r\n    pathConfig: null,\r\n\r\n    /**\r\n     * Records the direction of the follower so it can change direction.\r\n     *\r\n     * @name Phaser.GameObjects.PathFollower#_prevDirection\r\n     * @type {integer}\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    _prevDirection: TWEEN_CONST.PLAYING_FORWARD,\r\n\r\n    /**\r\n     * Set the Path that this PathFollower should follow.\r\n     *\r\n     * Optionally accepts {@link Phaser.Types.GameObjects.PathFollower.PathConfig} settings.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#setPath\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Curves.Path} path - The Path this PathFollower is following. It can only follow one Path at a time.\r\n     * @param {(number|Phaser.Types.GameObjects.PathFollower.PathConfig|Phaser.Types.Tweens.NumberTweenBuilderConfig)} [config] - Settings for the PathFollower.\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    setPath: function (path, config)\r\n    {\r\n        if (config === undefined) { config = this.pathConfig; }\r\n\r\n        var tween = this.pathTween;\r\n\r\n        if (tween && tween.isPlaying())\r\n        {\r\n            tween.stop();\r\n        }\r\n\r\n        this.path = path;\r\n\r\n        if (config)\r\n        {\r\n            this.startFollow(config);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set whether the PathFollower should automatically rotate to point in the direction of the Path.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#setRotateToPath\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - Whether the PathFollower should automatically rotate to point in the direction of the Path.\r\n     * @param {number} [offset=0] - Rotation offset in degrees.\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    setRotateToPath: function (value, offset)\r\n    {\r\n        if (offset === undefined) { offset = 0; }\r\n\r\n        this.rotateToPath = value;\r\n\r\n        this.pathRotationOffset = offset;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Is this PathFollower actively following a Path or not?\r\n     *\r\n     * To be considered as `isFollowing` it must be currently moving on a Path, and not paused.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#isFollowing\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` is this PathFollower is actively following a Path, otherwise `false`.\r\n     */\r\n    isFollowing: function ()\r\n    {\r\n        var tween = this.pathTween;\r\n\r\n        return (tween && tween.isPlaying());\r\n    },\r\n\r\n    /**\r\n     * Starts this PathFollower following its given Path.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#startFollow\r\n     * @since 3.3.0\r\n     *\r\n     * @param {(number|Phaser.Types.GameObjects.PathFollower.PathConfig|Phaser.Types.Tweens.NumberTweenBuilderConfig)} [config={}] - The duration of the follow, or a PathFollower config object.\r\n     * @param {number} [startAt=0] - Optional start position of the follow, between 0 and 1.\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    startFollow: function (config, startAt)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n        if (startAt === undefined) { startAt = 0; }\r\n\r\n        var tween = this.pathTween;\r\n\r\n        if (tween && tween.isPlaying())\r\n        {\r\n            tween.stop();\r\n        }\r\n\r\n        if (typeof config === 'number')\r\n        {\r\n            config = { duration: config };\r\n        }\r\n\r\n        //  Override in case they've been specified in the config\r\n        config.from = GetValue(config, 'from', 0);\r\n        config.to = GetValue(config, 'to', 1);\r\n\r\n        var positionOnPath = GetBoolean(config, 'positionOnPath', false);\r\n\r\n        this.rotateToPath = GetBoolean(config, 'rotateToPath', false);\r\n        this.pathRotationOffset = GetValue(config, 'rotationOffset', 0);\r\n\r\n        //  This works, but it's not an ideal way of doing it as the follower jumps position\r\n        var seek = GetValue(config, 'startAt', startAt);\r\n\r\n        if (seek)\r\n        {\r\n            config.onStart = function (tween)\r\n            {\r\n                var tweenData = tween.data[0];\r\n                tweenData.progress = seek;\r\n                tweenData.elapsed = tweenData.duration * seek;\r\n                var v = tweenData.ease(tweenData.progress);\r\n                tweenData.current = tweenData.start + ((tweenData.end - tweenData.start) * v);\r\n                tweenData.target[tweenData.key] = tweenData.current;\r\n            };\r\n        }\r\n\r\n        if (!this.pathOffset)\r\n        {\r\n            this.pathOffset = new Vector2(this.x, this.y);\r\n        }\r\n\r\n        if (!this.pathVector)\r\n        {\r\n            this.pathVector = new Vector2();\r\n        }\r\n\r\n        this.pathTween = this.scene.sys.tweens.addCounter(config);\r\n\r\n        //  The starting point of the path, relative to this follower\r\n        this.path.getStartPoint(this.pathOffset);\r\n\r\n        if (positionOnPath)\r\n        {\r\n            this.x = this.pathOffset.x;\r\n            this.y = this.pathOffset.y;\r\n        }\r\n\r\n        this.pathOffset.x = this.x - this.pathOffset.x;\r\n        this.pathOffset.y = this.y - this.pathOffset.y;\r\n\r\n        this._prevDirection = TWEEN_CONST.PLAYING_FORWARD;\r\n\r\n        if (this.rotateToPath)\r\n        {\r\n            //  Set the rotation now (in case the tween has a delay on it, etc)\r\n            var nextPoint = this.path.getPoint(0.1);\r\n\r\n            this.rotation = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x) + DegToRad(this.pathRotationOffset);\r\n        }\r\n\r\n        this.pathConfig = config;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Pauses this PathFollower. It will still continue to render, but it will remain motionless at the\r\n     * point on the Path at which you paused it.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#pauseFollow\r\n     * @since 3.3.0\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    pauseFollow: function ()\r\n    {\r\n        var tween = this.pathTween;\r\n\r\n        if (tween && tween.isPlaying())\r\n        {\r\n            tween.pause();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes a previously paused PathFollower.\r\n     *\r\n     * If the PathFollower was not paused this has no effect.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#resumeFollow\r\n     * @since 3.3.0\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    resumeFollow: function ()\r\n    {\r\n        var tween = this.pathTween;\r\n\r\n        if (tween && tween.isPaused())\r\n        {\r\n            tween.resume();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops this PathFollower from following the path any longer.\r\n     *\r\n     * This will invoke any 'stop' conditions that may exist on the Path, or for the follower.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#stopFollow\r\n     * @since 3.3.0\r\n     *\r\n     * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n     */\r\n    stopFollow: function ()\r\n    {\r\n        var tween = this.pathTween;\r\n\r\n        if (tween && tween.isPlaying())\r\n        {\r\n            tween.stop();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler that advances this PathFollower along the path.\r\n     *\r\n     * Called automatically by the Scene step, should not typically be called directly.\r\n     *\r\n     * @method Phaser.GameObjects.Components.PathFollower#pathUpdate\r\n     * @since 3.17.0\r\n     */\r\n    pathUpdate: function ()\r\n    {\r\n        var tween = this.pathTween;\r\n\r\n        if (tween)\r\n        {\r\n            var tweenData = tween.data[0];\r\n\r\n            if (tweenData.state !== TWEEN_CONST.PLAYING_FORWARD && tweenData.state !== TWEEN_CONST.PLAYING_BACKWARD)\r\n            {\r\n                //  If delayed, etc then bail out\r\n                return;\r\n            }\r\n\r\n            var pathVector = this.pathVector;\r\n\r\n            this.path.getPoint(tween.getValue(), pathVector);\r\n\r\n            pathVector.add(this.pathOffset);\r\n\r\n            var oldX = this.x;\r\n            var oldY = this.y;\r\n\r\n            this.setPosition(pathVector.x, pathVector.y);\r\n\r\n            var speedX = this.x - oldX;\r\n            var speedY = this.y - oldY;\r\n\r\n            if (speedX === 0 && speedY === 0)\r\n            {\r\n                //  Bail out early\r\n                return;\r\n            }\r\n\r\n            if (tweenData.state !== this._prevDirection)\r\n            {\r\n                //  We've changed direction, so don't do a rotate this frame\r\n                this._prevDirection = tweenData.state;\r\n\r\n                return;\r\n            }\r\n\r\n            if (this.rotateToPath)\r\n            {\r\n                this.rotation = Math.atan2(speedY, speedX) + DegToRad(this.pathRotationOffset);\r\n            }\r\n        }\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = PathFollower;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1BhdGhGb2xsb3dlci5qcz9lYmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsdUVBQXFCO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLGlHQUFrQztBQUMzRCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVEQUF1RDtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsdUdBQXVHO0FBQ3RIO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsMEJBQTBCOztBQUU3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFlBQVk7O0FBRS9DOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUdBQXVHLFdBQVc7QUFDakksZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTtBQUNoRCxvQ0FBb0MsYUFBYTs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvUGF0aEZvbGxvd2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBHZXRCb29sZWFuID0gcmVxdWlyZSgnLi4vLi4vdHdlZW5zL2J1aWxkZXJzL0dldEJvb2xlYW4nKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBUV0VFTl9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL3R3ZWVucy90d2Vlbi9jb25zdCcpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgbWFuYWdpbmcgYSBHYW1lIE9iamVjdCBmb2xsb3dpbmcgYSBQYXRoLlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXJcclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKi9cclxuXHJcbnZhciBQYXRoRm9sbG93ZXIgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3BhdGhcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuQ3VydmVzLlBhdGh9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3VsZCB0aGUgUGF0aEZvbGxvd2VyIGF1dG9tYXRpY2FsbHkgcm90YXRlIHRvIHBvaW50IGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFBhdGg/XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3JvdGF0ZVRvUGF0aFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVRvUGF0aDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgUGF0aEZvbGxvd2VyIGlzIHJvdGF0aW5nIHRvIG1hdGNoIHRoZSBQYXRoIChAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjcm90YXRlVG9QYXRoKVxyXG4gICAgICogdGhpcyB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgcm90YXRpb24gdmFsdWUuIFRoaXMgYWxsb3dzIHlvdSB0byByb3RhdGUgb2JqZWN0cyB0byBhIHBhdGggYnV0IGNvbnRyb2xcclxuICAgICAqIHRoZSBhbmdsZSBvZiB0aGUgcm90YXRpb24gYXMgd2VsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhSb3RhdGlvbk9mZnNldFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoUm90YXRpb25PZmZzZXQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhZGRpdGlvbmFsIHZlY3RvciB0byBhZGQgdG8gdGhlIFBhdGhGb2xsb3dlcnMgcG9zaXRpb24sIGFsbG93aW5nIHlvdSB0byBvZmZzZXQgaXQgZnJvbSB0aGVcclxuICAgICAqIFBhdGggY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlciNwYXRoT2Zmc2V0XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoT2Zmc2V0OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBWZWN0b3IyIHRoYXQgc3RvcmVzIHRoZSBjdXJyZW50IHBvaW50IG9mIHRoZSBwYXRoIHRoZSBmb2xsb3dlciBpcyBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhWZWN0b3JcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBhdGhWZWN0b3I6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVHdlZW4gdXNlZCBmb3IgZm9sbG93aW5nIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjcGF0aFR3ZWVuXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoVHdlZW46IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0aW5ncyBmb3IgdGhlIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhDb25maWdcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBhdGhDb25maWc6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcmRzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvbGxvd2VyIHNvIGl0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjX3ByZXZEaXJlY3Rpb25cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfcHJldkRpcmVjdGlvbjogVFdFRU5fQ09OU1QuUExBWUlOR19GT1JXQVJELFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBQYXRoIHRoYXQgdGhpcyBQYXRoRm9sbG93ZXIgc2hvdWxkIGZvbGxvdy5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IGFjY2VwdHMge0BsaW5rIFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIuUGF0aENvbmZpZ30gc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjc2V0UGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLlBhdGh9IHBhdGggLSBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfFBoYXNlci5UeXBlcy5Ud2VlbnMuTnVtYmVyVHdlZW5CdWlsZGVyQ29uZmlnKX0gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhlIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQYXRoOiBmdW5jdGlvbiAocGF0aCwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB0aGlzLnBhdGhDb25maWc7IH1cclxuXHJcbiAgICAgICAgdmFyIHR3ZWVuID0gdGhpcy5wYXRoVHdlZW47XHJcblxyXG4gICAgICAgIGlmICh0d2VlbiAmJiB0d2Vlbi5pc1BsYXlpbmcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Rm9sbG93KGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgd2hldGhlciB0aGUgUGF0aEZvbGxvd2VyIHNob3VsZCBhdXRvbWF0aWNhbGx5IHJvdGF0ZSB0byBwb2ludCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3NldFJvdGF0ZVRvUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFdoZXRoZXIgdGhlIFBhdGhGb2xsb3dlciBzaG91bGQgYXV0b21hdGljYWxseSByb3RhdGUgdG8gcG9pbnQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgUGF0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gUm90YXRpb24gb2Zmc2V0IGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlcn0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRlVG9QYXRoOiBmdW5jdGlvbiAodmFsdWUsIG9mZnNldClcclxuICAgIHtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0ZVRvUGF0aCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhSb3RhdGlvbk9mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhpcyBQYXRoRm9sbG93ZXIgYWN0aXZlbHkgZm9sbG93aW5nIGEgUGF0aCBvciBub3Q/XHJcbiAgICAgKlxyXG4gICAgICogVG8gYmUgY29uc2lkZXJlZCBhcyBgaXNGb2xsb3dpbmdgIGl0IG11c3QgYmUgY3VycmVudGx5IG1vdmluZyBvbiBhIFBhdGgsIGFuZCBub3QgcGF1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI2lzRm9sbG93aW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaXMgdGhpcyBQYXRoRm9sbG93ZXIgaXMgYWN0aXZlbHkgZm9sbG93aW5nIGEgUGF0aCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzRm9sbG93aW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICByZXR1cm4gKHR3ZWVuICYmIHR3ZWVuLmlzUGxheWluZygpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgdGhpcyBQYXRoRm9sbG93ZXIgZm9sbG93aW5nIGl0cyBnaXZlbiBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3N0YXJ0Rm9sbG93XHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfFBoYXNlci5UeXBlcy5Ud2VlbnMuTnVtYmVyVHdlZW5CdWlsZGVyQ29uZmlnKX0gW2NvbmZpZz17fV0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGZvbGxvdywgb3IgYSBQYXRoRm9sbG93ZXIgY29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRBdD0wXSAtIE9wdGlvbmFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmb2xsb3csIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdGFydEZvbGxvdzogZnVuY3Rpb24gKGNvbmZpZywgc3RhcnRBdClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuICAgICAgICBpZiAoc3RhcnRBdCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0QXQgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICBpZiAodHdlZW4gJiYgdHdlZW4uaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7IGR1cmF0aW9uOiBjb25maWcgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBPdmVycmlkZSBpbiBjYXNlIHRoZXkndmUgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ1xyXG4gICAgICAgIGNvbmZpZy5mcm9tID0gR2V0VmFsdWUoY29uZmlnLCAnZnJvbScsIDApO1xyXG4gICAgICAgIGNvbmZpZy50byA9IEdldFZhbHVlKGNvbmZpZywgJ3RvJywgMSk7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbk9uUGF0aCA9IEdldEJvb2xlYW4oY29uZmlnLCAncG9zaXRpb25PblBhdGgnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucm90YXRlVG9QYXRoID0gR2V0Qm9vbGVhbihjb25maWcsICdyb3RhdGVUb1BhdGgnLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5wYXRoUm90YXRpb25PZmZzZXQgPSBHZXRWYWx1ZShjb25maWcsICdyb3RhdGlvbk9mZnNldCcsIDApO1xyXG5cclxuICAgICAgICAvLyAgVGhpcyB3b3JrcywgYnV0IGl0J3Mgbm90IGFuIGlkZWFsIHdheSBvZiBkb2luZyBpdCBhcyB0aGUgZm9sbG93ZXIganVtcHMgcG9zaXRpb25cclxuICAgICAgICB2YXIgc2VlayA9IEdldFZhbHVlKGNvbmZpZywgJ3N0YXJ0QXQnLCBzdGFydEF0KTtcclxuXHJcbiAgICAgICAgaWYgKHNlZWspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcub25TdGFydCA9IGZ1bmN0aW9uICh0d2VlbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IHR3ZWVuLmRhdGFbMF07XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEucHJvZ3Jlc3MgPSBzZWVrO1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSB0d2VlbkRhdGEuZHVyYXRpb24gKiBzZWVrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0d2VlbkRhdGEuZWFzZSh0d2VlbkRhdGEucHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLmN1cnJlbnQgPSB0d2VlbkRhdGEuc3RhcnQgKyAoKHR3ZWVuRGF0YS5lbmQgLSB0d2VlbkRhdGEuc3RhcnQpICogdik7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEudGFyZ2V0W3R3ZWVuRGF0YS5rZXldID0gdHdlZW5EYXRhLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucGF0aE9mZnNldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0aE9mZnNldCA9IG5ldyBWZWN0b3IyKHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wYXRoVmVjdG9yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRoVmVjdG9yID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aFR3ZWVuID0gdGhpcy5zY2VuZS5zeXMudHdlZW5zLmFkZENvdW50ZXIoY29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhpcyBmb2xsb3dlclxyXG4gICAgICAgIHRoaXMucGF0aC5nZXRTdGFydFBvaW50KHRoaXMucGF0aE9mZnNldCk7XHJcblxyXG4gICAgICAgIGlmIChwb3NpdGlvbk9uUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHRoaXMucGF0aE9mZnNldC54O1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB0aGlzLnBhdGhPZmZzZXQueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aE9mZnNldC54ID0gdGhpcy54IC0gdGhpcy5wYXRoT2Zmc2V0Lng7XHJcbiAgICAgICAgdGhpcy5wYXRoT2Zmc2V0LnkgPSB0aGlzLnkgLSB0aGlzLnBhdGhPZmZzZXQueTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldkRpcmVjdGlvbiA9IFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm90YXRlVG9QYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNldCB0aGUgcm90YXRpb24gbm93IChpbiBjYXNlIHRoZSB0d2VlbiBoYXMgYSBkZWxheSBvbiBpdCwgZXRjKVxyXG4gICAgICAgICAgICB2YXIgbmV4dFBvaW50ID0gdGhpcy5wYXRoLmdldFBvaW50KDAuMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gTWF0aC5hdGFuMihuZXh0UG9pbnQueSAtIHRoaXMueSwgbmV4dFBvaW50LnggLSB0aGlzLngpICsgRGVnVG9SYWQodGhpcy5wYXRoUm90YXRpb25PZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRoQ29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZXMgdGhpcyBQYXRoRm9sbG93ZXIuIEl0IHdpbGwgc3RpbGwgY29udGludWUgdG8gcmVuZGVyLCBidXQgaXQgd2lsbCByZW1haW4gbW90aW9ubGVzcyBhdCB0aGVcclxuICAgICAqIHBvaW50IG9uIHRoZSBQYXRoIGF0IHdoaWNoIHlvdSBwYXVzZWQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjcGF1c2VGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlRm9sbG93OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICBpZiAodHdlZW4gJiYgdHdlZW4uaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyBhIHByZXZpb3VzbHkgcGF1c2VkIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgUGF0aEZvbGxvd2VyIHdhcyBub3QgcGF1c2VkIHRoaXMgaGFzIG5vIGVmZmVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBhdGhGb2xsb3dlciNyZXN1bWVGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZUZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuICYmIHR3ZWVuLmlzUGF1c2VkKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoaXMgUGF0aEZvbGxvd2VyIGZyb20gZm9sbG93aW5nIHRoZSBwYXRoIGFueSBsb25nZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGludm9rZSBhbnkgJ3N0b3AnIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIFBhdGgsIG9yIGZvciB0aGUgZm9sbG93ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjc3RvcEZvbGxvd1xyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlcn0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3RvcEZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuICYmIHR3ZWVuLmlzUGxheWluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHdlZW4uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgdGhhdCBhZHZhbmNlcyB0aGlzIFBhdGhGb2xsb3dlciBhbG9uZyB0aGUgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgc3RlcCwgc2hvdWxkIG5vdCB0eXBpY2FsbHkgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3BhdGhVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcGF0aFVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IHR3ZWVuLmRhdGFbMF07XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW5EYXRhLnN0YXRlICE9PSBUV0VFTl9DT05TVC5QTEFZSU5HX0ZPUldBUkQgJiYgdHdlZW5EYXRhLnN0YXRlICE9PSBUV0VFTl9DT05TVC5QTEFZSU5HX0JBQ0tXQVJEKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSWYgZGVsYXllZCwgZXRjIHRoZW4gYmFpbCBvdXRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBhdGhWZWN0b3IgPSB0aGlzLnBhdGhWZWN0b3I7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhdGguZ2V0UG9pbnQodHdlZW4uZ2V0VmFsdWUoKSwgcGF0aFZlY3Rvcik7XHJcblxyXG4gICAgICAgICAgICBwYXRoVmVjdG9yLmFkZCh0aGlzLnBhdGhPZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG9sZFggPSB0aGlzLng7XHJcbiAgICAgICAgICAgIHZhciBvbGRZID0gdGhpcy55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihwYXRoVmVjdG9yLngsIHBhdGhWZWN0b3IueSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3BlZWRYID0gdGhpcy54IC0gb2xkWDtcclxuICAgICAgICAgICAgdmFyIHNwZWVkWSA9IHRoaXMueSAtIG9sZFk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3BlZWRYID09PSAwICYmIHNwZWVkWSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEJhaWwgb3V0IGVhcmx5XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuc3RhdGUgIT09IHRoaXMuX3ByZXZEaXJlY3Rpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSd2ZSBjaGFuZ2VkIGRpcmVjdGlvbiwgc28gZG9uJ3QgZG8gYSByb3RhdGUgdGhpcyBmcmFtZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldkRpcmVjdGlvbiA9IHR3ZWVuRGF0YS5zdGF0ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0ZVRvUGF0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbiA9IE1hdGguYXRhbjIoc3BlZWRZLCBzcGVlZFgpICsgRGVnVG9SYWQodGhpcy5wYXRoUm90YXRpb25PZmZzZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aEZvbGxvd2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/PathFollower.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Pipeline.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Pipeline.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the WebGL rendering pipeline of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Pipeline\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n\r\nvar Pipeline = {\r\n\r\n    /**\r\n     * The initial WebGL pipeline of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Pipeline#defaultPipeline\r\n     * @type {Phaser.Renderer.WebGL.WebGLPipeline}\r\n     * @default null\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    defaultPipeline: null,\r\n\r\n    /**\r\n     * The current WebGL pipeline of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Pipeline#pipeline\r\n     * @type {Phaser.Renderer.WebGL.WebGLPipeline}\r\n     * @default null\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    pipeline: null,\r\n\r\n    /**\r\n     * Sets the initial WebGL Pipeline of this Game Object.\r\n     * This should only be called during the instantiation of the Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Pipeline#initPipeline\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [pipelineName=TextureTintPipeline] - The name of the pipeline to set on this Game Object. Defaults to the Texture Tint Pipeline.\r\n     *\r\n     * @return {boolean} `true` if the pipeline was set successfully, otherwise `false`.\r\n     */\r\n    initPipeline: function (pipelineName)\r\n    {\r\n        if (pipelineName === undefined) { pipelineName = 'TextureTintPipeline'; }\r\n\r\n        var renderer = this.scene.sys.game.renderer;\r\n\r\n        if (renderer && renderer.gl && renderer.hasPipeline(pipelineName))\r\n        {\r\n            this.defaultPipeline = renderer.getPipeline(pipelineName);\r\n            this.pipeline = this.defaultPipeline;\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Sets the active WebGL Pipeline of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Pipeline#setPipeline\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} pipelineName - The name of the pipeline to set on this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setPipeline: function (pipelineName)\r\n    {\r\n        var renderer = this.scene.sys.game.renderer;\r\n\r\n        if (renderer && renderer.gl && renderer.hasPipeline(pipelineName))\r\n        {\r\n            this.pipeline = renderer.getPipeline(pipelineName);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the WebGL Pipeline of this Game Object back to the default it was created with.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Pipeline#resetPipeline\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the pipeline was set successfully, otherwise `false`.\r\n     */\r\n    resetPipeline: function ()\r\n    {\r\n        this.pipeline = this.defaultPipeline;\r\n\r\n        return (this.pipeline !== null);\r\n    },\r\n\r\n    /**\r\n     * Gets the name of the WebGL Pipeline this Game Object is currently using.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Pipeline#getPipelineName\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @return {string} The string-based name of the pipeline being used by this Game Object.\r\n     */\r\n    getPipelineName: function ()\r\n    {\r\n        return this.pipeline.name;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Pipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1BpcGVsaW5lLmpzP2UwYTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHNDQUFzQzs7QUFFL0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9QaXBlbGluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgV2ViR0wgcmVuZGVyaW5nIHBpcGVsaW5lIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQHdlYmdsT25seVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgUGlwZWxpbmUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5pdGlhbCBXZWJHTCBwaXBlbGluZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI2RlZmF1bHRQaXBlbGluZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lfVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRQaXBlbGluZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIHBpcGVsaW5lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmUjcGlwZWxpbmVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX1cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwaXBlbGluZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGluaXRpYWwgV2ViR0wgUGlwZWxpbmUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZSNpbml0UGlwZWxpbmVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGlwZWxpbmVOYW1lPVRleHR1cmVUaW50UGlwZWxpbmVdIC0gVGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lIHRvIHNldCBvbiB0aGlzIEdhbWUgT2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgVGV4dHVyZSBUaW50IFBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGlwZWxpbmUgd2FzIHNldCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBpbml0UGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZU5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBpcGVsaW5lTmFtZSA9PT0gdW5kZWZpbmVkKSB7IHBpcGVsaW5lTmFtZSA9ICdUZXh0dXJlVGludFBpcGVsaW5lJzsgfVxyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmVOYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBpcGVsaW5lID0gcmVuZGVyZXIuZ2V0UGlwZWxpbmUocGlwZWxpbmVOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5waXBlbGluZSA9IHRoaXMuZGVmYXVsdFBpcGVsaW5lO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWN0aXZlIFdlYkdMIFBpcGVsaW5lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZSNzZXRQaXBlbGluZVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBpcGVsaW5lTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSB0byBzZXQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQaXBlbGluZTogZnVuY3Rpb24gKHBpcGVsaW5lTmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmVOYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSByZW5kZXJlci5nZXRQaXBlbGluZShwaXBlbGluZU5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBXZWJHTCBQaXBlbGluZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGJhY2sgdG8gdGhlIGRlZmF1bHQgaXQgd2FzIGNyZWF0ZWQgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI3Jlc2V0UGlwZWxpbmVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGlwZWxpbmUgd2FzIHNldCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICByZXNldFBpcGVsaW5lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGlwZWxpbmUgPSB0aGlzLmRlZmF1bHRQaXBlbGluZTtcclxuXHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnBpcGVsaW5lICE9PSBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBXZWJHTCBQaXBlbGluZSB0aGlzIEdhbWUgT2JqZWN0IGlzIGN1cnJlbnRseSB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI2dldFBpcGVsaW5lTmFtZVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nLWJhc2VkIG5hbWUgb2YgdGhlIHBpcGVsaW5lIGJlaW5nIHVzZWQgYnkgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGlwZWxpbmVOYW1lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLm5hbWU7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQaXBlbGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Pipeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/ScrollFactor.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/ScrollFactor.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the Scroll Factor of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.ScrollFactor\r\n * @since 3.0.0\r\n */\r\n\r\nvar ScrollFactor = {\r\n\r\n    /**\r\n     * The horizontal scroll factor of this Game Object.\r\n     *\r\n     * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n     *\r\n     * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n     * It does not change the Game Objects actual position values.\r\n     *\r\n     * A value of 1 means it will move exactly in sync with a camera.\r\n     * A value of 0 means it will not move at all, even if the camera moves.\r\n     * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n     * \r\n     * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n     * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n     * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n     * them from physics bodies if not accounted for in your code.\r\n     *\r\n     * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorX\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    scrollFactorX: 1,\r\n\r\n    /**\r\n     * The vertical scroll factor of this Game Object.\r\n     *\r\n     * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n     *\r\n     * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n     * It does not change the Game Objects actual position values.\r\n     *\r\n     * A value of 1 means it will move exactly in sync with a camera.\r\n     * A value of 0 means it will not move at all, even if the camera moves.\r\n     * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n     * \r\n     * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n     * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n     * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n     * them from physics bodies if not accounted for in your code.\r\n     *\r\n     * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorY\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    scrollFactorY: 1,\r\n\r\n    /**\r\n     * Sets the scroll factor of this Game Object.\r\n     *\r\n     * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n     *\r\n     * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n     * It does not change the Game Objects actual position values.\r\n     *\r\n     * A value of 1 means it will move exactly in sync with a camera.\r\n     * A value of 0 means it will not move at all, even if the camera moves.\r\n     * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n     * \r\n     * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n     * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n     * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n     * them from physics bodies if not accounted for in your code.\r\n     *\r\n     * @method Phaser.GameObjects.Components.ScrollFactor#setScrollFactor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scroll factor of this Game Object.\r\n     * @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setScrollFactor: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.scrollFactorX = x;\r\n        this.scrollFactorY = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = ScrollFactor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Njcm9sbEZhY3Rvci5qcz84NTg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Njcm9sbEZhY3Rvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgU2Nyb2xsIEZhY3RvciBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgU2Nyb2xsRmFjdG9yID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvciNzY3JvbGxGYWN0b3JYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbEZhY3Rvclg6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvciNzY3JvbGxGYWN0b3JZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbEZhY3Rvclk6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY3JvbGwgZmFjdG9yIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjcm9sbCBmYWN0b3IgY29udHJvbHMgdGhlIGluZmx1ZW5jZSBvZiB0aGUgbW92ZW1lbnQgb2YgYSBDYW1lcmEgdXBvbiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYSBjYW1lcmEgc2Nyb2xscyBpdCB3aWxsIGNoYW5nZSB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBvbi1zY3JlZW4uXHJcbiAgICAgKiBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIEdhbWUgT2JqZWN0cyBhY3R1YWwgcG9zaXRpb24gdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyBpdCB3aWxsIG1vdmUgZXhhY3RseSBpbiBzeW5jIHdpdGggYSBjYW1lcmEuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAgbWVhbnMgaXQgd2lsbCBub3QgbW92ZSBhdCBhbGwsIGV2ZW4gaWYgdGhlIGNhbWVyYSBtb3Zlcy5cclxuICAgICAqIE90aGVyIHZhbHVlcyBjb250cm9sIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNhbWVyYSBtb3ZlbWVudCBpcyBtYXBwZWQgdG8gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgc2Nyb2xsIGZhY3RvciB2YWx1ZXMgb3RoZXIgdGhhbiAxIGFyZSBub3QgdGFrZW4gaW4gdG8gY29uc2lkZXJhdGlvbiB3aGVuXHJcbiAgICAgKiBjYWxjdWxhdGluZyBwaHlzaWNzIGNvbGxpc2lvbnMuIEJvZGllcyBhbHdheXMgY29sbGlkZSBiYXNlZCBvbiB0aGVpciB3b3JsZCBwb3NpdGlvbiwgYnV0IGNoYW5naW5nXHJcbiAgICAgKiB0aGUgc2Nyb2xsIGZhY3RvciBpcyBhIHZpc3VhbCBhZGp1c3RtZW50IHRvIHdoZXJlIHRoZSB0ZXh0dXJlcyBhcmUgcmVuZGVyZWQsIHdoaWNoIGNhbiBvZmZzZXRcclxuICAgICAqIHRoZW0gZnJvbSBwaHlzaWNzIGJvZGllcyBpZiBub3QgYWNjb3VudGVkIGZvciBpbiB5b3VyIGNvZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3Ijc2V0U2Nyb2xsRmFjdG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoaXMgR2FtZSBPYmplY3QuIElmIG5vdCBzZXQgaXQgd2lsbCB1c2UgdGhlIGB4YCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTY3JvbGxGYWN0b3I6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JYID0geDtcclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjcm9sbEZhY3RvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Size.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Size.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the size of a Game Object.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Size\r\n * @since 3.0.0\r\n */\r\n\r\nvar Size = {\r\n\r\n    /**\r\n     * A property indicating that a Game Object has this component.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Size#_sizeComponent\r\n     * @type {boolean}\r\n     * @private\r\n     * @default true\r\n     * @since 3.2.0\r\n     */\r\n    _sizeComponent: true,\r\n\r\n    /**\r\n     * The native (un-scaled) width of this Game Object.\r\n     * \r\n     * Changing this value will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n     * the `displayWidth` property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Size#width\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    width: 0,\r\n\r\n    /**\r\n     * The native (un-scaled) height of this Game Object.\r\n     * \r\n     * Changing this value will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n     * the `displayHeight` property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Size#height\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    height: 0,\r\n\r\n    /**\r\n     * The displayed width of this Game Object.\r\n     * \r\n     * This value takes into account the scale factor.\r\n     * \r\n     * Setting this value will adjust the Game Object's scale property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Size#displayWidth\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayWidth: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.abs(this.scaleX * this.frame.realWidth);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleX = value / this.frame.realWidth;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The displayed height of this Game Object.\r\n     * \r\n     * This value takes into account the scale factor.\r\n     * \r\n     * Setting this value will adjust the Game Object's scale property.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Size#displayHeight\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayHeight: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.abs(this.scaleY * this.frame.realHeight);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleY = value / this.frame.realHeight;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the size of this Game Object to be that of the given Frame.\r\n     * \r\n     * This will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n     * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n     * to do so by giving pixel values.\r\n     * \r\n     * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n     * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Size#setSizeToFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.Frame} frame - The frame to base the size of this Game Object on.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSizeToFrame: function (frame)\r\n    {\r\n        if (frame === undefined) { frame = this.frame; }\r\n\r\n        this.width = frame.realWidth;\r\n        this.height = frame.realHeight;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the internal size of this Game Object, as used for frame or physics body creation.\r\n     * \r\n     * This will not change the size that the Game Object is rendered in-game.\r\n     * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n     * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n     * to do so by giving pixel values.\r\n     * \r\n     * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n     * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Size#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the display size of this Game Object.\r\n     * \r\n     * Calling this will adjust the scale.\r\n     * \r\n     * @method Phaser.GameObjects.Components.Size#setDisplaySize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setDisplaySize: function (width, height)\r\n    {\r\n        this.displayWidth = width;\r\n        this.displayHeight = height;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Size;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1NpemUuanM/NTliNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9COztBQUV0RDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9TaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzaXplIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFNpemUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHByb3BlcnR5IGluZGljYXRpbmcgdGhhdCBhIEdhbWUgT2JqZWN0IGhhcyB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSNfc2l6ZUNvbXBvbmVudFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKi9cclxuICAgIF9zaXplQ29tcG9uZW50OiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hdGl2ZSAodW4tc2NhbGVkKSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgbm90IGNoYW5nZSB0aGUgc2l6ZSB0aGF0IHRoZSBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBpbi1nYW1lLlxyXG4gICAgICogRm9yIHRoYXQgeW91IG5lZWQgdG8gZWl0aGVyIHNldCB0aGUgc2NhbGUgb2YgdGhlIEdhbWUgT2JqZWN0IChgc2V0U2NhbGVgKSBvciB1c2VcclxuICAgICAqIHRoZSBgZGlzcGxheVdpZHRoYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSN3aWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB3aWR0aDogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIHVzZVxyXG4gICAgICogdGhlIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSNoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICogXHJcbiAgICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhZGp1c3QgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjZGlzcGxheVdpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlXaWR0aDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5zY2FsZVggKiB0aGlzLmZyYW1lLnJlYWxXaWR0aCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWCA9IHZhbHVlIC8gdGhpcy5mcmFtZS5yZWFsV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGlzcGxheWVkIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICogXHJcbiAgICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhZGp1c3QgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlWSAqIHRoaXMuZnJhbWUucmVhbEhlaWdodCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWSA9IHZhbHVlIC8gdGhpcy5mcmFtZS5yZWFsSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IHRvIGJlIHRoYXQgb2YgdGhlIGdpdmVuIEZyYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHdpbGwgbm90IGNoYW5nZSB0aGUgc2l6ZSB0aGF0IHRoZSBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBpbi1nYW1lLlxyXG4gICAgICogRm9yIHRoYXQgeW91IG5lZWQgdG8gZWl0aGVyIHNldCB0aGUgc2NhbGUgb2YgdGhlIEdhbWUgT2JqZWN0IChgc2V0U2NhbGVgKSBvciBjYWxsIHRoZVxyXG4gICAgICogYHNldERpc3BsYXlTaXplYCBtZXRob2QsIHdoaWNoIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGNoYW5naW5nIHRoZSBzY2FsZSBidXQgYWxsb3dzIHlvdVxyXG4gICAgICogdG8gZG8gc28gYnkgZ2l2aW5nIHBpeGVsIHZhbHVlcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGhhdmUgZW5hYmxlZCB0aGlzIEdhbWUgT2JqZWN0IGZvciBpbnB1dCwgY2hhbmdpbmcgdGhlIHNpemUgd2lsbCBfbm90XyBjaGFuZ2UgdGhlXHJcbiAgICAgKiBzaXplIG9mIHRoZSBoaXQgYXJlYS4gVG8gZG8gdGhpcyB5b3Ugc2hvdWxkIGFkanVzdCB0aGUgYGlucHV0LmhpdEFyZWFgIG9iamVjdCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplI3NldFNpemVUb0ZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gZnJhbWUgLSBUaGUgZnJhbWUgdG8gYmFzZSB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplVG9GcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5mcmFtZTsgfVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUucmVhbEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBhcyB1c2VkIGZvciBmcmFtZSBvciBwaHlzaWNzIGJvZHkgY3JlYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIGNhbGwgdGhlXHJcbiAgICAgKiBgc2V0RGlzcGxheVNpemVgIG1ldGhvZCwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgY2hhbmdpbmcgdGhlIHNjYWxlIGJ1dCBhbGxvd3MgeW91XHJcbiAgICAgKiB0byBkbyBzbyBieSBnaXZpbmcgcGl4ZWwgdmFsdWVzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoaXMgR2FtZSBPYmplY3QgZm9yIGlucHV0LCBjaGFuZ2luZyB0aGUgc2l6ZSB3aWxsIF9ub3RfIGNoYW5nZSB0aGVcclxuICAgICAqIHNpemUgb2YgdGhlIGhpdCBhcmVhLiBUbyBkbyB0aGlzIHlvdSBzaG91bGQgYWRqdXN0IHRoZSBgaW5wdXQuaGl0QXJlYWAgb2JqZWN0IGRpcmVjdGx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgd2lsbCBhZGp1c3QgdGhlIHNjYWxlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjc2V0RGlzcGxheVNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RGlzcGxheVNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Size.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Texture.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Texture.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Texture\r\n * @since 3.0.0\r\n */\r\n\r\nvar Texture = {\r\n\r\n    /**\r\n     * The Texture this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Texture#texture\r\n     * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n     * @since 3.0.0\r\n     */\r\n    texture: null,\r\n\r\n    /**\r\n     * The Texture Frame this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Texture#frame\r\n     * @type {Phaser.Textures.Frame}\r\n     * @since 3.0.0\r\n     */\r\n    frame: null,\r\n\r\n    /**\r\n     * Internal flag. Not to be set by this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Texture#isCropped\r\n     * @type {boolean}\r\n     * @private\r\n     * @since 3.11.0\r\n     */\r\n    isCropped: false,\r\n\r\n    /**\r\n     * Sets the texture and frame this Game Object will use to render with.\r\n     *\r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Texture#setTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Textures.Texture)} key - The key of the texture to be used, as stored in the Texture Manager, or a Texture instance.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTexture: function (key, frame)\r\n    {\r\n        this.texture = this.scene.sys.textures.get(key);\r\n\r\n        return this.setFrame(frame);\r\n    },\r\n\r\n    /**\r\n     * Sets the frame this Game Object will use to render with.\r\n     *\r\n     * The Frame has to belong to the current Texture being used.\r\n     *\r\n     * It can be either a string or an index.\r\n     *\r\n     * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n     * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Texture#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n     * @param {boolean} [updateSize=true] - Should this call adjust the size of the Game Object?\r\n     * @param {boolean} [updateOrigin=true] - Should this call adjust the origin of the Game Object?\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFrame: function (frame, updateSize, updateOrigin)\r\n    {\r\n        if (updateSize === undefined) { updateSize = true; }\r\n        if (updateOrigin === undefined) { updateOrigin = true; }\r\n\r\n        this.frame = this.texture.get(frame);\r\n\r\n        if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n        {\r\n            this.renderFlags &= ~_FLAG;\r\n        }\r\n        else\r\n        {\r\n            this.renderFlags |= _FLAG;\r\n        }\r\n\r\n        if (this._sizeComponent && updateSize)\r\n        {\r\n            this.setSizeToFrame();\r\n        }\r\n\r\n        if (this._originComponent && updateOrigin)\r\n        {\r\n            if (this.frame.customPivot)\r\n            {\r\n                this.setOrigin(this.frame.pivotX, this.frame.pivotY);\r\n            }\r\n            else\r\n            {\r\n                this.updateDisplayOrigin();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Texture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmUuanM/YWY3YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRCxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFELHlDQUF5QyxxQkFBcUI7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UZXh0dXJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gODsgLy8gMTAwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGV4dHVyZSBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFRleHR1cmUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjZnJhbWVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJhbWU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBmbGFnLiBOb3QgdG8gYmUgc2V0IGJ5IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZSNpc0Nyb3BwZWRcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgaXNDcm9wcGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgYW5kIGZyYW1lIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZSNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlRleHR1cmVzLlRleHR1cmUpfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBvciBhIFRleHR1cmUgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRleHR1cmU6IGZ1bmN0aW9uIChrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldChrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRGcmFtZShmcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgRnJhbWUgaGFzIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBUZXh0dXJlIGJlaW5nIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsaW5nIGBzZXRGcmFtZWAgd2lsbCBtb2RpZnkgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgb2YgeW91ciBHYW1lIE9iamVjdC5cclxuICAgICAqIEl0IHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGBvcmlnaW5gIGlmIHRoZSBGcmFtZSBoYXMgYSBjdXN0b20gcGl2b3QgcG9pbnQsIGFzIGV4cG9ydGVkIGZyb20gcGFja2FnZXMgbGlrZSBUZXh0dXJlIFBhY2tlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlU2l6ZT10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdD9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZU9yaWdpbj10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIEdhbWUgT2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUsIHVwZGF0ZVNpemUsIHVwZGF0ZU9yaWdpbilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlU2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVNpemUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZU9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZU9yaWdpbiA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2l6ZUNvbXBvbmVudCAmJiB1cGRhdGVTaXplKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29yaWdpbkNvbXBvbmVudCAmJiB1cGRhdGVPcmlnaW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZS5jdXN0b21QaXZvdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4odGhpcy5mcmFtZS5waXZvdFgsIHRoaXMuZnJhbWUucGl2b3RZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Texture.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/TextureCrop.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/TextureCrop.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.TextureCrop\r\n * @since 3.0.0\r\n */\r\n\r\nvar TextureCrop = {\r\n\r\n    /**\r\n     * The Texture this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TextureCrop#texture\r\n     * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n     * @since 3.0.0\r\n     */\r\n    texture: null,\r\n\r\n    /**\r\n     * The Texture Frame this Game Object is using to render with.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TextureCrop#frame\r\n     * @type {Phaser.Textures.Frame}\r\n     * @since 3.0.0\r\n     */\r\n    frame: null,\r\n\r\n    /**\r\n     * A boolean flag indicating if this Game Object is being cropped or not.\r\n     * You can toggle this at any time after `setCrop` has been called, to turn cropping on or off.\r\n     * Equally, calling `setCrop` with no arguments will reset the crop and disable it.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TextureCrop#isCropped\r\n     * @type {boolean}\r\n     * @since 3.11.0\r\n     */\r\n    isCropped: false,\r\n\r\n    /**\r\n     * Applies a crop to a texture based Game Object, such as a Sprite or Image.\r\n     * \r\n     * The crop is a rectangle that limits the area of the texture frame that is visible during rendering.\r\n     * \r\n     * Cropping a Game Object does not change its size, dimensions, physics body or hit area, it just\r\n     * changes what is shown when rendered.\r\n     * \r\n     * The crop coordinates are relative to the texture frame, not the Game Object, meaning 0 x 0 is the top-left.\r\n     * \r\n     * Therefore, if you had a Game Object that had an 800x600 sized texture, and you wanted to show only the left\r\n     * half of it, you could call `setCrop(0, 0, 400, 600)`.\r\n     * \r\n     * It is also scaled to match the Game Object scale automatically. Therefore a crop rect of 100x50 would crop\r\n     * an area of 200x100 when applied to a Game Object that had a scale factor of 2.\r\n     * \r\n     * You can either pass in numeric values directly, or you can provide a single Rectangle object as the first argument.\r\n     * \r\n     * Call this method with no arguments at all to reset the crop, or toggle the property `isCropped` to `false`.\r\n     * \r\n     * You should do this if the crop rectangle becomes the same size as the frame itself, as it will allow\r\n     * the renderer to skip several internal calculations.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TextureCrop#setCrop\r\n     * @since 3.11.0\r\n     *\r\n     * @param {(number|Phaser.Geom.Rectangle)} [x] - The x coordinate to start the crop from. Or a Phaser.Geom.Rectangle object, in which case the rest of the arguments are ignored.\r\n     * @param {number} [y] - The y coordinate to start the crop from.\r\n     * @param {number} [width] - The width of the crop rectangle in pixels.\r\n     * @param {number} [height] - The height of the crop rectangle in pixels.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setCrop: function (x, y, width, height)\r\n    {\r\n        if (x === undefined)\r\n        {\r\n            this.isCropped = false;\r\n        }\r\n        else if (this.frame)\r\n        {\r\n            if (typeof x === 'number')\r\n            {\r\n                this.frame.setCropUVs(this._crop, x, y, width, height, this.flipX, this.flipY);\r\n            }\r\n            else\r\n            {\r\n                var rect = x;\r\n\r\n                this.frame.setCropUVs(this._crop, rect.x, rect.y, rect.width, rect.height, this.flipX, this.flipY);\r\n            }\r\n\r\n            this.isCropped = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the texture and frame this Game Object will use to render with.\r\n     *\r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TextureCrop#setTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTexture: function (key, frame)\r\n    {\r\n        this.texture = this.scene.sys.textures.get(key);\r\n\r\n        return this.setFrame(frame);\r\n    },\r\n\r\n    /**\r\n     * Sets the frame this Game Object will use to render with.\r\n     *\r\n     * The Frame has to belong to the current Texture being used.\r\n     *\r\n     * It can be either a string or an index.\r\n     *\r\n     * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n     * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TextureCrop#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n     * @param {boolean} [updateSize=true] - Should this call adjust the size of the Game Object?\r\n     * @param {boolean} [updateOrigin=true] - Should this call adjust the origin of the Game Object?\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFrame: function (frame, updateSize, updateOrigin)\r\n    {\r\n        if (updateSize === undefined) { updateSize = true; }\r\n        if (updateOrigin === undefined) { updateOrigin = true; }\r\n\r\n        this.frame = this.texture.get(frame);\r\n\r\n        if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n        {\r\n            this.renderFlags &= ~_FLAG;\r\n        }\r\n        else\r\n        {\r\n            this.renderFlags |= _FLAG;\r\n        }\r\n\r\n        if (this._sizeComponent && updateSize)\r\n        {\r\n            this.setSizeToFrame();\r\n        }\r\n\r\n        if (this._originComponent && updateOrigin)\r\n        {\r\n            if (this.frame.customPivot)\r\n            {\r\n                this.setOrigin(this.frame.pivotX, this.frame.pivotY);\r\n            }\r\n            else\r\n            {\r\n                this.updateDisplayOrigin();\r\n            }\r\n        }\r\n\r\n        if (this.isCropped)\r\n        {\r\n            this.frame.updateCropUVs(this._crop, this.flipX, this.flipY);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that returns a blank, well-formed crop object for use by a Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TextureCrop#resetCropObject\r\n     * @private\r\n     * @since 3.12.0\r\n     * \r\n     * @return {object} The crop object.\r\n     */\r\n    resetCropObject: function ()\r\n    {\r\n        return { u0: 0, v0: 0, u1: 0, v1: 0, width: 0, height: 0, x: 0, y: 0, flipX: false, flipY: false, cx: 0, cy: 0, cw: 0, ch: 0 };\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = TextureCrop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmVDcm9wLmpzP2RhMTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtCQUErQjtBQUM5QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFELHlDQUF5QyxxQkFBcUI7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmVDcm9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gODsgLy8gMTAwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGV4dHVyZSBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbnZhciBUZXh0dXJlQ3JvcCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgdXNpbmcgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3AjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wI2ZyYW1lXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGZyYW1lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGJlaW5nIGNyb3BwZWQgb3Igbm90LlxyXG4gICAgICogWW91IGNhbiB0b2dnbGUgdGhpcyBhdCBhbnkgdGltZSBhZnRlciBgc2V0Q3JvcGAgaGFzIGJlZW4gY2FsbGVkLCB0byB0dXJuIGNyb3BwaW5nIG9uIG9yIG9mZi5cclxuICAgICAqIEVxdWFsbHksIGNhbGxpbmcgYHNldENyb3BgIHdpdGggbm8gYXJndW1lbnRzIHdpbGwgcmVzZXQgdGhlIGNyb3AgYW5kIGRpc2FibGUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3AjaXNDcm9wcGVkXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgaXNDcm9wcGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgYSBjcm9wIHRvIGEgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSBvciBJbWFnZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGNyb3AgaXMgYSByZWN0YW5nbGUgdGhhdCBsaW1pdHMgdGhlIGFyZWEgb2YgdGhlIHRleHR1cmUgZnJhbWUgdGhhdCBpcyB2aXNpYmxlIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIENyb3BwaW5nIGEgR2FtZSBPYmplY3QgZG9lcyBub3QgY2hhbmdlIGl0cyBzaXplLCBkaW1lbnNpb25zLCBwaHlzaWNzIGJvZHkgb3IgaGl0IGFyZWEsIGl0IGp1c3RcclxuICAgICAqIGNoYW5nZXMgd2hhdCBpcyBzaG93biB3aGVuIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY3JvcCBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRleHR1cmUgZnJhbWUsIG5vdCB0aGUgR2FtZSBPYmplY3QsIG1lYW5pbmcgMCB4IDAgaXMgdGhlIHRvcC1sZWZ0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBoYWQgYSBHYW1lIE9iamVjdCB0aGF0IGhhZCBhbiA4MDB4NjAwIHNpemVkIHRleHR1cmUsIGFuZCB5b3Ugd2FudGVkIHRvIHNob3cgb25seSB0aGUgbGVmdFxyXG4gICAgICogaGFsZiBvZiBpdCwgeW91IGNvdWxkIGNhbGwgYHNldENyb3AoMCwgMCwgNDAwLCA2MDApYC5cclxuICAgICAqIFxyXG4gICAgICogSXQgaXMgYWxzbyBzY2FsZWQgdG8gbWF0Y2ggdGhlIEdhbWUgT2JqZWN0IHNjYWxlIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yZSBhIGNyb3AgcmVjdCBvZiAxMDB4NTAgd291bGQgY3JvcFxyXG4gICAgICogYW4gYXJlYSBvZiAyMDB4MTAwIHdoZW4gYXBwbGllZCB0byBhIEdhbWUgT2JqZWN0IHRoYXQgaGFkIGEgc2NhbGUgZmFjdG9yIG9mIDIuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gZWl0aGVyIHBhc3MgaW4gbnVtZXJpYyB2YWx1ZXMgZGlyZWN0bHksIG9yIHlvdSBjYW4gcHJvdmlkZSBhIHNpbmdsZSBSZWN0YW5nbGUgb2JqZWN0IGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyBhdCBhbGwgdG8gcmVzZXQgdGhlIGNyb3AsIG9yIHRvZ2dsZSB0aGUgcHJvcGVydHkgYGlzQ3JvcHBlZGAgdG8gYGZhbHNlYC5cclxuICAgICAqIFxyXG4gICAgICogWW91IHNob3VsZCBkbyB0aGlzIGlmIHRoZSBjcm9wIHJlY3RhbmdsZSBiZWNvbWVzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGZyYW1lIGl0c2VsZiwgYXMgaXQgd2lsbCBhbGxvd1xyXG4gICAgICogdGhlIHJlbmRlcmVyIHRvIHNraXAgc2V2ZXJhbCBpbnRlcm5hbCBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCNzZXRDcm9wXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5HZW9tLlJlY3RhbmdsZSl9IFt4XSAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgdGhlIGNyb3AgZnJvbS4gT3IgYSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDcm9wOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Q3JvcFVWcyh0aGlzLl9jcm9wLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0geDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLnNldENyb3BVVnModGhpcy5fY3JvcCwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUZXh0dXJlcyBhcmUgcmVmZXJlbmNlZCBieSB0aGVpciBzdHJpbmctYmFzZWQga2V5cywgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldEZyYW1lKGZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBmcmFtZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBGcmFtZSBoYXMgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IFRleHR1cmUgYmVpbmcgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIENhbGxpbmcgYHNldEZyYW1lYCB3aWxsIG1vZGlmeSB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBvZiB5b3VyIEdhbWUgT2JqZWN0LlxyXG4gICAgICogSXQgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYG9yaWdpbmAgaWYgdGhlIEZyYW1lIGhhcyBhIGN1c3RvbSBwaXZvdCBwb2ludCwgYXMgZXhwb3J0ZWQgZnJvbSBwYWNrYWdlcyBsaWtlIFRleHR1cmUgUGFja2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3Ajc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlU2l6ZT10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdD9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZU9yaWdpbj10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIEdhbWUgT2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUsIHVwZGF0ZVNpemUsIHVwZGF0ZU9yaWdpbilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlU2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVNpemUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZU9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZU9yaWdpbiA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2l6ZUNvbXBvbmVudCAmJiB1cGRhdGVTaXplKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29yaWdpbkNvbXBvbmVudCAmJiB1cGRhdGVPcmlnaW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZS5jdXN0b21QaXZvdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4odGhpcy5mcmFtZS5waXZvdFgsIHRoaXMuZnJhbWUucGl2b3RZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0Nyb3BwZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnVwZGF0ZUNyb3BVVnModGhpcy5fY3JvcCwgdGhpcy5mbGlwWCwgdGhpcy5mbGlwWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCByZXR1cm5zIGEgYmxhbmssIHdlbGwtZm9ybWVkIGNyb3Agb2JqZWN0IGZvciB1c2UgYnkgYSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wI3Jlc2V0Q3JvcE9iamVjdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3JvcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q3JvcE9iamVjdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geyB1MDogMCwgdjA6IDAsIHUxOiAwLCB2MTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeDogMCwgeTogMCwgZmxpcFg6IGZhbHNlLCBmbGlwWTogZmFsc2UsIGN4OiAwLCBjeTogMCwgY3c6IDAsIGNoOiAwIH07XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlQ3JvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/TextureCrop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Tint.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Tint.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @function GetColor\r\n * @since 3.0.0\r\n * @private\r\n */\r\nvar GetColor = function (value)\r\n{\r\n    return (value >> 16) + (value & 0xff00) + ((value & 0xff) << 16);\r\n};\r\n\r\n/**\r\n * Provides methods used for setting the tint of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Tint\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n\r\nvar Tint = {\r\n\r\n    /**\r\n     * Private internal value. Holds the top-left tint value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#_tintTL\r\n     * @type {number}\r\n     * @private\r\n     * @default 16777215\r\n     * @since 3.0.0\r\n     */\r\n    _tintTL: 16777215,\r\n\r\n    /**\r\n     * Private internal value. Holds the top-right tint value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#_tintTR\r\n     * @type {number}\r\n     * @private\r\n     * @default 16777215\r\n     * @since 3.0.0\r\n     */\r\n    _tintTR: 16777215,\r\n\r\n    /**\r\n     * Private internal value. Holds the bottom-left tint value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#_tintBL\r\n     * @type {number}\r\n     * @private\r\n     * @default 16777215\r\n     * @since 3.0.0\r\n     */\r\n    _tintBL: 16777215,\r\n\r\n    /**\r\n     * Private internal value. Holds the bottom-right tint value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#_tintBR\r\n     * @type {number}\r\n     * @private\r\n     * @default 16777215\r\n     * @since 3.0.0\r\n     */\r\n    _tintBR: 16777215,\r\n\r\n    /**\r\n     * Private internal value. Holds if the Game Object is tinted or not.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#_isTinted\r\n     * @type {boolean}\r\n     * @private\r\n     * @default false\r\n     * @since 3.11.0\r\n     */\r\n    _isTinted: false,\r\n\r\n    /**\r\n     * Fill or additive?\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tintFill\r\n     * @type {boolean}\r\n     * @default false\r\n     * @since 3.11.0\r\n     */\r\n    tintFill: false,\r\n\r\n    /**\r\n     * Clears all tint values associated with this Game Object.\r\n     * \r\n     * Immediately sets the color values back to 0xffffff and the tint type to 'additive',\r\n     * which results in no visible change to the texture.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Tint#clearTint\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    clearTint: function ()\r\n    {\r\n        this.setTint(0xffffff);\r\n\r\n        this._isTinted = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets an additive tint on this Game Object.\r\n     * \r\n     * The tint works by taking the pixel color values from the Game Objects texture, and then\r\n     * multiplying it by the color value of the tint. You can provide either one color value,\r\n     * in which case the whole Game Object will be tinted in that color. Or you can provide a color\r\n     * per corner. The colors are blended together across the extent of the Game Object.\r\n     * \r\n     * To modify the tint color once set, either call this method again with new values or use the\r\n     * `tint` property to set all colors at once. Or, use the properties `tintTopLeft`, `tintTopRight,\r\n     * `tintBottomLeft` and `tintBottomRight` to set the corner color values independently.\r\n     * \r\n     * To remove a tint call `clearTint`.\r\n     * \r\n     * To swap this from being an additive tint to a fill based tint set the property `tintFill` to `true`.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Tint#setTint\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [topLeft=0xffffff] - The tint being applied to the top-left of the Game Object. If no other values are given this value is applied evenly, tinting the whole Game Object.\r\n     * @param {integer} [topRight] - The tint being applied to the top-right of the Game Object.\r\n     * @param {integer} [bottomLeft] - The tint being applied to the bottom-left of the Game Object.\r\n     * @param {integer} [bottomRight] - The tint being applied to the bottom-right of the Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTint: function (topLeft, topRight, bottomLeft, bottomRight)\r\n    {\r\n        if (topLeft === undefined) { topLeft = 0xffffff; }\r\n\r\n        if (topRight === undefined)\r\n        {\r\n            topRight = topLeft;\r\n            bottomLeft = topLeft;\r\n            bottomRight = topLeft;\r\n        }\r\n\r\n        this._tintTL = GetColor(topLeft);\r\n        this._tintTR = GetColor(topRight);\r\n        this._tintBL = GetColor(bottomLeft);\r\n        this._tintBR = GetColor(bottomRight);\r\n\r\n        this._isTinted = true;\r\n\r\n        this.tintFill = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a fill-based tint on this Game Object.\r\n     * \r\n     * Unlike an additive tint, a fill-tint literally replaces the pixel colors from the texture\r\n     * with those in the tint. You can use this for effects such as making a player flash 'white'\r\n     * if hit by something. You can provide either one color value, in which case the whole\r\n     * Game Object will be rendered in that color. Or you can provide a color per corner. The colors\r\n     * are blended together across the extent of the Game Object.\r\n     * \r\n     * To modify the tint color once set, either call this method again with new values or use the\r\n     * `tint` property to set all colors at once. Or, use the properties `tintTopLeft`, `tintTopRight,\r\n     * `tintBottomLeft` and `tintBottomRight` to set the corner color values independently.\r\n     * \r\n     * To remove a tint call `clearTint`.\r\n     * \r\n     * To swap this from being a fill-tint to an additive tint set the property `tintFill` to `false`.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Tint#setTintFill\r\n     * @webglOnly\r\n     * @since 3.11.0\r\n     *\r\n     * @param {integer} [topLeft=0xffffff] - The tint being applied to the top-left of the Game Object. If not other values are given this value is applied evenly, tinting the whole Game Object.\r\n     * @param {integer} [topRight] - The tint being applied to the top-right of the Game Object.\r\n     * @param {integer} [bottomLeft] - The tint being applied to the bottom-left of the Game Object.\r\n     * @param {integer} [bottomRight] - The tint being applied to the bottom-right of the Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTintFill: function (topLeft, topRight, bottomLeft, bottomRight)\r\n    {\r\n        this.setTint(topLeft, topRight, bottomLeft, bottomRight);\r\n\r\n        this.tintFill = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The tint value being applied to the top-left of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tintTopLeft\r\n     * @type {integer}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    tintTopLeft: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tintTL;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tintTL = GetColor(value);\r\n            this._isTinted = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The tint value being applied to the top-right of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tintTopRight\r\n     * @type {integer}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    tintTopRight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tintTR;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tintTR = GetColor(value);\r\n            this._isTinted = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The tint value being applied to the bottom-left of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tintBottomLeft\r\n     * @type {integer}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    tintBottomLeft: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tintBL;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tintBL = GetColor(value);\r\n            this._isTinted = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The tint value being applied to the bottom-right of the Game Object.\r\n     * This value is interpolated from the corner to the center of the Game Object.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tintBottomRight\r\n     * @type {integer}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    tintBottomRight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tintBR;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tintBR = GetColor(value);\r\n            this._isTinted = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The tint value being applied to the whole of the Game Object.\r\n     * This property is a setter-only. Use the properties `tintTopLeft` etc to read the current tint value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#tint\r\n     * @type {integer}\r\n     * @webglOnly\r\n     * @since 3.0.0\r\n     */\r\n    tint: {\r\n\r\n        set: function (value)\r\n        {\r\n            this.setTint(value, value, value, value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Does this Game Object have a tint applied to it or not?\r\n     * \r\n     * @name Phaser.GameObjects.Components.Tint#isTinted\r\n     * @type {boolean}\r\n     * @webglOnly\r\n     * @readonly\r\n     * @since 3.11.0\r\n     */\r\n    isTinted: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._isTinted;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Tint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RpbnQuanM/MzViOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0JBQW9COztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RpbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb24gR2V0Q29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG52YXIgR2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsdWUpXHJcbntcclxuICAgIHJldHVybiAodmFsdWUgPj4gMTYpICsgKHZhbHVlICYgMHhmZjAwKSArICgodmFsdWUgJiAweGZmKSA8PCAxNik7XHJcbn07XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSB0aW50IG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFRpbnQgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdG9wLWxlZnQgdGludCB2YWx1ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCNfdGludFRMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDE2Nzc3MjE1XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX3RpbnRUTDogMTY3NzcyMTUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdG9wLXJpZ2h0IHRpbnQgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjX3RpbnRUUlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxNjc3NzIxNVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF90aW50VFI6IDE2Nzc3MjE1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1sZWZ0IHRpbnQgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjX3RpbnRCTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxNjc3NzIxNVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF90aW50Qkw6IDE2Nzc3MjE1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1yaWdodCB0aW50IHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I190aW50QlJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMTY3NzcyMTVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfdGludEJSOiAxNjc3NzIxNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIGlmIHRoZSBHYW1lIE9iamVjdCBpcyB0aW50ZWQgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I19pc1RpbnRlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgX2lzVGludGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgb3IgYWRkaXRpdmU/XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEZpbGxcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGludEZpbGw6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCB0aW50IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogSW1tZWRpYXRlbHkgc2V0cyB0aGUgY29sb3IgdmFsdWVzIGJhY2sgdG8gMHhmZmZmZmYgYW5kIHRoZSB0aW50IHR5cGUgdG8gJ2FkZGl0aXZlJyxcclxuICAgICAqIHdoaWNoIHJlc3VsdHMgaW4gbm8gdmlzaWJsZSBjaGFuZ2UgdG8gdGhlIHRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I2NsZWFyVGludFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyVGludDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFRpbnQoMHhmZmZmZmYpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFuIGFkZGl0aXZlIHRpbnQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHRpbnQgd29ya3MgYnkgdGFraW5nIHRoZSBwaXhlbCBjb2xvciB2YWx1ZXMgZnJvbSB0aGUgR2FtZSBPYmplY3RzIHRleHR1cmUsIGFuZCB0aGVuXHJcbiAgICAgKiBtdWx0aXBseWluZyBpdCBieSB0aGUgY29sb3IgdmFsdWUgb2YgdGhlIHRpbnQuIFlvdSBjYW4gcHJvdmlkZSBlaXRoZXIgb25lIGNvbG9yIHZhbHVlLFxyXG4gICAgICogaW4gd2hpY2ggY2FzZSB0aGUgd2hvbGUgR2FtZSBPYmplY3Qgd2lsbCBiZSB0aW50ZWQgaW4gdGhhdCBjb2xvci4gT3IgeW91IGNhbiBwcm92aWRlIGEgY29sb3JcclxuICAgICAqIHBlciBjb3JuZXIuIFRoZSBjb2xvcnMgYXJlIGJsZW5kZWQgdG9nZXRoZXIgYWNyb3NzIHRoZSBleHRlbnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHRpbnQgY29sb3Igb25jZSBzZXQsIGVpdGhlciBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggbmV3IHZhbHVlcyBvciB1c2UgdGhlXHJcbiAgICAgKiBgdGludGAgcHJvcGVydHkgdG8gc2V0IGFsbCBjb2xvcnMgYXQgb25jZS4gT3IsIHVzZSB0aGUgcHJvcGVydGllcyBgdGludFRvcExlZnRgLCBgdGludFRvcFJpZ2h0LFxyXG4gICAgICogYHRpbnRCb3R0b21MZWZ0YCBhbmQgYHRpbnRCb3R0b21SaWdodGAgdG8gc2V0IHRoZSBjb3JuZXIgY29sb3IgdmFsdWVzIGluZGVwZW5kZW50bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHJlbW92ZSBhIHRpbnQgY2FsbCBgY2xlYXJUaW50YC5cclxuICAgICAqIFxyXG4gICAgICogVG8gc3dhcCB0aGlzIGZyb20gYmVpbmcgYW4gYWRkaXRpdmUgdGludCB0byBhIGZpbGwgYmFzZWQgdGludCBzZXQgdGhlIHByb3BlcnR5IGB0aW50RmlsbGAgdG8gYHRydWVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCNzZXRUaW50XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BMZWZ0PTB4ZmZmZmZmXSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgbm8gb3RoZXIgdmFsdWVzIGFyZSBnaXZlbiB0aGlzIHZhbHVlIGlzIGFwcGxpZWQgZXZlbmx5LCB0aW50aW5nIHRoZSB3aG9sZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RvcFJpZ2h0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtib3R0b21MZWZ0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JvdHRvbVJpZ2h0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbnQ6IGZ1bmN0aW9uICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvcExlZnQgPT09IHVuZGVmaW5lZCkgeyB0b3BMZWZ0ID0gMHhmZmZmZmY7IH1cclxuXHJcbiAgICAgICAgaWYgKHRvcFJpZ2h0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0b3BSaWdodCA9IHRvcExlZnQ7XHJcbiAgICAgICAgICAgIGJvdHRvbUxlZnQgPSB0b3BMZWZ0O1xyXG4gICAgICAgICAgICBib3R0b21SaWdodCA9IHRvcExlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW50VEwgPSBHZXRDb2xvcih0b3BMZWZ0KTtcclxuICAgICAgICB0aGlzLl90aW50VFIgPSBHZXRDb2xvcih0b3BSaWdodCk7XHJcbiAgICAgICAgdGhpcy5fdGludEJMID0gR2V0Q29sb3IoYm90dG9tTGVmdCk7XHJcbiAgICAgICAgdGhpcy5fdGludEJSID0gR2V0Q29sb3IoYm90dG9tUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudGludEZpbGwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGZpbGwtYmFzZWQgdGludCBvbiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBVbmxpa2UgYW4gYWRkaXRpdmUgdGludCwgYSBmaWxsLXRpbnQgbGl0ZXJhbGx5IHJlcGxhY2VzIHRoZSBwaXhlbCBjb2xvcnMgZnJvbSB0aGUgdGV4dHVyZVxyXG4gICAgICogd2l0aCB0aG9zZSBpbiB0aGUgdGludC4gWW91IGNhbiB1c2UgdGhpcyBmb3IgZWZmZWN0cyBzdWNoIGFzIG1ha2luZyBhIHBsYXllciBmbGFzaCAnd2hpdGUnXHJcbiAgICAgKiBpZiBoaXQgYnkgc29tZXRoaW5nLiBZb3UgY2FuIHByb3ZpZGUgZWl0aGVyIG9uZSBjb2xvciB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgd2hvbGVcclxuICAgICAqIEdhbWUgT2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgaW4gdGhhdCBjb2xvci4gT3IgeW91IGNhbiBwcm92aWRlIGEgY29sb3IgcGVyIGNvcm5lci4gVGhlIGNvbG9yc1xyXG4gICAgICogYXJlIGJsZW5kZWQgdG9nZXRoZXIgYWNyb3NzIHRoZSBleHRlbnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHRpbnQgY29sb3Igb25jZSBzZXQsIGVpdGhlciBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggbmV3IHZhbHVlcyBvciB1c2UgdGhlXHJcbiAgICAgKiBgdGludGAgcHJvcGVydHkgdG8gc2V0IGFsbCBjb2xvcnMgYXQgb25jZS4gT3IsIHVzZSB0aGUgcHJvcGVydGllcyBgdGludFRvcExlZnRgLCBgdGludFRvcFJpZ2h0LFxyXG4gICAgICogYHRpbnRCb3R0b21MZWZ0YCBhbmQgYHRpbnRCb3R0b21SaWdodGAgdG8gc2V0IHRoZSBjb3JuZXIgY29sb3IgdmFsdWVzIGluZGVwZW5kZW50bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHJlbW92ZSBhIHRpbnQgY2FsbCBgY2xlYXJUaW50YC5cclxuICAgICAqIFxyXG4gICAgICogVG8gc3dhcCB0aGlzIGZyb20gYmVpbmcgYSBmaWxsLXRpbnQgdG8gYW4gYWRkaXRpdmUgdGludCBzZXQgdGhlIHByb3BlcnR5IGB0aW50RmlsbGAgdG8gYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjc2V0VGludEZpbGxcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BMZWZ0PTB4ZmZmZmZmXSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IG90aGVyIHZhbHVlcyBhcmUgZ2l2ZW4gdGhpcyB2YWx1ZSBpcyBhcHBsaWVkIGV2ZW5seSwgdGludGluZyB0aGUgd2hvbGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BSaWdodF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYm90dG9tTGVmdF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUaW50RmlsbDogZnVuY3Rpb24gKHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFRpbnQodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy50aW50RmlsbCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aW50IHZhbHVlIGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCN0aW50VG9wTGVmdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdGludFRvcExlZnQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbnRUTDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbnRUTCA9IEdldENvbG9yKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5faXNUaW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpbnQgdmFsdWUgYmVpbmcgYXBwbGllZCB0byB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCN0aW50VG9wUmlnaHRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnRUb3BSaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGludFRSO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdGludFRSID0gR2V0Q29sb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGludCB2YWx1ZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEJvdHRvbUxlZnRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnRCb3R0b21MZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW50Qkw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90aW50QkwgPSBHZXRDb2xvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzVGludGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aW50IHZhbHVlIGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEJvdHRvbVJpZ2h0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aW50Qm90dG9tUmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbnRCUjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbnRCUiA9IEdldENvbG9yKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5faXNUaW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpbnQgdmFsdWUgYmVpbmcgYXBwbGllZCB0byB0aGUgd2hvbGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBhIHNldHRlci1vbmx5LiBVc2UgdGhlIHByb3BlcnRpZXMgYHRpbnRUb3BMZWZ0YCBldGMgdG8gcmVhZCB0aGUgY3VycmVudCB0aW50IHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I3RpbnRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnQ6IHtcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRpbnQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb2VzIHRoaXMgR2FtZSBPYmplY3QgaGF2ZSBhIHRpbnQgYXBwbGllZCB0byBpdCBvciBub3Q/XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjaXNUaW50ZWRcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGlzVGludGVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1RpbnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Tint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/ToJSON.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/ToJSON.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Build a JSON representation of the given Game Object.\r\n *\r\n * This is typically extended further by Game Object specific implementations.\r\n *\r\n * @method Phaser.GameObjects.Components.ToJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to export as JSON.\r\n *\r\n * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n */\r\nvar ToJSON = function (gameObject)\r\n{\r\n    var out = {\r\n        name: gameObject.name,\r\n        type: gameObject.type,\r\n        x: gameObject.x,\r\n        y: gameObject.y,\r\n        depth: gameObject.depth,\r\n        scale: {\r\n            x: gameObject.scaleX,\r\n            y: gameObject.scaleY\r\n        },\r\n        origin: {\r\n            x: gameObject.originX,\r\n            y: gameObject.originY\r\n        },\r\n        flipX: gameObject.flipX,\r\n        flipY: gameObject.flipY,\r\n        rotation: gameObject.rotation,\r\n        alpha: gameObject.alpha,\r\n        visible: gameObject.visible,\r\n        blendMode: gameObject.blendMode,\r\n        textureKey: '',\r\n        frameKey: '',\r\n        data: {}\r\n    };\r\n\r\n    if (gameObject.texture)\r\n    {\r\n        out.textureKey = gameObject.texture.key;\r\n        out.frameKey = gameObject.frame.name;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = ToJSON;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RvSlNPTi5qcz8zMjViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVG9KU09OLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQnVpbGQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhpcyBpcyB0eXBpY2FsbHkgZXh0ZW5kZWQgZnVydGhlciBieSBHYW1lIE9iamVjdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVG9KU09OXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGV4cG9ydCBhcyBKU09OLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgVG9KU09OID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHZhciBvdXQgPSB7XHJcbiAgICAgICAgbmFtZTogZ2FtZU9iamVjdC5uYW1lLFxyXG4gICAgICAgIHR5cGU6IGdhbWVPYmplY3QudHlwZSxcclxuICAgICAgICB4OiBnYW1lT2JqZWN0LngsXHJcbiAgICAgICAgeTogZ2FtZU9iamVjdC55LFxyXG4gICAgICAgIGRlcHRoOiBnYW1lT2JqZWN0LmRlcHRoLFxyXG4gICAgICAgIHNjYWxlOiB7XHJcbiAgICAgICAgICAgIHg6IGdhbWVPYmplY3Quc2NhbGVYLFxyXG4gICAgICAgICAgICB5OiBnYW1lT2JqZWN0LnNjYWxlWVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3JpZ2luOiB7XHJcbiAgICAgICAgICAgIHg6IGdhbWVPYmplY3Qub3JpZ2luWCxcclxuICAgICAgICAgICAgeTogZ2FtZU9iamVjdC5vcmlnaW5ZXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmbGlwWDogZ2FtZU9iamVjdC5mbGlwWCxcclxuICAgICAgICBmbGlwWTogZ2FtZU9iamVjdC5mbGlwWSxcclxuICAgICAgICByb3RhdGlvbjogZ2FtZU9iamVjdC5yb3RhdGlvbixcclxuICAgICAgICBhbHBoYTogZ2FtZU9iamVjdC5hbHBoYSxcclxuICAgICAgICB2aXNpYmxlOiBnYW1lT2JqZWN0LnZpc2libGUsXHJcbiAgICAgICAgYmxlbmRNb2RlOiBnYW1lT2JqZWN0LmJsZW5kTW9kZSxcclxuICAgICAgICB0ZXh0dXJlS2V5OiAnJyxcclxuICAgICAgICBmcmFtZUtleTogJycsXHJcbiAgICAgICAgZGF0YToge31cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdhbWVPYmplY3QudGV4dHVyZSlcclxuICAgIHtcclxuICAgICAgICBvdXQudGV4dHVyZUtleSA9IGdhbWVPYmplY3QudGV4dHVyZS5rZXk7XHJcbiAgICAgICAgb3V0LmZyYW1lS2V5ID0gZ2FtZU9iamVjdC5mcmFtZS5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvSlNPTjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ToJSON.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Transform.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Transform.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ./TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar WrapAngle = __webpack_require__(/*! ../../math/angle/Wrap */ \"./node_modules/phaser/src/math/angle/Wrap.js\");\r\nvar WrapAngleDegrees = __webpack_require__(/*! ../../math/angle/WrapDegrees */ \"./node_modules/phaser/src/math/angle/WrapDegrees.js\");\r\n\r\n//  global bitmask flag for GameObject.renderMask (used by Scale)\r\nvar _FLAG = 4; // 0100\r\n\r\n/**\r\n * Provides methods used for getting and setting the position, scale and rotation of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Transform\r\n * @since 3.0.0\r\n */\r\n\r\nvar Transform = {\r\n\r\n    /**\r\n     * Private internal value. Holds the horizontal scale value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Transform#_scaleX\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _scaleX: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the vertical scale value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Transform#_scaleY\r\n     * @type {number}\r\n     * @private\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    _scaleY: 1,\r\n\r\n    /**\r\n     * Private internal value. Holds the rotation value in radians.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Transform#_rotation\r\n     * @type {number}\r\n     * @private\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    _rotation: 0,\r\n\r\n    /**\r\n     * The x position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#x\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    x: 0,\r\n\r\n    /**\r\n     * The y position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#y\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    y: 0,\r\n\r\n    /**\r\n     * The z position of this Game Object.\r\n     * Note: Do not use this value to set the z-index, instead see the `depth` property.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#z\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    z: 0,\r\n\r\n    /**\r\n     * The w position of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#w\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    w: 0,\r\n\r\n    /**\r\n     * This is a special setter that allows you to set both the horizontal and vertical scale of this Game Object\r\n     * to the same value, at the same time. When reading this value the result returned is `(scaleX + scaleY) / 2`.\r\n     * \r\n     * Use of this property implies you wish the horizontal and vertical scales to be equal to each other. If this\r\n     * isn't the case, use the `scaleX` or `scaleY` properties instead.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#scale\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.18.0\r\n     */\r\n    scale: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this._scaleX + this._scaleY) / 2;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._scaleX = value;\r\n            this._scaleY = value;\r\n\r\n            if (value === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal scale of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#scaleX\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    scaleX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scaleX;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._scaleX = value;\r\n\r\n            if (value === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical scale of this Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#scaleY\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    scaleY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scaleY;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._scaleY = value;\r\n\r\n            if (value === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The angle of this Game Object as expressed in degrees.\r\n     * \r\n     * Phaser uses a right-hand clockwise rotation system, where 0 is right, 90 is down, 180/-180 is left\r\n     * and -90 is up.\r\n     *\r\n     * If you prefer to work in radians, see the `rotation` property instead.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#angle\r\n     * @type {integer}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    angle: {\r\n\r\n        get: function ()\r\n        {\r\n            return WrapAngleDegrees(this._rotation * MATH_CONST.RAD_TO_DEG);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            //  value is in degrees\r\n            this.rotation = WrapAngleDegrees(value) * MATH_CONST.DEG_TO_RAD;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The angle of this Game Object in radians.\r\n     * \r\n     * Phaser uses a right-hand clockwise rotation system, where 0 is right, 90 is down, 180/-180 is left\r\n     * and -90 is up.\r\n     *\r\n     * If you prefer to work in degrees, see the `angle` property instead.\r\n     *\r\n     * @name Phaser.GameObjects.Components.Transform#rotation\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    rotation: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._rotation;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            //  value is in radians\r\n            this._rotation = WrapAngle(value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the position of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The x position of this Game Object.\r\n     * @param {number} [y=x] - The y position of this Game Object. If not set it will use the `x` value.\r\n     * @param {number} [z=0] - The z position of this Game Object.\r\n     * @param {number} [w=0] - The w position of this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setPosition: function (x, y, z, w)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n        if (z === undefined) { z = 0; }\r\n        if (w === undefined) { w = 0; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n        this.z = z;\r\n        this.w = w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the position of this Game Object to be a random position within the confines of\r\n     * the given area.\r\n     * \r\n     * If no area is specified a random position between 0 x 0 and the game width x height is used instead.\r\n     *\r\n     * The position does not factor in the size of this Game Object, meaning that only the origin is\r\n     * guaranteed to be within the area.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setRandomPosition\r\n     * @since 3.8.0\r\n     *\r\n     * @param {number} [x=0] - The x position of the top-left of the random area.\r\n     * @param {number} [y=0] - The y position of the top-left of the random area.\r\n     * @param {number} [width] - The width of the random area.\r\n     * @param {number} [height] - The height of the random area.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setRandomPosition: function (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.scene.sys.scale.width; }\r\n        if (height === undefined) { height = this.scene.sys.scale.height; }\r\n\r\n        this.x = x + (Math.random() * width);\r\n        this.y = y + (Math.random() * height);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the rotation of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [radians=0] - The rotation of this Game Object, in radians.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setRotation: function (radians)\r\n    {\r\n        if (radians === undefined) { radians = 0; }\r\n\r\n        this.rotation = radians;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angle of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [degrees=0] - The rotation of this Game Object, in degrees.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setAngle: function (degrees)\r\n    {\r\n        if (degrees === undefined) { degrees = 0; }\r\n\r\n        this.angle = degrees;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scale of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scale of this Game Object.\r\n     * @param {number} [y=x] - The vertical scale of this Game Object. If not set it will use the `x` value.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setScale: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 1; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.scaleX = x;\r\n        this.scaleY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the x position of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The x position of this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setX: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the y position of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The y position of this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setY: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the z position of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The z position of this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setZ: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.z = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the w position of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#setW\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=0] - The w position of this Game Object.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setW: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.w = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the local transform matrix for this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#getLocalTransformMatrix\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\r\n     *\r\n     * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\r\n     */\r\n    getLocalTransformMatrix: function (tempMatrix)\r\n    {\r\n        if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\r\n\r\n        return tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\r\n    },\r\n\r\n    /**\r\n     * Gets the world transform matrix for this Game Object, factoring in any parent Containers.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#getWorldTransformMatrix\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [parentMatrix] - A temporary matrix to hold parent values during the calculations.\r\n     *\r\n     * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\r\n     */\r\n    getWorldTransformMatrix: function (tempMatrix, parentMatrix)\r\n    {\r\n        if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\r\n        if (parentMatrix === undefined) { parentMatrix = new TransformMatrix(); }\r\n\r\n        var parent = this.parentContainer;\r\n\r\n        if (!parent)\r\n        {\r\n            return this.getLocalTransformMatrix(tempMatrix);\r\n        }\r\n\r\n        tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\r\n\r\n        while (parent)\r\n        {\r\n            parentMatrix.applyITRS(parent.x, parent.y, parent._rotation, parent._scaleX, parent._scaleY);\r\n\r\n            parentMatrix.multiply(tempMatrix, tempMatrix);\r\n\r\n            parent = parent.parentContainer;\r\n        }\r\n\r\n        return tempMatrix;\r\n    },\r\n\r\n    /**\r\n     * Gets the sum total rotation of all of this Game Objects parent Containers.\r\n     * \r\n     * The returned value is in radians and will be zero if this Game Object has no parent container.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Transform#getParentRotation\r\n     * @since 3.18.0\r\n     *\r\n     * @return {number} The sum total rotation, in radians, of all parent containers of this Game Object.\r\n     */\r\n    getParentRotation: function ()\r\n    {\r\n        var rotation = 0;\r\n\r\n        var parent = this.parentContainer;\r\n\r\n        while (parent)\r\n        {\r\n            rotation += parent.rotation;\r\n\r\n            parent = parent.parentContainer;\r\n        }\r\n\r\n        return rotation;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Transform;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybS5qcz84ZGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsOEZBQW1CO0FBQ2pELGdCQUFnQixtQkFBTyxDQUFDLDJFQUF1QjtBQUMvQyx1QkFBdUIsbUJBQU8sQ0FBQyx5RkFBOEI7O0FBRTdEO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0Msb0NBQW9DO0FBQ3RFLG1DQUFtQyxzQ0FBc0M7O0FBRXpFO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQSxnQkFBZ0IsOENBQThDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxvQ0FBb0M7O0FBRTNFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUE4QztBQUM3RCxlQUFlLDhDQUE4QztBQUM3RDtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9DQUFvQztBQUMzRSx5Q0FBeUMsc0NBQXNDOztBQUUvRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSByZXF1aXJlKCcuL1RyYW5zZm9ybU1hdHJpeCcpO1xyXG52YXIgV3JhcEFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9hbmdsZS9XcmFwJyk7XHJcbnZhciBXcmFwQW5nbGVEZWdyZWVzID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9hbmdsZS9XcmFwRGVncmVlcycpO1xyXG5cclxuLy8gIGdsb2JhbCBiaXRtYXNrIGZsYWcgZm9yIEdhbWVPYmplY3QucmVuZGVyTWFzayAodXNlZCBieSBTY2FsZSlcclxudmFyIF9GTEFHID0gNDsgLy8gMDEwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgcG9zaXRpb24sIHNjYWxlIGFuZCByb3RhdGlvbiBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgVHJhbnNmb3JtID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGhvcml6b250YWwgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNfc2NhbGVYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfc2NhbGVYOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHZlcnRpY2FsIHNjYWxlIHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jX3NjYWxlWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX3NjYWxlWTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSByb3RhdGlvbiB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jX3JvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfcm90YXRpb246IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSN5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHk6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogTm90ZTogRG8gbm90IHVzZSB0aGlzIHZhbHVlIHRvIHNldCB0aGUgei1pbmRleCwgaW5zdGVhZCBzZWUgdGhlIGBkZXB0aGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3dcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdzogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIHNldHRlciB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNjYWxlIG9mIHRoaXMgR2FtZSBPYmplY3RcclxuICAgICAqIHRvIHRoZSBzYW1lIHZhbHVlLCBhdCB0aGUgc2FtZSB0aW1lLiBXaGVuIHJlYWRpbmcgdGhpcyB2YWx1ZSB0aGUgcmVzdWx0IHJldHVybmVkIGlzIGAoc2NhbGVYICsgc2NhbGVZKSAvIDJgLlxyXG4gICAgICogXHJcbiAgICAgKiBVc2Ugb2YgdGhpcyBwcm9wZXJ0eSBpbXBsaWVzIHlvdSB3aXNoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsZXMgdG8gYmUgZXF1YWwgdG8gZWFjaCBvdGhlci4gSWYgdGhpc1xyXG4gICAgICogaXNuJ3QgdGhlIGNhc2UsIHVzZSB0aGUgYHNjYWxlWGAgb3IgYHNjYWxlWWAgcHJvcGVydGllcyBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqL1xyXG4gICAgc2NhbGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zY2FsZVggKyB0aGlzLl9zY2FsZVkpIC8gMjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlWCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZVkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2NhbGVYOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZVggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2NhbGVZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGVZO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc2NhbGVZID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgJj0gfl9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QgYXMgZXhwcmVzc2VkIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFBoYXNlciB1c2VzIGEgcmlnaHQtaGFuZCBjbG9ja3dpc2Ugcm90YXRpb24gc3lzdGVtLCB3aGVyZSAwIGlzIHJpZ2h0LCA5MCBpcyBkb3duLCAxODAvLTE4MCBpcyBsZWZ0XHJcbiAgICAgKiBhbmQgLTkwIGlzIHVwLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBwcmVmZXIgdG8gd29yayBpbiByYWRpYW5zLCBzZWUgdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jYW5nbGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBXcmFwQW5nbGVEZWdyZWVzKHRoaXMuX3JvdGF0aW9uICogTUFUSF9DT05TVC5SQURfVE9fREVHKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICB2YWx1ZSBpcyBpbiBkZWdyZWVzXHJcbiAgICAgICAgICAgIHRoaXMucm90YXRpb24gPSBXcmFwQW5nbGVEZWdyZWVzKHZhbHVlKSAqIE1BVEhfQ09OU1QuREVHX1RPX1JBRDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gcmFkaWFucy5cclxuICAgICAqIFxyXG4gICAgICogUGhhc2VyIHVzZXMgYSByaWdodC1oYW5kIGNsb2Nrd2lzZSByb3RhdGlvbiBzeXN0ZW0sIHdoZXJlIDAgaXMgcmlnaHQsIDkwIGlzIGRvd24sIDE4MC8tMTgwIGlzIGxlZnRcclxuICAgICAqIGFuZCAtOTAgaXMgdXAuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHByZWZlciB0byB3b3JrIGluIGRlZ3JlZXMsIHNlZSB0aGUgYGFuZ2xlYCBwcm9wZXJ0eSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNyb3RhdGlvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByb3RhdGlvbjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgdmFsdWUgaXMgaW4gcmFkaWFuc1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IFdyYXBBbmdsZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LiBJZiBub3Qgc2V0IGl0IHdpbGwgdXNlIHRoZSBgeGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3o9MF0gLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3PTBdIC0gVGhlIHcgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHksIHosIHcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuICAgICAgICBpZiAoeiA9PT0gdW5kZWZpbmVkKSB7IHogPSAwOyB9XHJcbiAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkgeyB3ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICAgICAgdGhpcy56ID0gejtcclxuICAgICAgICB0aGlzLncgPSB3O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IHRvIGJlIGEgcmFuZG9tIHBvc2l0aW9uIHdpdGhpbiB0aGUgY29uZmluZXMgb2ZcclxuICAgICAqIHRoZSBnaXZlbiBhcmVhLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyBhcmVhIGlzIHNwZWNpZmllZCBhIHJhbmRvbSBwb3NpdGlvbiBiZXR3ZWVuIDAgeCAwIGFuZCB0aGUgZ2FtZSB3aWR0aCB4IGhlaWdodCBpcyB1c2VkIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBvc2l0aW9uIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBtZWFuaW5nIHRoYXQgb25seSB0aGUgb3JpZ2luIGlzXHJcbiAgICAgKiBndWFyYW50ZWVkIHRvIGJlIHdpdGhpbiB0aGUgYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRSYW5kb21Qb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByYW5kb20gYXJlYS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmFuZG9tIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgcmFuZG9tIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSByYW5kb20gYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSYW5kb21Qb3NpdGlvbjogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4ICsgKE1hdGgucmFuZG9tKCkgKiB3aWR0aCk7XHJcbiAgICAgICAgdGhpcy55ID0geSArIChNYXRoLnJhbmRvbSgpICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcm90YXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRSb3RhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpYW5zPTBdIC0gVGhlIHJvdGF0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRpb246IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpYW5zID09PSB1bmRlZmluZWQpIHsgcmFkaWFucyA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHJhZGlhbnM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0QW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVncmVlcz0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ2xlOiBmdW5jdGlvbiAoZGVncmVlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVncmVlcyA9PT0gdW5kZWZpbmVkKSB7IGRlZ3JlZXMgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYW5nbGUgPSBkZWdyZWVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBHYW1lIE9iamVjdC4gSWYgbm90IHNldCBpdCB3aWxsIHVzZSB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAxOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNjYWxlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0WFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHogcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIC0gVGhlIHogcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRaOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMueiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0V1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLncgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbG9jYWwgdHJhbnNmb3JtIG1hdHJpeCBmb3IgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNnZXRMb2NhbFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFt0ZW1wTWF0cml4XSAtIFRoZSBtYXRyaXggdG8gcG9wdWxhdGUgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFRoZSBwb3B1bGF0ZWQgVHJhbnNmb3JtIE1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgZ2V0TG9jYWxUcmFuc2Zvcm1NYXRyaXg6IGZ1bmN0aW9uICh0ZW1wTWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZW1wTWF0cml4ID09PSB1bmRlZmluZWQpIHsgdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMuX3JvdGF0aW9uLCB0aGlzLl9zY2FsZVgsIHRoaXMuX3NjYWxlWSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCBmb3IgdGhpcyBHYW1lIE9iamVjdCwgZmFjdG9yaW5nIGluIGFueSBwYXJlbnQgQ29udGFpbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNnZXRXb3JsZFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFt0ZW1wTWF0cml4XSAtIFRoZSBtYXRyaXggdG8gcG9wdWxhdGUgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBbcGFyZW50TWF0cml4XSAtIEEgdGVtcG9yYXJ5IG1hdHJpeCB0byBob2xkIHBhcmVudCB2YWx1ZXMgZHVyaW5nIHRoZSBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBUaGUgcG9wdWxhdGVkIFRyYW5zZm9ybSBNYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGdldFdvcmxkVHJhbnNmb3JtTWF0cml4OiBmdW5jdGlvbiAodGVtcE1hdHJpeCwgcGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZW1wTWF0cml4ID09PSB1bmRlZmluZWQpIHsgdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTsgfVxyXG4gICAgICAgIGlmIChwYXJlbnRNYXRyaXggPT09IHVuZGVmaW5lZCkgeyBwYXJlbnRNYXRyaXggPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoIXBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsVHJhbnNmb3JtTWF0cml4KHRlbXBNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMuX3JvdGF0aW9uLCB0aGlzLl9zY2FsZVgsIHRoaXMuX3NjYWxlWSk7XHJcblxyXG4gICAgICAgIHdoaWxlIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXguYXBwbHlJVFJTKHBhcmVudC54LCBwYXJlbnQueSwgcGFyZW50Ll9yb3RhdGlvbiwgcGFyZW50Ll9zY2FsZVgsIHBhcmVudC5fc2NhbGVZKTtcclxuXHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC5tdWx0aXBseSh0ZW1wTWF0cml4LCB0ZW1wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRDb250YWluZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGVtcE1hdHJpeDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdW0gdG90YWwgcm90YXRpb24gb2YgYWxsIG9mIHRoaXMgR2FtZSBPYmplY3RzIHBhcmVudCBDb250YWluZXJzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgaW4gcmFkaWFucyBhbmQgd2lsbCBiZSB6ZXJvIGlmIHRoaXMgR2FtZSBPYmplY3QgaGFzIG5vIHBhcmVudCBjb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jZ2V0UGFyZW50Um90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzdW0gdG90YWwgcm90YXRpb24sIGluIHJhZGlhbnMsIG9mIGFsbCBwYXJlbnQgY29udGFpbmVycyBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRQYXJlbnRSb3RhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSAwO1xyXG5cclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgIHdoaWxlIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByb3RhdGlvbiArPSBwYXJlbnQucm90YXRpb247XHJcblxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Transform.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/TransformMatrix.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/TransformMatrix.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Matrix used for display transformations for rendering.\r\n *\r\n * It is represented like so:\r\n *\r\n * ```\r\n * | a | c | tx |\r\n * | b | d | ty |\r\n * | 0 | 0 | 1  |\r\n * ```\r\n *\r\n * @class TransformMatrix\r\n * @memberof Phaser.GameObjects.Components\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [a=1] - The Scale X value.\r\n * @param {number} [b=0] - The Skew Y value.\r\n * @param {number} [c=0] - The Skew X value.\r\n * @param {number} [d=1] - The Scale Y value.\r\n * @param {number} [tx=0] - The Translate X value.\r\n * @param {number} [ty=0] - The Translate Y value.\r\n */\r\nvar TransformMatrix = new Class({\r\n\r\n    initialize:\r\n\r\n    function TransformMatrix (a, b, c, d, tx, ty)\r\n    {\r\n        if (a === undefined) { a = 1; }\r\n        if (b === undefined) { b = 0; }\r\n        if (c === undefined) { c = 0; }\r\n        if (d === undefined) { d = 1; }\r\n        if (tx === undefined) { tx = 0; }\r\n        if (ty === undefined) { ty = 0; }\r\n\r\n        /**\r\n         * The matrix values.\r\n         *\r\n         * @name Phaser.GameObjects.Components.TransformMatrix#matrix\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.matrix = new Float32Array([ a, b, c, d, tx, ty, 0, 0, 1 ]);\r\n\r\n        /**\r\n         * The decomposed matrix.\r\n         *\r\n         * @name Phaser.GameObjects.Components.TransformMatrix#decomposedMatrix\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.decomposedMatrix = {\r\n            translateX: 0,\r\n            translateY: 0,\r\n            scaleX: 1,\r\n            scaleY: 1,\r\n            rotation: 0\r\n        };\r\n    },\r\n\r\n    /**\r\n     * The Scale X value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#a\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    a: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[0];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[0] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Skew Y value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#b\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    b: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[1];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[1] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Skew X value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#c\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    c: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[2];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[2] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Scale Y value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#d\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    d: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[3];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[3] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Translate X value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#e\r\n     * @type {number}\r\n     * @since 3.11.0\r\n     */\r\n    e: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[4];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[4] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Translate Y value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#f\r\n     * @type {number}\r\n     * @since 3.11.0\r\n     */\r\n    f: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[5];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[5] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Translate X value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#tx\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    tx: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[4];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[4] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Translate Y value.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#ty\r\n     * @type {number}\r\n     * @since 3.4.0\r\n     */\r\n    ty: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.matrix[5];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.matrix[5] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The rotation of the Matrix. Value is in radians.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#rotation\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    rotation: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.acos(this.a / this.scaleX) * ((Math.atan(-this.c / this.a) < 0) ? -1 : 1);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The rotation of the Matrix, normalized to be within the Phaser right-handed\r\n     * clockwise rotation space. Value is in radians.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#rotationNormalized\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.19.0\r\n     */\r\n    rotationNormalized: {\r\n\r\n        get: function ()\r\n        {\r\n            var matrix = this.matrix;\r\n\r\n            var a = matrix[0];\r\n            var b = matrix[1];\r\n            var c = matrix[2];\r\n            var d = matrix[3];\r\n\r\n            if (a || b)\r\n            {\r\n                // var r = Math.sqrt(a * a + b * b);\r\n    \r\n                return (b > 0) ? Math.acos(a / this.scaleX) : -Math.acos(a / this.scaleX);\r\n            }\r\n            else if (c || d)\r\n            {\r\n                // var s = Math.sqrt(c * c + d * d);\r\n    \r\n                return MATH_CONST.TAU - ((d > 0) ? Math.acos(-c / this.scaleY) : -Math.acos(c / this.scaleY));\r\n            }\r\n            else\r\n            {\r\n                return 0;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The decomposed horizontal scale of the Matrix. This value is always positive.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#scaleX\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    scaleX: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.sqrt((this.a * this.a) + (this.b * this.b));\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The decomposed vertical scale of the Matrix. This value is always positive.\r\n     *\r\n     * @name Phaser.GameObjects.Components.TransformMatrix#scaleY\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    scaleY: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.sqrt((this.c * this.c) + (this.d * this.d));\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Reset the Matrix to an identity matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#loadIdentity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    loadIdentity: function ()\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[0] = 1;\r\n        matrix[1] = 0;\r\n        matrix[2] = 0;\r\n        matrix[3] = 1;\r\n        matrix[4] = 0;\r\n        matrix[5] = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Translate the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#translate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal translation value.\r\n     * @param {number} y - The vertical translation value.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    translate: function (x, y)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[4] = matrix[0] * x + matrix[2] * y + matrix[4];\r\n        matrix[5] = matrix[1] * x + matrix[3] * y + matrix[5];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scale value.\r\n     * @param {number} y - The vertical scale value.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    scale: function (x, y)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[0] *= x;\r\n        matrix[1] *= x;\r\n        matrix[2] *= y;\r\n        matrix[3] *= y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#rotate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} angle - The angle of rotation in radians.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    rotate: function (angle)\r\n    {\r\n        var sin = Math.sin(angle);\r\n        var cos = Math.cos(angle);\r\n\r\n        var matrix = this.matrix;\r\n\r\n        var a = matrix[0];\r\n        var b = matrix[1];\r\n        var c = matrix[2];\r\n        var d = matrix[3];\r\n\r\n        matrix[0] = a * cos + c * sin;\r\n        matrix[1] = b * cos + d * sin;\r\n        matrix[2] = a * -sin + c * cos;\r\n        matrix[3] = b * -sin + d * cos;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Multiply this Matrix by the given Matrix.\r\n     * \r\n     * If an `out` Matrix is given then the results will be stored in it.\r\n     * If it is not given, this matrix will be updated in place instead.\r\n     * Use an `out` Matrix if you do not wish to mutate this matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} rhs - The Matrix to multiply by.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [out] - An optional Matrix to store the results in.\r\n     *\r\n     * @return {Phaser.GameObjects.Components.TransformMatrix} Either this TransformMatrix, or the `out` Matrix, if given in the arguments.\r\n     */\r\n    multiply: function (rhs, out)\r\n    {\r\n        var matrix = this.matrix;\r\n        var source = rhs.matrix;\r\n\r\n        var localA = matrix[0];\r\n        var localB = matrix[1];\r\n        var localC = matrix[2];\r\n        var localD = matrix[3];\r\n        var localE = matrix[4];\r\n        var localF = matrix[5];\r\n\r\n        var sourceA = source[0];\r\n        var sourceB = source[1];\r\n        var sourceC = source[2];\r\n        var sourceD = source[3];\r\n        var sourceE = source[4];\r\n        var sourceF = source[5];\r\n\r\n        var destinationMatrix = (out === undefined) ? this : out;\r\n\r\n        destinationMatrix.a = (sourceA * localA) + (sourceB * localC);\r\n        destinationMatrix.b = (sourceA * localB) + (sourceB * localD);\r\n        destinationMatrix.c = (sourceC * localA) + (sourceD * localC);\r\n        destinationMatrix.d = (sourceC * localB) + (sourceD * localD);\r\n        destinationMatrix.e = (sourceE * localA) + (sourceF * localC) + localE;\r\n        destinationMatrix.f = (sourceE * localB) + (sourceF * localD) + localF;\r\n\r\n        return destinationMatrix;\r\n    },\r\n\r\n    /**\r\n     * Multiply this Matrix by the matrix given, including the offset.\r\n     * \r\n     * The offsetX is added to the tx value: `offsetX * a + offsetY * c + tx`.\r\n     * The offsetY is added to the ty value: `offsetY * b + offsetY * d + ty`.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#multiplyWithOffset\r\n     * @since 3.11.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\r\n     * @param {number} offsetX - Horizontal offset to factor in to the multiplication.\r\n     * @param {number} offsetY - Vertical offset to factor in to the multiplication.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    multiplyWithOffset: function (src, offsetX, offsetY)\r\n    {\r\n        var matrix = this.matrix;\r\n        var otherMatrix = src.matrix;\r\n\r\n        var a0 = matrix[0];\r\n        var b0 = matrix[1];\r\n        var c0 = matrix[2];\r\n        var d0 = matrix[3];\r\n        var tx0 = matrix[4];\r\n        var ty0 = matrix[5];\r\n\r\n        var pse = offsetX * a0 + offsetY * c0 + tx0;\r\n        var psf = offsetX * b0 + offsetY * d0 + ty0;\r\n\r\n        var a1 = otherMatrix[0];\r\n        var b1 = otherMatrix[1];\r\n        var c1 = otherMatrix[2];\r\n        var d1 = otherMatrix[3];\r\n        var tx1 = otherMatrix[4];\r\n        var ty1 = otherMatrix[5];\r\n\r\n        matrix[0] = a1 * a0 + b1 * c0;\r\n        matrix[1] = a1 * b0 + b1 * d0;\r\n        matrix[2] = c1 * a0 + d1 * c0;\r\n        matrix[3] = c1 * b0 + d1 * d0;\r\n        matrix[4] = tx1 * a0 + ty1 * c0 + pse;\r\n        matrix[5] = tx1 * b0 + ty1 * d0 + psf;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#transform\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} a - The Scale X value.\r\n     * @param {number} b - The Shear Y value.\r\n     * @param {number} c - The Shear X value.\r\n     * @param {number} d - The Scale Y value.\r\n     * @param {number} tx - The Translate X value.\r\n     * @param {number} ty - The Translate Y value.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    transform: function (a, b, c, d, tx, ty)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        var a0 = matrix[0];\r\n        var b0 = matrix[1];\r\n        var c0 = matrix[2];\r\n        var d0 = matrix[3];\r\n        var tx0 = matrix[4];\r\n        var ty0 = matrix[5];\r\n\r\n        matrix[0] = a * a0 + b * c0;\r\n        matrix[1] = a * b0 + b * d0;\r\n        matrix[2] = c * a0 + d * c0;\r\n        matrix[3] = c * b0 + d * d0;\r\n        matrix[4] = tx * a0 + ty * c0 + tx0;\r\n        matrix[5] = tx * b0 + ty * d0 + ty0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform a point using this Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#transformPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the point to transform.\r\n     * @param {number} y - The y coordinate of the point to transform.\r\n     * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} point - The Point object to store the transformed coordinates.\r\n     *\r\n     * @return {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} The Point containing the transformed coordinates.\r\n     */\r\n    transformPoint: function (x, y, point)\r\n    {\r\n        if (point === undefined) { point = { x: 0, y: 0 }; }\r\n\r\n        var matrix = this.matrix;\r\n\r\n        var a = matrix[0];\r\n        var b = matrix[1];\r\n        var c = matrix[2];\r\n        var d = matrix[3];\r\n        var tx = matrix[4];\r\n        var ty = matrix[5];\r\n\r\n        point.x = x * a + y * c + tx;\r\n        point.y = x * b + y * d + ty;\r\n\r\n        return point;\r\n    },\r\n\r\n    /**\r\n     * Invert the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#invert\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    invert: function ()\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        var a = matrix[0];\r\n        var b = matrix[1];\r\n        var c = matrix[2];\r\n        var d = matrix[3];\r\n        var tx = matrix[4];\r\n        var ty = matrix[5];\r\n\r\n        var n = a * d - b * c;\r\n\r\n        matrix[0] = d / n;\r\n        matrix[1] = -b / n;\r\n        matrix[2] = -c / n;\r\n        matrix[3] = a / n;\r\n        matrix[4] = (c * ty - d * tx) / n;\r\n        matrix[5] = -(a * ty - b * tx) / n;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix to copy those of the matrix given.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#copyFrom\r\n     * @since 3.11.0\r\n     *\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    copyFrom: function (src)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[0] = src.a;\r\n        matrix[1] = src.b;\r\n        matrix[2] = src.c;\r\n        matrix[3] = src.d;\r\n        matrix[4] = src.e;\r\n        matrix[5] = src.f;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix to copy those of the array given.\r\n     * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#copyFromArray\r\n     * @since 3.11.0\r\n     *\r\n     * @param {array} src - The array of values to set into this matrix.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    copyFromArray: function (src)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[0] = src[0];\r\n        matrix[1] = src[1];\r\n        matrix[2] = src[2];\r\n        matrix[3] = src[3];\r\n        matrix[4] = src[4];\r\n        matrix[5] = src[5];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Copy the values from this Matrix to the given Canvas Rendering Context.\r\n     * This will use the Context.transform method.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#copyToContext\r\n     * @since 3.12.0\r\n     *\r\n     * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\r\n     *\r\n     * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\r\n     */\r\n    copyToContext: function (ctx)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n        return ctx;\r\n    },\r\n\r\n    /**\r\n     * Copy the values from this Matrix to the given Canvas Rendering Context.\r\n     * This will use the Context.setTransform method.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#setToContext\r\n     * @since 3.12.0\r\n     *\r\n     * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\r\n     *\r\n     * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\r\n     */\r\n    setToContext: function (ctx)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n        return ctx;\r\n    },\r\n\r\n    /**\r\n     * Copy the values in this Matrix to the array given.\r\n     * \r\n     * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#copyToArray\r\n     * @since 3.12.0\r\n     *\r\n     * @param {array} [out] - The array to copy the matrix values in to.\r\n     *\r\n     * @return {array} An array where elements 0 to 5 contain the values from this matrix.\r\n     */\r\n    copyToArray: function (out)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        if (out === undefined)\r\n        {\r\n            out = [ matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5] ];\r\n        }\r\n        else\r\n        {\r\n            out[0] = matrix[0];\r\n            out[1] = matrix[1];\r\n            out[2] = matrix[2];\r\n            out[3] = matrix[3];\r\n            out[4] = matrix[4];\r\n            out[5] = matrix[5];\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#setTransform\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} a - The Scale X value.\r\n     * @param {number} b - The Shear Y value.\r\n     * @param {number} c - The Shear X value.\r\n     * @param {number} d - The Scale Y value.\r\n     * @param {number} tx - The Translate X value.\r\n     * @param {number} ty - The Translate Y value.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    setTransform: function (a, b, c, d, tx, ty)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        matrix[0] = a;\r\n        matrix[1] = b;\r\n        matrix[2] = c;\r\n        matrix[3] = d;\r\n        matrix[4] = tx;\r\n        matrix[5] = ty;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Decompose this Matrix into its translation, scale and rotation values using QR decomposition.\r\n     * \r\n     * The result must be applied in the following order to reproduce the current matrix:\r\n     * \r\n     * translate -> rotate -> scale\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#decomposeMatrix\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} The decomposed Matrix.\r\n     */\r\n    decomposeMatrix: function ()\r\n    {\r\n        var decomposedMatrix = this.decomposedMatrix;\r\n\r\n        var matrix = this.matrix;\r\n\r\n        //  a = scale X (1)\r\n        //  b = shear Y (0)\r\n        //  c = shear X (0)\r\n        //  d = scale Y (1)\r\n\r\n        var a = matrix[0];\r\n        var b = matrix[1];\r\n        var c = matrix[2];\r\n        var d = matrix[3];\r\n\r\n        var determ = a * d - b * c;\r\n\r\n        decomposedMatrix.translateX = matrix[4];\r\n        decomposedMatrix.translateY = matrix[5];\r\n\r\n        if (a || b)\r\n        {\r\n            var r = Math.sqrt(a * a + b * b);\r\n\r\n            decomposedMatrix.rotation = (b > 0) ? Math.acos(a / r) : -Math.acos(a / r);\r\n            decomposedMatrix.scaleX = r;\r\n            decomposedMatrix.scaleY = determ / r;\r\n        }\r\n        else if (c || d)\r\n        {\r\n            var s = Math.sqrt(c * c + d * d);\r\n\r\n            decomposedMatrix.rotation = Math.PI * 0.5 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\r\n            decomposedMatrix.scaleX = determ / s;\r\n            decomposedMatrix.scaleY = s;\r\n        }\r\n        else\r\n        {\r\n            decomposedMatrix.rotation = 0;\r\n            decomposedMatrix.scaleX = 0;\r\n            decomposedMatrix.scaleY = 0;\r\n        }\r\n\r\n        return decomposedMatrix;\r\n    },\r\n\r\n    /**\r\n     * Apply the identity, translate, rotate and scale operations on the Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#applyITRS\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal translation.\r\n     * @param {number} y - The vertical translation.\r\n     * @param {number} rotation - The angle of rotation in radians.\r\n     * @param {number} scaleX - The horizontal scale.\r\n     * @param {number} scaleY - The vertical scale.\r\n     *\r\n     * @return {this} This TransformMatrix.\r\n     */\r\n    applyITRS: function (x, y, rotation, scaleX, scaleY)\r\n    {\r\n        var matrix = this.matrix;\r\n\r\n        var radianSin = Math.sin(rotation);\r\n        var radianCos = Math.cos(rotation);\r\n\r\n        // Translate\r\n        matrix[4] = x;\r\n        matrix[5] = y;\r\n\r\n        // Rotate and Scale\r\n        matrix[0] = radianCos * scaleX;\r\n        matrix[1] = radianSin * scaleX;\r\n        matrix[2] = -radianSin * scaleY;\r\n        matrix[3] = radianCos * scaleY;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes the `x` and `y` values and returns a new position in the `output` vector that is the inverse of\r\n     * the current matrix with its transformation applied.\r\n     * \r\n     * Can be used to translate points from world to local space.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#applyInverse\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x - The x position to translate.\r\n     * @param {number} y - The y position to translate.\r\n     * @param {Phaser.Math.Vector2} [output] - A Vector2, or point-like object, to store the results in.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The coordinates, inverse-transformed through this matrix.\r\n     */\r\n    applyInverse: function (x, y, output)\r\n    {\r\n        if (output === undefined) { output = new Vector2(); }\r\n\r\n        var matrix = this.matrix;\r\n\r\n        var a = matrix[0];\r\n        var b = matrix[1];\r\n        var c = matrix[2];\r\n        var d = matrix[3];\r\n        var tx = matrix[4];\r\n        var ty = matrix[5];\r\n\r\n        var id = 1 / ((a * d) + (c * -b));\r\n\r\n        output.x = (d * id * x) + (-c * id * y) + (((ty * c) - (tx * d)) * id);\r\n        output.y = (a * id * y) + (-b * id * x) + (((-ty * a) + (tx * b)) * id);\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Returns the X component of this matrix multiplied by the given values.\r\n     * This is the same as `x * a + y * c + e`.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#getX\r\n     * @since 3.12.0\r\n     * \r\n     * @param {number} x - The x value.\r\n     * @param {number} y - The y value.\r\n     *\r\n     * @return {number} The calculated x value.\r\n     */\r\n    getX: function (x, y)\r\n    {\r\n        return x * this.a + y * this.c + this.e;\r\n    },\r\n\r\n    /**\r\n     * Returns the Y component of this matrix multiplied by the given values.\r\n     * This is the same as `x * b + y * d + f`.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#getY\r\n     * @since 3.12.0\r\n     * \r\n     * @param {number} x - The x value.\r\n     * @param {number} y - The y value.\r\n     *\r\n     * @return {number} The calculated y value.\r\n     */\r\n    getY: function (x, y)\r\n    {\r\n        return x * this.b + y * this.d + this.f;\r\n    },\r\n\r\n    /**\r\n     * Returns a string that can be used in a CSS Transform call as a `matrix` property.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#getCSSMatrix\r\n     * @since 3.12.0\r\n     *\r\n     * @return {string} A string containing the CSS Transform matrix values.\r\n     */\r\n    getCSSMatrix: function ()\r\n    {\r\n        var m = this.matrix;\r\n\r\n        return 'matrix(' + m[0] + ',' + m[1] + ',' + m[2] + ',' + m[3] + ',' + m[4] + ',' + m[5] + ')';\r\n    },\r\n\r\n    /**\r\n     * Destroys this Transform Matrix.\r\n     *\r\n     * @method Phaser.GameObjects.Components.TransformMatrix#destroy\r\n     * @since 3.4.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.matrix = null;\r\n        this.decomposedMatrix = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TransformMatrix;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybU1hdHJpeC5qcz8yZWQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUE4QztBQUM3RCxlQUFlLDhDQUE4QztBQUM3RDtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0QsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsK0NBQStDO0FBQzlEO0FBQ0EsZ0JBQWdCLCtDQUErQztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsVUFBVSxjQUFjOztBQUUxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsd0JBQXdCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBNYXRyaXggdXNlZCBmb3IgZGlzcGxheSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHJlbmRlcmluZy5cclxuICpcclxuICogSXQgaXMgcmVwcmVzZW50ZWQgbGlrZSBzbzpcclxuICpcclxuICogYGBgXHJcbiAqIHwgYSB8IGMgfCB0eCB8XHJcbiAqIHwgYiB8IGQgfCB0eSB8XHJcbiAqIHwgMCB8IDAgfCAxICB8XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2xhc3MgVHJhbnNmb3JtTWF0cml4XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYT0xXSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2I9MF0gLSBUaGUgU2tldyBZIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2M9MF0gLSBUaGUgU2tldyBYIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Q9MV0gLSBUaGUgU2NhbGUgWSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0eD0wXSAtIFRoZSBUcmFuc2xhdGUgWCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0eT0wXSAtIFRoZSBUcmFuc2xhdGUgWSB2YWx1ZS5cclxuICovXHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVHJhbnNmb3JtTWF0cml4IChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgeyBhID0gMTsgfVxyXG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIHsgYiA9IDA7IH1cclxuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkKSB7IGMgPSAwOyB9XHJcbiAgICAgICAgaWYgKGQgPT09IHVuZGVmaW5lZCkgeyBkID0gMTsgfVxyXG4gICAgICAgIGlmICh0eCA9PT0gdW5kZWZpbmVkKSB7IHR4ID0gMDsgfVxyXG4gICAgICAgIGlmICh0eSA9PT0gdW5kZWZpbmVkKSB7IHR5ID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF0cml4IHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheShbIGEsIGIsIGMsIGQsIHR4LCB0eSwgMCwgMCwgMSBdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlY29tcG9zZWQgbWF0cml4LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2RlY29tcG9zZWRNYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlZE1hdHJpeCA9IHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlWDogMCxcclxuICAgICAgICAgICAgdHJhbnNsYXRlWTogMCxcclxuICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgIHJvdGF0aW9uOiAwXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NhbGUgWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeFswXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4WzBdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2tldyBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNiXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbMV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTa2V3IFggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2NcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgYzoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXhbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFsyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjYWxlIFkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgZDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXhbM107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFszXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeFs0XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4WzRdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVHJhbnNsYXRlIFkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2ZcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGY6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2xhdGUgWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgdHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzRdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2xhdGUgWSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgdHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgTWF0cml4LiBWYWx1ZSBpcyBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNyb3RhdGlvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFjb3ModGhpcy5hIC8gdGhpcy5zY2FsZVgpICogKChNYXRoLmF0YW4oLXRoaXMuYyAvIHRoaXMuYSkgPCAwKSA/IC0xIDogMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIE1hdHJpeCwgbm9ybWFsaXplZCB0byBiZSB3aXRoaW4gdGhlIFBoYXNlciByaWdodC1oYW5kZWRcclxuICAgICAqIGNsb2Nrd2lzZSByb3RhdGlvbiBzcGFjZS4gVmFsdWUgaXMgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjcm90YXRpb25Ob3JtYWxpemVkXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uTm9ybWFsaXplZDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IG1hdHJpeFswXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgICAgIHZhciBjID0gbWF0cml4WzJdO1xyXG4gICAgICAgICAgICB2YXIgZCA9IG1hdHJpeFszXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhIHx8IGIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhciByID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGIgPiAwKSA/IE1hdGguYWNvcyhhIC8gdGhpcy5zY2FsZVgpIDogLU1hdGguYWNvcyhhIC8gdGhpcy5zY2FsZVgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgfHwgZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIHMgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiBNQVRIX0NPTlNULlRBVSAtICgoZCA+IDApID8gTWF0aC5hY29zKC1jIC8gdGhpcy5zY2FsZVkpIDogLU1hdGguYWNvcyhjIC8gdGhpcy5zY2FsZVkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVjb21wb3NlZCBob3Jpem9udGFsIHNjYWxlIG9mIHRoZSBNYXRyaXguIFRoaXMgdmFsdWUgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNzY2FsZVhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBzY2FsZVg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy5hICogdGhpcy5hKSArICh0aGlzLmIgKiB0aGlzLmIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWNvbXBvc2VkIHZlcnRpY2FsIHNjYWxlIG9mIHRoZSBNYXRyaXguIFRoaXMgdmFsdWUgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNzY2FsZVlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBzY2FsZVk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy5jICogdGhpcy5jKSArICh0aGlzLmQgKiB0aGlzLmQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBNYXRyaXggdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2xvYWRJZGVudGl0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGxvYWRJZGVudGl0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IDE7XHJcbiAgICAgICAgbWF0cml4WzFdID0gMDtcclxuICAgICAgICBtYXRyaXhbMl0gPSAwO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IDE7XHJcbiAgICAgICAgbWF0cml4WzRdID0gMDtcclxuICAgICAgICBtYXRyaXhbNV0gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCN0cmFuc2xhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFs0XSA9IG1hdHJpeFswXSAqIHggKyBtYXRyaXhbMl0gKiB5ICsgbWF0cml4WzRdO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbM10gKiB5ICsgbWF0cml4WzVdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSB0aGUgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I3NjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgc2NhbGUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSAqPSB4O1xyXG4gICAgICAgIG1hdHJpeFsxXSAqPSB4O1xyXG4gICAgICAgIG1hdHJpeFsyXSAqPSB5O1xyXG4gICAgICAgIG1hdHJpeFszXSAqPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNyb3RhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uIChhbmdsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IGEgKiBjb3MgKyBjICogc2luO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGIgKiBjb3MgKyBkICogc2luO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGEgKiAtc2luICsgYyAqIGNvcztcclxuICAgICAgICBtYXRyaXhbM10gPSBiICogLXNpbiArIGQgKiBjb3M7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgTWF0cml4IGJ5IHRoZSBnaXZlbiBNYXRyaXguXHJcbiAgICAgKiBcclxuICAgICAqIElmIGFuIGBvdXRgIE1hdHJpeCBpcyBnaXZlbiB0aGVuIHRoZSByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIGl0LlxyXG4gICAgICogSWYgaXQgaXMgbm90IGdpdmVuLCB0aGlzIG1hdHJpeCB3aWxsIGJlIHVwZGF0ZWQgaW4gcGxhY2UgaW5zdGVhZC5cclxuICAgICAqIFVzZSBhbiBgb3V0YCBNYXRyaXggaWYgeW91IGRvIG5vdCB3aXNoIHRvIG11dGF0ZSB0aGlzIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtdWx0aXBseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHJocyAtIFRoZSBNYXRyaXggdG8gbXVsdGlwbHkgYnkuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gW291dF0gLSBBbiBvcHRpb25hbCBNYXRyaXggdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBFaXRoZXIgdGhpcyBUcmFuc2Zvcm1NYXRyaXgsIG9yIHRoZSBgb3V0YCBNYXRyaXgsIGlmIGdpdmVuIGluIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAocmhzLCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSByaHMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbG9jYWxBID0gbWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBsb2NhbEIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGxvY2FsQyA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbG9jYWxEID0gbWF0cml4WzNdO1xyXG4gICAgICAgIHZhciBsb2NhbEUgPSBtYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIGxvY2FsRiA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIHNvdXJjZUEgPSBzb3VyY2VbMF07XHJcbiAgICAgICAgdmFyIHNvdXJjZUIgPSBzb3VyY2VbMV07XHJcbiAgICAgICAgdmFyIHNvdXJjZUMgPSBzb3VyY2VbMl07XHJcbiAgICAgICAgdmFyIHNvdXJjZUQgPSBzb3VyY2VbM107XHJcbiAgICAgICAgdmFyIHNvdXJjZUUgPSBzb3VyY2VbNF07XHJcbiAgICAgICAgdmFyIHNvdXJjZUYgPSBzb3VyY2VbNV07XHJcblxyXG4gICAgICAgIHZhciBkZXN0aW5hdGlvbk1hdHJpeCA9IChvdXQgPT09IHVuZGVmaW5lZCkgPyB0aGlzIDogb3V0O1xyXG5cclxuICAgICAgICBkZXN0aW5hdGlvbk1hdHJpeC5hID0gKHNvdXJjZUEgKiBsb2NhbEEpICsgKHNvdXJjZUIgKiBsb2NhbEMpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uTWF0cml4LmIgPSAoc291cmNlQSAqIGxvY2FsQikgKyAoc291cmNlQiAqIGxvY2FsRCk7XHJcbiAgICAgICAgZGVzdGluYXRpb25NYXRyaXguYyA9IChzb3VyY2VDICogbG9jYWxBKSArIChzb3VyY2VEICogbG9jYWxDKTtcclxuICAgICAgICBkZXN0aW5hdGlvbk1hdHJpeC5kID0gKHNvdXJjZUMgKiBsb2NhbEIpICsgKHNvdXJjZUQgKiBsb2NhbEQpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uTWF0cml4LmUgPSAoc291cmNlRSAqIGxvY2FsQSkgKyAoc291cmNlRiAqIGxvY2FsQykgKyBsb2NhbEU7XHJcbiAgICAgICAgZGVzdGluYXRpb25NYXRyaXguZiA9IChzb3VyY2VFICogbG9jYWxCKSArIChzb3VyY2VGICogbG9jYWxEKSArIGxvY2FsRjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uTWF0cml4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgTWF0cml4IGJ5IHRoZSBtYXRyaXggZ2l2ZW4sIGluY2x1ZGluZyB0aGUgb2Zmc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgb2Zmc2V0WCBpcyBhZGRlZCB0byB0aGUgdHggdmFsdWU6IGBvZmZzZXRYICogYSArIG9mZnNldFkgKiBjICsgdHhgLlxyXG4gICAgICogVGhlIG9mZnNldFkgaXMgYWRkZWQgdG8gdGhlIHR5IHZhbHVlOiBgb2Zmc2V0WSAqIGIgKyBvZmZzZXRZICogZCArIHR5YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtdWx0aXBseVdpdGhPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gc3JjIC0gVGhlIHNvdXJjZSBNYXRyaXggdG8gY29weSBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFggLSBIb3Jpem9udGFsIG9mZnNldCB0byBmYWN0b3IgaW4gdG8gdGhlIG11bHRpcGxpY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFkgLSBWZXJ0aWNhbCBvZmZzZXQgdG8gZmFjdG9yIGluIHRvIHRoZSBtdWx0aXBsaWNhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlXaXRoT2Zmc2V0OiBmdW5jdGlvbiAoc3JjLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuICAgICAgICB2YXIgb3RoZXJNYXRyaXggPSBzcmMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYTAgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIwID0gbWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMCA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZDAgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4MCA9IG1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkwID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICB2YXIgcHNlID0gb2Zmc2V0WCAqIGEwICsgb2Zmc2V0WSAqIGMwICsgdHgwO1xyXG4gICAgICAgIHZhciBwc2YgPSBvZmZzZXRYICogYjAgKyBvZmZzZXRZICogZDAgKyB0eTA7XHJcblxyXG4gICAgICAgIHZhciBhMSA9IG90aGVyTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBiMSA9IG90aGVyTWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMSA9IG90aGVyTWF0cml4WzJdO1xyXG4gICAgICAgIHZhciBkMSA9IG90aGVyTWF0cml4WzNdO1xyXG4gICAgICAgIHZhciB0eDEgPSBvdGhlck1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkxID0gb3RoZXJNYXRyaXhbNV07XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IGExICogYTAgKyBiMSAqIGMwO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGExICogYjAgKyBiMSAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGMxICogYTAgKyBkMSAqIGMwO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IGMxICogYjAgKyBkMSAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHR4MSAqIGEwICsgdHkxICogYzAgKyBwc2U7XHJcbiAgICAgICAgbWF0cml4WzVdID0gdHgxICogYjAgKyB0eTEgKiBkMCArIHBzZjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHRoZSBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHJhbnNmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgU2hlYXIgWSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjIC0gVGhlIFNoZWFyIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZCAtIFRoZSBTY2FsZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR4IC0gVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR5IC0gVGhlIFRyYW5zbGF0ZSBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYTAgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIwID0gbWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMCA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZDAgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4MCA9IG1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkwID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBhICogYTAgKyBiICogYzA7XHJcbiAgICAgICAgbWF0cml4WzFdID0gYSAqIGIwICsgYiAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGMgKiBhMCArIGQgKiBjMDtcclxuICAgICAgICBtYXRyaXhbM10gPSBjICogYjAgKyBkICogZDA7XHJcbiAgICAgICAgbWF0cml4WzRdID0gdHggKiBhMCArIHR5ICogYzAgKyB0eDA7XHJcbiAgICAgICAgbWF0cml4WzVdID0gdHggKiBiMCArIHR5ICogZDAgKyB0eTA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBhIHBvaW50IHVzaW5nIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I3RyYW5zZm9ybVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdHJhbnNmb3JtLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8UGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgdG8gc3RvcmUgdGhlIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSBQb2ludCBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy5cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUG9pbnQ6IGZ1bmN0aW9uICh4LCB5LCBwb2ludClcclxuICAgIHtcclxuICAgICAgICBpZiAocG9pbnQgPT09IHVuZGVmaW5lZCkgeyBwb2ludCA9IHsgeDogMCwgeTogMCB9OyB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4ID0gbWF0cml4WzRdO1xyXG4gICAgICAgIHZhciB0eSA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgcG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcclxuICAgICAgICBwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHRoZSBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjaW52ZXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4ID0gbWF0cml4WzRdO1xyXG4gICAgICAgIHZhciB0eSA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBkIC8gbjtcclxuICAgICAgICBtYXRyaXhbMV0gPSAtYiAvIG47XHJcbiAgICAgICAgbWF0cml4WzJdID0gLWMgLyBuO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IGEgLyBuO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IChjICogdHkgLSBkICogdHgpIC8gbjtcclxuICAgICAgICBtYXRyaXhbNV0gPSAtKGEgKiB0eSAtIGIgKiB0eCkgLyBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCB0byBjb3B5IHRob3NlIG9mIHRoZSBtYXRyaXggZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjY29weUZyb21cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gc3JjIC0gVGhlIHNvdXJjZSBNYXRyaXggdG8gY29weSBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICBjb3B5RnJvbTogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IHNyYy5hO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IHNyYy5iO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IHNyYy5jO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IHNyYy5kO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHNyYy5lO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHNyYy5mO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCB0byBjb3B5IHRob3NlIG9mIHRoZSBhcnJheSBnaXZlbi5cclxuICAgICAqIFdoZXJlIGFycmF5IGluZGV4ZXMgMCwgMSwgMiwgMywgNCBhbmQgNSBhcmUgbWFwcGVkIHRvIGEsIGIsIGMsIGQsIGUgYW5kIGYuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjY29weUZyb21BcnJheVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHNyYyAtIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gc2V0IGludG8gdGhpcyBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGNvcHlGcm9tQXJyYXk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBzcmNbMF07XHJcbiAgICAgICAgbWF0cml4WzFdID0gc3JjWzFdO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IHNyY1syXTtcclxuICAgICAgICBtYXRyaXhbM10gPSBzcmNbM107XHJcbiAgICAgICAgbWF0cml4WzRdID0gc3JjWzRdO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHNyY1s1XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIGZyb20gdGhpcyBNYXRyaXggdG8gdGhlIGdpdmVuIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqIFRoaXMgd2lsbCB1c2UgdGhlIENvbnRleHQudHJhbnNmb3JtIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNjb3B5VG9Db250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQgdG8gY29weSB0aGUgbWF0cml4IHZhbHVlcyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIGNvcHlUb0NvbnRleHQ6IGZ1bmN0aW9uIChjdHgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBjdHgudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY3R4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIHRoaXMgTWF0cml4IHRvIHRoZSBnaXZlbiBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBUaGlzIHdpbGwgdXNlIHRoZSBDb250ZXh0LnNldFRyYW5zZm9ybSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjc2V0VG9Db250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQgdG8gY29weSB0aGUgbWF0cml4IHZhbHVlcyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIHNldFRvQ29udGV4dDogZnVuY3Rpb24gKGN0eClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIGluIHRoaXMgTWF0cml4IHRvIHRoZSBhcnJheSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogV2hlcmUgYXJyYXkgaW5kZXhlcyAwLCAxLCAyLCAzLCA0IGFuZCA1IGFyZSBtYXBwZWQgdG8gYSwgYiwgYywgZCwgZSBhbmQgZi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNjb3B5VG9BcnJheVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gVGhlIGFycmF5IHRvIGNvcHkgdGhlIG1hdHJpeCB2YWx1ZXMgaW4gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdoZXJlIGVsZW1lbnRzIDAgdG8gNSBjb250YWluIHRoZSB2YWx1ZXMgZnJvbSB0aGlzIG1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgY29weVRvQXJyYXk6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQgPSBbIG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0gXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gbWF0cml4WzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSBtYXRyaXhbMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IG1hdHJpeFsyXTtcclxuICAgICAgICAgICAgb3V0WzNdID0gbWF0cml4WzNdO1xyXG4gICAgICAgICAgICBvdXRbNF0gPSBtYXRyaXhbNF07XHJcbiAgICAgICAgICAgIG91dFs1XSA9IG1hdHJpeFs1XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB2YWx1ZXMgb2YgdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjc2V0VHJhbnNmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgU2hlYXIgWSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjIC0gVGhlIFNoZWFyIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZCAtIFRoZSBTY2FsZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR4IC0gVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR5IC0gVGhlIFRyYW5zbGF0ZSBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICBzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBhO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGI7XHJcbiAgICAgICAgbWF0cml4WzJdID0gYztcclxuICAgICAgICBtYXRyaXhbM10gPSBkO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHR4O1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHR5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhpcyBNYXRyaXggaW50byBpdHMgdHJhbnNsYXRpb24sIHNjYWxlIGFuZCByb3RhdGlvbiB2YWx1ZXMgdXNpbmcgUVIgZGVjb21wb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHJlc3VsdCBtdXN0IGJlIGFwcGxpZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciB0byByZXByb2R1Y2UgdGhlIGN1cnJlbnQgbWF0cml4OlxyXG4gICAgICogXHJcbiAgICAgKiB0cmFuc2xhdGUgLT4gcm90YXRlIC0+IHNjYWxlXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjZGVjb21wb3NlTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBkZWNvbXBvc2VkIE1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTWF0cml4OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkZWNvbXBvc2VkTWF0cml4ID0gdGhpcy5kZWNvbXBvc2VkTWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIC8vICBhID0gc2NhbGUgWCAoMSlcclxuICAgICAgICAvLyAgYiA9IHNoZWFyIFkgKDApXHJcbiAgICAgICAgLy8gIGMgPSBzaGVhciBYICgwKVxyXG4gICAgICAgIC8vICBkID0gc2NhbGUgWSAoMSlcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcblxyXG4gICAgICAgIHZhciBkZXRlcm0gPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnRyYW5zbGF0ZVggPSBtYXRyaXhbNF07XHJcbiAgICAgICAgZGVjb21wb3NlZE1hdHJpeC50cmFuc2xhdGVZID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICBpZiAoYSB8fCBiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XHJcblxyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnJvdGF0aW9uID0gKGIgPiAwKSA/IE1hdGguYWNvcyhhIC8gcikgOiAtTWF0aC5hY29zKGEgLyByKTtcclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5zY2FsZVggPSByO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWSA9IGRldGVybSAvIHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGMgfHwgZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpO1xyXG5cclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5yb3RhdGlvbiA9IE1hdGguUEkgKiAwLjUgLSAoZCA+IDAgPyBNYXRoLmFjb3MoLWMgLyBzKSA6IC1NYXRoLmFjb3MoYyAvIHMpKTtcclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5zY2FsZVggPSBkZXRlcm0gLyBzO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWSA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlY29tcG9zZWRNYXRyaXgucm90YXRpb24gPSAwO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWCA9IDA7XHJcbiAgICAgICAgICAgIGRlY29tcG9zZWRNYXRyaXguc2NhbGVZID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZWNvbXBvc2VkTWF0cml4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRoZSBpZGVudGl0eSwgdHJhbnNsYXRlLCByb3RhdGUgYW5kIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNhcHBseUlUUlNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvbiAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWCAtIFRoZSBob3Jpem9udGFsIHNjYWxlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWSAtIFRoZSB2ZXJ0aWNhbCBzY2FsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgYXBwbHlJVFJTOiBmdW5jdGlvbiAoeCwgeSwgcm90YXRpb24sIHNjYWxlWCwgc2NhbGVZKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIHJhZGlhblNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcclxuICAgICAgICB2YXIgcmFkaWFuQ29zID0gTWF0aC5jb3Mocm90YXRpb24pO1xyXG5cclxuICAgICAgICAvLyBUcmFuc2xhdGVcclxuICAgICAgICBtYXRyaXhbNF0gPSB4O1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHk7XHJcblxyXG4gICAgICAgIC8vIFJvdGF0ZSBhbmQgU2NhbGVcclxuICAgICAgICBtYXRyaXhbMF0gPSByYWRpYW5Db3MgKiBzY2FsZVg7XHJcbiAgICAgICAgbWF0cml4WzFdID0gcmFkaWFuU2luICogc2NhbGVYO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IC1yYWRpYW5TaW4gKiBzY2FsZVk7XHJcbiAgICAgICAgbWF0cml4WzNdID0gcmFkaWFuQ29zICogc2NhbGVZO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgYHhgIGFuZCBgeWAgdmFsdWVzIGFuZCByZXR1cm5zIGEgbmV3IHBvc2l0aW9uIGluIHRoZSBgb3V0cHV0YCB2ZWN0b3IgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZlxyXG4gICAgICogdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggaXRzIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIENhbiBiZSB1c2VkIHRvIHRyYW5zbGF0ZSBwb2ludHMgZnJvbSB3b3JsZCB0byBsb2NhbCBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNhcHBseUludmVyc2VcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIHRvIHRyYW5zbGF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gdG8gdHJhbnNsYXRlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0cHV0XSAtIEEgVmVjdG9yMiwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcywgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBhcHBseUludmVyc2U6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYSA9IG1hdHJpeFswXTtcclxuICAgICAgICB2YXIgYiA9IG1hdHJpeFsxXTtcclxuICAgICAgICB2YXIgYyA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZCA9IG1hdHJpeFszXTtcclxuICAgICAgICB2YXIgdHggPSBtYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIHR5ID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICB2YXIgaWQgPSAxIC8gKChhICogZCkgKyAoYyAqIC1iKSk7XHJcblxyXG4gICAgICAgIG91dHB1dC54ID0gKGQgKiBpZCAqIHgpICsgKC1jICogaWQgKiB5KSArICgoKHR5ICogYykgLSAodHggKiBkKSkgKiBpZCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSAoYSAqIGlkICogeSkgKyAoLWIgKiBpZCAqIHgpICsgKCgoLXR5ICogYSkgKyAodHggKiBiKSkgKiBpZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWCBjb21wb25lbnQgb2YgdGhpcyBtYXRyaXggbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgeCAqIGEgKyB5ICogYyArIGVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2dldFhcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FsY3VsYXRlZCB4IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRYOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geCAqIHRoaXMuYSArIHkgKiB0aGlzLmMgKyB0aGlzLmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWSBjb21wb25lbnQgb2YgdGhpcyBtYXRyaXggbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgeCAqIGIgKyB5ICogZCArIGZgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2dldFlcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FsY3VsYXRlZCB5IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRZOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geCAqIHRoaXMuYiArIHkgKiB0aGlzLmQgKyB0aGlzLmY7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgQ1NTIFRyYW5zZm9ybSBjYWxsIGFzIGEgYG1hdHJpeGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjZ2V0Q1NTTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBDU1MgVHJhbnNmb3JtIG1hdHJpeCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldENTU01hdHJpeDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbSA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICByZXR1cm4gJ21hdHJpeCgnICsgbVswXSArICcsJyArIG1bMV0gKyAnLCcgKyBtWzJdICsgJywnICsgbVszXSArICcsJyArIG1bNF0gKyAnLCcgKyBtWzVdICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgVHJhbnNmb3JtIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hdHJpeCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VkTWF0cml4ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm1NYXRyaXg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/Visible.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/Visible.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  bitmask flag for GameObject.renderMask\r\nvar _FLAG = 1; // 0001\r\n\r\n/**\r\n * Provides methods used for setting the visibility of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Visible\r\n * @since 3.0.0\r\n */\r\n\r\nvar Visible = {\r\n\r\n    /**\r\n     * Private internal value. Holds the visible value.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Visible#_visible\r\n     * @type {boolean}\r\n     * @private\r\n     * @default true\r\n     * @since 3.0.0\r\n     */\r\n    _visible: true,\r\n\r\n    /**\r\n     * The visible state of the Game Object.\r\n     * \r\n     * An invisible Game Object will skip rendering, but will still process update logic.\r\n     * \r\n     * @name Phaser.GameObjects.Components.Visible#visible\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    visible: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._visible;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value)\r\n            {\r\n                this._visible = true;\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n            else\r\n            {\r\n                this._visible = false;\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the visibility of this Game Object.\r\n     * \r\n     * An invisible Game Object will skip rendering, but will still process update logic.\r\n     *\r\n     * @method Phaser.GameObjects.Components.Visible#setVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The visible state of the Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setVisible: function (value)\r\n    {\r\n        this.visible = value;\r\n\r\n        return this;\r\n    }\r\n};\r\n\r\nmodule.exports = Visible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Zpc2libGUuanM/MDU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIGJpdG1hc2sgZmxhZyBmb3IgR2FtZU9iamVjdC5yZW5kZXJNYXNrXHJcbnZhciBfRkxBRyA9IDE7IC8vIDAwMDFcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIHNldHRpbmcgdGhlIHZpc2liaWxpdHkgb2YgYSBHYW1lIE9iamVjdC5cclxuICogU2hvdWxkIGJlIGFwcGxpZWQgYXMgYSBtaXhpbiBhbmQgbm90IHVzZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFZpc2libGUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdmlzaWJsZSB2YWx1ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSNfdmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF92aXNpYmxlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBpbnZpc2libGUgR2FtZSBPYmplY3Qgd2lsbCBza2lwIHJlbmRlcmluZywgYnV0IHdpbGwgc3RpbGwgcHJvY2VzcyB1cGRhdGUgbG9naWMuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdmlzaWJsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQW4gaW52aXNpYmxlIEdhbWUgT2JqZWN0IHdpbGwgc2tpcCByZW5kZXJpbmcsIGJ1dCB3aWxsIHN0aWxsIHByb2Nlc3MgdXBkYXRlIGxvZ2ljLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSNzZXRWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gVGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Visible.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/components/index.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/components/index.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Alpha: __webpack_require__(/*! ./Alpha */ \"./node_modules/phaser/src/gameobjects/components/Alpha.js\"),\r\n    Animation: __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/gameobjects/components/Animation.js\"),\r\n    BlendMode: __webpack_require__(/*! ./BlendMode */ \"./node_modules/phaser/src/gameobjects/components/BlendMode.js\"),\r\n    ComputedSize: __webpack_require__(/*! ./ComputedSize */ \"./node_modules/phaser/src/gameobjects/components/ComputedSize.js\"),\r\n    Crop: __webpack_require__(/*! ./Crop */ \"./node_modules/phaser/src/gameobjects/components/Crop.js\"),\r\n    Depth: __webpack_require__(/*! ./Depth */ \"./node_modules/phaser/src/gameobjects/components/Depth.js\"),\r\n    Flip: __webpack_require__(/*! ./Flip */ \"./node_modules/phaser/src/gameobjects/components/Flip.js\"),\r\n    GetBounds: __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/gameobjects/components/GetBounds.js\"),\r\n    Mask: __webpack_require__(/*! ./Mask */ \"./node_modules/phaser/src/gameobjects/components/Mask.js\"),\r\n    Origin: __webpack_require__(/*! ./Origin */ \"./node_modules/phaser/src/gameobjects/components/Origin.js\"),\r\n    PathFollower: __webpack_require__(/*! ./PathFollower */ \"./node_modules/phaser/src/gameobjects/components/PathFollower.js\"),\r\n    Pipeline: __webpack_require__(/*! ./Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\"),\r\n    ScrollFactor: __webpack_require__(/*! ./ScrollFactor */ \"./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\"),\r\n    Size: __webpack_require__(/*! ./Size */ \"./node_modules/phaser/src/gameobjects/components/Size.js\"),\r\n    Texture: __webpack_require__(/*! ./Texture */ \"./node_modules/phaser/src/gameobjects/components/Texture.js\"),\r\n    TextureCrop: __webpack_require__(/*! ./TextureCrop */ \"./node_modules/phaser/src/gameobjects/components/TextureCrop.js\"),\r\n    Tint: __webpack_require__(/*! ./Tint */ \"./node_modules/phaser/src/gameobjects/components/Tint.js\"),\r\n    ToJSON: __webpack_require__(/*! ./ToJSON */ \"./node_modules/phaser/src/gameobjects/components/ToJSON.js\"),\r\n    Transform: __webpack_require__(/*! ./Transform */ \"./node_modules/phaser/src/gameobjects/components/Transform.js\"),\r\n    TransformMatrix: __webpack_require__(/*! ./TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\"),\r\n    Visible: __webpack_require__(/*! ./Visible */ \"./node_modules/phaser/src/gameobjects/components/Visible.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL2luZGV4LmpzPzNlN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLGtGQUFhO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxrRkFBYTtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLHdFQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQywwRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsd0VBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLGtGQUFhO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyx3RUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsNEVBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsd0ZBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxnRkFBWTtBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLHdFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyw4RUFBVztBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBZTtBQUN4QyxVQUFVLG1CQUFPLENBQUMsd0VBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLDRFQUFVO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyxrRkFBYTtBQUNwQyxxQkFBcUIsbUJBQU8sQ0FBQyw4RkFBbUI7QUFDaEQsYUFBYSxtQkFBTyxDQUFDLDhFQUFXOztBQUVoQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQWxwaGE6IHJlcXVpcmUoJy4vQWxwaGEnKSxcclxuICAgIEFuaW1hdGlvbjogcmVxdWlyZSgnLi9BbmltYXRpb24nKSxcclxuICAgIEJsZW5kTW9kZTogcmVxdWlyZSgnLi9CbGVuZE1vZGUnKSxcclxuICAgIENvbXB1dGVkU2l6ZTogcmVxdWlyZSgnLi9Db21wdXRlZFNpemUnKSxcclxuICAgIENyb3A6IHJlcXVpcmUoJy4vQ3JvcCcpLFxyXG4gICAgRGVwdGg6IHJlcXVpcmUoJy4vRGVwdGgnKSxcclxuICAgIEZsaXA6IHJlcXVpcmUoJy4vRmxpcCcpLFxyXG4gICAgR2V0Qm91bmRzOiByZXF1aXJlKCcuL0dldEJvdW5kcycpLFxyXG4gICAgTWFzazogcmVxdWlyZSgnLi9NYXNrJyksXHJcbiAgICBPcmlnaW46IHJlcXVpcmUoJy4vT3JpZ2luJyksXHJcbiAgICBQYXRoRm9sbG93ZXI6IHJlcXVpcmUoJy4vUGF0aEZvbGxvd2VyJyksXHJcbiAgICBQaXBlbGluZTogcmVxdWlyZSgnLi9QaXBlbGluZScpLFxyXG4gICAgU2Nyb2xsRmFjdG9yOiByZXF1aXJlKCcuL1Njcm9sbEZhY3RvcicpLFxyXG4gICAgU2l6ZTogcmVxdWlyZSgnLi9TaXplJyksXHJcbiAgICBUZXh0dXJlOiByZXF1aXJlKCcuL1RleHR1cmUnKSxcclxuICAgIFRleHR1cmVDcm9wOiByZXF1aXJlKCcuL1RleHR1cmVDcm9wJyksXHJcbiAgICBUaW50OiByZXF1aXJlKCcuL1RpbnQnKSxcclxuICAgIFRvSlNPTjogcmVxdWlyZSgnLi9Ub0pTT04nKSxcclxuICAgIFRyYW5zZm9ybTogcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcclxuICAgIFRyYW5zZm9ybU1hdHJpeDogcmVxdWlyZSgnLi9UcmFuc2Zvcm1NYXRyaXgnKSxcclxuICAgIFZpc2libGU6IHJlcXVpcmUoJy4vVmlzaWJsZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/Container.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/Container.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayUtils = __webpack_require__(/*! ../../utils/array */ \"./node_modules/phaser/src/utils/array/index.js\");\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Render = __webpack_require__(/*! ./ContainerRender */ \"./node_modules/phaser/src/gameobjects/container/ContainerRender.js\");\r\nvar Union = __webpack_require__(/*! ../../geom/rectangle/Union */ \"./node_modules/phaser/src/geom/rectangle/Union.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Container Game Object.\r\n *\r\n * A Container, as the name implies, can 'contain' other types of Game Object.\r\n * When a Game Object is added to a Container, the Container becomes responsible for the rendering of it.\r\n * By default it will be removed from the Display List and instead added to the Containers own internal list.\r\n *\r\n * The position of the Game Object automatically becomes relative to the position of the Container.\r\n *\r\n * When the Container is rendered, all of its children are rendered as well, in the order in which they exist\r\n * within the Container. Container children can be repositioned using methods such as `MoveUp`, `MoveDown` and `SendToBack`.\r\n *\r\n * If you modify a transform property of the Container, such as `Container.x` or `Container.rotation` then it will\r\n * automatically influence all children as well.\r\n *\r\n * Containers can include other Containers for deeply nested transforms.\r\n *\r\n * Containers can have masks set on them and can be used as a mask too. However, Container children cannot be masked.\r\n * The masks do not 'stack up'. Only a Container on the root of the display list will use its mask.\r\n *\r\n * Containers can be enabled for input. Because they do not have a texture you need to provide a shape for them\r\n * to use as their hit area. Container children can also be enabled for input, independent of the Container.\r\n *\r\n * Containers can be given a physics body for either Arcade Physics, Impact Physics or Matter Physics. However,\r\n * if Container _children_ are enabled for physics you may get unexpected results, such as offset bodies,\r\n * if the Container itself, or any of its ancestors, is positioned anywhere other than at 0 x 0. Container children\r\n * with physics do not factor in the Container due to the excessive extra calculations needed. Please structure\r\n * your game to work around this.\r\n *\r\n * It's important to understand the impact of using Containers. They add additional processing overhead into\r\n * every one of their children. The deeper you nest them, the more the cost escalates. This is especially true\r\n * for input events. You also loose the ability to set the display depth of Container children in the same\r\n * flexible manner as those not within them. In short, don't use them for the sake of it. You pay a small cost\r\n * every time you create one, try to structure your game around avoiding that where possible.\r\n *\r\n * @class Container\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.4.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.GameObjects.GameObject[]} [children] - An optional array of Game Objects to add to this Container.\r\n */\r\nvar Container = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Depth,\r\n        Components.Mask,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Container (scene, x, y, children)\r\n    {\r\n        GameObject.call(this, scene, 'Container');\r\n\r\n        /**\r\n         * An array holding the children of this Container.\r\n         *\r\n         * @name Phaser.GameObjects.Container#list\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @since 3.4.0\r\n         */\r\n        this.list = [];\r\n\r\n        /**\r\n         * Does this Container exclusively manage its children?\r\n         *\r\n         * The default is `true` which means a child added to this Container cannot\r\n         * belong in another Container, which includes the Scene display list.\r\n         *\r\n         * If you disable this then this Container will no longer exclusively manage its children.\r\n         * This allows you to create all kinds of interesting graphical effects, such as replicating\r\n         * Game Objects without reparenting them all over the Scene.\r\n         * However, doing so will prevent children from receiving any kind of input event or have\r\n         * their physics bodies work by default, as they're no longer a single entity on the\r\n         * display list, but are being replicated where-ever this Container is.\r\n         *\r\n         * @name Phaser.GameObjects.Container#exclusive\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.4.0\r\n         */\r\n        this.exclusive = true;\r\n\r\n        /**\r\n         * Containers can have an optional maximum size. If set to anything above 0 it\r\n         * will constrict the addition of new Game Objects into the Container, capping off\r\n         * the maximum limit the Container can grow in size to.\r\n         *\r\n         * @name Phaser.GameObjects.Container#maxSize\r\n         * @type {integer}\r\n         * @default -1\r\n         * @since 3.4.0\r\n         */\r\n        this.maxSize = -1;\r\n\r\n        /**\r\n         * The cursor position.\r\n         *\r\n         * @name Phaser.GameObjects.Container#position\r\n         * @type {integer}\r\n         * @since 3.4.0\r\n         */\r\n        this.position = 0;\r\n\r\n        /**\r\n         * Internal Transform Matrix used for local space conversion.\r\n         *\r\n         * @name Phaser.GameObjects.Container#localTransform\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.4.0\r\n         */\r\n        this.localTransform = new Components.TransformMatrix();\r\n\r\n        /**\r\n         * Internal temporary Transform Matrix used to avoid object creation.\r\n         *\r\n         * @name Phaser.GameObjects.Container#tempTransformMatrix\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this.tempTransformMatrix = new Components.TransformMatrix();\r\n\r\n        /**\r\n         * A reference to the Scene Display List.\r\n         *\r\n         * @name Phaser.GameObjects.Container#_displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._displayList = scene.sys.displayList;\r\n\r\n        /**\r\n         * The property key to sort by.\r\n         *\r\n         * @name Phaser.GameObjects.Container#_sortKey\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._sortKey = '';\r\n\r\n        /**\r\n         * A reference to the Scene Systems Event Emitter.\r\n         *\r\n         * @name Phaser.GameObjects.Container#_sysEvents\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @private\r\n         * @since 3.9.0\r\n         */\r\n        this._sysEvents = scene.sys.events;\r\n\r\n        /**\r\n         * The horizontal scroll factor of this Container.\r\n         *\r\n         * The scroll factor controls the influence of the movement of a Camera upon this Container.\r\n         *\r\n         * When a camera scrolls it will change the location at which this Container is rendered on-screen.\r\n         * It does not change the Containers actual position values.\r\n         * \r\n         * For a Container, setting this value will only update the Container itself, not its children.\r\n         * If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.\r\n         *\r\n         * A value of 1 means it will move exactly in sync with a camera.\r\n         * A value of 0 means it will not move at all, even if the camera moves.\r\n         * Other values control the degree to which the camera movement is mapped to this Container.\r\n         * \r\n         * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n         * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n         * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n         * them from physics bodies if not accounted for in your code.\r\n         *\r\n         * @name Phaser.GameObjects.Container#scrollFactorX\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollFactorX = 1;\r\n\r\n        /**\r\n         * The vertical scroll factor of this Container.\r\n         *\r\n         * The scroll factor controls the influence of the movement of a Camera upon this Container.\r\n         *\r\n         * When a camera scrolls it will change the location at which this Container is rendered on-screen.\r\n         * It does not change the Containers actual position values.\r\n         * \r\n         * For a Container, setting this value will only update the Container itself, not its children.\r\n         * If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.\r\n         *\r\n         * A value of 1 means it will move exactly in sync with a camera.\r\n         * A value of 0 means it will not move at all, even if the camera moves.\r\n         * Other values control the degree to which the camera movement is mapped to this Container.\r\n         * \r\n         * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n         * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n         * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n         * them from physics bodies if not accounted for in your code.\r\n         *\r\n         * @name Phaser.GameObjects.Container#scrollFactorY\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollFactorY = 1;\r\n\r\n        this.setPosition(x, y);\r\n\r\n        this.clearAlpha();\r\n\r\n        this.setBlendMode(BlendModes.SKIP_CHECK);\r\n\r\n        if (children)\r\n        {\r\n            this.add(children);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal value to allow Containers to be used for input and physics.\r\n     * Do not change this value. It has no effect other than to break things.\r\n     *\r\n     * @name Phaser.GameObjects.Container#originX\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    originX: {\r\n\r\n        get: function ()\r\n        {\r\n            return 0.5;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Internal value to allow Containers to be used for input and physics.\r\n     * Do not change this value. It has no effect other than to break things.\r\n     *\r\n     * @name Phaser.GameObjects.Container#originY\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    originY: {\r\n\r\n        get: function ()\r\n        {\r\n            return 0.5;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Internal value to allow Containers to be used for input and physics.\r\n     * Do not change this value. It has no effect other than to break things.\r\n     *\r\n     * @name Phaser.GameObjects.Container#displayOriginX\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    displayOriginX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.width * 0.5;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Internal value to allow Containers to be used for input and physics.\r\n     * Do not change this value. It has no effect other than to break things.\r\n     *\r\n     * @name Phaser.GameObjects.Container#displayOriginY\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    displayOriginY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.height * 0.5;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Does this Container exclusively manage its children?\r\n     *\r\n     * The default is `true` which means a child added to this Container cannot\r\n     * belong in another Container, which includes the Scene display list.\r\n     *\r\n     * If you disable this then this Container will no longer exclusively manage its children.\r\n     * This allows you to create all kinds of interesting graphical effects, such as replicating\r\n     * Game Objects without reparenting them all over the Scene.\r\n     * However, doing so will prevent children from receiving any kind of input event or have\r\n     * their physics bodies work by default, as they're no longer a single entity on the\r\n     * display list, but are being replicated where-ever this Container is.\r\n     *\r\n     * @method Phaser.GameObjects.Container#setExclusive\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} [value=true] - The exclusive state of this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container.\r\n     */\r\n    setExclusive: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.exclusive = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the bounds of this Container. It works by iterating all children of the Container,\r\n     * getting their respective bounds, and then working out a min-max rectangle from that.\r\n     * It does not factor in if the children render or not, all are included.\r\n     *\r\n     * Some children are unable to return their bounds, such as Graphics objects, in which case\r\n     * they are skipped.\r\n     *\r\n     * Depending on the quantity of children in this Container it could be a really expensive call,\r\n     * so cache it and only poll it as needed.\r\n     *\r\n     * The values are stored and returned in a Rectangle object.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getBounds\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} [output] - A Geom.Rectangle object to store the values in. If not provided a new Rectangle will be created.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} The values stored in the output object.\r\n     */\r\n    getBounds: function (output)\r\n    {\r\n        if (output === undefined) { output = new Rectangle(); }\r\n\r\n        output.setTo(this.x, this.y, 0, 0);\r\n\r\n        if (this.list.length > 0)\r\n        {\r\n            var children = this.list;\r\n            var tempRect = new Rectangle();\r\n\r\n            for (var i = 0; i < children.length; i++)\r\n            {\r\n                var entry = children[i];\r\n\r\n                if (entry.getBounds)\r\n                {\r\n                    entry.getBounds(tempRect);\r\n\r\n                    Union(tempRect, output, output);\r\n                }\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Internal add handler.\r\n     *\r\n     * @method Phaser.GameObjects.Container#addHandler\r\n     * @private\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that was just added to this Container.\r\n     */\r\n    addHandler: function (gameObject)\r\n    {\r\n        gameObject.once(Events.DESTROY, this.remove, this);\r\n\r\n        if (this.exclusive)\r\n        {\r\n            this._displayList.remove(gameObject);\r\n\r\n            if (gameObject.parentContainer)\r\n            {\r\n                gameObject.parentContainer.remove(gameObject);\r\n            }\r\n\r\n            gameObject.parentContainer = this;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal remove handler.\r\n     *\r\n     * @method Phaser.GameObjects.Container#removeHandler\r\n     * @private\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that was just removed from this Container.\r\n     */\r\n    removeHandler: function (gameObject)\r\n    {\r\n        gameObject.off(Events.DESTROY, this.remove);\r\n\r\n        if (this.exclusive)\r\n        {\r\n            gameObject.parentContainer = null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a Point-like object, such as a Vector2, Geom.Point or object with public x and y properties,\r\n     * and transforms it into the space of this Container, then returns it in the output object.\r\n     *\r\n     * @method Phaser.GameObjects.Container#pointToContainer\r\n     * @since 3.4.0\r\n     *\r\n     * @param {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} source - The Source Point to be transformed.\r\n     * @param {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} [output] - A destination object to store the transformed point in. If none given a Vector2 will be created and returned.\r\n     *\r\n     * @return {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} The transformed point.\r\n     */\r\n    pointToContainer: function (source, output)\r\n    {\r\n        if (output === undefined) { output = new Vector2(); }\r\n\r\n        if (this.parentContainer)\r\n        {\r\n            return this.parentContainer.pointToContainer(source, output);\r\n        }\r\n\r\n        var tempMatrix = this.tempTransformMatrix;\r\n\r\n        //  No need to loadIdentity because applyITRS overwrites every value anyway\r\n        tempMatrix.applyITRS(this.x, this.y, this.rotation, this.scaleX, this.scaleY);\r\n\r\n        tempMatrix.invert();\r\n\r\n        tempMatrix.transformPoint(source.x, source.y, output);\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Returns the world transform matrix as used for Bounds checks.\r\n     * \r\n     * The returned matrix is temporal and shouldn't be stored.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getBoundsTransformMatrix\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.GameObjects.Components.TransformMatrix} The world transform matrix.\r\n     */\r\n    getBoundsTransformMatrix: function ()\r\n    {\r\n        return this.getWorldTransformMatrix(this.tempTransformMatrix, this.localTransform);\r\n    },\r\n\r\n    /**\r\n     * Adds the given Game Object, or array of Game Objects, to this Container.\r\n     *\r\n     * Each Game Object must be unique within the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#add\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to add to the Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    add: function (child)\r\n    {\r\n        ArrayUtils.Add(this.list, child, this.maxSize, this.addHandler, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds the given Game Object, or array of Game Objects, to this Container at the specified position.\r\n     *\r\n     * Existing Game Objects in the Container are shifted up.\r\n     *\r\n     * Each Game Object must be unique within the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#addAt\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to add to the Container.\r\n     * @param {integer} [index=0] - The position to insert the Game Object/s at.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    addAt: function (child, index)\r\n    {\r\n        ArrayUtils.AddAt(this.list, child, index, this.maxSize, this.addHandler, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the Game Object at the given position in this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getAt\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} index - The position to get the Game Object from.\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject} The Game Object at the specified index, or `null` if none found.\r\n     */\r\n    getAt: function (index)\r\n    {\r\n        return this.list[index];\r\n    },\r\n\r\n    /**\r\n     * Returns the index of the given Game Object in this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getIndex\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to search for in this Container.\r\n     *\r\n     * @return {integer} The index of the Game Object in this Container, or -1 if not found.\r\n     */\r\n    getIndex: function (child)\r\n    {\r\n        return this.list.indexOf(child);\r\n    },\r\n\r\n    /**\r\n     * Sort the contents of this Container so the items are in order based on the given property.\r\n     * For example: `sort('alpha')` would sort the elements based on the value of their `alpha` property.\r\n     *\r\n     * @method Phaser.GameObjects.Container#sort\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} property - The property to lexically sort by.\r\n     * @param {function} [handler] - Provide your own custom handler function. Will receive 2 children which it should compare and return a boolean.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    sort: function (property, handler)\r\n    {\r\n        if (!property)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (handler === undefined)\r\n        {\r\n            handler = function (childA, childB)\r\n            {\r\n                return childA[property] - childB[property];\r\n            };\r\n        }\r\n\r\n        ArrayUtils.StableSort.inplace(this.list, handler);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Searches for the first instance of a child with its `name` property matching the given argument.\r\n     * Should more than one child have the same name only the first is returned.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getByName\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} name - The name to search for.\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject} The first child with a matching name, or `null` if none were found.\r\n     */\r\n    getByName: function (name)\r\n    {\r\n        return ArrayUtils.GetFirst(this.list, 'name', name);\r\n    },\r\n\r\n    /**\r\n     * Returns a random Game Object from this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getRandom\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} [startIndex=0] - An optional start index.\r\n     * @param {integer} [length] - An optional length, the total number of elements (from the startIndex) to choose from.\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject} A random child from the Container, or `null` if the Container is empty.\r\n     */\r\n    getRandom: function (startIndex, length)\r\n    {\r\n        return ArrayUtils.GetRandom(this.list, startIndex, length);\r\n    },\r\n\r\n    /**\r\n     * Gets the first Game Object in this Container.\r\n     *\r\n     * You can also specify a property and value to search for, in which case it will return the first\r\n     * Game Object in this Container with a matching property and / or value.\r\n     *\r\n     * For example: `getFirst('visible', true)` would return the first Game Object that had its `visible` property set.\r\n     *\r\n     * You can limit the search to the `startIndex` - `endIndex` range.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getFirst\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} property - The property to test on each Game Object in the Container.\r\n     * @param {*} value - The value to test the property against. Must pass a strict (`===`) comparison check.\r\n     * @param {integer} [startIndex=0] - An optional start index to search from.\r\n     * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject} The first matching Game Object, or `null` if none was found.\r\n     */\r\n    getFirst: function (property, value, startIndex, endIndex)\r\n    {\r\n        return ArrayUtils.GetFirst(this.list, property, value, startIndex, endIndex);\r\n    },\r\n\r\n    /**\r\n     * Returns all Game Objects in this Container.\r\n     *\r\n     * You can optionally specify a matching criteria using the `property` and `value` arguments.\r\n     *\r\n     * For example: `getAll('body')` would return only Game Objects that have a body property.\r\n     *\r\n     * You can also specify a value to compare the property to:\r\n     *\r\n     * `getAll('visible', true)` would return only Game Objects that have their visible property set to `true`.\r\n     *\r\n     * Optionally you can specify a start and end index. For example if this Container had 100 Game Objects,\r\n     * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n     * the first 50 Game Objects.\r\n     *\r\n     * @method Phaser.GameObjects.Container#getAll\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} [property] - The property to test on each Game Object in the Container.\r\n     * @param {any} [value] - If property is set then the `property` must strictly equal this value to be included in the results.\r\n     * @param {integer} [startIndex=0] - An optional start index to search from.\r\n     * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} An array of matching Game Objects from this Container.\r\n     */\r\n    getAll: function (property, value, startIndex, endIndex)\r\n    {\r\n        return ArrayUtils.GetAll(this.list, property, value, startIndex, endIndex);\r\n    },\r\n\r\n    /**\r\n     * Returns the total number of Game Objects in this Container that have a property\r\n     * matching the given value.\r\n     *\r\n     * For example: `count('visible', true)` would count all the elements that have their visible property set.\r\n     *\r\n     * You can optionally limit the operation to the `startIndex` - `endIndex` range.\r\n     *\r\n     * @method Phaser.GameObjects.Container#count\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} property - The property to check.\r\n     * @param {any} value - The value to check.\r\n     * @param {integer} [startIndex=0] - An optional start index to search from.\r\n     * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n     *\r\n     * @return {integer} The total number of Game Objects in this Container with a property matching the given value.\r\n     */\r\n    count: function (property, value, startIndex, endIndex)\r\n    {\r\n        return ArrayUtils.CountAllMatching(this.list, property, value, startIndex, endIndex);\r\n    },\r\n\r\n    /**\r\n     * Swaps the position of two Game Objects in this Container.\r\n     * Both Game Objects must belong to this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#swap\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child1 - The first Game Object to swap.\r\n     * @param {Phaser.GameObjects.GameObject} child2 - The second Game Object to swap.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    swap: function (child1, child2)\r\n    {\r\n        ArrayUtils.Swap(this.list, child1, child2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Game Object to a new position within this Container.\r\n     *\r\n     * The Game Object must already be a child of this Container.\r\n     *\r\n     * The Game Object is removed from its old position and inserted into the new one.\r\n     * Therefore the Container size does not change. Other children will change position accordingly.\r\n     *\r\n     * @method Phaser.GameObjects.Container#moveTo\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to move.\r\n     * @param {integer} index - The new position of the Game Object in this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    moveTo: function (child, index)\r\n    {\r\n        ArrayUtils.MoveTo(this.list, child, index);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the given Game Object, or array of Game Objects, from this Container.\r\n     *\r\n     * The Game Objects must already be children of this Container.\r\n     *\r\n     * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#remove\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to be removed from the Container.\r\n     * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each child successfully removed from this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    remove: function (child, destroyChild)\r\n    {\r\n        var removed = ArrayUtils.Remove(this.list, child, this.removeHandler, this);\r\n\r\n        if (destroyChild && removed)\r\n        {\r\n            if (!Array.isArray(removed))\r\n            {\r\n                removed = [ removed ];\r\n            }\r\n\r\n            for (var i = 0; i < removed.length; i++)\r\n            {\r\n                removed[i].destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the Game Object at the given position in this Container.\r\n     *\r\n     * You can also optionally call `destroy` on the Game Object, if one is found.\r\n     *\r\n     * @method Phaser.GameObjects.Container#removeAt\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} index - The index of the Game Object to be removed.\r\n     * @param {boolean} [destroyChild=false] - Optionally call `destroy` on the Game Object if successfully removed from this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    removeAt: function (index, destroyChild)\r\n    {\r\n        var removed = ArrayUtils.RemoveAt(this.list, index, this.removeHandler, this);\r\n\r\n        if (destroyChild && removed)\r\n        {\r\n            removed.destroy();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the Game Objects between the given positions in this Container.\r\n     *\r\n     * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#removeBetween\r\n     * @since 3.4.0\r\n     *\r\n     * @param {integer} [startIndex=0] - An optional start index to search from.\r\n     * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n     * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each Game Object successfully removed from this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    removeBetween: function (startIndex, endIndex, destroyChild)\r\n    {\r\n        var removed = ArrayUtils.RemoveBetween(this.list, startIndex, endIndex, this.removeHandler, this);\r\n\r\n        if (destroyChild)\r\n        {\r\n            for (var i = 0; i < removed.length; i++)\r\n            {\r\n                removed[i].destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes all Game Objects from this Container.\r\n     *\r\n     * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#removeAll\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each Game Object successfully removed from this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    removeAll: function (destroyChild)\r\n    {\r\n        var removed = ArrayUtils.RemoveBetween(this.list, 0, this.list.length, this.removeHandler, this);\r\n\r\n        if (destroyChild)\r\n        {\r\n            for (var i = 0; i < removed.length; i++)\r\n            {\r\n                removed[i].destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Brings the given Game Object to the top of this Container.\r\n     * This will cause it to render on-top of any other objects in the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#bringToTop\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to bring to the top of the Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    bringToTop: function (child)\r\n    {\r\n        ArrayUtils.BringToTop(this.list, child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sends the given Game Object to the bottom of this Container.\r\n     * This will cause it to render below any other objects in the Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#sendToBack\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to send to the bottom of the Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    sendToBack: function (child)\r\n    {\r\n        ArrayUtils.SendToBack(this.list, child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the given Game Object up one place in this Container, unless it's already at the top.\r\n     *\r\n     * @method Phaser.GameObjects.Container#moveUp\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to be moved in the Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    moveUp: function (child)\r\n    {\r\n        ArrayUtils.MoveUp(this.list, child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves the given Game Object down one place in this Container, unless it's already at the bottom.\r\n     *\r\n     * @method Phaser.GameObjects.Container#moveDown\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to be moved in the Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    moveDown: function (child)\r\n    {\r\n        ArrayUtils.MoveDown(this.list, child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Reverses the order of all Game Objects in this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#reverse\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    reverse: function ()\r\n    {\r\n        this.list.reverse();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuffles the all Game Objects in this Container using the Fisher-Yates implementation.\r\n     *\r\n     * @method Phaser.GameObjects.Container#shuffle\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    shuffle: function ()\r\n    {\r\n        ArrayUtils.Shuffle(this.list);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Replaces a Game Object in this Container with the new Game Object.\r\n     * The new Game Object cannot already be a child of this Container.\r\n     *\r\n     * @method Phaser.GameObjects.Container#replace\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} oldChild - The Game Object in this Container that will be replaced.\r\n     * @param {Phaser.GameObjects.GameObject} newChild - The Game Object to be added to this Container.\r\n     * @param {boolean} [destroyChild=false] - Optionally call `destroy` on the Game Object if successfully removed from this Container.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    replace: function (oldChild, newChild, destroyChild)\r\n    {\r\n        var moved = ArrayUtils.Replace(this.list, oldChild, newChild);\r\n\r\n        if (moved)\r\n        {\r\n            this.addHandler(newChild);\r\n            this.removeHandler(oldChild);\r\n\r\n            if (destroyChild)\r\n            {\r\n                oldChild.destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns `true` if the given Game Object is a direct child of this Container.\r\n     *\r\n     * This check does not scan nested Containers.\r\n     *\r\n     * @method Phaser.GameObjects.Container#exists\r\n     * @since 3.4.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to check for within this Container.\r\n     *\r\n     * @return {boolean} True if the Game Object is an immediate child of this Container, otherwise false.\r\n     */\r\n    exists: function (child)\r\n    {\r\n        return (this.list.indexOf(child) > -1);\r\n    },\r\n\r\n    /**\r\n     * Sets the property to the given value on all Game Objects in this Container.\r\n     *\r\n     * Optionally you can specify a start and end index. For example if this Container had 100 Game Objects,\r\n     * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n     * the first 50 Game Objects.\r\n     *\r\n     * @method Phaser.GameObjects.Container#setAll\r\n     * @since 3.4.0\r\n     *\r\n     * @param {string} property - The property that must exist on the Game Object.\r\n     * @param {any} value - The value to get the property to.\r\n     * @param {integer} [startIndex=0] - An optional start index to search from.\r\n     * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    setAll: function (property, value, startIndex, endIndex)\r\n    {\r\n        ArrayUtils.SetAll(this.list, property, value, startIndex, endIndex);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * @callback EachContainerCallback\r\n     * @generic I - [item]\r\n     *\r\n     * @param {*} item - The child Game Object of the Container.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     */\r\n\r\n    /**\r\n     * Passes all Game Objects in this Container to the given callback.\r\n     *\r\n     * A copy of the Container is made before passing each entry to your callback.\r\n     * This protects against the callback itself modifying the Container.\r\n     *\r\n     * If you know for sure that the callback will not change the size of this Container\r\n     * then you can use the more performant `Container.iterate` method instead.\r\n     *\r\n     * @method Phaser.GameObjects.Container#each\r\n     * @since 3.4.0\r\n     *\r\n     * @param {function} callback - The function to call.\r\n     * @param {object} [context] - Value to use as `this` when executing callback.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    each: function (callback, context)\r\n    {\r\n        var args = [ null ];\r\n        var i;\r\n        var temp = this.list.slice();\r\n        var len = temp.length;\r\n\r\n        for (i = 2; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            args[0] = temp[i];\r\n\r\n            callback.apply(context, args);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes all Game Objects in this Container to the given callback.\r\n     *\r\n     * Only use this method when you absolutely know that the Container will not be modified during\r\n     * the iteration, i.e. by removing or adding to its contents.\r\n     *\r\n     * @method Phaser.GameObjects.Container#iterate\r\n     * @since 3.4.0\r\n     *\r\n     * @param {function} callback - The function to call.\r\n     * @param {object} [context] - Value to use as `this` when executing callback.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     *\r\n     * @return {Phaser.GameObjects.Container} This Container instance.\r\n     */\r\n    iterate: function (callback, context)\r\n    {\r\n        var args = [ null ];\r\n        var i;\r\n\r\n        for (i = 2; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (i = 0; i < this.list.length; i++)\r\n        {\r\n            args[0] = this.list[i];\r\n\r\n            callback.apply(context, args);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scroll factor of this Container and optionally all of its children.\r\n     *\r\n     * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n     *\r\n     * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n     * It does not change the Game Objects actual position values.\r\n     *\r\n     * A value of 1 means it will move exactly in sync with a camera.\r\n     * A value of 0 means it will not move at all, even if the camera moves.\r\n     * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n     * \r\n     * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n     * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n     * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n     * them from physics bodies if not accounted for in your code.\r\n     *\r\n     * @method Phaser.GameObjects.Container#setScrollFactor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scroll factor of this Game Object.\r\n     * @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.\r\n     * @param {boolean} [updateChildren=false] - Apply this scrollFactor to all Container children as well?\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setScrollFactor: function (x, y, updateChildren)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n        if (updateChildren === undefined) { updateChildren = false; }\r\n\r\n        this.scrollFactorX = x;\r\n        this.scrollFactorY = y;\r\n\r\n        if (updateChildren)\r\n        {\r\n            ArrayUtils.SetAll(this.list, 'scrollFactorX', x);\r\n            ArrayUtils.SetAll(this.list, 'scrollFactorY', y);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The number of Game Objects inside this Container.\r\n     *\r\n     * @name Phaser.GameObjects.Container#length\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    length: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.list.length;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the first Game Object within the Container, or `null` if it is empty.\r\n     *\r\n     * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n     *\r\n     * @name Phaser.GameObjects.Container#first\r\n     * @type {?Phaser.GameObjects.GameObject}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    first: {\r\n\r\n        get: function ()\r\n        {\r\n            this.position = 0;\r\n\r\n            if (this.list.length > 0)\r\n            {\r\n                return this.list[0];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the last Game Object within the Container, or `null` if it is empty.\r\n     *\r\n     * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n     *\r\n     * @name Phaser.GameObjects.Container#last\r\n     * @type {?Phaser.GameObjects.GameObject}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    last: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.list.length > 0)\r\n            {\r\n                this.position = this.list.length - 1;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the next Game Object within the Container, or `null` if it is empty.\r\n     *\r\n     * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n     *\r\n     * @name Phaser.GameObjects.Container#next\r\n     * @type {?Phaser.GameObjects.GameObject}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    next: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.position < this.list.length)\r\n            {\r\n                this.position++;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the previous Game Object within the Container, or `null` if it is empty.\r\n     *\r\n     * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n     *\r\n     * @name Phaser.GameObjects.Container#previous\r\n     * @type {?Phaser.GameObjects.GameObject}\r\n     * @readonly\r\n     * @since 3.4.0\r\n     */\r\n    previous: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.position > 0)\r\n            {\r\n                this.position--;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Container#preDestroy\r\n     * @protected\r\n     * @since 3.9.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.removeAll(!!this.exclusive);\r\n\r\n        this.localTransform.destroy();\r\n        this.tempTransformMatrix.destroy();\r\n\r\n        this.list = [];\r\n        this._displayList = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Container;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyLmpzPzE2NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyx3RUFBVztBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsYUFBYSxtQkFBTyxDQUFDLDZGQUFtQjtBQUN4QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGdDQUFnQztBQUMzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDBCQUEwQjs7QUFFN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLHFCQUFxQjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RDtBQUNBLGdCQUFnQiwrQ0FBK0M7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4REFBOEQ7QUFDN0UsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsb0JBQW9CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxLQUFLO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQywyQ0FBMkMsd0JBQXdCOztBQUVuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29udGFpbmVyL0NvbnRhaW5lci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFycmF5VXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheScpO1xyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFJlbmRlciA9IHJlcXVpcmUoJy4vQ29udGFpbmVyUmVuZGVyJyk7XHJcbnZhciBVbmlvbiA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1VuaW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENvbnRhaW5lciBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBDb250YWluZXIsIGFzIHRoZSBuYW1lIGltcGxpZXMsIGNhbiAnY29udGFpbicgb3RoZXIgdHlwZXMgb2YgR2FtZSBPYmplY3QuXHJcbiAqIFdoZW4gYSBHYW1lIE9iamVjdCBpcyBhZGRlZCB0byBhIENvbnRhaW5lciwgdGhlIENvbnRhaW5lciBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVuZGVyaW5nIG9mIGl0LlxyXG4gKiBCeSBkZWZhdWx0IGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBEaXNwbGF5IExpc3QgYW5kIGluc3RlYWQgYWRkZWQgdG8gdGhlIENvbnRhaW5lcnMgb3duIGludGVybmFsIGxpc3QuXHJcbiAqXHJcbiAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgYXV0b21hdGljYWxseSBiZWNvbWVzIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQ29udGFpbmVyLlxyXG4gKlxyXG4gKiBXaGVuIHRoZSBDb250YWluZXIgaXMgcmVuZGVyZWQsIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIHJlbmRlcmVkIGFzIHdlbGwsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0XHJcbiAqIHdpdGhpbiB0aGUgQ29udGFpbmVyLiBDb250YWluZXIgY2hpbGRyZW4gY2FuIGJlIHJlcG9zaXRpb25lZCB1c2luZyBtZXRob2RzIHN1Y2ggYXMgYE1vdmVVcGAsIGBNb3ZlRG93bmAgYW5kIGBTZW5kVG9CYWNrYC5cclxuICpcclxuICogSWYgeW91IG1vZGlmeSBhIHRyYW5zZm9ybSBwcm9wZXJ0eSBvZiB0aGUgQ29udGFpbmVyLCBzdWNoIGFzIGBDb250YWluZXIueGAgb3IgYENvbnRhaW5lci5yb3RhdGlvbmAgdGhlbiBpdCB3aWxsXHJcbiAqIGF1dG9tYXRpY2FsbHkgaW5mbHVlbmNlIGFsbCBjaGlsZHJlbiBhcyB3ZWxsLlxyXG4gKlxyXG4gKiBDb250YWluZXJzIGNhbiBpbmNsdWRlIG90aGVyIENvbnRhaW5lcnMgZm9yIGRlZXBseSBuZXN0ZWQgdHJhbnNmb3Jtcy5cclxuICpcclxuICogQ29udGFpbmVycyBjYW4gaGF2ZSBtYXNrcyBzZXQgb24gdGhlbSBhbmQgY2FuIGJlIHVzZWQgYXMgYSBtYXNrIHRvby4gSG93ZXZlciwgQ29udGFpbmVyIGNoaWxkcmVuIGNhbm5vdCBiZSBtYXNrZWQuXHJcbiAqIFRoZSBtYXNrcyBkbyBub3QgJ3N0YWNrIHVwJy4gT25seSBhIENvbnRhaW5lciBvbiB0aGUgcm9vdCBvZiB0aGUgZGlzcGxheSBsaXN0IHdpbGwgdXNlIGl0cyBtYXNrLlxyXG4gKlxyXG4gKiBDb250YWluZXJzIGNhbiBiZSBlbmFibGVkIGZvciBpbnB1dC4gQmVjYXVzZSB0aGV5IGRvIG5vdCBoYXZlIGEgdGV4dHVyZSB5b3UgbmVlZCB0byBwcm92aWRlIGEgc2hhcGUgZm9yIHRoZW1cclxuICogdG8gdXNlIGFzIHRoZWlyIGhpdCBhcmVhLiBDb250YWluZXIgY2hpbGRyZW4gY2FuIGFsc28gYmUgZW5hYmxlZCBmb3IgaW5wdXQsIGluZGVwZW5kZW50IG9mIHRoZSBDb250YWluZXIuXHJcbiAqXHJcbiAqIENvbnRhaW5lcnMgY2FuIGJlIGdpdmVuIGEgcGh5c2ljcyBib2R5IGZvciBlaXRoZXIgQXJjYWRlIFBoeXNpY3MsIEltcGFjdCBQaHlzaWNzIG9yIE1hdHRlciBQaHlzaWNzLiBIb3dldmVyLFxyXG4gKiBpZiBDb250YWluZXIgX2NoaWxkcmVuXyBhcmUgZW5hYmxlZCBmb3IgcGh5c2ljcyB5b3UgbWF5IGdldCB1bmV4cGVjdGVkIHJlc3VsdHMsIHN1Y2ggYXMgb2Zmc2V0IGJvZGllcyxcclxuICogaWYgdGhlIENvbnRhaW5lciBpdHNlbGYsIG9yIGFueSBvZiBpdHMgYW5jZXN0b3JzLCBpcyBwb3NpdGlvbmVkIGFueXdoZXJlIG90aGVyIHRoYW4gYXQgMCB4IDAuIENvbnRhaW5lciBjaGlsZHJlblxyXG4gKiB3aXRoIHBoeXNpY3MgZG8gbm90IGZhY3RvciBpbiB0aGUgQ29udGFpbmVyIGR1ZSB0byB0aGUgZXhjZXNzaXZlIGV4dHJhIGNhbGN1bGF0aW9ucyBuZWVkZWQuIFBsZWFzZSBzdHJ1Y3R1cmVcclxuICogeW91ciBnYW1lIHRvIHdvcmsgYXJvdW5kIHRoaXMuXHJcbiAqXHJcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB1c2luZyBDb250YWluZXJzLiBUaGV5IGFkZCBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb3ZlcmhlYWQgaW50b1xyXG4gKiBldmVyeSBvbmUgb2YgdGhlaXIgY2hpbGRyZW4uIFRoZSBkZWVwZXIgeW91IG5lc3QgdGhlbSwgdGhlIG1vcmUgdGhlIGNvc3QgZXNjYWxhdGVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZVxyXG4gKiBmb3IgaW5wdXQgZXZlbnRzLiBZb3UgYWxzbyBsb29zZSB0aGUgYWJpbGl0eSB0byBzZXQgdGhlIGRpc3BsYXkgZGVwdGggb2YgQ29udGFpbmVyIGNoaWxkcmVuIGluIHRoZSBzYW1lXHJcbiAqIGZsZXhpYmxlIG1hbm5lciBhcyB0aG9zZSBub3Qgd2l0aGluIHRoZW0uIEluIHNob3J0LCBkb24ndCB1c2UgdGhlbSBmb3IgdGhlIHNha2Ugb2YgaXQuIFlvdSBwYXkgYSBzbWFsbCBjb3N0XHJcbiAqIGV2ZXJ5IHRpbWUgeW91IGNyZWF0ZSBvbmUsIHRyeSB0byBzdHJ1Y3R1cmUgeW91ciBnYW1lIGFyb3VuZCBhdm9pZGluZyB0aGF0IHdoZXJlIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ29udGFpbmVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBbY2hpbGRyZW5dIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGFkZCB0byB0aGlzIENvbnRhaW5lci5cclxuICovXHJcbnZhciBDb250YWluZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbXB1dGVkU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGUsXHJcbiAgICAgICAgUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ29udGFpbmVyIChzY2VuZSwgeCwgeSwgY2hpbGRyZW4pXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnQ29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IGhvbGRpbmcgdGhlIGNoaWxkcmVuIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhpcyBDb250YWluZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbj9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGlzIGB0cnVlYCB3aGljaCBtZWFucyBhIGNoaWxkIGFkZGVkIHRvIHRoaXMgQ29udGFpbmVyIGNhbm5vdFxyXG4gICAgICAgICAqIGJlbG9uZyBpbiBhbm90aGVyIENvbnRhaW5lciwgd2hpY2ggaW5jbHVkZXMgdGhlIFNjZW5lIGRpc3BsYXkgbGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSBkaXNhYmxlIHRoaXMgdGhlbiB0aGlzIENvbnRhaW5lciB3aWxsIG5vIGxvbmdlciBleGNsdXNpdmVseSBtYW5hZ2UgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYWxsIGtpbmRzIG9mIGludGVyZXN0aW5nIGdyYXBoaWNhbCBlZmZlY3RzLCBzdWNoIGFzIHJlcGxpY2F0aW5nXHJcbiAgICAgICAgICogR2FtZSBPYmplY3RzIHdpdGhvdXQgcmVwYXJlbnRpbmcgdGhlbSBhbGwgb3ZlciB0aGUgU2NlbmUuXHJcbiAgICAgICAgICogSG93ZXZlciwgZG9pbmcgc28gd2lsbCBwcmV2ZW50IGNoaWxkcmVuIGZyb20gcmVjZWl2aW5nIGFueSBraW5kIG9mIGlucHV0IGV2ZW50IG9yIGhhdmVcclxuICAgICAgICAgKiB0aGVpciBwaHlzaWNzIGJvZGllcyB3b3JrIGJ5IGRlZmF1bHQsIGFzIHRoZXkncmUgbm8gbG9uZ2VyIGEgc2luZ2xlIGVudGl0eSBvbiB0aGVcclxuICAgICAgICAgKiBkaXNwbGF5IGxpc3QsIGJ1dCBhcmUgYmVpbmcgcmVwbGljYXRlZCB3aGVyZS1ldmVyIHRoaXMgQ29udGFpbmVyIGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNleGNsdXNpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5leGNsdXNpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXJzIGNhbiBoYXZlIGFuIG9wdGlvbmFsIG1heGltdW0gc2l6ZS4gSWYgc2V0IHRvIGFueXRoaW5nIGFib3ZlIDAgaXRcclxuICAgICAgICAgKiB3aWxsIGNvbnN0cmljdCB0aGUgYWRkaXRpb24gb2YgbmV3IEdhbWUgT2JqZWN0cyBpbnRvIHRoZSBDb250YWluZXIsIGNhcHBpbmcgb2ZmXHJcbiAgICAgICAgICogdGhlIG1heGltdW0gbGltaXQgdGhlIENvbnRhaW5lciBjYW4gZ3JvdyBpbiBzaXplIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNtYXhTaXplXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNpemUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnNvciBwb3NpdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgVHJhbnNmb3JtIE1hdHJpeCB1c2VkIGZvciBsb2NhbCBzcGFjZSBjb252ZXJzaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBDb21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCB1c2VkIHRvIGF2b2lkIG9iamVjdCBjcmVhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjdGVtcFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRlbXBUcmFuc2Zvcm1NYXRyaXggPSBuZXcgQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIERpc3BsYXkgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjX2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlMaXN0ID0gc2NlbmUuc3lzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkga2V5IHRvIHNvcnQgYnkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI19zb3J0S2V5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3NvcnRLZXkgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgRXZlbnQgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjX3N5c0V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N5c0V2ZW50cyA9IHNjZW5lLnN5cy5ldmVudHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgc2Nyb2xsIGZhY3RvciBjb250cm9scyB0aGUgaW5mbHVlbmNlIG9mIHRoZSBtb3ZlbWVudCBvZiBhIENhbWVyYSB1cG9uIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogV2hlbiBhIGNhbWVyYSBzY3JvbGxzIGl0IHdpbGwgY2hhbmdlIHRoZSBsb2NhdGlvbiBhdCB3aGljaCB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCBvbi1zY3JlZW4uXHJcbiAgICAgICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBDb250YWluZXJzIGFjdHVhbCBwb3NpdGlvbiB2YWx1ZXMuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRm9yIGEgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgQ29udGFpbmVyIGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlbi5cclxuICAgICAgICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhlIHNjcm9sbEZhY3RvciBvZiB0aGUgY2hpbGRyZW4gYXMgd2VsbCwgdXNlIHRoZSBgc2V0U2Nyb2xsRmFjdG9yYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMCBtZWFucyBpdCB3aWxsIG5vdCBtb3ZlIGF0IGFsbCwgZXZlbiBpZiB0aGUgY2FtZXJhIG1vdmVzLlxyXG4gICAgICAgICAqIE90aGVyIHZhbHVlcyBjb250cm9sIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNhbWVyYSBtb3ZlbWVudCBpcyBtYXBwZWQgdG8gdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgc2Nyb2xsIGZhY3RvciB2YWx1ZXMgb3RoZXIgdGhhbiAxIGFyZSBub3QgdGFrZW4gaW4gdG8gY29uc2lkZXJhdGlvbiB3aGVuXHJcbiAgICAgICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICAgICAqIHRoZSBzY3JvbGwgZmFjdG9yIGlzIGEgdmlzdWFsIGFkanVzdG1lbnQgdG8gd2hlcmUgdGhlIHRleHR1cmVzIGFyZSByZW5kZXJlZCwgd2hpY2ggY2FuIG9mZnNldFxyXG4gICAgICAgICAqIHRoZW0gZnJvbSBwaHlzaWNzIGJvZGllcyBpZiBub3QgYWNjb3VudGVkIGZvciBpbiB5b3VyIGNvZGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3Njcm9sbEZhY3RvclhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgQ29udGFpbmVyIGlzIHJlbmRlcmVkIG9uLXNjcmVlbi5cclxuICAgICAgICAgKiBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIENvbnRhaW5lcnMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBGb3IgYSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIG9ubHkgdXBkYXRlIHRoZSBDb250YWluZXIgaXRzZWxmLCBub3QgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgc2Nyb2xsRmFjdG9yIG9mIHRoZSBjaGlsZHJlbiBhcyB3ZWxsLCB1c2UgdGhlIGBzZXRTY3JvbGxGYWN0b3JgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyBpdCB3aWxsIG1vdmUgZXhhY3RseSBpbiBzeW5jIHdpdGggYSBjYW1lcmEuXHJcbiAgICAgICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgICAgICogT3RoZXIgdmFsdWVzIGNvbnRyb2wgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUgY2FtZXJhIG1vdmVtZW50IGlzIG1hcHBlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBzY3JvbGwgZmFjdG9yIHZhbHVlcyBvdGhlciB0aGFuIDEgYXJlIG5vdCB0YWtlbiBpbiB0byBjb25zaWRlcmF0aW9uIHdoZW5cclxuICAgICAgICAgKiBjYWxjdWxhdGluZyBwaHlzaWNzIGNvbGxpc2lvbnMuIEJvZGllcyBhbHdheXMgY29sbGlkZSBiYXNlZCBvbiB0aGVpciB3b3JsZCBwb3NpdGlvbiwgYnV0IGNoYW5naW5nXHJcbiAgICAgICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgICAgICogdGhlbSBmcm9tIHBoeXNpY3MgYm9kaWVzIGlmIG5vdCBhY2NvdW50ZWQgZm9yIGluIHlvdXIgY29kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2Nyb2xsRmFjdG9yWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJBbHBoYSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJsZW5kTW9kZShCbGVuZE1vZGVzLlNLSVBfQ0hFQ0spO1xyXG5cclxuICAgICAgICBpZiAoY2hpbGRyZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZChjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHZhbHVlIHRvIGFsbG93IENvbnRhaW5lcnMgdG8gYmUgdXNlZCBmb3IgaW5wdXQgYW5kIHBoeXNpY3MuXHJcbiAgICAgKiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUuIEl0IGhhcyBubyBlZmZlY3Qgb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgb3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdmFsdWUgdG8gYWxsb3cgQ29udGFpbmVycyB0byBiZSB1c2VkIGZvciBpbnB1dCBhbmQgcGh5c2ljcy5cclxuICAgICAqIERvIG5vdCBjaGFuZ2UgdGhpcyB2YWx1ZS4gSXQgaGFzIG5vIGVmZmVjdCBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBvcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSB0byBhbGxvdyBDb250YWluZXJzIHRvIGJlIHVzZWQgZm9yIGlucHV0IGFuZCBwaHlzaWNzLlxyXG4gICAgICogRG8gbm90IGNoYW5nZSB0aGlzIHZhbHVlLiBJdCBoYXMgbm8gZWZmZWN0IG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZGlzcGxheU9yaWdpblhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5T3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHZhbHVlIHRvIGFsbG93IENvbnRhaW5lcnMgdG8gYmUgdXNlZCBmb3IgaW5wdXQgYW5kIHBoeXNpY3MuXHJcbiAgICAgKiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUuIEl0IGhhcyBubyBlZmZlY3Qgb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNkaXNwbGF5T3JpZ2luWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlPcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodCAqIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvZXMgdGhpcyBDb250YWluZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbj9cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAgd2hpY2ggbWVhbnMgYSBjaGlsZCBhZGRlZCB0byB0aGlzIENvbnRhaW5lciBjYW5ub3RcclxuICAgICAqIGJlbG9uZyBpbiBhbm90aGVyIENvbnRhaW5lciwgd2hpY2ggaW5jbHVkZXMgdGhlIFNjZW5lIGRpc3BsYXkgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZGlzYWJsZSB0aGlzIHRoZW4gdGhpcyBDb250YWluZXIgd2lsbCBubyBsb25nZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbi5cclxuICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYWxsIGtpbmRzIG9mIGludGVyZXN0aW5nIGdyYXBoaWNhbCBlZmZlY3RzLCBzdWNoIGFzIHJlcGxpY2F0aW5nXHJcbiAgICAgKiBHYW1lIE9iamVjdHMgd2l0aG91dCByZXBhcmVudGluZyB0aGVtIGFsbCBvdmVyIHRoZSBTY2VuZS5cclxuICAgICAqIEhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgcHJldmVudCBjaGlsZHJlbiBmcm9tIHJlY2VpdmluZyBhbnkga2luZCBvZiBpbnB1dCBldmVudCBvciBoYXZlXHJcbiAgICAgKiB0aGVpciBwaHlzaWNzIGJvZGllcyB3b3JrIGJ5IGRlZmF1bHQsIGFzIHRoZXkncmUgbm8gbG9uZ2VyIGEgc2luZ2xlIGVudGl0eSBvbiB0aGVcclxuICAgICAqIGRpc3BsYXkgbGlzdCwgYnV0IGFyZSBiZWluZyByZXBsaWNhdGVkIHdoZXJlLWV2ZXIgdGhpcyBDb250YWluZXIgaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3NldEV4Y2x1c2l2ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgZXhjbHVzaXZlIHN0YXRlIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBzZXRFeGNsdXNpdmU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5leGNsdXNpdmUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYm91bmRzIG9mIHRoaXMgQ29udGFpbmVyLiBJdCB3b3JrcyBieSBpdGVyYXRpbmcgYWxsIGNoaWxkcmVuIG9mIHRoZSBDb250YWluZXIsXHJcbiAgICAgKiBnZXR0aW5nIHRoZWlyIHJlc3BlY3RpdmUgYm91bmRzLCBhbmQgdGhlbiB3b3JraW5nIG91dCBhIG1pbi1tYXggcmVjdGFuZ2xlIGZyb20gdGhhdC5cclxuICAgICAqIEl0IGRvZXMgbm90IGZhY3RvciBpbiBpZiB0aGUgY2hpbGRyZW4gcmVuZGVyIG9yIG5vdCwgYWxsIGFyZSBpbmNsdWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGNoaWxkcmVuIGFyZSB1bmFibGUgdG8gcmV0dXJuIHRoZWlyIGJvdW5kcywgc3VjaCBhcyBHcmFwaGljcyBvYmplY3RzLCBpbiB3aGljaCBjYXNlXHJcbiAgICAgKiB0aGV5IGFyZSBza2lwcGVkLlxyXG4gICAgICpcclxuICAgICAqIERlcGVuZGluZyBvbiB0aGUgcXVhbnRpdHkgb2YgY2hpbGRyZW4gaW4gdGhpcyBDb250YWluZXIgaXQgY291bGQgYmUgYSByZWFsbHkgZXhwZW5zaXZlIGNhbGwsXHJcbiAgICAgKiBzbyBjYWNoZSBpdCBhbmQgb25seSBwb2xsIGl0IGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgYW5kIHJldHVybmVkIGluIGEgUmVjdGFuZ2xlIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dHB1dF0gLSBBIEdlb20uUmVjdGFuZ2xlIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQuc2V0VG8odGhpcy54LCB0aGlzLnksIDAsIDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmxpc3Q7XHJcbiAgICAgICAgICAgIHZhciB0ZW1wUmVjdCA9IG5ldyBSZWN0YW5nbGUoKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5nZXRCb3VuZHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2V0Qm91bmRzKHRlbXBSZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgVW5pb24odGVtcFJlY3QsIG91dHB1dCwgb3V0cHV0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBhZGQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjYWRkSGFuZGxlclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMganVzdCBhZGRlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgYWRkSGFuZGxlcjogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5vbmNlKEV2ZW50cy5ERVNUUk9ZLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4Y2x1c2l2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlMaXN0LnJlbW92ZShnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXIucmVtb3ZlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lciA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHJlbW92ZSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW1vdmVIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBqdXN0IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5vZmYoRXZlbnRzLkRFU1RST1ksIHRoaXMucmVtb3ZlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIFBvaW50LWxpa2Ugb2JqZWN0LCBzdWNoIGFzIGEgVmVjdG9yMiwgR2VvbS5Qb2ludCBvciBvYmplY3Qgd2l0aCBwdWJsaWMgeCBhbmQgeSBwcm9wZXJ0aWVzLFxyXG4gICAgICogYW5kIHRyYW5zZm9ybXMgaXQgaW50byB0aGUgc3BhY2Ugb2YgdGhpcyBDb250YWluZXIsIHRoZW4gcmV0dXJucyBpdCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcG9pbnRUb0NvbnRhaW5lclxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBzb3VyY2UgLSBUaGUgU291cmNlIFBvaW50IHRvIGJlIHRyYW5zZm9ybWVkLlxyXG4gICAgICogQHBhcmFtIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBbb3V0cHV0XSAtIEEgZGVzdGluYXRpb24gb2JqZWN0IHRvIHN0b3JlIHRoZSB0cmFuc2Zvcm1lZCBwb2ludCBpbi4gSWYgbm9uZSBnaXZlbiBhIFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBUaGUgdHJhbnNmb3JtZWQgcG9pbnQuXHJcbiAgICAgKi9cclxuICAgIHBvaW50VG9Db250YWluZXI6IGZ1bmN0aW9uIChzb3VyY2UsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJlbnRDb250YWluZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXIucG9pbnRUb0NvbnRhaW5lcihzb3VyY2UsIG91dHB1dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcE1hdHJpeCA9IHRoaXMudGVtcFRyYW5zZm9ybU1hdHJpeDtcclxuXHJcbiAgICAgICAgLy8gIE5vIG5lZWQgdG8gbG9hZElkZW50aXR5IGJlY2F1c2UgYXBwbHlJVFJTIG92ZXJ3cml0ZXMgZXZlcnkgdmFsdWUgYW55d2F5XHJcbiAgICAgICAgdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMucm90YXRpb24sIHRoaXMuc2NhbGVYLCB0aGlzLnNjYWxlWSk7XHJcblxyXG4gICAgICAgIHRlbXBNYXRyaXguaW52ZXJ0KCk7XHJcblxyXG4gICAgICAgIHRlbXBNYXRyaXgudHJhbnNmb3JtUG9pbnQoc291cmNlLngsIHNvdXJjZS55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggYXMgdXNlZCBmb3IgQm91bmRzIGNoZWNrcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHJldHVybmVkIG1hdHJpeCBpcyB0ZW1wb3JhbCBhbmQgc2hvdWxkbid0IGJlIHN0b3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0Qm91bmRzVHJhbnNmb3JtTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHNUcmFuc2Zvcm1NYXRyaXg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ybGRUcmFuc2Zvcm1NYXRyaXgodGhpcy50ZW1wVHJhbnNmb3JtTWF0cml4LCB0aGlzLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBFYWNoIEdhbWUgT2JqZWN0IG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gYWRkIHRvIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuQWRkKHRoaXMubGlzdCwgY2hpbGQsIHRoaXMubWF4U2l6ZSwgdGhpcy5hZGRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gdGhpcyBDb250YWluZXIgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBFeGlzdGluZyBHYW1lIE9iamVjdHMgaW4gdGhlIENvbnRhaW5lciBhcmUgc2hpZnRlZCB1cC5cclxuICAgICAqXHJcbiAgICAgKiBFYWNoIEdhbWUgT2JqZWN0IG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNhZGRBdFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byBhZGQgdG8gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gVGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgR2FtZSBPYmplY3QvcyBhdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYWRkQXQ6IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5BZGRBdCh0aGlzLmxpc3QsIGNoaWxkLCBpbmRleCwgdGhpcy5tYXhTaXplLCB0aGlzLmFkZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBHYW1lIE9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIHBvc2l0aW9uIHRvIGdldCB0aGUgR2FtZSBPYmplY3QgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciBgbnVsbGAgaWYgbm9uZSBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0QXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0W2luZGV4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEluZGV4XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBzZWFyY2ggZm9yIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBpbmRleCBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIsIG9yIC0xIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0SW5kZXg6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0LmluZGV4T2YoY2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvcnQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgQ29udGFpbmVyIHNvIHRoZSBpdGVtcyBhcmUgaW4gb3JkZXIgYmFzZWQgb24gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gICAgICogRm9yIGV4YW1wbGU6IGBzb3J0KCdhbHBoYScpYCB3b3VsZCBzb3J0IHRoZSBlbGVtZW50cyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlaXIgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc29ydFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGxleGljYWxseSBzb3J0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2hhbmRsZXJdIC0gUHJvdmlkZSB5b3VyIG93biBjdXN0b20gaGFuZGxlciBmdW5jdGlvbi4gV2lsbCByZWNlaXZlIDIgY2hpbGRyZW4gd2hpY2ggaXQgc2hvdWxkIGNvbXBhcmUgYW5kIHJldHVybiBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNvcnQ6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgaGFuZGxlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uIChjaGlsZEEsIGNoaWxkQilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkQVtwcm9wZXJ0eV0gLSBjaGlsZEJbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQXJyYXlVdGlscy5TdGFibGVTb3J0LmlucGxhY2UodGhpcy5saXN0LCBoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VhcmNoZXMgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGNoaWxkIHdpdGggaXRzIGBuYW1lYCBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4gYXJndW1lbnQuXHJcbiAgICAgKiBTaG91bGQgbW9yZSB0aGFuIG9uZSBjaGlsZCBoYXZlIHRoZSBzYW1lIG5hbWUgb25seSB0aGUgZmlyc3QgaXMgcmV0dXJuZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEJ5TmFtZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIGZpcnN0IGNoaWxkIHdpdGggYSBtYXRjaGluZyBuYW1lLCBvciBgbnVsbGAgaWYgbm9uZSB3ZXJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEZpcnN0KHRoaXMubGlzdCwgJ25hbWUnLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIEdhbWUgT2JqZWN0IGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldFJhbmRvbVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbGVuZ3RoXSAtIEFuIG9wdGlvbmFsIGxlbmd0aCwgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyAoZnJvbSB0aGUgc3RhcnRJbmRleCkgdG8gY2hvb3NlIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBBIHJhbmRvbSBjaGlsZCBmcm9tIHRoZSBDb250YWluZXIsIG9yIGBudWxsYCBpZiB0aGUgQ29udGFpbmVyIGlzIGVtcHR5LlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb206IGZ1bmN0aW9uIChzdGFydEluZGV4LCBsZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuR2V0UmFuZG9tKHRoaXMubGlzdCwgc3RhcnRJbmRleCwgbGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHByb3BlcnR5IGFuZCB2YWx1ZSB0byBzZWFyY2ggZm9yLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdFxyXG4gICAgICogR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIgd2l0aCBhIG1hdGNoaW5nIHByb3BlcnR5IGFuZCAvIG9yIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlOiBgZ2V0Rmlyc3QoJ3Zpc2libGUnLCB0cnVlKWAgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBHYW1lIE9iamVjdCB0aGF0IGhhZCBpdHMgYHZpc2libGVgIHByb3BlcnR5IHNldC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGxpbWl0IHRoZSBzZWFyY2ggdG8gdGhlIGBzdGFydEluZGV4YCAtIGBlbmRJbmRleGAgcmFuZ2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEZpcnN0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gdGVzdCBvbiBlYWNoIEdhbWUgT2JqZWN0IGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QgdGhlIHByb3BlcnR5IGFnYWluc3QuIE11c3QgcGFzcyBhIHN0cmljdCAoYD09PWApIGNvbXBhcmlzb24gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4PTBdIC0gQW4gb3B0aW9uYWwgc3RhcnQgaW5kZXggdG8gc2VhcmNoIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRJbmRleD1Db250YWluZXIubGVuZ3RoXSAtIEFuIG9wdGlvbmFsIGVuZCBpbmRleCB0byBzZWFyY2ggdXAgdG8gKGJ1dCBub3QgaW5jbHVkZWQpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgZmlyc3QgbWF0Y2hpbmcgR2FtZSBPYmplY3QsIG9yIGBudWxsYCBpZiBub25lIHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0Rmlyc3Q6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEZpcnN0KHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgbWF0Y2hpbmcgY3JpdGVyaWEgdXNpbmcgdGhlIGBwcm9wZXJ0eWAgYW5kIGB2YWx1ZWAgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlOiBgZ2V0QWxsKCdib2R5JylgIHdvdWxkIHJldHVybiBvbmx5IEdhbWUgT2JqZWN0cyB0aGF0IGhhdmUgYSBib2R5IHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdmFsdWUgdG8gY29tcGFyZSB0aGUgcHJvcGVydHkgdG86XHJcbiAgICAgKlxyXG4gICAgICogYGdldEFsbCgndmlzaWJsZScsIHRydWUpYCB3b3VsZCByZXR1cm4gb25seSBHYW1lIE9iamVjdHMgdGhhdCBoYXZlIHRoZWlyIHZpc2libGUgcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IHlvdSBjYW4gc3BlY2lmeSBhIHN0YXJ0IGFuZCBlbmQgaW5kZXguIEZvciBleGFtcGxlIGlmIHRoaXMgQ29udGFpbmVyIGhhZCAxMDAgR2FtZSBPYmplY3RzLFxyXG4gICAgICogYW5kIHlvdSBzZXQgYHN0YXJ0SW5kZXhgIHRvIDAgYW5kIGBlbmRJbmRleGAgdG8gNTAsIGl0IHdvdWxkIHJldHVybiBtYXRjaGVzIGZyb20gb25seVxyXG4gICAgICogdGhlIGZpcnN0IDUwIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BlcnR5XSAtIFRoZSBwcm9wZXJ0eSB0byB0ZXN0IG9uIGVhY2ggR2FtZSBPYmplY3QgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdmFsdWVdIC0gSWYgcHJvcGVydHkgaXMgc2V0IHRoZW4gdGhlIGBwcm9wZXJ0eWAgbXVzdCBzdHJpY3RseSBlcXVhbCB0aGlzIHZhbHVlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEFuIGFycmF5IG9mIG1hdGNoaW5nIEdhbWUgT2JqZWN0cyBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGw6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEFsbCh0aGlzLmxpc3QsIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdGhhdCBoYXZlIGEgcHJvcGVydHlcclxuICAgICAqIG1hdGNoaW5nIHRoZSBnaXZlbiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgZXhhbXBsZTogYGNvdW50KCd2aXNpYmxlJywgdHJ1ZSlgIHdvdWxkIGNvdW50IGFsbCB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIHRoZWlyIHZpc2libGUgcHJvcGVydHkgc2V0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBsaW1pdCB0aGUgb3BlcmF0aW9uIHRvIHRoZSBgc3RhcnRJbmRleGAgLSBgZW5kSW5kZXhgIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNjb3VudFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2YgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyIHdpdGggYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGNvdW50OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5Db3VudEFsbE1hdGNoaW5nKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIHR3byBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKiBCb3RoIEdhbWUgT2JqZWN0cyBtdXN0IGJlbG9uZyB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc3dhcFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQxIC0gVGhlIGZpcnN0IEdhbWUgT2JqZWN0IHRvIHN3YXAuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZDIgLSBUaGUgc2Vjb25kIEdhbWUgT2JqZWN0IHRvIHN3YXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3YXA6IGZ1bmN0aW9uIChjaGlsZDEsIGNoaWxkMilcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLlN3YXAodGhpcy5saXN0LCBjaGlsZDEsIGNoaWxkMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgR2FtZSBPYmplY3QgdG8gYSBuZXcgcG9zaXRpb24gd2l0aGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBHYW1lIE9iamVjdCBtdXN0IGFscmVhZHkgYmUgYSBjaGlsZCBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3QgaXMgcmVtb3ZlZCBmcm9tIGl0cyBvbGQgcG9zaXRpb24gYW5kIGluc2VydGVkIGludG8gdGhlIG5ldyBvbmUuXHJcbiAgICAgKiBUaGVyZWZvcmUgdGhlIENvbnRhaW5lciBzaXplIGRvZXMgbm90IGNoYW5nZS4gT3RoZXIgY2hpbGRyZW4gd2lsbCBjaGFuZ2UgcG9zaXRpb24gYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gbW92ZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZVRvOiBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuTW92ZVRvKHRoaXMubGlzdCwgY2hpbGQsIGluZGV4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3RzIG11c3QgYWxyZWFkeSBiZSBjaGlsZHJlbiBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gb3B0aW9uYWxseSBjYWxsIGBkZXN0cm95YCBvbiBlYWNoIEdhbWUgT2JqZWN0IHRoYXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byBiZSByZW1vdmVkIGZyb20gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggY2hpbGQgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoY2hpbGQsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlKHRoaXMubGlzdCwgY2hpbGQsIHRoaXMucmVtb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmIChkZXN0cm95Q2hpbGQgJiYgcmVtb3ZlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZW1vdmVkKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IFsgcmVtb3ZlZCBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZWRbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBHYW1lIE9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gdGhlIEdhbWUgT2JqZWN0LCBpZiBvbmUgaXMgZm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbW92ZUF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBHYW1lIE9iamVjdCB0byBiZSByZW1vdmVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gdGhlIEdhbWUgT2JqZWN0IGlmIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0OiBmdW5jdGlvbiAoaW5kZXgsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlQXQodGhpcy5saXN0LCBpbmRleCwgdGhpcy5yZW1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZCAmJiByZW1vdmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVtb3ZlZC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBHYW1lIE9iamVjdHMgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggR2FtZSBPYmplY3QgdGhhdCBpcyByZW1vdmVkIGZyb20gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcmVtb3ZlQmV0d2VlblxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gZWFjaCBHYW1lIE9iamVjdCBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVCZXR3ZWVuOiBmdW5jdGlvbiAoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlQmV0d2Vlbih0aGlzLmxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnJlbW92ZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVkW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgR2FtZSBPYmplY3RzIGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gZWFjaCBHYW1lIE9iamVjdCB0aGF0IGlzIHJlbW92ZWQgZnJvbSB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggR2FtZSBPYmplY3Qgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoZGVzdHJveUNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW1vdmVkID0gQXJyYXlVdGlscy5SZW1vdmVCZXR3ZWVuKHRoaXMubGlzdCwgMCwgdGhpcy5saXN0Lmxlbmd0aCwgdGhpcy5yZW1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZFtpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJyaW5ncyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgdG8gdGhlIHRvcCBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqIFRoaXMgd2lsbCBjYXVzZSBpdCB0byByZW5kZXIgb24tdG9wIG9mIGFueSBvdGhlciBvYmplY3RzIGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2JyaW5nVG9Ub3BcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJyaW5nIHRvIHRoZSB0b3Agb2YgdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYnJpbmdUb1RvcDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuQnJpbmdUb1RvcCh0aGlzLmxpc3QsIGNoaWxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIGdpdmVuIEdhbWUgT2JqZWN0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBDb250YWluZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgY2F1c2UgaXQgdG8gcmVuZGVyIGJlbG93IGFueSBvdGhlciBvYmplY3RzIGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3NlbmRUb0JhY2tcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIHNlbmQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZW5kVG9CYWNrOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5TZW5kVG9CYWNrKHRoaXMubGlzdCwgY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgdXAgb25lIHBsYWNlIGluIHRoaXMgQ29udGFpbmVyLCB1bmxlc3MgaXQncyBhbHJlYWR5IGF0IHRoZSB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI21vdmVVcFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgbW92ZWQgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZVVwOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5Nb3ZlVXAodGhpcy5saXN0LCBjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSBnaXZlbiBHYW1lIE9iamVjdCBkb3duIG9uZSBwbGFjZSBpbiB0aGlzIENvbnRhaW5lciwgdW5sZXNzIGl0J3MgYWxyZWFkeSBhdCB0aGUgYm90dG9tLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNtb3ZlRG93blxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgbW92ZWQgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZURvd246IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLk1vdmVEb3duKHRoaXMubGlzdCwgY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlcyB0aGUgb3JkZXIgb2YgYWxsIEdhbWUgT2JqZWN0cyBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcmV2ZXJzZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJldmVyc2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5saXN0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1ZmZsZXMgdGhlIGFsbCBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdXNpbmcgdGhlIEZpc2hlci1ZYXRlcyBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2h1ZmZsZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNodWZmbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5TaHVmZmxlKHRoaXMubGlzdCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIGEgR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIgd2l0aCB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG5ldyBHYW1lIE9iamVjdCBjYW5ub3QgYWxyZWFkeSBiZSBhIGNoaWxkIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZXBsYWNlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBvbGRDaGlsZCAtIFRoZSBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lciB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBuZXdDaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBiZSBhZGRlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIHRoZSBHYW1lIE9iamVjdCBpZiBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXBsYWNlOiBmdW5jdGlvbiAob2xkQ2hpbGQsIG5ld0NoaWxkLCBkZXN0cm95Q2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1vdmVkID0gQXJyYXlVdGlscy5SZXBsYWNlKHRoaXMubGlzdCwgb2xkQ2hpbGQsIG5ld0NoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKG1vdmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKG5ld0NoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVIYW5kbGVyKG9sZENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkZXN0cm95Q2hpbGQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9sZENoaWxkLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIEdhbWUgT2JqZWN0IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2hlY2sgZG9lcyBub3Qgc2NhbiBuZXN0ZWQgQ29udGFpbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZXhpc3RzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBjaGVjayBmb3Igd2l0aGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IGlzIGFuIGltbWVkaWF0ZSBjaGlsZCBvZiB0aGlzIENvbnRhaW5lciwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBleGlzdHM6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlzdC5pbmRleE9mKGNoaWxkKSA+IC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZ2l2ZW4gdmFsdWUgb24gYWxsIEdhbWUgT2JqZWN0cyBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IHlvdSBjYW4gc3BlY2lmeSBhIHN0YXJ0IGFuZCBlbmQgaW5kZXguIEZvciBleGFtcGxlIGlmIHRoaXMgQ29udGFpbmVyIGhhZCAxMDAgR2FtZSBPYmplY3RzLFxyXG4gICAgICogYW5kIHlvdSBzZXQgYHN0YXJ0SW5kZXhgIHRvIDAgYW5kIGBlbmRJbmRleGAgdG8gNTAsIGl0IHdvdWxkIHJldHVybiBtYXRjaGVzIGZyb20gb25seVxyXG4gICAgICogdGhlIGZpcnN0IDUwIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdGhhdCBtdXN0IGV4aXN0IG9uIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBnZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRBbGw6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuU2V0QWxsKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBjYWxsYmFjayBFYWNoQ29udGFpbmVyQ2FsbGJhY2tcclxuICAgICAqIEBnZW5lcmljIEkgLSBbaXRlbV1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgY2hpbGQgR2FtZSBPYmplY3Qgb2YgdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBjaGlsZC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEEgY29weSBvZiB0aGUgQ29udGFpbmVyIGlzIG1hZGUgYmVmb3JlIHBhc3NpbmcgZWFjaCBlbnRyeSB0byB5b3VyIGNhbGxiYWNrLlxyXG4gICAgICogVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSBjYWxsYmFjayBpdHNlbGYgbW9kaWZ5aW5nIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIG9mIHRoaXMgQ29udGFpbmVyXHJcbiAgICAgKiB0aGVuIHlvdSBjYW4gdXNlIHRoZSBtb3JlIHBlcmZvcm1hbnQgYENvbnRhaW5lci5pdGVyYXRlYCBtZXRob2QgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbIG51bGwgXTtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgdGVtcCA9IHRoaXMubGlzdC5zbGljZSgpO1xyXG4gICAgICAgIHZhciBsZW4gPSB0ZW1wLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1swXSA9IHRlbXBbaV07XHJcblxyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3NlcyBhbGwgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBPbmx5IHVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSBhYnNvbHV0ZWx5IGtub3cgdGhhdCB0aGUgQ29udGFpbmVyIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZ1xyXG4gICAgICogdGhlIGl0ZXJhdGlvbiwgaS5lLiBieSByZW1vdmluZyBvciBhZGRpbmcgdG8gaXRzIGNvbnRlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNpdGVyYXRlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBhZnRlciB0aGUgY2hpbGQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGl0ZXJhdGU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXJncyA9IFsgbnVsbCBdO1xyXG4gICAgICAgIHZhciBpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5saXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMubGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIENvbnRhaW5lciBhbmQgb3B0aW9uYWxseSBhbGwgb2YgaXRzIGNoaWxkcmVuLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBHYW1lIE9iamVjdC4gSWYgbm90IHNldCBpdCB3aWxsIHVzZSB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlQ2hpbGRyZW49ZmFsc2VdIC0gQXBwbHkgdGhpcyBzY3JvbGxGYWN0b3IgdG8gYWxsIENvbnRhaW5lciBjaGlsZHJlbiBhcyB3ZWxsP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbEZhY3RvcjogZnVuY3Rpb24gKHgsIHksIHVwZGF0ZUNoaWxkcmVuKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuICAgICAgICBpZiAodXBkYXRlQ2hpbGRyZW4gPT09IHVuZGVmaW5lZCkgeyB1cGRhdGVDaGlsZHJlbiA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0geTtcclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZUNoaWxkcmVuKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQXJyYXlVdGlscy5TZXRBbGwodGhpcy5saXN0LCAnc2Nyb2xsRmFjdG9yWCcsIHgpO1xyXG4gICAgICAgICAgICBBcnJheVV0aWxzLlNldEFsbCh0aGlzLmxpc3QsICdzY3JvbGxGYWN0b3JZJywgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIEdhbWUgT2JqZWN0cyBpbnNpZGUgdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsZW5ndGhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgR2FtZSBPYmplY3Qgd2l0aGluIHRoZSBDb250YWluZXIsIG9yIGBudWxsYCBpZiBpdCBpcyBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG1vdmUgdGhlIGN1cnNvciBieSBjYWxsaW5nIGBDb250YWluZXIubmV4dGAgYW5kIGBDb250YWluZXIucHJldmlvdXNgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZmlyc3RcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBmaXJzdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IEdhbWUgT2JqZWN0IHdpdGhpbiB0aGUgQ29udGFpbmVyLCBvciBgbnVsbGAgaWYgaXQgaXMgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYnkgY2FsbGluZyBgQ29udGFpbmVyLm5leHRgIGFuZCBgQ29udGFpbmVyLnByZXZpb3VzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2xhc3RcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBsYXN0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMubGlzdC5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RbdGhpcy5wb3NpdGlvbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbmV4dCBHYW1lIE9iamVjdCB3aXRoaW4gdGhlIENvbnRhaW5lciwgb3IgYG51bGxgIGlmIGl0IGlzIGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gbW92ZSB0aGUgY3Vyc29yIGJ5IGNhbGxpbmcgYENvbnRhaW5lci5uZXh0YCBhbmQgYENvbnRhaW5lci5wcmV2aW91c2AuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNuZXh0XHJcbiAgICAgKiBAdHlwZSB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgbmV4dDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA8IHRoaXMubGlzdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24rKztcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0W3RoaXMucG9zaXRpb25dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIEdhbWUgT2JqZWN0IHdpdGhpbiB0aGUgQ29udGFpbmVyLCBvciBgbnVsbGAgaWYgaXQgaXMgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYnkgY2FsbGluZyBgQ29udGFpbmVyLm5leHRgIGFuZCBgQ29udGFpbmVyLnByZXZpb3VzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3ByZXZpb3VzXHJcbiAgICAgKiBAdHlwZSB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgcHJldmlvdXM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLS07XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFt0aGlzLnBvc2l0aW9uXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBkZXN0cm95IGhhbmRsZXIsIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXN0cm95IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsKCEhdGhpcy5leGNsdXNpdmUpO1xyXG5cclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLnRlbXBUcmFuc2Zvcm1NYXRyaXguZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5TGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/Container.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Container#renderCanvas\r\n * @since 3.4.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Container} container - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ContainerCanvasRenderer = function (renderer, container, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var children = container.list;\r\n\r\n    if (children.length === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var transformMatrix = container.localTransform;\r\n    \r\n    if (parentMatrix)\r\n    {\r\n        transformMatrix.loadIdentity();\r\n        transformMatrix.multiply(parentMatrix);\r\n        transformMatrix.translate(container.x, container.y);\r\n        transformMatrix.rotate(container.rotation);\r\n        transformMatrix.scale(container.scaleX, container.scaleY);\r\n    }\r\n    else\r\n    {\r\n        transformMatrix.applyITRS(container.x, container.y, container.rotation, container.scaleX, container.scaleY);\r\n    }\r\n\r\n    var containerHasBlendMode = (container.blendMode !== -1);\r\n\r\n    if (!containerHasBlendMode)\r\n    {\r\n        //  If Container is SKIP_TEST then set blend mode to be Normal\r\n        renderer.setBlendMode(0);\r\n    }\r\n\r\n    var alpha = container._alpha;\r\n    var scrollFactorX = container.scrollFactorX;\r\n    var scrollFactorY = container.scrollFactorY;\r\n\r\n    for (var i = 0; i < children.length; i++)\r\n    {\r\n        var child = children[i];\r\n\r\n        if (!child.willRender(camera))\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var childAlpha = child.alpha;\r\n        var childScrollFactorX = child.scrollFactorX;\r\n        var childScrollFactorY = child.scrollFactorY;\r\n\r\n        if (!containerHasBlendMode && child.blendMode !== renderer.currentBlendMode)\r\n        {\r\n            //  If Container doesn't have its own blend mode, then a child can have one\r\n            renderer.setBlendMode(child.blendMode);\r\n        }\r\n\r\n        //  Set parent values\r\n        child.setScrollFactor(childScrollFactorX * scrollFactorX, childScrollFactorY * scrollFactorY);\r\n        child.setAlpha(childAlpha * alpha);\r\n\r\n        //  Render\r\n        child.renderCanvas(renderer, child, interpolationPercentage, camera, transformMatrix);\r\n\r\n        //  Restore original values\r\n        child.setAlpha(childAlpha);\r\n        child.setScrollFactor(childScrollFactorX, childScrollFactorY);\r\n    }\r\n};\r\n\r\nmodule.exports = ContainerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyQ2FudmFzUmVuZGVyZXIuanM/MDBiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29udGFpbmVyL0NvbnRhaW5lckNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuNC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IGNvbnRhaW5lciAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBDb250YWluZXJDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgY29udGFpbmVyLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5saXN0O1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmFuc2Zvcm1NYXRyaXggPSBjb250YWluZXIubG9jYWxUcmFuc2Zvcm07XHJcbiAgICBcclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5tdWx0aXBseShwYXJlbnRNYXRyaXgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC50cmFuc2xhdGUoY29udGFpbmVyLngsIGNvbnRhaW5lci55KTtcclxuICAgICAgICB0cmFuc2Zvcm1NYXRyaXgucm90YXRlKGNvbnRhaW5lci5yb3RhdGlvbik7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LnNjYWxlKGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5hcHBseUlUUlMoY29udGFpbmVyLngsIGNvbnRhaW5lci55LCBjb250YWluZXIucm90YXRpb24sIGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250YWluZXJIYXNCbGVuZE1vZGUgPSAoY29udGFpbmVyLmJsZW5kTW9kZSAhPT0gLTEpO1xyXG5cclxuICAgIGlmICghY29udGFpbmVySGFzQmxlbmRNb2RlKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBJZiBDb250YWluZXIgaXMgU0tJUF9URVNUIHRoZW4gc2V0IGJsZW5kIG1vZGUgdG8gYmUgTm9ybWFsXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0QmxlbmRNb2RlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbHBoYSA9IGNvbnRhaW5lci5fYWxwaGE7XHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IGNvbnRhaW5lci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIHNjcm9sbEZhY3RvclkgPSBjb250YWluZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkLndpbGxSZW5kZXIoY2FtZXJhKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGEgPSBjaGlsZC5hbHBoYTtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JYID0gY2hpbGQuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JZID0gY2hpbGQuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250YWluZXJIYXNCbGVuZE1vZGUgJiYgY2hpbGQuYmxlbmRNb2RlICE9PSByZW5kZXJlci5jdXJyZW50QmxlbmRNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIENvbnRhaW5lciBkb2Vzbid0IGhhdmUgaXRzIG93biBibGVuZCBtb2RlLCB0aGVuIGEgY2hpbGQgY2FuIGhhdmUgb25lXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEJsZW5kTW9kZShjaGlsZC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNldCBwYXJlbnQgdmFsdWVzXHJcbiAgICAgICAgY2hpbGQuc2V0U2Nyb2xsRmFjdG9yKGNoaWxkU2Nyb2xsRmFjdG9yWCAqIHNjcm9sbEZhY3RvclgsIGNoaWxkU2Nyb2xsRmFjdG9yWSAqIHNjcm9sbEZhY3RvclkpO1xyXG4gICAgICAgIGNoaWxkLnNldEFscGhhKGNoaWxkQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIC8vICBSZW5kZXJcclxuICAgICAgICBjaGlsZC5yZW5kZXJDYW52YXMocmVuZGVyZXIsIGNoaWxkLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCB0cmFuc2Zvcm1NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXNcclxuICAgICAgICBjaGlsZC5zZXRBbHBoYShjaGlsZEFscGhhKTtcclxuICAgICAgICBjaGlsZC5zZXRTY3JvbGxGYWN0b3IoY2hpbGRTY3JvbGxGYWN0b3JYLCBjaGlsZFNjcm9sbEZhY3RvclkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXJDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerCreator.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/ContainerCreator.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar Container = __webpack_require__(/*! ./Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Container Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Container Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#container\r\n * @since 3.4.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Container} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('container', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n\r\n    var container = new Container(this.scene, x, y);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, container, config);\r\n    \r\n    return container;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyQ3JlYXRvci5qcz9kMTI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCxnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBYTtBQUNyQyx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbnRhaW5lci9Db250YWluZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBDb250YWluZXIgPSByZXF1aXJlKCcuL0NvbnRhaW5lcicpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBDb250YWluZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIENvbnRhaW5lciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjY29udGFpbmVyXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ2NvbnRhaW5lcicsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG5cclxuICAgIHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKHRoaXMuc2NlbmUsIHgsIHkpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGNvbnRhaW5lciwgY29uZmlnKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerFactory.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/ContainerFactory.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Container = __webpack_require__(/*! ./Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Container Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Container Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#container\r\n * @since 3.4.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} [children] - An optional array of Game Objects to add to this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('container', function (x, y, children)\r\n{\r\n    return this.displayList.add(new Container(this.scene, x, y, children));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyRmFjdG9yeS5qcz9lZGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw4REFBOEQ7QUFDekU7QUFDQSxZQUFZLDZCQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4vQ29udGFpbmVyJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBDb250YWluZXIgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBDb250YWluZXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2NvbnRhaW5lclxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gW2NoaWxkcmVuXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBhZGQgdG8gdGhpcyBDb250YWluZXIuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2NvbnRhaW5lcicsIGZ1bmN0aW9uICh4LCB5LCBjaGlsZHJlbilcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBDb250YWluZXIodGhpcy5zY2VuZSwgeCwgeSwgY2hpbGRyZW4pKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerRender.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/ContainerRender.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ContainerWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ContainerCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyUmVuZGVyLmpzP2I4MGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUEwQjtBQUNwRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQTJCO0FBQ3REOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vQ29udGFpbmVyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9Db250YWluZXJDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Container#renderWebGL\r\n * @since 3.4.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Container} container - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ContainerWebGLRenderer = function (renderer, container, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var children = container.list;\r\n\r\n    if (children.length === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var transformMatrix = container.localTransform;\r\n    \r\n    if (parentMatrix)\r\n    {\r\n        transformMatrix.loadIdentity();\r\n        transformMatrix.multiply(parentMatrix);\r\n        transformMatrix.translate(container.x, container.y);\r\n        transformMatrix.rotate(container.rotation);\r\n        transformMatrix.scale(container.scaleX, container.scaleY);\r\n    }\r\n    else\r\n    {\r\n        transformMatrix.applyITRS(container.x, container.y, container.rotation, container.scaleX, container.scaleY);\r\n    }\r\n\r\n    var containerHasBlendMode = (container.blendMode !== -1);\r\n\r\n    if (!containerHasBlendMode)\r\n    {\r\n        //  If Container is SKIP_TEST then set blend mode to be Normal\r\n        renderer.setBlendMode(0);\r\n    }\r\n\r\n    var alphaTopLeft = container.alphaTopLeft;\r\n    var alphaTopRight = container.alphaTopRight;\r\n    var alphaBottomLeft = container.alphaBottomLeft;\r\n    var alphaBottomRight = container.alphaBottomRight;\r\n\r\n    var scrollFactorX = container.scrollFactorX;\r\n    var scrollFactorY = container.scrollFactorY;\r\n\r\n    var list = children;\r\n    var childCount = children.length;\r\n\r\n    for (var i = 0; i < childCount; i++)\r\n    {\r\n        var child = children[i];\r\n\r\n        if (!child.willRender(camera))\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var childAlphaTopLeft;\r\n        var childAlphaTopRight;\r\n        var childAlphaBottomLeft;\r\n        var childAlphaBottomRight;\r\n\r\n        if (child.alphaTopLeft !== undefined)\r\n        {\r\n            childAlphaTopLeft = child.alphaTopLeft;\r\n            childAlphaTopRight = child.alphaTopRight;\r\n            childAlphaBottomLeft = child.alphaBottomLeft;\r\n            childAlphaBottomRight = child.alphaBottomRight;\r\n        }\r\n        else\r\n        {\r\n            var childAlpha = child.alpha;\r\n\r\n            childAlphaTopLeft = childAlpha;\r\n            childAlphaTopRight = childAlpha;\r\n            childAlphaBottomLeft = childAlpha;\r\n            childAlphaBottomRight = childAlpha;\r\n        }\r\n\r\n        var childScrollFactorX = child.scrollFactorX;\r\n        var childScrollFactorY = child.scrollFactorY;\r\n\r\n        if (!containerHasBlendMode && child.blendMode !== renderer.currentBlendMode)\r\n        {\r\n            //  If Container doesn't have its own blend mode, then a child can have one\r\n            renderer.setBlendMode(child.blendMode);\r\n        }\r\n\r\n        var mask = child.mask;\r\n\r\n        if (mask)\r\n        {\r\n            mask.preRenderWebGL(renderer, child, camera);\r\n        }\r\n\r\n        var type = child.type;\r\n\r\n        if (type !== renderer.currentType)\r\n        {\r\n            renderer.newType = true;\r\n            renderer.currentType = type;\r\n        }\r\n\r\n        renderer.nextTypeMatch = (i < childCount - 1) ? (list[i + 1].type === renderer.currentType) : false;\r\n\r\n        //  Set parent values\r\n        child.setScrollFactor(childScrollFactorX * scrollFactorX, childScrollFactorY * scrollFactorY);\r\n\r\n        child.setAlpha(childAlphaTopLeft * alphaTopLeft, childAlphaTopRight * alphaTopRight, childAlphaBottomLeft * alphaBottomLeft, childAlphaBottomRight * alphaBottomRight);\r\n\r\n        //  Render\r\n        child.renderWebGL(renderer, child, interpolationPercentage, camera, transformMatrix);\r\n\r\n        //  Restore original values\r\n\r\n        child.setAlpha(childAlphaTopLeft, childAlphaTopRight, childAlphaBottomLeft, childAlphaBottomRight);\r\n\r\n        child.setScrollFactor(childScrollFactorX, childScrollFactorY);\r\n\r\n        if (mask)\r\n        {\r\n            mask.postRenderWebGL(renderer, camera);\r\n        }\r\n\r\n        renderer.newType = false;\r\n    }\r\n};\r\n\r\nmodule.exports = ContainerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyV2ViR0xSZW5kZXJlci5qcz81ODU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbnRhaW5lci9Db250YWluZXJXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBjb250YWluZXIgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ29udGFpbmVyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgY29udGFpbmVyLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5saXN0O1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmFuc2Zvcm1NYXRyaXggPSBjb250YWluZXIubG9jYWxUcmFuc2Zvcm07XHJcbiAgICBcclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5tdWx0aXBseShwYXJlbnRNYXRyaXgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC50cmFuc2xhdGUoY29udGFpbmVyLngsIGNvbnRhaW5lci55KTtcclxuICAgICAgICB0cmFuc2Zvcm1NYXRyaXgucm90YXRlKGNvbnRhaW5lci5yb3RhdGlvbik7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LnNjYWxlKGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5hcHBseUlUUlMoY29udGFpbmVyLngsIGNvbnRhaW5lci55LCBjb250YWluZXIucm90YXRpb24sIGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250YWluZXJIYXNCbGVuZE1vZGUgPSAoY29udGFpbmVyLmJsZW5kTW9kZSAhPT0gLTEpO1xyXG5cclxuICAgIGlmICghY29udGFpbmVySGFzQmxlbmRNb2RlKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBJZiBDb250YWluZXIgaXMgU0tJUF9URVNUIHRoZW4gc2V0IGJsZW5kIG1vZGUgdG8gYmUgTm9ybWFsXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0QmxlbmRNb2RlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbHBoYVRvcExlZnQgPSBjb250YWluZXIuYWxwaGFUb3BMZWZ0O1xyXG4gICAgdmFyIGFscGhhVG9wUmlnaHQgPSBjb250YWluZXIuYWxwaGFUb3BSaWdodDtcclxuICAgIHZhciBhbHBoYUJvdHRvbUxlZnQgPSBjb250YWluZXIuYWxwaGFCb3R0b21MZWZ0O1xyXG4gICAgdmFyIGFscGhhQm90dG9tUmlnaHQgPSBjb250YWluZXIuYWxwaGFCb3R0b21SaWdodDtcclxuXHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IGNvbnRhaW5lci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIHNjcm9sbEZhY3RvclkgPSBjb250YWluZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICB2YXIgbGlzdCA9IGNoaWxkcmVuO1xyXG4gICAgdmFyIGNoaWxkQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcblxyXG4gICAgICAgIGlmICghY2hpbGQud2lsbFJlbmRlcihjYW1lcmEpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRBbHBoYVRvcExlZnQ7XHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGFUb3BSaWdodDtcclxuICAgICAgICB2YXIgY2hpbGRBbHBoYUJvdHRvbUxlZnQ7XHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGFCb3R0b21SaWdodDtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkLmFscGhhVG9wTGVmdCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRBbHBoYVRvcExlZnQgPSBjaGlsZC5hbHBoYVRvcExlZnQ7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFUb3BSaWdodCA9IGNoaWxkLmFscGhhVG9wUmlnaHQ7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFCb3R0b21MZWZ0ID0gY2hpbGQuYWxwaGFCb3R0b21MZWZ0O1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhQm90dG9tUmlnaHQgPSBjaGlsZC5hbHBoYUJvdHRvbVJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRBbHBoYSA9IGNoaWxkLmFscGhhO1xyXG5cclxuICAgICAgICAgICAgY2hpbGRBbHBoYVRvcExlZnQgPSBjaGlsZEFscGhhO1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhVG9wUmlnaHQgPSBjaGlsZEFscGhhO1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhQm90dG9tTGVmdCA9IGNoaWxkQWxwaGE7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFCb3R0b21SaWdodCA9IGNoaWxkQWxwaGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JYID0gY2hpbGQuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JZID0gY2hpbGQuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250YWluZXJIYXNCbGVuZE1vZGUgJiYgY2hpbGQuYmxlbmRNb2RlICE9PSByZW5kZXJlci5jdXJyZW50QmxlbmRNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIENvbnRhaW5lciBkb2Vzbid0IGhhdmUgaXRzIG93biBibGVuZCBtb2RlLCB0aGVuIGEgY2hpbGQgY2FuIGhhdmUgb25lXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEJsZW5kTW9kZShjaGlsZC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hc2sgPSBjaGlsZC5tYXNrO1xyXG5cclxuICAgICAgICBpZiAobWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1hc2sucHJlUmVuZGVyV2ViR0wocmVuZGVyZXIsIGNoaWxkLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHR5cGUgPSBjaGlsZC50eXBlO1xyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gcmVuZGVyZXIuY3VycmVudFR5cGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5uZXdUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudFR5cGUgPSB0eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIubmV4dFR5cGVNYXRjaCA9IChpIDwgY2hpbGRDb3VudCAtIDEpID8gKGxpc3RbaSArIDFdLnR5cGUgPT09IHJlbmRlcmVyLmN1cnJlbnRUeXBlKSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgU2V0IHBhcmVudCB2YWx1ZXNcclxuICAgICAgICBjaGlsZC5zZXRTY3JvbGxGYWN0b3IoY2hpbGRTY3JvbGxGYWN0b3JYICogc2Nyb2xsRmFjdG9yWCwgY2hpbGRTY3JvbGxGYWN0b3JZICogc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIGNoaWxkLnNldEFscGhhKGNoaWxkQWxwaGFUb3BMZWZ0ICogYWxwaGFUb3BMZWZ0LCBjaGlsZEFscGhhVG9wUmlnaHQgKiBhbHBoYVRvcFJpZ2h0LCBjaGlsZEFscGhhQm90dG9tTGVmdCAqIGFscGhhQm90dG9tTGVmdCwgY2hpbGRBbHBoYUJvdHRvbVJpZ2h0ICogYWxwaGFCb3R0b21SaWdodCk7XHJcblxyXG4gICAgICAgIC8vICBSZW5kZXJcclxuICAgICAgICBjaGlsZC5yZW5kZXJXZWJHTChyZW5kZXJlciwgY2hpbGQsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHRyYW5zZm9ybU1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xyXG5cclxuICAgICAgICBjaGlsZC5zZXRBbHBoYShjaGlsZEFscGhhVG9wTGVmdCwgY2hpbGRBbHBoYVRvcFJpZ2h0LCBjaGlsZEFscGhhQm90dG9tTGVmdCwgY2hpbGRBbHBoYUJvdHRvbVJpZ2h0KTtcclxuXHJcbiAgICAgICAgY2hpbGQuc2V0U2Nyb2xsRmFjdG9yKGNoaWxkU2Nyb2xsRmFjdG9yWCwgY2hpbGRTY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgaWYgKG1hc2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtYXNrLnBvc3RSZW5kZXJXZWJHTChyZW5kZXJlciwgY2FtZXJhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLm5ld1R5cGUgPSBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Blend Modes to CSS Blend Modes Map.\r\n * \r\n * @name Phaser.CSSBlendModes\r\n * @enum {string}\r\n * @memberof Phaser\r\n * @readonly\r\n * @since 3.12.0\r\n */\r\n\r\nmodule.exports = [\r\n    'normal',\r\n    'multiply',\r\n    'multiply',\r\n    'screen',\r\n    'overlay',\r\n    'darken',\r\n    'lighten',\r\n    'color-dodge',\r\n    'color-burn',\r\n    'hard-light',\r\n    'soft-light',\r\n    'difference',\r\n    'exclusion',\r\n    'hue',\r\n    'saturation',\r\n    'color',\r\n    'luminosity'\r\n];\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0NTU0JsZW5kTW9kZXMuanM/ZWMzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0NTU0JsZW5kTW9kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgQmxlbmQgTW9kZXMgdG8gQ1NTIEJsZW5kIE1vZGVzIE1hcC5cclxuICogXHJcbiAqIEBuYW1lIFBoYXNlci5DU1NCbGVuZE1vZGVzXHJcbiAqIEBlbnVtIHtzdHJpbmd9XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXJcclxuICogQHJlYWRvbmx5XHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFtcclxuICAgICdub3JtYWwnLFxyXG4gICAgJ211bHRpcGx5JyxcclxuICAgICdtdWx0aXBseScsXHJcbiAgICAnc2NyZWVuJyxcclxuICAgICdvdmVybGF5JyxcclxuICAgICdkYXJrZW4nLFxyXG4gICAgJ2xpZ2h0ZW4nLFxyXG4gICAgJ2NvbG9yLWRvZGdlJyxcclxuICAgICdjb2xvci1idXJuJyxcclxuICAgICdoYXJkLWxpZ2h0JyxcclxuICAgICdzb2Z0LWxpZ2h0JyxcclxuICAgICdkaWZmZXJlbmNlJyxcclxuICAgICdleGNsdXNpb24nLFxyXG4gICAgJ2h1ZScsXHJcbiAgICAnc2F0dXJhdGlvbicsXHJcbiAgICAnY29sb3InLFxyXG4gICAgJ2x1bWlub3NpdHknXHJcbl07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElement.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/domelement/DOMElement.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DOMElementRender = __webpack_require__(/*! ./DOMElementRender */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar RemoveFromDOM = __webpack_require__(/*! ../../dom/RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n/**\r\n * @classdesc\r\n * DOM Element Game Objects are a way to control and manipulate HTML Elements over the top of your game.\r\n * \r\n * In order for DOM Elements to display you have to enable them by adding the following to your game\r\n * configuration object:\r\n * \r\n * ```javascript\r\n * dom {\r\n *   createContainer: true\r\n * }\r\n * ```\r\n * \r\n * When this is added, Phaser will automatically create a DOM Container div that is positioned over the top\r\n * of the game canvas. This div is sized to match the canvas, and if the canvas size changes, as a result of\r\n * settings within the Scale Manager, the dom container is resized accordingly.\r\n * \r\n * You can create a DOM Element by either passing in DOMStrings, or by passing in a reference to an existing\r\n * Element that you wish to be placed under the control of Phaser. For example:\r\n * \r\n * ```javascript\r\n * this.add.dom(x, y, 'div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * The above code will insert a div element into the DOM Container at the given x/y coordinate. The DOMString in\r\n * the 4th argument sets the initial CSS style of the div and the final argument is the inner text. In this case,\r\n * it will create a lime colored div that is 220px by 100px in size with the text Phaser in it, in an Arial font.\r\n * \r\n * You should nearly always, without exception, use explicitly sized HTML Elements, in order to fully control\r\n * alignment and positioning of the elements next to regular game content.\r\n * \r\n * Rather than specify the CSS and HTML directly you can use the `load.html` File Loader to load it into the\r\n * cache and then use the `createFromCache` method instead. You can also use `createFromHTML` and various other\r\n * methods available in this class to help construct your elements.\r\n * \r\n * Once the element has been created you can then control it like you would any other Game Object. You can set its\r\n * position, scale, rotation, alpha and other properties. It will move as the main Scene Camera moves and be clipped\r\n * at the edge of the canvas. It's important to remember some limitations of DOM Elements: The obvious one is that\r\n * they appear above or below your game canvas. You cannot blend them into the display list, meaning you cannot have\r\n * a DOM Element, then a Sprite, then another DOM Element behind it.\r\n * \r\n * They also cannot be enabled for input. To do that, you have to use the `addListener` method to add native event\r\n * listeners directly. The final limitation is to do with cameras. The DOM Container is sized to match the game canvas\r\n * entirely and clipped accordingly. DOM Elements respect camera scrolling and scrollFactor settings, but if you\r\n * change the size of the camera so it no longer matches the size of the canvas, they won't be clipped accordingly.\r\n * \r\n * Also, all DOM Elements are inserted into the same DOM Container, regardless of which Scene they are created in.\r\n * \r\n * DOM Elements are a powerful way to align native HTML with your Phaser Game Objects. For example, you can insert\r\n * a login form for a multiplayer game directly into your title screen. Or a text input box for a highscore table.\r\n * Or a banner ad from a 3rd party service. Or perhaps you'd like to use them for high resolution text display and\r\n * UI. The choice is up to you, just remember that you're dealing with standard HTML and CSS floating over the top\r\n * of your game, and should treat it accordingly.\r\n *\r\n * @class DOMElement\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this DOM Element in the world.\r\n * @param {number} [y=0] - The vertical position of this DOM Element in the world.\r\n * @param {(Element|string)} [element] - An existing DOM element, or a string. If a string starting with a # it will do a `getElementById` look-up on the string (minus the hash). Without a hash, it represents the type of element to create, i.e. 'div'.\r\n * @param {(string|any)} [style] - If a string, will be set directly as the elements `style` property value. If a plain object, will be iterated and the values transferred. In both cases the values replacing whatever CSS styles may have been previously set.\r\n * @param {string} [innerText] - If given, will be set directly as the elements `innerText` property value, replacing whatever was there before.\r\n */\r\nvar DOMElement = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Origin,\r\n        Components.ScrollFactor,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        DOMElementRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function DOMElement (scene, x, y, element, style, innerText)\r\n    {\r\n        GameObject.call(this, scene, 'DOMElement');\r\n\r\n        /**\r\n         * A reference to the parent DOM Container that the Game instance created when it started.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#parent\r\n         * @type {Element}\r\n         * @since 3.17.0\r\n         */\r\n        this.parent = scene.sys.game.domContainer;\r\n\r\n        /**\r\n         * A reference to the HTML Cache.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#cache\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @since 3.17.0\r\n         */\r\n        this.cache = scene.sys.cache.html;\r\n\r\n        /**\r\n         * The actual DOM Element that this Game Object is bound to. For example, if you've created a `<div>`\r\n         * then this property is a direct reference to that element within the dom.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#node\r\n         * @type {Element}\r\n         * @since 3.17.0\r\n         */\r\n        this.node;\r\n\r\n        /**\r\n         * By default a DOM Element will have its transform, display, opacity, zIndex and blend mode properties\r\n         * updated when its rendered. If, for some reason, you don't want any of these changed other than the\r\n         * CSS transform, then set this flag to `true`. When `true` only the CSS Transform is applied and it's\r\n         * up to you to keep track of and set the other properties as required.\r\n         * \r\n         * This can be handy if, for example, you've a nested DOM Element and you don't want the opacity to be\r\n         * picked-up by any of its children.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#transformOnly\r\n         * @type {boolean}\r\n         * @since 3.17.0\r\n         */\r\n        this.transformOnly = false;\r\n\r\n        /**\r\n         * The angle, in radians, by which to skew the DOM Element on the horizontal axis.\r\n         * \r\n         * https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#skewX\r\n         * @type {number}\r\n         * @since 3.17.0\r\n         */\r\n        this.skewX = 0;\r\n\r\n        /**\r\n         * The angle, in radians, by which to skew the DOM Element on the vertical axis.\r\n         * \r\n         * https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#skewY\r\n         * @type {number}\r\n         * @since 3.17.0\r\n         */\r\n        this.skewY = 0;\r\n\r\n        /**\r\n         * A Vector4 that contains the 3D rotation of this DOM Element around a fixed axis in 3D space.\r\n         * \r\n         * All values in the Vector4 are treated as degrees, unless the `rotate3dAngle` property is changed.\r\n         * \r\n         * For more details see the following MDN page:\r\n         * \r\n         * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#rotate3d\r\n         * @type {Phaser.Math.Vector4}\r\n         * @since 3.17.0\r\n         */\r\n        this.rotate3d = new Vector4();\r\n\r\n        /**\r\n         * The unit that represents the 3D rotation values. By default this is `deg` for degrees, but can\r\n         * be changed to any supported unit. See this page for further details:\r\n         * \r\n         * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#rotate3dAngle\r\n         * @type {string}\r\n         * @since 3.17.0\r\n         */\r\n        this.rotate3dAngle = 'deg';\r\n\r\n        /**\r\n         * The native (un-scaled) width of this Game Object.\r\n         * \r\n         * For a DOM Element this property is read-only.\r\n         * \r\n         * The property `displayWidth` holds the computed bounds of this DOM Element, factoring in scaling.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#width\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.width = 0;\r\n\r\n        /**\r\n         * The native (un-scaled) height of this Game Object.\r\n         * \r\n         * For a DOM Element this property is read-only.\r\n         * \r\n         * The property `displayHeight` holds the computed bounds of this DOM Element, factoring in scaling.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#height\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.height = 0;\r\n\r\n        /**\r\n         * The computed display width of this Game Object, based on the `getBoundingClientRect` DOM call.\r\n         * \r\n         * The property `width` holds the un-scaled width of this DOM Element.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#displayWidth\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.displayWidth = 0;\r\n\r\n        /**\r\n         * The computed display height of this Game Object, based on the `getBoundingClientRect` DOM call.\r\n         * \r\n         * The property `height` holds the un-scaled height of this DOM Element.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#displayHeight\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.displayHeight = 0;\r\n\r\n        /**\r\n         * Internal native event handler.\r\n         * \r\n         * @name Phaser.GameObjects.DOMElement#handler\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this.handler = this.dispatchNativeEvent.bind(this);\r\n\r\n        this.setPosition(x, y);\r\n\r\n        if (typeof element === 'string')\r\n        {\r\n            //  hash?\r\n            if (element[0] === '#')\r\n            {\r\n                this.setElement(element.substr(1), style, innerText);\r\n            }\r\n            else\r\n            {\r\n                this.createElement(element, style, innerText);\r\n            }\r\n        }\r\n        else if (element)\r\n        {\r\n            this.setElement(element, style, innerText);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical skew values of this DOM Element.\r\n     * \r\n     * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setSkew\r\n     * @since 3.17.0\r\n     *\r\n     * @param {number} [x=0] - The angle, in radians, by which to skew the DOM Element on the horizontal axis.\r\n     * @param {number} [y=x] - The angle, in radians, by which to skew the DOM Element on the vertical axis.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setSkew: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.skewX = x;\r\n        this.skewY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the perspective CSS property of the _parent DOM Container_. This determines the distance between the z=0\r\n     * plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with\r\n     * z > 0 becomes larger; each 3D-element with z < 0 becomes smaller. The strength of the effect is determined\r\n     * by the value of this property.\r\n     * \r\n     * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/perspective\r\n     * \r\n     * **Changing this value changes it globally for all DOM Elements, as they all share the same parent container.**\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setPerspective\r\n     * @since 3.17.0\r\n     *\r\n     * @param {number} value - The perspective value, in pixels, that determines the distance between the z plane and the user.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setPerspective: function (value)\r\n    {\r\n        this.parent.style.perspective = value + 'px';\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The perspective CSS property value of the _parent DOM Container_. This determines the distance between the z=0\r\n     * plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with\r\n     * z > 0 becomes larger; each 3D-element with z < 0 becomes smaller. The strength of the effect is determined\r\n     * by the value of this property.\r\n     * \r\n     * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/perspective\r\n     * \r\n     * **Changing this value changes it globally for all DOM Elements, as they all share the same parent container.**\r\n     * \r\n     * @name Phaser.GameObjects.DOMElement#perspective\r\n     * @type {number}\r\n     * @since 3.17.0\r\n     */\r\n    perspective: {\r\n\r\n        get: function ()\r\n        {\r\n            return parseFloat(this.parent.style.perspective);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.parent.style.perspective = value + 'px';\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Adds one or more native DOM event listeners onto the underlying Element of this Game Object.\r\n     * The event is then dispatched via this Game Objects standard event emitter.\r\n     * \r\n     * For example:\r\n     * \r\n     * ```javascript\r\n     * var div = this.add.dom(x, y, element);\r\n     * \r\n     * div.addListener('click');\r\n     * \r\n     * div.on('click', handler);\r\n     * ```\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#addListener\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} events - The DOM event/s to listen for. You can specify multiple events by separating them with spaces.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    addListener: function (events)\r\n    {\r\n        if (this.node)\r\n        {\r\n            events = events.split(' ');\r\n\r\n            for (var i = 0; i < events.length; i++)\r\n            {\r\n                this.node.addEventListener(events[i], this.handler, false);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes one or more native DOM event listeners from the underlying Element of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#removeListener\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} events - The DOM event/s to stop listening for. You can specify multiple events by separating them with spaces.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    removeListener: function (events)\r\n    {\r\n        if (this.node)\r\n        {\r\n            events = events.split(' ');\r\n\r\n            for (var i = 0; i < events.length; i++)\r\n            {\r\n                this.node.removeEventListener(events[i], this.handler);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal event proxy to dispatch native DOM Events via this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#dispatchNativeEvent\r\n     * @private\r\n     * @since 3.17.0\r\n     *\r\n     * @param {any} event - The native DOM event.\r\n     */\r\n    dispatchNativeEvent: function (event)\r\n    {\r\n        this.emit(event.type, event);\r\n    },\r\n\r\n    /**\r\n     * Creates a native DOM Element, adds it to the parent DOM Container and then binds it to this Game Object,\r\n     * so you can control it. The `tagName` should be a string and is passed to `document.createElement`:\r\n     * \r\n     * ```javascript\r\n     * this.add.dom().createElement('div');\r\n     * ```\r\n     * \r\n     * For more details on acceptable tag names see: https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\r\n     * \r\n     * You can also pass in a DOMString or style object to set the CSS on the created element, and an optional `innerText`\r\n     * value as well. Here is an example of a DOMString:\r\n     * \r\n     * ```javascript\r\n     * this.add.dom().createElement('div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n     * ```\r\n     * \r\n     * And using a style object:\r\n     * \r\n     * ```javascript\r\n     * var style = {\r\n     *   'background-color': 'lime';\r\n     *   'width': '200px';\r\n     *   'height': '100px';\r\n     *   'font': '48px Arial';\r\n     * };\r\n     * \r\n     * this.add.dom().createElement('div', style, 'Phaser');\r\n     * ```\r\n     * \r\n     * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n     * Any event listeners you may have previously created will need to be re-created after this call.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#createElement\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} tagName - A string that specifies the type of element to be created. The nodeName of the created element is initialized with the value of tagName. Don't use qualified names (like \"html:a\") with this method.\r\n     * @param {(string|any)} [style] - Either a DOMString that holds the CSS styles to be applied to the created element, or an object the styles will be ready from.\r\n     * @param {string} [innerText] - A DOMString that holds the text that will be set as the innerText of the created element.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    createElement: function (tagName, style, innerText)\r\n    {\r\n        return this.setElement(document.createElement(tagName), style, innerText);\r\n    },\r\n\r\n    /**\r\n     * Binds a new DOM Element to this Game Object. If this Game Object already has an Element it is removed from the DOM\r\n     * entirely first. Any event listeners you may have previously created will need to be re-created on the new element.\r\n     * \r\n     * The `element` argument you pass to this method can be either a string tagName:\r\n     * \r\n     * ```javascript\r\n     * <h1 id=\"heading\">Phaser</h1>\r\n     *\r\n     * this.add.dom().setElement('heading');\r\n     * ```\r\n     * \r\n     * Or a reference to an Element instance:\r\n     * \r\n     * ```javascript\r\n     * <h1 id=\"heading\">Phaser</h1>\r\n     *\r\n     * var h1 = document.getElementById('heading');\r\n     * \r\n     * this.add.dom().setElement(h1);\r\n     * ```\r\n     * \r\n     * You can also pass in a DOMString or style object to set the CSS on the created element, and an optional `innerText`\r\n     * value as well. Here is an example of a DOMString:\r\n     * \r\n     * ```javascript\r\n     * this.add.dom().setElement(h1, 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n     * ```\r\n     * \r\n     * And using a style object:\r\n     * \r\n     * ```javascript\r\n     * var style = {\r\n     *   'background-color': 'lime';\r\n     *   'width': '200px';\r\n     *   'height': '100px';\r\n     *   'font': '48px Arial';\r\n     * };\r\n     * \r\n     * this.add.dom().setElement(h1, style, 'Phaser');\r\n     * ```\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setElement\r\n     * @since 3.17.0\r\n     *\r\n     * @param {(string|Element)} element - If a string it is passed to `getElementById()`, or it should be a reference to an existing Element.\r\n     * @param {(string|any)} [style] - Either a DOMString that holds the CSS styles to be applied to the created element, or an object the styles will be ready from.\r\n     * @param {string} [innerText] - A DOMString that holds the text that will be set as the innerText of the created element.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setElement: function (element, style, innerText)\r\n    {\r\n        //  Already got an element? Remove it first\r\n        this.removeElement();\r\n\r\n        var target;\r\n\r\n        if (typeof element === 'string')\r\n        {\r\n            //  hash?\r\n            if (element[0] === '#')\r\n            {\r\n                element = element.substr(1);\r\n            }\r\n\r\n            target = document.getElementById(element);\r\n        }\r\n        else if (typeof element === 'object' && element.nodeType === 1)\r\n        {\r\n            target = element;\r\n        }\r\n\r\n        if (!target)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.node = target;\r\n\r\n        //  style can be empty, a string or a plain object\r\n        if (style && IsPlainObject(style))\r\n        {\r\n            for (var key in style)\r\n            {\r\n                target.style[key] = style[key];\r\n            }\r\n        }\r\n        else if (typeof style === 'string')\r\n        {\r\n            target.style = style;\r\n        }\r\n\r\n        //  Add / Override the values we need\r\n\r\n        target.style.zIndex = '0';\r\n        target.style.display = 'inline';\r\n        target.style.position = 'absolute';\r\n\r\n        //  Node handler\r\n\r\n        target.phaser = this;\r\n\r\n        if (this.parent)\r\n        {\r\n            this.parent.appendChild(target);\r\n        }\r\n\r\n        //  InnerText\r\n\r\n        if (innerText)\r\n        {\r\n            target.innerText = innerText;\r\n        }\r\n\r\n        return this.updateSize();\r\n    },\r\n\r\n    /**\r\n     * Takes a block of html from the HTML Cache, that has previously been preloaded into the game, and then\r\n     * creates a DOM Element from it. The loaded HTML is set as the `innerHTML` property of the created\r\n     * element.\r\n     * \r\n     * Assume the following html is stored in a file called `loginform.html`:\r\n     * \r\n     * ```html\r\n     * <input type=\"text\" name=\"nameField\" placeholder=\"Enter your name\" style=\"font-size: 32px\">\r\n     * <input type=\"button\" name=\"playButton\" value=\"Let's Play\" style=\"font-size: 32px\">\r\n     * ```\r\n     * \r\n     * Which is loaded into your game using the cache key 'login':\r\n     * \r\n     * ```javascript\r\n     * this.load.html('login', 'assets/loginform.html');\r\n     * ```\r\n     * \r\n     * You can create a DOM Element from it using the cache key:\r\n     * \r\n     * ```javascript\r\n     * this.add.dom().createFromCache('login');\r\n     * ```\r\n     * \r\n     * The optional `elementType` argument controls the container that is created, into which the loaded html is inserted.\r\n     * The default is a plain `div` object, but any valid tagName can be given.\r\n     * \r\n     * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n     * Any event listeners you may have previously created will need to be re-created after this call.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#createFromCache\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} The key of the html cache entry to use for this DOM Element.\r\n     * @param {string} [tagName='div'] - The tag name of the element into which all of the loaded html will be inserted. Defaults to a plain div tag.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    createFromCache: function (key, tagName)\r\n    {\r\n        var html = this.cache.get(key);\r\n\r\n        if (html)\r\n        {\r\n            this.createFromHTML(html, tagName);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a string of html and then creates a DOM Element from it. The HTML is set as the `innerHTML`\r\n     * property of the created element.\r\n     * \r\n     * ```javascript\r\n     * let form = `\r\n     * <input type=\"text\" name=\"nameField\" placeholder=\"Enter your name\" style=\"font-size: 32px\">\r\n     * <input type=\"button\" name=\"playButton\" value=\"Let's Play\" style=\"font-size: 32px\">\r\n     * `;\r\n     * ```\r\n     * \r\n     * You can create a DOM Element from it using the string:\r\n     * \r\n     * ```javascript\r\n     * this.add.dom().createFromHTML(form);\r\n     * ```\r\n     * \r\n     * The optional `elementType` argument controls the type of container that is created, into which the html is inserted.\r\n     * The default is a plain `div` object, but any valid tagName can be given.\r\n     * \r\n     * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n     * Any event listeners you may have previously created will need to be re-created after this call.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#createFromHTML\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} A string of html to be set as the `innerHTML` property of the created element.\r\n     * @param {string} [tagName='div'] - The tag name of the element into which all of the html will be inserted. Defaults to a plain div tag.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    createFromHTML: function (html, tagName)\r\n    {\r\n        if (tagName === undefined) { tagName = 'div'; }\r\n\r\n        //  Already got an element? Remove it first\r\n        this.removeElement();\r\n\r\n        var element = document.createElement(tagName);\r\n\r\n        this.node = element;\r\n\r\n        element.style.zIndex = '0';\r\n        element.style.display = 'inline';\r\n        element.style.position = 'absolute';\r\n\r\n        //  Node handler\r\n\r\n        element.phaser = this;\r\n\r\n        if (this.parent)\r\n        {\r\n            this.parent.appendChild(element);\r\n        }\r\n\r\n        element.innerHTML = html;\r\n\r\n        return this.updateSize();\r\n    },\r\n\r\n    /**\r\n     * Removes the current DOM Element bound to this Game Object from the DOM entirely and resets the\r\n     * `node` property of this Game Object to be `null`.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#removeElement\r\n     * @since 3.17.0\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    removeElement: function ()\r\n    {\r\n        if (this.node)\r\n        {\r\n            RemoveFromDOM(this.node);\r\n\r\n            this.node = null;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that calls `getBoundingClientRect` on the `node` and then sets the bounds width\r\n     * and height into the `displayWidth` and `displayHeight` properties, and the `clientWidth` and `clientHeight`\r\n     * values into the `width` and `height` properties respectively.\r\n     * \r\n     * This is called automatically whenever a new element is created or set.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#updateSize\r\n     * @since 3.17.0\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    updateSize: function ()\r\n    {\r\n        var node = this.node;\r\n\r\n        var nodeBounds = node.getBoundingClientRect();\r\n\r\n        this.width = node.clientWidth;\r\n        this.height = node.clientHeight;\r\n\r\n        this.displayWidth = nodeBounds.width || 0;\r\n        this.displayHeight = nodeBounds.height || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n     * them, looking for the first one that has a property matching the given key and value. It then returns this child\r\n     * if found, or `null` if not.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#getChildByProperty\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} property - The property to search the children for.\r\n     * @param {string} value - The value the property must strictly equal.\r\n     * \r\n     * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n     */\r\n    getChildByProperty: function (property, value)\r\n    {\r\n        if (this.node)\r\n        {\r\n            var children = this.node.querySelectorAll('*');\r\n\r\n            for (var i = 0; i < children.length; i++)\r\n            {\r\n                if (children[i][property] === value)\r\n                {\r\n                    return children[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n     * them, looking for the first one that has a matching id. It then returns this child if found, or `null` if not.\r\n     * \r\n     * Be aware that class and id names are case-sensitive.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#getChildByID\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} id - The id to search the children for.\r\n     * \r\n     * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n     */\r\n    getChildByID: function (id)\r\n    {\r\n        return this.getChildByProperty('id', id);\r\n    },\r\n\r\n    /**\r\n     * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n     * them, looking for the first one that has a matching name. It then returns this child if found, or `null` if not.\r\n     * \r\n     * Be aware that class and id names are case-sensitive.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#getChildByName\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} name - The name to search the children for.\r\n     * \r\n     * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n     */\r\n    getChildByName: function (name)\r\n    {\r\n        return this.getChildByProperty('name', name);\r\n    },\r\n\r\n    /**\r\n     * Sets the `className` property of the DOM Element node and updates the internal sizes.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setClassName\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} className - A string representing the class or space-separated classes of the element.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setClassName: function (className)\r\n    {\r\n        if (this.node)\r\n        {\r\n            this.node.className = className;\r\n\r\n            this.updateSize();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the `innerText` property of the DOM Element node and updates the internal sizes.\r\n     * \r\n     * Note that only certain types of Elements can have `innerText` set on them.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setText\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} text - A DOMString representing the rendered text content of the element.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setText: function (text)\r\n    {\r\n        if (this.node)\r\n        {\r\n            this.node.innerText = text;\r\n\r\n            this.updateSize();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the `innerHTML` property of the DOM Element node and updates the internal sizes.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#setHTML\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} html - A DOMString of html to be set as the `innerHTML` property of the element.\r\n     * \r\n     * @return {this} This DOM Element instance.\r\n     */\r\n    setHTML: function (html)\r\n    {\r\n        if (this.node)\r\n        {\r\n            this.node.innerHTML = html;\r\n\r\n            this.updateSize();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Runs internal update tasks.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#preUpdate\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    preUpdate: function ()\r\n    {\r\n        var parent = this.parentContainer;\r\n        var node = this.node;\r\n\r\n        if (node && parent && !parent.willRender())\r\n        {\r\n            node.style.display = 'none';\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n     * \r\n     * DOMElements always return `true` as they need to still set values during the render pass, even if not visible.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#willRender\r\n     * @since 3.17.0\r\n     *\r\n     * @return {boolean} `true` if the Game Object should be rendered, otherwise `false`.\r\n     */\r\n    willRender: function ()\r\n    {\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Handles the pre-destroy step for the DOM Element, which removes the underlying node from the DOM.\r\n     *\r\n     * @method Phaser.GameObjects.DOMElement#preDestroy\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.removeElement();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = DOMElement;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnQuanM/YjYyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnR0FBb0I7QUFDbkQsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELG9CQUFvQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNyRCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsY0FBYyxlQUFlO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxjQUFjLGVBQWU7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxjQUFjLGVBQWU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsaUJBQWlCOztBQUVyRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZG9tZWxlbWVudC9ET01FbGVtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIERPTUVsZW1lbnRSZW5kZXIgPSByZXF1aXJlKCcuL0RPTUVsZW1lbnRSZW5kZXInKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFJlbW92ZUZyb21ET00gPSByZXF1aXJlKCcuLi8uLi9kb20vUmVtb3ZlRnJvbURPTScpO1xyXG52YXIgVmVjdG9yNCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yNCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogRE9NIEVsZW1lbnQgR2FtZSBPYmplY3RzIGFyZSBhIHdheSB0byBjb250cm9sIGFuZCBtYW5pcHVsYXRlIEhUTUwgRWxlbWVudHMgb3ZlciB0aGUgdG9wIG9mIHlvdXIgZ2FtZS5cclxuICogXHJcbiAqIEluIG9yZGVyIGZvciBET00gRWxlbWVudHMgdG8gZGlzcGxheSB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIGdhbWVcclxuICogY29uZmlndXJhdGlvbiBvYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGRvbSB7XHJcbiAqICAgY3JlYXRlQ29udGFpbmVyOiB0cnVlXHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaXMgYWRkZWQsIFBoYXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgRE9NIENvbnRhaW5lciBkaXYgdGhhdCBpcyBwb3NpdGlvbmVkIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB0aGUgZ2FtZSBjYW52YXMuIFRoaXMgZGl2IGlzIHNpemVkIHRvIG1hdGNoIHRoZSBjYW52YXMsIGFuZCBpZiB0aGUgY2FudmFzIHNpemUgY2hhbmdlcywgYXMgYSByZXN1bHQgb2ZcclxuICogc2V0dGluZ3Mgd2l0aGluIHRoZSBTY2FsZSBNYW5hZ2VyLCB0aGUgZG9tIGNvbnRhaW5lciBpcyByZXNpemVkIGFjY29yZGluZ2x5LlxyXG4gKiBcclxuICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBieSBlaXRoZXIgcGFzc2luZyBpbiBET01TdHJpbmdzLCBvciBieSBwYXNzaW5nIGluIGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nXHJcbiAqIEVsZW1lbnQgdGhhdCB5b3Ugd2lzaCB0byBiZSBwbGFjZWQgdW5kZXIgdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBGb3IgZXhhbXBsZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQuZG9tKHgsIHksICdkaXYnLCAnYmFja2dyb3VuZC1jb2xvcjogbGltZTsgd2lkdGg6IDIyMHB4OyBoZWlnaHQ6IDEwMHB4OyBmb250OiA0OHB4IEFyaWFsJywgJ1BoYXNlcicpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIFRoZSBhYm92ZSBjb2RlIHdpbGwgaW5zZXJ0IGEgZGl2IGVsZW1lbnQgaW50byB0aGUgRE9NIENvbnRhaW5lciBhdCB0aGUgZ2l2ZW4geC95IGNvb3JkaW5hdGUuIFRoZSBET01TdHJpbmcgaW5cclxuICogdGhlIDR0aCBhcmd1bWVudCBzZXRzIHRoZSBpbml0aWFsIENTUyBzdHlsZSBvZiB0aGUgZGl2IGFuZCB0aGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIGlubmVyIHRleHQuIEluIHRoaXMgY2FzZSxcclxuICogaXQgd2lsbCBjcmVhdGUgYSBsaW1lIGNvbG9yZWQgZGl2IHRoYXQgaXMgMjIwcHggYnkgMTAwcHggaW4gc2l6ZSB3aXRoIHRoZSB0ZXh0IFBoYXNlciBpbiBpdCwgaW4gYW4gQXJpYWwgZm9udC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgbmVhcmx5IGFsd2F5cywgd2l0aG91dCBleGNlcHRpb24sIHVzZSBleHBsaWNpdGx5IHNpemVkIEhUTUwgRWxlbWVudHMsIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnRyb2xcclxuICogYWxpZ25tZW50IGFuZCBwb3NpdGlvbmluZyBvZiB0aGUgZWxlbWVudHMgbmV4dCB0byByZWd1bGFyIGdhbWUgY29udGVudC5cclxuICogXHJcbiAqIFJhdGhlciB0aGFuIHNwZWNpZnkgdGhlIENTUyBhbmQgSFRNTCBkaXJlY3RseSB5b3UgY2FuIHVzZSB0aGUgYGxvYWQuaHRtbGAgRmlsZSBMb2FkZXIgdG8gbG9hZCBpdCBpbnRvIHRoZVxyXG4gKiBjYWNoZSBhbmQgdGhlbiB1c2UgdGhlIGBjcmVhdGVGcm9tQ2FjaGVgIG1ldGhvZCBpbnN0ZWFkLiBZb3UgY2FuIGFsc28gdXNlIGBjcmVhdGVGcm9tSFRNTGAgYW5kIHZhcmlvdXMgb3RoZXJcclxuICogbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhpcyBjbGFzcyB0byBoZWxwIGNvbnN0cnVjdCB5b3VyIGVsZW1lbnRzLlxyXG4gKiBcclxuICogT25jZSB0aGUgZWxlbWVudCBoYXMgYmVlbiBjcmVhdGVkIHlvdSBjYW4gdGhlbiBjb250cm9sIGl0IGxpa2UgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdC4gWW91IGNhbiBzZXQgaXRzXHJcbiAqIHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24sIGFscGhhIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBJdCB3aWxsIG1vdmUgYXMgdGhlIG1haW4gU2NlbmUgQ2FtZXJhIG1vdmVzIGFuZCBiZSBjbGlwcGVkXHJcbiAqIGF0IHRoZSBlZGdlIG9mIHRoZSBjYW52YXMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHNvbWUgbGltaXRhdGlvbnMgb2YgRE9NIEVsZW1lbnRzOiBUaGUgb2J2aW91cyBvbmUgaXMgdGhhdFxyXG4gKiB0aGV5IGFwcGVhciBhYm92ZSBvciBiZWxvdyB5b3VyIGdhbWUgY2FudmFzLiBZb3UgY2Fubm90IGJsZW5kIHRoZW0gaW50byB0aGUgZGlzcGxheSBsaXN0LCBtZWFuaW5nIHlvdSBjYW5ub3QgaGF2ZVxyXG4gKiBhIERPTSBFbGVtZW50LCB0aGVuIGEgU3ByaXRlLCB0aGVuIGFub3RoZXIgRE9NIEVsZW1lbnQgYmVoaW5kIGl0LlxyXG4gKiBcclxuICogVGhleSBhbHNvIGNhbm5vdCBiZSBlbmFibGVkIGZvciBpbnB1dC4gVG8gZG8gdGhhdCwgeW91IGhhdmUgdG8gdXNlIHRoZSBgYWRkTGlzdGVuZXJgIG1ldGhvZCB0byBhZGQgbmF0aXZlIGV2ZW50XHJcbiAqIGxpc3RlbmVycyBkaXJlY3RseS4gVGhlIGZpbmFsIGxpbWl0YXRpb24gaXMgdG8gZG8gd2l0aCBjYW1lcmFzLiBUaGUgRE9NIENvbnRhaW5lciBpcyBzaXplZCB0byBtYXRjaCB0aGUgZ2FtZSBjYW52YXNcclxuICogZW50aXJlbHkgYW5kIGNsaXBwZWQgYWNjb3JkaW5nbHkuIERPTSBFbGVtZW50cyByZXNwZWN0IGNhbWVyYSBzY3JvbGxpbmcgYW5kIHNjcm9sbEZhY3RvciBzZXR0aW5ncywgYnV0IGlmIHlvdVxyXG4gKiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGNhbWVyYSBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLCB0aGV5IHdvbid0IGJlIGNsaXBwZWQgYWNjb3JkaW5nbHkuXHJcbiAqIFxyXG4gKiBBbHNvLCBhbGwgRE9NIEVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBzYW1lIERPTSBDb250YWluZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggU2NlbmUgdGhleSBhcmUgY3JlYXRlZCBpbi5cclxuICogXHJcbiAqIERPTSBFbGVtZW50cyBhcmUgYSBwb3dlcmZ1bCB3YXkgdG8gYWxpZ24gbmF0aXZlIEhUTUwgd2l0aCB5b3VyIFBoYXNlciBHYW1lIE9iamVjdHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGluc2VydFxyXG4gKiBhIGxvZ2luIGZvcm0gZm9yIGEgbXVsdGlwbGF5ZXIgZ2FtZSBkaXJlY3RseSBpbnRvIHlvdXIgdGl0bGUgc2NyZWVuLiBPciBhIHRleHQgaW5wdXQgYm94IGZvciBhIGhpZ2hzY29yZSB0YWJsZS5cclxuICogT3IgYSBiYW5uZXIgYWQgZnJvbSBhIDNyZCBwYXJ0eSBzZXJ2aWNlLiBPciBwZXJoYXBzIHlvdSdkIGxpa2UgdG8gdXNlIHRoZW0gZm9yIGhpZ2ggcmVzb2x1dGlvbiB0ZXh0IGRpc3BsYXkgYW5kXHJcbiAqIFVJLiBUaGUgY2hvaWNlIGlzIHVwIHRvIHlvdSwganVzdCByZW1lbWJlciB0aGF0IHlvdSdyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgSFRNTCBhbmQgQ1NTIGZsb2F0aW5nIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB5b3VyIGdhbWUsIGFuZCBzaG91bGQgdHJlYXQgaXQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBET01FbGVtZW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBET00gRWxlbWVudCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIERPTSBFbGVtZW50IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBbZWxlbWVudF0gLSBBbiBleGlzdGluZyBET00gZWxlbWVudCwgb3IgYSBzdHJpbmcuIElmIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSAjIGl0IHdpbGwgZG8gYSBgZ2V0RWxlbWVudEJ5SWRgIGxvb2stdXAgb24gdGhlIHN0cmluZyAobWludXMgdGhlIGhhc2gpLiBXaXRob3V0IGEgaGFzaCwgaXQgcmVwcmVzZW50cyB0aGUgdHlwZSBvZiBlbGVtZW50IHRvIGNyZWF0ZSwgaS5lLiAnZGl2Jy5cclxuICogQHBhcmFtIHsoc3RyaW5nfGFueSl9IFtzdHlsZV0gLSBJZiBhIHN0cmluZywgd2lsbCBiZSBzZXQgZGlyZWN0bHkgYXMgdGhlIGVsZW1lbnRzIGBzdHlsZWAgcHJvcGVydHkgdmFsdWUuIElmIGEgcGxhaW4gb2JqZWN0LCB3aWxsIGJlIGl0ZXJhdGVkIGFuZCB0aGUgdmFsdWVzIHRyYW5zZmVycmVkLiBJbiBib3RoIGNhc2VzIHRoZSB2YWx1ZXMgcmVwbGFjaW5nIHdoYXRldmVyIENTUyBzdHlsZXMgbWF5IGhhdmUgYmVlbiBwcmV2aW91c2x5IHNldC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtpbm5lclRleHRdIC0gSWYgZ2l2ZW4sIHdpbGwgYmUgc2V0IGRpcmVjdGx5IGFzIHRoZSBlbGVtZW50cyBgaW5uZXJUZXh0YCBwcm9wZXJ0eSB2YWx1ZSwgcmVwbGFjaW5nIHdoYXRldmVyIHdhcyB0aGVyZSBiZWZvcmUuXHJcbiAqL1xyXG52YXIgRE9NRWxlbWVudCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIERPTUVsZW1lbnRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBET01FbGVtZW50IChzY2VuZSwgeCwgeSwgZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dClcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdET01FbGVtZW50Jyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgRE9NIENvbnRhaW5lciB0aGF0IHRoZSBHYW1lIGluc3RhbmNlIGNyZWF0ZWQgd2hlbiBpdCBzdGFydGVkLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IHNjZW5lLnN5cy5nYW1lLmRvbUNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEhUTUwgQ2FjaGUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHNjZW5lLnN5cy5jYWNoZS5odG1sO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWN0dWFsIERPTSBFbGVtZW50IHRoYXQgdGhpcyBHYW1lIE9iamVjdCBpcyBib3VuZCB0by4gRm9yIGV4YW1wbGUsIGlmIHlvdSd2ZSBjcmVhdGVkIGEgYDxkaXY+YFxyXG4gICAgICAgICAqIHRoZW4gdGhpcyBwcm9wZXJ0eSBpcyBhIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhhdCBlbGVtZW50IHdpdGhpbiB0aGUgZG9tLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I25vZGVcclxuICAgICAgICAgKiBAdHlwZSB7RWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ub2RlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGEgRE9NIEVsZW1lbnQgd2lsbCBoYXZlIGl0cyB0cmFuc2Zvcm0sIGRpc3BsYXksIG9wYWNpdHksIHpJbmRleCBhbmQgYmxlbmQgbW9kZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICogdXBkYXRlZCB3aGVuIGl0cyByZW5kZXJlZC4gSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZXNlIGNoYW5nZWQgb3RoZXIgdGhhbiB0aGVcclxuICAgICAgICAgKiBDU1MgdHJhbnNmb3JtLCB0aGVuIHNldCB0aGlzIGZsYWcgdG8gYHRydWVgLiBXaGVuIGB0cnVlYCBvbmx5IHRoZSBDU1MgVHJhbnNmb3JtIGlzIGFwcGxpZWQgYW5kIGl0J3NcclxuICAgICAgICAgKiB1cCB0byB5b3UgdG8ga2VlcCB0cmFjayBvZiBhbmQgc2V0IHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgY2FuIGJlIGhhbmR5IGlmLCBmb3IgZXhhbXBsZSwgeW91J3ZlIGEgbmVzdGVkIERPTSBFbGVtZW50IGFuZCB5b3UgZG9uJ3Qgd2FudCB0aGUgb3BhY2l0eSB0byBiZVxyXG4gICAgICAgICAqIHBpY2tlZC11cCBieSBhbnkgb2YgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3RyYW5zZm9ybU9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Pbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2tld1hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNrZXdYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlLCBpbiByYWRpYW5zLCBieSB3aGljaCB0byBza2V3IHRoZSBET00gRWxlbWVudCBvbiB0aGUgdmVydGljYWwgYXhpcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2tld1lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNrZXdZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBWZWN0b3I0IHRoYXQgY29udGFpbnMgdGhlIDNEIHJvdGF0aW9uIG9mIHRoaXMgRE9NIEVsZW1lbnQgYXJvdW5kIGEgZml4ZWQgYXhpcyBpbiAzRCBzcGFjZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBbGwgdmFsdWVzIGluIHRoZSBWZWN0b3I0IGFyZSB0cmVhdGVkIGFzIGRlZ3JlZXMsIHVubGVzcyB0aGUgYHJvdGF0ZTNkQW5nbGVgIHByb3BlcnR5IGlzIGNoYW5nZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZvbGxvd2luZyBNRE4gcGFnZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtLWZ1bmN0aW9uL3JvdGF0ZTNkXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcm90YXRlM2RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yNH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3RhdGUzZCA9IG5ldyBWZWN0b3I0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB1bml0IHRoYXQgcmVwcmVzZW50cyB0aGUgM0Qgcm90YXRpb24gdmFsdWVzLiBCeSBkZWZhdWx0IHRoaXMgaXMgYGRlZ2AgZm9yIGRlZ3JlZXMsIGJ1dCBjYW5cclxuICAgICAgICAgKiBiZSBjaGFuZ2VkIHRvIGFueSBzdXBwb3J0ZWQgdW5pdC4gU2VlIHRoaXMgcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90cmFuc2Zvcm0tZnVuY3Rpb24vcm90YXRlM2RcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNyb3RhdGUzZEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3RhdGUzZEFuZ2xlID0gJ2RlZyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBGb3IgYSBET00gRWxlbWVudCB0aGlzIHByb3BlcnR5IGlzIHJlYWQtb25seS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkgYGRpc3BsYXlXaWR0aGAgaG9sZHMgdGhlIGNvbXB1dGVkIGJvdW5kcyBvZiB0aGlzIERPTSBFbGVtZW50LCBmYWN0b3JpbmcgaW4gc2NhbGluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEZvciBhIERPTSBFbGVtZW50IHRoaXMgcHJvcGVydHkgaXMgcmVhZC1vbmx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBwcm9wZXJ0eSBgZGlzcGxheUhlaWdodGAgaG9sZHMgdGhlIGNvbXB1dGVkIGJvdW5kcyBvZiB0aGlzIERPTSBFbGVtZW50LCBmYWN0b3JpbmcgaW4gc2NhbGluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb21wdXRlZCBkaXNwbGF5IHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QsIGJhc2VkIG9uIHRoZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCBET00gY2FsbC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkgYHdpZHRoYCBob2xkcyB0aGUgdW4tc2NhbGVkIHdpZHRoIG9mIHRoaXMgRE9NIEVsZW1lbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZGlzcGxheVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29tcHV0ZWQgZGlzcGxheSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdCwgYmFzZWQgb24gdGhlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIERPTSBjYWxsLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBwcm9wZXJ0eSBgaGVpZ2h0YCBob2xkcyB0aGUgdW4tc2NhbGVkIGhlaWdodCBvZiB0aGlzIERPTSBFbGVtZW50LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2Rpc3BsYXlIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBuYXRpdmUgZXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNoYW5kbGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmRpc3BhdGNoTmF0aXZlRXZlbnQuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBoYXNoP1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFswXSA9PT0gJyMnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudC5zdWJzdHIoMSksIHN0eWxlLCBpbm5lclRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIHN0eWxlLCBpbm5lclRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNrZXcgdmFsdWVzIG9mIHRoaXMgRE9NIEVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RyYW5zZm9ybVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2V0U2tld1xyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIHZlcnRpY2FsIGF4aXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNrZXc6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2tld1ggPSB4O1xyXG4gICAgICAgIHRoaXMuc2tld1kgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwZXJzcGVjdGl2ZSBDU1MgcHJvcGVydHkgb2YgdGhlIF9wYXJlbnQgRE9NIENvbnRhaW5lcl8uIFRoaXMgZGV0ZXJtaW5lcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgej0wXHJcbiAgICAgKiBwbGFuZSBhbmQgdGhlIHVzZXIgaW4gb3JkZXIgdG8gZ2l2ZSBhIDNELXBvc2l0aW9uZWQgZWxlbWVudCBzb21lIHBlcnNwZWN0aXZlLiBFYWNoIDNEIGVsZW1lbnQgd2l0aFxyXG4gICAgICogeiA+IDAgYmVjb21lcyBsYXJnZXI7IGVhY2ggM0QtZWxlbWVudCB3aXRoIHogPCAwIGJlY29tZXMgc21hbGxlci4gVGhlIHN0cmVuZ3RoIG9mIHRoZSBlZmZlY3QgaXMgZGV0ZXJtaW5lZFxyXG4gICAgICogYnkgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BlcnNwZWN0aXZlXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2hhbmdpbmcgdGhpcyB2YWx1ZSBjaGFuZ2VzIGl0IGdsb2JhbGx5IGZvciBhbGwgRE9NIEVsZW1lbnRzLCBhcyB0aGV5IGFsbCBzaGFyZSB0aGUgc2FtZSBwYXJlbnQgY29udGFpbmVyLioqXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNzZXRQZXJzcGVjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBwZXJzcGVjdGl2ZSB2YWx1ZSwgaW4gcGl4ZWxzLCB0aGF0IGRldGVybWluZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHogcGxhbmUgYW5kIHRoZSB1c2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQZXJzcGVjdGl2ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFyZW50LnN0eWxlLnBlcnNwZWN0aXZlID0gdmFsdWUgKyAncHgnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGVyc3BlY3RpdmUgQ1NTIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBfcGFyZW50IERPTSBDb250YWluZXJfLiBUaGlzIGRldGVybWluZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHo9MFxyXG4gICAgICogcGxhbmUgYW5kIHRoZSB1c2VyIGluIG9yZGVyIHRvIGdpdmUgYSAzRC1wb3NpdGlvbmVkIGVsZW1lbnQgc29tZSBwZXJzcGVjdGl2ZS4gRWFjaCAzRCBlbGVtZW50IHdpdGhcclxuICAgICAqIHogPiAwIGJlY29tZXMgbGFyZ2VyOyBlYWNoIDNELWVsZW1lbnQgd2l0aCB6IDwgMCBiZWNvbWVzIHNtYWxsZXIuIFRoZSBzdHJlbmd0aCBvZiB0aGUgZWZmZWN0IGlzIGRldGVybWluZWRcclxuICAgICAqIGJ5IHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9wZXJzcGVjdGl2ZVxyXG4gICAgICogXHJcbiAgICAgKiAqKkNoYW5naW5nIHRoaXMgdmFsdWUgY2hhbmdlcyBpdCBnbG9iYWxseSBmb3IgYWxsIERPTSBFbGVtZW50cywgYXMgdGhleSBhbGwgc2hhcmUgdGhlIHNhbWUgcGFyZW50IGNvbnRhaW5lci4qKlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwZXJzcGVjdGl2ZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5wYXJlbnQuc3R5bGUucGVyc3BlY3RpdmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUucGVyc3BlY3RpdmUgPSB2YWx1ZSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIG5hdGl2ZSBET00gZXZlbnQgbGlzdGVuZXJzIG9udG8gdGhlIHVuZGVybHlpbmcgRWxlbWVudCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGV2ZW50IGlzIHRoZW4gZGlzcGF0Y2hlZCB2aWEgdGhpcyBHYW1lIE9iamVjdHMgc3RhbmRhcmQgZXZlbnQgZW1pdHRlci5cclxuICAgICAqIFxyXG4gICAgICogRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHZhciBkaXYgPSB0aGlzLmFkZC5kb20oeCwgeSwgZWxlbWVudCk7XHJcbiAgICAgKiBcclxuICAgICAqIGRpdi5hZGRMaXN0ZW5lcignY2xpY2snKTtcclxuICAgICAqIFxyXG4gICAgICogZGl2Lm9uKCdjbGljaycsIGhhbmRsZXIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNhZGRMaXN0ZW5lclxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudHMgLSBUaGUgRE9NIGV2ZW50L3MgdG8gbGlzdGVuIGZvci4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGV2ZW50cyBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCBzcGFjZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGFkZExpc3RlbmVyOiBmdW5jdGlvbiAoZXZlbnRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudHMgPSBldmVudHMuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHRoaXMuaGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIG9uZSBvciBtb3JlIG5hdGl2ZSBET00gZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIHVuZGVybHlpbmcgRWxlbWVudCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcmVtb3ZlTGlzdGVuZXJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRzIC0gVGhlIERPTSBldmVudC9zIHRvIHN0b3AgbGlzdGVuaW5nIGZvci4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGV2ZW50cyBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCBzcGFjZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbiAoZXZlbnRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudHMgPSBldmVudHMuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHRoaXMuaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGV2ZW50IHByb3h5IHRvIGRpc3BhdGNoIG5hdGl2ZSBET00gRXZlbnRzIHZpYSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZGlzcGF0Y2hOYXRpdmVFdmVudFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBldmVudC5cclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2hOYXRpdmVFdmVudDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW1pdChldmVudC50eXBlLCBldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5hdGl2ZSBET00gRWxlbWVudCwgYWRkcyBpdCB0byB0aGUgcGFyZW50IERPTSBDb250YWluZXIgYW5kIHRoZW4gYmluZHMgaXQgdG8gdGhpcyBHYW1lIE9iamVjdCxcclxuICAgICAqIHNvIHlvdSBjYW4gY29udHJvbCBpdC4gVGhlIGB0YWdOYW1lYCBzaG91bGQgYmUgYSBzdHJpbmcgYW5kIGlzIHBhc3NlZCB0byBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGRldGFpbHMgb24gYWNjZXB0YWJsZSB0YWcgbmFtZXMgc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvY3JlYXRlRWxlbWVudFxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhIERPTVN0cmluZyBvciBzdHlsZSBvYmplY3QgdG8gc2V0IHRoZSBDU1Mgb24gdGhlIGNyZWF0ZWQgZWxlbWVudCwgYW5kIGFuIG9wdGlvbmFsIGBpbm5lclRleHRgXHJcbiAgICAgKiB2YWx1ZSBhcyB3ZWxsLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBET01TdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUVsZW1lbnQoJ2RpdicsICdiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOyB3aWR0aDogMjIwcHg7IGhlaWdodDogMTAwcHg7IGZvbnQ6IDQ4cHggQXJpYWwnLCAnUGhhc2VyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQW5kIHVzaW5nIGEgc3R5bGUgb2JqZWN0OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgc3R5bGUgPSB7XHJcbiAgICAgKiAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2xpbWUnO1xyXG4gICAgICogICAnd2lkdGgnOiAnMjAwcHgnO1xyXG4gICAgICogICAnaGVpZ2h0JzogJzEwMHB4JztcclxuICAgICAqICAgJ2ZvbnQnOiAnNDhweCBBcmlhbCc7XHJcbiAgICAgKiB9O1xyXG4gICAgICogXHJcbiAgICAgKiB0aGlzLmFkZC5kb20oKS5jcmVhdGVFbGVtZW50KCdkaXYnLCBzdHlsZSwgJ1BoYXNlcicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgYWxyZWFkeSBoYXMgYW4gRWxlbWVudCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gZW50aXJlbHkgZmlyc3QuXHJcbiAgICAgKiBBbnkgZXZlbnQgbGlzdGVuZXJzIHlvdSBtYXkgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2lsbCBuZWVkIHRvIGJlIHJlLWNyZWF0ZWQgYWZ0ZXIgdGhpcyBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjY3JlYXRlRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgZWxlbWVudCB0byBiZSBjcmVhdGVkLiBUaGUgbm9kZU5hbWUgb2YgdGhlIGNyZWF0ZWQgZWxlbWVudCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSBvZiB0YWdOYW1lLiBEb24ndCB1c2UgcXVhbGlmaWVkIG5hbWVzIChsaWtlIFwiaHRtbDphXCIpIHdpdGggdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8YW55KX0gW3N0eWxlXSAtIEVpdGhlciBhIERPTVN0cmluZyB0aGF0IGhvbGRzIHRoZSBDU1Mgc3R5bGVzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNyZWF0ZWQgZWxlbWVudCwgb3IgYW4gb2JqZWN0IHRoZSBzdHlsZXMgd2lsbCBiZSByZWFkeSBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtpbm5lclRleHRdIC0gQSBET01TdHJpbmcgdGhhdCBob2xkcyB0aGUgdGV4dCB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBpbm5lclRleHQgb2YgdGhlIGNyZWF0ZWQgZWxlbWVudC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKHRhZ05hbWUsIHN0eWxlLCBpbm5lclRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RWxlbWVudChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpLCBzdHlsZSwgaW5uZXJUZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyBhIG5ldyBET00gRWxlbWVudCB0byB0aGlzIEdhbWUgT2JqZWN0LiBJZiB0aGlzIEdhbWUgT2JqZWN0IGFscmVhZHkgaGFzIGFuIEVsZW1lbnQgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICAgICAqIGVudGlyZWx5IGZpcnN0LiBBbnkgZXZlbnQgbGlzdGVuZXJzIHlvdSBtYXkgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2lsbCBuZWVkIHRvIGJlIHJlLWNyZWF0ZWQgb24gdGhlIG5ldyBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYGVsZW1lbnRgIGFyZ3VtZW50IHlvdSBwYXNzIHRvIHRoaXMgbWV0aG9kIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgdGFnTmFtZTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogPGgxIGlkPVwiaGVhZGluZ1wiPlBoYXNlcjwvaDE+XHJcbiAgICAgKlxyXG4gICAgICogdGhpcy5hZGQuZG9tKCkuc2V0RWxlbWVudCgnaGVhZGluZycpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIE9yIGEgcmVmZXJlbmNlIHRvIGFuIEVsZW1lbnQgaW5zdGFuY2U6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIDxoMSBpZD1cImhlYWRpbmdcIj5QaGFzZXI8L2gxPlxyXG4gICAgICpcclxuICAgICAqIHZhciBoMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkaW5nJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLnNldEVsZW1lbnQoaDEpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwYXNzIGluIGEgRE9NU3RyaW5nIG9yIHN0eWxlIG9iamVjdCB0byBzZXQgdGhlIENTUyBvbiB0aGUgY3JlYXRlZCBlbGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgYGlubmVyVGV4dGBcclxuICAgICAqIHZhbHVlIGFzIHdlbGwuIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIERPTVN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5hZGQuZG9tKCkuc2V0RWxlbWVudChoMSwgJ2JhY2tncm91bmQtY29sb3I6IGxpbWU7IHdpZHRoOiAyMjBweDsgaGVpZ2h0OiAxMDBweDsgZm9udDogNDhweCBBcmlhbCcsICdQaGFzZXInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBBbmQgdXNpbmcgYSBzdHlsZSBvYmplY3Q6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHZhciBzdHlsZSA9IHtcclxuICAgICAqICAgJ2JhY2tncm91bmQtY29sb3InOiAnbGltZSc7XHJcbiAgICAgKiAgICd3aWR0aCc6ICcyMDBweCc7XHJcbiAgICAgKiAgICdoZWlnaHQnOiAnMTAwcHgnO1xyXG4gICAgICogICAnZm9udCc6ICc0OHB4IEFyaWFsJztcclxuICAgICAqIH07XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLnNldEVsZW1lbnQoaDEsIHN0eWxlLCAnUGhhc2VyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3NldEVsZW1lbnRcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8RWxlbWVudCl9IGVsZW1lbnQgLSBJZiBhIHN0cmluZyBpdCBpcyBwYXNzZWQgdG8gYGdldEVsZW1lbnRCeUlkKClgLCBvciBpdCBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gYW4gZXhpc3RpbmcgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbc3R5bGVdIC0gRWl0aGVyIGEgRE9NU3RyaW5nIHRoYXQgaG9sZHMgdGhlIENTUyBzdHlsZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgY3JlYXRlZCBlbGVtZW50LCBvciBhbiBvYmplY3QgdGhlIHN0eWxlcyB3aWxsIGJlIHJlYWR5IGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2lubmVyVGV4dF0gLSBBIERPTVN0cmluZyB0aGF0IGhvbGRzIHRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBzZXQgYXMgdGhlIGlubmVyVGV4dCBvZiB0aGUgY3JlYXRlZCBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dClcclxuICAgIHtcclxuICAgICAgICAvLyAgQWxyZWFkeSBnb3QgYW4gZWxlbWVudD8gUmVtb3ZlIGl0IGZpcnN0XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgaGFzaD9cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRbMF0gPT09ICcjJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0YXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubm9kZSA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIHN0eWxlIGNhbiBiZSBlbXB0eSwgYSBzdHJpbmcgb3IgYSBwbGFpbiBvYmplY3RcclxuICAgICAgICBpZiAoc3R5bGUgJiYgSXNQbGFpbk9iamVjdChzdHlsZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3R5bGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlID0gc3R5bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWRkIC8gT3ZlcnJpZGUgdGhlIHZhbHVlcyB3ZSBuZWVkXHJcblxyXG4gICAgICAgIHRhcmdldC5zdHlsZS56SW5kZXggPSAnMCc7XHJcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuICAgICAgICB0YXJnZXQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG5cclxuICAgICAgICAvLyAgTm9kZSBoYW5kbGVyXHJcblxyXG4gICAgICAgIHRhcmdldC5waGFzZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElubmVyVGV4dFxyXG5cclxuICAgICAgICBpZiAoaW5uZXJUZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LmlubmVyVGV4dCA9IGlubmVyVGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNpemUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIGJsb2NrIG9mIGh0bWwgZnJvbSB0aGUgSFRNTCBDYWNoZSwgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIHByZWxvYWRlZCBpbnRvIHRoZSBnYW1lLCBhbmQgdGhlblxyXG4gICAgICogY3JlYXRlcyBhIERPTSBFbGVtZW50IGZyb20gaXQuIFRoZSBsb2FkZWQgSFRNTCBpcyBzZXQgYXMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBjcmVhdGVkXHJcbiAgICAgKiBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBBc3N1bWUgdGhlIGZvbGxvd2luZyBodG1sIGlzIHN0b3JlZCBpbiBhIGZpbGUgY2FsbGVkIGBsb2dpbmZvcm0uaHRtbGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGh0bWxcclxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lRmllbGRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4XCI+XHJcbiAgICAgKiA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJwbGF5QnV0dG9uXCIgdmFsdWU9XCJMZXQncyBQbGF5XCIgc3R5bGU9XCJmb250LXNpemU6IDMycHhcIj5cclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBXaGljaCBpcyBsb2FkZWQgaW50byB5b3VyIGdhbWUgdXNpbmcgdGhlIGNhY2hlIGtleSAnbG9naW4nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmxvYWQuaHRtbCgnbG9naW4nLCAnYXNzZXRzL2xvZ2luZm9ybS5odG1sJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBmcm9tIGl0IHVzaW5nIHRoZSBjYWNoZSBrZXk6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUZyb21DYWNoZSgnbG9naW4nKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgb3B0aW9uYWwgYGVsZW1lbnRUeXBlYCBhcmd1bWVudCBjb250cm9scyB0aGUgY29udGFpbmVyIHRoYXQgaXMgY3JlYXRlZCwgaW50byB3aGljaCB0aGUgbG9hZGVkIGh0bWwgaXMgaW5zZXJ0ZWQuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhIHBsYWluIGBkaXZgIG9iamVjdCwgYnV0IGFueSB2YWxpZCB0YWdOYW1lIGNhbiBiZSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBFbGVtZW50LCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBlbnRpcmVseSBmaXJzdC5cclxuICAgICAqIEFueSBldmVudCBsaXN0ZW5lcnMgeW91IG1heSBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB3aWxsIG5lZWQgdG8gYmUgcmUtY3JlYXRlZCBhZnRlciB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNjcmVhdGVGcm9tQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBrZXkgb2YgdGhlIGh0bWwgY2FjaGUgZW50cnkgdG8gdXNlIGZvciB0aGlzIERPTSBFbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWdOYW1lPSdkaXYnXSAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCBpbnRvIHdoaWNoIGFsbCBvZiB0aGUgbG9hZGVkIGh0bWwgd2lsbCBiZSBpbnNlcnRlZC4gRGVmYXVsdHMgdG8gYSBwbGFpbiBkaXYgdGFnLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ2FjaGU6IGZ1bmN0aW9uIChrZXksIHRhZ05hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGh0bWwgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoaHRtbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRnJvbUhUTUwoaHRtbCwgdGFnTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCB0aGVuIGNyZWF0ZXMgYSBET00gRWxlbWVudCBmcm9tIGl0LiBUaGUgSFRNTCBpcyBzZXQgYXMgdGhlIGBpbm5lckhUTUxgXHJcbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRlZCBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBsZXQgZm9ybSA9IGBcclxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lRmllbGRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4XCI+XHJcbiAgICAgKiA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJwbGF5QnV0dG9uXCIgdmFsdWU9XCJMZXQncyBQbGF5XCIgc3R5bGU9XCJmb250LXNpemU6IDMycHhcIj5cclxuICAgICAqIGA7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBmcm9tIGl0IHVzaW5nIHRoZSBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUZyb21IVE1MKGZvcm0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBvcHRpb25hbCBgZWxlbWVudFR5cGVgIGFyZ3VtZW50IGNvbnRyb2xzIHRoZSB0eXBlIG9mIGNvbnRhaW5lciB0aGF0IGlzIGNyZWF0ZWQsIGludG8gd2hpY2ggdGhlIGh0bWwgaXMgaW5zZXJ0ZWQuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhIHBsYWluIGBkaXZgIG9iamVjdCwgYnV0IGFueSB2YWxpZCB0YWdOYW1lIGNhbiBiZSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBFbGVtZW50LCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBlbnRpcmVseSBmaXJzdC5cclxuICAgICAqIEFueSBldmVudCBsaXN0ZW5lcnMgeW91IG1heSBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB3aWxsIG5lZWQgdG8gYmUgcmUtY3JlYXRlZCBhZnRlciB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNjcmVhdGVGcm9tSFRNTFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gQSBzdHJpbmcgb2YgaHRtbCB0byBiZSBzZXQgYXMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBjcmVhdGVkIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhZ05hbWU9J2RpdiddIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50IGludG8gd2hpY2ggYWxsIG9mIHRoZSBodG1sIHdpbGwgYmUgaW5zZXJ0ZWQuIERlZmF1bHRzIHRvIGEgcGxhaW4gZGl2IHRhZy5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRnJvbUhUTUw6IGZ1bmN0aW9uIChodG1sLCB0YWdOYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0YWdOYW1lID09PSB1bmRlZmluZWQpIHsgdGFnTmFtZSA9ICdkaXYnOyB9XHJcblxyXG4gICAgICAgIC8vICBBbHJlYWR5IGdvdCBhbiBlbGVtZW50PyBSZW1vdmUgaXQgZmlyc3RcclxuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG5cclxuICAgICAgICB0aGlzLm5vZGUgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICBlbGVtZW50LnN0eWxlLnpJbmRleCA9ICcwJztcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuXHJcbiAgICAgICAgLy8gIE5vZGUgaGFuZGxlclxyXG5cclxuICAgICAgICBlbGVtZW50LnBoYXNlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTaXplKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgY3VycmVudCBET00gRWxlbWVudCBib3VuZCB0byB0aGlzIEdhbWUgT2JqZWN0IGZyb20gdGhlIERPTSBlbnRpcmVseSBhbmQgcmVzZXRzIHRoZVxyXG4gICAgICogYG5vZGVgIHByb3BlcnR5IG9mIHRoaXMgR2FtZSBPYmplY3QgdG8gYmUgYG51bGxgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcmVtb3ZlRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSZW1vdmVGcm9tRE9NKHRoaXMubm9kZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgY2FsbHMgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgb24gdGhlIGBub2RlYCBhbmQgdGhlbiBzZXRzIHRoZSBib3VuZHMgd2lkdGhcclxuICAgICAqIGFuZCBoZWlnaHQgaW50byB0aGUgYGRpc3BsYXlXaWR0aGAgYW5kIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0aWVzLCBhbmQgdGhlIGBjbGllbnRXaWR0aGAgYW5kIGBjbGllbnRIZWlnaHRgXHJcbiAgICAgKiB2YWx1ZXMgaW50byB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyByZXNwZWN0aXZlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYSBuZXcgZWxlbWVudCBpcyBjcmVhdGVkIG9yIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3VwZGF0ZVNpemVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZTtcclxuXHJcbiAgICAgICAgdmFyIG5vZGVCb3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gbm9kZS5jbGllbnRXaWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IG5vZGUuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aCA9IG5vZGVCb3VuZHMud2lkdGggfHwgMDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSBub2RlQm91bmRzLmhlaWdodCB8fCAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgRE9NIEVsZW1lbnRzIG5vZGUsIHVzaW5nIGBxdWVyeVNlbGVjdG9yQWxsKCcqJylgIGFuZCB0aGVuIGl0ZXJhdGVzIHRocm91Z2hcclxuICAgICAqIHRoZW0sIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBvbmUgdGhhdCBoYXMgYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4ga2V5IGFuZCB2YWx1ZS4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGRcclxuICAgICAqIGlmIGZvdW5kLCBvciBgbnVsbGAgaWYgbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZ2V0Q2hpbGRCeVByb3BlcnR5XHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBzZWFyY2ggdGhlIGNoaWxkcmVuIGZvci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgbXVzdCBzdHJpY3RseSBlcXVhbC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P0VsZW1lbnR9IFRoZSBmaXJzdCBtYXRjaGluZyBjaGlsZCBET00gRWxlbWVudCwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLm5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldW3Byb3BlcnR5XSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgRE9NIEVsZW1lbnRzIG5vZGUsIHVzaW5nIGBxdWVyeVNlbGVjdG9yQWxsKCcqJylgIGFuZCB0aGVuIGl0ZXJhdGVzIHRocm91Z2hcclxuICAgICAqIHRoZW0sIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBvbmUgdGhhdCBoYXMgYSBtYXRjaGluZyBpZC4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGQgaWYgZm91bmQsIG9yIGBudWxsYCBpZiBub3QuXHJcbiAgICAgKiBcclxuICAgICAqIEJlIGF3YXJlIHRoYXQgY2xhc3MgYW5kIGlkIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2dldENoaWxkQnlJRFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgaWQgdG8gc2VhcmNoIHRoZSBjaGlsZHJlbiBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9FbGVtZW50fSBUaGUgZmlyc3QgbWF0Y2hpbmcgY2hpbGQgRE9NIEVsZW1lbnQsIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlJRDogZnVuY3Rpb24gKGlkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkQnlQcm9wZXJ0eSgnaWQnLCBpZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIERPTSBFbGVtZW50cyBub2RlLCB1c2luZyBgcXVlcnlTZWxlY3RvckFsbCgnKicpYCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoXHJcbiAgICAgKiB0aGVtLCBsb29raW5nIGZvciB0aGUgZmlyc3Qgb25lIHRoYXQgaGFzIGEgbWF0Y2hpbmcgbmFtZS4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGQgaWYgZm91bmQsIG9yIGBudWxsYCBpZiBub3QuXHJcbiAgICAgKiBcclxuICAgICAqIEJlIGF3YXJlIHRoYXQgY2xhc3MgYW5kIGlkIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2dldENoaWxkQnlOYW1lXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgdG8gc2VhcmNoIHRoZSBjaGlsZHJlbiBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9FbGVtZW50fSBUaGUgZmlyc3QgbWF0Y2hpbmcgY2hpbGQgRE9NIEVsZW1lbnQsIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZEJ5UHJvcGVydHkoJ25hbWUnLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBgY2xhc3NOYW1lYCBwcm9wZXJ0eSBvZiB0aGUgRE9NIEVsZW1lbnQgbm9kZSBhbmQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgc2l6ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNzZXRDbGFzc05hbWVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSAtIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3Igc3BhY2Utc2VwYXJhdGVkIGNsYXNzZXMgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENsYXNzTmFtZTogZnVuY3Rpb24gKGNsYXNzTmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGlubmVyVGV4dGAgcHJvcGVydHkgb2YgdGhlIERPTSBFbGVtZW50IG5vZGUgYW5kIHVwZGF0ZXMgdGhlIGludGVybmFsIHNpemVzLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgb25seSBjZXJ0YWluIHR5cGVzIG9mIEVsZW1lbnRzIGNhbiBoYXZlIGBpbm5lclRleHRgIHNldCBvbiB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2V0VGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEEgRE9NU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcmVuZGVyZWQgdGV4dCBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmlubmVyVGV4dCA9IHRleHQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBET00gRWxlbWVudCBub2RlIGFuZCB1cGRhdGVzIHRoZSBpbnRlcm5hbCBzaXplcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3NldEhUTUxcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBBIERPTVN0cmluZyBvZiBodG1sIHRvIGJlIHNldCBhcyB0aGUgYGlubmVySFRNTGAgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEhUTUw6IGZ1bmN0aW9uIChodG1sKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyBpbnRlcm5hbCB1cGRhdGUgdGFza3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwcmVVcGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRDb250YWluZXI7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGU7XHJcblxyXG4gICAgICAgIGlmIChub2RlICYmIHBhcmVudCAmJiAhcGFyZW50LndpbGxSZW5kZXIoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgdGhlIHJlbmRlck1hc2sgd2l0aCB0aGUgcmVuZGVyRmxhZ3MgdG8gc2VlIGlmIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCByZW5kZXIgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBET01FbGVtZW50cyBhbHdheXMgcmV0dXJuIGB0cnVlYCBhcyB0aGV5IG5lZWQgdG8gc3RpbGwgc2V0IHZhbHVlcyBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLCBldmVuIGlmIG5vdCB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjd2lsbFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHJlbmRlcmVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgd2lsbFJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBwcmUtZGVzdHJveSBzdGVwIGZvciB0aGUgRE9NIEVsZW1lbnQsIHdoaWNoIHJlbW92ZXMgdGhlIHVuZGVybHlpbmcgbm9kZSBmcm9tIHRoZSBET00uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERPTUVsZW1lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CSSBlendModes = __webpack_require__(/*! ./CSSBlendModes */ \"./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#renderWebGL\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active renderer.\r\n * @param {Phaser.GameObjects.DOMElement} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DOMElementCSSRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var node = src.node;\r\n    var style = node.style;\r\n\r\n    if (!node || !style || GameObject.RENDER_MASK !== src.renderFlags || (src.cameraFilter !== 0 && (src.cameraFilter & camera.id)) || (src.parentContainer && !src.parentContainer.willRender()))\r\n    {\r\n        if (node)\r\n        {\r\n            style.display = 'none';\r\n        }\r\n        \r\n        return;\r\n    }\r\n\r\n    var parent = src.parentContainer;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (parent)\r\n    {\r\n        alpha *= parent.alpha;\r\n    }\r\n\r\n    var camMatrix = renderer._tempMatrix1;\r\n    var srcMatrix = renderer._tempMatrix2;\r\n    var calcMatrix = renderer._tempMatrix3;\r\n\r\n    var dx = 0;\r\n    var dy = 0;\r\n\r\n    var tx = '0%';\r\n    var ty = '0%';\r\n\r\n    if (parentMatrix)\r\n    {\r\n        dx = (src.width * src.scaleX) * src.originX;\r\n        dy = (src.height * src.scaleY) * src.originY;\r\n\r\n        srcMatrix.applyITRS(src.x - dx, src.y - dy, src.rotation, src.scaleX, src.scaleY);\r\n\r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        srcMatrix.e = src.x - dx;\r\n        srcMatrix.f = src.y - dy;\r\n\r\n        //  Multiply by the src matrix, store result in calcMatrix\r\n        camMatrix.multiply(srcMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        dx = (src.width) * src.originX;\r\n        dy = (src.height) * src.originY;\r\n \r\n        srcMatrix.applyITRS(src.x - dx, src.y - dy, src.rotation, src.scaleX, src.scaleY);\r\n        \r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        tx = (100 * src.originX) + '%';\r\n        ty = (100 * src.originY) + '%';\r\n\r\n        srcMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        srcMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the src matrix, store result in calcMatrix\r\n        camMatrix.multiply(srcMatrix, calcMatrix);\r\n    }\r\n\r\n    if (!src.transformOnly)\r\n    {\r\n        style.display = 'block';\r\n        style.opacity = alpha;\r\n        style.zIndex = src._depth;\r\n        style.pointerEvents = 'auto';\r\n        style.mixBlendMode = CSSBlendModes[src._blendMode];\r\n    }\r\n\r\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n\r\n    style.transform =\r\n        calcMatrix.getCSSMatrix() +\r\n        ' skew(' + src.skewX + 'rad, ' + src.skewY + 'rad)' +\r\n        ' rotate3d(' + src.rotate3d.x + ',' + src.rotate3d.y + ',' + src.rotate3d.z + ',' + src.rotate3d.w + src.rotate3dAngle + ')';\r\n\r\n    style.transformOrigin = tx + ' ' + ty;\r\n};\r\n\r\nmodule.exports = DOMElementCSSRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRDU1NSZW5kZXJlci5qcz8zN2ZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQywwRkFBaUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2RvbWVsZW1lbnQvRE9NRWxlbWVudENTU1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ1NTQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4vQ1NTQmxlbmRNb2RlcycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBET01FbGVtZW50Q1NTUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgbm9kZSA9IHNyYy5ub2RlO1xyXG4gICAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcclxuXHJcbiAgICBpZiAoIW5vZGUgfHwgIXN0eWxlIHx8IEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHNyYy5yZW5kZXJGbGFncyB8fCAoc3JjLmNhbWVyYUZpbHRlciAhPT0gMCAmJiAoc3JjLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpIHx8IChzcmMucGFyZW50Q29udGFpbmVyICYmICFzcmMucGFyZW50Q29udGFpbmVyLndpbGxSZW5kZXIoKSkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmVudCA9IHNyYy5wYXJlbnRDb250YWluZXI7XHJcbiAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICBhbHBoYSAqPSBwYXJlbnQuYWxwaGE7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzcmNNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICB2YXIgZHggPSAwO1xyXG4gICAgdmFyIGR5ID0gMDtcclxuXHJcbiAgICB2YXIgdHggPSAnMCUnO1xyXG4gICAgdmFyIHR5ID0gJzAlJztcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGR4ID0gKHNyYy53aWR0aCAqIHNyYy5zY2FsZVgpICogc3JjLm9yaWdpblg7XHJcbiAgICAgICAgZHkgPSAoc3JjLmhlaWdodCAqIHNyYy5zY2FsZVkpICogc3JjLm9yaWdpblk7XHJcblxyXG4gICAgICAgIHNyY01hdHJpeC5hcHBseUlUUlMoc3JjLnggLSBkeCwgc3JjLnkgLSBkeSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICAgICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNyY01hdHJpeC5lID0gc3JjLnggLSBkeDtcclxuICAgICAgICBzcmNNYXRyaXguZiA9IHNyYy55IC0gZHk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgc3JjIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3JjTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBkeCA9IChzcmMud2lkdGgpICogc3JjLm9yaWdpblg7XHJcbiAgICAgICAgZHkgPSAoc3JjLmhlaWdodCkgKiBzcmMub3JpZ2luWTtcclxuIFxyXG4gICAgICAgIHNyY01hdHJpeC5hcHBseUlUUlMoc3JjLnggLSBkeCwgc3JjLnkgLSBkeSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuICAgICAgICBcclxuICAgICAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgICAgIHR4ID0gKDEwMCAqIHNyYy5vcmlnaW5YKSArICclJztcclxuICAgICAgICB0eSA9ICgxMDAgKiBzcmMub3JpZ2luWSkgKyAnJSc7XHJcblxyXG4gICAgICAgIHNyY01hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3JjTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBzcmMgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcmNNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3JjLnRyYW5zZm9ybU9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgc3R5bGUub3BhY2l0eSA9IGFscGhhO1xyXG4gICAgICAgIHN0eWxlLnpJbmRleCA9IHNyYy5fZGVwdGg7XHJcbiAgICAgICAgc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICBzdHlsZS5taXhCbGVuZE1vZGUgPSBDU1NCbGVuZE1vZGVzW3NyYy5fYmxlbmRNb2RlXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcblxyXG4gICAgc3R5bGUudHJhbnNmb3JtID1cclxuICAgICAgICBjYWxjTWF0cml4LmdldENTU01hdHJpeCgpICtcclxuICAgICAgICAnIHNrZXcoJyArIHNyYy5za2V3WCArICdyYWQsICcgKyBzcmMuc2tld1kgKyAncmFkKScgK1xyXG4gICAgICAgICcgcm90YXRlM2QoJyArIHNyYy5yb3RhdGUzZC54ICsgJywnICsgc3JjLnJvdGF0ZTNkLnkgKyAnLCcgKyBzcmMucm90YXRlM2QueiArICcsJyArIHNyYy5yb3RhdGUzZC53ICsgc3JjLnJvdGF0ZTNkQW5nbGUgKyAnKSc7XHJcblxyXG4gICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gdHggKyAnICcgKyB0eTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRE9NRWxlbWVudENTU1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DOMElement = __webpack_require__(/*! ./DOMElement */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * DOM Element Game Objects are a way to control and manipulate HTML Elements over the top of your game.\r\n * \r\n * In order for DOM Elements to display you have to enable them by adding the following to your game\r\n * configuration object:\r\n * \r\n * ```javascript\r\n * dom {\r\n *   createContainer: true\r\n * }\r\n * ```\r\n * \r\n * When this is added, Phaser will automatically create a DOM Container div that is positioned over the top\r\n * of the game canvas. This div is sized to match the canvas, and if the canvas size changes, as a result of\r\n * settings within the Scale Manager, the dom container is resized accordingly.\r\n * \r\n * You can create a DOM Element by either passing in DOMStrings, or by passing in a reference to an existing\r\n * Element that you wish to be placed under the control of Phaser. For example:\r\n * \r\n * ```javascript\r\n * this.add.dom(x, y, 'div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * The above code will insert a div element into the DOM Container at the given x/y coordinate. The DOMString in\r\n * the 4th argument sets the initial CSS style of the div and the final argument is the inner text. In this case,\r\n * it will create a lime colored div that is 220px by 100px in size with the text Phaser in it, in an Arial font.\r\n * \r\n * You should nearly always, without exception, use explicitly sized HTML Elements, in order to fully control\r\n * alignment and positioning of the elements next to regular game content.\r\n * \r\n * Rather than specify the CSS and HTML directly you can use the `load.html` File Loader to load it into the\r\n * cache and then use the `createFromCache` method instead. You can also use `createFromHTML` and various other\r\n * methods available in this class to help construct your elements.\r\n * \r\n * Once the element has been created you can then control it like you would any other Game Object. You can set its\r\n * position, scale, rotation, alpha and other properties. It will move as the main Scene Camera moves and be clipped\r\n * at the edge of the canvas. It's important to remember some limitations of DOM Elements: The obvious one is that\r\n * they appear above or below your game canvas. You cannot blend them into the display list, meaning you cannot have\r\n * a DOM Element, then a Sprite, then another DOM Element behind it.\r\n * \r\n * They also cannot be enabled for input. To do that, you have to use the `addListener` method to add native event\r\n * listeners directly. The final limitation is to do with cameras. The DOM Container is sized to match the game canvas\r\n * entirely and clipped accordingly. DOM Elements respect camera scrolling and scrollFactor settings, but if you\r\n * change the size of the camera so it no longer matches the size of the canvas, they won't be clipped accordingly.\r\n * \r\n * Also, all DOM Elements are inserted into the same DOM Container, regardless of which Scene they are created in.\r\n * \r\n * DOM Elements are a powerful way to align native HTML with your Phaser Game Objects. For example, you can insert\r\n * a login form for a multiplayer game directly into your title screen. Or a text input box for a highscore table.\r\n * Or a banner ad from a 3rd party service. Or perhaps you'd like to use them for high resolution text display and\r\n * UI. The choice is up to you, just remember that you're dealing with standard HTML and CSS floating over the top\r\n * of your game, and should treat it accordingly.\r\n *\r\n * Note: This method will only be available if the DOM Element Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#dom\r\n * @since 3.17.0\r\n *\r\n * @param {number} x - The horizontal position of this DOM Element in the world.\r\n * @param {number} y - The vertical position of this DOM Element in the world.\r\n * @param {(HTMLElement|string)} [element] - An existing DOM element, or a string. If a string starting with a # it will do a `getElementById` look-up on the string (minus the hash). Without a hash, it represents the type of element to create, i.e. 'div'.\r\n * @param {(string|any)} [style] - If a string, will be set directly as the elements `style` property value. If a plain object, will be iterated and the values transferred. In both cases the values replacing whatever CSS styles may have been previously set.\r\n * @param {string} [innerText] - If given, will be set directly as the elements `innerText` property value, replacing whatever was there before.\r\n *\r\n * @return {Phaser.GameObjects.DOMElement} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('dom', function (x, y, element, style, innerText)\r\n{\r\n    var gameObject = new DOMElement(this.scene, x, y, element, style, innerText);\r\n\r\n    this.displayList.add(gameObject);\r\n    this.updateList.add(gameObject);\r\n\r\n    return gameObject;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRGYWN0b3J5LmpzPzE1ZDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjO0FBQ3ZDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjLGVBQWU7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2RvbWVsZW1lbnQvRE9NRWxlbWVudEZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBET01FbGVtZW50ID0gcmVxdWlyZSgnLi9ET01FbGVtZW50Jyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogRE9NIEVsZW1lbnQgR2FtZSBPYmplY3RzIGFyZSBhIHdheSB0byBjb250cm9sIGFuZCBtYW5pcHVsYXRlIEhUTUwgRWxlbWVudHMgb3ZlciB0aGUgdG9wIG9mIHlvdXIgZ2FtZS5cclxuICogXHJcbiAqIEluIG9yZGVyIGZvciBET00gRWxlbWVudHMgdG8gZGlzcGxheSB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIGdhbWVcclxuICogY29uZmlndXJhdGlvbiBvYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGRvbSB7XHJcbiAqICAgY3JlYXRlQ29udGFpbmVyOiB0cnVlXHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaXMgYWRkZWQsIFBoYXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgRE9NIENvbnRhaW5lciBkaXYgdGhhdCBpcyBwb3NpdGlvbmVkIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB0aGUgZ2FtZSBjYW52YXMuIFRoaXMgZGl2IGlzIHNpemVkIHRvIG1hdGNoIHRoZSBjYW52YXMsIGFuZCBpZiB0aGUgY2FudmFzIHNpemUgY2hhbmdlcywgYXMgYSByZXN1bHQgb2ZcclxuICogc2V0dGluZ3Mgd2l0aGluIHRoZSBTY2FsZSBNYW5hZ2VyLCB0aGUgZG9tIGNvbnRhaW5lciBpcyByZXNpemVkIGFjY29yZGluZ2x5LlxyXG4gKiBcclxuICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBieSBlaXRoZXIgcGFzc2luZyBpbiBET01TdHJpbmdzLCBvciBieSBwYXNzaW5nIGluIGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nXHJcbiAqIEVsZW1lbnQgdGhhdCB5b3Ugd2lzaCB0byBiZSBwbGFjZWQgdW5kZXIgdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBGb3IgZXhhbXBsZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQuZG9tKHgsIHksICdkaXYnLCAnYmFja2dyb3VuZC1jb2xvcjogbGltZTsgd2lkdGg6IDIyMHB4OyBoZWlnaHQ6IDEwMHB4OyBmb250OiA0OHB4IEFyaWFsJywgJ1BoYXNlcicpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIFRoZSBhYm92ZSBjb2RlIHdpbGwgaW5zZXJ0IGEgZGl2IGVsZW1lbnQgaW50byB0aGUgRE9NIENvbnRhaW5lciBhdCB0aGUgZ2l2ZW4geC95IGNvb3JkaW5hdGUuIFRoZSBET01TdHJpbmcgaW5cclxuICogdGhlIDR0aCBhcmd1bWVudCBzZXRzIHRoZSBpbml0aWFsIENTUyBzdHlsZSBvZiB0aGUgZGl2IGFuZCB0aGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIGlubmVyIHRleHQuIEluIHRoaXMgY2FzZSxcclxuICogaXQgd2lsbCBjcmVhdGUgYSBsaW1lIGNvbG9yZWQgZGl2IHRoYXQgaXMgMjIwcHggYnkgMTAwcHggaW4gc2l6ZSB3aXRoIHRoZSB0ZXh0IFBoYXNlciBpbiBpdCwgaW4gYW4gQXJpYWwgZm9udC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgbmVhcmx5IGFsd2F5cywgd2l0aG91dCBleGNlcHRpb24sIHVzZSBleHBsaWNpdGx5IHNpemVkIEhUTUwgRWxlbWVudHMsIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnRyb2xcclxuICogYWxpZ25tZW50IGFuZCBwb3NpdGlvbmluZyBvZiB0aGUgZWxlbWVudHMgbmV4dCB0byByZWd1bGFyIGdhbWUgY29udGVudC5cclxuICogXHJcbiAqIFJhdGhlciB0aGFuIHNwZWNpZnkgdGhlIENTUyBhbmQgSFRNTCBkaXJlY3RseSB5b3UgY2FuIHVzZSB0aGUgYGxvYWQuaHRtbGAgRmlsZSBMb2FkZXIgdG8gbG9hZCBpdCBpbnRvIHRoZVxyXG4gKiBjYWNoZSBhbmQgdGhlbiB1c2UgdGhlIGBjcmVhdGVGcm9tQ2FjaGVgIG1ldGhvZCBpbnN0ZWFkLiBZb3UgY2FuIGFsc28gdXNlIGBjcmVhdGVGcm9tSFRNTGAgYW5kIHZhcmlvdXMgb3RoZXJcclxuICogbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhpcyBjbGFzcyB0byBoZWxwIGNvbnN0cnVjdCB5b3VyIGVsZW1lbnRzLlxyXG4gKiBcclxuICogT25jZSB0aGUgZWxlbWVudCBoYXMgYmVlbiBjcmVhdGVkIHlvdSBjYW4gdGhlbiBjb250cm9sIGl0IGxpa2UgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdC4gWW91IGNhbiBzZXQgaXRzXHJcbiAqIHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24sIGFscGhhIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBJdCB3aWxsIG1vdmUgYXMgdGhlIG1haW4gU2NlbmUgQ2FtZXJhIG1vdmVzIGFuZCBiZSBjbGlwcGVkXHJcbiAqIGF0IHRoZSBlZGdlIG9mIHRoZSBjYW52YXMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHNvbWUgbGltaXRhdGlvbnMgb2YgRE9NIEVsZW1lbnRzOiBUaGUgb2J2aW91cyBvbmUgaXMgdGhhdFxyXG4gKiB0aGV5IGFwcGVhciBhYm92ZSBvciBiZWxvdyB5b3VyIGdhbWUgY2FudmFzLiBZb3UgY2Fubm90IGJsZW5kIHRoZW0gaW50byB0aGUgZGlzcGxheSBsaXN0LCBtZWFuaW5nIHlvdSBjYW5ub3QgaGF2ZVxyXG4gKiBhIERPTSBFbGVtZW50LCB0aGVuIGEgU3ByaXRlLCB0aGVuIGFub3RoZXIgRE9NIEVsZW1lbnQgYmVoaW5kIGl0LlxyXG4gKiBcclxuICogVGhleSBhbHNvIGNhbm5vdCBiZSBlbmFibGVkIGZvciBpbnB1dC4gVG8gZG8gdGhhdCwgeW91IGhhdmUgdG8gdXNlIHRoZSBgYWRkTGlzdGVuZXJgIG1ldGhvZCB0byBhZGQgbmF0aXZlIGV2ZW50XHJcbiAqIGxpc3RlbmVycyBkaXJlY3RseS4gVGhlIGZpbmFsIGxpbWl0YXRpb24gaXMgdG8gZG8gd2l0aCBjYW1lcmFzLiBUaGUgRE9NIENvbnRhaW5lciBpcyBzaXplZCB0byBtYXRjaCB0aGUgZ2FtZSBjYW52YXNcclxuICogZW50aXJlbHkgYW5kIGNsaXBwZWQgYWNjb3JkaW5nbHkuIERPTSBFbGVtZW50cyByZXNwZWN0IGNhbWVyYSBzY3JvbGxpbmcgYW5kIHNjcm9sbEZhY3RvciBzZXR0aW5ncywgYnV0IGlmIHlvdVxyXG4gKiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGNhbWVyYSBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLCB0aGV5IHdvbid0IGJlIGNsaXBwZWQgYWNjb3JkaW5nbHkuXHJcbiAqIFxyXG4gKiBBbHNvLCBhbGwgRE9NIEVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBzYW1lIERPTSBDb250YWluZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggU2NlbmUgdGhleSBhcmUgY3JlYXRlZCBpbi5cclxuICogXHJcbiAqIERPTSBFbGVtZW50cyBhcmUgYSBwb3dlcmZ1bCB3YXkgdG8gYWxpZ24gbmF0aXZlIEhUTUwgd2l0aCB5b3VyIFBoYXNlciBHYW1lIE9iamVjdHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGluc2VydFxyXG4gKiBhIGxvZ2luIGZvcm0gZm9yIGEgbXVsdGlwbGF5ZXIgZ2FtZSBkaXJlY3RseSBpbnRvIHlvdXIgdGl0bGUgc2NyZWVuLiBPciBhIHRleHQgaW5wdXQgYm94IGZvciBhIGhpZ2hzY29yZSB0YWJsZS5cclxuICogT3IgYSBiYW5uZXIgYWQgZnJvbSBhIDNyZCBwYXJ0eSBzZXJ2aWNlLiBPciBwZXJoYXBzIHlvdSdkIGxpa2UgdG8gdXNlIHRoZW0gZm9yIGhpZ2ggcmVzb2x1dGlvbiB0ZXh0IGRpc3BsYXkgYW5kXHJcbiAqIFVJLiBUaGUgY2hvaWNlIGlzIHVwIHRvIHlvdSwganVzdCByZW1lbWJlciB0aGF0IHlvdSdyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgSFRNTCBhbmQgQ1NTIGZsb2F0aW5nIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB5b3VyIGdhbWUsIGFuZCBzaG91bGQgdHJlYXQgaXQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIERPTSBFbGVtZW50IEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNkb21cclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgRE9NIEVsZW1lbnQgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIERPTSBFbGVtZW50IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8c3RyaW5nKX0gW2VsZW1lbnRdIC0gQW4gZXhpc3RpbmcgRE9NIGVsZW1lbnQsIG9yIGEgc3RyaW5nLiBJZiBhIHN0cmluZyBzdGFydGluZyB3aXRoIGEgIyBpdCB3aWxsIGRvIGEgYGdldEVsZW1lbnRCeUlkYCBsb29rLXVwIG9uIHRoZSBzdHJpbmcgKG1pbnVzIHRoZSBoYXNoKS4gV2l0aG91dCBhIGhhc2gsIGl0IHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZWxlbWVudCB0byBjcmVhdGUsIGkuZS4gJ2RpdicuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbc3R5bGVdIC0gSWYgYSBzdHJpbmcsIHdpbGwgYmUgc2V0IGRpcmVjdGx5IGFzIHRoZSBlbGVtZW50cyBgc3R5bGVgIHByb3BlcnR5IHZhbHVlLiBJZiBhIHBsYWluIG9iamVjdCwgd2lsbCBiZSBpdGVyYXRlZCBhbmQgdGhlIHZhbHVlcyB0cmFuc2ZlcnJlZC4gSW4gYm90aCBjYXNlcyB0aGUgdmFsdWVzIHJlcGxhY2luZyB3aGF0ZXZlciBDU1Mgc3R5bGVzIG1heSBoYXZlIGJlZW4gcHJldmlvdXNseSBzZXQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5uZXJUZXh0XSAtIElmIGdpdmVuLCB3aWxsIGJlIHNldCBkaXJlY3RseSBhcyB0aGUgZWxlbWVudHMgYGlubmVyVGV4dGAgcHJvcGVydHkgdmFsdWUsIHJlcGxhY2luZyB3aGF0ZXZlciB3YXMgdGhlcmUgYmVmb3JlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignZG9tJywgZnVuY3Rpb24gKHgsIHksIGVsZW1lbnQsIHN0eWxlLCBpbm5lclRleHQpXHJcbntcclxuICAgIHZhciBnYW1lT2JqZWN0ID0gbmV3IERPTUVsZW1lbnQodGhpcy5zY2VuZSwgeCwgeSwgZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dCk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQoZ2FtZU9iamVjdCk7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGdhbWVPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./DOMElementCSSRenderer */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./DOMElementCSSRenderer */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRSZW5kZXIuanM/ZmU5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDBHQUF5QjtBQUNuRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsMEdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9ET01FbGVtZW50Q1NTUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRE9NRWxlbWVudENTU1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIHJlbmRlcldlYkdMOiByZW5kZXJXZWJHTCxcclxuICAgIHJlbmRlckNhbnZhczogcmVuZGVyQ2FudmFzXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Destroy Event.\r\n * \r\n * This event is dispatched when a Game Object instance is being destroyed.\r\n * \r\n * Listen for it on a Game Object instance using `GameObject.on('destroy', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object which is being destroyed.\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz9mYjkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEZXN0cm95IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIGEgR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYEdhbWVPYmplY3Qub24oJ2Rlc3Ryb3knLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB3aGljaCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXN0cm95JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Complete Event.\r\n * \r\n * This event is dispatched when a Video finishes playback by reaching the end of its duration. It\r\n * is also dispatched if a video marker sequence is being played and reaches the end.\r\n * \r\n * Note that not all videos can fire this event. Live streams, for example, have no fixed duration,\r\n * so never technically 'complete'.\r\n * \r\n * If a video is stopped from playback, via the `Video.stop` method, it will emit the\r\n * `VIDEO_STOP` event instead of this one.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('complete', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_COMPLETE\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which completed playback.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ09NUExFVEVfRVZFTlQuanM/Yjg5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGZpbmlzaGVzIHBsYXliYWNrIGJ5IHJlYWNoaW5nIHRoZSBlbmQgb2YgaXRzIGR1cmF0aW9uLiBJdFxyXG4gKiBpcyBhbHNvIGRpc3BhdGNoZWQgaWYgYSB2aWRlbyBtYXJrZXIgc2VxdWVuY2UgaXMgYmVpbmcgcGxheWVkIGFuZCByZWFjaGVzIHRoZSBlbmQuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgbm90IGFsbCB2aWRlb3MgY2FuIGZpcmUgdGhpcyBldmVudC4gTGl2ZSBzdHJlYW1zLCBmb3IgZXhhbXBsZSwgaGF2ZSBubyBmaXhlZCBkdXJhdGlvbixcclxuICogc28gbmV2ZXIgdGVjaG5pY2FsbHkgJ2NvbXBsZXRlJy5cclxuICogXHJcbiAqIElmIGEgdmlkZW8gaXMgc3RvcHBlZCBmcm9tIHBsYXliYWNrLCB2aWEgdGhlIGBWaWRlby5zdG9wYCBtZXRob2QsIGl0IHdpbGwgZW1pdCB0aGVcclxuICogYFZJREVPX1NUT1BgIGV2ZW50IGluc3RlYWQgb2YgdGhpcyBvbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHZpZGVvIC0gVGhlIFZpZGVvIEdhbWUgT2JqZWN0IHdoaWNoIGNvbXBsZXRlZCBwbGF5YmFjay5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Created Event.\r\n * \r\n * This event is dispatched when the texture for a Video has been created. This happens\r\n * when enough of the video source has been loaded that the browser is able to render a\r\n * frame from it.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('created', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_CREATED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which raised the event.\r\n * @param {integer} width - The width of the video.\r\n * @param {integer} height - The height of the video.\r\n */\r\nmodule.exports = 'created';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ1JFQVRFRF9FVkVOVC5qcz81NmI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ1JFQVRFRF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBDcmVhdGVkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIHRleHR1cmUgZm9yIGEgVmlkZW8gaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBoYXBwZW5zXHJcbiAqIHdoZW4gZW5vdWdoIG9mIHRoZSB2aWRlbyBzb3VyY2UgaGFzIGJlZW4gbG9hZGVkIHRoYXQgdGhlIGJyb3dzZXIgaXMgYWJsZSB0byByZW5kZXIgYVxyXG4gKiBmcmFtZSBmcm9tIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdjcmVhdGVkJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fQ1JFQVRFRFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggcmFpc2VkIHRoZSBldmVudC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdmlkZW8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdmlkZW8uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjcmVhdGVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Error Event.\r\n * \r\n * This event is dispatched when a Video tries to play a source that does not exist, or is the wrong file type.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('error', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_ERROR\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which threw the error.\r\n * @param {Event} event - The native DOM event the browser raised during playback.\r\n */\r\nmodule.exports = 'error';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fRVJST1JfRVZFTlQuanM/NjMzOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE1BQU07QUFDakI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19FUlJPUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBFcnJvciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGEgVmlkZW8gdHJpZXMgdG8gcGxheSBhIHNvdXJjZSB0aGF0IGRvZXMgbm90IGV4aXN0LCBvciBpcyB0aGUgd3JvbmcgZmlsZSB0eXBlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdlcnJvcicsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX0VSUk9SXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCB0aHJldyB0aGUgZXJyb3IuXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gZXZlbnQgdGhlIGJyb3dzZXIgcmFpc2VkIGR1cmluZyBwbGF5YmFjay5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Vycm9yJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Loop Event.\r\n * \r\n * This event is dispatched when a Video that is currently playing has looped. This only\r\n * happens if the `loop` parameter was specified, or the `setLoop` method was called,\r\n * and if the video has a fixed duration. Video streams, for example, cannot loop, as\r\n * they have no duration.\r\n * \r\n * Looping is based on the result of the Video `timeupdate` event. This event is not\r\n * frame-accurate, due to the way browsers work, so please do not rely on this loop\r\n * event to be time or frame precise.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('loop', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_LOOP\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which has looped.\r\n */\r\nmodule.exports = 'loop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fTE9PUF9FVkVOVC5qcz8zMmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19MT09QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IExvb3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIHRoYXQgaXMgY3VycmVudGx5IHBsYXlpbmcgaGFzIGxvb3BlZC4gVGhpcyBvbmx5XHJcbiAqIGhhcHBlbnMgaWYgdGhlIGBsb29wYCBwYXJhbWV0ZXIgd2FzIHNwZWNpZmllZCwgb3IgdGhlIGBzZXRMb29wYCBtZXRob2Qgd2FzIGNhbGxlZCxcclxuICogYW5kIGlmIHRoZSB2aWRlbyBoYXMgYSBmaXhlZCBkdXJhdGlvbi4gVmlkZW8gc3RyZWFtcywgZm9yIGV4YW1wbGUsIGNhbm5vdCBsb29wLCBhc1xyXG4gKiB0aGV5IGhhdmUgbm8gZHVyYXRpb24uXHJcbiAqIFxyXG4gKiBMb29waW5nIGlzIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgdGhlIFZpZGVvIGB0aW1ldXBkYXRlYCBldmVudC4gVGhpcyBldmVudCBpcyBub3RcclxuICogZnJhbWUtYWNjdXJhdGUsIGR1ZSB0byB0aGUgd2F5IGJyb3dzZXJzIHdvcmssIHNvIHBsZWFzZSBkbyBub3QgcmVseSBvbiB0aGlzIGxvb3BcclxuICogZXZlbnQgdG8gYmUgdGltZSBvciBmcmFtZSBwcmVjaXNlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdsb29wJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fTE9PUFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggaGFzIGxvb3BlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2xvb3AnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Play Event.\r\n * \r\n * This event is dispatched when a Video begins playback. For videos that do not require\r\n * interaction unlocking, this is usually as soon as the `Video.play` method is called.\r\n * However, for videos that require unlocking, it is fired once playback begins after\r\n * they've been unlocked.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('play', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_PLAY\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which started playback.\r\n */\r\nmodule.exports = 'play';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fUExBWV9FVkVOVC5qcz9jM2IwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fUExBWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBQbGF5IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBWaWRlbyBiZWdpbnMgcGxheWJhY2suIEZvciB2aWRlb3MgdGhhdCBkbyBub3QgcmVxdWlyZVxyXG4gKiBpbnRlcmFjdGlvbiB1bmxvY2tpbmcsIHRoaXMgaXMgdXN1YWxseSBhcyBzb29uIGFzIHRoZSBgVmlkZW8ucGxheWAgbWV0aG9kIGlzIGNhbGxlZC5cclxuICogSG93ZXZlciwgZm9yIHZpZGVvcyB0aGF0IHJlcXVpcmUgdW5sb2NraW5nLCBpdCBpcyBmaXJlZCBvbmNlIHBsYXliYWNrIGJlZ2lucyBhZnRlclxyXG4gKiB0aGV5J3ZlIGJlZW4gdW5sb2NrZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3BsYXknLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19QTEFZXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCBzdGFydGVkIHBsYXliYWNrLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncGxheSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Seeked Event.\r\n * \r\n * This event is dispatched when a Video completes seeking to a new point in its timeline.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('seeked', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_SEEKED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which completed seeking.\r\n */\r\nmodule.exports = 'seeked';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU0VFS0VEX0VWRU5ULmpzPzlmZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TRUVLRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgU2Vla2VkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBWaWRlbyBjb21wbGV0ZXMgc2Vla2luZyB0byBhIG5ldyBwb2ludCBpbiBpdHMgdGltZWxpbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3NlZWtlZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtFRFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggY29tcGxldGVkIHNlZWtpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzZWVrZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Seeking Event.\r\n * \r\n * This event is dispatched when a Video _begins_ seeking to a new point in its timeline.\r\n * When the seek is complete, it will dispatch the `VIDEO_SEEKED` event to conclude.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('seeking', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_SEEKING\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which started seeking.\r\n */\r\nmodule.exports = 'seeking';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU0VFS0lOR19FVkVOVC5qcz8zNWRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TRUVLSU5HX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFNlZWtpbmcgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIF9iZWdpbnNfIHNlZWtpbmcgdG8gYSBuZXcgcG9pbnQgaW4gaXRzIHRpbWVsaW5lLlxyXG4gKiBXaGVuIHRoZSBzZWVrIGlzIGNvbXBsZXRlLCBpdCB3aWxsIGRpc3BhdGNoIHRoZSBgVklERU9fU0VFS0VEYCBldmVudCB0byBjb25jbHVkZS5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgZnJvbSBhIFZpZGVvIEdhbWUgT2JqZWN0IGluc3RhbmNlIHVzaW5nIGBWaWRlby5vbignc2Vla2luZycsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtJTkdcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHZpZGVvIC0gVGhlIFZpZGVvIEdhbWUgT2JqZWN0IHdoaWNoIHN0YXJ0ZWQgc2Vla2luZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3NlZWtpbmcnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Stopped Event.\r\n * \r\n * This event is dispatched when a Video is stopped from playback via a call to the `Video.stop` method,\r\n * either directly via game code, or indirectly as the result of changing a video source or destroying it.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('stop', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_STOP\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which stopped playback.\r\n */\r\nmodule.exports = 'stop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU1RPUF9FVkVOVC5qcz8xMTA2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TVE9QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFN0b3BwZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGlzIHN0b3BwZWQgZnJvbSBwbGF5YmFjayB2aWEgYSBjYWxsIHRvIHRoZSBgVmlkZW8uc3RvcGAgbWV0aG9kLFxyXG4gKiBlaXRoZXIgZGlyZWN0bHkgdmlhIGdhbWUgY29kZSwgb3IgaW5kaXJlY3RseSBhcyB0aGUgcmVzdWx0IG9mIGNoYW5naW5nIGEgdmlkZW8gc291cmNlIG9yIGRlc3Ryb3lpbmcgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3N0b3AnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19TVE9QXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCBzdG9wcGVkIHBsYXliYWNrLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RvcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Timeout Event.\r\n * \r\n * This event is dispatched when a Video has exhausted its allocated time while trying to connect to a video\r\n * source to start playback.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('timeout', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_TIMEOUT\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which timed out.\r\n */\r\nmodule.exports = 'timeout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVElNRU9VVF9FVkVOVC5qcz9mMmYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19USU1FT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFRpbWVvdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGhhcyBleGhhdXN0ZWQgaXRzIGFsbG9jYXRlZCB0aW1lIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIGEgdmlkZW9cclxuICogc291cmNlIHRvIHN0YXJ0IHBsYXliYWNrLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCd0aW1lb3V0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fVElNRU9VVFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggdGltZWQgb3V0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndGltZW91dCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Unlocked Event.\r\n * \r\n * This event is dispatched when a Video that was prevented from playback due to the browsers\r\n * Media Engagement Interaction policy, is unlocked by a user gesture.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('unlocked', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_UNLOCKED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which raised the event.\r\n */\r\nmodule.exports = 'unlocked';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVU5MT0NLRURfRVZFTlQuanM/OWJkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVU5MT0NLRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgVW5sb2NrZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIHRoYXQgd2FzIHByZXZlbnRlZCBmcm9tIHBsYXliYWNrIGR1ZSB0byB0aGUgYnJvd3NlcnNcclxuICogTWVkaWEgRW5nYWdlbWVudCBJbnRlcmFjdGlvbiBwb2xpY3ksIGlzIHVubG9ja2VkIGJ5IGEgdXNlciBnZXN0dXJlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCd1bmxvY2tlZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1VOTE9DS0VEXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCByYWlzZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndW5sb2NrZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/events/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/events/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js\"),\r\n    VIDEO_COMPLETE: __webpack_require__(/*! ./VIDEO_COMPLETE_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js\"),\r\n    VIDEO_CREATED: __webpack_require__(/*! ./VIDEO_CREATED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js\"),\r\n    VIDEO_ERROR: __webpack_require__(/*! ./VIDEO_ERROR_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js\"),\r\n    VIDEO_LOOP: __webpack_require__(/*! ./VIDEO_LOOP_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js\"),\r\n    VIDEO_PLAY: __webpack_require__(/*! ./VIDEO_PLAY_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js\"),\r\n    VIDEO_SEEKED: __webpack_require__(/*! ./VIDEO_SEEKED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js\"),\r\n    VIDEO_SEEKING: __webpack_require__(/*! ./VIDEO_SEEKING_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js\"),\r\n    VIDEO_STOP: __webpack_require__(/*! ./VIDEO_STOP_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js\"),\r\n    VIDEO_TIMEOUT: __webpack_require__(/*! ./VIDEO_TIMEOUT_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js\"),\r\n    VIDEO_UNLOCKED: __webpack_require__(/*! ./VIDEO_UNLOCKED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvaW5kZXguanM/NWIyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxzRkFBaUI7QUFDdEMsb0JBQW9CLG1CQUFPLENBQUMsb0dBQXdCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLGtHQUF1QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyw4RkFBcUI7QUFDOUMsZ0JBQWdCLG1CQUFPLENBQUMsNEZBQW9CO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLDRGQUFvQjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQyxnR0FBc0I7QUFDaEQsbUJBQW1CLG1CQUFPLENBQUMsa0dBQXVCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDRGQUFvQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsb0dBQXdCOztBQUVwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIERFU1RST1k6IHJlcXVpcmUoJy4vREVTVFJPWV9FVkVOVCcpLFxyXG4gICAgVklERU9fQ09NUExFVEU6IHJlcXVpcmUoJy4vVklERU9fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFZJREVPX0NSRUFURUQ6IHJlcXVpcmUoJy4vVklERU9fQ1JFQVRFRF9FVkVOVCcpLFxyXG4gICAgVklERU9fRVJST1I6IHJlcXVpcmUoJy4vVklERU9fRVJST1JfRVZFTlQnKSxcclxuICAgIFZJREVPX0xPT1A6IHJlcXVpcmUoJy4vVklERU9fTE9PUF9FVkVOVCcpLFxyXG4gICAgVklERU9fUExBWTogcmVxdWlyZSgnLi9WSURFT19QTEFZX0VWRU5UJyksXHJcbiAgICBWSURFT19TRUVLRUQ6IHJlcXVpcmUoJy4vVklERU9fU0VFS0VEX0VWRU5UJyksXHJcbiAgICBWSURFT19TRUVLSU5HOiByZXF1aXJlKCcuL1ZJREVPX1NFRUtJTkdfRVZFTlQnKSxcclxuICAgIFZJREVPX1NUT1A6IHJlcXVpcmUoJy4vVklERU9fU1RPUF9FVkVOVCcpLFxyXG4gICAgVklERU9fVElNRU9VVDogcmVxdWlyZSgnLi9WSURFT19USU1FT1VUX0VWRU5UJyksXHJcbiAgICBWSURFT19VTkxPQ0tFRDogcmVxdWlyZSgnLi9WSURFT19VTkxPQ0tFRF9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/extern/Extern.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/extern/Extern.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar ExternRender = __webpack_require__(/*! ./ExternRender */ \"./node_modules/phaser/src/gameobjects/extern/ExternRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Extern Game Object is a special type of Game Object that allows you to pass\r\n * rendering off to a 3rd party.\r\n * \r\n * When you create an Extern and place it in the display list of a Scene, the renderer will\r\n * process the list as usual. When it finds an Extern it will flush the current batch,\r\n * clear down the pipeline and prepare a transform matrix which your render function can\r\n * take advantage of, if required.\r\n * \r\n * The WebGL context is then left is a 'clean' state, ready for you to bind your own shaders,\r\n * or draw to it, whatever you wish to do. Once you've finished, you should free-up any\r\n * of your resources. The Extern will then rebind the Phaser pipeline and carry on \r\n * rendering the display list.\r\n * \r\n * Although this object has lots of properties such as Alpha, Blend Mode and Tint, none of\r\n * them are used during rendering unless you take advantage of them in your own render code.\r\n *\r\n * @class Extern\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n */\r\nvar Extern = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.Origin,\r\n        Components.ScrollFactor,\r\n        Components.Size,\r\n        Components.Texture,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        ExternRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Extern (scene)\r\n    {\r\n        GameObject.call(this, scene, 'Extern');\r\n    },\r\n\r\n    preUpdate: function ()\r\n    {\r\n        //  override this!\r\n        //  Arguments: time, delta\r\n    },\r\n\r\n    render: function ()\r\n    {\r\n        //  override this!\r\n        //  Arguments: renderer, camera, calcMatrix\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Extern;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuLmpzPzQ0N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V4dGVybi9FeHRlcm4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIEV4dGVyblJlbmRlciA9IHJlcXVpcmUoJy4vRXh0ZXJuUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFeHRlcm4gR2FtZSBPYmplY3QgaXMgYSBzcGVjaWFsIHR5cGUgb2YgR2FtZSBPYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIHBhc3NcclxuICogcmVuZGVyaW5nIG9mZiB0byBhIDNyZCBwYXJ0eS5cclxuICogXHJcbiAqIFdoZW4geW91IGNyZWF0ZSBhbiBFeHRlcm4gYW5kIHBsYWNlIGl0IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2YgYSBTY2VuZSwgdGhlIHJlbmRlcmVyIHdpbGxcclxuICogcHJvY2VzcyB0aGUgbGlzdCBhcyB1c3VhbC4gV2hlbiBpdCBmaW5kcyBhbiBFeHRlcm4gaXQgd2lsbCBmbHVzaCB0aGUgY3VycmVudCBiYXRjaCxcclxuICogY2xlYXIgZG93biB0aGUgcGlwZWxpbmUgYW5kIHByZXBhcmUgYSB0cmFuc2Zvcm0gbWF0cml4IHdoaWNoIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIGNhblxyXG4gKiB0YWtlIGFkdmFudGFnZSBvZiwgaWYgcmVxdWlyZWQuXHJcbiAqIFxyXG4gKiBUaGUgV2ViR0wgY29udGV4dCBpcyB0aGVuIGxlZnQgaXMgYSAnY2xlYW4nIHN0YXRlLCByZWFkeSBmb3IgeW91IHRvIGJpbmQgeW91ciBvd24gc2hhZGVycyxcclxuICogb3IgZHJhdyB0byBpdCwgd2hhdGV2ZXIgeW91IHdpc2ggdG8gZG8uIE9uY2UgeW91J3ZlIGZpbmlzaGVkLCB5b3Ugc2hvdWxkIGZyZWUtdXAgYW55XHJcbiAqIG9mIHlvdXIgcmVzb3VyY2VzLiBUaGUgRXh0ZXJuIHdpbGwgdGhlbiByZWJpbmQgdGhlIFBoYXNlciBwaXBlbGluZSBhbmQgY2Fycnkgb24gXHJcbiAqIHJlbmRlcmluZyB0aGUgZGlzcGxheSBsaXN0LlxyXG4gKiBcclxuICogQWx0aG91Z2ggdGhpcyBvYmplY3QgaGFzIGxvdHMgb2YgcHJvcGVydGllcyBzdWNoIGFzIEFscGhhLCBCbGVuZCBNb2RlIGFuZCBUaW50LCBub25lIG9mXHJcbiAqIHRoZW0gYXJlIHVzZWQgZHVyaW5nIHJlbmRlcmluZyB1bmxlc3MgeW91IHRha2UgYWR2YW50YWdlIG9mIHRoZW0gaW4geW91ciBvd24gcmVuZGVyIGNvZGUuXHJcbiAqXHJcbiAqIEBjbGFzcyBFeHRlcm5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqL1xyXG52YXIgRXh0ZXJuID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIEV4dGVyblJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEV4dGVybiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnRXh0ZXJuJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAgb3ZlcnJpZGUgdGhpcyFcclxuICAgICAgICAvLyAgQXJndW1lbnRzOiB0aW1lLCBkZWx0YVxyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIG92ZXJyaWRlIHRoaXMhXHJcbiAgICAgICAgLy8gIEFyZ3VtZW50czogcmVuZGVyZXIsIGNhbWVyYSwgY2FsY01hdHJpeFxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEV4dGVybjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/Extern.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V4dGVybi9FeHRlcm5DYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternFactory.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/extern/ExternFactory.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extern = __webpack_require__(/*! ./Extern */ \"./node_modules/phaser/src/gameobjects/extern/Extern.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Extern Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Extern Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#extern\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.Extern} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('extern', function ()\r\n{\r\n    var extern = new Extern(this.scene);\r\n\r\n    this.displayList.add(extern);\r\n    this.updateList.add(extern);\r\n\r\n    return extern;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuRmFjdG9yeS5qcz9mYzJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEV4dGVybiA9IHJlcXVpcmUoJy4vRXh0ZXJuJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBFeHRlcm4gR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBFeHRlcm4gR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2V4dGVyblxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5FeHRlcm59IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2V4dGVybicsIGZ1bmN0aW9uICgpXHJcbntcclxuICAgIHZhciBleHRlcm4gPSBuZXcgRXh0ZXJuKHRoaXMuc2NlbmUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGV4dGVybik7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGV4dGVybik7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybjtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternRender.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/extern/ExternRender.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ExternWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ExternCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuUmVuZGVyLmpzP2VlYjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZXh0ZXJuL0V4dGVyblJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0V4dGVybldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRXh0ZXJuQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Extern#renderWebGL\r\n * @since 3.16.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Extern} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ExternWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = renderer.currentPipeline;\r\n\r\n    renderer.clearPipeline();\r\n\r\n    var camMatrix = renderer._tempMatrix1;\r\n    var spriteMatrix = renderer._tempMatrix2;\r\n    var calcMatrix = renderer._tempMatrix3;\r\n\r\n    spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        spriteMatrix.e = src.x;\r\n        spriteMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n\r\n    //  Callback\r\n    src.render.call(src, renderer, camera, calcMatrix);\r\n\r\n    renderer.rebindPipeline(pipeline);\r\n};\r\n\r\nmodule.exports = ExternWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuV2ViR0xSZW5kZXJlci5qcz9lMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZXh0ZXJuL0V4dGVybldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FeHRlcm4jcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRXh0ZXJufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRXh0ZXJuV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBwaXBlbGluZSA9IHJlbmRlcmVyLmN1cnJlbnRQaXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5jbGVhclBpcGVsaW5lKCk7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzcHJpdGVNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBzcHJpdGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgPSBzcmMueTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBDYWxsYmFja1xyXG4gICAgc3JjLnJlbmRlci5jYWxsKHNyYywgcmVuZGVyZXIsIGNhbWVyYSwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgcmVuZGVyZXIucmViaW5kUGlwZWxpbmUocGlwZWxpbmUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFeHRlcm5XZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/Commands.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/Commands.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ARC: 0,\r\n    BEGIN_PATH: 1,\r\n    CLOSE_PATH: 2,\r\n    FILL_RECT: 3,\r\n    LINE_TO: 4,\r\n    MOVE_TO: 5,\r\n    LINE_STYLE: 6,\r\n    FILL_STYLE: 7,\r\n    FILL_PATH: 8,\r\n    STROKE_PATH: 9,\r\n    FILL_TRIANGLE: 10,\r\n    STROKE_TRIANGLE: 11,\r\n    SAVE: 14,\r\n    RESTORE: 15,\r\n    TRANSLATE: 16,\r\n    SCALE: 17,\r\n    ROTATE: 18,\r\n    SET_TEXTURE: 19,\r\n    CLEAR_TEXTURE: 20,\r\n    GRADIENT_FILL_STYLE: 21,\r\n    GRADIENT_LINE_STYLE: 22\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9Db21tYW5kcy5qcz84ZDhjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9Db21tYW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQVJDOiAwLFxyXG4gICAgQkVHSU5fUEFUSDogMSxcclxuICAgIENMT1NFX1BBVEg6IDIsXHJcbiAgICBGSUxMX1JFQ1Q6IDMsXHJcbiAgICBMSU5FX1RPOiA0LFxyXG4gICAgTU9WRV9UTzogNSxcclxuICAgIExJTkVfU1RZTEU6IDYsXHJcbiAgICBGSUxMX1NUWUxFOiA3LFxyXG4gICAgRklMTF9QQVRIOiA4LFxyXG4gICAgU1RST0tFX1BBVEg6IDksXHJcbiAgICBGSUxMX1RSSUFOR0xFOiAxMCxcclxuICAgIFNUUk9LRV9UUklBTkdMRTogMTEsXHJcbiAgICBTQVZFOiAxNCxcclxuICAgIFJFU1RPUkU6IDE1LFxyXG4gICAgVFJBTlNMQVRFOiAxNixcclxuICAgIFNDQUxFOiAxNyxcclxuICAgIFJPVEFURTogMTgsXHJcbiAgICBTRVRfVEVYVFVSRTogMTksXHJcbiAgICBDTEVBUl9URVhUVVJFOiAyMCxcclxuICAgIEdSQURJRU5UX0ZJTExfU1RZTEU6IDIxLFxyXG4gICAgR1JBRElFTlRfTElORV9TVFlMRTogMjJcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/Commands.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/Graphics.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/Graphics.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCamera = __webpack_require__(/*! ../../cameras/2d/BaseCamera.js */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar ComponentsAlpha = __webpack_require__(/*! ../components/Alpha */ \"./node_modules/phaser/src/gameobjects/components/Alpha.js\");\r\nvar ComponentsBlendMode = __webpack_require__(/*! ../components/BlendMode */ \"./node_modules/phaser/src/gameobjects/components/BlendMode.js\");\r\nvar ComponentsDepth = __webpack_require__(/*! ../components/Depth */ \"./node_modules/phaser/src/gameobjects/components/Depth.js\");\r\nvar ComponentsMask = __webpack_require__(/*! ../components/Mask */ \"./node_modules/phaser/src/gameobjects/components/Mask.js\");\r\nvar ComponentsPipeline = __webpack_require__(/*! ../components/Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\");\r\nvar ComponentsTransform = __webpack_require__(/*! ../components/Transform */ \"./node_modules/phaser/src/gameobjects/components/Transform.js\");\r\nvar ComponentsVisible = __webpack_require__(/*! ../components/Visible */ \"./node_modules/phaser/src/gameobjects/components/Visible.js\");\r\nvar ComponentsScrollFactor = __webpack_require__(/*! ../components/ScrollFactor */ \"./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\");\r\n\r\nvar TransformMatrix = __webpack_require__(/*! ../components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\n\r\nvar Ellipse = __webpack_require__(/*! ../../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Render = __webpack_require__(/*! ./GraphicsRender */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Graphics object is a way to draw primitive shapes to your game. Primitives include forms of geometry, such as\r\n * Rectangles, Circles, and Polygons. They also include lines, arcs and curves. When you initially create a Graphics\r\n * object it will be empty.\r\n *\r\n * To draw to it you must first specify a line style or fill style (or both), draw shapes using paths, and finally\r\n * fill or stroke them. For example:\r\n *\r\n * ```javascript\r\n * graphics.lineStyle(5, 0xFF00FF, 1.0);\r\n * graphics.beginPath();\r\n * graphics.moveTo(100, 100);\r\n * graphics.lineTo(200, 200);\r\n * graphics.closePath();\r\n * graphics.strokePath();\r\n * ```\r\n *\r\n * There are also many helpful methods that draw and fill/stroke common shapes for you.\r\n *\r\n * ```javascript\r\n * graphics.lineStyle(5, 0xFF00FF, 1.0);\r\n * graphics.fillStyle(0xFFFFFF, 1.0);\r\n * graphics.fillRect(50, 50, 400, 200);\r\n * graphics.strokeRect(50, 50, 400, 200);\r\n * ```\r\n *\r\n * When a Graphics object is rendered it will render differently based on if the game is running under Canvas or WebGL.\r\n * Under Canvas it will use the HTML Canvas context drawing operations to draw the path.\r\n * Under WebGL the graphics data is decomposed into polygons. Both of these are expensive processes, especially with\r\n * complex shapes.\r\n *\r\n * If your Graphics object doesn't change much (or at all) once you've drawn your shape to it, then you will help\r\n * performance by calling {@link Phaser.GameObjects.Graphics#generateTexture}. This will 'bake' the Graphics object into\r\n * a Texture, and return it. You can then use this Texture for Sprites or other display objects. If your Graphics object\r\n * updates frequently then you should avoid doing this, as it will constantly generate new textures, which will consume\r\n * memory.\r\n *\r\n * As you can tell, Graphics objects are a bit of a trade-off. While they are extremely useful, you need to be careful\r\n * in their complexity and quantity of them in your game.\r\n *\r\n * @class Graphics\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Graphics object belongs.\r\n * @param {Phaser.Types.GameObjects.Graphics.Options} [options] - Options that set the position and default style of this Graphics object.\r\n */\r\nvar Graphics = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        ComponentsAlpha,\r\n        ComponentsBlendMode,\r\n        ComponentsDepth,\r\n        ComponentsMask,\r\n        ComponentsPipeline,\r\n        ComponentsTransform,\r\n        ComponentsVisible,\r\n        ComponentsScrollFactor,\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Graphics (scene, options)\r\n    {\r\n        var x = GetValue(options, 'x', 0);\r\n        var y = GetValue(options, 'y', 0);\r\n\r\n        GameObject.call(this, scene, 'Graphics');\r\n\r\n        this.setPosition(x, y);\r\n        this.initPipeline();\r\n\r\n        /**\r\n         * The horizontal display origin of the Graphics.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#displayOriginX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.displayOriginX = 0;\r\n\r\n        /**\r\n         * The vertical display origin of the Graphics.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#displayOriginY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.displayOriginY = 0;\r\n\r\n        /**\r\n         * The array of commands used to render the Graphics.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#commandBuffer\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.commandBuffer = [];\r\n\r\n        /**\r\n         * The default fill color for shapes rendered by this Graphics object.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#defaultFillColor\r\n         * @type {number}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultFillColor = -1;\r\n\r\n        /**\r\n         * The default fill alpha for shapes rendered by this Graphics object.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#defaultFillAlpha\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultFillAlpha = 1;\r\n\r\n        /**\r\n         * The default stroke width for shapes rendered by this Graphics object.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#defaultStrokeWidth\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultStrokeWidth = 1;\r\n\r\n        /**\r\n         * The default stroke color for shapes rendered by this Graphics object.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#defaultStrokeColor\r\n         * @type {number}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultStrokeColor = -1;\r\n\r\n        /**\r\n         * The default stroke alpha for shapes rendered by this Graphics object.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#defaultStrokeAlpha\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultStrokeAlpha = 1;\r\n\r\n        /**\r\n         * Internal property that keeps track of the line width style setting.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#_lineWidth\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._lineWidth = 1.0;\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#_tempMatrix1\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix1 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#_tempMatrix2\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Graphics#_tempMatrix3\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix3 = new TransformMatrix();\r\n\r\n        this.setDefaultStyles(options);\r\n    },\r\n\r\n    /**\r\n     * Set the default style settings for this Graphics object.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#setDefaultStyles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Graphics.Styles} options - The styles to set as defaults.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    setDefaultStyles: function (options)\r\n    {\r\n        if (GetValue(options, 'lineStyle', null))\r\n        {\r\n            this.defaultStrokeWidth = GetValue(options, 'lineStyle.width', 1);\r\n            this.defaultStrokeColor = GetValue(options, 'lineStyle.color', 0xffffff);\r\n            this.defaultStrokeAlpha = GetValue(options, 'lineStyle.alpha', 1);\r\n\r\n            this.lineStyle(this.defaultStrokeWidth, this.defaultStrokeColor, this.defaultStrokeAlpha);\r\n        }\r\n\r\n        if (GetValue(options, 'fillStyle', null))\r\n        {\r\n            this.defaultFillColor = GetValue(options, 'fillStyle.color', 0xffffff);\r\n            this.defaultFillAlpha = GetValue(options, 'fillStyle.alpha', 1);\r\n\r\n            this.fillStyle(this.defaultFillColor, this.defaultFillAlpha);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the current line style.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#lineStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} lineWidth - The stroke width.\r\n     * @param {number} color - The stroke color.\r\n     * @param {number} [alpha=1] - The stroke alpha.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    lineStyle: function (lineWidth, color, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.LINE_STYLE,\r\n            lineWidth, color, alpha\r\n        );\r\n\r\n        this._lineWidth = lineWidth;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the current fill style.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} color - The fill color.\r\n     * @param {number} [alpha=1] - The fill alpha.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillStyle: function (color, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.FILL_STYLE,\r\n            color, alpha\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a gradient fill style. This is a WebGL only feature.\r\n     *\r\n     * The gradient color values represent the 4 corners of an untransformed rectangle.\r\n     * The gradient is used to color all filled shapes and paths drawn after calling this method.\r\n     * If you wish to turn a gradient off, call `fillStyle` and provide a new single fill color.\r\n     *\r\n     * When filling a triangle only the first 3 color values provided are used for the 3 points of a triangle.\r\n     *\r\n     * This feature is best used only on rectangles and triangles. All other shapes will give strange results.\r\n     *\r\n     * Note that for objects such as arcs or ellipses, or anything which is made out of triangles, each triangle used\r\n     * will be filled with a gradient on its own. There is no ability to gradient fill a shape or path as a single\r\n     * entity at this time.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillGradientStyle\r\n     * @webglOnly\r\n     * @since 3.12.0\r\n     *\r\n     * @param {integer} topLeft - The tint being applied to the top-left of the Game Object.\r\n     * @param {integer} topRight - The tint being applied to the top-right of the Game Object.\r\n     * @param {integer} bottomLeft - The tint being applied to the bottom-left of the Game Object.\r\n     * @param {integer} bottomRight - The tint being applied to the bottom-right of the Game Object.\r\n     * @param {number} [alpha=1] - The fill alpha.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillGradientStyle: function (topLeft, topRight, bottomLeft, bottomRight, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.GRADIENT_FILL_STYLE,\r\n            alpha, topLeft, topRight, bottomLeft, bottomRight\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a gradient line style. This is a WebGL only feature.\r\n     *\r\n     * The gradient color values represent the 4 corners of an untransformed rectangle.\r\n     * The gradient is used to color all stroked shapes and paths drawn after calling this method.\r\n     * If you wish to turn a gradient off, call `lineStyle` and provide a new single line color.\r\n     *\r\n     * This feature is best used only on single lines. All other shapes will give strange results.\r\n     *\r\n     * Note that for objects such as arcs or ellipses, or anything which is made out of triangles, each triangle used\r\n     * will be filled with a gradient on its own. There is no ability to gradient stroke a shape or path as a single\r\n     * entity at this time.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#lineGradientStyle\r\n     * @webglOnly\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} lineWidth - The stroke width.\r\n     * @param {integer} topLeft - The tint being applied to the top-left of the Game Object.\r\n     * @param {integer} topRight - The tint being applied to the top-right of the Game Object.\r\n     * @param {integer} bottomLeft - The tint being applied to the bottom-left of the Game Object.\r\n     * @param {integer} bottomRight - The tint being applied to the bottom-right of the Game Object.\r\n     * @param {number} [alpha=1] - The fill alpha.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    lineGradientStyle: function (lineWidth, topLeft, topRight, bottomLeft, bottomRight, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.GRADIENT_LINE_STYLE,\r\n            lineWidth, alpha, topLeft, topRight, bottomLeft, bottomRight\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the texture frame this Graphics Object will use when drawing all shapes defined after calling this.\r\n     *\r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     *\r\n     * Once set, all shapes will use this texture. Call this method with no arguments to clear it.\r\n     *\r\n     * The textures are not tiled. They are stretched to the dimensions of the shapes being rendered. For this reason,\r\n     * it works best with seamless / tileable textures.\r\n     *\r\n     * The mode argument controls how the textures are combined with the fill colors. The default value (0) will\r\n     * multiply the texture by the fill color. A value of 1 will use just the fill color, but the alpha data from the texture,\r\n     * and a value of 2 will use just the texture and no fill color at all.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#setTexture\r\n     * @since 3.12.0\r\n     * @webglOnly\r\n     *\r\n     * @param {string} [key] - The key of the texture to be used, as stored in the Texture Manager. Leave blank to clear a previously set texture.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     * @param {number} [mode=0] - The texture tint mode. 0 is multiply, 1 is alpha only and 2 is texture only.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setTexture: function (key, frame, mode)\r\n    {\r\n        if (mode === undefined) { mode = 0; }\r\n\r\n        if (key === undefined)\r\n        {\r\n            this.commandBuffer.push(\r\n                Commands.CLEAR_TEXTURE\r\n            );\r\n        }\r\n        else\r\n        {\r\n            var textureFrame = this.scene.sys.textures.getFrame(key, frame);\r\n\r\n            if (textureFrame)\r\n            {\r\n                if (mode === 2)\r\n                {\r\n                    mode = 3;\r\n                }\r\n\r\n                this.commandBuffer.push(\r\n                    Commands.SET_TEXTURE,\r\n                    textureFrame,\r\n                    mode\r\n                );\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Start a new shape path.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#beginPath\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    beginPath: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.BEGIN_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Close the current path.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#closePath\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    closePath: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.CLOSE_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the current path.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillPath\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillPath: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.FILL_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the current path.\r\n     * \r\n     * This is an alias for `Graphics.fillPath` and does the same thing.\r\n     * It was added to match the CanvasRenderingContext 2D API.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fill\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fill: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.FILL_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke the current path.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokePath\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokePath: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.STROKE_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke the current path.\r\n     * \r\n     * This is an alias for `Graphics.strokePath` and does the same thing.\r\n     * It was added to match the CanvasRenderingContext 2D API.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#stroke\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    stroke: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.STROKE_PATH\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the given circle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillCircleShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Circle} circle - The circle to fill.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillCircleShape: function (circle)\r\n    {\r\n        return this.fillCircle(circle.x, circle.y, circle.radius);\r\n    },\r\n\r\n    /**\r\n     * Stroke the given circle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeCircleShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Circle} circle - The circle to stroke.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeCircleShape: function (circle)\r\n    {\r\n        return this.strokeCircle(circle.x, circle.y, circle.radius);\r\n    },\r\n\r\n    /**\r\n     * Fill a circle with the given position and radius.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the circle.\r\n     * @param {number} y - The y coordinate of the center of the circle.\r\n     * @param {number} radius - The radius of the circle.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillCircle: function (x, y, radius)\r\n    {\r\n        this.beginPath();\r\n        this.arc(x, y, radius, 0, MATH_CONST.PI2);\r\n        this.fillPath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke a circle with the given position and radius.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the circle.\r\n     * @param {number} y - The y coordinate of the center of the circle.\r\n     * @param {number} radius - The radius of the circle.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeCircle: function (x, y, radius)\r\n    {\r\n        this.beginPath();\r\n        this.arc(x, y, radius, 0, MATH_CONST.PI2);\r\n        this.strokePath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the given rectangle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillRectShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} rect - The rectangle to fill.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillRectShape: function (rect)\r\n    {\r\n        return this.fillRect(rect.x, rect.y, rect.width, rect.height);\r\n    },\r\n\r\n    /**\r\n     * Stroke the given rectangle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeRectShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Rectangle} rect - The rectangle to stroke.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeRectShape: function (rect)\r\n    {\r\n        return this.strokeRect(rect.x, rect.y, rect.width, rect.height);\r\n    },\r\n\r\n    /**\r\n     * Fill a rectangle with the given position and size.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillRect\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n     * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n     * @param {number} width - The width of the rectangle.\r\n     * @param {number} height - The height of the rectangle.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillRect: function (x, y, width, height)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.FILL_RECT,\r\n            x, y, width, height\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke a rectangle with the given position and size.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeRect\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n     * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n     * @param {number} width - The width of the rectangle.\r\n     * @param {number} height - The height of the rectangle.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeRect: function (x, y, width, height)\r\n    {\r\n        var lineWidthHalf = this._lineWidth / 2;\r\n        var minx = x - lineWidthHalf;\r\n        var maxx = x + lineWidthHalf;\r\n\r\n        this.beginPath();\r\n        this.moveTo(x, y);\r\n        this.lineTo(x, y + height);\r\n        this.strokePath();\r\n\r\n        this.beginPath();\r\n        this.moveTo(x + width, y);\r\n        this.lineTo(x + width, y + height);\r\n        this.strokePath();\r\n\r\n        this.beginPath();\r\n        this.moveTo(minx, y);\r\n        this.lineTo(maxx + width, y);\r\n        this.strokePath();\r\n\r\n        this.beginPath();\r\n        this.moveTo(minx, y + height);\r\n        this.lineTo(maxx + width, y + height);\r\n        this.strokePath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill a rounded rectangle with the given position, size and radius.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillRoundedRect\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n     * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n     * @param {number} width - The width of the rectangle.\r\n     * @param {number} height - The height of the rectangle.\r\n     * @param {(Phaser.Types.GameObjects.Graphics.RoundedRectRadius|number)} [radius=20] - The corner radius; It can also be an object to specify different radii for corners.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillRoundedRect: function (x, y, width, height, radius)\r\n    {\r\n        if (radius === undefined) { radius = 20; }\r\n\r\n        var tl = radius;\r\n        var tr = radius;\r\n        var bl = radius;\r\n        var br = radius;\r\n\r\n        if (typeof radius !== 'number')\r\n        {\r\n            tl = GetFastValue(radius, 'tl', 20);\r\n            tr = GetFastValue(radius, 'tr', 20);\r\n            bl = GetFastValue(radius, 'bl', 20);\r\n            br = GetFastValue(radius, 'br', 20);\r\n        }\r\n\r\n        this.beginPath();\r\n        this.moveTo(x + tl, y);\r\n        this.lineTo(x + width - tr, y);\r\n        this.arc(x + width - tr, y + tr, tr, -MATH_CONST.TAU, 0);\r\n        this.lineTo(x + width, y + height - br);\r\n        this.arc(x + width - br, y + height - br, br, 0, MATH_CONST.TAU);\r\n        this.lineTo(x + bl, y + height);\r\n        this.arc(x + bl, y + height - bl, bl, MATH_CONST.TAU, Math.PI);\r\n        this.lineTo(x, y + tl);\r\n        this.arc(x + tl, y + tl, tl, -Math.PI, -MATH_CONST.TAU);\r\n        this.fillPath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke a rounded rectangle with the given position, size and radius.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeRoundedRect\r\n     * @since 3.11.0\r\n     *\r\n     * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n     * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n     * @param {number} width - The width of the rectangle.\r\n     * @param {number} height - The height of the rectangle.\r\n     * @param {(Phaser.Types.GameObjects.Graphics.RoundedRectRadius|number)} [radius=20] - The corner radius; It can also be an object to specify different radii for corners.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeRoundedRect: function (x, y, width, height, radius)\r\n    {\r\n        if (radius === undefined) { radius = 20; }\r\n\r\n        var tl = radius;\r\n        var tr = radius;\r\n        var bl = radius;\r\n        var br = radius;\r\n\r\n        if (typeof radius !== 'number')\r\n        {\r\n            tl = GetFastValue(radius, 'tl', 20);\r\n            tr = GetFastValue(radius, 'tr', 20);\r\n            bl = GetFastValue(radius, 'bl', 20);\r\n            br = GetFastValue(radius, 'br', 20);\r\n        }\r\n\r\n        this.beginPath();\r\n        this.moveTo(x + tl, y);\r\n        this.lineTo(x + width - tr, y);\r\n        this.arc(x + width - tr, y + tr, tr, -MATH_CONST.TAU, 0);\r\n        this.lineTo(x + width, y + height - br);\r\n        this.arc(x + width - br, y + height - br, br, 0, MATH_CONST.TAU);\r\n        this.lineTo(x + bl, y + height);\r\n        this.arc(x + bl, y + height - bl, bl, MATH_CONST.TAU, Math.PI);\r\n        this.lineTo(x, y + tl);\r\n        this.arc(x + tl, y + tl, tl, -Math.PI, -MATH_CONST.TAU);\r\n        this.strokePath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the given point.\r\n     *\r\n     * Draws a square at the given position, 1 pixel in size by default.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillPointShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} point - The point to fill.\r\n     * @param {number} [size=1] - The size of the square to draw.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillPointShape: function (point, size)\r\n    {\r\n        return this.fillPoint(point.x, point.y, size);\r\n    },\r\n\r\n    /**\r\n     * Fill a point at the given position.\r\n     *\r\n     * Draws a square at the given position, 1 pixel in size by default.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the point.\r\n     * @param {number} y - The y coordinate of the point.\r\n     * @param {number} [size=1] - The size of the square to draw.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillPoint: function (x, y, size)\r\n    {\r\n        if (!size || size < 1)\r\n        {\r\n            size = 1;\r\n        }\r\n        else\r\n        {\r\n            x -= (size / 2);\r\n            y -= (size / 2);\r\n        }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.FILL_RECT,\r\n            x, y, size, size\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the given triangle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillTriangleShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Triangle} triangle - The triangle to fill.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillTriangleShape: function (triangle)\r\n    {\r\n        return this.fillTriangle(triangle.x1, triangle.y1, triangle.x2, triangle.y2, triangle.x3, triangle.y3);\r\n    },\r\n\r\n    /**\r\n     * Stroke the given triangle.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeTriangleShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Triangle} triangle - The triangle to stroke.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeTriangleShape: function (triangle)\r\n    {\r\n        return this.strokeTriangle(triangle.x1, triangle.y1, triangle.x2, triangle.y2, triangle.x3, triangle.y3);\r\n    },\r\n\r\n    /**\r\n     * Fill a triangle with the given points.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillTriangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x0 - The x coordinate of the first point.\r\n     * @param {number} y0 - The y coordinate of the first point.\r\n     * @param {number} x1 - The x coordinate of the second point.\r\n     * @param {number} y1 - The y coordinate of the second point.\r\n     * @param {number} x2 - The x coordinate of the third point.\r\n     * @param {number} y2 - The y coordinate of the third point.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillTriangle: function (x0, y0, x1, y1, x2, y2)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.FILL_TRIANGLE,\r\n            x0, y0, x1, y1, x2, y2\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke a triangle with the given points.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeTriangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x0 - The x coordinate of the first point.\r\n     * @param {number} y0 - The y coordinate of the first point.\r\n     * @param {number} x1 - The x coordinate of the second point.\r\n     * @param {number} y1 - The y coordinate of the second point.\r\n     * @param {number} x2 - The x coordinate of the third point.\r\n     * @param {number} y2 - The y coordinate of the third point.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeTriangle: function (x0, y0, x1, y1, x2, y2)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.STROKE_TRIANGLE,\r\n            x0, y0, x1, y1, x2, y2\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draw the given line.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeLineShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Line} line - The line to stroke.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeLineShape: function (line)\r\n    {\r\n        return this.lineBetween(line.x1, line.y1, line.x2, line.y2);\r\n    },\r\n\r\n    /**\r\n     * Draw a line between the given points.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#lineBetween\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x1 - The x coordinate of the start point of the line.\r\n     * @param {number} y1 - The y coordinate of the start point of the line.\r\n     * @param {number} x2 - The x coordinate of the end point of the line.\r\n     * @param {number} y2 - The y coordinate of the end point of the line.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    lineBetween: function (x1, y1, x2, y2)\r\n    {\r\n        this.beginPath();\r\n        this.moveTo(x1, y1);\r\n        this.lineTo(x2, y2);\r\n        this.strokePath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draw a line from the current drawing position to the given position.\r\n     *\r\n     * Moves the current drawing position to the given position.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#lineTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to draw the line to.\r\n     * @param {number} y - The y coordinate to draw the line to.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    lineTo: function (x, y)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.LINE_TO,\r\n            x, y\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Move the current drawing position to the given position.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#moveTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to move to.\r\n     * @param {number} y - The y coordinate to move to.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    moveTo: function (x, y)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.MOVE_TO,\r\n            x, y\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke the shape represented by the given array of points.\r\n     *\r\n     * Pass `closeShape` to automatically close the shape by joining the last to the first point.\r\n     * \r\n     * Pass `closePath` to automatically close the path before it is stroked.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokePoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(array|Phaser.Geom.Point[])} points - The points to stroke.\r\n     * @param {boolean} [closeShape=false] - When `true`, the shape is closed by joining the last point to the first point.\r\n     * @param {boolean} [closePath=false] - When `true`, the path is closed before being stroked.\r\n     * @param {integer} [endIndex] - The index of `points` to stop drawing at. Defaults to `points.length`.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokePoints: function (points, closeShape, closePath, endIndex)\r\n    {\r\n        if (closeShape === undefined) { closeShape = false; }\r\n        if (closePath === undefined) { closePath = false; }\r\n        if (endIndex === undefined) { endIndex = points.length; }\r\n\r\n        this.beginPath();\r\n\r\n        this.moveTo(points[0].x, points[0].y);\r\n\r\n        for (var i = 1; i < endIndex; i++)\r\n        {\r\n            this.lineTo(points[i].x, points[i].y);\r\n        }\r\n\r\n        if (closeShape)\r\n        {\r\n            this.lineTo(points[0].x, points[0].y);\r\n        }\r\n\r\n        if (closePath)\r\n        {\r\n            this.closePath();\r\n        }\r\n\r\n        this.strokePath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Fill the shape represented by the given array of points.\r\n     *\r\n     * Pass `closeShape` to automatically close the shape by joining the last to the first point.\r\n     * \r\n     * Pass `closePath` to automatically close the path before it is filled.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(array|Phaser.Geom.Point[])} points - The points to fill.\r\n     * @param {boolean} [closeShape=false] - When `true`, the shape is closed by joining the last point to the first point.\r\n     * @param {boolean} [closePath=false] - When `true`, the path is closed before being stroked.\r\n     * @param {integer} [endIndex] - The index of `points` to stop at. Defaults to `points.length`.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillPoints: function (points, closeShape, closePath, endIndex)\r\n    {\r\n        if (closeShape === undefined) { closeShape = false; }\r\n        if (closePath === undefined) { closePath = false; }\r\n        if (endIndex === undefined) { endIndex = points.length; }\r\n\r\n        this.beginPath();\r\n\r\n        this.moveTo(points[0].x, points[0].y);\r\n\r\n        for (var i = 1; i < endIndex; i++)\r\n        {\r\n            this.lineTo(points[i].x, points[i].y);\r\n        }\r\n\r\n        if (closeShape)\r\n        {\r\n            this.lineTo(points[0].x, points[0].y);\r\n        }\r\n\r\n        if (closePath)\r\n        {\r\n            this.closePath();\r\n        }\r\n\r\n        this.fillPath();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stroke the given ellipse.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeEllipseShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Ellipse} ellipse - The ellipse to stroke.\r\n     * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeEllipseShape: function (ellipse, smoothness)\r\n    {\r\n        if (smoothness === undefined) { smoothness = 32; }\r\n\r\n        var points = ellipse.getPoints(smoothness);\r\n\r\n        return this.strokePoints(points, true);\r\n    },\r\n\r\n    /**\r\n     * Stroke an ellipse with the given position and size.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#strokeEllipse\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the ellipse.\r\n     * @param {number} y - The y coordinate of the center of the ellipse.\r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} height - The height of the ellipse.\r\n     * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    strokeEllipse: function (x, y, width, height, smoothness)\r\n    {\r\n        if (smoothness === undefined) { smoothness = 32; }\r\n\r\n        var ellipse = new Ellipse(x, y, width, height);\r\n\r\n        var points = ellipse.getPoints(smoothness);\r\n\r\n        return this.strokePoints(points, true);\r\n    },\r\n\r\n    /**\r\n     * Fill the given ellipse.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillEllipseShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Geom.Ellipse} ellipse - The ellipse to fill.\r\n     * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillEllipseShape: function (ellipse, smoothness)\r\n    {\r\n        if (smoothness === undefined) { smoothness = 32; }\r\n\r\n        var points = ellipse.getPoints(smoothness);\r\n\r\n        return this.fillPoints(points, true);\r\n    },\r\n\r\n    /**\r\n     * Fill an ellipse with the given position and size.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#fillEllipse\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the ellipse.\r\n     * @param {number} y - The y coordinate of the center of the ellipse.\r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} height - The height of the ellipse.\r\n     * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    fillEllipse: function (x, y, width, height, smoothness)\r\n    {\r\n        if (smoothness === undefined) { smoothness = 32; }\r\n\r\n        var ellipse = new Ellipse(x, y, width, height);\r\n\r\n        var points = ellipse.getPoints(smoothness);\r\n\r\n        return this.fillPoints(points, true);\r\n    },\r\n\r\n    /**\r\n     * Draw an arc.\r\n     *\r\n     * This method can be used to create circles, or parts of circles.\r\n     * \r\n     * Make sure you call `beginPath` before starting the arc unless you wish for the arc to automatically\r\n     * close when filled or stroked.\r\n     *\r\n     * Use the optional `overshoot` argument increase the number of iterations that take place when\r\n     * the arc is rendered in WebGL. This is useful if you're drawing an arc with an especially thick line,\r\n     * as it will allow the arc to fully join-up. Try small values at first, i.e. 0.01.\r\n     *\r\n     * Call {@link Phaser.GameObjects.Graphics#fillPath} or {@link Phaser.GameObjects.Graphics#strokePath} after calling\r\n     * this method to draw the arc.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#arc\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the circle.\r\n     * @param {number} y - The y coordinate of the center of the circle.\r\n     * @param {number} radius - The radius of the circle.\r\n     * @param {number} startAngle - The starting angle, in radians.\r\n     * @param {number} endAngle - The ending angle, in radians.\r\n     * @param {boolean} [anticlockwise=false] - Whether the drawing should be anticlockwise or clockwise.\r\n     * @param {number} [overshoot=0] - This value allows you to increase the segment iterations in WebGL rendering. Useful if the arc has a thick stroke and needs to overshoot to join-up cleanly. Use small numbers such as 0.01 to start with and increase as needed.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    arc: function (x, y, radius, startAngle, endAngle, anticlockwise, overshoot)\r\n    {\r\n        if (anticlockwise === undefined) { anticlockwise = false; }\r\n        if (overshoot === undefined) { overshoot = 0; }\r\n\r\n        this.commandBuffer.push(\r\n            Commands.ARC,\r\n            x, y, radius, startAngle, endAngle, anticlockwise, overshoot\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a pie-chart slice shape centered at `x`, `y` with the given radius.\r\n     * You must define the start and end angle of the slice.\r\n     *\r\n     * Setting the `anticlockwise` argument to `true` creates a shape similar to Pacman.\r\n     * Setting it to `false` creates a shape like a slice of pie.\r\n     *\r\n     * This method will begin a new path and close the path at the end of it.\r\n     * To display the actual slice you need to call either `strokePath` or `fillPath` after it.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#slice\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} x - The horizontal center of the slice.\r\n     * @param {number} y - The vertical center of the slice.\r\n     * @param {number} radius - The radius of the slice.\r\n     * @param {number} startAngle - The start angle of the slice, given in radians.\r\n     * @param {number} endAngle - The end angle of the slice, given in radians.\r\n     * @param {boolean} [anticlockwise=false] - Whether the drawing should be anticlockwise or clockwise.\r\n     * @param {number} [overshoot=0] - This value allows you to overshoot the endAngle by this amount. Useful if the arc has a thick stroke and needs to overshoot to join-up cleanly.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    slice: function (x, y, radius, startAngle, endAngle, anticlockwise, overshoot)\r\n    {\r\n        if (anticlockwise === undefined) { anticlockwise = false; }\r\n        if (overshoot === undefined) { overshoot = 0; }\r\n\r\n        this.commandBuffer.push(Commands.BEGIN_PATH);\r\n\r\n        this.commandBuffer.push(Commands.MOVE_TO, x, y);\r\n\r\n        this.commandBuffer.push(Commands.ARC, x, y, radius, startAngle, endAngle, anticlockwise, overshoot);\r\n\r\n        this.commandBuffer.push(Commands.CLOSE_PATH);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Saves the state of the Graphics by pushing the current state onto a stack.\r\n     *\r\n     * The most recently saved state can then be restored with {@link Phaser.GameObjects.Graphics#restore}.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#save\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    save: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.SAVE\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Restores the most recently saved state of the Graphics by popping from the state stack.\r\n     *\r\n     * Use {@link Phaser.GameObjects.Graphics#save} to save the current state, and call this afterwards to restore that state.\r\n     *\r\n     * If there is no saved state, this command does nothing.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#restore\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    restore: function ()\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.RESTORE\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Inserts a translation command into this Graphics objects command buffer.\r\n     * \r\n     * All objects drawn _after_ calling this method will be translated\r\n     * by the given amount.\r\n     * \r\n     * This does not change the position of the Graphics object itself,\r\n     * only of the objects drawn by it after calling this method.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#translateCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal translation to apply.\r\n     * @param {number} y - The vertical translation to apply.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    translateCanvas: function (x, y)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.TRANSLATE,\r\n            x, y\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Inserts a scale command into this Graphics objects command buffer.\r\n     * \r\n     * All objects drawn _after_ calling this method will be scaled\r\n     * by the given amount.\r\n     * \r\n     * This does not change the scale of the Graphics object itself,\r\n     * only of the objects drawn by it after calling this method.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#scaleCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scale to apply.\r\n     * @param {number} y - The vertical scale to apply.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    scaleCanvas: function (x, y)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.SCALE,\r\n            x, y\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Inserts a rotation command into this Graphics objects command buffer.\r\n     * \r\n     * All objects drawn _after_ calling this method will be rotated\r\n     * by the given amount.\r\n     * \r\n     * This does not change the rotation of the Graphics object itself,\r\n     * only of the objects drawn by it after calling this method.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#rotateCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The rotation angle, in radians.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    rotateCanvas: function (radians)\r\n    {\r\n        this.commandBuffer.push(\r\n            Commands.ROTATE,\r\n            radians\r\n        );\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clear the command buffer and reset the fill style and line style to their defaults.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    clear: function ()\r\n    {\r\n        this.commandBuffer.length = 0;\r\n\r\n        if (this.defaultFillColor > -1)\r\n        {\r\n            this.fillStyle(this.defaultFillColor, this.defaultFillAlpha);\r\n        }\r\n\r\n        if (this.defaultStrokeColor > -1)\r\n        {\r\n            this.lineStyle(this.defaultStrokeWidth, this.defaultStrokeColor, this.defaultStrokeAlpha);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a texture from this Graphics object.\r\n     *\r\n     * If `key` is a string it'll generate a new texture using it and add it into the\r\n     * Texture Manager (assuming no key conflict happens).\r\n     *\r\n     * If `key` is a Canvas it will draw the texture to that canvas context. Note that it will NOT\r\n     * automatically upload it to the GPU in WebGL mode.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#generateTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|HTMLCanvasElement)} key - The key to store the texture with in the Texture Manager, or a Canvas to draw to.\r\n     * @param {integer} [width] - The width of the graphics to generate.\r\n     * @param {integer} [height] - The height of the graphics to generate.\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n     */\r\n    generateTexture: function (key, width, height)\r\n    {\r\n        var sys = this.scene.sys;\r\n        var renderer = sys.game.renderer;\r\n\r\n        if (width === undefined) { width = sys.scale.width; }\r\n        if (height === undefined) { height = sys.scale.height; }\r\n\r\n        Graphics.TargetCamera.setScene(this.scene);\r\n        Graphics.TargetCamera.setViewport(0, 0, width, height);\r\n        Graphics.TargetCamera.scrollX = this.x;\r\n        Graphics.TargetCamera.scrollY = this.y;\r\n\r\n        var texture;\r\n        var ctx;\r\n\r\n        if (typeof key === 'string')\r\n        {\r\n            if (sys.textures.exists(key))\r\n            {\r\n                //  Key is a string, it DOES exist in the Texture Manager AND is a canvas, so draw to it\r\n\r\n                texture = sys.textures.get(key);\r\n\r\n                var src = texture.getSourceImage();\r\n\r\n                if (src instanceof HTMLCanvasElement)\r\n                {\r\n                    ctx = src.getContext('2d');\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  Key is a string and doesn't exist in the Texture Manager, so generate and save it\r\n\r\n                texture = sys.textures.createCanvas(key, width, height);\r\n\r\n                ctx = texture.getSourceImage().getContext('2d');\r\n            }\r\n        }\r\n        else if (key instanceof HTMLCanvasElement)\r\n        {\r\n            //  Key is a Canvas, so draw to it\r\n\r\n            ctx = key.getContext('2d');\r\n        }\r\n\r\n        if (ctx)\r\n        {\r\n            // var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix, renderTargetCtx, allowClip)\r\n            this.renderCanvas(renderer, this, 0, Graphics.TargetCamera, null, ctx, false);\r\n\r\n            if (texture)\r\n            {\r\n                texture.refresh();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Graphics#preDestroy\r\n     * @protected\r\n     * @since 3.9.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.commandBuffer = [];\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * A Camera used specifically by the Graphics system for rendering to textures.\r\n *\r\n * @name Phaser.GameObjects.Graphics.TargetCamera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @since 3.1.0\r\n */\r\nGraphics.TargetCamera = new BaseCamera();\r\n\r\nmodule.exports = Graphics;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljcy5qcz80MDY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywwRkFBZ0M7QUFDekQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsOEVBQVk7QUFDbkMsc0JBQXNCLG1CQUFPLENBQUMsc0ZBQXFCO0FBQ25ELDBCQUEwQixtQkFBTyxDQUFDLDhGQUF5QjtBQUMzRCxzQkFBc0IsbUJBQU8sQ0FBQyxzRkFBcUI7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2pELHlCQUF5QixtQkFBTyxDQUFDLDRGQUF3QjtBQUN6RCwwQkFBMEIsbUJBQU8sQ0FBQyw4RkFBeUI7QUFDM0Qsd0JBQXdCLG1CQUFPLENBQUMsMEZBQXVCO0FBQ3ZELDZCQUE2QixtQkFBTyxDQUFDLG9HQUE0Qjs7QUFFakUsc0JBQXNCLG1CQUFPLENBQUMsMEdBQStCOztBQUU3RCxjQUFjLG1CQUFPLENBQUMscUZBQTRCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxhQUFhLG1CQUFPLENBQUMsMEZBQWtCOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0RBQWtEO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlDQUF5QztBQUN4RDtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDZEQUE2RCxpQ0FBaUM7QUFDN0c7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxhQUFhOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw2REFBNkQsaUNBQWlDO0FBQzdHO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0NBQStDO0FBQzlELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9CQUFvQjtBQUMzRCxzQ0FBc0MsbUJBQW1CO0FBQ3pELHFDQUFxQywwQkFBMEI7O0FBRS9EOztBQUVBOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9CQUFvQjtBQUMzRCxzQ0FBc0MsbUJBQW1CO0FBQ3pELHFDQUFxQywwQkFBMEI7O0FBRS9EOztBQUVBOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCOztBQUV4RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7O0FBRXhEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDJDQUEyQyxLQUFLLDZDQUE2QztBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUJBQXVCO0FBQ2pFLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx1QkFBdUI7QUFDakUsc0NBQXNDLGVBQWU7O0FBRXJEOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsMENBQTBDO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUNBQXVDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHlCQUF5QjtBQUMzRCxtQ0FBbUMsMkJBQTJCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCYXNlQ2FtZXJhID0gcmVxdWlyZSgnLi4vLi4vY2FtZXJhcy8yZC9CYXNlQ2FtZXJhLmpzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21tYW5kcyA9IHJlcXVpcmUoJy4vQ29tbWFuZHMnKTtcclxudmFyIENvbXBvbmVudHNBbHBoYSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvQWxwaGEnKTtcclxudmFyIENvbXBvbmVudHNCbGVuZE1vZGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL0JsZW5kTW9kZScpO1xyXG52YXIgQ29tcG9uZW50c0RlcHRoID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9EZXB0aCcpO1xyXG52YXIgQ29tcG9uZW50c01hc2sgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL01hc2snKTtcclxudmFyIENvbXBvbmVudHNQaXBlbGluZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvUGlwZWxpbmUnKTtcclxudmFyIENvbXBvbmVudHNUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1RyYW5zZm9ybScpO1xyXG52YXIgQ29tcG9uZW50c1Zpc2libGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1Zpc2libGUnKTtcclxudmFyIENvbXBvbmVudHNTY3JvbGxGYWN0b3IgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1Njcm9sbEZhY3RvcicpO1xyXG5cclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcblxyXG52YXIgRWxsaXBzZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vZWxsaXBzZS9FbGxpcHNlJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0dyYXBoaWNzUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEdyYXBoaWNzIG9iamVjdCBpcyBhIHdheSB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgdG8geW91ciBnYW1lLiBQcmltaXRpdmVzIGluY2x1ZGUgZm9ybXMgb2YgZ2VvbWV0cnksIHN1Y2ggYXNcclxuICogUmVjdGFuZ2xlcywgQ2lyY2xlcywgYW5kIFBvbHlnb25zLiBUaGV5IGFsc28gaW5jbHVkZSBsaW5lcywgYXJjcyBhbmQgY3VydmVzLiBXaGVuIHlvdSBpbml0aWFsbHkgY3JlYXRlIGEgR3JhcGhpY3NcclxuICogb2JqZWN0IGl0IHdpbGwgYmUgZW1wdHkuXHJcbiAqXHJcbiAqIFRvIGRyYXcgdG8gaXQgeW91IG11c3QgZmlyc3Qgc3BlY2lmeSBhIGxpbmUgc3R5bGUgb3IgZmlsbCBzdHlsZSAob3IgYm90aCksIGRyYXcgc2hhcGVzIHVzaW5nIHBhdGhzLCBhbmQgZmluYWxseVxyXG4gKiBmaWxsIG9yIHN0cm9rZSB0aGVtLiBGb3IgZXhhbXBsZTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBncmFwaGljcy5saW5lU3R5bGUoNSwgMHhGRjAwRkYsIDEuMCk7XHJcbiAqIGdyYXBoaWNzLmJlZ2luUGF0aCgpO1xyXG4gKiBncmFwaGljcy5tb3ZlVG8oMTAwLCAxMDApO1xyXG4gKiBncmFwaGljcy5saW5lVG8oMjAwLCAyMDApO1xyXG4gKiBncmFwaGljcy5jbG9zZVBhdGgoKTtcclxuICogZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlcmUgYXJlIGFsc28gbWFueSBoZWxwZnVsIG1ldGhvZHMgdGhhdCBkcmF3IGFuZCBmaWxsL3N0cm9rZSBjb21tb24gc2hhcGVzIGZvciB5b3UuXHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZ3JhcGhpY3MubGluZVN0eWxlKDUsIDB4RkYwMEZGLCAxLjApO1xyXG4gKiBncmFwaGljcy5maWxsU3R5bGUoMHhGRkZGRkYsIDEuMCk7XHJcbiAqIGdyYXBoaWNzLmZpbGxSZWN0KDUwLCA1MCwgNDAwLCAyMDApO1xyXG4gKiBncmFwaGljcy5zdHJva2VSZWN0KDUwLCA1MCwgNDAwLCAyMDApO1xyXG4gKiBgYGBcclxuICpcclxuICogV2hlbiBhIEdyYXBoaWNzIG9iamVjdCBpcyByZW5kZXJlZCBpdCB3aWxsIHJlbmRlciBkaWZmZXJlbnRseSBiYXNlZCBvbiBpZiB0aGUgZ2FtZSBpcyBydW5uaW5nIHVuZGVyIENhbnZhcyBvciBXZWJHTC5cclxuICogVW5kZXIgQ2FudmFzIGl0IHdpbGwgdXNlIHRoZSBIVE1MIENhbnZhcyBjb250ZXh0IGRyYXdpbmcgb3BlcmF0aW9ucyB0byBkcmF3IHRoZSBwYXRoLlxyXG4gKiBVbmRlciBXZWJHTCB0aGUgZ3JhcGhpY3MgZGF0YSBpcyBkZWNvbXBvc2VkIGludG8gcG9seWdvbnMuIEJvdGggb2YgdGhlc2UgYXJlIGV4cGVuc2l2ZSBwcm9jZXNzZXMsIGVzcGVjaWFsbHkgd2l0aFxyXG4gKiBjb21wbGV4IHNoYXBlcy5cclxuICpcclxuICogSWYgeW91ciBHcmFwaGljcyBvYmplY3QgZG9lc24ndCBjaGFuZ2UgbXVjaCAob3IgYXQgYWxsKSBvbmNlIHlvdSd2ZSBkcmF3biB5b3VyIHNoYXBlIHRvIGl0LCB0aGVuIHlvdSB3aWxsIGhlbHBcclxuICogcGVyZm9ybWFuY2UgYnkgY2FsbGluZyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2dlbmVyYXRlVGV4dHVyZX0uIFRoaXMgd2lsbCAnYmFrZScgdGhlIEdyYXBoaWNzIG9iamVjdCBpbnRvXHJcbiAqIGEgVGV4dHVyZSwgYW5kIHJldHVybiBpdC4gWW91IGNhbiB0aGVuIHVzZSB0aGlzIFRleHR1cmUgZm9yIFNwcml0ZXMgb3Igb3RoZXIgZGlzcGxheSBvYmplY3RzLiBJZiB5b3VyIEdyYXBoaWNzIG9iamVjdFxyXG4gKiB1cGRhdGVzIGZyZXF1ZW50bHkgdGhlbiB5b3Ugc2hvdWxkIGF2b2lkIGRvaW5nIHRoaXMsIGFzIGl0IHdpbGwgY29uc3RhbnRseSBnZW5lcmF0ZSBuZXcgdGV4dHVyZXMsIHdoaWNoIHdpbGwgY29uc3VtZVxyXG4gKiBtZW1vcnkuXHJcbiAqXHJcbiAqIEFzIHlvdSBjYW4gdGVsbCwgR3JhcGhpY3Mgb2JqZWN0cyBhcmUgYSBiaXQgb2YgYSB0cmFkZS1vZmYuIFdoaWxlIHRoZXkgYXJlIGV4dHJlbWVseSB1c2VmdWwsIHlvdSBuZWVkIHRvIGJlIGNhcmVmdWxcclxuICogaW4gdGhlaXIgY29tcGxleGl0eSBhbmQgcXVhbnRpdHkgb2YgdGhlbSBpbiB5b3VyIGdhbWUuXHJcbiAqXHJcbiAqIEBjbGFzcyBHcmFwaGljc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdyYXBoaWNzIG9iamVjdCBiZWxvbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5HcmFwaGljcy5PcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25zIHRoYXQgc2V0IHRoZSBwb3NpdGlvbiBhbmQgZGVmYXVsdCBzdHlsZSBvZiB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICovXHJcbnZhciBHcmFwaGljcyA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50c0JsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50c01hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50c1BpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHNUcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50c1Zpc2libGUsXHJcbiAgICAgICAgQ29tcG9uZW50c1Njcm9sbEZhY3RvcixcclxuICAgICAgICBSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmFwaGljcyAoc2NlbmUsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSBHZXRWYWx1ZShvcHRpb25zLCAneCcsIDApO1xyXG4gICAgICAgIHZhciB5ID0gR2V0VmFsdWUob3B0aW9ucywgJ3knLCAwKTtcclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnR3JhcGhpY3MnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBkaXNwbGF5IG9yaWdpbiBvZiB0aGUgR3JhcGhpY3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGlzcGxheU9yaWdpblhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlPcmlnaW5YID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIGRpc3BsYXkgb3JpZ2luIG9mIHRoZSBHcmFwaGljcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkaXNwbGF5T3JpZ2luWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU9yaWdpblkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYXJyYXkgb2YgY29tbWFuZHMgdXNlZCB0byByZW5kZXIgdGhlIEdyYXBoaWNzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2NvbW1hbmRCdWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsbCBjb2xvciBmb3Igc2hhcGVzIHJlbmRlcmVkIGJ5IHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2RlZmF1bHRGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsbENvbG9yID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGZpbGwgYWxwaGEgZm9yIHNoYXBlcyByZW5kZXJlZCBieSB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkZWZhdWx0RmlsbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsbEFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgc3Ryb2tlIHdpZHRoIGZvciBzaGFwZXMgcmVuZGVyZWQgYnkgdGhpcyBHcmFwaGljcyBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGVmYXVsdFN0cm9rZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlV2lkdGggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHJva2UgY29sb3IgZm9yIHNoYXBlcyByZW5kZXJlZCBieSB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkZWZhdWx0U3Ryb2tlQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlQ29sb3IgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgc3Ryb2tlIGFscGhhIGZvciBzaGFwZXMgcmVuZGVyZWQgYnkgdGhpcyBHcmFwaGljcyBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGVmYXVsdFN0cm9rZUFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlQWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBsaW5lIHdpZHRoIHN0eWxlIHNldHRpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjX2xpbmVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9saW5lV2lkdGggPSAxLjA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjX3RlbXBNYXRyaXgxXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4MSA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCwgcmUtdXNlZCBpbnRlcm5hbGx5IGR1cmluZyBiYXRjaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNfdGVtcE1hdHJpeDJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgyID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI190ZW1wTWF0cml4M1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDMgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFN0eWxlcyhvcHRpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGRlZmF1bHQgc3R5bGUgc2V0dGluZ3MgZm9yIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3NldERlZmF1bHRTdHlsZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlN0eWxlc30gb3B0aW9ucyAtIFRoZSBzdHlsZXMgdG8gc2V0IGFzIGRlZmF1bHRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RGVmYXVsdFN0eWxlczogZnVuY3Rpb24gKG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKEdldFZhbHVlKG9wdGlvbnMsICdsaW5lU3R5bGUnLCBudWxsKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0cm9rZVdpZHRoID0gR2V0VmFsdWUob3B0aW9ucywgJ2xpbmVTdHlsZS53aWR0aCcsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTdHJva2VDb2xvciA9IEdldFZhbHVlKG9wdGlvbnMsICdsaW5lU3R5bGUuY29sb3InLCAweGZmZmZmZik7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0cm9rZUFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ2xpbmVTdHlsZS5hbHBoYScsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5saW5lU3R5bGUodGhpcy5kZWZhdWx0U3Ryb2tlV2lkdGgsIHRoaXMuZGVmYXVsdFN0cm9rZUNvbG9yLCB0aGlzLmRlZmF1bHRTdHJva2VBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZScsIG51bGwpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsbENvbG9yID0gR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZS5jb2xvcicsIDB4ZmZmZmZmKTtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsbEFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZS5hbHBoYScsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5maWxsU3R5bGUodGhpcy5kZWZhdWx0RmlsbENvbG9yLCB0aGlzLmRlZmF1bHRGaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGxpbmUgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZVN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVdpZHRoIC0gVGhlIHN0cm9rZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xvciAtIFRoZSBzdHJva2UgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIHN0cm9rZSBhbHBoYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxpbmVTdHlsZTogZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuTElORV9TVFlMRSxcclxuICAgICAgICAgICAgbGluZVdpZHRoLCBjb2xvciwgYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl9saW5lV2lkdGggPSBsaW5lV2lkdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgY3VycmVudCBmaWxsIHN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yIC0gVGhlIGZpbGwgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGZpbGwgYWxwaGEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsU3R5bGU6IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1NUWUxFLFxyXG4gICAgICAgICAgICBjb2xvciwgYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgZ3JhZGllbnQgZmlsbCBzdHlsZS4gVGhpcyBpcyBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZ3JhZGllbnQgY29sb3IgdmFsdWVzIHJlcHJlc2VudCB0aGUgNCBjb3JuZXJzIG9mIGFuIHVudHJhbnNmb3JtZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogVGhlIGdyYWRpZW50IGlzIHVzZWQgdG8gY29sb3IgYWxsIGZpbGxlZCBzaGFwZXMgYW5kIHBhdGhzIGRyYXduIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byB0dXJuIGEgZ3JhZGllbnQgb2ZmLCBjYWxsIGBmaWxsU3R5bGVgIGFuZCBwcm92aWRlIGEgbmV3IHNpbmdsZSBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gZmlsbGluZyBhIHRyaWFuZ2xlIG9ubHkgdGhlIGZpcnN0IDMgY29sb3IgdmFsdWVzIHByb3ZpZGVkIGFyZSB1c2VkIGZvciB0aGUgMyBwb2ludHMgb2YgYSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZlYXR1cmUgaXMgYmVzdCB1c2VkIG9ubHkgb24gcmVjdGFuZ2xlcyBhbmQgdHJpYW5nbGVzLiBBbGwgb3RoZXIgc2hhcGVzIHdpbGwgZ2l2ZSBzdHJhbmdlIHJlc3VsdHMuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IGZvciBvYmplY3RzIHN1Y2ggYXMgYXJjcyBvciBlbGxpcHNlcywgb3IgYW55dGhpbmcgd2hpY2ggaXMgbWFkZSBvdXQgb2YgdHJpYW5nbGVzLCBlYWNoIHRyaWFuZ2xlIHVzZWRcclxuICAgICAqIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBncmFkaWVudCBvbiBpdHMgb3duLiBUaGVyZSBpcyBubyBhYmlsaXR5IHRvIGdyYWRpZW50IGZpbGwgYSBzaGFwZSBvciBwYXRoIGFzIGEgc2luZ2xlXHJcbiAgICAgKiBlbnRpdHkgYXQgdGhpcyB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxHcmFkaWVudFN0eWxlXHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0b3BMZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0b3BSaWdodCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJvdHRvbUxlZnQgLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJvdHRvbVJpZ2h0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgYm90dG9tLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MV0gLSBUaGUgZmlsbCBhbHBoYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxHcmFkaWVudFN0eWxlOiBmdW5jdGlvbiAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkdSQURJRU5UX0ZJTExfU1RZTEUsXHJcbiAgICAgICAgICAgIGFscGhhLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgZ3JhZGllbnQgbGluZSBzdHlsZS4gVGhpcyBpcyBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZ3JhZGllbnQgY29sb3IgdmFsdWVzIHJlcHJlc2VudCB0aGUgNCBjb3JuZXJzIG9mIGFuIHVudHJhbnNmb3JtZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogVGhlIGdyYWRpZW50IGlzIHVzZWQgdG8gY29sb3IgYWxsIHN0cm9rZWQgc2hhcGVzIGFuZCBwYXRocyBkcmF3biBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gdHVybiBhIGdyYWRpZW50IG9mZiwgY2FsbCBgbGluZVN0eWxlYCBhbmQgcHJvdmlkZSBhIG5ldyBzaW5nbGUgbGluZSBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZlYXR1cmUgaXMgYmVzdCB1c2VkIG9ubHkgb24gc2luZ2xlIGxpbmVzLiBBbGwgb3RoZXIgc2hhcGVzIHdpbGwgZ2l2ZSBzdHJhbmdlIHJlc3VsdHMuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IGZvciBvYmplY3RzIHN1Y2ggYXMgYXJjcyBvciBlbGxpcHNlcywgb3IgYW55dGhpbmcgd2hpY2ggaXMgbWFkZSBvdXQgb2YgdHJpYW5nbGVzLCBlYWNoIHRyaWFuZ2xlIHVzZWRcclxuICAgICAqIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBncmFkaWVudCBvbiBpdHMgb3duLiBUaGVyZSBpcyBubyBhYmlsaXR5IHRvIGdyYWRpZW50IHN0cm9rZSBhIHNoYXBlIG9yIHBhdGggYXMgYSBzaW5nbGVcclxuICAgICAqIGVudGl0eSBhdCB0aGlzIHRpbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZUdyYWRpZW50U3R5bGVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVdpZHRoIC0gVGhlIHN0cm9rZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdG9wTGVmdCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdG9wUmlnaHQgLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBib3R0b21MZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgYm90dG9tLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBib3R0b21SaWdodCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGZpbGwgYWxwaGEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaW5lR3JhZGllbnRTdHlsZTogZnVuY3Rpb24gKGxpbmVXaWR0aCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkdSQURJRU5UX0xJTkVfU1RZTEUsXHJcbiAgICAgICAgICAgIGxpbmVXaWR0aCwgYWxwaGEsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgZnJhbWUgdGhpcyBHcmFwaGljcyBPYmplY3Qgd2lsbCB1c2Ugd2hlbiBkcmF3aW5nIGFsbCBzaGFwZXMgZGVmaW5lZCBhZnRlciBjYWxsaW5nIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIE9uY2Ugc2V0LCBhbGwgc2hhcGVzIHdpbGwgdXNlIHRoaXMgdGV4dHVyZS4gQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyB0byBjbGVhciBpdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdGV4dHVyZXMgYXJlIG5vdCB0aWxlZC4gVGhleSBhcmUgc3RyZXRjaGVkIHRvIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzaGFwZXMgYmVpbmcgcmVuZGVyZWQuIEZvciB0aGlzIHJlYXNvbixcclxuICAgICAqIGl0IHdvcmtzIGJlc3Qgd2l0aCBzZWFtbGVzcyAvIHRpbGVhYmxlIHRleHR1cmVzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2RlIGFyZ3VtZW50IGNvbnRyb2xzIGhvdyB0aGUgdGV4dHVyZXMgYXJlIGNvbWJpbmVkIHdpdGggdGhlIGZpbGwgY29sb3JzLiBUaGUgZGVmYXVsdCB2YWx1ZSAoMCkgd2lsbFxyXG4gICAgICogbXVsdGlwbHkgdGhlIHRleHR1cmUgYnkgdGhlIGZpbGwgY29sb3IuIEEgdmFsdWUgb2YgMSB3aWxsIHVzZSBqdXN0IHRoZSBmaWxsIGNvbG9yLCBidXQgdGhlIGFscGhhIGRhdGEgZnJvbSB0aGUgdGV4dHVyZSxcclxuICAgICAqIGFuZCBhIHZhbHVlIG9mIDIgd2lsbCB1c2UganVzdCB0aGUgdGV4dHVyZSBhbmQgbm8gZmlsbCBjb2xvciBhdCBhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2V0VGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gYmUgdXNlZCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIExlYXZlIGJsYW5rIHRvIGNsZWFyIGEgcHJldmlvdXNseSBzZXQgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21vZGU9MF0gLSBUaGUgdGV4dHVyZSB0aW50IG1vZGUuIDAgaXMgbXVsdGlwbHksIDEgaXMgYWxwaGEgb25seSBhbmQgMiBpcyB0ZXh0dXJlIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUsIG1vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkgeyBtb2RlID0gMDsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgICAgIENvbW1hbmRzLkNMRUFSX1RFWFRVUkVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRleHR1cmVGcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IDIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWFuZHMuU0VUX1RFWFRVUkUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZyYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IGEgbmV3IHNoYXBlIHBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjYmVnaW5QYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGJlZ2luUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuQkVHSU5fUEFUSFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlIHRoZSBjdXJyZW50IHBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjY2xvc2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuQ0xPU0VfUEFUSFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgdGhlIGN1cnJlbnQgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuRklMTF9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgY3VycmVudCBwYXRoLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGFuIGFsaWFzIGZvciBgR3JhcGhpY3MuZmlsbFBhdGhgIGFuZCBkb2VzIHRoZSBzYW1lIHRoaW5nLlxyXG4gICAgICogSXQgd2FzIGFkZGVkIHRvIG1hdGNoIHRoZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDJEIEFQSS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1BBVEhcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgdGhlIGN1cnJlbnQgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVBhdGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNUUk9LRV9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBjdXJyZW50IHBhdGguXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGBHcmFwaGljcy5zdHJva2VQYXRoYCBhbmQgZG9lcyB0aGUgc2FtZSB0aGluZy5cclxuICAgICAqIEl0IHdhcyBhZGRlZCB0byBtYXRjaCB0aGUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAyRCBBUEkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNUUk9LRV9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgZ2l2ZW4gY2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxDaXJjbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBjaXJjbGUgdG8gZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxDaXJjbGVTaGFwZTogZnVuY3Rpb24gKGNpcmNsZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsQ2lyY2xlKGNpcmNsZS54LCBjaXJjbGUueSwgY2lyY2xlLnJhZGl1cyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBnaXZlbiBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlQ2lyY2xlU2hhcGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgY2lyY2xlIHRvIHN0cm9rZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZUNpcmNsZVNoYXBlOiBmdW5jdGlvbiAoY2lyY2xlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZUNpcmNsZShjaXJjbGUueCwgY2lyY2xlLnksIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSBjaXJjbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsQ2lyY2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsQ2lyY2xlOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCwgeSwgcmFkaXVzLCAwLCBNQVRIX0NPTlNULlBJMik7XHJcbiAgICAgICAgdGhpcy5maWxsUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSBjaXJjbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VDaXJjbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZUNpcmNsZTogZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMuYXJjKHgsIHksIHJhZGl1cywgMCwgTUFUSF9DT05TVC5QSTIpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxsIHRoZSBnaXZlbiByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJlY3RTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgcmVjdGFuZ2xlIHRvIGZpbGwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUmVjdFNoYXBlOiBmdW5jdGlvbiAocmVjdClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cm9rZSB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJlY3RTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgcmVjdGFuZ2xlIHRvIHN0cm9rZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJlY3RTaGFwZTogZnVuY3Rpb24gKHJlY3QpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Ryb2tlUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSByZWN0YW5nbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJlY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxSZWN0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuRklMTF9SRUNULFxyXG4gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIGEgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJlY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJlY3Q6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lV2lkdGhIYWxmID0gdGhpcy5fbGluZVdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgbWlueCA9IHggLSBsaW5lV2lkdGhIYWxmO1xyXG4gICAgICAgIHZhciBtYXh4ID0geCArIGxpbmVXaWR0aEhhbGY7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCwgeSArIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zdHJva2VQYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCArIHdpZHRoLCB5KTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMubW92ZVRvKG1pbngsIHkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKG1heHggKyB3aWR0aCwgeSk7XHJcbiAgICAgICAgdGhpcy5zdHJva2VQYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8obWlueCwgeSArIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8obWF4eCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhIHJvdW5kZWQgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uLCBzaXplIGFuZCByYWRpdXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJvdW5kZWRSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlJvdW5kZWRSZWN0UmFkaXVzfG51bWJlcil9IFtyYWRpdXM9MjBdIC0gVGhlIGNvcm5lciByYWRpdXM7IEl0IGNhbiBhbHNvIGJlIGFuIG9iamVjdCB0byBzcGVjaWZ5IGRpZmZlcmVudCByYWRpaSBmb3IgY29ybmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxSb3VuZGVkUmVjdDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcclxuICAgIHtcclxuICAgICAgICBpZiAocmFkaXVzID09PSB1bmRlZmluZWQpIHsgcmFkaXVzID0gMjA7IH1cclxuXHJcbiAgICAgICAgdmFyIHRsID0gcmFkaXVzO1xyXG4gICAgICAgIHZhciB0ciA9IHJhZGl1cztcclxuICAgICAgICB2YXIgYmwgPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIGJyID0gcmFkaXVzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0bCA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICd0bCcsIDIwKTtcclxuICAgICAgICAgICAgdHIgPSBHZXRGYXN0VmFsdWUocmFkaXVzLCAndHInLCAyMCk7XHJcbiAgICAgICAgICAgIGJsID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ2JsJywgMjApO1xyXG4gICAgICAgICAgICBiciA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICdicicsIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCArIHRsLCB5KTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGggLSB0ciwgeSk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHdpZHRoIC0gdHIsIHkgKyB0ciwgdHIsIC1NQVRIX0NPTlNULlRBVSwgMCk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYnIpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyB3aWR0aCAtIGJyLCB5ICsgaGVpZ2h0IC0gYnIsIGJyLCAwLCBNQVRIX0NPTlNULlRBVSk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCArIGJsLCB5ICsgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLmFyYyh4ICsgYmwsIHkgKyBoZWlnaHQgLSBibCwgYmwsIE1BVEhfQ09OU1QuVEFVLCBNYXRoLlBJKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4LCB5ICsgdGwpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyB0bCwgeSArIHRsLCB0bCwgLU1hdGguUEksIC1NQVRIX0NPTlNULlRBVSk7XHJcbiAgICAgICAgdGhpcy5maWxsUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSByb3VuZGVkIHJlY3RhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiwgc2l6ZSBhbmQgcmFkaXVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJvdW5kZWRSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlJvdW5kZWRSZWN0UmFkaXVzfG51bWJlcil9IFtyYWRpdXM9MjBdIC0gVGhlIGNvcm5lciByYWRpdXM7IEl0IGNhbiBhbHNvIGJlIGFuIG9iamVjdCB0byBzcGVjaWZ5IGRpZmZlcmVudCByYWRpaSBmb3IgY29ybmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJvdW5kZWRSZWN0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpdXMgPT09IHVuZGVmaW5lZCkgeyByYWRpdXMgPSAyMDsgfVxyXG5cclxuICAgICAgICB2YXIgdGwgPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIHRyID0gcmFkaXVzO1xyXG4gICAgICAgIHZhciBibCA9IHJhZGl1cztcclxuICAgICAgICB2YXIgYnIgPSByYWRpdXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcmFkaXVzICE9PSAnbnVtYmVyJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRsID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ3RsJywgMjApO1xyXG4gICAgICAgICAgICB0ciA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICd0cicsIDIwKTtcclxuICAgICAgICAgICAgYmwgPSBHZXRGYXN0VmFsdWUocmFkaXVzLCAnYmwnLCAyMCk7XHJcbiAgICAgICAgICAgIGJyID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ2JyJywgMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iZWdpblBhdGgoKTtcclxuICAgICAgICB0aGlzLm1vdmVUbyh4ICsgdGwsIHkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKHggKyB3aWR0aCAtIHRyLCB5KTtcclxuICAgICAgICB0aGlzLmFyYyh4ICsgd2lkdGggLSB0ciwgeSArIHRyLCB0ciwgLU1BVEhfQ09OU1QuVEFVLCAwKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBicik7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHdpZHRoIC0gYnIsIHkgKyBoZWlnaHQgLSBiciwgYnIsIDAsIE1BVEhfQ09OU1QuVEFVKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgYmwsIHkgKyBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyBibCwgeSArIGhlaWdodCAtIGJsLCBibCwgTUFUSF9DT05TVC5UQVUsIE1hdGguUEkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKHgsIHkgKyB0bCk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHRsLCB5ICsgdGwsIHRsLCAtTWF0aC5QSSwgLU1BVEhfQ09OU1QuVEFVKTtcclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogRHJhd3MgYSBzcXVhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCAxIHBpeGVsIGluIHNpemUgYnkgZGVmYXVsdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUG9pbnRTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8UGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBmaWxsLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTFdIC0gVGhlIHNpemUgb2YgdGhlIHNxdWFyZSB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZmlsbFBvaW50U2hhcGU6IGZ1bmN0aW9uIChwb2ludCwgc2l6ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUG9pbnQocG9pbnQueCwgcG9pbnQueSwgc2l6ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhIHBvaW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBEcmF3cyBhIHNxdWFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24sIDEgcGl4ZWwgaW4gc2l6ZSBieSBkZWZhdWx0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gLSBUaGUgc2l6ZSBvZiB0aGUgc3F1YXJlIHRvIGRyYXcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUG9pbnQ6IGZ1bmN0aW9uICh4LCB5LCBzaXplKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghc2l6ZSB8fCBzaXplIDwgMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNpemUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4IC09IChzaXplIC8gMik7XHJcbiAgICAgICAgICAgIHkgLT0gKHNpemUgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1JFQ1QsXHJcbiAgICAgICAgICAgIHgsIHksIHNpemUsIHNpemVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxsIHRoZSBnaXZlbiB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsVHJpYW5nbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxUcmlhbmdsZVNoYXBlOiBmdW5jdGlvbiAodHJpYW5nbGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFRyaWFuZ2xlKHRyaWFuZ2xlLngxLCB0cmlhbmdsZS55MSwgdHJpYW5nbGUueDIsIHRyaWFuZ2xlLnkyLCB0cmlhbmdsZS54MywgdHJpYW5nbGUueTMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cm9rZSB0aGUgZ2l2ZW4gdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlVHJpYW5nbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlVHJpYW5nbGVTaGFwZTogZnVuY3Rpb24gKHRyaWFuZ2xlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZVRyaWFuZ2xlKHRyaWFuZ2xlLngxLCB0cmlhbmdsZS55MSwgdHJpYW5nbGUueDIsIHRyaWFuZ2xlLnkyLCB0cmlhbmdsZS54MywgdHJpYW5nbGUueTMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSB0cmlhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFRyaWFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MCAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTIgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxUcmlhbmdsZTogZnVuY3Rpb24gKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkZJTExfVFJJQU5HTEUsXHJcbiAgICAgICAgICAgIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSB0cmlhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlVHJpYW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkwIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDEgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTEgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRoaXJkIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlVHJpYW5nbGU6IGZ1bmN0aW9uICh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5TVFJPS0VfVFJJQU5HTEUsXHJcbiAgICAgICAgICAgIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IHRoZSBnaXZlbiBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZUxpbmVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlTGluZVNoYXBlOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saW5lQmV0d2VlbihsaW5lLngxLCBsaW5lLnkxLCBsaW5lLngyLCBsaW5lLnkyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGEgbGluZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZUJldHdlZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBsaW5lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTIgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaW5lQmV0d2VlbjogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4MiwgeTIpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGEgbGluZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2xpbmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGRyYXcgdGhlIGxpbmUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZHJhdyB0aGUgbGluZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxpbmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkxJTkVfVE8sXHJcbiAgICAgICAgICAgIHgsIHlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIG1vdmUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gbW92ZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLk1PVkVfVE8sXHJcbiAgICAgICAgICAgIHgsIHlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgdGhlIHNoYXBlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogUGFzcyBgY2xvc2VTaGFwZWAgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgc2hhcGUgYnkgam9pbmluZyB0aGUgbGFzdCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBcclxuICAgICAqIFBhc3MgYGNsb3NlUGF0aGAgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgcGF0aCBiZWZvcmUgaXQgaXMgc3Ryb2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBwb2ludHMgLSBUaGUgcG9pbnRzIHRvIHN0cm9rZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb3NlU2hhcGU9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBzaGFwZSBpcyBjbG9zZWQgYnkgam9pbmluZyB0aGUgbGFzdCBwb2ludCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9zZVBhdGg9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBwYXRoIGlzIGNsb3NlZCBiZWZvcmUgYmVpbmcgc3Ryb2tlZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBpbmRleCBvZiBgcG9pbnRzYCB0byBzdG9wIGRyYXdpbmcgYXQuIERlZmF1bHRzIHRvIGBwb2ludHMubGVuZ3RoYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVBvaW50czogZnVuY3Rpb24gKHBvaW50cywgY2xvc2VTaGFwZSwgY2xvc2VQYXRoLCBlbmRJbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xvc2VTaGFwZSA9PT0gdW5kZWZpbmVkKSB7IGNsb3NlU2hhcGUgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjbG9zZVBhdGggPT09IHVuZGVmaW5lZCkgeyBjbG9zZVBhdGggPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IGVuZEluZGV4ID0gcG9pbnRzLmxlbmd0aDsgfVxyXG5cclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGVuZEluZGV4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVUbyhwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNsb3NlU2hhcGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgc2hhcGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBQYXNzIGBjbG9zZVNoYXBlYCB0byBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBzaGFwZSBieSBqb2luaW5nIHRoZSBsYXN0IHRvIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIFxyXG4gICAgICogUGFzcyBgY2xvc2VQYXRoYCB0byBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBwYXRoIGJlZm9yZSBpdCBpcyBmaWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IHBvaW50cyAtIFRoZSBwb2ludHMgdG8gZmlsbC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb3NlU2hhcGU9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBzaGFwZSBpcyBjbG9zZWQgYnkgam9pbmluZyB0aGUgbGFzdCBwb2ludCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9zZVBhdGg9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBwYXRoIGlzIGNsb3NlZCBiZWZvcmUgYmVpbmcgc3Ryb2tlZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBpbmRleCBvZiBgcG9pbnRzYCB0byBzdG9wIGF0LiBEZWZhdWx0cyB0byBgcG9pbnRzLmxlbmd0aGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUG9pbnRzOiBmdW5jdGlvbiAocG9pbnRzLCBjbG9zZVNoYXBlLCBjbG9zZVBhdGgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjbG9zZVNoYXBlID09PSB1bmRlZmluZWQpIHsgY2xvc2VTaGFwZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNsb3NlUGF0aCA9PT0gdW5kZWZpbmVkKSB7IGNsb3NlUGF0aCA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGVuZEluZGV4ID09PSB1bmRlZmluZWQpIHsgZW5kSW5kZXggPSBwb2ludHMubGVuZ3RoOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZW5kSW5kZXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZVRvKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2xvc2VTaGFwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2xvc2VQYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsbFBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBnaXZlbiBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZUVsbGlwc2VTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIGVsbGlwc2UgdG8gc3Ryb2tlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc21vb3RobmVzcz0zMl0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBkcmF3IHRoZSBlbGxpcHNlIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2VFbGxpcHNlU2hhcGU6IGZ1bmN0aW9uIChlbGxpcHNlLCBzbW9vdGhuZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzbW9vdGhuZXNzID09PSB1bmRlZmluZWQpIHsgc21vb3RobmVzcyA9IDMyOyB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBlbGxpcHNlLmdldFBvaW50cyhzbW9vdGhuZXNzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Ryb2tlUG9pbnRzKHBvaW50cywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIGFuIGVsbGlwc2Ugd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlRWxsaXBzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc21vb3RobmVzcz0zMl0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBkcmF3IHRoZSBlbGxpcHNlIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2VFbGxpcHNlOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgc21vb3RobmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc21vb3RobmVzcyA9PT0gdW5kZWZpbmVkKSB7IHNtb290aG5lc3MgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgZWxsaXBzZSA9IG5ldyBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gZWxsaXBzZS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZVBvaW50cyhwb2ludHMsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgdGhlIGdpdmVuIGVsbGlwc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbEVsbGlwc2VTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIGVsbGlwc2UgdG8gZmlsbC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3Ntb290aG5lc3M9MzJdIC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gZHJhdyB0aGUgZWxsaXBzZSB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZmlsbEVsbGlwc2VTaGFwZTogZnVuY3Rpb24gKGVsbGlwc2UsIHNtb290aG5lc3MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNtb290aG5lc3MgPT09IHVuZGVmaW5lZCkgeyBzbW9vdGhuZXNzID0gMzI7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IGVsbGlwc2UuZ2V0UG9pbnRzKHNtb290aG5lc3MpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUG9pbnRzKHBvaW50cywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhbiBlbGxpcHNlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxFbGxpcHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzbW9vdGhuZXNzPTMyXSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIHRvIGRyYXcgdGhlIGVsbGlwc2Ugd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxFbGxpcHNlOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgc21vb3RobmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc21vb3RobmVzcyA9PT0gdW5kZWZpbmVkKSB7IHNtb290aG5lc3MgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgZWxsaXBzZSA9IG5ldyBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gZWxsaXBzZS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGxQb2ludHMocG9pbnRzLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGFuIGFyYy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcy5cclxuICAgICAqIFxyXG4gICAgICogTWFrZSBzdXJlIHlvdSBjYWxsIGBiZWdpblBhdGhgIGJlZm9yZSBzdGFydGluZyB0aGUgYXJjIHVubGVzcyB5b3Ugd2lzaCBmb3IgdGhlIGFyYyB0byBhdXRvbWF0aWNhbGx5XHJcbiAgICAgKiBjbG9zZSB3aGVuIGZpbGxlZCBvciBzdHJva2VkLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB0aGUgb3B0aW9uYWwgYG92ZXJzaG9vdGAgYXJndW1lbnQgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgdGFrZSBwbGFjZSB3aGVuXHJcbiAgICAgKiB0aGUgYXJjIGlzIHJlbmRlcmVkIGluIFdlYkdMLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UncmUgZHJhd2luZyBhbiBhcmMgd2l0aCBhbiBlc3BlY2lhbGx5IHRoaWNrIGxpbmUsXHJcbiAgICAgKiBhcyBpdCB3aWxsIGFsbG93IHRoZSBhcmMgdG8gZnVsbHkgam9pbi11cC4gVHJ5IHNtYWxsIHZhbHVlcyBhdCBmaXJzdCwgaS5lLiAwLjAxLlxyXG4gICAgICpcclxuICAgICAqIENhbGwge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUGF0aH0gb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQYXRofSBhZnRlciBjYWxsaW5nXHJcbiAgICAgKiB0aGlzIG1ldGhvZCB0byBkcmF3IHRoZSBhcmMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjYXJjXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRBbmdsZSAtIFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRBbmdsZSAtIFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbnRpY2xvY2t3aXNlPWZhbHNlXSAtIFdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGFudGljbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvdmVyc2hvb3Q9MF0gLSBUaGlzIHZhbHVlIGFsbG93cyB5b3UgdG8gaW5jcmVhc2UgdGhlIHNlZ21lbnQgaXRlcmF0aW9ucyBpbiBXZWJHTCByZW5kZXJpbmcuIFVzZWZ1bCBpZiB0aGUgYXJjIGhhcyBhIHRoaWNrIHN0cm9rZSBhbmQgbmVlZHMgdG8gb3ZlcnNob290IHRvIGpvaW4tdXAgY2xlYW5seS4gVXNlIHNtYWxsIG51bWJlcnMgc3VjaCBhcyAwLjAxIHRvIHN0YXJ0IHdpdGggYW5kIGluY3JlYXNlIGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFyYzogZnVuY3Rpb24gKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdClcclxuICAgIHtcclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSA9PT0gdW5kZWZpbmVkKSB7IGFudGljbG9ja3dpc2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5BUkMsXHJcbiAgICAgICAgICAgIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBwaWUtY2hhcnQgc2xpY2Ugc2hhcGUgY2VudGVyZWQgYXQgYHhgLCBgeWAgd2l0aCB0aGUgZ2l2ZW4gcmFkaXVzLlxyXG4gICAgICogWW91IG11c3QgZGVmaW5lIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlIG9mIHRoZSBzbGljZS5cclxuICAgICAqXHJcbiAgICAgKiBTZXR0aW5nIHRoZSBgYW50aWNsb2Nrd2lzZWAgYXJndW1lbnQgdG8gYHRydWVgIGNyZWF0ZXMgYSBzaGFwZSBzaW1pbGFyIHRvIFBhY21hbi5cclxuICAgICAqIFNldHRpbmcgaXQgdG8gYGZhbHNlYCBjcmVhdGVzIGEgc2hhcGUgbGlrZSBhIHNsaWNlIG9mIHBpZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlZ2luIGEgbmV3IHBhdGggYW5kIGNsb3NlIHRoZSBwYXRoIGF0IHRoZSBlbmQgb2YgaXQuXHJcbiAgICAgKiBUbyBkaXNwbGF5IHRoZSBhY3R1YWwgc2xpY2UgeW91IG5lZWQgdG8gY2FsbCBlaXRoZXIgYHN0cm9rZVBhdGhgIG9yIGBmaWxsUGF0aGAgYWZ0ZXIgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2xpY2VcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY2VudGVyIG9mIHRoZSBzbGljZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNlbnRlciBvZiB0aGUgc2xpY2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgc2xpY2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRBbmdsZSAtIFRoZSBzdGFydCBhbmdsZSBvZiB0aGUgc2xpY2UsIGdpdmVuIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kQW5nbGUgLSBUaGUgZW5kIGFuZ2xlIG9mIHRoZSBzbGljZSwgZ2l2ZW4gaW4gcmFkaWFucy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FudGljbG9ja3dpc2U9ZmFsc2VdIC0gV2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgYW50aWNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW292ZXJzaG9vdD0wXSAtIFRoaXMgdmFsdWUgYWxsb3dzIHlvdSB0byBvdmVyc2hvb3QgdGhlIGVuZEFuZ2xlIGJ5IHRoaXMgYW1vdW50LiBVc2VmdWwgaWYgdGhlIGFyYyBoYXMgYSB0aGljayBzdHJva2UgYW5kIG5lZWRzIHRvIG92ZXJzaG9vdCB0byBqb2luLXVwIGNsZWFubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzbGljZTogZnVuY3Rpb24gKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdClcclxuICAgIHtcclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSA9PT0gdW5kZWZpbmVkKSB7IGFudGljbG9ja3dpc2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKENvbW1hbmRzLkJFR0lOX1BBVEgpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChDb21tYW5kcy5NT1ZFX1RPLCB4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goQ29tbWFuZHMuQVJDLCB4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlLCBvdmVyc2hvb3QpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChDb21tYW5kcy5DTE9TRV9QQVRIKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBHcmFwaGljcyBieSBwdXNoaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9udG8gYSBzdGFjay5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9zdCByZWNlbnRseSBzYXZlZCBzdGF0ZSBjYW4gdGhlbiBiZSByZXN0b3JlZCB3aXRoIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjcmVzdG9yZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2F2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzYXZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5TQVZFXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdG9yZXMgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgc3RhdGUgb2YgdGhlIEdyYXBoaWNzIGJ5IHBvcHBpbmcgZnJvbSB0aGUgc3RhdGUgc3RhY2suXHJcbiAgICAgKlxyXG4gICAgICogVXNlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2F2ZX0gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSwgYW5kIGNhbGwgdGhpcyBhZnRlcndhcmRzIHRvIHJlc3RvcmUgdGhhdCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBubyBzYXZlZCBzdGF0ZSwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyZXN0b3JlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlJFU1RPUkVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGEgdHJhbnNsYXRpb24gY29tbWFuZCBpbnRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0cyBjb21tYW5kIGJ1ZmZlci5cclxuICAgICAqIFxyXG4gICAgICogQWxsIG9iamVjdHMgZHJhd24gX2FmdGVyXyBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgYmUgdHJhbnNsYXRlZFxyXG4gICAgICogYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBHcmFwaGljcyBvYmplY3QgaXRzZWxmLFxyXG4gICAgICogb25seSBvZiB0aGUgb2JqZWN0cyBkcmF3biBieSBpdCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3RyYW5zbGF0ZUNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiB0byBhcHBseS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIHRvIGFwcGx5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlQ2FudmFzOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuVFJBTlNMQVRFLFxyXG4gICAgICAgICAgICB4LCB5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBhIHNjYWxlIGNvbW1hbmQgaW50byB0aGlzIEdyYXBoaWNzIG9iamVjdHMgY29tbWFuZCBidWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCBvYmplY3RzIGRyYXduIF9hZnRlcl8gY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGJlIHNjYWxlZFxyXG4gICAgICogYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNjYWxlIG9mIHRoZSBHcmFwaGljcyBvYmplY3QgaXRzZWxmLFxyXG4gICAgICogb25seSBvZiB0aGUgb2JqZWN0cyBkcmF3biBieSBpdCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3NjYWxlQ2FudmFzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgc2NhbGUgdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZUNhbnZhczogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNDQUxFLFxyXG4gICAgICAgICAgICB4LCB5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBhIHJvdGF0aW9uIGNvbW1hbmQgaW50byB0aGlzIEdyYXBoaWNzIG9iamVjdHMgY29tbWFuZCBidWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCBvYmplY3RzIGRyYXduIF9hZnRlcl8gY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGJlIHJvdGF0ZWRcclxuICAgICAqIGJ5IHRoZSBnaXZlbiBhbW91bnQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgR3JhcGhpY3Mgb2JqZWN0IGl0c2VsZixcclxuICAgICAqIG9ubHkgb2YgdGhlIG9iamVjdHMgZHJhd24gYnkgaXQgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyb3RhdGVDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gVGhlIHJvdGF0aW9uIGFuZ2xlLCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlQ2FudmFzOiBmdW5jdGlvbiAocmFkaWFucylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuUk9UQVRFLFxyXG4gICAgICAgICAgICByYWRpYW5zXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCByZXNldCB0aGUgZmlsbCBzdHlsZSBhbmQgbGluZSBzdHlsZSB0byB0aGVpciBkZWZhdWx0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNjbGVhclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbGxDb2xvciA+IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsU3R5bGUodGhpcy5kZWZhdWx0RmlsbENvbG9yLCB0aGlzLmRlZmF1bHRGaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFN0cm9rZUNvbG9yID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVTdHlsZSh0aGlzLmRlZmF1bHRTdHJva2VXaWR0aCwgdGhpcy5kZWZhdWx0U3Ryb2tlQ29sb3IsIHRoaXMuZGVmYXVsdFN0cm9rZUFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGEgdGV4dHVyZSBmcm9tIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIGBrZXlgIGlzIGEgc3RyaW5nIGl0J2xsIGdlbmVyYXRlIGEgbmV3IHRleHR1cmUgdXNpbmcgaXQgYW5kIGFkZCBpdCBpbnRvIHRoZVxyXG4gICAgICogVGV4dHVyZSBNYW5hZ2VyIChhc3N1bWluZyBubyBrZXkgY29uZmxpY3QgaGFwcGVucykuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYGtleWAgaXMgYSBDYW52YXMgaXQgd2lsbCBkcmF3IHRoZSB0ZXh0dXJlIHRvIHRoYXQgY2FudmFzIGNvbnRleHQuIE5vdGUgdGhhdCBpdCB3aWxsIE5PVFxyXG4gICAgICogYXV0b21hdGljYWxseSB1cGxvYWQgaXQgdG8gdGhlIEdQVSBpbiBXZWJHTCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2dlbmVyYXRlVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfEhUTUxDYW52YXNFbGVtZW50KX0ga2V5IC0gVGhlIGtleSB0byBzdG9yZSB0aGUgdGV4dHVyZSB3aXRoIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIsIG9yIGEgQ2FudmFzIHRvIGRyYXcgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGdyYXBoaWNzIHRvIGdlbmVyYXRlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGdyYXBoaWNzIHRvIGdlbmVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzeXMgPSB0aGlzLnNjZW5lLnN5cztcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSBzeXMuZ2FtZS5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBzeXMuc2NhbGUud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gc3lzLnNjYWxlLmhlaWdodDsgfVxyXG5cclxuICAgICAgICBHcmFwaGljcy5UYXJnZXRDYW1lcmEuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcbiAgICAgICAgR3JhcGhpY3MuVGFyZ2V0Q2FtZXJhLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIEdyYXBoaWNzLlRhcmdldENhbWVyYS5zY3JvbGxYID0gdGhpcy54O1xyXG4gICAgICAgIEdyYXBoaWNzLlRhcmdldENhbWVyYS5zY3JvbGxZID0gdGhpcy55O1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgY3R4O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc3lzLnRleHR1cmVzLmV4aXN0cyhrZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IGlzIGEgc3RyaW5nLCBpdCBET0VTIGV4aXN0IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgQU5EIGlzIGEgY2FudmFzLCBzbyBkcmF3IHRvIGl0XHJcblxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHN5cy50ZXh0dXJlcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gdGV4dHVyZS5nZXRTb3VyY2VJbWFnZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHggPSBzcmMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBLZXkgaXMgYSBzdHJpbmcgYW5kIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIFRleHR1cmUgTWFuYWdlciwgc28gZ2VuZXJhdGUgYW5kIHNhdmUgaXRcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhrZXksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eCA9IHRleHR1cmUuZ2V0U291cmNlSW1hZ2UoKS5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEtleSBpcyBhIENhbnZhcywgc28gZHJhdyB0byBpdFxyXG5cclxuICAgICAgICAgICAgY3R4ID0ga2V5LmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3R4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gdmFyIEdyYXBoaWNzQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4LCByZW5kZXJUYXJnZXRDdHgsIGFsbG93Q2xpcClcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMocmVuZGVyZXIsIHRoaXMsIDAsIEdyYXBoaWNzLlRhcmdldENhbWVyYSwgbnVsbCwgY3R4LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEEgQ2FtZXJhIHVzZWQgc3BlY2lmaWNhbGx5IGJ5IHRoZSBHcmFwaGljcyBzeXN0ZW0gZm9yIHJlbmRlcmluZyB0byB0ZXh0dXJlcy5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzLlRhcmdldENhbWVyYVxyXG4gKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAqIEBzaW5jZSAzLjEuMFxyXG4gKi9cclxuR3JhcGhpY3MuVGFyZ2V0Q2FtZXJhID0gbmV3IEJhc2VDYW1lcmEoKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/Graphics.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Graphics#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Graphics} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n * @param {CanvasRenderingContext2D} [renderTargetCtx] - The target rendering context.\r\n * @param {boolean} allowClip - If `true` then path operations will be used instead of fill operations.\r\n */\r\nvar GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix, renderTargetCtx, allowClip)\r\n{\r\n    var commandBuffer = src.commandBuffer;\r\n    var commandBufferLength = commandBuffer.length;\r\n\r\n    var ctx = renderTargetCtx || renderer.currentContext;\r\n\r\n    if (commandBufferLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        return;\r\n    }\r\n\r\n    var lineAlpha = 1;\r\n    var fillAlpha = 1;\r\n    var lineColor = 0;\r\n    var fillColor = 0;\r\n    var lineWidth = 1;\r\n    var red = 0;\r\n    var green = 0;\r\n    var blue = 0;\r\n\r\n    //  Reset any currently active paths\r\n    ctx.beginPath();\r\n\r\n    for (var index = 0; index < commandBufferLength; ++index)\r\n    {\r\n        var commandID = commandBuffer[index];\r\n\r\n        switch (commandID)\r\n        {\r\n            case Commands.ARC:\r\n                ctx.arc(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2],\r\n                    commandBuffer[index + 3],\r\n                    commandBuffer[index + 4],\r\n                    commandBuffer[index + 5],\r\n                    commandBuffer[index + 6]\r\n                );\r\n\r\n                //  +7 because overshoot is the 7th value, not used in Canvas\r\n                index += 7;\r\n                break;\r\n\r\n            case Commands.LINE_STYLE:\r\n                lineWidth = commandBuffer[index + 1];\r\n                lineColor = commandBuffer[index + 2];\r\n                lineAlpha = commandBuffer[index + 3];\r\n                red = ((lineColor & 0xFF0000) >>> 16);\r\n                green = ((lineColor & 0xFF00) >>> 8);\r\n                blue = (lineColor & 0xFF);\r\n                ctx.strokeStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + lineAlpha + ')';\r\n                ctx.lineWidth = lineWidth;\r\n                index += 3;\r\n                break;\r\n\r\n            case Commands.FILL_STYLE:\r\n                fillColor = commandBuffer[index + 1];\r\n                fillAlpha = commandBuffer[index + 2];\r\n                red = ((fillColor & 0xFF0000) >>> 16);\r\n                green = ((fillColor & 0xFF00) >>> 8);\r\n                blue = (fillColor & 0xFF);\r\n                ctx.fillStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + fillAlpha + ')';\r\n                index += 2;\r\n                break;\r\n\r\n            case Commands.BEGIN_PATH:\r\n                ctx.beginPath();\r\n                break;\r\n\r\n            case Commands.CLOSE_PATH:\r\n                ctx.closePath();\r\n                break;\r\n\r\n            case Commands.FILL_PATH:\r\n                if (!allowClip)\r\n                {\r\n                    ctx.fill();\r\n                }\r\n                break;\r\n\r\n            case Commands.STROKE_PATH:\r\n                if (!allowClip)\r\n                {\r\n                    ctx.stroke();\r\n                }\r\n                break;\r\n\r\n            case Commands.FILL_RECT:\r\n                if (!allowClip)\r\n                {\r\n                    ctx.fillRect(\r\n                        commandBuffer[index + 1],\r\n                        commandBuffer[index + 2],\r\n                        commandBuffer[index + 3],\r\n                        commandBuffer[index + 4]\r\n                    );\r\n                }\r\n                else\r\n                {\r\n                    ctx.rect(\r\n                        commandBuffer[index + 1],\r\n                        commandBuffer[index + 2],\r\n                        commandBuffer[index + 3],\r\n                        commandBuffer[index + 4]\r\n                    );\r\n                }\r\n                index += 4;\r\n                break;\r\n\r\n            case Commands.FILL_TRIANGLE:\r\n                ctx.beginPath();\r\n                ctx.moveTo(commandBuffer[index + 1], commandBuffer[index + 2]);\r\n                ctx.lineTo(commandBuffer[index + 3], commandBuffer[index + 4]);\r\n                ctx.lineTo(commandBuffer[index + 5], commandBuffer[index + 6]);\r\n                ctx.closePath();\r\n                if (!allowClip)\r\n                {\r\n                    ctx.fill();\r\n                }\r\n                index += 6;\r\n                break;\r\n\r\n            case Commands.STROKE_TRIANGLE:\r\n                ctx.beginPath();\r\n                ctx.moveTo(commandBuffer[index + 1], commandBuffer[index + 2]);\r\n                ctx.lineTo(commandBuffer[index + 3], commandBuffer[index + 4]);\r\n                ctx.lineTo(commandBuffer[index + 5], commandBuffer[index + 6]);\r\n                ctx.closePath();\r\n                if (!allowClip)\r\n                {\r\n                    ctx.stroke();\r\n                }\r\n                index += 6;\r\n                break;\r\n\r\n            case Commands.LINE_TO:\r\n                ctx.lineTo(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 2;\r\n                break;\r\n\r\n            case Commands.MOVE_TO:\r\n                ctx.moveTo(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 2;\r\n                break;\r\n\r\n            case Commands.LINE_FX_TO:\r\n                ctx.lineTo(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 5;\r\n                break;\r\n\r\n            case Commands.MOVE_FX_TO:\r\n                ctx.moveTo(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 5;\r\n                break;\r\n\r\n            case Commands.SAVE:\r\n                ctx.save();\r\n                break;\r\n\r\n            case Commands.RESTORE:\r\n                ctx.restore();\r\n                break;\r\n\r\n            case Commands.TRANSLATE:\r\n                ctx.translate(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 2;\r\n                break;\r\n\r\n            case Commands.SCALE:\r\n                ctx.scale(\r\n                    commandBuffer[index + 1],\r\n                    commandBuffer[index + 2]\r\n                );\r\n                index += 2;\r\n                break;\r\n\r\n            case Commands.ROTATE:\r\n                ctx.rotate(\r\n                    commandBuffer[index + 1]\r\n                );\r\n                index += 1;\r\n                break;\r\n\r\n            case Commands.GRADIENT_FILL_STYLE:\r\n                index += 5;\r\n                break;\r\n\r\n            case Commands.GRADIENT_LINE_STYLE:\r\n                index += 6;\r\n                break;\r\n\r\n            case Commands.SET_TEXTURE:\r\n                index += 2;\r\n                break;\r\n        }\r\n    }\r\n\r\n    //  Restore the context saved in SetTransform\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = GraphicsCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0NhbnZhc1JlbmRlcmVyLmpzP2Q3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw4RUFBWTtBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxpSEFBMEM7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RCxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLDZCQUE2QjtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbW1hbmRzID0gcmVxdWlyZSgnLi9Db21tYW5kcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gW3JlbmRlclRhcmdldEN0eF0gLSBUaGUgdGFyZ2V0IHJlbmRlcmluZyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93Q2xpcCAtIElmIGB0cnVlYCB0aGVuIHBhdGggb3BlcmF0aW9ucyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBmaWxsIG9wZXJhdGlvbnMuXHJcbiAqL1xyXG52YXIgR3JhcGhpY3NDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgsIHJlbmRlclRhcmdldEN0eCwgYWxsb3dDbGlwKVxyXG57XHJcbiAgICB2YXIgY29tbWFuZEJ1ZmZlciA9IHNyYy5jb21tYW5kQnVmZmVyO1xyXG4gICAgdmFyIGNvbW1hbmRCdWZmZXJMZW5ndGggPSBjb21tYW5kQnVmZmVyLmxlbmd0aDtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyVGFyZ2V0Q3R4IHx8IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChjb21tYW5kQnVmZmVyTGVuZ3RoID09PSAwIHx8ICFTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaW5lQWxwaGEgPSAxO1xyXG4gICAgdmFyIGZpbGxBbHBoYSA9IDE7XHJcbiAgICB2YXIgbGluZUNvbG9yID0gMDtcclxuICAgIHZhciBmaWxsQ29sb3IgPSAwO1xyXG4gICAgdmFyIGxpbmVXaWR0aCA9IDE7XHJcbiAgICB2YXIgcmVkID0gMDtcclxuICAgIHZhciBncmVlbiA9IDA7XHJcbiAgICB2YXIgYmx1ZSA9IDA7XHJcblxyXG4gICAgLy8gIFJlc2V0IGFueSBjdXJyZW50bHkgYWN0aXZlIHBhdGhzXHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvbW1hbmRCdWZmZXJMZW5ndGg7ICsraW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbW1hbmRJRCA9IGNvbW1hbmRCdWZmZXJbaW5kZXhdO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGNvbW1hbmRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuQVJDOlxyXG4gICAgICAgICAgICAgICAgY3R4LmFyYyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyA2XVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgKzcgYmVjYXVzZSBvdmVyc2hvb3QgaXMgdGhlIDd0aCB2YWx1ZSwgbm90IHVzZWQgaW4gQ2FudmFzXHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSA3O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkxJTkVfU1RZTEU6XHJcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICBsaW5lQ29sb3IgPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl07XHJcbiAgICAgICAgICAgICAgICBsaW5lQWxwaGEgPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgM107XHJcbiAgICAgICAgICAgICAgICByZWQgPSAoKGxpbmVDb2xvciAmIDB4RkYwMDAwKSA+Pj4gMTYpO1xyXG4gICAgICAgICAgICAgICAgZ3JlZW4gPSAoKGxpbmVDb2xvciAmIDB4RkYwMCkgPj4+IDgpO1xyXG4gICAgICAgICAgICAgICAgYmx1ZSA9IChsaW5lQ29sb3IgJiAweEZGKTtcclxuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByZWQgKyAnLCcgKyBncmVlbiArICcsJyArIGJsdWUgKyAnLCcgKyBsaW5lQWxwaGEgKyAnKSc7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yID0gY29tbWFuZEJ1ZmZlcltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgZmlsbEFscGhhID0gY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmVkID0gKChmaWxsQ29sb3IgJiAweEZGMDAwMCkgPj4+IDE2KTtcclxuICAgICAgICAgICAgICAgIGdyZWVuID0gKChmaWxsQ29sb3IgJiAweEZGMDApID4+PiA4KTtcclxuICAgICAgICAgICAgICAgIGJsdWUgPSAoZmlsbENvbG9yICYgMHhGRik7XHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoJyArIHJlZCArICcsJyArIGdyZWVuICsgJywnICsgYmx1ZSArICcsJyArIGZpbGxBbHBoYSArICcpJztcclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuQkVHSU5fUEFUSDpcclxuICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5DTE9TRV9QQVRIOlxyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkZJTExfUEFUSDpcclxuICAgICAgICAgICAgICAgIGlmICghYWxsb3dDbGlwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1BBVEg6XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93Q2xpcClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuRklMTF9SRUNUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSk7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSwgY29tbWFuZEJ1ZmZlcltpbmRleCArIDRdKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLCBjb21tYW5kQnVmZmVyW2luZGV4ICsgNl0pO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDY7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSk7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSwgY29tbWFuZEJ1ZmZlcltpbmRleCArIDRdKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLCBjb21tYW5kQnVmZmVyW2luZGV4ICsgNl0pO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5NT1ZFX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX0ZYX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5NT1ZFX0ZYX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TQVZFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5SRVNUT1JFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5UUkFOU0xBVEU6XHJcbiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAxXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNDQUxFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnNjYWxlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAxXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlJPVEFURTpcclxuICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDFdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9MSU5FX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TRVRfVEVYVFVSRTpcclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0NhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar Graphics = __webpack_require__(/*! ./Graphics */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\");\r\n\r\n/**\r\n * Creates a new Graphics Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Graphics Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#graphics\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('graphics', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    var graphics = new Graphics(this.scene, config);\r\n\r\n    if (config.add)\r\n    {\r\n        this.scene.sys.displayList.add(graphics);\r\n    }\r\n    \r\n    return graphics;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0NyZWF0b3IuanM/ZTk1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELGVBQWUsbUJBQU8sQ0FBQyw4RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR3JhcGhpY3MgPSByZXF1aXJlKCcuL0dyYXBoaWNzJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgR3JhcGhpY3MgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2dyYXBoaWNzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignZ3JhcGhpY3MnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBncmFwaGljcyA9IG5ldyBHcmFwaGljcyh0aGlzLnNjZW5lLCBjb25maWcpO1xyXG5cclxuICAgIGlmIChjb25maWcuYWRkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmFkZChncmFwaGljcyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBncmFwaGljcztcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdENyZWF0b3IgY29udGV4dC5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Graphics = __webpack_require__(/*! ./Graphics */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Graphics Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Graphics Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#graphics\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Graphics.Options} [config] - The Graphics configuration.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('graphics', function (config)\r\n{\r\n    return this.displayList.add(new Graphics(this.scene, config));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0ZhY3RvcnkuanM/ZmQ2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDhFQUFZO0FBQ25DLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR3JhcGhpY3MgPSByZXF1aXJlKCcuL0dyYXBoaWNzJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdyYXBoaWNzIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNncmFwaGljc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JhcGhpY3MuT3B0aW9uc30gW2NvbmZpZ10gLSBUaGUgR3JhcGhpY3MgY29uZmlndXJhdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdncmFwaGljcycsIGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgR3JhcGhpY3ModGhpcy5zY2VuZSwgY29uZmlnKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./GraphicsWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js\");\r\n\r\n    //  Needed for Graphics.generateTexture\r\n    renderCanvas = __webpack_require__(/*! ./GraphicsCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./GraphicsCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1JlbmRlci5qcz82NDhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsd0dBQXlCOztBQUVuRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLDBHQUEwQjtBQUNyRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsMEdBQTBCO0FBQ3JEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1JlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0dyYXBoaWNzV2ViR0xSZW5kZXJlcicpO1xyXG5cclxuICAgIC8vICBOZWVkZWQgZm9yIEdyYXBoaWNzLmdlbmVyYXRlVGV4dHVyZVxyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9HcmFwaGljc0NhbnZhc1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0dyYXBoaWNzQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n//  TODO: Remove the use of this\r\nvar Point = function (x, y, width)\r\n{\r\n    this.x = x;\r\n    this.y = y;\r\n    this.width = width;\r\n};\r\n\r\n//  TODO: Remove the use of this\r\nvar Path = function (x, y, width)\r\n{\r\n    this.points = [];\r\n    this.pointsLength = 1;\r\n    this.points[0] = new Point(x, y, width);\r\n};\r\n\r\nvar matrixStack = [];\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Graphics#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Graphics} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GraphicsWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if (src.commandBuffer.length === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var pipeline = this.pipeline;\r\n\r\n    renderer.setPipeline(pipeline, src);\r\n\r\n    var camMatrix = src._tempMatrix1;\r\n    var graphicsMatrix = src._tempMatrix2;\r\n    var currentMatrix = src._tempMatrix3;\r\n\r\n    currentMatrix.loadIdentity();\r\n\r\n    graphicsMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        graphicsMatrix.e = src.x;\r\n        graphicsMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(graphicsMatrix);\r\n    }\r\n    else\r\n    {\r\n        graphicsMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        graphicsMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(graphicsMatrix);\r\n    }\r\n\r\n    var commands = src.commandBuffer;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    var lineWidth = 1;\r\n    var fillTint = pipeline.fillTint;\r\n    var strokeTint = pipeline.strokeTint;\r\n\r\n    var tx = 0;\r\n    var ty = 0;\r\n    var ta = 0;\r\n    var iterStep = 0.01;\r\n    var PI2 = Math.PI * 2;\r\n\r\n    var cmd;\r\n\r\n    var path = [];\r\n    var pathIndex = 0;\r\n    var pathOpen = false;\r\n    var lastPath = null;\r\n\r\n    var getTint = Utils.getTintAppendFloatAlphaAndSwap;\r\n\r\n    var currentTexture = renderer.blankTexture.glTexture;\r\n\r\n    for (var cmdIndex = 0; cmdIndex < commands.length; cmdIndex++)\r\n    {\r\n        cmd = commands[cmdIndex];\r\n\r\n        switch (cmd)\r\n        {\r\n            case Commands.BEGIN_PATH:\r\n\r\n                path.length = 0;\r\n                lastPath = null;\r\n                pathOpen = true;\r\n                break;\r\n\r\n            case Commands.CLOSE_PATH:\r\n\r\n                pathOpen = false;\r\n\r\n                if (lastPath && lastPath.points.length)\r\n                {\r\n                    lastPath.points.push(lastPath.points[0]);\r\n                }\r\n                break;\r\n\r\n            case Commands.FILL_PATH:\r\n                for (pathIndex = 0; pathIndex < path.length; pathIndex++)\r\n                {\r\n                    pipeline.setTexture2D(currentTexture);\r\n\r\n                    pipeline.batchFillPath(\r\n                        path[pathIndex].points,\r\n                        currentMatrix,\r\n                        camMatrix\r\n                    );\r\n                }\r\n                break;\r\n\r\n            case Commands.STROKE_PATH:\r\n                for (pathIndex = 0; pathIndex < path.length; pathIndex++)\r\n                {\r\n                    pipeline.setTexture2D(currentTexture);\r\n\r\n                    pipeline.batchStrokePath(\r\n                        path[pathIndex].points,\r\n                        lineWidth,\r\n                        pathOpen,\r\n                        currentMatrix,\r\n                        camMatrix\r\n                    );\r\n                }\r\n                break;\r\n\r\n            case Commands.LINE_STYLE:\r\n                lineWidth = commands[++cmdIndex];\r\n                var strokeColor = commands[++cmdIndex];\r\n                var strokeAlpha = commands[++cmdIndex] * alpha;\r\n                var strokeTintColor = getTint(strokeColor, strokeAlpha);\r\n                strokeTint.TL = strokeTintColor;\r\n                strokeTint.TR = strokeTintColor;\r\n                strokeTint.BL = strokeTintColor;\r\n                strokeTint.BR = strokeTintColor;\r\n                break;\r\n\r\n            case Commands.FILL_STYLE:\r\n                var fillColor = commands[++cmdIndex];\r\n                var fillAlpha = commands[++cmdIndex] * alpha;\r\n                var fillTintColor = getTint(fillColor, fillAlpha);\r\n                fillTint.TL = fillTintColor;\r\n                fillTint.TR = fillTintColor;\r\n                fillTint.BL = fillTintColor;\r\n                fillTint.BR = fillTintColor;\r\n                break;\r\n\r\n            case Commands.GRADIENT_FILL_STYLE:\r\n                var gradientFillAlpha = commands[++cmdIndex] * alpha;\r\n                fillTint.TL = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n                fillTint.TR = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n                fillTint.BL = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n                fillTint.BR = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n                break;\r\n\r\n            case Commands.GRADIENT_LINE_STYLE:\r\n                lineWidth = commands[++cmdIndex];\r\n                var gradientLineAlpha = commands[++cmdIndex] * alpha;\r\n                strokeTint.TL = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n                strokeTint.TR = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n                strokeTint.BL = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n                strokeTint.BR = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n                break;\r\n\r\n            case Commands.ARC:\r\n                var iteration = 0;\r\n                var x = commands[++cmdIndex];\r\n                var y = commands[++cmdIndex];\r\n                var radius = commands[++cmdIndex];\r\n                var startAngle = commands[++cmdIndex];\r\n                var endAngle = commands[++cmdIndex];\r\n                var anticlockwise = commands[++cmdIndex];\r\n                var overshoot = commands[++cmdIndex];\r\n\r\n                endAngle -= startAngle;\r\n\r\n                if (anticlockwise)\r\n                {\r\n                    if (endAngle < -PI2)\r\n                    {\r\n                        endAngle = -PI2;\r\n                    }\r\n                    else if (endAngle > 0)\r\n                    {\r\n                        endAngle = -PI2 + endAngle % PI2;\r\n                    }\r\n                }\r\n                else if (endAngle > PI2)\r\n                {\r\n                    endAngle = PI2;\r\n                }\r\n                else if (endAngle < 0)\r\n                {\r\n                    endAngle = PI2 + endAngle % PI2;\r\n                }\r\n\r\n                if (lastPath === null)\r\n                {\r\n                    lastPath = new Path(x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius, lineWidth);\r\n                    path.push(lastPath);\r\n                    iteration += iterStep;\r\n                }\r\n\r\n                while (iteration < 1 + overshoot)\r\n                {\r\n                    ta = endAngle * iteration + startAngle;\r\n                    tx = x + Math.cos(ta) * radius;\r\n                    ty = y + Math.sin(ta) * radius;\r\n\r\n                    lastPath.points.push(new Point(tx, ty, lineWidth));\r\n\r\n                    iteration += iterStep;\r\n                }\r\n\r\n                ta = endAngle + startAngle;\r\n                tx = x + Math.cos(ta) * radius;\r\n                ty = y + Math.sin(ta) * radius;\r\n\r\n                lastPath.points.push(new Point(tx, ty, lineWidth));\r\n\r\n                break;\r\n\r\n            case Commands.FILL_RECT:\r\n                pipeline.setTexture2D(currentTexture);\r\n                pipeline.batchFillRect(\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    currentMatrix,\r\n                    camMatrix\r\n                );\r\n                break;\r\n\r\n            case Commands.FILL_TRIANGLE:\r\n                pipeline.setTexture2D(currentTexture);\r\n                pipeline.batchFillTriangle(\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    currentMatrix,\r\n                    camMatrix\r\n                );\r\n                break;\r\n\r\n            case Commands.STROKE_TRIANGLE:\r\n                pipeline.setTexture2D(currentTexture);\r\n                pipeline.batchStrokeTriangle(\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    commands[++cmdIndex],\r\n                    lineWidth,\r\n                    currentMatrix,\r\n                    camMatrix\r\n                );\r\n                break;\r\n\r\n            case Commands.LINE_TO:\r\n                if (lastPath !== null)\r\n                {\r\n                    lastPath.points.push(new Point(commands[++cmdIndex], commands[++cmdIndex], lineWidth));\r\n                }\r\n                else\r\n                {\r\n                    lastPath = new Path(commands[++cmdIndex], commands[++cmdIndex], lineWidth);\r\n                    path.push(lastPath);\r\n                }\r\n                break;\r\n\r\n            case Commands.MOVE_TO:\r\n                lastPath = new Path(commands[++cmdIndex], commands[++cmdIndex], lineWidth);\r\n                path.push(lastPath);\r\n                break;\r\n\r\n            case Commands.SAVE:\r\n                matrixStack.push(currentMatrix.copyToArray());\r\n                break;\r\n\r\n            case Commands.RESTORE:\r\n                currentMatrix.copyFromArray(matrixStack.pop());\r\n                break;\r\n\r\n            case Commands.TRANSLATE:\r\n                x = commands[++cmdIndex];\r\n                y = commands[++cmdIndex];\r\n                currentMatrix.translate(x, y);\r\n                break;\r\n\r\n            case Commands.SCALE:\r\n                x = commands[++cmdIndex];\r\n                y = commands[++cmdIndex];\r\n                currentMatrix.scale(x, y);\r\n                break;\r\n\r\n            case Commands.ROTATE:\r\n                currentMatrix.rotate(commands[++cmdIndex]);\r\n                break;\r\n\r\n            case Commands.SET_TEXTURE:\r\n                var frame = commands[++cmdIndex];\r\n                var mode = commands[++cmdIndex];\r\n\r\n                pipeline.currentFrame = frame;\r\n                pipeline.setTexture2D(frame.glTexture, 0);\r\n                pipeline.tintEffect = mode;\r\n\r\n                currentTexture = frame.glTexture;\r\n\r\n                break;\r\n\r\n            case Commands.CLEAR_TEXTURE:\r\n                pipeline.currentFrame = renderer.blankTexture;\r\n                pipeline.tintEffect = 2;\r\n                currentTexture = renderer.blankTexture.glTexture;\r\n                break;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = GraphicsWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1dlYkdMUmVuZGVyZXIuanM/ZTk5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDhFQUFZO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQiw0QkFBNEI7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1dlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb21tYW5kcyA9IHJlcXVpcmUoJy4vQ29tbWFuZHMnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8vICBUT0RPOiBSZW1vdmUgdGhlIHVzZSBvZiB0aGlzXHJcbnZhciBQb2ludCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aClcclxue1xyXG4gICAgdGhpcy54ID0geDtcclxuICAgIHRoaXMueSA9IHk7XHJcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbn07XHJcblxyXG4vLyAgVE9ETzogUmVtb3ZlIHRoZSB1c2Ugb2YgdGhpc1xyXG52YXIgUGF0aCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aClcclxue1xyXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgIHRoaXMucG9pbnRzTGVuZ3RoID0gMTtcclxuICAgIHRoaXMucG9pbnRzWzBdID0gbmV3IFBvaW50KHgsIHksIHdpZHRoKTtcclxufTtcclxuXHJcbnZhciBtYXRyaXhTdGFjayA9IFtdO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBHcmFwaGljc1dlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICBpZiAoc3JjLmNvbW1hbmRCdWZmZXIubGVuZ3RoID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lLCBzcmMpO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBzcmMuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIGdyYXBoaWNzTWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjdXJyZW50TWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBjdXJyZW50TWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG5cclxuICAgIGdyYXBoaWNzTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBncmFwaGljc01hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgZ3JhcGhpY3NNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KGdyYXBoaWNzTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBncmFwaGljc01hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgZ3JhcGhpY3NNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KGdyYXBoaWNzTWF0cml4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29tbWFuZHMgPSBzcmMuY29tbWFuZEJ1ZmZlcjtcclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICB2YXIgbGluZVdpZHRoID0gMTtcclxuICAgIHZhciBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgdmFyIHN0cm9rZVRpbnQgPSBwaXBlbGluZS5zdHJva2VUaW50O1xyXG5cclxuICAgIHZhciB0eCA9IDA7XHJcbiAgICB2YXIgdHkgPSAwO1xyXG4gICAgdmFyIHRhID0gMDtcclxuICAgIHZhciBpdGVyU3RlcCA9IDAuMDE7XHJcbiAgICB2YXIgUEkyID0gTWF0aC5QSSAqIDI7XHJcblxyXG4gICAgdmFyIGNtZDtcclxuXHJcbiAgICB2YXIgcGF0aCA9IFtdO1xyXG4gICAgdmFyIHBhdGhJbmRleCA9IDA7XHJcbiAgICB2YXIgcGF0aE9wZW4gPSBmYWxzZTtcclxuICAgIHZhciBsYXN0UGF0aCA9IG51bGw7XHJcblxyXG4gICAgdmFyIGdldFRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXA7XHJcblxyXG4gICAgdmFyIGN1cnJlbnRUZXh0dXJlID0gcmVuZGVyZXIuYmxhbmtUZXh0dXJlLmdsVGV4dHVyZTtcclxuXHJcbiAgICBmb3IgKHZhciBjbWRJbmRleCA9IDA7IGNtZEluZGV4IDwgY29tbWFuZHMubGVuZ3RoOyBjbWRJbmRleCsrKVxyXG4gICAge1xyXG4gICAgICAgIGNtZCA9IGNvbW1hbmRzW2NtZEluZGV4XTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChjbWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkJFR0lOX1BBVEg6XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aC5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGFzdFBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcGF0aE9wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkNMT1NFX1BBVEg6XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aE9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhdGggJiYgbGFzdFBhdGgucG9pbnRzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0UGF0aC5wb2ludHMucHVzaChsYXN0UGF0aC5wb2ludHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkZJTExfUEFUSDpcclxuICAgICAgICAgICAgICAgIGZvciAocGF0aEluZGV4ID0gMDsgcGF0aEluZGV4IDwgcGF0aC5sZW5ndGg7IHBhdGhJbmRleCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRChjdXJyZW50VGV4dHVyZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFBhdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbcGF0aEluZGV4XS5wb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1BBVEg6XHJcbiAgICAgICAgICAgICAgICBmb3IgKHBhdGhJbmRleCA9IDA7IHBhdGhJbmRleCA8IHBhdGgubGVuZ3RoOyBwYXRoSW5kZXgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoY3VycmVudFRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFN0cm9rZVBhdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbcGF0aEluZGV4XS5wb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aE9wZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuTElORV9TVFlMRTpcclxuICAgICAgICAgICAgICAgIGxpbmVXaWR0aCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0cm9rZUNvbG9yID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc3Ryb2tlQWxwaGEgPSBjb21tYW5kc1srK2NtZEluZGV4XSAqIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0cm9rZVRpbnRDb2xvciA9IGdldFRpbnQoc3Ryb2tlQ29sb3IsIHN0cm9rZUFscGhhKTtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuVEwgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LlRSID0gc3Ryb2tlVGludENvbG9yO1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlVGludC5CTCA9IHN0cm9rZVRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuQlIgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuRklMTF9TVFlMRTpcclxuICAgICAgICAgICAgICAgIHZhciBmaWxsQ29sb3IgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxsQWxwaGEgPSBjb21tYW5kc1srK2NtZEluZGV4XSAqIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGxUaW50Q29sb3IgPSBnZXRUaW50KGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgdmFyIGdyYWRpZW50RmlsbEFscGhhID0gY29tbWFuZHNbKytjbWRJbmRleF0gKiBhbHBoYTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRMID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRGaWxsQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgZmlsbFRpbnQuVFIgPSBnZXRUaW50KGNvbW1hbmRzWysrY21kSW5kZXhdLCBncmFkaWVudEZpbGxBbHBoYSk7XHJcbiAgICAgICAgICAgICAgICBmaWxsVGludC5CTCA9IGdldFRpbnQoY29tbWFuZHNbKytjbWRJbmRleF0sIGdyYWRpZW50RmlsbEFscGhhKTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJSID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRGaWxsQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkdSQURJRU5UX0xJTkVfU1RZTEU6XHJcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBncmFkaWVudExpbmVBbHBoYSA9IGNvbW1hbmRzWysrY21kSW5kZXhdICogYWxwaGE7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LlRMID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRMaW5lQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlVGludC5UUiA9IGdldFRpbnQoY29tbWFuZHNbKytjbWRJbmRleF0sIGdyYWRpZW50TGluZUFscGhhKTtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuQkwgPSBnZXRUaW50KGNvbW1hbmRzWysrY21kSW5kZXhdLCBncmFkaWVudExpbmVBbHBoYSk7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LkJSID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRMaW5lQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkFSQzpcclxuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgcmFkaXVzID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRBbmdsZSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVuZEFuZ2xlID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgYW50aWNsb2Nrd2lzZSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG92ZXJzaG9vdCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlIC09IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFudGljbG9ja3dpc2UpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZEFuZ2xlIDwgLVBJMilcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFuZ2xlID0gLVBJMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSAtUEkyICsgZW5kQW5nbGUgJSBQSTI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPiBQSTIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSBQSTI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA8IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSBQSTIgKyBlbmRBbmdsZSAlIFBJMjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhdGggPT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGggPSBuZXcgUGF0aCh4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cywgbGluZVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2gobGFzdFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbiArPSBpdGVyU3RlcDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9uIDwgMSArIG92ZXJzaG9vdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0YSA9IGVuZEFuZ2xlICogaXRlcmF0aW9uICsgc3RhcnRBbmdsZTtcclxuICAgICAgICAgICAgICAgICAgICB0eCA9IHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdHkgPSB5ICsgTWF0aC5zaW4odGEpICogcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsYXN0UGF0aC5wb2ludHMucHVzaChuZXcgUG9pbnQodHgsIHR5LCBsaW5lV2lkdGgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uICs9IGl0ZXJTdGVwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRhID0gZW5kQW5nbGUgKyBzdGFydEFuZ2xlO1xyXG4gICAgICAgICAgICAgICAgdHggPSB4ICsgTWF0aC5jb3ModGEpICogcmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgdHkgPSB5ICsgTWF0aC5zaW4odGEpICogcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGxhc3RQYXRoLnBvaW50cy5wdXNoKG5ldyBQb2ludCh0eCwgdHksIGxpbmVXaWR0aCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1JFQ1Q6XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoY3VycmVudFRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKGN1cnJlbnRUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFRyaWFuZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNUUk9LRV9UUklBTkdMRTpcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRChjdXJyZW50VGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFN0cm9rZVRyaWFuZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX1RPOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RQYXRoICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoLnBvaW50cy5wdXNoKG5ldyBQb2ludChjb21tYW5kc1srK2NtZEluZGV4XSwgY29tbWFuZHNbKytjbWRJbmRleF0sIGxpbmVXaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoID0gbmV3IFBhdGgoY29tbWFuZHNbKytjbWRJbmRleF0sIGNvbW1hbmRzWysrY21kSW5kZXhdLCBsaW5lV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaChsYXN0UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuTU9WRV9UTzpcclxuICAgICAgICAgICAgICAgIGxhc3RQYXRoID0gbmV3IFBhdGgoY29tbWFuZHNbKytjbWRJbmRleF0sIGNvbW1hbmRzWysrY21kSW5kZXhdLCBsaW5lV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGxhc3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TQVZFOlxyXG4gICAgICAgICAgICAgICAgbWF0cml4U3RhY2sucHVzaChjdXJyZW50TWF0cml4LmNvcHlUb0FycmF5KCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlJFU1RPUkU6XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LmNvcHlGcm9tQXJyYXkobWF0cml4U3RhY2sucG9wKCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlRSQU5TTEFURTpcclxuICAgICAgICAgICAgICAgIHggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHkgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgudHJhbnNsYXRlKHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNDQUxFOlxyXG4gICAgICAgICAgICAgICAgeCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgeSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE1hdHJpeC5zY2FsZSh4LCB5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5ST1RBVEU6XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LnJvdGF0ZShjb21tYW5kc1srK2NtZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU0VUX1RFWFRVUkU6XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJhbWUgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBtb2RlID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuY3VycmVudEZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoZnJhbWUuZ2xUZXh0dXJlLCAwKTtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnRpbnRFZmZlY3QgPSBtb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0dXJlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5DTEVBUl9URVhUVVJFOlxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuY3VycmVudEZyYW1lID0gcmVuZGVyZXIuYmxhbmtUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUudGludEVmZmVjdCA9IDI7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dHVyZSA9IHJlbmRlcmVyLmJsYW5rVGV4dHVyZS5nbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/group/Group.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/group/Group.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Actions = __webpack_require__(/*! ../../actions/ */ \"./node_modules/phaser/src/actions/index.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar Range = __webpack_require__(/*! ../../utils/array/Range */ \"./node_modules/phaser/src/utils/array/Range.js\");\r\nvar Set = __webpack_require__(/*! ../../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar Sprite = __webpack_require__(/*! ../sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Group is a way for you to create, manipulate, or recycle similar Game Objects.\r\n *\r\n * Group membership is non-exclusive. A Game Object can belong to several groups, one group, or none.\r\n *\r\n * Groups themselves aren't displayable, and can't be positioned, rotated, scaled, or hidden.\r\n *\r\n * @class Group\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n * @param {Phaser.Scene} scene - The scene this group belongs to.\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group. If `key` is set, Phaser.GameObjects.Group#createMultiple is also called with these settings.\r\n *\r\n * @see Phaser.Physics.Arcade.Group\r\n * @see Phaser.Physics.Arcade.StaticGroup\r\n */\r\nvar Group = new Class({\r\n\r\n    initialize:\r\n\r\n    function Group (scene, children, config)\r\n    {\r\n        //  They can pass in any of the following as the first argument:\r\n\r\n        //  1) A single child\r\n        //  2) An array of children\r\n        //  3) A config object\r\n        //  4) An array of config objects\r\n\r\n        //  Or they can pass in a child, or array of children AND a config object\r\n\r\n        if (config)\r\n        {\r\n            //  config has been set, are the children an array?\r\n\r\n            if (children && !Array.isArray(children))\r\n            {\r\n                children = [ children ];\r\n            }\r\n        }\r\n        else if (Array.isArray(children))\r\n        {\r\n            //  No config, so let's check the children argument\r\n\r\n            if (IsPlainObject(children[0]))\r\n            {\r\n                //  It's an array of plain config objects\r\n                config = children;\r\n                children = null;\r\n            }\r\n        }\r\n        else if (IsPlainObject(children))\r\n        {\r\n            //  Children isn't an array. Is it a config object though?\r\n            config = children;\r\n            children = null;\r\n        }\r\n\r\n        /**\r\n         * This scene this group belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.Group#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * Members of this group.\r\n         *\r\n         * @name Phaser.GameObjects.Group#children\r\n         * @type {Phaser.Structs.Set.<Phaser.GameObjects.GameObject>}\r\n         * @since 3.0.0\r\n         */\r\n        this.children = new Set(children);\r\n\r\n        /**\r\n         * A flag identifying this object as a group.\r\n         *\r\n         * @name Phaser.GameObjects.Group#isParent\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.isParent = true;\r\n\r\n        /**\r\n         * A textual representation of this Game Object.\r\n         * Used internally by Phaser but is available for your own custom classes to populate.\r\n         *\r\n         * @name Phaser.GameObjects.Group#type\r\n         * @type {string}\r\n         * @default 'Group'\r\n         * @since 3.21.0\r\n         */\r\n        this.type = 'Group';\r\n\r\n        /**\r\n         * The class to create new group members from.\r\n         *\r\n         * @name Phaser.GameObjects.Group#classType\r\n         * @type {Function}\r\n         * @since 3.0.0\r\n         * @default Phaser.GameObjects.Sprite\r\n         */\r\n        this.classType = GetFastValue(config, 'classType', Sprite);\r\n\r\n        /**\r\n         * The name of this group.\r\n         * Empty by default and never populated by Phaser, this is left for developers to use.\r\n         *\r\n         * @name Phaser.GameObjects.Group#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.18.0\r\n         */\r\n        this.name = GetFastValue(config, 'name', '');\r\n\r\n        /**\r\n         * Whether this group runs its {@link Phaser.GameObjects.Group#preUpdate} method\r\n         * (which may update any members).\r\n         *\r\n         * @name Phaser.GameObjects.Group#active\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.active = GetFastValue(config, 'active', true);\r\n\r\n        /**\r\n         * The maximum size of this group, if used as a pool. -1 is no limit.\r\n         *\r\n         * @name Phaser.GameObjects.Group#maxSize\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         * @default -1\r\n         */\r\n        this.maxSize = GetFastValue(config, 'maxSize', -1);\r\n\r\n        /**\r\n         * A default texture key to use when creating new group members.\r\n         *\r\n         * This is used in {@link Phaser.GameObjects.Group#create}\r\n         * but not in {@link Phaser.GameObjects.Group#createMultiple}.\r\n         *\r\n         * @name Phaser.GameObjects.Group#defaultKey\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultKey = GetFastValue(config, 'defaultKey', null);\r\n\r\n        /**\r\n         * A default texture frame to use when creating new group members.\r\n         *\r\n         * @name Phaser.GameObjects.Group#defaultFrame\r\n         * @type {(string|integer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultFrame = GetFastValue(config, 'defaultFrame', null);\r\n\r\n        /**\r\n         * Whether to call the update method of any members.\r\n         *\r\n         * @name Phaser.GameObjects.Group#runChildUpdate\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Group#preUpdate\r\n         */\r\n        this.runChildUpdate = GetFastValue(config, 'runChildUpdate', false);\r\n\r\n        /**\r\n         * A function to be called when adding or creating group members.\r\n         *\r\n         * @name Phaser.GameObjects.Group#createCallback\r\n         * @type {?Phaser.Types.GameObjects.Group.GroupCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.createCallback = GetFastValue(config, 'createCallback', null);\r\n\r\n        /**\r\n         * A function to be called when removing group members.\r\n         *\r\n         * @name Phaser.GameObjects.Group#removeCallback\r\n         * @type {?Phaser.Types.GameObjects.Group.GroupCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.removeCallback = GetFastValue(config, 'removeCallback', null);\r\n\r\n        /**\r\n         * A function to be called when creating several group members at once.\r\n         *\r\n         * @name Phaser.GameObjects.Group#createMultipleCallback\r\n         * @type {?Phaser.Types.GameObjects.Group.GroupMultipleCreateCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.createMultipleCallback = GetFastValue(config, 'createMultipleCallback', null);\r\n\r\n        if (config)\r\n        {\r\n            this.createMultiple(config);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a new Game Object and adds it to this group, unless the group {@link Phaser.GameObjects.Group#isFull is full}.\r\n     *\r\n     * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal position of the new Game Object in the world.\r\n     * @param {number} [y=0] - The vertical position of the new Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key of the new Game Object.\r\n     * @param {(string|integer)} [frame=defaultFrame] - The texture frame of the new Game Object.\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of the new Game Object.\r\n     * @param {boolean} [active=true] - The {@link Phaser.GameObjects.GameObject#active} state of the new Game Object.\r\n     *\r\n     * @return {any} The new Game Object (usually a Sprite, etc.).\r\n     */\r\n    create: function (x, y, key, frame, visible, active)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (key === undefined) { key = this.defaultKey; }\r\n        if (frame === undefined) { frame = this.defaultFrame; }\r\n        if (visible === undefined) { visible = true; }\r\n        if (active === undefined) { active = true; }\r\n\r\n        //  Pool?\r\n        if (this.isFull())\r\n        {\r\n            return null;\r\n        }\r\n\r\n        var child = new this.classType(this.scene, x, y, key, frame);\r\n\r\n        this.scene.sys.displayList.add(child);\r\n\r\n        if (child.preUpdate)\r\n        {\r\n            this.scene.sys.updateList.add(child);\r\n        }\r\n\r\n        child.visible = visible;\r\n        child.setActive(active);\r\n\r\n        this.add(child);\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * Creates several Game Objects and adds them to this group.\r\n     *\r\n     * If the group becomes {@link Phaser.GameObjects.Group#isFull}, no further Game Objects are created.\r\n     *\r\n     * Calls {@link Phaser.GameObjects.Group#createMultipleCallback} and {@link Phaser.GameObjects.Group#createCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#createMultiple\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Group.GroupCreateConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig[]} config - Creation settings. This can be a single configuration object or an array of such objects, which will be applied in turn.\r\n     *\r\n     * @return {any[]} The newly created Game Objects.\r\n     */\r\n    createMultiple: function (config)\r\n    {\r\n        if (this.isFull())\r\n        {\r\n            return [];\r\n        }\r\n\r\n        if (!Array.isArray(config))\r\n        {\r\n            config = [ config ];\r\n        }\r\n\r\n        var output = [];\r\n\r\n        if (config[0].key)\r\n        {\r\n            for (var i = 0; i < config.length; i++)\r\n            {\r\n                var entries = this.createFromConfig(config[i]);\r\n\r\n                output = output.concat(entries);\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * A helper for {@link Phaser.GameObjects.Group#createMultiple}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#createFromConfig\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Group.GroupCreateConfig} options - Creation settings.\r\n     *\r\n     * @return {any[]} The newly created Game Objects.\r\n     */\r\n    createFromConfig: function (options)\r\n    {\r\n        if (this.isFull())\r\n        {\r\n            return [];\r\n        }\r\n\r\n        this.classType = GetFastValue(options, 'classType', this.classType);\r\n\r\n        var key = GetFastValue(options, 'key', undefined);\r\n        var frame = GetFastValue(options, 'frame', null);\r\n        var visible = GetFastValue(options, 'visible', true);\r\n        var active = GetFastValue(options, 'active', true);\r\n\r\n        var entries = [];\r\n\r\n        //  Can't do anything without at least a key\r\n        if (key === undefined)\r\n        {\r\n            return entries;\r\n        }\r\n        else\r\n        {\r\n            if (!Array.isArray(key))\r\n            {\r\n                key = [ key ];\r\n            }\r\n\r\n            if (!Array.isArray(frame))\r\n            {\r\n                frame = [ frame ];\r\n            }\r\n        }\r\n\r\n        //  Build an array of key frame pairs to loop through\r\n\r\n        var repeat = GetFastValue(options, 'repeat', 0);\r\n        var randomKey = GetFastValue(options, 'randomKey', false);\r\n        var randomFrame = GetFastValue(options, 'randomFrame', false);\r\n        var yoyo = GetFastValue(options, 'yoyo', false);\r\n        var quantity = GetFastValue(options, 'quantity', false);\r\n        var frameQuantity = GetFastValue(options, 'frameQuantity', 1);\r\n        var max = GetFastValue(options, 'max', 0);\r\n\r\n        //  If a quantity value is set we use that to override the frameQuantity\r\n\r\n        var range = Range(key, frame, {\r\n            max: max,\r\n            qty: (quantity) ? quantity : frameQuantity,\r\n            random: randomKey,\r\n            randomB: randomFrame,\r\n            repeat: repeat,\r\n            yoyo: yoyo\r\n        });\r\n\r\n        if (options.createCallback)\r\n        {\r\n            this.createCallback = options.createCallback;\r\n        }\r\n\r\n        if (options.removeCallback)\r\n        {\r\n            this.removeCallback = options.removeCallback;\r\n        }\r\n\r\n        for (var c = 0; c < range.length; c++)\r\n        {\r\n            var created = this.create(0, 0, range[c].a, range[c].b, visible, active);\r\n\r\n            if (!created)\r\n            {\r\n                break;\r\n            }\r\n\r\n            entries.push(created);\r\n        }\r\n\r\n        //  Post-creation options (applied only to those items created in this call):\r\n\r\n        var x = GetValue(options, 'setXY.x', 0);\r\n        var y = GetValue(options, 'setXY.y', 0);\r\n        var stepX = GetValue(options, 'setXY.stepX', 0);\r\n        var stepY = GetValue(options, 'setXY.stepY', 0);\r\n\r\n        Actions.SetXY(entries, x, y, stepX, stepY);\r\n\r\n        var rotation = GetValue(options, 'setRotation.value', 0);\r\n        var stepRotation = GetValue(options, 'setRotation.step', 0);\r\n\r\n        Actions.SetRotation(entries, rotation, stepRotation);\r\n\r\n        var scaleX = GetValue(options, 'setScale.x', 1);\r\n        var scaleY = GetValue(options, 'setScale.y', scaleX);\r\n        var stepScaleX = GetValue(options, 'setScale.stepX', 0);\r\n        var stepScaleY = GetValue(options, 'setScale.stepY', 0);\r\n\r\n        Actions.SetScale(entries, scaleX, scaleY, stepScaleX, stepScaleY);\r\n\r\n        var alpha = GetValue(options, 'setAlpha.value', 1);\r\n        var stepAlpha = GetValue(options, 'setAlpha.step', 0);\r\n\r\n        Actions.SetAlpha(entries, alpha, stepAlpha);\r\n\r\n        var depth = GetValue(options, 'setDepth.value', 0);\r\n        var stepDepth = GetValue(options, 'setDepth.step', 0);\r\n\r\n        Actions.SetDepth(entries, depth, stepDepth);\r\n\r\n        var scrollFactorX = GetValue(options, 'setScrollFactor.x', 1);\r\n        var scrollFactorY = GetValue(options, 'setScrollFactor.y', scrollFactorX);\r\n        var stepScrollFactorX = GetValue(options, 'setScrollFactor.stepX', 0);\r\n        var stepScrollFactorY = GetValue(options, 'setScrollFactor.stepY', 0);\r\n\r\n        Actions.SetScrollFactor(entries, scrollFactorX, scrollFactorY, stepScrollFactorX, stepScrollFactorY);\r\n\r\n        var hitArea = GetFastValue(options, 'hitArea', null);\r\n        var hitAreaCallback = GetFastValue(options, 'hitAreaCallback', null);\r\n\r\n        if (hitArea)\r\n        {\r\n            Actions.SetHitArea(entries, hitArea, hitAreaCallback);\r\n        }\r\n\r\n        var grid = GetFastValue(options, 'gridAlign', false);\r\n\r\n        if (grid)\r\n        {\r\n            Actions.GridAlign(entries, grid);\r\n        }\r\n\r\n        if (this.createMultipleCallback)\r\n        {\r\n            this.createMultipleCallback.call(this, entries);\r\n        }\r\n\r\n        return entries;\r\n    },\r\n\r\n    /**\r\n     * Updates any group members, if {@link Phaser.GameObjects.Group#runChildUpdate} is enabled.\r\n     *\r\n     * @method Phaser.GameObjects.Group#preUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    preUpdate: function (time, delta)\r\n    {\r\n        if (!this.runChildUpdate || this.children.size === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  Because a Group child may mess with the length of the Group during its update\r\n        var temp = this.children.entries.slice();\r\n\r\n        for (var i = 0; i < temp.length; i++)\r\n        {\r\n            var item = temp[i];\r\n\r\n            if (item.active)\r\n            {\r\n                item.update(time, delta);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds a Game Object to this group.\r\n     *\r\n     * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to add.\r\n     * @param {boolean} [addToScene=false] - Also add the Game Object to the scene.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    add: function (child, addToScene)\r\n    {\r\n        if (addToScene === undefined) { addToScene = false; }\r\n\r\n        if (this.isFull())\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.children.set(child);\r\n\r\n        if (this.createCallback)\r\n        {\r\n            this.createCallback.call(this, child);\r\n        }\r\n\r\n        if (addToScene)\r\n        {\r\n            this.scene.sys.displayList.add(child);\r\n\r\n            if (child.preUpdate)\r\n            {\r\n                this.scene.sys.updateList.add(child);\r\n            }\r\n        }\r\n\r\n        child.on(Events.DESTROY, this.remove, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds several Game Objects to this group.\r\n     *\r\n     * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#addMultiple\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject[]} children - The Game Objects to add.\r\n     * @param {boolean} [addToScene=false] - Also add the Game Objects to the scene.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This group.\r\n     */\r\n    addMultiple: function (children, addToScene)\r\n    {\r\n        if (addToScene === undefined) { addToScene = false; }\r\n\r\n        if (Array.isArray(children))\r\n        {\r\n            for (var i = 0; i < children.length; i++)\r\n            {\r\n                this.add(children[i], addToScene);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a member of this Group and optionally removes it from the Scene and / or destroys it.\r\n     *\r\n     * Calls {@link Phaser.GameObjects.Group#removeCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to remove.\r\n     * @param {boolean} [removeFromScene=false] - Optionally remove the Group member from the Scene it belongs to.\r\n     * @param {boolean} [destroyChild=false] - Optionally call destroy on the removed Group member.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    remove: function (child, removeFromScene, destroyChild)\r\n    {\r\n        if (removeFromScene === undefined) { removeFromScene = false; }\r\n        if (destroyChild === undefined) { destroyChild = false; }\r\n\r\n        if (!this.children.contains(child))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.children.delete(child);\r\n\r\n        if (this.removeCallback)\r\n        {\r\n            this.removeCallback.call(this, child);\r\n        }\r\n\r\n        child.off(Events.DESTROY, this.remove, this);\r\n\r\n        if (destroyChild)\r\n        {\r\n            child.destroy();\r\n        }\r\n        else if (removeFromScene)\r\n        {\r\n            child.scene.sys.displayList.remove(child);\r\n\r\n            if (child.preUpdate)\r\n            {\r\n                child.scene.sys.updateList.remove(child);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes all members of this Group and optionally removes them from the Scene and / or destroys them.\r\n     *\r\n     * Does not call {@link Phaser.GameObjects.Group#removeCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [removeFromScene=false] - Optionally remove each Group member from the Scene.\r\n     * @param {boolean} [destroyChild=false] - Optionally call destroy on the removed Group members.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This group.\r\n     */\r\n    clear: function (removeFromScene, destroyChild)\r\n    {\r\n        if (removeFromScene === undefined) { removeFromScene = false; }\r\n        if (destroyChild === undefined) { destroyChild = false; }\r\n\r\n        var children = this.children;\r\n\r\n        for (var i = 0; i < children.size; i++)\r\n        {\r\n            var gameObject = children.entries[i];\r\n\r\n            gameObject.off(Events.DESTROY, this.remove, this);\r\n\r\n            if (destroyChild)\r\n            {\r\n                gameObject.destroy();\r\n            }\r\n            else if (removeFromScene)\r\n            {\r\n                gameObject.scene.sys.displayList.remove(gameObject);\r\n\r\n                if (gameObject.preUpdate)\r\n                {\r\n                    gameObject.scene.sys.updateList.remove(gameObject);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.children.clear();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Tests if a Game Object is a member of this group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - A Game Object.\r\n     *\r\n     * @return {boolean} True if the Game Object is a member of this group.\r\n     */\r\n    contains: function (child)\r\n    {\r\n        return this.children.contains(child);\r\n    },\r\n\r\n    /**\r\n     * All members of the group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getChildren\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} The group members.\r\n     */\r\n    getChildren: function ()\r\n    {\r\n        return this.children.entries;\r\n    },\r\n\r\n    /**\r\n     * The number of members of the group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getLength\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer}\r\n     */\r\n    getLength: function ()\r\n    {\r\n        return this.children.size;\r\n    },\r\n\r\n    /**\r\n     * Scans the Group, from top to bottom, for the first member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getFirst\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first matching group member, or a newly created member, or null.\r\n     */\r\n    getFirst: function (state, createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getHandler(true, 1, state, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the Group, from top to bottom, for the nth member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getFirstNth\r\n     * @since 3.6.0\r\n     *\r\n     * @param {integer} nth - The nth matching Group member to search for.\r\n     * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first matching group member, or a newly created member, or null.\r\n     */\r\n    getFirstNth: function (nth, state, createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getHandler(true, nth, state, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the Group for the last member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getLast\r\n     * @since 3.6.0\r\n     *\r\n     * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first matching group member, or a newly created member, or null.\r\n     */\r\n    getLast: function (state, createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getHandler(false, 1, state, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the Group for the last nth member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getLastNth\r\n     * @since 3.6.0\r\n     *\r\n     * @param {integer} nth - The nth matching Group member to search for.\r\n     * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first matching group member, or a newly created member, or null.\r\n     */\r\n    getLastNth: function (nth, state, createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getHandler(false, nth, state, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the group for the last member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getHandler\r\n     * @private\r\n     * @since 3.6.0\r\n     *\r\n     * @param {boolean} forwards - Search front to back or back to front?\r\n     * @param {integer} nth - Stop matching after nth successful matches.\r\n     * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first matching group member, or a newly created member, or null.\r\n     */\r\n    getHandler: function (forwards, nth, state, createIfNull, x, y, key, frame, visible)\r\n    {\r\n        if (state === undefined) { state = false; }\r\n        if (createIfNull === undefined) { createIfNull = false; }\r\n\r\n        var gameObject;\r\n\r\n        var i;\r\n        var total = 0;\r\n        var children = this.children.entries;\r\n\r\n        if (forwards)\r\n        {\r\n            for (i = 0; i < children.length; i++)\r\n            {\r\n                gameObject = children[i];\r\n\r\n                if (gameObject.active === state)\r\n                {\r\n                    total++;\r\n\r\n                    if (total === nth)\r\n                    {\r\n                        break;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    gameObject = null;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (i = children.length - 1; i >= 0; i--)\r\n            {\r\n                gameObject = children[i];\r\n\r\n                if (gameObject.active === state)\r\n                {\r\n                    total++;\r\n\r\n                    if (total === nth)\r\n                    {\r\n                        break;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    gameObject = null;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (gameObject)\r\n        {\r\n            if (typeof(x) === 'number')\r\n            {\r\n                gameObject.x = x;\r\n            }\r\n\r\n            if (typeof(y) === 'number')\r\n            {\r\n                gameObject.y = y;\r\n            }\r\n\r\n            return gameObject;\r\n        }\r\n\r\n        //  Got this far? We need to create or bail\r\n        if (createIfNull)\r\n        {\r\n            return this.create(x, y, key, frame, visible);\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `false`,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no inactive member is found and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * The new Game Object will have its active state set to `true`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {?any} The first inactive group member, or a newly created member, or null.\r\n     */\r\n    get: function (x, y, key, frame, visible)\r\n    {\r\n        return this.getFirst(false, true, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `true`,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no active member is found and `createIfNull` is `true` and the group isn't full then it will create a new one using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getFirstAlive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {any} The first active group member, or a newly created member, or null.\r\n     */\r\n    getFirstAlive: function (createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getFirst(true, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `false`,\r\n     * assigns `x` and `y`, and returns the member.\r\n     *\r\n     * If no inactive member is found and `createIfNull` is `true` and the group isn't full then it will create a new one using `x`, `y`, `key`, `frame`, and `visible`.\r\n     * The new Game Object will have an active state set to `true`.\r\n     * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getFirstDead\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n     * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n     * @param {number} [y] - The vertical position of the Game Object in the world.\r\n     * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n     * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n     * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n     *\r\n     * @return {any} The first inactive group member, or a newly created member, or null.\r\n     */\r\n    getFirstDead: function (createIfNull, x, y, key, frame, visible)\r\n    {\r\n        return this.getFirst(false, createIfNull, x, y, key, frame, visible);\r\n    },\r\n\r\n    /**\r\n     * {@link Phaser.GameObjects.Components.Animation#play Plays} an animation for all members of this group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#playAnimation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The string-based key of the animation to play.\r\n     * @param {string} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    playAnimation: function (key, startFrame)\r\n    {\r\n        Actions.PlayAnimation(this.children.entries, key, startFrame);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Whether this group's size at its {@link Phaser.GameObjects.Group#maxSize maximum}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#isFull\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} True if the number of members equals {@link Phaser.GameObjects.Group#maxSize}.\r\n     */\r\n    isFull: function ()\r\n    {\r\n        if (this.maxSize === -1)\r\n        {\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return (this.children.size >= this.maxSize);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Counts the number of active (or inactive) group members.\r\n     *\r\n     * @method Phaser.GameObjects.Group#countActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - Count active (true) or inactive (false) group members.\r\n     *\r\n     * @return {integer} The number of group members with an active state matching the `active` argument.\r\n     */\r\n    countActive: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        var total = 0;\r\n\r\n        for (var i = 0; i < this.children.size; i++)\r\n        {\r\n            if (this.children.entries[i].active === value)\r\n            {\r\n                total++;\r\n            }\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * Counts the number of in-use (active) group members.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getTotalUsed\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of group members with an active state of true.\r\n     */\r\n    getTotalUsed: function ()\r\n    {\r\n        return this.countActive();\r\n    },\r\n\r\n    /**\r\n     * The difference of {@link Phaser.GameObjects.Group#maxSize} and the number of active group members.\r\n     *\r\n     * This represents the number of group members that could be created or reactivated before reaching the size limit.\r\n     *\r\n     * @method Phaser.GameObjects.Group#getTotalFree\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} maxSize minus the number of active group numbers; or a large number (if maxSize is -1).\r\n     */\r\n    getTotalFree: function ()\r\n    {\r\n        var used = this.getTotalUsed();\r\n        var capacity = (this.maxSize === -1) ? 999999999999 : this.maxSize;\r\n\r\n        return (capacity - used);\r\n    },\r\n\r\n    /**\r\n     * Sets the property as defined in `key` of each group member to the given value.\r\n     *\r\n     * @method Phaser.GameObjects.Group#propertyValueSet\r\n     * @since 3.21.0\r\n     *\r\n     * @param {string} key - The property to be updated.\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n     * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    propertyValueSet: function (key, value, step, index, direction)\r\n    {\r\n        Actions.PropertyValueSet(this.children.entries, key, value, step, index, direction);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds the given value to the property as defined in `key` of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#propertyValueInc\r\n     * @since 3.21.0\r\n     *\r\n     * @param {string} key - The property to be updated.\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n     * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    propertyValueInc: function (key, value, step, index, direction)\r\n    {\r\n        Actions.PropertyValueInc(this.children.entries, key, value, step, index, direction);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the x of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setX\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setX: function (value, step)\r\n    {\r\n        Actions.SetX(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the y of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setY: function (value, step)\r\n    {\r\n        Actions.SetY(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the x, y of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setXY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} x - The amount to set the `x` property to.\r\n     * @param {number} [y=x] - The amount to set the `y` property to. If `undefined` or `null` it uses the `x` value.\r\n     * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n     * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setXY: function (x, y, stepX, stepY)\r\n    {\r\n        Actions.SetXY(this.children.entries, x, y, stepX, stepY);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds the given value to the x of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#incX\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to be added to the `x` property.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    incX: function (value, step)\r\n    {\r\n        Actions.IncX(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds the given value to the y of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#incY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to be added to the `y` property.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    incY: function (value, step)\r\n    {\r\n        Actions.IncY(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds the given value to the x, y of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#incXY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} x - The amount to be added to the `x` property.\r\n     * @param {number} [y=x] - The amount to be added to the `y` property. If `undefined` or `null` it uses the `x` value.\r\n     * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n     * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    incXY: function (x, y, stepX, stepY)\r\n    {\r\n        Actions.IncXY(this.children.entries, x, y, stepX, stepY);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Iterate through the group members changing the position of each element to be that of the element that came before\r\n     * it in the array (or after it if direction = 1)\r\n     * \r\n     * The first group member position is set to x/y.\r\n     *\r\n     * @method Phaser.GameObjects.Group#shiftPosition\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} x - The x coordinate to place the first item in the array at.\r\n     * @param {number} y - The y coordinate to place the first item in the array at.\r\n     * @param {integer} [direction=0] - The iteration direction. 0 = first to last and 1 = last to first.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    shiftPosition: function (x, y, direction)\r\n    {\r\n        Actions.ShiftPosition(this.children.entries, x, y, direction);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angle of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#angle\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the angle to, in degrees.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    angle: function (value, step)\r\n    {\r\n        Actions.Angle(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the rotation of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#rotate\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the rotation to, in radians.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    rotate: function (value, step)\r\n    {\r\n        Actions.Rotate(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotates each group member around the given point by the given angle.\r\n     *\r\n     * @method Phaser.GameObjects.Group#rotateAround\r\n     * @since 3.21.0\r\n     *\r\n     * @param {Phaser.Types.Math.Vector2Like} point - Any object with public `x` and `y` properties.\r\n     * @param {number} angle - The angle to rotate by, in radians.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    rotateAround: function (point, angle)\r\n    {\r\n        Actions.RotateAround(this.children.entries, point, angle);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotates each group member around the given point by the given angle and distance.\r\n     *\r\n     * @method Phaser.GameObjects.Group#rotateAroundDistance\r\n     * @since 3.21.0\r\n     *\r\n     * @param {Phaser.Types.Math.Vector2Like} point - Any object with public `x` and `y` properties.\r\n     * @param {number} angle - The angle to rotate by, in radians.\r\n     * @param {number} distance - The distance from the point of rotation in pixels.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    rotateAroundDistance: function (point, angle, distance)\r\n    {\r\n        Actions.RotateAroundDistance(this.children.entries, point, angle, distance);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the alpha of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setAlpha\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the alpha to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setAlpha: function (value, step)\r\n    {\r\n        Actions.SetAlpha(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the tint of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setTint\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} topLeft - The tint being applied to top-left corner of item. If other parameters are given no value, this tint will be applied to whole item.\r\n     * @param {number} [topRight] - The tint to be applied to top-right corner of item.\r\n     * @param {number} [bottomLeft] - The tint to be applied to the bottom-left corner of item.\r\n     * @param {number} [bottomRight] - The tint to be applied to the bottom-right corner of item.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setTint: function (topLeft, topRight, bottomLeft, bottomRight)\r\n    {\r\n        Actions.SetTint(this.children.entries, topLeft, topRight, bottomLeft, bottomRight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the originX, originY of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setOrigin\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} originX - The amount to set the `originX` property to.\r\n     * @param {number} [originY] - The amount to set the `originY` property to. If `undefined` or `null` it uses the `originX` value.\r\n     * @param {number} [stepX=0] - This is added to the `originX` amount, multiplied by the iteration counter.\r\n     * @param {number} [stepY=0] - This is added to the `originY` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setOrigin: function (originX, originY, stepX, stepY)\r\n    {\r\n        Actions.SetOrigin(this.children.entries, originX, originY, stepX, stepY);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scaleX of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#scaleX\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    scaleX: function (value, step)\r\n    {\r\n        Actions.ScaleX(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scaleY of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#scaleY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    scaleY: function (value, step)\r\n    {\r\n        Actions.ScaleY(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scaleX, scaleY of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#scaleXY\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} scaleX - The amount to be added to the `scaleX` property.\r\n     * @param {number} [scaleY] - The amount to be added to the `scaleY` property. If `undefined` or `null` it uses the `scaleX` value.\r\n     * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n     * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    scaleXY: function (scaleX, scaleY, stepX, stepY)\r\n    {\r\n        Actions.ScaleXY(this.children.entries, scaleX, scaleY, stepX, stepY);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the depth of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setDepth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setDepth: function (value, step)\r\n    {\r\n        Actions.SetDepth(this.children.entries, value, step);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the blendMode of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setBlendMode\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} value - The amount to set the property to.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setBlendMode: function (value)\r\n    {\r\n        Actions.SetBlendMode(this.children.entries, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes all group members to the Input Manager to enable them for input with identical areas and callbacks.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setHitArea\r\n     * @since 3.21.0\r\n     *\r\n     * @param {*} hitArea - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setHitArea: function (hitArea, hitAreaCallback)\r\n    {\r\n        Actions.SetHitArea(this.children.entries, hitArea, hitAreaCallback);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuffles the group members in place.\r\n     *\r\n     * @method Phaser.GameObjects.Group#shuffle\r\n     * @since 3.21.0\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    shuffle: function ()\r\n    {\r\n        Actions.Shuffle(this.children.entries);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Deactivates a member of this group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#kill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - A member of this group.\r\n     */\r\n    kill: function (gameObject)\r\n    {\r\n        if (this.children.contains(gameObject))\r\n        {\r\n            gameObject.setActive(false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Deactivates and hides a member of this group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#killAndHide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - A member of this group.\r\n     */\r\n    killAndHide: function (gameObject)\r\n    {\r\n        if (this.children.contains(gameObject))\r\n        {\r\n            gameObject.setActive(false);\r\n            gameObject.setVisible(false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the visible of each group member.\r\n     *\r\n     * @method Phaser.GameObjects.Group#setVisible\r\n     * @since 3.21.0\r\n     *\r\n     * @param {boolean} value - The value to set the property to.\r\n     * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n     * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    setVisible: function (value, index, direction)\r\n    {\r\n        Actions.SetVisible(this.children.entries, value, index, direction);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Toggles (flips) the visible state of each member of this group.\r\n     *\r\n     * @method Phaser.GameObjects.Group#toggleVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Group} This Group object.\r\n     */\r\n    toggleVisible: function ()\r\n    {\r\n        Actions.ToggleVisible(this.children.entries);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Empties this group and removes it from the Scene.\r\n     *\r\n     * Does not call {@link Phaser.GameObjects.Group#removeCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Group#destroy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [destroyChildren=false] - Also {@link Phaser.GameObjects.GameObject#destroy} each group member.\r\n     */\r\n    destroy: function (destroyChildren)\r\n    {\r\n        if (destroyChildren === undefined) { destroyChildren = false; }\r\n\r\n        //  This Game Object had already been destroyed\r\n        if (!this.scene || this.ignoreDestroy)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.clear(false, destroyChildren);\r\n\r\n        this.scene = undefined;\r\n        this.children = undefined;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Group;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cC5qcz9mMGQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsa0VBQWdCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxZQUFZLG1CQUFPLENBQUMsK0VBQXlCO0FBQzdDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLGdGQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsOEhBQThILGdEQUFnRDtBQUN6TCxXQUFXLDRGQUE0RjtBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qyx5Q0FBeUM7QUFDakY7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsdUJBQXVCLDhDQUE4QztBQUNyRTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4RUFBOEUsOENBQThDO0FBQzVIO0FBQ0EsY0FBYyw4Q0FBOEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRyxlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RjtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGdDQUFnQyx1QkFBdUI7QUFDdkQsa0NBQWtDLDJCQUEyQjtBQUM3RCxvQ0FBb0MsZ0JBQWdCO0FBQ3BELG1DQUFtQyxlQUFlOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixzQ0FBc0M7QUFDbkU7QUFDQSxjQUFjLHNEQUFzRCxNQUFNLDhDQUE4QztBQUN4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0dBQW9HO0FBQ25IO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EscUJBQXFCLDhDQUE4QztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaURBQWlEO0FBQ2hFO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHNDQUFzQyw4Q0FBOEM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGNBQWMsOENBQThDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0JBQW9COztBQUUzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsY0FBYyw4Q0FBOEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdDQUFnQztBQUMvQyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxvQkFBb0I7O0FBRTNEO0FBQ0E7QUFDQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxjQUFjLDhDQUE4QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7QUFDckUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDhDQUE4QztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7QUFDckUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhFQUE4RSwyQ0FBMkM7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUSxzQkFBc0IsMkNBQTJDO0FBQ3hGLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRFQUE0RSwyQ0FBMkM7QUFDdkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx3REFBd0QsMkNBQTJDO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0REFBNEQsMkNBQTJDO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRLHNCQUFzQiwyQ0FBMkM7QUFDeEYsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUSx1QkFBdUIsb0RBQW9EO0FBQ2xHO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esd0RBQXdELDJDQUEyQztBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUSxzQkFBc0IsMkNBQTJDO0FBQ3hGLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlO0FBQ2pELHlDQUF5QyxzQkFBc0I7O0FBRS9EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHlEQUF5RCwyQ0FBMkM7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx5REFBeUQsMkNBQTJDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx5REFBeUQsMkNBQTJDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFFBQVEseURBQXlEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EseUNBQXlDLCtDQUErQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRLHVDQUF1Qyx1Q0FBdUM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRLGtEQUFrRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsOENBQThDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRLGlDQUFpQyw0Q0FBNEM7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHlCQUF5Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2dyb3VwL0dyb3VwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFJhbmdlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYXJyYXkvUmFuZ2UnKTtcclxudmFyIFNldCA9IHJlcXVpcmUoJy4uLy4uL3N0cnVjdHMvU2V0Jyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGUvU3ByaXRlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEdyb3VwIGlzIGEgd2F5IGZvciB5b3UgdG8gY3JlYXRlLCBtYW5pcHVsYXRlLCBvciByZWN5Y2xlIHNpbWlsYXIgR2FtZSBPYmplY3RzLlxyXG4gKlxyXG4gKiBHcm91cCBtZW1iZXJzaGlwIGlzIG5vbi1leGNsdXNpdmUuIEEgR2FtZSBPYmplY3QgY2FuIGJlbG9uZyB0byBzZXZlcmFsIGdyb3Vwcywgb25lIGdyb3VwLCBvciBub25lLlxyXG4gKlxyXG4gKiBHcm91cHMgdGhlbXNlbHZlcyBhcmVuJ3QgZGlzcGxheWFibGUsIGFuZCBjYW4ndCBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCBzY2FsZWQsIG9yIGhpZGRlbi5cclxuICpcclxuICogQGNsYXNzIEdyb3VwXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgc2NlbmUgdGhpcyBncm91cCBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWcpfSBbY2hpbGRyZW5dIC0gR2FtZSBPYmplY3RzIHRvIGFkZCB0byB0aGlzIGdyb3VwOyBvciB0aGUgYGNvbmZpZ2AgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ30gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhpcyBncm91cC4gSWYgYGtleWAgaXMgc2V0LCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlTXVsdGlwbGUgaXMgYWxzbyBjYWxsZWQgd2l0aCB0aGVzZSBzZXR0aW5ncy5cclxuICpcclxuICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXBcclxuICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXBcclxuICovXHJcbnZhciBHcm91cCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcm91cCAoc2NlbmUsIGNoaWxkcmVuLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoZXkgY2FuIHBhc3MgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OlxyXG5cclxuICAgICAgICAvLyAgMSkgQSBzaW5nbGUgY2hpbGRcclxuICAgICAgICAvLyAgMikgQW4gYXJyYXkgb2YgY2hpbGRyZW5cclxuICAgICAgICAvLyAgMykgQSBjb25maWcgb2JqZWN0XHJcbiAgICAgICAgLy8gIDQpIEFuIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzXHJcblxyXG4gICAgICAgIC8vICBPciB0aGV5IGNhbiBwYXNzIGluIGEgY2hpbGQsIG9yIGFycmF5IG9mIGNoaWxkcmVuIEFORCBhIGNvbmZpZyBvYmplY3RcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBjb25maWcgaGFzIGJlZW4gc2V0LCBhcmUgdGhlIGNoaWxkcmVuIGFuIGFycmF5P1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuICYmICFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbIGNoaWxkcmVuIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTm8gY29uZmlnLCBzbyBsZXQncyBjaGVjayB0aGUgY2hpbGRyZW4gYXJndW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGNoaWxkcmVuWzBdKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEl0J3MgYW4gYXJyYXkgb2YgcGxhaW4gY29uZmlnIG9iamVjdHNcclxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKElzUGxhaW5PYmplY3QoY2hpbGRyZW4pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENoaWxkcmVuIGlzbid0IGFuIGFycmF5LiBJcyBpdCBhIGNvbmZpZyBvYmplY3QgdGhvdWdoP1xyXG4gICAgICAgICAgICBjb25maWcgPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBzY2VuZSB0aGlzIGdyb3VwIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWVtYmVycyBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgU2V0KGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIGlkZW50aWZ5aW5nIHRoaXMgb2JqZWN0IGFzIGEgZ3JvdXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjaXNQYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BhcmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSBieSBQaGFzZXIgYnV0IGlzIGF2YWlsYWJsZSBmb3IgeW91ciBvd24gY3VzdG9tIGNsYXNzZXMgdG8gcG9wdWxhdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJ0dyb3VwJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSAnR3JvdXAnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2xhc3MgdG8gY3JlYXRlIG5ldyBncm91cCBtZW1iZXJzIGZyb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY2xhc3NUeXBlXHJcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBkZWZhdWx0IFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsYXNzVHlwZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjbGFzc1R5cGUnLCBTcHJpdGUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIG5ldmVyIHBvcHVsYXRlZCBieSBQaGFzZXIsIHRoaXMgaXMgbGVmdCBmb3IgZGV2ZWxvcGVycyB0byB1c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25hbWUnLCAnJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBncm91cCBydW5zIGl0cyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3ByZVVwZGF0ZX0gbWV0aG9kXHJcbiAgICAgICAgICogKHdoaWNoIG1heSB1cGRhdGUgYW55IG1lbWJlcnMpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2FjdGl2ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FjdGl2ZScsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoaXMgZ3JvdXAsIGlmIHVzZWQgYXMgYSBwb29sLiAtMSBpcyBubyBsaW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNtYXhTaXplXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNpemUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWF4U2l6ZScsIC0xKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHRleHR1cmUga2V5IHRvIHVzZSB3aGVuIGNyZWF0aW5nIG5ldyBncm91cCBtZW1iZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyB1c2VkIGluIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlfVxyXG4gICAgICAgICAqIGJ1dCBub3QgaW4ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZX0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZGVmYXVsdEtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0S2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlZmF1bHRLZXknLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHRleHR1cmUgZnJhbWUgdG8gdXNlIHdoZW4gY3JlYXRpbmcgbmV3IGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZGVmYXVsdEZyYW1lXHJcbiAgICAgICAgICogQHR5cGUgeyhzdHJpbmd8aW50ZWdlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVmYXVsdEZyYW1lJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdG8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiBhbnkgbWVtYmVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNydW5DaGlsZFVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcHJlVXBkYXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ydW5DaGlsZFVwZGF0ZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdydW5DaGlsZFVwZGF0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhZGRpbmcgb3IgY3JlYXRpbmcgZ3JvdXAgbWVtYmVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja1xyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jcmVhdGVDYWxsYmFjayA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjcmVhdGVDYWxsYmFjaycsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlQ2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2FsbGJhY2sgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncmVtb3ZlQ2FsbGJhY2snLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBjcmVhdGluZyBzZXZlcmFsIGdyb3VwIG1lbWJlcnMgYXQgb25jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBNdWx0aXBsZUNyZWF0ZUNhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlwbGVDYWxsYmFjayA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjcmVhdGVNdWx0aXBsZUNhbGxiYWNrJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU11bHRpcGxlKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhpcyBncm91cCwgdW5sZXNzIHRoZSBncm91cCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2lzRnVsbCBpcyBmdWxsfS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxscyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NyZWF0ZUNhbGxiYWNrfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgb2YgdGhlIG5ldyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBUaGUgdGV4dHVyZSBmcmFtZSBvZiB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWN0aXZlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgbmV3IEdhbWUgT2JqZWN0ICh1c3VhbGx5IGEgU3ByaXRlLCBldGMuKS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSwgYWN0aXZlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMuZGVmYXVsdEtleTsgfVxyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5kZWZhdWx0RnJhbWU7IH1cclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGFjdGl2ZSA9PT0gdW5kZWZpbmVkKSB7IGFjdGl2ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgLy8gIFBvb2w/XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNsYXNzVHlwZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnVwZGF0ZUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgICAgIGNoaWxkLnNldEFjdGl2ZShhY3RpdmUpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZChjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHNldmVyYWwgR2FtZSBPYmplY3RzIGFuZCBhZGRzIHRoZW0gdG8gdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZ3JvdXAgYmVjb21lcyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2lzRnVsbH0sIG5vIGZ1cnRoZXIgR2FtZSBPYmplY3RzIGFyZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIENhbGxzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlTXVsdGlwbGVDYWxsYmFja30gYW5kIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlQ2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NyZWF0ZU11bHRpcGxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWdbXX0gY29uZmlnIC0gQ3JlYXRpb24gc2V0dGluZ3MuIFRoaXMgY2FuIGJlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cywgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIGluIHR1cm4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55W119IFRoZSBuZXdseSBjcmVhdGVkIEdhbWUgT2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTXVsdGlwbGU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IFsgY29uZmlnIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIGlmIChjb25maWdbMF0ua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5jcmVhdGVGcm9tQ29uZmlnKGNvbmZpZ1tpXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChlbnRyaWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGhlbHBlciBmb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlRnJvbUNvbmZpZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IG9wdGlvbnMgLSBDcmVhdGlvbiBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthbnlbXX0gVGhlIG5ld2x5IGNyZWF0ZWQgR2FtZSBPYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ29uZmlnOiBmdW5jdGlvbiAob3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Z1bGwoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xhc3NUeXBlID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdjbGFzc1R5cGUnLCB0aGlzLmNsYXNzVHlwZSk7XHJcblxyXG4gICAgICAgIHZhciBrZXkgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2tleScsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdmcmFtZScsIG51bGwpO1xyXG4gICAgICAgIHZhciB2aXNpYmxlID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd2aXNpYmxlJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGFjdGl2ZSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnYWN0aXZlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gICAgICAgIC8vICBDYW4ndCBkbyBhbnl0aGluZyB3aXRob3V0IGF0IGxlYXN0IGEga2V5XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBbIGtleSBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZSA9IFsgZnJhbWUgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ1aWxkIGFuIGFycmF5IG9mIGtleSBmcmFtZSBwYWlycyB0byBsb29wIHRocm91Z2hcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmVwZWF0JywgMCk7XHJcbiAgICAgICAgdmFyIHJhbmRvbUtleSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmFuZG9tS2V5JywgZmFsc2UpO1xyXG4gICAgICAgIHZhciByYW5kb21GcmFtZSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmFuZG9tRnJhbWUnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIHlveW8gPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ3lveW8nLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIHF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdxdWFudGl0eScsIGZhbHNlKTtcclxuICAgICAgICB2YXIgZnJhbWVRdWFudGl0eSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnZnJhbWVRdWFudGl0eScsIDEpO1xyXG4gICAgICAgIHZhciBtYXggPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ21heCcsIDApO1xyXG5cclxuICAgICAgICAvLyAgSWYgYSBxdWFudGl0eSB2YWx1ZSBpcyBzZXQgd2UgdXNlIHRoYXQgdG8gb3ZlcnJpZGUgdGhlIGZyYW1lUXVhbnRpdHlcclxuXHJcbiAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2Uoa2V5LCBmcmFtZSwge1xyXG4gICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgcXR5OiAocXVhbnRpdHkpID8gcXVhbnRpdHkgOiBmcmFtZVF1YW50aXR5LFxyXG4gICAgICAgICAgICByYW5kb206IHJhbmRvbUtleSxcclxuICAgICAgICAgICAgcmFuZG9tQjogcmFuZG9tRnJhbWUsXHJcbiAgICAgICAgICAgIHJlcGVhdDogcmVwZWF0LFxyXG4gICAgICAgICAgICB5b3lvOiB5b3lvXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDYWxsYmFjayA9IG9wdGlvbnMuY3JlYXRlQ2FsbGJhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2FsbGJhY2sgPSBvcHRpb25zLnJlbW92ZUNhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCByYW5nZS5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjcmVhdGVkID0gdGhpcy5jcmVhdGUoMCwgMCwgcmFuZ2VbY10uYSwgcmFuZ2VbY10uYiwgdmlzaWJsZSwgYWN0aXZlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3JlYXRlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChjcmVhdGVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBQb3N0LWNyZWF0aW9uIG9wdGlvbnMgKGFwcGxpZWQgb25seSB0byB0aG9zZSBpdGVtcyBjcmVhdGVkIGluIHRoaXMgY2FsbCk6XHJcblxyXG4gICAgICAgIHZhciB4ID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLngnLCAwKTtcclxuICAgICAgICB2YXIgeSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRYWS55JywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBYID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLnN0ZXBYJywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBZID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLnN0ZXBZJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0WFkoZW50cmllcywgeCwgeSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFJvdGF0aW9uLnZhbHVlJywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBSb3RhdGlvbiA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRSb3RhdGlvbi5zdGVwJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0Um90YXRpb24oZW50cmllcywgcm90YXRpb24sIHN0ZXBSb3RhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBzY2FsZVggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUueCcsIDEpO1xyXG4gICAgICAgIHZhciBzY2FsZVkgPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUueScsIHNjYWxlWCk7XHJcbiAgICAgICAgdmFyIHN0ZXBTY2FsZVggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUuc3RlcFgnLCAwKTtcclxuICAgICAgICB2YXIgc3RlcFNjYWxlWSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY2FsZS5zdGVwWScsIDApO1xyXG5cclxuICAgICAgICBBY3Rpb25zLlNldFNjYWxlKGVudHJpZXMsIHNjYWxlWCwgc2NhbGVZLCBzdGVwU2NhbGVYLCBzdGVwU2NhbGVZKTtcclxuXHJcbiAgICAgICAgdmFyIGFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldEFscGhhLnZhbHVlJywgMSk7XHJcbiAgICAgICAgdmFyIHN0ZXBBbHBoYSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRBbHBoYS5zdGVwJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0QWxwaGEoZW50cmllcywgYWxwaGEsIHN0ZXBBbHBoYSk7XHJcblxyXG4gICAgICAgIHZhciBkZXB0aCA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXREZXB0aC52YWx1ZScsIDApO1xyXG4gICAgICAgIHZhciBzdGVwRGVwdGggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0RGVwdGguc3RlcCcsIDApO1xyXG5cclxuICAgICAgICBBY3Rpb25zLlNldERlcHRoKGVudHJpZXMsIGRlcHRoLCBzdGVwRGVwdGgpO1xyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY3JvbGxGYWN0b3IueCcsIDEpO1xyXG4gICAgICAgIHZhciBzY3JvbGxGYWN0b3JZID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFNjcm9sbEZhY3Rvci55Jywgc2Nyb2xsRmFjdG9yWCk7XHJcbiAgICAgICAgdmFyIHN0ZXBTY3JvbGxGYWN0b3JYID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFNjcm9sbEZhY3Rvci5zdGVwWCcsIDApO1xyXG4gICAgICAgIHZhciBzdGVwU2Nyb2xsRmFjdG9yWSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY3JvbGxGYWN0b3Iuc3RlcFknLCAwKTtcclxuXHJcbiAgICAgICAgQWN0aW9ucy5TZXRTY3JvbGxGYWN0b3IoZW50cmllcywgc2Nyb2xsRmFjdG9yWCwgc2Nyb2xsRmFjdG9yWSwgc3RlcFNjcm9sbEZhY3RvclgsIHN0ZXBTY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgdmFyIGhpdEFyZWEgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2hpdEFyZWEnLCBudWxsKTtcclxuICAgICAgICB2YXIgaGl0QXJlYUNhbGxiYWNrID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdoaXRBcmVhQ2FsbGJhY2snLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGhpdEFyZWEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBBY3Rpb25zLlNldEhpdEFyZWEoZW50cmllcywgaGl0QXJlYSwgaGl0QXJlYUNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBncmlkID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdncmlkQWxpZ24nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChncmlkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQWN0aW9ucy5HcmlkQWxpZ24oZW50cmllcywgZ3JpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jcmVhdGVNdWx0aXBsZUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNdWx0aXBsZUNhbGxiYWNrLmNhbGwodGhpcywgZW50cmllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cmllcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGFueSBncm91cCBtZW1iZXJzLCBpZiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3J1bkNoaWxkVXBkYXRlfSBpcyBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICBwcmVVcGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucnVuQ2hpbGRVcGRhdGUgfHwgdGhpcy5jaGlsZHJlbi5zaXplID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJlY2F1c2UgYSBHcm91cCBjaGlsZCBtYXkgbWVzcyB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIEdyb3VwIGR1cmluZyBpdHMgdXBkYXRlXHJcbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmNoaWxkcmVuLmVudHJpZXMuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0ZW1wW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIEdhbWUgT2JqZWN0IHRvIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBhZGQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lPWZhbHNlXSAtIEFsc28gYWRkIHRoZSBHYW1lIE9iamVjdCB0byB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY2hpbGQsIGFkZFRvU2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFkZFRvU2NlbmUgPT09IHVuZGVmaW5lZCkgeyBhZGRUb1NjZW5lID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNhbGxiYWNrLmNhbGwodGhpcywgY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFkZFRvU2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5hZGQoY2hpbGQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zeXMudXBkYXRlTGlzdC5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGlsZC5vbihFdmVudHMuREVTVFJPWSwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHNldmVyYWwgR2FtZSBPYmplY3RzIHRvIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYWRkTXVsdGlwbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gY2hpbGRyZW4gLSBUaGUgR2FtZSBPYmplY3RzIHRvIGFkZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmU9ZmFsc2VdIC0gQWxzbyBhZGQgdGhlIEdhbWUgT2JqZWN0cyB0byB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIGdyb3VwLlxyXG4gICAgICovXHJcbiAgICBhZGRNdWx0aXBsZTogZnVuY3Rpb24gKGNoaWxkcmVuLCBhZGRUb1NjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhZGRUb1NjZW5lID09PSB1bmRlZmluZWQpIHsgYWRkVG9TY2VuZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGNoaWxkcmVuW2ldLCBhZGRUb1NjZW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIG1lbWJlciBvZiB0aGlzIEdyb3VwIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgaXQgZnJvbSB0aGUgU2NlbmUgYW5kIC8gb3IgZGVzdHJveXMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyZW1vdmVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW1vdmVGcm9tU2NlbmU9ZmFsc2VdIC0gT3B0aW9uYWxseSByZW1vdmUgdGhlIEdyb3VwIG1lbWJlciBmcm9tIHRoZSBTY2VuZSBpdCBiZWxvbmdzIHRvLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBkZXN0cm95IG9uIHRoZSByZW1vdmVkIEdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChjaGlsZCwgcmVtb3ZlRnJvbVNjZW5lLCBkZXN0cm95Q2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlbW92ZUZyb21TY2VuZSA9PT0gdW5kZWZpbmVkKSB7IHJlbW92ZUZyb21TY2VuZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZCA9PT0gdW5kZWZpbmVkKSB7IGRlc3Ryb3lDaGlsZCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGlsZHJlbi5jb250YWlucyhjaGlsZCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZGVsZXRlKGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNhbGxiYWNrLmNhbGwodGhpcywgY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGQub2ZmKEV2ZW50cy5ERVNUUk9ZLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmIChkZXN0cm95Q2hpbGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlbW92ZUZyb21TY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5yZW1vdmUoY2hpbGQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2NlbmUuc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgbWVtYmVycyBvZiB0aGlzIEdyb3VwIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBTY2VuZSBhbmQgLyBvciBkZXN0cm95cyB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIERvZXMgbm90IGNhbGwge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyZW1vdmVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZUZyb21TY2VuZT1mYWxzZV0gLSBPcHRpb25hbGx5IHJlbW92ZSBlYWNoIEdyb3VwIG1lbWJlciBmcm9tIHRoZSBTY2VuZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgZGVzdHJveSBvbiB0aGUgcmVtb3ZlZCBHcm91cCBtZW1iZXJzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW1vdmVGcm9tU2NlbmUsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICBpZiAocmVtb3ZlRnJvbVNjZW5lID09PSB1bmRlZmluZWQpIHsgcmVtb3ZlRnJvbVNjZW5lID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkID09PSB1bmRlZmluZWQpIHsgZGVzdHJveUNoaWxkID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGNoaWxkcmVuLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0Lm9mZihFdmVudHMuREVTVFJPWSwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVtb3ZlRnJvbVNjZW5lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5yZW1vdmUoZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QucHJlVXBkYXRlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3Quc2NlbmUuc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlc3RzIGlmIGEgR2FtZSBPYmplY3QgaXMgYSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBBIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IGlzIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAuXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uY29udGFpbnMoY2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbCBtZW1iZXJzIG9mIHRoZSBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRDaGlsZHJlblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gVGhlIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG51bWJlciBvZiBtZW1iZXJzIG9mIHRoZSBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldExlbmd0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBHcm91cCwgZnJvbSB0b3AgdG8gYm90dG9tLCBmb3IgdGhlIGZpcnN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEZpcnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdGF0ZT1mYWxzZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I2FjdGl2ZX0gdmFsdWUgdG8gbWF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjcmVhdGVJZk51bGw9ZmFsc2VdIC0gQ3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IGlmIG5vIG1hdGNoaW5nIG1lbWJlcnMgYXJlIGZvdW5kLCB1c2luZyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBBIHRleHR1cmUgZnJhbWUgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZX0gc3RhdGUgb2YgYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/YW55fSBUaGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdDogZnVuY3Rpb24gKHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGFuZGxlcih0cnVlLCAxLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgR3JvdXAsIGZyb20gdG9wIHRvIGJvdHRvbSwgZm9yIHRoZSBudGggbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIG1hdGNoaW5nIHRoZSBhcmd1bWVudCxcclxuICAgICAqIGFzc2lnbnMgYHhgIGFuZCBgeWAsIGFuZCByZXR1cm5zIHRoZSBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbWF0Y2hpbmcgbWVtYmVyIGlzIGZvdW5kIGFuZCBgY3JlYXRlSWZOdWxsYCBpcyB0cnVlIGFuZCB0aGUgZ3JvdXAgaXNuJ3QgZnVsbCB0aGVuIGl0IHdpbGwgY3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IHVzaW5nIGB4YCwgYHlgLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYC5cclxuICAgICAqIFVubGVzcyBhIG5ldyBtZW1iZXIgaXMgY3JlYXRlZCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAgYXJlIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZ2V0Rmlyc3ROdGhcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gVGhlIG50aCBtYXRjaGluZyBHcm91cCBtZW1iZXIgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0TnRoOiBmdW5jdGlvbiAobnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEhhbmRsZXIodHJ1ZSwgbnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgR3JvdXAgZm9yIHRoZSBsYXN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldExhc3RcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3Q6IGZ1bmN0aW9uIChzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEhhbmRsZXIoZmFsc2UsIDEsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBHcm91cCBmb3IgdGhlIGxhc3QgbnRoIG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldExhc3ROdGhcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gVGhlIG50aCBtYXRjaGluZyBHcm91cCBtZW1iZXIgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3ROdGg6IGZ1bmN0aW9uIChudGgsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGFuZGxlcihmYWxzZSwgbnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgZ3JvdXAgZm9yIHRoZSBsYXN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEhhbmRsZXJcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcndhcmRzIC0gU2VhcmNoIGZyb250IHRvIGJhY2sgb3IgYmFjayB0byBmcm9udD9cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gU3RvcCBtYXRjaGluZyBhZnRlciBudGggc3VjY2Vzc2Z1bCBtYXRjaGVzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3RhdGU9ZmFsc2VdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHZhbHVlIHRvIG1hdGNoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlSWZOdWxsPWZhbHNlXSAtIENyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCBpZiBubyBtYXRjaGluZyBtZW1iZXJzIGFyZSBmb3VuZCwgdXNpbmcgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P2FueX0gVGhlIGZpcnN0IG1hdGNoaW5nIGdyb3VwIG1lbWJlciwgb3IgYSBuZXdseSBjcmVhdGVkIG1lbWJlciwgb3IgbnVsbC5cclxuICAgICAqL1xyXG4gICAgZ2V0SGFuZGxlcjogZnVuY3Rpb24gKGZvcndhcmRzLCBudGgsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHsgc3RhdGUgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjcmVhdGVJZk51bGwgPT09IHVuZGVmaW5lZCkgeyBjcmVhdGVJZk51bGwgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcblxyXG4gICAgICAgIGlmIChmb3J3YXJkcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LmFjdGl2ZSA9PT0gc3RhdGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSBudGgpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgPSBjaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2FtZU9iamVjdC5hY3RpdmUgPT09IHN0YXRlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PT0gbnRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoeCkgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnggPSB4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHkpID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC55ID0geTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgR290IHRoaXMgZmFyPyBXZSBuZWVkIHRvIGNyZWF0ZSBvciBiYWlsXHJcbiAgICAgICAgaWYgKGNyZWF0ZUlmTnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBncm91cCBmb3IgdGhlIGZpcnN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBzZXQgdG8gYGZhbHNlYCxcclxuICAgICAqIGFzc2lnbnMgYHhgIGFuZCBgeWAsIGFuZCByZXR1cm5zIHRoZSBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gaW5hY3RpdmUgbWVtYmVyIGlzIGZvdW5kIGFuZCB0aGUgZ3JvdXAgaXNuJ3QgZnVsbCB0aGVuIGl0IHdpbGwgY3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IHVzaW5nIGB4YCwgYHlgLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYC5cclxuICAgICAqIFRoZSBuZXcgR2FtZSBPYmplY3Qgd2lsbCBoYXZlIGl0cyBhY3RpdmUgc3RhdGUgc2V0IHRvIGB0cnVlYC5cclxuICAgICAqIFVubGVzcyBhIG5ldyBtZW1iZXIgaXMgY3JlYXRlZCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAgYXJlIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P2FueX0gVGhlIGZpcnN0IGluYWN0aXZlIGdyb3VwIG1lbWJlciwgb3IgYSBuZXdseSBjcmVhdGVkIG1lbWJlciwgb3IgbnVsbC5cclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdChmYWxzZSwgdHJ1ZSwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGdyb3VwIGZvciB0aGUgZmlyc3QgbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIHNldCB0byBgdHJ1ZWAsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGFjdGl2ZSBtZW1iZXIgaXMgZm91bmQgYW5kIGBjcmVhdGVJZk51bGxgIGlzIGB0cnVlYCBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUgdXNpbmcgYHhgLCBgeWAsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgLlxyXG4gICAgICogVW5sZXNzIGEgbmV3IG1lbWJlciBpcyBjcmVhdGVkLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYCBhcmUgaWdub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRGaXJzdEFsaXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjcmVhdGVJZk51bGw9ZmFsc2VdIC0gQ3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IGlmIG5vIG1hdGNoaW5nIG1lbWJlcnMgYXJlIGZvdW5kLCB1c2luZyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBBIHRleHR1cmUgZnJhbWUgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZX0gc3RhdGUgb2YgYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthbnl9IFRoZSBmaXJzdCBhY3RpdmUgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdEFsaXZlOiBmdW5jdGlvbiAoY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0KHRydWUsIGNyZWF0ZUlmTnVsbCwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGdyb3VwIGZvciB0aGUgZmlyc3QgbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIHNldCB0byBgZmFsc2VgLFxyXG4gICAgICogYXNzaWducyBgeGAgYW5kIGB5YCwgYW5kIHJldHVybnMgdGhlIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBpbmFjdGl2ZSBtZW1iZXIgaXMgZm91bmQgYW5kIGBjcmVhdGVJZk51bGxgIGlzIGB0cnVlYCBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUgdXNpbmcgYHhgLCBgeWAsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgLlxyXG4gICAgICogVGhlIG5ldyBHYW1lIE9iamVjdCB3aWxsIGhhdmUgYW4gYWN0aXZlIHN0YXRlIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEZpcnN0RGVhZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlSWZOdWxsPWZhbHNlXSAtIENyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCBpZiBubyBtYXRjaGluZyBtZW1iZXJzIGFyZSBmb3VuZCwgdXNpbmcgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgZmlyc3QgaW5hY3RpdmUgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdERlYWQ6IGZ1bmN0aW9uIChjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3QoZmFsc2UsIGNyZWF0ZUlmTnVsbCwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwbGF5IFBsYXlzfSBhbiBhbmltYXRpb24gZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcGxheUFuaW1hdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwbGF5QW5pbWF0aW9uOiBmdW5jdGlvbiAoa2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuUGxheUFuaW1hdGlvbih0aGlzLmNoaWxkcmVuLmVudHJpZXMsIGtleSwgc3RhcnRGcmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhpcyBncm91cCdzIHNpemUgYXQgaXRzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbWF4U2l6ZSBtYXhpbXVtfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNpc0Z1bGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG51bWJlciBvZiBtZW1iZXJzIGVxdWFscyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI21heFNpemV9LlxyXG4gICAgICovXHJcbiAgICBpc0Z1bGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA9PT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5jaGlsZHJlbi5zaXplID49IHRoaXMubWF4U2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSAob3IgaW5hY3RpdmUpIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY291bnRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gQ291bnQgYWN0aXZlICh0cnVlKSBvciBpbmFjdGl2ZSAoZmFsc2UpIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBncm91cCBtZW1iZXJzIHdpdGggYW4gYWN0aXZlIHN0YXRlIG1hdGNoaW5nIHRoZSBgYWN0aXZlYCBhcmd1bWVudC5cclxuICAgICAqL1xyXG4gICAgY291bnRBY3RpdmU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLnNpemU7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmVudHJpZXNbaV0uYWN0aXZlID09PSB2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG90YWwrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGluLXVzZSAoYWN0aXZlKSBncm91cCBtZW1iZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldFRvdGFsVXNlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBncm91cCBtZW1iZXJzIHdpdGggYW4gYWN0aXZlIHN0YXRlIG9mIHRydWUuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsVXNlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaWZmZXJlbmNlIG9mIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbWF4U2l6ZX0gYW5kIHRoZSBudW1iZXIgb2YgYWN0aXZlIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgZ3JvdXAgbWVtYmVycyB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgb3IgcmVhY3RpdmF0ZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBzaXplIGxpbWl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldFRvdGFsRnJlZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gbWF4U2l6ZSBtaW51cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBncm91cCBudW1iZXJzOyBvciBhIGxhcmdlIG51bWJlciAoaWYgbWF4U2l6ZSBpcyAtMSkuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsRnJlZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdXNlZCA9IHRoaXMuZ2V0VG90YWxVc2VkKCk7XHJcbiAgICAgICAgdmFyIGNhcGFjaXR5ID0gKHRoaXMubWF4U2l6ZSA9PT0gLTEpID8gOTk5OTk5OTk5OTk5IDogdGhpcy5tYXhTaXplO1xyXG5cclxuICAgICAgICByZXR1cm4gKGNhcGFjaXR5IC0gdXNlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcHJvcGVydHkgYXMgZGVmaW5lZCBpbiBga2V5YCBvZiBlYWNoIGdyb3VwIG1lbWJlciB0byB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcHJvcGVydHlWYWx1ZVNldFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJvcGVydHlWYWx1ZVNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Qcm9wZXJ0eVZhbHVlU2V0KHRoaXMuY2hpbGRyZW4uZW50cmllcywga2V5LCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBwcm9wZXJ0eSBhcyBkZWZpbmVkIGluIGBrZXlgIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3Byb3BlcnR5VmFsdWVJbmNcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByb3BlcnR5VmFsdWVJbmM6IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuUHJvcGVydHlWYWx1ZUluYyh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4IG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldFhcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0WCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgeSBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXRZXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFk6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldFkodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHgsIHkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0WFlcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgeGAgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHlgIHByb3BlcnR5IHRvLiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB4YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB5YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFhZOiBmdW5jdGlvbiAoeCwgeSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0WFkodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB4LCB5LCBzdGVwWCwgc3RlcFkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgeCBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNpbmNYXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGluY1g6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkluY1godGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSB5IG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2luY1lcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgeWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgaW5jWTogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuSW5jWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIHgsIHkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjaW5jWFlcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGB4YCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGB5YCBwcm9wZXJ0eS4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGB4YCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBpbmNYWTogZnVuY3Rpb24gKHgsIHksIHN0ZXBYLCBzdGVwWSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkluY1hZKHRoaXMuY2hpbGRyZW4uZW50cmllcywgeCwgeSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBncm91cCBtZW1iZXJzIGNoYW5naW5nIHRoZSBwb3NpdGlvbiBvZiBlYWNoIGVsZW1lbnQgdG8gYmUgdGhhdCBvZiB0aGUgZWxlbWVudCB0aGF0IGNhbWUgYmVmb3JlXHJcbiAgICAgKiBpdCBpbiB0aGUgYXJyYXkgKG9yIGFmdGVyIGl0IGlmIGRpcmVjdGlvbiA9IDEpXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmaXJzdCBncm91cCBtZW1iZXIgcG9zaXRpb24gaXMgc2V0IHRvIHgveS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzaGlmdFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIHBsYWNlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBwbGFjZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgYXQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MF0gLSBUaGUgaXRlcmF0aW9uIGRpcmVjdGlvbi4gMCA9IGZpcnN0IHRvIGxhc3QgYW5kIDEgPSBsYXN0IHRvIGZpcnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNoaWZ0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5LCBkaXJlY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5TaGlmdFBvc2l0aW9uKHRoaXMuY2hpbGRyZW4uZW50cmllcywgeCwgeSwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYW5nbGUgdG8sIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkFuZ2xlKHRoaXMuY2hpbGRyZW4uZW50cmllcywgdmFsdWUsIHN0ZXApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSByb3RhdGlvbiBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyb3RhdGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcm90YXRpb24gdG8sIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAodmFsdWUsIHN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Sb3RhdGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgZWFjaCBncm91cCBtZW1iZXIgYXJvdW5kIHRoZSBnaXZlbiBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcm90YXRlQXJvdW5kXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gcG9pbnQgLSBBbnkgb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gcm90YXRlIGJ5LCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogZnVuY3Rpb24gKHBvaW50LCBhbmdsZSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlJvdGF0ZUFyb3VuZCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHBvaW50LCBhbmdsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgZWFjaCBncm91cCBtZW1iZXIgYXJvdW5kIHRoZSBnaXZlbiBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIGRpc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3JvdGF0ZUFyb3VuZERpc3RhbmNlXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gcG9pbnQgLSBBbnkgb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gcm90YXRlIGJ5LCBpbiByYWRpYW5zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50IG9mIHJvdGF0aW9uIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByb3RhdGVBcm91bmREaXN0YW5jZTogZnVuY3Rpb24gKHBvaW50LCBhbmdsZSwgZGlzdGFuY2UpXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Sb3RhdGVBcm91bmREaXN0YW5jZSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHBvaW50LCBhbmdsZSwgZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXRBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBhbHBoYSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbHBoYTogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0QWxwaGEodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRpbnQgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0VGludFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3BMZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0b3AtbGVmdCBjb3JuZXIgb2YgaXRlbS4gSWYgb3RoZXIgcGFyYW1ldGVycyBhcmUgZ2l2ZW4gbm8gdmFsdWUsIHRoaXMgdGludCB3aWxsIGJlIGFwcGxpZWQgdG8gd2hvbGUgaXRlbS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0b3AtcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdHRvbUxlZnRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0aGUgYm90dG9tLWxlZnQgY29ybmVyIG9mIGl0ZW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdHRvbVJpZ2h0XSAtIFRoZSB0aW50IHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUaW50OiBmdW5jdGlvbiAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0VGludCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG9yaWdpblgsIG9yaWdpblkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9yaWdpblggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYG9yaWdpblhgIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmlnaW5ZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgb3JpZ2luWWAgcHJvcGVydHkgdG8uIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgb3JpZ2luWGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpblhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBZPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpbllgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0T3JpZ2luOiBmdW5jdGlvbiAob3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0T3JpZ2luKHRoaXMuY2hpbGRyZW4uZW50cmllcywgb3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVYIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NjYWxlWFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZVg6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNjYWxlWCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVZIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NjYWxlWVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZVk6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNjYWxlWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVYLCBzY2FsZVkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2NhbGVYWVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgc2NhbGVYYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZXSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGBzY2FsZVlgIHByb3BlcnR5LiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHNjYWxlWGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHNjYWxlWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2NhbGVZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWFk6IGZ1bmN0aW9uIChzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2NhbGVYWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHNjYWxlWCwgc2NhbGVZLCBzdGVwWCwgc3RlcFkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZXB0aCBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXREZXB0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERlcHRoOiBmdW5jdGlvbiAodmFsdWUsIHN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5TZXREZXB0aCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmxlbmRNb2RlIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldEJsZW5kTW9kZVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCbGVuZE1vZGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldEJsZW5kTW9kZSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBncm91cCBtZW1iZXJzIHRvIHRoZSBJbnB1dCBNYW5hZ2VyIHRvIGVuYWJsZSB0aGVtIGZvciBpbnB1dCB3aXRoIGlkZW50aWNhbCBhcmVhcyBhbmQgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldEhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGhpdEFyZWEgLSBFaXRoZXIgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGEgZ2VvbWV0cmljIHNoYXBlIHRoYXQgZGVmaW5lcyB0aGUgaGl0IGFyZWEgZm9yIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IHNwZWNpZmllZCBhIFJlY3RhbmdsZSB3aWxsIGJlIHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBHYW1lIE9iamVjdCBpcyBpbnRlcmFjdGVkIHdpdGguIElmIHlvdSBwcm92aWRlIGEgc2hhcGUgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYTogZnVuY3Rpb24gKGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldEhpdEFyZWEodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCBoaXRBcmVhLCBoaXRBcmVhQ2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHVmZmxlcyB0aGUgZ3JvdXAgbWVtYmVycyBpbiBwbGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzaHVmZmxlXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNodWZmbGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVhY3RpdmF0ZXMgYSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNraWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gQSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uY29udGFpbnMoZ2FtZU9iamVjdCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldEFjdGl2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYWN0aXZhdGVzIGFuZCBoaWRlcyBhIG1lbWJlciBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2tpbGxBbmRIaWRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gQSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAga2lsbEFuZEhpZGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmNvbnRhaW5zKGdhbWVPYmplY3QpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXRBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2aXNpYmxlIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldFZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbilcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldFZpc2libGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZXMgKGZsaXBzKSB0aGUgdmlzaWJsZSBzdGF0ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3RvZ2dsZVZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZVZpc2libGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Ub2dnbGVWaXNpYmxlKHRoaXMuY2hpbGRyZW4uZW50cmllcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtcHRpZXMgdGhpcyBncm91cCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBEb2VzIG5vdCBjYWxsIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlQ2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0gLSBBbHNvIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkZXN0cm95fSBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkcmVuID09PSB1bmRlZmluZWQpIHsgZGVzdHJveUNoaWxkcmVuID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgLy8gIFRoaXMgR2FtZSBPYmplY3QgaGFkIGFscmVhZHkgYmVlbiBkZXN0cm95ZWRcclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUgfHwgdGhpcy5pZ25vcmVEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcihmYWxzZSwgZGVzdHJveUNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyb3VwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/Group.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/group/GroupCreator.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/group/GroupCreator.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar Group = __webpack_require__(/*! ./Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\n\r\n/**\r\n * Creates a new Group Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Group Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#group\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} config - The configuration object this Game Object will use to create itself.\r\n *\r\n * @return {Phaser.GameObjects.Group} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('group', function (config)\r\n{\r\n    return new Group(this.scene, null, config);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cENyZWF0b3IuanM/OTVkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxxRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEZBQTRGO0FBQ3ZHO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JvdXAvR3JvdXBDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR3JvdXAgPSByZXF1aXJlKCcuL0dyb3VwJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcm91cCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgR3JvdXAgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2dyb3VwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignZ3JvdXAnLCBmdW5jdGlvbiAoY29uZmlnKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IEdyb3VwKHRoaXMuc2NlbmUsIG51bGwsIGNvbmZpZyk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/GroupCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/group/GroupFactory.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/group/GroupFactory.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Group = __webpack_require__(/*! ./Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Group Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Group Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#group\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupConfig[])} [children] - Game Objects to add to this Group; or the `config` argument.\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - A Group Configuration object.\r\n *\r\n * @return {Phaser.GameObjects.Group} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('group', function (children, config)\r\n{\r\n    return this.updateList.add(new Group(this.scene, children, config));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cEZhY3RvcnkuanM/OTAyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEhBQTBILGdEQUFnRDtBQUNyTCxXQUFXLDRGQUE0RjtBQUN2RztBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2dyb3VwL0dyb3VwRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdyb3VwID0gcmVxdWlyZSgnLi9Hcm91cCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgR3JvdXAgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBHcm91cCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZ3JvdXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ1tdKX0gW2NoaWxkcmVuXSAtIEdhbWUgT2JqZWN0cyB0byBhZGQgdG8gdGhpcyBHcm91cDsgb3IgdGhlIGBjb25maWdgIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IFtjb25maWddIC0gQSBHcm91cCBDb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdncm91cCcsIGZ1bmN0aW9uIChjaGlsZHJlbiwgY29uZmlnKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy51cGRhdGVMaXN0LmFkZChuZXcgR3JvdXAodGhpcy5zY2VuZSwgY2hpbGRyZW4sIGNvbmZpZykpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/GroupFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/Image.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/Image.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar ImageRender = __webpack_require__(/*! ./ImageRender */ \"./node_modules/phaser/src/gameobjects/image/ImageRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Image Game Object.\r\n *\r\n * An Image is a light-weight Game Object useful for the display of static images in your game,\r\n * such as logos, backgrounds, scenery or other non-animated elements. Images can have input\r\n * events and physics bodies, or be tweened, tinted or scrolled. The main difference between an\r\n * Image and a Sprite is that you cannot animate an Image as they do not have the Animation component.\r\n *\r\n * @class Image\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Image = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Size,\r\n        Components.TextureCrop,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        ImageRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Image (scene, x, y, texture, frame)\r\n    {\r\n        GameObject.call(this, scene, 'Image');\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.Image#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setPosition(x, y);\r\n        this.setSizeToFrame();\r\n        this.setOriginFromFrame();\r\n        this.initPipeline();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Image;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZS5qcz85MzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLGlGQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBJbWFnZVJlbmRlciA9IHJlcXVpcmUoJy4vSW1hZ2VSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEFuIEltYWdlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBBbiBJbWFnZSBpcyBhIGxpZ2h0LXdlaWdodCBHYW1lIE9iamVjdCB1c2VmdWwgZm9yIHRoZSBkaXNwbGF5IG9mIHN0YXRpYyBpbWFnZXMgaW4geW91ciBnYW1lLFxyXG4gKiBzdWNoIGFzIGxvZ29zLCBiYWNrZ3JvdW5kcywgc2NlbmVyeSBvciBvdGhlciBub24tYW5pbWF0ZWQgZWxlbWVudHMuIEltYWdlcyBjYW4gaGF2ZSBpbnB1dFxyXG4gKiBldmVudHMgYW5kIHBoeXNpY3MgYm9kaWVzLCBvciBiZSB0d2VlbmVkLCB0aW50ZWQgb3Igc2Nyb2xsZWQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhblxyXG4gKiBJbWFnZSBhbmQgYSBTcHJpdGUgaXMgdGhhdCB5b3UgY2Fubm90IGFuaW1hdGUgYW4gSW1hZ2UgYXMgdGhleSBkbyBub3QgaGF2ZSB0aGUgQW5pbWF0aW9uIGNvbXBvbmVudC5cclxuICpcclxuICogQGNsYXNzIEltYWdlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgSW1hZ2UgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIEltYWdlUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSW1hZ2UgKHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdJbWFnZScpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW50ZXJuYWwgY3JvcCBkYXRhIG9iamVjdCwgYXMgdXNlZCBieSBgc2V0Q3JvcGAgYW5kIHBhc3NlZCB0byB0aGUgYEZyYW1lLnNldENyb3BVVnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNfY3JvcFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3JvcCA9IHRoaXMucmVzZXRDcm9wT2JqZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZSh0ZXh0dXJlLCBmcmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmlnaW5Gcm9tRnJhbWUoKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/Image.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Image#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Image} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ImageCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = ImageCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUNhbnZhc1JlbmRlcmVyLmpzP2Q3ZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcseUJBQXlCO0FBQ3BDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW1hZ2UvSW1hZ2VDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5JbWFnZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEltYWdlQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICByZW5kZXJlci5iYXRjaFNwcml0ZShzcmMsIHNyYy5mcmFtZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/ImageCreator.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/ImageCreator.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Image = __webpack_require__(/*! ./Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#image\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('image', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n    var image = new Image(this.scene, 0, 0, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, image, config);\r\n\r\n    return image;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUNyZWF0b3IuanM/MDE5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsWUFBWSxtQkFBTyxDQUFDLHFFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBJbWFnZSA9IHJlcXVpcmUoJy4vSW1hZ2UnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEltYWdlIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBJbWFnZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjaW1hZ2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkltYWdlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdpbWFnZScsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBrZXkgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2tleScsIG51bGwpO1xyXG4gICAgdmFyIGZyYW1lID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmcmFtZScsIG51bGwpO1xyXG5cclxuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSh0aGlzLnNjZW5lLCAwLCAwLCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBpbWFnZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gaW1hZ2U7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/ImageFactory.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/ImageFactory.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Image = __webpack_require__(/*! ./Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#image\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('image', function (x, y, key, frame)\r\n{\r\n    return this.displayList.add(new Image(this.scene, x, y, key, frame));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUZhY3RvcnkuanM/MTk1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW1hZ2UvSW1hZ2VGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSW1hZ2UgPSByZXF1aXJlKCcuL0ltYWdlJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBJbWFnZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEltYWdlIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNpbWFnZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuSW1hZ2V9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2ltYWdlJywgZnVuY3Rpb24gKHgsIHksIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgSW1hZ2UodGhpcy5zY2VuZSwgeCwgeSwga2V5LCBmcmFtZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/ImageRender.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/ImageRender.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ImageWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ImageCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVJlbmRlci5qcz9jYjNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsK0ZBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vSW1hZ2VXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0ltYWdlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Image#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Image} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    this.pipeline.batchSprite(src, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = ImageWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVdlYkdMUmVuZGVyZXIuanM/Mjc2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkltYWdlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgSW1hZ2VXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFNwcml0ZShzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW1hZ2VXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects\r\n */\r\n\r\nvar GameObjects = {\r\n\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/gameobjects/events/index.js\"),\r\n\r\n    DisplayList: __webpack_require__(/*! ./DisplayList */ \"./node_modules/phaser/src/gameobjects/DisplayList.js\"),\r\n    GameObjectCreator: __webpack_require__(/*! ./GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\"),\r\n    GameObjectFactory: __webpack_require__(/*! ./GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\"),\r\n    UpdateList: __webpack_require__(/*! ./UpdateList */ \"./node_modules/phaser/src/gameobjects/UpdateList.js\"),\r\n\r\n    Components: __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/gameobjects/components/index.js\"),\r\n\r\n    BuildGameObject: __webpack_require__(/*! ./BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\"),\r\n    BuildGameObjectAnimation: __webpack_require__(/*! ./BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\"),\r\n    GameObject: __webpack_require__(/*! ./GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\"),\r\n    BitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\"),\r\n    Blitter: __webpack_require__(/*! ./blitter/Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\"),\r\n    Container: __webpack_require__(/*! ./container/Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\"),\r\n    DOMElement: __webpack_require__(/*! ./domelement/DOMElement */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\"),\r\n    DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\"),\r\n    Extern: __webpack_require__(/*! ./extern/Extern.js */ \"./node_modules/phaser/src/gameobjects/extern/Extern.js\"),\r\n    Graphics: __webpack_require__(/*! ./graphics/Graphics.js */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\"),\r\n    Group: __webpack_require__(/*! ./group/Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\"),\r\n    Image: __webpack_require__(/*! ./image/Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\"),\r\n    Particles: __webpack_require__(/*! ./particles */ \"./node_modules/phaser/src/gameobjects/particles/index.js\"),\r\n    PathFollower: __webpack_require__(/*! ./pathfollower/PathFollower */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\"),\r\n    RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\"),\r\n    RetroFont: __webpack_require__(/*! ./bitmaptext/RetroFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js\"),\r\n    Sprite: __webpack_require__(/*! ./sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\"),\r\n    Text: __webpack_require__(/*! ./text/static/Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\"),\r\n    TileSprite: __webpack_require__(/*! ./tilesprite/TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\"),\r\n    Zone: __webpack_require__(/*! ./zone/Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\"),\r\n    Video: __webpack_require__(/*! ./video/Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\"),\r\n\r\n    //  Shapes\r\n\r\n    Shape: __webpack_require__(/*! ./shape/Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\"),\r\n    Arc: __webpack_require__(/*! ./shape/arc/Arc */ \"./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\"),\r\n    Curve: __webpack_require__(/*! ./shape/curve/Curve */ \"./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\"),\r\n    Ellipse: __webpack_require__(/*! ./shape/ellipse/Ellipse */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\"),\r\n    Grid: __webpack_require__(/*! ./shape/grid/Grid */ \"./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\"),\r\n    IsoBox: __webpack_require__(/*! ./shape/isobox/IsoBox */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\"),\r\n    IsoTriangle: __webpack_require__(/*! ./shape/isotriangle/IsoTriangle */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\"),\r\n    Line: __webpack_require__(/*! ./shape/line/Line */ \"./node_modules/phaser/src/gameobjects/shape/line/Line.js\"),\r\n    Polygon: __webpack_require__(/*! ./shape/polygon/Polygon */ \"./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\"),\r\n    Rectangle: __webpack_require__(/*! ./shape/rectangle/Rectangle */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\"),\r\n    Star: __webpack_require__(/*! ./shape/star/Star */ \"./node_modules/phaser/src/gameobjects/shape/star/Star.js\"),\r\n    Triangle: __webpack_require__(/*! ./shape/triangle/Triangle */ \"./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\"),\r\n\r\n    //  Game Object Factories\r\n\r\n    Factories: {\r\n        Blitter: __webpack_require__(/*! ./blitter/BlitterFactory */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js\"),\r\n        Container: __webpack_require__(/*! ./container/ContainerFactory */ \"./node_modules/phaser/src/gameobjects/container/ContainerFactory.js\"),\r\n        DOMElement: __webpack_require__(/*! ./domelement/DOMElementFactory */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js\"),\r\n        DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapTextFactory */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js\"),\r\n        Extern: __webpack_require__(/*! ./extern/ExternFactory */ \"./node_modules/phaser/src/gameobjects/extern/ExternFactory.js\"),\r\n        Graphics: __webpack_require__(/*! ./graphics/GraphicsFactory */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js\"),\r\n        Group: __webpack_require__(/*! ./group/GroupFactory */ \"./node_modules/phaser/src/gameobjects/group/GroupFactory.js\"),\r\n        Image: __webpack_require__(/*! ./image/ImageFactory */ \"./node_modules/phaser/src/gameobjects/image/ImageFactory.js\"),\r\n        Particles: __webpack_require__(/*! ./particles/ParticleManagerFactory */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js\"),\r\n        PathFollower: __webpack_require__(/*! ./pathfollower/PathFollowerFactory */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js\"),\r\n        RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTextureFactory */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js\"),\r\n        Sprite: __webpack_require__(/*! ./sprite/SpriteFactory */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js\"),\r\n        StaticBitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapTextFactory */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js\"),\r\n        Text: __webpack_require__(/*! ./text/static/TextFactory */ \"./node_modules/phaser/src/gameobjects/text/static/TextFactory.js\"),\r\n        TileSprite: __webpack_require__(/*! ./tilesprite/TileSpriteFactory */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js\"),\r\n        Zone: __webpack_require__(/*! ./zone/ZoneFactory */ \"./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js\"),\r\n        Video: __webpack_require__(/*! ./video/VideoFactory */ \"./node_modules/phaser/src/gameobjects/video/VideoFactory.js\"),\r\n\r\n        //  Shapes\r\n        Arc: __webpack_require__(/*! ./shape/arc/ArcFactory */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js\"),\r\n        Curve: __webpack_require__(/*! ./shape/curve/CurveFactory */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js\"),\r\n        Ellipse: __webpack_require__(/*! ./shape/ellipse/EllipseFactory */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js\"),\r\n        Grid: __webpack_require__(/*! ./shape/grid/GridFactory */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js\"),\r\n        IsoBox: __webpack_require__(/*! ./shape/isobox/IsoBoxFactory */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js\"),\r\n        IsoTriangle: __webpack_require__(/*! ./shape/isotriangle/IsoTriangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js\"),\r\n        Line: __webpack_require__(/*! ./shape/line/LineFactory */ \"./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js\"),\r\n        Polygon: __webpack_require__(/*! ./shape/polygon/PolygonFactory */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js\"),\r\n        Rectangle: __webpack_require__(/*! ./shape/rectangle/RectangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js\"),\r\n        Star: __webpack_require__(/*! ./shape/star/StarFactory */ \"./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js\"),\r\n        Triangle: __webpack_require__(/*! ./shape/triangle/TriangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js\")\r\n    },\r\n\r\n    Creators: {\r\n        Blitter: __webpack_require__(/*! ./blitter/BlitterCreator */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js\"),\r\n        Container: __webpack_require__(/*! ./container/ContainerCreator */ \"./node_modules/phaser/src/gameobjects/container/ContainerCreator.js\"),\r\n        DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapTextCreator */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js\"),\r\n        Graphics: __webpack_require__(/*! ./graphics/GraphicsCreator */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js\"),\r\n        Group: __webpack_require__(/*! ./group/GroupCreator */ \"./node_modules/phaser/src/gameobjects/group/GroupCreator.js\"),\r\n        Image: __webpack_require__(/*! ./image/ImageCreator */ \"./node_modules/phaser/src/gameobjects/image/ImageCreator.js\"),\r\n        Particles: __webpack_require__(/*! ./particles/ParticleManagerCreator */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js\"),\r\n        RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTextureCreator */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js\"),\r\n        Sprite: __webpack_require__(/*! ./sprite/SpriteCreator */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js\"),\r\n        StaticBitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapTextCreator */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js\"),\r\n        Text: __webpack_require__(/*! ./text/static/TextCreator */ \"./node_modules/phaser/src/gameobjects/text/static/TextCreator.js\"),\r\n        TileSprite: __webpack_require__(/*! ./tilesprite/TileSpriteCreator */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js\"),\r\n        Zone: __webpack_require__(/*! ./zone/ZoneCreator */ \"./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js\"),\r\n        Video: __webpack_require__(/*! ./video/VideoCreator */ \"./node_modules/phaser/src/gameobjects/video/VideoCreator.js\")\r\n    }\r\n\r\n};\r\n\r\nif (true)\r\n{\r\n    //  WebGL only Game Objects\r\n    GameObjects.Mesh = __webpack_require__(/*! ./mesh/Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n    GameObjects.Quad = __webpack_require__(/*! ./quad/Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\n    GameObjects.Shader = __webpack_require__(/*! ./shader/Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\n\r\n    GameObjects.Factories.Mesh = __webpack_require__(/*! ./mesh/MeshFactory */ \"./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js\");\r\n    GameObjects.Factories.Quad = __webpack_require__(/*! ./quad/QuadFactory */ \"./node_modules/phaser/src/gameobjects/quad/QuadFactory.js\");\r\n    GameObjects.Factories.Shader = __webpack_require__(/*! ./shader/ShaderFactory */ \"./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js\");\r\n\r\n    GameObjects.Creators.Mesh = __webpack_require__(/*! ./mesh/MeshCreator */ \"./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js\");\r\n    GameObjects.Creators.Quad = __webpack_require__(/*! ./quad/QuadCreator */ \"./node_modules/phaser/src/gameobjects/quad/QuadCreator.js\");\r\n    GameObjects.Creators.Shader = __webpack_require__(/*! ./shader/ShaderCreator */ \"./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js\");\r\n\r\n    GameObjects.Light = __webpack_require__(/*! ./lights/Light */ \"./node_modules/phaser/src/gameobjects/lights/Light.js\");\r\n\r\n    __webpack_require__(/*! ./lights/LightsManager */ \"./node_modules/phaser/src/gameobjects/lights/LightsManager.js\");\r\n    __webpack_require__(/*! ./lights/LightsPlugin */ \"./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js\");\r\n}\r\n\r\nmodule.exports = GameObjects;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbmRleC5qcz8yYzUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHVFQUFVOztBQUU5QixpQkFBaUIsbUJBQU8sQ0FBQywyRUFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsdUZBQXFCO0FBQ3BELGdCQUFnQixtQkFBTyxDQUFDLHlFQUFjOztBQUV0QyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBYzs7QUFFdEMscUJBQXFCLG1CQUFPLENBQUMsbUZBQW1CO0FBQ2hELDhCQUE4QixtQkFBTyxDQUFDLHFHQUE0QjtBQUNsRSxnQkFBZ0IsbUJBQU8sQ0FBQyx5RUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2R0FBZ0M7QUFDeEQsYUFBYSxtQkFBTyxDQUFDLG1GQUFtQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsMkZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLCtGQUF5QjtBQUNqRCx1QkFBdUIsbUJBQU8sQ0FBQyw2SEFBd0M7QUFDdkUsWUFBWSxtQkFBTyxDQUFDLGtGQUFvQjtBQUN4QyxjQUFjLG1CQUFPLENBQUMsMEZBQXdCO0FBQzlDLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsMkVBQWU7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLDZFQUFhO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLHVHQUE2QjtBQUN2RCxtQkFBbUIsbUJBQU8sQ0FBQywyR0FBK0I7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLDZGQUF3QjtBQUMvQyxZQUFZLG1CQUFPLENBQUMsK0VBQWlCO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxxRkFBb0I7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsK0ZBQXlCO0FBQ2pELFVBQVUsbUJBQU8sQ0FBQyx1RUFBYTtBQUMvQixXQUFXLG1CQUFPLENBQUMsMkVBQWU7O0FBRWxDOztBQUVBLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxTQUFTLG1CQUFPLENBQUMsK0VBQWlCO0FBQ2xDLFdBQVcsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLCtGQUF5QjtBQUM5QyxVQUFVLG1CQUFPLENBQUMsbUZBQW1CO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQywyRkFBdUI7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsK0dBQWlDO0FBQzFELFVBQVUsbUJBQU8sQ0FBQyxtRkFBbUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLCtGQUF5QjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsdUdBQTZCO0FBQ3BELFVBQVUsbUJBQU8sQ0FBQyxtRkFBbUI7QUFDckMsY0FBYyxtQkFBTyxDQUFDLG1HQUEyQjs7QUFFakQ7O0FBRUE7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDbkQsbUJBQW1CLG1CQUFPLENBQUMseUdBQThCO0FBQ3pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCwyQkFBMkIsbUJBQU8sQ0FBQywySUFBK0M7QUFDbEYsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLHFHQUE0QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMseUZBQXNCO0FBQzdDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDN0MsbUJBQW1CLG1CQUFPLENBQUMscUhBQW9DO0FBQy9ELHNCQUFzQixtQkFBTyxDQUFDLHFIQUFvQztBQUNsRSx1QkFBdUIsbUJBQU8sQ0FBQyx5SEFBc0M7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDJIQUF1QztBQUN6RSxjQUFjLG1CQUFPLENBQUMsbUdBQTJCO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCxjQUFjLG1CQUFPLENBQUMscUZBQW9CO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7O0FBRTdDO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLDZGQUF3QjtBQUM3QyxlQUFlLG1CQUFPLENBQUMscUdBQTRCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLDZHQUFnQztBQUN6RCxjQUFjLG1CQUFPLENBQUMsaUdBQTBCO0FBQ2hELGdCQUFnQixtQkFBTyxDQUFDLHlHQUE4QjtBQUN0RCxxQkFBcUIsbUJBQU8sQ0FBQyw2SEFBd0M7QUFDckUsY0FBYyxtQkFBTyxDQUFDLGlHQUEwQjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBZ0M7QUFDekQsbUJBQW1CLG1CQUFPLENBQUMscUhBQW9DO0FBQy9ELGNBQWMsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsaUhBQWtDO0FBQzVELEtBQUs7O0FBRUw7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDbkQsbUJBQW1CLG1CQUFPLENBQUMseUdBQThCO0FBQ3pELDJCQUEyQixtQkFBTyxDQUFDLDJJQUErQztBQUNsRixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBNEI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLHlGQUFzQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMseUZBQXNCO0FBQzdDLG1CQUFtQixtQkFBTyxDQUFDLHFIQUFvQztBQUMvRCx1QkFBdUIsbUJBQU8sQ0FBQyx5SEFBc0M7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDJIQUF1QztBQUN6RSxjQUFjLG1CQUFPLENBQUMsbUdBQTJCO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCxjQUFjLG1CQUFPLENBQUMscUZBQW9CO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDN0M7O0FBRUE7O0FBRUEsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsdUVBQWE7QUFDNUMsdUJBQXVCLG1CQUFPLENBQUMsdUVBQWE7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsK0VBQWlCOztBQUVsRCxpQ0FBaUMsbUJBQU8sQ0FBQyxxRkFBb0I7QUFDN0QsaUNBQWlDLG1CQUFPLENBQUMscUZBQW9CO0FBQzdELG1DQUFtQyxtQkFBTyxDQUFDLDZGQUF3Qjs7QUFFbkUsZ0NBQWdDLG1CQUFPLENBQUMscUZBQW9CO0FBQzVELGdDQUFnQyxtQkFBTyxDQUFDLHFGQUFvQjtBQUM1RCxrQ0FBa0MsbUJBQU8sQ0FBQyw2RkFBd0I7O0FBRWxFLHdCQUF3QixtQkFBTyxDQUFDLDZFQUFnQjs7QUFFaEQsSUFBSSxtQkFBTyxDQUFDLDZGQUF3QjtBQUNwQyxJQUFJLG1CQUFPLENBQUMsMkZBQXVCO0FBQ25DOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKi9cclxuXHJcbnZhciBHYW1lT2JqZWN0cyA9IHtcclxuXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcblxyXG4gICAgRGlzcGxheUxpc3Q6IHJlcXVpcmUoJy4vRGlzcGxheUxpc3QnKSxcclxuICAgIEdhbWVPYmplY3RDcmVhdG9yOiByZXF1aXJlKCcuL0dhbWVPYmplY3RDcmVhdG9yJyksXHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeTogcmVxdWlyZSgnLi9HYW1lT2JqZWN0RmFjdG9yeScpLFxyXG4gICAgVXBkYXRlTGlzdDogcmVxdWlyZSgnLi9VcGRhdGVMaXN0JyksXHJcblxyXG4gICAgQ29tcG9uZW50czogcmVxdWlyZSgnLi9jb21wb25lbnRzJyksXHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0OiByZXF1aXJlKCcuL0J1aWxkR2FtZU9iamVjdCcpLFxyXG4gICAgQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uOiByZXF1aXJlKCcuL0J1aWxkR2FtZU9iamVjdEFuaW1hdGlvbicpLFxyXG4gICAgR2FtZU9iamVjdDogcmVxdWlyZSgnLi9HYW1lT2JqZWN0JyksXHJcbiAgICBCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHQnKSxcclxuICAgIEJsaXR0ZXI6IHJlcXVpcmUoJy4vYmxpdHRlci9CbGl0dGVyJyksXHJcbiAgICBDb250YWluZXI6IHJlcXVpcmUoJy4vY29udGFpbmVyL0NvbnRhaW5lcicpLFxyXG4gICAgRE9NRWxlbWVudDogcmVxdWlyZSgnLi9kb21lbGVtZW50L0RPTUVsZW1lbnQnKSxcclxuICAgIER5bmFtaWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvZHluYW1pYy9EeW5hbWljQml0bWFwVGV4dCcpLFxyXG4gICAgRXh0ZXJuOiByZXF1aXJlKCcuL2V4dGVybi9FeHRlcm4uanMnKSxcclxuICAgIEdyYXBoaWNzOiByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzLmpzJyksXHJcbiAgICBHcm91cDogcmVxdWlyZSgnLi9ncm91cC9Hcm91cCcpLFxyXG4gICAgSW1hZ2U6IHJlcXVpcmUoJy4vaW1hZ2UvSW1hZ2UnKSxcclxuICAgIFBhcnRpY2xlczogcmVxdWlyZSgnLi9wYXJ0aWNsZXMnKSxcclxuICAgIFBhdGhGb2xsb3dlcjogcmVxdWlyZSgnLi9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyJyksXHJcbiAgICBSZW5kZXJUZXh0dXJlOiByZXF1aXJlKCcuL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZScpLFxyXG4gICAgUmV0cm9Gb250OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvUmV0cm9Gb250JyksXHJcbiAgICBTcHJpdGU6IHJlcXVpcmUoJy4vc3ByaXRlL1Nwcml0ZScpLFxyXG4gICAgVGV4dDogcmVxdWlyZSgnLi90ZXh0L3N0YXRpYy9UZXh0JyksXHJcbiAgICBUaWxlU3ByaXRlOiByZXF1aXJlKCcuL3RpbGVzcHJpdGUvVGlsZVNwcml0ZScpLFxyXG4gICAgWm9uZTogcmVxdWlyZSgnLi96b25lL1pvbmUnKSxcclxuICAgIFZpZGVvOiByZXF1aXJlKCcuL3ZpZGVvL1ZpZGVvJyksXHJcblxyXG4gICAgLy8gIFNoYXBlc1xyXG5cclxuICAgIFNoYXBlOiByZXF1aXJlKCcuL3NoYXBlL1NoYXBlJyksXHJcbiAgICBBcmM6IHJlcXVpcmUoJy4vc2hhcGUvYXJjL0FyYycpLFxyXG4gICAgQ3VydmU6IHJlcXVpcmUoJy4vc2hhcGUvY3VydmUvQ3VydmUnKSxcclxuICAgIEVsbGlwc2U6IHJlcXVpcmUoJy4vc2hhcGUvZWxsaXBzZS9FbGxpcHNlJyksXHJcbiAgICBHcmlkOiByZXF1aXJlKCcuL3NoYXBlL2dyaWQvR3JpZCcpLFxyXG4gICAgSXNvQm94OiByZXF1aXJlKCcuL3NoYXBlL2lzb2JveC9Jc29Cb3gnKSxcclxuICAgIElzb1RyaWFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlJyksXHJcbiAgICBMaW5lOiByZXF1aXJlKCcuL3NoYXBlL2xpbmUvTGluZScpLFxyXG4gICAgUG9seWdvbjogcmVxdWlyZSgnLi9zaGFwZS9wb2x5Z29uL1BvbHlnb24nKSxcclxuICAgIFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyksXHJcbiAgICBTdGFyOiByZXF1aXJlKCcuL3NoYXBlL3N0YXIvU3RhcicpLFxyXG4gICAgVHJpYW5nbGU6IHJlcXVpcmUoJy4vc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGUnKSxcclxuXHJcbiAgICAvLyAgR2FtZSBPYmplY3QgRmFjdG9yaWVzXHJcblxyXG4gICAgRmFjdG9yaWVzOiB7XHJcbiAgICAgICAgQmxpdHRlcjogcmVxdWlyZSgnLi9ibGl0dGVyL0JsaXR0ZXJGYWN0b3J5JyksXHJcbiAgICAgICAgQ29udGFpbmVyOiByZXF1aXJlKCcuL2NvbnRhaW5lci9Db250YWluZXJGYWN0b3J5JyksXHJcbiAgICAgICAgRE9NRWxlbWVudDogcmVxdWlyZSgnLi9kb21lbGVtZW50L0RPTUVsZW1lbnRGYWN0b3J5JyksXHJcbiAgICAgICAgRHluYW1pY0JpdG1hcFRleHQ6IHJlcXVpcmUoJy4vYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0RmFjdG9yeScpLFxyXG4gICAgICAgIEV4dGVybjogcmVxdWlyZSgnLi9leHRlcm4vRXh0ZXJuRmFjdG9yeScpLFxyXG4gICAgICAgIEdyYXBoaWNzOiByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRmFjdG9yeScpLFxyXG4gICAgICAgIEdyb3VwOiByZXF1aXJlKCcuL2dyb3VwL0dyb3VwRmFjdG9yeScpLFxyXG4gICAgICAgIEltYWdlOiByZXF1aXJlKCcuL2ltYWdlL0ltYWdlRmFjdG9yeScpLFxyXG4gICAgICAgIFBhcnRpY2xlczogcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeScpLFxyXG4gICAgICAgIFBhdGhGb2xsb3dlcjogcmVxdWlyZSgnLi9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyRmFjdG9yeScpLFxyXG4gICAgICAgIFJlbmRlclRleHR1cmU6IHJlcXVpcmUoJy4vcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlRmFjdG9yeScpLFxyXG4gICAgICAgIFNwcml0ZTogcmVxdWlyZSgnLi9zcHJpdGUvU3ByaXRlRmFjdG9yeScpLFxyXG4gICAgICAgIFN0YXRpY0JpdG1hcFRleHQ6IHJlcXVpcmUoJy4vYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dEZhY3RvcnknKSxcclxuICAgICAgICBUZXh0OiByZXF1aXJlKCcuL3RleHQvc3RhdGljL1RleHRGYWN0b3J5JyksXHJcbiAgICAgICAgVGlsZVNwcml0ZTogcmVxdWlyZSgnLi90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5JyksXHJcbiAgICAgICAgWm9uZTogcmVxdWlyZSgnLi96b25lL1pvbmVGYWN0b3J5JyksXHJcbiAgICAgICAgVmlkZW86IHJlcXVpcmUoJy4vdmlkZW8vVmlkZW9GYWN0b3J5JyksXHJcblxyXG4gICAgICAgIC8vICBTaGFwZXNcclxuICAgICAgICBBcmM6IHJlcXVpcmUoJy4vc2hhcGUvYXJjL0FyY0ZhY3RvcnknKSxcclxuICAgICAgICBDdXJ2ZTogcmVxdWlyZSgnLi9zaGFwZS9jdXJ2ZS9DdXJ2ZUZhY3RvcnknKSxcclxuICAgICAgICBFbGxpcHNlOiByZXF1aXJlKCcuL3NoYXBlL2VsbGlwc2UvRWxsaXBzZUZhY3RvcnknKSxcclxuICAgICAgICBHcmlkOiByZXF1aXJlKCcuL3NoYXBlL2dyaWQvR3JpZEZhY3RvcnknKSxcclxuICAgICAgICBJc29Cb3g6IHJlcXVpcmUoJy4vc2hhcGUvaXNvYm94L0lzb0JveEZhY3RvcnknKSxcclxuICAgICAgICBJc29UcmlhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUZhY3RvcnknKSxcclxuICAgICAgICBMaW5lOiByZXF1aXJlKCcuL3NoYXBlL2xpbmUvTGluZUZhY3RvcnknKSxcclxuICAgICAgICBQb2x5Z29uOiByZXF1aXJlKCcuL3NoYXBlL3BvbHlnb24vUG9seWdvbkZhY3RvcnknKSxcclxuICAgICAgICBSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZUZhY3RvcnknKSxcclxuICAgICAgICBTdGFyOiByZXF1aXJlKCcuL3NoYXBlL3N0YXIvU3RhckZhY3RvcnknKSxcclxuICAgICAgICBUcmlhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnknKVxyXG4gICAgfSxcclxuXHJcbiAgICBDcmVhdG9yczoge1xyXG4gICAgICAgIEJsaXR0ZXI6IHJlcXVpcmUoJy4vYmxpdHRlci9CbGl0dGVyQ3JlYXRvcicpLFxyXG4gICAgICAgIENvbnRhaW5lcjogcmVxdWlyZSgnLi9jb250YWluZXIvQ29udGFpbmVyQ3JlYXRvcicpLFxyXG4gICAgICAgIER5bmFtaWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvZHluYW1pYy9EeW5hbWljQml0bWFwVGV4dENyZWF0b3InKSxcclxuICAgICAgICBHcmFwaGljczogcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0NyZWF0b3InKSxcclxuICAgICAgICBHcm91cDogcmVxdWlyZSgnLi9ncm91cC9Hcm91cENyZWF0b3InKSxcclxuICAgICAgICBJbWFnZTogcmVxdWlyZSgnLi9pbWFnZS9JbWFnZUNyZWF0b3InKSxcclxuICAgICAgICBQYXJ0aWNsZXM6IHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlTWFuYWdlckNyZWF0b3InKSxcclxuICAgICAgICBSZW5kZXJUZXh0dXJlOiByZXF1aXJlKCcuL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZUNyZWF0b3InKSxcclxuICAgICAgICBTcHJpdGU6IHJlcXVpcmUoJy4vc3ByaXRlL1Nwcml0ZUNyZWF0b3InKSxcclxuICAgICAgICBTdGF0aWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRDcmVhdG9yJyksXHJcbiAgICAgICAgVGV4dDogcmVxdWlyZSgnLi90ZXh0L3N0YXRpYy9UZXh0Q3JlYXRvcicpLFxyXG4gICAgICAgIFRpbGVTcHJpdGU6IHJlcXVpcmUoJy4vdGlsZXNwcml0ZS9UaWxlU3ByaXRlQ3JlYXRvcicpLFxyXG4gICAgICAgIFpvbmU6IHJlcXVpcmUoJy4vem9uZS9ab25lQ3JlYXRvcicpLFxyXG4gICAgICAgIFZpZGVvOiByZXF1aXJlKCcuL3ZpZGVvL1ZpZGVvQ3JlYXRvcicpXHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgLy8gIFdlYkdMIG9ubHkgR2FtZSBPYmplY3RzXHJcbiAgICBHYW1lT2JqZWN0cy5NZXNoID0gcmVxdWlyZSgnLi9tZXNoL01lc2gnKTtcclxuICAgIEdhbWVPYmplY3RzLlF1YWQgPSByZXF1aXJlKCcuL3F1YWQvUXVhZCcpO1xyXG4gICAgR2FtZU9iamVjdHMuU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXIvU2hhZGVyJyk7XHJcblxyXG4gICAgR2FtZU9iamVjdHMuRmFjdG9yaWVzLk1lc2ggPSByZXF1aXJlKCcuL21lc2gvTWVzaEZhY3RvcnknKTtcclxuICAgIEdhbWVPYmplY3RzLkZhY3Rvcmllcy5RdWFkID0gcmVxdWlyZSgnLi9xdWFkL1F1YWRGYWN0b3J5Jyk7XHJcbiAgICBHYW1lT2JqZWN0cy5GYWN0b3JpZXMuU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXIvU2hhZGVyRmFjdG9yeScpO1xyXG5cclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLk1lc2ggPSByZXF1aXJlKCcuL21lc2gvTWVzaENyZWF0b3InKTtcclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLlF1YWQgPSByZXF1aXJlKCcuL3F1YWQvUXVhZENyZWF0b3InKTtcclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLlNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVyL1NoYWRlckNyZWF0b3InKTtcclxuXHJcbiAgICBHYW1lT2JqZWN0cy5MaWdodCA9IHJlcXVpcmUoJy4vbGlnaHRzL0xpZ2h0Jyk7XHJcblxyXG4gICAgcmVxdWlyZSgnLi9saWdodHMvTGlnaHRzTWFuYWdlcicpO1xyXG4gICAgcmVxdWlyZSgnLi9saWdodHMvTGlnaHRzUGx1Z2luJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZU9iamVjdHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/lights/Light.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/lights/Light.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A 2D point light.\r\n *\r\n * These are typically created by a {@link Phaser.GameObjects.LightsManager}, available from within a scene via `this.lights`.\r\n *\r\n * Any Game Objects using the Light2D pipeline will then be affected by these Lights.\r\n *\r\n * They can also simply be used to represent a point light for your own purposes.\r\n *\r\n * @class Light\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of the light.\r\n * @param {number} y - The vertical position of the light.\r\n * @param {number} radius - The radius of the light.\r\n * @param {number} r - The red color of the light. A value between 0 and 1.\r\n * @param {number} g - The green color of the light. A value between 0 and 1.\r\n * @param {number} b - The blue color of the light. A value between 0 and 1.\r\n * @param {number} intensity - The intensity of the light.\r\n */\r\nvar Light = new Class({\r\n\r\n    initialize:\r\n\r\n    function Light (x, y, radius, r, g, b, intensity)\r\n    {\r\n        /**\r\n         * The horizontal position of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#x\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The vertical position of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#y\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The radius of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#radius\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.radius = radius;\r\n\r\n        /**\r\n         * The red color of the light. A value between 0 and 1.\r\n         *\r\n         * @name Phaser.GameObjects.Light#r\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.r = r;\r\n\r\n        /**\r\n         * The green color of the light. A value between 0 and 1.\r\n         *\r\n         * @name Phaser.GameObjects.Light#g\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.g = g;\r\n\r\n        /**\r\n         * The blue color of the light. A value between 0 and 1.\r\n         *\r\n         * @name Phaser.GameObjects.Light#b\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.b = b;\r\n\r\n        /**\r\n         * The intensity of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#intensity\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.intensity = intensity;\r\n\r\n        /**\r\n         * The horizontal scroll factor of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#scrollFactorX\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollFactorX = 1.0;\r\n\r\n        /**\r\n         * The vertical scroll factor of the light.\r\n         *\r\n         * @name Phaser.GameObjects.Light#scrollFactorY\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.scrollFactorY = 1.0;\r\n    },\r\n\r\n    /**\r\n     * Set the properties of the light.\r\n     *\r\n     * Sets both horizontal and vertical scroll factor to 1. Use {@link Phaser.GameObjects.Light#setScrollFactor} to set\r\n     * the scroll factor.\r\n     *\r\n     * @method Phaser.GameObjects.Light#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of the light.\r\n     * @param {number} y - The vertical position of the light.\r\n     * @param {number} radius - The radius of the light.\r\n     * @param {number} r - The red color. A value between 0 and 1.\r\n     * @param {number} g - The green color. A value between 0 and 1.\r\n     * @param {number} b - The blue color. A value between 0 and 1.\r\n     * @param {number} intensity - The intensity of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    set: function (x, y, radius, r, g, b, intensity)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        this.radius = radius;\r\n\r\n        this.r = r;\r\n        this.g = g;\r\n        this.b = b;\r\n\r\n        this.intensity = intensity;\r\n\r\n        this.scrollFactorX = 1;\r\n        this.scrollFactorY = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the scroll factor of the light.\r\n     *\r\n     * @method Phaser.GameObjects.Light#setScrollFactor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal scroll factor of the light.\r\n     * @param {number} y - The vertical scroll factor of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    setScrollFactor: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 1; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.scrollFactorX = x;\r\n        this.scrollFactorY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the color of the light from a single integer RGB value.\r\n     *\r\n     * @method Phaser.GameObjects.Light#setColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rgb - The integer RGB color of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    setColor: function (rgb)\r\n    {\r\n        var color = Utils.getFloatsFromUintRGB(rgb);\r\n\r\n        this.r = color[0];\r\n        this.g = color[1];\r\n        this.b = color[2];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the intensity of the light.\r\n     *\r\n     * @method Phaser.GameObjects.Light#setIntensity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} intensity - The intensity of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    setIntensity: function (intensity)\r\n    {\r\n        this.intensity = intensity;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the position of the light.\r\n     *\r\n     * @method Phaser.GameObjects.Light#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of the light.\r\n     * @param {number} y - The vertical position of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the radius of the light.\r\n     *\r\n     * @method Phaser.GameObjects.Light#setRadius\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} This Light object.\r\n     */\r\n    setRadius: function (radius)\r\n    {\r\n        this.radius = radius;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Light;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHQuanM/MjMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx1Q0FBdUM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSwrQ0FBK0M7QUFDakg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2xpZ2h0cy9MaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgMkQgcG9pbnQgbGlnaHQuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBhIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0sIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBhIHNjZW5lIHZpYSBgdGhpcy5saWdodHNgLlxyXG4gKlxyXG4gKiBBbnkgR2FtZSBPYmplY3RzIHVzaW5nIHRoZSBMaWdodDJEIHBpcGVsaW5lIHdpbGwgdGhlbiBiZSBhZmZlY3RlZCBieSB0aGVzZSBMaWdodHMuXHJcbiAqXHJcbiAqIFRoZXkgY2FuIGFsc28gc2ltcGx5IGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcG9pbnQgbGlnaHQgZm9yIHlvdXIgb3duIHB1cnBvc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGlnaHRcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29sb3Igb2YgdGhlIGxpZ2h0LiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVuc2l0eSAtIFRoZSBpbnRlbnNpdHkgb2YgdGhlIGxpZ2h0LlxyXG4gKi9cclxudmFyIExpZ2h0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0ICh4LCB5LCByYWRpdXMsIHIsIGcsIGIsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbGlnaHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNyYWRpdXNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVkIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yID0gcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdyZWVuIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nID0gZztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJsdWUgY29sb3Igb2YgdGhlIGxpZ2h0LiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNiXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmIgPSBiO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzY3JvbGxGYWN0b3JYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclggPSAxLjA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzY3JvbGxGYWN0b3JZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclkgPSAxLjA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBTZXRzIGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2Nyb2xsIGZhY3RvciB0byAxLiBVc2Uge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRTY3JvbGxGYWN0b3J9IHRvIHNldFxyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb2xvci4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb2xvci4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbG9yLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlbnNpdHkgLSBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMsIHIsIGcsIGIsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSByO1xyXG4gICAgICAgIHRoaXMuZyA9IGc7XHJcbiAgICAgICAgdGhpcy5iID0gYjtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IDE7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTY3JvbGxGYWN0b3I6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDE7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjb2xvciBvZiB0aGUgbGlnaHQgZnJvbSBhIHNpbmdsZSBpbnRlZ2VyIFJHQiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFRoZSBpbnRlZ2VyIFJHQiBjb2xvciBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGlzIExpZ2h0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3I6IGZ1bmN0aW9uIChyZ2IpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbG9yID0gVXRpbHMuZ2V0RmxvYXRzRnJvbVVpbnRSR0IocmdiKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gY29sb3JbMF07XHJcbiAgICAgICAgdGhpcy5nID0gY29sb3JbMV07XHJcbiAgICAgICAgdGhpcy5iID0gY29sb3JbMl07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRJbnRlbnNpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlbnNpdHkgLSBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRJbnRlbnNpdHk6IGZ1bmN0aW9uIChpbnRlbnNpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGxpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0I3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHJhZGl1cyBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjc2V0UmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGlzIExpZ2h0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmFkaXVzOiBmdW5jdGlvbiAocmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/Light.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/lights/LightsManager.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/lights/LightsManager.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Light = __webpack_require__(/*! ./Light */ \"./node_modules/phaser/src/gameobjects/lights/Light.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @callback LightForEach\r\n *\r\n * @param {Phaser.GameObjects.Light} light - The Light.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * Manages Lights for a Scene.\r\n *\r\n * Affects the rendering of Game Objects using the `Light2D` pipeline.\r\n *\r\n * @class LightsManager\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar LightsManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function LightsManager ()\r\n    {\r\n        /**\r\n         * The pool of Lights.\r\n         *\r\n         * Used to recycle removed Lights for a more efficient use of memory.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#lightPool\r\n         * @type {Phaser.GameObjects.Light[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.lightPool = [];\r\n\r\n        /**\r\n         * The Lights in the Scene.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#lights\r\n         * @type {Phaser.GameObjects.Light[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.lights = [];\r\n\r\n        /**\r\n         * Lights that have been culled from a Camera's viewport.\r\n         *\r\n         * Lights in this list will not be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#culledLights\r\n         * @type {Phaser.GameObjects.Light[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.culledLights = [];\r\n\r\n        /**\r\n         * The ambient color.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#ambientColor\r\n         * @type {{ r: number, g: number, b: number }}\r\n         * @since 3.0.0\r\n         */\r\n        this.ambientColor = { r: 0.1, g: 0.1, b: 0.1 };\r\n\r\n        /**\r\n         * Whether the Lights Manager is enabled.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#active\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.active = false;\r\n\r\n        /**\r\n         * The maximum number of lights that a single Camera and the lights shader can process.\r\n         * Change this via the `maxLights` property in your game config, as it cannot be changed at runtime.\r\n         *\r\n         * @name Phaser.GameObjects.LightsManager#maxLights\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.15.0\r\n         */\r\n        this.maxLights = -1;\r\n    },\r\n\r\n    /**\r\n     * Enable the Lights Manager.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#enable\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n     */\r\n    enable: function ()\r\n    {\r\n        if (this.maxLights === -1)\r\n        {\r\n            this.maxLights = this.scene.sys.game.renderer.config.maxLights;\r\n        }\r\n\r\n        this.active = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Disable the Lights Manager.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#disable\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n     */\r\n    disable: function ()\r\n    {\r\n        this.active = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Cull any Lights that aren't visible to the given Camera.\r\n     *\r\n     * Culling Lights improves performance by ensuring that only Lights within a Camera's viewport are rendered.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#cull\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to cull Lights for.\r\n     *\r\n     * @return {Phaser.GameObjects.Light[]} The culled Lights.\r\n     */\r\n    cull: function (camera)\r\n    {\r\n        var lights = this.lights;\r\n        var culledLights = this.culledLights;\r\n        var length = lights.length;\r\n        var cameraCenterX = camera.x + camera.width / 2.0;\r\n        var cameraCenterY = camera.y + camera.height / 2.0;\r\n        var cameraRadius = (camera.width + camera.height) / 2.0;\r\n        var point = { x: 0, y: 0 };\r\n        var cameraMatrix = camera.matrix;\r\n        var viewportHeight = this.systems.game.config.height;\r\n\r\n        culledLights.length = 0;\r\n\r\n        for (var index = 0; index < length && culledLights.length < this.maxLights; index++)\r\n        {\r\n            var light = lights[index];\r\n\r\n            cameraMatrix.transformPoint(light.x, light.y, point);\r\n\r\n            //  We'll just use bounding spheres to test if lights should be rendered\r\n            var dx = cameraCenterX - (point.x - (camera.scrollX * light.scrollFactorX * camera.zoom));\r\n            var dy = cameraCenterY - (viewportHeight - (point.y - (camera.scrollY * light.scrollFactorY) * camera.zoom));\r\n            var distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n            if (distance < light.radius + cameraRadius)\r\n            {\r\n                culledLights.push(lights[index]);\r\n            }\r\n        }\r\n\r\n        return culledLights;\r\n    },\r\n\r\n    /**\r\n     * Iterate over each Light with a callback.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#forEachLight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {LightForEach} callback - The callback that is called with each Light.\r\n     *\r\n     * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n     */\r\n    forEachLight: function (callback)\r\n    {\r\n        if (!callback)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var lights = this.lights;\r\n        var length = lights.length;\r\n\r\n        for (var index = 0; index < length; ++index)\r\n        {\r\n            callback(lights[index]);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the ambient light color.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#setAmbientColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rgb - The integer RGB color of the ambient light.\r\n     *\r\n     * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n     */\r\n    setAmbientColor: function (rgb)\r\n    {\r\n        var color = Utils.getFloatsFromUintRGB(rgb);\r\n\r\n        this.ambientColor.r = color[0];\r\n        this.ambientColor.g = color[1];\r\n        this.ambientColor.b = color[2];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the maximum number of Lights allowed to appear at once.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#getMaxVisibleLights\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The maximum number of Lights allowed to appear at once.\r\n     */\r\n    getMaxVisibleLights: function ()\r\n    {\r\n        return 10;\r\n    },\r\n\r\n    /**\r\n     * Get the number of Lights managed by this Lights Manager.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#getLightCount\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of Lights managed by this Lights Manager.\r\n     */\r\n    getLightCount: function ()\r\n    {\r\n        return this.lights.length;\r\n    },\r\n\r\n    /**\r\n     * Add a Light.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#addLight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal position of the Light.\r\n     * @param {number} [y=0] - The vertical position of the Light.\r\n     * @param {number} [radius=100] - The radius of the Light.\r\n     * @param {number} [rgb=0xffffff] - The integer RGB color of the light.\r\n     * @param {number} [intensity=1] - The intensity of the Light.\r\n     *\r\n     * @return {Phaser.GameObjects.Light} The Light that was added.\r\n     */\r\n    addLight: function (x, y, radius, rgb, intensity)\r\n    {\r\n        var color = null;\r\n        var light = null;\r\n\r\n        x = (x === undefined) ? 0.0 : x;\r\n        y = (y === undefined) ? 0.0 : y;\r\n        rgb = (rgb === undefined) ? 0xffffff : rgb;\r\n        radius = (radius === undefined) ? 100.0 : radius;\r\n        intensity = (intensity === undefined) ? 1.0 : intensity;\r\n\r\n        color = Utils.getFloatsFromUintRGB(rgb);\r\n        light = null;\r\n\r\n        if (this.lightPool.length > 0)\r\n        {\r\n            light = this.lightPool.pop();\r\n            light.set(x, y, radius, color[0], color[1], color[2], intensity);\r\n        }\r\n        else\r\n        {\r\n            light = new Light(x, y, radius, color[0], color[1], color[2], intensity);\r\n        }\r\n\r\n        this.lights.push(light);\r\n\r\n        return light;\r\n    },\r\n\r\n    /**\r\n     * Remove a Light.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#removeLight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Light} light - The Light to remove.\r\n     *\r\n     * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n     */\r\n    removeLight: function (light)\r\n    {\r\n        var index = this.lights.indexOf(light);\r\n\r\n        if (index >= 0)\r\n        {\r\n            this.lightPool.push(light);\r\n            this.lights.splice(index, 1);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shut down the Lights Manager.\r\n     *\r\n     * Recycles all active Lights into the Light pool, resets ambient light color and clears the lists of Lights and\r\n     * culled Lights.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        while (this.lights.length > 0)\r\n        {\r\n            this.lightPool.push(this.lights.pop());\r\n        }\r\n\r\n        this.ambientColor = { r: 0.1, g: 0.1, b: 0.1 };\r\n        this.culledLights.length = 0;\r\n        this.lights.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Destroy the Lights Manager.\r\n     *\r\n     * Cleans up all references by calling {@link Phaser.GameObjects.LightsManager#shutdown}.\r\n     *\r\n     * @method Phaser.GameObjects.LightsManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = LightsManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHRzTWFuYWdlci5qcz8zNWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxzRUFBUztBQUM3QixZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIsd0RBQXdEO0FBQ25GO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxnREFBZ0Q7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbGlnaHRzL0xpZ2h0c01hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBMaWdodCA9IHJlcXVpcmUoJy4vTGlnaHQnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgTGlnaHRGb3JFYWNoXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBsaWdodCAtIFRoZSBMaWdodC5cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBNYW5hZ2VzIExpZ2h0cyBmb3IgYSBTY2VuZS5cclxuICpcclxuICogQWZmZWN0cyB0aGUgcmVuZGVyaW5nIG9mIEdhbWUgT2JqZWN0cyB1c2luZyB0aGUgYExpZ2h0MkRgIHBpcGVsaW5lLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGlnaHRzTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBMaWdodHNNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0c01hbmFnZXIgKClcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9vbCBvZiBMaWdodHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBVc2VkIHRvIHJlY3ljbGUgcmVtb3ZlZCBMaWdodHMgZm9yIGEgbW9yZSBlZmZpY2llbnQgdXNlIG9mIG1lbW9yeS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2xpZ2h0UG9vbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlnaHRQb29sID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBMaWdodHMgaW4gdGhlIFNjZW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjbGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHRzIHRoYXQgaGF2ZSBiZWVuIGN1bGxlZCBmcm9tIGEgQ2FtZXJhJ3Mgdmlld3BvcnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBMaWdodHMgaW4gdGhpcyBsaXN0IHdpbGwgbm90IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjY3VsbGVkTGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdWxsZWRMaWdodHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFtYmllbnQgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNhbWJpZW50Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7eyByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyIH19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbWJpZW50Q29sb3IgPSB7IHI6IDAuMSwgZzogMC4xLCBiOiAwLjEgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgTGlnaHRzIE1hbmFnZXIgaXMgZW5hYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2FjdGl2ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpZ2h0cyB0aGF0IGEgc2luZ2xlIENhbWVyYSBhbmQgdGhlIGxpZ2h0cyBzaGFkZXIgY2FuIHByb2Nlc3MuXHJcbiAgICAgICAgICogQ2hhbmdlIHRoaXMgdmlhIHRoZSBgbWF4TGlnaHRzYCBwcm9wZXJ0eSBpbiB5b3VyIGdhbWUgY29uZmlnLCBhcyBpdCBjYW5ub3QgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjbWF4TGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4TGlnaHRzID0gLTE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIHRoZSBMaWdodHMgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2VuYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJ9IFRoaXMgTGlnaHRzIE1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBlbmFibGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGlnaHRzID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF4TGlnaHRzID0gdGhpcy5zY2VuZS5zeXMuZ2FtZS5yZW5kZXJlci5jb25maWcubWF4TGlnaHRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNhYmxlIHRoZSBMaWdodHMgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2Rpc2FibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyfSBUaGlzIExpZ2h0cyBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdWxsIGFueSBMaWdodHMgdGhhdCBhcmVuJ3QgdmlzaWJsZSB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEN1bGxpbmcgTGlnaHRzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IGVuc3VyaW5nIHRoYXQgb25seSBMaWdodHMgd2l0aGluIGEgQ2FtZXJhJ3Mgdmlld3BvcnQgYXJlIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjY3VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBjdWxsIExpZ2h0cyBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0W119IFRoZSBjdWxsZWQgTGlnaHRzLlxyXG4gICAgICovXHJcbiAgICBjdWxsOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICB2YXIgY3VsbGVkTGlnaHRzID0gdGhpcy5jdWxsZWRMaWdodHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGNhbWVyYUNlbnRlclggPSBjYW1lcmEueCArIGNhbWVyYS53aWR0aCAvIDIuMDtcclxuICAgICAgICB2YXIgY2FtZXJhQ2VudGVyWSA9IGNhbWVyYS55ICsgY2FtZXJhLmhlaWdodCAvIDIuMDtcclxuICAgICAgICB2YXIgY2FtZXJhUmFkaXVzID0gKGNhbWVyYS53aWR0aCArIGNhbWVyYS5oZWlnaHQpIC8gMi4wO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgIHZhciBjYW1lcmFNYXRyaXggPSBjYW1lcmEubWF0cml4O1xyXG4gICAgICAgIHZhciB2aWV3cG9ydEhlaWdodCA9IHRoaXMuc3lzdGVtcy5nYW1lLmNvbmZpZy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGN1bGxlZExpZ2h0cy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoICYmIGN1bGxlZExpZ2h0cy5sZW5ndGggPCB0aGlzLm1heExpZ2h0czsgaW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IGxpZ2h0c1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBjYW1lcmFNYXRyaXgudHJhbnNmb3JtUG9pbnQobGlnaHQueCwgbGlnaHQueSwgcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIFdlJ2xsIGp1c3QgdXNlIGJvdW5kaW5nIHNwaGVyZXMgdG8gdGVzdCBpZiBsaWdodHMgc2hvdWxkIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgIHZhciBkeCA9IGNhbWVyYUNlbnRlclggLSAocG9pbnQueCAtIChjYW1lcmEuc2Nyb2xsWCAqIGxpZ2h0LnNjcm9sbEZhY3RvclggKiBjYW1lcmEuem9vbSkpO1xyXG4gICAgICAgICAgICB2YXIgZHkgPSBjYW1lcmFDZW50ZXJZIC0gKHZpZXdwb3J0SGVpZ2h0IC0gKHBvaW50LnkgLSAoY2FtZXJhLnNjcm9sbFkgKiBsaWdodC5zY3JvbGxGYWN0b3JZKSAqIGNhbWVyYS56b29tKSk7XHJcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBsaWdodC5yYWRpdXMgKyBjYW1lcmFSYWRpdXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1bGxlZExpZ2h0cy5wdXNoKGxpZ2h0c1tpbmRleF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VsbGVkTGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0ZXJhdGUgb3ZlciBlYWNoIExpZ2h0IHdpdGggYSBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2ZvckVhY2hMaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtMaWdodEZvckVhY2h9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0gVGhpcyBMaWdodHMgTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZvckVhY2hMaWdodDogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpZ2h0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhsaWdodHNbaW5kZXhdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYW1iaWVudCBsaWdodCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3NldEFtYmllbnRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFRoZSBpbnRlZ2VyIFJHQiBjb2xvciBvZiB0aGUgYW1iaWVudCBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0gVGhpcyBMaWdodHMgTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFtYmllbnRDb2xvcjogZnVuY3Rpb24gKHJnYilcclxuICAgIHtcclxuICAgICAgICB2YXIgY29sb3IgPSBVdGlscy5nZXRGbG9hdHNGcm9tVWludFJHQihyZ2IpO1xyXG5cclxuICAgICAgICB0aGlzLmFtYmllbnRDb2xvci5yID0gY29sb3JbMF07XHJcbiAgICAgICAgdGhpcy5hbWJpZW50Q29sb3IuZyA9IGNvbG9yWzFdO1xyXG4gICAgICAgIHRoaXMuYW1iaWVudENvbG9yLmIgPSBjb2xvclsyXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgTGlnaHRzIGFsbG93ZWQgdG8gYXBwZWFyIGF0IG9uY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNnZXRNYXhWaXNpYmxlTGlnaHRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgTGlnaHRzIGFsbG93ZWQgdG8gYXBwZWFyIGF0IG9uY2UuXHJcbiAgICAgKi9cclxuICAgIGdldE1heFZpc2libGVMaWdodHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIExpZ2h0cyBtYW5hZ2VkIGJ5IHRoaXMgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNnZXRMaWdodENvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIExpZ2h0cyBtYW5hZ2VkIGJ5IHRoaXMgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGdldExpZ2h0Q291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzLmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2FkZExpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgTGlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIExpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MTAwXSAtIFRoZSByYWRpdXMgb2YgdGhlIExpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyZ2I9MHhmZmZmZmZdIC0gVGhlIGludGVnZXIgUkdCIGNvbG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIC0gVGhlIGludGVuc2l0eSBvZiB0aGUgTGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGUgTGlnaHQgdGhhdCB3YXMgYWRkZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZExpZ2h0OiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCByZ2IsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY29sb3IgPSBudWxsO1xyXG4gICAgICAgIHZhciBsaWdodCA9IG51bGw7XHJcblxyXG4gICAgICAgIHggPSAoeCA9PT0gdW5kZWZpbmVkKSA/IDAuMCA6IHg7XHJcbiAgICAgICAgeSA9ICh5ID09PSB1bmRlZmluZWQpID8gMC4wIDogeTtcclxuICAgICAgICByZ2IgPSAocmdiID09PSB1bmRlZmluZWQpID8gMHhmZmZmZmYgOiByZ2I7XHJcbiAgICAgICAgcmFkaXVzID0gKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSA/IDEwMC4wIDogcmFkaXVzO1xyXG4gICAgICAgIGludGVuc2l0eSA9IChpbnRlbnNpdHkgPT09IHVuZGVmaW5lZCkgPyAxLjAgOiBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIGNvbG9yID0gVXRpbHMuZ2V0RmxvYXRzRnJvbVVpbnRSR0IocmdiKTtcclxuICAgICAgICBsaWdodCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxpZ2h0UG9vbC5sZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGlnaHQgPSB0aGlzLmxpZ2h0UG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgbGlnaHQuc2V0KHgsIHksIHJhZGl1cywgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgaW50ZW5zaXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGlnaHQgPSBuZXcgTGlnaHQoeCwgeSwgcmFkaXVzLCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBpbnRlbnNpdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saWdodHMucHVzaChsaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3JlbW92ZUxpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodH0gbGlnaHQgLSBUaGUgTGlnaHQgdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyfSBUaGlzIExpZ2h0cyBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTGlnaHQ6IGZ1bmN0aW9uIChsaWdodClcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKGxpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0UG9vbC5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNodXQgZG93biB0aGUgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogUmVjeWNsZXMgYWxsIGFjdGl2ZSBMaWdodHMgaW50byB0aGUgTGlnaHQgcG9vbCwgcmVzZXRzIGFtYmllbnQgbGlnaHQgY29sb3IgYW5kIGNsZWFycyB0aGUgbGlzdHMgb2YgTGlnaHRzIGFuZFxyXG4gICAgICogY3VsbGVkIExpZ2h0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMubGlnaHRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0UG9vbC5wdXNoKHRoaXMubGlnaHRzLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYW1iaWVudENvbG9yID0geyByOiAwLjEsIGc6IDAuMSwgYjogMC4xIH07XHJcbiAgICAgICAgdGhpcy5jdWxsZWRMaWdodHMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmxpZ2h0cy5sZW5ndGggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhlIExpZ2h0cyBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIENsZWFucyB1cCBhbGwgcmVmZXJlbmNlcyBieSBjYWxsaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNzaHV0ZG93bn0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGlnaHRzTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/LightsManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar LightsManager = __webpack_require__(/*! ./LightsManager */ \"./node_modules/phaser/src/gameobjects/lights/LightsManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Scene plugin that provides a {@link Phaser.GameObjects.LightsManager} for the Light2D pipeline.\r\n *\r\n * Available from within a Scene via `this.lights`.\r\n *\r\n * Add Lights using the {@link Phaser.GameObjects.LightsManager#addLight} method:\r\n *\r\n * ```javascript\r\n * // Enable the Lights Manager because it is disabled by default\r\n * this.lights.enable();\r\n *\r\n * // Create a Light at [400, 300] with a radius of 200\r\n * this.lights.addLight(400, 300, 200);\r\n * ```\r\n *\r\n * For Game Objects to be affected by the Lights when rendered, you will need to set them to use the `Light2D` pipeline like so:\r\n *\r\n * ```javascript\r\n * sprite.setPipeline('Light2D');\r\n * ```\r\n *\r\n * @class LightsPlugin\r\n * @extends Phaser.GameObjects.LightsManager\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this Lights Plugin belongs to.\r\n */\r\nvar LightsPlugin = new Class({\r\n\r\n    Extends: LightsManager,\r\n\r\n    initialize:\r\n\r\n    function LightsPlugin (scene)\r\n    {\r\n        /**\r\n         * A reference to the Scene that this Lights Plugin belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.LightsPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene's systems.\r\n         *\r\n         * @name Phaser.GameObjects.LightsPlugin#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        if (!scene.sys.settings.isBooted)\r\n        {\r\n            scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        }\r\n\r\n        LightsManager.call(this);\r\n    },\r\n\r\n    /**\r\n     * Boot the Lights Plugin.\r\n     *\r\n     * @method Phaser.GameObjects.LightsPlugin#boot\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n        eventEmitter.on(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Destroy the Lights Plugin.\r\n     *\r\n     * Cleans up all references.\r\n     *\r\n     * @method Phaser.GameObjects.LightsPlugin#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene = undefined;\r\n        this.systems = undefined;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('LightsPlugin', LightsPlugin, 'lights');\r\n\r\nmodule.exports = LightsPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHRzUGx1Z2luLmpzP2ZkNTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWlCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7O0FBRTlDO0FBQ0E7QUFDQSxtQ0FBbUMsdUNBQXVDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnREFBZ0Q7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbGlnaHRzL0xpZ2h0c1BsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIExpZ2h0c01hbmFnZXIgPSByZXF1aXJlKCcuL0xpZ2h0c01hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9zY2VuZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgU2NlbmUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJ9IGZvciB0aGUgTGlnaHQyRCBwaXBlbGluZS5cclxuICpcclxuICogQXZhaWxhYmxlIGZyb20gd2l0aGluIGEgU2NlbmUgdmlhIGB0aGlzLmxpZ2h0c2AuXHJcbiAqXHJcbiAqIEFkZCBMaWdodHMgdXNpbmcgdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNhZGRMaWdodH0gbWV0aG9kOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIC8vIEVuYWJsZSB0aGUgTGlnaHRzIE1hbmFnZXIgYmVjYXVzZSBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0XHJcbiAqIHRoaXMubGlnaHRzLmVuYWJsZSgpO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBMaWdodCBhdCBbNDAwLCAzMDBdIHdpdGggYSByYWRpdXMgb2YgMjAwXHJcbiAqIHRoaXMubGlnaHRzLmFkZExpZ2h0KDQwMCwgMzAwLCAyMDApO1xyXG4gKiBgYGBcclxuICpcclxuICogRm9yIEdhbWUgT2JqZWN0cyB0byBiZSBhZmZlY3RlZCBieSB0aGUgTGlnaHRzIHdoZW4gcmVuZGVyZWQsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZW0gdG8gdXNlIHRoZSBgTGlnaHQyRGAgcGlwZWxpbmUgbGlrZSBzbzpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBzcHJpdGUuc2V0UGlwZWxpbmUoJ0xpZ2h0MkQnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBjbGFzcyBMaWdodHNQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0aGF0IHRoaXMgTGlnaHRzIFBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIExpZ2h0c1BsdWdpbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogTGlnaHRzTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0c1BsdWdpbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBMaWdodHMgUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSdzIHN5c3RlbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgaWYgKCFzY2VuZS5zeXMuc2V0dGluZ3MuaXNCb290ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExpZ2h0c01hbmFnZXIuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb290IHRoZSBMaWdodHMgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c1BsdWdpbiNib290XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoZSBMaWdodHMgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIENsZWFucyB1cCBhbGwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0xpZ2h0c1BsdWdpbicsIExpZ2h0c1BsdWdpbiwgJ2xpZ2h0cycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaWdodHNQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/Mesh.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/Mesh.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar MeshRender = __webpack_require__(/*! ./MeshRender */ \"./node_modules/phaser/src/gameobjects/mesh/MeshRender.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Mesh Game Object.\r\n *\r\n * @class Mesh\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number[]} vertices - An array containing the vertices data for this Mesh.\r\n * @param {number[]} uv - An array containing the uv data for this Mesh.\r\n * @param {number[]} colors - An array containing the color data for this Mesh.\r\n * @param {number[]} alphas - An array containing the alpha data for this Mesh.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Mesh = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Pipeline,\r\n        Components.Size,\r\n        Components.Texture,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Components.ScrollFactor,\r\n        MeshRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Mesh (scene, x, y, vertices, uv, colors, alphas, texture, frame)\r\n    {\r\n        GameObject.call(this, scene, 'Mesh');\r\n\r\n        if (vertices.length !== uv.length)\r\n        {\r\n            throw new Error('Mesh Vertex count must match UV count');\r\n        }\r\n\r\n        var verticesUB = (vertices.length / 2) | 0;\r\n\r\n        if (colors.length > 0 && colors.length < verticesUB)\r\n        {\r\n            throw new Error('Mesh Color count must match Vertex count');\r\n        }\r\n\r\n        if (alphas.length > 0 && alphas.length < verticesUB)\r\n        {\r\n            throw new Error('Mesh Alpha count must match Vertex count');\r\n        }\r\n\r\n        var i;\r\n\r\n        if (colors.length === 0)\r\n        {\r\n            for (i = 0; i < verticesUB; ++i)\r\n            {\r\n                colors[i] = 0xFFFFFF;\r\n            }\r\n        }\r\n\r\n        if (alphas.length === 0)\r\n        {\r\n            for (i = 0; i < verticesUB; ++i)\r\n            {\r\n                alphas[i] = 1.0;\r\n            }\r\n        }\r\n\r\n        /**\r\n         * An array containing the vertices data for this Mesh.\r\n         *\r\n         * @name Phaser.GameObjects.Mesh#vertices\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertices = new Float32Array(vertices);\r\n\r\n        /**\r\n         * An array containing the uv data for this Mesh.\r\n         *\r\n         * @name Phaser.GameObjects.Mesh#uv\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.uv = new Float32Array(uv);\r\n\r\n        /**\r\n         * An array containing the color data for this Mesh.\r\n         *\r\n         * @name Phaser.GameObjects.Mesh#colors\r\n         * @type {Uint32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.colors = new Uint32Array(colors);\r\n\r\n        /**\r\n         * An array containing the alpha data for this Mesh.\r\n         *\r\n         * @name Phaser.GameObjects.Mesh#alphas\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.alphas = new Float32Array(alphas);\r\n\r\n        /**\r\n         * Fill or additive mode used when blending the color values?\r\n         * \r\n         * @name Phaser.GameObjects.Mesh#tintFill\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.11.0\r\n         */\r\n        this.tintFill = false;\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setPosition(x, y);\r\n        this.setSizeToFrame();\r\n        this.initPipeline();\r\n    },\r\n\r\n    /**\r\n     * This method is left intentionally empty and does not do anything.\r\n     * It is retained to allow a Mesh or Quad to be added to a Container.\r\n     * \r\n     * @method Phaser.GameObjects.Mesh#setAlpha\r\n     * @since 3.17.0\r\n     */\r\n    setAlpha: NOOP\r\n\r\n});\r\n\r\nmodule.exports = Mesh;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2guanM/OTYzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyw4RUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsaUVBQWtCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIE1lc2hSZW5kZXIgPSByZXF1aXJlKCcuL01lc2hSZW5kZXInKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIE1lc2ggR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBNZXNoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSB2ZXJ0aWNlcyAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZlcnRpY2VzIGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gdXYgLSBBbiBhcnJheSBjb250YWluaW5nIHRoZSB1diBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IGNvbG9ycyAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gYWxwaGFzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYWxwaGEgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBNZXNoID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgTWVzaFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1lc2ggKHNjZW5lLCB4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdNZXNoJyk7XHJcblxyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggIT09IHV2Lmxlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzaCBWZXJ0ZXggY291bnQgbXVzdCBtYXRjaCBVViBjb3VudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRpY2VzVUIgPSAodmVydGljZXMubGVuZ3RoIC8gMikgfCAwO1xyXG5cclxuICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA+IDAgJiYgY29sb3JzLmxlbmd0aCA8IHZlcnRpY2VzVUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lc2ggQ29sb3IgY291bnQgbXVzdCBtYXRjaCBWZXJ0ZXggY291bnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbHBoYXMubGVuZ3RoID4gMCAmJiBhbHBoYXMubGVuZ3RoIDwgdmVydGljZXNVQilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzaCBBbHBoYSBjb3VudCBtdXN0IG1hdGNoIFZlcnRleCBjb3VudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGk7XHJcblxyXG4gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRpY2VzVUI7ICsraSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29sb3JzW2ldID0gMHhGRkZGRkY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbHBoYXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRpY2VzVUI7ICsraSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWxwaGFzW2ldID0gMS4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB2ZXJ0aWNlcyBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCN2ZXJ0aWNlc1xyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB1diBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCN1dlxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51diA9IG5ldyBGbG9hdDMyQXJyYXkodXYpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCNjb2xvcnNcclxuICAgICAgICAgKiBAdHlwZSB7VWludDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkoY29sb3JzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYWxwaGEgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLk1lc2gjYWxwaGFzXHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhcyA9IG5ldyBGbG9hdDMyQXJyYXkoYWxwaGFzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsbCBvciBhZGRpdGl2ZSBtb2RlIHVzZWQgd2hlbiBibGVuZGluZyB0aGUgY29sb3IgdmFsdWVzP1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3RpbnRGaWxsXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW50RmlsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGVmdCBpbnRlbnRpb25hbGx5IGVtcHR5IGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZy5cclxuICAgICAqIEl0IGlzIHJldGFpbmVkIHRvIGFsbG93IGEgTWVzaCBvciBRdWFkIHRvIGJlIGFkZGVkIHRvIGEgQ29udGFpbmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBOT09QXHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/Mesh.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This is a stub function for Mesh.Render. There is no Canvas renderer for Mesh objects.\r\n *\r\n * @method Phaser.GameObjects.Mesh#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Mesh} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar MeshCanvasRenderer = function ()\r\n{\r\n};\r\n\r\nmodule.exports = MeshCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hDYW52YXNSZW5kZXJlci5qcz83N2YxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL21lc2gvTWVzaENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhpcyBpcyBhIHN0dWIgZnVuY3Rpb24gZm9yIE1lc2guUmVuZGVyLiBUaGVyZSBpcyBubyBDYW52YXMgcmVuZGVyZXIgZm9yIE1lc2ggb2JqZWN0cy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5NZXNofSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgTWVzaENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKClcclxue1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXNoQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Mesh = __webpack_require__(/*! ./Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n\r\n/**\r\n * Creates a new Mesh Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Mesh Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#mesh\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Mesh} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('mesh', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n    var vertices = GetValue(config, 'vertices', []);\r\n    var colors = GetValue(config, 'colors', []);\r\n    var alphas = GetValue(config, 'alphas', []);\r\n    var uv = GetValue(config, 'uv', []);\r\n\r\n    var mesh = new Mesh(this.scene, 0, 0, vertices, uv, colors, alphas, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, mesh, config);\r\n\r\n    return mesh;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hDcmVhdG9yLmpzP2ExZGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsV0FBVyxtQkFBTyxDQUFDLGtFQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbWVzaC9NZXNoQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgTWVzaCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTWVzaCBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI21lc2hcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLk1lc2h9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ21lc2gnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuICAgIHZhciB2ZXJ0aWNlcyA9IEdldFZhbHVlKGNvbmZpZywgJ3ZlcnRpY2VzJywgW10pO1xyXG4gICAgdmFyIGNvbG9ycyA9IEdldFZhbHVlKGNvbmZpZywgJ2NvbG9ycycsIFtdKTtcclxuICAgIHZhciBhbHBoYXMgPSBHZXRWYWx1ZShjb25maWcsICdhbHBoYXMnLCBbXSk7XHJcbiAgICB2YXIgdXYgPSBHZXRWYWx1ZShjb25maWcsICd1dicsIFtdKTtcclxuXHJcbiAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHRoaXMuc2NlbmUsIDAsIDAsIHZlcnRpY2VzLCB1diwgY29sb3JzLCBhbHBoYXMsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIG1lc2gsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Mesh = __webpack_require__(/*! ./Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Mesh Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Mesh Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#mesh\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number[]} vertices - An array containing the vertices data for this Mesh.\r\n * @param {number[]} uv - An array containing the uv data for this Mesh.\r\n * @param {number[]} colors - An array containing the color data for this Mesh.\r\n * @param {number[]} alphas - An array containing the alpha data for this Mesh.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Mesh} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n    GameObjectFactory.register('mesh', function (x, y, vertices, uv, colors, alphas, texture, frame)\r\n    {\r\n        return this.displayList.add(new Mesh(this.scene, x, y, vertices, uv, colors, alphas, texture, frame));\r\n    });\r\n}\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hGYWN0b3J5LmpzPzE3ZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0EsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL21lc2gvTWVzaEZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBNZXNoIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTWVzaCBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I21lc2hcclxuICogQHdlYmdsT25seVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IHZlcnRpY2VzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmVydGljZXMgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSB1diAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHV2IGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gY29sb3JzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBhbHBoYXMgLSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBhbHBoYSBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTWVzaH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignbWVzaCcsIGZ1bmN0aW9uICh4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IE1lc2godGhpcy5zY2VuZSwgeCwgeSwgdmVydGljZXMsIHV2LCBjb2xvcnMsIGFscGhhcywgdGV4dHVyZSwgZnJhbWUpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshRender.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/MeshRender.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./MeshWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./MeshCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hSZW5kZXIuanM/MWYyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDRGQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsOEZBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9NZXNoV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9NZXNoQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Mesh#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Mesh} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar MeshWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    renderer.setPipeline(pipeline, src);\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var spriteMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        spriteMatrix.e = src.x;\r\n        spriteMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(spriteMatrix, calcMatrix);\r\n    }\r\n\r\n    var frame = src.frame;\r\n    var texture = frame.glTexture;\r\n\r\n    var vertices = src.vertices;\r\n    var uvs = src.uv;\r\n    var colors = src.colors;\r\n    var alphas = src.alphas;\r\n\r\n    var meshVerticesLength = vertices.length;\r\n    var vertexCount = Math.floor(meshVerticesLength * 0.5);\r\n\r\n    if (pipeline.vertexCount + vertexCount > pipeline.vertexCapacity)\r\n    {\r\n        pipeline.flush();\r\n    }\r\n\r\n    pipeline.setTexture2D(texture, 0);\r\n\r\n    var vertexViewF32 = pipeline.vertexViewF32;\r\n    var vertexViewU32 = pipeline.vertexViewU32;\r\n\r\n    var vertexOffset = (pipeline.vertexCount * pipeline.vertexComponentCount) - 1;\r\n\r\n    var colorIndex = 0;\r\n    var tintEffect = src.tintFill;\r\n\r\n    for (var i = 0; i < meshVerticesLength; i += 2)\r\n    {\r\n        var x = vertices[i + 0];\r\n        var y = vertices[i + 1];\r\n\r\n        var tx = x * calcMatrix.a + y * calcMatrix.c + calcMatrix.e;\r\n        var ty = x * calcMatrix.b + y * calcMatrix.d + calcMatrix.f;\r\n\r\n        if (camera.roundPixels)\r\n        {\r\n            tx = Math.round(tx);\r\n            ty = Math.round(ty);\r\n        }\r\n\r\n        vertexViewF32[++vertexOffset] = tx;\r\n        vertexViewF32[++vertexOffset] = ty;\r\n        vertexViewF32[++vertexOffset] = uvs[i + 0];\r\n        vertexViewF32[++vertexOffset] = uvs[i + 1];\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = Utils.getTintAppendFloatAlpha(colors[colorIndex], camera.alpha * alphas[colorIndex]);\r\n\r\n        colorIndex++;\r\n    }\r\n\r\n    pipeline.vertexCount += vertexCount;\r\n};\r\n\r\nmodule.exports = MeshWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hXZWJHTFJlbmRlcmVyLmpzP2VkOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbWVzaC9NZXNoV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuTWVzaH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIE1lc2hXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSwgc3JjKTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNwcml0ZU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgIHNwcml0ZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYW1lID0gc3JjLmZyYW1lO1xyXG4gICAgdmFyIHRleHR1cmUgPSBmcmFtZS5nbFRleHR1cmU7XHJcblxyXG4gICAgdmFyIHZlcnRpY2VzID0gc3JjLnZlcnRpY2VzO1xyXG4gICAgdmFyIHV2cyA9IHNyYy51djtcclxuICAgIHZhciBjb2xvcnMgPSBzcmMuY29sb3JzO1xyXG4gICAgdmFyIGFscGhhcyA9IHNyYy5hbHBoYXM7XHJcblxyXG4gICAgdmFyIG1lc2hWZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgIHZhciB2ZXJ0ZXhDb3VudCA9IE1hdGguZmxvb3IobWVzaFZlcnRpY2VzTGVuZ3RoICogMC41KTtcclxuXHJcbiAgICBpZiAocGlwZWxpbmUudmVydGV4Q291bnQgKyB2ZXJ0ZXhDb3VudCA+IHBpcGVsaW5lLnZlcnRleENhcGFjaXR5KVxyXG4gICAge1xyXG4gICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xyXG5cclxuICAgIHZhciB2ZXJ0ZXhWaWV3RjMyID0gcGlwZWxpbmUudmVydGV4Vmlld0YzMjtcclxuICAgIHZhciB2ZXJ0ZXhWaWV3VTMyID0gcGlwZWxpbmUudmVydGV4Vmlld1UzMjtcclxuXHJcbiAgICB2YXIgdmVydGV4T2Zmc2V0ID0gKHBpcGVsaW5lLnZlcnRleENvdW50ICogcGlwZWxpbmUudmVydGV4Q29tcG9uZW50Q291bnQpIC0gMTtcclxuXHJcbiAgICB2YXIgY29sb3JJbmRleCA9IDA7XHJcbiAgICB2YXIgdGludEVmZmVjdCA9IHNyYy50aW50RmlsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc2hWZXJ0aWNlc0xlbmd0aDsgaSArPSAyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdmVydGljZXNbaSArIDBdO1xyXG4gICAgICAgIHZhciB5ID0gdmVydGljZXNbaSArIDFdO1xyXG5cclxuICAgICAgICB2YXIgdHggPSB4ICogY2FsY01hdHJpeC5hICsgeSAqIGNhbGNNYXRyaXguYyArIGNhbGNNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkgPSB4ICogY2FsY01hdHJpeC5iICsgeSAqIGNhbGNNYXRyaXguZCArIGNhbGNNYXRyaXguZjtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYS5yb3VuZFBpeGVscylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR4ID0gTWF0aC5yb3VuZCh0eCk7XHJcbiAgICAgICAgICAgIHR5ID0gTWF0aC5yb3VuZCh0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHR4O1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdHk7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB1dnNbaSArIDBdO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdXZzW2kgKyAxXTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRFZmZlY3Q7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZlcnRleE9mZnNldF0gPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShjb2xvcnNbY29sb3JJbmRleF0sIGNhbWVyYS5hbHBoYSAqIGFscGhhc1tjb2xvckluZGV4XSk7XHJcblxyXG4gICAgICAgIGNvbG9ySW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBwaXBlbGluZS52ZXJ0ZXhDb3VudCArPSB2ZXJ0ZXhDb3VudDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVzaFdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/EmitterOp.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/EmitterOp.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FloatBetween = __webpack_require__(/*! ../../math/FloatBetween */ \"./node_modules/phaser/src/math/FloatBetween.js\");\r\nvar GetEaseFunction = __webpack_require__(/*! ../../tweens/builders/GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle Emitter property.\r\n *\r\n * Facilitates changing Particle properties as they are emitted and throughout their lifetime.\r\n *\r\n * @class EmitterOp\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for the Particle Emitter that owns this property.\r\n * @param {string} key - The name of the property.\r\n * @param {number} defaultValue - The default value of the property.\r\n * @param {boolean} [emitOnly=false] - Whether the property can only be modified when a Particle is emitted.\r\n */\r\nvar EmitterOp = new Class({\r\n\r\n    initialize:\r\n\r\n    function EmitterOp (config, key, defaultValue, emitOnly)\r\n    {\r\n        if (emitOnly === undefined)\r\n        {\r\n            emitOnly = false;\r\n        }\r\n\r\n        /**\r\n         * The name of this property.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#propertyKey\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.propertyKey = key;\r\n\r\n        /**\r\n         * The value of this property.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#propertyValue\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.propertyValue = defaultValue;\r\n\r\n        /**\r\n         * The default value of this property.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#defaultValue\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultValue = defaultValue;\r\n\r\n        /**\r\n         * The number of steps for stepped easing between {@link Phaser.GameObjects.Particles.EmitterOp#start} and\r\n         * {@link Phaser.GameObjects.Particles.EmitterOp#end} values, per emit.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#steps\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.steps = 0;\r\n\r\n        /**\r\n         * The step counter for stepped easing, per emit.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#counter\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.counter = 0;\r\n\r\n        /**\r\n         * The start value for this property to ease between.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#start\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.start = 0;\r\n\r\n        /**\r\n         * The end value for this property to ease between.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#end\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.end = 0;\r\n\r\n        /**\r\n         * The easing function to use for updating this property.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#ease\r\n         * @type {?function}\r\n         * @since 3.0.0\r\n         */\r\n        this.ease;\r\n\r\n        /**\r\n         * Whether this property can only be modified when a Particle is emitted.\r\n         *\r\n         * Set to `true` to allow only {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} callbacks to be set and\r\n         * affect this property.\r\n         *\r\n         * Set to `false` to allow both {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} and\r\n         * {@link Phaser.GameObjects.Particles.EmitterOp#onUpdate} callbacks to be set and affect this property.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#emitOnly\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.emitOnly = emitOnly;\r\n\r\n        /**\r\n         * The callback to run for Particles when they are emitted from the Particle Emitter.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#onEmit\r\n         * @type {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.onEmit = this.defaultEmit;\r\n\r\n        /**\r\n         * The callback to run for Particles when they are updated.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.EmitterOp#onUpdate\r\n         * @type {Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.onUpdate = this.defaultUpdate;\r\n\r\n        this.loadConfig(config);\r\n    },\r\n\r\n    /**\r\n     * Load the property from a Particle Emitter configuration object.\r\n     *\r\n     * Optionally accepts a new property key to use, replacing the current one.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#loadConfig\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} [config] - Settings for the Particle Emitter that owns this property.\r\n     * @param {string} [newKey] - The new key to use for this property, if any.\r\n     */\r\n    loadConfig: function (config, newKey)\r\n    {\r\n        if (config === undefined)\r\n        {\r\n            config = {};\r\n        }\r\n\r\n        if (newKey)\r\n        {\r\n            this.propertyKey = newKey;\r\n        }\r\n\r\n        this.propertyValue = GetFastValue(\r\n            config,\r\n            this.propertyKey,\r\n            this.defaultValue\r\n        );\r\n\r\n        this.setMethods();\r\n\r\n        if (this.emitOnly)\r\n        {\r\n            //  Reset it back again\r\n            this.onUpdate = this.defaultUpdate;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Build a JSON representation of this Particle Emitter property.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} A JSON representation of this Particle Emitter property.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        return this.propertyValue;\r\n    },\r\n\r\n    /**\r\n     * Change the current value of the property and update its callback methods.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#onChange\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The value of the property.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.EmitterOp} This Emitter Op object.\r\n     */\r\n    onChange: function (value)\r\n    {\r\n        this.propertyValue = value;\r\n\r\n        return this.setMethods();\r\n    },\r\n\r\n    /**\r\n     * Update the {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} and\r\n     * {@link Phaser.GameObjects.Particles.EmitterOp#onUpdate} callbacks based on the type of the current\r\n     * {@link Phaser.GameObjects.Particles.EmitterOp#propertyValue}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#setMethods\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.EmitterOp} This Emitter Op object.\r\n     */\r\n    setMethods: function ()\r\n    {\r\n        var value = this.propertyValue;\r\n\r\n        var t = typeof value;\r\n\r\n        if (t === 'number')\r\n        {\r\n            //  Explicit static value:\r\n            //  x: 400\r\n\r\n            this.onEmit = this.staticValueEmit;\r\n            this.onUpdate = this.staticValueUpdate; // How?\r\n        }\r\n        else if (Array.isArray(value))\r\n        {\r\n            //  Picks a random element from the array:\r\n            //  x: [ 100, 200, 300, 400 ]\r\n\r\n            this.onEmit = this.randomStaticValueEmit;\r\n        }\r\n        else if (t === 'function')\r\n        {\r\n            //  The same as setting just the onUpdate function and no onEmit (unless this op is an emitOnly one)\r\n            //  Custom callback, must return a value:\r\n\r\n            /*\r\n            x: function (particle, key, t, value)\r\n               {\r\n                   return value + 50;\r\n               }\r\n            */\r\n\r\n            if (this.emitOnly)\r\n            {\r\n                this.onEmit = value;\r\n            }\r\n            else\r\n            {\r\n                this.onUpdate = value;\r\n            }\r\n        }\r\n        else if (t === 'object' && (this.has(value, 'random') || this.hasBoth(value, 'start', 'end') || this.hasBoth(value, 'min', 'max')))\r\n        {\r\n            this.start = this.has(value, 'start') ? value.start : value.min;\r\n            this.end = this.has(value, 'end') ? value.end : value.max;\r\n\r\n            var isRandom = (this.hasBoth(value, 'min', 'max') || !!value.random);\r\n\r\n            //  A random starting value (using 'min | max' instead of 'start | end' automatically implies a random value)\r\n\r\n            //  x: { start: 100, end: 400, random: true } OR { min: 100, max: 400 } OR { random: [ 100, 400 ] }\r\n\r\n            if (isRandom)\r\n            {\r\n                var rnd = value.random;\r\n\r\n                //  x: { random: [ 100, 400 ] } = the same as doing: x: { start: 100, end: 400, random: true }\r\n                if (Array.isArray(rnd))\r\n                {\r\n                    this.start = rnd[0];\r\n                    this.end = rnd[1];\r\n                }\r\n\r\n                this.onEmit = this.randomRangedValueEmit;\r\n            }\r\n\r\n            if (this.has(value, 'steps'))\r\n            {\r\n                //  A stepped (per emit) range\r\n\r\n                //  x: { start: 100, end: 400, steps: 64 }\r\n\r\n                //  Increments a value stored in the emitter\r\n\r\n                this.steps = value.steps;\r\n                this.counter = this.start;\r\n\r\n                this.onEmit = this.steppedEmit;\r\n            }\r\n            else\r\n            {\r\n                //  An eased range (defaults to Linear if not specified)\r\n\r\n                //  x: { start: 100, end: 400, [ ease: 'Linear' ] }\r\n\r\n                var easeType = this.has(value, 'ease') ? value.ease : 'Linear';\r\n\r\n                this.ease = GetEaseFunction(easeType);\r\n\r\n                if (!isRandom)\r\n                {\r\n                    this.onEmit = this.easedValueEmit;\r\n                }\r\n\r\n                //  BUG: alpha, rotate, scaleX, scaleY, or tint are eased here if {min, max} is given.\r\n                //  Probably this branch should exclude isRandom entirely.\r\n\r\n                this.onUpdate = this.easeValueUpdate;\r\n            }\r\n        }\r\n        else if (t === 'object' && this.hasEither(value, 'onEmit', 'onUpdate'))\r\n        {\r\n            //  Custom onEmit and onUpdate callbacks\r\n\r\n            /*\r\n            x: {\r\n                //  Called at the start of the particles life, when it is being created\r\n                onEmit: function (particle, key, t, value)\r\n                {\r\n                    return value;\r\n                },\r\n\r\n                //  Called during the particles life on each update\r\n                onUpdate: function (particle, key, t, value)\r\n                {\r\n                    return value;\r\n                }\r\n            }\r\n            */\r\n\r\n            if (this.has(value, 'onEmit'))\r\n            {\r\n                this.onEmit = value.onEmit;\r\n            }\r\n\r\n            if (this.has(value, 'onUpdate'))\r\n            {\r\n                this.onUpdate = value.onUpdate;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check whether an object has the given property.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#has\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} object - The object to check.\r\n     * @param {string} key - The key of the property to look for in the object.\r\n     *\r\n     * @return {boolean} `true` if the property exists in the object, `false` otherwise.\r\n     */\r\n    has: function (object, key)\r\n    {\r\n        return object.hasOwnProperty(key);\r\n    },\r\n\r\n    /**\r\n     * Check whether an object has both of the given properties.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#hasBoth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} object - The object to check.\r\n     * @param {string} key1 - The key of the first property to check the object for.\r\n     * @param {string} key2 - The key of the second property to check the object for.\r\n     *\r\n     * @return {boolean} `true` if both properties exist in the object, `false` otherwise.\r\n     */\r\n    hasBoth: function (object, key1, key2)\r\n    {\r\n        return object.hasOwnProperty(key1) && object.hasOwnProperty(key2);\r\n    },\r\n\r\n    /**\r\n     * Check whether an object has at least one of the given properties.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#hasEither\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} object - The object to check.\r\n     * @param {string} key1 - The key of the first property to check the object for.\r\n     * @param {string} key2 - The key of the second property to check the object for.\r\n     *\r\n     * @return {boolean} `true` if at least one of the properties exists in the object, `false` if neither exist.\r\n     */\r\n    hasEither: function (object, key1, key2)\r\n    {\r\n        return object.hasOwnProperty(key1) || object.hasOwnProperty(key2);\r\n    },\r\n\r\n    /**\r\n     * The returned value sets what the property will be at the START of the particles life, on emit.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#defaultEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n     * @param {string} key - The name of the property.\r\n     * @param {number} [value] - The current value of the property.\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    defaultEmit: function (particle, key, value)\r\n    {\r\n        return value;\r\n    },\r\n\r\n    /**\r\n     * The returned value updates the property for the duration of the particles life.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#defaultUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n     * @param {string} key - The name of the property.\r\n     * @param {number} t - The T value (between 0 and 1)\r\n     * @param {number} value - The current value of the property.\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    defaultUpdate: function (particle, key, t, value)\r\n    {\r\n        return value;\r\n    },\r\n\r\n    /**\r\n     * An `onEmit` callback that returns the current value of the property.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#staticValueEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The current value of the property.\r\n     */\r\n    staticValueEmit: function ()\r\n    {\r\n        return this.propertyValue;\r\n    },\r\n\r\n    /**\r\n     * An `onUpdate` callback that returns the current value of the property.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#staticValueUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The current value of the property.\r\n     */\r\n    staticValueUpdate: function ()\r\n    {\r\n        return this.propertyValue;\r\n    },\r\n\r\n    /**\r\n     * An `onEmit` callback that returns a random value from the current value array.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#randomStaticValueEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    randomStaticValueEmit: function ()\r\n    {\r\n        var randomIndex = Math.floor(Math.random() * this.propertyValue.length);\r\n\r\n        return this.propertyValue[randomIndex];\r\n    },\r\n\r\n    /**\r\n     * An `onEmit` callback that returns a value between the {@link Phaser.GameObjects.Particles.EmitterOp#start} and\r\n     * {@link Phaser.GameObjects.Particles.EmitterOp#end} range.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#randomRangedValueEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n     * @param {string} key - The key of the property.\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    randomRangedValueEmit: function (particle, key)\r\n    {\r\n        var value = FloatBetween(this.start, this.end);\r\n\r\n        if (particle && particle.data[key])\r\n        {\r\n            particle.data[key].min = value;\r\n        }\r\n\r\n        return value;\r\n    },\r\n\r\n    /**\r\n     * An `onEmit` callback that returns a stepped value between the\r\n     * {@link Phaser.GameObjects.Particles.EmitterOp#start} and {@link Phaser.GameObjects.Particles.EmitterOp#end}\r\n     * range.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#steppedEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    steppedEmit: function ()\r\n    {\r\n        var current = this.counter;\r\n\r\n        var next = this.counter + (this.end - this.start) / this.steps;\r\n\r\n        this.counter = Wrap(next, this.start, this.end);\r\n\r\n        return current;\r\n    },\r\n\r\n    /**\r\n     * An `onEmit` callback for an eased property.\r\n     *\r\n     * It prepares the particle for easing by {@link Phaser.GameObjects.Particles.EmitterOp#easeValueUpdate}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#easedValueEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n     * @param {string} key - The name of the property.\r\n     *\r\n     * @return {number} {@link Phaser.GameObjects.Particles.EmitterOp#start}, as the new value of the property.\r\n     */\r\n    easedValueEmit: function (particle, key)\r\n    {\r\n        if (particle && particle.data[key])\r\n        {\r\n            var data = particle.data[key];\r\n\r\n            data.min = this.start;\r\n            data.max = this.end;\r\n        }\r\n\r\n        return this.start;\r\n    },\r\n\r\n    /**\r\n     * An `onUpdate` callback that returns an eased value between the\r\n     * {@link Phaser.GameObjects.Particles.EmitterOp#start} and {@link Phaser.GameObjects.Particles.EmitterOp#end}\r\n     * range.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.EmitterOp#easeValueUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n     * @param {string} key - The name of the property.\r\n     * @param {number} t - The T value (between 0 and 1)\r\n     *\r\n     * @return {number} The new value of the property.\r\n     */\r\n    easeValueUpdate: function (particle, key, t)\r\n    {\r\n        var data = particle.data[key];\r\n\r\n        return (data.max - data.min) * this.ease(t) + data.min;\r\n    }\r\n});\r\n\r\nmodule.exports = EmitterOp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvRW1pdHRlck9wLmpzPzZmMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsK0VBQXlCO0FBQ3BELHNCQUFzQixtQkFBTyxDQUFDLDJHQUF1QztBQUNyRSxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsV0FBVyxtQkFBTyxDQUFDLCtEQUFpQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseURBQXlEO0FBQ3BFLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJELG1EQUFtRDtBQUM5RyxZQUFZLGlEQUFpRDtBQUM3RDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msb0RBQW9EO0FBQzVGO0FBQ0E7QUFDQSx5Q0FBeUMsb0RBQW9EO0FBQzdGLFlBQVksc0RBQXNEO0FBQ2xFO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUF5RDtBQUN4RSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxtQkFBbUIsb0RBQW9EO0FBQ3ZFLFFBQVEsc0RBQXNEO0FBQzlELFFBQVEsMkRBQTJEO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLHFDQUFxQyxLQUFLLHFCQUFxQixLQUFLOztBQUV4RjtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLHVCQUF1QiwwQkFBMEI7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1GQUFtRixTQUFTO0FBQzVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhEQUE4RCxtREFBbUQ7QUFDakgsUUFBUSxpREFBaUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFFBQVEsbURBQW1ELE1BQU07QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsNkRBQTZEO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU8sRUFBRSxtREFBbUQ7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFFBQVEsbURBQW1ELE1BQU07QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9FbWl0dGVyT3AuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGbG9hdEJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zsb2F0QmV0d2VlbicpO1xyXG52YXIgR2V0RWFzZUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vLi4vdHdlZW5zL2J1aWxkZXJzL0dldEVhc2VGdW5jdGlvbicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgV3JhcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvV3JhcCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBFbWl0dGVyIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBGYWNpbGl0YXRlcyBjaGFuZ2luZyBQYXJ0aWNsZSBwcm9wZXJ0aWVzIGFzIHRoZXkgYXJlIGVtaXR0ZWQgYW5kIHRocm91Z2hvdXQgdGhlaXIgbGlmZXRpbWUuXHJcbiAqXHJcbiAqIEBjbGFzcyBFbWl0dGVyT3BcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBTZXR0aW5ncyBmb3IgdGhlIFBhcnRpY2xlIEVtaXR0ZXIgdGhhdCBvd25zIHRoaXMgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWUgLSBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXRPbmx5PWZhbHNlXSAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gYSBQYXJ0aWNsZSBpcyBlbWl0dGVkLlxyXG4gKi9cclxudmFyIEVtaXR0ZXJPcCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFbWl0dGVyT3AgKGNvbmZpZywga2V5LCBkZWZhdWx0VmFsdWUsIGVtaXRPbmx5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChlbWl0T25seSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW1pdE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eUtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUtleSA9IGtleTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eVZhbHVlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNkZWZhdWx0VmFsdWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIGZvciBzdGVwcGVkIGVhc2luZyBiZXR3ZWVuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kXHJcbiAgICAgICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VuZH0gdmFsdWVzLCBwZXIgZW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3N0ZXBzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGVwIGNvdW50ZXIgZm9yIHN0ZXBwZWQgZWFzaW5nLCBwZXIgZW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnQgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgdG8gZWFzZSBiZXR3ZWVuLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhcnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuZCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eSB0byBlYXNlIGJldHdlZW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNlbmRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB1cGRhdGluZyB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZWFzZVxyXG4gICAgICAgICAqIEB0eXBlIHs/ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lYXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hlbiBhIFBhcnRpY2xlIGlzIGVtaXR0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IG9ubHkge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uRW1pdH0gY2FsbGJhY2tzIHRvIGJlIHNldCBhbmRcclxuICAgICAgICAgKiBhZmZlY3QgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGFsbG93IGJvdGgge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uRW1pdH0gYW5kXHJcbiAgICAgICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uVXBkYXRlfSBjYWxsYmFja3MgdG8gYmUgc2V0IGFuZCBhZmZlY3QgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VtaXRPbmx5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbWl0T25seSA9IGVtaXRPbmx5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgdG8gcnVuIGZvciBQYXJ0aWNsZXMgd2hlbiB0aGV5IGFyZSBlbWl0dGVkIGZyb20gdGhlIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvbkVtaXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRDYWxsYmFja31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uRW1pdCA9IHRoaXMuZGVmYXVsdEVtaXQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayB0byBydW4gZm9yIFBhcnRpY2xlcyB3aGVuIHRoZXkgYXJlIHVwZGF0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvblVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblVwZGF0ZSA9IHRoaXMuZGVmYXVsdFVwZGF0ZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQ29uZmlnKGNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCB0aGUgcHJvcGVydHkgZnJvbSBhIFBhcnRpY2xlIEVtaXR0ZXIgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogT3B0aW9uYWxseSBhY2NlcHRzIGEgbmV3IHByb3BlcnR5IGtleSB0byB1c2UsIHJlcGxhY2luZyB0aGUgY3VycmVudCBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNsb2FkQ29uZmlnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBbY29uZmlnXSAtIFNldHRpbmdzIGZvciB0aGUgUGFydGljbGUgRW1pdHRlciB0aGF0IG93bnMgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbmV3S2V5XSAtIFRoZSBuZXcga2V5IHRvIHVzZSBmb3IgdGhpcyBwcm9wZXJ0eSwgaWYgYW55LlxyXG4gICAgICovXHJcbiAgICBsb2FkQ29uZmlnOiBmdW5jdGlvbiAoY29uZmlnLCBuZXdLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3S2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eUtleSA9IG5ld0tleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IEdldEZhc3RWYWx1ZShcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5S2V5LFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TWV0aG9kcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbWl0T25seSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZXNldCBpdCBiYWNrIGFnYWluXHJcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLmRlZmF1bHRVcGRhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFBhcnRpY2xlIEVtaXR0ZXIgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgUGFydGljbGUgRW1pdHRlciBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdXBkYXRlIGl0cyBjYWxsYmFjayBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajb25DaGFuZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9IFRoaXMgRW1pdHRlciBPcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldE1ldGhvZHMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvbkVtaXR9IGFuZFxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uVXBkYXRlfSBjYWxsYmFja3MgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnRcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eVZhbHVlfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3NldE1ldGhvZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfSBUaGlzIEVtaXR0ZXIgT3Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNZXRob2RzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YgdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0ID09PSAnbnVtYmVyJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBFeHBsaWNpdCBzdGF0aWMgdmFsdWU6XHJcbiAgICAgICAgICAgIC8vICB4OiA0MDBcclxuXHJcbiAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5zdGF0aWNWYWx1ZUVtaXQ7XHJcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLnN0YXRpY1ZhbHVlVXBkYXRlOyAvLyBIb3c/XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFBpY2tzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXk6XHJcbiAgICAgICAgICAgIC8vICB4OiBbIDEwMCwgMjAwLCAzMDAsIDQwMCBdXHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uRW1pdCA9IHRoaXMucmFuZG9tU3RhdGljVmFsdWVFbWl0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0ID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFRoZSBzYW1lIGFzIHNldHRpbmcganVzdCB0aGUgb25VcGRhdGUgZnVuY3Rpb24gYW5kIG5vIG9uRW1pdCAodW5sZXNzIHRoaXMgb3AgaXMgYW4gZW1pdE9ubHkgb25lKVxyXG4gICAgICAgICAgICAvLyAgQ3VzdG9tIGNhbGxiYWNrLCBtdXN0IHJldHVybiBhIHZhbHVlOlxyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgeDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyA1MDtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW1pdE9ubHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBkYXRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgKHRoaXMuaGFzKHZhbHVlLCAncmFuZG9tJykgfHwgdGhpcy5oYXNCb3RoKHZhbHVlLCAnc3RhcnQnLCAnZW5kJykgfHwgdGhpcy5oYXNCb3RoKHZhbHVlLCAnbWluJywgJ21heCcpKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLmhhcyh2YWx1ZSwgJ3N0YXJ0JykgPyB2YWx1ZS5zdGFydCA6IHZhbHVlLm1pbjtcclxuICAgICAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmhhcyh2YWx1ZSwgJ2VuZCcpID8gdmFsdWUuZW5kIDogdmFsdWUubWF4O1xyXG5cclxuICAgICAgICAgICAgdmFyIGlzUmFuZG9tID0gKHRoaXMuaGFzQm90aCh2YWx1ZSwgJ21pbicsICdtYXgnKSB8fCAhIXZhbHVlLnJhbmRvbSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQSByYW5kb20gc3RhcnRpbmcgdmFsdWUgKHVzaW5nICdtaW4gfCBtYXgnIGluc3RlYWQgb2YgJ3N0YXJ0IHwgZW5kJyBhdXRvbWF0aWNhbGx5IGltcGxpZXMgYSByYW5kb20gdmFsdWUpXHJcblxyXG4gICAgICAgICAgICAvLyAgeDogeyBzdGFydDogMTAwLCBlbmQ6IDQwMCwgcmFuZG9tOiB0cnVlIH0gT1IgeyBtaW46IDEwMCwgbWF4OiA0MDAgfSBPUiB7IHJhbmRvbTogWyAxMDAsIDQwMCBdIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JhbmRvbSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJuZCA9IHZhbHVlLnJhbmRvbTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgeDogeyByYW5kb206IFsgMTAwLCA0MDAgXSB9ID0gdGhlIHNhbWUgYXMgZG9pbmc6IHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIHJhbmRvbTogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShybmQpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBybmRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBybmRbMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkVtaXQgPSB0aGlzLnJhbmRvbVJhbmdlZFZhbHVlRW1pdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzKHZhbHVlLCAnc3RlcHMnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEEgc3RlcHBlZCAocGVyIGVtaXQpIHJhbmdlXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIHN0ZXBzOiA2NCB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEluY3JlbWVudHMgYSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGVtaXR0ZXJcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzID0gdmFsdWUuc3RlcHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLnN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5zdGVwcGVkRW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBBbiBlYXNlZCByYW5nZSAoZGVmYXVsdHMgdG8gTGluZWFyIGlmIG5vdCBzcGVjaWZpZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIFsgZWFzZTogJ0xpbmVhcicgXSB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGVhc2VUeXBlID0gdGhpcy5oYXModmFsdWUsICdlYXNlJykgPyB2YWx1ZS5lYXNlIDogJ0xpbmVhcic7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lYXNlID0gR2V0RWFzZUZ1bmN0aW9uKGVhc2VUeXBlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUmFuZG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5lYXNlZFZhbHVlRW1pdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgQlVHOiBhbHBoYSwgcm90YXRlLCBzY2FsZVgsIHNjYWxlWSwgb3IgdGludCBhcmUgZWFzZWQgaGVyZSBpZiB7bWluLCBtYXh9IGlzIGdpdmVuLlxyXG4gICAgICAgICAgICAgICAgLy8gIFByb2JhYmx5IHRoaXMgYnJhbmNoIHNob3VsZCBleGNsdWRlIGlzUmFuZG9tIGVudGlyZWx5LlxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLmVhc2VWYWx1ZVVwZGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiB0aGlzLmhhc0VpdGhlcih2YWx1ZSwgJ29uRW1pdCcsICdvblVwZGF0ZScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEN1c3RvbSBvbkVtaXQgYW5kIG9uVXBkYXRlIGNhbGxiYWNrc1xyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgeDoge1xyXG4gICAgICAgICAgICAgICAgLy8gIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpY2xlcyBsaWZlLCB3aGVuIGl0IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgICAgICAgICAgICAgIG9uRW1pdDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIENhbGxlZCBkdXJpbmcgdGhlIHBhcnRpY2xlcyBsaWZlIG9uIGVhY2ggdXBkYXRlXHJcbiAgICAgICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzKHZhbHVlLCAnb25FbWl0JykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdmFsdWUub25FbWl0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXModmFsdWUsICdvblVwZGF0ZScpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBkYXRlID0gdmFsdWUub25VcGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGxvb2sgZm9yIGluIHRoZSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24gKG9iamVjdCwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYm90aCBvZiB0aGUgZ2l2ZW4gcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2hhc0JvdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleTEgLSBUaGUga2V5IG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBjaGVjayB0aGUgb2JqZWN0IGZvci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkyIC0gVGhlIGtleSBvZiB0aGUgc2Vjb25kIHByb3BlcnR5IHRvIGNoZWNrIHRoZSBvYmplY3QgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBib3RoIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGhhc0JvdGg6IGZ1bmN0aW9uIChvYmplY3QsIGtleTEsIGtleTIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkxKSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5Mik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2hhc0VpdGhlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5MSAtIFRoZSBrZXkgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIGNoZWNrIHRoZSBvYmplY3QgZm9yLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleTIgLSBUaGUga2V5IG9mIHRoZSBzZWNvbmQgcHJvcGVydHkgdG8gY2hlY2sgdGhlIG9iamVjdCBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvcGVydGllcyBleGlzdHMgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBpZiBuZWl0aGVyIGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBoYXNFaXRoZXI6IGZ1bmN0aW9uIChvYmplY3QsIGtleTEsIGtleTIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkxKSB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5Mik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHNldHMgd2hhdCB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGUgU1RBUlQgb2YgdGhlIHBhcnRpY2xlcyBsaWZlLCBvbiBlbWl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZGVmYXVsdEVtaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZV0gLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZGVmYXVsdEVtaXQ6IGZ1bmN0aW9uIChwYXJ0aWNsZSwga2V5LCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHVwZGF0ZXMgdGhlIHByb3BlcnR5IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhcnRpY2xlcyBsaWZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZGVmYXVsdFVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBUIHZhbHVlIChiZXR3ZWVuIDAgYW5kIDEpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZGVmYXVsdFVwZGF0ZTogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBgb25FbWl0YCBjYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhdGljVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljVmFsdWVFbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uVXBkYXRlYCBjYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhdGljVmFsdWVVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWNWYWx1ZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIHJhbmRvbSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IHZhbHVlIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjcmFuZG9tU3RhdGljVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICByYW5kb21TdGF0aWNWYWx1ZUVtaXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5wcm9wZXJ0eVZhbHVlLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWVbcmFuZG9tSW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIHZhbHVlIGJldHdlZW4gdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZW5kfSByYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3JhbmRvbVJhbmdlZFZhbHVlRW1pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICByYW5kb21SYW5nZWRWYWx1ZUVtaXQ6IGZ1bmN0aW9uIChwYXJ0aWNsZSwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IEZsb2F0QmV0d2Vlbih0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcblxyXG4gICAgICAgIGlmIChwYXJ0aWNsZSAmJiBwYXJ0aWNsZS5kYXRhW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZS5kYXRhW2tleV0ubWluID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uRW1pdGAgY2FsbGJhY2sgdGhhdCByZXR1cm5zIGEgc3RlcHBlZCB2YWx1ZSBiZXR3ZWVuIHRoZVxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3N0YXJ0fSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VuZH1cclxuICAgICAqIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RlcHBlZEVtaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKi9cclxuICAgIHN0ZXBwZWRFbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jb3VudGVyO1xyXG5cclxuICAgICAgICB2YXIgbmV4dCA9IHRoaXMuY291bnRlciArICh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpIC8gdGhpcy5zdGVwcztcclxuXHJcbiAgICAgICAgdGhpcy5jb3VudGVyID0gV3JhcChuZXh0LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIGZvciBhbiBlYXNlZCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJdCBwcmVwYXJlcyB0aGUgcGFydGljbGUgZm9yIGVhc2luZyBieSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZWFzZVZhbHVlVXBkYXRlfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2Vhc2VkVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0sIGFzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBlYXNlZFZhbHVlRW1pdDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBhcnRpY2xlICYmIHBhcnRpY2xlLmRhdGFba2V5XSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gcGFydGljbGUuZGF0YVtrZXldO1xyXG5cclxuICAgICAgICAgICAgZGF0YS5taW4gPSB0aGlzLnN0YXJ0O1xyXG4gICAgICAgICAgICBkYXRhLm1heCA9IHRoaXMuZW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uVXBkYXRlYCBjYWxsYmFjayB0aGF0IHJldHVybnMgYW4gZWFzZWQgdmFsdWUgYmV0d2VlbiB0aGVcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNlbmR9XHJcbiAgICAgKiByYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2Vhc2VWYWx1ZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBUIHZhbHVlIChiZXR3ZWVuIDAgYW5kIDEpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZWFzZVZhbHVlVXBkYXRlOiBmdW5jdGlvbiAocGFydGljbGUsIGtleSwgdClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IHBhcnRpY2xlLmRhdGFba2V5XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChkYXRhLm1heCAtIGRhdGEubWluKSAqIHRoaXMuZWFzZSh0KSArIGRhdGEubWluO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlck9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/EmitterOp.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/GravityWell.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/GravityWell.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The GravityWell action applies a force on the particle to draw it towards, or repel it from, a single point.\r\n * \r\n * The force applied is inversely proportional to the square of the distance from the particle to the point, in accordance with Newton's law of gravity.\r\n * \r\n * This simulates the effect of gravity over large distances (as between planets, for example).\r\n *\r\n * @class GravityWell\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.GameObjects.Particles.GravityWellConfig)} [x=0] - The x coordinate of the Gravity Well, in world space.\r\n * @param {number} [y=0] - The y coordinate of the Gravity Well, in world space.\r\n * @param {number} [power=0] - The strength of the gravity force - larger numbers produce a stronger force.\r\n * @param {number} [epsilon=100] - The minimum distance for which the gravity force is calculated.\r\n * @param {number} [gravity=50] - The gravitational force of this Gravity Well.\r\n */\r\nvar GravityWell = new Class({\r\n\r\n    initialize:\r\n\r\n    function GravityWell (x, y, power, epsilon, gravity)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            var config = x;\r\n\r\n            x = GetFastValue(config, 'x', 0);\r\n            y = GetFastValue(config, 'y', 0);\r\n            power = GetFastValue(config, 'power', 0);\r\n            epsilon = GetFastValue(config, 'epsilon', 100);\r\n            gravity = GetFastValue(config, 'gravity', 50);\r\n        }\r\n        else\r\n        {\r\n            if (x === undefined) { x = 0; }\r\n            if (y === undefined) { y = 0; }\r\n            if (power === undefined) { power = 0; }\r\n            if (epsilon === undefined) { epsilon = 100; }\r\n            if (gravity === undefined) { gravity = 50; }\r\n        }\r\n\r\n        /**\r\n         * The x coordinate of the Gravity Well, in world space.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#x\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y coordinate of the Gravity Well, in world space.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#y\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The active state of the Gravity Well. An inactive Gravity Well will not influence any particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * Internal gravity value.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#_gravity\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._gravity = gravity;\r\n\r\n        /**\r\n         * Internal power value.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#_power\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._power = 0;\r\n\r\n        /**\r\n         * Internal epsilon value.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#_epsilon\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._epsilon = 0;\r\n\r\n        /**\r\n         * The strength of the gravity force - larger numbers produce a stronger force.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#power\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.power = power;\r\n\r\n        /**\r\n         * The minimum distance for which the gravity force is calculated.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.GravityWell#epsilon\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.epsilon = epsilon;\r\n    },\r\n\r\n    /**\r\n     * Takes a Particle and updates it based on the properties of this Gravity Well.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.GravityWell#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle to update.\r\n     * @param {number} delta - The delta time in ms.\r\n     * @param {number} step - The delta value divided by 1000.\r\n     */\r\n    update: function (particle, delta)\r\n    {\r\n        var x = this.x - particle.x;\r\n        var y = this.y - particle.y;\r\n        var dSq = x * x + y * y;\r\n\r\n        if (dSq === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var d = Math.sqrt(dSq);\r\n\r\n        if (dSq < this._epsilon)\r\n        {\r\n            dSq = this._epsilon;\r\n        }\r\n\r\n        var factor = ((this._power * delta) / (dSq * d)) * 100;\r\n\r\n        particle.velocityX += x * factor;\r\n        particle.velocityY += y * factor;\r\n    },\r\n\r\n    epsilon: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.sqrt(this._epsilon);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._epsilon = value * value;\r\n        }\r\n\r\n    },\r\n\r\n    power: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._power / this._gravity;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._power = value * this._gravity;\r\n        }\r\n\r\n    },\r\n\r\n    gravity: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._gravity;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var pwr = this.power;\r\n            this._gravity = value;\r\n            this.power = pwr;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = GravityWell;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvR3Jhdml0eVdlbGwuanM/OWNlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4REFBOEQ7QUFDekUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekMsa0NBQWtDLE9BQU87QUFDekMsc0NBQXNDLFdBQVc7QUFDakQsd0NBQXdDLGVBQWU7QUFDdkQsd0NBQXdDLGNBQWM7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL0dyYXZpdHlXZWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdyYXZpdHlXZWxsIGFjdGlvbiBhcHBsaWVzIGEgZm9yY2Ugb24gdGhlIHBhcnRpY2xlIHRvIGRyYXcgaXQgdG93YXJkcywgb3IgcmVwZWwgaXQgZnJvbSwgYSBzaW5nbGUgcG9pbnQuXHJcbiAqIFxyXG4gKiBUaGUgZm9yY2UgYXBwbGllZCBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBzcXVhcmUgb2YgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHBhcnRpY2xlIHRvIHRoZSBwb2ludCwgaW4gYWNjb3JkYW5jZSB3aXRoIE5ld3RvbidzIGxhdyBvZiBncmF2aXR5LlxyXG4gKiBcclxuICogVGhpcyBzaW11bGF0ZXMgdGhlIGVmZmVjdCBvZiBncmF2aXR5IG92ZXIgbGFyZ2UgZGlzdGFuY2VzIChhcyBiZXR3ZWVuIHBsYW5ldHMsIGZvciBleGFtcGxlKS5cclxuICpcclxuICogQGNsYXNzIEdyYXZpdHlXZWxsXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGxDb25maWcpfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIEdyYXZpdHkgV2VsbCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIEdyYXZpdHkgV2VsbCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcG93ZXI9MF0gLSBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXZpdHkgZm9yY2UgLSBsYXJnZXIgbnVtYmVycyBwcm9kdWNlIGEgc3Ryb25nZXIgZm9yY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbj0xMDBdIC0gVGhlIG1pbmltdW0gZGlzdGFuY2UgZm9yIHdoaWNoIHRoZSBncmF2aXR5IGZvcmNlIGlzIGNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ3Jhdml0eT01MF0gLSBUaGUgZ3Jhdml0YXRpb25hbCBmb3JjZSBvZiB0aGlzIEdyYXZpdHkgV2VsbC5cclxuICovXHJcbnZhciBHcmF2aXR5V2VsbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmF2aXR5V2VsbCAoeCwgeSwgcG93ZXIsIGVwc2lsb24sIGdyYXZpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICAgICAgICAgIHkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICBwb3dlciA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwb3dlcicsIDApO1xyXG4gICAgICAgICAgICBlcHNpbG9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2Vwc2lsb24nLCAxMDApO1xyXG4gICAgICAgICAgICBncmF2aXR5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2dyYXZpdHknLCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAocG93ZXIgPT09IHVuZGVmaW5lZCkgeyBwb3dlciA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKGVwc2lsb24gPT09IHVuZGVmaW5lZCkgeyBlcHNpbG9uID0gMTAwOyB9XHJcbiAgICAgICAgICAgIGlmIChncmF2aXR5ID09PSB1bmRlZmluZWQpIHsgZ3Jhdml0eSA9IDUwOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwsIGluIHdvcmxkIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwsIGluIHdvcmxkIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwuIEFuIGluYWN0aXZlIEdyYXZpdHkgV2VsbCB3aWxsIG5vdCBpbmZsdWVuY2UgYW55IHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZ3Jhdml0eSB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjX2dyYXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZ3Jhdml0eSA9IGdyYXZpdHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHBvd2VyIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCNfcG93ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Bvd2VyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXBzaWxvbiB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjX2Vwc2lsb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Vwc2lsb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXZpdHkgZm9yY2UgLSBsYXJnZXIgbnVtYmVycyBwcm9kdWNlIGEgc3Ryb25nZXIgZm9yY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsI3Bvd2VyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvd2VyID0gcG93ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtaW5pbXVtIGRpc3RhbmNlIGZvciB3aGljaCB0aGUgZ3Jhdml0eSBmb3JjZSBpcyBjYWxjdWxhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCNlcHNpbG9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVwc2lsb24gPSBlcHNpbG9uO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgUGFydGljbGUgYW5kIHVwZGF0ZXMgaXQgYmFzZWQgb24gdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBHcmF2aXR5IFdlbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBQYXJ0aWNsZSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gVGhlIGRlbHRhIHZhbHVlIGRpdmlkZWQgYnkgMTAwMC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocGFydGljbGUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54IC0gcGFydGljbGUueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueSAtIHBhcnRpY2xlLnk7XHJcbiAgICAgICAgdmFyIGRTcSA9IHggKiB4ICsgeSAqIHk7XHJcblxyXG4gICAgICAgIGlmIChkU3EgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChkU3EpO1xyXG5cclxuICAgICAgICBpZiAoZFNxIDwgdGhpcy5fZXBzaWxvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRTcSA9IHRoaXMuX2Vwc2lsb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmFjdG9yID0gKCh0aGlzLl9wb3dlciAqIGRlbHRhKSAvIChkU3EgKiBkKSkgKiAxMDA7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5WCArPSB4ICogZmFjdG9yO1xyXG4gICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5WSArPSB5ICogZmFjdG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBlcHNpbG9uOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5fZXBzaWxvbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lcHNpbG9uID0gdmFsdWUgKiB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwb3dlcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcG93ZXIgLyB0aGlzLl9ncmF2aXR5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcG93ZXIgPSB2YWx1ZSAqIHRoaXMuX2dyYXZpdHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZ3Jhdml0eToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3Jhdml0eTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwd3IgPSB0aGlzLnBvd2VyO1xyXG4gICAgICAgICAgICB0aGlzLl9ncmF2aXR5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucG93ZXIgPSBwd3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmF2aXR5V2VsbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/GravityWell.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/Particle.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/Particle.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle is a simple Game Object controlled by a Particle Emitter and Manager, and rendered by the Manager.\r\n * It uses its own lightweight physics system, and can interact only with its Emitter's bounds and zones.\r\n *\r\n * @class Particle\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter to which this Particle belongs.\r\n */\r\nvar Particle = new Class({\r\n\r\n    initialize:\r\n\r\n    function Particle (emitter)\r\n    {\r\n        /**\r\n         * The Emitter to which this Particle belongs.\r\n         *\r\n         * A Particle can only belong to a single Emitter and is created, updated and destroyed via it.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#emitter\r\n         * @type {Phaser.GameObjects.Particles.ParticleEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.emitter = emitter;\r\n\r\n        /**\r\n         * The texture frame used to render this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = null;\r\n\r\n        /**\r\n         * The x coordinate of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = 0;\r\n\r\n        /**\r\n         * The y coordinate of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = 0;\r\n\r\n        /**\r\n         * The x velocity of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#velocityX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.velocityX = 0;\r\n\r\n        /**\r\n         * The y velocity of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#velocityY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.velocityY = 0;\r\n\r\n        /**\r\n         * The x acceleration of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#accelerationX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelerationX = 0;\r\n\r\n        /**\r\n         * The y acceleration of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#accelerationY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelerationY = 0;\r\n\r\n        /**\r\n         * The maximum horizontal velocity this Particle can travel at.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#maxVelocityX\r\n         * @type {number}\r\n         * @default 10000\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVelocityX = 10000;\r\n\r\n        /**\r\n         * The maximum vertical velocity this Particle can travel at.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#maxVelocityY\r\n         * @type {number}\r\n         * @default 10000\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVelocityY = 10000;\r\n\r\n        /**\r\n         * The bounciness, or restitution, of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#bounce\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.bounce = 0;\r\n\r\n        /**\r\n         * The horizontal scale of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#scaleX\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.scaleX = 1;\r\n\r\n        /**\r\n         * The vertical scale of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#scaleY\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.scaleY = 1;\r\n\r\n        /**\r\n         * The alpha value of this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#alpha\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.alpha = 1;\r\n\r\n        /**\r\n         * The angle of this Particle in degrees.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#angle\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.angle = 0;\r\n\r\n        /**\r\n         * The angle of this Particle in radians.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#rotation\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.rotation = 0;\r\n\r\n        /**\r\n         * The tint applied to this Particle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#tint\r\n         * @type {integer}\r\n         * @webglOnly\r\n         * @since 3.0.0\r\n         */\r\n        this.tint = 0xffffff;\r\n\r\n        /**\r\n         * The lifespan of this Particle in ms.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#life\r\n         * @type {number}\r\n         * @default 1000\r\n         * @since 3.0.0\r\n         */\r\n        this.life = 1000;\r\n\r\n        /**\r\n         * The current life of this Particle in ms.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#lifeCurrent\r\n         * @type {number}\r\n         * @default 1000\r\n         * @since 3.0.0\r\n         */\r\n        this.lifeCurrent = 1000;\r\n\r\n        /**\r\n         * The delay applied to this Particle upon emission, in ms.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#delayCurrent\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.delayCurrent = 0;\r\n\r\n        /**\r\n         * The normalized lifespan T value, where 0 is the start and 1 is the end.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#lifeT\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.lifeT = 0;\r\n\r\n        /**\r\n         * The data used by the ease equation.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Particle#data\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = {\r\n            tint: { min: 0xffffff, max: 0xffffff, current: 0xffffff },\r\n            alpha: { min: 1, max: 1 },\r\n            rotate: { min: 0, max: 0 },\r\n            scaleX: { min: 1, max: 1 },\r\n            scaleY: { min: 1, max: 1 }\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Checks to see if this Particle is alive and updating.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#isAlive\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if this Particle is alive and updating, otherwise `false`.\r\n     */\r\n    isAlive: function ()\r\n    {\r\n        return (this.lifeCurrent > 0);\r\n    },\r\n\r\n    /**\r\n     * Resets the position of this particle back to zero.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#resetPosition\r\n     * @since 3.16.0\r\n     */\r\n    resetPosition: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 0;\r\n    },\r\n\r\n    /**\r\n     * Starts this Particle from the given coordinates.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#fire\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to launch this Particle from.\r\n     * @param {number} y - The y coordinate to launch this Particle from.\r\n     */\r\n    fire: function (x, y)\r\n    {\r\n        var emitter = this.emitter;\r\n\r\n        this.frame = emitter.getFrame();\r\n\r\n        if (emitter.emitZone)\r\n        {\r\n            //  Updates particle.x and particle.y during this call\r\n            emitter.emitZone.getPoint(this);\r\n        }\r\n\r\n        if (x === undefined)\r\n        {\r\n            if (emitter.follow)\r\n            {\r\n                this.x += emitter.follow.x + emitter.followOffset.x;\r\n            }\r\n\r\n            this.x += emitter.x.onEmit(this, 'x');\r\n        }\r\n        else\r\n        {\r\n            this.x += x;\r\n        }\r\n\r\n        if (y === undefined)\r\n        {\r\n            if (emitter.follow)\r\n            {\r\n                this.y += emitter.follow.y + emitter.followOffset.y;\r\n            }\r\n\r\n            this.y += emitter.y.onEmit(this, 'y');\r\n        }\r\n        else\r\n        {\r\n            this.y += y;\r\n        }\r\n\r\n        this.life = emitter.lifespan.onEmit(this, 'lifespan');\r\n        this.lifeCurrent = this.life;\r\n        this.lifeT = 0;\r\n\r\n        var sx = emitter.speedX.onEmit(this, 'speedX');\r\n        var sy = (emitter.speedY) ? emitter.speedY.onEmit(this, 'speedY') : sx;\r\n\r\n        if (emitter.radial)\r\n        {\r\n            var rad = DegToRad(emitter.angle.onEmit(this, 'angle'));\r\n\r\n            this.velocityX = Math.cos(rad) * Math.abs(sx);\r\n            this.velocityY = Math.sin(rad) * Math.abs(sy);\r\n        }\r\n        else if (emitter.moveTo)\r\n        {\r\n            var mx = emitter.moveToX.onEmit(this, 'moveToX');\r\n            var my = (emitter.moveToY) ? emitter.moveToY.onEmit(this, 'moveToY') : mx;\r\n\r\n            var angle = Math.atan2(my - this.y, mx - this.x);\r\n\r\n            var speed = DistanceBetween(this.x, this.y, mx, my) / (this.life / 1000);\r\n\r\n            //  We know how many pixels we need to move, but how fast?\r\n            // var speed = this.distanceToXY(displayObject, x, y) / (maxTime / 1000);\r\n\r\n            this.velocityX = Math.cos(angle) * speed;\r\n            this.velocityY = Math.sin(angle) * speed;\r\n        }\r\n        else\r\n        {\r\n            this.velocityX = sx;\r\n            this.velocityY = sy;\r\n        }\r\n\r\n        if (emitter.acceleration)\r\n        {\r\n            this.accelerationX = emitter.accelerationX.onEmit(this, 'accelerationX');\r\n            this.accelerationY = emitter.accelerationY.onEmit(this, 'accelerationY');\r\n        }\r\n\r\n        this.maxVelocityX = emitter.maxVelocityX.onEmit(this, 'maxVelocityX');\r\n        this.maxVelocityY = emitter.maxVelocityY.onEmit(this, 'maxVelocityY');\r\n\r\n        this.delayCurrent = emitter.delay.onEmit(this, 'delay');\r\n\r\n        this.scaleX = emitter.scaleX.onEmit(this, 'scaleX');\r\n        this.scaleY = (emitter.scaleY) ? emitter.scaleY.onEmit(this, 'scaleY') : this.scaleX;\r\n\r\n        this.angle = emitter.rotate.onEmit(this, 'rotate');\r\n        this.rotation = DegToRad(this.angle);\r\n\r\n        this.bounce = emitter.bounce.onEmit(this, 'bounce');\r\n\r\n        this.alpha = emitter.alpha.onEmit(this, 'alpha');\r\n\r\n        this.tint = emitter.tint.onEmit(this, 'tint');\r\n    },\r\n\r\n    /**\r\n     * An internal method that calculates the velocity of the Particle.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#computeVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter that is updating this Particle.\r\n     * @param {number} delta - The delta time in ms.\r\n     * @param {number} step - The delta value divided by 1000.\r\n     * @param {array} processors - Particle processors (gravity wells).\r\n     */\r\n    computeVelocity: function (emitter, delta, step, processors)\r\n    {\r\n        var vx = this.velocityX;\r\n        var vy = this.velocityY;\r\n\r\n        var ax = this.accelerationX;\r\n        var ay = this.accelerationY;\r\n\r\n        var mx = this.maxVelocityX;\r\n        var my = this.maxVelocityY;\r\n\r\n        vx += (emitter.gravityX * step);\r\n        vy += (emitter.gravityY * step);\r\n\r\n        if (ax)\r\n        {\r\n            vx += (ax * step);\r\n        }\r\n\r\n        if (ay)\r\n        {\r\n            vy += (ay * step);\r\n        }\r\n\r\n        if (vx > mx)\r\n        {\r\n            vx = mx;\r\n        }\r\n        else if (vx < -mx)\r\n        {\r\n            vx = -mx;\r\n        }\r\n\r\n        if (vy > my)\r\n        {\r\n            vy = my;\r\n        }\r\n        else if (vy < -my)\r\n        {\r\n            vy = -my;\r\n        }\r\n\r\n        this.velocityX = vx;\r\n        this.velocityY = vy;\r\n\r\n        //  Apply any additional processors\r\n        for (var i = 0; i < processors.length; i++)\r\n        {\r\n            processors[i].update(this, delta, step);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks if this Particle is still within the bounds defined by the given Emitter.\r\n     *\r\n     * If not, and depending on the Emitter collision flags, the Particle may either stop or rebound.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#checkBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter to check the bounds against.\r\n     */\r\n    checkBounds: function (emitter)\r\n    {\r\n        var bounds = emitter.bounds;\r\n        var bounce = -this.bounce;\r\n\r\n        if (this.x < bounds.x && emitter.collideLeft)\r\n        {\r\n            this.x = bounds.x;\r\n            this.velocityX *= bounce;\r\n        }\r\n        else if (this.x > bounds.right && emitter.collideRight)\r\n        {\r\n            this.x = bounds.right;\r\n            this.velocityX *= bounce;\r\n        }\r\n\r\n        if (this.y < bounds.y && emitter.collideTop)\r\n        {\r\n            this.y = bounds.y;\r\n            this.velocityY *= bounce;\r\n        }\r\n        else if (this.y > bounds.bottom && emitter.collideBottom)\r\n        {\r\n            this.y = bounds.bottom;\r\n            this.velocityY *= bounce;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The main update method for this Particle.\r\n     *\r\n     * Updates its life values, computes the velocity and repositions the Particle.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Particle#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delta - The delta time in ms.\r\n     * @param {number} step - The delta value divided by 1000.\r\n     * @param {array} processors - An optional array of update processors.\r\n     *\r\n     * @return {boolean} Returns `true` if this Particle has now expired and should be removed, otherwise `false` if still active.\r\n     */\r\n    update: function (delta, step, processors)\r\n    {\r\n        if (this.delayCurrent > 0)\r\n        {\r\n            this.delayCurrent -= delta;\r\n\r\n            return false;\r\n        }\r\n\r\n        var emitter = this.emitter;\r\n\r\n        //  How far along in life is this particle? (t = 0 to 1)\r\n        var t = 1 - (this.lifeCurrent / this.life);\r\n\r\n        this.lifeT = t;\r\n\r\n        this.computeVelocity(emitter, delta, step, processors);\r\n\r\n        this.x += this.velocityX * step;\r\n        this.y += this.velocityY * step;\r\n\r\n        if (emitter.bounds)\r\n        {\r\n            this.checkBounds(emitter);\r\n        }\r\n\r\n        if (emitter.deathZone && emitter.deathZone.willKill(this))\r\n        {\r\n            this.lifeCurrent = 0;\r\n\r\n            //  No need to go any further, particle has been killed\r\n            return true;\r\n        }\r\n\r\n        this.scaleX = emitter.scaleX.onUpdate(this, 'scaleX', t, this.scaleX);\r\n\r\n        if (emitter.scaleY)\r\n        {\r\n            this.scaleY = emitter.scaleY.onUpdate(this, 'scaleY', t, this.scaleY);\r\n        }\r\n        else\r\n        {\r\n            this.scaleY = this.scaleX;\r\n        }\r\n\r\n        this.angle = emitter.rotate.onUpdate(this, 'rotate', t, this.angle);\r\n        this.rotation = DegToRad(this.angle);\r\n\r\n        this.alpha = emitter.alpha.onUpdate(this, 'alpha', t, this.alpha);\r\n\r\n        this.tint = emitter.tint.onUpdate(this, 'tint', t, this.tint);\r\n\r\n        this.lifeCurrent -= delta;\r\n\r\n        return (this.lifeCurrent <= 0);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Particle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGUuanM/ZWU1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsdUVBQXFCO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZDQUE2QztBQUN4RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrREFBa0Q7QUFDckUsb0JBQW9CLGlCQUFpQjtBQUNyQyxxQkFBcUIsaUJBQWlCO0FBQ3RDLHFCQUFxQixpQkFBaUI7QUFDdEMscUJBQXFCO0FBQ3JCO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL1BhcnRpY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBpcyBhIHNpbXBsZSBHYW1lIE9iamVjdCBjb250cm9sbGVkIGJ5IGEgUGFydGljbGUgRW1pdHRlciBhbmQgTWFuYWdlciwgYW5kIHJlbmRlcmVkIGJ5IHRoZSBNYW5hZ2VyLlxyXG4gKiBJdCB1c2VzIGl0cyBvd24gbGlnaHR3ZWlnaHQgcGh5c2ljcyBzeXN0ZW0sIGFuZCBjYW4gaW50ZXJhY3Qgb25seSB3aXRoIGl0cyBFbWl0dGVyJ3MgYm91bmRzIGFuZCB6b25lcy5cclxuICpcclxuICogQGNsYXNzIFBhcnRpY2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gZW1pdHRlciAtIFRoZSBFbWl0dGVyIHRvIHdoaWNoIHRoaXMgUGFydGljbGUgYmVsb25ncy5cclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQYXJ0aWNsZSAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRW1pdHRlciB0byB3aGljaCB0aGlzIFBhcnRpY2xlIGJlbG9uZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIFBhcnRpY2xlIGNhbiBvbmx5IGJlbG9uZyB0byBhIHNpbmdsZSBFbWl0dGVyIGFuZCBpcyBjcmVhdGVkLCB1cGRhdGVkIGFuZCBkZXN0cm95ZWQgdmlhIGl0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNlbWl0dGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdHRlciA9IGVtaXR0ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0dXJlIGZyYW1lIHVzZWQgdG8gcmVuZGVyIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHZlbG9jaXR5IG9mIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI3ZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgdmVsb2NpdHkgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjdmVsb2NpdHlZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eVkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBhY2NlbGVyYXRpb24gb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYWNjZWxlcmF0aW9uWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGFjY2VsZXJhdGlvbiBvZiB0aGlzIFBhcnRpY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNhY2NlbGVyYXRpb25ZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25ZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCB2ZWxvY2l0eSB0aGlzIFBhcnRpY2xlIGNhbiB0cmF2ZWwgYXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI21heFZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WCA9IDEwMDAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSB2ZXJ0aWNhbCB2ZWxvY2l0eSB0aGlzIFBhcnRpY2xlIGNhbiB0cmF2ZWwgYXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI21heFZlbG9jaXR5WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WSA9IDEwMDAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYm91bmNpbmVzcywgb3IgcmVzdGl0dXRpb24sIG9mIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2JvdW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmNlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjc2NhbGVYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZVggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjc2NhbGVZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgUGFydGljbGUgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuZ2xlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgUGFydGljbGUgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjcm90YXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGlzIFBhcnRpY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSN0aW50XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHdlYmdsT25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGlmZXNwYW4gb2YgdGhpcyBQYXJ0aWNsZSBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjbGlmZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZSA9IDEwMDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IGxpZmUgb2YgdGhpcyBQYXJ0aWNsZSBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjbGlmZUN1cnJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpZmVDdXJyZW50ID0gMTAwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhpcyBQYXJ0aWNsZSB1cG9uIGVtaXNzaW9uLCBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjZGVsYXlDdXJyZW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWxheUN1cnJlbnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbm9ybWFsaXplZCBsaWZlc3BhbiBUIHZhbHVlLCB3aGVyZSAwIGlzIHRoZSBzdGFydCBhbmQgMSBpcyB0aGUgZW5kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNsaWZlVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZVQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGF0YSB1c2VkIGJ5IHRoZSBlYXNlIGVxdWF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIHRpbnQ6IHsgbWluOiAweGZmZmZmZiwgbWF4OiAweGZmZmZmZiwgY3VycmVudDogMHhmZmZmZmYgfSxcclxuICAgICAgICAgICAgYWxwaGE6IHsgbWluOiAxLCBtYXg6IDEgfSxcclxuICAgICAgICAgICAgcm90YXRlOiB7IG1pbjogMCwgbWF4OiAwIH0sXHJcbiAgICAgICAgICAgIHNjYWxlWDogeyBtaW46IDEsIG1heDogMSB9LFxyXG4gICAgICAgICAgICBzY2FsZVk6IHsgbWluOiAxLCBtYXg6IDEgfVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGlzIFBhcnRpY2xlIGlzIGFsaXZlIGFuZCB1cGRhdGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjaXNBbGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoaXMgUGFydGljbGUgaXMgYWxpdmUgYW5kIHVwZGF0aW5nLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNBbGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlmZUN1cnJlbnQgPiAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgcGFydGljbGUgYmFjayB0byB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNyZXNldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0UG9zaXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGlzIFBhcnRpY2xlIGZyb20gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNmaXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gbGF1bmNoIHRoaXMgUGFydGljbGUgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBsYXVuY2ggdGhpcyBQYXJ0aWNsZSBmcm9tLlxyXG4gICAgICovXHJcbiAgICBmaXJlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZW1pdHRlciA9IHRoaXMuZW1pdHRlcjtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IGVtaXR0ZXIuZ2V0RnJhbWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuZW1pdFpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVXBkYXRlcyBwYXJ0aWNsZS54IGFuZCBwYXJ0aWNsZS55IGR1cmluZyB0aGlzIGNhbGxcclxuICAgICAgICAgICAgZW1pdHRlci5lbWl0Wm9uZS5nZXRQb2ludCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZW1pdHRlci5mb2xsb3cpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueCArPSBlbWl0dGVyLmZvbGxvdy54ICsgZW1pdHRlci5mb2xsb3dPZmZzZXQueDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54ICs9IGVtaXR0ZXIueC5vbkVtaXQodGhpcywgJ3gnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ICs9IHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVtaXR0ZXIuZm9sbG93KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgKz0gZW1pdHRlci5mb2xsb3cueSArIGVtaXR0ZXIuZm9sbG93T2Zmc2V0Lnk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMueSArPSBlbWl0dGVyLnkub25FbWl0KHRoaXMsICd5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSArPSB5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saWZlID0gZW1pdHRlci5saWZlc3Bhbi5vbkVtaXQodGhpcywgJ2xpZmVzcGFuJyk7XHJcbiAgICAgICAgdGhpcy5saWZlQ3VycmVudCA9IHRoaXMubGlmZTtcclxuICAgICAgICB0aGlzLmxpZmVUID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHN4ID0gZW1pdHRlci5zcGVlZFgub25FbWl0KHRoaXMsICdzcGVlZFgnKTtcclxuICAgICAgICB2YXIgc3kgPSAoZW1pdHRlci5zcGVlZFkpID8gZW1pdHRlci5zcGVlZFkub25FbWl0KHRoaXMsICdzcGVlZFknKSA6IHN4O1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5yYWRpYWwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcmFkID0gRGVnVG9SYWQoZW1pdHRlci5hbmdsZS5vbkVtaXQodGhpcywgJ2FuZ2xlJykpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVggPSBNYXRoLmNvcyhyYWQpICogTWF0aC5hYnMoc3gpO1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IE1hdGguc2luKHJhZCkgKiBNYXRoLmFicyhzeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIubW92ZVRvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG14ID0gZW1pdHRlci5tb3ZlVG9YLm9uRW1pdCh0aGlzLCAnbW92ZVRvWCcpO1xyXG4gICAgICAgICAgICB2YXIgbXkgPSAoZW1pdHRlci5tb3ZlVG9ZKSA/IGVtaXR0ZXIubW92ZVRvWS5vbkVtaXQodGhpcywgJ21vdmVUb1knKSA6IG14O1xyXG5cclxuICAgICAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihteSAtIHRoaXMueSwgbXggLSB0aGlzLngpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNwZWVkID0gRGlzdGFuY2VCZXR3ZWVuKHRoaXMueCwgdGhpcy55LCBteCwgbXkpIC8gKHRoaXMubGlmZSAvIDEwMDApO1xyXG5cclxuICAgICAgICAgICAgLy8gIFdlIGtub3cgaG93IG1hbnkgcGl4ZWxzIHdlIG5lZWQgdG8gbW92ZSwgYnV0IGhvdyBmYXN0P1xyXG4gICAgICAgICAgICAvLyB2YXIgc3BlZWQgPSB0aGlzLmRpc3RhbmNlVG9YWShkaXNwbGF5T2JqZWN0LCB4LCB5KSAvIChtYXhUaW1lIC8gMTAwMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IE1hdGguY29zKGFuZ2xlKSAqIHNwZWVkO1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IE1hdGguc2luKGFuZ2xlKSAqIHNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IHN4O1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IHN5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuYWNjZWxlcmF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25YID0gZW1pdHRlci5hY2NlbGVyYXRpb25YLm9uRW1pdCh0aGlzLCAnYWNjZWxlcmF0aW9uWCcpO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblkgPSBlbWl0dGVyLmFjY2VsZXJhdGlvblkub25FbWl0KHRoaXMsICdhY2NlbGVyYXRpb25ZJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WCA9IGVtaXR0ZXIubWF4VmVsb2NpdHlYLm9uRW1pdCh0aGlzLCAnbWF4VmVsb2NpdHlYJyk7XHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVkgPSBlbWl0dGVyLm1heFZlbG9jaXR5WS5vbkVtaXQodGhpcywgJ21heFZlbG9jaXR5WScpO1xyXG5cclxuICAgICAgICB0aGlzLmRlbGF5Q3VycmVudCA9IGVtaXR0ZXIuZGVsYXkub25FbWl0KHRoaXMsICdkZWxheScpO1xyXG5cclxuICAgICAgICB0aGlzLnNjYWxlWCA9IGVtaXR0ZXIuc2NhbGVYLm9uRW1pdCh0aGlzLCAnc2NhbGVYJyk7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSAoZW1pdHRlci5zY2FsZVkpID8gZW1pdHRlci5zY2FsZVkub25FbWl0KHRoaXMsICdzY2FsZVknKSA6IHRoaXMuc2NhbGVYO1xyXG5cclxuICAgICAgICB0aGlzLmFuZ2xlID0gZW1pdHRlci5yb3RhdGUub25FbWl0KHRoaXMsICdyb3RhdGUnKTtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gRGVnVG9SYWQodGhpcy5hbmdsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmNlID0gZW1pdHRlci5ib3VuY2Uub25FbWl0KHRoaXMsICdib3VuY2UnKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGVtaXR0ZXIuYWxwaGEub25FbWl0KHRoaXMsICdhbHBoYScpO1xyXG5cclxuICAgICAgICB0aGlzLnRpbnQgPSBlbWl0dGVyLnRpbnQub25FbWl0KHRoaXMsICd0aW50Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmVsb2NpdHkgb2YgdGhlIFBhcnRpY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNjb21wdXRlVmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgRW1pdHRlciB0aGF0IGlzIHVwZGF0aW5nIHRoaXMgUGFydGljbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gVGhlIGRlbHRhIHZhbHVlIGRpdmlkZWQgYnkgMTAwMC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHByb2Nlc3NvcnMgLSBQYXJ0aWNsZSBwcm9jZXNzb3JzIChncmF2aXR5IHdlbGxzKS5cclxuICAgICAqL1xyXG4gICAgY29tcHV0ZVZlbG9jaXR5OiBmdW5jdGlvbiAoZW1pdHRlciwgZGVsdGEsIHN0ZXAsIHByb2Nlc3NvcnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZ4ID0gdGhpcy52ZWxvY2l0eVg7XHJcbiAgICAgICAgdmFyIHZ5ID0gdGhpcy52ZWxvY2l0eVk7XHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMuYWNjZWxlcmF0aW9uWDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLmFjY2VsZXJhdGlvblk7XHJcblxyXG4gICAgICAgIHZhciBteCA9IHRoaXMubWF4VmVsb2NpdHlYO1xyXG4gICAgICAgIHZhciBteSA9IHRoaXMubWF4VmVsb2NpdHlZO1xyXG5cclxuICAgICAgICB2eCArPSAoZW1pdHRlci5ncmF2aXR5WCAqIHN0ZXApO1xyXG4gICAgICAgIHZ5ICs9IChlbWl0dGVyLmdyYXZpdHlZICogc3RlcCk7XHJcblxyXG4gICAgICAgIGlmIChheClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ4ICs9IChheCAqIHN0ZXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgKz0gKGF5ICogc3RlcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodnggPiBteClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ4ID0gbXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZ4IDwgLW14KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnggPSAtbXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodnkgPiBteSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ5ID0gbXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZ5IDwgLW15KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgPSAtbXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IHZ4O1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlZID0gdnk7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBhbnkgYWRkaXRpb25hbCBwcm9jZXNzb3JzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9jZXNzb3JzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvY2Vzc29yc1tpXS51cGRhdGUodGhpcywgZGVsdGEsIHN0ZXApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBQYXJ0aWNsZSBpcyBzdGlsbCB3aXRoaW4gdGhlIGJvdW5kcyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBFbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vdCwgYW5kIGRlcGVuZGluZyBvbiB0aGUgRW1pdHRlciBjb2xsaXNpb24gZmxhZ3MsIHRoZSBQYXJ0aWNsZSBtYXkgZWl0aGVyIHN0b3Agb3IgcmVib3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjY2hlY2tCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgRW1pdHRlciB0byBjaGVjayB0aGUgYm91bmRzIGFnYWluc3QuXHJcbiAgICAgKi9cclxuICAgIGNoZWNrQm91bmRzOiBmdW5jdGlvbiAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgYm91bmRzID0gZW1pdHRlci5ib3VuZHM7XHJcbiAgICAgICAgdmFyIGJvdW5jZSA9IC10aGlzLmJvdW5jZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMueCA8IGJvdW5kcy54ICYmIGVtaXR0ZXIuY29sbGlkZUxlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSBib3VuZHMueDtcclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVggKj0gYm91bmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnggPiBib3VuZHMucmlnaHQgJiYgZW1pdHRlci5jb2xsaWRlUmlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSBib3VuZHMucmlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYICo9IGJvdW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnkgPCBib3VuZHMueSAmJiBlbWl0dGVyLmNvbGxpZGVUb3ApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBib3VuZHMueTtcclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVkgKj0gYm91bmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnkgPiBib3VuZHMuYm90dG9tICYmIGVtaXR0ZXIuY29sbGlkZUJvdHRvbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IGJvdW5kcy5ib3R0b207XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlZICo9IGJvdW5jZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIG1ldGhvZCBmb3IgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBVcGRhdGVzIGl0cyBsaWZlIHZhbHVlcywgY29tcHV0ZXMgdGhlIHZlbG9jaXR5IGFuZCByZXBvc2l0aW9ucyB0aGUgUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCAtIFRoZSBkZWx0YSB2YWx1ZSBkaXZpZGVkIGJ5IDEwMDAuXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBwcm9jZXNzb3JzIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgdXBkYXRlIHByb2Nlc3NvcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBQYXJ0aWNsZSBoYXMgbm93IGV4cGlyZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkLCBvdGhlcndpc2UgYGZhbHNlYCBpZiBzdGlsbCBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRlbGF5Q3VycmVudCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGF5Q3VycmVudCAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbWl0dGVyID0gdGhpcy5lbWl0dGVyO1xyXG5cclxuICAgICAgICAvLyAgSG93IGZhciBhbG9uZyBpbiBsaWZlIGlzIHRoaXMgcGFydGljbGU/ICh0ID0gMCB0byAxKVxyXG4gICAgICAgIHZhciB0ID0gMSAtICh0aGlzLmxpZmVDdXJyZW50IC8gdGhpcy5saWZlKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlVCA9IHQ7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcHV0ZVZlbG9jaXR5KGVtaXR0ZXIsIGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKTtcclxuXHJcbiAgICAgICAgdGhpcy54ICs9IHRoaXMudmVsb2NpdHlYICogc3RlcDtcclxuICAgICAgICB0aGlzLnkgKz0gdGhpcy52ZWxvY2l0eVkgKiBzdGVwO1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5ib3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQm91bmRzKGVtaXR0ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuZGVhdGhab25lICYmIGVtaXR0ZXIuZGVhdGhab25lLndpbGxLaWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saWZlQ3VycmVudCA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyAgTm8gbmVlZCB0byBnbyBhbnkgZnVydGhlciwgcGFydGljbGUgaGFzIGJlZW4ga2lsbGVkXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVggPSBlbWl0dGVyLnNjYWxlWC5vblVwZGF0ZSh0aGlzLCAnc2NhbGVYJywgdCwgdGhpcy5zY2FsZVgpO1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5zY2FsZVkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWSA9IGVtaXR0ZXIuc2NhbGVZLm9uVXBkYXRlKHRoaXMsICdzY2FsZVknLCB0LCB0aGlzLnNjYWxlWSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVZID0gdGhpcy5zY2FsZVg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFuZ2xlID0gZW1pdHRlci5yb3RhdGUub25VcGRhdGUodGhpcywgJ3JvdGF0ZScsIHQsIHRoaXMuYW5nbGUpO1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBEZWdUb1JhZCh0aGlzLmFuZ2xlKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGVtaXR0ZXIuYWxwaGEub25VcGRhdGUodGhpcywgJ2FscGhhJywgdCwgdGhpcy5hbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMudGludCA9IGVtaXR0ZXIudGludC5vblVwZGF0ZSh0aGlzLCAndGludCcsIHQsIHRoaXMudGludCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlmZUN1cnJlbnQgLT0gZGVsdGE7XHJcblxyXG4gICAgICAgIHJldHVybiAodGhpcy5saWZlQ3VycmVudCA8PSAwKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/Particle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DeathZone = __webpack_require__(/*! ./zones/DeathZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\");\r\nvar EdgeZone = __webpack_require__(/*! ./zones/EdgeZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\");\r\nvar EmitterOp = __webpack_require__(/*! ./EmitterOp */ \"./node_modules/phaser/src/gameobjects/particles/EmitterOp.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetRandom = __webpack_require__(/*! ../../utils/array/GetRandom */ \"./node_modules/phaser/src/utils/array/GetRandom.js\");\r\nvar HasAny = __webpack_require__(/*! ../../utils/object/HasAny */ \"./node_modules/phaser/src/utils/object/HasAny.js\");\r\nvar HasValue = __webpack_require__(/*! ../../utils/object/HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\nvar Particle = __webpack_require__(/*! ./Particle */ \"./node_modules/phaser/src/gameobjects/particles/Particle.js\");\r\nvar RandomZone = __webpack_require__(/*! ./zones/RandomZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar StableSort = __webpack_require__(/*! ../../utils/array/StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A particle emitter represents a single particle stream.\r\n * It controls a pool of {@link Phaser.GameObjects.Particles.Particle Particles} and is controlled by a {@link Phaser.GameObjects.Particles.ParticleEmitterManager Particle Emitter Manager}.\r\n *\r\n * @class ParticleEmitter\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} manager - The Emitter Manager this Emitter belongs to.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for this emitter.\r\n */\r\nvar ParticleEmitter = new Class({\r\n\r\n    Mixins: [\r\n        Components.BlendMode,\r\n        Components.Mask,\r\n        Components.ScrollFactor,\r\n        Components.Visible\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ParticleEmitter (manager, config)\r\n    {\r\n        /**\r\n         * The Emitter Manager this Emitter belongs to.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#manager\r\n         * @type {Phaser.GameObjects.Particles.ParticleEmitterManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * The texture assigned to particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @since 3.0.0\r\n         */\r\n        this.texture = manager.texture;\r\n\r\n        /**\r\n         * The texture frames assigned to particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#frames\r\n         * @type {Phaser.Textures.Frame[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.frames = [ manager.defaultFrame ];\r\n\r\n        /**\r\n         * The default texture frame assigned to particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#defaultFrame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaultFrame = manager.defaultFrame;\r\n\r\n        /**\r\n         * Names of simple configuration properties.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#configFastMap\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.configFastMap = [\r\n            'active',\r\n            'blendMode',\r\n            'collideBottom',\r\n            'collideLeft',\r\n            'collideRight',\r\n            'collideTop',\r\n            'deathCallback',\r\n            'deathCallbackScope',\r\n            'emitCallback',\r\n            'emitCallbackScope',\r\n            'follow',\r\n            'frequency',\r\n            'gravityX',\r\n            'gravityY',\r\n            'maxParticles',\r\n            'name',\r\n            'on',\r\n            'particleBringToTop',\r\n            'particleClass',\r\n            'radial',\r\n            'timeScale',\r\n            'trackVisible',\r\n            'visible'\r\n        ];\r\n\r\n        /**\r\n         * Names of complex configuration properties.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#configOpMap\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.configOpMap = [\r\n            'accelerationX',\r\n            'accelerationY',\r\n            'angle',\r\n            'alpha',\r\n            'bounce',\r\n            'delay',\r\n            'lifespan',\r\n            'maxVelocityX',\r\n            'maxVelocityY',\r\n            'moveToX',\r\n            'moveToY',\r\n            'quantity',\r\n            'rotate',\r\n            'scaleX',\r\n            'scaleY',\r\n            'speedX',\r\n            'speedY',\r\n            'tint',\r\n            'x',\r\n            'y'\r\n        ];\r\n\r\n        /**\r\n         * The name of this Particle Emitter.\r\n         *\r\n         * Empty by default and never populated by Phaser, this is left for developers to use.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * The Particle Class which will be emitted by this Emitter.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#particleClass\r\n         * @type {Phaser.GameObjects.Particles.Particle}\r\n         * @default Phaser.GameObjects.Particles.Particle\r\n         * @since 3.0.0\r\n         */\r\n        this.particleClass = Particle;\r\n\r\n        /**\r\n         * The x-coordinate of the particle origin (where particles will be emitted).\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#x\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n         */\r\n        this.x = new EmitterOp(config, 'x', 0, true);\r\n\r\n        /**\r\n         * The y-coordinate of the particle origin (where particles will be emitted).\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#y\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n         */\r\n        this.y = new EmitterOp(config, 'y', 0, true);\r\n\r\n        /**\r\n         * A radial emitter will emit particles in all directions between angle min and max,\r\n         * using {@link Phaser.GameObjects.Particles.ParticleEmitter#speed} as the value. If set to false then this acts as a point Emitter.\r\n         * A point emitter will emit particles only in the direction derived from the speedX and speedY values.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#radial\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setRadial\r\n         */\r\n        this.radial = true;\r\n\r\n        /**\r\n         * Horizontal acceleration applied to emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#gravityX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n         */\r\n        this.gravityX = 0;\r\n\r\n        /**\r\n         * Vertical acceleration applied to emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#gravityY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n         */\r\n        this.gravityY = 0;\r\n\r\n        /**\r\n         * Whether accelerationX and accelerationY are non-zero. Set automatically during configuration.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#acceleration\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.acceleration = false;\r\n\r\n        /**\r\n         * Horizontal acceleration applied to emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#accelerationX\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelerationX = new EmitterOp(config, 'accelerationX', 0, true);\r\n\r\n        /**\r\n         * Vertical acceleration applied to emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#accelerationY\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelerationY = new EmitterOp(config, 'accelerationY', 0, true);\r\n\r\n        /**\r\n         * The maximum horizontal velocity of emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#maxVelocityX\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 10000\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVelocityX = new EmitterOp(config, 'maxVelocityX', 10000, true);\r\n\r\n        /**\r\n         * The maximum vertical velocity of emitted particles, in pixels per second squared.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#maxVelocityY\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 10000\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVelocityY = new EmitterOp(config, 'maxVelocityY', 10000, true);\r\n\r\n        /**\r\n         * The initial horizontal speed of emitted particles, in pixels per second.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#speedX\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setSpeedX\r\n         */\r\n        this.speedX = new EmitterOp(config, 'speedX', 0, true);\r\n\r\n        /**\r\n         * The initial vertical speed of emitted particles, in pixels per second.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#speedY\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setSpeedY\r\n         */\r\n        this.speedY = new EmitterOp(config, 'speedY', 0, true);\r\n\r\n        /**\r\n         * Whether moveToX and moveToY are nonzero. Set automatically during configuration.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#moveTo\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.moveTo = false;\r\n\r\n        /**\r\n         * The x-coordinate emitted particles move toward, when {@link Phaser.GameObjects.Particles.ParticleEmitter#moveTo} is true.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#moveToX\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.moveToX = new EmitterOp(config, 'moveToX', 0, true);\r\n\r\n        /**\r\n         * The y-coordinate emitted particles move toward, when {@link Phaser.GameObjects.Particles.ParticleEmitter#moveTo} is true.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#moveToY\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.moveToY = new EmitterOp(config, 'moveToY', 0, true);\r\n\r\n        /**\r\n         * Whether particles will rebound when they meet the emitter bounds.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#bounce\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.bounce = new EmitterOp(config, 'bounce', 0, true);\r\n\r\n        /**\r\n         * The horizontal scale of emitted particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#scaleX\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setScaleX\r\n         */\r\n        this.scaleX = new EmitterOp(config, 'scaleX', 1);\r\n\r\n        /**\r\n         * The vertical scale of emitted particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#scaleY\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setScaleY\r\n         */\r\n        this.scaleY = new EmitterOp(config, 'scaleY', 1);\r\n\r\n        /**\r\n         * Color tint applied to emitted particles. Any alpha component (0xAA000000) is ignored.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#tint\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0xffffffff\r\n         * @since 3.0.0\r\n         */\r\n        this.tint = new EmitterOp(config, 'tint', 0xffffffff);\r\n\r\n        /**\r\n         * The alpha (transparency) of emitted particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#alpha\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setAlpha\r\n         */\r\n        this.alpha = new EmitterOp(config, 'alpha', 1);\r\n\r\n        /**\r\n         * The lifespan of emitted particles, in ms.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#lifespan\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 1000\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setLifespan\r\n         */\r\n        this.lifespan = new EmitterOp(config, 'lifespan', 1000, true);\r\n\r\n        /**\r\n         * The angle of the initial velocity of emitted particles, in degrees.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#angle\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default { min: 0, max: 360 }\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setAngle\r\n         */\r\n        this.angle = new EmitterOp(config, 'angle', { min: 0, max: 360 }, true);\r\n\r\n        /**\r\n         * The rotation of emitted particles, in degrees.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#rotate\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.rotate = new EmitterOp(config, 'rotate', 0);\r\n\r\n        /**\r\n         * A function to call when a particle is emitted.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#emitCallback\r\n         * @type {?Phaser.Types.GameObjects.Particles.ParticleEmitterCallback}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.emitCallback = null;\r\n\r\n        /**\r\n         * The calling context for {@link Phaser.GameObjects.Particles.ParticleEmitter#emitCallback}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#emitCallbackScope\r\n         * @type {?*}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.emitCallbackScope = null;\r\n\r\n        /**\r\n         * A function to call when a particle dies.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#deathCallback\r\n         * @type {?Phaser.Types.GameObjects.Particles.ParticleDeathCallback}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.deathCallback = null;\r\n\r\n        /**\r\n         * The calling context for {@link Phaser.GameObjects.Particles.ParticleEmitter#deathCallback}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#deathCallbackScope\r\n         * @type {?*}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.deathCallbackScope = null;\r\n\r\n        /**\r\n         * Set to hard limit the amount of particle objects this emitter is allowed to create.\r\n         * 0 means unlimited.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#maxParticles\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.maxParticles = 0;\r\n\r\n        /**\r\n         * How many particles are emitted each time particles are emitted (one explosion or one flow cycle).\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#quantity\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setQuantity\r\n         */\r\n        this.quantity = new EmitterOp(config, 'quantity', 1, true);\r\n\r\n        /**\r\n         * How many ms to wait after emission before the particles start updating.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#delay\r\n         * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.delay = new EmitterOp(config, 'delay', 0, true);\r\n\r\n        /**\r\n         * For a flow emitter, the time interval (>= 0) between particle flow cycles in ms.\r\n         * A value of 0 means there is one particle flow cycle for each logic update (the maximum flow frequency). This is the default setting.\r\n         * For an exploding emitter, this value will be -1.\r\n         * Calling {@link Phaser.GameObjects.Particles.ParticleEmitter#flow} also puts the emitter in flow mode (frequency >= 0).\r\n         * Calling {@link Phaser.GameObjects.Particles.ParticleEmitter#explode} also puts the emitter in explode mode (frequency = -1).\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#frequency\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n         */\r\n        this.frequency = 0;\r\n\r\n        /**\r\n         * Controls if the emitter is currently emitting a particle flow (when frequency >= 0).\r\n         * Already alive particles will continue to update until they expire.\r\n         * Controlled by {@link Phaser.GameObjects.Particles.ParticleEmitter#start} and {@link Phaser.GameObjects.Particles.ParticleEmitter#stop}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#on\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.on = true;\r\n\r\n        /**\r\n         * Newly emitted particles are added to the top of the particle list, i.e. rendered above those already alive.\r\n         * Set to false to send them to the back.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#particleBringToTop\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.particleBringToTop = true;\r\n\r\n        /**\r\n         * The time rate applied to active particles, affecting lifespan, movement, and tweens. Values larger than 1 are faster than normal.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * An object describing a shape to emit particles from.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#emitZone\r\n         * @type {?Phaser.GameObjects.Particles.Zones.EdgeZone|Phaser.GameObjects.Particles.Zones.RandomZone}\r\n         * @default null\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setEmitZone\r\n         */\r\n        this.emitZone = null;\r\n\r\n        /**\r\n         * An object describing a shape that deactivates particles when they interact with it.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#deathZone\r\n         * @type {?Phaser.GameObjects.Particles.Zones.DeathZone}\r\n         * @default null\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setDeathZone\r\n         */\r\n        this.deathZone = null;\r\n\r\n        /**\r\n         * A rectangular boundary constraining particle movement.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#bounds\r\n         * @type {?Phaser.Geom.Rectangle}\r\n         * @default null\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setBounds\r\n         */\r\n        this.bounds = null;\r\n\r\n        /**\r\n         * Whether particles interact with the left edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#collideLeft\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.collideLeft = true;\r\n\r\n        /**\r\n         * Whether particles interact with the right edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#collideRight\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.collideRight = true;\r\n\r\n        /**\r\n         * Whether particles interact with the top edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#collideTop\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.collideTop = true;\r\n\r\n        /**\r\n         * Whether particles interact with the bottom edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#collideBottom\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.collideBottom = true;\r\n\r\n        /**\r\n         * Whether this emitter updates itself and its particles.\r\n         *\r\n         * Controlled by {@link Phaser.GameObjects.Particles.ParticleEmitter#pause}\r\n         * and {@link Phaser.GameObjects.Particles.ParticleEmitter#resume}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * Set this to false to hide any active particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#visible\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setVisible\r\n         */\r\n        this.visible = true;\r\n\r\n        /**\r\n         * The blend mode of this emitter's particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#blendMode\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setBlendMode\r\n         */\r\n        this.blendMode = BlendModes.NORMAL;\r\n\r\n        /**\r\n         * A Game Object whose position is used as the particle origin.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#follow\r\n         * @type {?Phaser.GameObjects.GameObject}\r\n         * @default null\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#stopFollow\r\n         */\r\n        this.follow = null;\r\n\r\n        /**\r\n         * The offset of the particle origin from the {@link Phaser.GameObjects.Particles.ParticleEmitter#follow} target.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#followOffset\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n         */\r\n        this.followOffset = new Vector2();\r\n\r\n        /**\r\n         * Whether the emitter's {@link Phaser.GameObjects.Particles.ParticleEmitter#visible} state will track\r\n         * the {@link Phaser.GameObjects.Particles.ParticleEmitter#follow} target's visibility state.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#trackVisible\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n         */\r\n        this.trackVisible = false;\r\n\r\n        /**\r\n         * The current texture frame, as an index of {@link Phaser.GameObjects.Particles.ParticleEmitter#frames}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#currentFrame\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n         */\r\n        this.currentFrame = 0;\r\n\r\n        /**\r\n         * Whether texture {@link Phaser.GameObjects.Particles.ParticleEmitter#frames} are selected at random.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#randomFrame\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n         */\r\n        this.randomFrame = true;\r\n\r\n        /**\r\n         * The number of consecutive particles that receive a single texture frame (per frame cycle).\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#frameQuantity\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n         */\r\n        this.frameQuantity = 1;\r\n\r\n        /**\r\n         * Inactive particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#dead\r\n         * @type {Phaser.GameObjects.Particles.Particle[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.dead = [];\r\n\r\n        /**\r\n         * Active particles\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#alive\r\n         * @type {Phaser.GameObjects.Particles.Particle[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.alive = [];\r\n\r\n        /**\r\n         * The time until the next flow cycle.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#_counter\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._counter = 0;\r\n\r\n        /**\r\n         * Counts up to {@link Phaser.GameObjects.Particles.ParticleEmitter#frameQuantity}.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitter#_frameCounter\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._frameCounter = 0;\r\n\r\n        if (config)\r\n        {\r\n            this.fromJSON(config);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Merges configuration settings into the emitter's current settings.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#fromJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for this emitter.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    fromJSON: function (config)\r\n    {\r\n        if (!config)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        //  Only update properties from their current state if they exist in the given config\r\n\r\n        var i = 0;\r\n        var key = '';\r\n\r\n        for (i = 0; i < this.configFastMap.length; i++)\r\n        {\r\n            key = this.configFastMap[i];\r\n\r\n            if (HasValue(config, key))\r\n            {\r\n                this[key] = GetFastValue(config, key);\r\n            }\r\n        }\r\n\r\n        for (i = 0; i < this.configOpMap.length; i++)\r\n        {\r\n            key = this.configOpMap[i];\r\n\r\n            if (HasValue(config, key))\r\n            {\r\n                this[key].loadConfig(config);\r\n            }\r\n        }\r\n\r\n        this.acceleration = (this.accelerationX.propertyValue !== 0 || this.accelerationY.propertyValue !== 0);\r\n\r\n        this.moveTo = (this.moveToX.propertyValue !== 0 || this.moveToY.propertyValue !== 0);\r\n\r\n        //  Special 'speed' override\r\n\r\n        if (HasValue(config, 'speed'))\r\n        {\r\n            this.speedX.loadConfig(config, 'speed');\r\n            this.speedY = null;\r\n        }\r\n\r\n        //  If you specify speedX, speedY or moveTo then it changes the emitter from radial to a point emitter\r\n        if (HasAny(config, [ 'speedX', 'speedY' ]) || this.moveTo)\r\n        {\r\n            this.radial = false;\r\n        }\r\n\r\n        //  Special 'scale' override\r\n\r\n        if (HasValue(config, 'scale'))\r\n        {\r\n            this.scaleX.loadConfig(config, 'scale');\r\n            this.scaleY = null;\r\n        }\r\n\r\n        if (HasValue(config, 'callbackScope'))\r\n        {\r\n            var callbackScope = GetFastValue(config, 'callbackScope', null);\r\n\r\n            this.emitCallbackScope = callbackScope;\r\n            this.deathCallbackScope = callbackScope;\r\n        }\r\n\r\n        if (HasValue(config, 'emitZone'))\r\n        {\r\n            this.setEmitZone(config.emitZone);\r\n        }\r\n\r\n        if (HasValue(config, 'deathZone'))\r\n        {\r\n            this.setDeathZone(config.deathZone);\r\n        }\r\n\r\n        if (HasValue(config, 'bounds'))\r\n        {\r\n            this.setBounds(config.bounds);\r\n        }\r\n\r\n        if (HasValue(config, 'followOffset'))\r\n        {\r\n            this.followOffset.setFromObject(GetFastValue(config, 'followOffset', 0));\r\n        }\r\n\r\n        if (HasValue(config, 'frame'))\r\n        {\r\n            this.setFrame(config.frame);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a description of this emitter suitable for JSON serialization.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} [output] - An object to copy output into.\r\n     *\r\n     * @return {object} - The output object.\r\n     */\r\n    toJSON: function (output)\r\n    {\r\n        if (output === undefined) { output = {}; }\r\n\r\n        var i = 0;\r\n        var key = '';\r\n\r\n        for (i = 0; i < this.configFastMap.length; i++)\r\n        {\r\n            key = this.configFastMap[i];\r\n\r\n            output[key] = this[key];\r\n        }\r\n\r\n        for (i = 0; i < this.configOpMap.length; i++)\r\n        {\r\n            key = this.configOpMap[i];\r\n\r\n            if (this[key])\r\n            {\r\n                output[key] = this[key].toJSON();\r\n            }\r\n        }\r\n\r\n        //  special handlers\r\n        if (!this.speedY)\r\n        {\r\n            delete output.speedX;\r\n            output.speed = this.speedX.toJSON();\r\n        }\r\n\r\n        if (!this.scaleY)\r\n        {\r\n            delete output.scaleX;\r\n            output.scale = this.scaleX.toJSON();\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Continuously moves the particle origin to follow a Game Object's position.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} target - The Game Object to follow.\r\n     * @param {number} [offsetX=0] - Horizontal offset of the particle origin from the Game Object.\r\n     * @param {number} [offsetY=0] - Vertical offset of the particle origin from the Game Object.\r\n     * @param {boolean} [trackVisible=false] - Whether the emitter's visible state will track the target's visible state.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    startFollow: function (target, offsetX, offsetY, trackVisible)\r\n    {\r\n        if (offsetX === undefined) { offsetX = 0; }\r\n        if (offsetY === undefined) { offsetY = 0; }\r\n        if (trackVisible === undefined) { trackVisible = false; }\r\n\r\n        this.follow = target;\r\n        this.followOffset.set(offsetX, offsetY);\r\n        this.trackVisible = trackVisible;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops following a Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#stopFollow\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    stopFollow: function ()\r\n    {\r\n        this.follow = null;\r\n        this.followOffset.set(0, 0);\r\n        this.trackVisible = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Chooses a texture frame from {@link Phaser.GameObjects.Particles.ParticleEmitter#frames}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#getFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Textures.Frame} The texture frame.\r\n     */\r\n    getFrame: function ()\r\n    {\r\n        if (this.frames.length === 1)\r\n        {\r\n            return this.defaultFrame;\r\n        }\r\n        else if (this.randomFrame)\r\n        {\r\n            return GetRandom(this.frames);\r\n        }\r\n        else\r\n        {\r\n            var frame = this.frames[this.currentFrame];\r\n\r\n            this._frameCounter++;\r\n\r\n            if (this._frameCounter === this.frameQuantity)\r\n            {\r\n                this._frameCounter = 0;\r\n                this.currentFrame = Wrap(this.currentFrame + 1, 0, this._frameLength);\r\n            }\r\n\r\n            return frame;\r\n        }\r\n    },\r\n\r\n    // frame: 0\r\n    // frame: 'red'\r\n    // frame: [ 0, 1, 2, 3 ]\r\n    // frame: [ 'red', 'green', 'blue', 'pink', 'white' ]\r\n    // frame: { frames: [ 'red', 'green', 'blue', 'pink', 'white' ], [cycle: bool], [quantity: int] }\r\n\r\n    /**\r\n     * Sets a pattern for assigning texture frames to emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(array|string|integer|Phaser.Types.GameObjects.Particles.ParticleEmitterFrameConfig)} frames - One or more texture frames, or a configuration object.\r\n     * @param {boolean} [pickRandom=true] - Whether frames should be assigned at random from `frames`.\r\n     * @param {integer} [quantity=1] - The number of consecutive particles that will receive each frame.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setFrame: function (frames, pickRandom, quantity)\r\n    {\r\n        if (pickRandom === undefined) { pickRandom = true; }\r\n        if (quantity === undefined) { quantity = 1; }\r\n\r\n        this.randomFrame = pickRandom;\r\n        this.frameQuantity = quantity;\r\n        this.currentFrame = 0;\r\n        this._frameCounter = 0;\r\n\r\n        var t = typeof (frames);\r\n\r\n        if (Array.isArray(frames) || t === 'string' || t === 'number')\r\n        {\r\n            this.manager.setEmitterFrames(frames, this);\r\n        }\r\n        else if (t === 'object')\r\n        {\r\n            var frameConfig = frames;\r\n\r\n            frames = GetFastValue(frameConfig, 'frames', null);\r\n\r\n            if (frames)\r\n            {\r\n                this.manager.setEmitterFrames(frames, this);\r\n            }\r\n\r\n            var isCycle = GetFastValue(frameConfig, 'cycle', false);\r\n\r\n            this.randomFrame = (isCycle) ? false : true;\r\n\r\n            this.frameQuantity = GetFastValue(frameConfig, 'quantity', quantity);\r\n        }\r\n\r\n        this._frameLength = this.frames.length;\r\n\r\n        if (this._frameLength === 1)\r\n        {\r\n            this.frameQuantity = 1;\r\n            this.randomFrame = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle movement on or off.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setRadial\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - Radial mode (true) or point mode (true).\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setRadial: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.radial = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the position of the emitter's particle origin.\r\n     * New particles will be emitted here.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} x - The x-coordinate of the particle origin.\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} y - The y-coordinate of the particle origin.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        this.x.onChange(x);\r\n        this.y.onChange(y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets or modifies a rectangular boundary constraining the particles.\r\n     *\r\n     * To remove the boundary, set {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds} to null.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|Phaser.Types.GameObjects.Particles.ParticleEmitterBounds|Phaser.Types.GameObjects.Particles.ParticleEmitterBoundsAlt)} x - The x-coordinate of the left edge of the boundary, or an object representing a rectangle.\r\n     * @param {number} y - The y-coordinate of the top edge of the boundary.\r\n     * @param {number} width - The width of the boundary.\r\n     * @param {number} height - The height of the boundary.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setBounds: function (x, y, width, height)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            var obj = x;\r\n\r\n            x = obj.x;\r\n            y = obj.y;\r\n            width = (HasValue(obj, 'w')) ? obj.w : obj.width;\r\n            height = (HasValue(obj, 'h')) ? obj.h : obj.height;\r\n        }\r\n\r\n        if (this.bounds)\r\n        {\r\n            this.bounds.setTo(x, y, width, height);\r\n        }\r\n        else\r\n        {\r\n            this.bounds = new Rectangle(x, y, width, height);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the initial horizontal speed of emitted particles.\r\n     * Changes the emitter to point mode.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeedX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setSpeedX: function (value)\r\n    {\r\n        this.speedX.onChange(value);\r\n\r\n        //  If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n        this.radial = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the initial vertical speed of emitted particles.\r\n     * Changes the emitter to point mode.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeedY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setSpeedY: function (value)\r\n    {\r\n        if (this.speedY)\r\n        {\r\n            this.speedY.onChange(value);\r\n\r\n            //  If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n            this.radial = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the initial radial speed of emitted particles.\r\n     * Changes the emitter to radial mode.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeed\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setSpeed: function (value)\r\n    {\r\n        this.speedX.onChange(value);\r\n        this.speedY = null;\r\n\r\n        //  If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n        this.radial = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal scale of emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setScaleX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setScaleX: function (value)\r\n    {\r\n        this.scaleX.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical scale of emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setScaleY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setScaleY: function (value)\r\n    {\r\n        this.scaleY.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scale of emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setScale: function (value)\r\n    {\r\n        this.scaleX.onChange(value);\r\n        this.scaleY = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal gravity applied to emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - Acceleration due to gravity, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setGravityX: function (value)\r\n    {\r\n        this.gravityX = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical gravity applied to emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - Acceleration due to gravity, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setGravityY: function (value)\r\n    {\r\n        this.gravityY = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the gravity applied to emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - Horizontal acceleration due to gravity, in pixels per second squared.\r\n     * @param {number} y - Vertical acceleration due to gravity, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setGravity: function (x, y)\r\n    {\r\n        this.gravityX = x;\r\n        this.gravityY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the opacity of emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - A value between 0 (transparent) and 1 (opaque).\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setAlpha: function (value)\r\n    {\r\n        this.alpha.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angle of a {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle stream.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setEmitterAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The angle of the initial velocity of emitted particles.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setEmitterAngle: function (value)\r\n    {\r\n        this.angle.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angle of a {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle stream.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The angle of the initial velocity of emitted particles.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setAngle: function (value)\r\n    {\r\n        this.angle.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the lifespan of newly emitted particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setLifespan\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The particle lifespan, in ms.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setLifespan: function (value)\r\n    {\r\n        this.lifespan.onChange(value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the number of particles released at each flow cycle or explosion.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setQuantity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} quantity - The number of particles to release at each flow cycle or explosion.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setQuantity: function (quantity)\r\n    {\r\n        this.quantity.onChange(quantity);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the emitter's {@link Phaser.GameObjects.Particles.ParticleEmitter#frequency}\r\n     * and {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} frequency - The time interval (>= 0) of each flow cycle, in ms; or -1 to put the emitter in explosion mode.\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} [quantity] - The number of particles to release at each flow cycle or explosion.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setFrequency: function (frequency, quantity)\r\n    {\r\n        this.frequency = frequency;\r\n\r\n        this._counter = 0;\r\n\r\n        if (quantity)\r\n        {\r\n            this.quantity.onChange(quantity);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets or removes the {@link Phaser.GameObjects.Particles.ParticleEmitter#emitZone}.\r\n     *\r\n     * An {@link Phaser.Types.GameObjects.Particles.ParticleEmitterEdgeZoneConfig EdgeZone} places particles on its edges. Its {@link Phaser.Types.GameObjects.Particles.EdgeZoneSource source} can be a Curve, Path, Circle, Ellipse, Line, Polygon, Rectangle, or Triangle; or any object with a suitable {@link Phaser.Types.GameObjects.Particles.EdgeZoneSourceCallback getPoints} method.\r\n     *\r\n     * A {@link Phaser.Types.GameObjects.Particles.ParticleEmitterRandomZoneConfig RandomZone} places randomly within its interior. Its {@link RandomZoneSource source} can be a Circle, Ellipse, Line, Polygon, Rectangle, or Triangle; or any object with a suitable {@link Phaser.Types.GameObjects.Particles.RandomZoneSourceCallback getRandomPoint} method.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setEmitZone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterEdgeZoneConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterRandomZoneConfig} [zoneConfig] - An object describing the zone, or `undefined` to remove any current emit zone.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setEmitZone: function (zoneConfig)\r\n    {\r\n        if (zoneConfig === undefined)\r\n        {\r\n            this.emitZone = null;\r\n        }\r\n        else\r\n        {\r\n            //  Where source = Geom like Circle, or a Path or Curve\r\n            //  emitZone: { type: 'random', source: X }\r\n            //  emitZone: { type: 'edge', source: X, quantity: 32, [stepRate=0], [yoyo=false], [seamless=true] }\r\n\r\n            var type = GetFastValue(zoneConfig, 'type', 'random');\r\n            var source = GetFastValue(zoneConfig, 'source', null);\r\n\r\n            switch (type)\r\n            {\r\n                case 'random':\r\n\r\n                    this.emitZone = new RandomZone(source);\r\n\r\n                    break;\r\n\r\n                case 'edge':\r\n\r\n                    var quantity = GetFastValue(zoneConfig, 'quantity', 1);\r\n                    var stepRate = GetFastValue(zoneConfig, 'stepRate', 0);\r\n                    var yoyo = GetFastValue(zoneConfig, 'yoyo', false);\r\n                    var seamless = GetFastValue(zoneConfig, 'seamless', true);\r\n\r\n                    this.emitZone = new EdgeZone(source, quantity, stepRate, yoyo, seamless);\r\n\r\n                    break;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets or removes the {@link Phaser.GameObjects.Particles.ParticleEmitter#deathZone}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#setDeathZone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterDeathZoneConfig} [zoneConfig] - An object describing the zone, or `undefined` to remove any current death zone.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    setDeathZone: function (zoneConfig)\r\n    {\r\n        if (zoneConfig === undefined)\r\n        {\r\n            this.deathZone = null;\r\n        }\r\n        else\r\n        {\r\n            //  Where source = Geom like Circle or Rect that supports a 'contains' function\r\n            //  deathZone: { type: 'onEnter', source: X }\r\n            //  deathZone: { type: 'onLeave', source: X }\r\n\r\n            var type = GetFastValue(zoneConfig, 'type', 'onEnter');\r\n            var source = GetFastValue(zoneConfig, 'source', null);\r\n\r\n            if (source && typeof source.contains === 'function')\r\n            {\r\n                var killOnEnter = (type === 'onEnter') ? true : false;\r\n\r\n                this.deathZone = new DeathZone(source, killOnEnter);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates inactive particles and adds them to this emitter's pool.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#reserve\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} particleCount - The number of particles to create.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    reserve: function (particleCount)\r\n    {\r\n        var dead = this.dead;\r\n\r\n        for (var i = 0; i < particleCount; i++)\r\n        {\r\n            dead.push(new this.particleClass(this));\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the number of active (in-use) particles in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#getAliveParticleCount\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of particles with `active=true`.\r\n     */\r\n    getAliveParticleCount: function ()\r\n    {\r\n        return this.alive.length;\r\n    },\r\n\r\n    /**\r\n     * Gets the number of inactive (available) particles in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#getDeadParticleCount\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of particles with `active=false`.\r\n     */\r\n    getDeadParticleCount: function ()\r\n    {\r\n        return this.dead.length;\r\n    },\r\n\r\n    /**\r\n     * Gets the total number of particles in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#getParticleCount\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} The number of particles, including both alive and dead.\r\n     */\r\n    getParticleCount: function ()\r\n    {\r\n        return this.getAliveParticleCount() + this.getDeadParticleCount();\r\n    },\r\n\r\n    /**\r\n     * Whether this emitter is at its limit (if set).\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#atLimit\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Returns `true` if this Emitter is at its limit, or `false` if no limit, or below the `maxParticles` level.\r\n     */\r\n    atLimit: function ()\r\n    {\r\n        return (this.maxParticles > 0 && this.getParticleCount() === this.maxParticles);\r\n    },\r\n\r\n    /**\r\n     * Sets a function to call for each newly emitted particle.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#onParticleEmit\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n     * @param {*} [context] - The calling context.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    onParticleEmit: function (callback, context)\r\n    {\r\n        if (callback === undefined)\r\n        {\r\n            //  Clear any previously set callback\r\n            this.emitCallback = null;\r\n            this.emitCallbackScope = null;\r\n        }\r\n        else if (typeof callback === 'function')\r\n        {\r\n            this.emitCallback = callback;\r\n\r\n            if (context)\r\n            {\r\n                this.emitCallbackScope = context;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a function to call for each particle death.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#onParticleDeath\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleDeathCallback} callback - The function.\r\n     * @param {*} [context] - The function's calling context.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    onParticleDeath: function (callback, context)\r\n    {\r\n        if (callback === undefined)\r\n        {\r\n            //  Clear any previously set callback\r\n            this.deathCallback = null;\r\n            this.deathCallbackScope = null;\r\n        }\r\n        else if (typeof callback === 'function')\r\n        {\r\n            this.deathCallback = callback;\r\n\r\n            if (context)\r\n            {\r\n                this.deathCallbackScope = context;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Deactivates every particle in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#killAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    killAll: function ()\r\n    {\r\n        var dead = this.dead;\r\n        var alive = this.alive;\r\n\r\n        while (alive.length > 0)\r\n        {\r\n            dead.push(alive.pop());\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calls a function for each active particle in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#forEachAlive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n     * @param {*} context - The function's calling context.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    forEachAlive: function (callback, context)\r\n    {\r\n        var alive = this.alive;\r\n        var length = alive.length;\r\n\r\n        for (var index = 0; index < length; ++index)\r\n        {\r\n            //  Sends the Particle and the Emitter\r\n            callback.call(context, alive[index], this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calls a function for each inactive particle in this emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#forEachDead\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n     * @param {*} context - The function's calling context.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    forEachDead: function (callback, context)\r\n    {\r\n        var dead = this.dead;\r\n        var length = dead.length;\r\n\r\n        for (var index = 0; index < length; ++index)\r\n        {\r\n            //  Sends the Particle and the Emitter\r\n            callback.call(context, dead[index], this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#on} the emitter and resets the flow counter.\r\n     *\r\n     * If this emitter is in flow mode (frequency >= 0; the default), the particle flow will start (or restart).\r\n     *\r\n     * If this emitter is in explode mode (frequency = -1), nothing will happen.\r\n     * Use {@link Phaser.GameObjects.Particles.ParticleEmitter#explode} or {@link Phaser.GameObjects.Particles.ParticleEmitter#flow} instead.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#start\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    start: function ()\r\n    {\r\n        this.on = true;\r\n\r\n        this._counter = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#on off} the emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#stop\r\n     * @since 3.11.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.on = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * {@link Phaser.GameObjects.Particles.ParticleEmitter#active Deactivates} the emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.active = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * {@link Phaser.GameObjects.Particles.ParticleEmitter#active Activates} the emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.active = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sorts active particles with {@link Phaser.GameObjects.Particles.ParticleEmitter#depthSortCallback}.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#depthSort\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    depthSort: function ()\r\n    {\r\n        StableSort.inplace(this.alive, this.depthSortCallback);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Puts the emitter in flow mode (frequency >= 0) and starts (or restarts) a particle flow.\r\n     *\r\n     * To resume a flow at the current frequency and quantity, use {@link Phaser.GameObjects.Particles.ParticleEmitter#start} instead.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#flow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} frequency - The time interval (>= 0) of each flow cycle, in ms.\r\n     * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} [count=1] - The number of particles to emit at each flow cycle.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n     */\r\n    flow: function (frequency, count)\r\n    {\r\n        if (count === undefined) { count = 1; }\r\n\r\n        this.frequency = frequency;\r\n\r\n        this.quantity.onChange(count);\r\n\r\n        return this.start();\r\n    },\r\n\r\n    /**\r\n     * Puts the emitter in explode mode (frequency = -1), stopping any current particle flow, and emits several particles all at once.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#explode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} count - The amount of Particles to emit.\r\n     * @param {number} x - The x coordinate to emit the Particles from.\r\n     * @param {number} y - The y coordinate to emit the Particles from.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n     */\r\n    explode: function (count, x, y)\r\n    {\r\n        this.frequency = -1;\r\n\r\n        return this.emitParticle(count, x, y);\r\n    },\r\n\r\n    /**\r\n     * Emits particles at a given position (or the emitter's current position).\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#emitParticleAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=this.x] - The x coordinate to emit the Particles from.\r\n     * @param {number} [y=this.x] - The y coordinate to emit the Particles from.\r\n     * @param {integer} [count=this.quantity] - The number of Particles to emit.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n     */\r\n    emitParticleAt: function (x, y, count)\r\n    {\r\n        return this.emitParticle(count, x, y);\r\n    },\r\n\r\n    /**\r\n     * Emits particles at a given position (or the emitter's current position).\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#emitParticle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [count=this.quantity] - The number of Particles to emit.\r\n     * @param {number} [x=this.x] - The x coordinate to emit the Particles from.\r\n     * @param {number} [y=this.x] - The y coordinate to emit the Particles from.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n     *\r\n     * @see Phaser.GameObjects.Particles.Particle#fire\r\n     */\r\n    emitParticle: function (count, x, y)\r\n    {\r\n        if (this.atLimit())\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (count === undefined)\r\n        {\r\n            count = this.quantity.onEmit();\r\n        }\r\n\r\n        var dead = this.dead;\r\n\r\n        for (var i = 0; i < count; i++)\r\n        {\r\n            var particle = dead.pop();\r\n\r\n            if (!particle)\r\n            {\r\n                particle = new this.particleClass(this);\r\n            }\r\n\r\n            particle.fire(x, y);\r\n\r\n            if (this.particleBringToTop)\r\n            {\r\n                this.alive.push(particle);\r\n            }\r\n            else\r\n            {\r\n                this.alive.unshift(particle);\r\n            }\r\n\r\n            if (this.emitCallback)\r\n            {\r\n                this.emitCallback.call(this.emitCallbackScope, particle, this);\r\n            }\r\n\r\n            if (this.atLimit())\r\n            {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return particle;\r\n    },\r\n\r\n    /**\r\n     * Updates this emitter and its particles.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#preUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    preUpdate: function (time, delta)\r\n    {\r\n        //  Scale the delta\r\n        delta *= this.timeScale;\r\n\r\n        var step = (delta / 1000);\r\n\r\n        if (this.trackVisible)\r\n        {\r\n            this.visible = this.follow.visible;\r\n        }\r\n\r\n        //  Any particle processors?\r\n        var processors = this.manager.getProcessors();\r\n\r\n        var particles = this.alive;\r\n        var dead = this.dead;\r\n\r\n        var i = 0;\r\n        var rip = [];\r\n        var length = particles.length;\r\n\r\n        for (i = 0; i < length; i++)\r\n        {\r\n            var particle = particles[i];\r\n\r\n            //  update returns `true` if the particle is now dead (lifeCurrent <= 0)\r\n            if (particle.update(delta, step, processors))\r\n            {\r\n                rip.push({ index: i, particle: particle });\r\n            }\r\n        }\r\n\r\n        //  Move dead particles to the dead array\r\n        length = rip.length;\r\n\r\n        if (length > 0)\r\n        {\r\n            var deathCallback = this.deathCallback;\r\n            var deathCallbackScope = this.deathCallbackScope;\r\n\r\n            for (i = length - 1; i >= 0; i--)\r\n            {\r\n                var entry = rip[i];\r\n\r\n                //  Remove from particles array\r\n                particles.splice(entry.index, 1);\r\n\r\n                //  Add to dead array\r\n                dead.push(entry.particle);\r\n\r\n                //  Callback\r\n                if (deathCallback)\r\n                {\r\n                    deathCallback.call(deathCallbackScope, entry.particle);\r\n                }\r\n\r\n                entry.particle.resetPosition();\r\n            }\r\n        }\r\n\r\n        if (!this.on)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (this.frequency === 0)\r\n        {\r\n            this.emitParticle();\r\n        }\r\n        else if (this.frequency > 0)\r\n        {\r\n            this._counter -= delta;\r\n\r\n            if (this._counter <= 0)\r\n            {\r\n                this.emitParticle();\r\n\r\n                //  counter = frequency - remained from previous delta\r\n                this._counter = (this.frequency - Math.abs(this._counter));\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calculates the difference of two particles, for sorting them by depth.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitter#depthSortCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} a - The first particle.\r\n     * @param {object} b - The second particle.\r\n     *\r\n     * @return {integer} The difference of a and b's y coordinates.\r\n     */\r\n    depthSortCallback: function (a, b)\r\n    {\r\n        return a.y - b.y;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ParticleEmitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyLmpzPzFmOTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFtQjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsMkZBQWtCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDckQsYUFBYSxtQkFBTyxDQUFDLG1GQUEyQjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQywrRUFBWTtBQUNuQyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBb0I7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLHlGQUE4QjtBQUN2RCxjQUFjLG1CQUFPLENBQUMscUVBQW9CO0FBQzFDLFdBQVcsbUJBQU8sQ0FBQywrREFBaUI7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzREFBc0QseUJBQXlCLG1GQUFtRjtBQUM1TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvREFBb0Q7QUFDL0QsV0FBVyx5REFBeUQ7QUFDcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQix5REFBeUQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSwwREFBMEQ7QUFDM0g7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSwwREFBMEQ7QUFDM0g7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscURBQXFELG1CQUFtQjs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsZ0VBQWdFO0FBQ3BHO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsaUVBQWlFO0FBQ3JHO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0RBQXdEO0FBQzVFLG9CQUFvQiwyREFBMkQ7QUFDL0U7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix5REFBeUQsTUFBTSx3REFBd0Q7QUFDako7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLDBEQUEwRDtBQUNuSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEVBQTBFLDBEQUEwRDtBQUNwSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0VBQXdFLDBEQUEwRDtBQUNsSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkVBQTJFLDBEQUEwRDtBQUNySTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixnQkFBZ0IsMERBQTBEO0FBQzFFO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQsMERBQTBEO0FBQ2pIO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsMkRBQTJEO0FBQzdGLGdCQUFnQiwwREFBMEQ7QUFDMUU7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNELDBEQUEwRDtBQUNoSDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsMERBQTBEO0FBQ3RGO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUIsaUVBQWlFO0FBQzFGO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5REFBeUQ7QUFDeEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7O0FBRUEsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsYUFBYTtBQUNqRCxvQ0FBb0MsYUFBYTtBQUNqRCx5Q0FBeUMsc0JBQXNCOztBQUUvRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHFDQUFxQywwREFBMEQ7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxRkFBcUY7QUFDcEcsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjtBQUMxRCxxQ0FBcUMsY0FBYzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGNBQWMsMERBQTBEO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEUsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQywwREFBMEQ7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhIQUE4SDtBQUM3SSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtIQUFrSDtBQUNqSTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0hBQWtIO0FBQ2pJO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrSEFBa0g7QUFDakk7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0hBQWtIO0FBQ2pJO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0QkFBNEIsMERBQTBEO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRCQUE0QiwwREFBMEQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdURBQXVEO0FBQ3RFO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDJCQUEyQjtBQUMzQixZQUFZLDREQUE0RDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTyxnRUFBZ0U7QUFDdEYsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRCQUE0Qiw0REFBNEQ7QUFDeEY7QUFDQSxXQUFXLGdGQUFnRixxQ0FBcUMsK0RBQStELDhFQUE4RSxnQ0FBZ0MsMEVBQTBFO0FBQ3ZYO0FBQ0EsVUFBVSxvRkFBb0YsMkNBQTJDLDhCQUE4QixpRUFBaUUsZ0NBQWdDLGlGQUFpRjtBQUN6VjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0lBQW9JO0FBQ25KO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0QkFBNEIsNkRBQTZEO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrRUFBa0U7QUFDakY7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLDRCQUE0Qjs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyREFBMkQ7QUFDMUUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5REFBeUQ7QUFDeEUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJEQUEyRDtBQUMxRSxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyREFBMkQ7QUFDMUUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsY0FBYyxzREFBc0Q7QUFDcEU7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLFlBQVksMkRBQTJELEtBQUssd0RBQXdEO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxjQUFjLDBEQUEwRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsUUFBUSxzRUFBc0U7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFFBQVEsb0VBQW9FO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxvQ0FBb0MscUVBQXFFO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLHlEQUF5RDtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0NBQXNDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQStCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBEZWF0aFpvbmUgPSByZXF1aXJlKCcuL3pvbmVzL0RlYXRoWm9uZScpO1xyXG52YXIgRWRnZVpvbmUgPSByZXF1aXJlKCcuL3pvbmVzL0VkZ2Vab25lJyk7XHJcbnZhciBFbWl0dGVyT3AgPSByZXF1aXJlKCcuL0VtaXR0ZXJPcCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR2V0UmFuZG9tID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYXJyYXkvR2V0UmFuZG9tJyk7XHJcbnZhciBIYXNBbnkgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSGFzQW55Jyk7XHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9IYXNWYWx1ZScpO1xyXG52YXIgUGFydGljbGUgPSByZXF1aXJlKCcuL1BhcnRpY2xlJyk7XHJcbnZhciBSYW5kb21ab25lID0gcmVxdWlyZSgnLi96b25lcy9SYW5kb21ab25lJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFN0YWJsZVNvcnQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheS9TdGFibGVTb3J0Jyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcbnZhciBXcmFwID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9XcmFwJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHBhcnRpY2xlIGVtaXR0ZXIgcmVwcmVzZW50cyBhIHNpbmdsZSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAqIEl0IGNvbnRyb2xzIGEgcG9vbCBvZiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSBQYXJ0aWNsZXN9IGFuZCBpcyBjb250cm9sbGVkIGJ5IGEge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXJ9LlxyXG4gKlxyXG4gKiBAY2xhc3MgUGFydGljbGVFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IG1hbmFnZXIgLSBUaGUgRW1pdHRlciBNYW5hZ2VyIHRoaXMgRW1pdHRlciBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBTZXR0aW5ncyBmb3IgdGhpcyBlbWl0dGVyLlxyXG4gKi9cclxudmFyIFBhcnRpY2xlRW1pdHRlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhcnRpY2xlRW1pdHRlciAobWFuYWdlciwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBFbWl0dGVyIE1hbmFnZXIgdGhpcyBFbWl0dGVyIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dHVyZSBhc3NpZ25lZCB0byBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN0ZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IG1hbmFnZXIudGV4dHVyZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgZnJhbWVzIGFzc2lnbmVkIHRvIHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lcyA9IFsgbWFuYWdlci5kZWZhdWx0RnJhbWUgXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNkZWZhdWx0RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZyYW1lID0gbWFuYWdlci5kZWZhdWx0RnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE5hbWVzIG9mIHNpbXBsZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjb25maWdGYXN0TWFwXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZ0Zhc3RNYXAgPSBbXHJcbiAgICAgICAgICAgICdhY3RpdmUnLFxyXG4gICAgICAgICAgICAnYmxlbmRNb2RlJyxcclxuICAgICAgICAgICAgJ2NvbGxpZGVCb3R0b20nLFxyXG4gICAgICAgICAgICAnY29sbGlkZUxlZnQnLFxyXG4gICAgICAgICAgICAnY29sbGlkZVJpZ2h0JyxcclxuICAgICAgICAgICAgJ2NvbGxpZGVUb3AnLFxyXG4gICAgICAgICAgICAnZGVhdGhDYWxsYmFjaycsXHJcbiAgICAgICAgICAgICdkZWF0aENhbGxiYWNrU2NvcGUnLFxyXG4gICAgICAgICAgICAnZW1pdENhbGxiYWNrJyxcclxuICAgICAgICAgICAgJ2VtaXRDYWxsYmFja1Njb3BlJyxcclxuICAgICAgICAgICAgJ2ZvbGxvdycsXHJcbiAgICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgICAnZ3Jhdml0eVgnLFxyXG4gICAgICAgICAgICAnZ3Jhdml0eVknLFxyXG4gICAgICAgICAgICAnbWF4UGFydGljbGVzJyxcclxuICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAnb24nLFxyXG4gICAgICAgICAgICAncGFydGljbGVCcmluZ1RvVG9wJyxcclxuICAgICAgICAgICAgJ3BhcnRpY2xlQ2xhc3MnLFxyXG4gICAgICAgICAgICAncmFkaWFsJyxcclxuICAgICAgICAgICAgJ3RpbWVTY2FsZScsXHJcbiAgICAgICAgICAgICd0cmFja1Zpc2libGUnLFxyXG4gICAgICAgICAgICAndmlzaWJsZSdcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBOYW1lcyBvZiBjb21wbGV4IGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbmZpZ09wTWFwXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZ09wTWFwID0gW1xyXG4gICAgICAgICAgICAnYWNjZWxlcmF0aW9uWCcsXHJcbiAgICAgICAgICAgICdhY2NlbGVyYXRpb25ZJyxcclxuICAgICAgICAgICAgJ2FuZ2xlJyxcclxuICAgICAgICAgICAgJ2FscGhhJyxcclxuICAgICAgICAgICAgJ2JvdW5jZScsXHJcbiAgICAgICAgICAgICdkZWxheScsXHJcbiAgICAgICAgICAgICdsaWZlc3BhbicsXHJcbiAgICAgICAgICAgICdtYXhWZWxvY2l0eVgnLFxyXG4gICAgICAgICAgICAnbWF4VmVsb2NpdHlZJyxcclxuICAgICAgICAgICAgJ21vdmVUb1gnLFxyXG4gICAgICAgICAgICAnbW92ZVRvWScsXHJcbiAgICAgICAgICAgICdxdWFudGl0eScsXHJcbiAgICAgICAgICAgICdyb3RhdGUnLFxyXG4gICAgICAgICAgICAnc2NhbGVYJyxcclxuICAgICAgICAgICAgJ3NjYWxlWScsXHJcbiAgICAgICAgICAgICdzcGVlZFgnLFxyXG4gICAgICAgICAgICAnc3BlZWRZJyxcclxuICAgICAgICAgICAgJ3RpbnQnLFxyXG4gICAgICAgICAgICAneCcsXHJcbiAgICAgICAgICAgICd5J1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIG5ldmVyIHBvcHVsYXRlZCBieSBQaGFzZXIsIHRoaXMgaXMgbGVmdCBmb3IgZGV2ZWxvcGVycyB0byB1c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgUGFydGljbGUgQ2xhc3Mgd2hpY2ggd2lsbCBiZSBlbWl0dGVkIGJ5IHRoaXMgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3BhcnRpY2xlQ2xhc3NcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXJ0aWNsZUNsYXNzID0gUGFydGljbGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHBhcnRpY2xlIG9yaWdpbiAod2hlcmUgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN4XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFBvc2l0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICd4JywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBhcnRpY2xlIG9yaWdpbiAod2hlcmUgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFBvc2l0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICd5JywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmFkaWFsIGVtaXR0ZXIgd2lsbCBlbWl0IHBhcnRpY2xlcyBpbiBhbGwgZGlyZWN0aW9ucyBiZXR3ZWVuIGFuZ2xlIG1pbiBhbmQgbWF4LFxyXG4gICAgICAgICAqIHVzaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZH0gYXMgdGhlIHZhbHVlLiBJZiBzZXQgdG8gZmFsc2UgdGhlbiB0aGlzIGFjdHMgYXMgYSBwb2ludCBFbWl0dGVyLlxyXG4gICAgICAgICAqIEEgcG9pbnQgZW1pdHRlciB3aWxsIGVtaXQgcGFydGljbGVzIG9ubHkgaW4gdGhlIGRpcmVjdGlvbiBkZXJpdmVkIGZyb20gdGhlIHNwZWVkWCBhbmQgc3BlZWRZIHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3JhZGlhbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFJhZGlhbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaWFsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2dyYXZpdHlYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRHcmF2aXR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ncmF2aXR5WCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFZlcnRpY2FsIGFjY2VsZXJhdGlvbiBhcHBsaWVkIHRvIGVtaXR0ZWQgcGFydGljbGVzLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZ3Jhdml0eVlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBhY2NlbGVyYXRpb25YIGFuZCBhY2NlbGVyYXRpb25ZIGFyZSBub24temVyby4gU2V0IGF1dG9tYXRpY2FsbHkgZHVyaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvcml6b250YWwgYWNjZWxlcmF0aW9uIGFwcGxpZWQgdG8gZW1pdHRlZCBwYXJ0aWNsZXMsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25YXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FjY2VsZXJhdGlvblgnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmVydGljYWwgYWNjZWxlcmF0aW9uIGFwcGxpZWQgdG8gZW1pdHRlZCBwYXJ0aWNsZXMsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25ZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FjY2VsZXJhdGlvblknLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI21heFZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMDAwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4VmVsb2NpdHlYID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdtYXhWZWxvY2l0eVgnLCAxMDAwMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHZlcnRpY2FsIHZlbG9jaXR5IG9mIGVtaXR0ZWQgcGFydGljbGVzLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbWF4VmVsb2NpdHlZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMDAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ21heFZlbG9jaXR5WScsIDEwMDAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluaXRpYWwgaG9yaXpvbnRhbCBzcGVlZCBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRYXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGVlZFggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ3NwZWVkWCcsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5pdGlhbCB2ZXJ0aWNhbCBzcGVlZCBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRZXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGVlZFkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ3NwZWVkWScsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIG1vdmVUb1ggYW5kIG1vdmVUb1kgYXJlIG5vbnplcm8uIFNldCBhdXRvbWF0aWNhbGx5IGR1cmluZyBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUbyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeC1jb29yZGluYXRlIGVtaXR0ZWQgcGFydGljbGVzIG1vdmUgdG93YXJkLCB3aGVuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtb3ZlVG99IGlzIHRydWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtb3ZlVG9YXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUb1ggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ21vdmVUb1gnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHktY29vcmRpbmF0ZSBlbWl0dGVkIHBhcnRpY2xlcyBtb3ZlIHRvd2FyZCwgd2hlbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvfSBpcyB0cnVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvWVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3ZlVG9ZID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdtb3ZlVG9ZJywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgcGFydGljbGVzIHdpbGwgcmVib3VuZCB3aGVuIHRoZXkgbWVldCB0aGUgZW1pdHRlciBib3VuZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNib3VuY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmNlID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdib3VuY2UnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzY2FsZVhcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U2NhbGVcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFNjYWxlWFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVYID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdzY2FsZVgnLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIHNjYWxlIG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2NhbGVZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFNjYWxlXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVlcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjYWxlWSA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAnc2NhbGVZJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbG9yIHRpbnQgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy4gQW55IGFscGhhIGNvbXBvbmVudCAoMHhBQTAwMDAwMCkgaXMgaWdub3JlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3RpbnRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMHhmZmZmZmZmZlxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAndGludCcsIDB4ZmZmZmZmZmYpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgKHRyYW5zcGFyZW5jeSkgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbHBoYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FscGhhJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsaWZlc3BhbiBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNsaWZlc3BhblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMDAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRMaWZlc3BhblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZXNwYW4gPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2xpZmVzcGFuJywgMTAwMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbmdsZSBvZiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2FuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHsgbWluOiAwLCBtYXg6IDM2MCB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbmdsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5nbGUgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FuZ2xlJywgeyBtaW46IDAsIG1heDogMzYwIH0sIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcm90YXRpb24gb2YgZW1pdHRlZCBwYXJ0aWNsZXMsIGluIGRlZ3JlZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm90YXRlID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdyb3RhdGUnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBwYXJ0aWNsZSBpcyBlbWl0dGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZW1pdENhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlckNhbGxiYWNrfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtaXRDYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNlbWl0Q2FsbGJhY2t9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZW1pdENhbGxiYWNrU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7Pyp9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdENhbGxiYWNrU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIHBhcnRpY2xlIGRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNkZWF0aENhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRGVhdGhDYWxsYmFja31cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWF0aENhbGxiYWNrID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGxpbmcgY29udGV4dCBmb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlYXRoQ2FsbGJhY2t9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhdGhDYWxsYmFja1Njb3BlXHJcbiAgICAgICAgICogQHR5cGUgez8qfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNldCB0byBoYXJkIGxpbWl0IHRoZSBhbW91bnQgb2YgcGFydGljbGUgb2JqZWN0cyB0aGlzIGVtaXR0ZXIgaXMgYWxsb3dlZCB0byBjcmVhdGUuXHJcbiAgICAgICAgICogMCBtZWFucyB1bmxpbWl0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtYXhQYXJ0aWNsZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhQYXJ0aWNsZXMgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb3cgbWFueSBwYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgZWFjaCB0aW1lIHBhcnRpY2xlcyBhcmUgZW1pdHRlZCAob25lIGV4cGxvc2lvbiBvciBvbmUgZmxvdyBjeWNsZSkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNxdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRGcmVxdWVuY3lcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFF1YW50aXR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5xdWFudGl0eSA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAncXVhbnRpdHknLCAxLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG1hbnkgbXMgdG8gd2FpdCBhZnRlciBlbWlzc2lvbiBiZWZvcmUgdGhlIHBhcnRpY2xlcyBzdGFydCB1cGRhdGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlbGF5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGF5ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdkZWxheScsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGb3IgYSBmbG93IGVtaXR0ZXIsIHRoZSB0aW1lIGludGVydmFsICg+PSAwKSBiZXR3ZWVuIHBhcnRpY2xlIGZsb3cgY3ljbGVzIGluIG1zLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGVyZSBpcyBvbmUgcGFydGljbGUgZmxvdyBjeWNsZSBmb3IgZWFjaCBsb2dpYyB1cGRhdGUgKHRoZSBtYXhpbXVtIGZsb3cgZnJlcXVlbmN5KS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLlxyXG4gICAgICAgICAqIEZvciBhbiBleHBsb2RpbmcgZW1pdHRlciwgdGhpcyB2YWx1ZSB3aWxsIGJlIC0xLlxyXG4gICAgICAgICAqIENhbGxpbmcge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2Zsb3d9IGFsc28gcHV0cyB0aGUgZW1pdHRlciBpbiBmbG93IG1vZGUgKGZyZXF1ZW5jeSA+PSAwKS5cclxuICAgICAgICAgKiBDYWxsaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNleHBsb2RlfSBhbHNvIHB1dHMgdGhlIGVtaXR0ZXIgaW4gZXhwbG9kZSBtb2RlIChmcmVxdWVuY3kgPSAtMSkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmcmVxdWVuY3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyZXF1ZW5jeVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhlIGVtaXR0ZXIgaXMgY3VycmVudGx5IGVtaXR0aW5nIGEgcGFydGljbGUgZmxvdyAod2hlbiBmcmVxdWVuY3kgPj0gMCkuXHJcbiAgICAgICAgICogQWxyZWFkeSBhbGl2ZSBwYXJ0aWNsZXMgd2lsbCBjb250aW51ZSB0byB1cGRhdGUgdW50aWwgdGhleSBleHBpcmUuXHJcbiAgICAgICAgICogQ29udHJvbGxlZCBieSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnR9IGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcH0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNvblxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTmV3bHkgZW1pdHRlZCBwYXJ0aWNsZXMgYXJlIGFkZGVkIHRvIHRoZSB0b3Agb2YgdGhlIHBhcnRpY2xlIGxpc3QsIGkuZS4gcmVuZGVyZWQgYWJvdmUgdGhvc2UgYWxyZWFkeSBhbGl2ZS5cclxuICAgICAgICAgKiBTZXQgdG8gZmFsc2UgdG8gc2VuZCB0aGVtIHRvIHRoZSBiYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcGFydGljbGVCcmluZ1RvVG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFydGljbGVCcmluZ1RvVG9wID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgcmF0ZSBhcHBsaWVkIHRvIGFjdGl2ZSBwYXJ0aWNsZXMsIGFmZmVjdGluZyBsaWZlc3BhbiwgbW92ZW1lbnQsIGFuZCB0d2VlbnMuIFZhbHVlcyBsYXJnZXIgdGhhbiAxIGFyZSBmYXN0ZXIgdGhhbiBub3JtYWwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN0aW1lU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWVTY2FsZSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBkZXNjcmliaW5nIGEgc2hhcGUgdG8gZW1pdCBwYXJ0aWNsZXMgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRab25lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lfFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuUmFuZG9tWm9uZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRFbWl0Wm9uZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdFpvbmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgZGVzY3JpYmluZyBhIHNoYXBlIHRoYXQgZGVhY3RpdmF0ZXMgcGFydGljbGVzIHdoZW4gdGhleSBpbnRlcmFjdCB3aXRoIGl0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhdGhab25lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkRlYXRoWm9uZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXREZWF0aFpvbmVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYXRoWm9uZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVjdGFuZ3VsYXIgYm91bmRhcnkgY29uc3RyYWluaW5nIHBhcnRpY2xlIG1vdmVtZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0Qm91bmRzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBpbnRlcmFjdCB3aXRoIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGVtaXR0ZXIge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2JvdW5kc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjb2xsaWRlTGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVMZWZ0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBwYXJ0aWNsZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgZW1pdHRlciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzfS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbGxpZGVSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVSaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgcGFydGljbGVzIGludGVyYWN0IHdpdGggdGhlIHRvcCBlZGdlIG9mIHRoZSBlbWl0dGVyIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNib3VuZHN9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjY29sbGlkZVRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBpbnRlcmFjdCB3aXRoIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgZW1pdHRlciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzfS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbGxpZGVCb3R0b21cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlQm90dG9tID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIGVtaXR0ZXIgdXBkYXRlcyBpdHNlbGYgYW5kIGl0cyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDb250cm9sbGVkIGJ5IHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNwYXVzZX1cclxuICAgICAgICAgKiBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3Jlc3VtZX0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXQgdGhpcyB0byBmYWxzZSB0byBoaWRlIGFueSBhY3RpdmUgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdmlzaWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFZpc2libGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYmxlbmQgbW9kZSBvZiB0aGlzIGVtaXR0ZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNibGVuZE1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEJsZW5kTW9kZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxlbmRNb2RlID0gQmxlbmRNb2Rlcy5OT1JNQUw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgR2FtZSBPYmplY3Qgd2hvc2UgcG9zaXRpb24gaXMgdXNlZCBhcyB0aGUgcGFydGljbGUgb3JpZ2luLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZm9sbG93XHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzdGFydEZvbGxvd1xyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcEZvbGxvd1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG9mZnNldCBvZiB0aGUgcGFydGljbGUgb3JpZ2luIGZyb20gdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb2xsb3d9IHRhcmdldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZvbGxvd09mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnRGb2xsb3dcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGVtaXR0ZXIncyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdmlzaWJsZX0gc3RhdGUgd2lsbCB0cmFja1xyXG4gICAgICAgICAqIHRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZm9sbG93fSB0YXJnZXQncyB2aXNpYmlsaXR5IHN0YXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdHJhY2tWaXNpYmxlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0Rm9sbG93XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFja1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgdGV4dHVyZSBmcmFtZSwgYXMgYW4gaW5kZXggb2Yge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjdXJyZW50RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRGcmFtZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0ZXh0dXJlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmcmFtZXN9IGFyZSBzZWxlY3RlZCBhdCByYW5kb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyYW5kb21GcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyYW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFydGljbGVzIHRoYXQgcmVjZWl2ZSBhIHNpbmdsZSB0ZXh0dXJlIGZyYW1lIChwZXIgZnJhbWUgY3ljbGUpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJhbWVRdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyYW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5hY3RpdmUgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYWQgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWN0aXZlIHBhcnRpY2xlc1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWxpdmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZVtdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbGl2ZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSB1bnRpbCB0aGUgbmV4dCBmbG93IGN5Y2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjX2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb3VudHMgdXAgdG8ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lUXVhbnRpdHl9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjX2ZyYW1lQ291bnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21KU09OKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGludG8gdGhlIGVtaXR0ZXIncyBjdXJyZW50IHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJvbUpTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd9IGNvbmZpZyAtIFNldHRpbmdzIGZvciB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgZnJvbUpTT046IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBPbmx5IHVwZGF0ZSBwcm9wZXJ0aWVzIGZyb20gdGhlaXIgY3VycmVudCBzdGF0ZSBpZiB0aGV5IGV4aXN0IGluIHRoZSBnaXZlbiBjb25maWdcclxuXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIHZhciBrZXkgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY29uZmlnRmFzdE1hcC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IHRoaXMuY29uZmlnRmFzdE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsIGtleSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IEdldEZhc3RWYWx1ZShjb25maWcsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ09wTWFwLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gdGhpcy5jb25maWdPcE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsIGtleSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XS5sb2FkQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uID0gKHRoaXMuYWNjZWxlcmF0aW9uWC5wcm9wZXJ0eVZhbHVlICE9PSAwIHx8IHRoaXMuYWNjZWxlcmF0aW9uWS5wcm9wZXJ0eVZhbHVlICE9PSAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlVG8gPSAodGhpcy5tb3ZlVG9YLnByb3BlcnR5VmFsdWUgIT09IDAgfHwgdGhpcy5tb3ZlVG9ZLnByb3BlcnR5VmFsdWUgIT09IDApO1xyXG5cclxuICAgICAgICAvLyAgU3BlY2lhbCAnc3BlZWQnIG92ZXJyaWRlXHJcblxyXG4gICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsICdzcGVlZCcpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFgubG9hZENvbmZpZyhjb25maWcsICdzcGVlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnNwZWVkWSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYLCBzcGVlZFkgb3IgbW92ZVRvIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICBpZiAoSGFzQW55KGNvbmZpZywgWyAnc3BlZWRYJywgJ3NwZWVkWScgXSkgfHwgdGhpcy5tb3ZlVG8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNwZWNpYWwgJ3NjYWxlJyBvdmVycmlkZVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnc2NhbGUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVYLmxvYWRDb25maWcoY29uZmlnLCAnc2NhbGUnKTtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZVkgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEhhc1ZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja1Njb3BlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrU2NvcGUgPSBjYWxsYmFja1Njb3BlO1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IGNhbGxiYWNrU2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZW1pdFpvbmUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RW1pdFpvbmUoY29uZmlnLmVtaXRab25lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsICdkZWF0aFpvbmUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGVhdGhab25lKGNvbmZpZy5kZWF0aFpvbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEhhc1ZhbHVlKGNvbmZpZywgJ2JvdW5kcycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRCb3VuZHMoY29uZmlnLmJvdW5kcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZm9sbG93T2Zmc2V0JykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXRGcm9tT2JqZWN0KEdldEZhc3RWYWx1ZShjb25maWcsICdmb2xsb3dPZmZzZXQnLCAwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZnJhbWUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RnJhbWUoY29uZmlnLmZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVtaXR0ZXIgc3VpdGFibGUgZm9yIEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIGNvcHkgb3V0cHV0IGludG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSAtIFRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IHt9OyB9XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIga2V5ID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ0Zhc3RNYXAubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXkgPSB0aGlzLmNvbmZpZ0Zhc3RNYXBbaV07XHJcblxyXG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IHRoaXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ09wTWFwLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gdGhpcy5jb25maWdPcE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzW2tleV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gdGhpc1trZXldLnRvSlNPTigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgc3BlY2lhbCBoYW5kbGVyc1xyXG4gICAgICAgIGlmICghdGhpcy5zcGVlZFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWxldGUgb3V0cHV0LnNwZWVkWDtcclxuICAgICAgICAgICAgb3V0cHV0LnNwZWVkID0gdGhpcy5zcGVlZFgudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NhbGVZKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsZXRlIG91dHB1dC5zY2FsZVg7XHJcbiAgICAgICAgICAgIG91dHB1dC5zY2FsZSA9IHRoaXMuc2NhbGVYLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250aW51b3VzbHkgbW92ZXMgdGhlIHBhcnRpY2xlIG9yaWdpbiB0byBmb2xsb3cgYSBHYW1lIE9iamVjdCdzIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnRGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBHYW1lIE9iamVjdCB0byBmb2xsb3cuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBIb3Jpem9udGFsIG9mZnNldCBvZiB0aGUgcGFydGljbGUgb3JpZ2luIGZyb20gdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gVmVydGljYWwgb2Zmc2V0IG9mIHRoZSBwYXJ0aWNsZSBvcmlnaW4gZnJvbSB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFja1Zpc2libGU9ZmFsc2VdIC0gV2hldGhlciB0aGUgZW1pdHRlcidzIHZpc2libGUgc3RhdGUgd2lsbCB0cmFjayB0aGUgdGFyZ2V0J3MgdmlzaWJsZSBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdGFydEZvbGxvdzogZnVuY3Rpb24gKHRhcmdldCwgb2Zmc2V0WCwgb2Zmc2V0WSwgdHJhY2tWaXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgICAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHRyYWNrVmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHRyYWNrVmlzaWJsZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gdGFyZ2V0O1xyXG4gICAgICAgIHRoaXMuZm9sbG93T2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTtcclxuICAgICAgICB0aGlzLnRyYWNrVmlzaWJsZSA9IHRyYWNrVmlzaWJsZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgZm9sbG93aW5nIGEgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzdG9wRm9sbG93XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdG9wRm9sbG93OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy50cmFja1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hvb3NlcyBhIHRleHR1cmUgZnJhbWUgZnJvbSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJhbWVzfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2dldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IFRoZSB0ZXh0dXJlIGZyYW1lLlxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZyYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnJhbmRvbUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIEdldFJhbmRvbSh0aGlzLmZyYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuZnJhbWVzW3RoaXMuY3VycmVudEZyYW1lXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlcisrO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQ291bnRlciA9PT0gdGhpcy5mcmFtZVF1YW50aXR5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZUNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBXcmFwKHRoaXMuY3VycmVudEZyYW1lICsgMSwgMCwgdGhpcy5fZnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnJhbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBmcmFtZTogMFxyXG4gICAgLy8gZnJhbWU6ICdyZWQnXHJcbiAgICAvLyBmcmFtZTogWyAwLCAxLCAyLCAzIF1cclxuICAgIC8vIGZyYW1lOiBbICdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScsICdwaW5rJywgJ3doaXRlJyBdXHJcbiAgICAvLyBmcmFtZTogeyBmcmFtZXM6IFsgJ3JlZCcsICdncmVlbicsICdibHVlJywgJ3BpbmsnLCAnd2hpdGUnIF0sIFtjeWNsZTogYm9vbF0sIFtxdWFudGl0eTogaW50XSB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgcGF0dGVybiBmb3IgYXNzaWduaW5nIHRleHR1cmUgZnJhbWVzIHRvIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGFycmF5fHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyRnJhbWVDb25maWcpfSBmcmFtZXMgLSBPbmUgb3IgbW9yZSB0ZXh0dXJlIGZyYW1lcywgb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BpY2tSYW5kb209dHJ1ZV0gLSBXaGV0aGVyIGZyYW1lcyBzaG91bGQgYmUgYXNzaWduZWQgYXQgcmFuZG9tIGZyb20gYGZyYW1lc2AuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtxdWFudGl0eT0xXSAtIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFydGljbGVzIHRoYXQgd2lsbCByZWNlaXZlIGVhY2ggZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0RnJhbWU6IGZ1bmN0aW9uIChmcmFtZXMsIHBpY2tSYW5kb20sIHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwaWNrUmFuZG9tID09PSB1bmRlZmluZWQpIHsgcGlja1JhbmRvbSA9IHRydWU7IH1cclxuICAgICAgICBpZiAocXVhbnRpdHkgPT09IHVuZGVmaW5lZCkgeyBxdWFudGl0eSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IHBpY2tSYW5kb207XHJcbiAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIHZhciB0ID0gdHlwZW9mIChmcmFtZXMpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmcmFtZXMpIHx8IHQgPT09ICdzdHJpbmcnIHx8IHQgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLnNldEVtaXR0ZXJGcmFtZXMoZnJhbWVzLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZnJhbWVDb25maWcgPSBmcmFtZXM7XHJcblxyXG4gICAgICAgICAgICBmcmFtZXMgPSBHZXRGYXN0VmFsdWUoZnJhbWVDb25maWcsICdmcmFtZXMnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcmFtZXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlci5zZXRFbWl0dGVyRnJhbWVzKGZyYW1lcywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpc0N5Y2xlID0gR2V0RmFzdFZhbHVlKGZyYW1lQ29uZmlnLCAnY3ljbGUnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmRvbUZyYW1lID0gKGlzQ3ljbGUpID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKGZyYW1lQ29uZmlnLCAncXVhbnRpdHknLCBxdWFudGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUxlbmd0aCA9IHRoaXMuZnJhbWVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lTGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHVybnMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3JhZGlhbH0gcGFydGljbGUgbW92ZW1lbnQgb24gb3Igb2ZmLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UmFkaWFsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIFJhZGlhbCBtb2RlICh0cnVlKSBvciBwb2ludCBtb2RlICh0cnVlKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRSYWRpYWw6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yYWRpYWwgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGVtaXR0ZXIncyBwYXJ0aWNsZSBvcmlnaW4uXHJcbiAgICAgKiBOZXcgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCBoZXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB4IC0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcGFydGljbGUgb3JpZ2luLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IHkgLSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBwYXJ0aWNsZSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueC5vbkNoYW5nZSh4KTtcclxuICAgICAgICB0aGlzLnkub25DaGFuZ2UoeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgbW9kaWZpZXMgYSByZWN0YW5ndWxhciBib3VuZGFyeSBjb25zdHJhaW5pbmcgdGhlIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBUbyByZW1vdmUgdGhlIGJvdW5kYXJ5LCBzZXQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2JvdW5kc30gdG8gbnVsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQm91bmRzfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQm91bmRzQWx0KX0geCAtIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm91bmRhcnksIG9yIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHRvcCBlZGdlIG9mIHRoZSBib3VuZGFyeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgYm91bmRhcnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSAoSGFzVmFsdWUob2JqLCAndycpKSA/IG9iai53IDogb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSAoSGFzVmFsdWUob2JqLCAnaCcpKSA/IG9iai5oIDogb2JqLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRzLnNldFRvKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbml0aWFsIGhvcml6b250YWwgc3BlZWQgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBlbWl0dGVyIHRvIHBvaW50IG1vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTcGVlZFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBzcGVlZCwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U3BlZWRYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zcGVlZFgub25DaGFuZ2UodmFsdWUpO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYIGFuZCBZIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbml0aWFsIHZlcnRpY2FsIHNwZWVkIG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICogQ2hhbmdlcyB0aGUgZW1pdHRlciB0byBwb2ludCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZX0gdmFsdWUgLSBUaGUgc3BlZWQsIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNwZWVkWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNwZWVkWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlZWRZLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBJZiB5b3Ugc3BlY2lmeSBzcGVlZFggYW5kIFkgdGhlbiBpdCBjaGFuZ2VzIHRoZSBlbWl0dGVyIGZyb20gcmFkaWFsIHRvIGEgcG9pbnQgZW1pdHRlclxyXG4gICAgICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5pdGlhbCByYWRpYWwgc3BlZWQgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBlbWl0dGVyIHRvIHJhZGlhbCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBzcGVlZCwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U3BlZWQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNwZWVkWC5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlZFkgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYIGFuZCBZIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICB0aGlzLnJhZGlhbCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZXxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlVHlwZSl9IHZhbHVlIC0gVGhlIHNjYWxlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NhbGVYLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZXxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlVHlwZSl9IHZhbHVlIC0gVGhlIHNjYWxlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NhbGVZLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25VcGRhdGVUeXBlKX0gdmFsdWUgLSBUaGUgc2NhbGUsIHJlbGF0aXZlIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U2NhbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNjYWxlWC5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0R3Jhdml0eVg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlYID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZlcnRpY2FsIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0R3Jhdml0eVk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gSG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFZlcnRpY2FsIGFjY2VsZXJhdGlvbiBkdWUgdG8gZ3Jhdml0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRHcmF2aXR5OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlYID0geDtcclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgb3BhY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPblVwZGF0ZVR5cGUpfSB2YWx1ZSAtIEEgdmFsdWUgYmV0d2VlbiAwICh0cmFuc3BhcmVudCkgYW5kIDEgKG9wYXF1ZSkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFscGhhLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcmFkaWFsfSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRFbWl0dGVyQW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBhbmdsZSBvZiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRFbWl0dGVyQW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFuZ2xlLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcmFkaWFsfSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IHZhbHVlIC0gVGhlIGFuZ2xlIG9mIHRoZSBpbml0aWFsIHZlbG9jaXR5IG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ2xlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmdsZS5vbkNoYW5nZSh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGxpZmVzcGFuIG9mIG5ld2x5IGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0TGlmZXNwYW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBwYXJ0aWNsZSBsaWZlc3BhbiwgaW4gbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0TGlmZXNwYW46IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxpZmVzcGFuLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhcnRpY2xlcyByZWxlYXNlZCBhdCBlYWNoIGZsb3cgY3ljbGUgb3IgZXhwbG9zaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UXVhbnRpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSBxdWFudGl0eSAtIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIHJlbGVhc2UgYXQgZWFjaCBmbG93IGN5Y2xlIG9yIGV4cGxvc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRRdWFudGl0eTogZnVuY3Rpb24gKHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucXVhbnRpdHkub25DaGFuZ2UocXVhbnRpdHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbWl0dGVyJ3Mge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyZXF1ZW5jeX1cclxuICAgICAqIGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcXVhbnRpdHl9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RnJlcXVlbmN5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJlcXVlbmN5IC0gVGhlIHRpbWUgaW50ZXJ2YWwgKD49IDApIG9mIGVhY2ggZmxvdyBjeWNsZSwgaW4gbXM7IG9yIC0xIHRvIHB1dCB0aGUgZW1pdHRlciBpbiBleHBsb3Npb24gbW9kZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSBbcXVhbnRpdHldIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBhdCBlYWNoIGZsb3cgY3ljbGUgb3IgZXhwbG9zaW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEZyZXF1ZW5jeTogZnVuY3Rpb24gKGZyZXF1ZW5jeSwgcXVhbnRpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICBpZiAocXVhbnRpdHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5Lm9uQ2hhbmdlKHF1YW50aXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRab25lfS5cclxuICAgICAqXHJcbiAgICAgKiBBbiB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJFZGdlWm9uZUNvbmZpZyBFZGdlWm9uZX0gcGxhY2VzIHBhcnRpY2xlcyBvbiBpdHMgZWRnZXMuIEl0cyB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZSBzb3VyY2V9IGNhbiBiZSBhIEN1cnZlLCBQYXRoLCBDaXJjbGUsIEVsbGlwc2UsIExpbmUsIFBvbHlnb24sIFJlY3RhbmdsZSwgb3IgVHJpYW5nbGU7IG9yIGFueSBvYmplY3Qgd2l0aCBhIHN1aXRhYmxlIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVkZ2Vab25lU291cmNlQ2FsbGJhY2sgZ2V0UG9pbnRzfSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQSB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJSYW5kb21ab25lQ29uZmlnIFJhbmRvbVpvbmV9IHBsYWNlcyByYW5kb21seSB3aXRoaW4gaXRzIGludGVyaW9yLiBJdHMge0BsaW5rIFJhbmRvbVpvbmVTb3VyY2Ugc291cmNlfSBjYW4gYmUgYSBDaXJjbGUsIEVsbGlwc2UsIExpbmUsIFBvbHlnb24sIFJlY3RhbmdsZSwgb3IgVHJpYW5nbGU7IG9yIGFueSBvYmplY3Qgd2l0aCBhIHN1aXRhYmxlIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlJhbmRvbVpvbmVTb3VyY2VDYWxsYmFjayBnZXRSYW5kb21Qb2ludH0gbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RW1pdFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJFZGdlWm9uZUNvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlclJhbmRvbVpvbmVDb25maWd9IFt6b25lQ29uZmlnXSAtIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSB6b25lLCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgYW55IGN1cnJlbnQgZW1pdCB6b25lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEVtaXRab25lOiBmdW5jdGlvbiAoem9uZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoem9uZUNvbmZpZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Wm9uZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXaGVyZSBzb3VyY2UgPSBHZW9tIGxpa2UgQ2lyY2xlLCBvciBhIFBhdGggb3IgQ3VydmVcclxuICAgICAgICAgICAgLy8gIGVtaXRab25lOiB7IHR5cGU6ICdyYW5kb20nLCBzb3VyY2U6IFggfVxyXG4gICAgICAgICAgICAvLyAgZW1pdFpvbmU6IHsgdHlwZTogJ2VkZ2UnLCBzb3VyY2U6IFgsIHF1YW50aXR5OiAzMiwgW3N0ZXBSYXRlPTBdLCBbeW95bz1mYWxzZV0sIFtzZWFtbGVzcz10cnVlXSB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAndHlwZScsICdyYW5kb20nKTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAnc291cmNlJywgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JhbmRvbSc6XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFpvbmUgPSBuZXcgUmFuZG9tWm9uZShzb3VyY2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdlZGdlJzpcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKHpvbmVDb25maWcsICdxdWFudGl0eScsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGVwUmF0ZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAnc3RlcFJhdGUnLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeW95byA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhbWxlc3MgPSBHZXRGYXN0VmFsdWUoem9uZUNvbmZpZywgJ3NlYW1sZXNzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFpvbmUgPSBuZXcgRWRnZVpvbmUoc291cmNlLCBxdWFudGl0eSwgc3RlcFJhdGUsIHlveW8sIHNlYW1sZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlYXRoWm9uZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXREZWF0aFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJEZWF0aFpvbmVDb25maWd9IFt6b25lQ29uZmlnXSAtIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSB6b25lLCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgYW55IGN1cnJlbnQgZGVhdGggem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXREZWF0aFpvbmU6IGZ1bmN0aW9uICh6b25lQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh6b25lQ29uZmlnID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoWm9uZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXaGVyZSBzb3VyY2UgPSBHZW9tIGxpa2UgQ2lyY2xlIG9yIFJlY3QgdGhhdCBzdXBwb3J0cyBhICdjb250YWlucycgZnVuY3Rpb25cclxuICAgICAgICAgICAgLy8gIGRlYXRoWm9uZTogeyB0eXBlOiAnb25FbnRlcicsIHNvdXJjZTogWCB9XHJcbiAgICAgICAgICAgIC8vICBkZWF0aFpvbmU6IHsgdHlwZTogJ29uTGVhdmUnLCBzb3VyY2U6IFggfVxyXG5cclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBHZXRGYXN0VmFsdWUoem9uZUNvbmZpZywgJ3R5cGUnLCAnb25FbnRlcicpO1xyXG4gICAgICAgICAgICB2YXIgc291cmNlID0gR2V0RmFzdFZhbHVlKHpvbmVDb25maWcsICdzb3VyY2UnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZS5jb250YWlucyA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtpbGxPbkVudGVyID0gKHR5cGUgPT09ICdvbkVudGVyJykgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWF0aFpvbmUgPSBuZXcgRGVhdGhab25lKHNvdXJjZSwga2lsbE9uRW50ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGluYWN0aXZlIHBhcnRpY2xlcyBhbmQgYWRkcyB0aGVtIHRvIHRoaXMgZW1pdHRlcidzIHBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyZXNlcnZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHBhcnRpY2xlQ291bnQgLSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0byBjcmVhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgcmVzZXJ2ZTogZnVuY3Rpb24gKHBhcnRpY2xlQ291bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRlYWQgPSB0aGlzLmRlYWQ7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydGljbGVDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVhZC5wdXNoKG5ldyB0aGlzLnBhcnRpY2xlQ2xhc3ModGhpcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSAoaW4tdXNlKSBwYXJ0aWNsZXMgaW4gdGhpcyBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZ2V0QWxpdmVQYXJ0aWNsZUNvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB3aXRoIGBhY3RpdmU9dHJ1ZWAuXHJcbiAgICAgKi9cclxuICAgIGdldEFsaXZlUGFydGljbGVDb3VudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZS5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGluYWN0aXZlIChhdmFpbGFibGUpIHBhcnRpY2xlcyBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNnZXREZWFkUGFydGljbGVDb3VudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgd2l0aCBgYWN0aXZlPWZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGVhZFBhcnRpY2xlQ291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVhZC5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhcnRpY2xlcyBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNnZXRQYXJ0aWNsZUNvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcywgaW5jbHVkaW5nIGJvdGggYWxpdmUgYW5kIGRlYWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBhcnRpY2xlQ291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxpdmVQYXJ0aWNsZUNvdW50KCkgKyB0aGlzLmdldERlYWRQYXJ0aWNsZUNvdW50KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIGVtaXR0ZXIgaXMgYXQgaXRzIGxpbWl0IChpZiBzZXQpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYXRMaW1pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBFbWl0dGVyIGlzIGF0IGl0cyBsaW1pdCwgb3IgYGZhbHNlYCBpZiBubyBsaW1pdCwgb3IgYmVsb3cgdGhlIGBtYXhQYXJ0aWNsZXNgIGxldmVsLlxyXG4gICAgICovXHJcbiAgICBhdExpbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5tYXhQYXJ0aWNsZXMgPiAwICYmIHRoaXMuZ2V0UGFydGljbGVDb3VudCgpID09PSB0aGlzLm1heFBhcnRpY2xlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggbmV3bHkgZW1pdHRlZCBwYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI29uUGFydGljbGVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY29udGV4dF0gLSBUaGUgY2FsbGluZyBjb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIG9uUGFydGljbGVFbWl0OiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2xlYXIgYW55IHByZXZpb3VzbHkgc2V0IGNhbGxiYWNrXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2tTY29wZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2tTY29wZSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHBhcnRpY2xlIGRlYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjb25QYXJ0aWNsZURlYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVEZWF0aENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gVGhlIGZ1bmN0aW9uJ3MgY2FsbGluZyBjb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIG9uUGFydGljbGVEZWF0aDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENsZWFyIGFueSBwcmV2aW91c2x5IHNldCBjYWxsYmFja1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhdGhDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhdGhDYWxsYmFja1Njb3BlID0gY29udGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVhY3RpdmF0ZXMgZXZlcnkgcGFydGljbGUgaW4gdGhpcyBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIja2lsbEFsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAga2lsbEFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGVhZCA9IHRoaXMuZGVhZDtcclxuICAgICAgICB2YXIgYWxpdmUgPSB0aGlzLmFsaXZlO1xyXG5cclxuICAgICAgICB3aGlsZSAoYWxpdmUubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlYWQucHVzaChhbGl2ZS5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoIGFjdGl2ZSBwYXJ0aWNsZSBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb3JFYWNoQWxpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0geyp9IGNvbnRleHQgLSBUaGUgZnVuY3Rpb24ncyBjYWxsaW5nIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgZm9yRWFjaEFsaXZlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFsaXZlID0gdGhpcy5hbGl2ZTtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gYWxpdmUubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNlbmRzIHRoZSBQYXJ0aWNsZSBhbmQgdGhlIEVtaXR0ZXJcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBhbGl2ZVtpbmRleF0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaCBpbmFjdGl2ZSBwYXJ0aWNsZSBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb3JFYWNoRGVhZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlckNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCAtIFRoZSBmdW5jdGlvbidzIGNhbGxpbmcgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBmb3JFYWNoRGVhZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkZWFkID0gdGhpcy5kZWFkO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBkZWFkLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBTZW5kcyB0aGUgUGFydGljbGUgYW5kIHRoZSBFbWl0dGVyXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgZGVhZFtpbmRleF0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHVybnMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI29ufSB0aGUgZW1pdHRlciBhbmQgcmVzZXRzIHRoZSBmbG93IGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhpcyBlbWl0dGVyIGlzIGluIGZsb3cgbW9kZSAoZnJlcXVlbmN5ID49IDA7IHRoZSBkZWZhdWx0KSwgdGhlIHBhcnRpY2xlIGZsb3cgd2lsbCBzdGFydCAob3IgcmVzdGFydCkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhpcyBlbWl0dGVyIGlzIGluIGV4cGxvZGUgbW9kZSAoZnJlcXVlbmN5ID0gLTEpLCBub3RoaW5nIHdpbGwgaGFwcGVuLlxyXG4gICAgICogVXNlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNleHBsb2RlfSBvciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZmxvd30gaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fY291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR1cm5zIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNvbiBvZmZ9IHRoZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWN0aXZlIERlYWN0aXZhdGVzfSB0aGUgZW1pdHRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3BhdXNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWN0aXZlIEFjdGl2YXRlc30gdGhlIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvcnRzIGFjdGl2ZSBwYXJ0aWNsZXMgd2l0aCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVwdGhTb3J0Q2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVwdGhTb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBkZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgU3RhYmxlU29ydC5pbnBsYWNlKHRoaXMuYWxpdmUsIHRoaXMuZGVwdGhTb3J0Q2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXRzIHRoZSBlbWl0dGVyIGluIGZsb3cgbW9kZSAoZnJlcXVlbmN5ID49IDApIGFuZCBzdGFydHMgKG9yIHJlc3RhcnRzKSBhIHBhcnRpY2xlIGZsb3cuXHJcbiAgICAgKlxyXG4gICAgICogVG8gcmVzdW1lIGEgZmxvdyBhdCB0aGUgY3VycmVudCBmcmVxdWVuY3kgYW5kIHF1YW50aXR5LCB1c2Uge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0fSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZmxvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyZXF1ZW5jeSAtIFRoZSB0aW1lIGludGVydmFsICg+PSAwKSBvZiBlYWNoIGZsb3cgY3ljbGUsIGluIG1zLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IFtjb3VudD0xXSAtIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIGVtaXQgYXQgZWFjaCBmbG93IGN5Y2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIGZsb3c6IGZ1bmN0aW9uIChmcmVxdWVuY3ksIGNvdW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSB7IGNvdW50ID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWFudGl0eS5vbkNoYW5nZShjb3VudCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyB0aGUgZW1pdHRlciBpbiBleHBsb2RlIG1vZGUgKGZyZXF1ZW5jeSA9IC0xKSwgc3RvcHBpbmcgYW55IGN1cnJlbnQgcGFydGljbGUgZmxvdywgYW5kIGVtaXRzIHNldmVyYWwgcGFydGljbGVzIGFsbCBhdCBvbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZXhwbG9kZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBjb3VudCAtIFRoZSBhbW91bnQgb2YgUGFydGljbGVzIHRvIGVtaXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZW1pdCB0aGUgUGFydGljbGVzIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZW1pdCB0aGUgUGFydGljbGVzIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gVGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBQYXJ0aWNsZS5cclxuICAgICAqL1xyXG4gICAgZXhwbG9kZTogZnVuY3Rpb24gKGNvdW50LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gLTE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmVtaXRQYXJ0aWNsZShjb3VudCwgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgcGFydGljbGVzIGF0IGEgZ2l2ZW4gcG9zaXRpb24gKG9yIHRoZSBlbWl0dGVyJ3MgY3VycmVudCBwb3NpdGlvbikuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNlbWl0UGFydGljbGVBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PXRoaXMueF0gLSBUaGUgeCBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXRoaXMueF0gLSBUaGUgeSBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9dGhpcy5xdWFudGl0eV0gLSBUaGUgbnVtYmVyIG9mIFBhcnRpY2xlcyB0byBlbWl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IFRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgUGFydGljbGUuXHJcbiAgICAgKi9cclxuICAgIGVtaXRQYXJ0aWNsZUF0OiBmdW5jdGlvbiAoeCwgeSwgY291bnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdFBhcnRpY2xlKGNvdW50LCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgYXQgYSBnaXZlbiBwb3NpdGlvbiAob3IgdGhlIGVtaXR0ZXIncyBjdXJyZW50IHBvc2l0aW9uKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRQYXJ0aWNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9dGhpcy5xdWFudGl0eV0gLSBUaGUgbnVtYmVyIG9mIFBhcnRpY2xlcyB0byBlbWl0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PXRoaXMueF0gLSBUaGUgeCBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXRoaXMueF0gLSBUaGUgeSBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IFRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2ZpcmVcclxuICAgICAqL1xyXG4gICAgZW1pdFBhcnRpY2xlOiBmdW5jdGlvbiAoY291bnQsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXRMaW1pdCgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucXVhbnRpdHkub25FbWl0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGVhZCA9IHRoaXMuZGVhZDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gZGVhZC5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFydGljbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlID0gbmV3IHRoaXMucGFydGljbGVDbGFzcyh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFydGljbGUuZmlyZSh4LCB5KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlQnJpbmdUb1RvcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGl2ZS5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxpdmUudW5zaGlmdChwYXJ0aWNsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXRDYWxsYmFjaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2suY2FsbCh0aGlzLmVtaXRDYWxsYmFja1Njb3BlLCBwYXJ0aWNsZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF0TGltaXQoKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoaXMgZW1pdHRlciBhbmQgaXRzIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNjYWxlIHRoZSBkZWx0YVxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICB2YXIgc3RlcCA9IChkZWx0YSAvIDEwMDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFja1Zpc2libGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmZvbGxvdy52aXNpYmxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFueSBwYXJ0aWNsZSBwcm9jZXNzb3JzP1xyXG4gICAgICAgIHZhciBwcm9jZXNzb3JzID0gdGhpcy5tYW5hZ2VyLmdldFByb2Nlc3NvcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlcyA9IHRoaXMuYWxpdmU7XHJcbiAgICAgICAgdmFyIGRlYWQgPSB0aGlzLmRlYWQ7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIgcmlwID0gW107XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHBhcnRpY2xlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICB1cGRhdGUgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhcnRpY2xlIGlzIG5vdyBkZWFkIChsaWZlQ3VycmVudCA8PSAwKVxyXG4gICAgICAgICAgICBpZiAocGFydGljbGUudXBkYXRlKGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmlwLnB1c2goeyBpbmRleDogaSwgcGFydGljbGU6IHBhcnRpY2xlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgTW92ZSBkZWFkIHBhcnRpY2xlcyB0byB0aGUgZGVhZCBhcnJheVxyXG4gICAgICAgIGxlbmd0aCA9IHJpcC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChsZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGRlYXRoQ2FsbGJhY2sgPSB0aGlzLmRlYXRoQ2FsbGJhY2s7XHJcbiAgICAgICAgICAgIHZhciBkZWF0aENhbGxiYWNrU2NvcGUgPSB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSByaXBbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlbW92ZSBmcm9tIHBhcnRpY2xlcyBhcnJheVxyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnNwbGljZShlbnRyeS5pbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEFkZCB0byBkZWFkIGFycmF5XHJcbiAgICAgICAgICAgICAgICBkZWFkLnB1c2goZW50cnkucGFydGljbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBDYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlYXRoQ2FsbGJhY2spXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVhdGhDYWxsYmFjay5jYWxsKGRlYXRoQ2FsbGJhY2tTY29wZSwgZW50cnkucGFydGljbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVudHJ5LnBhcnRpY2xlLnJlc2V0UG9zaXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0UGFydGljbGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmVxdWVuY3kgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY291bnRlciAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb3VudGVyIDw9IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFBhcnRpY2xlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIGNvdW50ZXIgPSBmcmVxdWVuY3kgLSByZW1haW5lZCBmcm9tIHByZXZpb3VzIGRlbHRhXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3VudGVyID0gKHRoaXMuZnJlcXVlbmN5IC0gTWF0aC5hYnModGhpcy5fY291bnRlcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIHBhcnRpY2xlcywgZm9yIHNvcnRpbmcgdGhlbSBieSBkZXB0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlcHRoU29ydENhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYSAtIFRoZSBmaXJzdCBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBiIC0gVGhlIHNlY29uZCBwYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgZGlmZmVyZW5jZSBvZiBhIGFuZCBiJ3MgeSBjb29yZGluYXRlcy5cclxuICAgICAqL1xyXG4gICAgZGVwdGhTb3J0Q2FsbGJhY2s6IGZ1bmN0aW9uIChhLCBiKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBhLnkgLSBiLnk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVFbWl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GravityWell = __webpack_require__(/*! ./GravityWell */ \"./node_modules/phaser/src/gameobjects/particles/GravityWell.js\");\r\nvar List = __webpack_require__(/*! ../../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\nvar ParticleEmitter = __webpack_require__(/*! ./ParticleEmitter */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\");\r\nvar Render = __webpack_require__(/*! ./ParticleManagerRender */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle Emitter Manager creates and controls {@link Phaser.GameObjects.Particles.ParticleEmitter Particle Emitters} and {@link Phaser.GameObjects.Particles.GravityWell Gravity Wells}.\r\n *\r\n * @class ParticleEmitterManager\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Emitter Manager belongs.\r\n * @param {string} texture - The key of the Texture this Emitter Manager will use to render particles, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Emitter Manager will use to render particles.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterConfig[]} [emitters] - Configuration settings for one or more emitters to create.\r\n */\r\nvar ParticleEmitterManager = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Depth,\r\n        Components.Mask,\r\n        Components.Pipeline,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    //  frame is optional and can contain the emitters array or object if skipped\r\n    function ParticleEmitterManager (scene, texture, frame, emitters)\r\n    {\r\n        GameObject.call(this, scene, 'ParticleEmitterManager');\r\n\r\n        /**\r\n         * The blend mode applied to all emitters and particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#blendMode\r\n         * @type {integer}\r\n         * @default -1\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.blendMode = -1;\r\n\r\n        /**\r\n         * The time scale applied to all emitters and particles, affecting flow rate, lifespan, and movement.\r\n         * Values larger than 1 are faster than normal.\r\n         * This is multiplied with any timeScale set on each individual emitter.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * The texture used to render this Emitter Manager's particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.texture = null;\r\n\r\n        /**\r\n         * The texture frame used to render this Emitter Manager's particles.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = null;\r\n\r\n        /**\r\n         * Names of this Emitter Manager's texture frames.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#frameNames\r\n         * @type {string[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.frameNames = [];\r\n\r\n        //  frame is optional and can contain the emitters array or object if skipped\r\n        if (frame !== null && (typeof frame === 'object' || Array.isArray(frame)))\r\n        {\r\n            emitters = frame;\r\n            frame = null;\r\n        }\r\n\r\n        this.setTexture(texture, frame);\r\n\r\n        this.initPipeline();\r\n\r\n        /**\r\n         * A list of Emitters being managed by this Emitter Manager.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#emitters\r\n         * @type {Phaser.Structs.List.<Phaser.GameObjects.Particles.ParticleEmitter>}\r\n         * @since 3.0.0\r\n         */\r\n        this.emitters = new List(this);\r\n\r\n        /**\r\n         * A list of Gravity Wells being managed by this Emitter Manager.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.ParticleEmitterManager#wells\r\n         * @type {Phaser.Structs.List.<Phaser.GameObjects.Particles.GravityWell>}\r\n         * @since 3.0.0\r\n         */\r\n        this.wells = new List(this);\r\n\r\n        if (emitters)\r\n        {\r\n            //  An array of emitter configs?\r\n            if (!Array.isArray(emitters))\r\n            {\r\n                emitters = [ emitters ];\r\n            }\r\n\r\n            for (var i = 0; i < emitters.length; i++)\r\n            {\r\n                this.createEmitter(emitters[i]);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the texture and frame this Emitter Manager will use to render with.\r\n     *\r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    setTexture: function (key, frame)\r\n    {\r\n        this.texture = this.scene.sys.textures.get(key);\r\n\r\n        return this.setFrame(frame);\r\n    },\r\n\r\n    /**\r\n     * Sets the frame this Emitter Manager will use to render with.\r\n     *\r\n     * The Frame has to belong to the current Texture being used.\r\n     *\r\n     * It can be either a string or an index.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    setFrame: function (frame)\r\n    {\r\n        this.frame = this.texture.get(frame);\r\n\r\n        var frames = this.texture.getFramesFromTextureSource(this.frame.sourceIndex);\r\n\r\n        var names = [];\r\n\r\n        frames.forEach(function (sourceFrame)\r\n        {\r\n            names.push(sourceFrame.name);\r\n        });\r\n\r\n        this.frameNames = names;\r\n\r\n        this.defaultFrame = this.frame;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Assigns texture frames to an emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setEmitterFrames\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Textures.Frame|Phaser.Textures.Frame[])} frames - The texture frames.\r\n     * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The particle emitter to modify.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    setEmitterFrames: function (frames, emitter)\r\n    {\r\n        if (!Array.isArray(frames))\r\n        {\r\n            frames = [ frames ];\r\n        }\r\n\r\n        var out = emitter.frames;\r\n\r\n        out.length = 0;\r\n\r\n        for (var i = 0; i < frames.length; i++)\r\n        {\r\n            var frame = frames[i];\r\n\r\n            if (this.frameNames.indexOf(frame) !== -1)\r\n            {\r\n                out.push(this.texture.get(frame));\r\n            }\r\n        }\r\n\r\n        if (out.length > 0)\r\n        {\r\n            emitter.defaultFrame = out[0];\r\n        }\r\n        else\r\n        {\r\n            emitter.defaultFrame = this.defaultFrame;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Particle Emitter to this Emitter Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#addEmitter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Particle Emitter to add to this Emitter Manager.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} The Particle Emitter that was added to this Emitter Manager.\r\n     */\r\n    addEmitter: function (emitter)\r\n    {\r\n        return this.emitters.add(emitter);\r\n    },\r\n\r\n    /**\r\n     * Creates a new Particle Emitter object, adds it to this Emitter Manager and returns a reference to it.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#createEmitter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Configuration settings for the Particle Emitter to create.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitter} The Particle Emitter that was created.\r\n     */\r\n    createEmitter: function (config)\r\n    {\r\n        return this.addEmitter(new ParticleEmitter(this, config));\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Gravity Well object to this Emitter Manager.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#addGravityWell\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.GravityWell} well - The Gravity Well to add to this Emitter Manager.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.GravityWell} The Gravity Well that was added to this Emitter Manager.\r\n     */\r\n    addGravityWell: function (well)\r\n    {\r\n        return this.wells.add(well);\r\n    },\r\n\r\n    /**\r\n     * Creates a new Gravity Well, adds it to this Emitter Manager and returns a reference to it.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#createGravityWell\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.GravityWellConfig} config - Configuration settings for the Gravity Well to create.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.GravityWell} The Gravity Well that was created.\r\n     */\r\n    createGravityWell: function (config)\r\n    {\r\n        return this.addGravityWell(new GravityWell(config));\r\n    },\r\n\r\n    /**\r\n     * Emits particles from each active emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#emitParticle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [count] - The number of particles to release from each emitter. The default is the emitter's own {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n     * @param {number} [x] - The x-coordinate to to emit particles from. The default is the x-coordinate of the emitter's current location.\r\n     * @param {number} [y] - The y-coordinate to to emit particles from. The default is the y-coordinate of the emitter's current location.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    emitParticle: function (count, x, y)\r\n    {\r\n        var emitters = this.emitters.list;\r\n\r\n        for (var i = 0; i < emitters.length; i++)\r\n        {\r\n            var emitter = emitters[i];\r\n\r\n            if (emitter.active)\r\n            {\r\n                emitter.emitParticle(count, x, y);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Emits particles from each active emitter.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#emitParticleAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x] - The x-coordinate to to emit particles from. The default is the x-coordinate of the emitter's current location.\r\n     * @param {number} [y] - The y-coordinate to to emit particles from. The default is the y-coordinate of the emitter's current location.\r\n     * @param {integer} [count] - The number of particles to release from each emitter. The default is the emitter's own {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    emitParticleAt: function (x, y, count)\r\n    {\r\n        return this.emitParticle(count, x, y);\r\n    },\r\n\r\n    /**\r\n     * Pauses this Emitter Manager.\r\n     *\r\n     * This has the effect of pausing all emitters, and all particles of those emitters, currently under its control.\r\n     *\r\n     * The particles will still render, but they will not have any of their logic updated.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.active = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes this Emitter Manager, should it have been previously paused.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.active = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets all active particle processors (gravity wells).\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#getProcessors\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.GravityWell[]} - The active gravity wells.\r\n     */\r\n    getProcessors: function ()\r\n    {\r\n        return this.wells.getAll('active', true);\r\n    },\r\n\r\n    /**\r\n     * Updates all active emitters.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#preUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    preUpdate: function (time, delta)\r\n    {\r\n        //  Scale the delta\r\n        delta *= this.timeScale;\r\n\r\n        var emitters = this.emitters.list;\r\n\r\n        for (var i = 0; i < emitters.length; i++)\r\n        {\r\n            var emitter = emitters[i];\r\n\r\n            if (emitter.active)\r\n            {\r\n                emitter.preUpdate(time, delta);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * A NOOP method so you can pass an EmitterManager to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setAlpha\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    setAlpha: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * A NOOP method so you can pass an EmitterManager to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setScrollFactor\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    setScrollFactor: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * A NOOP method so you can pass an EmitterManager to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setBlendMode\r\n     * @private\r\n     * @since 3.15.0\r\n     */\r\n    setBlendMode: function ()\r\n    {\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ParticleEmitterManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyTWFuYWdlci5qcz82MGNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLHFGQUFlO0FBQ3pDLFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsNkZBQW1CO0FBQ2pELGFBQWEsbUJBQU8sQ0FBQyx5R0FBeUI7O0FBRTlDO0FBQ0E7QUFDQSxvREFBb0QscUVBQXFFLE1BQU0sNkRBQTZEO0FBQzVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QixXQUFXLG9IQUFvSDtBQUMvSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isb0RBQW9EO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQixvREFBb0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUF5RDtBQUN4RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUNBQXlDO0FBQ3hEO0FBQ0EsZ0JBQWdCLHlDQUF5QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxREFBcUQ7QUFDcEU7QUFDQSxnQkFBZ0IseUNBQXlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVEsbUdBQW1HLDREQUE0RDtBQUN0TCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVEsbUdBQW1HLDREQUE0RDtBQUN0TDtBQUNBLGdCQUFnQixvREFBb0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHcmF2aXR5V2VsbCA9IHJlcXVpcmUoJy4vR3Jhdml0eVdlbGwnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi8uLi9zdHJ1Y3RzL0xpc3QnKTtcclxudmFyIFBhcnRpY2xlRW1pdHRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVFbWl0dGVyJyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlTWFuYWdlclJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXIgY3JlYXRlcyBhbmQgY29udHJvbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyIFBhcnRpY2xlIEVtaXR0ZXJzfSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwgR3Jhdml0eSBXZWxsc30uXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBFbWl0dGVyIE1hbmFnZXIgYmVsb25ncy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciBwYXJ0aWNsZXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciBwYXJ0aWNsZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWdbXX0gW2VtaXR0ZXJzXSAtIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlIGVtaXR0ZXJzIHRvIGNyZWF0ZS5cclxuICovXHJcbnZhciBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIC8vICBmcmFtZSBpcyBvcHRpb25hbCBhbmQgY2FuIGNvbnRhaW4gdGhlIGVtaXR0ZXJzIGFycmF5IG9yIG9iamVjdCBpZiBza2lwcGVkXHJcbiAgICBmdW5jdGlvbiBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyIChzY2VuZSwgdGV4dHVyZSwgZnJhbWUsIGVtaXR0ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1BhcnRpY2xlRW1pdHRlck1hbmFnZXInKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJsZW5kIG1vZGUgYXBwbGllZCB0byBhbGwgZW1pdHRlcnMgYW5kIHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNibGVuZE1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgc2NhbGUgYXBwbGllZCB0byBhbGwgZW1pdHRlcnMgYW5kIHBhcnRpY2xlcywgYWZmZWN0aW5nIGZsb3cgcmF0ZSwgbGlmZXNwYW4sIGFuZCBtb3ZlbWVudC5cclxuICAgICAgICAgKiBWYWx1ZXMgbGFyZ2VyIHRoYW4gMSBhcmUgZmFzdGVyIHRoYW4gbm9ybWFsLlxyXG4gICAgICAgICAqIFRoaXMgaXMgbXVsdGlwbGllZCB3aXRoIGFueSB0aW1lU2NhbGUgc2V0IG9uIGVhY2ggaW5kaXZpZHVhbCBlbWl0dGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3RpbWVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCB0byByZW5kZXIgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXIjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgZnJhbWUgdXNlZCB0byByZW5kZXIgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXIjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTmFtZXMgb2YgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyB0ZXh0dXJlIGZyYW1lcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNmcmFtZU5hbWVzXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ1tdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVOYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAgZnJhbWUgaXMgb3B0aW9uYWwgYW5kIGNhbiBjb250YWluIHRoZSBlbWl0dGVycyBhcnJheSBvciBvYmplY3QgaWYgc2tpcHBlZFxyXG4gICAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCAmJiAodHlwZW9mIGZyYW1lID09PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGZyYW1lKSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVycyA9IGZyYW1lO1xyXG4gICAgICAgICAgICBmcmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxpc3Qgb2YgRW1pdHRlcnMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNlbWl0dGVyc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5MaXN0LjxQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcj59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbWl0dGVycyA9IG5ldyBMaXN0KHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxpc3Qgb2YgR3Jhdml0eSBXZWxscyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3dlbGxzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLkxpc3QuPFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGw+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2VsbHMgPSBuZXcgTGlzdCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXJzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFuIGFycmF5IG9mIGVtaXR0ZXIgY29uZmlncz9cclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVtaXR0ZXJzKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW1pdHRlcnMgPSBbIGVtaXR0ZXJzIF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW1pdHRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRW1pdHRlcihlbWl0dGVyc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBFbWl0dGVyIE1hbmFnZXIgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldFRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IFRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0aGlzLnNjZW5lLnN5cy50ZXh0dXJlcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJhbWUoZnJhbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZyYW1lIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBGcmFtZSBoYXMgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IFRleHR1cmUgYmVpbmcgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVzID0gdGhpcy50ZXh0dXJlLmdldEZyYW1lc0Zyb21UZXh0dXJlU291cmNlKHRoaXMuZnJhbWUuc291cmNlSW5kZXgpO1xyXG5cclxuICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZXMucHVzaChzb3VyY2VGcmFtZS5uYW1lKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZU5hbWVzID0gbmFtZXM7XHJcblxyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZyYW1lID0gdGhpcy5mcmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXNzaWducyB0ZXh0dXJlIGZyYW1lcyB0byBhbiBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEVtaXR0ZXJGcmFtZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UZXh0dXJlcy5GcmFtZXxQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXSl9IGZyYW1lcyAtIFRoZSB0ZXh0dXJlIGZyYW1lcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgcGFydGljbGUgZW1pdHRlciB0byBtb2RpZnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgc2V0RW1pdHRlckZyYW1lczogZnVuY3Rpb24gKGZyYW1lcywgZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lcyA9IFsgZnJhbWVzIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0ID0gZW1pdHRlci5mcmFtZXM7XHJcblxyXG4gICAgICAgIG91dC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IGZyYW1lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lTmFtZXMuaW5kZXhPZihmcmFtZSkgIT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaCh0aGlzLnRleHR1cmUuZ2V0KGZyYW1lKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXQubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVtaXR0ZXIuZGVmYXVsdEZyYW1lID0gb3V0WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVyLmRlZmF1bHRGcmFtZSA9IHRoaXMuZGVmYXVsdEZyYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBleGlzdGluZyBQYXJ0aWNsZSBFbWl0dGVyIHRvIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2FkZEVtaXR0ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgUGFydGljbGUgRW1pdHRlciB0byBhZGQgdG8gdGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoZSBQYXJ0aWNsZSBFbWl0dGVyIHRoYXQgd2FzIGFkZGVkIHRvIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbiAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbWl0dGVycy5hZGQoZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBQYXJ0aWNsZSBFbWl0dGVyIG9iamVjdCwgYWRkcyBpdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNjcmVhdGVFbWl0dGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgUGFydGljbGUgRW1pdHRlciB0byBjcmVhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoZSBQYXJ0aWNsZSBFbWl0dGVyIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRW1pdHRlcihuZXcgUGFydGljbGVFbWl0dGVyKHRoaXMsIGNvbmZpZykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgR3Jhdml0eSBXZWxsIG9iamVjdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNhZGRHcmF2aXR5V2VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsfSB3ZWxsIC0gVGhlIEdyYXZpdHkgV2VsbCB0byBhZGQgdG8gdGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbH0gVGhlIEdyYXZpdHkgV2VsbCB0aGF0IHdhcyBhZGRlZCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgYWRkR3Jhdml0eVdlbGw6IGZ1bmN0aW9uICh3ZWxsKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlbGxzLmFkZCh3ZWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEdyYXZpdHkgV2VsbCwgYWRkcyBpdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNjcmVhdGVHcmF2aXR5V2VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgR3Jhdml0eSBXZWxsIHRvIGNyZWF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsfSBUaGUgR3Jhdml0eSBXZWxsIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUdyYXZpdHlXZWxsOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEdyYXZpdHlXZWxsKG5ldyBHcmF2aXR5V2VsbChjb25maWcpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgZnJvbSBlYWNoIGFjdGl2ZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2VtaXRQYXJ0aWNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnRdIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBmcm9tIGVhY2ggZW1pdHRlci4gVGhlIGRlZmF1bHQgaXMgdGhlIGVtaXR0ZXIncyBvd24ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3F1YW50aXR5fS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeC1jb29yZGluYXRlIHRvIHRvIGVtaXQgcGFydGljbGVzIGZyb20uIFRoZSBkZWZhdWx0IGlzIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVtaXR0ZXIncyBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5LWNvb3JkaW5hdGUgdG8gdG8gZW1pdCBwYXJ0aWNsZXMgZnJvbS4gVGhlIGRlZmF1bHQgaXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW1pdHRlcidzIGN1cnJlbnQgbG9jYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgZW1pdFBhcnRpY2xlOiBmdW5jdGlvbiAoY291bnQsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVtaXR0ZXJzID0gdGhpcy5lbWl0dGVycy5saXN0O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVtaXR0ZXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVtaXR0ZXIgPSBlbWl0dGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbWl0dGVyLmFjdGl2ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0UGFydGljbGUoY291bnQsIHgsIHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgZnJvbSBlYWNoIGFjdGl2ZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2VtaXRQYXJ0aWNsZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIHgtY29vcmRpbmF0ZSB0byB0byBlbWl0IHBhcnRpY2xlcyBmcm9tLiBUaGUgZGVmYXVsdCBpcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbWl0dGVyJ3MgY3VycmVudCBsb2NhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeS1jb29yZGluYXRlIHRvIHRvIGVtaXQgcGFydGljbGVzIGZyb20uIFRoZSBkZWZhdWx0IGlzIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVtaXR0ZXIncyBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnRdIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBmcm9tIGVhY2ggZW1pdHRlci4gVGhlIGRlZmF1bHQgaXMgdGhlIGVtaXR0ZXIncyBvd24ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3F1YW50aXR5fS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IFRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBlbWl0UGFydGljbGVBdDogZnVuY3Rpb24gKHgsIHksIGNvdW50KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVtaXRQYXJ0aWNsZShjb3VudCwgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcGF1c2luZyBhbGwgZW1pdHRlcnMsIGFuZCBhbGwgcGFydGljbGVzIG9mIHRob3NlIGVtaXR0ZXJzLCBjdXJyZW50bHkgdW5kZXIgaXRzIGNvbnRyb2wuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBhcnRpY2xlcyB3aWxsIHN0aWxsIHJlbmRlciwgYnV0IHRoZXkgd2lsbCBub3QgaGF2ZSBhbnkgb2YgdGhlaXIgbG9naWMgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyB0aGlzIEVtaXR0ZXIgTWFuYWdlciwgc2hvdWxkIGl0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHBhdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGFjdGl2ZSBwYXJ0aWNsZSBwcm9jZXNzb3JzIChncmF2aXR5IHdlbGxzKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNnZXRQcm9jZXNzb3JzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsW119IC0gVGhlIGFjdGl2ZSBncmF2aXR5IHdlbGxzLlxyXG4gICAgICovXHJcbiAgICBnZXRQcm9jZXNzb3JzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlbGxzLmdldEFsbCgnYWN0aXZlJywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhbGwgYWN0aXZlIGVtaXR0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNjYWxlIHRoZSBkZWx0YVxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICB2YXIgZW1pdHRlcnMgPSB0aGlzLmVtaXR0ZXJzLmxpc3Q7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW1pdHRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW1pdHRlciA9IGVtaXR0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtaXR0ZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbWl0dGVyLnByZVVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYW4gRW1pdHRlck1hbmFnZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNzZXRBbHBoYVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYW4gRW1pdHRlck1hbmFnZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbEZhY3RvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhbiBFbWl0dGVyTWFuYWdlciB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEJsZW5kTW9kZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqL1xyXG4gICAgc2V0QmxlbmRNb2RlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlRW1pdHRlck1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js ***!
  \****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterManager#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} emitterManager - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var emitters = emitterManager.emitters.list;\r\n    var emittersLength = emitters.length;\r\n\r\n    if (emittersLength === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var camMatrix = renderer._tempMatrix1.copyFrom(camera.matrix);\r\n    var calcMatrix = renderer._tempMatrix2;\r\n    var particleMatrix = renderer._tempMatrix3;\r\n    var managerMatrix = renderer._tempMatrix4.applyITRS(emitterManager.x, emitterManager.y, emitterManager.rotation, emitterManager.scaleX, emitterManager.scaleY);\r\n\r\n    camMatrix.multiply(managerMatrix);\r\n\r\n    var roundPixels = camera.roundPixels;\r\n\r\n    var ctx = renderer.currentContext;\r\n\r\n    ctx.save();\r\n\r\n    for (var e = 0; e < emittersLength; e++)\r\n    {\r\n        var emitter = emitters[e];\r\n        var particles = emitter.alive;\r\n        var particleCount = particles.length;\r\n\r\n        if (!emitter.visible || particleCount === 0)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var scrollX = camera.scrollX * emitter.scrollFactorX;\r\n        var scrollY = camera.scrollY * emitter.scrollFactorY;\r\n\r\n        if (parentMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentMatrix, -scrollX, -scrollY);\r\n\r\n            scrollX = 0;\r\n            scrollY = 0;\r\n        }\r\n\r\n        ctx.globalCompositeOperation = renderer.blendModes[emitter.blendMode];\r\n\r\n        for (var i = 0; i < particleCount; i++)\r\n        {\r\n            var particle = particles[i];\r\n\r\n            var alpha = particle.alpha * camera.alpha;\r\n\r\n            if (alpha <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var frame = particle.frame;\r\n            var cd = frame.canvasData;\r\n\r\n            var x = -(frame.halfWidth);\r\n            var y = -(frame.halfHeight);\r\n\r\n            particleMatrix.applyITRS(0, 0, particle.rotation, particle.scaleX, particle.scaleY);\r\n\r\n            particleMatrix.e = particle.x - scrollX;\r\n            particleMatrix.f = particle.y - scrollY;\r\n\r\n            camMatrix.multiply(particleMatrix, calcMatrix);\r\n\r\n            ctx.globalAlpha = alpha;\r\n        \r\n            ctx.save();\r\n\r\n            calcMatrix.copyToContext(ctx);\r\n\r\n            if (roundPixels)\r\n            {\r\n                x = Math.round(x);\r\n                y = Math.round(y);\r\n            }\r\n\r\n            ctx.imageSmoothingEnabled = !(!renderer.antialias || frame.source.scaleMode);\r\n\r\n            ctx.drawImage(frame.source.image, cd.x, cd.y, cd.width, cd.height, x, y, cd.width, cd.height);\r\n\r\n            ctx.restore();\r\n        }\r\n    }\r\n\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = ParticleManagerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyQ2FudmFzUmVuZGVyZXIuanM/YTU2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxvREFBb0Q7QUFDL0QsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZU1hbmFnZXJDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck1hbmFnZXIjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IGVtaXR0ZXJNYW5hZ2VyIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFBhcnRpY2xlTWFuYWdlckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbWl0dGVyTWFuYWdlciwgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgZW1pdHRlcnMgPSBlbWl0dGVyTWFuYWdlci5lbWl0dGVycy5saXN0O1xyXG4gICAgdmFyIGVtaXR0ZXJzTGVuZ3RoID0gZW1pdHRlcnMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChlbWl0dGVyc0xlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MS5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIHBhcnRpY2xlTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgzO1xyXG4gICAgdmFyIG1hbmFnZXJNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDQuYXBwbHlJVFJTKGVtaXR0ZXJNYW5hZ2VyLngsIGVtaXR0ZXJNYW5hZ2VyLnksIGVtaXR0ZXJNYW5hZ2VyLnJvdGF0aW9uLCBlbWl0dGVyTWFuYWdlci5zY2FsZVgsIGVtaXR0ZXJNYW5hZ2VyLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KG1hbmFnZXJNYXRyaXgpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IGVtaXR0ZXJzTGVuZ3RoOyBlKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVtaXR0ZXIgPSBlbWl0dGVyc1tlXTtcclxuICAgICAgICB2YXIgcGFydGljbGVzID0gZW1pdHRlci5hbGl2ZTtcclxuICAgICAgICB2YXIgcGFydGljbGVDb3VudCA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghZW1pdHRlci52aXNpYmxlIHx8IHBhcnRpY2xlQ291bnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxYID0gY2FtZXJhLnNjcm9sbFggKiBlbWl0dGVyLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgdmFyIHNjcm9sbFkgPSBjYW1lcmEuc2Nyb2xsWSAqIGVtaXR0ZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtc2Nyb2xsWCwgLXNjcm9sbFkpO1xyXG5cclxuICAgICAgICAgICAgc2Nyb2xsWCA9IDA7XHJcbiAgICAgICAgICAgIHNjcm9sbFkgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbZW1pdHRlci5ibGVuZE1vZGVdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRpY2xlQ291bnQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHBhcnRpY2xlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbHBoYSA9IHBhcnRpY2xlLmFscGhhICogY2FtZXJhLmFscGhhO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhIDw9IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWUgPSBwYXJ0aWNsZS5mcmFtZTtcclxuICAgICAgICAgICAgdmFyIGNkID0gZnJhbWUuY2FudmFzRGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gLShmcmFtZS5oYWxmV2lkdGgpO1xyXG4gICAgICAgICAgICB2YXIgeSA9IC0oZnJhbWUuaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWNsZU1hdHJpeC5hcHBseUlUUlMoMCwgMCwgcGFydGljbGUucm90YXRpb24sIHBhcnRpY2xlLnNjYWxlWCwgcGFydGljbGUuc2NhbGVZKTtcclxuXHJcbiAgICAgICAgICAgIHBhcnRpY2xlTWF0cml4LmUgPSBwYXJ0aWNsZS54IC0gc2Nyb2xsWDtcclxuICAgICAgICAgICAgcGFydGljbGVNYXRyaXguZiA9IHBhcnRpY2xlLnkgLSBzY3JvbGxZO1xyXG5cclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHBhcnRpY2xlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgICAgICAgICAgY2FsY01hdHJpeC5jb3B5VG9Db250ZXh0KGN0eCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHgpO1xyXG4gICAgICAgICAgICAgICAgeSA9IE1hdGgucm91bmQoeSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSAhKCFyZW5kZXJlci5hbnRpYWxpYXMgfHwgZnJhbWUuc291cmNlLnNjYWxlTW9kZSk7XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGZyYW1lLnNvdXJjZS5pbWFnZSwgY2QueCwgY2QueSwgY2Qud2lkdGgsIGNkLmhlaWdodCwgeCwgeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZU1hbmFnZXJDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ParticleEmitterManager = __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\");\r\n\r\n/**\r\n * Creates a new Particle Emitter Manager Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Particles Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#particles\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('particles', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n    var emitters = GetFastValue(config, 'emitters', null);\r\n\r\n    //  frame is optional and can contain the emitters array or object if skipped\r\n    var manager = new ParticleEmitterManager(this.scene, key, frame, emitters);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    var add = GetFastValue(config, 'add', false);\r\n\r\n    if (add)\r\n    {\r\n        this.displayList.add(manager);\r\n    }\r\n\r\n    this.updateList.add(manager);\r\n\r\n    return manager;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyQ3JlYXRvci5qcz81NGU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBMEI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxvREFBb0Q7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZU1hbmFnZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhcnRpY2xlcyBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjcGFydGljbGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcigncGFydGljbGVzJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgbnVsbCk7XHJcbiAgICB2YXIgZW1pdHRlcnMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZW1pdHRlcnMnLCBudWxsKTtcclxuXHJcbiAgICAvLyAgZnJhbWUgaXMgb3B0aW9uYWwgYW5kIGNhbiBjb250YWluIHRoZSBlbWl0dGVycyBhcnJheSBvciBvYmplY3QgaWYgc2tpcHBlZFxyXG4gICAgdmFyIG1hbmFnZXIgPSBuZXcgUGFydGljbGVFbWl0dGVyTWFuYWdlcih0aGlzLnNjZW5lLCBrZXksIGZyYW1lLCBlbWl0dGVycyk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYWRkID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FkZCcsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAoYWRkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKG1hbmFnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlTGlzdC5hZGQobWFuYWdlcik7XHJcblxyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar ParticleEmitterManager = __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\");\r\n\r\n/**\r\n * Creates a new Particle Emitter Manager Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Particles Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#particles\r\n * @since 3.0.0\r\n *\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer|object)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterConfig[]} [emitters] - Configuration settings for one or more emitters to create.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('particles', function (key, frame, emitters)\r\n{\r\n    var manager = new ParticleEmitterManager(this.scene, key, frame, emitters);\r\n\r\n    this.displayList.add(manager);\r\n    this.updateList.add(manager);\r\n\r\n    return manager;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeS5qcz9iOWI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsb0hBQW9IO0FBQy9IO0FBQ0EsWUFBWSxvREFBb0Q7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIFBhcnRpY2xlRW1pdHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlRW1pdHRlck1hbmFnZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBhcnRpY2xlIEVtaXR0ZXIgTWFuYWdlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhcnRpY2xlcyBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcGFydGljbGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfG9iamVjdCl9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWdbXX0gW2VtaXR0ZXJzXSAtIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlIGVtaXR0ZXJzIHRvIGNyZWF0ZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdwYXJ0aWNsZXMnLCBmdW5jdGlvbiAoa2V5LCBmcmFtZSwgZW1pdHRlcnMpXHJcbntcclxuICAgIHZhciBtYW5hZ2VyID0gbmV3IFBhcnRpY2xlRW1pdHRlck1hbmFnZXIodGhpcy5zY2VuZSwga2V5LCBmcmFtZSwgZW1pdHRlcnMpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKG1hbmFnZXIpO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZChtYW5hZ2VyKTtcclxuXHJcbiAgICByZXR1cm4gbWFuYWdlcjtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ParticleManagerWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ParticleManagerCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyUmVuZGVyLmpzP2UyYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1SEFBZ0M7QUFDMUQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHlIQUFpQztBQUM1RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL1BhcnRpY2xlTWFuYWdlclJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1BhcnRpY2xlTWFuYWdlcldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vUGFydGljbGVNYW5hZ2VyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterManager#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} emitterManager - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ParticleManagerWebGLRenderer = function (renderer, emitterManager, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var emitters = emitterManager.emitters.list;\r\n    var emittersLength = emitters.length;\r\n\r\n    if (emittersLength === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1.copyFrom(camera.matrix);\r\n    var calcMatrix = pipeline._tempMatrix2;\r\n    var particleMatrix = pipeline._tempMatrix3;\r\n    var managerMatrix = pipeline._tempMatrix4.applyITRS(emitterManager.x, emitterManager.y, emitterManager.rotation, emitterManager.scaleX, emitterManager.scaleY);\r\n\r\n    camMatrix.multiply(managerMatrix);\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    var roundPixels = camera.roundPixels;\r\n    var texture = emitterManager.defaultFrame.glTexture;\r\n    var getTint = Utils.getTintAppendFloatAlphaAndSwap;\r\n\r\n    pipeline.setTexture2D(texture, 0);\r\n\r\n    for (var e = 0; e < emittersLength; e++)\r\n    {\r\n        var emitter = emitters[e];\r\n        var particles = emitter.alive;\r\n        var particleCount = particles.length;\r\n\r\n        if (!emitter.visible || particleCount === 0)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var scrollX = camera.scrollX * emitter.scrollFactorX;\r\n        var scrollY = camera.scrollY * emitter.scrollFactorY;\r\n\r\n        if (parentMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentMatrix, -scrollX, -scrollY);\r\n\r\n            scrollX = 0;\r\n            scrollY = 0;\r\n        }\r\n\r\n        if (renderer.setBlendMode(emitter.blendMode))\r\n        {\r\n            //  Rebind the texture if we've flushed\r\n            pipeline.setTexture2D(texture, 0);\r\n        }\r\n\r\n        if (emitter.mask)\r\n        {\r\n            emitter.mask.preRenderWebGL(renderer, emitter, camera);\r\n            pipeline.setTexture2D(texture, 0);\r\n        }\r\n    \r\n        var tintEffect = 0;\r\n\r\n        for (var i = 0; i < particleCount; i++)\r\n        {\r\n            var particle = particles[i];\r\n\r\n            var alpha = particle.alpha * camera.alpha;\r\n\r\n            if (alpha <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var frame = particle.frame;\r\n\r\n            var x = -(frame.halfWidth);\r\n            var y = -(frame.halfHeight);\r\n            var xw = x + frame.width;\r\n            var yh = y + frame.height;\r\n\r\n            particleMatrix.applyITRS(0, 0, particle.rotation, particle.scaleX, particle.scaleY);\r\n\r\n            particleMatrix.e = particle.x - scrollX;\r\n            particleMatrix.f = particle.y - scrollY;\r\n\r\n            camMatrix.multiply(particleMatrix, calcMatrix);\r\n\r\n            var tx0 = calcMatrix.getX(x, y);\r\n            var ty0 = calcMatrix.getY(x, y);\r\n    \r\n            var tx1 = calcMatrix.getX(x, yh);\r\n            var ty1 = calcMatrix.getY(x, yh);\r\n    \r\n            var tx2 = calcMatrix.getX(xw, yh);\r\n            var ty2 = calcMatrix.getY(xw, yh);\r\n    \r\n            var tx3 = calcMatrix.getX(xw, y);\r\n            var ty3 = calcMatrix.getY(xw, y);\r\n\r\n            if (roundPixels)\r\n            {\r\n                tx0 = Math.round(tx0);\r\n                ty0 = Math.round(ty0);\r\n    \r\n                tx1 = Math.round(tx1);\r\n                ty1 = Math.round(ty1);\r\n    \r\n                tx2 = Math.round(tx2);\r\n                ty2 = Math.round(ty2);\r\n    \r\n                tx3 = Math.round(tx3);\r\n                ty3 = Math.round(ty3);\r\n            }\r\n\r\n            var tint = getTint(particle.tint, alpha);\r\n\r\n            pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, frame.u0, frame.v0, frame.u1, frame.v1, tint, tint, tint, tint, tintEffect, texture, 0);\r\n        }\r\n\r\n        if (emitter.mask)\r\n        {\r\n            emitter.mask.postRenderWebGL(renderer, camera);\r\n            pipeline.setTexture2D(texture, 0);\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = ParticleManagerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlci5qcz80NDY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLG9EQUFvRDtBQUMvRCxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck1hbmFnZXIjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gZW1pdHRlck1hbmFnZXIgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgZW1pdHRlck1hbmFnZXIsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGVtaXR0ZXJzID0gZW1pdHRlck1hbmFnZXIuZW1pdHRlcnMubGlzdDtcclxuICAgIHZhciBlbWl0dGVyc0xlbmd0aCA9IGVtaXR0ZXJzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoZW1pdHRlcnNMZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MS5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIHBhcnRpY2xlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG4gICAgdmFyIG1hbmFnZXJNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDQuYXBwbHlJVFJTKGVtaXR0ZXJNYW5hZ2VyLngsIGVtaXR0ZXJNYW5hZ2VyLnksIGVtaXR0ZXJNYW5hZ2VyLnJvdGF0aW9uLCBlbWl0dGVyTWFuYWdlci5zY2FsZVgsIGVtaXR0ZXJNYW5hZ2VyLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KG1hbmFnZXJNYXRyaXgpO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcbiAgICB2YXIgdGV4dHVyZSA9IGVtaXR0ZXJNYW5hZ2VyLmRlZmF1bHRGcmFtZS5nbFRleHR1cmU7XHJcbiAgICB2YXIgZ2V0VGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcDtcclxuXHJcbiAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbWl0dGVyc0xlbmd0aDsgZSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbWl0dGVyID0gZW1pdHRlcnNbZV07XHJcbiAgICAgICAgdmFyIHBhcnRpY2xlcyA9IGVtaXR0ZXIuYWxpdmU7XHJcbiAgICAgICAgdmFyIHBhcnRpY2xlQ291bnQgPSBwYXJ0aWNsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIWVtaXR0ZXIudmlzaWJsZSB8fCBwYXJ0aWNsZUNvdW50ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsWCA9IGNhbWVyYS5zY3JvbGxYICogZW1pdHRlci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHZhciBzY3JvbGxZID0gY2FtZXJhLnNjcm9sbFkgKiBlbWl0dGVyLnNjcm9sbEZhY3Rvclk7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLXNjcm9sbFgsIC1zY3JvbGxZKTtcclxuXHJcbiAgICAgICAgICAgIHNjcm9sbFggPSAwO1xyXG4gICAgICAgICAgICBzY3JvbGxZID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5zZXRCbGVuZE1vZGUoZW1pdHRlci5ibGVuZE1vZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFJlYmluZCB0aGUgdGV4dHVyZSBpZiB3ZSd2ZSBmbHVzaGVkXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbWl0dGVyLm1hc2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVyLm1hc2sucHJlUmVuZGVyV2ViR0wocmVuZGVyZXIsIGVtaXR0ZXIsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICB2YXIgdGludEVmZmVjdCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydGljbGVDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gcGFydGljbGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFscGhhID0gcGFydGljbGUuYWxwaGEgKiBjYW1lcmEuYWxwaGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGEgPD0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHBhcnRpY2xlLmZyYW1lO1xyXG5cclxuICAgICAgICAgICAgdmFyIHggPSAtKGZyYW1lLmhhbGZXaWR0aCk7XHJcbiAgICAgICAgICAgIHZhciB5ID0gLShmcmFtZS5oYWxmSGVpZ2h0KTtcclxuICAgICAgICAgICAgdmFyIHh3ID0geCArIGZyYW1lLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgeWggPSB5ICsgZnJhbWUuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgcGFydGljbGVNYXRyaXguYXBwbHlJVFJTKDAsIDAsIHBhcnRpY2xlLnJvdGF0aW9uLCBwYXJ0aWNsZS5zY2FsZVgsIHBhcnRpY2xlLnNjYWxlWSk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWNsZU1hdHJpeC5lID0gcGFydGljbGUueCAtIHNjcm9sbFg7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlTWF0cml4LmYgPSBwYXJ0aWNsZS55IC0gc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShwYXJ0aWNsZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgdHgwID0gY2FsY01hdHJpeC5nZXRYKHgsIHkpO1xyXG4gICAgICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgsIHkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciB0eDEgPSBjYWxjTWF0cml4LmdldFgoeCwgeWgpO1xyXG4gICAgICAgICAgICB2YXIgdHkxID0gY2FsY01hdHJpeC5nZXRZKHgsIHloKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgdHgyID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5aCk7XHJcbiAgICAgICAgICAgIHZhciB0eTIgPSBjYWxjTWF0cml4LmdldFkoeHcsIHloKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgdHgzID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5KTtcclxuICAgICAgICAgICAgdmFyIHR5MyA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR4MCA9IE1hdGgucm91bmQodHgwKTtcclxuICAgICAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdHgxID0gTWF0aC5yb3VuZCh0eDEpO1xyXG4gICAgICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0eDIgPSBNYXRoLnJvdW5kKHR4Mik7XHJcbiAgICAgICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHR4MyA9IE1hdGgucm91bmQodHgzKTtcclxuICAgICAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHRpbnQgPSBnZXRUaW50KHBhcnRpY2xlLnRpbnQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgZnJhbWUudTAsIGZyYW1lLnYwLCBmcmFtZS51MSwgZnJhbWUudjEsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnRFZmZlY3QsIHRleHR1cmUsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIubWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVtaXR0ZXIubWFzay5wb3N0UmVuZGVyV2ViR0wocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlTWFuYWdlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Particles\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    GravityWell: __webpack_require__(/*! ./GravityWell */ \"./node_modules/phaser/src/gameobjects/particles/GravityWell.js\"),\r\n    Particle: __webpack_require__(/*! ./Particle */ \"./node_modules/phaser/src/gameobjects/particles/Particle.js\"),\r\n    ParticleEmitter: __webpack_require__(/*! ./ParticleEmitter */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\"),\r\n    ParticleEmitterManager: __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\"),\r\n    Zones: __webpack_require__(/*! ./zones */ \"./node_modules/phaser/src/gameobjects/particles/zones/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvaW5kZXguanM/M2Q4MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHFGQUFlO0FBQ3hDLGNBQWMsbUJBQU8sQ0FBQywrRUFBWTtBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBbUI7QUFDaEQsNEJBQTRCLG1CQUFPLENBQUMsMkdBQTBCO0FBQzlELFdBQVcsbUJBQU8sQ0FBQywrRUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBHcmF2aXR5V2VsbDogcmVxdWlyZSgnLi9HcmF2aXR5V2VsbCcpLFxyXG4gICAgUGFydGljbGU6IHJlcXVpcmUoJy4vUGFydGljbGUnKSxcclxuICAgIFBhcnRpY2xlRW1pdHRlcjogcmVxdWlyZSgnLi9QYXJ0aWNsZUVtaXR0ZXInKSxcclxuICAgIFBhcnRpY2xlRW1pdHRlck1hbmFnZXI6IHJlcXVpcmUoJy4vUGFydGljbGVFbWl0dGVyTWFuYWdlcicpLFxyXG4gICAgWm9uZXM6IHJlcXVpcmUoJy4vem9uZXMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Death Zone.\r\n *\r\n * A Death Zone is a special type of zone that will kill a Particle as soon as it either enters, or leaves, the zone.\r\n *\r\n * The zone consists of a `source` which could be a Geometric shape, such as a Rectangle or Ellipse, or your own\r\n * object as long as it includes a `contains` method for which the Particles can be tested against.\r\n *\r\n * @class DeathZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.DeathZoneSource} source - An object instance that has a `contains` method that returns a boolean when given `x` and `y` arguments.\r\n * @param {boolean} killOnEnter - Should the Particle be killed when it enters the zone? `true` or leaves it? `false`\r\n */\r\nvar DeathZone = new Class({\r\n\r\n    initialize:\r\n\r\n    function DeathZone (source, killOnEnter)\r\n    {\r\n        /**\r\n         * An object instance that has a `contains` method that returns a boolean when given `x` and `y` arguments.\r\n         * This could be a Geometry shape, such as `Phaser.Geom.Circle`, or your own custom object.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.DeathZone#source\r\n         * @type {Phaser.Types.GameObjects.Particles.DeathZoneSource}\r\n         * @since 3.0.0\r\n         */\r\n        this.source = source;\r\n\r\n        /**\r\n         * Set to `true` if the Particle should be killed if it enters this zone.\r\n         * Set to `false` to kill the Particle if it leaves this zone.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.DeathZone#killOnEnter\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.killOnEnter = killOnEnter;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Particle will be killed or not by this zone.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Zones.DeathZone#willKill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle to be checked against this zone.\r\n     *\r\n     * @return {boolean} Return `true` if the Particle is to be killed, otherwise return `false`.\r\n     */\r\n    willKill: function (particle)\r\n    {\r\n        var withinZone = this.source.contains(particle.x, particle.y);\r\n\r\n        return (withinZone && this.killOnEnter || !withinZone && !this.killOnEnter);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = DeathZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvRGVhdGhab25lLmpzPzQ3ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JEO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL0RlYXRoWm9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgRGVhdGggWm9uZS5cclxuICpcclxuICogQSBEZWF0aCBab25lIGlzIGEgc3BlY2lhbCB0eXBlIG9mIHpvbmUgdGhhdCB3aWxsIGtpbGwgYSBQYXJ0aWNsZSBhcyBzb29uIGFzIGl0IGVpdGhlciBlbnRlcnMsIG9yIGxlYXZlcywgdGhlIHpvbmUuXHJcbiAqXHJcbiAqIFRoZSB6b25lIGNvbnNpc3RzIG9mIGEgYHNvdXJjZWAgd2hpY2ggY291bGQgYmUgYSBHZW9tZXRyaWMgc2hhcGUsIHN1Y2ggYXMgYSBSZWN0YW5nbGUgb3IgRWxsaXBzZSwgb3IgeW91ciBvd25cclxuICogb2JqZWN0IGFzIGxvbmcgYXMgaXQgaW5jbHVkZXMgYSBgY29udGFpbnNgIG1ldGhvZCBmb3Igd2hpY2ggdGhlIFBhcnRpY2xlcyBjYW4gYmUgdGVzdGVkIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBEZWF0aFpvbmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRGVhdGhab25lU291cmNlfSBzb3VyY2UgLSBBbiBvYmplY3QgaW5zdGFuY2UgdGhhdCBoYXMgYSBgY29udGFpbnNgIG1ldGhvZCB0aGF0IHJldHVybnMgYSBib29sZWFuIHdoZW4gZ2l2ZW4gYHhgIGFuZCBgeWAgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGtpbGxPbkVudGVyIC0gU2hvdWxkIHRoZSBQYXJ0aWNsZSBiZSBraWxsZWQgd2hlbiBpdCBlbnRlcnMgdGhlIHpvbmU/IGB0cnVlYCBvciBsZWF2ZXMgaXQ/IGBmYWxzZWBcclxuICovXHJcbnZhciBEZWF0aFpvbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGVhdGhab25lIChzb3VyY2UsIGtpbGxPbkVudGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBpbnN0YW5jZSB0aGF0IGhhcyBhIGBjb250YWluc2AgbWV0aG9kIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4gd2hlbiBnaXZlbiBgeGAgYW5kIGB5YCBhcmd1bWVudHMuXHJcbiAgICAgICAgICogVGhpcyBjb3VsZCBiZSBhIEdlb21ldHJ5IHNoYXBlLCBzdWNoIGFzIGBQaGFzZXIuR2VvbS5DaXJjbGVgLCBvciB5b3VyIG93biBjdXN0b20gb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5EZWF0aFpvbmUjc291cmNlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRGVhdGhab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBQYXJ0aWNsZSBzaG91bGQgYmUga2lsbGVkIGlmIGl0IGVudGVycyB0aGlzIHpvbmUuXHJcbiAgICAgICAgICogU2V0IHRvIGBmYWxzZWAgdG8ga2lsbCB0aGUgUGFydGljbGUgaWYgaXQgbGVhdmVzIHRoaXMgem9uZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRGVhdGhab25lI2tpbGxPbkVudGVyXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5raWxsT25FbnRlciA9IGtpbGxPbkVudGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gUGFydGljbGUgd2lsbCBiZSBraWxsZWQgb3Igbm90IGJ5IHRoaXMgem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRGVhdGhab25lI3dpbGxLaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIFBhcnRpY2xlIHRvIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGlzIHpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJuIGB0cnVlYCBpZiB0aGUgUGFydGljbGUgaXMgdG8gYmUga2lsbGVkLCBvdGhlcndpc2UgcmV0dXJuIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHdpbGxLaWxsOiBmdW5jdGlvbiAocGFydGljbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpdGhpblpvbmUgPSB0aGlzLnNvdXJjZS5jb250YWlucyhwYXJ0aWNsZS54LCBwYXJ0aWNsZS55KTtcclxuXHJcbiAgICAgICAgcmV0dXJuICh3aXRoaW5ab25lICYmIHRoaXMua2lsbE9uRW50ZXIgfHwgIXdpdGhpblpvbmUgJiYgIXRoaXMua2lsbE9uRW50ZXIpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERlYXRoWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A zone that places particles on a shape's edges.\r\n *\r\n * @class EdgeZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EdgeZoneSource} source - An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n * @param {integer} quantity - The number of particles to place on the source edge. Set to 0 to use `stepRate` instead.\r\n * @param {number} stepRate - The distance between each particle. When set, `quantity` is implied and should be set to 0.\r\n * @param {boolean} [yoyo=false] - Whether particles are placed from start to end and then end to start.\r\n * @param {boolean} [seamless=true] - Whether one endpoint will be removed if it's identical to the other.\r\n */\r\nvar EdgeZone = new Class({\r\n\r\n    initialize:\r\n\r\n    function EdgeZone (source, quantity, stepRate, yoyo, seamless)\r\n    {\r\n        if (yoyo === undefined) { yoyo = false; }\r\n        if (seamless === undefined) { seamless = true; }\r\n\r\n        /**\r\n         * An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#source\r\n         * @type {Phaser.Types.GameObjects.Particles.EdgeZoneSource|Phaser.Types.GameObjects.Particles.RandomZoneSource}\r\n         * @since 3.0.0\r\n         */\r\n        this.source = source;\r\n\r\n        /**\r\n         * The points placed on the source edge.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#points\r\n         * @type {Phaser.Geom.Point[]}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.points = [];\r\n\r\n        /**\r\n         * The number of particles to place on the source edge. Set to 0 to use `stepRate` instead.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#quantity\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.quantity = quantity;\r\n\r\n        /**\r\n         * The distance between each particle. When set, `quantity` is implied and should be set to 0.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#stepRate\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.stepRate = stepRate;\r\n\r\n        /**\r\n         * Whether particles are placed from start to end and then end to start.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#yoyo\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.yoyo = yoyo;\r\n\r\n        /**\r\n         * The counter used for iterating the EdgeZone's points.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#counter\r\n         * @type {number}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.counter = -1;\r\n\r\n        /**\r\n         * Whether one endpoint will be removed if it's identical to the other.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#seamless\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.seamless = seamless;\r\n\r\n        /**\r\n         * An internal count of the points belonging to this EdgeZone.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#_length\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._length = 0;\r\n\r\n        /**\r\n         * An internal value used to keep track of the current iteration direction for the EdgeZone's points.\r\n         *\r\n         * 0 = forwards, 1 = backwards\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.EdgeZone#_direction\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._direction = 0;\r\n\r\n        this.updateSource();\r\n    },\r\n\r\n    /**\r\n     * Update the {@link Phaser.GameObjects.Particles.Zones.EdgeZone#points} from the EdgeZone's\r\n     * {@link Phaser.GameObjects.Particles.Zones.EdgeZone#source}.\r\n     *\r\n     * Also updates internal properties.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Zones.EdgeZone#updateSource\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.Zones.EdgeZone} This Edge Zone.\r\n     */\r\n    updateSource: function ()\r\n    {\r\n        this.points = this.source.getPoints(this.quantity, this.stepRate);\r\n\r\n        //  Remove ends?\r\n        if (this.seamless)\r\n        {\r\n            var a = this.points[0];\r\n            var b = this.points[this.points.length - 1];\r\n\r\n            if (a.x === b.x && a.y === b.y)\r\n            {\r\n                this.points.pop();\r\n            }\r\n        }\r\n\r\n        var oldLength = this._length;\r\n\r\n        this._length = this.points.length;\r\n\r\n        //  Adjust counter if we now have less points than before\r\n        if (this._length < oldLength && this.counter > this._length)\r\n        {\r\n            this.counter = this._length - 1;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Change the source of the EdgeZone.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Zones.EdgeZone#changeSource\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Particles.EdgeZoneSource} source - An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n     *\r\n     * @return {Phaser.GameObjects.Particles.Zones.EdgeZone} This Edge Zone.\r\n     */\r\n    changeSource: function (source)\r\n    {\r\n        this.source = source;\r\n\r\n        return this.updateSource();\r\n    },\r\n\r\n    /**\r\n     * Get the next point in the Zone and set its coordinates on the given Particle.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Zones.EdgeZone#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle.\r\n     */\r\n    getPoint: function (particle)\r\n    {\r\n        if (this._direction === 0)\r\n        {\r\n            this.counter++;\r\n\r\n            if (this.counter >= this._length)\r\n            {\r\n                if (this.yoyo)\r\n                {\r\n                    this._direction = 1;\r\n                    this.counter = this._length - 1;\r\n                }\r\n                else\r\n                {\r\n                    this.counter = 0;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.counter--;\r\n\r\n            if (this.counter === -1)\r\n            {\r\n                if (this.yoyo)\r\n                {\r\n                    this._direction = 0;\r\n                    this.counter = 0;\r\n                }\r\n                else\r\n                {\r\n                    this.counter = this._length - 1;\r\n                }\r\n            }\r\n        }\r\n\r\n        var point = this.points[this.counter];\r\n\r\n        if (point)\r\n        {\r\n            particle.x = point.x;\r\n            particle.y = point.y;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = EdgeZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvRWRnZVpvbmUuanM/M2FjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DLHFDQUFxQyxpQkFBaUI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxtQkFBbUIseURBQXlEO0FBQzVFLFFBQVEseURBQXlEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0Q0FBNEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRDQUE0QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL0VkZ2Vab25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSB6b25lIHRoYXQgcGxhY2VzIHBhcnRpY2xlcyBvbiBhIHNoYXBlJ3MgZWRnZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBFZGdlWm9uZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZX0gc291cmNlIC0gQW4gb2JqZWN0IGluc3RhbmNlIHdpdGggYSBgZ2V0UG9pbnRzKHF1YW50aXR5LCBzdGVwUmF0ZSlgIG1ldGhvZCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcGxhY2Ugb24gdGhlIHNvdXJjZSBlZGdlLiBTZXQgdG8gMCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcFJhdGUgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHBhcnRpY2xlLiBXaGVuIHNldCwgYHF1YW50aXR5YCBpcyBpbXBsaWVkIGFuZCBzaG91bGQgYmUgc2V0IHRvIDAuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3lveW89ZmFsc2VdIC0gV2hldGhlciBwYXJ0aWNsZXMgYXJlIHBsYWNlZCBmcm9tIHN0YXJ0IHRvIGVuZCBhbmQgdGhlbiBlbmQgdG8gc3RhcnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlYW1sZXNzPXRydWVdIC0gV2hldGhlciBvbmUgZW5kcG9pbnQgd2lsbCBiZSByZW1vdmVkIGlmIGl0J3MgaWRlbnRpY2FsIHRvIHRoZSBvdGhlci5cclxuICovXHJcbnZhciBFZGdlWm9uZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFZGdlWm9uZSAoc291cmNlLCBxdWFudGl0eSwgc3RlcFJhdGUsIHlveW8sIHNlYW1sZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5b3lvID09PSB1bmRlZmluZWQpIHsgeW95byA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHNlYW1sZXNzID09PSB1bmRlZmluZWQpIHsgc2VhbWxlc3MgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBpbnN0YW5jZSB3aXRoIGEgYGdldFBvaW50cyhxdWFudGl0eSwgc3RlcFJhdGUpYCBtZXRob2QgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHBvaW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmUjc291cmNlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRWRnZVpvbmVTb3VyY2V8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9pbnRzIHBsYWNlZCBvbiB0aGUgc291cmNlIGVkZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5Qb2ludFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcGxhY2Ugb24gdGhlIHNvdXJjZSBlZGdlLiBTZXQgdG8gMCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNxdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwYXJ0aWNsZS4gV2hlbiBzZXQsIGBxdWFudGl0eWAgaXMgaW1wbGllZCBhbmQgc2hvdWxkIGJlIHNldCB0byAwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNzdGVwUmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwUmF0ZSA9IHN0ZXBSYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBhcmUgcGxhY2VkIGZyb20gc3RhcnQgdG8gZW5kIGFuZCB0aGVuIGVuZCB0byBzdGFydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmUjeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueW95byA9IHlveW87XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb3VudGVyIHVzZWQgZm9yIGl0ZXJhdGluZyB0aGUgRWRnZVpvbmUncyBwb2ludHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb3VudGVyID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgb25lIGVuZHBvaW50IHdpbGwgYmUgcmVtb3ZlZCBpZiBpdCdzIGlkZW50aWNhbCB0byB0aGUgb3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3NlYW1sZXNzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZWFtbGVzcyA9IHNlYW1sZXNzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBjb3VudCBvZiB0aGUgcG9pbnRzIGJlbG9uZ2luZyB0byB0aGlzIEVkZ2Vab25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNfbGVuZ3RoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCB2YWx1ZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGRpcmVjdGlvbiBmb3IgdGhlIEVkZ2Vab25lJ3MgcG9pbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogMCA9IGZvcndhcmRzLCAxID0gYmFja3dhcmRzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI19kaXJlY3Rpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU291cmNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNwb2ludHN9IGZyb20gdGhlIEVkZ2Vab25lJ3NcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3NvdXJjZX0uXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3VwZGF0ZVNvdXJjZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZX0gVGhpcyBFZGdlIFpvbmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNvdXJjZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IHRoaXMuc291cmNlLmdldFBvaW50cyh0aGlzLnF1YW50aXR5LCB0aGlzLnN0ZXBSYXRlKTtcclxuXHJcbiAgICAgICAgLy8gIFJlbW92ZSBlbmRzP1xyXG4gICAgICAgIGlmICh0aGlzLnNlYW1sZXNzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGEgPSB0aGlzLnBvaW50c1swXTtcclxuICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhLnggPT09IGIueCAmJiBhLnkgPT09IGIueSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvbGRMZW5ndGggPSB0aGlzLl9sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gIEFkanVzdCBjb3VudGVyIGlmIHdlIG5vdyBoYXZlIGxlc3MgcG9pbnRzIHRoYW4gYmVmb3JlXHJcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCA8IG9sZExlbmd0aCAmJiB0aGlzLmNvdW50ZXIgPiB0aGlzLl9sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLl9sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBzb3VyY2Ugb2YgdGhlIEVkZ2Vab25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNjaGFuZ2VTb3VyY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZX0gc291cmNlIC0gQW4gb2JqZWN0IGluc3RhbmNlIHdpdGggYSBgZ2V0UG9pbnRzKHF1YW50aXR5LCBzdGVwUmF0ZSlgIG1ldGhvZCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmV9IFRoaXMgRWRnZSBab25lLlxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNvdXJjZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgWm9uZSBhbmQgc2V0IGl0cyBjb29yZGluYXRlcyBvbiB0aGUgZ2l2ZW4gUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIFBhcnRpY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBhcnRpY2xlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ZXIgPj0gdGhpcy5fbGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy55b3lvKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudGVyID0gdGhpcy5fbGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlci0tO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY291bnRlciA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnlveW8pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlciA9IHRoaXMuX2xlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IHRoaXMucG9pbnRzW3RoaXMuY291bnRlcl07XHJcblxyXG4gICAgICAgIGlmIChwb2ludClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnggPSBwb2ludC54O1xyXG4gICAgICAgICAgICBwYXJ0aWNsZS55ID0gcG9pbnQueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWRnZVpvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A zone that places particles randomly within a shape's area.\r\n *\r\n * @class RandomZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.RandomZoneSource} source - An object instance with a `getRandomPoint(point)` method.\r\n */\r\nvar RandomZone = new Class({\r\n\r\n    initialize:\r\n\r\n    function RandomZone (source)\r\n    {\r\n        /**\r\n         * An object instance with a `getRandomPoint(point)` method.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.RandomZone#source\r\n         * @type {Phaser.Types.GameObjects.Particles.RandomZoneSource}\r\n         * @since 3.0.0\r\n         */\r\n        this.source = source;\r\n\r\n        /**\r\n         * Internal calculation vector.\r\n         *\r\n         * @name Phaser.GameObjects.Particles.Zones.RandomZone#_tempVec\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempVec = new Vector2();\r\n    },\r\n\r\n    /**\r\n     * Get the next point in the Zone and set its coordinates on the given Particle.\r\n     *\r\n     * @method Phaser.GameObjects.Particles.Zones.RandomZone#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle.\r\n     */\r\n    getPoint: function (particle)\r\n    {\r\n        var vec = this._tempVec;\r\n\r\n        this.source.getRandomPoint(vec);\r\n\r\n        particle.x = vec.x;\r\n        particle.y = vec.y;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = RandomZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvUmFuZG9tWm9uZS5qcz8yNGUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyx3RUFBdUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvUmFuZG9tWm9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgem9uZSB0aGF0IHBsYWNlcyBwYXJ0aWNsZXMgcmFuZG9tbHkgd2l0aGluIGEgc2hhcGUncyBhcmVhLlxyXG4gKlxyXG4gKiBAY2xhc3MgUmFuZG9tWm9uZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfSBzb3VyY2UgLSBBbiBvYmplY3QgaW5zdGFuY2Ugd2l0aCBhIGBnZXRSYW5kb21Qb2ludChwb2ludClgIG1ldGhvZC5cclxuICovXHJcbnZhciBSYW5kb21ab25lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJhbmRvbVpvbmUgKHNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgaW5zdGFuY2Ugd2l0aCBhIGBnZXRSYW5kb21Qb2ludChwb2ludClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuUmFuZG9tWm9uZSNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBjYWxjdWxhdGlvbiB2ZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLlJhbmRvbVpvbmUjX3RlbXBWZWNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBWZWMgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgWm9uZSBhbmQgc2V0IGl0cyBjb29yZGluYXRlcyBvbiB0aGUgZ2l2ZW4gUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLlJhbmRvbVpvbmUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgUGFydGljbGUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAocGFydGljbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlYyA9IHRoaXMuX3RlbXBWZWM7XHJcblxyXG4gICAgICAgIHRoaXMuc291cmNlLmdldFJhbmRvbVBvaW50KHZlYyk7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlLnggPSB2ZWMueDtcclxuICAgICAgICBwYXJ0aWNsZS55ID0gdmVjLnk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/index.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/particles/zones/index.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Particles.Zones\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    DeathZone: __webpack_require__(/*! ./DeathZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\"),\r\n    EdgeZone: __webpack_require__(/*! ./EdgeZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\"),\r\n    RandomZone: __webpack_require__(/*! ./RandomZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvaW5kZXguanM/M2JiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RkFBYTtBQUNwQyxjQUFjLG1CQUFPLENBQUMscUZBQVk7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMseUZBQWM7O0FBRXRDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRGVhdGhab25lOiByZXF1aXJlKCcuL0RlYXRoWm9uZScpLFxyXG4gICAgRWRnZVpvbmU6IHJlcXVpcmUoJy4vRWRnZVpvbmUnKSxcclxuICAgIFJhbmRvbVpvbmU6IHJlcXVpcmUoJy4vUmFuZG9tWm9uZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Sprite = __webpack_require__(/*! ../sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A PathFollower Game Object.\r\n *\r\n * A PathFollower is a Sprite Game Object with some extra helpers to allow it to follow a Path automatically.\r\n *\r\n * Anything you can do with a standard Sprite can be done with this PathFollower, such as animate it, tint it,\r\n * scale it and so on.\r\n *\r\n * PathFollowers are bound to a single Path at any one time and can traverse the length of the Path, from start\r\n * to finish, forwards or backwards, or from any given point on the Path to its end. They can optionally rotate\r\n * to face the direction of the path, be offset from the path coordinates or rotate independently of the Path.\r\n *\r\n * @class PathFollower\r\n * @extends Phaser.GameObjects.Sprite\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n * \r\n * @extends Phaser.GameObjects.Components.PathFollower\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this PathFollower belongs.\r\n * @param {Phaser.Curves.Path} path - The Path this PathFollower is following. It can only follow one Path at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar PathFollower = new Class({\r\n\r\n    Extends: Sprite,\r\n\r\n    Mixins: [\r\n        Components.PathFollower\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function PathFollower (scene, path, x, y, texture, frame)\r\n    {\r\n        Sprite.call(this, scene, x, y, texture, frame);\r\n\r\n        this.path = path;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler that advances this PathFollower along the path.\r\n     *\r\n     * Called automatically by the Scene step, should not typically be called directly.\r\n     *\r\n     * @method Phaser.GameObjects.PathFollower#preUpdate\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    preUpdate: function (time, delta)\r\n    {\r\n        this.anims.update(time, delta);\r\n        this.pathUpdate(time);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = PathFollower;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyLmpzPzQzZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLGdGQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhdGhmb2xsb3dlci9QYXRoRm9sbG93ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlL1Nwcml0ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXRoRm9sbG93ZXIgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgUGF0aEZvbGxvd2VyIGlzIGEgU3ByaXRlIEdhbWUgT2JqZWN0IHdpdGggc29tZSBleHRyYSBoZWxwZXJzIHRvIGFsbG93IGl0IHRvIGZvbGxvdyBhIFBhdGggYXV0b21hdGljYWxseS5cclxuICpcclxuICogQW55dGhpbmcgeW91IGNhbiBkbyB3aXRoIGEgc3RhbmRhcmQgU3ByaXRlIGNhbiBiZSBkb25lIHdpdGggdGhpcyBQYXRoRm9sbG93ZXIsIHN1Y2ggYXMgYW5pbWF0ZSBpdCwgdGludCBpdCxcclxuICogc2NhbGUgaXQgYW5kIHNvIG9uLlxyXG4gKlxyXG4gKiBQYXRoRm9sbG93ZXJzIGFyZSBib3VuZCB0byBhIHNpbmdsZSBQYXRoIGF0IGFueSBvbmUgdGltZSBhbmQgY2FuIHRyYXZlcnNlIHRoZSBsZW5ndGggb2YgdGhlIFBhdGgsIGZyb20gc3RhcnRcclxuICogdG8gZmluaXNoLCBmb3J3YXJkcyBvciBiYWNrd2FyZHMsIG9yIGZyb20gYW55IGdpdmVuIHBvaW50IG9uIHRoZSBQYXRoIHRvIGl0cyBlbmQuIFRoZXkgY2FuIG9wdGlvbmFsbHkgcm90YXRlXHJcbiAqIHRvIGZhY2UgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGF0aCwgYmUgb2Zmc2V0IGZyb20gdGhlIHBhdGggY29vcmRpbmF0ZXMgb3Igcm90YXRlIGluZGVwZW5kZW50bHkgb2YgdGhlIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXRoRm9sbG93ZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBhdGhGb2xsb3dlclxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBQYXRoRm9sbG93ZXIgYmVsb25ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLlBhdGh9IHBhdGggLSBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBQYXRoRm9sbG93ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNwcml0ZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLlBhdGhGb2xsb3dlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhdGhGb2xsb3dlciAoc2NlbmUsIHBhdGgsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIFNwcml0ZS5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgdGhhdCBhZHZhbmNlcyB0aGlzIFBhdGhGb2xsb3dlciBhbG9uZyB0aGUgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgc3RlcCwgc2hvdWxkIG5vdCB0eXBpY2FsbHkgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlciNwcmVVcGRhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBnZW5lcmF0ZWQgYnkgdGhlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIG9yIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICB0aGlzLnBhdGhVcGRhdGUodGltZSk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aEZvbGxvd2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar PathFollower = __webpack_require__(/*! ./PathFollower */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\");\r\n\r\n/**\r\n * Creates a new PathFollower Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the PathFollower Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#follower\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Curves.Path} path - The Path this PathFollower is connected to.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('follower', function (path, x, y, key, frame)\r\n{\r\n    var sprite = new PathFollower(this.scene, path, x, y, key, frame);\r\n\r\n    this.displayList.add(sprite);\r\n    this.updateList.add(sprite);\r\n\r\n    return sprite;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyRmFjdG9yeS5qcz84YTM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsbUJBQW1CLG1CQUFPLENBQUMsMEZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLGdDQUFnQztBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhdGhmb2xsb3dlci9QYXRoRm9sbG93ZXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUGF0aEZvbGxvd2VyID0gcmVxdWlyZSgnLi9QYXRoRm9sbG93ZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBhdGhGb2xsb3dlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhdGhGb2xsb3dlciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZm9sbG93ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5QYXRofSBwYXRoIC0gVGhlIFBhdGggdGhpcyBQYXRoRm9sbG93ZXIgaXMgY29ubmVjdGVkIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2ZvbGxvd2VyJywgZnVuY3Rpb24gKHBhdGgsIHgsIHksIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHZhciBzcHJpdGUgPSBuZXcgUGF0aEZvbGxvd2VyKHRoaXMuc2NlbmUsIHBhdGgsIHgsIHksIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKHNwcml0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/quad/Quad.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/quad/Quad.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Mesh = __webpack_require__(/*! ../mesh/Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Quad Game Object.\r\n *\r\n * A Quad is a Mesh Game Object pre-configured with two triangles arranged into a rectangle, with a single\r\n * texture spread across them.\r\n *\r\n * You can manipulate the corner points of the quad via the getters and setters such as `topLeftX`, and also\r\n * change their alpha and color values. The quad itself can be moved by adjusting the `x` and `y` properties.\r\n *\r\n * @class Quad\r\n * @extends Phaser.GameObjects.Mesh\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Quad belongs.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Quad = new Class({\r\n\r\n    Extends: Mesh,\r\n\r\n    initialize:\r\n\r\n    function Quad (scene, x, y, texture, frame)\r\n    {\r\n        //  0----3\r\n        //  |\\  B|\r\n        //  | \\  |\r\n        //  |  \\ |\r\n        //  | A \\|\r\n        //  |    \\\r\n        //  1----2\r\n\r\n        var vertices = [\r\n            0, 0, // tl\r\n            0, 0, // bl\r\n            0, 0, // br\r\n            0, 0, // tl\r\n            0, 0, // br\r\n            0, 0 // tr\r\n        ];\r\n\r\n        var uv = [\r\n            0, 0, // tl\r\n            0, 1, // bl\r\n            1, 1, // br\r\n            0, 0, // tl\r\n            1, 1, // br\r\n            1, 0 // tr\r\n        ];\r\n\r\n        var colors = [\r\n            0xffffff, // tl\r\n            0xffffff, // bl\r\n            0xffffff, // br\r\n            0xffffff, // tl\r\n            0xffffff, // br\r\n            0xffffff // tr\r\n        ];\r\n\r\n        var alphas = [\r\n            1, // tl\r\n            1, // bl\r\n            1, // br\r\n            1, // tl\r\n            1, // br\r\n            1 // tr\r\n        ];\r\n\r\n        Mesh.call(this, scene, x, y, vertices, uv, colors, alphas, texture, frame);\r\n\r\n        this.resetPosition();\r\n    },\r\n\r\n    /**\r\n     * Sets the frame this Game Object will use to render with.\r\n     *\r\n     * The Frame has to belong to the current Texture being used.\r\n     *\r\n     * It can be either a string or an index.\r\n     *\r\n     * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n     * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#setFrame\r\n     * @since 3.11.0\r\n     *\r\n     * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFrame: function (frame)\r\n    {\r\n        this.frame = this.texture.get(frame);\r\n\r\n        if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n        {\r\n            this.renderFlags &= ~8;\r\n        }\r\n        else\r\n        {\r\n            this.renderFlags |= 8;\r\n        }\r\n\r\n        frame = this.frame;\r\n\r\n        //   TL\r\n        this.uv[0] = frame.u0;\r\n        this.uv[1] = frame.v0;\r\n\r\n        //   BL\r\n        this.uv[2] = frame.u0;\r\n        this.uv[3] = frame.v1;\r\n\r\n        //   BR\r\n        this.uv[4] = frame.u1;\r\n        this.uv[5] = frame.v1;\r\n\r\n        //   TL\r\n        this.uv[6] = frame.u0;\r\n        this.uv[7] = frame.v0;\r\n\r\n        //   BR\r\n        this.uv[8] = frame.u1;\r\n        this.uv[9] = frame.v1;\r\n\r\n        //   TR\r\n        this.uv[10] = frame.u1;\r\n        this.uv[11] = frame.v0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The top-left x vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topLeftX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topLeftX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this.vertices[0];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[0] = value - this.x;\r\n            this.vertices[6] = value - this.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-left y vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topLeftY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topLeftY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this.vertices[1];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[1] = value - this.y;\r\n            this.vertices[7] = value - this.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-right x vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topRightX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topRightX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this.vertices[10];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[10] = value - this.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-right y vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topRightY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topRightY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this.vertices[11];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[11] = value - this.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-left x vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomLeftX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomLeftX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this.vertices[2];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[2] = value - this.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-left y vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomLeftY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomLeftY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this.vertices[3];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[3] = value - this.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-right x vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomRightX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomRightX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this.vertices[4];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[4] = value - this.x;\r\n            this.vertices[8] = value - this.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-right y vertex of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomRightY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomRightY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this.vertices[5];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.vertices[5] = value - this.y;\r\n            this.vertices[9] = value - this.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-left alpha value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topLeftAlpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topLeftAlpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.alphas[0];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.alphas[0] = value;\r\n            this.alphas[3] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-right alpha value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topRightAlpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topRightAlpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.alphas[5];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.alphas[5] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-left alpha value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomLeftAlpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomLeftAlpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.alphas[1];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.alphas[1] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-right alpha value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomRightAlpha\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomRightAlpha: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.alphas[2];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.alphas[2] = value;\r\n            this.alphas[4] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-left color value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topLeftColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topLeftColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.colors[0];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.colors[0] = value;\r\n            this.colors[3] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top-right color value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#topRightColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    topRightColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.colors[5];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.colors[5] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-left color value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomLeftColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomLeftColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.colors[1];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.colors[1] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom-right color value of this Quad.\r\n     *\r\n     * @name Phaser.GameObjects.Quad#bottomRightColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottomRightColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.colors[2];\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.colors[2] = value;\r\n            this.colors[4] = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the top-left vertex position of this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#setTopLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate of the vertex.\r\n     * @param {number} y - The vertical coordinate of the vertex.\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    setTopLeft: function (x, y)\r\n    {\r\n        this.topLeftX = x;\r\n        this.topLeftY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the top-right vertex position of this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#setTopRight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate of the vertex.\r\n     * @param {number} y - The vertical coordinate of the vertex.\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    setTopRight: function (x, y)\r\n    {\r\n        this.topRightX = x;\r\n        this.topRightY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the bottom-left vertex position of this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#setBottomLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate of the vertex.\r\n     * @param {number} y - The vertical coordinate of the vertex.\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    setBottomLeft: function (x, y)\r\n    {\r\n        this.bottomLeftX = x;\r\n        this.bottomLeftY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the bottom-right vertex position of this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#setBottomRight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate of the vertex.\r\n     * @param {number} y - The vertical coordinate of the vertex.\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    setBottomRight: function (x, y)\r\n    {\r\n        this.bottomRightX = x;\r\n        this.bottomRightY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the positions of the four corner vertices of this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#resetPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    resetPosition: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var halfWidth = Math.floor(this.width / 2);\r\n        var halfHeight = Math.floor(this.height / 2);\r\n\r\n        this.setTopLeft(x - halfWidth, y - halfHeight);\r\n        this.setTopRight(x + halfWidth, y - halfHeight);\r\n        this.setBottomLeft(x - halfWidth, y + halfHeight);\r\n        this.setBottomRight(x + halfWidth, y + halfHeight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the alpha values used by this Quad back to 1.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#resetAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    resetAlpha: function ()\r\n    {\r\n        var alphas = this.alphas;\r\n\r\n        alphas[0] = 1;\r\n        alphas[1] = 1;\r\n        alphas[2] = 1;\r\n        alphas[3] = 1;\r\n        alphas[4] = 1;\r\n        alphas[5] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the color values used by this Quad back to 0xffffff.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#resetColors\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    resetColors: function ()\r\n    {\r\n        var colors = this.colors;\r\n\r\n        colors[0] = 0xffffff;\r\n        colors[1] = 0xffffff;\r\n        colors[2] = 0xffffff;\r\n        colors[3] = 0xffffff;\r\n        colors[4] = 0xffffff;\r\n        colors[5] = 0xffffff;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the position, alpha and color values used by this Quad.\r\n     *\r\n     * @method Phaser.GameObjects.Quad#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Quad} This Game Object.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.resetPosition();\r\n\r\n        this.resetAlpha();\r\n\r\n        return this.resetColors();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Quad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWQuanM/OThhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxXQUFXLG1CQUFPLENBQUMsd0VBQWM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNZXNoID0gcmVxdWlyZSgnLi4vbWVzaC9NZXNoJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFF1YWQgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgUXVhZCBpcyBhIE1lc2ggR2FtZSBPYmplY3QgcHJlLWNvbmZpZ3VyZWQgd2l0aCB0d28gdHJpYW5nbGVzIGFycmFuZ2VkIGludG8gYSByZWN0YW5nbGUsIHdpdGggYSBzaW5nbGVcclxuICogdGV4dHVyZSBzcHJlYWQgYWNyb3NzIHRoZW0uXHJcbiAqXHJcbiAqIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29ybmVyIHBvaW50cyBvZiB0aGUgcXVhZCB2aWEgdGhlIGdldHRlcnMgYW5kIHNldHRlcnMgc3VjaCBhcyBgdG9wTGVmdFhgLCBhbmQgYWxzb1xyXG4gKiBjaGFuZ2UgdGhlaXIgYWxwaGEgYW5kIGNvbG9yIHZhbHVlcy4gVGhlIHF1YWQgaXRzZWxmIGNhbiBiZSBtb3ZlZCBieSBhZGp1c3RpbmcgdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBRdWFkXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIFF1YWQgYmVsb25ncy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKi9cclxudmFyIFF1YWQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE1lc2gsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBRdWFkIChzY2VuZSwgeCwgeSwgdGV4dHVyZSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIDAtLS0tM1xyXG4gICAgICAgIC8vICB8XFwgIEJ8XHJcbiAgICAgICAgLy8gIHwgXFwgIHxcclxuICAgICAgICAvLyAgfCAgXFwgfFxyXG4gICAgICAgIC8vICB8IEEgXFx8XHJcbiAgICAgICAgLy8gIHwgICAgXFxcclxuICAgICAgICAvLyAgMS0tLS0yXHJcblxyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYmxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCAvLyB0clxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciB1diA9IFtcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMSwgLy8gYmxcclxuICAgICAgICAgICAgMSwgMSwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMSwgMSwgLy8gYnJcclxuICAgICAgICAgICAgMSwgMCAvLyB0clxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBjb2xvcnMgPSBbXHJcbiAgICAgICAgICAgIDB4ZmZmZmZmLCAvLyB0bFxyXG4gICAgICAgICAgICAweGZmZmZmZiwgLy8gYmxcclxuICAgICAgICAgICAgMHhmZmZmZmYsIC8vIGJyXHJcbiAgICAgICAgICAgIDB4ZmZmZmZmLCAvLyB0bFxyXG4gICAgICAgICAgICAweGZmZmZmZiwgLy8gYnJcclxuICAgICAgICAgICAgMHhmZmZmZmYgLy8gdHJcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB2YXIgYWxwaGFzID0gW1xyXG4gICAgICAgICAgICAxLCAvLyB0bFxyXG4gICAgICAgICAgICAxLCAvLyBibFxyXG4gICAgICAgICAgICAxLCAvLyBiclxyXG4gICAgICAgICAgICAxLCAvLyB0bFxyXG4gICAgICAgICAgICAxLCAvLyBiclxyXG4gICAgICAgICAgICAxIC8vIHRyXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgTWVzaC5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZyYW1lIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGhlIEZyYW1lIGhhcyB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgVGV4dHVyZSBiZWluZyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEl0IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyBgc2V0RnJhbWVgIHdpbGwgbW9kaWZ5IHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIG9mIHlvdXIgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBJdCB3aWxsIGFsc28gY2hhbmdlIHRoZSBgb3JpZ2luYCBpZiB0aGUgRnJhbWUgaGFzIGEgY3VzdG9tIHBpdm90IHBvaW50LCBhcyBleHBvcnRlZCBmcm9tIHBhY2thZ2VzIGxpa2UgVGV4dHVyZSBQYWNrZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+ODtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSA4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJhbWUgPSB0aGlzLmZyYW1lO1xyXG5cclxuICAgICAgICAvLyAgIFRMXHJcbiAgICAgICAgdGhpcy51dlswXSA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHRoaXMudXZbMV0gPSBmcmFtZS52MDtcclxuXHJcbiAgICAgICAgLy8gICBCTFxyXG4gICAgICAgIHRoaXMudXZbMl0gPSBmcmFtZS51MDtcclxuICAgICAgICB0aGlzLnV2WzNdID0gZnJhbWUudjE7XHJcblxyXG4gICAgICAgIC8vICAgQlJcclxuICAgICAgICB0aGlzLnV2WzRdID0gZnJhbWUudTE7XHJcbiAgICAgICAgdGhpcy51dls1XSA9IGZyYW1lLnYxO1xyXG5cclxuICAgICAgICAvLyAgIFRMXHJcbiAgICAgICAgdGhpcy51dls2XSA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHRoaXMudXZbN10gPSBmcmFtZS52MDtcclxuXHJcbiAgICAgICAgLy8gICBCUlxyXG4gICAgICAgIHRoaXMudXZbOF0gPSBmcmFtZS51MTtcclxuICAgICAgICB0aGlzLnV2WzldID0gZnJhbWUudjE7XHJcblxyXG4gICAgICAgIC8vICAgVFJcclxuICAgICAgICB0aGlzLnV2WzEwXSA9IGZyYW1lLnUxO1xyXG4gICAgICAgIHRoaXMudXZbMTFdID0gZnJhbWUudjA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtbGVmdCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjdG9wTGVmdFhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMF07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzBdID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNl0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtbGVmdCB5IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjdG9wTGVmdFlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMudmVydGljZXNbMV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzFdID0gdmFsdWUgLSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbN10gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgeCB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0WFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BSaWdodFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMTBdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1sxMF0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgeSB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0WVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BSaWdodFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMudmVydGljZXNbMTFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1sxMV0gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20tbGVmdCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tTGVmdFhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tTGVmdFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzJdID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm90dG9tLWxlZnQgeSB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI2JvdHRvbUxlZnRZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbUxlZnRZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyB0aGlzLnZlcnRpY2VzWzNdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1szXSA9IHZhbHVlIC0gdGhpcy55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0WDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgdGhpcy52ZXJ0aWNlc1s0XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNF0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1s4XSA9IHZhbHVlIC0gdGhpcy54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCB5IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0WToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ICsgdGhpcy52ZXJ0aWNlc1s1XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNV0gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1s5XSA9IHZhbHVlIC0gdGhpcy55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvcC1sZWZ0IGFscGhhIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCN0b3BMZWZ0QWxwaGFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdEFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFscGhhc1swXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzNdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wLXJpZ2h0IGFscGhhIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCN0b3BSaWdodEFscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRvcFJpZ2h0QWxwaGE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxwaGFzWzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYXNbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20tbGVmdCBhbHBoYSB2YWx1ZSBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tTGVmdEFscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbUxlZnRBbHBoYToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbHBoYXNbMV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhc1sxXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCBhbHBoYSB2YWx1ZSBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRBbHBoYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b21SaWdodEFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFscGhhc1syXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzRdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wLWxlZnQgY29sb3IgdmFsdWUgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcExlZnRDb2xvclxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BMZWZ0Q29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JzWzBdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbM10gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgY29sb3IgdmFsdWUgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0Q29sb3JcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wUmlnaHRDb2xvcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xvcnNbNV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yc1s1XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1sZWZ0IGNvbG9yIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNib3R0b21MZWZ0Q29sb3JcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tTGVmdENvbG9yOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yc1sxXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3JzWzFdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm90dG9tLXJpZ2h0IGNvbG9yIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNib3R0b21SaWdodENvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0Q29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JzWzJdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbNF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRvcC1sZWZ0IHZlcnRleCBwb3NpdGlvbiBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRUb3BMZWZ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhlIHZlcnRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgb2YgdGhlIHZlcnRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG9wTGVmdDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0WCA9IHg7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0WSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRvcC1yaWdodCB2ZXJ0ZXggcG9zaXRpb24gb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjc2V0VG9wUmlnaHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUb3BSaWdodDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3BSaWdodFggPSB4O1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm90dG9tLWxlZnQgdmVydGV4IHBvc2l0aW9uIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3NldEJvdHRvbUxlZnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb3R0b21MZWZ0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvdHRvbUxlZnRYID0geDtcclxuICAgICAgICB0aGlzLmJvdHRvbUxlZnRZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm90dG9tLXJpZ2h0IHZlcnRleCBwb3NpdGlvbiBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRCb3R0b21SaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdHRvbVJpZ2h0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvdHRvbVJpZ2h0WCA9IHg7XHJcbiAgICAgICAgdGhpcy5ib3R0b21SaWdodFkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZm91ciBjb3JuZXIgdmVydGljZXMgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjcmVzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0UG9zaXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGhhbGZXaWR0aCA9IE1hdGguZmxvb3IodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gTWF0aC5mbG9vcih0aGlzLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRvcExlZnQoeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0VG9wUmlnaHQoeCArIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0Qm90dG9tTGVmdCh4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRCb3R0b21SaWdodCh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgYWxwaGEgdmFsdWVzIHVzZWQgYnkgdGhpcyBRdWFkIGJhY2sgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3Jlc2V0QWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhbHBoYXMgPSB0aGlzLmFscGhhcztcclxuXHJcbiAgICAgICAgYWxwaGFzWzBdID0gMTtcclxuICAgICAgICBhbHBoYXNbMV0gPSAxO1xyXG4gICAgICAgIGFscGhhc1syXSA9IDE7XHJcbiAgICAgICAgYWxwaGFzWzNdID0gMTtcclxuICAgICAgICBhbHBoYXNbNF0gPSAxO1xyXG4gICAgICAgIGFscGhhc1s1XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgY29sb3IgdmFsdWVzIHVzZWQgYnkgdGhpcyBRdWFkIGJhY2sgdG8gMHhmZmZmZmYuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNyZXNldENvbG9yc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sb3JzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgY29sb3JzWzBdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzFdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzJdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzNdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzRdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzVdID0gMHhmZmZmZmY7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgcG9zaXRpb24sIGFscGhhIGFuZCBjb2xvciB2YWx1ZXMgdXNlZCBieSB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QWxwaGEoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRDb2xvcnMoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/Quad.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/quad/QuadCreator.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/quad/QuadCreator.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Quad = __webpack_require__(/*! ./Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\n\r\n/**\r\n * Creates a new Quad Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Quad Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#quad\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Quad} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('quad', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n    var quad = new Quad(this.scene, x, y, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, quad, config);\r\n\r\n    return quad;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWRDcmVhdG9yLmpzP2ZlYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcXVhZC9RdWFkQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBRdWFkID0gcmVxdWlyZSgnLi9RdWFkJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBRdWFkIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBRdWFkIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjcXVhZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcigncXVhZCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHF1YWQgPSBuZXcgUXVhZCh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBxdWFkLCBjb25maWcpO1xyXG5cclxuICAgIHJldHVybiBxdWFkO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/QuadCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/quad/QuadFactory.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/quad/QuadFactory.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Quad = __webpack_require__(/*! ./Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Quad Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Quad Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#quad\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * \r\n * @return {Phaser.GameObjects.Quad} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n    GameObjectFactory.register('quad', function (x, y, key, frame)\r\n    {\r\n        return this.displayList.add(new Quad(this.scene, x, y, key, frame));\r\n    });\r\n}\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//  \r\n//  There are several properties available to use:\r\n//  \r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWRGYWN0b3J5LmpzPzhmZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQSxJQUFJLElBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcXVhZC9RdWFkRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFF1YWQgPSByZXF1aXJlKCcuL1F1YWQnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFF1YWQgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBRdWFkIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcXVhZFxyXG4gKiBAd2ViZ2xPbmx5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncXVhZCcsIGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgUXVhZCh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vICBcclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy8gIFxyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/QuadFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Camera = __webpack_require__(/*! ../../cameras/2d/BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Render = __webpack_require__(/*! ./RenderTextureRender */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\nvar UUID = __webpack_require__(/*! ../../utils/string/UUID */ \"./node_modules/phaser/src/utils/string/UUID.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Render Texture.\r\n * \r\n * A Render Texture is a special texture that allows any number of Game Objects to be drawn to it. You can take many complex objects and\r\n * draw them all to this one texture, which can they be used as the texture for other Game Object's. It's a way to generate dynamic\r\n * textures at run-time that are WebGL friendly and don't invoke expensive GPU uploads.\r\n * \r\n * Note that under WebGL a FrameBuffer, which is what the Render Texture uses internally, cannot be anti-aliased. This means\r\n * that when drawing objects such as Shapes to a Render Texture they will appear to be drawn with no aliasing, however this\r\n * is a technical limitation of WebGL. To get around it, create your shape as a texture in an art package, then draw that\r\n * to the Render Texture.\r\n *\r\n * @class RenderTexture\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.2.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {integer} [width=32] - The width of the Render Texture.\r\n * @param {integer} [height=32] - The height of the Render Texture.\r\n * @property {string} [key] - The texture key to make the RenderTexture from.\r\n * @property {string} [frame] - the frame to make the RenderTexture from.\r\n */\r\nvar RenderTexture = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Crop,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Render\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function RenderTexture (scene, x, y, width, height, key, frame)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 32; }\r\n        if (height === undefined) { height = 32; }\r\n\r\n        GameObject.call(this, scene, 'RenderTexture');\r\n\r\n        /**\r\n         * A reference to either the Canvas or WebGL Renderer that the Game instance is using.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.2.0\r\n         */\r\n        this.renderer = scene.sys.game.renderer;\r\n\r\n        /**\r\n         * A reference to the Texture Manager.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#textureManager\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.12.0\r\n         */\r\n        this.textureManager = scene.sys.textures;\r\n\r\n        /**\r\n         * The tint of the Render Texture when rendered.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#globalTint\r\n         * @type {number}\r\n         * @default 0xffffff\r\n         * @since 3.2.0\r\n         */\r\n        this.globalTint = 0xffffff;\r\n\r\n        /**\r\n         * The alpha of the Render Texture when rendered.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#globalAlpha\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.2.0\r\n         */\r\n        this.globalAlpha = 1;\r\n\r\n        /**\r\n         * The HTML Canvas Element that the Render Texture is drawing to when using the Canvas Renderer.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.2.0\r\n         */\r\n        this.canvas = null;\r\n\r\n        /**\r\n         * A reference to the GL Frame Buffer this Render Texture is drawing to.\r\n         * This is only set if Phaser is running with the WebGL Renderer.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#framebuffer\r\n         * @type {?WebGLFramebuffer}\r\n         * @since 3.2.0\r\n         */\r\n        this.framebuffer = null;\r\n\r\n        /**\r\n         * Is this Render Texture dirty or not? If not it won't spend time clearing or filling itself.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#dirty\r\n         * @type {boolean}\r\n         * @since 3.12.0\r\n         */\r\n        this.dirty = false;\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        /**\r\n         * The Texture corresponding to this Render Texture.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @since 3.12.0\r\n         */\r\n        this.texture = null;\r\n\r\n        /**\r\n         * The Frame corresponding to this Render Texture.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @since 3.12.0\r\n         */\r\n        this.frame = null;\r\n\r\n        /**\r\n         * Internal saved texture flag.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#_saved\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._saved = false;\r\n\r\n        if (key === undefined)\r\n        {\r\n            this.canvas = CanvasPool.create2D(this, width, height);\r\n\r\n            //  Create a new Texture for this Text object\r\n            this.texture = scene.sys.textures.addCanvas(UUID(), this.canvas);\r\n            \r\n            //  Get the frame\r\n            this.frame = this.texture.get();\r\n        }\r\n        else\r\n        {\r\n            this.texture = scene.sys.textures.get(key);\r\n            \r\n            //  Get the frame\r\n            this.frame = this.texture.get(frame);\r\n\r\n            this.canvas = this.frame.source.image;\r\n            this._saved = true;\r\n\r\n            this.dirty = true;\r\n\r\n            this.width = this.frame.cutWidth;\r\n            this.height = this.frame.cutHeight;\r\n        }\r\n\r\n        /**\r\n         * A reference to the Rendering Context belonging to the Canvas Element this Render Texture is drawing to.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#context\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.2.0\r\n         */\r\n        this.context = this.canvas.getContext('2d');\r\n\r\n        /**\r\n         * Internal erase mode flag.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#_eraseMode\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._eraseMode = false;\r\n\r\n        /**\r\n         * An internal Camera that can be used to move around the Render Texture.\r\n         * Control it just like you would any Scene Camera. The difference is that it only impacts the placement of what\r\n         * is drawn to the Render Texture. You can scroll, zoom and rotate this Camera.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#camera\r\n         * @type {Phaser.Cameras.Scene2D.BaseCamera}\r\n         * @since 3.12.0\r\n         */\r\n        this.camera = new Camera(0, 0, width, height);\r\n\r\n        /**\r\n         * A reference to the WebGL Rendering Context.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#gl\r\n         * @type {WebGLRenderingContext}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.gl = null;\r\n\r\n        /**\r\n         * A reference to the WebGLTexture that is being rendered to in a WebGL Context.\r\n         *\r\n         * @name Phaser.GameObjects.RenderTexture#glTexture\r\n         * @type {WebGLTexture}\r\n         * @default null\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.glTexture = null;\r\n\r\n        var renderer = this.renderer;\r\n\r\n        if (renderer.type === CONST.WEBGL)\r\n        {\r\n            var gl = renderer.gl;\r\n\r\n            this.gl = gl;\r\n            this.glTexture = this.frame.source.glTexture;\r\n            this.drawGameObject = this.batchGameObjectWebGL;\r\n            this.framebuffer = renderer.createFramebuffer(width, height, this.glTexture, false);\r\n        }\r\n        else if (renderer.type === CONST.CANVAS)\r\n        {\r\n            this.drawGameObject = this.batchGameObjectCanvas;\r\n        }\r\n\r\n        this.camera.setScene(scene);\r\n\r\n        this.setPosition(x, y);\r\n\r\n        if (key === undefined)\r\n        {\r\n            this.setSize(width, height);\r\n        }\r\n\r\n        this.setOrigin(0, 0);\r\n        this.initPipeline();\r\n    },\r\n\r\n    /**\r\n     * Sets the size of this Game Object.\r\n     * \r\n     * @method Phaser.GameObjects.RenderTexture#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * \r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        return this.resize(width, height);\r\n    },\r\n\r\n    /**\r\n     * Resizes the Render Texture to the new dimensions given.\r\n     * \r\n     * If Render Texture was created from specific frame, only the size of the frame will be changed. The size of the source\r\n     * texture will not change.\r\n     *\r\n     * If Render Texture was not created from specific frame, the following will happen:\r\n     * In WebGL it will destroy and then re-create the frame buffer being used by the Render Texture.\r\n     * In Canvas it will resize the underlying canvas element.\r\n     * Both approaches will erase everything currently drawn to the Render Texture.\r\n     *\r\n     * If the dimensions given are the same as those already being used, calling this method will do nothing.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#resize\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} width - The new width of the Render Texture.\r\n     * @param {number} [height=width] - The new height of the Render Texture. If not specified, will be set the same as the `width`.\r\n     *\r\n     * @return {this} This Render Texture.\r\n     */\r\n    resize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        if (width !== this.width || height !== this.height)\r\n        {\r\n            if (this.frame.name === '__BASE')\r\n            {\r\n                //  Resize the texture\r\n\r\n                this.canvas.width = width;\r\n                this.canvas.height = height;\r\n                \r\n                this.texture.width = width;\r\n                this.texture.height = height;\r\n                \r\n                if (this.gl)\r\n                {\r\n                    var gl = this.gl;\r\n\r\n                    this.renderer.deleteTexture(this.frame.source.glTexture);\r\n                    this.renderer.deleteFramebuffer(this.framebuffer);\r\n\r\n                    var glTexture = this.renderer.createTexture2D(0, gl.NEAREST, gl.NEAREST, gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE, gl.RGBA, null, width, height, false);\r\n\r\n                    this.framebuffer = this.renderer.createFramebuffer(width, height, glTexture, false);\r\n\r\n                    this.frame.source.isRenderTexture = true;\r\n\r\n                    this.frame.glTexture = glTexture;\r\n                    this.glTexture = glTexture;\r\n                }\r\n\r\n                this.frame.source.width = width;\r\n                this.frame.source.height = height;\r\n\r\n                this.camera.setSize(width, height);\r\n\r\n                this.frame.setSize(width, height);\r\n\r\n                this.width = width;\r\n                this.height = height;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  Resize the frame\r\n\r\n            var baseFrame = this.texture.getSourceImage();\r\n\r\n            if (this.frame.cutX + width > baseFrame.width)\r\n            {\r\n                width = baseFrame.width - this.frame.cutX;\r\n            }\r\n\r\n            if (this.frame.cutY + height > baseFrame.height)\r\n            {\r\n                height = baseFrame.height - this.frame.cutY;\r\n            }\r\n\r\n            this.frame.setSize(width, height, this.frame.cutX, this.frame.cutY);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n\r\n        var input = this.input;\r\n\r\n        if (input && !input.customHitArea)\r\n        {\r\n            input.hitArea.width = width;\r\n            input.hitArea.height = height;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the tint to use when rendering this Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#setGlobalTint\r\n     * @since 3.2.0\r\n     *\r\n     * @param {integer} tint - The tint value.\r\n     *\r\n     * @return {this} This Render Texture.\r\n     */\r\n    setGlobalTint: function (tint)\r\n    {\r\n        this.globalTint = tint;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the alpha to use when rendering this Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#setGlobalAlpha\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} alpha - The alpha value.\r\n     *\r\n     * @return {this} This Render Texture.\r\n     */\r\n    setGlobalAlpha: function (alpha)\r\n    {\r\n        this.globalAlpha = alpha;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stores a copy of this Render Texture in the Texture Manager using the given key.\r\n     * \r\n     * After doing this, any texture based Game Object, such as a Sprite, can use the contents of this\r\n     * Render Texture by using the texture key:\r\n     * \r\n     * ```javascript\r\n     * var rt = this.add.renderTexture(0, 0, 128, 128);\r\n     * \r\n     * // Draw something to the Render Texture\r\n     * \r\n     * rt.saveTexture('doodle');\r\n     * \r\n     * this.add.image(400, 300, 'doodle');\r\n     * ```\r\n     * \r\n     * Updating the contents of this Render Texture will automatically update _any_ Game Object\r\n     * that is using it as a texture. Calling `saveTexture` again will not save another copy\r\n     * of the same texture, it will just rename the key of the existing copy.\r\n     * \r\n     * By default it will create a single base texture. You can add frames to the texture\r\n     * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n     * to use a specific frame from a Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#saveTexture\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n     *\r\n     * @return {Phaser.Textures.Texture} The Texture that was saved.\r\n     */\r\n    saveTexture: function (key)\r\n    {\r\n        this.textureManager.renameTexture(this.texture.key, key);\r\n        \r\n        this._saved = true;\r\n\r\n        return this.texture;\r\n    },\r\n\r\n    /**\r\n     * Fills the Render Texture with the given color.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#fill\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} rgb - The color to fill the Render Texture with.\r\n     * @param {number} [alpha=1] - The alpha value used by the fill.\r\n     * @param {number} [x=0] - The left coordinate of the fill rectangle.\r\n     * @param {number} [y=0] - The top coordinate of the fill rectangle.\r\n     * @param {number} [width=this.frame.cutWidth] - The width of the fill rectangle.\r\n     * @param {number} [height=this.frame.cutHeight] - The height of the fill rectangle.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    fill: function (rgb, alpha, x, y, width, height)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.frame.cutWidth; }\r\n        if (height === undefined) { height = this.frame.cutHeight; }\r\n\r\n        var r = ((rgb >> 16) | 0) & 0xff;\r\n        var g = ((rgb >> 8) | 0) & 0xff;\r\n        var b = (rgb | 0) & 0xff;\r\n\r\n        var gl = this.gl;\r\n        var frame = this.frame;\r\n\r\n        this.camera.preRender(1, 1);\r\n\r\n        if (gl)\r\n        {\r\n            var cx = this.camera._cx;\r\n            var cy = this.camera._cy;\r\n            var cw = this.camera._cw;\r\n            var ch = this.camera._ch;\r\n\r\n            this.renderer.setFramebuffer(this.framebuffer, false);\r\n\r\n            this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n\r\n            var pipeline = this.pipeline;\r\n    \r\n            pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n\r\n            pipeline.drawFillRect(\r\n                x, y, width, height,\r\n                Utils.getTintFromFloats(r / 255, g / 255, b / 255, 1),\r\n                alpha\r\n            );\r\n\r\n            this.renderer.setFramebuffer(null, false);\r\n\r\n            this.renderer.popScissor();\r\n\r\n            pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n        }\r\n        else\r\n        {\r\n            this.renderer.setContext(this.context);\r\n\r\n            this.context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';\r\n            this.context.fillRect(x + frame.cutX, y + frame.cutY, width, height);\r\n\r\n            this.renderer.setContext();\r\n        }\r\n\r\n        this.dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clears the Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#clear\r\n     * @since 3.2.0\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    clear: function ()\r\n    {\r\n        if (this.dirty)\r\n        {\r\n            var gl = this.gl;\r\n\r\n            if (gl)\r\n            {\r\n                var renderer = this.renderer;\r\n\r\n                renderer.setFramebuffer(this.framebuffer, true);\r\n        \r\n                if (this.frame.cutWidth !== this.canvas.width || this.frame.cutHeight !== this.canvas.height)\r\n                {\r\n                    gl.scissor(this.frame.cutX, this.frame.cutY, this.frame.cutWidth, this.frame.cutHeight);\r\n                }\r\n\r\n                gl.clearColor(0, 0, 0, 0);\r\n                gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n                renderer.setFramebuffer(null, true);\r\n            }\r\n            else\r\n            {\r\n                var ctx = this.context;\r\n\r\n                ctx.save();\r\n                ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n                ctx.clearRect(this.frame.cutX, this.frame.cutY, this.frame.cutWidth, this.frame.cutHeight);\r\n                ctx.restore();\r\n            }\r\n\r\n            this.dirty = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draws the given object, or an array of objects, to this Render Texture using a blend mode of ERASE.\r\n     * This has the effect of erasing any filled pixels in the objects from this Render Texture.\r\n     * \r\n     * It can accept any of the following:\r\n     * \r\n     * * Any renderable Game Object, such as a Sprite, Text, Graphics or TileSprite.\r\n     * * Dynamic and Static Tilemap Layers.\r\n     * * A Group. The contents of which will be iterated and drawn in turn.\r\n     * * A Container. The contents of which will be iterated fully, and drawn in turn.\r\n     * * A Scene's Display List. Pass in `Scene.children` to draw the whole list.\r\n     * * Another Render Texture.\r\n     * * A Texture Frame instance.\r\n     * * A string. This is used to look-up a texture from the Texture Manager.\r\n     * \r\n     * Note: You cannot erase a Render Texture from itself.\r\n     * \r\n     * If passing in a Group or Container it will only draw children that return `true`\r\n     * when their `willRender()` method is called. I.e. a Container with 10 children,\r\n     * 5 of which have `visible=false` will only draw the 5 visible ones.\r\n     * \r\n     * If passing in an array of Game Objects it will draw them all, regardless if\r\n     * they pass a `willRender` check or not.\r\n     * \r\n     * You can pass in a string in which case it will look for a texture in the Texture\r\n     * Manager matching that string, and draw the base frame.\r\n     * \r\n     * You can pass in the `x` and `y` coordinates to draw the objects at. The use of\r\n     * the coordinates differ based on what objects are being drawn. If the object is\r\n     * a Group, Container or Display List, the coordinates are _added_ to the positions\r\n     * of the children. For all other types of object, the coordinates are exact.\r\n     * \r\n     * Calling this method causes the WebGL batch to flush, so it can write the texture\r\n     * data to the framebuffer being used internally. The batch is flushed at the end,\r\n     * after the entries have been iterated. So if you've a bunch of objects to draw,\r\n     * try and pass them in an array in one single call, rather than making lots of\r\n     * separate calls.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#erase\r\n     * @since 3.16.0\r\n     *\r\n     * @param {any} entries - Any renderable Game Object, or Group, Container, Display List, other Render Texture, Texture Frame or an array of any of these.\r\n     * @param {number} [x] - The x position to draw the Frame at, or the offset applied to the object.\r\n     * @param {number} [y] - The y position to draw the Frame at, or the offset applied to the object.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    erase: function (entries, x, y)\r\n    {\r\n        this._eraseMode = true;\r\n\r\n        var blendMode = this.renderer.currentBlendMode;\r\n\r\n        this.renderer.setBlendMode(BlendModes.ERASE);\r\n\r\n        this.draw(entries, x, y, 1, 16777215);\r\n\r\n        this.renderer.setBlendMode(blendMode);\r\n\r\n        this._eraseMode = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draws the given object, or an array of objects, to this Render Texture.\r\n     * \r\n     * It can accept any of the following:\r\n     * \r\n     * * Any renderable Game Object, such as a Sprite, Text, Graphics or TileSprite.\r\n     * * Dynamic and Static Tilemap Layers.\r\n     * * A Group. The contents of which will be iterated and drawn in turn.\r\n     * * A Container. The contents of which will be iterated fully, and drawn in turn.\r\n     * * A Scene's Display List. Pass in `Scene.children` to draw the whole list.\r\n     * * Another Render Texture.\r\n     * * A Texture Frame instance.\r\n     * * A string. This is used to look-up a texture from the Texture Manager.\r\n     * \r\n     * Note: You cannot draw a Render Texture to itself.\r\n     * \r\n     * If passing in a Group or Container it will only draw children that return `true`\r\n     * when their `willRender()` method is called. I.e. a Container with 10 children,\r\n     * 5 of which have `visible=false` will only draw the 5 visible ones.\r\n     * \r\n     * If passing in an array of Game Objects it will draw them all, regardless if\r\n     * they pass a `willRender` check or not.\r\n     * \r\n     * You can pass in a string in which case it will look for a texture in the Texture\r\n     * Manager matching that string, and draw the base frame. If you need to specify\r\n     * exactly which frame to draw then use the method `drawFrame` instead.\r\n     * \r\n     * You can pass in the `x` and `y` coordinates to draw the objects at. The use of\r\n     * the coordinates differ based on what objects are being drawn. If the object is\r\n     * a Group, Container or Display List, the coordinates are _added_ to the positions\r\n     * of the children. For all other types of object, the coordinates are exact.\r\n     * \r\n     * The `alpha` and `tint` values are only used by Texture Frames.\r\n     * Game Objects use their own alpha and tint values when being drawn.\r\n     * \r\n     * Calling this method causes the WebGL batch to flush, so it can write the texture\r\n     * data to the framebuffer being used internally. The batch is flushed at the end,\r\n     * after the entries have been iterated. So if you've a bunch of objects to draw,\r\n     * try and pass them in an array in one single call, rather than making lots of\r\n     * separate calls.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#draw\r\n     * @since 3.2.0\r\n     *\r\n     * @param {any} entries - Any renderable Game Object, or Group, Container, Display List, other Render Texture, Texture Frame or an array of any of these.\r\n     * @param {number} [x] - The x position to draw the Frame at, or the offset applied to the object.\r\n     * @param {number} [y] - The y position to draw the Frame at, or the offset applied to the object.\r\n     * @param {number} [alpha] -  The alpha value. Only used for Texture Frames and if not specified defaults to the `globalAlpha` property. Game Objects use their own current alpha value.\r\n     * @param {number} [tint] -  WebGL only. The tint color value. Only used for Texture Frames and if not specified defaults to the `globalTint` property. Game Objects use their own current tint value.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    draw: function (entries, x, y, alpha, tint)\r\n    {\r\n        if (alpha === undefined) { alpha = this.globalAlpha; }\r\n\r\n        if (tint === undefined)\r\n        {\r\n            tint = (this.globalTint >> 16) + (this.globalTint & 0xff00) + ((this.globalTint & 0xff) << 16);\r\n        }\r\n        else\r\n        {\r\n            tint = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16);\r\n        }\r\n\r\n        if (!Array.isArray(entries))\r\n        {\r\n            entries = [ entries ];\r\n        }\r\n\r\n        var gl = this.gl;\r\n\r\n        this.camera.preRender(1, 1);\r\n\r\n        if (gl)\r\n        {\r\n            var cx = this.camera._cx;\r\n            var cy = this.camera._cy;\r\n            var cw = this.camera._cw;\r\n            var ch = this.camera._ch;\r\n\r\n            this.renderer.setFramebuffer(this.framebuffer, false);\r\n\r\n            this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n\r\n            var pipeline = this.pipeline;\r\n    \r\n            pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n\r\n            this.batchList(entries, x, y, alpha, tint);\r\n\r\n            pipeline.flush();\r\n\r\n            this.renderer.setFramebuffer(null, false);\r\n\r\n            this.renderer.popScissor();\r\n\r\n            pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n        }\r\n        else\r\n        {\r\n            this.renderer.setContext(this.context);\r\n\r\n            this.batchList(entries, x, y, alpha, tint);\r\n\r\n            this.renderer.setContext();\r\n        }\r\n\r\n        this.dirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draws the Texture Frame to the Render Texture at the given position.\r\n     * \r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     * \r\n     * ```javascript\r\n     * var rt = this.add.renderTexture(0, 0, 800, 600);\r\n     * rt.drawFrame(key, frame);\r\n     * ```\r\n     * \r\n     * You can optionally provide a position, alpha and tint value to apply to the frame\r\n     * before it is drawn.\r\n     * \r\n     * Calling this method will cause a batch flush, so if you've got a stack of things to draw\r\n     * in a tight loop, try using the `draw` method instead.\r\n     * \r\n     * If you need to draw a Sprite to this Render Texture, use the `draw` method instead.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#drawFrame\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     * @param {number} [x=0] - The x position to draw the frame at.\r\n     * @param {number} [y=0] - The y position to draw the frame at.\r\n     * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n     * @param {number} [tint] - WebGL only. The tint color to use. If not specified it uses the `globalTint` property.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    drawFrame: function (key, frame, x, y, alpha, tint)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (alpha === undefined) { alpha = this.globalAlpha; }\r\n\r\n        if (tint === undefined)\r\n        {\r\n            tint = (this.globalTint >> 16) + (this.globalTint & 0xff00) + ((this.globalTint & 0xff) << 16);\r\n        }\r\n        else\r\n        {\r\n            tint = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16);\r\n        }\r\n\r\n        var gl = this.gl;\r\n        var textureFrame = this.textureManager.getFrame(key, frame);\r\n\r\n        if (textureFrame)\r\n        {\r\n            this.camera.preRender(1, 1);\r\n\r\n            if (gl)\r\n            {\r\n                var cx = this.camera._cx;\r\n                var cy = this.camera._cy;\r\n                var cw = this.camera._cw;\r\n                var ch = this.camera._ch;\r\n    \r\n                this.renderer.setFramebuffer(this.framebuffer, false);\r\n    \r\n                this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n    \r\n                var pipeline = this.pipeline;\r\n        \r\n                pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n        \r\n                pipeline.batchTextureFrame(textureFrame, x + this.frame.cutX, y + this.frame.cutY, tint, alpha, this.camera.matrix, null);\r\n            \r\n                pipeline.flush();\r\n        \r\n                this.renderer.setFramebuffer(null, false);\r\n\r\n                this.renderer.popScissor();\r\n            \r\n                pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n            }\r\n            else\r\n            {\r\n                this.batchTextureFrame(textureFrame, x + this.frame.cutX, y + this.frame.cutY, alpha, tint);\r\n            }\r\n\r\n            this.dirty = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles the drawing of an array of children.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchList\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {array} children - The array of Game Objects to draw.\r\n     * @param {number} [x] - The x position to offset the Game Object by.\r\n     * @param {number} [y] - The y position to offset the Game Object by.\r\n     * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n     * @param {number} [tint] - The tint color to use. If not specified it uses the `globalTint` property.\r\n     */\r\n    batchList: function (children, x, y, alpha, tint)\r\n    {\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            var entry = children[i];\r\n\r\n            if (!entry || entry === this)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (entry.renderWebGL || entry.renderCanvas)\r\n            {\r\n                //  Game Objects\r\n                this.drawGameObject(entry, x, y);\r\n            }\r\n            else if (entry.isParent || entry.list)\r\n            {\r\n                //  Groups / Display Lists\r\n                this.batchGroup(entry.getChildren(), x, y);\r\n            }\r\n            else if (typeof entry === 'string')\r\n            {\r\n                //  Texture key\r\n                this.batchTextureFrameKey(entry, null, x, y, alpha, tint);\r\n            }\r\n            else if (entry instanceof Frame)\r\n            {\r\n                //  Texture Frame instance\r\n                this.batchTextureFrame(entry, x, y, alpha, tint);\r\n            }\r\n            else if (Array.isArray(entry))\r\n            {\r\n                //  Another Array\r\n                this.batchList(entry, x, y, alpha, tint);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles the drawing a Phaser Group contents.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchGroup\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {array} children - The array of Game Objects to draw.\r\n     * @param {number} [x=0] - The x position to offset the Game Object by.\r\n     * @param {number} [y=0] - The y position to offset the Game Object by.\r\n     */\r\n    batchGroup: function (children, x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        x += this.frame.cutX;\r\n        y += this.frame.cutY;\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            var entry = children[i];\r\n\r\n            if (entry.willRender())\r\n            {\r\n                var tx = entry.x + x;\r\n                var ty = entry.y + y;\r\n\r\n                this.drawGameObject(entry, tx, ty);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles drawing a single Phaser Game Object to this Render Texture using WebGL.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchGameObjectWebGL\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to draw.\r\n     * @param {number} [x] - The x position to draw the Game Object at.\r\n     * @param {number} [y] - The y position to draw the Game Object at.\r\n     */\r\n    batchGameObjectWebGL: function (gameObject, x, y)\r\n    {\r\n        if (x === undefined) { x = gameObject.x; }\r\n        if (y === undefined) { y = gameObject.y; }\r\n\r\n        var prevX = gameObject.x;\r\n        var prevY = gameObject.y;\r\n\r\n        if (!this._eraseMode)\r\n        {\r\n            this.renderer.setBlendMode(gameObject.blendMode);\r\n        }\r\n\r\n        gameObject.setPosition(x + this.frame.cutX, y + this.frame.cutY);\r\n        \r\n        gameObject.renderWebGL(this.renderer, gameObject, 0, this.camera, null);\r\n\r\n        gameObject.setPosition(prevX, prevY);\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles drawing a single Phaser Game Object to this Render Texture using Canvas.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchGameObjectCanvas\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to draw.\r\n     * @param {number} [x] - The x position to draw the Game Object at.\r\n     * @param {number} [y] - The y position to draw the Game Object at.\r\n     */\r\n    batchGameObjectCanvas: function (gameObject, x, y)\r\n    {\r\n        if (x === undefined) { x = gameObject.x; }\r\n        if (y === undefined) { y = gameObject.y; }\r\n\r\n        var prevX = gameObject.x;\r\n        var prevY = gameObject.y;\r\n\r\n        if (this._eraseMode)\r\n        {\r\n            var blendMode = gameObject.blendMode;\r\n\r\n            gameObject.blendMode = BlendModes.ERASE;\r\n        }\r\n\r\n        gameObject.setPosition(x + this.frame.cutX, y + this.frame.cutY);\r\n\r\n        gameObject.renderCanvas(this.renderer, gameObject, 0, this.camera, null);\r\n\r\n        gameObject.setPosition(prevX, prevY);\r\n\r\n        if (this._eraseMode)\r\n        {\r\n            gameObject.blendMode = blendMode;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles the drawing of an array of children.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchTextureFrameKey\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     * @param {number} [x=0] - The x position to offset the Game Object by.\r\n     * @param {number} [y=0] - The y position to offset the Game Object by.\r\n     * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n     * @param {number} [tint] - The tint color to use. If not specified it uses the `globalTint` property.\r\n     */\r\n    batchTextureFrameKey: function (key, frame, x, y, alpha, tint)\r\n    {\r\n        var textureFrame = this.textureManager.getFrame(key, frame);\r\n\r\n        if (textureFrame)\r\n        {\r\n            this.batchTextureFrame(textureFrame, x, y, alpha, tint);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that handles the drawing of a Texture Frame to this Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#batchTextureFrame\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.Textures.Frame} textureFrame - The Texture Frame to draw.\r\n     * @param {number} [x=0] - The x position to draw the Frame at.\r\n     * @param {number} [y=0] - The y position to draw the Frame at.\r\n     * @param {number} [tint] - A tint color to be applied to the frame drawn to the Render Texture.\r\n     */\r\n    batchTextureFrame: function (textureFrame, x, y, alpha, tint)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        x += this.frame.cutX;\r\n        y += this.frame.cutY;\r\n\r\n        if (this.gl)\r\n        {\r\n            this.pipeline.batchTextureFrame(textureFrame, x, y, tint, alpha, this.camera.matrix, null);\r\n        }\r\n        else\r\n        {\r\n            var ctx = this.context;\r\n            var cd = textureFrame.canvasData;\r\n            var source = textureFrame.source.image;\r\n    \r\n            var matrix = this.camera.matrix;\r\n    \r\n            ctx.globalAlpha = this.globalAlpha;\r\n\r\n            ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n            ctx.drawImage(source, cd.x, cd.y, cd.width, cd.height, x, y, cd.width, cd.height);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the given area of this Render Texture.\r\n     * \r\n     * The snapshot is taken immediately.\r\n     * \r\n     * To capture the whole Render Texture see the `snapshot` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n     * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n     * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n     * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#snapshotArea\r\n     * @since 3.19.0\r\n     *\r\n     * @param {integer} x - The x coordinate to grab from.\r\n     * @param {integer} y - The y coordinate to grab from.\r\n     * @param {integer} width - The width of the area to grab.\r\n     * @param {integer} height - The height of the area to grab.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    snapshotArea: function (x, y, width, height, callback, type, encoderOptions)\r\n    {\r\n        if (this.gl)\r\n        {\r\n            this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, false, x, y, width, height, type, encoderOptions);\r\n        }\r\n        else\r\n        {\r\n            this.renderer.snapshotCanvas(this.canvas, callback, false, x, y, width, height, type, encoderOptions);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the whole of this Render Texture.\r\n     * \r\n     * The snapshot is taken immediately.\r\n     * \r\n     * To capture just a portion of the Render Texture see the `snapshotArea` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n     * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n     * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n     * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#snapshot\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    snapshot: function (callback, type, encoderOptions)\r\n    {\r\n        if (this.gl)\r\n        {\r\n            this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, false, 0, 0, this.width, this.height, type, encoderOptions);\r\n        }\r\n        else\r\n        {\r\n            this.renderer.snapshotCanvas(this.canvas, callback, false, 0, 0, this.width, this.height, type, encoderOptions);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the given pixel from this Render Texture.\r\n     * \r\n     * The snapshot is taken immediately.\r\n     * \r\n     * To capture the whole Render Texture see the `snapshot` method. To capture a specific portion, see `snapshotArea`.\r\n     * \r\n     * Unlike the other two snapshot methods, this one will send your callback a `Color` object containing the color data for\r\n     * the requested pixel. It doesn't need to create an internal Canvas or Image object, so is a lot faster to execute,\r\n     * using less memory, than the other snapshot methods.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#snapshotPixel\r\n     * @since 3.19.0\r\n     *\r\n     * @param {integer} x - The x coordinate of the pixel to get.\r\n     * @param {integer} y - The y coordinate of the pixel to get.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot pixel data is extracted.\r\n     *\r\n     * @return {this} This Render Texture instance.\r\n     */\r\n    snapshotPixel: function (x, y, callback)\r\n    {\r\n        if (this.gl)\r\n        {\r\n            this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, true, x, y);\r\n        }\r\n        else\r\n        {\r\n            this.renderer.snapshotCanvas(this.canvas, callback, true, x, y);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.RenderTexture#preDestroy\r\n     * @protected\r\n     * @since 3.9.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        if (!this._saved)\r\n        {\r\n            CanvasPool.remove(this.canvas);\r\n\r\n            if (this.gl)\r\n            {\r\n                this.renderer.deleteFramebuffer(this.framebuffer);\r\n            }\r\n\r\n            this.texture.destroy();\r\n            this.camera.destroy();\r\n\r\n            this.canvas = null;\r\n            this.context = null;\r\n            this.framebuffer = null;\r\n            this.texture = null;\r\n            this.glTexture = null;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = RenderTexture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmUuanM/OGQ1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzFELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLHVEQUFhO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHlHQUF1QjtBQUM1QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCO0FBQ2hELFdBQVcsbUJBQU8sQ0FBQywrRUFBeUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxZQUFZO0FBQzlDLG1DQUFtQyxhQUFhOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3Qyw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsNkJBQTZCO0FBQy9ELG1DQUFtQywrQkFBK0I7O0FBRWxFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywwQkFBMEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQywwQkFBMEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQkFBa0I7QUFDaEQsOEJBQThCLGtCQUFrQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQkFBa0I7QUFDaEQsOEJBQThCLGtCQUFrQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0QsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0RBQWdEO0FBQy9ELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGdEQUFnRDtBQUMvRDtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGVuZE1vZGVzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvQmxlbmRNb2RlcycpO1xyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi4vLi4vY2FtZXJhcy8yZC9CYXNlQ2FtZXJhJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcclxudmFyIEZyYW1lID0gcmVxdWlyZSgnLi4vLi4vdGV4dHVyZXMvRnJhbWUnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL1JlbmRlclRleHR1cmVSZW5kZXInKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxudmFyIFVVSUQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9zdHJpbmcvVVVJRCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBSZW5kZXIgVGV4dHVyZS5cclxuICogXHJcbiAqIEEgUmVuZGVyIFRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IG51bWJlciBvZiBHYW1lIE9iamVjdHMgdG8gYmUgZHJhd24gdG8gaXQuIFlvdSBjYW4gdGFrZSBtYW55IGNvbXBsZXggb2JqZWN0cyBhbmRcclxuICogZHJhdyB0aGVtIGFsbCB0byB0aGlzIG9uZSB0ZXh0dXJlLCB3aGljaCBjYW4gdGhleSBiZSB1c2VkIGFzIHRoZSB0ZXh0dXJlIGZvciBvdGhlciBHYW1lIE9iamVjdCdzLiBJdCdzIGEgd2F5IHRvIGdlbmVyYXRlIGR5bmFtaWNcclxuICogdGV4dHVyZXMgYXQgcnVuLXRpbWUgdGhhdCBhcmUgV2ViR0wgZnJpZW5kbHkgYW5kIGRvbid0IGludm9rZSBleHBlbnNpdmUgR1BVIHVwbG9hZHMuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgdW5kZXIgV2ViR0wgYSBGcmFtZUJ1ZmZlciwgd2hpY2ggaXMgd2hhdCB0aGUgUmVuZGVyIFRleHR1cmUgdXNlcyBpbnRlcm5hbGx5LCBjYW5ub3QgYmUgYW50aS1hbGlhc2VkLiBUaGlzIG1lYW5zXHJcbiAqIHRoYXQgd2hlbiBkcmF3aW5nIG9iamVjdHMgc3VjaCBhcyBTaGFwZXMgdG8gYSBSZW5kZXIgVGV4dHVyZSB0aGV5IHdpbGwgYXBwZWFyIHRvIGJlIGRyYXduIHdpdGggbm8gYWxpYXNpbmcsIGhvd2V2ZXIgdGhpc1xyXG4gKiBpcyBhIHRlY2huaWNhbCBsaW1pdGF0aW9uIG9mIFdlYkdMLiBUbyBnZXQgYXJvdW5kIGl0LCBjcmVhdGUgeW91ciBzaGFwZSBhcyBhIHRleHR1cmUgaW4gYW4gYXJ0IHBhY2thZ2UsIHRoZW4gZHJhdyB0aGF0XHJcbiAqIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICpcclxuICogQGNsYXNzIFJlbmRlclRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2tleV0gLSBUaGUgdGV4dHVyZSBrZXkgdG8gbWFrZSB0aGUgUmVuZGVyVGV4dHVyZSBmcm9tLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZyYW1lXSAtIHRoZSBmcmFtZSB0byBtYWtlIHRoZSBSZW5kZXJUZXh0dXJlIGZyb20uXHJcbiAqL1xyXG52YXIgUmVuZGVyVGV4dHVyZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJlbmRlclRleHR1cmUgKHNjZW5lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAzMjsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAzMjsgfVxyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdSZW5kZXJUZXh0dXJlJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhlIEdhbWUgaW5zdGFuY2UgaXMgdXNpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjdGV4dHVyZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gc2NlbmUuc3lzLnRleHR1cmVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGludCBvZiB0aGUgUmVuZGVyIFRleHR1cmUgd2hlbiByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsb2JhbFRpbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDB4ZmZmZmZmXHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxUaW50ID0gMHhmZmZmZmY7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgUmVuZGVyIFRleHR1cmUgd2hlbiByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsb2JhbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxBbHBoYSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBIVE1MIENhbnZhcyBFbGVtZW50IHRoYXQgdGhlIFJlbmRlciBUZXh0dXJlIGlzIGRyYXdpbmcgdG8gd2hlbiB1c2luZyB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdMIEZyYW1lIEJ1ZmZlciB0aGlzIFJlbmRlciBUZXh0dXJlIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyBvbmx5IHNldCBpZiBQaGFzZXIgaXMgcnVubmluZyB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2ZyYW1lYnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTEZyYW1lYnVmZmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIFJlbmRlciBUZXh0dXJlIGRpcnR5IG9yIG5vdD8gSWYgbm90IGl0IHdvbid0IHNwZW5kIHRpbWUgY2xlYXJpbmcgb3IgZmlsbGluZyBpdHNlbGYuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBjcm9wIGRhdGEgb2JqZWN0LCBhcyB1c2VkIGJ5IGBzZXRDcm9wYCBhbmQgcGFzc2VkIHRvIHRoZSBgRnJhbWUuc2V0Q3JvcFVWc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSN0ZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRnJhbWUgY29ycmVzcG9uZGluZyB0byB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgc2F2ZWQgdGV4dHVyZSBmbGFnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX3NhdmVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc2F2ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIENyZWF0ZSBhIG5ldyBUZXh0dXJlIGZvciB0aGlzIFRleHQgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IHNjZW5lLnN5cy50ZXh0dXJlcy5hZGRDYW52YXMoVVVJRCgpLCB0aGlzLmNhbnZhcyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyAgR2V0IHRoZSBmcmFtZVxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBzY2VuZS5zeXMudGV4dHVyZXMuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyAgR2V0IHRoZSBmcmFtZVxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldChmcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHRoaXMuZnJhbWUuc291cmNlLmltYWdlO1xyXG4gICAgICAgICAgICB0aGlzLl9zYXZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuZnJhbWUuY3V0SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFJlbmRlcmluZyBDb250ZXh0IGJlbG9uZ2luZyB0byB0aGUgQ2FudmFzIEVsZW1lbnQgdGhpcyBSZW5kZXIgVGV4dHVyZSBpcyBkcmF3aW5nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXJhc2UgbW9kZSBmbGFnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX2VyYXNlTW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VyYXNlTW9kZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBDYW1lcmEgdGhhdCBjYW4gYmUgdXNlZCB0byBtb3ZlIGFyb3VuZCB0aGUgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgICAgICogQ29udHJvbCBpdCBqdXN0IGxpa2UgeW91IHdvdWxkIGFueSBTY2VuZSBDYW1lcmEuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgb25seSBpbXBhY3RzIHRoZSBwbGFjZW1lbnQgb2Ygd2hhdFxyXG4gICAgICAgICAqIGlzIGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS4gWW91IGNhbiBzY3JvbGwsIHpvb20gYW5kIHJvdGF0ZSB0aGlzIENhbWVyYS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IENhbWVyYSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMVGV4dHVyZSB0aGF0IGlzIGJlaW5nIHJlbmRlcmVkIHRvIGluIGEgV2ViR0wgQ29udGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci50eXBlID09PSBDT05TVC5XRUJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbCA9IGdsO1xyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5kcmF3R2FtZU9iamVjdCA9IHRoaXMuYmF0Y2hHYW1lT2JqZWN0V2ViR0w7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLmdsVGV4dHVyZSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZW5kZXJlci50eXBlID09PSBDT05TVC5DQU5WQVMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdHYW1lT2JqZWN0ID0gdGhpcy5iYXRjaEdhbWVPYmplY3RDYW52YXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5zZXRTY2VuZShzY2VuZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0T3JpZ2luKDAsIDApO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZXMgdGhlIFJlbmRlciBUZXh0dXJlIHRvIHRoZSBuZXcgZGltZW5zaW9ucyBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgUmVuZGVyIFRleHR1cmUgd2FzIGNyZWF0ZWQgZnJvbSBzcGVjaWZpYyBmcmFtZSwgb25seSB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgd2lsbCBiZSBjaGFuZ2VkLiBUaGUgc2l6ZSBvZiB0aGUgc291cmNlXHJcbiAgICAgKiB0ZXh0dXJlIHdpbGwgbm90IGNoYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBSZW5kZXIgVGV4dHVyZSB3YXMgbm90IGNyZWF0ZWQgZnJvbSBzcGVjaWZpYyBmcmFtZSwgdGhlIGZvbGxvd2luZyB3aWxsIGhhcHBlbjpcclxuICAgICAqIEluIFdlYkdMIGl0IHdpbGwgZGVzdHJveSBhbmQgdGhlbiByZS1jcmVhdGUgdGhlIGZyYW1lIGJ1ZmZlciBiZWluZyB1c2VkIGJ5IHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIEluIENhbnZhcyBpdCB3aWxsIHJlc2l6ZSB0aGUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudC5cclxuICAgICAqIEJvdGggYXBwcm9hY2hlcyB3aWxsIGVyYXNlIGV2ZXJ5dGhpbmcgY3VycmVudGx5IGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZGltZW5zaW9ucyBnaXZlbiBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgYWxyZWFkeSBiZWluZyB1c2VkLCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3Jlc2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9d2lkdGhdIC0gVGhlIG5ldyBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGJlIHNldCB0aGUgc2FtZSBhcyB0aGUgYHdpZHRoYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG5cclxuICAgICAgICBpZiAod2lkdGggIT09IHRoaXMud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLmhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lLm5hbWUgPT09ICdfX0JBU0UnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgUmVzaXplIHRoZSB0ZXh0dXJlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlbGV0ZVRleHR1cmUodGhpcy5mcmFtZS5zb3VyY2UuZ2xUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZ2wuTkVBUkVTVCwgZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuUkdCQSwgbnVsbCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBnbFRleHR1cmUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zb3VyY2UuaXNSZW5kZXJUZXh0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5nbFRleHR1cmUgPSBnbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBnbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zb3VyY2Uud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc291cmNlLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUmVzaXplIHRoZSBmcmFtZVxyXG5cclxuICAgICAgICAgICAgdmFyIGJhc2VGcmFtZSA9IHRoaXMudGV4dHVyZS5nZXRTb3VyY2VJbWFnZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhbWUuY3V0WCArIHdpZHRoID4gYmFzZUZyYW1lLndpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGJhc2VGcmFtZS53aWR0aCAtIHRoaXMuZnJhbWUuY3V0WDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhbWUuY3V0WSArIGhlaWdodCA+IGJhc2VGcmFtZS5oZWlnaHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGJhc2VGcmFtZS5oZWlnaHQgLSB0aGlzLmZyYW1lLmN1dFk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCB0aGlzLmZyYW1lLmN1dFgsIHRoaXMuZnJhbWUuY3V0WSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5jdXN0b21IaXRBcmVhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICBpbnB1dC5oaXRBcmVhLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGludCB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NldEdsb2JhbFRpbnRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGludCAtIFRoZSB0aW50IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbFRpbnQ6IGZ1bmN0aW9uICh0aW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsVGludCA9IHRpbnQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYWxwaGEgdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNzZXRHbG9iYWxBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIC0gVGhlIGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yZXMgYSBjb3B5IG9mIHRoaXMgUmVuZGVyIFRleHR1cmUgaW4gdGhlIFRleHR1cmUgTWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBBZnRlciBkb2luZyB0aGlzLCBhbnkgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSwgY2FuIHVzZSB0aGUgY29udGVudHMgb2YgdGhpc1xyXG4gICAgICogUmVuZGVyIFRleHR1cmUgYnkgdXNpbmcgdGhlIHRleHR1cmUga2V5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgcnQgPSB0aGlzLmFkZC5yZW5kZXJUZXh0dXJlKDAsIDAsIDEyOCwgMTI4KTtcclxuICAgICAqIFxyXG4gICAgICogLy8gRHJhdyBzb21ldGhpbmcgdG8gdGhlIFJlbmRlciBUZXh0dXJlXHJcbiAgICAgKiBcclxuICAgICAqIHJ0LnNhdmVUZXh0dXJlKCdkb29kbGUnKTtcclxuICAgICAqIFxyXG4gICAgICogdGhpcy5hZGQuaW1hZ2UoNDAwLCAzMDAsICdkb29kbGUnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBVcGRhdGluZyB0aGUgY29udGVudHMgb2YgdGhpcyBSZW5kZXIgVGV4dHVyZSB3aWxsIGF1dG9tYXRpY2FsbHkgdXBkYXRlIF9hbnlfIEdhbWUgT2JqZWN0XHJcbiAgICAgKiB0aGF0IGlzIHVzaW5nIGl0IGFzIGEgdGV4dHVyZS4gQ2FsbGluZyBgc2F2ZVRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5XHJcbiAgICAgKiBvZiB0aGUgc2FtZSB0ZXh0dXJlLCBpdCB3aWxsIGp1c3QgcmVuYW1lIHRoZSBrZXkgb2YgdGhlIGV4aXN0aW5nIGNvcHkuXHJcbiAgICAgKiBcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBjcmVhdGUgYSBzaW5nbGUgYmFzZSB0ZXh0dXJlLiBZb3UgY2FuIGFkZCBmcmFtZXMgdG8gdGhlIHRleHR1cmVcclxuICAgICAqIGJ5IHVzaW5nIHRoZSBgVGV4dHVyZS5hZGRgIG1ldGhvZC4gQWZ0ZXIgZG9pbmcgdGhpcywgeW91IGNhbiB0aGVuIGFsbG93IEdhbWUgT2JqZWN0c1xyXG4gICAgICogdG8gdXNlIGEgc3BlY2lmaWMgZnJhbWUgZnJvbSBhIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjc2F2ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBzYXZlZC5cclxuICAgICAqL1xyXG4gICAgc2F2ZVRleHR1cmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci5yZW5hbWVUZXh0dXJlKHRoaXMudGV4dHVyZS5rZXksIGtleSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fc2F2ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGxzIHRoZSBSZW5kZXIgVGV4dHVyZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2ZpbGxcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZ2IgLSBUaGUgY29sb3IgdG8gZmlsbCB0aGUgUmVuZGVyIFRleHR1cmUgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MV0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBieSB0aGUgZmlsbC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIGZpbGwgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBmaWxsIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9dGhpcy5mcmFtZS5jdXRXaWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGZpbGwgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9dGhpcy5mcmFtZS5jdXRIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgZmlsbCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZmlsbDogZnVuY3Rpb24gKHJnYiwgYWxwaGEsIHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuZnJhbWUuY3V0V2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gdGhpcy5mcmFtZS5jdXRIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIHIgPSAoKHJnYiA+PiAxNikgfCAwKSAmIDB4ZmY7XHJcbiAgICAgICAgdmFyIGcgPSAoKHJnYiA+PiA4KSB8IDApICYgMHhmZjtcclxuICAgICAgICB2YXIgYiA9IChyZ2IgfCAwKSAmIDB4ZmY7XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5mcmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEucHJlUmVuZGVyKDEsIDEpO1xyXG5cclxuICAgICAgICBpZiAoZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3ggPSB0aGlzLmNhbWVyYS5fY3g7XHJcbiAgICAgICAgICAgIHZhciBjeSA9IHRoaXMuY2FtZXJhLl9jeTtcclxuICAgICAgICAgICAgdmFyIGN3ID0gdGhpcy5jYW1lcmEuX2N3O1xyXG4gICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmNhbWVyYS5fY2g7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucHVzaFNjaXNzb3IoY3gsIGN5LCBjdywgY2gsIGNoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcbiAgICBcclxuICAgICAgICAgICAgcGlwZWxpbmUucHJvak9ydGhvKDAsIHRoaXMudGV4dHVyZS53aWR0aCwgMCwgdGhpcy50ZXh0dXJlLmhlaWdodCwgLTEwMDAuMCwgMTAwMC4wKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBVdGlscy5nZXRUaW50RnJvbUZsb2F0cyhyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxKSxcclxuICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucG9wU2Npc3NvcigpO1xyXG5cclxuICAgICAgICAgICAgcGlwZWxpbmUucHJvak9ydGhvKDAsIHBpcGVsaW5lLndpZHRoLCBwaXBlbGluZS5oZWlnaHQsIDAsIC0xMDAwLjAsIDEwMDAuMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhbHBoYSArICcpJztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHggKyBmcmFtZS5jdXRYLCB5ICsgZnJhbWUuY3V0WSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRpcnR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChnbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCB0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lLmN1dFdpZHRoICE9PSB0aGlzLmNhbnZhcy53aWR0aCB8fCB0aGlzLmZyYW1lLmN1dEhlaWdodCAhPT0gdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsLnNjaXNzb3IodGhpcy5mcmFtZS5jdXRYLCB0aGlzLmZyYW1lLmN1dFksIHRoaXMuZnJhbWUuY3V0V2lkdGgsIHRoaXMuZnJhbWUuY3V0SGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0RnJhbWVidWZmZXIobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCh0aGlzLmZyYW1lLmN1dFgsIHRoaXMuZnJhbWUuY3V0WSwgdGhpcy5mcmFtZS5jdXRXaWR0aCwgdGhpcy5mcmFtZS5jdXRIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIGdpdmVuIG9iamVjdCwgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0cywgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSB1c2luZyBhIGJsZW5kIG1vZGUgb2YgRVJBU0UuXHJcbiAgICAgKiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGVyYXNpbmcgYW55IGZpbGxlZCBwaXhlbHMgaW4gdGhlIG9iamVjdHMgZnJvbSB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBjYW4gYWNjZXB0IGFueSBvZiB0aGUgZm9sbG93aW5nOlxyXG4gICAgICogXHJcbiAgICAgKiAqIEFueSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0LCBzdWNoIGFzIGEgU3ByaXRlLCBUZXh0LCBHcmFwaGljcyBvciBUaWxlU3ByaXRlLlxyXG4gICAgICogKiBEeW5hbWljIGFuZCBTdGF0aWMgVGlsZW1hcCBMYXllcnMuXHJcbiAgICAgKiAqIEEgR3JvdXAuIFRoZSBjb250ZW50cyBvZiB3aGljaCB3aWxsIGJlIGl0ZXJhdGVkIGFuZCBkcmF3biBpbiB0dXJuLlxyXG4gICAgICogKiBBIENvbnRhaW5lci4gVGhlIGNvbnRlbnRzIG9mIHdoaWNoIHdpbGwgYmUgaXRlcmF0ZWQgZnVsbHksIGFuZCBkcmF3biBpbiB0dXJuLlxyXG4gICAgICogKiBBIFNjZW5lJ3MgRGlzcGxheSBMaXN0LiBQYXNzIGluIGBTY2VuZS5jaGlsZHJlbmAgdG8gZHJhdyB0aGUgd2hvbGUgbGlzdC5cclxuICAgICAqICogQW5vdGhlciBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqICogQSBUZXh0dXJlIEZyYW1lIGluc3RhbmNlLlxyXG4gICAgICogKiBBIHN0cmluZy4gVGhpcyBpcyB1c2VkIHRvIGxvb2stdXAgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogTm90ZTogWW91IGNhbm5vdCBlcmFzZSBhIFJlbmRlciBUZXh0dXJlIGZyb20gaXRzZWxmLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBwYXNzaW5nIGluIGEgR3JvdXAgb3IgQ29udGFpbmVyIGl0IHdpbGwgb25seSBkcmF3IGNoaWxkcmVuIHRoYXQgcmV0dXJuIGB0cnVlYFxyXG4gICAgICogd2hlbiB0aGVpciBgd2lsbFJlbmRlcigpYCBtZXRob2QgaXMgY2FsbGVkLiBJLmUuIGEgQ29udGFpbmVyIHdpdGggMTAgY2hpbGRyZW4sXHJcbiAgICAgKiA1IG9mIHdoaWNoIGhhdmUgYHZpc2libGU9ZmFsc2VgIHdpbGwgb25seSBkcmF3IHRoZSA1IHZpc2libGUgb25lcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgaXQgd2lsbCBkcmF3IHRoZW0gYWxsLCByZWdhcmRsZXNzIGlmXHJcbiAgICAgKiB0aGV5IHBhc3MgYSBgd2lsbFJlbmRlcmAgY2hlY2sgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgaW4gYSBzdHJpbmcgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGxvb2sgZm9yIGEgdGV4dHVyZSBpbiB0aGUgVGV4dHVyZVxyXG4gICAgICogTWFuYWdlciBtYXRjaGluZyB0aGF0IHN0cmluZywgYW5kIGRyYXcgdGhlIGJhc2UgZnJhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gcGFzcyBpbiB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdG8gZHJhdyB0aGUgb2JqZWN0cyBhdC4gVGhlIHVzZSBvZlxyXG4gICAgICogdGhlIGNvb3JkaW5hdGVzIGRpZmZlciBiYXNlZCBvbiB3aGF0IG9iamVjdHMgYXJlIGJlaW5nIGRyYXduLiBJZiB0aGUgb2JqZWN0IGlzXHJcbiAgICAgKiBhIEdyb3VwLCBDb250YWluZXIgb3IgRGlzcGxheSBMaXN0LCB0aGUgY29vcmRpbmF0ZXMgYXJlIF9hZGRlZF8gdG8gdGhlIHBvc2l0aW9uc1xyXG4gICAgICogb2YgdGhlIGNoaWxkcmVuLiBGb3IgYWxsIG90aGVyIHR5cGVzIG9mIG9iamVjdCwgdGhlIGNvb3JkaW5hdGVzIGFyZSBleGFjdC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIFdlYkdMIGJhdGNoIHRvIGZsdXNoLCBzbyBpdCBjYW4gd3JpdGUgdGhlIHRleHR1cmVcclxuICAgICAqIGRhdGEgdG8gdGhlIGZyYW1lYnVmZmVyIGJlaW5nIHVzZWQgaW50ZXJuYWxseS4gVGhlIGJhdGNoIGlzIGZsdXNoZWQgYXQgdGhlIGVuZCxcclxuICAgICAqIGFmdGVyIHRoZSBlbnRyaWVzIGhhdmUgYmVlbiBpdGVyYXRlZC4gU28gaWYgeW91J3ZlIGEgYnVuY2ggb2Ygb2JqZWN0cyB0byBkcmF3LFxyXG4gICAgICogdHJ5IGFuZCBwYXNzIHRoZW0gaW4gYW4gYXJyYXkgaW4gb25lIHNpbmdsZSBjYWxsLCByYXRoZXIgdGhhbiBtYWtpbmcgbG90cyBvZlxyXG4gICAgICogc2VwYXJhdGUgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNlcmFzZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBlbnRyaWVzIC0gQW55IHJlbmRlcmFibGUgR2FtZSBPYmplY3QsIG9yIEdyb3VwLCBDb250YWluZXIsIERpc3BsYXkgTGlzdCwgb3RoZXIgUmVuZGVyIFRleHR1cmUsIFRleHR1cmUgRnJhbWUgb3IgYW4gYXJyYXkgb2YgYW55IG9mIHRoZXNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEZyYW1lIGF0LCBvciB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBwb3NpdGlvbiB0byBkcmF3IHRoZSBGcmFtZSBhdCwgb3IgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZXJhc2U6IGZ1bmN0aW9uIChlbnRyaWVzLCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2VyYXNlTW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBibGVuZE1vZGUgPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRCbGVuZE1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QmxlbmRNb2RlKEJsZW5kTW9kZXMuRVJBU0UpO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXcoZW50cmllcywgeCwgeSwgMSwgMTY3NzcyMTUpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEJsZW5kTW9kZShibGVuZE1vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9lcmFzZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIGdpdmVuIG9iamVjdCwgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0cywgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogSXQgY2FuIGFjY2VwdCBhbnkgb2YgdGhlIGZvbGxvd2luZzpcclxuICAgICAqIFxyXG4gICAgICogKiBBbnkgcmVuZGVyYWJsZSBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSwgVGV4dCwgR3JhcGhpY3Mgb3IgVGlsZVNwcml0ZS5cclxuICAgICAqICogRHluYW1pYyBhbmQgU3RhdGljIFRpbGVtYXAgTGF5ZXJzLlxyXG4gICAgICogKiBBIEdyb3VwLiBUaGUgY29udGVudHMgb2Ygd2hpY2ggd2lsbCBiZSBpdGVyYXRlZCBhbmQgZHJhd24gaW4gdHVybi5cclxuICAgICAqICogQSBDb250YWluZXIuIFRoZSBjb250ZW50cyBvZiB3aGljaCB3aWxsIGJlIGl0ZXJhdGVkIGZ1bGx5LCBhbmQgZHJhd24gaW4gdHVybi5cclxuICAgICAqICogQSBTY2VuZSdzIERpc3BsYXkgTGlzdC4gUGFzcyBpbiBgU2NlbmUuY2hpbGRyZW5gIHRvIGRyYXcgdGhlIHdob2xlIGxpc3QuXHJcbiAgICAgKiAqIEFub3RoZXIgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKiAqIEEgVGV4dHVyZSBGcmFtZSBpbnN0YW5jZS5cclxuICAgICAqICogQSBzdHJpbmcuIFRoaXMgaXMgdXNlZCB0byBsb29rLXVwIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGU6IFlvdSBjYW5ub3QgZHJhdyBhIFJlbmRlciBUZXh0dXJlIHRvIGl0c2VsZi5cclxuICAgICAqIFxyXG4gICAgICogSWYgcGFzc2luZyBpbiBhIEdyb3VwIG9yIENvbnRhaW5lciBpdCB3aWxsIG9ubHkgZHJhdyBjaGlsZHJlbiB0aGF0IHJldHVybiBgdHJ1ZWBcclxuICAgICAqIHdoZW4gdGhlaXIgYHdpbGxSZW5kZXIoKWAgbWV0aG9kIGlzIGNhbGxlZC4gSS5lLiBhIENvbnRhaW5lciB3aXRoIDEwIGNoaWxkcmVuLFxyXG4gICAgICogNSBvZiB3aGljaCBoYXZlIGB2aXNpYmxlPWZhbHNlYCB3aWxsIG9ubHkgZHJhdyB0aGUgNSB2aXNpYmxlIG9uZXMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGl0IHdpbGwgZHJhdyB0aGVtIGFsbCwgcmVnYXJkbGVzcyBpZlxyXG4gICAgICogdGhleSBwYXNzIGEgYHdpbGxSZW5kZXJgIGNoZWNrIG9yIG5vdC5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGluIGEgc3RyaW5nIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBsb29rIGZvciBhIHRleHR1cmUgaW4gdGhlIFRleHR1cmVcclxuICAgICAqIE1hbmFnZXIgbWF0Y2hpbmcgdGhhdCBzdHJpbmcsIGFuZCBkcmF3IHRoZSBiYXNlIGZyYW1lLiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5XHJcbiAgICAgKiBleGFjdGx5IHdoaWNoIGZyYW1lIHRvIGRyYXcgdGhlbiB1c2UgdGhlIG1ldGhvZCBgZHJhd0ZyYW1lYCBpbnN0ZWFkLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgaW4gdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRvIGRyYXcgdGhlIG9iamVjdHMgYXQuIFRoZSB1c2Ugb2ZcclxuICAgICAqIHRoZSBjb29yZGluYXRlcyBkaWZmZXIgYmFzZWQgb24gd2hhdCBvYmplY3RzIGFyZSBiZWluZyBkcmF3bi4gSWYgdGhlIG9iamVjdCBpc1xyXG4gICAgICogYSBHcm91cCwgQ29udGFpbmVyIG9yIERpc3BsYXkgTGlzdCwgdGhlIGNvb3JkaW5hdGVzIGFyZSBfYWRkZWRfIHRvIHRoZSBwb3NpdGlvbnNcclxuICAgICAqIG9mIHRoZSBjaGlsZHJlbi4gRm9yIGFsbCBvdGhlciB0eXBlcyBvZiBvYmplY3QsIHRoZSBjb29yZGluYXRlcyBhcmUgZXhhY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgYWxwaGFgIGFuZCBgdGludGAgdmFsdWVzIGFyZSBvbmx5IHVzZWQgYnkgVGV4dHVyZSBGcmFtZXMuXHJcbiAgICAgKiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBhbHBoYSBhbmQgdGludCB2YWx1ZXMgd2hlbiBiZWluZyBkcmF3bi5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIFdlYkdMIGJhdGNoIHRvIGZsdXNoLCBzbyBpdCBjYW4gd3JpdGUgdGhlIHRleHR1cmVcclxuICAgICAqIGRhdGEgdG8gdGhlIGZyYW1lYnVmZmVyIGJlaW5nIHVzZWQgaW50ZXJuYWxseS4gVGhlIGJhdGNoIGlzIGZsdXNoZWQgYXQgdGhlIGVuZCxcclxuICAgICAqIGFmdGVyIHRoZSBlbnRyaWVzIGhhdmUgYmVlbiBpdGVyYXRlZC4gU28gaWYgeW91J3ZlIGEgYnVuY2ggb2Ygb2JqZWN0cyB0byBkcmF3LFxyXG4gICAgICogdHJ5IGFuZCBwYXNzIHRoZW0gaW4gYW4gYXJyYXkgaW4gb25lIHNpbmdsZSBjYWxsLCByYXRoZXIgdGhhbiBtYWtpbmcgbG90cyBvZlxyXG4gICAgICogc2VwYXJhdGUgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZW50cmllcyAtIEFueSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0LCBvciBHcm91cCwgQ29udGFpbmVyLCBEaXNwbGF5IExpc3QsIG90aGVyIFJlbmRlciBUZXh0dXJlLCBUZXh0dXJlIEZyYW1lIG9yIGFuIGFycmF5IG9mIGFueSBvZiB0aGVzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBwb3NpdGlvbiB0byBkcmF3IHRoZSBGcmFtZSBhdCwgb3IgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgcG9zaXRpb24gdG8gZHJhdyB0aGUgRnJhbWUgYXQsIG9yIHRoZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSAgVGhlIGFscGhhIHZhbHVlLiBPbmx5IHVzZWQgZm9yIFRleHR1cmUgRnJhbWVzIGFuZCBpZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRzIHRvIHRoZSBgZ2xvYmFsQWxwaGFgIHByb3BlcnR5LiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBjdXJyZW50IGFscGhhIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW50XSAtICBXZWJHTCBvbmx5LiBUaGUgdGludCBjb2xvciB2YWx1ZS4gT25seSB1c2VkIGZvciBUZXh0dXJlIEZyYW1lcyBhbmQgaWYgbm90IHNwZWNpZmllZCBkZWZhdWx0cyB0byB0aGUgYGdsb2JhbFRpbnRgIHByb3BlcnR5LiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBjdXJyZW50IHRpbnQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZHJhdzogZnVuY3Rpb24gKGVudHJpZXMsIHgsIHksIGFscGhhLCB0aW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTsgfVxyXG5cclxuICAgICAgICBpZiAodGludCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aGlzLmdsb2JhbFRpbnQgPj4gMTYpICsgKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYwMCkgKyAoKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aW50ID4+IDE2KSArICh0aW50ICYgMHhmZjAwKSArICgodGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJpZXMgPSBbIGVudHJpZXMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLnByZVJlbmRlcigxLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKGdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGN4ID0gdGhpcy5jYW1lcmEuX2N4O1xyXG4gICAgICAgICAgICB2YXIgY3kgPSB0aGlzLmNhbWVyYS5fY3k7XHJcbiAgICAgICAgICAgIHZhciBjdyA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jYW1lcmEuX2NoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnB1c2hTY2lzc29yKGN4LCBjeSwgY3csIGNoLCBjaCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCB0aGlzLnRleHR1cmUud2lkdGgsIDAsIHRoaXMudGV4dHVyZS5oZWlnaHQsIC0xMDAwLjAsIDEwMDAuMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJhdGNoTGlzdChlbnRyaWVzLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcblxyXG4gICAgICAgICAgICBwaXBlbGluZS5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcihudWxsLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBvcFNjaXNzb3IoKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCBwaXBlbGluZS53aWR0aCwgcGlwZWxpbmUuaGVpZ2h0LCAwLCAtMTAwMC4wLCAxMDAwLjApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbnRleHQodGhpcy5jb250ZXh0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hMaXN0KGVudHJpZXMsIHgsIHksIGFscGhhLCB0aW50KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoZSBUZXh0dXJlIEZyYW1lIHRvIHRoZSBSZW5kZXIgVGV4dHVyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRleHR1cmVzIGFyZSByZWZlcmVuY2VkIGJ5IHRoZWlyIHN0cmluZy1iYXNlZCBrZXlzLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdmFyIHJ0ID0gdGhpcy5hZGQucmVuZGVyVGV4dHVyZSgwLCAwLCA4MDAsIDYwMCk7XHJcbiAgICAgKiBydC5kcmF3RnJhbWUoa2V5LCBmcmFtZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBwb3NpdGlvbiwgYWxwaGEgYW5kIHRpbnQgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIGZyYW1lXHJcbiAgICAgKiBiZWZvcmUgaXQgaXMgZHJhd24uXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBjYXVzZSBhIGJhdGNoIGZsdXNoLCBzbyBpZiB5b3UndmUgZ290IGEgc3RhY2sgb2YgdGhpbmdzIHRvIGRyYXdcclxuICAgICAqIGluIGEgdGlnaHQgbG9vcCwgdHJ5IHVzaW5nIHRoZSBgZHJhd2AgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSBuZWVkIHRvIGRyYXcgYSBTcHJpdGUgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSwgdXNlIHRoZSBgZHJhd2AgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkcmF3RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBkcmF3IHRoZSBmcmFtZSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIGZyYW1lIGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSBUaGUgYWxwaGEgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxBbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gV2ViR0wgb25seS4gVGhlIHRpbnQgY29sb3IgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxUaW50YCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBkcmF3RnJhbWU6IGZ1bmN0aW9uIChrZXksIGZyYW1lLCB4LCB5LCBhbHBoYSwgdGludClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTsgfVxyXG5cclxuICAgICAgICBpZiAodGludCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aGlzLmdsb2JhbFRpbnQgPj4gMTYpICsgKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYwMCkgKyAoKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aW50ID4+IDE2KSArICh0aW50ICYgMHhmZjAwKSArICgodGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMudGV4dHVyZU1hbmFnZXIuZ2V0RnJhbWUoa2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0dXJlRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5wcmVSZW5kZXIoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2wpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjeCA9IHRoaXMuY2FtZXJhLl9jeDtcclxuICAgICAgICAgICAgICAgIHZhciBjeSA9IHRoaXMuY2FtZXJhLl9jeTtcclxuICAgICAgICAgICAgICAgIHZhciBjdyA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY2FtZXJhLl9jaDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucHVzaFNjaXNzb3IoY3gsIGN5LCBjdywgY2gsIGNoKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCB0aGlzLnRleHR1cmUud2lkdGgsIDAsIHRoaXMudGV4dHVyZS5oZWlnaHQsIC0xMDAwLjAsIDEwMDAuMCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFRleHR1cmVGcmFtZSh0ZXh0dXJlRnJhbWUsIHggKyB0aGlzLmZyYW1lLmN1dFgsIHkgKyB0aGlzLmZyYW1lLmN1dFksIHRpbnQsIGFscGhhLCB0aGlzLmNhbWVyYS5tYXRyaXgsIG51bGwpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBvcFNjaXNzb3IoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5wcm9qT3J0aG8oMCwgcGlwZWxpbmUud2lkdGgsIHBpcGVsaW5lLmhlaWdodCwgMCwgLTEwMDAuMCwgMTAwMC4wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZLCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBvZiBhbiBhcnJheSBvZiBjaGlsZHJlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoTGlzdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBjaGlsZHJlbiAtIFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gZHJhdy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIG9mZnNldCB0aGUgR2FtZSBPYmplY3QgYnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhXSAtIFRoZSBhbHBoYSB0byB1c2UuIElmIG5vdCBzcGVjaWZpZWQgaXQgdXNlcyB0aGUgYGdsb2JhbEFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGludF0gLSBUaGUgdGludCBjb2xvciB0byB1c2UuIElmIG5vdCBzcGVjaWZpZWQgaXQgdXNlcyB0aGUgYGdsb2JhbFRpbnRgIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBiYXRjaExpc3Q6IGZ1bmN0aW9uIChjaGlsZHJlbiwgeCwgeSwgYWxwaGEsIHRpbnQpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeSA9PT0gdGhpcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5yZW5kZXJXZWJHTCB8fCBlbnRyeS5yZW5kZXJDYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBHYW1lIE9iamVjdHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0dhbWVPYmplY3QoZW50cnksIHgsIHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVudHJ5LmlzUGFyZW50IHx8IGVudHJ5Lmxpc3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBHcm91cHMgLyBEaXNwbGF5IExpc3RzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoR3JvdXAoZW50cnkuZ2V0Q2hpbGRyZW4oKSwgeCwgeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRleHR1cmUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoVGV4dHVyZUZyYW1lS2V5KGVudHJ5LCBudWxsLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBGcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRleHR1cmUgRnJhbWUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUoZW50cnksIHgsIHksIGFscGhhLCB0aW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEFub3RoZXIgQXJyYXlcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hMaXN0KGVudHJ5LCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBhIFBoYXNlciBHcm91cCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoR3JvdXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gY2hpbGRyZW4gLSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGRyYXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gdG8gb2Zmc2V0IHRoZSBHYW1lIE9iamVjdCBieS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hHcm91cDogZnVuY3Rpb24gKGNoaWxkcmVuLCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIHggKz0gdGhpcy5mcmFtZS5jdXRYO1xyXG4gICAgICAgIHkgKz0gdGhpcy5mcmFtZS5jdXRZO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gY2hpbGRyZW5baV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkud2lsbFJlbmRlcigpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHggPSBlbnRyeS54ICsgeDtcclxuICAgICAgICAgICAgICAgIHZhciB0eSA9IGVudHJ5LnkgKyB5O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0dhbWVPYmplY3QoZW50cnksIHR4LCB0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyBkcmF3aW5nIGEgc2luZ2xlIFBoYXNlciBHYW1lIE9iamVjdCB0byB0aGlzIFJlbmRlciBUZXh0dXJlIHVzaW5nIFdlYkdMLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjYmF0Y2hHYW1lT2JqZWN0V2ViR0xcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICovXHJcbiAgICBiYXRjaEdhbWVPYmplY3RXZWJHTDogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gZ2FtZU9iamVjdC54OyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gZ2FtZU9iamVjdC55OyB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2WCA9IGdhbWVPYmplY3QueDtcclxuICAgICAgICB2YXIgcHJldlkgPSBnYW1lT2JqZWN0Lnk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fZXJhc2VNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRCbGVuZE1vZGUoZ2FtZU9iamVjdC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbih4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZKTtcclxuICAgICAgICBcclxuICAgICAgICBnYW1lT2JqZWN0LnJlbmRlcldlYkdMKHRoaXMucmVuZGVyZXIsIGdhbWVPYmplY3QsIDAsIHRoaXMuY2FtZXJhLCBudWxsKTtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbihwcmV2WCwgcHJldlkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgZHJhd2luZyBhIHNpbmdsZSBQaGFzZXIgR2FtZSBPYmplY3QgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSB1c2luZyBDYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNiYXRjaEdhbWVPYmplY3RDYW52YXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICovXHJcbiAgICBiYXRjaEdhbWVPYmplY3RDYW52YXM6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IGdhbWVPYmplY3QueDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IGdhbWVPYmplY3QueTsgfVxyXG5cclxuICAgICAgICB2YXIgcHJldlggPSBnYW1lT2JqZWN0Lng7XHJcbiAgICAgICAgdmFyIHByZXZZID0gZ2FtZU9iamVjdC55O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXJhc2VNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJsZW5kTW9kZSA9IGdhbWVPYmplY3QuYmxlbmRNb2RlO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5ibGVuZE1vZGUgPSBCbGVuZE1vZGVzLkVSQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbih4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZKTtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5yZW5kZXJDYW52YXModGhpcy5yZW5kZXJlciwgZ2FtZU9iamVjdCwgMCwgdGhpcy5jYW1lcmEsIG51bGwpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnNldFBvc2l0aW9uKHByZXZYLCBwcmV2WSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lcmFzZU1vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBvZiBhbiBhcnJheSBvZiBjaGlsZHJlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoVGV4dHVyZUZyYW1lS2V5XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIHRvIG9mZnNldCB0aGUgR2FtZSBPYmplY3QgYnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSBUaGUgYWxwaGEgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxBbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gVGhlIHRpbnQgY29sb3IgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxUaW50YCBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUZXh0dXJlRnJhbWVLZXk6IGZ1bmN0aW9uIChrZXksIGZyYW1lLCB4LCB5LCBhbHBoYSwgdGludClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZUZyYW1lID0gdGhpcy50ZXh0dXJlTWFuYWdlci5nZXRGcmFtZShrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHR1cmVGcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgdGhlIGRyYXdpbmcgb2YgYSBUZXh0dXJlIEZyYW1lIHRvIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNiYXRjaFRleHR1cmVGcmFtZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gdGV4dHVyZUZyYW1lIC0gVGhlIFRleHR1cmUgRnJhbWUgdG8gZHJhdy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEZyYW1lIGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gdG8gZHJhdyB0aGUgRnJhbWUgYXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gQSB0aW50IGNvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGZyYW1lIGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUZXh0dXJlRnJhbWU6IGZ1bmN0aW9uICh0ZXh0dXJlRnJhbWUsIHgsIHksIGFscGhhLCB0aW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIHggKz0gdGhpcy5mcmFtZS5jdXRYO1xyXG4gICAgICAgIHkgKz0gdGhpcy5mcmFtZS5jdXRZO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4LCB5LCB0aW50LCBhbHBoYSwgdGhpcy5jYW1lcmEubWF0cml4LCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY29udGV4dDtcclxuICAgICAgICAgICAgdmFyIGNkID0gdGV4dHVyZUZyYW1lLmNhbnZhc0RhdGE7XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0ZXh0dXJlRnJhbWUuc291cmNlLmltYWdlO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSB0aGlzLmNhbWVyYS5tYXRyaXg7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKHNvdXJjZSwgY2QueCwgY2QueSwgY2Qud2lkdGgsIGNkLmhlaWdodCwgeCwgeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGdpdmVuIGFyZWEgb2YgdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHNuYXBzaG90IGlzIHRha2VuIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBjYXB0dXJlIHRoZSB3aG9sZSBSZW5kZXIgVGV4dHVyZSBzZWUgdGhlIGBzbmFwc2hvdGAgbWV0aG9kLiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgcGl4ZWwsIHNlZSBgc25hcHNob3RQaXhlbGAuXHJcbiAgICAgKiBcclxuICAgICAqIFNuYXBzaG90cyB3b3JrIGJ5IHVzaW5nIHRoZSBXZWJHTCBgcmVhZFBpeGVsc2AgZmVhdHVyZSB0byBncmFiIGV2ZXJ5IHBpeGVsIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBpbnRvIGFuIEFycmF5QnVmZmVyVmlldy5cclxuICAgICAqIEl0IHRoZW4gcGFyc2VzIHRoaXMsIGNvcHlpbmcgdGhlIGNvbnRlbnRzIHRvIGEgdGVtcG9yYXJ5IENhbnZhcyBhbmQgZmluYWxseSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSBpdCxcclxuICAgICAqIHdoaWNoIGlzIHRoZSBpbWFnZSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgcHJvdmlkZWQuIEFsbCBpbiBhbGwsIHRoaXMgaXMgYSBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFuZCBibG9ja2luZyBwcm9jZXNzLFxyXG4gICAgICogd2hpY2ggZ2V0cyBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NuYXBzaG90QXJlYVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZ3JhYiBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIGdyYWIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgdG8gZ3JhYi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgaW1hZ2UgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0naW1hZ2UvcG5nJ10gLSBUaGUgZm9ybWF0IG9mIHRoZSBpbWFnZSB0byBjcmVhdGUsIHVzdWFsbHkgYGltYWdlL3BuZ2Agb3IgYGltYWdlL2pwZWdgLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmNvZGVyT3B0aW9ucz0wLjkyXSAtIFRoZSBpbWFnZSBxdWFsaXR5LCBiZXR3ZWVuIDAgYW5kIDEuIFVzZWQgZm9yIGltYWdlIGZvcm1hdHMgd2l0aCBsb3NzeSBjb21wcmVzc2lvbiwgc3VjaCBhcyBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RBcmVhOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2ssIHR5cGUsIGVuY29kZXJPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBjYWxsYmFjaywgZmFsc2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGVuY29kZXJPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdENhbnZhcyh0aGlzLmNhbnZhcywgY2FsbGJhY2ssIGZhbHNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBlbmNvZGVyT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBvZiB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc25hcHNob3QgaXMgdGFrZW4gaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIGNhcHR1cmUganVzdCBhIHBvcnRpb24gb2YgdGhlIFJlbmRlciBUZXh0dXJlIHNlZSB0aGUgYHNuYXBzaG90QXJlYWAgbWV0aG9kLiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgcGl4ZWwsIHNlZSBgc25hcHNob3RQaXhlbGAuXHJcbiAgICAgKiBcclxuICAgICAqIFNuYXBzaG90cyB3b3JrIGJ5IHVzaW5nIHRoZSBXZWJHTCBgcmVhZFBpeGVsc2AgZmVhdHVyZSB0byBncmFiIGV2ZXJ5IHBpeGVsIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBpbnRvIGFuIEFycmF5QnVmZmVyVmlldy5cclxuICAgICAqIEl0IHRoZW4gcGFyc2VzIHRoaXMsIGNvcHlpbmcgdGhlIGNvbnRlbnRzIHRvIGEgdGVtcG9yYXJ5IENhbnZhcyBhbmQgZmluYWxseSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSBpdCxcclxuICAgICAqIHdoaWNoIGlzIHRoZSBpbWFnZSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgcHJvdmlkZWQuIEFsbCBpbiBhbGwsIHRoaXMgaXMgYSBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFuZCBibG9ja2luZyBwcm9jZXNzLFxyXG4gICAgICogd2hpY2ggZ2V0cyBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NuYXBzaG90XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdDogZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCBlbmNvZGVyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc25hcHNob3RGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgY2FsbGJhY2ssIGZhbHNlLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNuYXBzaG90Q2FudmFzKHRoaXMuY2FudmFzLCBjYWxsYmFjaywgZmFsc2UsIDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0eXBlLCBlbmNvZGVyT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBnaXZlbiBwaXhlbCBmcm9tIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBzbmFwc2hvdCBpcyB0YWtlbiBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogVG8gY2FwdHVyZSB0aGUgd2hvbGUgUmVuZGVyIFRleHR1cmUgc2VlIHRoZSBgc25hcHNob3RgIG1ldGhvZC4gVG8gY2FwdHVyZSBhIHNwZWNpZmljIHBvcnRpb24sIHNlZSBgc25hcHNob3RBcmVhYC5cclxuICAgICAqIFxyXG4gICAgICogVW5saWtlIHRoZSBvdGhlciB0d28gc25hcHNob3QgbWV0aG9kcywgdGhpcyBvbmUgd2lsbCBzZW5kIHlvdXIgY2FsbGJhY2sgYSBgQ29sb3JgIG9iamVjdCBjb250YWluaW5nIHRoZSBjb2xvciBkYXRhIGZvclxyXG4gICAgICogdGhlIHJlcXVlc3RlZCBwaXhlbC4gSXQgZG9lc24ndCBuZWVkIHRvIGNyZWF0ZSBhbiBpbnRlcm5hbCBDYW52YXMgb3IgSW1hZ2Ugb2JqZWN0LCBzbyBpcyBhIGxvdCBmYXN0ZXIgdG8gZXhlY3V0ZSxcclxuICAgICAqIHVzaW5nIGxlc3MgbWVtb3J5LCB0aGFuIHRoZSBvdGhlciBzbmFwc2hvdCBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjc25hcHNob3RQaXhlbFxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgcGl4ZWwgZGF0YSBpcyBleHRyYWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RQaXhlbDogZnVuY3Rpb24gKHgsIHksIGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBjYWxsYmFjaywgdHJ1ZSwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc25hcHNob3RDYW52YXModGhpcy5jYW52YXMsIGNhbGxiYWNrLCB0cnVlLCB4LCB5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2F2ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmEuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#renderCanvas\r\n * @since 3.2.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.RenderTexture} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RenderTextureCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = RenderTextureCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlci5qcz81YjZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFJlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHJlbmRlcmVyLmJhdGNoU3ByaXRlKHNyYywgc3JjLmZyYW1lLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar RenderTexture = __webpack_require__(/*! ./RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\");\r\n\r\n/**\r\n * Creates a new Render Texture Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Render Texture Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#renderTexture\r\n * @since 3.2.0\r\n *\r\n * @param {Phaser.Types.GameObjects.RenderTexture.RenderTextureConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.RenderTexture} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('renderTexture', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n    var width = GetAdvancedValue(config, 'width', 32);\r\n    var height = GetAdvancedValue(config, 'height', 32);\r\n    var key = GetAdvancedValue(config, 'key', undefined);\r\n    var frame = GetAdvancedValue(config, 'frame', undefined);\r\n\r\n    var renderTexture = new RenderTexture(this.scene, x, y, width, height, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, renderTexture, config);\r\n\r\n    return renderTexture;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVDcmVhdG9yLmpzPzhhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLG9CQUFvQixtQkFBTyxDQUFDLDZGQUFpQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkRBQTJEO0FBQ3RFLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBSZW5kZXIgVGV4dHVyZSBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUmVuZGVyIFRleHR1cmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3JlbmRlclRleHR1cmVcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUuUmVuZGVyVGV4dHVyZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdyZW5kZXJUZXh0dXJlJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgMzIpO1xyXG4gICAgdmFyIGhlaWdodCA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnaGVpZ2h0JywgMzIpO1xyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgdW5kZWZpbmVkKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCB1bmRlZmluZWQpO1xyXG5cclxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgcmVuZGVyVGV4dHVyZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar RenderTexture = __webpack_require__(/*! ./RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\");\r\n\r\n/**\r\n * Creates a new Render Texture Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Render Texture Game Object has been built into Phaser.\r\n * \r\n * A Render Texture is a special texture that allows any number of Game Objects to be drawn to it. You can take many complex objects and\r\n * draw them all to this one texture, which can they be used as the texture for other Game Object's. It's a way to generate dynamic\r\n * textures at run-time that are WebGL friendly and don't invoke expensive GPU uploads.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#renderTexture\r\n * @since 3.2.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} [width=32] - The width of the Render Texture.\r\n * @param {integer} [height=32] - The height of the Render Texture.\r\n * @property {string} [key] - The texture key to make the RenderTexture from.\r\n * @property {string} [frame] - the frame to make the RenderTexture from.\r\n * \r\n * @return {Phaser.GameObjects.RenderTexture} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('renderTexture', function (x, y, width, height, key, frame)\r\n{\r\n    return this.displayList.add(new RenderTexture(this.scene, x, y, width, height, key, frame));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVGYWN0b3J5LmpzPzAyMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw2RkFBaUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL1JlbmRlclRleHR1cmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlbmRlciBUZXh0dXJlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUmVuZGVyIFRleHR1cmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBBIFJlbmRlciBUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBudW1iZXIgb2YgR2FtZSBPYmplY3RzIHRvIGJlIGRyYXduIHRvIGl0LiBZb3UgY2FuIHRha2UgbWFueSBjb21wbGV4IG9iamVjdHMgYW5kXHJcbiAqIGRyYXcgdGhlbSBhbGwgdG8gdGhpcyBvbmUgdGV4dHVyZSwgd2hpY2ggY2FuIHRoZXkgYmUgdXNlZCBhcyB0aGUgdGV4dHVyZSBmb3Igb3RoZXIgR2FtZSBPYmplY3Qncy4gSXQncyBhIHdheSB0byBnZW5lcmF0ZSBkeW5hbWljXHJcbiAqIHRleHR1cmVzIGF0IHJ1bi10aW1lIHRoYXQgYXJlIFdlYkdMIGZyaWVuZGx5IGFuZCBkb24ndCBpbnZva2UgZXhwZW5zaXZlIEdQVSB1cGxvYWRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNyZW5kZXJUZXh0dXJlXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2tleV0gLSBUaGUgdGV4dHVyZSBrZXkgdG8gbWFrZSB0aGUgUmVuZGVyVGV4dHVyZSBmcm9tLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZyYW1lXSAtIHRoZSBmcmFtZSB0byBtYWtlIHRoZSBSZW5kZXJUZXh0dXJlIGZyb20uXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncmVuZGVyVGV4dHVyZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFJlbmRlclRleHR1cmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./RenderTextureWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./RenderTextureCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVSZW5kZXIuanM/ZWE0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHVIQUE4QjtBQUN4RDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMseUhBQStCO0FBQzFEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js ***!
  \*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#renderWebGL\r\n * @since 3.2.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.RenderTexture} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RenderTextureWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var frame = src.frame;\r\n    var width = frame.width;\r\n    var height = frame.height;\r\n    var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n    this.pipeline.batchTexture(\r\n        src,\r\n        frame.glTexture,\r\n        width, height,\r\n        src.x, src.y,\r\n        width, height,\r\n        src.scaleX, src.scaleY,\r\n        src.rotation,\r\n        src.flipX, !src.flipY,\r\n        src.scrollFactorX, src.scrollFactorY,\r\n        src.displayOriginX, src.displayOriginY,\r\n        0, 0, width, height,\r\n        getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n        getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n        getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n        getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n        (src._isTinted && src.tintFill),\r\n        0, 0,\r\n        camera,\r\n        parentMatrix\r\n    );\r\n\r\n    //  Force clear the current texture so that items next in the batch (like Graphics) don't try and use it\r\n    renderer.setBlankTexture(true);\r\n};\r\n\r\nmodule.exports = RenderTextureWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVXZWJHTFJlbmRlcmVyLmpzPzY3YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBmcmFtZSA9IHNyYy5mcmFtZTtcclxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodDtcclxuICAgIHZhciBnZXRUaW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGE7XHJcblxyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFRleHR1cmUoXHJcbiAgICAgICAgc3JjLFxyXG4gICAgICAgIGZyYW1lLmdsVGV4dHVyZSxcclxuICAgICAgICB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIHNyYy54LCBzcmMueSxcclxuICAgICAgICB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVksXHJcbiAgICAgICAgc3JjLnJvdGF0aW9uLFxyXG4gICAgICAgIHNyYy5mbGlwWCwgIXNyYy5mbGlwWSxcclxuICAgICAgICBzcmMuc2Nyb2xsRmFjdG9yWCwgc3JjLnNjcm9sbEZhY3RvclksXHJcbiAgICAgICAgc3JjLmRpc3BsYXlPcmlnaW5YLCBzcmMuZGlzcGxheU9yaWdpblksXHJcbiAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludFRMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVEwpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50VFIsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFUUiksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRCTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJMKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludEJSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQlIpLFxyXG4gICAgICAgIChzcmMuX2lzVGludGVkICYmIHNyYy50aW50RmlsbCksXHJcbiAgICAgICAgMCwgMCxcclxuICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgcGFyZW50TWF0cml4XHJcbiAgICApO1xyXG5cclxuICAgIC8vICBGb3JjZSBjbGVhciB0aGUgY3VycmVudCB0ZXh0dXJlIHNvIHRoYXQgaXRlbXMgbmV4dCBpbiB0aGUgYmF0Y2ggKGxpa2UgR3JhcGhpY3MpIGRvbid0IHRyeSBhbmQgdXNlIGl0XHJcbiAgICByZW5kZXJlci5zZXRCbGFua1RleHR1cmUodHJ1ZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmVXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/Shader.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/Shader.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar SetValue = __webpack_require__(/*! ../../utils/object/SetValue */ \"./node_modules/phaser/src/utils/object/SetValue.js\");\r\nvar ShaderRender = __webpack_require__(/*! ./ShaderRender */ \"./node_modules/phaser/src/gameobjects/shader/ShaderRender.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Shader Game Object.\r\n * \r\n * This Game Object allows you to easily add a quad with its own shader into the display list, and manipulate it\r\n * as you would any other Game Object, including scaling, rotating, positioning and adding to Containers. Shaders\r\n * can be masked with either Bitmap or Geometry masks and can also be used as a Bitmap Mask for a Camera or other\r\n * Game Object. They can also be made interactive and used for input events.\r\n * \r\n * It works by taking a reference to a `Phaser.Display.BaseShader` instance, as found in the Shader Cache. These can\r\n * be created dynamically at runtime, or loaded in via the GLSL File Loader:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.glsl('fire', 'shaders/fire.glsl.js');\r\n * }\r\n *  \r\n * function create ()\r\n * {\r\n *     this.add.shader('fire', 400, 300, 512, 512);\r\n * }\r\n * ```\r\n * \r\n * Please see the Phaser 3 Examples GitHub repo for examples of loading and creating shaders dynamically.\r\n * \r\n * Due to the way in which they work, you cannot directly change the alpha or blend mode of a Shader. This should\r\n * be handled via exposed uniforms in the shader code itself.\r\n * \r\n * By default a Shader will be created with a standard set of uniforms. These were added to match those\r\n * found on sites such as ShaderToy or GLSLSandbox, and provide common functionality a shader may need,\r\n * such as the timestamp, resolution or pointer position. You can replace them by specifying your own uniforms\r\n * in the Base Shader.\r\n * \r\n * These Shaders work by halting the current pipeline during rendering, creating a viewport matched to the\r\n * size of this Game Object and then renders a quad using the bound shader. At the end, the pipeline is restored.\r\n * \r\n * Because it blocks the pipeline it means it will interrupt any batching that is currently going on, so you should\r\n * use these Game Objects sparingly. If you need to have a fully batched custom shader, then please look at using\r\n * a custom pipeline instead. However, for background or special masking effects, they are extremely effective.\r\n * \r\n * @class Shader\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.17.0\r\n *\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the Game Object.\r\n * @param {number} [height=128] - The height of the Game Object.\r\n * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n * @param {any} [textureData] - Additional texture data if you want to create shader with none NPOT textures.\r\n */\r\nvar Shader = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.ComputedSize,\r\n        Components.Depth,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.ScrollFactor,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        ShaderRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Shader (scene, key, x, y, width, height, textures, textureData)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 128; }\r\n        if (height === undefined) { height = 128; }\r\n\r\n        GameObject.call(this, scene, 'Shader');\r\n\r\n        /**\r\n         * This Game Object cannot have a blend mode, so skip all checks.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#blendMode\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this.blendMode = -1;\r\n\r\n        /**\r\n         * The underlying shader object being used.\r\n         * Empty by default and set during a call to the `setShader` method.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#shader\r\n         * @type {Phaser.Display.BaseShader}\r\n         * @since 3.17.0\r\n         */\r\n        this.shader;\r\n\r\n        var renderer = scene.sys.renderer;\r\n\r\n        /**\r\n         * A reference to the current renderer.\r\n         * Shaders only work with the WebGL Renderer.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.17.0\r\n         */\r\n        this.renderer = renderer;\r\n\r\n        /**\r\n         * The WebGL context belonging to the renderer.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#gl\r\n         * @type {WebGLRenderingContext}\r\n         * @since 3.17.0\r\n         */\r\n        this.gl = renderer.gl;\r\n\r\n        /**\r\n         * Raw byte buffer of vertices this Shader uses.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#vertexData\r\n         * @type {ArrayBuffer}\r\n         * @since 3.17.0\r\n         */\r\n        this.vertexData = new ArrayBuffer(6 * (Float32Array.BYTES_PER_ELEMENT * 2));\r\n\r\n        /**\r\n         * The WebGL vertex buffer object this shader uses.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#vertexBuffer\r\n         * @type {WebGLBuffer}\r\n         * @since 3.17.0\r\n         */\r\n        this.vertexBuffer = renderer.createVertexBuffer(this.vertexData.byteLength, this.gl.STREAM_DRAW);\r\n\r\n        /**\r\n         * The WebGL shader program this shader uses.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#program\r\n         * @type {WebGLProgram}\r\n         * @since 3.17.0\r\n         */\r\n        this.program = null;\r\n\r\n        /**\r\n         * Uint8 view to the vertex raw buffer. Used for uploading vertex buffer resources to the GPU.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#bytes\r\n         * @type {Uint8Array}\r\n         * @since 3.17.0\r\n         */\r\n        this.bytes = new Uint8Array(this.vertexData);\r\n\r\n        /**\r\n         * Float32 view of the array buffer containing the shaders vertices.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#vertexViewF32\r\n         * @type {Float32Array}\r\n         * @since 3.17.0\r\n         */\r\n        this.vertexViewF32 = new Float32Array(this.vertexData);\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#_tempMatrix1\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix1 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#_tempMatrix2\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#_tempMatrix3\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.17.0\r\n         */\r\n        this._tempMatrix3 = new TransformMatrix();\r\n\r\n        /**\r\n         * The view matrix the shader uses during rendering.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#viewMatrix\r\n         * @type {Float32Array}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.viewMatrix = new Float32Array([ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);\r\n\r\n        /**\r\n         * The projection matrix the shader uses during rendering.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#projectionMatrix\r\n         * @type {Float32Array}\r\n         * @readonly\r\n         * @since 3.17.0\r\n         */\r\n        this.projectionMatrix = new Float32Array([ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);\r\n\r\n        /**\r\n         * The default uniform mappings. These can be added to (or replaced) by specifying your own uniforms when\r\n         * creating this shader game object. The uniforms are updated automatically during the render step.\r\n         * \r\n         * The defaults are:\r\n         * \r\n         * `resolution` (2f) - Set to the size of this shader.\r\n         * `time` (1f) - The elapsed game time, in seconds.\r\n         * `mouse` (2f) - If a pointer has been bound (with `setPointer`), this uniform contains its position each frame.\r\n         * `date` (4fv) - A vec4 containing the year, month, day and time in seconds.\r\n         * `sampleRate` (1f) - Sound sample rate. 44100 by default.\r\n         * `iChannel0...3` (sampler2D) - Input channels 0 to 3. `null` by default.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#uniforms\r\n         * @type {any}\r\n         * @since 3.17.0\r\n         */\r\n        this.uniforms = {};\r\n\r\n        /**\r\n         * The pointer bound to this shader, if any.\r\n         * Set via the chainable `setPointer` method, or by modifying this property directly.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#pointer\r\n         * @type {Phaser.Input.Pointer}\r\n         * @since 3.17.0\r\n         */\r\n        this.pointer = null;\r\n\r\n        /**\r\n         * The cached width of the renderer.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#_rendererWidth\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this._rendererWidth = renderer.width;\r\n\r\n        /**\r\n         * The cached height of the renderer.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#_rendererHeight\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this._rendererHeight = renderer.height;\r\n\r\n        /**\r\n         * Internal texture count tracker.\r\n         * \r\n         * @name Phaser.GameObjects.Shader#_textureCount\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.17.0\r\n         */\r\n        this._textureCount = 0;\r\n\r\n        /**\r\n         * A reference to the GL Frame Buffer this Shader is drawing to.\r\n         * This property is only set if you have called `Shader.setRenderToTexture`.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#framebuffer\r\n         * @type {?WebGLFramebuffer}\r\n         * @since 3.19.0\r\n         */\r\n        this.framebuffer = null;\r\n\r\n        /**\r\n         * A reference to the WebGLTexture this Shader is rendering to.\r\n         * This property is only set if you have called `Shader.setRenderToTexture`.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#glTexture\r\n         * @type {?WebGLTexture}\r\n         * @since 3.19.0\r\n         */\r\n        this.glTexture = null;\r\n\r\n        /**\r\n         * A flag that indicates if this Shader has been set to render to a texture instead of the display list.\r\n         * \r\n         * This property is `true` if you have called `Shader.setRenderToTexture`, otherwise it's `false`.\r\n         * \r\n         * A Shader that is rendering to a texture _does not_ appear on the display list.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#renderToTexture\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.renderToTexture = false;\r\n\r\n        /**\r\n         * A reference to the Phaser.Textures.Texture that has been stored in the Texture Manager for this Shader.\r\n         * \r\n         * This property is only set if you have called `Shader.setRenderToTexture`, otherwise it is `null`.\r\n         *\r\n         * @name Phaser.GameObjects.Shader#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @since 3.19.0\r\n         */\r\n        this.texture = null;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n        this.setOrigin(0.5, 0.5);\r\n        this.setShader(key, textures, textureData);\r\n    },\r\n\r\n    /**\r\n     * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n     * Also checks the Game Object against the given Cameras exclusion list.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#willRender\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to check against this Game Object.\r\n     *\r\n     * @return {boolean} True if the Game Object should be rendered, otherwise false.\r\n     */\r\n    willRender: function (camera)\r\n    {\r\n        if (this.renderToTexture)\r\n        {\r\n            return true;\r\n        }\r\n        else\r\n        {\r\n            return !(GameObject.RENDER_MASK !== this.renderFlags || (this.cameraFilter !== 0 && (this.cameraFilter & camera.id)));\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Changes this Shader so instead of rendering to the display list it renders to a\r\n     * WebGL Framebuffer and WebGL Texture instead. This allows you to use the output\r\n     * of this shader as an input for another shader, by mapping a sampler2D uniform\r\n     * to it.\r\n     * \r\n     * After calling this method the `Shader.framebuffer` and `Shader.glTexture` properties\r\n     * are populated.\r\n     * \r\n     * Additionally, you can provide a key to this method. Doing so will create a Phaser Texture\r\n     * from this Shader and save it into the Texture Manager, allowing you to then use it for\r\n     * any texture-based Game Object, such as a Sprite or Image:\r\n     * \r\n     * ```javascript\r\n     * var shader = this.add.shader('myShader', x, y, width, height);\r\n     * \r\n     * shader.setRenderToTexture('doodle');\r\n     * \r\n     * this.add.image(400, 300, 'doodle');\r\n     * ```\r\n     * \r\n     * Note that it stores an active reference to this Shader. That means as this shader updates,\r\n     * so does the texture and any object using it to render with. Also, if you destroy this\r\n     * shader, be sure to clear any objects that may have been using it as a texture too.\r\n     * \r\n     * You can access the Phaser Texture that is created via the `Shader.texture` property.\r\n     * \r\n     * By default it will create a single base texture. You can add frames to the texture\r\n     * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n     * to use a specific frame from a Render Texture.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#setRenderToTexture\r\n     * @since 3.19.0\r\n     *\r\n     * @param {string} [key] - The unique key to store the texture as within the global Texture Manager.\r\n     * @param {boolean} [flipY=false] - Does this texture need vertically flipping before rendering? This should usually be set to `true` if being fed from a buffer.\r\n     *\r\n     * @return {this} This Shader instance.\r\n     */\r\n    setRenderToTexture: function (key, flipY)\r\n    {\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        if (!this.renderToTexture)\r\n        {\r\n            var width = this.width;\r\n            var height = this.height;\r\n            var renderer = this.renderer;\r\n\r\n            this.glTexture = renderer.createTextureFromSource(null, width, height, 0);\r\n\r\n            this.glTexture.flipY = flipY;\r\n\r\n            this.framebuffer = renderer.createFramebuffer(width, height, this.glTexture, false);\r\n\r\n            this._rendererWidth = width;\r\n            this._rendererHeight = height;\r\n\r\n            this.renderToTexture = true;\r\n\r\n            this.projOrtho(0, this.width, this.height, 0);\r\n\r\n            if (key)\r\n            {\r\n                this.texture = this.scene.sys.textures.addGLTexture(key, this.glTexture, width, height);\r\n            }\r\n        }\r\n\r\n        //  And now render at least once, so our texture isn't blank on the first update\r\n\r\n        if (this.shader)\r\n        {\r\n            var pipeline = renderer.currentPipeline;\r\n\r\n            renderer.clearPipeline();\r\n        \r\n            this.load();\r\n            this.flush();\r\n    \r\n            renderer.rebindPipeline(pipeline);\r\n        }\r\n    \r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the fragment and, optionally, the vertex shader source code that this Shader will use.\r\n     * This will immediately delete the active shader program, if set, and then create a new one\r\n     * with the given source. Finally, the shader uniforms are initialized.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#setShader\r\n     * @since 3.17.0\r\n     * \r\n     * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n     * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setShader: function (key, textures, textureData)\r\n    {\r\n        if (textures === undefined) { textures = []; }\r\n\r\n        if (typeof key === 'string')\r\n        {\r\n            var cache = this.scene.sys.cache.shader;\r\n\r\n            if (!cache.has(key))\r\n            {\r\n                console.warn('Shader missing: ' + key);\r\n                return this;\r\n            }\r\n    \r\n            this.shader = cache.get(key);\r\n        }\r\n        else\r\n        {\r\n            this.shader = key;\r\n        }\r\n\r\n        var gl = this.gl;\r\n        var renderer = this.renderer;\r\n\r\n        if (this.program)\r\n        {\r\n            gl.deleteProgram(this.program);\r\n        }\r\n\r\n        var program = renderer.createProgram(this.shader.vertexSrc, this.shader.fragmentSrc);\r\n\r\n        //  The default uniforms available within the vertex shader\r\n        renderer.setMatrix4(program, 'uViewMatrix', false, this.viewMatrix);\r\n        renderer.setMatrix4(program, 'uProjectionMatrix', false, this.projectionMatrix);\r\n        renderer.setFloat2(program, 'uResolution', this.width, this.height);\r\n\r\n        this.program = program;\r\n\r\n        var d = new Date();\r\n\r\n        //  The default uniforms available within the fragment shader\r\n        var defaultUniforms = {\r\n            resolution: { type: '2f', value: { x: this.width, y: this.height } },\r\n            time: { type: '1f', value: 0 },\r\n            mouse: { type: '2f', value: { x: this.width / 2, y: this.height / 2 } },\r\n            date: { type: '4fv', value: [ d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds() ] },\r\n            sampleRate: { type: '1f', value: 44100.0 },\r\n            iChannel0: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n            iChannel1: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n            iChannel2: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n            iChannel3: { type: 'sampler2D', value: null, textureData: { repeat: true } }\r\n        };\r\n \r\n        if (this.shader.uniforms)\r\n        {\r\n            this.uniforms = Extend(true, {}, this.shader.uniforms, defaultUniforms);\r\n        }\r\n        else\r\n        {\r\n            this.uniforms = defaultUniforms;\r\n        }\r\n\r\n        for (var i = 0; i < 4; i++)\r\n        {\r\n            if (textures[i])\r\n            {\r\n                this.setSampler2D('iChannel' + i, textures[i], i, textureData);\r\n            }\r\n        }\r\n\r\n        this.initUniforms();\r\n\r\n        this.projOrtho(0, this._rendererWidth, this._rendererHeight, 0);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds a Phaser Pointer object to this Shader.\r\n     * \r\n     * The screen position of the pointer will be set in to the shaders `mouse` uniform\r\n     * automatically every frame. Call this method with no arguments to unbind the pointer.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#setPointer\r\n     * @since 3.17.0\r\n     * \r\n     * @param {Phaser.Input.Pointer} [pointer] - The Pointer to bind to this shader.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setPointer: function (pointer)\r\n    {\r\n        this.pointer = pointer;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this shader to use an orthographic projection matrix.\r\n     * This matrix is stored locally in the `projectionMatrix` property,\r\n     * as well as being bound to the `uProjectionMatrix` uniform.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#projOrtho\r\n     * @since 3.17.0\r\n     *\r\n     * @param {number} left - The left value.\r\n     * @param {number} right - The right value.\r\n     * @param {number} bottom - The bottom value.\r\n     * @param {number} top - The top value.\r\n     */\r\n    projOrtho: function (left, right, bottom, top)\r\n    {\r\n        var near = -1000;\r\n        var far = 1000;\r\n\r\n        var leftRight = 1 / (left - right);\r\n        var bottomTop = 1 / (bottom - top);\r\n        var nearFar = 1 / (near - far);\r\n\r\n        var pm = this.projectionMatrix;\r\n\r\n        pm[0] = -2 * leftRight;\r\n        pm[5] = -2 * bottomTop;\r\n        pm[10] = 2 * nearFar;\r\n        pm[12] = (left + right) * leftRight;\r\n        pm[13] = (top + bottom) * bottomTop;\r\n        pm[14] = (far + near) * nearFar;\r\n\r\n        var program = this.program;\r\n\r\n        this.renderer.setMatrix4(program, 'uProjectionMatrix', false, this.projectionMatrix);\r\n\r\n        this._rendererWidth = right;\r\n        this._rendererHeight = bottom;\r\n    },\r\n\r\n    // Uniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/\r\n    // http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf\r\n\r\n    /**\r\n     * Initializes all of the uniforms this shader uses.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#initUniforms\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    initUniforms: function ()\r\n    {\r\n        var gl = this.gl;\r\n        var map = this.renderer.glFuncMap;\r\n        var program = this.program;\r\n\r\n        this._textureCount = 0;\r\n\r\n        for (var key in this.uniforms)\r\n        {\r\n            var uniform = this.uniforms[key];\r\n\r\n            var type = uniform.type;\r\n            var data = map[type];\r\n\r\n            uniform.uniformLocation = gl.getUniformLocation(program, key);\r\n\r\n            if (type !== 'sampler2D')\r\n            {\r\n                uniform.glMatrix = data.matrix;\r\n                uniform.glValueLength = data.length;\r\n                uniform.glFunc = data.func;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets a sampler2D uniform on this shader where the source texture is a WebGLTexture.\r\n     * \r\n     * This allows you to feed the output from one Shader into another:\r\n     * \r\n     * ```javascript\r\n     * let shader1 = this.add.shader(baseShader1, 0, 0, 512, 512).setRenderToTexture();\r\n     * let shader2 = this.add.shader(baseShader2, 0, 0, 512, 512).setRenderToTexture('output');\r\n     * \r\n     * shader1.setSampler2DBuffer('iChannel0', shader2.glTexture, 512, 512);\r\n     * shader2.setSampler2DBuffer('iChannel0', shader1.glTexture, 512, 512);\r\n     * ```\r\n     * \r\n     * In the above code, the result of baseShader1 is fed into Shader2 as the `iChannel0` sampler2D uniform.\r\n     * The result of baseShader2 is then fed back into shader1 again, creating a feedback loop.\r\n     * \r\n     * If you wish to use an image from the Texture Manager as a sampler2D input for this shader,\r\n     * see the `Shader.setSampler2D` method.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setSampler2DBuffer\r\n     * @since 3.19.0\r\n     * \r\n     * @param {string} uniformKey - The key of the sampler2D uniform to be updated, i.e. `iChannel0`.\r\n     * @param {WebGLTexture} texture - A WebGLTexture reference.\r\n     * @param {integer} width - The width of the texture.\r\n     * @param {integer} height - The height of the texture.\r\n     * @param {integer} [textureIndex=0] - The texture index.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setSampler2DBuffer: function (uniformKey, texture, width, height, textureIndex, textureData)\r\n    {\r\n        if (textureIndex === undefined) { textureIndex = 0; }\r\n        if (textureData === undefined) { textureData = {}; }\r\n\r\n        var uniform = this.uniforms[uniformKey];\r\n\r\n        uniform.value = texture;\r\n\r\n        textureData.width = width;\r\n        textureData.height = height;\r\n\r\n        uniform.textureData = textureData;\r\n\r\n        this._textureCount = textureIndex;\r\n\r\n        this.initSampler2D(uniform);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a sampler2D uniform on this shader.\r\n     * \r\n     * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n     * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n     * \r\n     * If you wish to use another Shader as a sampler2D input for this shader, see the `Shader.setSampler2DBuffer` method.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setSampler2D\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} uniformKey - The key of the sampler2D uniform to be updated, i.e. `iChannel0`.\r\n     * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n     * @param {integer} [textureIndex=0] - The texture index.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setSampler2D: function (uniformKey, textureKey, textureIndex, textureData)\r\n    {\r\n        if (textureIndex === undefined) { textureIndex = 0; }\r\n\r\n        var textureManager = this.scene.sys.textures;\r\n\r\n        if (textureManager.exists(textureKey))\r\n        {\r\n            var frame = textureManager.getFrame(textureKey);\r\n            var uniform = this.uniforms[uniformKey];\r\n            var source = frame.source;\r\n\r\n            uniform.textureKey = textureKey;\r\n            uniform.source = source.image;\r\n            uniform.value = frame.glTexture;\r\n\r\n            if (source.isGLTexture)\r\n            {\r\n                if (!textureData)\r\n                {\r\n                    textureData = {};\r\n                }\r\n\r\n                textureData.width = source.width;\r\n                textureData.height = source.height;\r\n            }\r\n\r\n            if (textureData)\r\n            {\r\n                uniform.textureData = textureData;\r\n            }\r\n\r\n            this._textureCount = textureIndex;\r\n\r\n            this.initSampler2D(uniform);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a property of a uniform already present on this shader.\r\n     * \r\n     * To modify the value of a uniform such as a 1f or 1i use the `value` property directly:\r\n     * \r\n     * ```javascript\r\n     * shader.setUniform('size.value', 16);\r\n     * ```\r\n     * \r\n     * You can use dot notation to access deeper values, for example:\r\n     * \r\n     * ```javascript\r\n     * shader.setUniform('resolution.value.x', 512);\r\n     * ```\r\n     * \r\n     * The change to the uniform will take effect the next time the shader is rendered.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setUniform\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} key - The key of the uniform to modify. Use dots for deep properties, i.e. `resolution.value.x`.\r\n     * @param {any} value - The value to set into the uniform.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setUniform: function (key, value)\r\n    {\r\n        SetValue(this.uniforms, key, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the uniform object for the given key, or `null` if the uniform couldn't be found.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#getUniform\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} key - The key of the uniform to return the value for.\r\n     * \r\n     * @return {any} A reference to the uniform object. This is not a copy, so modifying it will update the original object also.\r\n     */\r\n    getUniform: function (key)\r\n    {\r\n        return GetFastValue(this.uniforms, key, null);\r\n    },\r\n\r\n    /**\r\n     * A short-cut method that will directly set the texture being used by the `iChannel0` sampler2D uniform.\r\n     * \r\n     * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n     * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setChannel0\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setChannel0: function (textureKey, textureData)\r\n    {\r\n        return this.setSampler2D('iChannel0', textureKey, 0, textureData);\r\n    },\r\n\r\n    /**\r\n     * A short-cut method that will directly set the texture being used by the `iChannel1` sampler2D uniform.\r\n     * \r\n     * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n     * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setChannel1\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setChannel1: function (textureKey, textureData)\r\n    {\r\n        return this.setSampler2D('iChannel1', textureKey, 1, textureData);\r\n    },\r\n\r\n    /**\r\n     * A short-cut method that will directly set the texture being used by the `iChannel2` sampler2D uniform.\r\n     * \r\n     * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n     * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setChannel2\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setChannel2: function (textureKey, textureData)\r\n    {\r\n        return this.setSampler2D('iChannel2', textureKey, 2, textureData);\r\n    },\r\n\r\n    /**\r\n     * A short-cut method that will directly set the texture being used by the `iChannel3` sampler2D uniform.\r\n     * \r\n     * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n     * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#setChannel3\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n     * @param {any} [textureData] - Additional texture data.\r\n     * \r\n     * @return {this} This Shader instance.\r\n     */\r\n    setChannel3: function (textureKey, textureData)\r\n    {\r\n        return this.setSampler2D('iChannel3', textureKey, 3, textureData);\r\n    },\r\n\r\n    /**\r\n     * Internal method that takes a sampler2D uniform and prepares it for use by setting the\r\n     * gl texture parameters.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#initSampler2D\r\n     * @private\r\n     * @since 3.17.0\r\n     * \r\n     * @param {any} uniform - The sampler2D uniform to process.\r\n     */\r\n    initSampler2D: function (uniform)\r\n    {\r\n        if (!uniform.value)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var gl = this.gl;\r\n\r\n        gl.activeTexture(gl.TEXTURE0 + this._textureCount);\r\n        gl.bindTexture(gl.TEXTURE_2D, uniform.value);\r\n    \r\n        //  Extended texture data\r\n\r\n        var data = uniform.textureData;\r\n\r\n        if (data)\r\n        {\r\n            // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D\r\n    \r\n            //  mag / minFilter can be: gl.LINEAR, gl.LINEAR_MIPMAP_LINEAR or gl.NEAREST\r\n            //  wrapS/T can be: gl.CLAMP_TO_EDGE or gl.REPEAT\r\n            //  format can be: gl.LUMINANCE or gl.RGBA\r\n    \r\n            var magFilter = gl[GetFastValue(data, 'magFilter', 'linear').toUpperCase()];\r\n            var minFilter = gl[GetFastValue(data, 'minFilter', 'linear').toUpperCase()];\r\n            var wrapS = gl[GetFastValue(data, 'wrapS', 'repeat').toUpperCase()];\r\n            var wrapT = gl[GetFastValue(data, 'wrapT', 'repeat').toUpperCase()];\r\n            var format = gl[GetFastValue(data, 'format', 'rgba').toUpperCase()];\r\n\r\n            if (data.repeat)\r\n            {\r\n                wrapS = gl.REPEAT;\r\n                wrapT = gl.REPEAT;\r\n            }\r\n\r\n            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, !!data.flipY);\r\n\r\n            if (data.width)\r\n            {\r\n                var width = GetFastValue(data, 'width', 512);\r\n                var height = GetFastValue(data, 'height', 2);\r\n                var border = GetFastValue(data, 'border', 0);\r\n    \r\n                //  texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels)\r\n                gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null);\r\n            }\r\n            else\r\n            {\r\n                //  texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels)\r\n                gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.source);\r\n            }\r\n    \r\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\r\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\r\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);\r\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);\r\n        }\r\n\r\n        this.renderer.setProgram(this.program);\r\n    \r\n        gl.uniform1i(uniform.uniformLocation, this._textureCount);\r\n    \r\n        this._textureCount++;\r\n    },\r\n\r\n    /**\r\n     * Synchronizes all of the uniforms this shader uses.\r\n     * Each uniforms gl function is called in turn.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#syncUniforms\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    syncUniforms: function ()\r\n    {\r\n        var gl = this.gl;\r\n\r\n        var uniforms = this.uniforms;\r\n        var uniform;\r\n        var length;\r\n        var glFunc;\r\n        var location;\r\n        var value;\r\n        var textureCount = 0;\r\n    \r\n        for (var key in uniforms)\r\n        {\r\n            uniform = uniforms[key];\r\n\r\n            glFunc = uniform.glFunc;\r\n            length = uniform.glValueLength;\r\n            location = uniform.uniformLocation;\r\n            value = uniform.value;\r\n\r\n            if (value === null)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (length === 1)\r\n            {\r\n                if (uniform.glMatrix)\r\n                {\r\n                    glFunc.call(gl, location, uniform.transpose, value);\r\n                }\r\n                else\r\n                {\r\n                    glFunc.call(gl, location, value);\r\n                }\r\n            }\r\n            else if (length === 2)\r\n            {\r\n                glFunc.call(gl, location, value.x, value.y);\r\n            }\r\n            else if (length === 3)\r\n            {\r\n                glFunc.call(gl, location, value.x, value.y, value.z);\r\n            }\r\n            else if (length === 4)\r\n            {\r\n                glFunc.call(gl, location, value.x, value.y, value.z, value.w);\r\n            }\r\n            else if (uniform.type === 'sampler2D')\r\n            {\r\n                gl.activeTexture(gl['TEXTURE' + textureCount]);\r\n\r\n                gl.bindTexture(gl.TEXTURE_2D, value);\r\n\r\n                gl.uniform1i(location, textureCount);\r\n\r\n                textureCount++;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically during render.\r\n     * \r\n     * This method performs matrix ITRS and then stores the resulting value in the `uViewMatrix` uniform.\r\n     * It then sets up the vertex buffer and shader, updates and syncs the uniforms ready\r\n     * for flush to be called.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#load\r\n     * @since 3.17.0\r\n     * \r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [matrix2D] - The transform matrix to use during rendering.\r\n     */\r\n    load: function (matrix2D)\r\n    {\r\n        //  ITRS\r\n\r\n        var gl = this.gl;\r\n        var width = this.width;\r\n        var height = this.height;\r\n        var renderer = this.renderer;\r\n        var program = this.program;\r\n        var vm = this.viewMatrix;\r\n\r\n        if (!this.renderToTexture)\r\n        {\r\n            var x = -this._displayOriginX;\r\n            var y = -this._displayOriginY;\r\n    \r\n            vm[0] = matrix2D[0];\r\n            vm[1] = matrix2D[1];\r\n            vm[4] = matrix2D[2];\r\n            vm[5] = matrix2D[3];\r\n            vm[8] = matrix2D[4];\r\n            vm[9] = matrix2D[5];\r\n            vm[12] = vm[0] * x + vm[4] * y;\r\n            vm[13] = vm[1] * x + vm[5] * y;\r\n        }\r\n\r\n        //  Update vertex shader uniforms\r\n\r\n        gl.useProgram(program);\r\n\r\n        gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uViewMatrix'), false, vm);\r\n        gl.uniform2f(gl.getUniformLocation(program, 'uResolution'), this.width, this.height);\r\n\r\n        //  Update fragment shader uniforms\r\n\r\n        var uniforms = this.uniforms;\r\n        var res = uniforms.resolution;\r\n\r\n        res.value.x = width;\r\n        res.value.y = height;\r\n\r\n        uniforms.time.value = renderer.game.loop.getDuration();\r\n\r\n        var pointer = this.pointer;\r\n\r\n        if (pointer)\r\n        {\r\n            var mouse = uniforms.mouse;\r\n\r\n            var px = pointer.x / width;\r\n            var py = 1 - pointer.y / height;\r\n    \r\n            mouse.value.x = px.toFixed(2);\r\n            mouse.value.y = py.toFixed(2);\r\n        }\r\n\r\n        this.syncUniforms();\r\n    },\r\n\r\n    /**\r\n     * Called automatically during render.\r\n     * \r\n     * Sets the active shader, loads the vertex buffer and then draws.\r\n     * \r\n     * @method Phaser.GameObjects.Shader#flush\r\n     * @since 3.17.0\r\n     */\r\n    flush: function ()\r\n    {\r\n        //  Bind\r\n\r\n        var width = this.width;\r\n        var height = this.height;\r\n        var program = this.program;\r\n\r\n        var gl = this.gl;\r\n        var vertexBuffer = this.vertexBuffer;\r\n        var renderer = this.renderer;\r\n        var vertexSize = Float32Array.BYTES_PER_ELEMENT * 2;\r\n\r\n        if (this.renderToTexture)\r\n        {\r\n            renderer.setFramebuffer(this.framebuffer);\r\n\r\n            gl.clearColor(0, 0, 0, 0);\r\n\r\n            gl.clear(gl.COLOR_BUFFER_BIT);\r\n        }\r\n\r\n        gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\r\n\r\n        var location = gl.getAttribLocation(program, 'inPosition');\r\n\r\n        if (location !== -1)\r\n        {\r\n            gl.enableVertexAttribArray(location);\r\n\r\n            gl.vertexAttribPointer(location, 2, gl.FLOAT, false, vertexSize, 0);\r\n        }\r\n\r\n        //  Draw\r\n\r\n        var vf = this.vertexViewF32;\r\n\r\n        vf[3] = height;\r\n        vf[4] = width;\r\n        vf[5] = height;\r\n        vf[8] = width;\r\n        vf[9] = height;\r\n        vf[10] = width;\r\n\r\n        //  Flush\r\n\r\n        var vertexCount = 6;\r\n\r\n        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bytes.subarray(0, vertexCount * vertexSize));\r\n\r\n        gl.drawArrays(gl.TRIANGLES, 0, vertexCount);\r\n\r\n        if (this.renderToTexture)\r\n        {\r\n            renderer.setFramebuffer(null, false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * A NOOP method so you can pass a Shader to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#setAlpha\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    setAlpha: function ()\r\n    {\r\n    },\r\n    \r\n    /**\r\n     * A NOOP method so you can pass a Shader to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#setBlendMode\r\n     * @private\r\n     * @since 3.17.0\r\n     */\r\n    setBlendMode: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Shader#preDestroy\r\n     * @protected\r\n     * @since 3.17.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        var gl = this.gl;\r\n\r\n        gl.deleteProgram(this.program);\r\n        gl.deleteBuffer(this.vertexBuffer);\r\n\r\n        if (this.renderToTexture)\r\n        {\r\n            this.renderer.deleteFramebuffer(this.framebuffer);\r\n\r\n            this.texture.destroy();\r\n\r\n            this.framebuffer = null;\r\n            this.glTexture = null;\r\n            this.texture = null;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Shader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyLmpzPzkyNjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQyxvRkFBZ0I7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsMEdBQStCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxtQ0FBbUM7QUFDOUMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLElBQUk7QUFDZjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUNBQW1DO0FBQ2xELGVBQWUsU0FBUztBQUN4QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QixxQkFBcUIsZ0NBQWdDLEVBQUU7QUFDaEYsbUJBQW1CLHVCQUF1QjtBQUMxQyxvQkFBb0IscUJBQXFCLHdDQUF3QyxFQUFFO0FBQ25GLG1CQUFtQixvSUFBb0k7QUFDdkoseUJBQXlCLDZCQUE2QjtBQUN0RCx3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWU7QUFDdEY7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsa0JBQWtCO0FBQzNELHdDQUF3QyxrQkFBa0I7O0FBRTFEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsa0JBQWtCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcbnZhciBTZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9TZXRWYWx1ZScpO1xyXG52YXIgU2hhZGVyUmVuZGVyID0gcmVxdWlyZSgnLi9TaGFkZXJSZW5kZXInKTtcclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNoYWRlciBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIFRoaXMgR2FtZSBPYmplY3QgYWxsb3dzIHlvdSB0byBlYXNpbHkgYWRkIGEgcXVhZCB3aXRoIGl0cyBvd24gc2hhZGVyIGludG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIG1hbmlwdWxhdGUgaXRcclxuICogYXMgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdCwgaW5jbHVkaW5nIHNjYWxpbmcsIHJvdGF0aW5nLCBwb3NpdGlvbmluZyBhbmQgYWRkaW5nIHRvIENvbnRhaW5lcnMuIFNoYWRlcnNcclxuICogY2FuIGJlIG1hc2tlZCB3aXRoIGVpdGhlciBCaXRtYXAgb3IgR2VvbWV0cnkgbWFza3MgYW5kIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBCaXRtYXAgTWFzayBmb3IgYSBDYW1lcmEgb3Igb3RoZXJcclxuICogR2FtZSBPYmplY3QuIFRoZXkgY2FuIGFsc28gYmUgbWFkZSBpbnRlcmFjdGl2ZSBhbmQgdXNlZCBmb3IgaW5wdXQgZXZlbnRzLlxyXG4gKiBcclxuICogSXQgd29ya3MgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIGEgYFBoYXNlci5EaXNwbGF5LkJhc2VTaGFkZXJgIGluc3RhbmNlLCBhcyBmb3VuZCBpbiB0aGUgU2hhZGVyIENhY2hlLiBUaGVzZSBjYW5cclxuICogYmUgY3JlYXRlZCBkeW5hbWljYWxseSBhdCBydW50aW1lLCBvciBsb2FkZWQgaW4gdmlhIHRoZSBHTFNMIEZpbGUgTG9hZGVyOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5nbHNsKCdmaXJlJywgJ3NoYWRlcnMvZmlyZS5nbHNsLmpzJyk7XHJcbiAqIH1cclxuICogIFxyXG4gKiBmdW5jdGlvbiBjcmVhdGUgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5hZGQuc2hhZGVyKCdmaXJlJywgNDAwLCAzMDAsIDUxMiwgNTEyKTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIFBsZWFzZSBzZWUgdGhlIFBoYXNlciAzIEV4YW1wbGVzIEdpdEh1YiByZXBvIGZvciBleGFtcGxlcyBvZiBsb2FkaW5nIGFuZCBjcmVhdGluZyBzaGFkZXJzIGR5bmFtaWNhbGx5LlxyXG4gKiBcclxuICogRHVlIHRvIHRoZSB3YXkgaW4gd2hpY2ggdGhleSB3b3JrLCB5b3UgY2Fubm90IGRpcmVjdGx5IGNoYW5nZSB0aGUgYWxwaGEgb3IgYmxlbmQgbW9kZSBvZiBhIFNoYWRlci4gVGhpcyBzaG91bGRcclxuICogYmUgaGFuZGxlZCB2aWEgZXhwb3NlZCB1bmlmb3JtcyBpbiB0aGUgc2hhZGVyIGNvZGUgaXRzZWxmLlxyXG4gKiBcclxuICogQnkgZGVmYXVsdCBhIFNoYWRlciB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHN0YW5kYXJkIHNldCBvZiB1bmlmb3Jtcy4gVGhlc2Ugd2VyZSBhZGRlZCB0byBtYXRjaCB0aG9zZVxyXG4gKiBmb3VuZCBvbiBzaXRlcyBzdWNoIGFzIFNoYWRlclRveSBvciBHTFNMU2FuZGJveCwgYW5kIHByb3ZpZGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYSBzaGFkZXIgbWF5IG5lZWQsXHJcbiAqIHN1Y2ggYXMgdGhlIHRpbWVzdGFtcCwgcmVzb2x1dGlvbiBvciBwb2ludGVyIHBvc2l0aW9uLiBZb3UgY2FuIHJlcGxhY2UgdGhlbSBieSBzcGVjaWZ5aW5nIHlvdXIgb3duIHVuaWZvcm1zXHJcbiAqIGluIHRoZSBCYXNlIFNoYWRlci5cclxuICogXHJcbiAqIFRoZXNlIFNoYWRlcnMgd29yayBieSBoYWx0aW5nIHRoZSBjdXJyZW50IHBpcGVsaW5lIGR1cmluZyByZW5kZXJpbmcsIGNyZWF0aW5nIGEgdmlld3BvcnQgbWF0Y2hlZCB0byB0aGVcclxuICogc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGFuZCB0aGVuIHJlbmRlcnMgYSBxdWFkIHVzaW5nIHRoZSBib3VuZCBzaGFkZXIuIEF0IHRoZSBlbmQsIHRoZSBwaXBlbGluZSBpcyByZXN0b3JlZC5cclxuICogXHJcbiAqIEJlY2F1c2UgaXQgYmxvY2tzIHRoZSBwaXBlbGluZSBpdCBtZWFucyBpdCB3aWxsIGludGVycnVwdCBhbnkgYmF0Y2hpbmcgdGhhdCBpcyBjdXJyZW50bHkgZ29pbmcgb24sIHNvIHlvdSBzaG91bGRcclxuICogdXNlIHRoZXNlIEdhbWUgT2JqZWN0cyBzcGFyaW5nbHkuIElmIHlvdSBuZWVkIHRvIGhhdmUgYSBmdWxseSBiYXRjaGVkIGN1c3RvbSBzaGFkZXIsIHRoZW4gcGxlYXNlIGxvb2sgYXQgdXNpbmdcclxuICogYSBjdXN0b20gcGlwZWxpbmUgaW5zdGVhZC4gSG93ZXZlciwgZm9yIGJhY2tncm91bmQgb3Igc3BlY2lhbCBtYXNraW5nIGVmZmVjdHMsIHRoZXkgYXJlIGV4dHJlbWVseSBlZmZlY3RpdmUuXHJcbiAqIFxyXG4gKiBAY2xhc3MgU2hhZGVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlcil9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHNoYWRlciB0byB1c2UgZnJvbSB0aGUgc2hhZGVyIGNhY2hlLCBvciBhIEJhc2VTaGFkZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3RleHR1cmVzXSAtIE9wdGlvbmFsIGFycmF5IG9mIHRleHR1cmUga2V5cyB0byBiaW5kIHRvIHRoZSBpQ2hhbm5lbDAuLi4zIHVuaWZvcm1zLiBUaGUgdGV4dHVyZXMgbXVzdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEgaWYgeW91IHdhbnQgdG8gY3JlYXRlIHNoYWRlciB3aXRoIG5vbmUgTlBPVCB0ZXh0dXJlcy5cclxuICovXHJcbnZhciBTaGFkZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5Db21wdXRlZFNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFNoYWRlclJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNoYWRlciAoc2NlbmUsIGtleSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1NoYWRlcicpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIEdhbWUgT2JqZWN0IGNhbm5vdCBoYXZlIGEgYmxlbmQgbW9kZSwgc28gc2tpcCBhbGwgY2hlY2tzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjYmxlbmRNb2RlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHVuZGVybHlpbmcgc2hhZGVyIG9iamVjdCBiZWluZyB1c2VkLlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIHNldCBkdXJpbmcgYSBjYWxsIHRvIHRoZSBgc2V0U2hhZGVyYCBtZXRob2QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzaGFkZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHNjZW5lLnN5cy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXIuXHJcbiAgICAgICAgICogU2hhZGVycyBvbmx5IHdvcmsgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIGNvbnRleHQgYmVsb25naW5nIHRvIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJhdyBieXRlIGJ1ZmZlciBvZiB2ZXJ0aWNlcyB0aGlzIFNoYWRlciB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhEYXRhXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5QnVmZmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleERhdGEgPSBuZXcgQXJyYXlCdWZmZXIoNiAqIChGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAyKSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBXZWJHTCB2ZXJ0ZXggYnVmZmVyIG9iamVjdCB0aGlzIHNoYWRlciB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhCdWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xCdWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyID0gcmVuZGVyZXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMudmVydGV4RGF0YS5ieXRlTGVuZ3RoLCB0aGlzLmdsLlNUUkVBTV9EUkFXKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIHNoYWRlciBwcm9ncmFtIHRoaXMgc2hhZGVyIHVzZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3Byb2dyYW1cclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xQcm9ncmFtfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVaW50OCB2aWV3IHRvIHRoZSB2ZXJ0ZXggcmF3IGJ1ZmZlci4gVXNlZCBmb3IgdXBsb2FkaW5nIHZlcnRleCBidWZmZXIgcmVzb3VyY2VzIHRvIHRoZSBHUFUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI2J5dGVzXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQ4QXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGbG9hdDMyIHZpZXcgb2YgdGhlIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIHRoZSBzaGFkZXJzIHZlcnRpY2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhWaWV3RjMyXHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhWaWV3RjMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgxID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgyID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDNcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgzID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlldyBtYXRyaXggdGhlIHNoYWRlciB1c2VzIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2aWV3TWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3TWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheShbIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEgXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeCB0aGUgc2hhZGVyIHVzZXMgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3Byb2plY3Rpb25NYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KFsgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSBdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdW5pZm9ybSBtYXBwaW5ncy4gVGhlc2UgY2FuIGJlIGFkZGVkIHRvIChvciByZXBsYWNlZCkgYnkgc3BlY2lmeWluZyB5b3VyIG93biB1bmlmb3JtcyB3aGVuXHJcbiAgICAgICAgICogY3JlYXRpbmcgdGhpcyBzaGFkZXIgZ2FtZSBvYmplY3QuIFRoZSB1bmlmb3JtcyBhcmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgcmVuZGVyIHN0ZXAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHRzIGFyZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBgcmVzb2x1dGlvbmAgKDJmKSAtIFNldCB0byB0aGUgc2l6ZSBvZiB0aGlzIHNoYWRlci5cclxuICAgICAgICAgKiBgdGltZWAgKDFmKSAtIFRoZSBlbGFwc2VkIGdhbWUgdGltZSwgaW4gc2Vjb25kcy5cclxuICAgICAgICAgKiBgbW91c2VgICgyZikgLSBJZiBhIHBvaW50ZXIgaGFzIGJlZW4gYm91bmQgKHdpdGggYHNldFBvaW50ZXJgKSwgdGhpcyB1bmlmb3JtIGNvbnRhaW5zIGl0cyBwb3NpdGlvbiBlYWNoIGZyYW1lLlxyXG4gICAgICAgICAqIGBkYXRlYCAoNGZ2KSAtIEEgdmVjNCBjb250YWluaW5nIHRoZSB5ZWFyLCBtb250aCwgZGF5IGFuZCB0aW1lIGluIHNlY29uZHMuXHJcbiAgICAgICAgICogYHNhbXBsZVJhdGVgICgxZikgLSBTb3VuZCBzYW1wbGUgcmF0ZS4gNDQxMDAgYnkgZGVmYXVsdC5cclxuICAgICAgICAgKiBgaUNoYW5uZWwwLi4uM2AgKHNhbXBsZXIyRCkgLSBJbnB1dCBjaGFubmVscyAwIHRvIDMuIGBudWxsYCBieSBkZWZhdWx0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjdW5pZm9ybXNcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb2ludGVyIGJvdW5kIHRvIHRoaXMgc2hhZGVyLCBpZiBhbnkuXHJcbiAgICAgICAgICogU2V0IHZpYSB0aGUgY2hhaW5hYmxlIGBzZXRQb2ludGVyYCBtZXRob2QsIG9yIGJ5IG1vZGlmeWluZyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjcG9pbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhY2hlZCB3aWR0aCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfcmVuZGVyZXJXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXJXaWR0aCA9IHJlbmRlcmVyLndpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FjaGVkIGhlaWdodCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfcmVuZGVyZXJIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVySGVpZ2h0ID0gcmVuZGVyZXIuaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50IHRyYWNrZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGV4dHVyZUNvdW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZXh0dXJlQ291bnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR0wgRnJhbWUgQnVmZmVyIHRoaXMgU2hhZGVyIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHNldCBpZiB5b3UgaGF2ZSBjYWxsZWQgYFNoYWRlci5zZXRSZW5kZXJUb1RleHR1cmVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNmcmFtZWJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHs/V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTFRleHR1cmUgdGhpcyBTaGFkZXIgaXMgcmVuZGVyaW5nIHRvLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgaWYgeW91IGhhdmUgY2FsbGVkIGBTaGFkZXIuc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZ2xUZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoaXMgU2hhZGVyIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIGluc3RlYWQgb2YgdGhlIGRpc3BsYXkgbGlzdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGB0cnVlYCBpZiB5b3UgaGF2ZSBjYWxsZWQgYFNoYWRlci5zZXRSZW5kZXJUb1RleHR1cmVgLCBvdGhlcndpc2UgaXQncyBgZmFsc2VgLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEEgU2hhZGVyIHRoYXQgaXMgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZSBfZG9lcyBub3RfIGFwcGVhciBvbiB0aGUgZGlzcGxheSBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJUb1RleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJUb1RleHR1cmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlIHRoYXQgaGFzIGJlZW4gc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgZm9yIHRoaXMgU2hhZGVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgaWYgeW91IGhhdmUgY2FsbGVkIGBTaGFkZXIuc2V0UmVuZGVyVG9UZXh0dXJlYCwgb3RoZXJ3aXNlIGl0IGlzIGBudWxsYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oMC41LCAwLjUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2hhZGVyKGtleSwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgcmVuZGVyTWFzayB3aXRoIHRoZSByZW5kZXJGbGFncyB0byBzZWUgaWYgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHJlbmRlciBvciBub3QuXHJcbiAgICAgKiBBbHNvIGNoZWNrcyB0aGUgR2FtZSBPYmplY3QgYWdhaW5zdCB0aGUgZ2l2ZW4gQ2FtZXJhcyBleGNsdXNpb24gbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjd2lsbFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBjaGVjayBhZ2FpbnN0IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHJlbmRlcmVkLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHdpbGxSZW5kZXI6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAhKEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmICh0aGlzLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGlzIFNoYWRlciBzbyBpbnN0ZWFkIG9mIHJlbmRlcmluZyB0byB0aGUgZGlzcGxheSBsaXN0IGl0IHJlbmRlcnMgdG8gYVxyXG4gICAgICogV2ViR0wgRnJhbWVidWZmZXIgYW5kIFdlYkdMIFRleHR1cmUgaW5zdGVhZC4gVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgb3V0cHV0XHJcbiAgICAgKiBvZiB0aGlzIHNoYWRlciBhcyBhbiBpbnB1dCBmb3IgYW5vdGhlciBzaGFkZXIsIGJ5IG1hcHBpbmcgYSBzYW1wbGVyMkQgdW5pZm9ybVxyXG4gICAgICogdG8gaXQuXHJcbiAgICAgKiBcclxuICAgICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIGBTaGFkZXIuZnJhbWVidWZmZXJgIGFuZCBgU2hhZGVyLmdsVGV4dHVyZWAgcHJvcGVydGllc1xyXG4gICAgICogYXJlIHBvcHVsYXRlZC5cclxuICAgICAqIFxyXG4gICAgICogQWRkaXRpb25hbGx5LCB5b3UgY2FuIHByb3ZpZGUgYSBrZXkgdG8gdGhpcyBtZXRob2QuIERvaW5nIHNvIHdpbGwgY3JlYXRlIGEgUGhhc2VyIFRleHR1cmVcclxuICAgICAqIGZyb20gdGhpcyBTaGFkZXIgYW5kIHNhdmUgaXQgaW50byB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBhbGxvd2luZyB5b3UgdG8gdGhlbiB1c2UgaXQgZm9yXHJcbiAgICAgKiBhbnkgdGV4dHVyZS1iYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSBvciBJbWFnZTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdmFyIHNoYWRlciA9IHRoaXMuYWRkLnNoYWRlcignbXlTaGFkZXInLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAqIFxyXG4gICAgICogc2hhZGVyLnNldFJlbmRlclRvVGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGl0IHN0b3JlcyBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoaXMgU2hhZGVyLiBUaGF0IG1lYW5zIGFzIHRoaXMgc2hhZGVyIHVwZGF0ZXMsXHJcbiAgICAgKiBzbyBkb2VzIHRoZSB0ZXh0dXJlIGFuZCBhbnkgb2JqZWN0IHVzaW5nIGl0IHRvIHJlbmRlciB3aXRoLiBBbHNvLCBpZiB5b3UgZGVzdHJveSB0aGlzXHJcbiAgICAgKiBzaGFkZXIsIGJlIHN1cmUgdG8gY2xlYXIgYW55IG9iamVjdHMgdGhhdCBtYXkgaGF2ZSBiZWVuIHVzaW5nIGl0IGFzIGEgdGV4dHVyZSB0b28uXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWNjZXNzIHRoZSBQaGFzZXIgVGV4dHVyZSB0aGF0IGlzIGNyZWF0ZWQgdmlhIHRoZSBgU2hhZGVyLnRleHR1cmVgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBCeSBkZWZhdWx0IGl0IHdpbGwgY3JlYXRlIGEgc2luZ2xlIGJhc2UgdGV4dHVyZS4gWW91IGNhbiBhZGQgZnJhbWVzIHRvIHRoZSB0ZXh0dXJlXHJcbiAgICAgKiBieSB1c2luZyB0aGUgYFRleHR1cmUuYWRkYCBtZXRob2QuIEFmdGVyIGRvaW5nIHRoaXMsIHlvdSBjYW4gdGhlbiBhbGxvdyBHYW1lIE9iamVjdHNcclxuICAgICAqIHRvIHVzZSBhIHNwZWNpZmljIGZyYW1lIGZyb20gYSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0UmVuZGVyVG9UZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gRG9lcyB0aGlzIHRleHR1cmUgbmVlZCB2ZXJ0aWNhbGx5IGZsaXBwaW5nIGJlZm9yZSByZW5kZXJpbmc/IFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgc2V0IHRvIGB0cnVlYCBpZiBiZWluZyBmZWQgZnJvbSBhIGJ1ZmZlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UmVuZGVyVG9UZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmxpcFkgPT09IHVuZGVmaW5lZCkgeyBmbGlwWSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJUb1RleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHJlbmRlcmVyLmNyZWF0ZVRleHR1cmVGcm9tU291cmNlKG51bGwsIHdpZHRoLCBoZWlnaHQsIDApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUuZmxpcFkgPSBmbGlwWTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLmdsVGV4dHVyZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXJXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlckhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJvak9ydGhvKDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmFkZEdMVGV4dHVyZShrZXksIHRoaXMuZ2xUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFuZCBub3cgcmVuZGVyIGF0IGxlYXN0IG9uY2UsIHNvIG91ciB0ZXh0dXJlIGlzbid0IGJsYW5rIG9uIHRoZSBmaXJzdCB1cGRhdGVcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hhZGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gcmVuZGVyZXIuY3VycmVudFBpcGVsaW5lO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJQaXBlbGluZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlYmluZFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBmcmFnbWVudCBhbmQsIG9wdGlvbmFsbHksIHRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBjb2RlIHRoYXQgdGhpcyBTaGFkZXIgd2lsbCB1c2UuXHJcbiAgICAgKiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgZGVsZXRlIHRoZSBhY3RpdmUgc2hhZGVyIHByb2dyYW0sIGlmIHNldCwgYW5kIHRoZW4gY3JlYXRlIGEgbmV3IG9uZVxyXG4gICAgICogd2l0aCB0aGUgZ2l2ZW4gc291cmNlLiBGaW5hbGx5LCB0aGUgc2hhZGVyIHVuaWZvcm1zIGFyZSBpbml0aWFsaXplZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0U2hhZGVyXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyKX0ga2V5IC0gVGhlIGtleSBvZiB0aGUgc2hhZGVyIHRvIHVzZSBmcm9tIHRoZSBzaGFkZXIgY2FjaGUsIG9yIGEgQmFzZVNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFt0ZXh0dXJlc10gLSBPcHRpb25hbCBhcnJheSBvZiB0ZXh0dXJlIGtleXMgdG8gYmluZCB0byB0aGUgaUNoYW5uZWwwLi4uMyB1bmlmb3Jtcy4gVGhlIHRleHR1cmVzIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFt0ZXh0dXJlRGF0YV0gLSBBZGRpdGlvbmFsIHRleHR1cmUgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNoYWRlcjogZnVuY3Rpb24gKGtleSwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlcyA9PT0gdW5kZWZpbmVkKSB7IHRleHR1cmVzID0gW107IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5zY2VuZS5zeXMuY2FjaGUuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5oYXMoa2V5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTaGFkZXIgbWlzc2luZzogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2hhZGVyID0gY2FjaGUuZ2V0KGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhZGVyID0ga2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmFtKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJlci5jcmVhdGVQcm9ncmFtKHRoaXMuc2hhZGVyLnZlcnRleFNyYywgdGhpcy5zaGFkZXIuZnJhZ21lbnRTcmMpO1xyXG5cclxuICAgICAgICAvLyAgVGhlIGRlZmF1bHQgdW5pZm9ybXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdmVydGV4IHNoYWRlclxyXG4gICAgICAgIHJlbmRlcmVyLnNldE1hdHJpeDQocHJvZ3JhbSwgJ3VWaWV3TWF0cml4JywgZmFsc2UsIHRoaXMudmlld01hdHJpeCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0TWF0cml4NChwcm9ncmFtLCAndVByb2plY3Rpb25NYXRyaXgnLCBmYWxzZSwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByZW5kZXJlci5zZXRGbG9hdDIocHJvZ3JhbSwgJ3VSZXNvbHV0aW9uJywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgZGVmYXVsdCB1bmlmb3JtcyBhdmFpbGFibGUgd2l0aGluIHRoZSBmcmFnbWVudCBzaGFkZXJcclxuICAgICAgICB2YXIgZGVmYXVsdFVuaWZvcm1zID0ge1xyXG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICcyZicsIHZhbHVlOiB7IHg6IHRoaXMud2lkdGgsIHk6IHRoaXMuaGVpZ2h0IH0gfSxcclxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxyXG4gICAgICAgICAgICBtb3VzZTogeyB0eXBlOiAnMmYnLCB2YWx1ZTogeyB4OiB0aGlzLndpZHRoIC8gMiwgeTogdGhpcy5oZWlnaHQgLyAyIH0gfSxcclxuICAgICAgICAgICAgZGF0ZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFsgZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpLCBkLmdldEhvdXJzKCkgKiA2MCAqIDYwICsgZC5nZXRNaW51dGVzKCkgKiA2MCArIGQuZ2V0U2Vjb25kcygpIF0gfSxcclxuICAgICAgICAgICAgc2FtcGxlUmF0ZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNDQxMDAuMCB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDA6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDE6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDI6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDM6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9XHJcbiAgICAgICAgfTtcclxuIFxyXG4gICAgICAgIGlmICh0aGlzLnNoYWRlci51bmlmb3JtcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMgPSBFeHRlbmQodHJ1ZSwge30sIHRoaXMuc2hhZGVyLnVuaWZvcm1zLCBkZWZhdWx0VW5pZm9ybXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zID0gZGVmYXVsdFVuaWZvcm1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2FtcGxlcjJEKCdpQ2hhbm5lbCcgKyBpLCB0ZXh0dXJlc1tpXSwgaSwgdGV4dHVyZURhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRVbmlmb3JtcygpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2pPcnRobygwLCB0aGlzLl9yZW5kZXJlcldpZHRoLCB0aGlzLl9yZW5kZXJlckhlaWdodCwgMCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIGEgUGhhc2VyIFBvaW50ZXIgb2JqZWN0IHRvIHRoaXMgU2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc2NyZWVuIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIHdpbGwgYmUgc2V0IGluIHRvIHRoZSBzaGFkZXJzIGBtb3VzZWAgdW5pZm9ybVxyXG4gICAgICogYXV0b21hdGljYWxseSBldmVyeSBmcmFtZS4gQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyB0byB1bmJpbmQgdGhlIHBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldFBvaW50ZXJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gW3BvaW50ZXJdIC0gVGhlIFBvaW50ZXIgdG8gYmluZCB0byB0aGlzIHNoYWRlci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFBvaW50ZXI6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9pbnRlciA9IHBvaW50ZXI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBzaGFkZXIgdG8gdXNlIGFuIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICAgICAqIFRoaXMgbWF0cml4IGlzIHN0b3JlZCBsb2NhbGx5IGluIHRoZSBgcHJvamVjdGlvbk1hdHJpeGAgcHJvcGVydHksXHJcbiAgICAgKiBhcyB3ZWxsIGFzIGJlaW5nIGJvdW5kIHRvIHRoZSBgdVByb2plY3Rpb25NYXRyaXhgIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNwcm9qT3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IC0gVGhlIHJpZ2h0IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSAtIFRoZSBib3R0b20gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9wIC0gVGhlIHRvcCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvak9ydGhvOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBuZWFyID0gLTEwMDA7XHJcbiAgICAgICAgdmFyIGZhciA9IDEwMDA7XHJcblxyXG4gICAgICAgIHZhciBsZWZ0UmlnaHQgPSAxIC8gKGxlZnQgLSByaWdodCk7XHJcbiAgICAgICAgdmFyIGJvdHRvbVRvcCA9IDEgLyAoYm90dG9tIC0gdG9wKTtcclxuICAgICAgICB2YXIgbmVhckZhciA9IDEgLyAobmVhciAtIGZhcik7XHJcblxyXG4gICAgICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuXHJcbiAgICAgICAgcG1bMF0gPSAtMiAqIGxlZnRSaWdodDtcclxuICAgICAgICBwbVs1XSA9IC0yICogYm90dG9tVG9wO1xyXG4gICAgICAgIHBtWzEwXSA9IDIgKiBuZWFyRmFyO1xyXG4gICAgICAgIHBtWzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbGVmdFJpZ2h0O1xyXG4gICAgICAgIHBtWzEzXSA9ICh0b3AgKyBib3R0b20pICogYm90dG9tVG9wO1xyXG4gICAgICAgIHBtWzE0XSA9IChmYXIgKyBuZWFyKSAqIG5lYXJGYXI7XHJcblxyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldE1hdHJpeDQocHJvZ3JhbSwgJ3VQcm9qZWN0aW9uTWF0cml4JywgZmFsc2UsIHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyV2lkdGggPSByaWdodDtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlckhlaWdodCA9IGJvdHRvbTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVW5pZm9ybXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgR0xTTF9FUyBTcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvXHJcbiAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2dsZXMvc3BlY3MvMi4wL0dMU0xfRVNfU3BlY2lmaWNhdGlvbl8xLjAuMTcucGRmXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhbGwgb2YgdGhlIHVuaWZvcm1zIHRoaXMgc2hhZGVyIHVzZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNpbml0VW5pZm9ybXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIGluaXRVbmlmb3JtczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBtYXAgPSB0aGlzLnJlbmRlcmVyLmdsRnVuY01hcDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMucHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZUNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudW5pZm9ybXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IG1hcFt0eXBlXTtcclxuXHJcbiAgICAgICAgICAgIHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGtleSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3NhbXBsZXIyRCcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaWZvcm0uZ2xNYXRyaXggPSBkYXRhLm1hdHJpeDtcclxuICAgICAgICAgICAgICAgIHVuaWZvcm0uZ2xWYWx1ZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdW5pZm9ybS5nbEZ1bmMgPSBkYXRhLmZ1bmM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIHNhbXBsZXIyRCB1bmlmb3JtIG9uIHRoaXMgc2hhZGVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dHVyZSBpcyBhIFdlYkdMVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBhbGxvd3MgeW91IHRvIGZlZWQgdGhlIG91dHB1dCBmcm9tIG9uZSBTaGFkZXIgaW50byBhbm90aGVyOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBsZXQgc2hhZGVyMSA9IHRoaXMuYWRkLnNoYWRlcihiYXNlU2hhZGVyMSwgMCwgMCwgNTEyLCA1MTIpLnNldFJlbmRlclRvVGV4dHVyZSgpO1xyXG4gICAgICogbGV0IHNoYWRlcjIgPSB0aGlzLmFkZC5zaGFkZXIoYmFzZVNoYWRlcjIsIDAsIDAsIDUxMiwgNTEyKS5zZXRSZW5kZXJUb1RleHR1cmUoJ291dHB1dCcpO1xyXG4gICAgICogXHJcbiAgICAgKiBzaGFkZXIxLnNldFNhbXBsZXIyREJ1ZmZlcignaUNoYW5uZWwwJywgc2hhZGVyMi5nbFRleHR1cmUsIDUxMiwgNTEyKTtcclxuICAgICAqIHNoYWRlcjIuc2V0U2FtcGxlcjJEQnVmZmVyKCdpQ2hhbm5lbDAnLCBzaGFkZXIxLmdsVGV4dHVyZSwgNTEyLCA1MTIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEluIHRoZSBhYm92ZSBjb2RlLCB0aGUgcmVzdWx0IG9mIGJhc2VTaGFkZXIxIGlzIGZlZCBpbnRvIFNoYWRlcjIgYXMgdGhlIGBpQ2hhbm5lbDBgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogVGhlIHJlc3VsdCBvZiBiYXNlU2hhZGVyMiBpcyB0aGVuIGZlZCBiYWNrIGludG8gc2hhZGVyMSBhZ2FpbiwgY3JlYXRpbmcgYSBmZWVkYmFjayBsb29wLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGFzIGEgc2FtcGxlcjJEIGlucHV0IGZvciB0aGlzIHNoYWRlcixcclxuICAgICAqIHNlZSB0aGUgYFNoYWRlci5zZXRTYW1wbGVyMkRgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldFNhbXBsZXIyREJ1ZmZlclxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pZm9ybUtleSAtIFRoZSBrZXkgb2YgdGhlIHNhbXBsZXIyRCB1bmlmb3JtIHRvIGJlIHVwZGF0ZWQsIGkuZS4gYGlDaGFubmVsMGAuXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIEEgV2ViR0xUZXh0dXJlIHJlZmVyZW5jZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0ZXh0dXJlSW5kZXg9MF0gLSBUaGUgdGV4dHVyZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTYW1wbGVyMkRCdWZmZXI6IGZ1bmN0aW9uICh1bmlmb3JtS2V5LCB0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlSW5kZXgsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkgeyB0ZXh0dXJlSW5kZXggPSAwOyB9XHJcbiAgICAgICAgaWYgKHRleHR1cmVEYXRhID09PSB1bmRlZmluZWQpIHsgdGV4dHVyZURhdGEgPSB7fTsgfVxyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybUtleV07XHJcblxyXG4gICAgICAgIHVuaWZvcm0udmFsdWUgPSB0ZXh0dXJlO1xyXG5cclxuICAgICAgICB0ZXh0dXJlRGF0YS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmVEYXRhLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdW5pZm9ybS50ZXh0dXJlRGF0YSA9IHRleHR1cmVEYXRhO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlQ291bnQgPSB0ZXh0dXJlSW5kZXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIHNhbXBsZXIyRCB1bmlmb3JtIG9uIHRoaXMgc2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gdXNlIGFub3RoZXIgU2hhZGVyIGFzIGEgc2FtcGxlcjJEIGlucHV0IGZvciB0aGlzIHNoYWRlciwgc2VlIHRoZSBgU2hhZGVyLnNldFNhbXBsZXIyREJ1ZmZlcmAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0U2FtcGxlcjJEXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bmlmb3JtS2V5IC0gVGhlIGtleSBvZiB0aGUgc2FtcGxlcjJEIHVuaWZvcm0gdG8gYmUgdXBkYXRlZCwgaS5lLiBgaUNoYW5uZWwwYC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0ZXh0dXJlSW5kZXg9MF0gLSBUaGUgdGV4dHVyZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTYW1wbGVyMkQ6IGZ1bmN0aW9uICh1bmlmb3JtS2V5LCB0ZXh0dXJlS2V5LCB0ZXh0dXJlSW5kZXgsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkgeyB0ZXh0dXJlSW5kZXggPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlTWFuYWdlciA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZU1hbmFnZXIuZXhpc3RzKHRleHR1cmVLZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZyYW1lID0gdGV4dHVyZU1hbmFnZXIuZ2V0RnJhbWUodGV4dHVyZUtleSk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1t1bmlmb3JtS2V5XTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGZyYW1lLnNvdXJjZTtcclxuXHJcbiAgICAgICAgICAgIHVuaWZvcm0udGV4dHVyZUtleSA9IHRleHR1cmVLZXk7XHJcbiAgICAgICAgICAgIHVuaWZvcm0uc291cmNlID0gc291cmNlLmltYWdlO1xyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0dMVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlRGF0YSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRleHR1cmVEYXRhLndpZHRoID0gc291cmNlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZURhdGEuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRleHR1cmVEYXRhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtLnRleHR1cmVEYXRhID0gdGV4dHVyZURhdGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVDb3VudCA9IHRleHR1cmVJbmRleDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBwcm9wZXJ0eSBvZiBhIHVuaWZvcm0gYWxyZWFkeSBwcmVzZW50IG9uIHRoaXMgc2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHZhbHVlIG9mIGEgdW5pZm9ybSBzdWNoIGFzIGEgMWYgb3IgMWkgdXNlIHRoZSBgdmFsdWVgIHByb3BlcnR5IGRpcmVjdGx5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzaGFkZXIuc2V0VW5pZm9ybSgnc2l6ZS52YWx1ZScsIDE2KTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXBlciB2YWx1ZXMsIGZvciBleGFtcGxlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzaGFkZXIuc2V0VW5pZm9ybSgncmVzb2x1dGlvbi52YWx1ZS54JywgNTEyKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY2hhbmdlIHRvIHRoZSB1bmlmb3JtIHdpbGwgdGFrZSBlZmZlY3QgdGhlIG5leHQgdGltZSB0aGUgc2hhZGVyIGlzIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0VW5pZm9ybVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdW5pZm9ybSB0byBtb2RpZnkuIFVzZSBkb3RzIGZvciBkZWVwIHByb3BlcnRpZXMsIGkuZS4gYHJlc29sdXRpb24udmFsdWUueGAuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGludG8gdGhlIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBTZXRWYWx1ZSh0aGlzLnVuaWZvcm1zLCBrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdW5pZm9ybSBvYmplY3QgZm9yIHRoZSBnaXZlbiBrZXksIG9yIGBudWxsYCBpZiB0aGUgdW5pZm9ybSBjb3VsZG4ndCBiZSBmb3VuZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI2dldFVuaWZvcm1cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHVuaWZvcm0gdG8gcmV0dXJuIHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2FueX0gQSByZWZlcmVuY2UgdG8gdGhlIHVuaWZvcm0gb2JqZWN0LiBUaGlzIGlzIG5vdCBhIGNvcHksIHNvIG1vZGlmeWluZyBpdCB3aWxsIHVwZGF0ZSB0aGUgb3JpZ2luYWwgb2JqZWN0IGFsc28uXHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldEZhc3RWYWx1ZSh0aGlzLnVuaWZvcm1zLCBrZXksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgc2hvcnQtY3V0IG1ldGhvZCB0aGF0IHdpbGwgZGlyZWN0bHkgc2V0IHRoZSB0ZXh0dXJlIGJlaW5nIHVzZWQgYnkgdGhlIGBpQ2hhbm5lbDBgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldENoYW5uZWwwXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW3RleHR1cmVEYXRhXSAtIEFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hhbm5lbDA6IGZ1bmN0aW9uICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTYW1wbGVyMkQoJ2lDaGFubmVsMCcsIHRleHR1cmVLZXksIDAsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHNob3J0LWN1dCBtZXRob2QgdGhhdCB3aWxsIGRpcmVjdGx5IHNldCB0aGUgdGV4dHVyZSBiZWluZyB1c2VkIGJ5IHRoZSBgaUNoYW5uZWwxYCBzYW1wbGVyMkQgdW5pZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHRleHR1cmVLZXkgZ2l2ZW4gaXMgdGhlIGtleSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgY2FjaGUuIFlvdSBjYW5ub3QgdXNlIGEgc2luZ2xlIGZyYW1lXHJcbiAgICAgKiBmcm9tIGEgdGV4dHVyZSwgb25seSB0aGUgZnVsbCBpbWFnZS4gQWxzbywgbG90cyBvZiBzaGFkZXJzIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBwb3dlci1vZi10d28gc2l6ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzZXRDaGFubmVsMVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZUtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLiBNdXN0IGFscmVhZHkgYmUgbG9hZGVkLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFt0ZXh0dXJlRGF0YV0gLSBBZGRpdGlvbmFsIHRleHR1cmUgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENoYW5uZWwxOiBmdW5jdGlvbiAodGV4dHVyZUtleSwgdGV4dHVyZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2FtcGxlcjJEKCdpQ2hhbm5lbDEnLCB0ZXh0dXJlS2V5LCAxLCB0ZXh0dXJlRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzaG9ydC1jdXQgbWV0aG9kIHRoYXQgd2lsbCBkaXJlY3RseSBzZXQgdGhlIHRleHR1cmUgYmVpbmcgdXNlZCBieSB0aGUgYGlDaGFubmVsMmAgc2FtcGxlcjJEIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB0ZXh0dXJlS2V5IGdpdmVuIGlzIHRoZSBrZXkgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGNhY2hlLiBZb3UgY2Fubm90IHVzZSBhIHNpbmdsZSBmcmFtZVxyXG4gICAgICogZnJvbSBhIHRleHR1cmUsIG9ubHkgdGhlIGZ1bGwgaW1hZ2UuIEFsc28sIGxvdHMgb2Ygc2hhZGVycyBleHBlY3QgdGV4dHVyZXMgdG8gYmUgcG93ZXItb2YtdHdvIHNpemVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0Q2hhbm5lbDJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci4gTXVzdCBhbHJlYWR5IGJlIGxvYWRlZC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDaGFubmVsMjogZnVuY3Rpb24gKHRleHR1cmVLZXksIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFNhbXBsZXIyRCgnaUNoYW5uZWwyJywgdGV4dHVyZUtleSwgMiwgdGV4dHVyZURhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgc2hvcnQtY3V0IG1ldGhvZCB0aGF0IHdpbGwgZGlyZWN0bHkgc2V0IHRoZSB0ZXh0dXJlIGJlaW5nIHVzZWQgYnkgdGhlIGBpQ2hhbm5lbDNgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldENoYW5uZWwzXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW3RleHR1cmVEYXRhXSAtIEFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hhbm5lbDM6IGZ1bmN0aW9uICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTYW1wbGVyMkQoJ2lDaGFubmVsMycsIHRleHR1cmVLZXksIDMsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB0YWtlcyBhIHNhbXBsZXIyRCB1bmlmb3JtIGFuZCBwcmVwYXJlcyBpdCBmb3IgdXNlIGJ5IHNldHRpbmcgdGhlXHJcbiAgICAgKiBnbCB0ZXh0dXJlIHBhcmFtZXRlcnMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNpbml0U2FtcGxlcjJEXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdW5pZm9ybSAtIFRoZSBzYW1wbGVyMkQgdW5pZm9ybSB0byBwcm9jZXNzLlxyXG4gICAgICovXHJcbiAgICBpbml0U2FtcGxlcjJEOiBmdW5jdGlvbiAodW5pZm9ybSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgdGhpcy5fdGV4dHVyZUNvdW50KTtcclxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB1bmlmb3JtLnZhbHVlKTtcclxuICAgIFxyXG4gICAgICAgIC8vICBFeHRlbmRlZCB0ZXh0dXJlIGRhdGFcclxuXHJcbiAgICAgICAgdmFyIGRhdGEgPSB1bmlmb3JtLnRleHR1cmVEYXRhO1xyXG5cclxuICAgICAgICBpZiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJHTFJlbmRlcmluZ0NvbnRleHQvdGV4SW1hZ2UyRFxyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBtYWcgLyBtaW5GaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcclxuICAgICAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxyXG4gICAgICAgICAgICAvLyAgZm9ybWF0IGNhbiBiZTogZ2wuTFVNSU5BTkNFIG9yIGdsLlJHQkFcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgbWFnRmlsdGVyID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICdtYWdGaWx0ZXInLCAnbGluZWFyJykudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgICAgIHZhciBtaW5GaWx0ZXIgPSBnbFtHZXRGYXN0VmFsdWUoZGF0YSwgJ21pbkZpbHRlcicsICdsaW5lYXInKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIHdyYXBTID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICd3cmFwUycsICdyZXBlYXQnKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIHdyYXBUID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICd3cmFwVCcsICdyZXBlYXQnKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdsW0dldEZhc3RWYWx1ZShkYXRhLCAnZm9ybWF0JywgJ3JnYmEnKS50b1VwcGVyQ2FzZSgpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLnJlcGVhdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd3JhcFMgPSBnbC5SRVBFQVQ7XHJcbiAgICAgICAgICAgICAgICB3cmFwVCA9IGdsLlJFUEVBVDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgISFkYXRhLmZsaXBZKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLndpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBHZXRGYXN0VmFsdWUoZGF0YSwgJ3dpZHRoJywgNTEyKTtcclxuICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBHZXRGYXN0VmFsdWUoZGF0YSwgJ2hlaWdodCcsIDIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvcmRlciA9IEdldEZhc3RWYWx1ZShkYXRhLCAnYm9yZGVyJywgMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8vICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscylcclxuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpXHJcbiAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdW5pZm9ybS5zb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIG1hZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBtaW5GaWx0ZXIpO1xyXG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwUyk7XHJcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXBUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xyXG4gICAgXHJcbiAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uLCB0aGlzLl90ZXh0dXJlQ291bnQpO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZUNvdW50Kys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemVzIGFsbCBvZiB0aGUgdW5pZm9ybXMgdGhpcyBzaGFkZXIgdXNlcy5cclxuICAgICAqIEVhY2ggdW5pZm9ybXMgZ2wgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHR1cm4uXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzeW5jVW5pZm9ybXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHN5bmNVbmlmb3JtczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHZhciB1bmlmb3JtO1xyXG4gICAgICAgIHZhciBsZW5ndGg7XHJcbiAgICAgICAgdmFyIGdsRnVuYztcclxuICAgICAgICB2YXIgbG9jYXRpb247XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlQ291bnQgPSAwO1xyXG4gICAgXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHVuaWZvcm1zKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdW5pZm9ybSA9IHVuaWZvcm1zW2tleV07XHJcblxyXG4gICAgICAgICAgICBnbEZ1bmMgPSB1bmlmb3JtLmdsRnVuYztcclxuICAgICAgICAgICAgbGVuZ3RoID0gdW5pZm9ybS5nbFZhbHVlTGVuZ3RoO1xyXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybS5nbE1hdHJpeClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBnbEZ1bmMuY2FsbChnbCwgbG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2xGdW5jLmNhbGwoZ2wsIGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbEZ1bmMuY2FsbChnbCwgbG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PT0gMylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2xGdW5jLmNhbGwoZ2wsIGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsZW5ndGggPT09IDQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsRnVuYy5jYWxsKGdsLCBsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueiwgdmFsdWUudyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybS50eXBlID09PSAnc2FtcGxlcjJEJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0ZXh0dXJlQ291bnRdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB0ZXh0dXJlQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleHR1cmVDb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyByZW5kZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIG1hdHJpeCBJVFJTIGFuZCB0aGVuIHN0b3JlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGluIHRoZSBgdVZpZXdNYXRyaXhgIHVuaWZvcm0uXHJcbiAgICAgKiBJdCB0aGVuIHNldHMgdXAgdGhlIHZlcnRleCBidWZmZXIgYW5kIHNoYWRlciwgdXBkYXRlcyBhbmQgc3luY3MgdGhlIHVuaWZvcm1zIHJlYWR5XHJcbiAgICAgKiBmb3IgZmx1c2ggdG8gYmUgY2FsbGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjbG9hZFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gW21hdHJpeDJEXSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAobWF0cml4MkQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIElUUlNcclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXMudmlld01hdHJpeDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gLXRoaXMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgICAgICB2YXIgeSA9IC10aGlzLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgIFxyXG4gICAgICAgICAgICB2bVswXSA9IG1hdHJpeDJEWzBdO1xyXG4gICAgICAgICAgICB2bVsxXSA9IG1hdHJpeDJEWzFdO1xyXG4gICAgICAgICAgICB2bVs0XSA9IG1hdHJpeDJEWzJdO1xyXG4gICAgICAgICAgICB2bVs1XSA9IG1hdHJpeDJEWzNdO1xyXG4gICAgICAgICAgICB2bVs4XSA9IG1hdHJpeDJEWzRdO1xyXG4gICAgICAgICAgICB2bVs5XSA9IG1hdHJpeDJEWzVdO1xyXG4gICAgICAgICAgICB2bVsxMl0gPSB2bVswXSAqIHggKyB2bVs0XSAqIHk7XHJcbiAgICAgICAgICAgIHZtWzEzXSA9IHZtWzFdICogeCArIHZtWzVdICogeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBVcGRhdGUgdmVydGV4IHNoYWRlciB1bmlmb3Jtc1xyXG5cclxuICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBnbC51bmlmb3JtTWF0cml4NGZ2KGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndVZpZXdNYXRyaXgnKSwgZmFsc2UsIHZtKTtcclxuICAgICAgICBnbC51bmlmb3JtMmYoZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1UmVzb2x1dGlvbicpLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vICBVcGRhdGUgZnJhZ21lbnQgc2hhZGVyIHVuaWZvcm1zXHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdmFyIHJlcyA9IHVuaWZvcm1zLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJlcy52YWx1ZS54ID0gd2lkdGg7XHJcbiAgICAgICAgcmVzLnZhbHVlLnkgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHVuaWZvcm1zLnRpbWUudmFsdWUgPSByZW5kZXJlci5nYW1lLmxvb3AuZ2V0RHVyYXRpb24oKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzLnBvaW50ZXI7XHJcblxyXG4gICAgICAgIGlmIChwb2ludGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG1vdXNlID0gdW5pZm9ybXMubW91c2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHggPSBwb2ludGVyLnggLyB3aWR0aDtcclxuICAgICAgICAgICAgdmFyIHB5ID0gMSAtIHBvaW50ZXIueSAvIGhlaWdodDtcclxuICAgIFxyXG4gICAgICAgICAgICBtb3VzZS52YWx1ZS54ID0gcHgudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbW91c2UudmFsdWUueSA9IHB5LnRvRml4ZWQoMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN5bmNVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyByZW5kZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFNldHMgdGhlIGFjdGl2ZSBzaGFkZXIsIGxvYWRzIHRoZSB2ZXJ0ZXggYnVmZmVyIGFuZCB0aGVuIGRyYXdzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZmx1c2hcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgZmx1c2g6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJpbmRcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLnByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMudmVydGV4QnVmZmVyO1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIHZlcnRleFNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUb1RleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhCdWZmZXIpO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnaW5Qb3NpdGlvbicpO1xyXG5cclxuICAgICAgICBpZiAobG9jYXRpb24gIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobG9jYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCB2ZXJ0ZXhTaXplLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEcmF3XHJcblxyXG4gICAgICAgIHZhciB2ZiA9IHRoaXMudmVydGV4Vmlld0YzMjtcclxuXHJcbiAgICAgICAgdmZbM10gPSBoZWlnaHQ7XHJcbiAgICAgICAgdmZbNF0gPSB3aWR0aDtcclxuICAgICAgICB2Zls1XSA9IGhlaWdodDtcclxuICAgICAgICB2Zls4XSA9IHdpZHRoO1xyXG4gICAgICAgIHZmWzldID0gaGVpZ2h0O1xyXG4gICAgICAgIHZmWzEwXSA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvLyAgRmx1c2hcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gNjtcclxuXHJcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuYnl0ZXMuc3ViYXJyYXkoMCwgdmVydGV4Q291bnQgKiB2ZXJ0ZXhTaXplKSk7XHJcblxyXG4gICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYSBTaGFkZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0QWxwaGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhIFNoYWRlciB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEJsZW5kTW9kZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBkZXN0cm95IGhhbmRsZXIsIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXN0cm95IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XHJcbiAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/Shader.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This is a stub function for Shader.Render. There is no Canvas renderer for Shader objects.\r\n *\r\n * @method Phaser.GameObjects.Shader#renderCanvas\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Shader} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar ShaderCanvasRenderer = function ()\r\n{\r\n};\r\n\r\nmodule.exports = ShaderCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ2FudmFzUmVuZGVyZXIuanM/NWRhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGlzIGEgc3R1YiBmdW5jdGlvbiBmb3IgU2hhZGVyLlJlbmRlci4gVGhlcmUgaXMgbm8gQ2FudmFzIHJlbmRlcmVyIGZvciBTaGFkZXIgb2JqZWN0cy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBTaGFkZXJDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uICgpXHJcbntcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Shader = __webpack_require__(/*! ./Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\n\r\n/**\r\n * Creates a new Shader Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Shader Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#shader\r\n * @since 3.17.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Shader} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('shader', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n    var width = GetAdvancedValue(config, 'width', 128);\r\n    var height = GetAdvancedValue(config, 'height', 128);\r\n\r\n    var shader = new Shader(this.scene, key, x, y, width, height);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, shader, config);\r\n\r\n    return shader;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ3JlYXRvci5qcz8xNTYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQztBQUNwRSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhZGVyL1NoYWRlckNyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNoYWRlciBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU2hhZGVyIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijc2hhZGVyXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdzaGFkZXInLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgdmFyIHdpZHRoID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd3aWR0aCcsIDEyOCk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdoZWlnaHQnLCAxMjgpO1xyXG5cclxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHRoaXMuc2NlbmUsIGtleSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgc2hhZGVyLCBjb25maWcpO1xyXG5cclxuICAgIHJldHVybiBzaGFkZXI7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Shader = __webpack_require__(/*! ./Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Shader Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Shader Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#shader\r\n * @webglOnly\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the Game Object.\r\n * @param {number} [height=128] - The height of the Game Object.\r\n * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n * @param {object} [textureData] - Optional additional texture data.\r\n *\r\n * @return {Phaser.GameObjects.Shader} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n    GameObjectFactory.register('shader', function (key, x, y, width, height, textures, textureData)\r\n    {\r\n        return this.displayList.add(new Shader(this.scene, key, x, y, width, height, textures, textureData));\r\n    });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyRmFjdG9yeS5qcz9jY2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0EsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYWRlci9TaGFkZXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNoYWRlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNoYWRlciBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NoYWRlclxyXG4gKiBAd2ViZ2xPbmx5XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5EaXNwbGF5LkJhc2VTaGFkZXIpfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzaGFkZXIgdG8gdXNlIGZyb20gdGhlIHNoYWRlciBjYWNoZSwgb3IgYSBCYXNlU2hhZGVyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xMjhdIC0gVGhlIGhlaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nW119IFt0ZXh0dXJlc10gLSBPcHRpb25hbCBhcnJheSBvZiB0ZXh0dXJlIGtleXMgdG8gYmluZCB0byB0aGUgaUNoYW5uZWwwLi4uMyB1bmlmb3Jtcy4gVGhlIHRleHR1cmVzIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW3RleHR1cmVEYXRhXSAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIEdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdzaGFkZXInLCBmdW5jdGlvbiAoa2V5LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlcywgdGV4dHVyZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBTaGFkZXIodGhpcy5zY2VuZSwga2V5LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlcywgdGV4dHVyZURhdGEpKTtcclxuICAgIH0pO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderRender.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/ShaderRender.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ShaderWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ShaderCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyUmVuZGVyLmpzPzhiZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhZGVyL1NoYWRlclJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1NoYWRlcldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vU2hhZGVyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Shader#renderWebGL\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Shader} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ShaderWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if (!src.shader)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var pipeline = renderer.currentPipeline;\r\n\r\n    renderer.clearPipeline();\r\n\r\n    if (src.renderToTexture)\r\n    {\r\n        src.load();\r\n        src.flush();\r\n    }\r\n    else\r\n    {\r\n        var camMatrix = src._tempMatrix1;\r\n        var shapeMatrix = src._tempMatrix2;\r\n        var calcMatrix = src._tempMatrix3;\r\n    \r\n        shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n    \r\n        camMatrix.copyFrom(camera.matrix);\r\n    \r\n        if (parentMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n    \r\n            //  Undo the camera scroll\r\n            shapeMatrix.e = src.x;\r\n            shapeMatrix.f = src.y;\r\n        }\r\n        else\r\n        {\r\n            shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n            shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n        }\r\n    \r\n        camMatrix.multiply(shapeMatrix, calcMatrix);\r\n    \r\n        //  Renderer size changed?\r\n        if (renderer.width !== src._rendererWidth || renderer.height !== src._rendererHeight)\r\n        {\r\n            src.projOrtho(0, renderer.width, renderer.height, 0);\r\n        }\r\n    \r\n        src.load(calcMatrix.matrix);\r\n        src.flush();\r\n    }\r\n\r\n    renderer.rebindPipeline(pipeline);\r\n};\r\n\r\nmodule.exports = ShaderWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyV2ViR0xSZW5kZXJlci5qcz8xMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBTaGFkZXJXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKCFzcmMuc2hhZGVyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGlwZWxpbmUgPSByZW5kZXJlci5jdXJyZW50UGlwZWxpbmU7XHJcblxyXG4gICAgcmVuZGVyZXIuY2xlYXJQaXBlbGluZSgpO1xyXG5cclxuICAgIGlmIChzcmMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAge1xyXG4gICAgICAgIHNyYy5sb2FkKCk7XHJcbiAgICAgICAgc3JjLmZsdXNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNhbU1hdHJpeCA9IHNyYy5fdGVtcE1hdHJpeDE7XHJcbiAgICAgICAgdmFyIHNoYXBlTWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MjtcclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHNyYy5fdGVtcE1hdHJpeDM7XHJcbiAgICBcclxuICAgICAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG4gICAgXHJcbiAgICAgICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgXHJcbiAgICAgICAgLy8gIFJlbmRlcmVyIHNpemUgY2hhbmdlZD9cclxuICAgICAgICBpZiAocmVuZGVyZXIud2lkdGggIT09IHNyYy5fcmVuZGVyZXJXaWR0aCB8fCByZW5kZXJlci5oZWlnaHQgIT09IHNyYy5fcmVuZGVyZXJIZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcmMucHJvak9ydGhvKDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQsIDApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHNyYy5sb2FkKGNhbGNNYXRyaXgubWF0cml4KTtcclxuICAgICAgICBzcmMuZmx1c2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJlci5yZWJpbmRQaXBlbGluZShwaXBlbGluZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders a filled path for the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#FillPathWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipeline - The WebGL Pipeline used to render this Shape.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} calcMatrix - The transform matrix used to get the position values.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object shape being rendered in this call.\r\n * @param {number} alpha - The base alpha value.\r\n * @param {number} dx - The source displayOriginX.\r\n * @param {number} dy - The source displayOriginY.\r\n */\r\nvar FillPathWebGL = function (pipeline, calcMatrix, src, alpha, dx, dy)\r\n{\r\n    var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n\r\n    var path = src.pathData;\r\n    var pathIndexes = src.pathIndexes;\r\n\r\n    for (var i = 0; i < pathIndexes.length; i += 3)\r\n    {\r\n        var p0 = pathIndexes[i] * 2;\r\n        var p1 = pathIndexes[i + 1] * 2;\r\n        var p2 = pathIndexes[i + 2] * 2;\r\n\r\n        var x0 = path[p0 + 0] - dx;\r\n        var y0 = path[p0 + 1] - dy;\r\n        var x1 = path[p1 + 0] - dx;\r\n        var y1 = path[p1 + 1] - dy;\r\n        var x2 = path[p2 + 0] - dx;\r\n        var y2 = path[p2 + 1] - dy;\r\n\r\n        var tx0 = calcMatrix.getX(x0, y0);\r\n        var ty0 = calcMatrix.getY(x0, y0);\r\n\r\n        var tx1 = calcMatrix.getX(x1, y1);\r\n        var ty1 = calcMatrix.getY(x1, y1);\r\n\r\n        var tx2 = calcMatrix.getX(x2, y2);\r\n        var ty2 = calcMatrix.getY(x2, y2);\r\n    \r\n        pipeline.setTexture2D();\r\n\r\n        pipeline.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, 0, 0, 1, 1, fillTintColor, fillTintColor, fillTintColor, pipeline.tintEffect);\r\n    }\r\n};\r\n\r\nmodule.exports = FillPathWebGL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsUGF0aFdlYkdMLmpzPzkwYjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyw4Q0FBOEM7QUFDekQsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsUGF0aFdlYkdMLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgYSBmaWxsZWQgcGF0aCBmb3IgdGhlIGdpdmVuIFNoYXBlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNGaWxsUGF0aFdlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdXNlZCB0byByZW5kZXIgdGhpcyBTaGFwZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IGNhbGNNYXRyaXggLSBUaGUgdHJhbnNmb3JtIG1hdHJpeCB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gdmFsdWVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFwZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IHNoYXBlIGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIC0gVGhlIGJhc2UgYWxwaGEgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkeCAtIFRoZSBzb3VyY2UgZGlzcGxheU9yaWdpblguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkeSAtIFRoZSBzb3VyY2UgZGlzcGxheU9yaWdpblkuXHJcbiAqL1xyXG52YXIgRmlsbFBhdGhXZWJHTCA9IGZ1bmN0aW9uIChwaXBlbGluZSwgY2FsY01hdHJpeCwgc3JjLCBhbHBoYSwgZHgsIGR5KVxyXG57XHJcbiAgICB2YXIgZmlsbFRpbnRDb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbENvbG9yLCBzcmMuZmlsbEFscGhhICogYWxwaGEpO1xyXG5cclxuICAgIHZhciBwYXRoID0gc3JjLnBhdGhEYXRhO1xyXG4gICAgdmFyIHBhdGhJbmRleGVzID0gc3JjLnBhdGhJbmRleGVzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aEluZGV4ZXMubGVuZ3RoOyBpICs9IDMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAwID0gcGF0aEluZGV4ZXNbaV0gKiAyO1xyXG4gICAgICAgIHZhciBwMSA9IHBhdGhJbmRleGVzW2kgKyAxXSAqIDI7XHJcbiAgICAgICAgdmFyIHAyID0gcGF0aEluZGV4ZXNbaSArIDJdICogMjtcclxuXHJcbiAgICAgICAgdmFyIHgwID0gcGF0aFtwMCArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkwID0gcGF0aFtwMCArIDFdIC0gZHk7XHJcbiAgICAgICAgdmFyIHgxID0gcGF0aFtwMSArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkxID0gcGF0aFtwMSArIDFdIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gcGF0aFtwMiArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkyID0gcGF0aFtwMiArIDFdIC0gZHk7XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeDAsIHkwKTtcclxuICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgwLCB5MCk7XHJcblxyXG4gICAgICAgIHZhciB0eDEgPSBjYWxjTWF0cml4LmdldFgoeDEsIHkxKTtcclxuICAgICAgICB2YXIgdHkxID0gY2FsY01hdHJpeC5nZXRZKHgxLCB5MSk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeDIsIHkyKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHgyLCB5Mik7XHJcbiAgICBcclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hUcmkodHgwLCB0eTAsIHR4MSwgdHkxLCB0eDIsIHR5MiwgMCwgMCwgMSwgMSwgZmlsbFRpbnRDb2xvciwgZmlsbFRpbnRDb2xvciwgZmlsbFRpbnRDb2xvciwgcGlwZWxpbmUudGludEVmZmVjdCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGxQYXRoV2ViR0w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the fillStyle on the target context based on the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#FillStyleCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The context to set the fill style on.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object to set the fill style from.\r\n * @param {number} [altColor] - An alternative color to render with.\r\n * @param {number} [altAlpha] - An alternative alpha to render with.\r\n */\r\nvar FillStyleCanvas = function (ctx, src, altColor, altAlpha)\r\n{\r\n    var fillColor = (altColor) ? altColor : src.fillColor;\r\n    var fillAlpha = (altAlpha) ? altAlpha : src.fillAlpha;\r\n\r\n    var red = ((fillColor & 0xFF0000) >>> 16);\r\n    var green = ((fillColor & 0xFF00) >>> 8);\r\n    var blue = (fillColor & 0xFF);\r\n\r\n    ctx.fillStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + fillAlpha + ')';\r\n};\r\n\r\nmodule.exports = FillStyleCanvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsU3R5bGVDYW52YXMuanM/OTBlNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsU3R5bGVDYW52YXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBmaWxsU3R5bGUgb24gdGhlIHRhcmdldCBjb250ZXh0IGJhc2VkIG9uIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjRmlsbFN0eWxlQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBjb250ZXh0IHRvIHNldCB0aGUgZmlsbCBzdHlsZSBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCB0byBzZXQgdGhlIGZpbGwgc3R5bGUgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFthbHRDb2xvcl0gLSBBbiBhbHRlcm5hdGl2ZSBjb2xvciB0byByZW5kZXIgd2l0aC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFthbHRBbHBoYV0gLSBBbiBhbHRlcm5hdGl2ZSBhbHBoYSB0byByZW5kZXIgd2l0aC5cclxuICovXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSBmdW5jdGlvbiAoY3R4LCBzcmMsIGFsdENvbG9yLCBhbHRBbHBoYSlcclxue1xyXG4gICAgdmFyIGZpbGxDb2xvciA9IChhbHRDb2xvcikgPyBhbHRDb2xvciA6IHNyYy5maWxsQ29sb3I7XHJcbiAgICB2YXIgZmlsbEFscGhhID0gKGFsdEFscGhhKSA/IGFsdEFscGhhIDogc3JjLmZpbGxBbHBoYTtcclxuXHJcbiAgICB2YXIgcmVkID0gKChmaWxsQ29sb3IgJiAweEZGMDAwMCkgPj4+IDE2KTtcclxuICAgIHZhciBncmVlbiA9ICgoZmlsbENvbG9yICYgMHhGRjAwKSA+Pj4gOCk7XHJcbiAgICB2YXIgYmx1ZSA9IChmaWxsQ29sb3IgJiAweEZGKTtcclxuXHJcbiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoJyArIHJlZCArICcsJyArIGdyZWVuICsgJywnICsgYmx1ZSArICcsJyArIGZpbGxBbHBoYSArICcpJztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmlsbFN0eWxlQ2FudmFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the strokeStyle and lineWidth on the target context based on the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#LineStyleCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The context to set the stroke style on.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object to set the stroke style from.\r\n * @param {number} [altColor] - An alternative color to render with.\r\n * @param {number} [altAlpha] - An alternative alpha to render with.\r\n */\r\nvar LineStyleCanvas = function (ctx, src, altColor, altAlpha)\r\n{\r\n    var strokeColor = (altColor) ? altColor : src.strokeColor;\r\n    var strokeAlpha = (altAlpha) ? altAlpha : src.strokeAlpha;\r\n\r\n    var red = ((strokeColor & 0xFF0000) >>> 16);\r\n    var green = ((strokeColor & 0xFF00) >>> 8);\r\n    var blue = (strokeColor & 0xFF);\r\n\r\n    ctx.strokeStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + strokeAlpha + ')';\r\n    ctx.lineWidth = src.lineWidth;\r\n};\r\n\r\nmodule.exports = LineStyleCanvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9MaW5lU3R5bGVDYW52YXMuanM/N2QzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL0xpbmVTdHlsZUNhbnZhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHN0cm9rZVN0eWxlIGFuZCBsaW5lV2lkdGggb24gdGhlIHRhcmdldCBjb250ZXh0IGJhc2VkIG9uIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjTGluZVN0eWxlQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBjb250ZXh0IHRvIHNldCB0aGUgc3Ryb2tlIHN0eWxlIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFwZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IHRvIHNldCB0aGUgc3Ryb2tlIHN0eWxlIGZyb20uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWx0Q29sb3JdIC0gQW4gYWx0ZXJuYXRpdmUgY29sb3IgdG8gcmVuZGVyIHdpdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWx0QWxwaGFdIC0gQW4gYWx0ZXJuYXRpdmUgYWxwaGEgdG8gcmVuZGVyIHdpdGguXHJcbiAqL1xyXG52YXIgTGluZVN0eWxlQ2FudmFzID0gZnVuY3Rpb24gKGN0eCwgc3JjLCBhbHRDb2xvciwgYWx0QWxwaGEpXHJcbntcclxuICAgIHZhciBzdHJva2VDb2xvciA9IChhbHRDb2xvcikgPyBhbHRDb2xvciA6IHNyYy5zdHJva2VDb2xvcjtcclxuICAgIHZhciBzdHJva2VBbHBoYSA9IChhbHRBbHBoYSkgPyBhbHRBbHBoYSA6IHNyYy5zdHJva2VBbHBoYTtcclxuXHJcbiAgICB2YXIgcmVkID0gKChzdHJva2VDb2xvciAmIDB4RkYwMDAwKSA+Pj4gMTYpO1xyXG4gICAgdmFyIGdyZWVuID0gKChzdHJva2VDb2xvciAmIDB4RkYwMCkgPj4+IDgpO1xyXG4gICAgdmFyIGJsdWUgPSAoc3Ryb2tlQ29sb3IgJiAweEZGKTtcclxuXHJcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgcmVkICsgJywnICsgZ3JlZW4gKyAnLCcgKyBibHVlICsgJywnICsgc3Ryb2tlQWxwaGEgKyAnKSc7XHJcbiAgICBjdHgubGluZVdpZHRoID0gc3JjLmxpbmVXaWR0aDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVN0eWxlQ2FudmFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/Shape.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/Shape.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Line = __webpack_require__(/*! ../../geom/line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Shape Game Object is a base class for the various different shapes, such as the Arc, Star or Polygon.\r\n * You cannot add a Shape directly to your Scene, it is meant as a base for your own custom Shape classes.\r\n *\r\n * @class Shape\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {string} [type] - The internal type of the Shape.\r\n * @param {any} [data] - The data of the source shape geometry, if any.\r\n */\r\nvar Shape = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Depth,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Transform,\r\n        Components.Visible\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Shape (scene, type, data)\r\n    {\r\n        if (type === undefined) { type = 'Shape'; }\r\n\r\n        GameObject.call(this, scene, type);\r\n\r\n        /**\r\n         * The source Shape data. Typically a geometry object.\r\n         * You should not manipulate this directly.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#data\r\n         * @type {any}\r\n         * @readonly\r\n         * @since 3.13.0\r\n         */\r\n        this.geom = data;\r\n\r\n        /**\r\n         * Holds the polygon path data for filled rendering.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#pathData\r\n         * @type {number[]}\r\n         * @readonly\r\n         * @since 3.13.0\r\n         */\r\n        this.pathData = [];\r\n\r\n        /**\r\n         * Holds the earcut polygon path index data for filled rendering.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#pathIndexes\r\n         * @type {integer[]}\r\n         * @readonly\r\n         * @since 3.13.0\r\n         */\r\n        this.pathIndexes = [];\r\n\r\n        /**\r\n         * The fill color used by this Shape.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#fillColor\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillColor = 0xffffff;\r\n\r\n        /**\r\n         * The fill alpha value used by this Shape.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#fillAlpha\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillAlpha = 1;\r\n\r\n        /**\r\n         * The stroke color used by this Shape.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#strokeColor\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.strokeColor = 0xffffff;\r\n\r\n        /**\r\n         * The stroke alpha value used by this Shape.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#strokeAlpha\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.strokeAlpha = 1;\r\n\r\n        /**\r\n         * The stroke line width used by this Shape.\r\n         *\r\n         * @name Phaser.GameObjects.Shape#lineWidth\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.lineWidth = 1;\r\n\r\n        /**\r\n         * Controls if this Shape is filled or not.\r\n         * Note that some Shapes do not support being filled (such as Line shapes)\r\n         *\r\n         * @name Phaser.GameObjects.Shape#isFilled\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.isFilled = false;\r\n\r\n        /**\r\n         * Controls if this Shape is stroked or not.\r\n         * Note that some Shapes do not support being stroked (such as Iso Box shapes)\r\n         *\r\n         * @name Phaser.GameObjects.Shape#isStroked\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.isStroked = false;\r\n\r\n        /**\r\n         * Controls if this Shape path is closed during rendering when stroked.\r\n         * Note that some Shapes are always closed when stroked (such as Ellipse shapes)\r\n         *\r\n         * @name Phaser.GameObjects.Shape#closePath\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.closePath = true;\r\n\r\n        /**\r\n         * Private internal value.\r\n         * A Line used when parsing internal path data to avoid constant object re-creation.\r\n         *\r\n         * @name Phaser.GameObjects.Curve#_tempLine\r\n         * @type {Phaser.Geom.Line}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._tempLine = new Line();\r\n\r\n        this.initPipeline();\r\n    },\r\n\r\n    /**\r\n     * Sets the fill color and alpha for this Shape.\r\n     * \r\n     * If you wish for the Shape to not be filled then call this method with no arguments, or just set `isFilled` to `false`.\r\n     * \r\n     * Note that some Shapes do not support fill colors, such as the Line shape.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Shape#setFillStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [color] - The color used to fill this shape. If not provided the Shape will not be filled.\r\n     * @param {number} [alpha=1] - The alpha value used when filling this shape, if a fill color is given.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFillStyle: function (color, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        if (color === undefined)\r\n        {\r\n            this.isFilled = false;\r\n        }\r\n        else\r\n        {\r\n            this.fillColor = color;\r\n            this.fillAlpha = alpha;\r\n            this.isFilled = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the stroke color and alpha for this Shape.\r\n     * \r\n     * If you wish for the Shape to not be stroked then call this method with no arguments, or just set `isStroked` to `false`.\r\n     * \r\n     * Note that some Shapes do not support being stroked, such as the Iso Box shape.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Shape#setStrokeStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [lineWidth] - The width of line to stroke with. If not provided or undefined the Shape will not be stroked.\r\n     * @param {number} [color] - The color used to stroke this shape. If not provided the Shape will not be stroked.\r\n     * @param {number} [alpha=1] - The alpha value used when stroking this shape, if a stroke color is given.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setStrokeStyle: function (lineWidth, color, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 1; }\r\n\r\n        if (lineWidth === undefined)\r\n        {\r\n            this.isStroked = false;\r\n        }\r\n        else\r\n        {\r\n            this.lineWidth = lineWidth;\r\n            this.strokeColor = color;\r\n            this.strokeAlpha = alpha;\r\n            this.isStroked = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets if this Shape path is closed during rendering when stroked.\r\n     * Note that some Shapes are always closed when stroked (such as Ellipse shapes)\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Shape#setClosePath\r\n     * @since 3.13.0\r\n     * \r\n     * @param {boolean} value - Set to `true` if the Shape should be closed when stroked, otherwise `false`.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setClosePath: function (value)\r\n    {\r\n        this.closePath = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Shape#preDestroy\r\n     * @protected\r\n     * @since 3.13.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.geom = null;\r\n        this._tempLine = null;\r\n        this.pathData = [];\r\n        this.pathIndexes = [];\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Shape;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9TaGFwZS5qcz9hMjAzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQyx5RUFBc0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxnQkFBZ0I7O0FBRWpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvU2hhcGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL2xpbmUvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIFNoYXBlIEdhbWUgT2JqZWN0IGlzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIHZhcmlvdXMgZGlmZmVyZW50IHNoYXBlcywgc3VjaCBhcyB0aGUgQXJjLCBTdGFyIG9yIFBvbHlnb24uXHJcbiAqIFlvdSBjYW5ub3QgYWRkIGEgU2hhcGUgZGlyZWN0bHkgdG8geW91ciBTY2VuZSwgaXQgaXMgbWVhbnQgYXMgYSBiYXNlIGZvciB5b3VyIG93biBjdXN0b20gU2hhcGUgY2xhc3Nlcy5cclxuICpcclxuICogQGNsYXNzIFNoYXBlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gLSBUaGUgaW50ZXJuYWwgdHlwZSBvZiB0aGUgU2hhcGUuXHJcbiAqIEBwYXJhbSB7YW55fSBbZGF0YV0gLSBUaGUgZGF0YSBvZiB0aGUgc291cmNlIHNoYXBlIGdlb21ldHJ5LCBpZiBhbnkuXHJcbiAqL1xyXG52YXIgU2hhcGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbXB1dGVkU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuR2V0Qm91bmRzLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlBpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNoYXBlIChzY2VuZSwgdHlwZSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7IHR5cGUgPSAnU2hhcGUnOyB9XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgdHlwZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzb3VyY2UgU2hhcGUgZGF0YS4gVHlwaWNhbGx5IGEgZ2VvbWV0cnkgb2JqZWN0LlxyXG4gICAgICAgICAqIFlvdSBzaG91bGQgbm90IG1hbmlwdWxhdGUgdGhpcyBkaXJlY3RseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nZW9tID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG9sZHMgdGhlIHBvbHlnb24gcGF0aCBkYXRhIGZvciBmaWxsZWQgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3BhdGhEYXRhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvbGRzIHRoZSBlYXJjdXQgcG9seWdvbiBwYXRoIGluZGV4IGRhdGEgZm9yIGZpbGxlZCByZW5kZXJpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjcGF0aEluZGV4ZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcltdfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGhJbmRleGVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaWxsIGNvbG9yIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNmaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxDb2xvciA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmlsbCBhbHBoYSB2YWx1ZSB1c2VkIGJ5IHRoaXMgU2hhcGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjZmlsbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsQWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3Ryb2tlIGNvbG9yIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNzdHJva2VDb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSAweGZmZmZmZjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0cm9rZSBhbHBoYSB2YWx1ZSB1c2VkIGJ5IHRoaXMgU2hhcGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjc3Ryb2tlQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0cm9rZUFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0cm9rZSBsaW5lIHdpZHRoIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNsaW5lV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRyb2xzIGlmIHRoaXMgU2hhcGUgaXMgZmlsbGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgZmlsbGVkIChzdWNoIGFzIExpbmUgc2hhcGVzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI2lzRmlsbGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNGaWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhpcyBTaGFwZSBpcyBzdHJva2VkIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgc3Ryb2tlZCAoc3VjaCBhcyBJc28gQm94IHNoYXBlcylcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNpc1N0cm9rZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1N0cm9rZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhpcyBTaGFwZSBwYXRoIGlzIGNsb3NlZCBkdXJpbmcgcmVuZGVyaW5nIHdoZW4gc3Ryb2tlZC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgYXJlIGFsd2F5cyBjbG9zZWQgd2hlbiBzdHJva2VkIChzdWNoIGFzIEVsbGlwc2Ugc2hhcGVzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI2Nsb3NlUGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsb3NlUGF0aCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuXHJcbiAgICAgICAgICogQSBMaW5lIHVzZWQgd2hlbiBwYXJzaW5nIGludGVybmFsIHBhdGggZGF0YSB0byBhdm9pZCBjb25zdGFudCBvYmplY3QgcmUtY3JlYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjX3RlbXBMaW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HZW9tLkxpbmV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcExpbmUgPSBuZXcgTGluZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGZvciB0aGlzIFNoYXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCBmb3IgdGhlIFNoYXBlIHRvIG5vdCBiZSBmaWxsZWQgdGhlbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLCBvciBqdXN0IHNldCBgaXNGaWxsZWRgIHRvIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGUgdGhhdCBzb21lIFNoYXBlcyBkbyBub3Qgc3VwcG9ydCBmaWxsIGNvbG9ycywgc3VjaCBhcyB0aGUgTGluZSBzaGFwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3NldEZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbG9yXSAtIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgdGhpcyBzaGFwZS4gSWYgbm90IHByb3ZpZGVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBmaWxsZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoaXMgc2hhcGUsIGlmIGEgZmlsbCBjb2xvciBpcyBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsU3R5bGU6IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcblxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgICAgICB0aGlzLmlzRmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHN0cm9rZSBjb2xvciBhbmQgYWxwaGEgZm9yIHRoaXMgU2hhcGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIGZvciB0aGUgU2hhcGUgdG8gbm90IGJlIHN0cm9rZWQgdGhlbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLCBvciBqdXN0IHNldCBgaXNTdHJva2VkYCB0byBgZmFsc2VgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgc3Ryb2tlZCwgc3VjaCBhcyB0aGUgSXNvIEJveCBzaGFwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3NldFN0cm9rZVN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGluZVdpZHRoXSAtIFRoZSB3aWR0aCBvZiBsaW5lIHRvIHN0cm9rZSB3aXRoLiBJZiBub3QgcHJvdmlkZWQgb3IgdW5kZWZpbmVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBzdHJva2VkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2xvcl0gLSBUaGUgY29sb3IgdXNlZCB0byBzdHJva2UgdGhpcyBzaGFwZS4gSWYgbm90IHByb3ZpZGVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBzdHJva2VkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYT0xXSAtIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gc3Ryb2tpbmcgdGhpcyBzaGFwZSwgaWYgYSBzdHJva2UgY29sb3IgaXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U3Ryb2tlU3R5bGU6IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc1N0cm9rZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3Ryb2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGlmIHRoaXMgU2hhcGUgcGF0aCBpcyBjbG9zZWQgZHVyaW5nIHJlbmRlcmluZyB3aGVuIHN0cm9rZWQuXHJcbiAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgYXJlIGFsd2F5cyBjbG9zZWQgd2hlbiBzdHJva2VkIChzdWNoIGFzIEVsbGlwc2Ugc2hhcGVzKVxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjc2V0Q2xvc2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBTZXQgdG8gYHRydWVgIGlmIHRoZSBTaGFwZSBzaG91bGQgYmUgY2xvc2VkIHdoZW4gc3Ryb2tlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2xvc2VQYXRoOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVBhdGggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3RlbXBMaW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXBlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/Shape.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders a stroke outline around the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#StrokePathWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipeline - The WebGL Pipeline used to render this Shape.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object shape being rendered in this call.\r\n * @param {number} alpha - The base alpha value.\r\n * @param {number} dx - The source displayOriginX.\r\n * @param {number} dy - The source displayOriginY.\r\n */\r\nvar StrokePathWebGL = function (pipeline, src, alpha, dx, dy)\r\n{\r\n    var strokeTint = pipeline.strokeTint;\r\n    var strokeTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.strokeColor, src.strokeAlpha * alpha);\r\n\r\n    strokeTint.TL = strokeTintColor;\r\n    strokeTint.TR = strokeTintColor;\r\n    strokeTint.BL = strokeTintColor;\r\n    strokeTint.BR = strokeTintColor;\r\n\r\n    var path = src.pathData;\r\n    var pathLength = path.length - 1;\r\n    var lineWidth = src.lineWidth;\r\n    var halfLineWidth = lineWidth / 2;\r\n\r\n    var px1 = path[0] - dx;\r\n    var py1 = path[1] - dy;\r\n\r\n    if (!src.closePath)\r\n    {\r\n        pathLength -= 2;\r\n    }\r\n\r\n    for (var i = 2; i < pathLength; i += 2)\r\n    {\r\n        var px2 = path[i] - dx;\r\n        var py2 = path[i + 1] - dy;\r\n\r\n        pipeline.setTexture2D();\r\n\r\n        pipeline.batchLine(\r\n            px1,\r\n            py1,\r\n            px2,\r\n            py2,\r\n            halfLineWidth,\r\n            halfLineWidth,\r\n            lineWidth,\r\n            i - 2,\r\n            (src.closePath) ? (i === pathLength - 1) : false\r\n        );\r\n\r\n        px1 = px2;\r\n        py1 = py2;\r\n    }\r\n};\r\n\r\nmodule.exports = StrokePathWebGL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9TdHJva2VQYXRoV2ViR0wuanM/ZDE5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL1N0cm9rZVBhdGhXZWJHTC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIGEgc3Ryb2tlIG91dGxpbmUgYXJvdW5kIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjU3Ryb2tlUGF0aFdlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdXNlZCB0byByZW5kZXIgdGhpcyBTaGFwZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBzaGFwZSBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbHBoYSAtIFRoZSBiYXNlIGFscGhhIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHggLSBUaGUgc291cmNlIGRpc3BsYXlPcmlnaW5YLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHkgLSBUaGUgc291cmNlIGRpc3BsYXlPcmlnaW5ZLlxyXG4gKi9cclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IGZ1bmN0aW9uIChwaXBlbGluZSwgc3JjLCBhbHBoYSwgZHgsIGR5KVxyXG57XHJcbiAgICB2YXIgc3Ryb2tlVGludCA9IHBpcGVsaW5lLnN0cm9rZVRpbnQ7XHJcbiAgICB2YXIgc3Ryb2tlVGludENvbG9yID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5zdHJva2VDb2xvciwgc3JjLnN0cm9rZUFscGhhICogYWxwaGEpO1xyXG5cclxuICAgIHN0cm9rZVRpbnQuVEwgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICBzdHJva2VUaW50LlRSID0gc3Ryb2tlVGludENvbG9yO1xyXG4gICAgc3Ryb2tlVGludC5CTCA9IHN0cm9rZVRpbnRDb2xvcjtcclxuICAgIHN0cm9rZVRpbnQuQlIgPSBzdHJva2VUaW50Q29sb3I7XHJcblxyXG4gICAgdmFyIHBhdGggPSBzcmMucGF0aERhdGE7XHJcbiAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIHZhciBsaW5lV2lkdGggPSBzcmMubGluZVdpZHRoO1xyXG4gICAgdmFyIGhhbGZMaW5lV2lkdGggPSBsaW5lV2lkdGggLyAyO1xyXG5cclxuICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICB2YXIgcHkxID0gcGF0aFsxXSAtIGR5O1xyXG5cclxuICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgIHtcclxuICAgICAgICBwYXRoTGVuZ3RoIC09IDI7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBwYXRoTGVuZ3RoOyBpICs9IDIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHB4MiA9IHBhdGhbaV0gLSBkeDtcclxuICAgICAgICB2YXIgcHkyID0gcGF0aFtpICsgMV0gLSBkeTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZShcclxuICAgICAgICAgICAgcHgxLFxyXG4gICAgICAgICAgICBweTEsXHJcbiAgICAgICAgICAgIHB4MixcclxuICAgICAgICAgICAgcHkyLFxyXG4gICAgICAgICAgICBoYWxmTGluZVdpZHRoLFxyXG4gICAgICAgICAgICBoYWxmTGluZVdpZHRoLFxyXG4gICAgICAgICAgICBsaW5lV2lkdGgsXHJcbiAgICAgICAgICAgIGkgLSAyLFxyXG4gICAgICAgICAgICAoc3JjLmNsb3NlUGF0aCkgPyAoaSA9PT0gcGF0aExlbmd0aCAtIDEpIDogZmFsc2VcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBweDEgPSBweDI7XHJcbiAgICAgICAgcHkxID0gcHkyO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdHJva2VQYXRoV2ViR0w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/Arc.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/arc/Arc.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArcRender = __webpack_require__(/*! ./ArcRender */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar GeomCircle = __webpack_require__(/*! ../../../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Arc Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an arc shape. You can control the start and end angles of the arc,\r\n * as well as if the angles are winding clockwise or anti-clockwise. With the default settings\r\n * it renders as a complete circle. By changing the angles you can create other arc shapes,\r\n * such as half-circles.\r\n * \r\n * Arcs also have an `iterations` property and corresponding `setIterations` method. This allows\r\n * you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction.\r\n *\r\n * @class Arc\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the arc.\r\n * @param {integer} [startAngle=0] - The start angle of the arc, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the arc, in degrees.\r\n * @param {boolean} [anticlockwise=false] - The winding order of the start and end angles.\r\n * @param {number} [fillColor] - The color the arc will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the arc will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Arc = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        ArcRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Arc (scene, x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (radius === undefined) { radius = 128; }\r\n        if (startAngle === undefined) { startAngle = 0; }\r\n        if (endAngle === undefined) { endAngle = 360; }\r\n        if (anticlockwise === undefined) { anticlockwise = false; }\r\n\r\n        Shape.call(this, scene, 'Arc', new GeomCircle(0, 0, radius));\r\n\r\n        /**\r\n         * Private internal value. Holds the start angle in degrees.\r\n         *\r\n         * @name Phaser.GameObjects.Arc#_startAngle\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._startAngle = startAngle;\r\n\r\n        /**\r\n         * Private internal value. Holds the end angle in degrees.\r\n         *\r\n         * @name Phaser.GameObjects.Arc#_endAngle\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._endAngle = endAngle;\r\n\r\n        /**\r\n         * Private internal value. Holds the winding order of the start and end angles.\r\n         *\r\n         * @name Phaser.GameObjects.Arc#_anticlockwise\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._anticlockwise = anticlockwise;\r\n\r\n        /**\r\n         * Private internal value. Holds the number of iterations used when drawing the arc.\r\n         *\r\n         * @name Phaser.GameObjects.Arc#_iterations\r\n         * @type {number}\r\n         * @default 0.01\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._iterations = 0.01;\r\n\r\n        this.setPosition(x, y);\r\n\r\n        var diameter = this.geom.radius * 2;\r\n        this.setSize(diameter, diameter);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * The number of iterations used when drawing the arc.\r\n     * Increase this value for smoother arcs, at the cost of more polygons being rendered.\r\n     * Modify this value by small amounts, such as 0.01.\r\n     *\r\n     * @name Phaser.GameObjects.Arc#iterations\r\n     * @type {number}\r\n     * @default 0.01\r\n     * @since 3.13.0\r\n     */\r\n    iterations: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._iterations;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._iterations = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The radius of the arc.\r\n     *\r\n     * @name Phaser.GameObjects.Arc#radius\r\n     * @type {number}\r\n     * @since 3.13.0\r\n     */\r\n    radius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.geom.radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.geom.radius = value;\r\n\r\n            var diameter = value * 2;\r\n            this.setSize(diameter, diameter);\r\n            this.updateDisplayOrigin();\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The start angle of the arc, in degrees.\r\n     *\r\n     * @name Phaser.GameObjects.Arc#startAngle\r\n     * @type {integer}\r\n     * @since 3.13.0\r\n     */\r\n    startAngle: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._startAngle;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._startAngle = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The end angle of the arc, in degrees.\r\n     *\r\n     * @name Phaser.GameObjects.Arc#endAngle\r\n     * @type {integer}\r\n     * @since 3.13.0\r\n     */\r\n    endAngle: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._endAngle;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._endAngle = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The winding order of the start and end angles.\r\n     *\r\n     * @name Phaser.GameObjects.Arc#anticlockwise\r\n     * @type {boolean}\r\n     * @since 3.13.0\r\n     */\r\n    anticlockwise: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._anticlockwise;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._anticlockwise = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the radius of the arc.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Arc#setRadius\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} value - The value to set the radius to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setRadius: function (value)\r\n    {\r\n        this.radius = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the number of iterations used when drawing the arc.\r\n     * Increase this value for smoother arcs, at the cost of more polygons being rendered.\r\n     * Modify this value by small amounts, such as 0.01.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Arc#setIterations\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} value - The value to set the iterations to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setIterations: function (value)\r\n    {\r\n        if (value === undefined) { value = 0.01; }\r\n\r\n        this.iterations = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the starting angle of the arc, in degrees.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Arc#setStartAngle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the starting angle to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setStartAngle: function (angle, anticlockwise)\r\n    {\r\n        this._startAngle = angle;\r\n\r\n        if (anticlockwise !== undefined)\r\n        {\r\n            this._anticlockwise = anticlockwise;\r\n        }\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the ending angle of the arc, in degrees.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Arc#setEndAngle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the ending angle to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setEndAngle: function (angle, anticlockwise)\r\n    {\r\n        this._endAngle = angle;\r\n\r\n        if (anticlockwise !== undefined)\r\n        {\r\n            this._anticlockwise = anticlockwise;\r\n        }\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Arc#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var step = this._iterations;\r\n        var iteration = step;\r\n\r\n        var radius = this.geom.radius;\r\n        var startAngle = DegToRad(this._startAngle);\r\n        var endAngle = DegToRad(this._endAngle);\r\n        var anticlockwise = this._anticlockwise;\r\n\r\n        var x = radius;\r\n        var y = radius;\r\n\r\n        endAngle -= startAngle;\r\n\r\n        if (anticlockwise)\r\n        {\r\n            if (endAngle < -MATH_CONST.PI2)\r\n            {\r\n                endAngle = -MATH_CONST.PI2;\r\n            }\r\n            else if (endAngle > 0)\r\n            {\r\n                endAngle = -MATH_CONST.PI2 + endAngle % MATH_CONST.PI2;\r\n            }\r\n        }\r\n        else if (endAngle > MATH_CONST.PI2)\r\n        {\r\n            endAngle = MATH_CONST.PI2;\r\n        }\r\n        else if (endAngle < 0)\r\n        {\r\n            endAngle = MATH_CONST.PI2 + endAngle % MATH_CONST.PI2;\r\n        }\r\n\r\n        var path = [ x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius ];\r\n\r\n        var ta;\r\n\r\n        while (iteration < 1)\r\n        {\r\n            ta = endAngle * iteration + startAngle;\r\n\r\n            path.push(x + Math.cos(ta) * radius, y + Math.sin(ta) * radius);\r\n\r\n            iteration += step;\r\n        }\r\n\r\n        ta = endAngle + startAngle;\r\n\r\n        path.push(x + Math.cos(ta) * radius, y + Math.sin(ta) * radius);\r\n\r\n        path.push(x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius);\r\n\r\n        this.pathIndexes = Earcut(path);\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Arc;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjLmpzPzVlMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLDBFQUF3QjtBQUMvQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLG9GQUE2QjtBQUN0RCxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDOUMsWUFBWSxtQkFBTyxDQUFDLHNFQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsbUNBQW1DLGNBQWM7QUFDakQsdUNBQXVDLGdCQUFnQjtBQUN2RCxxQ0FBcUMsZ0JBQWdCO0FBQ3JELDBDQUEwQyx1QkFBdUI7O0FBRWpFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2FyYy9BcmMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBcmNSZW5kZXIgPSByZXF1aXJlKCcuL0FyY1JlbmRlcicpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBHZW9tQ2lyY2xlID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9jaXJjbGUvQ2lyY2xlJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEFyYyBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBXaGVuIGl0IHJlbmRlcnMgaXQgZGlzcGxheXMgYW4gYXJjIHNoYXBlLiBZb3UgY2FuIGNvbnRyb2wgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzIG9mIHRoZSBhcmMsXHJcbiAqIGFzIHdlbGwgYXMgaWYgdGhlIGFuZ2xlcyBhcmUgd2luZGluZyBjbG9ja3dpc2Ugb3IgYW50aS1jbG9ja3dpc2UuIFdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3NcclxuICogaXQgcmVuZGVycyBhcyBhIGNvbXBsZXRlIGNpcmNsZS4gQnkgY2hhbmdpbmcgdGhlIGFuZ2xlcyB5b3UgY2FuIGNyZWF0ZSBvdGhlciBhcmMgc2hhcGVzLFxyXG4gKiBzdWNoIGFzIGhhbGYtY2lyY2xlcy5cclxuICogXHJcbiAqIEFyY3MgYWxzbyBoYXZlIGFuIGBpdGVyYXRpb25zYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0SXRlcmF0aW9uc2AgbWV0aG9kLiBUaGlzIGFsbG93c1xyXG4gKiB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBBcmNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MTI4XSAtIFRoZSByYWRpdXMgb2YgdGhlIGFyYy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRBbmdsZT0wXSAtIFRoZSBzdGFydCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRBbmdsZT0zNjBdIC0gVGhlIGVuZCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbnRpY2xvY2t3aXNlPWZhbHNlXSAtIFRoZSB3aW5kaW5nIG9yZGVyIG9mIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBhcmMgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGFyYyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBBcmMgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIEFyY1JlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFyYyAoc2NlbmUsIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSB7IHJhZGl1cyA9IDEyODsgfVxyXG4gICAgICAgIGlmIChzdGFydEFuZ2xlID09PSB1bmRlZmluZWQpIHsgc3RhcnRBbmdsZSA9IDA7IH1cclxuICAgICAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDM2MDsgfVxyXG4gICAgICAgIGlmIChhbnRpY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgYW50aWNsb2Nrd2lzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdBcmMnLCBuZXcgR2VvbUNpcmNsZSgwLCAwLCByYWRpdXMpKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHN0YXJ0IGFuZ2xlIGluIGRlZ3JlZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI19zdGFydEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3RhcnRBbmdsZSA9IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSBlbmQgYW5nbGUgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjX2VuZEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBlbmRBbmdsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHdpbmRpbmcgb3JkZXIgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNfYW50aWNsb2Nrd2lzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2FudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdXNlZCB3aGVuIGRyYXdpbmcgdGhlIGFyYy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjX2l0ZXJhdGlvbnNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pdGVyYXRpb25zID0gMC4wMTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIGRpYW1ldGVyID0gdGhpcy5nZW9tLnJhZGl1cyAqIDI7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKGRpYW1ldGVyLCBkaWFtZXRlcik7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB1c2VkIHdoZW4gZHJhd2luZyB0aGUgYXJjLlxyXG4gICAgICogSW5jcmVhc2UgdGhpcyB2YWx1ZSBmb3Igc21vb3RoZXIgYXJjcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqIE1vZGlmeSB0aGlzIHZhbHVlIGJ5IHNtYWxsIGFtb3VudHMsIHN1Y2ggYXMgMC4wMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI2l0ZXJhdGlvbnNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwLjAxXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIGl0ZXJhdGlvbnM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRpb25zID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGFyYy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3JhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlb20ucmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nZW9tLnJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpYW1ldGVyID0gdmFsdWUgKiAyO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNpemUoZGlhbWV0ZXIsIGRpYW1ldGVyKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNzdGFydEFuZ2xlXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBbmdsZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QW5nbGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVuZCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjZW5kQW5nbGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBlbmRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kQW5nbGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lbmRBbmdsZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2luZGluZyBvcmRlciBvZiB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNhbnRpY2xvY2t3aXNlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgYW50aWNsb2Nrd2lzZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYW50aWNsb2Nrd2lzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FudGljbG9ja3dpc2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmFkaXVzIG9mIHRoZSBhcmMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldFJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSByYWRpdXMgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UmFkaXVzOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdXNlZCB3aGVuIGRyYXdpbmcgdGhlIGFyYy5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGFyY3MsIGF0IHRoZSBjb3N0IG9mIG1vcmUgcG9seWdvbnMgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBNb2RpZnkgdGhpcyB2YWx1ZSBieSBzbWFsbCBhbW91bnRzLCBzdWNoIGFzIDAuMDEuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldEl0ZXJhdGlvbnNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgaXRlcmF0aW9ucyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJdGVyYXRpb25zOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAwLjAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzdGFydGluZyBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNzZXRTdGFydEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzdGFydGluZyBhbmdsZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTdGFydEFuZ2xlOiBmdW5jdGlvbiAoYW5nbGUsIGFudGljbG9ja3dpc2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRBbmdsZSA9IGFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZW5kaW5nIGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldEVuZEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBlbmRpbmcgYW5nbGUgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RW5kQW5nbGU6IGZ1bmN0aW9uIChhbmdsZSwgYW50aWNsb2Nrd2lzZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9lbmRBbmdsZSA9IGFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgdXBkYXRlcyB0aGUgZGF0YSBhbmQgcGF0aCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgc3RlcCA9IHRoaXMuX2l0ZXJhdGlvbnM7XHJcbiAgICAgICAgdmFyIGl0ZXJhdGlvbiA9IHN0ZXA7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLmdlb20ucmFkaXVzO1xyXG4gICAgICAgIHZhciBzdGFydEFuZ2xlID0gRGVnVG9SYWQodGhpcy5fc3RhcnRBbmdsZSk7XHJcbiAgICAgICAgdmFyIGVuZEFuZ2xlID0gRGVnVG9SYWQodGhpcy5fZW5kQW5nbGUpO1xyXG4gICAgICAgIHZhciBhbnRpY2xvY2t3aXNlID0gdGhpcy5fYW50aWNsb2Nrd2lzZTtcclxuXHJcbiAgICAgICAgdmFyIHggPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSByYWRpdXM7XHJcblxyXG4gICAgICAgIGVuZEFuZ2xlIC09IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgIGlmIChhbnRpY2xvY2t3aXNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVuZEFuZ2xlIDwgLU1BVEhfQ09OU1QuUEkyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbmRBbmdsZSA9IC1NQVRIX0NPTlNULlBJMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlID0gLU1BVEhfQ09OU1QuUEkyICsgZW5kQW5nbGUgJSBNQVRIX0NPTlNULlBJMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA+IE1BVEhfQ09OU1QuUEkyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW5kQW5nbGUgPSBNQVRIX0NPTlNULlBJMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW5kQW5nbGUgPSBNQVRIX0NPTlNULlBJMiArIGVuZEFuZ2xlICUgTUFUSF9DT05TVC5QSTI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IFsgeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzLCB5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXMgXTtcclxuXHJcbiAgICAgICAgdmFyIHRhO1xyXG5cclxuICAgICAgICB3aGlsZSAoaXRlcmF0aW9uIDwgMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhID0gZW5kQW5nbGUgKiBpdGVyYXRpb24gKyBzdGFydEFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbih0YSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICAgICAgaXRlcmF0aW9uICs9IHN0ZXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YSA9IGVuZEFuZ2xlICsgc3RhcnRBbmdsZTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbih0YSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2goeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzLCB5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhJbmRleGVzID0gRWFyY3V0KHBhdGgpO1xyXG4gICAgICAgIHRoaXMucGF0aERhdGEgPSBwYXRoO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcmM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DegToRad = __webpack_require__(/*! ../../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Arc#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Arc} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ArcCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var radius = src.radius;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.arc(\r\n            (radius) - src.originX * (radius * 2),\r\n            (radius) - src.originY * (radius * 2),\r\n            radius,\r\n            DegToRad(src._startAngle),\r\n            DegToRad(src._endAngle),\r\n            src.anticlockwise\r\n        );\r\n\r\n        if (src.closePath)\r\n        {\r\n            ctx.closePath();\r\n        }\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = ArcCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjQ2FudmFzUmVuZGVyZXIuanM/ZTRjMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDBFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvYXJjL0FyY0NhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkFyY30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEFyY0NhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHNyYy5yYWRpdXM7XHJcblxyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgY3R4LmFyYyhcclxuICAgICAgICAgICAgKHJhZGl1cykgLSBzcmMub3JpZ2luWCAqIChyYWRpdXMgKiAyKSxcclxuICAgICAgICAgICAgKHJhZGl1cykgLSBzcmMub3JpZ2luWSAqIChyYWRpdXMgKiAyKSxcclxuICAgICAgICAgICAgcmFkaXVzLFxyXG4gICAgICAgICAgICBEZWdUb1JhZChzcmMuX3N0YXJ0QW5nbGUpLFxyXG4gICAgICAgICAgICBEZWdUb1JhZChzcmMuX2VuZEFuZ2xlKSxcclxuICAgICAgICAgICAgc3JjLmFudGljbG9ja3dpc2VcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyY0NhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Arc = __webpack_require__(/*! ./Arc */ \"./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Arc Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Arc Game Object has been built into Phaser.\r\n * \r\n * The Arc Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an arc shape. You can control the start and end angles of the arc,\r\n * as well as if the angles are winding clockwise or anti-clockwise. With the default settings\r\n * it renders as a complete circle. By changing the angles you can create other arc shapes,\r\n * such as half-circles.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#arc\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the arc.\r\n * @param {integer} [startAngle=0] - The start angle of the arc, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the arc, in degrees.\r\n * @param {boolean} [anticlockwise=false] - The winding order of the start and end angles.\r\n * @param {number} [fillColor] - The color the arc will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the arc will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Arc} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('arc', function (x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Arc(this.scene, x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha));\r\n});\r\n\r\n/**\r\n * Creates a new Circle Shape Game Object and adds it to the Scene.\r\n * \r\n * A Circle is an Arc with no defined start and end angle, making it render as a complete circle.\r\n *\r\n * Note: This method will only be available if the Arc Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#circle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the circle.\r\n * @param {number} [fillColor] - The color the circle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the circle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Arc} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('circle', function (x, y, radius, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Arc(this.scene, x, y, radius, 0, 360, false, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjRmFjdG9yeS5qcz9mNzU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxVQUFVLG1CQUFPLENBQUMscUVBQU87QUFDekIsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFyYyA9IHJlcXVpcmUoJy4vQXJjJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBBcmMgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBcmMgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgQXJjIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFdoZW4gaXQgcmVuZGVycyBpdCBkaXNwbGF5cyBhbiBhcmMgc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZXMgb2YgdGhlIGFyYyxcclxuICogYXMgd2VsbCBhcyBpZiB0aGUgYW5nbGVzIGFyZSB3aW5kaW5nIGNsb2Nrd2lzZSBvciBhbnRpLWNsb2Nrd2lzZS4gV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nc1xyXG4gKiBpdCByZW5kZXJzIGFzIGEgY29tcGxldGUgY2lyY2xlLiBCeSBjaGFuZ2luZyB0aGUgYW5nbGVzIHlvdSBjYW4gY3JlYXRlIG90aGVyIGFyYyBzaGFwZXMsXHJcbiAqIHN1Y2ggYXMgaGFsZi1jaXJjbGVzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNhcmNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0xMjhdIC0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEFuZ2xlPTM2MF0gLSBUaGUgZW5kIGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FudGljbG9ja3dpc2U9ZmFsc2VdIC0gVGhlIHdpbmRpbmcgb3JkZXIgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGFyYyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgYXJjIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdhcmMnLCBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSwgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgQXJjKHRoaXMuc2NlbmUsIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ2lyY2xlIFNoYXBlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICogXHJcbiAqIEEgQ2lyY2xlIGlzIGFuIEFyYyB3aXRoIG5vIGRlZmluZWQgc3RhcnQgYW5kIGVuZCBhbmdsZSwgbWFraW5nIGl0IHJlbmRlciBhcyBhIGNvbXBsZXRlIGNpcmNsZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQXJjIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNjaXJjbGVcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0xMjhdIC0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGNpcmNsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgY2lyY2xlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdjaXJjbGUnLCBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBBcmModGhpcy5zY2VuZSwgeCwgeSwgcmFkaXVzLCAwLCAzNjAsIGZhbHNlLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./ArcWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./ArcCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjUmVuZGVyLmpzP2ZlNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQywrRkFBb0I7QUFDOUM7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLGlHQUFxQjtBQUNoRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvYXJjL0FyY1JlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0FyY1dlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vQXJjQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Arc#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Arc} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ArcWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = ArcWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjV2ViR0xSZW5kZXJlci5qcz9hY2E4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDOUMsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9COztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZpbGxQYXRoV2ViR0wgPSByZXF1aXJlKCcuLi9GaWxsUGF0aFdlYkdMJyk7XHJcbnZhciBTdHJva2VQYXRoV2ViR0wgPSByZXF1aXJlKCcuLi9TdHJva2VQYXRoV2ViR0wnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQXJjV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzaGFwZU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgPSBzcmMueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbU1hdHJpeC5tdWx0aXBseShzaGFwZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgIHZhciBkeSA9IHNyYy5fZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgRmlsbFBhdGhXZWJHTChwaXBlbGluZSwgY2FsY01hdHJpeCwgc3JjLCBhbHBoYSwgZHgsIGR5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyY1dlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/Curve.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/curve/Curve.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CurveRender = __webpack_require__(/*! ./CurveRender */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Curve Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * To render a Curve Shape you must first create a `Phaser.Curves.Curve` object, then pass it to\r\n * the Curve Shape in the constructor.\r\n * \r\n * The Curve shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @class Curve\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.Curves.Curve} [curve] - The Curve object to use to create the Shape.\r\n * @param {number} [fillColor] - The color the curve will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the curve will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Curve = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        CurveRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Curve (scene, x, y, curve, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        Shape.call(this, scene, 'Curve', curve);\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The number of points used to draw the curve. Higher values create smoother renders at the cost of more triangles being drawn.\r\n         *\r\n         * @name Phaser.GameObjects.Curve#_smoothness\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._smoothness = 32;\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The Curve bounds rectangle.\r\n         *\r\n         * @name Phaser.GameObjects.Curve#_curveBounds\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._curveBounds = new Rectangle();\r\n\r\n        this.closePath = false;\r\n\r\n        this.setPosition(x, y);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * The smoothness of the curve. The number of points used when rendering it.\r\n     * Increase this value for smoother curves, at the cost of more polygons being rendered.\r\n     *\r\n     * @name Phaser.GameObjects.Curve#smoothness\r\n     * @type {integer}\r\n     * @default 32\r\n     * @since 3.13.0\r\n     */\r\n    smoothness: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._smoothness;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._smoothness = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the smoothness of the curve. The number of points used when rendering it.\r\n     * Increase this value for smoother curves, at the cost of more polygons being rendered.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Curve#setSmoothness\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the smoothness to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSmoothness: function (value)\r\n    {\r\n        this._smoothness = value;\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Curve#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var bounds = this._curveBounds;\r\n        var smoothness = this._smoothness;\r\n\r\n        //  Update the bounds in case the underlying data has changed\r\n        this.geom.getBounds(bounds, smoothness);\r\n\r\n        this.setSize(bounds.width, bounds.height);\r\n        this.updateDisplayOrigin();\r\n\r\n        var path = [];\r\n        var points = this.geom.getPoints(smoothness);\r\n\r\n        for (var i = 0; i < points.length; i++)\r\n        {\r\n            path.push(points[i].x, points[i].y);\r\n        }\r\n\r\n        path.push(points[0].x, points[0].y);\r\n\r\n        this.pathIndexes = Earcut(path);\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Curve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZS5qcz80OTk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGtCQUFrQixtQkFBTyxDQUFDLHVGQUFlO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQyxzRkFBOEI7QUFDbkQsZ0JBQWdCLG1CQUFPLENBQUMsZ0dBQW1DO0FBQzNELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvY3VydmUvQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDdXJ2ZVJlbmRlciA9IHJlcXVpcmUoJy4vQ3VydmVSZW5kZXInKTtcclxudmFyIEVhcmN1dCA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcG9seWdvbi9FYXJjdXQnKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEN1cnZlIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFRvIHJlbmRlciBhIEN1cnZlIFNoYXBlIHlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBhIGBQaGFzZXIuQ3VydmVzLkN1cnZlYCBvYmplY3QsIHRoZW4gcGFzcyBpdCB0b1xyXG4gKiB0aGUgQ3VydmUgU2hhcGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxyXG4gKiBcclxuICogVGhlIEN1cnZlIHNoYXBlIGFsc28gaGFzIGEgYHNtb290aG5lc3NgIHByb3BlcnR5IGFuZCBjb3JyZXNwb25kaW5nIGBzZXRTbW9vdGhuZXNzYCBtZXRob2QuXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIGhvdyBzbW9vdGggdGhlIHNoYXBlIHJlbmRlcnMgaW4gV2ViR0wsIGJ5IGNvbnRyb2xsaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9uc1xyXG4gKiB0aGF0IHRha2UgcGxhY2UgZHVyaW5nIGNvbnN0cnVjdGlvbi4gSW5jcmVhc2UgYW5kIGRlY3JlYXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBzbW9vdGhlciwgb3IgbW9yZVxyXG4gKiBqYWdnZWQsIHNoYXBlcy5cclxuICpcclxuICogQGNsYXNzIEN1cnZlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZX0gW2N1cnZlXSAtIFRoZSBDdXJ2ZSBvYmplY3QgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgU2hhcGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgY3VydmUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGN1cnZlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIEN1cnZlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDdXJ2ZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEN1cnZlIChzY2VuZSwgeCwgeSwgY3VydmUsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdDdXJ2ZScsIGN1cnZlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS5cclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHBvaW50cyB1c2VkIHRvIGRyYXcgdGhlIGN1cnZlLiBIaWdoZXIgdmFsdWVzIGNyZWF0ZSBzbW9vdGhlciByZW5kZXJzIGF0IHRoZSBjb3N0IG9mIG1vcmUgdHJpYW5nbGVzIGJlaW5nIGRyYXduLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI19zbW9vdGhuZXNzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc21vb3RobmVzcyA9IDMyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBDdXJ2ZSBib3VuZHMgcmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI19jdXJ2ZUJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3VydmVCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VQYXRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbW9vdGhuZXNzIG9mIHRoZSBjdXJ2ZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGN1cnZlcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjc21vb3RobmVzc1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAzMlxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBzbW9vdGhuZXNzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbW9vdGhuZXNzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc21vb3RobmVzcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzbW9vdGhuZXNzIG9mIHRoZSBjdXJ2ZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGN1cnZlcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZSNzZXRTbW9vdGhuZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzbW9vdGhuZXNzIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNtb290aG5lc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZSN1cGRhdGVEYXRhXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZURhdGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2N1cnZlQm91bmRzO1xyXG4gICAgICAgIHZhciBzbW9vdGhuZXNzID0gdGhpcy5fc21vb3RobmVzcztcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSB0aGUgYm91bmRzIGluIGNhc2UgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgY2hhbmdlZFxyXG4gICAgICAgIHRoaXMuZ2VvbS5nZXRCb3VuZHMoYm91bmRzLCBzbW9vdGhuZXNzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcblxyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2VvbS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2gocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IEVhcmN1dChwYXRoKTtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Curve#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Curve} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar CurveCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX + src._curveBounds.x;\r\n        var dy = src._displayOriginY + src._curveBounds.y;\r\n    \r\n        var path = src.pathData;\r\n        var pathLength = path.length - 1;\r\n    \r\n        var px1 = path[0] - dx;\r\n        var py1 = path[1] - dy;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.moveTo(px1, py1);\r\n    \r\n        if (!src.closePath)\r\n        {\r\n            pathLength -= 2;\r\n        }\r\n    \r\n        for (var i = 2; i < pathLength; i += 2)\r\n        {\r\n            var px2 = path[i] - dx;\r\n            var py2 = path[i + 1] - dy;\r\n    \r\n            ctx.lineTo(px2, py2);\r\n        }\r\n\r\n        if (src.closePath)\r\n        {\r\n            ctx.closePath();\r\n        }\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = CurveCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUNhbnZhc1JlbmRlcmVyLmpzP2JjZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ3VydmVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblggKyBzcmMuX2N1cnZlQm91bmRzLng7XHJcbiAgICAgICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWSArIHNyYy5fY3VydmVCb3VuZHMueTtcclxuICAgIFxyXG4gICAgICAgIHZhciBwYXRoID0gc3JjLnBhdGhEYXRhO1xyXG4gICAgICAgIHZhciBwYXRoTGVuZ3RoID0gcGF0aC5sZW5ndGggLSAxO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHB4MSA9IHBhdGhbMF0gLSBkeDtcclxuICAgICAgICB2YXIgcHkxID0gcGF0aFsxXSAtIGR5O1xyXG5cclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIGN0eC5tb3ZlVG8ocHgxLCBweTEpO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKCFzcmMuY2xvc2VQYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aExlbmd0aCAtPSAyO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgcGF0aExlbmd0aDsgaSArPSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHB4MiA9IHBhdGhbaV0gLSBkeDtcclxuICAgICAgICAgICAgdmFyIHB5MiA9IHBhdGhbaSArIDFdIC0gZHk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhweDIsIHB5Mik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEN1cnZlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\");\r\n\r\n/**\r\n * Creates a new Curve Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Curve Game Object has been built into Phaser.\r\n * \r\n * The Curve Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * To render a Curve Shape you must first create a `Phaser.Curves.Curve` object, then pass it to\r\n * the Curve Shape in the constructor.\r\n * \r\n * The Curve shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#curve\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.Curves.Curve} [curve] - The Curve object to use to create the Shape.\r\n * @param {number} [fillColor] - The color the curve will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the curve will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Curve} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('curve', function (x, y, curve, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Curve(this.scene, x, y, curve, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUZhY3RvcnkuanM/MmQzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELFlBQVksbUJBQU8sQ0FBQywyRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2N1cnZlL0N1cnZlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ3VydmUgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBDdXJ2ZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBDdXJ2ZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBUbyByZW5kZXIgYSBDdXJ2ZSBTaGFwZSB5b3UgbXVzdCBmaXJzdCBjcmVhdGUgYSBgUGhhc2VyLkN1cnZlcy5DdXJ2ZWAgb2JqZWN0LCB0aGVuIHBhc3MgaXQgdG9cclxuICogdGhlIEN1cnZlIFNoYXBlIGluIHRoZSBjb25zdHJ1Y3Rvci5cclxuICogXHJcbiAqIFRoZSBDdXJ2ZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2N1cnZlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLkN1cnZlfSBbY3VydmVdIC0gVGhlIEN1cnZlIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHRoZSBTaGFwZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBjdXJ2ZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgY3VydmUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignY3VydmUnLCBmdW5jdGlvbiAoeCwgeSwgY3VydmUsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEN1cnZlKHRoaXMuc2NlbmUsIHgsIHksIGN1cnZlLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./CurveWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./CurveCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZVJlbmRlci5qcz8yOGVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMscUdBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1R0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2N1cnZlL0N1cnZlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vQ3VydmVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0N1cnZlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Curve#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Curve} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar CurveWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX + src._curveBounds.x;\r\n    var dy = src._displayOriginY + src._curveBounds.y;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = CurveWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZVdlYkdMUmVuZGVyZXIuanM/ZjMyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWtCO0FBQzlDLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvY3VydmUvQ3VydmVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL0ZpbGxQYXRoV2ViR0wnKTtcclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL1N0cm9rZVBhdGhXZWJHTCcpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ3VydmVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cclxuICAgIHNoYXBlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzaGFwZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KHNoYXBlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YICsgc3JjLl9jdXJ2ZUJvdW5kcy54O1xyXG4gICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWSArIHNyYy5fY3VydmVCb3VuZHMueTtcclxuXHJcbiAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgaWYgKHNyYy5pc0ZpbGxlZClcclxuICAgIHtcclxuICAgICAgICBGaWxsUGF0aFdlYkdMKHBpcGVsaW5lLCBjYWxjTWF0cml4LCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAge1xyXG4gICAgICAgIFN0cm9rZVBhdGhXZWJHTChwaXBlbGluZSwgc3JjLCBhbHBoYSwgZHgsIGR5KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmVXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar EllipseRender = __webpack_require__(/*! ./EllipseRender */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js\");\r\nvar GeomEllipse = __webpack_require__(/*! ../../../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Ellipse Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an ellipse shape. You can control the width and height of the ellipse.\r\n * If the width and height match it will render as a circle. If the width is less than the height,\r\n * it will look more like an egg shape.\r\n * \r\n * The Ellipse shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @class Ellipse\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [height=128] - The height of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [fillColor] - The color the ellipse will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the ellipse will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Ellipse = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        EllipseRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Ellipse (scene, x, y, width, height, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 128; }\r\n        if (height === undefined) { height = 128; }\r\n\r\n        Shape.call(this, scene, 'Ellipse', new GeomEllipse(width / 2, height / 2, width, height));\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The number of points used to draw the curve. Higher values create smoother renders at the cost of more triangles being drawn.\r\n         *\r\n         * @name Phaser.GameObjects.Ellipse#_smoothness\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._smoothness = 64;\r\n\r\n        this.setPosition(x, y);\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * The smoothness of the ellipse. The number of points used when rendering it.\r\n     * Increase this value for a smoother ellipse, at the cost of more polygons being rendered.\r\n     *\r\n     * @name Phaser.GameObjects.Ellipse#smoothness\r\n     * @type {integer}\r\n     * @default 64\r\n     * @since 3.13.0\r\n     */\r\n    smoothness: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._smoothness;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._smoothness = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the size of the ellipse by changing the underlying geometry data, rather than scaling the object.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Ellipse#setSize\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} height - The height of the ellipse.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        this.geom.setSize(width, height);\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the smoothness of the ellipse. The number of points used when rendering it.\r\n     * Increase this value for a smoother ellipse, at the cost of more polygons being rendered.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Ellipse#setSmoothness\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the smoothness to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setSmoothness: function (value)\r\n    {\r\n        this._smoothness = value;\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Ellipse#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var path = [];\r\n        var points = this.geom.getPoints(this._smoothness);\r\n\r\n        for (var i = 0; i < points.length; i++)\r\n        {\r\n            path.push(points[i].x, points[i].y);\r\n        }\r\n\r\n        path.push(points[0].x, points[0].y);\r\n\r\n        this.pathIndexes = Earcut(path);\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2UuanM/MzMzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLDZGQUFpQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBK0I7QUFDekQsWUFBWSxtQkFBTyxDQUFDLHNFQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRWFyY3V0ID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL0VhcmN1dCcpO1xyXG52YXIgRWxsaXBzZVJlbmRlciA9IHJlcXVpcmUoJy4vRWxsaXBzZVJlbmRlcicpO1xyXG52YXIgR2VvbUVsbGlwc2UgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL2VsbGlwc2UvRWxsaXBzZScpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEVsbGlwc2UgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogV2hlbiBpdCByZW5kZXJzIGl0IGRpc3BsYXlzIGFuIGVsbGlwc2Ugc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICogSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggaXQgd2lsbCByZW5kZXIgYXMgYSBjaXJjbGUuIElmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGhlaWdodCxcclxuICogaXQgd2lsbCBsb29rIG1vcmUgbGlrZSBhbiBlZ2cgc2hhcGUuXHJcbiAqIFxyXG4gKiBUaGUgRWxsaXBzZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBFbGxpcHNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS4gQW4gZWxsaXBzZSB3aXRoIGVxdWFsIHdpZHRoIGFuZCBoZWlnaHQgcmVuZGVycyBhcyBhIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuIEFuIGVsbGlwc2Ugd2l0aCBlcXVhbCB3aWR0aCBhbmQgaGVpZ2h0IHJlbmRlcnMgYXMgYSBjaXJjbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZWxsaXBzZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgZWxsaXBzZSB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBFbGxpcHNlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBFbGxpcHNlUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRWxsaXBzZSAoc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdFbGxpcHNlJywgbmV3IEdlb21FbGxpcHNlKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgd2lkdGgsIGhlaWdodCkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgdG8gZHJhdyB0aGUgY3VydmUuIEhpZ2hlciB2YWx1ZXMgY3JlYXRlIHNtb290aGVyIHJlbmRlcnMgYXQgdGhlIGNvc3Qgb2YgbW9yZSB0cmlhbmdsZXMgYmVpbmcgZHJhd24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNfc21vb3RobmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Ntb290aG5lc3MgPSA2NDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc21vb3RobmVzcyBvZiB0aGUgZWxsaXBzZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIGEgc21vb3RoZXIgZWxsaXBzZSwgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNzbW9vdGhuZXNzXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBkZWZhdWx0IDY0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIHNtb290aG5lc3M6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Ntb290aG5lc3M7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGVsbGlwc2UgYnkgY2hhbmdpbmcgdGhlIHVuZGVybHlpbmcgZ2VvbWV0cnkgZGF0YSwgcmF0aGVyIHRoYW4gc2NhbGluZyB0aGUgb2JqZWN0LlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkVsbGlwc2Ujc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20uc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNtb290aG5lc3Mgb2YgdGhlIGVsbGlwc2UuIFRoZSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgd2hlbiByZW5kZXJpbmcgaXQuXHJcbiAgICAgKiBJbmNyZWFzZSB0aGlzIHZhbHVlIGZvciBhIHNtb290aGVyIGVsbGlwc2UsIGF0IHRoZSBjb3N0IG9mIG1vcmUgcG9seWdvbnMgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNzZXRTbW9vdGhuZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzbW9vdGhuZXNzIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNtb290aG5lc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGF0aCA9IFtdO1xyXG4gICAgICAgIHZhciBwb2ludHMgPSB0aGlzLmdlb20uZ2V0UG9pbnRzKHRoaXMuX3Ntb290aG5lc3MpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGgucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aEluZGV4ZXMgPSBFYXJjdXQocGF0aCk7XHJcbiAgICAgICAgdGhpcy5wYXRoRGF0YSA9IHBhdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Ellipse} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar EllipseCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        var path = src.pathData;\r\n        var pathLength = path.length - 1;\r\n    \r\n        var px1 = path[0] - dx;\r\n        var py1 = path[1] - dy;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.moveTo(px1, py1);\r\n    \r\n        if (!src.closePath)\r\n        {\r\n            pathLength -= 2;\r\n        }\r\n    \r\n        for (var i = 2; i < pathLength; i += 2)\r\n        {\r\n            var px2 = path[i] - dx;\r\n            var py2 = path[i + 1] - dy;\r\n    \r\n            ctx.lineTo(px2, py2);\r\n        }\r\n\r\n        ctx.closePath();\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = EllipseCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VDYW52YXNSZW5kZXJlci5qcz9iMjAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRWxsaXBzZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Ellipse Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Ellipse Game Object has been built into Phaser.\r\n * \r\n * The Ellipse Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an ellipse shape. You can control the width and height of the ellipse.\r\n * If the width and height match it will render as a circle. If the width is less than the height,\r\n * it will look more like an egg shape.\r\n * \r\n * The Ellipse shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#ellipse\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [height=128] - The height of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [fillColor] - The color the ellipse will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the ellipse will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Ellipse} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('ellipse', function (x, y, width, height, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Ellipse(this.scene, x, y, width, height, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VGYWN0b3J5LmpzP2JiNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxpRkFBVztBQUNqQyx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVsbGlwc2UgPSByZXF1aXJlKCcuL0VsbGlwc2UnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEVsbGlwc2UgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBFbGxpcHNlIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBcclxuICogVGhlIEVsbGlwc2UgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogV2hlbiBpdCByZW5kZXJzIGl0IGRpc3BsYXlzIGFuIGVsbGlwc2Ugc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICogSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggaXQgd2lsbCByZW5kZXIgYXMgYSBjaXJjbGUuIElmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGhlaWdodCxcclxuICogaXQgd2lsbCBsb29rIG1vcmUgbGlrZSBhbiBlZ2cgc2hhcGUuXHJcbiAqIFxyXG4gKiBUaGUgRWxsaXBzZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2VsbGlwc2VcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuIEFuIGVsbGlwc2Ugd2l0aCBlcXVhbCB3aWR0aCBhbmQgaGVpZ2h0IHJlbmRlcnMgYXMgYSBjaXJjbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLiBBbiBlbGxpcHNlIHdpdGggZXF1YWwgd2lkdGggYW5kIGhlaWdodCByZW5kZXJzIGFzIGEgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGVsbGlwc2Ugd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGVsbGlwc2Ugd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdlbGxpcHNlJywgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEVsbGlwc2UodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./EllipseWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./EllipseCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VSZW5kZXIuanM/M2UxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9FbGxpcHNlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9FbGxpcHNlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Ellipse} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar EllipseWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = EllipseWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VXZWJHTFJlbmRlcmVyLmpzP2EwMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2VsbGlwc2UvRWxsaXBzZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRWxsaXBzZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/Grid.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/grid/Grid.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GridRender = __webpack_require__(/*! ./GridRender */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Grid Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * A Grid Shape allows you to display a grid in your game, where you can control the size of the\r\n * grid as well as the width and height of the grid cells. You can set a fill color for each grid\r\n * cell as well as an alternate fill color. When the alternate fill color is set then the grid\r\n * cells will alternate the fill colors as they render, creating a chess-board effect. You can\r\n * also optionally have an outline fill color. If set, this draws lines between the grid cells\r\n * in the given color. If you specify an outline color with an alpha of zero, then it will draw\r\n * the cells spaced out, but without the lines between them.\r\n *\r\n * @class Grid\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the grid.\r\n * @param {number} [height=128] - The height of the grid.\r\n * @param {number} [cellWidth=32] - The width of one cell in the grid.\r\n * @param {number} [cellHeight=32] - The height of one cell in the grid.\r\n * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n * @param {number} [outlineFillColor] - The color of the lines between the grid cells. See the `setOutline` method.\r\n * @param {number} [outlineFillAlpha] - The alpha of the lines between the grid cells.\r\n */\r\nvar Grid = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        GridRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Grid (scene, x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 128; }\r\n        if (height === undefined) { height = 128; }\r\n        if (cellWidth === undefined) { cellWidth = 32; }\r\n        if (cellHeight === undefined) { cellHeight = 32; }\r\n\r\n        Shape.call(this, scene, 'Grid', null);\r\n\r\n        /**\r\n         * The width of each grid cell.\r\n         * Must be a positive value.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#cellWidth\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.cellWidth = cellWidth;\r\n\r\n        /**\r\n         * The height of each grid cell.\r\n         * Must be a positive value.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#cellHeight\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.cellHeight = cellHeight;\r\n\r\n        /**\r\n         * Will the grid render its cells in the `fillColor`?\r\n         *\r\n         * @name Phaser.GameObjects.Grid#showCells\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.showCells = true;\r\n\r\n        /**\r\n         * The color of the lines between each grid cell.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#outlineFillColor\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.outlineFillColor = 0;\r\n\r\n        /**\r\n         * The alpha value for the color of the lines between each grid cell.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#outlineFillAlpha\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.outlineFillAlpha = 0;\r\n\r\n        /**\r\n         * Will the grid display the lines between each cell when it renders?\r\n         *\r\n         * @name Phaser.GameObjects.Grid#showOutline\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.showOutline = true;\r\n\r\n        /**\r\n         * Will the grid render the alternating cells in the `altFillColor`?\r\n         *\r\n         * @name Phaser.GameObjects.Grid#showAltCells\r\n         * @type {boolean}\r\n         * @since 3.13.0\r\n         */\r\n        this.showAltCells = false;\r\n\r\n        /**\r\n         * The color the alternating grid cells will be filled with, i.e. 0xff0000 for red.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#altFillColor\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.altFillColor;\r\n\r\n        /**\r\n         * The alpha the alternating grid cells will be filled with.\r\n         * You can also set the alpha of the overall Shape using its `alpha` property.\r\n         *\r\n         * @name Phaser.GameObjects.Grid#altFillAlpha\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.altFillAlpha;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        if (outlineFillColor !== undefined)\r\n        {\r\n            this.setOutlineStyle(outlineFillColor, outlineFillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the fill color and alpha level the grid cells will use when rendering.\r\n     * \r\n     * If this method is called with no values then the grid cells will not be rendered, \r\n     * however the grid lines and alternating cells may still be.\r\n     * \r\n     * Also see the `setOutlineStyle` and `setAltFillStyle` methods.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Grid#setFillStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n     * @param {number} [fillAlpha=1] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFillStyle: function (fillColor, fillAlpha)\r\n    {\r\n        if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n        if (fillColor === undefined)\r\n        {\r\n            this.showCells = false;\r\n        }\r\n        else\r\n        {\r\n            this.fillColor = fillColor;\r\n            this.fillAlpha = fillAlpha;\r\n            this.showCells = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the fill color and alpha level that the alternating grid cells will use.\r\n     * \r\n     * If this method is called with no values then alternating grid cells will not be rendered in a different color.\r\n     * \r\n     * Also see the `setOutlineStyle` and `setFillStyle` methods.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Grid#setAltFillStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [fillColor] - The color the alternating grid cells will be filled with, i.e. 0xff0000 for red.\r\n     * @param {number} [fillAlpha=1] - The alpha the alternating grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setAltFillStyle: function (fillColor, fillAlpha)\r\n    {\r\n        if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n        if (fillColor === undefined)\r\n        {\r\n            this.showAltCells = false;\r\n        }\r\n        else\r\n        {\r\n            this.altFillColor = fillColor;\r\n            this.altFillAlpha = fillAlpha;\r\n            this.showAltCells = true;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the fill color and alpha level that the lines between each grid cell will use.\r\n     * \r\n     * If this method is called with no values then the grid lines will not be rendered at all, however\r\n     * the cells themselves may still be if they have colors set.\r\n     * \r\n     * Also see the `setFillStyle` and `setAltFillStyle` methods.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Grid#setOutlineStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [fillColor] - The color the lines between the grid cells will be filled with, i.e. 0xff0000 for red.\r\n     * @param {number} [fillAlpha=1] - The alpha the lines between the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setOutlineStyle: function (fillColor, fillAlpha)\r\n    {\r\n        if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n        if (fillColor === undefined)\r\n        {\r\n            this.showOutline = false;\r\n        }\r\n        else\r\n        {\r\n            this.outlineFillColor = fillColor;\r\n            this.outlineFillAlpha = fillAlpha;\r\n            this.showOutline = true;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Grid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWQuanM/ODBmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsYUFBYTtBQUMvQyxtQ0FBbUMsY0FBYztBQUNqRCxzQ0FBc0MsZ0JBQWdCO0FBQ3RELHVDQUF1QyxpQkFBaUI7O0FBRXhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxudmFyIEdyaWRSZW5kZXIgPSByZXF1aXJlKCcuL0dyaWRSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBHcmlkIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIG9ubHkgZmlsbCBjb2xvcnMgYW5kIGNhbm5vdCBiZSBzdHJva2VkLlxyXG4gKiBcclxuICogQSBHcmlkIFNoYXBlIGFsbG93cyB5b3UgdG8gZGlzcGxheSBhIGdyaWQgaW4geW91ciBnYW1lLCB3aGVyZSB5b3UgY2FuIGNvbnRyb2wgdGhlIHNpemUgb2YgdGhlXHJcbiAqIGdyaWQgYXMgd2VsbCBhcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ3JpZCBjZWxscy4gWW91IGNhbiBzZXQgYSBmaWxsIGNvbG9yIGZvciBlYWNoIGdyaWRcclxuICogY2VsbCBhcyB3ZWxsIGFzIGFuIGFsdGVybmF0ZSBmaWxsIGNvbG9yLiBXaGVuIHRoZSBhbHRlcm5hdGUgZmlsbCBjb2xvciBpcyBzZXQgdGhlbiB0aGUgZ3JpZFxyXG4gKiBjZWxscyB3aWxsIGFsdGVybmF0ZSB0aGUgZmlsbCBjb2xvcnMgYXMgdGhleSByZW5kZXIsIGNyZWF0aW5nIGEgY2hlc3MtYm9hcmQgZWZmZWN0LiBZb3UgY2FuXHJcbiAqIGFsc28gb3B0aW9uYWxseSBoYXZlIGFuIG91dGxpbmUgZmlsbCBjb2xvci4gSWYgc2V0LCB0aGlzIGRyYXdzIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHNcclxuICogaW4gdGhlIGdpdmVuIGNvbG9yLiBJZiB5b3Ugc3BlY2lmeSBhbiBvdXRsaW5lIGNvbG9yIHdpdGggYW4gYWxwaGEgb2YgemVybywgdGhlbiBpdCB3aWxsIGRyYXdcclxuICogdGhlIGNlbGxzIHNwYWNlZCBvdXQsIGJ1dCB3aXRob3V0IHRoZSBsaW5lcyBiZXR3ZWVuIHRoZW0uXHJcbiAqXHJcbiAqIEBjbGFzcyBHcmlkXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY2VsbFdpZHRoPTMyXSAtIFRoZSB3aWR0aCBvZiBvbmUgY2VsbCBpbiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjZWxsSGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2Ygb25lIGNlbGwgaW4gdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvdXRsaW5lRmlsbENvbG9yXSAtIFRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiB0aGUgZ3JpZCBjZWxscy4gU2VlIHRoZSBgc2V0T3V0bGluZWAgbWV0aG9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQWxwaGFdIC0gVGhlIGFscGhhIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKi9cclxudmFyIEdyaWQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIEdyaWRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmlkIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VsbFdpZHRoLCBjZWxsSGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgb3V0bGluZUZpbGxDb2xvciwgb3V0bGluZUZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gMTI4OyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDEyODsgfVxyXG4gICAgICAgIGlmIChjZWxsV2lkdGggPT09IHVuZGVmaW5lZCkgeyBjZWxsV2lkdGggPSAzMjsgfVxyXG4gICAgICAgIGlmIChjZWxsSGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgY2VsbEhlaWdodCA9IDMyOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdHcmlkJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNjZWxsV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNlbGxXaWR0aCA9IGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNjZWxsSGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jZWxsSGVpZ2h0ID0gY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lsbCB0aGUgZ3JpZCByZW5kZXIgaXRzIGNlbGxzIGluIHRoZSBgZmlsbENvbG9yYD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3Nob3dDZWxsc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dDZWxscyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI291dGxpbmVGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm91dGxpbmVGaWxsQ29sb3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgZm9yIHRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI291dGxpbmVGaWxsQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm91dGxpbmVGaWxsQWxwaGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaWxsIHRoZSBncmlkIGRpc3BsYXkgdGhlIGxpbmVzIGJldHdlZW4gZWFjaCBjZWxsIHdoZW4gaXQgcmVuZGVycz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3Nob3dPdXRsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd091dGxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaWxsIHRoZSBncmlkIHJlbmRlciB0aGUgYWx0ZXJuYXRpbmcgY2VsbHMgaW4gdGhlIGBhbHRGaWxsQ29sb3JgP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2hvd0FsdENlbGxzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd0FsdENlbGxzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNhbHRGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEZpbGxDb2xvcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFscGhhIHRoZSBhbHRlcm5hdGluZyBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGguXHJcbiAgICAgICAgICogWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNhbHRGaWxsQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEZpbGxBbHBoYTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXRsaW5lRmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldE91dGxpbmVTdHlsZShvdXRsaW5lRmlsbENvbG9yLCBvdXRsaW5lRmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoZSBncmlkIGNlbGxzIHdpbGwgdXNlIHdoZW4gcmVuZGVyaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBubyB2YWx1ZXMgdGhlbiB0aGUgZ3JpZCBjZWxscyB3aWxsIG5vdCBiZSByZW5kZXJlZCwgXHJcbiAgICAgKiBob3dldmVyIHRoZSBncmlkIGxpbmVzIGFuZCBhbHRlcm5hdGluZyBjZWxscyBtYXkgc3RpbGwgYmUuXHJcbiAgICAgKiBcclxuICAgICAqIEFsc28gc2VlIHRoZSBgc2V0T3V0bGluZVN0eWxlYCBhbmQgYHNldEFsdEZpbGxTdHlsZWAgbWV0aG9kcy5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2V0RmlsbFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYT0xXSAtIFRoZSBhbHBoYSB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsU3R5bGU6IGZ1bmN0aW9uIChmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsbEFscGhhID09PSB1bmRlZmluZWQpIHsgZmlsbEFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDZWxscyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NlbGxzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoYXQgdGhlIGFsdGVybmF0aW5nIGdyaWQgY2VsbHMgd2lsbCB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIG5vIHZhbHVlcyB0aGVuIGFsdGVybmF0aW5nIGdyaWQgY2VsbHMgd2lsbCBub3QgYmUgcmVuZGVyZWQgaW4gYSBkaWZmZXJlbnQgY29sb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEFsc28gc2VlIHRoZSBgc2V0T3V0bGluZVN0eWxlYCBhbmQgYHNldEZpbGxTdHlsZWAgbWV0aG9kcy5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2V0QWx0RmlsbFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYT0xXSAtIFRoZSBhbHBoYSB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRBbHRGaWxsU3R5bGU6IGZ1bmN0aW9uIChmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsbEFscGhhID09PSB1bmRlZmluZWQpIHsgZmlsbEFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBbHRDZWxscyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFsdEZpbGxDb2xvciA9IGZpbGxDb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5hbHRGaWxsQWxwaGEgPSBmaWxsQWxwaGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsdENlbGxzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoYXQgdGhlIGxpbmVzIGJldHdlZW4gZWFjaCBncmlkIGNlbGwgd2lsbCB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIG5vIHZhbHVlcyB0aGVuIHRoZSBncmlkIGxpbmVzIHdpbGwgbm90IGJlIHJlbmRlcmVkIGF0IGFsbCwgaG93ZXZlclxyXG4gICAgICogdGhlIGNlbGxzIHRoZW1zZWx2ZXMgbWF5IHN0aWxsIGJlIGlmIHRoZXkgaGF2ZSBjb2xvcnMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbHNvIHNlZSB0aGUgYHNldEZpbGxTdHlsZWAgYW5kIGBzZXRBbHRGaWxsU3R5bGVgIG1ldGhvZHMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3NldE91dGxpbmVTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHMgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGE9MV0gLSBUaGUgYWxwaGEgdGhlIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHMgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0T3V0bGluZVN0eWxlOiBmdW5jdGlvbiAoZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZpbGxBbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGZpbGxBbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0bGluZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm91dGxpbmVGaWxsQ29sb3IgPSBmaWxsQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMub3V0bGluZUZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0bGluZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmlkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Grid#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Grid} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GridCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = -src._displayOriginX;\r\n        var dy = -src._displayOriginY;\r\n\r\n        var alpha = camera.alpha * src.alpha;\r\n\r\n        //  Work out the grid size\r\n\r\n        var width = src.width;\r\n        var height = src.height;\r\n\r\n        var cellWidth = src.cellWidth;\r\n        var cellHeight = src.cellHeight;\r\n\r\n        var gridWidth = Math.ceil(width / cellWidth);\r\n        var gridHeight = Math.ceil(height / cellHeight);\r\n\r\n        var cellWidthA = cellWidth;\r\n        var cellHeightA = cellHeight;\r\n\r\n        var cellWidthB = cellWidth - ((gridWidth * cellWidth) - width);\r\n        var cellHeightB = cellHeight - ((gridHeight * cellHeight) - height);\r\n\r\n        var showCells = src.showCells;\r\n        var showAltCells = src.showAltCells;\r\n        var showOutline = src.showOutline;\r\n\r\n        var x = 0;\r\n        var y = 0;\r\n        var r = 0;\r\n        var cw = 0;\r\n        var ch = 0;\r\n\r\n        if (showOutline)\r\n        {\r\n            //  To make room for the grid lines (in case alpha < 1)\r\n            cellWidthA--;\r\n            cellHeightA--;\r\n\r\n            if (cellWidthB === cellWidth)\r\n            {\r\n                cellWidthB--;\r\n            }\r\n\r\n            if (cellHeightB === cellHeight)\r\n            {\r\n                cellHeightB--;\r\n            }\r\n        }\r\n\r\n        if (showCells && src.fillAlpha > 0)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            for (y = 0; y < gridHeight; y++)\r\n            {\r\n                if (showAltCells)\r\n                {\r\n                    r = y % 2;\r\n                }\r\n\r\n                for (x = 0; x < gridWidth; x++)\r\n                {\r\n                    if (showAltCells && r)\r\n                    {\r\n                        r = 0;\r\n                        continue;\r\n                    }\r\n\r\n                    r++;\r\n\r\n                    cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n                    ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n                    ctx.fillRect(\r\n                        dx + x * cellWidth,\r\n                        dy + y * cellHeight,\r\n                        cw,\r\n                        ch\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (showAltCells && src.altFillAlpha > 0)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.altFillColor, src.altFillAlpha * alpha);\r\n\r\n            for (y = 0; y < gridHeight; y++)\r\n            {\r\n                if (showAltCells)\r\n                {\r\n                    r = y % 2;\r\n                }\r\n\r\n                for (x = 0; x < gridWidth; x++)\r\n                {\r\n                    if (showAltCells && !r)\r\n                    {\r\n                        r = 1;\r\n                        continue;\r\n                    }\r\n\r\n                    r = 0;\r\n\r\n                    cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n                    ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n                    ctx.fillRect(\r\n                        dx + x * cellWidth,\r\n                        dy + y * cellHeight,\r\n                        cw,\r\n                        ch\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (showOutline && src.outlineFillAlpha > 0)\r\n        {\r\n            LineStyleCanvas(ctx, src, src.outlineFillColor, src.outlineFillAlpha * alpha);\r\n\r\n            for (x = 1; x < gridWidth; x++)\r\n            {\r\n                var x1 = x * cellWidth;\r\n\r\n                ctx.beginPath();\r\n\r\n                ctx.moveTo(x1 + dx, dy);\r\n                ctx.lineTo(x1 + dx, height + dy);\r\n\r\n                ctx.stroke();\r\n            }\r\n\r\n            for (y = 1; y < gridHeight; y++)\r\n            {\r\n                var y1 = y * cellHeight;\r\n\r\n                ctx.beginPath();\r\n\r\n                ctx.moveTo(dx, y1 + dy);\r\n                ctx.lineTo(dx + width, y1 + dy);\r\n\r\n                ctx.stroke();\r\n            }\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = GridCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRDYW52YXNSZW5kZXJlci5qcz9mZmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixlQUFlO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JpZH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEdyaWRDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IC1zcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHZhciBkeSA9IC1zcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgICAgIC8vICBXb3JrIG91dCB0aGUgZ3JpZCBzaXplXHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IHNyYy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gc3JjLmhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGNlbGxXaWR0aCA9IHNyYy5jZWxsV2lkdGg7XHJcbiAgICAgICAgdmFyIGNlbGxIZWlnaHQgPSBzcmMuY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGdyaWRXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAvIGNlbGxXaWR0aCk7XHJcbiAgICAgICAgdmFyIGdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gY2VsbEhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBjZWxsV2lkdGhBID0gY2VsbFdpZHRoO1xyXG4gICAgICAgIHZhciBjZWxsSGVpZ2h0QSA9IGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBjZWxsV2lkdGhCID0gY2VsbFdpZHRoIC0gKChncmlkV2lkdGggKiBjZWxsV2lkdGgpIC0gd2lkdGgpO1xyXG4gICAgICAgIHZhciBjZWxsSGVpZ2h0QiA9IGNlbGxIZWlnaHQgLSAoKGdyaWRIZWlnaHQgKiBjZWxsSGVpZ2h0KSAtIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBzaG93Q2VsbHMgPSBzcmMuc2hvd0NlbGxzO1xyXG4gICAgICAgIHZhciBzaG93QWx0Q2VsbHMgPSBzcmMuc2hvd0FsdENlbGxzO1xyXG4gICAgICAgIHZhciBzaG93T3V0bGluZSA9IHNyYy5zaG93T3V0bGluZTtcclxuXHJcbiAgICAgICAgdmFyIHggPSAwO1xyXG4gICAgICAgIHZhciB5ID0gMDtcclxuICAgICAgICB2YXIgciA9IDA7XHJcbiAgICAgICAgdmFyIGN3ID0gMDtcclxuICAgICAgICB2YXIgY2ggPSAwO1xyXG5cclxuICAgICAgICBpZiAoc2hvd091dGxpbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVG8gbWFrZSByb29tIGZvciB0aGUgZ3JpZCBsaW5lcyAoaW4gY2FzZSBhbHBoYSA8IDEpXHJcbiAgICAgICAgICAgIGNlbGxXaWR0aEEtLTtcclxuICAgICAgICAgICAgY2VsbEhlaWdodEEtLTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjZWxsV2lkdGhCID09PSBjZWxsV2lkdGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNlbGxXaWR0aEItLTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNlbGxIZWlnaHRCID09PSBjZWxsSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjZWxsSGVpZ2h0Qi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvd0NlbGxzICYmIHNyYy5maWxsQWxwaGEgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBncmlkSGVpZ2h0OyB5KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBncmlkV2lkdGg7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmIHIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoID0gKHkgPCBncmlkSGVpZ2h0IC0gMSkgPyBjZWxsSGVpZ2h0QSA6IGNlbGxIZWlnaHRCO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICsgeCAqIGNlbGxXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKyB5ICogY2VsbEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3dBbHRDZWxscyAmJiBzcmMuYWx0RmlsbEFscGhhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmFsdEZpbGxDb2xvciwgc3JjLmFsdEZpbGxBbHBoYSAqIGFscGhhKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBncmlkSGVpZ2h0OyB5KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBncmlkV2lkdGg7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmICFyKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgciA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoID0gKHkgPCBncmlkSGVpZ2h0IC0gMSkgPyBjZWxsSGVpZ2h0QSA6IGNlbGxIZWlnaHRCO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICsgeCAqIGNlbGxXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKyB5ICogY2VsbEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3dPdXRsaW5lICYmIHNyYy5vdXRsaW5lRmlsbEFscGhhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLm91dGxpbmVGaWxsQ29sb3IsIHNyYy5vdXRsaW5lRmlsbEFscGhhICogYWxwaGEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh4ID0gMTsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogY2VsbFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHgxICsgZHgsIGR5KTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeDEgKyBkeCwgaGVpZ2h0ICsgZHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh5ID0gMTsgeSA8IGdyaWRIZWlnaHQ7IHkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHkxID0geSAqIGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oZHgsIHkxICsgZHkpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhkeCArIHdpZHRoLCB5MSArIGR5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyaWRDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Grid = __webpack_require__(/*! ./Grid */ \"./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\");\r\n\r\n/**\r\n * Creates a new Grid Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Grid Game Object has been built into Phaser.\r\n * \r\n * The Grid Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * A Grid Shape allows you to display a grid in your game, where you can control the size of the\r\n * grid as well as the width and height of the grid cells. You can set a fill color for each grid\r\n * cell as well as an alternate fill color. When the alternate fill color is set then the grid\r\n * cells will alternate the fill colors as they render, creating a chess-board effect. You can\r\n * also optionally have an outline fill color. If set, this draws lines between the grid cells\r\n * in the given color. If you specify an outline color with an alpha of zero, then it will draw\r\n * the cells spaced out, but without the lines between them.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#grid\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the grid.\r\n * @param {number} [height=128] - The height of the grid.\r\n * @param {number} [cellWidth=32] - The width of one cell in the grid.\r\n * @param {number} [cellHeight=32] - The height of one cell in the grid.\r\n * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n * @param {number} [outlineFillColor] - The color of the lines between the grid cells.\r\n * @param {number} [outlineFillAlpha] - The alpha of the lines between the grid cells.\r\n *\r\n * @return {Phaser.GameObjects.Grid} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('grid', function (x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha)\r\n{\r\n    return this.displayList.add(new Grid(this.scene, x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRGYWN0b3J5LmpzP2IxMGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsd0VBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgR3JpZCA9IHJlcXVpcmUoJy4vR3JpZCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgR3JpZCBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdyaWQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgR3JpZCBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEEgR3JpZCBTaGFwZSBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBncmlkIGluIHlvdXIgZ2FtZSwgd2hlcmUgeW91IGNhbiBjb250cm9sIHRoZSBzaXplIG9mIHRoZVxyXG4gKiBncmlkIGFzIHdlbGwgYXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGdyaWQgY2VsbHMuIFlvdSBjYW4gc2V0IGEgZmlsbCBjb2xvciBmb3IgZWFjaCBncmlkXHJcbiAqIGNlbGwgYXMgd2VsbCBhcyBhbiBhbHRlcm5hdGUgZmlsbCBjb2xvci4gV2hlbiB0aGUgYWx0ZXJuYXRlIGZpbGwgY29sb3IgaXMgc2V0IHRoZW4gdGhlIGdyaWRcclxuICogY2VsbHMgd2lsbCBhbHRlcm5hdGUgdGhlIGZpbGwgY29sb3JzIGFzIHRoZXkgcmVuZGVyLCBjcmVhdGluZyBhIGNoZXNzLWJvYXJkIGVmZmVjdC4gWW91IGNhblxyXG4gKiBhbHNvIG9wdGlvbmFsbHkgaGF2ZSBhbiBvdXRsaW5lIGZpbGwgY29sb3IuIElmIHNldCwgdGhpcyBkcmF3cyBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzXHJcbiAqIGluIHRoZSBnaXZlbiBjb2xvci4gSWYgeW91IHNwZWNpZnkgYW4gb3V0bGluZSBjb2xvciB3aXRoIGFuIGFscGhhIG9mIHplcm8sIHRoZW4gaXQgd2lsbCBkcmF3XHJcbiAqIHRoZSBjZWxscyBzcGFjZWQgb3V0LCBidXQgd2l0aG91dCB0aGUgbGluZXMgYmV0d2VlbiB0aGVtLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNncmlkXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0xMjhdIC0gVGhlIHdpZHRoIG9mIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xMjhdIC0gVGhlIGhlaWdodCBvZiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjZWxsV2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIG9uZSBjZWxsIGluIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NlbGxIZWlnaHQ9MzJdIC0gVGhlIGhlaWdodCBvZiBvbmUgY2VsbCBpbiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQ29sb3JdIC0gVGhlIGNvbG9yIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQWxwaGFdIC0gVGhlIGFscGhhIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JpZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignZ3JpZCcsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjZWxsV2lkdGgsIGNlbGxIZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBvdXRsaW5lRmlsbENvbG9yLCBvdXRsaW5lRmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEdyaWQodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VsbFdpZHRoLCBjZWxsSGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgb3V0bGluZUZpbGxDb2xvciwgb3V0bGluZUZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./GridWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./GridCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRSZW5kZXIuanM/MTcxNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9HcmlkV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9HcmlkQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Grid#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Grid} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GridWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    calcMatrix.translate(-src._displayOriginX, -src._displayOriginY);\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    //  Work out the grid size\r\n\r\n    var width = src.width;\r\n    var height = src.height;\r\n\r\n    var cellWidth = src.cellWidth;\r\n    var cellHeight = src.cellHeight;\r\n\r\n    var gridWidth = Math.ceil(width / cellWidth);\r\n    var gridHeight = Math.ceil(height / cellHeight);\r\n\r\n    var cellWidthA = cellWidth;\r\n    var cellHeightA = cellHeight;\r\n\r\n    var cellWidthB = cellWidth - ((gridWidth * cellWidth) - width);\r\n    var cellHeightB = cellHeight - ((gridHeight * cellHeight) - height);\r\n\r\n    var fillTint;\r\n    var fillTintColor;\r\n\r\n    var showCells = src.showCells;\r\n    var showAltCells = src.showAltCells;\r\n    var showOutline = src.showOutline;\r\n\r\n    var x = 0;\r\n    var y = 0;\r\n    var r = 0;\r\n    var cw = 0;\r\n    var ch = 0;\r\n\r\n    if (showOutline)\r\n    {\r\n        //  To make room for the grid lines (in case alpha < 1)\r\n        cellWidthA--;\r\n        cellHeightA--;\r\n\r\n        if (cellWidthB === cellWidth)\r\n        {\r\n            cellWidthB--;\r\n        }\r\n\r\n        if (cellHeightB === cellHeight)\r\n        {\r\n            cellHeightB--;\r\n        }\r\n    }\r\n\r\n    if (showCells && src.fillAlpha > 0)\r\n    {\r\n        fillTint = pipeline.fillTint;\r\n        fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n    \r\n        fillTint.TL = fillTintColor;\r\n        fillTint.TR = fillTintColor;\r\n        fillTint.BL = fillTintColor;\r\n        fillTint.BR = fillTintColor;\r\n\r\n        for (y = 0; y < gridHeight; y++)\r\n        {\r\n            if (showAltCells)\r\n            {\r\n                r = y % 2;\r\n            }\r\n\r\n            for (x = 0; x < gridWidth; x++)\r\n            {\r\n                if (showAltCells && r)\r\n                {\r\n                    r = 0;\r\n                    continue;\r\n                }\r\n\r\n                r++;\r\n\r\n                cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n                ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n                pipeline.setTexture2D();\r\n\r\n                pipeline.batchFillRect(\r\n                    x * cellWidth,\r\n                    y * cellHeight,\r\n                    cw,\r\n                    ch\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    if (showAltCells && src.altFillAlpha > 0)\r\n    {\r\n        fillTint = pipeline.fillTint;\r\n        fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.altFillColor, src.altFillAlpha * alpha);\r\n    \r\n        fillTint.TL = fillTintColor;\r\n        fillTint.TR = fillTintColor;\r\n        fillTint.BL = fillTintColor;\r\n        fillTint.BR = fillTintColor;\r\n\r\n        for (y = 0; y < gridHeight; y++)\r\n        {\r\n            if (showAltCells)\r\n            {\r\n                r = y % 2;\r\n            }\r\n\r\n            for (x = 0; x < gridWidth; x++)\r\n            {\r\n                if (showAltCells && !r)\r\n                {\r\n                    r = 1;\r\n                    continue;\r\n                }\r\n\r\n                r = 0;\r\n\r\n                cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n                ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n                pipeline.setTexture2D();\r\n\r\n                pipeline.batchFillRect(\r\n                    x * cellWidth,\r\n                    y * cellHeight,\r\n                    cw,\r\n                    ch\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    if (showOutline && src.outlineFillAlpha > 0)\r\n    {\r\n        var strokeTint = pipeline.strokeTint;\r\n        var color = Utils.getTintAppendFloatAlphaAndSwap(src.outlineFillColor, src.outlineFillAlpha * alpha);\r\n\r\n        strokeTint.TL = color;\r\n        strokeTint.TR = color;\r\n        strokeTint.BL = color;\r\n        strokeTint.BR = color;\r\n\r\n        for (x = 1; x < gridWidth; x++)\r\n        {\r\n            var x1 = x * cellWidth;\r\n\r\n            pipeline.setTexture2D();\r\n\r\n            pipeline.batchLine(x1, 0, x1, height, 1, 1, 1, 0, false);\r\n        }\r\n\r\n        for (y = 1; y < gridHeight; y++)\r\n        {\r\n            var y1 = y * cellHeight;\r\n\r\n            pipeline.setTexture2D();\r\n\r\n            pipeline.batchLine(0, y1, width, y1, 1, 1, 1, 0, false);\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = GridWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRXZWJHTFJlbmRlcmVyLmpzP2M3NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZUFBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZFdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmlkfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgR3JpZFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIGNhbGNNYXRyaXgudHJhbnNsYXRlKC1zcmMuX2Rpc3BsYXlPcmlnaW5YLCAtc3JjLl9kaXNwbGF5T3JpZ2luWSk7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIC8vICBXb3JrIG91dCB0aGUgZ3JpZCBzaXplXHJcblxyXG4gICAgdmFyIHdpZHRoID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIGNlbGxXaWR0aCA9IHNyYy5jZWxsV2lkdGg7XHJcbiAgICB2YXIgY2VsbEhlaWdodCA9IHNyYy5jZWxsSGVpZ2h0O1xyXG5cclxuICAgIHZhciBncmlkV2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIGdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gY2VsbEhlaWdodCk7XHJcblxyXG4gICAgdmFyIGNlbGxXaWR0aEEgPSBjZWxsV2lkdGg7XHJcbiAgICB2YXIgY2VsbEhlaWdodEEgPSBjZWxsSGVpZ2h0O1xyXG5cclxuICAgIHZhciBjZWxsV2lkdGhCID0gY2VsbFdpZHRoIC0gKChncmlkV2lkdGggKiBjZWxsV2lkdGgpIC0gd2lkdGgpO1xyXG4gICAgdmFyIGNlbGxIZWlnaHRCID0gY2VsbEhlaWdodCAtICgoZ3JpZEhlaWdodCAqIGNlbGxIZWlnaHQpIC0gaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgZmlsbFRpbnQ7XHJcbiAgICB2YXIgZmlsbFRpbnRDb2xvcjtcclxuXHJcbiAgICB2YXIgc2hvd0NlbGxzID0gc3JjLnNob3dDZWxscztcclxuICAgIHZhciBzaG93QWx0Q2VsbHMgPSBzcmMuc2hvd0FsdENlbGxzO1xyXG4gICAgdmFyIHNob3dPdXRsaW5lID0gc3JjLnNob3dPdXRsaW5lO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuICAgIHZhciByID0gMDtcclxuICAgIHZhciBjdyA9IDA7XHJcbiAgICB2YXIgY2ggPSAwO1xyXG5cclxuICAgIGlmIChzaG93T3V0bGluZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgVG8gbWFrZSByb29tIGZvciB0aGUgZ3JpZCBsaW5lcyAoaW4gY2FzZSBhbHBoYSA8IDEpXHJcbiAgICAgICAgY2VsbFdpZHRoQS0tO1xyXG4gICAgICAgIGNlbGxIZWlnaHRBLS07XHJcblxyXG4gICAgICAgIGlmIChjZWxsV2lkdGhCID09PSBjZWxsV2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjZWxsV2lkdGhCLS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2VsbEhlaWdodEIgPT09IGNlbGxIZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjZWxsSGVpZ2h0Qi0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2hvd0NlbGxzICYmIHNyYy5maWxsQWxwaGEgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIGZpbGxUaW50ID0gcGlwZWxpbmUuZmlsbFRpbnQ7XHJcbiAgICAgICAgZmlsbFRpbnRDb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbENvbG9yLCBzcmMuZmlsbEFscGhhICogYWxwaGEpO1xyXG4gICAgXHJcbiAgICAgICAgZmlsbFRpbnQuVEwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQlIgPSBmaWxsVGludENvbG9yO1xyXG5cclxuICAgICAgICBmb3IgKHkgPSAwOyB5IDwgZ3JpZEhlaWdodDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHNob3dBbHRDZWxscylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgZ3JpZFdpZHRoOyB4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMgJiYgcilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByKys7XHJcblxyXG4gICAgICAgICAgICAgICAgY3cgPSAoeCA8IGdyaWRXaWR0aCAtIDEpID8gY2VsbFdpZHRoQSA6IGNlbGxXaWR0aEI7XHJcbiAgICAgICAgICAgICAgICBjaCA9ICh5IDwgZ3JpZEhlaWdodCAtIDEpID8gY2VsbEhlaWdodEEgOiBjZWxsSGVpZ2h0QjtcclxuXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaEZpbGxSZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHggKiBjZWxsV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeSAqIGNlbGxIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgY2hcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3dBbHRDZWxscyAmJiBzcmMuYWx0RmlsbEFscGhhID4gMClcclxuICAgIHtcclxuICAgICAgICBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgICAgIGZpbGxUaW50Q29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmFsdEZpbGxDb2xvciwgc3JjLmFsdEZpbGxBbHBoYSAqIGFscGhhKTtcclxuICAgIFxyXG4gICAgICAgIGZpbGxUaW50LlRMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5UUiA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQkwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LkJSID0gZmlsbFRpbnRDb2xvcjtcclxuXHJcbiAgICAgICAgZm9yICh5ID0gMDsgeSA8IGdyaWRIZWlnaHQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHIgPSB5ICUgMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmICFyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHIgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgY2ggPSAoeSA8IGdyaWRIZWlnaHQgLSAxKSA/IGNlbGxIZWlnaHRBIDogY2VsbEhlaWdodEI7XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICB4ICogY2VsbFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHkgKiBjZWxsSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIGN3LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG93T3V0bGluZSAmJiBzcmMub3V0bGluZUZpbGxBbHBoYSA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN0cm9rZVRpbnQgPSBwaXBlbGluZS5zdHJva2VUaW50O1xyXG4gICAgICAgIHZhciBjb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMub3V0bGluZUZpbGxDb2xvciwgc3JjLm91dGxpbmVGaWxsQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIHN0cm9rZVRpbnQuVEwgPSBjb2xvcjtcclxuICAgICAgICBzdHJva2VUaW50LlRSID0gY29sb3I7XHJcbiAgICAgICAgc3Ryb2tlVGludC5CTCA9IGNvbG9yO1xyXG4gICAgICAgIHN0cm9rZVRpbnQuQlIgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgZm9yICh4ID0gMTsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHgxID0geCAqIGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG5cclxuICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hMaW5lKHgxLCAwLCB4MSwgaGVpZ2h0LCAxLCAxLCAxLCAwLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHkgPSAxOyB5IDwgZ3JpZEhlaWdodDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHkxID0geSAqIGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZSgwLCB5MSwgd2lkdGgsIHkxLCAxLCAxLCAxLCAwLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmlkV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar IsoBoxRender = __webpack_require__(/*! ./IsoBoxRender */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The IsoBox Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoBox is an 'isometric' rectangle. Each face of it has a different fill color. You can set\r\n * the color of the top, left and right faces of the rectangle respectively. You can also choose\r\n * which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoBox from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property.\r\n *\r\n * @class IsoBox\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso box in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso box. The left and right faces will be this tall. The overall height of the isobox will be this value plus half the `size` value.\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso box.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso box.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso box.\r\n */\r\nvar IsoBox = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        IsoBoxRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function IsoBox (scene, x, y, size, height, fillTop, fillLeft, fillRight)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (size === undefined) { size = 48; }\r\n        if (height === undefined) { height = 32; }\r\n        if (fillTop === undefined) { fillTop = 0xeeeeee; }\r\n        if (fillLeft === undefined) { fillLeft = 0x999999; }\r\n        if (fillRight === undefined) { fillRight = 0xcccccc; }\r\n\r\n        Shape.call(this, scene, 'IsoBox', null);\r\n\r\n        /**\r\n         * The projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#projection\r\n         * @type {integer}\r\n         * @default 4\r\n         * @since 3.13.0\r\n         */\r\n        this.projection = 4;\r\n\r\n        /**\r\n         * The color used to fill in the top of the iso box.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#fillTop\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillTop = fillTop;\r\n\r\n        /**\r\n         * The color used to fill in the left-facing side of the iso box.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#fillLeft\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillLeft = fillLeft;\r\n\r\n        /**\r\n         * The color used to fill in the right-facing side of the iso box.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#fillRight\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillRight = fillRight;\r\n\r\n        /**\r\n         * Controls if the top-face of the iso box be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#showTop\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showTop = true;\r\n\r\n        /**\r\n         * Controls if the left-face of the iso box be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#showLeft\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showLeft = true;\r\n\r\n        /**\r\n         * Controls if the right-face of the iso box be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoBox#showRight\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showRight = true;\r\n\r\n        this.isFilled = true;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(size, height);\r\n\r\n        this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoBox#setProjection\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the projection to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setProjection: function (value)\r\n    {\r\n        this.projection = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets which faces of the iso box will be rendered.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoBox#setFaces\r\n     * @since 3.13.0\r\n     * \r\n     * @param {boolean} [showTop=true] - Show the top-face of the iso box.\r\n     * @param {boolean} [showLeft=true] - Show the left-face of the iso box.\r\n     * @param {boolean} [showRight=true] - Show the right-face of the iso box.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFaces: function (showTop, showLeft, showRight)\r\n    {\r\n        if (showTop === undefined) { showTop = true; }\r\n        if (showLeft === undefined) { showLeft = true; }\r\n        if (showRight === undefined) { showRight = true; }\r\n\r\n        this.showTop = showTop;\r\n        this.showLeft = showLeft;\r\n        this.showRight = showRight;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the fill colors for each face of the iso box.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoBox#setFillStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [fillTop] - The color used to fill the top of the iso box.\r\n     * @param {number} [fillLeft] - The color used to fill in the left-facing side of the iso box.\r\n     * @param {number} [fillRight] - The color used to fill in the right-facing side of the iso box.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFillStyle: function (fillTop, fillLeft, fillRight)\r\n    {\r\n        this.fillTop = fillTop;\r\n        this.fillLeft = fillLeft;\r\n        this.fillRight = fillRight;\r\n\r\n        this.isFilled = true;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = IsoBox;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94LmpzP2Y3N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLDBGQUFnQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxpQ0FBaUMsV0FBVztBQUM1QyxtQ0FBbUMsYUFBYTtBQUNoRCxvQ0FBb0Msb0JBQW9CO0FBQ3hELHFDQUFxQyxxQkFBcUI7QUFDMUQsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQscUNBQXFDLGlCQUFpQjtBQUN0RCxzQ0FBc0Msa0JBQWtCOztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIElzb0JveFJlbmRlciA9IHJlcXVpcmUoJy4vSXNvQm94UmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgSXNvQm94IFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIG9ubHkgZmlsbCBjb2xvcnMgYW5kIGNhbm5vdCBiZSBzdHJva2VkLlxyXG4gKiBcclxuICogQW4gSXNvQm94IGlzIGFuICdpc29tZXRyaWMnIHJlY3RhbmdsZS4gRWFjaCBmYWNlIG9mIGl0IGhhcyBhIGRpZmZlcmVudCBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldFxyXG4gKiB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHJlY3RhbmdsZSByZXNwZWN0aXZlbHkuIFlvdSBjYW4gYWxzbyBjaG9vc2VcclxuICogd2hpY2ggb2YgdGhlIGZhY2VzIGFyZSByZW5kZXJlZCB2aWEgdGhlIGBzaG93VG9wYCwgYHNob3dMZWZ0YCBhbmQgYHNob3dSaWdodGAgcHJvcGVydGllcy5cclxuICogXHJcbiAqIFlvdSBjYW5ub3QgdmlldyBhbiBJc29Cb3ggZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBJc29Cb3hcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIGJveCBpbiBwaXhlbHMuIFRoZSBsZWZ0IGFuZCByaWdodCBmYWNlcyB3aWxsIGJlIGV4YWN0bHkgaGFsZiB0aGlzIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0zMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBpc28gYm94LiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvYm94IHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodD0weGNjY2NjY10gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgcmlnaHQgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICovXHJcbnZhciBJc29Cb3ggPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIElzb0JveFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIElzb0JveCAoc2NlbmUsIHgsIHksIHNpemUsIGhlaWdodCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQpIHsgc2l6ZSA9IDQ4OyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDMyOyB9XHJcbiAgICAgICAgaWYgKGZpbGxUb3AgPT09IHVuZGVmaW5lZCkgeyBmaWxsVG9wID0gMHhlZWVlZWU7IH1cclxuICAgICAgICBpZiAoZmlsbExlZnQgPT09IHVuZGVmaW5lZCkgeyBmaWxsTGVmdCA9IDB4OTk5OTk5OyB9XHJcbiAgICAgICAgaWYgKGZpbGxSaWdodCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxSaWdodCA9IDB4Y2NjY2NjOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdJc29Cb3gnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByb2plY3Rpb24gbGV2ZWwgb2YgdGhlIGlzbyBib3guIENoYW5nZSB0aGlzIHRvIGNoYW5nZSB0aGUgJ2FuZ2xlJyBhdCB3aGljaCB5b3UgYXJlIGxvb2tpbmcgYXQgdGhlIGJveC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gNDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgdG9wIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNmaWxsVG9wXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgbGVmdC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIGJveC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjZmlsbExlZnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxMZWZ0ID0gZmlsbExlZnQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgaW4gdGhlIHJpZ2h0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNmaWxsUmlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxSaWdodCA9IGZpbGxSaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhlIHRvcC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93VG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgbGVmdC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93TGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaG93TGVmdCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRyb2xzIGlmIHRoZSByaWdodC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93UmlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd1JpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHNpemUsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHByb2plY3Rpb24gbGV2ZWwgb2YgdGhlIGlzbyBib3guIENoYW5nZSB0aGlzIHRvIGNoYW5nZSB0aGUgJ2FuZ2xlJyBhdCB3aGljaCB5b3UgYXJlIGxvb2tpbmcgYXQgdGhlIGJveC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjc2V0UHJvamVjdGlvblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgcHJvamVjdGlvbiB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hpY2ggZmFjZXMgb2YgdGhlIGlzbyBib3ggd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjc2V0RmFjZXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd1RvcD10cnVlXSAtIFNob3cgdGhlIHRvcC1mYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd0xlZnQ9dHJ1ZV0gLSBTaG93IHRoZSBsZWZ0LWZhY2Ugb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93UmlnaHQ9dHJ1ZV0gLSBTaG93IHRoZSByaWdodC1mYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZhY2VzOiBmdW5jdGlvbiAoc2hvd1RvcCwgc2hvd0xlZnQsIHNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hvd1RvcCA9PT0gdW5kZWZpbmVkKSB7IHNob3dUb3AgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dMZWZ0ID09PSB1bmRlZmluZWQpIHsgc2hvd0xlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dSaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNob3dSaWdodCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93VG9wID0gc2hvd1RvcDtcclxuICAgICAgICB0aGlzLnNob3dMZWZ0ID0gc2hvd0xlZnQ7XHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSBzaG93UmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3JzIGZvciBlYWNoIGZhY2Ugb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94I3NldEZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxUb3BdIC0gVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCB0aGUgdG9wIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSBsZWZ0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsUmlnaHRdIC0gVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgcmlnaHQtZmFjaW5nIHNpZGUgb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmlsbFN0eWxlOiBmdW5jdGlvbiAoZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpbGxUb3AgPSBmaWxsVG9wO1xyXG4gICAgICAgIHRoaXMuZmlsbExlZnQgPSBmaWxsTGVmdDtcclxuICAgICAgICB0aGlzLmZpbGxSaWdodCA9IGZpbGxSaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzb0JveDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.IsoBox} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoBoxCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix) && src.isFilled)\r\n    {\r\n        var size = src.width;\r\n        var height = src.height;\r\n    \r\n        var sizeA = size / 2;\r\n        var sizeB = size / src.projection;\r\n\r\n        //  Top Face\r\n\r\n        if (src.showTop)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillTop);\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.moveTo(-sizeA, -height);\r\n            ctx.lineTo(0, -sizeB - height);\r\n            ctx.lineTo(sizeA, -height);\r\n            ctx.lineTo(sizeA, -1);\r\n            ctx.lineTo(0, sizeB - 1);\r\n            ctx.lineTo(-sizeA, -1);\r\n            ctx.lineTo(-sizeA, -height);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Left Face\r\n\r\n        if (src.showLeft)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillLeft);\r\n\r\n            ctx.beginPath();\r\n    \r\n            ctx.moveTo(-sizeA, 0);\r\n            ctx.lineTo(0, sizeB);\r\n            ctx.lineTo(0, sizeB - height);\r\n            ctx.lineTo(-sizeA, -height);\r\n            ctx.lineTo(-sizeA, 0);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Right Face\r\n\r\n        if (src.showRight)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillRight);\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.moveTo(sizeA, 0);\r\n            ctx.lineTo(0, sizeB);\r\n            ctx.lineTo(0, sizeB - height);\r\n            ctx.lineTo(sizeA, -height);\r\n            ctx.lineTo(sizeA, 0);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = IsoBoxCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94Q2FudmFzUmVuZGVyZXIuanM/YTA0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgSXNvQm94Q2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSAmJiBzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBzcmMud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICB2YXIgc2l6ZUEgPSBzaXplIC8gMjtcclxuICAgICAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgICAgIC8vICBUb3AgRmFjZVxyXG5cclxuICAgICAgICBpZiAoc3JjLnNob3dUb3ApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMsIHNyYy5maWxsVG9wKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhzaXplQSwgLTEpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gMSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtMSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgTGVmdCBGYWNlXHJcblxyXG4gICAgICAgIGlmIChzcmMuc2hvd0xlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMsIHNyYy5maWxsTGVmdCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4Lm1vdmVUbygtc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygtc2l6ZUEsIDApO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSaWdodCBGYWNlXHJcblxyXG4gICAgICAgIGlmIChzcmMuc2hvd1JpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjLCBzcmMuZmlsbFJpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKHNpemVBLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29Cb3hDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar IsoBox = __webpack_require__(/*! ./IsoBox */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\");\r\n\r\n/**\r\n * Creates a new IsoBox Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the IsoBox Game Object has been built into Phaser.\r\n * \r\n * The IsoBox Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoBox is an 'isometric' rectangle. Each face of it has a different fill color. You can set\r\n * the color of the top, left and right faces of the rectangle respectively. You can also choose\r\n * which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoBox from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#isobox\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso box in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso box. The left and right faces will be this tall. The overall height of the isobox will be this value plus half the `size` value.\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso box.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso box.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso box.\r\n *\r\n * @return {Phaser.GameObjects.IsoBox} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('isobox', function (x, y, size, height, fillTop, fillLeft, fillRight)\r\n{\r\n    return this.displayList.add(new IsoBox(this.scene, x, y, size, height, fillTop, fillLeft, fillRight));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94RmFjdG9yeS5qcz83ZDE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7QUFDekQsYUFBYSxtQkFBTyxDQUFDLDhFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb2JveC9Jc29Cb3hGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgSXNvQm94ID0gcmVxdWlyZSgnLi9Jc29Cb3gnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IElzb0JveCBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIElzb0JveCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBJc29Cb3ggU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgb25seSBmaWxsIGNvbG9ycyBhbmQgY2Fubm90IGJlIHN0cm9rZWQuXHJcbiAqIFxyXG4gKiBBbiBJc29Cb3ggaXMgYW4gJ2lzb21ldHJpYycgcmVjdGFuZ2xlLiBFYWNoIGZhY2Ugb2YgaXQgaGFzIGEgZGlmZmVyZW50IGZpbGwgY29sb3IuIFlvdSBjYW4gc2V0XHJcbiAqIHRoZSBjb2xvciBvZiB0aGUgdG9wLCBsZWZ0IGFuZCByaWdodCBmYWNlcyBvZiB0aGUgcmVjdGFuZ2xlIHJlc3BlY3RpdmVseS4gWW91IGNhbiBhbHNvIGNob29zZVxyXG4gKiB3aGljaCBvZiB0aGUgZmFjZXMgYXJlIHJlbmRlcmVkIHZpYSB0aGUgYHNob3dUb3BgLCBgc2hvd0xlZnRgIGFuZCBgc2hvd1JpZ2h0YCBwcm9wZXJ0aWVzLlxyXG4gKiBcclxuICogWW91IGNhbm5vdCB2aWV3IGFuIElzb0JveCBmcm9tIHVuZGVyLW5lYXRoLCBob3dldmVyIHlvdSBjYW4gY2hhbmdlIHRoZSAnYW5nbGUnIGJ5IHNldHRpbmdcclxuICogdGhlIGBwcm9qZWN0aW9uYCBwcm9wZXJ0eS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjaXNvYm94XHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIGJveCBpbiBwaXhlbHMuIFRoZSBsZWZ0IGFuZCByaWdodCBmYWNlcyB3aWxsIGJlIGV4YWN0bHkgaGFsZiB0aGlzIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0zMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBpc28gYm94LiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvYm94IHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodD0weGNjY2NjY10gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgcmlnaHQgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLklzb0JveH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignaXNvYm94JywgZnVuY3Rpb24gKHgsIHksIHNpemUsIGhlaWdodCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBJc29Cb3godGhpcy5zY2VuZSwgeCwgeSwgc2l6ZSwgaGVpZ2h0LCBmaWxsVG9wLCBmaWxsTGVmdCwgZmlsbFJpZ2h0KSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./IsoBoxWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./IsoBoxCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94UmVuZGVyLmpzPzI3YmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLDBHQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0lzb0JveFdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vSXNvQm94Q2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.IsoBox} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoBoxWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var size = src.width;\r\n    var height = src.height;\r\n\r\n    var sizeA = size / 2;\r\n    var sizeB = size / src.projection;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (!src.isFilled)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var tint;\r\n\r\n    var x0;\r\n    var y0;\r\n\r\n    var x1;\r\n    var y1;\r\n\r\n    var x2;\r\n    var y2;\r\n\r\n    var x3;\r\n    var y3;\r\n\r\n    //  Top Face\r\n\r\n    if (src.showTop)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillTop, alpha);\r\n\r\n        x0 = calcMatrix.getX(-sizeA, -height);\r\n        y0 = calcMatrix.getY(-sizeA, -height);\r\n    \r\n        x1 = calcMatrix.getX(0, -sizeB - height);\r\n        y1 = calcMatrix.getY(0, -sizeB - height);\r\n    \r\n        x2 = calcMatrix.getX(sizeA, -height);\r\n        y2 = calcMatrix.getY(sizeA, -height);\r\n    \r\n        x3 = calcMatrix.getX(0, sizeB - height);\r\n        y3 = calcMatrix.getY(0, sizeB - height);\r\n\r\n        pipeline.setTexture2D();\r\n    \r\n        pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n    }\r\n\r\n    //  Left Face\r\n\r\n    if (src.showLeft)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillLeft, alpha);\r\n\r\n        x0 = calcMatrix.getX(-sizeA, 0);\r\n        y0 = calcMatrix.getY(-sizeA, 0);\r\n    \r\n        x1 = calcMatrix.getX(0, sizeB);\r\n        y1 = calcMatrix.getY(0, sizeB);\r\n    \r\n        x2 = calcMatrix.getX(0, sizeB - height);\r\n        y2 = calcMatrix.getY(0, sizeB - height);\r\n    \r\n        x3 = calcMatrix.getX(-sizeA, -height);\r\n        y3 = calcMatrix.getY(-sizeA, -height);\r\n\r\n        pipeline.setTexture2D();\r\n    \r\n        pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n    }\r\n\r\n    //  Right Face\r\n\r\n    if (src.showRight)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillRight, alpha);\r\n\r\n        x0 = calcMatrix.getX(sizeA, 0);\r\n        y0 = calcMatrix.getY(sizeA, 0);\r\n    \r\n        x1 = calcMatrix.getX(0, sizeB);\r\n        y1 = calcMatrix.getY(0, sizeB);\r\n    \r\n        x2 = calcMatrix.getX(0, sizeB - height);\r\n        y2 = calcMatrix.getY(0, sizeB - height);\r\n    \r\n        x3 = calcMatrix.getX(sizeA, -height);\r\n        y3 = calcMatrix.getY(sizeA, -height);\r\n\r\n        pipeline.setTexture2D();\r\n    \r\n        pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n    }\r\n};\r\n\r\nmodule.exports = IsoBoxWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94V2ViR0xSZW5kZXJlci5qcz9iZGE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveFdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLklzb0JveH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIElzb0JveFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBzaXplID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHNpemVBID0gc2l6ZSAvIDI7XHJcbiAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmICghc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGludDtcclxuXHJcbiAgICB2YXIgeDA7XHJcbiAgICB2YXIgeTA7XHJcblxyXG4gICAgdmFyIHgxO1xyXG4gICAgdmFyIHkxO1xyXG5cclxuICAgIHZhciB4MjtcclxuICAgIHZhciB5MjtcclxuXHJcbiAgICB2YXIgeDM7XHJcbiAgICB2YXIgeTM7XHJcblxyXG4gICAgLy8gIFRvcCBGYWNlXHJcblxyXG4gICAgaWYgKHNyYy5zaG93VG9wKVxyXG4gICAge1xyXG4gICAgICAgIHRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxUb3AsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICB5MCA9IGNhbGNNYXRyaXguZ2V0WSgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgLXNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkyID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgIHgzID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MyA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG4gICAgXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hRdWFkKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgMCwgMCwgMSwgMSwgdGludCwgdGludCwgdGludCwgdGludCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIExlZnQgRmFjZVxyXG5cclxuICAgIGlmIChzcmMuc2hvd0xlZnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbExlZnQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAwKTtcclxuICAgICAgICB5MCA9IGNhbGNNYXRyaXguZ2V0WSgtc2l6ZUEsIDApO1xyXG4gICAgXHJcbiAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIpO1xyXG4gICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgIFxyXG4gICAgICAgIHgyID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MyA9IGNhbGNNYXRyaXguZ2V0WCgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkzID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG4gICAgXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hRdWFkKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgMCwgMCwgMSwgMSwgdGludCwgdGludCwgdGludCwgdGludCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFJpZ2h0IEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICB0aW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5maWxsUmlnaHQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIDApO1xyXG4gICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAwKTtcclxuICAgIFxyXG4gICAgICAgIHgxID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCKTtcclxuICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQik7XHJcbiAgICBcclxuICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDMgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkzID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAtaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcbiAgICBcclxuICAgICAgICBwaXBlbGluZS5iYXRjaFF1YWQoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCAwLCAwLCAxLCAxLCB0aW50LCB0aW50LCB0aW50LCB0aW50LCAyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSXNvQm94V2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar IsoTriangleRender = __webpack_require__(/*! ./IsoTriangleRender */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The IsoTriangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoTriangle is an 'isometric' triangle. Think of it like a pyramid. Each face has a different\r\n * fill color. You can set the color of the top, left and right faces of the triangle respectively\r\n * You can also choose which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoTriangle from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property. The `reversed` property controls if the IsoTriangle is rendered upside\r\n * down or not.\r\n *\r\n * @class IsoTriangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso triangle in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso triangle. The left and right faces will be this tall. The overall height of the iso triangle will be this value plus half the `size` value.\r\n * @param {boolean} [reversed=false] - Is the iso triangle upside down?\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso triangle.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso triangle.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso triangle.\r\n */\r\nvar IsoTriangle = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        IsoTriangleRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function IsoTriangle (scene, x, y, size, height, reversed, fillTop, fillLeft, fillRight)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (size === undefined) { size = 48; }\r\n        if (height === undefined) { height = 32; }\r\n        if (reversed === undefined) { reversed = false; }\r\n        if (fillTop === undefined) { fillTop = 0xeeeeee; }\r\n        if (fillLeft === undefined) { fillLeft = 0x999999; }\r\n        if (fillRight === undefined) { fillRight = 0xcccccc; }\r\n\r\n        Shape.call(this, scene, 'IsoTriangle', null);\r\n\r\n        /**\r\n         * The projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#projection\r\n         * @type {integer}\r\n         * @default 4\r\n         * @since 3.13.0\r\n         */\r\n        this.projection = 4;\r\n\r\n        /**\r\n         * The color used to fill in the top of the iso triangle. This is only used if the triangle is reversed.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#fillTop\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillTop = fillTop;\r\n\r\n        /**\r\n         * The color used to fill in the left-facing side of the iso triangle.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#fillLeft\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillLeft = fillLeft;\r\n\r\n        /**\r\n         * The color used to fill in the right-facing side of the iso triangle.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#fillRight\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.fillRight = fillRight;\r\n\r\n        /**\r\n         * Controls if the top-face of the iso triangle be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#showTop\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showTop = true;\r\n\r\n        /**\r\n         * Controls if the left-face of the iso triangle be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#showLeft\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showLeft = true;\r\n\r\n        /**\r\n         * Controls if the right-face of the iso triangle be rendered.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#showRight\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.13.0\r\n         */\r\n        this.showRight = true;\r\n\r\n        /**\r\n         * Sets if the iso triangle will be rendered upside down or not.\r\n         *\r\n         * @name Phaser.GameObjects.IsoTriangle#isReversed\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.13.0\r\n         */\r\n        this.isReversed = reversed;\r\n\r\n        this.isFilled = true;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(size, height);\r\n\r\n        this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the projection level of the iso triangle. Change this to change the 'angle' at which you are looking at the pyramid.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoTriangle#setProjection\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The value to set the projection to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setProjection: function (value)\r\n    {\r\n        this.projection = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets if the iso triangle will be rendered upside down or not.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoTriangle#setReversed\r\n     * @since 3.13.0\r\n     * \r\n     * @param {boolean} reversed - Sets if the iso triangle will be rendered upside down or not.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setReversed: function (reversed)\r\n    {\r\n        this.isReversed = reversed;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets which faces of the iso triangle will be rendered.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoTriangle#setFaces\r\n     * @since 3.13.0\r\n     * \r\n     * @param {boolean} [showTop=true] - Show the top-face of the iso triangle (only if `reversed` is true)\r\n     * @param {boolean} [showLeft=true] - Show the left-face of the iso triangle.\r\n     * @param {boolean} [showRight=true] - Show the right-face of the iso triangle.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFaces: function (showTop, showLeft, showRight)\r\n    {\r\n        if (showTop === undefined) { showTop = true; }\r\n        if (showLeft === undefined) { showLeft = true; }\r\n        if (showRight === undefined) { showRight = true; }\r\n\r\n        this.showTop = showTop;\r\n        this.showLeft = showLeft;\r\n        this.showRight = showRight;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the fill colors for each face of the iso triangle.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.IsoTriangle#setFillStyle\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} [fillTop] - The color used to fill the top of the iso triangle.\r\n     * @param {number} [fillLeft] - The color used to fill in the left-facing side of the iso triangle.\r\n     * @param {number} [fillRight] - The color used to fill in the right-facing side of the iso triangle.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFillStyle: function (fillTop, fillLeft, fillRight)\r\n    {\r\n        this.fillTop = fillTop;\r\n        this.fillLeft = fillLeft;\r\n        this.fillRight = fillRight;\r\n\r\n        this.isFilled = true;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = IsoTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZS5qcz82YjlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLHdCQUF3QixtQkFBTyxDQUFDLHlHQUFxQjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsaUNBQWlDLFdBQVc7QUFDNUMsbUNBQW1DLGFBQWE7QUFDaEQscUNBQXFDLGtCQUFrQjtBQUN2RCxvQ0FBb0Msb0JBQW9CO0FBQ3hELHFDQUFxQyxxQkFBcUI7QUFDMUQsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQscUNBQXFDLGlCQUFpQjtBQUN0RCxzQ0FBc0Msa0JBQWtCOztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvdHJpYW5nbGUvSXNvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBJc29UcmlhbmdsZVJlbmRlciA9IHJlcXVpcmUoJy4vSXNvVHJpYW5nbGVSZW5kZXInKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBJc29UcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEFuIElzb1RyaWFuZ2xlIGlzIGFuICdpc29tZXRyaWMnIHRyaWFuZ2xlLiBUaGluayBvZiBpdCBsaWtlIGEgcHlyYW1pZC4gRWFjaCBmYWNlIGhhcyBhIGRpZmZlcmVudFxyXG4gKiBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldCB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHRyaWFuZ2xlIHJlc3BlY3RpdmVseVxyXG4gKiBZb3UgY2FuIGFsc28gY2hvb3NlIHdoaWNoIG9mIHRoZSBmYWNlcyBhcmUgcmVuZGVyZWQgdmlhIHRoZSBgc2hvd1RvcGAsIGBzaG93TGVmdGAgYW5kIGBzaG93UmlnaHRgIHByb3BlcnRpZXMuXHJcbiAqIFxyXG4gKiBZb3UgY2Fubm90IHZpZXcgYW4gSXNvVHJpYW5nbGUgZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuIFRoZSBgcmV2ZXJzZWRgIHByb3BlcnR5IGNvbnRyb2xzIGlmIHRoZSBJc29UcmlhbmdsZSBpcyByZW5kZXJlZCB1cHNpZGVcclxuICogZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBJc29UcmlhbmdsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9NDhdIC0gVGhlIHdpZHRoIG9mIHRoZSBpc28gdHJpYW5nbGUgaW4gcGl4ZWxzLiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSBleGFjdGx5IGhhbGYgdGhpcyB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MzJdIC0gVGhlIGhlaWdodCBvZiB0aGUgaXNvIHRyaWFuZ2xlLiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvIHRyaWFuZ2xlIHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZWQ9ZmFsc2VdIC0gSXMgdGhlIGlzbyB0cmlhbmdsZSB1cHNpZGUgZG93bj9cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxMZWZ0PTB4OTk5OTk5XSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSBsZWZ0IGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsUmlnaHQ9MHhjY2NjY2NdIC0gVGhlIGZpbGwgY29sb3Igb2YgdGhlIHJpZ2h0IGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICovXHJcbnZhciBJc29UcmlhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogU2hhcGUsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgSXNvVHJpYW5nbGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBJc29UcmlhbmdsZSAoc2NlbmUsIHgsIHksIHNpemUsIGhlaWdodCwgcmV2ZXJzZWQsIGZpbGxUb3AsIGZpbGxMZWZ0LCBmaWxsUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoc2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHNpemUgPSA0ODsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAzMjsgfVxyXG4gICAgICAgIGlmIChyZXZlcnNlZCA9PT0gdW5kZWZpbmVkKSB7IHJldmVyc2VkID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoZmlsbFRvcCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxUb3AgPSAweGVlZWVlZTsgfVxyXG4gICAgICAgIGlmIChmaWxsTGVmdCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxMZWZ0ID0gMHg5OTk5OTk7IH1cclxuICAgICAgICBpZiAoZmlsbFJpZ2h0ID09PSB1bmRlZmluZWQpIHsgZmlsbFJpZ2h0ID0gMHhjY2NjY2M7IH1cclxuXHJcbiAgICAgICAgU2hhcGUuY2FsbCh0aGlzLCBzY2VuZSwgJ0lzb1RyaWFuZ2xlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9qZWN0aW9uIGxldmVsIG9mIHRoZSBpc28gYm94LiBDaGFuZ2UgdGhpcyB0byBjaGFuZ2UgdGhlICdhbmdsZScgYXQgd2hpY2ggeW91IGFyZSBsb29raW5nIGF0IHRoZSBib3guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gNDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgdG9wIG9mIHRoZSBpc28gdHJpYW5nbGUuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSB0cmlhbmdsZSBpcyByZXZlcnNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNmaWxsVG9wXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgbGVmdC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI2ZpbGxMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsTGVmdCA9IGZpbGxMZWZ0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSByaWdodC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI2ZpbGxSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbFJpZ2h0ID0gZmlsbFJpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgdG9wLWZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZSBiZSByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzaG93VG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgbGVmdC1mYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUgYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjc2hvd0xlZnRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd0xlZnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgcmlnaHQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlIGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3Nob3dSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXRzIGlmIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZCB1cHNpZGUgZG93biBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjaXNSZXZlcnNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSZXZlcnNlZCA9IHJldmVyc2VkO1xyXG5cclxuICAgICAgICB0aGlzLmlzRmlsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUoc2l6ZSwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcHJvamVjdGlvbiBsZXZlbCBvZiB0aGUgaXNvIHRyaWFuZ2xlLiBDaGFuZ2UgdGhpcyB0byBjaGFuZ2UgdGhlICdhbmdsZScgYXQgd2hpY2ggeW91IGFyZSBsb29raW5nIGF0IHRoZSBweXJhbWlkLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3NldFByb2plY3Rpb25cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb2plY3Rpb24gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGlmIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZCB1cHNpZGUgZG93biBvciBub3QuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjc2V0UmV2ZXJzZWRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZXZlcnNlZCAtIFNldHMgaWYgdGhlIGlzbyB0cmlhbmdsZSB3aWxsIGJlIHJlbmRlcmVkIHVwc2lkZSBkb3duIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSZXZlcnNlZDogZnVuY3Rpb24gKHJldmVyc2VkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSZXZlcnNlZCA9IHJldmVyc2VkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoaWNoIGZhY2VzIG9mIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzZXRGYWNlc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93VG9wPXRydWVdIC0gU2hvdyB0aGUgdG9wLWZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZSAob25seSBpZiBgcmV2ZXJzZWRgIGlzIHRydWUpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93TGVmdD10cnVlXSAtIFNob3cgdGhlIGxlZnQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd1JpZ2h0PXRydWVdIC0gU2hvdyB0aGUgcmlnaHQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZhY2VzOiBmdW5jdGlvbiAoc2hvd1RvcCwgc2hvd0xlZnQsIHNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hvd1RvcCA9PT0gdW5kZWZpbmVkKSB7IHNob3dUb3AgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dMZWZ0ID09PSB1bmRlZmluZWQpIHsgc2hvd0xlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dSaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNob3dSaWdodCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93VG9wID0gc2hvd1RvcDtcclxuICAgICAgICB0aGlzLnNob3dMZWZ0ID0gc2hvd0xlZnQ7XHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSBzaG93UmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3JzIGZvciBlYWNoIGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzZXRGaWxsU3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wXSAtIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgdGhlIHRvcCBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSBsZWZ0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSByaWdodC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZpbGxTdHlsZTogZnVuY3Rpb24gKGZpbGxUb3AsIGZpbGxMZWZ0LCBmaWxsUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuICAgICAgICB0aGlzLmZpbGxMZWZ0ID0gZmlsbExlZnQ7XHJcbiAgICAgICAgdGhpcy5maWxsUmlnaHQgPSBmaWxsUmlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuaXNGaWxsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.IsoTriangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoTriangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix) && src.isFilled)\r\n    {\r\n        var size = src.width;\r\n        var height = src.height;\r\n    \r\n        var sizeA = size / 2;\r\n        var sizeB = size / src.projection;\r\n\r\n        var reversed = src.isReversed;\r\n\r\n        //  Top Face\r\n\r\n        if (src.showTop && reversed)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillTop);\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.moveTo(-sizeA, -height);\r\n            ctx.lineTo(0, -sizeB - height);\r\n            ctx.lineTo(sizeA, -height);\r\n            ctx.lineTo(0, sizeB - height);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Left Face\r\n\r\n        if (src.showLeft)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillLeft);\r\n\r\n            ctx.beginPath();\r\n\r\n            if (reversed)\r\n            {\r\n                ctx.moveTo(-sizeA, -height);\r\n                ctx.lineTo(0, sizeB);\r\n                ctx.lineTo(0, sizeB - height);\r\n            }\r\n            else\r\n            {\r\n                ctx.moveTo(-sizeA, 0);\r\n                ctx.lineTo(0, sizeB);\r\n                ctx.lineTo(0, sizeB - height);\r\n            }\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Right Face\r\n\r\n        if (src.showRight)\r\n        {\r\n            FillStyleCanvas(ctx, src, src.fillRight);\r\n\r\n            ctx.beginPath();\r\n\r\n            if (reversed)\r\n            {\r\n                ctx.moveTo(sizeA, -height);\r\n                ctx.lineTo(0, sizeB);\r\n                ctx.lineTo(0, sizeB - height);\r\n            }\r\n            else\r\n            {\r\n                ctx.moveTo(sizeA, 0);\r\n                ctx.lineTo(0, sizeB);\r\n                ctx.lineTo(0, sizeB - height);\r\n            }\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = IsoTriangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzP2Y5MTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsK0JBQStCO0FBQzFDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIElzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSAmJiBzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBzcmMud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICB2YXIgc2l6ZUEgPSBzaXplIC8gMjtcclxuICAgICAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHZhciByZXZlcnNlZCA9IHNyYy5pc1JldmVyc2VkO1xyXG5cclxuICAgICAgICAvLyAgVG9wIEZhY2VcclxuXHJcbiAgICAgICAgaWYgKHNyYy5zaG93VG9wICYmIHJldmVyc2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjLCBzcmMuZmlsbFRvcCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgICAgICBjdHgubW92ZVRvKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgLXNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhzaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBMZWZ0IEZhY2VcclxuXHJcbiAgICAgICAgaWYgKHNyYy5zaG93TGVmdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmZpbGxMZWZ0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbygtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oLXNpemVBLCAwKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgc2l6ZUIpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmlnaHQgRmFjZVxyXG5cclxuICAgICAgICBpZiAoc3JjLnNob3dSaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmZpbGxSaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV2ZXJzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js ***!
  \*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar IsoTriangle = __webpack_require__(/*! ./IsoTriangle */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\");\r\n\r\n/**\r\n * Creates a new IsoTriangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the IsoTriangle Game Object has been built into Phaser.\r\n * \r\n * The IsoTriangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoTriangle is an 'isometric' triangle. Think of it like a pyramid. Each face has a different\r\n * fill color. You can set the color of the top, left and right faces of the triangle respectively\r\n * You can also choose which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoTriangle from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property. The `reversed` property controls if the IsoTriangle is rendered upside\r\n * down or not.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#isotriangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso triangle in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso triangle. The left and right faces will be this tall. The overall height of the iso triangle will be this value plus half the `size` value.\r\n * @param {boolean} [reversed=false] - Is the iso triangle upside down?\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso triangle.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso triangle.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso triangle.\r\n *\r\n * @return {Phaser.GameObjects.IsoTriangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('isotriangle', function (x, y, size, height, reversed, fillTop, fillLeft, fillRight)\r\n{\r\n    return this.displayList.add(new IsoTriangle(this.scene, x, y, size, height, reversed, fillTop, fillLeft, fillRight));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUZhY3RvcnkuanM/NWZiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELGtCQUFrQixtQkFBTyxDQUFDLDZGQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksK0JBQStCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIElzb1RyaWFuZ2xlID0gcmVxdWlyZSgnLi9Jc29UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgSXNvVHJpYW5nbGUgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBJc29UcmlhbmdsZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBJc29UcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEFuIElzb1RyaWFuZ2xlIGlzIGFuICdpc29tZXRyaWMnIHRyaWFuZ2xlLiBUaGluayBvZiBpdCBsaWtlIGEgcHlyYW1pZC4gRWFjaCBmYWNlIGhhcyBhIGRpZmZlcmVudFxyXG4gKiBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldCB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHRyaWFuZ2xlIHJlc3BlY3RpdmVseVxyXG4gKiBZb3UgY2FuIGFsc28gY2hvb3NlIHdoaWNoIG9mIHRoZSBmYWNlcyBhcmUgcmVuZGVyZWQgdmlhIHRoZSBgc2hvd1RvcGAsIGBzaG93TGVmdGAgYW5kIGBzaG93UmlnaHRgIHByb3BlcnRpZXMuXHJcbiAqIFxyXG4gKiBZb3UgY2Fubm90IHZpZXcgYW4gSXNvVHJpYW5nbGUgZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuIFRoZSBgcmV2ZXJzZWRgIHByb3BlcnR5IGNvbnRyb2xzIGlmIHRoZSBJc29UcmlhbmdsZSBpcyByZW5kZXJlZCB1cHNpZGVcclxuICogZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2lzb3RyaWFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIHRyaWFuZ2xlIGluIHBpeGVscy4gVGhlIGxlZnQgYW5kIHJpZ2h0IGZhY2VzIHdpbGwgYmUgZXhhY3RseSBoYWxmIHRoaXMgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIGlzbyB0cmlhbmdsZS4gVGhlIGxlZnQgYW5kIHJpZ2h0IGZhY2VzIHdpbGwgYmUgdGhpcyB0YWxsLiBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhlIGlzbyB0cmlhbmdsZSB3aWxsIGJlIHRoaXMgdmFsdWUgcGx1cyBoYWxmIHRoZSBgc2l6ZWAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2VkPWZhbHNlXSAtIElzIHRoZSBpc28gdHJpYW5nbGUgdXBzaWRlIGRvd24/XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbFRvcD0weGVlZWVlZV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgdG9wIGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbFJpZ2h0PTB4Y2NjY2NjXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSByaWdodCBmYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignaXNvdHJpYW5nbGUnLCBmdW5jdGlvbiAoeCwgeSwgc2l6ZSwgaGVpZ2h0LCByZXZlcnNlZCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBJc29UcmlhbmdsZSh0aGlzLnNjZW5lLCB4LCB5LCBzaXplLCBoZWlnaHQsIHJldmVyc2VkLCBmaWxsVG9wLCBmaWxsTGVmdCwgZmlsbFJpZ2h0KSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./IsoTriangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./IsoTriangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVJlbmRlci5qcz9hMWE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsdUhBQTRCO0FBQ3REOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx5SEFBNkI7QUFDeEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vSXNvVHJpYW5nbGVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0lzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.IsoTriangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoTriangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var size = src.width;\r\n    var height = src.height;\r\n\r\n    var sizeA = size / 2;\r\n    var sizeB = size / src.projection;\r\n\r\n    var reversed = src.isReversed;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (!src.isFilled)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var tint;\r\n\r\n    var x0;\r\n    var y0;\r\n\r\n    var x1;\r\n    var y1;\r\n\r\n    var x2;\r\n    var y2;\r\n\r\n    //  Top Face\r\n\r\n    if (src.showTop && reversed)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillTop, alpha);\r\n\r\n        x0 = calcMatrix.getX(-sizeA, -height);\r\n        y0 = calcMatrix.getY(-sizeA, -height);\r\n    \r\n        x1 = calcMatrix.getX(0, -sizeB - height);\r\n        y1 = calcMatrix.getY(0, -sizeB - height);\r\n    \r\n        x2 = calcMatrix.getX(sizeA, -height);\r\n        y2 = calcMatrix.getY(sizeA, -height);\r\n    \r\n        var x3 = calcMatrix.getX(0, sizeB - height);\r\n        var y3 = calcMatrix.getY(0, sizeB - height);\r\n\r\n        pipeline.setTexture2D();\r\n    \r\n        pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n    }\r\n\r\n    //  Left Face\r\n\r\n    if (src.showLeft)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillLeft, alpha);\r\n\r\n        if (reversed)\r\n        {\r\n            x0 = calcMatrix.getX(-sizeA, -height);\r\n            y0 = calcMatrix.getY(-sizeA, -height);\r\n        \r\n            x1 = calcMatrix.getX(0, sizeB);\r\n            y1 = calcMatrix.getY(0, sizeB);\r\n        \r\n            x2 = calcMatrix.getX(0, sizeB - height);\r\n            y2 = calcMatrix.getY(0, sizeB - height);\r\n        }\r\n        else\r\n        {\r\n            x0 = calcMatrix.getX(-sizeA, 0);\r\n            y0 = calcMatrix.getY(-sizeA, 0);\r\n        \r\n            x1 = calcMatrix.getX(0, sizeB);\r\n            y1 = calcMatrix.getY(0, sizeB);\r\n        \r\n            x2 = calcMatrix.getX(0, sizeB - height);\r\n            y2 = calcMatrix.getY(0, sizeB - height);\r\n        }\r\n    \r\n        pipeline.batchTri(x0, y0, x1, y1, x2, y2, 0, 0, 1, 1, tint, tint, tint, 2);\r\n    }\r\n\r\n    //  Right Face\r\n\r\n    if (src.showRight)\r\n    {\r\n        tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillRight, alpha);\r\n\r\n        if (reversed)\r\n        {\r\n            x0 = calcMatrix.getX(sizeA, -height);\r\n            y0 = calcMatrix.getY(sizeA, -height);\r\n        \r\n            x1 = calcMatrix.getX(0, sizeB);\r\n            y1 = calcMatrix.getY(0, sizeB);\r\n        \r\n            x2 = calcMatrix.getX(0, sizeB - height);\r\n            y2 = calcMatrix.getY(0, sizeB - height);\r\n        }\r\n        else\r\n        {\r\n            x0 = calcMatrix.getX(sizeA, 0);\r\n            y0 = calcMatrix.getY(sizeA, 0);\r\n        \r\n            x1 = calcMatrix.getX(0, sizeB);\r\n            y1 = calcMatrix.getY(0, sizeB);\r\n        \r\n            x2 = calcMatrix.getX(0, sizeB - height);\r\n            y2 = calcMatrix.getY(0, sizeB - height);\r\n        }\r\n\r\n        pipeline.setTexture2D();\r\n    \r\n        pipeline.batchTri(x0, y0, x1, y1, x2, y2, 0, 0, 1, 1, tint, tint, tint, 2);\r\n    }\r\n};\r\n\r\nmodule.exports = IsoTriangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanM/MDRmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHdGQUErQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBJc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBzaXplID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHNpemVBID0gc2l6ZSAvIDI7XHJcbiAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgdmFyIHJldmVyc2VkID0gc3JjLmlzUmV2ZXJzZWQ7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmICghc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGludDtcclxuXHJcbiAgICB2YXIgeDA7XHJcbiAgICB2YXIgeTA7XHJcblxyXG4gICAgdmFyIHgxO1xyXG4gICAgdmFyIHkxO1xyXG5cclxuICAgIHZhciB4MjtcclxuICAgIHZhciB5MjtcclxuXHJcbiAgICAvLyAgVG9wIEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dUb3AgJiYgcmV2ZXJzZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbFRvcCwgYWxwaGEpO1xyXG5cclxuICAgICAgICB4MCA9IGNhbGNNYXRyaXguZ2V0WCgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIC1zaXplQiAtIGhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WChzaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHgzID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB2YXIgeTMgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG5cclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBMZWZ0IEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dMZWZ0KVxyXG4gICAge1xyXG4gICAgICAgIHRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxMZWZ0LCBhbHBoYSk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHgxID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgeTEgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHkyID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAwKTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoLXNpemVBLCAwKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIpO1xyXG4gICAgICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHgyID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoVHJpKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBSaWdodCBGYWNlXHJcblxyXG4gICAgaWYgKHNyYy5zaG93UmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbFJpZ2h0LCBhbHBoYSk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQik7XHJcbiAgICAgICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKHNpemVBLCAwKTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIDApO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQik7XHJcbiAgICAgICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoVHJpKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29UcmlhbmdsZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/line/Line.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/line/Line.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GeomLine = __webpack_require__(/*! ../../../geom/line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar LineRender = __webpack_require__(/*! ./LineRender */ \"./node_modules/phaser/src/gameobjects/shape/line/LineRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Line Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only stroke colors and cannot be filled.\r\n * \r\n * A Line Shape allows you to draw a line between two points in your game. You can control the\r\n * stroke color and thickness of the line. In WebGL only you can also specify a different\r\n * thickness for the start and end of the line, allowing you to render lines that taper-off.\r\n * \r\n * If you need to draw multiple lines in a sequence you may wish to use the Polygon Shape instead.\r\n *\r\n * Be aware that as with all Game Objects the default origin is 0.5. If you need to draw a Line\r\n * between two points and want the x1/y1 values to match the x/y values, then set the origin to 0.\r\n *\r\n * @class Line\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n * @param {number} [y1=0] - The vertical position of the start of the line.\r\n * @param {number} [x2=128] - The horizontal position of the end of the line.\r\n * @param {number} [y2=0] - The vertical position of the end of the line.\r\n * @param {number} [strokeColor] - The color the line will be drawn in, i.e. 0xff0000 for red.\r\n * @param {number} [strokeAlpha] - The alpha the line will be drawn in. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Line = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        LineRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Line (scene, x, y, x1, y1, x2, y2, strokeColor, strokeAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 0; }\r\n        if (x2 === undefined) { x2 = 128; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n\r\n        Shape.call(this, scene, 'Line', new GeomLine(x1, y1, x2, y2));\r\n\r\n        var width = this.geom.right - this.geom.left;\r\n        var height = this.geom.bottom - this.geom.top;\r\n\r\n        /**\r\n         * The width (or thickness) of the line.\r\n         * See the setLineWidth method for extra details on changing this on WebGL.\r\n         *\r\n         * @name Phaser.GameObjects.Line#lineWidth\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.lineWidth = 1;\r\n\r\n        /**\r\n         * Private internal value. Holds the start width of the line.\r\n         *\r\n         * @name Phaser.GameObjects.Line#_startWidth\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._startWidth = 1;\r\n\r\n        /**\r\n         * Private internal value. Holds the end width of the line.\r\n         *\r\n         * @name Phaser.GameObjects.Line#_endWidth\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._endWidth = 1;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n\r\n        if (strokeColor !== undefined)\r\n        {\r\n            this.setStrokeStyle(1, strokeColor, strokeAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * Sets the width of the line.\r\n     * \r\n     * When using the WebGL renderer you can have different start and end widths.\r\n     * When using the Canvas renderer only the `startWidth` value is used. The `endWidth` is ignored.\r\n     * \r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Line#setLineWidth\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} startWidth - The start width of the line.\r\n     * @param {number} [endWidth] - The end width of the line. Only used in WebGL.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setLineWidth: function (startWidth, endWidth)\r\n    {\r\n        if (endWidth === undefined) { endWidth = startWidth; }\r\n\r\n        this._startWidth = startWidth;\r\n        this._endWidth = endWidth;\r\n\r\n        this.lineWidth = startWidth;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the start and end coordinates of this Line.\r\n     *\r\n     * @method Phaser.GameObjects.Line#setTo\r\n     * @since 3.13.0\r\n     *\r\n     * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n     * @param {number} [y1=0] - The vertical position of the start of the line.\r\n     * @param {number} [x2=0] - The horizontal position of the end of the line.\r\n     * @param {number} [y2=0] - The vertical position of the end of the line.\r\n     *\r\n     * @return {this} This Line object.\r\n     */\r\n    setTo: function (x1, y1, x2, y2)\r\n    {\r\n        this.geom.setTo(x1, y1, x2, y2);\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmUuanM/OTQ4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsZUFBZSxtQkFBTyxDQUFDLDRFQUF5QjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyxvRkFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixRQUFROztBQUV2Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHVCQUF1Qjs7QUFFNUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvbGluZS9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG52YXIgR2VvbUxpbmUgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL2xpbmUvTGluZScpO1xyXG52YXIgTGluZVJlbmRlciA9IHJlcXVpcmUoJy4vTGluZVJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIExpbmUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgb25seSBzdHJva2UgY29sb3JzIGFuZCBjYW5ub3QgYmUgZmlsbGVkLlxyXG4gKiBcclxuICogQSBMaW5lIFNoYXBlIGFsbG93cyB5b3UgdG8gZHJhdyBhIGxpbmUgYmV0d2VlbiB0d28gcG9pbnRzIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHRoZVxyXG4gKiBzdHJva2UgY29sb3IgYW5kIHRoaWNrbmVzcyBvZiB0aGUgbGluZS4gSW4gV2ViR0wgb25seSB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIGRpZmZlcmVudFxyXG4gKiB0aGlja25lc3MgZm9yIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBsaW5lLCBhbGxvd2luZyB5b3UgdG8gcmVuZGVyIGxpbmVzIHRoYXQgdGFwZXItb2ZmLlxyXG4gKiBcclxuICogSWYgeW91IG5lZWQgdG8gZHJhdyBtdWx0aXBsZSBsaW5lcyBpbiBhIHNlcXVlbmNlIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlIFBvbHlnb24gU2hhcGUgaW5zdGVhZC5cclxuICpcclxuICogQmUgYXdhcmUgdGhhdCBhcyB3aXRoIGFsbCBHYW1lIE9iamVjdHMgdGhlIGRlZmF1bHQgb3JpZ2luIGlzIDAuNS4gSWYgeW91IG5lZWQgdG8gZHJhdyBhIExpbmVcclxuICogYmV0d2VlbiB0d28gcG9pbnRzIGFuZCB3YW50IHRoZSB4MS95MSB2YWx1ZXMgdG8gbWF0Y2ggdGhlIHgveSB2YWx1ZXMsIHRoZW4gc2V0IHRoZSBvcmlnaW4gdG8gMC5cclxuICpcclxuICogQGNsYXNzIExpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5MT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MTI4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdHJva2VDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmUgd2lsbCBiZSBkcmF3biBpbiwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0cm9rZUFscGhhXSAtIFRoZSBhbHBoYSB0aGUgbGluZSB3aWxsIGJlIGRyYXduIGluLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBMaW5lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBMaW5lUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGluZSAoc2NlbmUsIHgsIHksIHgxLCB5MSwgeDIsIHkyLCBzdHJva2VDb2xvciwgc3Ryb2tlQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDEyODsgfVxyXG4gICAgICAgIGlmICh5MiA9PT0gdW5kZWZpbmVkKSB7IHkyID0gMDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnTGluZScsIG5ldyBHZW9tTGluZSh4MSwgeTEsIHgyLCB5MikpO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdlb20ucmlnaHQgLSB0aGlzLmdlb20ubGVmdDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZW9tLmJvdHRvbSAtIHRoaXMuZ2VvbS50b3A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCAob3IgdGhpY2tuZXNzKSBvZiB0aGUgbGluZS5cclxuICAgICAgICAgKiBTZWUgdGhlIHNldExpbmVXaWR0aCBtZXRob2QgZm9yIGV4dHJhIGRldGFpbHMgb24gY2hhbmdpbmcgdGhpcyBvbiBXZWJHTC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaW5lI2xpbmVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGluZVdpZHRoID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHN0YXJ0IHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjX3N0YXJ0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0V2lkdGggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgZW5kIHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjX2VuZFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbmRXaWR0aCA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoc3Ryb2tlQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlU3R5bGUoMSwgc3Ryb2tlQ29sb3IsIHN0cm9rZUFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlciB5b3UgY2FuIGhhdmUgZGlmZmVyZW50IHN0YXJ0IGFuZCBlbmQgd2lkdGhzLlxyXG4gICAgICogV2hlbiB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyIG9ubHkgdGhlIGBzdGFydFdpZHRoYCB2YWx1ZSBpcyB1c2VkLiBUaGUgYGVuZFdpZHRoYCBpcyBpZ25vcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGluZSNzZXRMaW5lV2lkdGhcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0V2lkdGggLSBUaGUgc3RhcnQgd2lkdGggb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZFdpZHRoXSAtIFRoZSBlbmQgd2lkdGggb2YgdGhlIGxpbmUuIE9ubHkgdXNlZCBpbiBXZWJHTC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRMaW5lV2lkdGg6IGZ1bmN0aW9uIChzdGFydFdpZHRoLCBlbmRXaWR0aClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5kV2lkdGggPT09IHVuZGVmaW5lZCkgeyBlbmRXaWR0aCA9IHN0YXJ0V2lkdGg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RhcnRXaWR0aCA9IHN0YXJ0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZW5kV2lkdGggPSBlbmRXaWR0aDtcclxuXHJcbiAgICAgICAgdGhpcy5saW5lV2lkdGggPSBzdGFydFdpZHRoO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzdGFydCBhbmQgZW5kIGNvb3JkaW5hdGVzIG9mIHRoaXMgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaW5lI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4Mj0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBMaW5lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG86IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20uc2V0VG8oeDEsIHkxLCB4MiwgeTIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/Line.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Line#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Line} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar LineCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.moveTo(src.geom.x1 - dx, src.geom.y1 - dy);\r\n            ctx.lineTo(src.geom.x2 - dx, src.geom.y2 - dy);\r\n    \r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = LineCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVDYW52YXNSZW5kZXJlci5qcz9mZTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2xpbmUvTGluZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZVN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vTGluZVN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkxpbmV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBMaW5lQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHZhciBkeSA9IHNyYy5fZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oc3JjLmdlb20ueDEgLSBkeCwgc3JjLmdlb20ueTEgLSBkeSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oc3JjLmdlb20ueDIgLSBkeCwgc3JjLmdlb20ueTIgLSBkeSk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/gameobjects/shape/line/Line.js\");\r\n\r\n/**\r\n * Creates a new Line Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Line Game Object has been built into Phaser.\r\n * \r\n * The Line Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only stroke colors and cannot be filled.\r\n * \r\n * A Line Shape allows you to draw a line between two points in your game. You can control the\r\n * stroke color and thickness of the line. In WebGL only you can also specify a different\r\n * thickness for the start and end of the line, allowing you to render lines that taper-off.\r\n * \r\n * If you need to draw multiple lines in a sequence you may wish to use the Polygon Shape instead.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#line\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n * @param {number} [y1=0] - The vertical position of the start of the line.\r\n * @param {number} [x2=128] - The horizontal position of the end of the line.\r\n * @param {number} [y2=0] - The vertical position of the end of the line.\r\n * @param {number} [strokeColor] - The color the line will be drawn in, i.e. 0xff0000 for red.\r\n * @param {number} [strokeAlpha] - The alpha the line will be drawn in. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Line} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('line', function (x, y, x1, y1, x2, y2, strokeColor, strokeAlpha)\r\n{\r\n    return this.displayList.add(new Line(this.scene, x, y, x1, y1, x2, y2, strokeColor, strokeAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVGYWN0b3J5LmpzPzU2MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsd0VBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4vTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgTGluZSBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIExpbmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgTGluZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IHN0cm9rZSBjb2xvcnMgYW5kIGNhbm5vdCBiZSBmaWxsZWQuXHJcbiAqIFxyXG4gKiBBIExpbmUgU2hhcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgbGluZSBiZXR3ZWVuIHR3byBwb2ludHMgaW4geW91ciBnYW1lLiBZb3UgY2FuIGNvbnRyb2wgdGhlXHJcbiAqIHN0cm9rZSBjb2xvciBhbmQgdGhpY2tuZXNzIG9mIHRoZSBsaW5lLiBJbiBXZWJHTCBvbmx5IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgZGlmZmVyZW50XHJcbiAqIHRoaWNrbmVzcyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGxpbmUsIGFsbG93aW5nIHlvdSB0byByZW5kZXIgbGluZXMgdGhhdCB0YXBlci1vZmYuXHJcbiAqIFxyXG4gKiBJZiB5b3UgbmVlZCB0byBkcmF3IG11bHRpcGxlIGxpbmVzIGluIGEgc2VxdWVuY2UgeW91IG1heSB3aXNoIHRvIHVzZSB0aGUgUG9seWdvbiBTaGFwZSBpbnN0ZWFkLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNsaW5lXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5MT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MTI4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdHJva2VDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmUgd2lsbCBiZSBkcmF3biBpbiwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0cm9rZUFscGhhXSAtIFRoZSBhbHBoYSB0aGUgbGluZSB3aWxsIGJlIGRyYXduIGluLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpbmV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2xpbmUnLCBmdW5jdGlvbiAoeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHN0cm9rZUNvbG9yLCBzdHJva2VBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBMaW5lKHRoaXMuc2NlbmUsIHgsIHksIHgxLCB5MSwgeDIsIHkyLCBzdHJva2VDb2xvciwgc3Ryb2tlQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineRender.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/line/LineRender.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./LineWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./LineCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVSZW5kZXIuanM/MGIwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9MaW5lV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9MaW5lQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Line#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Line} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar LineWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isStroked)\r\n    {\r\n        var strokeTint = pipeline.strokeTint;\r\n        var color = Utils.getTintAppendFloatAlphaAndSwap(src.strokeColor, src.strokeAlpha * alpha);\r\n\r\n        strokeTint.TL = color;\r\n        strokeTint.TR = color;\r\n        strokeTint.BL = color;\r\n        strokeTint.BR = color;\r\n\r\n        var startWidth = src._startWidth;\r\n        var endWidth = src._endWidth;\r\n\r\n        pipeline.setTexture2D();\r\n\r\n        pipeline.batchLine(\r\n            src.geom.x1 - dx,\r\n            src.geom.y1 - dy,\r\n            src.geom.x2 - dx,\r\n            src.geom.y2 - dy,\r\n            startWidth,\r\n            endWidth,\r\n            1,\r\n            0,\r\n            false,\r\n            shapeMatrix,\r\n            camMatrix\r\n        );\r\n    }\r\n};\r\n\r\nmodule.exports = LineWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVXZWJHTFJlbmRlcmVyLmpzPzkxNzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuTGluZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIExpbmVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgPSBzcmMueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdHJva2VUaW50ID0gcGlwZWxpbmUuc3Ryb2tlVGludDtcclxuICAgICAgICB2YXIgY29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLnN0cm9rZUNvbG9yLCBzcmMuc3Ryb2tlQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIHN0cm9rZVRpbnQuVEwgPSBjb2xvcjtcclxuICAgICAgICBzdHJva2VUaW50LlRSID0gY29sb3I7XHJcbiAgICAgICAgc3Ryb2tlVGludC5CTCA9IGNvbG9yO1xyXG4gICAgICAgIHN0cm9rZVRpbnQuQlIgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0V2lkdGggPSBzcmMuX3N0YXJ0V2lkdGg7XHJcbiAgICAgICAgdmFyIGVuZFdpZHRoID0gc3JjLl9lbmRXaWR0aDtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZShcclxuICAgICAgICAgICAgc3JjLmdlb20ueDEgLSBkeCxcclxuICAgICAgICAgICAgc3JjLmdlb20ueTEgLSBkeSxcclxuICAgICAgICAgICAgc3JjLmdlb20ueDIgLSBkeCxcclxuICAgICAgICAgICAgc3JjLmdlb20ueTIgLSBkeSxcclxuICAgICAgICAgICAgc3RhcnRXaWR0aCxcclxuICAgICAgICAgICAgZW5kV2lkdGgsXHJcbiAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeCxcclxuICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PolygonRender = __webpack_require__(/*! ./PolygonRender */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar GetAABB = __webpack_require__(/*! ../../../geom/polygon/GetAABB */ \"./node_modules/phaser/src/geom/polygon/GetAABB.js\");\r\nvar GeomPolygon = __webpack_require__(/*! ../../../geom/polygon/Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar Smooth = __webpack_require__(/*! ../../../geom/polygon/Smooth */ \"./node_modules/phaser/src/geom/polygon/Smooth.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Polygon Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Polygon Shape is created by providing a list of points, which are then used to create an\r\n * internal Polygon geometry object. The points can be set from a variety of formats:\r\n *\r\n * - A string containing paired values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n * - An array of Point or Vector2 objects: `[new Phaser.Math.Vec2(x1, y1), ...]`\r\n * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n * \r\n * By default the `x` and `y` coordinates of this Shape refer to the center of it. However, depending\r\n * on the coordinates of the points provided, the final shape may be rendered offset from its origin.\r\n *\r\n * @class Polygon\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {any} [points] - The points that make up the polygon.\r\n * @param {number} [fillColor] - The color the polygon will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the polygon will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Polygon = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        PolygonRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Polygon (scene, x, y, points, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        Shape.call(this, scene, 'Polygon', new GeomPolygon(points));\r\n\r\n        var bounds = GetAABB(this.geom);\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(bounds.width, bounds.height);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Smooths the polygon over the number of iterations specified.\r\n     * The base polygon data will be updated and replaced with the smoothed values.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Polygon#smooth\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} [iterations=1] - The number of times to apply the polygon smoothing.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    smooth: function (iterations)\r\n    {\r\n        if (iterations === undefined) { iterations = 1; }\r\n\r\n        for (var i = 0; i < iterations; i++)\r\n        {\r\n            Smooth(this.geom);\r\n        }\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Polygon#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var path = [];\r\n        var points = this.geom.points;\r\n\r\n        for (var i = 0; i < points.length; i++)\r\n        {\r\n            path.push(points[i].x, points[i].y);\r\n        }\r\n\r\n        path.push(points[0].x, points[0].y);\r\n\r\n        this.pathIndexes = Earcut(path);\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb24uanM/ODEyZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsNkZBQWlCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNGQUE4QjtBQUNuRCxjQUFjLG1CQUFPLENBQUMsd0ZBQStCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLHdGQUErQjtBQUN6RCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLHNGQUE4Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxnQkFBZ0I7O0FBRXZELHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2x5Z29uUmVuZGVyID0gcmVxdWlyZSgnLi9Qb2x5Z29uUmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBHZXRBQUJCID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL0dldEFBQkInKTtcclxudmFyIEdlb21Qb2x5Z29uID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL1BvbHlnb24nKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxudmFyIFNtb290aCA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcG9seWdvbi9TbW9vdGgnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBQb2x5Z29uIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFRoZSBQb2x5Z29uIFNoYXBlIGlzIGNyZWF0ZWQgYnkgcHJvdmlkaW5nIGEgbGlzdCBvZiBwb2ludHMsIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gY3JlYXRlIGFuXHJcbiAqIGludGVybmFsIFBvbHlnb24gZ2VvbWV0cnkgb2JqZWN0LiBUaGUgcG9pbnRzIGNhbiBiZSBzZXQgZnJvbSBhIHZhcmlldHkgb2YgZm9ybWF0czpcclxuICpcclxuICogLSBBIHN0cmluZyBjb250YWluaW5nIHBhaXJlZCB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlOiBgJzQwIDAgNDAgMjAgMTAwIDIwIDEwMCA4MCA0MCA4MCA0MCAxMDAgMCA1MCdgXHJcbiAqIC0gQW4gYXJyYXkgb2YgUG9pbnQgb3IgVmVjdG9yMiBvYmplY3RzOiBgW25ldyBQaGFzZXIuTWF0aC5WZWMyKHgxLCB5MSksIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllczogYFtvYmoxLCBvYmoyLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIHBhaXJlZCBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHBvaW50IGNvb3JkaW5hdGVzOiBgW3gxLHkxLCB4Mix5MiwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBhcnJheXMgd2l0aCB0d28gZWxlbWVudHMgcmVwcmVzZW50aW5nIHgveSBjb29yZGluYXRlczogYFtbeDEsIHkxXSwgW3gyLCB5Ml0sIC4uLl1gXHJcbiAqIFxyXG4gKiBCeSBkZWZhdWx0IHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBvZiB0aGlzIFNoYXBlIHJlZmVyIHRvIHRoZSBjZW50ZXIgb2YgaXQuIEhvd2V2ZXIsIGRlcGVuZGluZ1xyXG4gKiBvbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyBwcm92aWRlZCwgdGhlIGZpbmFsIHNoYXBlIG1heSBiZSByZW5kZXJlZCBvZmZzZXQgZnJvbSBpdHMgb3JpZ2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgUG9seWdvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2FueX0gW3BvaW50c10gLSBUaGUgcG9pbnRzIHRoYXQgbWFrZSB1cCB0aGUgcG9seWdvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBwb2x5Z29uIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBwb2x5Z29uIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFBvbHlnb24gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFBvbHlnb25SZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQb2x5Z29uIChzY2VuZSwgeCwgeSwgcG9pbnRzLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnUG9seWdvbicsIG5ldyBHZW9tUG9seWdvbihwb2ludHMpKTtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IEdldEFBQkIodGhpcy5nZW9tKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsU3R5bGUoZmlsbENvbG9yLCBmaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU21vb3RocyB0aGUgcG9seWdvbiBvdmVyIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQuXHJcbiAgICAgKiBUaGUgYmFzZSBwb2x5Z29uIGRhdGEgd2lsbCBiZSB1cGRhdGVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBzbW9vdGhlZCB2YWx1ZXMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUG9seWdvbiNzbW9vdGhcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaXRlcmF0aW9ucz0xXSAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gYXBwbHkgdGhlIHBvbHlnb24gc21vb3RoaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNtb290aDogZnVuY3Rpb24gKGl0ZXJhdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBpdGVyYXRpb25zID0gMTsgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNtb290aCh0aGlzLmdlb20pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IHVwZGF0ZXMgdGhlIGRhdGEgYW5kIHBhdGggdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBvbHlnb24jdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2VvbS5wb2ludHM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2gocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IEVhcmN1dChwYXRoKTtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Polygon#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Polygon} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar PolygonCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        var path = src.pathData;\r\n        var pathLength = path.length - 1;\r\n    \r\n        var px1 = path[0] - dx;\r\n        var py1 = path[1] - dy;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.moveTo(px1, py1);\r\n    \r\n        if (!src.closePath)\r\n        {\r\n            pathLength -= 2;\r\n        }\r\n    \r\n        for (var i = 2; i < pathLength; i += 2)\r\n        {\r\n            var px2 = path[i] - dx;\r\n            var py2 = path[i + 1] - dy;\r\n    \r\n            ctx.lineTo(px2, py2);\r\n        }\r\n\r\n        ctx.closePath();\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = PolygonCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25DYW52YXNSZW5kZXJlci5qcz9hOTU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcG9seWdvbi9Qb2x5Z29uQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29uI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUG9seWdvbkNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\");\r\n\r\n/**\r\n * Creates a new Polygon Shape Game Object and adds it to the Scene.\r\n * \r\n * Note: This method will only be available if the Polygon Game Object has been built into Phaser.\r\n * \r\n * The Polygon Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Polygon Shape is created by providing a list of points, which are then used to create an\r\n * internal Polygon geometry object. The points can be set from a variety of formats:\r\n *\r\n * - An array of Point or Vector2 objects: `[new Phaser.Math.Vec2(x1, y1), ...]`\r\n * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n * \r\n * By default the `x` and `y` coordinates of this Shape refer to the center of it. However, depending\r\n * on the coordinates of the points provided, the final shape may be rendered offset from its origin.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#polygon\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {any} [points] - The points that make up the polygon.\r\n * @param {number} [fillColor] - The color the polygon will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the polygon will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Polygon} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('polygon', function (x, y, points, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Polygon(this.scene, x, y, points, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25GYWN0b3J5LmpzPzllODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxjQUFjLG1CQUFPLENBQUMsaUZBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25GYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUG9seWdvbiA9IHJlcXVpcmUoJy4vUG9seWdvbicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUG9seWdvbiBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBQb2x5Z29uIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBcclxuICogVGhlIFBvbHlnb24gU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogVGhlIFBvbHlnb24gU2hhcGUgaXMgY3JlYXRlZCBieSBwcm92aWRpbmcgYSBsaXN0IG9mIHBvaW50cywgd2hpY2ggYXJlIHRoZW4gdXNlZCB0byBjcmVhdGUgYW5cclxuICogaW50ZXJuYWwgUG9seWdvbiBnZW9tZXRyeSBvYmplY3QuIFRoZSBwb2ludHMgY2FuIGJlIHNldCBmcm9tIGEgdmFyaWV0eSBvZiBmb3JtYXRzOlxyXG4gKlxyXG4gKiAtIEFuIGFycmF5IG9mIFBvaW50IG9yIFZlY3RvcjIgb2JqZWN0czogYFtuZXcgUGhhc2VyLk1hdGguVmVjMih4MSwgeTEpLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBwdWJsaWMgeC95IHByb3BlcnRpZXM6IGBbb2JqMSwgb2JqMiwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBwYWlyZWQgbnVtYmVycyB0aGF0IHJlcHJlc2VudCBwb2ludCBjb29yZGluYXRlczogYFt4MSx5MSwgeDIseTIsIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggdHdvIGVsZW1lbnRzIHJlcHJlc2VudGluZyB4L3kgY29vcmRpbmF0ZXM6IGBbW3gxLCB5MV0sIFt4MiwgeTJdLCAuLi5dYFxyXG4gKiBcclxuICogQnkgZGVmYXVsdCB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgb2YgdGhpcyBTaGFwZSByZWZlciB0byB0aGUgY2VudGVyIG9mIGl0LiBIb3dldmVyLCBkZXBlbmRpbmdcclxuICogb24gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgcHJvdmlkZWQsIHRoZSBmaW5hbCBzaGFwZSBtYXkgYmUgcmVuZGVyZWQgb2Zmc2V0IGZyb20gaXRzIG9yaWdpbi5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcG9seWdvblxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7YW55fSBbcG9pbnRzXSAtIFRoZSBwb2ludHMgdGhhdCBtYWtlIHVwIHRoZSBwb2x5Z29uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIHBvbHlnb24gd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHBvbHlnb24gd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdwb2x5Z29uJywgZnVuY3Rpb24gKHgsIHksIHBvaW50cywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgUG9seWdvbih0aGlzLnNjZW5lLCB4LCB5LCBwb2ludHMsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./PolygonWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./PolygonCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25SZW5kZXIuanM/Nzc1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25SZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9Qb2x5Z29uV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9Qb2x5Z29uQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Polygon#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Polygon} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar PolygonWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = PolygonWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25XZWJHTFJlbmRlcmVyLmpzPzZhOTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3BvbHlnb24vUG9seWdvbldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUG9seWdvbiNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUG9seWdvbldlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GeomRectangle = __webpack_require__(/*! ../../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar RectangleRender = __webpack_require__(/*! ./RectangleRender */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Rectangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * You can change the size of the rectangle by changing the `width` and `height` properties.\r\n *\r\n * @class Rectangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the rectangle.\r\n * @param {number} [height=128] - The height of the rectangle.\r\n * @param {number} [fillColor] - The color the rectangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the rectangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Rectangle = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        RectangleRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Rectangle (scene, x, y, width, height, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 128; }\r\n        if (height === undefined) { height = 128; }\r\n\r\n        Shape.call(this, scene, 'Rectangle', new GeomRectangle(0, 0, width, height));\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Rectangle#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var path = [];\r\n        var rect = this.geom;\r\n        var line = this._tempLine;\r\n\r\n        rect.getLineA(line);\r\n\r\n        path.push(line.x1, line.y1, line.x2, line.y2);\r\n\r\n        rect.getLineB(line);\r\n\r\n        path.push(line.x2, line.y2);\r\n\r\n        rect.getLineC(line);\r\n\r\n        path.push(line.x2, line.y2);\r\n\r\n        rect.getLineD(line);\r\n\r\n        path.push(line.x2, line.y2);\r\n\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlLmpzPzUxYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsb0JBQW9CLG1CQUFPLENBQUMsZ0dBQW1DO0FBQy9ELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTtBQUM5QixzQkFBc0IsbUJBQU8sQ0FBQyxtR0FBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3JlY3RhbmdsZS9SZWN0YW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZW9tUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcbnZhciBSZWN0YW5nbGVSZW5kZXIgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIFJlY3RhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgcmVjdGFuZ2xlIGJ5IGNoYW5naW5nIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgUmVjdGFuZ2xlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHJlY3RhbmdsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBSZWN0YW5nbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFJlY3RhbmdsZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJlY3RhbmdsZSAoc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdSZWN0YW5nbGUnLCBuZXcgR2VvbVJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGUjdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmdlb207XHJcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZW1wTGluZTtcclxuXHJcbiAgICAgICAgcmVjdC5nZXRMaW5lQShsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDEsIGxpbmUueTEsIGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICByZWN0LmdldExpbmVCKGxpbmUpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2gobGluZS54MiwgbGluZS55Mik7XHJcblxyXG4gICAgICAgIHJlY3QuZ2V0TGluZUMobGluZSk7XHJcblxyXG4gICAgICAgIHBhdGgucHVzaChsaW5lLngyLCBsaW5lLnkyKTtcclxuXHJcbiAgICAgICAgcmVjdC5nZXRMaW5lRChsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js ***!
  \****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Rectangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Rectangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RectangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n        \r\n            ctx.fillRect(\r\n                -dx,\r\n                -dy,\r\n                src.width,\r\n                src.height\r\n            );\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.rect(\r\n                -dx,\r\n                -dy,\r\n                src.width,\r\n                src.height\r\n            );\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = RectangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXIuanM/NDQ3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVjdGFuZ2xlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZWN0YW5nbGVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgaWYgKHNyYy5pc0ZpbGxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChcclxuICAgICAgICAgICAgICAgIC1keCxcclxuICAgICAgICAgICAgICAgIC1keSxcclxuICAgICAgICAgICAgICAgIHNyYy53aWR0aCxcclxuICAgICAgICAgICAgICAgIHNyYy5oZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5yZWN0KFxyXG4gICAgICAgICAgICAgICAgLWR4LFxyXG4gICAgICAgICAgICAgICAgLWR5LFxyXG4gICAgICAgICAgICAgICAgc3JjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgc3JjLmhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Rectangle Game Object has been built into Phaser.\r\n * \r\n * The Rectangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * You can change the size of the rectangle by changing the `width` and `height` properties.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#rectangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the rectangle.\r\n * @param {number} [height=128] - The height of the rectangle.\r\n * @param {number} [fillColor] - The color the rectangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the rectangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Rectangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('rectangle', function (x, y, width, height, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Rectangle(this.scene, x, y, width, height, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlRmFjdG9yeS5qcz85ZWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7QUFDekQsZ0JBQWdCLG1CQUFPLENBQUMsdUZBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3JlY3RhbmdsZS9SZWN0YW5nbGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlY3RhbmdsZSBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFJlY3RhbmdsZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBSZWN0YW5nbGUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogWW91IGNhbiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIHJlY3RhbmdsZSBieSBjaGFuZ2luZyB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0xMjhdIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgcmVjdGFuZ2xlIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3JlY3RhbmdsZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBSZWN0YW5nbGUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./RectangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./RectangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlUmVuZGVyLmpzPzI2NmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxpSEFBMEI7QUFDcEQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG1IQUEyQjtBQUN0RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZVJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Rectangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Rectangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RectangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        var fillTint = pipeline.fillTint;\r\n        var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n    \r\n        fillTint.TL = fillTintColor;\r\n        fillTint.TR = fillTintColor;\r\n        fillTint.BL = fillTintColor;\r\n        fillTint.BR = fillTintColor;\r\n\r\n        pipeline.setTexture2D();\r\n\r\n        pipeline.batchFillRect(\r\n            -dx,\r\n            -dy,\r\n            src.width,\r\n            src.height\r\n        );\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = RectangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlV2ViR0xSZW5kZXJlci5qcz85MTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsWUFBWSxtQkFBTyxDQUFDLHdGQUErQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyw2QkFBNkI7QUFDeEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL1N0cm9rZVBhdGhXZWJHTCcpO1xyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlY3RhbmdsZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZWN0YW5nbGVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cclxuICAgIHNoYXBlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzaGFwZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KHNoYXBlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgICAgIHZhciBmaWxsVGludENvbG9yID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5maWxsQ29sb3IsIHNyYy5maWxsQWxwaGEgKiBhbHBoYSk7XHJcbiAgICBcclxuICAgICAgICBmaWxsVGludC5UTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuVFIgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LkJMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CUiA9IGZpbGxUaW50Q29sb3I7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG5cclxuICAgICAgICBwaXBlbGluZS5iYXRjaEZpbGxSZWN0KFxyXG4gICAgICAgICAgICAtZHgsXHJcbiAgICAgICAgICAgIC1keSxcclxuICAgICAgICAgICAgc3JjLndpZHRoLFxyXG4gICAgICAgICAgICBzcmMuaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/star/Star.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/star/Star.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StarRender = __webpack_require__(/*! ./StarRender */ \"./node_modules/phaser/src/gameobjects/shape/star/StarRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Star Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * As the name implies, the Star shape will display a star in your game. You can control several\r\n * aspects of it including the number of points that constitute the star. The default is 5. If\r\n * you change it to 4 it will render as a diamond. If you increase them, you'll get a more spiky\r\n * star shape.\r\n * \r\n * You can also control the inner and outer radius, which is how 'long' each point of the star is.\r\n * Modify these values to create more interesting shapes.\r\n *\r\n * @class Star\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [points=5] - The number of points on the star.\r\n * @param {number} [innerRadius=32] - The inner radius of the star.\r\n * @param {number} [outerRadius=64] - The outer radius of the star.\r\n * @param {number} [fillColor] - The color the star will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the star will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Star = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        StarRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Star (scene, x, y, points, innerRadius, outerRadius, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (points === undefined) { points = 5; }\r\n        if (innerRadius === undefined) { innerRadius = 32; }\r\n        if (outerRadius === undefined) { outerRadius = 64; }\r\n\r\n        Shape.call(this, scene, 'Star', null);\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The number of points in the star.\r\n         *\r\n         * @name Phaser.GameObjects.Star#_points\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._points = points;\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The inner radius of the star.\r\n         *\r\n         * @name Phaser.GameObjects.Star#_innerRadius\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._innerRadius = innerRadius;\r\n\r\n        /**\r\n         * Private internal value.\r\n         * The outer radius of the star.\r\n         *\r\n         * @name Phaser.GameObjects.Star#_outerRadius\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._outerRadius = outerRadius;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(outerRadius * 2, outerRadius * 2);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the number of points that make up the Star shape.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Star#setPoints\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} value - The amount of points the Star will have.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setPoints: function (value)\r\n    {\r\n        this._points = value;\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the inner radius of the Star shape.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Star#setInnerRadius\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} value - The amount to set the inner radius to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setInnerRadius: function (value)\r\n    {\r\n        this._innerRadius = value;\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the outer radius of the Star shape.\r\n     * This call can be chained.\r\n     *\r\n     * @method Phaser.GameObjects.Star#setOuterRadius\r\n     * @since 3.13.0\r\n     * \r\n     * @param {number} value - The amount to set the outer radius to.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setOuterRadius: function (value)\r\n    {\r\n        this._outerRadius = value;\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * The number of points that make up the Star shape.\r\n     *\r\n     * @name Phaser.GameObjects.Star#points\r\n     * @type {integer}\r\n     * @default 5\r\n     * @since 3.13.0\r\n     */\r\n    points: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._points;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._points = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The inner radius of the Star shape.\r\n     *\r\n     * @name Phaser.GameObjects.Star#innerRadius\r\n     * @type {number}\r\n     * @default 32\r\n     * @since 3.13.0\r\n     */\r\n    innerRadius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._innerRadius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._innerRadius = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The outer radius of the Star shape.\r\n     *\r\n     * @name Phaser.GameObjects.Star#outerRadius\r\n     * @type {number}\r\n     * @default 64\r\n     * @since 3.13.0\r\n     */\r\n    outerRadius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._outerRadius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._outerRadius = value;\r\n\r\n            this.updateData();\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Star#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var path = [];\r\n\r\n        var points = this._points;\r\n        var innerRadius = this._innerRadius;\r\n        var outerRadius = this._outerRadius;\r\n\r\n        var rot = Math.PI / 2 * 3;\r\n        var step = Math.PI / points;\r\n\r\n        //  So origin 0.5 = the center of the star\r\n        var x = outerRadius;\r\n        var y = outerRadius;\r\n    \r\n        path.push(x, y + -outerRadius);\r\n\r\n        for (var i = 0; i < points; i++)\r\n        {\r\n            path.push(x + Math.cos(rot) * outerRadius, y + Math.sin(rot) * outerRadius);\r\n\r\n            rot += step;\r\n\r\n            path.push(x + Math.cos(rot) * innerRadius, y + Math.sin(rot) * innerRadius);\r\n    \r\n            rot += step;\r\n        }\r\n\r\n        path.push(x, y + -outerRadius);\r\n\r\n        this.pathIndexes = Earcut(path);\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Star;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXIuanM/MzVkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLG1DQUFtQyxZQUFZO0FBQy9DLHdDQUF3QyxrQkFBa0I7QUFDMUQsd0NBQXdDLGtCQUFrQjs7QUFFMUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTdGFyUmVuZGVyID0gcmVxdWlyZSgnLi9TdGFyUmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgU3RhciBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBBcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgU3RhciBzaGFwZSB3aWxsIGRpc3BsYXkgYSBzdGFyIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHNldmVyYWxcclxuICogYXNwZWN0cyBvZiBpdCBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdGhhdCBjb25zdGl0dXRlIHRoZSBzdGFyLiBUaGUgZGVmYXVsdCBpcyA1LiBJZlxyXG4gKiB5b3UgY2hhbmdlIGl0IHRvIDQgaXQgd2lsbCByZW5kZXIgYXMgYSBkaWFtb25kLiBJZiB5b3UgaW5jcmVhc2UgdGhlbSwgeW91J2xsIGdldCBhIG1vcmUgc3Bpa3lcclxuICogc3RhciBzaGFwZS5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaXVzLCB3aGljaCBpcyBob3cgJ2xvbmcnIGVhY2ggcG9pbnQgb2YgdGhlIHN0YXIgaXMuXHJcbiAqIE1vZGlmeSB0aGVzZSB2YWx1ZXMgdG8gY3JlYXRlIG1vcmUgaW50ZXJlc3Rpbmcgc2hhcGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgU3RhclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3BvaW50cz01XSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIG9uIHRoZSBzdGFyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2lubmVyUmFkaXVzPTMyXSAtIFRoZSBpbm5lciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3V0ZXJSYWRpdXM9NjRdIC0gVGhlIG91dGVyIHJhZGl1cyBvZiB0aGUgc3Rhci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBzdGFyIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBzdGFyIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFN0YXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFN0YXJSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTdGFyIChzY2VuZSwgeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHBvaW50cyA9PT0gdW5kZWZpbmVkKSB7IHBvaW50cyA9IDU7IH1cclxuICAgICAgICBpZiAoaW5uZXJSYWRpdXMgPT09IHVuZGVmaW5lZCkgeyBpbm5lclJhZGl1cyA9IDMyOyB9XHJcbiAgICAgICAgaWYgKG91dGVyUmFkaXVzID09PSB1bmRlZmluZWQpIHsgb3V0ZXJSYWRpdXMgPSA2NDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnU3RhcicsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBzdGFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjX3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS5cclxuICAgICAgICAgKiBUaGUgaW5uZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjX2lubmVyUmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pbm5lclJhZGl1cyA9IGlubmVyUmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNfb3V0ZXJSYWRpdXNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX291dGVyUmFkaXVzID0gb3V0ZXJSYWRpdXM7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKG91dGVyUmFkaXVzICogMiwgb3V0ZXJSYWRpdXMgKiAyKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsU3R5bGUoZmlsbENvbG9yLCBmaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBvaW50cyB0aGF0IG1ha2UgdXAgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNzZXRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRoZSBTdGFyIHdpbGwgaGF2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQb2ludHM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wb2ludHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHJhZGl1cyBvZiB0aGUgU3RhciBzaGFwZS5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3NldElubmVyUmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBpbm5lciByYWRpdXMgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW5uZXJSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pbm5lclJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBTdGFyIHNoYXBlLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjc2V0T3V0ZXJSYWRpdXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIG91dGVyIHJhZGl1cyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRPdXRlclJhZGl1czogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX291dGVyUmFkaXVzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBvaW50cyB0aGF0IG1ha2UgdXAgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjcG9pbnRzXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBkZWZhdWx0IDVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb2ludHM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wb2ludHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGlubmVyIHJhZGl1cyBvZiB0aGUgU3RhciBzaGFwZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNpbm5lclJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDMyXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIGlubmVyUmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbm5lclJhZGl1cztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lubmVyUmFkaXVzID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjb3V0ZXJSYWRpdXNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA2NFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBvdXRlclJhZGl1czoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0ZXJSYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRlclJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGF0aCA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5fcG9pbnRzO1xyXG4gICAgICAgIHZhciBpbm5lclJhZGl1cyA9IHRoaXMuX2lubmVyUmFkaXVzO1xyXG4gICAgICAgIHZhciBvdXRlclJhZGl1cyA9IHRoaXMuX291dGVyUmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcm90ID0gTWF0aC5QSSAvIDIgKiAzO1xyXG4gICAgICAgIHZhciBzdGVwID0gTWF0aC5QSSAvIHBvaW50cztcclxuXHJcbiAgICAgICAgLy8gIFNvIG9yaWdpbiAwLjUgPSB0aGUgY2VudGVyIG9mIHRoZSBzdGFyXHJcbiAgICAgICAgdmFyIHggPSBvdXRlclJhZGl1cztcclxuICAgICAgICB2YXIgeSA9IG91dGVyUmFkaXVzO1xyXG4gICAgXHJcbiAgICAgICAgcGF0aC5wdXNoKHgsIHkgKyAtb3V0ZXJSYWRpdXMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50czsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyhyb3QpICogb3V0ZXJSYWRpdXMsIHkgKyBNYXRoLnNpbihyb3QpICogb3V0ZXJSYWRpdXMpO1xyXG5cclxuICAgICAgICAgICAgcm90ICs9IHN0ZXA7XHJcblxyXG4gICAgICAgICAgICBwYXRoLnB1c2goeCArIE1hdGguY29zKHJvdCkgKiBpbm5lclJhZGl1cywgeSArIE1hdGguc2luKHJvdCkgKiBpbm5lclJhZGl1cyk7XHJcbiAgICBcclxuICAgICAgICAgICAgcm90ICs9IHN0ZXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2goeCwgeSArIC1vdXRlclJhZGl1cyk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aEluZGV4ZXMgPSBFYXJjdXQocGF0aCk7XHJcbiAgICAgICAgdGhpcy5wYXRoRGF0YSA9IHBhdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/Star.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Star#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Star} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar StarCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        var path = src.pathData;\r\n        var pathLength = path.length - 1;\r\n    \r\n        var px1 = path[0] - dx;\r\n        var py1 = path[1] - dy;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.moveTo(px1, py1);\r\n    \r\n        if (!src.closePath)\r\n        {\r\n            pathLength -= 2;\r\n        }\r\n    \r\n        for (var i = 2; i < pathLength; i += 2)\r\n        {\r\n            var px2 = path[i] - dx;\r\n            var py2 = path[i + 1] - dy;\r\n    \r\n            ctx.lineTo(px2, py2);\r\n        }\r\n\r\n        ctx.closePath();\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = StarCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJDYW52YXNSZW5kZXJlci5qcz9kMTk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvc3Rhci9TdGFyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TdGFyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3RhckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdGFyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Star = __webpack_require__(/*! ./Star */ \"./node_modules/phaser/src/gameobjects/shape/star/Star.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Star Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Star Game Object has been built into Phaser.\r\n * \r\n * The Star Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * As the name implies, the Star shape will display a star in your game. You can control several\r\n * aspects of it including the number of points that constitute the star. The default is 5. If\r\n * you change it to 4 it will render as a diamond. If you increase them, you'll get a more spiky\r\n * star shape.\r\n * \r\n * You can also control the inner and outer radius, which is how 'long' each point of the star is.\r\n * Modify these values to create more interesting shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#star\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [points=5] - The number of points on the star.\r\n * @param {number} [innerRadius=32] - The inner radius of the star.\r\n * @param {number} [outerRadius=64] - The outer radius of the star.\r\n * @param {number} [fillColor] - The color the star will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the star will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Star} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('star', function (x, y, points, innerRadius, outerRadius, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Star(this.scene, x, y, points, innerRadius, outerRadius, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJGYWN0b3J5LmpzPzNmOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyx3RUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3RhciA9IHJlcXVpcmUoJy4vU3RhcicpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3RhciBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFN0YXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgU3RhciBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBBcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgU3RhciBzaGFwZSB3aWxsIGRpc3BsYXkgYSBzdGFyIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHNldmVyYWxcclxuICogYXNwZWN0cyBvZiBpdCBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdGhhdCBjb25zdGl0dXRlIHRoZSBzdGFyLiBUaGUgZGVmYXVsdCBpcyA1LiBJZlxyXG4gKiB5b3UgY2hhbmdlIGl0IHRvIDQgaXQgd2lsbCByZW5kZXIgYXMgYSBkaWFtb25kLiBJZiB5b3UgaW5jcmVhc2UgdGhlbSwgeW91J2xsIGdldCBhIG1vcmUgc3Bpa3lcclxuICogc3RhciBzaGFwZS5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaXVzLCB3aGljaCBpcyBob3cgJ2xvbmcnIGVhY2ggcG9pbnQgb2YgdGhlIHN0YXIgaXMuXHJcbiAqIE1vZGlmeSB0aGVzZSB2YWx1ZXMgdG8gY3JlYXRlIG1vcmUgaW50ZXJlc3Rpbmcgc2hhcGVzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNzdGFyXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwb2ludHM9NV0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyBvbiB0aGUgc3Rhci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbm5lclJhZGl1cz0zMl0gLSBUaGUgaW5uZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyUmFkaXVzPTY0XSAtIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgc3RhciB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgc3RhciB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlN0YXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3N0YXInLCBmdW5jdGlvbiAoeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFN0YXIodGhpcy5zY2VuZSwgeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarRender.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/star/StarRender.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./StarWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./StarCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJSZW5kZXIuanM/NTUwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9TdGFyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9TdGFyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Star#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Star} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar StarWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = StarWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJXZWJHTFJlbmRlcmVyLmpzPzg2ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3N0YXIvU3RhcldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TdGFyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3RhcldlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdGFyV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GeomTriangle = __webpack_require__(/*! ../../../geom/triangle/Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\nvar TriangleRender = __webpack_require__(/*! ./TriangleRender */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Triangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Triangle consists of 3 lines, joining up to form a triangular shape. You can control the\r\n * position of each point of these lines. The triangle is always closed and cannot have an open\r\n * face. If you require that, consider using a Polygon instead.\r\n *\r\n * @class Triangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n * @param {number} [y1=128] - The vertical position of the first point in the triangle.\r\n * @param {number} [x2=64] - The horizontal position of the second point in the triangle.\r\n * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n * @param {number} [x3=128] - The horizontal position of the third point in the triangle.\r\n * @param {number} [y3=128] - The vertical position of the third point in the triangle.\r\n * @param {number} [fillColor] - The color the triangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the triangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Triangle = new Class({\r\n\r\n    Extends: Shape,\r\n\r\n    Mixins: [\r\n        TriangleRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Triangle (scene, x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 128; }\r\n        if (x2 === undefined) { x2 = 64; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n        if (x3 === undefined) { x3 = 128; }\r\n        if (y3 === undefined) { y3 = 128; }\r\n\r\n        Shape.call(this, scene, 'Triangle', new GeomTriangle(x1, y1, x2, y2, x3, y3));\r\n\r\n        var width = this.geom.right - this.geom.left;\r\n        var height = this.geom.bottom - this.geom.top;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n\r\n        if (fillColor !== undefined)\r\n        {\r\n            this.setFillStyle(fillColor, fillAlpha);\r\n        }\r\n\r\n        this.updateDisplayOrigin();\r\n        this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Sets the data for the lines that make up this Triangle shape.\r\n     *\r\n     * @method Phaser.GameObjects.Triangle#setTo\r\n     * @since 3.13.0\r\n     *\r\n     * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n     * @param {number} [y1=0] - The vertical position of the first point in the triangle.\r\n     * @param {number} [x2=0] - The horizontal position of the second point in the triangle.\r\n     * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n     * @param {number} [x3=0] - The horizontal position of the third point in the triangle.\r\n     * @param {number} [y3=0] - The vertical position of the third point in the triangle.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTo: function (x1, y1, x2, y2, x3, y3)\r\n    {\r\n        this.geom.setTo(x1, y1, x2, y2, x3, y3);\r\n\r\n        return this.updateData();\r\n    },\r\n\r\n    /**\r\n     * Internal method that updates the data and path values.\r\n     *\r\n     * @method Phaser.GameObjects.Triangle#updateData\r\n     * @private\r\n     * @since 3.13.0\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    updateData: function ()\r\n    {\r\n        var path = [];\r\n        var tri = this.geom;\r\n        var line = this._tempLine;\r\n\r\n        tri.getLineA(line);\r\n\r\n        path.push(line.x1, line.y1, line.x2, line.y2);\r\n\r\n        tri.getLineB(line);\r\n\r\n        path.push(line.x2, line.y2);\r\n\r\n        tri.getLineC(line);\r\n\r\n        path.push(line.x2, line.y2);\r\n\r\n        this.pathData = path;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZS5qcz8yN2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxzRUFBVTtBQUM5QixtQkFBbUIsbUJBQU8sQ0FBQyw0RkFBaUM7QUFDNUQscUJBQXFCLG1CQUFPLENBQUMsZ0dBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixTQUFTO0FBQ3hDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVOztBQUV6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcbnZhciBHZW9tVHJpYW5nbGUgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3RyaWFuZ2xlL1RyaWFuZ2xlJyk7XHJcbnZhciBUcmlhbmdsZVJlbmRlciA9IHJlcXVpcmUoJy4vVHJpYW5nbGVSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBUcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBUaGUgVHJpYW5nbGUgY29uc2lzdHMgb2YgMyBsaW5lcywgam9pbmluZyB1cCB0byBmb3JtIGEgdHJpYW5ndWxhciBzaGFwZS4gWW91IGNhbiBjb250cm9sIHRoZVxyXG4gKiBwb3NpdGlvbiBvZiBlYWNoIHBvaW50IG9mIHRoZXNlIGxpbmVzLiBUaGUgdHJpYW5nbGUgaXMgYWx3YXlzIGNsb3NlZCBhbmQgY2Fubm90IGhhdmUgYW4gb3BlblxyXG4gKiBmYWNlLiBJZiB5b3UgcmVxdWlyZSB0aGF0LCBjb25zaWRlciB1c2luZyBhIFBvbHlnb24gaW5zdGVhZC5cclxuICpcclxuICogQGNsYXNzIFRyaWFuZ2xlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDE9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kxPTEyOF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mj02NF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mj0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0xMjhdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mz0xMjhdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB0aGlyZCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgdHJpYW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHRyaWFuZ2xlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBUcmlhbmdsZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRyaWFuZ2xlIChzY2VuZSwgeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDEyODsgfVxyXG4gICAgICAgIGlmICh4MiA9PT0gdW5kZWZpbmVkKSB7IHgyID0gNjQ7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuICAgICAgICBpZiAoeDMgPT09IHVuZGVmaW5lZCkgeyB4MyA9IDEyODsgfVxyXG4gICAgICAgIGlmICh5MyA9PT0gdW5kZWZpbmVkKSB7IHkzID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdUcmlhbmdsZScsIG5ldyBHZW9tVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykpO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdlb20ucmlnaHQgLSB0aGlzLmdlb20ubGVmdDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZW9tLmJvdHRvbSAtIHRoaXMuZ2VvbS50b3A7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkYXRhIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgVHJpYW5nbGUgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gxPTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHNlY29uZCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gzPTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTM9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZW9tLnNldFRvKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgdXBkYXRlcyB0aGUgZGF0YSBhbmQgcGF0aCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHRyaSA9IHRoaXMuZ2VvbTtcclxuICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RlbXBMaW5lO1xyXG5cclxuICAgICAgICB0cmkuZ2V0TGluZUEobGluZSk7XHJcblxyXG4gICAgICAgIHBhdGgucHVzaChsaW5lLngxLCBsaW5lLnkxLCBsaW5lLngyLCBsaW5lLnkyKTtcclxuXHJcbiAgICAgICAgdHJpLmdldExpbmVCKGxpbmUpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2gobGluZS54MiwgbGluZS55Mik7XHJcblxyXG4gICAgICAgIHRyaS5nZXRMaW5lQyhsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJpYW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js ***!
  \**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Triangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Triangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TriangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var ctx = renderer.currentContext;\r\n\r\n    if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n    {\r\n        var dx = src._displayOriginX;\r\n        var dy = src._displayOriginY;\r\n\r\n        var x1 = src.geom.x1 - dx;\r\n        var y1 = src.geom.y1 - dy;\r\n        var x2 = src.geom.x2 - dx;\r\n        var y2 = src.geom.y2 - dy;\r\n        var x3 = src.geom.x3 - dx;\r\n        var y3 = src.geom.y3 - dy;\r\n\r\n        ctx.beginPath();\r\n\r\n        ctx.moveTo(x1, y1);\r\n        ctx.lineTo(x2, y2);\r\n        ctx.lineTo(x3, y3);\r\n\r\n        ctx.closePath();\r\n\r\n        if (src.isFilled)\r\n        {\r\n            FillStyleCanvas(ctx, src);\r\n\r\n            ctx.fill();\r\n        }\r\n\r\n        if (src.isStroked)\r\n        {\r\n            LineStyleCanvas(ctx, src);\r\n\r\n            ctx.stroke();\r\n        }\r\n\r\n        //  Restore the context saved in SetTransform\r\n        ctx.restore();\r\n    }\r\n};\r\n\r\nmodule.exports = TriangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzPzkwYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3RyaWFuZ2xlL1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZSNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBUcmlhbmdsZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgeDEgPSBzcmMuZ2VvbS54MSAtIGR4O1xyXG4gICAgICAgIHZhciB5MSA9IHNyYy5nZW9tLnkxIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gc3JjLmdlb20ueDIgLSBkeDtcclxuICAgICAgICB2YXIgeTIgPSBzcmMuZ2VvbS55MiAtIGR5O1xyXG4gICAgICAgIHZhciB4MyA9IHNyYy5nZW9tLngzIC0gZHg7XHJcbiAgICAgICAgdmFyIHkzID0gc3JjLmdlb20ueTMgLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHgxLCB5MSk7XHJcbiAgICAgICAgY3R4LmxpbmVUbyh4MiwgeTIpO1xyXG4gICAgICAgIGN0eC5saW5lVG8oeDMsIHkzKTtcclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\");\r\n\r\n/**\r\n * Creates a new Triangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Triangle Game Object has been built into Phaser.\r\n * \r\n * The Triangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Triangle consists of 3 lines, joining up to form a triangular shape. You can control the\r\n * position of each point of these lines. The triangle is always closed and cannot have an open\r\n * face. If you require that, consider using a Polygon instead.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#triangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n * @param {number} [y1=128] - The vertical position of the first point in the triangle.\r\n * @param {number} [x2=64] - The horizontal position of the second point in the triangle.\r\n * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n * @param {number} [x3=128] - The horizontal position of the third point in the triangle.\r\n * @param {number} [y3=128] - The vertical position of the third point in the triangle.\r\n * @param {number} [fillColor] - The color the triangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the triangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Triangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('triangle', function (x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha)\r\n{\r\n    return this.displayList.add(new Triangle(this.scene, x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnkuanM/MGUxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyxvRkFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcbnZhciBUcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRyaWFuZ2xlIFNoYXBlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVHJpYW5nbGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgVHJpYW5nbGUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogVGhlIFRyaWFuZ2xlIGNvbnNpc3RzIG9mIDMgbGluZXMsIGpvaW5pbmcgdXAgdG8gZm9ybSBhIHRyaWFuZ3VsYXIgc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGVcclxuICogcG9zaXRpb24gb2YgZWFjaCBwb2ludCBvZiB0aGVzZSBsaW5lcy4gVGhlIHRyaWFuZ2xlIGlzIGFsd2F5cyBjbG9zZWQgYW5kIGNhbm5vdCBoYXZlIGFuIG9wZW5cclxuICogZmFjZS4gSWYgeW91IHJlcXVpcmUgdGhhdCwgY29uc2lkZXIgdXNpbmcgYSBQb2x5Z29uIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3RyaWFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MTI4XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3gyPTY0XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3gzPTEyOF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdGhpcmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kzPTEyOF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSB0cmlhbmdsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgdHJpYW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigndHJpYW5nbGUnLCBmdW5jdGlvbiAoeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVHJpYW5nbGUodGhpcy5zY2VuZSwgeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./TriangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./TriangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZVJlbmRlci5qcz8zZGUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsOEdBQXlCO0FBQ25EOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxnSEFBMEI7QUFDckQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3RyaWFuZ2xlL1RyaWFuZ2xlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vVHJpYW5nbGVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js ***!
  \*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Triangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Triangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TriangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    var pipeline = this.pipeline;\r\n\r\n    var camMatrix = pipeline._tempMatrix1;\r\n    var shapeMatrix = pipeline._tempMatrix2;\r\n    var calcMatrix = pipeline._tempMatrix3;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        shapeMatrix.e = src.x;\r\n        shapeMatrix.f = src.y;\r\n    }\r\n    else\r\n    {\r\n        shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n    }\r\n\r\n    camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n    var dx = src._displayOriginX;\r\n    var dy = src._displayOriginY;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (src.isFilled)\r\n    {\r\n        var fillTint = pipeline.fillTint;\r\n        var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n\r\n        fillTint.TL = fillTintColor;\r\n        fillTint.TR = fillTintColor;\r\n        fillTint.BL = fillTintColor;\r\n        fillTint.BR = fillTintColor;\r\n\r\n        var x1 = src.geom.x1 - dx;\r\n        var y1 = src.geom.y1 - dy;\r\n        var x2 = src.geom.x2 - dx;\r\n        var y2 = src.geom.y2 - dy;\r\n        var x3 = src.geom.x3 - dx;\r\n        var y3 = src.geom.y3 - dy;\r\n\r\n        pipeline.setTexture2D();\r\n\r\n        pipeline.batchFillTriangle(\r\n            x1,\r\n            y1,\r\n            x2,\r\n            y2,\r\n            x3,\r\n            y3,\r\n            shapeMatrix,\r\n            camMatrix\r\n        );\r\n    }\r\n\r\n    if (src.isStroked)\r\n    {\r\n        StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n    }\r\n};\r\n\r\nmodule.exports = TriangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanM/ZTA3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBUcmlhbmdsZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZpbGxUaW50ID0gcGlwZWxpbmUuZmlsbFRpbnQ7XHJcbiAgICAgICAgdmFyIGZpbGxUaW50Q29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxDb2xvciwgc3JjLmZpbGxBbHBoYSAqIGFscGhhKTtcclxuXHJcbiAgICAgICAgZmlsbFRpbnQuVEwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQlIgPSBmaWxsVGludENvbG9yO1xyXG5cclxuICAgICAgICB2YXIgeDEgPSBzcmMuZ2VvbS54MSAtIGR4O1xyXG4gICAgICAgIHZhciB5MSA9IHNyYy5nZW9tLnkxIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gc3JjLmdlb20ueDIgLSBkeDtcclxuICAgICAgICB2YXIgeTIgPSBzcmMuZ2VvbS55MiAtIGR5O1xyXG4gICAgICAgIHZhciB4MyA9IHNyYy5nZW9tLngzIC0gZHg7XHJcbiAgICAgICAgdmFyIHkzID0gc3JjLmdlb20ueTMgLSBkeTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFRyaWFuZ2xlKFxyXG4gICAgICAgICAgICB4MSxcclxuICAgICAgICAgICAgeTEsXHJcbiAgICAgICAgICAgIHgyLFxyXG4gICAgICAgICAgICB5MixcclxuICAgICAgICAgICAgeDMsXHJcbiAgICAgICAgICAgIHkzLFxyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeCxcclxuICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyaWFuZ2xlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/Sprite.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/Sprite.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar SpriteRender = __webpack_require__(/*! ./SpriteRender */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Sprite Game Object.\r\n *\r\n * A Sprite Game Object is used for the display of both static and animated images in your game.\r\n * Sprites can have input events and physics bodies. They can also be tweened, tinted, scrolled\r\n * and animated.\r\n *\r\n * The main difference between a Sprite and an Image Game Object is that you cannot animate Images.\r\n * As such, Sprites take a fraction longer to process and have a larger API footprint due to the Animation\r\n * Component. If you do not require animation then you can safely use Images to replace Sprites in all cases.\r\n *\r\n * @class Sprite\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Sprite = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Size,\r\n        Components.TextureCrop,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        SpriteRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Sprite (scene, x, y, texture, frame)\r\n    {\r\n        GameObject.call(this, scene, 'Sprite');\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        /**\r\n         * The Animation Controller of this Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.Sprite#anims\r\n         * @type {Phaser.GameObjects.Components.Animation}\r\n         * @since 3.0.0\r\n         */\r\n        this.anims = new Components.Animation(this);\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setPosition(x, y);\r\n        this.setSizeToFrame();\r\n        this.setOriginFromFrame();\r\n        this.initPipeline();\r\n    },\r\n\r\n    /**\r\n     * Update this Sprite's animations.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite#preUpdate\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    preUpdate: function (time, delta)\r\n    {\r\n        this.anims.update(time, delta);\r\n    },\r\n\r\n    /**\r\n     * Start playing the given animation.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite#play\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The string-based key of the animation to play.\r\n     * @param {boolean} [ignoreIfPlaying=false] - If an animation is already playing then ignore this call.\r\n     * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite} This Game Object.\r\n     */\r\n    play: function (key, ignoreIfPlaying, startFrame)\r\n    {\r\n        this.anims.play(key, ignoreIfPlaying, startFrame);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Build a JSON representation of this Sprite.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var data = Components.ToJSON(this);\r\n\r\n        //  Extra Sprite data is added here\r\n\r\n        return data;\r\n    },\r\n\r\n    /**\r\n     * Handles the pre-destroy step for the Sprite, which removes the Animation component.\r\n     *\r\n     * @method Phaser.GameObjects.Sprite#preDestroy\r\n     * @private\r\n     * @since 3.14.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.anims.destroy();\r\n\r\n        this.anims = undefined;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Sprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlLmpzP2VhMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIFNwcml0ZVJlbmRlciA9IHJlcXVpcmUoJy4vU3ByaXRlUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNwcml0ZSBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBTcHJpdGUgR2FtZSBPYmplY3QgaXMgdXNlZCBmb3IgdGhlIGRpc3BsYXkgb2YgYm90aCBzdGF0aWMgYW5kIGFuaW1hdGVkIGltYWdlcyBpbiB5b3VyIGdhbWUuXHJcbiAqIFNwcml0ZXMgY2FuIGhhdmUgaW5wdXQgZXZlbnRzIGFuZCBwaHlzaWNzIGJvZGllcy4gVGhleSBjYW4gYWxzbyBiZSB0d2VlbmVkLCB0aW50ZWQsIHNjcm9sbGVkXHJcbiAqIGFuZCBhbmltYXRlZC5cclxuICpcclxuICogVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgU3ByaXRlIGFuZCBhbiBJbWFnZSBHYW1lIE9iamVjdCBpcyB0aGF0IHlvdSBjYW5ub3QgYW5pbWF0ZSBJbWFnZXMuXHJcbiAqIEFzIHN1Y2gsIFNwcml0ZXMgdGFrZSBhIGZyYWN0aW9uIGxvbmdlciB0byBwcm9jZXNzIGFuZCBoYXZlIGEgbGFyZ2VyIEFQSSBmb290cHJpbnQgZHVlIHRvIHRoZSBBbmltYXRpb25cclxuICogQ29tcG9uZW50LiBJZiB5b3UgZG8gbm90IHJlcXVpcmUgYW5pbWF0aW9uIHRoZW4geW91IGNhbiBzYWZlbHkgdXNlIEltYWdlcyB0byByZXBsYWNlIFNwcml0ZXMgaW4gYWxsIGNhc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgU3ByaXRlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgU3ByaXRlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuT3JpZ2luLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZUNyb3AsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UaW50LFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBTcHJpdGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTcHJpdGUgKHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdTcHJpdGUnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI19jcm9wXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jcm9wID0gdGhpcy5yZXNldENyb3BPYmplY3QoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEFuaW1hdGlvbiBDb250cm9sbGVyIG9mIHRoaXMgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZSNhbmltc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmltcyA9IG5ldyBDb21wb25lbnRzLkFuaW1hdGlvbih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRleHR1cmUsIGZyYW1lKTtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuc2V0U2l6ZVRvRnJhbWUoKTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbkZyb21GcmFtZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoaXMgU3ByaXRlJ3MgYW5pbWF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjcHJlVXBkYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmltcy51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IHBsYXlpbmcgdGhlIGdpdmVuIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjcGxheVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUlmUGxheWluZz1mYWxzZV0gLSBJZiBhbiBhbmltYXRpb24gaXMgYWxyZWFkeSBwbGF5aW5nIHRoZW4gaWdub3JlIHRoaXMgY2FsbC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBPcHRpb25hbGx5IHN0YXJ0IHRoZSBhbmltYXRpb24gcGxheWluZyBmcm9tIHRoaXMgZnJhbWUgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcGxheTogZnVuY3Rpb24gKGtleSwgaWdub3JlSWZQbGF5aW5nLCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMucGxheShrZXksIGlnbm9yZUlmUGxheWluZywgc3RhcnRGcmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFNwcml0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IENvbXBvbmVudHMuVG9KU09OKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgRXh0cmEgU3ByaXRlIGRhdGEgaXMgYWRkZWQgaGVyZVxyXG5cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBwcmUtZGVzdHJveSBzdGVwIGZvciB0aGUgU3ByaXRlLCB3aGljaCByZW1vdmVzIHRoZSBBbmltYXRpb24gY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZSNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTQuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmFuaW1zID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/Sprite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Sprite#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Sprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar SpriteCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = SpriteCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ2FudmFzUmVuZGVyZXIuanM/NDk3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFNwcml0ZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar BuildGameObjectAnimation = __webpack_require__(/*! ../BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Sprite = __webpack_require__(/*! ./Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * Creates a new Sprite Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Sprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#sprite\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('sprite', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n    var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n    var sprite = new Sprite(this.scene, 0, 0, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, sprite, config);\r\n\r\n    //  Sprite specific config options:\r\n\r\n    BuildGameObjectAnimation(sprite, config);\r\n\r\n    return sprite;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ3JlYXRvci5qcz84NTRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsK0JBQStCLG1CQUFPLENBQUMsc0dBQTZCO0FBQ3BFLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsYUFBYSxtQkFBTyxDQUFDLHdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2Q0FBNkM7QUFDeEQsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZUNyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdEFuaW1hdGlvbicpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuL1Nwcml0ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3ByaXRlIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3Nwcml0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuU3ByaXRlLlNwcml0ZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3Nwcml0ZScsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBrZXkgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2tleScsIG51bGwpO1xyXG4gICAgdmFyIGZyYW1lID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmcmFtZScsIG51bGwpO1xyXG5cclxuICAgIHZhciBzcHJpdGUgPSBuZXcgU3ByaXRlKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHNwcml0ZSwgY29uZmlnKTtcclxuXHJcbiAgICAvLyAgU3ByaXRlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zOlxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbihzcHJpdGUsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Sprite = __webpack_require__(/*! ./Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * Creates a new Sprite Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Sprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#sprite\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('sprite', function (x, y, key, frame)\r\n{\r\n    var sprite = new Sprite(this.scene, x, y, key, frame);\r\n\r\n    this.displayList.add(sprite);\r\n    this.updateList.add(sprite);\r\n\r\n    return sprite;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlRmFjdG9yeS5qcz85M2E5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsYUFBYSxtQkFBTyxDQUFDLHdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgU3ByaXRlID0gcmVxdWlyZSgnLi9TcHJpdGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNwcml0ZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNwcml0ZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3ByaXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3Nwcml0ZScsIGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlMaXN0LmFkZChzcHJpdGUpO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZChzcHJpdGUpO1xyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./SpriteWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./SpriteCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlUmVuZGVyLmpzP2ExNzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZVJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1Nwcml0ZVdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vU3ByaXRlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Sprite#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Sprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar SpriteWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    this.pipeline.batchSprite(src, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = SpriteWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlV2ViR0xSZW5kZXJlci5qcz9kYTdlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3ByaXRlV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hTcHJpdGUoc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/GetTextSize.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/GetTextSize.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns an object containing dimensions of the Text object.\r\n *\r\n * @function Phaser.GameObjects.Text.GetTextSize\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Text} text - The Text object to calculate the size from.\r\n * @param {Phaser.Types.GameObjects.Text.TextMetrics} size - The Text metrics to use when calculating the size.\r\n * @param {array} lines - The lines of text to calculate the size from.\r\n *\r\n * @return {object} An object containing dimensions of the Text object.\r\n */\r\nvar GetTextSize = function (text, size, lines)\r\n{\r\n    var canvas = text.canvas;\r\n    var context = text.context;\r\n    var style = text.style;\r\n\r\n    var lineWidths = [];\r\n    var maxLineWidth = 0;\r\n    var drawnLines = lines.length;\r\n\r\n    if (style.maxLines > 0 && style.maxLines < lines.length)\r\n    {\r\n        drawnLines = style.maxLines;\r\n    }\r\n\r\n    style.syncFont(canvas, context);\r\n\r\n    //  Text Width\r\n\r\n    for (var i = 0; i < drawnLines; i++)\r\n    {\r\n        var lineWidth = style.strokeThickness;\r\n\r\n        lineWidth += context.measureText(lines[i]).width;\r\n\r\n        // Adjust for wrapped text\r\n        if (style.wordWrap)\r\n        {\r\n            lineWidth -= context.measureText(' ').width;\r\n        }\r\n\r\n        lineWidths[i] = Math.ceil(lineWidth);\r\n        maxLineWidth = Math.max(maxLineWidth, lineWidths[i]);\r\n    }\r\n\r\n    //  Text Height\r\n\r\n    var lineHeight = size.fontSize + style.strokeThickness;\r\n    var height = lineHeight * drawnLines;\r\n    var lineSpacing = text.lineSpacing;\r\n\r\n    //  Adjust for line spacing\r\n    if (drawnLines > 1)\r\n    {\r\n        height += lineSpacing * (drawnLines - 1);\r\n    }\r\n\r\n    return {\r\n        width: maxLineWidth,\r\n        height: height,\r\n        lines: drawnLines,\r\n        lineWidths: lineWidths,\r\n        lineSpacing: lineSpacing,\r\n        lineHeight: lineHeight\r\n    };\r\n};\r\n\r\nmodule.exports = GetTextSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L0dldFRleHRTaXplLmpzP2VjNjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsMENBQTBDO0FBQ3JELFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L0dldFRleHRTaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBkaW1lbnNpb25zIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0LkdldFRleHRTaXplXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSB0ZXh0IC0gVGhlIFRleHQgb2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5UZXh0LlRleHRNZXRyaWNzfSBzaXplIC0gVGhlIFRleHQgbWV0cmljcyB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgc2l6ZS5cclxuICogQHBhcmFtIHthcnJheX0gbGluZXMgLSBUaGUgbGluZXMgb2YgdGV4dCB0byBjYWxjdWxhdGUgdGhlIHNpemUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBkaW1lbnNpb25zIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICovXHJcbnZhciBHZXRUZXh0U2l6ZSA9IGZ1bmN0aW9uICh0ZXh0LCBzaXplLCBsaW5lcylcclxue1xyXG4gICAgdmFyIGNhbnZhcyA9IHRleHQuY2FudmFzO1xyXG4gICAgdmFyIGNvbnRleHQgPSB0ZXh0LmNvbnRleHQ7XHJcbiAgICB2YXIgc3R5bGUgPSB0ZXh0LnN0eWxlO1xyXG5cclxuICAgIHZhciBsaW5lV2lkdGhzID0gW107XHJcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcclxuICAgIHZhciBkcmF3bkxpbmVzID0gbGluZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChzdHlsZS5tYXhMaW5lcyA+IDAgJiYgc3R5bGUubWF4TGluZXMgPCBsaW5lcy5sZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgZHJhd25MaW5lcyA9IHN0eWxlLm1heExpbmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0eWxlLnN5bmNGb250KGNhbnZhcywgY29udGV4dCk7XHJcblxyXG4gICAgLy8gIFRleHQgV2lkdGhcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYXduTGluZXM7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICBsaW5lV2lkdGggKz0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XHJcblxyXG4gICAgICAgIC8vIEFkanVzdCBmb3Igd3JhcHBlZCB0ZXh0XHJcbiAgICAgICAgaWYgKHN0eWxlLndvcmRXcmFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGluZVdpZHRoIC09IGNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBNYXRoLmNlaWwobGluZVdpZHRoKTtcclxuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aHNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBUZXh0IEhlaWdodFxyXG5cclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gc2l6ZS5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcclxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogZHJhd25MaW5lcztcclxuICAgIHZhciBsaW5lU3BhY2luZyA9IHRleHQubGluZVNwYWNpbmc7XHJcblxyXG4gICAgLy8gIEFkanVzdCBmb3IgbGluZSBzcGFjaW5nXHJcbiAgICBpZiAoZHJhd25MaW5lcyA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgaGVpZ2h0ICs9IGxpbmVTcGFjaW5nICogKGRyYXduTGluZXMgLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiBtYXhMaW5lV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgbGluZXM6IGRyYXduTGluZXMsXHJcbiAgICAgICAgbGluZVdpZHRoczogbGluZVdpZHRocyxcclxuICAgICAgICBsaW5lU3BhY2luZzogbGluZVNwYWNpbmcsXHJcbiAgICAgICAgbGluZUhlaWdodDogbGluZUhlaWdodFxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VGV4dFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/GetTextSize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/MeasureText.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/MeasureText.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Calculates the ascent, descent and fontSize of a given font style.\r\n *\r\n * @function Phaser.GameObjects.Text.MeasureText\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.TextStyle} textStyle - The TextStyle object to measure.\r\n *\r\n * @return {Phaser.Types.GameObjects.Text.TextMetrics} An object containing the ascent, descent and fontSize of the TextStyle.\r\n */\r\nvar MeasureText = function (textStyle)\r\n{\r\n    // @property {HTMLCanvasElement} canvas - The canvas element that the text is rendered.\r\n    var canvas = CanvasPool.create(this);\r\n\r\n    // @property {HTMLCanvasElement} context - The context of the canvas element that the text is rendered to.\r\n    var context = canvas.getContext('2d');\r\n\r\n    textStyle.syncFont(canvas, context);\r\n\r\n    var width = Math.ceil(context.measureText(textStyle.testString).width * textStyle.baselineX);\r\n    var baseline = width;\r\n    var height = 2 * baseline;\r\n\r\n    baseline = baseline * textStyle.baselineY | 0;\r\n\r\n    canvas.width = width;\r\n    canvas.height = height;\r\n\r\n    context.fillStyle = '#f00';\r\n    context.fillRect(0, 0, width, height);\r\n\r\n    context.font = textStyle._font;\r\n\r\n    context.textBaseline = 'alphabetic';\r\n    context.fillStyle = '#000';\r\n    context.fillText(textStyle.testString, 0, baseline);\r\n\r\n    var output = {\r\n        ascent: 0,\r\n        descent: 0,\r\n        fontSize: 0\r\n    };\r\n\r\n    if (!context.getImageData(0, 0, width, height))\r\n    {\r\n        output.ascent = baseline;\r\n        output.descent = baseline + 6;\r\n        output.fontSize = output.ascent + output.descent;\r\n\r\n        CanvasPool.remove(canvas);\r\n\r\n        return output;\r\n    }\r\n\r\n    var imagedata = context.getImageData(0, 0, width, height).data;\r\n    var pixels = imagedata.length;\r\n    var line = width * 4;\r\n    var i;\r\n    var j;\r\n    var idx = 0;\r\n    var stop = false;\r\n\r\n    // ascent. scan from top to bottom until we find a non red pixel\r\n    for (i = 0; i < baseline; i++)\r\n    {\r\n        for (j = 0; j < line; j += 4)\r\n        {\r\n            if (imagedata[idx + j] !== 255)\r\n            {\r\n                stop = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!stop)\r\n        {\r\n            idx += line;\r\n        }\r\n        else\r\n        {\r\n            break;\r\n        }\r\n    }\r\n\r\n    output.ascent = baseline - i;\r\n\r\n    idx = pixels - line;\r\n    stop = false;\r\n\r\n    // descent. scan from bottom to top until we find a non red pixel\r\n    for (i = height; i > baseline; i--)\r\n    {\r\n        for (j = 0; j < line; j += 4)\r\n        {\r\n            if (imagedata[idx + j] !== 255)\r\n            {\r\n                stop = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!stop)\r\n        {\r\n            idx -= line;\r\n        }\r\n        else\r\n        {\r\n            break;\r\n        }\r\n    }\r\n\r\n    output.descent = (i - baseline);\r\n    output.fontSize = output.ascent + output.descent;\r\n\r\n    CanvasPool.remove(canvas);\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = MeasureText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L01lYXN1cmVUZXh0LmpzP2ExZDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSxZQUFZLDBDQUEwQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvTWVhc3VyZVRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250IHN0eWxlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdhbWVPYmplY3RzLlRleHQuTWVhc3VyZVRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZX0gdGV4dFN0eWxlIC0gVGhlIFRleHRTdHlsZSBvYmplY3QgdG8gbWVhc3VyZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dE1ldHJpY3N9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIHRoZSBUZXh0U3R5bGUuXHJcbiAqL1xyXG52YXIgTWVhc3VyZVRleHQgPSBmdW5jdGlvbiAodGV4dFN0eWxlKVxyXG57XHJcbiAgICAvLyBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgLSBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZC5cclxuICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzKTtcclxuXHJcbiAgICAvLyBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8uXHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIHRleHRTdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG5cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KHRleHRTdHlsZS50ZXN0U3RyaW5nKS53aWR0aCAqIHRleHRTdHlsZS5iYXNlbGluZVgpO1xyXG4gICAgdmFyIGJhc2VsaW5lID0gd2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xyXG5cclxuICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiB0ZXh0U3R5bGUuYmFzZWxpbmVZIHwgMDtcclxuXHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XHJcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIGNvbnRleHQuZm9udCA9IHRleHRTdHlsZS5fZm9udDtcclxuXHJcbiAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcclxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xyXG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0U3R5bGUudGVzdFN0cmluZywgMCwgYmFzZWxpbmUpO1xyXG5cclxuICAgIHZhciBvdXRwdXQgPSB7XHJcbiAgICAgICAgYXNjZW50OiAwLFxyXG4gICAgICAgIGRlc2NlbnQ6IDAsXHJcbiAgICAgICAgZm9udFNpemU6IDBcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSlcclxuICAgIHtcclxuICAgICAgICBvdXRwdXQuYXNjZW50ID0gYmFzZWxpbmU7XHJcbiAgICAgICAgb3V0cHV0LmRlc2NlbnQgPSBiYXNlbGluZSArIDY7XHJcbiAgICAgICAgb3V0cHV0LmZvbnRTaXplID0gb3V0cHV0LmFzY2VudCArIG91dHB1dC5kZXNjZW50O1xyXG5cclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZShjYW52YXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xyXG4gICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XHJcbiAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIGo7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxyXG4gICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWR4ICs9IGxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xyXG5cclxuICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XHJcbiAgICBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcclxuICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWR4IC09IGxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQuZGVzY2VudCA9IChpIC0gYmFzZWxpbmUpO1xyXG4gICAgb3V0cHV0LmZvbnRTaXplID0gb3V0cHV0LmFzY2VudCArIG91dHB1dC5kZXNjZW50O1xyXG5cclxuICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNhbnZhcyk7XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVhc3VyZVRleHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/MeasureText.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/TextStyle.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/TextStyle.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MeasureText = __webpack_require__(/*! ./MeasureText */ \"./node_modules/phaser/src/gameobjects/text/MeasureText.js\");\r\n\r\n//  Key: [ Object Key, Default Value ]\r\n\r\nvar propertyMap = {\r\n    fontFamily: [ 'fontFamily', 'Courier' ],\r\n    fontSize: [ 'fontSize', '16px' ],\r\n    fontStyle: [ 'fontStyle', '' ],\r\n    backgroundColor: [ 'backgroundColor', null ],\r\n    color: [ 'color', '#fff' ],\r\n    stroke: [ 'stroke', '#fff' ],\r\n    strokeThickness: [ 'strokeThickness', 0 ],\r\n    shadowOffsetX: [ 'shadow.offsetX', 0 ],\r\n    shadowOffsetY: [ 'shadow.offsetY', 0 ],\r\n    shadowColor: [ 'shadow.color', '#000' ],\r\n    shadowBlur: [ 'shadow.blur', 0 ],\r\n    shadowStroke: [ 'shadow.stroke', false ],\r\n    shadowFill: [ 'shadow.fill', false ],\r\n    align: [ 'align', 'left' ],\r\n    maxLines: [ 'maxLines', 0 ],\r\n    fixedWidth: [ 'fixedWidth', 0 ],\r\n    fixedHeight: [ 'fixedHeight', 0 ],\r\n    resolution: [ 'resolution', 0 ],\r\n    rtl: [ 'rtl', false ],\r\n    testString: [ 'testString', '|MÉqgy' ],\r\n    baselineX: [ 'baselineX', 1.2 ],\r\n    baselineY: [ 'baselineY', 1.4 ],\r\n    wordWrapWidth: [ 'wordWrap.width', null ],\r\n    wordWrapCallback: [ 'wordWrap.callback', null ],\r\n    wordWrapCallbackScope: [ 'wordWrap.callbackScope', null ],\r\n    wordWrapUseAdvanced: [ 'wordWrap.useAdvancedWrap', false ]\r\n};\r\n\r\n/**\r\n * @classdesc\r\n * A TextStyle class manages all of the style settings for a Text object.\r\n * \r\n * Text Game Objects create a TextStyle instance automatically, which is\r\n * accessed via the `Text.style` property. You do not normally need to\r\n * instantiate one yourself.\r\n *\r\n * @class TextStyle\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Text} text - The Text object that this TextStyle is styling.\r\n * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The style settings to set.\r\n */\r\nvar TextStyle = new Class({\r\n\r\n    initialize:\r\n\r\n    function TextStyle (text, style)\r\n    {\r\n        /**\r\n         * The Text object that this TextStyle is styling.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#parent\r\n         * @type {Phaser.GameObjects.Text}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = text;\r\n\r\n        /**\r\n         * The font family.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#fontFamily\r\n         * @type {string}\r\n         * @default 'Courier'\r\n         * @since 3.0.0\r\n         */\r\n        this.fontFamily;\r\n\r\n        /**\r\n         * The font size.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#fontSize\r\n         * @type {string}\r\n         * @default '16px'\r\n         * @since 3.0.0\r\n         */\r\n        this.fontSize;\r\n\r\n        /**\r\n         * The font style.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#fontStyle\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.fontStyle;\r\n\r\n        /**\r\n         * The background color.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#backgroundColor\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.backgroundColor;\r\n\r\n        /**\r\n         * The text fill color.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#color\r\n         * @type {string}\r\n         * @default '#fff'\r\n         * @since 3.0.0\r\n         */\r\n        this.color;\r\n\r\n        /**\r\n         * The text stroke color.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#stroke\r\n         * @type {string}\r\n         * @default '#fff'\r\n         * @since 3.0.0\r\n         */\r\n        this.stroke;\r\n\r\n        /**\r\n         * The text stroke thickness.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#strokeThickness\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.strokeThickness;\r\n\r\n        /**\r\n         * The horizontal shadow offset.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowOffsetX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowOffsetX;\r\n\r\n        /**\r\n         * The vertical shadow offset.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowOffsetY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowOffsetY;\r\n\r\n        /**\r\n         * The shadow color.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowColor\r\n         * @type {string}\r\n         * @default '#000'\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowColor;\r\n\r\n        /**\r\n         * The shadow blur radius.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowBlur\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowBlur;\r\n\r\n        /**\r\n         * Whether shadow stroke is enabled or not.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowStroke\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowStroke;\r\n\r\n        /**\r\n         * Whether shadow fill is enabled or not.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#shadowFill\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.shadowFill;\r\n\r\n        /**\r\n         * The text alignment.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#align\r\n         * @type {string}\r\n         * @default 'left'\r\n         * @since 3.0.0\r\n         */\r\n        this.align;\r\n\r\n        /**\r\n         * The maximum number of lines to draw.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#maxLines\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.maxLines;\r\n\r\n        /**\r\n         * The fixed width of the text.\r\n         *\r\n         * `0` means no fixed with.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#fixedWidth\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.fixedWidth;\r\n\r\n        /**\r\n         * The fixed height of the text.\r\n         *\r\n         * `0` means no fixed height.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#fixedHeight\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.fixedHeight;\r\n\r\n        /**\r\n         * The resolution the text is rendered to its internal canvas at.\r\n         * The default is 0, which means it will use the resolution set in the Game Config.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#resolution\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.12.0\r\n         */\r\n        this.resolution;\r\n\r\n        /**\r\n         * Whether the text should render right to left.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#rtl\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.rtl;\r\n\r\n        /**\r\n         * The test string to use when measuring the font.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#testString\r\n         * @type {string}\r\n         * @default '|MÉqgy'\r\n         * @since 3.0.0\r\n         */\r\n        this.testString;\r\n\r\n        /**\r\n         * The amount of horizontal padding added to the width of the text when calculating the font metrics.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#baselineX\r\n         * @type {number}\r\n         * @default 1.2\r\n         * @since 3.3.0\r\n         */\r\n        this.baselineX;\r\n\r\n        /**\r\n         * The amount of vertical padding added to the height of the text when calculating the font metrics.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#baselineY\r\n         * @type {number}\r\n         * @default 1.4\r\n         * @since 3.3.0\r\n         */\r\n        this.baselineY;\r\n\r\n        /**\r\n         * The font style, size and family.\r\n         *\r\n         * @name Phaser.GameObjects.TextStyle#_font\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._font;\r\n\r\n        //  Set to defaults + user style\r\n        this.setStyle(style, false, true);\r\n\r\n        var metrics = GetValue(style, 'metrics', false);\r\n\r\n        //  Provide optional TextMetrics in the style object to avoid the canvas look-up / scanning\r\n        //  Doing this is reset if you then change the font of this TextStyle after creation\r\n        if (metrics)\r\n        {\r\n            this.metrics = {\r\n                ascent: GetValue(metrics, 'ascent', 0),\r\n                descent: GetValue(metrics, 'descent', 0),\r\n                fontSize: GetValue(metrics, 'fontSize', 0)\r\n            };\r\n        }\r\n        else\r\n        {\r\n            this.metrics = MeasureText(this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Set the text style.\r\n     *\r\n     * @example\r\n     * text.setStyle({\r\n     *     fontSize: '64px',\r\n     *     fontFamily: 'Arial',\r\n     *     color: '#ffffff',\r\n     *     align: 'center',\r\n     *     backgroundColor: '#ff00ff'\r\n     * });\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The style settings to set.\r\n     * @param {boolean} [updateText=true] - Whether to update the text immediately.\r\n     * @param {boolean} [setDefaults=false] - Use the default values is not set, or the local values.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setStyle: function (style, updateText, setDefaults)\r\n    {\r\n        if (updateText === undefined) { updateText = true; }\r\n        if (setDefaults === undefined) { setDefaults = false; }\r\n\r\n        //  Avoid type mutation\r\n        if (style && style.hasOwnProperty('fontSize') && typeof style.fontSize === 'number')\r\n        {\r\n            style.fontSize = style.fontSize.toString() + 'px';\r\n        }\r\n\r\n        for (var key in propertyMap)\r\n        {\r\n            var value = (setDefaults) ? propertyMap[key][1] : this[key];\r\n\r\n            if (key === 'wordWrapCallback' || key === 'wordWrapCallbackScope')\r\n            {\r\n                // Callback & scope should be set without processing the values\r\n                this[key] = GetValue(style, propertyMap[key][0], value);\r\n            }\r\n            else\r\n            {\r\n                this[key] = GetAdvancedValue(style, propertyMap[key][0], value);\r\n            }\r\n        }\r\n\r\n        //  Allow for 'font' override\r\n        var font = GetValue(style, 'font', null);\r\n\r\n        if (font !== null)\r\n        {\r\n            this.setFont(font, false);\r\n        }\r\n\r\n        this._font = [ this.fontStyle, this.fontSize, this.fontFamily ].join(' ').trim();\r\n\r\n        //  Allow for 'fill' to be used in place of 'color'\r\n        var fill = GetValue(style, 'fill', null);\r\n\r\n        if (fill !== null)\r\n        {\r\n            this.color = fill;\r\n        }\r\n\r\n        if (updateText)\r\n        {\r\n            return this.update(true);\r\n        }\r\n        else\r\n        {\r\n            return this.parent;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Synchronize the font settings to the given Canvas Rendering Context.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#syncFont\r\n     * @since 3.0.0\r\n     *\r\n     * @param {HTMLCanvasElement} canvas - The Canvas Element.\r\n     * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n     */\r\n    syncFont: function (canvas, context)\r\n    {\r\n        context.font = this._font;\r\n    },\r\n\r\n    /**\r\n     * Synchronize the text style settings to the given Canvas Rendering Context.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#syncStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {HTMLCanvasElement} canvas - The Canvas Element.\r\n     * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n     */\r\n    syncStyle: function (canvas, context)\r\n    {\r\n        context.textBaseline = 'alphabetic';\r\n\r\n        context.fillStyle = this.color;\r\n        context.strokeStyle = this.stroke;\r\n\r\n        context.lineWidth = this.strokeThickness;\r\n        context.lineCap = 'round';\r\n        context.lineJoin = 'round';\r\n    },\r\n\r\n    /**\r\n     * Synchronize the shadow settings to the given Canvas Rendering Context.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#syncShadow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n     * @param {boolean} enabled - Whether shadows are enabled or not.\r\n     */\r\n    syncShadow: function (context, enabled)\r\n    {\r\n        if (enabled)\r\n        {\r\n            context.shadowOffsetX = this.shadowOffsetX;\r\n            context.shadowOffsetY = this.shadowOffsetY;\r\n            context.shadowColor = this.shadowColor;\r\n            context.shadowBlur = this.shadowBlur;\r\n        }\r\n        else\r\n        {\r\n            context.shadowOffsetX = 0;\r\n            context.shadowOffsetY = 0;\r\n            context.shadowColor = 0;\r\n            context.shadowBlur = 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Update the style settings for the parent Text object.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} recalculateMetrics - Whether to recalculate font and text metrics.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    update: function (recalculateMetrics)\r\n    {\r\n        if (recalculateMetrics)\r\n        {\r\n            this._font = [ this.fontStyle, this.fontSize, this.fontFamily ].join(' ').trim();\r\n\r\n            this.metrics = MeasureText(this);\r\n        }\r\n\r\n        return this.parent.updateText();\r\n    },\r\n\r\n    /**\r\n     * Set the font.\r\n     *\r\n     * If a string is given, the font family is set.\r\n     *\r\n     * If an object is given, the `fontFamily`, `fontSize` and `fontStyle`\r\n     * properties of that object are set.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFont\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|object)} font - The font family or font settings to set.\r\n     * @param {boolean} [updateText=true] - Whether to update the text immediately.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFont: function (font, updateText)\r\n    {\r\n        if (updateText === undefined) { updateText = true; }\r\n\r\n        var fontFamily = font;\r\n        var fontSize = '';\r\n        var fontStyle = '';\r\n\r\n        if (typeof font !== 'string')\r\n        {\r\n            fontFamily = GetValue(font, 'fontFamily', 'Courier');\r\n            fontSize = GetValue(font, 'fontSize', '16px');\r\n            fontStyle = GetValue(font, 'fontStyle', '');\r\n        }\r\n        else\r\n        {\r\n            var fontSplit = font.split(' ');\r\n\r\n            var i = 0;\r\n\r\n            fontStyle = (fontSplit.length > 2) ? fontSplit[i++] : '';\r\n            fontSize = fontSplit[i++] || '16px';\r\n            fontFamily = fontSplit[i++] || 'Courier';\r\n        }\r\n\r\n        if (fontFamily !== this.fontFamily || fontSize !== this.fontSize || fontStyle !== this.fontStyle)\r\n        {\r\n            this.fontFamily = fontFamily;\r\n            this.fontSize = fontSize;\r\n            this.fontStyle = fontStyle;\r\n\r\n            if (updateText)\r\n            {\r\n                this.update(true);\r\n            }\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Set the font family.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFontFamily\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} family - The font family.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFontFamily: function (family)\r\n    {\r\n        if (this.fontFamily !== family)\r\n        {\r\n            this.fontFamily = family;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Set the font style.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFontStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} style - The font style.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFontStyle: function (style)\r\n    {\r\n        if (this.fontStyle !== style)\r\n        {\r\n            this.fontStyle = style;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Set the font size.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFontSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|string)} size - The font size.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFontSize: function (size)\r\n    {\r\n        if (typeof size === 'number')\r\n        {\r\n            size = size.toString() + 'px';\r\n        }\r\n\r\n        if (this.fontSize !== size)\r\n        {\r\n            this.fontSize = size;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Set the test string to use when measuring the font.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setTestString\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} string - The test string to use when measuring the font.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setTestString: function (string)\r\n    {\r\n        this.testString = string;\r\n\r\n        return this.update(true);\r\n    },\r\n\r\n    /**\r\n     * Set a fixed width and height for the text.\r\n     *\r\n     * Pass in `0` for either of these parameters to disable fixed width or height respectively.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFixedSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The fixed width to set.\r\n     * @param {number} height - The fixed height to set.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFixedSize: function (width, height)\r\n    {\r\n        this.fixedWidth = width;\r\n        this.fixedHeight = height;\r\n\r\n        if (width)\r\n        {\r\n            this.parent.width = width;\r\n        }\r\n\r\n        if (height)\r\n        {\r\n            this.parent.height = height;\r\n        }\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the background color.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setBackgroundColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The background color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setBackgroundColor: function (color)\r\n    {\r\n        this.backgroundColor = color;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the text fill color.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setFill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The text fill color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setFill: function (color)\r\n    {\r\n        this.color = color;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the text fill color.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The text fill color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setColor: function (color)\r\n    {\r\n        this.color = color;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the resolution used by the Text object.\r\n     *\r\n     * By default it will be set to match the resolution set in the Game Config,\r\n     * but you can override it via this method. It allows for much clearer text on High DPI devices,\r\n     * at the cost of memory because it uses larger internal Canvas textures for the Text.\r\n     * \r\n     * Please use with caution, as the more high res Text you have, the more memory it uses up.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setResolution\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} value - The resolution for this Text object to use.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setResolution: function (value)\r\n    {\r\n        this.resolution = value;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the stroke settings.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setStroke\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The stroke color.\r\n     * @param {number} thickness - The stroke thickness.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setStroke: function (color, thickness)\r\n    {\r\n        if (thickness === undefined) { thickness = this.strokeThickness; }\r\n\r\n        if (color === undefined && this.strokeThickness !== 0)\r\n        {\r\n            //  Reset the stroke to zero (disabling it)\r\n            this.strokeThickness = 0;\r\n\r\n            this.update(true);\r\n        }\r\n        else if (this.stroke !== color || this.strokeThickness !== thickness)\r\n        {\r\n            this.stroke = color;\r\n            this.strokeThickness = thickness;\r\n\r\n            this.update(true);\r\n        }\r\n\r\n        return this.parent;\r\n    },\r\n\r\n    /**\r\n     * Set the shadow settings.\r\n     * \r\n     * Calling this method always re-measures the parent Text object,\r\n     * so only call it when you actually change the shadow settings.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal shadow offset.\r\n     * @param {number} [y=0] - The vertical shadow offset.\r\n     * @param {string} [color='#000'] - The shadow color.\r\n     * @param {number} [blur=0] - The shadow blur radius.\r\n     * @param {boolean} [shadowStroke=false] - Whether to stroke the shadow.\r\n     * @param {boolean} [shadowFill=true] - Whether to fill the shadow.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadow: function (x, y, color, blur, shadowStroke, shadowFill)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (color === undefined) { color = '#000'; }\r\n        if (blur === undefined) { blur = 0; }\r\n        if (shadowStroke === undefined) { shadowStroke = false; }\r\n        if (shadowFill === undefined) { shadowFill = true; }\r\n\r\n        this.shadowOffsetX = x;\r\n        this.shadowOffsetY = y;\r\n        this.shadowColor = color;\r\n        this.shadowBlur = blur;\r\n        this.shadowStroke = shadowStroke;\r\n        this.shadowFill = shadowFill;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow offset.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadowOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal shadow offset.\r\n     * @param {number} [y=0] - The vertical shadow offset.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadowOffset: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.shadowOffsetX = x;\r\n        this.shadowOffsetY = y;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow color.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadowColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [color='#000'] - The shadow color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadowColor: function (color)\r\n    {\r\n        if (color === undefined) { color = '#000'; }\r\n\r\n        this.shadowColor = color;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow blur radius.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadowBlur\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [blur=0] - The shadow blur radius.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadowBlur: function (blur)\r\n    {\r\n        if (blur === undefined) { blur = 0; }\r\n\r\n        this.shadowBlur = blur;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Enable or disable shadow stroke.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadowStroke\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} enabled - Whether shadow stroke is enabled or not.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadowStroke: function (enabled)\r\n    {\r\n        this.shadowStroke = enabled;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Enable or disable shadow fill.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setShadowFill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} enabled - Whether shadow fill is enabled or not.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setShadowFill: function (enabled)\r\n    {\r\n        this.shadowFill = enabled;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the width (in pixels) to use for wrapping lines.\r\n     *\r\n     * Pass in null to remove wrapping by width.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setWordWrapWidth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The maximum width of a line in pixels. Set to null to remove wrapping.\r\n     * @param {boolean} [useAdvancedWrap=false] - Whether or not to use the advanced wrapping\r\n     * algorithm. If true, spaces are collapsed and whitespace is trimmed from lines. If false,\r\n     * spaces and whitespace are left as is.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setWordWrapWidth: function (width, useAdvancedWrap)\r\n    {\r\n        if (useAdvancedWrap === undefined) { useAdvancedWrap = false; }\r\n\r\n        this.wordWrapWidth = width;\r\n        this.wordWrapUseAdvanced = useAdvancedWrap;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set a custom callback for wrapping lines.\r\n     *\r\n     * Pass in null to remove wrapping by callback.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setWordWrapCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {TextStyleWordWrapCallback} callback - A custom function that will be responsible for wrapping the\r\n     * text. It will receive two arguments: text (the string to wrap), textObject (this Text\r\n     * instance). It should return the wrapped lines either as an array of lines or as a string with\r\n     * newline characters in place to indicate where breaks should happen.\r\n     * @param {object} [scope=null] - The scope that will be applied when the callback is invoked.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setWordWrapCallback: function (callback, scope)\r\n    {\r\n        if (scope === undefined) { scope = null; }\r\n\r\n        this.wordWrapCallback = callback;\r\n        this.wordWrapCallbackScope = scope;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the alignment of the text in this Text object.\r\n     * \r\n     * The argument can be one of: `left`, `right`, `center` or `justify`.\r\n     * \r\n     * Alignment only works if the Text object has more than one line of text.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setAlign\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [align='left'] - The text alignment for multi-line text.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setAlign: function (align)\r\n    {\r\n        if (align === undefined) { align = 'left'; }\r\n\r\n        this.align = align;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Set the maximum number of lines to draw.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#setMaxLines\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [max=0] - The maximum number of lines to draw.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} The parent Text object.\r\n     */\r\n    setMaxLines: function (max)\r\n    {\r\n        if (max === undefined) { max = 0; }\r\n\r\n        this.maxLines = max;\r\n\r\n        return this.update(false);\r\n    },\r\n\r\n    /**\r\n     * Get the current text metrics.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#getTextMetrics\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.GameObjects.Text.TextMetrics} The text metrics.\r\n     */\r\n    getTextMetrics: function ()\r\n    {\r\n        var metrics = this.metrics;\r\n\r\n        return {\r\n            ascent: metrics.ascent,\r\n            descent: metrics.descent,\r\n            fontSize: metrics.fontSize\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Build a JSON representation of this Text Style.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} A JSON representation of this Text Style.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var output = {};\r\n\r\n        for (var key in propertyMap)\r\n        {\r\n            output[key] = this[key];\r\n        }\r\n\r\n        output.metrics = this.getTextMetrics();\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Destroy this Text Style.\r\n     *\r\n     * @method Phaser.GameObjects.TextStyle#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.parent = undefined;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TextStyle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L1RleHRTdHlsZS5qcz9iNDk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQztBQUNwRSxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGdGQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjtBQUMxRCx3Q0FBd0MscUJBQXFCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSx5QkFBeUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QyxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxrQ0FBa0M7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsa0NBQWtDLGdCQUFnQjtBQUNsRCxpQ0FBaUMsVUFBVTtBQUMzQyx5Q0FBeUMsc0JBQXNCO0FBQy9ELHVDQUF1QyxtQkFBbUI7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjs7QUFFbEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7O0FBRTNDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7O0FBRXJFO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjs7QUFFbEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7O0FBRXpDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMENBQTBDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGV4dC9UZXh0U3R5bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBNZWFzdXJlVGV4dCA9IHJlcXVpcmUoJy4vTWVhc3VyZVRleHQnKTtcclxuXHJcbi8vICBLZXk6IFsgT2JqZWN0IEtleSwgRGVmYXVsdCBWYWx1ZSBdXHJcblxyXG52YXIgcHJvcGVydHlNYXAgPSB7XHJcbiAgICBmb250RmFtaWx5OiBbICdmb250RmFtaWx5JywgJ0NvdXJpZXInIF0sXHJcbiAgICBmb250U2l6ZTogWyAnZm9udFNpemUnLCAnMTZweCcgXSxcclxuICAgIGZvbnRTdHlsZTogWyAnZm9udFN0eWxlJywgJycgXSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogWyAnYmFja2dyb3VuZENvbG9yJywgbnVsbCBdLFxyXG4gICAgY29sb3I6IFsgJ2NvbG9yJywgJyNmZmYnIF0sXHJcbiAgICBzdHJva2U6IFsgJ3N0cm9rZScsICcjZmZmJyBdLFxyXG4gICAgc3Ryb2tlVGhpY2tuZXNzOiBbICdzdHJva2VUaGlja25lc3MnLCAwIF0sXHJcbiAgICBzaGFkb3dPZmZzZXRYOiBbICdzaGFkb3cub2Zmc2V0WCcsIDAgXSxcclxuICAgIHNoYWRvd09mZnNldFk6IFsgJ3NoYWRvdy5vZmZzZXRZJywgMCBdLFxyXG4gICAgc2hhZG93Q29sb3I6IFsgJ3NoYWRvdy5jb2xvcicsICcjMDAwJyBdLFxyXG4gICAgc2hhZG93Qmx1cjogWyAnc2hhZG93LmJsdXInLCAwIF0sXHJcbiAgICBzaGFkb3dTdHJva2U6IFsgJ3NoYWRvdy5zdHJva2UnLCBmYWxzZSBdLFxyXG4gICAgc2hhZG93RmlsbDogWyAnc2hhZG93LmZpbGwnLCBmYWxzZSBdLFxyXG4gICAgYWxpZ246IFsgJ2FsaWduJywgJ2xlZnQnIF0sXHJcbiAgICBtYXhMaW5lczogWyAnbWF4TGluZXMnLCAwIF0sXHJcbiAgICBmaXhlZFdpZHRoOiBbICdmaXhlZFdpZHRoJywgMCBdLFxyXG4gICAgZml4ZWRIZWlnaHQ6IFsgJ2ZpeGVkSGVpZ2h0JywgMCBdLFxyXG4gICAgcmVzb2x1dGlvbjogWyAncmVzb2x1dGlvbicsIDAgXSxcclxuICAgIHJ0bDogWyAncnRsJywgZmFsc2UgXSxcclxuICAgIHRlc3RTdHJpbmc6IFsgJ3Rlc3RTdHJpbmcnLCAnfE3Dg+KAsHFneScgXSxcclxuICAgIGJhc2VsaW5lWDogWyAnYmFzZWxpbmVYJywgMS4yIF0sXHJcbiAgICBiYXNlbGluZVk6IFsgJ2Jhc2VsaW5lWScsIDEuNCBdLFxyXG4gICAgd29yZFdyYXBXaWR0aDogWyAnd29yZFdyYXAud2lkdGgnLCBudWxsIF0sXHJcbiAgICB3b3JkV3JhcENhbGxiYWNrOiBbICd3b3JkV3JhcC5jYWxsYmFjaycsIG51bGwgXSxcclxuICAgIHdvcmRXcmFwQ2FsbGJhY2tTY29wZTogWyAnd29yZFdyYXAuY2FsbGJhY2tTY29wZScsIG51bGwgXSxcclxuICAgIHdvcmRXcmFwVXNlQWR2YW5jZWQ6IFsgJ3dvcmRXcmFwLnVzZUFkdmFuY2VkV3JhcCcsIGZhbHNlIF1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGV4dFN0eWxlIGNsYXNzIG1hbmFnZXMgYWxsIG9mIHRoZSBzdHlsZSBzZXR0aW5ncyBmb3IgYSBUZXh0IG9iamVjdC5cclxuICogXHJcbiAqIFRleHQgR2FtZSBPYmplY3RzIGNyZWF0ZSBhIFRleHRTdHlsZSBpbnN0YW5jZSBhdXRvbWF0aWNhbGx5LCB3aGljaCBpc1xyXG4gKiBhY2Nlc3NlZCB2aWEgdGhlIGBUZXh0LnN0eWxlYCBwcm9wZXJ0eS4gWW91IGRvIG5vdCBub3JtYWxseSBuZWVkIHRvXHJcbiAqIGluc3RhbnRpYXRlIG9uZSB5b3Vyc2VsZi5cclxuICpcclxuICogQGNsYXNzIFRleHRTdHlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gdGV4dCAtIFRoZSBUZXh0IG9iamVjdCB0aGF0IHRoaXMgVGV4dFN0eWxlIGlzIHN0eWxpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dFN0eWxlfSBzdHlsZSAtIFRoZSBzdHlsZSBzZXR0aW5ncyB0byBzZXQuXHJcbiAqL1xyXG52YXIgVGV4dFN0eWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRleHRTdHlsZSAodGV4dCwgc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRleHQgb2JqZWN0IHRoYXQgdGhpcyBUZXh0U3R5bGUgaXMgc3R5bGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gdGV4dDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZvbnQgZmFtaWx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNmb250RmFtaWx5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnQ291cmllcidcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRGYW1pbHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmb250IHNpemUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2ZvbnRTaXplXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnMTZweCdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRTaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZm9udCBzdHlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjZm9udFN0eWxlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRTdHlsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJhY2tncm91bmQgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2JhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0IGZpbGwgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2NvbG9yXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnI2ZmZidcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbG9yO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCBzdHJva2UgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3N0cm9rZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJyNmZmYnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdHJva2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0IHN0cm9rZSB0aGlja25lc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3N0cm9rZVRoaWNrbmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzaGFkb3dPZmZzZXRYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXRYO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2hhZG93IG9mZnNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93T2Zmc2V0WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0WTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcjMDAwJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NoYWRvd0JsdXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgc2hhZG93IHN0cm9rZSBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93U3Ryb2tlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWRvd1N0cm9rZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93RmlsbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkb3dGaWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCBhbGlnbm1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2FsaWduXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnbGVmdCdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsaWduO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gZHJhdy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjbWF4TGluZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhMaW5lcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpeGVkIHdpZHRoIG9mIHRoZSB0ZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogYDBgIG1lYW5zIG5vIGZpeGVkIHdpdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2ZpeGVkV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpeGVkV2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaXhlZCBoZWlnaHQgb2YgdGhlIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBgMGAgbWVhbnMgbm8gZml4ZWQgaGVpZ2h0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNmaXhlZEhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZml4ZWRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByZXNvbHV0aW9uIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIHRvIGl0cyBpbnRlcm5hbCBjYW52YXMgYXQuXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgaXMgMCwgd2hpY2ggbWVhbnMgaXQgd2lsbCB1c2UgdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjcmVzb2x1dGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRleHQgc2hvdWxkIHJlbmRlciByaWdodCB0byBsZWZ0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNydGxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucnRsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGVzdCBzdHJpbmcgdG8gdXNlIHdoZW4gbWVhc3VyaW5nIHRoZSBmb250LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSN0ZXN0U3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnfE3DiXFneSdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRlc3RTdHJpbmc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgaG9yaXpvbnRhbCBwYWRkaW5nIGFkZGVkIHRvIHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBmb250IG1ldHJpY3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2Jhc2VsaW5lWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMS4yXHJcbiAgICAgICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYXNlbGluZVg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgdmVydGljYWwgcGFkZGluZyBhZGRlZCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGZvbnQgbWV0cmljcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjYmFzZWxpbmVZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxLjRcclxuICAgICAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VsaW5lWTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZvbnQgc3R5bGUsIHNpemUgYW5kIGZhbWlseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjX2ZvbnRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZm9udDtcclxuXHJcbiAgICAgICAgLy8gIFNldCB0byBkZWZhdWx0cyArIHVzZXIgc3R5bGVcclxuICAgICAgICB0aGlzLnNldFN0eWxlKHN0eWxlLCBmYWxzZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBtZXRyaWNzID0gR2V0VmFsdWUoc3R5bGUsICdtZXRyaWNzJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyAgUHJvdmlkZSBvcHRpb25hbCBUZXh0TWV0cmljcyBpbiB0aGUgc3R5bGUgb2JqZWN0IHRvIGF2b2lkIHRoZSBjYW52YXMgbG9vay11cCAvIHNjYW5uaW5nXHJcbiAgICAgICAgLy8gIERvaW5nIHRoaXMgaXMgcmVzZXQgaWYgeW91IHRoZW4gY2hhbmdlIHRoZSBmb250IG9mIHRoaXMgVGV4dFN0eWxlIGFmdGVyIGNyZWF0aW9uXHJcbiAgICAgICAgaWYgKG1ldHJpY3MpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1ldHJpY3MgPSB7XHJcbiAgICAgICAgICAgICAgICBhc2NlbnQ6IEdldFZhbHVlKG1ldHJpY3MsICdhc2NlbnQnLCAwKSxcclxuICAgICAgICAgICAgICAgIGRlc2NlbnQ6IEdldFZhbHVlKG1ldHJpY3MsICdkZXNjZW50JywgMCksXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogR2V0VmFsdWUobWV0cmljcywgJ2ZvbnRTaXplJywgMClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gTWVhc3VyZVRleHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGV4dC5zZXRTdHlsZSh7XHJcbiAgICAgKiAgICAgZm9udFNpemU6ICc2NHB4JyxcclxuICAgICAqICAgICBmb250RmFtaWx5OiAnQXJpYWwnLFxyXG4gICAgICogICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgKiAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICogICAgIGJhY2tncm91bmRDb2xvcjogJyNmZjAwZmYnXHJcbiAgICAgKiB9KTtcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dFN0eWxlfSBzdHlsZSAtIFRoZSBzdHlsZSBzZXR0aW5ncyB0byBzZXQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVUZXh0PXRydWVdIC0gV2hldGhlciB0byB1cGRhdGUgdGhlIHRleHQgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXREZWZhdWx0cz1mYWxzZV0gLSBVc2UgdGhlIGRlZmF1bHQgdmFsdWVzIGlzIG5vdCBzZXQsIG9yIHRoZSBsb2NhbCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUsIHVwZGF0ZVRleHQsIHNldERlZmF1bHRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh1cGRhdGVUZXh0ID09PSB1bmRlZmluZWQpIHsgdXBkYXRlVGV4dCA9IHRydWU7IH1cclxuICAgICAgICBpZiAoc2V0RGVmYXVsdHMgPT09IHVuZGVmaW5lZCkgeyBzZXREZWZhdWx0cyA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIC8vICBBdm9pZCB0eXBlIG11dGF0aW9uXHJcbiAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLmhhc093blByb3BlcnR5KCdmb250U2l6ZScpICYmIHR5cGVvZiBzdHlsZS5mb250U2l6ZSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzdHlsZS5mb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnR5TWFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gKHNldERlZmF1bHRzKSA/IHByb3BlcnR5TWFwW2tleV1bMV0gOiB0aGlzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnd29yZFdyYXBDYWxsYmFjaycgfHwga2V5ID09PSAnd29yZFdyYXBDYWxsYmFja1Njb3BlJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgJiBzY29wZSBzaG91bGQgYmUgc2V0IHdpdGhvdXQgcHJvY2Vzc2luZyB0aGUgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBHZXRWYWx1ZShzdHlsZSwgcHJvcGVydHlNYXBba2V5XVswXSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gR2V0QWR2YW5jZWRWYWx1ZShzdHlsZSwgcHJvcGVydHlNYXBba2V5XVswXSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWxsb3cgZm9yICdmb250JyBvdmVycmlkZVxyXG4gICAgICAgIHZhciBmb250ID0gR2V0VmFsdWUoc3R5bGUsICdmb250JywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChmb250ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGb250KGZvbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvbnQgPSBbIHRoaXMuZm9udFN0eWxlLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRGYW1pbHkgXS5qb2luKCcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyAgQWxsb3cgZm9yICdmaWxsJyB0byBiZSB1c2VkIGluIHBsYWNlIG9mICdjb2xvcidcclxuICAgICAgICB2YXIgZmlsbCA9IEdldFZhbHVlKHN0eWxlLCAnZmlsbCcsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBmaWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRleHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemUgdGhlIGZvbnQgc2V0dGluZ3MgdG8gdGhlIGdpdmVuIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc3luY0ZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBDYW52YXMgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqL1xyXG4gICAgc3luY0ZvbnQ6IGZ1bmN0aW9uIChjYW52YXMsIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgY29udGV4dC5mb250ID0gdGhpcy5fZm9udDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTeW5jaHJvbml6ZSB0aGUgdGV4dCBzdHlsZSBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzeW5jU3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBDYW52YXMgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqL1xyXG4gICAgc3luY1N0eWxlOiBmdW5jdGlvbiAoY2FudmFzLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xyXG5cclxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3I7XHJcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHRoaXMuc3Ryb2tlO1xyXG5cclxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlVGhpY2tuZXNzO1xyXG4gICAgICAgIGNvbnRleHQubGluZUNhcCA9ICdyb3VuZCc7XHJcbiAgICAgICAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemUgdGhlIHNoYWRvdyBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzeW5jU2hhZG93XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY29udGV4dCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHNoYWRvd3MgYXJlIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBzeW5jU2hhZG93OiBmdW5jdGlvbiAoY29udGV4dCwgZW5hYmxlZClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5hYmxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2hhZG93T2Zmc2V0WCA9IHRoaXMuc2hhZG93T2Zmc2V0WDtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dPZmZzZXRZID0gdGhpcy5zaGFkb3dPZmZzZXRZO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd0NvbG9yID0gdGhpcy5zaGFkb3dDb2xvcjtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dCbHVyID0gdGhpcy5zaGFkb3dCbHVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd09mZnNldFggPSAwO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd09mZnNldFkgPSAwO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd0NvbG9yID0gMDtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dCbHVyID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBzdHlsZSBzZXR0aW5ncyBmb3IgdGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY2FsY3VsYXRlTWV0cmljcyAtIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgZm9udCBhbmQgdGV4dCBtZXRyaWNzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZWNhbGN1bGF0ZU1ldHJpY3MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlY2FsY3VsYXRlTWV0cmljcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQgPSBbIHRoaXMuZm9udFN0eWxlLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRGYW1pbHkgXS5qb2luKCcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gTWVhc3VyZVRleHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQudXBkYXRlVGV4dCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgZm9udC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIHN0cmluZyBpcyBnaXZlbiwgdGhlIGZvbnQgZmFtaWx5IGlzIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgZ2l2ZW4sIHRoZSBgZm9udEZhbWlseWAsIGBmb250U2l6ZWAgYW5kIGBmb250U3R5bGVgXHJcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIHRoYXQgb2JqZWN0IGFyZSBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xvYmplY3QpfSBmb250IC0gVGhlIGZvbnQgZmFtaWx5IG9yIGZvbnQgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlVGV4dD10cnVlXSAtIFdoZXRoZXIgdG8gdXBkYXRlIHRoZSB0ZXh0IGltbWVkaWF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250OiBmdW5jdGlvbiAoZm9udCwgdXBkYXRlVGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlVGV4dCA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVRleHQgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBmb250RmFtaWx5ID0gZm9udDtcclxuICAgICAgICB2YXIgZm9udFNpemUgPSAnJztcclxuICAgICAgICB2YXIgZm9udFN0eWxlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZm9udCAhPT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb250RmFtaWx5ID0gR2V0VmFsdWUoZm9udCwgJ2ZvbnRGYW1pbHknLCAnQ291cmllcicpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSA9IEdldFZhbHVlKGZvbnQsICdmb250U2l6ZScsICcxNnB4Jyk7XHJcbiAgICAgICAgICAgIGZvbnRTdHlsZSA9IEdldFZhbHVlKGZvbnQsICdmb250U3R5bGUnLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmb250U3BsaXQgPSBmb250LnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb250U3R5bGUgPSAoZm9udFNwbGl0Lmxlbmd0aCA+IDIpID8gZm9udFNwbGl0W2krK10gOiAnJztcclxuICAgICAgICAgICAgZm9udFNpemUgPSBmb250U3BsaXRbaSsrXSB8fCAnMTZweCc7XHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHkgPSBmb250U3BsaXRbaSsrXSB8fCAnQ291cmllcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9udEZhbWlseSAhPT0gdGhpcy5mb250RmFtaWx5IHx8IGZvbnRTaXplICE9PSB0aGlzLmZvbnRTaXplIHx8IGZvbnRTdHlsZSAhPT0gdGhpcy5mb250U3R5bGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTaXplID0gZm9udFNpemU7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udFN0eWxlID0gZm9udFN0eWxlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVwZGF0ZVRleHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0Rm9udEZhbWlseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhbWlseSAtIFRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udEZhbWlseTogZnVuY3Rpb24gKGZhbWlseSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mb250RmFtaWx5ICE9PSBmYW1pbHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSBmYW1pbHk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGZvbnQgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlIC0gVGhlIGZvbnQgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmZvbnRTdHlsZSAhPT0gc3R5bGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTdHlsZSA9IHN0eWxlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZSAtIFRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTaXplOiBmdW5jdGlvbiAoc2l6ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2l6ZSA9IHNpemUudG9TdHJpbmcoKSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb250U2l6ZSAhPT0gc2l6ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0ZXN0IHN0cmluZyB0byB1c2Ugd2hlbiBtZWFzdXJpbmcgdGhlIGZvbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFRlc3RTdHJpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgdGVzdCBzdHJpbmcgdG8gdXNlIHdoZW4gbWVhc3VyaW5nIHRoZSBmb250LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXN0U3RyaW5nOiBmdW5jdGlvbiAoc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGVzdFN0cmluZyA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIGZpeGVkIHdpZHRoIGFuZCBoZWlnaHQgZm9yIHRoZSB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIFBhc3MgaW4gYDBgIGZvciBlaXRoZXIgb2YgdGhlc2UgcGFyYW1ldGVycyB0byBkaXNhYmxlIGZpeGVkIHdpZHRoIG9yIGhlaWdodCByZXNwZWN0aXZlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZpeGVkU2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGZpeGVkIHdpZHRoIHRvIHNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgZml4ZWQgaGVpZ2h0IHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rml4ZWRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpeGVkV2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmZpeGVkSGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAod2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRCYWNrZ3JvdW5kQ29sb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRGaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIHRleHQgZmlsbCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSByZXNvbHV0aW9uIHVzZWQgYnkgdGhlIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZyxcclxuICAgICAqIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IHZpYSB0aGlzIG1ldGhvZC4gSXQgYWxsb3dzIGZvciBtdWNoIGNsZWFyZXIgdGV4dCBvbiBIaWdoIERQSSBkZXZpY2VzLFxyXG4gICAgICogYXQgdGhlIGNvc3Qgb2YgbWVtb3J5IGJlY2F1c2UgaXQgdXNlcyBsYXJnZXIgaW50ZXJuYWwgQ2FudmFzIHRleHR1cmVzIGZvciB0aGUgVGV4dC5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIHVzZSB3aXRoIGNhdXRpb24sIGFzIHRoZSBtb3JlIGhpZ2ggcmVzIFRleHQgeW91IGhhdmUsIHRoZSBtb3JlIG1lbW9yeSBpdCB1c2VzIHVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJlc29sdXRpb24gZm9yIHRoaXMgVGV4dCBvYmplY3QgdG8gdXNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzdHJva2Ugc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFN0cm9rZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIHN0cm9rZSBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aGlja25lc3MgLSBUaGUgc3Ryb2tlIHRoaWNrbmVzcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U3Ryb2tlOiBmdW5jdGlvbiAoY29sb3IsIHRoaWNrbmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpY2tuZXNzID09PSB1bmRlZmluZWQpIHsgdGhpY2tuZXNzID0gdGhpcy5zdHJva2VUaGlja25lc3M7IH1cclxuXHJcbiAgICAgICAgaWYgKGNvbG9yID09PSB1bmRlZmluZWQgJiYgdGhpcy5zdHJva2VUaGlja25lc3MgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUmVzZXQgdGhlIHN0cm9rZSB0byB6ZXJvIChkaXNhYmxpbmcgaXQpXHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0cm9rZSAhPT0gY29sb3IgfHwgdGhpcy5zdHJva2VUaGlja25lc3MgIT09IHRoaWNrbmVzcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlID0gY29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgc2V0dGluZ3MuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgYWx3YXlzIHJlLW1lYXN1cmVzIHRoZSBwYXJlbnQgVGV4dCBvYmplY3QsXHJcbiAgICAgKiBzbyBvbmx5IGNhbGwgaXQgd2hlbiB5b3UgYWN0dWFsbHkgY2hhbmdlIHRoZSBzaGFkb3cgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj0nIzAwMCddIC0gVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmx1cj0wXSAtIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaGFkb3dTdHJva2U9ZmFsc2VdIC0gV2hldGhlciB0byBzdHJva2UgdGhlIHNoYWRvdy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NoYWRvd0ZpbGw9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZpbGwgdGhlIHNoYWRvdy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93OiBmdW5jdGlvbiAoeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7IGNvbG9yID0gJyMwMDAnOyB9XHJcbiAgICAgICAgaWYgKGJsdXIgPT09IHVuZGVmaW5lZCkgeyBibHVyID0gMDsgfVxyXG4gICAgICAgIGlmIChzaGFkb3dTdHJva2UgPT09IHVuZGVmaW5lZCkgeyBzaGFkb3dTdHJva2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChzaGFkb3dGaWxsID09PSB1bmRlZmluZWQpIHsgc2hhZG93RmlsbCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXRYID0geDtcclxuICAgICAgICB0aGlzLnNoYWRvd09mZnNldFkgPSB5O1xyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXIgPSBibHVyO1xyXG4gICAgICAgIHRoaXMuc2hhZG93U3Ryb2tlID0gc2hhZG93U3Ryb2tlO1xyXG4gICAgICAgIHRoaXMuc2hhZG93RmlsbCA9IHNoYWRvd0ZpbGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRTaGFkb3dPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHNoYWRvdyBvZmZzZXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNoYWRvd09mZnNldFggPSB4O1xyXG4gICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0WSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd0NvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPScjMDAwJ10gLSBUaGUgc2hhZG93IGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7IGNvbG9yID0gJyMwMDAnOyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3IgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U2hhZG93Qmx1clxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtibHVyPTBdIC0gVGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93Qmx1cjogZnVuY3Rpb24gKGJsdXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJsdXIgPT09IHVuZGVmaW5lZCkgeyBibHVyID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXIgPSBibHVyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHNoYWRvdyBzdHJva2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd1N0cm9rZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgc3Ryb2tlIGlzIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dTdHJva2U6IGZ1bmN0aW9uIChlbmFibGVkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2hhZG93U3Ryb2tlID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzaGFkb3cgZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U2hhZG93RmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93RmlsbDogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaGFkb3dGaWxsID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdpZHRoIChpbiBwaXhlbHMpIHRvIHVzZSBmb3Igd3JhcHBpbmcgbGluZXMuXHJcbiAgICAgKlxyXG4gICAgICogUGFzcyBpbiBudWxsIHRvIHJlbW92ZSB3cmFwcGluZyBieSB3aWR0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0V29yZFdyYXBXaWR0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG1heGltdW0gd2lkdGggb2YgYSBsaW5lIGluIHBpeGVscy4gU2V0IHRvIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXNlQWR2YW5jZWRXcmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgYWR2YW5jZWQgd3JhcHBpbmdcclxuICAgICAqIGFsZ29yaXRobS4gSWYgdHJ1ZSwgc3BhY2VzIGFyZSBjb2xsYXBzZWQgYW5kIHdoaXRlc3BhY2UgaXMgdHJpbW1lZCBmcm9tIGxpbmVzLiBJZiBmYWxzZSxcclxuICAgICAqIHNwYWNlcyBhbmQgd2hpdGVzcGFjZSBhcmUgbGVmdCBhcyBpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBXaWR0aDogZnVuY3Rpb24gKHdpZHRoLCB1c2VBZHZhbmNlZFdyYXApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVzZUFkdmFuY2VkV3JhcCA9PT0gdW5kZWZpbmVkKSB7IHVzZUFkdmFuY2VkV3JhcCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMud29yZFdyYXBXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMud29yZFdyYXBVc2VBZHZhbmNlZCA9IHVzZUFkdmFuY2VkV3JhcDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjdXN0b20gY2FsbGJhY2sgZm9yIHdyYXBwaW5nIGxpbmVzLlxyXG4gICAgICpcclxuICAgICAqIFBhc3MgaW4gbnVsbCB0byByZW1vdmUgd3JhcHBpbmcgYnkgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFdvcmRXcmFwQ2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VGV4dFN0eWxlV29yZFdyYXBDYWxsYmFja30gY2FsbGJhY2sgLSBBIGN1c3RvbSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHdyYXBwaW5nIHRoZVxyXG4gICAgICogdGV4dC4gSXQgd2lsbCByZWNlaXZlIHR3byBhcmd1bWVudHM6IHRleHQgKHRoZSBzdHJpbmcgdG8gd3JhcCksIHRleHRPYmplY3QgKHRoaXMgVGV4dFxyXG4gICAgICogaW5zdGFuY2UpLiBJdCBzaG91bGQgcmV0dXJuIHRoZSB3cmFwcGVkIGxpbmVzIGVpdGhlciBhcyBhbiBhcnJheSBvZiBsaW5lcyBvciBhcyBhIHN0cmluZyB3aXRoXHJcbiAgICAgKiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gcGxhY2UgdG8gaW5kaWNhdGUgd2hlcmUgYnJlYWtzIHNob3VsZCBoYXBwZW4uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3Njb3BlPW51bGxdIC0gVGhlIHNjb3BlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFdvcmRXcmFwQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgc2NvcGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNjb3BlID09PSB1bmRlZmluZWQpIHsgc2NvcGUgPSBudWxsOyB9XHJcblxyXG4gICAgICAgIHRoaXMud29yZFdyYXBDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMud29yZFdyYXBDYWxsYmFja1Njb3BlID0gc2NvcGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGFyZ3VtZW50IGNhbiBiZSBvbmUgb2Y6IGBsZWZ0YCwgYHJpZ2h0YCwgYGNlbnRlcmAgb3IgYGp1c3RpZnlgLlxyXG4gICAgICogXHJcbiAgICAgKiBBbGlnbm1lbnQgb25seSB3b3JrcyBpZiB0aGUgVGV4dCBvYmplY3QgaGFzIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRBbGlnblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbj0nbGVmdCddIC0gVGhlIHRleHQgYWxpZ25tZW50IGZvciBtdWx0aS1saW5lIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFsaWduOiBmdW5jdGlvbiAoYWxpZ24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFsaWduID09PSB1bmRlZmluZWQpIHsgYWxpZ24gPSAnbGVmdCc7IH1cclxuXHJcbiAgICAgICAgdGhpcy5hbGlnbiA9IGFsaWduO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gZHJhdy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0TWF4TGluZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0wXSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhMaW5lczogZnVuY3Rpb24gKG1heClcclxuICAgIHtcclxuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLm1heExpbmVzID0gbWF4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY3VycmVudCB0ZXh0IG1ldHJpY3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2dldFRleHRNZXRyaWNzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0TWV0cmljc30gVGhlIHRleHQgbWV0cmljcy5cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dE1ldHJpY3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1ldHJpY3MgPSB0aGlzLm1ldHJpY3M7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFzY2VudDogbWV0cmljcy5hc2NlbnQsXHJcbiAgICAgICAgICAgIGRlc2NlbnQ6IG1ldHJpY3MuZGVzY2VudCxcclxuICAgICAgICAgICAgZm9udFNpemU6IG1ldHJpY3MuZm9udFNpemVcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFRleHQgU3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBUZXh0IFN0eWxlLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydHlNYXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IHRoaXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG91dHB1dC5tZXRyaWNzID0gdGhpcy5nZXRUZXh0TWV0cmljcygpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhpcyBUZXh0IFN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0U3R5bGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/TextStyle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/Text.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/Text.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../../../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetTextSize = __webpack_require__(/*! ../GetTextSize */ \"./node_modules/phaser/src/gameobjects/text/GetTextSize.js\");\r\nvar GetValue = __webpack_require__(/*! ../../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar RemoveFromDOM = __webpack_require__(/*! ../../../dom/RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\");\r\nvar TextRender = __webpack_require__(/*! ./TextRender */ \"./node_modules/phaser/src/gameobjects/text/static/TextRender.js\");\r\nvar TextStyle = __webpack_require__(/*! ../TextStyle */ \"./node_modules/phaser/src/gameobjects/text/TextStyle.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Text Game Object.\r\n * \r\n * Text objects work by creating their own internal hidden Canvas and then renders text to it using\r\n * the standard Canvas `fillText` API. It then creates a texture from this canvas which is rendered\r\n * to your game during the render pass.\r\n * \r\n * Because it uses the Canvas API you can take advantage of all the features this offers, such as\r\n * applying gradient fills to the text, or strokes, shadows and more. You can also use custom fonts\r\n * loaded externally, such as Google or TypeKit Web fonts.\r\n * \r\n * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes, either\r\n * when creating the Text object, or when setting the font via `setFont` or `setFontFamily`. I.e.:\r\n * \r\n * ```javascript\r\n * this.add.text(0, 0, 'Hello World', { fontFamily: '\"Roboto Condensed\"' });\r\n * ```\r\n * \r\n * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n * quoted properly, too:\r\n * \r\n * ```javascript\r\n * this.add.text(0, 0, 'Hello World', { fontFamily: 'Verdana, \"Times New Roman\", Tahoma, serif' });\r\n * ```\r\n *\r\n * You can only display fonts that are currently loaded and available to the browser: therefore fonts must\r\n * be pre-loaded. Phaser does not do ths for you, so you will require the use of a 3rd party font loader,\r\n * or have the fonts ready available in the CSS on the page in which your Phaser game resides.\r\n *\r\n * See {@link http://www.jordanm.co.uk/tinytype this compatibility table} for the available default fonts\r\n * across mobile browsers.\r\n * \r\n * A note on performance: Every time the contents of a Text object changes, i.e. changing the text being\r\n * displayed, or the style of the text, it needs to remake the Text canvas, and if on WebGL, re-upload the\r\n * new texture to the GPU. This can be an expensive operation if used often, or with large quantities of\r\n * Text objects in your game. If you run into performance issues you would be better off using Bitmap Text\r\n * instead, as it benefits from batching and avoids expensive Canvas API calls.\r\n *\r\n * @class Text\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Crop\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {(string|string[])} text - The text this Text object will display.\r\n * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The text style configuration object.\r\n */\r\nvar Text = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Crop,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        TextRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Text (scene, x, y, text, style)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        GameObject.call(this, scene, 'Text');\r\n\r\n        /**\r\n         * The renderer in use by this Text object.\r\n         *\r\n         * @name Phaser.GameObjects.Text#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.12.0\r\n         */\r\n        this.renderer = scene.sys.game.renderer;\r\n\r\n        this.setPosition(x, y);\r\n        this.setOrigin(0, 0);\r\n        this.initPipeline();\r\n\r\n        /**\r\n         * The canvas element that the text is rendered to.\r\n         *\r\n         * @name Phaser.GameObjects.Text#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.canvas = CanvasPool.create(this);\r\n\r\n        /**\r\n         * The context of the canvas element that the text is rendered to.\r\n         *\r\n         * @name Phaser.GameObjects.Text#context\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.0.0\r\n         */\r\n        this.context = this.canvas.getContext('2d');\r\n\r\n        /**\r\n         * The Text Style object.\r\n         *\r\n         * Manages the style of this Text object.\r\n         *\r\n         * @name Phaser.GameObjects.Text#style\r\n         * @type {Phaser.GameObjects.TextStyle}\r\n         * @since 3.0.0\r\n         */\r\n        this.style = new TextStyle(this, style);\r\n\r\n        /**\r\n         * Whether to automatically round line positions.\r\n         *\r\n         * @name Phaser.GameObjects.Text#autoRound\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.autoRound = true;\r\n\r\n        /**\r\n         * The Regular Expression that is used to split the text up into lines, in\r\n         * multi-line text. By default this is `/(?:\\r\\n|\\r|\\n)/`.\r\n         * You can change this RegExp to be anything else that you may need.\r\n         *\r\n         * @name Phaser.GameObjects.Text#splitRegExp\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.splitRegExp = /(?:\\r\\n|\\r|\\n)/;\r\n\r\n        /**\r\n         * The text to display.\r\n         *\r\n         * @name Phaser.GameObjects.Text#_text\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._text = undefined;\r\n\r\n        /**\r\n         * Specify a padding value which is added to the line width and height when calculating the Text size.\r\n         * Allows you to add extra spacing if the browser is unable to accurately determine the true font dimensions.\r\n         *\r\n         * @name Phaser.GameObjects.Text#padding\r\n         * @type {{left:number,right:number,top:number,bottom:number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\r\n\r\n        /**\r\n         * The width of this Text object.\r\n         *\r\n         * @name Phaser.GameObjects.Text#width\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.width = 1;\r\n\r\n        /**\r\n         * The height of this Text object.\r\n         *\r\n         * @name Phaser.GameObjects.Text#height\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.height = 1;\r\n\r\n        /**\r\n         * The line spacing value.\r\n         * This value is added to the font height to calculate the overall line height.\r\n         * Only has an effect if this Text object contains multiple lines of text.\r\n         * \r\n         * If you update this property directly, instead of using the `setLineSpacing` method, then\r\n         * be sure to call `updateText` after, or you won't see the change reflected in the Text object.\r\n         *\r\n         * @name Phaser.GameObjects.Text#lineSpacing\r\n         * @type {number}\r\n         * @since 3.13.0\r\n         */\r\n        this.lineSpacing = 0;\r\n\r\n        /**\r\n         * Whether the text or its settings have changed and need updating.\r\n         *\r\n         * @name Phaser.GameObjects.Text#dirty\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.dirty = false;\r\n\r\n        //  If resolution wasn't set, then we get it from the game config\r\n        if (this.style.resolution === 0)\r\n        {\r\n            this.style.resolution = scene.sys.game.config.resolution;\r\n        }\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.Text#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        //  Create a Texture for this Text object\r\n        this.texture = scene.sys.textures.addCanvas(null, this.canvas, true);\r\n\r\n        //  Get the frame\r\n        this.frame = this.texture.get();\r\n\r\n        //  Set the resolution\r\n        this.frame.source.resolution = this.style.resolution;\r\n\r\n        if (this.renderer && this.renderer.gl)\r\n        {\r\n            //  Clear the default 1x1 glTexture, as we override it later\r\n            this.renderer.deleteTexture(this.frame.source.glTexture);\r\n\r\n            this.frame.source.glTexture = null;\r\n        }\r\n\r\n        this.initRTL();\r\n\r\n        this.setText(text);\r\n\r\n        if (style && style.padding)\r\n        {\r\n            this.setPadding(style.padding);\r\n        }\r\n\r\n        if (style && style.lineSpacing)\r\n        {\r\n            this.lineSpacing = style.lineSpacing;\r\n        }\r\n\r\n        scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function ()\r\n        {\r\n            this.dirty = true;\r\n        }, this);\r\n    },\r\n\r\n    /**\r\n     * Initialize right to left text.\r\n     *\r\n     * @method Phaser.GameObjects.Text#initRTL\r\n     * @since 3.0.0\r\n     */\r\n    initRTL: function ()\r\n    {\r\n        if (!this.style.rtl)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  Here is where the crazy starts.\r\n        //\r\n        //  Due to browser implementation issues, you cannot fillText BiDi text to a canvas\r\n        //  that is not part of the DOM. It just completely ignores the direction property.\r\n\r\n        this.canvas.dir = 'rtl';\r\n\r\n        //  Experimental atm, but one day ...\r\n        this.context.direction = 'rtl';\r\n\r\n        //  Add it to the DOM, but hidden within the parent canvas.\r\n        this.canvas.style.display = 'none';\r\n\r\n        AddToDOM(this.canvas, this.scene.sys.canvas);\r\n\r\n        //  And finally we set the x origin\r\n        this.originX = 1;\r\n    },\r\n\r\n    /**\r\n     * Greedy wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n     * bounds.\r\n     *\r\n     * @method Phaser.GameObjects.Text#runWordWrap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} text - The text to perform word wrap detection against.\r\n     *\r\n     * @return {string} The text after wrapping has been applied.\r\n     */\r\n    runWordWrap: function (text)\r\n    {\r\n        var style = this.style;\r\n\r\n        if (style.wordWrapCallback)\r\n        {\r\n            var wrappedLines = style.wordWrapCallback.call(style.wordWrapCallbackScope, text, this);\r\n\r\n            if (Array.isArray(wrappedLines))\r\n            {\r\n                wrappedLines = wrappedLines.join('\\n');\r\n            }\r\n\r\n            return wrappedLines;\r\n        }\r\n        else if (style.wordWrapWidth)\r\n        {\r\n            if (style.wordWrapUseAdvanced)\r\n            {\r\n                return this.advancedWordWrap(text, this.context, this.style.wordWrapWidth);\r\n            }\r\n            else\r\n            {\r\n                return this.basicWordWrap(text, this.context, this.style.wordWrapWidth);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            return text;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Advanced wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n     * bounds. Consecutive spaces will be collapsed and replaced with a single space. Lines will be\r\n     * trimmed of white space before processing. Throws an error if wordWrapWidth is less than a\r\n     * single character.\r\n     *\r\n     * @method Phaser.GameObjects.Text#advancedWordWrap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} text - The text to perform word wrap detection against.\r\n     * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n     * @param {number} wordWrapWidth - The word wrap width.\r\n     *\r\n     * @return {string} The wrapped text.\r\n     */\r\n    advancedWordWrap: function (text, context, wordWrapWidth)\r\n    {\r\n        var output = '';\r\n\r\n        // Condense consecutive spaces and split into lines\r\n        var lines = text\r\n            .replace(/ +/gi, ' ')\r\n            .split(this.splitRegExp);\r\n\r\n        var linesCount = lines.length;\r\n\r\n        for (var i = 0; i < linesCount; i++)\r\n        {\r\n            var line = lines[i];\r\n            var out = '';\r\n\r\n            // Trim whitespace\r\n            line = line.replace(/^ *|\\s*$/gi, '');\r\n\r\n            // If entire line is less than wordWrapWidth append the entire line and exit early\r\n            var lineWidth = context.measureText(line).width;\r\n\r\n            if (lineWidth < wordWrapWidth)\r\n            {\r\n                output += line + '\\n';\r\n                continue;\r\n            }\r\n\r\n            // Otherwise, calculate new lines\r\n            var currentLineWidth = wordWrapWidth;\r\n\r\n            // Split into words\r\n            var words = line.split(' ');\r\n\r\n            for (var j = 0; j < words.length; j++)\r\n            {\r\n                var word = words[j];\r\n                var wordWithSpace = word + ' ';\r\n                var wordWidth = context.measureText(wordWithSpace).width;\r\n\r\n                if (wordWidth > currentLineWidth)\r\n                {\r\n                    // Break word\r\n                    if (j === 0)\r\n                    {\r\n                        // Shave off letters from word until it's small enough\r\n                        var newWord = wordWithSpace;\r\n\r\n                        while (newWord.length)\r\n                        {\r\n                            newWord = newWord.slice(0, -1);\r\n                            wordWidth = context.measureText(newWord).width;\r\n\r\n                            if (wordWidth <= currentLineWidth)\r\n                            {\r\n                                break;\r\n                            }\r\n                        }\r\n\r\n                        // If wordWrapWidth is too small for even a single letter, shame user\r\n                        // failure with a fatal error\r\n                        if (!newWord.length)\r\n                        {\r\n                            throw new Error('This text\\'s wordWrapWidth setting is less than a single character!');\r\n                        }\r\n\r\n                        // Replace current word in array with remainder\r\n                        var secondPart = word.substr(newWord.length);\r\n\r\n                        words[j] = secondPart;\r\n\r\n                        // Append first piece to output\r\n                        out += newWord;\r\n                    }\r\n\r\n                    // If existing word length is 0, don't include it\r\n                    var offset = (words[j].length) ? j : j + 1;\r\n\r\n                    // Collapse rest of sentence and remove any trailing white space\r\n                    var remainder = words.slice(offset).join(' ')\r\n                        .replace(/[ \\n]*$/gi, '');\r\n\r\n                    // Prepend remainder to next line\r\n                    lines[i + 1] = remainder + ' ' + (lines[i + 1] || '');\r\n                    linesCount = lines.length;\r\n\r\n                    break; // Processing on this line\r\n\r\n                    // Append word with space to output\r\n                }\r\n                else\r\n                {\r\n                    out += wordWithSpace;\r\n                    currentLineWidth -= wordWidth;\r\n                }\r\n            }\r\n\r\n            // Append processed line to output\r\n            output += out.replace(/[ \\n]*$/gi, '') + '\\n';\r\n        }\r\n\r\n        // Trim the end of the string\r\n        output = output.replace(/[\\s|\\n]*$/gi, '');\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Greedy wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n     * bounds. Spaces are not collapsed and whitespace is not trimmed.\r\n     *\r\n     * @method Phaser.GameObjects.Text#basicWordWrap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} text - The text to perform word wrap detection against.\r\n     * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n     * @param {number} wordWrapWidth - The word wrap width.\r\n     *\r\n     * @return {string} The wrapped text.\r\n     */\r\n    basicWordWrap: function (text, context, wordWrapWidth)\r\n    {\r\n        var result = '';\r\n        var lines = text.split(this.splitRegExp);\r\n\r\n        for (var i = 0; i < lines.length; i++)\r\n        {\r\n            var spaceLeft = wordWrapWidth;\r\n            var words = lines[i].split(' ');\r\n\r\n            for (var j = 0; j < words.length; j++)\r\n            {\r\n                var wordWidth = context.measureText(words[j]).width;\r\n                var wordWidthWithSpace = wordWidth + context.measureText(' ').width;\r\n\r\n                if (wordWidthWithSpace > spaceLeft)\r\n                {\r\n                    // Skip printing the newline if it's the first word of the line that is greater\r\n                    // than the word wrap width.\r\n                    if (j > 0)\r\n                    {\r\n                        result += '\\n';\r\n                    }\r\n\r\n                    result += words[j] + ' ';\r\n                    spaceLeft = wordWrapWidth - wordWidthWithSpace;\r\n                }\r\n                else\r\n                {\r\n                    spaceLeft -= wordWidthWithSpace;\r\n                    result += words[j];\r\n\r\n                    if (j < (words.length - 1))\r\n                    {\r\n                        result += ' ';\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (i < lines.length - 1)\r\n            {\r\n                result += '\\n';\r\n            }\r\n        }\r\n\r\n        return result;\r\n    },\r\n\r\n    /**\r\n     * Runs the given text through this Text objects word wrapping and returns the results as an\r\n     * array, where each element of the array corresponds to a wrapped line of text.\r\n     *\r\n     * @method Phaser.GameObjects.Text#getWrappedText\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} text - The text for which the wrapping will be calculated. If unspecified, the Text objects current text will be used.\r\n     *\r\n     * @return {string[]} An array of strings with the pieces of wrapped text.\r\n     */\r\n    getWrappedText: function (text)\r\n    {\r\n        if (text === undefined) { text = this._text; }\r\n\r\n        this.style.syncFont(this.canvas, this.context);\r\n\r\n        var wrappedLines = this.runWordWrap(text);\r\n\r\n        return wrappedLines.split(this.splitRegExp);\r\n    },\r\n\r\n    /**\r\n     * Set the text to display.\r\n     *\r\n     * An array of strings will be joined with `\\n` line breaks.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setText\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} value - The string, or array of strings, to be set as the content of this Text object.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setText: function (value)\r\n    {\r\n        if (!value && value !== 0)\r\n        {\r\n            value = '';\r\n        }\r\n\r\n        if (Array.isArray(value))\r\n        {\r\n            value = value.join('\\n');\r\n        }\r\n\r\n        if (value !== this._text)\r\n        {\r\n            this._text = value.toString();\r\n\r\n            this.updateText();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the text style.\r\n     *\r\n     * @example\r\n     * text.setStyle({\r\n     *     fontSize: '64px',\r\n     *     fontFamily: 'Arial',\r\n     *     color: '#ffffff',\r\n     *     align: 'center',\r\n     *     backgroundColor: '#ff00ff'\r\n     * });\r\n     *\r\n     * @method Phaser.GameObjects.Text#setStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} style - The style settings to set.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setStyle: function (style)\r\n    {\r\n        return this.style.setStyle(style);\r\n    },\r\n\r\n    /**\r\n     * Set the font.\r\n     *\r\n     * If a string is given, the font family is set.\r\n     *\r\n     * If an object is given, the `fontFamily`, `fontSize` and `fontStyle`\r\n     * properties of that object are set.\r\n     * \r\n     * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n     * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes:\r\n     * \r\n     * ```javascript\r\n     * Text.setFont('\"Roboto Condensed\"');\r\n     * ```\r\n     * \r\n     * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n     * quoted properly, too:\r\n     * \r\n     * ```javascript\r\n     * Text.setFont('Verdana, \"Times New Roman\", Tahoma, serif');\r\n     * ```\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFont\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} font - The font family or font settings to set.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFont: function (font)\r\n    {\r\n        return this.style.setFont(font);\r\n    },\r\n\r\n    /**\r\n     * Set the font family.\r\n     * \r\n     * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n     * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes:\r\n     * \r\n     * ```javascript\r\n     * Text.setFont('\"Roboto Condensed\"');\r\n     * ```\r\n     * \r\n     * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n     * quoted properly, too:\r\n     * \r\n     * ```javascript\r\n     * Text.setFont('Verdana, \"Times New Roman\", Tahoma, serif');\r\n     * ```\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFontFamily\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} family - The font family.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFontFamily: function (family)\r\n    {\r\n        return this.style.setFontFamily(family);\r\n    },\r\n\r\n    /**\r\n     * Set the font size.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFontSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} size - The font size.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFontSize: function (size)\r\n    {\r\n        return this.style.setFontSize(size);\r\n    },\r\n\r\n    /**\r\n     * Set the font style.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFontStyle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} style - The font style.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFontStyle: function (style)\r\n    {\r\n        return this.style.setFontStyle(style);\r\n    },\r\n\r\n    /**\r\n     * Set a fixed width and height for the text.\r\n     *\r\n     * Pass in `0` for either of these parameters to disable fixed width or height respectively.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFixedSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The fixed width to set. `0` disables fixed width.\r\n     * @param {number} height - The fixed height to set. `0` disables fixed height.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFixedSize: function (width, height)\r\n    {\r\n        return this.style.setFixedSize(width, height);\r\n    },\r\n\r\n    /**\r\n     * Set the background color.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setBackgroundColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The background color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setBackgroundColor: function (color)\r\n    {\r\n        return this.style.setBackgroundColor(color);\r\n    },\r\n\r\n    /**\r\n     * Set the fill style to be used by the Text object.\r\n     *\r\n     * This can be any valid CanvasRenderingContext2D fillStyle value, such as\r\n     * a color (in hex, rgb, rgba, hsl or named values), a gradient or a pattern.\r\n     *\r\n     * See the [MDN fillStyle docs](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle) for more details.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setFill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|any)} color - The text fill style. Can be any valid CanvasRenderingContext `fillStyle` value.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setFill: function (fillStyle)\r\n    {\r\n        return this.style.setFill(fillStyle);\r\n    },\r\n\r\n    /**\r\n     * Set the text fill color.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The text fill color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setColor: function (color)\r\n    {\r\n        return this.style.setColor(color);\r\n    },\r\n\r\n    /**\r\n     * Set the stroke settings.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setStroke\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The stroke color.\r\n     * @param {number} thickness - The stroke thickness.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setStroke: function (color, thickness)\r\n    {\r\n        return this.style.setStroke(color, thickness);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow settings.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal shadow offset.\r\n     * @param {number} [y=0] - The vertical shadow offset.\r\n     * @param {string} [color='#000'] - The shadow color.\r\n     * @param {number} [blur=0] - The shadow blur radius.\r\n     * @param {boolean} [shadowStroke=false] - Whether to stroke the shadow.\r\n     * @param {boolean} [shadowFill=true] - Whether to fill the shadow.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadow: function (x, y, color, blur, shadowStroke, shadowFill)\r\n    {\r\n        return this.style.setShadow(x, y, color, blur, shadowStroke, shadowFill);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow offset.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadowOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal shadow offset.\r\n     * @param {number} y - The vertical shadow offset.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadowOffset: function (x, y)\r\n    {\r\n        return this.style.setShadowOffset(x, y);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow color.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadowColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} color - The shadow color.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadowColor: function (color)\r\n    {\r\n        return this.style.setShadowColor(color);\r\n    },\r\n\r\n    /**\r\n     * Set the shadow blur radius.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadowBlur\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} blur - The shadow blur radius.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadowBlur: function (blur)\r\n    {\r\n        return this.style.setShadowBlur(blur);\r\n    },\r\n\r\n    /**\r\n     * Enable or disable shadow stroke.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadowStroke\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} enabled - Whether shadow stroke is enabled or not.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadowStroke: function (enabled)\r\n    {\r\n        return this.style.setShadowStroke(enabled);\r\n    },\r\n\r\n    /**\r\n     * Enable or disable shadow fill.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setShadowFill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} enabled - Whether shadow fill is enabled or not.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setShadowFill: function (enabled)\r\n    {\r\n        return this.style.setShadowFill(enabled);\r\n    },\r\n\r\n    /**\r\n     * Set the width (in pixels) to use for wrapping lines. Pass in null to remove wrapping by width.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setWordWrapWidth\r\n     * @since 3.0.0\r\n     *\r\n     * @param {?number} width - The maximum width of a line in pixels. Set to null to remove wrapping.\r\n     * @param {boolean} [useAdvancedWrap=false] - Whether or not to use the advanced wrapping\r\n     * algorithm. If true, spaces are collapsed and whitespace is trimmed from lines. If false,\r\n     * spaces and whitespace are left as is.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setWordWrapWidth: function (width, useAdvancedWrap)\r\n    {\r\n        return this.style.setWordWrapWidth(width, useAdvancedWrap);\r\n    },\r\n\r\n    /**\r\n     * Set a custom callback for wrapping lines. Pass in null to remove wrapping by callback.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setWordWrapCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {TextStyleWordWrapCallback} callback - A custom function that will be responsible for wrapping the\r\n     * text. It will receive two arguments: text (the string to wrap), textObject (this Text\r\n     * instance). It should return the wrapped lines either as an array of lines or as a string with\r\n     * newline characters in place to indicate where breaks should happen.\r\n     * @param {object} [scope=null] - The scope that will be applied when the callback is invoked.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setWordWrapCallback: function (callback, scope)\r\n    {\r\n        return this.style.setWordWrapCallback(callback, scope);\r\n    },\r\n\r\n    /**\r\n     * Set the alignment of the text in this Text object.\r\n     * \r\n     * The argument can be one of: `left`, `right`, `center` or `justify`.\r\n     * \r\n     * Alignment only works if the Text object has more than one line of text.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setAlign\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [align='left'] - The text alignment for multi-line text.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setAlign: function (align)\r\n    {\r\n        return this.style.setAlign(align);\r\n    },\r\n\r\n    /**\r\n     * Set the resolution used by this Text object.\r\n     *\r\n     * By default it will be set to match the resolution set in the Game Config,\r\n     * but you can override it via this method, or by specifying it in the Text style configuration object.\r\n     * \r\n     * It allows for much clearer text on High DPI devices, at the cost of memory because it uses larger\r\n     * internal Canvas textures for the Text.\r\n     * \r\n     * Therefore, please use with caution, as the more high res Text you have, the more memory it uses.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setResolution\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} value - The resolution for this Text object to use.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setResolution: function (value)\r\n    {\r\n        return this.style.setResolution(value);\r\n    },\r\n\r\n    /**\r\n     * Sets the line spacing value.\r\n     *\r\n     * This value is _added_ to the height of the font when calculating the overall line height.\r\n     * This only has an effect if this Text object consists of multiple lines of text.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setLineSpacing\r\n     * @since 3.13.0\r\n     *\r\n     * @param {number} value - The amount to add to the font height to achieve the overall line height.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setLineSpacing: function (value)\r\n    {\r\n        this.lineSpacing = value;\r\n\r\n        return this.updateText();\r\n    },\r\n\r\n    /**\r\n     * Set the text padding.\r\n     *\r\n     * 'left' can be an object.\r\n     *\r\n     * If only 'left' and 'top' are given they are treated as 'x' and 'y'.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setPadding\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|Phaser.Types.GameObjects.Text.TextPadding)} left - The left padding value, or a padding config object.\r\n     * @param {number} top - The top padding value.\r\n     * @param {number} right - The right padding value.\r\n     * @param {number} bottom - The bottom padding value.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setPadding: function (left, top, right, bottom)\r\n    {\r\n        if (typeof left === 'object')\r\n        {\r\n            var config = left;\r\n\r\n            //  If they specify x and/or y this applies to all\r\n            var x = GetValue(config, 'x', null);\r\n\r\n            if (x !== null)\r\n            {\r\n                left = x;\r\n                right = x;\r\n            }\r\n            else\r\n            {\r\n                left = GetValue(config, 'left', 0);\r\n                right = GetValue(config, 'right', left);\r\n            }\r\n\r\n            var y = GetValue(config, 'y', null);\r\n\r\n            if (y !== null)\r\n            {\r\n                top = y;\r\n                bottom = y;\r\n            }\r\n            else\r\n            {\r\n                top = GetValue(config, 'top', 0);\r\n                bottom = GetValue(config, 'bottom', top);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            if (left === undefined) { left = 0; }\r\n            if (top === undefined) { top = left; }\r\n            if (right === undefined) { right = left; }\r\n            if (bottom === undefined) { bottom = top; }\r\n        }\r\n\r\n        this.padding.left = left;\r\n        this.padding.top = top;\r\n        this.padding.right = right;\r\n        this.padding.bottom = bottom;\r\n\r\n        return this.updateText();\r\n    },\r\n\r\n    /**\r\n     * Set the maximum number of lines to draw.\r\n     *\r\n     * @method Phaser.GameObjects.Text#setMaxLines\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [max=0] - The maximum number of lines to draw.\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    setMaxLines: function (max)\r\n    {\r\n        return this.style.setMaxLines(max);\r\n    },\r\n\r\n    /**\r\n     * Update the displayed text.\r\n     *\r\n     * @method Phaser.GameObjects.Text#updateText\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Text} This Text object.\r\n     */\r\n    updateText: function ()\r\n    {\r\n        var canvas = this.canvas;\r\n        var context = this.context;\r\n        var style = this.style;\r\n        var resolution = style.resolution;\r\n        var size = style.metrics;\r\n\r\n        style.syncFont(canvas, context);\r\n\r\n        var outputText = this._text;\r\n\r\n        if (style.wordWrapWidth || style.wordWrapCallback)\r\n        {\r\n            outputText = this.runWordWrap(this._text);\r\n        }\r\n\r\n        //  Split text into lines\r\n        var lines = outputText.split(this.splitRegExp);\r\n\r\n        var textSize = GetTextSize(this, size, lines);\r\n\r\n        var padding = this.padding;\r\n\r\n        var textWidth;\r\n\r\n        if (style.fixedWidth === 0)\r\n        {\r\n            this.width = textSize.width + padding.left + padding.right;\r\n\r\n            textWidth = textSize.width;\r\n        }\r\n        else\r\n        {\r\n            this.width = style.fixedWidth;\r\n\r\n            textWidth = this.width - padding.left - padding.right;\r\n\r\n            if (textWidth < textSize.width)\r\n            {\r\n                textWidth = textSize.width;\r\n            }\r\n        }\r\n\r\n        if (style.fixedHeight === 0)\r\n        {\r\n            this.height = textSize.height + padding.top + padding.bottom;\r\n        }\r\n        else\r\n        {\r\n            this.height = style.fixedHeight;\r\n        }\r\n\r\n        var w = this.width;\r\n        var h = this.height;\r\n\r\n        this.updateDisplayOrigin();\r\n\r\n        w *= resolution;\r\n        h *= resolution;\r\n\r\n        w = Math.max(w, 1);\r\n        h = Math.max(h, 1);\r\n\r\n        if (canvas.width !== w || canvas.height !== h)\r\n        {\r\n            canvas.width = w;\r\n            canvas.height = h;\r\n\r\n            this.frame.setSize(w, h);\r\n\r\n            //  Because resizing the canvas resets the context\r\n            style.syncFont(canvas, context);\r\n        }\r\n        else\r\n        {\r\n            context.clearRect(0, 0, w, h);\r\n        }\r\n\r\n        context.save();\r\n\r\n        context.scale(resolution, resolution);\r\n\r\n        if (style.backgroundColor)\r\n        {\r\n            context.fillStyle = style.backgroundColor;\r\n            context.fillRect(0, 0, w, h);\r\n        }\r\n\r\n        style.syncStyle(canvas, context);\r\n\r\n        context.textBaseline = 'alphabetic';\r\n\r\n        //  Apply padding\r\n        context.translate(padding.left, padding.top);\r\n\r\n        var linePositionX;\r\n        var linePositionY;\r\n\r\n        //  Draw text line by line\r\n        for (var i = 0; i < textSize.lines; i++)\r\n        {\r\n            linePositionX = style.strokeThickness / 2;\r\n            linePositionY = (style.strokeThickness / 2 + i * textSize.lineHeight) + size.ascent;\r\n\r\n            if (i > 0)\r\n            {\r\n                linePositionY += (textSize.lineSpacing * i);\r\n            }\r\n\r\n            if (style.rtl)\r\n            {\r\n                linePositionX = w - linePositionX;\r\n            }\r\n            else if (style.align === 'right')\r\n            {\r\n                linePositionX += textWidth - textSize.lineWidths[i];\r\n            }\r\n            else if (style.align === 'center')\r\n            {\r\n                linePositionX += (textWidth - textSize.lineWidths[i]) / 2;\r\n            }\r\n            else if (style.align === 'justify')\r\n            {\r\n                //  To justify text line its width must be no less than 85% of defined width\r\n                var minimumLengthToApplyJustification = 0.85;\r\n\r\n                if (textSize.lineWidths[i] / textSize.width >= minimumLengthToApplyJustification)\r\n                {\r\n                    var extraSpace = textSize.width - textSize.lineWidths[i];\r\n                    var spaceSize = context.measureText(' ').width;\r\n                    var trimmedLine = lines[i].trim();\r\n                    var array = trimmedLine.split(' ');\r\n            \r\n                    extraSpace += (lines[i].length - trimmedLine.length) * spaceSize;\r\n            \r\n                    var extraSpaceCharacters = Math.floor(extraSpace / spaceSize);\r\n                    var idx = 0;\r\n\r\n                    while (extraSpaceCharacters > 0)\r\n                    {\r\n                        array[idx] += ' ';\r\n                        idx = (idx + 1) % (array.length - 1 || 1);\r\n                        --extraSpaceCharacters;\r\n                    }\r\n            \r\n                    lines[i] = array.join(' ');\r\n                }\r\n            }\r\n\r\n            if (this.autoRound)\r\n            {\r\n                linePositionX = Math.round(linePositionX);\r\n                linePositionY = Math.round(linePositionY);\r\n            }\r\n\r\n            if (style.strokeThickness)\r\n            {\r\n                this.style.syncShadow(context, style.shadowStroke);\r\n\r\n                context.strokeText(lines[i], linePositionX, linePositionY);\r\n            }\r\n\r\n            if (style.color)\r\n            {\r\n                this.style.syncShadow(context, style.shadowFill);\r\n\r\n                context.fillText(lines[i], linePositionX, linePositionY);\r\n            }\r\n        }\r\n\r\n        context.restore();\r\n\r\n        if (this.renderer.gl)\r\n        {\r\n            this.frame.source.glTexture = this.renderer.canvasToTexture(canvas, this.frame.source.glTexture, true);\r\n\r\n            this.frame.glTexture = this.frame.source.glTexture;\r\n        }\r\n\r\n        this.dirty = true;\r\n\r\n        var input = this.input;\r\n\r\n        if (input && !input.customHitArea)\r\n        {\r\n            input.hitArea.width = this.width;\r\n            input.hitArea.height = this.height;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Get the current text metrics.\r\n     *\r\n     * @method Phaser.GameObjects.Text#getTextMetrics\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} The text metrics.\r\n     */\r\n    getTextMetrics: function ()\r\n    {\r\n        return this.style.getTextMetrics();\r\n    },\r\n\r\n    /**\r\n     * The text string being rendered by this Text Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Text#text\r\n     * @type {string}\r\n     * @since 3.0.0\r\n     */\r\n    text: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._text;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.setText(value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Build a JSON representation of the Text object.\r\n     *\r\n     * @method Phaser.GameObjects.Text#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Text object.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var out = Components.ToJSON(this);\r\n\r\n        //  Extra Text data is added here\r\n\r\n        var data = {\r\n            autoRound: this.autoRound,\r\n            text: this._text,\r\n            style: this.style.toJSON(),\r\n            padding: {\r\n                left: this.padding.left,\r\n                right: this.padding.right,\r\n                top: this.padding.top,\r\n                bottom: this.padding.bottom\r\n            }\r\n        };\r\n\r\n        out.data = data;\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.Text#preDestroy\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        if (this.style.rtl)\r\n        {\r\n            RemoveFromDOM(this.canvas);\r\n        }\r\n\r\n        CanvasPool.remove(this.canvas);\r\n\r\n        this.texture.destroy();\r\n    }\r\n\r\n    /**\r\n     * The horizontal origin of this Game Object.\r\n     * The origin maps the relationship between the size and position of the Game Object.\r\n     * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n     * Setting the value to 0 means the position now relates to the left of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Text#originX\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n\r\n    /**\r\n     * The vertical origin of this Game Object.\r\n     * The origin maps the relationship between the size and position of the Game Object.\r\n     * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n     * Setting the value to 0 means the position now relates to the top of the Game Object.\r\n     *\r\n     * @name Phaser.GameObjects.Text#originY\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n\r\n});\r\n\r\nmodule.exports = Text;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0LmpzP2Y3OGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBdUI7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsa0dBQW9DO0FBQzdELFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLDRFQUFzQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBa0I7QUFDM0Msa0JBQWtCLG1CQUFPLENBQUMsaUZBQWdCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQywwRkFBZ0M7QUFDdkQsb0JBQW9CLG1CQUFPLENBQUMsa0ZBQTRCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLHFGQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFjOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1DQUFtQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsMERBQTBEO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQWlFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLHdDQUF3QztBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixrQkFBa0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsa0JBQWtCO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxtQkFBbUI7O0FBRXBEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtREFBbUQ7QUFDbEUsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0Msb0NBQW9DLFlBQVk7QUFDaEQsc0NBQXNDLGNBQWM7QUFDcEQsdUNBQXVDLGNBQWM7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWRkVG9ET00gPSByZXF1aXJlKCcuLi8uLi8uLi9kb20vQWRkVG9ET00nKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi8uLi8uLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0VGV4dFNpemUgPSByZXF1aXJlKCcuLi9HZXRUZXh0U2l6ZScpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIFJlbW92ZUZyb21ET00gPSByZXF1aXJlKCcuLi8uLi8uLi9kb20vUmVtb3ZlRnJvbURPTScpO1xyXG52YXIgVGV4dFJlbmRlciA9IHJlcXVpcmUoJy4vVGV4dFJlbmRlcicpO1xyXG52YXIgVGV4dFN0eWxlID0gcmVxdWlyZSgnLi4vVGV4dFN0eWxlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFRleHQgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUZXh0IG9iamVjdHMgd29yayBieSBjcmVhdGluZyB0aGVpciBvd24gaW50ZXJuYWwgaGlkZGVuIENhbnZhcyBhbmQgdGhlbiByZW5kZXJzIHRleHQgdG8gaXQgdXNpbmdcclxuICogdGhlIHN0YW5kYXJkIENhbnZhcyBgZmlsbFRleHRgIEFQSS4gSXQgdGhlbiBjcmVhdGVzIGEgdGV4dHVyZSBmcm9tIHRoaXMgY2FudmFzIHdoaWNoIGlzIHJlbmRlcmVkXHJcbiAqIHRvIHlvdXIgZ2FtZSBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLlxyXG4gKiBcclxuICogQmVjYXVzZSBpdCB1c2VzIHRoZSBDYW52YXMgQVBJIHlvdSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgYWxsIHRoZSBmZWF0dXJlcyB0aGlzIG9mZmVycywgc3VjaCBhc1xyXG4gKiBhcHBseWluZyBncmFkaWVudCBmaWxscyB0byB0aGUgdGV4dCwgb3Igc3Ryb2tlcywgc2hhZG93cyBhbmQgbW9yZS4gWW91IGNhbiBhbHNvIHVzZSBjdXN0b20gZm9udHNcclxuICogbG9hZGVkIGV4dGVybmFsbHksIHN1Y2ggYXMgR29vZ2xlIG9yIFR5cGVLaXQgV2ViIGZvbnRzLlxyXG4gKiBcclxuICogKipJbXBvcnRhbnQ6KiogSWYgdGhlIGZvbnQgeW91IHdpc2ggdG8gdXNlIGhhcyBhIHNwYWNlIG9yIGRpZ2l0IGluIGl0cyBuYW1lLCBzdWNoIGFzXHJcbiAqICdQcmVzcyBTdGFydCAyUCcgb3IgJ1JvYm90byBDb25kZW5zZWQnLCB0aGVuIHlvdSBfbXVzdF8gcHV0IHRoZSBmb250IG5hbWUgaW4gcXVvdGVzLCBlaXRoZXJcclxuICogd2hlbiBjcmVhdGluZyB0aGUgVGV4dCBvYmplY3QsIG9yIHdoZW4gc2V0dGluZyB0aGUgZm9udCB2aWEgYHNldEZvbnRgIG9yIGBzZXRGb250RmFtaWx5YC4gSS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQudGV4dCgwLCAwLCAnSGVsbG8gV29ybGQnLCB7IGZvbnRGYW1pbHk6ICdcIlJvYm90byBDb25kZW5zZWRcIicgfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogRXF1YWxseSwgaWYgeW91IHdpc2ggdG8gcHJvdmlkZSBhIGxpc3Qgb2YgZmFsbGJhY2sgZm9udHMsIHRoZW4geW91IHNob3VsZCBlbnN1cmUgdGhleSBhcmUgYWxsXHJcbiAqIHF1b3RlZCBwcm9wZXJseSwgdG9vOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmFkZC50ZXh0KDAsIDAsICdIZWxsbyBXb3JsZCcsIHsgZm9udEZhbWlseTogJ1ZlcmRhbmEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIFRhaG9tYSwgc2VyaWYnIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogWW91IGNhbiBvbmx5IGRpc3BsYXkgZm9udHMgdGhhdCBhcmUgY3VycmVudGx5IGxvYWRlZCBhbmQgYXZhaWxhYmxlIHRvIHRoZSBicm93c2VyOiB0aGVyZWZvcmUgZm9udHMgbXVzdFxyXG4gKiBiZSBwcmUtbG9hZGVkLiBQaGFzZXIgZG9lcyBub3QgZG8gdGhzIGZvciB5b3UsIHNvIHlvdSB3aWxsIHJlcXVpcmUgdGhlIHVzZSBvZiBhIDNyZCBwYXJ0eSBmb250IGxvYWRlcixcclxuICogb3IgaGF2ZSB0aGUgZm9udHMgcmVhZHkgYXZhaWxhYmxlIGluIHRoZSBDU1Mgb24gdGhlIHBhZ2UgaW4gd2hpY2ggeW91ciBQaGFzZXIgZ2FtZSByZXNpZGVzLlxyXG4gKlxyXG4gKiBTZWUge0BsaW5rIGh0dHA6Ly93d3cuam9yZGFubS5jby51ay90aW55dHlwZSB0aGlzIGNvbXBhdGliaWxpdHkgdGFibGV9IGZvciB0aGUgYXZhaWxhYmxlIGRlZmF1bHQgZm9udHNcclxuICogYWNyb3NzIG1vYmlsZSBicm93c2Vycy5cclxuICogXHJcbiAqIEEgbm90ZSBvbiBwZXJmb3JtYW5jZTogRXZlcnkgdGltZSB0aGUgY29udGVudHMgb2YgYSBUZXh0IG9iamVjdCBjaGFuZ2VzLCBpLmUuIGNoYW5naW5nIHRoZSB0ZXh0IGJlaW5nXHJcbiAqIGRpc3BsYXllZCwgb3IgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0LCBpdCBuZWVkcyB0byByZW1ha2UgdGhlIFRleHQgY2FudmFzLCBhbmQgaWYgb24gV2ViR0wsIHJlLXVwbG9hZCB0aGVcclxuICogbmV3IHRleHR1cmUgdG8gdGhlIEdQVS4gVGhpcyBjYW4gYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiBpZiB1c2VkIG9mdGVuLCBvciB3aXRoIGxhcmdlIHF1YW50aXRpZXMgb2ZcclxuICogVGV4dCBvYmplY3RzIGluIHlvdXIgZ2FtZS4gSWYgeW91IHJ1biBpbnRvIHBlcmZvcm1hbmNlIGlzc3VlcyB5b3Ugd291bGQgYmUgYmV0dGVyIG9mZiB1c2luZyBCaXRtYXAgVGV4dFxyXG4gKiBpbnN0ZWFkLCBhcyBpdCBiZW5lZml0cyBmcm9tIGJhdGNoaW5nIGFuZCBhdm9pZHMgZXhwZW5zaXZlIENhbnZhcyBBUEkgY2FsbHMuXHJcbiAqXHJcbiAqIEBjbGFzcyBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHRleHQgLSBUaGUgdGV4dCB0aGlzIFRleHQgb2JqZWN0IHdpbGwgZGlzcGxheS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0U3R5bGV9IHN0eWxlIC0gVGhlIHRleHQgc3R5bGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgVGV4dCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFRleHRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUZXh0IChzY2VuZSwgeCwgeSwgdGV4dCwgc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnVGV4dCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyZXIgaW4gdXNlIGJ5IHRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBzY2VuZS5zeXMuZ2FtZS5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigwLCAwKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZCB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29udGV4dCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZCB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2NvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUZXh0IFN0eWxlIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE1hbmFnZXMgdGhlIHN0eWxlIG9mIHRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzdHlsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgVGV4dFN0eWxlKHRoaXMsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHJvdW5kIGxpbmUgcG9zaXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjYXV0b1JvdW5kXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b1JvdW5kID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFJlZ3VsYXIgRXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gc3BsaXQgdGhlIHRleHQgdXAgaW50byBsaW5lcywgaW5cclxuICAgICAgICAgKiBtdWx0aS1saW5lIHRleHQuIEJ5IGRlZmF1bHQgdGhpcyBpcyBgLyg/OlxcclxcbnxcXHJ8XFxuKS9gLlxyXG4gICAgICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoaXMgUmVnRXhwIHRvIGJlIGFueXRoaW5nIGVsc2UgdGhhdCB5b3UgbWF5IG5lZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzcGxpdFJlZ0V4cFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGxpdFJlZ0V4cCA9IC8oPzpcXHJcXG58XFxyfFxcbikvO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjX3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RleHQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNwZWNpZnkgYSBwYWRkaW5nIHZhbHVlIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBsaW5lIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVGV4dCBzaXplLlxyXG4gICAgICAgICAqIEFsbG93cyB5b3UgdG8gYWRkIGV4dHJhIHNwYWNpbmcgaWYgdGhlIGJyb3dzZXIgaXMgdW5hYmxlIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0cnVlIGZvbnQgZGltZW5zaW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3BhZGRpbmdcclxuICAgICAgICAgKiBAdHlwZSB7e2xlZnQ6bnVtYmVyLHJpZ2h0Om51bWJlcix0b3A6bnVtYmVyLGJvdHRvbTpudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkZGluZyA9IHsgbGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGluZSBzcGFjaW5nIHZhbHVlLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGZvbnQgaGVpZ2h0IHRvIGNhbGN1bGF0ZSB0aGUgb3ZlcmFsbCBsaW5lIGhlaWdodC5cclxuICAgICAgICAgKiBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhpcyBUZXh0IG9iamVjdCBjb250YWlucyBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSB1cGRhdGUgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgYHNldExpbmVTcGFjaW5nYCBtZXRob2QsIHRoZW5cclxuICAgICAgICAgKiBiZSBzdXJlIHRvIGNhbGwgYHVwZGF0ZVRleHRgIGFmdGVyLCBvciB5b3Ugd29uJ3Qgc2VlIHRoZSBjaGFuZ2UgcmVmbGVjdGVkIGluIHRoZSBUZXh0IG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2xpbmVTcGFjaW5nXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saW5lU3BhY2luZyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRleHQgb3IgaXRzIHNldHRpbmdzIGhhdmUgY2hhbmdlZCBhbmQgbmVlZCB1cGRhdGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2RpcnR5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vICBJZiByZXNvbHV0aW9uIHdhc24ndCBzZXQsIHRoZW4gd2UgZ2V0IGl0IGZyb20gdGhlIGdhbWUgY29uZmlnXHJcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUucmVzb2x1dGlvbiA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3R5bGUucmVzb2x1dGlvbiA9IHNjZW5lLnN5cy5nYW1lLmNvbmZpZy5yZXNvbHV0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNfY3JvcFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3JvcCA9IHRoaXMucmVzZXRDcm9wT2JqZWN0KCk7XHJcblxyXG4gICAgICAgIC8vICBDcmVhdGUgYSBUZXh0dXJlIGZvciB0aGlzIFRleHQgb2JqZWN0XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gc2NlbmUuc3lzLnRleHR1cmVzLmFkZENhbnZhcyhudWxsLCB0aGlzLmNhbnZhcywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vICBHZXQgdGhlIGZyYW1lXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoKTtcclxuXHJcbiAgICAgICAgLy8gIFNldCB0aGUgcmVzb2x1dGlvblxyXG4gICAgICAgIHRoaXMuZnJhbWUuc291cmNlLnJlc29sdXRpb24gPSB0aGlzLnN0eWxlLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyICYmIHRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2xlYXIgdGhlIGRlZmF1bHQgMXgxIGdsVGV4dHVyZSwgYXMgd2Ugb3ZlcnJpZGUgaXQgbGF0ZXJcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNvdXJjZS5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0UlRMKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dCh0ZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLnBhZGRpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhZGRpbmcoc3R5bGUucGFkZGluZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUubGluZVNwYWNpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVTcGFjaW5nID0gc3R5bGUubGluZVNwYWNpbmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5DT05URVhUX1JFU1RPUkVELCBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSByaWdodCB0byBsZWZ0IHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNpbml0UlRMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgaW5pdFJUTDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3R5bGUucnRsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEhlcmUgaXMgd2hlcmUgdGhlIGNyYXp5IHN0YXJ0cy5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vICBEdWUgdG8gYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBpc3N1ZXMsIHlvdSBjYW5ub3QgZmlsbFRleHQgQmlEaSB0ZXh0IHRvIGEgY2FudmFzXHJcbiAgICAgICAgLy8gIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIERPTS4gSXQganVzdCBjb21wbGV0ZWx5IGlnbm9yZXMgdGhlIGRpcmVjdGlvbiBwcm9wZXJ0eS5cclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuZGlyID0gJ3J0bCc7XHJcblxyXG4gICAgICAgIC8vICBFeHBlcmltZW50YWwgYXRtLCBidXQgb25lIGRheSAuLi5cclxuICAgICAgICB0aGlzLmNvbnRleHQuZGlyZWN0aW9uID0gJ3J0bCc7XHJcblxyXG4gICAgICAgIC8vICBBZGQgaXQgdG8gdGhlIERPTSwgYnV0IGhpZGRlbiB3aXRoaW4gdGhlIHBhcmVudCBjYW52YXMuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgQWRkVG9ET00odGhpcy5jYW52YXMsIHRoaXMuc2NlbmUuc3lzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgIC8vICBBbmQgZmluYWxseSB3ZSBzZXQgdGhlIHggb3JpZ2luXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlciB0aGFuIGl0cyBob3Jpem9udGFsXHJcbiAgICAgKiBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNydW5Xb3JkV3JhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBwZXJmb3JtIHdvcmQgd3JhcCBkZXRlY3Rpb24gYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IGFmdGVyIHdyYXBwaW5nIGhhcyBiZWVuIGFwcGxpZWQuXHJcbiAgICAgKi9cclxuICAgIHJ1bldvcmRXcmFwOiBmdW5jdGlvbiAodGV4dClcclxuICAgIHtcclxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLnN0eWxlO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUud29yZFdyYXBDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB3cmFwcGVkTGluZXMgPSBzdHlsZS53b3JkV3JhcENhbGxiYWNrLmNhbGwoc3R5bGUud29yZFdyYXBDYWxsYmFja1Njb3BlLCB0ZXh0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdyYXBwZWRMaW5lcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcyA9IHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRMaW5lcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3R5bGUud29yZFdyYXBXaWR0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzdHlsZS53b3JkV3JhcFVzZUFkdmFuY2VkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFdvcmRXcmFwKHRleHQsIHRoaXMuY29udGV4dCwgdGhpcy5zdHlsZS53b3JkV3JhcFdpZHRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJhc2ljV29yZFdyYXAodGV4dCwgdGhpcy5jb250ZXh0LCB0aGlzLnN0eWxlLndvcmRXcmFwV2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlZCB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyIHRoYW4gaXRzIGhvcml6b250YWxcclxuICAgICAqIGJvdW5kcy4gQ29uc2VjdXRpdmUgc3BhY2VzIHdpbGwgYmUgY29sbGFwc2VkIGFuZCByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLiBMaW5lcyB3aWxsIGJlXHJcbiAgICAgKiB0cmltbWVkIG9mIHdoaXRlIHNwYWNlIGJlZm9yZSBwcm9jZXNzaW5nLiBUaHJvd3MgYW4gZXJyb3IgaWYgd29yZFdyYXBXaWR0aCBpcyBsZXNzIHRoYW4gYVxyXG4gICAgICogc2luZ2xlIGNoYXJhY3Rlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2FkdmFuY2VkV29yZFdyYXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gcGVyZm9ybSB3b3JkIHdyYXAgZGV0ZWN0aW9uIGFnYWluc3QuXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY29udGV4dCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29yZFdyYXBXaWR0aCAtIFRoZSB3b3JkIHdyYXAgd2lkdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgd3JhcHBlZCB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBhZHZhbmNlZFdvcmRXcmFwOiBmdW5jdGlvbiAodGV4dCwgY29udGV4dCwgd29yZFdyYXBXaWR0aClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XHJcblxyXG4gICAgICAgIC8vIENvbmRlbnNlIGNvbnNlY3V0aXZlIHNwYWNlcyBhbmQgc3BsaXQgaW50byBsaW5lc1xyXG4gICAgICAgIHZhciBsaW5lcyA9IHRleHRcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyArL2dpLCAnICcpXHJcbiAgICAgICAgICAgIC5zcGxpdCh0aGlzLnNwbGl0UmVnRXhwKTtcclxuXHJcbiAgICAgICAgdmFyIGxpbmVzQ291bnQgPSBsaW5lcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTtcclxuICAgICAgICAgICAgdmFyIG91dCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL14gKnxcXHMqJC9naSwgJycpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZW50aXJlIGxpbmUgaXMgbGVzcyB0aGFuIHdvcmRXcmFwV2lkdGggYXBwZW5kIHRoZSBlbnRpcmUgbGluZSBhbmQgZXhpdCBlYXJseVxyXG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lV2lkdGggPCB3b3JkV3JhcFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGluZSArICdcXG4nO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgY2FsY3VsYXRlIG5ldyBsaW5lc1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExpbmVXaWR0aCA9IHdvcmRXcmFwV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAvLyBTcGxpdCBpbnRvIHdvcmRzXHJcbiAgICAgICAgICAgIHZhciB3b3JkcyA9IGxpbmUuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB3b3JkID0gd29yZHNbal07XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpdGhTcGFjZSA9IHdvcmQgKyAnICc7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCh3b3JkV2l0aFNwYWNlKS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod29yZFdpZHRoID4gY3VycmVudExpbmVXaWR0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBCcmVhayB3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGF2ZSBvZmYgbGV0dGVycyBmcm9tIHdvcmQgdW50aWwgaXQncyBzbWFsbCBlbm91Z2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1dvcmQgPSB3b3JkV2l0aFNwYWNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld1dvcmQubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdXb3JkID0gbmV3V29yZC5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkV2lkdGggPSBjb250ZXh0Lm1lYXN1cmVUZXh0KG5ld1dvcmQpLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3JkV2lkdGggPD0gY3VycmVudExpbmVXaWR0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd29yZFdyYXBXaWR0aCBpcyB0b28gc21hbGwgZm9yIGV2ZW4gYSBzaW5nbGUgbGV0dGVyLCBzaGFtZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhaWx1cmUgd2l0aCBhIGZhdGFsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3V29yZC5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyB0ZXh0XFwncyB3b3JkV3JhcFdpZHRoIHNldHRpbmcgaXMgbGVzcyB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHdvcmQgaW4gYXJyYXkgd2l0aCByZW1haW5kZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZFBhcnQgPSB3b3JkLnN1YnN0cihuZXdXb3JkLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tqXSA9IHNlY29uZFBhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmlyc3QgcGllY2UgdG8gb3V0cHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBuZXdXb3JkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXhpc3Rpbmcgd29yZCBsZW5ndGggaXMgMCwgZG9uJ3QgaW5jbHVkZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAod29yZHNbal0ubGVuZ3RoKSA/IGogOiBqICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGFwc2UgcmVzdCBvZiBzZW50ZW5jZSBhbmQgcmVtb3ZlIGFueSB0cmFpbGluZyB3aGl0ZSBzcGFjZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZW1haW5kZXIgPSB3b3Jkcy5zbGljZShvZmZzZXQpLmpvaW4oJyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvWyBcXG5dKiQvZ2ksICcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZCByZW1haW5kZXIgdG8gbmV4dCBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXNbaSArIDFdID0gcmVtYWluZGVyICsgJyAnICsgKGxpbmVzW2kgKyAxXSB8fCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXNDb3VudCA9IGxpbmVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFByb2Nlc3Npbmcgb24gdGhpcyBsaW5lXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB3b3JkIHdpdGggc3BhY2UgdG8gb3V0cHV0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHdvcmRXaXRoU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCAtPSB3b3JkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGVuZCBwcm9jZXNzZWQgbGluZSB0byBvdXRwdXRcclxuICAgICAgICAgICAgb3V0cHV0ICs9IG91dC5yZXBsYWNlKC9bIFxcbl0qJC9naSwgJycpICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUcmltIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9bXFxzfFxcbl0qJC9naSwgJycpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyIHRoYW4gaXRzIGhvcml6b250YWxcclxuICAgICAqIGJvdW5kcy4gU3BhY2VzIGFyZSBub3QgY29sbGFwc2VkIGFuZCB3aGl0ZXNwYWNlIGlzIG5vdCB0cmltbWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjYmFzaWNXb3JkV3JhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBwZXJmb3JtIHdvcmQgd3JhcCBkZXRlY3Rpb24gYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JkV3JhcFdpZHRoIC0gVGhlIHdvcmQgd3JhcCB3aWR0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB3cmFwcGVkIHRleHQuXHJcbiAgICAgKi9cclxuICAgIGJhc2ljV29yZFdyYXA6IGZ1bmN0aW9uICh0ZXh0LCBjb250ZXh0LCB3b3JkV3JhcFdpZHRoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KHRoaXMuc3BsaXRSZWdFeHApO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XHJcbiAgICAgICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXMgZ3JlYXRlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal0gKyAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aFdpdGhTcGFjZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAod29yZHMubGVuZ3RoIC0gMSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgZ2l2ZW4gdGV4dCB0aHJvdWdoIHRoaXMgVGV4dCBvYmplY3RzIHdvcmQgd3JhcHBpbmcgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgYXMgYW5cclxuICAgICAqIGFycmF5LCB3aGVyZSBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgd3JhcHBlZCBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNnZXRXcmFwcGVkVGV4dFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBmb3Igd2hpY2ggdGhlIHdyYXBwaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gSWYgdW5zcGVjaWZpZWQsIHRoZSBUZXh0IG9iamVjdHMgY3VycmVudCB0ZXh0IHdpbGwgYmUgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBwaWVjZXMgb2Ygd3JhcHBlZCB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBnZXRXcmFwcGVkVGV4dDogZnVuY3Rpb24gKHRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgeyB0ZXh0ID0gdGhpcy5fdGV4dDsgfVxyXG5cclxuICAgICAgICB0aGlzLnN0eWxlLnN5bmNGb250KHRoaXMuY2FudmFzLCB0aGlzLmNvbnRleHQpO1xyXG5cclxuICAgICAgICB2YXIgd3JhcHBlZExpbmVzID0gdGhpcy5ydW5Xb3JkV3JhcCh0ZXh0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZWRMaW5lcy5zcGxpdCh0aGlzLnNwbGl0UmVnRXhwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRleHQgdG8gZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBBbiBhcnJheSBvZiBzdHJpbmdzIHdpbGwgYmUgam9pbmVkIHdpdGggYFxcbmAgbGluZSBicmVha3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRUZXh0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSB2YWx1ZSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl90ZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGV4dC5zZXRTdHlsZSh7XHJcbiAgICAgKiAgICAgZm9udFNpemU6ICc2NHB4JyxcclxuICAgICAqICAgICBmb250RmFtaWx5OiAnQXJpYWwnLFxyXG4gICAgICogICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgKiAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICogICAgIGJhY2tncm91bmRDb2xvcjogJyNmZjAwZmYnXHJcbiAgICAgKiB9KTtcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGUgLSBUaGUgc3R5bGUgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFN0eWxlKHN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGZvbnQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBzdHJpbmcgaXMgZ2l2ZW4sIHRoZSBmb250IGZhbWlseSBpcyBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIGdpdmVuLCB0aGUgYGZvbnRGYW1pbHlgLCBgZm9udFNpemVgIGFuZCBgZm9udFN0eWxlYFxyXG4gICAgICogcHJvcGVydGllcyBvZiB0aGF0IG9iamVjdCBhcmUgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiAqKkltcG9ydGFudDoqKiBJZiB0aGUgZm9udCB5b3Ugd2lzaCB0byB1c2UgaGFzIGEgc3BhY2Ugb3IgZGlnaXQgaW4gaXRzIG5hbWUsIHN1Y2ggYXNcclxuICAgICAqICdQcmVzcyBTdGFydCAyUCcgb3IgJ1JvYm90byBDb25kZW5zZWQnLCB0aGVuIHlvdSBfbXVzdF8gcHV0IHRoZSBmb250IG5hbWUgaW4gcXVvdGVzOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBUZXh0LnNldEZvbnQoJ1wiUm9ib3RvIENvbmRlbnNlZFwiJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogRXF1YWxseSwgaWYgeW91IHdpc2ggdG8gcHJvdmlkZSBhIGxpc3Qgb2YgZmFsbGJhY2sgZm9udHMsIHRoZW4geW91IHNob3VsZCBlbnN1cmUgdGhleSBhcmUgYWxsXHJcbiAgICAgKiBxdW90ZWQgcHJvcGVybHksIHRvbzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogVGV4dC5zZXRGb250KCdWZXJkYW5hLCBcIlRpbWVzIE5ldyBSb21hblwiLCBUYWhvbWEsIHNlcmlmJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldEZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGZvbnQgZmFtaWx5IG9yIGZvbnQgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250OiBmdW5jdGlvbiAoZm9udClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRGb250KGZvbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgZm9udCBmYW1pbHkuXHJcbiAgICAgKiBcclxuICAgICAqICoqSW1wb3J0YW50OioqIElmIHRoZSBmb250IHlvdSB3aXNoIHRvIHVzZSBoYXMgYSBzcGFjZSBvciBkaWdpdCBpbiBpdHMgbmFtZSwgc3VjaCBhc1xyXG4gICAgICogJ1ByZXNzIFN0YXJ0IDJQJyBvciAnUm9ib3RvIENvbmRlbnNlZCcsIHRoZW4geW91IF9tdXN0XyBwdXQgdGhlIGZvbnQgbmFtZSBpbiBxdW90ZXM6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIFRleHQuc2V0Rm9udCgnXCJSb2JvdG8gQ29uZGVuc2VkXCInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBFcXVhbGx5LCBpZiB5b3Ugd2lzaCB0byBwcm92aWRlIGEgbGlzdCBvZiBmYWxsYmFjayBmb250cywgdGhlbiB5b3Ugc2hvdWxkIGVuc3VyZSB0aGV5IGFyZSBhbGxcclxuICAgICAqIHF1b3RlZCBwcm9wZXJseSwgdG9vOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBUZXh0LnNldEZvbnQoJ1ZlcmRhbmEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIFRhaG9tYSwgc2VyaWYnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rm9udEZhbWlseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhbWlseSAtIFRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udEZhbWlseTogZnVuY3Rpb24gKGZhbWlseSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRGb250RmFtaWx5KGZhbWlseSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRGb250U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgZm9udCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250U2l6ZTogZnVuY3Rpb24gKHNpemUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rm9udFNpemUoc2l6ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rm9udFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGUgLSBUaGUgZm9udCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rm9udFN0eWxlKHN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBhbmQgaGVpZ2h0IGZvciB0aGUgdGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBQYXNzIGluIGAwYCBmb3IgZWl0aGVyIG9mIHRoZXNlIHBhcmFtZXRlcnMgdG8gZGlzYWJsZSBmaXhlZCB3aWR0aCBvciBoZWlnaHQgcmVzcGVjdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rml4ZWRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgZml4ZWQgd2lkdGggdG8gc2V0LiBgMGAgZGlzYWJsZXMgZml4ZWQgd2lkdGguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGZpeGVkIGhlaWdodCB0byBzZXQuIGAwYCBkaXNhYmxlcyBmaXhlZCBoZWlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZpeGVkU2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rml4ZWRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYmFja2dyb3VuZCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldEJhY2tncm91bmRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIGJhY2tncm91bmQgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJhY2tncm91bmRDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgYnkgdGhlIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2FuIGJlIGFueSB2YWxpZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmlsbFN0eWxlIHZhbHVlLCBzdWNoIGFzXHJcbiAgICAgKiBhIGNvbG9yIChpbiBoZXgsIHJnYiwgcmdiYSwgaHNsIG9yIG5hbWVkIHZhbHVlcyksIGEgZ3JhZGllbnQgb3IgYSBwYXR0ZXJuLlxyXG4gICAgICpcclxuICAgICAqIFNlZSB0aGUgW01ETiBmaWxsU3R5bGUgZG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC9maWxsU3R5bGUpIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRGaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8YW55KX0gY29sb3IgLSBUaGUgdGV4dCBmaWxsIHN0eWxlLiBDYW4gYmUgYW55IHZhbGlkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYGZpbGxTdHlsZWAgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZpbGw6IGZ1bmN0aW9uIChmaWxsU3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0RmlsbChmaWxsU3R5bGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Q29sb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFRoZSB0ZXh0IGZpbGwgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbG9yOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Q29sb3IoY29sb3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgc3Ryb2tlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgc3Ryb2tlIGNvbG9yLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRoaWNrbmVzcyAtIFRoZSBzdHJva2UgdGhpY2tuZXNzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdHJva2U6IGZ1bmN0aW9uIChjb2xvciwgdGhpY2tuZXNzKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFN0cm9rZShjb2xvciwgdGhpY2tuZXNzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj0nIzAwMCddIC0gVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmx1cj0wXSAtIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaGFkb3dTdHJva2U9ZmFsc2VdIC0gV2hldGhlciB0byBzdHJva2UgdGhlIHNoYWRvdy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NoYWRvd0ZpbGw9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZpbGwgdGhlIHNoYWRvdy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93OiBmdW5jdGlvbiAoeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRTaGFkb3coeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93T2Zmc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNoYWRvdyBvZmZzZXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dPZmZzZXQ6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFNoYWRvd09mZnNldCh4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd0NvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgc2hhZG93IGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFNoYWRvd0NvbG9yKGNvbG9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd0JsdXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibHVyIC0gVGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93Qmx1cjogZnVuY3Rpb24gKGJsdXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93Qmx1cihibHVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzaGFkb3cgc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93U3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHNoYWRvdyBzdHJva2UgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNoYWRvd1N0cm9rZTogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93U3Ryb2tlKGVuYWJsZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHNoYWRvdyBmaWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93RmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93RmlsbDogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93RmlsbChlbmFibGVkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdpZHRoIChpbiBwaXhlbHMpIHRvIHVzZSBmb3Igd3JhcHBpbmcgbGluZXMuIFBhc3MgaW4gbnVsbCB0byByZW1vdmUgd3JhcHBpbmcgYnkgd2lkdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRXb3JkV3JhcFdpZHRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gez9udW1iZXJ9IHdpZHRoIC0gVGhlIG1heGltdW0gd2lkdGggb2YgYSBsaW5lIGluIHBpeGVscy4gU2V0IHRvIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXNlQWR2YW5jZWRXcmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgYWR2YW5jZWQgd3JhcHBpbmdcclxuICAgICAqIGFsZ29yaXRobS4gSWYgdHJ1ZSwgc3BhY2VzIGFyZSBjb2xsYXBzZWQgYW5kIHdoaXRlc3BhY2UgaXMgdHJpbW1lZCBmcm9tIGxpbmVzLiBJZiBmYWxzZSxcclxuICAgICAqIHNwYWNlcyBhbmQgd2hpdGVzcGFjZSBhcmUgbGVmdCBhcyBpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBXaWR0aDogZnVuY3Rpb24gKHdpZHRoLCB1c2VBZHZhbmNlZFdyYXApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0V29yZFdyYXBXaWR0aCh3aWR0aCwgdXNlQWR2YW5jZWRXcmFwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjdXN0b20gY2FsbGJhY2sgZm9yIHdyYXBwaW5nIGxpbmVzLiBQYXNzIGluIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nIGJ5IGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0V29yZFdyYXBDYWxsYmFja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtUZXh0U3R5bGVXb3JkV3JhcENhbGxiYWNrfSBjYWxsYmFjayAtIEEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgdGhlXHJcbiAgICAgKiB0ZXh0LiBJdCB3aWxsIHJlY2VpdmUgdHdvIGFyZ3VtZW50czogdGV4dCAodGhlIHN0cmluZyB0byB3cmFwKSwgdGV4dE9iamVjdCAodGhpcyBUZXh0XHJcbiAgICAgKiBpbnN0YW5jZSkuIEl0IHNob3VsZCByZXR1cm4gdGhlIHdyYXBwZWQgbGluZXMgZWl0aGVyIGFzIGFuIGFycmF5IG9mIGxpbmVzIG9yIGFzIGEgc3RyaW5nIHdpdGhcclxuICAgICAqIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBwbGFjZSB0byBpbmRpY2F0ZSB3aGVyZSBicmVha3Mgc2hvdWxkIGhhcHBlbi5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2NvcGU9bnVsbF0gLSBUaGUgc2NvcGUgdGhhdCB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBzY29wZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRXb3JkV3JhcENhbGxiYWNrKGNhbGxiYWNrLCBzY29wZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGFyZ3VtZW50IGNhbiBiZSBvbmUgb2Y6IGBsZWZ0YCwgYHJpZ2h0YCwgYGNlbnRlcmAgb3IgYGp1c3RpZnlgLlxyXG4gICAgICogXHJcbiAgICAgKiBBbGlnbm1lbnQgb25seSB3b3JrcyBpZiB0aGUgVGV4dCBvYmplY3QgaGFzIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0QWxpZ25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpZ249J2xlZnQnXSAtIFRoZSB0ZXh0IGFsaWdubWVudCBmb3IgbXVsdGktbGluZSB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbGlnbjogZnVuY3Rpb24gKGFsaWduKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldEFsaWduKGFsaWduKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHJlc29sdXRpb24gdXNlZCBieSB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZyxcclxuICAgICAqIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IHZpYSB0aGlzIG1ldGhvZCwgb3IgYnkgc3BlY2lmeWluZyBpdCBpbiB0aGUgVGV4dCBzdHlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogSXQgYWxsb3dzIGZvciBtdWNoIGNsZWFyZXIgdGV4dCBvbiBIaWdoIERQSSBkZXZpY2VzLCBhdCB0aGUgY29zdCBvZiBtZW1vcnkgYmVjYXVzZSBpdCB1c2VzIGxhcmdlclxyXG4gICAgICogaW50ZXJuYWwgQ2FudmFzIHRleHR1cmVzIGZvciB0aGUgVGV4dC5cclxuICAgICAqIFxyXG4gICAgICogVGhlcmVmb3JlLCBwbGVhc2UgdXNlIHdpdGggY2F1dGlvbiwgYXMgdGhlIG1vcmUgaGlnaCByZXMgVGV4dCB5b3UgaGF2ZSwgdGhlIG1vcmUgbWVtb3J5IGl0IHVzZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJlc29sdXRpb24gZm9yIHRoaXMgVGV4dCBvYmplY3QgdG8gdXNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0UmVzb2x1dGlvbih2YWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbGluZSBzcGFjaW5nIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgdmFsdWUgaXMgX2FkZGVkXyB0byB0aGUgaGVpZ2h0IG9mIHRoZSBmb250IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG92ZXJhbGwgbGluZSBoZWlnaHQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiB0aGlzIFRleHQgb2JqZWN0IGNvbnNpc3RzIG9mIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRMaW5lU3BhY2luZ1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSBmb250IGhlaWdodCB0byBhY2hpZXZlIHRoZSBvdmVyYWxsIGxpbmUgaGVpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRMaW5lU3BhY2luZzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGluZVNwYWNpbmcgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVGV4dCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBwYWRkaW5nLlxyXG4gICAgICpcclxuICAgICAqICdsZWZ0JyBjYW4gYmUgYW4gb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIG9ubHkgJ2xlZnQnIGFuZCAndG9wJyBhcmUgZ2l2ZW4gdGhleSBhcmUgdHJlYXRlZCBhcyAneCcgYW5kICd5Jy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFBhZGRpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0UGFkZGluZyl9IGxlZnQgLSBUaGUgbGVmdCBwYWRkaW5nIHZhbHVlLCBvciBhIHBhZGRpbmcgY29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIHBhZGRpbmcgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgLSBUaGUgcmlnaHQgcGFkZGluZyB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gLSBUaGUgYm90dG9tIHBhZGRpbmcgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhZGRpbmc6IGZ1bmN0aW9uIChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBsZWZ0O1xyXG5cclxuICAgICAgICAgICAgLy8gIElmIHRoZXkgc3BlY2lmeSB4IGFuZC9vciB5IHRoaXMgYXBwbGllcyB0byBhbGxcclxuICAgICAgICAgICAgdmFyIHggPSBHZXRWYWx1ZShjb25maWcsICd4JywgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoeCAhPT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IHg7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIDApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHQgPSBHZXRWYWx1ZShjb25maWcsICdyaWdodCcsIGxlZnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgeSA9IEdldFZhbHVlKGNvbmZpZywgJ3knLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh5ICE9PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0b3AgPSB5O1xyXG4gICAgICAgICAgICAgICAgYm90dG9tID0geTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvcCA9IEdldFZhbHVlKGNvbmZpZywgJ3RvcCcsIDApO1xyXG4gICAgICAgICAgICAgICAgYm90dG9tID0gR2V0VmFsdWUoY29uZmlnLCAnYm90dG9tJywgdG9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkKSB7IGxlZnQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmICh0b3AgPT09IHVuZGVmaW5lZCkgeyB0b3AgPSBsZWZ0OyB9XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7IHJpZ2h0ID0gbGVmdDsgfVxyXG4gICAgICAgICAgICBpZiAoYm90dG9tID09PSB1bmRlZmluZWQpIHsgYm90dG9tID0gdG9wOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcubGVmdCA9IGxlZnQ7XHJcbiAgICAgICAgdGhpcy5wYWRkaW5nLnRvcCA9IHRvcDtcclxuICAgICAgICB0aGlzLnBhZGRpbmcucmlnaHQgPSByaWdodDtcclxuICAgICAgICB0aGlzLnBhZGRpbmcuYm90dG9tID0gYm90dG9tO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVUZXh0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0TWF4TGluZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0wXSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhMaW5lczogZnVuY3Rpb24gKG1heClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRNYXhMaW5lcyhtYXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZGlzcGxheWVkIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCN1cGRhdGVUZXh0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlVGV4dDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZTtcclxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHN0eWxlLnJlc29sdXRpb247XHJcbiAgICAgICAgdmFyIHNpemUgPSBzdHlsZS5tZXRyaWNzO1xyXG5cclxuICAgICAgICBzdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG5cclxuICAgICAgICB2YXIgb3V0cHV0VGV4dCA9IHRoaXMuX3RleHQ7XHJcblxyXG4gICAgICAgIGlmIChzdHlsZS53b3JkV3JhcFdpZHRoIHx8IHN0eWxlLndvcmRXcmFwQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXRUZXh0ID0gdGhpcy5ydW5Xb3JkV3JhcCh0aGlzLl90ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTcGxpdCB0ZXh0IGludG8gbGluZXNcclxuICAgICAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KHRoaXMuc3BsaXRSZWdFeHApO1xyXG5cclxuICAgICAgICB2YXIgdGV4dFNpemUgPSBHZXRUZXh0U2l6ZSh0aGlzLCBzaXplLCBsaW5lcyk7XHJcblxyXG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5wYWRkaW5nO1xyXG5cclxuICAgICAgICB2YXIgdGV4dFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUuZml4ZWRXaWR0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0ZXh0U2l6ZS53aWR0aCArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XHJcblxyXG4gICAgICAgICAgICB0ZXh0V2lkdGggPSB0ZXh0U2l6ZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHN0eWxlLmZpeGVkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICB0ZXh0V2lkdGggPSB0aGlzLndpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0ZXh0V2lkdGggPCB0ZXh0U2l6ZS53aWR0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gdGV4dFNpemUud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdHlsZS5maXhlZEhlaWdodCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGV4dFNpemUuaGVpZ2h0ICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzdHlsZS5maXhlZEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaCA9IHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgdyAqPSByZXNvbHV0aW9uO1xyXG4gICAgICAgIGggKj0gcmVzb2x1dGlvbjtcclxuXHJcbiAgICAgICAgdyA9IE1hdGgubWF4KHcsIDEpO1xyXG4gICAgICAgIGggPSBNYXRoLm1heChoLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gdyB8fCBjYW52YXMuaGVpZ2h0ICE9PSBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdztcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGg7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldFNpemUodywgaCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSByZXNpemluZyB0aGUgY2FudmFzIHJlc2V0cyB0aGUgY29udGV4dFxyXG4gICAgICAgICAgICBzdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xyXG5cclxuICAgICAgICBjb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUuYmFja2dyb3VuZENvbG9yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHlsZS5zeW5jU3R5bGUoY2FudmFzLCBjb250ZXh0KTtcclxuXHJcbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBwYWRkaW5nXHJcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUocGFkZGluZy5sZWZ0LCBwYWRkaW5nLnRvcCk7XHJcblxyXG4gICAgICAgIHZhciBsaW5lUG9zaXRpb25YO1xyXG4gICAgICAgIHZhciBsaW5lUG9zaXRpb25ZO1xyXG5cclxuICAgICAgICAvLyAgRHJhdyB0ZXh0IGxpbmUgYnkgbGluZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dFNpemUubGluZXM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xyXG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogdGV4dFNpemUubGluZUhlaWdodCkgKyBzaXplLmFzY2VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWSArPSAodGV4dFNpemUubGluZVNwYWNpbmcgKiBpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0eWxlLnJ0bClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHcgLSBsaW5lUG9zaXRpb25YO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IHRleHRXaWR0aCAtIHRleHRTaXplLmxpbmVXaWR0aHNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9ICh0ZXh0V2lkdGggLSB0ZXh0U2l6ZS5saW5lV2lkdGhzW2ldKSAvIDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdqdXN0aWZ5JylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRvIGp1c3RpZnkgdGV4dCBsaW5lIGl0cyB3aWR0aCBtdXN0IGJlIG5vIGxlc3MgdGhhbiA4NSUgb2YgZGVmaW5lZCB3aWR0aFxyXG4gICAgICAgICAgICAgICAgdmFyIG1pbmltdW1MZW5ndGhUb0FwcGx5SnVzdGlmaWNhdGlvbiA9IDAuODU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHRTaXplLmxpbmVXaWR0aHNbaV0gLyB0ZXh0U2l6ZS53aWR0aCA+PSBtaW5pbXVtTGVuZ3RoVG9BcHBseUp1c3RpZmljYXRpb24pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhU3BhY2UgPSB0ZXh0U2l6ZS53aWR0aCAtIHRleHRTaXplLmxpbmVXaWR0aHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNlU2l6ZSA9IGNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbW1lZExpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gdHJpbW1lZExpbmUuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFTcGFjZSArPSAobGluZXNbaV0ubGVuZ3RoIC0gdHJpbW1lZExpbmUubGVuZ3RoKSAqIHNwYWNlU2l6ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhU3BhY2VDaGFyYWN0ZXJzID0gTWF0aC5mbG9vcihleHRyYVNwYWNlIC8gc3BhY2VTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGV4dHJhU3BhY2VDaGFyYWN0ZXJzID4gMClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2lkeF0gKz0gJyAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSAoYXJyYXkubGVuZ3RoIC0gMSB8fCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS1leHRyYVNwYWNlQ2hhcmFjdGVycztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gYXJyYXkuam9pbignICcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUm91bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBNYXRoLnJvdW5kKGxpbmVQb3NpdGlvblgpO1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IE1hdGgucm91bmQobGluZVBvc2l0aW9uWSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZS5zdHJva2VUaGlja25lc3MpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuc3luY1NoYWRvdyhjb250ZXh0LCBzdHlsZS5zaGFkb3dTdHJva2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZS5jb2xvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5zeW5jU2hhZG93KGNvbnRleHQsIHN0eWxlLnNoYWRvd0ZpbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNvdXJjZS5nbFRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLmNhbnZhc1RvVGV4dHVyZShjYW52YXMsIHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdsVGV4dHVyZSA9IHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xyXG5cclxuICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0LmN1c3RvbUhpdEFyZWEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbnB1dC5oaXRBcmVhLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY3VycmVudCB0ZXh0IG1ldHJpY3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNnZXRUZXh0TWV0cmljc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgdGV4dCBtZXRyaWNzLlxyXG4gICAgICovXHJcbiAgICBnZXRUZXh0TWV0cmljczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRUZXh0TWV0cmljcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0ZXh0IHN0cmluZyBiZWluZyByZW5kZXJlZCBieSB0aGlzIFRleHQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjdGV4dFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0ZXh0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0KHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGV4dCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5KU09OR2FtZU9iamVjdH0gQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSBDb21wb25lbnRzLlRvSlNPTih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIEV4dHJhIFRleHQgZGF0YSBpcyBhZGRlZCBoZXJlXHJcblxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBhdXRvUm91bmQ6IHRoaXMuYXV0b1JvdW5kLFxyXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLl90ZXh0LFxyXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5zdHlsZS50b0pTT04oKSxcclxuICAgICAgICAgICAgcGFkZGluZzoge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogdGhpcy5wYWRkaW5nLmxlZnQsXHJcbiAgICAgICAgICAgICAgICByaWdodDogdGhpcy5wYWRkaW5nLnJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnBhZGRpbmcudG9wLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiB0aGlzLnBhZGRpbmcuYm90dG9tXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBvdXQuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjcHJlRGVzdHJveVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHByZURlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUucnRsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgUmVtb3ZlRnJvbURPTSh0aGlzLmNhbnZhcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gbWFwcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuNSwgbWVhbmluZyBhbGwgR2FtZSBPYmplY3RzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZWlyIGNlbnRlci5cclxuICAgICAqIFNldHRpbmcgdGhlIHZhbHVlIHRvIDAgbWVhbnMgdGhlIHBvc2l0aW9uIG5vdyByZWxhdGVzIHRvIHRoZSBsZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2ZXJ0aWNhbCBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gbWFwcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuNSwgbWVhbmluZyBhbGwgR2FtZSBPYmplY3RzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZWlyIGNlbnRlci5cclxuICAgICAqIFNldHRpbmcgdGhlIHZhbHVlIHRvIDAgbWVhbnMgdGhlIHBvc2l0aW9uIG5vdyByZWxhdGVzIHRvIHRoZSB0b3Agb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/Text.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Text#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Text} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if ((src.width === 0) || (src.height === 0))\r\n    {\r\n        return;\r\n    }\r\n\r\n    renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = TextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q2FudmFzUmVuZGVyZXIuanM/NzVlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgVGV4dENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKChzcmMud2lkdGggPT09IDApIHx8IChzcmMuaGVpZ2h0ID09PSAwKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dENhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextCreator.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/TextCreator.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Text = __webpack_require__(/*! ./Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\");\r\n\r\n/**\r\n * Creates a new Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#text\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Text} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('text', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    // style Object = {\r\n    //     font: [ 'font', '16px Courier' ],\r\n    //     backgroundColor: [ 'backgroundColor', null ],\r\n    //     fill: [ 'fill', '#fff' ],\r\n    //     stroke: [ 'stroke', '#fff' ],\r\n    //     strokeThickness: [ 'strokeThickness', 0 ],\r\n    //     shadowOffsetX: [ 'shadow.offsetX', 0 ],\r\n    //     shadowOffsetY: [ 'shadow.offsetY', 0 ],\r\n    //     shadowColor: [ 'shadow.color', '#000' ],\r\n    //     shadowBlur: [ 'shadow.blur', 0 ],\r\n    //     shadowStroke: [ 'shadow.stroke', false ],\r\n    //     shadowFill: [ 'shadow.fill', false ],\r\n    //     align: [ 'align', 'left' ],\r\n    //     maxLines: [ 'maxLines', 0 ],\r\n    //     fixedWidth: [ 'fixedWidth', false ],\r\n    //     fixedHeight: [ 'fixedHeight', false ],\r\n    //     rtl: [ 'rtl', false ]\r\n    // }\r\n\r\n    var content = GetAdvancedValue(config, 'text', '');\r\n    var style = GetAdvancedValue(config, 'style', null);\r\n\r\n    //  Padding\r\n    //      { padding: 2 }\r\n    //      { padding: { x: , y: }}\r\n    //      { padding: { left: , top: }}\r\n    //      { padding: { left: , right: , top: , bottom: }}\r\n\r\n    var padding = GetAdvancedValue(config, 'padding', null);\r\n\r\n    if (padding !== null)\r\n    {\r\n        style.padding = padding;\r\n    }\r\n\r\n    var text = new Text(this.scene, 0, 0, content, style);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, text, config);\r\n\r\n    //  Text specific config options:\r\n\r\n    text.autoRound = GetAdvancedValue(config, 'autoRound', true);\r\n    text.resolution = GetAdvancedValue(config, 'resolution', 1);\r\n\r\n    return text;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q3JlYXRvci5qcz8yNDdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3QztBQUN2RSxXQUFXLG1CQUFPLENBQUMseUVBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiLGFBQWEsV0FBVztBQUN4QixhQUFhLFdBQVc7QUFDeEIsYUFBYSxXQUFXOztBQUV4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvc3RhdGljL1RleHRDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIFRleHQgPSByZXF1aXJlKCcuL1RleHQnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRleHQgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3RleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3RleHQnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICAvLyBzdHlsZSBPYmplY3QgPSB7XHJcbiAgICAvLyAgICAgZm9udDogWyAnZm9udCcsICcxNnB4IENvdXJpZXInIF0sXHJcbiAgICAvLyAgICAgYmFja2dyb3VuZENvbG9yOiBbICdiYWNrZ3JvdW5kQ29sb3InLCBudWxsIF0sXHJcbiAgICAvLyAgICAgZmlsbDogWyAnZmlsbCcsICcjZmZmJyBdLFxyXG4gICAgLy8gICAgIHN0cm9rZTogWyAnc3Ryb2tlJywgJyNmZmYnIF0sXHJcbiAgICAvLyAgICAgc3Ryb2tlVGhpY2tuZXNzOiBbICdzdHJva2VUaGlja25lc3MnLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93T2Zmc2V0WDogWyAnc2hhZG93Lm9mZnNldFgnLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93T2Zmc2V0WTogWyAnc2hhZG93Lm9mZnNldFknLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93Q29sb3I6IFsgJ3NoYWRvdy5jb2xvcicsICcjMDAwJyBdLFxyXG4gICAgLy8gICAgIHNoYWRvd0JsdXI6IFsgJ3NoYWRvdy5ibHVyJywgMCBdLFxyXG4gICAgLy8gICAgIHNoYWRvd1N0cm9rZTogWyAnc2hhZG93LnN0cm9rZScsIGZhbHNlIF0sXHJcbiAgICAvLyAgICAgc2hhZG93RmlsbDogWyAnc2hhZG93LmZpbGwnLCBmYWxzZSBdLFxyXG4gICAgLy8gICAgIGFsaWduOiBbICdhbGlnbicsICdsZWZ0JyBdLFxyXG4gICAgLy8gICAgIG1heExpbmVzOiBbICdtYXhMaW5lcycsIDAgXSxcclxuICAgIC8vICAgICBmaXhlZFdpZHRoOiBbICdmaXhlZFdpZHRoJywgZmFsc2UgXSxcclxuICAgIC8vICAgICBmaXhlZEhlaWdodDogWyAnZml4ZWRIZWlnaHQnLCBmYWxzZSBdLFxyXG4gICAgLy8gICAgIHJ0bDogWyAncnRsJywgZmFsc2UgXVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBjb250ZW50ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd0ZXh0JywgJycpO1xyXG4gICAgdmFyIHN0eWxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzdHlsZScsIG51bGwpO1xyXG5cclxuICAgIC8vICBQYWRkaW5nXHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogMiB9XHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogeyB4OiAsIHk6IH19XHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogeyBsZWZ0OiAsIHRvcDogfX1cclxuICAgIC8vICAgICAgeyBwYWRkaW5nOiB7IGxlZnQ6ICwgcmlnaHQ6ICwgdG9wOiAsIGJvdHRvbTogfX1cclxuXHJcbiAgICB2YXIgcGFkZGluZyA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAncGFkZGluZycsIG51bGwpO1xyXG5cclxuICAgIGlmIChwYWRkaW5nICE9PSBudWxsKVxyXG4gICAge1xyXG4gICAgICAgIHN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0ZXh0ID0gbmV3IFRleHQodGhpcy5zY2VuZSwgMCwgMCwgY29udGVudCwgc3R5bGUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgLy8gIFRleHQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnM6XHJcblxyXG4gICAgdGV4dC5hdXRvUm91bmQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2F1dG9Sb3VuZCcsIHRydWUpO1xyXG4gICAgdGV4dC5yZXNvbHV0aW9uID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdyZXNvbHV0aW9uJywgMSk7XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextFactory.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/TextFactory.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Text = __webpack_require__(/*! ./Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Text Game Object and adds it to the Scene.\r\n * \r\n * A Text Game Object.\r\n * \r\n * Text objects work by creating their own internal hidden Canvas and then renders text to it using\r\n * the standard Canvas `fillText` API. It then creates a texture from this canvas which is rendered\r\n * to your game during the render pass.\r\n * \r\n * Because it uses the Canvas API you can take advantage of all the features this offers, such as\r\n * applying gradient fills to the text, or strokes, shadows and more. You can also use custom fonts\r\n * loaded externally, such as Google or TypeKit Web fonts.\r\n *\r\n * You can only display fonts that are currently loaded and available to the browser: therefore fonts must\r\n * be pre-loaded. Phaser does not do ths for you, so you will require the use of a 3rd party font loader,\r\n * or have the fonts ready available in the CSS on the page in which your Phaser game resides.\r\n *\r\n * See {@link http://www.jordanm.co.uk/tinytype this compatibility table} for the available default fonts\r\n * across mobile browsers.\r\n * \r\n * A note on performance: Every time the contents of a Text object changes, i.e. changing the text being\r\n * displayed, or the style of the text, it needs to remake the Text canvas, and if on WebGL, re-upload the\r\n * new texture to the GPU. This can be an expensive operation if used often, or with large quantities of\r\n * Text objects in your game. If you run into performance issues you would be better off using Bitmap Text\r\n * instead, as it benefits from batching and avoids expensive Canvas API calls.\r\n *\r\n * Note: This method will only be available if the Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#text\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {(string|string[])} text - The text this Text object will display.\r\n * @param {object} [style] - The Text style configuration object.\r\n *\r\n * @return {Phaser.GameObjects.Text} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('text', function (x, y, text, style)\r\n{\r\n    return this.displayList.add(new Text(this.scene, x, y, text, style));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0RmFjdG9yeS5qcz9mOTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMseUVBQVE7QUFDM0Isd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBaUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvc3RhdGljL1RleHRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGV4dCA9IHJlcXVpcmUoJy4vVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgVGV4dCBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBBIFRleHQgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUZXh0IG9iamVjdHMgd29yayBieSBjcmVhdGluZyB0aGVpciBvd24gaW50ZXJuYWwgaGlkZGVuIENhbnZhcyBhbmQgdGhlbiByZW5kZXJzIHRleHQgdG8gaXQgdXNpbmdcclxuICogdGhlIHN0YW5kYXJkIENhbnZhcyBgZmlsbFRleHRgIEFQSS4gSXQgdGhlbiBjcmVhdGVzIGEgdGV4dHVyZSBmcm9tIHRoaXMgY2FudmFzIHdoaWNoIGlzIHJlbmRlcmVkXHJcbiAqIHRvIHlvdXIgZ2FtZSBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLlxyXG4gKiBcclxuICogQmVjYXVzZSBpdCB1c2VzIHRoZSBDYW52YXMgQVBJIHlvdSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgYWxsIHRoZSBmZWF0dXJlcyB0aGlzIG9mZmVycywgc3VjaCBhc1xyXG4gKiBhcHBseWluZyBncmFkaWVudCBmaWxscyB0byB0aGUgdGV4dCwgb3Igc3Ryb2tlcywgc2hhZG93cyBhbmQgbW9yZS4gWW91IGNhbiBhbHNvIHVzZSBjdXN0b20gZm9udHNcclxuICogbG9hZGVkIGV4dGVybmFsbHksIHN1Y2ggYXMgR29vZ2xlIG9yIFR5cGVLaXQgV2ViIGZvbnRzLlxyXG4gKlxyXG4gKiBZb3UgY2FuIG9ubHkgZGlzcGxheSBmb250cyB0aGF0IGFyZSBjdXJyZW50bHkgbG9hZGVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIGJyb3dzZXI6IHRoZXJlZm9yZSBmb250cyBtdXN0XHJcbiAqIGJlIHByZS1sb2FkZWQuIFBoYXNlciBkb2VzIG5vdCBkbyB0aHMgZm9yIHlvdSwgc28geW91IHdpbGwgcmVxdWlyZSB0aGUgdXNlIG9mIGEgM3JkIHBhcnR5IGZvbnQgbG9hZGVyLFxyXG4gKiBvciBoYXZlIHRoZSBmb250cyByZWFkeSBhdmFpbGFibGUgaW4gdGhlIENTUyBvbiB0aGUgcGFnZSBpbiB3aGljaCB5b3VyIFBoYXNlciBnYW1lIHJlc2lkZXMuXHJcbiAqXHJcbiAqIFNlZSB7QGxpbmsgaHR0cDovL3d3dy5qb3JkYW5tLmNvLnVrL3Rpbnl0eXBlIHRoaXMgY29tcGF0aWJpbGl0eSB0YWJsZX0gZm9yIHRoZSBhdmFpbGFibGUgZGVmYXVsdCBmb250c1xyXG4gKiBhY3Jvc3MgbW9iaWxlIGJyb3dzZXJzLlxyXG4gKiBcclxuICogQSBub3RlIG9uIHBlcmZvcm1hbmNlOiBFdmVyeSB0aW1lIHRoZSBjb250ZW50cyBvZiBhIFRleHQgb2JqZWN0IGNoYW5nZXMsIGkuZS4gY2hhbmdpbmcgdGhlIHRleHQgYmVpbmdcclxuICogZGlzcGxheWVkLCBvciB0aGUgc3R5bGUgb2YgdGhlIHRleHQsIGl0IG5lZWRzIHRvIHJlbWFrZSB0aGUgVGV4dCBjYW52YXMsIGFuZCBpZiBvbiBXZWJHTCwgcmUtdXBsb2FkIHRoZVxyXG4gKiBuZXcgdGV4dHVyZSB0byB0aGUgR1BVLiBUaGlzIGNhbiBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIGlmIHVzZWQgb2Z0ZW4sIG9yIHdpdGggbGFyZ2UgcXVhbnRpdGllcyBvZlxyXG4gKiBUZXh0IG9iamVjdHMgaW4geW91ciBnYW1lLiBJZiB5b3UgcnVuIGludG8gcGVyZm9ybWFuY2UgaXNzdWVzIHlvdSB3b3VsZCBiZSBiZXR0ZXIgb2ZmIHVzaW5nIEJpdG1hcCBUZXh0XHJcbiAqIGluc3RlYWQsIGFzIGl0IGJlbmVmaXRzIGZyb20gYmF0Y2hpbmcgYW5kIGF2b2lkcyBleHBlbnNpdmUgQ2FudmFzIEFQSSBjYWxscy5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjdGV4dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHRleHQgLSBUaGUgdGV4dCB0aGlzIFRleHQgb2JqZWN0IHdpbGwgZGlzcGxheS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtzdHlsZV0gLSBUaGUgVGV4dCBzdHlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3RleHQnLCBmdW5jdGlvbiAoeCwgeSwgdGV4dCwgc3R5bGUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVGV4dCh0aGlzLnNjZW5lLCB4LCB5LCB0ZXh0LCBzdHlsZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextRender.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/TextRender.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./TextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./TextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0UmVuZGVyLmpzP2Q5MzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxtR0FBcUI7QUFDL0M7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHFHQUFzQjtBQUNqRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGV4dC9zdGF0aWMvVGV4dFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1RleHRXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1RleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Text#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Text} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if ((src.width === 0) || (src.height === 0))\r\n    {\r\n        return;\r\n    }\r\n\r\n    var frame = src.frame;\r\n    var width = frame.width;\r\n    var height = frame.height;\r\n    var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n    this.pipeline.batchTexture(\r\n        src,\r\n        frame.glTexture,\r\n        width, height,\r\n        src.x, src.y,\r\n        width / src.style.resolution, height / src.style.resolution,\r\n        src.scaleX, src.scaleY,\r\n        src.rotation,\r\n        src.flipX, src.flipY,\r\n        src.scrollFactorX, src.scrollFactorY,\r\n        src.displayOriginX, src.displayOriginY,\r\n        0, 0, width, height,\r\n        getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n        getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n        getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n        getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n        (src._isTinted && src.tintFill),\r\n        0, 0,\r\n        camera,\r\n        parentMatrix\r\n    );\r\n};\r\n\r\nmodule.exports = TextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0V2ViR0xSZW5kZXJlci5qcz9kNjE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0V2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRleHRXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKChzcmMud2lkdGggPT09IDApIHx8IChzcmMuaGVpZ2h0ID09PSAwKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYW1lID0gc3JjLmZyYW1lO1xyXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xyXG4gICAgdmFyIGdldFRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYTtcclxuXHJcbiAgICB0aGlzLnBpcGVsaW5lLmJhdGNoVGV4dHVyZShcclxuICAgICAgICBzcmMsXHJcbiAgICAgICAgZnJhbWUuZ2xUZXh0dXJlLFxyXG4gICAgICAgIHdpZHRoLCBoZWlnaHQsXHJcbiAgICAgICAgc3JjLngsIHNyYy55LFxyXG4gICAgICAgIHdpZHRoIC8gc3JjLnN0eWxlLnJlc29sdXRpb24sIGhlaWdodCAvIHNyYy5zdHlsZS5yZXNvbHV0aW9uLFxyXG4gICAgICAgIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVksXHJcbiAgICAgICAgc3JjLnJvdGF0aW9uLFxyXG4gICAgICAgIHNyYy5mbGlwWCwgc3JjLmZsaXBZLFxyXG4gICAgICAgIHNyYy5zY3JvbGxGYWN0b3JYLCBzcmMuc2Nyb2xsRmFjdG9yWSxcclxuICAgICAgICBzcmMuZGlzcGxheU9yaWdpblgsIHNyYy5kaXNwbGF5T3JpZ2luWSxcclxuICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50VEwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFUTCksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRUUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRSKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludEJMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQkwpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50QlIsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCUiksXHJcbiAgICAgICAgKHNyYy5faXNUaW50ZWQgJiYgc3JjLnRpbnRGaWxsKSxcclxuICAgICAgICAwLCAwLFxyXG4gICAgICAgIGNhbWVyYSxcclxuICAgICAgICBwYXJlbnRNYXRyaXhcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHRXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetPowerOfTwo = __webpack_require__(/*! ../../math/pow2/GetPowerOfTwo */ \"./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js\");\r\nvar Smoothing = __webpack_require__(/*! ../../display/canvas/Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\");\r\nvar TileSpriteRender = __webpack_require__(/*! ./TileSpriteRender */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n//  bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * @classdesc\r\n * A TileSprite is a Sprite that has a repeating texture.\r\n *\r\n * The texture can be scrolled and scaled independently of the TileSprite itself. Textures will automatically wrap and\r\n * are designed so that you can create game backdrops using seamless textures as a source.\r\n *\r\n * You shouldn't ever create a TileSprite any larger than your actual canvas size. If you want to create a large repeating background\r\n * that scrolls across the whole map of your game, then you create a TileSprite that fits the canvas size and then use the `tilePosition`\r\n * property to scroll the texture as the player moves. If you create a TileSprite that is thousands of pixels in size then it will \r\n * consume huge amounts of memory and cause performance issues. Remember: use `tilePosition` to scroll your texture and `tileScale` to\r\n * adjust the scale of the texture - don't resize the sprite itself or make it larger than it needs.\r\n * \r\n * An important note about Tile Sprites and NPOT textures: Internally, TileSprite textures use GL_REPEAT to provide\r\n * seamless repeating of the textures. This, combined with the way in which the textures are handled in WebGL, means\r\n * they need to be POT (power-of-two) sizes in order to wrap. If you provide a NPOT (non power-of-two) texture to a\r\n * TileSprite it will generate a POT sized canvas and draw your texture to it, scaled up to the POT size. It's then\r\n * scaled back down again during rendering to the original dimensions. While this works, in that it allows you to use\r\n * any size texture for a Tile Sprite, it does mean that NPOT textures are going to appear anti-aliased when rendered,\r\n * due to the interpolation that took place when it was resized into a POT texture. This is especially visible in\r\n * pixel art graphics. If you notice it and it becomes an issue, the only way to avoid it is to ensure that you\r\n * provide POT textures for Tile Sprites.\r\n *\r\n * @class TileSprite\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Crop\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} width - The width of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {integer} height - The height of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {string} textureKey - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frameKey] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar TileSprite = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Crop,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        TileSpriteRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function TileSprite (scene, x, y, width, height, textureKey, frameKey)\r\n    {\r\n        var renderer = scene.sys.game.renderer;\r\n\r\n        GameObject.call(this, scene, 'TileSprite');\r\n\r\n        var displayTexture = scene.sys.textures.get(textureKey);\r\n        var displayFrame = displayTexture.get(frameKey);\r\n\r\n        if (!width || !height)\r\n        {\r\n            width = displayFrame.width;\r\n            height = displayFrame.height;\r\n        }\r\n        else\r\n        {\r\n            width = Math.floor(width);\r\n            height = Math.floor(height);\r\n        }\r\n\r\n        /**\r\n         * Internal tile position vector.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#_tilePosition\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._tilePosition = new Vector2();\r\n\r\n        /**\r\n         * Internal tile scale vector.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#_tileScale\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._tileScale = new Vector2(1, 1);\r\n\r\n        /**\r\n         * Whether the Tile Sprite has changed in some way, requiring an re-render of its tile texture.\r\n         *\r\n         * Such changes include the texture frame and scroll position of the Tile Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#dirty\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.dirty = false;\r\n\r\n        /**\r\n         * The renderer in use by this Tile Sprite.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.renderer = renderer;\r\n\r\n        /**\r\n         * The Canvas element that the TileSprite renders its fill pattern in to.\r\n         * Only used in Canvas mode.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#canvas\r\n         * @type {?HTMLCanvasElement}\r\n         * @since 3.12.0\r\n         */\r\n        this.canvas = CanvasPool.create(this, width, height);\r\n\r\n        /**\r\n         * The Context of the Canvas element that the TileSprite renders its fill pattern in to.\r\n         * Only used in Canvas mode.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#context\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.12.0\r\n         */\r\n        this.context = this.canvas.getContext('2d');\r\n\r\n        /**\r\n         * The Texture the TileSprite is using as its fill pattern.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#displayTexture\r\n         * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.displayTexture = displayTexture;\r\n\r\n        /**\r\n         * The Frame the TileSprite is using as its fill pattern.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#displayFrame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.displayFrame = displayFrame;\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        /**\r\n         * The Texture this Game Object is using to render with.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#texture\r\n         * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n         * @since 3.0.0\r\n         */\r\n        this.texture = scene.sys.textures.addCanvas(null, this.canvas, true);\r\n\r\n        /**\r\n         * The Texture Frame this Game Object is using to render with.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#frame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @since 3.0.0\r\n         */\r\n        this.frame = this.texture.get();\r\n\r\n        /**\r\n         * The next power of two value from the width of the Fill Pattern frame.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#potWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.potWidth = GetPowerOfTwo(displayFrame.width);\r\n\r\n        /**\r\n         * The next power of two value from the height of the Fill Pattern frame.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#potHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.potHeight = GetPowerOfTwo(displayFrame.height);\r\n\r\n        /**\r\n         * The Canvas that the TileSprites texture is rendered to.\r\n         * This is used to create a WebGL texture from.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#fillCanvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.12.0\r\n         */\r\n        this.fillCanvas = CanvasPool.create2D(this, this.potWidth, this.potHeight);\r\n\r\n        /**\r\n         * The Canvas Context used to render the TileSprites texture.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#fillContext\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.12.0\r\n         */\r\n        this.fillContext = this.fillCanvas.getContext('2d');\r\n\r\n        /**\r\n         * The texture that the Tile Sprite is rendered to, which is then rendered to a Scene.\r\n         * In WebGL this is a WebGLTexture. In Canvas it's a Canvas Fill Pattern.\r\n         *\r\n         * @name Phaser.GameObjects.TileSprite#fillPattern\r\n         * @type {?(WebGLTexture|CanvasPattern)}\r\n         * @since 3.12.0\r\n         */\r\n        this.fillPattern = null;\r\n\r\n        this.setPosition(x, y);\r\n        this.setSize(width, height);\r\n        this.setFrame(frameKey);\r\n        this.setOriginFromFrame();\r\n        this.initPipeline();\r\n\r\n        scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function (renderer)\r\n        {\r\n            var gl = renderer.gl;\r\n\r\n            this.dirty = true;\r\n            this.fillPattern = null;\r\n            this.fillPattern = renderer.createTexture2D(0, gl.LINEAR, gl.LINEAR, gl.REPEAT, gl.REPEAT, gl.RGBA, this.fillCanvas, this.potWidth, this.potHeight);\r\n\r\n        }, this);\r\n    },\r\n\r\n    /**\r\n     * Sets the texture and frame this Game Object will use to render with.\r\n     *\r\n     * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#setTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setTexture: function (key, frame)\r\n    {\r\n        this.displayTexture = this.scene.sys.textures.get(key);\r\n\r\n        return this.setFrame(frame);\r\n    },\r\n\r\n    /**\r\n     * Sets the frame this Game Object will use to render with.\r\n     *\r\n     * The Frame has to belong to the current Texture being used.\r\n     *\r\n     * It can be either a string or an index.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#setFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n     *\r\n     * @return {this} This Game Object instance.\r\n     */\r\n    setFrame: function (frame)\r\n    {\r\n        var newFrame = this.displayTexture.get(frame);\r\n\r\n        this.potWidth = GetPowerOfTwo(newFrame.width);\r\n        this.potHeight = GetPowerOfTwo(newFrame.height);\r\n\r\n        //  So updateCanvas is triggered\r\n        this.canvas.width = 0;\r\n\r\n        if (!newFrame.cutWidth || !newFrame.cutHeight)\r\n        {\r\n            this.renderFlags &= ~_FLAG;\r\n        }\r\n        else\r\n        {\r\n            this.renderFlags |= _FLAG;\r\n        }\r\n\r\n        this.displayFrame = newFrame;\r\n\r\n        this.dirty = true;\r\n\r\n        this.updateTileTexture();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets {@link Phaser.GameObjects.TileSprite#tilePositionX} and {@link Phaser.GameObjects.TileSprite#tilePositionY}.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#setTilePosition\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} [x] - The x position of this sprite's tiling texture.\r\n     * @param {number} [y] - The y position of this sprite's tiling texture.\r\n     *\r\n     * @return {this} This Tile Sprite instance.\r\n     */\r\n    setTilePosition: function (x, y)\r\n    {\r\n        if (x !== undefined)\r\n        {\r\n            this.tilePositionX = x;\r\n        }\r\n\r\n        if (y !== undefined)\r\n        {\r\n            this.tilePositionY = y;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets {@link Phaser.GameObjects.TileSprite#tileScaleX} and {@link Phaser.GameObjects.TileSprite#tileScaleY}.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#setTileScale\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} [x] - The horizontal scale of the tiling texture. If not given it will use the current `tileScaleX` value.\r\n     * @param {number} [y=x] - The vertical scale of the tiling texture. If not given it will use the `x` value.\r\n     *\r\n     * @return {this} This Tile Sprite instance.\r\n     */\r\n    setTileScale: function (x, y)\r\n    {\r\n        if (x === undefined) { x = this.tileScaleX; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.tileScaleX = x;\r\n        this.tileScaleY = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Render the tile texture if it is dirty, or if the frame has changed.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#updateTileTexture\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    updateTileTexture: function ()\r\n    {\r\n        if (!this.dirty || !this.renderer)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  Draw the displayTexture to our fillCanvas\r\n\r\n        var frame = this.displayFrame;\r\n\r\n        if (frame.source.isRenderTexture || frame.source.isGLTexture)\r\n        {\r\n            console.warn('TileSprites can only use Image or Canvas based textures');\r\n\r\n            this.dirty = false;\r\n\r\n            return;\r\n        }\r\n\r\n        var ctx = this.fillContext;\r\n        var canvas = this.fillCanvas;\r\n\r\n        var fw = this.potWidth;\r\n        var fh = this.potHeight;\r\n\r\n        if (!this.renderer.gl)\r\n        {\r\n            fw = frame.cutWidth;\r\n            fh = frame.cutHeight;\r\n        }\r\n\r\n        ctx.clearRect(0, 0, fw, fh);\r\n\r\n        canvas.width = fw;\r\n        canvas.height = fh;\r\n\r\n        ctx.drawImage(\r\n            frame.source.image,\r\n            frame.cutX, frame.cutY,\r\n            frame.cutWidth, frame.cutHeight,\r\n            0, 0,\r\n            fw, fh\r\n        );\r\n\r\n        if (this.renderer.gl)\r\n        {\r\n            this.fillPattern = this.renderer.canvasToTexture(canvas, this.fillPattern);\r\n        }\r\n        else\r\n        {\r\n            this.fillPattern = ctx.createPattern(canvas, 'repeat');\r\n        }\r\n\r\n        this.updateCanvas();\r\n\r\n        this.dirty = false;\r\n    },\r\n\r\n    /**\r\n     * Draw the fill pattern to the internal canvas.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#updateCanvas\r\n     * @private\r\n     * @since 3.12.0\r\n     */\r\n    updateCanvas: function ()\r\n    {\r\n        var canvas = this.canvas;\r\n\r\n        if (canvas.width !== this.width || canvas.height !== this.height)\r\n        {\r\n            canvas.width = this.width;\r\n            canvas.height = this.height;\r\n\r\n            this.frame.setSize(this.width, this.height);\r\n            this.updateDisplayOrigin();\r\n\r\n            this.dirty = true;\r\n        }\r\n\r\n        if (!this.dirty || this.renderer && this.renderer.gl)\r\n        {\r\n            this.dirty = false;\r\n            return;\r\n        }\r\n\r\n        var ctx = this.context;\r\n\r\n        if (!this.scene.sys.game.config.antialias)\r\n        {\r\n            Smoothing.disable(ctx);\r\n        }\r\n\r\n        var scaleX = this._tileScale.x;\r\n        var scaleY = this._tileScale.y;\r\n\r\n        var positionX = this._tilePosition.x;\r\n        var positionY = this._tilePosition.y;\r\n\r\n        ctx.clearRect(0, 0, this.width, this.height);\r\n\r\n        ctx.save();\r\n\r\n        ctx.scale(scaleX, scaleY);\r\n\r\n        ctx.translate(-positionX, -positionY);\r\n\r\n        ctx.fillStyle = this.fillPattern;\r\n\r\n        ctx.fillRect(positionX, positionY, this.width / scaleX, this.height / scaleY);\r\n\r\n        ctx.restore();\r\n\r\n        this.dirty = false;\r\n    },\r\n\r\n    /**\r\n     * Internal destroy handler, called as part of the destroy process.\r\n     *\r\n     * @method Phaser.GameObjects.TileSprite#preDestroy\r\n     * @protected\r\n     * @since 3.9.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        if (this.renderer && this.renderer.gl)\r\n        {\r\n            this.renderer.deleteTexture(this.fillPattern);\r\n        }\r\n\r\n        CanvasPool.remove(this.canvas);\r\n        CanvasPool.remove(this.fillCanvas);\r\n\r\n        this.fillPattern = null;\r\n        this.fillContext = null;\r\n        this.fillCanvas = null;\r\n\r\n        this.displayTexture = null;\r\n        this.displayFrame = null;\r\n\r\n        this.texture.destroy();\r\n\r\n        this.renderer = null;\r\n    },\r\n\r\n    /**\r\n     * The horizontal scroll position of the Tile Sprite.\r\n     *\r\n     * @name Phaser.GameObjects.TileSprite#tilePositionX\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    tilePositionX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tilePosition.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tilePosition.x = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical scroll position of the Tile Sprite.\r\n     *\r\n     * @name Phaser.GameObjects.TileSprite#tilePositionY\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    tilePositionY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tilePosition.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tilePosition.y = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal scale of the Tile Sprite texture.\r\n     *\r\n     * @name Phaser.GameObjects.TileSprite#tileScaleX\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.11.0\r\n     */\r\n    tileScaleX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tileScale.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tileScale.x = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical scale of the Tile Sprite texture.\r\n     *\r\n     * @name Phaser.GameObjects.TileSprite#tileScaleY\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.11.0\r\n     */\r\n    tileScaleY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._tileScale.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tileScale.y = value;\r\n            this.dirty = true;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TileSprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGUuanM/ZGRlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzFELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLDJGQUErQjtBQUMzRCxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMsZ0dBQW9CO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsYUFBYSxrREFBa0QsTUFBTSxrREFBa0Q7QUFDdkg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsYUFBYSwrQ0FBK0MsTUFBTSwrQ0FBK0M7QUFDakg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHFCQUFxQjtBQUNuRCw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGlsZXNwcml0ZS9UaWxlU3ByaXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FudmFzUG9vbCA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BsYXkvY2FudmFzL0NhbnZhc1Bvb2wnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vY29yZS9ldmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHZXRQb3dlck9mVHdvID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9wb3cyL0dldFBvd2VyT2ZUd28nKTtcclxudmFyIFNtb290aGluZyA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BsYXkvY2FudmFzL1Ntb290aGluZycpO1xyXG52YXIgVGlsZVNwcml0ZVJlbmRlciA9IHJlcXVpcmUoJy4vVGlsZVNwcml0ZVJlbmRlcicpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLy8gIGJpdG1hc2sgZmxhZyBmb3IgR2FtZU9iamVjdC5yZW5kZXJNYXNrXHJcbnZhciBfRkxBRyA9IDg7IC8vIDEwMDBcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGlsZVNwcml0ZSBpcyBhIFNwcml0ZSB0aGF0IGhhcyBhIHJlcGVhdGluZyB0ZXh0dXJlLlxyXG4gKlxyXG4gKiBUaGUgdGV4dHVyZSBjYW4gYmUgc2Nyb2xsZWQgYW5kIHNjYWxlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBUaWxlU3ByaXRlIGl0c2VsZi4gVGV4dHVyZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHdyYXAgYW5kXHJcbiAqIGFyZSBkZXNpZ25lZCBzbyB0aGF0IHlvdSBjYW4gY3JlYXRlIGdhbWUgYmFja2Ryb3BzIHVzaW5nIHNlYW1sZXNzIHRleHR1cmVzIGFzIGEgc291cmNlLlxyXG4gKlxyXG4gKiBZb3Ugc2hvdWxkbid0IGV2ZXIgY3JlYXRlIGEgVGlsZVNwcml0ZSBhbnkgbGFyZ2VyIHRoYW4geW91ciBhY3R1YWwgY2FudmFzIHNpemUuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGxhcmdlIHJlcGVhdGluZyBiYWNrZ3JvdW5kXHJcbiAqIHRoYXQgc2Nyb2xscyBhY3Jvc3MgdGhlIHdob2xlIG1hcCBvZiB5b3VyIGdhbWUsIHRoZW4geW91IGNyZWF0ZSBhIFRpbGVTcHJpdGUgdGhhdCBmaXRzIHRoZSBjYW52YXMgc2l6ZSBhbmQgdGhlbiB1c2UgdGhlIGB0aWxlUG9zaXRpb25gXHJcbiAqIHByb3BlcnR5IHRvIHNjcm9sbCB0aGUgdGV4dHVyZSBhcyB0aGUgcGxheWVyIG1vdmVzLiBJZiB5b3UgY3JlYXRlIGEgVGlsZVNwcml0ZSB0aGF0IGlzIHRob3VzYW5kcyBvZiBwaXhlbHMgaW4gc2l6ZSB0aGVuIGl0IHdpbGwgXHJcbiAqIGNvbnN1bWUgaHVnZSBhbW91bnRzIG9mIG1lbW9yeSBhbmQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBSZW1lbWJlcjogdXNlIGB0aWxlUG9zaXRpb25gIHRvIHNjcm9sbCB5b3VyIHRleHR1cmUgYW5kIGB0aWxlU2NhbGVgIHRvXHJcbiAqIGFkanVzdCB0aGUgc2NhbGUgb2YgdGhlIHRleHR1cmUgLSBkb24ndCByZXNpemUgdGhlIHNwcml0ZSBpdHNlbGYgb3IgbWFrZSBpdCBsYXJnZXIgdGhhbiBpdCBuZWVkcy5cclxuICogXHJcbiAqIEFuIGltcG9ydGFudCBub3RlIGFib3V0IFRpbGUgU3ByaXRlcyBhbmQgTlBPVCB0ZXh0dXJlczogSW50ZXJuYWxseSwgVGlsZVNwcml0ZSB0ZXh0dXJlcyB1c2UgR0xfUkVQRUFUIHRvIHByb3ZpZGVcclxuICogc2VhbWxlc3MgcmVwZWF0aW5nIG9mIHRoZSB0ZXh0dXJlcy4gVGhpcywgY29tYmluZWQgd2l0aCB0aGUgd2F5IGluIHdoaWNoIHRoZSB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBpbiBXZWJHTCwgbWVhbnNcclxuICogdGhleSBuZWVkIHRvIGJlIFBPVCAocG93ZXItb2YtdHdvKSBzaXplcyBpbiBvcmRlciB0byB3cmFwLiBJZiB5b3UgcHJvdmlkZSBhIE5QT1QgKG5vbiBwb3dlci1vZi10d28pIHRleHR1cmUgdG8gYVxyXG4gKiBUaWxlU3ByaXRlIGl0IHdpbGwgZ2VuZXJhdGUgYSBQT1Qgc2l6ZWQgY2FudmFzIGFuZCBkcmF3IHlvdXIgdGV4dHVyZSB0byBpdCwgc2NhbGVkIHVwIHRvIHRoZSBQT1Qgc2l6ZS4gSXQncyB0aGVuXHJcbiAqIHNjYWxlZCBiYWNrIGRvd24gYWdhaW4gZHVyaW5nIHJlbmRlcmluZyB0byB0aGUgb3JpZ2luYWwgZGltZW5zaW9ucy4gV2hpbGUgdGhpcyB3b3JrcywgaW4gdGhhdCBpdCBhbGxvd3MgeW91IHRvIHVzZVxyXG4gKiBhbnkgc2l6ZSB0ZXh0dXJlIGZvciBhIFRpbGUgU3ByaXRlLCBpdCBkb2VzIG1lYW4gdGhhdCBOUE9UIHRleHR1cmVzIGFyZSBnb2luZyB0byBhcHBlYXIgYW50aS1hbGlhc2VkIHdoZW4gcmVuZGVyZWQsXHJcbiAqIGR1ZSB0byB0aGUgaW50ZXJwb2xhdGlvbiB0aGF0IHRvb2sgcGxhY2Ugd2hlbiBpdCB3YXMgcmVzaXplZCBpbnRvIGEgUE9UIHRleHR1cmUuIFRoaXMgaXMgZXNwZWNpYWxseSB2aXNpYmxlIGluXHJcbiAqIHBpeGVsIGFydCBncmFwaGljcy4gSWYgeW91IG5vdGljZSBpdCBhbmQgaXQgYmVjb21lcyBhbiBpc3N1ZSwgdGhlIG9ubHkgd2F5IHRvIGF2b2lkIGl0IGlzIHRvIGVuc3VyZSB0aGF0IHlvdVxyXG4gKiBwcm92aWRlIFBPVCB0ZXh0dXJlcyBmb3IgVGlsZSBTcHJpdGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGlsZVNwcml0ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXBcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZUtleV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgVGlsZVNwcml0ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFRpbGVTcHJpdGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlU3ByaXRlIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUtleSwgZnJhbWVLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1RpbGVTcHJpdGUnKTtcclxuXHJcbiAgICAgICAgdmFyIGRpc3BsYXlUZXh0dXJlID0gc2NlbmUuc3lzLnRleHR1cmVzLmdldCh0ZXh0dXJlS2V5KTtcclxuICAgICAgICB2YXIgZGlzcGxheUZyYW1lID0gZGlzcGxheVRleHR1cmUuZ2V0KGZyYW1lS2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2lkdGggPSBkaXNwbGF5RnJhbWUud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGRpc3BsYXlGcmFtZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpbGUgcG9zaXRpb24gdmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX3RpbGVQb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpbGUgc2NhbGUgdmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX3RpbGVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpbGVTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBUaWxlIFNwcml0ZSBoYXMgY2hhbmdlZCBpbiBzb21lIHdheSwgcmVxdWlyaW5nIGFuIHJlLXJlbmRlciBvZiBpdHMgdGlsZSB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU3VjaCBjaGFuZ2VzIGluY2x1ZGUgdGhlIHRleHR1cmUgZnJhbWUgYW5kIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyZXIgaW4gdXNlIGJ5IHRoaXMgVGlsZSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgVGlsZVNwcml0ZSByZW5kZXJzIGl0cyBmaWxsIHBhdHRlcm4gaW4gdG8uXHJcbiAgICAgICAgICogT25seSB1c2VkIGluIENhbnZhcyBtb2RlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENvbnRleHQgb2YgdGhlIENhbnZhcyBlbGVtZW50IHRoYXQgdGhlIFRpbGVTcHJpdGUgcmVuZGVycyBpdHMgZmlsbCBwYXR0ZXJuIGluIHRvLlxyXG4gICAgICAgICAqIE9ubHkgdXNlZCBpbiBDYW52YXMgbW9kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2NvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSB0aGUgVGlsZVNwcml0ZSBpcyB1c2luZyBhcyBpdHMgZmlsbCBwYXR0ZXJuLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjZGlzcGxheVRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV8UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGV4dHVyZSA9IGRpc3BsYXlUZXh0dXJlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRnJhbWUgdGhlIFRpbGVTcHJpdGUgaXMgdXNpbmcgYXMgaXRzIGZpbGwgcGF0dGVybi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2Rpc3BsYXlGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RnJhbWUgPSBkaXNwbGF5RnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBjcm9wIGRhdGEgb2JqZWN0LCBhcyB1c2VkIGJ5IGBzZXRDcm9wYCBhbmQgcGFzc2VkIHRvIHRoZSBgRnJhbWUuc2V0Q3JvcFVWc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZXxQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmUgPSBzY2VuZS5zeXMudGV4dHVyZXMuYWRkQ2FudmFzKG51bGwsIHRoaXMuY2FudmFzLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRleHR1cmUgRnJhbWUgdGhpcyBHYW1lIE9iamVjdCBpcyB1c2luZyB0byByZW5kZXIgd2l0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmV4dCBwb3dlciBvZiB0d28gdmFsdWUgZnJvbSB0aGUgd2lkdGggb2YgdGhlIEZpbGwgUGF0dGVybiBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3BvdFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3RXaWR0aCA9IEdldFBvd2VyT2ZUd28oZGlzcGxheUZyYW1lLndpZHRoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5leHQgcG93ZXIgb2YgdHdvIHZhbHVlIGZyb20gdGhlIGhlaWdodCBvZiB0aGUgRmlsbCBQYXR0ZXJuIGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcG90SGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3RIZWlnaHQgPSBHZXRQb3dlck9mVHdvKGRpc3BsYXlGcmFtZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIHRoYXQgdGhlIFRpbGVTcHJpdGVzIHRleHR1cmUgaXMgcmVuZGVyZWQgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIFdlYkdMIHRleHR1cmUgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2ZpbGxDYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbENhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlMkQodGhpcywgdGhpcy5wb3RXaWR0aCwgdGhpcy5wb3RIZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIENvbnRleHQgdXNlZCB0byByZW5kZXIgdGhlIFRpbGVTcHJpdGVzIHRleHR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNmaWxsQ29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbENvbnRleHQgPSB0aGlzLmZpbGxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgVGlsZSBTcHJpdGUgaXMgcmVuZGVyZWQgdG8sIHdoaWNoIGlzIHRoZW4gcmVuZGVyZWQgdG8gYSBTY2VuZS5cclxuICAgICAgICAgKiBJbiBXZWJHTCB0aGlzIGlzIGEgV2ViR0xUZXh0dXJlLiBJbiBDYW52YXMgaXQncyBhIENhbnZhcyBGaWxsIFBhdHRlcm4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNmaWxsUGF0dGVyblxyXG4gICAgICAgICAqIEB0eXBlIHs/KFdlYkdMVGV4dHVyZXxDYW52YXNQYXR0ZXJuKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0RnJhbWUoZnJhbWVLZXkpO1xyXG4gICAgICAgIHRoaXMuc2V0T3JpZ2luRnJvbUZyYW1lKCk7XHJcbiAgICAgICAgdGhpcy5pbml0UGlwZWxpbmUoKTtcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmdhbWUuZXZlbnRzLm9uKEdhbWVFdmVudHMuQ09OVEVYVF9SRVNUT1JFRCwgZnVuY3Rpb24gKHJlbmRlcmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdHRlcm4gPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZ2wuTElORUFSLCBnbC5MSU5FQVIsIGdsLlJFUEVBVCwgZ2wuUkVQRUFULCBnbC5SR0JBLCB0aGlzLmZpbGxDYW52YXMsIHRoaXMucG90V2lkdGgsIHRoaXMucG90SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUZXh0dXJlcyBhcmUgcmVmZXJlbmNlZCBieSB0aGVpciBzdHJpbmctYmFzZWQga2V5cywgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldChrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRGcmFtZShmcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgRnJhbWUgaGFzIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBUZXh0dXJlIGJlaW5nIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3NldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBuZXdGcmFtZSA9IHRoaXMuZGlzcGxheVRleHR1cmUuZ2V0KGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3RXaWR0aCA9IEdldFBvd2VyT2ZUd28obmV3RnJhbWUud2lkdGgpO1xyXG4gICAgICAgIHRoaXMucG90SGVpZ2h0ID0gR2V0UG93ZXJPZlR3byhuZXdGcmFtZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyAgU28gdXBkYXRlQ2FudmFzIGlzIHRyaWdnZXJlZFxyXG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKCFuZXdGcmFtZS5jdXRXaWR0aCB8fCAhbmV3RnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlGcmFtZSA9IG5ld0ZyYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVUaWxlVGV4dHVyZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSN0aWxlUG9zaXRpb25YfSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3RpbGVQb3NpdGlvbll9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjc2V0VGlsZVBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhpcyBzcHJpdGUncyB0aWxpbmcgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIHNwcml0ZSdzIHRpbGluZyB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGlsZSBTcHJpdGUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbGVQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGlsZVBvc2l0aW9uWCA9IHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoeSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50aWxlUG9zaXRpb25ZID0geTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3RpbGVTY2FsZVh9IGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVNjYWxlWX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNzZXRUaWxlU2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhlIHRpbGluZyB0ZXh0dXJlLiBJZiBub3QgZ2l2ZW4gaXQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgYHRpbGVTY2FsZVhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHNjYWxlIG9mIHRoZSB0aWxpbmcgdGV4dHVyZS4gSWYgbm90IGdpdmVuIGl0IHdpbGwgdXNlIHRoZSBgeGAgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlIFNwcml0ZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZVNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSB0aGlzLnRpbGVTY2FsZVg7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMudGlsZVNjYWxlWCA9IHg7XHJcbiAgICAgICAgdGhpcy50aWxlU2NhbGVZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSB0aWxlIHRleHR1cmUgaWYgaXQgaXMgZGlydHksIG9yIGlmIHRoZSBmcmFtZSBoYXMgY2hhbmdlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3VwZGF0ZVRpbGVUZXh0dXJlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpbGVUZXh0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXJ0eSB8fCAhdGhpcy5yZW5kZXJlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEcmF3IHRoZSBkaXNwbGF5VGV4dHVyZSB0byBvdXIgZmlsbENhbnZhc1xyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmRpc3BsYXlGcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lLnNvdXJjZS5pc1JlbmRlclRleHR1cmUgfHwgZnJhbWUuc291cmNlLmlzR0xUZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaWxlU3ByaXRlcyBjYW4gb25seSB1c2UgSW1hZ2Ugb3IgQ2FudmFzIGJhc2VkIHRleHR1cmVzJyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5maWxsQ29udGV4dDtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5maWxsQ2FudmFzO1xyXG5cclxuICAgICAgICB2YXIgZncgPSB0aGlzLnBvdFdpZHRoO1xyXG4gICAgICAgIHZhciBmaCA9IHRoaXMucG90SGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmdyA9IGZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgICAgICBmaCA9IGZyYW1lLmN1dEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgZncsIGZoKTtcclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gZnc7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGZoO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKFxyXG4gICAgICAgICAgICBmcmFtZS5zb3VyY2UuaW1hZ2UsXHJcbiAgICAgICAgICAgIGZyYW1lLmN1dFgsIGZyYW1lLmN1dFksXHJcbiAgICAgICAgICAgIGZyYW1lLmN1dFdpZHRoLCBmcmFtZS5jdXRIZWlnaHQsXHJcbiAgICAgICAgICAgIDAsIDAsXHJcbiAgICAgICAgICAgIGZ3LCBmaFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IHRoaXMucmVuZGVyZXIuY2FudmFzVG9UZXh0dXJlKGNhbnZhcywgdGhpcy5maWxsUGF0dGVybik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybihjYW52YXMsICdyZXBlYXQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FudmFzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IHRoZSBmaWxsIHBhdHRlcm4gdG8gdGhlIGludGVybmFsIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3VwZGF0ZUNhbnZhc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ2FudmFzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlydHkgfHwgdGhpcy5yZW5kZXJlciAmJiB0aGlzLnJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuc3lzLmdhbWUuY29uZmlnLmFudGlhbGlhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNtb290aGluZy5kaXNhYmxlKGN0eCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NhbGVYID0gdGhpcy5fdGlsZVNjYWxlLng7XHJcbiAgICAgICAgdmFyIHNjYWxlWSA9IHRoaXMuX3RpbGVTY2FsZS55O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25YID0gdGhpcy5fdGlsZVBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uWSA9IHRoaXMuX3RpbGVQb3NpdGlvbi55O1xyXG5cclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtcG9zaXRpb25YLCAtcG9zaXRpb25ZKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbFBhdHRlcm47XHJcblxyXG4gICAgICAgIGN0eC5maWxsUmVjdChwb3NpdGlvblgsIHBvc2l0aW9uWSwgdGhpcy53aWR0aCAvIHNjYWxlWCwgdGhpcy5oZWlnaHQgLyBzY2FsZVkpO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcHJlRGVzdHJveVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgKi9cclxuICAgIHByZURlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIgJiYgdGhpcy5yZW5kZXJlci5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZGVsZXRlVGV4dHVyZSh0aGlzLmZpbGxQYXR0ZXJuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHRoaXMuY2FudmFzKTtcclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmZpbGxDYW52YXMpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGxQYXR0ZXJuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGxDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGxDYW52YXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlUZXh0dXJlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGcmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVBvc2l0aW9uWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aWxlUG9zaXRpb25YOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlUG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbi54ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVBvc2l0aW9uWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aWxlUG9zaXRpb25ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlUG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbi55ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhlIFRpbGUgU3ByaXRlIHRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVNjYWxlWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGlsZVNjYWxlWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlsZVNjYWxlLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90aWxlU2NhbGUueCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGUgVGlsZSBTcHJpdGUgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSN0aWxlU2NhbGVZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICB0aWxlU2NhbGVZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlU2NhbGUueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVTY2FsZS55ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGlsZVNwcml0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.TileSprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    src.updateCanvas();\r\n\r\n    renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = TileSpriteCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDYW52YXNSZW5kZXJlci5qcz8wMzY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RpbGVzcHJpdGUvVGlsZVNwcml0ZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRpbGVTcHJpdGVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHNyYy51cGRhdGVDYW52YXMoKTtcclxuXHJcbiAgICByZW5kZXJlci5iYXRjaFNwcml0ZShzcmMsIHNyYy5mcmFtZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlU3ByaXRlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar TileSprite = __webpack_require__(/*! ./TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\");\r\n\r\n/**\r\n * Creates a new TileSprite Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the TileSprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#tileSprite\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.TileSprite.TileSpriteConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.TileSprite} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('tileSprite', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n    var width = GetAdvancedValue(config, 'width', 512);\r\n    var height = GetAdvancedValue(config, 'height', 512);\r\n    var key = GetAdvancedValue(config, 'key', '');\r\n    var frame = GetAdvancedValue(config, 'frame', '');\r\n\r\n    var tile = new TileSprite(this.scene, x, y, width, height, key, frame);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, tile, config);\r\n\r\n    return tile;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDcmVhdG9yLmpzP2M5NjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIFRpbGVTcHJpdGUgPSByZXF1aXJlKCcuL1RpbGVTcHJpdGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3RpbGVTcHJpdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUuVGlsZVNwcml0ZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd0aWxlU3ByaXRlJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgNTEyKTtcclxuICAgIHZhciBoZWlnaHQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIDUxMik7XHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCAnJyk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgJycpO1xyXG5cclxuICAgIHZhciB0aWxlID0gbmV3IFRpbGVTcHJpdGUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgdGlsZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gdGlsZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TileSprite = __webpack_require__(/*! ./TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new TileSprite Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the TileSprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#tileSprite\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} width - The width of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {integer} height - The height of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.TileSprite} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('tileSprite', function (x, y, width, height, key, frame)\r\n{\r\n    return this.displayList.add(new TileSprite(this.scene, x, y, width, height, key, frame));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5LmpzP2Q2MjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjO0FBQ3ZDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGlsZVNwcml0ZSA9IHJlcXVpcmUoJy4vVGlsZVNwcml0ZScpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgVGlsZVNwcml0ZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3RpbGVTcHJpdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCd0aWxlU3ByaXRlJywgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVGlsZVNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./TileSpriteWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./TileSpriteCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVSZW5kZXIuanM/MDU1NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDhHQUEyQjtBQUNyRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsZ0hBQTRCO0FBQ3ZEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9UaWxlU3ByaXRlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9UaWxlU3ByaXRlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.TileSprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TileSpriteWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    src.updateCanvas();\r\n\r\n    var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n    this.pipeline.batchTexture(\r\n        src,\r\n        src.fillPattern,\r\n        src.displayFrame.width * src.tileScaleX, src.displayFrame.height * src.tileScaleY,\r\n        src.x, src.y,\r\n        src.width, src.height,\r\n        src.scaleX, src.scaleY,\r\n        src.rotation,\r\n        src.flipX, src.flipY,\r\n        src.scrollFactorX, src.scrollFactorY,\r\n        src.originX * src.width, src.originY * src.height,\r\n        0, 0, src.width, src.height,\r\n        getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n        getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n        getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n        getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n        (src._isTinted && src.tintFill),\r\n        (src.tilePositionX % src.displayFrame.width) / src.displayFrame.width,\r\n        (src.tilePositionY % src.displayFrame.height) / src.displayFrame.height,\r\n        camera,\r\n        parentMatrix\r\n    );\r\n};\r\n\r\nmodule.exports = TileSpriteWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVXZWJHTFJlbmRlcmVyLmpzPzY1NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGlsZXNwcml0ZS9UaWxlU3ByaXRlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRpbGVTcHJpdGVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgc3JjLnVwZGF0ZUNhbnZhcygpO1xyXG5cclxuICAgIHZhciBnZXRUaW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGE7XHJcblxyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFRleHR1cmUoXHJcbiAgICAgICAgc3JjLFxyXG4gICAgICAgIHNyYy5maWxsUGF0dGVybixcclxuICAgICAgICBzcmMuZGlzcGxheUZyYW1lLndpZHRoICogc3JjLnRpbGVTY2FsZVgsIHNyYy5kaXNwbGF5RnJhbWUuaGVpZ2h0ICogc3JjLnRpbGVTY2FsZVksXHJcbiAgICAgICAgc3JjLngsIHNyYy55LFxyXG4gICAgICAgIHNyYy53aWR0aCwgc3JjLmhlaWdodCxcclxuICAgICAgICBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZLFxyXG4gICAgICAgIHNyYy5yb3RhdGlvbixcclxuICAgICAgICBzcmMuZmxpcFgsIHNyYy5mbGlwWSxcclxuICAgICAgICBzcmMuc2Nyb2xsRmFjdG9yWCwgc3JjLnNjcm9sbEZhY3RvclksXHJcbiAgICAgICAgc3JjLm9yaWdpblggKiBzcmMud2lkdGgsIHNyYy5vcmlnaW5ZICogc3JjLmhlaWdodCxcclxuICAgICAgICAwLCAwLCBzcmMud2lkdGgsIHNyYy5oZWlnaHQsXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50QkwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCTCksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKSxcclxuICAgICAgICAoc3JjLl9pc1RpbnRlZCAmJiBzcmMudGludEZpbGwpLFxyXG4gICAgICAgIChzcmMudGlsZVBvc2l0aW9uWCAlIHNyYy5kaXNwbGF5RnJhbWUud2lkdGgpIC8gc3JjLmRpc3BsYXlGcmFtZS53aWR0aCxcclxuICAgICAgICAoc3JjLnRpbGVQb3NpdGlvblkgJSBzcmMuZGlzcGxheUZyYW1lLmhlaWdodCkgLyBzcmMuZGlzcGxheUZyYW1lLmhlaWdodCxcclxuICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgcGFyZW50TWF0cml4XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlU3ByaXRlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/Video.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/Video.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events/ */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar SoundEvents = __webpack_require__(/*! ../../sound/events/ */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar UUID = __webpack_require__(/*! ../../utils/string/UUID */ \"./node_modules/phaser/src/utils/string/UUID.js\");\r\nvar VideoRender = __webpack_require__(/*! ./VideoRender */ \"./node_modules/phaser/src/gameobjects/video/VideoRender.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Video Game Object.\r\n * \r\n * This Game Object is capable of handling playback of a previously loaded video from the Phaser Video Cache,\r\n * or playing a video based on a given URL. Videos can be either local, or streamed.\r\n * \r\n * ```javascript\r\n * preload () {\r\n *   this.load.video('pixar', 'nemo.mp4');\r\n * }\r\n * \r\n * create () {\r\n *   this.add.video(400, 300, 'pixar');\r\n * }\r\n * ```\r\n * \r\n * To all intents and purposes, a video is a standard Game Object, just like a Sprite. And as such, you can do\r\n * all the usual things to it, such as scaling, rotating, cropping, tinting, making interactive, giving a\r\n * physics body, etc.\r\n * \r\n * Transparent videos are also possible via the WebM file format. Providing the video file has was encoded with\r\n * an alpha channel, and providing the browser supports WebM playback (not all of them do), then it will render\r\n * in-game with full transparency.\r\n * \r\n * ### Autoplaying Videos\r\n * \r\n * Videos can only autoplay if the browser has been unlocked with an interaction, or satisfies the MEI settings.\r\n * The policies that control autoplaying are vast and vary between browser.\r\n * You can, ahd should, read more about it here: https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide\r\n * \r\n * If your video doesn't contain any audio, then set the `noAudio` parameter to `true` when the video is _loaded_,\r\n * and it will often allow the video to play immediately:\r\n * \r\n * ```javascript\r\n * preload () {\r\n *   this.load.video('pixar', 'nemo.mp4', 'loadeddata', false, true);\r\n * }\r\n * ```\r\n * \r\n * The 5th parameter in the load call tells Phaser that the video doesn't contain any audio tracks. Video without\r\n * audio can autoplay without requiring a user interaction. Video with audio cannot do this unless it satisfies\r\n * the browsers MEI settings. See the MDN Autoplay Guide for further details.\r\n * \r\n * Note that due to a bug in IE11 you cannot play a video texture to a Sprite in WebGL. For IE11 force Canvas mode.\r\n * \r\n * More details about video playback and the supported media formats can be found on MDN:\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement\r\n * https://developer.mozilla.org/en-US/docs/Web/Media/Formats\r\n *\r\n * @class Video\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.20.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} [key] - Optional key of the Video this Game Object will play, as stored in the Video Cache.\r\n */\r\nvar Video = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Mask,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.ScrollFactor,\r\n        Components.Size,\r\n        Components.TextureCrop,\r\n        Components.Tint,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        VideoRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Video (scene, x, y, key)\r\n    {\r\n        GameObject.call(this, scene, 'Video');\r\n\r\n        /**\r\n         * A reference to the HTML Video Element this Video Game Object is playing.\r\n         * Will be `null` until a video is loaded for playback.\r\n         *\r\n         * @name Phaser.GameObjects.Video#video\r\n         * @type {?HTMLVideoElement}\r\n         * @since 3.20.0\r\n         */\r\n        this.video = null;\r\n\r\n        /**\r\n         * The Phaser Texture this Game Object is using to render the video to.\r\n         * Will be `null` until a video is loaded for playback.\r\n         *\r\n         * @name Phaser.GameObjects.Video#videoTexture\r\n         * @type {?Phaser.Textures.Texture}\r\n         * @since 3.20.0\r\n         */\r\n        this.videoTexture = null;\r\n\r\n        /**\r\n         * A reference to the TextureSource belong to the `videoTexture` Texture object.\r\n         * Will be `null` until a video is loaded for playback.\r\n         *\r\n         * @name Phaser.GameObjects.Video#videoTextureSource\r\n         * @type {?Phaser.Textures.TextureSource}\r\n         * @since 3.20.0\r\n         */\r\n        this.videoTextureSource = null;\r\n\r\n        /**\r\n         * A Phaser CanvasTexture instance that holds the most recent snapshot taken from the video.\r\n         * This will only be set if `snapshot` or `snapshotArea` have been called, and will be `null` until that point.\r\n         *\r\n         * @name Phaser.GameObjects.Video#snapshotTexture\r\n         * @type {?Phaser.Textures.CanvasTexture}\r\n         * @since 3.20.0\r\n         */\r\n        this.snapshotTexture = null;\r\n\r\n        /**\r\n         * If you have saved this video to a texture via the `saveTexture` method, this controls if the video\r\n         * is rendered with `flipY` in WebGL or not. You often need to set this if you wish to use the video texture\r\n         * as the input source for a shader. If you find your video is appearing upside down within a shader or\r\n         * custom pipeline, flip this property.\r\n         *\r\n         * @name Phaser.GameObjects.Video#flipY\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.flipY = false;\r\n\r\n        /**\r\n         * The key used by the texture as stored in the Texture Manager.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_key\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._key = UUID();\r\n\r\n        /**\r\n         * An internal flag holding the current state of the video lock, should document interaction be required\r\n         * before playback can begin.\r\n         *\r\n         * @name Phaser.GameObjects.Video#touchLocked\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.touchLocked = true;\r\n\r\n        /**\r\n         * Should the video auto play when document interaction is required and happens?\r\n         *\r\n         * @name Phaser.GameObjects.Video#playWhenUnlocked\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.playWhenUnlocked = false;\r\n\r\n        /**\r\n         * When starting playback of a video Phaser will monitor its `readyState` using a `setTimeout` call.\r\n         * The `setTimeout` happens once every `Video.retryInterval` ms. It will carry on monitoring the video\r\n         * state in this manner until the `retryLimit` is reached and then abort.\r\n         *\r\n         * @name Phaser.GameObjects.Video#retryLimit\r\n         * @type {integer}\r\n         * @since 3.20.0\r\n         */\r\n        this.retryLimit = 20;\r\n\r\n        /**\r\n         * The current retry attempt.\r\n         *\r\n         * @name Phaser.GameObjects.Video#retry\r\n         * @type {integer}\r\n         * @since 3.20.0\r\n         */\r\n        this.retry = 0;\r\n\r\n        /**\r\n         * The number of ms between each retry while monitoring the ready state of a downloading video.\r\n         *\r\n         * @name Phaser.GameObjects.Video#retryInterval\r\n         * @type {integer}\r\n         * @since 3.20.0\r\n         */\r\n        this.retryInterval = 500;\r\n\r\n        /**\r\n         * The setTimeout callback ID.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_retryID\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._retryID = null;\r\n\r\n        /**\r\n         * The video was muted due to a system event, such as the game losing focus.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_systemMuted\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._systemMuted = false;\r\n\r\n        /**\r\n         * The video was muted due to game code, not a system event.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_codeMuted\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._codeMuted = false;\r\n\r\n        /**\r\n         * The video was paused due to a system event, such as the game losing focus.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_systemPaused\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._systemPaused = false;\r\n\r\n        /**\r\n         * The video was paused due to game code, not a system event.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_codePaused\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._codePaused = false;\r\n\r\n        /**\r\n         * The locally bound event callback handlers.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_callbacks\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._callbacks = {\r\n            play: this.playHandler.bind(this),\r\n            error: this.loadErrorHandler.bind(this),\r\n            end: this.completeHandler.bind(this),\r\n            time: this.timeUpdateHandler.bind(this),\r\n            seeking: this.seekingHandler.bind(this),\r\n            seeked: this.seekedHandler.bind(this)\r\n        };\r\n\r\n        /**\r\n         * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_crop\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._crop = this.resetCropObject();\r\n\r\n        /**\r\n         * An object containing in and out markers for sequence playback.\r\n         *\r\n         * @name Phaser.GameObjects.Video#markers\r\n         * @type {any}\r\n         * @since 3.20.0\r\n         */\r\n        this.markers = {};\r\n\r\n        /**\r\n         * The in marker.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_markerIn\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._markerIn = -1;\r\n\r\n        /**\r\n         * The out marker.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_markerOut\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._markerOut = MATH_CONST.MAX_SAFE_INTEGER;\r\n\r\n        /**\r\n         * The last time the TextureSource was updated.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_lastUpdate\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._lastUpdate = 0;\r\n\r\n        /**\r\n         * The key of the video being played from the Video cache, if any.\r\n         *\r\n         * @name Phaser.GameObjects.Video#_cacheKey\r\n         * @type {string}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._cacheKey = '';\r\n\r\n        /**\r\n         * Is the video currently seeking?\r\n         *\r\n         * @name Phaser.GameObjects.Video#_isSeeking\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this._isSeeking = false;\r\n\r\n        /**\r\n         * Should the Video element that this Video is using, be removed from the DOM\r\n         * when this Video is destroyed?\r\n         *\r\n         * @name Phaser.GameObjects.Video#removeVideoElementOnDestroy\r\n         * @type {boolean}\r\n         * @since 3.21.0\r\n         */\r\n        this.removeVideoElementOnDestroy = false;\r\n\r\n        this.setPosition(x, y);\r\n        this.initPipeline();\r\n\r\n        if (key)\r\n        {\r\n            this.changeSource(key, false);\r\n        }\r\n\r\n        var game = scene.sys.game.events;\r\n\r\n        game.on(GameEvents.PAUSE, this.globalPause, this);\r\n        game.on(GameEvents.RESUME, this.globalResume, this);\r\n\r\n        var sound = scene.sys.sound;\r\n\r\n        if (sound)\r\n        {\r\n            sound.on(SoundEvents.GLOBAL_MUTE, this.globalMute, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Starts this video playing.\r\n     *\r\n     * If the video is already playing, or has been queued to play with `changeSource` then this method just returns.\r\n     * \r\n     * Videos can only autoplay if the browser has been unlocked. This happens if you have interacted with the browser, i.e.\r\n     * by clicking on it or pressing a key, or due to server settings. The policies that control autoplaying are vast and\r\n     * vary between browser. You can read more here: https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide\r\n     * \r\n     * If your video doesn't contain any audio, then set the `noAudio` parameter to `true` when the video is loaded,\r\n     * and it will often allow the video to play immediately:\r\n     * \r\n     * ```javascript\r\n     * preload () {\r\n     *   this.load.video('pixar', 'nemo.mp4', 'loadeddata', false, true);\r\n     * }\r\n     * ```\r\n     * \r\n     * The 5th parameter in the load call tells Phaser that the video doesn't contain any audio tracks. Video without\r\n     * audio can autoplay without requiring a user interaction. Video with audio cannot do this unless it satisfies\r\n     * the browsers MEI settings. See the MDN Autoplay Guide for details.\r\n     * \r\n     * If you need audio in your videos, then you'll have to consider the fact that the video cannot start playing until the\r\n     * user has interacted with the browser, into your game flow.\r\n     *\r\n     * @method Phaser.GameObjects.Video#play\r\n     * @since 3.20.0\r\n     * \r\n     * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n     * @param {integer} [markerIn] - Optional in marker time, in seconds, for playback of a sequence of the video.\r\n     * @param {integer} [markerOut] - Optional out marker time, in seconds, for playback of a sequence of the video.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    play: function (loop, markerIn, markerOut)\r\n    {\r\n        if ((this.touchLocked && this.playWhenUnlocked) || this.isPlaying())\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var video = this.video;\r\n\r\n        if (!video)\r\n        {\r\n            console.warn('Video not loaded');\r\n\r\n            return this;\r\n        }\r\n\r\n        if (loop === undefined) { loop = video.loop; }\r\n\r\n        var sound = this.scene.sys.sound;\r\n        \r\n        if (sound && sound.mute)\r\n        {\r\n            //  Mute will be set based on the global mute state of the Sound Manager (if there is one)\r\n            this.setMute(true);\r\n        }\r\n\r\n        if (!isNaN(markerIn))\r\n        {\r\n            this._markerIn = markerIn;\r\n        }\r\n\r\n        if (!isNaN(markerOut) && markerOut > markerIn)\r\n        {\r\n            this._markerOut = markerOut;\r\n        }\r\n\r\n        video.loop = loop;\r\n\r\n        var callbacks = this._callbacks;\r\n\r\n        var playPromise = video.play();\r\n\r\n        if (playPromise !== undefined)\r\n        {\r\n            playPromise.then(this.playPromiseSuccessHandler.bind(this)).catch(this.playPromiseErrorHandler.bind(this));\r\n        }\r\n        else\r\n        {\r\n            //  Old-school browsers with no Promises\r\n            video.addEventListener('playing', callbacks.play, true);\r\n\r\n            //  If video hasn't downloaded properly yet ...\r\n            if (video.readyState < 2)\r\n            {\r\n                this.retry = this.retryLimit;\r\n\r\n                this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval);\r\n            }\r\n        }\r\n\r\n        //  Set these _after_ calling `play` or they don't fire (useful, thanks browsers)\r\n        video.addEventListener('ended', callbacks.end, true);\r\n        video.addEventListener('timeupdate', callbacks.time, true);\r\n        video.addEventListener('seeking', callbacks.seeking, true);\r\n        video.addEventListener('seeked', callbacks.seeked, true);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This method allows you to change the source of the current video element. It works by first stopping the\r\n     * current video, if playing. Then deleting the video texture, if one has been created. Finally, it makes a\r\n     * new video texture and starts playback of the new source through the existing video element.\r\n     * \r\n     * The reason you may wish to do this is because videos that require interaction to unlock, remain in an unlocked\r\n     * state, even if you change the source of the video. By changing the source to a new video you avoid having to\r\n     * go through the unlock process again.\r\n     *\r\n     * @method Phaser.GameObjects.Video#changeSource\r\n     * @since 3.20.0\r\n     * \r\n     * @param {string} key - The key of the Video this Game Object will swap to playing, as stored in the Video Cache.\r\n     * @param {boolean} [autoplay=true] - Should the video start playing immediately, once the swap is complete?\r\n     * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n     * @param {integer} [markerIn] - Optional in marker time, in seconds, for playback of a sequence of the video.\r\n     * @param {integer} [markerOut] - Optional out marker time, in seconds, for playback of a sequence of the video.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    changeSource: function (key, autoplay, loop, markerIn, markerOut)\r\n    {\r\n        if (autoplay === undefined) { autoplay = true; }\r\n\r\n        var currentVideo = this.video;\r\n\r\n        if (currentVideo)\r\n        {\r\n            this.stop();\r\n        }\r\n\r\n        var newVideo = this.scene.sys.cache.video.get(key);\r\n\r\n        if (newVideo)\r\n        {\r\n            this.video = newVideo;\r\n\r\n            this._cacheKey = key;\r\n\r\n            this._codePaused = newVideo.paused;\r\n            this._codeMuted = newVideo.muted;\r\n\r\n            if (this.videoTexture)\r\n            {\r\n                this.scene.sys.textures.remove(this._key);\r\n\r\n                this.videoTexture = this.scene.sys.textures.create(this._key, newVideo, newVideo.videoWidth, newVideo.videoHeight);\r\n                this.videoTextureSource = this.videoTexture.source[0];\r\n                this.videoTexture.add('__BASE', 0, 0, 0, newVideo.videoWidth, newVideo.videoHeight);\r\n        \r\n                this.setTexture(this.videoTexture);\r\n                this.setSizeToFrame();\r\n                this.updateDisplayOrigin();\r\n\r\n                this.emit(Events.VIDEO_CREATED, this, newVideo.videoWidth, newVideo.videoHeight);\r\n            }\r\n            else\r\n            {\r\n                this.updateTexture();\r\n            }\r\n\r\n            newVideo.currentTime = 0;\r\n\r\n            this._lastUpdate = 0;\r\n\r\n            if (autoplay)\r\n            {\r\n                this.play(loop, markerIn, markerOut);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.video = null;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a sequence marker to this video.\r\n     * \r\n     * Markers allow you to split a video up into sequences, delineated by a start and end time, given in seconds.\r\n     * \r\n     * You can then play back specific markers via the `playMarker` method.\r\n     * \r\n     * Note that marker timing is _not_ frame-perfect. You should construct your videos in such a way that you allow for\r\n     * plenty of extra padding before and after each sequence to allow for discrepancies in browser seek and currentTime accuracy.\r\n     * \r\n     * See https://github.com/w3c/media-and-entertainment/issues/4 for more details about this issue.\r\n     *\r\n     * @method Phaser.GameObjects.Video#addMarker\r\n     * @since 3.20.0\r\n     * \r\n     * @param {string} key - A unique name to give this marker.\r\n     * @param {integer} markerIn - The time, in seconds, representing the start of this marker.\r\n     * @param {integer} markerOut - The time, in seconds, representing the end of this marker.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    addMarker: function (key, markerIn, markerOut)\r\n    {\r\n        if (!isNaN(markerIn) && markerIn >= 0 && !isNaN(markerOut))\r\n        {\r\n            this.markers[key] = [ markerIn, markerOut ];\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Plays a pre-defined sequence in this video.\r\n     * \r\n     * Markers allow you to split a video up into sequences, delineated by a start and end time, given in seconds and\r\n     * specified via the `addMarker` method.\r\n     * \r\n     * Note that marker timing is _not_ frame-perfect. You should construct your videos in such a way that you allow for\r\n     * plenty of extra padding before and after each sequence to allow for discrepancies in browser seek and currentTime accuracy.\r\n     * \r\n     * See https://github.com/w3c/media-and-entertainment/issues/4 for more details about this issue.\r\n     *\r\n     * @method Phaser.GameObjects.Video#playMarker\r\n     * @since 3.20.0\r\n     * \r\n     * @param {string} key - The name of the marker sequence to play.\r\n     * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    playMarker: function (key, loop)\r\n    {\r\n        var marker = this.markers[key];\r\n\r\n        if (marker)\r\n        {\r\n            this.play(loop, marker[0], marker[1]);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a previously set marker from this video.\r\n     * \r\n     * If the marker is currently playing it will _not_ stop playback.\r\n     *\r\n     * @method Phaser.GameObjects.Video#removeMarker\r\n     * @since 3.20.0\r\n     * \r\n     * @param {string} key - The name of the marker to remove.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    removeMarker: function (key)\r\n    {\r\n        delete this.markers[key];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the current frame of the video and renders it to a CanvasTexture object,\r\n     * which is then returned. You can optionally resize the grab by passing a width and height.\r\n     * \r\n     * This method returns a reference to the `Video.snapshotTexture` object. Calling this method\r\n     * multiple times will overwrite the previous snapshot with the most recent one.\r\n     *\r\n     * @method Phaser.GameObjects.Video#snapshot\r\n     * @since 3.20.0\r\n     * \r\n     * @param {integer} [width] - The width of the resulting CanvasTexture.\r\n     * @param {integer} [height] - The height of the resulting CanvasTexture.\r\n     * \r\n     * @return {Phaser.Textures.CanvasTexture} \r\n     */\r\n    snapshot: function (width, height)\r\n    {\r\n        if (width === undefined) { width = this.width; }\r\n        if (height === undefined) { height = this.height; }\r\n\r\n        return this.snapshotArea(0, 0, this.width, this.height, width, height);\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the specified area of the current frame of the video and renders it to a CanvasTexture object,\r\n     * which is then returned. You can optionally resize the grab by passing a different `destWidth` and `destHeight`.\r\n     * \r\n     * This method returns a reference to the `Video.snapshotTexture` object. Calling this method\r\n     * multiple times will overwrite the previous snapshot with the most recent one.\r\n     *\r\n     * @method Phaser.GameObjects.Video#snapshotArea\r\n     * @since 3.20.0\r\n     * \r\n     * @param {integer} [x=0] - The horizontal location of the top-left of the area to grab from.\r\n     * @param {integer} [y=0] - The vertical location of the top-left of the area to grab from.\r\n     * @param {integer} [srcWidth] - The width of area to grab from the video. If not given it will grab the full video dimensions.\r\n     * @param {integer} [srcHeight] - The height of area to grab from the video. If not given it will grab the full video dimensions.\r\n     * @param {integer} [destWidth] - The destination width of the grab, allowing you to resize it.\r\n     * @param {integer} [destHeight] - The destination height of the grab, allowing you to resize it.\r\n     * \r\n     * @return {Phaser.Textures.CanvasTexture} \r\n     */\r\n    snapshotArea: function (x, y, srcWidth, srcHeight, destWidth, destHeight)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (srcWidth === undefined) { srcWidth = this.width; }\r\n        if (srcHeight === undefined) { srcHeight = this.height; }\r\n        if (destWidth === undefined) { destWidth = srcWidth; }\r\n        if (destHeight === undefined) { destHeight = srcHeight; }\r\n\r\n        var video = this.video;\r\n        var snap = this.snapshotTexture;\r\n\r\n        if (!snap)\r\n        {\r\n            snap = this.scene.sys.textures.createCanvas(UUID(), destWidth, destHeight);\r\n\r\n            this.snapshotTexture = snap;\r\n\r\n            if (video)\r\n            {\r\n                snap.context.drawImage(video, x, y, srcWidth, srcHeight, 0, 0, destWidth, destHeight);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            snap.setSize(destWidth, destHeight);\r\n\r\n            if (video)\r\n            {\r\n                snap.context.drawImage(video, x, y, srcWidth, srcHeight, 0, 0, destWidth, destHeight);\r\n            }\r\n        }\r\n\r\n        return snap.update();\r\n    },\r\n\r\n    /**\r\n     * Stores a copy of this Videos `snapshotTexture` in the Texture Manager using the given key.\r\n     * \r\n     * This texture is created when the `snapshot` or `snapshotArea` methods are called.\r\n     * \r\n     * After doing this, any texture based Game Object, such as a Sprite, can use the contents of the\r\n     * snapshot by using the texture key:\r\n     * \r\n     * ```javascript\r\n     * var vid = this.add.video(0, 0, 'intro');\r\n     * \r\n     * vid.snapshot();\r\n     * \r\n     * vid.saveSnapshotTexture('doodle');\r\n     * \r\n     * this.add.image(400, 300, 'doodle');\r\n     * ```\r\n     * \r\n     * Updating the contents of the `snapshotTexture`, for example by calling `snapshot` again,\r\n     * will automatically update _any_ Game Object that is using it as a texture.\r\n     * Calling `saveSnapshotTexture` again will not save another copy of the same texture,\r\n     * it will just rename the existing one.\r\n     * \r\n     * By default it will create a single base texture. You can add frames to the texture\r\n     * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n     * to use a specific frame.\r\n     *\r\n     * @method Phaser.GameObjects.Video#saveSnapshotTexture\r\n     * @since 3.20.0\r\n     *\r\n     * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n     *\r\n     * @return {Phaser.Textures.CanvasTexture} The Texture that was saved.\r\n     */\r\n    saveSnapshotTexture: function (key)\r\n    {\r\n        if (this.snapshotTexture)\r\n        {\r\n            this.scene.sys.textures.renameTexture(this.snapshotTexture.key, key);\r\n        }\r\n        else\r\n        {\r\n            this.snapshotTexture = this.scene.sys.textures.createCanvas(key, this.width, this.height);\r\n        }\r\n\r\n        return this.snapshotTexture;\r\n    },\r\n\r\n    /**\r\n     * Loads a Video from the given URL, ready for playback with the `Video.play` method.\r\n     * \r\n     * You can control at what point the browser determines the video as being ready for playback via\r\n     * the `loadEvent` parameter. See https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement\r\n     * for more details.\r\n     *\r\n     * @method Phaser.GameObjects.Video#loadURL\r\n     * @since 3.20.0\r\n     * \r\n     * @param {string} url - The URL of the video to load or be streamed.\r\n     * @param {string} [loadEvent='loadeddata'] - The load event to listen for. Either `loadeddata`, `canplay` or `canplaythrough`.\r\n     * @param {boolean} [noAudio=false] - Does the video have an audio track? If not you can enable auto-playing on it.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    loadURL: function (url, loadEvent, noAudio)\r\n    {\r\n        if (loadEvent === undefined) { loadEvent = 'loadeddata'; }\r\n        if (noAudio === undefined) { noAudio = false; }\r\n\r\n        if (this.video)\r\n        {\r\n            this.stop();\r\n        }\r\n\r\n        if (this.videoTexture)\r\n        {\r\n            this.scene.sys.textures.remove(this._key);\r\n        }\r\n\r\n        var video = document.createElement('video');\r\n    \r\n        video.controls = false;\r\n\r\n        if (noAudio)\r\n        {\r\n            video.muted = true;\r\n            video.defaultMuted = true;\r\n\r\n            video.setAttribute('autoplay', 'autoplay');\r\n        }\r\n\r\n        video.setAttribute('playsinline', 'playsinline');\r\n        video.setAttribute('preload', 'auto');\r\n\r\n        video.addEventListener('error', this._callbacks.error, true);\r\n\r\n        video.src = url;\r\n\r\n        video.load();\r\n\r\n        this.video = video;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This internal method is called automatically if the playback Promise resolves successfully.\r\n     *\r\n     * @method Phaser.GameObjects.Video#playPromiseSuccessHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    playPromiseSuccessHandler: function ()\r\n    {\r\n        this.touchLocked = false;\r\n\r\n        this.emit(Events.VIDEO_PLAY, this);\r\n\r\n        if (this._markerIn > -1)\r\n        {\r\n            this.video.currentTime = this._markerIn;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * This internal method is called automatically if the playback Promise fails to resolve.\r\n     *\r\n     * @method Phaser.GameObjects.Video#playPromiseErrorHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_ERROR\r\n     * @private\r\n     * @since 3.20.0\r\n     * \r\n     * @param {any} error - The Promise resolution error.\r\n     */\r\n    playPromiseErrorHandler: function (error)\r\n    {\r\n        this.scene.sys.input.once('pointerdown', this.unlockHandler, this);\r\n\r\n        this.touchLocked = true;\r\n        this.playWhenUnlocked = true;\r\n\r\n        this.emit(Events.VIDEO_ERROR, this, error);\r\n    },\r\n\r\n    /**\r\n     * Called when the video emits a `playing` event during load.\r\n     * \r\n     * This is only listened for if the browser doesn't support Promises.\r\n     *\r\n     * @method Phaser.GameObjects.Video#playHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n     * @since 3.20.0\r\n     */\r\n    playHandler: function ()\r\n    {\r\n        this.touchLocked = false;\r\n\r\n        this.emit(Events.VIDEO_PLAY, this);\r\n       \r\n        this.video.removeEventListener('playing', this._callbacks.play, true);\r\n    },\r\n\r\n    /**\r\n     * This internal method is called automatically if the video fails to load.\r\n     *\r\n     * @method Phaser.GameObjects.Video#loadErrorHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_ERROR\r\n     * @private\r\n     * @since 3.20.0\r\n     * \r\n     * @param {Event} event - The error Event.\r\n     */\r\n    loadErrorHandler: function (event)\r\n    {\r\n        this.stop();\r\n\r\n        this.emit(Events.VIDEO_ERROR, this, event);\r\n    },\r\n\r\n    /**\r\n     * This internal method is called if the video couldn't be played because it was interaction locked\r\n     * by the browser, but an input event has since been received.\r\n     *\r\n     * @method Phaser.GameObjects.Video#unlockHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_UNLOCKED\r\n     * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n     * @private\r\n     * @since 3.20.0\r\n     * \r\n     * @param {any} error - The Promise resolution error.\r\n     */\r\n    unlockHandler: function ()\r\n    {\r\n        this.touchLocked = false;\r\n        this.playWhenUnlocked = false;\r\n\r\n        this.emit(Events.VIDEO_UNLOCKED, this);\r\n\r\n        if (this._markerIn > -1)\r\n        {\r\n            this.video.currentTime = this._markerIn;\r\n        }\r\n\r\n        this.video.play();\r\n\r\n        this.emit(Events.VIDEO_PLAY, this);\r\n    },\r\n\r\n    /**\r\n     * Called when the video completes playback, i.e. reaches an `ended` state.\r\n     * \r\n     * This will never happen if the video is coming from a live stream, where the duration is `Infinity`.\r\n     *\r\n     * @method Phaser.GameObjects.Video#completeHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_COMPLETE\r\n     * @since 3.20.0\r\n     */\r\n    completeHandler: function ()\r\n    {\r\n        this.emit(Events.VIDEO_COMPLETE, this);\r\n    },\r\n\r\n    /**\r\n     * Called when the video emits a `timeUpdate` event during playback.\r\n     * \r\n     * This event is too slow and irregular to be used for actual video timing or texture updating,\r\n     * but we can use it to determine if a video has looped.\r\n     *\r\n     * @method Phaser.GameObjects.Video#timeUpdateHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_LOOP\r\n     * @since 3.20.0\r\n     */\r\n    timeUpdateHandler: function ()\r\n    {\r\n        if (this.video && this.video.currentTime < this._lastUpdate)\r\n        {\r\n            this.emit(Events.VIDEO_LOOP, this);\r\n\r\n            this._lastUpdate = 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The internal update step.\r\n     *\r\n     * @method Phaser.GameObjects.Video#preUpdate\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    preUpdate: function ()\r\n    {\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            var currentTime = video.currentTime;\r\n\r\n            //  Don't render a new frame unless the video has actually changed time\r\n            if (currentTime !== this._lastUpdate)\r\n            {\r\n                this._lastUpdate = currentTime;\r\n\r\n                this.updateTexture();\r\n\r\n                if (currentTime >= this._markerOut)\r\n                {\r\n                    if (video.loop)\r\n                    {\r\n                        video.currentTime = this._markerIn;\r\n\r\n                        this.updateTexture();\r\n\r\n                        this._lastUpdate = currentTime;\r\n\r\n                        this.emit(Events.VIDEO_LOOP, this);\r\n                    }\r\n                    else\r\n                    {\r\n                        this.emit(Events.VIDEO_COMPLETE, this);\r\n\r\n                        this.stop();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal callback that monitors the download progress of a video after changing its source.\r\n     *\r\n     * @method Phaser.GameObjects.Video#checkVideoProgress\r\n     * @fires Phaser.GameObjects.Events#VIDEO_TIMEOUT\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    checkVideoProgress: function ()\r\n    {\r\n        if (this.video.readyState >= 2)\r\n        {\r\n            //  We've got enough data to update the texture for playback\r\n            this.updateTexture();\r\n        }\r\n        else\r\n        {\r\n            this.retry--;\r\n\r\n            if (this.retry > 0)\r\n            {\r\n                this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval);\r\n            }\r\n            else\r\n            {\r\n                this.emit(Events.VIDEO_TIMEOUT, this);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that is called when enough video data has been received in order to create a texture\r\n     * from it. The texture is assigned to the `Video.videoTexture` property and given a base frame that\r\n     * encompases the whole video size.\r\n     *\r\n     * @method Phaser.GameObjects.Video#updateTexture\r\n     * @since 3.20.0\r\n     */\r\n    updateTexture: function ()\r\n    {\r\n        var video = this.video;\r\n\r\n        var width = video.videoWidth;\r\n        var height = video.videoHeight;\r\n\r\n        if (!this.videoTexture)\r\n        {\r\n            this.videoTexture = this.scene.sys.textures.create(this._key, video, width, height);\r\n            this.videoTextureSource = this.videoTexture.source[0];\r\n            this.videoTexture.add('__BASE', 0, 0, 0, width, height);\r\n    \r\n            this.setTexture(this.videoTexture);\r\n            this.setSizeToFrame();\r\n            this.updateDisplayOrigin();\r\n    \r\n            this.emit(Events.VIDEO_CREATED, this, width, height);\r\n        }\r\n        else\r\n        {\r\n            var textureSource = this.videoTextureSource;\r\n\r\n            if (textureSource.source !== video)\r\n            {\r\n                textureSource.source = video;\r\n                textureSource.width = width;\r\n                textureSource.height = height;\r\n            }\r\n            \r\n            textureSource.update();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns the key of the currently played video, as stored in the Video Cache.\r\n     * If the video did not come from the cache this will return an empty string.\r\n     *\r\n     * @method Phaser.GameObjects.Video#getVideoKey\r\n     * @since 3.20.0\r\n     * \r\n     * @return {string} The key of the video being played from the Video Cache, if any.\r\n     */\r\n    getVideoKey: function ()\r\n    {\r\n        return this._cacheKey;\r\n    },\r\n\r\n    /**\r\n     * Seeks to a given point in the video. The value is given as a float between 0 and 1,\r\n     * where 0 represents the start of the video and 1 represents the end.\r\n     * \r\n     * Seeking only works if the video has a duration, so will not work for live streams.\r\n     * \r\n     * When seeking begins, this video will emit a `seeking` event. When the video completes\r\n     * seeking (i.e. reaches its designated timestamp) it will emit a `seeked` event.\r\n     * \r\n     * If you wish to seek based on time instead, use the `Video.setCurrentTime` method.\r\n     *\r\n     * @method Phaser.GameObjects.Video#seekTo\r\n     * @since 3.20.0\r\n     * \r\n     * @param {number} value - The point in the video to seek to. A value between 0 and 1.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    seekTo: function (value)\r\n    {\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            var duration = video.duration;\r\n\r\n            if (duration !== Infinity && !isNaN(duration))\r\n            {\r\n                var seekTime = duration * value;\r\n\r\n                this.setCurrentTime(seekTime);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * A double-precision floating-point value indicating the current playback time in seconds.\r\n     * If the media has not started to play and has not been seeked, this value is the media's initial playback time.\r\n     *\r\n     * @method Phaser.GameObjects.Video#getCurrentTime\r\n     * @since 3.20.0\r\n     * \r\n     * @return {number} A double-precision floating-point value indicating the current playback time in seconds.\r\n     */\r\n    getCurrentTime: function ()\r\n    {\r\n        return (this.video) ? this.video.currentTime : 0;\r\n    },\r\n\r\n    /**\r\n     * Seeks to a given playback time in the video. The value is given in _seconds_ or as a string.\r\n     * \r\n     * Seeking only works if the video has a duration, so will not work for live streams.\r\n     * \r\n     * When seeking begins, this video will emit a `seeking` event. When the video completes\r\n     * seeking (i.e. reaches its designated timestamp) it will emit a `seeked` event.\r\n     * \r\n     * You can provide a string prefixed with either a `+` or a `-`, such as `+2.5` or `-2.5`.\r\n     * In this case it will seek to +/- the value given, relative to the _current time_.\r\n     * \r\n     * If you wish to seek based on a duration percentage instead, use the `Video.seekTo` method.\r\n     *\r\n     * @method Phaser.GameObjects.Video#setCurrentTime\r\n     * @since 3.20.0\r\n     * \r\n     * @param {(string|number)} value - The playback time to seek to in seconds. Can be expressed as a string, such as `+2` to seek 2 seconds ahead from the current time.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setCurrentTime: function (value)\r\n    {\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            if (typeof value === 'string')\r\n            {\r\n                var op = value[0];\r\n                var num = parseFloat(value.substr(1));\r\n\r\n                if (op === '+')\r\n                {\r\n                    value = video.currentTime + num;\r\n                }\r\n                else if (op === '-')\r\n                {\r\n                    value = video.currentTime - num;\r\n                }\r\n            }\r\n\r\n            video.currentTime = value;\r\n\r\n            this._lastUpdate = value;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a boolean indicating if this Video is currently seeking, or not.\r\n     *\r\n     * @method Phaser.GameObjects.Video#isSeeking\r\n     * @since 3.20.0\r\n     * \r\n     * @return {boolean} A boolean indicating if this Video is currently seeking, or not.\r\n     */\r\n    isSeeking: function ()\r\n    {\r\n        return this._isSeeking;\r\n    },\r\n\r\n    /**\r\n     * Internal seeking handler.\r\n     *\r\n     * @method Phaser.GameObjects.Video#seekingHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_SEEKING\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    seekingHandler: function ()\r\n    {\r\n        this._isSeeking = true;\r\n\r\n        this.emit(Events.VIDEO_SEEKING, this);\r\n    },\r\n\r\n    /**\r\n     * Internal seeked handler.\r\n     *\r\n     * @method Phaser.GameObjects.Video#seekedHandler\r\n     * @fires Phaser.GameObjects.Events#VIDEO_SEEKED\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    seekedHandler: function ()\r\n    {\r\n        this._isSeeking = false;\r\n\r\n        this.emit(Events.VIDEO_SEEKED, this);\r\n\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            this.updateTexture();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns the current progress of the video. Progress is defined as a value between 0 (the start)\r\n     * and 1 (the end).\r\n     * \r\n     * Progress can only be returned if the video has a duration, otherwise it will always return zero.\r\n     *\r\n     * @method Phaser.GameObjects.Video#getProgress\r\n     * @since 3.20.0\r\n     * \r\n     * @return {number} The current progress of playback. If the video has no duration, will always return zero.\r\n     */\r\n    getProgress: function ()\r\n    {\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            var now = video.currentTime;\r\n            var duration = video.duration;\r\n\r\n            if (duration !== Infinity && !isNaN(duration))\r\n            {\r\n                return now / duration;\r\n            }\r\n        }\r\n        \r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * A double-precision floating-point value which indicates the duration (total length) of the media in seconds,\r\n     * on the media's timeline. If no media is present on the element, or the media is not valid, the returned value is NaN.\r\n     * \r\n     * If the media has no known end (such as for live streams of unknown duration, web radio, media incoming from WebRTC,\r\n     * and so forth), this value is +Infinity.\r\n     * \r\n     * @method Phaser.GameObjects.Video#getDuration\r\n     * @since 3.20.0\r\n     * \r\n     * @return {number} A double-precision floating-point value indicating the duration of the media in seconds.\r\n     */\r\n    getDuration: function ()\r\n    {\r\n        return (this.video) ? this.video.duration : 0;\r\n    },\r\n\r\n    /**\r\n     * Sets the muted state of the currently playing video, if one is loaded.\r\n     *\r\n     * @method Phaser.GameObjects.Video#setMute\r\n     * @since 3.20.0\r\n     * \r\n     * @param {boolean} [value=true] - The mute value. `true` if the video should be muted, otherwise `false`.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setMute: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this._codeMuted = value;\r\n\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            video.muted = (this._systemMuted) ? true : value;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a boolean indicating if this Video is currently muted.\r\n     *\r\n     * @method Phaser.GameObjects.Video#isMuted\r\n     * @since 3.20.0\r\n     * \r\n     * @return {boolean} A boolean indicating if this Video is currently muted, or not.\r\n     */\r\n    isMuted: function ()\r\n    {\r\n        return this._codeMuted;\r\n    },\r\n\r\n    /**\r\n     * Internal global mute handler. Will mute the video, if playing, if the global sound system mutes.\r\n     *\r\n     * @method Phaser.GameObjects.Video#globalMute\r\n     * @private\r\n     * @since 3.20.0\r\n     * \r\n     * @param {(Phaser.Sound.WebAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager)} soundManager - A reference to the Sound Manager that emitted the event.\r\n     * @param {boolean} mute - The mute value. `true` if the Sound Manager is now muted, otherwise `false`.\r\n     */\r\n    globalMute: function (soundManager, value)\r\n    {\r\n        this._systemMuted = value;\r\n\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            video.muted = (this._codeMuted) ? true : value;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal global pause handler. Will pause the video if the Game itself pauses.\r\n     *\r\n     * @method Phaser.GameObjects.Video#globalPause\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    globalPause: function ()\r\n    {\r\n        this._systemPaused = true;\r\n\r\n        if (this.video)\r\n        {\r\n            this.video.pause();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal global resume handler. Will resume a paused video if the Game itself resumes.\r\n     *\r\n     * @method Phaser.GameObjects.Video#globalResume\r\n     * @private\r\n     * @since 3.20.0\r\n     */\r\n    globalResume: function ()\r\n    {\r\n        this._systemPaused = false;\r\n\r\n        if (this.video && !this._codePaused)\r\n        {\r\n            this.video.play();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the paused state of the currently loaded video.\r\n     * \r\n     * If the video is playing, calling this method with `true` will pause playback.\r\n     * If the video is paused, calling this method with `false` will resume playback.\r\n     * \r\n     * If no video is loaded, this method does nothing.\r\n     *\r\n     * @method Phaser.GameObjects.Video#setPaused\r\n     * @since 3.20.0\r\n     * \r\n     * @param {boolean} [value=true] - The paused value. `true` if the video should be paused, `false` to resume it.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setPaused: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        var video = this.video;\r\n\r\n        this._codePaused = value;\r\n\r\n        if (video)\r\n        {\r\n            if (value)\r\n            {\r\n                if (!video.paused)\r\n                {\r\n                    video.pause();\r\n                }\r\n            }\r\n            else if (!value)\r\n            {\r\n                if (video.paused && !this._systemPaused)\r\n                {\r\n                    video.play();\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n     * \r\n     * @method Phaser.GameObjects.Video#getVolume\r\n     * @since 3.20.0\r\n     * \r\n     * @return {number} A double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n     */\r\n    getVolume: function ()\r\n    {\r\n        return (this.video) ? this.video.volume : 1;\r\n    },\r\n    \r\n    /**\r\n     * Sets the volume of the currently playing video.\r\n     * \r\n     * The value given is a double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n     * \r\n     * @method Phaser.GameObjects.Video#setVolume\r\n     * @since 3.20.0\r\n     * \r\n     * @param {number} [value=1] - A double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setVolume: function (value)\r\n    {\r\n        if (value === undefined) { value = 1; }\r\n\r\n        if (this.video)\r\n        {\r\n            this.video.volume = Clamp(value, 0, 1);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a double that indicates the rate at which the media is being played back.\r\n     * \r\n     * @method Phaser.GameObjects.Video#getPlaybackRate\r\n     * @since 3.20.0\r\n     * \r\n     * @return {number} A double that indicates the rate at which the media is being played back.\r\n     */\r\n    getPlaybackRate: function ()\r\n    {\r\n        return (this.video) ? this.video.playbackRate : 1;\r\n    },\r\n\r\n    /**\r\n     * Sets the playback rate of the current video.\r\n     * \r\n     * The value given is a double that indicates the rate at which the media is being played back.\r\n     * \r\n     * @method Phaser.GameObjects.Video#setPlaybackRate\r\n     * @since 3.20.0\r\n     * \r\n     * @param {number} [rate] - A double that indicates the rate at which the media is being played back.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setPlaybackRate: function (rate)\r\n    {\r\n        if (this.video)\r\n        {\r\n            this.video.playbackRate = rate;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a boolean which indicates whether the media element should start over when it reaches the end.\r\n     * \r\n     * @method Phaser.GameObjects.Video#getLoop\r\n     * @since 3.20.0\r\n     * \r\n     * @return {boolean} A boolean which indicates whether the media element will start over when it reaches the end.\r\n     */\r\n    getLoop: function ()\r\n    {\r\n        return (this.video) ? this.video.loop : false;\r\n    },\r\n\r\n    /**\r\n     * Sets the loop state of the current video.\r\n     * \r\n     * The value given is a boolean which indicates whether the media element will start over when it reaches the end.\r\n     * \r\n     * Not all videos can loop, for example live streams.\r\n     * \r\n     * Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n     * \r\n     * @method Phaser.GameObjects.Video#setLoop\r\n     * @since 3.20.0\r\n     * \r\n     * @param {boolean} [value=true] - A boolean which indicates whether the media element will start over when it reaches the end.\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    setLoop: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        if (this.video)\r\n        {\r\n            this.video.loop = value;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a boolean which indicates whether the video is currently playing.\r\n     * \r\n     * @method Phaser.GameObjects.Video#isPlaying\r\n     * @since 3.20.0\r\n     * \r\n     * @return {boolean} A boolean which indicates whether the video is playing, or not.\r\n     */\r\n    isPlaying: function ()\r\n    {\r\n        return (this.video) ? !(this.video.paused || this.video.ended) : false;\r\n    },\r\n    \r\n    /**\r\n     * Returns a boolean which indicates whether the video is currently paused.\r\n     * \r\n     * @method Phaser.GameObjects.Video#isPaused\r\n     * @since 3.20.0\r\n     * \r\n     * @return {boolean} A boolean which indicates whether the video is paused, or not.\r\n     */\r\n    isPaused: function ()\r\n    {\r\n        return ((this.video && this.video.paused) || this._codePaused || this._systemPaused);\r\n    },\r\n\r\n    /**\r\n     * Stores this Video in the Texture Manager using the given key as a dynamic texture,\r\n     * which any texture-based Game Object, such as a Sprite, can use as its texture:\r\n     * \r\n     * ```javascript\r\n     * var vid = this.add.video(0, 0, 'intro');\r\n     * \r\n     * vid.play();\r\n     * \r\n     * vid.saveTexture('doodle');\r\n     * \r\n     * this.add.image(400, 300, 'doodle');\r\n     * ```\r\n     * \r\n     * The saved texture is automatically updated as the video plays. If you pause this video,\r\n     * or change its source, then the saved texture updates instantly.\r\n     * \r\n     * Calling `saveTexture` again will not save another copy of the same texture, it will just rename the existing one.\r\n     * \r\n     * By default it will create a single base texture. You can add frames to the texture\r\n     * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n     * to use a specific frame.\r\n     * \r\n     * If you intend to save the texture so you can use it as the input for a Shader, you may need to set the\r\n     * `flipY` parameter to `true` if you find the video renders upside down in your shader.\r\n     *\r\n     * @method Phaser.GameObjects.Video#saveTexture\r\n     * @since 3.20.0\r\n     *\r\n     * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y` during upload?\r\n     *\r\n     * @return {Phaser.Textures.Texture} The Texture that was saved.\r\n     */\r\n    saveTexture: function (key, flipY)\r\n    {\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        if (this.videoTexture)\r\n        {\r\n            this.scene.sys.textures.renameTexture(this._key, key);\r\n        }\r\n\r\n        this._key = key;\r\n\r\n        this.flipY = flipY;\r\n\r\n        if (this.videoTextureSource)\r\n        {\r\n            this.videoTextureSource.setFlipY(flipY);\r\n        }\r\n\r\n        return this.videoTexture;\r\n    },\r\n\r\n    /**\r\n     * Stops the video playing and clears all internal event listeners.\r\n     *\r\n     * If you only wish to pause playback of the video, and resume it a later time, use the `Video.pause` method instead.\r\n     * \r\n     * If the video hasn't finished downloading, calling this method will not abort the download. To do that you need to\r\n     * call `destroy` instead.\r\n     *\r\n     * @method Phaser.GameObjects.Video#stop\r\n     * @fires Phaser.GameObjects.Events#VIDEO_STOP\r\n     * @since 3.20.0\r\n     * \r\n     * @return {this} This Video Game Object for method chaining.\r\n     */\r\n    stop: function ()\r\n    {\r\n        var video = this.video;\r\n\r\n        if (video)\r\n        {\r\n            var callbacks = this._callbacks;\r\n\r\n            for (var callback in callbacks)\r\n            {\r\n                video.removeEventListener(callback, callbacks[callback], true);\r\n            }\r\n\r\n            video.pause();\r\n        }\r\n\r\n        if (this._retryID)\r\n        {\r\n            window.clearTimeout(this._retryID);\r\n        }\r\n\r\n        this.emit(Events.VIDEO_STOP, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the Video element from the DOM by calling parentNode.removeChild on itself.\r\n     * \r\n     * Also removes the autoplay and src attributes and nulls the Video reference.\r\n     * \r\n     * You should not call this method if you were playing a video from the Video Cache that\r\n     * you wish to play again in your game, or if another Video object is also using the same\r\n     * video.\r\n     * \r\n     * If you loaded an external video via `Video.loadURL` then you should call this function\r\n     * to clear up once you are done with the instance.\r\n     *\r\n     * @method Phaser.GameObjects.Video#removeVideoElement\r\n     * @since 3.20.0\r\n     */\r\n    removeVideoElement: function ()\r\n    {\r\n        var video = this.video;\r\n\r\n        if (!video)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (video.parentNode)\r\n        {\r\n            video.parentNode.removeChild(video);\r\n        }\r\n\r\n        while (video.hasChildNodes())\r\n        {\r\n            video.removeChild(video.firstChild);\r\n        }\r\n\r\n        video.removeAttribute('autoplay');\r\n        video.removeAttribute('src');\r\n\r\n        this.video = null;\r\n    },\r\n\r\n    /**\r\n     * Handles the pre-destroy step for the Video object.\r\n     * \r\n     * This calls `Video.stop` and optionally `Video.removeVideoElement`.\r\n     * \r\n     * If any Sprites are using this Video as their texture it is up to you to manage those.\r\n     *\r\n     * @method Phaser.GameObjects.Video#preDestroy\r\n     * @private\r\n     * @since 3.21.0\r\n     */\r\n    preDestroy: function ()\r\n    {\r\n        this.stop();\r\n\r\n        if (this.removeVideoElementOnDestroy)\r\n        {\r\n            this.removeVideoElement();\r\n        }\r\n\r\n        var game = this.scene.sys.game.events;\r\n\r\n        game.off(GameEvents.PAUSE, this.globalPause, this);\r\n        game.off(GameEvents.RESUME, this.globalResume, this);\r\n\r\n        var sound = this.scene.sys.sound;\r\n\r\n        if (sound)\r\n        {\r\n            sound.off(SoundEvents.GLOBAL_MUTE, this.globalMute, this);\r\n        }\r\n\r\n        if (this._retryID)\r\n        {\r\n            window.clearTimeout(this._retryID);\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Video;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlby5qcz9iOWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxpRUFBa0I7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFvQjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyw0RUFBcUI7QUFDL0MsV0FBVyxtQkFBTyxDQUFDLCtFQUF5QjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQyxtQkFBbUI7O0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQsbUNBQW1DLHNCQUFzQjs7QUFFekQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEI7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMscUNBQXFDLHVCQUF1QjtBQUM1RCxzQ0FBc0MseUJBQXlCO0FBQy9ELHNDQUFzQyxzQkFBc0I7QUFDNUQsdUNBQXVDLHdCQUF3Qjs7QUFFL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsMEJBQTBCO0FBQ2hFLG9DQUFvQyxpQkFBaUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3RUFBd0U7QUFDdkYsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdmlkZW8vVmlkZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvQ2xhbXAnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb3JlL2V2ZW50cy8nKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBTb3VuZEV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL3NvdW5kL2V2ZW50cy8nKTtcclxudmFyIFVVSUQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9zdHJpbmcvVVVJRCcpO1xyXG52YXIgVmlkZW9SZW5kZXIgPSByZXF1aXJlKCcuL1ZpZGVvUmVuZGVyJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBWaWRlbyBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIFRoaXMgR2FtZSBPYmplY3QgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBwbGF5YmFjayBvZiBhIHByZXZpb3VzbHkgbG9hZGVkIHZpZGVvIGZyb20gdGhlIFBoYXNlciBWaWRlbyBDYWNoZSxcclxuICogb3IgcGxheWluZyBhIHZpZGVvIGJhc2VkIG9uIGEgZ2l2ZW4gVVJMLiBWaWRlb3MgY2FuIGJlIGVpdGhlciBsb2NhbCwgb3Igc3RyZWFtZWQuXHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHByZWxvYWQgKCkge1xyXG4gKiAgIHRoaXMubG9hZC52aWRlbygncGl4YXInLCAnbmVtby5tcDQnKTtcclxuICogfVxyXG4gKiBcclxuICogY3JlYXRlICgpIHtcclxuICogICB0aGlzLmFkZC52aWRlbyg0MDAsIDMwMCwgJ3BpeGFyJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBUbyBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIGEgdmlkZW8gaXMgYSBzdGFuZGFyZCBHYW1lIE9iamVjdCwganVzdCBsaWtlIGEgU3ByaXRlLiBBbmQgYXMgc3VjaCwgeW91IGNhbiBkb1xyXG4gKiBhbGwgdGhlIHVzdWFsIHRoaW5ncyB0byBpdCwgc3VjaCBhcyBzY2FsaW5nLCByb3RhdGluZywgY3JvcHBpbmcsIHRpbnRpbmcsIG1ha2luZyBpbnRlcmFjdGl2ZSwgZ2l2aW5nIGFcclxuICogcGh5c2ljcyBib2R5LCBldGMuXHJcbiAqIFxyXG4gKiBUcmFuc3BhcmVudCB2aWRlb3MgYXJlIGFsc28gcG9zc2libGUgdmlhIHRoZSBXZWJNIGZpbGUgZm9ybWF0LiBQcm92aWRpbmcgdGhlIHZpZGVvIGZpbGUgaGFzIHdhcyBlbmNvZGVkIHdpdGhcclxuICogYW4gYWxwaGEgY2hhbm5lbCwgYW5kIHByb3ZpZGluZyB0aGUgYnJvd3NlciBzdXBwb3J0cyBXZWJNIHBsYXliYWNrIChub3QgYWxsIG9mIHRoZW0gZG8pLCB0aGVuIGl0IHdpbGwgcmVuZGVyXHJcbiAqIGluLWdhbWUgd2l0aCBmdWxsIHRyYW5zcGFyZW5jeS5cclxuICogXHJcbiAqICMjIyBBdXRvcGxheWluZyBWaWRlb3NcclxuICogXHJcbiAqIFZpZGVvcyBjYW4gb25seSBhdXRvcGxheSBpZiB0aGUgYnJvd3NlciBoYXMgYmVlbiB1bmxvY2tlZCB3aXRoIGFuIGludGVyYWN0aW9uLCBvciBzYXRpc2ZpZXMgdGhlIE1FSSBzZXR0aW5ncy5cclxuICogVGhlIHBvbGljaWVzIHRoYXQgY29udHJvbCBhdXRvcGxheWluZyBhcmUgdmFzdCBhbmQgdmFyeSBiZXR3ZWVuIGJyb3dzZXIuXHJcbiAqIFlvdSBjYW4sIGFoZCBzaG91bGQsIHJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9NZWRpYS9BdXRvcGxheV9ndWlkZVxyXG4gKiBcclxuICogSWYgeW91ciB2aWRlbyBkb2Vzbid0IGNvbnRhaW4gYW55IGF1ZGlvLCB0aGVuIHNldCB0aGUgYG5vQXVkaW9gIHBhcmFtZXRlciB0byBgdHJ1ZWAgd2hlbiB0aGUgdmlkZW8gaXMgX2xvYWRlZF8sXHJcbiAqIGFuZCBpdCB3aWxsIG9mdGVuIGFsbG93IHRoZSB2aWRlbyB0byBwbGF5IGltbWVkaWF0ZWx5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBwcmVsb2FkICgpIHtcclxuICogICB0aGlzLmxvYWQudmlkZW8oJ3BpeGFyJywgJ25lbW8ubXA0JywgJ2xvYWRlZGRhdGEnLCBmYWxzZSwgdHJ1ZSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBUaGUgNXRoIHBhcmFtZXRlciBpbiB0aGUgbG9hZCBjYWxsIHRlbGxzIFBoYXNlciB0aGF0IHRoZSB2aWRlbyBkb2Vzbid0IGNvbnRhaW4gYW55IGF1ZGlvIHRyYWNrcy4gVmlkZW8gd2l0aG91dFxyXG4gKiBhdWRpbyBjYW4gYXV0b3BsYXkgd2l0aG91dCByZXF1aXJpbmcgYSB1c2VyIGludGVyYWN0aW9uLiBWaWRlbyB3aXRoIGF1ZGlvIGNhbm5vdCBkbyB0aGlzIHVubGVzcyBpdCBzYXRpc2ZpZXNcclxuICogdGhlIGJyb3dzZXJzIE1FSSBzZXR0aW5ncy4gU2VlIHRoZSBNRE4gQXV0b3BsYXkgR3VpZGUgZm9yIGZ1cnRoZXIgZGV0YWlscy5cclxuICogXHJcbiAqIE5vdGUgdGhhdCBkdWUgdG8gYSBidWcgaW4gSUUxMSB5b3UgY2Fubm90IHBsYXkgYSB2aWRlbyB0ZXh0dXJlIHRvIGEgU3ByaXRlIGluIFdlYkdMLiBGb3IgSUUxMSBmb3JjZSBDYW52YXMgbW9kZS5cclxuICogXHJcbiAqIE1vcmUgZGV0YWlscyBhYm91dCB2aWRlbyBwbGF5YmFjayBhbmQgdGhlIHN1cHBvcnRlZCBtZWRpYSBmb3JtYXRzIGNhbiBiZSBmb3VuZCBvbiBNRE46XHJcbiAqIFxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudFxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9NZWRpYS9Gb3JtYXRzXHJcbiAqXHJcbiAqIEBjbGFzcyBWaWRlb1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBPcHRpb25hbCBrZXkgb2YgdGhlIFZpZGVvIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCBwbGF5LCBhcyBzdG9yZWQgaW4gdGhlIFZpZGVvIENhY2hlLlxyXG4gKi9cclxudmFyIFZpZGVvID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuT3JpZ2luLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZUNyb3AsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UaW50LFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBWaWRlb1JlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFZpZGVvIChzY2VuZSwgeCwgeSwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1ZpZGVvJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBIVE1MIFZpZGVvIEVsZW1lbnQgdGhpcyBWaWRlbyBHYW1lIE9iamVjdCBpcyBwbGF5aW5nLlxyXG4gICAgICAgICAqIFdpbGwgYmUgYG51bGxgIHVudGlsIGEgdmlkZW8gaXMgbG9hZGVkIGZvciBwbGF5YmFjay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyN2aWRlb1xyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBQaGFzZXIgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB0aGUgdmlkZW8gdG8uXHJcbiAgICAgICAgICogV2lsbCBiZSBgbnVsbGAgdW50aWwgYSB2aWRlbyBpcyBsb2FkZWQgZm9yIHBsYXliYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3ZpZGVvVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlkZW9UZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmVTb3VyY2UgYmVsb25nIHRvIHRoZSBgdmlkZW9UZXh0dXJlYCBUZXh0dXJlIG9iamVjdC5cclxuICAgICAgICAgKiBXaWxsIGJlIGBudWxsYCB1bnRpbCBhIHZpZGVvIGlzIGxvYWRlZCBmb3IgcGxheWJhY2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdmlkZW9UZXh0dXJlU291cmNlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlb1RleHR1cmVTb3VyY2UgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFBoYXNlciBDYW52YXNUZXh0dXJlIGluc3RhbmNlIHRoYXQgaG9sZHMgdGhlIG1vc3QgcmVjZW50IHNuYXBzaG90IHRha2VuIGZyb20gdGhlIHZpZGVvLlxyXG4gICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGJlIHNldCBpZiBgc25hcHNob3RgIG9yIGBzbmFwc2hvdEFyZWFgIGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB3aWxsIGJlIGBudWxsYCB1bnRpbCB0aGF0IHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NuYXBzaG90VGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc25hcHNob3RUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgeW91IGhhdmUgc2F2ZWQgdGhpcyB2aWRlbyB0byBhIHRleHR1cmUgdmlhIHRoZSBgc2F2ZVRleHR1cmVgIG1ldGhvZCwgdGhpcyBjb250cm9scyBpZiB0aGUgdmlkZW9cclxuICAgICAgICAgKiBpcyByZW5kZXJlZCB3aXRoIGBmbGlwWWAgaW4gV2ViR0wgb3Igbm90LiBZb3Ugb2Z0ZW4gbmVlZCB0byBzZXQgdGhpcyBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHZpZGVvIHRleHR1cmVcclxuICAgICAgICAgKiBhcyB0aGUgaW5wdXQgc291cmNlIGZvciBhIHNoYWRlci4gSWYgeW91IGZpbmQgeW91ciB2aWRlbyBpcyBhcHBlYXJpbmcgdXBzaWRlIGRvd24gd2l0aGluIGEgc2hhZGVyIG9yXHJcbiAgICAgICAgICogY3VzdG9tIHBpcGVsaW5lLCBmbGlwIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZmxpcFlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUga2V5IHVzZWQgYnkgdGhlIHRleHR1cmUgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fa2V5ID0gVVVJRCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBmbGFnIGhvbGRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpZGVvIGxvY2ssIHNob3VsZCBkb2N1bWVudCBpbnRlcmFjdGlvbiBiZSByZXF1aXJlZFxyXG4gICAgICAgICAqIGJlZm9yZSBwbGF5YmFjayBjYW4gYmVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdG91Y2hMb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgdmlkZW8gYXV0byBwbGF5IHdoZW4gZG9jdW1lbnQgaW50ZXJhY3Rpb24gaXMgcmVxdWlyZWQgYW5kIGhhcHBlbnM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcGxheVdoZW5VbmxvY2tlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXlXaGVuVW5sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiBzdGFydGluZyBwbGF5YmFjayBvZiBhIHZpZGVvIFBoYXNlciB3aWxsIG1vbml0b3IgaXRzIGByZWFkeVN0YXRlYCB1c2luZyBhIGBzZXRUaW1lb3V0YCBjYWxsLlxyXG4gICAgICAgICAqIFRoZSBgc2V0VGltZW91dGAgaGFwcGVucyBvbmNlIGV2ZXJ5IGBWaWRlby5yZXRyeUludGVydmFsYCBtcy4gSXQgd2lsbCBjYXJyeSBvbiBtb25pdG9yaW5nIHRoZSB2aWRlb1xyXG4gICAgICAgICAqIHN0YXRlIGluIHRoaXMgbWFubmVyIHVudGlsIHRoZSBgcmV0cnlMaW1pdGAgaXMgcmVhY2hlZCBhbmQgdGhlbiBhYm9ydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZXRyeUxpbWl0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmV0cnlMaW1pdCA9IDIwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCByZXRyeSBhdHRlbXB0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JldHJ5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmV0cnkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIG1zIGJldHdlZW4gZWFjaCByZXRyeSB3aGlsZSBtb25pdG9yaW5nIHRoZSByZWFkeSBzdGF0ZSBvZiBhIGRvd25sb2FkaW5nIHZpZGVvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JldHJ5SW50ZXJ2YWxcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXRyeUludGVydmFsID0gNTAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0VGltZW91dCBjYWxsYmFjayBJRC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfcmV0cnlJRFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JldHJ5SUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlkZW8gd2FzIG11dGVkIGR1ZSB0byBhIHN5c3RlbSBldmVudCwgc3VjaCBhcyB0aGUgZ2FtZSBsb3NpbmcgZm9jdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX3N5c3RlbU11dGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3lzdGVtTXV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZpZGVvIHdhcyBtdXRlZCBkdWUgdG8gZ2FtZSBjb2RlLCBub3QgYSBzeXN0ZW0gZXZlbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2NvZGVNdXRlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvZGVNdXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlkZW8gd2FzIHBhdXNlZCBkdWUgdG8gYSBzeXN0ZW0gZXZlbnQsIHN1Y2ggYXMgdGhlIGdhbWUgbG9zaW5nIGZvY3VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19zeXN0ZW1QYXVzZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zeXN0ZW1QYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZpZGVvIHdhcyBwYXVzZWQgZHVlIHRvIGdhbWUgY29kZSwgbm90IGEgc3lzdGVtIGV2ZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19jb2RlUGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY29kZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbG9jYWxseSBib3VuZCBldmVudCBjYWxsYmFjayBoYW5kbGVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfY2FsbGJhY2tzXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIHBsYXk6IHRoaXMucGxheUhhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMubG9hZEVycm9ySGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBlbmQ6IHRoaXMuY29tcGxldGVIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHRpbWU6IHRoaXMudGltZVVwZGF0ZUhhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgc2Vla2luZzogdGhpcy5zZWVraW5nSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBzZWVrZWQ6IHRoaXMuc2Vla2VkSGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBpbiBhbmQgb3V0IG1hcmtlcnMgZm9yIHNlcXVlbmNlIHBsYXliYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI21hcmtlcnNcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hcmtlcnMgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluIG1hcmtlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfbWFya2VySW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9tYXJrZXJJbiA9IC0xO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgb3V0IG1hcmtlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfbWFya2VyT3V0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbWFya2VyT3V0ID0gTUFUSF9DT05TVC5NQVhfU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGFzdCB0aW1lIHRoZSBUZXh0dXJlU291cmNlIHdhcyB1cGRhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19sYXN0VXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIHZpZGVvIGJlaW5nIHBsYXllZCBmcm9tIHRoZSBWaWRlbyBjYWNoZSwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19jYWNoZUtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIHZpZGVvIGN1cnJlbnRseSBzZWVraW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19pc1NlZWtpbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBWaWRlbyBlbGVtZW50IHRoYXQgdGhpcyBWaWRlbyBpcyB1c2luZywgYmUgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICAgICAgICAgKiB3aGVuIHRoaXMgVmlkZW8gaXMgZGVzdHJveWVkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JlbW92ZVZpZGVvRWxlbWVudE9uRGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbW92ZVZpZGVvRWxlbWVudE9uRGVzdHJveSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNvdXJjZShrZXksIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnYW1lID0gc2NlbmUuc3lzLmdhbWUuZXZlbnRzO1xyXG5cclxuICAgICAgICBnYW1lLm9uKEdhbWVFdmVudHMuUEFVU0UsIHRoaXMuZ2xvYmFsUGF1c2UsIHRoaXMpO1xyXG4gICAgICAgIGdhbWUub24oR2FtZUV2ZW50cy5SRVNVTUUsIHRoaXMuZ2xvYmFsUmVzdW1lLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIHNvdW5kID0gc2NlbmUuc3lzLnNvdW5kO1xyXG5cclxuICAgICAgICBpZiAoc291bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzb3VuZC5vbihTb3VuZEV2ZW50cy5HTE9CQUxfTVVURSwgdGhpcy5nbG9iYWxNdXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoaXMgdmlkZW8gcGxheWluZy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgdmlkZW8gaXMgYWxyZWFkeSBwbGF5aW5nLCBvciBoYXMgYmVlbiBxdWV1ZWQgdG8gcGxheSB3aXRoIGBjaGFuZ2VTb3VyY2VgIHRoZW4gdGhpcyBtZXRob2QganVzdCByZXR1cm5zLlxyXG4gICAgICogXHJcbiAgICAgKiBWaWRlb3MgY2FuIG9ubHkgYXV0b3BsYXkgaWYgdGhlIGJyb3dzZXIgaGFzIGJlZW4gdW5sb2NrZWQuIFRoaXMgaGFwcGVucyBpZiB5b3UgaGF2ZSBpbnRlcmFjdGVkIHdpdGggdGhlIGJyb3dzZXIsIGkuZS5cclxuICAgICAqIGJ5IGNsaWNraW5nIG9uIGl0IG9yIHByZXNzaW5nIGEga2V5LCBvciBkdWUgdG8gc2VydmVyIHNldHRpbmdzLiBUaGUgcG9saWNpZXMgdGhhdCBjb250cm9sIGF1dG9wbGF5aW5nIGFyZSB2YXN0IGFuZFxyXG4gICAgICogdmFyeSBiZXR3ZWVuIGJyb3dzZXIuIFlvdSBjYW4gcmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01lZGlhL0F1dG9wbGF5X2d1aWRlXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdXIgdmlkZW8gZG9lc24ndCBjb250YWluIGFueSBhdWRpbywgdGhlbiBzZXQgdGhlIGBub0F1ZGlvYCBwYXJhbWV0ZXIgdG8gYHRydWVgIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCxcclxuICAgICAqIGFuZCBpdCB3aWxsIG9mdGVuIGFsbG93IHRoZSB2aWRlbyB0byBwbGF5IGltbWVkaWF0ZWx5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBwcmVsb2FkICgpIHtcclxuICAgICAqICAgdGhpcy5sb2FkLnZpZGVvKCdwaXhhcicsICduZW1vLm1wNCcsICdsb2FkZWRkYXRhJywgZmFsc2UsIHRydWUpO1xyXG4gICAgICogfVxyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSA1dGggcGFyYW1ldGVyIGluIHRoZSBsb2FkIGNhbGwgdGVsbHMgUGhhc2VyIHRoYXQgdGhlIHZpZGVvIGRvZXNuJ3QgY29udGFpbiBhbnkgYXVkaW8gdHJhY2tzLiBWaWRlbyB3aXRob3V0XHJcbiAgICAgKiBhdWRpbyBjYW4gYXV0b3BsYXkgd2l0aG91dCByZXF1aXJpbmcgYSB1c2VyIGludGVyYWN0aW9uLiBWaWRlbyB3aXRoIGF1ZGlvIGNhbm5vdCBkbyB0aGlzIHVubGVzcyBpdCBzYXRpc2ZpZXNcclxuICAgICAqIHRoZSBicm93c2VycyBNRUkgc2V0dGluZ3MuIFNlZSB0aGUgTUROIEF1dG9wbGF5IEd1aWRlIGZvciBkZXRhaWxzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgbmVlZCBhdWRpbyBpbiB5b3VyIHZpZGVvcywgdGhlbiB5b3UnbGwgaGF2ZSB0byBjb25zaWRlciB0aGUgZmFjdCB0aGF0IHRoZSB2aWRlbyBjYW5ub3Qgc3RhcnQgcGxheWluZyB1bnRpbCB0aGVcclxuICAgICAqIHVzZXIgaGFzIGludGVyYWN0ZWQgd2l0aCB0aGUgYnJvd3NlciwgaW50byB5b3VyIGdhbWUgZmxvdy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvb3A9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2aWRlbyBsb29wIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQ/IFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBicm93c2VycyBzdXBwb3J0IF9zZWFtbGVzc18gdmlkZW8gbG9vcGluZyBmb3IgYWxsIGVuY29kaW5nIGZvcm1hdHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttYXJrZXJJbl0gLSBPcHRpb25hbCBpbiBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWFya2VyT3V0XSAtIE9wdGlvbmFsIG91dCBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChsb29wLCBtYXJrZXJJbiwgbWFya2VyT3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICgodGhpcy50b3VjaExvY2tlZCAmJiB0aGlzLnBsYXlXaGVuVW5sb2NrZWQpIHx8IHRoaXMuaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICghdmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1ZpZGVvIG5vdCBsb2FkZWQnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxvb3AgPT09IHVuZGVmaW5lZCkgeyBsb29wID0gdmlkZW8ubG9vcDsgfVxyXG5cclxuICAgICAgICB2YXIgc291bmQgPSB0aGlzLnNjZW5lLnN5cy5zb3VuZDtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoc291bmQgJiYgc291bmQubXV0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdXRlIHdpbGwgYmUgc2V0IGJhc2VkIG9uIHRoZSBnbG9iYWwgbXV0ZSBzdGF0ZSBvZiB0aGUgU291bmQgTWFuYWdlciAoaWYgdGhlcmUgaXMgb25lKVxyXG4gICAgICAgICAgICB0aGlzLnNldE11dGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlckluKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtlckluID0gbWFya2VySW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlck91dCkgJiYgbWFya2VyT3V0ID4gbWFya2VySW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9tYXJrZXJPdXQgPSBtYXJrZXJPdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5sb29wID0gbG9vcDtcclxuXHJcbiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcclxuXHJcbiAgICAgICAgdmFyIHBsYXlQcm9taXNlID0gdmlkZW8ucGxheSgpO1xyXG5cclxuICAgICAgICBpZiAocGxheVByb21pc2UgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBsYXlQcm9taXNlLnRoZW4odGhpcy5wbGF5UHJvbWlzZVN1Y2Nlc3NIYW5kbGVyLmJpbmQodGhpcykpLmNhdGNoKHRoaXMucGxheVByb21pc2VFcnJvckhhbmRsZXIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBPbGQtc2Nob29sIGJyb3dzZXJzIHdpdGggbm8gUHJvbWlzZXNcclxuICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGNhbGxiYWNrcy5wbGF5LCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBJZiB2aWRlbyBoYXNuJ3QgZG93bmxvYWRlZCBwcm9wZXJseSB5ZXQgLi4uXHJcbiAgICAgICAgICAgIGlmICh2aWRlby5yZWFkeVN0YXRlIDwgMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeSA9IHRoaXMucmV0cnlMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXRyeUlEID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5jaGVja1ZpZGVvUHJvZ3Jlc3MuYmluZCh0aGlzKSwgdGhpcy5yZXRyeUludGVydmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNldCB0aGVzZSBfYWZ0ZXJfIGNhbGxpbmcgYHBsYXlgIG9yIHRoZXkgZG9uJ3QgZmlyZSAodXNlZnVsLCB0aGFua3MgYnJvd3NlcnMpXHJcbiAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBjYWxsYmFja3MuZW5kLCB0cnVlKTtcclxuICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgY2FsbGJhY2tzLnRpbWUsIHRydWUpO1xyXG4gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3NlZWtpbmcnLCBjYWxsYmFja3Muc2Vla2luZywgdHJ1ZSk7XHJcbiAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgY2FsbGJhY2tzLnNlZWtlZCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmlkZW8gZWxlbWVudC4gSXQgd29ya3MgYnkgZmlyc3Qgc3RvcHBpbmcgdGhlXHJcbiAgICAgKiBjdXJyZW50IHZpZGVvLCBpZiBwbGF5aW5nLiBUaGVuIGRlbGV0aW5nIHRoZSB2aWRlbyB0ZXh0dXJlLCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZC4gRmluYWxseSwgaXQgbWFrZXMgYVxyXG4gICAgICogbmV3IHZpZGVvIHRleHR1cmUgYW5kIHN0YXJ0cyBwbGF5YmFjayBvZiB0aGUgbmV3IHNvdXJjZSB0aHJvdWdoIHRoZSBleGlzdGluZyB2aWRlbyBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVhc29uIHlvdSBtYXkgd2lzaCB0byBkbyB0aGlzIGlzIGJlY2F1c2UgdmlkZW9zIHRoYXQgcmVxdWlyZSBpbnRlcmFjdGlvbiB0byB1bmxvY2ssIHJlbWFpbiBpbiBhbiB1bmxvY2tlZFxyXG4gICAgICogc3RhdGUsIGV2ZW4gaWYgeW91IGNoYW5nZSB0aGUgc291cmNlIG9mIHRoZSB2aWRlby4gQnkgY2hhbmdpbmcgdGhlIHNvdXJjZSB0byBhIG5ldyB2aWRlbyB5b3UgYXZvaWQgaGF2aW5nIHRvXHJcbiAgICAgKiBnbyB0aHJvdWdoIHRoZSB1bmxvY2sgcHJvY2VzcyBhZ2Fpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNjaGFuZ2VTb3VyY2VcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFZpZGVvIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCBzd2FwIHRvIHBsYXlpbmcsIGFzIHN0b3JlZCBpbiB0aGUgVmlkZW8gQ2FjaGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvcGxheT10cnVlXSAtIFNob3VsZCB0aGUgdmlkZW8gc3RhcnQgcGxheWluZyBpbW1lZGlhdGVseSwgb25jZSB0aGUgc3dhcCBpcyBjb21wbGV0ZT9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvb3A9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2aWRlbyBsb29wIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQ/IFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBicm93c2VycyBzdXBwb3J0IF9zZWFtbGVzc18gdmlkZW8gbG9vcGluZyBmb3IgYWxsIGVuY29kaW5nIGZvcm1hdHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttYXJrZXJJbl0gLSBPcHRpb25hbCBpbiBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWFya2VyT3V0XSAtIE9wdGlvbmFsIG91dCBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZVNvdXJjZTogZnVuY3Rpb24gKGtleSwgYXV0b3BsYXksIGxvb3AsIG1hcmtlckluLCBtYXJrZXJPdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGF1dG9wbGF5ID09PSB1bmRlZmluZWQpIHsgYXV0b3BsYXkgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmV3VmlkZW8gPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS52aWRlby5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlbyA9IG5ld1ZpZGVvO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jb2RlUGF1c2VkID0gbmV3VmlkZW8ucGF1c2VkO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlTXV0ZWQgPSBuZXdWaWRlby5tdXRlZDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMucmVtb3ZlKHRoaXMuX2tleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmUgPSB0aGlzLnNjZW5lLnN5cy50ZXh0dXJlcy5jcmVhdGUodGhpcy5fa2V5LCBuZXdWaWRlbywgbmV3VmlkZW8udmlkZW9XaWR0aCwgbmV3VmlkZW8udmlkZW9IZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmVTb3VyY2UgPSB0aGlzLnZpZGVvVGV4dHVyZS5zb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvVGV4dHVyZS5hZGQoJ19fQkFTRScsIDAsIDAsIDAsIG5ld1ZpZGVvLnZpZGVvV2lkdGgsIG5ld1ZpZGVvLnZpZGVvSGVpZ2h0KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGV4dHVyZSh0aGlzLnZpZGVvVGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0NSRUFURUQsIHRoaXMsIG5ld1ZpZGVvLnZpZGVvV2lkdGgsIG5ld1ZpZGVvLnZpZGVvSGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZXdWaWRlby5jdXJyZW50VGltZSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChhdXRvcGxheSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5KGxvb3AsIG1hcmtlckluLCBtYXJrZXJPdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHNlcXVlbmNlIG1hcmtlciB0byB0aGlzIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBNYXJrZXJzIGFsbG93IHlvdSB0byBzcGxpdCBhIHZpZGVvIHVwIGludG8gc2VxdWVuY2VzLCBkZWxpbmVhdGVkIGJ5IGEgc3RhcnQgYW5kIGVuZCB0aW1lLCBnaXZlbiBpbiBzZWNvbmRzLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHRoZW4gcGxheSBiYWNrIHNwZWNpZmljIG1hcmtlcnMgdmlhIHRoZSBgcGxheU1hcmtlcmAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgbWFya2VyIHRpbWluZyBpcyBfbm90XyBmcmFtZS1wZXJmZWN0LiBZb3Ugc2hvdWxkIGNvbnN0cnVjdCB5b3VyIHZpZGVvcyBpbiBzdWNoIGEgd2F5IHRoYXQgeW91IGFsbG93IGZvclxyXG4gICAgICogcGxlbnR5IG9mIGV4dHJhIHBhZGRpbmcgYmVmb3JlIGFuZCBhZnRlciBlYWNoIHNlcXVlbmNlIHRvIGFsbG93IGZvciBkaXNjcmVwYW5jaWVzIGluIGJyb3dzZXIgc2VlayBhbmQgY3VycmVudFRpbWUgYWNjdXJhY3kuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL21lZGlhLWFuZC1lbnRlcnRhaW5tZW50L2lzc3Vlcy80IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhpcyBpc3N1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNhZGRNYXJrZXJcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGlzIG1hcmtlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWFya2VySW4gLSBUaGUgdGltZSwgaW4gc2Vjb25kcywgcmVwcmVzZW50aW5nIHRoZSBzdGFydCBvZiB0aGlzIG1hcmtlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWFya2VyT3V0IC0gVGhlIHRpbWUsIGluIHNlY29uZHMsIHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIHRoaXMgbWFya2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGFkZE1hcmtlcjogZnVuY3Rpb24gKGtleSwgbWFya2VySW4sIG1hcmtlck91dClcclxuICAgIHtcclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlckluKSAmJiBtYXJrZXJJbiA+PSAwICYmICFpc05hTihtYXJrZXJPdXQpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXJrZXJzW2tleV0gPSBbIG1hcmtlckluLCBtYXJrZXJPdXQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXlzIGEgcHJlLWRlZmluZWQgc2VxdWVuY2UgaW4gdGhpcyB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogTWFya2VycyBhbGxvdyB5b3UgdG8gc3BsaXQgYSB2aWRlbyB1cCBpbnRvIHNlcXVlbmNlcywgZGVsaW5lYXRlZCBieSBhIHN0YXJ0IGFuZCBlbmQgdGltZSwgZ2l2ZW4gaW4gc2Vjb25kcyBhbmRcclxuICAgICAqIHNwZWNpZmllZCB2aWEgdGhlIGBhZGRNYXJrZXJgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IG1hcmtlciB0aW1pbmcgaXMgX25vdF8gZnJhbWUtcGVyZmVjdC4gWW91IHNob3VsZCBjb25zdHJ1Y3QgeW91ciB2aWRlb3MgaW4gc3VjaCBhIHdheSB0aGF0IHlvdSBhbGxvdyBmb3JcclxuICAgICAqIHBsZW50eSBvZiBleHRyYSBwYWRkaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBzZXF1ZW5jZSB0byBhbGxvdyBmb3IgZGlzY3JlcGFuY2llcyBpbiBicm93c2VyIHNlZWsgYW5kIGN1cnJlbnRUaW1lIGFjY3VyYWN5LlxyXG4gICAgICogXHJcbiAgICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3czYy9tZWRpYS1hbmQtZW50ZXJ0YWlubWVudC9pc3N1ZXMvNCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMgaXNzdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcGxheU1hcmtlclxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIG1hcmtlciBzZXF1ZW5jZSB0byBwbGF5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbG9vcD1mYWxzZV0gLSBTaG91bGQgdGhlIHZpZGVvIGxvb3AgYXV0b21hdGljYWxseSB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZD8gUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgX3NlYW1sZXNzXyB2aWRlbyBsb29waW5nIGZvciBhbGwgZW5jb2RpbmcgZm9ybWF0cy5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBwbGF5TWFya2VyOiBmdW5jdGlvbiAoa2V5LCBsb29wKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKG1hcmtlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheShsb29wLCBtYXJrZXJbMF0sIG1hcmtlclsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSBzZXQgbWFya2VyIGZyb20gdGhpcyB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIG1hcmtlciBpcyBjdXJyZW50bHkgcGxheWluZyBpdCB3aWxsIF9ub3RfIHN0b3AgcGxheWJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcmVtb3ZlTWFya2VyXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgbWFya2VyIHRvIHJlbW92ZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVNYXJrZXI6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMubWFya2Vyc1trZXldO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIHRoZSB2aWRlbyBhbmQgcmVuZGVycyBpdCB0byBhIENhbnZhc1RleHR1cmUgb2JqZWN0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4gWW91IGNhbiBvcHRpb25hbGx5IHJlc2l6ZSB0aGUgZ3JhYiBieSBwYXNzaW5nIGEgd2lkdGggYW5kIGhlaWdodC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYFZpZGVvLnNuYXBzaG90VGV4dHVyZWAgb2JqZWN0LiBDYWxsaW5nIHRoaXMgbWV0aG9kXHJcbiAgICAgKiBtdWx0aXBsZSB0aW1lcyB3aWxsIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgc25hcHNob3Qgd2l0aCB0aGUgbW9zdCByZWNlbnQgb25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NuYXBzaG90XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgcmVzdWx0aW5nIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBcclxuICAgICAqL1xyXG4gICAgc25hcHNob3Q6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gdGhpcy53aWR0aDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB0aGlzLmhlaWdodDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdEFyZWEoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIHNwZWNpZmllZCBhcmVhIG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIHRoZSB2aWRlbyBhbmQgcmVuZGVycyBpdCB0byBhIENhbnZhc1RleHR1cmUgb2JqZWN0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4gWW91IGNhbiBvcHRpb25hbGx5IHJlc2l6ZSB0aGUgZ3JhYiBieSBwYXNzaW5nIGEgZGlmZmVyZW50IGBkZXN0V2lkdGhgIGFuZCBgZGVzdEhlaWdodGAuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBWaWRlby5zbmFwc2hvdFRleHR1cmVgIG9iamVjdC4gQ2FsbGluZyB0aGlzIG1ldGhvZFxyXG4gICAgICogbXVsdGlwbGUgdGltZXMgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHNuYXBzaG90IHdpdGggdGhlIG1vc3QgcmVjZW50IG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzbmFwc2hvdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIGxvY2F0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIGxvY2F0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzcmNXaWR0aF0gLSBUaGUgd2lkdGggb2YgYXJlYSB0byBncmFiIGZyb20gdGhlIHZpZGVvLiBJZiBub3QgZ2l2ZW4gaXQgd2lsbCBncmFiIHRoZSBmdWxsIHZpZGVvIGRpbWVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzcmNIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiBhcmVhIHRvIGdyYWIgZnJvbSB0aGUgdmlkZW8uIElmIG5vdCBnaXZlbiBpdCB3aWxsIGdyYWIgdGhlIGZ1bGwgdmlkZW8gZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2Rlc3RXaWR0aF0gLSBUaGUgZGVzdGluYXRpb24gd2lkdGggb2YgdGhlIGdyYWIsIGFsbG93aW5nIHlvdSB0byByZXNpemUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkZXN0SGVpZ2h0XSAtIFRoZSBkZXN0aW5hdGlvbiBoZWlnaHQgb2YgdGhlIGdyYWIsIGFsbG93aW5nIHlvdSB0byByZXNpemUgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBcclxuICAgICAqL1xyXG4gICAgc25hcHNob3RBcmVhOiBmdW5jdGlvbiAoeCwgeSwgc3JjV2lkdGgsIHNyY0hlaWdodCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHNyY1dpZHRoID09PSB1bmRlZmluZWQpIHsgc3JjV2lkdGggPSB0aGlzLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKHNyY0hlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNyY0hlaWdodCA9IHRoaXMuaGVpZ2h0OyB9XHJcbiAgICAgICAgaWYgKGRlc3RXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IGRlc3RXaWR0aCA9IHNyY1dpZHRoOyB9XHJcbiAgICAgICAgaWYgKGRlc3RIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBkZXN0SGVpZ2h0ID0gc3JjSGVpZ2h0OyB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcbiAgICAgICAgdmFyIHNuYXAgPSB0aGlzLnNuYXBzaG90VGV4dHVyZTtcclxuXHJcbiAgICAgICAgaWYgKCFzbmFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc25hcCA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhVVUlEKCksIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90VGV4dHVyZSA9IHNuYXA7XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNuYXAuY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIHgsIHksIHNyY1dpZHRoLCBzcmNIZWlnaHQsIDAsIDAsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc25hcC5zZXRTaXplKGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNuYXAuY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIHgsIHksIHNyY1dpZHRoLCBzcmNIZWlnaHQsIDAsIDAsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzbmFwLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIGNvcHkgb2YgdGhpcyBWaWRlb3MgYHNuYXBzaG90VGV4dHVyZWAgaW4gdGhlIFRleHR1cmUgTWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHRleHR1cmUgaXMgY3JlYXRlZCB3aGVuIHRoZSBgc25hcHNob3RgIG9yIGBzbmFwc2hvdEFyZWFgIG1ldGhvZHMgYXJlIGNhbGxlZC5cclxuICAgICAqIFxyXG4gICAgICogQWZ0ZXIgZG9pbmcgdGhpcywgYW55IHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3QsIHN1Y2ggYXMgYSBTcHJpdGUsIGNhbiB1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZVxyXG4gICAgICogc25hcHNob3QgYnkgdXNpbmcgdGhlIHRleHR1cmUga2V5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgdmlkID0gdGhpcy5hZGQudmlkZW8oMCwgMCwgJ2ludHJvJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5zbmFwc2hvdCgpO1xyXG4gICAgICogXHJcbiAgICAgKiB2aWQuc2F2ZVNuYXBzaG90VGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVXBkYXRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBgc25hcHNob3RUZXh0dXJlYCwgZm9yIGV4YW1wbGUgYnkgY2FsbGluZyBgc25hcHNob3RgIGFnYWluLFxyXG4gICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBfYW55XyBHYW1lIE9iamVjdCB0aGF0IGlzIHVzaW5nIGl0IGFzIGEgdGV4dHVyZS5cclxuICAgICAqIENhbGxpbmcgYHNhdmVTbmFwc2hvdFRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRleHR1cmUsXHJcbiAgICAgKiBpdCB3aWxsIGp1c3QgcmVuYW1lIHRoZSBleGlzdGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBjcmVhdGUgYSBzaW5nbGUgYmFzZSB0ZXh0dXJlLiBZb3UgY2FuIGFkZCBmcmFtZXMgdG8gdGhlIHRleHR1cmVcclxuICAgICAqIGJ5IHVzaW5nIHRoZSBgVGV4dHVyZS5hZGRgIG1ldGhvZC4gQWZ0ZXIgZG9pbmcgdGhpcywgeW91IGNhbiB0aGVuIGFsbG93IEdhbWUgT2JqZWN0c1xyXG4gICAgICogdG8gdXNlIGEgc3BlY2lmaWMgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2F2ZVNuYXBzaG90VGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSB0byBzdG9yZSB0aGUgdGV4dHVyZSBhcyB3aXRoaW4gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIHNhdmVkLlxyXG4gICAgICovXHJcbiAgICBzYXZlU25hcHNob3RUZXh0dXJlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90VGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbmFtZVRleHR1cmUodGhpcy5zbmFwc2hvdFRleHR1cmUua2V5LCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90VGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhrZXksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90VGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyBhIFZpZGVvIGZyb20gdGhlIGdpdmVuIFVSTCwgcmVhZHkgZm9yIHBsYXliYWNrIHdpdGggdGhlIGBWaWRlby5wbGF5YCBtZXRob2QuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gY29udHJvbCBhdCB3aGF0IHBvaW50IHRoZSBicm93c2VyIGRldGVybWluZXMgdGhlIHZpZGVvIGFzIGJlaW5nIHJlYWR5IGZvciBwbGF5YmFjayB2aWFcclxuICAgICAqIHRoZSBgbG9hZEV2ZW50YCBwYXJhbWV0ZXIuIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudFxyXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNsb2FkVVJMXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIG9mIHRoZSB2aWRlbyB0byBsb2FkIG9yIGJlIHN0cmVhbWVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsb2FkRXZlbnQ9J2xvYWRlZGRhdGEnXSAtIFRoZSBsb2FkIGV2ZW50IHRvIGxpc3RlbiBmb3IuIEVpdGhlciBgbG9hZGVkZGF0YWAsIGBjYW5wbGF5YCBvciBgY2FucGxheXRocm91Z2hgLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbm9BdWRpbz1mYWxzZV0gLSBEb2VzIHRoZSB2aWRlbyBoYXZlIGFuIGF1ZGlvIHRyYWNrPyBJZiBub3QgeW91IGNhbiBlbmFibGUgYXV0by1wbGF5aW5nIG9uIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGxvYWRVUkw6IGZ1bmN0aW9uICh1cmwsIGxvYWRFdmVudCwgbm9BdWRpbylcclxuICAgIHtcclxuICAgICAgICBpZiAobG9hZEV2ZW50ID09PSB1bmRlZmluZWQpIHsgbG9hZEV2ZW50ID0gJ2xvYWRlZGRhdGEnOyB9XHJcbiAgICAgICAgaWYgKG5vQXVkaW8gPT09IHVuZGVmaW5lZCkgeyBub0F1ZGlvID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbW92ZSh0aGlzLl9rZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgIFxyXG4gICAgICAgIHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChub0F1ZGlvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2aWRlby5kZWZhdWx0TXV0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdhdXRvcGxheScsICdhdXRvcGxheScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICdwbGF5c2lubGluZScpO1xyXG4gICAgICAgIHZpZGVvLnNldEF0dHJpYnV0ZSgncHJlbG9hZCcsICdhdXRvJyk7XHJcblxyXG4gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fY2FsbGJhY2tzLmVycm9yLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmlkZW8uc3JjID0gdXJsO1xyXG5cclxuICAgICAgICB2aWRlby5sb2FkKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlkZW8gPSB2aWRlbztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBsYXliYWNrIFByb21pc2UgcmVzb2x2ZXMgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3BsYXlQcm9taXNlU3VjY2Vzc0hhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1BMQVlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKi9cclxuICAgIHBsYXlQcm9taXNlU3VjY2Vzc0hhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1BMQVksIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbWFya2VySW4gPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8uY3VycmVudFRpbWUgPSB0aGlzLl9tYXJrZXJJbjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBsYXliYWNrIFByb21pc2UgZmFpbHMgdG8gcmVzb2x2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5UHJvbWlzZUVycm9ySGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fRVJST1JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBlcnJvciAtIFRoZSBQcm9taXNlIHJlc29sdXRpb24gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIHBsYXlQcm9taXNlRXJyb3JIYW5kbGVyOiBmdW5jdGlvbiAoZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuaW5wdXQub25jZSgncG9pbnRlcmRvd24nLCB0aGlzLnVubG9ja0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRvdWNoTG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBsYXlXaGVuVW5sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0VSUk9SLCB0aGlzLCBlcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZGVvIGVtaXRzIGEgYHBsYXlpbmdgIGV2ZW50IGR1cmluZyBsb2FkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgbGlzdGVuZWQgZm9yIGlmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBQcm9taXNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5SGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fUExBWVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBwbGF5SGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRvdWNoTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fUExBWSwgdGhpcyk7XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9jYWxsYmFja3MucGxheSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHZpZGVvIGZhaWxzIHRvIGxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jbG9hZEVycm9ySGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fRVJST1JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIGVycm9yIEV2ZW50LlxyXG4gICAgICovXHJcbiAgICBsb2FkRXJyb3JIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fRVJST1IsIHRoaXMsIGV2ZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludGVybmFsIG1ldGhvZCBpcyBjYWxsZWQgaWYgdGhlIHZpZGVvIGNvdWxkbid0IGJlIHBsYXllZCBiZWNhdXNlIGl0IHdhcyBpbnRlcmFjdGlvbiBsb2NrZWRcclxuICAgICAqIGJ5IHRoZSBicm93c2VyLCBidXQgYW4gaW5wdXQgZXZlbnQgaGFzIHNpbmNlIGJlZW4gcmVjZWl2ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdW5sb2NrSGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fVU5MT0NLRURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1BMQVlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBlcnJvciAtIFRoZSBQcm9taXNlIHJlc29sdXRpb24gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIHVubG9ja0hhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGxheVdoZW5VbmxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1VOTE9DS0VELCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21hcmtlckluID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLmN1cnJlbnRUaW1lID0gdGhpcy5fbWFya2VySW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19QTEFZLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlkZW8gY29tcGxldGVzIHBsYXliYWNrLCBpLmUuIHJlYWNoZXMgYW4gYGVuZGVkYCBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBpZiB0aGUgdmlkZW8gaXMgY29taW5nIGZyb20gYSBsaXZlIHN0cmVhbSwgd2hlcmUgdGhlIGR1cmF0aW9uIGlzIGBJbmZpbml0eWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jY29tcGxldGVIYW5kbGVyXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBjb21wbGV0ZUhhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19DT01QTEVURSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZGVvIGVtaXRzIGEgYHRpbWVVcGRhdGVgIGV2ZW50IGR1cmluZyBwbGF5YmFjay5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBldmVudCBpcyB0b28gc2xvdyBhbmQgaXJyZWd1bGFyIHRvIGJlIHVzZWQgZm9yIGFjdHVhbCB2aWRlbyB0aW1pbmcgb3IgdGV4dHVyZSB1cGRhdGluZyxcclxuICAgICAqIGJ1dCB3ZSBjYW4gdXNlIGl0IHRvIGRldGVybWluZSBpZiBhIHZpZGVvIGhhcyBsb29wZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdGltZVVwZGF0ZUhhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgdGltZVVwZGF0ZUhhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8gJiYgdGhpcy52aWRlby5jdXJyZW50VGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0xPT1AsIHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwcmVVcGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSB2aWRlby5jdXJyZW50VGltZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBEb24ndCByZW5kZXIgYSBuZXcgZnJhbWUgdW5sZXNzIHRoZSB2aWRlbyBoYXMgYWN0dWFsbHkgY2hhbmdlZCB0aW1lXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAhPT0gdGhpcy5fbGFzdFVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGN1cnJlbnRUaW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+PSB0aGlzLl9tYXJrZXJPdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvLmxvb3ApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IHRoaXMuX21hcmtlckluO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gY3VycmVudFRpbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0xPT1AsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0NPTVBMRVRFLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjYWxsYmFjayB0aGF0IG1vbml0b3JzIHRoZSBkb3dubG9hZCBwcm9ncmVzcyBvZiBhIHZpZGVvIGFmdGVyIGNoYW5naW5nIGl0cyBzb3VyY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jY2hlY2tWaWRlb1Byb2dyZXNzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19USU1FT1VUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBjaGVja1ZpZGVvUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA+PSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlJ3ZlIGdvdCBlbm91Z2ggZGF0YSB0byB1cGRhdGUgdGhlIHRleHR1cmUgZm9yIHBsYXliYWNrXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJldHJ5LS07XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXRyeSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JldHJ5SUQgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmNoZWNrVmlkZW9Qcm9ncmVzcy5iaW5kKHRoaXMpLCB0aGlzLnJldHJ5SW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19USU1FT1VULCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBlbm91Z2ggdmlkZW8gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBpbiBvcmRlciB0byBjcmVhdGUgYSB0ZXh0dXJlXHJcbiAgICAgKiBmcm9tIGl0LiBUaGUgdGV4dHVyZSBpcyBhc3NpZ25lZCB0byB0aGUgYFZpZGVvLnZpZGVvVGV4dHVyZWAgcHJvcGVydHkgYW5kIGdpdmVuIGEgYmFzZSBmcmFtZSB0aGF0XHJcbiAgICAgKiBlbmNvbXBhc2VzIHRoZSB3aG9sZSB2aWRlbyBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3VwZGF0ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlVGV4dHVyZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB2aWRlby52aWRlb1dpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9UZXh0dXJlID0gdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMuY3JlYXRlKHRoaXMuX2tleSwgdmlkZW8sIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvVGV4dHVyZVNvdXJjZSA9IHRoaXMudmlkZW9UZXh0dXJlLnNvdXJjZVswXTtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmUuYWRkKCdfX0JBU0UnLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUodGhpcy52aWRlb1RleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fQ1JFQVRFRCwgdGhpcywgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy52aWRlb1RleHR1cmVTb3VyY2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVNvdXJjZS5zb3VyY2UgIT09IHZpZGVvKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlU291cmNlLnNvdXJjZSA9IHZpZGVvO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVNvdXJjZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVNvdXJjZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRleHR1cmVTb3VyY2UudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGtleSBvZiB0aGUgY3VycmVudGx5IHBsYXllZCB2aWRlbywgYXMgc3RvcmVkIGluIHRoZSBWaWRlbyBDYWNoZS5cclxuICAgICAqIElmIHRoZSB2aWRlbyBkaWQgbm90IGNvbWUgZnJvbSB0aGUgY2FjaGUgdGhpcyB3aWxsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0VmlkZW9LZXlcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUga2V5IG9mIHRoZSB2aWRlbyBiZWluZyBwbGF5ZWQgZnJvbSB0aGUgVmlkZW8gQ2FjaGUsIGlmIGFueS5cclxuICAgICAqL1xyXG4gICAgZ2V0VmlkZW9LZXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlS2V5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlZWtzIHRvIGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHZpZGVvLiBUaGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEsXHJcbiAgICAgKiB3aGVyZSAwIHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIHRoZSB2aWRlbyBhbmQgMSByZXByZXNlbnRzIHRoZSBlbmQuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZWtpbmcgb25seSB3b3JrcyBpZiB0aGUgdmlkZW8gaGFzIGEgZHVyYXRpb24sIHNvIHdpbGwgbm90IHdvcmsgZm9yIGxpdmUgc3RyZWFtcy5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiBzZWVraW5nIGJlZ2lucywgdGhpcyB2aWRlbyB3aWxsIGVtaXQgYSBgc2Vla2luZ2AgZXZlbnQuIFdoZW4gdGhlIHZpZGVvIGNvbXBsZXRlc1xyXG4gICAgICogc2Vla2luZyAoaS5lLiByZWFjaGVzIGl0cyBkZXNpZ25hdGVkIHRpbWVzdGFtcCkgaXQgd2lsbCBlbWl0IGEgYHNlZWtlZGAgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIHNlZWsgYmFzZWQgb24gdGltZSBpbnN0ZWFkLCB1c2UgdGhlIGBWaWRlby5zZXRDdXJyZW50VGltZWAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtUb1xyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgcG9pbnQgaW4gdGhlIHZpZGVvIHRvIHNlZWsgdG8uIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNlZWtUbzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHZpZGVvLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uICE9PSBJbmZpbml0eSAmJiAhaXNOYU4oZHVyYXRpb24pKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2Vla1RpbWUgPSBkdXJhdGlvbiAqIHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWUoc2Vla1RpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBwbGF5YmFjayB0aW1lIGluIHNlY29uZHMuXHJcbiAgICAgKiBJZiB0aGUgbWVkaWEgaGFzIG5vdCBzdGFydGVkIHRvIHBsYXkgYW5kIGhhcyBub3QgYmVlbiBzZWVrZWQsIHRoaXMgdmFsdWUgaXMgdGhlIG1lZGlhJ3MgaW5pdGlhbCBwbGF5YmFjayB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI2dldEN1cnJlbnRUaW1lXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgcGxheWJhY2sgdGltZSBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50VGltZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby5jdXJyZW50VGltZSA6IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Vla3MgdG8gYSBnaXZlbiBwbGF5YmFjayB0aW1lIGluIHRoZSB2aWRlby4gVGhlIHZhbHVlIGlzIGdpdmVuIGluIF9zZWNvbmRzXyBvciBhcyBhIHN0cmluZy5cclxuICAgICAqIFxyXG4gICAgICogU2Vla2luZyBvbmx5IHdvcmtzIGlmIHRoZSB2aWRlbyBoYXMgYSBkdXJhdGlvbiwgc28gd2lsbCBub3Qgd29yayBmb3IgbGl2ZSBzdHJlYW1zLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHNlZWtpbmcgYmVnaW5zLCB0aGlzIHZpZGVvIHdpbGwgZW1pdCBhIGBzZWVraW5nYCBldmVudC4gV2hlbiB0aGUgdmlkZW8gY29tcGxldGVzXHJcbiAgICAgKiBzZWVraW5nIChpLmUuIHJlYWNoZXMgaXRzIGRlc2lnbmF0ZWQgdGltZXN0YW1wKSBpdCB3aWxsIGVtaXQgYSBgc2Vla2VkYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwcm92aWRlIGEgc3RyaW5nIHByZWZpeGVkIHdpdGggZWl0aGVyIGEgYCtgIG9yIGEgYC1gLCBzdWNoIGFzIGArMi41YCBvciBgLTIuNWAuXHJcbiAgICAgKiBJbiB0aGlzIGNhc2UgaXQgd2lsbCBzZWVrIHRvICsvLSB0aGUgdmFsdWUgZ2l2ZW4sIHJlbGF0aXZlIHRvIHRoZSBfY3VycmVudCB0aW1lXy5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gc2VlayBiYXNlZCBvbiBhIGR1cmF0aW9uIHBlcmNlbnRhZ2UgaW5zdGVhZCwgdXNlIHRoZSBgVmlkZW8uc2Vla1RvYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0Q3VycmVudFRpbWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlIC0gVGhlIHBsYXliYWNrIHRpbWUgdG8gc2VlayB0byBpbiBzZWNvbmRzLiBDYW4gYmUgZXhwcmVzc2VkIGFzIGEgc3RyaW5nLCBzdWNoIGFzIGArMmAgdG8gc2VlayAyIHNlY29uZHMgYWhlYWQgZnJvbSB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldEN1cnJlbnRUaW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKHZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcCA9IHZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodmFsdWUuc3Vic3RyKDEpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3AgPT09ICcrJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZpZGVvLmN1cnJlbnRUaW1lICsgbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3AgPT09ICctJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZpZGVvLmN1cnJlbnRUaW1lIC0gbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIFZpZGVvIGlzIGN1cnJlbnRseSBzZWVraW5nLCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jaXNTZWVraW5nXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgVmlkZW8gaXMgY3VycmVudGx5IHNlZWtpbmcsIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgaXNTZWVraW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NlZWtpbmc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgc2Vla2luZyBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtpbmdIYW5kbGVyXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19TRUVLSU5HXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBzZWVraW5nSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1NFRUtJTkcsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHNlZWtlZCBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtlZEhhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtFRFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgc2Vla2VkSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19TRUVLRUQsIHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgdmlkZW8uIFByb2dyZXNzIGlzIGRlZmluZWQgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAgKHRoZSBzdGFydClcclxuICAgICAqIGFuZCAxICh0aGUgZW5kKS5cclxuICAgICAqIFxyXG4gICAgICogUHJvZ3Jlc3MgY2FuIG9ubHkgYmUgcmV0dXJuZWQgaWYgdGhlIHZpZGVvIGhhcyBhIGR1cmF0aW9uLCBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcmV0dXJuIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0UHJvZ3Jlc3NcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiBwbGF5YmFjay4gSWYgdGhlIHZpZGVvIGhhcyBubyBkdXJhdGlvbiwgd2lsbCBhbHdheXMgcmV0dXJuIHplcm8uXHJcbiAgICAgKi9cclxuICAgIGdldFByb2dyZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBub3cgPSB2aWRlby5jdXJyZW50VGltZTtcclxuICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdmlkZW8uZHVyYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5ICYmICFpc05hTihkdXJhdGlvbikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub3cgLyBkdXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIHRoZSBkdXJhdGlvbiAodG90YWwgbGVuZ3RoKSBvZiB0aGUgbWVkaWEgaW4gc2Vjb25kcyxcclxuICAgICAqIG9uIHRoZSBtZWRpYSdzIHRpbWVsaW5lLiBJZiBubyBtZWRpYSBpcyBwcmVzZW50IG9uIHRoZSBlbGVtZW50LCBvciB0aGUgbWVkaWEgaXMgbm90IHZhbGlkLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgTmFOLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgbWVkaWEgaGFzIG5vIGtub3duIGVuZCAoc3VjaCBhcyBmb3IgbGl2ZSBzdHJlYW1zIG9mIHVua25vd24gZHVyYXRpb24sIHdlYiByYWRpbywgbWVkaWEgaW5jb21pbmcgZnJvbSBXZWJSVEMsXHJcbiAgICAgKiBhbmQgc28gZm9ydGgpLCB0aGlzIHZhbHVlIGlzICtJbmZpbml0eS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW5kaWNhdGluZyB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIGluIHNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy52aWRlbykgPyB0aGlzLnZpZGVvLmR1cmF0aW9uIDogMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtdXRlZCBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgdmlkZW8sIGlmIG9uZSBpcyBsb2FkZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0TXV0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIFRoZSBtdXRlIHZhbHVlLiBgdHJ1ZWAgaWYgdGhlIHZpZGVvIHNob3VsZCBiZSBtdXRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVmlkZW8gR2FtZSBPYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy5cclxuICAgICAqL1xyXG4gICAgc2V0TXV0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb2RlTXV0ZWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKHZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSAodGhpcy5fc3lzdGVtTXV0ZWQpID8gdHJ1ZSA6IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIFZpZGVvIGlzIGN1cnJlbnRseSBtdXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNpc011dGVkXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgVmlkZW8gaXMgY3VycmVudGx5IG11dGVkLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIGlzTXV0ZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNdXRlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBnbG9iYWwgbXV0ZSBoYW5kbGVyLiBXaWxsIG11dGUgdGhlIHZpZGVvLCBpZiBwbGF5aW5nLCBpZiB0aGUgZ2xvYmFsIHNvdW5kIHN5c3RlbSBtdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnbG9iYWxNdXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXJ8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIpfSBzb3VuZE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgTWFuYWdlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtdXRlIC0gVGhlIG11dGUgdmFsdWUuIGB0cnVlYCBpZiB0aGUgU291bmQgTWFuYWdlciBpcyBub3cgbXV0ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBnbG9iYWxNdXRlOiBmdW5jdGlvbiAoc291bmRNYW5hZ2VyLCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zeXN0ZW1NdXRlZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9ICh0aGlzLl9jb2RlTXV0ZWQpID8gdHJ1ZSA6IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBnbG9iYWwgcGF1c2UgaGFuZGxlci4gV2lsbCBwYXVzZSB0aGUgdmlkZW8gaWYgdGhlIEdhbWUgaXRzZWxmIHBhdXNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnbG9iYWxQYXVzZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgZ2xvYmFsUGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3lzdGVtUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGdsb2JhbCByZXN1bWUgaGFuZGxlci4gV2lsbCByZXN1bWUgYSBwYXVzZWQgdmlkZW8gaWYgdGhlIEdhbWUgaXRzZWxmIHJlc3VtZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2xvYmFsUmVzdW1lXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBnbG9iYWxSZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3lzdGVtUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvICYmICF0aGlzLl9jb2RlUGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBhdXNlZCBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IGxvYWRlZCB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHZpZGVvIGlzIHBsYXlpbmcsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBgdHJ1ZWAgd2lsbCBwYXVzZSBwbGF5YmFjay5cclxuICAgICAqIElmIHRoZSB2aWRlbyBpcyBwYXVzZWQsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBgZmFsc2VgIHdpbGwgcmVzdW1lIHBsYXliYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyB2aWRlbyBpcyBsb2FkZWQsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzZXRQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgcGF1c2VkIHZhbHVlLiBgdHJ1ZWAgaWYgdGhlIHZpZGVvIHNob3VsZCBiZSBwYXVzZWQsIGBmYWxzZWAgdG8gcmVzdW1lIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldFBhdXNlZDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICB0aGlzLl9jb2RlUGF1c2VkID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2aWRlby5wYXVzZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghdmFsdWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWRlby5wYXVzZWQgJiYgIXRoaXMuX3N5c3RlbVBhdXNlZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBkb3VibGUgaW5kaWNhdGluZyB0aGUgYXVkaW8gdm9sdW1lLCBmcm9tIDAuMCAoc2lsZW50KSB0byAxLjAgKGxvdWRlc3QpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnZXRWb2x1bWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZSBpbmRpY2F0aW5nIHRoZSBhdWRpbyB2b2x1bWUsIGZyb20gMC4wIChzaWxlbnQpIHRvIDEuMCAobG91ZGVzdCkuXHJcbiAgICAgKi9cclxuICAgIGdldFZvbHVtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby52b2x1bWUgOiAxO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2b2x1bWUgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdmFsdWUgZ2l2ZW4gaXMgYSBkb3VibGUgaW5kaWNhdGluZyB0aGUgYXVkaW8gdm9sdW1lLCBmcm9tIDAuMCAoc2lsZW50KSB0byAxLjAgKGxvdWRlc3QpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzZXRWb2x1bWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0xXSAtIEEgZG91YmxlIGluZGljYXRpbmcgdGhlIGF1ZGlvIHZvbHVtZSwgZnJvbSAwLjAgKHNpbGVudCkgdG8gMS4wIChsb3VkZXN0KS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBzZXRWb2x1bWU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnZvbHVtZSA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBkb3VibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIG1lZGlhIGlzIGJlaW5nIHBsYXllZCBiYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnZXRQbGF5YmFja1JhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgaXMgYmVpbmcgcGxheWVkIGJhY2suXHJcbiAgICAgKi9cclxuICAgIGdldFBsYXliYWNrUmF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby5wbGF5YmFja1JhdGUgOiAxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGN1cnJlbnQgdmlkZW8uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB2YWx1ZSBnaXZlbiBpcyBhIGRvdWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgaXMgYmVpbmcgcGxheWVkIGJhY2suXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NldFBsYXliYWNrUmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhdGVdIC0gQSBkb3VibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIG1lZGlhIGlzIGJlaW5nIHBsYXllZCBiYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldFBsYXliYWNrUmF0ZTogZnVuY3Rpb24gKHJhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXliYWNrUmF0ZSA9IHJhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVkaWEgZWxlbWVudCBzaG91bGQgc3RhcnQgb3ZlciB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0TG9vcFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lZGlhIGVsZW1lbnQgd2lsbCBzdGFydCBvdmVyIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRMb29wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy52aWRlbykgPyB0aGlzLnZpZGVvLmxvb3AgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsb29wIHN0YXRlIG9mIHRoZSBjdXJyZW50IHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdmFsdWUgZ2l2ZW4gaXMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBtZWRpYSBlbGVtZW50IHdpbGwgc3RhcnQgb3ZlciB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZC5cclxuICAgICAqIFxyXG4gICAgICogTm90IGFsbCB2aWRlb3MgY2FuIGxvb3AsIGZvciBleGFtcGxlIGxpdmUgc3RyZWFtcy5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgX3NlYW1sZXNzXyB2aWRlbyBsb29waW5nIGZvciBhbGwgZW5jb2RpbmcgZm9ybWF0cy5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0TG9vcFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIEEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVkaWEgZWxlbWVudCB3aWxsIHN0YXJ0IG92ZXIgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVmlkZW8gR2FtZSBPYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy5cclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8ubG9vcCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZpZGVvIGlzIGN1cnJlbnRseSBwbGF5aW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNpc1BsYXlpbmdcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSB2aWRlbyBpcyBwbGF5aW5nLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIGlzUGxheWluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gISh0aGlzLnZpZGVvLnBhdXNlZCB8fCB0aGlzLnZpZGVvLmVuZGVkKSA6IGZhbHNlO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdmlkZW8gaXMgY3VycmVudGx5IHBhdXNlZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jaXNQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSB2aWRlbyBpcyBwYXVzZWQsIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICgodGhpcy52aWRlbyAmJiB0aGlzLnZpZGVvLnBhdXNlZCkgfHwgdGhpcy5fY29kZVBhdXNlZCB8fCB0aGlzLl9zeXN0ZW1QYXVzZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyB0aGlzIFZpZGVvIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgdXNpbmcgdGhlIGdpdmVuIGtleSBhcyBhIGR5bmFtaWMgdGV4dHVyZSxcclxuICAgICAqIHdoaWNoIGFueSB0ZXh0dXJlLWJhc2VkIEdhbWUgT2JqZWN0LCBzdWNoIGFzIGEgU3ByaXRlLCBjYW4gdXNlIGFzIGl0cyB0ZXh0dXJlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgdmlkID0gdGhpcy5hZGQudmlkZW8oMCwgMCwgJ2ludHJvJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5wbGF5KCk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5zYXZlVGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVGhlIHNhdmVkIHRleHR1cmUgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIGFzIHRoZSB2aWRlbyBwbGF5cy4gSWYgeW91IHBhdXNlIHRoaXMgdmlkZW8sXHJcbiAgICAgKiBvciBjaGFuZ2UgaXRzIHNvdXJjZSwgdGhlbiB0aGUgc2F2ZWQgdGV4dHVyZSB1cGRhdGVzIGluc3RhbnRseS5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyBgc2F2ZVRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRleHR1cmUsIGl0IHdpbGwganVzdCByZW5hbWUgdGhlIGV4aXN0aW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogQnkgZGVmYXVsdCBpdCB3aWxsIGNyZWF0ZSBhIHNpbmdsZSBiYXNlIHRleHR1cmUuIFlvdSBjYW4gYWRkIGZyYW1lcyB0byB0aGUgdGV4dHVyZVxyXG4gICAgICogYnkgdXNpbmcgdGhlIGBUZXh0dXJlLmFkZGAgbWV0aG9kLiBBZnRlciBkb2luZyB0aGlzLCB5b3UgY2FuIHRoZW4gYWxsb3cgR2FtZSBPYmplY3RzXHJcbiAgICAgKiB0byB1c2UgYSBzcGVjaWZpYyBmcmFtZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGludGVuZCB0byBzYXZlIHRoZSB0ZXh0dXJlIHNvIHlvdSBjYW4gdXNlIGl0IGFzIHRoZSBpbnB1dCBmb3IgYSBTaGFkZXIsIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlXHJcbiAgICAgKiBgZmxpcFlgIHBhcmFtZXRlciB0byBgdHJ1ZWAgaWYgeW91IGZpbmQgdGhlIHZpZGVvIHJlbmRlcnMgdXBzaWRlIGRvd24gaW4geW91ciBzaGFkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2F2ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gU2hvdWxkIHRoZSBXZWJHTCBUZXh0dXJlIHNldCBgVU5QQUNLX01VTFRJUExZX0ZMSVBfWWAgZHVyaW5nIHVwbG9hZD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgdGhhdCB3YXMgc2F2ZWQuXHJcbiAgICAgKi9cclxuICAgIHNhdmVUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmxpcFkgPT09IHVuZGVmaW5lZCkgeyBmbGlwWSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbmFtZVRleHR1cmUodGhpcy5fa2V5LCBrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG5cclxuICAgICAgICB0aGlzLmZsaXBZID0gZmxpcFk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZVNvdXJjZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9UZXh0dXJlU291cmNlLnNldEZsaXBZKGZsaXBZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgdmlkZW8gcGxheWluZyBhbmQgY2xlYXJzIGFsbCBpbnRlcm5hbCBldmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IG9ubHkgd2lzaCB0byBwYXVzZSBwbGF5YmFjayBvZiB0aGUgdmlkZW8sIGFuZCByZXN1bWUgaXQgYSBsYXRlciB0aW1lLCB1c2UgdGhlIGBWaWRlby5wYXVzZWAgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSB2aWRlbyBoYXNuJ3QgZmluaXNoZWQgZG93bmxvYWRpbmcsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWJvcnQgdGhlIGRvd25sb2FkLiBUbyBkbyB0aGF0IHlvdSBuZWVkIHRvXHJcbiAgICAgKiBjYWxsIGBkZXN0cm95YCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NUT1BcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3M7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBjYWxsYmFjayBpbiBjYWxsYmFja3MpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoY2FsbGJhY2ssIGNhbGxiYWNrc1tjYWxsYmFja10sIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JldHJ5SUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3JldHJ5SUQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19TVE9QLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgVmlkZW8gZWxlbWVudCBmcm9tIHRoZSBET00gYnkgY2FsbGluZyBwYXJlbnROb2RlLnJlbW92ZUNoaWxkIG9uIGl0c2VsZi5cclxuICAgICAqIFxyXG4gICAgICogQWxzbyByZW1vdmVzIHRoZSBhdXRvcGxheSBhbmQgc3JjIGF0dHJpYnV0ZXMgYW5kIG51bGxzIHRoZSBWaWRlbyByZWZlcmVuY2UuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBzaG91bGQgbm90IGNhbGwgdGhpcyBtZXRob2QgaWYgeW91IHdlcmUgcGxheWluZyBhIHZpZGVvIGZyb20gdGhlIFZpZGVvIENhY2hlIHRoYXRcclxuICAgICAqIHlvdSB3aXNoIHRvIHBsYXkgYWdhaW4gaW4geW91ciBnYW1lLCBvciBpZiBhbm90aGVyIFZpZGVvIG9iamVjdCBpcyBhbHNvIHVzaW5nIHRoZSBzYW1lXHJcbiAgICAgKiB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGxvYWRlZCBhbiBleHRlcm5hbCB2aWRlbyB2aWEgYFZpZGVvLmxvYWRVUkxgIHRoZW4geW91IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb25cclxuICAgICAqIHRvIGNsZWFyIHVwIG9uY2UgeW91IGFyZSBkb25lIHdpdGggdGhlIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JlbW92ZVZpZGVvRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICByZW1vdmVWaWRlb0VsZW1lbnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKCF2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aWRlby5wYXJlbnROb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2aWRlbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAodmlkZW8uaGFzQ2hpbGROb2RlcygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ucmVtb3ZlQ2hpbGQodmlkZW8uZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5yZW1vdmVBdHRyaWJ1dGUoJ2F1dG9wbGF5Jyk7XHJcbiAgICAgICAgdmlkZW8ucmVtb3ZlQXR0cmlidXRlKCdzcmMnKTtcclxuXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgcHJlLWRlc3Ryb3kgc3RlcCBmb3IgdGhlIFZpZGVvIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxscyBgVmlkZW8uc3RvcGAgYW5kIG9wdGlvbmFsbHkgYFZpZGVvLnJlbW92ZVZpZGVvRWxlbWVudGAuXHJcbiAgICAgKiBcclxuICAgICAqIElmIGFueSBTcHJpdGVzIGFyZSB1c2luZyB0aGlzIFZpZGVvIGFzIHRoZWlyIHRleHR1cmUgaXQgaXMgdXAgdG8geW91IHRvIG1hbmFnZSB0aG9zZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW1vdmVWaWRlb0VsZW1lbnRPbkRlc3Ryb3kpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVZpZGVvRWxlbWVudCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdhbWUgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLmV2ZW50cztcclxuXHJcbiAgICAgICAgZ2FtZS5vZmYoR2FtZUV2ZW50cy5QQVVTRSwgdGhpcy5nbG9iYWxQYXVzZSwgdGhpcyk7XHJcbiAgICAgICAgZ2FtZS5vZmYoR2FtZUV2ZW50cy5SRVNVTUUsIHRoaXMuZ2xvYmFsUmVzdW1lLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIHNvdW5kID0gdGhpcy5zY2VuZS5zeXMuc291bmQ7XHJcblxyXG4gICAgICAgIGlmIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdW5kLm9mZihTb3VuZEV2ZW50cy5HTE9CQUxfTVVURSwgdGhpcy5nbG9iYWxNdXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZXRyeUlEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9yZXRyeUlEKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlkZW87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/Video.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Video#renderCanvas\r\n * @since 3.20.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Video} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar VideoCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if (src.videoTexture)\r\n    {\r\n        renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n    }\r\n};\r\n\r\nmodule.exports = VideoCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NhbnZhc1JlbmRlcmVyLmpzP2I3NDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcseUJBQXlCO0FBQ3BDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdmlkZW8vVmlkZW9DYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBWaWRlb0NhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKHNyYy52aWRlb1RleHR1cmUpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9DYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/VideoCreator.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/VideoCreator.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Video = __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\");\r\n\r\n/**\r\n * Creates a new Video Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Video Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#video\r\n * @since 3.20.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Video} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('video', function (config, addToScene)\r\n{\r\n    if (config === undefined) { config = {}; }\r\n\r\n    var key = GetAdvancedValue(config, 'key', null);\r\n\r\n    var video = new Video(this.scene, 0, 0, key);\r\n\r\n    if (addToScene !== undefined)\r\n    {\r\n        config.add = addToScene;\r\n    }\r\n\r\n    BuildGameObject(this.scene, video, config);\r\n\r\n    return video;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NyZWF0b3IuanM/ODZlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsWUFBWSxtQkFBTyxDQUFDLHFFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgVmlkZW8gPSByZXF1aXJlKCcuL1ZpZGVvJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBWaWRlbyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVmlkZW8gR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3ZpZGVvXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3ZpZGVvJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHZpZGVvID0gbmV3IFZpZGVvKHRoaXMuc2NlbmUsIDAsIDAsIGtleSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgdmlkZW8sIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0Q3JlYXRvciBjb250ZXh0LlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/VideoFactory.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/VideoFactory.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Video = __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#video\r\n * @since 3.20.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('video', function (x, y, key)\r\n{\r\n    var video = new Video(this.scene, x, y, key);\r\n\r\n    this.displayList.add(video);\r\n    this.updateList.add(video);\r\n\r\n    return video;\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0ZhY3RvcnkuanM/Y2IzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0ZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBWaWRlbyA9IHJlcXVpcmUoJy4vVmlkZW8nKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEltYWdlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSW1hZ2UgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3ZpZGVvXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuSW1hZ2V9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3ZpZGVvJywgZnVuY3Rpb24gKHgsIHksIGtleSlcclxue1xyXG4gICAgdmFyIHZpZGVvID0gbmV3IFZpZGVvKHRoaXMuc2NlbmUsIHgsIHksIGtleSk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQodmlkZW8pO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZCh2aWRlbyk7XHJcblxyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/VideoRender.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/VideoRender.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./VideoWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./VideoCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1JlbmRlci5qcz9jZjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsK0ZBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3ZpZGVvL1ZpZGVvUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vVmlkZW9XZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1ZpZGVvQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Video#renderWebGL\r\n * @since 3.20.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Video} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar VideoWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    if (src.videoTexture)\r\n    {\r\n        this.pipeline.batchSprite(src, camera, parentMatrix);\r\n    }\r\n};\r\n\r\nmodule.exports = VideoWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1dlYkdMUmVuZGVyZXIuanM/ZWM4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1dlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFZpZGVvV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIGlmIChzcmMudmlkZW9UZXh0dXJlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hTcHJpdGUoc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/zone/Zone.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/zone/Zone.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Circle = __webpack_require__(/*! ../../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar CircleContains = __webpack_require__(/*! ../../geom/circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Zone Game Object.\r\n *\r\n * A Zone is a non-rendering rectangular Game Object that has a position and size.\r\n * It has no texture and never displays, but does live on the display list and\r\n * can be moved, scaled and rotated like any other Game Object.\r\n *\r\n * Its primary use is for creating Drop Zones and Input Hit Areas and it has a couple of helper methods\r\n * specifically for this. It is also useful for object overlap checks, or as a base for your own\r\n * non-displaying Game Objects.\r\n\r\n * The default origin is 0.5, the center of the Zone, the same as with Game Objects.\r\n *\r\n * @class Zone\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} [width=1] - The width of the Game Object.\r\n * @param {number} [height=1] - The height of the Game Object.\r\n */\r\nvar Zone = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Depth,\r\n        Components.GetBounds,\r\n        Components.Origin,\r\n        Components.Transform,\r\n        Components.ScrollFactor,\r\n        Components.Visible\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Zone (scene, x, y, width, height)\r\n    {\r\n        if (width === undefined) { width = 1; }\r\n        if (height === undefined) { height = width; }\r\n\r\n        GameObject.call(this, scene, 'Zone');\r\n\r\n        this.setPosition(x, y);\r\n\r\n        /**\r\n         * The native (un-scaled) width of this Game Object.\r\n         *\r\n         * @name Phaser.GameObjects.Zone#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The native (un-scaled) height of this Game Object.\r\n         *\r\n         * @name Phaser.GameObjects.Zone#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n\r\n        /**\r\n         * The Blend Mode of the Game Object.\r\n         * Although a Zone never renders, it still has a blend mode to allow it to fit seamlessly into\r\n         * display lists without causing a batch flush.\r\n         *\r\n         * @name Phaser.GameObjects.Zone#blendMode\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.blendMode = BlendModes.NORMAL;\r\n\r\n        this.updateDisplayOrigin();\r\n    },\r\n\r\n    /**\r\n     * The displayed width of this Game Object.\r\n     * This value takes into account the scale factor.\r\n     *\r\n     * @name Phaser.GameObjects.Zone#displayWidth\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayWidth: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.scaleX * this.width;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleX = value / this.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The displayed height of this Game Object.\r\n     * This value takes into account the scale factor.\r\n     *\r\n     * @name Phaser.GameObjects.Zone#displayHeight\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    displayHeight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.scaleY * this.height;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.scaleY = value / this.height;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the size of this Game Object.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     * @param {boolean} [resizeInput=true] - If this Zone has a Rectangle for a hit area this argument will resize the hit area as well.\r\n     *\r\n     * @return {Phaser.GameObjects.Zone} This Game Object.\r\n     */\r\n    setSize: function (width, height, resizeInput)\r\n    {\r\n        if (resizeInput === undefined) { resizeInput = true; }\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        this.updateDisplayOrigin();\r\n\r\n        var input = this.input;\r\n\r\n        if (resizeInput && input && !input.customHitArea)\r\n        {\r\n            input.hitArea.width = width;\r\n            input.hitArea.height = height;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the display size of this Game Object.\r\n     * Calling this will adjust the scale.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setDisplaySize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of this Game Object.\r\n     * @param {number} height - The height of this Game Object.\r\n     *\r\n     * @return {Phaser.GameObjects.Zone} This Game Object.\r\n     */\r\n    setDisplaySize: function (width, height)\r\n    {\r\n        this.displayWidth = width;\r\n        this.displayHeight = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this Zone to be a Circular Drop Zone.\r\n     * The circle is centered on this Zones `x` and `y` coordinates.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setCircleDropZone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the Circle that will form the Drop Zone.\r\n     *\r\n     * @return {Phaser.GameObjects.Zone} This Game Object.\r\n     */\r\n    setCircleDropZone: function (radius)\r\n    {\r\n        return this.setDropZone(new Circle(0, 0, radius), CircleContains);\r\n    },\r\n\r\n    /**\r\n     * Sets this Zone to be a Rectangle Drop Zone.\r\n     * The rectangle is centered on this Zones `x` and `y` coordinates.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setRectangleDropZone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the rectangle drop zone.\r\n     * @param {number} height - The height of the rectangle drop zone.\r\n     *\r\n     * @return {Phaser.GameObjects.Zone} This Game Object.\r\n     */\r\n    setRectangleDropZone: function (width, height)\r\n    {\r\n        return this.setDropZone(new Rectangle(0, 0, width, height), RectangleContains);\r\n    },\r\n\r\n    /**\r\n     * Allows you to define your own Geometry shape to be used as a Drop Zone.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setDropZone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} shape - A Geometry shape instance, such as Phaser.Geom.Ellipse, or your own custom shape.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} callback - A function that will return `true` if the given x/y coords it is sent are within the shape.\r\n     *\r\n     * @return {Phaser.GameObjects.Zone} This Game Object.\r\n     */\r\n    setDropZone: function (shape, callback)\r\n    {\r\n        if (shape === undefined)\r\n        {\r\n            this.setRectangleDropZone(this.width, this.height);\r\n        }\r\n        else if (!this.input)\r\n        {\r\n            this.setInteractive(shape, callback, true);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * A NOOP method so you can pass a Zone to a Container.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setAlpha\r\n     * @private\r\n     * @since 3.11.0\r\n     */\r\n    setAlpha: function ()\r\n    {\r\n    },\r\n    \r\n    /**\r\n     * A NOOP method so you can pass a Zone to a Container in Canvas.\r\n     * Calling this method will do nothing. It is intentionally empty.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#setBlendMode\r\n     * @private\r\n     * @since 3.16.2\r\n     */\r\n    setBlendMode: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * A Zone does not render.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#renderCanvas\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    renderCanvas: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * A Zone does not render.\r\n     *\r\n     * @method Phaser.GameObjects.Zone#renderWebGL\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    renderWebGL: function ()\r\n    {\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Zone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmUuanM/MTBjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDL0MscUJBQXFCLG1CQUFPLENBQUMscUZBQTRCO0FBQ3pELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELHdCQUF3QixtQkFBTyxDQUFDLDJGQUErQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msb0JBQW9COztBQUU1RDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvem9uZS9ab25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENpcmNsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vY2lyY2xlL0NpcmNsZScpO1xyXG52YXIgQ2lyY2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL2NpcmNsZS9Db250YWlucycpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFJlY3RhbmdsZUNvbnRhaW5zID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9yZWN0YW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgWm9uZSBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBab25lIGlzIGEgbm9uLXJlbmRlcmluZyByZWN0YW5ndWxhciBHYW1lIE9iamVjdCB0aGF0IGhhcyBhIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gKiBJdCBoYXMgbm8gdGV4dHVyZSBhbmQgbmV2ZXIgZGlzcGxheXMsIGJ1dCBkb2VzIGxpdmUgb24gdGhlIGRpc3BsYXkgbGlzdCBhbmRcclxuICogY2FuIGJlIG1vdmVkLCBzY2FsZWQgYW5kIHJvdGF0ZWQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgY3JlYXRpbmcgRHJvcCBab25lcyBhbmQgSW5wdXQgSGl0IEFyZWFzIGFuZCBpdCBoYXMgYSBjb3VwbGUgb2YgaGVscGVyIG1ldGhvZHNcclxuICogc3BlY2lmaWNhbGx5IGZvciB0aGlzLiBJdCBpcyBhbHNvIHVzZWZ1bCBmb3Igb2JqZWN0IG92ZXJsYXAgY2hlY2tzLCBvciBhcyBhIGJhc2UgZm9yIHlvdXIgb3duXHJcbiAqIG5vbi1kaXNwbGF5aW5nIEdhbWUgT2JqZWN0cy5cclxuXHJcbiAqIFRoZSBkZWZhdWx0IG9yaWdpbiBpcyAwLjUsIHRoZSBjZW50ZXIgb2YgdGhlIFpvbmUsIHRoZSBzYW1lIGFzIHdpdGggR2FtZSBPYmplY3RzLlxyXG4gKlxyXG4gKiBAY2xhc3MgWm9uZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIFpvbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGVcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBab25lIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDE7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnWm9uZScpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEJsZW5kIE1vZGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIEFsdGhvdWdoIGEgWm9uZSBuZXZlciByZW5kZXJzLCBpdCBzdGlsbCBoYXMgYSBibGVuZCBtb2RlIHRvIGFsbG93IGl0IHRvIGZpdCBzZWFtbGVzc2x5IGludG9cclxuICAgICAgICAgKiBkaXNwbGF5IGxpc3RzIHdpdGhvdXQgY2F1c2luZyBhIGJhdGNoIGZsdXNoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjYmxlbmRNb2RlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSBCbGVuZE1vZGVzLk5PUk1BTDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhpcyB2YWx1ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNjYWxlIGZhY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNkaXNwbGF5V2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGlzcGxheVdpZHRoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlWCAqIHRoaXMud2lkdGg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWCA9IHZhbHVlIC8gdGhpcy53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ab25lI2Rpc3BsYXlIZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGlzcGxheUhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZVkgKiB0aGlzLmhlaWdodDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVZID0gdmFsdWUgLyB0aGlzLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ab25lI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc2l6ZUlucHV0PXRydWVdIC0gSWYgdGhpcyBab25lIGhhcyBhIFJlY3RhbmdsZSBmb3IgYSBoaXQgYXJlYSB0aGlzIGFyZ3VtZW50IHdpbGwgcmVzaXplIHRoZSBoaXQgYXJlYSBhcyB3ZWxsLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgcmVzaXplSW5wdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlc2l6ZUlucHV0ID09PSB1bmRlZmluZWQpIHsgcmVzaXplSW5wdXQgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XHJcblxyXG4gICAgICAgIGlmIChyZXNpemVJbnB1dCAmJiBpbnB1dCAmJiAhaW5wdXQuY3VzdG9tSGl0QXJlYSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlucHV0LmhpdEFyZWEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIENhbGxpbmcgdGhpcyB3aWxsIGFkanVzdCB0aGUgc2NhbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXREaXNwbGF5U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREaXNwbGF5U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBab25lIHRvIGJlIGEgQ2lyY3VsYXIgRHJvcCBab25lLlxyXG4gICAgICogVGhlIGNpcmNsZSBpcyBjZW50ZXJlZCBvbiB0aGlzIFpvbmVzIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0Q2lyY2xlRHJvcFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBDaXJjbGUgdGhhdCB3aWxsIGZvcm0gdGhlIERyb3AgWm9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuWm9uZX0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2lyY2xlRHJvcFpvbmU6IGZ1bmN0aW9uIChyYWRpdXMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcFpvbmUobmV3IENpcmNsZSgwLCAwLCByYWRpdXMpLCBDaXJjbGVDb250YWlucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGlzIFpvbmUgdG8gYmUgYSBSZWN0YW5nbGUgRHJvcCBab25lLlxyXG4gICAgICogVGhlIHJlY3RhbmdsZSBpcyBjZW50ZXJlZCBvbiB0aGlzIFpvbmVzIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0UmVjdGFuZ2xlRHJvcFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlIGRyb3Agem9uZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUgZHJvcCB6b25lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZWN0YW5nbGVEcm9wWm9uZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcFpvbmUobmV3IFJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgUmVjdGFuZ2xlQ29udGFpbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIEdlb21ldHJ5IHNoYXBlIHRvIGJlIHVzZWQgYXMgYSBEcm9wIFpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXREcm9wWm9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHNoYXBlIC0gQSBHZW9tZXRyeSBzaGFwZSBpbnN0YW5jZSwgc3VjaCBhcyBQaGFzZXIuR2VvbS5FbGxpcHNlLCBvciB5b3VyIG93biBjdXN0b20gc2hhcGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4geC95IGNvb3JkcyBpdCBpcyBzZW50IGFyZSB3aXRoaW4gdGhlIHNoYXBlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcm9wWm9uZTogZnVuY3Rpb24gKHNoYXBlLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hhcGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVjdGFuZ2xlRHJvcFpvbmUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghdGhpcy5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3RpdmUoc2hhcGUsIGNhbGxiYWNrLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgTk9PUCBtZXRob2Qgc28geW91IGNhbiBwYXNzIGEgWm9uZSB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0QWxwaGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhIFpvbmUgdG8gYSBDb250YWluZXIgaW4gQ2FudmFzLlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcuIEl0IGlzIGludGVudGlvbmFsbHkgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4yXHJcbiAgICAgKi9cclxuICAgIHNldEJsZW5kTW9kZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFpvbmUgZG9lcyBub3QgcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjcmVuZGVyQ2FudmFzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFpvbmUgZG9lcyBub3QgcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjcmVuZGVyV2ViR0xcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVuZGVyV2ViR0w6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/Zone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Zone = __webpack_require__(/*! ./Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\n\r\n/**\r\n * Creates a new Zone Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Zone Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#zone\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n *\r\n * @return {Phaser.GameObjects.Zone} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('zone', function (config)\r\n{\r\n    var x = GetAdvancedValue(config, 'x', 0);\r\n    var y = GetAdvancedValue(config, 'y', 0);\r\n    var width = GetAdvancedValue(config, 'width', 1);\r\n    var height = GetAdvancedValue(config, 'height', width);\r\n\r\n    return new Zone(this.scene, x, y, width, height);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVDcmVhdG9yLmpzPzdjOTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsV0FBVyxtQkFBTyxDQUFDLGtFQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvem9uZS9ab25lQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgWm9uZSA9IHJlcXVpcmUoJy4vWm9uZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgWm9uZSBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgWm9uZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijem9uZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd6b25lJywgZnVuY3Rpb24gKGNvbmZpZylcclxue1xyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgMSk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdoZWlnaHQnLCB3aWR0aCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBab25lKHRoaXMuc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0Q3JlYXRvciBjb250ZXh0LlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Zone = __webpack_require__(/*! ./Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Zone Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Zone Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#zone\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} width - The width of the Game Object.\r\n * @param {number} height - The height of the Game Object.\r\n * \r\n * @return {Phaser.GameObjects.Zone} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('zone', function (x, y, width, height)\r\n{\r\n    return this.displayList.add(new Zone(this.scene, x, y, width, height));\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//  \r\n//  There are several properties available to use:\r\n//  \r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVGYWN0b3J5LmpzP2I2YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgWm9uZSA9IHJlcXVpcmUoJy4vWm9uZScpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgWm9uZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFpvbmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3pvbmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuWm9uZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3Rlcignem9uZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFpvbmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vLyAgXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vICBcclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Area.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Area.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the circle.\r\n *\r\n * @function Phaser.Geom.Circle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the area of.\r\n *\r\n * @return {number} The area of the Circle.\r\n */\r\nvar Area = function (circle)\r\n{\r\n    return (circle.radius > 0) ? Math.PI * circle.radius * circle.radius : 0;\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9BcmVhLmpzP2U0NmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9BcmVhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYXJlYSBvZiB0aGUgY2lyY2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkFyZWFcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCB0aGUgYXJlYSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgQ2lyY2xlLlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAoY2lyY2xlKVxyXG57XHJcbiAgICByZXR1cm4gKGNpcmNsZS5yYWRpdXMgPiAwKSA/IE1hdGguUEkgKiBjaXJjbGUucmFkaXVzICogY2lyY2xlLnJhZGl1cyA6IDA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyZWE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Area.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Circle.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Circle.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/circle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/circle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Circle object.\r\n *\r\n * This is a geometry object, containing numerical values and related methods to inspect and modify them.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render a Circle you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Circle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the circle.\r\n * @param {number} [y=0] - The y position of the center of the circle.\r\n * @param {number} [radius=0] - The radius of the circle.\r\n */\r\nvar Circle = new Class({\r\n\r\n    initialize:\r\n\r\n    function Circle (x, y, radius)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (radius === undefined) { radius = 0; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.CIRCLE`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Circle#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.CIRCLE;\r\n\r\n        /**\r\n         * The x position of the center of the circle.\r\n         *\r\n         * @name Phaser.Geom.Circle#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y position of the center of the circle.\r\n         *\r\n         * @name Phaser.Geom.Circle#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The internal radius of the circle.\r\n         *\r\n         * @name Phaser.Geom.Circle#_radius\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._radius = radius;\r\n\r\n        /**\r\n         * The internal diameter of the circle.\r\n         *\r\n         * @name Phaser.Geom.Circle#_diameter\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._diameter = radius * 2;\r\n    },\r\n\r\n    /**\r\n     * Check to see if the Circle contains the given x / y coordinates.\r\n     *\r\n     * @method Phaser.Geom.Circle#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to check within the circle.\r\n     * @param {number} y - The y coordinate to check within the circle.\r\n     *\r\n     * @return {boolean} True if the coordinates are within the circle, otherwise false.\r\n     */\r\n    contains: function (x, y)\r\n    {\r\n        return Contains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * Returns a Point object containing the coordinates of a point on the circumference of the Circle\r\n     * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n     * at 180 degrees around the circle.\r\n     *\r\n     * @method Phaser.Geom.Circle#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [out,$return]\r\n     *\r\n     * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the circle.\r\n     * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the circle.\r\n     */\r\n    getPoint: function (position, point)\r\n    {\r\n        return GetPoint(this, position, point);\r\n    },\r\n\r\n    /**\r\n     * Returns an array of Point objects containing the coordinates of the points around the circumference of the Circle,\r\n     * based on the given quantity or stepRate values.\r\n     *\r\n     * @method Phaser.Geom.Circle#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n     *\r\n     * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n     * @param {number} [stepRate] - Sets the quantity by getting the circumference of the circle and dividing it by the stepRate.\r\n     * @param {(array|Phaser.Geom.Point[])} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n     *\r\n     * @return {(array|Phaser.Geom.Point[])} An array of Point objects pertaining to the points around the circumference of the circle.\r\n     */\r\n    getPoints: function (quantity, stepRate, output)\r\n    {\r\n        return GetPoints(this, quantity, stepRate, output);\r\n    },\r\n\r\n    /**\r\n     * Returns a uniformly distributed random point from anywhere within the Circle.\r\n     *\r\n     * @method Phaser.Geom.Circle#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [point,$return]\r\n     *\r\n     * @param {(Phaser.Geom.Point|object)} [point] - A Point or point-like object to set the random `x` and `y` values in.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n     */\r\n    getRandomPoint: function (point)\r\n    {\r\n        return Random(this, point);\r\n    },\r\n\r\n    /**\r\n     * Sets the x, y and radius of this circle.\r\n     *\r\n     * @method Phaser.Geom.Circle#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The x position of the center of the circle.\r\n     * @param {number} [y=0] - The y position of the center of the circle.\r\n     * @param {number} [radius=0] - The radius of the circle.\r\n     *\r\n     * @return {Phaser.Geom.Circle} This Circle object.\r\n     */\r\n    setTo: function (x, y, radius)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n        this._radius = radius;\r\n        this._diameter = radius * 2;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this Circle to be empty with a radius of zero.\r\n     * Does not change its position.\r\n     *\r\n     * @method Phaser.Geom.Circle#setEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Geom.Circle} This Circle object.\r\n     */\r\n    setEmpty: function ()\r\n    {\r\n        this._radius = 0;\r\n        this._diameter = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the position of this Circle.\r\n     *\r\n     * @method Phaser.Geom.Circle#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The x position of the center of the circle.\r\n     * @param {number} [y=0] - The y position of the center of the circle.\r\n     *\r\n     * @return {Phaser.Geom.Circle} This Circle object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the Circle is empty: has a radius of zero.\r\n     *\r\n     * @method Phaser.Geom.Circle#isEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} True if the Circle is empty, otherwise false.\r\n     */\r\n    isEmpty: function ()\r\n    {\r\n        return (this._radius <= 0);\r\n    },\r\n\r\n    /**\r\n     * The radius of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#radius\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    radius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._radius = value;\r\n            this._diameter = value * 2;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The diameter of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#diameter\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    diameter: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._diameter;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._diameter = value;\r\n            this._radius = value * 0.5;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The left position of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#left\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x - this._radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.x = value + this._radius;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The right position of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#right\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this._radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.x = value - this._radius;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top position of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#top\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y - this._radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.y = value + this._radius;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom position of the Circle.\r\n     *\r\n     * @name Phaser.Geom.Circle#bottom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this._radius;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.y = value - this._radius;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Circle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjbGUuanM/ZGIxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMscUVBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLHFFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxpRUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDaXJjbGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGlzIGEgZ2VvbWV0cnkgb2JqZWN0LCBjb250YWluaW5nIG51bWVyaWNhbCB2YWx1ZXMgYW5kIHJlbGF0ZWQgbWV0aG9kcyB0byBpbnNwZWN0IGFuZCBtb2RpZnkgdGhlbS5cclxuICogSXQgaXMgbm90IGEgR2FtZSBPYmplY3QsIGluIHRoYXQgeW91IGNhbm5vdCBhZGQgaXQgdG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIGl0IGhhcyBubyB0ZXh0dXJlLlxyXG4gKiBUbyByZW5kZXIgYSBDaXJjbGUgeW91IHNob3VsZCBsb29rIGF0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdyYXBoaWNzIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ2lyY2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0wXSAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICovXHJcbnZhciBDaXJjbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ2lyY2xlICh4LCB5LCByYWRpdXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAocmFkaXVzID09PSB1bmRlZmluZWQpIHsgcmFkaXVzID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuQ0lSQ0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkNJUkNMRTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNfcmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JhZGl1cyA9IHJhZGl1cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGRpYW1ldGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjX2RpYW1ldGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RpYW1ldGVyID0gcmFkaXVzICogMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIENpcmNsZSBjb250YWlucyB0aGUgZ2l2ZW4geCAvIHkgY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjY29udGFpbnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgb24gdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIENpcmNsZVxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIGFuZ2xlIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMS4gSS5lLiBhIHZhbHVlIG9mIDAuNSB3aWxsIGdpdmUgdGhlIHBvaW50XHJcbiAgICAgKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkNpcmNsZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGVxdWFscyAwIGRlZ3JlZXMsIDAuNSBlcXVhbHMgMTgwIGRlZ3JlZXMgYW5kIDEgZXF1YWxzIDM2MCBhcm91bmQgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWVzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgY2lyY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBvc2l0aW9uLCBwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnQodGhpcywgcG9zaXRpb24sIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIENpcmNsZSxcclxuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWFudGl0eSBvciBzdGVwUmF0ZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIGFtb3VudCBvZiBwb2ludHMgdG8gcmV0dXJuLiBJZiBhIGZhbHNleSB2YWx1ZSB0aGUgcXVhbnRpdHkgd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGFuZCBkaXZpZGluZyBpdCBieSB0aGUgc3RlcFJhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgcGVydGFpbmluZyB0byB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBwb2ludCBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uQ2lyY2xlI2dldFJhbmRvbVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbcG9pbnRdIC0gQSBQb2ludCBvciBwb2ludC1saWtlIG9iamVjdCB0byBzZXQgdGhlIHJhbmRvbSBgeGAgYW5kIGB5YCB2YWx1ZXMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQgb2JqZWN0IHdpdGggdGhlIHJhbmRvbSB2YWx1ZXMgc2V0IGluIHRoZSBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb21Qb2ludDogZnVuY3Rpb24gKHBvaW50KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBSYW5kb20odGhpcywgcG9pbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHgsIHkgYW5kIHJhZGl1cyBvZiB0aGlzIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkNpcmNsZSNzZXRUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MF0gLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBUaGlzIENpcmNsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XHJcbiAgICAgICAgdGhpcy5fZGlhbWV0ZXIgPSByYWRpdXMgKiAyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgQ2lyY2xlIHRvIGJlIGVtcHR5IHdpdGggYSByYWRpdXMgb2YgemVyby5cclxuICAgICAqIERvZXMgbm90IGNoYW5nZSBpdHMgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjc2V0RW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhpcyBDaXJjbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRFbXB0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9yYWRpdXMgPSAwO1xyXG4gICAgICAgIHRoaXMuX2RpYW1ldGVyID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhpcyBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFRoaXMgQ2lyY2xlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBDaXJjbGUgaXMgZW1wdHk6IGhhcyBhIHJhZGl1cyBvZiB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uQ2lyY2xlI2lzRW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIENpcmNsZSBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fcmFkaXVzIDw9IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIENpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjcmFkaXVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJhZGl1czoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYW1ldGVyID0gdmFsdWUgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpYW1ldGVyIG9mIHRoZSBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI2RpYW1ldGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpYW1ldGVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWFtZXRlcjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYW1ldGVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlICogMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxlZnQgcG9zaXRpb24gb2YgdGhlIENpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjbGVmdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggLSB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB2YWx1ZSArIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByaWdodCBwb3NpdGlvbiBvZiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNyaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWUgLSB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI3RvcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSAtIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHZhbHVlICsgdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB2YWx1ZSAtIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Circle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Circumference.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Circumference.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the circumference of the given Circle.\r\n *\r\n * @function Phaser.Geom.Circle.Circumference\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference of.\r\n *\r\n * @return {number} The circumference of the Circle.\r\n */\r\nvar Circumference = function (circle)\r\n{\r\n    return 2 * (Math.PI * circle.radius);\r\n};\r\n\r\nmodule.exports = Circumference;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlLmpzP2EwZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gQ2lyY2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNpcmN1bWZlcmVuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCB0aGUgY2lyY3VtZmVyZW5jZSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlLlxyXG4gKi9cclxudmFyIENpcmN1bWZlcmVuY2UgPSBmdW5jdGlvbiAoY2lyY2xlKVxyXG57XHJcbiAgICByZXR1cm4gMiAqIChNYXRoLlBJICogY2lyY2xlLnJhZGl1cyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bWZlcmVuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Circumference.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/CircumferencePoint.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/CircumferencePoint.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Circle based on the given angle.\r\n *\r\n * @function Phaser.Geom.Circle.CircumferencePoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference point on.\r\n * @param {number} angle - The angle from the center of the Circle to the circumference to return the point from. Given in radians.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point, or point-like object, to store the results in. If not given a Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object where the `x` and `y` properties are the point on the circumference.\r\n */\r\nvar CircumferencePoint = function (circle, angle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = circle.x + (circle.radius * Math.cos(angle));\r\n    out.y = circle.y + (circle.radius * Math.sin(angle));\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = CircumferencePoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlUG9pbnQuanM/YzcwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBDaXJjbGUgYmFzZWQgb24gdGhlIGdpdmVuIGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNpcmN1bWZlcmVuY2VQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIENpcmNsZSB0byB0aGUgY2lyY3VtZmVyZW5jZSB0byByZXR1cm4gdGhlIHBvaW50IGZyb20uIEdpdmVuIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQSBQb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCB3aGVyZSB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBhcmUgdGhlIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlLlxyXG4gKi9cclxudmFyIENpcmN1bWZlcmVuY2VQb2ludCA9IGZ1bmN0aW9uIChjaXJjbGUsIGFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIG91dC54ID0gY2lyY2xlLnggKyAoY2lyY2xlLnJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSk7XHJcbiAgICBvdXQueSA9IGNpcmNsZS55ICsgKGNpcmNsZS5yYWRpdXMgKiBNYXRoLnNpbihhbmdsZSkpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bWZlcmVuY2VQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/CircumferencePoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Clone.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Clone.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ./Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\n/**\r\n * Creates a new Circle instance based on the values contained in the given source.\r\n *\r\n * @function Phaser.Geom.Circle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Circle|object)} source - The Circle to be cloned. Can be an instance of a Circle or a circle-like object, with x, y and radius properties.\r\n *\r\n * @return {Phaser.Geom.Circle} A clone of the source Circle.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Circle(source.x, source.y, source.radius);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DbG9uZS5qcz85OWE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsaUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0Nsb25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IENpcmNsZSBpbnN0YW5jZSBiYXNlZCBvbiB0aGUgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gc291cmNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5DaXJjbGV8b2JqZWN0KX0gc291cmNlIC0gVGhlIENpcmNsZSB0byBiZSBjbG9uZWQuIENhbiBiZSBhbiBpbnN0YW5jZSBvZiBhIENpcmNsZSBvciBhIGNpcmNsZS1saWtlIG9iamVjdCwgd2l0aCB4LCB5IGFuZCByYWRpdXMgcHJvcGVydGllcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBBIGNsb25lIG9mIHRoZSBzb3VyY2UgQ2lyY2xlLlxyXG4gKi9cclxudmFyIENsb25lID0gZnVuY3Rpb24gKHNvdXJjZSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBDaXJjbGUoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2UucmFkaXVzKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Contains.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Contains.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check to see if the Circle contains the given x / y coordinates.\r\n *\r\n * @function Phaser.Geom.Circle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {number} x - The x coordinate to check within the circle.\r\n * @param {number} y - The y coordinate to check within the circle.\r\n *\r\n * @return {boolean} True if the coordinates are within the circle, otherwise false.\r\n */\r\nvar Contains = function (circle, x, y)\r\n{\r\n    //  Check if x/y are within the bounds first\r\n    if (circle.radius > 0 && x >= circle.left && x <= circle.right && y >= circle.top && y <= circle.bottom)\r\n    {\r\n        var dx = (circle.x - x) * (circle.x - x);\r\n        var dy = (circle.y - y) * (circle.y - y);\r\n\r\n        return (dx + dy) <= (circle.radius * circle.radius);\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWlucy5qcz80MDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgQ2lyY2xlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5Db250YWluc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBDaXJjbGUgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNoZWNrIHdpdGhpbiB0aGUgY2lyY2xlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChjaXJjbGUsIHgsIHkpXHJcbntcclxuICAgIC8vICBDaGVjayBpZiB4L3kgYXJlIHdpdGhpbiB0aGUgYm91bmRzIGZpcnN0XHJcbiAgICBpZiAoY2lyY2xlLnJhZGl1cyA+IDAgJiYgeCA+PSBjaXJjbGUubGVmdCAmJiB4IDw9IGNpcmNsZS5yaWdodCAmJiB5ID49IGNpcmNsZS50b3AgJiYgeSA8PSBjaXJjbGUuYm90dG9tKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IChjaXJjbGUueCAtIHgpICogKGNpcmNsZS54IC0geCk7XHJcbiAgICAgICAgdmFyIGR5ID0gKGNpcmNsZS55IC0geSkgKiAoY2lyY2xlLnkgLSB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChkeCArIGR5KSA8PSAoY2lyY2xlLnJhZGl1cyAqIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Contains.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/ContainsPoint.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/ContainsPoint.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Circle contains the given Point object.\r\n *\r\n * @function Phaser.Geom.Circle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if the Point coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsPoint = function (circle, point)\r\n{\r\n    return Contains(circle, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWluc1BvaW50LmpzPzNkZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxxRUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NvbnRhaW5zUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayB0byBzZWUgaWYgdGhlIENpcmNsZSBjb250YWlucyB0aGUgZ2l2ZW4gUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNvbnRhaW5zUG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgdG8gY2hlY2sgaWYgaXQncyB3aXRoaW4gdGhlIENpcmNsZSBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIFBvaW50IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGNpcmNsZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAoY2lyY2xlLCBwb2ludClcclxue1xyXG4gICAgcmV0dXJuIENvbnRhaW5zKGNpcmNsZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/ContainsPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/ContainsRect.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/ContainsRect.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Circle contains all four points of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Circle.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if all of the Rectangle coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsRect = function (circle, rect)\r\n{\r\n    return (\r\n        Contains(circle, rect.x, rect.y) &&\r\n        Contains(circle, rect.right, rect.y) &&\r\n        Contains(circle, rect.x, rect.bottom) &&\r\n        Contains(circle, rect.right, rect.bottom)\r\n    );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWluc1JlY3QuanM/ZDYzZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHFFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NvbnRhaW5zUmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgQ2lyY2xlIGNvbnRhaW5zIGFsbCBmb3VyIHBvaW50cyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5Db250YWluc1JlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgb2JqZWN0IHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBDaXJjbGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFsbCBvZiB0aGUgUmVjdGFuZ2xlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGNpcmNsZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUmVjdCA9IGZ1bmN0aW9uIChjaXJjbGUsIHJlY3QpXHJcbntcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCByZWN0LngsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhjaXJjbGUsIHJlY3QucmlnaHQsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhjaXJjbGUsIHJlY3QueCwgcmVjdC5ib3R0b20pICYmXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSlcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUmVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/ContainsRect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/CopyFrom.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/CopyFrom.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copies the `x`, `y` and `radius` properties from the `source` Circle\r\n * into the given `dest` Circle, then returns the `dest` Circle.\r\n *\r\n * @function Phaser.Geom.Circle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} source - The source Circle to copy the values from.\r\n * @param {Phaser.Geom.Circle} dest - The destination Circle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Circle} The destination Circle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x, source.y, source.radius);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db3B5RnJvbS5qcz8zZTgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsbUJBQW1CO0FBQ2hDO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvQ29weUZyb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb3BpZXMgdGhlIGB4YCwgYHlgIGFuZCBgcmFkaXVzYCBwcm9wZXJ0aWVzIGZyb20gdGhlIGBzb3VyY2VgIENpcmNsZVxyXG4gKiBpbnRvIHRoZSBnaXZlbiBgZGVzdGAgQ2lyY2xlLCB0aGVuIHJldHVybnMgdGhlIGBkZXN0YCBDaXJjbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5DaXJjbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gc291cmNlIC0gVGhlIHNvdXJjZSBDaXJjbGUgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIENpcmNsZSB0byBjb3B5IHRoZSB2YWx1ZXMgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhlIGRlc3RpbmF0aW9uIENpcmNsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLnJhZGl1cyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Equals.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Equals.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y` and `radius` properties of the two given Circles.\r\n * Returns `true` if they all match, otherwise returns `false`.\r\n *\r\n * @function Phaser.Geom.Circle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The first Circle to compare.\r\n * @param {Phaser.Geom.Circle} toCompare - The second Circle to compare.\r\n *\r\n * @return {boolean} `true` if the two Circles equal each other, otherwise `false`.\r\n */\r\nvar Equals = function (circle, toCompare)\r\n{\r\n    return (\r\n        circle.x === toCompare.x &&\r\n        circle.y === toCompare.y &&\r\n        circle.radius === toCompare.radius\r\n    );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9FcXVhbHMuanM/YTZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGUgYHhgLCBgeWAgYW5kIGByYWRpdXNgIHByb3BlcnRpZXMgb2YgdGhlIHR3byBnaXZlbiBDaXJjbGVzLlxyXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGV5IGFsbCBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybnMgYGZhbHNlYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgZmlyc3QgQ2lyY2xlIHRvIGNvbXBhcmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIENpcmNsZSB0byBjb21wYXJlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBDaXJjbGVzIGVxdWFsIGVhY2ggb3RoZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIEVxdWFscyA9IGZ1bmN0aW9uIChjaXJjbGUsIHRvQ29tcGFyZSlcclxue1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBjaXJjbGUueCA9PT0gdG9Db21wYXJlLnggJiZcclxuICAgICAgICBjaXJjbGUueSA9PT0gdG9Db21wYXJlLnkgJiZcclxuICAgICAgICBjaXJjbGUucmFkaXVzID09PSB0b0NvbXBhcmUucmFkaXVzXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/GetBounds.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/GetBounds.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Returns the bounds of the Circle object.\r\n *\r\n * @function Phaser.Geom.Circle.GetBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the bounds from.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - A Rectangle, or rectangle-like object, to store the circle bounds in. If not given a new Rectangle will be created.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The Rectangle object containing the Circles bounds.\r\n */\r\nvar GetBounds = function (circle, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    out.x = circle.left;\r\n    out.y = circle.top;\r\n    out.width = circle.diameter;\r\n    out.height = circle.diameter;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRCb3VuZHMuanM/YTQ5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0dldEJvdW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIENpcmNsZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuR2V0Qm91bmRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGJvdW5kcyBmcm9tLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gW291dF0gLSBBIFJlY3RhbmdsZSwgb3IgcmVjdGFuZ2xlLWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgY2lyY2xlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFJlY3RhbmdsZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gVGhlIFJlY3RhbmdsZSBvYmplY3QgY29udGFpbmluZyB0aGUgQ2lyY2xlcyBib3VuZHMuXHJcbiAqL1xyXG52YXIgR2V0Qm91bmRzID0gZnVuY3Rpb24gKGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBjaXJjbGUubGVmdDtcclxuICAgIG91dC55ID0gY2lyY2xlLnRvcDtcclxuICAgIG91dC53aWR0aCA9IGNpcmNsZS5kaWFtZXRlcjtcclxuICAgIG91dC5oZWlnaHQgPSBjaXJjbGUuZGlhbWV0ZXI7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qm91bmRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetBounds.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/GetPoint.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/GetPoint.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Circle\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @function Phaser.Geom.Circle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference point on.\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the circle.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the circle.\r\n */\r\nvar GetPoint = function (circle, position, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var angle = FromPercent(position, 0, MATH_CONST.PI2);\r\n\r\n    return CircumferencePoint(circle, angle, out);\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludC5qcz9mOTU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDdkQsa0JBQWtCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvR2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgYSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5HZXRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGVxdWFscyAwIGRlZ3JlZXMsIDAuNSBlcXVhbHMgMTgwIGRlZ3JlZXMgYW5kIDEgZXF1YWxzIDM2MCBhcm91bmQgdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHJldHVybiB2YWx1ZXMgaW4uIElmIG5vdCBnaXZlbiBhIFBvaW50IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgY2lyY2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKGNpcmNsZSwgcG9zaXRpb24sIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGFuZ2xlID0gRnJvbVBlcmNlbnQocG9zaXRpb24sIDAsIE1BVEhfQ09OU1QuUEkyKTtcclxuXHJcbiAgICByZXR1cm4gQ2lyY3VtZmVyZW5jZVBvaW50KGNpcmNsZSwgYW5nbGUsIG91dCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/GetPoints.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/GetPoints.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/circle/Circumference.js\");\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Circle,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Circle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the circle and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the circumference of the circle.\r\n */\r\nvar GetPoints = function (circle, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = Circumference(circle) / stepRate;\r\n    }\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var angle = FromPercent(i / quantity, 0, MATH_CONST.PI2);\r\n\r\n        out.push(CircumferencePoint(circle, angle));\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludHMuanM/MWQ2MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsK0VBQWlCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLHlGQUFzQjtBQUN2RCxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsaUVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlLFxyXG4gKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVhbnRpdHkgb3Igc3RlcFJhdGUgdmFsdWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkdldFBvaW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBDaXJjbGUgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGFuZCBkaXZpZGluZyBpdCBieSB0aGUgc3RlcFJhdGUuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRwdXRdIC0gQW4gYXJyYXkgdG8gaW5zZXJ0IHRoZSBwb2ludHMgaW4gdG8uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBhcnJheSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50W119IEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgcGVydGFpbmluZyB0byB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50cyA9IGZ1bmN0aW9uIChjaXJjbGUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gQ2lyY3VtZmVyZW5jZShjaXJjbGUpIC8gc3RlcFJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhbmdsZSA9IEZyb21QZXJjZW50KGkgLyBxdWFudGl0eSwgMCwgTUFUSF9DT05TVC5QSTIpO1xyXG5cclxuICAgICAgICBvdXQucHVzaChDaXJjdW1mZXJlbmNlUG9pbnQoY2lyY2xlLCBhbmdsZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Offset.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Offset.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Circle by the values given.\r\n *\r\n * @function Phaser.Geom.Circle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [circle,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to be offset (translated.)\r\n * @param {number} x - The amount to horizontally offset the Circle by.\r\n * @param {number} y - The amount to vertically offset the Circle by.\r\n *\r\n * @return {Phaser.Geom.Circle} The Circle that was offset.\r\n */\r\nvar Offset = function (circle, x, y)\r\n{\r\n    circle.x += x;\r\n    circle.y += y;\r\n\r\n    return circle;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9PZmZzZXQuanM/ZTgyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxtQkFBbUI7QUFDaEM7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvT2Zmc2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogT2Zmc2V0cyB0aGUgQ2lyY2xlIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuT2Zmc2V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uQ2lyY2xlfSBPIC0gW2NpcmNsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gaG9yaXpvbnRhbGx5IG9mZnNldCB0aGUgQ2lyY2xlIGJ5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBhbW91bnQgdG8gdmVydGljYWxseSBvZmZzZXQgdGhlIENpcmNsZSBieS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBUaGUgQ2lyY2xlIHRoYXQgd2FzIG9mZnNldC5cclxuICovXHJcbnZhciBPZmZzZXQgPSBmdW5jdGlvbiAoY2lyY2xlLCB4LCB5KVxyXG57XHJcbiAgICBjaXJjbGUueCArPSB4O1xyXG4gICAgY2lyY2xlLnkgKz0geTtcclxuXHJcbiAgICByZXR1cm4gY2lyY2xlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPZmZzZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/OffsetPoint.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/OffsetPoint.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Circle by the values given in the `x` and `y` properties of the Point object.\r\n *\r\n * @function Phaser.Geom.Circle.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [circle,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to be offset (translated.)\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object containing the values to offset the Circle by.\r\n *\r\n * @return {Phaser.Geom.Circle} The Circle that was offset.\r\n */\r\nvar OffsetPoint = function (circle, point)\r\n{\r\n    circle.x += point.x;\r\n    circle.y += point.y;\r\n\r\n    return circle;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9PZmZzZXRQb2ludC5qcz8yZDUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQztBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvT2Zmc2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPZmZzZXRzIHRoZSBDaXJjbGUgYnkgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBvZiB0aGUgUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLk9mZnNldFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uQ2lyY2xlfSBPIC0gW2NpcmNsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIG9mZnNldCB0aGUgQ2lyY2xlIGJ5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFRoZSBDaXJjbGUgdGhhdCB3YXMgb2Zmc2V0LlxyXG4gKi9cclxudmFyIE9mZnNldFBvaW50ID0gZnVuY3Rpb24gKGNpcmNsZSwgcG9pbnQpXHJcbntcclxuICAgIGNpcmNsZS54ICs9IHBvaW50Lng7XHJcbiAgICBjaXJjbGUueSArPSBwb2ludC55O1xyXG5cclxuICAgIHJldHVybiBjaXJjbGU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/OffsetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/Random.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/Random.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a uniformly distributed random point from anywhere within the given Circle.\r\n *\r\n * @function Phaser.Geom.Circle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get a random point from.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\nvar Random = function (circle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var t = 2 * Math.PI * Math.random();\r\n    var u = Math.random() + Math.random();\r\n    var r = (u > 1) ? 2 - u : u;\r\n    var x = r * Math.cos(t);\r\n    var y = r * Math.sin(t);\r\n\r\n    out.x = circle.x + (x * circle.radius);\r\n    out.y = circle.y + (y * circle.radius);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9SYW5kb20uanM/MzEyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvUmFuZG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgcmFuZG9tIHBvaW50IGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBnaXZlbiBDaXJjbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuUmFuZG9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCBhIHJhbmRvbSBwb2ludCBmcm9tLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEEgUG9pbnQgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gc2V0IHRoZSByYW5kb20gYHhgIGFuZCBgeWAgdmFsdWVzIGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCBvYmplY3Qgd2l0aCB0aGUgcmFuZG9tIHZhbHVlcyBzZXQgaW4gdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgUmFuZG9tID0gZnVuY3Rpb24gKGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgdCA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcclxuICAgIHZhciB1ID0gTWF0aC5yYW5kb20oKSArIE1hdGgucmFuZG9tKCk7XHJcbiAgICB2YXIgciA9ICh1ID4gMSkgPyAyIC0gdSA6IHU7XHJcbiAgICB2YXIgeCA9IHIgKiBNYXRoLmNvcyh0KTtcclxuICAgIHZhciB5ID0gciAqIE1hdGguc2luKHQpO1xyXG5cclxuICAgIG91dC54ID0gY2lyY2xlLnggKyAoeCAqIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgb3V0LnkgPSBjaXJjbGUueSArICh5ICogY2lyY2xlLnJhZGl1cyk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Random.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/circle/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/circle/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ./Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\nCircle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/circle/Area.js\");\r\nCircle.Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/circle/Circumference.js\");\r\nCircle.CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nCircle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/circle/Clone.js\");\r\nCircle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nCircle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/circle/ContainsPoint.js\");\r\nCircle.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/circle/ContainsRect.js\");\r\nCircle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/circle/CopyFrom.js\");\r\nCircle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/circle/Equals.js\");\r\nCircle.GetBounds = __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/geom/circle/GetBounds.js\");\r\nCircle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/circle/GetPoint.js\");\r\nCircle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/circle/GetPoints.js\");\r\nCircle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/circle/Offset.js\");\r\nCircle.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/circle/OffsetPoint.js\");\r\nCircle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\nmodule.exports = Circle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9pbmRleC5qcz8wNGNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsaUVBQVU7O0FBRS9CLGNBQWMsbUJBQU8sQ0FBQyw2REFBUTtBQUM5Qix1QkFBdUIsbUJBQU8sQ0FBQywrRUFBaUI7QUFDaEQsNEJBQTRCLG1CQUFPLENBQUMseUZBQXNCO0FBQzFELGVBQWUsbUJBQU8sQ0FBQywrREFBUztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxxRUFBWTtBQUN0Qyx1QkFBdUIsbUJBQU8sQ0FBQywrRUFBaUI7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsNkVBQWdCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLHFFQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVO0FBQ2xDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLHFFQUFZO0FBQ3RDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLDJFQUFlO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVOztBQUVsQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGUnKTtcclxuXHJcbkNpcmNsZS5BcmVhID0gcmVxdWlyZSgnLi9BcmVhJyk7XHJcbkNpcmNsZS5DaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbkNpcmNsZS5DaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG5DaXJjbGUuQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcbkNpcmNsZS5Db250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuQ2lyY2xlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuQ2lyY2xlLkNvbnRhaW5zUmVjdCA9IHJlcXVpcmUoJy4vQ29udGFpbnNSZWN0Jyk7XHJcbkNpcmNsZS5Db3B5RnJvbSA9IHJlcXVpcmUoJy4vQ29weUZyb20nKTtcclxuQ2lyY2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkNpcmNsZS5HZXRCb3VuZHMgPSByZXF1aXJlKCcuL0dldEJvdW5kcycpO1xyXG5DaXJjbGUuR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbkNpcmNsZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5DaXJjbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuQ2lyY2xlLk9mZnNldFBvaW50ID0gcmVxdWlyZSgnLi9PZmZzZXRQb2ludCcpO1xyXG5DaXJjbGUuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/const.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/geom/const.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GEOM_CONST = {\r\n\r\n    /**\r\n     * A Circle Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.CIRCLE\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    CIRCLE: 0,\r\n\r\n    /**\r\n     * An Ellipse Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.ELLIPSE\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    ELLIPSE: 1,\r\n\r\n    /**\r\n     * A Line Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.LINE\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    LINE: 2,\r\n\r\n    /**\r\n     * A Point Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.POINT\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    POINT: 3,\r\n\r\n    /**\r\n     * A Polygon Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.POLYGON\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    POLYGON: 4,\r\n\r\n    /**\r\n     * A Rectangle Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.RECTANGLE\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    RECTANGLE: 5,\r\n\r\n    /**\r\n     * A Triangle Geometry object type.\r\n     * \r\n     * @name Phaser.Geom.TRIANGLE\r\n     * @type {integer}\r\n     * @since 3.19.0\r\n     */\r\n    TRIANGLE: 6\r\n\r\n};\r\n\r\nmodule.exports = GEOM_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NvbnN0LmpzPzg1ZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHRU9NX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBDaXJjbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNJUkNMRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIENJUkNMRTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIEVsbGlwc2UgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVMTElQU0VcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICovXHJcbiAgICBFTExJUFNFOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBMaW5lIEdlb21ldHJ5IG9iamVjdCB0eXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MSU5FXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgTElORTogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgUG9pbnQgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlBPSU5UXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgUE9JTlQ6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFBvbHlnb24gR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlBPTFlHT05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICovXHJcbiAgICBQT0xZR09OOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBSZWN0YW5nbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJFQ1RBTkdMRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIFJFQ1RBTkdMRTogNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgVHJpYW5nbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRSSUFOR0xFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgVFJJQU5HTEU6IDZcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdFT01fQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Area.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Area.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the area of.\r\n *\r\n * @return {number} The area of the Ellipse.\r\n */\r\nvar Area = function (ellipse)\r\n{\r\n    if (ellipse.isEmpty())\r\n    {\r\n        return 0;\r\n    }\r\n\r\n    //  units squared\r\n    return (ellipse.getMajorRadius() * ellipse.getMinorRadius() * Math.PI);\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQXJlYS5qcz9iOWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQXJlYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFyZWEgb2YgdGhlIEVsbGlwc2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkFyZWFcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIGdldCB0aGUgYXJlYSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgRWxsaXBzZS5cclxuICovXHJcbnZhciBBcmVhID0gZnVuY3Rpb24gKGVsbGlwc2UpXHJcbntcclxuICAgIGlmIChlbGxpcHNlLmlzRW1wdHkoKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgdW5pdHMgc3F1YXJlZFxyXG4gICAgcmV0dXJuIChlbGxpcHNlLmdldE1ham9yUmFkaXVzKCkgKiBlbGxpcHNlLmdldE1pbm9yUmFkaXVzKCkgKiBNYXRoLlBJKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJlYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Area.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Circumference.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Circumference.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the circumference of the given Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Circumference\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference of.\r\n *\r\n * @return {number} The circumference of th Ellipse.\r\n */\r\nvar Circumference = function (ellipse)\r\n{\r\n    var rx = ellipse.width / 2;\r\n    var ry = ellipse.height / 2;\r\n    var h = Math.pow((rx - ry), 2) / Math.pow((rx + ry), 2);\r\n\r\n    return (Math.PI * (rx + ry)) * (1 + ((3 * h) / (10 + Math.sqrt(4 - (3 * h)))));\r\n};\r\n\r\nmodule.exports = Circumference;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZS5qcz9mYmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9DaXJjdW1mZXJlbmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gRWxsaXBzZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ2lyY3VtZmVyZW5jZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBjaXJjdW1mZXJlbmNlIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ2lyY3VtZmVyZW5jZSA9IGZ1bmN0aW9uIChlbGxpcHNlKVxyXG57XHJcbiAgICB2YXIgcnggPSBlbGxpcHNlLndpZHRoIC8gMjtcclxuICAgIHZhciByeSA9IGVsbGlwc2UuaGVpZ2h0IC8gMjtcclxuICAgIHZhciBoID0gTWF0aC5wb3coKHJ4IC0gcnkpLCAyKSAvIE1hdGgucG93KChyeCArIHJ5KSwgMik7XHJcblxyXG4gICAgcmV0dXJuIChNYXRoLlBJICogKHJ4ICsgcnkpKSAqICgxICsgKCgzICogaCkgLyAoMTAgKyBNYXRoLnNxcnQoNCAtICgzICogaCkpKSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaXJjdW1mZXJlbmNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Circumference.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse based on the given angle.\r\n *\r\n * @function Phaser.Geom.Ellipse.CircumferencePoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference point on.\r\n * @param {number} angle - The angle from the center of the Ellipse to the circumference to return the point from. Given in radians.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point, or point-like object, to store the results in. If not given a Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object where the `x` and `y` properties are the point on the circumference.\r\n */\r\nvar CircumferencePoint = function (ellipse, angle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var halfWidth = ellipse.width / 2;\r\n    var halfHeight = ellipse.height / 2;\r\n\r\n    out.x = ellipse.x + halfWidth * Math.cos(angle);\r\n    out.y = ellipse.y + halfHeight * Math.sin(angle);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = CircumferencePoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZVBvaW50LmpzPzcyYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZVBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgYSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgRWxsaXBzZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkNpcmN1bWZlcmVuY2VQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIEVsbGlwc2UgdG8gdGhlIGNpcmN1bWZlcmVuY2UgdG8gcmV0dXJuIHRoZSBwb2ludCBmcm9tLiBHaXZlbiBpbiByYWRpYW5zLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEEgUG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgcmVzdWx0cyBpbi4gSWYgbm90IGdpdmVuIGEgUG9pbnQgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCBvYmplY3Qgd2hlcmUgdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMgYXJlIHRoZSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZS5cclxuICovXHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSBmdW5jdGlvbiAoZWxsaXBzZSwgYW5nbGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGhhbGZXaWR0aCA9IGVsbGlwc2Uud2lkdGggLyAyO1xyXG4gICAgdmFyIGhhbGZIZWlnaHQgPSBlbGxpcHNlLmhlaWdodCAvIDI7XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLnggKyBoYWxmV2lkdGggKiBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UueSArIGhhbGZIZWlnaHQgKiBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY3VtZmVyZW5jZVBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Clone.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Clone.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\n\r\n/**\r\n * Creates a new Ellipse instance based on the values contained in the given source.\r\n *\r\n * @function Phaser.Geom.Ellipse.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} source - The Ellipse to be cloned. Can be an instance of an Ellipse or a ellipse-like object, with x, y, width and height properties.\r\n *\r\n * @return {Phaser.Geom.Ellipse} A clone of the source Ellipse.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Ellipse(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2xvbmUuanM/MjRjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBFbGxpcHNlID0gcmVxdWlyZSgnLi9FbGxpcHNlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBFbGxpcHNlIGluc3RhbmNlIGJhc2VkIG9uIHRoZSB2YWx1ZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBzb3VyY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IHNvdXJjZSAtIFRoZSBFbGxpcHNlIHRvIGJlIGNsb25lZC4gQ2FuIGJlIGFuIGluc3RhbmNlIG9mIGFuIEVsbGlwc2Ugb3IgYSBlbGxpcHNlLWxpa2Ugb2JqZWN0LCB3aXRoIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gQSBjbG9uZSBvZiB0aGUgc291cmNlIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ2xvbmUgPSBmdW5jdGlvbiAoc291cmNlKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IEVsbGlwc2Uoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDbG9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Contains.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Contains.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check to see if the Ellipse contains the given x / y coordinates.\r\n *\r\n * @function Phaser.Geom.Ellipse.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {number} x - The x coordinate to check within the ellipse.\r\n * @param {number} y - The y coordinate to check within the ellipse.\r\n *\r\n * @return {boolean} True if the coordinates are within the ellipse, otherwise false.\r\n */\r\nvar Contains = function (ellipse, x, y)\r\n{\r\n    if (ellipse.width <= 0 || ellipse.height <= 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    //  Normalize the coords to an ellipse with center 0,0 and a radius of 0.5\r\n    var normx = ((x - ellipse.x) / ellipse.width);\r\n    var normy = ((y - ellipse.y) / ellipse.height);\r\n\r\n    normx *= normx;\r\n    normy *= normy;\r\n\r\n    return (normx + normy < 0.25);\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnMuanM/M2MwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9lbGxpcHNlL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29udGFpbnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBlbGxpcHNlLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAqL1xyXG52YXIgQ29udGFpbnMgPSBmdW5jdGlvbiAoZWxsaXBzZSwgeCwgeSlcclxue1xyXG4gICAgaWYgKGVsbGlwc2Uud2lkdGggPD0gMCB8fCBlbGxpcHNlLmhlaWdodCA8PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDAgYW5kIGEgcmFkaXVzIG9mIDAuNVxyXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gZWxsaXBzZS54KSAvIGVsbGlwc2Uud2lkdGgpO1xyXG4gICAgdmFyIG5vcm15ID0gKCh5IC0gZWxsaXBzZS55KSAvIGVsbGlwc2UuaGVpZ2h0KTtcclxuXHJcbiAgICBub3JteCAqPSBub3JteDtcclxuICAgIG5vcm15ICo9IG5vcm15O1xyXG5cclxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8IDAuMjUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Contains.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/ContainsPoint.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/ContainsPoint.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Ellipse contains the given Point object.\r\n *\r\n * @function Phaser.Geom.Ellipse.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if the Point coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsPoint = function (ellipse, point)\r\n{\r\n    return Contains(ellipse, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNQb2ludC5qcz8xYmMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgRWxsaXBzZSBjb250YWlucyB0aGUgZ2l2ZW4gUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5Db250YWluc1BvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBjaGVjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gcG9pbnQgLSBUaGUgUG9pbnQgb2JqZWN0IHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBDaXJjbGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBQb2ludCBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICovXHJcbnZhciBDb250YWluc1BvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvaW50KVxyXG57XHJcbiAgICByZXR1cm4gQ29udGFpbnMoZWxsaXBzZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/ContainsPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/ContainsRect.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/ContainsRect.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Ellipse contains all four points of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Ellipse.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle object to check if it's within the Ellipse or not.\r\n *\r\n * @return {boolean} True if all of the Rectangle coordinates are within the ellipse, otherwise false.\r\n */\r\nvar ContainsRect = function (ellipse, rect)\r\n{\r\n    return (\r\n        Contains(ellipse, rect.x, rect.y) &&\r\n        Contains(ellipse, rect.right, rect.y) &&\r\n        Contains(ellipse, rect.x, rect.bottom) &&\r\n        Contains(ellipse, rect.right, rect.bottom)\r\n    );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNSZWN0LmpzP2FlMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIGFsbCBmb3VyIHBvaW50cyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29udGFpbnNSZWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBjaGVjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdCB0byBjaGVjayBpZiBpdCdzIHdpdGhpbiB0aGUgRWxsaXBzZSBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYWxsIG9mIHRoZSBSZWN0YW5nbGUgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGUgZWxsaXBzZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUmVjdCA9IGZ1bmN0aW9uIChlbGxpcHNlLCByZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QueCwgcmVjdC55KSAmJlxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QucmlnaHQsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhlbGxpcHNlLCByZWN0LngsIHJlY3QuYm90dG9tKSAmJlxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKVxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNSZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/ContainsRect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/CopyFrom.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/CopyFrom.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copies the `x`, `y`, `width` and `height` properties from the `source` Ellipse\r\n * into the given `dest` Ellipse, then returns the `dest` Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} source - The source Ellipse to copy the values from.\r\n * @param {Phaser.Geom.Ellipse} dest - The destination Ellipse to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The destination Ellipse.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29weUZyb20uanM/YmUzMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgYHhgLCBgeWAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgZnJvbSB0aGUgYHNvdXJjZWAgRWxsaXBzZVxyXG4gKiBpbnRvIHRoZSBnaXZlbiBgZGVzdGAgRWxsaXBzZSwgdGhlbiByZXR1cm5zIHRoZSBgZGVzdGAgRWxsaXBzZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBPIC0gW2Rlc3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBzb3VyY2UgLSBUaGUgc291cmNlIEVsbGlwc2UgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBFbGxpcHNlIHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gVGhlIGRlc3RpbmF0aW9uIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ29weUZyb20gPSBmdW5jdGlvbiAoc291cmNlLCBkZXN0KVxyXG57XHJcbiAgICByZXR1cm4gZGVzdC5zZXRUbyhzb3VyY2UueCwgc291cmNlLnksIHNvdXJjZS53aWR0aCwgc291cmNlLmhlaWdodCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Ellipse.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Ellipse.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/ellipse/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/ellipse/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Ellipse object.\r\n *\r\n * This is a geometry object, containing numerical values and related methods to inspect and modify them.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render an Ellipse you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Ellipse\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the ellipse.\r\n * @param {number} [y=0] - The y position of the center of the ellipse.\r\n * @param {number} [width=0] - The width of the ellipse.\r\n * @param {number} [height=0] - The height of the ellipse.\r\n */\r\nvar Ellipse = new Class({\r\n\r\n    initialize:\r\n\r\n    function Ellipse (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = 0; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.ELLIPSE`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Ellipse#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.ELLIPSE;\r\n\r\n        /**\r\n         * The x position of the center of the ellipse.\r\n         *\r\n         * @name Phaser.Geom.Ellipse#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y position of the center of the ellipse.\r\n         *\r\n         * @name Phaser.Geom.Ellipse#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The width of the ellipse.\r\n         *\r\n         * @name Phaser.Geom.Ellipse#width\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the ellipse.\r\n         *\r\n         * @name Phaser.Geom.Ellipse#height\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n    },\r\n\r\n    /**\r\n     * Check to see if the Ellipse contains the given x / y coordinates.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to check within the ellipse.\r\n     * @param {number} y - The y coordinate to check within the ellipse.\r\n     *\r\n     * @return {boolean} True if the coordinates are within the ellipse, otherwise false.\r\n     */\r\n    contains: function (x, y)\r\n    {\r\n        return Contains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse\r\n     * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n     * at 180 degrees around the circle.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [out,$return]\r\n     *\r\n     * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the ellipse.\r\n     * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the ellipse.\r\n     */\r\n    getPoint: function (position, point)\r\n    {\r\n        return GetPoint(this, position, point);\r\n    },\r\n\r\n    /**\r\n     * Returns an array of Point objects containing the coordinates of the points around the circumference of the Ellipse,\r\n     * based on the given quantity or stepRate values.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n     * @param {number} [stepRate] - Sets the quantity by getting the circumference of the ellipse and dividing it by the stepRate.\r\n     * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n     *\r\n     * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the circumference of the ellipse.\r\n     */\r\n    getPoints: function (quantity, stepRate, output)\r\n    {\r\n        return GetPoints(this, quantity, stepRate, output);\r\n    },\r\n\r\n    /**\r\n     * Returns a uniformly distributed random point from anywhere within the given Ellipse.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [point,$return]\r\n     *\r\n     * @param {(Phaser.Geom.Point|object)} [point] - A Point or point-like object to set the random `x` and `y` values in.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n     */\r\n    getRandomPoint: function (point)\r\n    {\r\n        return Random(this, point);\r\n    },\r\n\r\n    /**\r\n     * Sets the x, y, width and height of this ellipse.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x position of the center of the ellipse.\r\n     * @param {number} y - The y position of the center of the ellipse.\r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} height - The height of the ellipse.\r\n     *\r\n     * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n     */\r\n    setTo: function (x, y, width, height)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this Ellipse to be empty with a width and height of zero.\r\n     * Does not change its position.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#setEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n     */\r\n    setEmpty: function ()\r\n    {\r\n        this.width = 0;\r\n        this.height = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the position of this Ellipse.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x position of the center of the ellipse.\r\n     * @param {number} y - The y position of the center of the ellipse.\r\n     *\r\n     * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the size of this Ellipse.\r\n     * Does not change its position.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} [height=width] - The height of the ellipse.\r\n     *\r\n     * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the Ellipse is empty: has a width or height equal to zero.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#isEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} True if the Ellipse is empty, otherwise false.\r\n     */\r\n    isEmpty: function ()\r\n    {\r\n        return (this.width <= 0 || this.height <= 0);\r\n    },\r\n\r\n    /**\r\n     * Returns the minor radius of the ellipse. Also known as the Semi Minor Axis.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#getMinorRadius\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The minor radius.\r\n     */\r\n    getMinorRadius: function ()\r\n    {\r\n        return Math.min(this.width, this.height) / 2;\r\n    },\r\n\r\n    /**\r\n     * Returns the major radius of the ellipse. Also known as the Semi Major Axis.\r\n     *\r\n     * @method Phaser.Geom.Ellipse#getMajorRadius\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The major radius.\r\n     */\r\n    getMajorRadius: function ()\r\n    {\r\n        return Math.max(this.width, this.height) / 2;\r\n    },\r\n\r\n    /**\r\n     * The left position of the Ellipse.\r\n     *\r\n     * @name Phaser.Geom.Ellipse#left\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x - (this.width / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.x = value + (this.width / 2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The right position of the Ellipse.\r\n     *\r\n     * @name Phaser.Geom.Ellipse#right\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + (this.width / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.x = value - (this.width / 2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top position of the Ellipse.\r\n     *\r\n     * @name Phaser.Geom.Ellipse#top\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y - (this.height / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.y = value + (this.height / 2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom position of the Ellipse.\r\n     *\r\n     * @name Phaser.Geom.Ellipse#bottom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + (this.height / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.y = value - (this.height / 2);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRWxsaXBzZS5qcz82MDE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTtBQUNuQyxlQUFlLG1CQUFPLENBQUMsc0VBQVk7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsd0VBQWE7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMseURBQVU7QUFDbkMsYUFBYSxtQkFBTyxDQUFDLGtFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsV0FBVztBQUM3QyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFbGxpcHNlIG9iamVjdC5cclxuICpcclxuICogVGhpcyBpcyBhIGdlb21ldHJ5IG9iamVjdCwgY29udGFpbmluZyBudW1lcmljYWwgdmFsdWVzIGFuZCByZWxhdGVkIG1ldGhvZHMgdG8gaW5zcGVjdCBhbmQgbW9kaWZ5IHRoZW0uXHJcbiAqIEl0IGlzIG5vdCBhIEdhbWUgT2JqZWN0LCBpbiB0aGF0IHlvdSBjYW5ub3QgYWRkIGl0IHRvIHRoZSBkaXNwbGF5IGxpc3QsIGFuZCBpdCBoYXMgbm8gdGV4dHVyZS5cclxuICogVG8gcmVuZGVyIGFuIEVsbGlwc2UgeW91IHNob3VsZCBsb29rIGF0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdyYXBoaWNzIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRWxsaXBzZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdlb21cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0wXSAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAqL1xyXG52YXIgRWxsaXBzZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFbGxpcHNlICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULkVMTElQU0VgLlxyXG4gICAgICAgICAqIFVzZWQgZm9yIGZhc3QgdHlwZSBjb21wYXJpc29ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVsbGlwc2UjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkVMTElQU0U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVsbGlwc2UjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2UjY29udGFpbnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGVsbGlwc2UsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgb24gdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIEVsbGlwc2VcclxuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gICAgICogYXQgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5FbGxpcHNlI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uIC0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIHdoZXJlIDAgZXF1YWxzIDAgZGVncmVlcywgMC41IGVxdWFscyAxODAgZGVncmVlcyBhbmQgMSBlcXVhbHMgMzYwIGFyb3VuZCB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWVzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgZWxsaXBzZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgcG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50KHRoaXMsIHBvc2l0aW9uLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgYXJvdW5kIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBFbGxpcHNlLFxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2UjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIGFtb3VudCBvZiBwb2ludHMgdG8gcmV0dXJuLiBJZiBhIGZhbHNleSB2YWx1ZSB0aGUgcXVhbnRpdHkgd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZWxsaXBzZSBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludHModGhpcywgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgcmFuZG9tIHBvaW50IGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBnaXZlbiBFbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW3BvaW50XSAtIEEgUG9pbnQgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gc2V0IHRoZSByYW5kb20gYHhgIGFuZCBgeWAgdmFsdWVzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCB3aXRoIHRoZSByYW5kb20gdmFsdWVzIHNldCBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZG9tUG9pbnQ6IGZ1bmN0aW9uIChwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gUmFuZG9tKHRoaXMsIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2Ujc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgRWxsaXBzZSB0byBiZSBlbXB0eSB3aXRoIGEgd2lkdGggYW5kIGhlaWdodCBvZiB6ZXJvLlxyXG4gICAgICogRG9lcyBub3QgY2hhbmdlIGl0cyBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2Ujc2V0RW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEVtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhpcyBFbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEVsbGlwc2UuXHJcbiAgICAgKiBEb2VzIG5vdCBjaGFuZ2UgaXRzIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIEVsbGlwc2UgaXMgZW1wdHk6IGhhcyBhIHdpZHRoIG9yIGhlaWdodCBlcXVhbCB0byB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNpc0VtcHR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBFbGxpcHNlIGlzIGVtcHR5LCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWlub3IgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLiBBbHNvIGtub3duIGFzIHRoZSBTZW1pIE1pbm9yIEF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5FbGxpcHNlI2dldE1pbm9yUmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtaW5vciByYWRpdXMuXHJcbiAgICAgKi9cclxuICAgIGdldE1pbm9yUmFkaXVzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkgLyAyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG1ham9yIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS4gQWxzbyBrbm93biBhcyB0aGUgU2VtaSBNYWpvciBBeGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNnZXRNYWpvclJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbWFqb3IgcmFkaXVzLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWpvclJhZGl1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpIC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54IC0gKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHZhbHVlICsgKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByaWdodCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3JpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggKyAodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWUgLSAodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3RvcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSAtICh0aGlzLmhlaWdodCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy55ID0gdmFsdWUgKyAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20gcG9zaXRpb24gb2YgdGhlIEVsbGlwc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHZhbHVlIC0gKHRoaXMuaGVpZ2h0IC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Ellipse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Equals.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Equals.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y`, `width` and `height` properties of the two given Ellipses.\r\n * Returns `true` if they all match, otherwise returns `false`.\r\n *\r\n * @function Phaser.Geom.Ellipse.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The first Ellipse to compare.\r\n * @param {Phaser.Geom.Ellipse} toCompare - The second Ellipse to compare.\r\n *\r\n * @return {boolean} `true` if the two Ellipse equal each other, otherwise `false`.\r\n */\r\nvar Equals = function (ellipse, toCompare)\r\n{\r\n    return (\r\n        ellipse.x === toCompare.x &&\r\n        ellipse.y === toCompare.y &&\r\n        ellipse.width === toCompare.width &&\r\n        ellipse.height === toCompare.height\r\n    );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRXF1YWxzLmpzPzAwZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRXF1YWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdGhlIGB4YCwgYHlgLCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIG9mIHRoZSB0d28gZ2l2ZW4gRWxsaXBzZXMuXHJcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZXkgYWxsIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBmaXJzdCBFbGxpcHNlIHRvIGNvbXBhcmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gdG9Db21wYXJlIC0gVGhlIHNlY29uZCBFbGxpcHNlIHRvIGNvbXBhcmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIEVsbGlwc2UgZXF1YWwgZWFjaCBvdGhlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKGVsbGlwc2UsIHRvQ29tcGFyZSlcclxue1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBlbGxpcHNlLnggPT09IHRvQ29tcGFyZS54ICYmXHJcbiAgICAgICAgZWxsaXBzZS55ID09PSB0b0NvbXBhcmUueSAmJlxyXG4gICAgICAgIGVsbGlwc2Uud2lkdGggPT09IHRvQ29tcGFyZS53aWR0aCAmJlxyXG4gICAgICAgIGVsbGlwc2UuaGVpZ2h0ID09PSB0b0NvbXBhcmUuaGVpZ2h0XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/GetBounds.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/GetBounds.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Returns the bounds of the Ellipse object.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the bounds from.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - A Rectangle, or rectangle-like object, to store the ellipse bounds in. If not given a new Rectangle will be created.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The Rectangle object containing the Ellipse bounds.\r\n */\r\nvar GetBounds = function (ellipse, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    out.x = ellipse.left;\r\n    out.y = ellipse.top;\r\n    out.width = ellipse.width;\r\n    out.height = ellipse.height;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0Qm91bmRzLmpzPzQ1YWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksK0JBQStCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0Qm91bmRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgRWxsaXBzZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkdldEJvdW5kc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBib3VuZHMgZnJvbS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IFtvdXRdIC0gQSBSZWN0YW5nbGUsIG9yIHJlY3RhbmdsZS1saWtlIG9iamVjdCwgdG8gc3RvcmUgdGhlIGVsbGlwc2UgYm91bmRzIGluLiBJZiBub3QgZ2l2ZW4gYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBUaGUgUmVjdGFuZ2xlIG9iamVjdCBjb250YWluaW5nIHRoZSBFbGxpcHNlIGJvdW5kcy5cclxuICovXHJcbnZhciBHZXRCb3VuZHMgPSBmdW5jdGlvbiAoZWxsaXBzZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLmxlZnQ7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UudG9wO1xyXG4gICAgb3V0LndpZHRoID0gZWxsaXBzZS53aWR0aDtcclxuICAgIG91dC5oZWlnaHQgPSBlbGxpcHNlLmhlaWdodDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRCb3VuZHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetBounds.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/GetPoint.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/GetPoint.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference point on.\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the ellipse.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the ellipse.\r\n */\r\nvar GetPoint = function (ellipse, position, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var angle = FromPercent(position, 0, MATH_CONST.PI2);\r\n\r\n    return CircumferencePoint(ellipse, angle, out);\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0UG9pbnQuanM/YmFjNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ3ZELGtCQUFrQixtQkFBTyxDQUFDLDZFQUF3QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9HZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENpcmN1bWZlcmVuY2VQb2ludCA9IHJlcXVpcmUoJy4vQ2lyY3VtZmVyZW5jZVBvaW50Jyk7XHJcbnZhciBGcm9tUGVyY2VudCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvRnJvbVBlcmNlbnQnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBFbGxpcHNlXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBjaXJjdW1mZXJlbmNlIHBvaW50IG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2hlcmUgMCBlcXVhbHMgMCBkZWdyZWVzLCAwLjUgZXF1YWxzIDE4MCBkZWdyZWVzIGFuZCAxIGVxdWFscyAzNjAgYXJvdW5kIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgcmV0dXJuIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGEgUG9pbnQgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgYXJvdW5kIHRoZSBlbGxpcHNlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvc2l0aW9uLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBhbmdsZSA9IEZyb21QZXJjZW50KHBvc2l0aW9uLCAwLCBNQVRIX0NPTlNULlBJMik7XHJcblxyXG4gICAgcmV0dXJuIENpcmN1bWZlcmVuY2VQb2ludChlbGxpcHNlLCBhbmdsZSwgb3V0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/GetPoints.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/GetPoints.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/ellipse/Circumference.js\");\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Ellipse,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the ellipse and dividing it by the stepRate.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Point objects pertaining to the points around the circumference of the ellipse.\r\n */\r\nvar GetPoints = function (ellipse, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = Circumference(ellipse) / stepRate;\r\n    }\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var angle = FromPercent(i / quantity, 0, MATH_CONST.PI2);\r\n\r\n        out.push(CircumferencePoint(ellipse, angle));\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0UG9pbnRzLmpzPzJhYmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLGdGQUFpQjtBQUM3Qyx5QkFBeUIsbUJBQU8sQ0FBQywwRkFBc0I7QUFDdkQsa0JBQWtCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgRWxsaXBzZSxcclxuICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZWxsaXBzZSBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIGVsbGlwc2UuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKGVsbGlwc2UsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gQ2lyY3VtZmVyZW5jZShlbGxpcHNlKSAvIHN0ZXBSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSBGcm9tUGVyY2VudChpIC8gcXVhbnRpdHksIDAsIE1BVEhfQ09OU1QuUEkyKTtcclxuXHJcbiAgICAgICAgb3V0LnB1c2goQ2lyY3VtZmVyZW5jZVBvaW50KGVsbGlwc2UsIGFuZ2xlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Offset.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Offset.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Ellipse by the values given.\r\n *\r\n * @function Phaser.Geom.Ellipse.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [ellipse,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to be offset (translated.)\r\n * @param {number} x - The amount to horizontally offset the Ellipse by.\r\n * @param {number} y - The amount to vertically offset the Ellipse by.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The Ellipse that was offset.\r\n */\r\nvar Offset = function (ellipse, x, y)\r\n{\r\n    ellipse.x += x;\r\n    ellipse.y += y;\r\n\r\n    return ellipse;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvT2Zmc2V0LmpzP2Q3Y2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9PZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPZmZzZXRzIHRoZSBFbGxpcHNlIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLk9mZnNldFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkVsbGlwc2V9IE8gLSBbZWxsaXBzZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gaG9yaXpvbnRhbGx5IG9mZnNldCB0aGUgRWxsaXBzZSBieS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgYW1vdW50IHRvIHZlcnRpY2FsbHkgb2Zmc2V0IHRoZSBFbGxpcHNlIGJ5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBUaGUgRWxsaXBzZSB0aGF0IHdhcyBvZmZzZXQuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHgsIHkpXHJcbntcclxuICAgIGVsbGlwc2UueCArPSB4O1xyXG4gICAgZWxsaXBzZS55ICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIGVsbGlwc2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/OffsetPoint.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/OffsetPoint.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Ellipse by the values given in the `x` and `y` properties of the Point object.\r\n *\r\n * @function Phaser.Geom.Ellipse.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [ellipse,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to be offset (translated.)\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object containing the values to offset the Ellipse by.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The Ellipse that was offset.\r\n */\r\nvar OffsetPoint = function (ellipse, point)\r\n{\r\n    ellipse.x += point.x;\r\n    ellipse.y += point.y;\r\n\r\n    return ellipse;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvT2Zmc2V0UG9pbnQuanM/NzE2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9PZmZzZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE9mZnNldHMgdGhlIEVsbGlwc2UgYnkgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBvZiB0aGUgUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5PZmZzZXRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkVsbGlwc2V9IE8gLSBbZWxsaXBzZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIG9mZnNldCB0aGUgRWxsaXBzZSBieS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gVGhlIEVsbGlwc2UgdGhhdCB3YXMgb2Zmc2V0LlxyXG4gKi9cclxudmFyIE9mZnNldFBvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvaW50KVxyXG57XHJcbiAgICBlbGxpcHNlLnggKz0gcG9pbnQueDtcclxuICAgIGVsbGlwc2UueSArPSBwb2ludC55O1xyXG5cclxuICAgIHJldHVybiBlbGxpcHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPZmZzZXRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/OffsetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/Random.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/Random.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a uniformly distributed random point from anywhere within the given Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get a random point from.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\nvar Random = function (ellipse, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var p = Math.random() * Math.PI * 2;\r\n    var s = Math.sqrt(Math.random());\r\n\r\n    out.x = ellipse.x + ((s * Math.cos(p)) * ellipse.width / 2);\r\n    out.y = ellipse.y + ((s * Math.sin(p)) * ellipse.height / 2);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvUmFuZG9tLmpzPzBjMmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9SYW5kb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIHVuaWZvcm1seSBkaXN0cmlidXRlZCByYW5kb20gcG9pbnQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gdGhlIGdpdmVuIEVsbGlwc2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLlJhbmRvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBnZXQgYSByYW5kb20gcG9pbnQgZnJvbS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBIFBvaW50IG9yIHBvaW50LWxpa2Ugb2JqZWN0IHRvIHNldCB0aGUgcmFuZG9tIGB4YCBhbmQgYHlgIHZhbHVlcyBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQgb2JqZWN0IHdpdGggdGhlIHJhbmRvbSB2YWx1ZXMgc2V0IGluIHRoZSBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLlxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uIChlbGxpcHNlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBwID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyO1xyXG4gICAgdmFyIHMgPSBNYXRoLnNxcnQoTWF0aC5yYW5kb20oKSk7XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLnggKyAoKHMgKiBNYXRoLmNvcyhwKSkgKiBlbGxpcHNlLndpZHRoIC8gMik7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UueSArICgocyAqIE1hdGguc2luKHApKSAqIGVsbGlwc2UuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Random.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/ellipse/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/ellipse/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\n\r\nEllipse.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/ellipse/Area.js\");\r\nEllipse.Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/ellipse/Circumference.js\");\r\nEllipse.CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nEllipse.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/ellipse/Clone.js\");\r\nEllipse.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nEllipse.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/ellipse/ContainsPoint.js\");\r\nEllipse.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/ellipse/ContainsRect.js\");\r\nEllipse.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/ellipse/CopyFrom.js\");\r\nEllipse.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/ellipse/Equals.js\");\r\nEllipse.GetBounds = __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/geom/ellipse/GetBounds.js\");\r\nEllipse.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/ellipse/GetPoint.js\");\r\nEllipse.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/ellipse/GetPoints.js\");\r\nEllipse.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/ellipse/Offset.js\");\r\nEllipse.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/ellipse/OffsetPoint.js\");\r\nEllipse.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvaW5kZXguanM/NDMzNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQyxlQUFlLG1CQUFPLENBQUMsOERBQVE7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ2pELDZCQUE2QixtQkFBTyxDQUFDLDBGQUFzQjtBQUMzRCxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBUztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQyxzRUFBWTtBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQyxnRkFBaUI7QUFDakQsdUJBQXVCLG1CQUFPLENBQUMsOEVBQWdCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLHNFQUFZO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVO0FBQ25DLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLG1CQUFtQixtQkFBTyxDQUFDLHNFQUFZO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVO0FBQ25DLHNCQUFzQixtQkFBTyxDQUFDLDRFQUFlO0FBQzdDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVOztBQUVuQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVsbGlwc2UgPSByZXF1aXJlKCcuL0VsbGlwc2UnKTtcclxuXHJcbkVsbGlwc2UuQXJlYSA9IHJlcXVpcmUoJy4vQXJlYScpO1xyXG5FbGxpcHNlLkNpcmN1bWZlcmVuY2UgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2UnKTtcclxuRWxsaXBzZS5DaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG5FbGxpcHNlLkNsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5FbGxpcHNlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5FbGxpcHNlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuRWxsaXBzZS5Db250YWluc1JlY3QgPSByZXF1aXJlKCcuL0NvbnRhaW5zUmVjdCcpO1xyXG5FbGxpcHNlLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5FbGxpcHNlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkVsbGlwc2UuR2V0Qm91bmRzID0gcmVxdWlyZSgnLi9HZXRCb3VuZHMnKTtcclxuRWxsaXBzZS5HZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxuRWxsaXBzZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5FbGxpcHNlLk9mZnNldCA9IHJlcXVpcmUoJy4vT2Zmc2V0Jyk7XHJcbkVsbGlwc2UuT2Zmc2V0UG9pbnQgPSByZXF1aXJlKCcuL09mZnNldFBvaW50Jyk7XHJcbkVsbGlwc2UuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/index.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/geom/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Geom\r\n */\r\n\r\nvar Geom = {\r\n    \r\n    Circle: __webpack_require__(/*! ./circle */ \"./node_modules/phaser/src/geom/circle/index.js\"),\r\n    Ellipse: __webpack_require__(/*! ./ellipse */ \"./node_modules/phaser/src/geom/ellipse/index.js\"),\r\n    Intersects: __webpack_require__(/*! ./intersects */ \"./node_modules/phaser/src/geom/intersects/index.js\"),\r\n    Line: __webpack_require__(/*! ./line */ \"./node_modules/phaser/src/geom/line/index.js\"),\r\n    Point: __webpack_require__(/*! ./point */ \"./node_modules/phaser/src/geom/point/index.js\"),\r\n    Polygon: __webpack_require__(/*! ./polygon */ \"./node_modules/phaser/src/geom/polygon/index.js\"),\r\n    Rectangle: __webpack_require__(/*! ./rectangle */ \"./node_modules/phaser/src/geom/rectangle/index.js\"),\r\n    Triangle: __webpack_require__(/*! ./triangle */ \"./node_modules/phaser/src/geom/triangle/index.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nGeom = Extend(false, Geom, CONST);\r\n\r\nmodule.exports = Geom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2luZGV4LmpzPzFkMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyx3RUFBYztBQUN0QyxVQUFVLG1CQUFPLENBQUMsNERBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLDhEQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVztBQUNoQyxlQUFlLG1CQUFPLENBQUMsc0VBQWE7QUFDcEMsY0FBYyxtQkFBTyxDQUFDLG9FQUFZOztBQUVsQzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdlb21cclxuICovXHJcblxyXG52YXIgR2VvbSA9IHtcclxuICAgIFxyXG4gICAgQ2lyY2xlOiByZXF1aXJlKCcuL2NpcmNsZScpLFxyXG4gICAgRWxsaXBzZTogcmVxdWlyZSgnLi9lbGxpcHNlJyksXHJcbiAgICBJbnRlcnNlY3RzOiByZXF1aXJlKCcuL2ludGVyc2VjdHMnKSxcclxuICAgIExpbmU6IHJlcXVpcmUoJy4vbGluZScpLFxyXG4gICAgUG9pbnQ6IHJlcXVpcmUoJy4vcG9pbnQnKSxcclxuICAgIFBvbHlnb246IHJlcXVpcmUoJy4vcG9seWdvbicpLFxyXG4gICAgUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3JlY3RhbmdsZScpLFxyXG4gICAgVHJpYW5nbGU6IHJlcXVpcmUoJy4vdHJpYW5nbGUnKVxyXG5cclxufTtcclxuXHJcbi8vICAgTWVyZ2UgaW4gdGhlIGNvbnN0c1xyXG5HZW9tID0gRXh0ZW5kKGZhbHNlLCBHZW9tLCBDT05TVCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdlb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/CircleToCircle.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/CircleToCircle.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * Checks if two Circles intersect.\r\n *\r\n * @function Phaser.Geom.Intersects.CircleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circleA - The first Circle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circleB - The second Circle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the two Circles intersect, otherwise `false`.\r\n */\r\nvar CircleToCircle = function (circleA, circleB)\r\n{\r\n    return (DistanceBetween(circleA.x, circleA.y, circleB.x, circleB.y) <= (circleA.radius + circleB.radius));\r\n};\r\n\r\nmodule.exports = CircleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvQ2lyY2xlVG9DaXJjbGUuanM/MzVhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsdUdBQXFDOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0NpcmNsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGlzdGFuY2VCZXR3ZWVuID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9kaXN0YW5jZS9EaXN0YW5jZUJldHdlZW4nKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIENpcmNsZXMgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5DaXJjbGVUb0NpcmNsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZUEgLSBUaGUgZmlyc3QgQ2lyY2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGVCIC0gVGhlIHNlY29uZCBDaXJjbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gQ2lyY2xlcyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENpcmNsZVRvQ2lyY2xlID0gZnVuY3Rpb24gKGNpcmNsZUEsIGNpcmNsZUIpXHJcbntcclxuICAgIHJldHVybiAoRGlzdGFuY2VCZXR3ZWVuKGNpcmNsZUEueCwgY2lyY2xlQS55LCBjaXJjbGVCLngsIGNpcmNsZUIueSkgPD0gKGNpcmNsZUEucmFkaXVzICsgY2lyY2xlQi5yYWRpdXMpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlVG9DaXJjbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/CircleToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/CircleToRectangle.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/CircleToRectangle.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks for intersection between a circle and a rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.CircleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to be checked.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to be checked.\r\n *\r\n * @return {boolean} `true` if the two objects intersect, otherwise `false`.\r\n */\r\nvar CircleToRectangle = function (circle, rect)\r\n{\r\n    var halfWidth = rect.width / 2;\r\n    var halfHeight = rect.height / 2;\r\n\r\n    var cx = Math.abs(circle.x - rect.x - halfWidth);\r\n    var cy = Math.abs(circle.y - rect.y - halfHeight);\r\n    var xDist = halfWidth + circle.radius;\r\n    var yDist = halfHeight + circle.radius;\r\n\r\n    if (cx > xDist || cy > yDist)\r\n    {\r\n        return false;\r\n    }\r\n    else if (cx <= halfWidth || cy <= halfHeight)\r\n    {\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        var xCornerDist = cx - halfWidth;\r\n        var yCornerDist = cy - halfHeight;\r\n        var xCornerDistSq = xCornerDist * xCornerDist;\r\n        var yCornerDistSq = yCornerDist * yCornerDist;\r\n        var maxCornerDistSq = circle.radius * circle.radius;\r\n\r\n        return (xCornerDistSq + yCornerDistSq <= maxCornerDistSq);\r\n    }\r\n};\r\n\r\nmodule.exports = CircleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvQ2lyY2xlVG9SZWN0YW5nbGUuanM/ZjVhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0NpcmNsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiBhIGNpcmNsZSBhbmQgYSByZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkNpcmNsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIGNpcmNsZSB0byBiZSBjaGVja2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gYmUgY2hlY2tlZC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENpcmNsZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGNpcmNsZSwgcmVjdClcclxue1xyXG4gICAgdmFyIGhhbGZXaWR0aCA9IHJlY3Qud2lkdGggLyAyO1xyXG4gICAgdmFyIGhhbGZIZWlnaHQgPSByZWN0LmhlaWdodCAvIDI7XHJcblxyXG4gICAgdmFyIGN4ID0gTWF0aC5hYnMoY2lyY2xlLnggLSByZWN0LnggLSBoYWxmV2lkdGgpO1xyXG4gICAgdmFyIGN5ID0gTWF0aC5hYnMoY2lyY2xlLnkgLSByZWN0LnkgLSBoYWxmSGVpZ2h0KTtcclxuICAgIHZhciB4RGlzdCA9IGhhbGZXaWR0aCArIGNpcmNsZS5yYWRpdXM7XHJcbiAgICB2YXIgeURpc3QgPSBoYWxmSGVpZ2h0ICsgY2lyY2xlLnJhZGl1cztcclxuXHJcbiAgICBpZiAoY3ggPiB4RGlzdCB8fCBjeSA+IHlEaXN0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGN4IDw9IGhhbGZXaWR0aCB8fCBjeSA8PSBoYWxmSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4Q29ybmVyRGlzdCA9IGN4IC0gaGFsZldpZHRoO1xyXG4gICAgICAgIHZhciB5Q29ybmVyRGlzdCA9IGN5IC0gaGFsZkhlaWdodDtcclxuICAgICAgICB2YXIgeENvcm5lckRpc3RTcSA9IHhDb3JuZXJEaXN0ICogeENvcm5lckRpc3Q7XHJcbiAgICAgICAgdmFyIHlDb3JuZXJEaXN0U3EgPSB5Q29ybmVyRGlzdCAqIHlDb3JuZXJEaXN0O1xyXG4gICAgICAgIHZhciBtYXhDb3JuZXJEaXN0U3EgPSBjaXJjbGUucmFkaXVzICogY2lyY2xlLnJhZGl1cztcclxuXHJcbiAgICAgICAgcmV0dXJuICh4Q29ybmVyRGlzdFNxICsgeUNvcm5lckRpc3RTcSA8PSBtYXhDb3JuZXJEaXN0U3EpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar CircleToCircle = __webpack_require__(/*! ./CircleToCircle */ \"./node_modules/phaser/src/geom/intersects/CircleToCircle.js\");\r\n\r\n/**\r\n * Checks if two Circles intersect and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetCircleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circleA - The first Circle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circleB - The second Circle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetCircleToCircle = function (circleA, circleB, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (CircleToCircle(circleA, circleB))\r\n    {\r\n        var x0 = circleA.x;\r\n        var y0 = circleA.y;\r\n        var r0 = circleA.radius;\r\n\r\n        var x1 = circleB.x;\r\n        var y1 = circleB.y;\r\n        var r1 = circleB.radius;\r\n\r\n        var coefficientA, coefficientB, coefficientC, lambda, x;\r\n\r\n        if (y0 === y1)\r\n        {\r\n            x = ((r1 * r1) - (r0 * r0) - (x1 * x1) + (x0 * x0)) / (2 * (x0 - x1));\r\n\r\n            coefficientA = 1;\r\n            coefficientB = -2 * y1;\r\n            coefficientC = (x1 * x1) + (x * x) - (2 * x1 * x) + (y1 * y1) - (r1 * r1);\r\n\r\n            lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n            if (lambda === 0)\r\n            {\r\n                out.push(new Point(x, (-coefficientB / (2 * coefficientA))));\r\n            }\r\n            else if (lambda > 0)\r\n            {\r\n                out.push(new Point(x, (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA)));\r\n                out.push(new Point(x, (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA)));\r\n            }\r\n        }\r\n        else\r\n        {\r\n            var v1 = (x0 - x1) / (y0 - y1);\r\n            var n = (r1 * r1 - r0 * r0 - x1 * x1 + x0 * x0 - y1 * y1 + y0 * y0) / (2 * (y0 - y1));\r\n\r\n            coefficientA = (v1 * v1) + 1;\r\n            coefficientB = (2 * y0 * v1) - (2 * n * v1) - (2 * x0);\r\n            coefficientC = (x0 * x0) + (y0 * y0) + (n * n) - (r0 * r0) - (2 * y0 * n);\r\n\r\n            lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n            if (lambda === 0)\r\n            {\r\n                x = (-coefficientB / (2 * coefficientA));\r\n                out.push(new Point(x, (n - (x * v1))));\r\n            }\r\n            else if (lambda > 0)\r\n            {\r\n                x = (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA);\r\n                out.push(new Point(x, (n - (x * v1))));\r\n                x = (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA);\r\n                out.push(new Point(x, (n - (x * v1))));\r\n            }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetCircleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0Q2lyY2xlVG9DaXJjbGUuanM/N2VmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLHFCQUFxQixtQkFBTyxDQUFDLHFGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRDaXJjbGVUb0NpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxudmFyIENpcmNsZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGVUb0NpcmNsZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0d28gQ2lyY2xlcyBpbnRlcnNlY3QgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldENpcmNsZVRvQ2lyY2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlQSAtIFRoZSBmaXJzdCBDaXJjbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZUIgLSBUaGUgc2Vjb25kIENpcmNsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBpZiBvYmplY3RzIGludGVyc2VjdCwgb3RoZXJ3aXNlIGFuIGVtcHR5IGFycmF5LlxyXG4gKi9cclxudmFyIEdldENpcmNsZVRvQ2lyY2xlID0gZnVuY3Rpb24gKGNpcmNsZUEsIGNpcmNsZUIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKENpcmNsZVRvQ2lyY2xlKGNpcmNsZUEsIGNpcmNsZUIpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4MCA9IGNpcmNsZUEueDtcclxuICAgICAgICB2YXIgeTAgPSBjaXJjbGVBLnk7XHJcbiAgICAgICAgdmFyIHIwID0gY2lyY2xlQS5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciB4MSA9IGNpcmNsZUIueDtcclxuICAgICAgICB2YXIgeTEgPSBjaXJjbGVCLnk7XHJcbiAgICAgICAgdmFyIHIxID0gY2lyY2xlQi5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciBjb2VmZmljaWVudEEsIGNvZWZmaWNpZW50QiwgY29lZmZpY2llbnRDLCBsYW1iZGEsIHg7XHJcblxyXG4gICAgICAgIGlmICh5MCA9PT0geTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ID0gKChyMSAqIHIxKSAtIChyMCAqIHIwKSAtICh4MSAqIHgxKSArICh4MCAqIHgwKSkgLyAoMiAqICh4MCAtIHgxKSk7XHJcblxyXG4gICAgICAgICAgICBjb2VmZmljaWVudEEgPSAxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEIgPSAtMiAqIHkxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEMgPSAoeDEgKiB4MSkgKyAoeCAqIHgpIC0gKDIgKiB4MSAqIHgpICsgKHkxICogeTEpIC0gKHIxICogcjEpO1xyXG5cclxuICAgICAgICAgICAgbGFtYmRhID0gKGNvZWZmaWNpZW50QiAqIGNvZWZmaWNpZW50QikgLSAoNCAqIGNvZWZmaWNpZW50QSAqIGNvZWZmaWNpZW50Qyk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGFtYmRhID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKC1jb2VmZmljaWVudEIgLyAoMiAqIGNvZWZmaWNpZW50QSkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGFtYmRhID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFBvaW50KHgsICgtY29lZmZpY2llbnRCICsgTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpKSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKC1jb2VmZmljaWVudEIgLSBNYXRoLnNxcnQobGFtYmRhKSkgLyAoMiAqIGNvZWZmaWNpZW50QSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdjEgPSAoeDAgLSB4MSkgLyAoeTAgLSB5MSk7XHJcbiAgICAgICAgICAgIHZhciBuID0gKHIxICogcjEgLSByMCAqIHIwIC0geDEgKiB4MSArIHgwICogeDAgLSB5MSAqIHkxICsgeTAgKiB5MCkgLyAoMiAqICh5MCAtIHkxKSk7XHJcblxyXG4gICAgICAgICAgICBjb2VmZmljaWVudEEgPSAodjEgKiB2MSkgKyAxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEIgPSAoMiAqIHkwICogdjEpIC0gKDIgKiBuICogdjEpIC0gKDIgKiB4MCk7XHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50QyA9ICh4MCAqIHgwKSArICh5MCAqIHkwKSArIChuICogbikgLSAocjAgKiByMCkgLSAoMiAqIHkwICogbik7XHJcblxyXG4gICAgICAgICAgICBsYW1iZGEgPSAoY29lZmZpY2llbnRCICogY29lZmZpY2llbnRCKSAtICg0ICogY29lZmZpY2llbnRBICogY29lZmZpY2llbnRDKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsYW1iZGEgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHggPSAoLWNvZWZmaWNpZW50QiAvICgyICogY29lZmZpY2llbnRBKSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKG4gLSAoeCAqIHYxKSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsYW1iZGEgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB4ID0gKC1jb2VmZmljaWVudEIgKyBNYXRoLnNxcnQobGFtYmRhKSkgLyAoMiAqIGNvZWZmaWNpZW50QSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKG4gLSAoeCAqIHYxKSkpKTtcclxuICAgICAgICAgICAgICAgIHggPSAoLWNvZWZmaWNpZW50QiAtIE1hdGguc3FydChsYW1iZGEpKSAvICgyICogY29lZmZpY2llbnRBKTtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCAobiAtICh4ICogdjEpKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENpcmNsZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToCircle = __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\");\r\nvar CircleToRectangle = __webpack_require__(/*! ./CircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between a circle and a rectangle,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetCircleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to be checked.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to be checked.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetCircleToRectangle = function (circle, rect, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (CircleToRectangle(circle, rect))\r\n    {\r\n        var lineA = rect.getLineA();\r\n        var lineB = rect.getLineB();\r\n        var lineC = rect.getLineC();\r\n        var lineD = rect.getLineD();\r\n\r\n        GetLineToCircle(lineA, circle, out);\r\n        GetLineToCircle(lineB, circle, out);\r\n        GetLineToCircle(lineC, circle, out);\r\n        GetLineToCircle(lineD, circle, out);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetCircleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0Q2lyY2xlVG9SZWN0YW5nbGUuanM/YTlhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDakQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRDaXJjbGVUb1JlY3RhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExpbmVUb0NpcmNsZSA9IHJlcXVpcmUoJy4vR2V0TGluZVRvQ2lyY2xlJyk7XHJcbnZhciBDaXJjbGVUb1JlY3RhbmdsZSA9IHJlcXVpcmUoJy4vQ2lyY2xlVG9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIGEgY2lyY2xlIGFuZCBhIHJlY3RhbmdsZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldENpcmNsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIGNpcmNsZSB0byBiZSBjaGVja2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gYmUgY2hlY2tlZC5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRDaXJjbGVUb1JlY3RhbmdsZSA9IGZ1bmN0aW9uIChjaXJjbGUsIHJlY3QsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKENpcmNsZVRvUmVjdGFuZ2xlKGNpcmNsZSwgcmVjdCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gcmVjdC5nZXRMaW5lQSgpO1xyXG4gICAgICAgIHZhciBsaW5lQiA9IHJlY3QuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSByZWN0LmdldExpbmVDKCk7XHJcbiAgICAgICAgdmFyIGxpbmVEID0gcmVjdC5nZXRMaW5lRCgpO1xyXG5cclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUEsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUIsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUMsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUQsIGNpcmNsZSwgb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRDaXJjbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetLineToCircle.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetLineToCircle.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar LineToCircle = __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\");\r\n\r\n/**\r\n * Checks for intersection between the line segment and circle,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetLineToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line segment to check.\r\n * @param {Phaser.Geom.Circle} circle - The circle to check against the line.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetLineToCircle = function (line, circle, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (LineToCircle(line, circle))\r\n    {\r\n        var lx1 = line.x1;\r\n        var ly1 = line.y1;\r\n\r\n        var lx2 = line.x2;\r\n        var ly2 = line.y2;\r\n\r\n        var cx = circle.x;\r\n        var cy = circle.y;\r\n        var cr = circle.radius;\r\n\r\n        var lDirX = lx2 - lx1;\r\n        var lDirY = ly2 - ly1;\r\n        var oDirX = lx1 - cx;\r\n        var oDirY = ly1 - cy;\r\n\r\n        var coefficientA = lDirX * lDirX + lDirY * lDirY;\r\n        var coefficientB = 2 * (lDirX * oDirX + lDirY * oDirY);\r\n        var coefficientC = oDirX * oDirX + oDirY * oDirY - cr * cr;\r\n\r\n        var lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n        var x, y;\r\n\r\n        if (lambda === 0)\r\n        {\r\n            var root = -coefficientB / (2 * coefficientA);\r\n            x = lx1 + root * lDirX;\r\n            y = ly1 + root * lDirY;\r\n            if (root >= 0 && root <= 1)\r\n            {\r\n                out.push(new Point(x, y));\r\n            }\r\n        }\r\n        else if (lambda > 0)\r\n        {\r\n            var root1 = (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA);\r\n            x = lx1 + root1 * lDirX;\r\n            y = ly1 + root1 * lDirY;\r\n            if (root1 >= 0 && root1 <= 1)\r\n            {\r\n                out.push(new Point(x, y));\r\n            }\r\n\r\n            var root2 = (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA);\r\n            x = lx1 + root2 * lDirX;\r\n            y = ly1 + root2 * lDirY;\r\n            if (root2 >= 0 && root2 <= 1)\r\n            {\r\n                out.push(new Point(x, y));\r\n            }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetLineToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvQ2lyY2xlLmpzPzNlODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyxpRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9MaW5lVG9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIGNpcmNsZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldExpbmVUb0NpcmNsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgc2VnbWVudCB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBjaXJjbGUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgbGluZS5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRMaW5lVG9DaXJjbGUgPSBmdW5jdGlvbiAobGluZSwgY2lyY2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIGlmIChMaW5lVG9DaXJjbGUobGluZSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbHgxID0gbGluZS54MTtcclxuICAgICAgICB2YXIgbHkxID0gbGluZS55MTtcclxuXHJcbiAgICAgICAgdmFyIGx4MiA9IGxpbmUueDI7XHJcbiAgICAgICAgdmFyIGx5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgICAgIHZhciBjeCA9IGNpcmNsZS54O1xyXG4gICAgICAgIHZhciBjeSA9IGNpcmNsZS55O1xyXG4gICAgICAgIHZhciBjciA9IGNpcmNsZS5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciBsRGlyWCA9IGx4MiAtIGx4MTtcclxuICAgICAgICB2YXIgbERpclkgPSBseTIgLSBseTE7XHJcbiAgICAgICAgdmFyIG9EaXJYID0gbHgxIC0gY3g7XHJcbiAgICAgICAgdmFyIG9EaXJZID0gbHkxIC0gY3k7XHJcblxyXG4gICAgICAgIHZhciBjb2VmZmljaWVudEEgPSBsRGlyWCAqIGxEaXJYICsgbERpclkgKiBsRGlyWTtcclxuICAgICAgICB2YXIgY29lZmZpY2llbnRCID0gMiAqIChsRGlyWCAqIG9EaXJYICsgbERpclkgKiBvRGlyWSk7XHJcbiAgICAgICAgdmFyIGNvZWZmaWNpZW50QyA9IG9EaXJYICogb0RpclggKyBvRGlyWSAqIG9EaXJZIC0gY3IgKiBjcjtcclxuXHJcbiAgICAgICAgdmFyIGxhbWJkYSA9IChjb2VmZmljaWVudEIgKiBjb2VmZmljaWVudEIpIC0gKDQgKiBjb2VmZmljaWVudEEgKiBjb2VmZmljaWVudEMpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeTtcclxuXHJcbiAgICAgICAgaWYgKGxhbWJkYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByb290ID0gLWNvZWZmaWNpZW50QiAvICgyICogY29lZmZpY2llbnRBKTtcclxuICAgICAgICAgICAgeCA9IGx4MSArIHJvb3QgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QgKiBsRGlyWTtcclxuICAgICAgICAgICAgaWYgKHJvb3QgPj0gMCAmJiByb290IDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobGFtYmRhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByb290MSA9ICgtY29lZmZpY2llbnRCIC0gTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpO1xyXG4gICAgICAgICAgICB4ID0gbHgxICsgcm9vdDEgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QxICogbERpclk7XHJcbiAgICAgICAgICAgIGlmIChyb290MSA+PSAwICYmIHJvb3QxIDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByb290MiA9ICgtY29lZmZpY2llbnRCICsgTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpO1xyXG4gICAgICAgICAgICB4ID0gbHgxICsgcm9vdDIgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QyICogbERpclk7XHJcbiAgICAgICAgICAgIGlmIChyb290MiA+PSAwICYmIHJvb3QyIDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0TGluZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\nvar LineToRectangle = __webpack_require__(/*! ./LineToRectangle */ \"./node_modules/phaser/src/geom/intersects/LineToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between the Line and a Rectangle shape,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetLineToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to check for intersection.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetLineToRectangle = function (line, rect, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (LineToRectangle(line, rect))\r\n    {\r\n        var lineA = rect.getLineA();\r\n        var lineB = rect.getLineB();\r\n        var lineC = rect.getLineC();\r\n        var lineD = rect.getLineD();\r\n\r\n        var output = [ new Point(), new Point(), new Point(), new Point() ];\r\n\r\n        var result = [\r\n            LineToLine(lineA, line, output[0]),\r\n            LineToLine(lineB, line, output[1]),\r\n            LineToLine(lineC, line, output[2]),\r\n            LineToLine(lineD, line, output[3])\r\n        ];\r\n\r\n        for (var i = 0; i < 4; i++)\r\n        {\r\n            if (result[i]) { out.push(output[i]); }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetLineToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvUmVjdGFuZ2xlLmpzPzI1OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYztBQUN2QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGluZVRvTGluZSA9IHJlcXVpcmUoJy4vTGluZVRvTGluZScpO1xyXG52YXIgTGluZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9MaW5lVG9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBMaW5lIGFuZCBhIFJlY3RhbmdsZSBzaGFwZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldExpbmVUb1JlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0TGluZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGxpbmUsIHJlY3QsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKExpbmVUb1JlY3RhbmdsZShsaW5lLCByZWN0KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZUEgPSByZWN0LmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gcmVjdC5nZXRMaW5lQigpO1xyXG4gICAgICAgIHZhciBsaW5lQyA9IHJlY3QuZ2V0TGluZUMoKTtcclxuICAgICAgICB2YXIgbGluZUQgPSByZWN0LmdldExpbmVEKCk7XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbIG5ldyBQb2ludCgpLCBuZXcgUG9pbnQoKSwgbmV3IFBvaW50KCksIG5ldyBQb2ludCgpIF07XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUEsIGxpbmUsIG91dHB1dFswXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUIsIGxpbmUsIG91dHB1dFsxXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUMsIGxpbmUsIG91dHB1dFsyXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUQsIGxpbmUsIG91dHB1dFszXSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRbaV0pIHsgb3V0LnB1c2gob3V0cHV0W2ldKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMaW5lVG9SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleToRectangle = __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Checks if two Rectangle shapes intersect and returns the area of this intersection as Rectangle object.\r\n * \r\n * If optional `output` parameter is omitted, new Rectangle object is created and returned. If there is intersection, it will contain intersection area. If there is no intersection, it wil be empty Rectangle (all values set to zero).\r\n * \r\n * If Rectangle object is passed as `output` and there is intersection, then intersection area data will be loaded into it and it will be returned. If there is no intersection, it will be returned without any change.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleIntersection\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [output,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} [output] - Optional Rectangle object. If given, the intersection data will be loaded into it (in case of no intersection, it will be left unchanged). Otherwise, new Rectangle object will be created and returned with either intersection data or empty (all values set to zero), if there is no intersection.\r\n *\r\n * @return {Phaser.Geom.Rectangle} A rectangle object with intersection data.\r\n */\r\nvar GetRectangleIntersection = function (rectA, rectB, output)\r\n{\r\n    if (output === undefined) { output = new Rectangle(); }\r\n\r\n    if (RectangleToRectangle(rectA, rectB))\r\n    {\r\n        output.x = Math.max(rectA.x, rectB.x);\r\n        output.y = Math.max(rectA.y, rectB.y);\r\n        output.width = Math.min(rectA.right, rectB.right) - output.x;\r\n        output.height = Math.min(rectA.bottom, rectB.bottom) - output.y;\r\n    }\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = GetRectangleIntersection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uLmpzP2FhNzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCwyQkFBMkIsbUJBQU8sQ0FBQyxpR0FBd0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwwQkFBMEI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUmVjdGFuZ2xlVG9SZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVRvUmVjdGFuZ2xlJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGUgc2hhcGVzIGludGVyc2VjdCBhbmQgcmV0dXJucyB0aGUgYXJlYSBvZiB0aGlzIGludGVyc2VjdGlvbiBhcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKiBcclxuICogSWYgb3B0aW9uYWwgYG91dHB1dGAgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIG5ldyBSZWN0YW5nbGUgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHJldHVybmVkLiBJZiB0aGVyZSBpcyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgY29udGFpbiBpbnRlcnNlY3Rpb24gYXJlYS4gSWYgdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCBpdCB3aWwgYmUgZW1wdHkgUmVjdGFuZ2xlIChhbGwgdmFsdWVzIHNldCB0byB6ZXJvKS5cclxuICogXHJcbiAqIElmIFJlY3RhbmdsZSBvYmplY3QgaXMgcGFzc2VkIGFzIGBvdXRwdXRgIGFuZCB0aGVyZSBpcyBpbnRlcnNlY3Rpb24sIHRoZW4gaW50ZXJzZWN0aW9uIGFyZWEgZGF0YSB3aWxsIGJlIGxvYWRlZCBpbnRvIGl0IGFuZCBpdCB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91dCBhbnkgY2hhbmdlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRSZWN0YW5nbGVJbnRlcnNlY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEIgLSBUaGUgc2Vjb25kIFJlY3RhbmdsZSBvYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0cHV0XSAtIE9wdGlvbmFsIFJlY3RhbmdsZSBvYmplY3QuIElmIGdpdmVuLCB0aGUgaW50ZXJzZWN0aW9uIGRhdGEgd2lsbCBiZSBsb2FkZWQgaW50byBpdCAoaW4gY2FzZSBvZiBubyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQpLiBPdGhlcndpc2UsIG5ldyBSZWN0YW5nbGUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQgd2l0aCBlaXRoZXIgaW50ZXJzZWN0aW9uIGRhdGEgb3IgZW1wdHkgKGFsbCB2YWx1ZXMgc2V0IHRvIHplcm8pLCBpZiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gQSByZWN0YW5nbGUgb2JqZWN0IHdpdGggaW50ZXJzZWN0aW9uIGRhdGEuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0cHV0KVxyXG57XHJcbiAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgaWYgKFJlY3RhbmdsZVRvUmVjdGFuZ2xlKHJlY3RBLCByZWN0QikpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnggPSBNYXRoLm1heChyZWN0QS54LCByZWN0Qi54KTtcclxuICAgICAgICBvdXRwdXQueSA9IE1hdGgubWF4KHJlY3RBLnksIHJlY3RCLnkpO1xyXG4gICAgICAgIG91dHB1dC53aWR0aCA9IE1hdGgubWluKHJlY3RBLnJpZ2h0LCByZWN0Qi5yaWdodCkgLSBvdXRwdXQueDtcclxuICAgICAgICBvdXRwdXQuaGVpZ2h0ID0gTWF0aC5taW4ocmVjdEEuYm90dG9tLCByZWN0Qi5ib3R0b20pIC0gb3V0cHV0Lnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToRectangle = __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\");\r\nvar RectangleToRectangle = __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Checks if two Rectangles intersect and returns the intersection points as a Point object array.\r\n *\r\n * A Rectangle intersects another Rectangle if any part of its bounds is within the other Rectangle's bounds. As such, the two Rectangles are considered \"solid\". A Rectangle with no width or no height will never intersect another Rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check for intersection.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetRectangleToRectangle = function (rectA, rectB, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (RectangleToRectangle(rectA, rectB))\r\n    {\r\n        var lineA = rectA.getLineA();\r\n        var lineB = rectA.getLineB();\r\n        var lineC = rectA.getLineC();\r\n        var lineD = rectA.getLineD();\r\n\r\n        GetLineToRectangle(lineA, rectB, out);\r\n        GetLineToRectangle(lineB, rectB, out);\r\n        GetLineToRectangle(lineC, rectB, out);\r\n        GetLineToRectangle(lineD, rectB, out);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetRectangleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGUuanM/ODdlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyw2RkFBc0I7QUFDdkQsMkJBQTJCLG1CQUFPLENBQUMsaUdBQXdCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0dldFJlY3RhbmdsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGluZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9HZXRMaW5lVG9SZWN0YW5nbGUnKTtcclxudmFyIFJlY3RhbmdsZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0d28gUmVjdGFuZ2xlcyBpbnRlcnNlY3QgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEEgUmVjdGFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBSZWN0YW5nbGUgaWYgYW55IHBhcnQgb2YgaXRzIGJvdW5kcyBpcyB3aXRoaW4gdGhlIG90aGVyIFJlY3RhbmdsZSdzIGJvdW5kcy4gQXMgc3VjaCwgdGhlIHR3byBSZWN0YW5nbGVzIGFyZSBjb25zaWRlcmVkIFwic29saWRcIi4gQSBSZWN0YW5nbGUgd2l0aCBubyB3aWR0aCBvciBubyBoZWlnaHQgd2lsbCBuZXZlciBpbnRlcnNlY3QgYW5vdGhlciBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldFJlY3RhbmdsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEEgLSBUaGUgZmlyc3QgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGUgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIGlmIChSZWN0YW5nbGVUb1JlY3RhbmdsZShyZWN0QSwgcmVjdEIpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lQSA9IHJlY3RBLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gcmVjdEEuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSByZWN0QS5nZXRMaW5lQygpO1xyXG4gICAgICAgIHZhciBsaW5lRCA9IHJlY3RBLmdldExpbmVEKCk7XHJcblxyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lQSwgcmVjdEIsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvUmVjdGFuZ2xlKGxpbmVCLCByZWN0Qiwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9SZWN0YW5nbGUobGluZUMsIHJlY3RCLCBvdXQpO1xyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lRCwgcmVjdEIsIG91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RectangleToTriangle = __webpack_require__(/*! ./RectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\");\r\nvar GetLineToRectangle = __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between Rectangle shape and Triangle shape,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle object to test.\r\n * @param {Phaser.Geom.Triangle} triangle - Triangle object to test.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetRectangleToTriangle = function (rect, triangle, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (RectangleToTriangle(rect, triangle))\r\n    {\r\n        var lineA = triangle.getLineA();\r\n        var lineB = triangle.getLineB();\r\n        var lineC = triangle.getLineC();\r\n\r\n        GetLineToRectangle(lineA, rect, out);\r\n        GetLineToRectangle(lineB, rect, out);\r\n        GetLineToRectangle(lineC, rect, out);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetRectangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZS5qcz9lYTFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLDBCQUEwQixtQkFBTyxDQUFDLCtGQUF1QjtBQUN6RCx5QkFBeUIsbUJBQU8sQ0FBQyw2RkFBc0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZVRvVHJpYW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVRvVHJpYW5nbGUnKTtcclxudmFyIEdldExpbmVUb1JlY3RhbmdsZSA9IHJlcXVpcmUoJy4vR2V0TGluZVRvUmVjdGFuZ2xlJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiBSZWN0YW5nbGUgc2hhcGUgYW5kIFRyaWFuZ2xlIHNoYXBlLFxyXG4gKiBhbmQgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIHBvaW50cyBhcyBhIFBvaW50IG9iamVjdCBhcnJheS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBSZWN0YW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVHJpYW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZSA9IGZ1bmN0aW9uIChyZWN0LCB0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoUmVjdGFuZ2xlVG9UcmlhbmdsZShyZWN0LCB0cmlhbmdsZSkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gdHJpYW5nbGUuZ2V0TGluZUEoKTtcclxuICAgICAgICB2YXIgbGluZUIgPSB0cmlhbmdsZS5nZXRMaW5lQigpO1xyXG4gICAgICAgIHZhciBsaW5lQyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lQSwgcmVjdCwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9SZWN0YW5nbGUobGluZUIsIHJlY3QsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvUmVjdGFuZ2xlKGxpbmVDLCByZWN0LCBvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFJlY3RhbmdsZVRvVHJpYW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToCircle = __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\");\r\nvar TriangleToCircle = __webpack_require__(/*! ./TriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Circle intersect, and returns the intersection points as a Point object array.\r\n *\r\n * A Circle intersects a Triangle if its center is located within it or if any of the Triangle's sides intersect the Circle. As such, the Triangle and the Circle are considered \"solid\" for the intersection.\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToCircle = function (triangle, circle, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (TriangleToCircle(triangle, circle))\r\n    {\r\n        var lineA = triangle.getLineA();\r\n        var lineB = triangle.getLineB();\r\n        var lineC = triangle.getLineC();\r\n\r\n        GetLineToCircle(lineA, circle, out);\r\n        GetLineToCircle(lineB, circle, out);\r\n        GetLineToCircle(lineC, circle, out);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0NpcmNsZS5qcz9lYzY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFtQjtBQUNqRCx1QkFBdUIsbUJBQU8sQ0FBQyx5RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRUcmlhbmdsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9HZXRMaW5lVG9DaXJjbGUnKTtcclxudmFyIFRyaWFuZ2xlVG9DaXJjbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlVG9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBDaXJjbGUgaW50ZXJzZWN0LCBhbmQgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIHBvaW50cyBhcyBhIFBvaW50IG9iamVjdCBhcnJheS5cclxuICpcclxuICogQSBDaXJjbGUgaW50ZXJzZWN0cyBhIFRyaWFuZ2xlIGlmIGl0cyBjZW50ZXIgaXMgbG9jYXRlZCB3aXRoaW4gaXQgb3IgaWYgYW55IG9mIHRoZSBUcmlhbmdsZSdzIHNpZGVzIGludGVyc2VjdCB0aGUgQ2lyY2xlLiBBcyBzdWNoLCB0aGUgVHJpYW5nbGUgYW5kIHRoZSBDaXJjbGUgYXJlIGNvbnNpZGVyZWQgXCJzb2xpZFwiIGZvciB0aGUgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRUcmlhbmdsZVRvQ2lyY2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBpZiBvYmplY3RzIGludGVyc2VjdCwgb3RoZXJ3aXNlIGFuIGVtcHR5IGFycmF5LlxyXG4gKi9cclxudmFyIEdldFRyaWFuZ2xlVG9DaXJjbGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoVHJpYW5nbGVUb0NpcmNsZSh0cmlhbmdsZSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZUEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgICAgIHZhciBsaW5lQiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICAgICAgdmFyIGxpbmVDID0gdHJpYW5nbGUuZ2V0TGluZUMoKTtcclxuXHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVBLCBjaXJjbGUsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVCLCBjaXJjbGUsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVDLCBjaXJjbGUsIG91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VHJpYW5nbGVUb0NpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar TriangleToLine = __webpack_require__(/*! ./TriangleToLine */ \"./node_modules/phaser/src/geom/intersects/TriangleToLine.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Line intersect, and returns the intersection points as a Point object array.\r\n *\r\n * The Line intersects the Triangle if it starts inside of it, ends inside of it, or crosses any of the Triangle's sides. Thus, the Triangle is considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check with.\r\n * @param {Phaser.Geom.Line} line - The Line to check with.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToLine = function (triangle, line, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (TriangleToLine(triangle, line))\r\n    {\r\n        var lineA = triangle.getLineA();\r\n        var lineB = triangle.getLineB();\r\n        var lineC = triangle.getLineC();\r\n\r\n        var output = [ new Point(), new Point(), new Point() ];\r\n\r\n        var result = [\r\n            LineToLine(lineA, line, output[0]),\r\n            LineToLine(lineB, line, output[1]),\r\n            LineToLine(lineC, line, output[2])\r\n        ];\r\n\r\n        for (var i = 0; i < 3; i++)\r\n        {\r\n            if (result[i]) { out.push(output[i]); }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0xpbmUuanM/NDVhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLHFCQUFxQixtQkFBTyxDQUFDLHFGQUFrQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBGbG9yaWFuIFZhemVsbGVcclxuICogQGF1dGhvciAgICAgICBHZW9mZnJleSBHbGFpdmVcclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcbnZhciBUcmlhbmdsZVRvTGluZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGVUb0xpbmUnKTtcclxudmFyIExpbmVUb0xpbmUgPSByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBMaW5lIGludGVyc2VjdCwgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIFRoZSBMaW5lIGludGVyc2VjdHMgdGhlIFRyaWFuZ2xlIGlmIGl0IHN0YXJ0cyBpbnNpZGUgb2YgaXQsIGVuZHMgaW5zaWRlIG9mIGl0LCBvciBjcm9zc2VzIGFueSBvZiB0aGUgVHJpYW5nbGUncyBzaWRlcy4gVGh1cywgdGhlIFRyaWFuZ2xlIGlzIGNvbnNpZGVyZWQgXCJzb2xpZFwiLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRUcmlhbmdsZVRvTGluZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gY2hlY2sgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2hlY2sgd2l0aC5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRUcmlhbmdsZVRvTGluZSA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgbGluZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoVHJpYW5nbGVUb0xpbmUodHJpYW5nbGUsIGxpbmUpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lQSA9IHRyaWFuZ2xlLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSB0cmlhbmdsZS5nZXRMaW5lQygpO1xyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gWyBuZXcgUG9pbnQoKSwgbmV3IFBvaW50KCksIG5ldyBQb2ludCgpIF07XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUEsIGxpbmUsIG91dHB1dFswXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUIsIGxpbmUsIG91dHB1dFsxXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUMsIGxpbmUsIG91dHB1dFsyXSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRbaV0pIHsgb3V0LnB1c2gob3V0cHV0W2ldKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUcmlhbmdsZVRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Florian Vazelle\r\n * @author       Geoffrey Glaive\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TriangleToTriangle = __webpack_require__(/*! ./TriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\");\r\nvar GetTriangleToLine = __webpack_require__(/*! ./GetTriangleToLine */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\");\r\n\r\n/**\r\n * Checks if two Triangles intersect, and returns the intersection points as a Point object array.\r\n *\r\n * A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.\r\n * @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToTriangle = function (triangleA, triangleB, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (TriangleToTriangle(triangleA, triangleB))\r\n    {\r\n        var lineA = triangleB.getLineA();\r\n        var lineB = triangleB.getLineB();\r\n        var lineC = triangleB.getLineC();\r\n\r\n        GetTriangleToLine(triangleA, lineA, out);\r\n        GetTriangleToLine(triangleA, lineB, out);\r\n        GetTriangleToLine(triangleA, lineC, out);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb1RyaWFuZ2xlLmpzPzMzYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3ZELHdCQUF3QixtQkFBTyxDQUFDLDJGQUFxQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0dldFRyaWFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlVG9UcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGVUb1RyaWFuZ2xlJyk7XHJcbnZhciBHZXRUcmlhbmdsZVRvTGluZSA9IHJlcXVpcmUoJy4vR2V0VHJpYW5nbGVUb0xpbmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIFRyaWFuZ2xlcyBpbnRlcnNlY3QsIGFuZCByZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnRzIGFzIGEgUG9pbnQgb2JqZWN0IGFycmF5LlxyXG4gKlxyXG4gKiBBIFRyaWFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBUcmlhbmdsZSBpZiBhbnkgcGFpciBvZiB0aGVpciBsaW5lcyBpbnRlcnNlY3RzIG9yIGlmIGFueSBwb2ludCBvZiBvbmUgVHJpYW5nbGUgaXMgd2l0aGluIHRoZSBvdGhlciBUcmlhbmdsZS4gVGh1cywgdGhlIFRyaWFuZ2xlcyBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldFRyaWFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGVBIC0gVGhlIGZpcnN0IFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlQiAtIFRoZSBzZWNvbmQgVHJpYW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRUcmlhbmdsZVRvVHJpYW5nbGUgPSBmdW5jdGlvbiAodHJpYW5nbGVBLCB0cmlhbmdsZUIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKFRyaWFuZ2xlVG9UcmlhbmdsZSh0cmlhbmdsZUEsIHRyaWFuZ2xlQikpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gdHJpYW5nbGVCLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gdHJpYW5nbGVCLmdldExpbmVCKCk7XHJcbiAgICAgICAgdmFyIGxpbmVDID0gdHJpYW5nbGVCLmdldExpbmVDKCk7XHJcblxyXG4gICAgICAgIEdldFRyaWFuZ2xlVG9MaW5lKHRyaWFuZ2xlQSwgbGluZUEsIG91dCk7XHJcbiAgICAgICAgR2V0VHJpYW5nbGVUb0xpbmUodHJpYW5nbGVBLCBsaW5lQiwgb3V0KTtcclxuICAgICAgICBHZXRUcmlhbmdsZVRvTGluZSh0cmlhbmdsZUEsIGxpbmVDLCBvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFRyaWFuZ2xlVG9UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/LineToCircle.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/LineToCircle.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ../circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\nvar tmp = new Point();\r\n\r\n/**\r\n * Checks for intersection between the line segment and circle.\r\n *\r\n * Based on code by [Matt DesLauriers](https://github.com/mattdesl/line-circle-collision/blob/master/LICENSE.md).\r\n *\r\n * @function Phaser.Geom.Intersects.LineToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line segment to check.\r\n * @param {Phaser.Geom.Circle} circle - The circle to check against the line.\r\n * @param {(Phaser.Geom.Point|any)} [nearest] - An optional Point-like object. If given the closest point on the Line where the circle intersects will be stored in this object.\r\n *\r\n * @return {boolean} `true` if the two objects intersect, otherwise `false`.\r\n */\r\nvar LineToCircle = function (line, circle, nearest)\r\n{\r\n    if (nearest === undefined) { nearest = tmp; }\r\n\r\n    if (Contains(circle, line.x1, line.y1))\r\n    {\r\n        nearest.x = line.x1;\r\n        nearest.y = line.y1;\r\n\r\n        return true;\r\n    }\r\n\r\n    if (Contains(circle, line.x2, line.y2))\r\n    {\r\n        nearest.x = line.x2;\r\n        nearest.y = line.y2;\r\n\r\n        return true;\r\n    }\r\n\r\n    var dx = line.x2 - line.x1;\r\n    var dy = line.y2 - line.y1;\r\n\r\n    var lcx = circle.x - line.x1;\r\n    var lcy = circle.y - line.y1;\r\n\r\n    //  project lc onto d, resulting in vector p\r\n    var dLen2 = (dx * dx) + (dy * dy);\r\n    var px = dx;\r\n    var py = dy;\r\n\r\n    if (dLen2 > 0)\r\n    {\r\n        var dp = ((lcx * dx) + (lcy * dy)) / dLen2;\r\n\r\n        px *= dp;\r\n        py *= dp;\r\n    }\r\n\r\n    nearest.x = line.x1 + px;\r\n    nearest.y = line.y1 + py;\r\n    \r\n    //  len2 of p\r\n    var pLen2 = (px * px) + (py * py);\r\n    \r\n    return (\r\n        pLen2 <= dLen2 &&\r\n        ((px * dx) + (py * dy)) >= 0 &&\r\n        Contains(circle, nearest.x, nearest.y)\r\n    );\r\n};\r\n\r\nmodule.exports = LineToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvQ2lyY2xlLmpzP2Y5YWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw2RUFBb0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxlQUFlOztBQUUvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9MaW5lVG9DaXJjbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4uL2NpcmNsZS9Db250YWlucycpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxudmFyIHRtcCA9IG5ldyBQb2ludCgpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgY2lyY2xlLlxyXG4gKlxyXG4gKiBCYXNlZCBvbiBjb2RlIGJ5IFtNYXR0IERlc0xhdXJpZXJzXShodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvbGluZS1jaXJjbGUtY29sbGlzaW9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5MaW5lVG9DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHNlZ21lbnQgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgY2lyY2xlIHRvIGNoZWNrIGFnYWluc3QgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fGFueSl9IFtuZWFyZXN0XSAtIEFuIG9wdGlvbmFsIFBvaW50LWxpa2Ugb2JqZWN0LiBJZiBnaXZlbiB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgTGluZSB3aGVyZSB0aGUgY2lyY2xlIGludGVyc2VjdHMgd2lsbCBiZSBzdG9yZWQgaW4gdGhpcyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBMaW5lVG9DaXJjbGUgPSBmdW5jdGlvbiAobGluZSwgY2lyY2xlLCBuZWFyZXN0KVxyXG57XHJcbiAgICBpZiAobmVhcmVzdCA9PT0gdW5kZWZpbmVkKSB7IG5lYXJlc3QgPSB0bXA7IH1cclxuXHJcbiAgICBpZiAoQ29udGFpbnMoY2lyY2xlLCBsaW5lLngxLCBsaW5lLnkxKSlcclxuICAgIHtcclxuICAgICAgICBuZWFyZXN0LnggPSBsaW5lLngxO1xyXG4gICAgICAgIG5lYXJlc3QueSA9IGxpbmUueTE7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDb250YWlucyhjaXJjbGUsIGxpbmUueDIsIGxpbmUueTIpKVxyXG4gICAge1xyXG4gICAgICAgIG5lYXJlc3QueCA9IGxpbmUueDI7XHJcbiAgICAgICAgbmVhcmVzdC55ID0gbGluZS55MjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGR4ID0gbGluZS54MiAtIGxpbmUueDE7XHJcbiAgICB2YXIgZHkgPSBsaW5lLnkyIC0gbGluZS55MTtcclxuXHJcbiAgICB2YXIgbGN4ID0gY2lyY2xlLnggLSBsaW5lLngxO1xyXG4gICAgdmFyIGxjeSA9IGNpcmNsZS55IC0gbGluZS55MTtcclxuXHJcbiAgICAvLyAgcHJvamVjdCBsYyBvbnRvIGQsIHJlc3VsdGluZyBpbiB2ZWN0b3IgcFxyXG4gICAgdmFyIGRMZW4yID0gKGR4ICogZHgpICsgKGR5ICogZHkpO1xyXG4gICAgdmFyIHB4ID0gZHg7XHJcbiAgICB2YXIgcHkgPSBkeTtcclxuXHJcbiAgICBpZiAoZExlbjIgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkcCA9ICgobGN4ICogZHgpICsgKGxjeSAqIGR5KSkgLyBkTGVuMjtcclxuXHJcbiAgICAgICAgcHggKj0gZHA7XHJcbiAgICAgICAgcHkgKj0gZHA7XHJcbiAgICB9XHJcblxyXG4gICAgbmVhcmVzdC54ID0gbGluZS54MSArIHB4O1xyXG4gICAgbmVhcmVzdC55ID0gbGluZS55MSArIHB5O1xyXG4gICAgXHJcbiAgICAvLyAgbGVuMiBvZiBwXHJcbiAgICB2YXIgcExlbjIgPSAocHggKiBweCkgKyAocHkgKiBweSk7XHJcbiAgICBcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcExlbjIgPD0gZExlbjIgJiZcclxuICAgICAgICAoKHB4ICogZHgpICsgKHB5ICogZHkpKSA+PSAwICYmXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCBuZWFyZXN0LngsIG5lYXJlc3QueSlcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVUb0NpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/LineToLine.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/LineToLine.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n//  This is based off an explanation and expanded math presented by Paul Bourke:\r\n//  See http:'local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/\r\n\r\n/**\r\n * Checks if two Lines intersect. If the Lines are identical, they will be treated as parallel and thus non-intersecting.\r\n *\r\n * @function Phaser.Geom.Intersects.LineToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line1 - The first Line to check.\r\n * @param {Phaser.Geom.Line} line2 - The second Line to check.\r\n * @param {Phaser.Geom.Point} [out] - A Point in which to optionally store the point of intersection.\r\n *\r\n * @return {boolean} `true` if the two Lines intersect, and the `out` object will be populated, if given. Otherwise, `false`.\r\n */\r\nvar LineToLine = function (line1, line2, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var x1 = line1.x1;\r\n    var y1 = line1.y1;\r\n    var x2 = line1.x2;\r\n    var y2 = line1.y2;\r\n\r\n    var x3 = line2.x1;\r\n    var y3 = line2.y1;\r\n    var x4 = line2.x2;\r\n    var y4 = line2.y2;\r\n\r\n    var numA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\r\n    var numB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\r\n    var deNom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\r\n\r\n    //  Make sure there is not a division by zero - this also indicates that the lines are parallel.\r\n    //  If numA and numB were both equal to zero the lines would be on top of each other (coincidental).\r\n    //  This check is not done because it is not necessary for this implementation (the parallel check accounts for this).\r\n\r\n    if (deNom === 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    //  Calculate the intermediate fractional point that the lines potentially intersect.\r\n\r\n    var uA = numA / deNom;\r\n    var uB = numB / deNom;\r\n\r\n    //  The fractional point will be between 0 and 1 inclusive if the lines intersect.\r\n    //  If the fractional calculation is larger than 1 or smaller than 0 the lines would need to be longer to intersect.\r\n\r\n    if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)\r\n    {\r\n        out.x = x1 + (uA * (x2 - x1));\r\n        out.y = y1 + (uA * (y2 - y1));\r\n\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = LineToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvTGluZS5qcz81MjExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9MaW5lVG9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLy8gIFRoaXMgaXMgYmFzZWQgb2ZmIGFuIGV4cGxhbmF0aW9uIGFuZCBleHBhbmRlZCBtYXRoIHByZXNlbnRlZCBieSBQYXVsIEJvdXJrZTpcclxuLy8gIFNlZSBodHRwOidsb2NhbC53YXNwLnV3YS5lZHUuYXUvfnBib3Vya2UvZ2VvbWV0cnkvbGluZWxpbmUyZC9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIExpbmVzIGludGVyc2VjdC4gSWYgdGhlIExpbmVzIGFyZSBpZGVudGljYWwsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIHBhcmFsbGVsIGFuZCB0aHVzIG5vbi1pbnRlcnNlY3RpbmcuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkxpbmVUb0xpbmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZTEgLSBUaGUgZmlyc3QgTGluZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lMiAtIFRoZSBzZWNvbmQgTGluZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBBIFBvaW50IGluIHdoaWNoIHRvIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gTGluZXMgaW50ZXJzZWN0LCBhbmQgdGhlIGBvdXRgIG9iamVjdCB3aWxsIGJlIHBvcHVsYXRlZCwgaWYgZ2l2ZW4uIE90aGVyd2lzZSwgYGZhbHNlYC5cclxuICovXHJcbnZhciBMaW5lVG9MaW5lID0gZnVuY3Rpb24gKGxpbmUxLCBsaW5lMiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgeDEgPSBsaW5lMS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUxLnkxO1xyXG4gICAgdmFyIHgyID0gbGluZTEueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lMS55MjtcclxuXHJcbiAgICB2YXIgeDMgPSBsaW5lMi54MTtcclxuICAgIHZhciB5MyA9IGxpbmUyLnkxO1xyXG4gICAgdmFyIHg0ID0gbGluZTIueDI7XHJcbiAgICB2YXIgeTQgPSBsaW5lMi55MjtcclxuXHJcbiAgICB2YXIgbnVtQSA9ICh4NCAtIHgzKSAqICh5MSAtIHkzKSAtICh5NCAtIHkzKSAqICh4MSAtIHgzKTtcclxuICAgIHZhciBudW1CID0gKHgyIC0geDEpICogKHkxIC0geTMpIC0gKHkyIC0geTEpICogKHgxIC0geDMpO1xyXG4gICAgdmFyIGRlTm9tID0gKHk0IC0geTMpICogKHgyIC0geDEpIC0gKHg0IC0geDMpICogKHkyIC0geTEpO1xyXG5cclxuICAgIC8vICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgZGl2aXNpb24gYnkgemVybyAtIHRoaXMgYWxzbyBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluZXMgYXJlIHBhcmFsbGVsLlxyXG4gICAgLy8gIElmIG51bUEgYW5kIG51bUIgd2VyZSBib3RoIGVxdWFsIHRvIHplcm8gdGhlIGxpbmVzIHdvdWxkIGJlIG9uIHRvcCBvZiBlYWNoIG90aGVyIChjb2luY2lkZW50YWwpLlxyXG4gICAgLy8gIFRoaXMgY2hlY2sgaXMgbm90IGRvbmUgYmVjYXVzZSBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIGltcGxlbWVudGF0aW9uICh0aGUgcGFyYWxsZWwgY2hlY2sgYWNjb3VudHMgZm9yIHRoaXMpLlxyXG5cclxuICAgIGlmIChkZU5vbSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIENhbGN1bGF0ZSB0aGUgaW50ZXJtZWRpYXRlIGZyYWN0aW9uYWwgcG9pbnQgdGhhdCB0aGUgbGluZXMgcG90ZW50aWFsbHkgaW50ZXJzZWN0LlxyXG5cclxuICAgIHZhciB1QSA9IG51bUEgLyBkZU5vbTtcclxuICAgIHZhciB1QiA9IG51bUIgLyBkZU5vbTtcclxuXHJcbiAgICAvLyAgVGhlIGZyYWN0aW9uYWwgcG9pbnQgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlIGlmIHRoZSBsaW5lcyBpbnRlcnNlY3QuXHJcbiAgICAvLyAgSWYgdGhlIGZyYWN0aW9uYWwgY2FsY3VsYXRpb24gaXMgbGFyZ2VyIHRoYW4gMSBvciBzbWFsbGVyIHRoYW4gMCB0aGUgbGluZXMgd291bGQgbmVlZCB0byBiZSBsb25nZXIgdG8gaW50ZXJzZWN0LlxyXG5cclxuICAgIGlmICh1QSA+PSAwICYmIHVBIDw9IDEgJiYgdUIgPj0gMCAmJiB1QiA8PSAxKVxyXG4gICAge1xyXG4gICAgICAgIG91dC54ID0geDEgKyAodUEgKiAoeDIgLSB4MSkpO1xyXG4gICAgICAgIG91dC55ID0geTEgKyAodUEgKiAoeTIgLSB5MSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVUb0xpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/LineToRectangle.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/LineToRectangle.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks for intersection between the Line and a Rectangle shape, or a rectangle-like\r\n * object, with public `x`, `y`, `right` and `bottom` properties, such as a Sprite or Body.\r\n *\r\n * An intersection is considered valid if:\r\n *\r\n * The line starts within, or ends within, the Rectangle.\r\n * The line segment intersects one of the 4 rectangle edges.\r\n *\r\n * The for the purposes of this function rectangles are considered 'solid'.\r\n *\r\n * @function Phaser.Geom.Intersects.LineToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to check for intersection.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Line and the Rectangle intersect, `false` otherwise.\r\n */\r\nvar LineToRectangle = function (line, rect)\r\n{\r\n    var x1 = line.x1;\r\n    var y1 = line.y1;\r\n\r\n    var x2 = line.x2;\r\n    var y2 = line.y2;\r\n\r\n    var bx1 = rect.x;\r\n    var by1 = rect.y;\r\n    var bx2 = rect.right;\r\n    var by2 = rect.bottom;\r\n\r\n    var t = 0;\r\n\r\n    //  If the start or end of the line is inside the rect then we assume\r\n    //  collision, as rects are solid for our use-case.\r\n\r\n    if ((x1 >= bx1 && x1 <= bx2 && y1 >= by1 && y1 <= by2) ||\r\n        (x2 >= bx1 && x2 <= bx2 && y2 >= by1 && y2 <= by2))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (x1 < bx1 && x2 >= bx1)\r\n    {\r\n        //  Left edge\r\n        t = y1 + (y2 - y1) * (bx1 - x1) / (x2 - x1);\r\n\r\n        if (t > by1 && t <= by2)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n    else if (x1 > bx2 && x2 <= bx2)\r\n    {\r\n        //  Right edge\r\n        t = y1 + (y2 - y1) * (bx2 - x1) / (x2 - x1);\r\n\r\n        if (t >= by1 && t <= by2)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    if (y1 < by1 && y2 >= by1)\r\n    {\r\n        //  Top edge\r\n        t = x1 + (x2 - x1) * (by1 - y1) / (y2 - y1);\r\n\r\n        if (t >= bx1 && t <= bx2)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n    else if (y1 > by2 && y2 <= by2)\r\n    {\r\n        //  Bottom edge\r\n        t = x1 + (x2 - x1) * (by2 - y1) / (y2 - y1);\r\n\r\n        if (t >= bx1 && t <= bx2)\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = LineToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvUmVjdGFuZ2xlLmpzPzlkM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgTGluZSBhbmQgYSBSZWN0YW5nbGUgc2hhcGUsIG9yIGEgcmVjdGFuZ2xlLWxpa2VcclxuICogb2JqZWN0LCB3aXRoIHB1YmxpYyBgeGAsIGB5YCwgYHJpZ2h0YCBhbmQgYGJvdHRvbWAgcHJvcGVydGllcywgc3VjaCBhcyBhIFNwcml0ZSBvciBCb2R5LlxyXG4gKlxyXG4gKiBBbiBpbnRlcnNlY3Rpb24gaXMgY29uc2lkZXJlZCB2YWxpZCBpZjpcclxuICpcclxuICogVGhlIGxpbmUgc3RhcnRzIHdpdGhpbiwgb3IgZW5kcyB3aXRoaW4sIHRoZSBSZWN0YW5nbGUuXHJcbiAqIFRoZSBsaW5lIHNlZ21lbnQgaW50ZXJzZWN0cyBvbmUgb2YgdGhlIDQgcmVjdGFuZ2xlIGVkZ2VzLlxyXG4gKlxyXG4gKiBUaGUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGZ1bmN0aW9uIHJlY3RhbmdsZXMgYXJlIGNvbnNpZGVyZWQgJ3NvbGlkJy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuTGluZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBMaW5lIGFuZCB0aGUgUmVjdGFuZ2xlIGludGVyc2VjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqL1xyXG52YXIgTGluZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGxpbmUsIHJlY3QpXHJcbntcclxuICAgIHZhciB4MSA9IGxpbmUueDE7XHJcbiAgICB2YXIgeTEgPSBsaW5lLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IGxpbmUueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lLnkyO1xyXG5cclxuICAgIHZhciBieDEgPSByZWN0Lng7XHJcbiAgICB2YXIgYnkxID0gcmVjdC55O1xyXG4gICAgdmFyIGJ4MiA9IHJlY3QucmlnaHQ7XHJcbiAgICB2YXIgYnkyID0gcmVjdC5ib3R0b207XHJcblxyXG4gICAgdmFyIHQgPSAwO1xyXG5cclxuICAgIC8vICBJZiB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBsaW5lIGlzIGluc2lkZSB0aGUgcmVjdCB0aGVuIHdlIGFzc3VtZVxyXG4gICAgLy8gIGNvbGxpc2lvbiwgYXMgcmVjdHMgYXJlIHNvbGlkIGZvciBvdXIgdXNlLWNhc2UuXHJcblxyXG4gICAgaWYgKCh4MSA+PSBieDEgJiYgeDEgPD0gYngyICYmIHkxID49IGJ5MSAmJiB5MSA8PSBieTIpIHx8XHJcbiAgICAgICAgKHgyID49IGJ4MSAmJiB4MiA8PSBieDIgJiYgeTIgPj0gYnkxICYmIHkyIDw9IGJ5MikpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHgxIDwgYngxICYmIHgyID49IGJ4MSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTGVmdCBlZGdlXHJcbiAgICAgICAgdCA9IHkxICsgKHkyIC0geTEpICogKGJ4MSAtIHgxKSAvICh4MiAtIHgxKTtcclxuXHJcbiAgICAgICAgaWYgKHQgPiBieTEgJiYgdCA8PSBieTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh4MSA+IGJ4MiAmJiB4MiA8PSBieDIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJpZ2h0IGVkZ2VcclxuICAgICAgICB0ID0geTEgKyAoeTIgLSB5MSkgKiAoYngyIC0geDEpIC8gKHgyIC0geDEpO1xyXG5cclxuICAgICAgICBpZiAodCA+PSBieTEgJiYgdCA8PSBieTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHkxIDwgYnkxICYmIHkyID49IGJ5MSlcclxuICAgIHtcclxuICAgICAgICAvLyAgVG9wIGVkZ2VcclxuICAgICAgICB0ID0geDEgKyAoeDIgLSB4MSkgKiAoYnkxIC0geTEpIC8gKHkyIC0geTEpO1xyXG5cclxuICAgICAgICBpZiAodCA+PSBieDEgJiYgdCA8PSBieDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh5MSA+IGJ5MiAmJiB5MiA8PSBieTIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvdHRvbSBlZGdlXHJcbiAgICAgICAgdCA9IHgxICsgKHgyIC0geDEpICogKGJ5MiAtIHkxKSAvICh5MiAtIHkxKTtcclxuXHJcbiAgICAgICAgaWYgKHQgPj0gYngxICYmIHQgPD0gYngyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVRvUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/PointToLine.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/PointToLine.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Florian Mertens\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if the a Point falls between the two end-points of a Line, based on the given line thickness.\r\n * \r\n * Assumes that the line end points are circular, not square.\r\n *\r\n * @function Phaser.Geom.Intersects.PointToLine\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|any)} point - The point, or point-like object to check.\r\n * @param {Phaser.Geom.Line} line - The line segment to test for intersection on.\r\n * @param {number} [lineThickness=1] - The line thickness. Assumes that the line end points are circular.\r\n *\r\n * @return {boolean} `true` if the Point falls on the Line, otherwise `false`.\r\n */\r\nvar PointToLine = function (point, line, lineThickness)\r\n{\r\n    if (lineThickness === undefined) { lineThickness = 1; }\r\n\r\n    var x1 = line.x1;\r\n    var y1 = line.y1;\r\n\r\n    var x2 = line.x2;\r\n    var y2 = line.y2;\r\n\r\n    var px = point.x;\r\n    var py = point.y;\r\n\r\n    var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n    if (L2 === 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var r = (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1))) / L2;\r\n\r\n    //  Assume line thickness is circular\r\n    if (r < 0)\r\n    {\r\n        //  Outside line1\r\n        return (Math.sqrt(((x1 - px) * (x1 - px)) + ((y1 - py) * (y1 - py))) <= lineThickness);\r\n    }\r\n    else if ((r >= 0) && (r <= 1))\r\n    {\r\n        //  On the line segment\r\n        var s = (((y1 - py) * (x2 - x1)) - ((x1 - px) * (y2 - y1))) / L2;\r\n\r\n        return (Math.abs(s) * Math.sqrt(L2) <= lineThickness);\r\n    }\r\n    else\r\n    {\r\n        //  Outside line2\r\n        return (Math.sqrt(((x2 - px) * (x2 - px)) + ((y2 - py) * (y2 - py))) <= lineThickness);\r\n    }\r\n};\r\n\r\nmodule.exports = PointToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmUuanM/Yjk2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7O0FBRXpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBGbG9yaWFuIE1lcnRlbnNcclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdGhlIGEgUG9pbnQgZmFsbHMgYmV0d2VlbiB0aGUgdHdvIGVuZC1wb2ludHMgb2YgYSBMaW5lLCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbGluZSB0aGlja25lc3MuXHJcbiAqIFxyXG4gKiBBc3N1bWVzIHRoYXQgdGhlIGxpbmUgZW5kIHBvaW50cyBhcmUgY2lyY3VsYXIsIG5vdCBzcXVhcmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlBvaW50VG9MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxhbnkpfSBwb2ludCAtIFRoZSBwb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHNlZ21lbnQgdG8gdGVzdCBmb3IgaW50ZXJzZWN0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2xpbmVUaGlja25lc3M9MV0gLSBUaGUgbGluZSB0aGlja25lc3MuIEFzc3VtZXMgdGhhdCB0aGUgbGluZSBlbmQgcG9pbnRzIGFyZSBjaXJjdWxhci5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBQb2ludCBmYWxscyBvbiB0aGUgTGluZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgUG9pbnRUb0xpbmUgPSBmdW5jdGlvbiAocG9pbnQsIGxpbmUsIGxpbmVUaGlja25lc3MpXHJcbntcclxuICAgIGlmIChsaW5lVGhpY2tuZXNzID09PSB1bmRlZmluZWQpIHsgbGluZVRoaWNrbmVzcyA9IDE7IH1cclxuXHJcbiAgICB2YXIgeDEgPSBsaW5lLngxO1xyXG4gICAgdmFyIHkxID0gbGluZS55MTtcclxuXHJcbiAgICB2YXIgeDIgPSBsaW5lLngyO1xyXG4gICAgdmFyIHkyID0gbGluZS55MjtcclxuXHJcbiAgICB2YXIgcHggPSBwb2ludC54O1xyXG4gICAgdmFyIHB5ID0gcG9pbnQueTtcclxuXHJcbiAgICB2YXIgTDIgPSAoKCh4MiAtIHgxKSAqICh4MiAtIHgxKSkgKyAoKHkyIC0geTEpICogKHkyIC0geTEpKSk7XHJcblxyXG4gICAgaWYgKEwyID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgciA9ICgoKHB4IC0geDEpICogKHgyIC0geDEpKSArICgocHkgLSB5MSkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIC8vICBBc3N1bWUgbGluZSB0aGlja25lc3MgaXMgY2lyY3VsYXJcclxuICAgIGlmIChyIDwgMClcclxuICAgIHtcclxuICAgICAgICAvLyAgT3V0c2lkZSBsaW5lMVxyXG4gICAgICAgIHJldHVybiAoTWF0aC5zcXJ0KCgoeDEgLSBweCkgKiAoeDEgLSBweCkpICsgKCh5MSAtIHB5KSAqICh5MSAtIHB5KSkpIDw9IGxpbmVUaGlja25lc3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHIgPj0gMCkgJiYgKHIgPD0gMSkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE9uIHRoZSBsaW5lIHNlZ21lbnRcclxuICAgICAgICB2YXIgcyA9ICgoKHkxIC0gcHkpICogKHgyIC0geDEpKSAtICgoeDEgLSBweCkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgICAgICByZXR1cm4gKE1hdGguYWJzKHMpICogTWF0aC5zcXJ0KEwyKSA8PSBsaW5lVGhpY2tuZXNzKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgT3V0c2lkZSBsaW5lMlxyXG4gICAgICAgIHJldHVybiAoTWF0aC5zcXJ0KCgoeDIgLSBweCkgKiAoeDIgLSBweCkpICsgKCh5MiAtIHB5KSAqICh5MiAtIHB5KSkpIDw9IGxpbmVUaGlja25lc3MpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludFRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/PointToLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/PointToLineSegment.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/PointToLineSegment.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PointToLine = __webpack_require__(/*! ./PointToLine */ \"./node_modules/phaser/src/geom/intersects/PointToLine.js\");\r\n\r\n/**\r\n * Checks if a Point is located on the given line segment.\r\n *\r\n * @function Phaser.Geom.Intersects.PointToLineSegment\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to check for intersection.\r\n * @param {Phaser.Geom.Line} line - The line segment to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Point is on the given line segment, otherwise `false`.\r\n */\r\nvar PointToLineSegment = function (point, line)\r\n{\r\n    if (!PointToLine(point, line))\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var xMin = Math.min(line.x1, line.x2);\r\n    var xMax = Math.max(line.x1, line.x2);\r\n    var yMin = Math.min(line.y1, line.y2);\r\n    var yMax = Math.max(line.y1, line.y2);\r\n\r\n    return ((point.x >= xMin && point.x <= xMax) && (point.y >= yMin && point.y <= yMax));\r\n};\r\n\r\nmodule.exports = PointToLineSegment;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmVTZWdtZW50LmpzP2QxOWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLCtFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1BvaW50VG9MaW5lU2VnbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50VG9MaW5lID0gcmVxdWlyZSgnLi9Qb2ludFRvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIFBvaW50IGlzIGxvY2F0ZWQgb24gdGhlIGdpdmVuIGxpbmUgc2VnbWVudC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUG9pbnRUb0xpbmVTZWdtZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSBzZWdtZW50IHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgUG9pbnQgaXMgb24gdGhlIGdpdmVuIGxpbmUgc2VnbWVudCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgUG9pbnRUb0xpbmVTZWdtZW50ID0gZnVuY3Rpb24gKHBvaW50LCBsaW5lKVxyXG57XHJcbiAgICBpZiAoIVBvaW50VG9MaW5lKHBvaW50LCBsaW5lKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHhNaW4gPSBNYXRoLm1pbihsaW5lLngxLCBsaW5lLngyKTtcclxuICAgIHZhciB4TWF4ID0gTWF0aC5tYXgobGluZS54MSwgbGluZS54Mik7XHJcbiAgICB2YXIgeU1pbiA9IE1hdGgubWluKGxpbmUueTEsIGxpbmUueTIpO1xyXG4gICAgdmFyIHlNYXggPSBNYXRoLm1heChsaW5lLnkxLCBsaW5lLnkyKTtcclxuXHJcbiAgICByZXR1cm4gKChwb2ludC54ID49IHhNaW4gJiYgcG9pbnQueCA8PSB4TWF4KSAmJiAocG9pbnQueSA+PSB5TWluICYmIHBvaW50LnkgPD0geU1heCkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludFRvTGluZVNlZ21lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/PointToLineSegment.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if two Rectangles intersect.\r\n *\r\n * A Rectangle intersects another Rectangle if any part of its bounds is within the other Rectangle's bounds.\r\n * As such, the two Rectangles are considered \"solid\".\r\n * A Rectangle with no width or no height will never intersect another Rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check for intersection.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the two Rectangles intersect, otherwise `false`.\r\n */\r\nvar RectangleToRectangle = function (rectA, rectB)\r\n{\r\n    if (rectA.width <= 0 || rectA.height <= 0 || rectB.width <= 0 || rectB.height <= 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    return !(rectA.right < rectB.x || rectA.bottom < rectB.y || rectA.x > rectB.right || rectA.y > rectB.bottom);\r\n};\r\n\r\nmodule.exports = RectangleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9SZWN0YW5nbGUuanM/YWM4MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1JlY3RhbmdsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGVzIGludGVyc2VjdC5cclxuICpcclxuICogQSBSZWN0YW5nbGUgaW50ZXJzZWN0cyBhbm90aGVyIFJlY3RhbmdsZSBpZiBhbnkgcGFydCBvZiBpdHMgYm91bmRzIGlzIHdpdGhpbiB0aGUgb3RoZXIgUmVjdGFuZ2xlJ3MgYm91bmRzLlxyXG4gKiBBcyBzdWNoLCB0aGUgdHdvIFJlY3RhbmdsZXMgYXJlIGNvbnNpZGVyZWQgXCJzb2xpZFwiLlxyXG4gKiBBIFJlY3RhbmdsZSB3aXRoIG5vIHdpZHRoIG9yIG5vIGhlaWdodCB3aWxsIG5ldmVyIGludGVyc2VjdCBhbm90aGVyIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9SZWN0YW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RCIC0gVGhlIHNlY29uZCBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gUmVjdGFuZ2xlcyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFJlY3RhbmdsZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qilcclxue1xyXG4gICAgaWYgKHJlY3RBLndpZHRoIDw9IDAgfHwgcmVjdEEuaGVpZ2h0IDw9IDAgfHwgcmVjdEIud2lkdGggPD0gMCB8fCByZWN0Qi5oZWlnaHQgPD0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEocmVjdEEucmlnaHQgPCByZWN0Qi54IHx8IHJlY3RBLmJvdHRvbSA8IHJlY3RCLnkgfHwgcmVjdEEueCA+IHJlY3RCLnJpZ2h0IHx8IHJlY3RBLnkgPiByZWN0Qi5ib3R0b20pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\nvar Contains = __webpack_require__(/*! ../rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar ContainsArray = __webpack_require__(/*! ../triangle/ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nvar Decompose = __webpack_require__(/*! ../rectangle/Decompose */ \"./node_modules/phaser/src/geom/rectangle/Decompose.js\");\r\n\r\n/**\r\n * Checks for intersection between Rectangle shape and Triangle shape.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle object to test.\r\n * @param {Phaser.Geom.Triangle} triangle - Triangle object to test.\r\n *\r\n * @return {boolean} A value of `true` if objects intersect; otherwise `false`.\r\n */\r\nvar RectangleToTriangle = function (rect, triangle)\r\n{\r\n    //  First the cheapest ones:\r\n\r\n    if (\r\n        triangle.left > rect.right ||\r\n        triangle.right < rect.left ||\r\n        triangle.top > rect.bottom ||\r\n        triangle.bottom < rect.top)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var triA = triangle.getLineA();\r\n    var triB = triangle.getLineB();\r\n    var triC = triangle.getLineC();\r\n\r\n    //  Are any of the triangle points within the rectangle?\r\n\r\n    if (Contains(rect, triA.x1, triA.y1) || Contains(rect, triA.x2, triA.y2))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (Contains(rect, triB.x1, triB.y1) || Contains(rect, triB.x2, triB.y2))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (Contains(rect, triC.x1, triC.y1) || Contains(rect, triC.x2, triC.y2))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    //  Cheap tests over, now to see if any of the lines intersect ...\r\n\r\n    var rectA = rect.getLineA();\r\n    var rectB = rect.getLineB();\r\n    var rectC = rect.getLineC();\r\n    var rectD = rect.getLineD();\r\n\r\n    if (LineToLine(triA, rectA) || LineToLine(triA, rectB) || LineToLine(triA, rectC) || LineToLine(triA, rectD))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(triB, rectA) || LineToLine(triB, rectB) || LineToLine(triB, rectC) || LineToLine(triB, rectD))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(triC, rectA) || LineToLine(triC, rectB) || LineToLine(triC, rectC) || LineToLine(triC, rectD))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    //  None of the lines intersect, so are any rectangle points within the triangle?\r\n\r\n    var points = Decompose(rect);\r\n    var within = ContainsArray(triangle, points, true);\r\n\r\n    return (within.length > 0);\r\n};\r\n\r\nmodule.exports = RectangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9UcmlhbmdsZS5qcz9mMTExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYztBQUN2QyxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLG9CQUFvQixtQkFBTyxDQUFDLDJGQUEyQjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSxRQUFRLHdDQUF3QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIExpbmVUb0xpbmUgPSByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL0NvbnRhaW5zJyk7XHJcbnZhciBDb250YWluc0FycmF5ID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnNBcnJheScpO1xyXG52YXIgRGVjb21wb3NlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL0RlY29tcG9zZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgaW50ZXJzZWN0aW9uIGJldHdlZW4gUmVjdGFuZ2xlIHNoYXBlIGFuZCBUcmlhbmdsZSBzaGFwZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBSZWN0YW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVHJpYW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IEEgdmFsdWUgb2YgYHRydWVgIGlmIG9iamVjdHMgaW50ZXJzZWN0OyBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBSZWN0YW5nbGVUb1RyaWFuZ2xlID0gZnVuY3Rpb24gKHJlY3QsIHRyaWFuZ2xlKVxyXG57XHJcbiAgICAvLyAgRmlyc3QgdGhlIGNoZWFwZXN0IG9uZXM6XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHRyaWFuZ2xlLmxlZnQgPiByZWN0LnJpZ2h0IHx8XHJcbiAgICAgICAgdHJpYW5nbGUucmlnaHQgPCByZWN0LmxlZnQgfHxcclxuICAgICAgICB0cmlhbmdsZS50b3AgPiByZWN0LmJvdHRvbSB8fFxyXG4gICAgICAgIHRyaWFuZ2xlLmJvdHRvbSA8IHJlY3QudG9wKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdHJpQSA9IHRyaWFuZ2xlLmdldExpbmVBKCk7XHJcbiAgICB2YXIgdHJpQiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICB2YXIgdHJpQyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgLy8gIEFyZSBhbnkgb2YgdGhlIHRyaWFuZ2xlIHBvaW50cyB3aXRoaW4gdGhlIHJlY3RhbmdsZT9cclxuXHJcbiAgICBpZiAoQ29udGFpbnMocmVjdCwgdHJpQS54MSwgdHJpQS55MSkgfHwgQ29udGFpbnMocmVjdCwgdHJpQS54MiwgdHJpQS55MikpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENvbnRhaW5zKHJlY3QsIHRyaUIueDEsIHRyaUIueTEpIHx8IENvbnRhaW5zKHJlY3QsIHRyaUIueDIsIHRyaUIueTIpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDb250YWlucyhyZWN0LCB0cmlDLngxLCB0cmlDLnkxKSB8fCBDb250YWlucyhyZWN0LCB0cmlDLngyLCB0cmlDLnkyKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQ2hlYXAgdGVzdHMgb3Zlciwgbm93IHRvIHNlZSBpZiBhbnkgb2YgdGhlIGxpbmVzIGludGVyc2VjdCAuLi5cclxuXHJcbiAgICB2YXIgcmVjdEEgPSByZWN0LmdldExpbmVBKCk7XHJcbiAgICB2YXIgcmVjdEIgPSByZWN0LmdldExpbmVCKCk7XHJcbiAgICB2YXIgcmVjdEMgPSByZWN0LmdldExpbmVDKCk7XHJcbiAgICB2YXIgcmVjdEQgPSByZWN0LmdldExpbmVEKCk7XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpQSwgcmVjdEEpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEIpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEMpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEQpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9MaW5lKHRyaUIsIHJlY3RBKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3RCKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3RDKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3REKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTGluZVRvTGluZSh0cmlDLCByZWN0QSkgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0QikgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0QykgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0RCkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIE5vbmUgb2YgdGhlIGxpbmVzIGludGVyc2VjdCwgc28gYXJlIGFueSByZWN0YW5nbGUgcG9pbnRzIHdpdGhpbiB0aGUgdHJpYW5nbGU/XHJcblxyXG4gICAgdmFyIHBvaW50cyA9IERlY29tcG9zZShyZWN0KTtcclxuICAgIHZhciB3aXRoaW4gPSBDb250YWluc0FycmF5KHRyaWFuZ2xlLCBwb2ludHMsIHRydWUpO1xyXG5cclxuICAgIHJldHVybiAod2l0aGluLmxlbmd0aCA+IDApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGVUb1RyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToValues.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/RectangleToValues.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check if rectangle intersects with values.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToValues\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle object\r\n * @param {number} left - The x coordinate of the left of the Rectangle.\r\n * @param {number} right - The x coordinate of the right of the Rectangle.\r\n * @param {number} top - The y coordinate of the top of the Rectangle.\r\n * @param {number} bottom - The y coordinate of the bottom of the Rectangle.\r\n * @param {number} [tolerance=0] - Tolerance allowed in the calculation, expressed in pixels.\r\n *\r\n * @return {boolean} Returns true if there is an intersection.\r\n */\r\nvar RectangleToValues = function (rect, left, right, top, bottom, tolerance)\r\n{\r\n    if (tolerance === undefined) { tolerance = 0; }\r\n\r\n    return !(\r\n        left > rect.right + tolerance ||\r\n        right < rect.left - tolerance ||\r\n        top > rect.bottom + tolerance ||\r\n        bottom < rect.top - tolerance\r\n    );\r\n};\r\n\r\nmodule.exports = RectangleToValues;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9WYWx1ZXMuanM/NjZiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9WYWx1ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiByZWN0YW5nbGUgaW50ZXJzZWN0cyB3aXRoIHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9WYWx1ZXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZSBvYmplY3RcclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3Agb2YgdGhlIFJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RvbGVyYW5jZT0wXSAtIFRvbGVyYW5jZSBhbGxvd2VkIGluIHRoZSBjYWxjdWxhdGlvbiwgZXhwcmVzc2VkIGluIHBpeGVscy5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbi5cclxuICovXHJcbnZhciBSZWN0YW5nbGVUb1ZhbHVlcyA9IGZ1bmN0aW9uIChyZWN0LCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIHRvbGVyYW5jZSlcclxue1xyXG4gICAgaWYgKHRvbGVyYW5jZSA9PT0gdW5kZWZpbmVkKSB7IHRvbGVyYW5jZSA9IDA7IH1cclxuXHJcbiAgICByZXR1cm4gIShcclxuICAgICAgICBsZWZ0ID4gcmVjdC5yaWdodCArIHRvbGVyYW5jZSB8fFxyXG4gICAgICAgIHJpZ2h0IDwgcmVjdC5sZWZ0IC0gdG9sZXJhbmNlIHx8XHJcbiAgICAgICAgdG9wID4gcmVjdC5ib3R0b20gKyB0b2xlcmFuY2UgfHxcclxuICAgICAgICBib3R0b20gPCByZWN0LnRvcCAtIHRvbGVyYW5jZVxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlVG9WYWx1ZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToValues.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToCircle.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/TriangleToCircle.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineToCircle = __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\");\r\nvar Contains = __webpack_require__(/*! ../triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Circle intersect.\r\n *\r\n * A Circle intersects a Triangle if its center is located within it or if any of the Triangle's sides intersect the Circle. As such, the Triangle and the Circle are considered \"solid\" for the intersection.\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Triangle and the `Circle` intersect, otherwise `false`.\r\n */\r\nvar TriangleToCircle = function (triangle, circle)\r\n{\r\n    //  First the cheapest ones:\r\n\r\n    if (\r\n        triangle.left > circle.right ||\r\n        triangle.right < circle.left ||\r\n        triangle.top > circle.bottom ||\r\n        triangle.bottom < circle.top)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    if (Contains(triangle, circle.x, circle.y))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToCircle(triangle.getLineA(), circle))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToCircle(triangle.getLineB(), circle))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToCircle(triangle.getLineC(), circle))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = TriangleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb0NpcmNsZS5qcz83YmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxpRkFBZ0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLGlGQUFzQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9UcmlhbmdsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9MaW5lVG9DaXJjbGUnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBDaXJjbGUgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBBIENpcmNsZSBpbnRlcnNlY3RzIGEgVHJpYW5nbGUgaWYgaXRzIGNlbnRlciBpcyBsb2NhdGVkIHdpdGhpbiBpdCBvciBpZiBhbnkgb2YgdGhlIFRyaWFuZ2xlJ3Mgc2lkZXMgaW50ZXJzZWN0IHRoZSBDaXJjbGUuIEFzIHN1Y2gsIHRoZSBUcmlhbmdsZSBhbmQgdGhlIENpcmNsZSBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIgZm9yIHRoZSBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgVHJpYW5nbGUgYW5kIHRoZSBgQ2lyY2xlYCBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlVG9DaXJjbGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGNpcmNsZSlcclxue1xyXG4gICAgLy8gIEZpcnN0IHRoZSBjaGVhcGVzdCBvbmVzOlxyXG5cclxuICAgIGlmIChcclxuICAgICAgICB0cmlhbmdsZS5sZWZ0ID4gY2lyY2xlLnJpZ2h0IHx8XHJcbiAgICAgICAgdHJpYW5nbGUucmlnaHQgPCBjaXJjbGUubGVmdCB8fFxyXG4gICAgICAgIHRyaWFuZ2xlLnRvcCA+IGNpcmNsZS5ib3R0b20gfHxcclxuICAgICAgICB0cmlhbmdsZS5ib3R0b20gPCBjaXJjbGUudG9wKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ29udGFpbnModHJpYW5nbGUsIGNpcmNsZS54LCBjaXJjbGUueSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0NpcmNsZSh0cmlhbmdsZS5nZXRMaW5lQSgpLCBjaXJjbGUpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9DaXJjbGUodHJpYW5nbGUuZ2V0TGluZUIoKSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTGluZVRvQ2lyY2xlKHRyaWFuZ2xlLmdldExpbmVDKCksIGNpcmNsZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToLine.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/TriangleToLine.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ../triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Line intersect.\r\n * \r\n * The Line intersects the Triangle if it starts inside of it, ends inside of it, or crosses any of the Triangle's sides. Thus, the Triangle is considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check with.\r\n * @param {Phaser.Geom.Line} line - The Line to check with.\r\n *\r\n * @return {boolean} `true` if the Triangle and the Line intersect, otherwise `false`.\r\n */\r\nvar TriangleToLine = function (triangle, line)\r\n{\r\n    //  If the Triangle contains either the start or end point of the line, it intersects\r\n    if (Contains(triangle, line.getPointA()) || Contains(triangle, line.getPointB()))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    //  Now check the line against each line of the Triangle\r\n    if (LineToLine(triangle.getLineA(), line))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(triangle.getLineB(), line))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(triangle.getLineC(), line))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = TriangleToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb0xpbmUuanM/YzZlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGlGQUFzQjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1RyaWFuZ2xlVG9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuLi90cmlhbmdsZS9Db250YWlucycpO1xyXG52YXIgTGluZVRvTGluZSA9IHJlcXVpcmUoJy4vTGluZVRvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIFRyaWFuZ2xlIGFuZCBhIExpbmUgaW50ZXJzZWN0LlxyXG4gKiBcclxuICogVGhlIExpbmUgaW50ZXJzZWN0cyB0aGUgVHJpYW5nbGUgaWYgaXQgc3RhcnRzIGluc2lkZSBvZiBpdCwgZW5kcyBpbnNpZGUgb2YgaXQsIG9yIGNyb3NzZXMgYW55IG9mIHRoZSBUcmlhbmdsZSdzIHNpZGVzLiBUaHVzLCB0aGUgVHJpYW5nbGUgaXMgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBjaGVjayB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBjaGVjayB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFRyaWFuZ2xlIGFuZCB0aGUgTGluZSBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlVG9MaW5lID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBsaW5lKVxyXG57XHJcbiAgICAvLyAgSWYgdGhlIFRyaWFuZ2xlIGNvbnRhaW5zIGVpdGhlciB0aGUgc3RhcnQgb3IgZW5kIHBvaW50IG9mIHRoZSBsaW5lLCBpdCBpbnRlcnNlY3RzXHJcbiAgICBpZiAoQ29udGFpbnModHJpYW5nbGUsIGxpbmUuZ2V0UG9pbnRBKCkpIHx8IENvbnRhaW5zKHRyaWFuZ2xlLCBsaW5lLmdldFBvaW50QigpKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm93IGNoZWNrIHRoZSBsaW5lIGFnYWluc3QgZWFjaCBsaW5lIG9mIHRoZSBUcmlhbmdsZVxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUEoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUIoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUMoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZVRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToLine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ContainsArray = __webpack_require__(/*! ../triangle/ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nvar Decompose = __webpack_require__(/*! ../triangle/Decompose */ \"./node_modules/phaser/src/geom/triangle/Decompose.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if two Triangles intersect.\r\n *\r\n * A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.\r\n * @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Triangles intersect, otherwise `false`.\r\n */\r\nvar TriangleToTriangle = function (triangleA, triangleB)\r\n{\r\n    //  First the cheapest ones:\r\n\r\n    if (\r\n        triangleA.left > triangleB.right ||\r\n        triangleA.right < triangleB.left ||\r\n        triangleA.top > triangleB.bottom ||\r\n        triangleA.bottom < triangleB.top)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var lineAA = triangleA.getLineA();\r\n    var lineAB = triangleA.getLineB();\r\n    var lineAC = triangleA.getLineC();\r\n\r\n    var lineBA = triangleB.getLineA();\r\n    var lineBB = triangleB.getLineB();\r\n    var lineBC = triangleB.getLineC();\r\n\r\n    //  Now check the lines against each line of TriangleB\r\n    if (LineToLine(lineAA, lineBA) || LineToLine(lineAA, lineBB) || LineToLine(lineAA, lineBC))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(lineAB, lineBA) || LineToLine(lineAB, lineBB) || LineToLine(lineAB, lineBC))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    if (LineToLine(lineAC, lineBA) || LineToLine(lineAC, lineBB) || LineToLine(lineAC, lineBC))\r\n    {\r\n        return true;\r\n    }\r\n\r\n    //  Nope, so check to see if any of the points of triangleA are within triangleB\r\n\r\n    var points = Decompose(triangleA);\r\n    var within = ContainsArray(triangleB, points, true);\r\n\r\n    if (within.length > 0)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    //  Finally check to see if any of the points of triangleB are within triangleA\r\n\r\n    points = Decompose(triangleB);\r\n    within = ContainsArray(triangleA, points, true);\r\n\r\n    if (within.length > 0)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = TriangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb1RyaWFuZ2xlLmpzPzA2YjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLDJGQUEyQjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsNkVBQWM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9UcmlhbmdsZVRvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWluc0FycmF5ID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnNBcnJheScpO1xyXG52YXIgRGVjb21wb3NlID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvRGVjb21wb3NlJyk7XHJcbnZhciBMaW5lVG9MaW5lID0gcmVxdWlyZSgnLi9MaW5lVG9MaW5lJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBUcmlhbmdsZXMgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBBIFRyaWFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBUcmlhbmdsZSBpZiBhbnkgcGFpciBvZiB0aGVpciBsaW5lcyBpbnRlcnNlY3RzIG9yIGlmIGFueSBwb2ludCBvZiBvbmUgVHJpYW5nbGUgaXMgd2l0aGluIHRoZSBvdGhlciBUcmlhbmdsZS4gVGh1cywgdGhlIFRyaWFuZ2xlcyBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGVBIC0gVGhlIGZpcnN0IFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlQiAtIFRoZSBzZWNvbmQgVHJpYW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBUcmlhbmdsZXMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBUcmlhbmdsZVRvVHJpYW5nbGUgPSBmdW5jdGlvbiAodHJpYW5nbGVBLCB0cmlhbmdsZUIpXHJcbntcclxuICAgIC8vICBGaXJzdCB0aGUgY2hlYXBlc3Qgb25lczpcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICAgdHJpYW5nbGVBLmxlZnQgPiB0cmlhbmdsZUIucmlnaHQgfHxcclxuICAgICAgICB0cmlhbmdsZUEucmlnaHQgPCB0cmlhbmdsZUIubGVmdCB8fFxyXG4gICAgICAgIHRyaWFuZ2xlQS50b3AgPiB0cmlhbmdsZUIuYm90dG9tIHx8XHJcbiAgICAgICAgdHJpYW5nbGVBLmJvdHRvbSA8IHRyaWFuZ2xlQi50b3ApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaW5lQUEgPSB0cmlhbmdsZUEuZ2V0TGluZUEoKTtcclxuICAgIHZhciBsaW5lQUIgPSB0cmlhbmdsZUEuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lQUMgPSB0cmlhbmdsZUEuZ2V0TGluZUMoKTtcclxuXHJcbiAgICB2YXIgbGluZUJBID0gdHJpYW5nbGVCLmdldExpbmVBKCk7XHJcbiAgICB2YXIgbGluZUJCID0gdHJpYW5nbGVCLmdldExpbmVCKCk7XHJcbiAgICB2YXIgbGluZUJDID0gdHJpYW5nbGVCLmdldExpbmVDKCk7XHJcblxyXG4gICAgLy8gIE5vdyBjaGVjayB0aGUgbGluZXMgYWdhaW5zdCBlYWNoIGxpbmUgb2YgVHJpYW5nbGVCXHJcbiAgICBpZiAoTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQSkgfHwgTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQikgfHwgTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQykpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkEpIHx8IExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkIpIHx8IExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkMpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJBKSB8fCBMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJCKSB8fCBMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJDKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm9wZSwgc28gY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgcG9pbnRzIG9mIHRyaWFuZ2xlQSBhcmUgd2l0aGluIHRyaWFuZ2xlQlxyXG5cclxuICAgIHZhciBwb2ludHMgPSBEZWNvbXBvc2UodHJpYW5nbGVBKTtcclxuICAgIHZhciB3aXRoaW4gPSBDb250YWluc0FycmF5KHRyaWFuZ2xlQiwgcG9pbnRzLCB0cnVlKTtcclxuXHJcbiAgICBpZiAod2l0aGluLmxlbmd0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEZpbmFsbHkgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgcG9pbnRzIG9mIHRyaWFuZ2xlQiBhcmUgd2l0aGluIHRyaWFuZ2xlQVxyXG5cclxuICAgIHBvaW50cyA9IERlY29tcG9zZSh0cmlhbmdsZUIpO1xyXG4gICAgd2l0aGluID0gQ29udGFpbnNBcnJheSh0cmlhbmdsZUEsIHBvaW50cywgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHdpdGhpbi5sZW5ndGggPiAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJpYW5nbGVUb1RyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/intersects/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/intersects/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Geom.Intersects\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CircleToCircle: __webpack_require__(/*! ./CircleToCircle */ \"./node_modules/phaser/src/geom/intersects/CircleToCircle.js\"),\r\n    CircleToRectangle: __webpack_require__(/*! ./CircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\"),\r\n    GetCircleToCircle: __webpack_require__(/*! ./GetCircleToCircle */ \"./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js\"),\r\n    GetCircleToRectangle: __webpack_require__(/*! ./GetCircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js\"),\r\n    GetLineToCircle: __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\"),\r\n    GetLineToRectangle: __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\"),\r\n    GetRectangleIntersection: __webpack_require__(/*! ./GetRectangleIntersection */ \"./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js\"),\r\n    GetRectangleToRectangle: __webpack_require__(/*! ./GetRectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js\"),\r\n    GetRectangleToTriangle: __webpack_require__(/*! ./GetRectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js\"),\r\n    GetTriangleToCircle: __webpack_require__(/*! ./GetTriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js\"),\r\n    GetTriangleToLine: __webpack_require__(/*! ./GetTriangleToLine */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\"),\r\n    GetTriangleToTriangle: __webpack_require__(/*! ./GetTriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js\"),\r\n    LineToCircle: __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\"),\r\n    LineToLine: __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\"),\r\n    LineToRectangle: __webpack_require__(/*! ./LineToRectangle */ \"./node_modules/phaser/src/geom/intersects/LineToRectangle.js\"),\r\n    PointToLine: __webpack_require__(/*! ./PointToLine */ \"./node_modules/phaser/src/geom/intersects/PointToLine.js\"),\r\n    PointToLineSegment: __webpack_require__(/*! ./PointToLineSegment */ \"./node_modules/phaser/src/geom/intersects/PointToLineSegment.js\"),\r\n    RectangleToRectangle: __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\"),\r\n    RectangleToTriangle: __webpack_require__(/*! ./RectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\"),\r\n    RectangleToValues: __webpack_require__(/*! ./RectangleToValues */ \"./node_modules/phaser/src/geom/intersects/RectangleToValues.js\"),\r\n    TriangleToCircle: __webpack_require__(/*! ./TriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\"),\r\n    TriangleToLine: __webpack_require__(/*! ./TriangleToLine */ \"./node_modules/phaser/src/geom/intersects/TriangleToLine.js\"),\r\n    TriangleToTriangle: __webpack_require__(/*! ./TriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvaW5kZXguanM/OWMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHFGQUFrQjtBQUM5Qyx1QkFBdUIsbUJBQU8sQ0FBQywyRkFBcUI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsMkZBQXFCO0FBQ3BELDBCQUEwQixtQkFBTyxDQUFDLGlHQUF3QjtBQUMxRCxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3RELDhCQUE4QixtQkFBTyxDQUFDLHlHQUE0QjtBQUNsRSw2QkFBNkIsbUJBQU8sQ0FBQyx1R0FBMkI7QUFDaEUsNEJBQTRCLG1CQUFPLENBQUMscUdBQTBCO0FBQzlELHlCQUF5QixtQkFBTyxDQUFDLCtGQUF1QjtBQUN4RCx1QkFBdUIsbUJBQU8sQ0FBQywyRkFBcUI7QUFDcEQsMkJBQTJCLG1CQUFPLENBQUMsbUdBQXlCO0FBQzVELGtCQUFrQixtQkFBTyxDQUFDLGlGQUFnQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBYztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsK0VBQWU7QUFDeEMsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3RELDBCQUEwQixtQkFBTyxDQUFDLGlHQUF3QjtBQUMxRCx5QkFBeUIsbUJBQU8sQ0FBQywrRkFBdUI7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMsMkZBQXFCO0FBQ3BELHNCQUFzQixtQkFBTyxDQUFDLHlGQUFvQjtBQUNsRCxvQkFBb0IsbUJBQU8sQ0FBQyxxRkFBa0I7QUFDOUMsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCOztBQUV0RCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdlb20uSW50ZXJzZWN0c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENpcmNsZVRvQ2lyY2xlOiByZXF1aXJlKCcuL0NpcmNsZVRvQ2lyY2xlJyksXHJcbiAgICBDaXJjbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9DaXJjbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgR2V0Q2lyY2xlVG9DaXJjbGU6IHJlcXVpcmUoJy4vR2V0Q2lyY2xlVG9DaXJjbGUnKSxcclxuICAgIEdldENpcmNsZVRvUmVjdGFuZ2xlOiByZXF1aXJlKCcuL0dldENpcmNsZVRvUmVjdGFuZ2xlJyksXHJcbiAgICBHZXRMaW5lVG9DaXJjbGU6IHJlcXVpcmUoJy4vR2V0TGluZVRvQ2lyY2xlJyksXHJcbiAgICBHZXRMaW5lVG9SZWN0YW5nbGU6IHJlcXVpcmUoJy4vR2V0TGluZVRvUmVjdGFuZ2xlJyksXHJcbiAgICBHZXRSZWN0YW5nbGVJbnRlcnNlY3Rpb246IHJlcXVpcmUoJy4vR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uJyksXHJcbiAgICBHZXRSZWN0YW5nbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9HZXRSZWN0YW5nbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZTogcmVxdWlyZSgnLi9HZXRSZWN0YW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBHZXRUcmlhbmdsZVRvQ2lyY2xlOiByZXF1aXJlKCcuL0dldFRyaWFuZ2xlVG9DaXJjbGUnKSxcclxuICAgIEdldFRyaWFuZ2xlVG9MaW5lOiByZXF1aXJlKCcuL0dldFRyaWFuZ2xlVG9MaW5lJyksXHJcbiAgICBHZXRUcmlhbmdsZVRvVHJpYW5nbGU6IHJlcXVpcmUoJy4vR2V0VHJpYW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBMaW5lVG9DaXJjbGU6IHJlcXVpcmUoJy4vTGluZVRvQ2lyY2xlJyksXHJcbiAgICBMaW5lVG9MaW5lOiByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKSxcclxuICAgIExpbmVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9MaW5lVG9SZWN0YW5nbGUnKSxcclxuICAgIFBvaW50VG9MaW5lOiByZXF1aXJlKCcuL1BvaW50VG9MaW5lJyksXHJcbiAgICBQb2ludFRvTGluZVNlZ21lbnQ6IHJlcXVpcmUoJy4vUG9pbnRUb0xpbmVTZWdtZW50JyksXHJcbiAgICBSZWN0YW5nbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgUmVjdGFuZ2xlVG9UcmlhbmdsZTogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBSZWN0YW5nbGVUb1ZhbHVlczogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1ZhbHVlcycpLFxyXG4gICAgVHJpYW5nbGVUb0NpcmNsZTogcmVxdWlyZSgnLi9UcmlhbmdsZVRvQ2lyY2xlJyksXHJcbiAgICBUcmlhbmdsZVRvTGluZTogcmVxdWlyZSgnLi9UcmlhbmdsZVRvTGluZScpLFxyXG4gICAgVHJpYW5nbGVUb1RyaWFuZ2xlOiByZXF1aXJlKCcuL1RyaWFuZ2xlVG9UcmlhbmdsZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Angle.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Angle.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the angle of the line in radians.\r\n *\r\n * @function Phaser.Geom.Line.Angle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the angle of.\r\n *\r\n * @return {number} The angle of the line, in radians.\r\n */\r\nvar Angle = function (line)\r\n{\r\n    return Math.atan2(line.y2 - line.y1, line.x2 - line.x1);\r\n};\r\n\r\nmodule.exports = Angle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQW5nbGUuanM/OTVlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9BbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgYW5nbGUgb2YgdGhlIGxpbmUgaW4gcmFkaWFucy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuQW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgYW5nbGUgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFuZ2xlIG9mIHRoZSBsaW5lLCBpbiByYWRpYW5zLlxyXG4gKi9cclxudmFyIEFuZ2xlID0gZnVuY3Rpb24gKGxpbmUpXHJcbntcclxuICAgIHJldHVybiBNYXRoLmF0YW4yKGxpbmUueTIgLSBsaW5lLnkxLCBsaW5lLngyIC0gbGluZS54MSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Angle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/BresenhamPoints.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/BresenhamPoints.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Using Bresenham's line algorithm this will return an array of all coordinates on this line.\r\n *\r\n * The `start` and `end` points are rounded before this runs as the algorithm works on integers.\r\n *\r\n * @function Phaser.Geom.Line.BresenhamPoints\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {integer} [stepRate=1] - The optional step rate for the points on the line.\r\n * @param {array} [results] - An optional array to push the resulting coordinates into.\r\n *\r\n * @return {object[]} The array of coordinates on the line.\r\n */\r\nvar BresenhamPoints = function (line, stepRate, results)\r\n{\r\n    if (stepRate === undefined) { stepRate = 1; }\r\n    if (results === undefined) { results = []; }\r\n\r\n    var x1 = Math.round(line.x1);\r\n    var y1 = Math.round(line.y1);\r\n    var x2 = Math.round(line.x2);\r\n    var y2 = Math.round(line.y2);\r\n\r\n    var dx = Math.abs(x2 - x1);\r\n    var dy = Math.abs(y2 - y1);\r\n    var sx = (x1 < x2) ? 1 : -1;\r\n    var sy = (y1 < y2) ? 1 : -1;\r\n    var err = dx - dy;\r\n\r\n    results.push({ x: x1, y: y1 });\r\n\r\n    var i = 1;\r\n\r\n    while (!((x1 === x2) && (y1 === y2)))\r\n    {\r\n        var e2 = err << 1;\r\n\r\n        if (e2 > -dy)\r\n        {\r\n            err -= dy;\r\n            x1 += sx;\r\n        }\r\n\r\n        if (e2 < dx)\r\n        {\r\n            err += dx;\r\n            y1 += sy;\r\n        }\r\n\r\n        if (i % stepRate === 0)\r\n        {\r\n            results.push({ x: x1, y: y1 });\r\n        }\r\n\r\n        i++;\r\n    }\r\n\r\n    return results;\r\n};\r\n\r\nmodule.exports = BresenhamPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzLmpzPzYzNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DLGdDQUFnQyxjQUFjOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsZUFBZTtBQUN6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNpbmcgQnJlc2VuaGFtJ3MgbGluZSBhbGdvcml0aG0gdGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBhbGwgY29vcmRpbmF0ZXMgb24gdGhpcyBsaW5lLlxyXG4gKlxyXG4gKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnRzIGFyZSByb3VuZGVkIGJlZm9yZSB0aGlzIHJ1bnMgYXMgdGhlIGFsZ29yaXRobSB3b3JrcyBvbiBpbnRlZ2Vycy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuQnJlc2VuaGFtUG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RlcFJhdGU9MV0gLSBUaGUgb3B0aW9uYWwgc3RlcCByYXRlIGZvciB0aGUgcG9pbnRzIG9uIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbcmVzdWx0c10gLSBBbiBvcHRpb25hbCBhcnJheSB0byBwdXNoIHRoZSByZXN1bHRpbmcgY29vcmRpbmF0ZXMgaW50by5cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0W119IFRoZSBhcnJheSBvZiBjb29yZGluYXRlcyBvbiB0aGUgbGluZS5cclxuICovXHJcbnZhciBCcmVzZW5oYW1Qb2ludHMgPSBmdW5jdGlvbiAobGluZSwgc3RlcFJhdGUsIHJlc3VsdHMpXHJcbntcclxuICAgIGlmIChzdGVwUmF0ZSA9PT0gdW5kZWZpbmVkKSB7IHN0ZXBSYXRlID0gMTsgfVxyXG4gICAgaWYgKHJlc3VsdHMgPT09IHVuZGVmaW5lZCkgeyByZXN1bHRzID0gW107IH1cclxuXHJcbiAgICB2YXIgeDEgPSBNYXRoLnJvdW5kKGxpbmUueDEpO1xyXG4gICAgdmFyIHkxID0gTWF0aC5yb3VuZChsaW5lLnkxKTtcclxuICAgIHZhciB4MiA9IE1hdGgucm91bmQobGluZS54Mik7XHJcbiAgICB2YXIgeTIgPSBNYXRoLnJvdW5kKGxpbmUueTIpO1xyXG5cclxuICAgIHZhciBkeCA9IE1hdGguYWJzKHgyIC0geDEpO1xyXG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeTIgLSB5MSk7XHJcbiAgICB2YXIgc3ggPSAoeDEgPCB4MikgPyAxIDogLTE7XHJcbiAgICB2YXIgc3kgPSAoeTEgPCB5MikgPyAxIDogLTE7XHJcbiAgICB2YXIgZXJyID0gZHggLSBkeTtcclxuXHJcbiAgICByZXN1bHRzLnB1c2goeyB4OiB4MSwgeTogeTEgfSk7XHJcblxyXG4gICAgdmFyIGkgPSAxO1xyXG5cclxuICAgIHdoaWxlICghKCh4MSA9PT0geDIpICYmICh5MSA9PT0geTIpKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZTIgPSBlcnIgPDwgMTtcclxuXHJcbiAgICAgICAgaWYgKGUyID4gLWR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZXJyIC09IGR5O1xyXG4gICAgICAgICAgICB4MSArPSBzeDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlMiA8IGR4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZXJyICs9IGR4O1xyXG4gICAgICAgICAgICB5MSArPSBzeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpICUgc3RlcFJhdGUgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2goeyB4OiB4MSwgeTogeTEgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJyZXNlbmhhbVBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/BresenhamPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/CenterOn.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/CenterOn.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n\r\n/**\r\n * Center a line on the given coordinates.\r\n *\r\n * @function Phaser.Geom.Line.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to center.\r\n * @param {number} x - The horizontal coordinate to center the line on.\r\n * @param {number} y - The vertical coordinate to center the line on.\r\n *\r\n * @return {Phaser.Geom.Line} The centered line.\r\n */\r\nvar CenterOn = function (line, x, y)\r\n{\r\n    var tx = x - ((line.x1 + line.x2) / 2);\r\n    var ty = y - ((line.y1 + line.y2) / 2);\r\n\r\n    line.x1 += tx;\r\n    line.y1 += ty;\r\n\r\n    line.x2 += tx;\r\n    line.y2 += ty;\r\n\r\n    return line;\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2VudGVyT24uanM/ZDM5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIENlbnRlciBhIGxpbmUgb24gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5DZW50ZXJPblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2VudGVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgdG8gY2VudGVyIHRoZSBsaW5lIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciB0aGUgbGluZSBvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIGNlbnRlcmVkIGxpbmUuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAobGluZSwgeCwgeSlcclxue1xyXG4gICAgdmFyIHR4ID0geCAtICgobGluZS54MSArIGxpbmUueDIpIC8gMik7XHJcbiAgICB2YXIgdHkgPSB5IC0gKChsaW5lLnkxICsgbGluZS55MikgLyAyKTtcclxuXHJcbiAgICBsaW5lLngxICs9IHR4O1xyXG4gICAgbGluZS55MSArPSB0eTtcclxuXHJcbiAgICBsaW5lLngyICs9IHR4O1xyXG4gICAgbGluZS55MiArPSB0eTtcclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VudGVyT247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/CenterOn.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Clone.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Clone.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * Clone the given line.\r\n *\r\n * @function Phaser.Geom.Line.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} source - The source line to clone.\r\n *\r\n * @return {Phaser.Geom.Line} The cloned line.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Line(source.x1, source.y1, source.x2, source.y2);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2xvbmUuanM/Y2MwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDJEQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMaW5lID0gcmVxdWlyZSgnLi9MaW5lJyk7XHJcblxyXG4vKipcclxuICogQ2xvbmUgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgbGluZSB0byBjbG9uZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIGNsb25lZCBsaW5lLlxyXG4gKi9cclxudmFyIENsb25lID0gZnVuY3Rpb24gKHNvdXJjZSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBMaW5lKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Mik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENsb25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/CopyFrom.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/CopyFrom.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one line to a destination line.\r\n *\r\n * @function Phaser.Geom.Line.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Line} source - The source line to copy the values from.\r\n * @param {Phaser.Geom.Line} dest - The destination line to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Line} The destination line.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x1, source.y1, source.x2, source.y2);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ29weUZyb20uanM/MGNmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ29weUZyb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2Ygb25lIGxpbmUgdG8gYSBkZXN0aW5hdGlvbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Db3B5RnJvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgbGluZSB0byBjb3B5IHRoZSB2YWx1ZXMgZnJvbS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIGxpbmUgdG8gY29weSB0aGUgdmFsdWVzIHRvLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgZGVzdGluYXRpb24gbGluZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Mik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Equals.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Equals.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compare two lines for strict equality.\r\n *\r\n * @function Phaser.Geom.Line.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The first line to compare.\r\n * @param {Phaser.Geom.Line} toCompare - The second line to compare.\r\n *\r\n * @return {boolean} Whether the two lines are equal.\r\n */\r\nvar Equals = function (line, toCompare)\r\n{\r\n    return (\r\n        line.x1 === toCompare.x1 &&\r\n        line.y1 === toCompare.y1 &&\r\n        line.x2 === toCompare.x2 &&\r\n        line.y2 === toCompare.y2\r\n    );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXF1YWxzLmpzPzZjMjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0VxdWFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmUgdHdvIGxpbmVzIGZvciBzdHJpY3QgZXF1YWxpdHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkVxdWFsc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGZpcnN0IGxpbmUgdG8gY29tcGFyZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIGxpbmUgdG8gY29tcGFyZS5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHdvIGxpbmVzIGFyZSBlcXVhbC5cclxuICovXHJcbnZhciBFcXVhbHMgPSBmdW5jdGlvbiAobGluZSwgdG9Db21wYXJlKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIGxpbmUueDEgPT09IHRvQ29tcGFyZS54MSAmJlxyXG4gICAgICAgIGxpbmUueTEgPT09IHRvQ29tcGFyZS55MSAmJlxyXG4gICAgICAgIGxpbmUueDIgPT09IHRvQ29tcGFyZS54MiAmJlxyXG4gICAgICAgIGxpbmUueTIgPT09IHRvQ29tcGFyZS55MlxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXF1YWxzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Extend.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Extend.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n/**\r\n * Extends the start and end points of a Line by the given amounts.\r\n *\r\n * The amounts can be positive or negative. Positive points will increase the length of the line,\r\n * while negative ones will decrease it.\r\n *\r\n * If no `right` value is provided it will extend the length of the line equally in both directions.\r\n *\r\n * Pass a value of zero to leave the start or end point unchanged.\r\n *\r\n * @function Phaser.Geom.Line.Extend\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line instance to extend.\r\n * @param {number} left - The amount to extend the start of the line by.\r\n * @param {number} [right] - The amount to extend the end of the line by. If not given it will be set to the `left` value.\r\n *\r\n * @return {Phaser.Geom.Line} The modified Line instance.\r\n */\r\nvar Extend = function (line, left, right)\r\n{\r\n    if (right === undefined) { right = left; }\r\n\r\n    var length = Length(line);\r\n\r\n    var slopX = line.x2 - line.x1;\r\n    var slopY = line.y2 - line.y1;\r\n\r\n    if (left)\r\n    {\r\n        line.x1 = line.x1 - slopX / length * left;\r\n        line.y1 = line.y1 - slopY / length * left;\r\n    }\r\n\r\n    if (right)\r\n    {\r\n        line.x2 = line.x2 + slopX / length * right;\r\n        line.y2 = line.y2 + slopY / length * right;\r\n    }\r\n\r\n    return line;\r\n};\r\n\r\nmodule.exports = Extend;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXh0ZW5kLmpzPzI3NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrREFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWM7O0FBRTVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXh0ZW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi9MZW5ndGgnKTtcclxuXHJcbi8qKlxyXG4gKiBFeHRlbmRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBvZiBhIExpbmUgYnkgdGhlIGdpdmVuIGFtb3VudHMuXHJcbiAqXHJcbiAqIFRoZSBhbW91bnRzIGNhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4gUG9zaXRpdmUgcG9pbnRzIHdpbGwgaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSxcclxuICogd2hpbGUgbmVnYXRpdmUgb25lcyB3aWxsIGRlY3JlYXNlIGl0LlxyXG4gKlxyXG4gKiBJZiBubyBgcmlnaHRgIHZhbHVlIGlzIHByb3ZpZGVkIGl0IHdpbGwgZXh0ZW5kIHRoZSBsZW5ndGggb2YgdGhlIGxpbmUgZXF1YWxseSBpbiBib3RoIGRpcmVjdGlvbnMuXHJcbiAqXHJcbiAqIFBhc3MgYSB2YWx1ZSBvZiB6ZXJvIHRvIGxlYXZlIHRoZSBzdGFydCBvciBlbmQgcG9pbnQgdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5FeHRlbmRcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSBpbnN0YW5jZSB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGFtb3VudCB0byBleHRlbmQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGJ5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JpZ2h0XSAtIFRoZSBhbW91bnQgdG8gZXh0ZW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUgYnkuIElmIG5vdCBnaXZlbiBpdCB3aWxsIGJlIHNldCB0byB0aGUgYGxlZnRgIHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgbW9kaWZpZWQgTGluZSBpbnN0YW5jZS5cclxuICovXHJcbnZhciBFeHRlbmQgPSBmdW5jdGlvbiAobGluZSwgbGVmdCwgcmlnaHQpXHJcbntcclxuICAgIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7IHJpZ2h0ID0gbGVmdDsgfVxyXG5cclxuICAgIHZhciBsZW5ndGggPSBMZW5ndGgobGluZSk7XHJcblxyXG4gICAgdmFyIHNsb3BYID0gbGluZS54MiAtIGxpbmUueDE7XHJcbiAgICB2YXIgc2xvcFkgPSBsaW5lLnkyIC0gbGluZS55MTtcclxuXHJcbiAgICBpZiAobGVmdClcclxuICAgIHtcclxuICAgICAgICBsaW5lLngxID0gbGluZS54MSAtIHNsb3BYIC8gbGVuZ3RoICogbGVmdDtcclxuICAgICAgICBsaW5lLnkxID0gbGluZS55MSAtIHNsb3BZIC8gbGVuZ3RoICogbGVmdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZS54MiA9IGxpbmUueDIgKyBzbG9wWCAvIGxlbmd0aCAqIHJpZ2h0O1xyXG4gICAgICAgIGxpbmUueTIgPSBsaW5lLnkyICsgc2xvcFkgLyBsZW5ndGggKiByaWdodDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5kO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Extend.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetMidPoint.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetMidPoint.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the midpoint of the given line.\r\n *\r\n * @function Phaser.Geom.Line.GetMidPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the midpoint of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point object to store the midpoint in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The midpoint of the Line.\r\n */\r\nvar GetMidPoint = function (line, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = (line.x1 + line.x2) / 2;\r\n    out.y = (line.y1 + line.y2) / 2;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetMidPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TWlkUG9pbnQuanM/OWIyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9HZXRNaWRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIG1pZHBvaW50IG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5HZXRNaWRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBnZXQgdGhlIG1pZHBvaW50IG9mLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEFuIG9wdGlvbmFsIHBvaW50IG9iamVjdCB0byBzdG9yZSB0aGUgbWlkcG9pbnQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbWlkcG9pbnQgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgR2V0TWlkUG9pbnQgPSBmdW5jdGlvbiAobGluZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IChsaW5lLngxICsgbGluZS54MikgLyAyO1xyXG4gICAgb3V0LnkgPSAobGluZS55MSArIGxpbmUueTIpIC8gMjtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNaWRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetMidPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetNearestPoint.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetNearestPoint.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Florian Mertens\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the nearest point on a line perpendicular to the given point.\r\n *\r\n * @function Phaser.Geom.Line.GetNearestPoint\r\n * @since 3.16.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the nearest point on.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to get the nearest point to.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point, or point-like object, to store the coordinates of the nearest point on the line.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The nearest point on the line.\r\n */\r\nvar GetNearestPoint = function (line, point, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var x1 = line.x1;\r\n    var y1 = line.y1;\r\n\r\n    var x2 = line.x2;\r\n    var y2 = line.y2;\r\n\r\n    var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n    if (L2 === 0)\r\n    {\r\n        return out;\r\n    }\r\n\r\n    var r = (((point.x - x1) * (x2 - x1)) + ((point.y - y1) * (y2 - y1))) / L2;\r\n\r\n    out.x = x1 + (r * (x2 - x1));\r\n    out.y = y1 + (r * (y2 - y1));\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetNearestPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TmVhcmVzdFBvaW50LmpzPzUyOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TmVhcmVzdFBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBNZXJ0ZW5zXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbmVhcmVzdCBwb2ludCBvbiBhIGxpbmUgcGVycGVuZGljdWxhciB0byB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkdldE5lYXJlc3RQb2ludFxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gZ2V0IHRoZSBuZWFyZXN0IHBvaW50IG9uLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBnZXQgdGhlIG5lYXJlc3QgcG9pbnQgdG8uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgcG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIG5lYXJlc3QgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbmVhcmVzdCBwb2ludCBvbiB0aGUgbGluZS5cclxuICovXHJcbnZhciBHZXROZWFyZXN0UG9pbnQgPSBmdW5jdGlvbiAobGluZSwgcG9pbnQsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIHgxID0gbGluZS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gbGluZS54MjtcclxuICAgIHZhciB5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgdmFyIEwyID0gKCgoeDIgLSB4MSkgKiAoeDIgLSB4MSkpICsgKCh5MiAtIHkxKSAqICh5MiAtIHkxKSkpO1xyXG5cclxuICAgIGlmIChMMiA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByID0gKCgocG9pbnQueCAtIHgxKSAqICh4MiAtIHgxKSkgKyAoKHBvaW50LnkgLSB5MSkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIG91dC54ID0geDEgKyAociAqICh4MiAtIHgxKSk7XHJcbiAgICBvdXQueSA9IHkxICsgKHIgKiAoeTIgLSB5MSkpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE5lYXJlc3RQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetNearestPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetNormal.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetNormal.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Calculate the normal of the given line.\r\n *\r\n * The normal of a line is a vector that points perpendicular from it.\r\n *\r\n * @function Phaser.Geom.Line.GetNormal\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the normal of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point object to store the normal in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The normal of the Line.\r\n */\r\nvar GetNormal = function (line, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var a = Angle(line) - MATH_CONST.TAU;\r\n\r\n    out.x = Math.cos(a);\r\n    out.y = Math.sin(a);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetNormal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0Tm9ybWFsLmpzPzYzOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsNkRBQVM7QUFDN0IsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0Tm9ybWFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTUFUSF9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvY29uc3QnKTtcclxudmFyIEFuZ2xlID0gcmVxdWlyZSgnLi9BbmdsZScpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgbm9ybWFsIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBUaGUgbm9ybWFsIG9mIGEgbGluZSBpcyBhIHZlY3RvciB0aGF0IHBvaW50cyBwZXJwZW5kaWN1bGFyIGZyb20gaXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkdldE5vcm1hbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbCBvZi5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBwb2ludCBvYmplY3QgdG8gc3RvcmUgdGhlIG5vcm1hbCBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFRoZSBub3JtYWwgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgR2V0Tm9ybWFsID0gZnVuY3Rpb24gKGxpbmUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGEgPSBBbmdsZShsaW5lKSAtIE1BVEhfQ09OU1QuVEFVO1xyXG5cclxuICAgIG91dC54ID0gTWF0aC5jb3MoYSk7XHJcbiAgICBvdXQueSA9IE1hdGguc2luKGEpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE5vcm1hbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetNormal.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetPoint.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetPoint.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get a point on a line that's a given percentage along its length.\r\n *\r\n * @function Phaser.Geom.Line.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point, or point-like object, to store the coordinates of the point on the line.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The point on the line.\r\n */\r\nvar GetPoint = function (line, position, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = line.x1 + (line.x2 - line.x1) * position;\r\n    out.y = line.y1 + (line.y2 - line.y1) * position;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnQuanM/NTgzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogR2V0IGEgcG9pbnQgb24gYSBsaW5lIHRoYXQncyBhIGdpdmVuIHBlcmNlbnRhZ2UgYWxvbmcgaXRzIGxlbmd0aC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGlzIHRoZSBzdGFydCwgMC41IGlzIHRoZSBtaWRkbGUgYW5kIDEgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBwb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnQgPSBmdW5jdGlvbiAobGluZSwgcG9zaXRpb24sIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBsaW5lLngxICsgKGxpbmUueDIgLSBsaW5lLngxKSAqIHBvc2l0aW9uO1xyXG4gICAgb3V0LnkgPSBsaW5lLnkxICsgKGxpbmUueTIgLSBsaW5lLnkxKSAqIHBvc2l0aW9uO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetPoints.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetPoints.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get a number of points along a line's length.\r\n *\r\n * Provide a `quantity` to get an exact number of points along the line.\r\n *\r\n * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when\r\n * providing a `stepRate`.\r\n *\r\n * @function Phaser.Geom.Line.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {integer} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.\r\n * @param {number} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.\r\n */\r\nvar GetPoints = function (line, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = Length(line) / stepRate;\r\n    }\r\n\r\n    var x1 = line.x1;\r\n    var y1 = line.y1;\r\n\r\n    var x2 = line.x2;\r\n    var y2 = line.y2;\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var position = i / quantity;\r\n\r\n        var x = x1 + (x2 - x1) * position;\r\n        var y = y1 + (y2 - y1) * position;\r\n\r\n        out.push(new Point(x, y));\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnRzLmpzP2ExMjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrREFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi9MZW5ndGgnKTtcclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBudW1iZXIgb2YgcG9pbnRzIGFsb25nIGEgbGluZSdzIGxlbmd0aC5cclxuICpcclxuICogUHJvdmlkZSBhIGBxdWFudGl0eWAgdG8gZ2V0IGFuIGV4YWN0IG51bWJlciBvZiBwb2ludHMgYWxvbmcgdGhlIGxpbmUuXHJcbiAqXHJcbiAqIFByb3ZpZGUgYSBgc3RlcFJhdGVgIHRvIGVuc3VyZSBhIHNwZWNpZmljIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwb2ludCBvbiB0aGUgbGluZS4gU2V0IGBxdWFudGl0eWAgdG8gYDBgIHdoZW5cclxuICogcHJvdmlkaW5nIGEgYHN0ZXBSYXRlYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBwbGFjZSBvbiB0aGUgbGluZS4gU2V0IHRvIGAwYCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFdoZW4gc2V0LCBgcXVhbnRpdHlgIGlzIGltcGxpZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gYDBgLlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBQb2ludHMsIG9yIHBvaW50LWxpa2Ugb2JqZWN0cywgdG8gc3RvcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKGxpbmUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gTGVuZ3RoKGxpbmUpIC8gc3RlcFJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHgxID0gbGluZS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gbGluZS54MjtcclxuICAgIHZhciB5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IGkgLyBxdWFudGl0eTtcclxuXHJcbiAgICAgICAgdmFyIHggPSB4MSArICh4MiAtIHgxKSAqIHBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB5ID0geTEgKyAoeTIgLSB5MSkgKiBwb3NpdGlvbjtcclxuXHJcbiAgICAgICAgb3V0LnB1c2gobmV3IFBvaW50KHgsIHkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/GetShortestDistance.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/GetShortestDistance.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Florian Mertens\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Get the shortest distance from a Line to the given Point.\r\n *\r\n * @function Phaser.Geom.Line.GetShortestDistance\r\n * @since 3.16.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the distance from.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to get the shortest distance to.\r\n *\r\n * @return {number} The shortest distance from the line to the point.\r\n */\r\nvar GetShortestDistance = function (line, point)\r\n{\r\n    var x1 = line.x1;\r\n    var y1 = line.y1;\r\n\r\n    var x2 = line.x2;\r\n    var y2 = line.y2;\r\n\r\n    var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n    if (L2 === 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var s = (((y1 - point.y) * (x2 - x1)) - ((x1 - point.x) * (y2 - y1))) / L2;\r\n\r\n    return Math.abs(s) * Math.sqrt(L2);\r\n};\r\n\r\nmodule.exports = GetShortestDistance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0U2hvcnRlc3REaXN0YW5jZS5qcz85N2JkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0U2hvcnRlc3REaXN0YW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gTWVydGVuc1xyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgZnJvbSBhIExpbmUgdG8gdGhlIGdpdmVuIFBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5HZXRTaG9ydGVzdERpc3RhbmNlXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBnZXQgdGhlIGRpc3RhbmNlIGZyb20uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IHBvaW50IC0gVGhlIHBvaW50IHRvIGdldCB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNob3J0ZXN0IGRpc3RhbmNlIGZyb20gdGhlIGxpbmUgdG8gdGhlIHBvaW50LlxyXG4gKi9cclxudmFyIEdldFNob3J0ZXN0RGlzdGFuY2UgPSBmdW5jdGlvbiAobGluZSwgcG9pbnQpXHJcbntcclxuICAgIHZhciB4MSA9IGxpbmUueDE7XHJcbiAgICB2YXIgeTEgPSBsaW5lLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IGxpbmUueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lLnkyO1xyXG5cclxuICAgIHZhciBMMiA9ICgoKHgyIC0geDEpICogKHgyIC0geDEpKSArICgoeTIgLSB5MSkgKiAoeTIgLSB5MSkpKTtcclxuXHJcbiAgICBpZiAoTDIgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzID0gKCgoeTEgLSBwb2ludC55KSAqICh4MiAtIHgxKSkgLSAoKHgxIC0gcG9pbnQueCkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmFicyhzKSAqIE1hdGguc3FydChMMik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFNob3J0ZXN0RGlzdGFuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetShortestDistance.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Height.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Height.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the height of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Height\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the height of.\r\n *\r\n * @return {number} The height of the line.\r\n */\r\nvar Height = function (line)\r\n{\r\n    return Math.abs(line.y1 - line.y2);\r\n};\r\n\r\nmodule.exports = Height;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvSGVpZ2h0LmpzP2NkNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvSGVpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQgb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkhlaWdodFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBIZWlnaHQgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGxpbmUueTEgLSBsaW5lLnkyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSGVpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Height.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Length.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Length.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the length of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Length\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the length of.\r\n *\r\n * @return {number} The length of the line.\r\n */\r\nvar Length = function (line)\r\n{\r\n    return Math.sqrt((line.x2 - line.x1) * (line.x2 - line.x1) + (line.y2 - line.y1) * (line.y2 - line.y1));\r\n};\r\n\r\nmodule.exports = Length;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGVuZ3RoLmpzP2U5ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGVuZ3RoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkxlbmd0aFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBMZW5ndGggPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCgobGluZS54MiAtIGxpbmUueDEpICogKGxpbmUueDIgLSBsaW5lLngxKSArIChsaW5lLnkyIC0gbGluZS55MSkgKiAobGluZS55MiAtIGxpbmUueTEpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGVuZ3RoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Length.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Line.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Line.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/line/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Defines a Line segment, a part of a line between two endpoints.\r\n *\r\n * @class Line\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - The x coordinate of the lines starting point.\r\n * @param {number} [y1=0] - The y coordinate of the lines starting point.\r\n * @param {number} [x2=0] - The x coordinate of the lines ending point.\r\n * @param {number} [y2=0] - The y coordinate of the lines ending point.\r\n */\r\nvar Line = new Class({\r\n\r\n    initialize:\r\n\r\n    function Line (x1, y1, x2, y2)\r\n    {\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 0; }\r\n        if (x2 === undefined) { x2 = 0; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.LINE`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Line#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.LINE;\r\n\r\n        /**\r\n         * The x coordinate of the lines starting point.\r\n         *\r\n         * @name Phaser.Geom.Line#x1\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x1 = x1;\r\n\r\n        /**\r\n         * The y coordinate of the lines starting point.\r\n         *\r\n         * @name Phaser.Geom.Line#y1\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y1 = y1;\r\n\r\n        /**\r\n         * The x coordinate of the lines ending point.\r\n         *\r\n         * @name Phaser.Geom.Line#x2\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x2 = x2;\r\n\r\n        /**\r\n         * The y coordinate of the lines ending point.\r\n         *\r\n         * @name Phaser.Geom.Line#y2\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y2 = y2;\r\n    },\r\n\r\n    /**\r\n     * Get a point on a line that's a given percentage along its length.\r\n     *\r\n     * @method Phaser.Geom.Line#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [output,$return]\r\n     *\r\n     * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.\r\n     * @param {(Phaser.Geom.Point|object)} [output] - An optional point, or point-like object, to store the coordinates of the point on the line.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point on the line.\r\n     */\r\n    getPoint: function (position, output)\r\n    {\r\n        return GetPoint(this, position, output);\r\n    },\r\n\r\n    /**\r\n     * Get a number of points along a line's length.\r\n     *\r\n     * Provide a `quantity` to get an exact number of points along the line.\r\n     *\r\n     * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when\r\n     * providing a `stepRate`.\r\n     *\r\n     * @method Phaser.Geom.Line#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [output,$return]\r\n     *\r\n     * @param {integer} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.\r\n     * @param {integer} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.\r\n     * @param {(array|Phaser.Geom.Point[])} [output] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.\r\n     *\r\n     * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.\r\n     */\r\n    getPoints: function (quantity, stepRate, output)\r\n    {\r\n        return GetPoints(this, quantity, stepRate, output);\r\n    },\r\n\r\n    /**\r\n     * Get a random Point on the Line.\r\n     *\r\n     * @method Phaser.Geom.Line#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [point,$return]\r\n     *\r\n     * @param {(Phaser.Geom.Point|object)} [point] - An instance of a Point to be modified.\r\n     *\r\n     * @return {Phaser.Geom.Point} A random Point on the Line.\r\n     */\r\n    getRandomPoint: function (point)\r\n    {\r\n        return Random(this, point);\r\n    },\r\n\r\n    /**\r\n     * Set new coordinates for the line endpoints.\r\n     *\r\n     * @method Phaser.Geom.Line#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x1=0] - The x coordinate of the lines starting point.\r\n     * @param {number} [y1=0] - The y coordinate of the lines starting point.\r\n     * @param {number} [x2=0] - The x coordinate of the lines ending point.\r\n     * @param {number} [y2=0] - The y coordinate of the lines ending point.\r\n     *\r\n     * @return {Phaser.Geom.Line} This Line object.\r\n     */\r\n    setTo: function (x1, y1, x2, y2)\r\n    {\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 0; }\r\n        if (x2 === undefined) { x2 = 0; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n\r\n        this.x1 = x1;\r\n        this.y1 = y1;\r\n\r\n        this.x2 = x2;\r\n        this.y2 = y2;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a Vector2 object that corresponds to the start of this Line.\r\n     *\r\n     * @method Phaser.Geom.Line#getPointA\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [vec2,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the start of this Line.\r\n     */\r\n    getPointA: function (vec2)\r\n    {\r\n        if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n        vec2.set(this.x1, this.y1);\r\n\r\n        return vec2;\r\n    },\r\n\r\n    /**\r\n     * Returns a Vector2 object that corresponds to the end of this Line.\r\n     *\r\n     * @method Phaser.Geom.Line#getPointB\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Math.Vector2} O - [vec2,$return]\r\n     *\r\n     * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.\r\n     *\r\n     * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the end of this Line.\r\n     */\r\n    getPointB: function (vec2)\r\n    {\r\n        if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n        vec2.set(this.x2, this.y2);\r\n\r\n        return vec2;\r\n    },\r\n\r\n    /**\r\n     * The left position of the Line.\r\n     *\r\n     * @name Phaser.Geom.Line#left\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.min(this.x1, this.x2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.x1 <= this.x2)\r\n            {\r\n                this.x1 = value;\r\n            }\r\n            else\r\n            {\r\n                this.x2 = value;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The right position of the Line.\r\n     *\r\n     * @name Phaser.Geom.Line#right\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.max(this.x1, this.x2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.x1 > this.x2)\r\n            {\r\n                this.x1 = value;\r\n            }\r\n            else\r\n            {\r\n                this.x2 = value;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top position of the Line.\r\n     *\r\n     * @name Phaser.Geom.Line#top\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.min(this.y1, this.y2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.y1 <= this.y2)\r\n            {\r\n                this.y1 = value;\r\n            }\r\n            else\r\n            {\r\n                this.y2 = value;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom position of the Line.\r\n     *\r\n     * @name Phaser.Geom.Line#bottom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.max(this.y1, this.y2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.y1 > this.y2)\r\n            {\r\n                this.y1 = value;\r\n            }\r\n            else\r\n            {\r\n                this.y2 = value;\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGluZS5qcz85OTIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTtBQUNuQyxhQUFhLG1CQUFPLENBQUMsK0RBQVU7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFROztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsc0JBQXNCOztBQUV2RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsc0JBQXNCOztBQUV2RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBEZWZpbmVzIGEgTGluZSBzZWdtZW50LCBhIHBhcnQgb2YgYSBsaW5lIGJldHdlZW4gdHdvIGVuZHBvaW50cy5cclxuICpcclxuICogQGNsYXNzIExpbmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIHN0YXJ0aW5nIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kxPTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAqL1xyXG52YXIgTGluZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBMaW5lICh4MSwgeTEsIHgyLCB5MilcclxuICAgIHtcclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDA7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULkxJTkVgLlxyXG4gICAgICAgICAqIFVzZWQgZm9yIGZhc3QgdHlwZSBjb21wYXJpc29ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkxJTkU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIHN0YXJ0aW5nIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN4MVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MSA9IHgxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBzdGFydGluZyBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjeTFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTEgPSB5MTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgZW5kaW5nIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN4MlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MiA9IHgyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MaW5lI3kyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgcG9pbnQgb24gYSBsaW5lIHRoYXQncyBhIGdpdmVuIHBlcmNlbnRhZ2UgYWxvbmcgaXRzIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2hlcmUgMCBpcyB0aGUgc3RhcnQsIDAuNSBpcyB0aGUgbWlkZGxlIGFuZCAxIGlzIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9wdGlvbmFsIHBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgdG8gc3RvcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludCh0aGlzLCBwb3NpdGlvbiwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBudW1iZXIgb2YgcG9pbnRzIGFsb25nIGEgbGluZSdzIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBQcm92aWRlIGEgYHF1YW50aXR5YCB0byBnZXQgYW4gZXhhY3QgbnVtYmVyIG9mIHBvaW50cyBhbG9uZyB0aGUgbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBQcm92aWRlIGEgYHN0ZXBSYXRlYCB0byBlbnN1cmUgYSBzcGVjaWZpYyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFNldCBgcXVhbnRpdHlgIHRvIGAwYCB3aGVuXHJcbiAgICAgKiBwcm92aWRpbmcgYSBgc3RlcFJhdGVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uTGluZSNnZXRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gcGxhY2Ugb24gdGhlIGxpbmUuIFNldCB0byBgMGAgdG8gdXNlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0ZXBSYXRlXSAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFdoZW4gc2V0LCBgcXVhbnRpdHlgIGlzIGltcGxpZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gYDBgLlxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtvdXRwdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIG9uIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludHModGhpcywgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHJhbmRvbSBQb2ludCBvbiB0aGUgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UmFuZG9tUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtwb2ludCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtwb2ludF0gLSBBbiBpbnN0YW5jZSBvZiBhIFBvaW50IHRvIGJlIG1vZGlmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBBIHJhbmRvbSBQb2ludCBvbiB0aGUgTGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZG9tUG9pbnQ6IGZ1bmN0aW9uIChwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gUmFuZG9tKHRoaXMsIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbmV3IGNvb3JkaW5hdGVzIGZvciB0aGUgbGluZSBlbmRwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5MaW5lI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gxPTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3kxPTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gyPTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgZW5kaW5nIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5Mj0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIGVuZGluZyBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGlzIExpbmUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4MSA9PT0gdW5kZWZpbmVkKSB7IHgxID0gMDsgfVxyXG4gICAgICAgIGlmICh5MSA9PT0gdW5kZWZpbmVkKSB7IHkxID0gMDsgfVxyXG4gICAgICAgIGlmICh4MiA9PT0gdW5kZWZpbmVkKSB7IHgyID0gMDsgfVxyXG4gICAgICAgIGlmICh5MiA9PT0gdW5kZWZpbmVkKSB7IHkyID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLngxID0geDE7XHJcbiAgICAgICAgdGhpcy55MSA9IHkxO1xyXG5cclxuICAgICAgICB0aGlzLngyID0geDI7XHJcbiAgICAgICAgdGhpcy55MiA9IHkyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMiBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3RhcnQgb2YgdGhpcyBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uTGluZSNnZXRQb2ludEFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW3ZlYzIsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFt2ZWMyXSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBBIFZlY3RvcjIgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgTGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRBOiBmdW5jdGlvbiAodmVjMilcclxuICAgIHtcclxuICAgICAgICBpZiAodmVjMiA9PT0gdW5kZWZpbmVkKSB7IHZlYzIgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZlYzIuc2V0KHRoaXMueDEsIHRoaXMueTEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdmVjMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMiBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZW5kIG9mIHRoaXMgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UG9pbnRCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFt2ZWMyLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbdmVjMl0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHNldCB0aGUgcmVzdWx0cyBpbi4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gQSBWZWN0b3IyIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBlbmQgb2YgdGhpcyBMaW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludEI6IGZ1bmN0aW9uICh2ZWMyKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2ZWMyID09PSB1bmRlZmluZWQpIHsgdmVjMiA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmVjMi5zZXQodGhpcy54MiwgdGhpcy55Mik7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWMyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjbGVmdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLngxLCB0aGlzLngyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLngxIDw9IHRoaXMueDIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueDEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueDIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjcmlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMueDEsIHRoaXMueDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueDEgPiB0aGlzLngyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngxID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIExpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnkxLCB0aGlzLnkyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnkxIDw9IHRoaXMueTIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueTEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueTIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MaW5lI2JvdHRvbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMueTEsIHRoaXMueTIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueTEgPiB0aGlzLnkyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkxID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Line.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/NormalAngle.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/NormalAngle.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * Get the angle of the normal of the given line in radians.\r\n *\r\n * @function Phaser.Geom.Line.NormalAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the angle of the normal of.\r\n *\r\n * @return {number} The angle of the normal of the line in radians.\r\n */\r\nvar NormalAngle = function (line)\r\n{\r\n    var angle = Angle(line) - MATH_CONST.TAU;\r\n\r\n    return Wrap(angle, -Math.PI, Math.PI);\r\n};\r\n\r\nmodule.exports = NormalAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsQW5nbGUuanM/NGUzMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzNDLFdBQVcsbUJBQU8sQ0FBQywrREFBaUI7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL05vcm1hbEFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTUFUSF9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvY29uc3QnKTtcclxudmFyIFdyYXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1dyYXAnKTtcclxudmFyIEFuZ2xlID0gcmVxdWlyZSgnLi9BbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgb2YgdGhlIG5vcm1hbCBvZiB0aGUgZ2l2ZW4gbGluZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Ob3JtYWxBbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgbm9ybWFsIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbmdsZSBvZiB0aGUgbm9ybWFsIG9mIHRoZSBsaW5lIGluIHJhZGlhbnMuXHJcbiAqL1xyXG52YXIgTm9ybWFsQW5nbGUgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgdmFyIGFuZ2xlID0gQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVTtcclxuXHJcbiAgICByZXR1cm4gV3JhcChhbmdsZSwgLU1hdGguUEksIE1hdGguUEkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOb3JtYWxBbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalAngle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/NormalX.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/NormalX.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Line.NormalX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line object to get the normal value from.\r\n *\r\n * @return {number} [description]\r\n */\r\nvar NormalX = function (line)\r\n{\r\n    return Math.cos(Angle(line) - MATH_CONST.TAU);\r\n};\r\n\r\nmodule.exports = NormalX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWC5qcz9kOWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL05vcm1hbFguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgQW5nbGUgPSByZXF1aXJlKCcuL0FuZ2xlJyk7XHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Ob3JtYWxYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSBvYmplY3QgdG8gZ2V0IHRoZSBub3JtYWwgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgTm9ybWFsWCA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5jb3MoQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5vcm1hbFg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/NormalY.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/NormalY.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * The Y value of the normal of the given line.\r\n * The normal of a line is a vector that points perpendicular from it.\r\n *\r\n * @function Phaser.Geom.Line.NormalY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the normal of.\r\n *\r\n * @return {number} The Y value of the normal of the Line.\r\n */\r\nvar NormalY = function (line)\r\n{\r\n    return Math.sin(Angle(line) - MATH_CONST.TAU);\r\n};\r\n\r\nmodule.exports = NormalY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWS5qcz8yMWJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBBbmdsZSA9IHJlcXVpcmUoJy4vQW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgWSB2YWx1ZSBvZiB0aGUgbm9ybWFsIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKiBUaGUgbm9ybWFsIG9mIGEgbGluZSBpcyBhIHZlY3RvciB0aGF0IHBvaW50cyBwZXJwZW5kaWN1bGFyIGZyb20gaXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLk5vcm1hbFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBZIHZhbHVlIG9mIHRoZSBub3JtYWwgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgTm9ybWFsWSA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5zaW4oQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5vcm1hbFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Offset.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Offset.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offset a line by the given amount.\r\n *\r\n * @function Phaser.Geom.Line.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to offset.\r\n * @param {number} x - The horizontal offset to add to the line.\r\n * @param {number} y - The vertical offset to add to the line.\r\n *\r\n * @return {Phaser.Geom.Line} The offset line.\r\n */\r\nvar Offset = function (line, x, y)\r\n{\r\n    line.x1 += x;\r\n    line.y1 += y;\r\n\r\n    line.x2 += x;\r\n    line.y2 += y;\r\n\r\n    return line;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvT2Zmc2V0LmpzP2MyODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL09mZnNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE9mZnNldCBhIGxpbmUgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuT2Zmc2V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uTGluZX0gTyAtIFtsaW5lLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIG9mZnNldC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgdG8gYWRkIHRvIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgdG8gYWRkIHRvIHRoZSBsaW5lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgb2Zmc2V0IGxpbmUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKGxpbmUsIHgsIHkpXHJcbntcclxuICAgIGxpbmUueDEgKz0geDtcclxuICAgIGxpbmUueTEgKz0geTtcclxuXHJcbiAgICBsaW5lLngyICs9IHg7XHJcbiAgICBsaW5lLnkyICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIGxpbmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/PerpSlope.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/PerpSlope.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the perpendicular slope of the given line.\r\n *\r\n * @function Phaser.Geom.Line.PerpSlope\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the perpendicular slope of.\r\n *\r\n * @return {number} The perpendicular slope of the line.\r\n */\r\nvar PerpSlope = function (line)\r\n{\r\n    return -((line.x2 - line.x1) / (line.y2 - line.y1));\r\n};\r\n\r\nmodule.exports = PerpSlope;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUGVycFNsb3BlLmpzPzEyMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUGVycFNsb3BlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBwZXJwZW5kaWN1bGFyIHNsb3BlIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5QZXJwU2xvcGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgcGVycGVuZGljdWxhciBzbG9wZSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcGVycGVuZGljdWxhciBzbG9wZSBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBQZXJwU2xvcGUgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIC0oKGxpbmUueDIgLSBsaW5lLngxKSAvIChsaW5lLnkyIC0gbGluZS55MSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJwU2xvcGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/PerpSlope.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Random.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Random.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a random point on a given Line.\r\n *\r\n * @function Phaser.Geom.Line.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to calculate the random Point on.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An instance of a Point to be modified.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A random Point on the Line.\r\n */\r\nvar Random = function (line, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var t = Math.random();\r\n\r\n    out.x = line.x1 + t * (line.x2 - line.x1);\r\n    out.y = line.y1 + t * (line.y2 - line.y1);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmFuZG9tLmpzP2FhM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmFuZG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSByYW5kb20gcG9pbnQgb24gYSBnaXZlbiBMaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2FsY3VsYXRlIHRoZSByYW5kb20gUG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gaW5zdGFuY2Ugb2YgYSBQb2ludCB0byBiZSBtb2RpZmllZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgcmFuZG9tIFBvaW50IG9uIHRoZSBMaW5lLlxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uIChsaW5lLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciB0ID0gTWF0aC5yYW5kb20oKTtcclxuXHJcbiAgICBvdXQueCA9IGxpbmUueDEgKyB0ICogKGxpbmUueDIgLSBsaW5lLngxKTtcclxuICAgIG91dC55ID0gbGluZS55MSArIHQgKiAobGluZS55MiAtIGxpbmUueTEpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Random.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/ReflectAngle.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/ReflectAngle.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nvar NormalAngle = __webpack_require__(/*! ./NormalAngle */ \"./node_modules/phaser/src/geom/line/NormalAngle.js\");\r\n\r\n/**\r\n * Calculate the reflected angle between two lines.\r\n *\r\n * This is the outgoing angle based on the angle of Line 1 and the normalAngle of Line 2.\r\n *\r\n * @function Phaser.Geom.Line.ReflectAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} lineA - The first line.\r\n * @param {Phaser.Geom.Line} lineB - The second line.\r\n *\r\n * @return {number} The reflected angle between each line.\r\n */\r\nvar ReflectAngle = function (lineA, lineB)\r\n{\r\n    return (2 * NormalAngle(lineB) - Math.PI - Angle(lineA));\r\n};\r\n\r\nmodule.exports = ReflectAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmVmbGVjdEFuZ2xlLmpzPzBhZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw2REFBUztBQUM3QixrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmVmbGVjdEFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQW5nbGUgPSByZXF1aXJlKCcuL0FuZ2xlJyk7XHJcbnZhciBOb3JtYWxBbmdsZSA9IHJlcXVpcmUoJy4vTm9ybWFsQW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIHJlZmxlY3RlZCBhbmdsZSBiZXR3ZWVuIHR3byBsaW5lcy5cclxuICpcclxuICogVGhpcyBpcyB0aGUgb3V0Z29pbmcgYW5nbGUgYmFzZWQgb24gdGhlIGFuZ2xlIG9mIExpbmUgMSBhbmQgdGhlIG5vcm1hbEFuZ2xlIG9mIExpbmUgMi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuUmVmbGVjdEFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmVBIC0gVGhlIGZpcnN0IGxpbmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZUIgLSBUaGUgc2Vjb25kIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJlZmxlY3RlZCBhbmdsZSBiZXR3ZWVuIGVhY2ggbGluZS5cclxuICovXHJcbnZhciBSZWZsZWN0QW5nbGUgPSBmdW5jdGlvbiAobGluZUEsIGxpbmVCKVxyXG57XHJcbiAgICByZXR1cm4gKDIgKiBOb3JtYWxBbmdsZShsaW5lQikgLSBNYXRoLlBJIC0gQW5nbGUobGluZUEpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/ReflectAngle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Rotate.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Rotate.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotate a line around its midpoint by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar Rotate = function (line, angle)\r\n{\r\n    var x = (line.x1 + line.x2) / 2;\r\n    var y = (line.y1 + line.y2) / 2;\r\n\r\n    return RotateAroundXY(line, x, y, angle);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlLmpzPzI3MWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLCtFQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUm90YXRlQXJvdW5kWFkgPSByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZFhZJyk7XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgbGluZSBhcm91bmQgaXRzIG1pZHBvaW50IGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gcm90YXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIHJvdGF0ZWQgbGluZS5cclxuICovXHJcbnZhciBSb3RhdGUgPSBmdW5jdGlvbiAobGluZSwgYW5nbGUpXHJcbntcclxuICAgIHZhciB4ID0gKGxpbmUueDEgKyBsaW5lLngyKSAvIDI7XHJcbiAgICB2YXIgeSA9IChsaW5lLnkxICsgbGluZS55MikgLyAyO1xyXG5cclxuICAgIHJldHVybiBSb3RhdGVBcm91bmRYWShsaW5lLCB4LCB5LCBhbmdsZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Rotate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/RotateAroundPoint.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/RotateAroundPoint.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotate a line around a point by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.RotateAroundPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to rotate the line around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar RotateAroundPoint = function (line, point, angle)\r\n{\r\n    return RotateAroundXY(line, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = RotateAroundPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kUG9pbnQuanM/NTM3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsK0VBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSb3RhdGVBcm91bmRYWSA9IHJlcXVpcmUoJy4vUm90YXRlQXJvdW5kWFknKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSBsaW5lIGFyb3VuZCBhIHBvaW50IGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVBcm91bmRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IHBvaW50IC0gVGhlIHBvaW50IHRvIHJvdGF0ZSB0aGUgbGluZSBhcm91bmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgcm90YXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFBvaW50ID0gZnVuY3Rpb24gKGxpbmUsIHBvaW50LCBhbmdsZSlcclxue1xyXG4gICAgcmV0dXJuIFJvdGF0ZUFyb3VuZFhZKGxpbmUsIHBvaW50LngsIHBvaW50LnksIGFuZ2xlKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlQXJvdW5kUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/RotateAroundPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/RotateAroundXY.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/RotateAroundXY.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotate a line around the given coordinates by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.RotateAroundXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {number} x - The horizontal coordinate to rotate the line around.\r\n * @param {number} y - The vertical coordinate to rotate the line around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar RotateAroundXY = function (line, x, y, angle)\r\n{\r\n    var c = Math.cos(angle);\r\n    var s = Math.sin(angle);\r\n\r\n    var tx = line.x1 - x;\r\n    var ty = line.y1 - y;\r\n\r\n    line.x1 = tx * c - ty * s + x;\r\n    line.y1 = tx * s + ty * c + y;\r\n\r\n    tx = line.x2 - x;\r\n    ty = line.y2 - y;\r\n\r\n    line.x2 = tx * c - ty * s + x;\r\n    line.y2 = tx * s + ty * c + y;\r\n\r\n    return line;\r\n};\r\n\r\nmodule.exports = RotateAroundXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kWFkuanM/MDQ5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL1JvdGF0ZUFyb3VuZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm90YXRlIGEgbGluZSBhcm91bmQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVBcm91bmRYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byByb3RhdGUgdGhlIGxpbmUgYXJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIHJvdGF0ZSB0aGUgbGluZSBhcm91bmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgcm90YXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gZnVuY3Rpb24gKGxpbmUsIHgsIHksIGFuZ2xlKVxyXG57XHJcbiAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgIHZhciBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuICAgIHZhciB0eCA9IGxpbmUueDEgLSB4O1xyXG4gICAgdmFyIHR5ID0gbGluZS55MSAtIHk7XHJcblxyXG4gICAgbGluZS54MSA9IHR4ICogYyAtIHR5ICogcyArIHg7XHJcbiAgICBsaW5lLnkxID0gdHggKiBzICsgdHkgKiBjICsgeTtcclxuXHJcbiAgICB0eCA9IGxpbmUueDIgLSB4O1xyXG4gICAgdHkgPSBsaW5lLnkyIC0geTtcclxuXHJcbiAgICBsaW5lLngyID0gdHggKiBjIC0gdHkgKiBzICsgeDtcclxuICAgIGxpbmUueTIgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHJldHVybiBsaW5lO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmRYWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/RotateAroundXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/SetToAngle.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/SetToAngle.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Set a line to a given position, angle and length.\r\n *\r\n * @function Phaser.Geom.Line.SetToAngle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to set.\r\n * @param {number} x - The horizontal start position of the line.\r\n * @param {number} y - The vertical start position of the line.\r\n * @param {number} angle - The angle of the line in radians.\r\n * @param {number} length - The length of the line.\r\n *\r\n * @return {Phaser.Geom.Line} The updated line.\r\n */\r\nvar SetToAngle = function (line, x, y, angle, length)\r\n{\r\n    line.x1 = x;\r\n    line.y1 = y;\r\n\r\n    line.x2 = x + (Math.cos(angle) * length);\r\n    line.y2 = y + (Math.sin(angle) * length);\r\n\r\n    return line;\r\n};\r\n\r\nmodule.exports = SetToAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvU2V0VG9BbmdsZS5qcz83NDc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL1NldFRvQW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBsaW5lIHRvIGEgZ2l2ZW4gcG9zaXRpb24sIGFuZ2xlIGFuZCBsZW5ndGguXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLlNldFRvQW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gc2V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIG9mIHRoZSBsaW5lIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgbGVuZ3RoIG9mIHRoZSBsaW5lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgdXBkYXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFNldFRvQW5nbGUgPSBmdW5jdGlvbiAobGluZSwgeCwgeSwgYW5nbGUsIGxlbmd0aClcclxue1xyXG4gICAgbGluZS54MSA9IHg7XHJcbiAgICBsaW5lLnkxID0geTtcclxuXHJcbiAgICBsaW5lLngyID0geCArIChNYXRoLmNvcyhhbmdsZSkgKiBsZW5ndGgpO1xyXG4gICAgbGluZS55MiA9IHkgKyAoTWF0aC5zaW4oYW5nbGUpICogbGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VG9BbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/SetToAngle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Slope.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Slope.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the slope of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Slope\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the slope of.\r\n *\r\n * @return {number} The slope of the line.\r\n */\r\nvar Slope = function (line)\r\n{\r\n    return (line.y2 - line.y1) / (line.x2 - line.x1);\r\n};\r\n\r\nmodule.exports = Slope;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvU2xvcGUuanM/YTI5YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9TbG9wZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgc2xvcGUgb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLlNsb3BlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIHNsb3BlIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzbG9wZSBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBTbG9wZSA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gKGxpbmUueTIgLSBsaW5lLnkxKSAvIChsaW5lLngyIC0gbGluZS54MSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNsb3BlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Slope.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/Width.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/Width.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the width of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Width\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the width of.\r\n *\r\n * @return {number} The width of the line.\r\n */\r\nvar Width = function (line)\r\n{\r\n    return Math.abs(line.x1 - line.x2);\r\n};\r\n\r\nmodule.exports = Width;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvV2lkdGguanM/ZDkzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9XaWR0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgd2lkdGggb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLldpZHRoXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBXaWR0aCA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5hYnMobGluZS54MSAtIGxpbmUueDIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXaWR0aDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Width.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/line/index.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/line/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\nLine.Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nLine.BresenhamPoints = __webpack_require__(/*! ./BresenhamPoints */ \"./node_modules/phaser/src/geom/line/BresenhamPoints.js\");\r\nLine.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/line/CenterOn.js\");\r\nLine.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/line/Clone.js\");\r\nLine.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/line/CopyFrom.js\");\r\nLine.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/line/Equals.js\");\r\nLine.Extend = __webpack_require__(/*! ./Extend */ \"./node_modules/phaser/src/geom/line/Extend.js\");\r\nLine.GetMidPoint = __webpack_require__(/*! ./GetMidPoint */ \"./node_modules/phaser/src/geom/line/GetMidPoint.js\");\r\nLine.GetNearestPoint = __webpack_require__(/*! ./GetNearestPoint */ \"./node_modules/phaser/src/geom/line/GetNearestPoint.js\");\r\nLine.GetNormal = __webpack_require__(/*! ./GetNormal */ \"./node_modules/phaser/src/geom/line/GetNormal.js\");\r\nLine.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/line/GetPoint.js\");\r\nLine.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\nLine.GetShortestDistance = __webpack_require__(/*! ./GetShortestDistance */ \"./node_modules/phaser/src/geom/line/GetShortestDistance.js\");\r\nLine.Height = __webpack_require__(/*! ./Height */ \"./node_modules/phaser/src/geom/line/Height.js\");\r\nLine.Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nLine.NormalAngle = __webpack_require__(/*! ./NormalAngle */ \"./node_modules/phaser/src/geom/line/NormalAngle.js\");\r\nLine.NormalX = __webpack_require__(/*! ./NormalX */ \"./node_modules/phaser/src/geom/line/NormalX.js\");\r\nLine.NormalY = __webpack_require__(/*! ./NormalY */ \"./node_modules/phaser/src/geom/line/NormalY.js\");\r\nLine.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/line/Offset.js\");\r\nLine.PerpSlope = __webpack_require__(/*! ./PerpSlope */ \"./node_modules/phaser/src/geom/line/PerpSlope.js\");\r\nLine.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\nLine.ReflectAngle = __webpack_require__(/*! ./ReflectAngle */ \"./node_modules/phaser/src/geom/line/ReflectAngle.js\");\r\nLine.Rotate = __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/geom/line/Rotate.js\");\r\nLine.RotateAroundPoint = __webpack_require__(/*! ./RotateAroundPoint */ \"./node_modules/phaser/src/geom/line/RotateAroundPoint.js\");\r\nLine.RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\nLine.SetToAngle = __webpack_require__(/*! ./SetToAngle */ \"./node_modules/phaser/src/geom/line/SetToAngle.js\");\r\nLine.Slope = __webpack_require__(/*! ./Slope */ \"./node_modules/phaser/src/geom/line/Slope.js\");\r\nLine.Width = __webpack_require__(/*! ./Width */ \"./node_modules/phaser/src/geom/line/Width.js\");\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvaW5kZXguanM/OTRlMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDJEQUFROztBQUUzQixhQUFhLG1CQUFPLENBQUMsNkRBQVM7QUFDOUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW1CO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLG1FQUFZO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyw2REFBUztBQUM5QixnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBWTtBQUNwQyxjQUFjLG1CQUFPLENBQUMsK0RBQVU7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLCtEQUFVO0FBQ2hDLG1CQUFtQixtQkFBTyxDQUFDLHlFQUFlO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFtQjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QywyQkFBMkIsbUJBQU8sQ0FBQyx5RkFBdUI7QUFDMUQsY0FBYyxtQkFBTyxDQUFDLCtEQUFVO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQyx5RUFBZTtBQUMxQyxlQUFlLG1CQUFPLENBQUMsaUVBQVc7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLGlFQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QyxjQUFjLG1CQUFPLENBQUMsK0RBQVU7QUFDaEMsb0JBQW9CLG1CQUFPLENBQUMsMkVBQWdCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyx5QkFBeUIsbUJBQU8sQ0FBQyxxRkFBcUI7QUFDdEQsc0JBQXNCLG1CQUFPLENBQUMsK0VBQWtCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLHVFQUFjO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyw2REFBUztBQUM5QixhQUFhLG1CQUFPLENBQUMsNkRBQVM7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4vTGluZScpO1xyXG5cclxuTGluZS5BbmdsZSA9IHJlcXVpcmUoJy4vQW5nbGUnKTtcclxuTGluZS5CcmVzZW5oYW1Qb2ludHMgPSByZXF1aXJlKCcuL0JyZXNlbmhhbVBvaW50cycpO1xyXG5MaW5lLkNlbnRlck9uID0gcmVxdWlyZSgnLi9DZW50ZXJPbicpO1xyXG5MaW5lLkNsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5MaW5lLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5MaW5lLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkxpbmUuRXh0ZW5kID0gcmVxdWlyZSgnLi9FeHRlbmQnKTtcclxuTGluZS5HZXRNaWRQb2ludCA9IHJlcXVpcmUoJy4vR2V0TWlkUG9pbnQnKTtcclxuTGluZS5HZXROZWFyZXN0UG9pbnQgPSByZXF1aXJlKCcuL0dldE5lYXJlc3RQb2ludCcpO1xyXG5MaW5lLkdldE5vcm1hbCA9IHJlcXVpcmUoJy4vR2V0Tm9ybWFsJyk7XHJcbkxpbmUuR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbkxpbmUuR2V0UG9pbnRzID0gcmVxdWlyZSgnLi9HZXRQb2ludHMnKTtcclxuTGluZS5HZXRTaG9ydGVzdERpc3RhbmNlID0gcmVxdWlyZSgnLi9HZXRTaG9ydGVzdERpc3RhbmNlJyk7XHJcbkxpbmUuSGVpZ2h0ID0gcmVxdWlyZSgnLi9IZWlnaHQnKTtcclxuTGluZS5MZW5ndGggPSByZXF1aXJlKCcuL0xlbmd0aCcpO1xyXG5MaW5lLk5vcm1hbEFuZ2xlID0gcmVxdWlyZSgnLi9Ob3JtYWxBbmdsZScpO1xyXG5MaW5lLk5vcm1hbFggPSByZXF1aXJlKCcuL05vcm1hbFgnKTtcclxuTGluZS5Ob3JtYWxZID0gcmVxdWlyZSgnLi9Ob3JtYWxZJyk7XHJcbkxpbmUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuTGluZS5QZXJwU2xvcGUgPSByZXF1aXJlKCcuL1BlcnBTbG9wZScpO1xyXG5MaW5lLlJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcbkxpbmUuUmVmbGVjdEFuZ2xlID0gcmVxdWlyZSgnLi9SZWZsZWN0QW5nbGUnKTtcclxuTGluZS5Sb3RhdGUgPSByZXF1aXJlKCcuL1JvdGF0ZScpO1xyXG5MaW5lLlJvdGF0ZUFyb3VuZFBvaW50ID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRQb2ludCcpO1xyXG5MaW5lLlJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5MaW5lLlNldFRvQW5nbGUgPSByZXF1aXJlKCcuL1NldFRvQW5nbGUnKTtcclxuTGluZS5TbG9wZSA9IHJlcXVpcmUoJy4vU2xvcGUnKTtcclxuTGluZS5XaWR0aCA9IHJlcXVpcmUoJy4vV2lkdGgnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Ceil.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Ceil.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Apply `Math.ceil()` to each coordinate of the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Ceil\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to ceil.\r\n *\r\n * @return {Phaser.Geom.Point} The Point with `Math.ceil()` applied to its coordinates.\r\n */\r\nvar Ceil = function (point)\r\n{\r\n    return point.setTo(Math.ceil(point.x), Math.ceil(point.y));\r\n};\r\n\r\nmodule.exports = Ceil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NlaWwuanM/YjYxNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NlaWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBcHBseSBgTWF0aC5jZWlsKClgIHRvIGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgZ2l2ZW4gUG9pbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5DZWlsXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgUG9pbnQgdG8gY2VpbC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBQb2ludCB3aXRoIGBNYXRoLmNlaWwoKWAgYXBwbGllZCB0byBpdHMgY29vcmRpbmF0ZXMuXHJcbiAqL1xyXG52YXIgQ2VpbCA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKE1hdGguY2VpbChwb2ludC54KSwgTWF0aC5jZWlsKHBvaW50LnkpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VpbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Ceil.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Clone.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Clone.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Clone the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} source - The source Point to clone.\r\n *\r\n * @return {Phaser.Geom.Point} The cloned Point.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Point(source.x, source.y);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0Nsb25lLmpzP2FiOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9DbG9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENsb25lIHRoZSBnaXZlbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBzb3VyY2UgLSBUaGUgc291cmNlIFBvaW50IHRvIGNsb25lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIGNsb25lZCBQb2ludC5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgUG9pbnQoc291cmNlLngsIHNvdXJjZS55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/CopyFrom.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/CopyFrom.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Point to a destination Point.\r\n *\r\n * @function Phaser.Geom.Point.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Point} source - The source Point to copy the values from.\r\n * @param {Phaser.Geom.Point} dest - The destination Point to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Point} The destination Point.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x, source.y);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NvcHlGcm9tLmpzP2JkZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBvbmUgUG9pbnQgdG8gYSBkZXN0aW5hdGlvbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkNvcHlGcm9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBzb3VyY2UgLSBUaGUgc291cmNlIFBvaW50IHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFBvaW50IHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBkZXN0aW5hdGlvbiBQb2ludC5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Equals.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Equals.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A comparison of two `Point` objects to see if they are equal.\r\n *\r\n * @function Phaser.Geom.Point.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The original `Point` to compare against.\r\n * @param {Phaser.Geom.Point} toCompare - The second `Point` to compare.\r\n *\r\n * @return {boolean} Returns true if the both `Point` objects are equal.\r\n */\r\nvar Equals = function (point, toCompare)\r\n{\r\n    return (point.x === toCompare.x && point.y === toCompare.y);\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0VxdWFscy5qcz9lMDgzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBhcmlzb24gb2YgdHdvIGBQb2ludGAgb2JqZWN0cyB0byBzZWUgaWYgdGhleSBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gVGhlIG9yaWdpbmFsIGBQb2ludGAgdG8gY29tcGFyZSBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIGBQb2ludGAgdG8gY29tcGFyZS5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBib3RoIGBQb2ludGAgb2JqZWN0cyBhcmUgZXF1YWwuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKHBvaW50LCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAocG9pbnQueCA9PT0gdG9Db21wYXJlLnggJiYgcG9pbnQueSA9PT0gdG9Db21wYXJlLnkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Floor.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Floor.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Apply `Math.ceil()` to each coordinate of the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Floor\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to floor.\r\n *\r\n * @return {Phaser.Geom.Point} The Point with `Math.floor()` applied to its coordinates.\r\n */\r\nvar Floor = function (point)\r\n{\r\n    return point.setTo(Math.floor(point.x), Math.floor(point.y));\r\n};\r\n\r\nmodule.exports = Floor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0Zsb29yLmpzPzQ4ZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9GbG9vci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEFwcGx5IGBNYXRoLmNlaWwoKWAgdG8gZWFjaCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkZsb29yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgUG9pbnQgdG8gZmxvb3IuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgUG9pbnQgd2l0aCBgTWF0aC5mbG9vcigpYCBhcHBsaWVkIHRvIGl0cyBjb29yZGluYXRlcy5cclxuICovXHJcbnZhciBGbG9vciA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKE1hdGguZmxvb3IocG9pbnQueCksIE1hdGguZmxvb3IocG9pbnQueSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbG9vcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Floor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/GetCentroid.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/GetCentroid.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the centroid or geometric center of a plane figure (the arithmetic mean position of all the points in the figure).\r\n * Informally, it is the point at which a cutout of the shape could be perfectly balanced on the tip of a pin.\r\n *\r\n * @function Phaser.Geom.Point.GetCentroid\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point[]} points - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar GetCentroid = function (points, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    if (!Array.isArray(points))\r\n    {\r\n        throw new Error('GetCentroid points argument must be an array');\r\n    }\r\n\r\n    var len = points.length;\r\n\r\n    if (len < 1)\r\n    {\r\n        throw new Error('GetCentroid points array must not be empty');\r\n    }\r\n    else if (len === 1)\r\n    {\r\n        out.x = points[0].x;\r\n        out.y = points[0].y;\r\n    }\r\n    else\r\n    {\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            out.x += points[i].x;\r\n            out.y += points[i].y;\r\n        }\r\n\r\n        out.x /= len;\r\n        out.y /= len;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetCentroid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldENlbnRyb2lkLmpzP2Q2ODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9HZXRDZW50cm9pZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY2VudHJvaWQgb3IgZ2VvbWV0cmljIGNlbnRlciBvZiBhIHBsYW5lIGZpZ3VyZSAodGhlIGFyaXRobWV0aWMgbWVhbiBwb3NpdGlvbiBvZiBhbGwgdGhlIHBvaW50cyBpbiB0aGUgZmlndXJlKS5cclxuICogSW5mb3JtYWxseSwgaXQgaXMgdGhlIHBvaW50IGF0IHdoaWNoIGEgY3V0b3V0IG9mIHRoZSBzaGFwZSBjb3VsZCBiZSBwZXJmZWN0bHkgYmFsYW5jZWQgb24gdGhlIHRpcCBvZiBhIHBpbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldENlbnRyb2lkXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnRbXX0gcG9pbnRzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBHZXRDZW50cm9pZCA9IGZ1bmN0aW9uIChwb2ludHMsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXHJcbiAgICB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHZXRDZW50cm9pZCBwb2ludHMgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheScpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2V0Q2VudHJvaWQgcG9pbnRzIGFycmF5IG11c3Qgbm90IGJlIGVtcHR5Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsZW4gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBwb2ludHNbMF0ueDtcclxuICAgICAgICBvdXQueSA9IHBvaW50c1swXS55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQueCArPSBwb2ludHNbaV0ueDtcclxuICAgICAgICAgICAgb3V0LnkgKz0gcG9pbnRzW2ldLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQueCAvPSBsZW47XHJcbiAgICAgICAgb3V0LnkgLz0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRyb2lkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetCentroid.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/GetMagnitude.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/GetMagnitude.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the magnitude of the point, which equivalent to the length of the line from the origin to this point.\r\n *\r\n * @function Phaser.Geom.Point.GetMagnitude\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The point to calculate the magnitude for\r\n *\r\n * @return {number} The resulting magnitude\r\n */\r\nvar GetMagnitude = function (point)\r\n{\r\n    return Math.sqrt((point.x * point.x) + (point.y * point.y));\r\n};\r\n\r\nmodule.exports = GetMagnitude;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZS5qcz9lOGYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9HZXRNYWduaXR1ZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgcG9pbnQsIHdoaWNoIGVxdWl2YWxlbnQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhpcyBwb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldE1hZ25pdHVkZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBtYWduaXR1ZGUgZm9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJlc3VsdGluZyBtYWduaXR1ZGVcclxuICovXHJcbnZhciBHZXRNYWduaXR1ZGUgPSBmdW5jdGlvbiAocG9pbnQpXHJcbntcclxuICAgIHJldHVybiBNYXRoLnNxcnQoKHBvaW50LnggKiBwb2ludC54KSArIChwb2ludC55ICogcG9pbnQueSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNYWduaXR1ZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetMagnitude.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/GetMagnitudeSq.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/GetMagnitudeSq.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the square of magnitude of given point.(Can be used for fast magnitude calculation of point)\r\n *\r\n * @function Phaser.Geom.Point.GetMagnitudeSq\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - Returns square of the magnitude/length of given point.\r\n *\r\n * @return {number} Returns square of the magnitude of given point.\r\n */\r\nvar GetMagnitudeSq = function (point)\r\n{\r\n    return (point.x * point.x) + (point.y * point.y);\r\n};\r\n\r\nmodule.exports = GetMagnitudeSq;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZVNxLmpzP2ZmNTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZVNxLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIG9mIG1hZ25pdHVkZSBvZiBnaXZlbiBwb2ludC4oQ2FuIGJlIHVzZWQgZm9yIGZhc3QgbWFnbml0dWRlIGNhbGN1bGF0aW9uIG9mIHBvaW50KVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9pbnQuR2V0TWFnbml0dWRlU3FcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gUmV0dXJucyBzcXVhcmUgb2YgdGhlIG1hZ25pdHVkZS9sZW5ndGggb2YgZ2l2ZW4gcG9pbnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyBzcXVhcmUgb2YgdGhlIG1hZ25pdHVkZSBvZiBnaXZlbiBwb2ludC5cclxuICovXHJcbnZhciBHZXRNYWduaXR1ZGVTcSA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIChwb2ludC54ICogcG9pbnQueCkgKyAocG9pbnQueSAqIHBvaW50LnkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNYWduaXR1ZGVTcTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Calculates the Axis Aligned Bounding Box (or aabb) from an array of points.\r\n *\r\n * @function Phaser.Geom.Point.GetRectangleFromPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point[]} points - [description]\r\n * @param {Phaser.Geom.Rectangle} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Rectangle} [description]\r\n */\r\nvar GetRectangleFromPoints = function (points, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    var xMax = Number.NEGATIVE_INFINITY;\r\n    var xMin = Number.POSITIVE_INFINITY;\r\n    var yMax = Number.NEGATIVE_INFINITY;\r\n    var yMin = Number.POSITIVE_INFINITY;\r\n\r\n    for (var i = 0; i < points.length; i++)\r\n    {\r\n        var point = points[i];\r\n\r\n        if (point.x > xMax)\r\n        {\r\n            xMax = point.x;\r\n        }\r\n\r\n        if (point.x < xMin)\r\n        {\r\n            xMin = point.x;\r\n        }\r\n\r\n        if (point.y > yMax)\r\n        {\r\n            yMax = point.y;\r\n        }\r\n\r\n        if (point.y < yMin)\r\n        {\r\n            yMin = point.y;\r\n        }\r\n    }\r\n\r\n    out.x = xMin;\r\n    out.y = yMin;\r\n    out.width = xMax - xMin;\r\n    out.height = yMax - yMin;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetRectangleFromPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldFJlY3RhbmdsZUZyb21Qb2ludHMuanM/MDE3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvR2V0UmVjdGFuZ2xlRnJvbVBvaW50cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBBeGlzIEFsaWduZWQgQm91bmRpbmcgQm94IChvciBhYWJiKSBmcm9tIGFuIGFycmF5IG9mIHBvaW50cy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldFJlY3RhbmdsZUZyb21Qb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnRbXX0gcG9pbnRzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEdldFJlY3RhbmdsZUZyb21Qb2ludHMgPSBmdW5jdGlvbiAocG9pbnRzLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUmVjdGFuZ2xlKCk7IH1cclxuXHJcbiAgICB2YXIgeE1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB4TWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHlNYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeU1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICAgIGlmIChwb2ludC54ID4geE1heClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHhNYXggPSBwb2ludC54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50LnggPCB4TWluKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeE1pbiA9IHBvaW50Lng7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocG9pbnQueSA+IHlNYXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB5TWF4ID0gcG9pbnQueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludC55IDwgeU1pbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHlNaW4gPSBwb2ludC55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXQueCA9IHhNaW47XHJcbiAgICBvdXQueSA9IHlNaW47XHJcbiAgICBvdXQud2lkdGggPSB4TWF4IC0geE1pbjtcclxuICAgIG91dC5oZWlnaHQgPSB5TWF4IC0geU1pbjtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRSZWN0YW5nbGVGcm9tUG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Interpolate.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Interpolate.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.Interpolate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - The starting `Point` for the interpolation.\r\n * @param {Phaser.Geom.Point} pointB - The target `Point` for the interpolation.\r\n * @param {number} [t=0] - The amount to interpolate between the two points. Generally, a value between 0 (returns the starting `Point`) and 1 (returns the target `Point`). If omitted, 0 is used.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional `Point` object whose `x` and `y` values will be set to the result of the interpolation (can also be any object with `x` and `y` properties). If omitted, a new `Point` created and returned.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} Either the object from the `out` argument with the properties `x` and `y` set to the result of the interpolation or a newly created `Point` object.\r\n */\r\nvar Interpolate = function (pointA, pointB, t, out)\r\n{\r\n    if (t === undefined) { t = 0; }\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = pointA.x + ((pointB.x - pointA.x) * t);\r\n    out.y = pointA.y + ((pointB.y - pointA.y) * t);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Interpolate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludGVycG9sYXRlLmpzPzE5ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTztBQUNqQyw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludGVycG9sYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9pbnQuSW50ZXJwb2xhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnRBIC0gVGhlIHN0YXJ0aW5nIGBQb2ludGAgZm9yIHRoZSBpbnRlcnBvbGF0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludEIgLSBUaGUgdGFyZ2V0IGBQb2ludGAgZm9yIHRoZSBpbnRlcnBvbGF0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3Q9MF0gLSBUaGUgYW1vdW50IHRvIGludGVycG9sYXRlIGJldHdlZW4gdGhlIHR3byBwb2ludHMuIEdlbmVyYWxseSwgYSB2YWx1ZSBiZXR3ZWVuIDAgKHJldHVybnMgdGhlIHN0YXJ0aW5nIGBQb2ludGApIGFuZCAxIChyZXR1cm5zIHRoZSB0YXJnZXQgYFBvaW50YCkuIElmIG9taXR0ZWQsIDAgaXMgdXNlZC5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBgUG9pbnRgIG9iamVjdCB3aG9zZSBgeGAgYW5kIGB5YCB2YWx1ZXMgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJwb2xhdGlvbiAoY2FuIGFsc28gYmUgYW55IG9iamVjdCB3aXRoIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMpLiBJZiBvbWl0dGVkLCBhIG5ldyBgUG9pbnRgIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gRWl0aGVyIHRoZSBvYmplY3QgZnJvbSB0aGUgYG91dGAgYXJndW1lbnQgd2l0aCB0aGUgcHJvcGVydGllcyBgeGAgYW5kIGB5YCBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJwb2xhdGlvbiBvciBhIG5ld2x5IGNyZWF0ZWQgYFBvaW50YCBvYmplY3QuXHJcbiAqL1xyXG52YXIgSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAocG9pbnRBLCBwb2ludEIsIHQsIG91dClcclxue1xyXG4gICAgaWYgKHQgPT09IHVuZGVmaW5lZCkgeyB0ID0gMDsgfVxyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBwb2ludEEueCArICgocG9pbnRCLnggLSBwb2ludEEueCkgKiB0KTtcclxuICAgIG91dC55ID0gcG9pbnRBLnkgKyAoKHBvaW50Qi55IC0gcG9pbnRBLnkpICogdCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJwb2xhdGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Interpolate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Invert.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Invert.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Swaps the X and the Y coordinate of a point.\r\n *\r\n * @function Phaser.Geom.Point.Invert\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to modify.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `point`.\r\n */\r\nvar Invert = function (point)\r\n{\r\n    return point.setTo(point.y, point.x);\r\n};\r\n\r\nmodule.exports = Invert;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludmVydC5qcz8yMTAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvSW52ZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU3dhcHMgdGhlIFggYW5kIHRoZSBZIGNvb3JkaW5hdGUgb2YgYSBwb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkludmVydFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gVGhlIFBvaW50IHRvIG1vZGlmeS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBtb2RpZmllZCBgcG9pbnRgLlxyXG4gKi9cclxudmFyIEludmVydCA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKHBvaW50LnksIHBvaW50LngpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Invert.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Negative.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Negative.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Inverts a Point's coordinates.\r\n *\r\n * @function Phaser.Geom.Point.Negative\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to invert.\r\n * @param {Phaser.Geom.Point} [out] - The Point to return the inverted coordinates in.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `out` Point, or a new Point if none was provided.\r\n */\r\nvar Negative = function (point, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    return out.setTo(-point.x, -point.y);\r\n};\r\n\r\nmodule.exports = Negative;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L05lZ2F0aXZlLmpzPzYwYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L05lZ2F0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIFBvaW50J3MgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5OZWdhdGl2ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byBpbnZlcnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IFtvdXRdIC0gVGhlIFBvaW50IHRvIHJldHVybiB0aGUgaW52ZXJ0ZWQgY29vcmRpbmF0ZXMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgbW9kaWZpZWQgYG91dGAgUG9pbnQsIG9yIGEgbmV3IFBvaW50IGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIE5lZ2F0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHJldHVybiBvdXQuc2V0VG8oLXBvaW50LngsIC1wb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTmVnYXRpdmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Negative.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Point.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Point.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Defines a Point in 2D space, with an x and y component.\r\n *\r\n * @class Point\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x coordinate of this Point.\r\n * @param {number} [y=x] - The y coordinate of this Point.\r\n */\r\nvar Point = new Class({\r\n\r\n    initialize:\r\n\r\n    function Point (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.POINT`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Point#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.POINT;\r\n\r\n        /**\r\n         * The x coordinate of this Point.\r\n         *\r\n         * @name Phaser.Geom.Point#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y coordinate of this Point.\r\n         *\r\n         * @name Phaser.Geom.Point#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n    },\r\n\r\n    /**\r\n     * Set the x and y coordinates of the point to the given values.\r\n     *\r\n     * @method Phaser.Geom.Point#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The x coordinate of this Point.\r\n     * @param {number} [y=x] - The y coordinate of this Point.\r\n     *\r\n     * @return {Phaser.Geom.Point} This Point object.\r\n     */\r\n    setTo: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Point;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1BvaW50LmpzPzMxZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMseURBQVU7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIERlZmluZXMgYSBQb2ludCBpbiAyRCBzcGFjZSwgd2l0aCBhbiB4IGFuZCB5IGNvbXBvbmVudC5cclxuICpcclxuICogQGNsYXNzIFBvaW50XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIFBvaW50LlxyXG4gKi9cclxudmFyIFBvaW50ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBvaW50ICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBnZW9tZXRyeSBjb25zdGFudCB0eXBlIG9mIHRoaXMgb2JqZWN0OiBgR0VPTV9DT05TVC5QT0lOVGAuXHJcbiAgICAgICAgICogVXNlZCBmb3IgZmFzdCB0eXBlIGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9pbnQjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULlBPSU5UO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoaXMgUG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5Qb2ludCN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIFBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9pbnQjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUG9pbnQjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhpcyBQb2ludCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Point.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/Project.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/Project.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar GetMagnitudeSq = __webpack_require__(/*! ./GetMagnitudeSq */ \"./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.Project\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - [description]\r\n * @param {Phaser.Geom.Point} pointB - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar Project = function (pointA, pointB, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var dot = ((pointA.x * pointB.x) + (pointA.y * pointB.y));\r\n    var amt = dot / GetMagnitudeSq(pointB);\r\n\r\n    if (amt !== 0)\r\n    {\r\n        out.x = amt * pointB.x;\r\n        out.y = amt * pointB.y;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Project;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1Byb2plY3QuanM/ODBmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDhEQUFTO0FBQzdCLHFCQUFxQixtQkFBTyxDQUFDLGdGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9Qcm9qZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcbnZhciBHZXRNYWduaXR1ZGVTcSA9IHJlcXVpcmUoJy4vR2V0TWFnbml0dWRlU3EnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5Qcm9qZWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50QSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnRCIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQcm9qZWN0ID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBkb3QgPSAoKHBvaW50QS54ICogcG9pbnRCLngpICsgKHBvaW50QS55ICogcG9pbnRCLnkpKTtcclxuICAgIHZhciBhbXQgPSBkb3QgLyBHZXRNYWduaXR1ZGVTcShwb2ludEIpO1xyXG5cclxuICAgIGlmIChhbXQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBhbXQgKiBwb2ludEIueDtcclxuICAgICAgICBvdXQueSA9IGFtdCAqIHBvaW50Qi55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2plY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Project.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/ProjectUnit.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/ProjectUnit.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.ProjectUnit\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - [description]\r\n * @param {Phaser.Geom.Point} pointB - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar ProjectUnit = function (pointA, pointB, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var amt = ((pointA.x * pointB.x) + (pointA.y * pointB.y));\r\n\r\n    if (amt !== 0)\r\n    {\r\n        out.x = amt * pointB.x;\r\n        out.y = amt * pointB.y;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = ProjectUnit;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1Byb2plY3RVbml0LmpzP2Q5NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvUHJvamVjdFVuaXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5Qcm9qZWN0VW5pdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludEEgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50QiAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUHJvamVjdFVuaXQgPSBmdW5jdGlvbiAocG9pbnRBLCBwb2ludEIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGFtdCA9ICgocG9pbnRBLnggKiBwb2ludEIueCkgKyAocG9pbnRBLnkgKiBwb2ludEIueSkpO1xyXG5cclxuICAgIGlmIChhbXQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBhbXQgKiBwb2ludEIueDtcclxuICAgICAgICBvdXQueSA9IGFtdCAqIHBvaW50Qi55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2plY3RVbml0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/ProjectUnit.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/SetMagnitude.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/SetMagnitude.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetMagnitude = __webpack_require__(/*! ./GetMagnitude */ \"./node_modules/phaser/src/geom/point/GetMagnitude.js\");\r\n\r\n/**\r\n * Changes the magnitude (length) of a two-dimensional vector without changing its direction.\r\n *\r\n * @function Phaser.Geom.Point.SetMagnitude\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to treat as the end point of the vector.\r\n * @param {number} magnitude - The new magnitude of the vector.\r\n *\r\n * @return {Phaser.Geom.Point} The modified Point.\r\n */\r\nvar SetMagnitude = function (point, magnitude)\r\n{\r\n    if (point.x !== 0 || point.y !== 0)\r\n    {\r\n        var m = GetMagnitude(point);\r\n\r\n        point.x /= m;\r\n        point.y /= m;\r\n    }\r\n\r\n    point.x *= magnitude;\r\n    point.y *= magnitude;\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = SetMagnitude;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1NldE1hZ25pdHVkZS5qcz81MzExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyw0RUFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1NldE1hZ25pdHVkZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldE1hZ25pdHVkZSA9IHJlcXVpcmUoJy4vR2V0TWFnbml0dWRlJyk7XHJcblxyXG4vKipcclxuICogQ2hhbmdlcyB0aGUgbWFnbml0dWRlIChsZW5ndGgpIG9mIGEgdHdvLWRpbWVuc2lvbmFsIHZlY3RvciB3aXRob3V0IGNoYW5naW5nIGl0cyBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5TZXRNYWduaXR1ZGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtwb2ludCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byB0cmVhdCBhcyB0aGUgZW5kIHBvaW50IG9mIHRoZSB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYWduaXR1ZGUgLSBUaGUgbmV3IG1hZ25pdHVkZSBvZiB0aGUgdmVjdG9yLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIG1vZGlmaWVkIFBvaW50LlxyXG4gKi9cclxudmFyIFNldE1hZ25pdHVkZSA9IGZ1bmN0aW9uIChwb2ludCwgbWFnbml0dWRlKVxyXG57XHJcbiAgICBpZiAocG9pbnQueCAhPT0gMCB8fCBwb2ludC55ICE9PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtID0gR2V0TWFnbml0dWRlKHBvaW50KTtcclxuXHJcbiAgICAgICAgcG9pbnQueCAvPSBtO1xyXG4gICAgICAgIHBvaW50LnkgLz0gbTtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludC54ICo9IG1hZ25pdHVkZTtcclxuICAgIHBvaW50LnkgKj0gbWFnbml0dWRlO1xyXG5cclxuICAgIHJldHVybiBwb2ludDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0TWFnbml0dWRlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/SetMagnitude.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/point/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/geom/point/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\nPoint.Ceil = __webpack_require__(/*! ./Ceil */ \"./node_modules/phaser/src/geom/point/Ceil.js\");\r\nPoint.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/point/Clone.js\");\r\nPoint.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/point/CopyFrom.js\");\r\nPoint.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/point/Equals.js\");\r\nPoint.Floor = __webpack_require__(/*! ./Floor */ \"./node_modules/phaser/src/geom/point/Floor.js\");\r\nPoint.GetCentroid = __webpack_require__(/*! ./GetCentroid */ \"./node_modules/phaser/src/geom/point/GetCentroid.js\");\r\nPoint.GetMagnitude = __webpack_require__(/*! ./GetMagnitude */ \"./node_modules/phaser/src/geom/point/GetMagnitude.js\");\r\nPoint.GetMagnitudeSq = __webpack_require__(/*! ./GetMagnitudeSq */ \"./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\");\r\nPoint.GetRectangleFromPoints = __webpack_require__(/*! ./GetRectangleFromPoints */ \"./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js\");\r\nPoint.Interpolate = __webpack_require__(/*! ./Interpolate */ \"./node_modules/phaser/src/geom/point/Interpolate.js\");\r\nPoint.Invert = __webpack_require__(/*! ./Invert */ \"./node_modules/phaser/src/geom/point/Invert.js\");\r\nPoint.Negative = __webpack_require__(/*! ./Negative */ \"./node_modules/phaser/src/geom/point/Negative.js\");\r\nPoint.Project = __webpack_require__(/*! ./Project */ \"./node_modules/phaser/src/geom/point/Project.js\");\r\nPoint.ProjectUnit = __webpack_require__(/*! ./ProjectUnit */ \"./node_modules/phaser/src/geom/point/ProjectUnit.js\");\r\nPoint.SetMagnitude = __webpack_require__(/*! ./SetMagnitude */ \"./node_modules/phaser/src/geom/point/SetMagnitude.js\");\r\n\r\nmodule.exports = Point;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L2luZGV4LmpzPzIxMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0IsYUFBYSxtQkFBTyxDQUFDLDREQUFRO0FBQzdCLGNBQWMsbUJBQU8sQ0FBQyw4REFBUztBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBWTtBQUNyQyxlQUFlLG1CQUFPLENBQUMsZ0VBQVU7QUFDakMsY0FBYyxtQkFBTyxDQUFDLDhEQUFTO0FBQy9CLG9CQUFvQixtQkFBTyxDQUFDLDBFQUFlO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLDRFQUFnQjtBQUM3Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBa0I7QUFDakQsK0JBQStCLG1CQUFPLENBQUMsZ0dBQTBCO0FBQ2pFLG9CQUFvQixtQkFBTyxDQUFDLDBFQUFlO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxnRUFBVTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBWTtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNuQyxvQkFBb0IsbUJBQU8sQ0FBQywwRUFBZTtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyw0RUFBZ0I7O0FBRTdDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuUG9pbnQuQ2VpbCA9IHJlcXVpcmUoJy4vQ2VpbCcpO1xyXG5Qb2ludC5DbG9uZSA9IHJlcXVpcmUoJy4vQ2xvbmUnKTtcclxuUG9pbnQuQ29weUZyb20gPSByZXF1aXJlKCcuL0NvcHlGcm9tJyk7XHJcblBvaW50LkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblBvaW50LkZsb29yID0gcmVxdWlyZSgnLi9GbG9vcicpO1xyXG5Qb2ludC5HZXRDZW50cm9pZCA9IHJlcXVpcmUoJy4vR2V0Q2VudHJvaWQnKTtcclxuUG9pbnQuR2V0TWFnbml0dWRlID0gcmVxdWlyZSgnLi9HZXRNYWduaXR1ZGUnKTtcclxuUG9pbnQuR2V0TWFnbml0dWRlU3EgPSByZXF1aXJlKCcuL0dldE1hZ25pdHVkZVNxJyk7XHJcblBvaW50LkdldFJlY3RhbmdsZUZyb21Qb2ludHMgPSByZXF1aXJlKCcuL0dldFJlY3RhbmdsZUZyb21Qb2ludHMnKTtcclxuUG9pbnQuSW50ZXJwb2xhdGUgPSByZXF1aXJlKCcuL0ludGVycG9sYXRlJyk7XHJcblBvaW50LkludmVydCA9IHJlcXVpcmUoJy4vSW52ZXJ0Jyk7XHJcblBvaW50Lk5lZ2F0aXZlID0gcmVxdWlyZSgnLi9OZWdhdGl2ZScpO1xyXG5Qb2ludC5Qcm9qZWN0ID0gcmVxdWlyZSgnLi9Qcm9qZWN0Jyk7XHJcblBvaW50LlByb2plY3RVbml0ID0gcmVxdWlyZSgnLi9Qcm9qZWN0VW5pdCcpO1xyXG5Qb2ludC5TZXRNYWduaXR1ZGUgPSByZXF1aXJlKCcuL1NldE1hZ25pdHVkZScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Clone.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Clone.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\n\r\n/**\r\n * Create a new polygon which is a copy of the specified polygon\r\n *\r\n * @function Phaser.Geom.Polygon.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon to create a clone of\r\n *\r\n * @return {Phaser.Geom.Polygon} A new separate Polygon cloned from the specified polygon, based on the same points.\r\n */\r\nvar Clone = function (polygon)\r\n{\r\n    return new Polygon(polygon.points);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ2xvbmUuanM/MDdkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2x5Z29uID0gcmVxdWlyZSgnLi9Qb2x5Z29uJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IHBvbHlnb24gd2hpY2ggaXMgYSBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgcG9seWdvblxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5DbG9uZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIHBvbHlnb24gdG8gY3JlYXRlIGEgY2xvbmUgb2ZcclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gQSBuZXcgc2VwYXJhdGUgUG9seWdvbiBjbG9uZWQgZnJvbSB0aGUgc3BlY2lmaWVkIHBvbHlnb24sIGJhc2VkIG9uIHRoZSBzYW1lIHBvaW50cy5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChwb2x5Z29uKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IFBvbHlnb24ocG9seWdvbi5wb2ludHMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDbG9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Contains.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Contains.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Checks whether the x and y coordinates are contained within this polygon.\r\n//  Adapted from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html by Jonas Raoni Soares Silva\r\n\r\n/**\r\n * Checks if a point is within the bounds of a Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to check against.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is within the bounds of the Polygon, otherwise `false`.\r\n */\r\nvar Contains = function (polygon, x, y)\r\n{\r\n    var inside = false;\r\n\r\n    for (var i = -1, j = polygon.points.length - 1; ++i < polygon.points.length; j = i)\r\n    {\r\n        var ix = polygon.points[i].x;\r\n        var iy = polygon.points[i].y;\r\n\r\n        var jx = polygon.points[j].x;\r\n        var jy = polygon.points[j].y;\r\n\r\n        if (((iy <= y && y < jy) || (jy <= y && y < iy)) && (x < (jx - ix) * (y - iy) / (jy - iy) + ix))\r\n        {\r\n            inside = !inside;\r\n        }\r\n    }\r\n\r\n    return inside;\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnMuanM/MzI5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCw2QkFBNkI7QUFDaEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2x5Z29uL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb24uXHJcbi8vICBBZGFwdGVkIGZyb20gaHR0cDovL3d3dy5lY3NlLnJwaS5lZHUvSG9tZXBhZ2VzL3dyZi9SZXNlYXJjaC9TaG9ydF9Ob3Rlcy9wbnBvbHkuaHRtbCBieSBKb25hcyBSYW9uaSBTb2FyZXMgU2lsdmFcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBhIFBvbHlnb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkNvbnRhaW5zXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvbHlnb259IHBvbHlnb24gLSBUaGUgUG9seWdvbiB0byBjaGVjayBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBQb2x5Z29uLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChwb2x5Z29uLCB4LCB5KVxyXG57XHJcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IC0xLCBqID0gcG9seWdvbi5wb2ludHMubGVuZ3RoIC0gMTsgKytpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBqID0gaSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaXggPSBwb2x5Z29uLnBvaW50c1tpXS54O1xyXG4gICAgICAgIHZhciBpeSA9IHBvbHlnb24ucG9pbnRzW2ldLnk7XHJcblxyXG4gICAgICAgIHZhciBqeCA9IHBvbHlnb24ucG9pbnRzW2pdLng7XHJcbiAgICAgICAgdmFyIGp5ID0gcG9seWdvbi5wb2ludHNbal0ueTtcclxuXHJcbiAgICAgICAgaWYgKCgoaXkgPD0geSAmJiB5IDwgankpIHx8IChqeSA8PSB5ICYmIHkgPCBpeSkpICYmICh4IDwgKGp4IC0gaXgpICogKHkgLSBpeSkgLyAoankgLSBpeSkgKyBpeCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zaWRlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Contains.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/ContainsPoint.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/ContainsPoint.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Polygon.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - [description]\r\n * @param {Phaser.Geom.Point} point - [description]\r\n *\r\n * @return {boolean} [description]\r\n */\r\nvar ContainsPoint = function (polygon, point)\r\n{\r\n    return Contains(polygon, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnNQb2ludC5qcz9lMTg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnNQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAocG9seWdvbiwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyhwb2x5Z29uLCBwb2ludC54LCBwb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/ContainsPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Earcut.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Earcut.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Earcut 2.1.4 (December 4th 2018)\r\n\r\n/*\r\n * ISC License\r\n * \r\n * Copyright (c) 2016, Mapbox\r\n * \r\n * Permission to use, copy, modify, and/or distribute this software for any purpose\r\n * with or without fee is hereby granted, provided that the above copyright notice\r\n * and this permission notice appear in all copies.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\r\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\r\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\r\n * THIS SOFTWARE.\r\n */\r\n\r\n\r\n\r\nmodule.exports = earcut;\r\n\r\nfunction earcut(data, holeIndices, dim) {\r\n\r\n    dim = dim || 2;\r\n\r\n    var hasHoles = holeIndices && holeIndices.length,\r\n        outerLen = hasHoles ? holeIndices[0] * dim : data.length,\r\n        outerNode = linkedList(data, 0, outerLen, dim, true),\r\n        triangles = [];\r\n\r\n    if (!outerNode || outerNode.next === outerNode.prev) return triangles;\r\n\r\n    var minX, minY, maxX, maxY, x, y, invSize;\r\n\r\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\r\n\r\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\r\n    if (data.length > 80 * dim) {\r\n        minX = maxX = data[0];\r\n        minY = maxY = data[1];\r\n\r\n        for (var i = dim; i < outerLen; i += dim) {\r\n            x = data[i];\r\n            y = data[i + 1];\r\n            if (x < minX) minX = x;\r\n            if (y < minY) minY = y;\r\n            if (x > maxX) maxX = x;\r\n            if (y > maxY) maxY = y;\r\n        }\r\n\r\n        // minX, minY and invSize are later used to transform coords into integers for z-order calculation\r\n        invSize = Math.max(maxX - minX, maxY - minY);\r\n        invSize = invSize !== 0 ? 1 / invSize : 0;\r\n    }\r\n\r\n    earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\r\n\r\n    return triangles;\r\n}\r\n\r\n// create a circular doubly linked list from polygon points in the specified winding order\r\nfunction linkedList(data, start, end, dim, clockwise) {\r\n    var i, last;\r\n\r\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\r\n        for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\r\n    } else {\r\n        for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\r\n    }\r\n\r\n    if (last && equals(last, last.next)) {\r\n        removeNode(last);\r\n        last = last.next;\r\n    }\r\n\r\n    return last;\r\n}\r\n\r\n// eliminate collinear or duplicate points\r\nfunction filterPoints(start, end) {\r\n    if (!start) return start;\r\n    if (!end) end = start;\r\n\r\n    var p = start,\r\n        again;\r\n    do {\r\n        again = false;\r\n\r\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\r\n            removeNode(p);\r\n            p = end = p.prev;\r\n            if (p === p.next) break;\r\n            again = true;\r\n\r\n        } else {\r\n            p = p.next;\r\n        }\r\n    } while (again || p !== end);\r\n\r\n    return end;\r\n}\r\n\r\n// main ear slicing loop which triangulates a polygon (given as a linked list)\r\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\r\n    if (!ear) return;\r\n\r\n    // interlink polygon nodes in z-order\r\n    if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\r\n\r\n    var stop = ear,\r\n        prev, next;\r\n\r\n    // iterate through ears, slicing them one by one\r\n    while (ear.prev !== ear.next) {\r\n        prev = ear.prev;\r\n        next = ear.next;\r\n\r\n        if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\r\n            // cut off the triangle\r\n            triangles.push(prev.i / dim);\r\n            triangles.push(ear.i / dim);\r\n            triangles.push(next.i / dim);\r\n\r\n            removeNode(ear);\r\n\r\n            // skipping the next vertex leads to less sliver triangles\r\n            ear = next.next;\r\n            stop = next.next;\r\n\r\n            continue;\r\n        }\r\n\r\n        ear = next;\r\n\r\n        // if we looped through the whole remaining polygon and can't find any more ears\r\n        if (ear === stop) {\r\n            // try filtering points and slicing again\r\n            if (!pass) {\r\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\r\n\r\n            // if this didn't work, try curing all small self-intersections locally\r\n            } else if (pass === 1) {\r\n                ear = cureLocalIntersections(ear, triangles, dim);\r\n                earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\r\n\r\n            // as a last resort, try splitting the remaining polygon into two\r\n            } else if (pass === 2) {\r\n                splitEarcut(ear, triangles, dim, minX, minY, invSize);\r\n            }\r\n\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\n// check whether a polygon node forms a valid ear with adjacent nodes\r\nfunction isEar(ear) {\r\n    var a = ear.prev,\r\n        b = ear,\r\n        c = ear.next;\r\n\r\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\r\n\r\n    // now make sure we don't have other points inside the potential ear\r\n    var p = ear.next.next;\r\n\r\n    while (p !== ear.prev) {\r\n        if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n            area(p.prev, p, p.next) >= 0) return false;\r\n        p = p.next;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nfunction isEarHashed(ear, minX, minY, invSize) {\r\n    var a = ear.prev,\r\n        b = ear,\r\n        c = ear.next;\r\n\r\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\r\n\r\n    // triangle bbox; min & max are calculated like this for speed\r\n    var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\r\n        minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\r\n        maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\r\n        maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\r\n\r\n    // z-order range for the current triangle bbox;\r\n    var minZ = zOrder(minTX, minTY, minX, minY, invSize),\r\n        maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\r\n\r\n    var p = ear.prevZ,\r\n        n = ear.nextZ;\r\n\r\n    // look for points inside the triangle in both directions\r\n    while (p && p.z >= minZ && n && n.z <= maxZ) {\r\n        if (p !== ear.prev && p !== ear.next &&\r\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n            area(p.prev, p, p.next) >= 0) return false;\r\n        p = p.prevZ;\r\n\r\n        if (n !== ear.prev && n !== ear.next &&\r\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\r\n            area(n.prev, n, n.next) >= 0) return false;\r\n        n = n.nextZ;\r\n    }\r\n\r\n    // look for remaining points in decreasing z-order\r\n    while (p && p.z >= minZ) {\r\n        if (p !== ear.prev && p !== ear.next &&\r\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n            area(p.prev, p, p.next) >= 0) return false;\r\n        p = p.prevZ;\r\n    }\r\n\r\n    // look for remaining points in increasing z-order\r\n    while (n && n.z <= maxZ) {\r\n        if (n !== ear.prev && n !== ear.next &&\r\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\r\n            area(n.prev, n, n.next) >= 0) return false;\r\n        n = n.nextZ;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n// go through all polygon nodes and cure small local self-intersections\r\nfunction cureLocalIntersections(start, triangles, dim) {\r\n    var p = start;\r\n    do {\r\n        var a = p.prev,\r\n            b = p.next.next;\r\n\r\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\r\n\r\n            triangles.push(a.i / dim);\r\n            triangles.push(p.i / dim);\r\n            triangles.push(b.i / dim);\r\n\r\n            // remove two nodes involved\r\n            removeNode(p);\r\n            removeNode(p.next);\r\n\r\n            p = start = b;\r\n        }\r\n        p = p.next;\r\n    } while (p !== start);\r\n\r\n    return p;\r\n}\r\n\r\n// try splitting polygon into two and triangulate them independently\r\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\r\n    // look for a valid diagonal that divides the polygon into two\r\n    var a = start;\r\n    do {\r\n        var b = a.next.next;\r\n        while (b !== a.prev) {\r\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\r\n                // split the polygon in two by the diagonal\r\n                var c = splitPolygon(a, b);\r\n\r\n                // filter collinear points around the cuts\r\n                a = filterPoints(a, a.next);\r\n                c = filterPoints(c, c.next);\r\n\r\n                // run earcut on each half\r\n                earcutLinked(a, triangles, dim, minX, minY, invSize);\r\n                earcutLinked(c, triangles, dim, minX, minY, invSize);\r\n                return;\r\n            }\r\n            b = b.next;\r\n        }\r\n        a = a.next;\r\n    } while (a !== start);\r\n}\r\n\r\n// link every hole into the outer loop, producing a single-ring polygon without holes\r\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\r\n    var queue = [],\r\n        i, len, start, end, list;\r\n\r\n    for (i = 0, len = holeIndices.length; i < len; i++) {\r\n        start = holeIndices[i] * dim;\r\n        end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\r\n        list = linkedList(data, start, end, dim, false);\r\n        if (list === list.next) list.steiner = true;\r\n        queue.push(getLeftmost(list));\r\n    }\r\n\r\n    queue.sort(compareX);\r\n\r\n    // process holes from left to right\r\n    for (i = 0; i < queue.length; i++) {\r\n        eliminateHole(queue[i], outerNode);\r\n        outerNode = filterPoints(outerNode, outerNode.next);\r\n    }\r\n\r\n    return outerNode;\r\n}\r\n\r\nfunction compareX(a, b) {\r\n    return a.x - b.x;\r\n}\r\n\r\n// find a bridge between vertices that connects hole with an outer ring and and link it\r\nfunction eliminateHole(hole, outerNode) {\r\n    outerNode = findHoleBridge(hole, outerNode);\r\n    if (outerNode) {\r\n        var b = splitPolygon(outerNode, hole);\r\n        filterPoints(b, b.next);\r\n    }\r\n}\r\n\r\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\r\nfunction findHoleBridge(hole, outerNode) {\r\n    var p = outerNode,\r\n        hx = hole.x,\r\n        hy = hole.y,\r\n        qx = -Infinity,\r\n        m;\r\n\r\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\r\n    // segment's endpoint with lesser x will be potential connection point\r\n    do {\r\n        if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\r\n            var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\r\n            if (x <= hx && x > qx) {\r\n                qx = x;\r\n                if (x === hx) {\r\n                    if (hy === p.y) return p;\r\n                    if (hy === p.next.y) return p.next;\r\n                }\r\n                m = p.x < p.next.x ? p : p.next;\r\n            }\r\n        }\r\n        p = p.next;\r\n    } while (p !== outerNode);\r\n\r\n    if (!m) return null;\r\n\r\n    if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint\r\n\r\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\r\n    // if there are no points found, we have a valid connection;\r\n    // otherwise choose the point of the minimum angle with the ray as connection point\r\n\r\n    var stop = m,\r\n        mx = m.x,\r\n        my = m.y,\r\n        tanMin = Infinity,\r\n        tan;\r\n\r\n    p = m.next;\r\n\r\n    while (p !== stop) {\r\n        if (hx >= p.x && p.x >= mx && hx !== p.x &&\r\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\r\n\r\n            tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\r\n\r\n            if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {\r\n                m = p;\r\n                tanMin = tan;\r\n            }\r\n        }\r\n\r\n        p = p.next;\r\n    }\r\n\r\n    return m;\r\n}\r\n\r\n// interlink polygon nodes in z-order\r\nfunction indexCurve(start, minX, minY, invSize) {\r\n    var p = start;\r\n    do {\r\n        if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\r\n        p.prevZ = p.prev;\r\n        p.nextZ = p.next;\r\n        p = p.next;\r\n    } while (p !== start);\r\n\r\n    p.prevZ.nextZ = null;\r\n    p.prevZ = null;\r\n\r\n    sortLinked(p);\r\n}\r\n\r\n// Simon Tatham's linked list merge sort algorithm\r\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\r\nfunction sortLinked(list) {\r\n    var i, p, q, e, tail, numMerges, pSize, qSize,\r\n        inSize = 1;\r\n\r\n    do {\r\n        p = list;\r\n        list = null;\r\n        tail = null;\r\n        numMerges = 0;\r\n\r\n        while (p) {\r\n            numMerges++;\r\n            q = p;\r\n            pSize = 0;\r\n            for (i = 0; i < inSize; i++) {\r\n                pSize++;\r\n                q = q.nextZ;\r\n                if (!q) break;\r\n            }\r\n            qSize = inSize;\r\n\r\n            while (pSize > 0 || (qSize > 0 && q)) {\r\n\r\n                if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\r\n                    e = p;\r\n                    p = p.nextZ;\r\n                    pSize--;\r\n                } else {\r\n                    e = q;\r\n                    q = q.nextZ;\r\n                    qSize--;\r\n                }\r\n\r\n                if (tail) tail.nextZ = e;\r\n                else list = e;\r\n\r\n                e.prevZ = tail;\r\n                tail = e;\r\n            }\r\n\r\n            p = q;\r\n        }\r\n\r\n        tail.nextZ = null;\r\n        inSize *= 2;\r\n\r\n    } while (numMerges > 1);\r\n\r\n    return list;\r\n}\r\n\r\n// z-order of a point given coords and inverse of the longer side of data bbox\r\nfunction zOrder(x, y, minX, minY, invSize) {\r\n    // coords are transformed into non-negative 15-bit integer range\r\n    x = 32767 * (x - minX) * invSize;\r\n    y = 32767 * (y - minY) * invSize;\r\n\r\n    x = (x | (x << 8)) & 0x00FF00FF;\r\n    x = (x | (x << 4)) & 0x0F0F0F0F;\r\n    x = (x | (x << 2)) & 0x33333333;\r\n    x = (x | (x << 1)) & 0x55555555;\r\n\r\n    y = (y | (y << 8)) & 0x00FF00FF;\r\n    y = (y | (y << 4)) & 0x0F0F0F0F;\r\n    y = (y | (y << 2)) & 0x33333333;\r\n    y = (y | (y << 1)) & 0x55555555;\r\n\r\n    return x | (y << 1);\r\n}\r\n\r\n// find the leftmost node of a polygon ring\r\nfunction getLeftmost(start) {\r\n    var p = start,\r\n        leftmost = start;\r\n    do {\r\n        if (p.x < leftmost.x) leftmost = p;\r\n        p = p.next;\r\n    } while (p !== start);\r\n\r\n    return leftmost;\r\n}\r\n\r\n// check if a point lies within a convex triangle\r\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\r\n    return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\r\n           (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\r\n           (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\r\n}\r\n\r\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\r\nfunction isValidDiagonal(a, b) {\r\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&\r\n           locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);\r\n}\r\n\r\n// signed area of a triangle\r\nfunction area(p, q, r) {\r\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\r\n}\r\n\r\n// check if two points are equal\r\nfunction equals(p1, p2) {\r\n    return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n// check if two segments intersect\r\nfunction intersects(p1, q1, p2, q2) {\r\n    if ((equals(p1, q1) && equals(p2, q2)) ||\r\n        (equals(p1, q2) && equals(p2, q1))) return true;\r\n    return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&\r\n           area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;\r\n}\r\n\r\n// check if a polygon diagonal intersects any polygon segments\r\nfunction intersectsPolygon(a, b) {\r\n    var p = a;\r\n    do {\r\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\r\n                intersects(p, p.next, a, b)) return true;\r\n        p = p.next;\r\n    } while (p !== a);\r\n\r\n    return false;\r\n}\r\n\r\n// check if a polygon diagonal is locally inside the polygon\r\nfunction locallyInside(a, b) {\r\n    return area(a.prev, a, a.next) < 0 ?\r\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\r\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\r\n}\r\n\r\n// check if the middle point of a polygon diagonal is inside the polygon\r\nfunction middleInside(a, b) {\r\n    var p = a,\r\n        inside = false,\r\n        px = (a.x + b.x) / 2,\r\n        py = (a.y + b.y) / 2;\r\n    do {\r\n        if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\r\n                (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\r\n            inside = !inside;\r\n        p = p.next;\r\n    } while (p !== a);\r\n\r\n    return inside;\r\n}\r\n\r\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\r\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\r\nfunction splitPolygon(a, b) {\r\n    var a2 = new Node(a.i, a.x, a.y),\r\n        b2 = new Node(b.i, b.x, b.y),\r\n        an = a.next,\r\n        bp = b.prev;\r\n\r\n    a.next = b;\r\n    b.prev = a;\r\n\r\n    a2.next = an;\r\n    an.prev = a2;\r\n\r\n    b2.next = a2;\r\n    a2.prev = b2;\r\n\r\n    bp.next = b2;\r\n    b2.prev = bp;\r\n\r\n    return b2;\r\n}\r\n\r\n// create a node and optionally link it with previous one (in a circular doubly linked list)\r\nfunction insertNode(i, x, y, last) {\r\n    var p = new Node(i, x, y);\r\n\r\n    if (!last) {\r\n        p.prev = p;\r\n        p.next = p;\r\n\r\n    } else {\r\n        p.next = last.next;\r\n        p.prev = last;\r\n        last.next.prev = p;\r\n        last.next = p;\r\n    }\r\n    return p;\r\n}\r\n\r\nfunction removeNode(p) {\r\n    p.next.prev = p.prev;\r\n    p.prev.next = p.next;\r\n\r\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\r\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\r\n}\r\n\r\nfunction Node(i, x, y) {\r\n    // vertex index in coordinates array\r\n    this.i = i;\r\n\r\n    // vertex coordinates\r\n    this.x = x;\r\n    this.y = y;\r\n\r\n    // previous and next vertex nodes in a polygon ring\r\n    this.prev = null;\r\n    this.next = null;\r\n\r\n    // z-order curve value\r\n    this.z = null;\r\n\r\n    // previous and next nodes in z-order\r\n    this.prevZ = null;\r\n    this.nextZ = null;\r\n\r\n    // indicates whether this is a steiner point\r\n    this.steiner = false;\r\n}\r\n\r\n// return a percentage difference between the polygon area and its triangulation area;\r\n// used to verify correctness of triangulation\r\nearcut.deviation = function (data, holeIndices, dim, triangles) {\r\n    var hasHoles = holeIndices && holeIndices.length;\r\n    var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\r\n\r\n    var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\r\n    if (hasHoles) {\r\n        for (var i = 0, len = holeIndices.length; i < len; i++) {\r\n            var start = holeIndices[i] * dim;\r\n            var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\r\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\r\n        }\r\n    }\r\n\r\n    var trianglesArea = 0;\r\n    for (i = 0; i < triangles.length; i += 3) {\r\n        var a = triangles[i] * dim;\r\n        var b = triangles[i + 1] * dim;\r\n        var c = triangles[i + 2] * dim;\r\n        trianglesArea += Math.abs(\r\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\r\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\r\n    }\r\n\r\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\r\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\r\n};\r\n\r\nfunction signedArea(data, start, end, dim) {\r\n    var sum = 0;\r\n    for (var i = start, j = end - dim; i < end; i += dim) {\r\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\r\n        j = i;\r\n    }\r\n    return sum;\r\n}\r\n\r\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\r\nearcut.flatten = function (data) {\r\n    var dim = data[0][0].length,\r\n        result = {vertices: [], holes: [], dimensions: dim},\r\n        holeIndex = 0;\r\n\r\n    for (var i = 0; i < data.length; i++) {\r\n        for (var j = 0; j < data[i].length; j++) {\r\n            for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\r\n        }\r\n        if (i > 0) {\r\n            holeIndex += data[i - 1].length;\r\n            result.holes.push(holeIndex);\r\n        }\r\n    }\r\n    return result;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vRWFyY3V0LmpzPzM2ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixTQUFTO0FBQ2hDLEtBQUs7QUFDTCwyQkFBMkIsWUFBWTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLGlDQUFpQywrQkFBK0I7O0FBRWhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRCxTQUFTO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlDQUF5QztBQUMzRDs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDLHVCQUF1QixvQkFBb0I7QUFDM0MsMkJBQTJCLFNBQVM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9FYXJjdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBFYXJjdXQgMi4xLjQgKERlY2VtYmVyIDR0aCAyMDE4KVxyXG5cclxuLypcclxuICogSVNDIExpY2Vuc2VcclxuICogXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgTWFwYm94XHJcbiAqIFxyXG4gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZVxyXG4gKiB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlXHJcbiAqIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxyXG4gKiBcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG4gKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXHJcbiAqIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG4gKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TU1xyXG4gKiBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVJcclxuICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRlxyXG4gKiBUSElTIFNPRlRXQVJFLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZWFyY3V0O1xyXG5cclxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcclxuXHJcbiAgICBkaW0gPSBkaW0gfHwgMjtcclxuXHJcbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGgsXHJcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcclxuICAgICAgICB0cmlhbmdsZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoIW91dGVyTm9kZSB8fCBvdXRlck5vZGUubmV4dCA9PT0gb3V0ZXJOb2RlLnByZXYpIHJldHVybiB0cmlhbmdsZXM7XHJcblxyXG4gICAgdmFyIG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIGludlNpemU7XHJcblxyXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xyXG5cclxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxyXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcclxuICAgICAgICBtaW5YID0gbWF4WCA9IGRhdGFbMF07XHJcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gZGltOyBpIDwgb3V0ZXJMZW47IGkgKz0gZGltKSB7XHJcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xyXG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgIGlmICh4IDwgbWluWCkgbWluWCA9IHg7XHJcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XHJcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XHJcbiAgICAgICAgICAgIGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxyXG4gICAgICAgIGludlNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xyXG4gICAgICAgIGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICByZXR1cm4gdHJpYW5nbGVzO1xyXG59XHJcblxyXG4vLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xyXG4gICAgdmFyIGksIGxhc3Q7XHJcblxyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApKSB7XHJcbiAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xyXG4gICAgICAgIHJlbW92ZU5vZGUobGFzdCk7XHJcbiAgICAgICAgbGFzdCA9IGxhc3QubmV4dDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFzdDtcclxufVxyXG5cclxuLy8gZWxpbWluYXRlIGNvbGxpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXHJcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XHJcbiAgICBpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XHJcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XHJcblxyXG4gICAgdmFyIHAgPSBzdGFydCxcclxuICAgICAgICBhZ2FpbjtcclxuICAgIGRvIHtcclxuICAgICAgICBhZ2FpbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XHJcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XHJcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIGJyZWFrO1xyXG4gICAgICAgICAgICBhZ2FpbiA9IHRydWU7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcclxuXHJcbiAgICByZXR1cm4gZW5kO1xyXG59XHJcblxyXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcclxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIHBhc3MpIHtcclxuICAgIGlmICghZWFyKSByZXR1cm47XHJcblxyXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxyXG4gICAgaWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICB2YXIgc3RvcCA9IGVhcixcclxuICAgICAgICBwcmV2LCBuZXh0O1xyXG5cclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxyXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xyXG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcclxuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XHJcblxyXG4gICAgICAgIGlmIChpbnZTaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSA6IGlzRWFyKGVhcikpIHtcclxuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcclxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcclxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xyXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xyXG5cclxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xyXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XHJcbiAgICAgICAgICAgIHN0b3AgPSBuZXh0Lm5leHQ7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVhciA9IG5leHQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXHJcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xyXG4gICAgICAgICAgICAvLyB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgc2xpY2luZyBhZ2FpblxyXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlYXIgPSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKGVhciwgdHJpYW5nbGVzLCBkaW0pO1xyXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDIpO1xyXG5cclxuICAgICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcclxuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XHJcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxyXG4gICAgICAgIGIgPSBlYXIsXHJcbiAgICAgICAgYyA9IGVhci5uZXh0O1xyXG5cclxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcclxuXHJcbiAgICAvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xyXG5cclxuICAgIHdoaWxlIChwICE9PSBlYXIucHJldikge1xyXG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIHtcclxuICAgIHZhciBhID0gZWFyLnByZXYsXHJcbiAgICAgICAgYiA9IGVhcixcclxuICAgICAgICBjID0gZWFyLm5leHQ7XHJcblxyXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxyXG5cclxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXHJcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxyXG4gICAgICAgIG1pblRZID0gYS55IDwgYi55ID8gKGEueSA8IGMueSA/IGEueSA6IGMueSkgOiAoYi55IDwgYy55ID8gYi55IDogYy55KSxcclxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXHJcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xyXG5cclxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XHJcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIGludlNpemUpLFxyXG4gICAgICAgIG1heFogPSB6T3JkZXIobWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICB2YXIgcCA9IGVhci5wcmV2WixcclxuICAgICAgICBuID0gZWFyLm5leHRaO1xyXG5cclxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xyXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblogJiYgbiAmJiBuLnogPD0gbWF4Wikge1xyXG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxyXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5wcmV2WjtcclxuXHJcbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXHJcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiZcclxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIG4gPSBuLm5leHRaO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXHJcbiAgICB3aGlsZSAocCAmJiBwLnogPj0gbWluWikge1xyXG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxyXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5wcmV2WjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxyXG4gICAgd2hpbGUgKG4gJiYgbi56IDw9IG1heFopIHtcclxuICAgICAgICBpZiAobiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcclxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxyXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbiA9IG4ubmV4dFo7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8vIGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1pbnRlcnNlY3Rpb25zXHJcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XHJcbiAgICB2YXIgcCA9IHN0YXJ0O1xyXG4gICAgZG8ge1xyXG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxyXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XHJcblxyXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGIuaSAvIGRpbSk7XHJcblxyXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcclxuXHJcbiAgICAgICAgICAgIHAgPSBzdGFydCA9IGI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcmV0dXJuIHA7XHJcbn1cclxuXHJcbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XHJcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xyXG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cclxuICAgIHZhciBhID0gc3RhcnQ7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcclxuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XHJcbiAgICAgICAgICAgIGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcclxuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcclxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xsaW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xyXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xyXG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXHJcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xyXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiID0gYi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gYS5uZXh0O1xyXG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xyXG59XHJcblxyXG4vLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXHJcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xyXG4gICAgdmFyIHF1ZXVlID0gW10sXHJcbiAgICAgICAgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xyXG5cclxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcclxuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XHJcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XHJcblxyXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcclxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XHJcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRlck5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnggLSBiLng7XHJcbn1cclxuXHJcbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxyXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xyXG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcclxuICAgIGlmIChvdXRlck5vZGUpIHtcclxuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xyXG4gICAgICAgIGZpbHRlclBvaW50cyhiLCBiLm5leHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXHJcbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xyXG4gICAgdmFyIHAgPSBvdXRlck5vZGUsXHJcbiAgICAgICAgaHggPSBob2xlLngsXHJcbiAgICAgICAgaHkgPSBob2xlLnksXHJcbiAgICAgICAgcXggPSAtSW5maW5pdHksXHJcbiAgICAgICAgbTtcclxuXHJcbiAgICAvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XHJcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XHJcbiAgICBkbyB7XHJcbiAgICAgICAgaWYgKGh5IDw9IHAueSAmJiBoeSA+PSBwLm5leHQueSAmJiBwLm5leHQueSAhPT0gcC55KSB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xyXG4gICAgICAgICAgICBpZiAoeCA8PSBoeCAmJiB4ID4gcXgpIHtcclxuICAgICAgICAgICAgICAgIHF4ID0geDtcclxuICAgICAgICAgICAgICAgIGlmICh4ID09PSBoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC55KSByZXR1cm4gcDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAubmV4dC55KSByZXR1cm4gcC5uZXh0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbSA9IHAueCA8IHAubmV4dC54ID8gcCA6IHAubmV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcclxuXHJcbiAgICBpZiAoIW0pIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmIChoeCA9PT0gcXgpIHJldHVybiBtLnByZXY7IC8vIGhvbGUgdG91Y2hlcyBvdXRlciBzZWdtZW50OyBwaWNrIGxvd2VyIGVuZHBvaW50XHJcblxyXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xyXG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XHJcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxyXG5cclxuICAgIHZhciBzdG9wID0gbSxcclxuICAgICAgICBteCA9IG0ueCxcclxuICAgICAgICBteSA9IG0ueSxcclxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcclxuICAgICAgICB0YW47XHJcblxyXG4gICAgcCA9IG0ubmV4dDtcclxuXHJcbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xyXG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG14ICYmIGh4ICE9PSBwLnggJiZcclxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcclxuXHJcbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtID0gcDtcclxuICAgICAgICAgICAgICAgIHRhbk1pbiA9IHRhbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcCA9IHAubmV4dDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbTtcclxufVxyXG5cclxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XHJcbiAgICB2YXIgcCA9IHN0YXJ0O1xyXG4gICAgZG8ge1xyXG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XHJcbiAgICAgICAgcC5wcmV2WiA9IHAucHJldjtcclxuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XHJcbiAgICBwLnByZXZaID0gbnVsbDtcclxuXHJcbiAgICBzb3J0TGlua2VkKHApO1xyXG59XHJcblxyXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxyXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxyXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcclxuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcclxuICAgICAgICBpblNpemUgPSAxO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgICBwID0gbGlzdDtcclxuICAgICAgICBsaXN0ID0gbnVsbDtcclxuICAgICAgICB0YWlsID0gbnVsbDtcclxuICAgICAgICBudW1NZXJnZXMgPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSAocCkge1xyXG4gICAgICAgICAgICBudW1NZXJnZXMrKztcclxuICAgICAgICAgICAgcSA9IHA7XHJcbiAgICAgICAgICAgIHBTaXplID0gMDtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluU2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xyXG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXEpIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHBTaXplID4gMCB8fCAocVNpemUgPiAwICYmIHEpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplICE9PSAwICYmIChxU2l6ZSA9PT0gMCB8fCAhcSB8fCBwLnogPD0gcS56KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xyXG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xyXG4gICAgICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xyXG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcclxuXHJcbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcclxuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwID0gcTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xyXG4gICAgICAgIGluU2l6ZSAqPSAyO1xyXG5cclxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xyXG5cclxuICAgIHJldHVybiBsaXN0O1xyXG59XHJcblxyXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3hcclxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIGludlNpemUpIHtcclxuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcclxuICAgIHggPSAzMjc2NyAqICh4IC0gbWluWCkgKiBpbnZTaXplO1xyXG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAqIGludlNpemU7XHJcblxyXG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcclxuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XHJcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xyXG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcclxuXHJcbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xyXG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcclxuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XHJcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xyXG5cclxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XHJcbn1cclxuXHJcbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcclxuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcclxuICAgIHZhciBwID0gc3RhcnQsXHJcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAocC54IDwgbGVmdG1vc3QueCkgbGVmdG1vc3QgPSBwO1xyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXHJcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcclxuICAgIHJldHVybiAoY3ggLSBweCkgKiAoYXkgLSBweSkgLSAoYXggLSBweCkgKiAoY3kgLSBweSkgPj0gMCAmJlxyXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXHJcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XHJcbn1cclxuXHJcbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxyXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xyXG4gICAgcmV0dXJuIGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcclxuICAgICAgICAgICBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkgJiYgbWlkZGxlSW5zaWRlKGEsIGIpO1xyXG59XHJcblxyXG4vLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXHJcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xyXG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxyXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XHJcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XHJcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcclxuICAgIGlmICgoZXF1YWxzKHAxLCBxMSkgJiYgZXF1YWxzKHAyLCBxMikpIHx8XHJcbiAgICAgICAgKGVxdWFscyhwMSwgcTIpICYmIGVxdWFscyhwMiwgcTEpKSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXHJcbiAgICAgICAgICAgYXJlYShwMiwgcTIsIHAxKSA+IDAgIT09IGFyZWEocDIsIHEyLCBxMSkgPiAwO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xyXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XHJcbiAgICB2YXIgcCA9IGE7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxyXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cclxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XHJcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cclxuICAgICAgICBhcmVhKGEsIGIsIGEubmV4dCkgPj0gMCAmJiBhcmVhKGEsIGEucHJldiwgYikgPj0gMCA6XHJcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cclxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcclxuICAgIHZhciBwID0gYSxcclxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcclxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcclxuICAgICAgICBweSA9IChhLnkgKyBiLnkpIC8gMjtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxyXG4gICAgICAgICAgICAgICAgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcclxuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XHJcblxyXG4gICAgcmV0dXJuIGluc2lkZTtcclxufVxyXG5cclxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xyXG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcclxuZnVuY3Rpb24gc3BsaXRQb2x5Z29uKGEsIGIpIHtcclxuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxyXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXHJcbiAgICAgICAgYW4gPSBhLm5leHQsXHJcbiAgICAgICAgYnAgPSBiLnByZXY7XHJcblxyXG4gICAgYS5uZXh0ID0gYjtcclxuICAgIGIucHJldiA9IGE7XHJcblxyXG4gICAgYTIubmV4dCA9IGFuO1xyXG4gICAgYW4ucHJldiA9IGEyO1xyXG5cclxuICAgIGIyLm5leHQgPSBhMjtcclxuICAgIGEyLnByZXYgPSBiMjtcclxuXHJcbiAgICBicC5uZXh0ID0gYjI7XHJcbiAgICBiMi5wcmV2ID0gYnA7XHJcblxyXG4gICAgcmV0dXJuIGIyO1xyXG59XHJcblxyXG4vLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxyXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcclxuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XHJcblxyXG4gICAgaWYgKCFsYXN0KSB7XHJcbiAgICAgICAgcC5wcmV2ID0gcDtcclxuICAgICAgICBwLm5leHQgPSBwO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcC5uZXh0ID0gbGFzdC5uZXh0O1xyXG4gICAgICAgIHAucHJldiA9IGxhc3Q7XHJcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xyXG4gICAgICAgIGxhc3QubmV4dCA9IHA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XHJcbiAgICBwLm5leHQucHJldiA9IHAucHJldjtcclxuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xyXG5cclxuICAgIGlmIChwLnByZXZaKSBwLnByZXZaLm5leHRaID0gcC5uZXh0WjtcclxuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2WjtcclxufVxyXG5cclxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XHJcbiAgICAvLyB2ZXJ0ZXggaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXlcclxuICAgIHRoaXMuaSA9IGk7XHJcblxyXG4gICAgLy8gdmVydGV4IGNvb3JkaW5hdGVzXHJcbiAgICB0aGlzLnggPSB4O1xyXG4gICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8vIHotb3JkZXIgY3VydmUgdmFsdWVcclxuICAgIHRoaXMueiA9IG51bGw7XHJcblxyXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XHJcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcclxuXHJcbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxyXG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XHJcbn1cclxuXHJcbi8vIHJldHVybiBhIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFyZWEgYW5kIGl0cyB0cmlhbmd1bGF0aW9uIGFyZWE7XHJcbi8vIHVzZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHRyaWFuZ3VsYXRpb25cclxuZWFyY3V0LmRldmlhdGlvbiA9IGZ1bmN0aW9uIChkYXRhLCBob2xlSW5kaWNlcywgZGltLCB0cmlhbmdsZXMpIHtcclxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcclxuICAgIHZhciBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcclxuXHJcbiAgICB2YXIgcG9seWdvbkFyZWEgPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIDAsIG91dGVyTGVuLCBkaW0pKTtcclxuICAgIGlmIChoYXNIb2xlcykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHBvbHlnb25BcmVhIC09IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmlhbmdsZXNBcmVhID0gMDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICB2YXIgYSA9IHRyaWFuZ2xlc1tpXSAqIGRpbTtcclxuICAgICAgICB2YXIgYiA9IHRyaWFuZ2xlc1tpICsgMV0gKiBkaW07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlhbmdsZXNbaSArIDJdICogZGltO1xyXG4gICAgICAgIHRyaWFuZ2xlc0FyZWEgKz0gTWF0aC5hYnMoXHJcbiAgICAgICAgICAgIChkYXRhW2FdIC0gZGF0YVtjXSkgKiAoZGF0YVtiICsgMV0gLSBkYXRhW2EgKyAxXSkgLVxyXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbYl0pICogKGRhdGFbYyArIDFdIC0gZGF0YVthICsgMV0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9seWdvbkFyZWEgPT09IDAgJiYgdHJpYW5nbGVzQXJlYSA9PT0gMCA/IDAgOlxyXG4gICAgICAgIE1hdGguYWJzKCh0cmlhbmdsZXNBcmVhIC0gcG9seWdvbkFyZWEpIC8gcG9seWdvbkFyZWEpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pIHtcclxuICAgIHZhciBzdW0gPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xyXG4gICAgICAgIHN1bSArPSAoZGF0YVtqXSAtIGRhdGFbaV0pICogKGRhdGFbaSArIDFdICsgZGF0YVtqICsgMV0pO1xyXG4gICAgICAgIGogPSBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1bTtcclxufVxyXG5cclxuLy8gdHVybiBhIHBvbHlnb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBmb3JtIChlLmcuIGFzIGluIEdlb0pTT04pIGludG8gYSBmb3JtIEVhcmN1dCBhY2NlcHRzXHJcbmVhcmN1dC5mbGF0dGVuID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHZhciBkaW0gPSBkYXRhWzBdWzBdLmxlbmd0aCxcclxuICAgICAgICByZXN1bHQgPSB7dmVydGljZXM6IFtdLCBob2xlczogW10sIGRpbWVuc2lvbnM6IGRpbX0sXHJcbiAgICAgICAgaG9sZUluZGV4ID0gMDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFbaV0ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykgcmVzdWx0LnZlcnRpY2VzLnB1c2goZGF0YVtpXVtqXVtkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICBob2xlSW5kZXggKz0gZGF0YVtpIC0gMV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICByZXN1bHQuaG9sZXMucHVzaChob2xlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Earcut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/GetAABB.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/GetAABB.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Calculates the bounding AABB rectangle of a polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.GetAABB\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon that should be calculated.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - The rectangle or object that has x, y, width, and height properties to store the result. Optional.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The resulting rectangle or object that is passed in with position and dimensions of the polygon's AABB.\r\n */\r\nvar GetAABB = function (polygon, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    var minX = Infinity;\r\n    var minY = Infinity;\r\n    var maxX = -minX;\r\n    var maxY = -minY;\r\n    var p;\r\n\r\n    for (var i = 0; i < polygon.points.length; i++)\r\n    {\r\n        p = polygon.points[i];\r\n\r\n        minX = Math.min(minX, p.x);\r\n        minY = Math.min(minY, p.y);\r\n        maxX = Math.max(maxX, p.x);\r\n        maxY = Math.max(maxY, p.y);\r\n    }\r\n\r\n    out.x = minX;\r\n    out.y = minY;\r\n    out.width = maxX - minX;\r\n    out.height = maxY - minY;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetAABB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0QUFCQi5qcz84NDE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsdUJBQXVCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0QUFCQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBib3VuZGluZyBBQUJCIHJlY3RhbmdsZSBvZiBhIHBvbHlnb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkdldEFBQkJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBwb2x5Z29uIHRoYXQgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBbb3V0XSAtIFRoZSByZWN0YW5nbGUgb3Igb2JqZWN0IHRoYXQgaGFzIHgsIHksIHdpZHRoLCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMgdG8gc3RvcmUgdGhlIHJlc3VsdC4gT3B0aW9uYWwuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gVGhlIHJlc3VsdGluZyByZWN0YW5nbGUgb3Igb2JqZWN0IHRoYXQgaXMgcGFzc2VkIGluIHdpdGggcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHBvbHlnb24ncyBBQUJCLlxyXG4gKi9cclxudmFyIEdldEFBQkIgPSBmdW5jdGlvbiAocG9seWdvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcclxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XHJcbiAgICB2YXIgbWF4WCA9IC1taW5YO1xyXG4gICAgdmFyIG1heFkgPSAtbWluWTtcclxuICAgIHZhciBwO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgcCA9IHBvbHlnb24ucG9pbnRzW2ldO1xyXG5cclxuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcclxuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcclxuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcclxuICAgIH1cclxuXHJcbiAgICBvdXQueCA9IG1pblg7XHJcbiAgICBvdXQueSA9IG1pblk7XHJcbiAgICBvdXQud2lkdGggPSBtYXhYIC0gbWluWDtcclxuICAgIG91dC5oZWlnaHQgPSBtYXhZIC0gbWluWTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRBQUJCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetAABB.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/GetNumberArray.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/GetNumberArray.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Export the points as an array of flat numbers, following the sequence [ x,y, x,y, x,y ]\r\n\r\n/**\r\n * Stores all of the points of a Polygon into a flat array of numbers following the sequence [ x,y, x,y, x,y ],\r\n * i.e. each point of the Polygon, in the order it's defined, corresponds to two elements of the resultant\r\n * array for the point's X and Y coordinate.\r\n *\r\n * @function Phaser.Geom.Polygon.GetNumberArray\r\n * @since 3.0.0\r\n *\r\n * @generic {number[]} O - [output,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon whose points to export.\r\n * @param {(array|number[])} [output] - An array to which the points' coordinates should be appended.\r\n *\r\n * @return {(array|number[])} The modified `output` array, or a new array if none was given.\r\n */\r\nvar GetNumberArray = function (polygon, output)\r\n{\r\n    if (output === undefined) { output = []; }\r\n\r\n    for (var i = 0; i < polygon.points.length; i++)\r\n    {\r\n        output.push(polygon.points[i].x);\r\n        output.push(polygon.points[i].y);\r\n    }\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = GetNumberArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0TnVtYmVyQXJyYXkuanM/MzY0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9HZXROdW1iZXJBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gRXhwb3J0IHRoZSBwb2ludHMgYXMgYW4gYXJyYXkgb2YgZmxhdCBudW1iZXJzLCBmb2xsb3dpbmcgdGhlIHNlcXVlbmNlIFsgeCx5LCB4LHksIHgseSBdXHJcblxyXG4vKipcclxuICogU3RvcmVzIGFsbCBvZiB0aGUgcG9pbnRzIG9mIGEgUG9seWdvbiBpbnRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIGZvbGxvd2luZyB0aGUgc2VxdWVuY2UgWyB4LHksIHgseSwgeCx5IF0sXHJcbiAqIGkuZS4gZWFjaCBwb2ludCBvZiB0aGUgUG9seWdvbiwgaW4gdGhlIG9yZGVyIGl0J3MgZGVmaW5lZCwgY29ycmVzcG9uZHMgdG8gdHdvIGVsZW1lbnRzIG9mIHRoZSByZXN1bHRhbnRcclxuICogYXJyYXkgZm9yIHRoZSBwb2ludCdzIFggYW5kIFkgY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uR2V0TnVtYmVyQXJyYXlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtudW1iZXJbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIFBvbHlnb24gd2hvc2UgcG9pbnRzIHRvIGV4cG9ydC5cclxuICogQHBhcmFtIHsoYXJyYXl8bnVtYmVyW10pfSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRoZSBwb2ludHMnIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBhcHBlbmRlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fG51bWJlcltdKX0gVGhlIG1vZGlmaWVkIGBvdXRwdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBnaXZlbi5cclxuICovXHJcbnZhciBHZXROdW1iZXJBcnJheSA9IGZ1bmN0aW9uIChwb2x5Z29uLCBvdXRwdXQpXHJcbntcclxuICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkgeyBvdXRwdXQgPSBbXTsgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnB1c2gocG9seWdvbi5wb2ludHNbaV0ueCk7XHJcbiAgICAgICAgb3V0cHV0LnB1c2gocG9seWdvbi5wb2ludHNbaV0ueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0TnVtYmVyQXJyYXk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetNumberArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/GetPoints.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/GetPoints.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/polygon/Perimeter.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the perimeter of the Polygon,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Polygon.GetPoints\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the perimeter of the Polygon and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the perimeter of the Polygon.\r\n */\r\nvar GetPoints = function (polygon, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    var points = polygon.points;\r\n    var perimeter = Perimeter(polygon);\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = perimeter / stepRate;\r\n    }\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var position = perimeter * (i / quantity);\r\n        var accumulatedPerimeter = 0;\r\n\r\n        for (var j = 0; j < points.length; j++)\r\n        {\r\n            var pointA = points[j];\r\n            var pointB = points[(j + 1) % points.length];\r\n            var line = new Line(\r\n                pointA.x,\r\n                pointA.y,\r\n                pointB.x,\r\n                pointB.y\r\n            );\r\n            var length = Length(line);\r\n\r\n            if (position < accumulatedPerimeter || position > accumulatedPerimeter + length)\r\n            {\r\n                accumulatedPerimeter += length;\r\n                continue;\r\n            }\r\n\r\n            var point = line.getPoint((position - accumulatedPerimeter) / length);\r\n            out.push(point);\r\n\r\n            break;\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0UG9pbnRzLmpzP2FlOWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDckMsV0FBVyxtQkFBTyxDQUFDLGlFQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLHdFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi9saW5lL0xpbmUnKTtcclxudmFyIFBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgYXJvdW5kIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIFBvbHlnb24sXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWFudGl0eSBvciBzdGVwUmF0ZSB2YWx1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkdldFBvaW50c1xyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBQb2x5Z29uIHRvIGdldCB0aGUgcG9pbnRzIGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgYW1vdW50IG9mIHBvaW50cyB0byByZXR1cm4uIElmIGEgZmFsc2V5IHZhbHVlIHRoZSBxdWFudGl0eSB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFNldHMgdGhlIHF1YW50aXR5IGJ5IGdldHRpbmcgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbiBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIGluc2VydCB0aGUgcG9pbnRzIGluIHRvLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgYXJyYXkgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICovXHJcbnZhciBHZXRQb2ludHMgPSBmdW5jdGlvbiAocG9seWdvbiwgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIHZhciBwb2ludHMgPSBwb2x5Z29uLnBvaW50cztcclxuICAgIHZhciBwZXJpbWV0ZXIgPSBQZXJpbWV0ZXIocG9seWdvbik7XHJcblxyXG4gICAgLy8gIElmIHF1YW50aXR5IGlzIGEgZmFsc2V5IHZhbHVlIChmYWxzZSwgbnVsbCwgMCwgdW5kZWZpbmVkLCBldGMpIHRoZW4gd2UgY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSBzdGVwUmF0ZSBpbnN0ZWFkLlxyXG4gICAgaWYgKCFxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICBxdWFudGl0eSA9IHBlcmltZXRlciAvIHN0ZXBSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBwZXJpbWV0ZXIgKiAoaSAvIHF1YW50aXR5KTtcclxuICAgICAgICB2YXIgYWNjdW11bGF0ZWRQZXJpbWV0ZXIgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGorKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwb2ludEEgPSBwb2ludHNbal07XHJcbiAgICAgICAgICAgIHZhciBwb2ludEIgPSBwb2ludHNbKGogKyAxKSAlIHBvaW50cy5sZW5ndGhdO1xyXG4gICAgICAgICAgICB2YXIgbGluZSA9IG5ldyBMaW5lKFxyXG4gICAgICAgICAgICAgICAgcG9pbnRBLngsXHJcbiAgICAgICAgICAgICAgICBwb2ludEEueSxcclxuICAgICAgICAgICAgICAgIHBvaW50Qi54LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRCLnlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IExlbmd0aChsaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGFjY3VtdWxhdGVkUGVyaW1ldGVyIHx8IHBvc2l0aW9uID4gYWNjdW11bGF0ZWRQZXJpbWV0ZXIgKyBsZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkUGVyaW1ldGVyICs9IGxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQgPSBsaW5lLmdldFBvaW50KChwb3NpdGlvbiAtIGFjY3VtdWxhdGVkUGVyaW1ldGVyKSAvIGxlbmd0aCk7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Perimeter.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Perimeter.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * Returns the perimeter of the given Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Perimeter\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to get the perimeter of.\r\n *\r\n * @return {number} The perimeter of the Polygon.\r\n */\r\nvar Perimeter = function (polygon)\r\n{\r\n    var points = polygon.points;\r\n    var perimeter = 0;\r\n\r\n    for (var i = 0; i < points.length; i++)\r\n    {\r\n        var pointA = points[i];\r\n        var pointB = points[(i + 1) % points.length];\r\n        var line = new Line(\r\n            pointA.x,\r\n            pointA.y,\r\n            pointB.x,\r\n            pointB.y\r\n        );\r\n\r\n        perimeter += Length(line);\r\n    }\r\n\r\n    return perimeter;\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUGVyaW1ldGVyLmpzPzQwY2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDckMsV0FBVyxtQkFBTyxDQUFDLGlFQUFjOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9QZXJpbWV0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMZW5ndGggPSByZXF1aXJlKCcuLi9saW5lL0xlbmd0aCcpO1xyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4uL2xpbmUvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHBlcmltZXRlciBvZiB0aGUgZ2l2ZW4gUG9seWdvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uUGVyaW1ldGVyXHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIFBvbHlnb24gdG8gZ2V0IHRoZSBwZXJpbWV0ZXIgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICovXHJcbnZhciBQZXJpbWV0ZXIgPSBmdW5jdGlvbiAocG9seWdvbilcclxue1xyXG4gICAgdmFyIHBvaW50cyA9IHBvbHlnb24ucG9pbnRzO1xyXG4gICAgdmFyIHBlcmltZXRlciA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50QSA9IHBvaW50c1tpXTtcclxuICAgICAgICB2YXIgcG9pbnRCID0gcG9pbnRzWyhpICsgMSkgJSBwb2ludHMubGVuZ3RoXTtcclxuICAgICAgICB2YXIgbGluZSA9IG5ldyBMaW5lKFxyXG4gICAgICAgICAgICBwb2ludEEueCxcclxuICAgICAgICAgICAgcG9pbnRBLnksXHJcbiAgICAgICAgICAgIHBvaW50Qi54LFxyXG4gICAgICAgICAgICBwb2ludEIueVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHBlcmltZXRlciArPSBMZW5ndGgobGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBlcmltZXRlcjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGVyaW1ldGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Perimeter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Polygon.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Polygon.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/polygon/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Polygon object\r\n *\r\n\r\n * The polygon is a closed shape consists of a series of connected straight lines defined by list of ordered points.\r\n * Several formats are supported to define the list of points, check the setTo method for details. \r\n * This is a geometry object allowing you to define and inspect the shape.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render a Polygon you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Polygon\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point[]} [points] - List of points defining the perimeter of this Polygon. Several formats are supported: \r\n * - A string containing paired x y values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n * - An array of Point objects: `[new Phaser.Point(x1, y1), ...]`\r\n * - An array of objects with public x y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n */\r\nvar Polygon = new Class({\r\n\r\n    initialize:\r\n\r\n    function Polygon (points)\r\n    {\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.POLYGON`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Polygon#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.POLYGON;\r\n\r\n        /**\r\n         * The area of this Polygon.\r\n         *\r\n         * @name Phaser.Geom.Polygon#area\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.area = 0;\r\n\r\n        /**\r\n         * An array of number pair objects that make up this polygon. I.e. [ {x,y}, {x,y}, {x,y} ]\r\n         *\r\n         * @name Phaser.Geom.Polygon#points\r\n         * @type {Phaser.Geom.Point[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.points = [];\r\n\r\n        if (points)\r\n        {\r\n            this.setTo(points);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Check to see if the Polygon contains the given x / y coordinates.\r\n     *\r\n     * @method Phaser.Geom.Polygon#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to check within the polygon.\r\n     * @param {number} y - The y coordinate to check within the polygon.\r\n     *\r\n     * @return {boolean} `true` if the coordinates are within the polygon, otherwise `false`.\r\n     */\r\n    contains: function (x, y)\r\n    {\r\n        return Contains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * Sets this Polygon to the given points.\r\n     *\r\n     * The points can be set from a variety of formats:\r\n     *\r\n     * - A string containing paired values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n     * - An array of Point objects: `[new Phaser.Point(x1, y1), ...]`\r\n     * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n     * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n     * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n     *\r\n     * `setTo` may also be called without any arguments to remove all points.\r\n     *\r\n     * @method Phaser.Geom.Polygon#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} points - Points defining the perimeter of this polygon. Please check function description above for the different supported formats.\r\n     *\r\n     * @return {Phaser.Geom.Polygon} This Polygon object.\r\n     */\r\n    setTo: function (points)\r\n    {\r\n        this.area = 0;\r\n        this.points = [];\r\n\r\n        if (typeof points === 'string')\r\n        {\r\n            points = points.split(' ');\r\n        }\r\n\r\n        if (!Array.isArray(points))\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var p;\r\n        var y0 = Number.MAX_VALUE;\r\n\r\n        //  The points argument is an array, so iterate through it\r\n        for (var i = 0; i < points.length; i++)\r\n        {\r\n            p = { x: 0, y: 0 };\r\n\r\n            if (typeof points[i] === 'number' || typeof points[i] === 'string')\r\n            {\r\n                p.x = parseFloat(points[i]);\r\n                p.y = parseFloat(points[i + 1]);\r\n                i++;\r\n            }\r\n            else if (Array.isArray(points[i]))\r\n            {\r\n                //  An array of arrays?\r\n                p.x = points[i][0];\r\n                p.y = points[i][1];\r\n            }\r\n            else\r\n            {\r\n                p.x = points[i].x;\r\n                p.y = points[i].y;\r\n            }\r\n\r\n            this.points.push(p);\r\n\r\n            //  Lowest boundary\r\n            if (p.y < y0)\r\n            {\r\n                y0 = p.y;\r\n            }\r\n        }\r\n\r\n        this.calculateArea(y0);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates the area of the Polygon. This is available in the property Polygon.area\r\n     *\r\n     * @method Phaser.Geom.Polygon#calculateArea\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The area of the polygon.\r\n     */\r\n    calculateArea: function ()\r\n    {\r\n        if (this.points.length < 3)\r\n        {\r\n            this.area = 0;\r\n\r\n            return this.area;\r\n        }\r\n\r\n        var sum = 0;\r\n        var p1;\r\n        var p2;\r\n\r\n        for (var i = 0; i < this.points.length - 1; i++)\r\n        {\r\n            p1 = this.points[i];\r\n            p2 = this.points[i + 1];\r\n\r\n            sum += (p2.x - p1.x) * (p1.y + p2.y);\r\n        }\r\n\r\n        p1 = this.points[0];\r\n        p2 = this.points[this.points.length - 1];\r\n\r\n        sum += (p1.x - p2.x) * (p2.y + p1.y);\r\n\r\n        this.area = -sum * 0.5;\r\n\r\n        return this.area;\r\n    },\r\n\r\n    /**\r\n     * Returns an array of Point objects containing the coordinates of the points around the perimeter of the Polygon,\r\n     * based on the given quantity or stepRate values.\r\n     *\r\n     * @method Phaser.Geom.Polygon#getPoints\r\n     * @since 3.12.0\r\n     *\r\n     * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n     * @param {number} [stepRate] - Sets the quantity by getting the perimeter of the Polygon and dividing it by the stepRate.\r\n     * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n     *\r\n     * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the perimeter of the Polygon.\r\n     */\r\n    getPoints: function (quantity, step, output)\r\n    {\r\n        return GetPoints(this, quantity, step, output);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUG9seWdvbi5qcz8wMDgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyx3RUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEVBQThFLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNoRztBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9Qb2x5Z29uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBvbHlnb24gb2JqZWN0XHJcbiAqXHJcblxyXG4gKiBUaGUgcG9seWdvbiBpcyBhIGNsb3NlZCBzaGFwZSBjb25zaXN0cyBvZiBhIHNlcmllcyBvZiBjb25uZWN0ZWQgc3RyYWlnaHQgbGluZXMgZGVmaW5lZCBieSBsaXN0IG9mIG9yZGVyZWQgcG9pbnRzLlxyXG4gKiBTZXZlcmFsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCB0byBkZWZpbmUgdGhlIGxpc3Qgb2YgcG9pbnRzLCBjaGVjayB0aGUgc2V0VG8gbWV0aG9kIGZvciBkZXRhaWxzLiBcclxuICogVGhpcyBpcyBhIGdlb21ldHJ5IG9iamVjdCBhbGxvd2luZyB5b3UgdG8gZGVmaW5lIGFuZCBpbnNwZWN0IHRoZSBzaGFwZS5cclxuICogSXQgaXMgbm90IGEgR2FtZSBPYmplY3QsIGluIHRoYXQgeW91IGNhbm5vdCBhZGQgaXQgdG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIGl0IGhhcyBubyB0ZXh0dXJlLlxyXG4gKiBUbyByZW5kZXIgYSBQb2x5Z29uIHlvdSBzaG91bGQgbG9vayBhdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBHcmFwaGljcyBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIFBvbHlnb25cclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBbcG9pbnRzXSAtIExpc3Qgb2YgcG9pbnRzIGRlZmluaW5nIHRoZSBwZXJpbWV0ZXIgb2YgdGhpcyBQb2x5Z29uLiBTZXZlcmFsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogXHJcbiAqIC0gQSBzdHJpbmcgY29udGFpbmluZyBwYWlyZWQgeCB5IHZhbHVlcyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc3BhY2U6IGAnNDAgMCA0MCAyMCAxMDAgMjAgMTAwIDgwIDQwIDgwIDQwIDEwMCAwIDUwJ2BcclxuICogLSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzOiBgW25ldyBQaGFzZXIuUG9pbnQoeDEsIHkxKSwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcHVibGljIHggeSBwcm9wZXJ0aWVzOiBgW29iajEsIG9iajIsIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2YgcGFpcmVkIG51bWJlcnMgdGhhdCByZXByZXNlbnQgcG9pbnQgY29vcmRpbmF0ZXM6IGBbeDEseTEsIHgyLHkyLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIGFycmF5cyB3aXRoIHR3byBlbGVtZW50cyByZXByZXNlbnRpbmcgeC95IGNvb3JkaW5hdGVzOiBgW1t4MSwgeTFdLCBbeDIsIHkyXSwgLi4uXWBcclxuICovXHJcbnZhciBQb2x5Z29uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBvbHlnb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuUE9MWUdPTmAuXHJcbiAgICAgICAgICogVXNlZCBmb3IgZmFzdCB0eXBlIGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9seWdvbiN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdFT01fQ09OU1QuUE9MWUdPTjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFyZWEgb2YgdGhpcyBQb2x5Z29uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9seWdvbiNhcmVhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hcmVhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgbnVtYmVyIHBhaXIgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhpcyBwb2x5Z29uLiBJLmUuIFsge3gseX0sIHt4LHl9LCB7eCx5fSBdXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5Qb2x5Z29uI3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5Qb2ludFtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIGlmIChwb2ludHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRvKHBvaW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgUG9seWdvbiBjb250YWlucyB0aGUgZ2l2ZW4geCAvIHkgY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5Qb2x5Z29uI2NvbnRhaW5zXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBwb2x5Z29uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNoZWNrIHdpdGhpbiB0aGUgcG9seWdvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIHBvbHlnb24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjb250YWluczogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIENvbnRhaW5zKHRoaXMsIHgsIHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBQb2x5Z29uIHRvIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBvaW50cyBjYW4gYmUgc2V0IGZyb20gYSB2YXJpZXR5IG9mIGZvcm1hdHM6XHJcbiAgICAgKlxyXG4gICAgICogLSBBIHN0cmluZyBjb250YWluaW5nIHBhaXJlZCB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlOiBgJzQwIDAgNDAgMjAgMTAwIDIwIDEwMCA4MCA0MCA4MCA0MCAxMDAgMCA1MCdgXHJcbiAgICAgKiAtIEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHM6IGBbbmV3IFBoYXNlci5Qb2ludCh4MSwgeTEpLCAuLi5dYFxyXG4gICAgICogLSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcHVibGljIHgveSBwcm9wZXJ0aWVzOiBgW29iajEsIG9iajIsIC4uLl1gXHJcbiAgICAgKiAtIEFuIGFycmF5IG9mIHBhaXJlZCBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHBvaW50IGNvb3JkaW5hdGVzOiBgW3gxLHkxLCB4Mix5MiwgLi4uXWBcclxuICAgICAqIC0gQW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggdHdvIGVsZW1lbnRzIHJlcHJlc2VudGluZyB4L3kgY29vcmRpbmF0ZXM6IGBbW3gxLCB5MV0sIFt4MiwgeTJdLCAuLi5dYFxyXG4gICAgICpcclxuICAgICAqIGBzZXRUb2AgbWF5IGFsc28gYmUgY2FsbGVkIHdpdGhvdXQgYW55IGFyZ3VtZW50cyB0byByZW1vdmUgYWxsIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHBvaW50cyAtIFBvaW50cyBkZWZpbmluZyB0aGUgcGVyaW1ldGVyIG9mIHRoaXMgcG9seWdvbi4gUGxlYXNlIGNoZWNrIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIGFib3ZlIGZvciB0aGUgZGlmZmVyZW50IHN1cHBvcnRlZCBmb3JtYXRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvbHlnb259IFRoaXMgUG9seWdvbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAocG9pbnRzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYXJlYSA9IDA7XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBwb2ludHMgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHA7XHJcbiAgICAgICAgdmFyIHkwID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBwb2ludHMgYXJndW1lbnQgaXMgYW4gYXJyYXksIHNvIGl0ZXJhdGUgdGhyb3VnaCBpdFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcCA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludHNbaV0gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwb2ludHNbaV0gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwYXJzZUZsb2F0KHBvaW50c1tpXSk7XHJcbiAgICAgICAgICAgICAgICBwLnkgPSBwYXJzZUZsb2F0KHBvaW50c1tpICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocG9pbnRzW2ldKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEFuIGFycmF5IG9mIGFycmF5cz9cclxuICAgICAgICAgICAgICAgIHAueCA9IHBvaW50c1tpXVswXTtcclxuICAgICAgICAgICAgICAgIHAueSA9IHBvaW50c1tpXVsxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHAueCA9IHBvaW50c1tpXS54O1xyXG4gICAgICAgICAgICAgICAgcC55ID0gcG9pbnRzW2ldLnk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2gocCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgTG93ZXN0IGJvdW5kYXJ5XHJcbiAgICAgICAgICAgIGlmIChwLnkgPCB5MClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgeTAgPSBwLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQXJlYSh5MCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGFyZWEgb2YgdGhlIFBvbHlnb24uIFRoaXMgaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9wZXJ0eSBQb2x5Z29uLmFyZWFcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jY2FsY3VsYXRlQXJlYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgcG9seWdvbi5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlQXJlYTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wb2ludHMubGVuZ3RoIDwgMylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJlYSA9IDA7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmVhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN1bSA9IDA7XHJcbiAgICAgICAgdmFyIHAxO1xyXG4gICAgICAgIHZhciBwMjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBvaW50cy5sZW5ndGggLSAxOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IHRoaXMucG9pbnRzW2ldO1xyXG4gICAgICAgICAgICBwMiA9IHRoaXMucG9pbnRzW2kgKyAxXTtcclxuXHJcbiAgICAgICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAxID0gdGhpcy5wb2ludHNbMF07XHJcbiAgICAgICAgcDIgPSB0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgc3VtICs9IChwMS54IC0gcDIueCkgKiAocDIueSArIHAxLnkpO1xyXG5cclxuICAgICAgICB0aGlzLmFyZWEgPSAtc3VtICogMC41O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hcmVhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgcGVyaW1ldGVyIG9mIHRoZSBQb2x5Z29uLFxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFNldHMgdGhlIHF1YW50aXR5IGJ5IGdldHRpbmcgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbiBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRzOiBmdW5jdGlvbiAocXVhbnRpdHksIHN0ZXAsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwLCBvdXRwdXQpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Polygon.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Reverse.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Reverse.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Reverses the order of the points of a Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Reverse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Polygon} O - [polygon,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to modify.\r\n *\r\n * @return {Phaser.Geom.Polygon} The modified Polygon.\r\n */\r\nvar Reverse = function (polygon)\r\n{\r\n    polygon.points.reverse();\r\n\r\n    return polygon;\r\n};\r\n\r\nmodule.exports = Reverse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUmV2ZXJzZS5qcz85YzRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9SZXZlcnNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIHRoZSBwb2ludHMgb2YgYSBQb2x5Z29uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5SZXZlcnNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9seWdvbn0gTyAtIFtwb2x5Z29uLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBQb2x5Z29uIHRvIG1vZGlmeS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gVGhlIG1vZGlmaWVkIFBvbHlnb24uXHJcbiAqL1xyXG52YXIgUmV2ZXJzZSA9IGZ1bmN0aW9uIChwb2x5Z29uKVxyXG57XHJcbiAgICBwb2x5Z29uLnBvaW50cy5yZXZlcnNlKCk7XHJcblxyXG4gICAgcmV0dXJuIHBvbHlnb247XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJldmVyc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Reverse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/Smooth.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/Smooth.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Igor Ognichenko <ognichenko.igor@gmail.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nvar copy = function (out, a)\r\n{\r\n    out[0] = a[0];\r\n    out[1] = a[1];\r\n  \r\n    return out;\r\n};\r\n\r\n/**\r\n * Takes a Polygon object and applies Chaikin's smoothing algorithm on its points.\r\n *\r\n * @function Phaser.Geom.Polygon.Smooth\r\n * @since 3.13.0\r\n *\r\n * @generic {Phaser.Geom.Polygon} O - [polygon,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon to be smoothed. The polygon will be modified in-place and returned.\r\n *\r\n * @return {Phaser.Geom.Polygon} The input polygon.\r\n */\r\nvar Smooth = function (polygon)\r\n{\r\n    var i;\r\n    var points = [];\r\n    var data = polygon.points;\r\n\r\n    for (i = 0; i < data.length; i++)\r\n    {\r\n        points.push([ data[i].x, data[i].y ]);\r\n    }\r\n\r\n    var output = [];\r\n  \r\n    if (points.length > 0)\r\n    {\r\n        output.push(copy([ 0, 0 ], points[0]));\r\n    }\r\n  \r\n    for (i = 0; i < points.length - 1; i++)\r\n    {\r\n        var p0 = points[i];\r\n        var p1 = points[i + 1];\r\n        var p0x = p0[0];\r\n        var p0y = p0[1];\r\n        var p1x = p1[0];\r\n        var p1y = p1[1];\r\n\r\n        output.push([ 0.85 * p0x + 0.15 * p1x, 0.85 * p0y + 0.15 * p1y ]);\r\n        output.push([ 0.15 * p0x + 0.85 * p1x, 0.15 * p0y + 0.85 * p1y ]);\r\n    }\r\n  \r\n    if (points.length > 1)\r\n    {\r\n        output.push(copy([ 0, 0 ], points[points.length - 1]));\r\n    }\r\n  \r\n    return polygon.setTo(output);\r\n};\r\n\r\nmodule.exports = Smooth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vU21vb3RoLmpzPzkzNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9TbW9vdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBJZ29yIE9nbmljaGVua28gPG9nbmljaGVua28uaWdvckBnbWFpbC5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxudmFyIGNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKVxyXG57XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICBcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVGFrZXMgYSBQb2x5Z29uIG9iamVjdCBhbmQgYXBwbGllcyBDaGFpa2luJ3Mgc21vb3RoaW5nIGFsZ29yaXRobSBvbiBpdHMgcG9pbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5TbW9vdGhcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9seWdvbn0gTyAtIFtwb2x5Z29uLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBwb2x5Z29uIHRvIGJlIHNtb290aGVkLiBUaGUgcG9seWdvbiB3aWxsIGJlIG1vZGlmaWVkIGluLXBsYWNlIGFuZCByZXR1cm5lZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gVGhlIGlucHV0IHBvbHlnb24uXHJcbiAqL1xyXG52YXIgU21vb3RoID0gZnVuY3Rpb24gKHBvbHlnb24pXHJcbntcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHBvaW50cyA9IFtdO1xyXG4gICAgdmFyIGRhdGEgPSBwb2x5Z29uLnBvaW50cztcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBwb2ludHMucHVzaChbIGRhdGFbaV0ueCwgZGF0YVtpXS55IF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBvdXRwdXQgPSBbXTtcclxuICBcclxuICAgIGlmIChwb2ludHMubGVuZ3RoID4gMClcclxuICAgIHtcclxuICAgICAgICBvdXRwdXQucHVzaChjb3B5KFsgMCwgMCBdLCBwb2ludHNbMF0pKTtcclxuICAgIH1cclxuICBcclxuICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwMCA9IHBvaW50c1tpXTtcclxuICAgICAgICB2YXIgcDEgPSBwb2ludHNbaSArIDFdO1xyXG4gICAgICAgIHZhciBwMHggPSBwMFswXTtcclxuICAgICAgICB2YXIgcDB5ID0gcDBbMV07XHJcbiAgICAgICAgdmFyIHAxeCA9IHAxWzBdO1xyXG4gICAgICAgIHZhciBwMXkgPSBwMVsxXTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnB1c2goWyAwLjg1ICogcDB4ICsgMC4xNSAqIHAxeCwgMC44NSAqIHAweSArIDAuMTUgKiBwMXkgXSk7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goWyAwLjE1ICogcDB4ICsgMC44NSAqIHAxeCwgMC4xNSAqIHAweSArIDAuODUgKiBwMXkgXSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goY29weShbIDAsIDAgXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIHBvbHlnb24uc2V0VG8ob3V0cHV0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU21vb3RoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Smooth.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/polygon/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/polygon/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\n\r\nPolygon.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/polygon/Clone.js\");\r\nPolygon.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\nPolygon.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/polygon/ContainsPoint.js\");\r\nPolygon.GetAABB = __webpack_require__(/*! ./GetAABB */ \"./node_modules/phaser/src/geom/polygon/GetAABB.js\");\r\nPolygon.GetNumberArray = __webpack_require__(/*! ./GetNumberArray */ \"./node_modules/phaser/src/geom/polygon/GetNumberArray.js\");\r\nPolygon.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/polygon/GetPoints.js\");\r\nPolygon.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/polygon/Perimeter.js\");\r\nPolygon.Reverse = __webpack_require__(/*! ./Reverse */ \"./node_modules/phaser/src/geom/polygon/Reverse.js\");\r\nPolygon.Smooth = __webpack_require__(/*! ./Smooth */ \"./node_modules/phaser/src/geom/polygon/Smooth.js\");\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vaW5kZXguanM/MzE5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBUztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQyxzRUFBWTtBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQyxnRkFBaUI7QUFDakQsa0JBQWtCLG1CQUFPLENBQUMsb0VBQVc7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsa0ZBQWtCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFXO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVOztBQUVuQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvbHlnb24gPSByZXF1aXJlKCcuL1BvbHlnb24nKTtcclxuXHJcblBvbHlnb24uQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcblBvbHlnb24uQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblBvbHlnb24uQ29udGFpbnNQb2ludCA9IHJlcXVpcmUoJy4vQ29udGFpbnNQb2ludCcpO1xyXG5Qb2x5Z29uLkdldEFBQkIgPSByZXF1aXJlKCcuL0dldEFBQkInKTtcclxuUG9seWdvbi5HZXROdW1iZXJBcnJheSA9IHJlcXVpcmUoJy4vR2V0TnVtYmVyQXJyYXknKTtcclxuUG9seWdvbi5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5Qb2x5Z29uLlBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcblBvbHlnb24uUmV2ZXJzZSA9IHJlcXVpcmUoJy4vUmV2ZXJzZScpO1xyXG5Qb2x5Z29uLlNtb290aCA9IHJlcXVpcmUoJy4vU21vb3RoJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Area.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Area.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Rectangle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to calculate the area of.\r\n *\r\n * @return {number} The area of the Rectangle object.\r\n */\r\nvar Area = function (rect)\r\n{\r\n    return rect.width * rect.height;\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9BcmVhLmpzPzc5ZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9BcmVhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYXJlYSBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5BcmVhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gY2FsY3VsYXRlIHRoZSBhcmVhIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhcmVhIG9mIHRoZSBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmV0dXJuIHJlY3Qud2lkdGggKiByZWN0LmhlaWdodDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJlYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Area.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Ceil.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Ceil.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position up to the smallest integer greater than or equal to each current coordinate.\r\n *\r\n * @function Phaser.Geom.Rectangle.Ceil\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar Ceil = function (rect)\r\n{\r\n    rect.x = Math.ceil(rect.x);\r\n    rect.y = Math.ceil(rect.y);\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = Ceil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsLmpzPzc0YzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmRzIGEgUmVjdGFuZ2xlJ3MgcG9zaXRpb24gdXAgdG8gdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGVhY2ggY3VycmVudCBjb29yZGluYXRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkNlaWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgQ2VpbCA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZWN0LnggPSBNYXRoLmNlaWwocmVjdC54KTtcclxuICAgIHJlY3QueSA9IE1hdGguY2VpbChyZWN0LnkpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZWlsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Ceil.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/CeilAll.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/CeilAll.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position and size up to the smallest integer greater than or equal to each respective value.\r\n *\r\n * @function Phaser.Geom.Rectangle.CeilAll\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to modify.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified Rectangle.\r\n */\r\nvar CeilAll = function (rect)\r\n{\r\n    rect.x = Math.ceil(rect.x);\r\n    rect.y = Math.ceil(rect.y);\r\n    rect.width = Math.ceil(rect.width);\r\n    rect.height = Math.ceil(rect.height);\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = CeilAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsQWxsLmpzPzU1Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvQ2VpbEFsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJvdW5kcyBhIFJlY3RhbmdsZSdzIHBvc2l0aW9uIGFuZCBzaXplIHVwIHRvIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBlYWNoIHJlc3BlY3RpdmUgdmFsdWUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ2VpbEFsbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBtb2RpZnkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBDZWlsQWxsID0gZnVuY3Rpb24gKHJlY3QpXHJcbntcclxuICAgIHJlY3QueCA9IE1hdGguY2VpbChyZWN0LngpO1xyXG4gICAgcmVjdC55ID0gTWF0aC5jZWlsKHJlY3QueSk7XHJcbiAgICByZWN0LndpZHRoID0gTWF0aC5jZWlsKHJlY3Qud2lkdGgpO1xyXG4gICAgcmVjdC5oZWlnaHQgPSBNYXRoLmNlaWwocmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZWlsQWxsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CeilAll.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/CenterOn.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/CenterOn.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Centers this Rectangle so that the center coordinates match the given x and y values.\r\n\r\n/**\r\n * Moves the top-left corner of a Rectangle so that its center is at the given coordinates.\r\n *\r\n * @function Phaser.Geom.Rectangle.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to be centered.\r\n * @param {number} x - The X coordinate of the Rectangle's center.\r\n * @param {number} y - The Y coordinate of the Rectangle's center.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The centered rectangle.\r\n */\r\nvar CenterOn = function (rect, x, y)\r\n{\r\n    rect.x = x - (rect.width / 2);\r\n    rect.y = y - (rect.height / 2);\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbi5qcz82Yjk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gQ2VudGVycyB0aGlzIFJlY3RhbmdsZSBzbyB0aGF0IHRoZSBjZW50ZXIgY29vcmRpbmF0ZXMgbWF0Y2ggdGhlIGdpdmVuIHggYW5kIHkgdmFsdWVzLlxyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgYSBSZWN0YW5nbGUgc28gdGhhdCBpdHMgY2VudGVyIGlzIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5DZW50ZXJPblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBiZSBjZW50ZXJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBSZWN0YW5nbGUncyBjZW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlJ3MgY2VudGVyLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBjZW50ZXJlZCByZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgcmVjdC54ID0geCAtIChyZWN0LndpZHRoIC8gMik7XHJcbiAgICByZWN0LnkgPSB5IC0gKHJlY3QuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRlck9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CenterOn.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Clone.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Clone.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle which is identical to the given one.\r\n *\r\n * @function Phaser.Geom.Rectangle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} source - The Rectangle to clone.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The newly created Rectangle, which is separate from the given one.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Rectangle(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DbG9uZS5qcz81MjZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUmVjdGFuZ2xlIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgZ2l2ZW4gb25lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIFJlY3RhbmdsZSB0byBjbG9uZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbmV3bHkgY3JlYXRlZCBSZWN0YW5nbGUsIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIGdpdmVuIG9uZS5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Contains.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Contains.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if a given point is inside a Rectangle's bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to check.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.\r\n */\r\nvar Contains = function (rect, x, y)\r\n{\r\n    if (rect.width <= 0 || rect.height <= 0)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    return (rect.x <= x && rect.x + rect.width >= x && rect.y <= y && rect.y + rect.height >= y);\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWlucy5qcz9hOTU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHBvaW50IGlzIGluc2lkZSBhIFJlY3RhbmdsZSdzIGJvdW5kcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5Db250YWluc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChyZWN0LCB4LCB5KVxyXG57XHJcbiAgICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAocmVjdC54IDw9IHggJiYgcmVjdC54ICsgcmVjdC53aWR0aCA+PSB4ICYmIHJlY3QueSA8PSB5ICYmIHJlY3QueSArIHJlY3QuaGVpZ2h0ID49IHkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Contains.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/ContainsPoint.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/ContainsPoint.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\n\r\n/**\r\n * Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.\r\n *\r\n * @function Phaser.Geom.Rectangle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle object.\r\n * @param {Phaser.Geom.Point} point - The point object to be checked. Can be a Phaser Point object or any object with x and y values.\r\n *\r\n * @return {boolean} A value of true if the Rectangle object contains the specified point, otherwise false.\r\n */\r\nvar ContainsPoint = function (rect, point)\r\n{\r\n    return Contains(rect, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWluc1BvaW50LmpzPzVjZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvbnRhaW5zUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBwb2ludCBpcyBjb250YWluZWQgd2l0aGluIHRoZSByZWN0YW5ndWxhciByZWdpb24gZGVmaW5lZCBieSB0aGlzIFJlY3RhbmdsZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgcG9pbnQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuIENhbiBiZSBhIFBoYXNlciBQb2ludCBvYmplY3Qgb3IgYW55IG9iamVjdCB3aXRoIHggYW5kIHkgdmFsdWVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBBIHZhbHVlIG9mIHRydWUgaWYgdGhlIFJlY3RhbmdsZSBvYmplY3QgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwb2ludCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAocmVjdCwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyhyZWN0LCBwb2ludC54LCBwb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/ContainsPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/ContainsRect.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/ContainsRect.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tests if one rectangle fully contains another.\r\n *\r\n * @function Phaser.Geom.Rectangle.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first rectangle.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second rectangle.\r\n *\r\n * @return {boolean} True only if rectA fully contains rectB.\r\n */\r\nvar ContainsRect = function (rectA, rectB)\r\n{\r\n    //  Volume check (if rectB volume > rectA then rectA cannot contain it)\r\n    if ((rectB.width * rectB.height) > (rectA.width * rectA.height))\r\n    {\r\n        return false;\r\n    }\r\n\r\n    return (\r\n        (rectB.x > rectA.x && rectB.x < rectA.right) &&\r\n        (rectB.right > rectA.x && rectB.right < rectA.right) &&\r\n        (rectB.y > rectA.y && rectB.y < rectA.bottom) &&\r\n        (rectB.bottom > rectA.y && rectB.bottom < rectA.bottom)\r\n    );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWluc1JlY3QuanM/ODlkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvbnRhaW5zUmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIG9uZSByZWN0YW5nbGUgZnVsbHkgY29udGFpbnMgYW5vdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5Db250YWluc1JlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgcmVjdGFuZ2xlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG9ubHkgaWYgcmVjdEEgZnVsbHkgY29udGFpbnMgcmVjdEIuXHJcbiAqL1xyXG52YXIgQ29udGFpbnNSZWN0ID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qilcclxue1xyXG4gICAgLy8gIFZvbHVtZSBjaGVjayAoaWYgcmVjdEIgdm9sdW1lID4gcmVjdEEgdGhlbiByZWN0QSBjYW5ub3QgY29udGFpbiBpdClcclxuICAgIGlmICgocmVjdEIud2lkdGggKiByZWN0Qi5oZWlnaHQpID4gKHJlY3RBLndpZHRoICogcmVjdEEuaGVpZ2h0KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICAocmVjdEIueCA+IHJlY3RBLnggJiYgcmVjdEIueCA8IHJlY3RBLnJpZ2h0KSAmJlxyXG4gICAgICAgIChyZWN0Qi5yaWdodCA+IHJlY3RBLnggJiYgcmVjdEIucmlnaHQgPCByZWN0QS5yaWdodCkgJiZcclxuICAgICAgICAocmVjdEIueSA+IHJlY3RBLnkgJiYgcmVjdEIueSA8IHJlY3RBLmJvdHRvbSkgJiZcclxuICAgICAgICAocmVjdEIuYm90dG9tID4gcmVjdEEueSAmJiByZWN0Qi5ib3R0b20gPCByZWN0QS5ib3R0b20pXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluc1JlY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/ContainsRect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/CopyFrom.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/CopyFrom.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Rectangle to a destination Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} source - The source Rectangle to copy the values from.\r\n * @param {Phaser.Geom.Rectangle} dest - The destination Rectangle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The destination Rectangle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db3B5RnJvbS5qcz9hMDhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvcHlGcm9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIG9uZSBSZWN0YW5nbGUgdG8gYSBkZXN0aW5hdGlvbiBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIHNvdXJjZSBSZWN0YW5nbGUgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFJlY3RhbmdsZSB0byBjb3B5IHRoZSB2YWx1ZXMgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGRlc3RpbmF0aW9uIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29weUZyb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Decompose.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Decompose.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Create an array of points for each corner of a Rectangle\r\n * If an array is specified, each point object will be added to the end of the array, otherwise a new array will be created.\r\n *\r\n * @function Phaser.Geom.Rectangle.Decompose\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle object to be decomposed.\r\n * @param {array} [out] - If provided, each point will be added to this array.\r\n *\r\n * @return {array} Will return the array you specified or a new array containing the points of the Rectangle.\r\n */\r\nvar Decompose = function (rect, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    out.push({ x: rect.x, y: rect.y });\r\n    out.push({ x: rect.right, y: rect.y });\r\n    out.push({ x: rect.right, y: rect.bottom });\r\n    out.push({ x: rect.x, y: rect.bottom });\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Decompose;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9EZWNvbXBvc2UuanM/OWY3ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsMkJBQTJCO0FBQ3pDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsNEJBQTRCOztBQUUxQztBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRGVjb21wb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGFycmF5IG9mIHBvaW50cyBmb3IgZWFjaCBjb3JuZXIgb2YgYSBSZWN0YW5nbGVcclxuICogSWYgYW4gYXJyYXkgaXMgc3BlY2lmaWVkLCBlYWNoIHBvaW50IG9iamVjdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LCBvdGhlcndpc2UgYSBuZXcgYXJyYXkgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkRlY29tcG9zZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdCB0byBiZSBkZWNvbXBvc2VkLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIElmIHByb3ZpZGVkLCBlYWNoIHBvaW50IHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBhcnJheS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFdpbGwgcmV0dXJuIHRoZSBhcnJheSB5b3Ugc3BlY2lmaWVkIG9yIGEgbmV3IGFycmF5IGNvbnRhaW5pbmcgdGhlIHBvaW50cyBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIERlY29tcG9zZSA9IGZ1bmN0aW9uIChyZWN0LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIG91dC5wdXNoKHsgeDogcmVjdC54LCB5OiByZWN0LnkgfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHJlY3QucmlnaHQsIHk6IHJlY3QueSB9KTtcclxuICAgIG91dC5wdXNoKHsgeDogcmVjdC5yaWdodCwgeTogcmVjdC5ib3R0b20gfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHJlY3QueCwgeTogcmVjdC5ib3R0b20gfSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVjb21wb3NlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Decompose.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Equals.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Equals.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y`, `width` and `height` properties of two rectangles.\r\n *\r\n * @function Phaser.Geom.Rectangle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle A\r\n * @param {Phaser.Geom.Rectangle} toCompare - Rectangle B\r\n *\r\n * @return {boolean} `true` if the rectangles' properties are an exact match, otherwise `false`.\r\n */\r\nvar Equals = function (rect, toCompare)\r\n{\r\n    return (\r\n        rect.x === toCompare.x &&\r\n        rect.y === toCompare.y &&\r\n        rect.width === toCompare.width &&\r\n        rect.height === toCompare.height\r\n    );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9FcXVhbHMuanM/YzljNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGUgYHhgLCBgeWAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgb2YgdHdvIHJlY3RhbmdsZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRXF1YWxzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFJlY3RhbmdsZSBBXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0b0NvbXBhcmUgLSBSZWN0YW5nbGUgQlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZXMnIHByb3BlcnRpZXMgYXJlIGFuIGV4YWN0IG1hdGNoLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBFcXVhbHMgPSBmdW5jdGlvbiAocmVjdCwgdG9Db21wYXJlKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlY3QueCA9PT0gdG9Db21wYXJlLnggJiZcclxuICAgICAgICByZWN0LnkgPT09IHRvQ29tcGFyZS55ICYmXHJcbiAgICAgICAgcmVjdC53aWR0aCA9PT0gdG9Db21wYXJlLndpZHRoICYmXHJcbiAgICAgICAgcmVjdC5oZWlnaHQgPT09IHRvQ29tcGFyZS5oZWlnaHRcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVxdWFscztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/FitInside.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/FitInside.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\n\r\n/**\r\n * Adjusts the target rectangle, changing its width, height and position,\r\n * so that it fits inside the area of the source rectangle, while maintaining its original\r\n * aspect ratio.\r\n * \r\n * Unlike the `FitOutside` function, there may be some space inside the source area not covered.\r\n *\r\n * @function Phaser.Geom.Rectangle.FitInside\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The target rectangle to adjust.\r\n * @param {Phaser.Geom.Rectangle} source - The source rectangle to envelop the target in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified target rectangle instance.\r\n */\r\nvar FitInside = function (target, source)\r\n{\r\n    var ratio = GetAspectRatio(target);\r\n\r\n    if (ratio < GetAspectRatio(source))\r\n    {\r\n        //  Taller than Wide\r\n        target.setSize(source.height * ratio, source.height);\r\n    }\r\n    else\r\n    {\r\n        //  Wider than Tall\r\n        target.setSize(source.width, source.width / ratio);\r\n    }\r\n\r\n    return target.setPosition(\r\n        source.centerX - (target.width / 2),\r\n        source.centerY - (target.height / 2)\r\n    );\r\n};\r\n\r\nmodule.exports = FitInside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GaXRJbnNpZGUuanM/MjYyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsb0ZBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRml0SW5zaWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0QXNwZWN0UmF0aW8gPSByZXF1aXJlKCcuL0dldEFzcGVjdFJhdGlvJyk7XHJcblxyXG4vKipcclxuICogQWRqdXN0cyB0aGUgdGFyZ2V0IHJlY3RhbmdsZSwgY2hhbmdpbmcgaXRzIHdpZHRoLCBoZWlnaHQgYW5kIHBvc2l0aW9uLFxyXG4gKiBzbyB0aGF0IGl0IGZpdHMgaW5zaWRlIHRoZSBhcmVhIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlLCB3aGlsZSBtYWludGFpbmluZyBpdHMgb3JpZ2luYWxcclxuICogYXNwZWN0IHJhdGlvLlxyXG4gKiBcclxuICogVW5saWtlIHRoZSBgRml0T3V0c2lkZWAgZnVuY3Rpb24sIHRoZXJlIG1heSBiZSBzb21lIHNwYWNlIGluc2lkZSB0aGUgc291cmNlIGFyZWEgbm90IGNvdmVyZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRml0SW5zaWRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW3RhcmdldCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gdGFyZ2V0IC0gVGhlIHRhcmdldCByZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIHNvdXJjZSByZWN0YW5nbGUgdG8gZW52ZWxvcCB0aGUgdGFyZ2V0IGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBtb2RpZmllZCB0YXJnZXQgcmVjdGFuZ2xlIGluc3RhbmNlLlxyXG4gKi9cclxudmFyIEZpdEluc2lkZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSlcclxue1xyXG4gICAgdmFyIHJhdGlvID0gR2V0QXNwZWN0UmF0aW8odGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocmF0aW8gPCBHZXRBc3BlY3RSYXRpbyhzb3VyY2UpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUYWxsZXIgdGhhbiBXaWRlXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLmhlaWdodCAqIHJhdGlvLCBzb3VyY2UuaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgV2lkZXIgdGhhbiBUYWxsXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLndpZHRoLCBzb3VyY2Uud2lkdGggLyByYXRpbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldC5zZXRQb3NpdGlvbihcclxuICAgICAgICBzb3VyY2UuY2VudGVyWCAtICh0YXJnZXQud2lkdGggLyAyKSxcclxuICAgICAgICBzb3VyY2UuY2VudGVyWSAtICh0YXJnZXQuaGVpZ2h0IC8gMilcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpdEluc2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FitInside.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/FitOutside.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/FitOutside.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\n\r\n/**\r\n * Adjusts the target rectangle, changing its width, height and position,\r\n * so that it fully covers the area of the source rectangle, while maintaining its original\r\n * aspect ratio.\r\n * \r\n * Unlike the `FitInside` function, the target rectangle may extend further out than the source.\r\n *\r\n * @function Phaser.Geom.Rectangle.FitOutside\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The target rectangle to adjust.\r\n * @param {Phaser.Geom.Rectangle} source - The source rectangle to envelope the target in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified target rectangle instance.\r\n */\r\nvar FitOutside = function (target, source)\r\n{\r\n    var ratio = GetAspectRatio(target);\r\n\r\n    if (ratio > GetAspectRatio(source))\r\n    {\r\n        //  Wider than Tall\r\n        target.setSize(source.height * ratio, source.height);\r\n    }\r\n    else\r\n    {\r\n        //  Taller than Wide\r\n        target.setSize(source.width, source.width / ratio);\r\n    }\r\n\r\n    return target.setPosition(\r\n        source.centerX - target.width / 2,\r\n        source.centerY - target.height / 2\r\n    );\r\n};\r\n\r\nmodule.exports = FitOutside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GaXRPdXRzaWRlLmpzP2IyM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG9GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0ZpdE91dHNpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRBc3BlY3RSYXRpbyA9IHJlcXVpcmUoJy4vR2V0QXNwZWN0UmF0aW8nKTtcclxuXHJcbi8qKlxyXG4gKiBBZGp1c3RzIHRoZSB0YXJnZXQgcmVjdGFuZ2xlLCBjaGFuZ2luZyBpdHMgd2lkdGgsIGhlaWdodCBhbmQgcG9zaXRpb24sXHJcbiAqIHNvIHRoYXQgaXQgZnVsbHkgY292ZXJzIHRoZSBhcmVhIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlLCB3aGlsZSBtYWludGFpbmluZyBpdHMgb3JpZ2luYWxcclxuICogYXNwZWN0IHJhdGlvLlxyXG4gKiBcclxuICogVW5saWtlIHRoZSBgRml0SW5zaWRlYCBmdW5jdGlvbiwgdGhlIHRhcmdldCByZWN0YW5nbGUgbWF5IGV4dGVuZCBmdXJ0aGVyIG91dCB0aGFuIHRoZSBzb3VyY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRml0T3V0c2lkZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFt0YXJnZXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRhcmdldCAtIFRoZSB0YXJnZXQgcmVjdGFuZ2xlIHRvIGFkanVzdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIGVudmVsb3BlIHRoZSB0YXJnZXQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIHRhcmdldCByZWN0YW5nbGUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgRml0T3V0c2lkZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSlcclxue1xyXG4gICAgdmFyIHJhdGlvID0gR2V0QXNwZWN0UmF0aW8odGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocmF0aW8gPiBHZXRBc3BlY3RSYXRpbyhzb3VyY2UpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXaWRlciB0aGFuIFRhbGxcclxuICAgICAgICB0YXJnZXQuc2V0U2l6ZShzb3VyY2UuaGVpZ2h0ICogcmF0aW8sIHNvdXJjZS5oZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUYWxsZXIgdGhhbiBXaWRlXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLndpZHRoLCBzb3VyY2Uud2lkdGggLyByYXRpbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldC5zZXRQb3NpdGlvbihcclxuICAgICAgICBzb3VyY2UuY2VudGVyWCAtIHRhcmdldC53aWR0aCAvIDIsXHJcbiAgICAgICAgc291cmNlLmNlbnRlclkgLSB0YXJnZXQuaGVpZ2h0IC8gMlxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRml0T3V0c2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FitOutside.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Floor.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Floor.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds down (floors) the top left X and Y coordinates of the given Rectangle to the largest integer less than or equal to them\r\n *\r\n * @function Phaser.Geom.Rectangle.Floor\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to floor the top left X and Y coordinates of\r\n *\r\n * @return {Phaser.Geom.Rectangle} The rectangle that was passed to this function with its coordinates floored.\r\n */\r\nvar Floor = function (rect)\r\n{\r\n    rect.x = Math.floor(rect.x);\r\n    rect.y = Math.floor(rect.y);\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = Floor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GbG9vci5qcz82YTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRmxvb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSb3VuZHMgZG93biAoZmxvb3JzKSB0aGUgdG9wIGxlZnQgWCBhbmQgWSBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIHRvIHRoZSBsYXJnZXN0IGludGVnZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZW1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5GbG9vclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZSB0byBmbG9vciB0aGUgdG9wIGxlZnQgWCBhbmQgWSBjb29yZGluYXRlcyBvZlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCBpdHMgY29vcmRpbmF0ZXMgZmxvb3JlZC5cclxuICovXHJcbnZhciBGbG9vciA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZWN0LnggPSBNYXRoLmZsb29yKHJlY3QueCk7XHJcbiAgICByZWN0LnkgPSBNYXRoLmZsb29yKHJlY3QueSk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZsb29yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Floor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/FloorAll.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/FloorAll.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position and size down to the largest integer less than or equal to each current coordinate or dimension.\r\n *\r\n * @function Phaser.Geom.Rectangle.FloorAll\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar FloorAll = function (rect)\r\n{\r\n    rect.x = Math.floor(rect.x);\r\n    rect.y = Math.floor(rect.y);\r\n    rect.width = Math.floor(rect.width);\r\n    rect.height = Math.floor(rect.height);\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = FloorAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GbG9vckFsbC5qcz82OWEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0Zsb29yQWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmRzIGEgUmVjdGFuZ2xlJ3MgcG9zaXRpb24gYW5kIHNpemUgZG93biB0byB0aGUgbGFyZ2VzdCBpbnRlZ2VyIGxlc3MgdGhhbiBvciBlcXVhbCB0byBlYWNoIGN1cnJlbnQgY29vcmRpbmF0ZSBvciBkaW1lbnNpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRmxvb3JBbGxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgRmxvb3JBbGwgPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmVjdC54ID0gTWF0aC5mbG9vcihyZWN0LngpO1xyXG4gICAgcmVjdC55ID0gTWF0aC5mbG9vcihyZWN0LnkpO1xyXG4gICAgcmVjdC53aWR0aCA9IE1hdGguZmxvb3IocmVjdC53aWR0aCk7XHJcbiAgICByZWN0LmhlaWdodCA9IE1hdGguZmxvb3IocmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbG9vckFsbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FloorAll.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/FromPoints.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/FromPoints.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n//  points is an array of Point-like objects,\r\n//  either 2 dimensional arrays, or objects with public x/y properties:\r\n//  var points = [\r\n//      [100, 200],\r\n//      [200, 400],\r\n//      { x: 30, y: 60 }\r\n//  ]\r\n\r\n/**\r\n * Constructs new Rectangle or repositions and resizes an existing Rectangle so that all of the given points are on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.FromPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {array} points - An array of points (either arrays with two elements corresponding to the X and Y coordinate or an object with public `x` and `y` properties) which should be surrounded by the Rectangle.\r\n * @param {Phaser.Geom.Rectangle} [out] - Optional Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted `out` Rectangle, or a new Rectangle if none was provided.\r\n */\r\nvar FromPoints = function (points, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    if (points.length === 0)\r\n    {\r\n        return out;\r\n    }\r\n\r\n    var minX = Number.MAX_VALUE;\r\n    var minY = Number.MAX_VALUE;\r\n\r\n    var maxX = MATH_CONST.MIN_SAFE_INTEGER;\r\n    var maxY = MATH_CONST.MIN_SAFE_INTEGER;\r\n\r\n    var p;\r\n    var px;\r\n    var py;\r\n\r\n    for (var i = 0; i < points.length; i++)\r\n    {\r\n        p = points[i];\r\n\r\n        if (Array.isArray(p))\r\n        {\r\n            px = p[0];\r\n            py = p[1];\r\n        }\r\n        else\r\n        {\r\n            px = p.x;\r\n            py = p.y;\r\n        }\r\n\r\n        minX = Math.min(minX, px);\r\n        minY = Math.min(minY, py);\r\n\r\n        maxX = Math.max(maxX, px);\r\n        maxY = Math.max(maxY, py);\r\n    }\r\n\r\n    out.x = minX;\r\n    out.y = minY;\r\n    out.width = maxX - minX;\r\n    out.height = maxY - minY;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = FromPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzLmpzPzE5NzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcblxyXG4vLyAgcG9pbnRzIGlzIGFuIGFycmF5IG9mIFBvaW50LWxpa2Ugb2JqZWN0cyxcclxuLy8gIGVpdGhlciAyIGRpbWVuc2lvbmFsIGFycmF5cywgb3Igb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllczpcclxuLy8gIHZhciBwb2ludHMgPSBbXHJcbi8vICAgICAgWzEwMCwgMjAwXSxcclxuLy8gICAgICBbMjAwLCA0MDBdLFxyXG4vLyAgICAgIHsgeDogMzAsIHk6IDYwIH1cclxuLy8gIF1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIG5ldyBSZWN0YW5nbGUgb3IgcmVwb3NpdGlvbnMgYW5kIHJlc2l6ZXMgYW4gZXhpc3RpbmcgUmVjdGFuZ2xlIHNvIHRoYXQgYWxsIG9mIHRoZSBnaXZlbiBwb2ludHMgYXJlIG9uIG9yIHdpdGhpbiBpdHMgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkZyb21Qb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IHBvaW50cyAtIEFuIGFycmF5IG9mIHBvaW50cyAoZWl0aGVyIGFycmF5cyB3aXRoIHR3byBlbGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBYIGFuZCBZIGNvb3JkaW5hdGUgb3IgYW4gb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMpIHdoaWNoIHNob3VsZCBiZSBzdXJyb3VuZGVkIGJ5IHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0XSAtIE9wdGlvbmFsIFJlY3RhbmdsZSB0byBhZGp1c3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGFkanVzdGVkIGBvdXRgIFJlY3RhbmdsZSwgb3IgYSBuZXcgUmVjdGFuZ2xlIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIEZyb21Qb2ludHMgPSBmdW5jdGlvbiAocG9pbnRzLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUmVjdGFuZ2xlKCk7IH1cclxuXHJcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBtaW5YID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgIHZhciBtaW5ZID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICB2YXIgbWF4WCA9IE1BVEhfQ09OU1QuTUlOX1NBRkVfSU5URUdFUjtcclxuICAgIHZhciBtYXhZID0gTUFUSF9DT05TVC5NSU5fU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgIHZhciBwO1xyXG4gICAgdmFyIHB4O1xyXG4gICAgdmFyIHB5O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHAgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHApKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHggPSBwWzBdO1xyXG4gICAgICAgICAgICBweSA9IHBbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHB4ID0gcC54O1xyXG4gICAgICAgICAgICBweSA9IHAueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBweCk7XHJcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHB5KTtcclxuXHJcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHB4KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcHkpO1xyXG4gICAgfVxyXG5cclxuICAgIG91dC54ID0gbWluWDtcclxuICAgIG91dC55ID0gbWluWTtcclxuICAgIG91dC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG4gICAgb3V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZyb21Qb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FromPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the width/height ratio of a rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetAspectRatio\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle.\r\n *\r\n * @return {number} The width/height ratio of the rectangle.\r\n */\r\nvar GetAspectRatio = function (rect)\r\n{\r\n    return (rect.height === 0) ? NaN : rect.width / rect.height;\r\n};\r\n\r\nmodule.exports = GetAspectRatio;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRBc3BlY3RSYXRpby5qcz81ZDllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvR2V0QXNwZWN0UmF0aW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSB3aWR0aC9oZWlnaHQgcmF0aW8gb2YgYSByZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuR2V0QXNwZWN0UmF0aW9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgd2lkdGgvaGVpZ2h0IHJhdGlvIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgR2V0QXNwZWN0UmF0aW8gPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmV0dXJuIChyZWN0LmhlaWdodCA9PT0gMCkgPyBOYU4gOiByZWN0LndpZHRoIC8gcmVjdC5oZWlnaHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEFzcGVjdFJhdGlvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/GetCenter.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/GetCenter.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns the center of a Rectangle as a Point.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to get the center of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - Optional point-like object to update with the center coordinates.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The modified `out` object, or a new Point if none was provided.\r\n */\r\nvar GetCenter = function (rect, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = rect.centerX;\r\n    out.y = rect.centerY;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRDZW50ZXIuanM/NGM2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0dldENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgYSBSZWN0YW5nbGUgYXMgYSBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5HZXRDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGdldCB0aGUgY2VudGVyIG9mLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIE9wdGlvbmFsIHBvaW50LWxpa2Ugb2JqZWN0IHRvIHVwZGF0ZSB3aXRoIHRoZSBjZW50ZXIgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBHZXRDZW50ZXIgPSBmdW5jdGlvbiAocmVjdCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IHJlY3QuY2VudGVyWDtcclxuICAgIG91dC55ID0gcmVjdC5jZW50ZXJZO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/GetPoint.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/GetPoint.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Position is a value between 0 and 1 where 0 = the top-left of the rectangle and 0.5 = the bottom right.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - [description]\r\n * @param {number} position - [description]\r\n * @param {(Phaser.Geom.Point|object)} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar GetPoint = function (rectangle, position, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    if (position <= 0 || position >= 1)\r\n    {\r\n        out.x = rectangle.x;\r\n        out.y = rectangle.y;\r\n\r\n        return out;\r\n    }\r\n\r\n    var p = Perimeter(rectangle) * position;\r\n\r\n    if (position > 0.5)\r\n    {\r\n        p -= (rectangle.width + rectangle.height);\r\n\r\n        if (p <= rectangle.width)\r\n        {\r\n            //  Face 3\r\n            out.x = rectangle.right - p;\r\n            out.y = rectangle.bottom;\r\n        }\r\n        else\r\n        {\r\n            //  Face 4\r\n            out.x = rectangle.x;\r\n            out.y = rectangle.bottom - (p - rectangle.width);\r\n        }\r\n    }\r\n    else if (p <= rectangle.width)\r\n    {\r\n        //  Face 1\r\n        out.x = rectangle.x + p;\r\n        out.y = rectangle.y;\r\n    }\r\n    else\r\n    {\r\n        //  Face 2\r\n        out.x = rectangle.right;\r\n        out.y = rectangle.y + (p - rectangle.width);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludC5qcz80OWYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTtBQUNyQyxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUG9zaXRpb24gaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgd2hlcmUgMCA9IHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlIGFuZCAwLjUgPSB0aGUgYm90dG9tIHJpZ2h0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkdldFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0YW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgR2V0UG9pbnQgPSBmdW5jdGlvbiAocmVjdGFuZ2xlLCBwb3NpdGlvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gMCB8fCBwb3NpdGlvbiA+PSAxKVxyXG4gICAge1xyXG4gICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLng7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcCA9IFBlcmltZXRlcihyZWN0YW5nbGUpICogcG9zaXRpb247XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID4gMC41KVxyXG4gICAge1xyXG4gICAgICAgIHAgLT0gKHJlY3RhbmdsZS53aWR0aCArIHJlY3RhbmdsZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAocCA8PSByZWN0YW5nbGUud2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRmFjZSAzXHJcbiAgICAgICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLnJpZ2h0IC0gcDtcclxuICAgICAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUuYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRmFjZSA0XHJcbiAgICAgICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLng7XHJcbiAgICAgICAgICAgIG91dC55ID0gcmVjdGFuZ2xlLmJvdHRvbSAtIChwIC0gcmVjdGFuZ2xlLndpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwIDw9IHJlY3RhbmdsZS53aWR0aClcclxuICAgIHtcclxuICAgICAgICAvLyAgRmFjZSAxXHJcbiAgICAgICAgb3V0LnggPSByZWN0YW5nbGUueCArIHA7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgRmFjZSAyXHJcbiAgICAgICAgb3V0LnggPSByZWN0YW5nbGUucmlnaHQ7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueSArIChwIC0gcmVjdGFuZ2xlLndpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/GetPoints.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/GetPoints.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\n\r\n//  Return an array of points from the perimeter of the rectangle\r\n//  each spaced out based on the quantity or step required\r\n\r\n/**\r\n * Return an array of points from the perimeter of the rectangle, each spaced out based on the quantity or step required.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - The Rectangle object to get the points from.\r\n * @param {number} step - Step between points. Used to calculate the number of points to return when quantity is falsey. Ignored if quantity is positive.\r\n * @param {integer} quantity - The number of evenly spaced points from the rectangles perimeter to return. If falsey, step param will be used to calculate the number of points.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An optional array to store the points in.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Points from the perimeter of the rectangle.\r\n */\r\nvar GetPoints = function (rectangle, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = Perimeter(rectangle) / stepRate;\r\n    }\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var position = i / quantity;\r\n\r\n        out.push(GetPoint(rectangle, position));\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludHMuanM/YTU5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBQZXJpbWV0ZXIgPSByZXF1aXJlKCcuL1BlcmltZXRlcicpO1xyXG5cclxuLy8gIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGVcclxuLy8gIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZFxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGUsIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5HZXRQb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdGFuZ2xlIC0gVGhlIFJlY3RhbmdsZSBvYmplY3QgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgLSBTdGVwIGJldHdlZW4gcG9pbnRzLiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBvaW50cyB0byByZXR1cm4gd2hlbiBxdWFudGl0eSBpcyBmYWxzZXkuIElnbm9yZWQgaWYgcXVhbnRpdHkgaXMgcG9zaXRpdmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGZyb20gdGhlIHJlY3RhbmdsZXMgcGVyaW1ldGVyIHRvIHJldHVybi4gSWYgZmFsc2V5LCBzdGVwIHBhcmFtIHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwb2ludHMuXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IHRvIHN0b3JlIHRoZSBwb2ludHMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzIGZyb20gdGhlIHBlcmltZXRlciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50cyA9IGZ1bmN0aW9uIChyZWN0YW5nbGUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gUGVyaW1ldGVyKHJlY3RhbmdsZSkgLyBzdGVwUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaSAvIHF1YW50aXR5O1xyXG5cclxuICAgICAgICBvdXQucHVzaChHZXRQb2ludChyZWN0YW5nbGUsIHBvc2l0aW9uKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/GetSize.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/GetSize.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n\r\n/**\r\n *  The size of the Rectangle object, expressed as a Point object\r\n *  with the values of the width and height properties.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetSize\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - [description]\r\n * @param {(Phaser.Geom.Point|object)} [out] - [description]\r\n *\r\n * @return {(Phaser.Geom.Point|object)} [description]\r\n */\r\nvar GetSize = function (rect, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = rect.width;\r\n    out.y = rect.height;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRTaXplLmpzP2Y2MTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7OztBQUdwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRTaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuXHJcbi8qKlxyXG4gKiAgVGhlIHNpemUgb2YgdGhlIFJlY3RhbmdsZSBvYmplY3QsIGV4cHJlc3NlZCBhcyBhIFBvaW50IG9iamVjdFxyXG4gKiAgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuR2V0U2l6ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgR2V0U2l6ZSA9IGZ1bmN0aW9uIChyZWN0LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIG91dC54ID0gcmVjdC53aWR0aDtcclxuICAgIG91dC55ID0gcmVjdC5oZWlnaHQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0U2l6ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetSize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Inflate.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Inflate.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\n\r\n\r\n/**\r\n * Increases the size of a Rectangle by a specified amount.\r\n *\r\n * The center of the Rectangle stays the same. The amounts are added to each side, so the actual increase in width or height is two times bigger than the respective argument.\r\n *\r\n * @function Phaser.Geom.Rectangle.Inflate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to inflate.\r\n * @param {number} x - How many pixels the left and the right side should be moved by horizontally.\r\n * @param {number} y - How many pixels the top and the bottom side should be moved by vertically.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The inflated Rectangle.\r\n */\r\nvar Inflate = function (rect, x, y)\r\n{\r\n    var cx = rect.centerX;\r\n    var cy = rect.centerY;\r\n\r\n    rect.setSize(rect.width + (x * 2), rect.height + (y * 2));\r\n\r\n    return CenterOn(rect, cx, cy);\r\n};\r\n\r\nmodule.exports = Inflate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbmZsYXRlLmpzPzVlNzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBWTs7O0FBR25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbmZsYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2VudGVyT24gPSByZXF1aXJlKCcuL0NlbnRlck9uJyk7XHJcblxyXG5cclxuLyoqXHJcbiAqIEluY3JlYXNlcyB0aGUgc2l6ZSBvZiBhIFJlY3RhbmdsZSBieSBhIHNwZWNpZmllZCBhbW91bnQuXHJcbiAqXHJcbiAqIFRoZSBjZW50ZXIgb2YgdGhlIFJlY3RhbmdsZSBzdGF5cyB0aGUgc2FtZS4gVGhlIGFtb3VudHMgYXJlIGFkZGVkIHRvIGVhY2ggc2lkZSwgc28gdGhlIGFjdHVhbCBpbmNyZWFzZSBpbiB3aWR0aCBvciBoZWlnaHQgaXMgdHdvIHRpbWVzIGJpZ2dlciB0aGFuIHRoZSByZXNwZWN0aXZlIGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkluZmxhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gaW5mbGF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBIb3cgbWFueSBwaXhlbHMgdGhlIGxlZnQgYW5kIHRoZSByaWdodCBzaWRlIHNob3VsZCBiZSBtb3ZlZCBieSBob3Jpem9udGFsbHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gSG93IG1hbnkgcGl4ZWxzIHRoZSB0b3AgYW5kIHRoZSBib3R0b20gc2lkZSBzaG91bGQgYmUgbW92ZWQgYnkgdmVydGljYWxseS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgaW5mbGF0ZWQgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIEluZmxhdGUgPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgdmFyIGN4ID0gcmVjdC5jZW50ZXJYO1xyXG4gICAgdmFyIGN5ID0gcmVjdC5jZW50ZXJZO1xyXG5cclxuICAgIHJlY3Quc2V0U2l6ZShyZWN0LndpZHRoICsgKHggKiAyKSwgcmVjdC5oZWlnaHQgKyAoeSAqIDIpKTtcclxuXHJcbiAgICByZXR1cm4gQ2VudGVyT24ocmVjdCwgY3gsIGN5KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5mbGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Inflate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Intersection.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Intersection.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Intersects = __webpack_require__(/*! ../intersects/RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Takes two Rectangles and first checks to see if they intersect.\r\n * If they intersect it will return the area of intersection in the `out` Rectangle.\r\n * If they do not intersect, the `out` Rectangle will have a width and height of zero.\r\n *\r\n * @function Phaser.Geom.Rectangle.Intersection\r\n * @since 3.11.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to get the intersection from.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to get the intersection from.\r\n * @param {Phaser.Geom.Rectangle} [out] - A Rectangle to store the intersection results in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The intersection result. If the width and height are zero, no intersection occurred.\r\n */\r\nvar Intersection = function (rectA, rectB, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    if (Intersects(rectA, rectB))\r\n    {\r\n        out.x = Math.max(rectA.x, rectB.x);\r\n        out.y = Math.max(rectA.y, rectB.y);\r\n        out.width = Math.min(rectA.right, rectB.right) - out.x;\r\n        out.height = Math.min(rectA.bottom, rectB.bottom) - out.y;\r\n    }\r\n    else\r\n    {\r\n        out.setEmpty();\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Intersection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbnRlcnNlY3Rpb24uanM/MGQ0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWE7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsNkdBQW9DOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0ludGVyc2VjdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyk7XHJcbnZhciBJbnRlcnNlY3RzID0gcmVxdWlyZSgnLi4vaW50ZXJzZWN0cy9SZWN0YW5nbGVUb1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIHR3byBSZWN0YW5nbGVzIGFuZCBmaXJzdCBjaGVja3MgdG8gc2VlIGlmIHRoZXkgaW50ZXJzZWN0LlxyXG4gKiBJZiB0aGV5IGludGVyc2VjdCBpdCB3aWxsIHJldHVybiB0aGUgYXJlYSBvZiBpbnRlcnNlY3Rpb24gaW4gdGhlIGBvdXRgIFJlY3RhbmdsZS5cclxuICogSWYgdGhleSBkbyBub3QgaW50ZXJzZWN0LCB0aGUgYG91dGAgUmVjdGFuZ2xlIHdpbGwgaGF2ZSBhIHdpZHRoIGFuZCBoZWlnaHQgb2YgemVyby5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5JbnRlcnNlY3Rpb25cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW3JlY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byBnZXQgdGhlIGludGVyc2VjdGlvbiBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEIgLSBUaGUgc2Vjb25kIFJlY3RhbmdsZSB0byBnZXQgdGhlIGludGVyc2VjdGlvbiBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBIFJlY3RhbmdsZSB0byBzdG9yZSB0aGUgaW50ZXJzZWN0aW9uIHJlc3VsdHMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGludGVyc2VjdGlvbiByZXN1bHQuIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB6ZXJvLCBubyBpbnRlcnNlY3Rpb24gb2NjdXJyZWQuXHJcbiAqL1xyXG52YXIgSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgaWYgKEludGVyc2VjdHMocmVjdEEsIHJlY3RCKSlcclxuICAgIHtcclxuICAgICAgICBvdXQueCA9IE1hdGgubWF4KHJlY3RBLngsIHJlY3RCLngpO1xyXG4gICAgICAgIG91dC55ID0gTWF0aC5tYXgocmVjdEEueSwgcmVjdEIueSk7XHJcbiAgICAgICAgb3V0LndpZHRoID0gTWF0aC5taW4ocmVjdEEucmlnaHQsIHJlY3RCLnJpZ2h0KSAtIG91dC54O1xyXG4gICAgICAgIG91dC5oZWlnaHQgPSBNYXRoLm1pbihyZWN0QS5ib3R0b20sIHJlY3RCLmJvdHRvbSkgLSBvdXQueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBvdXQuc2V0RW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcnNlY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Intersection.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/MarchingAnts.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/MarchingAnts.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n\r\n/**\r\n *  Return an array of points from the perimeter of the rectangle\r\n *  each spaced out based on the quantity or step required\r\n *\r\n * @function Phaser.Geom.Rectangle.MarchingAnts\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - [description]\r\n * @param {number} step - [description]\r\n * @param {integer} quantity - [description]\r\n * @param {(array|Phaser.Geom.Point[])} [out] - [description]\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} [description]\r\n */\r\nvar MarchingAnts = function (rect, step, quantity, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    if (!step && !quantity)\r\n    {\r\n        //  Bail out\r\n        return out;\r\n    }\r\n\r\n    //  If step is a falsey value (false, null, 0, undefined, etc) then we calculate\r\n    //  it based on the quantity instead, otherwise we always use the step value\r\n    if (!step)\r\n    {\r\n        step = Perimeter(rect) / quantity;\r\n    }\r\n    else\r\n    {\r\n        quantity = Math.round(Perimeter(rect) / step);\r\n    }\r\n\r\n    var x = rect.x;\r\n    var y = rect.y;\r\n    var face = 0;\r\n\r\n    //  Loop across each face of the rectangle\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        out.push(new Point(x, y));\r\n\r\n        switch (face)\r\n        {\r\n\r\n            //  Top face\r\n            case 0:\r\n                x += step;\r\n\r\n                if (x >= rect.right)\r\n                {\r\n                    face = 1;\r\n                    y += (x - rect.right);\r\n                    x = rect.right;\r\n                }\r\n                break;\r\n\r\n            //  Right face\r\n            case 1:\r\n                y += step;\r\n\r\n                if (y >= rect.bottom)\r\n                {\r\n                    face = 2;\r\n                    x -= (y - rect.bottom);\r\n                    y = rect.bottom;\r\n                }\r\n                break;\r\n\r\n            //  Bottom face\r\n            case 2:\r\n                x -= step;\r\n\r\n                if (x <= rect.left)\r\n                {\r\n                    face = 3;\r\n                    y -= (rect.left - x);\r\n                    x = rect.left;\r\n                }\r\n                break;\r\n\r\n            //  Left face\r\n            case 3:\r\n                y -= step;\r\n\r\n                if (y <= rect.top)\r\n                {\r\n                    face = 0;\r\n                    y = rect.top;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = MarchingAnts;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NYXJjaGluZ0FudHMuanM/NGY0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7O0FBR3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvTWFyY2hpbmdBbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUGVyaW1ldGVyID0gcmVxdWlyZSgnLi9QZXJpbWV0ZXInKTtcclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcblxyXG4vKipcclxuICogIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGVcclxuICogIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk1hcmNoaW5nQW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50W119IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtvdXRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBNYXJjaGluZ0FudHMgPSBmdW5jdGlvbiAocmVjdCwgc3RlcCwgcXVhbnRpdHksIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKCFzdGVwICYmICFxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICAvLyAgQmFpbCBvdXRcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBJZiBzdGVwIGlzIGEgZmFsc2V5IHZhbHVlIChmYWxzZSwgbnVsbCwgMCwgdW5kZWZpbmVkLCBldGMpIHRoZW4gd2UgY2FsY3VsYXRlXHJcbiAgICAvLyAgaXQgYmFzZWQgb24gdGhlIHF1YW50aXR5IGluc3RlYWQsIG90aGVyd2lzZSB3ZSBhbHdheXMgdXNlIHRoZSBzdGVwIHZhbHVlXHJcbiAgICBpZiAoIXN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgc3RlcCA9IFBlcmltZXRlcihyZWN0KSAvIHF1YW50aXR5O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gTWF0aC5yb3VuZChQZXJpbWV0ZXIocmVjdCkgLyBzdGVwKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgeCA9IHJlY3QueDtcclxuICAgIHZhciB5ID0gcmVjdC55O1xyXG4gICAgdmFyIGZhY2UgPSAwO1xyXG5cclxuICAgIC8vICBMb29wIGFjcm9zcyBlYWNoIGZhY2Ugb2YgdGhlIHJlY3RhbmdsZVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZhY2UpXHJcbiAgICAgICAge1xyXG5cclxuICAgICAgICAgICAgLy8gIFRvcCBmYWNlXHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHggKz0gc3RlcDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+PSByZWN0LnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHkgKz0gKHggLSByZWN0LnJpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gcmVjdC5yaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gIFJpZ2h0IGZhY2VcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgeSArPSBzdGVwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh5ID49IHJlY3QuYm90dG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHggLT0gKHkgLSByZWN0LmJvdHRvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHJlY3QuYm90dG9tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyAgQm90dG9tIGZhY2VcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgeCAtPSBzdGVwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4IDw9IHJlY3QubGVmdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID0gMztcclxuICAgICAgICAgICAgICAgICAgICB5IC09IChyZWN0LmxlZnQgLSB4KTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gcmVjdC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyAgTGVmdCBmYWNlXHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHkgLT0gc3RlcDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeSA8PSByZWN0LnRvcClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gcmVjdC50b3A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWFyY2hpbmdBbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/MergePoints.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/MergePoints.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Merges a Rectangle with a list of points by repositioning and/or resizing it such that all points are located on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergePoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The Rectangle which should be merged.\r\n * @param {Phaser.Geom.Point[]} points - An array of Points (or any object with public `x` and `y` properties) which should be merged with the Rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified Rectangle.\r\n */\r\nvar MergePoints = function (target, points)\r\n{\r\n    var minX = target.x;\r\n    var maxX = target.right;\r\n    var minY = target.y;\r\n    var maxY = target.bottom;\r\n\r\n    for (var i = 0; i < points.length; i++)\r\n    {\r\n        minX = Math.min(minX, points[i].x);\r\n        maxX = Math.max(maxX, points[i].x);\r\n        minY = Math.min(minY, points[i].y);\r\n        maxY = Math.max(maxY, points[i].y);\r\n    }\r\n\r\n    target.x = minX;\r\n    target.y = minY;\r\n    target.width = maxX - minX;\r\n    target.height = maxY - minY;\r\n\r\n    return target;\r\n};\r\n\r\nmodule.exports = MergePoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVBvaW50cy5qcz8xNjhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL01lcmdlUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTWVyZ2VzIGEgUmVjdGFuZ2xlIHdpdGggYSBsaXN0IG9mIHBvaW50cyBieSByZXBvc2l0aW9uaW5nIGFuZC9vciByZXNpemluZyBpdCBzdWNoIHRoYXQgYWxsIHBvaW50cyBhcmUgbG9jYXRlZCBvbiBvciB3aXRoaW4gaXRzIGJvdW5kcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5NZXJnZVBvaW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFt0YXJnZXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRhcmdldCAtIFRoZSBSZWN0YW5nbGUgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiBQb2ludHMgKG9yIGFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcykgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZCB3aXRoIHRoZSBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBNZXJnZVBvaW50cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHBvaW50cylcclxue1xyXG4gICAgdmFyIG1pblggPSB0YXJnZXQueDtcclxuICAgIHZhciBtYXhYID0gdGFyZ2V0LnJpZ2h0O1xyXG4gICAgdmFyIG1pblkgPSB0YXJnZXQueTtcclxuICAgIHZhciBtYXhZID0gdGFyZ2V0LmJvdHRvbTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcG9pbnRzW2ldLngpO1xyXG4gICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwb2ludHNbaV0ueCk7XHJcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS55KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRhcmdldC54ID0gbWluWDtcclxuICAgIHRhcmdldC55ID0gbWluWTtcclxuICAgIHRhcmdldC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlUG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergePoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/MergeRect.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/MergeRect.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Merges source rectangle into target rectangle and returns target\r\n//  Neither rect should have negative widths or heights\r\n\r\n/**\r\n * Merges the source rectangle into the target rectangle and returns the target.\r\n * Neither rectangle should have a negative width or height.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergeRect\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - Target rectangle. Will be modified to include source rectangle.\r\n * @param {Phaser.Geom.Rectangle} source - Rectangle that will be merged into target rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} Modified target rectangle that contains source rectangle.\r\n */\r\nvar MergeRect = function (target, source)\r\n{\r\n    var minX = Math.min(target.x, source.x);\r\n    var maxX = Math.max(target.right, source.right);\r\n\r\n    target.x = minX;\r\n    target.width = maxX - minX;\r\n\r\n    var minY = Math.min(target.y, source.y);\r\n    var maxY = Math.max(target.bottom, source.bottom);\r\n\r\n    target.y = minY;\r\n    target.height = maxY - minY;\r\n\r\n    return target;\r\n};\r\n\r\nmodule.exports = MergeRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVJlY3QuanM/ODUwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVJlY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBNZXJnZXMgc291cmNlIHJlY3RhbmdsZSBpbnRvIHRhcmdldCByZWN0YW5nbGUgYW5kIHJldHVybnMgdGFyZ2V0XHJcbi8vICBOZWl0aGVyIHJlY3Qgc2hvdWxkIGhhdmUgbmVnYXRpdmUgd2lkdGhzIG9yIGhlaWdodHNcclxuXHJcbi8qKlxyXG4gKiBNZXJnZXMgdGhlIHNvdXJjZSByZWN0YW5nbGUgaW50byB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBhbmQgcmV0dXJucyB0aGUgdGFyZ2V0LlxyXG4gKiBOZWl0aGVyIHJlY3RhbmdsZSBzaG91bGQgaGF2ZSBhIG5lZ2F0aXZlIHdpZHRoIG9yIGhlaWdodC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5NZXJnZVJlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbdGFyZ2V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0YXJnZXQgLSBUYXJnZXQgcmVjdGFuZ2xlLiBXaWxsIGJlIG1vZGlmaWVkIHRvIGluY2x1ZGUgc291cmNlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHNvdXJjZSAtIFJlY3RhbmdsZSB0aGF0IHdpbGwgYmUgbWVyZ2VkIGludG8gdGFyZ2V0IHJlY3RhbmdsZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBNb2RpZmllZCB0YXJnZXQgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgc291cmNlIHJlY3RhbmdsZS5cclxuICovXHJcbnZhciBNZXJnZVJlY3QgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpXHJcbntcclxuICAgIHZhciBtaW5YID0gTWF0aC5taW4odGFyZ2V0LngsIHNvdXJjZS54KTtcclxuICAgIHZhciBtYXhYID0gTWF0aC5tYXgodGFyZ2V0LnJpZ2h0LCBzb3VyY2UucmlnaHQpO1xyXG5cclxuICAgIHRhcmdldC54ID0gbWluWDtcclxuICAgIHRhcmdldC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG5cclxuICAgIHZhciBtaW5ZID0gTWF0aC5taW4odGFyZ2V0LnksIHNvdXJjZS55KTtcclxuICAgIHZhciBtYXhZID0gTWF0aC5tYXgodGFyZ2V0LmJvdHRvbSwgc291cmNlLmJvdHRvbSk7XHJcblxyXG4gICAgdGFyZ2V0LnkgPSBtaW5ZO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlUmVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergeRect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/MergeXY.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/MergeXY.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Merges a Rectangle with a point by repositioning and/or resizing it so that the point is on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergeXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The Rectangle which should be merged and modified.\r\n * @param {number} x - The X coordinate of the point which should be merged.\r\n * @param {number} y - The Y coordinate of the point which should be merged.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified `target` Rectangle.\r\n */\r\nvar MergeXY = function (target, x, y)\r\n{\r\n    var minX = Math.min(target.x, x);\r\n    var maxX = Math.max(target.right, x);\r\n\r\n    target.x = minX;\r\n    target.width = maxX - minX;\r\n\r\n    var minY = Math.min(target.y, y);\r\n    var maxY = Math.max(target.bottom, y);\r\n\r\n    target.y = minY;\r\n    target.height = maxY - minY;\r\n\r\n    return target;\r\n};\r\n\r\nmodule.exports = MergeXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVhZLmpzPzc1NjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL01lcmdlWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBNZXJnZXMgYSBSZWN0YW5nbGUgd2l0aCBhIHBvaW50IGJ5IHJlcG9zaXRpb25pbmcgYW5kL29yIHJlc2l6aW5nIGl0IHNvIHRoYXQgdGhlIHBvaW50IGlzIG9uIG9yIHdpdGhpbiBpdHMgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk1lcmdlWFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbdGFyZ2V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0YXJnZXQgLSBUaGUgUmVjdGFuZ2xlIHdoaWNoIHNob3VsZCBiZSBtZXJnZWQgYW5kIG1vZGlmaWVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHdoaWNoIHNob3VsZCBiZSBtZXJnZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbW9kaWZpZWQgYHRhcmdldGAgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIE1lcmdlWFkgPSBmdW5jdGlvbiAodGFyZ2V0LCB4LCB5KVxyXG57XHJcbiAgICB2YXIgbWluWCA9IE1hdGgubWluKHRhcmdldC54LCB4KTtcclxuICAgIHZhciBtYXhYID0gTWF0aC5tYXgodGFyZ2V0LnJpZ2h0LCB4KTtcclxuXHJcbiAgICB0YXJnZXQueCA9IG1pblg7XHJcbiAgICB0YXJnZXQud2lkdGggPSBtYXhYIC0gbWluWDtcclxuXHJcbiAgICB2YXIgbWluWSA9IE1hdGgubWluKHRhcmdldC55LCB5KTtcclxuICAgIHZhciBtYXhZID0gTWF0aC5tYXgodGFyZ2V0LmJvdHRvbSwgeSk7XHJcblxyXG4gICAgdGFyZ2V0LnkgPSBtaW5ZO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergeXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Offset.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Offset.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Nudges (translates) the top left corner of a Rectangle by a given offset.\r\n *\r\n * @function Phaser.Geom.Rectangle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n * @param {number} x - The distance to move the Rectangle horizontally.\r\n * @param {number} y - The distance to move the Rectangle vertically.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar Offset = function (rect, x, y)\r\n{\r\n    rect.x += x;\r\n    rect.y += y;\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PZmZzZXQuanM/YjJmYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvT2Zmc2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTnVkZ2VzICh0cmFuc2xhdGVzKSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIGEgUmVjdGFuZ2xlIGJ5IGEgZ2l2ZW4gb2Zmc2V0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk9mZnNldFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBhZGp1c3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGRpc3RhbmNlIHRvIG1vdmUgdGhlIFJlY3RhbmdsZSBob3Jpem9udGFsbHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGRpc3RhbmNlIHRvIG1vdmUgdGhlIFJlY3RhbmdsZSB2ZXJ0aWNhbGx5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKHJlY3QsIHgsIHkpXHJcbntcclxuICAgIHJlY3QueCArPSB4O1xyXG4gICAgcmVjdC55ICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/OffsetPoint.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/OffsetPoint.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Nudges (translates) the top-left corner of a Rectangle by the coordinates of a point (translation vector).\r\n *\r\n * @function Phaser.Geom.Rectangle.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2)} point - The point whose coordinates should be used as an offset.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar OffsetPoint = function (rect, point)\r\n{\r\n    rect.x += point.x;\r\n    rect.y += point.y;\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PZmZzZXRQb2ludC5qcz80ZmFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvT2Zmc2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBOdWRnZXMgKHRyYW5zbGF0ZXMpIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgYSBSZWN0YW5nbGUgYnkgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgKHRyYW5zbGF0aW9uIHZlY3RvcikuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuT2Zmc2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gcG9pbnQgLSBUaGUgcG9pbnQgd2hvc2UgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIHVzZWQgYXMgYW4gb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0UG9pbnQgPSBmdW5jdGlvbiAocmVjdCwgcG9pbnQpXHJcbntcclxuICAgIHJlY3QueCArPSBwb2ludC54O1xyXG4gICAgcmVjdC55ICs9IHBvaW50Lnk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/OffsetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Overlaps.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Overlaps.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if two Rectangles overlap. If a Rectangle is within another Rectangle, the two will be considered overlapping. Thus, the Rectangles are treated as \"solid\".\r\n *\r\n * @function Phaser.Geom.Rectangle.Overlaps\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check.\r\n *\r\n * @return {boolean} `true` if the two Rectangles overlap, `false` otherwise.\r\n */\r\nvar Overlaps = function (rectA, rectB)\r\n{\r\n    return (\r\n        rectA.x < rectB.right &&\r\n        rectA.right > rectB.x &&\r\n        rectA.y < rectB.bottom &&\r\n        rectA.bottom > rectB.y\r\n    );\r\n};\r\n\r\nmodule.exports = Overlaps;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PdmVybGFwcy5qcz9iMWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL092ZXJsYXBzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGVzIG92ZXJsYXAuIElmIGEgUmVjdGFuZ2xlIGlzIHdpdGhpbiBhbm90aGVyIFJlY3RhbmdsZSwgdGhlIHR3byB3aWxsIGJlIGNvbnNpZGVyZWQgb3ZlcmxhcHBpbmcuIFRodXMsIHRoZSBSZWN0YW5nbGVzIGFyZSB0cmVhdGVkIGFzIFwic29saWRcIi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5PdmVybGFwc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RCIC0gVGhlIHNlY29uZCBSZWN0YW5nbGUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIFJlY3RhbmdsZXMgb3ZlcmxhcCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqL1xyXG52YXIgT3ZlcmxhcHMgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlY3RBLnggPCByZWN0Qi5yaWdodCAmJlxyXG4gICAgICAgIHJlY3RBLnJpZ2h0ID4gcmVjdEIueCAmJlxyXG4gICAgICAgIHJlY3RBLnkgPCByZWN0Qi5ib3R0b20gJiZcclxuICAgICAgICByZWN0QS5ib3R0b20gPiByZWN0Qi55XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPdmVybGFwcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Overlaps.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Perimeter.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Perimeter.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the perimeter of a Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.Perimeter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to use.\r\n *\r\n * @return {number} The perimeter of the Rectangle, equal to `(width * 2) + (height * 2)`.\r\n */\r\nvar Perimeter = function (rect)\r\n{\r\n    return 2 * (rect.width + rect.height);\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9QZXJpbWV0ZXIuanM/NmYyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1BlcmltZXRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBlcmltZXRlciBvZiBhIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5QZXJpbWV0ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byB1c2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBlcmltZXRlciBvZiB0aGUgUmVjdGFuZ2xlLCBlcXVhbCB0byBgKHdpZHRoICogMikgKyAoaGVpZ2h0ICogMilgLlxyXG4gKi9cclxudmFyIFBlcmltZXRlciA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZXR1cm4gMiAqIChyZWN0LndpZHRoICsgcmVjdC5oZWlnaHQpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Perimeter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Rectangle.PerimeterPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - [description]\r\n * @param {integer} angle - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar PerimeterPoint = function (rectangle, angle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    angle = DegToRad(angle);\r\n\r\n    var s = Math.sin(angle);\r\n    var c = Math.cos(angle);\r\n\r\n    var dx = (c > 0) ? rectangle.width / 2 : rectangle.width / -2;\r\n    var dy = (s > 0) ? rectangle.height / 2 : rectangle.height / -2;\r\n\r\n    if (Math.abs(dx * s) < Math.abs(dy * c))\r\n    {\r\n        dy = (dx * s) / c;\r\n    }\r\n    else\r\n    {\r\n        dx = (dy * c) / s;\r\n    }\r\n\r\n    out.x = dx + rectangle.centerX;\r\n    out.y = dy + rectangle.centerY;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = PerimeterPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9QZXJpbWV0ZXJQb2ludC5qcz9jNTNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvUGVyaW1ldGVyUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcbnZhciBEZWdUb1JhZCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvRGVnVG9SYWQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuUGVyaW1ldGVyUG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUGVyaW1ldGVyUG9pbnQgPSBmdW5jdGlvbiAocmVjdGFuZ2xlLCBhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBhbmdsZSA9IERlZ1RvUmFkKGFuZ2xlKTtcclxuXHJcbiAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cclxuICAgIHZhciBkeCA9IChjID4gMCkgPyByZWN0YW5nbGUud2lkdGggLyAyIDogcmVjdGFuZ2xlLndpZHRoIC8gLTI7XHJcbiAgICB2YXIgZHkgPSAocyA+IDApID8gcmVjdGFuZ2xlLmhlaWdodCAvIDIgOiByZWN0YW5nbGUuaGVpZ2h0IC8gLTI7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGR4ICogcykgPCBNYXRoLmFicyhkeSAqIGMpKVxyXG4gICAge1xyXG4gICAgICAgIGR5ID0gKGR4ICogcykgLyBjO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGR4ID0gKGR5ICogYykgLyBzO1xyXG4gICAgfVxyXG5cclxuICAgIG91dC54ID0gZHggKyByZWN0YW5nbGUuY2VudGVyWDtcclxuICAgIG91dC55ID0gZHkgKyByZWN0YW5nbGUuY2VudGVyWTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXJQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Random.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Random.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a random point within a Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to return a point from.\r\n * @param {Phaser.Geom.Point} out - The object to update with the point's coordinates.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `out` object, or a new Point if none was provided.\r\n */\r\nvar Random = function (rect, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = rect.x + (Math.random() * rect.width);\r\n    out.y = rect.y + (Math.random() * rect.height);\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SYW5kb20uanM/M2FhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1JhbmRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHBvaW50IHdpdGhpbiBhIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIHJldHVybiBhIHBvaW50IGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IG91dCAtIFRoZSBvYmplY3QgdG8gdXBkYXRlIHdpdGggdGhlIHBvaW50J3MgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBSYW5kb20gPSBmdW5jdGlvbiAocmVjdCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IHJlY3QueCArIChNYXRoLnJhbmRvbSgpICogcmVjdC53aWR0aCk7XHJcbiAgICBvdXQueSA9IHJlY3QueSArIChNYXRoLnJhbmRvbSgpICogcmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Random.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/RandomOutside.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/RandomOutside.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Between = __webpack_require__(/*! ../../math/Between */ \"./node_modules/phaser/src/math/Between.js\");\r\nvar ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/rectangle/ContainsRect.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Calculates a random point that lies within the `outer` Rectangle, but outside of the `inner` Rectangle.\r\n * The inner Rectangle must be fully contained within the outer rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.RandomOutside\r\n * @since 3.10.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} outer - The outer Rectangle to get the random point within.\r\n * @param {Phaser.Geom.Rectangle} inner - The inner Rectangle to exclude from the returned point.\r\n * @param {Phaser.Geom.Point} [out] - A Point, or Point-like object to store the result in. If not specified, a new Point will be created.\r\n *\r\n * @return {Phaser.Geom.Point} A Point object containing the random values in its `x` and `y` properties.\r\n */\r\nvar RandomOutside = function (outer, inner, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    if (ContainsRect(outer, inner))\r\n    {\r\n        //  Pick a random quadrant\r\n        //\r\n        //  The quadrants don't extend the full widths / heights of the outer rect to give\r\n        //  us a better uniformed distribution, otherwise you get clumping in the corners where\r\n        //  the 4 quads would overlap\r\n\r\n        switch (Between(0, 3))\r\n        {\r\n            case 0: // Top\r\n                out.x = outer.x + (Math.random() * (inner.right - outer.x));\r\n                out.y = outer.y + (Math.random() * (inner.top - outer.y));\r\n                break;\r\n\r\n            case 1: // Bottom\r\n                out.x = inner.x + (Math.random() * (outer.right - inner.x));\r\n                out.y = inner.bottom + (Math.random() * (outer.bottom - inner.bottom));\r\n                break;\r\n\r\n            case 2: // Left\r\n                out.x = outer.x + (Math.random() * (inner.x - outer.x));\r\n                out.y = inner.y + (Math.random() * (outer.bottom - inner.y));\r\n                break;\r\n\r\n            case 3: // Right\r\n                out.x = inner.right + (Math.random() * (outer.right - inner.right));\r\n                out.y = outer.y + (Math.random() * (inner.bottom - outer.y));\r\n                break;\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = RandomOutside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SYW5kb21PdXRzaWRlLmpzPzQ4NTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQzNDLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1JhbmRvbU91dHNpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCZXR3ZWVuID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9CZXR3ZWVuJyk7XHJcbnZhciBDb250YWluc1JlY3QgPSByZXF1aXJlKCcuL0NvbnRhaW5zUmVjdCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSByYW5kb20gcG9pbnQgdGhhdCBsaWVzIHdpdGhpbiB0aGUgYG91dGVyYCBSZWN0YW5nbGUsIGJ1dCBvdXRzaWRlIG9mIHRoZSBgaW5uZXJgIFJlY3RhbmdsZS5cclxuICogVGhlIGlubmVyIFJlY3RhbmdsZSBtdXN0IGJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIG91dGVyIHJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5SYW5kb21PdXRzaWRlXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gb3V0ZXIgLSBUaGUgb3V0ZXIgUmVjdGFuZ2xlIHRvIGdldCB0aGUgcmFuZG9tIHBvaW50IHdpdGhpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IGlubmVyIC0gVGhlIGlubmVyIFJlY3RhbmdsZSB0byBleGNsdWRlIGZyb20gdGhlIHJldHVybmVkIHBvaW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIEEgUG9pbnQsIG9yIFBvaW50LWxpa2Ugb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBzcGVjaWZpZWQsIGEgbmV3IFBvaW50IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJhbmRvbSB2YWx1ZXMgaW4gaXRzIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgUmFuZG9tT3V0c2lkZSA9IGZ1bmN0aW9uIChvdXRlciwgaW5uZXIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgaWYgKENvbnRhaW5zUmVjdChvdXRlciwgaW5uZXIpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBQaWNrIGEgcmFuZG9tIHF1YWRyYW50XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgVGhlIHF1YWRyYW50cyBkb24ndCBleHRlbmQgdGhlIGZ1bGwgd2lkdGhzIC8gaGVpZ2h0cyBvZiB0aGUgb3V0ZXIgcmVjdCB0byBnaXZlXHJcbiAgICAgICAgLy8gIHVzIGEgYmV0dGVyIHVuaWZvcm1lZCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZ2V0IGNsdW1waW5nIGluIHRoZSBjb3JuZXJzIHdoZXJlXHJcbiAgICAgICAgLy8gIHRoZSA0IHF1YWRzIHdvdWxkIG92ZXJsYXBcclxuXHJcbiAgICAgICAgc3dpdGNoIChCZXR3ZWVuKDAsIDMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBUb3BcclxuICAgICAgICAgICAgICAgIG91dC54ID0gb3V0ZXIueCArIChNYXRoLnJhbmRvbSgpICogKGlubmVyLnJpZ2h0IC0gb3V0ZXIueCkpO1xyXG4gICAgICAgICAgICAgICAgb3V0LnkgPSBvdXRlci55ICsgKE1hdGgucmFuZG9tKCkgKiAoaW5uZXIudG9wIC0gb3V0ZXIueSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIEJvdHRvbVxyXG4gICAgICAgICAgICAgICAgb3V0LnggPSBpbm5lci54ICsgKE1hdGgucmFuZG9tKCkgKiAob3V0ZXIucmlnaHQgLSBpbm5lci54KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IGlubmVyLmJvdHRvbSArIChNYXRoLnJhbmRvbSgpICogKG91dGVyLmJvdHRvbSAtIGlubmVyLmJvdHRvbSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIExlZnRcclxuICAgICAgICAgICAgICAgIG91dC54ID0gb3V0ZXIueCArIChNYXRoLnJhbmRvbSgpICogKGlubmVyLnggLSBvdXRlci54KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IGlubmVyLnkgKyAoTWF0aC5yYW5kb20oKSAqIChvdXRlci5ib3R0b20gLSBpbm5lci55KSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzogLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgIG91dC54ID0gaW5uZXIucmlnaHQgKyAoTWF0aC5yYW5kb20oKSAqIChvdXRlci5yaWdodCAtIGlubmVyLnJpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IG91dGVyLnkgKyAoTWF0aC5yYW5kb20oKSAqIChpbm5lci5ib3R0b20gLSBvdXRlci55KSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tT3V0c2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/RandomOutside.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Rectangle.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Rectangle.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/rectangle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Encapsulates a 2D rectangle defined by its corner point in the top-left and its extends in x (width) and y (height)\r\n *\r\n * @class Rectangle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The X coordinate of the top left corner of the Rectangle.\r\n * @param {number} [y=0] - The Y coordinate of the top left corner of the Rectangle.\r\n * @param {number} [width=0] - The width of the Rectangle.\r\n * @param {number} [height=0] - The height of the Rectangle.\r\n */\r\nvar Rectangle = new Class({\r\n\r\n    initialize:\r\n\r\n    function Rectangle (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = 0; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.RECTANGLE`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Rectangle#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.RECTANGLE;\r\n\r\n        /**\r\n         * The X coordinate of the top left corner of the Rectangle.\r\n         *\r\n         * @name Phaser.Geom.Rectangle#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The Y coordinate of the top left corner of the Rectangle.\r\n         *\r\n         * @name Phaser.Geom.Rectangle#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The width of the Rectangle, i.e. the distance between its left side (defined by `x`) and its right side.\r\n         *\r\n         * @name Phaser.Geom.Rectangle#width\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the Rectangle, i.e. the distance between its top side (defined by `y`) and its bottom side.\r\n         *\r\n         * @name Phaser.Geom.Rectangle#height\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given point is inside the Rectangle's bounds.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the point to check.\r\n     * @param {number} y - The Y coordinate of the point to check.\r\n     *\r\n     * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.\r\n     */\r\n    contains: function (x, y)\r\n    {\r\n        return Contains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * Calculates the coordinates of a point at a certain `position` on the Rectangle's perimeter.\r\n     * \r\n     * The `position` is a fraction between 0 and 1 which defines how far into the perimeter the point is.\r\n     * \r\n     * A value of 0 or 1 returns the point at the top left corner of the rectangle, while a value of 0.5 returns the point at the bottom right corner of the rectangle. Values between 0 and 0.5 are on the top or the right side and values between 0.5 and 1 are on the bottom or the left side.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [output,$return]\r\n     *\r\n     * @param {number} position - The normalized distance into the Rectangle's perimeter to return.\r\n     * @param {(Phaser.Geom.Point|object)} [output] - An object to update with the `x` and `y` coordinates of the point.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} The updated `output` object, or a new Point if no `output` object was given.\r\n     */\r\n    getPoint: function (position, output)\r\n    {\r\n        return GetPoint(this, position, output);\r\n    },\r\n\r\n    /**\r\n     * Returns an array of points from the perimeter of the Rectangle, each spaced out based on the quantity or step required.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n     *\r\n     * @param {integer} quantity - The number of points to return. Set to `false` or 0 to return an arbitrary number of points (`perimeter / stepRate`) evenly spaced around the Rectangle based on the `stepRate`.\r\n     * @param {number} [stepRate] - If `quantity` is 0, determines the normalized distance between each returned point.\r\n     * @param {(array|Phaser.Geom.Point[])} [output] - An array to which to append the points.\r\n     *\r\n     * @return {(array|Phaser.Geom.Point[])} The modified `output` array, or a new array if none was provided.\r\n     */\r\n    getPoints: function (quantity, stepRate, output)\r\n    {\r\n        return GetPoints(this, quantity, stepRate, output);\r\n    },\r\n\r\n    /**\r\n     * Returns a random point within the Rectangle's bounds.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [point,$return]\r\n     *\r\n     * @param {Phaser.Geom.Point} [point] - The object in which to store the `x` and `y` coordinates of the point.\r\n     *\r\n     * @return {Phaser.Geom.Point} The updated `point`, or a new Point if none was provided.\r\n     */\r\n    getRandomPoint: function (point)\r\n    {\r\n        return Random(this, point);\r\n    },\r\n\r\n    /**\r\n     * Sets the position, width, and height of the Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the top left corner of the Rectangle.\r\n     * @param {number} y - The Y coordinate of the top left corner of the Rectangle.\r\n     * @param {number} width - The width of the Rectangle.\r\n     * @param {number} height - The height of the Rectangle.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n     */\r\n    setTo: function (x, y, width, height)\r\n    {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the position, width, and height of the Rectangle to 0.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#setEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n     */\r\n    setEmpty: function ()\r\n    {\r\n        return this.setTo(0, 0, 0, 0);\r\n    },\r\n\r\n    /**\r\n     * Sets the position of the Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the top left corner of the Rectangle.\r\n     * @param {number} [y=x] - The Y coordinate of the top left corner of the Rectangle.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the width and height of the Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width to set the Rectangle to.\r\n     * @param {number} [height=width] - The height to set the Rectangle to.\r\n     *\r\n     * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Determines if the Rectangle is empty. A Rectangle is empty if its width or height is less than or equal to 0.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#isEmpty\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Rectangle is empty. A Rectangle object is empty if its width or height is less than or equal to 0.\r\n     */\r\n    isEmpty: function ()\r\n    {\r\n        return (this.width <= 0 || this.height <= 0);\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to the top of this Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getLineA\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to the top of this Rectangle.\r\n     */\r\n    getLineA: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.x, this.y, this.right, this.y);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to the right of this Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getLineB\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to the right of this Rectangle.\r\n     */\r\n    getLineB: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.right, this.y, this.right, this.bottom);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to the bottom of this Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getLineC\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to the bottom of this Rectangle.\r\n     */\r\n    getLineC: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.right, this.bottom, this.x, this.bottom);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to the left of this Rectangle.\r\n     *\r\n     * @method Phaser.Geom.Rectangle#getLineD\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to the left of this Rectangle.\r\n     */\r\n    getLineD: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.x, this.bottom, this.x, this.y);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * The x coordinate of the left of the Rectangle.\r\n     * Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#left\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value >= this.right)\r\n            {\r\n                this.width = 0;\r\n            }\r\n            else\r\n            {\r\n                this.width = this.right - value;\r\n            }\r\n\r\n            this.x = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The sum of the x and width properties.\r\n     * Changing the right property of a Rectangle object has no effect on the x, y and height properties, however it does affect the width property.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#right\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + this.width;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value <= this.x)\r\n            {\r\n                this.width = 0;\r\n            }\r\n            else\r\n            {\r\n                this.width = value - this.x;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y coordinate of the top of the Rectangle. Changing the top property of a Rectangle object has no effect on the x and width properties.\r\n     * However it does affect the height property, whereas changing the y value does not affect the height property.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#top\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value >= this.bottom)\r\n            {\r\n                this.height = 0;\r\n            }\r\n            else\r\n            {\r\n                this.height = (this.bottom - value);\r\n            }\r\n\r\n            this.y = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The sum of the y and height properties.\r\n     * Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, but does change the height property.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#bottom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + this.height;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value <= this.y)\r\n            {\r\n                this.height = 0;\r\n            }\r\n            else\r\n            {\r\n                this.height = value - this.y;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The x coordinate of the center of the Rectangle.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#centerX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    centerX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.x + (this.width / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.x = value - (this.width / 2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y coordinate of the center of the Rectangle.\r\n     *\r\n     * @name Phaser.Geom.Rectangle#centerY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    centerY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.y + (this.height / 2);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.y = value - (this.height / 2);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUuanM/YjU0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsd0VBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxpRUFBYztBQUNqQyxhQUFhLG1CQUFPLENBQUMsb0VBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsV0FBVztBQUM3QyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi9saW5lL0xpbmUnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBFbmNhcHN1bGF0ZXMgYSAyRCByZWN0YW5nbGUgZGVmaW5lZCBieSBpdHMgY29ybmVyIHBvaW50IGluIHRoZSB0b3AtbGVmdCBhbmQgaXRzIGV4dGVuZHMgaW4geCAod2lkdGgpIGFuZCB5IChoZWlnaHQpXHJcbiAqXHJcbiAqIEBjbGFzcyBSZWN0YW5nbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTBdIC0gVGhlIGhlaWdodCBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIFJlY3RhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBSZWN0YW5nbGUgKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDA7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuUkVDVEFOR0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULlJFQ1RBTkdMRTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFJlY3RhbmdsZSwgaS5lLiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBpdHMgbGVmdCBzaWRlIChkZWZpbmVkIGJ5IGB4YCkgYW5kIGl0cyByaWdodCBzaWRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBSZWN0YW5nbGUsIGkuZS4gdGhlIGRpc3RhbmNlIGJldHdlZW4gaXRzIHRvcCBzaWRlIChkZWZpbmVkIGJ5IGB5YCkgYW5kIGl0cyBib3R0b20gc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGluc2lkZSB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2NvbnRhaW5zXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IGF0IGEgY2VydGFpbiBgcG9zaXRpb25gIG9uIHRoZSBSZWN0YW5nbGUncyBwZXJpbWV0ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgcG9zaXRpb25gIGlzIGEgZnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxIHdoaWNoIGRlZmluZXMgaG93IGZhciBpbnRvIHRoZSBwZXJpbWV0ZXIgdGhlIHBvaW50IGlzLlxyXG4gICAgICogXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAgb3IgMSByZXR1cm5zIHRoZSBwb2ludCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUsIHdoaWxlIGEgdmFsdWUgb2YgMC41IHJldHVybnMgdGhlIHBvaW50IGF0IHRoZSBib3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUuIFZhbHVlcyBiZXR3ZWVuIDAgYW5kIDAuNSBhcmUgb24gdGhlIHRvcCBvciB0aGUgcmlnaHQgc2lkZSBhbmQgdmFsdWVzIGJldHdlZW4gMC41IGFuZCAxIGFyZSBvbiB0aGUgYm90dG9tIG9yIHRoZSBsZWZ0IHNpZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBUaGUgbm9ybWFsaXplZCBkaXN0YW5jZSBpbnRvIHRoZSBSZWN0YW5nbGUncyBwZXJpbWV0ZXIgdG8gcmV0dXJuLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gdXBkYXRlIHdpdGggdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gVGhlIHVwZGF0ZWQgYG91dHB1dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBubyBgb3V0cHV0YCBvYmplY3Qgd2FzIGdpdmVuLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBvc2l0aW9uLCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50KHRoaXMsIHBvc2l0aW9uLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRzIGZyb20gdGhlIHBlcmltZXRlciBvZiB0aGUgUmVjdGFuZ2xlLCBlYWNoIHNwYWNlZCBvdXQgYmFzZWQgb24gdGhlIHF1YW50aXR5IG9yIHN0ZXAgcmVxdWlyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gcmV0dXJuLiBTZXQgdG8gYGZhbHNlYCBvciAwIHRvIHJldHVybiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvaW50cyAoYHBlcmltZXRlciAvIHN0ZXBSYXRlYCkgZXZlbmx5IHNwYWNlZCBhcm91bmQgdGhlIFJlY3RhbmdsZSBiYXNlZCBvbiB0aGUgYHN0ZXBSYXRlYC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gSWYgYHF1YW50aXR5YCBpcyAwLCBkZXRlcm1pbmVzIHRoZSBub3JtYWxpemVkIGRpc3RhbmNlIGJldHdlZW4gZWFjaCByZXR1cm5lZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRvIGFwcGVuZCB0aGUgcG9pbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gVGhlIG1vZGlmaWVkIGBvdXRwdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRzOiBmdW5jdGlvbiAocXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50cyh0aGlzLCBxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSBwb2ludCB3aXRoaW4gdGhlIFJlY3RhbmdsZSdzIGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW3BvaW50XSAtIFRoZSBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIHVwZGF0ZWQgYHBvaW50YCwgb3IgYSBuZXcgUG9pbnQgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAocG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFJhbmRvbSh0aGlzLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24sIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBwb3NpdGlvbiwgd2lkdGgsIGFuZCBoZWlnaHQgb2YgdGhlIFJlY3RhbmdsZSB0byAwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3NldEVtcHR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoaXMgUmVjdGFuZ2xlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RW1wdHk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8oMCwgMCwgMCwgMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggdG8gc2V0IHRoZSBSZWN0YW5nbGUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IHRvIHNldCB0aGUgUmVjdGFuZ2xlIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBSZWN0YW5nbGUgaXMgZW1wdHkuIEEgUmVjdGFuZ2xlIGlzIGVtcHR5IGlmIGl0cyB3aWR0aCBvciBoZWlnaHQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjaXNFbXB0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBSZWN0YW5nbGUgaXMgZW1wdHkuIEEgUmVjdGFuZ2xlIG9iamVjdCBpcyBlbXB0eSBpZiBpdHMgd2lkdGggb3IgaGVpZ2h0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLlxyXG4gICAgICovXHJcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0b3Agb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0TGluZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRvcCBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGluZUE6IGZ1bmN0aW9uIChsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHsgbGluZSA9IG5ldyBMaW5lKCk7IH1cclxuXHJcbiAgICAgICAgbGluZS5zZXRUbyh0aGlzLngsIHRoaXMueSwgdGhpcy5yaWdodCwgdGhpcy55KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2dldExpbmVCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uTGluZX0gTyAtIFtsaW5lLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBbbGluZV0gLSBBIExpbmUgb2JqZWN0IHRvIHNldCB0aGUgcmVzdWx0cyBpbi4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgTGluZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gQSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSByaWdodCBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGluZUI6IGZ1bmN0aW9uIChsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHsgbGluZSA9IG5ldyBMaW5lKCk7IH1cclxuXHJcbiAgICAgICAgbGluZS5zZXRUbyh0aGlzLnJpZ2h0LCB0aGlzLnksIHRoaXMucmlnaHQsIHRoaXMuYm90dG9tKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNnZXRMaW5lQ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gW2xpbmVdIC0gQSBMaW5lIG9iamVjdCB0byBzZXQgdGhlIHJlc3VsdHMgaW4uIElmIGB1bmRlZmluZWRgIGEgbmV3IExpbmUgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkxpbmV9IEEgTGluZSBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYm90dG9tIG9mIHRoaXMgUmVjdGFuZ2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRMaW5lQzogZnVuY3Rpb24gKGxpbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGxpbmUgPT09IHVuZGVmaW5lZCkgeyBsaW5lID0gbmV3IExpbmUoKTsgfVxyXG5cclxuICAgICAgICBsaW5lLnNldFRvKHRoaXMucmlnaHQsIHRoaXMuYm90dG9tLCB0aGlzLngsIHRoaXMuYm90dG9tKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlZnQgb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0TGluZURcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlZnQgb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVEOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54LCB0aGlzLmJvdHRvbSwgdGhpcy54LCB0aGlzLnkpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGluZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgbGVmdCBwcm9wZXJ0eSBvZiBhIFJlY3RhbmdsZSBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgeSBhbmQgaGVpZ2h0IHByb3BlcnRpZXMuIEhvd2V2ZXIgaXQgZG9lcyBhZmZlY3QgdGhlIHdpZHRoIHByb3BlcnR5LCB3aGVyZWFzIGNoYW5naW5nIHRoZSB4IHZhbHVlIGRvZXMgbm90IGFmZmVjdCB0aGUgd2lkdGggcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IHRoaXMucmlnaHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3VtIG9mIHRoZSB4IGFuZCB3aWR0aCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQ2hhbmdpbmcgdGhlIHJpZ2h0IHByb3BlcnR5IG9mIGEgUmVjdGFuZ2xlIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB4LCB5IGFuZCBoZWlnaHQgcHJvcGVydGllcywgaG93ZXZlciBpdCBkb2VzIGFmZmVjdCB0aGUgd2lkdGggcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3JpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMueClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBvZiB0aGUgUmVjdGFuZ2xlLiBDaGFuZ2luZyB0aGUgdG9wIHByb3BlcnR5IG9mIGEgUmVjdGFuZ2xlIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB4IGFuZCB3aWR0aCBwcm9wZXJ0aWVzLlxyXG4gICAgICogSG93ZXZlciBpdCBkb2VzIGFmZmVjdCB0aGUgaGVpZ2h0IHByb3BlcnR5LCB3aGVyZWFzIGNoYW5naW5nIHRoZSB5IHZhbHVlIGRvZXMgbm90IGFmZmVjdCB0aGUgaGVpZ2h0IHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5ib3R0b20pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzdW0gb2YgdGhlIHkgYW5kIGhlaWdodCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQ2hhbmdpbmcgdGhlIGJvdHRvbSBwcm9wZXJ0eSBvZiBhIFJlY3RhbmdsZSBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgeCwgeSBhbmQgd2lkdGggcHJvcGVydGllcywgYnV0IGRvZXMgY2hhbmdlIHRoZSBoZWlnaHQgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2JvdHRvbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMueSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2NlbnRlclhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2VudGVyWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHZhbHVlIC0gKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNjZW50ZXJZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNlbnRlclk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArICh0aGlzLmhlaWdodCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy55ID0gdmFsdWUgLSAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Rectangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/SameDimensions.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/SameDimensions.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines if the two objects (either Rectangles or Rectangle-like) have the same width and height values under strict equality.\r\n *\r\n * @function Phaser.Geom.Rectangle.SameDimensions\r\n * @since 3.15.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The first Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} toCompare - The second Rectangle object.\r\n *\r\n * @return {boolean} `true` if the objects have equivalent values for the `width` and `height` properties, otherwise `false`.\r\n */\r\nvar SameDimensions = function (rect, toCompare)\r\n{\r\n    return (rect.width === toCompare.width && rect.height === toCompare.height);\r\n};\r\n\r\nmodule.exports = SameDimensions;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9TYW1lRGltZW5zaW9ucy5qcz80Y2U0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvU2FtZURpbWVuc2lvbnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSB0d28gb2JqZWN0cyAoZWl0aGVyIFJlY3RhbmdsZXMgb3IgUmVjdGFuZ2xlLWxpa2UpIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdW5kZXIgc3RyaWN0IGVxdWFsaXR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLlNhbWVEaW1lbnNpb25zXHJcbiAqIEBzaW5jZSAzLjE1LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgZmlyc3QgUmVjdGFuZ2xlIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRvQ29tcGFyZSAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3RzIGhhdmUgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBTYW1lRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChyZWN0LCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAocmVjdC53aWR0aCA9PT0gdG9Db21wYXJlLndpZHRoICYmIHJlY3QuaGVpZ2h0ID09PSB0b0NvbXBhcmUuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2FtZURpbWVuc2lvbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/SameDimensions.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Scale.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Scale.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Scales the width and height of this Rectangle by the given amounts.\r\n\r\n/**\r\n * Scales the width and height of this Rectangle by the given amounts.\r\n *\r\n * @function Phaser.Geom.Rectangle.Scale\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The `Rectangle` object that will be scaled by the specified amount(s).\r\n * @param {number} x - The factor by which to scale the rectangle horizontally.\r\n * @param {number} y - The amount by which to scale the rectangle vertically. If this is not specified, the rectangle will be scaled by the factor `x` in both directions.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The rectangle object with updated `width` and `height` properties as calculated from the scaling factor(s).\r\n */\r\nvar Scale = function (rect, x, y)\r\n{\r\n    if (y === undefined) { y = x; }\r\n\r\n    rect.width *= x;\r\n    rect.height *= y;\r\n\r\n    return rect;\r\n};\r\n\r\nmodule.exports = Scale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9TY2FsZS5qcz8wZDdhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvU2NhbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vIFNjYWxlcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGlzIFJlY3RhbmdsZSBieSB0aGUgZ2l2ZW4gYW1vdW50cy5cclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhpcyBSZWN0YW5nbGUgYnkgdGhlIGdpdmVuIGFtb3VudHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuU2NhbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBgUmVjdGFuZ2xlYCBvYmplY3QgdGhhdCB3aWxsIGJlIHNjYWxlZCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudChzKS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIHRoZSByZWN0YW5nbGUgaG9yaXpvbnRhbGx5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBhbW91bnQgYnkgd2hpY2ggdG8gc2NhbGUgdGhlIHJlY3RhbmdsZSB2ZXJ0aWNhbGx5LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBzY2FsZWQgYnkgdGhlIGZhY3RvciBgeGAgaW4gYm90aCBkaXJlY3Rpb25zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgb2JqZWN0IHdpdGggdXBkYXRlZCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgc2NhbGluZyBmYWN0b3IocykuXHJcbiAqL1xyXG52YXIgU2NhbGUgPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgIHJlY3Qud2lkdGggKj0geDtcclxuICAgIHJlY3QuaGVpZ2h0ICo9IHk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Scale.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/Union.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/Union.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle or repositions and/or resizes an existing Rectangle so that it encompasses the two given Rectangles, i.e. calculates their union.\r\n *\r\n * @function Phaser.Geom.Rectangle.Union\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to use.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to use.\r\n * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the union in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified `out` Rectangle, or a new Rectangle if none was provided.\r\n */\r\nvar Union = function (rectA, rectB, out)\r\n{\r\n    if (out === undefined) { out = new Rectangle(); }\r\n\r\n    //  Cache vars so we can use one of the input rects as the output rect\r\n    var x = Math.min(rectA.x, rectB.x);\r\n    var y = Math.min(rectA.y, rectB.y);\r\n    var w = Math.max(rectA.right, rectB.right) - x;\r\n    var h = Math.max(rectA.bottom, rectB.bottom) - y;\r\n\r\n    return out.setTo(x, y, w, h);\r\n};\r\n\r\nmodule.exports = Union;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Vbmlvbi5qcz82NzY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1VuaW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlY3RhbmdsZSBvciByZXBvc2l0aW9ucyBhbmQvb3IgcmVzaXplcyBhbiBleGlzdGluZyBSZWN0YW5nbGUgc28gdGhhdCBpdCBlbmNvbXBhc3NlcyB0aGUgdHdvIGdpdmVuIFJlY3RhbmdsZXMsIGkuZS4gY2FsY3VsYXRlcyB0aGVpciB1bmlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5VbmlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byB1c2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIHRvIHVzZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFtvdXRdIC0gVGhlIFJlY3RhbmdsZSB0byBzdG9yZSB0aGUgdW5pb24gaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIGBvdXRgIFJlY3RhbmdsZSwgb3IgYSBuZXcgUmVjdGFuZ2xlIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIFVuaW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgLy8gIENhY2hlIHZhcnMgc28gd2UgY2FuIHVzZSBvbmUgb2YgdGhlIGlucHV0IHJlY3RzIGFzIHRoZSBvdXRwdXQgcmVjdFxyXG4gICAgdmFyIHggPSBNYXRoLm1pbihyZWN0QS54LCByZWN0Qi54KTtcclxuICAgIHZhciB5ID0gTWF0aC5taW4ocmVjdEEueSwgcmVjdEIueSk7XHJcbiAgICB2YXIgdyA9IE1hdGgubWF4KHJlY3RBLnJpZ2h0LCByZWN0Qi5yaWdodCkgLSB4O1xyXG4gICAgdmFyIGggPSBNYXRoLm1heChyZWN0QS5ib3R0b20sIHJlY3RCLmJvdHRvbSkgLSB5O1xyXG5cclxuICAgIHJldHVybiBvdXQuc2V0VG8oeCwgeSwgdywgaCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFVuaW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Union.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/rectangle/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/rectangle/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\nRectangle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/rectangle/Area.js\");\r\nRectangle.Ceil = __webpack_require__(/*! ./Ceil */ \"./node_modules/phaser/src/geom/rectangle/Ceil.js\");\r\nRectangle.CeilAll = __webpack_require__(/*! ./CeilAll */ \"./node_modules/phaser/src/geom/rectangle/CeilAll.js\");\r\nRectangle.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\nRectangle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/rectangle/Clone.js\");\r\nRectangle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nRectangle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/rectangle/ContainsPoint.js\");\r\nRectangle.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/rectangle/ContainsRect.js\");\r\nRectangle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/rectangle/CopyFrom.js\");\r\nRectangle.Decompose = __webpack_require__(/*! ./Decompose */ \"./node_modules/phaser/src/geom/rectangle/Decompose.js\");\r\nRectangle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/rectangle/Equals.js\");\r\nRectangle.FitInside = __webpack_require__(/*! ./FitInside */ \"./node_modules/phaser/src/geom/rectangle/FitInside.js\");\r\nRectangle.FitOutside = __webpack_require__(/*! ./FitOutside */ \"./node_modules/phaser/src/geom/rectangle/FitOutside.js\");\r\nRectangle.Floor = __webpack_require__(/*! ./Floor */ \"./node_modules/phaser/src/geom/rectangle/Floor.js\");\r\nRectangle.FloorAll = __webpack_require__(/*! ./FloorAll */ \"./node_modules/phaser/src/geom/rectangle/FloorAll.js\");\r\nRectangle.FromPoints = __webpack_require__(/*! ./FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nRectangle.GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\nRectangle.GetCenter = __webpack_require__(/*! ./GetCenter */ \"./node_modules/phaser/src/geom/rectangle/GetCenter.js\");\r\nRectangle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nRectangle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/rectangle/GetPoints.js\");\r\nRectangle.GetSize = __webpack_require__(/*! ./GetSize */ \"./node_modules/phaser/src/geom/rectangle/GetSize.js\");\r\nRectangle.Inflate = __webpack_require__(/*! ./Inflate */ \"./node_modules/phaser/src/geom/rectangle/Inflate.js\");\r\nRectangle.Intersection = __webpack_require__(/*! ./Intersection */ \"./node_modules/phaser/src/geom/rectangle/Intersection.js\");\r\nRectangle.MarchingAnts = __webpack_require__(/*! ./MarchingAnts */ \"./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\");\r\nRectangle.MergePoints = __webpack_require__(/*! ./MergePoints */ \"./node_modules/phaser/src/geom/rectangle/MergePoints.js\");\r\nRectangle.MergeRect = __webpack_require__(/*! ./MergeRect */ \"./node_modules/phaser/src/geom/rectangle/MergeRect.js\");\r\nRectangle.MergeXY = __webpack_require__(/*! ./MergeXY */ \"./node_modules/phaser/src/geom/rectangle/MergeXY.js\");\r\nRectangle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/rectangle/Offset.js\");\r\nRectangle.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/rectangle/OffsetPoint.js\");\r\nRectangle.Overlaps = __webpack_require__(/*! ./Overlaps */ \"./node_modules/phaser/src/geom/rectangle/Overlaps.js\");\r\nRectangle.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nRectangle.PerimeterPoint = __webpack_require__(/*! ./PerimeterPoint */ \"./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js\");\r\nRectangle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\nRectangle.RandomOutside = __webpack_require__(/*! ./RandomOutside */ \"./node_modules/phaser/src/geom/rectangle/RandomOutside.js\");\r\nRectangle.SameDimensions = __webpack_require__(/*! ./SameDimensions */ \"./node_modules/phaser/src/geom/rectangle/SameDimensions.js\");\r\nRectangle.Scale = __webpack_require__(/*! ./Scale */ \"./node_modules/phaser/src/geom/rectangle/Scale.js\");\r\nRectangle.Union = __webpack_require__(/*! ./Union */ \"./node_modules/phaser/src/geom/rectangle/Union.js\");\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9pbmRleC5qcz82NzlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckMsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVE7QUFDakMsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVE7QUFDakMsb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsa0JBQWtCLG1CQUFPLENBQUMsa0VBQVM7QUFDbkMscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsMEJBQTBCLG1CQUFPLENBQUMsa0ZBQWlCO0FBQ25ELHlCQUF5QixtQkFBTyxDQUFDLGdGQUFnQjtBQUNqRCxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBVTtBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBYztBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6Qyx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBYztBQUM3QywyQkFBMkIsbUJBQU8sQ0FBQyxvRkFBa0I7QUFDckQsc0JBQXNCLG1CQUFPLENBQUMsMEVBQWE7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsc0JBQXNCLG1CQUFPLENBQUMsMEVBQWE7QUFDM0Msb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMseUJBQXlCLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQ2pELHlCQUF5QixtQkFBTyxDQUFDLGdGQUFnQjtBQUNqRCx3QkFBd0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyxvQkFBb0IsbUJBQU8sQ0FBQyxzRUFBVztBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBVTtBQUNyQyx3QkFBd0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQywyQkFBMkIsbUJBQU8sQ0FBQyxvRkFBa0I7QUFDckQsbUJBQW1CLG1CQUFPLENBQUMsb0VBQVU7QUFDckMsMEJBQTBCLG1CQUFPLENBQUMsa0ZBQWlCO0FBQ25ELDJCQUEyQixtQkFBTyxDQUFDLG9GQUFrQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNuQyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUzs7QUFFbkMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyk7XHJcblxyXG5SZWN0YW5nbGUuQXJlYSA9IHJlcXVpcmUoJy4vQXJlYScpO1xyXG5SZWN0YW5nbGUuQ2VpbCA9IHJlcXVpcmUoJy4vQ2VpbCcpO1xyXG5SZWN0YW5nbGUuQ2VpbEFsbCA9IHJlcXVpcmUoJy4vQ2VpbEFsbCcpO1xyXG5SZWN0YW5nbGUuQ2VudGVyT24gPSByZXF1aXJlKCcuL0NlbnRlck9uJyk7XHJcblJlY3RhbmdsZS5DbG9uZSA9IHJlcXVpcmUoJy4vQ2xvbmUnKTtcclxuUmVjdGFuZ2xlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5SZWN0YW5nbGUuQ29udGFpbnNQb2ludCA9IHJlcXVpcmUoJy4vQ29udGFpbnNQb2ludCcpO1xyXG5SZWN0YW5nbGUuQ29udGFpbnNSZWN0ID0gcmVxdWlyZSgnLi9Db250YWluc1JlY3QnKTtcclxuUmVjdGFuZ2xlLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5SZWN0YW5nbGUuRGVjb21wb3NlID0gcmVxdWlyZSgnLi9EZWNvbXBvc2UnKTtcclxuUmVjdGFuZ2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblJlY3RhbmdsZS5GaXRJbnNpZGUgPSByZXF1aXJlKCcuL0ZpdEluc2lkZScpO1xyXG5SZWN0YW5nbGUuRml0T3V0c2lkZSA9IHJlcXVpcmUoJy4vRml0T3V0c2lkZScpO1xyXG5SZWN0YW5nbGUuRmxvb3IgPSByZXF1aXJlKCcuL0Zsb29yJyk7XHJcblJlY3RhbmdsZS5GbG9vckFsbCA9IHJlcXVpcmUoJy4vRmxvb3JBbGwnKTtcclxuUmVjdGFuZ2xlLkZyb21Qb2ludHMgPSByZXF1aXJlKCcuL0Zyb21Qb2ludHMnKTtcclxuUmVjdGFuZ2xlLkdldEFzcGVjdFJhdGlvID0gcmVxdWlyZSgnLi9HZXRBc3BlY3RSYXRpbycpO1xyXG5SZWN0YW5nbGUuR2V0Q2VudGVyID0gcmVxdWlyZSgnLi9HZXRDZW50ZXInKTtcclxuUmVjdGFuZ2xlLkdldFBvaW50ID0gcmVxdWlyZSgnLi9HZXRQb2ludCcpO1xyXG5SZWN0YW5nbGUuR2V0UG9pbnRzID0gcmVxdWlyZSgnLi9HZXRQb2ludHMnKTtcclxuUmVjdGFuZ2xlLkdldFNpemUgPSByZXF1aXJlKCcuL0dldFNpemUnKTtcclxuUmVjdGFuZ2xlLkluZmxhdGUgPSByZXF1aXJlKCcuL0luZmxhdGUnKTtcclxuUmVjdGFuZ2xlLkludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4vSW50ZXJzZWN0aW9uJyk7XHJcblJlY3RhbmdsZS5NYXJjaGluZ0FudHMgPSByZXF1aXJlKCcuL01hcmNoaW5nQW50cycpO1xyXG5SZWN0YW5nbGUuTWVyZ2VQb2ludHMgPSByZXF1aXJlKCcuL01lcmdlUG9pbnRzJyk7XHJcblJlY3RhbmdsZS5NZXJnZVJlY3QgPSByZXF1aXJlKCcuL01lcmdlUmVjdCcpO1xyXG5SZWN0YW5nbGUuTWVyZ2VYWSA9IHJlcXVpcmUoJy4vTWVyZ2VYWScpO1xyXG5SZWN0YW5nbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuUmVjdGFuZ2xlLk9mZnNldFBvaW50ID0gcmVxdWlyZSgnLi9PZmZzZXRQb2ludCcpO1xyXG5SZWN0YW5nbGUuT3ZlcmxhcHMgPSByZXF1aXJlKCcuL092ZXJsYXBzJyk7XHJcblJlY3RhbmdsZS5QZXJpbWV0ZXIgPSByZXF1aXJlKCcuL1BlcmltZXRlcicpO1xyXG5SZWN0YW5nbGUuUGVyaW1ldGVyUG9pbnQgPSByZXF1aXJlKCcuL1BlcmltZXRlclBvaW50Jyk7XHJcblJlY3RhbmdsZS5SYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5SZWN0YW5nbGUuUmFuZG9tT3V0c2lkZSA9IHJlcXVpcmUoJy4vUmFuZG9tT3V0c2lkZScpO1xyXG5SZWN0YW5nbGUuU2FtZURpbWVuc2lvbnMgPSByZXF1aXJlKCcuL1NhbWVEaW1lbnNpb25zJyk7XHJcblJlY3RhbmdsZS5TY2FsZSA9IHJlcXVpcmUoJy4vU2NhbGUnKTtcclxuUmVjdGFuZ2xlLlVuaW9uID0gcmVxdWlyZSgnLi9VbmlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Area.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Area.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// The 2D area of a triangle. The area value is always non-negative.\r\n\r\n/**\r\n * Returns the area of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use.\r\n *\r\n * @return {number} The area of the Triangle, always non-negative.\r\n */\r\nvar Area = function (triangle)\r\n{\r\n    var x1 = triangle.x1;\r\n    var y1 = triangle.y1;\r\n\r\n    var x2 = triangle.x2;\r\n    var y2 = triangle.y2;\r\n\r\n    var x3 = triangle.x3;\r\n    var y3 = triangle.y3;\r\n\r\n    return Math.abs(((x3 - x1) * (y2 - y1) - (x2 - x1) * (y3 - y1)) / 2);\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0FyZWEuanM/MGRlYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQXJlYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gVGhlIDJEIGFyZWEgb2YgYSB0cmlhbmdsZS4gVGhlIGFyZWEgdmFsdWUgaXMgYWx3YXlzIG5vbi1uZWdhdGl2ZS5cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBhcmVhIG9mIGEgVHJpYW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5BcmVhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byB1c2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFyZWEgb2YgdGhlIFRyaWFuZ2xlLCBhbHdheXMgbm9uLW5lZ2F0aXZlLlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAodHJpYW5nbGUpXHJcbntcclxuICAgIHZhciB4MSA9IHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHkxID0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gdHJpYW5nbGUueDI7XHJcbiAgICB2YXIgeTIgPSB0cmlhbmdsZS55MjtcclxuXHJcbiAgICB2YXIgeDMgPSB0cmlhbmdsZS54MztcclxuICAgIHZhciB5MyA9IHRyaWFuZ2xlLnkzO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmFicygoKHgzIC0geDEpICogKHkyIC0geTEpIC0gKHgyIC0geDEpICogKHkzIC0geTEpKSAvIDIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcmVhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Area.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/BuildEquilateral.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/BuildEquilateral.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * Builds an equilateral triangle. In the equilateral triangle, all the sides are the same length (congruent) and all the angles are the same size (congruent).\r\n * The x/y specifies the top-middle of the triangle (x1/y1) and length is the length of each side.\r\n *\r\n * @function Phaser.Geom.Triangle.BuildEquilateral\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - x coordinate of the top point of the triangle.\r\n * @param {number} y - y coordinate of the top point of the triangle.\r\n * @param {number} length - Length of each side of the triangle.\r\n *\r\n * @return {Phaser.Geom.Triangle} The Triangle object of the given size.\r\n */\r\nvar BuildEquilateral = function (x, y, length)\r\n{\r\n    var height = length * (Math.sqrt(3) / 2);\r\n\r\n    var x1 = x;\r\n    var y1 = y;\r\n\r\n    var x2 = x + (length / 2);\r\n    var y2 = y + height;\r\n\r\n    var x3 = x - (length / 2);\r\n    var y3 = y + height;\r\n\r\n    return new Triangle(x1, y1, x2, y2, x3, y3);\r\n};\r\n\r\nmodule.exports = BuildEquilateral;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkRXF1aWxhdGVyYWwuanM/OTQwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQnVpbGRFcXVpbGF0ZXJhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi9UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZS4gSW4gdGhlIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLCBhbGwgdGhlIHNpZGVzIGFyZSB0aGUgc2FtZSBsZW5ndGggKGNvbmdydWVudCkgYW5kIGFsbCB0aGUgYW5nbGVzIGFyZSB0aGUgc2FtZSBzaXplIChjb25ncnVlbnQpLlxyXG4gKiBUaGUgeC95IHNwZWNpZmllcyB0aGUgdG9wLW1pZGRsZSBvZiB0aGUgdHJpYW5nbGUgKHgxL3kxKSBhbmQgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgZWFjaCBzaWRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQnVpbGRFcXVpbGF0ZXJhbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSB0b3AgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIC0gTGVuZ3RoIG9mIGVhY2ggc2lkZSBvZiB0aGUgdHJpYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgVHJpYW5nbGUgb2JqZWN0IG9mIHRoZSBnaXZlbiBzaXplLlxyXG4gKi9cclxudmFyIEJ1aWxkRXF1aWxhdGVyYWwgPSBmdW5jdGlvbiAoeCwgeSwgbGVuZ3RoKVxyXG57XHJcbiAgICB2YXIgaGVpZ2h0ID0gbGVuZ3RoICogKE1hdGguc3FydCgzKSAvIDIpO1xyXG5cclxuICAgIHZhciB4MSA9IHg7XHJcbiAgICB2YXIgeTEgPSB5O1xyXG5cclxuICAgIHZhciB4MiA9IHggKyAobGVuZ3RoIC8gMik7XHJcbiAgICB2YXIgeTIgPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgIHZhciB4MyA9IHggLSAobGVuZ3RoIC8gMik7XHJcbiAgICB2YXIgeTMgPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkRXF1aWxhdGVyYWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildEquilateral.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar EarCut = __webpack_require__(/*! ../polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Triangle.BuildFromPolygon\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle[]} O - [out,$return]\r\n *\r\n * @param {array} data - A flat array of vertex coordinates like [x0,y0, x1,y1, x2,y2, ...]\r\n * @param {array} [holes=null] - An array of hole indices if any (e.g. [5, 8] for a 12-vertex input would mean one hole with vertices 5–7 and another with 8–11).\r\n * @param {number} [scaleX=1] - [description]\r\n * @param {number} [scaleY=1] - [description]\r\n * @param {(array|Phaser.Geom.Triangle[])} [out] - [description]\r\n *\r\n * @return {(array|Phaser.Geom.Triangle[])} [description]\r\n */\r\nvar BuildFromPolygon = function (data, holes, scaleX, scaleY, out)\r\n{\r\n    if (holes === undefined) { holes = null; }\r\n    if (scaleX === undefined) { scaleX = 1; }\r\n    if (scaleY === undefined) { scaleY = 1; }\r\n    if (out === undefined) { out = []; }\r\n\r\n    var tris = EarCut(data, holes);\r\n\r\n    var a;\r\n    var b;\r\n    var c;\r\n\r\n    var x1;\r\n    var y1;\r\n\r\n    var x2;\r\n    var y2;\r\n\r\n    var x3;\r\n    var y3;\r\n\r\n    for (var i = 0; i < tris.length; i += 3)\r\n    {\r\n        a = tris[i];\r\n        b = tris[i + 1];\r\n        c = tris[i + 2];\r\n\r\n        x1 = data[a * 2] * scaleX;\r\n        y1 = data[(a * 2) + 1] * scaleY;\r\n\r\n        x2 = data[b * 2] * scaleX;\r\n        y2 = data[(b * 2) + 1] * scaleY;\r\n\r\n        x3 = data[c * 2] * scaleX;\r\n        y3 = data[(c * 2) + 1] * scaleY;\r\n\r\n        out.push(new Triangle(x1, y1, x2, y2, x3, y3));\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = BuildFromPolygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkRnJvbVBvbHlnb24uanM/ZGFhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDJFQUFtQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsdUVBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWM7QUFDNUMsK0JBQStCLFlBQVk7QUFDM0MsK0JBQStCLFlBQVk7QUFDM0MsNEJBQTRCLFVBQVU7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQnVpbGRGcm9tUG9seWdvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVhckN1dCA9IHJlcXVpcmUoJy4uL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBUcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5CdWlsZEZyb21Qb2x5Z29uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGVbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHthcnJheX0gZGF0YSAtIEEgZmxhdCBhcnJheSBvZiB2ZXJ0ZXggY29vcmRpbmF0ZXMgbGlrZSBbeDAseTAsIHgxLHkxLCB4Mix5MiwgLi4uXVxyXG4gKiBAcGFyYW0ge2FycmF5fSBbaG9sZXM9bnVsbF0gLSBBbiBhcnJheSBvZiBob2xlIGluZGljZXMgaWYgYW55IChlLmcuIFs1LCA4XSBmb3IgYSAxMi12ZXJ0ZXggaW5wdXQgd291bGQgbWVhbiBvbmUgaG9sZSB3aXRoIHZlcnRpY2VzIDXigJM3IGFuZCBhbm90aGVyIHdpdGggOOKAkzExKS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZVg9MV0gLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZPTFdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5UcmlhbmdsZVtdKX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5UcmlhbmdsZVtdKX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEJ1aWxkRnJvbVBvbHlnb24gPSBmdW5jdGlvbiAoZGF0YSwgaG9sZXMsIHNjYWxlWCwgc2NhbGVZLCBvdXQpXHJcbntcclxuICAgIGlmIChob2xlcyA9PT0gdW5kZWZpbmVkKSB7IGhvbGVzID0gbnVsbDsgfVxyXG4gICAgaWYgKHNjYWxlWCA9PT0gdW5kZWZpbmVkKSB7IHNjYWxlWCA9IDE7IH1cclxuICAgIGlmIChzY2FsZVkgPT09IHVuZGVmaW5lZCkgeyBzY2FsZVkgPSAxOyB9XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICB2YXIgdHJpcyA9IEVhckN1dChkYXRhLCBob2xlcyk7XHJcblxyXG4gICAgdmFyIGE7XHJcbiAgICB2YXIgYjtcclxuICAgIHZhciBjO1xyXG5cclxuICAgIHZhciB4MTtcclxuICAgIHZhciB5MTtcclxuXHJcbiAgICB2YXIgeDI7XHJcbiAgICB2YXIgeTI7XHJcblxyXG4gICAgdmFyIHgzO1xyXG4gICAgdmFyIHkzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpcy5sZW5ndGg7IGkgKz0gMylcclxuICAgIHtcclxuICAgICAgICBhID0gdHJpc1tpXTtcclxuICAgICAgICBiID0gdHJpc1tpICsgMV07XHJcbiAgICAgICAgYyA9IHRyaXNbaSArIDJdO1xyXG5cclxuICAgICAgICB4MSA9IGRhdGFbYSAqIDJdICogc2NhbGVYO1xyXG4gICAgICAgIHkxID0gZGF0YVsoYSAqIDIpICsgMV0gKiBzY2FsZVk7XHJcblxyXG4gICAgICAgIHgyID0gZGF0YVtiICogMl0gKiBzY2FsZVg7XHJcbiAgICAgICAgeTIgPSBkYXRhWyhiICogMikgKyAxXSAqIHNjYWxlWTtcclxuXHJcbiAgICAgICAgeDMgPSBkYXRhW2MgKiAyXSAqIHNjYWxlWDtcclxuICAgICAgICB5MyA9IGRhdGFbKGMgKiAyKSArIDFdICogc2NhbGVZO1xyXG5cclxuICAgICAgICBvdXQucHVzaChuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkRnJvbVBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/BuildRight.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/BuildRight.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n//  Builds a right triangle, with one 90 degree angle and two acute angles\r\n//  The x/y is the coordinate of the 90 degree angle (and will map to x1/y1 in the resulting Triangle)\r\n//  w/h can be positive or negative and represent the length of each side\r\n\r\n/**\r\n * Builds a right triangle, i.e. one which has a 90-degree angle and two acute angles.\r\n *\r\n * @function Phaser.Geom.Triangle.BuildRight\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The X coordinate of the right angle, which will also be the first X coordinate of the constructed Triangle.\r\n * @param {number} y - The Y coordinate of the right angle, which will also be the first Y coordinate of the constructed Triangle.\r\n * @param {number} width - The length of the side which is to the left or to the right of the right angle.\r\n * @param {number} height - The length of the side which is above or below the right angle.\r\n *\r\n * @return {Phaser.Geom.Triangle} The constructed right Triangle.\r\n */\r\nvar BuildRight = function (x, y, width, height)\r\n{\r\n    if (height === undefined) { height = width; }\r\n\r\n    //  90 degree angle\r\n    var x1 = x;\r\n    var y1 = y;\r\n\r\n    var x2 = x;\r\n    var y2 = y - height;\r\n\r\n    var x3 = x + width;\r\n    var y3 = y;\r\n\r\n    return new Triangle(x1, y1, x2, y2, x3, y3);\r\n};\r\n\r\nmodule.exports = BuildRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkUmlnaHQuanM/ZDBkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdCQUFnQjs7QUFFL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9CdWlsZFJpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVHJpYW5nbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlJyk7XHJcblxyXG4vLyAgQnVpbGRzIGEgcmlnaHQgdHJpYW5nbGUsIHdpdGggb25lIDkwIGRlZ3JlZSBhbmdsZSBhbmQgdHdvIGFjdXRlIGFuZ2xlc1xyXG4vLyAgVGhlIHgveSBpcyB0aGUgY29vcmRpbmF0ZSBvZiB0aGUgOTAgZGVncmVlIGFuZ2xlIChhbmQgd2lsbCBtYXAgdG8geDEveTEgaW4gdGhlIHJlc3VsdGluZyBUcmlhbmdsZSlcclxuLy8gIHcvaCBjYW4gYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUgYW5kIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGVhY2ggc2lkZVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyBhIHJpZ2h0IHRyaWFuZ2xlLCBpLmUuIG9uZSB3aGljaCBoYXMgYSA5MC1kZWdyZWUgYW5nbGUgYW5kIHR3byBhY3V0ZSBhbmdsZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5CdWlsZFJpZ2h0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGFuZ2xlLCB3aGljaCB3aWxsIGFsc28gYmUgdGhlIGZpcnN0IFggY29vcmRpbmF0ZSBvZiB0aGUgY29uc3RydWN0ZWQgVHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYW5nbGUsIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgZmlyc3QgWSBjb29yZGluYXRlIG9mIHRoZSBjb25zdHJ1Y3RlZCBUcmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGxlbmd0aCBvZiB0aGUgc2lkZSB3aGljaCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0IGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGxlbmd0aCBvZiB0aGUgc2lkZSB3aGljaCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgcmlnaHQgYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgY29uc3RydWN0ZWQgcmlnaHQgVHJpYW5nbGUuXHJcbiAqL1xyXG52YXIgQnVpbGRSaWdodCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG57XHJcbiAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAvLyAgOTAgZGVncmVlIGFuZ2xlXHJcbiAgICB2YXIgeDEgPSB4O1xyXG4gICAgdmFyIHkxID0geTtcclxuXHJcbiAgICB2YXIgeDIgPSB4O1xyXG4gICAgdmFyIHkyID0geSAtIGhlaWdodDtcclxuXHJcbiAgICB2YXIgeDMgPSB4ICsgd2lkdGg7XHJcbiAgICB2YXIgeTMgPSB5O1xyXG5cclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/CenterOn.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/CenterOn.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Centroid = __webpack_require__(/*! ./Centroid */ \"./node_modules/phaser/src/geom/triangle/Centroid.js\");\r\nvar Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/triangle/Offset.js\");\r\n\r\n/**\r\n * @callback CenterFunction\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to return the center coordinates of.\r\n *\r\n * @return {Phaser.Math.Vector2} The center point of the Triangle according to the function.\r\n */\r\n\r\n/**\r\n * Positions the Triangle so that it is centered on the given coordinates.\r\n *\r\n * @function Phaser.Geom.Triangle.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle to be positioned.\r\n * @param {number} x - The horizontal coordinate to center on.\r\n * @param {number} y - The vertical coordinate to center on.\r\n * @param {CenterFunction} [centerFunc] - The function used to center the triangle. Defaults to Centroid centering.\r\n *\r\n * @return {Phaser.Geom.Triangle} The Triangle that was centered.\r\n */\r\nvar CenterOn = function (triangle, x, y, centerFunc)\r\n{\r\n    if (centerFunc === undefined) { centerFunc = Centroid; }\r\n\r\n    //  Get the center of the triangle\r\n    var center = centerFunc(triangle);\r\n\r\n    //  Difference\r\n    var diffX = x - center.x;\r\n    var diffY = y - center.y;\r\n\r\n    return Offset(triangle, diffX, diffY);\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRlck9uLmpzPzIwYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxhQUFhLG1CQUFPLENBQUMsbUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1QkFBdUI7O0FBRTFEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2VudHJvaWQgPSByZXF1aXJlKCcuL0NlbnRyb2lkJyk7XHJcbnZhciBPZmZzZXQgPSByZXF1aXJlKCcuL09mZnNldCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBDZW50ZXJGdW5jdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byByZXR1cm4gdGhlIGNlbnRlciBjb29yZGluYXRlcyBvZi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNlbnRlciBwb2ludCBvZiB0aGUgVHJpYW5nbGUgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbi5cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBUcmlhbmdsZSBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNlbnRlck9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbdHJpYW5nbGUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAqIEBwYXJhbSB7Q2VudGVyRnVuY3Rpb259IFtjZW50ZXJGdW5jXSAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGNlbnRlciB0aGUgdHJpYW5nbGUuIERlZmF1bHRzIHRvIENlbnRyb2lkIGNlbnRlcmluZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBUcmlhbmdsZSB0aGF0IHdhcyBjZW50ZXJlZC5cclxuICovXHJcbnZhciBDZW50ZXJPbiA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgeCwgeSwgY2VudGVyRnVuYylcclxue1xyXG4gICAgaWYgKGNlbnRlckZ1bmMgPT09IHVuZGVmaW5lZCkgeyBjZW50ZXJGdW5jID0gQ2VudHJvaWQ7IH1cclxuXHJcbiAgICAvLyAgR2V0IHRoZSBjZW50ZXIgb2YgdGhlIHRyaWFuZ2xlXHJcbiAgICB2YXIgY2VudGVyID0gY2VudGVyRnVuYyh0cmlhbmdsZSk7XHJcblxyXG4gICAgLy8gIERpZmZlcmVuY2VcclxuICAgIHZhciBkaWZmWCA9IHggLSBjZW50ZXIueDtcclxuICAgIHZhciBkaWZmWSA9IHkgLSBjZW50ZXIueTtcclxuXHJcbiAgICByZXR1cm4gT2Zmc2V0KHRyaWFuZ2xlLCBkaWZmWCwgZGlmZlkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZW50ZXJPbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CenterOn.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Centroid.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Centroid.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n//  The three medians (the lines drawn from the vertices to the bisectors of the opposite sides)\r\n//  meet in the centroid or center of mass (center of gravity).\r\n//  The centroid divides each median in a ratio of 2:1\r\n\r\n/**\r\n * Calculates the position of a Triangle's centroid, which is also its center of mass (center of gravity).\r\n *\r\n * The centroid is the point in a Triangle at which its three medians (the lines drawn from the vertices to the bisectors of the opposite sides) meet. It divides each one in a 2:1 ratio.\r\n *\r\n * @function Phaser.Geom.Triangle.Centroid\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the coordinates in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The `out` object with modified `x` and `y` properties, or a new Point if none was provided.\r\n */\r\nvar Centroid = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    out.x = (triangle.x1 + triangle.x2 + triangle.x3) / 3;\r\n    out.y = (triangle.y1 + triangle.y2 + triangle.y3) / 3;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Centroid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRyb2lkLmpzP2YzZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQ2VudHJvaWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vLyAgVGhlIHRocmVlIG1lZGlhbnMgKHRoZSBsaW5lcyBkcmF3biBmcm9tIHRoZSB2ZXJ0aWNlcyB0byB0aGUgYmlzZWN0b3JzIG9mIHRoZSBvcHBvc2l0ZSBzaWRlcylcclxuLy8gIG1lZXQgaW4gdGhlIGNlbnRyb2lkIG9yIGNlbnRlciBvZiBtYXNzIChjZW50ZXIgb2YgZ3Jhdml0eSkuXHJcbi8vICBUaGUgY2VudHJvaWQgZGl2aWRlcyBlYWNoIG1lZGlhbiBpbiBhIHJhdGlvIG9mIDI6MVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIGEgVHJpYW5nbGUncyBjZW50cm9pZCwgd2hpY2ggaXMgYWxzbyBpdHMgY2VudGVyIG9mIG1hc3MgKGNlbnRlciBvZiBncmF2aXR5KS5cclxuICpcclxuICogVGhlIGNlbnRyb2lkIGlzIHRoZSBwb2ludCBpbiBhIFRyaWFuZ2xlIGF0IHdoaWNoIGl0cyB0aHJlZSBtZWRpYW5zICh0aGUgbGluZXMgZHJhd24gZnJvbSB0aGUgdmVydGljZXMgdG8gdGhlIGJpc2VjdG9ycyBvZiB0aGUgb3Bwb3NpdGUgc2lkZXMpIG1lZXQuIEl0IGRpdmlkZXMgZWFjaCBvbmUgaW4gYSAyOjEgcmF0aW8uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5DZW50cm9pZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byB1c2UuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFRoZSBgb3V0YCBvYmplY3Qgd2l0aCBtb2RpZmllZCBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBDZW50cm9pZCA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9ICh0cmlhbmdsZS54MSArIHRyaWFuZ2xlLngyICsgdHJpYW5nbGUueDMpIC8gMztcclxuICAgIG91dC55ID0gKHRyaWFuZ2xlLnkxICsgdHJpYW5nbGUueTIgKyB0cmlhbmdsZS55MykgLyAzO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRyb2lkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Centroid.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/CircumCenter.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/CircumCenter.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n//  Adapted from http://bjornharrtell.github.io/jsts/doc/api/jsts_geom_Triangle.js.html\r\n\r\n/**\r\n * Computes the determinant of a 2x2 matrix. Uses standard double-precision arithmetic, so is susceptible to round-off error.\r\n *\r\n * @function det\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} m00 - The [0,0] entry of the matrix.\r\n * @param {number} m01 - The [0,1] entry of the matrix.\r\n * @param {number} m10 - The [1,0] entry of the matrix.\r\n * @param {number} m11 - The [1,1] entry of the matrix.\r\n *\r\n * @return {number} the determinant.\r\n */\r\nfunction det (m00, m01, m10, m11)\r\n{\r\n    return (m00 * m11) - (m01 * m10);\r\n}\r\n\r\n/**\r\n * Computes the circumcentre of a triangle. The circumcentre is the centre of\r\n * the circumcircle, the smallest circle which encloses the triangle. It is also\r\n * the common intersection point of the perpendicular bisectors of the sides of\r\n * the triangle, and is the only point which has equal distance to all three\r\n * vertices of the triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.CircumCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\nvar CircumCenter = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = new Vector2(); }\r\n\r\n    var cx = triangle.x3;\r\n    var cy = triangle.y3;\r\n\r\n    var ax = triangle.x1 - cx;\r\n    var ay = triangle.y1 - cy;\r\n\r\n    var bx = triangle.x2 - cx;\r\n    var by = triangle.y2 - cy;\r\n\r\n    var denom = 2 * det(ax, ay, bx, by);\r\n    var numx = det(ay, ax * ax + ay * ay, by, bx * bx + by * by);\r\n    var numy = det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);\r\n\r\n    out.x = cx - numx / denom;\r\n    out.y = cy + numy / denom;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = CircumCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNlbnRlci5qcz9iNDExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8vICBBZGFwdGVkIGZyb20gaHR0cDovL2Jqb3JuaGFycnRlbGwuZ2l0aHViLmlvL2pzdHMvZG9jL2FwaS9qc3RzX2dlb21fVHJpYW5nbGUuanMuaHRtbFxyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIDJ4MiBtYXRyaXguIFVzZXMgc3RhbmRhcmQgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljLCBzbyBpcyBzdXNjZXB0aWJsZSB0byByb3VuZC1vZmYgZXJyb3IuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBkZXRcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtMDAgLSBUaGUgWzAsMF0gZW50cnkgb2YgdGhlIG1hdHJpeC5cclxuICogQHBhcmFtIHtudW1iZXJ9IG0wMSAtIFRoZSBbMCwxXSBlbnRyeSBvZiB0aGUgbWF0cml4LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbTEwIC0gVGhlIFsxLDBdIGVudHJ5IG9mIHRoZSBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtMTEgLSBUaGUgWzEsMV0gZW50cnkgb2YgdGhlIG1hdHJpeC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgZGV0ZXJtaW5hbnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXQgKG0wMCwgbTAxLCBtMTAsIG0xMSlcclxue1xyXG4gICAgcmV0dXJuIChtMDAgKiBtMTEpIC0gKG0wMSAqIG0xMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY2lyY3VtY2VudHJlIG9mIGEgdHJpYW5nbGUuIFRoZSBjaXJjdW1jZW50cmUgaXMgdGhlIGNlbnRyZSBvZlxyXG4gKiB0aGUgY2lyY3VtY2lyY2xlLCB0aGUgc21hbGxlc3QgY2lyY2xlIHdoaWNoIGVuY2xvc2VzIHRoZSB0cmlhbmdsZS4gSXQgaXMgYWxzb1xyXG4gKiB0aGUgY29tbW9uIGludGVyc2VjdGlvbiBwb2ludCBvZiB0aGUgcGVycGVuZGljdWxhciBiaXNlY3RvcnMgb2YgdGhlIHNpZGVzIG9mXHJcbiAqIHRoZSB0cmlhbmdsZSwgYW5kIGlzIHRoZSBvbmx5IHBvaW50IHdoaWNoIGhhcyBlcXVhbCBkaXN0YW5jZSB0byBhbGwgdGhyZWVcclxuICogdmVydGljZXMgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ2lyY3VtQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBDaXJjdW1DZW50ZXIgPSBmdW5jdGlvbiAodHJpYW5nbGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICB2YXIgY3ggPSB0cmlhbmdsZS54MztcclxuICAgIHZhciBjeSA9IHRyaWFuZ2xlLnkzO1xyXG5cclxuICAgIHZhciBheCA9IHRyaWFuZ2xlLngxIC0gY3g7XHJcbiAgICB2YXIgYXkgPSB0cmlhbmdsZS55MSAtIGN5O1xyXG5cclxuICAgIHZhciBieCA9IHRyaWFuZ2xlLngyIC0gY3g7XHJcbiAgICB2YXIgYnkgPSB0cmlhbmdsZS55MiAtIGN5O1xyXG5cclxuICAgIHZhciBkZW5vbSA9IDIgKiBkZXQoYXgsIGF5LCBieCwgYnkpO1xyXG4gICAgdmFyIG51bXggPSBkZXQoYXksIGF4ICogYXggKyBheSAqIGF5LCBieSwgYnggKiBieCArIGJ5ICogYnkpO1xyXG4gICAgdmFyIG51bXkgPSBkZXQoYXgsIGF4ICogYXggKyBheSAqIGF5LCBieCwgYnggKiBieCArIGJ5ICogYnkpO1xyXG5cclxuICAgIG91dC54ID0gY3ggLSBudW14IC8gZGVub207XHJcbiAgICBvdXQueSA9IGN5ICsgbnVteSAvIGRlbm9tO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CircumCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/CircumCircle.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/CircumCircle.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ../circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\n//  Adapted from https://gist.github.com/mutoo/5617691\r\n\r\n/**\r\n * Finds the circumscribed circle (circumcircle) of a Triangle object. The circumcircle is the circle which touches all of the triangle's vertices.\r\n *\r\n * @function Phaser.Geom.Triangle.CircumCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use as input.\r\n * @param {Phaser.Geom.Circle} [out] - An optional Circle to store the result in.\r\n *\r\n * @return {Phaser.Geom.Circle} The updated `out` Circle, or a new Circle if none was provided.\r\n */\r\nvar CircumCircle = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = new Circle(); }\r\n\r\n    //  A\r\n    var x1 = triangle.x1;\r\n    var y1 = triangle.y1;\r\n\r\n    //  B\r\n    var x2 = triangle.x2;\r\n    var y2 = triangle.y2;\r\n\r\n    //  C\r\n    var x3 = triangle.x3;\r\n    var y3 = triangle.y3;\r\n\r\n    var A = x2 - x1;\r\n    var B = y2 - y1;\r\n    var C = x3 - x1;\r\n    var D = y3 - y1;\r\n    var E = A * (x1 + x2) + B * (y1 + y2);\r\n    var F = C * (x1 + x3) + D * (y1 + y3);\r\n    var G = 2 * (A * (y3 - y2) - B * (x3 - x2));\r\n\r\n    var dx;\r\n    var dy;\r\n\r\n    //  If the points of the triangle are collinear, then just find the\r\n    //  extremes and use the midpoint as the center of the circumcircle.\r\n\r\n    if (Math.abs(G) < 0.000001)\r\n    {\r\n        var minX = Math.min(x1, x2, x3);\r\n        var minY = Math.min(y1, y2, y3);\r\n        dx = (Math.max(x1, x2, x3) - minX) * 0.5;\r\n        dy = (Math.max(y1, y2, y3) - minY) * 0.5;\r\n\r\n        out.x = minX + dx;\r\n        out.y = minY + dy;\r\n        out.radius = Math.sqrt(dx * dx + dy * dy);\r\n    }\r\n    else\r\n    {\r\n        out.x = (D * E - B * F) / G;\r\n        out.y = (A * F - C * E) / G;\r\n        dx = out.x - x1;\r\n        dy = out.y - y1;\r\n        out.radius = Math.sqrt(dx * dx + dy * dy);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = CircumCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNpcmNsZS5qcz9kMjRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMseUVBQWtCOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG9CQUFvQjs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQ2lyY3VtQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi4vY2lyY2xlL0NpcmNsZScpO1xyXG5cclxuLy8gIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tdXRvby81NjE3NjkxXHJcblxyXG4vKipcclxuICogRmluZHMgdGhlIGNpcmN1bXNjcmliZWQgY2lyY2xlIChjaXJjdW1jaXJjbGUpIG9mIGEgVHJpYW5nbGUgb2JqZWN0LiBUaGUgY2lyY3VtY2lyY2xlIGlzIHRoZSBjaXJjbGUgd2hpY2ggdG91Y2hlcyBhbGwgb2YgdGhlIHRyaWFuZ2xlJ3MgdmVydGljZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5DaXJjdW1DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5DaXJjbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHVzZSBhcyBpbnB1dC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFtvdXRdIC0gQW4gb3B0aW9uYWwgQ2lyY2xlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhlIHVwZGF0ZWQgYG91dGAgQ2lyY2xlLCBvciBhIG5ldyBDaXJjbGUgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAqL1xyXG52YXIgQ2lyY3VtQ2lyY2xlID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgQ2lyY2xlKCk7IH1cclxuXHJcbiAgICAvLyAgQVxyXG4gICAgdmFyIHgxID0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgeTEgPSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICAvLyAgQlxyXG4gICAgdmFyIHgyID0gdHJpYW5nbGUueDI7XHJcbiAgICB2YXIgeTIgPSB0cmlhbmdsZS55MjtcclxuXHJcbiAgICAvLyAgQ1xyXG4gICAgdmFyIHgzID0gdHJpYW5nbGUueDM7XHJcbiAgICB2YXIgeTMgPSB0cmlhbmdsZS55MztcclxuXHJcbiAgICB2YXIgQSA9IHgyIC0geDE7XHJcbiAgICB2YXIgQiA9IHkyIC0geTE7XHJcbiAgICB2YXIgQyA9IHgzIC0geDE7XHJcbiAgICB2YXIgRCA9IHkzIC0geTE7XHJcbiAgICB2YXIgRSA9IEEgKiAoeDEgKyB4MikgKyBCICogKHkxICsgeTIpO1xyXG4gICAgdmFyIEYgPSBDICogKHgxICsgeDMpICsgRCAqICh5MSArIHkzKTtcclxuICAgIHZhciBHID0gMiAqIChBICogKHkzIC0geTIpIC0gQiAqICh4MyAtIHgyKSk7XHJcblxyXG4gICAgdmFyIGR4O1xyXG4gICAgdmFyIGR5O1xyXG5cclxuICAgIC8vICBJZiB0aGUgcG9pbnRzIG9mIHRoZSB0cmlhbmdsZSBhcmUgY29sbGluZWFyLCB0aGVuIGp1c3QgZmluZCB0aGVcclxuICAgIC8vICBleHRyZW1lcyBhbmQgdXNlIHRoZSBtaWRwb2ludCBhcyB0aGUgY2VudGVyIG9mIHRoZSBjaXJjdW1jaXJjbGUuXHJcblxyXG4gICAgaWYgKE1hdGguYWJzKEcpIDwgMC4wMDAwMDEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1pblggPSBNYXRoLm1pbih4MSwgeDIsIHgzKTtcclxuICAgICAgICB2YXIgbWluWSA9IE1hdGgubWluKHkxLCB5MiwgeTMpO1xyXG4gICAgICAgIGR4ID0gKE1hdGgubWF4KHgxLCB4MiwgeDMpIC0gbWluWCkgKiAwLjU7XHJcbiAgICAgICAgZHkgPSAoTWF0aC5tYXgoeTEsIHkyLCB5MykgLSBtaW5ZKSAqIDAuNTtcclxuXHJcbiAgICAgICAgb3V0LnggPSBtaW5YICsgZHg7XHJcbiAgICAgICAgb3V0LnkgPSBtaW5ZICsgZHk7XHJcbiAgICAgICAgb3V0LnJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSAoRCAqIEUgLSBCICogRikgLyBHO1xyXG4gICAgICAgIG91dC55ID0gKEEgKiBGIC0gQyAqIEUpIC8gRztcclxuICAgICAgICBkeCA9IG91dC54IC0geDE7XHJcbiAgICAgICAgZHkgPSBvdXQueSAtIHkxO1xyXG4gICAgICAgIG91dC5yYWRpdXMgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bUNpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CircumCircle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Clone.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Clone.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * Clones a Triangle object.\r\n *\r\n * @function Phaser.Geom.Triangle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} source - The Triangle to clone.\r\n *\r\n * @return {Phaser.Geom.Triangle} A new Triangle identical to the given one but separate from it.\r\n */\r\nvar Clone = function (source)\r\n{\r\n    return new Triangle(source.x1, source.y1, source.x2, source.y2, source.x3, source.y3);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0Nsb25lLmpzP2I3MGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9DbG9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi9UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENsb25lcyBhIFRyaWFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBzb3VyY2UgLSBUaGUgVHJpYW5nbGUgdG8gY2xvbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBBIG5ldyBUcmlhbmdsZSBpZGVudGljYWwgdG8gdGhlIGdpdmVuIG9uZSBidXQgc2VwYXJhdGUgZnJvbSBpdC5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoc291cmNlLngxLCBzb3VyY2UueTEsIHNvdXJjZS54Miwgc291cmNlLnkyLCBzb3VyY2UueDMsIHNvdXJjZS55Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENsb25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Contains.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Contains.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  http://www.blackpawn.com/texts/pointinpoly/\r\n\r\n/**\r\n * Checks if a point (as a pair of coordinates) is inside a Triangle's bounds.\r\n *\r\n * @function Phaser.Geom.Triangle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is inside the Triangle, otherwise `false`.\r\n */\r\nvar Contains = function (triangle, x, y)\r\n{\r\n    var v0x = triangle.x3 - triangle.x1;\r\n    var v0y = triangle.y3 - triangle.y1;\r\n\r\n    var v1x = triangle.x2 - triangle.x1;\r\n    var v1y = triangle.y2 - triangle.y1;\r\n\r\n    var v2x = x - triangle.x1;\r\n    var v2y = y - triangle.y1;\r\n\r\n    var dot00 = (v0x * v0x) + (v0y * v0y);\r\n    var dot01 = (v0x * v1x) + (v0y * v1y);\r\n    var dot02 = (v0x * v2x) + (v0y * v2y);\r\n    var dot11 = (v1x * v1x) + (v1y * v1y);\r\n    var dot12 = (v1x * v2x) + (v1y * v2y);\r\n\r\n    // Compute barycentric coordinates\r\n    var b = ((dot00 * dot11) - (dot01 * dot01));\r\n    var inv = (b === 0) ? 0 : (1 / b);\r\n    var u = ((dot11 * dot02) - (dot01 * dot12)) * inv;\r\n    var v = ((dot00 * dot12) - (dot01 * dot02)) * inv;\r\n\r\n    return (u >= 0 && v >= 0 && (u + v < 1));\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zLmpzP2NmYzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIHBvaW50IChhcyBhIHBhaXIgb2YgY29vcmRpbmF0ZXMpIGlzIGluc2lkZSBhIFRyaWFuZ2xlJ3MgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIGluc2lkZSB0aGUgVHJpYW5nbGUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENvbnRhaW5zID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB4LCB5KVxyXG57XHJcbiAgICB2YXIgdjB4ID0gdHJpYW5nbGUueDMgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2MHkgPSB0cmlhbmdsZS55MyAtIHRyaWFuZ2xlLnkxO1xyXG5cclxuICAgIHZhciB2MXggPSB0cmlhbmdsZS54MiAtIHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHYxeSA9IHRyaWFuZ2xlLnkyIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHYyeCA9IHggLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2MnkgPSB5IC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIGRvdDAwID0gKHYweCAqIHYweCkgKyAodjB5ICogdjB5KTtcclxuICAgIHZhciBkb3QwMSA9ICh2MHggKiB2MXgpICsgKHYweSAqIHYxeSk7XHJcbiAgICB2YXIgZG90MDIgPSAodjB4ICogdjJ4KSArICh2MHkgKiB2MnkpO1xyXG4gICAgdmFyIGRvdDExID0gKHYxeCAqIHYxeCkgKyAodjF5ICogdjF5KTtcclxuICAgIHZhciBkb3QxMiA9ICh2MXggKiB2MngpICsgKHYxeSAqIHYyeSk7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xyXG4gICAgdmFyIGIgPSAoKGRvdDAwICogZG90MTEpIC0gKGRvdDAxICogZG90MDEpKTtcclxuICAgIHZhciBpbnYgPSAoYiA9PT0gMCkgPyAwIDogKDEgLyBiKTtcclxuICAgIHZhciB1ID0gKChkb3QxMSAqIGRvdDAyKSAtIChkb3QwMSAqIGRvdDEyKSkgKiBpbnY7XHJcbiAgICB2YXIgdiA9ICgoZG90MDAgKiBkb3QxMikgLSAoZG90MDEgKiBkb3QwMikpICogaW52O1xyXG5cclxuICAgIHJldHVybiAodSA+PSAwICYmIHYgPj0gMCAmJiAodSArIHYgPCAxKSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Contains.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/ContainsArray.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/ContainsArray.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  http://www.blackpawn.com/texts/pointinpoly/\r\n\r\n//  points is an array of Point-like objects with public x/y properties\r\n//  returns an array containing all points that are within the triangle, or an empty array if none\r\n//  if 'returnFirst' is true it will return after the first point within the triangle is found\r\n\r\n/**\r\n * Filters an array of point-like objects to only those contained within a triangle.\r\n * If `returnFirst` is true, will return an array containing only the first point in the provided array that is within the triangle (or an empty array if there are no such points).\r\n *\r\n * @function Phaser.Geom.Triangle.ContainsArray\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle that the points are being checked in.\r\n * @param {Phaser.Geom.Point[]} points - An array of point-like objects (objects that have an `x` and `y` property)\r\n * @param {boolean} [returnFirst=false] - If `true`, return an array containing only the first point found that is within the triangle.\r\n * @param {array} [out] - If provided, the points that are within the triangle will be appended to this array instead of being added to a new array. If `returnFirst` is true, only the first point found within the triangle will be appended. This array will also be returned by this function.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array containing all the points from `points` that are within the triangle, if an array was provided as `out`, points will be appended to that array and it will also be returned here.\r\n */\r\nvar ContainsArray = function (triangle, points, returnFirst, out)\r\n{\r\n    if (returnFirst === undefined) { returnFirst = false; }\r\n    if (out === undefined) { out = []; }\r\n\r\n    var v0x = triangle.x3 - triangle.x1;\r\n    var v0y = triangle.y3 - triangle.y1;\r\n\r\n    var v1x = triangle.x2 - triangle.x1;\r\n    var v1y = triangle.y2 - triangle.y1;\r\n\r\n    var dot00 = (v0x * v0x) + (v0y * v0y);\r\n    var dot01 = (v0x * v1x) + (v0y * v1y);\r\n    var dot11 = (v1x * v1x) + (v1y * v1y);\r\n\r\n    // Compute barycentric coordinates\r\n    var b = ((dot00 * dot11) - (dot01 * dot01));\r\n    var inv = (b === 0) ? 0 : (1 / b);\r\n\r\n    var u;\r\n    var v;\r\n    var v2x;\r\n    var v2y;\r\n    var dot02;\r\n    var dot12;\r\n\r\n    var x1 = triangle.x1;\r\n    var y1 = triangle.y1;\r\n\r\n    for (var i = 0; i < points.length; i++)\r\n    {\r\n        v2x = points[i].x - x1;\r\n        v2y = points[i].y - y1;\r\n\r\n        dot02 = (v0x * v2x) + (v0y * v2y);\r\n        dot12 = (v1x * v2x) + (v1y * v2y);\r\n\r\n        u = ((dot11 * dot02) - (dot01 * dot12)) * inv;\r\n        v = ((dot00 * dot12) - (dot01 * dot02)) * inv;\r\n    \r\n        if (u >= 0 && v >= 0 && (u + v < 1))\r\n        {\r\n            out.push({ x: points[i].x, y: points[i].y });\r\n\r\n            if (returnFirst)\r\n            {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = ContainsArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zQXJyYXkuanM/MjY1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxQkFBcUI7QUFDekQsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLGlDQUFpQzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvXHJcblxyXG4vLyAgcG9pbnRzIGlzIGFuIGFycmF5IG9mIFBvaW50LWxpa2Ugb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllc1xyXG4vLyAgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBwb2ludHMgdGhhdCBhcmUgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm9uZVxyXG4vLyAgaWYgJ3JldHVybkZpcnN0JyBpcyB0cnVlIGl0IHdpbGwgcmV0dXJuIGFmdGVyIHRoZSBmaXJzdCBwb2ludCB3aXRoaW4gdGhlIHRyaWFuZ2xlIGlzIGZvdW5kXHJcblxyXG4vKipcclxuICogRmlsdGVycyBhbiBhcnJheSBvZiBwb2ludC1saWtlIG9iamVjdHMgdG8gb25seSB0aG9zZSBjb250YWluZWQgd2l0aGluIGEgdHJpYW5nbGUuXHJcbiAqIElmIGByZXR1cm5GaXJzdGAgaXMgdHJ1ZSwgd2lsbCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBvbmx5IHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkgdGhhdCBpcyB3aXRoaW4gdGhlIHRyaWFuZ2xlIChvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSBhcmUgbm8gc3VjaCBwb2ludHMpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNBcnJheVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdGhhdCB0aGUgcG9pbnRzIGFyZSBiZWluZyBjaGVja2VkIGluLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHBvaW50LWxpa2Ugb2JqZWN0cyAob2JqZWN0cyB0aGF0IGhhdmUgYW4gYHhgIGFuZCBgeWAgcHJvcGVydHkpXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybkZpcnN0PWZhbHNlXSAtIElmIGB0cnVlYCwgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgb25seSB0aGUgZmlyc3QgcG9pbnQgZm91bmQgdGhhdCBpcyB3aXRoaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIElmIHByb3ZpZGVkLCB0aGUgcG9pbnRzIHRoYXQgYXJlIHdpdGhpbiB0aGUgdHJpYW5nbGUgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIGFycmF5IGluc3RlYWQgb2YgYmVpbmcgYWRkZWQgdG8gYSBuZXcgYXJyYXkuIElmIGByZXR1cm5GaXJzdGAgaXMgdHJ1ZSwgb25seSB0aGUgZmlyc3QgcG9pbnQgZm91bmQgd2l0aGluIHRoZSB0cmlhbmdsZSB3aWxsIGJlIGFwcGVuZGVkLiBUaGlzIGFycmF5IHdpbGwgYWxzbyBiZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgcG9pbnRzIGZyb20gYHBvaW50c2AgdGhhdCBhcmUgd2l0aGluIHRoZSB0cmlhbmdsZSwgaWYgYW4gYXJyYXkgd2FzIHByb3ZpZGVkIGFzIGBvdXRgLCBwb2ludHMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGF0IGFycmF5IGFuZCBpdCB3aWxsIGFsc28gYmUgcmV0dXJuZWQgaGVyZS5cclxuICovXHJcbnZhciBDb250YWluc0FycmF5ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb2ludHMsIHJldHVybkZpcnN0LCBvdXQpXHJcbntcclxuICAgIGlmIChyZXR1cm5GaXJzdCA9PT0gdW5kZWZpbmVkKSB7IHJldHVybkZpcnN0ID0gZmFsc2U7IH1cclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIHZhciB2MHggPSB0cmlhbmdsZS54MyAtIHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHYweSA9IHRyaWFuZ2xlLnkzIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHYxeCA9IHRyaWFuZ2xlLngyIC0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgdjF5ID0gdHJpYW5nbGUueTIgLSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICB2YXIgZG90MDAgPSAodjB4ICogdjB4KSArICh2MHkgKiB2MHkpO1xyXG4gICAgdmFyIGRvdDAxID0gKHYweCAqIHYxeCkgKyAodjB5ICogdjF5KTtcclxuICAgIHZhciBkb3QxMSA9ICh2MXggKiB2MXgpICsgKHYxeSAqIHYxeSk7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xyXG4gICAgdmFyIGIgPSAoKGRvdDAwICogZG90MTEpIC0gKGRvdDAxICogZG90MDEpKTtcclxuICAgIHZhciBpbnYgPSAoYiA9PT0gMCkgPyAwIDogKDEgLyBiKTtcclxuXHJcbiAgICB2YXIgdTtcclxuICAgIHZhciB2O1xyXG4gICAgdmFyIHYyeDtcclxuICAgIHZhciB2Mnk7XHJcbiAgICB2YXIgZG90MDI7XHJcbiAgICB2YXIgZG90MTI7XHJcblxyXG4gICAgdmFyIHgxID0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgeTEgPSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2MnggPSBwb2ludHNbaV0ueCAtIHgxO1xyXG4gICAgICAgIHYyeSA9IHBvaW50c1tpXS55IC0geTE7XHJcblxyXG4gICAgICAgIGRvdDAyID0gKHYweCAqIHYyeCkgKyAodjB5ICogdjJ5KTtcclxuICAgICAgICBkb3QxMiA9ICh2MXggKiB2MngpICsgKHYxeSAqIHYyeSk7XHJcblxyXG4gICAgICAgIHUgPSAoKGRvdDExICogZG90MDIpIC0gKGRvdDAxICogZG90MTIpKSAqIGludjtcclxuICAgICAgICB2ID0gKChkb3QwMCAqIGRvdDEyKSAtIChkb3QwMSAqIGRvdDAyKSkgKiBpbnY7XHJcbiAgICBcclxuICAgICAgICBpZiAodSA+PSAwICYmIHYgPj0gMCAmJiAodSArIHYgPCAxKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHsgeDogcG9pbnRzW2ldLngsIHk6IHBvaW50c1tpXS55IH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldHVybkZpcnN0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluc0FycmF5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/ContainsArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/ContainsPoint.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/ContainsPoint.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * Tests if a triangle contains a point.\r\n *\r\n * @function Phaser.Geom.Triangle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle.\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|any)} point - The point to test, or any point-like object with public `x` and `y` properties.\r\n *\r\n * @return {boolean} `true` if the point is within the triangle, otherwise `false`.\r\n */\r\nvar ContainsPoint = function (triangle, point)\r\n{\r\n    return Contains(triangle, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zUG9pbnQuanM/NzYzNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDRDQUE0QztBQUN2RDtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Db250YWluc1BvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgYSB0cmlhbmdsZSBjb250YWlucyBhIHBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjJ8YW55KX0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gdGVzdCwgb3IgYW55IHBvaW50LWxpa2Ugb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgQ29udGFpbnNQb2ludCA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyh0cmlhbmdsZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/ContainsPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/CopyFrom.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/CopyFrom.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Triangle to a destination Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} source - The source Triangle to copy the values from.\r\n * @param {Phaser.Geom.Triangle} dest - The destination Triangle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Triangle} The destination Triangle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n    return dest.setTo(source.x1, source.y1, source.x2, source.y2, source.x3, source.y3);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvcHlGcm9tLmpzPzgxMGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBvbmUgVHJpYW5nbGUgdG8gYSBkZXN0aW5hdGlvbiBUcmlhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNvcHlGcm9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBzb3VyY2UgLSBUaGUgc291cmNlIFRyaWFuZ2xlIHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFRyaWFuZ2xlIHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBkZXN0aW5hdGlvbiBUcmlhbmdsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Miwgc291cmNlLngzLCBzb3VyY2UueTMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb3B5RnJvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CopyFrom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Decompose.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Decompose.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Decomposes a Triangle into an array of its points.\r\n *\r\n * @function Phaser.Geom.Triangle.Decompose\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to decompose.\r\n * @param {array} [out] - An array to store the points into.\r\n *\r\n * @return {array} The provided `out` array, or a new array if none was provided, with three objects with `x` and `y` properties representing each point of the Triangle appended to it.\r\n */\r\nvar Decompose = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    out.push({ x: triangle.x1, y: triangle.y1 });\r\n    out.push({ x: triangle.x2, y: triangle.y2 });\r\n    out.push({ x: triangle.x3, y: triangle.y3 });\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Decompose;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0RlY29tcG9zZS5qcz8wM2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDLGNBQWMsaUNBQWlDO0FBQy9DLGNBQWMsaUNBQWlDO0FBQy9DLGNBQWMsaUNBQWlDOztBQUUvQztBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9EZWNvbXBvc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZWNvbXBvc2VzIGEgVHJpYW5nbGUgaW50byBhbiBhcnJheSBvZiBpdHMgcG9pbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuRGVjb21wb3NlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBkZWNvbXBvc2UuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gYXJyYXkgdG8gc3RvcmUgdGhlIHBvaW50cyBpbnRvLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gVGhlIHByb3ZpZGVkIGBvdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBwcm92aWRlZCwgd2l0aCB0aHJlZSBvYmplY3RzIHdpdGggYHhgIGFuZCBgeWAgcHJvcGVydGllcyByZXByZXNlbnRpbmcgZWFjaCBwb2ludCBvZiB0aGUgVHJpYW5nbGUgYXBwZW5kZWQgdG8gaXQuXHJcbiAqL1xyXG52YXIgRGVjb21wb3NlID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIG91dC5wdXNoKHsgeDogdHJpYW5nbGUueDEsIHk6IHRyaWFuZ2xlLnkxIH0pO1xyXG4gICAgb3V0LnB1c2goeyB4OiB0cmlhbmdsZS54MiwgeTogdHJpYW5nbGUueTIgfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHRyaWFuZ2xlLngzLCB5OiB0cmlhbmdsZS55MyB9KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEZWNvbXBvc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Decompose.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Equals.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Equals.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns true if two triangles have the same coordinates.\r\n *\r\n * @function Phaser.Geom.Triangle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The first triangle to check.\r\n * @param {Phaser.Geom.Triangle} toCompare - The second triangle to check.\r\n *\r\n * @return {boolean} `true` if the two given triangles have the exact same coordinates, otherwise `false`.\r\n */\r\nvar Equals = function (triangle, toCompare)\r\n{\r\n    return (\r\n        triangle.x1 === toCompare.x1 &&\r\n        triangle.y1 === toCompare.y1 &&\r\n        triangle.x2 === toCompare.x2 &&\r\n        triangle.y2 === toCompare.y2 &&\r\n        triangle.x3 === toCompare.x3 &&\r\n        triangle.y3 === toCompare.y3\r\n    );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0VxdWFscy5qcz9lN2U1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0VxdWFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0d28gdHJpYW5nbGVzIGhhdmUgdGhlIHNhbWUgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIGZpcnN0IHRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIHRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBnaXZlbiB0cmlhbmdsZXMgaGF2ZSB0aGUgZXhhY3Qgc2FtZSBjb29yZGluYXRlcywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgdHJpYW5nbGUueDEgPT09IHRvQ29tcGFyZS54MSAmJlxyXG4gICAgICAgIHRyaWFuZ2xlLnkxID09PSB0b0NvbXBhcmUueTEgJiZcclxuICAgICAgICB0cmlhbmdsZS54MiA9PT0gdG9Db21wYXJlLngyICYmXHJcbiAgICAgICAgdHJpYW5nbGUueTIgPT09IHRvQ29tcGFyZS55MiAmJlxyXG4gICAgICAgIHRyaWFuZ2xlLngzID09PSB0b0NvbXBhcmUueDMgJiZcclxuICAgICAgICB0cmlhbmdsZS55MyA9PT0gdG9Db21wYXJlLnkzXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Equals.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/GetPoint.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/GetPoint.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n/**\r\n * Returns a Point from around the perimeter of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to get the point on its perimeter from.\r\n * @param {number} position - The position along the perimeter of the triangle. A value between 0 and 1.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An option Point, or Point-like object to store the value in. If not given a new Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object containing the given position from the perimeter of the triangle.\r\n */\r\nvar GetPoint = function (triangle, position, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var line1 = triangle.getLineA();\r\n    var line2 = triangle.getLineB();\r\n    var line3 = triangle.getLineC();\r\n\r\n    if (position <= 0 || position >= 1)\r\n    {\r\n        out.x = line1.x1;\r\n        out.y = line1.y1;\r\n\r\n        return out;\r\n    }\r\n\r\n    var length1 = Length(line1);\r\n    var length2 = Length(line2);\r\n    var length3 = Length(line3);\r\n\r\n    var perimeter = length1 + length2 + length3;\r\n\r\n    var p = perimeter * position;\r\n    var localPosition = 0;\r\n\r\n    //  Which line is it on?\r\n\r\n    if (p < length1)\r\n    {\r\n        //  Line 1\r\n        localPosition = p / length1;\r\n\r\n        out.x = line1.x1 + (line1.x2 - line1.x1) * localPosition;\r\n        out.y = line1.y1 + (line1.y2 - line1.y1) * localPosition;\r\n    }\r\n    else if (p > length1 + length2)\r\n    {\r\n        //  Line 3\r\n        p -= length1 + length2;\r\n        localPosition = p / length3;\r\n\r\n        out.x = line3.x1 + (line3.x2 - line3.x1) * localPosition;\r\n        out.y = line3.y1 + (line3.y2 - line3.y1) * localPosition;\r\n    }\r\n    else\r\n    {\r\n        //  Line 2\r\n        p -= length1;\r\n        localPosition = p / length2;\r\n\r\n        out.x = line2.x1 + (line2.x2 - line2.x1) * localPosition;\r\n        out.y = line2.y1 + (line2.y2 - line2.y1) * localPosition;\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50LmpzP2YxMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgUG9pbnQgZnJvbSBhcm91bmQgdGhlIHBlcmltZXRlciBvZiBhIFRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gZ2V0IHRoZSBwb2ludCBvbiBpdHMgcGVyaW1ldGVyIGZyb20uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgcGVyaW1ldGVyIG9mIHRoZSB0cmlhbmdsZS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb3B0aW9uIFBvaW50LCBvciBQb2ludC1saWtlIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWUgaW4uIElmIG5vdCBnaXZlbiBhIG5ldyBQb2ludCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBnaXZlbiBwb3NpdGlvbiBmcm9tIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb3NpdGlvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgbGluZTEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgdmFyIGxpbmUyID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lMyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uIDw9IDAgfHwgcG9zaXRpb24gPj0gMSlcclxuICAgIHtcclxuICAgICAgICBvdXQueCA9IGxpbmUxLngxO1xyXG4gICAgICAgIG91dC55ID0gbGluZTEueTE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxlbmd0aDEgPSBMZW5ndGgobGluZTEpO1xyXG4gICAgdmFyIGxlbmd0aDIgPSBMZW5ndGgobGluZTIpO1xyXG4gICAgdmFyIGxlbmd0aDMgPSBMZW5ndGgobGluZTMpO1xyXG5cclxuICAgIHZhciBwZXJpbWV0ZXIgPSBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDM7XHJcblxyXG4gICAgdmFyIHAgPSBwZXJpbWV0ZXIgKiBwb3NpdGlvbjtcclxuICAgIHZhciBsb2NhbFBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAvLyAgV2hpY2ggbGluZSBpcyBpdCBvbj9cclxuXHJcbiAgICBpZiAocCA8IGxlbmd0aDEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIExpbmUgMVxyXG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMTtcclxuXHJcbiAgICAgICAgb3V0LnggPSBsaW5lMS54MSArIChsaW5lMS54MiAtIGxpbmUxLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgb3V0LnkgPSBsaW5lMS55MSArIChsaW5lMS55MiAtIGxpbmUxLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwID4gbGVuZ3RoMSArIGxlbmd0aDIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIExpbmUgM1xyXG4gICAgICAgIHAgLT0gbGVuZ3RoMSArIGxlbmd0aDI7XHJcbiAgICAgICAgbG9jYWxQb3NpdGlvbiA9IHAgLyBsZW5ndGgzO1xyXG5cclxuICAgICAgICBvdXQueCA9IGxpbmUzLngxICsgKGxpbmUzLngyIC0gbGluZTMueDEpICogbG9jYWxQb3NpdGlvbjtcclxuICAgICAgICBvdXQueSA9IGxpbmUzLnkxICsgKGxpbmUzLnkyIC0gbGluZTMueTEpICogbG9jYWxQb3NpdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgTGluZSAyXHJcbiAgICAgICAgcCAtPSBsZW5ndGgxO1xyXG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMjtcclxuXHJcbiAgICAgICAgb3V0LnggPSBsaW5lMi54MSArIChsaW5lMi54MiAtIGxpbmUyLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgb3V0LnkgPSBsaW5lMi55MSArIChsaW5lMi55MiAtIGxpbmUyLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/GetPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/GetPoints.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/GetPoints.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns an array of evenly spaced points on the perimeter of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to get the points from.\r\n * @param {integer} quantity - The number of evenly spaced points to return. Set to 0 to return an arbitrary number of points based on the `stepRate`.\r\n * @param {number} stepRate - If `quantity` is 0, the distance between each returned point.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An array to which the points should be appended.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} The modified `out` array, or a new array if none was provided.\r\n */\r\nvar GetPoints = function (triangle, quantity, stepRate, out)\r\n{\r\n    if (out === undefined) { out = []; }\r\n\r\n    var line1 = triangle.getLineA();\r\n    var line2 = triangle.getLineB();\r\n    var line3 = triangle.getLineC();\r\n\r\n    var length1 = Length(line1);\r\n    var length2 = Length(line2);\r\n    var length3 = Length(line3);\r\n\r\n    var perimeter = length1 + length2 + length3;\r\n\r\n    //  If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n    if (!quantity)\r\n    {\r\n        quantity = perimeter / stepRate;\r\n    }\r\n\r\n    for (var i = 0; i < quantity; i++)\r\n    {\r\n        var p = perimeter * (i / quantity);\r\n        var localPosition = 0;\r\n\r\n        var point = new Point();\r\n\r\n        //  Which line is it on?\r\n\r\n        if (p < length1)\r\n        {\r\n            //  Line 1\r\n            localPosition = p / length1;\r\n\r\n            point.x = line1.x1 + (line1.x2 - line1.x1) * localPosition;\r\n            point.y = line1.y1 + (line1.y2 - line1.y1) * localPosition;\r\n        }\r\n        else if (p > length1 + length2)\r\n        {\r\n            //  Line 3\r\n            p -= length1 + length2;\r\n            localPosition = p / length3;\r\n\r\n            point.x = line3.x1 + (line3.x2 - line3.x1) * localPosition;\r\n            point.y = line3.y1 + (line3.y2 - line3.y1) * localPosition;\r\n        }\r\n        else\r\n        {\r\n            //  Line 2\r\n            p -= length1;\r\n            localPosition = p / length2;\r\n\r\n            point.x = line2.x1 + (line2.x2 - line2.x1) * localPosition;\r\n            point.y = line2.y1 + (line2.y2 - line2.y1) * localPosition;\r\n        }\r\n\r\n        out.push(point);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50cy5qcz9jZTI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMscUVBQWdCO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMZW5ndGggPSByZXF1aXJlKCcuLi9saW5lL0xlbmd0aCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgZXZlbmx5IHNwYWNlZCBwb2ludHMgb24gdGhlIHBlcmltZXRlciBvZiBhIFRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGdldCB0aGUgcG9pbnRzIGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIHRvIHJldHVybi4gU2V0IHRvIDAgdG8gcmV0dXJuIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9pbnRzIGJhc2VkIG9uIHRoZSBgc3RlcFJhdGVgLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcFJhdGUgLSBJZiBgcXVhbnRpdHlgIGlzIDAsIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcmV0dXJuZWQgcG9pbnQuXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRoZSBwb2ludHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFRoZSBtb2RpZmllZCBgb3V0YCBhcnJheSwgb3IgYSBuZXcgYXJyYXkgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBxdWFudGl0eSwgc3RlcFJhdGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgdmFyIGxpbmUxID0gdHJpYW5nbGUuZ2V0TGluZUEoKTtcclxuICAgIHZhciBsaW5lMiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICB2YXIgbGluZTMgPSB0cmlhbmdsZS5nZXRMaW5lQygpO1xyXG5cclxuICAgIHZhciBsZW5ndGgxID0gTGVuZ3RoKGxpbmUxKTtcclxuICAgIHZhciBsZW5ndGgyID0gTGVuZ3RoKGxpbmUyKTtcclxuICAgIHZhciBsZW5ndGgzID0gTGVuZ3RoKGxpbmUzKTtcclxuXHJcbiAgICB2YXIgcGVyaW1ldGVyID0gbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzO1xyXG5cclxuICAgIC8vICBJZiBxdWFudGl0eSBpcyBhIGZhbHNleSB2YWx1ZSAoZmFsc2UsIG51bGwsIDAsIHVuZGVmaW5lZCwgZXRjKSB0aGVuIHdlIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgc3RlcFJhdGUgaW5zdGVhZC5cclxuICAgIGlmICghcXVhbnRpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwZXJpbWV0ZXIgLyBzdGVwUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAgPSBwZXJpbWV0ZXIgKiAoaSAvIHF1YW50aXR5KTtcclxuICAgICAgICB2YXIgbG9jYWxQb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IG5ldyBQb2ludCgpO1xyXG5cclxuICAgICAgICAvLyAgV2hpY2ggbGluZSBpcyBpdCBvbj9cclxuXHJcbiAgICAgICAgaWYgKHAgPCBsZW5ndGgxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIExpbmUgMVxyXG4gICAgICAgICAgICBsb2NhbFBvc2l0aW9uID0gcCAvIGxlbmd0aDE7XHJcblxyXG4gICAgICAgICAgICBwb2ludC54ID0gbGluZTEueDEgKyAobGluZTEueDIgLSBsaW5lMS54MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgICAgICBwb2ludC55ID0gbGluZTEueTEgKyAobGluZTEueTIgLSBsaW5lMS55MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwID4gbGVuZ3RoMSArIGxlbmd0aDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTGluZSAzXHJcbiAgICAgICAgICAgIHAgLT0gbGVuZ3RoMSArIGxlbmd0aDI7XHJcbiAgICAgICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMztcclxuXHJcbiAgICAgICAgICAgIHBvaW50LnggPSBsaW5lMy54MSArIChsaW5lMy54MiAtIGxpbmUzLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgICAgIHBvaW50LnkgPSBsaW5lMy55MSArIChsaW5lMy55MiAtIGxpbmUzLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBMaW5lIDJcclxuICAgICAgICAgICAgcCAtPSBsZW5ndGgxO1xyXG4gICAgICAgICAgICBsb2NhbFBvc2l0aW9uID0gcCAvIGxlbmd0aDI7XHJcblxyXG4gICAgICAgICAgICBwb2ludC54ID0gbGluZTIueDEgKyAobGluZTIueDIgLSBsaW5lMi54MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgICAgICBwb2ludC55ID0gbGluZTIueTEgKyAobGluZTIueTIgLSBsaW5lMi55MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0LnB1c2gocG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/GetPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/InCenter.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/InCenter.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n// The three angle bisectors of a triangle meet in one point called the incenter.\r\n// It is the center of the incircle, the circle inscribed in the triangle.\r\n\r\nfunction getLength (x1, y1, x2, y2)\r\n{\r\n    var x = x1 - x2;\r\n    var y = y1 - y2;\r\n    var magnitude = (x * x) + (y * y);\r\n\r\n    return Math.sqrt(magnitude);\r\n}\r\n\r\n/**\r\n * Calculates the position of the incenter of a Triangle object. This is the point where its three angle bisectors meet and it's also the center of the incircle, which is the circle inscribed in the triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.InCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to find the incenter of.\r\n * @param {Phaser.Geom.Point} [out] - An optional Point in which to store the coordinates.\r\n *\r\n * @return {Phaser.Geom.Point} Point (x, y) of the center pixel of the triangle.\r\n */\r\nvar InCenter = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    var x1 = triangle.x1;\r\n    var y1 = triangle.y1;\r\n\r\n    var x2 = triangle.x2;\r\n    var y2 = triangle.y2;\r\n\r\n    var x3 = triangle.x3;\r\n    var y3 = triangle.y3;\r\n\r\n    var d1 = getLength(x3, y3, x2, y2);\r\n    var d2 = getLength(x1, y1, x3, y3);\r\n    var d3 = getLength(x2, y2, x1, y1);\r\n\r\n    var p = d1 + d2 + d3;\r\n\r\n    out.x = (x1 * d1 + x2 * d2 + x3 * d3) / p;\r\n    out.y = (y1 * d1 + y2 * d2 + y3 * d3) / p;\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = InCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0luQ2VudGVyLmpzPzI0NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9JbkNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8vIFRoZSB0aHJlZSBhbmdsZSBiaXNlY3RvcnMgb2YgYSB0cmlhbmdsZSBtZWV0IGluIG9uZSBwb2ludCBjYWxsZWQgdGhlIGluY2VudGVyLlxyXG4vLyBJdCBpcyB0aGUgY2VudGVyIG9mIHRoZSBpbmNpcmNsZSwgdGhlIGNpcmNsZSBpbnNjcmliZWQgaW4gdGhlIHRyaWFuZ2xlLlxyXG5cclxuZnVuY3Rpb24gZ2V0TGVuZ3RoICh4MSwgeTEsIHgyLCB5Milcclxue1xyXG4gICAgdmFyIHggPSB4MSAtIHgyO1xyXG4gICAgdmFyIHkgPSB5MSAtIHkyO1xyXG4gICAgdmFyIG1hZ25pdHVkZSA9ICh4ICogeCkgKyAoeSAqIHkpO1xyXG5cclxuICAgIHJldHVybiBNYXRoLnNxcnQobWFnbml0dWRlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBpbmNlbnRlciBvZiBhIFRyaWFuZ2xlIG9iamVjdC4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgaXRzIHRocmVlIGFuZ2xlIGJpc2VjdG9ycyBtZWV0IGFuZCBpdCdzIGFsc28gdGhlIGNlbnRlciBvZiB0aGUgaW5jaXJjbGUsIHdoaWNoIGlzIHRoZSBjaXJjbGUgaW5zY3JpYmVkIGluIHRoZSB0cmlhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkluQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGZpbmQgdGhlIGluY2VudGVyIG9mLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIEFuIG9wdGlvbmFsIFBvaW50IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFBvaW50ICh4LCB5KSBvZiB0aGUgY2VudGVyIHBpeGVsIG9mIHRoZSB0cmlhbmdsZS5cclxuICovXHJcbnZhciBJbkNlbnRlciA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgeDEgPSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB5MSA9IHRyaWFuZ2xlLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IHRyaWFuZ2xlLngyO1xyXG4gICAgdmFyIHkyID0gdHJpYW5nbGUueTI7XHJcblxyXG4gICAgdmFyIHgzID0gdHJpYW5nbGUueDM7XHJcbiAgICB2YXIgeTMgPSB0cmlhbmdsZS55MztcclxuXHJcbiAgICB2YXIgZDEgPSBnZXRMZW5ndGgoeDMsIHkzLCB4MiwgeTIpO1xyXG4gICAgdmFyIGQyID0gZ2V0TGVuZ3RoKHgxLCB5MSwgeDMsIHkzKTtcclxuICAgIHZhciBkMyA9IGdldExlbmd0aCh4MiwgeTIsIHgxLCB5MSk7XHJcblxyXG4gICAgdmFyIHAgPSBkMSArIGQyICsgZDM7XHJcblxyXG4gICAgb3V0LnggPSAoeDEgKiBkMSArIHgyICogZDIgKyB4MyAqIGQzKSAvIHA7XHJcbiAgICBvdXQueSA9ICh5MSAqIGQxICsgeTIgKiBkMiArIHkzICogZDMpIC8gcDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbkNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/InCenter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Offset.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Offset.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves each point (vertex) of a Triangle by a given offset, thus moving the entire Triangle by that offset.\r\n *\r\n * @function Phaser.Geom.Triangle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to move.\r\n * @param {number} x - The horizontal offset (distance) by which to move each point. Can be positive or negative.\r\n * @param {number} y - The vertical offset (distance) by which to move each point. Can be positive or negative.\r\n *\r\n * @return {Phaser.Geom.Triangle} The modified Triangle.\r\n */\r\nvar Offset = function (triangle, x, y)\r\n{\r\n    triangle.x1 += x;\r\n    triangle.y1 += y;\r\n\r\n    triangle.x2 += x;\r\n    triangle.y2 += y;\r\n\r\n    triangle.x3 += x;\r\n    triangle.y3 += y;\r\n\r\n    return triangle;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL09mZnNldC5qcz8yYzk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9PZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBNb3ZlcyBlYWNoIHBvaW50ICh2ZXJ0ZXgpIG9mIGEgVHJpYW5nbGUgYnkgYSBnaXZlbiBvZmZzZXQsIHRodXMgbW92aW5nIHRoZSBlbnRpcmUgVHJpYW5nbGUgYnkgdGhhdCBvZmZzZXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5PZmZzZXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gTyAtIFt0cmlhbmdsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBtb3ZlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIG9mZnNldCAoZGlzdGFuY2UpIGJ5IHdoaWNoIHRvIG1vdmUgZWFjaCBwb2ludC4gQ2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgKGRpc3RhbmNlKSBieSB3aGljaCB0byBtb3ZlIGVhY2ggcG9pbnQuIENhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBtb2RpZmllZCBUcmlhbmdsZS5cclxuICovXHJcbnZhciBPZmZzZXQgPSBmdW5jdGlvbiAodHJpYW5nbGUsIHgsIHkpXHJcbntcclxuICAgIHRyaWFuZ2xlLngxICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MSArPSB5O1xyXG5cclxuICAgIHRyaWFuZ2xlLngyICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MiArPSB5O1xyXG5cclxuICAgIHRyaWFuZ2xlLngzICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MyArPSB5O1xyXG5cclxuICAgIHJldHVybiB0cmlhbmdsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT2Zmc2V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Perimeter.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Perimeter.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n// The 2D area of a triangle. The area value is always non-negative.\r\n\r\n/**\r\n * Gets the length of the perimeter of the given triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.Perimeter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\nvar Perimeter = function (triangle)\r\n{\r\n    var line1 = triangle.getLineA();\r\n    var line2 = triangle.getLineB();\r\n    var line3 = triangle.getLineC();\r\n\r\n    return (Length(line1) + Length(line2) + Length(line3));\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1BlcmltZXRlci5qcz80MWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMscUVBQWdCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvUGVyaW1ldGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxuXHJcbi8vIFRoZSAyRCBhcmVhIG9mIGEgdHJpYW5nbGUuIFRoZSBhcmVhIHZhbHVlIGlzIGFsd2F5cyBub24tbmVnYXRpdmUuXHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGdpdmVuIHRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuUGVyaW1ldGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUGVyaW1ldGVyID0gZnVuY3Rpb24gKHRyaWFuZ2xlKVxyXG57XHJcbiAgICB2YXIgbGluZTEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgdmFyIGxpbmUyID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lMyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgcmV0dXJuIChMZW5ndGgobGluZTEpICsgTGVuZ3RoKGxpbmUyKSArIExlbmd0aChsaW5lMykpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Perimeter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Random.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Random.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Triangle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar Random = function (triangle, out)\r\n{\r\n    if (out === undefined) { out = new Point(); }\r\n\r\n    //  Basis vectors\r\n    var ux = triangle.x2 - triangle.x1;\r\n    var uy = triangle.y2 - triangle.y1;\r\n\r\n    var vx = triangle.x3 - triangle.x1;\r\n    var vy = triangle.y3 - triangle.y1;\r\n\r\n    //  Random point within the unit square\r\n    var r = Math.random();\r\n    var s = Math.random();\r\n\r\n    //  Point outside the triangle? Remap it.\r\n    if (r + s >= 1)\r\n    {\r\n        r = 1 - r;\r\n        s = 1 - s;\r\n    }\r\n\r\n    out.x = triangle.x1 + ((ux * r) + (vx * s));\r\n    out.y = triangle.y1 + ((uy * r) + (vy * s));\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JhbmRvbS5qcz9lZWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JhbmRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IFtvdXRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICAvLyAgQmFzaXMgdmVjdG9yc1xyXG4gICAgdmFyIHV4ID0gdHJpYW5nbGUueDIgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB1eSA9IHRyaWFuZ2xlLnkyIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHZ4ID0gdHJpYW5nbGUueDMgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2eSA9IHRyaWFuZ2xlLnkzIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgLy8gIFJhbmRvbSBwb2ludCB3aXRoaW4gdGhlIHVuaXQgc3F1YXJlXHJcbiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCk7XHJcbiAgICB2YXIgcyA9IE1hdGgucmFuZG9tKCk7XHJcblxyXG4gICAgLy8gIFBvaW50IG91dHNpZGUgdGhlIHRyaWFuZ2xlPyBSZW1hcCBpdC5cclxuICAgIGlmIChyICsgcyA+PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHIgPSAxIC0gcjtcclxuICAgICAgICBzID0gMSAtIHM7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0LnggPSB0cmlhbmdsZS54MSArICgodXggKiByKSArICh2eCAqIHMpKTtcclxuICAgIG91dC55ID0gdHJpYW5nbGUueTEgKyAoKHV5ICogcikgKyAodnkgKiBzKSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Random.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Rotate.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Rotate.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\nvar InCenter = __webpack_require__(/*! ./InCenter */ \"./node_modules/phaser/src/geom/triangle/InCenter.js\");\r\n\r\n/**\r\n * Rotates a Triangle about its incenter, which is the point at which its three angle bisectors meet.\r\n *\r\n * @function Phaser.Geom.Triangle.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar Rotate = function (triangle, angle)\r\n{\r\n    var point = InCenter(triangle);\r\n\r\n    return RotateAroundXY(triangle, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZS5qcz84OTdlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyxtRkFBa0I7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG52YXIgSW5DZW50ZXIgPSByZXF1aXJlKCcuL0luQ2VudGVyJyk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIFRyaWFuZ2xlIGFib3V0IGl0cyBpbmNlbnRlciwgd2hpY2ggaXMgdGhlIHBvaW50IGF0IHdoaWNoIGl0cyB0aHJlZSBhbmdsZSBiaXNlY3RvcnMgbWVldC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLlJvdGF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBPIC0gW3RyaWFuZ2xlLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHJvdGF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGJ5IHdoaWNoIHRvIHJvdGF0ZSB0aGUgVHJpYW5nbGUsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgcm90YXRlZCBUcmlhbmdsZS5cclxuICovXHJcbnZhciBSb3RhdGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGFuZ2xlKVxyXG57XHJcbiAgICB2YXIgcG9pbnQgPSBJbkNlbnRlcih0cmlhbmdsZSk7XHJcblxyXG4gICAgcmV0dXJuIFJvdGF0ZUFyb3VuZFhZKHRyaWFuZ2xlLCBwb2ludC54LCBwb2ludC55LCBhbmdsZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Rotate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotates a Triangle at a certain angle about a given Point or object with public `x` and `y` properties.\r\n *\r\n * @function Phaser.Geom.Triangle.RotateAroundPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {Phaser.Geom.Point} point - The Point to rotate the Triangle about.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar RotateAroundPoint = function (triangle, point, angle)\r\n{\r\n    return RotateAroundXY(triangle, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = RotateAroundPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFBvaW50LmpzPzc2YzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Sb3RhdGVBcm91bmRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBUcmlhbmdsZSBhdCBhIGNlcnRhaW4gYW5nbGUgYWJvdXQgYSBnaXZlbiBQb2ludCBvciBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLlJvdGF0ZUFyb3VuZFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbdHJpYW5nbGUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gcm90YXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byByb3RhdGUgdGhlIFRyaWFuZ2xlIGFib3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgYnkgd2hpY2ggdG8gcm90YXRlIHRoZSBUcmlhbmdsZSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSByb3RhdGVkIFRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFBvaW50ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb2ludCwgYW5nbGUpXHJcbntcclxuICAgIHJldHVybiBSb3RhdGVBcm91bmRYWSh0cmlhbmdsZSwgcG9pbnQueCwgcG9pbnQueSwgYW5nbGUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/RotateAroundXY.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/RotateAroundXY.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotates an entire Triangle at a given angle about a specific point.\r\n *\r\n * @function Phaser.Geom.Triangle.RotateAroundXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {number} x - The X coordinate of the point to rotate the Triangle about.\r\n * @param {number} y - The Y coordinate of the point to rotate the Triangle about.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar RotateAroundXY = function (triangle, x, y, angle)\r\n{\r\n    var c = Math.cos(angle);\r\n    var s = Math.sin(angle);\r\n\r\n    var tx = triangle.x1 - x;\r\n    var ty = triangle.y1 - y;\r\n\r\n    triangle.x1 = tx * c - ty * s + x;\r\n    triangle.y1 = tx * s + ty * c + y;\r\n\r\n    tx = triangle.x2 - x;\r\n    ty = triangle.y2 - y;\r\n\r\n    triangle.x2 = tx * c - ty * s + x;\r\n    triangle.y2 = tx * s + ty * c + y;\r\n\r\n    tx = triangle.x3 - x;\r\n    ty = triangle.y3 - y;\r\n\r\n    triangle.x3 = tx * c - ty * s + x;\r\n    triangle.y3 = tx * s + ty * c + y;\r\n\r\n    return triangle;\r\n};\r\n\r\nmodule.exports = RotateAroundXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFhZLmpzP2RiNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhbiBlbnRpcmUgVHJpYW5nbGUgYXQgYSBnaXZlbiBhbmdsZSBhYm91dCBhIHNwZWNpZmljIHBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuUm90YXRlQXJvdW5kWFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gTyAtIFt0cmlhbmdsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gcm90YXRlIHRoZSBUcmlhbmdsZSBhYm91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byByb3RhdGUgdGhlIFRyaWFuZ2xlIGFib3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgYnkgd2hpY2ggdG8gcm90YXRlIHRoZSBUcmlhbmdsZSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSByb3RhdGVkIFRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB4LCB5LCBhbmdsZSlcclxue1xyXG4gICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcbiAgICB2YXIgdHggPSB0cmlhbmdsZS54MSAtIHg7XHJcbiAgICB2YXIgdHkgPSB0cmlhbmdsZS55MSAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDEgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTEgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHR4ID0gdHJpYW5nbGUueDIgLSB4O1xyXG4gICAgdHkgPSB0cmlhbmdsZS55MiAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDIgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTIgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHR4ID0gdHJpYW5nbGUueDMgLSB4O1xyXG4gICAgdHkgPSB0cmlhbmdsZS55MyAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDMgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTMgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHJldHVybiB0cmlhbmdsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlQXJvdW5kWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/Triangle.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/Triangle.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/triangle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/triangle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A triangle is a plane created by connecting three points.\r\n * The first two arguments specify the first point, the middle two arguments\r\n * specify the second point, and the last two arguments specify the third point.\r\n *\r\n * @class Triangle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - `x` coordinate of the first point.\r\n * @param {number} [y1=0] - `y` coordinate of the first point.\r\n * @param {number} [x2=0] - `x` coordinate of the second point.\r\n * @param {number} [y2=0] - `y` coordinate of the second point.\r\n * @param {number} [x3=0] - `x` coordinate of the third point.\r\n * @param {number} [y3=0] - `y` coordinate of the third point.\r\n */\r\nvar Triangle = new Class({\r\n\r\n    initialize:\r\n\r\n    function Triangle (x1, y1, x2, y2, x3, y3)\r\n    {\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 0; }\r\n        if (x2 === undefined) { x2 = 0; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n        if (x3 === undefined) { x3 = 0; }\r\n        if (y3 === undefined) { y3 = 0; }\r\n\r\n        /**\r\n         * The geometry constant type of this object: `GEOM_CONST.TRIANGLE`.\r\n         * Used for fast type comparisons.\r\n         *\r\n         * @name Phaser.Geom.Triangle#type\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.type = GEOM_CONST.TRIANGLE;\r\n\r\n        /**\r\n         * `x` coordinate of the first point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#x1\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x1 = x1;\r\n\r\n        /**\r\n         * `y` coordinate of the first point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#y1\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y1 = y1;\r\n\r\n        /**\r\n         * `x` coordinate of the second point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#x2\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x2 = x2;\r\n\r\n        /**\r\n         * `y` coordinate of the second point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#y2\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y2 = y2;\r\n\r\n        /**\r\n         * `x` coordinate of the third point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#x3\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x3 = x3;\r\n\r\n        /**\r\n         * `y` coordinate of the third point.\r\n         *\r\n         * @name Phaser.Geom.Triangle#y3\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y3 = y3;\r\n    },\r\n\r\n    /**\r\n     * Checks whether a given points lies within the triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate of the point to check.\r\n     * @param {number} y - The y coordinate of the point to check.\r\n     *\r\n     * @return {boolean} `true` if the coordinate pair is within the triangle, otherwise `false`.\r\n     */\r\n    contains: function (x, y)\r\n    {\r\n        return Contains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * Returns a specific point  on the triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#getPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [output,$return]\r\n     *\r\n     * @param {number} position - Position as float within `0` and `1`. `0` equals the first point.\r\n     * @param {(Phaser.Geom.Point|object)} [output] - Optional Point, or point-like object, that the calculated point will be written to.\r\n     *\r\n     * @return {(Phaser.Geom.Point|object)} Calculated `Point` that represents the requested position. It is the same as `output` when this parameter has been given.\r\n     */\r\n    getPoint: function (position, output)\r\n    {\r\n        return GetPoint(this, position, output);\r\n    },\r\n\r\n    /**\r\n     * Calculates a list of evenly distributed points on the triangle. It is either possible to pass an amount of points to be generated (`quantity`) or the distance between two points (`stepRate`).\r\n     *\r\n     * @method Phaser.Geom.Triangle#getPoints\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n     *\r\n     * @param {integer} quantity - Number of points to be generated. Can be falsey when `stepRate` should be used. All points have the same distance along the triangle.\r\n     * @param {number} [stepRate] - Distance between two points. Will only be used when `quantity` is falsey.\r\n     * @param {(array|Phaser.Geom.Point[])} [output] - Optional Array for writing the calculated points into. Otherwise a new array will be created.\r\n     *\r\n     * @return {(array|Phaser.Geom.Point[])} Returns a list of calculated `Point` instances or the filled array passed as parameter `output`.\r\n     */\r\n    getPoints: function (quantity, stepRate, output)\r\n    {\r\n        return GetPoints(this, quantity, stepRate, output);\r\n    },\r\n\r\n    /**\r\n     * Returns a random point along the triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#getRandomPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Point} O - [point,$return]\r\n     *\r\n     * @param {Phaser.Geom.Point} [point] - Optional `Point` that should be modified. Otherwise a new one will be created.\r\n     *\r\n     * @return {Phaser.Geom.Point} Random `Point`. When parameter `point` has been provided it will be returned.\r\n     */\r\n    getRandomPoint: function (point)\r\n    {\r\n        return Random(this, point);\r\n    },\r\n\r\n    /**\r\n     * Sets all three points of the triangle. Leaving out any coordinate sets it to be `0`.\r\n     *\r\n     * @method Phaser.Geom.Triangle#setTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x1=0] - `x` coordinate of the first point.\r\n     * @param {number} [y1=0] - `y` coordinate of the first point.\r\n     * @param {number} [x2=0] - `x` coordinate of the second point.\r\n     * @param {number} [y2=0] - `y` coordinate of the second point.\r\n     * @param {number} [x3=0] - `x` coordinate of the third point.\r\n     * @param {number} [y3=0] - `y` coordinate of the third point.\r\n     *\r\n     * @return {Phaser.Geom.Triangle} This Triangle object.\r\n     */\r\n    setTo: function (x1, y1, x2, y2, x3, y3)\r\n    {\r\n        if (x1 === undefined) { x1 = 0; }\r\n        if (y1 === undefined) { y1 = 0; }\r\n        if (x2 === undefined) { x2 = 0; }\r\n        if (y2 === undefined) { y2 = 0; }\r\n        if (x3 === undefined) { x3 = 0; }\r\n        if (y3 === undefined) { y3 = 0; }\r\n\r\n        this.x1 = x1;\r\n        this.y1 = y1;\r\n\r\n        this.x2 = x2;\r\n        this.y2 = y2;\r\n\r\n        this.x3 = x3;\r\n        this.y3 = y3;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to Line A of this Triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#getLineA\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to line A of this Triangle.\r\n     */\r\n    getLineA: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.x1, this.y1, this.x2, this.y2);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to Line B of this Triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#getLineB\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to line B of this Triangle.\r\n     */\r\n    getLineB: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.x2, this.y2, this.x3, this.y3);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Returns a Line object that corresponds to Line C of this Triangle.\r\n     *\r\n     * @method Phaser.Geom.Triangle#getLineC\r\n     * @since 3.0.0\r\n     *\r\n     * @generic {Phaser.Geom.Line} O - [line,$return]\r\n     *\r\n     * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n     *\r\n     * @return {Phaser.Geom.Line} A Line object that corresponds to line C of this Triangle.\r\n     */\r\n    getLineC: function (line)\r\n    {\r\n        if (line === undefined) { line = new Line(); }\r\n\r\n        line.setTo(this.x3, this.y3, this.x1, this.y1);\r\n\r\n        return line;\r\n    },\r\n\r\n    /**\r\n     * Left most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.\r\n     *\r\n     * @name Phaser.Geom.Triangle#left\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.min(this.x1, this.x2, this.x3);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var diff = 0;\r\n\r\n            if (this.x1 <= this.x2 && this.x1 <= this.x3)\r\n            {\r\n                diff = this.x1 - value;\r\n            }\r\n            else if (this.x2 <= this.x1 && this.x2 <= this.x3)\r\n            {\r\n                diff = this.x2 - value;\r\n            }\r\n            else\r\n            {\r\n                diff = this.x3 - value;\r\n            }\r\n\r\n            this.x1 -= diff;\r\n            this.x2 -= diff;\r\n            this.x3 -= diff;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Right most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.\r\n     *\r\n     * @name Phaser.Geom.Triangle#right\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.max(this.x1, this.x2, this.x3);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var diff = 0;\r\n\r\n            if (this.x1 >= this.x2 && this.x1 >= this.x3)\r\n            {\r\n                diff = this.x1 - value;\r\n            }\r\n            else if (this.x2 >= this.x1 && this.x2 >= this.x3)\r\n            {\r\n                diff = this.x2 - value;\r\n            }\r\n            else\r\n            {\r\n                diff = this.x3 - value;\r\n            }\r\n\r\n            this.x1 -= diff;\r\n            this.x2 -= diff;\r\n            this.x3 -= diff;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Top most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.\r\n     *\r\n     * @name Phaser.Geom.Triangle#top\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.min(this.y1, this.y2, this.y3);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var diff = 0;\r\n\r\n            if (this.y1 <= this.y2 && this.y1 <= this.y3)\r\n            {\r\n                diff = this.y1 - value;\r\n            }\r\n            else if (this.y2 <= this.y1 && this.y2 <= this.y3)\r\n            {\r\n                diff = this.y2 - value;\r\n            }\r\n            else\r\n            {\r\n                diff = this.y3 - value;\r\n            }\r\n\r\n            this.y1 -= diff;\r\n            this.y2 -= diff;\r\n            this.y3 -= diff;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Bottom most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.\r\n     *\r\n     * @name Phaser.Geom.Triangle#bottom\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return Math.max(this.y1, this.y2, this.y3);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var diff = 0;\r\n\r\n            if (this.y1 >= this.y2 && this.y1 >= this.y3)\r\n            {\r\n                diff = this.y1 - value;\r\n            }\r\n            else if (this.y2 >= this.y1 && this.y2 >= this.y3)\r\n            {\r\n                diff = this.y2 - value;\r\n            }\r\n            else\r\n            {\r\n                diff = this.y3 - value;\r\n            }\r\n\r\n            this.y1 -= diff;\r\n            this.y2 -= diff;\r\n            this.y3 -= diff;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1RyaWFuZ2xlLmpzP2Y2YmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVFQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyx5RUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTtBQUNuQyxXQUFXLG1CQUFPLENBQUMsaUVBQWM7QUFDakMsYUFBYSxtQkFBTyxDQUFDLG1FQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFROztBQUV2QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBMaW5lID0gcmVxdWlyZSgnLi4vbGluZS9MaW5lJyk7XHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSB0cmlhbmdsZSBpcyBhIHBsYW5lIGNyZWF0ZWQgYnkgY29ubmVjdGluZyB0aHJlZSBwb2ludHMuXHJcbiAqIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIHNwZWNpZnkgdGhlIGZpcnN0IHBvaW50LCB0aGUgbWlkZGxlIHR3byBhcmd1bWVudHNcclxuICogc3BlY2lmeSB0aGUgc2Vjb25kIHBvaW50LCBhbmQgdGhlIGxhc3QgdHdvIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSB0aGlyZCBwb2ludC5cclxuICpcclxuICogQGNsYXNzIFRyaWFuZ2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDE9MF0gLSBgeGAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBgeGAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gYHlgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mz0wXSAtIGB5YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICovXHJcbnZhciBUcmlhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUcmlhbmdsZSAoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MylcclxuICAgIHtcclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDA7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuICAgICAgICBpZiAoeDMgPT09IHVuZGVmaW5lZCkgeyB4MyA9IDA7IH1cclxuICAgICAgICBpZiAoeTMgPT09IHVuZGVmaW5lZCkgeyB5MyA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULlRSSUFOR0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdFT01fQ09OU1QuVFJJQU5HTEU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGB4YCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gxXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MSA9IHgxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN5MVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTEgPSB5MTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MiA9IHgyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjeTJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MyA9IHgzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN5M1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTMgPSB5MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHBvaW50cyBsaWVzIHdpdGhpbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byBjaGVjay5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjb29yZGluYXRlIHBhaXIgaXMgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQ29udGFpbnModGhpcywgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHNwZWNpZmljIHBvaW50ICBvbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFBvc2l0aW9uIGFzIGZsb2F0IHdpdGhpbiBgMGAgYW5kIGAxYC4gYDBgIGVxdWFscyB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0cHV0XSAtIE9wdGlvbmFsIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgdGhhdCB0aGUgY2FsY3VsYXRlZCBwb2ludCB3aWxsIGJlIHdyaXR0ZW4gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IENhbGN1bGF0ZWQgYFBvaW50YCB0aGF0IHJlcHJlc2VudHMgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbi4gSXQgaXMgdGhlIHNhbWUgYXMgYG91dHB1dGAgd2hlbiB0aGlzIHBhcmFtZXRlciBoYXMgYmVlbiBnaXZlbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludCh0aGlzLCBwb3NpdGlvbiwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgbGlzdCBvZiBldmVubHkgZGlzdHJpYnV0ZWQgcG9pbnRzIG9uIHRoZSB0cmlhbmdsZS4gSXQgaXMgZWl0aGVyIHBvc3NpYmxlIHRvIHBhc3MgYW4gYW1vdW50IG9mIHBvaW50cyB0byBiZSBnZW5lcmF0ZWQgKGBxdWFudGl0eWApIG9yIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMgKGBzdGVwUmF0ZWApLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gTnVtYmVyIG9mIHBvaW50cyB0byBiZSBnZW5lcmF0ZWQuIENhbiBiZSBmYWxzZXkgd2hlbiBgc3RlcFJhdGVgIHNob3VsZCBiZSB1c2VkLiBBbGwgcG9pbnRzIGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UgYWxvbmcgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwUmF0ZV0gLSBEaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuIFdpbGwgb25seSBiZSB1c2VkIHdoZW4gYHF1YW50aXR5YCBpcyBmYWxzZXkuXHJcbiAgICAgKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dHB1dF0gLSBPcHRpb25hbCBBcnJheSBmb3Igd3JpdGluZyB0aGUgY2FsY3VsYXRlZCBwb2ludHMgaW50by4gT3RoZXJ3aXNlIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFJldHVybnMgYSBsaXN0IG9mIGNhbGN1bGF0ZWQgYFBvaW50YCBpbnN0YW5jZXMgb3IgdGhlIGZpbGxlZCBhcnJheSBwYXNzZWQgYXMgcGFyYW1ldGVyIGBvdXRwdXRgLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHBvaW50IGFsb25nIHRoZSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlRyaWFuZ2xlI2dldFJhbmRvbVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbcG9pbnRdIC0gT3B0aW9uYWwgYFBvaW50YCB0aGF0IHNob3VsZCBiZSBtb2RpZmllZC4gT3RoZXJ3aXNlIGEgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFJhbmRvbSBgUG9pbnRgLiBXaGVuIHBhcmFtZXRlciBgcG9pbnRgIGhhcyBiZWVuIHByb3ZpZGVkIGl0IHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAocG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFJhbmRvbSh0aGlzLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhbGwgdGhyZWUgcG9pbnRzIG9mIHRoZSB0cmlhbmdsZS4gTGVhdmluZyBvdXQgYW55IGNvb3JkaW5hdGUgc2V0cyBpdCB0byBiZSBgMGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNzZXRUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gyPTBdIC0gYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTM9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoaXMgVHJpYW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHgxID09PSB1bmRlZmluZWQpIHsgeDEgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkxID09PSB1bmRlZmluZWQpIHsgeTEgPSAwOyB9XHJcbiAgICAgICAgaWYgKHgyID09PSB1bmRlZmluZWQpIHsgeDIgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkyID09PSB1bmRlZmluZWQpIHsgeTIgPSAwOyB9XHJcbiAgICAgICAgaWYgKHgzID09PSB1bmRlZmluZWQpIHsgeDMgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkzID09PSB1bmRlZmluZWQpIHsgeTMgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMueDEgPSB4MTtcclxuICAgICAgICB0aGlzLnkxID0geTE7XHJcblxyXG4gICAgICAgIHRoaXMueDIgPSB4MjtcclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcblxyXG4gICAgICAgIHRoaXMueDMgPSB4MztcclxuICAgICAgICB0aGlzLnkzID0geTM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQSBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBBIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVBOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MSwgdGhpcy55MSwgdGhpcy54MiwgdGhpcy55Mik7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQiBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBCIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVCOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MiwgdGhpcy55MiwgdGhpcy54MywgdGhpcy55Myk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQyBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBDIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVDOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MywgdGhpcy55MywgdGhpcy54MSwgdGhpcy55MSk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExlZnQgbW9zdCBYIGNvb3JkaW5hdGUgb2YgdGhlIHRyaWFuZ2xlLiBTZXR0aW5nIGl0IG1vdmVzIHRoZSB0cmlhbmdsZSBvbiB0aGUgWCBheGlzIGFjY29yZGluZ2x5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy54MSwgdGhpcy54MiwgdGhpcy54Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy54MSA8PSB0aGlzLngyICYmIHRoaXMueDEgPD0gdGhpcy54MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLngyIDw9IHRoaXMueDEgJiYgdGhpcy54MiA8PSB0aGlzLngzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy54MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLngyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueDMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpZ2h0IG1vc3QgWCBjb29yZGluYXRlIG9mIHRoZSB0cmlhbmdsZS4gU2V0dGluZyBpdCBtb3ZlcyB0aGUgdHJpYW5nbGUgb24gdGhlIFggYXhpcyBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSNyaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy54MSwgdGhpcy54MiwgdGhpcy54Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy54MSA+PSB0aGlzLngyICYmIHRoaXMueDEgPj0gdGhpcy54MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLngyID49IHRoaXMueDEgJiYgdGhpcy54MiA+PSB0aGlzLngzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy54MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLngyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueDMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvcCBtb3N0IFkgY29vcmRpbmF0ZSBvZiB0aGUgdHJpYW5nbGUuIFNldHRpbmcgaXQgbW92ZXMgdGhlIHRyaWFuZ2xlIG9uIHRoZSBZIGF4aXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjdG9wXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRvcDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy55MSwgdGhpcy55MiwgdGhpcy55Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy55MSA8PSB0aGlzLnkyICYmIHRoaXMueTEgPD0gdGhpcy55MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnkyIDw9IHRoaXMueTEgJiYgdGhpcy55MiA8PSB0aGlzLnkzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy55MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy55MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLnkyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueTMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdHRvbSBtb3N0IFkgY29vcmRpbmF0ZSBvZiB0aGUgdHJpYW5nbGUuIFNldHRpbmcgaXQgbW92ZXMgdGhlIHRyaWFuZ2xlIG9uIHRoZSBZIGF4aXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjYm90dG9tXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy55MSwgdGhpcy55MiwgdGhpcy55Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy55MSA+PSB0aGlzLnkyICYmIHRoaXMueTEgPj0gdGhpcy55MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnkyID49IHRoaXMueTEgJiYgdGhpcy55MiA+PSB0aGlzLnkzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy55MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy55MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLnkyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueTMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Triangle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/geom/triangle/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/geom/triangle/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\nTriangle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/triangle/Area.js\");\r\nTriangle.BuildEquilateral = __webpack_require__(/*! ./BuildEquilateral */ \"./node_modules/phaser/src/geom/triangle/BuildEquilateral.js\");\r\nTriangle.BuildFromPolygon = __webpack_require__(/*! ./BuildFromPolygon */ \"./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js\");\r\nTriangle.BuildRight = __webpack_require__(/*! ./BuildRight */ \"./node_modules/phaser/src/geom/triangle/BuildRight.js\");\r\nTriangle.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/triangle/CenterOn.js\");\r\nTriangle.Centroid = __webpack_require__(/*! ./Centroid */ \"./node_modules/phaser/src/geom/triangle/Centroid.js\");\r\nTriangle.CircumCenter = __webpack_require__(/*! ./CircumCenter */ \"./node_modules/phaser/src/geom/triangle/CircumCenter.js\");\r\nTriangle.CircumCircle = __webpack_require__(/*! ./CircumCircle */ \"./node_modules/phaser/src/geom/triangle/CircumCircle.js\");\r\nTriangle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/triangle/Clone.js\");\r\nTriangle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nTriangle.ContainsArray = __webpack_require__(/*! ./ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nTriangle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/triangle/ContainsPoint.js\");\r\nTriangle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/triangle/CopyFrom.js\");\r\nTriangle.Decompose = __webpack_require__(/*! ./Decompose */ \"./node_modules/phaser/src/geom/triangle/Decompose.js\");\r\nTriangle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/triangle/Equals.js\");\r\nTriangle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/triangle/GetPoint.js\");\r\nTriangle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/triangle/GetPoints.js\");\r\nTriangle.InCenter = __webpack_require__(/*! ./InCenter */ \"./node_modules/phaser/src/geom/triangle/InCenter.js\");\r\nTriangle.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/triangle/Perimeter.js\");\r\nTriangle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/triangle/Offset.js\");\r\nTriangle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\nTriangle.Rotate = __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/geom/triangle/Rotate.js\");\r\nTriangle.RotateAroundPoint = __webpack_require__(/*! ./RotateAroundPoint */ \"./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js\");\r\nTriangle.RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL2luZGV4LmpzPzVhMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkMsZ0JBQWdCLG1CQUFPLENBQUMsK0RBQVE7QUFDaEMsNEJBQTRCLG1CQUFPLENBQUMsdUZBQW9CO0FBQ3hELDRCQUE0QixtQkFBTyxDQUFDLHVGQUFvQjtBQUN4RCxzQkFBc0IsbUJBQU8sQ0FBQywyRUFBYztBQUM1QyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBWTtBQUN4QyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBWTtBQUN4Qyx3QkFBd0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsK0VBQWdCO0FBQ2hELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFTO0FBQ2xDLG9CQUFvQixtQkFBTyxDQUFDLHVFQUFZO0FBQ3hDLHlCQUF5QixtQkFBTyxDQUFDLGlGQUFpQjtBQUNsRCx5QkFBeUIsbUJBQU8sQ0FBQyxpRkFBaUI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsNkJBQTZCLG1CQUFPLENBQUMseUZBQXFCO0FBQzFELDBCQUEwQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFcEQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVHJpYW5nbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlJyk7XHJcblxyXG5UcmlhbmdsZS5BcmVhID0gcmVxdWlyZSgnLi9BcmVhJyk7XHJcblRyaWFuZ2xlLkJ1aWxkRXF1aWxhdGVyYWwgPSByZXF1aXJlKCcuL0J1aWxkRXF1aWxhdGVyYWwnKTtcclxuVHJpYW5nbGUuQnVpbGRGcm9tUG9seWdvbiA9IHJlcXVpcmUoJy4vQnVpbGRGcm9tUG9seWdvbicpO1xyXG5UcmlhbmdsZS5CdWlsZFJpZ2h0ID0gcmVxdWlyZSgnLi9CdWlsZFJpZ2h0Jyk7XHJcblRyaWFuZ2xlLkNlbnRlck9uID0gcmVxdWlyZSgnLi9DZW50ZXJPbicpO1xyXG5UcmlhbmdsZS5DZW50cm9pZCA9IHJlcXVpcmUoJy4vQ2VudHJvaWQnKTtcclxuVHJpYW5nbGUuQ2lyY3VtQ2VudGVyID0gcmVxdWlyZSgnLi9DaXJjdW1DZW50ZXInKTtcclxuVHJpYW5nbGUuQ2lyY3VtQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjdW1DaXJjbGUnKTtcclxuVHJpYW5nbGUuQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcblRyaWFuZ2xlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5UcmlhbmdsZS5Db250YWluc0FycmF5ID0gcmVxdWlyZSgnLi9Db250YWluc0FycmF5Jyk7XHJcblRyaWFuZ2xlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuVHJpYW5nbGUuQ29weUZyb20gPSByZXF1aXJlKCcuL0NvcHlGcm9tJyk7XHJcblRyaWFuZ2xlLkRlY29tcG9zZSA9IHJlcXVpcmUoJy4vRGVjb21wb3NlJyk7XHJcblRyaWFuZ2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblRyaWFuZ2xlLkdldFBvaW50ID0gcmVxdWlyZSgnLi9HZXRQb2ludCcpO1xyXG5UcmlhbmdsZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5UcmlhbmdsZS5JbkNlbnRlciA9IHJlcXVpcmUoJy4vSW5DZW50ZXInKTtcclxuVHJpYW5nbGUuUGVyaW1ldGVyID0gcmVxdWlyZSgnLi9QZXJpbWV0ZXInKTtcclxuVHJpYW5nbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuVHJpYW5nbGUuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuVHJpYW5nbGUuUm90YXRlID0gcmVxdWlyZSgnLi9Sb3RhdGUnKTtcclxuVHJpYW5nbGUuUm90YXRlQXJvdW5kUG9pbnQgPSByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZFBvaW50Jyk7XHJcblRyaWFuZ2xlLlJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/CreateInteractiveObject.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/CreateInteractiveObject.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates a new Interactive Object.\r\n * \r\n * This is called automatically by the Input Manager when you enable a Game Object for input.\r\n *\r\n * The resulting Interactive Object is mapped to the Game Object's `input` property.\r\n *\r\n * @function Phaser.Input.CreateInteractiveObject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to which this Interactive Object is bound.\r\n * @param {any} hitArea - The hit area for this Interactive Object. Typically a geometry shape, like a Rectangle or Circle.\r\n * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - The 'contains' check callback that the hit area shape will use for all hit tests.\r\n *\r\n * @return {Phaser.Types.Input.InteractiveObject} The new Interactive Object.\r\n */\r\nvar CreateInteractiveObject = function (gameObject, hitArea, hitAreaCallback)\r\n{\r\n    return {\r\n\r\n        gameObject: gameObject,\r\n\r\n        enabled: true,\r\n        alwaysEnabled: false,\r\n        draggable: false,\r\n        dropZone: false,\r\n        cursor: false,\r\n\r\n        target: null,\r\n\r\n        camera: null,\r\n\r\n        hitArea: hitArea,\r\n        hitAreaCallback: hitAreaCallback,\r\n        hitAreaDebug: null,\r\n\r\n        //  Has the dev specified their own shape, or is this bound to the texture size?\r\n        customHitArea: false,\r\n\r\n        localX: 0,\r\n        localY: 0,\r\n\r\n        //  0 = Not being dragged\r\n        //  1 = Being checked for dragging\r\n        //  2 = Being dragged\r\n        dragState: 0,\r\n\r\n        dragStartX: 0,\r\n        dragStartY: 0,\r\n        dragStartXGlobal: 0,\r\n        dragStartYGlobal: 0,\r\n\r\n        dragX: 0,\r\n        dragY: 0\r\n\r\n    };\r\n};\r\n\r\nmodule.exports = CreateInteractiveObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9DcmVhdGVJbnRlcmFjdGl2ZU9iamVjdC5qcz85MjE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsSUFBSTtBQUNmLFdBQVcsbUNBQW1DO0FBQzlDO0FBQ0EsWUFBWSxxQ0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0NyZWF0ZUludGVyYWN0aXZlT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBJbnRlcmFjdGl2ZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4geW91IGVuYWJsZSBhIEdhbWUgT2JqZWN0IGZvciBpbnB1dC5cclxuICpcclxuICogVGhlIHJlc3VsdGluZyBJbnRlcmFjdGl2ZSBPYmplY3QgaXMgbWFwcGVkIHRvIHRoZSBHYW1lIE9iamVjdCdzIGBpbnB1dGAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuQ3JlYXRlSW50ZXJhY3RpdmVPYmplY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gd2hpY2ggdGhpcyBJbnRlcmFjdGl2ZSBPYmplY3QgaXMgYm91bmQuXHJcbiAqIEBwYXJhbSB7YW55fSBoaXRBcmVhIC0gVGhlIGhpdCBhcmVhIGZvciB0aGlzIEludGVyYWN0aXZlIE9iamVjdC4gVHlwaWNhbGx5IGEgZ2VvbWV0cnkgc2hhcGUsIGxpa2UgYSBSZWN0YW5nbGUgb3IgQ2lyY2xlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIFRoZSAnY29udGFpbnMnIGNoZWNrIGNhbGxiYWNrIHRoYXQgdGhlIGhpdCBhcmVhIHNoYXBlIHdpbGwgdXNlIGZvciBhbGwgaGl0IHRlc3RzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuSW5wdXQuSW50ZXJhY3RpdmVPYmplY3R9IFRoZSBuZXcgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gKi9cclxudmFyIENyZWF0ZUludGVyYWN0aXZlT2JqZWN0ID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjaylcclxue1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdDogZ2FtZU9iamVjdCxcclxuXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBhbHdheXNFbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxyXG4gICAgICAgIGRyb3Bab25lOiBmYWxzZSxcclxuICAgICAgICBjdXJzb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIGNhbWVyYTogbnVsbCxcclxuXHJcbiAgICAgICAgaGl0QXJlYTogaGl0QXJlYSxcclxuICAgICAgICBoaXRBcmVhQ2FsbGJhY2s6IGhpdEFyZWFDYWxsYmFjayxcclxuICAgICAgICBoaXRBcmVhRGVidWc6IG51bGwsXHJcblxyXG4gICAgICAgIC8vICBIYXMgdGhlIGRldiBzcGVjaWZpZWQgdGhlaXIgb3duIHNoYXBlLCBvciBpcyB0aGlzIGJvdW5kIHRvIHRoZSB0ZXh0dXJlIHNpemU/XHJcbiAgICAgICAgY3VzdG9tSGl0QXJlYTogZmFsc2UsXHJcblxyXG4gICAgICAgIGxvY2FsWDogMCxcclxuICAgICAgICBsb2NhbFk6IDAsXHJcblxyXG4gICAgICAgIC8vICAwID0gTm90IGJlaW5nIGRyYWdnZWRcclxuICAgICAgICAvLyAgMSA9IEJlaW5nIGNoZWNrZWQgZm9yIGRyYWdnaW5nXHJcbiAgICAgICAgLy8gIDIgPSBCZWluZyBkcmFnZ2VkXHJcbiAgICAgICAgZHJhZ1N0YXRlOiAwLFxyXG5cclxuICAgICAgICBkcmFnU3RhcnRYOiAwLFxyXG4gICAgICAgIGRyYWdTdGFydFk6IDAsXHJcbiAgICAgICAgZHJhZ1N0YXJ0WEdsb2JhbDogMCxcclxuICAgICAgICBkcmFnU3RhcnRZR2xvYmFsOiAwLFxyXG5cclxuICAgICAgICBkcmFnWDogMCxcclxuICAgICAgICBkcmFnWTogMFxyXG5cclxuICAgIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUludGVyYWN0aXZlT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/CreateInteractiveObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/CreatePixelPerfectHandler.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/input/CreatePixelPerfectHandler.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates a new Pixel Perfect Handler function.\r\n *\r\n * Access via `InputPlugin.makePixelPerfect` rather than calling it directly.\r\n *\r\n * @function Phaser.Input.CreatePixelPerfectHandler\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Textures.TextureManager} textureManager - A reference to the Texture Manager.\r\n * @param {integer} alphaTolerance - The alpha level that the pixel should be above to be included as a successful interaction.\r\n *\r\n * @return {function} The new Pixel Perfect Handler function.\r\n */\r\nvar CreatePixelPerfectHandler = function (textureManager, alphaTolerance)\r\n{\r\n    return function (hitArea, x, y, gameObject)\r\n    {\r\n        var alpha = textureManager.getPixelAlpha(x, y, gameObject.texture.key, gameObject.frame.name);\r\n\r\n        return (alpha && alpha >= alphaTolerance);\r\n    };\r\n};\r\n\r\nmodule.exports = CreatePixelPerfectHandler;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyLmpzPzFhMTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0NyZWF0ZVBpeGVsUGVyZmVjdEhhbmRsZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBpeGVsIFBlcmZlY3QgSGFuZGxlciBmdW5jdGlvbi5cclxuICpcclxuICogQWNjZXNzIHZpYSBgSW5wdXRQbHVnaW4ubWFrZVBpeGVsUGVyZmVjdGAgcmF0aGVyIHRoYW4gY2FsbGluZyBpdCBkaXJlY3RseS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9IHRleHR1cmVNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbHBoYVRvbGVyYW5jZSAtIFRoZSBhbHBoYSBsZXZlbCB0aGF0IHRoZSBwaXhlbCBzaG91bGQgYmUgYWJvdmUgdG8gYmUgaW5jbHVkZWQgYXMgYSBzdWNjZXNzZnVsIGludGVyYWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIG5ldyBQaXhlbCBQZXJmZWN0IEhhbmRsZXIgZnVuY3Rpb24uXHJcbiAqL1xyXG52YXIgQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlciA9IGZ1bmN0aW9uICh0ZXh0dXJlTWFuYWdlciwgYWxwaGFUb2xlcmFuY2UpXHJcbntcclxuICAgIHJldHVybiBmdW5jdGlvbiAoaGl0QXJlYSwgeCwgeSwgZ2FtZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICB2YXIgYWxwaGEgPSB0ZXh0dXJlTWFuYWdlci5nZXRQaXhlbEFscGhhKHgsIHksIGdhbWVPYmplY3QudGV4dHVyZS5rZXksIGdhbWVPYmplY3QuZnJhbWUubmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoYWxwaGEgJiYgYWxwaGEgPj0gYWxwaGFUb2xlcmFuY2UpO1xyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/CreatePixelPerfectHandler.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/InputManager.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/input/InputManager.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar Keyboard = __webpack_require__(/*! ./keyboard/KeyboardManager */ \"./node_modules/phaser/src/input/keyboard/KeyboardManager.js\");\r\nvar Mouse = __webpack_require__(/*! ./mouse/MouseManager */ \"./node_modules/phaser/src/input/mouse/MouseManager.js\");\r\nvar Pointer = __webpack_require__(/*! ./Pointer */ \"./node_modules/phaser/src/input/Pointer.js\");\r\nvar Touch = __webpack_require__(/*! ./touch/TouchManager */ \"./node_modules/phaser/src/input/touch/TouchManager.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar TransformXY = __webpack_require__(/*! ../math/TransformXY */ \"./node_modules/phaser/src/math/TransformXY.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Input Manager is responsible for handling the pointer related systems in a single Phaser Game instance.\r\n *\r\n * Based on the Game Config it will create handlers for mouse and touch support.\r\n *\r\n * Keyboard and Gamepad are plugins, handled directly by the InputPlugin class.\r\n *\r\n * It then manages the events, pointer creation and general hit test related operations.\r\n *\r\n * You rarely need to interact with the Input Manager directly, and as such, all of its properties and methods\r\n * should be considered private. Instead, you should use the Input Plugin, which is a Scene level system, responsible\r\n * for dealing with all input events for a Scene.\r\n *\r\n * @class InputManager\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Game instance that owns the Input Manager.\r\n * @param {object} config - The Input Configuration object, as set in the Game Config.\r\n */\r\nvar InputManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function InputManager (game, config)\r\n    {\r\n        /**\r\n         * The Game instance that owns the Input Manager.\r\n         * A Game only maintains on instance of the Input Manager at any time.\r\n         *\r\n         * @name Phaser.Input.InputManager#game\r\n         * @type {Phaser.Game}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A reference to the global Game Scale Manager.\r\n         * Used for all bounds checks and pointer scaling.\r\n         *\r\n         * @name Phaser.Input.InputManager#scaleManager\r\n         * @type {Phaser.Scale.ScaleManager}\r\n         * @since 3.16.0\r\n         */\r\n        this.scaleManager;\r\n\r\n        /**\r\n         * The Canvas that is used for all DOM event input listeners.\r\n         *\r\n         * @name Phaser.Input.InputManager#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.canvas;\r\n\r\n        /**\r\n         * The Game Configuration object, as set during the game boot.\r\n         *\r\n         * @name Phaser.Input.InputManager#config\r\n         * @type {Phaser.Core.Config}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = config;\r\n\r\n        /**\r\n         * If set, the Input Manager will run its update loop every frame.\r\n         *\r\n         * @name Phaser.Input.InputManager#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * The Event Emitter instance that the Input Manager uses to emit events from.\r\n         *\r\n         * @name Phaser.Input.InputManager#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = new EventEmitter();\r\n\r\n        /**\r\n         * Are any mouse or touch pointers currently over the game canvas?\r\n         * This is updated automatically by the canvas over and out handlers.\r\n         *\r\n         * @name Phaser.Input.InputManager#isOver\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.isOver = true;\r\n\r\n        /**\r\n         * The default CSS cursor to be used when interacting with your game.\r\n         *\r\n         * See the `setDefaultCursor` method for more details.\r\n         *\r\n         * @name Phaser.Input.InputManager#defaultCursor\r\n         * @type {string}\r\n         * @since 3.10.0\r\n         */\r\n        this.defaultCursor = '';\r\n\r\n        /**\r\n         * A reference to the Keyboard Manager class, if enabled via the `input.keyboard` Game Config property.\r\n         *\r\n         * @name Phaser.Input.InputManager#keyboard\r\n         * @type {?Phaser.Input.Keyboard.KeyboardManager}\r\n         * @since 3.16.0\r\n         */\r\n        this.keyboard = (config.inputKeyboard) ? new Keyboard(this) : null;\r\n\r\n        /**\r\n         * A reference to the Mouse Manager class, if enabled via the `input.mouse` Game Config property.\r\n         *\r\n         * @name Phaser.Input.InputManager#mouse\r\n         * @type {?Phaser.Input.Mouse.MouseManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.mouse = (config.inputMouse) ? new Mouse(this) : null;\r\n\r\n        /**\r\n         * A reference to the Touch Manager class, if enabled via the `input.touch` Game Config property.\r\n         *\r\n         * @name Phaser.Input.InputManager#touch\r\n         * @type {Phaser.Input.Touch.TouchManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.touch = (config.inputTouch) ? new Touch(this) : null;\r\n\r\n        /**\r\n         * An array of Pointers that have been added to the game.\r\n         * The first entry is reserved for the Mouse Pointer, the rest are Touch Pointers.\r\n         *\r\n         * By default there is 1 touch pointer enabled. If you need more use the `addPointer` method to start them,\r\n         * or set the `input.activePointers` property in the Game Config.\r\n         *\r\n         * @name Phaser.Input.InputManager#pointers\r\n         * @type {Phaser.Input.Pointer[]}\r\n         * @since 3.10.0\r\n         */\r\n        this.pointers = [];\r\n\r\n        /**\r\n         * The number of touch objects activated and being processed each update.\r\n         *\r\n         * You can change this by either calling `addPointer` at run-time, or by\r\n         * setting the `input.activePointers` property in the Game Config.\r\n         *\r\n         * @name Phaser.Input.InputManager#pointersTotal\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.10.0\r\n         */\r\n        this.pointersTotal = config.inputActivePointers;\r\n\r\n        if (config.inputTouch && this.pointersTotal === 1)\r\n        {\r\n            this.pointersTotal = 2;\r\n        }\r\n\r\n        for (var i = 0; i <= this.pointersTotal; i++)\r\n        {\r\n            var pointer = new Pointer(this, i);\r\n\r\n            pointer.smoothFactor = config.inputSmoothFactor;\r\n\r\n            this.pointers.push(pointer);\r\n        }\r\n\r\n        /**\r\n         * The mouse has its own unique Pointer object, which you can reference directly if making a _desktop specific game_.\r\n         * If you are supporting both desktop and touch devices then do not use this property, instead use `activePointer`\r\n         * which will always map to the most recently interacted pointer.\r\n         *\r\n         * @name Phaser.Input.InputManager#mousePointer\r\n         * @type {?Phaser.Input.Pointer}\r\n         * @since 3.10.0\r\n         */\r\n        this.mousePointer = (config.inputMouse) ? this.pointers[0] : null;\r\n\r\n        /**\r\n         * The most recently active Pointer object.\r\n         *\r\n         * If you've only 1 Pointer in your game then this will accurately be either the first finger touched, or the mouse.\r\n         *\r\n         * If your game doesn't need to support multi-touch then you can safely use this property in all of your game\r\n         * code and it will adapt to be either the mouse or the touch, based on device.\r\n         *\r\n         * @name Phaser.Input.InputManager#activePointer\r\n         * @type {Phaser.Input.Pointer}\r\n         * @since 3.0.0\r\n         */\r\n        this.activePointer = this.pointers[0];\r\n\r\n        /**\r\n         * If the top-most Scene in the Scene List receives an input it will stop input from\r\n         * propagating any lower down the scene list, i.e. if you have a UI Scene at the top\r\n         * and click something on it, that click will not then be passed down to any other\r\n         * Scene below. Disable this to have input events passed through all Scenes, all the time.\r\n         *\r\n         * @name Phaser.Input.InputManager#globalTopOnly\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.globalTopOnly = true;\r\n\r\n        /**\r\n         * The time this Input Manager was last updated.\r\n         * This value is populated by the Game Step each frame.\r\n         *\r\n         * @name Phaser.Input.InputManager#time\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.2\r\n         */\r\n        this.time = 0;\r\n\r\n        /**\r\n         * A re-cycled point-like object to store hit test values in.\r\n         *\r\n         * @name Phaser.Input.InputManager#_tempPoint\r\n         * @type {{x:number, y:number}}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempPoint = { x: 0, y: 0 };\r\n\r\n        /**\r\n         * A re-cycled array to store hit results in.\r\n         *\r\n         * @name Phaser.Input.InputManager#_tempHitTest\r\n         * @type {array}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._tempHitTest = [];\r\n\r\n        /**\r\n         * A re-cycled matrix used in hit test calculations.\r\n         *\r\n         * @name Phaser.Input.InputManager#_tempMatrix\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._tempMatrix = new TransformMatrix();\r\n\r\n        /**\r\n         * A re-cycled matrix used in hit test calculations.\r\n         *\r\n         * @name Phaser.Input.InputManager#_tempMatrix2\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * An internal private var that records Scenes aborting event processing.\r\n         *\r\n         * @name Phaser.Input.InputManager#_tempSkip\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.18.0\r\n         */\r\n        this._tempSkip = false;\r\n\r\n        /**\r\n         * An internal private array that avoids needing to create a new array on every DOM mouse event.\r\n         *\r\n         * @name Phaser.Input.InputManager#mousePointerContainer\r\n         * @type {Phaser.Input.Pointer[]}\r\n         * @private\r\n         * @since 3.18.0\r\n         */\r\n        this.mousePointerContainer = [ this.mousePointer ];\r\n\r\n        game.events.once(GameEvents.BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Boot handler is called by Phaser.Game when it first starts up.\r\n     * The renderer is available by now.\r\n     *\r\n     * @method Phaser.Input.InputManager#boot\r\n     * @protected\r\n     * @fires Phaser.Input.Events#MANAGER_BOOT\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.canvas = this.game.canvas;\r\n\r\n        this.scaleManager = this.game.scale;\r\n\r\n        this.events.emit(Events.MANAGER_BOOT);\r\n\r\n        this.game.events.on(GameEvents.PRE_RENDER, this.preRender, this);\r\n\r\n        this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Internal canvas state change, called automatically by the Mouse Manager.\r\n     *\r\n     * @method Phaser.Input.InputManager#setCanvasOver\r\n     * @fires Phaser.Input.Events#GAME_OVER\r\n     * @private\r\n     * @since 3.16.0\r\n     *\r\n     * @param {(MouseEvent|TouchEvent)} event - The DOM Event.\r\n     */\r\n    setCanvasOver: function (event)\r\n    {\r\n        this.isOver = true;\r\n\r\n        this.events.emit(Events.GAME_OVER, event);\r\n    },\r\n\r\n    /**\r\n     * Internal canvas state change, called automatically by the Mouse Manager.\r\n     *\r\n     * @method Phaser.Input.InputManager#setCanvasOut\r\n     * @fires Phaser.Input.Events#GAME_OUT\r\n     * @private\r\n     * @since 3.16.0\r\n     *\r\n     * @param {(MouseEvent|TouchEvent)} event - The DOM Event.\r\n     */\r\n    setCanvasOut: function (event)\r\n    {\r\n        this.isOver = false;\r\n\r\n        this.events.emit(Events.GAME_OUT, event);\r\n    },\r\n\r\n    /**\r\n     * Internal update, called automatically by the Game Step right at the start.\r\n     *\r\n     * @method Phaser.Input.InputManager#preRender\r\n     * @private\r\n     * @since 3.18.0\r\n     */\r\n    preRender: function ()\r\n    {\r\n        var time = this.game.loop.now;\r\n        var delta = this.game.loop.delta;\r\n        var scenes = this.game.scene.getScenes(true, true);\r\n\r\n        this.time = time;\r\n\r\n        this.events.emit(Events.MANAGER_UPDATE);\r\n\r\n        for (var i = 0; i < scenes.length; i++)\r\n        {\r\n            var scene = scenes[i];\r\n\r\n            if (scene.sys.input && scene.sys.input.updatePoll(time, delta) && this.globalTopOnly)\r\n            {\r\n                //  If the Scene returns true, it means it captured some input that no other Scene should get, so we bail out\r\n                return;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Tells the Input system to set a custom cursor.\r\n     * \r\n     * This cursor will be the default cursor used when interacting with the game canvas.\r\n     *\r\n     * If an Interactive Object also sets a custom cursor, this is the cursor that is reset after its use.\r\n     *\r\n     * Any valid CSS cursor value is allowed, including paths to image files, i.e.:\r\n     *\r\n     * ```javascript\r\n     * this.input.setDefaultCursor('url(assets/cursors/sword.cur), pointer');\r\n     * ```\r\n     * \r\n     * Please read about the differences between browsers when it comes to the file formats and sizes they support:\r\n     *\r\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_User_Interface/Using_URL_values_for_the_cursor_property\r\n     *\r\n     * It's up to you to pick a suitable cursor format that works across the range of browsers you need to support.\r\n     *\r\n     * @method Phaser.Input.InputManager#setDefaultCursor\r\n     * @since 3.10.0\r\n     * \r\n     * @param {string} cursor - The CSS to be used when setting the default cursor.\r\n     */\r\n    setDefaultCursor: function (cursor)\r\n    {\r\n        this.defaultCursor = cursor;\r\n\r\n        if (this.canvas.style.cursor !== cursor)\r\n        {\r\n            this.canvas.style.cursor = cursor;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by the InputPlugin when processing over and out events.\r\n     * \r\n     * Tells the Input Manager to set a custom cursor during its postUpdate step.\r\n     *\r\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n     *\r\n     * @method Phaser.Input.InputManager#setCursor\r\n     * @private\r\n     * @since 3.10.0\r\n     * \r\n     * @param {Phaser.Types.Input.InteractiveObject} interactiveObject - The Interactive Object that called this method.\r\n     */\r\n    setCursor: function (interactiveObject)\r\n    {\r\n        if (interactiveObject.cursor)\r\n        {\r\n            this.canvas.style.cursor = interactiveObject.cursor;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by the InputPlugin when processing over and out events.\r\n     * \r\n     * Tells the Input Manager to clear the hand cursor, if set, during its postUpdate step.\r\n     *\r\n     * @method Phaser.Input.InputManager#resetCursor\r\n     * @private\r\n     * @since 3.10.0\r\n     * \r\n     * @param {Phaser.Types.Input.InteractiveObject} interactiveObject - The Interactive Object that called this method.\r\n     */\r\n    resetCursor: function (interactiveObject)\r\n    {\r\n        if (interactiveObject.cursor && this.canvas)\r\n        {\r\n            this.canvas.style.cursor = this.defaultCursor;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds new Pointer objects to the Input Manager.\r\n     *\r\n     * By default Phaser creates 2 pointer objects: `mousePointer` and `pointer1`.\r\n     *\r\n     * You can create more either by calling this method, or by setting the `input.activePointers` property\r\n     * in the Game Config, up to a maximum of 10 pointers.\r\n     *\r\n     * The first 10 pointers are available via the `InputPlugin.pointerX` properties, once they have been added\r\n     * via this method.\r\n     *\r\n     * @method Phaser.Input.InputManager#addPointer\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} [quantity=1] The number of new Pointers to create. A maximum of 10 is allowed in total.\r\n     *\r\n     * @return {Phaser.Input.Pointer[]} An array containing all of the new Pointer objects that were created.\r\n     */\r\n    addPointer: function (quantity)\r\n    {\r\n        if (quantity === undefined) { quantity = 1; }\r\n\r\n        var output = [];\r\n\r\n        if (this.pointersTotal + quantity > 10)\r\n        {\r\n            quantity = 10 - this.pointersTotal;\r\n        }\r\n\r\n        for (var i = 0; i < quantity; i++)\r\n        {\r\n            var id = this.pointers.length;\r\n\r\n            var pointer = new Pointer(this, id);\r\n\r\n            pointer.smoothFactor = this.config.inputSmoothFactor;\r\n\r\n            this.pointers.push(pointer);\r\n\r\n            this.pointersTotal++;\r\n\r\n            output.push(pointer);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Internal method that gets a list of all the active Input Plugins in the game\r\n     * and updates each of them in turn, in reverse order (top to bottom), to allow\r\n     * for DOM top-level event handling simulation.\r\n     *\r\n     * @method Phaser.Input.InputManager#updateInputPlugins\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} type - The type of event to process.\r\n     * @param {Phaser.Input.Pointer[]} pointers - An array of Pointers on which the event occurred.\r\n     */\r\n    updateInputPlugins: function (type, pointers)\r\n    {\r\n        var scenes = this.game.scene.getScenes(true, true);\r\n\r\n        this._tempSkip = false;\r\n\r\n        for (var i = 0; i < scenes.length; i++)\r\n        {\r\n            var scene = scenes[i];\r\n\r\n            if (scene.sys.input)\r\n            {\r\n                var capture = scene.sys.input.update(type, pointers);\r\n\r\n                if ((capture && this.globalTopOnly) || this._tempSkip)\r\n                {\r\n                    //  If the Scene returns true, or called stopPropagation, it means it captured some input that no other Scene should get, so we bail out\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    //  event.targetTouches = list of all touches on the TARGET ELEMENT (i.e. game dom element)\r\n    //  event.touches = list of all touches on the ENTIRE DOCUMENT, not just the target element\r\n    //  event.changedTouches = the touches that CHANGED in this event, not the total number of them\r\n\r\n    /**\r\n     * Processes a touch start event, as passed in by the TouchManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onTouchStart\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {TouchEvent} event - The native DOM Touch event.\r\n     */\r\n    onTouchStart: function (event)\r\n    {\r\n        var pointers = this.pointers;\r\n        var changed = [];\r\n\r\n        for (var c = 0; c < event.changedTouches.length; c++)\r\n        {\r\n            var changedTouch = event.changedTouches[c];\r\n\r\n            for (var i = 1; i < this.pointersTotal; i++)\r\n            {\r\n                var pointer = pointers[i];\r\n\r\n                if (!pointer.active)\r\n                {\r\n                    pointer.touchstart(changedTouch, event);\r\n\r\n                    this.activePointer = pointer;\r\n\r\n                    changed.push(pointer);\r\n\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.updateInputPlugins(CONST.TOUCH_START, changed);\r\n    },\r\n\r\n    /**\r\n     * Processes a touch move event, as passed in by the TouchManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onTouchMove\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {TouchEvent} event - The native DOM Touch event.\r\n     */\r\n    onTouchMove: function (event)\r\n    {\r\n        var pointers = this.pointers;\r\n        var changed = [];\r\n\r\n        for (var c = 0; c < event.changedTouches.length; c++)\r\n        {\r\n            var changedTouch = event.changedTouches[c];\r\n\r\n            for (var i = 1; i < this.pointersTotal; i++)\r\n            {\r\n                var pointer = pointers[i];\r\n\r\n                if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n                {\r\n                    pointer.touchmove(changedTouch, event);\r\n\r\n                    this.activePointer = pointer;\r\n\r\n                    changed.push(pointer);\r\n\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.updateInputPlugins(CONST.TOUCH_MOVE, changed);\r\n    },\r\n\r\n    //  For touch end its a list of the touch points that have been removed from the surface\r\n    //  https://developer.mozilla.org/en-US/docs/DOM/TouchList\r\n    //  event.changedTouches = the touches that CHANGED in this event, not the total number of them\r\n\r\n    /**\r\n     * Processes a touch end event, as passed in by the TouchManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onTouchEnd\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {TouchEvent} event - The native DOM Touch event.\r\n     */\r\n    onTouchEnd: function (event)\r\n    {\r\n        var pointers = this.pointers;\r\n        var changed = [];\r\n\r\n        for (var c = 0; c < event.changedTouches.length; c++)\r\n        {\r\n            var changedTouch = event.changedTouches[c];\r\n\r\n            for (var i = 1; i < this.pointersTotal; i++)\r\n            {\r\n                var pointer = pointers[i];\r\n\r\n                if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n                {\r\n                    pointer.touchend(changedTouch, event);\r\n\r\n                    changed.push(pointer);\r\n\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.updateInputPlugins(CONST.TOUCH_END, changed);\r\n    },\r\n\r\n    /**\r\n     * Processes a touch cancel event, as passed in by the TouchManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onTouchCancel\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {TouchEvent} event - The native DOM Touch event.\r\n     */\r\n    onTouchCancel: function (event)\r\n    {\r\n        var pointers = this.pointers;\r\n        var changed = [];\r\n\r\n        for (var c = 0; c < event.changedTouches.length; c++)\r\n        {\r\n            var changedTouch = event.changedTouches[c];\r\n\r\n            for (var i = 1; i < this.pointersTotal; i++)\r\n            {\r\n                var pointer = pointers[i];\r\n\r\n                if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n                {\r\n                    pointer.touchcancel(changedTouch, event);\r\n\r\n                    changed.push(pointer);\r\n\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.updateInputPlugins(CONST.TOUCH_CANCEL, changed);\r\n    },\r\n\r\n    /**\r\n     * Processes a mouse down event, as passed in by the MouseManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onMouseDown\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MouseEvent} event - The native DOM Mouse event.\r\n     */\r\n    onMouseDown: function (event)\r\n    {\r\n        this.mousePointer.down(event);\r\n\r\n        this.mousePointer.updateMotion();\r\n\r\n        this.updateInputPlugins(CONST.MOUSE_DOWN, this.mousePointerContainer);\r\n    },\r\n\r\n    /**\r\n     * Processes a mouse move event, as passed in by the MouseManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onMouseMove\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MouseEvent} event - The native DOM Mouse event.\r\n     */\r\n    onMouseMove: function (event)\r\n    {\r\n        this.mousePointer.move(event);\r\n\r\n        this.mousePointer.updateMotion();\r\n\r\n        this.updateInputPlugins(CONST.MOUSE_MOVE, this.mousePointerContainer);\r\n    },\r\n\r\n    /**\r\n     * Processes a mouse up event, as passed in by the MouseManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onMouseUp\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MouseEvent} event - The native DOM Mouse event.\r\n     */\r\n    onMouseUp: function (event)\r\n    {\r\n        this.mousePointer.up(event);\r\n\r\n        this.mousePointer.updateMotion();\r\n\r\n        this.updateInputPlugins(CONST.MOUSE_UP, this.mousePointerContainer);\r\n    },\r\n\r\n    /**\r\n     * Processes a mouse wheel event, as passed in by the MouseManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onMouseWheel\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {WheelEvent} event - The native DOM Wheel event.\r\n     */\r\n    onMouseWheel: function (event)\r\n    {\r\n        this.mousePointer.wheel(event);\r\n\r\n        this.updateInputPlugins(CONST.MOUSE_WHEEL, this.mousePointerContainer);\r\n    },\r\n\r\n    /**\r\n     * Processes a pointer lock change event, as passed in by the MouseManager.\r\n     *\r\n     * @method Phaser.Input.InputManager#onPointerLockChange\r\n     * @fires Phaser.Input.Events#POINTERLOCK_CHANGE\r\n     * @private\r\n     * @since 3.19.0\r\n     *\r\n     * @param {MouseEvent} event - The native DOM Mouse event.\r\n     */\r\n    onPointerLockChange: function (event)\r\n    {\r\n        var isLocked = this.mouse.locked;\r\n\r\n        this.mousePointer.locked = isLocked;\r\n\r\n        this.events.emit(Events.POINTERLOCK_CHANGE, event, isLocked);\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Game Object should be considered as a candidate for input or not.\r\n     *\r\n     * Checks if the Game Object has an input component that is enabled, that it will render,\r\n     * and finally, if it has a parent, that the parent parent, or any ancestor, is visible or not.\r\n     *\r\n     * @method Phaser.Input.InputManager#inputCandidate\r\n     * @private\r\n     * @since 3.10.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to test.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n     *\r\n     * @return {boolean} `true` if the Game Object should be considered for input, otherwise `false`.\r\n     */\r\n    inputCandidate: function (gameObject, camera)\r\n    {\r\n        var input = gameObject.input;\r\n\r\n        if (!input || !input.enabled || (!input.alwaysEnabled && !gameObject.willRender(camera)))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var visible = true;\r\n        var parent = gameObject.parentContainer;\r\n\r\n        if (parent)\r\n        {\r\n            do\r\n            {\r\n                if (!parent.willRender(camera))\r\n                {\r\n                    visible = false;\r\n                    break;\r\n                }\r\n\r\n                parent = parent.parentContainer;\r\n\r\n            } while (parent);\r\n        }\r\n\r\n        return visible;\r\n    },\r\n\r\n    /**\r\n     * Performs a hit test using the given Pointer and camera, against an array of interactive Game Objects.\r\n     *\r\n     * The Game Objects are culled against the camera, and then the coordinates are translated into the local camera space\r\n     * and used to determine if they fall within the remaining Game Objects hit areas or not.\r\n     *\r\n     * If nothing is matched an empty array is returned.\r\n     *\r\n     * This method is called automatically by InputPlugin.hitTestPointer and doesn't usually need to be invoked directly.\r\n     *\r\n     * @method Phaser.Input.InputManager#hitTest\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to test against.\r\n     * @param {array} gameObjects - An array of interactive Game Objects to check.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n     * @param {array} [output] - An array to store the results in. If not given, a new empty array is created.\r\n     *\r\n     * @return {array} An array of the Game Objects that were hit during this hit test.\r\n     */\r\n    hitTest: function (pointer, gameObjects, camera, output)\r\n    {\r\n        if (output === undefined) { output = this._tempHitTest; }\r\n\r\n        var tempPoint = this._tempPoint;\r\n\r\n        var csx = camera.scrollX;\r\n        var csy = camera.scrollY;\r\n\r\n        output.length = 0;\r\n\r\n        var x = pointer.x;\r\n        var y = pointer.y;\r\n\r\n        if (camera.resolution !== 1)\r\n        {\r\n            x += camera._x;\r\n            y += camera._y;\r\n        }\r\n\r\n        //  Stores the world point inside of tempPoint\r\n        camera.getWorldPoint(x, y, tempPoint);\r\n\r\n        pointer.worldX = tempPoint.x;\r\n        pointer.worldY = tempPoint.y;\r\n\r\n        var point = { x: 0, y: 0 };\r\n\r\n        var matrix = this._tempMatrix;\r\n        var parentMatrix = this._tempMatrix2;\r\n\r\n        for (var i = 0; i < gameObjects.length; i++)\r\n        {\r\n            var gameObject = gameObjects[i];\r\n\r\n            //  Checks if the Game Object can receive input (isn't being ignored by the camera, invisible, etc)\r\n            //  and also checks all of its parents, if any\r\n            if (!this.inputCandidate(gameObject, camera))\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var px = tempPoint.x + (csx * gameObject.scrollFactorX) - csx;\r\n            var py = tempPoint.y + (csy * gameObject.scrollFactorY) - csy;\r\n\r\n            if (gameObject.parentContainer)\r\n            {\r\n                gameObject.getWorldTransformMatrix(matrix, parentMatrix);\r\n\r\n                matrix.applyInverse(px, py, point);\r\n            }\r\n            else\r\n            {\r\n                TransformXY(px, py, gameObject.x, gameObject.y, gameObject.rotation, gameObject.scaleX, gameObject.scaleY, point);\r\n            }\r\n    \r\n            if (this.pointWithinHitArea(gameObject, point.x, point.y))\r\n            {\r\n                output.push(gameObject);\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given x and y coordinate are within the hit area of the Game Object.\r\n     *\r\n     * This method assumes that the coordinate values have already been translated into the space of the Game Object.\r\n     *\r\n     * If the coordinates are within the hit area they are set into the Game Objects Input `localX` and `localY` properties.\r\n     *\r\n     * @method Phaser.Input.InputManager#pointWithinHitArea\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object to check against.\r\n     * @param {number} x - The translated x coordinate for the hit test.\r\n     * @param {number} y - The translated y coordinate for the hit test.\r\n     *\r\n     * @return {boolean} `true` if the coordinates were inside the Game Objects hit area, otherwise `false`.\r\n     */\r\n    pointWithinHitArea: function (gameObject, x, y)\r\n    {\r\n        //  Normalize the origin\r\n        x += gameObject.displayOriginX;\r\n        y += gameObject.displayOriginY;\r\n\r\n        var input = gameObject.input;\r\n\r\n        if (input && input.hitAreaCallback(input.hitArea, x, y, gameObject))\r\n        {\r\n            input.localX = x;\r\n            input.localY = y;\r\n\r\n            return true;\r\n        }\r\n        else\r\n        {\r\n            return false;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks if the given x and y coordinate are within the hit area of the Interactive Object.\r\n     *\r\n     * This method assumes that the coordinate values have already been translated into the space of the Interactive Object.\r\n     *\r\n     * If the coordinates are within the hit area they are set into the Interactive Objects Input `localX` and `localY` properties.\r\n     *\r\n     * @method Phaser.Input.InputManager#pointWithinInteractiveObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Input.InteractiveObject} object - The Interactive Object to check against.\r\n     * @param {number} x - The translated x coordinate for the hit test.\r\n     * @param {number} y - The translated y coordinate for the hit test.\r\n     *\r\n     * @return {boolean} `true` if the coordinates were inside the Game Objects hit area, otherwise `false`.\r\n     */\r\n    pointWithinInteractiveObject: function (object, x, y)\r\n    {\r\n        if (!object.hitArea)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  Normalize the origin\r\n        x += object.gameObject.displayOriginX;\r\n        y += object.gameObject.displayOriginY;\r\n\r\n        object.localX = x;\r\n        object.localY = y;\r\n\r\n        return object.hitAreaCallback(object.hitArea, x, y, object);\r\n    },\r\n\r\n    /**\r\n     * Transforms the pageX and pageY values of a Pointer into the scaled coordinate space of the Input Manager.\r\n     *\r\n     * @method Phaser.Input.InputManager#transformPointer\r\n     * @since 3.10.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to transform the values for.\r\n     * @param {number} pageX - The Page X value.\r\n     * @param {number} pageY - The Page Y value.\r\n     * @param {boolean} wasMove - Are we transforming the Pointer from a move event, or an up / down event?\r\n     */\r\n    transformPointer: function (pointer, pageX, pageY, wasMove)\r\n    {\r\n        var p0 = pointer.position;\r\n        var p1 = pointer.prevPosition;\r\n\r\n        //  Store previous position\r\n        p1.x = p0.x;\r\n        p1.y = p0.y;\r\n\r\n        //  Translate coordinates\r\n        var x = this.scaleManager.transformX(pageX);\r\n        var y = this.scaleManager.transformY(pageY);\r\n\r\n        var a = pointer.smoothFactor;\r\n\r\n        if (!wasMove || a === 0)\r\n        {\r\n            //  Set immediately\r\n            p0.x = x;\r\n            p0.y = y;\r\n        }\r\n        else\r\n        {\r\n            //  Apply smoothing\r\n            p0.x = x * a + p1.x * (1 - a);\r\n            p0.y = y * a + p1.y * (1 - a);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys the Input Manager and all of its systems.\r\n     *\r\n     * There is no way to recover from doing this.\r\n     *\r\n     * @method Phaser.Input.InputManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.events.removeAllListeners();\r\n\r\n        this.game.events.off(GameEvents.PRE_RENDER);\r\n\r\n        if (this.keyboard)\r\n        {\r\n            this.keyboard.destroy();\r\n        }\r\n\r\n        if (this.mouse)\r\n        {\r\n            this.mouse.destroy();\r\n        }\r\n\r\n        if (this.touch)\r\n        {\r\n            this.touch.destroy();\r\n        }\r\n\r\n        for (var i = 0; i < this.pointers.length; i++)\r\n        {\r\n            this.pointers[i].destroy();\r\n        }\r\n\r\n        this.pointers = [];\r\n        this._tempHitTest = [];\r\n        this._tempMatrix.destroy();\r\n        this.canvas = null;\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = InputManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dE1hbmFnZXIuanM/ZmYyMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsK0ZBQTRCO0FBQ25ELFlBQVksbUJBQU8sQ0FBQyxtRkFBc0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLDZEQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxtRkFBc0I7QUFDMUMsc0JBQXNCLG1CQUFPLENBQUMsc0hBQTJDO0FBQ3pFLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxjQUFjOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsY0FBYztBQUNyQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDtBQUNBOztBQUVBLDJCQUEyQix3QkFBd0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDtBQUNBOztBQUVBLDJCQUEyQix3QkFBd0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBaUM7QUFDeEQ7QUFDQTs7QUFFQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBaUM7QUFDeEQ7QUFDQTs7QUFFQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQyxlQUFlLE1BQU07QUFDckIsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0Qjs7QUFFL0Q7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDO0FBQ3BELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0lucHV0TWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgS2V5Ym9hcmQgPSByZXF1aXJlKCcuL2tleWJvYXJkL0tleWJvYXJkTWFuYWdlcicpO1xyXG52YXIgTW91c2UgPSByZXF1aXJlKCcuL21vdXNlL01vdXNlTWFuYWdlcicpO1xyXG52YXIgUG9pbnRlciA9IHJlcXVpcmUoJy4vUG9pbnRlcicpO1xyXG52YXIgVG91Y2ggPSByZXF1aXJlKCcuL3RvdWNoL1RvdWNoTWFuYWdlcicpO1xyXG52YXIgVHJhbnNmb3JtTWF0cml4ID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXgnKTtcclxudmFyIFRyYW5zZm9ybVhZID0gcmVxdWlyZSgnLi4vbWF0aC9UcmFuc2Zvcm1YWScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIElucHV0IE1hbmFnZXIgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwb2ludGVyIHJlbGF0ZWQgc3lzdGVtcyBpbiBhIHNpbmdsZSBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICpcclxuICogQmFzZWQgb24gdGhlIEdhbWUgQ29uZmlnIGl0IHdpbGwgY3JlYXRlIGhhbmRsZXJzIGZvciBtb3VzZSBhbmQgdG91Y2ggc3VwcG9ydC5cclxuICpcclxuICogS2V5Ym9hcmQgYW5kIEdhbWVwYWQgYXJlIHBsdWdpbnMsIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIElucHV0UGx1Z2luIGNsYXNzLlxyXG4gKlxyXG4gKiBJdCB0aGVuIG1hbmFnZXMgdGhlIGV2ZW50cywgcG9pbnRlciBjcmVhdGlvbiBhbmQgZ2VuZXJhbCBoaXQgdGVzdCByZWxhdGVkIG9wZXJhdGlvbnMuXHJcbiAqXHJcbiAqIFlvdSByYXJlbHkgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBJbnB1dCBNYW5hZ2VyIGRpcmVjdGx5LCBhbmQgYXMgc3VjaCwgYWxsIG9mIGl0cyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzXHJcbiAqIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIHRoZSBJbnB1dCBQbHVnaW4sIHdoaWNoIGlzIGEgU2NlbmUgbGV2ZWwgc3lzdGVtLCByZXNwb25zaWJsZVxyXG4gKiBmb3IgZGVhbGluZyB3aXRoIGFsbCBpbnB1dCBldmVudHMgZm9yIGEgU2NlbmUuXHJcbiAqXHJcbiAqIEBjbGFzcyBJbnB1dE1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBUaGUgR2FtZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgSW5wdXQgQ29uZmlndXJhdGlvbiBvYmplY3QsIGFzIHNldCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAqL1xyXG52YXIgSW5wdXRNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIElucHV0TWFuYWdlciAoZ2FtZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAgICAgKiBBIEdhbWUgb25seSBtYWludGFpbnMgb24gaW5zdGFuY2Ugb2YgdGhlIElucHV0IE1hbmFnZXIgYXQgYW55IHRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBHYW1lIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICogVXNlZCBmb3IgYWxsIGJvdW5kcyBjaGVja3MgYW5kIHBvaW50ZXIgc2NhbGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjc2NhbGVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIHRoYXQgaXMgdXNlZCBmb3IgYWxsIERPTSBldmVudCBpbnB1dCBsaXN0ZW5lcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbnZhcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEdhbWUgQ29uZmlndXJhdGlvbiBvYmplY3QsIGFzIHNldCBkdXJpbmcgdGhlIGdhbWUgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Db3JlLkNvbmZpZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgc2V0LCB0aGUgSW5wdXQgTWFuYWdlciB3aWxsIHJ1biBpdHMgdXBkYXRlIGxvb3AgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEV2ZW50IEVtaXR0ZXIgaW5zdGFuY2UgdGhhdCB0aGUgSW5wdXQgTWFuYWdlciB1c2VzIHRvIGVtaXQgZXZlbnRzIGZyb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXJlIGFueSBtb3VzZSBvciB0b3VjaCBwb2ludGVycyBjdXJyZW50bHkgb3ZlciB0aGUgZ2FtZSBjYW52YXM/XHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNhbnZhcyBvdmVyIGFuZCBvdXQgaGFuZGxlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2lzT3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IENTUyBjdXJzb3IgdG8gYmUgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggeW91ciBnYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU2VlIHRoZSBgc2V0RGVmYXVsdEN1cnNvcmAgbWV0aG9kIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2RlZmF1bHRDdXJzb3JcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRDdXJzb3IgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEtleWJvYXJkIE1hbmFnZXIgY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQua2V5Ym9hcmRgIEdhbWUgQ29uZmlnIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNrZXlib2FyZFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXlib2FyZCA9IChjb25maWcuaW5wdXRLZXlib2FyZCkgPyBuZXcgS2V5Ym9hcmQodGhpcykgOiBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTW91c2UgTWFuYWdlciBjbGFzcywgaWYgZW5hYmxlZCB2aWEgdGhlIGBpbnB1dC5tb3VzZWAgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI21vdXNlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW91c2UgPSAoY29uZmlnLmlucHV0TW91c2UpID8gbmV3IE1vdXNlKHRoaXMpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRvdWNoIE1hbmFnZXIgY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQudG91Y2hgIEdhbWUgQ29uZmlnIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciN0b3VjaFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG91Y2ggPSAoY29uZmlnLmlucHV0VG91Y2gpID8gbmV3IFRvdWNoKHRoaXMpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgUG9pbnRlcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGdhbWUuXHJcbiAgICAgICAgICogVGhlIGZpcnN0IGVudHJ5IGlzIHJlc2VydmVkIGZvciB0aGUgTW91c2UgUG9pbnRlciwgdGhlIHJlc3QgYXJlIFRvdWNoIFBvaW50ZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGVyZSBpcyAxIHRvdWNoIHBvaW50ZXIgZW5hYmxlZC4gSWYgeW91IG5lZWQgbW9yZSB1c2UgdGhlIGBhZGRQb2ludGVyYCBtZXRob2QgdG8gc3RhcnQgdGhlbSxcclxuICAgICAgICAgKiBvciBzZXQgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHkgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludGVyc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvaW50ZXJzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgdG91Y2ggb2JqZWN0cyBhY3RpdmF0ZWQgYW5kIGJlaW5nIHByb2Nlc3NlZCBlYWNoIHVwZGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoaXMgYnkgZWl0aGVyIGNhbGxpbmcgYGFkZFBvaW50ZXJgIGF0IHJ1bi10aW1lLCBvciBieVxyXG4gICAgICAgICAqIHNldHRpbmcgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHkgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludGVyc1RvdGFsXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRlcnNUb3RhbCA9IGNvbmZpZy5pbnB1dEFjdGl2ZVBvaW50ZXJzO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmlucHV0VG91Y2ggJiYgdGhpcy5wb2ludGVyc1RvdGFsID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyc1RvdGFsID0gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHRoaXMucG9pbnRlcnNUb3RhbDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBuZXcgUG9pbnRlcih0aGlzLCBpKTtcclxuXHJcbiAgICAgICAgICAgIHBvaW50ZXIuc21vb3RoRmFjdG9yID0gY29uZmlnLmlucHV0U21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVycy5wdXNoKHBvaW50ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1vdXNlIGhhcyBpdHMgb3duIHVuaXF1ZSBQb2ludGVyIG9iamVjdCwgd2hpY2ggeW91IGNhbiByZWZlcmVuY2UgZGlyZWN0bHkgaWYgbWFraW5nIGEgX2Rlc2t0b3Agc3BlY2lmaWMgZ2FtZV8uXHJcbiAgICAgICAgICogSWYgeW91IGFyZSBzdXBwb3J0aW5nIGJvdGggZGVza3RvcCBhbmQgdG91Y2ggZGV2aWNlcyB0aGVuIGRvIG5vdCB1c2UgdGhpcyBwcm9wZXJ0eSwgaW5zdGVhZCB1c2UgYGFjdGl2ZVBvaW50ZXJgXHJcbiAgICAgICAgICogd2hpY2ggd2lsbCBhbHdheXMgbWFwIHRvIHRoZSBtb3N0IHJlY2VudGx5IGludGVyYWN0ZWQgcG9pbnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjbW91c2VQb2ludGVyXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIgPSAoY29uZmlnLmlucHV0TW91c2UpID8gdGhpcy5wb2ludGVyc1swXSA6IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtb3N0IHJlY2VudGx5IGFjdGl2ZSBQb2ludGVyIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSd2ZSBvbmx5IDEgUG9pbnRlciBpbiB5b3VyIGdhbWUgdGhlbiB0aGlzIHdpbGwgYWNjdXJhdGVseSBiZSBlaXRoZXIgdGhlIGZpcnN0IGZpbmdlciB0b3VjaGVkLCBvciB0aGUgbW91c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBJZiB5b3VyIGdhbWUgZG9lc24ndCBuZWVkIHRvIHN1cHBvcnQgbXVsdGktdG91Y2ggdGhlbiB5b3UgY2FuIHNhZmVseSB1c2UgdGhpcyBwcm9wZXJ0eSBpbiBhbGwgb2YgeW91ciBnYW1lXHJcbiAgICAgICAgICogY29kZSBhbmQgaXQgd2lsbCBhZGFwdCB0byBiZSBlaXRoZXIgdGhlIG1vdXNlIG9yIHRoZSB0b3VjaCwgYmFzZWQgb24gZGV2aWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNhY3RpdmVQb2ludGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUG9pbnRlciA9IHRoaXMucG9pbnRlcnNbMF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoZSB0b3AtbW9zdCBTY2VuZSBpbiB0aGUgU2NlbmUgTGlzdCByZWNlaXZlcyBhbiBpbnB1dCBpdCB3aWxsIHN0b3AgaW5wdXQgZnJvbVxyXG4gICAgICAgICAqIHByb3BhZ2F0aW5nIGFueSBsb3dlciBkb3duIHRoZSBzY2VuZSBsaXN0LCBpLmUuIGlmIHlvdSBoYXZlIGEgVUkgU2NlbmUgYXQgdGhlIHRvcFxyXG4gICAgICAgICAqIGFuZCBjbGljayBzb21ldGhpbmcgb24gaXQsIHRoYXQgY2xpY2sgd2lsbCBub3QgdGhlbiBiZSBwYXNzZWQgZG93biB0byBhbnkgb3RoZXJcclxuICAgICAgICAgKiBTY2VuZSBiZWxvdy4gRGlzYWJsZSB0aGlzIHRvIGhhdmUgaW5wdXQgZXZlbnRzIHBhc3NlZCB0aHJvdWdoIGFsbCBTY2VuZXMsIGFsbCB0aGUgdGltZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjZ2xvYmFsVG9wT25seVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsb2JhbFRvcE9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSB0aGlzIElucHV0IE1hbmFnZXIgd2FzIGxhc3QgdXBkYXRlZC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBieSB0aGUgR2FtZSBTdGVwIGVhY2ggZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3RpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlLWN5Y2xlZCBwb2ludC1saWtlIG9iamVjdCB0byBzdG9yZSBoaXQgdGVzdCB2YWx1ZXMgaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wUG9pbnRcclxuICAgICAgICAgKiBAdHlwZSB7e3g6bnVtYmVyLCB5Om51bWJlcn19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wUG9pbnQgPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZS1jeWNsZWQgYXJyYXkgdG8gc3RvcmUgaGl0IHJlc3VsdHMgaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wSGl0VGVzdFxyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcEhpdFRlc3QgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZS1jeWNsZWQgbWF0cml4IHVzZWQgaW4gaGl0IHRlc3QgY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNfdGVtcE1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4ID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlLWN5Y2xlZCBtYXRyaXggdXNlZCBpbiBoaXQgdGVzdCBjYWxjdWxhdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wTWF0cml4MlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDIgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVybmFsIHByaXZhdGUgdmFyIHRoYXQgcmVjb3JkcyBTY2VuZXMgYWJvcnRpbmcgZXZlbnQgcHJvY2Vzc2luZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjX3RlbXBTa2lwXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcFNraXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgcHJpdmF0ZSBhcnJheSB0aGF0IGF2b2lkcyBuZWVkaW5nIHRvIGNyZWF0ZSBhIG5ldyBhcnJheSBvbiBldmVyeSBET00gbW91c2UgZXZlbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI21vdXNlUG9pbnRlckNvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyQ29udGFpbmVyID0gWyB0aGlzLm1vdXNlUG9pbnRlciBdO1xyXG5cclxuICAgICAgICBnYW1lLmV2ZW50cy5vbmNlKEdhbWVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQm9vdCBoYW5kbGVyIGlzIGNhbGxlZCBieSBQaGFzZXIuR2FtZSB3aGVuIGl0IGZpcnN0IHN0YXJ0cyB1cC5cclxuICAgICAqIFRoZSByZW5kZXJlciBpcyBhdmFpbGFibGUgYnkgbm93LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNib290XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNNQU5BR0VSX0JPT1RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5nYW1lLmNhbnZhcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZU1hbmFnZXIgPSB0aGlzLmdhbWUuc2NhbGU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLk1BTkFHRVJfQk9PVCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5QUkVfUkVOREVSLCB0aGlzLnByZVJlbmRlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub25jZShHYW1lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY2FudmFzIHN0YXRlIGNoYW5nZSwgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIE1vdXNlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3NldENhbnZhc092ZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1ZFUlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhNb3VzZUV2ZW50fFRvdWNoRXZlbnQpfSBldmVudCAtIFRoZSBET00gRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHNldENhbnZhc092ZXI6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLkdBTUVfT1ZFUiwgZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGNhbnZhcyBzdGF0ZSBjaGFuZ2UsIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBNb3VzZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNzZXRDYW52YXNPdXRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1VUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KE1vdXNlRXZlbnR8VG91Y2hFdmVudCl9IGV2ZW50IC0gVGhlIERPTSBFdmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2FudmFzT3V0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuR0FNRV9PVVQsIGV2ZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUsIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHYW1lIFN0ZXAgcmlnaHQgYXQgdGhlIHN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwcmVSZW5kZXJcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2FtZS5sb29wLm5vdztcclxuICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmdhbWUubG9vcC5kZWx0YTtcclxuICAgICAgICB2YXIgc2NlbmVzID0gdGhpcy5nYW1lLnNjZW5lLmdldFNjZW5lcyh0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy50aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuTUFOQUdFUl9VUERBVEUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IHNjZW5lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzY2VuZS5zeXMuaW5wdXQgJiYgc2NlbmUuc3lzLmlucHV0LnVwZGF0ZVBvbGwodGltZSwgZGVsdGEpICYmIHRoaXMuZ2xvYmFsVG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIElmIHRoZSBTY2VuZSByZXR1cm5zIHRydWUsIGl0IG1lYW5zIGl0IGNhcHR1cmVkIHNvbWUgaW5wdXQgdGhhdCBubyBvdGhlciBTY2VuZSBzaG91bGQgZ2V0LCBzbyB3ZSBiYWlsIG91dFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHRoZSBJbnB1dCBzeXN0ZW0gdG8gc2V0IGEgY3VzdG9tIGN1cnNvci5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjdXJzb3Igd2lsbCBiZSB0aGUgZGVmYXVsdCBjdXJzb3IgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICpcclxuICAgICAqIElmIGFuIEludGVyYWN0aXZlIE9iamVjdCBhbHNvIHNldHMgYSBjdXN0b20gY3Vyc29yLCB0aGlzIGlzIHRoZSBjdXJzb3IgdGhhdCBpcyByZXNldCBhZnRlciBpdHMgdXNlLlxyXG4gICAgICpcclxuICAgICAqIEFueSB2YWxpZCBDU1MgY3Vyc29yIHZhbHVlIGlzIGFsbG93ZWQsIGluY2x1ZGluZyBwYXRocyB0byBpbWFnZSBmaWxlcywgaS5lLjpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LnNldERlZmF1bHRDdXJzb3IoJ3VybChhc3NldHMvY3Vyc29ycy9zd29yZC5jdXIpLCBwb2ludGVyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIHJlYWQgYWJvdXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYnJvd3NlcnMgd2hlbiBpdCBjb21lcyB0byB0aGUgZmlsZSBmb3JtYXRzIGFuZCBzaXplcyB0aGV5IHN1cHBvcnQ6XHJcbiAgICAgKlxyXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2N1cnNvclxyXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Vc2VyX0ludGVyZmFjZS9Vc2luZ19VUkxfdmFsdWVzX2Zvcl90aGVfY3Vyc29yX3Byb3BlcnR5XHJcbiAgICAgKlxyXG4gICAgICogSXQncyB1cCB0byB5b3UgdG8gcGljayBhIHN1aXRhYmxlIGN1cnNvciBmb3JtYXQgdGhhdCB3b3JrcyBhY3Jvc3MgdGhlIHJhbmdlIG9mIGJyb3dzZXJzIHlvdSBuZWVkIHRvIHN1cHBvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3NldERlZmF1bHRDdXJzb3JcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnNvciAtIFRoZSBDU1MgdG8gYmUgdXNlZCB3aGVuIHNldHRpbmcgdGhlIGRlZmF1bHQgY3Vyc29yLlxyXG4gICAgICovXHJcbiAgICBzZXREZWZhdWx0Q3Vyc29yOiBmdW5jdGlvbiAoY3Vyc29yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEN1cnNvciA9IGN1cnNvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzLnN0eWxlLmN1cnNvciAhPT0gY3Vyc29yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIElucHV0UGx1Z2luIHdoZW4gcHJvY2Vzc2luZyBvdmVyIGFuZCBvdXQgZXZlbnRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUZWxscyB0aGUgSW5wdXQgTWFuYWdlciB0byBzZXQgYSBjdXN0b20gY3Vyc29yIGR1cmluZyBpdHMgcG9zdFVwZGF0ZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jdXJzb3JcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjc2V0Q3Vyc29yXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnRlcmFjdGl2ZU9iamVjdH0gaW50ZXJhY3RpdmVPYmplY3QgLSBUaGUgSW50ZXJhY3RpdmUgT2JqZWN0IHRoYXQgY2FsbGVkIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBzZXRDdXJzb3I6IGZ1bmN0aW9uIChpbnRlcmFjdGl2ZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVPYmplY3QuY3Vyc29yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3Vyc29yID0gaW50ZXJhY3RpdmVPYmplY3QuY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIElucHV0UGx1Z2luIHdoZW4gcHJvY2Vzc2luZyBvdmVyIGFuZCBvdXQgZXZlbnRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUZWxscyB0aGUgSW5wdXQgTWFuYWdlciB0byBjbGVhciB0aGUgaGFuZCBjdXJzb3IsIGlmIHNldCwgZHVyaW5nIGl0cyBwb3N0VXBkYXRlIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3Jlc2V0Q3Vyc29yXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnRlcmFjdGl2ZU9iamVjdH0gaW50ZXJhY3RpdmVPYmplY3QgLSBUaGUgSW50ZXJhY3RpdmUgT2JqZWN0IHRoYXQgY2FsbGVkIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldEN1cnNvcjogZnVuY3Rpb24gKGludGVyYWN0aXZlT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpbnRlcmFjdGl2ZU9iamVjdC5jdXJzb3IgJiYgdGhpcy5jYW52YXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jdXJzb3IgPSB0aGlzLmRlZmF1bHRDdXJzb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgbmV3IFBvaW50ZXIgb2JqZWN0cyB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0IFBoYXNlciBjcmVhdGVzIDIgcG9pbnRlciBvYmplY3RzOiBgbW91c2VQb2ludGVyYCBhbmQgYHBvaW50ZXIxYC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGNyZWF0ZSBtb3JlIGVpdGhlciBieSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBieSBzZXR0aW5nIHRoZSBgaW5wdXQuYWN0aXZlUG9pbnRlcnNgIHByb3BlcnR5XHJcbiAgICAgKiBpbiB0aGUgR2FtZSBDb25maWcsIHVwIHRvIGEgbWF4aW11bSBvZiAxMCBwb2ludGVycy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZmlyc3QgMTAgcG9pbnRlcnMgYXJlIGF2YWlsYWJsZSB2aWEgdGhlIGBJbnB1dFBsdWdpbi5wb2ludGVyWGAgcHJvcGVydGllcywgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZFxyXG4gICAgICogdmlhIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNhZGRQb2ludGVyXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcXVhbnRpdHk9MV0gVGhlIG51bWJlciBvZiBuZXcgUG9pbnRlcnMgdG8gY3JlYXRlLiBBIG1heGltdW0gb2YgMTAgaXMgYWxsb3dlZCBpbiB0b3RhbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfSBBbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgbmV3IFBvaW50ZXIgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgYWRkUG9pbnRlcjogZnVuY3Rpb24gKHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChxdWFudGl0eSA9PT0gdW5kZWZpbmVkKSB7IHF1YW50aXR5ID0gMTsgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJzVG90YWwgKyBxdWFudGl0eSA+IDEwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcXVhbnRpdHkgPSAxMCAtIHRoaXMucG9pbnRlcnNUb3RhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucG9pbnRlcnMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBuZXcgUG9pbnRlcih0aGlzLCBpZCk7XHJcblxyXG4gICAgICAgICAgICBwb2ludGVyLnNtb290aEZhY3RvciA9IHRoaXMuY29uZmlnLmlucHV0U21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVycy5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyc1RvdGFsKys7XHJcblxyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChwb2ludGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgZ2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBhY3RpdmUgSW5wdXQgUGx1Z2lucyBpbiB0aGUgZ2FtZVxyXG4gICAgICogYW5kIHVwZGF0ZXMgZWFjaCBvZiB0aGVtIGluIHR1cm4sIGluIHJldmVyc2Ugb3JkZXIgKHRvcCB0byBib3R0b20pLCB0byBhbGxvd1xyXG4gICAgICogZm9yIERPTSB0b3AtbGV2ZWwgZXZlbnQgaGFuZGxpbmcgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjdXBkYXRlSW5wdXRQbHVnaW5zXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0eXBlIC0gVGhlIHR5cGUgb2YgZXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJbXX0gcG9pbnRlcnMgLSBBbiBhcnJheSBvZiBQb2ludGVycyBvbiB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUlucHV0UGx1Z2luczogZnVuY3Rpb24gKHR5cGUsIHBvaW50ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZXMgPSB0aGlzLmdhbWUuc2NlbmUuZ2V0U2NlbmVzKHRydWUsIHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZW1wU2tpcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IHNjZW5lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzY2VuZS5zeXMuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gc2NlbmUuc3lzLmlucHV0LnVwZGF0ZSh0eXBlLCBwb2ludGVycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKChjYXB0dXJlICYmIHRoaXMuZ2xvYmFsVG9wT25seSkgfHwgdGhpcy5fdGVtcFNraXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIElmIHRoZSBTY2VuZSByZXR1cm5zIHRydWUsIG9yIGNhbGxlZCBzdG9wUHJvcGFnYXRpb24sIGl0IG1lYW5zIGl0IGNhcHR1cmVkIHNvbWUgaW5wdXQgdGhhdCBubyBvdGhlciBTY2VuZSBzaG91bGQgZ2V0LCBzbyB3ZSBiYWlsIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gIGV2ZW50LnRhcmdldFRvdWNoZXMgPSBsaXN0IG9mIGFsbCB0b3VjaGVzIG9uIHRoZSBUQVJHRVQgRUxFTUVOVCAoaS5lLiBnYW1lIGRvbSBlbGVtZW50KVxyXG4gICAgLy8gIGV2ZW50LnRvdWNoZXMgPSBsaXN0IG9mIGFsbCB0b3VjaGVzIG9uIHRoZSBFTlRJUkUgRE9DVU1FTlQsIG5vdCBqdXN0IHRoZSB0YXJnZXQgZWxlbWVudFxyXG4gICAgLy8gIGV2ZW50LmNoYW5nZWRUb3VjaGVzID0gdGhlIHRvdWNoZXMgdGhhdCBDSEFOR0VEIGluIHRoaXMgZXZlbnQsIG5vdCB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZW1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHRvdWNoIHN0YXJ0IGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIFRvdWNoTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Ub3VjaFN0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5wb2ludGVycztcclxuICAgICAgICB2YXIgY2hhbmdlZCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoYW5nZWRUb3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzW2NdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50ZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXIudG91Y2hzdGFydChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb2ludGVyID0gcG9pbnRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfU1RBUlQsIGNoYW5nZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHRvdWNoIG1vdmUgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoTW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gVG91Y2ggZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5wb2ludGVycztcclxuICAgICAgICB2YXIgY2hhbmdlZCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoYW5nZWRUb3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzW2NdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRlci5hY3RpdmUgJiYgcG9pbnRlci5pZGVudGlmaWVyID09PSBjaGFuZ2VkVG91Y2guaWRlbnRpZmllcilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyLnRvdWNobW92ZShjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb2ludGVyID0gcG9pbnRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfTU9WRSwgY2hhbmdlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBGb3IgdG91Y2ggZW5kIGl0cyBhIGxpc3Qgb2YgdGhlIHRvdWNoIHBvaW50cyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN1cmZhY2VcclxuICAgIC8vICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9Ub3VjaExpc3RcclxuICAgIC8vICBldmVudC5jaGFuZ2VkVG91Y2hlcyA9IHRoZSB0b3VjaGVzIHRoYXQgQ0hBTkdFRCBpbiB0aGlzIGV2ZW50LCBub3QgdGhlIHRvdGFsIG51bWJlciBvZiB0aGVtXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSB0b3VjaCBlbmQgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoRW5kXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMucG9pbnRlcnM7XHJcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkVG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tjXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5wb2ludGVyc1RvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwb2ludGVyID0gcG9pbnRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXIuYWN0aXZlICYmIHBvaW50ZXIuaWRlbnRpZmllciA9PT0gY2hhbmdlZFRvdWNoLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlci50b3VjaGVuZChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfRU5ELCBjaGFuZ2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSB0b3VjaCBjYW5jZWwgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoQ2FuY2VsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaENhbmNlbDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMucG9pbnRlcnM7XHJcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkVG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tjXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5wb2ludGVyc1RvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwb2ludGVyID0gcG9pbnRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXIuYWN0aXZlICYmIHBvaW50ZXIuaWRlbnRpZmllciA9PT0gY2hhbmdlZFRvdWNoLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlci50b3VjaGNhbmNlbChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfQ0FOQ0VMLCBjaGFuZ2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSBtb3VzZSBkb3duIGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIE1vdXNlTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Nb3VzZURvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLmRvd24oZXZlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLm1vdXNlUG9pbnRlci51cGRhdGVNb3Rpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuTU9VU0VfRE9XTiwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIG1vdXNlIG1vdmUgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvbk1vdXNlTW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gTW91c2UgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uTW91c2VNb3ZlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIubW92ZShldmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLnVwZGF0ZU1vdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9NT1ZFLCB0aGlzLm1vdXNlUG9pbnRlckNvbnRhaW5lcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIGEgbW91c2UgdXAgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvbk1vdXNlVXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvbk1vdXNlVXA6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1vdXNlUG9pbnRlci51cChldmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLnVwZGF0ZU1vdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9VUCwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIG1vdXNlIHdoZWVsIGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIE1vdXNlTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Nb3VzZVdoZWVsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2hlZWxFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBXaGVlbCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIud2hlZWwoZXZlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9XSEVFTCwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHBvaW50ZXIgbG9jayBjaGFuZ2UgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblBvaW50ZXJMb2NrQ2hhbmdlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSTE9DS19DSEFOR0VcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvblBvaW50ZXJMb2NrQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGlzTG9ja2VkID0gdGhpcy5tb3VzZS5sb2NrZWQ7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLmxvY2tlZCA9IGlzTG9ja2VkO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5QT0lOVEVSTE9DS19DSEFOR0UsIGV2ZW50LCBpc0xvY2tlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBHYW1lIE9iamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBhIGNhbmRpZGF0ZSBmb3IgaW5wdXQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIENoZWNrcyBpZiB0aGUgR2FtZSBPYmplY3QgaGFzIGFuIGlucHV0IGNvbXBvbmVudCB0aGF0IGlzIGVuYWJsZWQsIHRoYXQgaXQgd2lsbCByZW5kZXIsXHJcbiAgICAgKiBhbmQgZmluYWxseSwgaWYgaXQgaGFzIGEgcGFyZW50LCB0aGF0IHRoZSBwYXJlbnQgcGFyZW50LCBvciBhbnkgYW5jZXN0b3IsIGlzIHZpc2libGUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNpbnB1dENhbmRpZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHdoaWNoIGlzIGJlaW5nIHRlc3RlZCBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGlucHV0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaW5wdXRDYW5kaWRhdGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGlucHV0ID0gZ2FtZU9iamVjdC5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dCB8fCAhaW5wdXQuZW5hYmxlZCB8fCAoIWlucHV0LmFsd2F5c0VuYWJsZWQgJiYgIWdhbWVPYmplY3Qud2lsbFJlbmRlcihjYW1lcmEpKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB2YXIgcGFyZW50ID0gZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkb1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC53aWxsUmVuZGVyKGNhbWVyYSkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgICAgICB9IHdoaWxlIChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZpc2libGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgYSBoaXQgdGVzdCB1c2luZyB0aGUgZ2l2ZW4gUG9pbnRlciBhbmQgY2FtZXJhLCBhZ2FpbnN0IGFuIGFycmF5IG9mIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3RzIGFyZSBjdWxsZWQgYWdhaW5zdCB0aGUgY2FtZXJhLCBhbmQgdGhlbiB0aGUgY29vcmRpbmF0ZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbG9jYWwgY2FtZXJhIHNwYWNlXHJcbiAgICAgKiBhbmQgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhleSBmYWxsIHdpdGhpbiB0aGUgcmVtYWluaW5nIEdhbWUgT2JqZWN0cyBoaXQgYXJlYXMgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vdGhpbmcgaXMgbWF0Y2hlZCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBJbnB1dFBsdWdpbi5oaXRUZXN0UG9pbnRlciBhbmQgZG9lc24ndCB1c3VhbGx5IG5lZWQgdG8gYmUgaW52b2tlZCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjaGl0VGVzdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHRlc3QgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB3aGljaCBpcyBiZWluZyB0ZXN0ZWQgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtvdXRwdXRdIC0gQW4gYXJyYXkgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uIElmIG5vdCBnaXZlbiwgYSBuZXcgZW1wdHkgYXJyYXkgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdGhlIEdhbWUgT2JqZWN0cyB0aGF0IHdlcmUgaGl0IGR1cmluZyB0aGlzIGhpdCB0ZXN0LlxyXG4gICAgICovXHJcbiAgICBoaXRUZXN0OiBmdW5jdGlvbiAocG9pbnRlciwgZ2FtZU9iamVjdHMsIGNhbWVyYSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkgeyBvdXRwdXQgPSB0aGlzLl90ZW1wSGl0VGVzdDsgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcFBvaW50ID0gdGhpcy5fdGVtcFBvaW50O1xyXG5cclxuICAgICAgICB2YXIgY3N4ID0gY2FtZXJhLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIGNzeSA9IGNhbWVyYS5zY3JvbGxZO1xyXG5cclxuICAgICAgICBvdXRwdXQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHggPSBwb2ludGVyLng7XHJcbiAgICAgICAgdmFyIHkgPSBwb2ludGVyLnk7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEucmVzb2x1dGlvbiAhPT0gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHggKz0gY2FtZXJhLl94O1xyXG4gICAgICAgICAgICB5ICs9IGNhbWVyYS5feTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTdG9yZXMgdGhlIHdvcmxkIHBvaW50IGluc2lkZSBvZiB0ZW1wUG9pbnRcclxuICAgICAgICBjYW1lcmEuZ2V0V29ybGRQb2ludCh4LCB5LCB0ZW1wUG9pbnQpO1xyXG5cclxuICAgICAgICBwb2ludGVyLndvcmxkWCA9IHRlbXBQb2ludC54O1xyXG4gICAgICAgIHBvaW50ZXIud29ybGRZID0gdGVtcFBvaW50Lnk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDtcclxuICAgICAgICB2YXIgcGFyZW50TWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIENoZWNrcyBpZiB0aGUgR2FtZSBPYmplY3QgY2FuIHJlY2VpdmUgaW5wdXQgKGlzbid0IGJlaW5nIGlnbm9yZWQgYnkgdGhlIGNhbWVyYSwgaW52aXNpYmxlLCBldGMpXHJcbiAgICAgICAgICAgIC8vICBhbmQgYWxzbyBjaGVja3MgYWxsIG9mIGl0cyBwYXJlbnRzLCBpZiBhbnlcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q2FuZGlkYXRlKGdhbWVPYmplY3QsIGNhbWVyYSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcHggPSB0ZW1wUG9pbnQueCArIChjc3ggKiBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclgpIC0gY3N4O1xyXG4gICAgICAgICAgICB2YXIgcHkgPSB0ZW1wUG9pbnQueSArIChjc3kgKiBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkpIC0gY3N5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmdldFdvcmxkVHJhbnNmb3JtTWF0cml4KG1hdHJpeCwgcGFyZW50TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXRyaXguYXBwbHlJbnZlcnNlKHB4LCBweSwgcG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgVHJhbnNmb3JtWFkocHgsIHB5LCBnYW1lT2JqZWN0LngsIGdhbWVPYmplY3QueSwgZ2FtZU9iamVjdC5yb3RhdGlvbiwgZ2FtZU9iamVjdC5zY2FsZVgsIGdhbWVPYmplY3Quc2NhbGVZLCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFdpdGhpbkhpdEFyZWEoZ2FtZU9iamVjdCwgcG9pbnQueCwgcG9pbnQueSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4geCBhbmQgeSBjb29yZGluYXRlIGFyZSB3aXRoaW4gdGhlIGhpdCBhcmVhIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGNvb3JkaW5hdGUgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQgaW50byB0aGUgc3BhY2Ugb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSB0aGV5IGFyZSBzZXQgaW50byB0aGUgR2FtZSBPYmplY3RzIElucHV0IGBsb2NhbFhgIGFuZCBgbG9jYWxZYCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludFdpdGhpbkhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRyYW5zbGF0ZWQgeCBjb29yZGluYXRlIGZvciB0aGUgaGl0IHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0cmFuc2xhdGVkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIGhpdCB0ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBpbnNpZGUgdGhlIEdhbWUgT2JqZWN0cyBoaXQgYXJlYSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvaW50V2l0aGluSGl0QXJlYTogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vcm1hbGl6ZSB0aGUgb3JpZ2luXHJcbiAgICAgICAgeCArPSBnYW1lT2JqZWN0LmRpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHkgKz0gZ2FtZU9iamVjdC5kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIGlucHV0ID0gZ2FtZU9iamVjdC5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmhpdEFyZWFDYWxsYmFjayhpbnB1dC5oaXRBcmVhLCB4LCB5LCBnYW1lT2JqZWN0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlucHV0LmxvY2FsWCA9IHg7XHJcbiAgICAgICAgICAgIGlucHV0LmxvY2FsWSA9IHk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0ZSBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSBvZiB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgY29vcmRpbmF0ZSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNsYXRlZCBpbnRvIHRoZSBzcGFjZSBvZiB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSB0aGV5IGFyZSBzZXQgaW50byB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0cyBJbnB1dCBgbG9jYWxYYCBhbmQgYGxvY2FsWWAgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjcG9pbnRXaXRoaW5JbnRlcmFjdGl2ZU9iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSW50ZXJhY3RpdmVPYmplY3R9IG9iamVjdCAtIFRoZSBJbnRlcmFjdGl2ZSBPYmplY3QgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRyYW5zbGF0ZWQgeCBjb29yZGluYXRlIGZvciB0aGUgaGl0IHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0cmFuc2xhdGVkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIGhpdCB0ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBpbnNpZGUgdGhlIEdhbWUgT2JqZWN0cyBoaXQgYXJlYSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvaW50V2l0aGluSW50ZXJhY3RpdmVPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvYmplY3QuaGl0QXJlYSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBOb3JtYWxpemUgdGhlIG9yaWdpblxyXG4gICAgICAgIHggKz0gb2JqZWN0LmdhbWVPYmplY3QuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSArPSBvYmplY3QuZ2FtZU9iamVjdC5kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgb2JqZWN0LmxvY2FsWCA9IHg7XHJcbiAgICAgICAgb2JqZWN0LmxvY2FsWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3QuaGl0QXJlYUNhbGxiYWNrKG9iamVjdC5oaXRBcmVhLCB4LCB5LCBvYmplY3QpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybXMgdGhlIHBhZ2VYIGFuZCBwYWdlWSB2YWx1ZXMgb2YgYSBQb2ludGVyIGludG8gdGhlIHNjYWxlZCBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciN0cmFuc2Zvcm1Qb2ludGVyXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHRyYW5zZm9ybSB0aGUgdmFsdWVzIGZvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlWCAtIFRoZSBQYWdlIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVkgLSBUaGUgUGFnZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB3YXNNb3ZlIC0gQXJlIHdlIHRyYW5zZm9ybWluZyB0aGUgUG9pbnRlciBmcm9tIGEgbW92ZSBldmVudCwgb3IgYW4gdXAgLyBkb3duIGV2ZW50P1xyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Qb2ludGVyOiBmdW5jdGlvbiAocG9pbnRlciwgcGFnZVgsIHBhZ2VZLCB3YXNNb3ZlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwMCA9IHBvaW50ZXIucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHAxID0gcG9pbnRlci5wcmV2UG9zaXRpb247XHJcblxyXG4gICAgICAgIC8vICBTdG9yZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAgICAgIHAxLnggPSBwMC54O1xyXG4gICAgICAgIHAxLnkgPSBwMC55O1xyXG5cclxuICAgICAgICAvLyAgVHJhbnNsYXRlIGNvb3JkaW5hdGVzXHJcbiAgICAgICAgdmFyIHggPSB0aGlzLnNjYWxlTWFuYWdlci50cmFuc2Zvcm1YKHBhZ2VYKTtcclxuICAgICAgICB2YXIgeSA9IHRoaXMuc2NhbGVNYW5hZ2VyLnRyYW5zZm9ybVkocGFnZVkpO1xyXG5cclxuICAgICAgICB2YXIgYSA9IHBvaW50ZXIuc21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICBpZiAoIXdhc01vdmUgfHwgYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBTZXQgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgcDAueCA9IHg7XHJcbiAgICAgICAgICAgIHAwLnkgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQXBwbHkgc21vb3RoaW5nXHJcbiAgICAgICAgICAgIHAwLnggPSB4ICogYSArIHAxLnggKiAoMSAtIGEpO1xyXG4gICAgICAgICAgICBwMC55ID0geSAqIGEgKyBwMS55ICogKDEgLSBhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIElucHV0IE1hbmFnZXIgYW5kIGFsbCBvZiBpdHMgc3lzdGVtcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gcmVjb3ZlciBmcm9tIGRvaW5nIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuZXZlbnRzLm9mZihHYW1lRXZlbnRzLlBSRV9SRU5ERVIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW91c2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdWNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucG9pbnRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9pbnRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl90ZW1wSGl0VGVzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXguZGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElucHV0TWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/InputPlugin.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/input/InputPlugin.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar CircleContains = __webpack_require__(/*! ../geom/circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar CreateInteractiveObject = __webpack_require__(/*! ./CreateInteractiveObject */ \"./node_modules/phaser/src/input/CreateInteractiveObject.js\");\r\nvar CreatePixelPerfectHandler = __webpack_require__(/*! ./CreatePixelPerfectHandler */ \"./node_modules/phaser/src/input/CreatePixelPerfectHandler.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar Ellipse = __webpack_require__(/*! ../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar EllipseContains = __webpack_require__(/*! ../geom/ellipse/Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../geom/const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ./InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar Triangle = __webpack_require__(/*! ../geom/triangle/Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\nvar TriangleContains = __webpack_require__(/*! ../geom/triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Input Plugin belongs to a Scene and handles all input related events and operations for it.\r\n *\r\n * You can access it from within a Scene using `this.input`.\r\n *\r\n * It emits events directly. For example, you can do:\r\n *\r\n * ```javascript\r\n * this.input.on('pointerdown', callback, context);\r\n * ```\r\n *\r\n * To listen for a pointer down event anywhere on the game canvas.\r\n *\r\n * Game Objects can be enabled for input by calling their `setInteractive` method. After which they\r\n * will directly emit input events:\r\n *\r\n * ```javascript\r\n * var sprite = this.add.sprite(x, y, texture);\r\n * sprite.setInteractive();\r\n * sprite.on('pointerdown', callback, context);\r\n * ```\r\n *\r\n * There are lots of game configuration options available relating to input.\r\n * See the [Input Config object]{@linkcode Phaser.Types.Core.InputConfig} for more details, including how to deal with Phaser\r\n * listening for input events outside of the canvas, how to set a default number of pointers, input\r\n * capture settings and more.\r\n *\r\n * Please also see the Input examples and tutorials for further information.\r\n *\r\n * @class InputPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene that this Input Plugin is responsible for.\r\n */\r\nvar InputPlugin = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function InputPlugin (scene)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Scene that this Input Plugin is responsible for.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene Systems class.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * A reference to the Scene Systems Settings.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#settings\r\n         * @type {Phaser.Types.Scenes.SettingsObject}\r\n         * @since 3.5.0\r\n         */\r\n        this.settings = scene.sys.settings;\r\n\r\n        /**\r\n         * A reference to the Game Input Manager.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#manager\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = scene.sys.game.input;\r\n\r\n        /**\r\n         * Internal event queue used for plugins only.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#pluginEvents\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this.pluginEvents = new EventEmitter();\r\n\r\n        /**\r\n         * If `true` this Input Plugin will process DOM input events.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.5.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * A reference to the Scene Display List. This property is set during the `boot` method.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @since 3.0.0\r\n         */\r\n        this.displayList;\r\n\r\n        /**\r\n         * A reference to the Scene Cameras Manager. This property is set during the `boot` method.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#cameras\r\n         * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cameras;\r\n\r\n        //  Inject the available input plugins into this class\r\n        InputPluginCache.install(this);\r\n\r\n        /**\r\n         * A reference to the Mouse Manager.\r\n         *\r\n         * This property is only set if Mouse support has been enabled in your Game Configuration file.\r\n         *\r\n         * If you just wish to get access to the mouse pointer, use the `mousePointer` property instead.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#mouse\r\n         * @type {?Phaser.Input.Mouse.MouseManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.mouse = this.manager.mouse;\r\n\r\n        /**\r\n         * When set to `true` (the default) the Input Plugin will emulate DOM behavior by only emitting events from\r\n         * the top-most Game Objects in the Display List.\r\n         *\r\n         * If set to `false` it will emit events from all Game Objects below a Pointer, not just the top one.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#topOnly\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.topOnly = true;\r\n\r\n        /**\r\n         * How often should the Pointers be checked?\r\n         *\r\n         * The value is a time, given in ms, and is the time that must have elapsed between game steps before\r\n         * the Pointers will be polled again. When a pointer is polled it runs a hit test to see which Game\r\n         * Objects are currently below it, or being interacted with it.\r\n         *\r\n         * Pointers will *always* be checked if they have been moved by the user, or press or released.\r\n         *\r\n         * This property only controls how often they will be polled if they have not been updated.\r\n         * You should set this if you want to have Game Objects constantly check against the pointers, even\r\n         * if the pointer didn't itself move.\r\n         *\r\n         * Set to 0 to poll constantly. Set to -1 to only poll on user movement.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#pollRate\r\n         * @type {integer}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.pollRate = -1;\r\n\r\n        /**\r\n         * Internal poll timer value.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_pollTimer\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._pollTimer = 0;\r\n\r\n        var _eventData = { cancelled: false };\r\n\r\n        /**\r\n         * Internal event propagation callback container.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_eventContainer\r\n         * @type {Phaser.Types.Input.EventData}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._eventContainer = {\r\n            stopPropagation: function ()\r\n            {\r\n                _eventData.cancelled = true;\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Internal event propagation data object.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_eventData\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.13.0\r\n         */\r\n        this._eventData = _eventData;\r\n\r\n        /**\r\n         * The distance, in pixels, a pointer has to move while being held down, before it thinks it is being dragged.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#dragDistanceThreshold\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.dragDistanceThreshold = 0;\r\n\r\n        /**\r\n         * The amount of time, in ms, a pointer has to be held down before it thinks it is dragging.\r\n         *\r\n         * The default polling rate is to poll only on move so once the time threshold is reached the\r\n         * drag event will not start until you move the mouse. If you want it to start immediately\r\n         * when the time threshold is reached, you must increase the polling rate by calling\r\n         * [setPollAlways]{@linkcode Phaser.Input.InputPlugin#setPollAlways} or\r\n         * [setPollRate]{@linkcode Phaser.Input.InputPlugin#setPollRate}.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#dragTimeThreshold\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.dragTimeThreshold = 0;\r\n\r\n        /**\r\n         * Used to temporarily store the results of the Hit Test\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_temp\r\n         * @type {array}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._temp = [];\r\n\r\n        /**\r\n         * Used to temporarily store the results of the Hit Test dropZones\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_tempZones\r\n         * @type {array}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._tempZones = [];\r\n\r\n        /**\r\n         * A list of all Game Objects that have been set to be interactive in the Scene this Input Plugin is managing.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_list\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._list = [];\r\n\r\n        /**\r\n         * Objects waiting to be inserted to the list on the next call to 'begin'.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_pendingInsertion\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._pendingInsertion = [];\r\n\r\n        /**\r\n         * Objects waiting to be removed from the list on the next call to 'begin'.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_pendingRemoval\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._pendingRemoval = [];\r\n\r\n        /**\r\n         * A list of all Game Objects that have been enabled for dragging.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_draggable\r\n         * @type {Phaser.GameObjects.GameObject[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._draggable = [];\r\n\r\n        /**\r\n         * A list of all Interactive Objects currently considered as being 'draggable' by any pointer, indexed by pointer ID.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_drag\r\n         * @type {{0:Array,1:Array,2:Array,3:Array,4:Array,5:Array,6:Array,7:Array,8:Array,9:Array,10:Array}}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._drag = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [], 10: [] };\r\n\r\n        /**\r\n         * A array containing the dragStates, for this Scene, index by the Pointer ID.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_dragState\r\n         * @type {integer[]}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._dragState = [];\r\n\r\n        /**\r\n         * A list of all Interactive Objects currently considered as being 'over' by any pointer, indexed by pointer ID.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_over\r\n         * @type {{0:Array,1:Array,2:Array,3:Array,4:Array,5:Array,6:Array,7:Array,8:Array,9:Array,10:Array}}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._over = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [], 10: [] };\r\n\r\n        /**\r\n         * A list of valid DOM event types.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_validTypes\r\n         * @type {string[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._validTypes = [ 'onDown', 'onUp', 'onOver', 'onOut', 'onMove', 'onDragStart', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDrop' ];\r\n\r\n        /**\r\n         * Internal property that tracks frame event state.\r\n         *\r\n         * @name Phaser.Input.InputPlugin#_updatedThisFrame\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.18.0\r\n         */\r\n        this._updatedThisFrame = false;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#boot\r\n     * @fires Phaser.Input.Events#BOOT\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.cameras = this.systems.cameras;\r\n\r\n        this.displayList = this.systems.displayList;\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n\r\n        //  Registered input plugins listen for this\r\n        this.pluginEvents.emit(Events.BOOT);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#start\r\n     * @fires Phaser.Input.Events#START\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.TRANSITION_START, this.transitionIn, this);\r\n        eventEmitter.on(SceneEvents.TRANSITION_OUT, this.transitionOut, this);\r\n        eventEmitter.on(SceneEvents.TRANSITION_COMPLETE, this.transitionComplete, this);\r\n        eventEmitter.on(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        this.manager.events.on(Events.GAME_OUT, this.onGameOut, this);\r\n        this.manager.events.on(Events.GAME_OVER, this.onGameOver, this);\r\n\r\n        this.enabled = true;\r\n\r\n        //  Populate the pointer drag states\r\n        this._dragState = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\r\n\r\n        //  Registered input plugins listen for this\r\n        this.pluginEvents.emit(Events.START);\r\n    },\r\n\r\n    /**\r\n     * Game Over handler.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#onGameOver\r\n     * @fires Phaser.Input.Events#GAME_OVER\r\n     * @private\r\n     * @since 3.16.2\r\n     */\r\n    onGameOver: function (event)\r\n    {\r\n        if (this.isActive())\r\n        {\r\n            this.emit(Events.GAME_OVER, event.timeStamp, event);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Game Out handler.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#onGameOut\r\n     * @fires Phaser.Input.Events#GAME_OUT\r\n     * @private\r\n     * @since 3.16.2\r\n     */\r\n    onGameOut: function (event)\r\n    {\r\n        if (this.isActive())\r\n        {\r\n            this.emit(Events.GAME_OUT, event.timeStamp, event);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The pre-update handler is responsible for checking the pending removal and insertion lists and\r\n     * deleting old Game Objects.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#preUpdate\r\n     * @private\r\n     * @fires Phaser.Input.Events#PRE_UPDATE\r\n     * @since 3.0.0\r\n     */\r\n    preUpdate: function ()\r\n    {\r\n        //  Registered input plugins listen for this\r\n        this.pluginEvents.emit(Events.PRE_UPDATE);\r\n\r\n        var removeList = this._pendingRemoval;\r\n        var insertList = this._pendingInsertion;\r\n\r\n        var toRemove = removeList.length;\r\n        var toInsert = insertList.length;\r\n\r\n        if (toRemove === 0 && toInsert === 0)\r\n        {\r\n            //  Quick bail\r\n            return;\r\n        }\r\n\r\n        var current = this._list;\r\n\r\n        //  Delete old gameObjects\r\n        for (var i = 0; i < toRemove; i++)\r\n        {\r\n            var gameObject = removeList[i];\r\n\r\n            var index = current.indexOf(gameObject);\r\n\r\n            if (index > -1)\r\n            {\r\n                current.splice(index, 1);\r\n\r\n                this.clear(gameObject, true);\r\n            }\r\n        }\r\n\r\n        //  Clear the removal list\r\n        removeList.length = 0;\r\n        this._pendingRemoval.length = 0;\r\n\r\n        //  Move pendingInsertion to list (also clears pendingInsertion at the same time)\r\n        this._list = current.concat(insertList.splice(0));\r\n    },\r\n\r\n    /**\r\n     * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#isActive\r\n     * @since 3.10.0\r\n     *\r\n     * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n     */\r\n    isActive: function ()\r\n    {\r\n        return (this.enabled && this.scene.sys.isActive());\r\n    },\r\n\r\n    /**\r\n     * This is called automatically by the Input Manager.\r\n     * It emits events for plugins to listen to and also handles polling updates, if enabled.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#updatePoll\r\n     * @since 3.18.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     *\r\n     * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n     */\r\n    updatePoll: function (time, delta)\r\n    {\r\n        if (!this.isActive())\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  The plugins should update every frame, regardless if there has been\r\n        //  any DOM input events or not (such as the Gamepad and Keyboard)\r\n        this.pluginEvents.emit(Events.UPDATE, time, delta);\r\n\r\n        //  We can leave now if we've already updated once this frame via the immediate DOM event handlers\r\n        if (this._updatedThisFrame)\r\n        {\r\n            this._updatedThisFrame = false;\r\n\r\n            return false;\r\n        }\r\n\r\n        var i;\r\n        var manager = this.manager;\r\n\r\n        var pointers = manager.pointers;\r\n        var pointersTotal = manager.pointersTotal;\r\n\r\n        for (i = 0; i < pointersTotal; i++)\r\n        {\r\n            pointers[i].updateMotion();\r\n        }\r\n\r\n        //  No point going any further if there aren't any interactive objects\r\n        if (this._list.length === 0)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var rate = this.pollRate;\r\n\r\n        if (rate === -1)\r\n        {\r\n            return false;\r\n        }\r\n        else if (rate > 0)\r\n        {\r\n            this._pollTimer -= delta;\r\n\r\n            if (this._pollTimer < 0)\r\n            {\r\n                //  Discard timer diff, we're ready to poll again\r\n                this._pollTimer = this.pollRate;\r\n            }\r\n            else\r\n            {\r\n                //  Not enough time has elapsed since the last poll, so abort now\r\n                return false;\r\n            }\r\n        }\r\n\r\n        //  We got this far? Then we should poll for movement\r\n        var captured = false;\r\n\r\n        for (i = 0; i < pointersTotal; i++)\r\n        {\r\n            var total = 0;\r\n\r\n            var pointer = pointers[i];\r\n\r\n            //  Always reset this array\r\n            this._tempZones = [];\r\n\r\n            //  _temp contains a hit tested and camera culled list of IO objects\r\n            this._temp = this.hitTestPointer(pointer);\r\n\r\n            this.sortGameObjects(this._temp);\r\n            this.sortGameObjects(this._tempZones);\r\n\r\n            if (this.topOnly)\r\n            {\r\n                //  Only the top-most one counts now, so safely ignore the rest\r\n                if (this._temp.length)\r\n                {\r\n                    this._temp.splice(1);\r\n                }\r\n\r\n                if (this._tempZones.length)\r\n                {\r\n                    this._tempZones.splice(1);\r\n                }\r\n            }\r\n\r\n            total += this.processOverOutEvents(pointer);\r\n\r\n            if (this.getDragState(pointer) === 2)\r\n            {\r\n                this.processDragThresholdEvent(pointer, time);\r\n            }\r\n\r\n            if (total > 0)\r\n            {\r\n                //  We interacted with an event in this Scene, so block any Scenes below us from doing the same this frame\r\n                captured = true;\r\n            }\r\n        }\r\n\r\n        return captured;\r\n    },\r\n\r\n    /**\r\n     * This method is called when a DOM Event is received by the Input Manager. It handles dispatching the events\r\n     * to relevant input enabled Game Objects in this scene.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#update\r\n     * @private\r\n     * @fires Phaser.Input.Events#UPDATE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} type - The type of event to process.\r\n     * @param {Phaser.Input.Pointer[]} pointers - An array of Pointers on which the event occurred.\r\n     *\r\n     * @return {boolean} `true` if this Scene has captured the input events from all other Scenes, otherwise `false`.\r\n     */\r\n    update: function (type, pointers)\r\n    {\r\n        if (!this.isActive())\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var pointersTotal = pointers.length;\r\n        var captured = false;\r\n\r\n        for (var i = 0; i < pointersTotal; i++)\r\n        {\r\n            var total = 0;\r\n            var pointer = pointers[i];\r\n\r\n            //  Always reset this array\r\n            this._tempZones = [];\r\n\r\n            //  _temp contains a hit tested and camera culled list of IO objects\r\n            this._temp = this.hitTestPointer(pointer);\r\n\r\n            this.sortGameObjects(this._temp);\r\n            this.sortGameObjects(this._tempZones);\r\n\r\n            if (this.topOnly)\r\n            {\r\n                //  Only the top-most one counts now, so safely ignore the rest\r\n                if (this._temp.length)\r\n                {\r\n                    this._temp.splice(1);\r\n                }\r\n\r\n                if (this._tempZones.length)\r\n                {\r\n                    this._tempZones.splice(1);\r\n                }\r\n            }\r\n\r\n            switch (type)\r\n            {\r\n                case CONST.MOUSE_DOWN:\r\n                    total += this.processDragDownEvent(pointer);\r\n                    total += this.processDownEvents(pointer);\r\n                    total += this.processOverOutEvents(pointer);\r\n                    break;\r\n\r\n                case CONST.MOUSE_UP:\r\n                    total += this.processDragUpEvent(pointer);\r\n                    total += this.processUpEvents(pointer);\r\n                    total += this.processOverOutEvents(pointer);\r\n                    break;\r\n\r\n                case CONST.TOUCH_START:\r\n                    total += this.processDragDownEvent(pointer);\r\n                    total += this.processDownEvents(pointer);\r\n                    total += this.processOverEvents(pointer);\r\n                    break;\r\n\r\n                case CONST.TOUCH_END:\r\n                case CONST.TOUCH_CANCEL:\r\n                    total += this.processDragUpEvent(pointer);\r\n                    total += this.processUpEvents(pointer);\r\n                    total += this.processOutEvents(pointer);\r\n                    break;\r\n\r\n                case CONST.MOUSE_MOVE:\r\n                case CONST.TOUCH_MOVE:\r\n                    total += this.processDragMoveEvent(pointer);\r\n                    total += this.processMoveEvents(pointer);\r\n                    total += this.processOverOutEvents(pointer);\r\n                    break;\r\n\r\n                case CONST.MOUSE_WHEEL:\r\n                    total += this.processWheelEvent(pointer);\r\n                    break;\r\n            }\r\n\r\n            if (total > 0)\r\n            {\r\n                //  We interacted with an event in this Scene, so block any Scenes below us from doing the same this frame\r\n                captured = true;\r\n            }\r\n        }\r\n\r\n        this._updatedThisFrame = true;\r\n\r\n        return captured;\r\n    },\r\n\r\n    /**\r\n     * Clears a Game Object so it no longer has an Interactive Object associated with it.\r\n     * The Game Object is then queued for removal from the Input Plugin on the next update.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will have its Interactive Object removed.\r\n     * @param {boolean} [skipQueue=false] - Skip adding this Game Object into the removal queue?\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that had its Interactive Object removed.\r\n     */\r\n    clear: function (gameObject, skipQueue)\r\n    {\r\n        if (skipQueue === undefined) { skipQueue = false; }\r\n\r\n        var input = gameObject.input;\r\n\r\n        // If GameObject.input already cleared from higher class\r\n        if (!input)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (!skipQueue)\r\n        {\r\n            this.queueForRemoval(gameObject);\r\n        }\r\n\r\n        input.gameObject = undefined;\r\n        input.target = undefined;\r\n        input.hitArea = undefined;\r\n        input.hitAreaCallback = undefined;\r\n        input.callbackContext = undefined;\r\n\r\n        this.manager.resetCursor(input);\r\n\r\n        gameObject.input = null;\r\n\r\n        //  Clear from _draggable, _drag and _over\r\n        var index = this._draggable.indexOf(gameObject);\r\n\r\n        if (index > -1)\r\n        {\r\n            this._draggable.splice(index, 1);\r\n        }\r\n\r\n        index = this._drag[0].indexOf(gameObject);\r\n\r\n        if (index > -1)\r\n        {\r\n            this._drag[0].splice(index, 1);\r\n        }\r\n\r\n        index = this._over[0].indexOf(gameObject);\r\n\r\n        if (index > -1)\r\n        {\r\n            this._over[0].splice(index, 1);\r\n        }\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Disables Input on a single Game Object.\r\n     *\r\n     * An input disabled Game Object still retains its Interactive Object component and can be re-enabled\r\n     * at any time, by passing it to `InputPlugin.enable`.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#disable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to have its input system disabled.\r\n     */\r\n    disable: function (gameObject)\r\n    {\r\n        gameObject.input.enabled = false;\r\n    },\r\n\r\n    /**\r\n     * Enable a Game Object for interaction.\r\n     *\r\n     * If the Game Object already has an Interactive Object component, it is enabled and returned.\r\n     *\r\n     * Otherwise, a new Interactive Object component is created and assigned to the Game Object's `input` property.\r\n     *\r\n     * Input works by using hit areas, these are nearly always geometric shapes, such as rectangles or circles, that act as the hit area\r\n     * for the Game Object. However, you can provide your own hit area shape and callback, should you wish to handle some more advanced\r\n     * input detection.\r\n     *\r\n     * If no arguments are provided it will try and create a rectangle hit area based on the texture frame the Game Object is using. If\r\n     * this isn't a texture-bound object, such as a Graphics or BitmapText object, this will fail, and you'll need to provide a specific\r\n     * shape for it to use.\r\n     *\r\n     * You can also provide an Input Configuration Object as the only argument to this method.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#enable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to be enabled for input.\r\n     * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The 'contains' function to invoke to check if the pointer is within the hit area.\r\n     * @param {boolean} [dropZone=false] - Is this Game Object a drop zone or not?\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n     */\r\n    enable: function (gameObject, shape, callback, dropZone)\r\n    {\r\n        if (dropZone === undefined) { dropZone = false; }\r\n\r\n        if (gameObject.input)\r\n        {\r\n            //  If it is already has an InteractiveObject then just enable it and return\r\n            gameObject.input.enabled = true;\r\n        }\r\n        else\r\n        {\r\n            //  Create an InteractiveObject and enable it\r\n            this.setHitArea(gameObject, shape, callback);\r\n        }\r\n\r\n        if (gameObject.input && dropZone && !gameObject.input.dropZone)\r\n        {\r\n            gameObject.input.dropZone = dropZone;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes the given Pointer and performs a hit test against it, to see which interactive Game Objects\r\n     * it is currently above.\r\n     *\r\n     * The hit test is performed against which-ever Camera the Pointer is over. If it is over multiple\r\n     * cameras, it starts checking the camera at the top of the camera list, and if nothing is found, iterates down the list.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#hitTestPointer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to check against the Game Objects.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} An array of all the interactive Game Objects the Pointer was above.\r\n     */\r\n    hitTestPointer: function (pointer)\r\n    {\r\n        var cameras = this.cameras.getCamerasBelowPointer(pointer);\r\n\r\n        for (var c = 0; c < cameras.length; c++)\r\n        {\r\n            var camera = cameras[c];\r\n\r\n            //  Get a list of all objects that can be seen by the camera below the pointer in the scene and store in 'over' array.\r\n            //  All objects in this array are input enabled, as checked by the hitTest method, so we don't need to check later on as well.\r\n            var over = this.manager.hitTest(pointer, this._list, camera);\r\n\r\n            //  Filter out the drop zones\r\n            for (var i = 0; i < over.length; i++)\r\n            {\r\n                var obj = over[i];\r\n\r\n                if (obj.input.dropZone)\r\n                {\r\n                    this._tempZones.push(obj);\r\n                }\r\n            }\r\n\r\n            if (over.length > 0)\r\n            {\r\n                pointer.camera = camera;\r\n\r\n                return over;\r\n            }\r\n        }\r\n\r\n        //  If we got this far then there were no Game Objects below the pointer, but it was still over\r\n        //  a camera, so set that the top-most one into the pointer\r\n\r\n        pointer.camera = cameras[0];\r\n\r\n        return [];\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer down event.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDownEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_DOWN\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DOWN\r\n     * @fires Phaser.Input.Events#POINTER_DOWN\r\n     * @fires Phaser.Input.Events#POINTER_DOWN_OUTSIDE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer being tested.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processDownEvents: function (pointer)\r\n    {\r\n        var total = 0;\r\n        var currentlyOver = this._temp;\r\n\r\n        var _eventData = this._eventData;\r\n        var _eventContainer = this._eventContainer;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        var aborted = false;\r\n\r\n        //  Go through all objects the pointer was over and fire their events / callbacks\r\n        for (var i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            var gameObject = currentlyOver[i];\r\n\r\n            if (!gameObject.input)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            total++;\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_POINTER_DOWN, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n\r\n            this.emit(Events.GAMEOBJECT_DOWN, pointer, gameObject, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        //  If they released outside the canvas, but pressed down inside it, we'll still dispatch the event.\r\n        if (!aborted && this.manager)\r\n        {\r\n            if (pointer.downElement === this.manager.game.canvas)\r\n            {\r\n                this.emit(Events.POINTER_DOWN, pointer, currentlyOver);\r\n            }\r\n            else\r\n            {\r\n                this.emit(Events.POINTER_DOWN_OUTSIDE, pointer);\r\n            }\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * Returns the drag state of the given Pointer for this Input Plugin.\r\n     *\r\n     * The state will be one of the following:\r\n     *\r\n     * 0 = Not dragging anything\r\n     * 1 = Primary button down and objects below, so collect a draglist\r\n     * 2 = Pointer being checked if meets drag criteria\r\n     * 3 = Pointer meets criteria, notify the draglist\r\n     * 4 = Pointer actively dragging the draglist and has moved\r\n     * 5 = Pointer actively dragging but has been released, notify draglist\r\n     *\r\n     * @method Phaser.Input.InputPlugin#getDragState\r\n     * @since 3.16.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to get the drag state for.\r\n     *\r\n     * @return {integer} The drag state of the given Pointer.\r\n     */\r\n    getDragState: function (pointer)\r\n    {\r\n        return this._dragState[pointer.id];\r\n    },\r\n\r\n    /**\r\n     * Sets the drag state of the given Pointer for this Input Plugin.\r\n     *\r\n     * The state must be one of the following values:\r\n     *\r\n     * 0 = Not dragging anything\r\n     * 1 = Primary button down and objects below, so collect a draglist\r\n     * 2 = Pointer being checked if meets drag criteria\r\n     * 3 = Pointer meets criteria, notify the draglist\r\n     * 4 = Pointer actively dragging the draglist and has moved\r\n     * 5 = Pointer actively dragging but has been released, notify draglist\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setDragState\r\n     * @since 3.16.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to set the drag state for.\r\n     * @param {integer} state - The drag state value. An integer between 0 and 5.\r\n     */\r\n    setDragState: function (pointer, state)\r\n    {\r\n        this._dragState[pointer.id] = state;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if a Pointer is ready to drag the objects below it, based on either a distance\r\n     * or time threshold.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDragThresholdEvent\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to check the drag thresholds on.\r\n     * @param {number} time - The current time.\r\n     */\r\n    processDragThresholdEvent: function (pointer, time)\r\n    {\r\n        var passed = false;\r\n        var timeThreshold = this.dragTimeThreshold;\r\n        var distanceThreshold = this.dragDistanceThreshold;\r\n\r\n        if (distanceThreshold > 0 && DistanceBetween(pointer.x, pointer.y, pointer.downX, pointer.downY) >= distanceThreshold)\r\n        {\r\n            //  It has moved far enough to be considered a drag\r\n            passed = true;\r\n        }\r\n        else if (timeThreshold > 0 && (time >= pointer.downTime + timeThreshold))\r\n        {\r\n            //  It has been held down long enough to be considered a drag\r\n            passed = true;\r\n        }\r\n\r\n        if (passed)\r\n        {\r\n            this.setDragState(pointer, 3);\r\n\r\n            return this.processDragStartList(pointer);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Processes the drag list for the given pointer and dispatches the start events for each object on it.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDragStartList\r\n     * @private\r\n     * @fires Phaser.Input.Events#DRAG_START\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_START\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n     *\r\n     * @return {integer} The number of items that DRAG_START was called on.\r\n     */\r\n    processDragStartList: function (pointer)\r\n    {\r\n        //  3 = Pointer meets criteria and is freshly down, notify the draglist\r\n        if (this.getDragState(pointer) !== 3)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        var list = this._drag[pointer.id];\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            var gameObject = list[i];\r\n\r\n            var input = gameObject.input;\r\n\r\n            input.dragState = 2;\r\n\r\n            input.dragStartX = gameObject.x;\r\n            input.dragStartY = gameObject.y;\r\n\r\n            input.dragStartXGlobal = pointer.x;\r\n            input.dragStartYGlobal = pointer.y;\r\n\r\n            input.dragX = input.dragStartXGlobal - input.dragStartX;\r\n            input.dragY = input.dragStartYGlobal - input.dragStartY;\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_DRAG_START, pointer, input.dragX, input.dragY);\r\n\r\n            this.emit(Events.DRAG_START, pointer, gameObject);\r\n        }\r\n\r\n        this.setDragState(pointer, 4);\r\n\r\n        return list.length;\r\n    },\r\n\r\n    /**\r\n     * Processes a 'drag down' event for the given pointer. Checks the pointer state, builds-up the drag list\r\n     * and prepares them all for interaction.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDragDownEvent\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n     *\r\n     * @return {integer} The number of items that were collected on the drag list.\r\n     */\r\n    processDragDownEvent: function (pointer)\r\n    {\r\n        var currentlyOver = this._temp;\r\n\r\n        if (this._draggable.length === 0 || currentlyOver.length === 0 || !pointer.primaryDown || this.getDragState(pointer) !== 0)\r\n        {\r\n            //  There are no draggable items, no over items or the pointer isn't down, so let's not even bother going further\r\n            return 0;\r\n        }\r\n\r\n        //  1 = Primary button down and objects below, so collect a draglist\r\n        this.setDragState(pointer, 1);\r\n\r\n        //  Get draggable objects, sort them, pick the top (or all) and store them somewhere\r\n        var draglist = [];\r\n\r\n        for (var i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            var gameObject = currentlyOver[i];\r\n\r\n            if (gameObject.input.draggable && (gameObject.input.dragState === 0))\r\n            {\r\n                draglist.push(gameObject);\r\n            }\r\n        }\r\n\r\n        if (draglist.length === 0)\r\n        {\r\n            this.setDragState(pointer, 0);\r\n\r\n            return 0;\r\n        }\r\n        else if (draglist.length > 1)\r\n        {\r\n            this.sortGameObjects(draglist);\r\n\r\n            if (this.topOnly)\r\n            {\r\n                draglist.splice(1);\r\n            }\r\n        }\r\n\r\n        //  draglist now contains all potential candidates for dragging\r\n        this._drag[pointer.id] = draglist;\r\n\r\n        if (this.dragDistanceThreshold === 0 && this.dragTimeThreshold === 0)\r\n        {\r\n            //  No drag criteria, so snap immediately to mode 3\r\n            this.setDragState(pointer, 3);\r\n\r\n            return this.processDragStartList(pointer);\r\n        }\r\n        else\r\n        {\r\n            //  Check the distance / time on the next event\r\n            this.setDragState(pointer, 2);\r\n\r\n            return 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Processes a 'drag move' event for the given pointer.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDragMoveEvent\r\n     * @private\r\n     * @fires Phaser.Input.Events#DRAG_ENTER\r\n     * @fires Phaser.Input.Events#DRAG\r\n     * @fires Phaser.Input.Events#DRAG_LEAVE\r\n     * @fires Phaser.Input.Events#DRAG_OVER\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_ENTER\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_LEAVE\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_OVER\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n     *\r\n     * @return {integer} The number of items that were updated by this drag event.\r\n     */\r\n    processDragMoveEvent: function (pointer)\r\n    {\r\n        //  2 = Pointer being checked if meets drag criteria\r\n        if (this.getDragState(pointer) === 2)\r\n        {\r\n            this.processDragThresholdEvent(pointer, this.manager.game.loop.now);\r\n        }\r\n\r\n        if (this.getDragState(pointer) !== 4)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        //  4 = Pointer actively dragging the draglist and has moved\r\n        var dropZones = this._tempZones;\r\n\r\n        var list = this._drag[pointer.id];\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            var gameObject = list[i];\r\n\r\n            var input = gameObject.input;\r\n\r\n            var target = input.target;\r\n\r\n            //  If this GO has a target then let's check it\r\n            if (target)\r\n            {\r\n                var index = dropZones.indexOf(target);\r\n\r\n                //  Got a target, are we still over it?\r\n                if (index === 0)\r\n                {\r\n                    //  We're still over it, and it's still the top of the display list, phew ...\r\n                    gameObject.emit(Events.GAMEOBJECT_DRAG_OVER, pointer, target);\r\n\r\n                    this.emit(Events.DRAG_OVER, pointer, gameObject, target);\r\n                }\r\n                else if (index > 0)\r\n                {\r\n                    //  Still over it but it's no longer top of the display list (targets must always be at the top)\r\n                    gameObject.emit(Events.GAMEOBJECT_DRAG_LEAVE, pointer, target);\r\n\r\n                    this.emit(Events.DRAG_LEAVE, pointer, gameObject, target);\r\n\r\n                    input.target = dropZones[0];\r\n\r\n                    target = input.target;\r\n\r\n                    gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n                    this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n                }\r\n                else\r\n                {\r\n                    //  Nope, we've moved on (or the target has!), leave the old target\r\n                    gameObject.emit(Events.GAMEOBJECT_DRAG_LEAVE, pointer, target);\r\n\r\n                    this.emit(Events.DRAG_LEAVE, pointer, gameObject, target);\r\n\r\n                    //  Anything new to replace it?\r\n                    //  Yup!\r\n                    if (dropZones[0])\r\n                    {\r\n                        input.target = dropZones[0];\r\n\r\n                        target = input.target;\r\n\r\n                        gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n                        this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n                    }\r\n                    else\r\n                    {\r\n                        //  Nope\r\n                        input.target = null;\r\n                    }\r\n                }\r\n            }\r\n            else if (!target && dropZones[0])\r\n            {\r\n                input.target = dropZones[0];\r\n\r\n                target = input.target;\r\n\r\n                gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n                this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n            }\r\n\r\n            var dragX;\r\n            var dragY;\r\n\r\n            if (!gameObject.parentContainer)\r\n            {\r\n                dragX = pointer.x - input.dragX;\r\n                dragY = pointer.y - input.dragY;\r\n            }\r\n            else\r\n            {\r\n                var dx = pointer.x - input.dragStartXGlobal;\r\n                var dy = pointer.y - input.dragStartYGlobal;\r\n\r\n                var rotation = gameObject.getParentRotation();\r\n\r\n                var dxRotated = dx * Math.cos(rotation) + dy * Math.sin(rotation);\r\n                var dyRotated = dy * Math.cos(rotation) - dx * Math.sin(rotation);\r\n\r\n                dxRotated *= (1 / gameObject.parentContainer.scaleX);\r\n                dyRotated *= (1 / gameObject.parentContainer.scaleY);\r\n\r\n                dragX = dxRotated + input.dragStartX;\r\n                dragY = dyRotated + input.dragStartY;\r\n            }\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_DRAG, pointer, dragX, dragY);\r\n\r\n            this.emit(Events.DRAG, pointer, gameObject, dragX, dragY);\r\n        }\r\n\r\n        return list.length;\r\n    },\r\n\r\n    /**\r\n     * Processes a 'drag down' event for the given pointer. Checks the pointer state, builds-up the drag list\r\n     * and prepares them all for interaction.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processDragUpEvent\r\n     * @fires Phaser.Input.Events#DRAG_END\r\n     * @fires Phaser.Input.Events#DROP\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_END\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_DROP\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n     *\r\n     * @return {integer} The number of items that were updated by this drag event.\r\n     */\r\n    processDragUpEvent: function (pointer)\r\n    {\r\n        //  5 = Pointer was actively dragging but has been released, notify draglist\r\n        var list = this._drag[pointer.id];\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            var gameObject = list[i];\r\n\r\n            var input = gameObject.input;\r\n\r\n            if (input && input.dragState === 2)\r\n            {\r\n                input.dragState = 0;\r\n\r\n                input.dragX = input.localX - gameObject.displayOriginX;\r\n                input.dragY = input.localY - gameObject.displayOriginY;\r\n\r\n                var dropped = false;\r\n\r\n                var target = input.target;\r\n\r\n                if (target)\r\n                {\r\n                    gameObject.emit(Events.GAMEOBJECT_DROP, pointer, target);\r\n\r\n                    this.emit(Events.DROP, pointer, gameObject, target);\r\n\r\n                    input.target = null;\r\n\r\n                    dropped = true;\r\n                }\r\n\r\n                //  And finally the dragend event\r\n\r\n                if (gameObject.input)\r\n                {\r\n                    gameObject.emit(Events.GAMEOBJECT_DRAG_END, pointer, input.dragX, input.dragY, dropped);\r\n\r\n                    this.emit(Events.DRAG_END, pointer, gameObject, dropped);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.setDragState(pointer, 0);\r\n\r\n        list.splice(0);\r\n\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer movement event.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processMoveEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_MOVE\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_MOVE\r\n     * @fires Phaser.Input.Events#POINTER_MOVE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processMoveEvents: function (pointer)\r\n    {\r\n        var total = 0;\r\n        var currentlyOver = this._temp;\r\n\r\n        var _eventData = this._eventData;\r\n        var _eventContainer = this._eventContainer;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        var aborted = false;\r\n\r\n        //  Go through all objects the pointer was over and fire their events / callbacks\r\n        for (var i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            var gameObject = currentlyOver[i];\r\n\r\n            if (!gameObject.input)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            total++;\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_POINTER_MOVE, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n\r\n            this.emit(Events.GAMEOBJECT_MOVE, pointer, gameObject, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n\r\n            if (this.topOnly)\r\n            {\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!aborted)\r\n        {\r\n            this.emit(Events.POINTER_MOVE, pointer, currentlyOver);\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles a mouse wheel event.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processWheelEvent\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_WHEEL\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_WHEEL\r\n     * @fires Phaser.Input.Events#POINTER_WHEEL\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processWheelEvent: function (pointer)\r\n    {\r\n        var total = 0;\r\n        var currentlyOver = this._temp;\r\n\r\n        var _eventData = this._eventData;\r\n        var _eventContainer = this._eventContainer;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        var aborted = false;\r\n\r\n        var dx = pointer.deltaX;\r\n        var dy = pointer.deltaY;\r\n        var dz = pointer.deltaZ;\r\n\r\n        //  Go through all objects the pointer was over and fire their events / callbacks\r\n        for (var i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            var gameObject = currentlyOver[i];\r\n\r\n            if (!gameObject.input)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            total++;\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_POINTER_WHEEL, pointer, dx, dy, dz, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n\r\n            this.emit(Events.GAMEOBJECT_WHEEL, pointer, gameObject, dx, dy, dz, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!aborted)\r\n        {\r\n            this.emit(Events.POINTER_WHEEL, pointer, currentlyOver, dx, dy, dz);\r\n        }\r\n\r\n        return total;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer over events.\r\n     * This is called when a touch input hits the canvas, having previously been off of it.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processOverEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_OVER\r\n     * @fires Phaser.Input.Events#POINTER_OVER\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processOverEvents: function (pointer)\r\n    {\r\n        var currentlyOver = this._temp;\r\n\r\n        var totalInteracted = 0;\r\n\r\n        var total = currentlyOver.length;\r\n\r\n        var justOver = [];\r\n\r\n        if (total > 0)\r\n        {\r\n            var manager = this.manager;\r\n\r\n            var _eventData = this._eventData;\r\n            var _eventContainer = this._eventContainer;\r\n\r\n            _eventData.cancelled = false;\r\n\r\n            var aborted = false;\r\n\r\n            for (var i = 0; i < total; i++)\r\n            {\r\n                var gameObject = currentlyOver[i];\r\n\r\n                if (!gameObject.input)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                justOver.push(gameObject);\r\n\r\n                manager.setCursor(gameObject.input);\r\n\r\n                gameObject.emit(Events.GAMEOBJECT_POINTER_OVER, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n                totalInteracted++;\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n\r\n                this.emit(Events.GAMEOBJECT_OVER, pointer, gameObject, _eventContainer);\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!aborted)\r\n            {\r\n                this.emit(Events.POINTER_OVER, pointer, justOver);\r\n            }\r\n        }\r\n\r\n        //  Then sort it into display list order\r\n        this._over[pointer.id] = justOver;\r\n\r\n        return totalInteracted;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer out events.\r\n     * This is called when a touch input leaves the canvas, as it can never be 'over' in this case.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processOutEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_OUT\r\n     * @fires Phaser.Input.Events#POINTER_OUT\r\n     * @since 3.18.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processOutEvents: function (pointer)\r\n    {\r\n        var previouslyOver = this._over[pointer.id];\r\n\r\n        var totalInteracted = 0;\r\n\r\n        var total = previouslyOver.length;\r\n\r\n        if (total > 0)\r\n        {\r\n            var manager = this.manager;\r\n\r\n            var _eventData = this._eventData;\r\n            var _eventContainer = this._eventContainer;\r\n\r\n            _eventData.cancelled = false;\r\n\r\n            var aborted = false;\r\n\r\n            this.sortGameObjects(previouslyOver);\r\n\r\n            for (var i = 0; i < total; i++)\r\n            {\r\n                var gameObject = previouslyOver[i];\r\n\r\n                //  Call onOut for everything in the previouslyOver array\r\n                for (i = 0; i < total; i++)\r\n                {\r\n                    gameObject = previouslyOver[i];\r\n\r\n                    if (!gameObject.input)\r\n                    {\r\n                        continue;\r\n                    }\r\n\r\n                    manager.resetCursor(gameObject.input);\r\n\r\n                    gameObject.emit(Events.GAMEOBJECT_POINTER_OUT, pointer, _eventContainer);\r\n\r\n                    totalInteracted++;\r\n\r\n                    if (_eventData.cancelled || !gameObject.input)\r\n                    {\r\n                        aborted = true;\r\n                        break;\r\n                    }\r\n\r\n                    this.emit(Events.GAMEOBJECT_OUT, pointer, gameObject, _eventContainer);\r\n\r\n                    if (_eventData.cancelled || !gameObject.input)\r\n                    {\r\n                        aborted = true;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (!aborted)\r\n                {\r\n                    this.emit(Events.POINTER_OUT, pointer, previouslyOver);\r\n                }\r\n            }\r\n\r\n            this._over[pointer.id] = [];\r\n        }\r\n\r\n        return totalInteracted;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer over and out events.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processOverOutEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_OVER\r\n     * @fires Phaser.Input.Events#POINTER_OVER\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_OUT\r\n     * @fires Phaser.Input.Events#POINTER_OUT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processOverOutEvents: function (pointer)\r\n    {\r\n        var currentlyOver = this._temp;\r\n\r\n        var i;\r\n        var gameObject;\r\n        var justOut = [];\r\n        var justOver = [];\r\n        var stillOver = [];\r\n        var previouslyOver = this._over[pointer.id];\r\n        var currentlyDragging = this._drag[pointer.id];\r\n\r\n        var manager = this.manager;\r\n\r\n        //  Go through all objects the pointer was previously over, and see if it still is.\r\n        //  Splits the previouslyOver array into two parts: justOut and stillOver\r\n\r\n        for (i = 0; i < previouslyOver.length; i++)\r\n        {\r\n            gameObject = previouslyOver[i];\r\n\r\n            if (currentlyOver.indexOf(gameObject) === -1 && currentlyDragging.indexOf(gameObject) === -1)\r\n            {\r\n                //  Not in the currentlyOver array, so must be outside of this object now\r\n                justOut.push(gameObject);\r\n            }\r\n            else\r\n            {\r\n                //  In the currentlyOver array\r\n                stillOver.push(gameObject);\r\n            }\r\n        }\r\n\r\n        //  Go through all objects the pointer is currently over (the hit test results)\r\n        //  and if not in the previouslyOver array we know it's a new entry, so add to justOver\r\n        for (i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            gameObject = currentlyOver[i];\r\n\r\n            //  Is this newly over?\r\n\r\n            if (previouslyOver.indexOf(gameObject) === -1)\r\n            {\r\n                justOver.push(gameObject);\r\n            }\r\n        }\r\n\r\n        //  By this point the arrays are filled, so now we can process what happened...\r\n\r\n        //  Process the Just Out objects\r\n        var total = justOut.length;\r\n\r\n        var totalInteracted = 0;\r\n\r\n        var _eventData = this._eventData;\r\n        var _eventContainer = this._eventContainer;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        var aborted = false;\r\n\r\n        if (total > 0)\r\n        {\r\n            this.sortGameObjects(justOut);\r\n\r\n            //  Call onOut for everything in the justOut array\r\n            for (i = 0; i < total; i++)\r\n            {\r\n                gameObject = justOut[i];\r\n\r\n                if (!gameObject.input)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                //  Reset cursor before we emit the event, in case they want to change it during the event\r\n                manager.resetCursor(gameObject.input);\r\n\r\n                gameObject.emit(Events.GAMEOBJECT_POINTER_OUT, pointer, _eventContainer);\r\n\r\n                totalInteracted++;\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n\r\n                this.emit(Events.GAMEOBJECT_OUT, pointer, gameObject, _eventContainer);\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!aborted)\r\n            {\r\n                this.emit(Events.POINTER_OUT, pointer, justOut);\r\n            }\r\n        }\r\n\r\n        //  Process the Just Over objects\r\n        total = justOver.length;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        aborted = false;\r\n\r\n        if (total > 0)\r\n        {\r\n            this.sortGameObjects(justOver);\r\n\r\n            //  Call onOver for everything in the justOver array\r\n            for (i = 0; i < total; i++)\r\n            {\r\n                gameObject = justOver[i];\r\n\r\n                if (!gameObject.input)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                //  Set cursor before we emit the event, in case they want to change it during the event\r\n                manager.setCursor(gameObject.input);\r\n\r\n                gameObject.emit(Events.GAMEOBJECT_POINTER_OVER, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n                totalInteracted++;\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n\r\n                this.emit(Events.GAMEOBJECT_OVER, pointer, gameObject, _eventContainer);\r\n\r\n                if (_eventData.cancelled || !gameObject.input)\r\n                {\r\n                    aborted = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!aborted)\r\n            {\r\n                this.emit(Events.POINTER_OVER, pointer, justOver);\r\n            }\r\n        }\r\n\r\n        //  Add the contents of justOver to the previously over array\r\n        previouslyOver = stillOver.concat(justOver);\r\n\r\n        //  Then sort it into display list order\r\n        this._over[pointer.id] = this.sortGameObjects(previouslyOver);\r\n\r\n        return totalInteracted;\r\n    },\r\n\r\n    /**\r\n     * An internal method that handles the Pointer up events.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#processUpEvents\r\n     * @private\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_UP\r\n     * @fires Phaser.Input.Events#GAMEOBJECT_UP\r\n     * @fires Phaser.Input.Events#POINTER_UP\r\n     * @fires Phaser.Input.Events#POINTER_UP_OUTSIDE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n     *\r\n     * @return {integer} The total number of objects interacted with.\r\n     */\r\n    processUpEvents: function (pointer)\r\n    {\r\n        var currentlyOver = this._temp;\r\n\r\n        var _eventData = this._eventData;\r\n        var _eventContainer = this._eventContainer;\r\n\r\n        _eventData.cancelled = false;\r\n\r\n        var aborted = false;\r\n\r\n        //  Go through all objects the pointer was over and fire their events / callbacks\r\n        for (var i = 0; i < currentlyOver.length; i++)\r\n        {\r\n            var gameObject = currentlyOver[i];\r\n\r\n            if (!gameObject.input)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            gameObject.emit(Events.GAMEOBJECT_POINTER_UP, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n\r\n            this.emit(Events.GAMEOBJECT_UP, pointer, gameObject, _eventContainer);\r\n\r\n            if (_eventData.cancelled || !gameObject.input)\r\n            {\r\n                aborted = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        //  If they released outside the canvas, but pressed down inside it, we'll still dispatch the event.\r\n        if (!aborted && this.manager)\r\n        {\r\n            if (pointer.upElement === this.manager.game.canvas)\r\n            {\r\n                this.emit(Events.POINTER_UP, pointer, currentlyOver);\r\n            }\r\n            else\r\n            {\r\n                this.emit(Events.POINTER_UP_OUTSIDE, pointer);\r\n            }\r\n        }\r\n\r\n        return currentlyOver.length;\r\n    },\r\n\r\n    /**\r\n     * Queues a Game Object for insertion into this Input Plugin on the next update.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#queueForInsertion\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to add.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    queueForInsertion: function (child)\r\n    {\r\n        if (this._pendingInsertion.indexOf(child) === -1 && this._list.indexOf(child) === -1)\r\n        {\r\n            this._pendingInsertion.push(child);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Queues a Game Object for removal from this Input Plugin on the next update.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#queueForRemoval\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object to remove.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    queueForRemoval: function (child)\r\n    {\r\n        this._pendingRemoval.push(child);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the draggable state of the given array of Game Objects.\r\n     *\r\n     * They can either be set to be draggable, or can have their draggable state removed by passing `false`.\r\n     *\r\n     * A Game Object will not fire drag events unless it has been specifically enabled for drag.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setDraggable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to change the draggable state on.\r\n     * @param {boolean} [value=true] - Set to `true` if the Game Objects should be made draggable, `false` if they should be unset.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setDraggable: function (gameObjects, value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        if (!Array.isArray(gameObjects))\r\n        {\r\n            gameObjects = [ gameObjects ];\r\n        }\r\n\r\n        for (var i = 0; i < gameObjects.length; i++)\r\n        {\r\n            var gameObject = gameObjects[i];\r\n\r\n            gameObject.input.draggable = value;\r\n\r\n            var index = this._draggable.indexOf(gameObject);\r\n\r\n            if (value && index === -1)\r\n            {\r\n                this._draggable.push(gameObject);\r\n            }\r\n            else if (!value && index > -1)\r\n            {\r\n                this._draggable.splice(index, 1);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a function that can be passed to `setInteractive`, `enable` or `setHitArea` that will handle\r\n     * pixel-perfect input detection on an Image or Sprite based Game Object, or any custom class that extends them.\r\n     *\r\n     * The following will create a sprite that is clickable on any pixel that has an alpha value >= 1.\r\n     *\r\n     * ```javascript\r\n     * this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect());\r\n     * ```\r\n     *\r\n     * The following will create a sprite that is clickable on any pixel that has an alpha value >= 150.\r\n     *\r\n     * ```javascript\r\n     * this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect(150));\r\n     * ```\r\n     *\r\n     * Once you have made an Interactive Object pixel perfect it impacts all input related events for it: down, up,\r\n     * dragstart, drag, etc.\r\n     *\r\n     * As a pointer interacts with the Game Object it will constantly poll the texture, extracting a single pixel from\r\n     * the given coordinates and checking its color values. This is an expensive process, so should only be enabled on\r\n     * Game Objects that really need it.\r\n     *\r\n     * You cannot make non-texture based Game Objects pixel perfect. So this will not work on Graphics, BitmapText,\r\n     * Render Textures, Text, Tilemaps, Containers or Particles.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#makePixelPerfect\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} [alphaTolerance=1] - The alpha level that the pixel should be above to be included as a successful interaction.\r\n     *\r\n     * @return {function} A Pixel Perfect Handler for use as a hitArea shape callback.\r\n     */\r\n    makePixelPerfect: function (alphaTolerance)\r\n    {\r\n        if (alphaTolerance === undefined) { alphaTolerance = 1; }\r\n\r\n        var textureManager = this.systems.textures;\r\n\r\n        return CreatePixelPerfectHandler(textureManager, alphaTolerance);\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for the given array of Game Objects.\r\n     *\r\n     * A hit area is typically one of the geometric shapes Phaser provides, such as a `Phaser.Geom.Rectangle`\r\n     * or `Phaser.Geom.Circle`. However, it can be any object as long as it works with the provided callback.\r\n     *\r\n     * If no hit area is provided a Rectangle is created based on the size of the Game Object, if possible\r\n     * to calculate.\r\n     *\r\n     * The hit area callback is the function that takes an `x` and `y` coordinate and returns a boolean if\r\n     * those values fall within the area of the shape or not. All of the Phaser geometry objects provide this,\r\n     * such as `Phaser.Geom.Rectangle.Contains`.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitArea\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set the hit area on.\r\n     * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The 'contains' function to invoke to check if the pointer is within the hit area.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitArea: function (gameObjects, shape, callback)\r\n    {\r\n        if (shape === undefined)\r\n        {\r\n            return this.setHitAreaFromTexture(gameObjects);\r\n        }\r\n\r\n        if (!Array.isArray(gameObjects))\r\n        {\r\n            gameObjects = [ gameObjects ];\r\n        }\r\n\r\n        var draggable = false;\r\n        var dropZone = false;\r\n        var cursor = false;\r\n        var useHandCursor = false;\r\n        var pixelPerfect = false;\r\n        var customHitArea = true;\r\n\r\n        //  Config object?\r\n        if (IsPlainObject(shape))\r\n        {\r\n            var config = shape;\r\n\r\n            shape = GetFastValue(config, 'hitArea', null);\r\n            callback = GetFastValue(config, 'hitAreaCallback', null);\r\n            draggable = GetFastValue(config, 'draggable', false);\r\n            dropZone = GetFastValue(config, 'dropZone', false);\r\n            cursor = GetFastValue(config, 'cursor', false);\r\n            useHandCursor = GetFastValue(config, 'useHandCursor', false);\r\n\r\n            pixelPerfect = GetFastValue(config, 'pixelPerfect', false);\r\n            var alphaTolerance = GetFastValue(config, 'alphaTolerance', 1);\r\n\r\n            if (pixelPerfect)\r\n            {\r\n                shape = {};\r\n                callback = this.makePixelPerfect(alphaTolerance);\r\n            }\r\n\r\n            //  Still no hitArea or callback?\r\n            if (!shape || !callback)\r\n            {\r\n                this.setHitAreaFromTexture(gameObjects);\r\n                customHitArea = false;\r\n            }\r\n        }\r\n        else if (typeof shape === 'function' && !callback)\r\n        {\r\n            callback = shape;\r\n            shape = {};\r\n        }\r\n\r\n        for (var i = 0; i < gameObjects.length; i++)\r\n        {\r\n            var gameObject = gameObjects[i];\r\n\r\n            if (pixelPerfect && gameObject.type === 'Container')\r\n            {\r\n                console.warn('Cannot pixelPerfect test a Container. Use a custom callback.');\r\n                continue;\r\n            }\r\n\r\n            var io = (!gameObject.input) ? CreateInteractiveObject(gameObject, shape, callback) : gameObject.input;\r\n\r\n            io.customHitArea = customHitArea;\r\n            io.dropZone = dropZone;\r\n            io.cursor = (useHandCursor) ? 'pointer' : cursor;\r\n\r\n            gameObject.input = io;\r\n\r\n            if (draggable)\r\n            {\r\n                this.setDraggable(gameObject);\r\n            }\r\n\r\n            this.queueForInsertion(gameObject);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Circle` shape, using\r\n     * the given coordinates and radius to control its position and size.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitAreaCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a circle hit area.\r\n     * @param {number} x - The center of the circle.\r\n     * @param {number} y - The center of the circle.\r\n     * @param {number} radius - The radius of the circle.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Circle.Contains.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitAreaCircle: function (gameObjects, x, y, radius, callback)\r\n    {\r\n        if (callback === undefined) { callback = CircleContains; }\r\n\r\n        var shape = new Circle(x, y, radius);\r\n\r\n        return this.setHitArea(gameObjects, shape, callback);\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Ellipse` shape, using\r\n     * the given coordinates and dimensions to control its position and size.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitAreaEllipse\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having an ellipse hit area.\r\n     * @param {number} x - The center of the ellipse.\r\n     * @param {number} y - The center of the ellipse.\r\n     * @param {number} width - The width of the ellipse.\r\n     * @param {number} height - The height of the ellipse.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Ellipse.Contains.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitAreaEllipse: function (gameObjects, x, y, width, height, callback)\r\n    {\r\n        if (callback === undefined) { callback = EllipseContains; }\r\n\r\n        var shape = new Ellipse(x, y, width, height);\r\n\r\n        return this.setHitArea(gameObjects, shape, callback);\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Rectangle` shape, using\r\n     * the Game Objects texture frame to define the position and size of the hit area.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitAreaFromTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having an ellipse hit area.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Rectangle.Contains.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitAreaFromTexture: function (gameObjects, callback)\r\n    {\r\n        if (callback === undefined) { callback = RectangleContains; }\r\n\r\n        if (!Array.isArray(gameObjects))\r\n        {\r\n            gameObjects = [ gameObjects ];\r\n        }\r\n\r\n        for (var i = 0; i < gameObjects.length; i++)\r\n        {\r\n            var gameObject = gameObjects[i];\r\n\r\n            var frame = gameObject.frame;\r\n\r\n            var width = 0;\r\n            var height = 0;\r\n\r\n            if (gameObject.width)\r\n            {\r\n                width = gameObject.width;\r\n                height = gameObject.height;\r\n            }\r\n            else if (frame)\r\n            {\r\n                width = frame.realWidth;\r\n                height = frame.realHeight;\r\n            }\r\n\r\n            if (gameObject.type === 'Container' && (width === 0 || height === 0))\r\n            {\r\n                console.warn('Container.setInteractive must specify a Shape or call setSize() first');\r\n                continue;\r\n            }\r\n\r\n            if (width !== 0 && height !== 0)\r\n            {\r\n                gameObject.input = CreateInteractiveObject(gameObject, new Rectangle(0, 0, width, height), callback);\r\n\r\n                this.queueForInsertion(gameObject);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Rectangle` shape, using\r\n     * the given coordinates and dimensions to control its position and size.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitAreaRectangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a rectangular hit area.\r\n     * @param {number} x - The top-left of the rectangle.\r\n     * @param {number} y - The top-left of the rectangle.\r\n     * @param {number} width - The width of the rectangle.\r\n     * @param {number} height - The height of the rectangle.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Rectangle.Contains.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitAreaRectangle: function (gameObjects, x, y, width, height, callback)\r\n    {\r\n        if (callback === undefined) { callback = RectangleContains; }\r\n\r\n        var shape = new Rectangle(x, y, width, height);\r\n\r\n        return this.setHitArea(gameObjects, shape, callback);\r\n    },\r\n\r\n    /**\r\n     * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Triangle` shape, using\r\n     * the given coordinates to control the position of its points.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setHitAreaTriangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a  triangular hit area.\r\n     * @param {number} x1 - The x coordinate of the first point of the triangle.\r\n     * @param {number} y1 - The y coordinate of the first point of the triangle.\r\n     * @param {number} x2 - The x coordinate of the second point of the triangle.\r\n     * @param {number} y2 - The y coordinate of the second point of the triangle.\r\n     * @param {number} x3 - The x coordinate of the third point of the triangle.\r\n     * @param {number} y3 - The y coordinate of the third point of the triangle.\r\n     * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Triangle.Contains.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setHitAreaTriangle: function (gameObjects, x1, y1, x2, y2, x3, y3, callback)\r\n    {\r\n        if (callback === undefined) { callback = TriangleContains; }\r\n\r\n        var shape = new Triangle(x1, y1, x2, y2, x3, y3);\r\n\r\n        return this.setHitArea(gameObjects, shape, callback);\r\n    },\r\n\r\n    /**\r\n     * Creates an Input Debug Shape for the given Game Object.\r\n     *\r\n     * The Game Object must have _already_ been enabled for input prior to calling this method.\r\n     *\r\n     * This is intended to assist you during development and debugging.\r\n     *\r\n     * Debug Shapes can only be created for Game Objects that are using standard Phaser Geometry for input,\r\n     * including: Circle, Ellipse, Line, Polygon, Rectangle and Triangle.\r\n     *\r\n     * Game Objects that are using their automatic hit areas are using Rectangles by default, so will also work.\r\n     *\r\n     * The Debug Shape is created and added to the display list and is then kept in sync with the Game Object\r\n     * it is connected with. Should you need to modify it yourself, such as to hide it, you can access it via\r\n     * the Game Object property: `GameObject.input.hitAreaDebug`.\r\n     *\r\n     * Calling this method on a Game Object that already has a Debug Shape will first destroy the old shape,\r\n     * before creating a new one. If you wish to remove the Debug Shape entirely, you should call the\r\n     * method `InputPlugin.removeDebug`.\r\n     *\r\n     * Note that the debug shape will only show the outline of the input area. If the input test is using a\r\n     * pixel perfect check, for example, then this is not displayed. If you are using a custom shape, that\r\n     * doesn't extend one of the base Phaser Geometry objects, as your hit area, then this method will not\r\n     * work.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#enableDebug\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to create the input debug shape for.\r\n     * @param {number} [color=0x00ff00] - The outline color of the debug shape.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n     */\r\n    enableDebug: function (gameObject, color)\r\n    {\r\n        if (color === undefined) { color = 0x00ff00; }\r\n\r\n        var input = gameObject.input;\r\n\r\n        if (!input || !input.hitArea)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var shape = input.hitArea;\r\n        var shapeType = shape.type;\r\n        var debug = input.hitAreaDebug;\r\n        var factory = this.systems.add;\r\n        var updateList = this.systems.updateList;\r\n\r\n        if (debug)\r\n        {\r\n            updateList.remove(debug);\r\n\r\n            debug.destroy();\r\n\r\n            debug = null;\r\n        }\r\n\r\n        var offsetx = 0;\r\n        var offsety = 0;\r\n        switch (shapeType)\r\n        {\r\n            case GEOM_CONST.CIRCLE:\r\n                debug = factory.arc(0, 0, shape.radius);\r\n                offsetx = shape.x - shape.radius;\r\n                offsety = shape.y - shape.radius;\r\n                break;\r\n\r\n            case GEOM_CONST.ELLIPSE:\r\n                debug = factory.ellipse(0, 0, shape.width, shape.height);\r\n                offsetx = shape.x - shape.width / 2;\r\n                offsety = shape.y - shape.height / 2;\r\n                break;\r\n\r\n            case GEOM_CONST.LINE:\r\n                debug = factory.line(0, 0, shape.x1, shape.y1, shape.x2, shape.y2);\r\n                break;\r\n\r\n            case GEOM_CONST.POLYGON:\r\n                debug = factory.polygon(0, 0, shape.points);\r\n                break;\r\n\r\n            case GEOM_CONST.RECTANGLE:\r\n                debug = factory.rectangle(0, 0, shape.width, shape.height);\r\n                offsetx = shape.x;\r\n                offsety = shape.y;\r\n                break;\r\n\r\n            case GEOM_CONST.TRIANGLE:\r\n                debug = factory.triangle(0, 0, shape.x1, shape.y1, shape.x2, shape.y2, shape.x3, shape.y3);\r\n                break;\r\n        }\r\n\r\n        if (debug)\r\n        {\r\n            debug.isFilled = false;\r\n\r\n            debug.preUpdate = function ()\r\n            {\r\n                debug.setStrokeStyle(1 / gameObject.scale, color);\r\n\r\n                debug.setDisplayOrigin(gameObject.displayOriginX, gameObject.displayOriginY);\r\n                debug.setRotation(gameObject.rotation);\r\n                debug.setScale(gameObject.scaleX, gameObject.scaleY);\r\n                debug.setPosition(gameObject.x + offsetx, gameObject.y + offsety);\r\n                debug.setScrollFactor(gameObject.scrollFactorX, gameObject.scrollFactorY);\r\n            };\r\n\r\n            updateList.add(debug);\r\n\r\n            input.hitAreaDebug = debug;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes an Input Debug Shape from the given Game Object.\r\n     *\r\n     * The shape is destroyed immediately and the `hitAreaDebug` property is set to `null`.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#removeDebug\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to remove the input debug shape from.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n     */\r\n    removeDebug: function (gameObject)\r\n    {\r\n        var input = gameObject.input;\r\n\r\n        if (input && input.hitAreaDebug)\r\n        {\r\n            var debug = input.hitAreaDebug;\r\n\r\n            this.systems.updateList.remove(debug);\r\n\r\n            debug.destroy();\r\n\r\n            input.hitAreaDebug = null;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Pointers to always poll.\r\n     *\r\n     * When a pointer is polled it runs a hit test to see which Game Objects are currently below it,\r\n     * or being interacted with it, regardless if the Pointer has actually moved or not.\r\n     *\r\n     * You should enable this if you want objects in your game to fire over / out events, and the objects\r\n     * are constantly moving, but the pointer may not have. Polling every frame has additional computation\r\n     * costs, especially if there are a large number of interactive objects in your game.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setPollAlways\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setPollAlways: function ()\r\n    {\r\n        return this.setPollRate(0);\r\n    },\r\n\r\n    /**\r\n     * Sets the Pointers to only poll when they are moved or updated.\r\n     *\r\n     * When a pointer is polled it runs a hit test to see which Game Objects are currently below it,\r\n     * or being interacted with it.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setPollOnMove\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setPollOnMove: function ()\r\n    {\r\n        return this.setPollRate(-1);\r\n    },\r\n\r\n    /**\r\n     * Sets the poll rate value. This is the amount of time that should have elapsed before a pointer\r\n     * will be polled again. See the `setPollAlways` and `setPollOnMove` methods.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setPollRate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of time, in ms, that should elapsed before re-polling the pointers.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setPollRate: function (value)\r\n    {\r\n        this.pollRate = value;\r\n        this._pollTimer = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * When set to `true` the global Input Manager will emulate DOM behavior by only emitting events from\r\n     * the top-most Scene in the Scene List. By default, if a Scene receives an input event it will then stop the event\r\n     * from flowing down to any Scenes below it in the Scene list. To disable this behavior call this method with `false`.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setGlobalTopOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - Set to `true` to stop processing input events on the Scene that receives it, or `false` to let the event continue down the Scene list.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setGlobalTopOnly: function (value)\r\n    {\r\n        this.manager.globalTopOnly = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * When set to `true` this Input Plugin will emulate DOM behavior by only emitting events from\r\n     * the top-most Game Objects in the Display List.\r\n     *\r\n     * If set to `false` it will emit events from all Game Objects below a Pointer, not just the top one.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setTopOnly\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - `true` to only include the top-most Game Object, or `false` to include all Game Objects in a hit test.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    setTopOnly: function (value)\r\n    {\r\n        this.topOnly = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Given an array of Game Objects, sort the array and return it, so that the objects are in depth index order\r\n     * with the lowest at the bottom.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#sortGameObjects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject[]} gameObjects - An array of Game Objects to be sorted.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject[]} The sorted array of Game Objects.\r\n     */\r\n    sortGameObjects: function (gameObjects)\r\n    {\r\n        if (gameObjects.length < 2)\r\n        {\r\n            return gameObjects;\r\n        }\r\n\r\n        this.scene.sys.depthSort();\r\n\r\n        return gameObjects.sort(this.sortHandlerGO.bind(this));\r\n    },\r\n\r\n    /**\r\n     * Return the child lowest down the display list (with the smallest index)\r\n     * Will iterate through all parent containers, if present.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#sortHandlerGO\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} childA - The first Game Object to compare.\r\n     * @param {Phaser.GameObjects.GameObject} childB - The second Game Object to compare.\r\n     *\r\n     * @return {integer} Returns either a negative or positive integer, or zero if they match.\r\n     */\r\n    sortHandlerGO: function (childA, childB)\r\n    {\r\n        if (!childA.parentContainer && !childB.parentContainer)\r\n        {\r\n            //  Quick bail out when neither child has a container\r\n            return this.displayList.getIndex(childB) - this.displayList.getIndex(childA);\r\n        }\r\n        else if (childA.parentContainer === childB.parentContainer)\r\n        {\r\n            //  Quick bail out when both children have the same container\r\n            return childB.parentContainer.getIndex(childB) - childA.parentContainer.getIndex(childA);\r\n        }\r\n        else if (childA.parentContainer === childB)\r\n        {\r\n            //  Quick bail out when childA is a child of childB\r\n            return -1;\r\n        }\r\n        else if (childB.parentContainer === childA)\r\n        {\r\n            //  Quick bail out when childA is a child of childB\r\n            return 1;\r\n        }\r\n        else\r\n        {\r\n            //  Container index check\r\n            var listA = childA.getIndexList();\r\n            var listB = childB.getIndexList();\r\n            var len = Math.min(listA.length, listB.length);\r\n\r\n            for (var i = 0; i < len; i++)\r\n            {\r\n                var indexA = listA[i];\r\n                var indexB = listB[i];\r\n\r\n                if (indexA === indexB)\r\n                {\r\n                    //  Go to the next level down\r\n                    continue;\r\n                }\r\n                else\r\n                {\r\n                    //  Non-matching parents, so return\r\n                    return indexB - indexA;\r\n                }\r\n            }\r\n        }\r\n\r\n        //  Technically this shouldn't happen, but ...\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * This method should be called from within an input event handler, such as `pointerdown`.\r\n     *\r\n     * When called, it stops the Input Manager from allowing _this specific event_ to be processed by any other Scene\r\n     * not yet handled in the scene list.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#stopPropagation\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n     */\r\n    stopPropagation: function ()\r\n    {\r\n        this.manager._tempSkip = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds new Pointer objects to the Input Manager.\r\n     *\r\n     * By default Phaser creates 2 pointer objects: `mousePointer` and `pointer1`.\r\n     *\r\n     * You can create more either by calling this method, or by setting the `input.activePointers` property\r\n     * in the Game Config, up to a maximum of 10 pointers.\r\n     *\r\n     * The first 10 pointers are available via the `InputPlugin.pointerX` properties, once they have been added\r\n     * via this method.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#addPointer\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} [quantity=1] The number of new Pointers to create. A maximum of 10 is allowed in total.\r\n     *\r\n     * @return {Phaser.Input.Pointer[]} An array containing all of the new Pointer objects that were created.\r\n     */\r\n    addPointer: function (quantity)\r\n    {\r\n        return this.manager.addPointer(quantity);\r\n    },\r\n\r\n    /**\r\n     * Tells the Input system to set a custom cursor.\r\n     *\r\n     * This cursor will be the default cursor used when interacting with the game canvas.\r\n     *\r\n     * If an Interactive Object also sets a custom cursor, this is the cursor that is reset after its use.\r\n     *\r\n     * Any valid CSS cursor value is allowed, including paths to image files, i.e.:\r\n     *\r\n     * ```javascript\r\n     * this.input.setDefaultCursor('url(assets/cursors/sword.cur), pointer');\r\n     * ```\r\n     *\r\n     * Please read about the differences between browsers when it comes to the file formats and sizes they support:\r\n     *\r\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_User_Interface/Using_URL_values_for_the_cursor_property\r\n     *\r\n     * It's up to you to pick a suitable cursor format that works across the range of browsers you need to support.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#setDefaultCursor\r\n     * @since 3.10.0\r\n     *\r\n     * @param {string} cursor - The CSS to be used when setting the default cursor.\r\n     *\r\n     * @return {Phaser.Input.InputPlugin} This Input instance.\r\n     */\r\n    setDefaultCursor: function (cursor)\r\n    {\r\n        this.manager.setDefaultCursor(cursor);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is transitioning in.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#transitionIn\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    transitionIn: function ()\r\n    {\r\n        this.enabled = this.settings.transitionAllowInput;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin has finished transitioning in.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#transitionComplete\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    transitionComplete: function ()\r\n    {\r\n        if (!this.settings.transitionAllowInput)\r\n        {\r\n            this.enabled = true;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is transitioning out.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#transitionOut\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    transitionOut: function ()\r\n    {\r\n        this.enabled = this.settings.transitionAllowInput;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#shutdown\r\n     * @fires Phaser.Input.Events#SHUTDOWN\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        //  Registered input plugins listen for this\r\n        this.pluginEvents.emit(Events.SHUTDOWN);\r\n\r\n        this._temp.length = 0;\r\n        this._list.length = 0;\r\n        this._draggable.length = 0;\r\n        this._pendingRemoval.length = 0;\r\n        this._pendingInsertion.length = 0;\r\n        this._dragState.length = 0;\r\n\r\n        for (var i = 0; i < 10; i++)\r\n        {\r\n            this._drag[i] = [];\r\n            this._over[i] = [];\r\n        }\r\n\r\n        this.removeAllListeners();\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.TRANSITION_START, this.transitionIn, this);\r\n        eventEmitter.off(SceneEvents.TRANSITION_OUT, this.transitionOut, this);\r\n        eventEmitter.off(SceneEvents.TRANSITION_COMPLETE, this.transitionComplete, this);\r\n        eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n\r\n        this.manager.events.off(Events.GAME_OUT, this.onGameOut, this);\r\n        this.manager.events.off(Events.GAME_OVER, this.onGameOver, this);\r\n\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Input.InputPlugin#destroy\r\n     * @fires Phaser.Input.Events#DESTROY\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        //  Registered input plugins listen for this\r\n        this.pluginEvents.emit(Events.DESTROY);\r\n\r\n        this.pluginEvents.removeAllListeners();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.cameras = null;\r\n        this.manager = null;\r\n        this.events = null;\r\n        this.mouse = null;\r\n    },\r\n\r\n    /**\r\n     * The x coordinates of the ActivePointer based on the first camera in the camera list.\r\n     * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#x\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.activePointer.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y coordinates of the ActivePointer based on the first camera in the camera list.\r\n     * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#y\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.activePointer.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Are any mouse or touch pointers currently over the game canvas?\r\n     *\r\n     * @name Phaser.Input.InputPlugin#isOver\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isOver: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.isOver;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The mouse has its own unique Pointer object, which you can reference directly if making a _desktop specific game_.\r\n     * If you are supporting both desktop and touch devices then do not use this property, instead use `activePointer`\r\n     * which will always map to the most recently interacted pointer.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#mousePointer\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    mousePointer: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.mousePointer;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The current active input Pointer.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#activePointer\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    activePointer: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.activePointer;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer1\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer1: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[1];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer2\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer2: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[2];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer3\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer3: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[3];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer4\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer4: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[4];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer5\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer5: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[5];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer6\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer6: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[6];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer7\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer7: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[7];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer8\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer8: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[8];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer9\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer9: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[9];\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A touch-based Pointer object.\r\n     * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n     *\r\n     * @name Phaser.Input.InputPlugin#pointer10\r\n     * @type {Phaser.Input.Pointer}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     */\r\n    pointer10: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.manager.pointers[10];\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('InputPlugin', InputPlugin, 'input');\r\n\r\nmodule.exports = InputPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dFBsdWdpbi5qcz9jYWFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsOEVBQXVCO0FBQzVDLHFCQUFxQixtQkFBTyxDQUFDLGtGQUF5QjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyx5REFBUztBQUM3Qiw4QkFBOEIsbUJBQU8sQ0FBQyw2RkFBMkI7QUFDakUsZ0NBQWdDLG1CQUFPLENBQUMsaUdBQTZCO0FBQ3JFLHNCQUFzQixtQkFBTyxDQUFDLG9HQUFrQztBQUNoRSxjQUFjLG1CQUFPLENBQUMsa0ZBQXlCO0FBQy9DLHNCQUFzQixtQkFBTyxDQUFDLG9GQUEwQjtBQUN4RCxhQUFhLG1CQUFPLENBQUMsaUVBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLDhEQUFlO0FBQ3hDLHVCQUF1QixtQkFBTyxDQUFDLCtFQUFvQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBK0I7QUFDM0Qsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDBGQUE2QjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBNEI7QUFDNUQsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDbEQsdUJBQXVCLG1CQUFPLENBQUMsc0ZBQTJCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsd0NBQXdDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpREFBaUQ7QUFDNUUseUJBQXlCLCtDQUErQztBQUN4RTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsY0FBYztBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw0Q0FBNEM7QUFDM0QsZUFBZSxtQ0FBbUM7QUFDbEQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCLFdBQVc7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDJCQUEyQixXQUFXO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsV0FBVztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG9CQUFvQjs7QUFFL0Q7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSw0Q0FBNEM7QUFDM0QsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDJCQUEyQjs7QUFFaEU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsbUNBQW1DO0FBQ2xEO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsNEJBQTRCOztBQUVqRTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDhCQUE4Qjs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQWdFO0FBQy9FLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDhCQUE4Qjs7QUFFbkU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw2QkFBNkI7O0FBRWxFOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGtCQUFrQjs7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQ0FBZ0M7QUFDL0M7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixTQUFTO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvSW5wdXRQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjbGUgPSByZXF1aXJlKCcuLi9nZW9tL2NpcmNsZS9DaXJjbGUnKTtcclxudmFyIENpcmNsZUNvbnRhaW5zID0gcmVxdWlyZSgnLi4vZ2VvbS9jaXJjbGUvQ29udGFpbnMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgQ3JlYXRlSW50ZXJhY3RpdmVPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUludGVyYWN0aXZlT2JqZWN0Jyk7XHJcbnZhciBDcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi9DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG52YXIgRWxsaXBzZSA9IHJlcXVpcmUoJy4uL2dlb20vZWxsaXBzZS9FbGxpcHNlJyk7XHJcbnZhciBFbGxpcHNlQ29udGFpbnMgPSByZXF1aXJlKCcuLi9nZW9tL2VsbGlwc2UvQ29udGFpbnMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vZ2VvbS9jb25zdCcpO1xyXG52YXIgSW5wdXRQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4vSW5wdXRQbHVnaW5DYWNoZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUmVjdGFuZ2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9Db250YWlucycpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi4vZ2VvbS90cmlhbmdsZS9UcmlhbmdsZScpO1xyXG52YXIgVHJpYW5nbGVDb250YWlucyA9IHJlcXVpcmUoJy4uL2dlb20vdHJpYW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gYmVsb25ncyB0byBhIFNjZW5lIGFuZCBoYW5kbGVzIGFsbCBpbnB1dCByZWxhdGVkIGV2ZW50cyBhbmQgb3BlcmF0aW9ucyBmb3IgaXQuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWNjZXNzIGl0IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmcgYHRoaXMuaW5wdXRgLlxyXG4gKlxyXG4gKiBJdCBlbWl0cyBldmVudHMgZGlyZWN0bHkuIEZvciBleGFtcGxlLCB5b3UgY2FuIGRvOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3duJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gbGlzdGVuIGZvciBhIHBvaW50ZXIgZG93biBldmVudCBhbnl3aGVyZSBvbiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAqXHJcbiAqIEdhbWUgT2JqZWN0cyBjYW4gYmUgZW5hYmxlZCBmb3IgaW5wdXQgYnkgY2FsbGluZyB0aGVpciBgc2V0SW50ZXJhY3RpdmVgIG1ldGhvZC4gQWZ0ZXIgd2hpY2ggdGhleVxyXG4gKiB3aWxsIGRpcmVjdGx5IGVtaXQgaW5wdXQgZXZlbnRzOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBzcHJpdGUgPSB0aGlzLmFkZC5zcHJpdGUoeCwgeSwgdGV4dHVyZSk7XHJcbiAqIHNwcml0ZS5zZXRJbnRlcmFjdGl2ZSgpO1xyXG4gKiBzcHJpdGUub24oJ3BvaW50ZXJkb3duJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlcmUgYXJlIGxvdHMgb2YgZ2FtZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIHJlbGF0aW5nIHRvIGlucHV0LlxyXG4gKiBTZWUgdGhlIFtJbnB1dCBDb25maWcgb2JqZWN0XXtAbGlua2NvZGUgUGhhc2VyLlR5cGVzLkNvcmUuSW5wdXRDb25maWd9IGZvciBtb3JlIGRldGFpbHMsIGluY2x1ZGluZyBob3cgdG8gZGVhbCB3aXRoIFBoYXNlclxyXG4gKiBsaXN0ZW5pbmcgZm9yIGlucHV0IGV2ZW50cyBvdXRzaWRlIG9mIHRoZSBjYW52YXMsIGhvdyB0byBzZXQgYSBkZWZhdWx0IG51bWJlciBvZiBwb2ludGVycywgaW5wdXRcclxuICogY2FwdHVyZSBzZXR0aW5ncyBhbmQgbW9yZS5cclxuICpcclxuICogUGxlYXNlIGFsc28gc2VlIHRoZSBJbnB1dCBleGFtcGxlcyBhbmQgdHV0b3JpYWxzIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxyXG4gKlxyXG4gKiBAY2xhc3MgSW5wdXRQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IHRoaXMgSW5wdXQgUGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvci5cclxuICovXHJcbnZhciBJbnB1dFBsdWdpbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSW5wdXRQbHVnaW4gKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCB0aGlzIElucHV0IFBsdWdpbiBpcyByZXNwb25zaWJsZSBmb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgU3lzdGVtcyBTZXR0aW5ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXR0aW5nc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuU2NlbmVzLlNldHRpbmdzT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzY2VuZS5zeXMuc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHNjZW5lLnN5cy5nYW1lLmlucHV0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBldmVudCBxdWV1ZSB1c2VkIGZvciBwbHVnaW5zIG9ubHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcGx1Z2luRXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGx1Z2luRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBgdHJ1ZWAgdGhpcyBJbnB1dCBQbHVnaW4gd2lsbCBwcm9jZXNzIERPTSBpbnB1dCBldmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgRGlzcGxheSBMaXN0LiBUaGlzIHByb3BlcnR5IGlzIHNldCBkdXJpbmcgdGhlIGBib290YCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZGlzcGxheUxpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3Q7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBDYW1lcmFzIE1hbmFnZXIuIFRoaXMgcHJvcGVydHkgaXMgc2V0IGR1cmluZyB0aGUgYGJvb3RgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNjYW1lcmFzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYXM7XHJcblxyXG4gICAgICAgIC8vICBJbmplY3QgdGhlIGF2YWlsYWJsZSBpbnB1dCBwbHVnaW5zIGludG8gdGhpcyBjbGFzc1xyXG4gICAgICAgIElucHV0UGx1Z2luQ2FjaGUuaW5zdGFsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIE1vdXNlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgc2V0IGlmIE1vdXNlIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCBpbiB5b3VyIEdhbWUgQ29uZmlndXJhdGlvbiBmaWxlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSWYgeW91IGp1c3Qgd2lzaCB0byBnZXQgYWNjZXNzIHRvIHRoZSBtb3VzZSBwb2ludGVyLCB1c2UgdGhlIGBtb3VzZVBvaW50ZXJgIHByb3BlcnR5IGluc3RlYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jbW91c2VcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3VzZSA9IHRoaXMubWFuYWdlci5tb3VzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgICh0aGUgZGVmYXVsdCkgdGhlIElucHV0IFBsdWdpbiB3aWxsIGVtdWxhdGUgRE9NIGJlaGF2aW9yIGJ5IG9ubHkgZW1pdHRpbmcgZXZlbnRzIGZyb21cclxuICAgICAgICAgKiB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3RzIGluIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBJZiBzZXQgdG8gYGZhbHNlYCBpdCB3aWxsIGVtaXQgZXZlbnRzIGZyb20gYWxsIEdhbWUgT2JqZWN0cyBiZWxvdyBhIFBvaW50ZXIsIG5vdCBqdXN0IHRoZSB0b3Agb25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3RvcE9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3BPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG9mdGVuIHNob3VsZCB0aGUgUG9pbnRlcnMgYmUgY2hlY2tlZD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBpcyBhIHRpbWUsIGdpdmVuIGluIG1zLCBhbmQgaXMgdGhlIHRpbWUgdGhhdCBtdXN0IGhhdmUgZWxhcHNlZCBiZXR3ZWVuIGdhbWUgc3RlcHMgYmVmb3JlXHJcbiAgICAgICAgICogdGhlIFBvaW50ZXJzIHdpbGwgYmUgcG9sbGVkIGFnYWluLiBXaGVuIGEgcG9pbnRlciBpcyBwb2xsZWQgaXQgcnVucyBhIGhpdCB0ZXN0IHRvIHNlZSB3aGljaCBHYW1lXHJcbiAgICAgICAgICogT2JqZWN0cyBhcmUgY3VycmVudGx5IGJlbG93IGl0LCBvciBiZWluZyBpbnRlcmFjdGVkIHdpdGggaXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBQb2ludGVycyB3aWxsICphbHdheXMqIGJlIGNoZWNrZWQgaWYgdGhleSBoYXZlIGJlZW4gbW92ZWQgYnkgdGhlIHVzZXIsIG9yIHByZXNzIG9yIHJlbGVhc2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBvbmx5IGNvbnRyb2xzIGhvdyBvZnRlbiB0aGV5IHdpbGwgYmUgcG9sbGVkIGlmIHRoZXkgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLlxyXG4gICAgICAgICAqIFlvdSBzaG91bGQgc2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gaGF2ZSBHYW1lIE9iamVjdHMgY29uc3RhbnRseSBjaGVjayBhZ2FpbnN0IHRoZSBwb2ludGVycywgZXZlblxyXG4gICAgICAgICAqIGlmIHRoZSBwb2ludGVyIGRpZG4ndCBpdHNlbGYgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0byAwIHRvIHBvbGwgY29uc3RhbnRseS4gU2V0IHRvIC0xIHRvIG9ubHkgcG9sbCBvbiB1c2VyIG1vdmVtZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvbGxSYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvbGxSYXRlID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHBvbGwgdGltZXIgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3BvbGxUaW1lclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcG9sbFRpbWVyID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB7IGNhbmNlbGxlZDogZmFsc2UgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXZlbnQgcHJvcGFnYXRpb24gY2FsbGJhY2sgY29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19ldmVudENvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2ZW50Q29udGFpbmVyID0ge1xyXG4gICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF9ldmVudERhdGEuY2FuY2VsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGV2ZW50IHByb3BhZ2F0aW9uIGRhdGEgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19ldmVudERhdGFcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2ZW50RGF0YSA9IF9ldmVudERhdGE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCBhIHBvaW50ZXIgaGFzIHRvIG1vdmUgd2hpbGUgYmVpbmcgaGVsZCBkb3duLCBiZWZvcmUgaXQgdGhpbmtzIGl0IGlzIGJlaW5nIGRyYWdnZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZHJhZ0Rpc3RhbmNlVGhyZXNob2xkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmFnRGlzdGFuY2VUaHJlc2hvbGQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1zLCBhIHBvaW50ZXIgaGFzIHRvIGJlIGhlbGQgZG93biBiZWZvcmUgaXQgdGhpbmtzIGl0IGlzIGRyYWdnaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgcG9sbGluZyByYXRlIGlzIHRvIHBvbGwgb25seSBvbiBtb3ZlIHNvIG9uY2UgdGhlIHRpbWUgdGhyZXNob2xkIGlzIHJlYWNoZWQgdGhlXHJcbiAgICAgICAgICogZHJhZyBldmVudCB3aWxsIG5vdCBzdGFydCB1bnRpbCB5b3UgbW92ZSB0aGUgbW91c2UuIElmIHlvdSB3YW50IGl0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICogd2hlbiB0aGUgdGltZSB0aHJlc2hvbGQgaXMgcmVhY2hlZCwgeW91IG11c3QgaW5jcmVhc2UgdGhlIHBvbGxpbmcgcmF0ZSBieSBjYWxsaW5nXHJcbiAgICAgICAgICogW3NldFBvbGxBbHdheXNde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0UG9sbEFsd2F5c30gb3JcclxuICAgICAgICAgKiBbc2V0UG9sbFJhdGVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0UG9sbFJhdGV9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2RyYWdUaW1lVGhyZXNob2xkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmFnVGltZVRocmVzaG9sZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEhpdCBUZXN0XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3RlbXBcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXAgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXNlZCB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgSGl0IFRlc3QgZHJvcFpvbmVzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3RlbXBab25lc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcFpvbmVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byBiZSBpbnRlcmFjdGl2ZSBpbiB0aGUgU2NlbmUgdGhpcyBJbnB1dCBQbHVnaW4gaXMgbWFuYWdpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX2xpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPYmplY3RzIHdhaXRpbmcgdG8gYmUgaW5zZXJ0ZWQgdG8gdGhlIGxpc3Qgb24gdGhlIG5leHQgY2FsbCB0byAnYmVnaW4nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19wZW5kaW5nSW5zZXJ0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT2JqZWN0cyB3YWl0aW5nIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvbiB0aGUgbmV4dCBjYWxsIHRvICdiZWdpbicuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3BlbmRpbmdSZW1vdmFsXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZW1vdmFsID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIGRyYWdnaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19kcmFnZ2FibGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgSW50ZXJhY3RpdmUgT2JqZWN0cyBjdXJyZW50bHkgY29uc2lkZXJlZCBhcyBiZWluZyAnZHJhZ2dhYmxlJyBieSBhbnkgcG9pbnRlciwgaW5kZXhlZCBieSBwb2ludGVyIElELlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19kcmFnXHJcbiAgICAgICAgICogQHR5cGUge3swOkFycmF5LDE6QXJyYXksMjpBcnJheSwzOkFycmF5LDQ6QXJyYXksNTpBcnJheSw2OkFycmF5LDc6QXJyYXksODpBcnJheSw5OkFycmF5LDEwOkFycmF5fX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RyYWcgPSB7IDA6IFtdLCAxOiBbXSwgMjogW10sIDM6IFtdLCA0OiBbXSwgNTogW10sIDY6IFtdLCA3OiBbXSwgODogW10sIDk6IFtdLCAxMDogW10gfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBhcnJheSBjb250YWluaW5nIHRoZSBkcmFnU3RhdGVzLCBmb3IgdGhpcyBTY2VuZSwgaW5kZXggYnkgdGhlIFBvaW50ZXIgSUQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX2RyYWdTdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgSW50ZXJhY3RpdmUgT2JqZWN0cyBjdXJyZW50bHkgY29uc2lkZXJlZCBhcyBiZWluZyAnb3ZlcicgYnkgYW55IHBvaW50ZXIsIGluZGV4ZWQgYnkgcG9pbnRlciBJRC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNfb3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHt7MDpBcnJheSwxOkFycmF5LDI6QXJyYXksMzpBcnJheSw0OkFycmF5LDU6QXJyYXksNjpBcnJheSw3OkFycmF5LDg6QXJyYXksOTpBcnJheSwxMDpBcnJheX19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9vdmVyID0geyAwOiBbXSwgMTogW10sIDI6IFtdLCAzOiBbXSwgNDogW10sIDU6IFtdLCA2OiBbXSwgNzogW10sIDg6IFtdLCA5OiBbXSwgMTA6IFtdIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiB2YWxpZCBET00gZXZlbnQgdHlwZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3ZhbGlkVHlwZXNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92YWxpZFR5cGVzID0gWyAnb25Eb3duJywgJ29uVXAnLCAnb25PdmVyJywgJ29uT3V0JywgJ29uTW92ZScsICdvbkRyYWdTdGFydCcsICdvbkRyYWcnLCAnb25EcmFnRW5kJywgJ29uRHJhZ0VudGVyJywgJ29uRHJhZ0xlYXZlJywgJ29uRHJhZ092ZXInLCAnb25Ecm9wJyBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0aGF0IHRyYWNrcyBmcmFtZSBldmVudCBzdGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNfdXBkYXRlZFRoaXNGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jYm9vdFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjQk9PVFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IHRoaXMuc3lzdGVtcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gdGhpcy5zeXN0ZW1zLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5CT09UKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1NUQVJUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVFJBTlNJVElPTl9TVEFSVCwgdGhpcy50cmFuc2l0aW9uSW4sIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5UUkFOU0lUSU9OX09VVCwgdGhpcy50cmFuc2l0aW9uT3V0LCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVFJBTlNJVElPTl9DT01QTEVURSwgdGhpcy50cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5QUkVfVVBEQVRFLCB0aGlzLnByZVVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLm9uKEV2ZW50cy5HQU1FX09VVCwgdGhpcy5vbkdhbWVPdXQsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub24oRXZlbnRzLkdBTUVfT1ZFUiwgdGhpcy5vbkdhbWVPdmVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gIFBvcHVsYXRlIHRoZSBwb2ludGVyIGRyYWcgc3RhdGVzXHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlID0gWyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIF07XHJcblxyXG4gICAgICAgIC8vICBSZWdpc3RlcmVkIGlucHV0IHBsdWdpbnMgbGlzdGVuIGZvciB0aGlzXHJcbiAgICAgICAgdGhpcy5wbHVnaW5FdmVudHMuZW1pdChFdmVudHMuU1RBUlQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdhbWUgT3ZlciBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI29uR2FtZU92ZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1ZFUlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAqL1xyXG4gICAgb25HYW1lT3ZlcjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVfT1ZFUiwgZXZlbnQudGltZVN0YW1wLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdhbWUgT3V0IGhhbmRsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jb25HYW1lT3V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FX09VVFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAqL1xyXG4gICAgb25HYW1lT3V0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRV9PVVQsIGV2ZW50LnRpbWVTdGFtcCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcHJlLXVwZGF0ZSBoYW5kbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGUgcGVuZGluZyByZW1vdmFsIGFuZCBpbnNlcnRpb24gbGlzdHMgYW5kXHJcbiAgICAgKiBkZWxldGluZyBvbGQgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3ByZVVwZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BSRV9VUERBVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwcmVVcGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5QUkVfVVBEQVRFKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbW92ZUxpc3QgPSB0aGlzLl9wZW5kaW5nUmVtb3ZhbDtcclxuICAgICAgICB2YXIgaW5zZXJ0TGlzdCA9IHRoaXMuX3BlbmRpbmdJbnNlcnRpb247XHJcblxyXG4gICAgICAgIHZhciB0b1JlbW92ZSA9IHJlbW92ZUxpc3QubGVuZ3RoO1xyXG4gICAgICAgIHZhciB0b0luc2VydCA9IGluc2VydExpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodG9SZW1vdmUgPT09IDAgJiYgdG9JbnNlcnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuX2xpc3Q7XHJcblxyXG4gICAgICAgIC8vICBEZWxldGUgb2xkIGdhbWVPYmplY3RzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b1JlbW92ZTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSByZW1vdmVMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gY3VycmVudC5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKGdhbWVPYmplY3QsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgdGhlIHJlbW92YWwgbGlzdFxyXG4gICAgICAgIHJlbW92ZUxpc3QubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nUmVtb3ZhbC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvLyAgTW92ZSBwZW5kaW5nSW5zZXJ0aW9uIHRvIGxpc3QgKGFsc28gY2xlYXJzIHBlbmRpbmdJbnNlcnRpb24gYXQgdGhlIHNhbWUgdGltZSlcclxuICAgICAgICB0aGlzLl9saXN0ID0gY3VycmVudC5jb25jYXQoaW5zZXJ0TGlzdC5zcGxpY2UoMCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYm90aCB0aGlzIHBsdWdpbiBhbmQgdGhlIFNjZW5lIHRvIHdoaWNoIGl0IGJlbG9uZ3MgaXMgYWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2lzQWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwbHVnaW4gYW5kIHRoZSBTY2VuZSBpdCBiZWxvbmdzIHRvIGlzIGFjdGl2ZS5cclxuICAgICAqL1xyXG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmVuYWJsZWQgJiYgdGhpcy5zY2VuZS5zeXMuaXNBY3RpdmUoKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqIEl0IGVtaXRzIGV2ZW50cyBmb3IgcGx1Z2lucyB0byBsaXN0ZW4gdG8gYW5kIGFsc28gaGFuZGxlcyBwb2xsaW5nIHVwZGF0ZXMsIGlmIGVuYWJsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jdXBkYXRlUG9sbFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGx1Z2luIGFuZCB0aGUgU2NlbmUgaXQgYmVsb25ncyB0byBpcyBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBvbGw6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGUgcGx1Z2lucyBzaG91bGQgdXBkYXRlIGV2ZXJ5IGZyYW1lLCByZWdhcmRsZXNzIGlmIHRoZXJlIGhhcyBiZWVuXHJcbiAgICAgICAgLy8gIGFueSBET00gaW5wdXQgZXZlbnRzIG9yIG5vdCAoc3VjaCBhcyB0aGUgR2FtZXBhZCBhbmQgS2V5Ym9hcmQpXHJcbiAgICAgICAgdGhpcy5wbHVnaW5FdmVudHMuZW1pdChFdmVudHMuVVBEQVRFLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBXZSBjYW4gbGVhdmUgbm93IGlmIHdlJ3ZlIGFscmVhZHkgdXBkYXRlZCBvbmNlIHRoaXMgZnJhbWUgdmlhIHRoZSBpbW1lZGlhdGUgRE9NIGV2ZW50IGhhbmRsZXJzXHJcbiAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkVGhpc0ZyYW1lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXMubWFuYWdlcjtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gbWFuYWdlci5wb2ludGVycztcclxuICAgICAgICB2YXIgcG9pbnRlcnNUb3RhbCA9IG1hbmFnZXIucG9pbnRlcnNUb3RhbDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50ZXJzW2ldLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE5vIHBvaW50IGdvaW5nIGFueSBmdXJ0aGVyIGlmIHRoZXJlIGFyZW4ndCBhbnkgaW50ZXJhY3RpdmUgb2JqZWN0c1xyXG4gICAgICAgIGlmICh0aGlzLl9saXN0Lmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByYXRlID0gdGhpcy5wb2xsUmF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHJhdGUgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyYXRlID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvbGxUaW1lciAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb2xsVGltZXIgPCAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgRGlzY2FyZCB0aW1lciBkaWZmLCB3ZSdyZSByZWFkeSB0byBwb2xsIGFnYWluXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb2xsVGltZXIgPSB0aGlzLnBvbGxSYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE5vdCBlbm91Z2ggdGltZSBoYXMgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBwb2xsLCBzbyBhYm9ydCBub3dcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFdlIGdvdCB0aGlzIGZhcj8gVGhlbiB3ZSBzaG91bGQgcG9sbCBmb3IgbW92ZW1lbnRcclxuICAgICAgICB2YXIgY2FwdHVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnRlciA9IHBvaW50ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFsd2F5cyByZXNldCB0aGlzIGFycmF5XHJcbiAgICAgICAgICAgIHRoaXMuX3RlbXBab25lcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gIF90ZW1wIGNvbnRhaW5zIGEgaGl0IHRlc3RlZCBhbmQgY2FtZXJhIGN1bGxlZCBsaXN0IG9mIElPIG9iamVjdHNcclxuICAgICAgICAgICAgdGhpcy5fdGVtcCA9IHRoaXMuaGl0VGVzdFBvaW50ZXIocG9pbnRlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvcnRHYW1lT2JqZWN0cyh0aGlzLl90ZW1wKTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHModGhpcy5fdGVtcFpvbmVzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRvcE9ubHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHRoZSB0b3AtbW9zdCBvbmUgY291bnRzIG5vdywgc28gc2FmZWx5IGlnbm9yZSB0aGUgcmVzdFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXAubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RlbXAuc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wWm9uZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RlbXBab25lcy5zcGxpY2UoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXREcmFnU3RhdGUocG9pbnRlcikgPT09IDIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RyYWdUaHJlc2hvbGRFdmVudChwb2ludGVyLCB0aW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRvdGFsID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFdlIGludGVyYWN0ZWQgd2l0aCBhbiBldmVudCBpbiB0aGlzIFNjZW5lLCBzbyBibG9jayBhbnkgU2NlbmVzIGJlbG93IHVzIGZyb20gZG9pbmcgdGhlIHNhbWUgdGhpcyBmcmFtZVxyXG4gICAgICAgICAgICAgICAgY2FwdHVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FwdHVyZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBET00gRXZlbnQgaXMgcmVjZWl2ZWQgYnkgdGhlIElucHV0IE1hbmFnZXIuIEl0IGhhbmRsZXMgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50c1xyXG4gICAgICogdG8gcmVsZXZhbnQgaW5wdXQgZW5hYmxlZCBHYW1lIE9iamVjdHMgaW4gdGhpcyBzY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN1cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNVUERBVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdHlwZSAtIFRoZSB0eXBlIG9mIGV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyW119IHBvaW50ZXJzIC0gQW4gYXJyYXkgb2YgUG9pbnRlcnMgb24gd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIFNjZW5lIGhhcyBjYXB0dXJlZCB0aGUgaW5wdXQgZXZlbnRzIGZyb20gYWxsIG90aGVyIFNjZW5lcywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHR5cGUsIHBvaW50ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXJzVG90YWwgPSBwb2ludGVycy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGNhcHR1cmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRlcnNUb3RhbDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBBbHdheXMgcmVzZXQgdGhpcyBhcnJheVxyXG4gICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBfdGVtcCBjb250YWlucyBhIGhpdCB0ZXN0ZWQgYW5kIGNhbWVyYSBjdWxsZWQgbGlzdCBvZiBJTyBvYmplY3RzXHJcbiAgICAgICAgICAgIHRoaXMuX3RlbXAgPSB0aGlzLmhpdFRlc3RQb2ludGVyKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHModGhpcy5fdGVtcCk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEdhbWVPYmplY3RzKHRoaXMuX3RlbXBab25lcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50b3BPbmx5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgT25seSB0aGUgdG9wLW1vc3Qgb25lIGNvdW50cyBub3csIHNvIHNhZmVseSBpZ25vcmUgdGhlIHJlc3RcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wLnNwbGljZSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGVtcFpvbmVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMuc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQ09OU1QuTU9VU0VfRE9XTjpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NEcmFnRG93bkV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0Rvd25FdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzT3Zlck91dEV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULk1PVVNFX1VQOlxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0RyYWdVcEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc1VwRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBDT05TVC5UT1VDSF9TVEFSVDpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NEcmFnRG93bkV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0Rvd25FdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzT3ZlckV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULlRPVUNIX0VORDpcclxuICAgICAgICAgICAgICAgIGNhc2UgQ09OU1QuVE9VQ0hfQ0FOQ0VMOlxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0RyYWdVcEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc1VwRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc091dEV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULk1PVVNFX01PVkU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULlRPVUNIX01PVkU6XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzRHJhZ01vdmVFdmVudChwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NNb3ZlRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBDT05TVC5NT1VTRV9XSEVFTDpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NXaGVlbEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgV2UgaW50ZXJhY3RlZCB3aXRoIGFuIGV2ZW50IGluIHRoaXMgU2NlbmUsIHNvIGJsb2NrIGFueSBTY2VuZXMgYmVsb3cgdXMgZnJvbSBkb2luZyB0aGUgc2FtZSB0aGlzIGZyYW1lXHJcbiAgICAgICAgICAgICAgICBjYXB0dXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FwdHVyZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGEgR2FtZSBPYmplY3Qgc28gaXQgbm8gbG9uZ2VyIGhhcyBhbiBJbnRlcmFjdGl2ZSBPYmplY3QgYXNzb2NpYXRlZCB3aXRoIGl0LlxyXG4gICAgICogVGhlIEdhbWUgT2JqZWN0IGlzIHRoZW4gcXVldWVkIGZvciByZW1vdmFsIGZyb20gdGhlIElucHV0IFBsdWdpbiBvbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGhhdmUgaXRzIEludGVyYWN0aXZlIE9iamVjdCByZW1vdmVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFF1ZXVlPWZhbHNlXSAtIFNraXAgYWRkaW5nIHRoaXMgR2FtZSBPYmplY3QgaW50byB0aGUgcmVtb3ZhbCBxdWV1ZT9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgaGFkIGl0cyBJbnRlcmFjdGl2ZSBPYmplY3QgcmVtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBza2lwUXVldWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNraXBRdWV1ZSA9PT0gdW5kZWZpbmVkKSB7IHNraXBRdWV1ZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgIC8vIElmIEdhbWVPYmplY3QuaW5wdXQgYWxyZWFkeSBjbGVhcmVkIGZyb20gaGlnaGVyIGNsYXNzXHJcbiAgICAgICAgaWYgKCFpbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2tpcFF1ZXVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5xdWV1ZUZvclJlbW92YWwoZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnB1dC5nYW1lT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlucHV0LnRhcmdldCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpbnB1dC5oaXRBcmVhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlucHV0LmhpdEFyZWFDYWxsYmFjayA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpbnB1dC5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5yZXNldEN1cnNvcihpbnB1dCk7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgZnJvbSBfZHJhZ2dhYmxlLCBfZHJhZyBhbmQgX292ZXJcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9kcmFnZ2FibGUuaW5kZXhPZihnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kcmFnZ2FibGUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluZGV4ID0gdGhpcy5fZHJhZ1swXS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdbMF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluZGV4ID0gdGhpcy5fb3ZlclswXS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJbMF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGVzIElucHV0IG9uIGEgc2luZ2xlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEFuIGlucHV0IGRpc2FibGVkIEdhbWUgT2JqZWN0IHN0aWxsIHJldGFpbnMgaXRzIEludGVyYWN0aXZlIE9iamVjdCBjb21wb25lbnQgYW5kIGNhbiBiZSByZS1lbmFibGVkXHJcbiAgICAgKiBhdCBhbnkgdGltZSwgYnkgcGFzc2luZyBpdCB0byBgSW5wdXRQbHVnaW4uZW5hYmxlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNkaXNhYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGhhdmUgaXRzIGlucHV0IHN5c3RlbSBkaXNhYmxlZC5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5lbmFibGVkID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGEgR2FtZSBPYmplY3QgZm9yIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBJbnRlcmFjdGl2ZSBPYmplY3QgY29tcG9uZW50LCBpdCBpcyBlbmFibGVkIGFuZCByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGEgbmV3IEludGVyYWN0aXZlIE9iamVjdCBjb21wb25lbnQgaXMgY3JlYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhlIEdhbWUgT2JqZWN0J3MgYGlucHV0YCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJbnB1dCB3b3JrcyBieSB1c2luZyBoaXQgYXJlYXMsIHRoZXNlIGFyZSBuZWFybHkgYWx3YXlzIGdlb21ldHJpYyBzaGFwZXMsIHN1Y2ggYXMgcmVjdGFuZ2xlcyBvciBjaXJjbGVzLCB0aGF0IGFjdCBhcyB0aGUgaGl0IGFyZWFcclxuICAgICAqIGZvciB0aGUgR2FtZSBPYmplY3QuIEhvd2V2ZXIsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBoaXQgYXJlYSBzaGFwZSBhbmQgY2FsbGJhY2ssIHNob3VsZCB5b3Ugd2lzaCB0byBoYW5kbGUgc29tZSBtb3JlIGFkdmFuY2VkXHJcbiAgICAgKiBpbnB1dCBkZXRlY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCBpdCB3aWxsIHRyeSBhbmQgY3JlYXRlIGEgcmVjdGFuZ2xlIGhpdCBhcmVhIGJhc2VkIG9uIHRoZSB0ZXh0dXJlIGZyYW1lIHRoZSBHYW1lIE9iamVjdCBpcyB1c2luZy4gSWZcclxuICAgICAqIHRoaXMgaXNuJ3QgYSB0ZXh0dXJlLWJvdW5kIG9iamVjdCwgc3VjaCBhcyBhIEdyYXBoaWNzIG9yIEJpdG1hcFRleHQgb2JqZWN0LCB0aGlzIHdpbGwgZmFpbCwgYW5kIHlvdSdsbCBuZWVkIHRvIHByb3ZpZGUgYSBzcGVjaWZpY1xyXG4gICAgICogc2hhcGUgZm9yIGl0IHRvIHVzZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBJbnB1dCBDb25maWd1cmF0aW9uIE9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNlbmFibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgZW5hYmxlZCBmb3IgaW5wdXQuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuSW5wdXQuSW5wdXRDb25maWd1cmF0aW9ufGFueSl9IFtzaGFwZV0gLSBFaXRoZXIgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGEgZ2VvbWV0cmljIHNoYXBlIHRoYXQgZGVmaW5lcyB0aGUgaGl0IGFyZWEgZm9yIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IHNwZWNpZmllZCBhIFJlY3RhbmdsZSB3aWxsIGJlIHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgJ2NvbnRhaW5zJyBmdW5jdGlvbiB0byBpbnZva2UgdG8gY2hlY2sgaWYgdGhlIHBvaW50ZXIgaXMgd2l0aGluIHRoZSBoaXQgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Ryb3Bab25lPWZhbHNlXSAtIElzIHRoaXMgR2FtZSBPYmplY3QgYSBkcm9wIHpvbmUgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZTogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHNoYXBlLCBjYWxsYmFjaywgZHJvcFpvbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRyb3Bab25lID09PSB1bmRlZmluZWQpIHsgZHJvcFpvbmUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCBpcyBhbHJlYWR5IGhhcyBhbiBJbnRlcmFjdGl2ZU9iamVjdCB0aGVuIGp1c3QgZW5hYmxlIGl0IGFuZCByZXR1cm5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENyZWF0ZSBhbiBJbnRlcmFjdGl2ZU9iamVjdCBhbmQgZW5hYmxlIGl0XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SGl0QXJlYShnYW1lT2JqZWN0LCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQgJiYgZHJvcFpvbmUgJiYgIWdhbWVPYmplY3QuaW5wdXQuZHJvcFpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmlucHV0LmRyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgZ2l2ZW4gUG9pbnRlciBhbmQgcGVyZm9ybXMgYSBoaXQgdGVzdCBhZ2FpbnN0IGl0LCB0byBzZWUgd2hpY2ggaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzXHJcbiAgICAgKiBpdCBpcyBjdXJyZW50bHkgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGhpdCB0ZXN0IGlzIHBlcmZvcm1lZCBhZ2FpbnN0IHdoaWNoLWV2ZXIgQ2FtZXJhIHRoZSBQb2ludGVyIGlzIG92ZXIuIElmIGl0IGlzIG92ZXIgbXVsdGlwbGVcclxuICAgICAqIGNhbWVyYXMsIGl0IHN0YXJ0cyBjaGVja2luZyB0aGUgY2FtZXJhIGF0IHRoZSB0b3Agb2YgdGhlIGNhbWVyYSBsaXN0LCBhbmQgaWYgbm90aGluZyBpcyBmb3VuZCwgaXRlcmF0ZXMgZG93biB0aGUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNoaXRUZXN0UG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIGNoZWNrIGFnYWluc3QgdGhlIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBBbiBhcnJheSBvZiBhbGwgdGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cyB0aGUgUG9pbnRlciB3YXMgYWJvdmUuXHJcbiAgICAgKi9cclxuICAgIGhpdFRlc3RQb2ludGVyOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcy5nZXRDYW1lcmFzQmVsb3dQb2ludGVyKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNhbWVyYXMubGVuZ3RoOyBjKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tjXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBHZXQgYSBsaXN0IG9mIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIHNlZW4gYnkgdGhlIGNhbWVyYSBiZWxvdyB0aGUgcG9pbnRlciBpbiB0aGUgc2NlbmUgYW5kIHN0b3JlIGluICdvdmVyJyBhcnJheS5cclxuICAgICAgICAgICAgLy8gIEFsbCBvYmplY3RzIGluIHRoaXMgYXJyYXkgYXJlIGlucHV0IGVuYWJsZWQsIGFzIGNoZWNrZWQgYnkgdGhlIGhpdFRlc3QgbWV0aG9kLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGxhdGVyIG9uIGFzIHdlbGwuXHJcbiAgICAgICAgICAgIHZhciBvdmVyID0gdGhpcy5tYW5hZ2VyLmhpdFRlc3QocG9pbnRlciwgdGhpcy5fbGlzdCwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBGaWx0ZXIgb3V0IHRoZSBkcm9wIHpvbmVzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3Zlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IG92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5pbnB1dC5kcm9wWm9uZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3Zlci5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwb2ludGVyLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElmIHdlIGdvdCB0aGlzIGZhciB0aGVuIHRoZXJlIHdlcmUgbm8gR2FtZSBPYmplY3RzIGJlbG93IHRoZSBwb2ludGVyLCBidXQgaXQgd2FzIHN0aWxsIG92ZXJcclxuICAgICAgICAvLyAgYSBjYW1lcmEsIHNvIHNldCB0aGF0IHRoZSB0b3AtbW9zdCBvbmUgaW50byB0aGUgcG9pbnRlclxyXG5cclxuICAgICAgICBwb2ludGVyLmNhbWVyYSA9IGNhbWVyYXNbMF07XHJcblxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIGRvd24gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc0Rvd25FdmVudHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfRE9XTlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX0RPV05cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfRE9XTl9PVVRTSURFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgYmVpbmcgdGVzdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEb3duRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgb3ZlciBhbmQgZmlyZSB0aGVpciBldmVudHMgLyBjYWxsYmFja3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRseU92ZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGN1cnJlbnRseU92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfRE9XTiwgcG9pbnRlciwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFgsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxZLCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRE9XTiwgcG9pbnRlciwgZ2FtZU9iamVjdCwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElmIHRoZXkgcmVsZWFzZWQgb3V0c2lkZSB0aGUgY2FudmFzLCBidXQgcHJlc3NlZCBkb3duIGluc2lkZSBpdCwgd2UnbGwgc3RpbGwgZGlzcGF0Y2ggdGhlIGV2ZW50LlxyXG4gICAgICAgIGlmICghYWJvcnRlZCAmJiB0aGlzLm1hbmFnZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocG9pbnRlci5kb3duRWxlbWVudCA9PT0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfRE9XTiwgcG9pbnRlciwgY3VycmVudGx5T3Zlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfRE9XTl9PVVRTSURFLCBwb2ludGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGRyYWcgc3RhdGUgb2YgdGhlIGdpdmVuIFBvaW50ZXIgZm9yIHRoaXMgSW5wdXQgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzdGF0ZSB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxyXG4gICAgICpcclxuICAgICAqIDAgPSBOb3QgZHJhZ2dpbmcgYW55dGhpbmdcclxuICAgICAqIDEgPSBQcmltYXJ5IGJ1dHRvbiBkb3duIGFuZCBvYmplY3RzIGJlbG93LCBzbyBjb2xsZWN0IGEgZHJhZ2xpc3RcclxuICAgICAqIDIgPSBQb2ludGVyIGJlaW5nIGNoZWNrZWQgaWYgbWVldHMgZHJhZyBjcml0ZXJpYVxyXG4gICAgICogMyA9IFBvaW50ZXIgbWVldHMgY3JpdGVyaWEsIG5vdGlmeSB0aGUgZHJhZ2xpc3RcclxuICAgICAqIDQgPSBQb2ludGVyIGFjdGl2ZWx5IGRyYWdnaW5nIHRoZSBkcmFnbGlzdCBhbmQgaGFzIG1vdmVkXHJcbiAgICAgKiA1ID0gUG9pbnRlciBhY3RpdmVseSBkcmFnZ2luZyBidXQgaGFzIGJlZW4gcmVsZWFzZWQsIG5vdGlmeSBkcmFnbGlzdFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2dldERyYWdTdGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBnZXQgdGhlIGRyYWcgc3RhdGUgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBkcmFnIHN0YXRlIG9mIHRoZSBnaXZlbiBQb2ludGVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcmFnU3RhdGU6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnU3RhdGVbcG9pbnRlci5pZF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZHJhZyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gUG9pbnRlciBmb3IgdGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHN0YXRlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxyXG4gICAgICpcclxuICAgICAqIDAgPSBOb3QgZHJhZ2dpbmcgYW55dGhpbmdcclxuICAgICAqIDEgPSBQcmltYXJ5IGJ1dHRvbiBkb3duIGFuZCBvYmplY3RzIGJlbG93LCBzbyBjb2xsZWN0IGEgZHJhZ2xpc3RcclxuICAgICAqIDIgPSBQb2ludGVyIGJlaW5nIGNoZWNrZWQgaWYgbWVldHMgZHJhZyBjcml0ZXJpYVxyXG4gICAgICogMyA9IFBvaW50ZXIgbWVldHMgY3JpdGVyaWEsIG5vdGlmeSB0aGUgZHJhZ2xpc3RcclxuICAgICAqIDQgPSBQb2ludGVyIGFjdGl2ZWx5IGRyYWdnaW5nIHRoZSBkcmFnbGlzdCBhbmQgaGFzIG1vdmVkXHJcbiAgICAgKiA1ID0gUG9pbnRlciBhY3RpdmVseSBkcmFnZ2luZyBidXQgaGFzIGJlZW4gcmVsZWFzZWQsIG5vdGlmeSBkcmFnbGlzdFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldERyYWdTdGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBzZXQgdGhlIGRyYWcgc3RhdGUgZm9yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzdGF0ZSAtIFRoZSBkcmFnIHN0YXRlIHZhbHVlLiBBbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNS5cclxuICAgICAqL1xyXG4gICAgc2V0RHJhZ1N0YXRlOiBmdW5jdGlvbiAocG9pbnRlciwgc3RhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlW3BvaW50ZXIuaWRdID0gc3RhdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhIFBvaW50ZXIgaXMgcmVhZHkgdG8gZHJhZyB0aGUgb2JqZWN0cyBiZWxvdyBpdCwgYmFzZWQgb24gZWl0aGVyIGEgZGlzdGFuY2VcclxuICAgICAqIG9yIHRpbWUgdGhyZXNob2xkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIGNoZWNrIHRoZSBkcmFnIHRocmVzaG9sZHMgb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnQ6IGZ1bmN0aW9uIChwb2ludGVyLCB0aW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXNzZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgdGltZVRocmVzaG9sZCA9IHRoaXMuZHJhZ1RpbWVUaHJlc2hvbGQ7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlVGhyZXNob2xkID0gdGhpcy5kcmFnRGlzdGFuY2VUaHJlc2hvbGQ7XHJcblxyXG4gICAgICAgIGlmIChkaXN0YW5jZVRocmVzaG9sZCA+IDAgJiYgRGlzdGFuY2VCZXR3ZWVuKHBvaW50ZXIueCwgcG9pbnRlci55LCBwb2ludGVyLmRvd25YLCBwb2ludGVyLmRvd25ZKSA+PSBkaXN0YW5jZVRocmVzaG9sZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJdCBoYXMgbW92ZWQgZmFyIGVub3VnaCB0byBiZSBjb25zaWRlcmVkIGEgZHJhZ1xyXG4gICAgICAgICAgICBwYXNzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aW1lVGhyZXNob2xkID4gMCAmJiAodGltZSA+PSBwb2ludGVyLmRvd25UaW1lICsgdGltZVRocmVzaG9sZCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSXQgaGFzIGJlZW4gaGVsZCBkb3duIGxvbmcgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSBkcmFnXHJcbiAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFzc2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgMyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRHJhZ1N0YXJ0TGlzdChwb2ludGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBkcmFnIGxpc3QgZm9yIHRoZSBnaXZlbiBwb2ludGVyIGFuZCBkaXNwYXRjaGVzIHRoZSBzdGFydCBldmVudHMgZm9yIGVhY2ggb2JqZWN0IG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnU3RhcnRMaXN0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX1NUQVJUXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHByb2Nlc3MgdGhlIGRyYWcgZXZlbnQgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IERSQUdfU1RBUlQgd2FzIGNhbGxlZCBvbi5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdTdGFydExpc3Q6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8vICAzID0gUG9pbnRlciBtZWV0cyBjcml0ZXJpYSBhbmQgaXMgZnJlc2hseSBkb3duLCBub3RpZnkgdGhlIGRyYWdsaXN0XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5kcmFnU3RhdGUgPSAyO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXJ0WCA9IGdhbWVPYmplY3QueDtcclxuICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXJ0WSA9IGdhbWVPYmplY3QueTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmRyYWdTdGFydFhHbG9iYWwgPSBwb2ludGVyLng7XHJcbiAgICAgICAgICAgIGlucHV0LmRyYWdTdGFydFlHbG9iYWwgPSBwb2ludGVyLnk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5kcmFnWCA9IGlucHV0LmRyYWdTdGFydFhHbG9iYWwgLSBpbnB1dC5kcmFnU3RhcnRYO1xyXG4gICAgICAgICAgICBpbnB1dC5kcmFnWSA9IGlucHV0LmRyYWdTdGFydFlHbG9iYWwgLSBpbnB1dC5kcmFnU3RhcnRZO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfU1RBUlQsIHBvaW50ZXIsIGlucHV0LmRyYWdYLCBpbnB1dC5kcmFnWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfU1RBUlQsIHBvaW50ZXIsIGdhbWVPYmplY3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgNCk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSAnZHJhZyBkb3duJyBldmVudCBmb3IgdGhlIGdpdmVuIHBvaW50ZXIuIENoZWNrcyB0aGUgcG9pbnRlciBzdGF0ZSwgYnVpbGRzLXVwIHRoZSBkcmFnIGxpc3RcclxuICAgICAqIGFuZCBwcmVwYXJlcyB0aGVtIGFsbCBmb3IgaW50ZXJhY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc0RyYWdEb3duRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHByb2Nlc3MgdGhlIGRyYWcgZXZlbnQgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdlcmUgY29sbGVjdGVkIG9uIHRoZSBkcmFnIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEcmFnRG93bkV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudGx5T3ZlciA9IHRoaXMuX3RlbXA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kcmFnZ2FibGUubGVuZ3RoID09PSAwIHx8IGN1cnJlbnRseU92ZXIubGVuZ3RoID09PSAwIHx8ICFwb2ludGVyLnByaW1hcnlEb3duIHx8IHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFRoZXJlIGFyZSBubyBkcmFnZ2FibGUgaXRlbXMsIG5vIG92ZXIgaXRlbXMgb3IgdGhlIHBvaW50ZXIgaXNuJ3QgZG93biwgc28gbGV0J3Mgbm90IGV2ZW4gYm90aGVyIGdvaW5nIGZ1cnRoZXJcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgMSA9IFByaW1hcnkgYnV0dG9uIGRvd24gYW5kIG9iamVjdHMgYmVsb3csIHNvIGNvbGxlY3QgYSBkcmFnbGlzdFxyXG4gICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDEpO1xyXG5cclxuICAgICAgICAvLyAgR2V0IGRyYWdnYWJsZSBvYmplY3RzLCBzb3J0IHRoZW0sIHBpY2sgdGhlIHRvcCAob3IgYWxsKSBhbmQgc3RvcmUgdGhlbSBzb21ld2hlcmVcclxuICAgICAgICB2YXIgZHJhZ2xpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQuZHJhZ2dhYmxlICYmIChnYW1lT2JqZWN0LmlucHV0LmRyYWdTdGF0ZSA9PT0gMCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRyYWdsaXN0LnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkcmFnbGlzdC5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldERyYWdTdGF0ZShwb2ludGVyLCAwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkcmFnbGlzdC5sZW5ndGggPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoZHJhZ2xpc3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHJhZ2xpc3Quc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgZHJhZ2xpc3Qgbm93IGNvbnRhaW5zIGFsbCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgZHJhZ2dpbmdcclxuICAgICAgICB0aGlzLl9kcmFnW3BvaW50ZXIuaWRdID0gZHJhZ2xpc3Q7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXN0YW5jZVRocmVzaG9sZCA9PT0gMCAmJiB0aGlzLmRyYWdUaW1lVGhyZXNob2xkID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5vIGRyYWcgY3JpdGVyaWEsIHNvIHNuYXAgaW1tZWRpYXRlbHkgdG8gbW9kZSAzXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RyYWdTdGFydExpc3QocG9pbnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDaGVjayB0aGUgZGlzdGFuY2UgLyB0aW1lIG9uIHRoZSBuZXh0IGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhICdkcmFnIG1vdmUnIGV2ZW50IGZvciB0aGUgZ2l2ZW4gcG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwcm9jZXNzRHJhZ01vdmVFdmVudFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5URVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfTEVBVkVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX0VOVEVSXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19MRUFWRVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX09WRVJcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgZHJhZyBldmVudCBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSB1cGRhdGVkIGJ5IHRoaXMgZHJhZyBldmVudC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdNb3ZlRXZlbnQ6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8vICAyID0gUG9pbnRlciBiZWluZyBjaGVja2VkIGlmIG1lZXRzIGRyYWcgY3JpdGVyaWFcclxuICAgICAgICBpZiAodGhpcy5nZXREcmFnU3RhdGUocG9pbnRlcikgPT09IDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnQocG9pbnRlciwgdGhpcy5tYW5hZ2VyLmdhbWUubG9vcC5ub3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSA0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgNCA9IFBvaW50ZXIgYWN0aXZlbHkgZHJhZ2dpbmcgdGhlIGRyYWdsaXN0IGFuZCBoYXMgbW92ZWRcclxuICAgICAgICB2YXIgZHJvcFpvbmVzID0gdGhpcy5fdGVtcFpvbmVzO1xyXG5cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgLy8gIElmIHRoaXMgR08gaGFzIGEgdGFyZ2V0IHRoZW4gbGV0J3MgY2hlY2sgaXRcclxuICAgICAgICAgICAgaWYgKHRhcmdldClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZHJvcFpvbmVzLmluZGV4T2YodGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgR290IGEgdGFyZ2V0LCBhcmUgd2Ugc3RpbGwgb3ZlciBpdD9cclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgV2UncmUgc3RpbGwgb3ZlciBpdCwgYW5kIGl0J3Mgc3RpbGwgdGhlIHRvcCBvZiB0aGUgZGlzcGxheSBsaXN0LCBwaGV3IC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX09WRVIsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJBR19PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBTdGlsbCBvdmVyIGl0IGJ1dCBpdCdzIG5vIGxvbmdlciB0b3Agb2YgdGhlIGRpc3BsYXkgbGlzdCAodGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBhdCB0aGUgdG9wKVxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX0xFQVZFLCBwb2ludGVyLCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfTEVBVkUsIHBvaW50ZXIsIGdhbWVPYmplY3QsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnRhcmdldCA9IGRyb3Bab25lc1swXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRFJBR19FTlRFUiwgcG9pbnRlciwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5EUkFHX0VOVEVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBOb3BlLCB3ZSd2ZSBtb3ZlZCBvbiAob3IgdGhlIHRhcmdldCBoYXMhKSwgbGVhdmUgdGhlIG9sZCB0YXJnZXRcclxuICAgICAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRFJBR19MRUFWRSwgcG9pbnRlciwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5EUkFHX0xFQVZFLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgQW55dGhpbmcgbmV3IHRvIHJlcGxhY2UgaXQ/XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIFl1cCFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcFpvbmVzWzBdKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQudGFyZ2V0ID0gZHJvcFpvbmVzWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfRU5URVIsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfRU5URVIsIHBvaW50ZXIsIGdhbWVPYmplY3QsIHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBOb3BlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0YXJnZXQgJiYgZHJvcFpvbmVzWzBdKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC50YXJnZXQgPSBkcm9wWm9uZXNbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX0VOVEVSLCBwb2ludGVyLCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJBR19FTlRFUiwgcG9pbnRlciwgZ2FtZU9iamVjdCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdYO1xyXG4gICAgICAgICAgICB2YXIgZHJhZ1k7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkcmFnWCA9IHBvaW50ZXIueCAtIGlucHV0LmRyYWdYO1xyXG4gICAgICAgICAgICAgICAgZHJhZ1kgPSBwb2ludGVyLnkgLSBpbnB1dC5kcmFnWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBkeCA9IHBvaW50ZXIueCAtIGlucHV0LmRyYWdTdGFydFhHbG9iYWw7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHkgPSBwb2ludGVyLnkgLSBpbnB1dC5kcmFnU3RhcnRZR2xvYmFsO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByb3RhdGlvbiA9IGdhbWVPYmplY3QuZ2V0UGFyZW50Um90YXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZHhSb3RhdGVkID0gZHggKiBNYXRoLmNvcyhyb3RhdGlvbikgKyBkeSAqIE1hdGguc2luKHJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIHZhciBkeVJvdGF0ZWQgPSBkeSAqIE1hdGguY29zKHJvdGF0aW9uKSAtIGR4ICogTWF0aC5zaW4ocm90YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGR4Um90YXRlZCAqPSAoMSAvIGdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyLnNjYWxlWCk7XHJcbiAgICAgICAgICAgICAgICBkeVJvdGF0ZWQgKj0gKDEgLyBnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lci5zY2FsZVkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRyYWdYID0gZHhSb3RhdGVkICsgaW5wdXQuZHJhZ1N0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGRyYWdZID0gZHlSb3RhdGVkICsgaW5wdXQuZHJhZ1N0YXJ0WTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUcsIHBvaW50ZXIsIGRyYWdYLCBkcmFnWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUcsIHBvaW50ZXIsIGdhbWVPYmplY3QsIGRyYWdYLCBkcmFnWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIGEgJ2RyYWcgZG93bicgZXZlbnQgZm9yIHRoZSBnaXZlbiBwb2ludGVyLiBDaGVja3MgdGhlIHBvaW50ZXIgc3RhdGUsIGJ1aWxkcy11cCB0aGUgZHJhZyBsaXN0XHJcbiAgICAgKiBhbmQgcHJlcGFyZXMgdGhlbSBhbGwgZm9yIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnVXBFdmVudFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19FTkRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RST1BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19FTkRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJPUFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgZHJhZyBldmVudCBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSB1cGRhdGVkIGJ5IHRoaXMgZHJhZyBldmVudC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdVcEV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICAvLyAgNSA9IFBvaW50ZXIgd2FzIGFjdGl2ZWx5IGRyYWdnaW5nIGJ1dCBoYXMgYmVlbiByZWxlYXNlZCwgbm90aWZ5IGRyYWdsaXN0XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9kcmFnW3BvaW50ZXIuaWRdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmRyYWdTdGF0ZSA9PT0gMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXRlID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpbnB1dC5kcmFnWCA9IGlucHV0LmxvY2FsWCAtIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5kcmFnWSA9IGlucHV0LmxvY2FsWSAtIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BwZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RST1AsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJPUCwgcG9pbnRlciwgZ2FtZU9iamVjdCwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudGFyZ2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEFuZCBmaW5hbGx5IHRoZSBkcmFnZW5kIGV2ZW50XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfRU5ELCBwb2ludGVyLCBpbnB1dC5kcmFnWCwgaW5wdXQuZHJhZ1ksIGRyb3BwZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfRU5ELCBwb2ludGVyLCBnYW1lT2JqZWN0LCBkcm9wcGVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgMCk7XHJcblxyXG4gICAgICAgIGxpc3Quc3BsaWNlKDApO1xyXG5cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIG1vdmVtZW50IGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NNb3ZlRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfTU9WRVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9NT1ZFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIHBvaW50ZXIgdG8gY2hlY2sgZm9yIGV2ZW50cyBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NNb3ZlRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgb3ZlciBhbmQgZmlyZSB0aGVpciBldmVudHMgLyBjYWxsYmFja3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRseU92ZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGN1cnJlbnRseU92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfTU9WRSwgcG9pbnRlciwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFgsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxZLCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfTU9WRSwgcG9pbnRlciwgZ2FtZU9iamVjdCwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWJvcnRlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9NT1ZFLCBwb2ludGVyLCBjdXJyZW50bHlPdmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIGEgbW91c2Ugd2hlZWwgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc1doZWVsRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfV0hFRUxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfV0hFRUxcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIHBvaW50ZXIgdG8gY2hlY2sgZm9yIGV2ZW50cyBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NXaGVlbEV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZHggPSBwb2ludGVyLmRlbHRhWDtcclxuICAgICAgICB2YXIgZHkgPSBwb2ludGVyLmRlbHRhWTtcclxuICAgICAgICB2YXIgZHogPSBwb2ludGVyLmRlbHRhWjtcclxuXHJcbiAgICAgICAgLy8gIEdvIHRocm91Z2ggYWxsIG9iamVjdHMgdGhlIHBvaW50ZXIgd2FzIG92ZXIgYW5kIGZpcmUgdGhlaXIgZXZlbnRzIC8gY2FsbGJhY2tzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdG90YWwrKztcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMLCBwb2ludGVyLCBkeCwgZHksIGR6LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfV0hFRUwsIHBvaW50ZXIsIGdhbWVPYmplY3QsIGR4LCBkeSwgZHosIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoX2V2ZW50RGF0YS5jYW5jZWxsZWQgfHwgIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWJvcnRlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9XSEVFTCwgcG9pbnRlciwgY3VycmVudGx5T3ZlciwgZHgsIGR5LCBkeik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgUG9pbnRlciBvdmVyIGV2ZW50cy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpbnB1dCBoaXRzIHRoZSBjYW52YXMsIGhhdmluZyBwcmV2aW91c2x5IGJlZW4gb2ZmIG9mIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NPdmVyRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9PVkVSXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBwb2ludGVyIHRvIGNoZWNrIGZvciBldmVudHMgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwcm9jZXNzT3ZlckV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRseU92ZXIgPSB0aGlzLl90ZW1wO1xyXG5cclxuICAgICAgICB2YXIgdG90YWxJbnRlcmFjdGVkID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gY3VycmVudGx5T3Zlci5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBqdXN0T3ZlciA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzLm1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2V2ZW50RGF0YSA9IHRoaXMuX2V2ZW50RGF0YTtcclxuICAgICAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhYm9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gY3VycmVudGx5T3ZlcltpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAganVzdE92ZXIucHVzaChnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWCwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFksIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfT1ZFUiwgcG9pbnRlciwganVzdE92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhlbiBzb3J0IGl0IGludG8gZGlzcGxheSBsaXN0IG9yZGVyXHJcbiAgICAgICAgdGhpcy5fb3Zlcltwb2ludGVyLmlkXSA9IGp1c3RPdmVyO1xyXG5cclxuICAgICAgICByZXR1cm4gdG90YWxJbnRlcmFjdGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgdGhlIFBvaW50ZXIgb3V0IGV2ZW50cy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpbnB1dCBsZWF2ZXMgdGhlIGNhbnZhcywgYXMgaXQgY2FuIG5ldmVyIGJlICdvdmVyJyBpbiB0aGlzIGNhc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc091dEV2ZW50c1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9PVVRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1VUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgcG9pbnRlciB0byBjaGVjayBmb3IgZXZlbnRzIGFnYWluc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGludGVyYWN0ZWQgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc091dEV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByZXZpb3VzbHlPdmVyID0gdGhpcy5fb3Zlcltwb2ludGVyLmlkXTtcclxuXHJcbiAgICAgICAgdmFyIHRvdGFsSW50ZXJhY3RlZCA9IDA7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IHByZXZpb3VzbHlPdmVyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHRvdGFsID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgICAgIHZhciBfZXZlbnRDb250YWluZXIgPSB0aGlzLl9ldmVudENvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgICAgIF9ldmVudERhdGEuY2FuY2VsbGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMocHJldmlvdXNseU92ZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBDYWxsIG9uT3V0IGZvciBldmVyeXRoaW5nIGluIHRoZSBwcmV2aW91c2x5T3ZlciBhcnJheVxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIucmVzZXRDdXJzb3IoZ2FtZU9iamVjdC5pbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9QT0lOVEVSX09VVCwgcG9pbnRlciwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVVQsIHBvaW50ZXIsIGdhbWVPYmplY3QsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9PVVQsIHBvaW50ZXIsIHByZXZpb3VzbHlPdmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3Zlcltwb2ludGVyLmlkXSA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsSW50ZXJhY3RlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIG92ZXIgYW5kIG91dCBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc092ZXJPdXRFdmVudHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9PVkVSXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09WRVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9PVVRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1VUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBwb2ludGVyIHRvIGNoZWNrIGZvciBldmVudHMgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwcm9jZXNzT3Zlck91dEV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRseU92ZXIgPSB0aGlzLl90ZW1wO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdDtcclxuICAgICAgICB2YXIganVzdE91dCA9IFtdO1xyXG4gICAgICAgIHZhciBqdXN0T3ZlciA9IFtdO1xyXG4gICAgICAgIHZhciBzdGlsbE92ZXIgPSBbXTtcclxuICAgICAgICB2YXIgcHJldmlvdXNseU92ZXIgPSB0aGlzLl9vdmVyW3BvaW50ZXIuaWRdO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlEcmFnZ2luZyA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgcHJldmlvdXNseSBvdmVyLCBhbmQgc2VlIGlmIGl0IHN0aWxsIGlzLlxyXG4gICAgICAgIC8vICBTcGxpdHMgdGhlIHByZXZpb3VzbHlPdmVyIGFycmF5IGludG8gdHdvIHBhcnRzOiBqdXN0T3V0IGFuZCBzdGlsbE92ZXJcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZXZpb3VzbHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRseU92ZXIuaW5kZXhPZihnYW1lT2JqZWN0KSA9PT0gLTEgJiYgY3VycmVudGx5RHJhZ2dpbmcuaW5kZXhPZihnYW1lT2JqZWN0KSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBOb3QgaW4gdGhlIGN1cnJlbnRseU92ZXIgYXJyYXksIHNvIG11c3QgYmUgb3V0c2lkZSBvZiB0aGlzIG9iamVjdCBub3dcclxuICAgICAgICAgICAgICAgIGp1c3RPdXQucHVzaChnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBJbiB0aGUgY3VycmVudGx5T3ZlciBhcnJheVxyXG4gICAgICAgICAgICAgICAgc3RpbGxPdmVyLnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBHbyB0aHJvdWdoIGFsbCBvYmplY3RzIHRoZSBwb2ludGVyIGlzIGN1cnJlbnRseSBvdmVyICh0aGUgaGl0IHRlc3QgcmVzdWx0cylcclxuICAgICAgICAvLyAgYW5kIGlmIG5vdCBpbiB0aGUgcHJldmlvdXNseU92ZXIgYXJyYXkgd2Uga25vdyBpdCdzIGEgbmV3IGVudHJ5LCBzbyBhZGQgdG8ganVzdE92ZXJcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VycmVudGx5T3Zlci5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIElzIHRoaXMgbmV3bHkgb3Zlcj9cclxuXHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c2x5T3Zlci5pbmRleE9mKGdhbWVPYmplY3QpID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAganVzdE92ZXIucHVzaChnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ5IHRoaXMgcG9pbnQgdGhlIGFycmF5cyBhcmUgZmlsbGVkLCBzbyBub3cgd2UgY2FuIHByb2Nlc3Mgd2hhdCBoYXBwZW5lZC4uLlxyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgSnVzdCBPdXQgb2JqZWN0c1xyXG4gICAgICAgIHZhciB0b3RhbCA9IGp1c3RPdXQubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgdG90YWxJbnRlcmFjdGVkID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoanVzdE91dCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQ2FsbCBvbk91dCBmb3IgZXZlcnl0aGluZyBpbiB0aGUganVzdE91dCBhcnJheVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGp1c3RPdXRbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vICBSZXNldCBjdXJzb3IgYmVmb3JlIHdlIGVtaXQgdGhlIGV2ZW50LCBpbiBjYXNlIHRoZXkgd2FudCB0byBjaGFuZ2UgaXQgZHVyaW5nIHRoZSBldmVudFxyXG4gICAgICAgICAgICAgICAgbWFuYWdlci5yZXNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVVQsIHBvaW50ZXIsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVVQsIHBvaW50ZXIsIGdhbWVPYmplY3QsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFib3J0ZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9PVVQsIHBvaW50ZXIsIGp1c3RPdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgSnVzdCBPdmVyIG9iamVjdHNcclxuICAgICAgICB0b3RhbCA9IGp1c3RPdmVyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoanVzdE92ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gIENhbGwgb25PdmVyIGZvciBldmVyeXRoaW5nIGluIHRoZSBqdXN0T3ZlciBhcnJheVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGp1c3RPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgU2V0IGN1cnNvciBiZWZvcmUgd2UgZW1pdCB0aGUgZXZlbnQsIGluIGNhc2UgdGhleSB3YW50IHRvIGNoYW5nZSBpdCBkdXJpbmcgdGhlIGV2ZW50XHJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWCwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFksIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfT1ZFUiwgcG9pbnRlciwganVzdE92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWRkIHRoZSBjb250ZW50cyBvZiBqdXN0T3ZlciB0byB0aGUgcHJldmlvdXNseSBvdmVyIGFycmF5XHJcbiAgICAgICAgcHJldmlvdXNseU92ZXIgPSBzdGlsbE92ZXIuY29uY2F0KGp1c3RPdmVyKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZW4gc29ydCBpdCBpbnRvIGRpc3BsYXkgbGlzdCBvcmRlclxyXG4gICAgICAgIHRoaXMuX292ZXJbcG9pbnRlci5pZF0gPSB0aGlzLnNvcnRHYW1lT2JqZWN0cyhwcmV2aW91c2x5T3Zlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbEludGVyYWN0ZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgUG9pbnRlciB1cCBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc1VwRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQX09VVFNJREVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgcG9pbnRlciB0byBjaGVjayBmb3IgZXZlbnRzIGFnYWluc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGludGVyYWN0ZWQgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc1VwRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudGx5T3ZlciA9IHRoaXMuX3RlbXA7XHJcblxyXG4gICAgICAgIHZhciBfZXZlbnREYXRhID0gdGhpcy5fZXZlbnREYXRhO1xyXG4gICAgICAgIHZhciBfZXZlbnRDb250YWluZXIgPSB0aGlzLl9ldmVudENvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIGFib3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gIEdvIHRocm91Z2ggYWxsIG9iamVjdHMgdGhlIHBvaW50ZXIgd2FzIG92ZXIgYW5kIGZpcmUgdGhlaXIgZXZlbnRzIC8gY2FsbGJhY2tzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfVVAsIHBvaW50ZXIsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxYLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWSwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1VQLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgdGhleSByZWxlYXNlZCBvdXRzaWRlIHRoZSBjYW52YXMsIGJ1dCBwcmVzc2VkIGRvd24gaW5zaWRlIGl0LCB3ZSdsbCBzdGlsbCBkaXNwYXRjaCB0aGUgZXZlbnQuXHJcbiAgICAgICAgaWYgKCFhYm9ydGVkICYmIHRoaXMubWFuYWdlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChwb2ludGVyLnVwRWxlbWVudCA9PT0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfVVAsIHBvaW50ZXIsIGN1cnJlbnRseU92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5QT0lOVEVSX1VQX09VVFNJREUsIHBvaW50ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudGx5T3Zlci5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVldWVzIGEgR2FtZSBPYmplY3QgZm9yIGluc2VydGlvbiBpbnRvIHRoaXMgSW5wdXQgUGx1Z2luIG9uIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNxdWV1ZUZvckluc2VydGlvblxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGFkZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBxdWV1ZUZvckluc2VydGlvbjogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLmluZGV4T2YoY2hpbGQpID09PSAtMSAmJiB0aGlzLl9saXN0LmluZGV4T2YoY2hpbGQpID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb24ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWV1ZXMgYSBHYW1lIE9iamVjdCBmb3IgcmVtb3ZhbCBmcm9tIHRoaXMgSW5wdXQgUGx1Z2luIG9uIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNxdWV1ZUZvclJlbW92YWxcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcXVldWVGb3JSZW1vdmFsOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwucHVzaChjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRyYWdnYWJsZSBzdGF0ZSBvZiB0aGUgZ2l2ZW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIFRoZXkgY2FuIGVpdGhlciBiZSBzZXQgdG8gYmUgZHJhZ2dhYmxlLCBvciBjYW4gaGF2ZSB0aGVpciBkcmFnZ2FibGUgc3RhdGUgcmVtb3ZlZCBieSBwYXNzaW5nIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQSBHYW1lIE9iamVjdCB3aWxsIG5vdCBmaXJlIGRyYWcgZXZlbnRzIHVubGVzcyBpdCBoYXMgYmVlbiBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXREcmFnZ2FibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBjaGFuZ2UgdGhlIGRyYWdnYWJsZSBzdGF0ZSBvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gU2V0IHRvIGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3RzIHNob3VsZCBiZSBtYWRlIGRyYWdnYWJsZSwgYGZhbHNlYCBpZiB0aGV5IHNob3VsZCBiZSB1bnNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnZ2FibGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgdmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnYW1lT2JqZWN0cykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0cyA9IFsgZ2FtZU9iamVjdHMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5kcmFnZ2FibGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2RyYWdnYWJsZS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4ID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhZ2dhYmxlLnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXZhbHVlICYmIGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBzZXRJbnRlcmFjdGl2ZWAsIGBlbmFibGVgIG9yIGBzZXRIaXRBcmVhYCB0aGF0IHdpbGwgaGFuZGxlXHJcbiAgICAgKiBwaXhlbC1wZXJmZWN0IGlucHV0IGRldGVjdGlvbiBvbiBhbiBJbWFnZSBvciBTcHJpdGUgYmFzZWQgR2FtZSBPYmplY3QsIG9yIGFueSBjdXN0b20gY2xhc3MgdGhhdCBleHRlbmRzIHRoZW0uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGNyZWF0ZSBhIHNwcml0ZSB0aGF0IGlzIGNsaWNrYWJsZSBvbiBhbnkgcGl4ZWwgdGhhdCBoYXMgYW4gYWxwaGEgdmFsdWUgPj0gMS5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmFkZC5zcHJpdGUoeCwgeSwga2V5KS5zZXRJbnRlcmFjdGl2ZSh0aGlzLmlucHV0Lm1ha2VQaXhlbFBlcmZlY3QoKSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgY3JlYXRlIGEgc3ByaXRlIHRoYXQgaXMgY2xpY2thYmxlIG9uIGFueSBwaXhlbCB0aGF0IGhhcyBhbiBhbHBoYSB2YWx1ZSA+PSAxNTAuXHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5hZGQuc3ByaXRlKHgsIHksIGtleSkuc2V0SW50ZXJhY3RpdmUodGhpcy5pbnB1dC5tYWtlUGl4ZWxQZXJmZWN0KDE1MCkpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT25jZSB5b3UgaGF2ZSBtYWRlIGFuIEludGVyYWN0aXZlIE9iamVjdCBwaXhlbCBwZXJmZWN0IGl0IGltcGFjdHMgYWxsIGlucHV0IHJlbGF0ZWQgZXZlbnRzIGZvciBpdDogZG93biwgdXAsXHJcbiAgICAgKiBkcmFnc3RhcnQsIGRyYWcsIGV0Yy5cclxuICAgICAqXHJcbiAgICAgKiBBcyBhIHBvaW50ZXIgaW50ZXJhY3RzIHdpdGggdGhlIEdhbWUgT2JqZWN0IGl0IHdpbGwgY29uc3RhbnRseSBwb2xsIHRoZSB0ZXh0dXJlLCBleHRyYWN0aW5nIGEgc2luZ2xlIHBpeGVsIGZyb21cclxuICAgICAqIHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgY2hlY2tpbmcgaXRzIGNvbG9yIHZhbHVlcy4gVGhpcyBpcyBhbiBleHBlbnNpdmUgcHJvY2Vzcywgc28gc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvblxyXG4gICAgICogR2FtZSBPYmplY3RzIHRoYXQgcmVhbGx5IG5lZWQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbm5vdCBtYWtlIG5vbi10ZXh0dXJlIGJhc2VkIEdhbWUgT2JqZWN0cyBwaXhlbCBwZXJmZWN0LiBTbyB0aGlzIHdpbGwgbm90IHdvcmsgb24gR3JhcGhpY3MsIEJpdG1hcFRleHQsXHJcbiAgICAgKiBSZW5kZXIgVGV4dHVyZXMsIFRleHQsIFRpbGVtYXBzLCBDb250YWluZXJzIG9yIFBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNtYWtlUGl4ZWxQZXJmZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYWxwaGFUb2xlcmFuY2U9MV0gLSBUaGUgYWxwaGEgbGV2ZWwgdGhhdCB0aGUgcGl4ZWwgc2hvdWxkIGJlIGFib3ZlIHRvIGJlIGluY2x1ZGVkIGFzIGEgc3VjY2Vzc2Z1bCBpbnRlcmFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gQSBQaXhlbCBQZXJmZWN0IEhhbmRsZXIgZm9yIHVzZSBhcyBhIGhpdEFyZWEgc2hhcGUgY2FsbGJhY2suXHJcbiAgICAgKi9cclxuICAgIG1ha2VQaXhlbFBlcmZlY3Q6IGZ1bmN0aW9uIChhbHBoYVRvbGVyYW5jZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGFUb2xlcmFuY2UgPT09IHVuZGVmaW5lZCkgeyBhbHBoYVRvbGVyYW5jZSA9IDE7IH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVNYW5hZ2VyID0gdGhpcy5zeXN0ZW1zLnRleHR1cmVzO1xyXG5cclxuICAgICAgICByZXR1cm4gQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlcih0ZXh0dXJlTWFuYWdlciwgYWxwaGFUb2xlcmFuY2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhpdCBhcmVhIGZvciB0aGUgZ2l2ZW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIEEgaGl0IGFyZWEgaXMgdHlwaWNhbGx5IG9uZSBvZiB0aGUgZ2VvbWV0cmljIHNoYXBlcyBQaGFzZXIgcHJvdmlkZXMsIHN1Y2ggYXMgYSBgUGhhc2VyLkdlb20uUmVjdGFuZ2xlYFxyXG4gICAgICogb3IgYFBoYXNlci5HZW9tLkNpcmNsZWAuIEhvd2V2ZXIsIGl0IGNhbiBiZSBhbnkgb2JqZWN0IGFzIGxvbmcgYXMgaXQgd29ya3Mgd2l0aCB0aGUgcHJvdmlkZWQgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gaGl0IGFyZWEgaXMgcHJvdmlkZWQgYSBSZWN0YW5nbGUgaXMgY3JlYXRlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgR2FtZSBPYmplY3QsIGlmIHBvc3NpYmxlXHJcbiAgICAgKiB0byBjYWxjdWxhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGhpdCBhcmVhIGNhbGxiYWNrIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGUgYW5kIHJldHVybnMgYSBib29sZWFuIGlmXHJcbiAgICAgKiB0aG9zZSB2YWx1ZXMgZmFsbCB3aXRoaW4gdGhlIGFyZWEgb2YgdGhlIHNoYXBlIG9yIG5vdC4gQWxsIG9mIHRoZSBQaGFzZXIgZ2VvbWV0cnkgb2JqZWN0cyBwcm92aWRlIHRoaXMsXHJcbiAgICAgKiBzdWNoIGFzIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29udGFpbnNgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBzZXQgdGhlIGhpdCBhcmVhIG9uLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLklucHV0LklucHV0Q29uZmlndXJhdGlvbnxhbnkpfSBbc2hhcGVdIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSGl0QXJlYUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhlICdjb250YWlucycgZnVuY3Rpb24gdG8gaW52b2tlIHRvIGNoZWNrIGlmIHRoZSBwb2ludGVyIGlzIHdpdGhpbiB0aGUgaGl0IGFyZWEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNoYXBlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhRnJvbVRleHR1cmUoZ2FtZU9iamVjdHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdhbWVPYmplY3RzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3RzID0gWyBnYW1lT2JqZWN0cyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRyYWdnYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBkcm9wWm9uZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjdXJzb3IgPSBmYWxzZTtcclxuICAgICAgICB2YXIgdXNlSGFuZEN1cnNvciA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBwaXhlbFBlcmZlY3QgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY3VzdG9tSGl0QXJlYSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vICBDb25maWcgb2JqZWN0P1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KHNoYXBlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBzaGFwZTtcclxuXHJcbiAgICAgICAgICAgIHNoYXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hpdEFyZWEnLCBudWxsKTtcclxuICAgICAgICAgICAgY2FsbGJhY2sgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnaGl0QXJlYUNhbGxiYWNrJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGRyYWdnYWJsZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdkcmFnZ2FibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGRyb3Bab25lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2Ryb3Bab25lJywgZmFsc2UpO1xyXG4gICAgICAgICAgICBjdXJzb3IgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY3Vyc29yJywgZmFsc2UpO1xyXG4gICAgICAgICAgICB1c2VIYW5kQ3Vyc29yID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VzZUhhbmRDdXJzb3InLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBwaXhlbFBlcmZlY3QgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncGl4ZWxQZXJmZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICB2YXIgYWxwaGFUb2xlcmFuY2UgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYWxwaGFUb2xlcmFuY2UnLCAxKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwaXhlbFBlcmZlY3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNoYXBlID0ge307XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHRoaXMubWFrZVBpeGVsUGVyZmVjdChhbHBoYVRvbGVyYW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBTdGlsbCBubyBoaXRBcmVhIG9yIGNhbGxiYWNrP1xyXG4gICAgICAgICAgICBpZiAoIXNoYXBlIHx8ICFjYWxsYmFjaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaXRBcmVhRnJvbVRleHR1cmUoZ2FtZU9iamVjdHMpO1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tSGl0QXJlYSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzaGFwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IHNoYXBlO1xyXG4gICAgICAgICAgICBzaGFwZSA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnYW1lT2JqZWN0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gZ2FtZU9iamVjdHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAocGl4ZWxQZXJmZWN0ICYmIGdhbWVPYmplY3QudHlwZSA9PT0gJ0NvbnRhaW5lcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IHBpeGVsUGVyZmVjdCB0ZXN0IGEgQ29udGFpbmVyLiBVc2UgYSBjdXN0b20gY2FsbGJhY2suJyk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGlvID0gKCFnYW1lT2JqZWN0LmlucHV0KSA/IENyZWF0ZUludGVyYWN0aXZlT2JqZWN0KGdhbWVPYmplY3QsIHNoYXBlLCBjYWxsYmFjaykgOiBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICAgICAgaW8uY3VzdG9tSGl0QXJlYSA9IGN1c3RvbUhpdEFyZWE7XHJcbiAgICAgICAgICAgIGlvLmRyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgICAgICAgIGlvLmN1cnNvciA9ICh1c2VIYW5kQ3Vyc29yKSA/ICdwb2ludGVyJyA6IGN1cnNvcjtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBpbztcclxuXHJcbiAgICAgICAgICAgIGlmIChkcmFnZ2FibGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RHJhZ2dhYmxlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlRm9ySW5zZXJ0aW9uKGdhbWVPYmplY3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5DaXJjbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCByYWRpdXMgdG8gY29udHJvbCBpdHMgcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0SGl0QXJlYUNpcmNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIHNldCBhcyBoYXZpbmcgYSBjaXJjbGUgaGl0IGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgQ2lyY2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFDaXJjbGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgcmFkaXVzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IENpcmNsZUNvbnRhaW5zOyB9XHJcblxyXG4gICAgICAgIHZhciBzaGFwZSA9IG5ldyBDaXJjbGUoeCwgeSwgcmFkaXVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0SGl0QXJlYShnYW1lT2JqZWN0cywgc2hhcGUsIGNhbGxiYWNrKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBoaXQgYXJlYSBmb3IgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGJlIGEgYFBoYXNlci5HZW9tLkVsbGlwc2VgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zIHRvIGNvbnRyb2wgaXRzIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFFbGxpcHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gc2V0IGFzIGhhdmluZyBhbiBlbGxpcHNlIGhpdCBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgaGl0IGFyZWEgY2FsbGJhY2suIElmIHVuZGVmaW5lZCBpdCB1c2VzIEVsbGlwc2UuQ29udGFpbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYUVsbGlwc2U6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBFbGxpcHNlQ29udGFpbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHNoYXBlID0gbmV3IEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldEhpdEFyZWEoZ2FtZU9iamVjdHMsIHNoYXBlLCBjYWxsYmFjayk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIEdhbWUgT2JqZWN0cyB0ZXh0dXJlIGZyYW1lIHRvIGRlZmluZSB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGhpdCBhcmVhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFGcm9tVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIHNldCBhcyBoYXZpbmcgYW4gZWxsaXBzZSBoaXQgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgUmVjdGFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFGcm9tVGV4dHVyZTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IFJlY3RhbmdsZUNvbnRhaW5zOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnYW1lT2JqZWN0cykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0cyA9IFsgZ2FtZU9iamVjdHMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGZyYW1lID0gZ2FtZU9iamVjdC5mcmFtZTtcclxuXHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3Qud2lkdGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gZ2FtZU9iamVjdC53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGdhbWVPYmplY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGZyYW1lLnJlYWxXaWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGZyYW1lLnJlYWxIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LnR5cGUgPT09ICdDb250YWluZXInICYmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRhaW5lci5zZXRJbnRlcmFjdGl2ZSBtdXN0IHNwZWNpZnkgYSBTaGFwZSBvciBjYWxsIHNldFNpemUoKSBmaXJzdCcpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMCAmJiBoZWlnaHQgIT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBDcmVhdGVJbnRlcmFjdGl2ZU9iamVjdChnYW1lT2JqZWN0LCBuZXcgUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWV1ZUZvckluc2VydGlvbihnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zIHRvIGNvbnRyb2wgaXRzIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFSZWN0YW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBzZXQgYXMgaGF2aW5nIGEgcmVjdGFuZ3VsYXIgaGl0IGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgUmVjdGFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFSZWN0YW5nbGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBSZWN0YW5nbGVDb250YWluczsgfVxyXG5cclxuICAgICAgICB2YXIgc2hhcGUgPSBuZXcgUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhpdCBhcmVhIGZvciBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gYmUgYSBgUGhhc2VyLkdlb20uVHJpYW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIGNvbnRyb2wgdGhlIHBvc2l0aW9uIG9mIGl0cyBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0SGl0QXJlYVRyaWFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gc2V0IGFzIGhhdmluZyBhICB0cmlhbmd1bGFyIGhpdCBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDMgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTMgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgaGl0IGFyZWEgY2FsbGJhY2suIElmIHVuZGVmaW5lZCBpdCB1c2VzIFRyaWFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFUcmlhbmdsZTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IFRyaWFuZ2xlQ29udGFpbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHNoYXBlID0gbmV3IFRyaWFuZ2xlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gSW5wdXQgRGVidWcgU2hhcGUgZm9yIHRoZSBnaXZlbiBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIF9hbHJlYWR5XyBiZWVuIGVuYWJsZWQgZm9yIGlucHV0IHByaW9yIHRvIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBhc3Npc3QgeW91IGR1cmluZyBkZXZlbG9wbWVudCBhbmQgZGVidWdnaW5nLlxyXG4gICAgICpcclxuICAgICAqIERlYnVnIFNoYXBlcyBjYW4gb25seSBiZSBjcmVhdGVkIGZvciBHYW1lIE9iamVjdHMgdGhhdCBhcmUgdXNpbmcgc3RhbmRhcmQgUGhhc2VyIEdlb21ldHJ5IGZvciBpbnB1dCxcclxuICAgICAqIGluY2x1ZGluZzogQ2lyY2xlLCBFbGxpcHNlLCBMaW5lLCBQb2x5Z29uLCBSZWN0YW5nbGUgYW5kIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEdhbWUgT2JqZWN0cyB0aGF0IGFyZSB1c2luZyB0aGVpciBhdXRvbWF0aWMgaGl0IGFyZWFzIGFyZSB1c2luZyBSZWN0YW5nbGVzIGJ5IGRlZmF1bHQsIHNvIHdpbGwgYWxzbyB3b3JrLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBEZWJ1ZyBTaGFwZSBpcyBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgZGlzcGxheSBsaXN0IGFuZCBpcyB0aGVuIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBHYW1lIE9iamVjdFxyXG4gICAgICogaXQgaXMgY29ubmVjdGVkIHdpdGguIFNob3VsZCB5b3UgbmVlZCB0byBtb2RpZnkgaXQgeW91cnNlbGYsIHN1Y2ggYXMgdG8gaGlkZSBpdCwgeW91IGNhbiBhY2Nlc3MgaXQgdmlhXHJcbiAgICAgKiB0aGUgR2FtZSBPYmplY3QgcHJvcGVydHk6IGBHYW1lT2JqZWN0LmlucHV0LmhpdEFyZWFEZWJ1Z2AuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhIEdhbWUgT2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgYSBEZWJ1ZyBTaGFwZSB3aWxsIGZpcnN0IGRlc3Ryb3kgdGhlIG9sZCBzaGFwZSxcclxuICAgICAqIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuIElmIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGUgRGVidWcgU2hhcGUgZW50aXJlbHksIHlvdSBzaG91bGQgY2FsbCB0aGVcclxuICAgICAqIG1ldGhvZCBgSW5wdXRQbHVnaW4ucmVtb3ZlRGVidWdgLlxyXG4gICAgICpcclxuICAgICAqIE5vdGUgdGhhdCB0aGUgZGVidWcgc2hhcGUgd2lsbCBvbmx5IHNob3cgdGhlIG91dGxpbmUgb2YgdGhlIGlucHV0IGFyZWEuIElmIHRoZSBpbnB1dCB0ZXN0IGlzIHVzaW5nIGFcclxuICAgICAqIHBpeGVsIHBlcmZlY3QgY2hlY2ssIGZvciBleGFtcGxlLCB0aGVuIHRoaXMgaXMgbm90IGRpc3BsYXllZC4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBzaGFwZSwgdGhhdFxyXG4gICAgICogZG9lc24ndCBleHRlbmQgb25lIG9mIHRoZSBiYXNlIFBoYXNlciBHZW9tZXRyeSBvYmplY3RzLCBhcyB5b3VyIGhpdCBhcmVhLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgbm90XHJcbiAgICAgKiB3b3JrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2VuYWJsZURlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBjcmVhdGUgdGhlIGlucHV0IGRlYnVnIHNoYXBlIGZvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sb3I9MHgwMGZmMDBdIC0gVGhlIG91dGxpbmUgY29sb3Igb2YgdGhlIGRlYnVnIHNoYXBlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZURlYnVnOiBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbG9yID09PSB1bmRlZmluZWQpIHsgY29sb3IgPSAweDAwZmYwMDsgfVxyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICBpZiAoIWlucHV0IHx8ICFpbnB1dC5oaXRBcmVhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2hhcGUgPSBpbnB1dC5oaXRBcmVhO1xyXG4gICAgICAgIHZhciBzaGFwZVR5cGUgPSBzaGFwZS50eXBlO1xyXG4gICAgICAgIHZhciBkZWJ1ZyA9IGlucHV0LmhpdEFyZWFEZWJ1ZztcclxuICAgICAgICB2YXIgZmFjdG9yeSA9IHRoaXMuc3lzdGVtcy5hZGQ7XHJcbiAgICAgICAgdmFyIHVwZGF0ZUxpc3QgPSB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdDtcclxuXHJcbiAgICAgICAgaWYgKGRlYnVnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdXBkYXRlTGlzdC5yZW1vdmUoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9mZnNldHggPSAwO1xyXG4gICAgICAgIHZhciBvZmZzZXR5ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHNoYXBlVHlwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5DSVJDTEU6XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZhY3RvcnkuYXJjKDAsIDAsIHNoYXBlLnJhZGl1cyk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR4ID0gc2hhcGUueCAtIHNoYXBlLnJhZGl1cztcclxuICAgICAgICAgICAgICAgIG9mZnNldHkgPSBzaGFwZS55IC0gc2hhcGUucmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEdFT01fQ09OU1QuRUxMSVBTRTpcclxuICAgICAgICAgICAgICAgIGRlYnVnID0gZmFjdG9yeS5lbGxpcHNlKDAsIDAsIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0eCA9IHNoYXBlLnggLSBzaGFwZS53aWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR5ID0gc2hhcGUueSAtIHNoYXBlLmhlaWdodCAvIDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5MSU5FOlxyXG4gICAgICAgICAgICAgICAgZGVidWcgPSBmYWN0b3J5LmxpbmUoMCwgMCwgc2hhcGUueDEsIHNoYXBlLnkxLCBzaGFwZS54Miwgc2hhcGUueTIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEdFT01fQ09OU1QuUE9MWUdPTjpcclxuICAgICAgICAgICAgICAgIGRlYnVnID0gZmFjdG9yeS5wb2x5Z29uKDAsIDAsIHNoYXBlLnBvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5SRUNUQU5HTEU6XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZhY3RvcnkucmVjdGFuZ2xlKDAsIDAsIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0eCA9IHNoYXBlLng7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR5ID0gc2hhcGUueTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBHRU9NX0NPTlNULlRSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgZGVidWcgPSBmYWN0b3J5LnRyaWFuZ2xlKDAsIDAsIHNoYXBlLngxLCBzaGFwZS55MSwgc2hhcGUueDIsIHNoYXBlLnkyLCBzaGFwZS54Mywgc2hhcGUueTMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVidWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWJ1Zy5pc0ZpbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGVidWcucHJlVXBkYXRlID0gZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0U3Ryb2tlU3R5bGUoMSAvIGdhbWVPYmplY3Quc2NhbGUsIGNvbG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXREaXNwbGF5T3JpZ2luKGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblgsIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblkpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0Um90YXRpb24oZ2FtZU9iamVjdC5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXRTY2FsZShnYW1lT2JqZWN0LnNjYWxlWCwgZ2FtZU9iamVjdC5zY2FsZVkpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0UG9zaXRpb24oZ2FtZU9iamVjdC54ICsgb2Zmc2V0eCwgZ2FtZU9iamVjdC55ICsgb2Zmc2V0eSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXRTY3JvbGxGYWN0b3IoZ2FtZU9iamVjdC5zY3JvbGxGYWN0b3JYLCBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdXBkYXRlTGlzdC5hZGQoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYURlYnVnID0gZGVidWc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuIElucHV0IERlYnVnIFNoYXBlIGZyb20gdGhlIGdpdmVuIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzaGFwZSBpcyBkZXN0cm95ZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBgaGl0QXJlYURlYnVnYCBwcm9wZXJ0eSBpcyBzZXQgdG8gYG51bGxgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3JlbW92ZURlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUgdGhlIGlucHV0IGRlYnVnIHNoYXBlIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0IFBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRGVidWc6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC5oaXRBcmVhRGVidWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGVidWcgPSBpbnB1dC5oaXRBcmVhRGVidWc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdC5yZW1vdmUoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYURlYnVnID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIFBvaW50ZXJzIHRvIGFsd2F5cyBwb2xsLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYSBwb2ludGVyIGlzIHBvbGxlZCBpdCBydW5zIGEgaGl0IHRlc3QgdG8gc2VlIHdoaWNoIEdhbWUgT2JqZWN0cyBhcmUgY3VycmVudGx5IGJlbG93IGl0LFxyXG4gICAgICogb3IgYmVpbmcgaW50ZXJhY3RlZCB3aXRoIGl0LCByZWdhcmRsZXNzIGlmIHRoZSBQb2ludGVyIGhhcyBhY3R1YWxseSBtb3ZlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogWW91IHNob3VsZCBlbmFibGUgdGhpcyBpZiB5b3Ugd2FudCBvYmplY3RzIGluIHlvdXIgZ2FtZSB0byBmaXJlIG92ZXIgLyBvdXQgZXZlbnRzLCBhbmQgdGhlIG9iamVjdHNcclxuICAgICAqIGFyZSBjb25zdGFudGx5IG1vdmluZywgYnV0IHRoZSBwb2ludGVyIG1heSBub3QgaGF2ZS4gUG9sbGluZyBldmVyeSBmcmFtZSBoYXMgYWRkaXRpb25hbCBjb21wdXRhdGlvblxyXG4gICAgICogY29zdHMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIGludGVyYWN0aXZlIG9iamVjdHMgaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldFBvbGxBbHdheXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvbGxBbHdheXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0UG9sbFJhdGUoMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgUG9pbnRlcnMgdG8gb25seSBwb2xsIHdoZW4gdGhleSBhcmUgbW92ZWQgb3IgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgcG9pbnRlciBpcyBwb2xsZWQgaXQgcnVucyBhIGhpdCB0ZXN0IHRvIHNlZSB3aGljaCBHYW1lIE9iamVjdHMgYXJlIGN1cnJlbnRseSBiZWxvdyBpdCxcclxuICAgICAqIG9yIGJlaW5nIGludGVyYWN0ZWQgd2l0aCBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXRQb2xsT25Nb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb2xsT25Nb3ZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFBvbGxSYXRlKC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb2xsIHJhdGUgdmFsdWUuIFRoaXMgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgc2hvdWxkIGhhdmUgZWxhcHNlZCBiZWZvcmUgYSBwb2ludGVyXHJcbiAgICAgKiB3aWxsIGJlIHBvbGxlZCBhZ2Fpbi4gU2VlIHRoZSBgc2V0UG9sbEFsd2F5c2AgYW5kIGBzZXRQb2xsT25Nb3ZlYCBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldFBvbGxSYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1zLCB0aGF0IHNob3VsZCBlbGFwc2VkIGJlZm9yZSByZS1wb2xsaW5nIHRoZSBwb2ludGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb2xsUmF0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9sbFJhdGUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9wb2xsVGltZXIgPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgdGhlIGdsb2JhbCBJbnB1dCBNYW5hZ2VyIHdpbGwgZW11bGF0ZSBET00gYmVoYXZpb3IgYnkgb25seSBlbWl0dGluZyBldmVudHMgZnJvbVxyXG4gICAgICogdGhlIHRvcC1tb3N0IFNjZW5lIGluIHRoZSBTY2VuZSBMaXN0LiBCeSBkZWZhdWx0LCBpZiBhIFNjZW5lIHJlY2VpdmVzIGFuIGlucHV0IGV2ZW50IGl0IHdpbGwgdGhlbiBzdG9wIHRoZSBldmVudFxyXG4gICAgICogZnJvbSBmbG93aW5nIGRvd24gdG8gYW55IFNjZW5lcyBiZWxvdyBpdCBpbiB0aGUgU2NlbmUgbGlzdC4gVG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBgZmFsc2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEdsb2JhbFRvcE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBTZXQgdG8gYHRydWVgIHRvIHN0b3AgcHJvY2Vzc2luZyBpbnB1dCBldmVudHMgb24gdGhlIFNjZW5lIHRoYXQgcmVjZWl2ZXMgaXQsIG9yIGBmYWxzZWAgdG8gbGV0IHRoZSBldmVudCBjb250aW51ZSBkb3duIHRoZSBTY2VuZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbFRvcE9ubHk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZ2xvYmFsVG9wT25seSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgdGhpcyBJbnB1dCBQbHVnaW4gd2lsbCBlbXVsYXRlIERPTSBiZWhhdmlvciBieSBvbmx5IGVtaXR0aW5nIGV2ZW50cyBmcm9tXHJcbiAgICAgKiB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3RzIGluIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgc2V0IHRvIGBmYWxzZWAgaXQgd2lsbCBlbWl0IGV2ZW50cyBmcm9tIGFsbCBHYW1lIE9iamVjdHMgYmVsb3cgYSBQb2ludGVyLCBub3QganVzdCB0aGUgdG9wIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXRUb3BPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gYHRydWVgIHRvIG9ubHkgaW5jbHVkZSB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3QsIG9yIGBmYWxzZWAgdG8gaW5jbHVkZSBhbGwgR2FtZSBPYmplY3RzIGluIGEgaGl0IHRlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG9wT25seTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudG9wT25seSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIHNvcnQgdGhlIGFycmF5IGFuZCByZXR1cm4gaXQsIHNvIHRoYXQgdGhlIG9iamVjdHMgYXJlIGluIGRlcHRoIGluZGV4IG9yZGVyXHJcbiAgICAgKiB3aXRoIHRoZSBsb3dlc3QgYXQgdGhlIGJvdHRvbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzb3J0R2FtZU9iamVjdHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gYmUgc29ydGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IFRoZSBzb3J0ZWQgYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBzb3J0R2FtZU9iamVjdHM6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cylcclxuICAgIHtcclxuICAgICAgICBpZiAoZ2FtZU9iamVjdHMubGVuZ3RoIDwgMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lT2JqZWN0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmRlcHRoU29ydCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdHMuc29ydCh0aGlzLnNvcnRIYW5kbGVyR08uYmluZCh0aGlzKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBjaGlsZCBsb3dlc3QgZG93biB0aGUgZGlzcGxheSBsaXN0ICh3aXRoIHRoZSBzbWFsbGVzdCBpbmRleClcclxuICAgICAqIFdpbGwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBwYXJlbnQgY29udGFpbmVycywgaWYgcHJlc2VudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzb3J0SGFuZGxlckdPXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGRBIC0gVGhlIGZpcnN0IEdhbWUgT2JqZWN0IHRvIGNvbXBhcmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZEIgLSBUaGUgc2Vjb25kIEdhbWUgT2JqZWN0IHRvIGNvbXBhcmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gUmV0dXJucyBlaXRoZXIgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBpbnRlZ2VyLCBvciB6ZXJvIGlmIHRoZXkgbWF0Y2guXHJcbiAgICAgKi9cclxuICAgIHNvcnRIYW5kbGVyR086IGZ1bmN0aW9uIChjaGlsZEEsIGNoaWxkQilcclxuICAgIHtcclxuICAgICAgICBpZiAoIWNoaWxkQS5wYXJlbnRDb250YWluZXIgJiYgIWNoaWxkQi5wYXJlbnRDb250YWluZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBuZWl0aGVyIGNoaWxkIGhhcyBhIGNvbnRhaW5lclxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5nZXRJbmRleChjaGlsZEIpIC0gdGhpcy5kaXNwbGF5TGlzdC5nZXRJbmRleChjaGlsZEEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEEucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEIucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFF1aWNrIGJhaWwgb3V0IHdoZW4gYm90aCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGNvbnRhaW5lclxyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRCLnBhcmVudENvbnRhaW5lci5nZXRJbmRleChjaGlsZEIpIC0gY2hpbGRBLnBhcmVudENvbnRhaW5lci5nZXRJbmRleChjaGlsZEEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEEucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBjaGlsZEEgaXMgYSBjaGlsZCBvZiBjaGlsZEJcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEIucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBjaGlsZEEgaXMgYSBjaGlsZCBvZiBjaGlsZEJcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDb250YWluZXIgaW5kZXggY2hlY2tcclxuICAgICAgICAgICAgdmFyIGxpc3RBID0gY2hpbGRBLmdldEluZGV4TGlzdCgpO1xyXG4gICAgICAgICAgICB2YXIgbGlzdEIgPSBjaGlsZEIuZ2V0SW5kZXhMaXN0KCk7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihsaXN0QS5sZW5ndGgsIGxpc3RCLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXhBID0gbGlzdEFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXhCID0gbGlzdEJbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBHbyB0byB0aGUgbmV4dCBsZXZlbCBkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIE5vbi1tYXRjaGluZyBwYXJlbnRzLCBzbyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhCIC0gaW5kZXhBO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGVjaG5pY2FsbHkgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgLi4uXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBpbnB1dCBldmVudCBoYW5kbGVyLCBzdWNoIGFzIGBwb2ludGVyZG93bmAuXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiBjYWxsZWQsIGl0IHN0b3BzIHRoZSBJbnB1dCBNYW5hZ2VyIGZyb20gYWxsb3dpbmcgX3RoaXMgc3BlY2lmaWMgZXZlbnRfIHRvIGJlIHByb2Nlc3NlZCBieSBhbnkgb3RoZXIgU2NlbmVcclxuICAgICAqIG5vdCB5ZXQgaGFuZGxlZCBpbiB0aGUgc2NlbmUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzdG9wUHJvcGFnYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuX3RlbXBTa2lwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBuZXcgUG9pbnRlciBvYmplY3RzIHRvIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgUGhhc2VyIGNyZWF0ZXMgMiBwb2ludGVyIG9iamVjdHM6IGBtb3VzZVBvaW50ZXJgIGFuZCBgcG9pbnRlcjFgLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gY3JlYXRlIG1vcmUgZWl0aGVyIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIGJ5IHNldHRpbmcgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHlcclxuICAgICAqIGluIHRoZSBHYW1lIENvbmZpZywgdXAgdG8gYSBtYXhpbXVtIG9mIDEwIHBvaW50ZXJzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmaXJzdCAxMCBwb2ludGVycyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYElucHV0UGx1Z2luLnBvaW50ZXJYYCBwcm9wZXJ0aWVzLCBvbmNlIHRoZXkgaGF2ZSBiZWVuIGFkZGVkXHJcbiAgICAgKiB2aWEgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jYWRkUG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3F1YW50aXR5PTFdIFRoZSBudW1iZXIgb2YgbmV3IFBvaW50ZXJzIHRvIGNyZWF0ZS4gQSBtYXhpbXVtIG9mIDEwIGlzIGFsbG93ZWQgaW4gdG90YWwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LlBvaW50ZXJbXX0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIG5ldyBQb2ludGVyIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50ZXI6IGZ1bmN0aW9uIChxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmFkZFBvaW50ZXIocXVhbnRpdHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHRoZSBJbnB1dCBzeXN0ZW0gdG8gc2V0IGEgY3VzdG9tIGN1cnNvci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGN1cnNvciB3aWxsIGJlIHRoZSBkZWZhdWx0IGN1cnNvciB1c2VkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYW4gSW50ZXJhY3RpdmUgT2JqZWN0IGFsc28gc2V0cyBhIGN1c3RvbSBjdXJzb3IsIHRoaXMgaXMgdGhlIGN1cnNvciB0aGF0IGlzIHJlc2V0IGFmdGVyIGl0cyB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogQW55IHZhbGlkIENTUyBjdXJzb3IgdmFsdWUgaXMgYWxsb3dlZCwgaW5jbHVkaW5nIHBhdGhzIHRvIGltYWdlIGZpbGVzLCBpLmUuOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQuc2V0RGVmYXVsdEN1cnNvcigndXJsKGFzc2V0cy9jdXJzb3JzL3N3b3JkLmN1ciksIHBvaW50ZXInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFBsZWFzZSByZWFkIGFib3V0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJyb3dzZXJzIHdoZW4gaXQgY29tZXMgdG8gdGhlIGZpbGUgZm9ybWF0cyBhbmQgc2l6ZXMgdGhleSBzdXBwb3J0OlxyXG4gICAgICpcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jdXJzb3JcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfVXNlcl9JbnRlcmZhY2UvVXNpbmdfVVJMX3ZhbHVlc19mb3JfdGhlX2N1cnNvcl9wcm9wZXJ0eVxyXG4gICAgICpcclxuICAgICAqIEl0J3MgdXAgdG8geW91IHRvIHBpY2sgYSBzdWl0YWJsZSBjdXJzb3IgZm9ybWF0IHRoYXQgd29ya3MgYWNyb3NzIHRoZSByYW5nZSBvZiBicm93c2VycyB5b3UgbmVlZCB0byBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldERlZmF1bHRDdXJzb3JcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3Vyc29yIC0gVGhlIENTUyB0byBiZSB1c2VkIHdoZW4gc2V0dGluZyB0aGUgZGVmYXVsdCBjdXJzb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZWZhdWx0Q3Vyc29yOiBmdW5jdGlvbiAoY3Vyc29yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5zZXREZWZhdWx0Q3Vyc29yKGN1cnNvcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgdHJhbnNpdGlvbmluZyBpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN0cmFuc2l0aW9uSW5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgdHJhbnNpdGlvbkluOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MudHJhbnNpdGlvbkFsbG93SW5wdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBoYXMgZmluaXNoZWQgdHJhbnNpdGlvbmluZyBpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN0cmFuc2l0aW9uQ29tcGxldGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgdHJhbnNpdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy50cmFuc2l0aW9uQWxsb3dJbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgdHJhbnNpdGlvbmluZyBvdXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jdHJhbnNpdGlvbk91dFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICB0cmFuc2l0aW9uT3V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MudHJhbnNpdGlvbkFsbG93SW5wdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjU0hVVERPV05cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5TSFVURE9XTik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RlbXAubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdbaV0gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcltpXSA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVFJBTlNJVElPTl9TVEFSVCwgdGhpcy50cmFuc2l0aW9uSW4sIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVFJBTlNJVElPTl9PVVQsIHRoaXMudHJhbnNpdGlvbk91dCwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5UUkFOU0lUSU9OX0NPTVBMRVRFLCB0aGlzLnRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5QUkVfVVBEQVRFLCB0aGlzLnByZVVwZGF0ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub2ZmKEV2ZW50cy5HQU1FX09VVCwgdGhpcy5vbkdhbWVPdXQsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub2ZmKEV2ZW50cy5HQU1FX09WRVIsIHRoaXMub25HYW1lT3ZlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICAvLyAgUmVnaXN0ZXJlZCBpbnB1dCBwbHVnaW5zIGxpc3RlbiBmb3IgdGhpc1xyXG4gICAgICAgIHRoaXMucGx1Z2luRXZlbnRzLmVtaXQoRXZlbnRzLkRFU1RST1kpO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHggY29vcmRpbmF0ZXMgb2YgdGhlIEFjdGl2ZVBvaW50ZXIgYmFzZWQgb24gdGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgeW91ciBnYW1lIGhhcyBqdXN0IDEgbm9uLXRyYW5zZm9ybWVkIGNhbWVyYSBhbmQgZG9lc24ndCB1c2UgbXVsdGktdG91Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlci54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgY29vcmRpbmF0ZXMgb2YgdGhlIEFjdGl2ZVBvaW50ZXIgYmFzZWQgb24gdGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgeW91ciBnYW1lIGhhcyBqdXN0IDEgbm9uLXRyYW5zZm9ybWVkIGNhbWVyYSBhbmQgZG9lc24ndCB1c2UgbXVsdGktdG91Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3lcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlci55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJlIGFueSBtb3VzZSBvciB0b3VjaCBwb2ludGVycyBjdXJyZW50bHkgb3ZlciB0aGUgZ2FtZSBjYW52YXM/XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2lzT3ZlclxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgaXNPdmVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuaXNPdmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1vdXNlIGhhcyBpdHMgb3duIHVuaXF1ZSBQb2ludGVyIG9iamVjdCwgd2hpY2ggeW91IGNhbiByZWZlcmVuY2UgZGlyZWN0bHkgaWYgbWFraW5nIGEgX2Rlc2t0b3Agc3BlY2lmaWMgZ2FtZV8uXHJcbiAgICAgKiBJZiB5b3UgYXJlIHN1cHBvcnRpbmcgYm90aCBkZXNrdG9wIGFuZCB0b3VjaCBkZXZpY2VzIHRoZW4gZG8gbm90IHVzZSB0aGlzIHByb3BlcnR5LCBpbnN0ZWFkIHVzZSBgYWN0aXZlUG9pbnRlcmBcclxuICAgICAqIHdoaWNoIHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgbW9zdCByZWNlbnRseSBpbnRlcmFjdGVkIHBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI21vdXNlUG9pbnRlclxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIG1vdXNlUG9pbnRlcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLm1vdXNlUG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBpbnB1dCBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNhY3RpdmVQb2ludGVyXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBhY3RpdmVQb2ludGVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjFcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyMToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyMlxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXIyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbMl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXIzXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1szXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjRcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyNDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyNVxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXI1OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbNV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXI2XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjY6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1s2XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjdcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyNzoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyOFxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXI4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbOF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXI5XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1s5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjEwXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjEwOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbMTBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdJbnB1dFBsdWdpbicsIElucHV0UGx1Z2luLCAnaW5wdXQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXRQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/InputPluginCache.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/input/InputPluginCache.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n//  Contains the plugins that Phaser uses globally and locally.\r\n//  These are the source objects, not instantiated.\r\nvar inputPlugins = {};\r\n\r\n/**\r\n * @namespace Phaser.Input.InputPluginCache\r\n */\r\n\r\nvar InputPluginCache = {};\r\n\r\n/**\r\n * Static method called directly by the Core internal Plugins.\r\n * Key is a reference used to get the plugin from the plugins object (i.e. InputPlugin)\r\n * Plugin is the object to instantiate to create the plugin\r\n * Mapping is what the plugin is injected into the Scene.Systems as (i.e. input)\r\n *\r\n * @name Phaser.Input.InputPluginCache.register\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - A reference used to get this plugin from the plugin cache.\r\n * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated.\r\n * @param {string} mapping - If this plugin is to be injected into the Input Plugin, this is the property key used.\r\n * @param {string} settingsKey - The key in the Scene Settings to check to see if this plugin should install or not.\r\n * @param {string} configKey - The key in the Game Config to check to see if this plugin should install or not.\r\n */\r\nInputPluginCache.register = function (key, plugin, mapping, settingsKey, configKey)\r\n{\r\n    inputPlugins[key] = { plugin: plugin, mapping: mapping, settingsKey: settingsKey, configKey: configKey };\r\n};\r\n\r\n/**\r\n * Returns the input plugin object from the cache based on the given key.\r\n *\r\n * @name Phaser.Input.InputPluginCache.getCore\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - The key of the input plugin to get.\r\n *\r\n * @return {Phaser.Types.Input.InputPluginContainer} The input plugin object.\r\n */\r\nInputPluginCache.getPlugin = function (key)\r\n{\r\n    return inputPlugins[key];\r\n};\r\n\r\n/**\r\n * Installs all of the registered Input Plugins into the given target.\r\n *\r\n * @name Phaser.Input.InputPluginCache.install\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.InputPlugin} target - The target InputPlugin to install the plugins into.\r\n */\r\nInputPluginCache.install = function (target)\r\n{\r\n    var sys = target.scene.sys;\r\n    var settings = sys.settings.input;\r\n    var config = sys.game.config;\r\n\r\n    for (var key in inputPlugins)\r\n    {\r\n        var source = inputPlugins[key].plugin;\r\n        var mapping = inputPlugins[key].mapping;\r\n        var settingsKey = inputPlugins[key].settingsKey;\r\n        var configKey = inputPlugins[key].configKey;\r\n\r\n        if (GetValue(settings, settingsKey, config[configKey]))\r\n        {\r\n            target[mapping] = new source(target);\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * Removes an input plugin based on the given key.\r\n *\r\n * @name Phaser.Input.InputPluginCache.remove\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - The key of the input plugin to remove.\r\n */\r\nInputPluginCache.remove = function (key)\r\n{\r\n    if (inputPlugins.hasOwnProperty(key))\r\n    {\r\n        delete inputPlugins[key];\r\n    }\r\n};\r\n\r\nmodule.exports = InputPluginCache;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dFBsdWdpbkNhY2hlLmpzP2E0YTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0lucHV0UGx1Z2luQ2FjaGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLy8gIENvbnRhaW5zIHRoZSBwbHVnaW5zIHRoYXQgUGhhc2VyIHVzZXMgZ2xvYmFsbHkgYW5kIGxvY2FsbHkuXHJcbi8vICBUaGVzZSBhcmUgdGhlIHNvdXJjZSBvYmplY3RzLCBub3QgaW5zdGFudGlhdGVkLlxyXG52YXIgaW5wdXRQbHVnaW5zID0ge307XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW5DYWNoZVxyXG4gKi9cclxuXHJcbnZhciBJbnB1dFBsdWdpbkNhY2hlID0ge307XHJcblxyXG4vKipcclxuICogU3RhdGljIG1ldGhvZCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIENvcmUgaW50ZXJuYWwgUGx1Z2lucy5cclxuICogS2V5IGlzIGEgcmVmZXJlbmNlIHVzZWQgdG8gZ2V0IHRoZSBwbHVnaW4gZnJvbSB0aGUgcGx1Z2lucyBvYmplY3QgKGkuZS4gSW5wdXRQbHVnaW4pXHJcbiAqIFBsdWdpbiBpcyB0aGUgb2JqZWN0IHRvIGluc3RhbnRpYXRlIHRvIGNyZWF0ZSB0aGUgcGx1Z2luXHJcbiAqIE1hcHBpbmcgaXMgd2hhdCB0aGUgcGx1Z2luIGlzIGluamVjdGVkIGludG8gdGhlIFNjZW5lLlN5c3RlbXMgYXMgKGkuZS4gaW5wdXQpXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbkNhY2hlLnJlZ2lzdGVyXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gQSByZWZlcmVuY2UgdXNlZCB0byBnZXQgdGhpcyBwbHVnaW4gZnJvbSB0aGUgcGx1Z2luIGNhY2hlLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGJlIHN0b3JlZC4gU2hvdWxkIGJlIHRoZSBjb3JlIG9iamVjdCwgbm90IGluc3RhbnRpYXRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IG1hcHBpbmcgLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBJbnB1dCBQbHVnaW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IGtleSB1c2VkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2V0dGluZ3NLZXkgLSBUaGUga2V5IGluIHRoZSBTY2VuZSBTZXR0aW5ncyB0byBjaGVjayB0byBzZWUgaWYgdGhpcyBwbHVnaW4gc2hvdWxkIGluc3RhbGwgb3Igbm90LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnS2V5IC0gVGhlIGtleSBpbiB0aGUgR2FtZSBDb25maWcgdG8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgcGx1Z2luIHNob3VsZCBpbnN0YWxsIG9yIG5vdC5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoa2V5LCBwbHVnaW4sIG1hcHBpbmcsIHNldHRpbmdzS2V5LCBjb25maWdLZXkpXHJcbntcclxuICAgIGlucHV0UGx1Z2luc1trZXldID0geyBwbHVnaW46IHBsdWdpbiwgbWFwcGluZzogbWFwcGluZywgc2V0dGluZ3NLZXk6IHNldHRpbmdzS2V5LCBjb25maWdLZXk6IGNvbmZpZ0tleSB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGlucHV0IHBsdWdpbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luQ2FjaGUuZ2V0Q29yZVxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBzdGF0aWNcclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGlucHV0IHBsdWdpbiB0byBnZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnB1dFBsdWdpbkNvbnRhaW5lcn0gVGhlIGlucHV0IHBsdWdpbiBvYmplY3QuXHJcbiAqL1xyXG5JbnB1dFBsdWdpbkNhY2hlLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChrZXkpXHJcbntcclxuICAgIHJldHVybiBpbnB1dFBsdWdpbnNba2V5XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnN0YWxscyBhbGwgb2YgdGhlIHJlZ2lzdGVyZWQgSW5wdXQgUGx1Z2lucyBpbnRvIHRoZSBnaXZlbiB0YXJnZXQuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbkNhY2hlLmluc3RhbGxcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSB0YXJnZXQgLSBUaGUgdGFyZ2V0IElucHV0UGx1Z2luIHRvIGluc3RhbGwgdGhlIHBsdWdpbnMgaW50by5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUuaW5zdGFsbCA9IGZ1bmN0aW9uICh0YXJnZXQpXHJcbntcclxuICAgIHZhciBzeXMgPSB0YXJnZXQuc2NlbmUuc3lzO1xyXG4gICAgdmFyIHNldHRpbmdzID0gc3lzLnNldHRpbmdzLmlucHV0O1xyXG4gICAgdmFyIGNvbmZpZyA9IHN5cy5nYW1lLmNvbmZpZztcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5wdXRQbHVnaW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBpbnB1dFBsdWdpbnNba2V5XS5wbHVnaW47XHJcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBpbnB1dFBsdWdpbnNba2V5XS5tYXBwaW5nO1xyXG4gICAgICAgIHZhciBzZXR0aW5nc0tleSA9IGlucHV0UGx1Z2luc1trZXldLnNldHRpbmdzS2V5O1xyXG4gICAgICAgIHZhciBjb25maWdLZXkgPSBpbnB1dFBsdWdpbnNba2V5XS5jb25maWdLZXk7XHJcblxyXG4gICAgICAgIGlmIChHZXRWYWx1ZShzZXR0aW5ncywgc2V0dGluZ3NLZXksIGNvbmZpZ1tjb25maWdLZXldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhcmdldFttYXBwaW5nXSA9IG5ldyBzb3VyY2UodGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBpbnB1dCBwbHVnaW4gYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luQ2FjaGUucmVtb3ZlXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgaW5wdXQgcGx1Z2luIHRvIHJlbW92ZS5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgaWYgKGlucHV0UGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGRlbGV0ZSBpbnB1dFBsdWdpbnNba2V5XTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXRQbHVnaW5DYWNoZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputPluginCache.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/Pointer.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/input/Pointer.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Angle = __webpack_require__(/*! ../math/angle/Between */ \"./node_modules/phaser/src/math/angle/Between.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Distance = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar FuzzyEqual = __webpack_require__(/*! ../math/fuzzy/Equal */ \"./node_modules/phaser/src/math/fuzzy/Equal.js\");\r\nvar SmoothStepInterpolation = __webpack_require__(/*! ../math/interpolation/SmoothStepInterpolation */ \"./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Pointer object encapsulates both mouse and touch input within Phaser.\r\n *\r\n * By default, Phaser will create 2 pointers for your game to use. If you require more, i.e. for a multi-touch\r\n * game, then use the `InputPlugin.addPointer` method to do so, rather than instantiating this class directly,\r\n * otherwise it won't be managed by the input system.\r\n *\r\n * You can reference the current active pointer via `InputPlugin.activePointer`. You can also use the properties\r\n * `InputPlugin.pointer1` through to `pointer10`, for each pointer you have enabled in your game.\r\n *\r\n * The properties of this object are set by the Input Plugin during processing. This object is then sent in all\r\n * input related events that the Input Plugin emits, so you can reference properties from it directly in your\r\n * callbacks.\r\n *\r\n * @class Pointer\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} manager - A reference to the Input Manager.\r\n * @param {integer} id - The internal ID of this Pointer.\r\n */\r\nvar Pointer = new Class({\r\n\r\n    initialize:\r\n\r\n    function Pointer (manager, id)\r\n    {\r\n        /**\r\n         * A reference to the Input Manager.\r\n         *\r\n         * @name Phaser.Input.Pointer#manager\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * The internal ID of this Pointer.\r\n         *\r\n         * @name Phaser.Input.Pointer#id\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.id = id;\r\n\r\n        /**\r\n         * The most recent native DOM Event this Pointer has processed.\r\n         *\r\n         * @name Phaser.Input.Pointer#event\r\n         * @type {(TouchEvent|MouseEvent)}\r\n         * @since 3.0.0\r\n         */\r\n        this.event;\r\n\r\n        /**\r\n         * The DOM element the Pointer was pressed down on, taken from the DOM event.\r\n         * In a default set-up this will be the Canvas that Phaser is rendering to, or the Window element.\r\n         *\r\n         * @name Phaser.Input.Pointer#downElement\r\n         * @type {any}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.downElement;\r\n\r\n        /**\r\n         * The DOM element the Pointer was released on, taken from the DOM event.\r\n         * In a default set-up this will be the Canvas that Phaser is rendering to, or the Window element.\r\n         *\r\n         * @name Phaser.Input.Pointer#upElement\r\n         * @type {any}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.upElement;\r\n\r\n        /**\r\n         * The camera the Pointer interacted with during its last update.\r\n         * \r\n         * A Pointer can only ever interact with one camera at once, which will be the top-most camera\r\n         * in the list should multiple cameras be positioned on-top of each other.\r\n         *\r\n         * @name Phaser.Input.Pointer#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.camera = null;\r\n\r\n        /**\r\n         * A read-only property that indicates which button was pressed, or released, on the pointer\r\n         * during the most recent event. It is only set during `up` and `down` events.\r\n         * \r\n         * On Touch devices the value is always 0.\r\n         * \r\n         * Users may change the configuration of buttons on their pointing device so that if an event's button property\r\n         * is zero, it may not have been caused by the button that is physically left–most on the pointing device;\r\n         * however, it should behave as if the left button was clicked in the standard button layout.\r\n         *\r\n         * @name Phaser.Input.Pointer#button\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default 0\r\n         * @since 3.18.0\r\n         */\r\n        this.button = 0;\r\n\r\n        /**\r\n         * 0: No button or un-initialized\r\n         * 1: Left button\r\n         * 2: Right button\r\n         * 4: Wheel button or middle button\r\n         * 8: 4th button (typically the \"Browser Back\" button)\r\n         * 16: 5th button (typically the \"Browser Forward\" button)\r\n         * \r\n         * For a mouse configured for left-handed use, the button actions are reversed.\r\n         * In this case, the values are read from right to left.\r\n         *\r\n         * @name Phaser.Input.Pointer#buttons\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.buttons = 0;\r\n\r\n        /**\r\n         * The position of the Pointer in screen space.\r\n         *\r\n         * @name Phaser.Input.Pointer#position\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector2();\r\n\r\n        /**\r\n         * The previous position of the Pointer in screen space.\r\n         * \r\n         * The old x and y values are stored in here during the InputManager.transformPointer call.\r\n         * \r\n         * Use the properties `velocity`, `angle` and `distance` to create your own gesture recognition.\r\n         *\r\n         * @name Phaser.Input.Pointer#prevPosition\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.prevPosition = new Vector2();\r\n\r\n        /**\r\n         * An internal vector used for calculations of the pointer speed and angle.\r\n         *\r\n         * @name Phaser.Input.Pointer#midPoint\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this.midPoint = new Vector2(-1, -1);\r\n\r\n        /**\r\n         * The current velocity of the Pointer, based on its current and previous positions.\r\n         * \r\n         * This value is smoothed out each frame, according to the `motionFactor` property.\r\n         * \r\n         * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n         * it changes based on movement alone - a button doesn't have to be pressed first.\r\n         *\r\n         * @name Phaser.Input.Pointer#velocity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.velocity = new Vector2();\r\n\r\n        /**\r\n         * The current angle the Pointer is moving, in radians, based on its previous and current position.\r\n         * \r\n         * The angle is based on the old position facing to the current position.\r\n         * \r\n         * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n         * it changes based on movement alone - a button doesn't have to be pressed first.\r\n         *\r\n         * @name Phaser.Input.Pointer#angle\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.angle = 0;\r\n\r\n        /**\r\n         * The distance the Pointer has moved, based on its previous and current position.\r\n         * \r\n         * This value is smoothed out each frame, according to the `motionFactor` property.\r\n         * \r\n         * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n         * it changes based on movement alone - a button doesn't have to be pressed first.\r\n         * \r\n         * If you need the total distance travelled since the primary buttons was pressed down,\r\n         * then use the `Pointer.getDistance` method.\r\n         *\r\n         * @name Phaser.Input.Pointer#distance\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.distance = 0;\r\n\r\n        /**\r\n         * The smoothing factor to apply to the Pointer position.\r\n         * \r\n         * Due to their nature, pointer positions are inherently noisy. While this is fine for lots of games, if you need cleaner positions\r\n         * then you can set this value to apply an automatic smoothing to the positions as they are recorded.\r\n         * \r\n         * The default value of zero means 'no smoothing'.\r\n         * Set to a small value, such as 0.2, to apply an average level of smoothing between positions. You can do this by changing this\r\n         * value directly, or by setting the `input.smoothFactor` property in the Game Config.\r\n         * \r\n         * Positions are only smoothed when the pointer moves. If the primary button on this Pointer enters an Up or Down state, then the position\r\n         * is always precise, and not smoothed.\r\n         *\r\n         * @name Phaser.Input.Pointer#smoothFactor\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.16.0\r\n         */\r\n        this.smoothFactor = 0;\r\n\r\n        /**\r\n         * The factor applied to the motion smoothing each frame.\r\n         * \r\n         * This value is passed to the Smooth Step Interpolation that is used to calculate the velocity,\r\n         * angle and distance of the Pointer. It's applied every frame, until the midPoint reaches the current\r\n         * position of the Pointer. 0.2 provides a good average but can be increased if you need a\r\n         * quicker update and are working in a high performance environment. Never set this value to\r\n         * zero.\r\n         *\r\n         * @name Phaser.Input.Pointer#motionFactor\r\n         * @type {number}\r\n         * @default 0.2\r\n         * @since 3.16.0\r\n         */\r\n        this.motionFactor = 0.2;\r\n\r\n        /**\r\n         * The x position of this Pointer, translated into the coordinate space of the most recent Camera it interacted with.\r\n         * \r\n         * If you wish to use this value _outside_ of an input event handler then you should update it first by calling\r\n         * the `Pointer.updateWorldPoint` method.\r\n         *\r\n         * @name Phaser.Input.Pointer#worldX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.10.0\r\n         */\r\n        this.worldX = 0;\r\n\r\n        /**\r\n         * The y position of this Pointer, translated into the coordinate space of the most recent Camera it interacted with.\r\n         * \r\n         * If you wish to use this value _outside_ of an input event handler then you should update it first by calling\r\n         * the `Pointer.updateWorldPoint` method.\r\n         *\r\n         * @name Phaser.Input.Pointer#worldY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.10.0\r\n         */\r\n        this.worldY = 0;\r\n\r\n        /**\r\n         * Time when this Pointer was most recently moved (regardless of the state of its buttons, if any)\r\n         *\r\n         * @name Phaser.Input.Pointer#moveTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.moveTime = 0;\r\n\r\n        /**\r\n         * X coordinate of the Pointer when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#downX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.downX = 0;\r\n\r\n        /**\r\n         * Y coordinate of the Pointer when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#downY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.downY = 0;\r\n\r\n        /**\r\n         * Time when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#downTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.downTime = 0;\r\n\r\n        /**\r\n         * X coordinate of the Pointer when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#upX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.upX = 0;\r\n\r\n        /**\r\n         * Y coordinate of the Pointer when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#upY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.upY = 0;\r\n\r\n        /**\r\n         * Time when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n         *\r\n         * @name Phaser.Input.Pointer#upTime\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.upTime = 0;\r\n\r\n        /**\r\n         * Is the primary button down? (usually button 0, the left mouse button)\r\n         *\r\n         * @name Phaser.Input.Pointer#primaryDown\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.primaryDown = false;\r\n\r\n        /**\r\n         * Is _any_ button on this pointer considered as being down?\r\n         *\r\n         * @name Phaser.Input.Pointer#isDown\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isDown = false;\r\n\r\n        /**\r\n         * Did the previous input event come from a Touch input (true) or Mouse? (false)\r\n         *\r\n         * @name Phaser.Input.Pointer#wasTouch\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.wasTouch = false;\r\n\r\n        /**\r\n         * Did this Pointer get canceled by a touchcancel event?\r\n         * \r\n         * Note: \"canceled\" is the American-English spelling of \"cancelled\". Please don't submit PRs correcting it!\r\n         *\r\n         * @name Phaser.Input.Pointer#wasCanceled\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.15.0\r\n         */\r\n        this.wasCanceled = false;\r\n\r\n        /**\r\n         * If the mouse is locked, the horizontal relative movement of the Pointer in pixels since last frame.\r\n         *\r\n         * @name Phaser.Input.Pointer#movementX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.movementX = 0;\r\n\r\n        /**\r\n         * If the mouse is locked, the vertical relative movement of the Pointer in pixels since last frame.\r\n         *\r\n         * @name Phaser.Input.Pointer#movementY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.movementY = 0;\r\n\r\n        /**\r\n         * The identifier property of the Pointer as set by the DOM event when this Pointer is started.\r\n         *\r\n         * @name Phaser.Input.Pointer#identifier\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this.identifier = 0;\r\n\r\n        /**\r\n         * The pointerId property of the Pointer as set by the DOM event when this Pointer is started.\r\n         * The browser can and will recycle this value.\r\n         *\r\n         * @name Phaser.Input.Pointer#pointerId\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this.pointerId = null;\r\n\r\n        /**\r\n         * An active Pointer is one that is currently pressed down on the display.\r\n         * A Mouse is always considered as active.\r\n         *\r\n         * @name Phaser.Input.Pointer#active\r\n         * @type {boolean}\r\n         * @since 3.10.0\r\n         */\r\n        this.active = (id === 0) ? true : false;\r\n\r\n        /**\r\n         * Is this pointer Pointer Locked?\r\n         * \r\n         * Only a mouse pointer can be locked and it only becomes locked when requested via\r\n         * the browsers Pointer Lock API.\r\n         * \r\n         * You can request this by calling the `this.input.mouse.requestPointerLock()` method from\r\n         * a `pointerdown` or `pointerup` event handler.\r\n         *\r\n         * @name Phaser.Input.Pointer#locked\r\n         * @readonly\r\n         * @type {boolean}\r\n         * @since 3.19.0\r\n         */\r\n        this.locked = false;\r\n\r\n        /**\r\n         * The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n         *\r\n         * @name Phaser.Input.Pointer#deltaX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.18.0\r\n         */\r\n        this.deltaX = 0;\r\n\r\n        /**\r\n         * The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n         * This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n         *\r\n         * @name Phaser.Input.Pointer#deltaY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.18.0\r\n         */\r\n        this.deltaY = 0;\r\n\r\n        /**\r\n         * The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n         *\r\n         * @name Phaser.Input.Pointer#deltaZ\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.18.0\r\n         */\r\n        this.deltaZ = 0;\r\n    },\r\n\r\n    /**\r\n     * Takes a Camera and updates this Pointer's `worldX` and `worldY` values so they are\r\n     * the result of a translation through the given Camera.\r\n     * \r\n     * Note that the values will be automatically replaced the moment the Pointer is\r\n     * updated by an input event, such as a mouse move, so should be used immediately.\r\n     *\r\n     * @method Phaser.Input.Pointer#updateWorldPoint\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n     *\r\n     * @return {this} This Pointer object.\r\n     */\r\n    updateWorldPoint: function (camera)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n\r\n        if (camera.resolution !== 1)\r\n        {\r\n            x += camera._x;\r\n            y += camera._y;\r\n        }\r\n\r\n        //  Stores the world point inside of tempPoint\r\n        var temp = camera.getWorldPoint(x, y);\r\n\r\n        this.worldX = temp.x;\r\n        this.worldY = temp.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a Camera and returns a Vector2 containing the translated position of this Pointer\r\n     * within that Camera. This can be used to convert this Pointers position into camera space.\r\n     *\r\n     * @method Phaser.Input.Pointer#positionToCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to use for the translation.\r\n     * @param {(Phaser.Math.Vector2|object)} [output] - A Vector2-like object in which to store the translated position.\r\n     *\r\n     * @return {(Phaser.Math.Vector2|object)} A Vector2 containing the translated coordinates of this Pointer, based on the given camera.\r\n     */\r\n    positionToCamera: function (camera, output)\r\n    {\r\n        return camera.getWorldPoint(this.x, this.y, output);\r\n    },\r\n\r\n    /**\r\n     * Calculates the motion of this Pointer, including its velocity and angle of movement.\r\n     * This method is called automatically each frame by the Input Manager.\r\n     *\r\n     * @method Phaser.Input.Pointer#updateMotion\r\n     * @private\r\n     * @since 3.16.0\r\n     */\r\n    updateMotion: function ()\r\n    {\r\n        var cx = this.position.x;\r\n        var cy = this.position.y;\r\n\r\n        var mx = this.midPoint.x;\r\n        var my = this.midPoint.y;\r\n\r\n        if (cx === mx && cy === my)\r\n        {\r\n            //  Nothing to do here\r\n            return;\r\n        }\r\n\r\n        //  Moving towards our goal ...\r\n        var vx = SmoothStepInterpolation(this.motionFactor, mx, cx);\r\n        var vy = SmoothStepInterpolation(this.motionFactor, my, cy);\r\n\r\n        if (FuzzyEqual(vx, cx, 0.1))\r\n        {\r\n            vx = cx;\r\n        }\r\n\r\n        if (FuzzyEqual(vy, cy, 0.1))\r\n        {\r\n            vy = cy;\r\n        }\r\n\r\n        this.midPoint.set(vx, vy);\r\n\r\n        var dx = cx - vx;\r\n        var dy = cy - vy;\r\n\r\n        this.velocity.set(dx, dy);\r\n\r\n        this.angle = Angle(vx, vy, cx, cy);\r\n\r\n        this.distance = Math.sqrt(dx * dx + dy * dy);\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Mouse Up Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#up\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MouseEvent} event - The Mouse Event to process.\r\n     */\r\n    up: function (event)\r\n    {\r\n        if ('buttons' in event)\r\n        {\r\n            this.buttons = event.buttons;\r\n        }\r\n\r\n        this.event = event;\r\n\r\n        this.button = event.button;\r\n\r\n        this.upElement = event.target;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n        //  0: Main button pressed, usually the left button or the un-initialized state\r\n        if (event.button === 0)\r\n        {\r\n            this.primaryDown = false;\r\n            this.upX = this.x;\r\n            this.upY = this.y;\r\n            this.upTime = event.timeStamp;\r\n        }\r\n\r\n        this.isDown = false;\r\n\r\n        this.wasTouch = false;\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Mouse Down Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#down\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MouseEvent} event - The Mouse Event to process.\r\n     */\r\n    down: function (event)\r\n    {\r\n        if ('buttons' in event)\r\n        {\r\n            this.buttons = event.buttons;\r\n        }\r\n\r\n        this.event = event;\r\n\r\n        this.button = event.button;\r\n\r\n        this.downElement = event.target;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n        //  0: Main button pressed, usually the left button or the un-initialized state\r\n        if (event.button === 0)\r\n        {\r\n            this.primaryDown = true;\r\n            this.downX = this.x;\r\n            this.downY = this.y;\r\n            this.downTime = event.timeStamp;\r\n        }\r\n\r\n        this.isDown = true;\r\n\r\n        this.wasTouch = false;\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Mouse Move Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#move\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MouseEvent} event - The Mouse Event to process.\r\n     */\r\n    move: function (event)\r\n    {\r\n        if ('buttons' in event)\r\n        {\r\n            this.buttons = event.buttons;\r\n        }\r\n\r\n        this.event = event;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, event.pageX, event.pageY, true);\r\n\r\n        if (this.locked)\r\n        {\r\n            //  Multiple DOM events may occur within one frame, but only one Phaser event will fire\r\n            this.movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;\r\n            this.movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;\r\n        }\r\n\r\n        this.moveTime = event.timeStamp;\r\n\r\n        this.wasTouch = false;\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Mouse Wheel Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#wheel\r\n     * @private\r\n     * @since 3.18.0\r\n     *\r\n     * @param {WheelEvent} event - The Wheel Event to process.\r\n     */\r\n    wheel: function (event)\r\n    {\r\n        if ('buttons' in event)\r\n        {\r\n            this.buttons = event.buttons;\r\n        }\r\n\r\n        this.event = event;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n        this.deltaX = event.deltaX;\r\n        this.deltaY = event.deltaY;\r\n        this.deltaZ = event.deltaZ;\r\n\r\n        this.wasTouch = false;\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Touch Start Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#touchstart\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n     * @param {TouchEvent} event - The full Touch Event.\r\n     */\r\n    touchstart: function (touch, event)\r\n    {\r\n        if (touch['pointerId'])\r\n        {\r\n            this.pointerId = touch.pointerId;\r\n        }\r\n\r\n        this.identifier = touch.identifier;\r\n        this.target = touch.target;\r\n        this.active = true;\r\n\r\n        this.buttons = 1;\r\n\r\n        this.event = event;\r\n\r\n        this.downElement = touch.target;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n        this.primaryDown = true;\r\n        this.downX = this.x;\r\n        this.downY = this.y;\r\n        this.downTime = event.timeStamp;\r\n\r\n        this.isDown = true;\r\n\r\n        this.wasTouch = true;\r\n        this.wasCanceled = false;\r\n\r\n        this.updateMotion();\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Touch Move Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#touchmove\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n     * @param {TouchEvent} event - The full Touch Event.\r\n     */\r\n    touchmove: function (touch, event)\r\n    {\r\n        this.event = event;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, touch.pageX, touch.pageY, true);\r\n\r\n        this.moveTime = event.timeStamp;\r\n\r\n        this.wasTouch = true;\r\n\r\n        this.updateMotion();\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Touch End Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#touchend\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n     * @param {TouchEvent} event - The full Touch Event.\r\n     */\r\n    touchend: function (touch, event)\r\n    {\r\n        this.buttons = 0;\r\n\r\n        this.event = event;\r\n\r\n        this.upElement = touch.target;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n        this.primaryDown = false;\r\n        this.upX = this.x;\r\n        this.upY = this.y;\r\n        this.upTime = event.timeStamp;\r\n\r\n        this.isDown = false;\r\n\r\n        this.wasTouch = true;\r\n        this.wasCanceled = false;\r\n        \r\n        this.active = false;\r\n\r\n        this.updateMotion();\r\n    },\r\n\r\n    /**\r\n     * Internal method to handle a Touch Cancel Event.\r\n     *\r\n     * @method Phaser.Input.Pointer#touchcancel\r\n     * @private\r\n     * @since 3.15.0\r\n     *\r\n     * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n     * @param {TouchEvent} event - The full Touch Event.\r\n     */\r\n    touchcancel: function (touch, event)\r\n    {\r\n        this.buttons = 0;\r\n\r\n        this.event = event;\r\n\r\n        this.upElement = touch.target;\r\n\r\n        //  Sets the local x/y properties\r\n        this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n        this.primaryDown = false;\r\n        this.upX = this.x;\r\n        this.upY = this.y;\r\n        this.upTime = event.timeStamp;\r\n\r\n        this.isDown = false;\r\n\r\n        this.wasTouch = true;\r\n        this.wasCanceled = true;\r\n        \r\n        this.active = false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if any buttons are being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#noButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if no buttons are being held down.\r\n     */\r\n    noButtonDown: function ()\r\n    {\r\n        return (this.buttons === 0);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the left button is being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#leftButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the left button is being held down.\r\n     */\r\n    leftButtonDown: function ()\r\n    {\r\n        return (this.buttons & 1) ? true : false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the right button is being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#rightButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the right button is being held down.\r\n     */\r\n    rightButtonDown: function ()\r\n    {\r\n        return (this.buttons & 2) ? true : false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the middle button is being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#middleButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the middle button is being held down.\r\n     */\r\n    middleButtonDown: function ()\r\n    {\r\n        return (this.buttons & 4) ? true : false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the back button is being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#backButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the back button is being held down.\r\n     */\r\n    backButtonDown: function ()\r\n    {\r\n        return (this.buttons & 8) ? true : false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the forward button is being held down on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#forwardButtonDown\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the forward button is being held down.\r\n     */\r\n    forwardButtonDown: function ()\r\n    {\r\n        return (this.buttons & 16) ? true : false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the left button was just released on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#leftButtonReleased\r\n     * @since 3.18.0\r\n     *\r\n     * @return {boolean} `true` if the left button was just released.\r\n     */\r\n    leftButtonReleased: function ()\r\n    {\r\n        return (this.button === 0 && !this.isDown);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the right button was just released on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#rightButtonReleased\r\n     * @since 3.18.0\r\n     *\r\n     * @return {boolean} `true` if the right button was just released.\r\n     */\r\n    rightButtonReleased: function ()\r\n    {\r\n        return (this.button === 2 && !this.isDown);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the middle button was just released on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#middleButtonReleased\r\n     * @since 3.18.0\r\n     *\r\n     * @return {boolean} `true` if the middle button was just released.\r\n     */\r\n    middleButtonReleased: function ()\r\n    {\r\n        return (this.button === 1 && !this.isDown);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the back button was just released on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#backButtonReleased\r\n     * @since 3.18.0\r\n     *\r\n     * @return {boolean} `true` if the back button was just released.\r\n     */\r\n    backButtonReleased: function ()\r\n    {\r\n        return (this.button === 3 && !this.isDown);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if the forward button was just released on this Pointer.\r\n     *\r\n     * @method Phaser.Input.Pointer#forwardButtonReleased\r\n     * @since 3.18.0\r\n     *\r\n     * @return {boolean} `true` if the forward button was just released.\r\n     */\r\n    forwardButtonReleased: function ()\r\n    {\r\n        return (this.button === 4 && !this.isDown);\r\n    },\r\n\r\n    /**\r\n     * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n     * distance between the Pointer's `downX` and `downY` values and the current position.\r\n     * \r\n     * If no button is held down, it will return the last recorded distance, based on where\r\n     * the Pointer was when the button was released.\r\n     * \r\n     * If you wish to get the distance being travelled currently, based on the velocity of the Pointer,\r\n     * then see the `Pointer.distance` property.\r\n     *\r\n     * @method Phaser.Input.Pointer#getDistance\r\n     * @since 3.13.0\r\n     *\r\n     * @return {number} The distance the Pointer moved.\r\n     */\r\n    getDistance: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return Distance(this.downX, this.downY, this.x, this.y);\r\n        }\r\n        else\r\n        {\r\n            return Distance(this.downX, this.downY, this.upX, this.upY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n     * horizontal distance between the Pointer's `downX` and `downY` values and the current position.\r\n     * \r\n     * If no button is held down, it will return the last recorded horizontal distance, based on where\r\n     * the Pointer was when the button was released.\r\n     *\r\n     * @method Phaser.Input.Pointer#getDistanceX\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The horizontal distance the Pointer moved.\r\n     */\r\n    getDistanceX: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return Math.abs(this.downX - this.x);\r\n        }\r\n        else\r\n        {\r\n            return Math.abs(this.downX - this.upX);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n     * vertical distance between the Pointer's `downX` and `downY` values and the current position.\r\n     * \r\n     * If no button is held down, it will return the last recorded vertical distance, based on where\r\n     * the Pointer was when the button was released.\r\n     *\r\n     * @method Phaser.Input.Pointer#getDistanceY\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The vertical distance the Pointer moved.\r\n     */\r\n    getDistanceY: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return Math.abs(this.downY - this.y);\r\n        }\r\n        else\r\n        {\r\n            return Math.abs(this.downY - this.upY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n     * duration since the button was pressed down.\r\n     * \r\n     * If no button is held down, it will return the last recorded duration, based on the time\r\n     * the Pointer button was released.\r\n     *\r\n     * @method Phaser.Input.Pointer#getDuration\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The duration the Pointer was held down for in milliseconds.\r\n     */\r\n    getDuration: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return (this.manager.time - this.downTime);\r\n        }\r\n        else\r\n        {\r\n            return (this.upTime - this.downTime);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n     * angle between the Pointer's `downX` and `downY` values and the current position.\r\n     * \r\n     * If no button is held down, it will return the last recorded angle, based on where\r\n     * the Pointer was when the button was released.\r\n     * \r\n     * The angle is based on the old position facing to the current position.\r\n     * \r\n     * If you wish to get the current angle, based on the velocity of the Pointer, then\r\n     * see the `Pointer.angle` property.\r\n     *\r\n     * @method Phaser.Input.Pointer#getAngle\r\n     * @since 3.16.0\r\n     *\r\n     * @return {number} The angle between the Pointer's coordinates in radians.\r\n     */\r\n    getAngle: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return Angle(this.downX, this.downY, this.x, this.y);\r\n        }\r\n        else\r\n        {\r\n            return Angle(this.downX, this.downY, this.upX, this.upY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes the previous and current Pointer positions and then generates an array of interpolated values between\r\n     * the two. The array will be populated up to the size of the `steps` argument.\r\n     * \r\n     * ```javaScript\r\n     * var points = pointer.getInterpolatedPosition(4);\r\n     * \r\n     * // points[0] = { x: 0, y: 0 }\r\n     * // points[1] = { x: 2, y: 1 }\r\n     * // points[2] = { x: 3, y: 2 }\r\n     * // points[3] = { x: 6, y: 3 }\r\n     * ```\r\n     * \r\n     * Use this if you need to get smoothed values between the previous and current pointer positions. DOM pointer\r\n     * events can often fire faster than the main browser loop, and this will help you avoid janky movement\r\n     * especially if you have an object following a Pointer.\r\n     * \r\n     * Note that if you provide an output array it will only be populated up to the number of steps provided.\r\n     * It will not clear any previous data that may have existed beyond the range of the steps count.\r\n     * \r\n     * Internally it uses the Smooth Step interpolation calculation.\r\n     *\r\n     * @method Phaser.Input.Pointer#getInterpolatedPosition\r\n     * @since 3.11.0\r\n     * \r\n     * @param {integer} [steps=10] - The number of interpolation steps to use.\r\n     * @param {array} [out] - An array to store the results in. If not provided a new one will be created.\r\n     * \r\n     * @return {array} An array of interpolated values.\r\n     */\r\n    getInterpolatedPosition: function (steps, out)\r\n    {\r\n        if (steps === undefined) { steps = 10; }\r\n        if (out === undefined) { out = []; }\r\n\r\n        var prevX = this.prevPosition.x;\r\n        var prevY = this.prevPosition.y;\r\n\r\n        var curX = this.position.x;\r\n        var curY = this.position.y;\r\n\r\n        for (var i = 0; i < steps; i++)\r\n        {\r\n            var t = (1 / steps) * i;\r\n\r\n            out[i] = { x: SmoothStepInterpolation(t, prevX, curX), y: SmoothStepInterpolation(t, prevY, curY) };\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Pointer instance and resets its external references.\r\n     *\r\n     * @method Phaser.Input.Pointer#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.camera = null;\r\n        this.manager = null;\r\n        this.position = null;\r\n    },\r\n\r\n    /**\r\n     * The x position of this Pointer.\r\n     * The value is in screen space.\r\n     * See `worldX` to get a camera converted position.\r\n     *\r\n     * @name Phaser.Input.Pointer#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.x = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y position of this Pointer.\r\n     * The value is in screen space.\r\n     * See `worldY` to get a camera converted position.\r\n     *\r\n     * @name Phaser.Input.Pointer#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.y = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Time when this Pointer was most recently updated by a DOM Event.\r\n     * This comes directly from the `event.timeStamp` property.\r\n     * If no event has yet taken place, it will return zero.\r\n     *\r\n     * @name Phaser.Input.Pointer#time\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    time: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.event) ? this.event.timeStamp : 0;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Pointer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9Qb2ludGVyLmpzPzYyZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4RUFBdUI7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxlQUFlLG1CQUFPLENBQUMsb0dBQWtDO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLDBFQUFxQjtBQUM5Qyw4QkFBOEIsbUJBQU8sQ0FBQyw4SEFBK0M7QUFDckYsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsWUFBWTtBQUM5QyxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L1BvaW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBbmdsZSA9IHJlcXVpcmUoJy4uL21hdGgvYW5nbGUvQmV0d2VlbicpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGlzdGFuY2UgPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG52YXIgRnV6enlFcXVhbCA9IHJlcXVpcmUoJy4uL21hdGgvZnV6enkvRXF1YWwnKTtcclxudmFyIFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uID0gcmVxdWlyZSgnLi4vbWF0aC9pbnRlcnBvbGF0aW9uL1Ntb290aFN0ZXBJbnRlcnBvbGF0aW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBvaW50ZXIgb2JqZWN0IGVuY2Fwc3VsYXRlcyBib3RoIG1vdXNlIGFuZCB0b3VjaCBpbnB1dCB3aXRoaW4gUGhhc2VyLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCBQaGFzZXIgd2lsbCBjcmVhdGUgMiBwb2ludGVycyBmb3IgeW91ciBnYW1lIHRvIHVzZS4gSWYgeW91IHJlcXVpcmUgbW9yZSwgaS5lLiBmb3IgYSBtdWx0aS10b3VjaFxyXG4gKiBnYW1lLCB0aGVuIHVzZSB0aGUgYElucHV0UGx1Z2luLmFkZFBvaW50ZXJgIG1ldGhvZCB0byBkbyBzbywgcmF0aGVyIHRoYW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzIGRpcmVjdGx5LFxyXG4gKiBvdGhlcndpc2UgaXQgd29uJ3QgYmUgbWFuYWdlZCBieSB0aGUgaW5wdXQgc3lzdGVtLlxyXG4gKlxyXG4gKiBZb3UgY2FuIHJlZmVyZW5jZSB0aGUgY3VycmVudCBhY3RpdmUgcG9pbnRlciB2aWEgYElucHV0UGx1Z2luLmFjdGl2ZVBvaW50ZXJgLiBZb3UgY2FuIGFsc28gdXNlIHRoZSBwcm9wZXJ0aWVzXHJcbiAqIGBJbnB1dFBsdWdpbi5wb2ludGVyMWAgdGhyb3VnaCB0byBgcG9pbnRlcjEwYCwgZm9yIGVhY2ggcG9pbnRlciB5b3UgaGF2ZSBlbmFibGVkIGluIHlvdXIgZ2FtZS5cclxuICpcclxuICogVGhlIHByb3BlcnRpZXMgb2YgdGhpcyBvYmplY3QgYXJlIHNldCBieSB0aGUgSW5wdXQgUGx1Z2luIGR1cmluZyBwcm9jZXNzaW5nLiBUaGlzIG9iamVjdCBpcyB0aGVuIHNlbnQgaW4gYWxsXHJcbiAqIGlucHV0IHJlbGF0ZWQgZXZlbnRzIHRoYXQgdGhlIElucHV0IFBsdWdpbiBlbWl0cywgc28geW91IGNhbiByZWZlcmVuY2UgcHJvcGVydGllcyBmcm9tIGl0IGRpcmVjdGx5IGluIHlvdXJcclxuICogY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAY2xhc3MgUG9pbnRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBtYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaWQgLSBUaGUgaW50ZXJuYWwgSUQgb2YgdGhpcyBQb2ludGVyLlxyXG4gKi9cclxudmFyIFBvaW50ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUG9pbnRlciAobWFuYWdlciwgaWQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIElEIG9mIHRoaXMgUG9pbnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2lkXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbW9zdCByZWNlbnQgbmF0aXZlIERPTSBFdmVudCB0aGlzIFBvaW50ZXIgaGFzIHByb2Nlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2V2ZW50XHJcbiAgICAgICAgICogQHR5cGUgeyhUb3VjaEV2ZW50fE1vdXNlRXZlbnQpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBET00gZWxlbWVudCB0aGUgUG9pbnRlciB3YXMgcHJlc3NlZCBkb3duIG9uLCB0YWtlbiBmcm9tIHRoZSBET00gZXZlbnQuXHJcbiAgICAgICAgICogSW4gYSBkZWZhdWx0IHNldC11cCB0aGlzIHdpbGwgYmUgdGhlIENhbnZhcyB0aGF0IFBoYXNlciBpcyByZW5kZXJpbmcgdG8sIG9yIHRoZSBXaW5kb3cgZWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rvd25FbGVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIERPTSBlbGVtZW50IHRoZSBQb2ludGVyIHdhcyByZWxlYXNlZCBvbiwgdGFrZW4gZnJvbSB0aGUgRE9NIGV2ZW50LlxyXG4gICAgICAgICAqIEluIGEgZGVmYXVsdCBzZXQtdXAgdGhpcyB3aWxsIGJlIHRoZSBDYW52YXMgdGhhdCBQaGFzZXIgaXMgcmVuZGVyaW5nIHRvLCBvciB0aGUgV2luZG93IGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cEVsZW1lbnRcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwRWxlbWVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbWVyYSB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggZHVyaW5nIGl0cyBsYXN0IHVwZGF0ZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIFBvaW50ZXIgY2FuIG9ubHkgZXZlciBpbnRlcmFjdCB3aXRoIG9uZSBjYW1lcmEgYXQgb25jZSwgd2hpY2ggd2lsbCBiZSB0aGUgdG9wLW1vc3QgY2FtZXJhXHJcbiAgICAgICAgICogaW4gdGhlIGxpc3Qgc2hvdWxkIG11bHRpcGxlIGNhbWVyYXMgYmUgcG9zaXRpb25lZCBvbi10b3Agb2YgZWFjaCBvdGhlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB3aGljaCBidXR0b24gd2FzIHByZXNzZWQsIG9yIHJlbGVhc2VkLCBvbiB0aGUgcG9pbnRlclxyXG4gICAgICAgICAqIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgZXZlbnQuIEl0IGlzIG9ubHkgc2V0IGR1cmluZyBgdXBgIGFuZCBgZG93bmAgZXZlbnRzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIE9uIFRvdWNoIGRldmljZXMgdGhlIHZhbHVlIGlzIGFsd2F5cyAwLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZXJzIG1heSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYnV0dG9ucyBvbiB0aGVpciBwb2ludGluZyBkZXZpY2Ugc28gdGhhdCBpZiBhbiBldmVudCdzIGJ1dHRvbiBwcm9wZXJ0eVxyXG4gICAgICAgICAqIGlzIHplcm8sIGl0IG1heSBub3QgaGF2ZSBiZWVuIGNhdXNlZCBieSB0aGUgYnV0dG9uIHRoYXQgaXMgcGh5c2ljYWxseSBsZWZ04oCTbW9zdCBvbiB0aGUgcG9pbnRpbmcgZGV2aWNlO1xyXG4gICAgICAgICAqIGhvd2V2ZXIsIGl0IHNob3VsZCBiZWhhdmUgYXMgaWYgdGhlIGxlZnQgYnV0dG9uIHdhcyBjbGlja2VkIGluIHRoZSBzdGFuZGFyZCBidXR0b24gbGF5b3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYnV0dG9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIDA6IE5vIGJ1dHRvbiBvciB1bi1pbml0aWFsaXplZFxyXG4gICAgICAgICAqIDE6IExlZnQgYnV0dG9uXHJcbiAgICAgICAgICogMjogUmlnaHQgYnV0dG9uXHJcbiAgICAgICAgICogNDogV2hlZWwgYnV0dG9uIG9yIG1pZGRsZSBidXR0b25cclxuICAgICAgICAgKiA4OiA0dGggYnV0dG9uICh0eXBpY2FsbHkgdGhlIFwiQnJvd3NlciBCYWNrXCIgYnV0dG9uKVxyXG4gICAgICAgICAqIDE2OiA1dGggYnV0dG9uICh0eXBpY2FsbHkgdGhlIFwiQnJvd3NlciBGb3J3YXJkXCIgYnV0dG9uKVxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEZvciBhIG1vdXNlIGNvbmZpZ3VyZWQgZm9yIGxlZnQtaGFuZGVkIHVzZSwgdGhlIGJ1dHRvbiBhY3Rpb25zIGFyZSByZXZlcnNlZC5cclxuICAgICAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSByaWdodCB0byBsZWZ0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYnV0dG9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIFBvaW50ZXIgaW4gc2NyZWVuIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByZXZpb3VzIHBvc2l0aW9uIG9mIHRoZSBQb2ludGVyIGluIHNjcmVlbiBzcGFjZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgb2xkIHggYW5kIHkgdmFsdWVzIGFyZSBzdG9yZWQgaW4gaGVyZSBkdXJpbmcgdGhlIElucHV0TWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyIGNhbGwuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVXNlIHRoZSBwcm9wZXJ0aWVzIGB2ZWxvY2l0eWAsIGBhbmdsZWAgYW5kIGBkaXN0YW5jZWAgdG8gY3JlYXRlIHlvdXIgb3duIGdlc3R1cmUgcmVjb2duaXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNwcmV2UG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmV2UG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCB2ZWN0b3IgdXNlZCBmb3IgY2FsY3VsYXRpb25zIG9mIHRoZSBwb2ludGVyIHNwZWVkIGFuZCBhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI21pZFBvaW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taWRQb2ludCA9IG5ldyBWZWN0b3IyKC0xLCAtMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHZlbG9jaXR5IG9mIHRoZSBQb2ludGVyLCBiYXNlZCBvbiBpdHMgY3VycmVudCBhbmQgcHJldmlvdXMgcG9zaXRpb25zLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgc21vb3RoZWQgb3V0IGVhY2ggZnJhbWUsIGFjY29yZGluZyB0byB0aGUgYG1vdGlvbkZhY3RvcmAgcHJvcGVydHkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1cGRhdGVkIHdoZW5ldmVyIHRoZSBQb2ludGVyIG1vdmVzLCByZWdhcmRsZXNzIG9mIGFueSBidXR0b24gc3RhdGVzLiBJbiBvdGhlciB3b3JkcyxcclxuICAgICAgICAgKiBpdCBjaGFuZ2VzIGJhc2VkIG9uIG1vdmVtZW50IGFsb25lIC0gYSBidXR0b24gZG9lc24ndCBoYXZlIHRvIGJlIHByZXNzZWQgZmlyc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN2ZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgYW5nbGUgdGhlIFBvaW50ZXIgaXMgbW92aW5nLCBpbiByYWRpYW5zLCBiYXNlZCBvbiBpdHMgcHJldmlvdXMgYW5kIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIGlzIGJhc2VkIG9uIHRoZSBvbGQgcG9zaXRpb24gZmFjaW5nIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdXBkYXRlZCB3aGVuZXZlciB0aGUgUG9pbnRlciBtb3ZlcywgcmVnYXJkbGVzcyBvZiBhbnkgYnV0dG9uIHN0YXRlcy4gSW4gb3RoZXIgd29yZHMsXHJcbiAgICAgICAgICogaXQgY2hhbmdlcyBiYXNlZCBvbiBtb3ZlbWVudCBhbG9uZSAtIGEgYnV0dG9uIGRvZXNuJ3QgaGF2ZSB0byBiZSBwcmVzc2VkIGZpcnN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuZ2xlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRpc3RhbmNlIHRoZSBQb2ludGVyIGhhcyBtb3ZlZCwgYmFzZWQgb24gaXRzIHByZXZpb3VzIGFuZCBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgc21vb3RoZWQgb3V0IGVhY2ggZnJhbWUsIGFjY29yZGluZyB0byB0aGUgYG1vdGlvbkZhY3RvcmAgcHJvcGVydHkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1cGRhdGVkIHdoZW5ldmVyIHRoZSBQb2ludGVyIG1vdmVzLCByZWdhcmRsZXNzIG9mIGFueSBidXR0b24gc3RhdGVzLiBJbiBvdGhlciB3b3JkcyxcclxuICAgICAgICAgKiBpdCBjaGFuZ2VzIGJhc2VkIG9uIG1vdmVtZW50IGFsb25lIC0gYSBidXR0b24gZG9lc24ndCBoYXZlIHRvIGJlIHByZXNzZWQgZmlyc3QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IG5lZWQgdGhlIHRvdGFsIGRpc3RhbmNlIHRyYXZlbGxlZCBzaW5jZSB0aGUgcHJpbWFyeSBidXR0b25zIHdhcyBwcmVzc2VkIGRvd24sXHJcbiAgICAgICAgICogdGhlbiB1c2UgdGhlIGBQb2ludGVyLmdldERpc3RhbmNlYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkaXN0YW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc21vb3RoaW5nIGZhY3RvciB0byBhcHBseSB0byB0aGUgUG9pbnRlciBwb3NpdGlvbi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBEdWUgdG8gdGhlaXIgbmF0dXJlLCBwb2ludGVyIHBvc2l0aW9ucyBhcmUgaW5oZXJlbnRseSBub2lzeS4gV2hpbGUgdGhpcyBpcyBmaW5lIGZvciBsb3RzIG9mIGdhbWVzLCBpZiB5b3UgbmVlZCBjbGVhbmVyIHBvc2l0aW9uc1xyXG4gICAgICAgICAqIHRoZW4geW91IGNhbiBzZXQgdGhpcyB2YWx1ZSB0byBhcHBseSBhbiBhdXRvbWF0aWMgc21vb3RoaW5nIHRvIHRoZSBwb3NpdGlvbnMgYXMgdGhleSBhcmUgcmVjb3JkZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgemVybyBtZWFucyAnbm8gc21vb3RoaW5nJy5cclxuICAgICAgICAgKiBTZXQgdG8gYSBzbWFsbCB2YWx1ZSwgc3VjaCBhcyAwLjIsIHRvIGFwcGx5IGFuIGF2ZXJhZ2UgbGV2ZWwgb2Ygc21vb3RoaW5nIGJldHdlZW4gcG9zaXRpb25zLiBZb3UgY2FuIGRvIHRoaXMgYnkgY2hhbmdpbmcgdGhpc1xyXG4gICAgICAgICAqIHZhbHVlIGRpcmVjdGx5LCBvciBieSBzZXR0aW5nIHRoZSBgaW5wdXQuc21vb3RoRmFjdG9yYCBwcm9wZXJ0eSBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUG9zaXRpb25zIGFyZSBvbmx5IHNtb290aGVkIHdoZW4gdGhlIHBvaW50ZXIgbW92ZXMuIElmIHRoZSBwcmltYXJ5IGJ1dHRvbiBvbiB0aGlzIFBvaW50ZXIgZW50ZXJzIGFuIFVwIG9yIERvd24gc3RhdGUsIHRoZW4gdGhlIHBvc2l0aW9uXHJcbiAgICAgICAgICogaXMgYWx3YXlzIHByZWNpc2UsIGFuZCBub3Qgc21vb3RoZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNzbW9vdGhGYWN0b3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zbW9vdGhGYWN0b3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIG1vdGlvbiBzbW9vdGhpbmcgZWFjaCBmcmFtZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byB0aGUgU21vb3RoIFN0ZXAgSW50ZXJwb2xhdGlvbiB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSxcclxuICAgICAgICAgKiBhbmdsZSBhbmQgZGlzdGFuY2Ugb2YgdGhlIFBvaW50ZXIuIEl0J3MgYXBwbGllZCBldmVyeSBmcmFtZSwgdW50aWwgdGhlIG1pZFBvaW50IHJlYWNoZXMgdGhlIGN1cnJlbnRcclxuICAgICAgICAgKiBwb3NpdGlvbiBvZiB0aGUgUG9pbnRlci4gMC4yIHByb3ZpZGVzIGEgZ29vZCBhdmVyYWdlIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIGlmIHlvdSBuZWVkIGFcclxuICAgICAgICAgKiBxdWlja2VyIHVwZGF0ZSBhbmQgYXJlIHdvcmtpbmcgaW4gYSBoaWdoIHBlcmZvcm1hbmNlIGVudmlyb25tZW50LiBOZXZlciBzZXQgdGhpcyB2YWx1ZSB0b1xyXG4gICAgICAgICAqIHplcm8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNtb3Rpb25GYWN0b3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMlxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdGlvbkZhY3RvciA9IDAuMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggcG9zaXRpb24gb2YgdGhpcyBQb2ludGVyLCB0cmFuc2xhdGVkIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIG1vc3QgcmVjZW50IENhbWVyYSBpdCBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gdXNlIHRoaXMgdmFsdWUgX291dHNpZGVfIG9mIGFuIGlucHV0IGV2ZW50IGhhbmRsZXIgdGhlbiB5b3Ugc2hvdWxkIHVwZGF0ZSBpdCBmaXJzdCBieSBjYWxsaW5nXHJcbiAgICAgICAgICogdGhlIGBQb2ludGVyLnVwZGF0ZVdvcmxkUG9pbnRgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3dvcmxkWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlciwgdHJhbnNsYXRlZCBpbnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBtb3N0IHJlY2VudCBDYW1lcmEgaXQgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSB3aXNoIHRvIHVzZSB0aGlzIHZhbHVlIF9vdXRzaWRlXyBvZiBhbiBpbnB1dCBldmVudCBoYW5kbGVyIHRoZW4geW91IHNob3VsZCB1cGRhdGUgaXQgZmlyc3QgYnkgY2FsbGluZ1xyXG4gICAgICAgICAqIHRoZSBgUG9pbnRlci51cGRhdGVXb3JsZFBvaW50YCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN3b3JsZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIHdoZW4gdGhpcyBQb2ludGVyIHdhcyBtb3N0IHJlY2VudGx5IG1vdmVkIChyZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiBpdHMgYnV0dG9ucywgaWYgYW55KVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjbW92ZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUaW1lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogWCBjb29yZGluYXRlIG9mIHRoZSBQb2ludGVyIHdoZW4gQnV0dG9uIDEgKGxlZnQgYnV0dG9uKSwgb3IgVG91Y2gsIHdhcyBwcmVzc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93blhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd25YID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogWSBjb29yZGluYXRlIG9mIHRoZSBQb2ludGVyIHdoZW4gQnV0dG9uIDEgKGxlZnQgYnV0dG9uKSwgb3IgVG91Y2gsIHdhcyBwcmVzc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93bllcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd25ZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcHJlc3NlZCwgdXNlZCBmb3IgZHJhZ2dpbmcgb2JqZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rvd25UaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb3duVGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFggY29vcmRpbmF0ZSBvZiB0aGUgUG9pbnRlciB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcmVsZWFzZWQsIHVzZWQgZm9yIGRyYWdnaW5nIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFkgY29vcmRpbmF0ZSBvZiB0aGUgUG9pbnRlciB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcmVsZWFzZWQsIHVzZWQgZm9yIGRyYWdnaW5nIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwWSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgd2hlbiBCdXR0b24gMSAobGVmdCBidXR0b24pLCBvciBUb3VjaCwgd2FzIHJlbGVhc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjdXBUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51cFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgcHJpbWFyeSBidXR0b24gZG93bj8gKHVzdWFsbHkgYnV0dG9uIDAsIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3ByaW1hcnlEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByaW1hcnlEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIF9hbnlfIGJ1dHRvbiBvbiB0aGlzIHBvaW50ZXIgY29uc2lkZXJlZCBhcyBiZWluZyBkb3duP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjaXNEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEaWQgdGhlIHByZXZpb3VzIGlucHV0IGV2ZW50IGNvbWUgZnJvbSBhIFRvdWNoIGlucHV0ICh0cnVlKSBvciBNb3VzZT8gKGZhbHNlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjd2FzVG91Y2hcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlkIHRoaXMgUG9pbnRlciBnZXQgY2FuY2VsZWQgYnkgYSB0b3VjaGNhbmNlbCBldmVudD9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBOb3RlOiBcImNhbmNlbGVkXCIgaXMgdGhlIEFtZXJpY2FuLUVuZ2xpc2ggc3BlbGxpbmcgb2YgXCJjYW5jZWxsZWRcIi4gUGxlYXNlIGRvbid0IHN1Ym1pdCBQUnMgY29ycmVjdGluZyBpdCFcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3dhc0NhbmNlbGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53YXNDYW5jZWxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGUgbW91c2UgaXMgbG9ja2VkLCB0aGUgaG9yaXpvbnRhbCByZWxhdGl2ZSBtb3ZlbWVudCBvZiB0aGUgUG9pbnRlciBpbiBwaXhlbHMgc2luY2UgbGFzdCBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI21vdmVtZW50WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW92ZW1lbnRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIG1vdXNlIGlzIGxvY2tlZCwgdGhlIHZlcnRpY2FsIHJlbGF0aXZlIG1vdmVtZW50IG9mIHRoZSBQb2ludGVyIGluIHBpeGVscyBzaW5jZSBsYXN0IGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjbW92ZW1lbnRZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3ZlbWVudFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaWRlbnRpZmllciBwcm9wZXJ0eSBvZiB0aGUgUG9pbnRlciBhcyBzZXQgYnkgdGhlIERPTSBldmVudCB3aGVuIHRoaXMgUG9pbnRlciBpcyBzdGFydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjaWRlbnRpZmllclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaWRlbnRpZmllciA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb2ludGVySWQgcHJvcGVydHkgb2YgdGhlIFBvaW50ZXIgYXMgc2V0IGJ5IHRoZSBET00gZXZlbnQgd2hlbiB0aGlzIFBvaW50ZXIgaXMgc3RhcnRlZC5cclxuICAgICAgICAgKiBUaGUgYnJvd3NlciBjYW4gYW5kIHdpbGwgcmVjeWNsZSB0aGlzIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjcG9pbnRlcklkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVySWQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhY3RpdmUgUG9pbnRlciBpcyBvbmUgdGhhdCBpcyBjdXJyZW50bHkgcHJlc3NlZCBkb3duIG9uIHRoZSBkaXNwbGF5LlxyXG4gICAgICAgICAqIEEgTW91c2UgaXMgYWx3YXlzIGNvbnNpZGVyZWQgYXMgYWN0aXZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gKGlkID09PSAwKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBwb2ludGVyIFBvaW50ZXIgTG9ja2VkP1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIE9ubHkgYSBtb3VzZSBwb2ludGVyIGNhbiBiZSBsb2NrZWQgYW5kIGl0IG9ubHkgYmVjb21lcyBsb2NrZWQgd2hlbiByZXF1ZXN0ZWQgdmlhXHJcbiAgICAgICAgICogdGhlIGJyb3dzZXJzIFBvaW50ZXIgTG9jayBBUEkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogWW91IGNhbiByZXF1ZXN0IHRoaXMgYnkgY2FsbGluZyB0aGUgYHRoaXMuaW5wdXQubW91c2UucmVxdWVzdFBvaW50ZXJMb2NrKClgIG1ldGhvZCBmcm9tXHJcbiAgICAgICAgICogYSBgcG9pbnRlcmRvd25gIG9yIGBwb2ludGVydXBgIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNsb2NrZWRcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2Nyb2xsIGFtb3VudCB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgdXNlciBtb3ZpbmcgYSBtb3VzZSB3aGVlbCBvciBzaW1pbGFyIGlucHV0IGRldmljZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2RlbHRhWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbHRhWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkZWx0YVlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YVkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkZWx0YVpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YVogPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgQ2FtZXJhIGFuZCB1cGRhdGVzIHRoaXMgUG9pbnRlcidzIGB3b3JsZFhgIGFuZCBgd29ybGRZYCB2YWx1ZXMgc28gdGhleSBhcmVcclxuICAgICAqIHRoZSByZXN1bHQgb2YgYSB0cmFuc2xhdGlvbiB0aHJvdWdoIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGUgdGhhdCB0aGUgdmFsdWVzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXBsYWNlZCB0aGUgbW9tZW50IHRoZSBQb2ludGVyIGlzXHJcbiAgICAgKiB1cGRhdGVkIGJ5IGFuIGlucHV0IGV2ZW50LCBzdWNoIGFzIGEgbW91c2UgbW92ZSwgc28gc2hvdWxkIGJlIHVzZWQgaW1tZWRpYXRlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cGRhdGVXb3JsZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB3aGljaCBpcyBiZWluZyB0ZXN0ZWQgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFBvaW50OiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhLnJlc29sdXRpb24gIT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ICs9IGNhbWVyYS5feDtcclxuICAgICAgICAgICAgeSArPSBjYW1lcmEuX3k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgU3RvcmVzIHRoZSB3b3JsZCBwb2ludCBpbnNpZGUgb2YgdGVtcFBvaW50XHJcbiAgICAgICAgdmFyIHRlbXAgPSBjYW1lcmEuZ2V0V29ybGRQb2ludCh4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFggPSB0ZW1wLng7XHJcbiAgICAgICAgdGhpcy53b3JsZFkgPSB0ZW1wLnk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgQ2FtZXJhIGFuZCByZXR1cm5zIGEgVmVjdG9yMiBjb250YWluaW5nIHRoZSB0cmFuc2xhdGVkIHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlclxyXG4gICAgICogd2l0aGluIHRoYXQgQ2FtZXJhLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhpcyBQb2ludGVycyBwb3NpdGlvbiBpbnRvIGNhbWVyYSBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3Bvc2l0aW9uVG9DYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gdXNlIGZvciB0aGUgdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQSBWZWN0b3IyLWxpa2Ugb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB0cmFuc2xhdGVkIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IEEgVmVjdG9yMiBjb250YWluaW5nIHRoZSB0cmFuc2xhdGVkIGNvb3JkaW5hdGVzIG9mIHRoaXMgUG9pbnRlciwgYmFzZWQgb24gdGhlIGdpdmVuIGNhbWVyYS5cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb25Ub0NhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjYW1lcmEuZ2V0V29ybGRQb2ludCh0aGlzLngsIHRoaXMueSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBtb3Rpb24gb2YgdGhpcyBQb2ludGVyLCBpbmNsdWRpbmcgaXRzIHZlbG9jaXR5IGFuZCBhbmdsZSBvZiBtb3ZlbWVudC5cclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUgYnkgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cGRhdGVNb3Rpb25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU1vdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY3ggPSB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIGN5ID0gdGhpcy5wb3NpdGlvbi55O1xyXG5cclxuICAgICAgICB2YXIgbXggPSB0aGlzLm1pZFBvaW50Lng7XHJcbiAgICAgICAgdmFyIG15ID0gdGhpcy5taWRQb2ludC55O1xyXG5cclxuICAgICAgICBpZiAoY3ggPT09IG14ICYmIGN5ID09PSBteSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBOb3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE1vdmluZyB0b3dhcmRzIG91ciBnb2FsIC4uLlxyXG4gICAgICAgIHZhciB2eCA9IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHRoaXMubW90aW9uRmFjdG9yLCBteCwgY3gpO1xyXG4gICAgICAgIHZhciB2eSA9IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHRoaXMubW90aW9uRmFjdG9yLCBteSwgY3kpO1xyXG5cclxuICAgICAgICBpZiAoRnV6enlFcXVhbCh2eCwgY3gsIDAuMSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2eCA9IGN4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEZ1enp5RXF1YWwodnksIGN5LCAwLjEpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgPSBjeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KHZ4LCB2eSk7XHJcblxyXG4gICAgICAgIHZhciBkeCA9IGN4IC0gdng7XHJcbiAgICAgICAgdmFyIGR5ID0gY3kgLSB2eTtcclxuXHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eS5zZXQoZHgsIGR5KTtcclxuXHJcbiAgICAgICAgdGhpcy5hbmdsZSA9IEFuZ2xlKHZ4LCB2eSwgY3gsIGN5KTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGhhbmRsZSBhIE1vdXNlIFVwIEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjdXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIE1vdXNlIEV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKi9cclxuICAgIHVwOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCdidXR0b25zJyBpbiBldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IGV2ZW50LmJ1dHRvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xyXG5cclxuICAgICAgICB0aGlzLnVwRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICAwOiBNYWluIGJ1dHRvbiBwcmVzc2VkLCB1c3VhbGx5IHRoZSBsZWZ0IGJ1dHRvbiBvciB0aGUgdW4taW5pdGlhbGl6ZWQgc3RhdGVcclxuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwWCA9IHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy51cFkgPSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMudXBUaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy53YXNUb3VjaCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBNb3VzZSBEb3duIEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgLSBUaGUgTW91c2UgRXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgZG93bjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICgnYnV0dG9ucycgaW4gZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBldmVudC5idXR0b25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50O1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcclxuXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICAwOiBNYWluIGJ1dHRvbiBwcmVzc2VkLCB1c3VhbGx5IHRoZSBsZWZ0IGJ1dHRvbiBvciB0aGUgdW4taW5pdGlhbGl6ZWQgc3RhdGVcclxuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blggPSB0aGlzLng7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blkgPSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gaGFuZGxlIGEgTW91c2UgTW92ZSBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI21vdmVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIE1vdXNlIEV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKi9cclxuICAgIG1vdmU6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoJ2J1dHRvbnMnIGluIGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gZXZlbnQuYnV0dG9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCB0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE11bHRpcGxlIERPTSBldmVudHMgbWF5IG9jY3VyIHdpdGhpbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IG9uZSBQaGFzZXIgZXZlbnQgd2lsbCBmaXJlXHJcbiAgICAgICAgICAgIHRoaXMubW92ZW1lbnRYID0gZXZlbnQubW92ZW1lbnRYIHx8IGV2ZW50Lm1vek1vdmVtZW50WCB8fCBldmVudC53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlbWVudFkgPSBldmVudC5tb3ZlbWVudFkgfHwgZXZlbnQubW96TW92ZW1lbnRZIHx8IGV2ZW50LndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlVGltZSA9IGV2ZW50LnRpbWVTdGFtcDtcclxuXHJcbiAgICAgICAgdGhpcy53YXNUb3VjaCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBNb3VzZSBXaGVlbCBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3doZWVsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2hlZWxFdmVudH0gZXZlbnQgLSBUaGUgV2hlZWwgRXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgd2hlZWw6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoJ2J1dHRvbnMnIGluIGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gZXZlbnQuYnV0dG9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVsdGFYID0gZXZlbnQuZGVsdGFYO1xyXG4gICAgICAgIHRoaXMuZGVsdGFZID0gZXZlbnQuZGVsdGFZO1xyXG4gICAgICAgIHRoaXMuZGVsdGFaID0gZXZlbnQuZGVsdGFaO1xyXG5cclxuICAgICAgICB0aGlzLndhc1RvdWNoID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGhhbmRsZSBhIFRvdWNoIFN0YXJ0IEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjdG91Y2hzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNoc3RhcnQ6IGZ1bmN0aW9uICh0b3VjaCwgZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvdWNoWydwb2ludGVySWQnXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlcklkID0gdG91Y2gucG9pbnRlcklkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHRvdWNoLnRhcmdldDtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudCA9IHRvdWNoLnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgdG91Y2gucGFnZVgsIHRvdWNoLnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJpbWFyeURvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG93blggPSB0aGlzLng7XHJcbiAgICAgICAgdGhpcy5kb3duWSA9IHRoaXMueTtcclxuICAgICAgICB0aGlzLmRvd25UaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FzQ2FuY2VsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNb3Rpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gaGFuZGxlIGEgVG91Y2ggTW92ZSBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3RvdWNobW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNobW92ZTogZnVuY3Rpb24gKHRvdWNoLCBldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIC8vICBTZXRzIHRoZSBsb2NhbCB4L3kgcHJvcGVydGllc1xyXG4gICAgICAgIHRoaXMubWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyKHRoaXMsIHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZVRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBUb3VjaCBFbmQgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN0b3VjaGVuZFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNoZW5kOiBmdW5jdGlvbiAodG91Y2gsIGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgdGhpcy51cEVsZW1lbnQgPSB0b3VjaC50YXJnZXQ7XHJcblxyXG4gICAgICAgIC8vICBTZXRzIHRoZSBsb2NhbCB4L3kgcHJvcGVydGllc1xyXG4gICAgICAgIHRoaXMubWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyKHRoaXMsIHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLnByaW1hcnlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cFggPSB0aGlzLng7XHJcbiAgICAgICAgdGhpcy51cFkgPSB0aGlzLnk7XHJcbiAgICAgICAgdGhpcy51cFRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FzQ2FuY2VsZWQgPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBUb3VjaCBDYW5jZWwgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN0b3VjaGNhbmNlbFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaCAtIFRoZSBDaGFuZ2VkIFRvdWNoIGZyb20gdGhlIFRvdWNoIEV2ZW50LlxyXG4gICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBldmVudCAtIFRoZSBmdWxsIFRvdWNoIEV2ZW50LlxyXG4gICAgICovXHJcbiAgICB0b3VjaGNhbmNlbDogZnVuY3Rpb24gKHRvdWNoLCBldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBFbGVtZW50ID0gdG91Y2gudGFyZ2V0O1xyXG5cclxuICAgICAgICAvLyAgU2V0cyB0aGUgbG9jYWwgeC95IHByb3BlcnRpZXNcclxuICAgICAgICB0aGlzLm1hbmFnZXIudHJhbnNmb3JtUG9pbnRlcih0aGlzLCB0b3VjaC5wYWdlWCwgdG91Y2gucGFnZVksIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBYID0gdGhpcy54O1xyXG4gICAgICAgIHRoaXMudXBZID0gdGhpcy55O1xyXG4gICAgICAgIHRoaXMudXBUaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLndhc1RvdWNoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndhc0NhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYW55IGJ1dHRvbnMgYXJlIGJlaW5nIGhlbGQgZG93biBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNub0J1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBubyBidXR0b25zIGFyZSBiZWluZyBoZWxkIGRvd24uXHJcbiAgICAgKi9cclxuICAgIG5vQnV0dG9uRG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9ucyA9PT0gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbGVmdCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2xlZnRCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGxlZnQgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqL1xyXG4gICAgbGVmdEJ1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiAxKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSByaWdodCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3JpZ2h0QnV0dG9uRG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByaWdodCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICByaWdodEJ1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiAyKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBtaWRkbGUgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93biBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNtaWRkbGVCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG1pZGRsZSBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICBtaWRkbGVCdXR0b25Eb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5idXR0b25zICYgNCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgYmFjayBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2JhY2tCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJhY2sgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqL1xyXG4gICAgYmFja0J1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiA4KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBmb3J3YXJkIGJ1dHRvbiBpcyBiZWluZyBoZWxkIGRvd24gb24gdGhpcyBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZm9yd2FyZEJ1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZm9yd2FyZCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICBmb3J3YXJkQnV0dG9uRG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9ucyAmIDE2KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBsZWZ0IGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNsZWZ0QnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGxlZnQgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkLlxyXG4gICAgICovXHJcbiAgICBsZWZ0QnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMCAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIHJpZ2h0IGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNyaWdodEJ1dHRvblJlbGVhc2VkXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByaWdodCBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0QnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMiAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIG1pZGRsZSBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQgb24gdGhpcyBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjbWlkZGxlQnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG1pZGRsZSBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIG1pZGRsZUJ1dHRvblJlbGVhc2VkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5idXR0b24gPT09IDEgJiYgIXRoaXMuaXNEb3duKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBiYWNrIGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNiYWNrQnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJhY2sgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkLlxyXG4gICAgICovXHJcbiAgICBiYWNrQnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMyAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGZvcndhcmQgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2ZvcndhcmRCdXR0b25SZWxlYXNlZFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZm9yd2FyZCBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIGZvcndhcmRCdXR0b25SZWxlYXNlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9uID09PSA0ICYmICF0aGlzLmlzRG93bik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIFBvaW50ZXIgaGFzIGEgYnV0dG9uIHByZXNzZWQgZG93biBhdCB0aGUgdGltZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIHRoZVxyXG4gICAgICogZGlzdGFuY2UgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGBkb3duWGAgYW5kIGBkb3duWWAgdmFsdWVzIGFuZCB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgZGlzdGFuY2UsIGJhc2VkIG9uIHdoZXJlXHJcbiAgICAgKiB0aGUgUG9pbnRlciB3YXMgd2hlbiB0aGUgYnV0dG9uIHdhcyByZWxlYXNlZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gZ2V0IHRoZSBkaXN0YW5jZSBiZWluZyB0cmF2ZWxsZWQgY3VycmVudGx5LCBiYXNlZCBvbiB0aGUgdmVsb2NpdHkgb2YgdGhlIFBvaW50ZXIsXHJcbiAgICAgKiB0aGVuIHNlZSB0aGUgYFBvaW50ZXIuZGlzdGFuY2VgIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RGlzdGFuY2VcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIERpc3RhbmNlKHRoaXMuZG93blgsIHRoaXMuZG93blksIHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIERpc3RhbmNlKHRoaXMuZG93blgsIHRoaXMuZG93blksIHRoaXMudXBYLCB0aGlzLnVwWSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIGhvcml6b250YWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGBkb3duWGAgYW5kIGBkb3duWWAgdmFsdWVzIGFuZCB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgaG9yaXpvbnRhbCBkaXN0YW5jZSwgYmFzZWQgb24gd2hlcmVcclxuICAgICAqIHRoZSBQb2ludGVyIHdhcyB3aGVuIHRoZSBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RGlzdGFuY2VYXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgaG9yaXpvbnRhbCBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2VYOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmRvd25YIC0gdGhpcy54KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZG93blggLSB0aGlzLnVwWCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdGhlIFBvaW50ZXIncyBgZG93blhgIGFuZCBgZG93bllgIHZhbHVlcyBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIElmIG5vIGJ1dHRvbiBpcyBoZWxkIGRvd24sIGl0IHdpbGwgcmV0dXJuIHRoZSBsYXN0IHJlY29yZGVkIHZlcnRpY2FsIGRpc3RhbmNlLCBiYXNlZCBvbiB3aGVyZVxyXG4gICAgICogdGhlIFBvaW50ZXIgd2FzIHdoZW4gdGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNnZXREaXN0YW5jZVlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2VZOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmRvd25ZIC0gdGhpcy55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZG93blkgLSB0aGlzLnVwWSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIGR1cmF0aW9uIHNpbmNlIHRoZSBidXR0b24gd2FzIHByZXNzZWQgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgZHVyYXRpb24sIGJhc2VkIG9uIHRoZSB0aW1lXHJcbiAgICAgKiB0aGUgUG9pbnRlciBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiB0aGUgUG9pbnRlciB3YXMgaGVsZCBkb3duIGZvciBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5tYW5hZ2VyLnRpbWUgLSB0aGlzLmRvd25UaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnVwVGltZSAtIHRoaXMuZG93blRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgUG9pbnRlciBoYXMgYSBidXR0b24gcHJlc3NlZCBkb3duIGF0IHRoZSB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgaXQgd2lsbCByZXR1cm4gdGhlXHJcbiAgICAgKiBhbmdsZSBiZXR3ZWVuIHRoZSBQb2ludGVyJ3MgYGRvd25YYCBhbmQgYGRvd25ZYCB2YWx1ZXMgYW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyBidXR0b24gaXMgaGVsZCBkb3duLCBpdCB3aWxsIHJldHVybiB0aGUgbGFzdCByZWNvcmRlZCBhbmdsZSwgYmFzZWQgb24gd2hlcmVcclxuICAgICAqIHRoZSBQb2ludGVyIHdhcyB3aGVuIHRoZSBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYW5nbGUgaXMgYmFzZWQgb24gdGhlIG9sZCBwb3NpdGlvbiBmYWNpbmcgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIGdldCB0aGUgY3VycmVudCBhbmdsZSwgYmFzZWQgb24gdGhlIHZlbG9jaXR5IG9mIHRoZSBQb2ludGVyLCB0aGVuXHJcbiAgICAgKiBzZWUgdGhlIGBQb2ludGVyLmFuZ2xlYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2dldEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGNvb3JkaW5hdGVzIGluIHJhZGlhbnMuXHJcbiAgICAgKi9cclxuICAgIGdldEFuZ2xlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBbmdsZSh0aGlzLmRvd25YLCB0aGlzLmRvd25ZLCB0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBbmdsZSh0aGlzLmRvd25YLCB0aGlzLmRvd25ZLCB0aGlzLnVwWCwgdGhpcy51cFkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgUG9pbnRlciBwb3NpdGlvbnMgYW5kIHRoZW4gZ2VuZXJhdGVzIGFuIGFycmF5IG9mIGludGVycG9sYXRlZCB2YWx1ZXMgYmV0d2VlblxyXG4gICAgICogdGhlIHR3by4gVGhlIGFycmF5IHdpbGwgYmUgcG9wdWxhdGVkIHVwIHRvIHRoZSBzaXplIG9mIHRoZSBgc3RlcHNgIGFyZ3VtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhU2NyaXB0XHJcbiAgICAgKiB2YXIgcG9pbnRzID0gcG9pbnRlci5nZXRJbnRlcnBvbGF0ZWRQb3NpdGlvbig0KTtcclxuICAgICAqIFxyXG4gICAgICogLy8gcG9pbnRzWzBdID0geyB4OiAwLCB5OiAwIH1cclxuICAgICAqIC8vIHBvaW50c1sxXSA9IHsgeDogMiwgeTogMSB9XHJcbiAgICAgKiAvLyBwb2ludHNbMl0gPSB7IHg6IDMsIHk6IDIgfVxyXG4gICAgICogLy8gcG9pbnRzWzNdID0geyB4OiA2LCB5OiAzIH1cclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBnZXQgc21vb3RoZWQgdmFsdWVzIGJldHdlZW4gdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHBvaW50ZXIgcG9zaXRpb25zLiBET00gcG9pbnRlclxyXG4gICAgICogZXZlbnRzIGNhbiBvZnRlbiBmaXJlIGZhc3RlciB0aGFuIHRoZSBtYWluIGJyb3dzZXIgbG9vcCwgYW5kIHRoaXMgd2lsbCBoZWxwIHlvdSBhdm9pZCBqYW5reSBtb3ZlbWVudFxyXG4gICAgICogZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBhbiBvYmplY3QgZm9sbG93aW5nIGEgUG9pbnRlci5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGlmIHlvdSBwcm92aWRlIGFuIG91dHB1dCBhcnJheSBpdCB3aWxsIG9ubHkgYmUgcG9wdWxhdGVkIHVwIHRvIHRoZSBudW1iZXIgb2Ygc3RlcHMgcHJvdmlkZWQuXHJcbiAgICAgKiBJdCB3aWxsIG5vdCBjbGVhciBhbnkgcHJldmlvdXMgZGF0YSB0aGF0IG1heSBoYXZlIGV4aXN0ZWQgYmV5b25kIHRoZSByYW5nZSBvZiB0aGUgc3RlcHMgY291bnQuXHJcbiAgICAgKiBcclxuICAgICAqIEludGVybmFsbHkgaXQgdXNlcyB0aGUgU21vb3RoIFN0ZXAgaW50ZXJwb2xhdGlvbiBjYWxjdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2dldEludGVycG9sYXRlZFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0ZXBzPTEwXSAtIFRoZSBudW1iZXIgb2YgaW50ZXJwb2xhdGlvbiBzdGVwcyB0byB1c2UuXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIGFycmF5IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIGludGVycG9sYXRlZCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldEludGVycG9sYXRlZFBvc2l0aW9uOiBmdW5jdGlvbiAoc3RlcHMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RlcHMgPT09IHVuZGVmaW5lZCkgeyBzdGVwcyA9IDEwOyB9XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2WCA9IHRoaXMucHJldlBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIHByZXZZID0gdGhpcy5wcmV2UG9zaXRpb24ueTtcclxuXHJcbiAgICAgICAgdmFyIGN1clggPSB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIGN1clkgPSB0aGlzLnBvc2l0aW9uLnk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcHM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gKDEgLyBzdGVwcykgKiBpO1xyXG5cclxuICAgICAgICAgICAgb3V0W2ldID0geyB4OiBTbW9vdGhTdGVwSW50ZXJwb2xhdGlvbih0LCBwcmV2WCwgY3VyWCksIHk6IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHQsIHByZXZZLCBjdXJZKSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIFBvaW50ZXIgaW5zdGFuY2UgYW5kIHJlc2V0cyBpdHMgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlci5cclxuICAgICAqIFRoZSB2YWx1ZSBpcyBpbiBzY3JlZW4gc3BhY2UuXHJcbiAgICAgKiBTZWUgYHdvcmxkWGAgdG8gZ2V0IGEgY2FtZXJhIGNvbnZlcnRlZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBQb2ludGVyLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGluIHNjcmVlbiBzcGFjZS5cclxuICAgICAqIFNlZSBgd29ybGRZYCB0byBnZXQgYSBjYW1lcmEgY29udmVydGVkIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3lcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgeToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi55O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHdoZW4gdGhpcyBQb2ludGVyIHdhcyBtb3N0IHJlY2VudGx5IHVwZGF0ZWQgYnkgYSBET00gRXZlbnQuXHJcbiAgICAgKiBUaGlzIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGBldmVudC50aW1lU3RhbXBgIHByb3BlcnR5LlxyXG4gICAgICogSWYgbm8gZXZlbnQgaGFzIHlldCB0YWtlbiBwbGFjZSwgaXQgd2lsbCByZXR1cm4gemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN0aW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHRpbWU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmV2ZW50KSA/IHRoaXMuZXZlbnQudGltZVN0YW1wIDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/Pointer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/const.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/input/const.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar INPUT_CONST = {\r\n\r\n    /**\r\n     * The mouse pointer is being held down.\r\n     * \r\n     * @name Phaser.Input.MOUSE_DOWN\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    MOUSE_DOWN: 0,\r\n\r\n    /**\r\n     * The mouse pointer is being moved.\r\n     * \r\n     * @name Phaser.Input.MOUSE_MOVE\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    MOUSE_MOVE: 1,\r\n\r\n    /**\r\n     * The mouse pointer is released.\r\n     * \r\n     * @name Phaser.Input.MOUSE_UP\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    MOUSE_UP: 2,\r\n\r\n    /**\r\n     * A touch pointer has been started.\r\n     * \r\n     * @name Phaser.Input.TOUCH_START\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    TOUCH_START: 3,\r\n\r\n    /**\r\n     * A touch pointer has been started.\r\n     * \r\n     * @name Phaser.Input.TOUCH_MOVE\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    TOUCH_MOVE: 4,\r\n\r\n    /**\r\n     * A touch pointer has been started.\r\n     * \r\n     * @name Phaser.Input.TOUCH_END\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    TOUCH_END: 5,\r\n\r\n    /**\r\n     * The pointer lock has changed.\r\n     * \r\n     * @name Phaser.Input.POINTER_LOCK_CHANGE\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    POINTER_LOCK_CHANGE: 6,\r\n\r\n    /**\r\n     * A touch pointer has been been cancelled by the browser.\r\n     * \r\n     * @name Phaser.Input.TOUCH_CANCEL\r\n     * @type {integer}\r\n     * @since 3.15.0\r\n     */\r\n    TOUCH_CANCEL: 7,\r\n\r\n    /**\r\n     * The mouse wheel changes.\r\n     * \r\n     * @name Phaser.Input.MOUSE_WHEEL\r\n     * @type {integer}\r\n     * @since 3.18.0\r\n     */\r\n    MOUSE_WHEEL: 8\r\n\r\n};\r\n\r\nmodule.exports = INPUT_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9jb25zdC5qcz85OTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2NvbnN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSU5QVVRfQ09OU1QgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2UgcG9pbnRlciBpcyBiZWluZyBoZWxkIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5NT1VTRV9ET1dOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfRE9XTjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtb3VzZSBwb2ludGVyIGlzIGJlaW5nIG1vdmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTU9VU0VfTU9WRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIE1PVVNFX01PVkU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2UgcG9pbnRlciBpcyByZWxlYXNlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1PVVNFX1VQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfVVA6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gc3RhcnRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRPVUNIX1NUQVJUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgVE9VQ0hfU1RBUlQ6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gc3RhcnRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRPVUNIX01PVkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9NT1ZFOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaCBwb2ludGVyIGhhcyBiZWVuIHN0YXJ0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5UT1VDSF9FTkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9FTkQ6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcG9pbnRlciBsb2NrIGhhcyBjaGFuZ2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUE9JTlRFUl9MT0NLX0NIQU5HRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFBPSU5URVJfTE9DS19DSEFOR0U6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gYmVlbiBjYW5jZWxsZWQgYnkgdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5UT1VDSF9DQU5DRUxcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9DQU5DRUw6IDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2Ugd2hlZWwgY2hhbmdlcy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1PVVNFX1dIRUVMXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfV0hFRUw6IDhcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElOUFVUX0NPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/BOOT_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/BOOT_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Boot Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it boots, signalling to all of its systems to create themselves.\r\n *\r\n * @event Phaser.Input.Events#BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvQk9PVF9FVkVOVC5qcz9hYmM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvQk9PVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gQm9vdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgYm9vdHMsIHNpZ25hbGxpbmcgdG8gYWxsIG9mIGl0cyBzeXN0ZW1zIHRvIGNyZWF0ZSB0aGVtc2VsdmVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNCT09UXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYm9vdCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/BOOT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DESTROY_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DESTROY_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Destroy Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it is destroyed, signalling to all of its systems to destroy themselves.\r\n *\r\n * @event Phaser.Input.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz81MDA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gRGVzdHJveSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgaXMgZGVzdHJveWVkLCBzaWduYWxsaW5nIHRvIGFsbCBvZiBpdHMgc3lzdGVtcyB0byBkZXN0cm95IHRoZW1zZWx2ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RFU1RST1lcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXN0cm95JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_END_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_END_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag End Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer stops dragging a Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragend', listener)`.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_END]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_END} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer stopped dragging.\r\n */\r\nmodule.exports = 'dragend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FTkRfRVZFTlQuanM/NGEwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RkFBeUYsd0RBQXdEO0FBQ2pKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0VORF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERyYWcgRW5kIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIHN0b3BzIGRyYWdnaW5nIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZ2VuZCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfRFJBR19FTkRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR19FTkR9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5EXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdGhhdCB0aGlzIHBvaW50ZXIgc3RvcHBlZCBkcmFnZ2luZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdlbmQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_END_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Enter Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object into a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragenter', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_ENTER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_ENTER} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_ENTER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved into.\r\n */\r\nmodule.exports = 'dragenter';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FTlRFUl9FVkVOVC5qcz8yNjIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0VOVEVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBFbnRlciBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IGludG8gYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcmFnZW50ZXInLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogQSBQb2ludGVyIGNhbiBvbmx5IGRyYWcgYSBzaW5nbGUgR2FtZSBPYmplY3QgYXQgb25jZS5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9EUkFHX0VOVEVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RSQUdfRU5URVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5URVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCB0aGF0IHRoaXMgcG9pbnRlciBpcyBkcmFnZ2luZy5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gdGFyZ2V0IC0gVGhlIGRyYWcgdGFyZ2V0IHRoYXQgdGhpcyBwb2ludGVyIGhhcyBtb3ZlZCBpbnRvLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VudGVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves while dragging a Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('drag', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'drag';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FVkVOVC5qcz82NTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsb0RBQW9EO0FBQ3pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RSQUdfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEcmFnIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIHdoaWxlIGRyYWdnaW5nIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZycsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR30gZXZlbnQgaW5zdGVhZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1ggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1kgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Leave Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object out of a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragleave', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_LEAVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_LEAVE} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_LEAVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has left.\r\n */\r\nmodule.exports = 'dragleave';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19MRUFWRV9FVkVOVC5qcz9iZmYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0xFQVZFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBMZWF2ZSBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IG91dCBvZiBhIERyYWcgVGFyZ2V0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2RyYWdsZWF2ZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdfTEVBVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR19MRUFWRX0gZXZlbnQgaW5zdGVhZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19MRUFWRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIGxlZnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnbGVhdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object over a Drag Target.\r\n * \r\n * When the Game Object first enters the drag target it will emit a `dragenter` event. If it then moves while within\r\n * the drag target, it will emit this event instead.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragover', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_OVER} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved over.\r\n */\r\nmodule.exports = 'dragover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19PVkVSX0VWRU5ULmpzPzE2NWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRix5REFBeUQ7QUFDbko7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RSQUdfT1ZFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERyYWcgT3ZlciBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IG92ZXIgYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIFdoZW4gdGhlIEdhbWUgT2JqZWN0IGZpcnN0IGVudGVycyB0aGUgZHJhZyB0YXJnZXQgaXQgd2lsbCBlbWl0IGEgYGRyYWdlbnRlcmAgZXZlbnQuIElmIGl0IHRoZW4gbW92ZXMgd2hpbGUgd2l0aGluXHJcbiAqIHRoZSBkcmFnIHRhcmdldCwgaXQgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcmFnb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9EUkFHX09WRVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfT1ZFUlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIG1vdmVkIG92ZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DRAG_START_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DRAG_START_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Start Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer starts to drag any Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragstart', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_START]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_START} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n */\r\nmodule.exports = 'dragstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19TVEFSVF9FVkVOVC5qcz9kMTQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBTdGFydCBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBzdGFydHMgdG8gZHJhZyBhbnkgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEEgUG9pbnRlciBjYW4gb25seSBkcmFnIGEgc2luZ2xlIEdhbWUgT2JqZWN0IGF0IG9uY2UuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfRFJBR19TVEFSVF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9EUkFHX1NUQVJUfSBldmVudCBpbnN0ZWFkLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNEUkFHX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdGhhdCB0aGlzIHBvaW50ZXIgaXMgZHJhZ2dpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/DROP_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/DROP_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drop Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drops a Game Object on a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('drop', listener)`.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DROP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DROP} event instead.\r\n *\r\n * @event Phaser.Input.Events#DROP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer was dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The Drag Target the `gameObject` has been dropped on.\r\n */\r\nmodule.exports = 'drop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJPUF9FVkVOVC5qcz9kYWU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRixvREFBb0Q7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RST1BfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEcm9wIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGRyb3BzIGEgR2FtZSBPYmplY3Qgb24gYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcm9wJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9EUk9QXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RST1B9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RST1BcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCB0aGF0IHRoaXMgcG9pbnRlciB3YXMgZHJhZ2dpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBEcmFnIFRhcmdldCB0aGUgYGdhbWVPYmplY3RgIGhhcyBiZWVuIGRyb3BwZWQgb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcm9wJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DROP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Down Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down on _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectdown', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was pressed down on.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9ET1dOX0VWRU5ULmpzPzllMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQixpREFBaUQsMkJBQTJCO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRG93biBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBpcyBwcmVzc2VkIGRvd24gb24gX2FueV8gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZ2FtZW9iamVjdGRvd24nLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3RzIG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOfSBldmVudCBpbnN0ZWFkLlxyXG4gKiBcclxuICogVGhlIGV2ZW50IGhpZXJhcmNoeSBpcyBhcyBmb2xsb3dzOlxyXG4gKiBcclxuICogMS4gW0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfRE9XTn1cclxuICogMi4gW0dBTUVPQkpFQ1RfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9ET1dOfVxyXG4gKiAzLiBbUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV059IG9yIFtQT0lOVEVSX0RPV05fT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRE9XTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIHdhcyBwcmVzc2VkIGRvd24gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0ZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag End Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer stops dragging it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragend', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive](Phaser.GameObjects.GameObject#setInteractive) for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer stopped dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer stopped dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'dragend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VORF9FVkVOVC5qcz9lZmNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19FTkRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRHJhZyBFbmQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIHN0b3BzIGRyYWdnaW5nIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZ2VuZCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV0oUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmUpIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19FTkRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBzdG9wcGVkIGRyYWdnaW5nIHRoZSBHYW1lIE9iamVjdCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkcmFnWSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIFBvaW50ZXIgc3RvcHBlZCBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VuZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Enter Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it into a drag target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragenter', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_ENTER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved into.\r\n */\r\nmodule.exports = 'dragenter';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VOVEVSX0VWRU5ULmpzPzUzODkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19FTlRFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcmFnIEVudGVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBpbnRvIGEgZHJhZyB0YXJnZXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdkcmFnZW50ZXInLCBsaXN0ZW5lcilgLlxyXG4gKiBOb3RlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBiZSB0aGUgR2FtZSBPYmplY3QgaW5zdGFuY2UgaXRzZWxmLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlIGFuZCBlbmFibGVkIGZvciBkcmFnLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdfRU5URVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gdGFyZ2V0IC0gVGhlIGRyYWcgdGFyZ2V0IHRoYXQgdGhpcyBwb2ludGVyIGhhcyBtb3ZlZCBpbnRvLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VudGVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves while dragging it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('drag', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'drag';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VWRU5ULmpzPzEwMDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IERyYWcgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIG1vdmVzIHdoaWxlIGRyYWdnaW5nIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZycsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1ggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1kgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Leave Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it out of a drag target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragleave', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_LEAVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has left.\r\n */\r\nmodule.exports = 'dragleave';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0xFQVZFX0VWRU5ULmpzPzNlZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19MRUFWRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcmFnIExlYXZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBvdXQgb2YgYSBkcmFnIHRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lIE9iamVjdCB1c2luZzogYGdhbWVPYmplY3Qub24oJ2RyYWdsZWF2ZScsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19MRUFWRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIGxlZnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnbGVhdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Over Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it over a drag target.\r\n * \r\n * When the Game Object first enters the drag target it will emit a `dragenter` event. If it then moves while within\r\n * the drag target, it will emit this event instead.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragover', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved over.\r\n */\r\nmodule.exports = 'dragover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQuanM/YWE2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRHJhZyBPdmVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBvdmVyIGEgZHJhZyB0YXJnZXQuXHJcbiAqIFxyXG4gKiBXaGVuIHRoZSBHYW1lIE9iamVjdCBmaXJzdCBlbnRlcnMgdGhlIGRyYWcgdGFyZ2V0IGl0IHdpbGwgZW1pdCBhIGBkcmFnZW50ZXJgIGV2ZW50LiBJZiBpdCB0aGVuIG1vdmVzIHdoaWxlIHdpdGhpblxyXG4gKiB0aGUgZHJhZyB0YXJnZXQsIGl0IHdpbGwgZW1pdCB0aGlzIGV2ZW50IGluc3RlYWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdkcmFnb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19PVkVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBkcmFnIHRhcmdldCB0aGF0IHRoaXMgcG9pbnRlciBoYXMgbW92ZWQgb3Zlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdvdmVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Start Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer starts to drag it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragstart', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * There are lots of useful drag related properties that are set within the Game Object when dragging occurs.\r\n * For example, `gameObject.input.dragStartX`, `dragStartY` and so on.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'dragstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX1NUQVJUX0VWRU5ULmpzP2M4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IERyYWcgU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIHN0YXJ0cyB0byBkcmFnIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpYC5cclxuICogTm90ZSB0aGF0IHRoZSBzY29wZSBvZiB0aGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYmUgdGhlIEdhbWUgT2JqZWN0IGluc3RhbmNlIGl0c2VsZi5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0IG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZSBhbmQgZW5hYmxlZCBmb3IgZHJhZy5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRoZXJlIGFyZSBsb3RzIG9mIHVzZWZ1bCBkcmFnIHJlbGF0ZWQgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgd2l0aGluIHRoZSBHYW1lIE9iamVjdCB3aGVuIGRyYWdnaW5nIG9jY3Vycy5cclxuICogRm9yIGV4YW1wbGUsIGBnYW1lT2JqZWN0LmlucHV0LmRyYWdTdGFydFhgLCBgZHJhZ1N0YXJ0WWAgYW5kIHNvIG9uLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdfU1RBUlRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBpcyBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIEdhbWUgT2JqZWN0LCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBpcyBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIEdhbWUgT2JqZWN0LCBpbiB3b3JsZCBzcGFjZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drop Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drops it on a Drag Target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('drop', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DROP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The Drag Target the `gameObject` has been dropped on.\r\n */\r\nmodule.exports = 'drop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUk9QX0VWRU5ULmpzPzhkNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJPUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcm9wIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcm9wcyBpdCBvbiBhIERyYWcgVGFyZ2V0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJvcCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJPUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgRHJhZyBUYXJnZXQgdGhlIGBnYW1lT2JqZWN0YCBoYXMgYmVlbiBkcm9wcGVkIG9uLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJvcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Move Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is moved across _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectmove', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was moved on.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectmove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9NT1ZFX0VWRU5ULmpzP2JlN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9NT1ZFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IE1vdmUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgbW92ZWQgYWNyb3NzIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3Rtb3ZlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0cyBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfUE9JTlRFUl9NT1ZFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfTU9WRX0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX01PVkV9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfTU9WRX1cclxuICogMy4gW1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9NT1ZFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGUgcG9pbnRlciB3YXMgbW92ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0bW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Out Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves out of _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectout', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer moved out of.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVVRfRVZFTlQuanM/ZTQyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQSw0RkFBNEYsMkRBQTJEO0FBQ3ZKO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX09VVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBPdXQgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgbW92ZXMgb3V0IG9mIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3RvdXQnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3RzIG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9QT0lOVEVSX09VVF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09VVH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX09VVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIG1vdmVkIG91dCBvZi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfSBldmVudCAtIFRoZSBQaGFzZXIgaW5wdXQgZXZlbnQuIFlvdSBjYW4gY2FsbCBgc3RvcFByb3BhZ2F0aW9uKClgIHRvIGhhbHQgaXQgZnJvbSBnb2luZyBhbnkgZnVydGhlciBpbiB0aGUgZXZlbnQgZmxvdy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2dhbWVvYmplY3RvdXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectover', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer moved over.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVkVSX0VWRU5ULmpzP2M0ZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVkVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IE92ZXIgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgbW92ZXMgb3ZlciBfYW55XyBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdnYW1lb2JqZWN0b3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09WRVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVkVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX09WRVJ9XHJcbiAqIDMuIFtQT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1ZFUn1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9PVkVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhlIHBvaW50ZXIgbW92ZWQgb3Zlci5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfSBldmVudCAtIFRoZSBQaGFzZXIgaW5wdXQgZXZlbnQuIFlvdSBjYW4gY2FsbCBgc3RvcFByb3BhZ2F0aW9uKClgIHRvIGhhbHQgaXQgZnJvbSBnb2luZyBhbnkgZnVydGhlciBpbiB0aGUgZXZlbnQgZmxvdy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2dhbWVvYmplY3RvdmVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Down Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is pressed down on it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerdown', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05fRVZFTlQuanM/ODczZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQixpREFBaUQsMkJBQTJCO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IFBvaW50ZXIgRG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIG9uIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbigncG9pbnRlcmRvd24nLCBsaXN0ZW5lcilgLlxyXG4gKiBOb3RlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBiZSB0aGUgR2FtZSBPYmplY3QgaW5zdGFuY2UgaXRzZWxmLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVGhlIGV2ZW50IGhpZXJhcmNoeSBpcyBhcyBmb2xsb3dzOlxyXG4gKiBcclxuICogMS4gW0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfRE9XTn1cclxuICogMi4gW0dBTUVPQkpFQ1RfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9ET1dOfVxyXG4gKiAzLiBbUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV059IG9yIFtQT0lOVEVSX0RPV05fT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2NhbFggLSBUaGUgeCBjb29yZGluYXRlIHRoYXQgdGhlIFBvaW50ZXIgaW50ZXJhY3RlZCB3aXRoIHRoaXMgb2JqZWN0IG9uLCByZWxhdGl2ZSB0byB0aGUgR2FtZSBPYmplY3QncyB0b3AtbGVmdCBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWSAtIFRoZSB5IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9pbnRlcmRvd24nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Move Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is moved while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointermove', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointermove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVfRVZFTlQuanM/M2U4NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfTU9WRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIE1vdmUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIGlzIG1vdmVkIHdoaWxlIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVybW92ZScsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9NT1ZFfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9NT1ZFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX01PVkV9XHJcbiAqIDMuIFtQT0lOVEVSX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfTU9WRX1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVybW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Out Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves out of it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerout', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX09VVF9FVkVOVC5qcz9hMTc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IFBvaW50ZXIgT3V0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBtb3ZlcyBvdXQgb2YgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVyb3V0JywgbGlzdGVuZXIpYC5cclxuICogTm90ZSB0aGF0IHRoZSBzY29wZSBvZiB0aGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYmUgdGhlIEdhbWUgT2JqZWN0IGluc3RhbmNlIGl0c2VsZi5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0IG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfT1VUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3V0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Over Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerover', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJfRVZFTlQuanM/YmNiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIE92ZXIgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIG1vdmVzIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVyb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVkVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX09WRVJ9XHJcbiAqIDMuIFtQT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1ZFUn1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Up Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is released while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerup', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX1VQX0VWRU5ULmpzP2ZiZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QixtQkFBbUIsK0NBQStDLHlCQUF5QjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgUG9pbnRlciBVcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgd2hpbGUgb3ZlciBpdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lIE9iamVjdCB1c2luZzogYGdhbWVPYmplY3Qub24oJ3BvaW50ZXJ1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfVVB9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1VQfVxyXG4gKiAzLiBbUE9JTlRFUl9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUH0gb3IgW1BPSU5URVJfVVBfT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUF9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Wheel Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer has its wheel moved while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('wheel', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'wheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMX0VWRU5ULmpzPzE1ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIFdoZWVsIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBoYXMgaXRzIHdoZWVsIG1vdmVkIHdoaWxlIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCd3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUx9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1dIRUVMfVxyXG4gKiAzLiBbUE9JTlRFUl9XSEVFTF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9XSEVFTH1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXHJcbiAqIEBzaW5jZSAzLjE4LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFYIC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGFtb3VudCB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgdXNlciBtb3ZpbmcgYSBtb3VzZSB3aGVlbCBvciBzaW1pbGFyIGlucHV0IGRldmljZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhWSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLiBUaGlzIHZhbHVlIHdpbGwgdHlwaWNhbGx5IGJlIGxlc3MgdGhhbiAwIGlmIHRoZSB1c2VyIHNjcm9sbHMgdXAgYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHNjcm9sbGluZyBkb3duLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFaIC0gVGhlIHotYXhpcyBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnd2hlZWwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Up Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released while over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectup', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was over when released.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9VUF9FVkVOVC5qcz9iMDA0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBLDJGQUEyRiwwREFBMEQ7QUFDcko7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QixtQkFBbUIsK0NBQStDLHlCQUF5QjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBVcCBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBpcyByZWxlYXNlZCB3aGlsZSBvdmVyIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3R1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH1cclxuICogMi4gW0dBTUVPQkpFQ1RfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfVVB9XHJcbiAqIDMuIFtQT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQfSBvciBbUE9JTlRFUl9VUF9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGUgcG9pbnRlciB3YXMgb3ZlciB3aGVuIHJlbGVhc2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZ2FtZW9iamVjdHVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Wheel Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer has its wheel moved while over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectwheel', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was over when the wheel changed.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectwheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9XSEVFTF9FVkVOVC5qcz9iMzBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBLDhGQUE4Riw2REFBNkQ7QUFDM0o7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfV0hFRUxfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgV2hlZWwgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaGFzIGl0cyB3aGVlbCBtb3ZlZCB3aGlsZSBvdmVyIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3R3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTH1cclxuICogMi4gW0dBTUVPQkpFQ1RfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfV0hFRUx9XHJcbiAqIDMuIFtQT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1dIRUVMfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1dIRUVMXHJcbiAqIEBzaW5jZSAzLjE4LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIHdhcyBvdmVyIHdoZW4gdGhlIHdoZWVsIGNoYW5nZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVggLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFZIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVogLSBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0d2hlZWwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Game Out Event.\r\n * \r\n * This event is dispatched by the Input Plugin if the active pointer leaves the game canvas and is now\r\n * outside of it, elsewhere on the web page.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameout', listener)`.\r\n *\r\n * @event Phaser.Input.Events#GAME_OUT\r\n * @since 3.16.1\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event that triggered the canvas out.\r\n */\r\nmodule.exports = 'gameout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRV9PVVRfRVZFTlQuanM/ZjAwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLHdCQUF3QjtBQUNuQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBHYW1lIE91dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGlmIHRoZSBhY3RpdmUgcG9pbnRlciBsZWF2ZXMgdGhlIGdhbWUgY2FudmFzIGFuZCBpcyBub3dcclxuICogb3V0c2lkZSBvZiBpdCwgZWxzZXdoZXJlIG9uIHRoZSB3ZWIgcGFnZS5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdnYW1lb3V0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRV9PVVRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHsoTW91c2VFdmVudHxUb3VjaEV2ZW50KX0gZXZlbnQgLSBUaGUgRE9NIEV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjYW52YXMgb3V0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZ2FtZW91dCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Game Over Event.\r\n * \r\n * This event is dispatched by the Input Plugin if the active pointer enters the game canvas and is now\r\n * over of it, having previously been elsewhere on the web page.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameover', listener)`.\r\n *\r\n * @event Phaser.Input.Events#GAME_OVER\r\n * @since 3.16.1\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event that triggered the canvas over.\r\n */\r\nmodule.exports = 'gameover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRV9PVkVSX0VWRU5ULmpzPzNlN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyx3QkFBd0I7QUFDbkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIEdhbWUgT3ZlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGlmIHRoZSBhY3RpdmUgcG9pbnRlciBlbnRlcnMgdGhlIGdhbWUgY2FudmFzIGFuZCBpcyBub3dcclxuICogb3ZlciBvZiBpdCwgaGF2aW5nIHByZXZpb3VzbHkgYmVlbiBlbHNld2hlcmUgb24gdGhlIHdlYiBwYWdlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvdmVyJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRV9PVkVSXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAqIEBwYXJhbSB7KE1vdXNlRXZlbnR8VG91Y2hFdmVudCl9IGV2ZW50IC0gVGhlIERPTSBFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY2FudmFzIG92ZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Boot Event.\r\n * \r\n * This internal event is dispatched by the Input Manager when it boots.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9CT09UX0VWRU5ULmpzP2NhOTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9NQU5BR0VSX0JPT1RfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgTWFuYWdlciBCb290IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4gaXQgYm9vdHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI01BTkFHRVJfQk9PVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Jvb3QnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Process Event.\r\n * \r\n * This internal event is dispatched by the Input Manager when not using the legacy queue system,\r\n * and it wants the Input Plugins to update themselves.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_PROCESS\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'process';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9QUk9DRVNTX0VWRU5ULmpzPzA2NzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9NQU5BR0VSX1BST0NFU1NfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgTWFuYWdlciBQcm9jZXNzIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4gbm90IHVzaW5nIHRoZSBsZWdhY3kgcXVldWUgc3lzdGVtLFxyXG4gKiBhbmQgaXQgd2FudHMgdGhlIElucHV0IFBsdWdpbnMgdG8gdXBkYXRlIHRoZW1zZWx2ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI01BTkFHRVJfUFJPQ0VTU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwcm9jZXNzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Update Event.\r\n * \r\n * This internal event is dispatched by the Input Manager as part of its update step.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_UPDATE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9VUERBVEVfRVZFTlQuanM/YjJhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL01BTkFHRVJfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IE1hbmFnZXIgVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZSBzdGVwLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNNQU5BR0VSX1VQREFURVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Pointer Lock Change Event.\r\n * \r\n * This event is dispatched by the Input Manager when it is processing a native Pointer Lock Change DOM Event.\r\n *\r\n * @event Phaser.Input.Events#POINTERLOCK_CHANGE\r\n * @since 3.0.0\r\n * \r\n * @param {Event} event - The native DOM Event.\r\n * @param {boolean} locked - The locked state of the Mouse Pointer.\r\n */\r\nmodule.exports = 'pointerlockchange';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUkxPQ0tfQ0hBTkdFX0VWRU5ULmpzPzk5NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUkxPQ0tfQ0hBTkdFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IE1hbmFnZXIgUG9pbnRlciBMb2NrIENoYW5nZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgTWFuYWdlciB3aGVuIGl0IGlzIHByb2Nlc3NpbmcgYSBuYXRpdmUgUG9pbnRlciBMb2NrIENoYW5nZSBET00gRXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJMT0NLX0NIQU5HRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gRXZlbnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9ja2VkIC0gVGhlIGxvY2tlZCBzdGF0ZSBvZiB0aGUgTW91c2UgUG9pbnRlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BvaW50ZXJsb2NrY2hhbmdlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Down Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerdown', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointerdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX0VWRU5ULmpzP2UwNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCLGlEQUFpRCwyQkFBMkI7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGdDQUFnQztBQUMzQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfRE9XTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERvd24gSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIGFueXdoZXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX0RPV059XHJcbiAqIDIuIFtHQU1FT0JKRUNUX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRE9XTn1cclxuICogMy4gW1BPSU5URVJfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOfSBvciBbUE9JTlRFUl9ET1dOX09VVFNJREVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfRE9XTl9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX0RPV05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Down Outside Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down anywhere outside of the game canvas.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerdownoutside', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_DOWN_OUTSIDE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n */\r\nmodule.exports = 'pointerdownoutside';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQuanM/ZWY4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLHdCQUF3QjtBQUN4QixxQkFBcUIsaURBQWlELDJCQUEyQjtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEb3duIE91dHNpZGUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIGFueXdoZXJlIG91dHNpZGUgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3dub3V0c2lkZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RPV059XHJcbiAqIDMuIFtQT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfRE9XTn0gb3IgW1BPSU5URVJfRE9XTl9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV05fT1VUU0lERX1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9ET1dOX09VVFNJREVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyZG93bm91dHNpZGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Move Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is moved anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointermove', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointermove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9NT1ZFX0VWRU5ULmpzP2MzMTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX01PVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBNb3ZlIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGlzIG1vdmVkIGFueXdoZXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJtb3ZlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX01PVkV9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfTU9WRX1cclxuICogMy4gW1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9NT1ZFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVybW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Out Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves out of any interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerup', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} justOut - An array containing all interactive Game Objects that the pointer moved out of when the event was created.\r\n */\r\nmodule.exports = 'pointerout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9PVVRfRVZFTlQuanM/NGQ5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLHVCQUF1QjtBQUN2QixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGdDQUFnQztBQUMzQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgT3V0IElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIG91dCBvZiBhbnkgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGp1c3RPdXQgLSBBbiBhcnJheSBjb250YWluaW5nIGFsbCBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdHMgdGhhdCB0aGUgcG9pbnRlciBtb3ZlZCBvdXQgb2Ygd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3V0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves over any interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerover', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} justOver - An array containing all interactive Game Objects that the pointer moved over when the event was created.\r\n */\r\nmodule.exports = 'pointerover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9PVkVSX0VWRU5ULmpzPzNmMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBPdmVyIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIG92ZXIgYW55IGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJvdmVyJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09WRVJ9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1ZFUn1cclxuICogMy4gW1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9PVkVSfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09WRVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBqdXN0T3ZlciAtIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cyB0aGF0IHRoZSBwb2ludGVyIG1vdmVkIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Up Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerup', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointerup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9VUF9FVkVOVC5qcz8xZjA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsc0JBQXNCO0FBQ3RCLG1CQUFtQiwrQ0FBK0MseUJBQXlCO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX1VQX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgVXAgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgYW55d2hlcmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH1cclxuICogMi4gW0dBTUVPQkpFQ1RfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfVVB9XHJcbiAqIDMuIFtQT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQfSBvciBbUE9JTlRFUl9VUF9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Up Outside Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released anywhere outside of the game canvas.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerupoutside', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_UP_OUTSIDE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n */\r\nmodule.exports = 'pointerupoutside';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9VUF9PVVRTSURFX0VWRU5ULmpzP2ViZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QixzQkFBc0I7QUFDdEIsbUJBQW1CLCtDQUErQyx5QkFBeUI7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfVVBfT1VUU0lERV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIFVwIE91dHNpZGUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgYW55d2hlcmUgb3V0c2lkZSBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwb3V0c2lkZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfVVB9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1VQfVxyXG4gKiAzLiBbUE9JTlRFUl9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUH0gb3IgW1BPSU5URVJfVVBfT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUF9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQX09VVFNJREVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXBvdXRzaWRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Wheel Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer has its wheel updated.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('wheel', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n */\r\nmodule.exports = 'wheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9XSEVFTF9FVkVOVC5qcz9jMjBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsZ0NBQWdDO0FBQzNDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9XSEVFTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIFdoZWVsIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGhhcyBpdHMgd2hlZWwgdXBkYXRlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCd3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUx9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1dIRUVMfVxyXG4gKiAzLiBbUE9JTlRFUl9XSEVFTF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9XSEVFTH1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9XSEVFTFxyXG4gKiBAc2luY2UgMy4xOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVggLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFZIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVogLSBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICd3aGVlbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Pre-Update Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin at the start of its `preUpdate` method.\r\n * This hook is designed specifically for input plugins, but can also be listened to from user-land code.\r\n *\r\n * @event Phaser.Input.Events#PRE_UPDATE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'preupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUFJFX1VQREFURV9FVkVOVC5qcz82NjQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QUkVfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBQcmUtVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYXQgdGhlIHN0YXJ0IG9mIGl0cyBgcHJlVXBkYXRlYCBtZXRob2QuXHJcbiAqIFRoaXMgaG9vayBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIGlucHV0IHBsdWdpbnMsIGJ1dCBjYW4gYWxzbyBiZSBsaXN0ZW5lZCB0byBmcm9tIHVzZXItbGFuZCBjb2RlLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQUkVfVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncHJldXBkYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Shutdown Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it shuts down, signalling to all of its systems to shut themselves down.\r\n *\r\n * @event Phaser.Input.Events#SHUTDOWN\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'shutdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU0hVVERPV05fRVZFTlQuanM/ZGE3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1NIVVRET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBTaHV0ZG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgc2h1dHMgZG93biwgc2lnbmFsbGluZyB0byBhbGwgb2YgaXRzIHN5c3RlbXMgdG8gc2h1dCB0aGVtc2VsdmVzIGRvd24uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1NIVVRET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc2h1dGRvd24nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/START_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/START_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Start Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it has finished setting-up,\r\n * signalling to all of its internal systems to start.\r\n *\r\n * @event Phaser.Input.Events#START\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU1RBUlRfRVZFTlQuanM/NWI3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gd2hlbiBpdCBoYXMgZmluaXNoZWQgc2V0dGluZy11cCxcclxuICogc2lnbmFsbGluZyB0byBhbGwgb2YgaXRzIGludGVybmFsIHN5c3RlbXMgdG8gc3RhcnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/UPDATE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/input/events/UPDATE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Update Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin at the start of its `update` method.\r\n * This hook is designed specifically for input plugins, but can also be listened to from user-land code.\r\n *\r\n * @event Phaser.Input.Events#UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvVVBEQVRFX0VWRU5ULmpzP2ExYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9VUERBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIFVwZGF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGF0IHRoZSBzdGFydCBvZiBpdHMgYHVwZGF0ZWAgbWV0aG9kLlxyXG4gKiBUaGlzIGhvb2sgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBpbnB1dCBwbHVnaW5zLCBidXQgY2FuIGFsc28gYmUgbGlzdGVuZWQgdG8gZnJvbSB1c2VyLWxhbmQgY29kZS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/events/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/input/events/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BOOT: __webpack_require__(/*! ./BOOT_EVENT */ \"./node_modules/phaser/src/input/events/BOOT_EVENT.js\"),\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/input/events/DESTROY_EVENT.js\"),\r\n    DRAG_END: __webpack_require__(/*! ./DRAG_END_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_END_EVENT.js\"),\r\n    DRAG_ENTER: __webpack_require__(/*! ./DRAG_ENTER_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js\"),\r\n    DRAG: __webpack_require__(/*! ./DRAG_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_EVENT.js\"),\r\n    DRAG_LEAVE: __webpack_require__(/*! ./DRAG_LEAVE_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js\"),\r\n    DRAG_OVER: __webpack_require__(/*! ./DRAG_OVER_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js\"),\r\n    DRAG_START: __webpack_require__(/*! ./DRAG_START_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_START_EVENT.js\"),\r\n    DROP: __webpack_require__(/*! ./DROP_EVENT */ \"./node_modules/phaser/src/input/events/DROP_EVENT.js\"),\r\n    GAME_OUT: __webpack_require__(/*! ./GAME_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js\"),\r\n    GAME_OVER: __webpack_require__(/*! ./GAME_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js\"),\r\n    GAMEOBJECT_DOWN: __webpack_require__(/*! ./GAMEOBJECT_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js\"),\r\n    GAMEOBJECT_DRAG_END: __webpack_require__(/*! ./GAMEOBJECT_DRAG_END_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js\"),\r\n    GAMEOBJECT_DRAG_ENTER: __webpack_require__(/*! ./GAMEOBJECT_DRAG_ENTER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js\"),\r\n    GAMEOBJECT_DRAG: __webpack_require__(/*! ./GAMEOBJECT_DRAG_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js\"),\r\n    GAMEOBJECT_DRAG_LEAVE: __webpack_require__(/*! ./GAMEOBJECT_DRAG_LEAVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js\"),\r\n    GAMEOBJECT_DRAG_OVER: __webpack_require__(/*! ./GAMEOBJECT_DRAG_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js\"),\r\n    GAMEOBJECT_DRAG_START: __webpack_require__(/*! ./GAMEOBJECT_DRAG_START_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js\"),\r\n    GAMEOBJECT_DROP: __webpack_require__(/*! ./GAMEOBJECT_DROP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js\"),\r\n    GAMEOBJECT_MOVE: __webpack_require__(/*! ./GAMEOBJECT_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js\"),\r\n    GAMEOBJECT_OUT: __webpack_require__(/*! ./GAMEOBJECT_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js\"),\r\n    GAMEOBJECT_OVER: __webpack_require__(/*! ./GAMEOBJECT_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_DOWN: __webpack_require__(/*! ./GAMEOBJECT_POINTER_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_MOVE: __webpack_require__(/*! ./GAMEOBJECT_POINTER_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_OUT: __webpack_require__(/*! ./GAMEOBJECT_POINTER_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_OVER: __webpack_require__(/*! ./GAMEOBJECT_POINTER_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_UP: __webpack_require__(/*! ./GAMEOBJECT_POINTER_UP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js\"),\r\n    GAMEOBJECT_POINTER_WHEEL: __webpack_require__(/*! ./GAMEOBJECT_POINTER_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js\"),\r\n    GAMEOBJECT_UP: __webpack_require__(/*! ./GAMEOBJECT_UP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js\"),\r\n    GAMEOBJECT_WHEEL: __webpack_require__(/*! ./GAMEOBJECT_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js\"),\r\n    MANAGER_BOOT: __webpack_require__(/*! ./MANAGER_BOOT_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js\"),\r\n    MANAGER_PROCESS: __webpack_require__(/*! ./MANAGER_PROCESS_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js\"),\r\n    MANAGER_UPDATE: __webpack_require__(/*! ./MANAGER_UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js\"),\r\n    POINTER_DOWN: __webpack_require__(/*! ./POINTER_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js\"),\r\n    POINTER_DOWN_OUTSIDE: __webpack_require__(/*! ./POINTER_DOWN_OUTSIDE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js\"),\r\n    POINTER_MOVE: __webpack_require__(/*! ./POINTER_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js\"),\r\n    POINTER_OUT: __webpack_require__(/*! ./POINTER_OUT_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js\"),\r\n    POINTER_OVER: __webpack_require__(/*! ./POINTER_OVER_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js\"),\r\n    POINTER_UP: __webpack_require__(/*! ./POINTER_UP_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js\"),\r\n    POINTER_UP_OUTSIDE: __webpack_require__(/*! ./POINTER_UP_OUTSIDE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js\"),\r\n    POINTER_WHEEL: __webpack_require__(/*! ./POINTER_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js\"),\r\n    POINTERLOCK_CHANGE: __webpack_require__(/*! ./POINTERLOCK_CHANGE_EVENT */ \"./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js\"),\r\n    PRE_UPDATE: __webpack_require__(/*! ./PRE_UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js\"),\r\n    SHUTDOWN: __webpack_require__(/*! ./SHUTDOWN_EVENT */ \"./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js\"),\r\n    START: __webpack_require__(/*! ./START_EVENT */ \"./node_modules/phaser/src/input/events/START_EVENT.js\"),\r\n    UPDATE: __webpack_require__(/*! ./UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/UPDATE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvaW5kZXguanM/MjA5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxhQUFhLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ3RDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsc0ZBQW9CO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLG9GQUFtQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsVUFBVSxtQkFBTyxDQUFDLDBFQUFjO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLG9GQUFtQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxnR0FBeUI7QUFDdEQseUJBQXlCLG1CQUFPLENBQUMsd0dBQTZCO0FBQzlELDJCQUEyQixtQkFBTyxDQUFDLDRHQUErQjtBQUNsRSxxQkFBcUIsbUJBQU8sQ0FBQyxnR0FBeUI7QUFDdEQsMkJBQTJCLG1CQUFPLENBQUMsNEdBQStCO0FBQ2xFLDBCQUEwQixtQkFBTyxDQUFDLDBHQUE4QjtBQUNoRSwyQkFBMkIsbUJBQU8sQ0FBQyw0R0FBK0I7QUFDbEUscUJBQXFCLG1CQUFPLENBQUMsZ0dBQXlCO0FBQ3RELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBd0I7QUFDcEQscUJBQXFCLG1CQUFPLENBQUMsZ0dBQXlCO0FBQ3RELDZCQUE2QixtQkFBTyxDQUFDLGdIQUFpQztBQUN0RSw2QkFBNkIsbUJBQU8sQ0FBQyxnSEFBaUM7QUFDdEUsNEJBQTRCLG1CQUFPLENBQUMsOEdBQWdDO0FBQ3BFLDZCQUE2QixtQkFBTyxDQUFDLGdIQUFpQztBQUN0RSwyQkFBMkIsbUJBQU8sQ0FBQyw0R0FBK0I7QUFDbEUsOEJBQThCLG1CQUFPLENBQUMsa0hBQWtDO0FBQ3hFLG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQyxrR0FBMEI7QUFDeEQsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ2hELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBd0I7QUFDcEQsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDBHQUE4QjtBQUNoRSxrQkFBa0IsbUJBQU8sQ0FBQywwRkFBc0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsd0ZBQXFCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLDBGQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsd0JBQXdCLG1CQUFPLENBQUMsc0dBQTRCO0FBQzVELG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyxzR0FBNEI7QUFDNUQsZ0JBQWdCLG1CQUFPLENBQUMsc0ZBQW9CO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLDRFQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyw4RUFBZ0I7O0FBRXBDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQk9PVDogcmVxdWlyZSgnLi9CT09UX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIERSQUdfRU5EOiByZXF1aXJlKCcuL0RSQUdfRU5EX0VWRU5UJyksXHJcbiAgICBEUkFHX0VOVEVSOiByZXF1aXJlKCcuL0RSQUdfRU5URVJfRVZFTlQnKSxcclxuICAgIERSQUc6IHJlcXVpcmUoJy4vRFJBR19FVkVOVCcpLFxyXG4gICAgRFJBR19MRUFWRTogcmVxdWlyZSgnLi9EUkFHX0xFQVZFX0VWRU5UJyksXHJcbiAgICBEUkFHX09WRVI6IHJlcXVpcmUoJy4vRFJBR19PVkVSX0VWRU5UJyksXHJcbiAgICBEUkFHX1NUQVJUOiByZXF1aXJlKCcuL0RSQUdfU1RBUlRfRVZFTlQnKSxcclxuICAgIERST1A6IHJlcXVpcmUoJy4vRFJPUF9FVkVOVCcpLFxyXG4gICAgR0FNRV9PVVQ6IHJlcXVpcmUoJy4vR0FNRV9PVVRfRVZFTlQnKSxcclxuICAgIEdBTUVfT1ZFUjogcmVxdWlyZSgnLi9HQU1FX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRE9XTjogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RPV05fRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJBR19FTkQ6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9EUkFHX0VORF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX0VOVEVSOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19FTlRFUl9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX0xFQVZFOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19MRUFWRV9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJBR19TVEFSVDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RSQUdfU1RBUlRfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJPUDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RST1BfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfTU9WRTogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX01PVkVfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfT1VUOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfT1VUX0VWRU5UJyksXHJcbiAgICBHQU1FT0JKRUNUX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9PVkVSX0VWRU5UJyksXHJcbiAgICBHQU1FT0JKRUNUX1BPSU5URVJfRE9XTjogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfRE9XTl9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9QT0lOVEVSX01PVkU6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9PVVQ6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX09VVF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9QT0lOVEVSX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9VUDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfVVBfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfVVA6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9VUF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9XSEVFTDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1dIRUVMX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX0JPT1Q6IHJlcXVpcmUoJy4vTUFOQUdFUl9CT09UX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX1BST0NFU1M6IHJlcXVpcmUoJy4vTUFOQUdFUl9QUk9DRVNTX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX1VQREFURTogcmVxdWlyZSgnLi9NQU5BR0VSX1VQREFURV9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUl9ET1dOOiByZXF1aXJlKCcuL1BPSU5URVJfRE9XTl9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUl9ET1dOX09VVFNJREU6IHJlcXVpcmUoJy4vUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfTU9WRTogcmVxdWlyZSgnLi9QT0lOVEVSX01PVkVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfT1VUOiByZXF1aXJlKCcuL1BPSU5URVJfT1VUX0VWRU5UJyksXHJcbiAgICBQT0lOVEVSX09WRVI6IHJlcXVpcmUoJy4vUE9JTlRFUl9PVkVSX0VWRU5UJyksXHJcbiAgICBQT0lOVEVSX1VQOiByZXF1aXJlKCcuL1BPSU5URVJfVVBfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfVVBfT1VUU0lERTogcmVxdWlyZSgnLi9QT0lOVEVSX1VQX09VVFNJREVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfV0hFRUw6IHJlcXVpcmUoJy4vUE9JTlRFUl9XSEVFTF9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUkxPQ0tfQ0hBTkdFOiByZXF1aXJlKCcuL1BPSU5URVJMT0NLX0NIQU5HRV9FVkVOVCcpLFxyXG4gICAgUFJFX1VQREFURTogcmVxdWlyZSgnLi9QUkVfVVBEQVRFX0VWRU5UJyksXHJcbiAgICBTSFVURE9XTjogcmVxdWlyZSgnLi9TSFVURE9XTl9FVkVOVCcpLFxyXG4gICAgU1RBUlQ6IHJlcXVpcmUoJy4vU1RBUlRfRVZFTlQnKSxcclxuICAgIFVQREFURTogcmVxdWlyZSgnLi9VUERBVEVfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/Axis.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/Axis.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Contains information about a specific Gamepad Axis.\r\n * Axis objects are created automatically by the Gamepad as they are needed.\r\n *\r\n * @class Axis\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.Gamepad} pad - A reference to the Gamepad that this Axis belongs to.\r\n * @param {integer} index - The index of this Axis.\r\n */\r\nvar Axis = new Class({\r\n\r\n    initialize:\r\n\r\n    function Axis (pad, index)\r\n    {\r\n        /**\r\n         * A reference to the Gamepad that this Axis belongs to.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Axis#pad\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @since 3.0.0\r\n         */\r\n        this.pad = pad;\r\n\r\n        /**\r\n         * An event emitter to use to emit the axis events.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Axis#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = pad.events;\r\n\r\n        /**\r\n         * The index of this Axis.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Axis#index\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.index = index;\r\n\r\n        /**\r\n         * The raw axis value, between -1 and 1 with 0 being dead center.\r\n         * Use the method `getValue` to get a normalized value with the threshold applied.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Axis#value\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.value = 0;\r\n\r\n        /**\r\n         * Movement tolerance threshold below which axis values are ignored in `getValue`.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Axis#threshold\r\n         * @type {number}\r\n         * @default 0.1\r\n         * @since 3.0.0\r\n         */\r\n        this.threshold = 0.1;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler for this Axis.\r\n     * Called automatically by the Gamepad as part of its update.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Axis#update\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The value of the axis movement.\r\n     */\r\n    update: function (value)\r\n    {\r\n        this.value = value;\r\n    },\r\n\r\n    /**\r\n     * Applies the `threshold` value to the axis and returns it.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Axis#getValue\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The axis value, adjusted for the movement threshold.\r\n     */\r\n    getValue: function ()\r\n    {\r\n        return (Math.abs(this.value) < this.threshold) ? 0 : this.value;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Axis instance and releases external references it holds.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Axis#destroy\r\n     * @since 3.10.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.pad = null;\r\n        this.events = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Axis;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0F4aXMuanM/YTBhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvQXhpcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgR2FtZXBhZCBBeGlzLlxyXG4gKiBBeGlzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBhcyB0aGV5IGFyZSBuZWVkZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBBeGlzXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEF4aXMgYmVsb25ncyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGlzIEF4aXMuXHJcbiAqL1xyXG52YXIgQXhpcyA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBeGlzIChwYWQsIGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lcGFkIHRoYXQgdGhpcyBBeGlzIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI3BhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkID0gcGFkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBldmVudCBlbWl0dGVyIHRvIHVzZSB0byBlbWl0IHRoZSBheGlzIGV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gcGFkLmV2ZW50cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluZGV4IG9mIHRoaXMgQXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjaW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByYXcgYXhpcyB2YWx1ZSwgYmV0d2VlbiAtMSBhbmQgMSB3aXRoIDAgYmVpbmcgZGVhZCBjZW50ZXIuXHJcbiAgICAgICAgICogVXNlIHRoZSBtZXRob2QgYGdldFZhbHVlYCB0byBnZXQgYSBub3JtYWxpemVkIHZhbHVlIHdpdGggdGhlIHRocmVzaG9sZCBhcHBsaWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQXhpcyN2YWx1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3ZlbWVudCB0b2xlcmFuY2UgdGhyZXNob2xkIGJlbG93IHdoaWNoIGF4aXMgdmFsdWVzIGFyZSBpZ25vcmVkIGluIGBnZXRWYWx1ZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI3RocmVzaG9sZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC4xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAwLjE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgZm9yIHRoaXMgQXhpcy5cclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHYW1lcGFkIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBheGlzIG1vdmVtZW50LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgYHRocmVzaG9sZGAgdmFsdWUgdG8gdGhlIGF4aXMgYW5kIHJldHVybnMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI2dldFZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBheGlzIHZhbHVlLCBhZGp1c3RlZCBmb3IgdGhlIG1vdmVtZW50IHRocmVzaG9sZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChNYXRoLmFicyh0aGlzLnZhbHVlKSA8IHRoaXMudGhyZXNob2xkKSA/IDAgOiB0aGlzLnZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgQXhpcyBpbnN0YW5jZSBhbmQgcmVsZWFzZXMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXhpcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Axis.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/Button.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/Button.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Contains information about a specific button on a Gamepad.\r\n * Button objects are created automatically by the Gamepad as they are needed.\r\n *\r\n * @class Button\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.Gamepad} pad - A reference to the Gamepad that this Button belongs to.\r\n * @param {integer} index - The index of this Button.\r\n */\r\nvar Button = new Class({\r\n\r\n    initialize:\r\n\r\n    function Button (pad, index)\r\n    {\r\n        /**\r\n         * A reference to the Gamepad that this Button belongs to.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#pad\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @since 3.0.0\r\n         */\r\n        this.pad = pad;\r\n\r\n        /**\r\n         * An event emitter to use to emit the button events.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events = pad.manager;\r\n\r\n        /**\r\n         * The index of this Button.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#index\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.index = index;\r\n\r\n        /**\r\n         * Between 0 and 1.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#value\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.value = 0;\r\n\r\n        /**\r\n         * Can be set for analogue buttons to enable a 'pressure' threshold,\r\n         * before a button is considered as being 'pressed'.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#threshold\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.threshold = 1;\r\n\r\n        /**\r\n         * Is the Button being pressed down or not?\r\n         *\r\n         * @name Phaser.Input.Gamepad.Button#pressed\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.pressed = false;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler for this Button.\r\n     * Called automatically by the Gamepad as part of its update.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Button#update\r\n     * @fires Phaser.Input.Gamepad.Events#BUTTON_DOWN\r\n     * @fires Phaser.Input.Gamepad.Events#BUTTON_UP\r\n     * @fires Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_DOWN\r\n     * @fires Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_UP\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The value of the button. Between 0 and 1.\r\n     */\r\n    update: function (value)\r\n    {\r\n        this.value = value;\r\n\r\n        var pad = this.pad;\r\n        var index = this.index;\r\n\r\n        if (value >= this.threshold)\r\n        {\r\n            if (!this.pressed)\r\n            {\r\n                this.pressed = true;\r\n                this.events.emit(Events.BUTTON_DOWN, pad, this, value);\r\n                this.pad.emit(Events.GAMEPAD_BUTTON_DOWN, index, value, this);\r\n            }\r\n        }\r\n        else if (this.pressed)\r\n        {\r\n            this.pressed = false;\r\n            this.events.emit(Events.BUTTON_UP, pad, this, value);\r\n            this.pad.emit(Events.GAMEPAD_BUTTON_UP, index, value, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Button instance and releases external references it holds.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Button#destroy\r\n     * @since 3.10.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.pad = null;\r\n        this.events = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Button;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0J1dHRvbi5qcz9iYjY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGFBQWEsbUJBQU8sQ0FBQyx5RUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0J1dHRvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGJ1dHRvbiBvbiBhIEdhbWVwYWQuXHJcbiAqIEJ1dHRvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEdhbWVwYWQgYXMgdGhleSBhcmUgbmVlZGVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgQnV0dG9uXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEJ1dHRvbiBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoaXMgQnV0dG9uLlxyXG4gKi9cclxudmFyIEJ1dHRvbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCdXR0b24gKHBhZCwgaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEJ1dHRvbiBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9uI3BhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkID0gcGFkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBldmVudCBlbWl0dGVyIHRvIHVzZSB0byBlbWl0IHRoZSBidXR0b24gZXZlbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9uI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IHBhZC5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyBCdXR0b24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jaW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiN2YWx1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW4gYmUgc2V0IGZvciBhbmFsb2d1ZSBidXR0b25zIHRvIGVuYWJsZSBhICdwcmVzc3VyZScgdGhyZXNob2xkLFxyXG4gICAgICAgICAqIGJlZm9yZSBhIGJ1dHRvbiBpcyBjb25zaWRlcmVkIGFzIGJlaW5nICdwcmVzc2VkJy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiN0aHJlc2hvbGRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoZSBCdXR0b24gYmVpbmcgcHJlc3NlZCBkb3duIG9yIG5vdD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiNwcmVzc2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUgaGFuZGxlciBmb3IgdGhpcyBCdXR0b24uXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBhcyBwYXJ0IG9mIGl0cyB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jdXBkYXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0JVVFRPTl9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0JVVFRPTl9VUFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0dBTUVQQURfQlVUVE9OX1VQXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24uIEJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcGFkID0gdGhpcy5wYWQ7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMudGhyZXNob2xkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5CVVRUT05fRE9XTiwgcGFkLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZC5lbWl0KEV2ZW50cy5HQU1FUEFEX0JVVFRPTl9ET1dOLCBpbmRleCwgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJlc3NlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5CVVRUT05fVVAsIHBhZCwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnBhZC5lbWl0KEV2ZW50cy5HQU1FUEFEX0JVVFRPTl9VUCwgaW5kZXgsIHZhbHVlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCdXR0b24gaW5zdGFuY2UgYW5kIHJlbGVhc2VzIGV4dGVybmFsIHJlZmVyZW5jZXMgaXQgaG9sZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQnV0dG9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Button.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/Gamepad.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/Gamepad.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Axis = __webpack_require__(/*! ./Axis */ \"./node_modules/phaser/src/input/gamepad/Axis.js\");\r\nvar Button = __webpack_require__(/*! ./Button */ \"./node_modules/phaser/src/input/gamepad/Button.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Gamepad.\r\n *\r\n * These are created, updated and managed by the Gamepad Plugin.\r\n *\r\n * @class Gamepad\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.GamepadPlugin} manager - A reference to the Gamepad Plugin.\r\n * @param {Phaser.Types.Input.Gamepad.Pad} pad - The Gamepad object, as extracted from GamepadEvent.\r\n */\r\nvar Gamepad = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Gamepad (manager, pad)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Gamepad Plugin.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#manager\r\n         * @type {Phaser.Input.Gamepad.GamepadPlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * A reference to the native Gamepad object that is connected to the browser.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#pad\r\n         * @type {any}\r\n         * @since 3.10.0\r\n         */\r\n        this.pad = pad;\r\n\r\n        /**\r\n         * A string containing some information about the controller.\r\n         *\r\n         * This is not strictly specified, but in Firefox it will contain three pieces of information\r\n         * separated by dashes (-): two 4-digit hexadecimal strings containing the USB vendor and\r\n         * product id of the controller, and the name of the controller as provided by the driver.\r\n         * In Chrome it will contain the name of the controller as provided by the driver,\r\n         * followed by vendor and product 4-digit hexadecimal strings.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#id\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.id = pad.id;\r\n\r\n        /**\r\n         * An integer that is unique for each Gamepad currently connected to the system.\r\n         * This can be used to distinguish multiple controllers.\r\n         * Note that disconnecting a device and then connecting a new device may reuse the previous index.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#index\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.index = pad.index;\r\n\r\n        var buttons = [];\r\n\r\n        for (var i = 0; i < pad.buttons.length; i++)\r\n        {\r\n            buttons.push(new Button(this, i));\r\n        }\r\n\r\n        /**\r\n         * An array of Gamepad Button objects, corresponding to the different buttons available on the Gamepad.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#buttons\r\n         * @type {Phaser.Input.Gamepad.Button[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.buttons = buttons;\r\n\r\n        var axes = [];\r\n\r\n        for (i = 0; i < pad.axes.length; i++)\r\n        {\r\n            axes.push(new Axis(this, i));\r\n        }\r\n\r\n        /**\r\n         * An array of Gamepad Axis objects, corresponding to the different axes available on the Gamepad, if any.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#axes\r\n         * @type {Phaser.Input.Gamepad.Axis[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.axes = axes;\r\n\r\n        /**\r\n         * The Gamepad's Haptic Actuator (Vibration / Rumble support).\r\n         * This is highly experimental and only set if both present on the device,\r\n         * and exposed by both the hardware and browser.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#vibration\r\n         * @type {GamepadHapticActuator}\r\n         * @since 3.10.0\r\n         */\r\n        this.vibration = pad.vibrationActuator;\r\n\r\n        // https://w3c.github.io/gamepad/#remapping\r\n\r\n        var _noButton = { value: 0, pressed: false };\r\n\r\n        /**\r\n         * A reference to the Left Button in the Left Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_LCLeft\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._LCLeft = (buttons[14]) ? buttons[14] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Right Button in the Left Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_LCRight\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._LCRight = (buttons[15]) ? buttons[15] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Top Button in the Left Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_LCTop\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._LCTop = (buttons[12]) ? buttons[12] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Bottom Button in the Left Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_LCBottom\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._LCBottom = (buttons[13]) ? buttons[13] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Left Button in the Right Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_RCLeft\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._RCLeft = (buttons[2]) ? buttons[2] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Right Button in the Right Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_RCRight\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._RCRight = (buttons[1]) ? buttons[1] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Top Button in the Right Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_RCTop\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._RCTop = (buttons[3]) ? buttons[3] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Bottom Button in the Right Cluster.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_RCBottom\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._RCBottom = (buttons[0]) ? buttons[0] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Top Left Front Button (L1 Shoulder Button)\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_FBLeftTop\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._FBLeftTop = (buttons[4]) ? buttons[4] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Bottom Left Front Button (L2 Shoulder Button)\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_FBLeftBottom\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._FBLeftBottom = (buttons[6]) ? buttons[6] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Top Right Front Button (R1 Shoulder Button)\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_FBRightTop\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._FBRightTop = (buttons[5]) ? buttons[5] : _noButton;\r\n\r\n        /**\r\n         * A reference to the Bottom Right Front Button (R2 Shoulder Button)\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_FBRightBottom\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._FBRightBottom = (buttons[7]) ? buttons[7] : _noButton;\r\n\r\n        var _noAxis = { value: 0 };\r\n\r\n        /**\r\n         * A reference to the Horizontal Axis for the Left Stick.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_HAxisLeft\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._HAxisLeft = (axes[0]) ? axes[0] : _noAxis;\r\n\r\n        /**\r\n         * A reference to the Vertical Axis for the Left Stick.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_VAxisLeft\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._VAxisLeft = (axes[1]) ? axes[1] : _noAxis;\r\n\r\n        /**\r\n         * A reference to the Horizontal Axis for the Right Stick.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_HAxisRight\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._HAxisRight = (axes[2]) ? axes[2] : _noAxis;\r\n\r\n        /**\r\n         * A reference to the Vertical Axis for the Right Stick.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#_VAxisRight\r\n         * @type {Phaser.Input.Gamepad.Button}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._VAxisRight = (axes[3]) ? axes[3] : _noAxis;\r\n\r\n        /**\r\n         * A Vector2 containing the most recent values from the Gamepad's left axis stick.\r\n         * This is updated automatically as part of the Gamepad.update cycle.\r\n         * The H Axis is mapped to the `Vector2.x` property, and the V Axis to the `Vector2.y` property.\r\n         * The values are based on the Axis thresholds.\r\n         * If the Gamepad does not have a left axis stick, the values will always be zero.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#leftStick\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.10.0\r\n         */\r\n        this.leftStick = new Vector2();\r\n\r\n        /**\r\n         * A Vector2 containing the most recent values from the Gamepad's right axis stick.\r\n         * This is updated automatically as part of the Gamepad.update cycle.\r\n         * The H Axis is mapped to the `Vector2.x` property, and the V Axis to the `Vector2.y` property.\r\n         * The values are based on the Axis thresholds.\r\n         * If the Gamepad does not have a right axis stick, the values will always be zero.\r\n         *\r\n         * @name Phaser.Input.Gamepad.Gamepad#rightStick\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.10.0\r\n         */\r\n        this.rightStick = new Vector2();\r\n    },\r\n\r\n    /**\r\n     * Gets the total number of axis this Gamepad claims to support.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#getAxisTotal\r\n     * @since 3.10.0\r\n     *\r\n     * @return {integer} The total number of axes this Gamepad claims to support.\r\n     */\r\n    getAxisTotal: function ()\r\n    {\r\n        return this.axes.length;\r\n    },\r\n\r\n    /**\r\n     * Gets the value of an axis based on the given index.\r\n     * The index must be valid within the range of axes supported by this Gamepad.\r\n     * The return value will be a float between 0 and 1.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#getAxisValue\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} index - The index of the axes to get the value for.\r\n     *\r\n     * @return {number} The value of the axis, between 0 and 1.\r\n     */\r\n    getAxisValue: function (index)\r\n    {\r\n        return this.axes[index].getValue();\r\n    },\r\n\r\n    /**\r\n     * Sets the threshold value of all axis on this Gamepad.\r\n     * The value is a float between 0 and 1 and is the amount below which the axis is considered as not having been moved.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#setAxisThreshold\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} value - A value between 0 and 1.\r\n     */\r\n    setAxisThreshold: function (value)\r\n    {\r\n        for (var i = 0; i < this.axes.length; i++)\r\n        {\r\n            this.axes[i].threshold = value;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Gets the total number of buttons this Gamepad claims to have.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#getButtonTotal\r\n     * @since 3.10.0\r\n     *\r\n     * @return {integer} The total number of buttons this Gamepad claims to have.\r\n     */\r\n    getButtonTotal: function ()\r\n    {\r\n        return this.buttons.length;\r\n    },\r\n\r\n    /**\r\n     * Gets the value of a button based on the given index.\r\n     * The index must be valid within the range of buttons supported by this Gamepad.\r\n     *\r\n     * The return value will be either 0 or 1 for an analogue button, or a float between 0 and 1\r\n     * for a pressure-sensitive digital button, such as the shoulder buttons on a Dual Shock.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#getButtonValue\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} index - The index of the button to get the value for.\r\n     *\r\n     * @return {number} The value of the button, between 0 and 1.\r\n     */\r\n    getButtonValue: function (index)\r\n    {\r\n        return this.buttons[index].value;\r\n    },\r\n\r\n    /**\r\n     * Returns if the button is pressed down or not.\r\n     * The index must be valid within the range of buttons supported by this Gamepad.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#isButtonDown\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} index - The index of the button to get the value for.\r\n     *\r\n     * @return {boolean} `true` if the button is considered as being pressed down, otherwise `false`.\r\n     */\r\n    isButtonDown: function (index)\r\n    {\r\n        return this.buttons[index].pressed;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler for this Gamepad.\r\n     * Called automatically by the Gamepad Manager as part of its update.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#update\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    update: function (pad)\r\n    {\r\n        var i;\r\n\r\n        //  Sync the button values\r\n\r\n        var localButtons = this.buttons;\r\n        var gamepadButtons = pad.buttons;\r\n\r\n        var len = localButtons.length;\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            localButtons[i].update(gamepadButtons[i].value);\r\n        }\r\n\r\n        //  Sync the axis values\r\n\r\n        var localAxes = this.axes;\r\n        var gamepadAxes = pad.axes;\r\n\r\n        len = localAxes.length;\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            localAxes[i].update(gamepadAxes[i]);\r\n        }\r\n\r\n        if (len >= 2)\r\n        {\r\n            this.leftStick.set(localAxes[0].getValue(), localAxes[1].getValue());\r\n\r\n            if (len >= 4)\r\n            {\r\n                this.rightStick.set(localAxes[2].getValue(), localAxes[3].getValue());\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Gamepad instance, its buttons and axes, and releases external references it holds.\r\n     *\r\n     * @method Phaser.Input.Gamepad.Gamepad#destroy\r\n     * @since 3.10.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.manager = null;\r\n        this.pad = null;\r\n\r\n        var i;\r\n\r\n        for (i = 0; i < this.buttons.length; i++)\r\n        {\r\n            this.buttons[i].destroy();\r\n        }\r\n\r\n        for (i = 0; i < this.axes.length; i++)\r\n        {\r\n            this.axes[i].destroy();\r\n        }\r\n\r\n        this.buttons = [];\r\n        this.axes = [];\r\n    },\r\n\r\n    /**\r\n     * Is this Gamepad currently connected or not?\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#connected\r\n     * @type {boolean}\r\n     * @default true\r\n     * @since 3.0.0\r\n     */\r\n    connected: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.pad.connected;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A timestamp containing the most recent time this Gamepad was updated.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#timestamp\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    timestamp: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.pad.timestamp;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's Left button being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * This is the d-pad left button under standard Gamepad mapping.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#left\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._LCLeft.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's Right button being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * This is the d-pad right button under standard Gamepad mapping.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#right\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._LCRight.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's Up button being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * This is the d-pad up button under standard Gamepad mapping.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#up\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    up: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._LCTop.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's Down button being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * This is the d-pad down button under standard Gamepad mapping.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#down\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    down: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._LCBottom.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's bottom button in the right button cluster being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * On a Dual Shock controller it's the X button.\r\n     * On an XBox controller it's the A button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#A\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    A: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._RCBottom.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's top button in the right button cluster being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * On a Dual Shock controller it's the Triangle button.\r\n     * On an XBox controller it's the Y button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#Y\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    Y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._RCTop.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's left button in the right button cluster being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * On a Dual Shock controller it's the Square button.\r\n     * On an XBox controller it's the X button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#X\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    X: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._RCLeft.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Gamepad's right button in the right button cluster being pressed?\r\n     * If the Gamepad doesn't have this button it will always return false.\r\n     * On a Dual Shock controller it's the Circle button.\r\n     * On an XBox controller it's the B button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#B\r\n     * @type {boolean}\r\n     * @since 3.10.0\r\n     */\r\n    B: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._RCRight.pressed;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the value of the Gamepad's top left shoulder button.\r\n     * If the Gamepad doesn't have this button it will always return zero.\r\n     * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n     * On a Dual Shock controller it's the L1 button.\r\n     * On an XBox controller it's the LB button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#L1\r\n     * @type {number}\r\n     * @since 3.10.0\r\n     */\r\n    L1: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._FBLeftTop.value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the value of the Gamepad's bottom left shoulder button.\r\n     * If the Gamepad doesn't have this button it will always return zero.\r\n     * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n     * On a Dual Shock controller it's the L2 button.\r\n     * On an XBox controller it's the LT button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#L2\r\n     * @type {number}\r\n     * @since 3.10.0\r\n     */\r\n    L2: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._FBLeftBottom.value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the value of the Gamepad's top right shoulder button.\r\n     * If the Gamepad doesn't have this button it will always return zero.\r\n     * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n     * On a Dual Shock controller it's the R1 button.\r\n     * On an XBox controller it's the RB button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#R1\r\n     * @type {number}\r\n     * @since 3.10.0\r\n     */\r\n    R1: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._FBRightTop.value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the value of the Gamepad's bottom right shoulder button.\r\n     * If the Gamepad doesn't have this button it will always return zero.\r\n     * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n     * On a Dual Shock controller it's the R2 button.\r\n     * On an XBox controller it's the RT button.\r\n     *\r\n     * @name Phaser.Input.Gamepad.Gamepad#R2\r\n     * @type {number}\r\n     * @since 3.10.0\r\n     */\r\n    R2: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._FBRightBottom.value;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Gamepad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWQuanM/NGQyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLCtEQUFRO0FBQzNCLGFBQWEsbUJBQU8sQ0FBQyxtRUFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUNBQW1DO0FBQzlDLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9HYW1lcGFkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXhpcyA9IHJlcXVpcmUoJy4vQXhpcycpO1xyXG52YXIgQnV0dG9uID0gcmVxdWlyZSgnLi9CdXR0b24nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEdhbWVwYWQuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkLCB1cGRhdGVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBHYW1lcGFkIFBsdWdpbi5cclxuICpcclxuICogQGNsYXNzIEdhbWVwYWRcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5HYW1lcGFkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2lufSBtYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgUGx1Z2luLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5HYW1lcGFkLlBhZH0gcGFkIC0gVGhlIEdhbWVwYWQgb2JqZWN0LCBhcyBleHRyYWN0ZWQgZnJvbSBHYW1lcGFkRXZlbnQuXHJcbiAqL1xyXG52YXIgR2FtZXBhZCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZXBhZCAobWFuYWdlciwgcGFkKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZXBhZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIEdhbWVwYWQgb2JqZWN0IHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBicm93c2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNwYWRcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhZCA9IHBhZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzdHJpbmcgY29udGFpbmluZyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cm9sbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBub3Qgc3RyaWN0bHkgc3BlY2lmaWVkLCBidXQgaW4gRmlyZWZveCBpdCB3aWxsIGNvbnRhaW4gdGhyZWUgcGllY2VzIG9mIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICogc2VwYXJhdGVkIGJ5IGRhc2hlcyAoLSk6IHR3byA0LWRpZ2l0IGhleGFkZWNpbWFsIHN0cmluZ3MgY29udGFpbmluZyB0aGUgVVNCIHZlbmRvciBhbmRcclxuICAgICAgICAgKiBwcm9kdWN0IGlkIG9mIHRoZSBjb250cm9sbGVyLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgYXMgcHJvdmlkZWQgYnkgdGhlIGRyaXZlci5cclxuICAgICAgICAgKiBJbiBDaHJvbWUgaXQgd2lsbCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIGFzIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIsXHJcbiAgICAgICAgICogZm9sbG93ZWQgYnkgdmVuZG9yIGFuZCBwcm9kdWN0IDQtZGlnaXQgaGV4YWRlY2ltYWwgc3RyaW5ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjaWRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaWQgPSBwYWQuaWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVnZXIgdGhhdCBpcyB1bmlxdWUgZm9yIGVhY2ggR2FtZXBhZCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0uXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZSBjb250cm9sbGVycy5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgZGlzY29ubmVjdGluZyBhIGRldmljZSBhbmQgdGhlbiBjb25uZWN0aW5nIGEgbmV3IGRldmljZSBtYXkgcmV1c2UgdGhlIHByZXZpb3VzIGluZGV4LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNpbmRleFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IHBhZC5pbmRleDtcclxuXHJcbiAgICAgICAgdmFyIGJ1dHRvbnMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWQuYnV0dG9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1dHRvbnMucHVzaChuZXcgQnV0dG9uKHRoaXMsIGkpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIEdhbWVwYWQgQnV0dG9uIG9iamVjdHMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpZmZlcmVudCBidXR0b25zIGF2YWlsYWJsZSBvbiB0aGUgR2FtZXBhZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjYnV0dG9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b25bXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBidXR0b25zO1xyXG5cclxuICAgICAgICB2YXIgYXhlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkLmF4ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBheGVzLnB1c2gobmV3IEF4aXModGhpcywgaSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgR2FtZXBhZCBBeGlzIG9iamVjdHMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpZmZlcmVudCBheGVzIGF2YWlsYWJsZSBvbiB0aGUgR2FtZXBhZCwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNheGVzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXNbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF4ZXMgPSBheGVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR2FtZXBhZCdzIEhhcHRpYyBBY3R1YXRvciAoVmlicmF0aW9uIC8gUnVtYmxlIHN1cHBvcnQpLlxyXG4gICAgICAgICAqIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBhbmQgb25seSBzZXQgaWYgYm90aCBwcmVzZW50IG9uIHRoZSBkZXZpY2UsXHJcbiAgICAgICAgICogYW5kIGV4cG9zZWQgYnkgYm90aCB0aGUgaGFyZHdhcmUgYW5kIGJyb3dzZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3ZpYnJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtHYW1lcGFkSGFwdGljQWN0dWF0b3J9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlicmF0aW9uID0gcGFkLnZpYnJhdGlvbkFjdHVhdG9yO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jcmVtYXBwaW5nXHJcblxyXG4gICAgICAgIHZhciBfbm9CdXR0b24gPSB7IHZhbHVlOiAwLCBwcmVzc2VkOiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTGVmdCBCdXR0b24gaW4gdGhlIExlZnQgQ2x1c3Rlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX0xDTGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fTENMZWZ0ID0gKGJ1dHRvbnNbMTRdKSA/IGJ1dHRvbnNbMTRdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUmlnaHQgQnV0dG9uIGluIHRoZSBMZWZ0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19MQ1JpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9MQ1JpZ2h0ID0gKGJ1dHRvbnNbMTVdKSA/IGJ1dHRvbnNbMTVdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVG9wIEJ1dHRvbiBpbiB0aGUgTGVmdCBDbHVzdGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfTENUb3BcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX0xDVG9wID0gKGJ1dHRvbnNbMTJdKSA/IGJ1dHRvbnNbMTJdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQm90dG9tIEJ1dHRvbiBpbiB0aGUgTGVmdCBDbHVzdGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfTENCb3R0b21cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX0xDQm90dG9tID0gKGJ1dHRvbnNbMTNdKSA/IGJ1dHRvbnNbMTNdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTGVmdCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ0xlZnRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX1JDTGVmdCA9IChidXR0b25zWzJdKSA/IGJ1dHRvbnNbMl0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBSaWdodCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ1JpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9SQ1JpZ2h0ID0gKGJ1dHRvbnNbMV0pID8gYnV0dG9uc1sxXSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRvcCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ1RvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fUkNUb3AgPSAoYnV0dG9uc1szXSkgPyBidXR0b25zWzNdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQm90dG9tIEJ1dHRvbiBpbiB0aGUgUmlnaHQgQ2x1c3Rlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX1JDQm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9SQ0JvdHRvbSA9IChidXR0b25zWzBdKSA/IGJ1dHRvbnNbMF0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBUb3AgTGVmdCBGcm9udCBCdXR0b24gKEwxIFNob3VsZGVyIEJ1dHRvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX0ZCTGVmdFRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fRkJMZWZ0VG9wID0gKGJ1dHRvbnNbNF0pID8gYnV0dG9uc1s0XSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEJvdHRvbSBMZWZ0IEZyb250IEJ1dHRvbiAoTDIgU2hvdWxkZXIgQnV0dG9uKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfRkJMZWZ0Qm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9GQkxlZnRCb3R0b20gPSAoYnV0dG9uc1s2XSkgPyBidXR0b25zWzZdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVG9wIFJpZ2h0IEZyb250IEJ1dHRvbiAoUjEgU2hvdWxkZXIgQnV0dG9uKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfRkJSaWdodFRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fRkJSaWdodFRvcCA9IChidXR0b25zWzVdKSA/IGJ1dHRvbnNbNV0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBCb3R0b20gUmlnaHQgRnJvbnQgQnV0dG9uIChSMiBTaG91bGRlciBCdXR0b24pXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19GQlJpZ2h0Qm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9GQlJpZ2h0Qm90dG9tID0gKGJ1dHRvbnNbN10pID8gYnV0dG9uc1s3XSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgdmFyIF9ub0F4aXMgPSB7IHZhbHVlOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBIb3Jpem9udGFsIEF4aXMgZm9yIHRoZSBMZWZ0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfSEF4aXNMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9IQXhpc0xlZnQgPSAoYXhlc1swXSkgPyBheGVzWzBdIDogX25vQXhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFZlcnRpY2FsIEF4aXMgZm9yIHRoZSBMZWZ0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfVkF4aXNMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9WQXhpc0xlZnQgPSAoYXhlc1sxXSkgPyBheGVzWzFdIDogX25vQXhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEhvcml6b250YWwgQXhpcyBmb3IgdGhlIFJpZ2h0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfSEF4aXNSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fSEF4aXNSaWdodCA9IChheGVzWzJdKSA/IGF4ZXNbMl0gOiBfbm9BeGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVmVydGljYWwgQXhpcyBmb3IgdGhlIFJpZ2h0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfVkF4aXNSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fVkF4aXNSaWdodCA9IChheGVzWzNdKSA/IGF4ZXNbM10gOiBfbm9BeGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFZlY3RvcjIgY29udGFpbmluZyB0aGUgbW9zdCByZWNlbnQgdmFsdWVzIGZyb20gdGhlIEdhbWVwYWQncyBsZWZ0IGF4aXMgc3RpY2suXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiB0aGUgR2FtZXBhZC51cGRhdGUgY3ljbGUuXHJcbiAgICAgICAgICogVGhlIEggQXhpcyBpcyBtYXBwZWQgdG8gdGhlIGBWZWN0b3IyLnhgIHByb3BlcnR5LCBhbmQgdGhlIFYgQXhpcyB0byB0aGUgYFZlY3RvcjIueWAgcHJvcGVydHkuXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIEF4aXMgdGhyZXNob2xkcy5cclxuICAgICAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2VzIG5vdCBoYXZlIGEgbGVmdCBheGlzIHN0aWNrLCB0aGUgdmFsdWVzIHdpbGwgYWx3YXlzIGJlIHplcm8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2xlZnRTdGlja1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxlZnRTdGljayA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgVmVjdG9yMiBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbSB0aGUgR2FtZXBhZCdzIHJpZ2h0IGF4aXMgc3RpY2suXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiB0aGUgR2FtZXBhZC51cGRhdGUgY3ljbGUuXHJcbiAgICAgICAgICogVGhlIEggQXhpcyBpcyBtYXBwZWQgdG8gdGhlIGBWZWN0b3IyLnhgIHByb3BlcnR5LCBhbmQgdGhlIFYgQXhpcyB0byB0aGUgYFZlY3RvcjIueWAgcHJvcGVydHkuXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIEF4aXMgdGhyZXNob2xkcy5cclxuICAgICAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2VzIG5vdCBoYXZlIGEgcmlnaHQgYXhpcyBzdGljaywgdGhlIHZhbHVlcyB3aWxsIGFsd2F5cyBiZSB6ZXJvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNyaWdodFN0aWNrXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmlnaHRTdGljayA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGF4aXMgdGhpcyBHYW1lcGFkIGNsYWltcyB0byBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNnZXRBeGlzVG90YWxcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIGF4ZXMgdGhpcyBHYW1lcGFkIGNsYWltcyB0byBzdXBwb3J0LlxyXG4gICAgICovXHJcbiAgICBnZXRBeGlzVG90YWw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXhlcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gYXhpcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBUaGUgaW5kZXggbXVzdCBiZSB2YWxpZCB3aXRoaW4gdGhlIHJhbmdlIG9mIGF4ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgR2FtZXBhZC5cclxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjZ2V0QXhpc1ZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYXhlcyB0byBnZXQgdGhlIHZhbHVlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2YWx1ZSBvZiB0aGUgYXhpcywgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICovXHJcbiAgICBnZXRBeGlzVmFsdWU6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5heGVzW2luZGV4XS5nZXRWYWx1ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhbGwgYXhpcyBvbiB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKiBUaGUgdmFsdWUgaXMgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEgYW5kIGlzIHRoZSBhbW91bnQgYmVsb3cgd2hpY2ggdGhlIGF4aXMgaXMgY29uc2lkZXJlZCBhcyBub3QgaGF2aW5nIGJlZW4gbW92ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3NldEF4aXNUaHJlc2hvbGRcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc1RocmVzaG9sZDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5heGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5heGVzW2ldLnRocmVzaG9sZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnV0dG9ucyB0aGlzIEdhbWVwYWQgY2xhaW1zIHRvIGhhdmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2dldEJ1dHRvblRvdGFsXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBidXR0b25zIHRoaXMgR2FtZXBhZCBjbGFpbXMgdG8gaGF2ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0QnV0dG9uVG90YWw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBidXR0b24gYmFzZWQgb24gdGhlIGdpdmVuIGluZGV4LlxyXG4gICAgICogVGhlIGluZGV4IG11c3QgYmUgdmFsaWQgd2l0aGluIHRoZSByYW5nZSBvZiBidXR0b25zIHN1cHBvcnRlZCBieSB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVpdGhlciAwIG9yIDEgZm9yIGFuIGFuYWxvZ3VlIGJ1dHRvbiwgb3IgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDFcclxuICAgICAqIGZvciBhIHByZXNzdXJlLXNlbnNpdGl2ZSBkaWdpdGFsIGJ1dHRvbiwgc3VjaCBhcyB0aGUgc2hvdWxkZXIgYnV0dG9ucyBvbiBhIER1YWwgU2hvY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2dldEJ1dHRvblZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYnV0dG9uIHRvIGdldCB0aGUgdmFsdWUgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgZ2V0QnV0dG9uVmFsdWU6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zW2luZGV4XS52YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9yIG5vdC5cclxuICAgICAqIFRoZSBpbmRleCBtdXN0IGJlIHZhbGlkIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYnV0dG9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBHYW1lcGFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNpc0J1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBidXR0b24gdG8gZ2V0IHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBidXR0b24gaXMgY29uc2lkZXJlZCBhcyBiZWluZyBwcmVzc2VkIGRvd24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBpc0J1dHRvbkRvd246IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zW2luZGV4XS5wcmVzc2VkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHVwZGF0ZSBoYW5kbGVyIGZvciB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBNYW5hZ2VyIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHBhZClcclxuICAgIHtcclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgLy8gIFN5bmMgdGhlIGJ1dHRvbiB2YWx1ZXNcclxuXHJcbiAgICAgICAgdmFyIGxvY2FsQnV0dG9ucyA9IHRoaXMuYnV0dG9ucztcclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSBwYWQuYnV0dG9ucztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGxvY2FsQnV0dG9ucy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvY2FsQnV0dG9uc1tpXS51cGRhdGUoZ2FtZXBhZEJ1dHRvbnNbaV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFN5bmMgdGhlIGF4aXMgdmFsdWVzXHJcblxyXG4gICAgICAgIHZhciBsb2NhbEF4ZXMgPSB0aGlzLmF4ZXM7XHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gcGFkLmF4ZXM7XHJcblxyXG4gICAgICAgIGxlbiA9IGxvY2FsQXhlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvY2FsQXhlc1tpXS51cGRhdGUoZ2FtZXBhZEF4ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxlbiA+PSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sZWZ0U3RpY2suc2V0KGxvY2FsQXhlc1swXS5nZXRWYWx1ZSgpLCBsb2NhbEF4ZXNbMV0uZ2V0VmFsdWUoKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGVuID49IDQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRTdGljay5zZXQobG9jYWxBeGVzWzJdLmdldFZhbHVlKCksIGxvY2FsQXhlc1szXS5nZXRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEdhbWVwYWQgaW5zdGFuY2UsIGl0cyBidXR0b25zIGFuZCBheGVzLCBhbmQgcmVsZWFzZXMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYWQgPSBudWxsO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYnV0dG9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc1tpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5heGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5heGVzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXhlcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgR2FtZXBhZCBjdXJyZW50bHkgY29ubmVjdGVkIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2Nvbm5lY3RlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY29ubmVjdGVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZC5jb25uZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRpbWVzdGFtcCBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudCB0aW1lIHRoaXMgR2FtZXBhZCB3YXMgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3RpbWVzdGFtcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aW1lc3RhbXA6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFkLnRpbWVzdGFtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoZSBHYW1lcGFkJ3MgTGVmdCBidXR0b24gYmVpbmcgcHJlc3NlZD9cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuXHJcbiAgICAgKiBUaGlzIGlzIHRoZSBkLXBhZCBsZWZ0IGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNsZWZ0XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fTENMZWZ0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIFJpZ2h0IGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIHJpZ2h0IGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNyaWdodFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ1JpZ2h0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIFVwIGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIHVwIGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCN1cFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ1RvcC5wcmVzc2VkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhlIEdhbWVwYWQncyBEb3duIGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIGRvd24gYnV0dG9uIHVuZGVyIHN0YW5kYXJkIEdhbWVwYWQgbWFwcGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2Rvd25cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkb3duOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ0JvdHRvbS5wcmVzc2VkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhlIEdhbWVwYWQncyBib3R0b20gYnV0dG9uIGluIHRoZSByaWdodCBidXR0b24gY2x1c3RlciBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFggYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIEEgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjQVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIEE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDQm90dG9tLnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIHRvcCBidXR0b24gaW4gdGhlIHJpZ2h0IGJ1dHRvbiBjbHVzdGVyIGJlaW5nIHByZXNzZWQ/XHJcbiAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2Vzbid0IGhhdmUgdGhpcyBidXR0b24gaXQgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLlxyXG4gICAgICogT24gYSBEdWFsIFNob2NrIGNvbnRyb2xsZXIgaXQncyB0aGUgVHJpYW5nbGUgYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIFkgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjWVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDVG9wLnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIGxlZnQgYnV0dG9uIGluIHRoZSByaWdodCBidXR0b24gY2x1c3RlciBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFNxdWFyZSBidXR0b24uXHJcbiAgICAgKiBPbiBhbiBYQm94IGNvbnRyb2xsZXIgaXQncyB0aGUgWCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNYXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fUkNMZWZ0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIHJpZ2h0IGJ1dHRvbiBpbiB0aGUgcmlnaHQgYnV0dG9uIGNsdXN0ZXIgYmVpbmcgcHJlc3NlZD9cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuXHJcbiAgICAgKiBPbiBhIER1YWwgU2hvY2sgY29udHJvbGxlciBpdCdzIHRoZSBDaXJjbGUgYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIEIgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjQlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIEI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDUmlnaHQucHJlc3NlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgdG9wIGxlZnQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIEwxIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBMQiBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNMMVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTDE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCTGVmdFRvcC52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgYm90dG9tIGxlZnQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIEwyIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBMVCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNMMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTDI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCTGVmdEJvdHRvbS52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgdG9wIHJpZ2h0IHNob3VsZGVyIGJ1dHRvbi5cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gemVyby5cclxuICAgICAqIFRoZSB2YWx1ZSBpcyBhIGZsb2F0IGJldHdlZW4gMCBhbmQgMSwgY29ycmVzcG9uZGluZyB0byBob3cgZGVwcmVzc2VkIHRoZSBidXR0b24gaXMuXHJcbiAgICAgKiBPbiBhIER1YWwgU2hvY2sgY29udHJvbGxlciBpdCdzIHRoZSBSMSBidXR0b24uXHJcbiAgICAgKiBPbiBhbiBYQm94IGNvbnRyb2xsZXIgaXQncyB0aGUgUkIgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjUjFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFIxOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9GQlJpZ2h0VG9wLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEdhbWVwYWQncyBib3R0b20gcmlnaHQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFIyIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBSVCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNSMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgUjI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCUmlnaHRCb3R0b20udmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lcGFkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Gamepad.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/GamepadPlugin.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/GamepadPlugin.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\");\r\nvar Gamepad = __webpack_require__(/*! ./Gamepad */ \"./node_modules/phaser/src/input/gamepad/Gamepad.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ../InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Gamepad Plugin is an input plugin that belongs to the Scene-owned Input system.\r\n *\r\n * Its role is to listen for native DOM Gamepad Events and then process them.\r\n *\r\n * You do not need to create this class directly, the Input system will create an instance of it automatically.\r\n *\r\n * You can access it from within a Scene using `this.input.gamepad`.\r\n *\r\n * To listen for a gamepad being connected:\r\n *\r\n * ```javascript\r\n * this.input.gamepad.once('connected', function (pad) {\r\n *     //   'pad' is a reference to the gamepad that was just connected\r\n * });\r\n * ```\r\n *\r\n * Note that the browser may require you to press a button on a gamepad before it will allow you to access it,\r\n * this is for security reasons. However, it may also trust the page already, in which case you won't get the\r\n * 'connected' event and instead should check `GamepadPlugin.total` to see if it thinks there are any gamepads\r\n * already connected.\r\n *\r\n * Once you have received the connected event, or polled the gamepads and found them enabled, you can access\r\n * them via the built-in properties `GamepadPlugin.pad1` to `pad4`, for up to 4 game pads. With a reference\r\n * to the gamepads you can poll its buttons and axis sticks. See the properties and methods available on\r\n * the `Gamepad` class for more details.\r\n *\r\n * For more information about Gamepad support in browsers see the following resources:\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API\r\n * https://www.smashingmagazine.com/2015/11/gamepad-api-in-web-games/\r\n * http://html5gamepad.com/\r\n *\r\n * @class GamepadPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.InputPlugin} sceneInputPlugin - A reference to the Scene Input Plugin that the KeyboardPlugin belongs to.\r\n */\r\nvar GamepadPlugin = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function GamepadPlugin (sceneInputPlugin)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Scene that this Input Plugin is responsible for.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.10.0\r\n         */\r\n        this.scene = sceneInputPlugin.scene;\r\n\r\n        /**\r\n         * A reference to the Scene Systems Settings.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#settings\r\n         * @type {Phaser.Types.Scenes.SettingsObject}\r\n         * @since 3.10.0\r\n         */\r\n        this.settings = this.scene.sys.settings;\r\n\r\n        /**\r\n         * A reference to the Scene Input Plugin that created this Keyboard Plugin.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#sceneInputPlugin\r\n         * @type {Phaser.Input.InputPlugin}\r\n         * @since 3.10.0\r\n         */\r\n        this.sceneInputPlugin = sceneInputPlugin;\r\n\r\n        /**\r\n         * A boolean that controls if the Gamepad Manager is enabled or not.\r\n         * Can be toggled on the fly.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.10.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * The Gamepad Event target, as defined in the Game Config.\r\n         * Typically the browser window, but can be any interactive DOM element.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#target\r\n         * @type {any}\r\n         * @since 3.10.0\r\n         */\r\n        this.target;\r\n\r\n        /**\r\n         * An array of the connected Gamepads.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#gamepads\r\n         * @type {Phaser.Input.Gamepad.Gamepad[]}\r\n         * @default []\r\n         * @since 3.10.0\r\n         */\r\n        this.gamepads = [];\r\n\r\n        /**\r\n         * An internal event queue.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#queue\r\n         * @type {GamepadEvent[]}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this.queue = [];\r\n\r\n        /**\r\n         * Internal event handler.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#onGamepadHandler\r\n         * @type {function}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this.onGamepadHandler;\r\n\r\n        /**\r\n         * Internal Gamepad reference.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#_pad1\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._pad1;\r\n\r\n        /**\r\n         * Internal Gamepad reference.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#_pad2\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._pad2;\r\n\r\n        /**\r\n         * Internal Gamepad reference.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#_pad3\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._pad3;\r\n\r\n        /**\r\n         * Internal Gamepad reference.\r\n         *\r\n         * @name Phaser.Input.Gamepad.GamepadPlugin#_pad4\r\n         * @type {Phaser.Input.Gamepad.Gamepad}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this._pad4;\r\n\r\n        sceneInputPlugin.pluginEvents.once(InputEvents.BOOT, this.boot, this);\r\n        sceneInputPlugin.pluginEvents.on(InputEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#boot\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var game = this.scene.sys.game;\r\n        var settings = this.settings.input;\r\n        var config = game.config;\r\n\r\n        this.enabled = GetValue(settings, 'gamepad', config.inputGamepad) && game.device.input.gamepads;\r\n        this.target = GetValue(settings, 'gamepad.target', config.inputGamepadEventTarget);\r\n\r\n        this.sceneInputPlugin.pluginEvents.once(InputEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#start\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (this.enabled)\r\n        {\r\n            this.startListeners();\r\n        }\r\n\r\n        this.sceneInputPlugin.pluginEvents.once(InputEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#isActive\r\n     * @since 3.10.0\r\n     *\r\n     * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n     */\r\n    isActive: function ()\r\n    {\r\n        return (this.enabled && this.scene.sys.isActive());\r\n    },\r\n\r\n    /**\r\n     * Starts the Gamepad Event listeners running.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#startListeners\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    startListeners: function ()\r\n    {\r\n        var _this = this;\r\n        var target = this.target;\r\n\r\n        var handler = function (event)\r\n        {\r\n            if (event.defaultPrevented || !_this.isActive())\r\n            {\r\n                // Do nothing if event already handled\r\n                return;\r\n            }\r\n\r\n            _this.refreshPads();\r\n\r\n            _this.queue.push(event);\r\n        };\r\n\r\n        this.onGamepadHandler = handler;\r\n\r\n        target.addEventListener('gamepadconnected', handler, false);\r\n        target.addEventListener('gamepaddisconnected', handler, false);\r\n\r\n        //  FF also supports gamepadbuttondown, gamepadbuttonup and gamepadaxismove but\r\n        //  nothing else does, and we can get those values via the gamepads anyway, so we will\r\n        //  until more browsers support this\r\n\r\n        //  Finally, listen for an update event from the Input Plugin\r\n        this.sceneInputPlugin.pluginEvents.on(InputEvents.UPDATE, this.update, this);\r\n    },\r\n\r\n    /**\r\n     * Stops the Gamepad Event listeners.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#stopListeners\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    stopListeners: function ()\r\n    {\r\n        this.target.removeEventListener('gamepadconnected', this.onGamepadHandler);\r\n        this.target.removeEventListener('gamepaddisconnected', this.onGamepadHandler);\r\n\r\n        this.sceneInputPlugin.pluginEvents.off(InputEvents.UPDATE, this.update);\r\n    },\r\n\r\n    /**\r\n     * Disconnects all current Gamepads.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#disconnectAll\r\n     * @since 3.10.0\r\n     */\r\n    disconnectAll: function ()\r\n    {\r\n        for (var i = 0; i < this.gamepads.length; i++)\r\n        {\r\n            this.gamepads.connected = false;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Refreshes the list of connected Gamepads.\r\n     *\r\n     * This is called automatically when a gamepad is connected or disconnected,\r\n     * and during the update loop.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#refreshPads\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    refreshPads: function ()\r\n    {\r\n        var connectedPads = navigator.getGamepads();\r\n\r\n        if (!connectedPads)\r\n        {\r\n            this.disconnectAll();\r\n        }\r\n        else\r\n        {\r\n            var currentPads = this.gamepads;\r\n\r\n            for (var i = 0; i < connectedPads.length; i++)\r\n            {\r\n                var livePad = connectedPads[i];\r\n\r\n                //  Because sometimes they're null (yes, really)\r\n                if (!livePad)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                var id = livePad.id;\r\n                var index = livePad.index;\r\n                var currentPad = currentPads[index];\r\n\r\n                if (!currentPad)\r\n                {\r\n                    //  A new Gamepad, not currently stored locally\r\n                    var newPad = new Gamepad(this, livePad);\r\n\r\n                    currentPads[index] = newPad;\r\n\r\n                    if (!this._pad1)\r\n                    {\r\n                        this._pad1 = newPad;\r\n                    }\r\n                    else if (!this._pad2)\r\n                    {\r\n                        this._pad2 = newPad;\r\n                    }\r\n                    else if (!this._pad3)\r\n                    {\r\n                        this._pad3 = newPad;\r\n                    }\r\n                    else if (!this._pad4)\r\n                    {\r\n                        this._pad4 = newPad;\r\n                    }\r\n                }\r\n                else if (currentPad.id !== id)\r\n                {\r\n                    //  A new Gamepad with a different vendor string, but it has got the same index as an old one\r\n                    currentPad.destroy();\r\n\r\n                    currentPads[index] = new Gamepad(this, livePad);\r\n                }\r\n                else\r\n                {\r\n                    //  If neither of these, it's a pad we've already got, so update it\r\n                    currentPad.update(livePad);\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all currently connected Gamepads.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#getAll\r\n     * @since 3.10.0\r\n     *\r\n     * @return {Phaser.Input.Gamepad.Gamepad[]} An array of all currently connected Gamepads.\r\n     */\r\n    getAll: function ()\r\n    {\r\n        var out = [];\r\n        var pads = this.gamepads;\r\n\r\n        for (var i = 0; i < pads.length; i++)\r\n        {\r\n            if (pads[i])\r\n            {\r\n                out.push(pads[i]);\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Looks-up a single Gamepad based on the given index value.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#getPad\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} index - The index of the Gamepad to get.\r\n     *\r\n     * @return {Phaser.Input.Gamepad.Gamepad} The Gamepad matching the given index, or undefined if none were found.\r\n     */\r\n    getPad: function (index)\r\n    {\r\n        var pads = this.gamepads;\r\n\r\n        for (var i = 0; i < pads.length; i++)\r\n        {\r\n            if (pads[i] && pads[i].index === index)\r\n            {\r\n                return pads[i];\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The internal update loop. Refreshes all connected gamepads and processes their events.\r\n     *\r\n     * Called automatically by the Input Manager, invoked from the Game step.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#update\r\n     * @private\r\n     * @fires Phaser.Input.Gamepad.Events#CONNECTED\r\n     * @fires Phaser.Input.Gamepad.Events#DISCONNECTED\r\n     * @since 3.10.0\r\n     */\r\n    update: function ()\r\n    {\r\n        if (!this.enabled)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.refreshPads();\r\n\r\n        var len = this.queue.length;\r\n\r\n        if (len === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var queue = this.queue.splice(0, len);\r\n\r\n        //  Process the event queue, dispatching all of the events that have stored up\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            var event = queue[i];\r\n            var pad = this.getPad(event.gamepad.index);\r\n\r\n            if (event.type === 'gamepadconnected')\r\n            {\r\n                this.emit(Events.CONNECTED, pad, event);\r\n            }\r\n            else if (event.type === 'gamepaddisconnected')\r\n            {\r\n                this.emit(Events.DISCONNECTED, pad, event);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Shuts the Gamepad Plugin down.\r\n     * All this does is remove any listeners bound to it.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#shutdown\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.stopListeners();\r\n\r\n        this.disconnectAll();\r\n\r\n        this.removeAllListeners();\r\n    },\r\n\r\n    /**\r\n     * Destroys this Gamepad Plugin, disconnecting all Gamepads and releasing internal references.\r\n     *\r\n     * @method Phaser.Input.Gamepad.GamepadPlugin#destroy\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        for (var i = 0; i < this.gamepads.length; i++)\r\n        {\r\n            if (this.gamepads[i])\r\n            {\r\n                this.gamepads[i].destroy();\r\n            }\r\n        }\r\n\r\n        this.gamepads = [];\r\n\r\n        this.scene = null;\r\n        this.settings = null;\r\n        this.sceneInputPlugin = null;\r\n        this.target = null;\r\n    },\r\n\r\n    /**\r\n     * The total number of connected game pads.\r\n     *\r\n     * @name Phaser.Input.Gamepad.GamepadPlugin#total\r\n     * @type {integer}\r\n     * @since 3.10.0\r\n     */\r\n    total: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gamepads.length;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A reference to the first connected Gamepad.\r\n     *\r\n     * This will be undefined if either no pads are connected, or the browser\r\n     * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n     * is plugged in, but hasn't yet had any buttons pressed on it.\r\n     *\r\n     * @name Phaser.Input.Gamepad.GamepadPlugin#pad1\r\n     * @type {Phaser.Input.Gamepad.Gamepad}\r\n     * @since 3.10.0\r\n     */\r\n    pad1: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._pad1;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A reference to the second connected Gamepad.\r\n     *\r\n     * This will be undefined if either no pads are connected, or the browser\r\n     * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n     * is plugged in, but hasn't yet had any buttons pressed on it.\r\n     *\r\n     * @name Phaser.Input.Gamepad.GamepadPlugin#pad2\r\n     * @type {Phaser.Input.Gamepad.Gamepad}\r\n     * @since 3.10.0\r\n     */\r\n    pad2: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._pad2;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A reference to the third connected Gamepad.\r\n     *\r\n     * This will be undefined if either no pads are connected, or the browser\r\n     * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n     * is plugged in, but hasn't yet had any buttons pressed on it.\r\n     *\r\n     * @name Phaser.Input.Gamepad.GamepadPlugin#pad3\r\n     * @type {Phaser.Input.Gamepad.Gamepad}\r\n     * @since 3.10.0\r\n     */\r\n    pad3: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._pad3;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * A reference to the fourth connected Gamepad.\r\n     *\r\n     * This will be undefined if either no pads are connected, or the browser\r\n     * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n     * is plugged in, but hasn't yet had any buttons pressed on it.\r\n     *\r\n     * @name Phaser.Input.Gamepad.GamepadPlugin#pad4\r\n     * @type {Phaser.Input.Gamepad.Gamepad}\r\n     * @since 3.10.0\r\n     */\r\n    pad4: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._pad4;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * An instance of the Gamepad Plugin class, if enabled via the `input.gamepad` Scene or Game Config property.\r\n * Use this to create access Gamepads connected to the browser and respond to gamepad buttons.\r\n *\r\n * @name Phaser.Input.InputPlugin#gamepad\r\n * @type {?Phaser.Input.Gamepad.GamepadPlugin}\r\n * @since 3.10.0\r\n */\r\nInputPluginCache.register('GamepadPlugin', GamepadPlugin, 'gamepad', 'gamepad', 'inputGamepad');\r\n\r\nmodule.exports = GamepadPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWRQbHVnaW4uanM/MmNmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMseUVBQVU7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLHFFQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQXFCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsMEJBQTBCO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWRQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgR2FtZXBhZCA9IHJlcXVpcmUoJy4vR2FtZXBhZCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIElucHV0UGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi9JbnB1dFBsdWdpbkNhY2hlJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdhbWVwYWQgUGx1Z2luIGlzIGFuIGlucHV0IHBsdWdpbiB0aGF0IGJlbG9uZ3MgdG8gdGhlIFNjZW5lLW93bmVkIElucHV0IHN5c3RlbS5cclxuICpcclxuICogSXRzIHJvbGUgaXMgdG8gbGlzdGVuIGZvciBuYXRpdmUgRE9NIEdhbWVwYWQgRXZlbnRzIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS5cclxuICpcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB0aGUgSW5wdXQgc3lzdGVtIHdpbGwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIGl0IGF1dG9tYXRpY2FsbHkuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWNjZXNzIGl0IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmcgYHRoaXMuaW5wdXQuZ2FtZXBhZGAuXHJcbiAqXHJcbiAqIFRvIGxpc3RlbiBmb3IgYSBnYW1lcGFkIGJlaW5nIGNvbm5lY3RlZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmlucHV0LmdhbWVwYWQub25jZSgnY29ubmVjdGVkJywgZnVuY3Rpb24gKHBhZCkge1xyXG4gKiAgICAgLy8gICAncGFkJyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2FtZXBhZCB0aGF0IHdhcyBqdXN0IGNvbm5lY3RlZFxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIE5vdGUgdGhhdCB0aGUgYnJvd3NlciBtYXkgcmVxdWlyZSB5b3UgdG8gcHJlc3MgYSBidXR0b24gb24gYSBnYW1lcGFkIGJlZm9yZSBpdCB3aWxsIGFsbG93IHlvdSB0byBhY2Nlc3MgaXQsXHJcbiAqIHRoaXMgaXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIEhvd2V2ZXIsIGl0IG1heSBhbHNvIHRydXN0IHRoZSBwYWdlIGFscmVhZHksIGluIHdoaWNoIGNhc2UgeW91IHdvbid0IGdldCB0aGVcclxuICogJ2Nvbm5lY3RlZCcgZXZlbnQgYW5kIGluc3RlYWQgc2hvdWxkIGNoZWNrIGBHYW1lcGFkUGx1Z2luLnRvdGFsYCB0byBzZWUgaWYgaXQgdGhpbmtzIHRoZXJlIGFyZSBhbnkgZ2FtZXBhZHNcclxuICogYWxyZWFkeSBjb25uZWN0ZWQuXHJcbiAqXHJcbiAqIE9uY2UgeW91IGhhdmUgcmVjZWl2ZWQgdGhlIGNvbm5lY3RlZCBldmVudCwgb3IgcG9sbGVkIHRoZSBnYW1lcGFkcyBhbmQgZm91bmQgdGhlbSBlbmFibGVkLCB5b3UgY2FuIGFjY2Vzc1xyXG4gKiB0aGVtIHZpYSB0aGUgYnVpbHQtaW4gcHJvcGVydGllcyBgR2FtZXBhZFBsdWdpbi5wYWQxYCB0byBgcGFkNGAsIGZvciB1cCB0byA0IGdhbWUgcGFkcy4gV2l0aCBhIHJlZmVyZW5jZVxyXG4gKiB0byB0aGUgZ2FtZXBhZHMgeW91IGNhbiBwb2xsIGl0cyBidXR0b25zIGFuZCBheGlzIHN0aWNrcy4gU2VlIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGF2YWlsYWJsZSBvblxyXG4gKiB0aGUgYEdhbWVwYWRgIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEdhbWVwYWQgc3VwcG9ydCBpbiBicm93c2VycyBzZWUgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6XHJcbiAqXHJcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HYW1lcGFkX0FQSVxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2FtZXBhZF9BUEkvVXNpbmdfdGhlX0dhbWVwYWRfQVBJXHJcbiAqIGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvZ2FtZXBhZC1hcGktaW4td2ViLWdhbWVzL1xyXG4gKiBodHRwOi8vaHRtbDVnYW1lcGFkLmNvbS9cclxuICpcclxuICogQGNsYXNzIEdhbWVwYWRQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5HYW1lcGFkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBzY2VuZUlucHV0UGx1Z2luIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IHRoZSBLZXlib2FyZFBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIEdhbWVwYWRQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEdhbWVwYWRQbHVnaW4gKHNjZW5lSW5wdXRQbHVnaW4pXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IHRoaXMgSW5wdXQgUGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmVJbnB1dFBsdWdpbi5zY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgU2V0dGluZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnNjZW5lLnN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IGNyZWF0ZWQgdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3NjZW5lSW5wdXRQbHVnaW5cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4gPSBzY2VuZUlucHV0UGx1Z2luO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgR2FtZXBhZCBNYW5hZ2VyIGlzIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICAgICAqIENhbiBiZSB0b2dnbGVkIG9uIHRoZSBmbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lcGFkIEV2ZW50IHRhcmdldCwgYXMgZGVmaW5lZCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogVHlwaWNhbGx5IHRoZSBicm93c2VyIHdpbmRvdywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiB0aGUgY29ubmVjdGVkIEdhbWVwYWRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNnYW1lcGFkc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkW119XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lcGFkcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBxdWV1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcXVldWVcclxuICAgICAgICAgKiBAdHlwZSB7R2FtZXBhZEV2ZW50W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBldmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNvbkdhbWVwYWRIYW5kbGVyXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25HYW1lcGFkSGFuZGxlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQxXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkNDtcclxuXHJcbiAgICAgICAgc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uKElucHV0RXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZSA9IHRoaXMuc2NlbmUuc3lzLmdhbWU7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5pbnB1dDtcclxuICAgICAgICB2YXIgY29uZmlnID0gZ2FtZS5jb25maWc7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IEdldFZhbHVlKHNldHRpbmdzLCAnZ2FtZXBhZCcsIGNvbmZpZy5pbnB1dEdhbWVwYWQpICYmIGdhbWUuZGV2aWNlLmlucHV0LmdhbWVwYWRzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gR2V0VmFsdWUoc2V0dGluZ3MsICdnYW1lcGFkLnRhcmdldCcsIGNvbmZpZy5pbnB1dEdhbWVwYWRFdmVudFRhcmdldCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuZXJzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uY2UoSW5wdXRFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYm90aCB0aGlzIHBsdWdpbiBhbmQgdGhlIFNjZW5lIHRvIHdoaWNoIGl0IGJlbG9uZ3MgaXMgYWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNpc0FjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGx1Z2luIGFuZCB0aGUgU2NlbmUgaXQgYmVsb25ncyB0byBpcyBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5lbmFibGVkICYmIHRoaXMuc2NlbmUuc3lzLmlzQWN0aXZlKCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgR2FtZXBhZCBFdmVudCBsaXN0ZW5lcnMgcnVubmluZy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgbWFudWFsbHkgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc3RhcnRMaXN0ZW5lcnNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0TGlzdGVuZXJzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFfdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGV2ZW50IGFscmVhZHkgaGFuZGxlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5yZWZyZXNoUGFkcygpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMucXVldWUucHVzaChldmVudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkdhbWVwYWRIYW5kbGVyID0gaGFuZGxlcjtcclxuXHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRjb25uZWN0ZWQnLCBoYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICBGRiBhbHNvIHN1cHBvcnRzIGdhbWVwYWRidXR0b25kb3duLCBnYW1lcGFkYnV0dG9udXAgYW5kIGdhbWVwYWRheGlzbW92ZSBidXRcclxuICAgICAgICAvLyAgbm90aGluZyBlbHNlIGRvZXMsIGFuZCB3ZSBjYW4gZ2V0IHRob3NlIHZhbHVlcyB2aWEgdGhlIGdhbWVwYWRzIGFueXdheSwgc28gd2Ugd2lsbFxyXG4gICAgICAgIC8vICB1bnRpbCBtb3JlIGJyb3dzZXJzIHN1cHBvcnQgdGhpc1xyXG5cclxuICAgICAgICAvLyAgRmluYWxseSwgbGlzdGVuIGZvciBhbiB1cGRhdGUgZXZlbnQgZnJvbSB0aGUgSW5wdXQgUGx1Z2luXHJcbiAgICAgICAgdGhpcy5zY2VuZUlucHV0UGx1Z2luLnBsdWdpbkV2ZW50cy5vbihJbnB1dEV2ZW50cy5VUERBVEUsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgR2FtZXBhZCBFdmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3N0b3BMaXN0ZW5lcnNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMub25HYW1lcGFkSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMub25HYW1lcGFkSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub2ZmKElucHV0RXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lY3RzIGFsbCBjdXJyZW50IEdhbWVwYWRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNkaXNjb25uZWN0QWxsXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc2Nvbm5lY3RBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdhbWVwYWRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lcGFkcy5jb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVmcmVzaGVzIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBHYW1lcGFkcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBnYW1lcGFkIGlzIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQsXHJcbiAgICAgKiBhbmQgZHVyaW5nIHRoZSB1cGRhdGUgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcmVmcmVzaFBhZHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHJlZnJlc2hQYWRzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25uZWN0ZWRQYWRzID0gbmF2aWdhdG9yLmdldEdhbWVwYWRzKCk7XHJcblxyXG4gICAgICAgIGlmICghY29ubmVjdGVkUGFkcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdEFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZHMgPSB0aGlzLmdhbWVwYWRzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25uZWN0ZWRQYWRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGl2ZVBhZCA9IGNvbm5lY3RlZFBhZHNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEJlY2F1c2Ugc29tZXRpbWVzIHRoZXkncmUgbnVsbCAoeWVzLCByZWFsbHkpXHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpdmVQYWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gbGl2ZVBhZC5pZDtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxpdmVQYWQuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBhZCA9IGN1cnJlbnRQYWRzW2luZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQYWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIEEgbmV3IEdhbWVwYWQsIG5vdCBjdXJyZW50bHkgc3RvcmVkIGxvY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGFkID0gbmV3IEdhbWVwYWQodGhpcywgbGl2ZVBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWRzW2luZGV4XSA9IG5ld1BhZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYWQxKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFkMSA9IG5ld1BhZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuX3BhZDIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWQyID0gbmV3UGFkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fcGFkMylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZDMgPSBuZXdQYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLl9wYWQ0KVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFkNCA9IG5ld1BhZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UGFkLmlkICE9PSBpZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgQSBuZXcgR2FtZXBhZCB3aXRoIGEgZGlmZmVyZW50IHZlbmRvciBzdHJpbmcsIGJ1dCBpdCBoYXMgZ290IHRoZSBzYW1lIGluZGV4IGFzIGFuIG9sZCBvbmVcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFkLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZHNbaW5kZXhdID0gbmV3IEdhbWVwYWQodGhpcywgbGl2ZVBhZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIElmIG5laXRoZXIgb2YgdGhlc2UsIGl0J3MgYSBwYWQgd2UndmUgYWxyZWFkeSBnb3QsIHNvIHVwZGF0ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWQudXBkYXRlKGxpdmVQYWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBjb25uZWN0ZWQgR2FtZXBhZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2dldEFsbFxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRbXX0gQW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBjb25uZWN0ZWQgR2FtZXBhZHMuXHJcbiAgICAgKi9cclxuICAgIGdldEFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcbiAgICAgICAgdmFyIHBhZHMgPSB0aGlzLmdhbWVwYWRzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocGFkc1tpXSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2gocGFkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MtdXAgYSBzaW5nbGUgR2FtZXBhZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2dldFBhZFxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgR2FtZXBhZCB0byBnZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gVGhlIEdhbWVwYWQgbWF0Y2hpbmcgdGhlIGdpdmVuIGluZGV4LCBvciB1bmRlZmluZWQgaWYgbm9uZSB3ZXJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRQYWQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGFkcyA9IHRoaXMuZ2FtZXBhZHM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChwYWRzW2ldICYmIHBhZHNbaV0uaW5kZXggPT09IGluZGV4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3AuIFJlZnJlc2hlcyBhbGwgY29ubmVjdGVkIGdhbWVwYWRzIGFuZCBwcm9jZXNzZXMgdGhlaXIgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBJbnB1dCBNYW5hZ2VyLCBpbnZva2VkIGZyb20gdGhlIEdhbWUgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNDT05ORUNURURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjRElTQ09OTkVDVEVEXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZHMoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucXVldWUubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAobGVuID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZS5zcGxpY2UoMCwgbGVuKTtcclxuXHJcbiAgICAgICAgLy8gIFByb2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLCBkaXNwYXRjaGluZyBhbGwgb2YgdGhlIGV2ZW50cyB0aGF0IGhhdmUgc3RvcmVkIHVwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBldmVudCA9IHF1ZXVlW2ldO1xyXG4gICAgICAgICAgICB2YXIgcGFkID0gdGhpcy5nZXRQYWQoZXZlbnQuZ2FtZXBhZC5pbmRleCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2dhbWVwYWRjb25uZWN0ZWQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTk5FQ1RFRCwgcGFkLCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2dhbWVwYWRkaXNjb25uZWN0ZWQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRJU0NPTk5FQ1RFRCwgcGFkLCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1dHMgdGhlIEdhbWVwYWQgUGx1Z2luIGRvd24uXHJcbiAgICAgKiBBbGwgdGhpcyBkb2VzIGlzIHJlbW92ZSBhbnkgbGlzdGVuZXJzIGJvdW5kIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdEFsbCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2FtZXBhZCBQbHVnaW4sIGRpc2Nvbm5lY3RpbmcgYWxsIEdhbWVwYWRzIGFuZCByZWxlYXNpbmcgaW50ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nYW1lcGFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdhbWVwYWRzW2ldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVwYWRzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lcGFkcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldHRpbmdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGNvbm5lY3RlZCBnYW1lIHBhZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiN0b3RhbFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHRvdGFsOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdhbWVwYWRzLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBjb25uZWN0ZWQgR2FtZXBhZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgdW5kZWZpbmVkIGlmIGVpdGhlciBubyBwYWRzIGFyZSBjb25uZWN0ZWQsIG9yIHRoZSBicm93c2VyXHJcbiAgICAgKiBoYXMgbm90IHlldCBpc3N1ZWQgYSBnYW1lcGFkY29ubmVjdCwgd2hpY2ggY2FuIGhhcHBlbiBldmVuIGlmIGEgR2FtZXBhZFxyXG4gICAgICogaXMgcGx1Z2dlZCBpbiwgYnV0IGhhc24ndCB5ZXQgaGFkIGFueSBidXR0b25zIHByZXNzZWQgb24gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNwYWQxXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcGFkMToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFkMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgY29ubmVjdGVkIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGJlIHVuZGVmaW5lZCBpZiBlaXRoZXIgbm8gcGFkcyBhcmUgY29ubmVjdGVkLCBvciB0aGUgYnJvd3NlclxyXG4gICAgICogaGFzIG5vdCB5ZXQgaXNzdWVkIGEgZ2FtZXBhZGNvbm5lY3QsIHdoaWNoIGNhbiBoYXBwZW4gZXZlbiBpZiBhIEdhbWVwYWRcclxuICAgICAqIGlzIHBsdWdnZWQgaW4sIGJ1dCBoYXNuJ3QgeWV0IGhhZCBhbnkgYnV0dG9ucyBwcmVzc2VkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcGFkMlxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBhZDI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgdGhpcmQgY29ubmVjdGVkIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGJlIHVuZGVmaW5lZCBpZiBlaXRoZXIgbm8gcGFkcyBhcmUgY29ubmVjdGVkLCBvciB0aGUgYnJvd3NlclxyXG4gICAgICogaGFzIG5vdCB5ZXQgaXNzdWVkIGEgZ2FtZXBhZGNvbm5lY3QsIHdoaWNoIGNhbiBoYXBwZW4gZXZlbiBpZiBhIEdhbWVwYWRcclxuICAgICAqIGlzIHBsdWdnZWQgaW4sIGJ1dCBoYXNuJ3QgeWV0IGhhZCBhbnkgYnV0dG9ucyBwcmVzc2VkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcGFkM1xyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBhZDM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZDM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZm91cnRoIGNvbm5lY3RlZCBHYW1lcGFkLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgd2lsbCBiZSB1bmRlZmluZWQgaWYgZWl0aGVyIG5vIHBhZHMgYXJlIGNvbm5lY3RlZCwgb3IgdGhlIGJyb3dzZXJcclxuICAgICAqIGhhcyBub3QgeWV0IGlzc3VlZCBhIGdhbWVwYWRjb25uZWN0LCB3aGljaCBjYW4gaGFwcGVuIGV2ZW4gaWYgYSBHYW1lcGFkXHJcbiAgICAgKiBpcyBwbHVnZ2VkIGluLCBidXQgaGFzbid0IHlldCBoYWQgYW55IGJ1dHRvbnMgcHJlc3NlZCBvbiBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3BhZDRcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwYWQ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWQ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBbiBpbnN0YW5jZSBvZiB0aGUgR2FtZXBhZCBQbHVnaW4gY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQuZ2FtZXBhZGAgU2NlbmUgb3IgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhY2Nlc3MgR2FtZXBhZHMgY29ubmVjdGVkIHRvIHRoZSBicm93c2VyIGFuZCByZXNwb25kIHRvIGdhbWVwYWQgYnV0dG9ucy5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2dhbWVwYWRcclxuICogQHR5cGUgez9QaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2lufVxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqL1xyXG5JbnB1dFBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lcGFkUGx1Z2luJywgR2FtZXBhZFBsdWdpbiwgJ2dhbWVwYWQnLCAnZ2FtZXBhZCcsICdpbnB1dEdhbWVwYWQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZXBhZFBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/GamepadPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tatar SNES USB Controller Gamepad Configuration.\r\n * USB Gamepad  (STANDARD GAMEPAD Vendor: 0079 Product: 0011)\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.SNES_USB\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n    UP: 12,\r\n    DOWN: 13,\r\n    LEFT: 14,\r\n    RIGHT: 15,\r\n\r\n    SELECT: 8,\r\n    START: 9,\r\n\r\n    B: 0,\r\n    A: 1,\r\n    Y: 2,\r\n    X: 3,\r\n\r\n    LEFT_SHOULDER: 4,\r\n    RIGHT_SHOULDER: 5\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU05FU19VU0JfQ29udHJvbGxlci5qcz9jMjk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU05FU19VU0JfQ29udHJvbGxlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRhdGFyIFNORVMgVVNCIENvbnRyb2xsZXIgR2FtZXBhZCBDb25maWd1cmF0aW9uLlxyXG4gKiBVU0IgR2FtZXBhZCAgKFNUQU5EQVJEIEdBTUVQQUQgVmVuZG9yOiAwMDc5IFByb2R1Y3Q6IDAwMTEpXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkNvbmZpZ3MuU05FU19VU0JcclxuICogQHR5cGUge29iamVjdH1cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBVUDogMTIsXHJcbiAgICBET1dOOiAxMyxcclxuICAgIExFRlQ6IDE0LFxyXG4gICAgUklHSFQ6IDE1LFxyXG5cclxuICAgIFNFTEVDVDogOCxcclxuICAgIFNUQVJUOiA5LFxyXG5cclxuICAgIEI6IDAsXHJcbiAgICBBOiAxLFxyXG4gICAgWTogMixcclxuICAgIFg6IDMsXHJcblxyXG4gICAgTEVGVF9TSE9VTERFUjogNCxcclxuICAgIFJJR0hUX1NIT1VMREVSOiA1XHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * PlayStation DualShock 4 Gamepad Configuration.\r\n * Sony PlayStation DualShock 4 (v2) wireless controller\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.DUALSHOCK_4\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n    UP: 12,\r\n    DOWN: 13,\r\n    LEFT: 14,\r\n    RIGHT: 15,\r\n\r\n    SHARE: 8,\r\n    OPTIONS: 9,\r\n    PS: 16,\r\n    TOUCHBAR: 17,\r\n\r\n    X: 0,\r\n    CIRCLE: 1,\r\n    SQUARE: 2,\r\n    TRIANGLE: 3,\r\n\r\n    L1: 4,\r\n    R1: 5,\r\n    L2: 6,\r\n    R2: 7,\r\n    L3: 10,\r\n    R3: 11,\r\n\r\n    LEFT_STICK_H: 0,\r\n    LEFT_STICK_V: 1,\r\n    RIGHT_STICK_H: 2,\r\n    RIGHT_STICK_V: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNC5qcz85MjllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBsYXlTdGF0aW9uIER1YWxTaG9jayA0IEdhbWVwYWQgQ29uZmlndXJhdGlvbi5cclxuICogU29ueSBQbGF5U3RhdGlvbiBEdWFsU2hvY2sgNCAodjIpIHdpcmVsZXNzIGNvbnRyb2xsZXJcclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQ29uZmlncy5EVUFMU0hPQ0tfNFxyXG4gKiBAdHlwZSB7b2JqZWN0fVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFVQOiAxMixcclxuICAgIERPV046IDEzLFxyXG4gICAgTEVGVDogMTQsXHJcbiAgICBSSUdIVDogMTUsXHJcblxyXG4gICAgU0hBUkU6IDgsXHJcbiAgICBPUFRJT05TOiA5LFxyXG4gICAgUFM6IDE2LFxyXG4gICAgVE9VQ0hCQVI6IDE3LFxyXG5cclxuICAgIFg6IDAsXHJcbiAgICBDSVJDTEU6IDEsXHJcbiAgICBTUVVBUkU6IDIsXHJcbiAgICBUUklBTkdMRTogMyxcclxuXHJcbiAgICBMMTogNCxcclxuICAgIFIxOiA1LFxyXG4gICAgTDI6IDYsXHJcbiAgICBSMjogNyxcclxuICAgIEwzOiAxMCxcclxuICAgIFIzOiAxMSxcclxuXHJcbiAgICBMRUZUX1NUSUNLX0g6IDAsXHJcbiAgICBMRUZUX1NUSUNLX1Y6IDEsXHJcbiAgICBSSUdIVF9TVElDS19IOiAyLFxyXG4gICAgUklHSFRfU1RJQ0tfVjogM1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * XBox 360 Gamepad Configuration.\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.XBOX_360\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n    UP: 12,\r\n    DOWN: 13,\r\n    LEFT: 14,\r\n    RIGHT: 15,\r\n\r\n    MENU: 16,\r\n\r\n    A: 0,\r\n    B: 1,\r\n    X: 2,\r\n    Y: 3,\r\n\r\n    LB: 4,\r\n    RB: 5,\r\n\r\n    LT: 6,\r\n    RT: 7,\r\n\r\n    BACK: 8,\r\n    START: 9,\r\n\r\n    LS: 10,\r\n    RS: 11,\r\n\r\n    LEFT_STICK_H: 0,\r\n    LEFT_STICK_V: 1,\r\n    RIGHT_STICK_H: 2,\r\n    RIGHT_STICK_V: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvWEJveDM2MF9Db250cm9sbGVyLmpzPzBhNmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9jb25maWdzL1hCb3gzNjBfQ29udHJvbGxlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFhCb3ggMzYwIEdhbWVwYWQgQ29uZmlndXJhdGlvbi5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQ29uZmlncy5YQk9YXzM2MFxyXG4gKiBAdHlwZSB7b2JqZWN0fVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFVQOiAxMixcclxuICAgIERPV046IDEzLFxyXG4gICAgTEVGVDogMTQsXHJcbiAgICBSSUdIVDogMTUsXHJcblxyXG4gICAgTUVOVTogMTYsXHJcblxyXG4gICAgQTogMCxcclxuICAgIEI6IDEsXHJcbiAgICBYOiAyLFxyXG4gICAgWTogMyxcclxuXHJcbiAgICBMQjogNCxcclxuICAgIFJCOiA1LFxyXG5cclxuICAgIExUOiA2LFxyXG4gICAgUlQ6IDcsXHJcblxyXG4gICAgQkFDSzogOCxcclxuICAgIFNUQVJUOiA5LFxyXG5cclxuICAgIExTOiAxMCxcclxuICAgIFJTOiAxMSxcclxuXHJcbiAgICBMRUZUX1NUSUNLX0g6IDAsXHJcbiAgICBMRUZUX1NUSUNLX1Y6IDEsXHJcbiAgICBSSUdIVF9TVElDS19IOiAyLFxyXG4gICAgUklHSFRfU1RJQ0tfVjogM1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/configs/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/configs/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad.Configs\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    DUALSHOCK_4: __webpack_require__(/*! ./Sony_PlayStation_DualShock_4 */ \"./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js\"),\r\n    SNES_USB: __webpack_require__(/*! ./SNES_USB_Controller */ \"./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js\"),\r\n    XBOX_360: __webpack_require__(/*! ./XBox360_Controller */ \"./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvaW5kZXguanM/NDlmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVIQUFnQztBQUN6RCxjQUFjLG1CQUFPLENBQUMscUdBQXVCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxtR0FBc0I7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9jb25maWdzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5Db25maWdzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRFVBTFNIT0NLXzQ6IHJlcXVpcmUoJy4vU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNCcpLFxyXG4gICAgU05FU19VU0I6IHJlcXVpcmUoJy4vU05FU19VU0JfQ29udHJvbGxlcicpLFxyXG4gICAgWEJPWF8zNjA6IHJlcXVpcmUoJy4vWEJveDM2MF9Db250cm9sbGVyJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Down Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a button has been pressed on any active Gamepad.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.on('down', listener)`.\r\n * \r\n * You can also listen for a DOWN event from a Gamepad instance. See the [GAMEPAD_BUTTON_DOWN]{@linkcode Phaser.Input.Gamepad.Events#event:GAMEPAD_BUTTON_DOWN} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#BUTTON_DOWN\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad on which the button was pressed.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was pressed.\r\n * @param {number} value - The value of the button at the time it was pressed. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fRE9XTl9FVkVOVC5qcz80ZGQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtGQUErRixnRUFBZ0U7QUFDL0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0JVVFRPTl9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWVwYWQgQnV0dG9uIERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBvbiBhbnkgYWN0aXZlIEdhbWVwYWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5nYW1lcGFkLm9uKCdkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGEgRE9XTiBldmVudCBmcm9tIGEgR2FtZXBhZCBpbnN0YW5jZS4gU2VlIHRoZSBbR0FNRVBBRF9CVVRUT05fRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNldmVudDpHQU1FUEFEX0JVVFRPTl9ET1dOfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNCVVRUT05fRE9XTlxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5HYW1lcGFkfSBwYWQgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZXBhZCBvbiB3aGljaCB0aGUgYnV0dG9uIHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn0gYnV0dG9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEJ1dHRvbiB3aGljaCB3YXMgcHJlc3NlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24gYXQgdGhlIHRpbWUgaXQgd2FzIHByZXNzZWQuIEJldHdlZW4gMCBhbmQgMS4gU29tZSBHYW1lcGFkcyBoYXZlIHByZXNzdXJlLXNlbnNpdGl2ZSBidXR0b25zLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Up Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a button has been released on any active Gamepad.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.on('up', listener)`.\r\n * \r\n * You can also listen for an UP event from a Gamepad instance. See the [GAMEPAD_BUTTON_UP]{@linkcode Phaser.Input.Gamepad.Events#event:GAMEPAD_BUTTON_UP} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#BUTTON_UP\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad on which the button was released.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was released.\r\n * @param {number} value - The value of the button at the time it was released. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fVVBfRVZFTlQuanM/ZDliNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsOERBQThEO0FBQzFKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBCdXR0b24gVXAgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBidXR0b24gaGFzIGJlZW4gcmVsZWFzZWQgb24gYW55IGFjdGl2ZSBHYW1lcGFkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQuZ2FtZXBhZC5vbigndXAnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgYW4gVVAgZXZlbnQgZnJvbSBhIEdhbWVwYWQgaW5zdGFuY2UuIFNlZSB0aGUgW0dBTUVQQURfQlVUVE9OX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI2V2ZW50OkdBTUVQQURfQlVUVE9OX1VQfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNCVVRUT05fVVBcclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgb24gd2hpY2ggdGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyByZWxlYXNlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24gYXQgdGhlIHRpbWUgaXQgd2FzIHJlbGVhc2VkLiBCZXR3ZWVuIDAgYW5kIDEuIFNvbWUgR2FtZXBhZHMgaGF2ZSBwcmVzc3VyZS1zZW5zaXRpdmUgYnV0dG9ucy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Connected Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a Gamepad has been connected.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.once('connected', listener)`.\r\n * \r\n * Note that the browser may require you to press a button on a gamepad before it will allow you to access it,\r\n * this is for security reasons. However, it may also trust the page already, in which case you won't get the\r\n * 'connected' event and instead should check `GamepadPlugin.total` to see if it thinks there are any gamepads\r\n * already connected.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#CONNECTED\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad which was connected.\r\n * @param {Event} event - The native DOM Event that triggered the connection.\r\n */\r\nmodule.exports = 'connected';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9DT05ORUNURURfRVZFTlQuanM/ZWIwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9DT05ORUNURURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBDb25uZWN0ZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBHYW1lcGFkIGhhcyBiZWVuIGNvbm5lY3RlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmdhbWVwYWQub25jZSgnY29ubmVjdGVkJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIE5vdGUgdGhhdCB0aGUgYnJvd3NlciBtYXkgcmVxdWlyZSB5b3UgdG8gcHJlc3MgYSBidXR0b24gb24gYSBnYW1lcGFkIGJlZm9yZSBpdCB3aWxsIGFsbG93IHlvdSB0byBhY2Nlc3MgaXQsXHJcbiAqIHRoaXMgaXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIEhvd2V2ZXIsIGl0IG1heSBhbHNvIHRydXN0IHRoZSBwYWdlIGFscmVhZHksIGluIHdoaWNoIGNhc2UgeW91IHdvbid0IGdldCB0aGVcclxuICogJ2Nvbm5lY3RlZCcgZXZlbnQgYW5kIGluc3RlYWQgc2hvdWxkIGNoZWNrIGBHYW1lcGFkUGx1Z2luLnRvdGFsYCB0byBzZWUgaWYgaXQgdGhpbmtzIHRoZXJlIGFyZSBhbnkgZ2FtZXBhZHNcclxuICogYWxyZWFkeSBjb25uZWN0ZWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjQ09OTkVDVEVEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgd2hpY2ggd2FzIGNvbm5lY3RlZC5cclxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY29ubmVjdGlvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Nvbm5lY3RlZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Disconnected Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a Gamepad has been disconnected.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.once('disconnected', listener)`.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#DISCONNECTED\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad which was disconnected.\r\n * @param {Event} event - The native DOM Event that triggered the disconnection.\r\n */\r\nmodule.exports = 'disconnected';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9ESVNDT05ORUNURURfRVZFTlQuanM/ZTk2NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE1BQU07QUFDakI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0RJU0NPTk5FQ1RFRF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lcGFkIERpc2Nvbm5lY3RlZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZXBhZCBQbHVnaW4gd2hlbiBhIEdhbWVwYWQgaGFzIGJlZW4gZGlzY29ubmVjdGVkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQuZ2FtZXBhZC5vbmNlKCdkaXNjb25uZWN0ZWQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0RJU0NPTk5FQ1RFRFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWR9IHBhZCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lcGFkIHdoaWNoIHdhcyBkaXNjb25uZWN0ZWQuXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGRpc2Nvbm5lY3Rpb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkaXNjb25uZWN0ZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Down Event.\r\n * \r\n * This event is dispatched by a Gamepad instance when a button has been pressed on it.\r\n * \r\n * Listen to this event from a Gamepad instance. Once way to get this is from the `pad1`, `pad2`, etc properties on the Gamepad Plugin:\r\n * `this.input.gamepad.pad1.on('down', listener)`.\r\n * \r\n * Note that you will not receive any Gamepad button events until the browser considers the Gamepad as being 'connected'.\r\n * \r\n * You can also listen for a DOWN event from the Gamepad Plugin. See the [BUTTON_DOWN]{@linkcode Phaser.Input.Gamepad.Events#event:BUTTON_DOWN} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_DOWN\r\n * @since 3.10.0\r\n * \r\n * @param {integer} index - The index of the button that was pressed.\r\n * @param {number} value - The value of the button at the time it was pressed. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was pressed.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9ET1dOX0VWRU5ULmpzPzE1MDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUZBQXVGLHdEQUF3RDtBQUMvSTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0dBTUVQQURfQlVUVE9OX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBCdXR0b24gRG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIEdhbWVwYWQgaW5zdGFuY2Ugd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkIG9uIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWVwYWQgaW5zdGFuY2UuIE9uY2Ugd2F5IHRvIGdldCB0aGlzIGlzIGZyb20gdGhlIGBwYWQxYCwgYHBhZDJgLCBldGMgcHJvcGVydGllcyBvbiB0aGUgR2FtZXBhZCBQbHVnaW46XHJcbiAqIGB0aGlzLmlucHV0LmdhbWVwYWQucGFkMS5vbignZG93bicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgeW91IHdpbGwgbm90IHJlY2VpdmUgYW55IEdhbWVwYWQgYnV0dG9uIGV2ZW50cyB1bnRpbCB0aGUgYnJvd3NlciBjb25zaWRlcnMgdGhlIEdhbWVwYWQgYXMgYmVpbmcgJ2Nvbm5lY3RlZCcuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gbGlzdGVuIGZvciBhIERPV04gZXZlbnQgZnJvbSB0aGUgR2FtZXBhZCBQbHVnaW4uIFNlZSB0aGUgW0JVVFRPTl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI2V2ZW50OkJVVFRPTl9ET1dOfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9ET1dOXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGJ1dHRvbiBhdCB0aGUgdGltZSBpdCB3YXMgcHJlc3NlZC4gQmV0d2VlbiAwIGFuZCAxLiBTb21lIEdhbWVwYWRzIGhhdmUgcHJlc3N1cmUtc2Vuc2l0aXZlIGJ1dHRvbnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyBwcmVzc2VkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Up Event.\r\n * \r\n * This event is dispatched by a Gamepad instance when a button has been released on it.\r\n * \r\n * Listen to this event from a Gamepad instance. Once way to get this is from the `pad1`, `pad2`, etc properties on the Gamepad Plugin:\r\n * `this.input.gamepad.pad1.on('up', listener)`.\r\n * \r\n * Note that you will not receive any Gamepad button events until the browser considers the Gamepad as being 'connected'.\r\n * \r\n * You can also listen for an UP event from the Gamepad Plugin. See the [BUTTON_UP]{@linkcode Phaser.Input.Gamepad.Events#event:BUTTON_UP} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_UP\r\n * @since 3.10.0\r\n * \r\n * @param {integer} index - The index of the button that was released.\r\n * @param {number} value - The value of the button at the time it was released. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was released.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9VUF9FVkVOVC5qcz83NTIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixzREFBc0Q7QUFDMUk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lcGFkIEJ1dHRvbiBVcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIEdhbWVwYWQgaW5zdGFuY2Ugd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiByZWxlYXNlZCBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lcGFkIGluc3RhbmNlLiBPbmNlIHdheSB0byBnZXQgdGhpcyBpcyBmcm9tIHRoZSBgcGFkMWAsIGBwYWQyYCwgZXRjIHByb3BlcnRpZXMgb24gdGhlIEdhbWVwYWQgUGx1Z2luOlxyXG4gKiBgdGhpcy5pbnB1dC5nYW1lcGFkLnBhZDEub24oJ3VwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIE5vdGUgdGhhdCB5b3Ugd2lsbCBub3QgcmVjZWl2ZSBhbnkgR2FtZXBhZCBidXR0b24gZXZlbnRzIHVudGlsIHRoZSBicm93c2VyIGNvbnNpZGVycyB0aGUgR2FtZXBhZCBhcyBiZWluZyAnY29ubmVjdGVkJy5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGFuIFVQIGV2ZW50IGZyb20gdGhlIEdhbWVwYWQgUGx1Z2luLiBTZWUgdGhlIFtCVVRUT05fVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjZXZlbnQ6QlVUVE9OX1VQfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9VUFxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBidXR0b24gdGhhdCB3YXMgcmVsZWFzZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgYnV0dG9uIGF0IHRoZSB0aW1lIGl0IHdhcyByZWxlYXNlZC4gQmV0d2VlbiAwIGFuZCAxLiBTb21lIEdhbWVwYWRzIGhhdmUgcHJlc3N1cmUtc2Vuc2l0aXZlIGJ1dHRvbnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyByZWxlYXNlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/events/index.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/events/index.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BUTTON_DOWN: __webpack_require__(/*! ./BUTTON_DOWN_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js\"),\r\n    BUTTON_UP: __webpack_require__(/*! ./BUTTON_UP_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js\"),\r\n    CONNECTED: __webpack_require__(/*! ./CONNECTED_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js\"),\r\n    DISCONNECTED: __webpack_require__(/*! ./DISCONNECTED_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js\"),\r\n    GAMEPAD_BUTTON_DOWN: __webpack_require__(/*! ./GAMEPAD_BUTTON_DOWN_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js\"),\r\n    GAMEPAD_BUTTON_UP: __webpack_require__(/*! ./GAMEPAD_BUTTON_UP_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9pbmRleC5qcz9iY2Q1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsZ0dBQXFCO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyw0RkFBbUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLDRGQUFtQjtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBc0I7QUFDaEQseUJBQXlCLG1CQUFPLENBQUMsZ0hBQTZCO0FBQzlELHVCQUF1QixtQkFBTyxDQUFDLDRHQUEyQjs7QUFFMUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQlVUVE9OX0RPV046IHJlcXVpcmUoJy4vQlVUVE9OX0RPV05fRVZFTlQnKSxcclxuICAgIEJVVFRPTl9VUDogcmVxdWlyZSgnLi9CVVRUT05fVVBfRVZFTlQnKSxcclxuICAgIENPTk5FQ1RFRDogcmVxdWlyZSgnLi9DT05ORUNURURfRVZFTlQnKSxcclxuICAgIERJU0NPTk5FQ1RFRDogcmVxdWlyZSgnLi9ESVNDT05ORUNURURfRVZFTlQnKSxcclxuICAgIEdBTUVQQURfQlVUVE9OX0RPV046IHJlcXVpcmUoJy4vR0FNRVBBRF9CVVRUT05fRE9XTl9FVkVOVCcpLFxyXG4gICAgR0FNRVBBRF9CVVRUT05fVVA6IHJlcXVpcmUoJy4vR0FNRVBBRF9CVVRUT05fVVBfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/gamepad/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/input/gamepad/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Axis: __webpack_require__(/*! ./Axis */ \"./node_modules/phaser/src/input/gamepad/Axis.js\"),\r\n    Button: __webpack_require__(/*! ./Button */ \"./node_modules/phaser/src/input/gamepad/Button.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\"),\r\n    Gamepad: __webpack_require__(/*! ./Gamepad */ \"./node_modules/phaser/src/input/gamepad/Gamepad.js\"),\r\n    GamepadPlugin: __webpack_require__(/*! ./GamepadPlugin */ \"./node_modules/phaser/src/input/gamepad/GamepadPlugin.js\"),\r\n    \r\n    Configs: __webpack_require__(/*! ./configs/ */ \"./node_modules/phaser/src/input/gamepad/configs/index.js\")\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2luZGV4LmpzP2I5OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMsK0RBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLG1FQUFVO0FBQzlCLFlBQVksbUJBQU8sQ0FBQyx5RUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMscUVBQVc7QUFDaEMsbUJBQW1CLG1CQUFPLENBQUMsaUZBQWlCOztBQUU1QyxhQUFhLG1CQUFPLENBQUMsNEVBQVk7QUFDakMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEF4aXM6IHJlcXVpcmUoJy4vQXhpcycpLFxyXG4gICAgQnV0dG9uOiByZXF1aXJlKCcuL0J1dHRvbicpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG4gICAgR2FtZXBhZDogcmVxdWlyZSgnLi9HYW1lcGFkJyksXHJcbiAgICBHYW1lcGFkUGx1Z2luOiByZXF1aXJlKCcuL0dhbWVwYWRQbHVnaW4nKSxcclxuICAgIFxyXG4gICAgQ29uZmlnczogcmVxdWlyZSgnLi9jb25maWdzLycpXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/input/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Input\r\n */\r\n\r\nvar Input = {\r\n\r\n    CreateInteractiveObject: __webpack_require__(/*! ./CreateInteractiveObject */ \"./node_modules/phaser/src/input/CreateInteractiveObject.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\"),\r\n    Gamepad: __webpack_require__(/*! ./gamepad */ \"./node_modules/phaser/src/input/gamepad/index.js\"),\r\n    InputManager: __webpack_require__(/*! ./InputManager */ \"./node_modules/phaser/src/input/InputManager.js\"),\r\n    InputPlugin: __webpack_require__(/*! ./InputPlugin */ \"./node_modules/phaser/src/input/InputPlugin.js\"),\r\n    InputPluginCache: __webpack_require__(/*! ./InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\"),\r\n    Keyboard: __webpack_require__(/*! ./keyboard */ \"./node_modules/phaser/src/input/keyboard/index.js\"),\r\n    Mouse: __webpack_require__(/*! ./mouse */ \"./node_modules/phaser/src/input/mouse/index.js\"),\r\n    Pointer: __webpack_require__(/*! ./Pointer */ \"./node_modules/phaser/src/input/Pointer.js\"),\r\n    Touch: __webpack_require__(/*! ./touch */ \"./node_modules/phaser/src/input/touch/index.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nInput = Extend(false, Input, CONST);\r\n\r\nmodule.exports = Input;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9pbmRleC5qcz8zODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLDZGQUEyQjtBQUNoRSxZQUFZLG1CQUFPLENBQUMsaUVBQVU7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLG1FQUFXO0FBQ2hDLGtCQUFrQixtQkFBTyxDQUFDLHVFQUFnQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBZTtBQUN4QyxzQkFBc0IsbUJBQU8sQ0FBQywrRUFBb0I7QUFDbEQsY0FBYyxtQkFBTyxDQUFDLHFFQUFZO0FBQ2xDLFdBQVcsbUJBQU8sQ0FBQywrREFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLCtEQUFTOztBQUU1Qjs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5JbnB1dFxyXG4gKi9cclxuXHJcbnZhciBJbnB1dCA9IHtcclxuXHJcbiAgICBDcmVhdGVJbnRlcmFjdGl2ZU9iamVjdDogcmVxdWlyZSgnLi9DcmVhdGVJbnRlcmFjdGl2ZU9iamVjdCcpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG4gICAgR2FtZXBhZDogcmVxdWlyZSgnLi9nYW1lcGFkJyksXHJcbiAgICBJbnB1dE1hbmFnZXI6IHJlcXVpcmUoJy4vSW5wdXRNYW5hZ2VyJyksXHJcbiAgICBJbnB1dFBsdWdpbjogcmVxdWlyZSgnLi9JbnB1dFBsdWdpbicpLFxyXG4gICAgSW5wdXRQbHVnaW5DYWNoZTogcmVxdWlyZSgnLi9JbnB1dFBsdWdpbkNhY2hlJyksXHJcbiAgICBLZXlib2FyZDogcmVxdWlyZSgnLi9rZXlib2FyZCcpLFxyXG4gICAgTW91c2U6IHJlcXVpcmUoJy4vbW91c2UnKSxcclxuICAgIFBvaW50ZXI6IHJlcXVpcmUoJy4vUG9pbnRlcicpLFxyXG4gICAgVG91Y2g6IHJlcXVpcmUoJy4vdG91Y2gnKVxyXG5cclxufTtcclxuXHJcbi8vICAgTWVyZ2UgaW4gdGhlIGNvbnN0c1xyXG5JbnB1dCA9IEV4dGVuZChmYWxzZSwgSW5wdXQsIENPTlNUKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/KeyboardManager.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/KeyboardManager.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayRemove = __webpack_require__(/*! ../../utils/array/Remove */ \"./node_modules/phaser/src/utils/array/Remove.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar KeyCodes = __webpack_require__(/*! ../../input/keyboard/keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Keyboard Manager is a helper class that belongs to the global Input Manager.\r\n * \r\n * Its role is to listen for native DOM Keyboard Events and then store them for further processing by the Keyboard Plugin.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically if keyboard\r\n * input has been enabled in the Game Config.\r\n *\r\n * @class KeyboardManager\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar KeyboardManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function KeyboardManager (inputManager)\r\n    {\r\n        /**\r\n         * A reference to the Input Manager.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#manager\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.16.0\r\n         */\r\n        this.manager = inputManager;\r\n\r\n        /**\r\n         * An internal event queue.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#queue\r\n         * @type {KeyboardEvent[]}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this.queue = [];\r\n\r\n        /**\r\n         * A flag that controls if the non-modified keys, matching those stored in the `captures` array,\r\n         * have `preventDefault` called on them or not.\r\n         * \r\n         * A non-modified key is one that doesn't have a modifier key held down with it. The modifier keys are\r\n         * shift, control, alt and the meta key (Command on a Mac, the Windows Key on Windows).\r\n         * Therefore, if the user presses shift + r, it won't prevent this combination, because of the modifier.\r\n         * However, if the user presses just the r key on its own, it will have its event prevented.\r\n         * \r\n         * If you wish to stop capturing the keys, for example switching out to a DOM based element, then\r\n         * you can toggle this property at run-time.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#preventDefault\r\n         * @type {boolean}\r\n         * @since 3.16.0\r\n         */\r\n        this.preventDefault = true;\r\n\r\n        /**\r\n         * An array of Key Code values that will automatically have `preventDefault` called on them,\r\n         * as long as the `KeyboardManager.preventDefault` boolean is set to `true`.\r\n         * \r\n         * By default the array is empty.\r\n         * \r\n         * The key must be non-modified when pressed in order to be captured.\r\n         * \r\n         * A non-modified key is one that doesn't have a modifier key held down with it. The modifier keys are\r\n         * shift, control, alt and the meta key (Command on a Mac, the Windows Key on Windows).\r\n         * Therefore, if the user presses shift + r, it won't prevent this combination, because of the modifier.\r\n         * However, if the user presses just the r key on its own, it will have its event prevented.\r\n         * \r\n         * If you wish to stop capturing the keys, for example switching out to a DOM based element, then\r\n         * you can toggle the `KeyboardManager.preventDefault` boolean at run-time.\r\n         * \r\n         * If you need more specific control, you can create Key objects and set the flag on each of those instead.\r\n         * \r\n         * This array can be populated via the Game Config by setting the `input.keyboard.capture` array, or you\r\n         * can call the `addCapture` method. See also `removeCapture` and `clearCaptures`.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#captures\r\n         * @type {integer[]}\r\n         * @since 3.16.0\r\n         */\r\n        this.captures = [];\r\n\r\n        /**\r\n         * A boolean that controls if the Keyboard Manager is enabled or not.\r\n         * Can be toggled on the fly.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#enabled\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.16.0\r\n         */\r\n        this.enabled = false;\r\n\r\n        /**\r\n         * The Keyboard Event target, as defined in the Game Config.\r\n         * Typically the window in which the game is rendering, but can be any interactive DOM element.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#target\r\n         * @type {any}\r\n         * @since 3.16.0\r\n         */\r\n        this.target;\r\n\r\n        /**\r\n         * The Key Down Event handler.\r\n         * This function is sent the native DOM KeyEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#onKeyDown\r\n         * @type {function}\r\n         * @since 3.16.00\r\n         */\r\n        this.onKeyDown = NOOP;\r\n\r\n        /**\r\n         * The Key Up Event handler.\r\n         * This function is sent the native DOM KeyEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardManager#onKeyUp\r\n         * @type {function}\r\n         * @since 3.16.00\r\n         */\r\n        this.onKeyUp = NOOP;\r\n\r\n        inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Keyboard Manager boot process.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#boot\r\n     * @private\r\n     * @since 3.16.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var config = this.manager.config;\r\n\r\n        this.enabled = config.inputKeyboard;\r\n        this.target = config.inputKeyboardEventTarget;\r\n\r\n        this.addCapture(config.inputKeyboardCapture);\r\n\r\n        if (!this.target && window)\r\n        {\r\n            this.target = window;\r\n        }\r\n\r\n        if (this.enabled && this.target)\r\n        {\r\n            this.startListeners();\r\n        }\r\n\r\n        this.manager.game.events.on(GameEvents.POST_STEP, this.postUpdate, this);\r\n    },\r\n\r\n    /**\r\n     * Starts the Keyboard Event listeners running.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#startListeners\r\n     * @since 3.16.0\r\n     */\r\n    startListeners: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        this.onKeyDown = function (event)\r\n        {\r\n            if (event.defaultPrevented || !_this.enabled || !_this.manager)\r\n            {\r\n                // Do nothing if event already handled\r\n                return;\r\n            }\r\n\r\n            _this.queue.push(event);\r\n\r\n            if (!_this.manager.useQueue)\r\n            {\r\n                _this.manager.events.emit(InputEvents.MANAGER_PROCESS);\r\n            }\r\n    \r\n            var modified = (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey);\r\n\r\n            if (_this.preventDefault && !modified && _this.captures.indexOf(event.keyCode) > -1)\r\n            {\r\n                event.preventDefault();\r\n            }\r\n        };\r\n\r\n        this.onKeyUp = function (event)\r\n        {\r\n            if (event.defaultPrevented || !_this.enabled || !_this.manager)\r\n            {\r\n                // Do nothing if event already handled\r\n                return;\r\n            }\r\n\r\n            _this.queue.push(event);\r\n\r\n            if (!_this.manager.useQueue)\r\n            {\r\n                _this.manager.events.emit(InputEvents.MANAGER_PROCESS);\r\n            }\r\n    \r\n            var modified = (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey);\r\n\r\n            if (_this.preventDefault && !modified && _this.captures.indexOf(event.keyCode) > -1)\r\n            {\r\n                event.preventDefault();\r\n            }\r\n        };\r\n\r\n        var target = this.target;\r\n\r\n        if (target)\r\n        {\r\n            target.addEventListener('keydown', this.onKeyDown, false);\r\n            target.addEventListener('keyup', this.onKeyUp, false);\r\n\r\n            this.enabled = true;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Stops the Key Event listeners.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#stopListeners\r\n     * @since 3.16.0\r\n     */\r\n    stopListeners: function ()\r\n    {\r\n        var target = this.target;\r\n\r\n        target.removeEventListener('keydown', this.onKeyDown, false);\r\n        target.removeEventListener('keyup', this.onKeyUp, false);\r\n\r\n        this.enabled = false;\r\n    },\r\n\r\n    /**\r\n     * Clears the event queue.\r\n     * Called automatically by the Input Manager.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#postUpdate\r\n     * @private\r\n     * @since 3.16.0\r\n     */\r\n    postUpdate: function ()\r\n    {\r\n        this.queue = [];\r\n    },\r\n\r\n    /**\r\n     * By default when a key is pressed Phaser will not stop the event from propagating up to the browser.\r\n     * There are some keys this can be annoying for, like the arrow keys or space bar, which make the browser window scroll.\r\n     *\r\n     * This `addCapture` method enables consuming keyboard event for specific keys so it doesn't bubble up to the the browser\r\n     * and cause the default browser behavior.\r\n     * \r\n     * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to say prevent\r\n     * the SPACE BAR from triggering a page scroll, then it will prevent it for any Scene in your game, not just the calling one.\r\n     * \r\n     * You can pass in a single key code value, or an array of key codes, or a string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture(62);\r\n     * ```\r\n     * \r\n     * An array of key codes:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture([ 62, 63, 64 ]);\r\n     * ```\r\n     * \r\n     * Or a string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture('W,S,A,D');\r\n     * ```\r\n     * \r\n     * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n     * \r\n     * You can also provide an array mixing both strings and key code integers.\r\n     * \r\n     * If there are active captures after calling this method, the `preventDefault` property is set to `true`.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#addCapture\r\n     * @since 3.16.0\r\n     * \r\n     * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to enable capture for, preventing them reaching the browser.\r\n     */\r\n    addCapture: function (keycode)\r\n    {\r\n        if (typeof keycode === 'string')\r\n        {\r\n            keycode = keycode.split(',');\r\n        }\r\n\r\n        if (!Array.isArray(keycode))\r\n        {\r\n            keycode = [ keycode ];\r\n        }\r\n\r\n        var captures = this.captures;\r\n\r\n        for (var i = 0; i < keycode.length; i++)\r\n        {\r\n            var code = keycode[i];\r\n\r\n            if (typeof code === 'string')\r\n            {\r\n                code = KeyCodes[code.trim().toUpperCase()];\r\n            }\r\n\r\n            if (captures.indexOf(code) === -1)\r\n            {\r\n                captures.push(code);\r\n            }\r\n        }\r\n\r\n        this.preventDefault = captures.length > 0;\r\n    },\r\n\r\n    /**\r\n     * Removes an existing key capture.\r\n     * \r\n     * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to remove\r\n     * the capture of a key, then it will remove it for any Scene in your game, not just the calling one.\r\n     * \r\n     * You can pass in a single key code value, or an array of key codes, or a string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture(62);\r\n     * ```\r\n     * \r\n     * An array of key codes:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture([ 62, 63, 64 ]);\r\n     * ```\r\n     * \r\n     * Or a string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture('W,S,A,D');\r\n     * ```\r\n     * \r\n     * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n     * \r\n     * You can also provide an array mixing both strings and key code integers.\r\n     * \r\n     * If there are no captures left after calling this method, the `preventDefault` property is set to `false`.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#removeCapture\r\n     * @since 3.16.0\r\n     * \r\n     * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to disable capture for, allowing them reaching the browser again.\r\n     */\r\n    removeCapture: function (keycode)\r\n    {\r\n        if (typeof keycode === 'string')\r\n        {\r\n            keycode = keycode.split(',');\r\n        }\r\n\r\n        if (!Array.isArray(keycode))\r\n        {\r\n            keycode = [ keycode ];\r\n        }\r\n\r\n        var captures = this.captures;\r\n\r\n        for (var i = 0; i < keycode.length; i++)\r\n        {\r\n            var code = keycode[i];\r\n\r\n            if (typeof code === 'string')\r\n            {\r\n                code = KeyCodes[code.toUpperCase()];\r\n            }\r\n\r\n            ArrayRemove(captures, code);\r\n        }\r\n\r\n        this.preventDefault = captures.length > 0;\r\n    },\r\n\r\n    /**\r\n     * Removes all keyboard captures and sets the `preventDefault` property to `false`.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#clearCaptures\r\n     * @since 3.16.0\r\n     */\r\n    clearCaptures: function ()\r\n    {\r\n        this.captures = [];\r\n\r\n        this.preventDefault = false;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Keyboard Manager instance.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardManager#destroy\r\n     * @since 3.16.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.stopListeners();\r\n\r\n        this.clearCaptures();\r\n\r\n        this.queue = [];\r\n\r\n        this.manager.game.events.off(GameEvents.POST_RENDER, this.postUpdate, this);\r\n\r\n        this.target = null;\r\n        this.enabled = false;\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = KeyboardManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZE1hbmFnZXIuanM/M2JkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDM0QsV0FBVyxtQkFBTyxDQUFDLG1FQUFtQjs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZE1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBcnJheVJlbW92ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2FycmF5L1JlbW92ZScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG52YXIgS2V5Q29kZXMgPSByZXF1aXJlKCcuLi8uLi9pbnB1dC9rZXlib2FyZC9rZXlzL0tleUNvZGVzJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBLZXlib2FyZCBNYW5hZ2VyIGlzIGEgaGVscGVyIGNsYXNzIHRoYXQgYmVsb25ncyB0byB0aGUgZ2xvYmFsIElucHV0IE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnRzIGFuZCB0aGVuIHN0b3JlIHRoZW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBieSB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gKiBcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB0aGUgSW5wdXQgTWFuYWdlciB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBpdCBhdXRvbWF0aWNhbGx5IGlmIGtleWJvYXJkXHJcbiAqIGlucHV0IGhhcyBiZWVuIGVuYWJsZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gKlxyXG4gKiBAY2xhc3MgS2V5Ym9hcmRNYW5hZ2VyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBpbnB1dE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICovXHJcbnZhciBLZXlib2FyZE1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gS2V5Ym9hcmRNYW5hZ2VyIChpbnB1dE1hbmFnZXIpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gaW5wdXRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBxdWV1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjcXVldWVcclxuICAgICAgICAgKiBAdHlwZSB7S2V5Ym9hcmRFdmVudFtdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgY29udHJvbHMgaWYgdGhlIG5vbi1tb2RpZmllZCBrZXlzLCBtYXRjaGluZyB0aG9zZSBzdG9yZWQgaW4gdGhlIGBjYXB0dXJlc2AgYXJyYXksXHJcbiAgICAgICAgICogaGF2ZSBgcHJldmVudERlZmF1bHRgIGNhbGxlZCBvbiB0aGVtIG9yIG5vdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIG5vbi1tb2RpZmllZCBrZXkgaXMgb25lIHRoYXQgZG9lc24ndCBoYXZlIGEgbW9kaWZpZXIga2V5IGhlbGQgZG93biB3aXRoIGl0LiBUaGUgbW9kaWZpZXIga2V5cyBhcmVcclxuICAgICAgICAgKiBzaGlmdCwgY29udHJvbCwgYWx0IGFuZCB0aGUgbWV0YSBrZXkgKENvbW1hbmQgb24gYSBNYWMsIHRoZSBXaW5kb3dzIEtleSBvbiBXaW5kb3dzKS5cclxuICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQgKyByLCBpdCB3b24ndCBwcmV2ZW50IHRoaXMgY29tYmluYXRpb24sIGJlY2F1c2Ugb2YgdGhlIG1vZGlmaWVyLlxyXG4gICAgICAgICAqIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIHByZXNzZXMganVzdCB0aGUgciBrZXkgb24gaXRzIG93biwgaXQgd2lsbCBoYXZlIGl0cyBldmVudCBwcmV2ZW50ZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gc3RvcCBjYXB0dXJpbmcgdGhlIGtleXMsIGZvciBleGFtcGxlIHN3aXRjaGluZyBvdXQgdG8gYSBET00gYmFzZWQgZWxlbWVudCwgdGhlblxyXG4gICAgICAgICAqIHlvdSBjYW4gdG9nZ2xlIHRoaXMgcHJvcGVydHkgYXQgcnVuLXRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI3ByZXZlbnREZWZhdWx0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBLZXkgQ29kZSB2YWx1ZXMgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgaGF2ZSBgcHJldmVudERlZmF1bHRgIGNhbGxlZCBvbiB0aGVtLFxyXG4gICAgICAgICAqIGFzIGxvbmcgYXMgdGhlIGBLZXlib2FyZE1hbmFnZXIucHJldmVudERlZmF1bHRgIGJvb2xlYW4gaXMgc2V0IHRvIGB0cnVlYC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IHRoZSBhcnJheSBpcyBlbXB0eS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUga2V5IG11c3QgYmUgbm9uLW1vZGlmaWVkIHdoZW4gcHJlc3NlZCBpbiBvcmRlciB0byBiZSBjYXB0dXJlZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIG5vbi1tb2RpZmllZCBrZXkgaXMgb25lIHRoYXQgZG9lc24ndCBoYXZlIGEgbW9kaWZpZXIga2V5IGhlbGQgZG93biB3aXRoIGl0LiBUaGUgbW9kaWZpZXIga2V5cyBhcmVcclxuICAgICAgICAgKiBzaGlmdCwgY29udHJvbCwgYWx0IGFuZCB0aGUgbWV0YSBrZXkgKENvbW1hbmQgb24gYSBNYWMsIHRoZSBXaW5kb3dzIEtleSBvbiBXaW5kb3dzKS5cclxuICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQgKyByLCBpdCB3b24ndCBwcmV2ZW50IHRoaXMgY29tYmluYXRpb24sIGJlY2F1c2Ugb2YgdGhlIG1vZGlmaWVyLlxyXG4gICAgICAgICAqIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIHByZXNzZXMganVzdCB0aGUgciBrZXkgb24gaXRzIG93biwgaXQgd2lsbCBoYXZlIGl0cyBldmVudCBwcmV2ZW50ZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gc3RvcCBjYXB0dXJpbmcgdGhlIGtleXMsIGZvciBleGFtcGxlIHN3aXRjaGluZyBvdXQgdG8gYSBET00gYmFzZWQgZWxlbWVudCwgdGhlblxyXG4gICAgICAgICAqIHlvdSBjYW4gdG9nZ2xlIHRoZSBgS2V5Ym9hcmRNYW5hZ2VyLnByZXZlbnREZWZhdWx0YCBib29sZWFuIGF0IHJ1bi10aW1lLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSBuZWVkIG1vcmUgc3BlY2lmaWMgY29udHJvbCwgeW91IGNhbiBjcmVhdGUgS2V5IG9iamVjdHMgYW5kIHNldCB0aGUgZmxhZyBvbiBlYWNoIG9mIHRob3NlIGluc3RlYWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBhcnJheSBjYW4gYmUgcG9wdWxhdGVkIHZpYSB0aGUgR2FtZSBDb25maWcgYnkgc2V0dGluZyB0aGUgYGlucHV0LmtleWJvYXJkLmNhcHR1cmVgIGFycmF5LCBvciB5b3VcclxuICAgICAgICAgKiBjYW4gY2FsbCB0aGUgYGFkZENhcHR1cmVgIG1ldGhvZC4gU2VlIGFsc28gYHJlbW92ZUNhcHR1cmVgIGFuZCBgY2xlYXJDYXB0dXJlc2AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2NhcHR1cmVzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgS2V5Ym9hcmQgTWFuYWdlciBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXlib2FyZCBFdmVudCB0YXJnZXQsIGFzIGRlZmluZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqIFR5cGljYWxseSB0aGUgd2luZG93IGluIHdoaWNoIHRoZSBnYW1lIGlzIHJlbmRlcmluZywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IERvd24gRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gS2V5RXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI29uS2V5RG93blxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25LZXlEb3duID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSBVcCBFdmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBLZXlFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjb25LZXlVcFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25LZXlVcCA9IE5PT1A7XHJcblxyXG4gICAgICAgIGlucHV0TWFuYWdlci5ldmVudHMub25jZShJbnB1dEV2ZW50cy5NQU5BR0VSX0JPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEtleWJvYXJkIE1hbmFnZXIgYm9vdCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLm1hbmFnZXIuY29uZmlnO1xyXG5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBjb25maWcuaW5wdXRLZXlib2FyZDtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy5pbnB1dEtleWJvYXJkRXZlbnRUYXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkQ2FwdHVyZShjb25maWcuaW5wdXRLZXlib2FyZENhcHR1cmUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0ICYmIHdpbmRvdylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gd2luZG93O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5nYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLlBPU1RfU1RFUCwgdGhpcy5wb3N0VXBkYXRlLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgdGhlIEtleWJvYXJkIEV2ZW50IGxpc3RlbmVycyBydW5uaW5nLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtYW51YWxseSBpbnZva2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNzdGFydExpc3RlbmVyc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBzdGFydExpc3RlbmVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFfdGhpcy5lbmFibGVkIHx8ICFfdGhpcy5tYW5hZ2VyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGV2ZW50IGFscmVhZHkgaGFuZGxlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghX3RoaXMubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5ldmVudHMuZW1pdChJbnB1dEV2ZW50cy5NQU5BR0VSX1BST0NFU1MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIG1vZGlmaWVkID0gKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF90aGlzLnByZXZlbnREZWZhdWx0ICYmICFtb2RpZmllZCAmJiBfdGhpcy5jYXB0dXJlcy5pbmRleE9mKGV2ZW50LmtleUNvZGUpID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhX3RoaXMuZW5hYmxlZCB8fCAhX3RoaXMubWFuYWdlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBpZiBldmVudCBhbHJlYWR5IGhhbmRsZWRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMucXVldWUucHVzaChldmVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIV90aGlzLm1hbmFnZXIudXNlUXVldWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuZXZlbnRzLmVtaXQoSW5wdXRFdmVudHMuTUFOQUdFUl9QUk9DRVNTKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciBtb2RpZmllZCA9IChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcmV2ZW50RGVmYXVsdCAmJiAhbW9kaWZpZWQgJiYgX3RoaXMuY2FwdHVyZXMuaW5kZXhPZihldmVudC5rZXlDb2RlKSA+IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93biwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXAsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBLZXkgRXZlbnQgbGlzdGVuZXJzLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtYW51YWxseSBpbnZva2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNzdG9wTGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duLCBmYWxzZSk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgZXZlbnQgcXVldWUuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjcG9zdFVwZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgcG9zdFVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnkgZGVmYXVsdCB3aGVuIGEga2V5IGlzIHByZXNzZWQgUGhhc2VyIHdpbGwgbm90IHN0b3AgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdXAgdG8gdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBUaGVyZSBhcmUgc29tZSBrZXlzIHRoaXMgY2FuIGJlIGFubm95aW5nIGZvciwgbGlrZSB0aGUgYXJyb3cga2V5cyBvciBzcGFjZSBiYXIsIHdoaWNoIG1ha2UgdGhlIGJyb3dzZXIgd2luZG93IHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGBhZGRDYXB0dXJlYCBtZXRob2QgZW5hYmxlcyBjb25zdW1pbmcga2V5Ym9hcmQgZXZlbnQgZm9yIHNwZWNpZmljIGtleXMgc28gaXQgZG9lc24ndCBidWJibGUgdXAgdG8gdGhlIHRoZSBicm93c2VyXHJcbiAgICAgKiBhbmQgY2F1c2UgdGhlIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvci5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBrZXlib2FyZCBjYXB0dXJlcyBhcmUgZ2xvYmFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4gYSBTY2VuZSwgdG8gc2F5IHByZXZlbnRcclxuICAgICAqIHRoZSBTUEFDRSBCQVIgZnJvbSB0cmlnZ2VyaW5nIGEgcGFnZSBzY3JvbGwsIHRoZW4gaXQgd2lsbCBwcmV2ZW50IGl0IGZvciBhbnkgU2NlbmUgaW4geW91ciBnYW1lLCBub3QganVzdCB0aGUgY2FsbGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gcGFzcyBpbiBhIHNpbmdsZSBrZXkgY29kZSB2YWx1ZSwgb3IgYW4gYXJyYXkgb2Yga2V5IGNvZGVzLCBvciBhIHN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRDYXB0dXJlKDYyKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBBbiBhcnJheSBvZiBrZXkgY29kZXM6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuYWRkQ2FwdHVyZShbIDYyLCA2MywgNjQgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogT3IgYSBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuYWRkQ2FwdHVyZSgnVyxTLEEsRCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHVzZSBub24tYWxwaGEgbnVtZXJpYyBrZXlzLCB1c2UgYSBzdHJpbmcsIHN1Y2ggYXMgJ1VQJywgJ1NQQUNFJyBvciAnTEVGVCcuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIGFycmF5IG1peGluZyBib3RoIHN0cmluZ3MgYW5kIGtleSBjb2RlIGludGVnZXJzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGVyZSBhcmUgYWN0aXZlIGNhcHR1cmVzIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2FkZENhcHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8aW50ZWdlcltdfGFueVtdKX0ga2V5Y29kZSAtIFRoZSBLZXkgQ29kZXMgdG8gZW5hYmxlIGNhcHR1cmUgZm9yLCBwcmV2ZW50aW5nIHRoZW0gcmVhY2hpbmcgdGhlIGJyb3dzZXIuXHJcbiAgICAgKi9cclxuICAgIGFkZENhcHR1cmU6IGZ1bmN0aW9uIChrZXljb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5Y29kZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXljb2RlID0ga2V5Y29kZS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleWNvZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5Y29kZSA9IFsga2V5Y29kZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gdGhpcy5jYXB0dXJlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXljb2RlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBrZXljb2RlW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IEtleUNvZGVzW2NvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FwdHVyZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhcHR1cmVzLnB1c2goY29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBjYXB0dXJlcy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gZXhpc3Rpbmcga2V5IGNhcHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQga2V5Ym9hcmQgY2FwdHVyZXMgYXJlIGdsb2JhbC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIGEgU2NlbmUsIHRvIHJlbW92ZVxyXG4gICAgICogdGhlIGNhcHR1cmUgb2YgYSBrZXksIHRoZW4gaXQgd2lsbCByZW1vdmUgaXQgZm9yIGFueSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vdCBqdXN0IHRoZSBjYWxsaW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGluIGEgc2luZ2xlIGtleSBjb2RlIHZhbHVlLCBvciBhbiBhcnJheSBvZiBrZXkgY29kZXMsIG9yIGEgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLnJlbW92ZUNhcHR1cmUoNjIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5yZW1vdmVDYXB0dXJlKFsgNjIsIDYzLCA2NCBdKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBPciBhIHN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5yZW1vdmVDYXB0dXJlKCdXLFMsQSxEJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVG8gdXNlIG5vbi1hbHBoYSBudW1lcmljIGtleXMsIHVzZSBhIHN0cmluZywgc3VjaCBhcyAnVVAnLCAnU1BBQ0UnIG9yICdMRUZUJy5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gYXJyYXkgbWl4aW5nIGJvdGggc3RyaW5ncyBhbmQga2V5IGNvZGUgaW50ZWdlcnMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZXJlIGFyZSBubyBjYXB0dXJlcyBsZWZ0IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IGlzIHNldCB0byBgZmFsc2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNyZW1vdmVDYXB0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfGludGVnZXJbXXxhbnlbXSl9IGtleWNvZGUgLSBUaGUgS2V5IENvZGVzIHRvIGRpc2FibGUgY2FwdHVyZSBmb3IsIGFsbG93aW5nIHRoZW0gcmVhY2hpbmcgdGhlIGJyb3dzZXIgYWdhaW4uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNhcHR1cmU6IGZ1bmN0aW9uIChrZXljb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5Y29kZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXljb2RlID0ga2V5Y29kZS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleWNvZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5Y29kZSA9IFsga2V5Y29kZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gdGhpcy5jYXB0dXJlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXljb2RlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBrZXljb2RlW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IEtleUNvZGVzW2NvZGUudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIEFycmF5UmVtb3ZlKGNhcHR1cmVzLCBjb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBjYXB0dXJlcy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGtleWJvYXJkIGNhcHR1cmVzIGFuZCBzZXRzIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IHRvIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2NsZWFyQ2FwdHVyZXNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgY2xlYXJDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNhcHR1cmVzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleWJvYXJkIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckNhcHR1cmVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmdhbWUuZXZlbnRzLm9mZihHYW1lRXZlbnRzLlBPU1RfUkVOREVSLCB0aGlzLnBvc3RVcGRhdGUsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlib2FyZE1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/KeyboardManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ../InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar Key = __webpack_require__(/*! ./keys/Key */ \"./node_modules/phaser/src/input/keyboard/keys/Key.js\");\r\nvar KeyCodes = __webpack_require__(/*! ./keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\nvar KeyCombo = __webpack_require__(/*! ./combo/KeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\");\r\nvar KeyMap = __webpack_require__(/*! ./keys/KeyMap */ \"./node_modules/phaser/src/input/keyboard/keys/KeyMap.js\");\r\nvar SnapFloor = __webpack_require__(/*! ../../math/snap/SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Keyboard Plugin is an input plugin that belongs to the Scene-owned Input system.\r\n * \r\n * Its role is to listen for native DOM Keyboard Events and then process them.\r\n * \r\n * You do not need to create this class directly, the Input system will create an instance of it automatically.\r\n * \r\n * You can access it from within a Scene using `this.input.keyboard`. For example, you can do:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.on('keydown', callback, context);\r\n * ```\r\n *\r\n * Or, to listen for a specific key:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.on('keydown-A', callback, context);\r\n * ```\r\n *\r\n * You can also create Key objects, which you can then poll in your game loop:\r\n *\r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * ```\r\n * \r\n * If you have multiple parallel Scenes, each trying to get keyboard input, be sure to disable capture on them to stop them from\r\n * stealing input from another Scene in the list. You can do this with `this.input.keyboard.enabled = false` within the\r\n * Scene to stop all input, or `this.input.keyboard.preventDefault = false` to stop a Scene halting input on another Scene.\r\n *\r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * See http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/ for more details.\r\n *\r\n * Also please be aware that certain browser extensions can disable or override Phaser keyboard handling.\r\n * For example the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * And there are others. So, please check your extensions before opening Phaser issues about keys that don't work.\r\n *\r\n * @class KeyboardPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.InputPlugin} sceneInputPlugin - A reference to the Scene Input Plugin that the KeyboardPlugin belongs to.\r\n */\r\nvar KeyboardPlugin = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function KeyboardPlugin (sceneInputPlugin)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the core game, so we can listen for visibility events.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.16.0\r\n         */\r\n        this.game = sceneInputPlugin.systems.game;\r\n\r\n        /**\r\n         * A reference to the Scene that this Input Plugin is responsible for.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.10.0\r\n         */\r\n        this.scene = sceneInputPlugin.scene;\r\n\r\n        /**\r\n         * A reference to the Scene Systems Settings.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#settings\r\n         * @type {Phaser.Types.Scenes.SettingsObject}\r\n         * @since 3.10.0\r\n         */\r\n        this.settings = this.scene.sys.settings;\r\n\r\n        /**\r\n         * A reference to the Scene Input Plugin that created this Keyboard Plugin.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#sceneInputPlugin\r\n         * @type {Phaser.Input.InputPlugin}\r\n         * @since 3.10.0\r\n         */\r\n        this.sceneInputPlugin = sceneInputPlugin;\r\n\r\n        /**\r\n         * A reference to the global Keyboard Manager.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#manager\r\n         * @type {Phaser.Input.InputPlugin}\r\n         * @since 3.16.0\r\n         */\r\n        this.manager = sceneInputPlugin.manager.keyboard;\r\n\r\n        /**\r\n         * A boolean that controls if this Keyboard Plugin is enabled or not.\r\n         * Can be toggled on the fly.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.10.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * An array of Key objects to process.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#keys\r\n         * @type {Phaser.Input.Keyboard.Key[]}\r\n         * @since 3.10.0\r\n         */\r\n        this.keys = [];\r\n\r\n        /**\r\n         * An array of KeyCombo objects to process.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyboardPlugin#combos\r\n         * @type {Phaser.Input.Keyboard.KeyCombo[]}\r\n         * @since 3.10.0\r\n         */\r\n        this.combos = [];\r\n\r\n        sceneInputPlugin.pluginEvents.once(InputEvents.BOOT, this.boot, this);\r\n        sceneInputPlugin.pluginEvents.on(InputEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#boot\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var settings = this.settings.input;\r\n\r\n        this.enabled = GetValue(settings, 'keyboard', true);\r\n\r\n        var captures = GetValue(settings, 'keyboard.capture', null);\r\n\r\n        if (captures)\r\n        {\r\n            this.addCaptures(captures);\r\n        }\r\n\r\n        this.sceneInputPlugin.pluginEvents.once(InputEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#start\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (this.sceneInputPlugin.manager.useQueue)\r\n        {\r\n            this.sceneInputPlugin.pluginEvents.on(InputEvents.UPDATE, this.update, this);\r\n        }\r\n        else\r\n        {\r\n            this.sceneInputPlugin.manager.events.on(InputEvents.MANAGER_PROCESS, this.update, this);\r\n        }\r\n\r\n        this.sceneInputPlugin.pluginEvents.once(InputEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        this.game.events.on(GameEvents.BLUR, this.resetKeys, this);\r\n    },\r\n\r\n    /**\r\n     * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#isActive\r\n     * @since 3.10.0\r\n     *\r\n     * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n     */\r\n    isActive: function ()\r\n    {\r\n        return (this.enabled && this.scene.sys.isActive());\r\n    },\r\n\r\n    /**\r\n     * By default when a key is pressed Phaser will not stop the event from propagating up to the browser.\r\n     * There are some keys this can be annoying for, like the arrow keys or space bar, which make the browser window scroll.\r\n     *\r\n     * This `addCapture` method enables consuming keyboard events for specific keys, so they don't bubble up the browser\r\n     * and cause the default behaviors.\r\n     * \r\n     * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to say prevent\r\n     * the SPACE BAR from triggering a page scroll, then it will prevent it for any Scene in your game, not just the calling one.\r\n     * \r\n     * You can pass a single key code value:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture(62);\r\n     * ```\r\n     * \r\n     * An array of key codes:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture([ 62, 63, 64 ]);\r\n     * ```\r\n     * \r\n     * Or, a comma-delimited string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addCapture('W,S,A,D');\r\n     * ```\r\n     * \r\n     * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n     * \r\n     * You can also provide an array mixing both strings and key code integers.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#addCapture\r\n     * @since 3.16.0\r\n     * \r\n     * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to enable event capture for.\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    addCapture: function (keycode)\r\n    {\r\n        this.manager.addCapture(keycode);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes an existing key capture.\r\n     * \r\n     * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to remove\r\n     * the capture of a key, then it will remove it for any Scene in your game, not just the calling one.\r\n     * \r\n     * You can pass a single key code value:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture(62);\r\n     * ```\r\n     * \r\n     * An array of key codes:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture([ 62, 63, 64 ]);\r\n     * ```\r\n     * \r\n     * Or, a comma-delimited string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.removeCapture('W,S,A,D');\r\n     * ```\r\n     * \r\n     * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n     * \r\n     * You can also provide an array mixing both strings and key code integers.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#removeCapture\r\n     * @since 3.16.0\r\n     * \r\n     * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to disable event capture for.\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    removeCapture: function (keycode)\r\n    {\r\n        this.manager.removeCapture(keycode);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns an array that contains all of the keyboard captures currently enabled.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#getCaptures\r\n     * @since 3.16.0\r\n     * \r\n     * @return {integer[]} An array of all the currently capturing key codes.\r\n     */\r\n    getCaptures: function ()\r\n    {\r\n        return this.manager.captures;\r\n    },\r\n\r\n    /**\r\n     * Allows Phaser to prevent any key captures you may have defined from bubbling up the browser.\r\n     * You can use this to re-enable event capturing if you had paused it via `disableGlobalCapture`.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#enableGlobalCapture\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    enableGlobalCapture: function ()\r\n    {\r\n        this.manager.preventDefault = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Disables Phaser from preventing any key captures you may have defined, without actually removing them.\r\n     * You can use this to temporarily disable event capturing if, for example, you swap to a DOM element.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#disableGlobalCapture\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    disableGlobalCapture: function ()\r\n    {\r\n        this.manager.preventDefault = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes all keyboard captures.\r\n     * \r\n     * Note that this is a global change. It will clear all event captures across your game, not just for this specific Scene.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#clearCaptures\r\n     * @since 3.16.0\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    clearCaptures: function ()\r\n    {\r\n        this.manager.clearCaptures();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates and returns an object containing 4 hotkeys for Up, Down, Left and Right, and also Space Bar and shift.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#createCursorKeys\r\n     * @since 3.10.0\r\n     *\r\n     * @return {Phaser.Types.Input.Keyboard.CursorKeys} An object containing the properties: `up`, `down`, `left`, `right`, `space` and `shift`.\r\n     */\r\n    createCursorKeys: function ()\r\n    {\r\n        return this.addKeys({\r\n            up: KeyCodes.UP,\r\n            down: KeyCodes.DOWN,\r\n            left: KeyCodes.LEFT,\r\n            right: KeyCodes.RIGHT,\r\n            space: KeyCodes.SPACE,\r\n            shift: KeyCodes.SHIFT\r\n        });\r\n    },\r\n\r\n    /**\r\n     * A practical way to create an object containing user selected hotkeys.\r\n     *\r\n     * For example:\r\n     *\r\n     * ```javascript\r\n     * this.input.keyboard.addKeys({ 'up': Phaser.Input.Keyboard.KeyCodes.W, 'down': Phaser.Input.Keyboard.KeyCodes.S });\r\n     * ```\r\n     * \r\n     * would return an object containing the properties (`up` and `down`) mapped to W and S {@link Phaser.Input.Keyboard.Key} objects.\r\n     *\r\n     * You can also pass in a comma-separated string:\r\n     * \r\n     * ```javascript\r\n     * this.input.keyboard.addKeys('W,S,A,D');\r\n     * ```\r\n     *\r\n     * Which will return an object with the properties W, S, A and D mapped to the relevant Key objects.\r\n     *\r\n     * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#addKeys\r\n     * @since 3.10.0\r\n     *\r\n     * @param {(object|string)} keys - An object containing Key Codes, or a comma-separated string.\r\n     * @param {boolean} [enableCapture=true] - Automatically call `preventDefault` on the native DOM browser event for the key codes being added.\r\n     * @param {boolean} [emitOnRepeat=false] - Controls if the Key will continuously emit a 'down' event while being held down (true), or emit the event just once (false, the default).\r\n     *\r\n     * @return {object} An object containing Key objects mapped to the input properties.\r\n     */\r\n    addKeys: function (keys, enableCapture, emitOnRepeat)\r\n    {\r\n        if (enableCapture === undefined) { enableCapture = true; }\r\n        if (emitOnRepeat === undefined) { emitOnRepeat = false; }\r\n\r\n        var output = {};\r\n\r\n        if (typeof keys === 'string')\r\n        {\r\n            keys = keys.split(',');\r\n\r\n            for (var i = 0; i < keys.length; i++)\r\n            {\r\n                var currentKey = keys[i].trim();\r\n\r\n                if (currentKey)\r\n                {\r\n                    output[currentKey] = this.addKey(currentKey, enableCapture, emitOnRepeat);\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (var key in keys)\r\n            {\r\n                output[key] = this.addKey(keys[key], enableCapture, emitOnRepeat);\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Adds a Key object to this Keyboard Plugin.\r\n     *\r\n     * The given argument can be either an existing Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n     *\r\n     * If a Key object is given, and one already exists matching the same key code, the existing one is replaced with the new one.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#addKey\r\n     * @since 3.10.0\r\n     *\r\n     * @param {(Phaser.Input.Keyboard.Key|string|integer)} key - Either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n     * @param {boolean} [enableCapture=true] - Automatically call `preventDefault` on the native DOM browser event for the key codes being added.\r\n     * @param {boolean} [emitOnRepeat=false] - Controls if the Key will continuously emit a 'down' event while being held down (true), or emit the event just once (false, the default).\r\n     *\r\n     * @return {Phaser.Input.Keyboard.Key} The newly created Key object, or a reference to it if it already existed in the keys array.\r\n     */\r\n    addKey: function (key, enableCapture, emitOnRepeat)\r\n    {\r\n        if (enableCapture === undefined) { enableCapture = true; }\r\n        if (emitOnRepeat === undefined) { emitOnRepeat = false; }\r\n\r\n        var keys = this.keys;\r\n\r\n        if (key instanceof Key)\r\n        {\r\n            var idx = keys.indexOf(key);\r\n\r\n            if (idx > -1)\r\n            {\r\n                keys[idx] = key;\r\n            }\r\n            else\r\n            {\r\n                keys[key.keyCode] = key;\r\n            }\r\n\r\n            if (enableCapture)\r\n            {\r\n                this.addCapture(key.keyCode);\r\n            }\r\n\r\n            key.setEmitOnRepeat(emitOnRepeat);\r\n\r\n            return key;\r\n        }\r\n\r\n        if (typeof key === 'string')\r\n        {\r\n            key = KeyCodes[key.toUpperCase()];\r\n        }\r\n\r\n        if (!keys[key])\r\n        {\r\n            keys[key] = new Key(this, key);\r\n\r\n            if (enableCapture)\r\n            {\r\n                this.addCapture(key);\r\n            }\r\n\r\n            keys[key].setEmitOnRepeat(emitOnRepeat);\r\n        }\r\n\r\n        return keys[key];\r\n    },\r\n\r\n    /**\r\n     * Removes a Key object from this Keyboard Plugin.\r\n     *\r\n     * The given argument can be either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#removeKey\r\n     * @since 3.10.0\r\n     *\r\n     * @param {(Phaser.Input.Keyboard.Key|string|integer)} key - Either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n     * @param {boolean} [destroy=false] - Call `Key.destroy` on the removed Key object?\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    removeKey: function (key, destroy)\r\n    {\r\n        if (destroy === undefined) { destroy = false; }\r\n\r\n        var keys = this.keys;\r\n        var ref;\r\n\r\n        if (key instanceof Key)\r\n        {\r\n            var idx = keys.indexOf(key);\r\n\r\n            if (idx > -1)\r\n            {\r\n                ref = this.keys[idx];\r\n\r\n                this.keys[idx] = undefined;\r\n            }\r\n        }\r\n        else if (typeof key === 'string')\r\n        {\r\n            key = KeyCodes[key.toUpperCase()];\r\n        }\r\n\r\n        if (keys[key])\r\n        {\r\n            ref = keys[key];\r\n\r\n            keys[key] = undefined;\r\n        }\r\n\r\n        if (ref)\r\n        {\r\n            ref.plugin = null;\r\n\r\n            if (destroy)\r\n            {\r\n                ref.destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a new KeyCombo.\r\n     * \r\n     * A KeyCombo will listen for a specific string of keys from the Keyboard, and when it receives them\r\n     * it will emit a `keycombomatch` event from this Keyboard Plugin.\r\n     *\r\n     * The keys to be listened for can be defined as:\r\n     *\r\n     * A string (i.e. 'ATARI')\r\n     * An array of either integers (key codes) or strings, or a mixture of both\r\n     * An array of objects (such as Key objects) with a public 'keyCode' property\r\n     *\r\n     * For example, to listen for the Konami code (up, up, down, down, left, right, left, right, b, a, enter)\r\n     * you could pass the following array of key codes:\r\n     *\r\n     * ```javascript\r\n     * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n     *\r\n     * this.input.keyboard.on('keycombomatch', function (event) {\r\n     *     console.log('Konami Code entered!');\r\n     * });\r\n     * ```\r\n     *\r\n     * Or, to listen for the user entering the word PHASER:\r\n     *\r\n     * ```javascript\r\n     * this.input.keyboard.createCombo('PHASER');\r\n     * ```\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#createCombo\r\n     * @since 3.10.0\r\n     *\r\n     * @param {(string|integer[]|object[])} keys - The keys that comprise this combo.\r\n     * @param {Phaser.Types.Input.Keyboard.KeyComboConfig} [config] - A Key Combo configuration object.\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyCombo} The new KeyCombo object.\r\n     */\r\n    createCombo: function (keys, config)\r\n    {\r\n        return new KeyCombo(this, keys, config);\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Key object is currently being held down.\r\n     * \r\n     * The difference between this method and checking the `Key.isDown` property directly is that you can provide\r\n     * a duration to this method. For example, if you wanted a key press to fire a bullet, but you only wanted\r\n     * it to be able to fire every 100ms, then you can call this method with a `duration` of 100 and it\r\n     * will only return `true` every 100ms.\r\n     * \r\n     * If the Keyboard Plugin has been disabled, this method will always return `false`.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#checkDown\r\n     * @since 3.11.0\r\n     *\r\n     * @param {Phaser.Input.Keyboard.Key} key - A Key object.\r\n     * @param {number} [duration=0] - The duration which must have elapsed before this Key is considered as being down.\r\n     * \r\n     * @return {boolean} `true` if the Key is down within the duration specified, otherwise `false`.\r\n     */\r\n    checkDown: function (key, duration)\r\n    {\r\n        if (this.enabled && key.isDown)\r\n        {\r\n            var t = SnapFloor(this.time - key.timeDown, duration);\r\n\r\n            if (t > key._tick)\r\n            {\r\n                key._tick = t;\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler called by the Input Plugin, which is in turn invoked by the Game step.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#update\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    update: function ()\r\n    {\r\n        var queue = this.manager.queue;\r\n        var len = queue.length;\r\n\r\n        if (!this.isActive() || len === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var keys = this.keys;\r\n\r\n        //  Process the event queue, dispatching all of the events that have stored up\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            var event = queue[i];\r\n            var code = event.keyCode;\r\n            var key = keys[code];\r\n            var repeat = false;\r\n\r\n            //  Override the default functions (it's too late for the browser to use them anyway, so we may as well)\r\n            if (event.cancelled === undefined)\r\n            {\r\n                //  Event allowed to flow across all handlers in this Scene, and any other Scene in the Scene list\r\n                event.cancelled = 0;\r\n\r\n                //  Won't reach any more local (Scene level) handlers\r\n                event.stopImmediatePropagation = function ()\r\n                {\r\n                    event.cancelled = 1;\r\n                };\r\n    \r\n                //  Won't reach any more handlers in any Scene further down the Scene list\r\n                event.stopPropagation = function ()\r\n                {\r\n                    event.cancelled = -1;\r\n                };\r\n            }\r\n\r\n            if (event.cancelled === -1)\r\n            {\r\n                //  This event has been stopped from broadcasting to any other Scene, so abort.\r\n                continue;\r\n            }\r\n\r\n            if (event.type === 'keydown')\r\n            {\r\n                //  Key specific callback first\r\n                if (key)\r\n                {\r\n                    repeat = key.isDown;\r\n\r\n                    key.onDown(event);\r\n                }\r\n\r\n                if (!event.cancelled && (!key || !repeat))\r\n                {\r\n                    if (KeyMap[code])\r\n                    {\r\n                        this.emit(Events.KEY_DOWN + KeyMap[code], event);\r\n\r\n                        //  Deprecated, kept in for compatibility with 3.15\r\n                        //  To be removed by 3.20.\r\n                        this.emit('keydown_' + KeyMap[code], event);\r\n                    }\r\n\r\n                    if (!event.cancelled)\r\n                    {\r\n                        this.emit(Events.ANY_KEY_DOWN, event);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  Key specific callback first\r\n                if (key)\r\n                {\r\n                    key.onUp(event);\r\n                }\r\n\r\n                if (!event.cancelled)\r\n                {\r\n                    if (KeyMap[code])\r\n                    {\r\n                        this.emit(Events.KEY_UP + KeyMap[code], event);\r\n\r\n                        //  Deprecated, kept in for compatibility with 3.15\r\n                        //  To be removed by 3.20.\r\n                        this.emit('keyup_' + KeyMap[code], event);\r\n                    }\r\n\r\n                    if (!event.cancelled)\r\n                    {\r\n                        this.emit(Events.ANY_KEY_UP, event);\r\n                    }\r\n                }\r\n            }\r\n\r\n            //  Reset the cancel state for other Scenes to use\r\n            if (event.cancelled === 1)\r\n            {\r\n                event.cancelled = 0;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resets all Key objects created by _this_ Keyboard Plugin back to their default un-pressed states.\r\n     * This can only reset keys created via the `addKey`, `addKeys` or `createCursorKeys` methods.\r\n     * If you have created a Key object directly you'll need to reset it yourself.\r\n     * \r\n     * This method is called automatically when the Keyboard Plugin shuts down, but can be\r\n     * invoked directly at any time you require.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#resetKeys\r\n     * @since 3.15.0\r\n     *\r\n     * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n     */\r\n    resetKeys: function ()\r\n    {\r\n        var keys = this.keys;\r\n\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            //  Because it's a sparsely populated array\r\n            if (keys[i])\r\n            {\r\n                keys[i].reset();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuts this Keyboard Plugin down. This performs the following tasks:\r\n     * \r\n     * 1 - Resets all keys created by this Keyboard plugin.\r\n     * 2 - Stops and removes the keyboard event listeners.\r\n     * 3 - Clears out any pending requests in the queue, without processing them.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#shutdown\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.resetKeys();\r\n\r\n        if (this.sceneInputPlugin.manager.useQueue)\r\n        {\r\n            this.sceneInputPlugin.pluginEvents.off(InputEvents.UPDATE, this.update, this);\r\n        }\r\n        else\r\n        {\r\n            this.sceneInputPlugin.manager.events.off(InputEvents.MANAGER_PROCESS, this.update, this);\r\n        }\r\n\r\n        this.game.events.off(GameEvents.BLUR, this.resetKeys);\r\n\r\n        this.removeAllListeners();\r\n\r\n        this.queue = [];\r\n    },\r\n\r\n    /**\r\n     * Destroys this Keyboard Plugin instance and all references it holds, plus clears out local arrays.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyboardPlugin#destroy\r\n     * @private\r\n     * @since 3.10.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        var keys = this.keys;\r\n\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            //  Because it's a sparsely populated array\r\n            if (keys[i])\r\n            {\r\n                keys[i].destroy();\r\n            }\r\n        }\r\n\r\n        this.keys = [];\r\n        this.combos = [];\r\n        this.queue = [];\r\n\r\n        this.scene = null;\r\n        this.settings = null;\r\n        this.sceneInputPlugin = null;\r\n        this.manager = null;\r\n    },\r\n\r\n    /**\r\n     * Internal time value.\r\n     *\r\n     * @name Phaser.Input.Keyboard.KeyboardPlugin#time\r\n     * @type {number}\r\n     * @private\r\n     * @since 3.11.0\r\n     */\r\n    time: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.sceneInputPlugin.manager.time;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * An instance of the Keyboard Plugin class, if enabled via the `input.keyboard` Scene or Game Config property.\r\n * Use this to create Key objects and listen for keyboard specific events.\r\n *\r\n * @name Phaser.Input.InputPlugin#keyboard\r\n * @type {?Phaser.Input.Keyboard.KeyboardPlugin}\r\n * @since 3.10.0\r\n */\r\nInputPluginCache.register('KeyboardPlugin', KeyboardPlugin, 'keyboard', 'keyboard', 'inputKeyboard');\r\n\r\nmodule.exports = KeyboardPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZFBsdWdpbi5qcz85YmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywwRUFBVTtBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyx5RUFBbUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNyQyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsVUFBVSxtQkFBTyxDQUFDLHdFQUFZO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyxrRkFBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLG9GQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsOEVBQWU7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsbUZBQTJCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1Q0FBdUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsbUZBQW1GO0FBQ3ZIO0FBQ0E7QUFDQSw2RkFBNkYsZ0NBQWdDO0FBQzdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQjtBQUNoRSx5Q0FBeUMsc0JBQXNCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkNBQTJDO0FBQzFELGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0I7QUFDaEUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkNBQTJDO0FBQzFELGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGlCQUFpQjs7QUFFckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3RixxQkFBcUI7QUFDN0c7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLDJDQUEyQztBQUMxRDtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQkFBMEI7QUFDekMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL0tleWJvYXJkUGx1Z2luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIElucHV0RXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBJbnB1dFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vSW5wdXRQbHVnaW5DYWNoZScpO1xyXG52YXIgS2V5ID0gcmVxdWlyZSgnLi9rZXlzL0tleScpO1xyXG52YXIgS2V5Q29kZXMgPSByZXF1aXJlKCcuL2tleXMvS2V5Q29kZXMnKTtcclxudmFyIEtleUNvbWJvID0gcmVxdWlyZSgnLi9jb21iby9LZXlDb21ibycpO1xyXG52YXIgS2V5TWFwID0gcmVxdWlyZSgnLi9rZXlzL0tleU1hcCcpO1xyXG52YXIgU25hcEZsb29yID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9zbmFwL1NuYXBGbG9vcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEtleWJvYXJkIFBsdWdpbiBpcyBhbiBpbnB1dCBwbHVnaW4gdGhhdCBiZWxvbmdzIHRvIHRoZSBTY2VuZS1vd25lZCBJbnB1dCBzeXN0ZW0uXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnRzIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS5cclxuICogXHJcbiAqIFlvdSBkbyBub3QgbmVlZCB0byBjcmVhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgdGhlIElucHV0IHN5c3RlbSB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBpdCBhdXRvbWF0aWNhbGx5LlxyXG4gKiBcclxuICogWW91IGNhbiBhY2Nlc3MgaXQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZyBgdGhpcy5pbnB1dC5rZXlib2FyZGAuIEZvciBleGFtcGxlLCB5b3UgY2FuIGRvOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleWRvd24nLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgdG8gbGlzdGVuIGZvciBhIHNwZWNpZmljIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5vbigna2V5ZG93bi1BJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogWW91IGNhbiBhbHNvIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiB0aGVuIHBvbGwgaW4geW91ciBnYW1lIGxvb3A6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHNwYWNlQmFyID0gdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRLZXkoUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFKTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYXJhbGxlbCBTY2VuZXMsIGVhY2ggdHJ5aW5nIHRvIGdldCBrZXlib2FyZCBpbnB1dCwgYmUgc3VyZSB0byBkaXNhYmxlIGNhcHR1cmUgb24gdGhlbSB0byBzdG9wIHRoZW0gZnJvbVxyXG4gKiBzdGVhbGluZyBpbnB1dCBmcm9tIGFub3RoZXIgU2NlbmUgaW4gdGhlIGxpc3QuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIGB0aGlzLmlucHV0LmtleWJvYXJkLmVuYWJsZWQgPSBmYWxzZWAgd2l0aGluIHRoZVxyXG4gKiBTY2VuZSB0byBzdG9wIGFsbCBpbnB1dCwgb3IgYHRoaXMuaW5wdXQua2V5Ym9hcmQucHJldmVudERlZmF1bHQgPSBmYWxzZWAgdG8gc3RvcCBhIFNjZW5lIGhhbHRpbmcgaW5wdXQgb24gYW5vdGhlciBTY2VuZS5cclxuICpcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFNlZSBodHRwOi8vd3d3Lmh0bWw1Z2FtZWRldnMuY29tL3RvcGljLzQ4NzYtaW1wb3NzaWJsZS10by11c2UtbW9yZS10aGFuLTIta2V5Ym9hcmQtaW5wdXQtYnV0dG9ucy1hdC10aGUtc2FtZS10aW1lLyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvIHBsZWFzZSBiZSBhd2FyZSB0aGF0IGNlcnRhaW4gYnJvd3NlciBleHRlbnNpb25zIGNhbiBkaXNhYmxlIG9yIG92ZXJyaWRlIFBoYXNlciBrZXlib2FyZCBoYW5kbGluZy5cclxuICogRm9yIGV4YW1wbGUgdGhlIENocm9tZSBleHRlbnNpb24gdmltaXVtIGlzIGtub3duIHRvIGRpc2FibGUgUGhhc2VyIGZyb20gdXNpbmcgdGhlIEQga2V5LCB3aGlsZSBFdmVyTm90ZSBkaXNhYmxlcyB0aGUgYmFja3RpY2sga2V5LlxyXG4gKiBBbmQgdGhlcmUgYXJlIG90aGVycy4gU28sIHBsZWFzZSBjaGVjayB5b3VyIGV4dGVuc2lvbnMgYmVmb3JlIG9wZW5pbmcgUGhhc2VyIGlzc3VlcyBhYm91dCBrZXlzIHRoYXQgZG9uJ3Qgd29yay5cclxuICpcclxuICogQGNsYXNzIEtleWJvYXJkUGx1Z2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IHNjZW5lSW5wdXRQbHVnaW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgSW5wdXQgUGx1Z2luIHRoYXQgdGhlIEtleWJvYXJkUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAqL1xyXG52YXIgS2V5Ym9hcmRQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEtleWJvYXJkUGx1Z2luIChzY2VuZUlucHV0UGx1Z2luKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgY29yZSBnYW1lLCBzbyB3ZSBjYW4gbGlzdGVuIGZvciB2aXNpYmlsaXR5IGV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBzY2VuZUlucHV0UGx1Z2luLnN5c3RlbXMuZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBJbnB1dCBQbHVnaW4gaXMgcmVzcG9uc2libGUgZm9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lSW5wdXRQbHVnaW4uc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIFNldHRpbmdzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnNjZW5lLnN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IGNyZWF0ZWQgdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc2NlbmVJbnB1dFBsdWdpblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbiA9IHNjZW5lSW5wdXRQbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgS2V5Ym9hcmQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gc2NlbmVJbnB1dFBsdWdpbi5tYW5hZ2VyLmtleWJvYXJkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGlzIEtleWJvYXJkIFBsdWdpbiBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIEtleSBvYmplY3RzIHRvIHByb2Nlc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4ja2V5c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBLZXlDb21ibyBvYmplY3RzIHRvIHByb2Nlc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY29tYm9zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib1tdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbWJvcyA9IFtdO1xyXG5cclxuICAgICAgICBzY2VuZUlucHV0UGx1Z2luLnBsdWdpbkV2ZW50cy5vbmNlKElucHV0RXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub24oSW5wdXRFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5pbnB1dDtcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gR2V0VmFsdWUoc2V0dGluZ3MsICdrZXlib2FyZCcsIHRydWUpO1xyXG5cclxuICAgICAgICB2YXIgY2FwdHVyZXMgPSBHZXRWYWx1ZShzZXR0aW5ncywgJ2tleWJvYXJkLmNhcHR1cmUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGNhcHR1cmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDYXB0dXJlcyhjYXB0dXJlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uY2UoSW5wdXRFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub24oSW5wdXRFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5tYW5hZ2VyLmV2ZW50cy5vbihJbnB1dEV2ZW50cy5NQU5BR0VSX1BST0NFU1MsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5CTFVSLCB0aGlzLnJlc2V0S2V5cywgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBib3RoIHRoaXMgcGx1Z2luIGFuZCB0aGUgU2NlbmUgdG8gd2hpY2ggaXQgYmVsb25ncyBpcyBhY3RpdmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jaXNBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBsdWdpbiBhbmQgdGhlIFNjZW5lIGl0IGJlbG9uZ3MgdG8gaXMgYWN0aXZlLlxyXG4gICAgICovXHJcbiAgICBpc0FjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnNjZW5lLnN5cy5pc0FjdGl2ZSgpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCeSBkZWZhdWx0IHdoZW4gYSBrZXkgaXMgcHJlc3NlZCBQaGFzZXIgd2lsbCBub3Qgc3RvcCB0aGUgZXZlbnQgZnJvbSBwcm9wYWdhdGluZyB1cCB0byB0aGUgYnJvd3Nlci5cclxuICAgICAqIFRoZXJlIGFyZSBzb21lIGtleXMgdGhpcyBjYW4gYmUgYW5ub3lpbmcgZm9yLCBsaWtlIHRoZSBhcnJvdyBrZXlzIG9yIHNwYWNlIGJhciwgd2hpY2ggbWFrZSB0aGUgYnJvd3NlciB3aW5kb3cgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgYGFkZENhcHR1cmVgIG1ldGhvZCBlbmFibGVzIGNvbnN1bWluZyBrZXlib2FyZCBldmVudHMgZm9yIHNwZWNpZmljIGtleXMsIHNvIHRoZXkgZG9uJ3QgYnViYmxlIHVwIHRoZSBicm93c2VyXHJcbiAgICAgKiBhbmQgY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3JzLlxyXG4gICAgICogXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IGtleWJvYXJkIGNhcHR1cmVzIGFyZSBnbG9iYWwuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiBhIFNjZW5lLCB0byBzYXkgcHJldmVudFxyXG4gICAgICogdGhlIFNQQUNFIEJBUiBmcm9tIHRyaWdnZXJpbmcgYSBwYWdlIHNjcm9sbCwgdGhlbiBpdCB3aWxsIHByZXZlbnQgaXQgZm9yIGFueSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vdCBqdXN0IHRoZSBjYWxsaW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGEgc2luZ2xlIGtleSBjb2RlIHZhbHVlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZENhcHR1cmUoNjIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRDYXB0dXJlKFsgNjIsIDYzLCA2NCBdKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBPciwgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZENhcHR1cmUoJ1csUyxBLEQnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUbyB1c2Ugbm9uLWFscGhhIG51bWVyaWMga2V5cywgdXNlIGEgc3RyaW5nLCBzdWNoIGFzICdVUCcsICdTUEFDRScgb3IgJ0xFRlQnLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBhcnJheSBtaXhpbmcgYm90aCBzdHJpbmdzIGFuZCBrZXkgY29kZSBpbnRlZ2Vycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNhZGRDYXB0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfGludGVnZXJbXXxhbnlbXSl9IGtleWNvZGUgLSBUaGUgS2V5IENvZGVzIHRvIGVuYWJsZSBldmVudCBjYXB0dXJlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGRDYXB0dXJlOiBmdW5jdGlvbiAoa2V5Y29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuYWRkQ2FwdHVyZShrZXljb2RlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbiBleGlzdGluZyBrZXkgY2FwdHVyZS5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBrZXlib2FyZCBjYXB0dXJlcyBhcmUgZ2xvYmFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4gYSBTY2VuZSwgdG8gcmVtb3ZlXHJcbiAgICAgKiB0aGUgY2FwdHVyZSBvZiBhIGtleSwgdGhlbiBpdCB3aWxsIHJlbW92ZSBpdCBmb3IgYW55IFNjZW5lIGluIHlvdXIgZ2FtZSwgbm90IGp1c3QgdGhlIGNhbGxpbmcgb25lLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgYSBzaW5nbGUga2V5IGNvZGUgdmFsdWU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQucmVtb3ZlQ2FwdHVyZSg2Mik7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQW4gYXJyYXkgb2Yga2V5IGNvZGVzOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLnJlbW92ZUNhcHR1cmUoWyA2MiwgNjMsIDY0IF0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIE9yLCBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQucmVtb3ZlQ2FwdHVyZSgnVyxTLEEsRCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHVzZSBub24tYWxwaGEgbnVtZXJpYyBrZXlzLCB1c2UgYSBzdHJpbmcsIHN1Y2ggYXMgJ1VQJywgJ1NQQUNFJyBvciAnTEVGVCcuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIGFycmF5IG1peGluZyBib3RoIHN0cmluZ3MgYW5kIGtleSBjb2RlIGludGVnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3JlbW92ZUNhcHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8aW50ZWdlcltdfGFueVtdKX0ga2V5Y29kZSAtIFRoZSBLZXkgQ29kZXMgdG8gZGlzYWJsZSBldmVudCBjYXB0dXJlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVDYXB0dXJlOiBmdW5jdGlvbiAoa2V5Y29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlQ2FwdHVyZShrZXljb2RlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUga2V5Ym9hcmQgY2FwdHVyZXMgY3VycmVudGx5IGVuYWJsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZ2V0Q2FwdHVyZXNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcltdfSBBbiBhcnJheSBvZiBhbGwgdGhlIGN1cnJlbnRseSBjYXB0dXJpbmcga2V5IGNvZGVzLlxyXG4gICAgICovXHJcbiAgICBnZXRDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmNhcHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbG93cyBQaGFzZXIgdG8gcHJldmVudCBhbnkga2V5IGNhcHR1cmVzIHlvdSBtYXkgaGF2ZSBkZWZpbmVkIGZyb20gYnViYmxpbmcgdXAgdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHJlLWVuYWJsZSBldmVudCBjYXB0dXJpbmcgaWYgeW91IGhhZCBwYXVzZWQgaXQgdmlhIGBkaXNhYmxlR2xvYmFsQ2FwdHVyZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZW5hYmxlR2xvYmFsQ2FwdHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUdsb2JhbENhcHR1cmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZXMgUGhhc2VyIGZyb20gcHJldmVudGluZyBhbnkga2V5IGNhcHR1cmVzIHlvdSBtYXkgaGF2ZSBkZWZpbmVkLCB3aXRob3V0IGFjdHVhbGx5IHJlbW92aW5nIHRoZW0uXHJcbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgZXZlbnQgY2FwdHVyaW5nIGlmLCBmb3IgZXhhbXBsZSwgeW91IHN3YXAgdG8gYSBET00gZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNkaXNhYmxlR2xvYmFsQ2FwdHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVHbG9iYWxDYXB0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5wcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXlib2FyZCBjYXB0dXJlcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgYSBnbG9iYWwgY2hhbmdlLiBJdCB3aWxsIGNsZWFyIGFsbCBldmVudCBjYXB0dXJlcyBhY3Jvc3MgeW91ciBnYW1lLCBub3QganVzdCBmb3IgdGhpcyBzcGVjaWZpYyBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNjbGVhckNhcHR1cmVzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2lufSBUaGlzIEtleWJvYXJkUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2xlYXJDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuY2xlYXJDYXB0dXJlcygpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIDQgaG90a2V5cyBmb3IgVXAsIERvd24sIExlZnQgYW5kIFJpZ2h0LCBhbmQgYWxzbyBTcGFjZSBCYXIgYW5kIHNoaWZ0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2NyZWF0ZUN1cnNvcktleXNcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuSW5wdXQuS2V5Ym9hcmQuQ3Vyc29yS2V5c30gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXM6IGB1cGAsIGBkb3duYCwgYGxlZnRgLCBgcmlnaHRgLCBgc3BhY2VgIGFuZCBgc2hpZnRgLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVDdXJzb3JLZXlzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEtleXMoe1xyXG4gICAgICAgICAgICB1cDogS2V5Q29kZXMuVVAsXHJcbiAgICAgICAgICAgIGRvd246IEtleUNvZGVzLkRPV04sXHJcbiAgICAgICAgICAgIGxlZnQ6IEtleUNvZGVzLkxFRlQsXHJcbiAgICAgICAgICAgIHJpZ2h0OiBLZXlDb2Rlcy5SSUdIVCxcclxuICAgICAgICAgICAgc3BhY2U6IEtleUNvZGVzLlNQQUNFLFxyXG4gICAgICAgICAgICBzaGlmdDogS2V5Q29kZXMuU0hJRlRcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHByYWN0aWNhbCB3YXkgdG8gY3JlYXRlIGFuIG9iamVjdCBjb250YWluaW5nIHVzZXIgc2VsZWN0ZWQgaG90a2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgZXhhbXBsZTpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleXMoeyAndXAnOiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVywgJ2Rvd24nOiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUyB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiB3b3VsZCByZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgKGB1cGAgYW5kIGBkb3duYCkgbWFwcGVkIHRvIFcgYW5kIFMge0BsaW5rIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleXMoJ1csUyxBLEQnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIFcsIFMsIEEgYW5kIEQgbWFwcGVkIHRvIHRoZSByZWxldmFudCBLZXkgb2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUbyB1c2Ugbm9uLWFscGhhIG51bWVyaWMga2V5cywgdXNlIGEgc3RyaW5nLCBzdWNoIGFzICdVUCcsICdTUEFDRScgb3IgJ0xFRlQnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2FkZEtleXNcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhvYmplY3R8c3RyaW5nKX0ga2V5cyAtIEFuIG9iamVjdCBjb250YWluaW5nIEtleSBDb2Rlcywgb3IgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZW5hYmxlQ2FwdHVyZT10cnVlXSAtIEF1dG9tYXRpY2FsbHkgY2FsbCBgcHJldmVudERlZmF1bHRgIG9uIHRoZSBuYXRpdmUgRE9NIGJyb3dzZXIgZXZlbnQgZm9yIHRoZSBrZXkgY29kZXMgYmVpbmcgYWRkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0T25SZXBlYXQ9ZmFsc2VdIC0gQ29udHJvbHMgaWYgdGhlIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgJ2Rvd24nIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksIG9yIGVtaXQgdGhlIGV2ZW50IGp1c3Qgb25jZSAoZmFsc2UsIHRoZSBkZWZhdWx0KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIEtleSBvYmplY3RzIG1hcHBlZCB0byB0aGUgaW5wdXQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgYWRkS2V5czogZnVuY3Rpb24gKGtleXMsIGVuYWJsZUNhcHR1cmUsIGVtaXRPblJlcGVhdClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5hYmxlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7IGVuYWJsZUNhcHR1cmUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGVtaXRPblJlcGVhdCA9PT0gdW5kZWZpbmVkKSB7IGVtaXRPblJlcGVhdCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c1tpXS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRLZXkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2N1cnJlbnRLZXldID0gdGhpcy5hZGRLZXkoY3VycmVudEtleSwgZW5hYmxlQ2FwdHVyZSwgZW1pdE9uUmVwZWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4ga2V5cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSB0aGlzLmFkZEtleShrZXlzW2tleV0sIGVuYWJsZUNhcHR1cmUsIGVtaXRPblJlcGVhdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIEtleSBvYmplY3QgdG8gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGdpdmVuIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYW4gZXhpc3RpbmcgS2V5IG9iamVjdCwgYSBzdHJpbmcsIHN1Y2ggYXMgYEFgIG9yIGBTUEFDRWAsIG9yIGEga2V5IGNvZGUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBLZXkgb2JqZWN0IGlzIGdpdmVuLCBhbmQgb25lIGFscmVhZHkgZXhpc3RzIG1hdGNoaW5nIHRoZSBzYW1lIGtleSBjb2RlLCB0aGUgZXhpc3Rpbmcgb25lIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jYWRkS2V5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLklucHV0LktleWJvYXJkLktleXxzdHJpbmd8aW50ZWdlcil9IGtleSAtIEVpdGhlciBhIEtleSBvYmplY3QsIGEgc3RyaW5nLCBzdWNoIGFzIGBBYCBvciBgU1BBQ0VgLCBvciBhIGtleSBjb2RlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZW5hYmxlQ2FwdHVyZT10cnVlXSAtIEF1dG9tYXRpY2FsbHkgY2FsbCBgcHJldmVudERlZmF1bHRgIG9uIHRoZSBuYXRpdmUgRE9NIGJyb3dzZXIgZXZlbnQgZm9yIHRoZSBrZXkgY29kZXMgYmVpbmcgYWRkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0T25SZXBlYXQ9ZmFsc2VdIC0gQ29udHJvbHMgaWYgdGhlIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgJ2Rvd24nIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksIG9yIGVtaXQgdGhlIGV2ZW50IGp1c3Qgb25jZSAoZmFsc2UsIHRoZSBkZWZhdWx0KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBUaGUgbmV3bHkgY3JlYXRlZCBLZXkgb2JqZWN0LCBvciBhIHJlZmVyZW5jZSB0byBpdCBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIGtleXMgYXJyYXkuXHJcbiAgICAgKi9cclxuICAgIGFkZEtleTogZnVuY3Rpb24gKGtleSwgZW5hYmxlQ2FwdHVyZSwgZW1pdE9uUmVwZWF0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChlbmFibGVDYXB0dXJlID09PSB1bmRlZmluZWQpIHsgZW5hYmxlQ2FwdHVyZSA9IHRydWU7IH1cclxuICAgICAgICBpZiAoZW1pdE9uUmVwZWF0ID09PSB1bmRlZmluZWQpIHsgZW1pdE9uUmVwZWF0ID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcblxyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBLZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0ga2V5cy5pbmRleE9mKGtleSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaWR4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNbaWR4XSA9IGtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNba2V5LmtleUNvZGVdID0ga2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5hYmxlQ2FwdHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDYXB0dXJlKGtleS5rZXlDb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAga2V5LnNldEVtaXRPblJlcGVhdChlbWl0T25SZXBlYXQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IEtleUNvZGVzW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgha2V5c1trZXldKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5c1trZXldID0gbmV3IEtleSh0aGlzLCBrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVuYWJsZUNhcHR1cmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2FwdHVyZShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBrZXlzW2tleV0uc2V0RW1pdE9uUmVwZWF0KGVtaXRPblJlcGVhdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ga2V5c1trZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBLZXkgb2JqZWN0IGZyb20gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGdpdmVuIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYSBLZXkgb2JqZWN0LCBhIHN0cmluZywgc3VjaCBhcyBgQWAgb3IgYFNQQUNFYCwgb3IgYSBrZXkgY29kZSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNyZW1vdmVLZXlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fHN0cmluZ3xpbnRlZ2VyKX0ga2V5IC0gRWl0aGVyIGEgS2V5IG9iamVjdCwgYSBzdHJpbmcsIHN1Y2ggYXMgYEFgIG9yIGBTUEFDRWAsIG9yIGEga2V5IGNvZGUgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZXN0cm95PWZhbHNlXSAtIENhbGwgYEtleS5kZXN0cm95YCBvbiB0aGUgcmVtb3ZlZCBLZXkgb2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUtleTogZnVuY3Rpb24gKGtleSwgZGVzdHJveSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVzdHJveSA9PT0gdW5kZWZpbmVkKSB7IGRlc3Ryb3kgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cztcclxuICAgICAgICB2YXIgcmVmO1xyXG5cclxuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgS2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IGtleXMuaW5kZXhPZihrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkeCA+IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmtleXNbaWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaWR4XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IEtleUNvZGVzW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlzW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZWYgPSBrZXlzW2tleV07XHJcblxyXG4gICAgICAgICAgICBrZXlzW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVmKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVmLnBsdWdpbiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVmLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBLZXlDb21iby5cclxuICAgICAqIFxyXG4gICAgICogQSBLZXlDb21ibyB3aWxsIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBzdHJpbmcgb2Yga2V5cyBmcm9tIHRoZSBLZXlib2FyZCwgYW5kIHdoZW4gaXQgcmVjZWl2ZXMgdGhlbVxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGtleWNvbWJvbWF0Y2hgIGV2ZW50IGZyb20gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGtleXMgdG8gYmUgbGlzdGVuZWQgZm9yIGNhbiBiZSBkZWZpbmVkIGFzOlxyXG4gICAgICpcclxuICAgICAqIEEgc3RyaW5nIChpLmUuICdBVEFSSScpXHJcbiAgICAgKiBBbiBhcnJheSBvZiBlaXRoZXIgaW50ZWdlcnMgKGtleSBjb2Rlcykgb3Igc3RyaW5ncywgb3IgYSBtaXh0dXJlIG9mIGJvdGhcclxuICAgICAqIEFuIGFycmF5IG9mIG9iamVjdHMgKHN1Y2ggYXMgS2V5IG9iamVjdHMpIHdpdGggYSBwdWJsaWMgJ2tleUNvZGUnIHByb3BlcnR5XHJcbiAgICAgKlxyXG4gICAgICogRm9yIGV4YW1wbGUsIHRvIGxpc3RlbiBmb3IgdGhlIEtvbmFtaSBjb2RlICh1cCwgdXAsIGRvd24sIGRvd24sIGxlZnQsIHJpZ2h0LCBsZWZ0LCByaWdodCwgYiwgYSwgZW50ZXIpXHJcbiAgICAgKiB5b3UgY291bGQgcGFzcyB0aGUgZm9sbG93aW5nIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmNyZWF0ZUNvbWJvKFsgMzgsIDM4LCA0MCwgNDAsIDM3LCAzOSwgMzcsIDM5LCA2NiwgNjUsIDEzIF0sIHsgcmVzZXRPbk1hdGNoOiB0cnVlIH0pO1xyXG4gICAgICpcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleWNvbWJvbWF0Y2gnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAqICAgICBjb25zb2xlLmxvZygnS29uYW1pIENvZGUgZW50ZXJlZCEnKTtcclxuICAgICAqIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT3IsIHRvIGxpc3RlbiBmb3IgdGhlIHVzZXIgZW50ZXJpbmcgdGhlIHdvcmQgUEhBU0VSOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuY3JlYXRlQ29tYm8oJ1BIQVNFUicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY3JlYXRlQ29tYm9cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcltdfG9iamVjdFtdKX0ga2V5cyAtIFRoZSBrZXlzIHRoYXQgY29tcHJpc2UgdGhpcyBjb21iby5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LktleWJvYXJkLktleUNvbWJvQ29uZmlnfSBbY29uZmlnXSAtIEEgS2V5IENvbWJvIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gVGhlIG5ldyBLZXlDb21ibyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNvbWJvOiBmdW5jdGlvbiAoa2V5cywgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBuZXcgS2V5Q29tYm8odGhpcywga2V5cywgY29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIEtleSBvYmplY3QgaXMgY3VycmVudGx5IGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIG1ldGhvZCBhbmQgY2hlY2tpbmcgdGhlIGBLZXkuaXNEb3duYCBwcm9wZXJ0eSBkaXJlY3RseSBpcyB0aGF0IHlvdSBjYW4gcHJvdmlkZVxyXG4gICAgICogYSBkdXJhdGlvbiB0byB0aGlzIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgYSBrZXkgcHJlc3MgdG8gZmlyZSBhIGJ1bGxldCwgYnV0IHlvdSBvbmx5IHdhbnRlZFxyXG4gICAgICogaXQgdG8gYmUgYWJsZSB0byBmaXJlIGV2ZXJ5IDEwMG1zLCB0aGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgYGR1cmF0aW9uYCBvZiAxMDAgYW5kIGl0XHJcbiAgICAgKiB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBldmVyeSAxMDBtcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIEtleWJvYXJkIFBsdWdpbiBoYXMgYmVlbiBkaXNhYmxlZCwgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY2hlY2tEb3duXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBBIEtleSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2R1cmF0aW9uPTBdIC0gVGhlIGR1cmF0aW9uIHdoaWNoIG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB0aGlzIEtleSBpcyBjb25zaWRlcmVkIGFzIGJlaW5nIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IGlzIGRvd24gd2l0aGluIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjaGVja0Rvd246IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYga2V5LmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gU25hcEZsb29yKHRoaXMudGltZSAtIGtleS50aW1lRG93biwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPiBrZXkuX3RpY2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleS5fdGljayA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUgaGFuZGxlciBjYWxsZWQgYnkgdGhlIElucHV0IFBsdWdpbiwgd2hpY2ggaXMgaW4gdHVybiBpbnZva2VkIGJ5IHRoZSBHYW1lIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5tYW5hZ2VyLnF1ZXVlO1xyXG4gICAgICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpIHx8IGxlbiA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgZXZlbnQgcXVldWUsIGRpc3BhdGNoaW5nIGFsbCBvZiB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBzdG9yZWQgdXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGV2ZW50ID0gcXVldWVbaV07XHJcbiAgICAgICAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbY29kZV07XHJcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBPdmVycmlkZSB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgKGl0J3MgdG9vIGxhdGUgZm9yIHRoZSBicm93c2VyIHRvIHVzZSB0aGVtIGFueXdheSwgc28gd2UgbWF5IGFzIHdlbGwpXHJcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxsZWQgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEV2ZW50IGFsbG93ZWQgdG8gZmxvdyBhY3Jvc3MgYWxsIGhhbmRsZXJzIGluIHRoaXMgU2NlbmUsIGFuZCBhbnkgb3RoZXIgU2NlbmUgaW4gdGhlIFNjZW5lIGxpc3RcclxuICAgICAgICAgICAgICAgIGV2ZW50LmNhbmNlbGxlZCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFdvbid0IHJlYWNoIGFueSBtb3JlIGxvY2FsIChTY2VuZSBsZXZlbCkgaGFuZGxlcnNcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2FuY2VsbGVkID0gMTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8vICBXb24ndCByZWFjaCBhbnkgbW9yZSBoYW5kbGVycyBpbiBhbnkgU2NlbmUgZnVydGhlciBkb3duIHRoZSBTY2VuZSBsaXN0XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmNhbmNlbGxlZCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGxlZCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGlzIGV2ZW50IGhhcyBiZWVuIHN0b3BwZWQgZnJvbSBicm9hZGNhc3RpbmcgdG8gYW55IG90aGVyIFNjZW5lLCBzbyBhYm9ydC5cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IHNwZWNpZmljIGNhbGxiYWNrIGZpcnN0XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IGtleS5pc0Rvd247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGtleS5vbkRvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkICYmICgha2V5IHx8ICFyZXBlYXQpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChLZXlNYXBbY29kZV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLktFWV9ET1dOICsgS2V5TWFwW2NvZGVdLCBldmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgRGVwcmVjYXRlZCwga2VwdCBpbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDMuMTVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIFRvIGJlIHJlbW92ZWQgYnkgMy4yMC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdrZXlkb3duXycgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BTllfS0VZX0RPV04sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IHNwZWNpZmljIGNhbGxiYWNrIGZpcnN0XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleS5vblVwKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmNhbmNlbGxlZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoS2V5TWFwW2NvZGVdKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5LRVlfVVAgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBEZXByZWNhdGVkLCBrZXB0IGluIGZvciBjb21wYXRpYmlsaXR5IHdpdGggMy4xNVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgVG8gYmUgcmVtb3ZlZCBieSAzLjIwLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2tleXVwXycgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BTllfS0VZX1VQLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgUmVzZXQgdGhlIGNhbmNlbCBzdGF0ZSBmb3Igb3RoZXIgU2NlbmVzIHRvIHVzZVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsbGVkID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5jYW5jZWxsZWQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBhbGwgS2V5IG9iamVjdHMgY3JlYXRlZCBieSBfdGhpc18gS2V5Ym9hcmQgUGx1Z2luIGJhY2sgdG8gdGhlaXIgZGVmYXVsdCB1bi1wcmVzc2VkIHN0YXRlcy5cclxuICAgICAqIFRoaXMgY2FuIG9ubHkgcmVzZXQga2V5cyBjcmVhdGVkIHZpYSB0aGUgYGFkZEtleWAsIGBhZGRLZXlzYCBvciBgY3JlYXRlQ3Vyc29yS2V5c2AgbWV0aG9kcy5cclxuICAgICAqIElmIHlvdSBoYXZlIGNyZWF0ZWQgYSBLZXkgb2JqZWN0IGRpcmVjdGx5IHlvdSdsbCBuZWVkIHRvIHJlc2V0IGl0IHlvdXJzZWxmLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBLZXlib2FyZCBQbHVnaW4gc2h1dHMgZG93biwgYnV0IGNhbiBiZVxyXG4gICAgICogaW52b2tlZCBkaXJlY3RseSBhdCBhbnkgdGltZSB5b3UgcmVxdWlyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNyZXNldEtleXNcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldEtleXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBCZWNhdXNlIGl0J3MgYSBzcGFyc2VseSBwb3B1bGF0ZWQgYXJyYXlcclxuICAgICAgICAgICAgaWYgKGtleXNbaV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNbaV0ucmVzZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1dHMgdGhpcyBLZXlib2FyZCBQbHVnaW4gZG93bi4gVGhpcyBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRhc2tzOlxyXG4gICAgICogXHJcbiAgICAgKiAxIC0gUmVzZXRzIGFsbCBrZXlzIGNyZWF0ZWQgYnkgdGhpcyBLZXlib2FyZCBwbHVnaW4uXHJcbiAgICAgKiAyIC0gU3RvcHMgYW5kIHJlbW92ZXMgdGhlIGtleWJvYXJkIGV2ZW50IGxpc3RlbmVycy5cclxuICAgICAqIDMgLSBDbGVhcnMgb3V0IGFueSBwZW5kaW5nIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSwgd2l0aG91dCBwcm9jZXNzaW5nIHRoZW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRLZXlzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub2ZmKElucHV0RXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci5ldmVudHMub2ZmKElucHV0RXZlbnRzLk1BTkFHRVJfUFJPQ0VTUywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lLmV2ZW50cy5vZmYoR2FtZUV2ZW50cy5CTFVSLCB0aGlzLnJlc2V0S2V5cyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleWJvYXJkIFBsdWdpbiBpbnN0YW5jZSBhbmQgYWxsIHJlZmVyZW5jZXMgaXQgaG9sZHMsIHBsdXMgY2xlYXJzIG91dCBsb2NhbCBhcnJheXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSBpdCdzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIGFycmF5XHJcbiAgICAgICAgICAgIGlmIChrZXlzW2ldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXlzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5rZXlzID0gW107XHJcbiAgICAgICAgdGhpcy5jb21ib3MgPSBbXTtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB0aW1lIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiN0aW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGltZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2VuZUlucHV0UGx1Z2luLm1hbmFnZXIudGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIEtleWJvYXJkIFBsdWdpbiBjbGFzcywgaWYgZW5hYmxlZCB2aWEgdGhlIGBpbnB1dC5rZXlib2FyZGAgU2NlbmUgb3IgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBLZXkgb2JqZWN0cyBhbmQgbGlzdGVuIGZvciBrZXlib2FyZCBzcGVjaWZpYyBldmVudHMuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNrZXlib2FyZFxyXG4gKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn1cclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKi9cclxuSW5wdXRQbHVnaW5DYWNoZS5yZWdpc3RlcignS2V5Ym9hcmRQbHVnaW4nLCBLZXlib2FyZFBsdWdpbiwgJ2tleWJvYXJkJywgJ2tleWJvYXJkJywgJ2lucHV0S2V5Ym9hcmQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gS2V5Ym9hcmRQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n * Return `true` if it reached the end of the combo, `false` if not.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.AdvanceKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {KeyboardEvent} event - The native Keyboard Event.\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo object to advance.\r\n *\r\n * @return {boolean} `true` if it reached the end of the combo, `false` if not.\r\n */\r\nvar AdvanceKeyCombo = function (event, combo)\r\n{\r\n    combo.timeLastMatched = event.timeStamp;\r\n    combo.index++;\r\n\r\n    if (combo.index === combo.size)\r\n    {\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        combo.current = combo.keyCodes[combo.index];\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = AdvanceKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9BZHZhbmNlS2V5Q29tYm8uanM/ZjZkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvY29tYm8vQWR2YW5jZUtleUNvbWJvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXlDb21ibyBjbGFzcy5cclxuICogUmV0dXJuIGB0cnVlYCBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvbWJvLCBgZmFsc2VgIGlmIG5vdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21iby5BZHZhbmNlS2V5Q29tYm9cclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIEtleWJvYXJkIEV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gY29tYm8gLSBUaGUgS2V5Q29tYm8gb2JqZWN0IHRvIGFkdmFuY2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvbWJvLCBgZmFsc2VgIGlmIG5vdC5cclxuICovXHJcbnZhciBBZHZhbmNlS2V5Q29tYm8gPSBmdW5jdGlvbiAoZXZlbnQsIGNvbWJvKVxyXG57XHJcbiAgICBjb21iby50aW1lTGFzdE1hdGNoZWQgPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICBjb21iby5pbmRleCsrO1xyXG5cclxuICAgIGlmIChjb21iby5pbmRleCA9PT0gY29tYm8uc2l6ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBjb21iby5jdXJyZW50ID0gY29tYm8ua2V5Q29kZXNbY29tYm8uaW5kZXhdO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWR2YW5jZUtleUNvbWJvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ProcessKeyCombo = __webpack_require__(/*! ./ProcessKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js\");\r\nvar ResetKeyCombo = __webpack_require__(/*! ./ResetKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A KeyCombo will listen for a specific string of keys from the Keyboard, and when it receives them\r\n * it will emit a `keycombomatch` event from the Keyboard Manager.\r\n *\r\n * The keys to be listened for can be defined as:\r\n *\r\n * A string (i.e. 'ATARI')\r\n * An array of either integers (key codes) or strings, or a mixture of both\r\n * An array of objects (such as Key objects) with a public 'keyCode' property\r\n *\r\n * For example, to listen for the Konami code (up, up, down, down, left, right, left, right, b, a, enter)\r\n * you could pass the following array of key codes:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n *\r\n * this.input.keyboard.on('keycombomatch', function (event) {\r\n *     console.log('Konami Code entered!');\r\n * });\r\n * ```\r\n *\r\n * Or, to listen for the user entering the word PHASER:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo('PHASER');\r\n * ```\r\n *\r\n * @class KeyCombo\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @listens Phaser.Input.Keyboard.Events#ANY_KEY_DOWN\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyboardPlugin} keyboardPlugin - A reference to the Keyboard Plugin.\r\n * @param {(string|integer[]|object[])} keys - The keys that comprise this combo.\r\n * @param {Phaser.Types.Input.Keyboard.KeyComboConfig} [config] - A Key Combo configuration object.\r\n */\r\nvar KeyCombo = new Class({\r\n\r\n    initialize:\r\n\r\n    function KeyCombo (keyboardPlugin, keys, config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        //  Can't have a zero or single length combo (string or array based)\r\n        if (keys.length < 2)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        /**\r\n         * A reference to the Keyboard Manager\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#manager\r\n         * @type {Phaser.Input.Keyboard.KeyboardPlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = keyboardPlugin;\r\n\r\n        /**\r\n         * A flag that controls if this Key Combo is actively processing keys or not.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * An array of the keycodes that comprise this combo.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#keyCodes\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.keyCodes = [];\r\n\r\n        //  if 'keys' is a string we need to get the keycode of each character in it\r\n\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            var char = keys[i];\r\n\r\n            if (typeof char === 'string')\r\n            {\r\n                this.keyCodes.push(char.toUpperCase().charCodeAt(0));\r\n            }\r\n            else if (typeof char === 'number')\r\n            {\r\n                this.keyCodes.push(char);\r\n            }\r\n            else if (char.hasOwnProperty('keyCode'))\r\n            {\r\n                this.keyCodes.push(char.keyCode);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * The current keyCode the combo is waiting for.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#current\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.current = this.keyCodes[0];\r\n\r\n        /**\r\n         * The current index of the key being waited for in the 'keys' string.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#index\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.index = 0;\r\n\r\n        /**\r\n         * The length of this combo (in keycodes)\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#size\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = this.keyCodes.length;\r\n\r\n        /**\r\n         * The time the previous key in the combo was matched.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#timeLastMatched\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.timeLastMatched = 0;\r\n\r\n        /**\r\n         * Has this Key Combo been matched yet?\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#matched\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.matched = false;\r\n\r\n        /**\r\n         * The time the entire combo was matched.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#timeMatched\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.timeMatched = 0;\r\n\r\n        /**\r\n         * If they press the wrong key do we reset the combo?\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#resetOnWrongKey\r\n         * @type {boolean}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.resetOnWrongKey = GetFastValue(config, 'resetOnWrongKey', true);\r\n\r\n        /**\r\n         * The max delay in ms between each key press. Above this the combo is reset. 0 means disabled.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#maxKeyDelay\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.maxKeyDelay = GetFastValue(config, 'maxKeyDelay', 0);\r\n\r\n        /**\r\n         * If previously matched and they press the first key of the combo again, will it reset?\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#resetOnMatch\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.resetOnMatch = GetFastValue(config, 'resetOnMatch', false);\r\n\r\n        /**\r\n         * If the combo matches, will it delete itself?\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#deleteOnMatch\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.deleteOnMatch = GetFastValue(config, 'deleteOnMatch', false);\r\n\r\n        var _this = this;\r\n\r\n        var onKeyDownHandler = function (event)\r\n        {\r\n            if (_this.matched || !_this.enabled)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var matched = ProcessKeyCombo(event, _this);\r\n\r\n            if (matched)\r\n            {\r\n                _this.manager.emit(Events.COMBO_MATCH, _this, event);\r\n\r\n                if (_this.resetOnMatch)\r\n                {\r\n                    ResetKeyCombo(_this);\r\n                }\r\n                else if (_this.deleteOnMatch)\r\n                {\r\n                    _this.destroy();\r\n                }\r\n            }\r\n        };\r\n\r\n        /**\r\n         * The internal Key Down handler.\r\n         *\r\n         * @name Phaser.Input.Keyboard.KeyCombo#onKeyDown\r\n         * @private\r\n         * @type {KeyboardKeydownCallback}\r\n         * @fires Phaser.Input.Keyboard.Events#COMBO_MATCH\r\n         * @since 3.0.0\r\n         */\r\n        this.onKeyDown = onKeyDownHandler;\r\n\r\n        this.manager.on(Events.ANY_KEY_DOWN, this.onKeyDown);\r\n    },\r\n\r\n    /**\r\n     * How far complete is this combo? A value between 0 and 1.\r\n     *\r\n     * @name Phaser.Input.Keyboard.KeyCombo#progress\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    progress: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.index / this.size;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Destroys this Key Combo and all of its references.\r\n     *\r\n     * @method Phaser.Input.Keyboard.KeyCombo#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.enabled = false;\r\n        this.keyCodes = [];\r\n\r\n        this.manager.off(Events.ANY_KEY_DOWN, this.onKeyDown);\r\n\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = KeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9LZXlDb21iby5qcz8zZmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywyRUFBVztBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBb0M7QUFDL0Qsc0JBQXNCLG1CQUFPLENBQUMsNEZBQW1CO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLHdGQUFpQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLHFCQUFxQjtBQUN6RztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsMkNBQTJDO0FBQ3REO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxhQUFhOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvY29tYm8vS2V5Q29tYm8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFByb2Nlc3NLZXlDb21ibyA9IHJlcXVpcmUoJy4vUHJvY2Vzc0tleUNvbWJvJyk7XHJcbnZhciBSZXNldEtleUNvbWJvID0gcmVxdWlyZSgnLi9SZXNldEtleUNvbWJvJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEtleUNvbWJvIHdpbGwgbGlzdGVuIGZvciBhIHNwZWNpZmljIHN0cmluZyBvZiBrZXlzIGZyb20gdGhlIEtleWJvYXJkLCBhbmQgd2hlbiBpdCByZWNlaXZlcyB0aGVtXHJcbiAqIGl0IHdpbGwgZW1pdCBhIGBrZXljb21ib21hdGNoYCBldmVudCBmcm9tIHRoZSBLZXlib2FyZCBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUga2V5cyB0byBiZSBsaXN0ZW5lZCBmb3IgY2FuIGJlIGRlZmluZWQgYXM6XHJcbiAqXHJcbiAqIEEgc3RyaW5nIChpLmUuICdBVEFSSScpXHJcbiAqIEFuIGFycmF5IG9mIGVpdGhlciBpbnRlZ2VycyAoa2V5IGNvZGVzKSBvciBzdHJpbmdzLCBvciBhIG1peHR1cmUgb2YgYm90aFxyXG4gKiBBbiBhcnJheSBvZiBvYmplY3RzIChzdWNoIGFzIEtleSBvYmplY3RzKSB3aXRoIGEgcHVibGljICdrZXlDb2RlJyBwcm9wZXJ0eVxyXG4gKlxyXG4gKiBGb3IgZXhhbXBsZSwgdG8gbGlzdGVuIGZvciB0aGUgS29uYW1pIGNvZGUgKHVwLCB1cCwgZG93biwgZG93biwgbGVmdCwgcmlnaHQsIGxlZnQsIHJpZ2h0LCBiLCBhLCBlbnRlcilcclxuICogeW91IGNvdWxkIHBhc3MgdGhlIGZvbGxvd2luZyBhcnJheSBvZiBrZXkgY29kZXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5jcmVhdGVDb21ibyhbIDM4LCAzOCwgNDAsIDQwLCAzNywgMzksIDM3LCAzOSwgNjYsIDY1LCAxMyBdLCB7IHJlc2V0T25NYXRjaDogdHJ1ZSB9KTtcclxuICpcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5vbigna2V5Y29tYm9tYXRjaCcsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gKiAgICAgY29uc29sZS5sb2coJ0tvbmFtaSBDb2RlIGVudGVyZWQhJyk7XHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogT3IsIHRvIGxpc3RlbiBmb3IgdGhlIHVzZXIgZW50ZXJpbmcgdGhlIHdvcmQgUEhBU0VSOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuY3JlYXRlQ29tYm8oJ1BIQVNFUicpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGNsYXNzIEtleUNvbWJvXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBsaXN0ZW5zIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjQU5ZX0tFWV9ET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0ga2V5Ym9hcmRQbHVnaW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcltdfG9iamVjdFtdKX0ga2V5cyAtIFRoZSBrZXlzIHRoYXQgY29tcHJpc2UgdGhpcyBjb21iby5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm9Db25maWd9IFtjb25maWddIC0gQSBLZXkgQ29tYm8gY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgS2V5Q29tYm8gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gS2V5Q29tYm8gKGtleWJvYXJkUGx1Z2luLCBrZXlzLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgICAgIC8vICBDYW4ndCBoYXZlIGEgemVybyBvciBzaW5nbGUgbGVuZ3RoIGNvbWJvIChzdHJpbmcgb3IgYXJyYXkgYmFzZWQpXHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDwgMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBLZXlib2FyZCBNYW5hZ2VyXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0ga2V5Ym9hcmRQbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyB0aGF0IGNvbnRyb2xzIGlmIHRoaXMgS2V5IENvbWJvIGlzIGFjdGl2ZWx5IHByb2Nlc3Npbmcga2V5cyBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiB0aGUga2V5Y29kZXMgdGhhdCBjb21wcmlzZSB0aGlzIGNvbWJvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvI2tleUNvZGVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXlDb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAgaWYgJ2tleXMnIGlzIGEgc3RyaW5nIHdlIG5lZWQgdG8gZ2V0IHRoZSBrZXljb2RlIG9mIGVhY2ggY2hhcmFjdGVyIGluIGl0XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFyID0ga2V5c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hhciA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5Q29kZXMucHVzaChjaGFyLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNoYXIgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleUNvZGVzLnB1c2goY2hhcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhci5oYXNPd25Qcm9wZXJ0eSgna2V5Q29kZScpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleUNvZGVzLnB1c2goY2hhci5rZXlDb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQga2V5Q29kZSB0aGUgY29tYm8gaXMgd2FpdGluZyBmb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jY3VycmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMua2V5Q29kZXNbMF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBrZXkgYmVpbmcgd2FpdGVkIGZvciBpbiB0aGUgJ2tleXMnIHN0cmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNpbmRleFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGxlbmd0aCBvZiB0aGlzIGNvbWJvIChpbiBrZXljb2RlcylcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpemUgPSB0aGlzLmtleUNvZGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgdGhlIHByZXZpb3VzIGtleSBpbiB0aGUgY29tYm8gd2FzIG1hdGNoZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jdGltZUxhc3RNYXRjaGVkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lTGFzdE1hdGNoZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYXMgdGhpcyBLZXkgQ29tYm8gYmVlbiBtYXRjaGVkIHlldD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNtYXRjaGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hdGNoZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgdGhlIGVudGlyZSBjb21ibyB3YXMgbWF0Y2hlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyN0aW1lTWF0Y2hlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZU1hdGNoZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGV5IHByZXNzIHRoZSB3cm9uZyBrZXkgZG8gd2UgcmVzZXQgdGhlIGNvbWJvP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvI3Jlc2V0T25Xcm9uZ0tleVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc2V0T25Xcm9uZ0tleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdyZXNldE9uV3JvbmdLZXknLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heCBkZWxheSBpbiBtcyBiZXR3ZWVuIGVhY2gga2V5IHByZXNzLiBBYm92ZSB0aGlzIHRoZSBjb21ibyBpcyByZXNldC4gMCBtZWFucyBkaXNhYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNtYXhLZXlEZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heEtleURlbGF5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ21heEtleURlbGF5JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXZpb3VzbHkgbWF0Y2hlZCBhbmQgdGhleSBwcmVzcyB0aGUgZmlyc3Qga2V5IG9mIHRoZSBjb21ibyBhZ2Fpbiwgd2lsbCBpdCByZXNldD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNyZXNldE9uTWF0Y2hcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVzZXRPbk1hdGNoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Jlc2V0T25NYXRjaCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIGNvbWJvIG1hdGNoZXMsIHdpbGwgaXQgZGVsZXRlIGl0c2VsZj9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNkZWxldGVPbk1hdGNoXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGV0ZU9uTWF0Y2ggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVsZXRlT25NYXRjaCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9uS2V5RG93bkhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubWF0Y2hlZCB8fCAhX3RoaXMuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IFByb2Nlc3NLZXlDb21ibyhldmVudCwgX3RoaXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuZW1pdChFdmVudHMuQ09NQk9fTUFUQ0gsIF90aGlzLCBldmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnJlc2V0T25NYXRjaClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBSZXNldEtleUNvbWJvKF90aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmRlbGV0ZU9uTWF0Y2gpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIEtleSBEb3duIGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jb25LZXlEb3duXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7S2V5Ym9hcmRLZXlkb3duQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjQ09NQk9fTUFUQ0hcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IG9uS2V5RG93bkhhbmRsZXI7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5vbihFdmVudHMuQU5ZX0tFWV9ET1dOLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG93IGZhciBjb21wbGV0ZSBpcyB0aGlzIGNvbWJvPyBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jcHJvZ3Jlc3NcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwcm9ncmVzczoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleCAvIHRoaXMuc2l6ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgS2V5IENvbWJvIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rZXlDb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIub2ZmKEV2ZW50cy5BTllfS0VZX0RPV04sIHRoaXMub25LZXlEb3duKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlDb21ibztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AdvanceKeyCombo = __webpack_require__(/*! ./AdvanceKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js\");\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.ProcessKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {KeyboardEvent} event - The native Keyboard Event.\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo object to be processed.\r\n *\r\n * @return {boolean} `true` if the combo was matched, otherwise `false`.\r\n */\r\nvar ProcessKeyCombo = function (event, combo)\r\n{\r\n    if (combo.matched)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    var comboMatched = false;\r\n    var keyMatched = false;\r\n\r\n    if (event.keyCode === combo.current)\r\n    {\r\n        //  Key was correct\r\n\r\n        if (combo.index > 0 && combo.maxKeyDelay > 0)\r\n        {\r\n            //  We have to check to see if the delay between\r\n            //  the new key and the old one was too long (if enabled)\r\n\r\n            var timeLimit = combo.timeLastMatched + combo.maxKeyDelay;\r\n\r\n            //  Check if they pressed it in time or not\r\n            if (event.timeStamp <= timeLimit)\r\n            {\r\n                keyMatched = true;\r\n                comboMatched = AdvanceKeyCombo(event, combo);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            keyMatched = true;\r\n\r\n            //  We don't check the time for the first key pressed, so just advance it\r\n            comboMatched = AdvanceKeyCombo(event, combo);\r\n        }\r\n    }\r\n\r\n    if (!keyMatched && combo.resetOnWrongKey)\r\n    {\r\n        //  Wrong key was pressed\r\n        combo.index = 0;\r\n        combo.current = combo.keyCodes[0];\r\n    }\r\n\r\n    if (comboMatched)\r\n    {\r\n        combo.timeLastMatched = event.timeStamp;\r\n        combo.matched = true;\r\n        combo.timeMatched = event.timeStamp;\r\n    }\r\n\r\n    return comboMatched;\r\n};\r\n\r\nmodule.exports = ProcessKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9Qcm9jZXNzS2V5Q29tYm8uanM/NDE0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsNEZBQW1COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9Qcm9jZXNzS2V5Q29tYm8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBZHZhbmNlS2V5Q29tYm8gPSByZXF1aXJlKCcuL0FkdmFuY2VLZXlDb21ibycpO1xyXG5cclxuLyoqXHJcbiAqIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgS2V5Q29tYm8gY2xhc3MuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8uUHJvY2Vzc0tleUNvbWJvXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBLZXlib2FyZCBFdmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm99IGNvbWJvIC0gVGhlIEtleUNvbWJvIG9iamVjdCB0byBiZSBwcm9jZXNzZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29tYm8gd2FzIG1hdGNoZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFByb2Nlc3NLZXlDb21ibyA9IGZ1bmN0aW9uIChldmVudCwgY29tYm8pXHJcbntcclxuICAgIGlmIChjb21iby5tYXRjaGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb21ib01hdGNoZWQgPSBmYWxzZTtcclxuICAgIHZhciBrZXlNYXRjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGNvbWJvLmN1cnJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEtleSB3YXMgY29ycmVjdFxyXG5cclxuICAgICAgICBpZiAoY29tYm8uaW5kZXggPiAwICYmIGNvbWJvLm1heEtleURlbGF5ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVsYXkgYmV0d2VlblxyXG4gICAgICAgICAgICAvLyAgdGhlIG5ldyBrZXkgYW5kIHRoZSBvbGQgb25lIHdhcyB0b28gbG9uZyAoaWYgZW5hYmxlZClcclxuXHJcbiAgICAgICAgICAgIHZhciB0aW1lTGltaXQgPSBjb21iby50aW1lTGFzdE1hdGNoZWQgKyBjb21iby5tYXhLZXlEZWxheTtcclxuXHJcbiAgICAgICAgICAgIC8vICBDaGVjayBpZiB0aGV5IHByZXNzZWQgaXQgaW4gdGltZSBvciBub3RcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWVTdGFtcCA8PSB0aW1lTGltaXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleU1hdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29tYm9NYXRjaGVkID0gQWR2YW5jZUtleUNvbWJvKGV2ZW50LCBjb21ibyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5TWF0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyAgV2UgZG9uJ3QgY2hlY2sgdGhlIHRpbWUgZm9yIHRoZSBmaXJzdCBrZXkgcHJlc3NlZCwgc28ganVzdCBhZHZhbmNlIGl0XHJcbiAgICAgICAgICAgIGNvbWJvTWF0Y2hlZCA9IEFkdmFuY2VLZXlDb21ibyhldmVudCwgY29tYm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWtleU1hdGNoZWQgJiYgY29tYm8ucmVzZXRPbldyb25nS2V5KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXcm9uZyBrZXkgd2FzIHByZXNzZWRcclxuICAgICAgICBjb21iby5pbmRleCA9IDA7XHJcbiAgICAgICAgY29tYm8uY3VycmVudCA9IGNvbWJvLmtleUNvZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21ib01hdGNoZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29tYm8udGltZUxhc3RNYXRjaGVkID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIGNvbWJvLm1hdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbWJvLnRpbWVNYXRjaGVkID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb21ib01hdGNoZWQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2Nlc3NLZXlDb21ibztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.ResetKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo to reset.\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyCombo} The KeyCombo.\r\n */\r\nvar ResetKeyCombo = function (combo)\r\n{\r\n    combo.current = combo.keyCodes[0];\r\n    combo.index = 0;\r\n    combo.timeLastMatched = 0;\r\n    combo.matched = false;\r\n    combo.timeMatched = 0;\r\n\r\n    return combo;\r\n};\r\n\r\nmodule.exports = ResetKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9SZXNldEtleUNvbWJvLmpzPzI2ZjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9SZXNldEtleUNvbWJvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXlDb21ibyBjbGFzcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21iby5SZXNldEtleUNvbWJvXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gY29tYm8gLSBUaGUgS2V5Q29tYm8gdG8gcmVzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gVGhlIEtleUNvbWJvLlxyXG4gKi9cclxudmFyIFJlc2V0S2V5Q29tYm8gPSBmdW5jdGlvbiAoY29tYm8pXHJcbntcclxuICAgIGNvbWJvLmN1cnJlbnQgPSBjb21iby5rZXlDb2Rlc1swXTtcclxuICAgIGNvbWJvLmluZGV4ID0gMDtcclxuICAgIGNvbWJvLnRpbWVMYXN0TWF0Y2hlZCA9IDA7XHJcbiAgICBjb21iby5tYXRjaGVkID0gZmFsc2U7XHJcbiAgICBjb21iby50aW1lTWF0Y2hlZCA9IDA7XHJcblxyXG4gICAgcmV0dXJuIGNvbWJvO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZXNldEtleUNvbWJvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Global Key Down Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is pressed down.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.keyboard.on('keydown', listener)`.\r\n * \r\n * You can also listen for a specific key being pressed. See [Keyboard.Events.KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:KEY_DOWN} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:DOWN} for details.\r\n * \r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * Read [this article on ghosting]{@link http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/} for details.\r\n *\r\n * Also, please be aware that some browser extensions can disable or override Phaser keyboard handling.\r\n * For example, the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * There are others. So, please check your extensions if you find you have specific keys that don't work.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#ANY_KEY_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was pressed, any modifiers, etc.\r\n */\r\nmodule.exports = 'keydown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9ET1dOX0VWRU5ULmpzPzNiZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLHNEQUFzRDtBQUM5STtBQUNBLDhHQUE4RyxrREFBa0Q7QUFDaEs7QUFDQTtBQUNBLG1DQUFtQyxxSEFBcUg7QUFDeEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvZXZlbnRzL0FOWV9LRVlfRE9XTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHbG9iYWwgS2V5IERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGFueSBrZXkgb24gdGhlIGtleWJvYXJkIGlzIHByZXNzZWQgZG93bi5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMga2V5IGJlaW5nIHByZXNzZWQuIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLktFWV9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpLRVlfRE9XTn0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLkRPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkRPV059IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFJlYWQgW3RoaXMgYXJ0aWNsZSBvbiBnaG9zdGluZ117QGxpbmsgaHR0cDovL3d3dy5odG1sNWdhbWVkZXZzLmNvbS90b3BpYy80ODc2LWltcG9zc2libGUtdG8tdXNlLW1vcmUtdGhhbi0yLWtleWJvYXJkLWlucHV0LWJ1dHRvbnMtYXQtdGhlLXNhbWUtdGltZS99IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCBzb21lIGJyb3dzZXIgZXh0ZW5zaW9ucyBjYW4gZGlzYWJsZSBvciBvdmVycmlkZSBQaGFzZXIga2V5Ym9hcmQgaGFuZGxpbmcuXHJcbiAqIEZvciBleGFtcGxlLCB0aGUgQ2hyb21lIGV4dGVuc2lvbiB2aW1pdW0gaXMga25vd24gdG8gZGlzYWJsZSBQaGFzZXIgZnJvbSB1c2luZyB0aGUgRCBrZXksIHdoaWxlIEV2ZXJOb3RlIGRpc2FibGVzIHRoZSBiYWNrdGljayBrZXkuXHJcbiAqIFRoZXJlIGFyZSBvdGhlcnMuIFNvLCBwbGVhc2UgY2hlY2sgeW91ciBleHRlbnNpb25zIGlmIHlvdSBmaW5kIHlvdSBoYXZlIHNwZWNpZmljIGtleXMgdGhhdCBkb24ndCB3b3JrLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNBTllfS0VZX0RPV05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGtleSB0aGF0IHdhcyBwcmVzc2VkLCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXlkb3duJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Global Key Up Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is released.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.keyboard.on('keyup', listener)`.\r\n * \r\n * You can also listen for a specific key being released. See [Keyboard.Events.KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:KEY_UP} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.UP]{@linkcode Phaser.Input.Keyboard.Events#event:UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#ANY_KEY_UP\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was released, any modifiers, etc.\r\n */\r\nmodule.exports = 'keyup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9VUF9FVkVOVC5qcz8xN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RixvREFBb0Q7QUFDM0k7QUFDQSw0R0FBNEcsZ0RBQWdEO0FBQzVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHbG9iYWwgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBLZXlib2FyZCBQbHVnaW4gd2hlbiBhbnkga2V5IG9uIHRoZSBrZXlib2FyZCBpcyByZWxlYXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXl1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gbGlzdGVuIGZvciBhIHNwZWNpZmljIGtleSBiZWluZyByZWxlYXNlZC4gU2VlIFtLZXlib2FyZC5FdmVudHMuS0VZX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpLRVlfVVB9IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogRmluYWxseSwgeW91IGNhbiBjcmVhdGUgS2V5IG9iamVjdHMsIHdoaWNoIHlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGV2ZW50cyBmcm9tLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjZXZlbnQ6VVB9IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNBTllfS0VZX1VQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIEtleWJvYXJkIEV2ZW50LiBZb3UgY2FuIGluc3BlY3QgdGhpcyB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBrZXkgdGhhdCB3YXMgcmVsZWFzZWQsIGFueSBtb2RpZmllcnMsIGV0Yy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2tleXVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Combo Match Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when a [Key Combo]{@link Phaser.Input.Keyboard.KeyCombo} is matched.\r\n * \r\n * Listen for this event from the Key Plugin after a combo has been created:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n *\r\n * this.input.keyboard.on('keycombomatch', function (event) {\r\n *     console.log('Konami Code entered!');\r\n * });\r\n * ```\r\n *\r\n * @event Phaser.Input.Keyboard.Events#COMBO_MATCH\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.KeyCombo} keycombo - The Key Combo object that was matched.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event of the final key in the combo. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'keycombomatch';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQ09NQk9fTUFUQ0hfRVZFTlQuanM/NTc2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLHFDQUFxQztBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixxQkFBcUI7QUFDekc7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9DT01CT19NQVRDSF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBLZXkgQ29tYm8gTWF0Y2ggRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGEgW0tleSBDb21ib117QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvfSBpcyBtYXRjaGVkLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gdGhlIEtleSBQbHVnaW4gYWZ0ZXIgYSBjb21ibyBoYXMgYmVlbiBjcmVhdGVkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmlucHV0LmtleWJvYXJkLmNyZWF0ZUNvbWJvKFsgMzgsIDM4LCA0MCwgNDAsIDM3LCAzOSwgMzcsIDM5LCA2NiwgNjUsIDEzIF0sIHsgcmVzZXRPbk1hdGNoOiB0cnVlIH0pO1xyXG4gKlxyXG4gKiB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXljb21ib21hdGNoJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAqICAgICBjb25zb2xlLmxvZygnS29uYW1pIENvZGUgZW50ZXJlZCEnKTtcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNDT01CT19NQVRDSFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvfSBrZXljb21ibyAtIFRoZSBLZXkgQ29tYm8gb2JqZWN0IHRoYXQgd2FzIG1hdGNoZWQuXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudCBvZiB0aGUgZmluYWwga2V5IGluIHRoZSBjb21iby4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXljb21ib21hdGNoJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Down Event.\r\n * \r\n * This event is dispatched by a [Key]{@link Phaser.Input.Keyboard.Key} object when it is pressed.\r\n * \r\n * Listen for this event from the Key object instance directly:\r\n * \r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * \r\n * spaceBar.on('down', listener)\r\n * ```\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_DOWN} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object that was pressed.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvRE9XTl9FVkVOVC5qcz9jMmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0NBQWdDO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RiwwREFBMEQ7QUFDako7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEtleSBEb3duIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgW0tleV17QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleX0gb2JqZWN0IHdoZW4gaXQgaXMgcHJlc3NlZC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIHRoZSBLZXkgb2JqZWN0IGluc3RhbmNlIGRpcmVjdGx5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgc3BhY2VCYXIgPSB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU1BBQ0UpO1xyXG4gKiBcclxuICogc3BhY2VCYXIub24oJ2Rvd24nLCBsaXN0ZW5lcilcclxuICogYGBgXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgZ2VuZXJpYyAnZ2xvYmFsJyBsaXN0ZW5lci4gU2VlIFtLZXlib2FyZC5FdmVudHMuQU5ZX0tFWV9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpBTllfS0VZX0RPV059IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IG9iamVjdCB0aGF0IHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgYW55IG1vZGlmaWVycywgZXRjLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Down Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is pressed down.\r\n * \r\n * Unlike the `ANY_KEY_DOWN` event, this one has a special dynamic event name. For example, to listen for the `A` key being pressed\r\n * use the following from within a Scene: `this.input.keyboard.on('keydown-A', listener)`. You can replace the `-A` part of the event\r\n * name with any valid [Key Code string]{@link Phaser.Input.Keyboard.KeyCodes}. For example, this will listen for the space bar: \r\n * `this.input.keyboard.on('keydown-SPACE', listener)`.\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_DOWN} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:DOWN} for details.\r\n * \r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * Read [this article on ghosting]{@link http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/} for details.\r\n *\r\n * Also, please be aware that some browser extensions can disable or override Phaser keyboard handling.\r\n * For example, the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * There are others. So, please check your extensions if you find you have specific keys that don't work.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#KEY_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was pressed, any modifiers, etc.\r\n */\r\nmodule.exports = 'keydown-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX0RPV05fRVZFTlQuanM/MTA2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMscUNBQXFDO0FBQzlFO0FBQ0E7QUFDQSx1RkFBdUYsMERBQTBEO0FBQ2pKO0FBQ0EsOEdBQThHLGtEQUFrRDtBQUNoSztBQUNBO0FBQ0EsbUNBQW1DLHFIQUFxSDtBQUN4SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGFueSBrZXkgb24gdGhlIGtleWJvYXJkIGlzIHByZXNzZWQgZG93bi5cclxuICogXHJcbiAqIFVubGlrZSB0aGUgYEFOWV9LRVlfRE9XTmAgZXZlbnQsIHRoaXMgb25lIGhhcyBhIHNwZWNpYWwgZHluYW1pYyBldmVudCBuYW1lLiBGb3IgZXhhbXBsZSwgdG8gbGlzdGVuIGZvciB0aGUgYEFgIGtleSBiZWluZyBwcmVzc2VkXHJcbiAqIHVzZSB0aGUgZm9sbG93aW5nIGZyb20gd2l0aGluIGEgU2NlbmU6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duLUEnLCBsaXN0ZW5lcilgLiBZb3UgY2FuIHJlcGxhY2UgdGhlIGAtQWAgcGFydCBvZiB0aGUgZXZlbnRcclxuICogbmFtZSB3aXRoIGFueSB2YWxpZCBbS2V5IENvZGUgc3RyaW5nXXtAbGluayBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXN9LiBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIGxpc3RlbiBmb3IgdGhlIHNwYWNlIGJhcjogXHJcbiAqIGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duLVNQQUNFJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBnZW5lcmljICdnbG9iYWwnIGxpc3RlbmVyLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5BTllfS0VZX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkFOWV9LRVlfRE9XTn0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLkRPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkRPV059IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFJlYWQgW3RoaXMgYXJ0aWNsZSBvbiBnaG9zdGluZ117QGxpbmsgaHR0cDovL3d3dy5odG1sNWdhbWVkZXZzLmNvbS90b3BpYy80ODc2LWltcG9zc2libGUtdG8tdXNlLW1vcmUtdGhhbi0yLWtleWJvYXJkLWlucHV0LWJ1dHRvbnMtYXQtdGhlLXNhbWUtdGltZS99IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCBzb21lIGJyb3dzZXIgZXh0ZW5zaW9ucyBjYW4gZGlzYWJsZSBvciBvdmVycmlkZSBQaGFzZXIga2V5Ym9hcmQgaGFuZGxpbmcuXHJcbiAqIEZvciBleGFtcGxlLCB0aGUgQ2hyb21lIGV4dGVuc2lvbiB2aW1pdW0gaXMga25vd24gdG8gZGlzYWJsZSBQaGFzZXIgZnJvbSB1c2luZyB0aGUgRCBrZXksIHdoaWxlIEV2ZXJOb3RlIGRpc2FibGVzIHRoZSBiYWNrdGljayBrZXkuXHJcbiAqIFRoZXJlIGFyZSBvdGhlcnMuIFNvLCBwbGVhc2UgY2hlY2sgeW91ciBleHRlbnNpb25zIGlmIHlvdSBmaW5kIHlvdSBoYXZlIHNwZWNpZmljIGtleXMgdGhhdCBkb24ndCB3b3JrLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNLRVlfRE9XTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudC4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUga2V5IHRoYXQgd2FzIHByZXNzZWQsIGFueSBtb2RpZmllcnMsIGV0Yy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2tleWRvd24tJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Up Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is released.\r\n * \r\n * Unlike the `ANY_KEY_UP` event, this one has a special dynamic event name. For example, to listen for the `A` key being released\r\n * use the following from within a Scene: `this.input.keyboard.on('keyup-A', listener)`. You can replace the `-A` part of the event\r\n * name with any valid [Key Code string]{@link Phaser.Input.Keyboard.KeyCodes}. For example, this will listen for the space bar: \r\n * `this.input.keyboard.on('keyup-SPACE', listener)`.\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_UP} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.UP]{@linkcode Phaser.Input.Keyboard.Events#event:UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#KEY_UP\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was released, any modifiers, etc.\r\n */\r\nmodule.exports = 'keyup-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX1VQX0VWRU5ULmpzPzBmMmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHFDQUFxQztBQUM5RTtBQUNBO0FBQ0EscUZBQXFGLHdEQUF3RDtBQUM3STtBQUNBLDRHQUE0RyxnREFBZ0Q7QUFDNUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9LRVlfVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBLZXlib2FyZCBQbHVnaW4gd2hlbiBhbnkga2V5IG9uIHRoZSBrZXlib2FyZCBpcyByZWxlYXNlZC5cclxuICogXHJcbiAqIFVubGlrZSB0aGUgYEFOWV9LRVlfVVBgIGV2ZW50LCB0aGlzIG9uZSBoYXMgYSBzcGVjaWFsIGR5bmFtaWMgZXZlbnQgbmFtZS4gRm9yIGV4YW1wbGUsIHRvIGxpc3RlbiBmb3IgdGhlIGBBYCBrZXkgYmVpbmcgcmVsZWFzZWRcclxuICogdXNlIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gYSBTY2VuZTogYHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleXVwLUEnLCBsaXN0ZW5lcilgLiBZb3UgY2FuIHJlcGxhY2UgdGhlIGAtQWAgcGFydCBvZiB0aGUgZXZlbnRcclxuICogbmFtZSB3aXRoIGFueSB2YWxpZCBbS2V5IENvZGUgc3RyaW5nXXtAbGluayBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXN9LiBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIGxpc3RlbiBmb3IgdGhlIHNwYWNlIGJhcjogXHJcbiAqIGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXl1cC1TUEFDRScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgZ2VuZXJpYyAnZ2xvYmFsJyBsaXN0ZW5lci4gU2VlIFtLZXlib2FyZC5FdmVudHMuQU5ZX0tFWV9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjZXZlbnQ6QU5ZX0tFWV9VUH0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLlVQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpVUH0gZm9yIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI0tFWV9VUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudC4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUga2V5IHRoYXQgd2FzIHJlbGVhc2VkLCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXl1cC0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Up Event.\r\n * \r\n * This event is dispatched by a [Key]{@link Phaser.Input.Keyboard.Key} object when it is released.\r\n * \r\n * Listen for this event from the Key object instance directly:\r\n * \r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * \r\n * spaceBar.on('up', listener)\r\n * ```\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object that was released.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvVVBfRVZFTlQuanM/ZWY2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGdDQUFnQztBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsd0RBQXdEO0FBQzdJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgW0tleV17QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleX0gb2JqZWN0IHdoZW4gaXQgaXMgcmVsZWFzZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSB0aGUgS2V5IG9iamVjdCBpbnN0YW5jZSBkaXJlY3RseTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHNwYWNlQmFyID0gdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRLZXkoUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFKTtcclxuICogXHJcbiAqIHNwYWNlQmFyLm9uKCd1cCcsIGxpc3RlbmVyKVxyXG4gKiBgYGBcclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBnZW5lcmljICdnbG9iYWwnIGxpc3RlbmVyLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5BTllfS0VZX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpBTllfS0VZX1VQfSBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgb2JqZWN0IHRoYXQgd2FzIHJlbGVhc2VkLlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgYW55IG1vZGlmaWVycywgZXRjLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/events/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/events/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Keyboard.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ANY_KEY_DOWN: __webpack_require__(/*! ./ANY_KEY_DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js\"),\r\n    ANY_KEY_UP: __webpack_require__(/*! ./ANY_KEY_UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js\"),\r\n    COMBO_MATCH: __webpack_require__(/*! ./COMBO_MATCH_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js\"),\r\n    DOWN: __webpack_require__(/*! ./DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js\"),\r\n    KEY_DOWN: __webpack_require__(/*! ./KEY_DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js\"),\r\n    KEY_UP: __webpack_require__(/*! ./KEY_UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js\"),\r\n    UP: __webpack_require__(/*! ./UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvaW5kZXguanM/M2MyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG1HQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRkFBb0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsaUdBQXFCO0FBQzlDLFVBQVUsbUJBQU8sQ0FBQyxtRkFBYztBQUNoQyxjQUFjLG1CQUFPLENBQUMsMkZBQWtCO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyx1RkFBZ0I7QUFDcEMsUUFBUSxtQkFBTyxDQUFDLCtFQUFZOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFOWV9LRVlfRE9XTjogcmVxdWlyZSgnLi9BTllfS0VZX0RPV05fRVZFTlQnKSxcclxuICAgIEFOWV9LRVlfVVA6IHJlcXVpcmUoJy4vQU5ZX0tFWV9VUF9FVkVOVCcpLFxyXG4gICAgQ09NQk9fTUFUQ0g6IHJlcXVpcmUoJy4vQ09NQk9fTUFUQ0hfRVZFTlQnKSxcclxuICAgIERPV046IHJlcXVpcmUoJy4vRE9XTl9FVkVOVCcpLFxyXG4gICAgS0VZX0RPV046IHJlcXVpcmUoJy4vS0VZX0RPV05fRVZFTlQnKSxcclxuICAgIEtFWV9VUDogcmVxdWlyZSgnLi9LRVlfVVBfRVZFTlQnKSxcclxuICAgIFVQOiByZXF1aXJlKCcuL1VQX0VWRU5UJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Keyboard\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\"),\r\n\r\n    KeyboardManager: __webpack_require__(/*! ./KeyboardManager */ \"./node_modules/phaser/src/input/keyboard/KeyboardManager.js\"),\r\n    KeyboardPlugin: __webpack_require__(/*! ./KeyboardPlugin */ \"./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js\"),\r\n\r\n    Key: __webpack_require__(/*! ./keys/Key */ \"./node_modules/phaser/src/input/keyboard/keys/Key.js\"),\r\n    KeyCodes: __webpack_require__(/*! ./keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\"),\r\n\r\n    KeyCombo: __webpack_require__(/*! ./combo/KeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\"),\r\n\r\n    JustDown: __webpack_require__(/*! ./keys/JustDown */ \"./node_modules/phaser/src/input/keyboard/keys/JustDown.js\"),\r\n    JustUp: __webpack_require__(/*! ./keys/JustUp */ \"./node_modules/phaser/src/input/keyboard/keys/JustUp.js\"),\r\n    DownDuration: __webpack_require__(/*! ./keys/DownDuration */ \"./node_modules/phaser/src/input/keyboard/keys/DownDuration.js\"),\r\n    UpDuration: __webpack_require__(/*! ./keys/UpDuration */ \"./node_modules/phaser/src/input/keyboard/keys/UpDuration.js\")\r\n    \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9pbmRleC5qcz9lMGQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDBFQUFVOztBQUU5QixxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBbUI7QUFDaEQsb0JBQW9CLG1CQUFPLENBQUMsb0ZBQWtCOztBQUU5QyxTQUFTLG1CQUFPLENBQUMsd0VBQVk7QUFDN0IsY0FBYyxtQkFBTyxDQUFDLGtGQUFpQjs7QUFFdkMsY0FBYyxtQkFBTyxDQUFDLG9GQUFrQjs7QUFFeEMsY0FBYyxtQkFBTyxDQUFDLGtGQUFpQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsOEVBQWU7QUFDbkMsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXFCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLHNGQUFtQjs7QUFFM0MiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LktleWJvYXJkXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG5cclxuICAgIEtleWJvYXJkTWFuYWdlcjogcmVxdWlyZSgnLi9LZXlib2FyZE1hbmFnZXInKSxcclxuICAgIEtleWJvYXJkUGx1Z2luOiByZXF1aXJlKCcuL0tleWJvYXJkUGx1Z2luJyksXHJcblxyXG4gICAgS2V5OiByZXF1aXJlKCcuL2tleXMvS2V5JyksXHJcbiAgICBLZXlDb2RlczogcmVxdWlyZSgnLi9rZXlzL0tleUNvZGVzJyksXHJcblxyXG4gICAgS2V5Q29tYm86IHJlcXVpcmUoJy4vY29tYm8vS2V5Q29tYm8nKSxcclxuXHJcbiAgICBKdXN0RG93bjogcmVxdWlyZSgnLi9rZXlzL0p1c3REb3duJyksXHJcbiAgICBKdXN0VXA6IHJlcXVpcmUoJy4va2V5cy9KdXN0VXAnKSxcclxuICAgIERvd25EdXJhdGlvbjogcmVxdWlyZSgnLi9rZXlzL0Rvd25EdXJhdGlvbicpLFxyXG4gICAgVXBEdXJhdGlvbjogcmVxdWlyZSgnLi9rZXlzL1VwRHVyYXRpb24nKVxyXG4gICAgXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/DownDuration.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/DownDuration.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns `true` if the Key was pressed down within the `duration` value given, based on the current\r\n * game clock time. Or `false` if it either isn't down, or was pressed down longer ago than the given duration.\r\n *\r\n * @function Phaser.Input.Keyboard.DownDuration\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object to test.\r\n * @param {integer} [duration=50] - The duration, in ms, within which the key must have been pressed down.\r\n *\r\n * @return {boolean} `true` if the Key was pressed down within `duration` ms ago, otherwise `false`.\r\n */\r\nvar DownDuration = function (key, duration)\r\n{\r\n    if (duration === undefined) { duration = 50; }\r\n\r\n    var current = key.plugin.game.loop.time - key.timeDown;\r\n\r\n    return (key.isDown && current < duration);\r\n};\r\n\r\nmodule.exports = DownDuration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0Rvd25EdXJhdGlvbi5qcz81MmZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsZUFBZTs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2tleXMvRG93bkR1cmF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIEtleSB3YXMgcHJlc3NlZCBkb3duIHdpdGhpbiB0aGUgYGR1cmF0aW9uYCB2YWx1ZSBnaXZlbiwgYmFzZWQgb24gdGhlIGN1cnJlbnRcclxuICogZ2FtZSBjbG9jayB0aW1lLiBPciBgZmFsc2VgIGlmIGl0IGVpdGhlciBpc24ndCBkb3duLCBvciB3YXMgcHJlc3NlZCBkb3duIGxvbmdlciBhZ28gdGhhbiB0aGUgZ2l2ZW4gZHVyYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRG93bkR1cmF0aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTUwXSAtIFRoZSBkdXJhdGlvbiwgaW4gbXMsIHdpdGhpbiB3aGljaCB0aGUga2V5IG11c3QgaGF2ZSBiZWVuIHByZXNzZWQgZG93bi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBLZXkgd2FzIHByZXNzZWQgZG93biB3aXRoaW4gYGR1cmF0aW9uYCBtcyBhZ28sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIERvd25EdXJhdGlvbiA9IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG57XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDUwOyB9XHJcblxyXG4gICAgdmFyIGN1cnJlbnQgPSBrZXkucGx1Z2luLmdhbWUubG9vcC50aW1lIC0ga2V5LnRpbWVEb3duO1xyXG5cclxuICAgIHJldHVybiAoa2V5LmlzRG93biAmJiBjdXJyZW50IDwgZHVyYXRpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEb3duRHVyYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/DownDuration.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/JustDown.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/JustDown.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The justDown value allows you to test if this Key has just been pressed down or not.\r\n * \r\n * When you check this value it will return `true` if the Key is down, otherwise `false`.\r\n * \r\n * You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.\r\n * This allows you to use it in situations where you want to check if this key is down without using an event, such as in a core game loop.\r\n *\r\n * @function Phaser.Input.Keyboard.JustDown\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key to check to see if it's just down or not.\r\n *\r\n * @return {boolean} `true` if the Key was just pressed, otherwise `false`.\r\n */\r\nvar JustDown = function (key)\r\n{\r\n    if (key._justDown)\r\n    {\r\n        key._justDown = false;\r\n\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = JustDown;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3REb3duLmpzPzc4YzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3REb3duLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIGp1c3REb3duIHZhbHVlIGFsbG93cyB5b3UgdG8gdGVzdCBpZiB0aGlzIEtleSBoYXMganVzdCBiZWVuIHByZXNzZWQgZG93biBvciBub3QuXHJcbiAqIFxyXG4gKiBXaGVuIHlvdSBjaGVjayB0aGlzIHZhbHVlIGl0IHdpbGwgcmV0dXJuIGB0cnVlYCBpZiB0aGUgS2V5IGlzIGRvd24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBcclxuICogWW91IGNhbiBvbmx5IGNhbGwganVzdERvd24gb25jZSBwZXIga2V5IHByZXNzLiBJdCB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBvbmNlLCB1bnRpbCB0aGUgS2V5IGlzIHJlbGVhc2VkIGFuZCBwcmVzc2VkIGRvd24gYWdhaW4uXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaXQgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGlzIGtleSBpcyBkb3duIHdpdGhvdXQgdXNpbmcgYW4gZXZlbnQsIHN1Y2ggYXMgaW4gYSBjb3JlIGdhbWUgbG9vcC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5KdXN0RG93blxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IHRvIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGp1c3QgZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IHdhcyBqdXN0IHByZXNzZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIEp1c3REb3duID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgaWYgKGtleS5fanVzdERvd24pXHJcbiAgICB7XHJcbiAgICAgICAga2V5Ll9qdXN0RG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEp1c3REb3duO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/JustDown.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/JustUp.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/JustUp.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The justUp value allows you to test if this Key has just been released or not.\r\n * \r\n * When you check this value it will return `true` if the Key is up, otherwise `false`.\r\n * \r\n * You can only call JustUp once per key release. It will only return `true` once, until the Key is pressed down and released again.\r\n * This allows you to use it in situations where you want to check if this key is up without using an event, such as in a core game loop.\r\n *\r\n * @function Phaser.Input.Keyboard.JustUp\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key to check to see if it's just up or not.\r\n *\r\n * @return {boolean} `true` if the Key was just released, otherwise `false`.\r\n */\r\nvar JustUp = function (key)\r\n{\r\n    if (key._justUp)\r\n    {\r\n        key._justUp = false;\r\n\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = JustUp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3RVcC5qcz9lNDE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQva2V5cy9KdXN0VXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUganVzdFVwIHZhbHVlIGFsbG93cyB5b3UgdG8gdGVzdCBpZiB0aGlzIEtleSBoYXMganVzdCBiZWVuIHJlbGVhc2VkIG9yIG5vdC5cclxuICogXHJcbiAqIFdoZW4geW91IGNoZWNrIHRoaXMgdmFsdWUgaXQgd2lsbCByZXR1cm4gYHRydWVgIGlmIHRoZSBLZXkgaXMgdXAsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBcclxuICogWW91IGNhbiBvbmx5IGNhbGwgSnVzdFVwIG9uY2UgcGVyIGtleSByZWxlYXNlLiBJdCB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBvbmNlLCB1bnRpbCB0aGUgS2V5IGlzIHByZXNzZWQgZG93biBhbmQgcmVsZWFzZWQgYWdhaW4uXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaXQgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGlzIGtleSBpcyB1cCB3aXRob3V0IHVzaW5nIGFuIGV2ZW50LCBzdWNoIGFzIGluIGEgY29yZSBnYW1lIGxvb3AuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuSnVzdFVwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgdG8gY2hlY2sgdG8gc2VlIGlmIGl0J3MganVzdCB1cCBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IHdhcyBqdXN0IHJlbGVhc2VkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBKdXN0VXAgPSBmdW5jdGlvbiAoa2V5KVxyXG57XHJcbiAgICBpZiAoa2V5Ll9qdXN0VXApXHJcbiAgICB7XHJcbiAgICAgICAga2V5Ll9qdXN0VXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBKdXN0VXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/JustUp.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/Key.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/Key.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A generic Key object which can be passed to the Process functions (and so on)\r\n * keycode must be an integer\r\n *\r\n * @class Key\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyboardPlugin} plugin - The Keyboard Plugin instance that owns this Key object.\r\n * @param {integer} keyCode - The keycode of this key.\r\n */\r\nvar Key = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Key (plugin, keyCode)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Keyboard Plugin instance that owns this Key object.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#plugin\r\n         * @type {Phaser.Input.Keyboard.KeyboardPlugin}\r\n         * @since 3.17.0\r\n         */\r\n        this.plugin = plugin;\r\n\r\n        /**\r\n         * The keycode of this key.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#keyCode\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.keyCode = keyCode;\r\n\r\n        /**\r\n         * The original DOM event.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#originalEvent\r\n         * @type {KeyboardEvent}\r\n         * @since 3.0.0\r\n         */\r\n        this.originalEvent = undefined;\r\n\r\n        /**\r\n         * Can this Key be processed?\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * The \"down\" state of the key. This will remain `true` for as long as the keyboard thinks this key is held down.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#isDown\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isDown = false;\r\n\r\n        /**\r\n         * The \"up\" state of the key. This will remain `true` for as long as the keyboard thinks this key is up.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#isUp\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.isUp = true;\r\n\r\n        /**\r\n         * The down state of the ALT key, if pressed at the same time as this key.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#altKey\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.altKey = false;\r\n\r\n        /**\r\n         * The down state of the CTRL key, if pressed at the same time as this key.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#ctrlKey\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.ctrlKey = false;\r\n\r\n        /**\r\n         * The down state of the SHIFT key, if pressed at the same time as this key.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#shiftKey\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.shiftKey = false;\r\n\r\n        /**\r\n         * The down state of the Meta key, if pressed at the same time as this key.\r\n         * On a Mac the Meta Key is the Command key. On Windows keyboards, it's the Windows key.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#metaKey\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.16.0\r\n         */\r\n        this.metaKey = false;\r\n\r\n        /**\r\n         * The location of the modifier key. 0 for standard (or unknown), 1 for left, 2 for right, 3 for numpad.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#location\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.location = 0;\r\n\r\n        /**\r\n         * The timestamp when the key was last pressed down.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#timeDown\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.timeDown = 0;\r\n\r\n        /**\r\n         * The number of milliseconds this key was held down for in the previous down - up sequence.\r\n         * This value isn't updated every game step, only when the Key changes state.\r\n         * To get the current duration use the `getDuration` method.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#duration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * The timestamp when the key was last released.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#timeUp\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.timeUp = 0;\r\n\r\n        /**\r\n         * When a key is held down should it continuously fire the `down` event each time it repeats?\r\n         * \r\n         * By default it will emit the `down` event just once, but if you wish to receive the event\r\n         * for each repeat as well, enable this property.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#emitOnRepeat\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.16.0\r\n         */\r\n        this.emitOnRepeat = false;\r\n\r\n        /**\r\n         * If a key is held down this holds down the number of times the key has 'repeated'.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#repeats\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.repeats = 0;\r\n\r\n        /**\r\n         * True if the key has just been pressed (NOTE: requires to be reset, see justDown getter)\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#_justDown\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._justDown = false;\r\n\r\n        /**\r\n         * True if the key has just been pressed (NOTE: requires to be reset, see justDown getter)\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#_justUp\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._justUp = false;\r\n\r\n        /**\r\n         * Internal tick counter.\r\n         *\r\n         * @name Phaser.Input.Keyboard.Key#_tick\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this._tick = -1;\r\n    },\r\n\r\n    /**\r\n     * Controls if this Key will continuously emit a `down` event while being held down (true),\r\n     * or emit the event just once, on first press, and then skip future events (false).\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#setEmitOnRepeat\r\n     * @since 3.16.0\r\n     * \r\n     * @param {boolean} value - Emit `down` events on repeated key down actions, or just once?\r\n     * \r\n     * @return {Phaser.Input.Keyboard.Key} This Key instance.\r\n     */\r\n    setEmitOnRepeat: function (value)\r\n    {\r\n        this.emitOnRepeat = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Processes the Key Down action for this Key.\r\n     * Called automatically by the Keyboard Plugin.\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#onDown\r\n     * @fires Phaser.Input.Keyboard.Events#DOWN\r\n     * @since 3.16.0\r\n     * \r\n     * @param {KeyboardEvent} event - The native DOM Keyboard event.\r\n     */\r\n    onDown: function (event)\r\n    {\r\n        this.originalEvent = event;\r\n\r\n        if (!this.enabled)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.altKey = event.altKey;\r\n        this.ctrlKey = event.ctrlKey;\r\n        this.shiftKey = event.shiftKey;\r\n        this.metaKey = event.metaKey;\r\n        this.location = event.location;\r\n    \r\n        this.repeats++;\r\n\r\n        if (!this.isDown)\r\n        {\r\n            this.isDown = true;\r\n            this.isUp = false;\r\n            this.timeDown = event.timeStamp;\r\n            this.duration = 0;\r\n            this._justDown = true;\r\n            this._justUp = false;\r\n\r\n            this.emit(Events.DOWN, this, event);\r\n        }\r\n        else if (this.emitOnRepeat)\r\n        {\r\n            this.emit(Events.DOWN, this, event);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Processes the Key Up action for this Key.\r\n     * Called automatically by the Keyboard Plugin.\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#onUp\r\n     * @fires Phaser.Input.Keyboard.Events#UP\r\n     * @since 3.16.0\r\n     * \r\n     * @param {KeyboardEvent} event - The native DOM Keyboard event.\r\n     */\r\n    onUp: function (event)\r\n    {\r\n        this.originalEvent = event;\r\n\r\n        if (!this.enabled)\r\n        {\r\n            return;\r\n        }\r\n    \r\n        this.isDown = false;\r\n        this.isUp = true;\r\n        this.timeUp = event.timeStamp;\r\n        this.duration = this.timeUp - this.timeDown;\r\n        this.repeats = 0;\r\n    \r\n        this._justDown = false;\r\n        this._justUp = true;\r\n        this._tick = -1;\r\n        \r\n        this.emit(Events.UP, this, event);\r\n    },\r\n\r\n    /**\r\n     * Resets this Key object back to its default un-pressed state.\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#reset\r\n     * @since 3.6.0\r\n     * \r\n     * @return {Phaser.Input.Keyboard.Key} This Key instance.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.preventDefault = true;\r\n        this.enabled = true;\r\n        this.isDown = false;\r\n        this.isUp = true;\r\n        this.altKey = false;\r\n        this.ctrlKey = false;\r\n        this.shiftKey = false;\r\n        this.metaKey = false;\r\n        this.timeDown = 0;\r\n        this.duration = 0;\r\n        this.timeUp = 0;\r\n        this.repeats = 0;\r\n        this._justDown = false;\r\n        this._justUp = false;\r\n        this._tick = -1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the duration, in ms, that the Key has been held down for.\r\n     * \r\n     * If the key is not currently down it will return zero.\r\n     * \r\n     * The get the duration the Key was held down for in the previous up-down cycle,\r\n     * use the `Key.duration` property value instead.\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#getDuration\r\n     * @since 3.17.0\r\n     * \r\n     * @return {number} The duration, in ms, that the Key has been held down for if currently down.\r\n     */\r\n    getDuration: function ()\r\n    {\r\n        if (this.isDown)\r\n        {\r\n            return (this.plugin.game.loop.time - this.timeDown);\r\n        }\r\n        else\r\n        {\r\n            return 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes any bound event handlers and removes local references.\r\n     *\r\n     * @method Phaser.Input.Keyboard.Key#destroy\r\n     * @since 3.16.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.originalEvent = null;\r\n\r\n        this.plugin = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Key;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleS5qcz83NTcwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywyRUFBVzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBnZW5lcmljIEtleSBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgUHJvY2VzcyBmdW5jdGlvbnMgKGFuZCBzbyBvbilcclxuICoga2V5Y29kZSBtdXN0IGJlIGFuIGludGVnZXJcclxuICpcclxuICogQGNsYXNzIEtleVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0LktleWJvYXJkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IHBsdWdpbiAtIFRoZSBLZXlib2FyZCBQbHVnaW4gaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgS2V5IG9iamVjdC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBrZXlDb2RlIC0gVGhlIGtleWNvZGUgb2YgdGhpcyBrZXkuXHJcbiAqL1xyXG52YXIgS2V5ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBLZXkgKHBsdWdpbiwga2V5Q29kZSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleWJvYXJkIFBsdWdpbiBpbnN0YW5jZSB0aGF0IG93bnMgdGhpcyBLZXkgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNwbHVnaW5cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleWNvZGUgb2YgdGhpcyBrZXkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2tleUNvZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmtleUNvZGUgPSBrZXlDb2RlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgb3JpZ2luYWwgRE9NIGV2ZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNvcmlnaW5hbEV2ZW50XHJcbiAgICAgICAgICogQHR5cGUge0tleWJvYXJkRXZlbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW4gdGhpcyBLZXkgYmUgcHJvY2Vzc2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBcImRvd25cIiBzdGF0ZSBvZiB0aGUga2V5LiBUaGlzIHdpbGwgcmVtYWluIGB0cnVlYCBmb3IgYXMgbG9uZyBhcyB0aGUga2V5Ym9hcmQgdGhpbmtzIHRoaXMga2V5IGlzIGhlbGQgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjaXNEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgXCJ1cFwiIHN0YXRlIG9mIHRoZSBrZXkuIFRoaXMgd2lsbCByZW1haW4gYHRydWVgIGZvciBhcyBsb25nIGFzIHRoZSBrZXlib2FyZCB0aGlua3MgdGhpcyBrZXkgaXMgdXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2lzVXBcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRvd24gc3RhdGUgb2YgdGhlIEFMVCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjYWx0S2V5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEtleSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZG93biBzdGF0ZSBvZiB0aGUgQ1RSTCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjY3RybEtleVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdHJsS2V5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkb3duIHN0YXRlIG9mIHRoZSBTSElGVCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjc2hpZnRLZXlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hpZnRLZXkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRvd24gc3RhdGUgb2YgdGhlIE1ldGEga2V5LCBpZiBwcmVzc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhpcyBrZXkuXHJcbiAgICAgICAgICogT24gYSBNYWMgdGhlIE1ldGEgS2V5IGlzIHRoZSBDb21tYW5kIGtleS4gT24gV2luZG93cyBrZXlib2FyZHMsIGl0J3MgdGhlIFdpbmRvd3Mga2V5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNtZXRhS2V5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tZXRhS2V5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgbW9kaWZpZXIga2V5LiAwIGZvciBzdGFuZGFyZCAob3IgdW5rbm93biksIDEgZm9yIGxlZnQsIDIgZm9yIHJpZ2h0LCAzIGZvciBudW1wYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2xvY2F0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUga2V5IHdhcyBsYXN0IHByZXNzZWQgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjdGltZURvd25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWVEb3duID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhpcyBrZXkgd2FzIGhlbGQgZG93biBmb3IgaW4gdGhlIHByZXZpb3VzIGRvd24gLSB1cCBzZXF1ZW5jZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzbid0IHVwZGF0ZWQgZXZlcnkgZ2FtZSBzdGVwLCBvbmx5IHdoZW4gdGhlIEtleSBjaGFuZ2VzIHN0YXRlLlxyXG4gICAgICAgICAqIFRvIGdldCB0aGUgY3VycmVudCBkdXJhdGlvbiB1c2UgdGhlIGBnZXREdXJhdGlvbmAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGtleSB3YXMgbGFzdCByZWxlYXNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjdGltZVVwXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lVXAgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGVuIGEga2V5IGlzIGhlbGQgZG93biBzaG91bGQgaXQgY29udGludW91c2x5IGZpcmUgdGhlIGBkb3duYCBldmVudCBlYWNoIHRpbWUgaXQgcmVwZWF0cz9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGl0IHdpbGwgZW1pdCB0aGUgYGRvd25gIGV2ZW50IGp1c3Qgb25jZSwgYnV0IGlmIHlvdSB3aXNoIHRvIHJlY2VpdmUgdGhlIGV2ZW50XHJcbiAgICAgICAgICogZm9yIGVhY2ggcmVwZWF0IGFzIHdlbGwsIGVuYWJsZSB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNlbWl0T25SZXBlYXRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtaXRPblJlcGVhdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBhIGtleSBpcyBoZWxkIGRvd24gdGhpcyBob2xkcyBkb3duIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSBoYXMgJ3JlcGVhdGVkJy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjcmVwZWF0c1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0cyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRydWUgaWYgdGhlIGtleSBoYXMganVzdCBiZWVuIHByZXNzZWQgKE5PVEU6IHJlcXVpcmVzIHRvIGJlIHJlc2V0LCBzZWUganVzdERvd24gZ2V0dGVyKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNfanVzdERvd25cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fanVzdERvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVHJ1ZSBpZiB0aGUga2V5IGhhcyBqdXN0IGJlZW4gcHJlc3NlZCAoTk9URTogcmVxdWlyZXMgdG8gYmUgcmVzZXQsIHNlZSBqdXN0RG93biBnZXR0ZXIpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I19qdXN0VXBcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fanVzdFVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpY2sgY291bnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjX3RpY2tcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpY2sgPSAtMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9scyBpZiB0aGlzIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgYGRvd25gIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksXHJcbiAgICAgKiBvciBlbWl0IHRoZSBldmVudCBqdXN0IG9uY2UsIG9uIGZpcnN0IHByZXNzLCBhbmQgdGhlbiBza2lwIGZ1dHVyZSBldmVudHMgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjc2V0RW1pdE9uUmVwZWF0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBFbWl0IGBkb3duYCBldmVudHMgb24gcmVwZWF0ZWQga2V5IGRvd24gYWN0aW9ucywgb3IganVzdCBvbmNlP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBUaGlzIEtleSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RW1pdE9uUmVwZWF0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0T25SZXBlYXQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBLZXkgRG93biBhY3Rpb24gZm9yIHRoaXMgS2V5LlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEtleWJvYXJkIFBsdWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjb25Eb3duXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNET1dOXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Eb3duOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hbHRLZXkgPSBldmVudC5hbHRLZXk7XHJcbiAgICAgICAgdGhpcy5jdHJsS2V5ID0gZXZlbnQuY3RybEtleTtcclxuICAgICAgICB0aGlzLnNoaWZ0S2V5ID0gZXZlbnQuc2hpZnRLZXk7XHJcbiAgICAgICAgdGhpcy5tZXRhS2V5ID0gZXZlbnQubWV0YUtleTtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uID0gZXZlbnQubG9jYXRpb247XHJcbiAgICBcclxuICAgICAgICB0aGlzLnJlcGVhdHMrKztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc1VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGltZURvd24gPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9qdXN0RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2p1c3RVcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ET1dOLCB0aGlzLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZW1pdE9uUmVwZWF0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ET1dOLCB0aGlzLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyB0aGUgS2V5IFVwIGFjdGlvbiBmb3IgdGhpcyBLZXkuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNvblVwXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNVUFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uVXA6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzVXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGltZVVwID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLnRpbWVVcCAtIHRoaXMudGltZURvd247XHJcbiAgICAgICAgdGhpcy5yZXBlYXRzID0gMDtcclxuICAgIFxyXG4gICAgICAgIHRoaXMuX2p1c3REb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fanVzdFVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl90aWNrID0gLTE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5VUCwgdGhpcywgZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIEtleSBvYmplY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bi1wcmVzc2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IFRoaXMgS2V5IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1VwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFsdEtleSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3RybEtleSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hpZnRLZXkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1ldGFLZXkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRpbWVEb3duID0gMDtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVVcCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXBlYXRzID0gMDtcclxuICAgICAgICB0aGlzLl9qdXN0RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2p1c3RVcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RpY2sgPSAtMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZHVyYXRpb24sIGluIG1zLCB0aGF0IHRoZSBLZXkgaGFzIGJlZW4gaGVsZCBkb3duIGZvci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgY3VycmVudGx5IGRvd24gaXQgd2lsbCByZXR1cm4gemVyby5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGdldCB0aGUgZHVyYXRpb24gdGhlIEtleSB3YXMgaGVsZCBkb3duIGZvciBpbiB0aGUgcHJldmlvdXMgdXAtZG93biBjeWNsZSxcclxuICAgICAqIHVzZSB0aGUgYEtleS5kdXJhdGlvbmAgcHJvcGVydHkgdmFsdWUgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZHVyYXRpb24sIGluIG1zLCB0aGF0IHRoZSBLZXkgaGFzIGJlZW4gaGVsZCBkb3duIGZvciBpZiBjdXJyZW50bHkgZG93bi5cclxuICAgICAqL1xyXG4gICAgZ2V0RHVyYXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBsdWdpbi5nYW1lLmxvb3AudGltZSAtIHRoaXMudGltZURvd24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbnkgYm91bmQgZXZlbnQgaGFuZGxlcnMgYW5kIHJlbW92ZXMgbG9jYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2luID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/Key.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Keyboard Codes.\r\n *\r\n * @namespace Phaser.Input.Keyboard.KeyCodes\r\n * @memberof Phaser.Input.Keyboard\r\n * @since 3.0.0\r\n */\r\n\r\nvar KeyCodes = {\r\n\r\n    /**\r\n     * The BACKSPACE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.BACKSPACE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    BACKSPACE: 8,\r\n\r\n    /**\r\n     * The TAB key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.TAB\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    TAB: 9,\r\n\r\n    /**\r\n     * The ENTER key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.ENTER\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ENTER: 13,\r\n\r\n    /**\r\n     * The SHIFT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SHIFT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SHIFT: 16,\r\n\r\n    /**\r\n     * The CTRL key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.CTRL\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CTRL: 17,\r\n\r\n    /**\r\n     * The ALT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.ALT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ALT: 18,\r\n\r\n    /**\r\n     * The PAUSE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PAUSE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PAUSE: 19,\r\n\r\n    /**\r\n     * The CAPS_LOCK key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.CAPS_LOCK\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CAPS_LOCK: 20,\r\n\r\n    /**\r\n     * The ESC key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.ESC\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ESC: 27,\r\n\r\n    /**\r\n     * The SPACE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SPACE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SPACE: 32,\r\n\r\n    /**\r\n     * The PAGE_UP key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PAGE_UP\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PAGE_UP: 33,\r\n\r\n    /**\r\n     * The PAGE_DOWN key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PAGE_DOWN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PAGE_DOWN: 34,\r\n\r\n    /**\r\n     * The END key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.END\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    END: 35,\r\n\r\n    /**\r\n     * The HOME key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.HOME\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    HOME: 36,\r\n\r\n    /**\r\n     * The LEFT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.LEFT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LEFT: 37,\r\n\r\n    /**\r\n     * The UP key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.UP\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    UP: 38,\r\n\r\n    /**\r\n     * The RIGHT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.RIGHT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    RIGHT: 39,\r\n\r\n    /**\r\n     * The DOWN key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.DOWN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    DOWN: 40,\r\n\r\n    /**\r\n     * The PRINT_SCREEN key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PRINT_SCREEN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PRINT_SCREEN: 42,\r\n\r\n    /**\r\n     * The INSERT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.INSERT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    INSERT: 45,\r\n\r\n    /**\r\n     * The DELETE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.DELETE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    DELETE: 46,\r\n\r\n    /**\r\n     * The ZERO key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.ZERO\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ZERO: 48,\r\n\r\n    /**\r\n     * The ONE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.ONE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ONE: 49,\r\n\r\n    /**\r\n     * The TWO key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.TWO\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    TWO: 50,\r\n\r\n    /**\r\n     * The THREE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.THREE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    THREE: 51,\r\n\r\n    /**\r\n     * The FOUR key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.FOUR\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FOUR: 52,\r\n\r\n    /**\r\n     * The FIVE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.FIVE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FIVE: 53,\r\n\r\n    /**\r\n     * The SIX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SIX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SIX: 54,\r\n\r\n    /**\r\n     * The SEVEN key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SEVEN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SEVEN: 55,\r\n\r\n    /**\r\n     * The EIGHT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.EIGHT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    EIGHT: 56,\r\n\r\n    /**\r\n     * The NINE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NINE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NINE: 57,\r\n\r\n    /**\r\n     * The NUMPAD_ZERO key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ZERO\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_ZERO: 96,\r\n\r\n    /**\r\n     * The NUMPAD_ONE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ONE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_ONE: 97,\r\n\r\n    /**\r\n     * The NUMPAD_TWO key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_TWO\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_TWO: 98,\r\n\r\n    /**\r\n     * The NUMPAD_THREE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_THREE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_THREE: 99,\r\n\r\n    /**\r\n     * The NUMPAD_FOUR key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_FOUR\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_FOUR: 100,\r\n\r\n    /**\r\n     * The NUMPAD_FIVE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_FIVE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_FIVE: 101,\r\n\r\n    /**\r\n     * The NUMPAD_SIX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SIX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_SIX: 102,\r\n\r\n    /**\r\n     * The NUMPAD_SEVEN key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SEVEN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_SEVEN: 103,\r\n\r\n    /**\r\n     * The NUMPAD_EIGHT key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_EIGHT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_EIGHT: 104,\r\n\r\n    /**\r\n     * The NUMPAD_NINE key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_NINE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    NUMPAD_NINE: 105,\r\n\r\n    /**\r\n     * The Numpad Addition (+) key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ADD\r\n     * @type {integer}\r\n     * @since 3.21.0\r\n     */\r\n    NUMPAD_ADD: 107,\r\n\r\n    /**\r\n     * The Numpad Subtraction (-) key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SUBTRACT\r\n     * @type {integer}\r\n     * @since 3.21.0\r\n     */\r\n    NUMPAD_SUBTRACT: 109,\r\n\r\n    /**\r\n     * The A key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.A\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    A: 65,\r\n\r\n    /**\r\n     * The B key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.B\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    B: 66,\r\n\r\n    /**\r\n     * The C key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.C\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    C: 67,\r\n\r\n    /**\r\n     * The D key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.D\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    D: 68,\r\n\r\n    /**\r\n     * The E key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.E\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    E: 69,\r\n\r\n    /**\r\n     * The F key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F: 70,\r\n\r\n    /**\r\n     * The G key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.G\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    G: 71,\r\n\r\n    /**\r\n     * The H key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.H\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    H: 72,\r\n\r\n    /**\r\n     * The I key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.I\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    I: 73,\r\n\r\n    /**\r\n     * The J key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.J\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    J: 74,\r\n\r\n    /**\r\n     * The K key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.K\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    K: 75,\r\n\r\n    /**\r\n     * The L key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.L\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    L: 76,\r\n\r\n    /**\r\n     * The M key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.M\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    M: 77,\r\n\r\n    /**\r\n     * The N key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.N\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    N: 78,\r\n\r\n    /**\r\n     * The O key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.O\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    O: 79,\r\n\r\n    /**\r\n     * The P key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.P\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    P: 80,\r\n\r\n    /**\r\n     * The Q key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.Q\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    Q: 81,\r\n\r\n    /**\r\n     * The R key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.R\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    R: 82,\r\n\r\n    /**\r\n     * The S key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.S\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    S: 83,\r\n\r\n    /**\r\n     * The T key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.T\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    T: 84,\r\n\r\n    /**\r\n     * The U key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.U\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    U: 85,\r\n\r\n    /**\r\n     * The V key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.V\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    V: 86,\r\n\r\n    /**\r\n     * The W key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.W\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    W: 87,\r\n\r\n    /**\r\n     * The X key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.X\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    X: 88,\r\n\r\n    /**\r\n     * The Y key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.Y\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    Y: 89,\r\n\r\n    /**\r\n     * The Z key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.Z\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    Z: 90,\r\n\r\n    /**\r\n     * The F1 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F1\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F1: 112,\r\n\r\n    /**\r\n     * The F2 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F2\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F2: 113,\r\n\r\n    /**\r\n     * The F3 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F3\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F3: 114,\r\n\r\n    /**\r\n     * The F4 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F4\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F4: 115,\r\n\r\n    /**\r\n     * The F5 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F5\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F5: 116,\r\n\r\n    /**\r\n     * The F6 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F6\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F6: 117,\r\n\r\n    /**\r\n     * The F7 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F7\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F7: 118,\r\n\r\n    /**\r\n     * The F8 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F8\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F8: 119,\r\n\r\n    /**\r\n     * The F9 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F9\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F9: 120,\r\n\r\n    /**\r\n     * The F10 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F10\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F10: 121,\r\n\r\n    /**\r\n     * The F11 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F11\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F11: 122,\r\n\r\n    /**\r\n     * The F12 key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.F12\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    F12: 123,\r\n\r\n    /**\r\n     * The SEMICOLON key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SEMICOLON\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SEMICOLON: 186,\r\n\r\n    /**\r\n     * The PLUS key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PLUS\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PLUS: 187,\r\n\r\n    /**\r\n     * The COMMA key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.COMMA\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COMMA: 188,\r\n\r\n    /**\r\n     * The MINUS key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.MINUS\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    MINUS: 189,\r\n\r\n    /**\r\n     * The PERIOD key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.PERIOD\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PERIOD: 190,\r\n\r\n    /**\r\n     * The FORWARD_SLASH key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.FORWARD_SLASH\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FORWARD_SLASH: 191,\r\n\r\n    /**\r\n     * The BACK_SLASH key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.BACK_SLASH\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    BACK_SLASH: 220,\r\n\r\n    /**\r\n     * The QUOTES key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.QUOTES\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    QUOTES: 222,\r\n\r\n    /**\r\n     * The BACKTICK key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.BACKTICK\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    BACKTICK: 192,\r\n\r\n    /**\r\n     * The OPEN_BRACKET key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.OPEN_BRACKET\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    OPEN_BRACKET: 219,\r\n\r\n    /**\r\n     * The CLOSED_BRACKET key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.CLOSED_BRACKET\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CLOSED_BRACKET: 221,\r\n\r\n    /**\r\n     * The SEMICOLON_FIREFOX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.SEMICOLON_FIREFOX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SEMICOLON_FIREFOX: 59,\r\n\r\n    /**\r\n     * The COLON key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.COLON\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COLON: 58,\r\n\r\n    /**\r\n     * The COMMA_FIREFOX_WINDOWS key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.COMMA_FIREFOX_WINDOWS\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COMMA_FIREFOX_WINDOWS: 60,\r\n\r\n    /**\r\n     * The COMMA_FIREFOX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.COMMA_FIREFOX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COMMA_FIREFOX: 62,\r\n\r\n    /**\r\n     * The BRACKET_RIGHT_FIREFOX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.BRACKET_RIGHT_FIREFOX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    BRACKET_RIGHT_FIREFOX: 174,\r\n\r\n    /**\r\n     * The BRACKET_LEFT_FIREFOX key.\r\n     * \r\n     * @name Phaser.Input.Keyboard.KeyCodes.BRACKET_LEFT_FIREFOX\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    BRACKET_LEFT_FIREFOX: 175\r\n};\r\n\r\nmodule.exports = KeyCodes;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleUNvZGVzLmpzPzhlYzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2tleXMvS2V5Q29kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBLZXlib2FyZCBDb2Rlcy5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXNcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5LZXlib2FyZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgS2V5Q29kZXMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS1NQQUNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkJBQ0tTUEFDRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQkFDS1NQQUNFOiA4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRBQiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5UQUJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFRBQjogOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFTlRFUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FTlRFUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRU5URVI6IDEzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNISUZUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNISUZUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTSElGVDogMTYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ1RSTCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DVFJMXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDVFJMOiAxNyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBTFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQUxUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBBTFQ6IDE4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFBBVVNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBBVVNFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQVVTRTogMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ0FQU19MT0NLIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkNBUFNfTE9DS1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ0FQU19MT0NLOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFU0Mga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRVNDXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBFU0M6IDI3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNQQUNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTUEFDRTogMzIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUEFHRV9VUCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QQUdFX1VQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQUdFX1VQOiAzMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQQUdFX0RPV04ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUEFHRV9ET1dOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQUdFX0RPV046IDM0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEVORCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FTkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEVORDogMzUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSE9NRSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5IT01FXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBIT01FOiAzNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMRUZUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkxFRlRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExFRlQ6IDM3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFVQIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlVQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBVUDogMzgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUklHSFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUklHSFRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFJJR0hUOiAzOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBET1dOIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkRPV05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERPV046IDQwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFBSSU5UX1NDUkVFTiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QUklOVF9TQ1JFRU5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFBSSU5UX1NDUkVFTjogNDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSU5TRVJUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLklOU0VSVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSU5TRVJUOiA0NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBERUxFVEUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuREVMRVRFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBERUxFVEU6IDQ2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFpFUk8ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuWkVST1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgWkVSTzogNDgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgT05FIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk9ORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgT05FOiA0OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUV08ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVFdPXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBUV086IDUwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRIUkVFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlRIUkVFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBUSFJFRTogNTEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRk9VUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GT1VSXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGT1VSOiA1MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBGSVZFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkZJVkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJVkU6IDUzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNJWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5TSVhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNJWDogNTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VWRU4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU0VWRU5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNFVkVOOiA1NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFSUdIVCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FSUdIVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRUlHSFQ6IDU2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE5JTkUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTklORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTklORTogNTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTlVNUEFEX1pFUk8ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1pFUk9cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9aRVJPOiA5NixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfT05FIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9PTkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9PTkU6IDk3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE5VTVBBRF9UV08ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1RXT1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX1RXTzogOTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTlVNUEFEX1RIUkVFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9USFJFRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX1RIUkVFOiA5OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRk9VUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfRk9VUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX0ZPVVI6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRklWRSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfRklWRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX0ZJVkU6IDEwMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfU0lYIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9TSVhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9TSVg6IDEwMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfU0VWRU4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1NFVkVOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfU0VWRU46IDEwMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRUlHSFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX0VJR0hUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfRUlHSFQ6IDEwNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfTklORSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfTklORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX05JTkU6IDEwNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOdW1wYWQgQWRkaXRpb24gKCspIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9BRERcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfQUREOiAxMDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTnVtcGFkIFN1YnRyYWN0aW9uICgtKSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfU1VCVFJBQ1RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfU1VCVFJBQ1Q6IDEwOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEE6IDY1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEIga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQjogNjYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDOiA2NyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBEIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEQ6IDY4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRTogNjksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGOiA3MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBHIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEc6IDcxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEgga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuSFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSDogNzIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5JXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBJOiA3MyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBKIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkpcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEo6IDc0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEsga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuS1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSzogNzUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5MXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBMOiA3NixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBNIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk1cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE06IDc3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTjogNzgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5PXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBPOiA3OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFA6IDgwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUTogODEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5SXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBSOiA4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFM6IDgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVDogODQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5VXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBVOiA4NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBWIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlZcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFY6IDg2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFcga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuV1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVzogODcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBYOiA4OCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBZIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLllcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFk6IDg5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFoga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuWlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgWjogOTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYxOiAxMTIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjIga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYyOiAxMTMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjMga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYzOiAxMTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY0OiAxMTUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY1OiAxMTYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjYga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjZcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY2OiAxMTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjcga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY3OiAxMTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjgga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY4OiAxMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjkga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY5OiAxMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEwIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjEwOiAxMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjExIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjExOiAxMjIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEyIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjEyOiAxMjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VNSUNPTE9OIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNFTUlDT0xPTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU0VNSUNPTE9OOiAxODYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUExVUyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QTFVTXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQTFVTOiAxODcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ09NTUEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQ09NTUFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENPTU1BOiAxODgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTUlOVVMga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTUlOVVNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE1JTlVTOiAxODksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUEVSSU9EIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBFUklPRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUEVSSU9EOiAxOTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRk9SV0FSRF9TTEFTSCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GT1JXQVJEX1NMQVNIXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGT1JXQVJEX1NMQVNIOiAxOTEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS19TTEFTSCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5CQUNLX1NMQVNIXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBCQUNLX1NMQVNIOiAyMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUVVPVEVTIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlFVT1RFU1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUVVPVEVTOiAyMjIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS1RJQ0sga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQkFDS1RJQ0tcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEJBQ0tUSUNLOiAxOTIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgT1BFTl9CUkFDS0VUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk9QRU5fQlJBQ0tFVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgT1BFTl9CUkFDS0VUOiAyMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ0xPU0VEX0JSQUNLRVQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQ0xPU0VEX0JSQUNLRVRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENMT1NFRF9CUkFDS0VUOiAyMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VNSUNPTE9OX0ZJUkVGT1gga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU0VNSUNPTE9OX0ZJUkVGT1hcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNFTUlDT0xPTl9GSVJFRk9YOiA1OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBDT0xPTiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT0xPTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ09MT046IDU4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIENPTU1BX0ZJUkVGT1hfV0lORE9XUyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT01NQV9GSVJFRk9YX1dJTkRPV1NcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENPTU1BX0ZJUkVGT1hfV0lORE9XUzogNjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ09NTUFfRklSRUZPWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT01NQV9GSVJFRk9YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDT01NQV9GSVJFRk9YOiA2MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBCUkFDS0VUX1JJR0hUX0ZJUkVGT1gga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQlJBQ0tFVF9SSUdIVF9GSVJFRk9YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBCUkFDS0VUX1JJR0hUX0ZJUkVGT1g6IDE3NCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBCUkFDS0VUX0xFRlRfRklSRUZPWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5CUkFDS0VUX0xFRlRfRklSRUZPWFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQlJBQ0tFVF9MRUZUX0ZJUkVGT1g6IDE3NVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlDb2RlcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/KeyMap.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/KeyMap.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar KeyCodes = __webpack_require__(/*! ./KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\n\r\nvar KeyMap = {};\r\n\r\nfor (var key in KeyCodes)\r\n{\r\n    KeyMap[KeyCodes[key]] = key;\r\n}\r\n\r\nmodule.exports = KeyMap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleU1hcC5qcz9jOTVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsNkVBQVk7O0FBRW5DOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQva2V5cy9LZXlNYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBLZXlDb2RlcyA9IHJlcXVpcmUoJy4vS2V5Q29kZXMnKTtcclxuXHJcbnZhciBLZXlNYXAgPSB7fTtcclxuXHJcbmZvciAodmFyIGtleSBpbiBLZXlDb2Rlcylcclxue1xyXG4gICAgS2V5TWFwW0tleUNvZGVzW2tleV1dID0ga2V5O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEtleU1hcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/KeyMap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/keyboard/keys/UpDuration.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/input/keyboard/keys/UpDuration.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns `true` if the Key was released within the `duration` value given, based on the current\r\n * game clock time. Or returns `false` if it either isn't up, or was released longer ago than the given duration.\r\n *\r\n * @function Phaser.Input.Keyboard.UpDuration\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object to test.\r\n * @param {integer} [duration=50] - The duration, in ms, within which the key must have been released.\r\n *\r\n * @return {boolean} `true` if the Key was released within `duration` ms ago, otherwise `false`.\r\n */\r\nvar UpDuration = function (key, duration)\r\n{\r\n    if (duration === undefined) { duration = 50; }\r\n\r\n    var current = key.plugin.game.loop.time - key.timeUp;\r\n\r\n    return (key.isUp && current < duration);\r\n};\r\n\r\nmodule.exports = UpDuration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL1VwRHVyYXRpb24uanM/OTkzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGVBQWU7O0FBRWhEOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL1VwRHVyYXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgS2V5IHdhcyByZWxlYXNlZCB3aXRoaW4gdGhlIGBkdXJhdGlvbmAgdmFsdWUgZ2l2ZW4sIGJhc2VkIG9uIHRoZSBjdXJyZW50XHJcbiAqIGdhbWUgY2xvY2sgdGltZS4gT3IgcmV0dXJucyBgZmFsc2VgIGlmIGl0IGVpdGhlciBpc24ndCB1cCwgb3Igd2FzIHJlbGVhc2VkIGxvbmdlciBhZ28gdGhhbiB0aGUgZ2l2ZW4gZHVyYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuVXBEdXJhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IG9iamVjdCB0byB0ZXN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj01MF0gLSBUaGUgZHVyYXRpb24sIGluIG1zLCB3aXRoaW4gd2hpY2ggdGhlIGtleSBtdXN0IGhhdmUgYmVlbiByZWxlYXNlZC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBLZXkgd2FzIHJlbGVhc2VkIHdpdGhpbiBgZHVyYXRpb25gIG1zIGFnbywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgVXBEdXJhdGlvbiA9IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG57XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDUwOyB9XHJcblxyXG4gICAgdmFyIGN1cnJlbnQgPSBrZXkucGx1Z2luLmdhbWUubG9vcC50aW1lIC0ga2V5LnRpbWVVcDtcclxuXHJcbiAgICByZXR1cm4gKGtleS5pc1VwICYmIGN1cnJlbnQgPCBkdXJhdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFVwRHVyYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/UpDuration.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/mouse/MouseManager.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/input/mouse/MouseManager.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Features = __webpack_require__(/*! ../../device/Features */ \"./node_modules/phaser/src/device/Features.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n//  https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent\r\n//  https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n\r\n/**\r\n * @classdesc\r\n * The Mouse Manager is a helper class that belongs to the Input Manager.\r\n * \r\n * Its role is to listen for native DOM Mouse Events and then pass them onto the Input Manager for further processing.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically.\r\n *\r\n * @class MouseManager\r\n * @memberof Phaser.Input.Mouse\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar MouseManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function MouseManager (inputManager)\r\n    {\r\n        /**\r\n         * A reference to the Input Manager.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#manager\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = inputManager;\r\n\r\n        /**\r\n         * If true the DOM mouse events will have event.preventDefault applied to them, if false they will propagate fully.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#capture\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.capture = true;\r\n\r\n        /**\r\n         * A boolean that controls if the Mouse Manager is enabled or not.\r\n         * Can be toggled on the fly.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#enabled\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = false;\r\n\r\n        /**\r\n         * The Mouse target, as defined in the Game Config.\r\n         * Typically the canvas to which the game is rendering, but can be any interactive DOM element.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#target\r\n         * @type {any}\r\n         * @since 3.0.0\r\n         */\r\n        this.target;\r\n\r\n        /**\r\n         * If the mouse has been pointer locked successfully this will be set to true.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#locked\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.locked = false;\r\n\r\n        /**\r\n         * The Mouse Move Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseMove\r\n         * @type {function}\r\n         * @since 3.10.0\r\n         */\r\n        this.onMouseMove = NOOP;\r\n\r\n        /**\r\n         * The Mouse Down Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseDown\r\n         * @type {function}\r\n         * @since 3.10.0\r\n         */\r\n        this.onMouseDown = NOOP;\r\n\r\n        /**\r\n         * The Mouse Up Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseUp\r\n         * @type {function}\r\n         * @since 3.10.0\r\n         */\r\n        this.onMouseUp = NOOP;\r\n\r\n        /**\r\n         * The Mouse Down Event handler specifically for events on the Window.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseDownWindow\r\n         * @type {function}\r\n         * @since 3.17.0\r\n         */\r\n        this.onMouseDownWindow = NOOP;\r\n\r\n        /**\r\n         * The Mouse Up Event handler specifically for events on the Window.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseUpWindow\r\n         * @type {function}\r\n         * @since 3.17.0\r\n         */\r\n        this.onMouseUpWindow = NOOP;\r\n\r\n        /**\r\n         * The Mouse Over Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseOver\r\n         * @type {function}\r\n         * @since 3.16.0\r\n         */\r\n        this.onMouseOver = NOOP;\r\n\r\n        /**\r\n         * The Mouse Out Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseOut\r\n         * @type {function}\r\n         * @since 3.16.0\r\n         */\r\n        this.onMouseOut = NOOP;\r\n\r\n        /**\r\n         * The Mouse Wheel Event handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#onMouseWheel\r\n         * @type {function}\r\n         * @since 3.18.0\r\n         */\r\n        this.onMouseWheel = NOOP;\r\n\r\n        /**\r\n         * Internal pointerLockChange handler.\r\n         * This function is sent the native DOM MouseEvent.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Mouse.MouseManager#pointerLockChange\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.pointerLockChange = NOOP;\r\n\r\n        inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Touch Manager boot process.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#boot\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var config = this.manager.config;\r\n\r\n        this.enabled = config.inputMouse;\r\n        this.target = config.inputMouseEventTarget;\r\n        this.capture = config.inputMouseCapture;\r\n\r\n        if (!this.target)\r\n        {\r\n            this.target = this.manager.game.canvas;\r\n        }\r\n        else if (typeof this.target === 'string')\r\n        {\r\n            this.target = document.getElementById(this.target);\r\n        }\r\n\r\n        if (config.disableContextMenu)\r\n        {\r\n            this.disableContextMenu();\r\n        }\r\n\r\n        if (this.enabled && this.target)\r\n        {\r\n            this.startListeners();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Attempts to disable the context menu from appearing if you right-click on the browser.\r\n     * \r\n     * Works by listening for the `contextmenu` event and prevent defaulting it.\r\n     * \r\n     * Use this if you need to enable right-button mouse support in your game, and the browser\r\n     * menu keeps getting in the way.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#disableContextMenu\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Input.Mouse.MouseManager} This Mouse Manager instance.\r\n     */\r\n    disableContextMenu: function ()\r\n    {\r\n        document.body.addEventListener('contextmenu', function (event)\r\n        {\r\n            event.preventDefault();\r\n            return false;\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If the browser supports it, you can request that the pointer be locked to the browser window.\r\n     *\r\n     * This is classically known as 'FPS controls', where the pointer can't leave the browser until\r\n     * the user presses an exit key.\r\n     *\r\n     * If the browser successfully enters a locked state, a `POINTER_LOCK_CHANGE_EVENT` will be dispatched,\r\n     * from the games Input Manager, with an `isPointerLocked` property.\r\n     *\r\n     * It is important to note that pointer lock can only be enabled after an 'engagement gesture',\r\n     * see: https://w3c.github.io/pointerlock/#dfn-engagement-gesture.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#requestPointerLock\r\n     * @since 3.0.0\r\n     */\r\n    requestPointerLock: function ()\r\n    {\r\n        if (Features.pointerLock)\r\n        {\r\n            var element = this.target;\r\n\r\n            element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;\r\n\r\n            element.requestPointerLock();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * If the browser supports pointer lock, this will request that the pointer lock is released. If\r\n     * the browser successfully enters a locked state, a 'POINTER_LOCK_CHANGE_EVENT' will be\r\n     * dispatched - from the game's input manager - with an `isPointerLocked` property.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#releasePointerLock\r\n     * @since 3.0.0\r\n     */\r\n    releasePointerLock: function ()\r\n    {\r\n        if (Features.pointerLock)\r\n        {\r\n            document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock;\r\n            document.exitPointerLock();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Starts the Mouse Event listeners running.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#startListeners\r\n     * @since 3.0.0\r\n     */\r\n    startListeners: function ()\r\n    {\r\n        var _this = this;\r\n        var canvas = this.manager.canvas;\r\n        var autoFocus = (window && window.focus && this.manager.game.config.autoFocus);\r\n\r\n        this.onMouseMove = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onMouseMove(event);\r\n    \r\n                if (_this.capture)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onMouseDown = function (event)\r\n        {\r\n            if (autoFocus)\r\n            {\r\n                window.focus();\r\n            }\r\n\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onMouseDown(event);\r\n    \r\n                if (_this.capture && event.target === canvas)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onMouseDownWindow = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n            {\r\n                //  Only process the event if the target isn't the canvas\r\n                _this.manager.onMouseDown(event);\r\n            }\r\n        };\r\n\r\n        this.onMouseUp = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onMouseUp(event);\r\n    \r\n                if (_this.capture && event.target === canvas)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onMouseUpWindow = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n            {\r\n                //  Only process the event if the target isn't the canvas\r\n                _this.manager.onMouseUp(event);\r\n            }\r\n        };\r\n\r\n        this.onMouseOver = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.setCanvasOver(event);\r\n            }\r\n        };\r\n\r\n        this.onMouseOut = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.setCanvasOut(event);\r\n            }\r\n        };\r\n\r\n        this.onMouseWheel = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onMouseWheel(event);\r\n            }\r\n        };\r\n\r\n        var target = this.target;\r\n\r\n        if (!target)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var passive = { passive: true };\r\n        var nonPassive = { passive: false };\r\n\r\n        target.addEventListener('mousemove', this.onMouseMove, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('mousedown', this.onMouseDown, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('mouseup', this.onMouseUp, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('mouseover', this.onMouseOver, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('mouseout', this.onMouseOut, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('wheel', this.onMouseWheel, (this.capture) ? nonPassive : passive);\r\n\r\n        if (window && this.manager.game.config.inputWindowEvents)\r\n        {\r\n            window.addEventListener('mousedown', this.onMouseDownWindow, nonPassive);\r\n            window.addEventListener('mouseup', this.onMouseUpWindow, nonPassive);\r\n        }\r\n\r\n        if (Features.pointerLock)\r\n        {\r\n            this.pointerLockChange = function (event)\r\n            {\r\n                var element = _this.target;\r\n\r\n                _this.locked = (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element) ? true : false;\r\n\r\n                _this.manager.onPointerLockChange(event);\r\n            };\r\n\r\n            document.addEventListener('pointerlockchange', this.pointerLockChange, true);\r\n            document.addEventListener('mozpointerlockchange', this.pointerLockChange, true);\r\n            document.addEventListener('webkitpointerlockchange', this.pointerLockChange, true);\r\n        }\r\n\r\n        this.enabled = true;\r\n    },\r\n\r\n    /**\r\n     * Stops the Mouse Event listeners.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#stopListeners\r\n     * @since 3.0.0\r\n     */\r\n    stopListeners: function ()\r\n    {\r\n        var target = this.target;\r\n\r\n        target.removeEventListener('mousemove', this.onMouseMove);\r\n        target.removeEventListener('mousedown', this.onMouseDown);\r\n        target.removeEventListener('mouseup', this.onMouseUp);\r\n        target.removeEventListener('mouseover', this.onMouseOver);\r\n        target.removeEventListener('mouseout', this.onMouseOut);\r\n\r\n        if (window)\r\n        {\r\n            window.removeEventListener('mousedown', this.onMouseDownWindow);\r\n            window.removeEventListener('mouseup', this.onMouseUpWindow);\r\n        }\r\n\r\n        if (Features.pointerLock)\r\n        {\r\n            document.removeEventListener('pointerlockchange', this.pointerLockChange, true);\r\n            document.removeEventListener('mozpointerlockchange', this.pointerLockChange, true);\r\n            document.removeEventListener('webkitpointerlockchange', this.pointerLockChange, true);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Mouse Manager instance.\r\n     *\r\n     * @method Phaser.Input.Mouse.MouseManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.stopListeners();\r\n\r\n        this.target = null;\r\n        this.enabled = false;\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MouseManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9Nb3VzZU1hbmFnZXIuanM/Y2MwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsMkVBQXVCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCO0FBQ3ZCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L21vdXNlL01vdXNlTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZlYXR1cmVzID0gcmVxdWlyZSgnLi4vLi4vZGV2aWNlL0ZlYXR1cmVzJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcblxyXG4vLyAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01vdXNlRXZlbnRcclxuLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL0V2ZW50TGlzdGVuZXJPcHRpb25zL2Jsb2IvZ2gtcGFnZXMvZXhwbGFpbmVyLm1kXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgTW91c2UgTWFuYWdlciBpcyBhIGhlbHBlciBjbGFzcyB0aGF0IGJlbG9uZ3MgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gTW91c2UgRXZlbnRzIGFuZCB0aGVuIHBhc3MgdGhlbSBvbnRvIHRoZSBJbnB1dCBNYW5hZ2VyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXHJcbiAqIFxyXG4gKiBZb3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIHRoZSBJbnB1dCBNYW5hZ2VyIHdpbGwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIGl0IGF1dG9tYXRpY2FsbHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBNb3VzZU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5Nb3VzZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn0gaW5wdXRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqL1xyXG52YXIgTW91c2VNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1vdXNlTWFuYWdlciAoaW5wdXRNYW5hZ2VyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gaW5wdXRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0cnVlIHRoZSBET00gbW91c2UgZXZlbnRzIHdpbGwgaGF2ZSBldmVudC5wcmV2ZW50RGVmYXVsdCBhcHBsaWVkIHRvIHRoZW0sIGlmIGZhbHNlIHRoZXkgd2lsbCBwcm9wYWdhdGUgZnVsbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI2NhcHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBib29sZWFuIHRoYXQgY29udHJvbHMgaWYgdGhlIE1vdXNlIE1hbmFnZXIgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICAgICAgICogQ2FuIGJlIHRvZ2dsZWQgb24gdGhlIGZseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSB0YXJnZXQsIGFzIGRlZmluZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqIFR5cGljYWxseSB0aGUgY2FudmFzIHRvIHdoaWNoIHRoZSBnYW1lIGlzIHJlbmRlcmluZywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoZSBtb3VzZSBoYXMgYmVlbiBwb2ludGVyIGxvY2tlZCBzdWNjZXNzZnVsbHkgdGhpcyB3aWxsIGJlIHNldCB0byB0cnVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNsb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBNb3ZlIEV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZW50IHRoZSBuYXRpdmUgRE9NIE1vdXNlRXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI29uTW91c2VNb3ZlXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uTW91c2VNb3ZlID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1vdXNlIERvd24gRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZURvd25cclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd24gPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgVXAgRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZVVwXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uTW91c2VVcCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBEb3duIEV2ZW50IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBldmVudHMgb24gdGhlIFdpbmRvdy5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZURvd25XaW5kb3dcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd25XaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgVXAgRXZlbnQgaGFuZGxlciBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBNb3VzZUV2ZW50LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNvbk1vdXNlVXBXaW5kb3dcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwV2luZG93ID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1vdXNlIE92ZXIgRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZU92ZXJcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZU92ZXIgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgT3V0IEV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZW50IHRoZSBuYXRpdmUgRE9NIE1vdXNlRXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI29uTW91c2VPdXRcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZU91dCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBXaGVlbCBFdmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBNb3VzZUV2ZW50LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNvbk1vdXNlV2hlZWxcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZVdoZWVsID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcG9pbnRlckxvY2tDaGFuZ2UgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjcG9pbnRlckxvY2tDaGFuZ2VcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSA9IE5PT1A7XHJcblxyXG4gICAgICAgIGlucHV0TWFuYWdlci5ldmVudHMub25jZShJbnB1dEV2ZW50cy5NQU5BR0VSX0JPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRvdWNoIE1hbmFnZXIgYm9vdCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMubWFuYWdlci5jb25maWc7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGNvbmZpZy5pbnB1dE1vdXNlO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLmlucHV0TW91c2VFdmVudFRhcmdldDtcclxuICAgICAgICB0aGlzLmNhcHR1cmUgPSBjb25maWcuaW5wdXRNb3VzZUNhcHR1cmU7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMubWFuYWdlci5nYW1lLmNhbnZhcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMudGFyZ2V0ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy50YXJnZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlQ29udGV4dE1lbnUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gZGlzYWJsZSB0aGUgY29udGV4dCBtZW51IGZyb20gYXBwZWFyaW5nIGlmIHlvdSByaWdodC1jbGljayBvbiB0aGUgYnJvd3Nlci5cclxuICAgICAqIFxyXG4gICAgICogV29ya3MgYnkgbGlzdGVuaW5nIGZvciB0aGUgYGNvbnRleHRtZW51YCBldmVudCBhbmQgcHJldmVudCBkZWZhdWx0aW5nIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBlbmFibGUgcmlnaHQtYnV0dG9uIG1vdXNlIHN1cHBvcnQgaW4geW91ciBnYW1lLCBhbmQgdGhlIGJyb3dzZXJcclxuICAgICAqIG1lbnUga2VlcHMgZ2V0dGluZyBpbiB0aGUgd2F5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNkaXNhYmxlQ29udGV4dE1lbnVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXJ9IFRoaXMgTW91c2UgTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIGl0LCB5b3UgY2FuIHJlcXVlc3QgdGhhdCB0aGUgcG9pbnRlciBiZSBsb2NrZWQgdG8gdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaXMgY2xhc3NpY2FsbHkga25vd24gYXMgJ0ZQUyBjb250cm9scycsIHdoZXJlIHRoZSBwb2ludGVyIGNhbid0IGxlYXZlIHRoZSBicm93c2VyIHVudGlsXHJcbiAgICAgKiB0aGUgdXNlciBwcmVzc2VzIGFuIGV4aXQga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBicm93c2VyIHN1Y2Nlc3NmdWxseSBlbnRlcnMgYSBsb2NrZWQgc3RhdGUsIGEgYFBPSU5URVJfTE9DS19DSEFOR0VfRVZFTlRgIHdpbGwgYmUgZGlzcGF0Y2hlZCxcclxuICAgICAqIGZyb20gdGhlIGdhbWVzIElucHV0IE1hbmFnZXIsIHdpdGggYW4gYGlzUG9pbnRlckxvY2tlZGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBwb2ludGVyIGxvY2sgY2FuIG9ubHkgYmUgZW5hYmxlZCBhZnRlciBhbiAnZW5nYWdlbWVudCBnZXN0dXJlJyxcclxuICAgICAqIHNlZTogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3BvaW50ZXJsb2NrLyNkZm4tZW5nYWdlbWVudC1nZXN0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNyZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXF1ZXN0UG9pbnRlckxvY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKEZlYXR1cmVzLnBvaW50ZXJMb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrID0gZWxlbWVudC5yZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC5tb3pSZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC53ZWJraXRSZXF1ZXN0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnJlcXVlc3RQb2ludGVyTG9jaygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBwb2ludGVyIGxvY2ssIHRoaXMgd2lsbCByZXF1ZXN0IHRoYXQgdGhlIHBvaW50ZXIgbG9jayBpcyByZWxlYXNlZC4gSWZcclxuICAgICAqIHRoZSBicm93c2VyIHN1Y2Nlc3NmdWxseSBlbnRlcnMgYSBsb2NrZWQgc3RhdGUsIGEgJ1BPSU5URVJfTE9DS19DSEFOR0VfRVZFTlQnIHdpbGwgYmVcclxuICAgICAqIGRpc3BhdGNoZWQgLSBmcm9tIHRoZSBnYW1lJ3MgaW5wdXQgbWFuYWdlciAtIHdpdGggYW4gYGlzUG9pbnRlckxvY2tlZGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3JlbGVhc2VQb2ludGVyTG9ja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlbGVhc2VQb2ludGVyTG9jazogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoRmVhdHVyZXMucG9pbnRlckxvY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5leGl0UG9pbnRlckxvY2sgPSBkb2N1bWVudC5leGl0UG9pbnRlckxvY2sgfHwgZG9jdW1lbnQubW96RXhpdFBvaW50ZXJMb2NrIHx8IGRvY3VtZW50LndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuICAgICAgICAgICAgZG9jdW1lbnQuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgTW91c2UgRXZlbnQgbGlzdGVuZXJzIHJ1bm5pbmcuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3N0YXJ0TGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5tYW5hZ2VyLmNhbnZhcztcclxuICAgICAgICB2YXIgYXV0b0ZvY3VzID0gKHdpbmRvdyAmJiB3aW5kb3cuZm9jdXMgJiYgdGhpcy5tYW5hZ2VyLmdhbWUuY29uZmlnLmF1dG9Gb2N1cyk7XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vbk1vdXNlTW92ZShldmVudCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jYXB0dXJlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGF1dG9Gb2N1cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQudGFyZ2V0ID09PSBjYW52YXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd25XaW5kb3cgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZCAmJiBldmVudC50YXJnZXQgIT09IGNhbnZhcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE9ubHkgcHJvY2VzcyB0aGUgZXZlbnQgaWYgdGhlIHRhcmdldCBpc24ndCB0aGUgY2FudmFzXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Nb3VzZVVwKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQudGFyZ2V0ID09PSBjYW52YXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSBjYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHByb2Nlc3MgdGhlIGV2ZW50IGlmIHRoZSB0YXJnZXQgaXNuJ3QgdGhlIGNhbnZhc1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vbk1vdXNlVXAoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vdXNlT3ZlciA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLnNldENhbnZhc092ZXIoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuc2V0Q2FudmFzT3V0KGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Nb3VzZVdoZWVsKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFzc2l2ZSA9IHsgcGFzc2l2ZTogdHJ1ZSB9O1xyXG4gICAgICAgIHZhciBub25QYXNzaXZlID0geyBwYXNzaXZlOiBmYWxzZSB9O1xyXG5cclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXAsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2VPdmVyLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLm9uTW91c2VPdXQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMub25Nb3VzZVdoZWVsLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdyAmJiB0aGlzLm1hbmFnZXIuZ2FtZS5jb25maWcuaW5wdXRXaW5kb3dFdmVudHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bldpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXBXaW5kb3csIG5vblBhc3NpdmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEZlYXR1cmVzLnBvaW50ZXJMb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMubG9ja2VkID0gKGRvY3VtZW50LnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gZWxlbWVudCB8fCBkb2N1bWVudC5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IGVsZW1lbnQgfHwgZG9jdW1lbnQud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSBlbGVtZW50KSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uUG9pbnRlckxvY2tDaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIE1vdXNlIEV2ZW50IGxpc3RlbmVycy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgbWFudWFsbHkgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjc3RvcExpc3RlbmVyc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24pO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2VPdmVyKTtcclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLm9uTW91c2VPdXQpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25XaW5kb3cpO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwV2luZG93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChGZWF0dXJlcy5wb2ludGVyTG9jaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgTW91c2UgTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vdXNlTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/mouse/MouseManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/mouse/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/input/mouse/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Mouse\r\n */\r\n\r\n/* eslint-disable */\r\nmodule.exports = {\r\n\r\n    MouseManager: __webpack_require__(/*! ./MouseManager */ \"./node_modules/phaser/src/input/mouse/MouseManager.js\")\r\n       \r\n};\r\n/* eslint-enable */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9pbmRleC5qcz9kNTUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBZ0I7O0FBRTFDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0Lk1vdXNlXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgTW91c2VNYW5hZ2VyOiByZXF1aXJlKCcuL01vdXNlTWFuYWdlcicpXHJcbiAgICAgICBcclxufTtcclxuLyogZXNsaW50LWVuYWJsZSAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/mouse/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/touch/TouchManager.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/input/touch/TouchManager.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Touch_events\r\n// https://patrickhlauke.github.io/touch/tests/results/\r\n// https://www.html5rocks.com/en/mobile/touch/\r\n\r\n/**\r\n * @classdesc\r\n * The Touch Manager is a helper class that belongs to the Input Manager.\r\n * \r\n * Its role is to listen for native DOM Touch Events and then pass them onto the Input Manager for further processing.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically.\r\n *\r\n * @class TouchManager\r\n * @memberof Phaser.Input.Touch\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar TouchManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function TouchManager (inputManager)\r\n    {\r\n        /**\r\n         * A reference to the Input Manager.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#manager\r\n         * @type {Phaser.Input.InputManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = inputManager;\r\n\r\n        /**\r\n         * If true the DOM events will have event.preventDefault applied to them, if false they will propagate fully.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#capture\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.capture = true;\r\n\r\n        /**\r\n         * A boolean that controls if the Touch Manager is enabled or not.\r\n         * Can be toggled on the fly.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#enabled\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = false;\r\n\r\n        /**\r\n         * The Touch Event target, as defined in the Game Config.\r\n         * Typically the canvas to which the game is rendering, but can be any interactive DOM element.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#target\r\n         * @type {any}\r\n         * @since 3.0.0\r\n         */\r\n        this.target;\r\n\r\n        /**\r\n         * The Touch Start event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchStart\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.onTouchStart = NOOP;\r\n\r\n        /**\r\n         * The Touch Start event handler function specifically for events on the Window.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchStartWindow\r\n         * @type {function}\r\n         * @since 3.17.0\r\n         */\r\n        this.onTouchStartWindow = NOOP;\r\n\r\n        /**\r\n         * The Touch Move event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchMove\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.onTouchMove = NOOP;\r\n\r\n        /**\r\n         * The Touch End event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchEnd\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.onTouchEnd = NOOP;\r\n\r\n        /**\r\n         * The Touch End event handler function specifically for events on the Window.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchEndWindow\r\n         * @type {function}\r\n         * @since 3.17.0\r\n         */\r\n        this.onTouchEndWindow = NOOP;\r\n\r\n        /**\r\n         * The Touch Cancel event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchCancel\r\n         * @type {function}\r\n         * @since 3.15.0\r\n         */\r\n        this.onTouchCancel = NOOP;\r\n\r\n        /**\r\n         * The Touch Cancel event handler function specifically for events on the Window.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchCancelWindow\r\n         * @type {function}\r\n         * @since 3.18.0\r\n         */\r\n        this.onTouchCancelWindow = NOOP;\r\n\r\n        /**\r\n         * The Touch Over event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchOver\r\n         * @type {function}\r\n         * @since 3.16.0\r\n         */\r\n        this.onTouchOver = NOOP;\r\n\r\n        /**\r\n         * The Touch Out event handler function.\r\n         * Initially empty and bound in the `startListeners` method.\r\n         *\r\n         * @name Phaser.Input.Touch.TouchManager#onTouchOut\r\n         * @type {function}\r\n         * @since 3.16.0\r\n         */\r\n        this.onTouchOut = NOOP;\r\n\r\n        inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Touch Manager boot process.\r\n     *\r\n     * @method Phaser.Input.Touch.TouchManager#boot\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var config = this.manager.config;\r\n\r\n        this.enabled = config.inputTouch;\r\n        this.target = config.inputTouchEventTarget;\r\n        this.capture = config.inputTouchCapture;\r\n\r\n        if (!this.target)\r\n        {\r\n            this.target = this.manager.game.canvas;\r\n        }\r\n\r\n        if (config.disableContextMenu)\r\n        {\r\n            this.disableContextMenu();\r\n        }\r\n\r\n        if (this.enabled && this.target)\r\n        {\r\n            this.startListeners();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Attempts to disable the context menu from appearing if you touch-hold on the browser.\r\n     * \r\n     * Works by listening for the `contextmenu` event and prevent defaulting it.\r\n     * \r\n     * Use this if you need to disable the OS context menu on mobile.\r\n     *\r\n     * @method Phaser.Input.Touch.TouchManager#disableContextMenu\r\n     * @since 3.20.0\r\n     *\r\n     * @return {Phaser.Input.Touch.TouchManager} This Touch Manager instance.\r\n     */\r\n    disableContextMenu: function ()\r\n    {\r\n        document.body.addEventListener('contextmenu', function (event)\r\n        {\r\n            event.preventDefault();\r\n            return false;\r\n        });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Starts the Touch Event listeners running as long as an input target is set.\r\n     * \r\n     * This method is called automatically if Touch Input is enabled in the game config,\r\n     * which it is by default. However, you can call it manually should you need to\r\n     * delay input capturing until later in the game.\r\n     *\r\n     * @method Phaser.Input.Touch.TouchManager#startListeners\r\n     * @since 3.0.0\r\n     */\r\n    startListeners: function ()\r\n    {\r\n        var _this = this;\r\n        var canvas = this.manager.canvas;\r\n        var autoFocus = (window && window.focus && this.manager.game.config.autoFocus);\r\n\r\n        this.onTouchStart = function (event)\r\n        {\r\n            if (autoFocus)\r\n            {\r\n                window.focus();\r\n            }\r\n\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onTouchStart(event);\r\n    \r\n                if (_this.capture && event.cancelable && event.target === canvas)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onTouchStartWindow = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n            {\r\n                //  Only process the event if the target isn't the canvas\r\n                _this.manager.onTouchStart(event);\r\n            }\r\n        };\r\n\r\n        this.onTouchMove = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onTouchMove(event);\r\n    \r\n                if (_this.capture && event.cancelable)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onTouchEnd = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onTouchEnd(event);\r\n    \r\n                if (_this.capture && event.cancelable && event.target === canvas)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onTouchEndWindow = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n            {\r\n                //  Only process the event if the target isn't the canvas\r\n                _this.manager.onTouchEnd(event);\r\n            }\r\n        };\r\n\r\n        this.onTouchCancel = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onTouchCancel(event);\r\n    \r\n                if (_this.capture)\r\n                {\r\n                    event.preventDefault();\r\n                }\r\n            }\r\n        };\r\n\r\n        this.onTouchCancelWindow = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.onTouchCancel(event);\r\n            }\r\n        };\r\n\r\n        this.onTouchOver = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.setCanvasOver(event);\r\n            }\r\n        };\r\n\r\n        this.onTouchOut = function (event)\r\n        {\r\n            if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n            {\r\n                _this.manager.setCanvasOut(event);\r\n            }\r\n        };\r\n\r\n        var target = this.target;\r\n\r\n        if (!target)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var passive = { passive: true };\r\n        var nonPassive = { passive: false };\r\n\r\n        target.addEventListener('touchstart', this.onTouchStart, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('touchmove', this.onTouchMove, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('touchend', this.onTouchEnd, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('touchcancel', this.onTouchCancel, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('touchover', this.onTouchOver, (this.capture) ? nonPassive : passive);\r\n        target.addEventListener('touchout', this.onTouchOut, (this.capture) ? nonPassive : passive);\r\n\r\n        if (window && this.manager.game.config.inputWindowEvents)\r\n        {\r\n            window.addEventListener('touchstart', this.onTouchStartWindow, nonPassive);\r\n            window.addEventListener('touchend', this.onTouchEndWindow, nonPassive);\r\n            window.addEventListener('touchcancel', this.onTouchCancelWindow, nonPassive);\r\n        }\r\n\r\n        this.enabled = true;\r\n    },\r\n\r\n    /**\r\n     * Stops the Touch Event listeners.\r\n     * This is called automatically and does not need to be manually invoked.\r\n     *\r\n     * @method Phaser.Input.Touch.TouchManager#stopListeners\r\n     * @since 3.0.0\r\n     */\r\n    stopListeners: function ()\r\n    {\r\n        var target = this.target;\r\n\r\n        target.removeEventListener('touchstart', this.onTouchStart);\r\n        target.removeEventListener('touchmove', this.onTouchMove);\r\n        target.removeEventListener('touchend', this.onTouchEnd);\r\n        target.removeEventListener('touchcancel', this.onTouchCancel);\r\n        target.removeEventListener('touchover', this.onTouchOver);\r\n        target.removeEventListener('touchout', this.onTouchOut);\r\n\r\n        if (window)\r\n        {\r\n            window.removeEventListener('touchstart', this.onTouchStartWindow);\r\n            window.removeEventListener('touchend', this.onTouchEndWindow);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Touch Manager instance.\r\n     *\r\n     * @method Phaser.Input.Touch.TouchManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.stopListeners();\r\n\r\n        this.target = null;\r\n        this.enabled = false;\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TouchManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9Ub3VjaE1hbmFnZXIuanM/YjdmZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNyQyxXQUFXLG1CQUFPLENBQUMsaUVBQWtCOztBQUVyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QiwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L3RvdWNoL1RvdWNoTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIElucHV0RXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoX2V2ZW50c1xyXG4vLyBodHRwczovL3BhdHJpY2tobGF1a2UuZ2l0aHViLmlvL3RvdWNoL3Rlc3RzL3Jlc3VsdHMvXHJcbi8vIGh0dHBzOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL21vYmlsZS90b3VjaC9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBUb3VjaCBNYW5hZ2VyIGlzIGEgaGVscGVyIGNsYXNzIHRoYXQgYmVsb25ncyB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICogXHJcbiAqIEl0cyByb2xlIGlzIHRvIGxpc3RlbiBmb3IgbmF0aXZlIERPTSBUb3VjaCBFdmVudHMgYW5kIHRoZW4gcGFzcyB0aGVtIG9udG8gdGhlIElucHV0IE1hbmFnZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cclxuICogXHJcbiAqIFlvdSBkbyBub3QgbmVlZCB0byBjcmVhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgdGhlIElucHV0IE1hbmFnZXIgd2lsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaXQgYXV0b21hdGljYWxseS5cclxuICpcclxuICogQGNsYXNzIFRvdWNoTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0LlRvdWNoXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBpbnB1dE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICovXHJcbnZhciBUb3VjaE1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVG91Y2hNYW5hZ2VyIChpbnB1dE1hbmFnZXIpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBpbnB1dE1hbmFnZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRydWUgdGhlIERPTSBldmVudHMgd2lsbCBoYXZlIGV2ZW50LnByZXZlbnREZWZhdWx0IGFwcGxpZWQgdG8gdGhlbSwgaWYgZmFsc2UgdGhleSB3aWxsIHByb3BhZ2F0ZSBmdWxseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjY2FwdHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhcHR1cmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgVG91Y2ggTWFuYWdlciBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIEV2ZW50IHRhcmdldCwgYXMgZGVmaW5lZCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogVHlwaWNhbGx5IHRoZSBjYW52YXMgdG8gd2hpY2ggdGhlIGdhbWUgaXMgcmVuZGVyaW5nLCBidXQgY2FuIGJlIGFueSBpbnRlcmFjdGl2ZSBET00gZWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIFN0YXJ0IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hTdGFydFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hTdGFydCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBTdGFydCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgZXZlbnRzIG9uIHRoZSBXaW5kb3cuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hTdGFydFdpbmRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggTW92ZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoTW92ZVxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIEVuZCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoRW5kXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Ub3VjaEVuZCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBFbmQgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoRW5kV2luZG93XHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hFbmRXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggQ2FuY2VsIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hDYW5jZWxcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Ub3VjaENhbmNlbCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBDYW5jZWwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoQ2FuY2VsV2luZG93XHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hDYW5jZWxXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggT3ZlciBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoT3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoT3ZlciA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBPdXQgZXZlbnQgaGFuZGxlciBmdW5jdGlvbi5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjb25Ub3VjaE91dFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoT3V0ID0gTk9PUDtcclxuXHJcbiAgICAgICAgaW5wdXRNYW5hZ2VyLmV2ZW50cy5vbmNlKElucHV0RXZlbnRzLk1BTkFHRVJfQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVG91Y2ggTWFuYWdlciBib290IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5tYW5hZ2VyLmNvbmZpZztcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gY29uZmlnLmlucHV0VG91Y2g7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcuaW5wdXRUb3VjaEV2ZW50VGFyZ2V0O1xyXG4gICAgICAgIHRoaXMuY2FwdHVyZSA9IGNvbmZpZy5pbnB1dFRvdWNoQ2FwdHVyZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlQ29udGV4dE1lbnUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gZGlzYWJsZSB0aGUgY29udGV4dCBtZW51IGZyb20gYXBwZWFyaW5nIGlmIHlvdSB0b3VjaC1ob2xkIG9uIHRoZSBicm93c2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBXb3JrcyBieSBsaXN0ZW5pbmcgZm9yIHRoZSBgY29udGV4dG1lbnVgIGV2ZW50IGFuZCBwcmV2ZW50IGRlZmF1bHRpbmcgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIFVzZSB0aGlzIGlmIHlvdSBuZWVkIHRvIGRpc2FibGUgdGhlIE9TIGNvbnRleHQgbWVudSBvbiBtb2JpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Rpc2FibGVDb250ZXh0TWVudVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXJ9IFRoaXMgVG91Y2ggTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgVG91Y2ggRXZlbnQgbGlzdGVuZXJzIHJ1bm5pbmcgYXMgbG9uZyBhcyBhbiBpbnB1dCB0YXJnZXQgaXMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBpZiBUb3VjaCBJbnB1dCBpcyBlbmFibGVkIGluIHRoZSBnYW1lIGNvbmZpZyxcclxuICAgICAqIHdoaWNoIGl0IGlzIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIHlvdSBjYW4gY2FsbCBpdCBtYW51YWxseSBzaG91bGQgeW91IG5lZWQgdG9cclxuICAgICAqIGRlbGF5IGlucHV0IGNhcHR1cmluZyB1bnRpbCBsYXRlciBpbiB0aGUgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjc3RhcnRMaXN0ZW5lcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdGFydExpc3RlbmVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLm1hbmFnZXIuY2FudmFzO1xyXG4gICAgICAgIHZhciBhdXRvRm9jdXMgPSAod2luZG93ICYmIHdpbmRvdy5mb2N1cyAmJiB0aGlzLm1hbmFnZXIuZ2FtZS5jb25maWcuYXV0b0ZvY3VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYXV0b0ZvY3VzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaFN0YXJ0KGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQuY2FuY2VsYWJsZSAmJiBldmVudC50YXJnZXQgPT09IGNhbnZhcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZCAmJiBldmVudC50YXJnZXQgIT09IGNhbnZhcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE9ubHkgcHJvY2VzcyB0aGUgZXZlbnQgaWYgdGhlIHRhcmdldCBpc24ndCB0aGUgY2FudmFzXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uVG91Y2hTdGFydChldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaE1vdmUoZXZlbnQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FwdHVyZSAmJiBldmVudC5jYW5jZWxhYmxlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vblRvdWNoRW5kKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQuY2FuY2VsYWJsZSAmJiBldmVudC50YXJnZXQgPT09IGNhbnZhcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoRW5kV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSBjYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHByb2Nlc3MgdGhlIGV2ZW50IGlmIHRoZSB0YXJnZXQgaXNuJ3QgdGhlIGNhbnZhc1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vblRvdWNoRW5kKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Ub3VjaENhbmNlbCA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uVG91Y2hDYW5jZWwoZXZlbnQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FwdHVyZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoQ2FuY2VsV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaENhbmNlbChldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hPdmVyID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuc2V0Q2FudmFzT3ZlcihldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5zZXRDYW52YXNPdXQoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAoIXRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXNzaXZlID0geyBwYXNzaXZlOiB0cnVlIH07XHJcbiAgICAgICAgdmFyIG5vblBhc3NpdmUgPSB7IHBhc3NpdmU6IGZhbHNlIH07XHJcblxyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbCwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNob3ZlcicsIHRoaXMub25Ub3VjaE92ZXIsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG91dCcsIHRoaXMub25Ub3VjaE91dCwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cgJiYgdGhpcy5tYW5hZ2VyLmdhbWUuY29uZmlnLmlucHV0V2luZG93RXZlbnRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBUb3VjaCBFdmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI3N0b3BMaXN0ZW5lcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdG9wTGlzdGVuZXJzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUpO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZCk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5vblRvdWNoQ2FuY2VsKTtcclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hvdmVyJywgdGhpcy5vblRvdWNoT3Zlcik7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNob3V0JywgdGhpcy5vblRvdWNoT3V0KTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cpO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmRXaW5kb3cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIFRvdWNoIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb3VjaE1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/touch/TouchManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/input/touch/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/input/touch/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Touch\r\n */\r\n\r\n/* eslint-disable */\r\nmodule.exports = {\r\n\r\n    TouchManager: __webpack_require__(/*! ./TouchManager */ \"./node_modules/phaser/src/input/touch/TouchManager.js\")\r\n       \r\n};\r\n/* eslint-enable */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9pbmRleC5qcz8wMjBmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBZ0I7O0FBRTFDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LlRvdWNoXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgVG91Y2hNYW5hZ2VyOiByZXF1aXJlKCcuL1RvdWNoTWFuYWdlcicpXHJcbiAgICAgICBcclxufTtcclxuLyogZXNsaW50LWVuYWJsZSAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/touch/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/File.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/loader/File.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetURL = __webpack_require__(/*! ./GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\");\r\nvar MergeXHRSettings = __webpack_require__(/*! ./MergeXHRSettings */ \"./node_modules/phaser/src/loader/MergeXHRSettings.js\");\r\nvar XHRLoader = __webpack_require__(/*! ./XHRLoader */ \"./node_modules/phaser/src/loader/XHRLoader.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The base File class used by all File Types that the Loader can support.\r\n * You shouldn't create an instance of a File directly, but should extend it with your own class, setting a custom type and processing methods.\r\n *\r\n * @class File\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\r\n * @param {Phaser.Types.Loader.FileConfig} fileConfig - The file configuration object, as created by the file type.\r\n */\r\nvar File = new Class({\r\n\r\n    initialize:\r\n\r\n    function File (loader, fileConfig)\r\n    {\r\n        /**\r\n         * A reference to the Loader that is going to load this file.\r\n         *\r\n         * @name Phaser.Loader.File#loader\r\n         * @type {Phaser.Loader.LoaderPlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.loader = loader;\r\n\r\n        /**\r\n         * A reference to the Cache, or Texture Manager, that is going to store this file if it loads.\r\n         *\r\n         * @name Phaser.Loader.File#cache\r\n         * @type {(Phaser.Cache.BaseCache|Phaser.Textures.TextureManager)}\r\n         * @since 3.7.0\r\n         */\r\n        this.cache = GetFastValue(fileConfig, 'cache', false);\r\n\r\n        /**\r\n         * The file type string (image, json, etc) for sorting within the Loader.\r\n         *\r\n         * @name Phaser.Loader.File#type\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = GetFastValue(fileConfig, 'type', false);\r\n\r\n        /**\r\n         * Unique cache key (unique within its file type)\r\n         *\r\n         * @name Phaser.Loader.File#key\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.key = GetFastValue(fileConfig, 'key', false);\r\n\r\n        var loadKey = this.key;\r\n\r\n        if (loader.prefix && loader.prefix !== '')\r\n        {\r\n            this.key = loader.prefix + loadKey;\r\n        }\r\n\r\n        if (!this.type || !this.key)\r\n        {\r\n            throw new Error('Error calling \\'Loader.' + this.type + '\\' invalid key provided.');\r\n        }\r\n\r\n        /**\r\n         * The URL of the file, not including baseURL.\r\n         * Automatically has Loader.path prepended to it.\r\n         *\r\n         * @name Phaser.Loader.File#url\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.url = GetFastValue(fileConfig, 'url');\r\n\r\n        if (this.url === undefined)\r\n        {\r\n            this.url = loader.path + loadKey + '.' + GetFastValue(fileConfig, 'extension', '');\r\n        }\r\n        else if (typeof(this.url) !== 'function')\r\n        {\r\n            this.url = loader.path + this.url;\r\n        }\r\n\r\n        /**\r\n         * The final URL this file will load from, including baseURL and path.\r\n         * Set automatically when the Loader calls 'load' on this file.\r\n         *\r\n         * @name Phaser.Loader.File#src\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.src = '';\r\n\r\n        /**\r\n         * The merged XHRSettings for this file.\r\n         *\r\n         * @name Phaser.Loader.File#xhrSettings\r\n         * @type {Phaser.Types.Loader.XHRSettingsObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.xhrSettings = XHRSettings(GetFastValue(fileConfig, 'responseType', undefined));\r\n\r\n        if (GetFastValue(fileConfig, 'xhrSettings', false))\r\n        {\r\n            this.xhrSettings = MergeXHRSettings(this.xhrSettings, GetFastValue(fileConfig, 'xhrSettings', {}));\r\n        }\r\n\r\n        /**\r\n         * The XMLHttpRequest instance (as created by XHR Loader) that is loading this File.\r\n         *\r\n         * @name Phaser.Loader.File#xhrLoader\r\n         * @type {?XMLHttpRequest}\r\n         * @since 3.0.0\r\n         */\r\n        this.xhrLoader = null;\r\n\r\n        /**\r\n         * The current state of the file. One of the FILE_CONST values.\r\n         *\r\n         * @name Phaser.Loader.File#state\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.state = (typeof(this.url) === 'function') ? CONST.FILE_POPULATED : CONST.FILE_PENDING;\r\n\r\n        /**\r\n         * The total size of this file.\r\n         * Set by onProgress and only if loading via XHR.\r\n         *\r\n         * @name Phaser.Loader.File#bytesTotal\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.bytesTotal = 0;\r\n\r\n        /**\r\n         * Updated as the file loads.\r\n         * Only set if loading via XHR.\r\n         *\r\n         * @name Phaser.Loader.File#bytesLoaded\r\n         * @type {number}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.bytesLoaded = -1;\r\n\r\n        /**\r\n         * A percentage value between 0 and 1 indicating how much of this file has loaded.\r\n         * Only set if loading via XHR.\r\n         *\r\n         * @name Phaser.Loader.File#percentComplete\r\n         * @type {number}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.percentComplete = -1;\r\n\r\n        /**\r\n         * For CORs based loading.\r\n         * If this is undefined then the File will check BaseLoader.crossOrigin and use that (if set)\r\n         *\r\n         * @name Phaser.Loader.File#crossOrigin\r\n         * @type {(string|undefined)}\r\n         * @since 3.0.0\r\n         */\r\n        this.crossOrigin = undefined;\r\n\r\n        /**\r\n         * The processed file data, stored here after the file has loaded.\r\n         *\r\n         * @name Phaser.Loader.File#data\r\n         * @type {*}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = undefined;\r\n\r\n        /**\r\n         * A config object that can be used by file types to store transitional data.\r\n         *\r\n         * @name Phaser.Loader.File#config\r\n         * @type {*}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = GetFastValue(fileConfig, 'config', {});\r\n\r\n        /**\r\n         * If this is a multipart file, i.e. an atlas and its json together, then this is a reference\r\n         * to the parent MultiFile. Set and used internally by the Loader or specific file types.\r\n         *\r\n         * @name Phaser.Loader.File#multiFile\r\n         * @type {?Phaser.Loader.MultiFile}\r\n         * @since 3.7.0\r\n         */\r\n        this.multiFile;\r\n\r\n        /**\r\n         * Does this file have an associated linked file? Such as an image and a normal map.\r\n         * Atlases and Bitmap Fonts use the multiFile, because those files need loading together but aren't\r\n         * actually bound by data, where-as a linkFile is.\r\n         *\r\n         * @name Phaser.Loader.File#linkFile\r\n         * @type {?Phaser.Loader.File}\r\n         * @since 3.7.0\r\n         */\r\n        this.linkFile;\r\n    },\r\n\r\n    /**\r\n     * Links this File with another, so they depend upon each other for loading and processing.\r\n     *\r\n     * @method Phaser.Loader.File#setLink\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} fileB - The file to link to this one.\r\n     */\r\n    setLink: function (fileB)\r\n    {\r\n        this.linkFile = fileB;\r\n\r\n        fileB.linkFile = this;\r\n    },\r\n\r\n    /**\r\n     * Resets the XHRLoader instance this file is using.\r\n     *\r\n     * @method Phaser.Loader.File#resetXHR\r\n     * @since 3.0.0\r\n     */\r\n    resetXHR: function ()\r\n    {\r\n        if (this.xhrLoader)\r\n        {\r\n            this.xhrLoader.onload = undefined;\r\n            this.xhrLoader.onerror = undefined;\r\n            this.xhrLoader.onprogress = undefined;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by the Loader, starts the actual file downloading.\r\n     * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\r\n     * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\r\n     *\r\n     * @method Phaser.Loader.File#load\r\n     * @since 3.0.0\r\n     */\r\n    load: function ()\r\n    {\r\n        if (this.state === CONST.FILE_POPULATED)\r\n        {\r\n            //  Can happen for example in a JSONFile if they've provided a JSON object instead of a URL\r\n            this.loader.nextFile(this, true);\r\n        }\r\n        else\r\n        {\r\n            this.src = GetURL(this, this.loader.baseURL);\r\n\r\n            if (this.src.indexOf('data:') === 0)\r\n            {\r\n                console.warn('Local data URIs are not supported: ' + this.key);\r\n            }\r\n            else\r\n            {\r\n                //  The creation of this XHRLoader starts the load process going.\r\n                //  It will automatically call the following, based on the load outcome:\r\n                //  \r\n                // xhr.onload = this.onLoad\r\n                // xhr.onerror = this.onError\r\n                // xhr.onprogress = this.onProgress\r\n\r\n                this.xhrLoader = XHRLoader(this, this.loader.xhr);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called when the file finishes loading, is sent a DOM ProgressEvent.\r\n     *\r\n     * @method Phaser.Loader.File#onLoad\r\n     * @since 3.0.0\r\n     *\r\n     * @param {XMLHttpRequest} xhr - The XMLHttpRequest that caused this onload event.\r\n     * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this load.\r\n     */\r\n    onLoad: function (xhr, event)\r\n    {\r\n        var localFileOk = ((xhr.responseURL && xhr.responseURL.indexOf('file://') === 0 && event.target.status === 0));\r\n\r\n        var success = !(event.target && event.target.status !== 200) || localFileOk;\r\n\r\n        //  Handle HTTP status codes of 4xx and 5xx as errors, even if xhr.onerror was not called.\r\n        if (xhr.readyState === 4 && xhr.status >= 400 && xhr.status <= 599)\r\n        {\r\n            success = false;\r\n        }\r\n\r\n        this.resetXHR();\r\n\r\n        this.loader.nextFile(this, success);\r\n    },\r\n\r\n    /**\r\n     * Called if the file errors while loading, is sent a DOM ProgressEvent.\r\n     *\r\n     * @method Phaser.Loader.File#onError\r\n     * @since 3.0.0\r\n     *\r\n     * @param {XMLHttpRequest} xhr - The XMLHttpRequest that caused this onload event.\r\n     * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this error.\r\n     */\r\n    onError: function ()\r\n    {\r\n        this.resetXHR();\r\n\r\n        this.loader.nextFile(this, false);\r\n    },\r\n\r\n    /**\r\n     * Called during the file load progress. Is sent a DOM ProgressEvent.\r\n     *\r\n     * @method Phaser.Loader.File#onProgress\r\n     * @fires Phaser.Loader.Events#FILE_PROGRESS\r\n     * @since 3.0.0\r\n     *\r\n     * @param {ProgressEvent} event - The DOM ProgressEvent.\r\n     */\r\n    onProgress: function (event)\r\n    {\r\n        if (event.lengthComputable)\r\n        {\r\n            this.bytesLoaded = event.loaded;\r\n            this.bytesTotal = event.total;\r\n\r\n            this.percentComplete = Math.min((this.bytesLoaded / this.bytesTotal), 1);\r\n\r\n            this.loader.emit(Events.FILE_PROGRESS, this, this.percentComplete);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Usually overridden by the FileTypes and is called by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data, for example a JSON file will parse itself during this stage.\r\n     *\r\n     * @method Phaser.Loader.File#onProcess\r\n     * @since 3.0.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.onProcessComplete();\r\n    },\r\n\r\n    /**\r\n     * Called when the File has completed processing.\r\n     * Checks on the state of its multifile, if set.\r\n     *\r\n     * @method Phaser.Loader.File#onProcessComplete\r\n     * @since 3.7.0\r\n     */\r\n    onProcessComplete: function ()\r\n    {\r\n        this.state = CONST.FILE_COMPLETE;\r\n\r\n        if (this.multiFile)\r\n        {\r\n            this.multiFile.onFileComplete(this);\r\n        }\r\n\r\n        this.loader.fileProcessComplete(this);\r\n    },\r\n\r\n    /**\r\n     * Called when the File has completed processing but it generated an error.\r\n     * Checks on the state of its multifile, if set.\r\n     *\r\n     * @method Phaser.Loader.File#onProcessError\r\n     * @since 3.7.0\r\n     */\r\n    onProcessError: function ()\r\n    {\r\n        this.state = CONST.FILE_ERRORED;\r\n\r\n        if (this.multiFile)\r\n        {\r\n            this.multiFile.onFileFailed(this);\r\n        }\r\n\r\n        this.loader.fileProcessComplete(this);\r\n    },\r\n\r\n    /**\r\n     * Checks if a key matching the one used by this file exists in the target Cache or not.\r\n     * This is called automatically by the LoaderPlugin to decide if the file can be safely\r\n     * loaded or will conflict.\r\n     *\r\n     * @method Phaser.Loader.File#hasCacheConflict\r\n     * @since 3.7.0\r\n     *\r\n     * @return {boolean} `true` if adding this file will cause a conflict, otherwise `false`.\r\n     */\r\n    hasCacheConflict: function ()\r\n    {\r\n        return (this.cache && this.cache.exists(this.key));\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     * This method is often overridden by specific file types.\r\n     *\r\n     * @method Phaser.Loader.File#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.cache)\r\n        {\r\n            this.cache.add(this.key, this.data);\r\n        }\r\n\r\n        this.pendingDestroy();\r\n    },\r\n\r\n    /**\r\n     * Called once the file has been added to its cache and is now ready for deletion from the Loader.\r\n     * It will emit a `filecomplete` event from the LoaderPlugin.\r\n     *\r\n     * @method Phaser.Loader.File#pendingDestroy\r\n     * @fires Phaser.Loader.Events#FILE_COMPLETE\r\n     * @fires Phaser.Loader.Events#FILE_KEY_COMPLETE\r\n     * @since 3.7.0\r\n     */\r\n    pendingDestroy: function (data)\r\n    {\r\n        if (data === undefined) { data = this.data; }\r\n\r\n        var key = this.key;\r\n        var type = this.type;\r\n\r\n        this.loader.emit(Events.FILE_COMPLETE, key, type, data);\r\n        this.loader.emit(Events.FILE_KEY_COMPLETE + type + '-' + key, key, type, data);\r\n\r\n        this.loader.flagForRemoval(this);\r\n    },\r\n\r\n    /**\r\n     * Destroy this File and any references it holds.\r\n     *\r\n     * @method Phaser.Loader.File#destroy\r\n     * @since 3.7.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.loader = null;\r\n        this.cache = null;\r\n        this.xhrSettings = null;\r\n        this.multiFile = null;\r\n        this.linkFile = null;\r\n        this.data = null;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Static method for creating object URL using URL API and setting it as image 'src' attribute.\r\n * If URL API is not supported (usually on old browsers) it falls back to creating Base64 encoded url using FileReader.\r\n *\r\n * @method Phaser.Loader.File.createObjectURL\r\n * @static\r\n * @since 3.7.0\r\n * \r\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be set to object URL.\r\n * @param {Blob} blob - A Blob object to create an object URL for.\r\n * @param {string} defaultType - Default mime type used if blob type is not available.\r\n */\r\nFile.createObjectURL = function (image, blob, defaultType)\r\n{\r\n    if (typeof URL === 'function')\r\n    {\r\n        image.src = URL.createObjectURL(blob);\r\n    }\r\n    else\r\n    {\r\n        var reader = new FileReader();\r\n\r\n        reader.onload = function ()\r\n        {\r\n            image.removeAttribute('crossOrigin');\r\n            image.src = 'data:' + (blob.type || defaultType) + ';base64,' + reader.result.split(',')[1];\r\n        };\r\n\r\n        reader.onerror = image.onerror;\r\n\r\n        reader.readAsDataURL(blob);\r\n    }\r\n};\r\n\r\n/**\r\n * Static method for releasing an existing object URL which was previously created\r\n * by calling {@link File#createObjectURL} method.\r\n *\r\n * @method Phaser.Loader.File.revokeObjectURL\r\n * @static\r\n * @since 3.7.0\r\n * \r\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be revoked.\r\n */\r\nFile.revokeObjectURL = function (image)\r\n{\r\n    if (typeof URL === 'function')\r\n    {\r\n        URL.revokeObjectURL(image.src);\r\n    }\r\n};\r\n\r\nmodule.exports = File;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvRmlsZS5qcz9mNDkyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQywwREFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsa0VBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGFBQWEsbUJBQU8sQ0FBQyw0REFBVTtBQUMvQix1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBb0I7QUFDbkQsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWE7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0R0FBNEc7QUFDNUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUIsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZUFBZTtBQUM5QixlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsa0JBQWtCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRVUkwgPSByZXF1aXJlKCcuL0dldFVSTCcpO1xyXG52YXIgTWVyZ2VYSFJTZXR0aW5ncyA9IHJlcXVpcmUoJy4vTWVyZ2VYSFJTZXR0aW5ncycpO1xyXG52YXIgWEhSTG9hZGVyID0gcmVxdWlyZSgnLi9YSFJMb2FkZXInKTtcclxudmFyIFhIUlNldHRpbmdzID0gcmVxdWlyZSgnLi9YSFJTZXR0aW5ncycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIGJhc2UgRmlsZSBjbGFzcyB1c2VkIGJ5IGFsbCBGaWxlIFR5cGVzIHRoYXQgdGhlIExvYWRlciBjYW4gc3VwcG9ydC5cclxuICogWW91IHNob3VsZG4ndCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBGaWxlIGRpcmVjdGx5LCBidXQgc2hvdWxkIGV4dGVuZCBpdCB3aXRoIHlvdXIgb3duIGNsYXNzLCBzZXR0aW5nIGEgY3VzdG9tIHR5cGUgYW5kIHByb2Nlc3NpbmcgbWV0aG9kcy5cclxuICpcclxuICogQGNsYXNzIEZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBUaGUgTG9hZGVyIHRoYXQgaXMgZ29pbmcgdG8gbG9hZCB0aGlzIEZpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlQ29uZmlnfSBmaWxlQ29uZmlnIC0gVGhlIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIGFzIGNyZWF0ZWQgYnkgdGhlIGZpbGUgdHlwZS5cclxuICovXHJcbnZhciBGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZpbGUgKGxvYWRlciwgZmlsZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgZ29pbmcgdG8gbG9hZCB0aGlzIGZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjbG9hZGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQ2FjaGUsIG9yIFRleHR1cmUgTWFuYWdlciwgdGhhdCBpcyBnb2luZyB0byBzdG9yZSB0aGlzIGZpbGUgaWYgaXQgbG9hZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5DYWNoZS5CYXNlQ2FjaGV8UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyKX1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlID0gR2V0RmFzdFZhbHVlKGZpbGVDb25maWcsICdjYWNoZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpbGUgdHlwZSBzdHJpbmcgKGltYWdlLCBqc29uLCBldGMpIGZvciBzb3J0aW5nIHdpdGhpbiB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAndHlwZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVW5pcXVlIGNhY2hlIGtleSAodW5pcXVlIHdpdGhpbiBpdHMgZmlsZSB0eXBlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXkgPSBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2tleScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRLZXkgPSB0aGlzLmtleTtcclxuXHJcbiAgICAgICAgaWYgKGxvYWRlci5wcmVmaXggJiYgbG9hZGVyLnByZWZpeCAhPT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmtleSA9IGxvYWRlci5wcmVmaXggKyBsb2FkS2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUgfHwgIXRoaXMua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBjYWxsaW5nIFxcJ0xvYWRlci4nICsgdGhpcy50eXBlICsgJ1xcJyBpbnZhbGlkIGtleSBwcm92aWRlZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBVUkwgb2YgdGhlIGZpbGUsIG5vdCBpbmNsdWRpbmcgYmFzZVVSTC5cclxuICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IGhhcyBMb2FkZXIucGF0aCBwcmVwZW5kZWQgdG8gaXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjdXJsXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVybCA9IEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAndXJsJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVybCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51cmwgPSBsb2FkZXIucGF0aCArIGxvYWRLZXkgKyAnLicgKyBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2V4dGVuc2lvbicsICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mKHRoaXMudXJsKSAhPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXJsID0gbG9hZGVyLnBhdGggKyB0aGlzLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaW5hbCBVUkwgdGhpcyBmaWxlIHdpbGwgbG9hZCBmcm9tLCBpbmNsdWRpbmcgYmFzZVVSTCBhbmQgcGF0aC5cclxuICAgICAgICAgKiBTZXQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBMb2FkZXIgY2FsbHMgJ2xvYWQnIG9uIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNzcmNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3JjID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtZXJnZWQgWEhSU2V0dGluZ3MgZm9yIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSN4aHJTZXR0aW5nc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueGhyU2V0dGluZ3MgPSBYSFJTZXR0aW5ncyhHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ3Jlc3BvbnNlVHlwZScsIHVuZGVmaW5lZCkpO1xyXG5cclxuICAgICAgICBpZiAoR2V0RmFzdFZhbHVlKGZpbGVDb25maWcsICd4aHJTZXR0aW5ncycsIGZhbHNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueGhyU2V0dGluZ3MgPSBNZXJnZVhIUlNldHRpbmdzKHRoaXMueGhyU2V0dGluZ3MsIEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAneGhyU2V0dGluZ3MnLCB7fSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNlIChhcyBjcmVhdGVkIGJ5IFhIUiBMb2FkZXIpIHRoYXQgaXMgbG9hZGluZyB0aGlzIEZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjeGhyTG9hZGVyXHJcbiAgICAgICAgICogQHR5cGUgez9YTUxIdHRwUmVxdWVzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnhockxvYWRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWxlLiBPbmUgb2YgdGhlIEZJTEVfQ09OU1QgdmFsdWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI3N0YXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICh0eXBlb2YodGhpcy51cmwpID09PSAnZnVuY3Rpb24nKSA/IENPTlNULkZJTEVfUE9QVUxBVEVEIDogQ09OU1QuRklMRV9QRU5ESU5HO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGlzIGZpbGUuXHJcbiAgICAgICAgICogU2V0IGJ5IG9uUHJvZ3Jlc3MgYW5kIG9ubHkgaWYgbG9hZGluZyB2aWEgWEhSLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2J5dGVzVG90YWxcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ5dGVzVG90YWwgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVcGRhdGVkIGFzIHRoZSBmaWxlIGxvYWRzLlxyXG4gICAgICAgICAqIE9ubHkgc2V0IGlmIGxvYWRpbmcgdmlhIFhIUi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNieXRlc0xvYWRlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ5dGVzTG9hZGVkID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcGVyY2VudGFnZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgbXVjaCBvZiB0aGlzIGZpbGUgaGFzIGxvYWRlZC5cclxuICAgICAgICAgKiBPbmx5IHNldCBpZiBsb2FkaW5nIHZpYSBYSFIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjcGVyY2VudENvbXBsZXRlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGVyY2VudENvbXBsZXRlID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZvciBDT1JzIGJhc2VkIGxvYWRpbmcuXHJcbiAgICAgICAgICogSWYgdGhpcyBpcyB1bmRlZmluZWQgdGhlbiB0aGUgRmlsZSB3aWxsIGNoZWNrIEJhc2VMb2FkZXIuY3Jvc3NPcmlnaW4gYW5kIHVzZSB0aGF0IChpZiBzZXQpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY3Jvc3NPcmlnaW5cclxuICAgICAgICAgKiBAdHlwZSB7KHN0cmluZ3x1bmRlZmluZWQpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9jZXNzZWQgZmlsZSBkYXRhLCBzdG9yZWQgaGVyZSBhZnRlciB0aGUgZmlsZSBoYXMgbG9hZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7Kn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgY29uZmlnIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGZpbGUgdHlwZXMgdG8gc3RvcmUgdHJhbnNpdGlvbmFsIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUgeyp9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2NvbmZpZycsIHt9KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBpcyBhIG11bHRpcGFydCBmaWxlLCBpLmUuIGFuIGF0bGFzIGFuZCBpdHMganNvbiB0b2dldGhlciwgdGhlbiB0aGlzIGlzIGEgcmVmZXJlbmNlXHJcbiAgICAgICAgICogdG8gdGhlIHBhcmVudCBNdWx0aUZpbGUuIFNldCBhbmQgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBMb2FkZXIgb3Igc3BlY2lmaWMgZmlsZSB0eXBlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNtdWx0aUZpbGVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5Mb2FkZXIuTXVsdGlGaWxlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXVsdGlGaWxlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb2VzIHRoaXMgZmlsZSBoYXZlIGFuIGFzc29jaWF0ZWQgbGlua2VkIGZpbGU/IFN1Y2ggYXMgYW4gaW1hZ2UgYW5kIGEgbm9ybWFsIG1hcC5cclxuICAgICAgICAgKiBBdGxhc2VzIGFuZCBCaXRtYXAgRm9udHMgdXNlIHRoZSBtdWx0aUZpbGUsIGJlY2F1c2UgdGhvc2UgZmlsZXMgbmVlZCBsb2FkaW5nIHRvZ2V0aGVyIGJ1dCBhcmVuJ3RcclxuICAgICAgICAgKiBhY3R1YWxseSBib3VuZCBieSBkYXRhLCB3aGVyZS1hcyBhIGxpbmtGaWxlIGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2xpbmtGaWxlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuTG9hZGVyLkZpbGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saW5rRmlsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5rcyB0aGlzIEZpbGUgd2l0aCBhbm90aGVyLCBzbyB0aGV5IGRlcGVuZCB1cG9uIGVhY2ggb3RoZXIgZm9yIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjc2V0TGlua1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGVCIC0gVGhlIGZpbGUgdG8gbGluayB0byB0aGlzIG9uZS5cclxuICAgICAqL1xyXG4gICAgc2V0TGluazogZnVuY3Rpb24gKGZpbGVCKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGlua0ZpbGUgPSBmaWxlQjtcclxuXHJcbiAgICAgICAgZmlsZUIubGlua0ZpbGUgPSB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgWEhSTG9hZGVyIGluc3RhbmNlIHRoaXMgZmlsZSBpcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNyZXNldFhIUlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0WEhSOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnhockxvYWRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueGhyTG9hZGVyLm9ubG9hZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIub25lcnJvciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIub25wcm9ncmVzcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBMb2FkZXIsIHN0YXJ0cyB0aGUgYWN0dWFsIGZpbGUgZG93bmxvYWRpbmcuXHJcbiAgICAgKiBEdXJpbmcgdGhlIGxvYWQgdGhlIG1ldGhvZHMgb25Mb2FkLCBvbkVycm9yIGFuZCBvblByb2dyZXNzIGFyZSBjYWxsZWQsIGJhc2VkIG9uIHRoZSBYSFIgZXZlbnRzLlxyXG4gICAgICogWW91IHNob3VsZG4ndCBub3JtYWxseSBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCBpdCdzIG1lYW50IHRvIGJlIGludm9rZWQgYnkgdGhlIExvYWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNsb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuRklMRV9QT1BVTEFURUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpbiBhIEpTT05GaWxlIGlmIHRoZXkndmUgcHJvdmlkZWQgYSBKU09OIG9iamVjdCBpbnN0ZWFkIG9mIGEgVVJMXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNyYyA9IEdldFVSTCh0aGlzLCB0aGlzLmxvYWRlci5iYXNlVVJMKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNyYy5pbmRleE9mKCdkYXRhOicpID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xvY2FsIGRhdGEgVVJJcyBhcmUgbm90IHN1cHBvcnRlZDogJyArIHRoaXMua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGUgY3JlYXRpb24gb2YgdGhpcyBYSFJMb2FkZXIgc3RhcnRzIHRoZSBsb2FkIHByb2Nlc3MgZ29pbmcuXHJcbiAgICAgICAgICAgICAgICAvLyAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGxvYWQgb3V0Y29tZTpcclxuICAgICAgICAgICAgICAgIC8vICBcclxuICAgICAgICAgICAgICAgIC8vIHhoci5vbmxvYWQgPSB0aGlzLm9uTG9hZFxyXG4gICAgICAgICAgICAgICAgLy8geGhyLm9uZXJyb3IgPSB0aGlzLm9uRXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIHhoci5vbnByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIgPSBYSFJMb2FkZXIodGhpcywgdGhpcy5sb2FkZXIueGhyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZmlsZSBmaW5pc2hlcyBsb2FkaW5nLCBpcyBzZW50IGEgRE9NIFByb2dyZXNzRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Mb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHIgLSBUaGUgWE1MSHR0cFJlcXVlc3QgdGhhdCBjYXVzZWQgdGhpcyBvbmxvYWQgZXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50IHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGlzIGxvYWQuXHJcbiAgICAgKi9cclxuICAgIG9uTG9hZDogZnVuY3Rpb24gKHhociwgZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxvY2FsRmlsZU9rID0gKCh4aHIucmVzcG9uc2VVUkwgJiYgeGhyLnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCAmJiBldmVudC50YXJnZXQuc3RhdHVzID09PSAwKSk7XHJcblxyXG4gICAgICAgIHZhciBzdWNjZXNzID0gIShldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnN0YXR1cyAhPT0gMjAwKSB8fCBsb2NhbEZpbGVPaztcclxuXHJcbiAgICAgICAgLy8gIEhhbmRsZSBIVFRQIHN0YXR1cyBjb2RlcyBvZiA0eHggYW5kIDV4eCBhcyBlcnJvcnMsIGV2ZW4gaWYgeGhyLm9uZXJyb3Igd2FzIG5vdCBjYWxsZWQuXHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPj0gNDAwICYmIHhoci5zdGF0dXMgPD0gNTk5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldFhIUigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5uZXh0RmlsZSh0aGlzLCBzdWNjZXNzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaWYgdGhlIGZpbGUgZXJyb3JzIHdoaWxlIGxvYWRpbmcsIGlzIHNlbnQgYSBET00gUHJvZ3Jlc3NFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNvbkVycm9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHIgLSBUaGUgWE1MSHR0cFJlcXVlc3QgdGhhdCBjYXVzZWQgdGhpcyBvbmxvYWQgZXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50IHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGlzIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRYSFIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIubmV4dEZpbGUodGhpcywgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBkdXJpbmcgdGhlIGZpbGUgbG9hZCBwcm9ncmVzcy4gSXMgc2VudCBhIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI29uUHJvZ3Jlc3NcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX1BST0dSRVNTXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICovXHJcbiAgICBvblByb2dyZXNzOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJ5dGVzTG9hZGVkID0gZXZlbnQubG9hZGVkO1xyXG4gICAgICAgICAgICB0aGlzLmJ5dGVzVG90YWwgPSBldmVudC50b3RhbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGVyY2VudENvbXBsZXRlID0gTWF0aC5taW4oKHRoaXMuYnl0ZXNMb2FkZWQgLyB0aGlzLmJ5dGVzVG90YWwpLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfUFJPR1JFU1MsIHRoaXMsIHRoaXMucGVyY2VudENvbXBsZXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXN1YWxseSBvdmVycmlkZGVuIGJ5IHRoZSBGaWxlVHlwZXMgYW5kIGlzIGNhbGxlZCBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEsIGZvciBleGFtcGxlIGEgSlNPTiBmaWxlIHdpbGwgcGFyc2UgaXRzZWxmIGR1cmluZyB0aGlzIHN0YWdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIEZpbGUgaGFzIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxyXG4gICAgICogQ2hlY2tzIG9uIHRoZSBzdGF0ZSBvZiBpdHMgbXVsdGlmaWxlLCBpZiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Qcm9jZXNzQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3NDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9DT01QTEVURTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlGaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aUZpbGUub25GaWxlQ29tcGxldGUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5maWxlUHJvY2Vzc0NvbXBsZXRlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBGaWxlIGhhcyBjb21wbGV0ZWQgcHJvY2Vzc2luZyBidXQgaXQgZ2VuZXJhdGVkIGFuIGVycm9yLlxyXG4gICAgICogQ2hlY2tzIG9uIHRoZSBzdGF0ZSBvZiBpdHMgbXVsdGlmaWxlLCBpZiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Qcm9jZXNzRXJyb3JcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3NFcnJvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9FUlJPUkVEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aUZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpRmlsZS5vbkZpbGVGYWlsZWQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5maWxlUHJvY2Vzc0NvbXBsZXRlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhIGtleSBtYXRjaGluZyB0aGUgb25lIHVzZWQgYnkgdGhpcyBmaWxlIGV4aXN0cyBpbiB0aGUgdGFyZ2V0IENhY2hlIG9yIG5vdC5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIExvYWRlclBsdWdpbiB0byBkZWNpZGUgaWYgdGhlIGZpbGUgY2FuIGJlIHNhZmVseVxyXG4gICAgICogbG9hZGVkIG9yIHdpbGwgY29uZmxpY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjaGFzQ2FjaGVDb25mbGljdFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGFkZGluZyB0aGlzIGZpbGUgd2lsbCBjYXVzZSBhIGNvbmZsaWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzQ2FjaGVDb25mbGljdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuY2FjaGUgJiYgdGhpcy5jYWNoZS5leGlzdHModGhpcy5rZXkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgb2Z0ZW4gb3ZlcnJpZGRlbiBieSBzcGVjaWZpYyBmaWxlIHR5cGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQodGhpcy5rZXksIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIG9uY2UgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQgdG8gaXRzIGNhY2hlIGFuZCBpcyBub3cgcmVhZHkgZm9yIGRlbGV0aW9uIGZyb20gdGhlIExvYWRlci5cclxuICAgICAqIEl0IHdpbGwgZW1pdCBhIGBmaWxlY29tcGxldGVgIGV2ZW50IGZyb20gdGhlIExvYWRlclBsdWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNwZW5kaW5nRGVzdHJveVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfQ09NUExFVEVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX0tFWV9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIHBlbmRpbmdEZXN0cm95OiBmdW5jdGlvbiAoZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7IGRhdGEgPSB0aGlzLmRhdGE7IH1cclxuXHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMua2V5O1xyXG4gICAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5lbWl0KEV2ZW50cy5GSUxFX0NPTVBMRVRFLCBrZXksIHR5cGUsIGRhdGEpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfS0VZX0NPTVBMRVRFICsgdHlwZSArICctJyArIGtleSwga2V5LCB0eXBlLCBkYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIuZmxhZ0ZvclJlbW92YWwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSB0aGlzIEZpbGUgYW5kIGFueSByZWZlcmVuY2VzIGl0IGhvbGRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhY2hlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnhoclNldHRpbmdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm11bHRpRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5saW5rRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIG9iamVjdCBVUkwgdXNpbmcgVVJMIEFQSSBhbmQgc2V0dGluZyBpdCBhcyBpbWFnZSAnc3JjJyBhdHRyaWJ1dGUuXHJcbiAqIElmIFVSTCBBUEkgaXMgbm90IHN1cHBvcnRlZCAodXN1YWxseSBvbiBvbGQgYnJvd3NlcnMpIGl0IGZhbGxzIGJhY2sgdG8gY3JlYXRpbmcgQmFzZTY0IGVuY29kZWQgdXJsIHVzaW5nIEZpbGVSZWFkZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlLmNyZWF0ZU9iamVjdFVSTFxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fSBpbWFnZSAtIEltYWdlIG9iamVjdCB3aGljaCAnc3JjJyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldCB0byBvYmplY3QgVVJMLlxyXG4gKiBAcGFyYW0ge0Jsb2J9IGJsb2IgLSBBIEJsb2Igb2JqZWN0IHRvIGNyZWF0ZSBhbiBvYmplY3QgVVJMIGZvci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRUeXBlIC0gRGVmYXVsdCBtaW1lIHR5cGUgdXNlZCBpZiBibG9iIHR5cGUgaXMgbm90IGF2YWlsYWJsZS5cclxuICovXHJcbkZpbGUuY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gKGltYWdlLCBibG9iLCBkZWZhdWx0VHlwZSlcclxue1xyXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgaW1hZ2Uuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2Nyb3NzT3JpZ2luJyk7XHJcbiAgICAgICAgICAgIGltYWdlLnNyYyA9ICdkYXRhOicgKyAoYmxvYi50eXBlIHx8IGRlZmF1bHRUeXBlKSArICc7YmFzZTY0LCcgKyByZWFkZXIucmVzdWx0LnNwbGl0KCcsJylbMV07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBpbWFnZS5vbmVycm9yO1xyXG5cclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdGF0aWMgbWV0aG9kIGZvciByZWxlYXNpbmcgYW4gZXhpc3Rpbmcgb2JqZWN0IFVSTCB3aGljaCB3YXMgcHJldmlvdXNseSBjcmVhdGVkXHJcbiAqIGJ5IGNhbGxpbmcge0BsaW5rIEZpbGUjY3JlYXRlT2JqZWN0VVJMfSBtZXRob2QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlLnJldm9rZU9iamVjdFVSTFxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fSBpbWFnZSAtIEltYWdlIG9iamVjdCB3aGljaCAnc3JjJyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHJldm9rZWQuXHJcbiAqL1xyXG5GaWxlLnJldm9rZU9iamVjdFVSTCA9IGZ1bmN0aW9uIChpbWFnZSlcclxue1xyXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZS5zcmMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/File.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/FileTypesManager.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/loader/FileTypesManager.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar types = {};\r\n\r\n/**\r\n * @namespace Phaser.Loader.FileTypesManager\r\n */\r\n\r\nvar FileTypesManager = {\r\n\r\n    /**\r\n     * Static method called when a LoaderPlugin is created.\r\n     * \r\n     * Loops through the local types object and injects all of them as\r\n     * properties into the LoaderPlugin instance.\r\n     *\r\n     * @method Phaser.Loader.FileTypesManager.install\r\n     * @since 3.0.0\r\n     * \r\n     * @param {Phaser.Loader.LoaderPlugin} loader - The LoaderPlugin to install the types into.\r\n     */\r\n    install: function (loader)\r\n    {\r\n        for (var key in types)\r\n        {\r\n            loader[key] = types[key];\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Static method called directly by the File Types.\r\n     * \r\n     * The key is a reference to the function used to load the files via the Loader, i.e. `image`.\r\n     *\r\n     * @method Phaser.Loader.FileTypesManager.register\r\n     * @since 3.0.0\r\n     * \r\n     * @param {string} key - The key that will be used as the method name in the LoaderPlugin.\r\n     * @param {function} factoryFunction - The function that will be called when LoaderPlugin.key is invoked.\r\n     */\r\n    register: function (key, factoryFunction)\r\n    {\r\n        types[key] = factoryFunction;\r\n    },\r\n\r\n    /**\r\n     * Removed all associated file types.\r\n     *\r\n     * @method Phaser.Loader.FileTypesManager.destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        types = {};\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = FileTypesManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvRmlsZVR5cGVzTWFuYWdlci5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9GaWxlVHlwZXNNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgdHlwZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzTWFuYWdlclxyXG4gKi9cclxuXHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhdGljIG1ldGhvZCBjYWxsZWQgd2hlbiBhIExvYWRlclBsdWdpbiBpcyBjcmVhdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBMb29wcyB0aHJvdWdoIHRoZSBsb2NhbCB0eXBlcyBvYmplY3QgYW5kIGluamVjdHMgYWxsIG9mIHRoZW0gYXNcclxuICAgICAqIHByb3BlcnRpZXMgaW50byB0aGUgTG9hZGVyUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNNYW5hZ2VyLmluc3RhbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBUaGUgTG9hZGVyUGx1Z2luIHRvIGluc3RhbGwgdGhlIHR5cGVzIGludG8uXHJcbiAgICAgKi9cclxuICAgIGluc3RhbGw6IGZ1bmN0aW9uIChsb2FkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHR5cGVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGVyW2tleV0gPSB0eXBlc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgRmlsZSBUeXBlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGtleSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gdXNlZCB0byBsb2FkIHRoZSBmaWxlcyB2aWEgdGhlIExvYWRlciwgaS5lLiBgaW1hZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIG1ldGhvZCBuYW1lIGluIHRoZSBMb2FkZXJQbHVnaW4uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmYWN0b3J5RnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIExvYWRlclBsdWdpbi5rZXkgaXMgaW52b2tlZC5cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChrZXksIGZhY3RvcnlGdW5jdGlvbilcclxuICAgIHtcclxuICAgICAgICB0eXBlc1trZXldID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZWQgYWxsIGFzc29jaWF0ZWQgZmlsZSB0eXBlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzTWFuYWdlci5kZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0eXBlcyA9IHt9O1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmlsZVR5cGVzTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/FileTypesManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/GetURL.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/loader/GetURL.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given a File and a baseURL value this returns the URL the File will use to download from.\r\n *\r\n * @function Phaser.Loader.GetURL\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File object.\r\n * @param {string} baseURL - A default base URL.\r\n *\r\n * @return {string} The URL the File will use.\r\n */\r\nvar GetURL = function (file, baseURL)\r\n{\r\n    if (!file.url)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    if (file.url.match(/^(?:blob:|data:|http:\\/\\/|https:\\/\\/|\\/\\/)/))\r\n    {\r\n        return file.url;\r\n    }\r\n    else\r\n    {\r\n        return baseURL + file.url;\r\n    }\r\n};\r\n\r\nmodule.exports = GetURL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvR2V0VVJMLmpzP2U3ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvR2V0VVJMLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogR2l2ZW4gYSBGaWxlIGFuZCBhIGJhc2VVUkwgdmFsdWUgdGhpcyByZXR1cm5zIHRoZSBVUkwgdGhlIEZpbGUgd2lsbCB1c2UgdG8gZG93bmxvYWQgZnJvbS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuR2V0VVJMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgLSBBIGRlZmF1bHQgYmFzZSBVUkwuXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB0aGUgRmlsZSB3aWxsIHVzZS5cclxuICovXHJcbnZhciBHZXRVUkwgPSBmdW5jdGlvbiAoZmlsZSwgYmFzZVVSTClcclxue1xyXG4gICAgaWYgKCFmaWxlLnVybClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbGUudXJsLm1hdGNoKC9eKD86YmxvYjp8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfFxcL1xcLykvKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmlsZS51cmw7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VVUkwgKyBmaWxlLnVybDtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VVJMO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/GetURL.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/LoaderPlugin.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/loader/LoaderPlugin.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar CustomSet = __webpack_require__(/*! ../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ./FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Loader handles loading all external content such as Images, Sounds, Texture Atlases and data files.\r\n * You typically interact with it via `this.load` in your Scene. Scenes can have a `preload` method, which is always\r\n * called before the Scenes `create` method, allowing you to preload assets that the Scene may need.\r\n *\r\n * If you call any `this.load` methods from outside of `Scene.preload` then you need to start the Loader going\r\n * yourself by calling `Loader.start()`. It's only automatically started during the Scene preload.\r\n *\r\n * The Loader uses a combination of tag loading (eg. Audio elements) and XHR and provides progress and completion events.\r\n * Files are loaded in parallel by default. The amount of concurrent connections can be controlled in your Game Configuration.\r\n *\r\n * Once the Loader has started loading you are still able to add files to it. These can be injected as a result of a loader\r\n * event, the type of file being loaded (such as a pack file) or other external events. As long as the Loader hasn't finished\r\n * simply adding a new file to it, while running, will ensure it's added into the current queue.\r\n *\r\n * Every Scene has its own instance of the Loader and they are bound to the Scene in which they are created. However,\r\n * assets loaded by the Loader are placed into global game-level caches. For example, loading an XML file will place that\r\n * file inside `Game.cache.xml`, which is accessible from every Scene in your game, no matter who was responsible\r\n * for loading it. The same is true of Textures. A texture loaded in one Scene is instantly available to all other Scenes\r\n * in your game.\r\n *\r\n * The Loader works by using custom File Types. These are stored in the FileTypesManager, which injects them into the Loader\r\n * when it's instantiated. You can create your own custom file types by extending either the File or MultiFile classes.\r\n * See those files for more details.\r\n *\r\n * @class LoaderPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which owns this Loader instance.\r\n */\r\nvar LoaderPlugin = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function LoaderPlugin (scene)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        var gameConfig = scene.sys.game.config;\r\n        var sceneConfig = scene.sys.settings.loader;\r\n\r\n        /**\r\n         * The Scene which owns this Loader instance.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene Systems.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * A reference to the global Cache Manager.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#cacheManager\r\n         * @type {Phaser.Cache.CacheManager}\r\n         * @since 3.7.0\r\n         */\r\n        this.cacheManager = scene.sys.cache;\r\n\r\n        /**\r\n         * A reference to the global Texture Manager.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#textureManager\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.7.0\r\n         */\r\n        this.textureManager = scene.sys.textures;\r\n\r\n        /**\r\n         * A reference to the global Scene Manager.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#sceneManager\r\n         * @type {Phaser.Scenes.SceneManager}\r\n         * @protected\r\n         * @since 3.16.0\r\n         */\r\n        this.sceneManager = scene.sys.game.scene;\r\n\r\n        //  Inject the available filetypes into the Loader\r\n        FileTypesManager.install(this);\r\n\r\n        /**\r\n         * An optional prefix that is automatically prepended to the start of every file key.\r\n         * If prefix was `MENU.` and you load an image with the key 'Background' the resulting key would be `MENU.Background`.\r\n         * You can set this directly, or call `Loader.setPrefix()`. It will then affect every file added to the Loader\r\n         * from that point on. It does _not_ change any file already in the load queue.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#prefix\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.7.0\r\n         */\r\n        this.prefix = '';\r\n\r\n        /**\r\n         * The value of `path`, if set, is placed before any _relative_ file path given. For example:\r\n         *\r\n         * ```javascript\r\n         * this.load.path = \"images/sprites/\";\r\n         * this.load.image(\"ball\", \"ball.png\");\r\n         * this.load.image(\"tree\", \"level1/oaktree.png\");\r\n         * this.load.image(\"boom\", \"http://server.com/explode.png\");\r\n         * ```\r\n         *\r\n         * Would load the `ball` file from `images/sprites/ball.png` and the tree from\r\n         * `images/sprites/level1/oaktree.png` but the file `boom` would load from the URL\r\n         * given as it's an absolute URL.\r\n         *\r\n         * Please note that the path is added before the filename but *after* the baseURL (if set.)\r\n         *\r\n         * If you set this property directly then it _must_ end with a \"/\". Alternatively, call `setPath()` and it'll do it for you.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#path\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.path = '';\r\n\r\n        /**\r\n         * If you want to append a URL before the path of any asset you can set this here.\r\n         * \r\n         * Useful if allowing the asset base url to be configured outside of the game code.\r\n         * \r\n         * If you set this property directly then it _must_ end with a \"/\". Alternatively, call `setBaseURL()` and it'll do it for you.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#baseURL\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.baseURL = '';\r\n\r\n        this.setBaseURL(GetFastValue(sceneConfig, 'baseURL', gameConfig.loaderBaseURL));\r\n\r\n        this.setPath(GetFastValue(sceneConfig, 'path', gameConfig.loaderPath));\r\n\r\n        this.setPrefix(GetFastValue(sceneConfig, 'prefix', gameConfig.loaderPrefix));\r\n\r\n        /**\r\n         * The number of concurrent / parallel resources to try and fetch at once.\r\n         *\r\n         * Old browsers limit 6 requests per domain; modern ones, especially those with HTTP/2 don't limit it at all.\r\n         *\r\n         * The default is 32 but you can change this in your Game Config, or by changing this property before the Loader starts.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#maxParallelDownloads\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxParallelDownloads = GetFastValue(sceneConfig, 'maxParallelDownloads', gameConfig.loaderMaxParallelDownloads);\r\n\r\n        /**\r\n         * xhr specific global settings (can be overridden on a per-file basis)\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#xhr\r\n         * @type {Phaser.Types.Loader.XHRSettingsObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.xhr = XHRSettings(\r\n            GetFastValue(sceneConfig, 'responseType', gameConfig.loaderResponseType),\r\n            GetFastValue(sceneConfig, 'async', gameConfig.loaderAsync),\r\n            GetFastValue(sceneConfig, 'user', gameConfig.loaderUser),\r\n            GetFastValue(sceneConfig, 'password', gameConfig.loaderPassword),\r\n            GetFastValue(sceneConfig, 'timeout', gameConfig.loaderTimeout)\r\n        );\r\n\r\n        /**\r\n         * The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#crossOrigin\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.crossOrigin = GetFastValue(sceneConfig, 'crossOrigin', gameConfig.loaderCrossOrigin);\r\n\r\n        /**\r\n         * The total number of files to load. It may not always be accurate because you may add to the Loader during the process\r\n         * of loading, especially if you load a Pack File. Therefore this value can change, but in most cases remains static.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#totalToLoad\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalToLoad = 0;\r\n\r\n        /**\r\n         * The progress of the current load queue, as a float value between 0 and 1.\r\n         * This is updated automatically as files complete loading.\r\n         * Note that it is possible for this value to go down again if you add content to the current load queue during a load.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#progress\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Files are placed in this Set when they're added to the Loader via `addFile`.\r\n         * \r\n         * They are moved to the `inflight` Set when they start loading, and assuming a successful\r\n         * load, to the `queue` Set for further processing.\r\n         *\r\n         * By the end of the load process this Set will be empty.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#list\r\n         * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n         * @since 3.0.0\r\n         */\r\n        this.list = new CustomSet();\r\n\r\n        /**\r\n         * Files are stored in this Set while they're in the process of being loaded.\r\n         * \r\n         * Upon a successful load they are moved to the `queue` Set.\r\n         * \r\n         * By the end of the load process this Set will be empty.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#inflight\r\n         * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n         * @since 3.0.0\r\n         */\r\n        this.inflight = new CustomSet();\r\n\r\n        /**\r\n         * Files are stored in this Set while they're being processed.\r\n         * \r\n         * If the process is successful they are moved to their final destination, which could be\r\n         * a Cache or the Texture Manager.\r\n         * \r\n         * At the end of the load process this Set will be empty.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#queue\r\n         * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n         * @since 3.0.0\r\n         */\r\n        this.queue = new CustomSet();\r\n\r\n        /**\r\n         * A temporary Set in which files are stored after processing,\r\n         * awaiting destruction at the end of the load process.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#_deleteQueue\r\n         * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n         * @private\r\n         * @since 3.7.0\r\n         */\r\n        this._deleteQueue = new CustomSet();\r\n\r\n        /**\r\n         * The total number of files that failed to load during the most recent load.\r\n         * This value is reset when you call `Loader.start`.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#totalFailed\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.7.0\r\n         */\r\n        this.totalFailed = 0;\r\n\r\n        /**\r\n         * The total number of files that successfully loaded during the most recent load.\r\n         * This value is reset when you call `Loader.start`.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#totalComplete\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.7.0\r\n         */\r\n        this.totalComplete = 0;\r\n\r\n        /**\r\n         * The current state of the Loader.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#state\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.state = CONST.LOADER_IDLE;\r\n\r\n        /**\r\n         * The current index being used by multi-file loaders to avoid key clashes.\r\n         *\r\n         * @name Phaser.Loader.LoaderPlugin#multiKeyIndex\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this.multiKeyIndex = 0;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.pluginStart, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#pluginStart\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    pluginStart: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * If you want to append a URL before the path of any asset you can set this here.\r\n     * \r\n     * Useful if allowing the asset base url to be configured outside of the game code.\r\n     * \r\n     * Once a base URL is set it will affect every file loaded by the Loader from that point on. It does _not_ change any\r\n     * file _already_ being loaded. To reset it, call this method with no arguments.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#setBaseURL\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [url] - The URL to use. Leave empty to reset.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n     */\r\n    setBaseURL: function (url)\r\n    {\r\n        if (url === undefined) { url = ''; }\r\n\r\n        if (url !== '' && url.substr(-1) !== '/')\r\n        {\r\n            url = url.concat('/');\r\n        }\r\n\r\n        this.baseURL = url;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The value of `path`, if set, is placed before any _relative_ file path given. For example:\r\n     *\r\n     * ```javascript\r\n     * this.load.setPath(\"images/sprites/\");\r\n     * this.load.image(\"ball\", \"ball.png\");\r\n     * this.load.image(\"tree\", \"level1/oaktree.png\");\r\n     * this.load.image(\"boom\", \"http://server.com/explode.png\");\r\n     * ```\r\n     *\r\n     * Would load the `ball` file from `images/sprites/ball.png` and the tree from\r\n     * `images/sprites/level1/oaktree.png` but the file `boom` would load from the URL\r\n     * given as it's an absolute URL.\r\n     *\r\n     * Please note that the path is added before the filename but *after* the baseURL (if set.)\r\n     * \r\n     * Once a path is set it will then affect every file added to the Loader from that point on. It does _not_ change any\r\n     * file _already_ in the load queue. To reset it, call this method with no arguments.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#setPath\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [path] - The path to use. Leave empty to reset.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n     */\r\n    setPath: function (path)\r\n    {\r\n        if (path === undefined) { path = ''; }\r\n\r\n        if (path !== '' && path.substr(-1) !== '/')\r\n        {\r\n            path = path.concat('/');\r\n        }\r\n\r\n        this.path = path;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * An optional prefix that is automatically prepended to the start of every file key.\r\n     * \r\n     * If prefix was `MENU.` and you load an image with the key 'Background' the resulting key would be `MENU.Background`.\r\n     * \r\n     * Once a prefix is set it will then affect every file added to the Loader from that point on. It does _not_ change any\r\n     * file _already_ in the load queue. To reset it, call this method with no arguments.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#setPrefix\r\n     * @since 3.7.0\r\n     *\r\n     * @param {string} [prefix] - The prefix to use. Leave empty to reset.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n     */\r\n    setPrefix: function (prefix)\r\n    {\r\n        if (prefix === undefined) { prefix = ''; }\r\n\r\n        this.prefix = prefix;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Cross Origin Resource Sharing value used when loading files.\r\n     * \r\n     * Files can override this value on a per-file basis by specifying an alternative `crossOrigin` value in their file config.\r\n     * \r\n     * Once CORs is set it will then affect every file loaded by the Loader from that point on, as long as they don't have\r\n     * their own CORs setting. To reset it, call this method with no arguments.\r\n     *\r\n     * For more details about CORs see https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#setCORS\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [crossOrigin] - The value to use for the `crossOrigin` property in the load request.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n     */\r\n    setCORS: function (crossOrigin)\r\n    {\r\n        this.crossOrigin = crossOrigin;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a file, or array of files, into the load queue.\r\n     *\r\n     * The file must be an instance of `Phaser.Loader.File`, or a class that extends it. The Loader will check that the key\r\n     * used by the file won't conflict with any other key either in the loader, the inflight queue or the target cache.\r\n     * If allowed it will then add the file into the pending list, read for the load to start. Or, if the load has already\r\n     * started, ready for the next batch of files to be pulled from the list to the inflight queue.\r\n     *\r\n     * You should not normally call this method directly, but rather use one of the Loader methods like `image` or `atlas`,\r\n     * however you can call this as long as the file given to it is well formed.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#addFile\r\n     * @fires Phaser.Loader.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Loader.File|Phaser.Loader.File[])} file - The file, or array of files, to be added to the load queue.\r\n     */\r\n    addFile: function (file)\r\n    {\r\n        if (!Array.isArray(file))\r\n        {\r\n            file = [ file ];\r\n        }\r\n\r\n        for (var i = 0; i < file.length; i++)\r\n        {\r\n            var item = file[i];\r\n\r\n            //  Does the file already exist in the cache or texture manager?\r\n            //  Or will it conflict with a file already in the queue or inflight?\r\n            if (!this.keyExists(item))\r\n            {\r\n                this.list.set(item);\r\n\r\n                this.emit(Events.ADD, item.key, item.type, this, item);\r\n\r\n                if (this.isLoading())\r\n                {\r\n                    this.totalToLoad++;\r\n                    this.updateProgress();\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks the key and type of the given file to see if it will conflict with anything already\r\n     * in a Cache, the Texture Manager, or the list or inflight queues.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#keyExists\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The file to check the key of.\r\n     *\r\n     * @return {boolean} `true` if adding this file will cause a cache or queue conflict, otherwise `false`.\r\n     */\r\n    keyExists: function (file)\r\n    {\r\n        var keyConflict = file.hasCacheConflict();\r\n\r\n        if (!keyConflict)\r\n        {\r\n            this.list.iterate(function (item)\r\n            {\r\n                if (item.type === file.type && item.key === file.key)\r\n                {\r\n                    keyConflict = true;\r\n\r\n                    return false;\r\n                }\r\n\r\n            });\r\n        }\r\n\r\n        if (!keyConflict && this.isLoading())\r\n        {\r\n            this.inflight.iterate(function (item)\r\n            {\r\n                if (item.type === file.type && item.key === file.key)\r\n                {\r\n                    keyConflict = true;\r\n\r\n                    return false;\r\n                }\r\n\r\n            });\r\n\r\n            this.queue.iterate(function (item)\r\n            {\r\n                if (item.type === file.type && item.key === file.key)\r\n                {\r\n                    keyConflict = true;\r\n\r\n                    return false;\r\n                }\r\n\r\n            });\r\n        }\r\n\r\n        return keyConflict;\r\n    },\r\n\r\n    /**\r\n     * Takes a well formed, fully parsed pack file object and adds its entries into the load queue. Usually you do not call\r\n     * this method directly, but instead use `Loader.pack` and supply a path to a JSON file that holds the\r\n     * pack data. However, if you've got the data prepared you can pass it to this method.\r\n     *\r\n     * You can also provide an optional key. If you do then it will only add the entries from that part of the pack into\r\n     * to the load queue. If not specified it will add all entries it finds. For more details about the pack file format\r\n     * see the `LoaderPlugin.pack` method.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#addPack\r\n     * @since 3.7.0\r\n     *\r\n     * @param {any} data - The Pack File data to be parsed and each entry of it to added to the load queue.\r\n     * @param {string} [packKey] - An optional key to use from the pack file data.\r\n     *\r\n     * @return {boolean} `true` if any files were added to the queue, otherwise `false`.\r\n     */\r\n    addPack: function (pack, packKey)\r\n    {\r\n        //  if no packKey provided we'll add everything to the queue\r\n        if (packKey && pack.hasOwnProperty(packKey))\r\n        {\r\n            pack = { packKey: pack[packKey] };\r\n        }\r\n\r\n        var total = 0;\r\n\r\n        //  Store the loader settings in case this pack replaces them\r\n        var currentBaseURL = this.baseURL;\r\n        var currentPath = this.path;\r\n        var currentPrefix = this.prefix;\r\n\r\n        //  Here we go ...\r\n        for (var key in pack)\r\n        {\r\n            var config = pack[key];\r\n\r\n            //  Any meta data to process?\r\n            var baseURL = GetFastValue(config, 'baseURL', currentBaseURL);\r\n            var path = GetFastValue(config, 'path', currentPath);\r\n            var prefix = GetFastValue(config, 'prefix', currentPrefix);\r\n            var files = GetFastValue(config, 'files', null);\r\n            var defaultType = GetFastValue(config, 'defaultType', 'void');\r\n\r\n            if (Array.isArray(files))\r\n            {\r\n                this.setBaseURL(baseURL);\r\n                this.setPath(path);\r\n                this.setPrefix(prefix);\r\n\r\n                for (var i = 0; i < files.length; i++)\r\n                {\r\n                    var file = files[i];\r\n                    var type = (file.hasOwnProperty('type')) ? file.type : defaultType;\r\n\r\n                    if (this[type])\r\n                    {\r\n                        this[type](file);\r\n                        total++;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        //  Reset the loader settings\r\n        this.setBaseURL(currentBaseURL);\r\n        this.setPath(currentPath);\r\n        this.setPrefix(currentPrefix);\r\n\r\n        return (total > 0);\r\n    },\r\n\r\n    /**\r\n     * Is the Loader actively loading, or processing loaded files?\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#isLoading\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Loader is busy loading or processing, otherwise `false`.\r\n     */\r\n    isLoading: function ()\r\n    {\r\n        return (this.state === CONST.LOADER_LOADING || this.state === CONST.LOADER_PROCESSING);\r\n    },\r\n\r\n    /**\r\n     * Is the Loader ready to start a new load?\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#isReady\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Loader is ready to start a new load, otherwise `false`.\r\n     */\r\n    isReady: function ()\r\n    {\r\n        return (this.state === CONST.LOADER_IDLE || this.state === CONST.LOADER_COMPLETE);\r\n    },\r\n\r\n    /**\r\n     * Starts the Loader running. This will reset the progress and totals and then emit a `start` event.\r\n     * If there is nothing in the queue the Loader will immediately complete, otherwise it will start\r\n     * loading the first batch of files.\r\n     *\r\n     * The Loader is started automatically if the queue is populated within your Scenes `preload` method.\r\n     *\r\n     * However, outside of this, you need to call this method to start it.\r\n     *\r\n     * If the Loader is already running this method will simply return.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#start\r\n     * @fires Phaser.Loader.Events#START\r\n     * @since 3.0.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (!this.isReady())\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.progress = 0;\r\n\r\n        this.totalFailed = 0;\r\n        this.totalComplete = 0;\r\n        this.totalToLoad = this.list.size;\r\n\r\n        this.emit(Events.START, this);\r\n\r\n        if (this.list.size === 0)\r\n        {\r\n            this.loadComplete();\r\n        }\r\n        else\r\n        {\r\n            this.state = CONST.LOADER_LOADING;\r\n\r\n            this.inflight.clear();\r\n            this.queue.clear();\r\n\r\n            this.updateProgress();\r\n\r\n            this.checkLoadQueue();\r\n\r\n            this.systems.events.on(SceneEvents.UPDATE, this.update, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically during the load process.\r\n     * It updates the `progress` value and then emits a progress event, which you can use to\r\n     * display a loading bar in your game.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#updateProgress\r\n     * @fires Phaser.Loader.Events#PROGRESS\r\n     * @since 3.0.0\r\n     */\r\n    updateProgress: function ()\r\n    {\r\n        this.progress = 1 - ((this.list.size + this.inflight.size) / this.totalToLoad);\r\n\r\n        this.emit(Events.PROGRESS, this.progress);\r\n    },\r\n\r\n    /**\r\n     * Called automatically during the load process.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#update\r\n     * @since 3.10.0\r\n     */\r\n    update: function ()\r\n    {\r\n        if (this.state === CONST.LOADER_LOADING && this.list.size > 0 && this.inflight.size < this.maxParallelDownloads)\r\n        {\r\n            this.checkLoadQueue();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * An internal method called by the Loader.\r\n     * \r\n     * It will check to see if there are any more files in the pending list that need loading, and if so it will move\r\n     * them from the list Set into the inflight Set, set their CORs flag and start them loading.\r\n     * \r\n     * It will carrying on doing this for each file in the pending list until it runs out, or hits the max allowed parallel downloads.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#checkLoadQueue\r\n     * @private\r\n     * @since 3.7.0\r\n     */\r\n    checkLoadQueue: function ()\r\n    {\r\n        this.list.each(function (file)\r\n        {\r\n            if (file.state === CONST.FILE_POPULATED || (file.state === CONST.FILE_PENDING && this.inflight.size < this.maxParallelDownloads))\r\n            {\r\n                this.inflight.set(file);\r\n\r\n                this.list.delete(file);\r\n\r\n                //  If the file doesn't have its own crossOrigin set, we'll use the Loaders (which is undefined by default)\r\n                if (!file.crossOrigin)\r\n                {\r\n                    file.crossOrigin = this.crossOrigin;\r\n                }\r\n\r\n                file.load();\r\n            }\r\n\r\n            if (this.inflight.size === this.maxParallelDownloads)\r\n            {\r\n                //  Tells the Set iterator to abort\r\n                return false;\r\n            }\r\n\r\n        }, this);\r\n    },\r\n\r\n    /**\r\n     * An internal method called automatically by the XHRLoader belong to a File.\r\n     * \r\n     * This method will remove the given file from the inflight Set and update the load progress.\r\n     * If the file was successful its `onProcess` method is called, otherwise it is added to the delete queue.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#nextFile\r\n     * @fires Phaser.Loader.Events#FILE_LOAD\r\n     * @fires Phaser.Loader.Events#FILE_LOAD_ERROR\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The File that just finished loading, or errored during load.\r\n     * @param {boolean} success - `true` if the file loaded successfully, otherwise `false`.\r\n     */\r\n    nextFile: function (file, success)\r\n    {\r\n        //  Has the game been destroyed during load? If so, bail out now.\r\n        if (!this.inflight)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.inflight.delete(file);\r\n\r\n        this.updateProgress();\r\n\r\n        if (success)\r\n        {\r\n            this.totalComplete++;\r\n\r\n            this.queue.set(file);\r\n\r\n            this.emit(Events.FILE_LOAD, file);\r\n\r\n            file.onProcess();\r\n        }\r\n        else\r\n        {\r\n            this.totalFailed++;\r\n\r\n            this._deleteQueue.set(file);\r\n\r\n            this.emit(Events.FILE_LOAD_ERROR, file);\r\n\r\n            this.fileProcessComplete(file);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * An internal method that is called automatically by the File when it has finished processing.\r\n     *\r\n     * If the process was successful, and the File isn't part of a MultiFile, its `addToCache` method is called.\r\n     *\r\n     * It this then removed from the queue. If there are no more files to load `loadComplete` is called.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#fileProcessComplete\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The file that has finished processing.\r\n     */\r\n    fileProcessComplete: function (file)\r\n    {\r\n        //  Has the game been destroyed during load? If so, bail out now.\r\n        if (!this.scene || !this.systems || !this.systems.game || this.systems.game.pendingDestroy)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  This file has failed, so move it to the failed Set\r\n        if (file.state === CONST.FILE_ERRORED)\r\n        {\r\n            if (file.multiFile)\r\n            {\r\n                file.multiFile.onFileFailed(file);\r\n            }\r\n        }\r\n        else if (file.state === CONST.FILE_COMPLETE)\r\n        {\r\n            if (file.multiFile)\r\n            {\r\n                if (file.multiFile.isReadyToProcess())\r\n                {\r\n                    //  If we got here then all files the link file needs are ready to add to the cache\r\n                    file.multiFile.addToCache();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  If we got here, then the file processed, so let it add itself to its cache\r\n                file.addToCache();\r\n            }\r\n        }\r\n\r\n        //  Remove it from the queue\r\n        this.queue.delete(file);\r\n\r\n        //  Nothing left to do?\r\n\r\n        if (this.list.size === 0 && this.inflight.size === 0 && this.queue.size === 0)\r\n        {\r\n            this.loadComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called at the end when the load queue is exhausted and all files have either loaded or errored.\r\n     * By this point every loaded file will now be in its associated cache and ready for use.\r\n     *\r\n     * Also clears down the Sets, puts progress to 1 and clears the deletion queue.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#loadComplete\r\n     * @fires Phaser.Loader.Events#COMPLETE\r\n     * @fires Phaser.Loader.Events#POST_PROCESS\r\n     * @since 3.7.0\r\n     */\r\n    loadComplete: function ()\r\n    {\r\n        this.emit(Events.POST_PROCESS, this);\r\n\r\n        this.list.clear();\r\n        this.inflight.clear();\r\n        this.queue.clear();\r\n\r\n        this.progress = 1;\r\n\r\n        this.state = CONST.LOADER_COMPLETE;\r\n\r\n        this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n\r\n        //  Call 'destroy' on each file ready for deletion\r\n        this._deleteQueue.iterateLocal('destroy');\r\n\r\n        this._deleteQueue.clear();\r\n\r\n        this.emit(Events.COMPLETE, this, this.totalComplete, this.totalFailed);\r\n    },\r\n\r\n    /**\r\n     * Adds a File into the pending-deletion queue.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#flagForRemoval\r\n     * @since 3.7.0\r\n     * \r\n     * @param {Phaser.Loader.File} file - The File to be queued for deletion when the Loader completes.\r\n     */\r\n    flagForRemoval: function (file)\r\n    {\r\n        this._deleteQueue.set(file);\r\n    },\r\n\r\n    /**\r\n     * Converts the given JSON data into a file that the browser then prompts you to download so you can save it locally.\r\n     *\r\n     * The data must be well formed JSON and ready-parsed, not a JavaScript object.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#saveJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} data - The JSON data, ready parsed.\r\n     * @param {string} [filename=file.json] - The name to save the JSON file as.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader plugin.\r\n     */\r\n    saveJSON: function (data, filename)\r\n    {\r\n        return this.save(JSON.stringify(data), filename);\r\n    },\r\n\r\n    /**\r\n     * Causes the browser to save the given data as a file to its default Downloads folder.\r\n     * \r\n     * Creates a DOM level anchor link, assigns it as being a `download` anchor, sets the href\r\n     * to be an ObjectURL based on the given data, and then invokes a click event.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#save\r\n     * @since 3.0.0\r\n     *\r\n     * @param {*} data - The data to be saved. Will be passed through URL.createObjectURL.\r\n     * @param {string} [filename=file.json] - The filename to save the file as.\r\n     * @param {string} [filetype=application/json] - The file type to use when saving the file. Defaults to JSON.\r\n     *\r\n     * @return {Phaser.Loader.LoaderPlugin} This Loader plugin.\r\n     */\r\n    save: function (data, filename, filetype)\r\n    {\r\n        if (filename === undefined) { filename = 'file.json'; }\r\n        if (filetype === undefined) { filetype = 'application/json'; }\r\n\r\n        var blob = new Blob([ data ], { type: filetype });\r\n\r\n        var url = URL.createObjectURL(blob);\r\n\r\n        var a = document.createElement('a');\r\n\r\n        a.download = filename;\r\n        a.textContent = 'Download ' + filename;\r\n        a.href = url;\r\n        a.click();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets the Loader.\r\n     *\r\n     * This will clear all lists and reset the base URL, path and prefix.\r\n     *\r\n     * Warning: If the Loader is currently downloading files, or has files in its queue, they will be aborted.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#reset\r\n     * @since 3.0.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.list.clear();\r\n        this.inflight.clear();\r\n        this.queue.clear();\r\n\r\n        var gameConfig = this.systems.game.config;\r\n        var sceneConfig = this.systems.settings.loader;\r\n\r\n        this.setBaseURL(GetFastValue(sceneConfig, 'baseURL', gameConfig.loaderBaseURL));\r\n        this.setPath(GetFastValue(sceneConfig, 'path', gameConfig.loaderPath));\r\n        this.setPrefix(GetFastValue(sceneConfig, 'prefix', gameConfig.loaderPrefix));\r\n\r\n        this.state = CONST.LOADER_IDLE;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.reset();\r\n\r\n        this.state = CONST.LOADER_SHUTDOWN;\r\n\r\n        this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n        this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Loader.LoaderPlugin#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.state = CONST.LOADER_DESTROYED;\r\n\r\n        this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n        this.systems.events.off(SceneEvents.START, this.pluginStart, this);\r\n\r\n        this.list = null;\r\n        this.inflight = null;\r\n        this.queue = null;\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n        this.textureManager = null;\r\n        this.cacheManager = null;\r\n        this.sceneManager = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('Loader', LoaderPlugin, 'load');\r\n\r\nmodule.exports = LoaderPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTG9hZGVyUGx1Z2luLmpzPzg2OGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGdCQUFnQixtQkFBTyxDQUFDLGdFQUFnQjtBQUN4QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsa0VBQVU7QUFDL0IsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQW9CO0FBQ25ELG1CQUFtQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN6RCxrQkFBa0IsbUJBQU8sQ0FBQyxnRkFBd0I7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCO0FBQzNDLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVU7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFdBQVc7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx3QkFBd0I7QUFDN0QscUNBQXFDLCtCQUErQjs7QUFFcEUsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL0xvYWRlclBsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgQ3VzdG9tU2V0ID0gcmVxdWlyZSgnLi4vc3RydWN0cy9TZXQnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcbnZhciBYSFJTZXR0aW5ncyA9IHJlcXVpcmUoJy4vWEhSU2V0dGluZ3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBMb2FkZXIgaGFuZGxlcyBsb2FkaW5nIGFsbCBleHRlcm5hbCBjb250ZW50IHN1Y2ggYXMgSW1hZ2VzLCBTb3VuZHMsIFRleHR1cmUgQXRsYXNlcyBhbmQgZGF0YSBmaWxlcy5cclxuICogWW91IHR5cGljYWxseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgdGhpcy5sb2FkYCBpbiB5b3VyIFNjZW5lLiBTY2VuZXMgY2FuIGhhdmUgYSBgcHJlbG9hZGAgbWV0aG9kLCB3aGljaCBpcyBhbHdheXNcclxuICogY2FsbGVkIGJlZm9yZSB0aGUgU2NlbmVzIGBjcmVhdGVgIG1ldGhvZCwgYWxsb3dpbmcgeW91IHRvIHByZWxvYWQgYXNzZXRzIHRoYXQgdGhlIFNjZW5lIG1heSBuZWVkLlxyXG4gKlxyXG4gKiBJZiB5b3UgY2FsbCBhbnkgYHRoaXMubG9hZGAgbWV0aG9kcyBmcm9tIG91dHNpZGUgb2YgYFNjZW5lLnByZWxvYWRgIHRoZW4geW91IG5lZWQgdG8gc3RhcnQgdGhlIExvYWRlciBnb2luZ1xyXG4gKiB5b3Vyc2VsZiBieSBjYWxsaW5nIGBMb2FkZXIuc3RhcnQoKWAuIEl0J3Mgb25seSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgZHVyaW5nIHRoZSBTY2VuZSBwcmVsb2FkLlxyXG4gKlxyXG4gKiBUaGUgTG9hZGVyIHVzZXMgYSBjb21iaW5hdGlvbiBvZiB0YWcgbG9hZGluZyAoZWcuIEF1ZGlvIGVsZW1lbnRzKSBhbmQgWEhSIGFuZCBwcm92aWRlcyBwcm9ncmVzcyBhbmQgY29tcGxldGlvbiBldmVudHMuXHJcbiAqIEZpbGVzIGFyZSBsb2FkZWQgaW4gcGFyYWxsZWwgYnkgZGVmYXVsdC4gVGhlIGFtb3VudCBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGNhbiBiZSBjb250cm9sbGVkIGluIHlvdXIgR2FtZSBDb25maWd1cmF0aW9uLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBMb2FkZXIgaGFzIHN0YXJ0ZWQgbG9hZGluZyB5b3UgYXJlIHN0aWxsIGFibGUgdG8gYWRkIGZpbGVzIHRvIGl0LiBUaGVzZSBjYW4gYmUgaW5qZWN0ZWQgYXMgYSByZXN1bHQgb2YgYSBsb2FkZXJcclxuICogZXZlbnQsIHRoZSB0eXBlIG9mIGZpbGUgYmVpbmcgbG9hZGVkIChzdWNoIGFzIGEgcGFjayBmaWxlKSBvciBvdGhlciBleHRlcm5hbCBldmVudHMuIEFzIGxvbmcgYXMgdGhlIExvYWRlciBoYXNuJ3QgZmluaXNoZWRcclxuICogc2ltcGx5IGFkZGluZyBhIG5ldyBmaWxlIHRvIGl0LCB3aGlsZSBydW5uaW5nLCB3aWxsIGVuc3VyZSBpdCdzIGFkZGVkIGludG8gdGhlIGN1cnJlbnQgcXVldWUuXHJcbiAqXHJcbiAqIEV2ZXJ5IFNjZW5lIGhhcyBpdHMgb3duIGluc3RhbmNlIG9mIHRoZSBMb2FkZXIgYW5kIHRoZXkgYXJlIGJvdW5kIHRvIHRoZSBTY2VuZSBpbiB3aGljaCB0aGV5IGFyZSBjcmVhdGVkLiBIb3dldmVyLFxyXG4gKiBhc3NldHMgbG9hZGVkIGJ5IHRoZSBMb2FkZXIgYXJlIHBsYWNlZCBpbnRvIGdsb2JhbCBnYW1lLWxldmVsIGNhY2hlcy4gRm9yIGV4YW1wbGUsIGxvYWRpbmcgYW4gWE1MIGZpbGUgd2lsbCBwbGFjZSB0aGF0XHJcbiAqIGZpbGUgaW5zaWRlIGBHYW1lLmNhY2hlLnhtbGAsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSBldmVyeSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vIG1hdHRlciB3aG8gd2FzIHJlc3BvbnNpYmxlXHJcbiAqIGZvciBsb2FkaW5nIGl0LiBUaGUgc2FtZSBpcyB0cnVlIG9mIFRleHR1cmVzLiBBIHRleHR1cmUgbG9hZGVkIGluIG9uZSBTY2VuZSBpcyBpbnN0YW50bHkgYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBTY2VuZXNcclxuICogaW4geW91ciBnYW1lLlxyXG4gKlxyXG4gKiBUaGUgTG9hZGVyIHdvcmtzIGJ5IHVzaW5nIGN1c3RvbSBGaWxlIFR5cGVzLiBUaGVzZSBhcmUgc3RvcmVkIGluIHRoZSBGaWxlVHlwZXNNYW5hZ2VyLCB3aGljaCBpbmplY3RzIHRoZW0gaW50byB0aGUgTG9hZGVyXHJcbiAqIHdoZW4gaXQncyBpbnN0YW50aWF0ZWQuIFlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGN1c3RvbSBmaWxlIHR5cGVzIGJ5IGV4dGVuZGluZyBlaXRoZXIgdGhlIEZpbGUgb3IgTXVsdGlGaWxlIGNsYXNzZXMuXHJcbiAqIFNlZSB0aG9zZSBmaWxlcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTG9hZGVyUGx1Z2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHdoaWNoIG93bnMgdGhpcyBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgTG9hZGVyUGx1Z2luID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBMb2FkZXJQbHVnaW4gKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZUNvbmZpZyA9IHNjZW5lLnN5cy5nYW1lLmNvbmZpZztcclxuICAgICAgICB2YXIgc2NlbmVDb25maWcgPSBzY2VuZS5zeXMuc2V0dGluZ3MubG9hZGVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgd2hpY2ggb3ducyB0aGlzIExvYWRlciBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIENhY2hlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNjYWNoZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlciA9IHNjZW5lLnN5cy5jYWNoZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0ZXh0dXJlTWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IHNjZW5lLnN5cy50ZXh0dXJlcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBTY2VuZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NlbmVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZU1hbmFnZXIgPSBzY2VuZS5zeXMuZ2FtZS5zY2VuZTtcclxuXHJcbiAgICAgICAgLy8gIEluamVjdCB0aGUgYXZhaWxhYmxlIGZpbGV0eXBlcyBpbnRvIHRoZSBMb2FkZXJcclxuICAgICAgICBGaWxlVHlwZXNNYW5hZ2VyLmluc3RhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9wdGlvbmFsIHByZWZpeCB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIHRoZSBzdGFydCBvZiBldmVyeSBmaWxlIGtleS5cclxuICAgICAgICAgKiBJZiBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHlvdSBsb2FkIGFuIGltYWdlIHdpdGggdGhlIGtleSAnQmFja2dyb3VuZCcgdGhlIHJlc3VsdGluZyBrZXkgd291bGQgYmUgYE1FTlUuQmFja2dyb3VuZGAuXHJcbiAgICAgICAgICogWW91IGNhbiBzZXQgdGhpcyBkaXJlY3RseSwgb3IgY2FsbCBgTG9hZGVyLnNldFByZWZpeCgpYC4gSXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGFkZGVkIHRvIHRoZSBMb2FkZXJcclxuICAgICAgICAgKiBmcm9tIHRoYXQgcG9pbnQgb24uIEl0IGRvZXMgX25vdF8gY2hhbmdlIGFueSBmaWxlIGFscmVhZHkgaW4gdGhlIGxvYWQgcXVldWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwcmVmaXhcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmVmaXggPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIGBwYXRoYCwgaWYgc2V0LCBpcyBwbGFjZWQgYmVmb3JlIGFueSBfcmVsYXRpdmVfIGZpbGUgcGF0aCBnaXZlbi4gRm9yIGV4YW1wbGU6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgICAgICogdGhpcy5sb2FkLnBhdGggPSBcImltYWdlcy9zcHJpdGVzL1wiO1xyXG4gICAgICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJhbGxcIiwgXCJiYWxsLnBuZ1wiKTtcclxuICAgICAgICAgKiB0aGlzLmxvYWQuaW1hZ2UoXCJ0cmVlXCIsIFwibGV2ZWwxL29ha3RyZWUucG5nXCIpO1xyXG4gICAgICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJvb21cIiwgXCJodHRwOi8vc2VydmVyLmNvbS9leHBsb2RlLnBuZ1wiKTtcclxuICAgICAgICAgKiBgYGBcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFdvdWxkIGxvYWQgdGhlIGBiYWxsYCBmaWxlIGZyb20gYGltYWdlcy9zcHJpdGVzL2JhbGwucG5nYCBhbmQgdGhlIHRyZWUgZnJvbVxyXG4gICAgICAgICAqIGBpbWFnZXMvc3ByaXRlcy9sZXZlbDEvb2FrdHJlZS5wbmdgIGJ1dCB0aGUgZmlsZSBgYm9vbWAgd291bGQgbG9hZCBmcm9tIHRoZSBVUkxcclxuICAgICAgICAgKiBnaXZlbiBhcyBpdCdzIGFuIGFic29sdXRlIFVSTC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIHBhdGggaXMgYWRkZWQgYmVmb3JlIHRoZSBmaWxlbmFtZSBidXQgKmFmdGVyKiB0aGUgYmFzZVVSTCAoaWYgc2V0LilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSB0aGVuIGl0IF9tdXN0XyBlbmQgd2l0aCBhIFwiL1wiLiBBbHRlcm5hdGl2ZWx5LCBjYWxsIGBzZXRQYXRoKClgIGFuZCBpdCdsbCBkbyBpdCBmb3IgeW91LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGggPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gYXBwZW5kIGEgVVJMIGJlZm9yZSB0aGUgcGF0aCBvZiBhbnkgYXNzZXQgeW91IGNhbiBzZXQgdGhpcyBoZXJlLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZWZ1bCBpZiBhbGxvd2luZyB0aGUgYXNzZXQgYmFzZSB1cmwgdG8gYmUgY29uZmlndXJlZCBvdXRzaWRlIG9mIHRoZSBnYW1lIGNvZGUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHNldCB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IHRoZW4gaXQgX211c3RfIGVuZCB3aXRoIGEgXCIvXCIuIEFsdGVybmF0aXZlbHksIGNhbGwgYHNldEJhc2VVUkwoKWAgYW5kIGl0J2xsIGRvIGl0IGZvciB5b3UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiYXNlVVJMXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFzZVVSTCA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnYmFzZVVSTCcsIGdhbWVDb25maWcubG9hZGVyQmFzZVVSTCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhdGgoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncGF0aCcsIGdhbWVDb25maWcubG9hZGVyUGF0aCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFByZWZpeChHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdwcmVmaXgnLCBnYW1lQ29uZmlnLmxvYWRlclByZWZpeCkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgLyBwYXJhbGxlbCByZXNvdXJjZXMgdG8gdHJ5IGFuZCBmZXRjaCBhdCBvbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT2xkIGJyb3dzZXJzIGxpbWl0IDYgcmVxdWVzdHMgcGVyIGRvbWFpbjsgbW9kZXJuIG9uZXMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBIVFRQLzIgZG9uJ3QgbGltaXQgaXQgYXQgYWxsLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgaXMgMzIgYnV0IHlvdSBjYW4gY2hhbmdlIHRoaXMgaW4geW91ciBHYW1lIENvbmZpZywgb3IgYnkgY2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgdGhlIExvYWRlciBzdGFydHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNtYXhQYXJhbGxlbERvd25sb2Fkc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4UGFyYWxsZWxEb3dubG9hZHMgPSBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdtYXhQYXJhbGxlbERvd25sb2FkcycsIGdhbWVDb25maWcubG9hZGVyTWF4UGFyYWxsZWxEb3dubG9hZHMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB4aHIgc3BlY2lmaWMgZ2xvYmFsIHNldHRpbmdzIChjYW4gYmUgb3ZlcnJpZGRlbiBvbiBhIHBlci1maWxlIGJhc2lzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jeGhyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54aHIgPSBYSFJTZXR0aW5ncyhcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncmVzcG9uc2VUeXBlJywgZ2FtZUNvbmZpZy5sb2FkZXJSZXNwb25zZVR5cGUpLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdhc3luYycsIGdhbWVDb25maWcubG9hZGVyQXN5bmMpLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICd1c2VyJywgZ2FtZUNvbmZpZy5sb2FkZXJVc2VyKSxcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncGFzc3dvcmQnLCBnYW1lQ29uZmlnLmxvYWRlclBhc3N3b3JkKSxcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAndGltZW91dCcsIGdhbWVDb25maWcubG9hZGVyVGltZW91dClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3Jvc3NPcmlnaW4gdmFsdWUgYXBwbGllZCB0byBsb2FkZWQgaW1hZ2VzLiBWZXJ5IG9mdGVuIHRoaXMgbmVlZHMgdG8gYmUgc2V0IHRvICdhbm9ueW1vdXMnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3Jvc3NPcmlnaW5cclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdjcm9zc09yaWdpbicsIGdhbWVDb25maWcubG9hZGVyQ3Jvc3NPcmlnaW4pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGZpbGVzIHRvIGxvYWQuIEl0IG1heSBub3QgYWx3YXlzIGJlIGFjY3VyYXRlIGJlY2F1c2UgeW91IG1heSBhZGQgdG8gdGhlIExvYWRlciBkdXJpbmcgdGhlIHByb2Nlc3NcclxuICAgICAgICAgKiBvZiBsb2FkaW5nLCBlc3BlY2lhbGx5IGlmIHlvdSBsb2FkIGEgUGFjayBGaWxlLiBUaGVyZWZvcmUgdGhpcyB2YWx1ZSBjYW4gY2hhbmdlLCBidXQgaW4gbW9zdCBjYXNlcyByZW1haW5zIHN0YXRpYy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RvdGFsVG9Mb2FkXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG90YWxUb0xvYWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZSwgYXMgYSBmbG9hdCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgZmlsZXMgY29tcGxldGUgbG9hZGluZy5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoaXMgdmFsdWUgdG8gZ28gZG93biBhZ2FpbiBpZiB5b3UgYWRkIGNvbnRlbnQgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZSBkdXJpbmcgYSBsb2FkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsZXMgYXJlIHBsYWNlZCBpbiB0aGlzIFNldCB3aGVuIHRoZXkncmUgYWRkZWQgdG8gdGhlIExvYWRlciB2aWEgYGFkZEZpbGVgLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZXkgYXJlIG1vdmVkIHRvIHRoZSBgaW5mbGlnaHRgIFNldCB3aGVuIHRoZXkgc3RhcnQgbG9hZGluZywgYW5kIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bFxyXG4gICAgICAgICAqIGxvYWQsIHRvIHRoZSBgcXVldWVgIFNldCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzIHRoaXMgU2V0IHdpbGwgYmUgZW1wdHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNsaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkxvYWRlci5GaWxlPn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpc3QgPSBuZXcgQ3VzdG9tU2V0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZpbGVzIGFyZSBzdG9yZWQgaW4gdGhpcyBTZXQgd2hpbGUgdGhleSdyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBsb2FkZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZCB0aGV5IGFyZSBtb3ZlZCB0byB0aGUgYHF1ZXVlYCBTZXQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQnkgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzIHRoaXMgU2V0IHdpbGwgYmUgZW1wdHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpbmZsaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5Mb2FkZXIuRmlsZT59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmZsaWdodCA9IG5ldyBDdXN0b21TZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsZXMgYXJlIHN0b3JlZCBpbiB0aGlzIFNldCB3aGlsZSB0aGV5J3JlIGJlaW5nIHByb2Nlc3NlZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJZiB0aGUgcHJvY2VzcyBpcyBzdWNjZXNzZnVsIHRoZXkgYXJlIG1vdmVkIHRvIHRoZWlyIGZpbmFsIGRlc3RpbmF0aW9uLCB3aGljaCBjb3VsZCBiZVxyXG4gICAgICAgICAqIGEgQ2FjaGUgb3IgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBdCB0aGUgZW5kIG9mIHRoZSBsb2FkIHByb2Nlc3MgdGhpcyBTZXQgd2lsbCBiZSBlbXB0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3F1ZXVlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkxvYWRlci5GaWxlPn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnF1ZXVlID0gbmV3IEN1c3RvbVNldCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBTZXQgaW4gd2hpY2ggZmlsZXMgYXJlIHN0b3JlZCBhZnRlciBwcm9jZXNzaW5nLFxyXG4gICAgICAgICAqIGF3YWl0aW5nIGRlc3RydWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvYWQgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI19kZWxldGVRdWV1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5Mb2FkZXIuRmlsZT59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZSA9IG5ldyBDdXN0b21TZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGZhaWxlZCB0byBsb2FkIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgbG9hZC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHJlc2V0IHdoZW4geW91IGNhbGwgYExvYWRlci5zdGFydGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0b3RhbEZhaWxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRmFpbGVkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IHN1Y2Nlc3NmdWxseSBsb2FkZWQgZHVyaW5nIHRoZSBtb3N0IHJlY2VudCBsb2FkLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgcmVzZXQgd2hlbiB5b3UgY2FsbCBgTG9hZGVyLnN0YXJ0YC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RvdGFsQ29tcGxldGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3N0YXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkxPQURFUl9JRExFO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBpbmRleCBiZWluZyB1c2VkIGJ5IG11bHRpLWZpbGUgbG9hZGVycyB0byBhdm9pZCBrZXkgY2xhc2hlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpS2V5SW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11bHRpS2V5SW5kZXggPSAwO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnBsdWdpblN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjFcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwbHVnaW5TdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBwbHVnaW5TdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHlvdSB3YW50IHRvIGFwcGVuZCBhIFVSTCBiZWZvcmUgdGhlIHBhdGggb2YgYW55IGFzc2V0IHlvdSBjYW4gc2V0IHRoaXMgaGVyZS5cclxuICAgICAqIFxyXG4gICAgICogVXNlZnVsIGlmIGFsbG93aW5nIHRoZSBhc3NldCBiYXNlIHVybCB0byBiZSBjb25maWd1cmVkIG91dHNpZGUgb2YgdGhlIGdhbWUgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogT25jZSBhIGJhc2UgVVJMIGlzIHNldCBpdCB3aWxsIGFmZmVjdCBldmVyeSBmaWxlIGxvYWRlZCBieSB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbi4gSXQgZG9lcyBfbm90XyBjaGFuZ2UgYW55XHJcbiAgICAgKiBmaWxlIF9hbHJlYWR5XyBiZWluZyBsb2FkZWQuIFRvIHJlc2V0IGl0LCBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2V0QmFzZVVSTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIFVSTCB0byB1c2UuIExlYXZlIGVtcHR5IHRvIHJlc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGlzIExvYWRlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJhc2VVUkw6IGZ1bmN0aW9uICh1cmwpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7IHVybCA9ICcnOyB9XHJcblxyXG4gICAgICAgIGlmICh1cmwgIT09ICcnICYmIHVybC5zdWJzdHIoLTEpICE9PSAnLycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwuY29uY2F0KCcvJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VVUkwgPSB1cmw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiBgcGF0aGAsIGlmIHNldCwgaXMgcGxhY2VkIGJlZm9yZSBhbnkgX3JlbGF0aXZlXyBmaWxlIHBhdGggZ2l2ZW4uIEZvciBleGFtcGxlOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMubG9hZC5zZXRQYXRoKFwiaW1hZ2VzL3Nwcml0ZXMvXCIpO1xyXG4gICAgICogdGhpcy5sb2FkLmltYWdlKFwiYmFsbFwiLCBcImJhbGwucG5nXCIpO1xyXG4gICAgICogdGhpcy5sb2FkLmltYWdlKFwidHJlZVwiLCBcImxldmVsMS9vYWt0cmVlLnBuZ1wiKTtcclxuICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJvb21cIiwgXCJodHRwOi8vc2VydmVyLmNvbS9leHBsb2RlLnBuZ1wiKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFdvdWxkIGxvYWQgdGhlIGBiYWxsYCBmaWxlIGZyb20gYGltYWdlcy9zcHJpdGVzL2JhbGwucG5nYCBhbmQgdGhlIHRyZWUgZnJvbVxyXG4gICAgICogYGltYWdlcy9zcHJpdGVzL2xldmVsMS9vYWt0cmVlLnBuZ2AgYnV0IHRoZSBmaWxlIGBib29tYCB3b3VsZCBsb2FkIGZyb20gdGhlIFVSTFxyXG4gICAgICogZ2l2ZW4gYXMgaXQncyBhbiBhYnNvbHV0ZSBVUkwuXHJcbiAgICAgKlxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgcGF0aCBpcyBhZGRlZCBiZWZvcmUgdGhlIGZpbGVuYW1lIGJ1dCAqYWZ0ZXIqIHRoZSBiYXNlVVJMIChpZiBzZXQuKVxyXG4gICAgICogXHJcbiAgICAgKiBPbmNlIGEgcGF0aCBpcyBzZXQgaXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGFkZGVkIHRvIHRoZSBMb2FkZXIgZnJvbSB0aGF0IHBvaW50IG9uLiBJdCBkb2VzIF9ub3RfIGNoYW5nZSBhbnlcclxuICAgICAqIGZpbGUgX2FscmVhZHlfIGluIHRoZSBsb2FkIHF1ZXVlLiBUbyByZXNldCBpdCwgY2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NldFBhdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGF0aCB0byB1c2UuIExlYXZlIGVtcHR5IHRvIHJlc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGlzIExvYWRlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhdGg6IGZ1bmN0aW9uIChwYXRoKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHsgcGF0aCA9ICcnOyB9XHJcblxyXG4gICAgICAgIGlmIChwYXRoICE9PSAnJyAmJiBwYXRoLnN1YnN0cigtMSkgIT09ICcvJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCgnLycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gb3B0aW9uYWwgcHJlZml4IHRoYXQgaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgdG8gdGhlIHN0YXJ0IG9mIGV2ZXJ5IGZpbGUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHlvdSBsb2FkIGFuIGltYWdlIHdpdGggdGhlIGtleSAnQmFja2dyb3VuZCcgdGhlIHJlc3VsdGluZyBrZXkgd291bGQgYmUgYE1FTlUuQmFja2dyb3VuZGAuXHJcbiAgICAgKiBcclxuICAgICAqIE9uY2UgYSBwcmVmaXggaXMgc2V0IGl0IHdpbGwgdGhlbiBhZmZlY3QgZXZlcnkgZmlsZSBhZGRlZCB0byB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbi4gSXQgZG9lcyBfbm90XyBjaGFuZ2UgYW55XHJcbiAgICAgKiBmaWxlIF9hbHJlYWR5XyBpbiB0aGUgbG9hZCBxdWV1ZS4gVG8gcmVzZXQgaXQsIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzZXRQcmVmaXhcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4XSAtIFRoZSBwcmVmaXggdG8gdXNlLiBMZWF2ZSBlbXB0eSB0byByZXNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhpcyBMb2FkZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7IHByZWZpeCA9ICcnOyB9XHJcblxyXG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBDcm9zcyBPcmlnaW4gUmVzb3VyY2UgU2hhcmluZyB2YWx1ZSB1c2VkIHdoZW4gbG9hZGluZyBmaWxlcy5cclxuICAgICAqIFxyXG4gICAgICogRmlsZXMgY2FuIG92ZXJyaWRlIHRoaXMgdmFsdWUgb24gYSBwZXItZmlsZSBiYXNpcyBieSBzcGVjaWZ5aW5nIGFuIGFsdGVybmF0aXZlIGBjcm9zc09yaWdpbmAgdmFsdWUgaW4gdGhlaXIgZmlsZSBjb25maWcuXHJcbiAgICAgKiBcclxuICAgICAqIE9uY2UgQ09ScyBpcyBzZXQgaXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGxvYWRlZCBieSB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbiwgYXMgbG9uZyBhcyB0aGV5IGRvbid0IGhhdmVcclxuICAgICAqIHRoZWlyIG93biBDT1JzIHNldHRpbmcuIFRvIHJlc2V0IGl0LCBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgQ09ScyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DT1JTXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzZXRDT1JTXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Nyb3NzT3JpZ2luXSAtIFRoZSB2YWx1ZSB0byB1c2UgZm9yIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGluIHRoZSBsb2FkIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q09SUzogZnVuY3Rpb24gKGNyb3NzT3JpZ2luKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGZpbGUsIG9yIGFycmF5IG9mIGZpbGVzLCBpbnRvIHRoZSBsb2FkIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmaWxlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYFBoYXNlci5Mb2FkZXIuRmlsZWAsIG9yIGEgY2xhc3MgdGhhdCBleHRlbmRzIGl0LiBUaGUgTG9hZGVyIHdpbGwgY2hlY2sgdGhhdCB0aGUga2V5XHJcbiAgICAgKiB1c2VkIGJ5IHRoZSBmaWxlIHdvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGtleSBlaXRoZXIgaW4gdGhlIGxvYWRlciwgdGhlIGluZmxpZ2h0IHF1ZXVlIG9yIHRoZSB0YXJnZXQgY2FjaGUuXHJcbiAgICAgKiBJZiBhbGxvd2VkIGl0IHdpbGwgdGhlbiBhZGQgdGhlIGZpbGUgaW50byB0aGUgcGVuZGluZyBsaXN0LCByZWFkIGZvciB0aGUgbG9hZCB0byBzdGFydC4gT3IsIGlmIHRoZSBsb2FkIGhhcyBhbHJlYWR5XHJcbiAgICAgKiBzdGFydGVkLCByZWFkeSBmb3IgdGhlIG5leHQgYmF0Y2ggb2YgZmlsZXMgdG8gYmUgcHVsbGVkIGZyb20gdGhlIGxpc3QgdG8gdGhlIGluZmxpZ2h0IHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBzaG91bGQgbm90IG5vcm1hbGx5IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGJ1dCByYXRoZXIgdXNlIG9uZSBvZiB0aGUgTG9hZGVyIG1ldGhvZHMgbGlrZSBgaW1hZ2VgIG9yIGBhdGxhc2AsXHJcbiAgICAgKiBob3dldmVyIHlvdSBjYW4gY2FsbCB0aGlzIGFzIGxvbmcgYXMgdGhlIGZpbGUgZ2l2ZW4gdG8gaXQgaXMgd2VsbCBmb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTG9hZGVyLkZpbGV8UGhhc2VyLkxvYWRlci5GaWxlW10pfSBmaWxlIC0gVGhlIGZpbGUsIG9yIGFycmF5IG9mIGZpbGVzLCB0byBiZSBhZGRlZCB0byB0aGUgbG9hZCBxdWV1ZS5cclxuICAgICAqL1xyXG4gICAgYWRkRmlsZTogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZmlsZSA9IFsgZmlsZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBmaWxlW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIERvZXMgdGhlIGZpbGUgYWxyZWFkeSBleGlzdCBpbiB0aGUgY2FjaGUgb3IgdGV4dHVyZSBtYW5hZ2VyP1xyXG4gICAgICAgICAgICAvLyAgT3Igd2lsbCBpdCBjb25mbGljdCB3aXRoIGEgZmlsZSBhbHJlYWR5IGluIHRoZSBxdWV1ZSBvciBpbmZsaWdodD9cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmtleUV4aXN0cyhpdGVtKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnNldChpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwgaXRlbS5rZXksIGl0ZW0udHlwZSwgdGhpcywgaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKCkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbFRvTG9hZCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIGtleSBhbmQgdHlwZSBvZiB0aGUgZ2l2ZW4gZmlsZSB0byBzZWUgaWYgaXQgd2lsbCBjb25mbGljdCB3aXRoIGFueXRoaW5nIGFscmVhZHlcclxuICAgICAqIGluIGEgQ2FjaGUsIHRoZSBUZXh0dXJlIE1hbmFnZXIsIG9yIHRoZSBsaXN0IG9yIGluZmxpZ2h0IHF1ZXVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2tleUV4aXN0c1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBUaGUgZmlsZSB0byBjaGVjayB0aGUga2V5IG9mLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBhZGRpbmcgdGhpcyBmaWxlIHdpbGwgY2F1c2UgYSBjYWNoZSBvciBxdWV1ZSBjb25mbGljdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGtleUV4aXN0czogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleUNvbmZsaWN0ID0gZmlsZS5oYXNDYWNoZUNvbmZsaWN0KCk7XHJcblxyXG4gICAgICAgIGlmICgha2V5Q29uZmxpY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QuaXRlcmF0ZShmdW5jdGlvbiAoaXRlbSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gZmlsZS50eXBlICYmIGl0ZW0ua2V5ID09PSBmaWxlLmtleSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlDb25mbGljdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFrZXlDb25mbGljdCAmJiB0aGlzLmlzTG9hZGluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pbmZsaWdodC5pdGVyYXRlKGZ1bmN0aW9uIChpdGVtKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBmaWxlLnR5cGUgJiYgaXRlbS5rZXkgPT09IGZpbGUua2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleUNvbmZsaWN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlLml0ZXJhdGUoZnVuY3Rpb24gKGl0ZW0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IGZpbGUudHlwZSAmJiBpdGVtLmtleSA9PT0gZmlsZS5rZXkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5Q29uZmxpY3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlDb25mbGljdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHdlbGwgZm9ybWVkLCBmdWxseSBwYXJzZWQgcGFjayBmaWxlIG9iamVjdCBhbmQgYWRkcyBpdHMgZW50cmllcyBpbnRvIHRoZSBsb2FkIHF1ZXVlLiBVc3VhbGx5IHlvdSBkbyBub3QgY2FsbFxyXG4gICAgICogdGhpcyBtZXRob2QgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIHVzZSBgTG9hZGVyLnBhY2tgIGFuZCBzdXBwbHkgYSBwYXRoIHRvIGEgSlNPTiBmaWxlIHRoYXQgaG9sZHMgdGhlXHJcbiAgICAgKiBwYWNrIGRhdGEuIEhvd2V2ZXIsIGlmIHlvdSd2ZSBnb3QgdGhlIGRhdGEgcHJlcGFyZWQgeW91IGNhbiBwYXNzIGl0IHRvIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGtleS4gSWYgeW91IGRvIHRoZW4gaXQgd2lsbCBvbmx5IGFkZCB0aGUgZW50cmllcyBmcm9tIHRoYXQgcGFydCBvZiB0aGUgcGFjayBpbnRvXHJcbiAgICAgKiB0byB0aGUgbG9hZCBxdWV1ZS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIGFkZCBhbGwgZW50cmllcyBpdCBmaW5kcy4gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcGFjayBmaWxlIGZvcm1hdFxyXG4gICAgICogc2VlIHRoZSBgTG9hZGVyUGx1Z2luLnBhY2tgIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZFBhY2tcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gVGhlIFBhY2sgRmlsZSBkYXRhIHRvIGJlIHBhcnNlZCBhbmQgZWFjaCBlbnRyeSBvZiBpdCB0byBhZGRlZCB0byB0aGUgbG9hZCBxdWV1ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFja0tleV0gLSBBbiBvcHRpb25hbCBrZXkgdG8gdXNlIGZyb20gdGhlIHBhY2sgZmlsZSBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBhbnkgZmlsZXMgd2VyZSBhZGRlZCB0byB0aGUgcXVldWUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBhZGRQYWNrOiBmdW5jdGlvbiAocGFjaywgcGFja0tleSlcclxuICAgIHtcclxuICAgICAgICAvLyAgaWYgbm8gcGFja0tleSBwcm92aWRlZCB3ZSdsbCBhZGQgZXZlcnl0aGluZyB0byB0aGUgcXVldWVcclxuICAgICAgICBpZiAocGFja0tleSAmJiBwYWNrLmhhc093blByb3BlcnR5KHBhY2tLZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGFjayA9IHsgcGFja0tleTogcGFja1twYWNrS2V5XSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuXHJcbiAgICAgICAgLy8gIFN0b3JlIHRoZSBsb2FkZXIgc2V0dGluZ3MgaW4gY2FzZSB0aGlzIHBhY2sgcmVwbGFjZXMgdGhlbVxyXG4gICAgICAgIHZhciBjdXJyZW50QmFzZVVSTCA9IHRoaXMuYmFzZVVSTDtcclxuICAgICAgICB2YXIgY3VycmVudFBhdGggPSB0aGlzLnBhdGg7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRQcmVmaXggPSB0aGlzLnByZWZpeDtcclxuXHJcbiAgICAgICAgLy8gIEhlcmUgd2UgZ28gLi4uXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0gcGFja1trZXldO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFueSBtZXRhIGRhdGEgdG8gcHJvY2Vzcz9cclxuICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYmFzZVVSTCcsIGN1cnJlbnRCYXNlVVJMKTtcclxuICAgICAgICAgICAgdmFyIHBhdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncGF0aCcsIGN1cnJlbnRQYXRoKTtcclxuICAgICAgICAgICAgdmFyIHByZWZpeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwcmVmaXgnLCBjdXJyZW50UHJlZml4KTtcclxuICAgICAgICAgICAgdmFyIGZpbGVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZpbGVzJywgbnVsbCk7XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VHlwZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdkZWZhdWx0VHlwZScsICd2b2lkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QmFzZVVSTChiYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJlZml4KHByZWZpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gKGZpbGUuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkgPyBmaWxlLnR5cGUgOiBkZWZhdWx0VHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNbdHlwZV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3R5cGVdKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc2V0IHRoZSBsb2FkZXIgc2V0dGluZ3NcclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoY3VycmVudEJhc2VVUkwpO1xyXG4gICAgICAgIHRoaXMuc2V0UGF0aChjdXJyZW50UGF0aCk7XHJcbiAgICAgICAgdGhpcy5zZXRQcmVmaXgoY3VycmVudFByZWZpeCk7XHJcblxyXG4gICAgICAgIHJldHVybiAodG90YWwgPiAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgTG9hZGVyIGFjdGl2ZWx5IGxvYWRpbmcsIG9yIHByb2Nlc3NpbmcgbG9hZGVkIGZpbGVzP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaXNMb2FkaW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIExvYWRlciBpcyBidXN5IGxvYWRpbmcgb3IgcHJvY2Vzc2luZywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzTG9hZGluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9MT0FESU5HIHx8IHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9QUk9DRVNTSU5HKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgTG9hZGVyIHJlYWR5IHRvIHN0YXJ0IGEgbmV3IGxvYWQ/XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpc1JlYWR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIExvYWRlciBpcyByZWFkeSB0byBzdGFydCBhIG5ldyBsb2FkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNSZWFkeTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9JRExFIHx8IHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9DT01QTEVURSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBMb2FkZXIgcnVubmluZy4gVGhpcyB3aWxsIHJlc2V0IHRoZSBwcm9ncmVzcyBhbmQgdG90YWxzIGFuZCB0aGVuIGVtaXQgYSBgc3RhcnRgIGV2ZW50LlxyXG4gICAgICogSWYgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgcXVldWUgdGhlIExvYWRlciB3aWxsIGltbWVkaWF0ZWx5IGNvbXBsZXRlLCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydFxyXG4gICAgICogbG9hZGluZyB0aGUgZmlyc3QgYmF0Y2ggb2YgZmlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIExvYWRlciBpcyBzdGFydGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHF1ZXVlIGlzIHBvcHVsYXRlZCB3aXRoaW4geW91ciBTY2VuZXMgYHByZWxvYWRgIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBIb3dldmVyLCBvdXRzaWRlIG9mIHRoaXMsIHlvdSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgdG8gc3RhcnQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIExvYWRlciBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhpcyBtZXRob2Qgd2lsbCBzaW1wbHkgcmV0dXJuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNTVEFSVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy50b3RhbEZhaWxlZCA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlID0gMDtcclxuICAgICAgICB0aGlzLnRvdGFsVG9Mb2FkID0gdGhpcy5saXN0LnNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuU1RBUlQsIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0LnNpemUgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuTE9BREVSX0xPQURJTkc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmluZmxpZ2h0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVldWUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMb2FkUXVldWUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgYHByb2dyZXNzYCB2YWx1ZSBhbmQgdGhlbiBlbWl0cyBhIHByb2dyZXNzIGV2ZW50LCB3aGljaCB5b3UgY2FuIHVzZSB0b1xyXG4gICAgICogZGlzcGxheSBhIGxvYWRpbmcgYmFyIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3VwZGF0ZVByb2dyZXNzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjUFJPR1JFU1NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQcm9ncmVzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMSAtICgodGhpcy5saXN0LnNpemUgKyB0aGlzLmluZmxpZ2h0LnNpemUpIC8gdGhpcy50b3RhbFRvTG9hZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUFJPR1JFU1MsIHRoaXMucHJvZ3Jlc3MpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuTE9BREVSX0xPQURJTkcgJiYgdGhpcy5saXN0LnNpemUgPiAwICYmIHRoaXMuaW5mbGlnaHQuc2l6ZSA8IHRoaXMubWF4UGFyYWxsZWxEb3dubG9hZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTG9hZFF1ZXVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCBjYWxsZWQgYnkgdGhlIExvYWRlci5cclxuICAgICAqIFxyXG4gICAgICogSXQgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGZpbGVzIGluIHRoZSBwZW5kaW5nIGxpc3QgdGhhdCBuZWVkIGxvYWRpbmcsIGFuZCBpZiBzbyBpdCB3aWxsIG1vdmVcclxuICAgICAqIHRoZW0gZnJvbSB0aGUgbGlzdCBTZXQgaW50byB0aGUgaW5mbGlnaHQgU2V0LCBzZXQgdGhlaXIgQ09ScyBmbGFnIGFuZCBzdGFydCB0aGVtIGxvYWRpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IHdpbGwgY2Fycnlpbmcgb24gZG9pbmcgdGhpcyBmb3IgZWFjaCBmaWxlIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgaXQgcnVucyBvdXQsIG9yIGhpdHMgdGhlIG1heCBhbGxvd2VkIHBhcmFsbGVsIGRvd25sb2Fkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2NoZWNrTG9hZFF1ZXVlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGNoZWNrTG9hZFF1ZXVlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGlzdC5lYWNoKGZ1bmN0aW9uIChmaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdGUgPT09IENPTlNULkZJTEVfUE9QVUxBVEVEIHx8IChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX1BFTkRJTkcgJiYgdGhpcy5pbmZsaWdodC5zaXplIDwgdGhpcy5tYXhQYXJhbGxlbERvd25sb2FkcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5mbGlnaHQuc2V0KGZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdC5kZWxldGUoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIElmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIGNyb3NzT3JpZ2luIHNldCwgd2UnbGwgdXNlIHRoZSBMb2FkZXJzICh3aGljaCBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdClcclxuICAgICAgICAgICAgICAgIGlmICghZmlsZS5jcm9zc09yaWdpbilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmaWxlLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5mbGlnaHQuc2l6ZSA9PT0gdGhpcy5tYXhQYXJhbGxlbERvd25sb2FkcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRlbGxzIHRoZSBTZXQgaXRlcmF0b3IgdG8gYWJvcnRcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFhIUkxvYWRlciBiZWxvbmcgdG8gYSBGaWxlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZSB0aGUgZ2l2ZW4gZmlsZSBmcm9tIHRoZSBpbmZsaWdodCBTZXQgYW5kIHVwZGF0ZSB0aGUgbG9hZCBwcm9ncmVzcy5cclxuICAgICAqIElmIHRoZSBmaWxlIHdhcyBzdWNjZXNzZnVsIGl0cyBgb25Qcm9jZXNzYCBtZXRob2QgaXMgY2FsbGVkLCBvdGhlcndpc2UgaXQgaXMgYWRkZWQgdG8gdGhlIGRlbGV0ZSBxdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI25leHRGaWxlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEX0VSUk9SXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQganVzdCBmaW5pc2hlZCBsb2FkaW5nLCBvciBlcnJvcmVkIGR1cmluZyBsb2FkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzIC0gYHRydWVgIGlmIHRoZSBmaWxlIGxvYWRlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBuZXh0RmlsZTogZnVuY3Rpb24gKGZpbGUsIHN1Y2Nlc3MpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEhhcyB0aGUgZ2FtZSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcgbG9hZD8gSWYgc28sIGJhaWwgb3V0IG5vdy5cclxuICAgICAgICBpZiAoIXRoaXMuaW5mbGlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZmxpZ2h0LmRlbGV0ZShmaWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG5cclxuICAgICAgICBpZiAoc3VjY2VzcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wbGV0ZSsrO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5xdWV1ZS5zZXQoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZJTEVfTE9BRCwgZmlsZSk7XHJcblxyXG4gICAgICAgICAgICBmaWxlLm9uUHJvY2VzcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsRmFpbGVkKys7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZS5zZXQoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZJTEVfTE9BRF9FUlJPUiwgZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbGVQcm9jZXNzQ29tcGxldGUoZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBGaWxlIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIHByb2Nlc3Mgd2FzIHN1Y2Nlc3NmdWwsIGFuZCB0aGUgRmlsZSBpc24ndCBwYXJ0IG9mIGEgTXVsdGlGaWxlLCBpdHMgYGFkZFRvQ2FjaGVgIG1ldGhvZCBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgdGhpcyB0aGVuIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuIElmIHRoZXJlIGFyZSBubyBtb3JlIGZpbGVzIHRvIGxvYWQgYGxvYWRDb21wbGV0ZWAgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZmlsZVByb2Nlc3NDb21wbGV0ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBUaGUgZmlsZSB0aGF0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gICAgICovXHJcbiAgICBmaWxlUHJvY2Vzc0NvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgSGFzIHRoZSBnYW1lIGJlZW4gZGVzdHJveWVkIGR1cmluZyBsb2FkPyBJZiBzbywgYmFpbCBvdXQgbm93LlxyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSB8fCAhdGhpcy5zeXN0ZW1zIHx8ICF0aGlzLnN5c3RlbXMuZ2FtZSB8fCB0aGlzLnN5c3RlbXMuZ2FtZS5wZW5kaW5nRGVzdHJveSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGZpbGUgaGFzIGZhaWxlZCwgc28gbW92ZSBpdCB0byB0aGUgZmFpbGVkIFNldFxyXG4gICAgICAgIGlmIChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX0VSUk9SRUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5tdWx0aUZpbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZpbGUubXVsdGlGaWxlLm9uRmlsZUZhaWxlZChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX0NPTVBMRVRFKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUubXVsdGlGaWxlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5tdWx0aUZpbGUuaXNSZWFkeVRvUHJvY2VzcygpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBJZiB3ZSBnb3QgaGVyZSB0aGVuIGFsbCBmaWxlcyB0aGUgbGluayBmaWxlIG5lZWRzIGFyZSByZWFkeSB0byBhZGQgdG8gdGhlIGNhY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5tdWx0aUZpbGUuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIElmIHdlIGdvdCBoZXJlLCB0aGVuIHRoZSBmaWxlIHByb2Nlc3NlZCwgc28gbGV0IGl0IGFkZCBpdHNlbGYgdG8gaXRzIGNhY2hlXHJcbiAgICAgICAgICAgICAgICBmaWxlLmFkZFRvQ2FjaGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZVxyXG4gICAgICAgIHRoaXMucXVldWUuZGVsZXRlKGZpbGUpO1xyXG5cclxuICAgICAgICAvLyAgTm90aGluZyBsZWZ0IHRvIGRvP1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0LnNpemUgPT09IDAgJiYgdGhpcy5pbmZsaWdodC5zaXplID09PSAwICYmIHRoaXMucXVldWUuc2l6ZSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdCB0aGUgZW5kIHdoZW4gdGhlIGxvYWQgcXVldWUgaXMgZXhoYXVzdGVkIGFuZCBhbGwgZmlsZXMgaGF2ZSBlaXRoZXIgbG9hZGVkIG9yIGVycm9yZWQuXHJcbiAgICAgKiBCeSB0aGlzIHBvaW50IGV2ZXJ5IGxvYWRlZCBmaWxlIHdpbGwgbm93IGJlIGluIGl0cyBhc3NvY2lhdGVkIGNhY2hlIGFuZCByZWFkeSBmb3IgdXNlLlxyXG4gICAgICpcclxuICAgICAqIEFsc28gY2xlYXJzIGRvd24gdGhlIFNldHMsIHB1dHMgcHJvZ3Jlc3MgdG8gMSBhbmQgY2xlYXJzIHRoZSBkZWxldGlvbiBxdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2xvYWRDb21wbGV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0NPTVBMRVRFXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjUE9TVF9QUk9DRVNTXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgbG9hZENvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9TVF9QUk9DRVNTLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pbmZsaWdodC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMucXVldWUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5MT0FERVJfQ09NUExFVEU7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgQ2FsbCAnZGVzdHJveScgb24gZWFjaCBmaWxlIHJlYWR5IGZvciBkZWxldGlvblxyXG4gICAgICAgIHRoaXMuX2RlbGV0ZVF1ZXVlLml0ZXJhdGVMb2NhbCgnZGVzdHJveScpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTVBMRVRFLCB0aGlzLCB0aGlzLnRvdGFsQ29tcGxldGUsIHRoaXMudG90YWxGYWlsZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBGaWxlIGludG8gdGhlIHBlbmRpbmctZGVsZXRpb24gcXVldWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNmbGFnRm9yUmVtb3ZhbFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdG8gYmUgcXVldWVkIGZvciBkZWxldGlvbiB3aGVuIHRoZSBMb2FkZXIgY29tcGxldGVzLlxyXG4gICAgICovXHJcbiAgICBmbGFnRm9yUmVtb3ZhbDogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlUXVldWUuc2V0KGZpbGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBKU09OIGRhdGEgaW50byBhIGZpbGUgdGhhdCB0aGUgYnJvd3NlciB0aGVuIHByb21wdHMgeW91IHRvIGRvd25sb2FkIHNvIHlvdSBjYW4gc2F2ZSBpdCBsb2NhbGx5LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIG11c3QgYmUgd2VsbCBmb3JtZWQgSlNPTiBhbmQgcmVhZHktcGFyc2VkLCBub3QgYSBKYXZhU2NyaXB0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NhdmVKU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgSlNPTiBkYXRhLCByZWFkeSBwYXJzZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGVuYW1lPWZpbGUuanNvbl0gLSBUaGUgbmFtZSB0byBzYXZlIHRoZSBKU09OIGZpbGUgYXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIHBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgc2F2ZUpTT046IGZ1bmN0aW9uIChkYXRhLCBmaWxlbmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zYXZlKEpTT04uc3RyaW5naWZ5KGRhdGEpLCBmaWxlbmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2F1c2VzIHRoZSBicm93c2VyIHRvIHNhdmUgdGhlIGdpdmVuIGRhdGEgYXMgYSBmaWxlIHRvIGl0cyBkZWZhdWx0IERvd25sb2FkcyBmb2xkZXIuXHJcbiAgICAgKiBcclxuICAgICAqIENyZWF0ZXMgYSBET00gbGV2ZWwgYW5jaG9yIGxpbmssIGFzc2lnbnMgaXQgYXMgYmVpbmcgYSBgZG93bmxvYWRgIGFuY2hvciwgc2V0cyB0aGUgaHJlZlxyXG4gICAgICogdG8gYmUgYW4gT2JqZWN0VVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhLCBhbmQgdGhlbiBpbnZva2VzIGEgY2xpY2sgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzYXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgZGF0YSB0byBiZSBzYXZlZC4gV2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBVUkwuY3JlYXRlT2JqZWN0VVJMLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmaWxlbmFtZT1maWxlLmpzb25dIC0gVGhlIGZpbGVuYW1lIHRvIHNhdmUgdGhlIGZpbGUgYXMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGV0eXBlPWFwcGxpY2F0aW9uL2pzb25dIC0gVGhlIGZpbGUgdHlwZSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhlIGZpbGUuIERlZmF1bHRzIHRvIEpTT04uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIHBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgc2F2ZTogZnVuY3Rpb24gKGRhdGEsIGZpbGVuYW1lLCBmaWxldHlwZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgeyBmaWxlbmFtZSA9ICdmaWxlLmpzb24nOyB9XHJcbiAgICAgICAgaWYgKGZpbGV0eXBlID09PSB1bmRlZmluZWQpIHsgZmlsZXR5cGUgPSAnYXBwbGljYXRpb24vanNvbic7IH1cclxuXHJcbiAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbIGRhdGEgXSwgeyB0eXBlOiBmaWxldHlwZSB9KTtcclxuXHJcbiAgICAgICAgdmFyIHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cclxuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XHJcbiAgICAgICAgYS50ZXh0Q29udGVudCA9ICdEb3dubG9hZCAnICsgZmlsZW5hbWU7XHJcbiAgICAgICAgYS5ocmVmID0gdXJsO1xyXG4gICAgICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBMb2FkZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGNsZWFyIGFsbCBsaXN0cyBhbmQgcmVzZXQgdGhlIGJhc2UgVVJMLCBwYXRoIGFuZCBwcmVmaXguXHJcbiAgICAgKlxyXG4gICAgICogV2FybmluZzogSWYgdGhlIExvYWRlciBpcyBjdXJyZW50bHkgZG93bmxvYWRpbmcgZmlsZXMsIG9yIGhhcyBmaWxlcyBpbiBpdHMgcXVldWUsIHRoZXkgd2lsbCBiZSBhYm9ydGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxpc3QuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmluZmxpZ2h0LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5xdWV1ZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZUNvbmZpZyA9IHRoaXMuc3lzdGVtcy5nYW1lLmNvbmZpZztcclxuICAgICAgICB2YXIgc2NlbmVDb25maWcgPSB0aGlzLnN5c3RlbXMuc2V0dGluZ3MubG9hZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnYmFzZVVSTCcsIGdhbWVDb25maWcubG9hZGVyQmFzZVVSTCkpO1xyXG4gICAgICAgIHRoaXMuc2V0UGF0aChHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdwYXRoJywgZ2FtZUNvbmZpZy5sb2FkZXJQYXRoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcmVmaXgoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncHJlZml4JywgZ2FtZUNvbmZpZy5sb2FkZXJQcmVmaXgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkxPQURFUl9JRExFO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzaHV0ZG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5MT0FERVJfU0hVVERPV047XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuTE9BREVSX0RFU1RST1lFRDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMucGx1Z2luU3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW5mbGlnaHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVldWUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FjaGVNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lTWFuYWdlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdMb2FkZXInLCBMb2FkZXJQbHVnaW4sICdsb2FkJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlclBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/LoaderPlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/MergeXHRSettings.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/loader/MergeXHRSettings.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * Takes two XHRSettings Objects and creates a new XHRSettings object from them.\r\n *\r\n * The new object is seeded by the values given in the global settings, but any setting in\r\n * the local object overrides the global ones.\r\n *\r\n * @function Phaser.Loader.MergeXHRSettings\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} global - The global XHRSettings object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} local - The local XHRSettings object.\r\n *\r\n * @return {Phaser.Types.Loader.XHRSettingsObject} A newly formed XHRSettings object.\r\n */\r\nvar MergeXHRSettings = function (global, local)\r\n{\r\n    var output = (global === undefined) ? XHRSettings() : Extend({}, global);\r\n\r\n    if (local)\r\n    {\r\n        for (var setting in local)\r\n        {\r\n            if (local[setting] !== undefined)\r\n            {\r\n                output[setting] = local[setting];\r\n            }\r\n        }\r\n    }\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = MergeXHRSettings;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTWVyZ2VYSFJTZXR0aW5ncy5qcz9lMmY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksc0NBQXNDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9NZXJnZVhIUlNldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG52YXIgWEhSU2V0dGluZ3MgPSByZXF1aXJlKCcuL1hIUlNldHRpbmdzJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgdHdvIFhIUlNldHRpbmdzIE9iamVjdHMgYW5kIGNyZWF0ZXMgYSBuZXcgWEhSU2V0dGluZ3Mgb2JqZWN0IGZyb20gdGhlbS5cclxuICpcclxuICogVGhlIG5ldyBvYmplY3QgaXMgc2VlZGVkIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGdsb2JhbCBzZXR0aW5ncywgYnV0IGFueSBzZXR0aW5nIGluXHJcbiAqIHRoZSBsb2NhbCBvYmplY3Qgb3ZlcnJpZGVzIHRoZSBnbG9iYWwgb25lcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuTWVyZ2VYSFJTZXR0aW5nc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBnbG9iYWwgLSBUaGUgZ2xvYmFsIFhIUlNldHRpbmdzIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBsb2NhbCAtIFRoZSBsb2NhbCBYSFJTZXR0aW5ncyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IEEgbmV3bHkgZm9ybWVkIFhIUlNldHRpbmdzIG9iamVjdC5cclxuICovXHJcbnZhciBNZXJnZVhIUlNldHRpbmdzID0gZnVuY3Rpb24gKGdsb2JhbCwgbG9jYWwpXHJcbntcclxuICAgIHZhciBvdXRwdXQgPSAoZ2xvYmFsID09PSB1bmRlZmluZWQpID8gWEhSU2V0dGluZ3MoKSA6IEV4dGVuZCh7fSwgZ2xvYmFsKTtcclxuXHJcbiAgICBpZiAobG9jYWwpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgc2V0dGluZyBpbiBsb2NhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhbFtzZXR0aW5nXSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRbc2V0dGluZ10gPSBsb2NhbFtzZXR0aW5nXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXJnZVhIUlNldHRpbmdzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/MergeXHRSettings.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/MultiFile.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/loader/MultiFile.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A MultiFile is a special kind of parent that contains two, or more, Files as children and looks after\r\n * the loading and processing of them all. It is commonly extended and used as a base class for file types such as AtlasJSON or BitmapFont.\r\n * \r\n * You shouldn't create an instance of a MultiFile directly, but should extend it with your own class, setting a custom type and processing methods.\r\n *\r\n * @class MultiFile\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\r\n * @param {string} type - The file type string for sorting within the Loader.\r\n * @param {string} key - The key of the file within the loader.\r\n * @param {Phaser.Loader.File[]} files - An array of Files that make-up this MultiFile.\r\n */\r\nvar MultiFile = new Class({\r\n\r\n    initialize:\r\n\r\n    function MultiFile (loader, type, key, files)\r\n    {\r\n        /**\r\n         * A reference to the Loader that is going to load this file.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#loader\r\n         * @type {Phaser.Loader.LoaderPlugin}\r\n         * @since 3.7.0\r\n         */\r\n        this.loader = loader;\r\n\r\n        /**\r\n         * The file type string for sorting within the Loader.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#type\r\n         * @type {string}\r\n         * @since 3.7.0\r\n         */\r\n        this.type = type;\r\n\r\n        /**\r\n         * Unique cache key (unique within its file type)\r\n         *\r\n         * @name Phaser.Loader.MultiFile#key\r\n         * @type {string}\r\n         * @since 3.7.0\r\n         */\r\n        this.key = key;\r\n\r\n        /**\r\n         * The current index being used by multi-file loaders to avoid key clashes.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#multiKeyIndex\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.20.0\r\n         */\r\n        this.multiKeyIndex = loader.multiKeyIndex++;\r\n\r\n        /**\r\n         * Array of files that make up this MultiFile.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#files\r\n         * @type {Phaser.Loader.File[]}\r\n         * @since 3.7.0\r\n         */\r\n        this.files = files;\r\n\r\n        /**\r\n         * The completion status of this MultiFile.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#complete\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.7.0\r\n         */\r\n        this.complete = false;\r\n\r\n        /**\r\n         * The number of files to load.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#pending\r\n         * @type {integer}\r\n         * @since 3.7.0\r\n         */\r\n\r\n        this.pending = files.length;\r\n\r\n        /**\r\n         * The number of files that failed to load.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#failed\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.7.0\r\n         */\r\n        this.failed = 0;\r\n\r\n        /**\r\n         * A storage container for transient data that the loading files need.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#config\r\n         * @type {any}\r\n         * @since 3.7.0\r\n         */\r\n        this.config = {};\r\n\r\n        /**\r\n         * A reference to the Loaders baseURL at the time this MultiFile was created.\r\n         * Used to populate child-files.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#baseURL\r\n         * @type {string}\r\n         * @since 3.20.0\r\n         */\r\n        this.baseURL = loader.baseURL;\r\n\r\n        /**\r\n         * A reference to the Loaders path at the time this MultiFile was created.\r\n         * Used to populate child-files.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#path\r\n         * @type {string}\r\n         * @since 3.20.0\r\n         */\r\n        this.path = loader.path;\r\n\r\n        /**\r\n         * A reference to the Loaders prefix at the time this MultiFile was created.\r\n         * Used to populate child-files.\r\n         *\r\n         * @name Phaser.Loader.MultiFile#prefix\r\n         * @type {string}\r\n         * @since 3.20.0\r\n         */\r\n        this.prefix = loader.prefix;\r\n\r\n        //  Link the files\r\n        for (var i = 0; i < files.length; i++)\r\n        {\r\n            files[i].multiFile = this;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks if this MultiFile is ready to process its children or not.\r\n     *\r\n     * @method Phaser.Loader.MultiFile#isReadyToProcess\r\n     * @since 3.7.0\r\n     *\r\n     * @return {boolean} `true` if all children of this MultiFile have loaded, otherwise `false`.\r\n     */\r\n    isReadyToProcess: function ()\r\n    {\r\n        return (this.pending === 0 && this.failed === 0 && !this.complete);\r\n    },\r\n\r\n    /**\r\n     * Adds another child to this MultiFile, increases the pending count and resets the completion status.\r\n     *\r\n     * @method Phaser.Loader.MultiFile#addToMultiFile\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} files - The File to add to this MultiFile.\r\n     *\r\n     * @return {Phaser.Loader.MultiFile} This MultiFile instance.\r\n     */\r\n    addToMultiFile: function (file)\r\n    {\r\n        this.files.push(file);\r\n\r\n        file.multiFile = this;\r\n\r\n        this.pending++;\r\n\r\n        this.complete = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called by each File when it finishes loading.\r\n     *\r\n     * @method Phaser.Loader.MultiFile#onFileComplete\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n     */\r\n    onFileComplete: function (file)\r\n    {\r\n        var index = this.files.indexOf(file);\r\n\r\n        if (index !== -1)\r\n        {\r\n            this.pending--;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by each File that fails to load.\r\n     *\r\n     * @method Phaser.Loader.MultiFile#onFileFailed\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The File that has failed to load.\r\n     */\r\n    onFileFailed: function (file)\r\n    {\r\n        var index = this.files.indexOf(file);\r\n\r\n        if (index !== -1)\r\n        {\r\n            this.failed++;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MultiFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTXVsdGlGaWxlLmpzPzYwOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTXVsdGlGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBNdWx0aUZpbGUgaXMgYSBzcGVjaWFsIGtpbmQgb2YgcGFyZW50IHRoYXQgY29udGFpbnMgdHdvLCBvciBtb3JlLCBGaWxlcyBhcyBjaGlsZHJlbiBhbmQgbG9va3MgYWZ0ZXJcclxuICogdGhlIGxvYWRpbmcgYW5kIHByb2Nlc3Npbmcgb2YgdGhlbSBhbGwuIEl0IGlzIGNvbW1vbmx5IGV4dGVuZGVkIGFuZCB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgZmlsZSB0eXBlcyBzdWNoIGFzIEF0bGFzSlNPTiBvciBCaXRtYXBGb250LlxyXG4gKiBcclxuICogWW91IHNob3VsZG4ndCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBNdWx0aUZpbGUgZGlyZWN0bHksIGJ1dCBzaG91bGQgZXh0ZW5kIGl0IHdpdGggeW91ciBvd24gY2xhc3MsIHNldHRpbmcgYSBjdXN0b20gdHlwZSBhbmQgcHJvY2Vzc2luZyBtZXRob2RzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTXVsdGlGaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gVGhlIExvYWRlciB0aGF0IGlzIGdvaW5nIHRvIGxvYWQgdGhpcyBGaWxlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBmaWxlIHR5cGUgc3RyaW5nIGZvciBzb3J0aW5nIHdpdGhpbiB0aGUgTG9hZGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB3aXRoaW4gdGhlIGxvYWRlci5cclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGVbXX0gZmlsZXMgLSBBbiBhcnJheSBvZiBGaWxlcyB0aGF0IG1ha2UtdXAgdGhpcyBNdWx0aUZpbGUuXHJcbiAqL1xyXG52YXIgTXVsdGlGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE11bHRpRmlsZSAobG9hZGVyLCB0eXBlLCBrZXksIGZpbGVzKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyBnb2luZyB0byBsb2FkIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2xvYWRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpbGUgdHlwZSBzdHJpbmcgZm9yIHNvcnRpbmcgd2l0aGluIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVbmlxdWUgY2FjaGUga2V5ICh1bmlxdWUgd2l0aGluIGl0cyBmaWxlIHR5cGUpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNrZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBpbmRleCBiZWluZyB1c2VkIGJ5IG11bHRpLWZpbGUgbG9hZGVycyB0byBhdm9pZCBrZXkgY2xhc2hlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI211bHRpS2V5SW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11bHRpS2V5SW5kZXggPSBsb2FkZXIubXVsdGlLZXlJbmRleCsrO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBcnJheSBvZiBmaWxlcyB0aGF0IG1ha2UgdXAgdGhpcyBNdWx0aUZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNmaWxlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTG9hZGVyLkZpbGVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiB0aGlzIE11bHRpRmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2NvbXBsZXRlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZmlsZXMgdG8gbG9hZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI3BlbmRpbmdcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgZmFpbGVkIHRvIGxvYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNmYWlsZWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWlsZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHN0b3JhZ2UgY29udGFpbmVyIGZvciB0cmFuc2llbnQgZGF0YSB0aGF0IHRoZSBsb2FkaW5nIGZpbGVzIG5lZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNjb25maWdcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXJzIGJhc2VVUkwgYXQgdGhlIHRpbWUgdGhpcyBNdWx0aUZpbGUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgICAgICogVXNlZCB0byBwb3B1bGF0ZSBjaGlsZC1maWxlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2Jhc2VVUkxcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VVUkwgPSBsb2FkZXIuYmFzZVVSTDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlcnMgcGF0aCBhdCB0aGUgdGltZSB0aGlzIE11bHRpRmlsZSB3YXMgY3JlYXRlZC5cclxuICAgICAgICAgKiBVc2VkIHRvIHBvcHVsYXRlIGNoaWxkLWZpbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUjcGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF0aCA9IGxvYWRlci5wYXRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVycyBwcmVmaXggYXQgdGhlIHRpbWUgdGhpcyBNdWx0aUZpbGUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgICAgICogVXNlZCB0byBwb3B1bGF0ZSBjaGlsZC1maWxlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI3ByZWZpeFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJlZml4ID0gbG9hZGVyLnByZWZpeDtcclxuXHJcbiAgICAgICAgLy8gIExpbmsgdGhlIGZpbGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGVzW2ldLm11bHRpRmlsZSA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGlzIE11bHRpRmlsZSBpcyByZWFkeSB0byBwcm9jZXNzIGl0cyBjaGlsZHJlbiBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNpc1JlYWR5VG9Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYWxsIGNoaWxkcmVuIG9mIHRoaXMgTXVsdGlGaWxlIGhhdmUgbG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNSZWFkeVRvUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMucGVuZGluZyA9PT0gMCAmJiB0aGlzLmZhaWxlZCA9PT0gMCAmJiAhdGhpcy5jb21wbGV0ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbm90aGVyIGNoaWxkIHRvIHRoaXMgTXVsdGlGaWxlLCBpbmNyZWFzZXMgdGhlIHBlbmRpbmcgY291bnQgYW5kIHJlc2V0cyB0aGUgY29tcGxldGlvbiBzdGF0dXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNhZGRUb011bHRpRmlsZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGVzIC0gVGhlIEZpbGUgdG8gYWRkIHRvIHRoaXMgTXVsdGlGaWxlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTXVsdGlGaWxlfSBUaGlzIE11bHRpRmlsZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYWRkVG9NdWx0aUZpbGU6IGZ1bmN0aW9uIChmaWxlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcclxuXHJcbiAgICAgICAgZmlsZS5tdWx0aUZpbGUgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmcrKztcclxuXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgZWFjaCBGaWxlIHdoZW4gaXQgZmluaXNoZXMgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI29uRmlsZUNvbXBsZXRlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQgaGFzIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxyXG4gICAgICovXHJcbiAgICBvbkZpbGVDb21wbGV0ZTogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLS07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBlYWNoIEZpbGUgdGhhdCBmYWlscyB0byBsb2FkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUjb25GaWxlRmFpbGVkXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQgaGFzIGZhaWxlZCB0byBsb2FkLlxyXG4gICAgICovXHJcbiAgICBvbkZpbGVGYWlsZWQ6IGZ1bmN0aW9uIChmaWxlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkKys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/MultiFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/XHRLoader.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/loader/XHRLoader.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MergeXHRSettings = __webpack_require__(/*! ./MergeXHRSettings */ \"./node_modules/phaser/src/loader/MergeXHRSettings.js\");\r\n\r\n/**\r\n * Creates a new XMLHttpRequest (xhr) object based on the given File and XHRSettings\r\n * and starts the download of it. It uses the Files own XHRSettings and merges them\r\n * with the global XHRSettings object to set the xhr values before download.\r\n *\r\n * @function Phaser.Loader.XHRLoader\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File to download.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} globalXHRSettings - The global XHRSettings object.\r\n *\r\n * @return {XMLHttpRequest} The XHR object.\r\n */\r\nvar XHRLoader = function (file, globalXHRSettings)\r\n{\r\n    var config = MergeXHRSettings(globalXHRSettings, file.xhrSettings);\r\n\r\n    var xhr = new XMLHttpRequest();\r\n\r\n    xhr.open('GET', file.src, config.async, config.user, config.password);\r\n\r\n    xhr.responseType = file.xhrSettings.responseType;\r\n    xhr.timeout = config.timeout;\r\n\r\n    if (config.header && config.headerValue)\r\n    {\r\n        xhr.setRequestHeader(config.header, config.headerValue);\r\n    }\r\n\r\n    if (config.requestedWith)\r\n    {\r\n        xhr.setRequestHeader('X-Requested-With', config.requestedWith);\r\n    }\r\n\r\n    if (config.overrideMimeType)\r\n    {\r\n        xhr.overrideMimeType(config.overrideMimeType);\r\n    }\r\n\r\n    // After a successful request, the xhr.response property will contain the requested data as a DOMString, ArrayBuffer, Blob, or Document (depending on what was set for responseType.)\r\n\r\n    xhr.onload = file.onLoad.bind(file, xhr);\r\n    xhr.onerror = file.onError.bind(file, xhr);\r\n    xhr.onprogress = file.onProgress.bind(file);\r\n\r\n    //  This is the only standard method, the ones above are browser additions (maybe not universal?)\r\n    // xhr.onreadystatechange\r\n\r\n    xhr.send();\r\n\r\n    return xhr;\r\n};\r\n\r\nmodule.exports = XHRLoader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvWEhSTG9hZGVyLmpzPzBiZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGdGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9YSFJMb2FkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNZXJnZVhIUlNldHRpbmdzID0gcmVxdWlyZSgnLi9NZXJnZVhIUlNldHRpbmdzJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBYTUxIdHRwUmVxdWVzdCAoeGhyKSBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIEZpbGUgYW5kIFhIUlNldHRpbmdzXHJcbiAqIGFuZCBzdGFydHMgdGhlIGRvd25sb2FkIG9mIGl0LiBJdCB1c2VzIHRoZSBGaWxlcyBvd24gWEhSU2V0dGluZ3MgYW5kIG1lcmdlcyB0aGVtXHJcbiAqIHdpdGggdGhlIGdsb2JhbCBYSFJTZXR0aW5ncyBvYmplY3QgdG8gc2V0IHRoZSB4aHIgdmFsdWVzIGJlZm9yZSBkb3dubG9hZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuWEhSTG9hZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRvIGRvd25sb2FkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IGdsb2JhbFhIUlNldHRpbmdzIC0gVGhlIGdsb2JhbCBYSFJTZXR0aW5ncyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fSBUaGUgWEhSIG9iamVjdC5cclxuICovXHJcbnZhciBYSFJMb2FkZXIgPSBmdW5jdGlvbiAoZmlsZSwgZ2xvYmFsWEhSU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBNZXJnZVhIUlNldHRpbmdzKGdsb2JhbFhIUlNldHRpbmdzLCBmaWxlLnhoclNldHRpbmdzKTtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ0dFVCcsIGZpbGUuc3JjLCBjb25maWcuYXN5bmMsIGNvbmZpZy51c2VyLCBjb25maWcucGFzc3dvcmQpO1xyXG5cclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSBmaWxlLnhoclNldHRpbmdzLnJlc3BvbnNlVHlwZTtcclxuICAgIHhoci50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5oZWFkZXIgJiYgY29uZmlnLmhlYWRlclZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGNvbmZpZy5oZWFkZXIsIGNvbmZpZy5oZWFkZXJWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZXF1ZXN0ZWRXaXRoKVxyXG4gICAge1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgY29uZmlnLnJlcXVlc3RlZFdpdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcub3ZlcnJpZGVNaW1lVHlwZSlcclxuICAgIHtcclxuICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZShjb25maWcub3ZlcnJpZGVNaW1lVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWZ0ZXIgYSBzdWNjZXNzZnVsIHJlcXVlc3QsIHRoZSB4aHIucmVzcG9uc2UgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSByZXF1ZXN0ZWQgZGF0YSBhcyBhIERPTVN0cmluZywgQXJyYXlCdWZmZXIsIEJsb2IsIG9yIERvY3VtZW50IChkZXBlbmRpbmcgb24gd2hhdCB3YXMgc2V0IGZvciByZXNwb25zZVR5cGUuKVxyXG5cclxuICAgIHhoci5vbmxvYWQgPSBmaWxlLm9uTG9hZC5iaW5kKGZpbGUsIHhocik7XHJcbiAgICB4aHIub25lcnJvciA9IGZpbGUub25FcnJvci5iaW5kKGZpbGUsIHhocik7XHJcbiAgICB4aHIub25wcm9ncmVzcyA9IGZpbGUub25Qcm9ncmVzcy5iaW5kKGZpbGUpO1xyXG5cclxuICAgIC8vICBUaGlzIGlzIHRoZSBvbmx5IHN0YW5kYXJkIG1ldGhvZCwgdGhlIG9uZXMgYWJvdmUgYXJlIGJyb3dzZXIgYWRkaXRpb25zIChtYXliZSBub3QgdW5pdmVyc2FsPylcclxuICAgIC8vIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2VcclxuXHJcbiAgICB4aHIuc2VuZCgpO1xyXG5cclxuICAgIHJldHVybiB4aHI7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFhIUkxvYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/XHRLoader.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/XHRSettings.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/loader/XHRSettings.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates an XHRSettings Object with default values.\r\n *\r\n * @function Phaser.Loader.XHRSettings\r\n * @since 3.0.0\r\n *\r\n * @param {XMLHttpRequestResponseType} [responseType=''] - The responseType, such as 'text'.\r\n * @param {boolean} [async=true] - Should the XHR request use async or not?\r\n * @param {string} [user=''] - Optional username for the XHR request.\r\n * @param {string} [password=''] - Optional password for the XHR request.\r\n * @param {integer} [timeout=0] - Optional XHR timeout value.\r\n *\r\n * @return {Phaser.Types.Loader.XHRSettingsObject} The XHRSettings object as used by the Loader.\r\n */\r\nvar XHRSettings = function (responseType, async, user, password, timeout)\r\n{\r\n    if (responseType === undefined) { responseType = ''; }\r\n    if (async === undefined) { async = true; }\r\n    if (user === undefined) { user = ''; }\r\n    if (password === undefined) { password = ''; }\r\n    if (timeout === undefined) { timeout = 0; }\r\n\r\n    // Before sending a request, set the xhr.responseType to \"text\",\r\n    // \"arraybuffer\", \"blob\", or \"document\", depending on your data needs.\r\n    // Note, setting xhr.responseType = '' (or omitting) will default the response to \"text\".\r\n\r\n    return {\r\n\r\n        //  Ignored by the Loader, only used by File.\r\n        responseType: responseType,\r\n\r\n        async: async,\r\n\r\n        //  credentials\r\n        user: user,\r\n        password: password,\r\n\r\n        //  timeout in ms (0 = no timeout)\r\n        timeout: timeout,\r\n\r\n        //  setRequestHeader\r\n        header: undefined,\r\n        headerValue: undefined,\r\n        requestedWith: false,\r\n\r\n        //  overrideMimeType\r\n        overrideMimeType: undefined\r\n\r\n    };\r\n};\r\n\r\nmodule.exports = XHRSettings;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvWEhSU2V0dGluZ3MuanM/NWY3MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxzQ0FBc0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG1CQUFtQjtBQUN4RCw4QkFBOEIsY0FBYztBQUM1Qyw2QkFBNkIsV0FBVztBQUN4QyxpQ0FBaUMsZUFBZTtBQUNoRCxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL1hIUlNldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBYSFJTZXR0aW5ncyBPYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuWEhSU2V0dGluZ3NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3RSZXNwb25zZVR5cGV9IFtyZXNwb25zZVR5cGU9JyddIC0gVGhlIHJlc3BvbnNlVHlwZSwgc3VjaCBhcyAndGV4dCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPXRydWVdIC0gU2hvdWxkIHRoZSBYSFIgcmVxdWVzdCB1c2UgYXN5bmMgb3Igbm90P1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VzZXI9JyddIC0gT3B0aW9uYWwgdXNlcm5hbWUgZm9yIHRoZSBYSFIgcmVxdWVzdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXNzd29yZD0nJ10gLSBPcHRpb25hbCBwYXNzd29yZCBmb3IgdGhlIFhIUiByZXF1ZXN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aW1lb3V0PTBdIC0gT3B0aW9uYWwgWEhSIHRpbWVvdXQgdmFsdWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFRoZSBYSFJTZXR0aW5ncyBvYmplY3QgYXMgdXNlZCBieSB0aGUgTG9hZGVyLlxyXG4gKi9cclxudmFyIFhIUlNldHRpbmdzID0gZnVuY3Rpb24gKHJlc3BvbnNlVHlwZSwgYXN5bmMsIHVzZXIsIHBhc3N3b3JkLCB0aW1lb3V0KVxyXG57XHJcbiAgICBpZiAocmVzcG9uc2VUeXBlID09PSB1bmRlZmluZWQpIHsgcmVzcG9uc2VUeXBlID0gJyc7IH1cclxuICAgIGlmIChhc3luYyA9PT0gdW5kZWZpbmVkKSB7IGFzeW5jID0gdHJ1ZTsgfVxyXG4gICAgaWYgKHVzZXIgPT09IHVuZGVmaW5lZCkgeyB1c2VyID0gJyc7IH1cclxuICAgIGlmIChwYXNzd29yZCA9PT0gdW5kZWZpbmVkKSB7IHBhc3N3b3JkID0gJyc7IH1cclxuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHsgdGltZW91dCA9IDA7IH1cclxuXHJcbiAgICAvLyBCZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QsIHNldCB0aGUgeGhyLnJlc3BvbnNlVHlwZSB0byBcInRleHRcIixcclxuICAgIC8vIFwiYXJyYXlidWZmZXJcIiwgXCJibG9iXCIsIG9yIFwiZG9jdW1lbnRcIiwgZGVwZW5kaW5nIG9uIHlvdXIgZGF0YSBuZWVkcy5cclxuICAgIC8vIE5vdGUsIHNldHRpbmcgeGhyLnJlc3BvbnNlVHlwZSA9ICcnIChvciBvbWl0dGluZykgd2lsbCBkZWZhdWx0IHRoZSByZXNwb25zZSB0byBcInRleHRcIi5cclxuXHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICAvLyAgSWdub3JlZCBieSB0aGUgTG9hZGVyLCBvbmx5IHVzZWQgYnkgRmlsZS5cclxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSxcclxuXHJcbiAgICAgICAgYXN5bmM6IGFzeW5jLFxyXG5cclxuICAgICAgICAvLyAgY3JlZGVudGlhbHNcclxuICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuXHJcbiAgICAgICAgLy8gIHRpbWVvdXQgaW4gbXMgKDAgPSBubyB0aW1lb3V0KVxyXG4gICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXHJcblxyXG4gICAgICAgIC8vICBzZXRSZXF1ZXN0SGVhZGVyXHJcbiAgICAgICAgaGVhZGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaGVhZGVyVmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICByZXF1ZXN0ZWRXaXRoOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gIG92ZXJyaWRlTWltZVR5cGVcclxuICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiB1bmRlZmluZWRcclxuXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBYSFJTZXR0aW5ncztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/XHRSettings.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/const.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/loader/const.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FILE_CONST = {\r\n\r\n    /**\r\n     * The Loader is idle.\r\n     * \r\n     * @name Phaser.Loader.LOADER_IDLE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_IDLE: 0,\r\n\r\n    /**\r\n     * The Loader is actively loading.\r\n     * \r\n     * @name Phaser.Loader.LOADER_LOADING\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_LOADING: 1,\r\n\r\n    /**\r\n     * The Loader is processing files is has loaded.\r\n     * \r\n     * @name Phaser.Loader.LOADER_PROCESSING\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_PROCESSING: 2,\r\n\r\n    /**\r\n     * The Loader has completed loading and processing.\r\n     * \r\n     * @name Phaser.Loader.LOADER_COMPLETE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_COMPLETE: 3,\r\n\r\n    /**\r\n     * The Loader is shutting down.\r\n     * \r\n     * @name Phaser.Loader.LOADER_SHUTDOWN\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_SHUTDOWN: 4,\r\n\r\n    /**\r\n     * The Loader has been destroyed.\r\n     * \r\n     * @name Phaser.Loader.LOADER_DESTROYED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADER_DESTROYED: 5,\r\n\r\n    /**\r\n     * File is in the load queue but not yet started\r\n     * \r\n     * @name Phaser.Loader.FILE_PENDING\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_PENDING: 10,\r\n\r\n    /**\r\n     * File has been started to load by the loader (onLoad called)\r\n     * \r\n     * @name Phaser.Loader.FILE_LOADING\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_LOADING: 11,\r\n\r\n    /**\r\n     * File has loaded successfully, awaiting processing    \r\n     * \r\n     * @name Phaser.Loader.FILE_LOADED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_LOADED: 12,\r\n\r\n    /**\r\n     * File failed to load\r\n     * \r\n     * @name Phaser.Loader.FILE_FAILED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_FAILED: 13,\r\n\r\n    /**\r\n     * File is being processed (onProcess callback)\r\n     * \r\n     * @name Phaser.Loader.FILE_PROCESSING\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_PROCESSING: 14,\r\n\r\n    /**\r\n     * The File has errored somehow during processing.\r\n     * \r\n     * @name Phaser.Loader.FILE_ERRORED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_ERRORED: 16,\r\n\r\n    /**\r\n     * File has finished processing.\r\n     * \r\n     * @name Phaser.Loader.FILE_COMPLETE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_COMPLETE: 17,\r\n\r\n    /**\r\n     * File has been destroyed\r\n     * \r\n     * @name Phaser.Loader.FILE_DESTROYED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_DESTROYED: 18,\r\n\r\n    /**\r\n     * File was populated from local data and doesn't need an HTTP request\r\n     * \r\n     * @name Phaser.Loader.FILE_POPULATED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    FILE_POPULATED: 19\r\n\r\n};\r\n\r\nmodule.exports = FILE_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvY29uc3QuanM/MzhiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGSUxFX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIExvYWRlciBpcyBpZGxlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxPQURFUl9JRExFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBMT0FERVJfSURMRTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaXMgYWN0aXZlbHkgbG9hZGluZy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfTE9BRElOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTE9BREVSX0xPQURJTkc6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTG9hZGVyIGlzIHByb2Nlc3NpbmcgZmlsZXMgaXMgaGFzIGxvYWRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfUFJPQ0VTU0lOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTE9BREVSX1BST0NFU1NJTkc6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTG9hZGVyIGhhcyBjb21wbGV0ZWQgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfQ09NUExFVEVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9DT01QTEVURTogMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfU0hVVERPV05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9TSFVURE9XTjogNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaGFzIGJlZW4gZGVzdHJveWVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxPQURFUl9ERVNUUk9ZRURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9ERVNUUk9ZRUQ6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGlzIGluIHRoZSBsb2FkIHF1ZXVlIGJ1dCBub3QgeWV0IHN0YXJ0ZWRcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX1BFTkRJTkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUEVORElORzogMTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGhhcyBiZWVuIHN0YXJ0ZWQgdG8gbG9hZCBieSB0aGUgbG9hZGVyIChvbkxvYWQgY2FsbGVkKVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfTE9BRElOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9MT0FESU5HOiAxMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgaGFzIGxvYWRlZCBzdWNjZXNzZnVsbHksIGF3YWl0aW5nIHByb2Nlc3NpbmcgICAgXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9MT0FERURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfTE9BREVEOiAxMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgZmFpbGVkIHRvIGxvYWRcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX0ZBSUxFRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9GQUlMRUQ6IDEzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsZSBpcyBiZWluZyBwcm9jZXNzZWQgKG9uUHJvY2VzcyBjYWxsYmFjaylcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX1BST0NFU1NJTkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUFJPQ0VTU0lORzogMTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRmlsZSBoYXMgZXJyb3JlZCBzb21laG93IGR1cmluZyBwcm9jZXNzaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfRVJST1JFRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9FUlJPUkVEOiAxNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9DT01QTEVURVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9DT01QTEVURTogMTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGhhcyBiZWVuIGRlc3Ryb3llZFxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfREVTVFJPWUVEXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGSUxFX0RFU1RST1lFRDogMTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIHdhcyBwb3B1bGF0ZWQgZnJvbSBsb2NhbCBkYXRhIGFuZCBkb2Vzbid0IG5lZWQgYW4gSFRUUCByZXF1ZXN0XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9QT1BVTEFURURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUE9QVUxBVEVEOiAxOVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRklMRV9DT05TVDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/ADD_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/ADD_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Add File Event.\r\n * \r\n * This event is dispatched when a new file is successfully added to the Loader and placed into the load queue.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('addfile', listener)`.\r\n * \r\n * If you add lots of files to a Loader from a `preload` method, it will dispatch this event for each one of them.\r\n *\r\n * @event Phaser.Loader.Events#ADD\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The unique key of the file that was added to the Loader.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} string of the file that was added to the Loader, i.e. `image`.\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n * @param {Phaser.Loader.File} file - A reference to the File which was added to the Loader.\r\n */\r\nmodule.exports = 'addfile';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0FERF9FVkVOVC5qcz85MGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPLHdCQUF3Qiw4QkFBOEI7QUFDeEUsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvQUREX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gQWRkIEZpbGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgTG9hZGVyIGFuZCBwbGFjZWQgaW50byB0aGUgbG9hZCBxdWV1ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2FkZGZpbGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogSWYgeW91IGFkZCBsb3RzIG9mIGZpbGVzIHRvIGEgTG9hZGVyIGZyb20gYSBgcHJlbG9hZGAgbWV0aG9kLCBpdCB3aWxsIGRpc3BhdGNoIHRoaXMgZXZlbnQgZm9yIGVhY2ggb25lIG9mIHRoZW0uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNBRERcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGZpbGUgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIExvYWRlci5cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgW2ZpbGUgdHlwZV17QGxpbmsgUGhhc2VyLkxvYWRlci5GaWxlI3R5cGV9IHN0cmluZyBvZiB0aGUgZmlsZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgTG9hZGVyLCBpLmUuIGBpbWFnZWAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBGaWxlIHdoaWNoIHdhcyBhZGRlZCB0byB0aGUgTG9hZGVyLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYWRkZmlsZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/ADD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Complete Event.\r\n * \r\n * This event is dispatched when the Loader has fully processed everything in the load queue.\r\n * By this point every loaded file will now be in its associated cache and ready for use.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('complete', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n * @param {integer} totalComplete - The total number of files that successfully loaded.\r\n * @param {integer} totalFailed - The total number of files that failed to load.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0NPTVBMRVRFX0VWRU5ULmpzPzYxODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIGhhcyBmdWxseSBwcm9jZXNzZWQgZXZlcnl0aGluZyBpbiB0aGUgbG9hZCBxdWV1ZS5cclxuICogQnkgdGhpcyBwb2ludCBldmVyeSBsb2FkZWQgZmlsZSB3aWxsIG5vdyBiZSBpbiBpdHMgYXNzb2NpYXRlZCBjYWNoZSBhbmQgcmVhZHkgZm9yIHVzZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI0NPTVBMRVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciBQbHVnaW4gdGhhdCBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdG90YWxDb21wbGV0ZSAtIFRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgdGhhdCBzdWNjZXNzZnVsbHkgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRvdGFsRmFpbGVkIC0gVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGZhaWxlZCB0byBsb2FkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Complete Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when any file in the queue finishes loading.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('filecomplete', listener)`.\r\n * \r\n * You can also listen for the completion of a specific file. See the [FILE_KEY_COMPLETE]{@linkcode Phaser.Loader.Events#event:FILE_KEY_COMPLETE} event.\r\n *\r\n * @event Phaser.Loader.Events#FILE_COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the file that just loaded and finished processing.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} of the file that just loaded, i.e. `image`.\r\n * @param {any} data - The raw data the file contained.\r\n */\r\nmodule.exports = 'filecomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfQ09NUExFVEVfRVZFTlQuanM/MmFhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEYsdURBQXVEO0FBQ2pKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyx3QkFBd0IsOEJBQThCO0FBQ3hFLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgRmlsZSBMb2FkIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBMb2FkZXIgUGx1Z2luIHdoZW4gYW55IGZpbGUgaW4gdGhlIHF1ZXVlIGZpbmlzaGVzIGxvYWRpbmcuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5sb2FkLm9uKCdmaWxlY29tcGxldGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBmaWxlLiBTZWUgdGhlIFtGSUxFX0tFWV9DT01QTEVURV17QGxpbmtjb2RlIFBoYXNlci5Mb2FkZXIuRXZlbnRzI2V2ZW50OkZJTEVfS0VZX0NPTVBMRVRFfSBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB0aGF0IGp1c3QgbG9hZGVkIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBbZmlsZSB0eXBlXXtAbGluayBQaGFzZXIuTG9hZGVyLkZpbGUjdHlwZX0gb2YgdGhlIGZpbGUgdGhhdCBqdXN0IGxvYWRlZCwgaS5lLiBgaW1hZ2VgLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIFRoZSByYXcgZGF0YSB0aGUgZmlsZSBjb250YWluZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Complete Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when any file in the queue finishes loading.\r\n * \r\n * It uses a special dynamic event name constructed from the key and type of the file.\r\n * \r\n * For example, if you have loaded an `image` with a key of `monster`, you can listen for it\r\n * using the following:\r\n *\r\n * ```javascript\r\n * this.load.on('filecomplete-image-monster', function (key, type, data) {\r\n *     // Your handler code\r\n * });\r\n * ```\r\n *\r\n * Or, if you have loaded a texture `atlas` with a key of `Level1`:\r\n * \r\n * ```javascript\r\n * this.load.on('filecomplete-atlas-Level1', function (key, type, data) {\r\n *     // Your handler code\r\n * });\r\n * ```\r\n * \r\n * Or, if you have loaded a sprite sheet with a key of `Explosion` and a prefix of `GAMEOVER`:\r\n * \r\n * ```javascript\r\n * this.load.on('filecomplete-spritesheet-GAMEOVERExplosion', function (key, type, data) {\r\n *     // Your handler code\r\n * });\r\n * ```\r\n * \r\n * You can also listen for the generic completion of files. See the [FILE_COMPLETE]{@linkcode Phaser.Loader.Events#event:FILE_COMPLETE} event.\r\n *\r\n * @event Phaser.Loader.Events#FILE_KEY_COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the file that just loaded and finished processing.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} of the file that just loaded, i.e. `image`.\r\n * @param {any} data - The raw data the file contained.\r\n */\r\nmodule.exports = 'filecomplete-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfS0VZX0NPTVBMRVRFX0VWRU5ULmpzPzRmZDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxvRkFBb0YsbURBQW1EO0FBQ3ZJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyx3QkFBd0IsOEJBQThCO0FBQ3hFLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfS0VZX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiB3aGVuIGFueSBmaWxlIGluIHRoZSBxdWV1ZSBmaW5pc2hlcyBsb2FkaW5nLlxyXG4gKiBcclxuICogSXQgdXNlcyBhIHNwZWNpYWwgZHluYW1pYyBldmVudCBuYW1lIGNvbnN0cnVjdGVkIGZyb20gdGhlIGtleSBhbmQgdHlwZSBvZiB0aGUgZmlsZS5cclxuICogXHJcbiAqIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBsb2FkZWQgYW4gYGltYWdlYCB3aXRoIGEga2V5IG9mIGBtb25zdGVyYCwgeW91IGNhbiBsaXN0ZW4gZm9yIGl0XHJcbiAqIHVzaW5nIHRoZSBmb2xsb3dpbmc6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLm9uKCdmaWxlY29tcGxldGUtaW1hZ2UtbW9uc3RlcicsIGZ1bmN0aW9uIChrZXksIHR5cGUsIGRhdGEpIHtcclxuICogICAgIC8vIFlvdXIgaGFuZGxlciBjb2RlXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogT3IsIGlmIHlvdSBoYXZlIGxvYWRlZCBhIHRleHR1cmUgYGF0bGFzYCB3aXRoIGEga2V5IG9mIGBMZXZlbDFgOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQub24oJ2ZpbGVjb21wbGV0ZS1hdGxhcy1MZXZlbDEnLCBmdW5jdGlvbiAoa2V5LCB0eXBlLCBkYXRhKSB7XHJcbiAqICAgICAvLyBZb3VyIGhhbmRsZXIgY29kZVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBPciwgaWYgeW91IGhhdmUgbG9hZGVkIGEgc3ByaXRlIHNoZWV0IHdpdGggYSBrZXkgb2YgYEV4cGxvc2lvbmAgYW5kIGEgcHJlZml4IG9mIGBHQU1FT1ZFUmA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5vbignZmlsZWNvbXBsZXRlLXNwcml0ZXNoZWV0LUdBTUVPVkVSRXhwbG9zaW9uJywgZnVuY3Rpb24gKGtleSwgdHlwZSwgZGF0YSkge1xyXG4gKiAgICAgLy8gWW91ciBoYW5kbGVyIGNvZGVcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgdGhlIGdlbmVyaWMgY29tcGxldGlvbiBvZiBmaWxlcy4gU2VlIHRoZSBbRklMRV9DT01QTEVURV17QGxpbmtjb2RlIFBoYXNlci5Mb2FkZXIuRXZlbnRzI2V2ZW50OkZJTEVfQ09NUExFVEV9IGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9LRVlfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB0aGF0IGp1c3QgbG9hZGVkIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBbZmlsZSB0eXBlXXtAbGluayBQaGFzZXIuTG9hZGVyLkZpbGUjdHlwZX0gb2YgdGhlIGZpbGUgdGhhdCBqdXN0IGxvYWRlZCwgaS5lLiBgaW1hZ2VgLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIFRoZSByYXcgZGF0YSB0aGUgZmlsZSBjb250YWluZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlY29tcGxldGUtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Error Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when a file fails to load.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('loaderror', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_LOAD_ERROR\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which errored during load.\r\n */\r\nmodule.exports = 'loaderror';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVC5qcz83YjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBGaWxlIExvYWQgRXJyb3IgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIExvYWRlciBQbHVnaW4gd2hlbiBhIGZpbGUgZmFpbHMgdG8gbG9hZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2xvYWRlcnJvcicsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX0xPQURfRVJST1JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBGaWxlIHdoaWNoIGVycm9yZWQgZHVyaW5nIGxvYWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdsb2FkZXJyb3InO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when a file finishes loading,\r\n * but _before_ it is processed and added to the internal Phaser caches.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('load', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_LOAD\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which just finished loading.\r\n */\r\nmodule.exports = 'load';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FVkVOVC5qcz8wZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvRklMRV9MT0FEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiB3aGVuIGEgZmlsZSBmaW5pc2hlcyBsb2FkaW5nLFxyXG4gKiBidXQgX2JlZm9yZV8gaXQgaXMgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgaW50ZXJuYWwgUGhhc2VyIGNhY2hlcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2xvYWQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBBIHJlZmVyZW5jZSB0byB0aGUgRmlsZSB3aGljaCBqdXN0IGZpbmlzaGVkIGxvYWRpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdsb2FkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Progress Event.\r\n * \r\n * This event is dispatched by the Loader Plugin during the load of a file, if the browser receives a DOM ProgressEvent and\r\n * the `lengthComputable` event property is true. Depending on the size of the file and browser in use, this may, or may not happen.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('fileprogress', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_PROGRESS\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which errored during load.\r\n * @param {number} percentComplete - A value between 0 and 1 indicating how 'complete' this file is.\r\n */\r\nmodule.exports = 'fileprogress';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfUFJPR1JFU1NfRVZFTlQuanM/ODg0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2V2ZW50cy9GSUxFX1BST0dSRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBQcm9ncmVzcyBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiBkdXJpbmcgdGhlIGxvYWQgb2YgYSBmaWxlLCBpZiB0aGUgYnJvd3NlciByZWNlaXZlcyBhIERPTSBQcm9ncmVzc0V2ZW50IGFuZFxyXG4gKiB0aGUgYGxlbmd0aENvbXB1dGFibGVgIGV2ZW50IHByb3BlcnR5IGlzIHRydWUuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBhbmQgYnJvd3NlciBpbiB1c2UsIHRoaXMgbWF5LCBvciBtYXkgbm90IGhhcHBlbi5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2ZpbGVwcm9ncmVzcycsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX1BST0dSRVNTXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBBIHJlZmVyZW5jZSB0byB0aGUgRmlsZSB3aGljaCBlcnJvcmVkIGR1cmluZyBsb2FkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyY2VudENvbXBsZXRlIC0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgJ2NvbXBsZXRlJyB0aGlzIGZpbGUgaXMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlcHJvZ3Jlc3MnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Post Process Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when the Loader has finished loading everything in the load queue.\r\n * It is dispatched before the internal lists are cleared and each File is destroyed.\r\n * \r\n * Use this hook to perform any last minute processing of files that can only happen once the\r\n * Loader has completed, but prior to it emitting the `complete` event.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('postprocess', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#POST_PROCESS\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n */\r\nmodule.exports = 'postprocess';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BPU1RfUFJPQ0VTU19FVkVOVC5qcz84MWFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvUE9TVF9QUk9DRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gUG9zdCBQcm9jZXNzIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBMb2FkZXIgUGx1Z2luIHdoZW4gdGhlIExvYWRlciBoYXMgZmluaXNoZWQgbG9hZGluZyBldmVyeXRoaW5nIGluIHRoZSBsb2FkIHF1ZXVlLlxyXG4gKiBJdCBpcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGUgaW50ZXJuYWwgbGlzdHMgYXJlIGNsZWFyZWQgYW5kIGVhY2ggRmlsZSBpcyBkZXN0cm95ZWQuXHJcbiAqIFxyXG4gKiBVc2UgdGhpcyBob29rIHRvIHBlcmZvcm0gYW55IGxhc3QgbWludXRlIHByb2Nlc3Npbmcgb2YgZmlsZXMgdGhhdCBjYW4gb25seSBoYXBwZW4gb25jZSB0aGVcclxuICogTG9hZGVyIGhhcyBjb21wbGV0ZWQsIGJ1dCBwcmlvciB0byBpdCBlbWl0dGluZyB0aGUgYGNvbXBsZXRlYCBldmVudC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ3Bvc3Rwcm9jZXNzJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI1BPU1RfUFJPQ0VTU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHByb2Nlc3MnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Progress Event.\r\n * \r\n * This event is dispatched when the Loader updates its load progress, typically as a result of a file having completed loading.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('progress', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#PROGRESS\r\n * @since 3.0.0\r\n * \r\n * @param {number} progress - The current progress of the load. A value between 0 and 1.\r\n */\r\nmodule.exports = 'progress';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BST0dSRVNTX0VWRU5ULmpzP2FlMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BST0dSRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gUHJvZ3Jlc3MgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIHVwZGF0ZXMgaXRzIGxvYWQgcHJvZ3Jlc3MsIHR5cGljYWxseSBhcyBhIHJlc3VsdCBvZiBhIGZpbGUgaGF2aW5nIGNvbXBsZXRlZCBsb2FkaW5nLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZzogYHRoaXMubG9hZC5vbigncHJvZ3Jlc3MnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjUFJPR1JFU1NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvZ3Jlc3MgLSBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbG9hZC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwcm9ncmVzcyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/START_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/START_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Start Event.\r\n * \r\n * This event is dispatched when the Loader starts running. At this point load progress is zero.\r\n * \r\n * This event is dispatched even if there aren't any files in the load queue.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('start', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1NUQVJUX0VWRU5ULmpzPzY1MGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIHN0YXJ0cyBydW5uaW5nLiBBdCB0aGlzIHBvaW50IGxvYWQgcHJvZ3Jlc3MgaXMgemVyby5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBldmVuIGlmIHRoZXJlIGFyZW4ndCBhbnkgZmlsZXMgaW4gdGhlIGxvYWQgcXVldWUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5sb2FkLm9uKCdzdGFydCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNTVEFSVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/events/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/loader/events/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Loader.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ADD: __webpack_require__(/*! ./ADD_EVENT */ \"./node_modules/phaser/src/loader/events/ADD_EVENT.js\"),\r\n    COMPLETE: __webpack_require__(/*! ./COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js\"),\r\n    FILE_COMPLETE: __webpack_require__(/*! ./FILE_COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js\"),\r\n    FILE_KEY_COMPLETE: __webpack_require__(/*! ./FILE_KEY_COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js\"),\r\n    FILE_LOAD_ERROR: __webpack_require__(/*! ./FILE_LOAD_ERROR_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js\"),\r\n    FILE_LOAD: __webpack_require__(/*! ./FILE_LOAD_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js\"),\r\n    FILE_PROGRESS: __webpack_require__(/*! ./FILE_PROGRESS_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js\"),\r\n    POST_PROCESS: __webpack_require__(/*! ./POST_PROCESS_EVENT */ \"./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js\"),\r\n    PROGRESS: __webpack_require__(/*! ./PROGRESS_EVENT */ \"./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js\"),\r\n    START: __webpack_require__(/*! ./START_EVENT */ \"./node_modules/phaser/src/loader/events/START_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL2luZGV4LmpzPzFkN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTLG1CQUFPLENBQUMseUVBQWE7QUFDOUIsY0FBYyxtQkFBTyxDQUFDLG1GQUFrQjtBQUN4QyxtQkFBbUIsbUJBQU8sQ0FBQyw2RkFBdUI7QUFDbEQsdUJBQXVCLG1CQUFPLENBQUMscUdBQTJCO0FBQzFELHFCQUFxQixtQkFBTyxDQUFDLGlHQUF5QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMscUZBQW1CO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDZGQUF1QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBc0I7QUFDaEQsY0FBYyxtQkFBTyxDQUFDLG1GQUFrQjtBQUN4QyxXQUFXLG1CQUFPLENBQUMsNkVBQWU7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkxvYWRlci5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBREQ6IHJlcXVpcmUoJy4vQUREX0VWRU5UJyksXHJcbiAgICBDT01QTEVURTogcmVxdWlyZSgnLi9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRklMRV9DT01QTEVURTogcmVxdWlyZSgnLi9GSUxFX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBGSUxFX0tFWV9DT01QTEVURTogcmVxdWlyZSgnLi9GSUxFX0tFWV9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRklMRV9MT0FEX0VSUk9SOiByZXF1aXJlKCcuL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVCcpLFxyXG4gICAgRklMRV9MT0FEOiByZXF1aXJlKCcuL0ZJTEVfTE9BRF9FVkVOVCcpLFxyXG4gICAgRklMRV9QUk9HUkVTUzogcmVxdWlyZSgnLi9GSUxFX1BST0dSRVNTX0VWRU5UJyksXHJcbiAgICBQT1NUX1BST0NFU1M6IHJlcXVpcmUoJy4vUE9TVF9QUk9DRVNTX0VWRU5UJyksXHJcbiAgICBQUk9HUkVTUzogcmVxdWlyZSgnLi9QUk9HUkVTU19FVkVOVCcpLFxyXG4gICAgU1RBUlQ6IHJlcXVpcmUoJy4vU1RBUlRfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar LoaderEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Animation JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#animation method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#animation.\r\n *\r\n * @class AnimationJSONFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar AnimationJSONFile = new Class({\r\n\r\n    Extends: JSONFile,\r\n\r\n    initialize:\r\n\r\n    //  url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n    //  dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n    function AnimationJSONFile (loader, key, url, xhrSettings, dataKey)\r\n    {\r\n        JSONFile.call(this, loader, key, url, xhrSettings, dataKey);\r\n\r\n        this.type = 'animationJSON';\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AnimationJSONFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        //  We need to hook into this event:\r\n        this.loader.once(LoaderEvents.POST_PROCESS, this.onLoadComplete, this);\r\n\r\n        //  But the rest is the same as a normal JSON file\r\n        JSONFile.prototype.onProcess.call(this);\r\n    },\r\n\r\n    /**\r\n     * Called at the end of the load process, after the Loader has finished all files in its queue.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AnimationJSONFile#onLoadComplete\r\n     * @since 3.7.0\r\n     */\r\n    onLoadComplete: function ()\r\n    {\r\n        this.loader.systems.anims.fromJSON(this.data);\r\n\r\n        this.pendingDestroy();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an Animation JSON Data file, or array of Animation JSON files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.animation('baddieAnims', 'files/BaddieAnims.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.animation({\r\n *     key: 'baddieAnims',\r\n *     url: 'files/BaddieAnims.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.JSONFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be passed to the global Animation Managers `fromJSON` method.\r\n * This will parse all of the JSON data and create animation data from it. This process happens at the very end\r\n * of the Loader, once every other file in the load queue has finished. The reason for this is to allow you to load\r\n * both animation data and the images it relies upon in the same load call.\r\n *\r\n * Once the animation data has been parsed you will be able to play animations using that data.\r\n * Please see the Animation Manager `fromJSON` method for more details about the format and playback.\r\n * \r\n * You can also access the raw animation data from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.animation('baddieAnims', 'files/BaddieAnims.json');\r\n * // and later in your game ...\r\n * var data = this.cache.json.get('baddieAnims');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n *     \"level1\": {\r\n *         \"baddies\": {\r\n *             \"aliens\": {},\r\n *             \"boss\": {}\r\n *         }\r\n *     },\r\n *     \"level2\": {},\r\n *     \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And if you only wanted to create animations from the `boss` data, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#animation\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig|Phaser.Types.Loader.FileTypes.JSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the Animation JSON file loads only this property will be stored in the Cache and used to create animation data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('animation', function (key, url, dataKey, xhrSettings)\r\n{\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            this.addFile(new AnimationJSONFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new AnimationJSONFile(this, key, url, xhrSettings, dataKey));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = AnimationJSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0FuaW1hdGlvbkpTT05GaWxlLmpzPzIzZGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyw2RUFBZTtBQUN0QyxtQkFBbUIsbUJBQU8sQ0FBQyxtRUFBVzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsc0RBQXNEO0FBQ2pFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvQW5pbWF0aW9uSlNPTkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgSlNPTkZpbGUgPSByZXF1aXJlKCcuL0pTT05GaWxlLmpzJyk7XHJcbnZhciBMb2FkZXJFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEFuaW1hdGlvbiBKU09OIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhbmltYXRpb24gbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhbmltYXRpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBBbmltYXRpb25KU09ORmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICovXHJcbnZhciBBbmltYXRpb25KU09ORmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogSlNPTkZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdXJsIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBsaWtlIGEgcHJvcGVyIHVybCwgb3IgYW4gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSByZWFkeS1tYWRlIEpTIE9iamVjdFxyXG4gICAgLy8gIGRhdGFLZXkgYWxsb3dzIHlvdSB0byBwbHVjayBhIHNwZWNpZmljIG9iamVjdCBvdXQgb2YgdGhlIEpTT04gYW5kIHB1dCBqdXN0IHRoYXQgaW50byB0aGUgY2FjaGUsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZ1xyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkpTT05GaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YUtleSlcclxuICAgIHtcclxuICAgICAgICBKU09ORmlsZS5jYWxsKHRoaXMsIGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KTtcclxuXHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2FuaW1hdGlvbkpTT04nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkFuaW1hdGlvbkpTT05GaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAgV2UgbmVlZCB0byBob29rIGludG8gdGhpcyBldmVudDpcclxuICAgICAgICB0aGlzLmxvYWRlci5vbmNlKExvYWRlckV2ZW50cy5QT1NUX1BST0NFU1MsIHRoaXMub25Mb2FkQ29tcGxldGUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgQnV0IHRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIGEgbm9ybWFsIEpTT04gZmlsZVxyXG4gICAgICAgIEpTT05GaWxlLnByb3RvdHlwZS5vblByb2Nlc3MuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzLCBhZnRlciB0aGUgTG9hZGVyIGhhcyBmaW5pc2hlZCBhbGwgZmlsZXMgaW4gaXRzIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQW5pbWF0aW9uSlNPTkZpbGUjb25Mb2FkQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvbkxvYWRDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvYWRlci5zeXN0ZW1zLmFuaW1zLmZyb21KU09OKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gQW5pbWF0aW9uIEpTT04gRGF0YSBmaWxlLCBvciBhcnJheSBvZiBBbmltYXRpb24gSlNPTiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmFuaW1hdGlvbignYmFkZGllQW5pbXMnLCAnZmlsZXMvQmFkZGllQW5pbXMuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hbmltYXRpb24oe1xyXG4gKiAgICAga2V5OiAnYmFkZGllQW5pbXMnLFxyXG4gKiAgICAgdXJsOiAnZmlsZXMvQmFkZGllQW5pbXMuanNvbidcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcGFzc2VkIHRvIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXJzIGBmcm9tSlNPTmAgbWV0aG9kLlxyXG4gKiBUaGlzIHdpbGwgcGFyc2UgYWxsIG9mIHRoZSBKU09OIGRhdGEgYW5kIGNyZWF0ZSBhbmltYXRpb24gZGF0YSBmcm9tIGl0LiBUaGlzIHByb2Nlc3MgaGFwcGVucyBhdCB0aGUgdmVyeSBlbmRcclxuICogb2YgdGhlIExvYWRlciwgb25jZSBldmVyeSBvdGhlciBmaWxlIGluIHRoZSBsb2FkIHF1ZXVlIGhhcyBmaW5pc2hlZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8gbG9hZFxyXG4gKiBib3RoIGFuaW1hdGlvbiBkYXRhIGFuZCB0aGUgaW1hZ2VzIGl0IHJlbGllcyB1cG9uIGluIHRoZSBzYW1lIGxvYWQgY2FsbC5cclxuICpcclxuICogT25jZSB0aGUgYW5pbWF0aW9uIGRhdGEgaGFzIGJlZW4gcGFyc2VkIHlvdSB3aWxsIGJlIGFibGUgdG8gcGxheSBhbmltYXRpb25zIHVzaW5nIHRoYXQgZGF0YS5cclxuICogUGxlYXNlIHNlZSB0aGUgQW5pbWF0aW9uIE1hbmFnZXIgYGZyb21KU09OYCBtZXRob2QgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgZm9ybWF0IGFuZCBwbGF5YmFjay5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBhY2Nlc3MgdGhlIHJhdyBhbmltYXRpb24gZGF0YSBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYW5pbWF0aW9uKCdiYWRkaWVBbmltcycsICdmaWxlcy9CYWRkaWVBbmltcy5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBkYXRhID0gdGhpcy5jYWNoZS5qc29uLmdldCgnYmFkZGllQW5pbXMnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIGlmIHlvdSBvbmx5IHdhbnRlZCB0byBjcmVhdGUgYW5pbWF0aW9ucyBmcm9tIHRoZSBgYm9zc2AgZGF0YSwgdGhlbiB5b3UgY291bGQgcGFzcyBgbGV2ZWwxLmJhZGRpZXMuYm9zc2BhcyB0aGUgYGRhdGFLZXlgLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEpTT04gRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYW5pbWF0aW9uXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBBbmltYXRpb24gSlNPTiBmaWxlIGxvYWRzIG9ubHkgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgQ2FjaGUgYW5kIHVzZWQgdG8gY3JlYXRlIGFuaW1hdGlvbiBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYW5pbWF0aW9uJywgZnVuY3Rpb24gKGtleSwgdXJsLCBkYXRhS2V5LCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgLy8gIFN1cHBvcnRzIGFuIE9iamVjdCBmaWxlIGRlZmluaXRpb24gaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGEgc2luZ2xlIGVudHJ5IHdoZXJlIGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIGRlZmluZWRcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBBbmltYXRpb25KU09ORmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBBbmltYXRpb25KU09ORmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MsIGRhdGFLZXkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuaW1hdGlvbkpTT05GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON based Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#atlas method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#atlas.\r\n * \r\n * https://www.codeandweb.com/texturepacker/tutorials/how-to-create-sprite-sheets-for-phaser3?source=photonstorm\r\n *\r\n * @class AtlasJSONFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AtlasJSONFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function AtlasJSONFile (loader, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n    {\r\n        var image;\r\n        var data;\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n\r\n            image = new ImageFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'textureURL'),\r\n                extension: GetFastValue(config, 'textureExtension', 'png'),\r\n                normalMap: GetFastValue(config, 'normalMap'),\r\n                xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n            });\r\n\r\n            data = new JSONFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'atlasURL'),\r\n                extension: GetFastValue(config, 'atlasExtension', 'json'),\r\n                xhrSettings: GetFastValue(config, 'atlasXhrSettings')\r\n            });\r\n        }\r\n        else\r\n        {\r\n            image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n            data = new JSONFile(loader, key, atlasURL, atlasXhrSettings);\r\n        }\r\n\r\n        if (image.linkFile)\r\n        {\r\n            //  Image has a normal map\r\n            MultiFile.call(this, loader, 'atlasjson', key, [ image, data, image.linkFile ]);\r\n        }\r\n        else\r\n        {\r\n            MultiFile.call(this, loader, 'atlasjson', key, [ image, data ]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AtlasJSONFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var image = this.files[0];\r\n            var json = this.files[1];\r\n            var normalMap = (this.files[2]) ? this.files[2].data : null;\r\n\r\n            this.loader.textureManager.addAtlas(image.key, image.data, json.data, normalMap);\r\n\r\n            json.addToCache();\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON based Texture Atlas, or array of atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.atlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in a JSON file, using either the JSON Hash or JSON Array format.\r\n * These files are created by software such as Texture Packer, Shoebox and Adobe Flash / Animate.\r\n * If you are using Texture Packer and have enabled multi-atlas support, then please use the Phaser Multi Atlas loader\r\n * instead of this one.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.atlas({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     atlasURL: 'images/MainMenu.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the atlas JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.atlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'mainmenu', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.atlas('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.json');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.atlas({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     normalMap: 'images/MainMenu-n.png',\r\n *     atlasURL: 'images/MainMenu.json'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Atlas JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#atlas\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('atlas', function (key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new AtlasJSONFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new AtlasJSONFile(this, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = AtlasJSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F0bGFzSlNPTkZpbGUuanM/NTQwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2Qyx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGdCQUFnQixtQkFBTyxDQUFDLCtFQUFnQjtBQUN4QyxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7QUFDOUQsZUFBZSxtQkFBTyxDQUFDLDZFQUFlO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDJEQUEyRDtBQUN0RSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0dBQStHO0FBQzFILFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvQXRsYXNKU09ORmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxudmFyIE11bHRpRmlsZSA9IHJlcXVpcmUoJy4uL011bHRpRmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgSlNPTiBiYXNlZCBUZXh0dXJlIEF0bGFzIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhcyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F0bGFzLlxyXG4gKiBcclxuICogaHR0cHM6Ly93d3cuY29kZWFuZHdlYi5jb20vdGV4dHVyZXBhY2tlci90dXRvcmlhbHMvaG93LXRvLWNyZWF0ZS1zcHJpdGUtc2hlZXRzLWZvci1waGFzZXIzP3NvdXJjZT1waG90b25zdG9ybVxyXG4gKlxyXG4gKiBAY2xhc3MgQXRsYXNKU09ORmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdGV4dHVyZVVSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgaW1hZ2UgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtzdHJpbmd9IFthdGxhc1VSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgYXRsYXMganNvbiBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uanNvbmAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzb25cIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbdGV4dHVyZVhoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2F0bGFzWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMganNvbiBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKi9cclxudmFyIEF0bGFzSlNPTkZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE11bHRpRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEF0bGFzSlNPTkZpbGUgKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbWFnZTtcclxuICAgICAgICB2YXIgZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcblxyXG4gICAgICAgICAgICBpbWFnZSA9IG5ldyBJbWFnZUZpbGUobG9hZGVyLCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgICAgIHVybDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVFeHRlbnNpb24nLCAncG5nJyksXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IEdldEZhc3RWYWx1ZShjb25maWcsICdub3JtYWxNYXAnKSxcclxuICAgICAgICAgICAgICAgIHhoclNldHRpbmdzOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVhoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBkYXRhID0gbmV3IEpTT05GaWxlKGxvYWRlciwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgICAgICB1cmw6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1VSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXRsYXNFeHRlbnNpb24nLCAnanNvbicpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1hoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBKU09ORmlsZShsb2FkZXIsIGtleSwgYXRsYXNVUkwsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGltYWdlLmxpbmtGaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEltYWdlIGhhcyBhIG5vcm1hbCBtYXBcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXRsYXNqc29uJywga2V5LCBbIGltYWdlLCBkYXRhLCBpbWFnZS5saW5rRmlsZSBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXRsYXNqc29uJywga2V5LCBbIGltYWdlLCBkYXRhIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNKU09ORmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5VG9Qcm9jZXNzKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIganNvbiA9IHRoaXMuZmlsZXNbMV07XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSAodGhpcy5maWxlc1syXSkgPyB0aGlzLmZpbGVzWzJdLmRhdGEgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIudGV4dHVyZU1hbmFnZXIuYWRkQXRsYXMoaW1hZ2Uua2V5LCBpbWFnZS5kYXRhLCBqc29uLmRhdGEsIG5vcm1hbE1hcCk7XHJcblxyXG4gICAgICAgICAgICBqc29uLmFkZFRvQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBKU09OIGJhc2VkIFRleHR1cmUgQXRsYXMsIG9yIGFycmF5IG9mIGF0bGFzZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFBoYXNlciBleHBlY3RzIHRoZSBhdGxhcyBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGEgSlNPTiBmaWxlLCB1c2luZyBlaXRoZXIgdGhlIEpTT04gSGFzaCBvciBKU09OIEFycmF5IGZvcm1hdC5cclxuICogVGhlc2UgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgc29mdHdhcmUgc3VjaCBhcyBUZXh0dXJlIFBhY2tlciwgU2hvZWJveCBhbmQgQWRvYmUgRmxhc2ggLyBBbmltYXRlLlxyXG4gKiBJZiB5b3UgYXJlIHVzaW5nIFRleHR1cmUgUGFja2VyIGFuZCBoYXZlIGVuYWJsZWQgbXVsdGktYXRsYXMgc3VwcG9ydCwgdGhlbiBwbGVhc2UgdXNlIHRoZSBQaGFzZXIgTXVsdGkgQXRsYXMgbG9hZGVyXHJcbiAqIGluc3RlYWQgb2YgdGhpcyBvbmUuXHJcbiAqIFxyXG4gKiBQaGFzZXIgY2FuIGxvYWQgYWxsIGNvbW1vbiBpbWFnZSB0eXBlczogcG5nLCBqcGcsIGdpZiBhbmQgYW55IG90aGVyIGZvcm1hdCB0aGUgYnJvd3NlciBjYW4gbmF0aXZlbHkgaGFuZGxlLlxyXG4gKlxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIFRleHR1cmUgTWFuYWdlciB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcyh7XHJcbiAqICAgICBrZXk6ICdtYWlubWVudScsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL01haW5NZW51LnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS5qc29uJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF0bGFzIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGZyYW1lcyBmcm9tIGl0IGFzIHRleHR1cmVzIGZvciBhIEdhbWUgT2JqZWN0IGJ5IHJlZmVyZW5jaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUuanNvbicpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLmFkZC5pbWFnZSh4LCB5LCAnbWFpbm1lbnUnLCAnYmFja2dyb3VuZCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZyYW1lcyB3aXRoaW4gYW4gYXRsYXMgcGxlYXNlIGNvbnN1bHQgeW91ciBUZXh0dXJlIEF0bGFzIHNvZnR3YXJlLlxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBQaGFzZXIgYWxzbyBzdXBwb3J0cyB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgYXNzb2NpYXRlZCBub3JtYWwgbWFwcy4gSWYgeW91IGhhdmUgYSBub3JtYWwgbWFwIHRvIGdvIHdpdGggdGhpcyBpbWFnZSxcclxuICogdGhlbiB5b3UgY2FuIHNwZWNpZnkgaXQgYnkgcHJvdmlkaW5nIGFuIGFycmF5IGFzIHRoZSBgdXJsYCB3aGVyZSB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIG5vcm1hbCBtYXA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCBbICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS1uLnBuZycgXSwgJ2ltYWdlcy9NYWluTWVudS5qc29uJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzKHtcclxuICogICAgIGtleTogJ21haW5tZW51JyxcclxuICogICAgIHRleHR1cmVVUkw6ICdpbWFnZXMvTWFpbk1lbnUucG5nJyxcclxuICogICAgIG5vcm1hbE1hcDogJ2ltYWdlcy9NYWluTWVudS1uLnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS5qc29uJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBub3JtYWwgbWFwIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zIGFzIHRoZSBpbWFnZSBmaWxlIHdpdGggcmVnYXJkIHRvIHRoZSBwYXRoLCBiYXNlVVJMLCBDT1JzIGFuZCBYSFIgU2V0dGluZ3MuXHJcbiAqIE5vcm1hbCBtYXBzIGFyZSBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBdGxhcyBKU09OIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F0bGFzXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdGxhc0pTT05GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt0ZXh0dXJlVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBpbWFnZSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnBuZ2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnBuZ1wiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBhdGxhcyBqc29uIGRhdGEgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt0ZXh0dXJlWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMgaW1hZ2UgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXRsYXNYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBqc29uIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYXRsYXMnLCBmdW5jdGlvbiAoa2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgbXVsdGlmaWxlO1xyXG5cclxuICAgIC8vICBTdXBwb3J0cyBhbiBPYmplY3QgZmlsZSBkZWZpbml0aW9uIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhIHNpbmdsZSBlbnRyeSB3aGVyZSBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBkZWZpbmVkXHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG11bHRpZmlsZSA9IG5ldyBBdGxhc0pTT05GaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IEF0bGFzSlNPTkZpbGUodGhpcywga2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBdGxhc0pTT05GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar XMLFile = __webpack_require__(/*! ./XMLFile.js */ \"./node_modules/phaser/src/loader/filetypes/XMLFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single XML based Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#atlasXML method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#atlasXML.\r\n *\r\n * @class AtlasXMLFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas xml file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AtlasXMLFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function AtlasXMLFile (loader, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n    {\r\n        var image;\r\n        var data;\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n\r\n            image = new ImageFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'textureURL'),\r\n                extension: GetFastValue(config, 'textureExtension', 'png'),\r\n                normalMap: GetFastValue(config, 'normalMap'),\r\n                xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n            });\r\n\r\n            data = new XMLFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'atlasURL'),\r\n                extension: GetFastValue(config, 'atlasExtension', 'xml'),\r\n                xhrSettings: GetFastValue(config, 'atlasXhrSettings')\r\n            });\r\n        }\r\n        else\r\n        {\r\n            image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n            data = new XMLFile(loader, key, atlasURL, atlasXhrSettings);\r\n        }\r\n\r\n        if (image.linkFile)\r\n        {\r\n            //  Image has a normal map\r\n            MultiFile.call(this, loader, 'atlasxml', key, [ image, data, image.linkFile ]);\r\n        }\r\n        else\r\n        {\r\n            MultiFile.call(this, loader, 'atlasxml', key, [ image, data ]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AtlasXMLFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var image = this.files[0];\r\n            var xml = this.files[1];\r\n            var normalMap = (this.files[2]) ? this.files[2].data : null;\r\n\r\n            this.loader.textureManager.addAtlasXML(image.key, image.data, xml.data, normalMap);\r\n\r\n            xml.addToCache();\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an XML based Texture Atlas, or array of atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.atlasXML('mainmenu', 'images/MainMenu.png', 'images/MainMenu.xml');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in an XML file format.\r\n * These files are created by software such as Shoebox and Adobe Flash / Animate.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     atlasURL: 'images/MainMenu.xml'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig` for more details.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML('mainmenu', 'images/MainMenu.png', 'images/MainMenu.xml');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'mainmenu', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.xml');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     normalMap: 'images/MainMenu-n.png',\r\n *     atlasURL: 'images/MainMenu.xml'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Atlas XML File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#atlasXML\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas xml file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('atlasXML', function (key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new AtlasXMLFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new AtlasXMLFile(this, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = AtlasXMLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F0bGFzWE1MRmlsZS5qcz83ZDE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWdCO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxnQkFBZ0IsbUJBQU8sQ0FBQyxzRUFBaUI7QUFDekMsY0FBYyxtQkFBTyxDQUFDLDJFQUFjOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywwREFBMEQ7QUFDckUsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2R0FBNkc7QUFDeEgsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9BdGxhc1hNTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSW1hZ2VGaWxlID0gcmVxdWlyZSgnLi9JbWFnZUZpbGUuanMnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgTXVsdGlGaWxlID0gcmVxdWlyZSgnLi4vTXVsdGlGaWxlLmpzJyk7XHJcbnZhciBYTUxGaWxlID0gcmVxdWlyZSgnLi9YTUxGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBYTUwgYmFzZWQgVGV4dHVyZSBBdGxhcyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXRsYXNYTUwgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhc1hNTC5cclxuICpcclxuICogQGNsYXNzIEF0bGFzWE1MRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt0ZXh0dXJlVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBpbWFnZSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnBuZ2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnBuZ1wiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBhdGxhcyB4bWwgZGF0YSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnhtbGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnhtbFwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt0ZXh0dXJlWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMgaW1hZ2UgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXRsYXNYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyB4bWwgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICovXHJcbnZhciBBdGxhc1hNTEZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE11bHRpRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEF0bGFzWE1MRmlsZSAobG9hZGVyLCBrZXksIHRleHR1cmVVUkwsIGF0bGFzVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGF0bGFzWGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGltYWdlO1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVVSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZUV4dGVuc2lvbicsICdwbmcnKSxcclxuICAgICAgICAgICAgICAgIG5vcm1hbE1hcDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgWE1MRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXRsYXNVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F0bGFzRXh0ZW5zaW9uJywgJ3htbCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1hoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBYTUxGaWxlKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgYXRsYXNYaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW1hZ2UubGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSW1hZ2UgaGFzIGEgbm9ybWFsIG1hcFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdhdGxhc3htbCcsIGtleSwgWyBpbWFnZSwgZGF0YSwgaW1hZ2UubGlua0ZpbGUgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIE11bHRpRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgJ2F0bGFzeG1sJywga2V5LCBbIGltYWdlLCBkYXRhIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNYTUxGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSB0aGlzLmZpbGVzWzFdO1xyXG4gICAgICAgICAgICB2YXIgbm9ybWFsTWFwID0gKHRoaXMuZmlsZXNbMl0pID8gdGhpcy5maWxlc1syXS5kYXRhIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLnRleHR1cmVNYW5hZ2VyLmFkZEF0bGFzWE1MKGltYWdlLmtleSwgaW1hZ2UuZGF0YSwgeG1sLmRhdGEsIG5vcm1hbE1hcCk7XHJcblxyXG4gICAgICAgICAgICB4bWwuYWRkVG9DYWNoZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBYTUwgYmFzZWQgVGV4dHVyZSBBdGxhcywgb3IgYXJyYXkgb2YgYXRsYXNlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmF0bGFzWE1MKCdtYWlubWVudScsICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS54bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogSWYgeW91IGNhbGwgdGhpcyBmcm9tIG91dHNpZGUgb2YgYHByZWxvYWRgIHRoZW4geW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcgdGhlIExvYWRlciBhZnRlcndhcmRzIGFuZCBtb25pdG9yaW5nXHJcbiAqIGl0cyBldmVudHMgdG8ga25vdyB3aGVuIGl0J3Mgc2FmZSB0byB1c2UgdGhlIGFzc2V0LiBQbGVhc2Ugc2VlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiBjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBQaGFzZXIgZXhwZWN0cyB0aGUgYXRsYXMgZGF0YSB0byBiZSBwcm92aWRlZCBpbiBhbiBYTUwgZmlsZSBmb3JtYXQuXHJcbiAqIFRoZXNlIGZpbGVzIGFyZSBjcmVhdGVkIGJ5IHNvZnR3YXJlIHN1Y2ggYXMgU2hvZWJveCBhbmQgQWRvYmUgRmxhc2ggLyBBbmltYXRlLlxyXG4gKiBcclxuICogUGhhc2VyIGNhbiBsb2FkIGFsbCBjb21tb24gaW1hZ2UgdHlwZXM6IHBuZywganBnLCBnaWYgYW5kIGFueSBvdGhlciBmb3JtYXQgdGhlIGJyb3dzZXIgY2FuIG5hdGl2ZWx5IGhhbmRsZS5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYXRsYXNYTUwoe1xyXG4gKiAgICAga2V5OiAnbWFpbm1lbnUnLFxyXG4gKiAgICAgdGV4dHVyZVVSTDogJ2ltYWdlcy9NYWluTWVudS5wbmcnLFxyXG4gKiAgICAgYXRsYXNVUkw6ICdpbWFnZXMvTWFpbk1lbnUueG1sJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgYXRsYXMgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiB1c2UgZnJhbWVzIGZyb20gaXQgYXMgdGV4dHVyZXMgZm9yIGEgR2FtZSBPYmplY3QgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzWE1MKCdtYWlubWVudScsICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS54bWwnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ21haW5tZW51JywgJ2JhY2tncm91bmQnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRvIGdldCBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBmcmFtZXMgd2l0aGluIGFuIGF0bGFzIHBsZWFzZSBjb25zdWx0IHlvdXIgVGV4dHVyZSBBdGxhcyBzb2Z0d2FyZS5cclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYE1FTlUuYCBhbmQgdGhlIGtleSB3YXMgYEJhY2tncm91bmRgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTUVOVS5CYWNrZ3JvdW5kYCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGltYWdlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5wbmdcIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAucG5nYCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogUGhhc2VyIGFsc28gc3VwcG9ydHMgdGhlIGF1dG9tYXRpYyBsb2FkaW5nIG9mIGFzc29jaWF0ZWQgbm9ybWFsIG1hcHMuIElmIHlvdSBoYXZlIGEgbm9ybWFsIG1hcCB0byBnbyB3aXRoIHRoaXMgaW1hZ2UsXHJcbiAqIHRoZW4geW91IGNhbiBzcGVjaWZ5IGl0IGJ5IHByb3ZpZGluZyBhbiBhcnJheSBhcyB0aGUgYHVybGAgd2hlcmUgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBub3JtYWwgbWFwOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYXRsYXNYTUwoJ21haW5tZW51JywgWyAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUtbi5wbmcnIF0sICdpbWFnZXMvTWFpbk1lbnUueG1sJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzWE1MKHtcclxuICogICAgIGtleTogJ21haW5tZW51JyxcclxuICogICAgIHRleHR1cmVVUkw6ICdpbWFnZXMvTWFpbk1lbnUucG5nJyxcclxuICogICAgIG5vcm1hbE1hcDogJ2ltYWdlcy9NYWluTWVudS1uLnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS54bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlIG5vcm1hbCBtYXAgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgdGhlIGltYWdlIGZpbGUgd2l0aCByZWdhcmQgdG8gdGhlIHBhdGgsIGJhc2VVUkwsIENPUnMgYW5kIFhIUiBTZXR0aW5ncy5cclxuICogTm9ybWFsIG1hcHMgYXJlIGEgV2ViR0wgb25seSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEF0bGFzIFhNTCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhc1hNTFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNYTUxGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXRsYXNVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGF0bGFzIHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBpbWFnZSBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2F0bGFzWE1MJywgZnVuY3Rpb24gKGtleSwgdGV4dHVyZVVSTCwgYXRsYXNVUkwsIHRleHR1cmVYaHJTZXR0aW5ncywgYXRsYXNYaHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXRsYXNYTUxGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IEF0bGFzWE1MRmlsZSh0aGlzLCBrZXksIHRleHR1cmVVUkwsIGF0bGFzVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEF0bGFzWE1MRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/AudioFile.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/AudioFile.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar HTML5AudioFile = __webpack_require__(/*! ./HTML5AudioFile */ \"./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Audio File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audio method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audio.\r\n *\r\n * @class AudioFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {any} [urlConfig] - The absolute or relative URL to load this file from in a config object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {AudioContext} [audioContext] - The AudioContext this file will use to process itself.\r\n */\r\nvar AudioFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    //  URL is an object created by AudioFile.findAudioURL\r\n    function AudioFile (loader, key, urlConfig, xhrSettings, audioContext)\r\n    {\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            audioContext = GetFastValue(config, 'context', audioContext);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'audio',\r\n            cache: loader.cacheManager.audio,\r\n            extension: urlConfig.type,\r\n            responseType: 'arraybuffer',\r\n            key: key,\r\n            url: urlConfig.url,\r\n            xhrSettings: xhrSettings,\r\n            config: { context: audioContext }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AudioFile#onProcess\r\n     * @since 3.0.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        var _this = this;\r\n\r\n        // interesting read https://github.com/WebAudio/web-audio-api/issues/1305\r\n        this.config.context.decodeAudioData(this.xhrLoader.response,\r\n            function (audioBuffer)\r\n            {\r\n                _this.data = audioBuffer;\r\n\r\n                _this.onProcessComplete();\r\n            },\r\n            function (e)\r\n            {\r\n                // eslint-disable-next-line no-console\r\n                console.error('Error decoding audio: ' + this.key + ' - ', e ? e.message : null);\r\n\r\n                _this.onProcessError();\r\n            }\r\n        );\r\n\r\n        this.config.context = null;\r\n    }\r\n\r\n});\r\n\r\nAudioFile.create = function (loader, key, urls, config, xhrSettings)\r\n{\r\n    var game = loader.systems.game;\r\n    var audioConfig = game.config.audio;\r\n    var deviceAudio = game.device.audio;\r\n\r\n    //  url may be inside key, which may be an object\r\n    if (IsPlainObject(key))\r\n    {\r\n        urls = GetFastValue(key, 'url', []);\r\n        config = GetFastValue(key, 'config', {});\r\n    }\r\n\r\n    var urlConfig = AudioFile.getAudioURL(game, urls);\r\n\r\n    if (!urlConfig)\r\n    {\r\n        return null;\r\n    }\r\n\r\n    // https://developers.google.com/web/updates/2012/02/HTML5-audio-and-the-Web-Audio-API-are-BFFs\r\n    // var stream = GetFastValue(config, 'stream', false);\r\n\r\n    if (deviceAudio.webAudio && !(audioConfig && audioConfig.disableWebAudio))\r\n    {\r\n        return new AudioFile(loader, key, urlConfig, xhrSettings, game.sound.context);\r\n    }\r\n    else\r\n    {\r\n        return new HTML5AudioFile(loader, key, urlConfig, config);\r\n    }\r\n};\r\n\r\nAudioFile.getAudioURL = function (game, urls)\r\n{\r\n    if (!Array.isArray(urls))\r\n    {\r\n        urls = [ urls ];\r\n    }\r\n\r\n    for (var i = 0; i < urls.length; i++)\r\n    {\r\n        var url = GetFastValue(urls[i], 'url', urls[i]);\r\n\r\n        if (url.indexOf('blob:') === 0 || url.indexOf('data:') === 0)\r\n        {\r\n            return url;\r\n        }\r\n\r\n        var audioType = url.match(/\\.([a-zA-Z0-9]+)($|\\?)/);\r\n\r\n        audioType = GetFastValue(urls[i], 'type', (audioType) ? audioType[1] : '').toLowerCase();\r\n\r\n        if (game.device.audio[audioType])\r\n        {\r\n            return {\r\n                url: url,\r\n                type: audioType\r\n            };\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\n/**\r\n * Adds an Audio or HTML5Audio file, or array of audio files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.audio('title', [ 'music/Title.ogg', 'music/Title.mp3', 'music/Title.m4a' ]);\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Audio Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Audio Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Audio Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.audio({\r\n *     key: 'title',\r\n *     url: [ 'music/Title.ogg', 'music/Title.mp3', 'music/Title.m4a' ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AudioFileConfig` for more details.\r\n *\r\n * The URLs can be relative or absolute. If the URLs are relative the `Loader.baseURL` and `Loader.path` values will be prepended to them.\r\n *\r\n * Due to different browsers supporting different audio file types you should usually provide your audio files in a variety of formats.\r\n * ogg, mp3 and m4a are the most common. If you provide an array of URLs then the Loader will determine which _one_ file to load based on\r\n * browser support.\r\n *\r\n * If audio has been disabled in your game, either via the game config, or lack of support from the device, then no audio will be loaded.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Audio File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#audio\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig|Phaser.Types.Loader.FileTypes.AudioFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|string[])} [urls] - The absolute or relative URL to load the audio files from.\r\n * @param {any} [config] - An object containing an `instances` property for HTML5Audio. Defaults to 1.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('audio', function (key, urls, config, xhrSettings)\r\n{\r\n    var game = this.systems.game;\r\n    var audioConfig = game.config.audio;\r\n    var deviceAudio = game.device.audio;\r\n\r\n    if ((audioConfig && audioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n    {\r\n        //  Sounds are disabled, so skip loading audio\r\n        return this;\r\n    }\r\n\r\n    var audioFile;\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            audioFile = AudioFile.create(this, key[i]);\r\n\r\n            if (audioFile)\r\n            {\r\n                this.addFile(audioFile);\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        audioFile = AudioFile.create(this, key, urls, config, xhrSettings);\r\n\r\n        if (audioFile)\r\n        {\r\n            this.addFile(audioFile);\r\n        }\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = AudioFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvRmlsZS5qcz81NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDL0Msb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx1REFBdUQ7QUFDbEUsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1R0FBdUc7QUFDbEgsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9BdWRpb0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEhUTUw1QXVkaW9GaWxlID0gcmVxdWlyZSgnLi9IVE1MNUF1ZGlvRmlsZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBBdWRpbyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXVkaW8gbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpby5cclxuICpcclxuICogQGNsYXNzIEF1ZGlvRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb0ZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7YW55fSBbdXJsQ29uZmlnXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbSBpbiBhIGNvbmZpZyBvYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IFthdWRpb0NvbnRleHRdIC0gVGhlIEF1ZGlvQ29udGV4dCB0aGlzIGZpbGUgd2lsbCB1c2UgdG8gcHJvY2VzcyBpdHNlbGYuXHJcbiAqL1xyXG52YXIgQXVkaW9GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgLy8gIFVSTCBpcyBhbiBvYmplY3QgY3JlYXRlZCBieSBBdWRpb0ZpbGUuZmluZEF1ZGlvVVJMXHJcbiAgICBmdW5jdGlvbiBBdWRpb0ZpbGUgKGxvYWRlciwga2V5LCB1cmxDb25maWcsIHhoclNldHRpbmdzLCBhdWRpb0NvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3hoclNldHRpbmdzJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjb250ZXh0JywgYXVkaW9Db250ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYXVkaW8nLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLmNhY2hlTWFuYWdlci5hdWRpbyxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB1cmxDb25maWcudHlwZSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmxDb25maWcudXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXHJcbiAgICAgICAgICAgIGNvbmZpZzogeyBjb250ZXh0OiBhdWRpb0NvbnRleHQgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gaW50ZXJlc3RpbmcgcmVhZCBodHRwczovL2dpdGh1Yi5jb20vV2ViQXVkaW8vd2ViLWF1ZGlvLWFwaS9pc3N1ZXMvMTMwNVxyXG4gICAgICAgIHRoaXMuY29uZmlnLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoYXVkaW9CdWZmZXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmRhdGEgPSBhdWRpb0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlY29kaW5nIGF1ZGlvOiAnICsgdGhpcy5rZXkgKyAnIC0gJywgZSA/IGUubWVzc2FnZSA6IG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuQXVkaW9GaWxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChsb2FkZXIsIGtleSwgdXJscywgY29uZmlnLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIGdhbWUgPSBsb2FkZXIuc3lzdGVtcy5nYW1lO1xyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICAvLyAgdXJsIG1heSBiZSBpbnNpZGUga2V5LCB3aGljaCBtYXkgYmUgYW4gb2JqZWN0XHJcbiAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIHVybHMgPSBHZXRGYXN0VmFsdWUoa2V5LCAndXJsJywgW10pO1xyXG4gICAgICAgIGNvbmZpZyA9IEdldEZhc3RWYWx1ZShrZXksICdjb25maWcnLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHVybENvbmZpZyA9IEF1ZGlvRmlsZS5nZXRBdWRpb1VSTChnYW1lLCB1cmxzKTtcclxuXHJcbiAgICBpZiAoIXVybENvbmZpZylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvdXBkYXRlcy8yMDEyLzAyL0hUTUw1LWF1ZGlvLWFuZC10aGUtV2ViLUF1ZGlvLUFQSS1hcmUtQkZGc1xyXG4gICAgLy8gdmFyIHN0cmVhbSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzdHJlYW0nLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKGRldmljZUF1ZGlvLndlYkF1ZGlvICYmICEoYXVkaW9Db25maWcgJiYgYXVkaW9Db25maWcuZGlzYWJsZVdlYkF1ZGlvKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvRmlsZShsb2FkZXIsIGtleSwgdXJsQ29uZmlnLCB4aHJTZXR0aW5ncywgZ2FtZS5zb3VuZC5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IEhUTUw1QXVkaW9GaWxlKGxvYWRlciwga2V5LCB1cmxDb25maWcsIGNvbmZpZyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BdWRpb0ZpbGUuZ2V0QXVkaW9VUkwgPSBmdW5jdGlvbiAoZ2FtZSwgdXJscylcclxue1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKVxyXG4gICAge1xyXG4gICAgICAgIHVybHMgPSBbIHVybHMgXTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVybCA9IEdldEZhc3RWYWx1ZSh1cmxzW2ldLCAndXJsJywgdXJsc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignYmxvYjonKSA9PT0gMCB8fCB1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXVkaW9UeXBlID0gdXJsLm1hdGNoKC9cXC4oW2EtekEtWjAtOV0rKSgkfFxcPykvKTtcclxuXHJcbiAgICAgICAgYXVkaW9UeXBlID0gR2V0RmFzdFZhbHVlKHVybHNbaV0sICd0eXBlJywgKGF1ZGlvVHlwZSkgPyBhdWRpb1R5cGVbMV0gOiAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWUuZGV2aWNlLmF1ZGlvW2F1ZGlvVHlwZV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBhdWRpb1R5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBBdWRpbyBvciBIVE1MNUF1ZGlvIGZpbGUsIG9yIGFycmF5IG9mIGF1ZGlvIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuYXVkaW8oJ3RpdGxlJywgWyAnbXVzaWMvVGl0bGUub2dnJywgJ211c2ljL1RpdGxlLm1wMycsICdtdXNpYy9UaXRsZS5tNGEnIF0pO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEF1ZGlvIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBBdWRpbyBDYWNoZS5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIEF1ZGlvIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdWRpbyh7XHJcbiAqICAgICBrZXk6ICd0aXRsZScsXHJcbiAqICAgICB1cmw6IFsgJ211c2ljL1RpdGxlLm9nZycsICdtdXNpYy9UaXRsZS5tcDMnLCAnbXVzaWMvVGl0bGUubTRhJyBdXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9GaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBUaGUgVVJMcyBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkxzIGFyZSByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlbS5cclxuICpcclxuICogRHVlIHRvIGRpZmZlcmVudCBicm93c2VycyBzdXBwb3J0aW5nIGRpZmZlcmVudCBhdWRpbyBmaWxlIHR5cGVzIHlvdSBzaG91bGQgdXN1YWxseSBwcm92aWRlIHlvdXIgYXVkaW8gZmlsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMuXHJcbiAqIG9nZywgbXAzIGFuZCBtNGEgYXJlIHRoZSBtb3N0IGNvbW1vbi4gSWYgeW91IHByb3ZpZGUgYW4gYXJyYXkgb2YgVVJMcyB0aGVuIHRoZSBMb2FkZXIgd2lsbCBkZXRlcm1pbmUgd2hpY2ggX29uZV8gZmlsZSB0byBsb2FkIGJhc2VkIG9uXHJcbiAqIGJyb3dzZXIgc3VwcG9ydC5cclxuICpcclxuICogSWYgYXVkaW8gaGFzIGJlZW4gZGlzYWJsZWQgaW4geW91ciBnYW1lLCBlaXRoZXIgdmlhIHRoZSBnYW1lIGNvbmZpZywgb3IgbGFjayBvZiBzdXBwb3J0IGZyb20gdGhlIGRldmljZSwgdGhlbiBubyBhdWRpbyB3aWxsIGJlIGxvYWRlZC5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBdWRpbyBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdXJsc10gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIGF1ZGlvIGZpbGVzIGZyb20uXHJcbiAqIEBwYXJhbSB7YW55fSBbY29uZmlnXSAtIEFuIG9iamVjdCBjb250YWluaW5nIGFuIGBpbnN0YW5jZXNgIHByb3BlcnR5IGZvciBIVE1MNUF1ZGlvLiBEZWZhdWx0cyB0byAxLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYXVkaW8nLCBmdW5jdGlvbiAoa2V5LCB1cmxzLCBjb25maWcsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgZ2FtZSA9IHRoaXMuc3lzdGVtcy5nYW1lO1xyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICBpZiAoKGF1ZGlvQ29uZmlnICYmIGF1ZGlvQ29uZmlnLm5vQXVkaW8pIHx8ICghZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIWRldmljZUF1ZGlvLmF1ZGlvRGF0YSkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNvdW5kcyBhcmUgZGlzYWJsZWQsIHNvIHNraXAgbG9hZGluZyBhdWRpb1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhdWRpb0ZpbGU7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICBhdWRpb0ZpbGUgPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9GaWxlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbGUoYXVkaW9GaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBhdWRpb0ZpbGUgPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMsIGtleSwgdXJscywgY29uZmlnLCB4aHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUoYXVkaW9GaWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AudioFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AudioFile = __webpack_require__(/*! ./AudioFile.js */ \"./node_modules/phaser/src/loader/filetypes/AudioFile.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Audio Sprite File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audioSprite method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audioSprite.\r\n *\r\n * @class AudioSpriteFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} jsonURL - The absolute or relative URL to load the json file from. Or a well formed JSON object to use instead.\r\n * @param {{(string|string[])}} [audioURL] - The absolute or relative URL to load the audio file from. If empty it will be obtained by parsing the JSON file.\r\n * @param {any} [audioConfig] - The audio configuration options.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [audioXhrSettings] - An XHR Settings configuration object for the audio file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [jsonXhrSettings] - An XHR Settings configuration object for the json file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AudioSpriteFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function AudioSpriteFile (loader, key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings)\r\n    {\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            jsonURL = GetFastValue(config, 'jsonURL');\r\n            audioURL = GetFastValue(config, 'audioURL');\r\n            audioConfig = GetFastValue(config, 'audioConfig');\r\n            audioXhrSettings = GetFastValue(config, 'audioXhrSettings');\r\n            jsonXhrSettings = GetFastValue(config, 'jsonXhrSettings');\r\n        }\r\n\r\n        var data;\r\n\r\n        //  No url? then we're going to do a json load and parse it from that\r\n        if (!audioURL)\r\n        {\r\n            data = new JSONFile(loader, key, jsonURL, jsonXhrSettings);\r\n            \r\n            MultiFile.call(this, loader, 'audiosprite', key, [ data ]);\r\n\r\n            this.config.resourceLoad = true;\r\n            this.config.audioConfig = audioConfig;\r\n            this.config.audioXhrSettings = audioXhrSettings;\r\n        }\r\n        else\r\n        {\r\n            var audio = AudioFile.create(loader, key, audioURL, audioConfig, audioXhrSettings);\r\n\r\n            if (audio)\r\n            {\r\n                data = new JSONFile(loader, key, jsonURL, jsonXhrSettings);\r\n\r\n                MultiFile.call(this, loader, 'audiosprite', key, [ audio, data ]);\r\n\r\n                this.config.resourceLoad = false;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by each File when it finishes loading.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AudioSpriteFile#onFileComplete\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n     */\r\n    onFileComplete: function (file)\r\n    {\r\n        var index = this.files.indexOf(file);\r\n\r\n        if (index !== -1)\r\n        {\r\n            this.pending--;\r\n\r\n            if (this.config.resourceLoad && file.type === 'json' && file.data.hasOwnProperty('resources'))\r\n            {\r\n                //  Inspect the data for the files to now load\r\n                var urls = file.data.resources;\r\n\r\n                var audioConfig = GetFastValue(this.config, 'audioConfig');\r\n                var audioXhrSettings = GetFastValue(this.config, 'audioXhrSettings');\r\n\r\n                var audio = AudioFile.create(this.loader, file.key, urls, audioConfig, audioXhrSettings);\r\n\r\n                if (audio)\r\n                {\r\n                    this.addToMultiFile(audio);\r\n\r\n                    this.loader.addFile(audio);\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.AudioSpriteFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var fileA = this.files[0];\r\n            var fileB = this.files[1];\r\n\r\n            fileA.addToCache();\r\n            fileB.addToCache();\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON based Audio Sprite, or array of audio sprites, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.audioSprite('kyobi', 'kyobi.json', [\r\n *         'kyobi.ogg',\r\n *         'kyobi.mp3',\r\n *         'kyobi.m4a'\r\n *     ]);\r\n * }\r\n * ```\r\n * \r\n * Audio Sprites are a combination of audio files and a JSON configuration.\r\n * The JSON follows the format of that created by https://github.com/tonistiigi/audiosprite\r\n *\r\n * If the JSON file includes a 'resource' object then you can let Phaser parse it and load the audio\r\n * files automatically based on its content. To do this exclude the audio URLs from the load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.audioSprite('kyobi', 'kyobi.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Audio Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Audio Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Audio Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.audioSprite({\r\n *     key: 'kyobi',\r\n *     jsonURL: 'audio/Kyobi.json',\r\n *     audioURL: [\r\n *         'audio/Kyobi.ogg',\r\n *         'audio/Kyobi.mp3',\r\n *         'audio/Kyobi.m4a'\r\n *     ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the audio JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the audio has finished loading you can use it create an Audio Sprite by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.audioSprite('kyobi', 'kyobi.json');\r\n * // and later in your game ...\r\n * var music = this.sound.addAudioSprite('kyobi');\r\n * music.play('title');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * Due to different browsers supporting different audio file types you should usually provide your audio files in a variety of formats.\r\n * ogg, mp3 and m4a are the most common. If you provide an array of URLs then the Loader will determine which _one_ file to load based on\r\n * browser support.\r\n *\r\n * If audio has been disabled in your game, either via the game config, or lack of support from the device, then no audio will be loaded.\r\n * \r\n * Note: The ability to load this type of file will only be available if the Audio Sprite File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#audioSprite\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig[])} key - The key to use for this file, or a file configuration object, or an array of objects.\r\n * @param {string} jsonURL - The absolute or relative URL to load the json file from. Or a well formed JSON object to use instead.\r\n * @param {(string|string[])} [audioURL] - The absolute or relative URL to load the audio file from. If empty it will be obtained by parsing the JSON file.\r\n * @param {any} [audioConfig] - The audio configuration options.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [audioXhrSettings] - An XHR Settings configuration object for the audio file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [jsonXhrSettings] - An XHR Settings configuration object for the json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader.\r\n */\r\nFileTypesManager.register('audioSprite', function (key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings)\r\n{\r\n    var game = this.systems.game;\r\n    var gameAudioConfig = game.config.audio;\r\n    var deviceAudio = game.device.audio;\r\n\r\n    if ((gameAudioConfig && gameAudioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n    {\r\n        //  Sounds are disabled, so skip loading audio\r\n        return this;\r\n    }\r\n\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new AudioSpriteFile(this, key[i]);\r\n\r\n            if (multifile.files)\r\n            {\r\n                this.addFile(multifile.files);\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new AudioSpriteFile(this, key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings);\r\n\r\n        if (multifile.files)\r\n        {\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n\r\n    return this;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvU3ByaXRlRmlsZS5qcz84NDQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2Qyx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxlQUFlLG1CQUFPLENBQUMsNkVBQWU7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWlCOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyw2REFBNkQ7QUFDeEUsV0FBVyxPQUFPO0FBQ2xCLFlBQVksbUJBQW1CO0FBQy9CLFdBQVcsSUFBSTtBQUNmLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1IQUFtSDtBQUM5SCxXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvU3ByaXRlRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEF1ZGlvRmlsZSA9IHJlcXVpcmUoJy4vQXVkaW9GaWxlLmpzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxudmFyIE11bHRpRmlsZSA9IHJlcXVpcmUoJy4uL011bHRpRmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gQXVkaW8gU3ByaXRlIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1Nwcml0ZSBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F1ZGlvU3ByaXRlLlxyXG4gKlxyXG4gKiBAY2xhc3MgQXVkaW9TcHJpdGVGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9TcHJpdGVGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvblVSTCAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUganNvbiBmaWxlIGZyb20uIE9yIGEgd2VsbCBmb3JtZWQgSlNPTiBvYmplY3QgdG8gdXNlIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7eyhzdHJpbmd8c3RyaW5nW10pfX0gW2F1ZGlvVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgYXVkaW8gZmlsZSBmcm9tLiBJZiBlbXB0eSBpdCB3aWxsIGJlIG9idGFpbmVkIGJ5IHBhcnNpbmcgdGhlIEpTT04gZmlsZS5cclxuICogQHBhcmFtIHthbnl9IFthdWRpb0NvbmZpZ10gLSBUaGUgYXVkaW8gY29uZmlndXJhdGlvbiBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdWRpb1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF1ZGlvIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2pzb25YaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBqc29uIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgQXVkaW9TcHJpdGVGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBdWRpb1Nwcml0ZUZpbGUgKGxvYWRlciwga2V5LCBqc29uVVJMLCBhdWRpb1VSTCwgYXVkaW9Db25maWcsIGF1ZGlvWGhyU2V0dGluZ3MsIGpzb25YaHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAganNvblVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdqc29uVVJMJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvVVJMID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F1ZGlvVVJMJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvQ29uZmlnID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F1ZGlvQ29uZmlnJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvWGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXVkaW9YaHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBqc29uWGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnanNvblhoclNldHRpbmdzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YTtcclxuXHJcbiAgICAgICAgLy8gIE5vIHVybD8gdGhlbiB3ZSdyZSBnb2luZyB0byBkbyBhIGpzb24gbG9hZCBhbmQgcGFyc2UgaXQgZnJvbSB0aGF0XHJcbiAgICAgICAgaWYgKCFhdWRpb1VSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgSlNPTkZpbGUobG9hZGVyLCBrZXksIGpzb25VUkwsIGpzb25YaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdhdWRpb3Nwcml0ZScsIGtleSwgWyBkYXRhIF0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25maWcucmVzb3VyY2VMb2FkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXVkaW9Db25maWcgPSBhdWRpb0NvbmZpZztcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXVkaW9YaHJTZXR0aW5ncyA9IGF1ZGlvWGhyU2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhdWRpbyA9IEF1ZGlvRmlsZS5jcmVhdGUobG9hZGVyLCBrZXksIGF1ZGlvVVJMLCBhdWRpb0NvbmZpZywgYXVkaW9YaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgSlNPTkZpbGUobG9hZGVyLCBrZXksIGpzb25VUkwsIGpzb25YaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXVkaW9zcHJpdGUnLCBrZXksIFsgYXVkaW8sIGRhdGEgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcucmVzb3VyY2VMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IGVhY2ggRmlsZSB3aGVuIGl0IGZpbmlzaGVzIGxvYWRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb1Nwcml0ZUZpbGUjb25GaWxlQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdGhhdCBoYXMgY29tcGxldGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKi9cclxuICAgIG9uRmlsZUNvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmctLTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXNvdXJjZUxvYWQgJiYgZmlsZS50eXBlID09PSAnanNvbicgJiYgZmlsZS5kYXRhLmhhc093blByb3BlcnR5KCdyZXNvdXJjZXMnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEluc3BlY3QgdGhlIGRhdGEgZm9yIHRoZSBmaWxlcyB0byBub3cgbG9hZFxyXG4gICAgICAgICAgICAgICAgdmFyIHVybHMgPSBmaWxlLmRhdGEucmVzb3VyY2VzO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBhdWRpb0NvbmZpZyA9IEdldEZhc3RWYWx1ZSh0aGlzLmNvbmZpZywgJ2F1ZGlvQ29uZmlnJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW9YaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZSh0aGlzLmNvbmZpZywgJ2F1ZGlvWGhyU2V0dGluZ3MnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW8gPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMubG9hZGVyLCBmaWxlLmtleSwgdXJscywgYXVkaW9Db25maWcsIGF1ZGlvWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdWRpbylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvTXVsdGlGaWxlKGF1ZGlvKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIuYWRkRmlsZShhdWRpbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvU3ByaXRlRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5VG9Qcm9jZXNzKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZmlsZUEgPSB0aGlzLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgZmlsZUIgPSB0aGlzLmZpbGVzWzFdO1xyXG5cclxuICAgICAgICAgICAgZmlsZUEuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICBmaWxlQi5hZGRUb0NhY2hlKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgSlNPTiBiYXNlZCBBdWRpbyBTcHJpdGUsIG9yIGFycmF5IG9mIGF1ZGlvIHNwcml0ZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdWRpb1Nwcml0ZSgna3lvYmknLCAna3lvYmkuanNvbicsIFtcclxuICogICAgICAgICAna3lvYmkub2dnJyxcclxuICogICAgICAgICAna3lvYmkubXAzJyxcclxuICogICAgICAgICAna3lvYmkubTRhJ1xyXG4gKiAgICAgXSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBBdWRpbyBTcHJpdGVzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIGF1ZGlvIGZpbGVzIGFuZCBhIEpTT04gY29uZmlndXJhdGlvbi5cclxuICogVGhlIEpTT04gZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoYXQgY3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vdG9uaXN0aWlnaS9hdWRpb3Nwcml0ZVxyXG4gKlxyXG4gKiBJZiB0aGUgSlNPTiBmaWxlIGluY2x1ZGVzIGEgJ3Jlc291cmNlJyBvYmplY3QgdGhlbiB5b3UgY2FuIGxldCBQaGFzZXIgcGFyc2UgaXQgYW5kIGxvYWQgdGhlIGF1ZGlvXHJcbiAqIGZpbGVzIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gaXRzIGNvbnRlbnQuIFRvIGRvIHRoaXMgZXhjbHVkZSB0aGUgYXVkaW8gVVJMcyBmcm9tIHRoZSBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdWRpb1Nwcml0ZSgna3lvYmknLCAna3lvYmkuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgQXVkaW8gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEF1ZGlvIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgQXVkaW8gQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF1ZGlvU3ByaXRlKHtcclxuICogICAgIGtleTogJ2t5b2JpJyxcclxuICogICAgIGpzb25VUkw6ICdhdWRpby9LeW9iaS5qc29uJyxcclxuICogICAgIGF1ZGlvVVJMOiBbXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm9nZycsXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm1wMycsXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm00YSdcclxuICogICAgIF1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb1Nwcml0ZUZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF1ZGlvIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGNyZWF0ZSBhbiBBdWRpbyBTcHJpdGUgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF1ZGlvU3ByaXRlKCdreW9iaScsICdreW9iaS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBtdXNpYyA9IHRoaXMuc291bmQuYWRkQXVkaW9TcHJpdGUoJ2t5b2JpJyk7XHJcbiAqIG11c2ljLnBsYXkoJ3RpdGxlJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIER1ZSB0byBkaWZmZXJlbnQgYnJvd3NlcnMgc3VwcG9ydGluZyBkaWZmZXJlbnQgYXVkaW8gZmlsZSB0eXBlcyB5b3Ugc2hvdWxkIHVzdWFsbHkgcHJvdmlkZSB5b3VyIGF1ZGlvIGZpbGVzIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLlxyXG4gKiBvZ2csIG1wMyBhbmQgbTRhIGFyZSB0aGUgbW9zdCBjb21tb24uIElmIHlvdSBwcm92aWRlIGFuIGFycmF5IG9mIFVSTHMgdGhlbiB0aGUgTG9hZGVyIHdpbGwgZGV0ZXJtaW5lIHdoaWNoIF9vbmVfIGZpbGUgdG8gbG9hZCBiYXNlZCBvblxyXG4gKiBicm93c2VyIHN1cHBvcnQuXHJcbiAqXHJcbiAqIElmIGF1ZGlvIGhhcyBiZWVuIGRpc2FibGVkIGluIHlvdXIgZ2FtZSwgZWl0aGVyIHZpYSB0aGUgZ2FtZSBjb25maWcsIG9yIGxhY2sgb2Ygc3VwcG9ydCBmcm9tIHRoZSBkZXZpY2UsIHRoZW4gbm8gYXVkaW8gd2lsbCBiZSBsb2FkZWQuXHJcbiAqIFxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEF1ZGlvIFNwcml0ZSBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1Nwcml0ZVxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9TcHJpdGVGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvU3ByaXRlRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhbiBhcnJheSBvZiBvYmplY3RzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvblVSTCAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUganNvbiBmaWxlIGZyb20uIE9yIGEgd2VsbCBmb3JtZWQgSlNPTiBvYmplY3QgdG8gdXNlIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFthdWRpb1VSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIGF1ZGlvIGZpbGUgZnJvbS4gSWYgZW1wdHkgaXQgd2lsbCBiZSBvYnRhaW5lZCBieSBwYXJzaW5nIHRoZSBKU09OIGZpbGUuXHJcbiAqIEBwYXJhbSB7YW55fSBbYXVkaW9Db25maWddIC0gVGhlIGF1ZGlvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXVkaW9YaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdWRpbyBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFtqc29uWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUganNvbiBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlci5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2F1ZGlvU3ByaXRlJywgZnVuY3Rpb24gKGtleSwganNvblVSTCwgYXVkaW9VUkwsIGF1ZGlvQ29uZmlnLCBhdWRpb1hoclNldHRpbmdzLCBqc29uWGhyU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBnYW1lID0gdGhpcy5zeXN0ZW1zLmdhbWU7XHJcbiAgICB2YXIgZ2FtZUF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICBpZiAoKGdhbWVBdWRpb0NvbmZpZyAmJiBnYW1lQXVkaW9Db25maWcubm9BdWRpbykgfHwgKCFkZXZpY2VBdWRpby53ZWJBdWRpbyAmJiAhZGV2aWNlQXVkaW8uYXVkaW9EYXRhKSlcclxuICAgIHtcclxuICAgICAgICAvLyAgU291bmRzIGFyZSBkaXNhYmxlZCwgc28gc2tpcCBsb2FkaW5nIGF1ZGlvXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXVkaW9TcHJpdGVGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobXVsdGlmaWxlLmZpbGVzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXVkaW9TcHJpdGVGaWxlKHRoaXMsIGtleSwganNvblVSTCwgYXVkaW9VUkwsIGF1ZGlvQ29uZmlnLCBhdWRpb1hoclNldHRpbmdzLCBqc29uWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICBpZiAobXVsdGlmaWxlLmZpbGVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/BinaryFile.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/BinaryFile.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Binary File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#binary method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#binary.\r\n *\r\n * @class BinaryFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BinaryFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.bin`, i.e. if `key` was \"alien\" then the URL will be \"alien.bin\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {any} [dataType] - Optional type to cast the binary file to once loaded. For example, `Uint8Array`.\r\n */\r\nvar BinaryFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function BinaryFile (loader, key, url, xhrSettings, dataType)\r\n    {\r\n        var extension = 'bin';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            dataType = GetFastValue(config, 'dataType', dataType);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'binary',\r\n            cache: loader.cacheManager.binary,\r\n            extension: extension,\r\n            responseType: 'arraybuffer',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: { dataType: dataType }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.BinaryFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        var ctor = this.config.dataType;\r\n\r\n        this.data = (ctor) ? new ctor(this.xhrLoader.response) : this.xhrLoader.response;\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Binary file, or array of Binary files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.binary('doom', 'files/Doom.wad');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Binary Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Binary Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Binary Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.binary({\r\n *     key: 'doom',\r\n *     url: 'files/Doom.wad',\r\n *     dataType: Uint8Array\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.BinaryFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.binary('doom', 'files/Doom.wad');\r\n * // and later in your game ...\r\n * var data = this.cache.binary.get('doom');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Data` the final key will be `LEVEL1.Data` and\r\n * this is what you would use to retrieve the text from the Binary Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"doom\"\r\n * and no URL is given then the Loader will set the URL to be \"doom.bin\". It will always add `.bin` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Binary File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#binary\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BinaryFileConfig|Phaser.Types.Loader.FileTypes.BinaryFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.bin`, i.e. if `key` was \"alien\" then the URL will be \"alien.bin\".\r\n * @param {any} [dataType] - Optional type to cast the binary file to once loaded. For example, `Uint8Array`.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('binary', function (key, url, dataType, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new BinaryFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new BinaryFile(this, key, url, xhrSettings, dataType));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = BinaryFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpbmFyeUZpbGUuanM/NzAwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUdBQXlHO0FBQ3BILFdBQVcsT0FBTztBQUNsQixXQUFXLElBQUk7QUFDZixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpbmFyeUZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgQmluYXJ5IEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaW5hcnkgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaW5hcnkuXHJcbiAqXHJcbiAqIEBjbGFzcyBCaW5hcnlGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uYmluYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uYmluXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHthbnl9IFtkYXRhVHlwZV0gLSBPcHRpb25hbCB0eXBlIHRvIGNhc3QgdGhlIGJpbmFyeSBmaWxlIHRvIG9uY2UgbG9hZGVkLiBGb3IgZXhhbXBsZSwgYFVpbnQ4QXJyYXlgLlxyXG4gKi9cclxudmFyIEJpbmFyeUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCaW5hcnlGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YVR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdiaW4nO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgZGF0YVR5cGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGF0YVR5cGUnLCBkYXRhVHlwZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ2JpbmFyeScsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLmJpbmFyeSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXHJcbiAgICAgICAgICAgIGNvbmZpZzogeyBkYXRhVHlwZTogZGF0YVR5cGUgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHZhciBjdG9yID0gdGhpcy5jb25maWcuZGF0YVR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IChjdG9yKSA/IG5ldyBjdG9yKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlKSA6IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgQmluYXJ5IGZpbGUsIG9yIGFycmF5IG9mIEJpbmFyeSBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmJpbmFyeSgnZG9vbScsICdmaWxlcy9Eb29tLndhZCcpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEJpbmFyeSBDYWNoZSB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgQmluYXJ5IENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgQmluYXJ5IENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaW5hcnkoe1xyXG4gKiAgICAga2V5OiAnZG9vbScsXHJcbiAqICAgICB1cmw6ICdmaWxlcy9Eb29tLndhZCcsXHJcbiAqICAgICBkYXRhVHlwZTogVWludDhBcnJheVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpbmFyeSgnZG9vbScsICdmaWxlcy9Eb29tLndhZCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUuYmluYXJ5LmdldCgnZG9vbScpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgRGF0YWAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBMRVZFTDEuRGF0YWAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEJpbmFyeSBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJkb29tXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImRvb20uYmluXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmJpbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQmluYXJ5IEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2JpbmFyeVxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQmluYXJ5RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaW5hcnlGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uYmluYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uYmluXCIuXHJcbiAqIEBwYXJhbSB7YW55fSBbZGF0YVR5cGVdIC0gT3B0aW9uYWwgdHlwZSB0byBjYXN0IHRoZSBiaW5hcnkgZmlsZSB0byBvbmNlIGxvYWRlZC4gRm9yIGV4YW1wbGUsIGBVaW50OEFycmF5YC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2JpbmFyeScsIGZ1bmN0aW9uIChrZXksIHVybCwgZGF0YVR5cGUsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgQmluYXJ5RmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBCaW5hcnlGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YVR5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpbmFyeUZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/BinaryFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ../../gameobjects/bitmaptext/ParseXMLBitmapFont.js */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\nvar XMLFile = __webpack_require__(/*! ./XMLFile.js */ \"./node_modules/phaser/src/loader/filetypes/XMLFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Bitmap Font based File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#bitmapFont method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#bitmapFont.\r\n *\r\n * @class BitmapFontFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the font image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [fontDataURL] - The absolute or relative URL to load the font xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the font image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [fontDataXhrSettings] - An XHR Settings configuration object for the font data xml file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar BitmapFontFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function BitmapFontFile (loader, key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings)\r\n    {\r\n        var image;\r\n        var data;\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n\r\n            image = new ImageFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'textureURL'),\r\n                extension: GetFastValue(config, 'textureExtension', 'png'),\r\n                normalMap: GetFastValue(config, 'normalMap'),\r\n                xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n            });\r\n\r\n            data = new XMLFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'fontDataURL'),\r\n                extension: GetFastValue(config, 'fontDataExtension', 'xml'),\r\n                xhrSettings: GetFastValue(config, 'fontDataXhrSettings')\r\n            });\r\n        }\r\n        else\r\n        {\r\n            image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n            data = new XMLFile(loader, key, fontDataURL, fontDataXhrSettings);\r\n        }\r\n\r\n        if (image.linkFile)\r\n        {\r\n            //  Image has a normal map\r\n            MultiFile.call(this, loader, 'bitmapfont', key, [ image, data, image.linkFile ]);\r\n        }\r\n        else\r\n        {\r\n            MultiFile.call(this, loader, 'bitmapfont', key, [ image, data ]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.BitmapFontFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var image = this.files[0];\r\n            var xml = this.files[1];\r\n\r\n            image.addToCache();\r\n            xml.addToCache();\r\n\r\n            this.loader.cacheManager.bitmapFont.add(image.key, { data: ParseXMLBitmapFont(xml.data), texture: image.key, frame: null });\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an XML based Bitmap Font, or array of fonts, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.bitmapFont('goldenFont', 'images/GoldFont.png', 'images/GoldFont.xml');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the font data to be provided in an XML file format.\r\n * These files are created by software such as the [Angelcode Bitmap Font Generator](http://www.angelcode.com/products/bmfont/),\r\n * [Littera](http://kvazars.com/littera/) or [Glyph Designer](https://71squared.com/glyphdesigner)\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont({\r\n *     key: 'goldenFont',\r\n *     textureURL: 'images/GoldFont.png',\r\n *     fontDataURL: 'images/GoldFont.xml'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.BitmapFontFileConfig` for more details.\r\n *\r\n * Once the atlas has finished loading you can use key of it when creating a Bitmap Text Game Object:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont('goldenFont', 'images/GoldFont.png', 'images/GoldFont.xml');\r\n * // and later in your game ...\r\n * this.add.bitmapText(x, y, 'goldenFont', 'Hello World');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use when creating a Bitmap Text object.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont('goldenFont', [ 'images/GoldFont.png', 'images/GoldFont-n.png' ], 'images/GoldFont.xml');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont({\r\n *     key: 'goldenFont',\r\n *     textureURL: 'images/GoldFont.png',\r\n *     normalMap: 'images/GoldFont-n.png',\r\n *     fontDataURL: 'images/GoldFont.xml'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Bitmap Font File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#bitmapFont\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the font image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [fontDataURL] - The absolute or relative URL to load the font xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the font image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [fontDataXhrSettings] - An XHR Settings configuration object for the font data xml file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('bitmapFont', function (key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new BitmapFontFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new BitmapFontFile(this, key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = BitmapFontFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpdG1hcEZvbnRGaWxlLmpzP2RiZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjtBQUN6Qyx5QkFBeUIsbUJBQU8sQ0FBQyxrSUFBb0Q7QUFDckYsY0FBYyxtQkFBTyxDQUFDLDJFQUFjOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyw0REFBNEQ7QUFDdkUsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnRUFBZ0Usc0VBQXNFOztBQUV0STtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpSEFBaUg7QUFDNUgsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9CaXRtYXBGb250RmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBNdWx0aUZpbGUgPSByZXF1aXJlKCcuLi9NdWx0aUZpbGUuanMnKTtcclxudmFyIFBhcnNlWE1MQml0bWFwRm9udCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUGFyc2VYTUxCaXRtYXBGb250LmpzJyk7XHJcbnZhciBYTUxGaWxlID0gcmVxdWlyZSgnLi9YTUxGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBCaXRtYXAgRm9udCBiYXNlZCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYml0bWFwRm9udCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2JpdG1hcEZvbnQuXHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBGb250RmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpdG1hcEZvbnRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZm9udERhdGFVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBmb250IGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2ZvbnREYXRhWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZm9udCBkYXRhIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKi9cclxudmFyIEJpdG1hcEZvbnRGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCaXRtYXBGb250RmlsZSAobG9hZGVyLCBrZXksIHRleHR1cmVVUkwsIGZvbnREYXRhVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGZvbnREYXRhWGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGltYWdlO1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVVSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZUV4dGVuc2lvbicsICdwbmcnKSxcclxuICAgICAgICAgICAgICAgIG5vcm1hbE1hcDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgWE1MRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZm9udERhdGFVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZvbnREYXRhRXh0ZW5zaW9uJywgJ3htbCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdmb250RGF0YVhoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBYTUxGaWxlKGxvYWRlciwga2V5LCBmb250RGF0YVVSTCwgZm9udERhdGFYaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW1hZ2UubGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSW1hZ2UgaGFzIGEgbm9ybWFsIG1hcFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdiaXRtYXBmb250Jywga2V5LCBbIGltYWdlLCBkYXRhLCBpbWFnZS5saW5rRmlsZSBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYml0bWFwZm9udCcsIGtleSwgWyBpbWFnZSwgZGF0YSBdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkJpdG1hcEZvbnRGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSB0aGlzLmZpbGVzWzFdO1xyXG5cclxuICAgICAgICAgICAgaW1hZ2UuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICB4bWwuYWRkVG9DYWNoZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIuY2FjaGVNYW5hZ2VyLmJpdG1hcEZvbnQuYWRkKGltYWdlLmtleSwgeyBkYXRhOiBQYXJzZVhNTEJpdG1hcEZvbnQoeG1sLmRhdGEpLCB0ZXh0dXJlOiBpbWFnZS5rZXksIGZyYW1lOiBudWxsIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBYTUwgYmFzZWQgQml0bWFwIEZvbnQsIG9yIGFycmF5IG9mIGZvbnRzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuYml0bWFwRm9udCgnZ29sZGVuRm9udCcsICdpbWFnZXMvR29sZEZvbnQucG5nJywgJ2ltYWdlcy9Hb2xkRm9udC54bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogSWYgeW91IGNhbGwgdGhpcyBmcm9tIG91dHNpZGUgb2YgYHByZWxvYWRgIHRoZW4geW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcgdGhlIExvYWRlciBhZnRlcndhcmRzIGFuZCBtb25pdG9yaW5nXHJcbiAqIGl0cyBldmVudHMgdG8ga25vdyB3aGVuIGl0J3Mgc2FmZSB0byB1c2UgdGhlIGFzc2V0LiBQbGVhc2Ugc2VlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiBjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBQaGFzZXIgZXhwZWN0cyB0aGUgZm9udCBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGFuIFhNTCBmaWxlIGZvcm1hdC5cclxuICogVGhlc2UgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgc29mdHdhcmUgc3VjaCBhcyB0aGUgW0FuZ2VsY29kZSBCaXRtYXAgRm9udCBHZW5lcmF0b3JdKGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvKSxcclxuICogW0xpdHRlcmFdKGh0dHA6Ly9rdmF6YXJzLmNvbS9saXR0ZXJhLykgb3IgW0dseXBoIERlc2lnbmVyXShodHRwczovLzcxc3F1YXJlZC5jb20vZ2x5cGhkZXNpZ25lcilcclxuICogXHJcbiAqIFBoYXNlciBjYW4gbG9hZCBhbGwgY29tbW9uIGltYWdlIHR5cGVzOiBwbmcsIGpwZywgZ2lmIGFuZCBhbnkgb3RoZXIgZm9ybWF0IHRoZSBicm93c2VyIGNhbiBuYXRpdmVseSBoYW5kbGUuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpdG1hcEZvbnQoe1xyXG4gKiAgICAga2V5OiAnZ29sZGVuRm9udCcsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL0dvbGRGb250LnBuZycsXHJcbiAqICAgICBmb250RGF0YVVSTDogJ2ltYWdlcy9Hb2xkRm9udC54bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQml0bWFwRm9udEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGtleSBvZiBpdCB3aGVuIGNyZWF0aW5nIGEgQml0bWFwIFRleHQgR2FtZSBPYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaXRtYXBGb250KCdnb2xkZW5Gb250JywgJ2ltYWdlcy9Hb2xkRm9udC5wbmcnLCAnaW1hZ2VzL0dvbGRGb250LnhtbCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLmFkZC5iaXRtYXBUZXh0KHgsIHksICdnb2xkZW5Gb250JywgJ0hlbGxvIFdvcmxkJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB3aGVuIGNyZWF0aW5nIGEgQml0bWFwIFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBQaGFzZXIgYWxzbyBzdXBwb3J0cyB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgYXNzb2NpYXRlZCBub3JtYWwgbWFwcy4gSWYgeW91IGhhdmUgYSBub3JtYWwgbWFwIHRvIGdvIHdpdGggdGhpcyBpbWFnZSxcclxuICogdGhlbiB5b3UgY2FuIHNwZWNpZnkgaXQgYnkgcHJvdmlkaW5nIGFuIGFycmF5IGFzIHRoZSBgdXJsYCB3aGVyZSB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIG5vcm1hbCBtYXA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaXRtYXBGb250KCdnb2xkZW5Gb250JywgWyAnaW1hZ2VzL0dvbGRGb250LnBuZycsICdpbWFnZXMvR29sZEZvbnQtbi5wbmcnIF0sICdpbWFnZXMvR29sZEZvbnQueG1sJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpdG1hcEZvbnQoe1xyXG4gKiAgICAga2V5OiAnZ29sZGVuRm9udCcsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL0dvbGRGb250LnBuZycsXHJcbiAqICAgICBub3JtYWxNYXA6ICdpbWFnZXMvR29sZEZvbnQtbi5wbmcnLFxyXG4gKiAgICAgZm9udERhdGFVUkw6ICdpbWFnZXMvR29sZEZvbnQueG1sJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBub3JtYWwgbWFwIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zIGFzIHRoZSBpbWFnZSBmaWxlIHdpdGggcmVnYXJkIHRvIHRoZSBwYXRoLCBiYXNlVVJMLCBDT1JzIGFuZCBYSFIgU2V0dGluZ3MuXHJcbiAqIE5vcm1hbCBtYXBzIGFyZSBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBCaXRtYXAgRm9udCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaXRtYXBGb250XHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaXRtYXBGb250RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaXRtYXBGb250RmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZm9udERhdGFVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBmb250IGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2ZvbnREYXRhWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZm9udCBkYXRhIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2JpdG1hcEZvbnQnLCBmdW5jdGlvbiAoa2V5LCB0ZXh0dXJlVVJMLCBmb250RGF0YVVSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBmb250RGF0YVhoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgbXVsdGlmaWxlO1xyXG5cclxuICAgIC8vICBTdXBwb3J0cyBhbiBPYmplY3QgZmlsZSBkZWZpbml0aW9uIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhIHNpbmdsZSBlbnRyeSB3aGVyZSBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBkZWZpbmVkXHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG11bHRpZmlsZSA9IG5ldyBCaXRtYXBGb250RmlsZSh0aGlzLCBrZXlbaV0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIG11bHRpZmlsZSA9IG5ldyBCaXRtYXBGb250RmlsZSh0aGlzLCBrZXksIHRleHR1cmVVUkwsIGZvbnREYXRhVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGZvbnREYXRhWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcEZvbnRGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/CSSFile.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/CSSFile.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single CSS File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#css method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#css.\r\n *\r\n * @class CSSFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.CSSFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar CSSFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function CSSFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'css';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'script',\r\n            cache: false,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.CSSFile#onProcess\r\n     * @since 3.17.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = document.createElement('style');\r\n        this.data.defer = false;\r\n        this.data.innerHTML = this.xhrLoader.responseText;\r\n\r\n        document.head.appendChild(this.data);\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a CSS file, or array of CSS files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.css('headers', 'styles/headers.css');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.css({\r\n *     key: 'headers',\r\n *     url: 'styles/headers.css'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.CSSFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a style DOM element\r\n * via `document.createElement('style')`. It will have its `defer` property set to false and then the\r\n * resulting element will be appended to `document.head`. The CSS styles are then applied to the current document.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.css\". It will always add `.css` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the CSS File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#css\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.CSSFileConfig|Phaser.Types.Loader.FileTypes.CSSFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.css`, i.e. if `key` was \"alien\" then the URL will be \"alien.css\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('css', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new CSSFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new CSSFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = CSSFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0NTU0ZpbGUuanM/NTMyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1HQUFtRztBQUM5RyxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9DU1NGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIENTUyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3NzIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3NzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ1NTRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBDU1NGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ1NTRmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdjc3MnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnc2NyaXB0JyxcclxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmRlZmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRhLmlubmVySFRNTCA9IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgQ1NTIGZpbGUsIG9yIGFycmF5IG9mIENTUyBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmNzcygnaGVhZGVycycsICdzdHlsZXMvaGVhZGVycy5jc3MnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZyBhbmQgbm90IGFscmVhZHkgaW4tdXNlIGJ5IGFub3RoZXIgZmlsZSBpbiB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuY3NzKHtcclxuICogICAgIGtleTogJ2hlYWRlcnMnLFxyXG4gKiAgICAgdXJsOiAnc3R5bGVzL2hlYWRlcnMuY3NzJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkNTU0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbnZlcnRlZCBpbnRvIGEgc3R5bGUgRE9NIGVsZW1lbnRcclxuICogdmlhIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpYC4gSXQgd2lsbCBoYXZlIGl0cyBgZGVmZXJgIHByb3BlcnR5IHNldCB0byBmYWxzZSBhbmQgdGhlbiB0aGVcclxuICogcmVzdWx0aW5nIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZCB0byBgZG9jdW1lbnQuaGVhZGAuIFRoZSBDU1Mgc3R5bGVzIGFyZSB0aGVuIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4uY3NzXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmNzc2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQ1NTIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2Nzc1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkNTU0ZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmNzc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmNzc1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignY3NzJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IENTU0ZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgQ1NTRmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENTU0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/CSSFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/GLSLFile.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/GLSLFile.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar Shader = __webpack_require__(/*! ../../display/shader/BaseShader */ \"./node_modules/phaser/src/display/shader/BaseShader.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single GLSL File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#glsl method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#glsl.\r\n *\r\n * @class GLSLFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.GLSLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {string} [shaderType='fragment'] - The type of shader. Either `fragment` for a fragment shader, or `vertex` for a vertex shader. This is ignored if you load a shader bundle.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar GLSLFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function GLSLFile (loader, key, url, shaderType, xhrSettings)\r\n    {\r\n        var extension = 'glsl';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            shaderType = GetFastValue(config, 'shaderType', 'fragment');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n        else if (shaderType === undefined)\r\n        {\r\n            shaderType = 'fragment';\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'glsl',\r\n            cache: loader.cacheManager.shader,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            config: {\r\n                shaderType: shaderType\r\n            },\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = this.xhrLoader.responseText;\r\n\r\n        this.onProcessComplete();\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#addToCache\r\n     * @since 3.17.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var data = this.data.split('\\n');\r\n\r\n        //  Check to see if this is a shader bundle, or raw glsl file.\r\n        var block = this.extractBlock(data, 0);\r\n\r\n        if (block)\r\n        {\r\n            while (block)\r\n            {\r\n                var key = this.getShaderName(block.header);\r\n                var shaderType = this.getShaderType(block.header);\r\n                var uniforms = this.getShaderUniforms(block.header);\r\n                var shaderSrc = block.shader;\r\n\r\n                if (this.cache.has(key))\r\n                {\r\n                    var shader = this.cache.get(key);\r\n\r\n                    if (shaderType === 'fragment')\r\n                    {\r\n                        shader.fragmentSrc = shaderSrc;\r\n                    }\r\n                    else\r\n                    {\r\n                        shader.vertexSrc = shaderSrc;\r\n                    }\r\n\r\n                    if (!shader.uniforms)\r\n                    {\r\n                        shader.uniforms = uniforms;\r\n                    }\r\n                }\r\n                else if (shaderType === 'fragment')\r\n                {\r\n                    this.cache.add(key, new Shader(key, shaderSrc, '', uniforms));\r\n                }\r\n                else\r\n                {\r\n                    this.cache.add(key, new Shader(key, '', shaderSrc, uniforms));\r\n                }\r\n\r\n                block = this.extractBlock(data, block.offset);\r\n            }\r\n        }\r\n        else if (this.config.shaderType === 'fragment')\r\n        {\r\n            //  Single shader\r\n            this.cache.add(this.key, new Shader(this.key, this.data));\r\n        }\r\n        else\r\n        {\r\n            this.cache.add(this.key, new Shader(this.key, '', this.data));\r\n        }\r\n\r\n        this.pendingDestroy();\r\n    },\r\n\r\n    /**\r\n     * Returns the name of the shader from the header block.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#getShaderName\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string[]} headerSource - The header data.\r\n     * \r\n     * @return {string} The shader name.\r\n     */\r\n    getShaderName: function (headerSource)\r\n    {\r\n        for (var i = 0; i < headerSource.length; i++)\r\n        {\r\n            var line = headerSource[i].trim();\r\n\r\n            if (line.substring(0, 5) === 'name:')\r\n            {\r\n                return line.substring(5).trim();\r\n            }\r\n        }\r\n\r\n        return this.key;\r\n    },\r\n\r\n    /**\r\n     * Returns the type of the shader from the header block.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#getShaderType\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string[]} headerSource - The header data.\r\n     * \r\n     * @return {string} The shader type. Either 'fragment' or 'vertex'.\r\n     */\r\n    getShaderType: function (headerSource)\r\n    {\r\n        for (var i = 0; i < headerSource.length; i++)\r\n        {\r\n            var line = headerSource[i].trim();\r\n\r\n            if (line.substring(0, 5) === 'type:')\r\n            {\r\n                return line.substring(5).trim();\r\n            }\r\n        }\r\n\r\n        return this.config.shaderType;\r\n    },\r\n\r\n    /**\r\n     * Returns the shader uniforms from the header block.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#getShaderUniforms\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string[]} headerSource - The header data.\r\n     * \r\n     * @return {any} The shader uniforms object.\r\n     */\r\n    getShaderUniforms: function (headerSource)\r\n    {\r\n        var uniforms = {};\r\n\r\n        for (var i = 0; i < headerSource.length; i++)\r\n        {\r\n            var line = headerSource[i].trim();\r\n\r\n            if (line.substring(0, 8) === 'uniform.')\r\n            {\r\n                var pos = line.indexOf(':');\r\n\r\n                if (pos)\r\n                {\r\n                    var key = line.substring(8, pos);\r\n\r\n                    try\r\n                    {\r\n                        uniforms[key] = JSON.parse(line.substring(pos + 1));\r\n                    }\r\n                    catch (e)\r\n                    {\r\n                        console.warn('Invalid uniform JSON: ' + key);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return uniforms;\r\n    },\r\n\r\n    /**\r\n     * Processes the shader file and extracts the relevant data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.GLSLFile#extractBlock\r\n     * @private\r\n     * @since 3.17.0\r\n     * \r\n     * @param {string[]} data - The array of shader data to process.\r\n     * @param {integer} offset - The offset to start processing from.\r\n     * \r\n     * @return {any} The processed shader block, or null.\r\n     */\r\n    extractBlock: function (data, offset)\r\n    {\r\n        var headerStart = -1;\r\n        var headerEnd = -1;\r\n        var blockEnd = -1;\r\n        var headerOpen = false;\r\n        var captureSource = false;\r\n        var headerSource = [];\r\n        var shaderSource = [];\r\n\r\n        for (var i = offset; i < data.length; i++)\r\n        {\r\n            var line = data[i].trim();\r\n\r\n            if (line === '---')\r\n            {\r\n                if (headerStart === -1)\r\n                {\r\n                    headerStart = i;\r\n                    headerOpen = true;\r\n                }\r\n                else if (headerOpen)\r\n                {\r\n                    headerEnd = i;\r\n                    headerOpen = false;\r\n                    captureSource = true;\r\n                }\r\n                else\r\n                {\r\n                    //  We've hit another --- delimiter, break out\r\n                    captureSource = false;\r\n                    break;\r\n                }\r\n            }\r\n            else if (headerOpen)\r\n            {\r\n                headerSource.push(line);\r\n            }\r\n            else if (captureSource)\r\n            {\r\n                shaderSource.push(line);\r\n                blockEnd = i;\r\n            }\r\n        }\r\n\r\n        if (!headerOpen && headerEnd !== -1)\r\n        {\r\n            return { header: headerSource, shader: shaderSource.join('\\n'), offset: blockEnd };\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a GLSL file, or array of GLSL files, to the current load queue.\r\n * In Phaser 3 GLSL files are just plain Text files at the current moment in time.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.glsl('plasma', 'shaders/Plasma.glsl');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Shader Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Shader Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Shader Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.glsl({\r\n *     key: 'plasma',\r\n *     shaderType: 'fragment',\r\n *     url: 'shaders/Plasma.glsl'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.GLSLFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.glsl('plasma', 'shaders/Plasma.glsl');\r\n * // and later in your game ...\r\n * var data = this.cache.shader.get('plasma');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `FX.` and the key was `Plasma` the final key will be `FX.Plasma` and\r\n * this is what you would use to retrieve the text from the Shader Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"plasma\"\r\n * and no URL is given then the Loader will set the URL to be \"plasma.glsl\". It will always add `.glsl` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the GLSL File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#glsl\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.GLSLFileConfig|Phaser.Types.Loader.FileTypes.GLSLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.glsl`, i.e. if `key` was \"alien\" then the URL will be \"alien.glsl\".\r\n * @param {string} [shaderType='fragment'] - The type of shader. Either `fragment` for a fragment shader, or `vertex` for a vertex shader. This is ignored if you load a shader bundle.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('glsl', function (key, url, shaderType, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new GLSLFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new GLSLFile(this, key, url, shaderType, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = GLSLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0dMU0xGaWxlLmpzPzNhNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxhQUFhLG1CQUFPLENBQUMsK0ZBQWlDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxzREFBc0Q7QUFDakUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsaUJBQWlCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFHQUFxRztBQUNoSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvR0xTTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9zaGFkZXIvQmFzZVNoYWRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgR0xTTCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZ2xzbCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2dsc2wuXHJcbiAqXHJcbiAqIEBjbGFzcyBHTFNMRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi50eHRgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi50eHRcIi5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtzaGFkZXJUeXBlPSdmcmFnbWVudCddIC0gVGhlIHR5cGUgb2Ygc2hhZGVyLiBFaXRoZXIgYGZyYWdtZW50YCBmb3IgYSBmcmFnbWVudCBzaGFkZXIsIG9yIGB2ZXJ0ZXhgIGZvciBhIHZlcnRleCBzaGFkZXIuIFRoaXMgaXMgaWdub3JlZCBpZiB5b3UgbG9hZCBhIHNoYWRlciBidW5kbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBHTFNMRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEdMU0xGaWxlIChsb2FkZXIsIGtleSwgdXJsLCBzaGFkZXJUeXBlLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2dsc2wnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3NoYWRlclR5cGUnLCAnZnJhZ21lbnQnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlclR5cGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNoYWRlclR5cGUgPSAnZnJhZ21lbnQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdnbHNsJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuc2hhZGVyLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXJUeXBlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5nc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhLnNwbGl0KCdcXG4nKTtcclxuXHJcbiAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgc2hhZGVyIGJ1bmRsZSwgb3IgcmF3IGdsc2wgZmlsZS5cclxuICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmV4dHJhY3RCbG9jayhkYXRhLCAwKTtcclxuXHJcbiAgICAgICAgaWYgKGJsb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2hpbGUgKGJsb2NrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5nZXRTaGFkZXJOYW1lKGJsb2NrLmhlYWRlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZGVyVHlwZSA9IHRoaXMuZ2V0U2hhZGVyVHlwZShibG9jay5oZWFkZXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy5nZXRTaGFkZXJVbmlmb3JtcyhibG9jay5oZWFkZXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRlclNyYyA9IGJsb2NrLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTcmMgPSBzaGFkZXJTcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTcmMgPSBzaGFkZXJTcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRlci51bmlmb3JtcylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlci51bmlmb3JtcyA9IHVuaWZvcm1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQoa2V5LCBuZXcgU2hhZGVyKGtleSwgc2hhZGVyU3JjLCAnJywgdW5pZm9ybXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLmFkZChrZXksIG5ldyBTaGFkZXIoa2V5LCAnJywgc2hhZGVyU3JjLCB1bmlmb3JtcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJsb2NrID0gdGhpcy5leHRyYWN0QmxvY2soZGF0YSwgYmxvY2sub2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbmZpZy5zaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNpbmdsZSBzaGFkZXJcclxuICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQodGhpcy5rZXksIG5ldyBTaGFkZXIodGhpcy5rZXksIHRoaXMuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlLmFkZCh0aGlzLmtleSwgbmV3IFNoYWRlcih0aGlzLmtleSwgJycsIHRoaXMuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNoYWRlciBmcm9tIHRoZSBoZWFkZXIgYmxvY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZSNnZXRTaGFkZXJOYW1lXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlclNvdXJjZSAtIFRoZSBoZWFkZXIgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc2hhZGVyIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFNoYWRlck5hbWU6IGZ1bmN0aW9uIChoZWFkZXJTb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJTb3VyY2UubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbGluZSA9IGhlYWRlclNvdXJjZVtpXS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZS5zdWJzdHJpbmcoMCwgNSkgPT09ICduYW1lOicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyg1KS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmtleTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBzaGFkZXIgZnJvbSB0aGUgaGVhZGVyIGJsb2NrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGUjZ2V0U2hhZGVyVHlwZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJTb3VyY2UgLSBUaGUgaGVhZGVyIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHNoYWRlciB0eXBlLiBFaXRoZXIgJ2ZyYWdtZW50JyBvciAndmVydGV4Jy5cclxuICAgICAqL1xyXG4gICAgZ2V0U2hhZGVyVHlwZTogZnVuY3Rpb24gKGhlYWRlclNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlclNvdXJjZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBsaW5lID0gaGVhZGVyU291cmNlW2ldLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lLnN1YnN0cmluZygwLCA1KSA9PT0gJ3R5cGU6JylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3Vic3RyaW5nKDUpLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnNoYWRlclR5cGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2hhZGVyIHVuaWZvcm1zIGZyb20gdGhlIGhlYWRlciBibG9jay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlI2dldFNoYWRlclVuaWZvcm1zXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlclNvdXJjZSAtIFRoZSBoZWFkZXIgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgc2hhZGVyIHVuaWZvcm1zIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0U2hhZGVyVW5pZm9ybXM6IGZ1bmN0aW9uIChoZWFkZXJTb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVyU291cmNlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBoZWFkZXJTb3VyY2VbaV0udHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmUuc3Vic3RyaW5nKDAsIDgpID09PSAndW5pZm9ybS4nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gbGluZS5pbmRleE9mKCc6Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbGluZS5zdWJzdHJpbmcoOCwgcG9zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1trZXldID0gSlNPTi5wYXJzZShsaW5lLnN1YnN0cmluZyhwb3MgKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHVuaWZvcm0gSlNPTjogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBzaGFkZXIgZmlsZSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZSNleHRyYWN0QmxvY2tcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGRhdGEgLSBUaGUgYXJyYXkgb2Ygc2hhZGVyIGRhdGEgdG8gcHJvY2Vzcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gb2Zmc2V0IC0gVGhlIG9mZnNldCB0byBzdGFydCBwcm9jZXNzaW5nIGZyb20uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2FueX0gVGhlIHByb2Nlc3NlZCBzaGFkZXIgYmxvY2ssIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGV4dHJhY3RCbG9jazogZnVuY3Rpb24gKGRhdGEsIG9mZnNldClcclxuICAgIHtcclxuICAgICAgICB2YXIgaGVhZGVyU3RhcnQgPSAtMTtcclxuICAgICAgICB2YXIgaGVhZGVyRW5kID0gLTE7XHJcbiAgICAgICAgdmFyIGJsb2NrRW5kID0gLTE7XHJcbiAgICAgICAgdmFyIGhlYWRlck9wZW4gPSBmYWxzZTtcclxuICAgICAgICB2YXIgY2FwdHVyZVNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBoZWFkZXJTb3VyY2UgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZGVyU291cmNlID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBkYXRhW2ldLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lID09PSAnLS0tJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlclN0YXJ0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJTdGFydCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyT3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoZWFkZXJPcGVuKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckVuZCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVTb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBXZSd2ZSBoaXQgYW5vdGhlciAtLS0gZGVsaW1pdGVyLCBicmVhayBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlU291cmNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaGVhZGVyT3BlbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyU291cmNlLnB1c2gobGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2FwdHVyZVNvdXJjZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2hhZGVyU291cmNlLnB1c2gobGluZSk7XHJcbiAgICAgICAgICAgICAgICBibG9ja0VuZCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyT3BlbiAmJiBoZWFkZXJFbmQgIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiBoZWFkZXJTb3VyY2UsIHNoYWRlcjogc2hhZGVyU291cmNlLmpvaW4oJ1xcbicpLCBvZmZzZXQ6IGJsb2NrRW5kIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBHTFNMIGZpbGUsIG9yIGFycmF5IG9mIEdMU0wgZmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqIEluIFBoYXNlciAzIEdMU0wgZmlsZXMgYXJlIGp1c3QgcGxhaW4gVGV4dCBmaWxlcyBhdCB0aGUgY3VycmVudCBtb21lbnQgaW4gdGltZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmdsc2woJ3BsYXNtYScsICdzaGFkZXJzL1BsYXNtYS5nbHNsJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgU2hhZGVyIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBTaGFkZXIgQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBTaGFkZXIgQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmdsc2woe1xyXG4gKiAgICAga2V5OiAncGxhc21hJyxcclxuICogICAgIHNoYWRlclR5cGU6ICdmcmFnbWVudCcsXHJcbiAqICAgICB1cmw6ICdzaGFkZXJzL1BsYXNtYS5nbHNsJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gYWNjZXNzIGl0IGZyb20gaXRzIENhY2hlIHVzaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5nbHNsKCdwbGFzbWEnLCAnc2hhZGVycy9QbGFzbWEuZ2xzbCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUuc2hhZGVyLmdldCgncGxhc21hJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgRlguYCBhbmQgdGhlIGtleSB3YXMgYFBsYXNtYWAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBGWC5QbGFzbWFgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSBTaGFkZXIgQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwicGxhc21hXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcInBsYXNtYS5nbHNsXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmdsc2xgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdMU0wgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZ2xzbFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5nbHNsYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uZ2xzbFwiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NoYWRlclR5cGU9J2ZyYWdtZW50J10gLSBUaGUgdHlwZSBvZiBzaGFkZXIuIEVpdGhlciBgZnJhZ21lbnRgIGZvciBhIGZyYWdtZW50IHNoYWRlciwgb3IgYHZlcnRleGAgZm9yIGEgdmVydGV4IHNoYWRlci4gVGhpcyBpcyBpZ25vcmVkIGlmIHlvdSBsb2FkIGEgc2hhZGVyIGJ1bmRsZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2dsc2wnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHNoYWRlclR5cGUsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgR0xTTEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgR0xTTEZpbGUodGhpcywga2V5LCB1cmwsIHNoYWRlclR5cGUsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHTFNMRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/GLSLFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetURL = __webpack_require__(/*! ../GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Audio File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audio method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audio.\r\n *\r\n * @class HTML5AudioFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [urlConfig] - The absolute or relative URL to load this file from.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTML5AudioFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function HTML5AudioFile (loader, key, urlConfig, audioConfig)\r\n    {\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            audioConfig = GetFastValue(config, 'config', audioConfig);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'audio',\r\n            cache: loader.cacheManager.audio,\r\n            extension: urlConfig.type,\r\n            key: key,\r\n            url: urlConfig.url,\r\n            config: audioConfig\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        //  New properties specific to this class\r\n        this.locked = 'ontouchstart' in window;\r\n        this.loaded = false;\r\n        this.filesLoaded = 0;\r\n        this.filesTotal = 0;\r\n    },\r\n\r\n    /**\r\n     * Called when the file finishes loading.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTML5AudioFile#onLoad\r\n     * @since 3.0.0\r\n     */\r\n    onLoad: function ()\r\n    {\r\n        if (this.loaded)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.loaded = true;\r\n\r\n        this.loader.nextFile(this, true);\r\n    },\r\n\r\n    /**\r\n     * Called if the file errors while loading.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTML5AudioFile#onError\r\n     * @since 3.0.0\r\n     */\r\n    onError: function ()\r\n    {\r\n        for (var i = 0; i < this.data.length; i++)\r\n        {\r\n            var audio = this.data[i];\r\n\r\n            audio.oncanplaythrough = null;\r\n            audio.onerror = null;\r\n        }\r\n\r\n        this.loader.nextFile(this, false);\r\n    },\r\n\r\n    /**\r\n     * Called during the file load progress. Is sent a DOM ProgressEvent.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTML5AudioFile#onProgress\r\n     * @fires Phaser.Loader.Events#FILE_PROGRESS\r\n     * @since 3.0.0\r\n     */\r\n    onProgress: function (event)\r\n    {\r\n        var audio = event.target;\r\n\r\n        audio.oncanplaythrough = null;\r\n        audio.onerror = null;\r\n\r\n        this.filesLoaded++;\r\n\r\n        this.percentComplete = Math.min((this.filesLoaded / this.filesTotal), 1);\r\n\r\n        this.loader.emit(Events.FILE_PROGRESS, this, this.percentComplete);\r\n\r\n        if (this.filesLoaded === this.filesTotal)\r\n        {\r\n            this.onLoad();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by the Loader, starts the actual file downloading.\r\n     * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\r\n     * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTML5AudioFile#load\r\n     * @since 3.0.0\r\n     */\r\n    load: function ()\r\n    {\r\n        this.data = [];\r\n\r\n        var instances = (this.config && this.config.instances) || 1;\r\n\r\n        this.filesTotal = instances;\r\n        this.filesLoaded = 0;\r\n        this.percentComplete = 0;\r\n\r\n        for (var i = 0; i < instances; i++)\r\n        {\r\n            var audio = new Audio();\r\n            audio.dataset = {};\r\n            audio.dataset.name = this.key + ('0' + i).slice(-2);\r\n            audio.dataset.used = 'false';\r\n\r\n            if (this.locked)\r\n            {\r\n                audio.dataset.locked = 'true';\r\n            }\r\n            else\r\n            {\r\n                audio.dataset.locked = 'false';\r\n\r\n                audio.preload = 'auto';\r\n                audio.oncanplaythrough = this.onProgress.bind(this);\r\n                audio.onerror = this.onError.bind(this);\r\n            }\r\n\r\n            this.data.push(audio);\r\n        }\r\n\r\n        for (i = 0; i < this.data.length; i++)\r\n        {\r\n            audio = this.data[i];\r\n            audio.src = GetURL(this, this.loader.baseURL);\r\n\r\n            if (!this.locked)\r\n            {\r\n                audio.load();\r\n            }\r\n        }\r\n\r\n        if (this.locked)\r\n        {\r\n            //  This is super-dangerous but works. Race condition potential high.\r\n            //  Is there another way?\r\n            setTimeout(this.onLoad.bind(this));\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = HTML5AudioFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUw1QXVkaW9GaWxlLmpzPzMzZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLG1FQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1QixtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsYUFBYSxtQkFBTyxDQUFDLDZEQUFXO0FBQ2hDLG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsdURBQXVEO0FBQ2xFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTDVBdWRpb0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRVUkwgPSByZXF1aXJlKCcuLi9HZXRVUkwnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgQXVkaW8gRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F1ZGlvIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXVkaW8uXHJcbiAqXHJcbiAqIEBjbGFzcyBIVE1MNUF1ZGlvRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb0ZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsQ29uZmlnXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIEhUTUw1QXVkaW9GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSFRNTDVBdWRpb0ZpbGUgKGxvYWRlciwga2V5LCB1cmxDb25maWcsIGF1ZGlvQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0ga2V5O1xyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2tleScpO1xyXG4gICAgICAgICAgICBhdWRpb0NvbmZpZyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjb25maWcnLCBhdWRpb0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ2F1ZGlvJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuYXVkaW8sXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogdXJsQ29uZmlnLnR5cGUsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybENvbmZpZy51cmwsXHJcbiAgICAgICAgICAgIGNvbmZpZzogYXVkaW9Db25maWdcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gIE5ldyBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIHRoaXMgY2xhc3NcclxuICAgICAgICB0aGlzLmxvY2tlZCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdztcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZXNMb2FkZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsZXNUb3RhbCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGZpbGUgZmluaXNoZXMgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkhUTUw1QXVkaW9GaWxlI29uTG9hZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uTG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBpZiB0aGUgZmlsZSBlcnJvcnMgd2hpbGUgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkhUTUw1QXVkaW9GaWxlI29uRXJyb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGF1ZGlvID0gdGhpcy5kYXRhW2ldO1xyXG5cclxuICAgICAgICAgICAgYXVkaW8ub25jYW5wbGF5dGhyb3VnaCA9IG51bGw7XHJcbiAgICAgICAgICAgIGF1ZGlvLm9uZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIubmV4dEZpbGUodGhpcywgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBkdXJpbmcgdGhlIGZpbGUgbG9hZCBwcm9ncmVzcy4gSXMgc2VudCBhIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuSFRNTDVBdWRpb0ZpbGUjb25Qcm9ncmVzc1xyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfUFJPR1JFU1NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblByb2dyZXNzOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGF1ZGlvID0gZXZlbnQudGFyZ2V0O1xyXG5cclxuICAgICAgICBhdWRpby5vbmNhbnBsYXl0aHJvdWdoID0gbnVsbDtcclxuICAgICAgICBhdWRpby5vbmVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlc0xvYWRlZCsrO1xyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnRDb21wbGV0ZSA9IE1hdGgubWluKCh0aGlzLmZpbGVzTG9hZGVkIC8gdGhpcy5maWxlc1RvdGFsKSwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfUFJPR1JFU1MsIHRoaXMsIHRoaXMucGVyY2VudENvbXBsZXRlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNMb2FkZWQgPT09IHRoaXMuZmlsZXNUb3RhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgTG9hZGVyLCBzdGFydHMgdGhlIGFjdHVhbCBmaWxlIGRvd25sb2FkaW5nLlxyXG4gICAgICogRHVyaW5nIHRoZSBsb2FkIHRoZSBtZXRob2RzIG9uTG9hZCwgb25FcnJvciBhbmQgb25Qcm9ncmVzcyBhcmUgY2FsbGVkLCBiYXNlZCBvbiB0aGUgWEhSIGV2ZW50cy5cclxuICAgICAqIFlvdSBzaG91bGRuJ3Qgbm9ybWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSwgaXQncyBtZWFudCB0byBiZSBpbnZva2VkIGJ5IHRoZSBMb2FkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MNUF1ZGlvRmlsZSNsb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGluc3RhbmNlcyA9ICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5pbnN0YW5jZXMpIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZXNUb3RhbCA9IGluc3RhbmNlcztcclxuICAgICAgICB0aGlzLmZpbGVzTG9hZGVkID0gMDtcclxuICAgICAgICB0aGlzLnBlcmNlbnRDb21wbGV0ZSA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2VzOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYXVkaW8gPSBuZXcgQXVkaW8oKTtcclxuICAgICAgICAgICAgYXVkaW8uZGF0YXNldCA9IHt9O1xyXG4gICAgICAgICAgICBhdWRpby5kYXRhc2V0Lm5hbWUgPSB0aGlzLmtleSArICgnMCcgKyBpKS5zbGljZSgtMik7XHJcbiAgICAgICAgICAgIGF1ZGlvLmRhdGFzZXQudXNlZCA9ICdmYWxzZSc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvLmRhdGFzZXQubG9ja2VkID0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYXVkaW8uZGF0YXNldC5sb2NrZWQgPSAnZmFsc2UnO1xyXG5cclxuICAgICAgICAgICAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbmNhbnBsYXl0aHJvdWdoID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbmVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGF1ZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdWRpbyA9IHRoaXMuZGF0YVtpXTtcclxuICAgICAgICAgICAgYXVkaW8uc3JjID0gR2V0VVJMKHRoaXMsIHRoaXMubG9hZGVyLmJhc2VVUkwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvY2tlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5sb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVGhpcyBpcyBzdXBlci1kYW5nZXJvdXMgYnV0IHdvcmtzLiBSYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwgaGlnaC5cclxuICAgICAgICAgICAgLy8gIElzIHRoZXJlIGFub3RoZXIgd2F5P1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMub25Mb2FkLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIVE1MNUF1ZGlvRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/HTMLFile.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/HTMLFile.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single HTML File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#html method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#html.\r\n *\r\n * @class HTMLFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTMLFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function HTMLFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'html';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'text',\r\n            cache: loader.cacheManager.html,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTMLFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = this.xhrLoader.responseText;\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an HTML file, or array of HTML files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.html('story', 'files/LoginForm.html');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global HTML Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the HTML Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the HTML Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.html({\r\n *     key: 'login',\r\n *     url: 'files/LoginForm.html'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.HTMLFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.html('login', 'files/LoginForm.html');\r\n * // and later in your game ...\r\n * var data = this.cache.html.get('login');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the html from the HTML Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"story\"\r\n * and no URL is given then the Loader will set the URL to be \"story.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the HTML File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#html\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.12.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLFileConfig|Phaser.Types.Loader.FileTypes.HTMLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.html`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('html', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new HTMLFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new HTMLFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = HTMLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUxGaWxlLmpzP2EwNjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsc0RBQXNEO0FBQ2pFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgSFRNTCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbC5cclxuICpcclxuICogQGNsYXNzIEhUTUxGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5IVE1MRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi50eHRgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5odG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBIVE1MRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEhUTUxGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2h0bWwnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLmh0bWwsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3NcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0O1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIEhUTUwgZmlsZSwgb3IgYXJyYXkgb2YgSFRNTCBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuaHRtbCgnc3RvcnknLCAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKlxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEhUTUwgQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEhUTUwgQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBIVE1MIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmh0bWwoe1xyXG4gKiAgICAga2V5OiAnbG9naW4nLFxyXG4gKiAgICAgdXJsOiAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaHRtbCgnbG9naW4nLCAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdmFyIGRhdGEgPSB0aGlzLmNhY2hlLmh0bWwuZ2V0KCdsb2dpbicpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgU3RvcnlgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTEVWRUwxLlN0b3J5YCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGh0bWwgZnJvbSB0aGUgSFRNTCBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJzdG9yeVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJzdG9yeS5odG1sXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmh0bWxgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEhUTUwgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uaHRtbGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmh0bWxcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2h0bWwnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTEZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTMLFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single HTML File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#htmlTexture method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#htmlTexture.\r\n *\r\n * @class HTMLTextureFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {integer} [width] - The width of the texture the HTML will be rendered to.\r\n * @param {integer} [height] - The height of the texture the HTML will be rendered to.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTMLTextureFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function HTMLTextureFile (loader, key, url, width, height, xhrSettings)\r\n    {\r\n        if (width === undefined) { width = 512; }\r\n        if (height === undefined) { height = 512; }\r\n\r\n        var extension = 'html';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            width = GetFastValue(config, 'width', width);\r\n            height = GetFastValue(config, 'height', height);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'html',\r\n            cache: loader.textureManager,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: {\r\n                width: width,\r\n                height: height\r\n            }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTMLTextureFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        var w = this.config.width;\r\n        var h = this.config.height;\r\n\r\n        var data = [];\r\n\r\n        data.push('<svg width=\"' + w + 'px\" height=\"' + h + 'px\" viewBox=\"0 0 ' + w + ' ' + h + '\" xmlns=\"http://www.w3.org/2000/svg\">');\r\n        data.push('<foreignObject width=\"100%\" height=\"100%\">');\r\n        data.push('<body xmlns=\"http://www.w3.org/1999/xhtml\">');\r\n        data.push(this.xhrLoader.responseText);\r\n        data.push('</body>');\r\n        data.push('</foreignObject>');\r\n        data.push('</svg>');\r\n\r\n        var svg = [ data.join('\\n') ];\r\n        var _this = this;\r\n\r\n        try\r\n        {\r\n            var blob = new window.Blob(svg, { type: 'image/svg+xml;charset=utf-8' });\r\n        }\r\n        catch (e)\r\n        {\r\n            _this.state = CONST.FILE_ERRORED;\r\n\r\n            _this.onProcessComplete();\r\n\r\n            return;\r\n        }\r\n\r\n        this.data = new Image();\r\n\r\n        this.data.crossOrigin = this.crossOrigin;\r\n\r\n        this.data.onload = function ()\r\n        {\r\n            File.revokeObjectURL(_this.data);\r\n\r\n            _this.onProcessComplete();\r\n        };\r\n\r\n        this.data.onerror = function ()\r\n        {\r\n            File.revokeObjectURL(_this.data);\r\n\r\n            _this.onProcessError();\r\n        };\r\n\r\n        File.createObjectURL(this.data, blob, 'image/svg+xml');\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.HTMLTextureFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var texture = this.cache.addImage(this.key, this.data);\r\n\r\n        this.pendingDestroy(texture);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an HTML File, or array of HTML Files, to the current load queue. When the files are loaded they\r\n * will be rendered to textures and stored in the Texture Manager.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.htmlTexture('instructions', 'content/intro.html', 256, 512);\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.htmlTexture({\r\n *     key: 'instructions',\r\n *     url: 'content/intro.html',\r\n *     width: 256,\r\n *     height: 512\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.htmlTexture('instructions', 'content/intro.html', 256, 512);\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'instructions');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * The width and height are the size of the texture to which the HTML will be rendered. It's not possible to determine these\r\n * automatically, so you will need to provide them, either as arguments or in the file config object.\r\n * When the HTML file has loaded a new SVG element is created with a size and viewbox set to the width and height given.\r\n * The SVG file has a body tag added to it, with the HTML file contents included. It then calls `window.Blob` on the SVG,\r\n * and if successful is added to the Texture Manager, otherwise it fails processing. The overall quality of the rendered\r\n * HTML depends on your browser, and some of them may not even support the svg / blob process used. Be aware that there are\r\n * limitations on what HTML can be inside an SVG. You can find out more details in this\r\n * [Mozilla MDN entry](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Drawing_DOM_objects_into_a_canvas).\r\n *\r\n * Note: The ability to load this type of file will only be available if the HTMLTextureFile File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#htmlTexture\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.12.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.html`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {integer} [width=512] - The width of the texture the HTML will be rendered to.\r\n * @param {integer} [height=512] - The height of the texture the HTML will be rendered to.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('htmlTexture', function (key, url, width, height, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new HTMLTextureFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new HTMLTextureFile(this, key, url, width, height, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = HTMLTextureFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUxUZXh0dXJlRmlsZS5qcz80OTY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQyxtQ0FBbUMsY0FBYzs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QyxzQkFBc0IsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUhBQW1IO0FBQzlILFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTFRleHR1cmVGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEhUTUwgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2h0bWxUZXh0dXJlIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbFRleHR1cmUuXHJcbiAqXHJcbiAqIEBjbGFzcyBIVE1MVGV4dHVyZUZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5GaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxUZXh0dXJlRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBIVE1MVGV4dHVyZUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBIVE1MVGV4dHVyZUZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHdpZHRoLCBoZWlnaHQsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gNTEyOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDUxMjsgfVxyXG5cclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2h0bWwnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgd2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnd2lkdGgnLCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdoZWlnaHQnLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci50ZXh0dXJlTWFuYWdlcixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB2YXIgdyA9IHRoaXMuY29uZmlnLndpZHRoO1xyXG4gICAgICAgIHZhciBoID0gdGhpcy5jb25maWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IFtdO1xyXG5cclxuICAgICAgICBkYXRhLnB1c2goJzxzdmcgd2lkdGg9XCInICsgdyArICdweFwiIGhlaWdodD1cIicgKyBoICsgJ3B4XCIgdmlld0JveD1cIjAgMCAnICsgdyArICcgJyArIGggKyAnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPicpO1xyXG4gICAgICAgIGRhdGEucHVzaCgnPGZvcmVpZ25PYmplY3Qgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicpO1xyXG4gICAgICAgIGRhdGEucHVzaCgnPGJvZHkgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L2JvZHk+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L2ZvcmVpZ25PYmplY3Q+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L3N2Zz4nKTtcclxuXHJcbiAgICAgICAgdmFyIHN2ZyA9IFsgZGF0YS5qb2luKCdcXG4nKSBdO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRyeVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgd2luZG93LkJsb2Ioc3ZnLCB7IHR5cGU6ICdpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLnN0YXRlID0gQ09OU1QuRklMRV9FUlJPUkVEO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuY3Jvc3NPcmlnaW4gPSB0aGlzLmNyb3NzT3JpZ2luO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGUucmV2b2tlT2JqZWN0VVJMKF90aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25lcnJvciA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jcmVhdGVPYmplY3RVUkwodGhpcy5kYXRhLCBibG9iLCAnaW1hZ2Uvc3ZnK3htbCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MVGV4dHVyZUZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FjaGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLmNhY2hlLmFkZEltYWdlKHRoaXMua2V5LCB0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95KHRleHR1cmUpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBIVE1MIEZpbGUsIG9yIGFycmF5IG9mIEhUTUwgRmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuIFdoZW4gdGhlIGZpbGVzIGFyZSBsb2FkZWQgdGhleVxyXG4gKiB3aWxsIGJlIHJlbmRlcmVkIHRvIHRleHR1cmVzIGFuZCBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmh0bWxUZXh0dXJlKCdpbnN0cnVjdGlvbnMnLCAnY29udGVudC9pbnRyby5odG1sJywgMjU2LCA1MTIpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmh0bWxUZXh0dXJlKHtcclxuICogICAgIGtleTogJ2luc3RydWN0aW9ucycsXHJcbiAqICAgICB1cmw6ICdjb250ZW50L2ludHJvLmh0bWwnLFxyXG4gKiAgICAgd2lkdGg6IDI1NixcclxuICogICAgIGhlaWdodDogNTEyXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGFzIGEgdGV4dHVyZSBmb3IgYSBHYW1lIE9iamVjdCBieSByZWZlcmVuY2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaHRtbFRleHR1cmUoJ2luc3RydWN0aW9ucycsICdjb250ZW50L2ludHJvLmh0bWwnLCAyNTYsIDUxMik7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdpbnN0cnVjdGlvbnMnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHRoZSBrZXkgd2FzIGBCYWNrZ3JvdW5kYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYE1FTlUuQmFja2dyb3VuZGAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSBpbWFnZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4uaHRtbFwiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5odG1sYCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIHRvIHdoaWNoIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGVzZVxyXG4gKiBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlbSwgZWl0aGVyIGFzIGFyZ3VtZW50cyBvciBpbiB0aGUgZmlsZSBjb25maWcgb2JqZWN0LlxyXG4gKiBXaGVuIHRoZSBIVE1MIGZpbGUgaGFzIGxvYWRlZCBhIG5ldyBTVkcgZWxlbWVudCBpcyBjcmVhdGVkIHdpdGggYSBzaXplIGFuZCB2aWV3Ym94IHNldCB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBnaXZlbi5cclxuICogVGhlIFNWRyBmaWxlIGhhcyBhIGJvZHkgdGFnIGFkZGVkIHRvIGl0LCB3aXRoIHRoZSBIVE1MIGZpbGUgY29udGVudHMgaW5jbHVkZWQuIEl0IHRoZW4gY2FsbHMgYHdpbmRvdy5CbG9iYCBvbiB0aGUgU1ZHLFxyXG4gKiBhbmQgaWYgc3VjY2Vzc2Z1bCBpcyBhZGRlZCB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBvdGhlcndpc2UgaXQgZmFpbHMgcHJvY2Vzc2luZy4gVGhlIG92ZXJhbGwgcXVhbGl0eSBvZiB0aGUgcmVuZGVyZWRcclxuICogSFRNTCBkZXBlbmRzIG9uIHlvdXIgYnJvd3NlciwgYW5kIHNvbWUgb2YgdGhlbSBtYXkgbm90IGV2ZW4gc3VwcG9ydCB0aGUgc3ZnIC8gYmxvYiBwcm9jZXNzIHVzZWQuIEJlIGF3YXJlIHRoYXQgdGhlcmUgYXJlXHJcbiAqIGxpbWl0YXRpb25zIG9uIHdoYXQgSFRNTCBjYW4gYmUgaW5zaWRlIGFuIFNWRy4gWW91IGNhbiBmaW5kIG91dCBtb3JlIGRldGFpbHMgaW4gdGhpc1xyXG4gKiBbTW96aWxsYSBNRE4gZW50cnldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DYW52YXNfQVBJL0RyYXdpbmdfRE9NX29iamVjdHNfaW50b19hX2NhbnZhcykuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSFRNTFRleHR1cmVGaWxlIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2h0bWxUZXh0dXJlXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxUZXh0dXJlRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmh0bWxgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5odG1sXCIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPTUxMl0gLSBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdGhlIEhUTUwgd2lsbCBiZSByZW5kZXJlZCB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTUxMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdodG1sVGV4dHVyZScsIGZ1bmN0aW9uIChrZXksIHVybCwgd2lkdGgsIGhlaWdodCwgeGhyU2V0dGluZ3MpXHJcbntcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgaXQncyBhbiBhcnJheSBpdCBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgT2JqZWN0cywgc28gd2UgZ2V0IGV2ZXJ5dGhpbmcgb3V0IG9mIHRoZSAna2V5JyBvYmplY3RcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBIVE1MVGV4dHVyZUZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTFRleHR1cmVGaWxlKHRoaXMsIGtleSwgdXJsLCB3aWR0aCwgaGVpZ2h0LCB4aHJTZXR0aW5ncykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFRNTFRleHR1cmVGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/ImageFile.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/ImageFile.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Image File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#image method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#image.\r\n *\r\n * @class ImageFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ImageFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {Phaser.Types.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets.\r\n */\r\nvar ImageFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function ImageFile (loader, key, url, xhrSettings, frameConfig)\r\n    {\r\n        var extension = 'png';\r\n        var normalMapURL;\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            normalMapURL = GetFastValue(config, 'normalMap');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            frameConfig = GetFastValue(config, 'frameConfig');\r\n        }\r\n\r\n        if (Array.isArray(url))\r\n        {\r\n            normalMapURL = url[1];\r\n            url = url[0];\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'image',\r\n            cache: loader.textureManager,\r\n            extension: extension,\r\n            responseType: 'blob',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: frameConfig\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        //  Do we have a normal map to load as well?\r\n        if (normalMapURL)\r\n        {\r\n            var normalMap = new ImageFile(loader, this.key, normalMapURL, xhrSettings, frameConfig);\r\n\r\n            normalMap.type = 'normalMap';\r\n\r\n            this.setLink(normalMap);\r\n\r\n            loader.addFile(normalMap);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.ImageFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = new Image();\r\n\r\n        this.data.crossOrigin = this.crossOrigin;\r\n\r\n        var _this = this;\r\n\r\n        this.data.onload = function ()\r\n        {\r\n            File.revokeObjectURL(_this.data);\r\n\r\n            _this.onProcessComplete();\r\n        };\r\n\r\n        this.data.onerror = function ()\r\n        {\r\n            File.revokeObjectURL(_this.data);\r\n\r\n            _this.onProcessError();\r\n        };\r\n\r\n        File.createObjectURL(this.data, this.xhrLoader.response, 'image/png');\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.ImageFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var texture;\r\n        var linkFile = this.linkFile;\r\n\r\n        if (linkFile && linkFile.state === CONST.FILE_COMPLETE)\r\n        {\r\n            if (this.type === 'image')\r\n            {\r\n                texture = this.cache.addImage(this.key, this.data, linkFile.data);\r\n            }\r\n            else\r\n            {\r\n                texture = this.cache.addImage(linkFile.key, linkFile.data, this.data);\r\n            }\r\n\r\n            this.pendingDestroy(texture);\r\n\r\n            linkFile.pendingDestroy(texture);\r\n        }\r\n        else if (!linkFile)\r\n        {\r\n            texture = this.cache.addImage(this.key, this.data);\r\n\r\n            this.pendingDestroy(texture);\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an Image, or array of Images, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.image('logo', 'images/phaserLogo.png');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n * If you try to load an animated gif only the first frame will be rendered. Browsers do not natively support playback\r\n * of animated gifs to Canvas elements.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.image({\r\n *     key: 'logo',\r\n *     url: 'images/AtariLogo.png'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.ImageFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.image('logo', 'images/AtariLogo.png');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'logo');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.image('logo', [ 'images/AtariLogo.png', 'images/AtariLogo-n.png' ]);\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.image({\r\n *     key: 'logo',\r\n *     url: 'images/AtariLogo.png',\r\n *     normalMap: 'images/AtariLogo-n.png'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Image File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#image\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ImageFileConfig|Phaser.Types.Loader.FileTypes.ImageFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('image', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new ImageFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new ImageFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = ImageFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0ltYWdlRmlsZS5qcz9hYzFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHVEQUF1RDtBQUNsRSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLCtDQUErQztBQUMxRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUdBQXVHO0FBQ2xILFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSW1hZ2VGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEltYWdlIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpbWFnZSBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2ltYWdlLlxyXG4gKlxyXG4gKiBAY2xhc3MgSW1hZ2VGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRnJhbWVDb25maWd9IFtmcmFtZUNvbmZpZ10gLSBUaGUgZnJhbWUgY29uZmlndXJhdGlvbiBvYmplY3QuIE9ubHkgcHJvdmlkZWQgZm9yLCBhbmQgdXNlZCBieSwgU3ByaXRlIFNoZWV0cy5cclxuICovXHJcbnZhciBJbWFnZUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBJbWFnZUZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBmcmFtZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ3BuZyc7XHJcbiAgICAgICAgdmFyIG5vcm1hbE1hcFVSTDtcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgbm9ybWFsTWFwVVJMID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgZnJhbWVDb25maWcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZnJhbWVDb25maWcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBub3JtYWxNYXBVUkwgPSB1cmxbMV07XHJcbiAgICAgICAgICAgIHVybCA9IHVybFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLnRleHR1cmVNYW5hZ2VyLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzLFxyXG4gICAgICAgICAgICBjb25maWc6IGZyYW1lQ29uZmlnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8vICBEbyB3ZSBoYXZlIGEgbm9ybWFsIG1hcCB0byBsb2FkIGFzIHdlbGw/XHJcbiAgICAgICAgaWYgKG5vcm1hbE1hcFVSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwgdGhpcy5rZXksIG5vcm1hbE1hcFVSTCwgeGhyU2V0dGluZ3MsIGZyYW1lQ29uZmlnKTtcclxuXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcC50eXBlID0gJ25vcm1hbE1hcCc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldExpbmsobm9ybWFsTWFwKTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRlci5hZGRGaWxlKG5vcm1hbE1hcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsZS5yZXZva2VPYmplY3RVUkwoX3RoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5vbmVycm9yID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGUucmV2b2tlT2JqZWN0VVJMKF90aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzRXJyb3IoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmRhdGEsIHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlLCAnaW1hZ2UvcG5nJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgbGlua0ZpbGUgPSB0aGlzLmxpbmtGaWxlO1xyXG5cclxuICAgICAgICBpZiAobGlua0ZpbGUgJiYgbGlua0ZpbGUuc3RhdGUgPT09IENPTlNULkZJTEVfQ09NUExFVEUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jYWNoZS5hZGRJbWFnZSh0aGlzLmtleSwgdGhpcy5kYXRhLCBsaW5rRmlsZS5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNhY2hlLmFkZEltYWdlKGxpbmtGaWxlLmtleSwgbGlua0ZpbGUuZGF0YSwgdGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIGxpbmtGaWxlLnBlbmRpbmdEZXN0cm95KHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghbGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jYWNoZS5hZGRJbWFnZSh0aGlzLmtleSwgdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBJbWFnZSwgb3IgYXJyYXkgb2YgSW1hZ2VzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuaW1hZ2UoJ2xvZ28nLCAnaW1hZ2VzL3BoYXNlckxvZ28ucG5nJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFBoYXNlciBjYW4gbG9hZCBhbGwgY29tbW9uIGltYWdlIHR5cGVzOiBwbmcsIGpwZywgZ2lmIGFuZCBhbnkgb3RoZXIgZm9ybWF0IHRoZSBicm93c2VyIGNhbiBuYXRpdmVseSBoYW5kbGUuXHJcbiAqIElmIHlvdSB0cnkgdG8gbG9hZCBhbiBhbmltYXRlZCBnaWYgb25seSB0aGUgZmlyc3QgZnJhbWUgd2lsbCBiZSByZW5kZXJlZC4gQnJvd3NlcnMgZG8gbm90IG5hdGl2ZWx5IHN1cHBvcnQgcGxheWJhY2tcclxuICogb2YgYW5pbWF0ZWQgZ2lmcyB0byBDYW52YXMgZWxlbWVudHMuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKHtcclxuICogICAgIGtleTogJ2xvZ28nLFxyXG4gKiAgICAgdXJsOiAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSW1hZ2VGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGFzIGEgdGV4dHVyZSBmb3IgYSBHYW1lIE9iamVjdCBieSByZWZlcmVuY2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaW1hZ2UoJ2xvZ28nLCAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ2xvZ28nKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHRoZSBrZXkgd2FzIGBCYWNrZ3JvdW5kYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYE1FTlUuQmFja2dyb3VuZGAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSBpbWFnZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4ucG5nXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLnBuZ2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFBoYXNlciBhbHNvIHN1cHBvcnRzIHRoZSBhdXRvbWF0aWMgbG9hZGluZyBvZiBhc3NvY2lhdGVkIG5vcm1hbCBtYXBzLiBJZiB5b3UgaGF2ZSBhIG5vcm1hbCBtYXAgdG8gZ28gd2l0aCB0aGlzIGltYWdlLFxyXG4gKiB0aGVuIHlvdSBjYW4gc3BlY2lmeSBpdCBieSBwcm92aWRpbmcgYW4gYXJyYXkgYXMgdGhlIGB1cmxgIHdoZXJlIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgbm9ybWFsIG1hcDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKCdsb2dvJywgWyAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnLCAnaW1hZ2VzL0F0YXJpTG9nby1uLnBuZycgXSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKHtcclxuICogICAgIGtleTogJ2xvZ28nLFxyXG4gKiAgICAgdXJsOiAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnLFxyXG4gKiAgICAgbm9ybWFsTWFwOiAnaW1hZ2VzL0F0YXJpTG9nby1uLnBuZydcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgbm9ybWFsIG1hcCBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHNhbWUgY29uZGl0aW9ucyBhcyB0aGUgaW1hZ2UgZmlsZSB3aXRoIHJlZ2FyZCB0byB0aGUgcGF0aCwgYmFzZVVSTCwgQ09ScyBhbmQgWEhSIFNldHRpbmdzLlxyXG4gKiBOb3JtYWwgbWFwcyBhcmUgYSBXZWJHTCBvbmx5IGZlYXR1cmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSW1hZ2UgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaW1hZ2VcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5JbWFnZUZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2ltYWdlJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IEltYWdlRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBJbWFnZUZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZUZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/ImageFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/JSONFile.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/JSONFile.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#json method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#json.\r\n *\r\n * @class JSONFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar JSONFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    //  url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n    //  dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n    function JSONFile (loader, key, url, xhrSettings, dataKey)\r\n    {\r\n        var extension = 'json';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            dataKey = GetFastValue(config, 'dataKey', dataKey);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'json',\r\n            cache: loader.cacheManager.json,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: dataKey\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        if (IsPlainObject(url))\r\n        {\r\n            //  Object provided instead of a URL, so no need to actually load it (populate data with value)\r\n            if (dataKey)\r\n            {\r\n                this.data = GetValue(url, dataKey);\r\n            }\r\n            else\r\n            {\r\n                this.data = url;\r\n            }\r\n\r\n            this.state = CONST.FILE_POPULATED;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.JSONFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        if (this.state !== CONST.FILE_POPULATED)\r\n        {\r\n            this.state = CONST.FILE_PROCESSING;\r\n\r\n            var json = JSON.parse(this.xhrLoader.responseText);\r\n\r\n            var key = this.config;\r\n\r\n            if (typeof key === 'string')\r\n            {\r\n                this.data = GetValue(json, key, json);\r\n            }\r\n            else\r\n            {\r\n                this.data = json;\r\n            }\r\n        }\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON file, or array of JSON files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.json('wavedata', 'files/AlienWaveData.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.json({\r\n *     key: 'wavedata',\r\n *     url: 'files/AlienWaveData.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.JSONFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.json('wavedata', 'files/AlienWaveData.json');\r\n * // and later in your game ...\r\n * var data = this.cache.json.get('wavedata');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n *     \"level1\": {\r\n *         \"baddies\": {\r\n *             \"aliens\": {},\r\n *             \"boss\": {}\r\n *         }\r\n *     },\r\n *     \"level2\": {},\r\n *     \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And you only wanted to store the `boss` data in the Cache, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#json\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig|Phaser.Types.Loader.FileTypes.JSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('json', function (key, url, dataKey, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new JSONFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new JSONFile(this, key, url, xhrSettings, dataKey));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = JSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0pTT05GaWxlLmpzP2M0NjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxzREFBc0Q7QUFDakUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0pTT05GaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBKU09OIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNqc29uIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4janNvbi5cclxuICpcclxuICogQGNsYXNzIEpTT05GaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkpTT05GaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhS2V5XSAtIFdoZW4gdGhlIEpTT04gZmlsZSBsb2FkcyBvbmx5IHRoaXMgcHJvcGVydHkgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIENhY2hlLlxyXG4gKi9cclxudmFyIEpTT05GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgLy8gIHVybCBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgbGlrZSBhIHByb3BlciB1cmwsIG9yIGFuIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0cmVhdGVkIGFzIGEgcmVhZHktbWFkZSBKUyBPYmplY3RcclxuICAgIC8vICBkYXRhS2V5IGFsbG93cyB5b3UgdG8gcGx1Y2sgYSBzcGVjaWZpYyBvYmplY3Qgb3V0IG9mIHRoZSBKU09OIGFuZCBwdXQganVzdCB0aGF0IGludG8gdGhlIGNhY2hlLCByYXRoZXIgdGhhbiB0aGUgd2hvbGUgdGhpbmdcclxuXHJcbiAgICBmdW5jdGlvbiBKU09ORmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MsIGRhdGFLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdqc29uJztcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgICAgIGRhdGFLZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGF0YUtleScsIGRhdGFLZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuanNvbixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiBkYXRhS2V5XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KHVybCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgT2JqZWN0IHByb3ZpZGVkIGluc3RlYWQgb2YgYSBVUkwsIHNvIG5vIG5lZWQgdG8gYWN0dWFsbHkgbG9hZCBpdCAocG9wdWxhdGUgZGF0YSB3aXRoIHZhbHVlKVxyXG4gICAgICAgICAgICBpZiAoZGF0YUtleSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gR2V0VmFsdWUodXJsLCBkYXRhS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUE9QVUxBVEVEO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENPTlNULkZJTEVfUE9QVUxBVEVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZSh0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuY29uZmlnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBHZXRWYWx1ZShqc29uLCBrZXksIGpzb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ganNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhIEpTT04gZmlsZSwgb3IgYXJyYXkgb2YgSlNPTiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmpzb24oJ3dhdmVkYXRhJywgJ2ZpbGVzL0FsaWVuV2F2ZURhdGEuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5qc29uKHtcclxuICogICAgIGtleTogJ3dhdmVkYXRhJyxcclxuICogICAgIHVybDogJ2ZpbGVzL0FsaWVuV2F2ZURhdGEuanNvbidcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIGFjY2VzcyBpdCBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuanNvbignd2F2ZWRhdGEnLCAnZmlsZXMvQWxpZW5XYXZlRGF0YS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBkYXRhID0gdGhpcy5jYWNoZS5qc29uLmdldCgnd2F2ZWRhdGEnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIHlvdSBvbmx5IHdhbnRlZCB0byBzdG9yZSB0aGUgYGJvc3NgIGRhdGEgaW4gdGhlIENhY2hlLCB0aGVuIHlvdSBjb3VsZCBwYXNzIGBsZXZlbDEuYmFkZGllcy5ib3NzYGFzIHRoZSBgZGF0YUtleWAuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSlNPTiBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNqc29uXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2pzb24nLCBmdW5jdGlvbiAoa2V5LCB1cmwsIGRhdGFLZXksIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSlNPTkZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSlNPTkZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBKU09ORmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/JSONFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Multi Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#multiatlas method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#multiatlas.\r\n *\r\n * @class MultiAtlasFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {string} key - The key of the file. Must be unique within both the Loader and the Texture Manager.\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the multi atlas json file from.\r\n * @param {string} [path] - Optional path to use when loading the textures defined in the atlas data.\r\n * @param {string} [baseURL] - Optional Base URL to use when loading the textures defined in the atlas data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - Extra XHR Settings specifically for the atlas json file.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - Extra XHR Settings specifically for the texture files.\r\n */\r\nvar MultiAtlasFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function MultiAtlasFile (loader, key, atlasURL, path, baseURL, atlasXhrSettings, textureXhrSettings)\r\n    {\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            atlasURL = GetFastValue(config, 'url');\r\n            atlasXhrSettings = GetFastValue(config, 'xhrSettings');\r\n            path = GetFastValue(config, 'path');\r\n            baseURL = GetFastValue(config, 'baseURL');\r\n            textureXhrSettings = GetFastValue(config, 'textureXhrSettings');\r\n        }\r\n\r\n        var data = new JSONFile(loader, key, atlasURL, atlasXhrSettings);\r\n\r\n        MultiFile.call(this, loader, 'multiatlas', key, [ data ]);\r\n\r\n        this.config.path = path;\r\n        this.config.baseURL = baseURL;\r\n        this.config.textureXhrSettings = textureXhrSettings;\r\n    },\r\n\r\n    /**\r\n     * Called by each File when it finishes loading.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.MultiAtlasFile#onFileComplete\r\n     * @since 3.7.0\r\n     *\r\n     * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n     */\r\n    onFileComplete: function (file)\r\n    {\r\n        var index = this.files.indexOf(file);\r\n\r\n        if (index !== -1)\r\n        {\r\n            this.pending--;\r\n\r\n            if (file.type === 'json' && file.data.hasOwnProperty('textures'))\r\n            {\r\n                //  Inspect the data for the files to now load\r\n                var textures = file.data.textures;\r\n\r\n                var config = this.config;\r\n                var loader = this.loader;\r\n\r\n                var currentBaseURL = loader.baseURL;\r\n                var currentPath = loader.path;\r\n                var currentPrefix = loader.prefix;\r\n\r\n                var baseURL = GetFastValue(config, 'baseURL', this.baseURL);\r\n                var path = GetFastValue(config, 'path', this.path);\r\n                var prefix = GetFastValue(config, 'prefix', this.prefix);\r\n                var textureXhrSettings = GetFastValue(config, 'textureXhrSettings');\r\n\r\n                loader.setBaseURL(baseURL);\r\n                loader.setPath(path);\r\n                loader.setPrefix(prefix);\r\n\r\n                for (var i = 0; i < textures.length; i++)\r\n                {\r\n                    //  \"image\": \"texture-packer-multi-atlas-0.png\",\r\n                    var textureURL = textures[i].image;\r\n\r\n                    var key = 'MA' + this.multiKeyIndex + '_' + textureURL;\r\n\r\n                    var image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n\r\n                    this.addToMultiFile(image);\r\n\r\n                    loader.addFile(image);\r\n\r\n                    //  \"normalMap\": \"texture-packer-multi-atlas-0_n.png\",\r\n                    if (textures[i].normalMap)\r\n                    {\r\n                        var normalMap = new ImageFile(loader, key, textures[i].normalMap, textureXhrSettings);\r\n\r\n                        normalMap.type = 'normalMap';\r\n\r\n                        image.setLink(normalMap);\r\n\r\n                        this.addToMultiFile(normalMap);\r\n\r\n                        loader.addFile(normalMap);\r\n                    }\r\n                }\r\n\r\n                //  Reset the loader settings\r\n                loader.setBaseURL(currentBaseURL);\r\n                loader.setPath(currentPath);\r\n                loader.setPrefix(currentPrefix);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.MultiAtlasFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var fileJSON = this.files[0];\r\n\r\n            var data = [];\r\n            var images = [];\r\n            var normalMaps = [];\r\n\r\n            for (var i = 1; i < this.files.length; i++)\r\n            {\r\n                var file = this.files[i];\r\n\r\n                if (file.type === 'normalMap')\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                var pos = file.key.indexOf('_');\r\n                var key = file.key.substr(pos + 1);\r\n\r\n                var image = file.data;\r\n\r\n                //  Now we need to find out which json entry this mapped to\r\n                for (var t = 0; t < fileJSON.data.textures.length; t++)\r\n                {\r\n                    var item = fileJSON.data.textures[t];\r\n\r\n                    if (item.image === key)\r\n                    {\r\n                        images.push(image);\r\n                        \r\n                        data.push(item);\r\n\r\n                        if (file.linkFile)\r\n                        {\r\n                            normalMaps.push(file.linkFile.data);\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (normalMaps.length === 0)\r\n            {\r\n                normalMaps = undefined;\r\n            }\r\n\r\n            this.loader.textureManager.addAtlasJSONArray(this.key, images, data, normalMaps);\r\n\r\n            this.complete = true;\r\n\r\n            for (i = 0; i < this.files.length; i++)\r\n            {\r\n                this.files[i].pendingDestroy();\r\n            }\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Multi Texture Atlas, or array of multi atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.multiatlas('level1', 'images/Level1.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in a JSON file as exported from the application Texture Packer,\r\n * version 4.6.3 or above, where you have made sure to use the Phaser 3 Export option.\r\n *\r\n * The way it works internally is that you provide a URL to the JSON file. Phaser then loads this JSON, parses it and\r\n * extracts which texture files it also needs to load to complete the process. If the JSON also defines normal maps,\r\n * Phaser will load those as well.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.multiatlas({\r\n *     key: 'level1',\r\n *     atlasURL: 'images/Level1.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the atlas JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.multiatlas('level1', 'images/Level1.json');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'level1', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Multi Atlas File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#multiatlas\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig|Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [path] - Optional path to use when loading the textures defined in the atlas data.\r\n * @param {string} [baseURL] - Optional Base URL to use when loading the textures defined in the atlas data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('multiatlas', function (key, atlasURL, path, baseURL, atlasXhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new MultiAtlasFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new MultiAtlasFile(this, key, atlasURL, path, baseURL, atlasXhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = MultiAtlasFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL011bHRpQXRsYXNGaWxlLmpzPzllNWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGVBQWUsbUJBQU8sQ0FBQyw2RUFBZTtBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRUFBaUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsdUJBQXVCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLCtCQUErQixtQ0FBbUM7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlIQUFpSDtBQUM1SCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvTXVsdGlBdGxhc0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSW1hZ2VGaWxlID0gcmVxdWlyZSgnLi9JbWFnZUZpbGUuanMnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgSlNPTkZpbGUgPSByZXF1aXJlKCcuL0pTT05GaWxlLmpzJyk7XHJcbnZhciBNdWx0aUZpbGUgPSByZXF1aXJlKCcuLi9NdWx0aUZpbGUuanMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIE11bHRpIFRleHR1cmUgQXRsYXMgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpYXRsYXMgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNtdWx0aWF0bGFzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTXVsdGlBdGxhc0ZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBmaWxlLiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYm90aCB0aGUgTG9hZGVyIGFuZCB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgbXVsdGkgYXRsYXMganNvbiBmaWxlIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBPcHRpb25hbCBwYXRoIHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIHRleHR1cmVzIGRlZmluZWQgaW4gdGhlIGF0bGFzIGRhdGEuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVVSTF0gLSBPcHRpb25hbCBCYXNlIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB0ZXh0dXJlcyBkZWZpbmVkIGluIHRoZSBhdGxhcyBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBhdGxhcyBqc29uIGZpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGUgdGV4dHVyZSBmaWxlcy5cclxuICovXHJcbnZhciBNdWx0aUF0bGFzRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogTXVsdGlGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTXVsdGlBdGxhc0ZpbGUgKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgcGF0aCwgYmFzZVVSTCwgYXRsYXNYaHJTZXR0aW5ncywgdGV4dHVyZVhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0ga2V5O1xyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2tleScpO1xyXG4gICAgICAgICAgICBhdGxhc1VSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgYXRsYXNYaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBwYXRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3BhdGgnKTtcclxuICAgICAgICAgICAgYmFzZVVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdiYXNlVVJMJyk7XHJcbiAgICAgICAgICAgIHRleHR1cmVYaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhID0gbmV3IEpTT05GaWxlKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgYXRsYXNYaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIE11bHRpRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgJ211bHRpYXRsYXMnLCBrZXksIFsgZGF0YSBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWcucGF0aCA9IHBhdGg7XHJcbiAgICAgICAgdGhpcy5jb25maWcuYmFzZVVSTCA9IGJhc2VVUkw7XHJcbiAgICAgICAgdGhpcy5jb25maWcudGV4dHVyZVhoclNldHRpbmdzID0gdGV4dHVyZVhoclNldHRpbmdzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBlYWNoIEZpbGUgd2hlbiBpdCBmaW5pc2hlcyBsb2FkaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlBdGxhc0ZpbGUjb25GaWxlQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdGhhdCBoYXMgY29tcGxldGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKi9cclxuICAgIG9uRmlsZUNvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmctLTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlLnR5cGUgPT09ICdqc29uJyAmJiBmaWxlLmRhdGEuaGFzT3duUHJvcGVydHkoJ3RleHR1cmVzJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBJbnNwZWN0IHRoZSBkYXRhIGZvciB0aGUgZmlsZXMgdG8gbm93IGxvYWRcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IGZpbGUuZGF0YS50ZXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9hZGVyID0gdGhpcy5sb2FkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRCYXNlVVJMID0gbG9hZGVyLmJhc2VVUkw7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBhdGggPSBsb2FkZXIucGF0aDtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UHJlZml4ID0gbG9hZGVyLnByZWZpeDtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYmFzZVVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdiYXNlVVJMJywgdGhpcy5iYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3BhdGgnLCB0aGlzLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwcmVmaXgnLCB0aGlzLnByZWZpeCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVhoclNldHRpbmdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVYaHJTZXR0aW5ncycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRCYXNlVVJMKGJhc2VVUkwpO1xyXG4gICAgICAgICAgICAgICAgbG9hZGVyLnNldFBhdGgocGF0aCk7XHJcbiAgICAgICAgICAgICAgICBsb2FkZXIuc2V0UHJlZml4KHByZWZpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0dXJlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgXCJpbWFnZVwiOiBcInRleHR1cmUtcGFja2VyLW11bHRpLWF0bGFzLTAucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVUkwgPSB0ZXh0dXJlc1tpXS5pbWFnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9ICdNQScgKyB0aGlzLm11bHRpS2V5SW5kZXggKyAnXycgKyB0ZXh0dXJlVVJMO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvTXVsdGlGaWxlKGltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmFkZEZpbGUoaW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgXCJub3JtYWxNYXBcIjogXCJ0ZXh0dXJlLXBhY2tlci1tdWx0aS1hdGxhcy0wX24ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ldLm5vcm1hbE1hcClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwga2V5LCB0ZXh0dXJlc1tpXS5ub3JtYWxNYXAsIHRleHR1cmVYaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxNYXAudHlwZSA9ICdub3JtYWxNYXAnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0TGluayhub3JtYWxNYXApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb011bHRpRmlsZShub3JtYWxNYXApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmFkZEZpbGUobm9ybWFsTWFwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlc2V0IHRoZSBsb2FkZXIgc2V0dGluZ3NcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRCYXNlVVJMKGN1cnJlbnRCYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRQYXRoKGN1cnJlbnRQYXRoKTtcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRQcmVmaXgoY3VycmVudFByZWZpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlSlNPTiA9IHRoaXMuZmlsZXNbMF07XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VzID0gW107XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXBzID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxlID0gdGhpcy5maWxlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSAnbm9ybWFsTWFwJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gZmlsZS5rZXkuaW5kZXhPZignXycpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGZpbGUua2V5LnN1YnN0cihwb3MgKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBmaWxlLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIE5vdyB3ZSBuZWVkIHRvIGZpbmQgb3V0IHdoaWNoIGpzb24gZW50cnkgdGhpcyBtYXBwZWQgdG9cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZmlsZUpTT04uZGF0YS50ZXh0dXJlcy5sZW5ndGg7IHQrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGZpbGVKU09OLmRhdGEudGV4dHVyZXNbdF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmltYWdlID09PSBrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2goaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5saW5rRmlsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsTWFwcy5wdXNoKGZpbGUubGlua0ZpbGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vcm1hbE1hcHMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXBzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlci50ZXh0dXJlTWFuYWdlci5hZGRBdGxhc0pTT05BcnJheSh0aGlzLmtleSwgaW1hZ2VzLCBkYXRhLCBub3JtYWxNYXBzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbaV0ucGVuZGluZ0Rlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBNdWx0aSBUZXh0dXJlIEF0bGFzLCBvciBhcnJheSBvZiBtdWx0aSBhdGxhc2VzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQubXVsdGlhdGxhcygnbGV2ZWwxJywgJ2ltYWdlcy9MZXZlbDEuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFBoYXNlciBleHBlY3RzIHRoZSBhdGxhcyBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGEgSlNPTiBmaWxlIGFzIGV4cG9ydGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIFRleHR1cmUgUGFja2VyLFxyXG4gKiB2ZXJzaW9uIDQuNi4zIG9yIGFib3ZlLCB3aGVyZSB5b3UgaGF2ZSBtYWRlIHN1cmUgdG8gdXNlIHRoZSBQaGFzZXIgMyBFeHBvcnQgb3B0aW9uLlxyXG4gKlxyXG4gKiBUaGUgd2F5IGl0IHdvcmtzIGludGVybmFsbHkgaXMgdGhhdCB5b3UgcHJvdmlkZSBhIFVSTCB0byB0aGUgSlNPTiBmaWxlLiBQaGFzZXIgdGhlbiBsb2FkcyB0aGlzIEpTT04sIHBhcnNlcyBpdCBhbmRcclxuICogZXh0cmFjdHMgd2hpY2ggdGV4dHVyZSBmaWxlcyBpdCBhbHNvIG5lZWRzIHRvIGxvYWQgdG8gY29tcGxldGUgdGhlIHByb2Nlc3MuIElmIHRoZSBKU09OIGFsc28gZGVmaW5lcyBub3JtYWwgbWFwcyxcclxuICogUGhhc2VyIHdpbGwgbG9hZCB0aG9zZSBhcyB3ZWxsLlxyXG4gKiBcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQubXVsdGlhdGxhcyh7XHJcbiAqICAgICBrZXk6ICdsZXZlbDEnLFxyXG4gKiAgICAgYXRsYXNVUkw6ICdpbWFnZXMvTGV2ZWwxLmpzb24nXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlBdGxhc0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF0bGFzIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGZyYW1lcyBmcm9tIGl0IGFzIHRleHR1cmVzIGZvciBhIEdhbWUgT2JqZWN0IGJ5IHJlZmVyZW5jaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5tdWx0aWF0bGFzKCdsZXZlbDEnLCAnaW1hZ2VzL0xldmVsMS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdsZXZlbDEnLCAnYmFja2dyb3VuZCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZyYW1lcyB3aXRoaW4gYW4gYXRsYXMgcGxlYXNlIGNvbnN1bHQgeW91ciBUZXh0dXJlIEF0bGFzIHNvZnR3YXJlLlxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIE11bHRpIEF0bGFzIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpYXRsYXNcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXRsYXNVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGF0bGFzIGpzb24gZGF0YSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBPcHRpb25hbCBwYXRoIHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIHRleHR1cmVzIGRlZmluZWQgaW4gdGhlIGF0bGFzIGRhdGEuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVVSTF0gLSBPcHRpb25hbCBCYXNlIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB0ZXh0dXJlcyBkZWZpbmVkIGluIHRoZSBhdGxhcyBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIGpzb24gZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdtdWx0aWF0bGFzJywgZnVuY3Rpb24gKGtleSwgYXRsYXNVUkwsIHBhdGgsIGJhc2VVUkwsIGF0bGFzWGhyU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBtdWx0aWZpbGU7XHJcblxyXG4gICAgLy8gIFN1cHBvcnRzIGFuIE9iamVjdCBmaWxlIGRlZmluaXRpb24gaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGEgc2luZ2xlIGVudHJ5IHdoZXJlIGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIGRlZmluZWRcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpQXRsYXNGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpQXRsYXNGaWxlKHRoaXMsIGtleSwgYXRsYXNVUkwsIHBhdGgsIGJhc2VVUkwsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpQXRsYXNGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar ScriptFile = __webpack_require__(/*! ./ScriptFile.js */ \"./node_modules/phaser/src/loader/filetypes/ScriptFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Multi Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#scripts method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#scripts.\r\n *\r\n * @class MultiScriptFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string[]} [url] - An array of absolute or relative URLs to load the script files from. They are processed in the order given in the array.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object for the script files. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar MultiScriptFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function MultiScriptFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'js';\r\n        var files = [];\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        if (!Array.isArray(url))\r\n        {\r\n            url = [ url ];\r\n        }\r\n\r\n        for (var i = 0; i < url.length; i++)\r\n        {\r\n            var scriptFile = new ScriptFile(loader, {\r\n                key: key + '_' + i.toString(),\r\n                url: url[i],\r\n                extension: extension,\r\n                xhrSettings: xhrSettings\r\n            });\r\n\r\n            //  Override the default onProcess function\r\n            scriptFile.onProcess = function ()\r\n            {\r\n                this.onProcessComplete();\r\n            };\r\n\r\n            files.push(scriptFile);\r\n        }\r\n\r\n        MultiFile.call(this, loader, 'scripts', key, files);\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.MultiScriptFile#addToCache\r\n     * @since 3.17.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            for (var i = 0; i < this.files.length; i++)\r\n            {\r\n                var file = this.files[i];\r\n\r\n                file.data = document.createElement('script');\r\n                file.data.language = 'javascript';\r\n                file.data.type = 'text/javascript';\r\n                file.data.defer = false;\r\n                file.data.text = file.xhrLoader.responseText;\r\n        \r\n                document.head.appendChild(file.data);\r\n            }\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an array of Script files to the current load queue.\r\n * \r\n * The difference between this and the `ScriptFile` file type is that you give an array of scripts to this method,\r\n * and the scripts are then processed _exactly_ in that order. This allows you to load a bunch of scripts that\r\n * may have dependencies on each other without worrying about the async nature of traditional script loading.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.scripts('PostProcess', [\r\n *         'libs/shaders/CopyShader.js',\r\n *         'libs/postprocessing/EffectComposer.js',\r\n *         'libs/postprocessing/RenderPass.js',\r\n *         'libs/postprocessing/MaskPass.js',\r\n *         'libs/postprocessing/ShaderPass.js',\r\n *         'libs/postprocessing/AfterimagePass.js'\r\n *    ]);\r\n * }\r\n * ```\r\n * \r\n * In the code above the script files will all be loaded in parallel but only processed (i.e. invoked) in the exact\r\n * order given in the array.\r\n *\r\n * The files are **not** loaded right away. They are added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the files are queued\r\n * it means you cannot use the files immediately after calling this method, but must wait for the files to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.scripts({\r\n *     key: 'PostProcess',\r\n *     url: [\r\n *         'libs/shaders/CopyShader.js',\r\n *         'libs/postprocessing/EffectComposer.js',\r\n *         'libs/postprocessing/RenderPass.js',\r\n *         'libs/postprocessing/MaskPass.js',\r\n *         'libs/postprocessing/ShaderPass.js',\r\n *         'libs/postprocessing/AfterimagePass.js'\r\n *        ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.MultiScriptFileConfig` for more details.\r\n *\r\n * Once all the files have finished loading they will automatically be converted into a script element\r\n * via `document.createElement('script')`. They will have their language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed. This is done in the exact order the files are specified in the url array.\r\n *\r\n * The URLs can be relative or absolute. If the URLs are relative the `Loader.baseURL` and `Loader.path` values will be prepended to them.\r\n *\r\n * Note: The ability to load this type of file will only be available if the MultiScript File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#scripts\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string[]} [url] - An array of absolute or relative URLs to load the script files from. They are processed in the order given in the array.\r\n * @param {string} [extension='js'] - The default file extension to use if no url is provided.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for these files.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('scripts', function (key, url, xhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new MultiScriptFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new MultiScriptFile(this, key, url, xhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = MultiScriptFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL011bHRpU2NyaXB0RmlsZS5qcz8xZTQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBaUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtSEFBbUg7QUFDOUgsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvTXVsdGlTY3JpcHRGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgTXVsdGlGaWxlID0gcmVxdWlyZSgnLi4vTXVsdGlGaWxlLmpzJyk7XHJcbnZhciBTY3JpcHRGaWxlID0gcmVxdWlyZSgnLi9TY3JpcHRGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIE11bHRpIFNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0cyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjcmlwdHMuXHJcbiAqXHJcbiAqIEBjbGFzcyBNdWx0aVNjcmlwdEZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlTY3JpcHRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbdXJsXSAtIEFuIGFycmF5IG9mIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTHMgdG8gbG9hZCB0aGUgc2NyaXB0IGZpbGVzIGZyb20uIFRoZXkgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBzY3JpcHQgZmlsZXMuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgTXVsdGlTY3JpcHRGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBNdWx0aVNjcmlwdEZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnanMnO1xyXG4gICAgICAgIHZhciBmaWxlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmwpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdXJsID0gWyB1cmwgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJsLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNjcmlwdEZpbGUgPSBuZXcgU2NyaXB0RmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5ICsgJ18nICsgaS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxbaV0sXHJcbiAgICAgICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5nc1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vICBPdmVycmlkZSB0aGUgZGVmYXVsdCBvblByb2Nlc3MgZnVuY3Rpb25cclxuICAgICAgICAgICAgc2NyaXB0RmlsZS5vblByb2Nlc3MgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmaWxlcy5wdXNoKHNjcmlwdEZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnc2NyaXB0cycsIGtleSwgZmlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGZpbGUuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLmxhbmd1YWdlID0gJ2phdmFzY3JpcHQnO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcclxuICAgICAgICAgICAgICAgIGZpbGUuZGF0YS5kZWZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLnRleHQgPSBmaWxlLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGZpbGUuZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gYXJyYXkgb2YgU2NyaXB0IGZpbGVzIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqIFxyXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBgU2NyaXB0RmlsZWAgZmlsZSB0eXBlIGlzIHRoYXQgeW91IGdpdmUgYW4gYXJyYXkgb2Ygc2NyaXB0cyB0byB0aGlzIG1ldGhvZCxcclxuICogYW5kIHRoZSBzY3JpcHRzIGFyZSB0aGVuIHByb2Nlc3NlZCBfZXhhY3RseV8gaW4gdGhhdCBvcmRlci4gVGhpcyBhbGxvd3MgeW91IHRvIGxvYWQgYSBidW5jaCBvZiBzY3JpcHRzIHRoYXRcclxuICogbWF5IGhhdmUgZGVwZW5kZW5jaWVzIG9uIGVhY2ggb3RoZXIgd2l0aG91dCB3b3JyeWluZyBhYm91dCB0aGUgYXN5bmMgbmF0dXJlIG9mIHRyYWRpdGlvbmFsIHNjcmlwdCBsb2FkaW5nLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc2NyaXB0cygnUG9zdFByb2Nlc3MnLCBbXHJcbiAqICAgICAgICAgJ2xpYnMvc2hhZGVycy9Db3B5U2hhZGVyLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9FZmZlY3RDb21wb3Nlci5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcy5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvTWFza1Bhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL0FmdGVyaW1hZ2VQYXNzLmpzJ1xyXG4gKiAgICBdKTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIEluIHRoZSBjb2RlIGFib3ZlIHRoZSBzY3JpcHQgZmlsZXMgd2lsbCBhbGwgYmUgbG9hZGVkIGluIHBhcmFsbGVsIGJ1dCBvbmx5IHByb2Nlc3NlZCAoaS5lLiBpbnZva2VkKSBpbiB0aGUgZXhhY3RcclxuICogb3JkZXIgZ2l2ZW4gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUaGUgZmlsZXMgYXJlICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIFRoZXkgYXJlIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlcyBhcmUgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlcyBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZXMgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nIGFuZCBub3QgYWxyZWFkeSBpbi11c2UgYnkgYW5vdGhlciBmaWxlIGluIHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5zY3JpcHRzKHtcclxuICogICAgIGtleTogJ1Bvc3RQcm9jZXNzJyxcclxuICogICAgIHVybDogW1xyXG4gKiAgICAgICAgICdsaWJzL3NoYWRlcnMvQ29weVNoYWRlci5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXIuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL1JlbmRlclBhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL01hc2tQYXNzLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9TaGFkZXJQYXNzLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9BZnRlcmltYWdlUGFzcy5qcydcclxuICogICAgICAgIF1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgYWxsIHRoZSBmaWxlcyBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgdGhleSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIGludG8gYSBzY3JpcHQgZWxlbWVudFxyXG4gKiB2aWEgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpYC4gVGhleSB3aWxsIGhhdmUgdGhlaXIgbGFuZ3VhZ2Ugc2V0IHRvIEphdmFTY3JpcHQsIGBkZWZlcmAgc2V0IHRvXHJcbiAqIGZhbHNlIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIGBkb2N1bWVudC5oZWFkYC4gQW55IGNvZGUgdGhlbiBpbiB0aGVcclxuICogc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoaXMgaXMgZG9uZSBpbiB0aGUgZXhhY3Qgb3JkZXIgdGhlIGZpbGVzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIHVybCBhcnJheS5cclxuICpcclxuICogVGhlIFVSTHMgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMcyBhcmUgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZW0uXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTXVsdGlTY3JpcHQgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0c1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpU2NyaXB0RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VybF0gLSBBbiBhcnJheSBvZiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkxzIHRvIGxvYWQgdGhlIHNjcmlwdCBmaWxlcyBmcm9tLiBUaGV5IGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGdpdmVuIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtleHRlbnNpb249J2pzJ10gLSBUaGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiB0byB1c2UgaWYgbm8gdXJsIGlzIHByb3ZpZGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGVzZSBmaWxlcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdzY3JpcHRzJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgTXVsdGlTY3JpcHRGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpU2NyaXB0RmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpU2NyaXB0RmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/PackFile.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/PackFile.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON Pack File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#pack method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#pack.\r\n *\r\n * @class PackFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PackFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar PackFile = new Class({\r\n\r\n    Extends: JSONFile,\r\n\r\n    initialize:\r\n\r\n    //  url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n    //  dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n    function PackFile (loader, key, url, xhrSettings, dataKey)\r\n    {\r\n        JSONFile.call(this, loader, key, url, xhrSettings, dataKey);\r\n\r\n        this.type = 'packfile';\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.PackFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        if (this.state !== CONST.FILE_POPULATED)\r\n        {\r\n            this.state = CONST.FILE_PROCESSING;\r\n\r\n            this.data = JSON.parse(this.xhrLoader.responseText);\r\n        }\r\n\r\n        //  Let's pass the pack file data over to the Loader ...\r\n        this.loader.addPack(this.data, this.config);\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON File Pack, or array of packs, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.pack('level1', 'data/Level1Files.json');\r\n * }\r\n * ```\r\n *\r\n * A File Pack is a JSON file (or object) that contains details about other files that should be added into the Loader.\r\n * Here is a small example:\r\n *\r\n * ```json\r\n * { \r\n *    \"test1\": {\r\n *        \"files\": [\r\n *            {\r\n *                \"type\": \"image\",\r\n *                \"key\": \"taikodrummaster\",\r\n *                \"url\": \"assets/pics/taikodrummaster.jpg\"\r\n *            },\r\n *            {\r\n *                \"type\": \"image\",\r\n *                \"key\": \"sukasuka-chtholly\",\r\n *                \"url\": \"assets/pics/sukasuka-chtholly.png\"\r\n *            }\r\n *        ]\r\n *    },\r\n *    \"meta\": {\r\n *        \"generated\": \"1401380327373\",\r\n *        \"app\": \"Phaser 3 Asset Packer\",\r\n *        \"url\": \"https://phaser.io\",\r\n *        \"version\": \"1.0\",\r\n *        \"copyright\": \"Photon Storm Ltd. 2018\"\r\n *    }\r\n * }\r\n * ```\r\n *\r\n * The pack can be split into sections. In the example above you'll see a section called `test1. You can tell\r\n * the `load.pack` method to parse only a particular section of a pack. The pack is stored in the JSON Cache,\r\n * so you can pass it to the Loader to process additional sections as needed in your game, or you can just load\r\n * them all at once without specifying anything.\r\n *\r\n * The pack file can contain an entry for any type of file that Phaser can load. The object structures exactly\r\n * match that of the file type configs, and all properties available within the file type configs can be used\r\n * in the pack file too.\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.pack({\r\n *     key: 'level1',\r\n *     url: 'data/Level1Files.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.PackFileConfig` for more details.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n *     \"level1\": {\r\n *         \"baddies\": {\r\n *             \"aliens\": {},\r\n *             \"boss\": {}\r\n *         }\r\n *     },\r\n *     \"level2\": {},\r\n *     \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And you only wanted to store the `boss` data in the Cache, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Pack File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#pack\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PackFileConfig|Phaser.Types.Loader.FileTypes.PackFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('pack', function (key, url, packKey, xhrSettings)\r\n{\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            this.addFile(new PackFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new PackFile(this, key, url, xhrSettings, packKey));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = PackFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BhY2tGaWxlLmpzPzhhMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsNkVBQWU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHNEQUFzRDtBQUNqRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLFFBQVE7QUFDUixtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFHQUFxRztBQUNoSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9QYWNrRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEpTT04gUGFjayBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGFjayBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3BhY2suXHJcbiAqXHJcbiAqIEBjbGFzcyBQYWNrRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICovXHJcbnZhciBQYWNrRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogSlNPTkZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdXJsIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBsaWtlIGEgcHJvcGVyIHVybCwgb3IgYW4gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSByZWFkeS1tYWRlIEpTIE9iamVjdFxyXG4gICAgLy8gIGRhdGFLZXkgYWxsb3dzIHlvdSB0byBwbHVjayBhIHNwZWNpZmljIG9iamVjdCBvdXQgb2YgdGhlIEpTT04gYW5kIHB1dCBqdXN0IHRoYXQgaW50byB0aGUgY2FjaGUsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZ1xyXG5cclxuICAgIGZ1bmN0aW9uIFBhY2tGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YUtleSlcclxuICAgIHtcclxuICAgICAgICBKU09ORmlsZS5jYWxsKHRoaXMsIGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KTtcclxuXHJcbiAgICAgICAgdGhpcy50eXBlID0gJ3BhY2tmaWxlJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENPTlNULkZJTEVfUE9QVUxBVEVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UodGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBMZXQncyBwYXNzIHRoZSBwYWNrIGZpbGUgZGF0YSBvdmVyIHRvIHRoZSBMb2FkZXIgLi4uXHJcbiAgICAgICAgdGhpcy5sb2FkZXIuYWRkUGFjayh0aGlzLmRhdGEsIHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhIEpTT04gRmlsZSBQYWNrLCBvciBhcnJheSBvZiBwYWNrcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnBhY2soJ2xldmVsMScsICdkYXRhL0xldmVsMUZpbGVzLmpzb24nKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQSBGaWxlIFBhY2sgaXMgYSBKU09OIGZpbGUgKG9yIG9iamVjdCkgdGhhdCBjb250YWlucyBkZXRhaWxzIGFib3V0IG90aGVyIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGludG8gdGhlIExvYWRlci5cclxuICogSGVyZSBpcyBhIHNtYWxsIGV4YW1wbGU6XHJcbiAqXHJcbiAqIGBgYGpzb25cclxuICogeyBcclxuICogICAgXCJ0ZXN0MVwiOiB7XHJcbiAqICAgICAgICBcImZpbGVzXCI6IFtcclxuICogICAgICAgICAgICB7XHJcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidGFpa29kcnVtbWFzdGVyXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiYXNzZXRzL3BpY3MvdGFpa29kcnVtbWFzdGVyLmpwZ1wiXHJcbiAqICAgICAgICAgICAgfSxcclxuICogICAgICAgICAgICB7XHJcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwia2V5XCI6IFwic3VrYXN1a2EtY2h0aG9sbHlcIixcclxuICogICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJhc3NldHMvcGljcy9zdWthc3VrYS1jaHRob2xseS5wbmdcIlxyXG4gKiAgICAgICAgICAgIH1cclxuICogICAgICAgIF1cclxuICogICAgfSxcclxuICogICAgXCJtZXRhXCI6IHtcclxuICogICAgICAgIFwiZ2VuZXJhdGVkXCI6IFwiMTQwMTM4MDMyNzM3M1wiLFxyXG4gKiAgICAgICAgXCJhcHBcIjogXCJQaGFzZXIgMyBBc3NldCBQYWNrZXJcIixcclxuICogICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9waGFzZXIuaW9cIixcclxuICogICAgICAgIFwidmVyc2lvblwiOiBcIjEuMFwiLFxyXG4gKiAgICAgICAgXCJjb3B5cmlnaHRcIjogXCJQaG90b24gU3Rvcm0gTHRkLiAyMDE4XCJcclxuICogICAgfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgcGFjayBjYW4gYmUgc3BsaXQgaW50byBzZWN0aW9ucy4gSW4gdGhlIGV4YW1wbGUgYWJvdmUgeW91J2xsIHNlZSBhIHNlY3Rpb24gY2FsbGVkIGB0ZXN0MS4gWW91IGNhbiB0ZWxsXHJcbiAqIHRoZSBgbG9hZC5wYWNrYCBtZXRob2QgdG8gcGFyc2Ugb25seSBhIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiBhIHBhY2suIFRoZSBwYWNrIGlzIHN0b3JlZCBpbiB0aGUgSlNPTiBDYWNoZSxcclxuICogc28geW91IGNhbiBwYXNzIGl0IHRvIHRoZSBMb2FkZXIgdG8gcHJvY2VzcyBhZGRpdGlvbmFsIHNlY3Rpb25zIGFzIG5lZWRlZCBpbiB5b3VyIGdhbWUsIG9yIHlvdSBjYW4ganVzdCBsb2FkXHJcbiAqIHRoZW0gYWxsIGF0IG9uY2Ugd2l0aG91dCBzcGVjaWZ5aW5nIGFueXRoaW5nLlxyXG4gKlxyXG4gKiBUaGUgcGFjayBmaWxlIGNhbiBjb250YWluIGFuIGVudHJ5IGZvciBhbnkgdHlwZSBvZiBmaWxlIHRoYXQgUGhhc2VyIGNhbiBsb2FkLiBUaGUgb2JqZWN0IHN0cnVjdHVyZXMgZXhhY3RseVxyXG4gKiBtYXRjaCB0aGF0IG9mIHRoZSBmaWxlIHR5cGUgY29uZmlncywgYW5kIGFsbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGZpbGUgdHlwZSBjb25maWdzIGNhbiBiZSB1c2VkXHJcbiAqIGluIHRoZSBwYWNrIGZpbGUgdG9vLlxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5wYWNrKHtcclxuICogICAgIGtleTogJ2xldmVsMScsXHJcbiAqICAgICB1cmw6ICdkYXRhL0xldmVsMUZpbGVzLmpzb24nXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGFja0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIHlvdSBvbmx5IHdhbnRlZCB0byBzdG9yZSB0aGUgYGJvc3NgIGRhdGEgaW4gdGhlIENhY2hlLCB0aGVuIHlvdSBjb3VsZCBwYXNzIGBsZXZlbDEuYmFkZGllcy5ib3NzYGFzIHRoZSBgZGF0YUtleWAuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUGFjayBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwYWNrXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3BhY2snLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHBhY2tLZXksIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBhY2tGaWxlKHRoaXMsIGtleVtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBhY2tGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgcGFja0tleSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFja0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/PackFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/PluginFile.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/PluginFile.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Plugin Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#plugin method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#plugin.\r\n *\r\n * @class PluginFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PluginFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {boolean} [start=false] - Automatically start the plugin after loading?\r\n * @param {string} [mapping] - If this plugin is to be injected into the Scene, this is the property key used.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar PluginFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function PluginFile (loader, key, url, start, mapping, xhrSettings)\r\n    {\r\n        var extension = 'js';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            start = GetFastValue(config, 'start');\r\n            mapping = GetFastValue(config, 'mapping');\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'plugin',\r\n            cache: false,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: {\r\n                start: start,\r\n                mapping: mapping\r\n            }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        // If the url variable refers to a class, add the plugin directly\r\n        if (typeof url === 'function')\r\n        {\r\n            this.data = url;\r\n\r\n            this.state = CONST.FILE_POPULATED;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.PluginFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        var pluginManager = this.loader.systems.plugins;\r\n        var config = this.config;\r\n\r\n        var start = GetFastValue(config, 'start', false);\r\n        var mapping = GetFastValue(config, 'mapping', null);\r\n\r\n        if (this.state === CONST.FILE_POPULATED)\r\n        {\r\n            pluginManager.install(this.key, this.data, start, mapping);\r\n        }\r\n        else\r\n        {\r\n            //  Plugin added via a js file\r\n            this.state = CONST.FILE_PROCESSING;\r\n\r\n            this.data = document.createElement('script');\r\n            this.data.language = 'javascript';\r\n            this.data.type = 'text/javascript';\r\n            this.data.defer = false;\r\n            this.data.text = this.xhrLoader.responseText;\r\n\r\n            document.head.appendChild(this.data);\r\n\r\n            var plugin = pluginManager.install(this.key, window[this.key], start, mapping);\r\n\r\n            if (start || mapping)\r\n            {\r\n                //  Install into the current Scene Systems and Scene\r\n                this.loader.systems[mapping] = plugin;\r\n                this.loader.scene[mapping] = plugin;\r\n            }\r\n        }\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Plugin Script file, or array of plugin files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.plugin('modplayer', 'plugins/ModPlayer.js');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.plugin({\r\n *     key: 'modplayer',\r\n *     url: 'plugins/ModPlayer.js'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.PluginFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a script element\r\n * via `document.createElement('script')`. It will have its language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed. It will then be passed to the Phaser PluginCache.register method.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.js\". It will always add `.js` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Plugin File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#plugin\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PluginFileConfig|Phaser.Types.Loader.FileTypes.PluginFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|function)} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\". Or, a plugin function.\r\n * @param {boolean} [start] - Automatically start the plugin after loading?\r\n * @param {string} [mapping] - If this plugin is to be injected into the Scene, this is the property key used.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('plugin', function (key, url, start, mapping, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new PluginFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new PluginFile(this, key, url, start, mapping, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = PluginFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BsdWdpbkZpbGUuanM/N2IyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5R0FBeUc7QUFDcEgsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BsdWdpbkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgUGx1Z2luIFNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGx1Z2luIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgUGx1Z2luRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QbHVnaW5GaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmpzYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNcIi5cclxuICogQHBhcmFtIHtib29sZWFufSBbc3RhcnQ9ZmFsc2VdIC0gQXV0b21hdGljYWxseSBzdGFydCB0aGUgcGx1Z2luIGFmdGVyIGxvYWRpbmc/XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWFwcGluZ10gLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBTY2VuZSwgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IHVzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBQbHVnaW5GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUGx1Z2luRmlsZSAobG9hZGVyLCBrZXksIHVybCwgc3RhcnQsIG1hcHBpbmcsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnanMnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgc3RhcnQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3RhcnQnKTtcclxuICAgICAgICAgICAgbWFwcGluZyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdtYXBwaW5nJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ3BsdWdpbicsXHJcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsXHJcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiBtYXBwaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHVybCB2YXJpYWJsZSByZWZlcnMgdG8gYSBjbGFzcywgYWRkIHRoZSBwbHVnaW4gZGlyZWN0bHlcclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVybDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BPUFVMQVRFRDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBsdWdpbk1hbmFnZXIgPSB0aGlzLmxvYWRlci5zeXN0ZW1zLnBsdWdpbnM7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG5cclxuICAgICAgICB2YXIgc3RhcnQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3RhcnQnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWFwcGluZycsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuRklMRV9QT1BVTEFURUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmluc3RhbGwodGhpcy5rZXksIHRoaXMuZGF0YSwgc3RhcnQsIG1hcHBpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUGx1Z2luIGFkZGVkIHZpYSBhIGpzIGZpbGVcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEubGFuZ3VhZ2UgPSAnamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5kZWZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dCA9IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwbHVnaW4gPSBwbHVnaW5NYW5hZ2VyLmluc3RhbGwodGhpcy5rZXksIHdpbmRvd1t0aGlzLmtleV0sIHN0YXJ0LCBtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydCB8fCBtYXBwaW5nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSW5zdGFsbCBpbnRvIHRoZSBjdXJyZW50IFNjZW5lIFN5c3RlbXMgYW5kIFNjZW5lXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlci5zeXN0ZW1zW21hcHBpbmddID0gcGx1Z2luO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIuc2NlbmVbbWFwcGluZ10gPSBwbHVnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBQbHVnaW4gU2NyaXB0IGZpbGUsIG9yIGFycmF5IG9mIHBsdWdpbiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnBsdWdpbignbW9kcGxheWVyJywgJ3BsdWdpbnMvTW9kUGxheWVyLmpzJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcgYW5kIG5vdCBhbHJlYWR5IGluLXVzZSBieSBhbm90aGVyIGZpbGUgaW4gdGhlIExvYWRlci5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnBsdWdpbih7XHJcbiAqICAgICBrZXk6ICdtb2RwbGF5ZXInLFxyXG4gKiAgICAgdXJsOiAncGx1Z2lucy9Nb2RQbGF5ZXIuanMnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIGludG8gYSBzY3JpcHQgZWxlbWVudFxyXG4gKiB2aWEgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpYC4gSXQgd2lsbCBoYXZlIGl0cyBsYW5ndWFnZSBzZXQgdG8gSmF2YVNjcmlwdCwgYGRlZmVyYCBzZXQgdG9cclxuICogZmFsc2UgYW5kIHRoZW4gdGhlIHJlc3VsdGluZyBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWQgdG8gYGRvY3VtZW50LmhlYWRgLiBBbnkgY29kZSB0aGVuIGluIHRoZVxyXG4gKiBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZC4gSXQgd2lsbCB0aGVuIGJlIHBhc3NlZCB0byB0aGUgUGhhc2VyIFBsdWdpbkNhY2hlLnJlZ2lzdGVyIG1ldGhvZC5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5qc1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5qc2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUGx1Z2luIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3BsdWdpblxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QbHVnaW5GaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuIE9yLCBhIHBsdWdpbiBmdW5jdGlvbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbc3RhcnRdIC0gQXV0b21hdGljYWxseSBzdGFydCB0aGUgcGx1Z2luIGFmdGVyIGxvYWRpbmc/XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWFwcGluZ10gLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBTY2VuZSwgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IHVzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdwbHVnaW4nLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHN0YXJ0LCBtYXBwaW5nLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBsdWdpbkZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgUGx1Z2luRmlsZSh0aGlzLCBrZXksIHVybCwgc3RhcnQsIG1hcHBpbmcsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbHVnaW5GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/PluginFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/SVGFile.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/SVGFile.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single SVG File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#svg method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#svg.\r\n *\r\n * @class SVGFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SVGFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.svg`, i.e. if `key` was \"alien\" then the URL will be \"alien.svg\".\r\n * @param {Phaser.Types.Loader.FileTypes.SVGSizeConfig} [svgConfig] - The svg size configuration object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar SVGFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function SVGFile (loader, key, url, svgConfig, xhrSettings)\r\n    {\r\n        var extension = 'svg';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            svgConfig = GetFastValue(config, 'svgConfig', {});\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'svg',\r\n            cache: loader.textureManager,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: {\r\n                width: GetFastValue(svgConfig, 'width'),\r\n                height: GetFastValue(svgConfig, 'height'),\r\n                scale: GetFastValue(svgConfig, 'scale')\r\n            }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.SVGFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        var text = this.xhrLoader.responseText;\r\n        var svg = [ text ];\r\n        var width = this.config.width;\r\n        var height = this.config.height;\r\n        var scale = this.config.scale;\r\n\r\n        resize: if (width && height || scale)\r\n        {\r\n            var xml = null;\r\n            var parser = new DOMParser();\r\n            xml = parser.parseFromString(text, 'text/xml');\r\n            var svgXML = xml.getElementsByTagName('svg')[0];\r\n\r\n            var hasViewBox = svgXML.hasAttribute('viewBox');\r\n            var svgWidth = parseFloat(svgXML.getAttribute('width'));\r\n            var svgHeight = parseFloat(svgXML.getAttribute('height'));\r\n\r\n            if (!hasViewBox && svgWidth && svgHeight)\r\n            {\r\n                //  If there's no viewBox attribute, set one\r\n                svgXML.setAttribute('viewBox', '0  0 ' + svgWidth + ' ' + svgHeight);\r\n            }\r\n            else if (hasViewBox && !svgWidth && !svgHeight)\r\n            {\r\n                //  Get the w/h from the viewbox\r\n                var viewBox = svgXML.getAttribute('viewBox').split(/\\s+|,/);\r\n\r\n                svgWidth = viewBox[2];\r\n                svgHeight = viewBox[3];\r\n            }\r\n\r\n            if (scale)\r\n            {\r\n                if (svgWidth && svgHeight)\r\n                {\r\n                    width = svgWidth * scale;\r\n                    height = svgHeight * scale;\r\n                }\r\n                else\r\n                {\r\n                    break resize;\r\n                }\r\n            }\r\n\r\n            svgXML.setAttribute('width', width.toString() + 'px');\r\n            svgXML.setAttribute('height', height.toString() + 'px');\r\n\r\n            svg = [ (new XMLSerializer()).serializeToString(svgXML) ];\r\n        }\r\n\r\n        try\r\n        {\r\n            var blob = new window.Blob(svg, { type: 'image/svg+xml;charset=utf-8' });\r\n        }\r\n        catch (e)\r\n        {\r\n            this.onProcessError();\r\n\r\n            return;\r\n        }\r\n\r\n        this.data = new Image();\r\n\r\n        this.data.crossOrigin = this.crossOrigin;\r\n\r\n        var _this = this;\r\n        var retry = false;\r\n\r\n        this.data.onload = function ()\r\n        {\r\n            if (!retry)\r\n            {\r\n                File.revokeObjectURL(_this.data);\r\n            }\r\n\r\n            _this.onProcessComplete();\r\n        };\r\n\r\n        this.data.onerror = function ()\r\n        {\r\n            //  Safari 8 re-try\r\n            if (!retry)\r\n            {\r\n                retry = true;\r\n\r\n                File.revokeObjectURL(_this.data);\r\n\r\n                _this.data.src = 'data:image/svg+xml,' + encodeURIComponent(svg.join(''));\r\n            }\r\n            else\r\n            {\r\n                _this.onProcessError();\r\n            }\r\n        };\r\n\r\n        File.createObjectURL(this.data, blob, 'image/svg+xml');\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.SVGFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var texture = this.cache.addImage(this.key, this.data);\r\n\r\n        this.pendingDestroy(texture);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an SVG File, or array of SVG Files, to the current load queue. When the files are loaded they\r\n * will be rendered to bitmap textures and stored in the Texture Manager.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.svg('morty', 'images/Morty.svg');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.svg({\r\n *     key: 'morty',\r\n *     url: 'images/Morty.svg'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.SVGFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n *\r\n * ```javascript\r\n * this.load.svg('morty', 'images/Morty.svg');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'morty');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n * \r\n * You can optionally pass an SVG Resize Configuration object when you load an SVG file. By default the SVG will be rendered to a texture\r\n * at the same size defined in the SVG file attributes. However, this isn't always desirable. You may wish to resize the SVG (either down\r\n * or up) to improve texture clarity, or reduce texture memory consumption. You can either specify an exact width and height to resize\r\n * the SVG to:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.svg('morty', 'images/Morty.svg', { width: 300, height: 600 });\r\n * }\r\n * ```\r\n * \r\n * Or when using a configuration object:\r\n * \r\n * ```javascript\r\n * this.load.svg({\r\n *     key: 'morty',\r\n *     url: 'images/Morty.svg',\r\n *     svgConfig: {\r\n *         width: 300,\r\n *         height: 600\r\n *     }\r\n * });\r\n * ```\r\n * \r\n * Alternatively, you can just provide a scale factor instead:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.svg('morty', 'images/Morty.svg', { scale: 2.5 });\r\n * }\r\n * ```\r\n * \r\n * Or when using a configuration object:\r\n * \r\n * ```javascript\r\n * this.load.svg({\r\n *     key: 'morty',\r\n *     url: 'images/Morty.svg',\r\n *     svgConfig: {\r\n *         scale: 2.5\r\n *     }\r\n * });\r\n * ```\r\n * \r\n * If scale, width and height values are all given, the scale has priority and the width and height values are ignored.\r\n *\r\n * Note: The ability to load this type of file will only be available if the SVG File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#svg\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SVGFileConfig|Phaser.Types.Loader.FileTypes.SVGFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.svg`, i.e. if `key` was \"alien\" then the URL will be \"alien.svg\".\r\n * @param {Phaser.Types.Loader.FileTypes.SVGSizeConfig} [svgConfig] - The svg size configuration object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('svg', function (key, url, svgConfig, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new SVGFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new SVGFile(this, key, url, svgConfig, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = SVGFile;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NWR0ZpbGUuanM/NzI2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNENBQTRDO0FBQ3ZELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkMsc0JBQXNCLGdCQUFnQjtBQUNuRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDBCQUEwQjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxhQUFhO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtR0FBbUc7QUFDOUcsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNENBQTRDO0FBQ3ZELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvU1ZHRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBTVkcgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3N2ZyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3ZnLlxyXG4gKlxyXG4gKiBAY2xhc3MgU1ZHRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TVkdGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnN2Z2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnN2Z1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR1NpemVDb25maWd9IFtzdmdDb25maWddIC0gVGhlIHN2ZyBzaXplIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqL1xyXG52YXIgU1ZHRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNWR0ZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHN2Z0NvbmZpZywgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdzdmcnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICBzdmdDb25maWcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3ZnQ29uZmlnJywge30pO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnc3ZnJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci50ZXh0dXJlTWFuYWdlcixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogR2V0RmFzdFZhbHVlKHN2Z0NvbmZpZywgJ3dpZHRoJyksXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEdldEZhc3RWYWx1ZShzdmdDb25maWcsICdoZWlnaHQnKSxcclxuICAgICAgICAgICAgICAgIHNjYWxlOiBHZXRGYXN0VmFsdWUoc3ZnQ29uZmlnLCAnc2NhbGUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgdmFyIHN2ZyA9IFsgdGV4dCBdO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuY29uZmlnLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmNvbmZpZy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5jb25maWcuc2NhbGU7XHJcblxyXG4gICAgICAgIHJlc2l6ZTogaWYgKHdpZHRoICYmIGhlaWdodCB8fCBzY2FsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgICAgICAgICB4bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRleHQsICd0ZXh0L3htbCcpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnWE1MID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoYXNWaWV3Qm94ID0gc3ZnWE1MLmhhc0F0dHJpYnV0ZSgndmlld0JveCcpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Z1hNTC5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmdYTUwuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWhhc1ZpZXdCb3ggJiYgc3ZnV2lkdGggJiYgc3ZnSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSWYgdGhlcmUncyBubyB2aWV3Qm94IGF0dHJpYnV0ZSwgc2V0IG9uZVxyXG4gICAgICAgICAgICAgICAgc3ZnWE1MLnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwICAwICcgKyBzdmdXaWR0aCArICcgJyArIHN2Z0hlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzVmlld0JveCAmJiAhc3ZnV2lkdGggJiYgIXN2Z0hlaWdodClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEdldCB0aGUgdy9oIGZyb20gdGhlIHZpZXdib3hcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3Qm94ID0gc3ZnWE1MLmdldEF0dHJpYnV0ZSgndmlld0JveCcpLnNwbGl0KC9cXHMrfCwvKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdmdXaWR0aCA9IHZpZXdCb3hbMl07XHJcbiAgICAgICAgICAgICAgICBzdmdIZWlnaHQgPSB2aWV3Qm94WzNdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NhbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdmdXaWR0aCAmJiBzdmdIZWlnaHQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzdmdXaWR0aCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHN2Z0hlaWdodCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlc2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3ZnWE1MLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3aWR0aC50b1N0cmluZygpICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHN2Z1hNTC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGhlaWdodC50b1N0cmluZygpICsgJ3B4Jyk7XHJcblxyXG4gICAgICAgICAgICBzdmcgPSBbIChuZXcgWE1MU2VyaWFsaXplcigpKS5zZXJpYWxpemVUb1N0cmluZyhzdmdYTUwpIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHN2ZywgeyB0eXBlOiAnaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04JyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmV0cnkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIXJldHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25lcnJvciA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgU2FmYXJpIDggcmUtdHJ5XHJcbiAgICAgICAgICAgIGlmICghcmV0cnkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHJ5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5kYXRhLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWwsJyArIGVuY29kZVVSSUNvbXBvbmVudChzdmcuam9pbignJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZGF0YSwgYmxvYiwgJ2ltYWdlL3N2Zyt4bWwnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuY2FjaGUuYWRkSW1hZ2UodGhpcy5rZXksIHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kodGV4dHVyZSk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIFNWRyBGaWxlLCBvciBhcnJheSBvZiBTVkcgRmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuIFdoZW4gdGhlIGZpbGVzIGFyZSBsb2FkZWQgdGhleVxyXG4gKiB3aWxsIGJlIHJlbmRlcmVkIHRvIGJpdG1hcCB0ZXh0dXJlcyBhbmQgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnN2ZygnbW9ydHknLCAnaW1hZ2VzL01vcnR5LnN2ZycpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKHtcclxuICogICAgIGtleTogJ21vcnR5JyxcclxuICogICAgIHVybDogJ2ltYWdlcy9Nb3J0eS5zdmcnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIHVzZSBpdCBhcyBhIHRleHR1cmUgZm9yIGEgR2FtZSBPYmplY3QgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdtb3J0eScpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYE1FTlUuYCBhbmQgdGhlIGtleSB3YXMgYEJhY2tncm91bmRgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTUVOVS5CYWNrZ3JvdW5kYCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGltYWdlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5odG1sXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmh0bWxgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYW4gU1ZHIFJlc2l6ZSBDb25maWd1cmF0aW9uIG9iamVjdCB3aGVuIHlvdSBsb2FkIGFuIFNWRyBmaWxlLiBCeSBkZWZhdWx0IHRoZSBTVkcgd2lsbCBiZSByZW5kZXJlZCB0byBhIHRleHR1cmVcclxuICogYXQgdGhlIHNhbWUgc2l6ZSBkZWZpbmVkIGluIHRoZSBTVkcgZmlsZSBhdHRyaWJ1dGVzLiBIb3dldmVyLCB0aGlzIGlzbid0IGFsd2F5cyBkZXNpcmFibGUuIFlvdSBtYXkgd2lzaCB0byByZXNpemUgdGhlIFNWRyAoZWl0aGVyIGRvd25cclxuICogb3IgdXApIHRvIGltcHJvdmUgdGV4dHVyZSBjbGFyaXR5LCBvciByZWR1Y2UgdGV4dHVyZSBtZW1vcnkgY29uc3VtcHRpb24uIFlvdSBjYW4gZWl0aGVyIHNwZWNpZnkgYW4gZXhhY3Qgd2lkdGggYW5kIGhlaWdodCB0byByZXNpemVcclxuICogdGhlIFNWRyB0bzpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJywgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwMCB9KTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIE9yIHdoZW4gdXNpbmcgYSBjb25maWd1cmF0aW9uIG9iamVjdDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnN2Zyh7XHJcbiAqICAgICBrZXk6ICdtb3J0eScsXHJcbiAqICAgICB1cmw6ICdpbWFnZXMvTW9ydHkuc3ZnJyxcclxuICogICAgIHN2Z0NvbmZpZzoge1xyXG4gKiAgICAgICAgIHdpZHRoOiAzMDAsXHJcbiAqICAgICAgICAgaGVpZ2h0OiA2MDBcclxuICogICAgIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBqdXN0IHByb3ZpZGUgYSBzY2FsZSBmYWN0b3IgaW5zdGVhZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJywgeyBzY2FsZTogMi41IH0pO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogT3Igd2hlbiB1c2luZyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKHtcclxuICogICAgIGtleTogJ21vcnR5JyxcclxuICogICAgIHVybDogJ2ltYWdlcy9Nb3J0eS5zdmcnLFxyXG4gKiAgICAgc3ZnQ29uZmlnOiB7XHJcbiAqICAgICAgICAgc2NhbGU6IDIuNVxyXG4gKiAgICAgfVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBJZiBzY2FsZSwgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYXJlIGFsbCBnaXZlbiwgdGhlIHNjYWxlIGhhcyBwcmlvcml0eSBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGFyZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNWRyBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzdmdcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR0ZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnN2Z2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnN2Z1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR1NpemVDb25maWd9IFtzdmdDb25maWddIC0gVGhlIHN2ZyBzaXplIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3Rlcignc3ZnJywgZnVuY3Rpb24gKGtleSwgdXJsLCBzdmdDb25maWcsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgU1ZHRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBTVkdGaWxlKHRoaXMsIGtleSwgdXJsLCBzdmdDb25maWcsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTVkdGaWxlO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/SVGFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/SceneFile.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/SceneFile.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An external Scene JavaScript File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#sceneFile method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#sceneFile.\r\n *\r\n * @class SceneFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SceneFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar SceneFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function SceneFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'js';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'text',\r\n            cache: loader.cacheManager.text,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.SceneFile#onProcess\r\n     * @since 3.16.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = this.xhrLoader.responseText;\r\n\r\n        this.onProcessComplete();\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.SceneFile#addToCache\r\n     * @since 3.16.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var code = this.data.concat('(function(){\\n' + 'return new ' + this.key + '();\\n' + '}).call(this);');\r\n\r\n        //  Stops rollup from freaking out during build\r\n        var eval2 = eval;\r\n\r\n        this.loader.sceneManager.add(this.key, eval2(code));\r\n\r\n        this.complete = true;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an external Scene file, or array of Scene files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.sceneFile('Level1', 'src/Level1.js');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Scene Manager upon a successful load.\r\n * \r\n * For a Scene File it's vitally important that the key matches the class name in the JavaScript file.\r\n * \r\n * For example here is the source file:\r\n * \r\n * ```javascript\r\n * class ExternalScene extends Phaser.Scene {\r\n * \r\n *     constructor ()\r\n *     {\r\n *         super('myScene');\r\n *     }\r\n * \r\n * }\r\n * ```\r\n * \r\n * Because the class is called `ExternalScene` that is the exact same key you must use when loading it:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.sceneFile('ExternalScene', 'src/yourScene.js');\r\n * }\r\n * ```\r\n * \r\n * The key that is used within the Scene Manager can either be set to the same, or you can override it in the Scene\r\n * constructor, as we've done in the example above, where the Scene key was changed to `myScene`.\r\n * \r\n * The key should be unique both in terms of files being loaded and Scenes already present in the Scene Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Scene Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.sceneFile({\r\n *     key: 'Level1',\r\n *     url: 'src/Level1.js'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.SceneFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will be added to the Scene Manager.\r\n *\r\n * ```javascript\r\n * this.load.sceneFile('Level1', 'src/Level1.js');\r\n * // and later in your game ...\r\n * this.scene.start('Level1');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `WORLD1.` and the key was `Story` the final key will be `WORLD1.Story` and\r\n * this is what you would use to retrieve the text from the Scene Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"story\"\r\n * and no URL is given then the Loader will set the URL to be \"story.js\". It will always add `.js` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Scene File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#sceneFile\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.16.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SceneFileConfig|Phaser.Types.Loader.FileTypes.SceneFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('sceneFile', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new SceneFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new SceneFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = SceneFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NjZW5lRmlsZS5qcz84YmQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHVEQUF1RDtBQUNsRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxxQ0FBcUMsUUFBUSxhQUFhOztBQUUzRztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVHQUF1RztBQUNsSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9TY2VuZUZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gZXh0ZXJuYWwgU2NlbmUgSmF2YVNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NlbmVGaWxlIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICpcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzY2VuZUZpbGUuXHJcbiAqXHJcbiAqIEBjbGFzcyBTY2VuZUZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5GaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNjZW5lRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBTY2VuZUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTY2VuZUZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnanMnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLnRleHQsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3NcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5TY2VuZUZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuU2NlbmVGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY29kZSA9IHRoaXMuZGF0YS5jb25jYXQoJyhmdW5jdGlvbigpe1xcbicgKyAncmV0dXJuIG5ldyAnICsgdGhpcy5rZXkgKyAnKCk7XFxuJyArICd9KS5jYWxsKHRoaXMpOycpO1xyXG5cclxuICAgICAgICAvLyAgU3RvcHMgcm9sbHVwIGZyb20gZnJlYWtpbmcgb3V0IGR1cmluZyBidWlsZFxyXG4gICAgICAgIHZhciBldmFsMiA9IGV2YWw7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLnNjZW5lTWFuYWdlci5hZGQodGhpcy5rZXksIGV2YWwyKGNvZGUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGV4dGVybmFsIFNjZW5lIGZpbGUsIG9yIGFycmF5IG9mIFNjZW5lIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5zY2VuZUZpbGUoJ0xldmVsMScsICdzcmMvTGV2ZWwxLmpzJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBTY2VuZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFxyXG4gKiBGb3IgYSBTY2VuZSBGaWxlIGl0J3Mgdml0YWxseSBpbXBvcnRhbnQgdGhhdCB0aGUga2V5IG1hdGNoZXMgdGhlIGNsYXNzIG5hbWUgaW4gdGhlIEphdmFTY3JpcHQgZmlsZS5cclxuICogXHJcbiAqIEZvciBleGFtcGxlIGhlcmUgaXMgdGhlIHNvdXJjZSBmaWxlOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBjbGFzcyBFeHRlcm5hbFNjZW5lIGV4dGVuZHMgUGhhc2VyLlNjZW5lIHtcclxuICogXHJcbiAqICAgICBjb25zdHJ1Y3RvciAoKVxyXG4gKiAgICAge1xyXG4gKiAgICAgICAgIHN1cGVyKCdteVNjZW5lJyk7XHJcbiAqICAgICB9XHJcbiAqIFxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogQmVjYXVzZSB0aGUgY2xhc3MgaXMgY2FsbGVkIGBFeHRlcm5hbFNjZW5lYCB0aGF0IGlzIHRoZSBleGFjdCBzYW1lIGtleSB5b3UgbXVzdCB1c2Ugd2hlbiBsb2FkaW5nIGl0OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5zY2VuZUZpbGUoJ0V4dGVybmFsU2NlbmUnLCAnc3JjL3lvdXJTY2VuZS5qcycpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogVGhlIGtleSB0aGF0IGlzIHVzZWQgd2l0aGluIHRoZSBTY2VuZSBNYW5hZ2VyIGNhbiBlaXRoZXIgYmUgc2V0IHRvIHRoZSBzYW1lLCBvciB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBTY2VuZVxyXG4gKiBjb25zdHJ1Y3RvciwgYXMgd2UndmUgZG9uZSBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUgdGhlIFNjZW5lIGtleSB3YXMgY2hhbmdlZCB0byBgbXlTY2VuZWAuXHJcbiAqIFxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIFNjZW5lcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNjZW5lIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBTY2VuZSBNYW5hZ2VyIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnNjZW5lRmlsZSh7XHJcbiAqICAgICBrZXk6ICdMZXZlbDEnLFxyXG4gKiAgICAgdXJsOiAnc3JjL0xldmVsMS5qcydcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TY2VuZUZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgU2NlbmUgTWFuYWdlci5cclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc2NlbmVGaWxlKCdMZXZlbDEnLCAnc3JjL0xldmVsMS5qcycpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLnNjZW5lLnN0YXJ0KCdMZXZlbDEnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBXT1JMRDEuYCBhbmQgdGhlIGtleSB3YXMgYFN0b3J5YCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYFdPUkxEMS5TdG9yeWAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIFNjZW5lIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwic3RvcnlcIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwic3RvcnkuanNcIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNjZW5lIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjZW5lRmlsZVxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNjZW5lRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TY2VuZUZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdzY2VuZUZpbGUnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgU2NlbmVGaWxlKHRoaXMsIGtleVtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFNjZW5lRmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjZW5lRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/SceneFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/ScenePluginFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/ScenePluginFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Scene Plugin Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#scenePlugin method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#scenePlugin.\r\n *\r\n * @class ScenePluginFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.8.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ScenePluginFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {string} [systemKey] - If this plugin is to be added to Scene.Systems, this is the property key for it.\r\n * @param {string} [sceneKey] - If this plugin is to be added to the Scene, this is the property key for it.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar ScenePluginFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function ScenePluginFile (loader, key, url, systemKey, sceneKey, xhrSettings)\r\n    {\r\n        var extension = 'js';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n            systemKey = GetFastValue(config, 'systemKey');\r\n            sceneKey = GetFastValue(config, 'sceneKey');\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'scenePlugin',\r\n            cache: false,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings,\r\n            config: {\r\n                systemKey: systemKey,\r\n                sceneKey: sceneKey\r\n            }\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        // If the url variable refers to a class, add the plugin directly\r\n        if (typeof url === 'function')\r\n        {\r\n            this.data = url;\r\n\r\n            this.state = CONST.FILE_POPULATED;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.ScenePluginFile#onProcess\r\n     * @since 3.8.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        var pluginManager = this.loader.systems.plugins;\r\n        var config = this.config;\r\n\r\n        var key = this.key;\r\n        var systemKey = GetFastValue(config, 'systemKey', key);\r\n        var sceneKey = GetFastValue(config, 'sceneKey', key);\r\n\r\n        if (this.state === CONST.FILE_POPULATED)\r\n        {\r\n            pluginManager.installScenePlugin(systemKey, this.data, sceneKey, this.loader.scene, true);\r\n        }\r\n        else\r\n        {\r\n            //  Plugin added via a js file\r\n            this.state = CONST.FILE_PROCESSING;\r\n\r\n            this.data = document.createElement('script');\r\n            this.data.language = 'javascript';\r\n            this.data.type = 'text/javascript';\r\n            this.data.defer = false;\r\n            this.data.text = this.xhrLoader.responseText;\r\n\r\n            document.head.appendChild(this.data);\r\n\r\n            pluginManager.installScenePlugin(systemKey, window[this.key], sceneKey, this.loader.scene, true);\r\n        }\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Scene Plugin Script file, or array of plugin files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.scenePlugin('ModPlayer', 'plugins/ModPlayer.js', 'modPlayer', 'mods');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.scenePlugin({\r\n *     key: 'modplayer',\r\n *     url: 'plugins/ModPlayer.js'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.ScenePluginFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a script element\r\n * via `document.createElement('script')`. It will have its language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed. It will then be passed to the Phaser PluginCache.register method.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.js\". It will always add `.js` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Script File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#scenePlugin\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.8.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ScenePluginFileConfig|Phaser.Types.Loader.FileTypes.ScenePluginFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|function)} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\". Or, set to a plugin function.\r\n * @param {string} [systemKey] - If this plugin is to be added to Scene.Systems, this is the property key for it.\r\n * @param {string} [sceneKey] - If this plugin is to be added to the Scene, this is the property key for it.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('scenePlugin', function (key, url, systemKey, sceneKey, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new ScenePluginFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new ScenePluginFile(this, key, url, systemKey, sceneKey, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = ScenePluginFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NjZW5lUGx1Z2luRmlsZS5qcz80M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtSEFBbUg7QUFDOUgsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NjZW5lUGx1Z2luRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBTY2VuZSBQbHVnaW4gU2NyaXB0IEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzY2VuZVBsdWdpbiBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjZW5lUGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgU2NlbmVQbHVnaW5GaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNjZW5lUGx1Z2luRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3lzdGVtS2V5XSAtIElmIHRoaXMgcGx1Z2luIGlzIHRvIGJlIGFkZGVkIHRvIFNjZW5lLlN5c3RlbXMsIHRoaXMgaXMgdGhlIHByb3BlcnR5IGtleSBmb3IgaXQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2NlbmVLZXldIC0gSWYgdGhpcyBwbHVnaW4gaXMgdG8gYmUgYWRkZWQgdG8gdGhlIFNjZW5lLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSBrZXkgZm9yIGl0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqL1xyXG52YXIgU2NlbmVQbHVnaW5GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU2NlbmVQbHVnaW5GaWxlIChsb2FkZXIsIGtleSwgdXJsLCBzeXN0ZW1LZXksIHNjZW5lS2V5LCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2pzJztcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgICAgIHN5c3RlbUtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzeXN0ZW1LZXknKTtcclxuICAgICAgICAgICAgc2NlbmVLZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc2NlbmVLZXknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnc2NlbmVQbHVnaW4nLFxyXG4gICAgICAgICAgICBjYWNoZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXHJcbiAgICAgICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgICAgICAgc3lzdGVtS2V5OiBzeXN0ZW1LZXksXHJcbiAgICAgICAgICAgICAgICBzY2VuZUtleTogc2NlbmVLZXlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgdXJsIHZhcmlhYmxlIHJlZmVycyB0byBhIGNsYXNzLCBhZGQgdGhlIHBsdWdpbiBkaXJlY3RseVxyXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gdXJsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUE9QVUxBVEVEO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5TY2VuZVBsdWdpbkZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwbHVnaW5NYW5hZ2VyID0gdGhpcy5sb2FkZXIuc3lzdGVtcy5wbHVnaW5zO1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuXHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMua2V5O1xyXG4gICAgICAgIHZhciBzeXN0ZW1LZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3lzdGVtS2V5Jywga2V5KTtcclxuICAgICAgICB2YXIgc2NlbmVLZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc2NlbmVLZXknLCBrZXkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuRklMRV9QT1BVTEFURUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmluc3RhbGxTY2VuZVBsdWdpbihzeXN0ZW1LZXksIHRoaXMuZGF0YSwgc2NlbmVLZXksIHRoaXMubG9hZGVyLnNjZW5lLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFBsdWdpbiBhZGRlZCB2aWEgYSBqcyBmaWxlXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmxhbmd1YWdlID0gJ2phdmFzY3JpcHQnO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuZGVmZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHQgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmluc3RhbGxTY2VuZVBsdWdpbihzeXN0ZW1LZXksIHdpbmRvd1t0aGlzLmtleV0sIHNjZW5lS2V5LCB0aGlzLmxvYWRlci5zY2VuZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgU2NlbmUgUGx1Z2luIFNjcmlwdCBmaWxlLCBvciBhcnJheSBvZiBwbHVnaW4gZmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5zY2VuZVBsdWdpbignTW9kUGxheWVyJywgJ3BsdWdpbnMvTW9kUGxheWVyLmpzJywgJ21vZFBsYXllcicsICdtb2RzJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcgYW5kIG5vdCBhbHJlYWR5IGluLXVzZSBieSBhbm90aGVyIGZpbGUgaW4gdGhlIExvYWRlci5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnNjZW5lUGx1Z2luKHtcclxuICogICAgIGtleTogJ21vZHBsYXllcicsXHJcbiAqICAgICB1cmw6ICdwbHVnaW5zL01vZFBsYXllci5qcydcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TY2VuZVBsdWdpbkZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbnZlcnRlZCBpbnRvIGEgc2NyaXB0IGVsZW1lbnRcclxuICogdmlhIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKWAuIEl0IHdpbGwgaGF2ZSBpdHMgbGFuZ3VhZ2Ugc2V0IHRvIEphdmFTY3JpcHQsIGBkZWZlcmAgc2V0IHRvXHJcbiAqIGZhbHNlIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIGBkb2N1bWVudC5oZWFkYC4gQW55IGNvZGUgdGhlbiBpbiB0aGVcclxuICogc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQuIEl0IHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gdGhlIFBoYXNlciBQbHVnaW5DYWNoZS5yZWdpc3RlciBtZXRob2QuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4uanNcIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNjcmlwdCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzY2VuZVBsdWdpblxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU2NlbmVQbHVnaW5GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNjZW5lUGx1Z2luRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24pfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uanNgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc1wiLiBPciwgc2V0IHRvIGEgcGx1Z2luIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N5c3RlbUtleV0gLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBhZGRlZCB0byBTY2VuZS5TeXN0ZW1zLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSBrZXkgZm9yIGl0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NjZW5lS2V5XSAtIElmIHRoaXMgcGx1Z2luIGlzIHRvIGJlIGFkZGVkIHRvIHRoZSBTY2VuZSwgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IGZvciBpdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3NjZW5lUGx1Z2luJywgZnVuY3Rpb24gKGtleSwgdXJsLCBzeXN0ZW1LZXksIHNjZW5lS2V5LCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFNjZW5lUGx1Z2luRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBTY2VuZVBsdWdpbkZpbGUodGhpcywga2V5LCB1cmwsIHN5c3RlbUtleSwgc2NlbmVLZXksIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2VuZVBsdWdpbkZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/ScenePluginFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/ScriptFile.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/ScriptFile.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#script method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#script.\r\n *\r\n * @class ScriptFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ScriptFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar ScriptFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function ScriptFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'js';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'script',\r\n            cache: false,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.ScriptFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = document.createElement('script');\r\n        this.data.language = 'javascript';\r\n        this.data.type = 'text/javascript';\r\n        this.data.defer = false;\r\n        this.data.text = this.xhrLoader.responseText;\r\n\r\n        document.head.appendChild(this.data);\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Script file, or array of Script files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.script('aliens', 'lib/aliens.js');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.script({\r\n *     key: 'aliens',\r\n *     url: 'lib/aliens.js'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.ScriptFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a script element\r\n * via `document.createElement('script')`. It will have its language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.js\". It will always add `.js` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Script File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#script\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ScriptFileConfig|Phaser.Types.Loader.FileTypes.ScriptFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('script', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new ScriptFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new ScriptFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = ScriptFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NjcmlwdEZpbGUuanM/ODNhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlHQUF5RztBQUNwSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9TY3JpcHRGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIFNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0IG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0LlxyXG4gKlxyXG4gKiBAY2xhc3MgU2NyaXB0RmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TY3JpcHRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmpzYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIFNjcmlwdEZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTY3JpcHRGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2pzJztcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ3NjcmlwdCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5nc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLlNjcmlwdEZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5sYW5ndWFnZSA9ICdqYXZhc2NyaXB0JztcclxuICAgICAgICB0aGlzLmRhdGEudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xyXG4gICAgICAgIHRoaXMuZGF0YS5kZWZlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0ID0gdGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0O1xyXG5cclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBTY3JpcHQgZmlsZSwgb3IgYXJyYXkgb2YgU2NyaXB0IGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc2NyaXB0KCdhbGllbnMnLCAnbGliL2FsaWVucy5qcycpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nIGFuZCBub3QgYWxyZWFkeSBpbi11c2UgYnkgYW5vdGhlciBmaWxlIGluIHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5zY3JpcHQoe1xyXG4gKiAgICAga2V5OiAnYWxpZW5zJyxcclxuICogICAgIHVybDogJ2xpYi9hbGllbnMuanMnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU2NyaXB0RmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIGludG8gYSBzY3JpcHQgZWxlbWVudFxyXG4gKiB2aWEgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpYC4gSXQgd2lsbCBoYXZlIGl0cyBsYW5ndWFnZSBzZXQgdG8gSmF2YVNjcmlwdCwgYGRlZmVyYCBzZXQgdG9cclxuICogZmFsc2UgYW5kIHRoZW4gdGhlIHJlc3VsdGluZyBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWQgdG8gYGRvY3VtZW50LmhlYWRgLiBBbnkgY29kZSB0aGVuIGluIHRoZVxyXG4gKiBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZC5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5qc1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5qc2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU2NyaXB0IEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjcmlwdFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU2NyaXB0RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TY3JpcHRGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uanNgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3Rlcignc2NyaXB0JywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFNjcmlwdEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgU2NyaXB0RmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjcmlwdEZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/ScriptFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/SpriteSheetFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/SpriteSheetFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Sprite Sheet Image File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#spritesheet method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#spritesheet.\r\n *\r\n * @class SpriteSheetFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SpriteSheetFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar SpriteSheetFile = new Class({\r\n\r\n    Extends: ImageFile,\r\n\r\n    initialize:\r\n\r\n    function SpriteSheetFile (loader, key, url, frameConfig, xhrSettings)\r\n    {\r\n        ImageFile.call(this, loader, key, url, xhrSettings, frameConfig);\r\n\r\n        this.type = 'spritesheet';\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.SpriteSheetFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var texture = this.cache.addSpriteSheet(this.key, this.data, this.config);\r\n\r\n        this.pendingDestroy(texture);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Sprite Sheet Image, or array of Sprite Sheet Images, to the current load queue.\r\n *\r\n * The term 'Sprite Sheet' in Phaser means a fixed-size sheet. Where every frame in the sheet is the exact same size,\r\n * and you reference those frames using numbers, not frame names. This is not the same thing as a Texture Atlas, where\r\n * the frames are packed in a way where they take up the least amount of space, and are referenced by their names,\r\n * not numbers. Some articles and software use the term 'Sprite Sheet' to mean Texture Atlas, so please be aware of\r\n * what sort of file you're actually trying to load.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.spritesheet('bot', 'images/robot.png', { frameWidth: 32, frameHeight: 38 });\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n * If you try to load an animated gif only the first frame will be rendered. Browsers do not natively support playback\r\n * of animated gifs to Canvas elements.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.spritesheet({\r\n *     key: 'bot',\r\n *     url: 'images/robot.png',\r\n *     frameConfig: {\r\n *         frameWidth: 32,\r\n *         frameHeight: 38,\r\n *         startFrame: 0,\r\n *         endFrame: 8\r\n *     }\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.SpriteSheetFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.spritesheet('bot', 'images/robot.png', { frameWidth: 32, frameHeight: 38 });\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'bot', 0);\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `PLAYER.` and the key was `Running` the final key will be `PLAYER.Running` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.spritesheet('logo', [ 'images/AtariLogo.png', 'images/AtariLogo-n.png' ], { frameWidth: 256, frameHeight: 80 });\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.spritesheet({\r\n *     key: 'logo',\r\n *     url: 'images/AtariLogo.png',\r\n *     normalMap: 'images/AtariLogo-n.png',\r\n *     frameConfig: {\r\n *         frameWidth: 256,\r\n *         frameHeight: 80\r\n *     }\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n * \r\n * Note: The ability to load this type of file will only be available if the Sprite Sheet File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#spritesheet\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SpriteSheetFileConfig|Phaser.Types.Loader.FileTypes.SpriteSheetFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. At a minimum it should have a `frameWidth` property.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('spritesheet', function (key, url, frameConfig, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new SpriteSheetFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new SpriteSheetFile(this, key, url, frameConfig, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = SpriteSheetFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1Nwcml0ZVNoZWV0RmlsZS5qcz8zNDBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLCtDQUErQztBQUMxRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGtDQUFrQztBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGtDQUFrQztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0YsbUNBQW1DO0FBQzNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUhBQW1IO0FBQzlILFdBQVcsT0FBTztBQUNsQixXQUFXLCtDQUErQztBQUMxRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1Nwcml0ZVNoZWV0RmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgU3ByaXRlIFNoZWV0IEltYWdlIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzcHJpdGVzaGVldCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3Nwcml0ZXNoZWV0LlxyXG4gKlxyXG4gKiBAY2xhc3MgU3ByaXRlU2hlZXRGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNwcml0ZVNoZWV0RmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5JbWFnZUZyYW1lQ29uZmlnfSBbZnJhbWVDb25maWddIC0gVGhlIGZyYW1lIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqL1xyXG52YXIgU3ByaXRlU2hlZXRGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBJbWFnZUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTcHJpdGVTaGVldEZpbGUgKGxvYWRlciwga2V5LCB1cmwsIGZyYW1lQ29uZmlnLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICBJbWFnZUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZnJhbWVDb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLnR5cGUgPSAnc3ByaXRlc2hlZXQnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5TcHJpdGVTaGVldEZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FjaGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLmNhY2hlLmFkZFNwcml0ZVNoZWV0KHRoaXMua2V5LCB0aGlzLmRhdGEsIHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSh0ZXh0dXJlKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBTcHJpdGUgU2hlZXQgSW1hZ2UsIG9yIGFycmF5IG9mIFNwcml0ZSBTaGVldCBJbWFnZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFRoZSB0ZXJtICdTcHJpdGUgU2hlZXQnIGluIFBoYXNlciBtZWFucyBhIGZpeGVkLXNpemUgc2hlZXQuIFdoZXJlIGV2ZXJ5IGZyYW1lIGluIHRoZSBzaGVldCBpcyB0aGUgZXhhY3Qgc2FtZSBzaXplLFxyXG4gKiBhbmQgeW91IHJlZmVyZW5jZSB0aG9zZSBmcmFtZXMgdXNpbmcgbnVtYmVycywgbm90IGZyYW1lIG5hbWVzLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyBhIFRleHR1cmUgQXRsYXMsIHdoZXJlXHJcbiAqIHRoZSBmcmFtZXMgYXJlIHBhY2tlZCBpbiBhIHdheSB3aGVyZSB0aGV5IHRha2UgdXAgdGhlIGxlYXN0IGFtb3VudCBvZiBzcGFjZSwgYW5kIGFyZSByZWZlcmVuY2VkIGJ5IHRoZWlyIG5hbWVzLFxyXG4gKiBub3QgbnVtYmVycy4gU29tZSBhcnRpY2xlcyBhbmQgc29mdHdhcmUgdXNlIHRoZSB0ZXJtICdTcHJpdGUgU2hlZXQnIHRvIG1lYW4gVGV4dHVyZSBBdGxhcywgc28gcGxlYXNlIGJlIGF3YXJlIG9mXHJcbiAqIHdoYXQgc29ydCBvZiBmaWxlIHlvdSdyZSBhY3R1YWxseSB0cnlpbmcgdG8gbG9hZC5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnNwcml0ZXNoZWV0KCdib3QnLCAnaW1hZ2VzL3JvYm90LnBuZycsIHsgZnJhbWVXaWR0aDogMzIsIGZyYW1lSGVpZ2h0OiAzOCB9KTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogUGhhc2VyIGNhbiBsb2FkIGFsbCBjb21tb24gaW1hZ2UgdHlwZXM6IHBuZywganBnLCBnaWYgYW5kIGFueSBvdGhlciBmb3JtYXQgdGhlIGJyb3dzZXIgY2FuIG5hdGl2ZWx5IGhhbmRsZS5cclxuICogSWYgeW91IHRyeSB0byBsb2FkIGFuIGFuaW1hdGVkIGdpZiBvbmx5IHRoZSBmaXJzdCBmcmFtZSB3aWxsIGJlIHJlbmRlcmVkLiBCcm93c2VycyBkbyBub3QgbmF0aXZlbHkgc3VwcG9ydCBwbGF5YmFja1xyXG4gKiBvZiBhbmltYXRlZCBnaWZzIHRvIENhbnZhcyBlbGVtZW50cy5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ByaXRlc2hlZXQoe1xyXG4gKiAgICAga2V5OiAnYm90JyxcclxuICogICAgIHVybDogJ2ltYWdlcy9yb2JvdC5wbmcnLFxyXG4gKiAgICAgZnJhbWVDb25maWc6IHtcclxuICogICAgICAgICBmcmFtZVdpZHRoOiAzMixcclxuICogICAgICAgICBmcmFtZUhlaWdodDogMzgsXHJcbiAqICAgICAgICAgc3RhcnRGcmFtZTogMCxcclxuICogICAgICAgICBlbmRGcmFtZTogOFxyXG4gKiAgICAgfVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNwcml0ZVNoZWV0RmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIHVzZSBpdCBhcyBhIHRleHR1cmUgZm9yIGEgR2FtZSBPYmplY3QgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnNwcml0ZXNoZWV0KCdib3QnLCAnaW1hZ2VzL3JvYm90LnBuZycsIHsgZnJhbWVXaWR0aDogMzIsIGZyYW1lSGVpZ2h0OiAzOCB9KTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ2JvdCcsIDApO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYFBMQVlFUi5gIGFuZCB0aGUga2V5IHdhcyBgUnVubmluZ2AgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBQTEFZRVIuUnVubmluZ2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSBpbWFnZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4ucG5nXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLnBuZ2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFBoYXNlciBhbHNvIHN1cHBvcnRzIHRoZSBhdXRvbWF0aWMgbG9hZGluZyBvZiBhc3NvY2lhdGVkIG5vcm1hbCBtYXBzLiBJZiB5b3UgaGF2ZSBhIG5vcm1hbCBtYXAgdG8gZ28gd2l0aCB0aGlzIGltYWdlLFxyXG4gKiB0aGVuIHlvdSBjYW4gc3BlY2lmeSBpdCBieSBwcm92aWRpbmcgYW4gYXJyYXkgYXMgdGhlIGB1cmxgIHdoZXJlIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgbm9ybWFsIG1hcDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnNwcml0ZXNoZWV0KCdsb2dvJywgWyAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnLCAnaW1hZ2VzL0F0YXJpTG9nby1uLnBuZycgXSwgeyBmcmFtZVdpZHRoOiAyNTYsIGZyYW1lSGVpZ2h0OiA4MCB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIE9yLCBpZiB5b3UgYXJlIHVzaW5nIGEgY29uZmlnIG9iamVjdCB1c2UgdGhlIGBub3JtYWxNYXBgIHByb3BlcnR5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ByaXRlc2hlZXQoe1xyXG4gKiAgICAga2V5OiAnbG9nbycsXHJcbiAqICAgICB1cmw6ICdpbWFnZXMvQXRhcmlMb2dvLnBuZycsXHJcbiAqICAgICBub3JtYWxNYXA6ICdpbWFnZXMvQXRhcmlMb2dvLW4ucG5nJyxcclxuICogICAgIGZyYW1lQ29uZmlnOiB7XHJcbiAqICAgICAgICAgZnJhbWVXaWR0aDogMjU2LFxyXG4gKiAgICAgICAgIGZyYW1lSGVpZ2h0OiA4MFxyXG4gKiAgICAgfVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBub3JtYWwgbWFwIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zIGFzIHRoZSBpbWFnZSBmaWxlIHdpdGggcmVnYXJkIHRvIHRoZSBwYXRoLCBiYXNlVVJMLCBDT1JzIGFuZCBYSFIgU2V0dGluZ3MuXHJcbiAqIE5vcm1hbCBtYXBzIGFyZSBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICogXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU3ByaXRlIFNoZWV0IEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3Nwcml0ZXNoZWV0XHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TcHJpdGVTaGVldEZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU3ByaXRlU2hlZXRGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSW1hZ2VGcmFtZUNvbmZpZ30gW2ZyYW1lQ29uZmlnXSAtIFRoZSBmcmFtZSBjb25maWd1cmF0aW9uIG9iamVjdC4gQXQgYSBtaW5pbXVtIGl0IHNob3VsZCBoYXZlIGEgYGZyYW1lV2lkdGhgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3Rlcignc3ByaXRlc2hlZXQnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIGZyYW1lQ29uZmlnLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFNwcml0ZVNoZWV0RmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBTcHJpdGVTaGVldEZpbGUodGhpcywga2V5LCB1cmwsIGZyYW1lQ29uZmlnLCB4aHJTZXR0aW5ncykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlU2hlZXRGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/SpriteSheetFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/TextFile.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/TextFile.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Text File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#text method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#text.\r\n *\r\n * @class TextFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TextFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar TextFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function TextFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'txt';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'text',\r\n            cache: loader.cacheManager.text,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.TextFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = this.xhrLoader.responseText;\r\n\r\n        this.onProcessComplete();\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Text file, or array of Text files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.text('story', 'files/IntroStory.txt');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Text Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Text Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Text Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.text({\r\n *     key: 'story',\r\n *     url: 'files/IntroStory.txt'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.TextFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.text('story', 'files/IntroStory.txt');\r\n * // and later in your game ...\r\n * var data = this.cache.text.get('story');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the text from the Text Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"story\"\r\n * and no URL is given then the Loader will set the URL to be \"story.txt\". It will always add `.txt` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Text File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#text\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TextFileConfig|Phaser.Types.Loader.FileTypes.TextFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('text', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new TextFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new TextFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = TextFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1RleHRGaWxlLmpzPzZhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsc0RBQXNEO0FBQ2pFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvVGV4dEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgVGV4dCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdGV4dCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdGV4dC5cclxuICpcclxuICogQGNsYXNzIFRleHRGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlRleHRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnR4dGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnR4dFwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqL1xyXG52YXIgVGV4dEZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUZXh0RmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICd0eHQnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLnRleHQsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3NcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5UZXh0RmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0O1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgVGV4dCBmaWxlLCBvciBhcnJheSBvZiBUZXh0IGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC50ZXh0KCdzdG9yeScsICdmaWxlcy9JbnRyb1N0b3J5LnR4dCcpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dCBDYWNoZSB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgVGV4dCBDYWNoZS5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHQgQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQudGV4dCh7XHJcbiAqICAgICBrZXk6ICdzdG9yeScsXHJcbiAqICAgICB1cmw6ICdmaWxlcy9JbnRyb1N0b3J5LnR4dCdcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UZXh0RmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIGFjY2VzcyBpdCBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC50ZXh0KCdzdG9yeScsICdmaWxlcy9JbnRyb1N0b3J5LnR4dCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUudGV4dC5nZXQoJ3N0b3J5Jyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTEVWRUwxLmAgYW5kIHRoZSBrZXkgd2FzIGBTdG9yeWAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBMRVZFTDEuU3RvcnlgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSBUZXh0IENhY2hlLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcInN0b3J5XCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcInN0b3J5LnR4dFwiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC50eHRgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRleHQgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdGV4dFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGV4dEZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGV4dEZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi50eHRgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi50eHRcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3RleHQnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgVGV4dEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgVGV4dEZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0RmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/TextFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/TilemapCSVFile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/TilemapCSVFile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar TILEMAP_FORMATS = __webpack_require__(/*! ../../tilemaps/Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Tilemap CSV File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#tilemapCSV method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#tilemapCSV.\r\n *\r\n * @class TilemapCSVFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapCSVFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.csv`, i.e. if `key` was \"alien\" then the URL will be \"alien.csv\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar TilemapCSVFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function TilemapCSVFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'csv';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'tilemapCSV',\r\n            cache: loader.cacheManager.tilemap,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n\r\n        this.tilemapFormat = TILEMAP_FORMATS.CSV;\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.TilemapCSVFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = this.xhrLoader.responseText;\r\n\r\n        this.onProcessComplete();\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.TilemapCSVFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var tiledata = { format: this.tilemapFormat, data: this.data };\r\n\r\n        this.cache.add(this.key, tiledata);\r\n\r\n        this.pendingDestroy(tiledata);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a CSV Tilemap file, or array of CSV files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.tilemapCSV('level1', 'maps/Level1.csv');\r\n * }\r\n * ```\r\n *\r\n * Tilemap CSV data can be created in a text editor, or a 3rd party app that exports as CSV.\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Tilemap Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Tilemap Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Text Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.tilemapCSV({\r\n *     key: 'level1',\r\n *     url: 'maps/Level1.csv'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.TilemapCSVFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.tilemapCSV('level1', 'maps/Level1.csv');\r\n * // and later in your game ...\r\n * var map = this.make.tilemap({ key: 'level1' });\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the text from the Tilemap Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"level\"\r\n * and no URL is given then the Loader will set the URL to be \"level.csv\". It will always add `.csv` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Tilemap CSV File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#tilemapCSV\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapCSVFileConfig|Phaser.Types.Loader.FileTypes.TilemapCSVFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.csv`, i.e. if `key` was \"alien\" then the URL will be \"alien.csv\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('tilemapCSV', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new TilemapCSVFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new TilemapCSVFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = TilemapCSVFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1RpbGVtYXBDU1ZGaWxlLmpzPzk3ZjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxzQkFBc0IsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpSEFBaUg7QUFDNUgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvVGlsZW1hcENTVkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgVElMRU1BUF9GT1JNQVRTID0gcmVxdWlyZSgnLi4vLi4vdGlsZW1hcHMvRm9ybWF0cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgVGlsZW1hcCBDU1YgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RpbGVtYXBDU1YgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RpbGVtYXBDU1YuXHJcbiAqXHJcbiAqIEBjbGFzcyBUaWxlbWFwQ1NWRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwQ1NWRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5jc3ZgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5jc3ZcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIFRpbGVtYXBDU1ZGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVGlsZW1hcENTVkZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnY3N2JztcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ3RpbGVtYXBDU1YnLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLmNhY2hlTWFuYWdlci50aWxlbWFwLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMudGlsZW1hcEZvcm1hdCA9IFRJTEVNQVBfRk9STUFUUy5DU1Y7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcENTVkZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwQ1NWRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZWRhdGEgPSB7IGZvcm1hdDogdGhpcy50aWxlbWFwRm9ybWF0LCBkYXRhOiB0aGlzLmRhdGEgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWNoZS5hZGQodGhpcy5rZXksIHRpbGVkYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSh0aWxlZGF0YSk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgQ1NWIFRpbGVtYXAgZmlsZSwgb3IgYXJyYXkgb2YgQ1NWIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC50aWxlbWFwQ1NWKCdsZXZlbDEnLCAnbWFwcy9MZXZlbDEuY3N2Jyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRpbGVtYXAgQ1NWIGRhdGEgY2FuIGJlIGNyZWF0ZWQgaW4gYSB0ZXh0IGVkaXRvciwgb3IgYSAzcmQgcGFydHkgYXBwIHRoYXQgZXhwb3J0cyBhcyBDU1YuXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUaWxlbWFwIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUaWxlbWFwIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgVGV4dCBDYWNoZSBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC50aWxlbWFwQ1NWKHtcclxuICogICAgIGtleTogJ2xldmVsMScsXHJcbiAqICAgICB1cmw6ICdtYXBzL0xldmVsMS5jc3YnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcENTVkZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQudGlsZW1hcENTVignbGV2ZWwxJywgJ21hcHMvTGV2ZWwxLmNzdicpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgbWFwID0gdGhpcy5tYWtlLnRpbGVtYXAoeyBrZXk6ICdsZXZlbDEnIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgU3RvcnlgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTEVWRUwxLlN0b3J5YCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIHRleHQgZnJvbSB0aGUgVGlsZW1hcCBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJsZXZlbFwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJsZXZlbC5jc3ZcIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuY3N2YCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBUaWxlbWFwIENTViBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0aWxlbWFwQ1NWXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwQ1NWRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwQ1NWRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmNzdmAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmNzdlwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcigndGlsZW1hcENTVicsIGZ1bmN0aW9uIChrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbntcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgaXQncyBhbiBhcnJheSBpdCBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgT2JqZWN0cywgc28gd2UgZ2V0IGV2ZXJ5dGhpbmcgb3V0IG9mIHRoZSAna2V5JyBvYmplY3RcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBUaWxlbWFwQ1NWRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBUaWxlbWFwQ1NWRmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVtYXBDU1ZGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/TilemapCSVFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/TilemapImpactFile.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/TilemapImpactFile.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar TILEMAP_FORMATS = __webpack_require__(/*! ../../tilemaps/Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Impact.js Tilemap JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#tilemapImpact method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#tilemapImpact.\r\n *\r\n * @class TilemapImpactFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapImpactFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar TilemapImpactFile = new Class({\r\n\r\n    Extends: JSONFile,\r\n\r\n    initialize:\r\n\r\n    function TilemapImpactFile (loader, key, url, xhrSettings)\r\n    {\r\n        JSONFile.call(this, loader, key, url, xhrSettings);\r\n\r\n        this.type = 'tilemapJSON';\r\n\r\n        this.cache = loader.cacheManager.tilemap;\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.TilemapImpactFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var tiledata = { format: TILEMAP_FORMATS.WELTMEISTER, data: this.data };\r\n\r\n        this.cache.add(this.key, tiledata);\r\n\r\n        this.pendingDestroy(tiledata);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an Impact.js Tilemap file, or array of map files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.tilemapImpact('level1', 'maps/Level1.json');\r\n * }\r\n * ```\r\n *\r\n * Impact Tilemap data is created the Impact.js Map Editor called Weltmeister.\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Tilemap Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Tilemap Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Text Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.tilemapImpact({\r\n *     key: 'level1',\r\n *     url: 'maps/Level1.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.TilemapImpactFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.tilemapImpact('level1', 'maps/Level1.json');\r\n * // and later in your game ...\r\n * var map = this.make.tilemap({ key: 'level1' });\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the text from the Tilemap Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"level\"\r\n * and no URL is given then the Loader will set the URL to be \"level.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Tilemap Impact File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#tilemapImpact\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapImpactFileConfig|Phaser.Types.Loader.FileTypes.TilemapImpactFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('tilemapImpact', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new TilemapImpactFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new TilemapImpactFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = TilemapImpactFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1RpbGVtYXBJbXBhY3RGaWxlLmpzP2U2ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyw2RUFBZTtBQUN0QyxzQkFBc0IsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLCtEQUErRDtBQUMxRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUhBQXVIO0FBQ2xJLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1RpbGVtYXBJbXBhY3RGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEpTT05GaWxlID0gcmVxdWlyZSgnLi9KU09ORmlsZS5qcycpO1xyXG52YXIgVElMRU1BUF9GT1JNQVRTID0gcmVxdWlyZSgnLi4vLi4vdGlsZW1hcHMvRm9ybWF0cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgSW1wYWN0LmpzIFRpbGVtYXAgSlNPTiBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdGlsZW1hcEltcGFjdCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdGlsZW1hcEltcGFjdC5cclxuICpcclxuICogQGNsYXNzIFRpbGVtYXBJbXBhY3RGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlRpbGVtYXBJbXBhY3RGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBUaWxlbWFwSW1wYWN0RmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogSlNPTkZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlbWFwSW1wYWN0RmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgSlNPTkZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIHRoaXMudHlwZSA9ICd0aWxlbWFwSlNPTic7XHJcblxyXG4gICAgICAgIHRoaXMuY2FjaGUgPSBsb2FkZXIuY2FjaGVNYW5hZ2VyLnRpbGVtYXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLlRpbGVtYXBJbXBhY3RGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0aWxlZGF0YSA9IHsgZm9ybWF0OiBUSUxFTUFQX0ZPUk1BVFMuV0VMVE1FSVNURVIsIGRhdGE6IHRoaXMuZGF0YSB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhY2hlLmFkZCh0aGlzLmtleSwgdGlsZWRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95KHRpbGVkYXRhKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gSW1wYWN0LmpzIFRpbGVtYXAgZmlsZSwgb3IgYXJyYXkgb2YgbWFwIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC50aWxlbWFwSW1wYWN0KCdsZXZlbDEnLCAnbWFwcy9MZXZlbDEuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJbXBhY3QgVGlsZW1hcCBkYXRhIGlzIGNyZWF0ZWQgdGhlIEltcGFjdC5qcyBNYXAgRWRpdG9yIGNhbGxlZCBXZWx0bWVpc3Rlci5cclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKlxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIFRpbGVtYXAgQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRpbGVtYXAgQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0IENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnRpbGVtYXBJbXBhY3Qoe1xyXG4gKiAgICAga2V5OiAnbGV2ZWwxJyxcclxuICogICAgIHVybDogJ21hcHMvTGV2ZWwxLmpzb24nXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcEltcGFjdEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQudGlsZW1hcEltcGFjdCgnbGV2ZWwxJywgJ21hcHMvTGV2ZWwxLmpzb24nKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdmFyIG1hcCA9IHRoaXMubWFrZS50aWxlbWFwKHsga2V5OiAnbGV2ZWwxJyB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFN0b3J5YCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5TdG9yeWAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIFRpbGVtYXAgQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwibGV2ZWxcIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwibGV2ZWwuanNvblwiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5qc29uYCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBUaWxlbWFwIEltcGFjdCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0aWxlbWFwSW1wYWN0XHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwSW1wYWN0RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwSW1wYWN0RmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCd0aWxlbWFwSW1wYWN0JywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFRpbGVtYXBJbXBhY3RGaWxlKHRoaXMsIGtleVtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFRpbGVtYXBJbXBhY3RGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGlsZW1hcEltcGFjdEZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/TilemapImpactFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/TilemapJSONFile.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/TilemapJSONFile.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar TILEMAP_FORMATS = __webpack_require__(/*! ../../tilemaps/Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Tiled Tilemap JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#tilemapTiledJSON method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#tilemapTiledJSON.\r\n *\r\n * @class TilemapJSONFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapJSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar TilemapJSONFile = new Class({\r\n\r\n    Extends: JSONFile,\r\n\r\n    initialize:\r\n\r\n    function TilemapJSONFile (loader, key, url, xhrSettings)\r\n    {\r\n        JSONFile.call(this, loader, key, url, xhrSettings);\r\n\r\n        this.type = 'tilemapJSON';\r\n\r\n        this.cache = loader.cacheManager.tilemap;\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.TilemapJSONFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        var tiledata = { format: TILEMAP_FORMATS.TILED_JSON, data: this.data };\r\n\r\n        this.cache.add(this.key, tiledata);\r\n\r\n        this.pendingDestroy(tiledata);\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Tiled JSON Tilemap file, or array of map files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.tilemapTiledJSON('level1', 'maps/Level1.json');\r\n * }\r\n * ```\r\n *\r\n * The Tilemap data is created using the Tiled Map Editor and selecting JSON as the export format.\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Tilemap Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Tilemap Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Text Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.tilemapTiledJSON({\r\n *     key: 'level1',\r\n *     url: 'maps/Level1.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.TilemapJSONFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.tilemapTiledJSON('level1', 'maps/Level1.json');\r\n * // and later in your game ...\r\n * var map = this.make.tilemap({ key: 'level1' });\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the text from the Tilemap Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"level\"\r\n * and no URL is given then the Loader will set the URL to be \"level.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Tilemap JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#tilemapTiledJSON\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.TilemapJSONFileConfig|Phaser.Types.Loader.FileTypes.TilemapJSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('tilemapTiledJSON', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new TilemapJSONFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new TilemapJSONFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = TilemapJSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1RpbGVtYXBKU09ORmlsZS5qcz83NGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsNkVBQWU7QUFDdEMsc0JBQXNCLG1CQUFPLENBQUMsNkVBQXdCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyw2REFBNkQ7QUFDeEUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4Qjs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1IQUFtSDtBQUM5SCxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9UaWxlbWFwSlNPTkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgSlNPTkZpbGUgPSByZXF1aXJlKCcuL0pTT05GaWxlLmpzJyk7XHJcbnZhciBUSUxFTUFQX0ZPUk1BVFMgPSByZXF1aXJlKCcuLi8uLi90aWxlbWFwcy9Gb3JtYXRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBUaWxlZCBUaWxlbWFwIEpTT04gRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RpbGVtYXBUaWxlZEpTT04gbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RpbGVtYXBUaWxlZEpTT04uXHJcbiAqXHJcbiAqIEBjbGFzcyBUaWxlbWFwSlNPTkZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5GaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcEpTT05GaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBUaWxlbWFwSlNPTkZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEpTT05GaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVGlsZW1hcEpTT05GaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICBKU09ORmlsZS5jYWxsKHRoaXMsIGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy50eXBlID0gJ3RpbGVtYXBKU09OJztcclxuXHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IGxvYWRlci5jYWNoZU1hbmFnZXIudGlsZW1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcEpTT05GaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0aWxlZGF0YSA9IHsgZm9ybWF0OiBUSUxFTUFQX0ZPUk1BVFMuVElMRURfSlNPTiwgZGF0YTogdGhpcy5kYXRhIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FjaGUuYWRkKHRoaXMua2V5LCB0aWxlZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kodGlsZWRhdGEpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhIFRpbGVkIEpTT04gVGlsZW1hcCBmaWxlLCBvciBhcnJheSBvZiBtYXAgZmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnRpbGVtYXBUaWxlZEpTT04oJ2xldmVsMScsICdtYXBzL0xldmVsMS5qc29uJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBUaWxlbWFwIGRhdGEgaXMgY3JlYXRlZCB1c2luZyB0aGUgVGlsZWQgTWFwIEVkaXRvciBhbmQgc2VsZWN0aW5nIEpTT04gYXMgdGhlIGV4cG9ydCBmb3JtYXQuXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUaWxlbWFwIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUaWxlbWFwIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgVGV4dCBDYWNoZSBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC50aWxlbWFwVGlsZWRKU09OKHtcclxuICogICAgIGtleTogJ2xldmVsMScsXHJcbiAqICAgICB1cmw6ICdtYXBzL0xldmVsMS5qc29uJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlRpbGVtYXBKU09ORmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIGFjY2VzcyBpdCBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC50aWxlbWFwVGlsZWRKU09OKCdsZXZlbDEnLCAnbWFwcy9MZXZlbDEuanNvbicpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgbWFwID0gdGhpcy5tYWtlLnRpbGVtYXAoeyBrZXk6ICdsZXZlbDEnIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgU3RvcnlgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTEVWRUwxLlN0b3J5YCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIHRleHQgZnJvbSB0aGUgVGlsZW1hcCBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJsZXZlbFwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJsZXZlbC5qc29uXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmpzb25gIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRpbGVtYXAgSlNPTiBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0aWxlbWFwVGlsZWRKU09OXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5UaWxlbWFwSlNPTkZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVGlsZW1hcEpTT05GaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uanNvbmAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzb25cIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3RpbGVtYXBUaWxlZEpTT04nLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgVGlsZW1hcEpTT05GaWxlKHRoaXMsIGtleVtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFRpbGVtYXBKU09ORmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVtYXBKU09ORmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/TilemapJSONFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/UnityAtlasFile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/UnityAtlasFile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar TextFile = __webpack_require__(/*! ./TextFile.js */ \"./node_modules/phaser/src/loader/filetypes/TextFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single text file based Unity Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#unityAtlas method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#unityAtlas.\r\n *\r\n * @class UnityAtlasFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.UnityAtlasFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas data file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas data file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar UnityAtlasFile = new Class({\r\n\r\n    Extends: MultiFile,\r\n\r\n    initialize:\r\n\r\n    function UnityAtlasFile (loader, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n    {\r\n        var image;\r\n        var data;\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n\r\n            image = new ImageFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'textureURL'),\r\n                extension: GetFastValue(config, 'textureExtension', 'png'),\r\n                normalMap: GetFastValue(config, 'normalMap'),\r\n                xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n            });\r\n\r\n            data = new TextFile(loader, {\r\n                key: key,\r\n                url: GetFastValue(config, 'atlasURL'),\r\n                extension: GetFastValue(config, 'atlasExtension', 'txt'),\r\n                xhrSettings: GetFastValue(config, 'atlasXhrSettings')\r\n            });\r\n        }\r\n        else\r\n        {\r\n            image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n            data = new TextFile(loader, key, atlasURL, atlasXhrSettings);\r\n        }\r\n\r\n        if (image.linkFile)\r\n        {\r\n            //  Image has a normal map\r\n            MultiFile.call(this, loader, 'unityatlas', key, [ image, data, image.linkFile ]);\r\n        }\r\n        else\r\n        {\r\n            MultiFile.call(this, loader, 'unityatlas', key, [ image, data ]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds this file to its target cache upon successful loading and processing.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.UnityAtlasFile#addToCache\r\n     * @since 3.7.0\r\n     */\r\n    addToCache: function ()\r\n    {\r\n        if (this.isReadyToProcess())\r\n        {\r\n            var image = this.files[0];\r\n            var text = this.files[1];\r\n            var normalMap = (this.files[2]) ? this.files[2].data : null;\r\n\r\n            this.loader.textureManager.addUnityAtlas(image.key, image.data, text.data, normalMap);\r\n\r\n            text.addToCache();\r\n\r\n            this.complete = true;\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Unity YAML based Texture Atlas, or array of atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.unityAtlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.txt');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in a YAML formatted text file as exported from Unity.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.unityAtlas({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     atlasURL: 'images/MainMenu.txt'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.UnityAtlasFileConfig` for more details.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.unityAtlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'mainmenu', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.unityAtlas('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.txt');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.unityAtlas({\r\n *     key: 'mainmenu',\r\n *     textureURL: 'images/MainMenu.png',\r\n *     normalMap: 'images/MainMenu-n.png',\r\n *     atlasURL: 'images/MainMenu.txt'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Unity Atlas File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#unityAtlas\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.UnityAtlasFileConfig|Phaser.Types.Loader.FileTypes.UnityAtlasFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas data file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas data file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('unityAtlas', function (key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n{\r\n    var multifile;\r\n\r\n    //  Supports an Object file definition in the key argument\r\n    //  Or an array of objects in the key argument\r\n    //  Or a single entry where all arguments have been defined\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            multifile = new UnityAtlasFile(this, key[i]);\r\n\r\n            this.addFile(multifile.files);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        multifile = new UnityAtlasFile(this, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings);\r\n\r\n        this.addFile(multifile.files);\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = UnityAtlasFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1VuaXR5QXRsYXNGaWxlLmpzPzM2MmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsNkVBQWU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpSEFBaUg7QUFDNUgsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9Vbml0eUF0bGFzRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBNdWx0aUZpbGUgPSByZXF1aXJlKCcuLi9NdWx0aUZpbGUuanMnKTtcclxudmFyIFRleHRGaWxlID0gcmVxdWlyZSgnLi9UZXh0RmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgdGV4dCBmaWxlIGJhc2VkIFVuaXR5IFRleHR1cmUgQXRsYXMgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3VuaXR5QXRsYXMgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN1bml0eUF0bGFzLlxyXG4gKlxyXG4gKiBAY2xhc3MgVW5pdHlBdGxhc0ZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5Vbml0eUF0bGFzRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt0ZXh0dXJlVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBpbWFnZSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnBuZ2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnBuZ1wiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBhdGxhcyBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4udHh0YCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4udHh0XCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBpbWFnZSBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIGRhdGEgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICovXHJcbnZhciBVbml0eUF0bGFzRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogTXVsdGlGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVW5pdHlBdGxhc0ZpbGUgKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbWFnZTtcclxuICAgICAgICB2YXIgZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcblxyXG4gICAgICAgICAgICBpbWFnZSA9IG5ldyBJbWFnZUZpbGUobG9hZGVyLCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgICAgIHVybDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVFeHRlbnNpb24nLCAncG5nJyksXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IEdldEZhc3RWYWx1ZShjb25maWcsICdub3JtYWxNYXAnKSxcclxuICAgICAgICAgICAgICAgIHhoclNldHRpbmdzOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVhoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBkYXRhID0gbmV3IFRleHRGaWxlKGxvYWRlciwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgICAgICB1cmw6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1VSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXRsYXNFeHRlbnNpb24nLCAndHh0JyksXHJcbiAgICAgICAgICAgICAgICB4aHJTZXR0aW5nczogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F0bGFzWGhyU2V0dGluZ3MnKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaW1hZ2UgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICBkYXRhID0gbmV3IFRleHRGaWxlKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgYXRsYXNYaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW1hZ2UubGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSW1hZ2UgaGFzIGEgbm9ybWFsIG1hcFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICd1bml0eWF0bGFzJywga2V5LCBbIGltYWdlLCBkYXRhLCBpbWFnZS5saW5rRmlsZSBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAndW5pdHlhdGxhcycsIGtleSwgWyBpbWFnZSwgZGF0YSBdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLlVuaXR5QXRsYXNGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5maWxlc1sxXTtcclxuICAgICAgICAgICAgdmFyIG5vcm1hbE1hcCA9ICh0aGlzLmZpbGVzWzJdKSA/IHRoaXMuZmlsZXNbMl0uZGF0YSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlci50ZXh0dXJlTWFuYWdlci5hZGRVbml0eUF0bGFzKGltYWdlLmtleSwgaW1hZ2UuZGF0YSwgdGV4dC5kYXRhLCBub3JtYWxNYXApO1xyXG5cclxuICAgICAgICAgICAgdGV4dC5hZGRUb0NhY2hlKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgVW5pdHkgWUFNTCBiYXNlZCBUZXh0dXJlIEF0bGFzLCBvciBhcnJheSBvZiBhdGxhc2VzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQudW5pdHlBdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUudHh0Jyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIElmIHlvdSBjYWxsIHRoaXMgZnJvbSBvdXRzaWRlIG9mIGBwcmVsb2FkYCB0aGVuIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHN0YXJ0aW5nIHRoZSBMb2FkZXIgYWZ0ZXJ3YXJkcyBhbmQgbW9uaXRvcmluZ1xyXG4gKiBpdHMgZXZlbnRzIHRvIGtub3cgd2hlbiBpdCdzIHNhZmUgdG8gdXNlIHRoZSBhc3NldC4gUGxlYXNlIHNlZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4gY2xhc3MgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogUGhhc2VyIGV4cGVjdHMgdGhlIGF0bGFzIGRhdGEgdG8gYmUgcHJvdmlkZWQgaW4gYSBZQU1MIGZvcm1hdHRlZCB0ZXh0IGZpbGUgYXMgZXhwb3J0ZWQgZnJvbSBVbml0eS5cclxuICogXHJcbiAqIFBoYXNlciBjYW4gbG9hZCBhbGwgY29tbW9uIGltYWdlIHR5cGVzOiBwbmcsIGpwZywgZ2lmIGFuZCBhbnkgb3RoZXIgZm9ybWF0IHRoZSBicm93c2VyIGNhbiBuYXRpdmVseSBoYW5kbGUuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnVuaXR5QXRsYXMoe1xyXG4gKiAgICAga2V5OiAnbWFpbm1lbnUnLFxyXG4gKiAgICAgdGV4dHVyZVVSTDogJ2ltYWdlcy9NYWluTWVudS5wbmcnLFxyXG4gKiAgICAgYXRsYXNVUkw6ICdpbWFnZXMvTWFpbk1lbnUudHh0J1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlVuaXR5QXRsYXNGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBhdGxhcyBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIHVzZSBmcmFtZXMgZnJvbSBpdCBhcyB0ZXh0dXJlcyBmb3IgYSBHYW1lIE9iamVjdCBieSByZWZlcmVuY2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQudW5pdHlBdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUuanNvbicpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLmFkZC5pbWFnZSh4LCB5LCAnbWFpbm1lbnUnLCAnYmFja2dyb3VuZCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZyYW1lcyB3aXRoaW4gYW4gYXRsYXMgcGxlYXNlIGNvbnN1bHQgeW91ciBUZXh0dXJlIEF0bGFzIHNvZnR3YXJlLlxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBQaGFzZXIgYWxzbyBzdXBwb3J0cyB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgYXNzb2NpYXRlZCBub3JtYWwgbWFwcy4gSWYgeW91IGhhdmUgYSBub3JtYWwgbWFwIHRvIGdvIHdpdGggdGhpcyBpbWFnZSxcclxuICogdGhlbiB5b3UgY2FuIHNwZWNpZnkgaXQgYnkgcHJvdmlkaW5nIGFuIGFycmF5IGFzIHRoZSBgdXJsYCB3aGVyZSB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIG5vcm1hbCBtYXA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC51bml0eUF0bGFzKCdtYWlubWVudScsIFsgJ2ltYWdlcy9NYWluTWVudS5wbmcnLCAnaW1hZ2VzL01haW5NZW51LW4ucG5nJyBdLCAnaW1hZ2VzL01haW5NZW51LnR4dCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogT3IsIGlmIHlvdSBhcmUgdXNpbmcgYSBjb25maWcgb2JqZWN0IHVzZSB0aGUgYG5vcm1hbE1hcGAgcHJvcGVydHk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC51bml0eUF0bGFzKHtcclxuICogICAgIGtleTogJ21haW5tZW51JyxcclxuICogICAgIHRleHR1cmVVUkw6ICdpbWFnZXMvTWFpbk1lbnUucG5nJyxcclxuICogICAgIG5vcm1hbE1hcDogJ2ltYWdlcy9NYWluTWVudS1uLnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS50eHQnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlIG5vcm1hbCBtYXAgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgdGhlIGltYWdlIGZpbGUgd2l0aCByZWdhcmQgdG8gdGhlIHBhdGgsIGJhc2VVUkwsIENPUnMgYW5kIFhIUiBTZXR0aW5ncy5cclxuICogTm9ybWFsIG1hcHMgYXJlIGEgV2ViR0wgb25seSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFVuaXR5IEF0bGFzIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3VuaXR5QXRsYXNcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlVuaXR5QXRsYXNGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlVuaXR5QXRsYXNGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdGV4dHVyZVVSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgaW1hZ2UgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtzdHJpbmd9IFthdGxhc1VSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgYXRsYXMgZGF0YSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnR4dGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnR4dFwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt0ZXh0dXJlWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMgaW1hZ2UgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXRsYXNYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBkYXRhIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcigndW5pdHlBdGxhcycsIGZ1bmN0aW9uIChrZXksIHRleHR1cmVVUkwsIGF0bGFzVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGF0bGFzWGhyU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBtdWx0aWZpbGU7XHJcblxyXG4gICAgLy8gIFN1cHBvcnRzIGFuIE9iamVjdCBmaWxlIGRlZmluaXRpb24gaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGEgc2luZ2xlIGVudHJ5IHdoZXJlIGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIGRlZmluZWRcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbXVsdGlmaWxlID0gbmV3IFVuaXR5QXRsYXNGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IFVuaXR5QXRsYXNGaWxlKHRoaXMsIGtleSwgdGV4dHVyZVVSTCwgYXRsYXNVUkwsIHRleHR1cmVYaHJTZXR0aW5ncywgYXRsYXNYaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkRmlsZShtdWx0aWZpbGUuZmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVW5pdHlBdGxhc0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/UnityAtlasFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/VideoFile.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/VideoFile.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetURL = __webpack_require__(/*! ../GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Video File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#video method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#video.\r\n *\r\n * @class VideoFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.20.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.VideoFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {any} [urlConfig] - The absolute or relative URL to load this file from in a config object.\r\n * @param {string} [loadEvent] - The load event to listen for when _not_ loading as a blob. Either 'loadeddata', 'canplay' or 'canplaythrough'.\r\n * @param {boolean} [asBlob] - Load the video as a data blob, or via the Video element?\r\n * @param {boolean} [noAudio] - Does the video have an audio track? If not you can enable auto-playing on it.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar VideoFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    //  URL is an object created by VideoFile.getVideoURL\r\n    function VideoFile (loader, key, urlConfig, loadEvent, asBlob, noAudio, xhrSettings)\r\n    {\r\n        if (loadEvent === undefined) { loadEvent = 'loadeddata'; }\r\n        if (asBlob === undefined) { asBlob = false; }\r\n        if (noAudio === undefined) { noAudio = false; }\r\n\r\n        if (loadEvent !== 'loadeddata' && loadEvent !== 'canplay' && loadEvent !== 'canplaythrough')\r\n        {\r\n            loadEvent = 'loadeddata';\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'video',\r\n            cache: loader.cacheManager.video,\r\n            extension: urlConfig.type,\r\n            responseType: 'blob',\r\n            key: key,\r\n            url: urlConfig.url,\r\n            xhrSettings: xhrSettings,\r\n            config: {\r\n                loadEvent: loadEvent,\r\n                asBlob: asBlob,\r\n                noAudio: noAudio\r\n            }\r\n        };\r\n\r\n        this.onLoadCallback = this.onVideoLoadHandler.bind(this);\r\n        this.onErrorCallback = this.onVideoErrorHandler.bind(this);\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.VideoFile#onProcess\r\n     * @since 3.20.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        if (!this.config.asBlob)\r\n        {\r\n            this.onProcessComplete();\r\n\r\n            return;\r\n        }\r\n\r\n        //  Load Video as blob\r\n\r\n        var video = this.createVideoElement();\r\n\r\n        this.data = video;\r\n\r\n        var _this = this;\r\n\r\n        this.data.onloadeddata = function ()\r\n        {\r\n            _this.onProcessComplete();\r\n        };\r\n\r\n        this.data.onerror = function ()\r\n        {\r\n            File.revokeObjectURL(_this.data);\r\n\r\n            _this.onProcessError();\r\n        };\r\n\r\n        File.createObjectURL(video, this.xhrLoader.response, '');\r\n\r\n        video.load();\r\n    },\r\n\r\n    /**\r\n     * Creates a Video Element within the DOM.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.VideoFile#createVideoElement\r\n     * @private\r\n     * @since 3.20.0\r\n     * \r\n     * @return {HTMLVideoElement} The newly created Video element.\r\n     */\r\n    createVideoElement: function ()\r\n    {\r\n        var video = document.createElement('video');\r\n    \r\n        video.controls = false;\r\n        video.crossOrigin = this.loader.crossOrigin;\r\n\r\n        if (this.config.noAudio)\r\n        {\r\n            video.muted = true;\r\n            video.defaultMuted = true;\r\n\r\n            video.setAttribute('autoplay', 'autoplay');\r\n        }\r\n\r\n        video.setAttribute('playsinline', 'playsinline');\r\n        video.setAttribute('preload', 'auto');\r\n\r\n        return video;\r\n    },\r\n\r\n    /**\r\n     * Internal load event callback.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.VideoFile#onVideoLoadHandler\r\n     * @private\r\n     * @since 3.20.0\r\n     *\r\n     * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this load.\r\n     */\r\n    onVideoLoadHandler: function (event)\r\n    {\r\n        var video = event.target;\r\n\r\n        video.removeEventListener(this.config.loadEvent, this.onLoadCallback, true);\r\n        video.removeEventListener('error', this.onErrorCallback, true);\r\n\r\n        this.data = video;\r\n\r\n        this.resetXHR();\r\n\r\n        this.loader.nextFile(this, true);\r\n    },\r\n\r\n    /**\r\n     * Internal load error event callback.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.VideoFile#onVideoErrorHandler\r\n     * @private\r\n     * @since 3.20.0\r\n     *\r\n     * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this load.\r\n     */\r\n    onVideoErrorHandler: function (event)\r\n    {\r\n        var video = event.target;\r\n\r\n        if (video)\r\n        {\r\n            video.removeEventListener(this.config.loadEvent, this.onLoadCallback, true);\r\n            video.removeEventListener('error', this.onErrorCallback, true);\r\n        }\r\n\r\n        this.resetXHR();\r\n\r\n        this.loader.nextFile(this, false);\r\n    },\r\n\r\n    /**\r\n     * Called by the Loader, starts the actual file downloading.\r\n     * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\r\n     * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.VideoFile#load\r\n     * @since 3.20.0\r\n     */\r\n    load: function ()\r\n    {\r\n        var loadEvent = this.config.loadEvent;\r\n\r\n        if (this.config.asBlob)\r\n        {\r\n            File.prototype.load.call(this);\r\n        }\r\n        else\r\n        {\r\n            this.percentComplete = 0;\r\n\r\n            var video = this.createVideoElement();\r\n\r\n            video.addEventListener(loadEvent, this.onLoadCallback, true);\r\n            video.addEventListener('error', this.onErrorCallback, true);\r\n\r\n            video.src = GetURL(this, this.loader.baseURL);\r\n\r\n            video.load();\r\n        }\r\n    }\r\n\r\n});\r\n\r\nVideoFile.create = function (loader, key, urls, loadEvent, asBlob, noAudio, xhrSettings)\r\n{\r\n    var game = loader.systems.game;\r\n\r\n    //  url may be inside key, which may be an object\r\n    if (IsPlainObject(key))\r\n    {\r\n        urls = GetFastValue(key, 'url', []);\r\n        loadEvent = GetFastValue(key, 'loadEvent', 'loadeddata');\r\n        asBlob = GetFastValue(key, 'asBlob', false);\r\n        noAudio = GetFastValue(key, 'noAudio', false);\r\n        xhrSettings = GetFastValue(key, 'xhrSettings');\r\n    }\r\n\r\n    var urlConfig = VideoFile.getVideoURL(game, urls);\r\n\r\n    if (urlConfig)\r\n    {\r\n        return new VideoFile(loader, key, urlConfig, loadEvent, asBlob, noAudio, xhrSettings);\r\n    }\r\n};\r\n\r\nVideoFile.getVideoURL = function (game, urls)\r\n{\r\n    if (!Array.isArray(urls))\r\n    {\r\n        urls = [ urls ];\r\n    }\r\n\r\n    for (var i = 0; i < urls.length; i++)\r\n    {\r\n        var url = GetFastValue(urls[i], 'url', urls[i]);\r\n\r\n        if (url.indexOf('blob:') === 0)\r\n        {\r\n            return url;\r\n        }\r\n\r\n        var videoType;\r\n\r\n        if (url.indexOf('data:') === 0)\r\n        {\r\n            videoType = url.split(',')[0].match(/\\/(.*?);/);\r\n        }\r\n        else\r\n        {\r\n            videoType = url.match(/\\.([a-zA-Z0-9]+)($|\\?)/);\r\n        }\r\n\r\n        videoType = GetFastValue(urls[i], 'type', (videoType) ? videoType[1] : '').toLowerCase();\r\n\r\n        if (game.device.video[videoType])\r\n        {\r\n            return {\r\n                url: url,\r\n                type: videoType\r\n            };\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\n/**\r\n * Adds a Video file, or array of video files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.video('intro', [ 'video/level1.mp4', 'video/level1.webm', 'video/level1.mov' ]);\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Video Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Video Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Video Cache first, before loading a new one.\r\n  *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.video({\r\n *     key: 'intro',\r\n *     url: [ 'video/level1.mp4', 'video/level1.webm', 'video/level1.mov' ],\r\n *     asBlob: false,\r\n *     noAudio: true\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.VideoFileConfig` for more details.\r\n *\r\n * The URLs can be relative or absolute. If the URLs are relative the `Loader.baseURL` and `Loader.path` values will be prepended to them.\r\n *\r\n * Due to different browsers supporting different video file types you should usually provide your video files in a variety of formats.\r\n * mp4, mov and webm are the most common. If you provide an array of URLs then the Loader will determine which _one_ file to load based on\r\n * browser support, starting with the first in the array and progressing to the end.\r\n * \r\n * Unlike most asset-types, videos do not _need_ to be preloaded. You can create a Video Game Object and then call its `loadURL` method,\r\n * to load a video at run-time, rather than in advance.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Video File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#video\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.20.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.VideoFileConfig|Phaser.Types.Loader.FileTypes.VideoFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|string[])} [urls] - The absolute or relative URL to load the video files from.\r\n * @param {string} [loadEvent='loadeddata'] - The load event to listen for when _not_ loading as a blob. Either `loadeddata`, `canplay` or `canplaythrough`.\r\n * @param {boolean} [asBlob=false] - Load the video as a data blob, or stream it via the Video element?\r\n * @param {boolean} [noAudio=false] - Does the video have an audio track? If not you can enable auto-playing on it.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('video', function (key, urls, loadEvent, asBlob, noAudio, xhrSettings)\r\n{\r\n    var videoFile;\r\n\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            videoFile = VideoFile.create(this, key[i]);\r\n\r\n            if (videoFile)\r\n            {\r\n                this.addFile(videoFile);\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        videoFile = VideoFile.create(this, key, urls, loadEvent, asBlob, noAudio, xhrSettings);\r\n\r\n        if (videoFile)\r\n        {\r\n            this.addFile(videoFile);\r\n        }\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = VideoFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1ZpZGVvRmlsZS5qcz80ZmNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyw2REFBVztBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx1REFBdUQ7QUFDbEUsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsMEJBQTBCO0FBQ2hFLG1DQUFtQyxnQkFBZ0I7QUFDbkQsb0NBQW9DLGlCQUFpQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUdBQXVHO0FBQ2xILFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvVmlkZW9GaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRVUkwgPSByZXF1aXJlKCcuLi9HZXRVUkwnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgVmlkZW8gRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3ZpZGVvIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdmlkZW8uXHJcbiAqXHJcbiAqIEBjbGFzcyBWaWRlb0ZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5GaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlZpZGVvRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHthbnl9IFt1cmxDb25maWddIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tIGluIGEgY29uZmlnIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtsb2FkRXZlbnRdIC0gVGhlIGxvYWQgZXZlbnQgdG8gbGlzdGVuIGZvciB3aGVuIF9ub3RfIGxvYWRpbmcgYXMgYSBibG9iLiBFaXRoZXIgJ2xvYWRlZGRhdGEnLCAnY2FucGxheScgb3IgJ2NhbnBsYXl0aHJvdWdoJy5cclxuICogQHBhcmFtIHtib29sZWFufSBbYXNCbG9iXSAtIExvYWQgdGhlIHZpZGVvIGFzIGEgZGF0YSBibG9iLCBvciB2aWEgdGhlIFZpZGVvIGVsZW1lbnQ/XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vQXVkaW9dIC0gRG9lcyB0aGUgdmlkZW8gaGF2ZSBhbiBhdWRpbyB0cmFjaz8gSWYgbm90IHlvdSBjYW4gZW5hYmxlIGF1dG8tcGxheWluZyBvbiBpdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIFZpZGVvRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIC8vICBVUkwgaXMgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgVmlkZW9GaWxlLmdldFZpZGVvVVJMXHJcbiAgICBmdW5jdGlvbiBWaWRlb0ZpbGUgKGxvYWRlciwga2V5LCB1cmxDb25maWcsIGxvYWRFdmVudCwgYXNCbG9iLCBub0F1ZGlvLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICBpZiAobG9hZEV2ZW50ID09PSB1bmRlZmluZWQpIHsgbG9hZEV2ZW50ID0gJ2xvYWRlZGRhdGEnOyB9XHJcbiAgICAgICAgaWYgKGFzQmxvYiA9PT0gdW5kZWZpbmVkKSB7IGFzQmxvYiA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKG5vQXVkaW8gPT09IHVuZGVmaW5lZCkgeyBub0F1ZGlvID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKGxvYWRFdmVudCAhPT0gJ2xvYWRlZGRhdGEnICYmIGxvYWRFdmVudCAhPT0gJ2NhbnBsYXknICYmIGxvYWRFdmVudCAhPT0gJ2NhbnBsYXl0aHJvdWdoJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvYWRFdmVudCA9ICdsb2FkZWRkYXRhJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAndmlkZW8nLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLmNhY2hlTWFuYWdlci52aWRlbyxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB1cmxDb25maWcudHlwZSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybENvbmZpZy51cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBsb2FkRXZlbnQ6IGxvYWRFdmVudCxcclxuICAgICAgICAgICAgICAgIGFzQmxvYjogYXNCbG9iLFxyXG4gICAgICAgICAgICAgICAgbm9BdWRpbzogbm9BdWRpb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkxvYWRDYWxsYmFjayA9IHRoaXMub25WaWRlb0xvYWRIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkVycm9yQ2FsbGJhY2sgPSB0aGlzLm9uVmlkZW9FcnJvckhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuVmlkZW9GaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5hc0Jsb2IpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgTG9hZCBWaWRlbyBhcyBibG9iXHJcblxyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMuY3JlYXRlVmlkZW9FbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHZpZGVvO1xyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25sb2FkZWRkYXRhID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsZS5yZXZva2VPYmplY3RVUkwoX3RoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5vblByb2Nlc3NFcnJvcigpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY3JlYXRlT2JqZWN0VVJMKHZpZGVvLCB0aGlzLnhockxvYWRlci5yZXNwb25zZSwgJycpO1xyXG5cclxuICAgICAgICB2aWRlby5sb2FkKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFZpZGVvIEVsZW1lbnQgd2l0aGluIHRoZSBET00uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5WaWRlb0ZpbGUjY3JlYXRlVmlkZW9FbGVtZW50XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MVmlkZW9FbGVtZW50fSBUaGUgbmV3bHkgY3JlYXRlZCBWaWRlbyBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVWaWRlb0VsZW1lbnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgIFxyXG4gICAgICAgIHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICAgICAgdmlkZW8uY3Jvc3NPcmlnaW4gPSB0aGlzLmxvYWRlci5jcm9zc09yaWdpbjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vQXVkaW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZpZGVvLmRlZmF1bHRNdXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ2F1dG9wbGF5JywgJ2F1dG9wbGF5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ3BsYXlzaW5saW5lJywgJ3BsYXlzaW5saW5lJyk7XHJcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwcmVsb2FkJywgJ2F1dG8nKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZpZGVvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGxvYWQgZXZlbnQgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5WaWRlb0ZpbGUjb25WaWRlb0xvYWRIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UHJvZ3Jlc3NFdmVudH0gZXZlbnQgLSBUaGUgRE9NIFByb2dyZXNzRXZlbnQgdGhhdCByZXN1bHRlZCBmcm9tIHRoaXMgbG9hZC5cclxuICAgICAqL1xyXG4gICAgb25WaWRlb0xvYWRIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gZXZlbnQudGFyZ2V0O1xyXG5cclxuICAgICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuY29uZmlnLmxvYWRFdmVudCwgdGhpcy5vbkxvYWRDYWxsYmFjaywgdHJ1ZSk7XHJcbiAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLm9uRXJyb3JDYWxsYmFjaywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHZpZGVvO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0WEhSKCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGxvYWQgZXJyb3IgZXZlbnQgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5WaWRlb0ZpbGUjb25WaWRlb0Vycm9ySGFuZGxlclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50IHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGlzIGxvYWQuXHJcbiAgICAgKi9cclxuICAgIG9uVmlkZW9FcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSBldmVudC50YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5jb25maWcubG9hZEV2ZW50LCB0aGlzLm9uTG9hZENhbGxiYWNrLCB0cnVlKTtcclxuICAgICAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLm9uRXJyb3JDYWxsYmFjaywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0WEhSKCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIExvYWRlciwgc3RhcnRzIHRoZSBhY3R1YWwgZmlsZSBkb3dubG9hZGluZy5cclxuICAgICAqIER1cmluZyB0aGUgbG9hZCB0aGUgbWV0aG9kcyBvbkxvYWQsIG9uRXJyb3IgYW5kIG9uUHJvZ3Jlc3MgYXJlIGNhbGxlZCwgYmFzZWQgb24gdGhlIFhIUiBldmVudHMuXHJcbiAgICAgKiBZb3Ugc2hvdWxkbid0IG5vcm1hbGx5IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGl0J3MgbWVhbnQgdG8gYmUgaW52b2tlZCBieSB0aGUgTG9hZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuVmlkZW9GaWxlI2xvYWRcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbG9hZEV2ZW50ID0gdGhpcy5jb25maWcubG9hZEV2ZW50O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuYXNCbG9iKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsZS5wcm90b3R5cGUubG9hZC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnRDb21wbGV0ZSA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLmNyZWF0ZVZpZGVvRWxlbWVudCgpO1xyXG5cclxuICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIHRoaXMub25Mb2FkQ2FsbGJhY2ssIHRydWUpO1xyXG4gICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMub25FcnJvckNhbGxiYWNrLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvLnNyYyA9IEdldFVSTCh0aGlzLCB0aGlzLmxvYWRlci5iYXNlVVJMKTtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvLmxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblZpZGVvRmlsZS5jcmVhdGUgPSBmdW5jdGlvbiAobG9hZGVyLCBrZXksIHVybHMsIGxvYWRFdmVudCwgYXNCbG9iLCBub0F1ZGlvLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIGdhbWUgPSBsb2FkZXIuc3lzdGVtcy5nYW1lO1xyXG5cclxuICAgIC8vICB1cmwgbWF5IGJlIGluc2lkZSBrZXksIHdoaWNoIG1heSBiZSBhbiBvYmplY3RcclxuICAgIGlmIChJc1BsYWluT2JqZWN0KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgdXJscyA9IEdldEZhc3RWYWx1ZShrZXksICd1cmwnLCBbXSk7XHJcbiAgICAgICAgbG9hZEV2ZW50ID0gR2V0RmFzdFZhbHVlKGtleSwgJ2xvYWRFdmVudCcsICdsb2FkZWRkYXRhJyk7XHJcbiAgICAgICAgYXNCbG9iID0gR2V0RmFzdFZhbHVlKGtleSwgJ2FzQmxvYicsIGZhbHNlKTtcclxuICAgICAgICBub0F1ZGlvID0gR2V0RmFzdFZhbHVlKGtleSwgJ25vQXVkaW8nLCBmYWxzZSk7XHJcbiAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoa2V5LCAneGhyU2V0dGluZ3MnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdXJsQ29uZmlnID0gVmlkZW9GaWxlLmdldFZpZGVvVVJMKGdhbWUsIHVybHMpO1xyXG5cclxuICAgIGlmICh1cmxDb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWaWRlb0ZpbGUobG9hZGVyLCBrZXksIHVybENvbmZpZywgbG9hZEV2ZW50LCBhc0Jsb2IsIG5vQXVkaW8sIHhoclNldHRpbmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcblZpZGVvRmlsZS5nZXRWaWRlb1VSTCA9IGZ1bmN0aW9uIChnYW1lLCB1cmxzKVxyXG57XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJscykpXHJcbiAgICB7XHJcbiAgICAgICAgdXJscyA9IFsgdXJscyBdO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdXJsID0gR2V0RmFzdFZhbHVlKHVybHNbaV0sICd1cmwnLCB1cmxzW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdibG9iOicpID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlb1R5cGU7XHJcblxyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZpZGVvVHlwZSA9IHVybC5zcGxpdCgnLCcpWzBdLm1hdGNoKC9cXC8oLio/KTsvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW9UeXBlID0gdXJsLm1hdGNoKC9cXC4oW2EtekEtWjAtOV0rKSgkfFxcPykvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZpZGVvVHlwZSA9IEdldEZhc3RWYWx1ZSh1cmxzW2ldLCAndHlwZScsICh2aWRlb1R5cGUpID8gdmlkZW9UeXBlWzFdIDogJycpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmIChnYW1lLmRldmljZS52aWRlb1t2aWRlb1R5cGVdKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdmlkZW9UeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBWaWRlbyBmaWxlLCBvciBhcnJheSBvZiB2aWRlbyBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnZpZGVvKCdpbnRybycsIFsgJ3ZpZGVvL2xldmVsMS5tcDQnLCAndmlkZW8vbGV2ZWwxLndlYm0nLCAndmlkZW8vbGV2ZWwxLm1vdicgXSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVmlkZW8gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFZpZGVvIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgVmlkZW8gQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC52aWRlbyh7XHJcbiAqICAgICBrZXk6ICdpbnRybycsXHJcbiAqICAgICB1cmw6IFsgJ3ZpZGVvL2xldmVsMS5tcDQnLCAndmlkZW8vbGV2ZWwxLndlYm0nLCAndmlkZW8vbGV2ZWwxLm1vdicgXSxcclxuICogICAgIGFzQmxvYjogZmFsc2UsXHJcbiAqICAgICBub0F1ZGlvOiB0cnVlXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVmlkZW9GaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBUaGUgVVJMcyBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkxzIGFyZSByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlbS5cclxuICpcclxuICogRHVlIHRvIGRpZmZlcmVudCBicm93c2VycyBzdXBwb3J0aW5nIGRpZmZlcmVudCB2aWRlbyBmaWxlIHR5cGVzIHlvdSBzaG91bGQgdXN1YWxseSBwcm92aWRlIHlvdXIgdmlkZW8gZmlsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMuXHJcbiAqIG1wNCwgbW92IGFuZCB3ZWJtIGFyZSB0aGUgbW9zdCBjb21tb24uIElmIHlvdSBwcm92aWRlIGFuIGFycmF5IG9mIFVSTHMgdGhlbiB0aGUgTG9hZGVyIHdpbGwgZGV0ZXJtaW5lIHdoaWNoIF9vbmVfIGZpbGUgdG8gbG9hZCBiYXNlZCBvblxyXG4gKiBicm93c2VyIHN1cHBvcnQsIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGluIHRoZSBhcnJheSBhbmQgcHJvZ3Jlc3NpbmcgdG8gdGhlIGVuZC5cclxuICogXHJcbiAqIFVubGlrZSBtb3N0IGFzc2V0LXR5cGVzLCB2aWRlb3MgZG8gbm90IF9uZWVkXyB0byBiZSBwcmVsb2FkZWQuIFlvdSBjYW4gY3JlYXRlIGEgVmlkZW8gR2FtZSBPYmplY3QgYW5kIHRoZW4gY2FsbCBpdHMgYGxvYWRVUkxgIG1ldGhvZCxcclxuICogdG8gbG9hZCBhIHZpZGVvIGF0IHJ1bi10aW1lLCByYXRoZXIgdGhhbiBpbiBhZHZhbmNlLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFZpZGVvIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3ZpZGVvXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuVmlkZW9GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlZpZGVvRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdXJsc10gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHZpZGVvIGZpbGVzIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbG9hZEV2ZW50PSdsb2FkZWRkYXRhJ10gLSBUaGUgbG9hZCBldmVudCB0byBsaXN0ZW4gZm9yIHdoZW4gX25vdF8gbG9hZGluZyBhcyBhIGJsb2IuIEVpdGhlciBgbG9hZGVkZGF0YWAsIGBjYW5wbGF5YCBvciBgY2FucGxheXRocm91Z2hgLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthc0Jsb2I9ZmFsc2VdIC0gTG9hZCB0aGUgdmlkZW8gYXMgYSBkYXRhIGJsb2IsIG9yIHN0cmVhbSBpdCB2aWEgdGhlIFZpZGVvIGVsZW1lbnQ/XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vQXVkaW89ZmFsc2VdIC0gRG9lcyB0aGUgdmlkZW8gaGF2ZSBhbiBhdWRpbyB0cmFjaz8gSWYgbm90IHlvdSBjYW4gZW5hYmxlIGF1dG8tcGxheWluZyBvbiBpdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3ZpZGVvJywgZnVuY3Rpb24gKGtleSwgdXJscywgbG9hZEV2ZW50LCBhc0Jsb2IsIG5vQXVkaW8sIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgdmlkZW9GaWxlO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgaXQncyBhbiBhcnJheSBpdCBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgT2JqZWN0cywgc28gd2UgZ2V0IGV2ZXJ5dGhpbmcgb3V0IG9mIHRoZSAna2V5JyBvYmplY3RcclxuICAgICAgICAgICAgdmlkZW9GaWxlID0gVmlkZW9GaWxlLmNyZWF0ZSh0aGlzLCBrZXlbaV0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZpZGVvRmlsZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlKHZpZGVvRmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmlkZW9GaWxlID0gVmlkZW9GaWxlLmNyZWF0ZSh0aGlzLCBrZXksIHVybHMsIGxvYWRFdmVudCwgYXNCbG9iLCBub0F1ZGlvLCB4aHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIGlmICh2aWRlb0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUodmlkZW9GaWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/VideoFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/XMLFile.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/XMLFile.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar ParseXML = __webpack_require__(/*! ../../dom/ParseXML */ \"./node_modules/phaser/src/dom/ParseXML.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single XML File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#xml method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#xml.\r\n *\r\n * @class XMLFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.XMLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar XMLFile = new Class({\r\n\r\n    Extends: File,\r\n\r\n    initialize:\r\n\r\n    function XMLFile (loader, key, url, xhrSettings)\r\n    {\r\n        var extension = 'xml';\r\n\r\n        if (IsPlainObject(key))\r\n        {\r\n            var config = key;\r\n\r\n            key = GetFastValue(config, 'key');\r\n            url = GetFastValue(config, 'url');\r\n            xhrSettings = GetFastValue(config, 'xhrSettings');\r\n            extension = GetFastValue(config, 'extension', extension);\r\n        }\r\n\r\n        var fileConfig = {\r\n            type: 'xml',\r\n            cache: loader.cacheManager.xml,\r\n            extension: extension,\r\n            responseType: 'text',\r\n            key: key,\r\n            url: url,\r\n            xhrSettings: xhrSettings\r\n        };\r\n\r\n        File.call(this, loader, fileConfig);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by Loader.nextFile.\r\n     * This method controls what extra work this File does with its loaded data.\r\n     *\r\n     * @method Phaser.Loader.FileTypes.XMLFile#onProcess\r\n     * @since 3.7.0\r\n     */\r\n    onProcess: function ()\r\n    {\r\n        this.state = CONST.FILE_PROCESSING;\r\n\r\n        this.data = ParseXML(this.xhrLoader.responseText);\r\n\r\n        if (this.data)\r\n        {\r\n            this.onProcessComplete();\r\n        }\r\n        else\r\n        {\r\n            console.warn('Invalid XMLFile: ' + this.key);\r\n            \r\n            this.onProcessError();\r\n        }\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Adds an XML file, or array of XML files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n *     this.load.xml('wavedata', 'files/AlienWaveData.xml');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global XML Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the XML Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the XML Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.xml({\r\n *     key: 'wavedata',\r\n *     url: 'files/AlienWaveData.xml'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.XMLFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.xml('wavedata', 'files/AlienWaveData.xml');\r\n * // and later in your game ...\r\n * var data = this.cache.xml.get('wavedata');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the XML Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.xml\". It will always add `.xml` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the XML File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#xml\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.XMLFileConfig|Phaser.Types.Loader.FileTypes.XMLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('xml', function (key, url, xhrSettings)\r\n{\r\n    if (Array.isArray(key))\r\n    {\r\n        for (var i = 0; i < key.length; i++)\r\n        {\r\n            //  If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n            this.addFile(new XMLFile(this, key[i]));\r\n        }\r\n    }\r\n    else\r\n    {\r\n        this.addFile(new XMLFile(this, key, url, xhrSettings));\r\n    }\r\n\r\n    return this;\r\n});\r\n\r\nmodule.exports = XMLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1hNTEZpbGUuanM/ZGRhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGVBQWUsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHFEQUFxRDtBQUNoRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtR0FBbUc7QUFDOUcsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvWE1MRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBQYXJzZVhNTCA9IHJlcXVpcmUoJy4uLy4uL2RvbS9QYXJzZVhNTCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgWE1MIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN4bWwgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN4bWwuXHJcbiAqXHJcbiAqIEBjbGFzcyBYTUxGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlhNTEZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBYTUxGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gWE1MRmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICd4bWwnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAneG1sJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIueG1sLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuWE1MRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gUGFyc2VYTUwodGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIFhNTEZpbGU6ICcgKyB0aGlzLmtleSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBYTUwgZmlsZSwgb3IgYXJyYXkgb2YgWE1MIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQueG1sKCd3YXZlZGF0YScsICdmaWxlcy9BbGllbldhdmVEYXRhLnhtbCcpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIFhNTCBDYWNoZSB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgWE1MIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgWE1MIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC54bWwoe1xyXG4gKiAgICAga2V5OiAnd2F2ZWRhdGEnLFxyXG4gKiAgICAgdXJsOiAnZmlsZXMvQWxpZW5XYXZlRGF0YS54bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuWE1MRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIGFjY2VzcyBpdCBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQueG1sKCd3YXZlZGF0YScsICdmaWxlcy9BbGllbldhdmVEYXRhLnhtbCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUueG1sLmdldCgnd2F2ZWRhdGEnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIFhNTCBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJkYXRhXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImRhdGEueG1sXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLnhtbGAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgWE1MIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3htbFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuWE1MRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5YTUxGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCd4bWwnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgWE1MRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBYTUxGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gWE1MRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/XMLFile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/filetypes/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/loader/filetypes/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Loader.FileTypes\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    AnimationJSONFile: __webpack_require__(/*! ./AnimationJSONFile */ \"./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js\"),\r\n    AtlasJSONFile: __webpack_require__(/*! ./AtlasJSONFile */ \"./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js\"),\r\n    AtlasXMLFile: __webpack_require__(/*! ./AtlasXMLFile */ \"./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js\"),\r\n    AudioFile: __webpack_require__(/*! ./AudioFile */ \"./node_modules/phaser/src/loader/filetypes/AudioFile.js\"),\r\n    AudioSpriteFile: __webpack_require__(/*! ./AudioSpriteFile */ \"./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js\"),\r\n    BinaryFile: __webpack_require__(/*! ./BinaryFile */ \"./node_modules/phaser/src/loader/filetypes/BinaryFile.js\"),\r\n    BitmapFontFile: __webpack_require__(/*! ./BitmapFontFile */ \"./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js\"),\r\n    CSSFile: __webpack_require__(/*! ./CSSFile */ \"./node_modules/phaser/src/loader/filetypes/CSSFile.js\"),\r\n    GLSLFile: __webpack_require__(/*! ./GLSLFile */ \"./node_modules/phaser/src/loader/filetypes/GLSLFile.js\"),\r\n    HTML5AudioFile: __webpack_require__(/*! ./HTML5AudioFile */ \"./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js\"),\r\n    HTMLFile: __webpack_require__(/*! ./HTMLFile */ \"./node_modules/phaser/src/loader/filetypes/HTMLFile.js\"),\r\n    HTMLTextureFile: __webpack_require__(/*! ./HTMLTextureFile */ \"./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js\"),\r\n    ImageFile: __webpack_require__(/*! ./ImageFile */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\"),\r\n    JSONFile: __webpack_require__(/*! ./JSONFile */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\"),\r\n    MultiAtlasFile: __webpack_require__(/*! ./MultiAtlasFile */ \"./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js\"),\r\n    MultiScriptFile: __webpack_require__(/*! ./MultiScriptFile */ \"./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js\"),\r\n    PackFile: __webpack_require__(/*! ./PackFile */ \"./node_modules/phaser/src/loader/filetypes/PackFile.js\"),\r\n    PluginFile: __webpack_require__(/*! ./PluginFile */ \"./node_modules/phaser/src/loader/filetypes/PluginFile.js\"),\r\n    SceneFile: __webpack_require__(/*! ./SceneFile */ \"./node_modules/phaser/src/loader/filetypes/SceneFile.js\"),\r\n    ScenePluginFile: __webpack_require__(/*! ./ScenePluginFile */ \"./node_modules/phaser/src/loader/filetypes/ScenePluginFile.js\"),\r\n    ScriptFile: __webpack_require__(/*! ./ScriptFile */ \"./node_modules/phaser/src/loader/filetypes/ScriptFile.js\"),\r\n    SpriteSheetFile: __webpack_require__(/*! ./SpriteSheetFile */ \"./node_modules/phaser/src/loader/filetypes/SpriteSheetFile.js\"),\r\n    SVGFile: __webpack_require__(/*! ./SVGFile */ \"./node_modules/phaser/src/loader/filetypes/SVGFile.js\"),\r\n    TextFile: __webpack_require__(/*! ./TextFile */ \"./node_modules/phaser/src/loader/filetypes/TextFile.js\"),\r\n    TilemapCSVFile: __webpack_require__(/*! ./TilemapCSVFile */ \"./node_modules/phaser/src/loader/filetypes/TilemapCSVFile.js\"),\r\n    TilemapImpactFile: __webpack_require__(/*! ./TilemapImpactFile */ \"./node_modules/phaser/src/loader/filetypes/TilemapImpactFile.js\"),\r\n    TilemapJSONFile: __webpack_require__(/*! ./TilemapJSONFile */ \"./node_modules/phaser/src/loader/filetypes/TilemapJSONFile.js\"),\r\n    UnityAtlasFile: __webpack_require__(/*! ./UnityAtlasFile */ \"./node_modules/phaser/src/loader/filetypes/UnityAtlasFile.js\"),\r\n    VideoFile: __webpack_require__(/*! ./VideoFile */ \"./node_modules/phaser/src/loader/filetypes/VideoFile.js\"),\r\n    XMLFile: __webpack_require__(/*! ./XMLFile */ \"./node_modules/phaser/src/loader/filetypes/XMLFile.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL2luZGV4LmpzPzJlNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw0RkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWlCO0FBQzVDLGtCQUFrQixtQkFBTyxDQUFDLGtGQUFnQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMscUJBQXFCLG1CQUFPLENBQUMsd0ZBQW1CO0FBQ2hELGdCQUFnQixtQkFBTyxDQUFDLDhFQUFjO0FBQ3RDLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxhQUFhLG1CQUFPLENBQUMsd0VBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLDBFQUFZO0FBQ2xDLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxjQUFjLG1CQUFPLENBQUMsMEVBQVk7QUFDbEMscUJBQXFCLG1CQUFPLENBQUMsd0ZBQW1CO0FBQ2hELGVBQWUsbUJBQU8sQ0FBQyw0RUFBYTtBQUNwQyxjQUFjLG1CQUFPLENBQUMsMEVBQVk7QUFDbEMsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWtCO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLHdGQUFtQjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsMEVBQVk7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLDRFQUFhO0FBQ3BDLHFCQUFxQixtQkFBTyxDQUFDLHdGQUFtQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyw4RUFBYztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBbUI7QUFDaEQsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTtBQUNsQyxvQkFBb0IsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDOUMsdUJBQXVCLG1CQUFPLENBQUMsNEZBQXFCO0FBQ3BELHFCQUFxQixtQkFBTyxDQUFDLHdGQUFtQjtBQUNoRCxvQkFBb0IsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLDRFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyx3RUFBVzs7QUFFaEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFuaW1hdGlvbkpTT05GaWxlOiByZXF1aXJlKCcuL0FuaW1hdGlvbkpTT05GaWxlJyksXHJcbiAgICBBdGxhc0pTT05GaWxlOiByZXF1aXJlKCcuL0F0bGFzSlNPTkZpbGUnKSxcclxuICAgIEF0bGFzWE1MRmlsZTogcmVxdWlyZSgnLi9BdGxhc1hNTEZpbGUnKSxcclxuICAgIEF1ZGlvRmlsZTogcmVxdWlyZSgnLi9BdWRpb0ZpbGUnKSxcclxuICAgIEF1ZGlvU3ByaXRlRmlsZTogcmVxdWlyZSgnLi9BdWRpb1Nwcml0ZUZpbGUnKSxcclxuICAgIEJpbmFyeUZpbGU6IHJlcXVpcmUoJy4vQmluYXJ5RmlsZScpLFxyXG4gICAgQml0bWFwRm9udEZpbGU6IHJlcXVpcmUoJy4vQml0bWFwRm9udEZpbGUnKSxcclxuICAgIENTU0ZpbGU6IHJlcXVpcmUoJy4vQ1NTRmlsZScpLFxyXG4gICAgR0xTTEZpbGU6IHJlcXVpcmUoJy4vR0xTTEZpbGUnKSxcclxuICAgIEhUTUw1QXVkaW9GaWxlOiByZXF1aXJlKCcuL0hUTUw1QXVkaW9GaWxlJyksXHJcbiAgICBIVE1MRmlsZTogcmVxdWlyZSgnLi9IVE1MRmlsZScpLFxyXG4gICAgSFRNTFRleHR1cmVGaWxlOiByZXF1aXJlKCcuL0hUTUxUZXh0dXJlRmlsZScpLFxyXG4gICAgSW1hZ2VGaWxlOiByZXF1aXJlKCcuL0ltYWdlRmlsZScpLFxyXG4gICAgSlNPTkZpbGU6IHJlcXVpcmUoJy4vSlNPTkZpbGUnKSxcclxuICAgIE11bHRpQXRsYXNGaWxlOiByZXF1aXJlKCcuL011bHRpQXRsYXNGaWxlJyksXHJcbiAgICBNdWx0aVNjcmlwdEZpbGU6IHJlcXVpcmUoJy4vTXVsdGlTY3JpcHRGaWxlJyksXHJcbiAgICBQYWNrRmlsZTogcmVxdWlyZSgnLi9QYWNrRmlsZScpLFxyXG4gICAgUGx1Z2luRmlsZTogcmVxdWlyZSgnLi9QbHVnaW5GaWxlJyksXHJcbiAgICBTY2VuZUZpbGU6IHJlcXVpcmUoJy4vU2NlbmVGaWxlJyksXHJcbiAgICBTY2VuZVBsdWdpbkZpbGU6IHJlcXVpcmUoJy4vU2NlbmVQbHVnaW5GaWxlJyksXHJcbiAgICBTY3JpcHRGaWxlOiByZXF1aXJlKCcuL1NjcmlwdEZpbGUnKSxcclxuICAgIFNwcml0ZVNoZWV0RmlsZTogcmVxdWlyZSgnLi9TcHJpdGVTaGVldEZpbGUnKSxcclxuICAgIFNWR0ZpbGU6IHJlcXVpcmUoJy4vU1ZHRmlsZScpLFxyXG4gICAgVGV4dEZpbGU6IHJlcXVpcmUoJy4vVGV4dEZpbGUnKSxcclxuICAgIFRpbGVtYXBDU1ZGaWxlOiByZXF1aXJlKCcuL1RpbGVtYXBDU1ZGaWxlJyksXHJcbiAgICBUaWxlbWFwSW1wYWN0RmlsZTogcmVxdWlyZSgnLi9UaWxlbWFwSW1wYWN0RmlsZScpLFxyXG4gICAgVGlsZW1hcEpTT05GaWxlOiByZXF1aXJlKCcuL1RpbGVtYXBKU09ORmlsZScpLFxyXG4gICAgVW5pdHlBdGxhc0ZpbGU6IHJlcXVpcmUoJy4vVW5pdHlBdGxhc0ZpbGUnKSxcclxuICAgIFZpZGVvRmlsZTogcmVxdWlyZSgnLi9WaWRlb0ZpbGUnKSxcclxuICAgIFhNTEZpbGU6IHJlcXVpcmUoJy4vWE1MRmlsZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/loader/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/loader/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Loader\r\n */\r\n\r\nvar Loader = {\r\n\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/loader/events/index.js\"),\r\n\r\n    FileTypes: __webpack_require__(/*! ./filetypes */ \"./node_modules/phaser/src/loader/filetypes/index.js\"),\r\n\r\n    File: __webpack_require__(/*! ./File */ \"./node_modules/phaser/src/loader/File.js\"),\r\n    FileTypesManager: __webpack_require__(/*! ./FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\"),\r\n    GetURL: __webpack_require__(/*! ./GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\"),\r\n    LoaderPlugin: __webpack_require__(/*! ./LoaderPlugin */ \"./node_modules/phaser/src/loader/LoaderPlugin.js\"),\r\n    MergeXHRSettings: __webpack_require__(/*! ./MergeXHRSettings */ \"./node_modules/phaser/src/loader/MergeXHRSettings.js\"),\r\n    MultiFile: __webpack_require__(/*! ./MultiFile */ \"./node_modules/phaser/src/loader/MultiFile.js\"),\r\n    XHRLoader: __webpack_require__(/*! ./XHRLoader */ \"./node_modules/phaser/src/loader/XHRLoader.js\"),\r\n    XHRSettings: __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nLoader = Extend(false, Loader, CONST);\r\n\r\nmodule.exports = Loader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvaW5kZXguanM/ZTdmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGFBQWEsbUJBQU8sQ0FBQyxnRkFBd0I7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsa0VBQVU7O0FBRTlCLGVBQWUsbUJBQU8sQ0FBQyx3RUFBYTs7QUFFcEMsVUFBVSxtQkFBTyxDQUFDLHdEQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLGdGQUFvQjtBQUNsRCxZQUFZLG1CQUFPLENBQUMsNERBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWdCO0FBQzFDLHNCQUFzQixtQkFBTyxDQUFDLGdGQUFvQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsa0VBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLGtFQUFhO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFlOztBQUV4Qzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTG9hZGVyXHJcbiAqL1xyXG5cclxudmFyIExvYWRlciA9IHtcclxuXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcblxyXG4gICAgRmlsZVR5cGVzOiByZXF1aXJlKCcuL2ZpbGV0eXBlcycpLFxyXG5cclxuICAgIEZpbGU6IHJlcXVpcmUoJy4vRmlsZScpLFxyXG4gICAgRmlsZVR5cGVzTWFuYWdlcjogcmVxdWlyZSgnLi9GaWxlVHlwZXNNYW5hZ2VyJyksXHJcbiAgICBHZXRVUkw6IHJlcXVpcmUoJy4vR2V0VVJMJyksXHJcbiAgICBMb2FkZXJQbHVnaW46IHJlcXVpcmUoJy4vTG9hZGVyUGx1Z2luJyksXHJcbiAgICBNZXJnZVhIUlNldHRpbmdzOiByZXF1aXJlKCcuL01lcmdlWEhSU2V0dGluZ3MnKSxcclxuICAgIE11bHRpRmlsZTogcmVxdWlyZSgnLi9NdWx0aUZpbGUnKSxcclxuICAgIFhIUkxvYWRlcjogcmVxdWlyZSgnLi9YSFJMb2FkZXInKSxcclxuICAgIFhIUlNldHRpbmdzOiByZXF1aXJlKCcuL1hIUlNldHRpbmdzJylcclxuXHJcbn07XHJcblxyXG4vLyAgIE1lcmdlIGluIHRoZSBjb25zdHNcclxuTG9hZGVyID0gRXh0ZW5kKGZhbHNlLCBMb2FkZXIsIENPTlNUKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Average.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Average.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the mean average of the given values.\r\n *\r\n * @function Phaser.Math.Average\r\n * @since 3.0.0\r\n *\r\n * @param {number[]} values - The values to average.\r\n *\r\n * @return {number} The average value.\r\n */\r\nvar Average = function (values)\r\n{\r\n    var sum = 0;\r\n\r\n    for (var i = 0; i < values.length; i++)\r\n    {\r\n        sum += (+values[i]);\r\n    }\r\n\r\n    return sum / values.length;\r\n};\r\n\r\nmodule.exports = Average;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0F2ZXJhZ2UuanM/YWMyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0F2ZXJhZ2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIG1lYW4gYXZlcmFnZSBvZiB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQXZlcmFnZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJbXX0gdmFsdWVzIC0gVGhlIHZhbHVlcyB0byBhdmVyYWdlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhdmVyYWdlIHZhbHVlLlxyXG4gKi9cclxudmFyIEF2ZXJhZ2UgPSBmdW5jdGlvbiAodmFsdWVzKVxyXG57XHJcbiAgICB2YXIgc3VtID0gMDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBzdW0gKz0gKCt2YWx1ZXNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdW0gLyB2YWx1ZXMubGVuZ3RoO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBdmVyYWdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Average.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Bernstein.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/math/Bernstein.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Factorial = __webpack_require__(/*! ./Factorial */ \"./node_modules/phaser/src/math/Factorial.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Math.Bernstein\r\n * @since 3.0.0\r\n *\r\n * @param {number} n - [description]\r\n * @param {number} i - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\nvar Bernstein = function (n, i)\r\n{\r\n    return Factorial(n) / Factorial(i) / Factorial(n - i);\r\n};\r\n\r\nmodule.exports = Bernstein;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0Jlcm5zdGVpbi5qcz84M2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9CZXJuc3RlaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGYWN0b3JpYWwgPSByZXF1aXJlKCcuL0ZhY3RvcmlhbCcpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkJlcm5zdGVpblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IG4gLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBCZXJuc3RlaW4gPSBmdW5jdGlvbiAobiwgaSlcclxue1xyXG4gICAgcmV0dXJuIEZhY3RvcmlhbChuKSAvIEZhY3RvcmlhbChpKSAvIEZhY3RvcmlhbChuIC0gaSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJlcm5zdGVpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Bernstein.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Between.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Between.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compute a random integer between the `min` and `max` values, inclusive.\r\n *\r\n * @function Phaser.Math.Between\r\n * @since 3.0.0\r\n *\r\n * @param {integer} min - The minimum value.\r\n * @param {integer} max - The maximum value.\r\n *\r\n * @return {integer} The random integer.\r\n */\r\nvar Between = function (min, max)\r\n{\r\n    return Math.floor(Math.random() * (max - min + 1) + min);\r\n};\r\n\r\nmodule.exports = Between;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0JldHdlZW4uanM/NWU1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9CZXR3ZWVuLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29tcHV0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gdGhlIGBtaW5gIGFuZCBgbWF4YCB2YWx1ZXMsIGluY2x1c2l2ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkJldHdlZW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gbWF4IC0gVGhlIG1heGltdW0gdmFsdWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSByYW5kb20gaW50ZWdlci5cclxuICovXHJcbnZhciBCZXR3ZWVuID0gZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmV0d2VlbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Between.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/CatmullRom.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/CatmullRom.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates a Catmull-Rom value.\r\n *\r\n * @function Phaser.Math.CatmullRom\r\n * @since 3.0.0\r\n *\r\n * @param {number} t - [description]\r\n * @param {number} p0 - [description]\r\n * @param {number} p1 - [description]\r\n * @param {number} p2 - [description]\r\n * @param {number} p3 - [description]\r\n *\r\n * @return {number} The Catmull-Rom value.\r\n */\r\nvar CatmullRom = function (t, p0, p1, p2, p3)\r\n{\r\n    var v0 = (p2 - p0) * 0.5;\r\n    var v1 = (p3 - p1) * 0.5;\r\n    var t2 = t * t;\r\n    var t3 = t * t2;\r\n\r\n    return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\r\n};\r\n\r\nmodule.exports = CatmullRom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0NhdG11bGxSb20uanM/ODMxOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9DYXRtdWxsUm9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhIENhdG11bGwtUm9tIHZhbHVlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQ2F0bXVsbFJvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwMCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IHAxIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcDIgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwMyAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgQ2F0bXVsbC1Sb20gdmFsdWUuXHJcbiAqL1xyXG52YXIgQ2F0bXVsbFJvbSA9IGZ1bmN0aW9uICh0LCBwMCwgcDEsIHAyLCBwMylcclxue1xyXG4gICAgdmFyIHYwID0gKHAyIC0gcDApICogMC41O1xyXG4gICAgdmFyIHYxID0gKHAzIC0gcDEpICogMC41O1xyXG4gICAgdmFyIHQyID0gdCAqIHQ7XHJcbiAgICB2YXIgdDMgPSB0ICogdDI7XHJcblxyXG4gICAgcmV0dXJuICgyICogcDEgLSAyICogcDIgKyB2MCArIHYxKSAqIHQzICsgKC0zICogcDEgKyAzICogcDIgLSAyICogdjAgLSB2MSkgKiB0MiArIHYwICogdCArIHAxO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYXRtdWxsUm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/CatmullRom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/CeilTo.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/CeilTo.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Ceils to some place comparative to a `base`, default is 10 for decimal place.\r\n *\r\n * The `place` is represented by the power applied to `base` to get that place.\r\n *\r\n * @function Phaser.Math.CeilTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to round.\r\n * @param {number} [place=0] - The place to round to.\r\n * @param {integer} [base=10] - The base to round in. Default is 10 for decimal.\r\n *\r\n * @return {number} The rounded value.\r\n */\r\nvar CeilTo = function (value, place, base)\r\n{\r\n    if (place === undefined) { place = 0; }\r\n    if (base === undefined) { base = 10; }\r\n\r\n    var p = Math.pow(base, -place);\r\n\r\n    return Math.ceil(value * p) / p;\r\n};\r\n\r\nmodule.exports = CeilTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0NlaWxUby5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7QUFDekMsNkJBQTZCLFdBQVc7O0FBRXhDOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0NlaWxUby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENlaWxzIHRvIHNvbWUgcGxhY2UgY29tcGFyYXRpdmUgdG8gYSBgYmFzZWAsIGRlZmF1bHQgaXMgMTAgZm9yIGRlY2ltYWwgcGxhY2UuXHJcbiAqXHJcbiAqIFRoZSBgcGxhY2VgIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBwb3dlciBhcHBsaWVkIHRvIGBiYXNlYCB0byBnZXQgdGhhdCBwbGFjZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkNlaWxUb1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3BsYWNlPTBdIC0gVGhlIHBsYWNlIHRvIHJvdW5kIHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtiYXNlPTEwXSAtIFRoZSBiYXNlIHRvIHJvdW5kIGluLiBEZWZhdWx0IGlzIDEwIGZvciBkZWNpbWFsLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByb3VuZGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIENlaWxUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcGxhY2UsIGJhc2UpXHJcbntcclxuICAgIGlmIChwbGFjZSA9PT0gdW5kZWZpbmVkKSB7IHBsYWNlID0gMDsgfVxyXG4gICAgaWYgKGJhc2UgPT09IHVuZGVmaW5lZCkgeyBiYXNlID0gMTA7IH1cclxuXHJcbiAgICB2YXIgcCA9IE1hdGgucG93KGJhc2UsIC1wbGFjZSk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh2YWx1ZSAqIHApIC8gcDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VpbFRvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/CeilTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Clamp.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/math/Clamp.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Force a value within the boundaries by clamping it to the range `min`, `max`.\r\n *\r\n * @function Phaser.Math.Clamp\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to be clamped.\r\n * @param {number} min - The minimum bounds.\r\n * @param {number} max - The maximum bounds.\r\n *\r\n * @return {number} The clamped value.\r\n */\r\nvar Clamp = function (value, min, max)\r\n{\r\n    return Math.max(min, Math.min(max, value));\r\n};\r\n\r\nmodule.exports = Clamp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0NsYW1wLmpzP2IzNjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0NsYW1wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRm9yY2UgYSB2YWx1ZSB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgYnkgY2xhbXBpbmcgaXQgdG8gdGhlIHJhbmdlIGBtaW5gLCBgbWF4YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkNsYW1wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIGJvdW5kcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIGJvdW5kcy5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2xhbXBlZCB2YWx1ZS5cclxuICovXHJcbnZhciBDbGFtcCA9IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpXHJcbntcclxuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xhbXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Clamp.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/DegToRad.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/math/DegToRad.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Convert the given angle from degrees, to the equivalent angle in radians.\r\n *\r\n * @function Phaser.Math.DegToRad\r\n * @since 3.0.0\r\n *\r\n * @param {integer} degrees - The angle (in degrees) to convert to radians.\r\n *\r\n * @return {number} The given angle converted to radians.\r\n */\r\nvar DegToRad = function (degrees)\r\n{\r\n    return degrees * CONST.DEG_TO_RAD;\r\n};\r\n\r\nmodule.exports = DegToRad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0RlZ1RvUmFkLmpzPzM4Y2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0RlZ1RvUmFkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSBkZWdyZWVzLCB0byB0aGUgZXF1aXZhbGVudCBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRGVnVG9SYWRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZGVncmVlcyAtIFRoZSBhbmdsZSAoaW4gZGVncmVlcykgdG8gY29udmVydCB0byByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBnaXZlbiBhbmdsZSBjb252ZXJ0ZWQgdG8gcmFkaWFucy5cclxuICovXHJcbnZhciBEZWdUb1JhZCA9IGZ1bmN0aW9uIChkZWdyZWVzKVxyXG57XHJcbiAgICByZXR1cm4gZGVncmVlcyAqIENPTlNULkRFR19UT19SQUQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERlZ1RvUmFkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/DegToRad.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Difference.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/Difference.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the positive difference of two given numbers.\r\n *\r\n * @function Phaser.Math.Difference\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The first number in the calculation.\r\n * @param {number} b - The second number in the calculation.\r\n *\r\n * @return {number} The positive difference of the two given numbers.\r\n */\r\nvar Difference = function (a, b)\r\n{\r\n    return Math.abs(a - b);\r\n};\r\n\r\nmodule.exports = Difference;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0RpZmZlcmVuY2UuanM/NzViNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9EaWZmZXJlbmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpdmUgZGlmZmVyZW5jZSBvZiB0d28gZ2l2ZW4gbnVtYmVycy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkRpZmZlcmVuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIC0gVGhlIGZpcnN0IG51bWJlciBpbiB0aGUgY2FsY3VsYXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIHNlY29uZCBudW1iZXIgaW4gdGhlIGNhbGN1bGF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBwb3NpdGl2ZSBkaWZmZXJlbmNlIG9mIHRoZSB0d28gZ2l2ZW4gbnVtYmVycy5cclxuICovXHJcbnZhciBEaWZmZXJlbmNlID0gZnVuY3Rpb24gKGEsIGIpXHJcbntcclxuICAgIHJldHVybiBNYXRoLmFicyhhIC0gYik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERpZmZlcmVuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Difference.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Factorial.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/math/Factorial.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the factorial of a given number for integer values greater than 0.\r\n *\r\n * @function Phaser.Math.Factorial\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - A positive integer to calculate the factorial of.\r\n *\r\n * @return {number} The factorial of the given number.\r\n */\r\nvar Factorial = function (value)\r\n{\r\n    if (value === 0)\r\n    {\r\n        return 1;\r\n    }\r\n\r\n    var res = value;\r\n\r\n    while (--value)\r\n    {\r\n        res *= value;\r\n    }\r\n\r\n    return res;\r\n};\r\n\r\nmodule.exports = Factorial;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0ZhY3RvcmlhbC5qcz9hZjA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvRmFjdG9yaWFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZmFjdG9yaWFsIG9mIGEgZ2l2ZW4gbnVtYmVyIGZvciBpbnRlZ2VyIHZhbHVlcyBncmVhdGVyIHRoYW4gMC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZhY3RvcmlhbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gQSBwb3NpdGl2ZSBpbnRlZ2VyIHRvIGNhbGN1bGF0ZSB0aGUgZmFjdG9yaWFsIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBmYWN0b3JpYWwgb2YgdGhlIGdpdmVuIG51bWJlci5cclxuICovXHJcbnZhciBGYWN0b3JpYWwgPSBmdW5jdGlvbiAodmFsdWUpXHJcbntcclxuICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVzID0gdmFsdWU7XHJcblxyXG4gICAgd2hpbGUgKC0tdmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmVzICo9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZhY3RvcmlhbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Factorial.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/FloatBetween.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/math/FloatBetween.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Generate a random floating point number between the two given bounds, minimum inclusive, maximum exclusive.\r\n *\r\n * @function Phaser.Math.FloatBetween\r\n * @since 3.0.0\r\n *\r\n * @param {number} min - The lower bound for the float, inclusive.\r\n * @param {number} max - The upper bound for the float exclusive.\r\n *\r\n * @return {number} A random float within the given range.\r\n */\r\nvar FloatBetween = function (min, max)\r\n{\r\n    return Math.random() * (max - min) + min;\r\n};\r\n\r\nmodule.exports = FloatBetween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0Zsb2F0QmV0d2Vlbi5qcz8yNjA2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0Zsb2F0QmV0d2Vlbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gYm91bmRzLCBtaW5pbXVtIGluY2x1c2l2ZSwgbWF4aW11bSBleGNsdXNpdmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5GbG9hdEJldHdlZW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbG93ZXIgYm91bmQgZm9yIHRoZSBmbG9hdCwgaW5jbHVzaXZlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIHVwcGVyIGJvdW5kIGZvciB0aGUgZmxvYXQgZXhjbHVzaXZlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGZsb2F0IHdpdGhpbiB0aGUgZ2l2ZW4gcmFuZ2UuXHJcbiAqL1xyXG52YXIgRmxvYXRCZXR3ZWVuID0gZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbG9hdEJldHdlZW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/FloatBetween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/FloorTo.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/FloorTo.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Floors to some place comparative to a `base`, default is 10 for decimal place.\r\n *\r\n * The `place` is represented by the power applied to `base` to get that place.\r\n *\r\n * @function Phaser.Math.FloorTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to round.\r\n * @param {integer} [place=0] - The place to round to.\r\n * @param {integer} [base=10] - The base to round in. Default is 10 for decimal.\r\n *\r\n * @return {number} The rounded value.\r\n */\r\nvar FloorTo = function (value, place, base)\r\n{\r\n    if (place === undefined) { place = 0; }\r\n    if (base === undefined) { base = 10; }\r\n\r\n    var p = Math.pow(base, -place);\r\n\r\n    return Math.floor(value * p) / p;\r\n};\r\n\r\nmodule.exports = FloorTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0Zsb29yVG8uanM/Y2IyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXO0FBQ3pDLDZCQUE2QixXQUFXOztBQUV4Qzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9GbG9vclRvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRmxvb3JzIHRvIHNvbWUgcGxhY2UgY29tcGFyYXRpdmUgdG8gYSBgYmFzZWAsIGRlZmF1bHQgaXMgMTAgZm9yIGRlY2ltYWwgcGxhY2UuXHJcbiAqXHJcbiAqIFRoZSBgcGxhY2VgIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBwb3dlciBhcHBsaWVkIHRvIGBiYXNlYCB0byBnZXQgdGhhdCBwbGFjZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZsb29yVG9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByb3VuZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbcGxhY2U9MF0gLSBUaGUgcGxhY2UgdG8gcm91bmQgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2Jhc2U9MTBdIC0gVGhlIGJhc2UgdG8gcm91bmQgaW4uIERlZmF1bHQgaXMgMTAgZm9yIGRlY2ltYWwuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJvdW5kZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgRmxvb3JUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcGxhY2UsIGJhc2UpXHJcbntcclxuICAgIGlmIChwbGFjZSA9PT0gdW5kZWZpbmVkKSB7IHBsYWNlID0gMDsgfVxyXG4gICAgaWYgKGJhc2UgPT09IHVuZGVmaW5lZCkgeyBiYXNlID0gMTA7IH1cclxuXHJcbiAgICB2YXIgcCA9IE1hdGgucG93KGJhc2UsIC1wbGFjZSk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKiBwKSAvIHA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZsb29yVG87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/FloorTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/FromPercent.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/FromPercent.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ./Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\n\r\n/**\r\n * Return a value based on the range between `min` and `max` and the percentage given.\r\n *\r\n * @function Phaser.Math.FromPercent\r\n * @since 3.0.0\r\n *\r\n * @param {number} percent - A value between 0 and 1 representing the percentage.\r\n * @param {number} min - The minimum value.\r\n * @param {number} [max] - The maximum value.\r\n *\r\n * @return {number} The value that is `percent` percent between `min` and `max`.\r\n */\r\nvar FromPercent = function (percent, min, max)\r\n{\r\n    percent = Clamp(percent, 0, 1);\r\n\r\n    return (max - min) * percent;\r\n};\r\n\r\nmodule.exports = FromPercent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0Zyb21QZXJjZW50LmpzPzI1MjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvRnJvbVBlcmNlbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4vQ2xhbXAnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSB2YWx1ZSBiYXNlZCBvbiB0aGUgcmFuZ2UgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgYW5kIHRoZSBwZXJjZW50YWdlIGdpdmVuLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRnJvbVBlcmNlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJjZW50IC0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgcmVwcmVzZW50aW5nIHRoZSBwZXJjZW50YWdlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAtIFRoZSBtYXhpbXVtIHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2YWx1ZSB0aGF0IGlzIGBwZXJjZW50YCBwZXJjZW50IGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgLlxyXG4gKi9cclxudmFyIEZyb21QZXJjZW50ID0gZnVuY3Rpb24gKHBlcmNlbnQsIG1pbiwgbWF4KVxyXG57XHJcbiAgICBwZXJjZW50ID0gQ2xhbXAocGVyY2VudCwgMCwgMSk7XHJcblxyXG4gICAgcmV0dXJuIChtYXggLSBtaW4pICogcGVyY2VudDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRnJvbVBlcmNlbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/FromPercent.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/GetSpeed.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/math/GetSpeed.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the speed required to cover a distance in the time given.\r\n *\r\n * @function Phaser.Math.GetSpeed\r\n * @since 3.0.0\r\n *\r\n * @param {number} distance - The distance to travel in pixels.\r\n * @param {integer} time - The time, in ms, to cover the distance in.\r\n *\r\n * @return {number} The amount you will need to increment the position by each step in order to cover the distance in the time given.\r\n */\r\nvar GetSpeed = function (distance, time)\r\n{\r\n    return (distance / time) / 1000;\r\n};\r\n\r\nmodule.exports = GetSpeed;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0dldFNwZWVkLmpzP2Q0MGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvR2V0U3BlZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIHNwZWVkIHJlcXVpcmVkIHRvIGNvdmVyIGEgZGlzdGFuY2UgaW4gdGhlIHRpbWUgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5HZXRTcGVlZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIHRvIHRyYXZlbCBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGltZSAtIFRoZSB0aW1lLCBpbiBtcywgdG8gY292ZXIgdGhlIGRpc3RhbmNlIGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbW91bnQgeW91IHdpbGwgbmVlZCB0byBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIGJ5IGVhY2ggc3RlcCBpbiBvcmRlciB0byBjb3ZlciB0aGUgZGlzdGFuY2UgaW4gdGhlIHRpbWUgZ2l2ZW4uXHJcbiAqL1xyXG52YXIgR2V0U3BlZWQgPSBmdW5jdGlvbiAoZGlzdGFuY2UsIHRpbWUpXHJcbntcclxuICAgIHJldHVybiAoZGlzdGFuY2UgLyB0aW1lKSAvIDEwMDA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFNwZWVkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/GetSpeed.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/IsEven.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/IsEven.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check if a given value is an even number.\r\n *\r\n * @function Phaser.Math.IsEven\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The number to perform the check with.\r\n *\r\n * @return {boolean} Whether the number is even or not.\r\n */\r\nvar IsEven = function (value)\r\n{\r\n    // Use abstract equality == for \"is number\" test\r\n\r\n    // eslint-disable-next-line eqeqeq\r\n    return (value == parseFloat(value)) ? !(value % 2) : void 0;\r\n};\r\n\r\nmodule.exports = IsEven;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0lzRXZlbi5qcz8zYWJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9Jc0V2ZW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGdpdmVuIHZhbHVlIGlzIGFuIGV2ZW4gbnVtYmVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguSXNFdmVuXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIHBlcmZvcm0gdGhlIGNoZWNrIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG51bWJlciBpcyBldmVuIG9yIG5vdC5cclxuICovXHJcbnZhciBJc0V2ZW4gPSBmdW5jdGlvbiAodmFsdWUpXHJcbntcclxuICAgIC8vIFVzZSBhYnN0cmFjdCBlcXVhbGl0eSA9PSBmb3IgXCJpcyBudW1iZXJcIiB0ZXN0XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxyXG4gICAgcmV0dXJuICh2YWx1ZSA9PSBwYXJzZUZsb2F0KHZhbHVlKSkgPyAhKHZhbHVlICUgMikgOiB2b2lkIDA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzRXZlbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/IsEven.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/IsEvenStrict.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/math/IsEvenStrict.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check if a given value is an even number using a strict type check.\r\n *\r\n * @function Phaser.Math.IsEvenStrict\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The number to perform the check with.\r\n *\r\n * @return {boolean} Whether the number is even or not.\r\n */\r\nvar IsEvenStrict = function (value)\r\n{\r\n    // Use strict equality === for \"is number\" test\r\n    return (value === parseFloat(value)) ? !(value % 2) : void 0;\r\n};\r\n\r\nmodule.exports = IsEvenStrict;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0lzRXZlblN0cmljdC5qcz80YTg3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9Jc0V2ZW5TdHJpY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGdpdmVuIHZhbHVlIGlzIGFuIGV2ZW4gbnVtYmVyIHVzaW5nIGEgc3RyaWN0IHR5cGUgY2hlY2suXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5Jc0V2ZW5TdHJpY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBudW1iZXIgdG8gcGVyZm9ybSB0aGUgY2hlY2sgd2l0aC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbnVtYmVyIGlzIGV2ZW4gb3Igbm90LlxyXG4gKi9cclxudmFyIElzRXZlblN0cmljdCA9IGZ1bmN0aW9uICh2YWx1ZSlcclxue1xyXG4gICAgLy8gVXNlIHN0cmljdCBlcXVhbGl0eSA9PT0gZm9yIFwiaXMgbnVtYmVyXCIgdGVzdFxyXG4gICAgcmV0dXJuICh2YWx1ZSA9PT0gcGFyc2VGbG9hdCh2YWx1ZSkpID8gISh2YWx1ZSAlIDIpIDogdm9pZCAwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc0V2ZW5TdHJpY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/IsEvenStrict.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Linear.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/Linear.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates a linear (interpolation) value over t.\r\n *\r\n * @function Phaser.Math.Linear\r\n * @since 3.0.0\r\n *\r\n * @param {number} p0 - The first point.\r\n * @param {number} p1 - The second point.\r\n * @param {number} t - The percentage between p0 and p1 to return, represented as a number between 0 and 1.\r\n *\r\n * @return {number} The step t% of the way between p0 and p1.\r\n */\r\nvar Linear = function (p0, p1, t)\r\n{\r\n    return (p1 - p0) * t + p0;\r\n};\r\n\r\nmodule.exports = Linear;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL0xpbmVhci5qcz82MGIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9MaW5lYXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGEgbGluZWFyIChpbnRlcnBvbGF0aW9uKSB2YWx1ZSBvdmVyIHQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5MaW5lYXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwMCAtIFRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHAxIC0gVGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcGVyY2VudGFnZSBiZXR3ZWVuIHAwIGFuZCBwMSB0byByZXR1cm4sIHJlcHJlc2VudGVkIGFzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgc3RlcCB0JSBvZiB0aGUgd2F5IGJldHdlZW4gcDAgYW5kIHAxLlxyXG4gKi9cclxudmFyIExpbmVhciA9IGZ1bmN0aW9uIChwMCwgcDEsIHQpXHJcbntcclxuICAgIHJldHVybiAocDEgLSBwMCkgKiB0ICsgcDA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVhcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Linear.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Matrix3.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Matrix3.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A three-dimensional matrix.\r\n *\r\n * Defaults to the identity matrix when instantiated.\r\n *\r\n * @class Matrix3\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Matrix3} [m] - Optional Matrix3 to copy values from.\r\n */\r\nvar Matrix3 = new Class({\r\n\r\n    initialize:\r\n\r\n    function Matrix3 (m)\r\n    {\r\n        /**\r\n         * The matrix values.\r\n         *\r\n         * @name Phaser.Math.Matrix3#val\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.val = new Float32Array(9);\r\n\r\n        if (m)\r\n        {\r\n            //  Assume Matrix3 with val:\r\n            this.copy(m);\r\n        }\r\n        else\r\n        {\r\n            //  Default to identity\r\n            this.identity();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Make a clone of this Matrix3.\r\n     *\r\n     * @method Phaser.Math.Matrix3#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix3} A clone of this Matrix3.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Matrix3(this);\r\n    },\r\n\r\n    /**\r\n     * This method is an alias for `Matrix3.copy`.\r\n     *\r\n     * @method Phaser.Math.Matrix3#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} src - The Matrix to set the values of this Matrix's from.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    set: function (src)\r\n    {\r\n        return this.copy(src);\r\n    },\r\n\r\n    /**\r\n     * Copy the values of a given Matrix into this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} src - The Matrix to copy the values from.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        var out = this.val;\r\n        var a = src.val;\r\n\r\n        out[0] = a[0];\r\n        out[1] = a[1];\r\n        out[2] = a[2];\r\n        out[3] = a[3];\r\n        out[4] = a[4];\r\n        out[5] = a[5];\r\n        out[6] = a[6];\r\n        out[7] = a[7];\r\n        out[8] = a[8];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Copy the values of a given Matrix4 into this Matrix3.\r\n     *\r\n     * @method Phaser.Math.Matrix3#fromMat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} m - The Matrix4 to copy the values from.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    fromMat4: function (m)\r\n    {\r\n        var a = m.val;\r\n        var out = this.val;\r\n\r\n        out[0] = a[0];\r\n        out[1] = a[1];\r\n        out[2] = a[2];\r\n        out[3] = a[4];\r\n        out[4] = a[5];\r\n        out[5] = a[6];\r\n        out[6] = a[8];\r\n        out[7] = a[9];\r\n        out[8] = a[10];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix from the given array.\r\n     *\r\n     * @method Phaser.Math.Matrix3#fromArray\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} a - The array to copy the values from.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    fromArray: function (a)\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = a[0];\r\n        out[1] = a[1];\r\n        out[2] = a[2];\r\n        out[3] = a[3];\r\n        out[4] = a[4];\r\n        out[5] = a[5];\r\n        out[6] = a[6];\r\n        out[7] = a[7];\r\n        out[8] = a[8];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Reset this Matrix to an identity (default) matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#identity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    identity: function ()\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = 1;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n        out[4] = 1;\r\n        out[5] = 0;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n        out[8] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transpose this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#transpose\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    transpose: function ()\r\n    {\r\n        var a = this.val;\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a12 = a[5];\r\n\r\n        a[1] = a[3];\r\n        a[2] = a[6];\r\n        a[3] = a01;\r\n        a[5] = a[7];\r\n        a[6] = a02;\r\n        a[7] = a12;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Invert this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#invert\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    invert: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a10 = a[3];\r\n        var a11 = a[4];\r\n        var a12 = a[5];\r\n        var a20 = a[6];\r\n        var a21 = a[7];\r\n        var a22 = a[8];\r\n\r\n        var b01 = a22 * a11 - a12 * a21;\r\n        var b11 = -a22 * a10 + a12 * a20;\r\n        var b21 = a21 * a10 - a11 * a20;\r\n\r\n        // Calculate the determinant\r\n        var det = a00 * b01 + a01 * b11 + a02 * b21;\r\n\r\n        if (!det)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        det = 1 / det;\r\n\r\n        a[0] = b01 * det;\r\n        a[1] = (-a22 * a01 + a02 * a21) * det;\r\n        a[2] = (a12 * a01 - a02 * a11) * det;\r\n        a[3] = b11 * det;\r\n        a[4] = (a22 * a00 - a02 * a20) * det;\r\n        a[5] = (-a12 * a00 + a02 * a10) * det;\r\n        a[6] = b21 * det;\r\n        a[7] = (-a21 * a00 + a01 * a20) * det;\r\n        a[8] = (a11 * a00 - a01 * a10) * det;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the adjoint, or adjugate, of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#adjoint\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    adjoint: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a10 = a[3];\r\n        var a11 = a[4];\r\n        var a12 = a[5];\r\n        var a20 = a[6];\r\n        var a21 = a[7];\r\n        var a22 = a[8];\r\n\r\n        a[0] = (a11 * a22 - a12 * a21);\r\n        a[1] = (a02 * a21 - a01 * a22);\r\n        a[2] = (a01 * a12 - a02 * a11);\r\n        a[3] = (a12 * a20 - a10 * a22);\r\n        a[4] = (a00 * a22 - a02 * a20);\r\n        a[5] = (a02 * a10 - a00 * a12);\r\n        a[6] = (a10 * a21 - a11 * a20);\r\n        a[7] = (a01 * a20 - a00 * a21);\r\n        a[8] = (a00 * a11 - a01 * a10);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the determinant of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#determinant\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The determinant of this Matrix.\r\n     */\r\n    determinant: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a10 = a[3];\r\n        var a11 = a[4];\r\n        var a12 = a[5];\r\n        var a20 = a[6];\r\n        var a21 = a[7];\r\n        var a22 = a[8];\r\n\r\n        return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\r\n    },\r\n\r\n    /**\r\n     * Multiply this Matrix by the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} src - The Matrix to multiply this Matrix by.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    multiply: function (src)\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a10 = a[3];\r\n        var a11 = a[4];\r\n        var a12 = a[5];\r\n        var a20 = a[6];\r\n        var a21 = a[7];\r\n        var a22 = a[8];\r\n\r\n        var b = src.val;\r\n\r\n        var b00 = b[0];\r\n        var b01 = b[1];\r\n        var b02 = b[2];\r\n        var b10 = b[3];\r\n        var b11 = b[4];\r\n        var b12 = b[5];\r\n        var b20 = b[6];\r\n        var b21 = b[7];\r\n        var b22 = b[8];\r\n\r\n        a[0] = b00 * a00 + b01 * a10 + b02 * a20;\r\n        a[1] = b00 * a01 + b01 * a11 + b02 * a21;\r\n        a[2] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n        a[3] = b10 * a00 + b11 * a10 + b12 * a20;\r\n        a[4] = b10 * a01 + b11 * a11 + b12 * a21;\r\n        a[5] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n        a[6] = b20 * a00 + b21 * a10 + b22 * a20;\r\n        a[7] = b20 * a01 + b21 * a11 + b22 * a21;\r\n        a[8] = b20 * a02 + b21 * a12 + b22 * a22;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Translate this Matrix using the given Vector.\r\n     *\r\n     * @method Phaser.Math.Matrix3#translate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to translate this Matrix with.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    translate: function (v)\r\n    {\r\n        var a = this.val;\r\n        var x = v.x;\r\n        var y = v.y;\r\n\r\n        a[6] = x * a[0] + y * a[3] + a[6];\r\n        a[7] = x * a[1] + y * a[4] + a[7];\r\n        a[8] = x * a[2] + y * a[5] + a[8];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply a rotation transformation to this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#rotate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The angle in radians to rotate by.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    rotate: function (rad)\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a10 = a[3];\r\n        var a11 = a[4];\r\n        var a12 = a[5];\r\n\r\n        var s = Math.sin(rad);\r\n        var c = Math.cos(rad);\r\n\r\n        a[0] = c * a00 + s * a10;\r\n        a[1] = c * a01 + s * a11;\r\n        a[2] = c * a02 + s * a12;\r\n\r\n        a[3] = c * a10 - s * a00;\r\n        a[4] = c * a11 - s * a01;\r\n        a[5] = c * a12 - s * a02;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply a scale transformation to this Matrix.\r\n     *\r\n     * Uses the `x` and `y` components of the given Vector to scale the Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix3#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to scale this Matrix with.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    scale: function (v)\r\n    {\r\n        var a = this.val;\r\n        var x = v.x;\r\n        var y = v.y;\r\n\r\n        a[0] = x * a[0];\r\n        a[1] = x * a[1];\r\n        a[2] = x * a[2];\r\n\r\n        a[3] = y * a[3];\r\n        a[4] = y * a[4];\r\n        a[5] = y * a[5];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix from the given Quaternion.\r\n     *\r\n     * @method Phaser.Math.Matrix3#fromQuat\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Quaternion} q - The Quaternion to set the values of this Matrix from.\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    fromQuat: function (q)\r\n    {\r\n        var x = q.x;\r\n        var y = q.y;\r\n        var z = q.z;\r\n        var w = q.w;\r\n\r\n        var x2 = x + x;\r\n        var y2 = y + y;\r\n        var z2 = z + z;\r\n\r\n        var xx = x * x2;\r\n        var xy = x * y2;\r\n        var xz = x * z2;\r\n\r\n        var yy = y * y2;\r\n        var yz = y * z2;\r\n        var zz = z * z2;\r\n\r\n        var wx = w * x2;\r\n        var wy = w * y2;\r\n        var wz = w * z2;\r\n\r\n        var out = this.val;\r\n\r\n        out[0] = 1 - (yy + zz);\r\n        out[3] = xy + wz;\r\n        out[6] = xz - wy;\r\n\r\n        out[1] = xy - wz;\r\n        out[4] = 1 - (xx + zz);\r\n        out[7] = yz + wx;\r\n\r\n        out[2] = xz + wy;\r\n        out[5] = yz - wx;\r\n        out[8] = 1 - (xx + yy);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Math.Matrix3#normalFromMat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} m - [description]\r\n     *\r\n     * @return {Phaser.Math.Matrix3} This Matrix3.\r\n     */\r\n    normalFromMat4: function (m)\r\n    {\r\n        var a = m.val;\r\n        var out = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        var a30 = a[12];\r\n        var a31 = a[13];\r\n        var a32 = a[14];\r\n        var a33 = a[15];\r\n\r\n        var b00 = a00 * a11 - a01 * a10;\r\n        var b01 = a00 * a12 - a02 * a10;\r\n        var b02 = a00 * a13 - a03 * a10;\r\n        var b03 = a01 * a12 - a02 * a11;\r\n\r\n        var b04 = a01 * a13 - a03 * a11;\r\n        var b05 = a02 * a13 - a03 * a12;\r\n        var b06 = a20 * a31 - a21 * a30;\r\n        var b07 = a20 * a32 - a22 * a30;\r\n\r\n        var b08 = a20 * a33 - a23 * a30;\r\n        var b09 = a21 * a32 - a22 * a31;\r\n        var b10 = a21 * a33 - a23 * a31;\r\n        var b11 = a22 * a33 - a23 * a32;\r\n\r\n        // Calculate the determinant\r\n        var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n        if (!det)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        det = 1 / det;\r\n\r\n        out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n        out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n        out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n\r\n        out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n        out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n        out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n\r\n        out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n        out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n        out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Matrix3;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL01hdHJpeDMuanM/ZmI1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4REFBOEQ7QUFDN0U7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOERBQThEO0FBQzdFO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL01hdHJpeDMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBBZGFwdGVkIGZyb20gW2dsLW1hdHJpeF0oaHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4KSBieSB0b2ppXHJcbi8vICBhbmQgW3ZlY21hdGhdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC92ZWNtYXRoKSBieSBtYXR0ZGVzbFxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgdGhyZWUtZGltZW5zaW9uYWwgbWF0cml4LlxyXG4gKlxyXG4gKiBEZWZhdWx0cyB0byB0aGUgaWRlbnRpdHkgbWF0cml4IHdoZW4gaW5zdGFudGlhdGVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgTWF0cml4M1xyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLk1hdGhcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFttXSAtIE9wdGlvbmFsIE1hdHJpeDMgdG8gY29weSB2YWx1ZXMgZnJvbS5cclxuICovXHJcbnZhciBNYXRyaXgzID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1hdHJpeDMgKG0pXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1hdHJpeCB2YWx1ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5NYXRyaXgzI3ZhbFxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52YWwgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xyXG5cclxuICAgICAgICBpZiAobSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBBc3N1bWUgTWF0cml4MyB3aXRoIHZhbDpcclxuICAgICAgICAgICAgdGhpcy5jb3B5KG0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRGVmYXVsdCB0byBpZGVudGl0eVxyXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ha2UgYSBjbG9uZSBvZiB0aGlzIE1hdHJpeDMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXgzI2Nsb25lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBBIGNsb25lIG9mIHRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXgzKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIGZvciBgTWF0cml4My5jb3B5YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDMjc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDN9IHNyYyAtIFRoZSBNYXRyaXggdG8gc2V0IHRoZSB2YWx1ZXMgb2YgdGhpcyBNYXRyaXgncyBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvcHkoc3JjKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgb2YgYSBnaXZlbiBNYXRyaXggaW50byB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDMjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBzcmMgLSBUaGUgTWF0cml4IHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIGEgPSBzcmMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFs3XSA9IGFbN107XHJcbiAgICAgICAgb3V0WzhdID0gYVs4XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIG9mIGEgZ2l2ZW4gTWF0cml4NCBpbnRvIHRoaXMgTWF0cml4My5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDMjZnJvbU1hdDRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gbSAtIFRoZSBNYXRyaXg0IHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChtKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gbS52YWw7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gPSBhWzRdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzVdID0gYVs2XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICAgICAgb3V0WzhdID0gYVsxMF07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmFsdWVzIG9mIHRoaXMgTWF0cml4IGZyb20gdGhlIGdpdmVuIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNmcm9tQXJyYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGEgLSBUaGUgYXJyYXkgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4M30gVGhpcyBNYXRyaXgzLlxyXG4gICAgICovXHJcbiAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uIChhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzNdID0gYVszXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgICAgIG91dFs4XSA9IGFbOF07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoaXMgTWF0cml4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXgzI2lkZW50aXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBUaGlzIE1hdHJpeDMuXHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gMTtcclxuICAgICAgICBvdXRbMV0gPSAwO1xyXG4gICAgICAgIG91dFsyXSA9IDA7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuICAgICAgICBvdXRbNF0gPSAxO1xyXG4gICAgICAgIG91dFs1XSA9IDA7XHJcbiAgICAgICAgb3V0WzZdID0gMDtcclxuICAgICAgICBvdXRbN10gPSAwO1xyXG4gICAgICAgIG91dFs4XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDMjdHJhbnNwb3NlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBUaGlzIE1hdHJpeDMuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzVdO1xyXG5cclxuICAgICAgICBhWzFdID0gYVszXTtcclxuICAgICAgICBhWzJdID0gYVs2XTtcclxuICAgICAgICBhWzNdID0gYTAxO1xyXG4gICAgICAgIGFbNV0gPSBhWzddO1xyXG4gICAgICAgIGFbNl0gPSBhMDI7XHJcbiAgICAgICAgYVs3XSA9IGExMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNpbnZlcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIHZhciBhMDAgPSBhWzBdO1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMTAgPSBhWzNdO1xyXG4gICAgICAgIHZhciBhMTEgPSBhWzRdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzVdO1xyXG4gICAgICAgIHZhciBhMjAgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMjEgPSBhWzddO1xyXG4gICAgICAgIHZhciBhMjIgPSBhWzhdO1xyXG5cclxuICAgICAgICB2YXIgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIHZhciBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xyXG4gICAgICAgIHZhciBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICB2YXIgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxO1xyXG5cclxuICAgICAgICBpZiAoIWRldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGV0ID0gMSAvIGRldDtcclxuXHJcbiAgICAgICAgYVswXSA9IGIwMSAqIGRldDtcclxuICAgICAgICBhWzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xyXG4gICAgICAgIGFbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcclxuICAgICAgICBhWzNdID0gYjExICogZGV0O1xyXG4gICAgICAgIGFbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcclxuICAgICAgICBhWzVdID0gKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0O1xyXG4gICAgICAgIGFbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICAgICAgYVs3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcclxuICAgICAgICBhWzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqb2ludCwgb3IgYWRqdWdhdGUsIG9mIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNhZGpvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBUaGlzIE1hdHJpeDMuXHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGExMCA9IGFbM107XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNV07XHJcbiAgICAgICAgdmFyIGEyMCA9IGFbNl07XHJcbiAgICAgICAgdmFyIGEyMSA9IGFbN107XHJcbiAgICAgICAgdmFyIGEyMiA9IGFbOF07XHJcblxyXG4gICAgICAgIGFbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgICAgICBhWzFdID0gKGEwMiAqIGEyMSAtIGEwMSAqIGEyMik7XHJcbiAgICAgICAgYVsyXSA9IChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpO1xyXG4gICAgICAgIGFbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgICAgICBhWzRdID0gKGEwMCAqIGEyMiAtIGEwMiAqIGEyMCk7XHJcbiAgICAgICAgYVs1XSA9IChhMDIgKiBhMTAgLSBhMDAgKiBhMTIpO1xyXG4gICAgICAgIGFbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgICAgICBhWzddID0gKGEwMSAqIGEyMCAtIGEwMCAqIGEyMSk7XHJcbiAgICAgICAgYVs4XSA9IChhMDAgKiBhMTEgLSBhMDEgKiBhMTApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50IG9mIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNkZXRlcm1pbmFudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgdGhpcyBNYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIHZhciBhMDAgPSBhWzBdO1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMTAgPSBhWzNdO1xyXG4gICAgICAgIHZhciBhMTEgPSBhWzRdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzVdO1xyXG4gICAgICAgIHZhciBhMjAgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMjEgPSBhWzddO1xyXG4gICAgICAgIHZhciBhMjIgPSBhWzhdO1xyXG5cclxuICAgICAgICByZXR1cm4gYTAwICogKGEyMiAqIGExMSAtIGExMiAqIGEyMSkgKyBhMDEgKiAoLWEyMiAqIGExMCArIGExMiAqIGEyMCkgKyBhMDIgKiAoYTIxICogYTEwIC0gYTExICogYTIwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSB0aGlzIE1hdHJpeCBieSB0aGUgZ2l2ZW4gTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNtdWx0aXBseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBzcmMgLSBUaGUgTWF0cml4IHRvIG11bHRpcGx5IHRoaXMgTWF0cml4IGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGExMCA9IGFbM107XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNV07XHJcbiAgICAgICAgdmFyIGEyMCA9IGFbNl07XHJcbiAgICAgICAgdmFyIGEyMSA9IGFbN107XHJcbiAgICAgICAgdmFyIGEyMiA9IGFbOF07XHJcblxyXG4gICAgICAgIHZhciBiID0gc3JjLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGIwMCA9IGJbMF07XHJcbiAgICAgICAgdmFyIGIwMSA9IGJbMV07XHJcbiAgICAgICAgdmFyIGIwMiA9IGJbMl07XHJcbiAgICAgICAgdmFyIGIxMCA9IGJbM107XHJcbiAgICAgICAgdmFyIGIxMSA9IGJbNF07XHJcbiAgICAgICAgdmFyIGIxMiA9IGJbNV07XHJcbiAgICAgICAgdmFyIGIyMCA9IGJbNl07XHJcbiAgICAgICAgdmFyIGIyMSA9IGJbN107XHJcbiAgICAgICAgdmFyIGIyMiA9IGJbOF07XHJcblxyXG4gICAgICAgIGFbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XHJcbiAgICAgICAgYVsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgICAgICBhWzJdID0gYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyO1xyXG5cclxuICAgICAgICBhWzNdID0gYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwO1xyXG4gICAgICAgIGFbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICAgICAgYVs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcclxuXHJcbiAgICAgICAgYVs2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcclxuICAgICAgICBhWzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgICAgIGFbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSB0aGlzIE1hdHJpeCB1c2luZyB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyN0cmFuc2xhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yM3xQaGFzZXIuTWF0aC5WZWN0b3I0KX0gdiAtIFRoZSBWZWN0b3IgdG8gdHJhbnNsYXRlIHRoaXMgTWF0cml4IHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4M30gVGhpcyBNYXRyaXgzLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIHggPSB2Lng7XHJcbiAgICAgICAgdmFyIHkgPSB2Lnk7XHJcblxyXG4gICAgICAgIGFbNl0gPSB4ICogYVswXSArIHkgKiBhWzNdICsgYVs2XTtcclxuICAgICAgICBhWzddID0geCAqIGFbMV0gKyB5ICogYVs0XSArIGFbN107XHJcbiAgICAgICAgYVs4XSA9IHggKiBhWzJdICsgeSAqIGFbNV0gKyBhWzhdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4MyNyb3RhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWQgLSBUaGUgYW5nbGUgaW4gcmFkaWFucyB0byByb3RhdGUgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4M30gVGhpcyBNYXRyaXgzLlxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uIChyYWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGExMCA9IGFbM107XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNV07XHJcblxyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgICAgIGFbMF0gPSBjICogYTAwICsgcyAqIGExMDtcclxuICAgICAgICBhWzFdID0gYyAqIGEwMSArIHMgKiBhMTE7XHJcbiAgICAgICAgYVsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgICAgICBhWzNdID0gYyAqIGExMCAtIHMgKiBhMDA7XHJcbiAgICAgICAgYVs0XSA9IGMgKiBhMTEgLSBzICogYTAxO1xyXG4gICAgICAgIGFbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBVc2VzIHRoZSBgeGAgYW5kIGB5YCBjb21wb25lbnRzIG9mIHRoZSBnaXZlbiBWZWN0b3IgdG8gc2NhbGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDMjc2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yM3xQaGFzZXIuTWF0aC5WZWN0b3I0KX0gdiAtIFRoZSBWZWN0b3IgdG8gc2NhbGUgdGhpcyBNYXRyaXggd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXgzfSBUaGlzIE1hdHJpeDMuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG4gICAgICAgIHZhciB4ID0gdi54O1xyXG4gICAgICAgIHZhciB5ID0gdi55O1xyXG5cclxuICAgICAgICBhWzBdID0geCAqIGFbMF07XHJcbiAgICAgICAgYVsxXSA9IHggKiBhWzFdO1xyXG4gICAgICAgIGFbMl0gPSB4ICogYVsyXTtcclxuXHJcbiAgICAgICAgYVszXSA9IHkgKiBhWzNdO1xyXG4gICAgICAgIGFbNF0gPSB5ICogYVs0XTtcclxuICAgICAgICBhWzVdID0geSAqIGFbNV07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmFsdWVzIG9mIHRoaXMgTWF0cml4IGZyb20gdGhlIGdpdmVuIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXgzI2Zyb21RdWF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IHEgLSBUaGUgUXVhdGVybmlvbiB0byBzZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDN9IFRoaXMgTWF0cml4My5cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gcS54O1xyXG4gICAgICAgIHZhciB5ID0gcS55O1xyXG4gICAgICAgIHZhciB6ID0gcS56O1xyXG4gICAgICAgIHZhciB3ID0gcS53O1xyXG5cclxuICAgICAgICB2YXIgeDIgPSB4ICsgeDtcclxuICAgICAgICB2YXIgeTIgPSB5ICsgeTtcclxuICAgICAgICB2YXIgejIgPSB6ICsgejtcclxuXHJcbiAgICAgICAgdmFyIHh4ID0geCAqIHgyO1xyXG4gICAgICAgIHZhciB4eSA9IHggKiB5MjtcclxuICAgICAgICB2YXIgeHogPSB4ICogejI7XHJcblxyXG4gICAgICAgIHZhciB5eSA9IHkgKiB5MjtcclxuICAgICAgICB2YXIgeXogPSB5ICogejI7XHJcbiAgICAgICAgdmFyIHp6ID0geiAqIHoyO1xyXG5cclxuICAgICAgICB2YXIgd3ggPSB3ICogeDI7XHJcbiAgICAgICAgdmFyIHd5ID0gdyAqIHkyO1xyXG4gICAgICAgIHZhciB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgICAgIG91dFszXSA9IHh5ICsgd3o7XHJcbiAgICAgICAgb3V0WzZdID0geHogLSB3eTtcclxuXHJcbiAgICAgICAgb3V0WzFdID0geHkgLSB3ejtcclxuICAgICAgICBvdXRbNF0gPSAxIC0gKHh4ICsgenopO1xyXG4gICAgICAgIG91dFs3XSA9IHl6ICsgd3g7XHJcblxyXG4gICAgICAgIG91dFsyXSA9IHh6ICsgd3k7XHJcbiAgICAgICAgb3V0WzVdID0geXogLSB3eDtcclxuICAgICAgICBvdXRbOF0gPSAxIC0gKHh4ICsgeXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXgzI25vcm1hbEZyb21NYXQ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDR9IG0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4M30gVGhpcyBNYXRyaXgzLlxyXG4gICAgICovXHJcbiAgICBub3JtYWxGcm9tTWF0NDogZnVuY3Rpb24gKG0pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSBtLnZhbDtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIHZhciBhMDAgPSBhWzBdO1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMDMgPSBhWzNdO1xyXG5cclxuICAgICAgICB2YXIgYTEwID0gYVs0XTtcclxuICAgICAgICB2YXIgYTExID0gYVs1XTtcclxuICAgICAgICB2YXIgYTEyID0gYVs2XTtcclxuICAgICAgICB2YXIgYTEzID0gYVs3XTtcclxuXHJcbiAgICAgICAgdmFyIGEyMCA9IGFbOF07XHJcbiAgICAgICAgdmFyIGEyMSA9IGFbOV07XHJcbiAgICAgICAgdmFyIGEyMiA9IGFbMTBdO1xyXG4gICAgICAgIHZhciBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgdmFyIGEzMCA9IGFbMTJdO1xyXG4gICAgICAgIHZhciBhMzEgPSBhWzEzXTtcclxuICAgICAgICB2YXIgYTMyID0gYVsxNF07XHJcbiAgICAgICAgdmFyIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgICAgICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xyXG4gICAgICAgIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XHJcbiAgICAgICAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcclxuICAgICAgICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xyXG5cclxuICAgICAgICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XHJcbiAgICAgICAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG5cclxuICAgICAgICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xyXG4gICAgICAgIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XHJcbiAgICAgICAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcclxuICAgICAgICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgdmFyIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxuXHJcbiAgICAgICAgaWYgKCFkZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRldCA9IDEgLyBkZXQ7XHJcblxyXG4gICAgICAgIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgICAgIG91dFsxXSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xyXG4gICAgICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgICAgICBvdXRbM10gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcclxuICAgICAgICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcclxuICAgICAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICAgICAgb3V0WzZdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICAgICAgb3V0WzddID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XHJcbiAgICAgICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Matrix3.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Matrix4.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Matrix4.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\nvar EPSILON = 0.000001;\r\n\r\n/**\r\n * @classdesc\r\n * A four-dimensional matrix.\r\n *\r\n * @class Matrix4\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Matrix4} [m] - Optional Matrix4 to copy values from.\r\n */\r\nvar Matrix4 = new Class({\r\n\r\n    initialize:\r\n\r\n    function Matrix4 (m)\r\n    {\r\n        /**\r\n         * The matrix values.\r\n         *\r\n         * @name Phaser.Math.Matrix4#val\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.val = new Float32Array(16);\r\n\r\n        if (m)\r\n        {\r\n            //  Assume Matrix4 with val:\r\n            this.copy(m);\r\n        }\r\n        else\r\n        {\r\n            //  Default to identity\r\n            this.identity();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Make a clone of this Matrix4.\r\n     *\r\n     * @method Phaser.Math.Matrix4#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} A clone of this Matrix4.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Matrix4(this);\r\n    },\r\n\r\n    //  TODO - Should work with basic values\r\n\r\n    /**\r\n     * This method is an alias for `Matrix4.copy`.\r\n     *\r\n     * @method Phaser.Math.Matrix4#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} src - The Matrix to set the values of this Matrix's from.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    set: function (src)\r\n    {\r\n        return this.copy(src);\r\n    },\r\n\r\n    /**\r\n     * Copy the values of a given Matrix into this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} src - The Matrix to copy the values from.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        var out = this.val;\r\n        var a = src.val;\r\n\r\n        out[0] = a[0];\r\n        out[1] = a[1];\r\n        out[2] = a[2];\r\n        out[3] = a[3];\r\n        out[4] = a[4];\r\n        out[5] = a[5];\r\n        out[6] = a[6];\r\n        out[7] = a[7];\r\n        out[8] = a[8];\r\n        out[9] = a[9];\r\n        out[10] = a[10];\r\n        out[11] = a[11];\r\n        out[12] = a[12];\r\n        out[13] = a[13];\r\n        out[14] = a[14];\r\n        out[15] = a[15];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix from the given array.\r\n     *\r\n     * @method Phaser.Math.Matrix4#fromArray\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} a - The array to copy the values from.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    fromArray: function (a)\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = a[0];\r\n        out[1] = a[1];\r\n        out[2] = a[2];\r\n        out[3] = a[3];\r\n        out[4] = a[4];\r\n        out[5] = a[5];\r\n        out[6] = a[6];\r\n        out[7] = a[7];\r\n        out[8] = a[8];\r\n        out[9] = a[9];\r\n        out[10] = a[10];\r\n        out[11] = a[11];\r\n        out[12] = a[12];\r\n        out[13] = a[13];\r\n        out[14] = a[14];\r\n        out[15] = a[15];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Reset this Matrix.\r\n     *\r\n     * Sets all values to `0`.\r\n     *\r\n     * @method Phaser.Math.Matrix4#zero\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    zero: function ()\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = 0;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n        out[4] = 0;\r\n        out[5] = 0;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n        out[8] = 0;\r\n        out[9] = 0;\r\n        out[10] = 0;\r\n        out[11] = 0;\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = 0;\r\n        out[15] = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the `x`, `y` and `z` values of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#xyz\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x value.\r\n     * @param {number} y - The y value.\r\n     * @param {number} z - The z value.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    xyz: function (x, y, z)\r\n    {\r\n        this.identity();\r\n\r\n        var out = this.val;\r\n\r\n        out[12] = x;\r\n        out[13] = y;\r\n        out[14] = z;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the scaling values of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#scaling\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x scaling value.\r\n     * @param {number} y - The y scaling value.\r\n     * @param {number} z - The z scaling value.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    scaling: function (x, y, z)\r\n    {\r\n        this.zero();\r\n\r\n        var out = this.val;\r\n\r\n        out[0] = x;\r\n        out[5] = y;\r\n        out[10] = z;\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Reset this Matrix to an identity (default) matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#identity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    identity: function ()\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = 1;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n        out[4] = 0;\r\n        out[5] = 1;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n        out[8] = 0;\r\n        out[9] = 0;\r\n        out[10] = 1;\r\n        out[11] = 0;\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = 0;\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transpose this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#transpose\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    transpose: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n        var a23 = a[11];\r\n\r\n        a[1] = a[4];\r\n        a[2] = a[8];\r\n        a[3] = a[12];\r\n        a[4] = a01;\r\n        a[6] = a[9];\r\n        a[7] = a[13];\r\n        a[8] = a02;\r\n        a[9] = a12;\r\n        a[11] = a[14];\r\n        a[12] = a03;\r\n        a[13] = a13;\r\n        a[14] = a23;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Invert this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#invert\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    invert: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        var a30 = a[12];\r\n        var a31 = a[13];\r\n        var a32 = a[14];\r\n        var a33 = a[15];\r\n\r\n        var b00 = a00 * a11 - a01 * a10;\r\n        var b01 = a00 * a12 - a02 * a10;\r\n        var b02 = a00 * a13 - a03 * a10;\r\n        var b03 = a01 * a12 - a02 * a11;\r\n\r\n        var b04 = a01 * a13 - a03 * a11;\r\n        var b05 = a02 * a13 - a03 * a12;\r\n        var b06 = a20 * a31 - a21 * a30;\r\n        var b07 = a20 * a32 - a22 * a30;\r\n\r\n        var b08 = a20 * a33 - a23 * a30;\r\n        var b09 = a21 * a32 - a22 * a31;\r\n        var b10 = a21 * a33 - a23 * a31;\r\n        var b11 = a22 * a33 - a23 * a32;\r\n\r\n        // Calculate the determinant\r\n        var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n        if (!det)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        det = 1 / det;\r\n\r\n        a[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n        a[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n        a[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n        a[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\r\n        a[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n        a[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n        a[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n        a[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\r\n        a[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n        a[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n        a[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n        a[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\r\n        a[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\r\n        a[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\r\n        a[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\r\n        a[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the adjoint, or adjugate, of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#adjoint\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    adjoint: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        var a30 = a[12];\r\n        var a31 = a[13];\r\n        var a32 = a[14];\r\n        var a33 = a[15];\r\n\r\n        a[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\r\n        a[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\r\n        a[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\r\n        a[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\r\n        a[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\r\n        a[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\r\n        a[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\r\n        a[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\r\n        a[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\r\n        a[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\r\n        a[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\r\n        a[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\r\n        a[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\r\n        a[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\r\n        a[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\r\n        a[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the determinant of this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#determinant\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The determinant of this Matrix.\r\n     */\r\n    determinant: function ()\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        var a30 = a[12];\r\n        var a31 = a[13];\r\n        var a32 = a[14];\r\n        var a33 = a[15];\r\n\r\n        var b00 = a00 * a11 - a01 * a10;\r\n        var b01 = a00 * a12 - a02 * a10;\r\n        var b02 = a00 * a13 - a03 * a10;\r\n        var b03 = a01 * a12 - a02 * a11;\r\n        var b04 = a01 * a13 - a03 * a11;\r\n        var b05 = a02 * a13 - a03 * a12;\r\n        var b06 = a20 * a31 - a21 * a30;\r\n        var b07 = a20 * a32 - a22 * a30;\r\n        var b08 = a20 * a33 - a23 * a30;\r\n        var b09 = a21 * a32 - a22 * a31;\r\n        var b10 = a21 * a33 - a23 * a31;\r\n        var b11 = a22 * a33 - a23 * a32;\r\n\r\n        // Calculate the determinant\r\n        return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n    },\r\n\r\n    /**\r\n     * Multiply this Matrix by the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} src - The Matrix to multiply this Matrix by.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    multiply: function (src)\r\n    {\r\n        var a = this.val;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        var a30 = a[12];\r\n        var a31 = a[13];\r\n        var a32 = a[14];\r\n        var a33 = a[15];\r\n\r\n        var b = src.val;\r\n\r\n        // Cache only the current line of the second matrix\r\n        var b0 = b[0];\r\n        var b1 = b[1];\r\n        var b2 = b[2];\r\n        var b3 = b[3];\r\n\r\n        a[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        a[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        a[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        a[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[4];\r\n        b1 = b[5];\r\n        b2 = b[6];\r\n        b3 = b[7];\r\n\r\n        a[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        a[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        a[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        a[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[8];\r\n        b1 = b[9];\r\n        b2 = b[10];\r\n        b3 = b[11];\r\n\r\n        a[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        a[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        a[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        a[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[12];\r\n        b1 = b[13];\r\n        b2 = b[14];\r\n        b3 = b[15];\r\n\r\n        a[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        a[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        a[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        a[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Math.Matrix4#multiplyLocal\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} src - [description]\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    multiplyLocal: function (src)\r\n    {\r\n        var a = [];\r\n        var m1 = this.val;\r\n        var m2 = src.val;\r\n\r\n        a[0] = m1[0] * m2[0] + m1[1] * m2[4] + m1[2] * m2[8] + m1[3] * m2[12];\r\n        a[1] = m1[0] * m2[1] + m1[1] * m2[5] + m1[2] * m2[9] + m1[3] * m2[13];\r\n        a[2] = m1[0] * m2[2] + m1[1] * m2[6] + m1[2] * m2[10] + m1[3] * m2[14];\r\n        a[3] = m1[0] * m2[3] + m1[1] * m2[7] + m1[2] * m2[11] + m1[3] * m2[15];\r\n\r\n        a[4] = m1[4] * m2[0] + m1[5] * m2[4] + m1[6] * m2[8] + m1[7] * m2[12];\r\n        a[5] = m1[4] * m2[1] + m1[5] * m2[5] + m1[6] * m2[9] + m1[7] * m2[13];\r\n        a[6] = m1[4] * m2[2] + m1[5] * m2[6] + m1[6] * m2[10] + m1[7] * m2[14];\r\n        a[7] = m1[4] * m2[3] + m1[5] * m2[7] + m1[6] * m2[11] + m1[7] * m2[15];\r\n\r\n        a[8] = m1[8] * m2[0] + m1[9] * m2[4] + m1[10] * m2[8] + m1[11] * m2[12];\r\n        a[9] = m1[8] * m2[1] + m1[9] * m2[5] + m1[10] * m2[9] + m1[11] * m2[13];\r\n        a[10] = m1[8] * m2[2] + m1[9] * m2[6] + m1[10] * m2[10] + m1[11] * m2[14];\r\n        a[11] = m1[8] * m2[3] + m1[9] * m2[7] + m1[10] * m2[11] + m1[11] * m2[15];\r\n\r\n        a[12] = m1[12] * m2[0] + m1[13] * m2[4] + m1[14] * m2[8] + m1[15] * m2[12];\r\n        a[13] = m1[12] * m2[1] + m1[13] * m2[5] + m1[14] * m2[9] + m1[15] * m2[13];\r\n        a[14] = m1[12] * m2[2] + m1[13] * m2[6] + m1[14] * m2[10] + m1[15] * m2[14];\r\n        a[15] = m1[12] * m2[3] + m1[13] * m2[7] + m1[14] * m2[11] + m1[15] * m2[15];\r\n\r\n        return this.fromArray(a);\r\n    },\r\n\r\n    /**\r\n     * Translate this Matrix using the given Vector.\r\n     *\r\n     * @method Phaser.Math.Matrix4#translate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to translate this Matrix with.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    translate: function (v)\r\n    {\r\n        var x = v.x;\r\n        var y = v.y;\r\n        var z = v.z;\r\n        var a = this.val;\r\n\r\n        a[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\r\n        a[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\r\n        a[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\r\n        a[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Translate this Matrix using the given values.\r\n     *\r\n     * @method Phaser.Math.Matrix4#translateXYZ\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    translateXYZ: function (x, y, z)\r\n    {\r\n        var a = this.val;\r\n\r\n        a[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\r\n        a[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\r\n        a[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\r\n        a[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply a scale transformation to this Matrix.\r\n     *\r\n     * Uses the `x`, `y` and `z` components of the given Vector to scale the Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to scale this Matrix with.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    scale: function (v)\r\n    {\r\n        var x = v.x;\r\n        var y = v.y;\r\n        var z = v.z;\r\n        var a = this.val;\r\n\r\n        a[0] = a[0] * x;\r\n        a[1] = a[1] * x;\r\n        a[2] = a[2] * x;\r\n        a[3] = a[3] * x;\r\n\r\n        a[4] = a[4] * y;\r\n        a[5] = a[5] * y;\r\n        a[6] = a[6] * y;\r\n        a[7] = a[7] * y;\r\n\r\n        a[8] = a[8] * z;\r\n        a[9] = a[9] * z;\r\n        a[10] = a[10] * z;\r\n        a[11] = a[11] * z;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply a scale transformation to this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#scaleXYZ\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    scaleXYZ: function (x, y, z)\r\n    {\r\n        var a = this.val;\r\n\r\n        a[0] = a[0] * x;\r\n        a[1] = a[1] * x;\r\n        a[2] = a[2] * x;\r\n        a[3] = a[3] * x;\r\n\r\n        a[4] = a[4] * y;\r\n        a[5] = a[5] * y;\r\n        a[6] = a[6] * y;\r\n        a[7] = a[7] * y;\r\n\r\n        a[8] = a[8] * z;\r\n        a[9] = a[9] * z;\r\n        a[10] = a[10] * z;\r\n        a[11] = a[11] * z;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Derive a rotation matrix around the given axis.\r\n     *\r\n     * @method Phaser.Math.Matrix4#makeRotationAxis\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} axis - The rotation axis.\r\n     * @param {number} angle - The rotation angle in radians.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    makeRotationAxis: function (axis, angle)\r\n    {\r\n        // Based on http://www.gamedev.net/reference/articles/article1199.asp\r\n\r\n        var c = Math.cos(angle);\r\n        var s = Math.sin(angle);\r\n        var t = 1 - c;\r\n        var x = axis.x;\r\n        var y = axis.y;\r\n        var z = axis.z;\r\n        var tx = t * x;\r\n        var ty = t * y;\r\n\r\n        this.fromArray([\r\n            tx * x + c, tx * y - s * z, tx * z + s * y, 0,\r\n            tx * y + s * z, ty * y + c, ty * z - s * x, 0,\r\n            tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\r\n            0, 0, 0, 1\r\n        ]);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply a rotation transformation to this Matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#rotate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The angle in radians to rotate by.\r\n     * @param {Phaser.Math.Vector3} axis - The axis to rotate upon.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    rotate: function (rad, axis)\r\n    {\r\n        var a = this.val;\r\n        var x = axis.x;\r\n        var y = axis.y;\r\n        var z = axis.z;\r\n        var len = Math.sqrt(x * x + y * y + z * z);\r\n\r\n        if (Math.abs(len) < EPSILON)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        len = 1 / len;\r\n        x *= len;\r\n        y *= len;\r\n        z *= len;\r\n\r\n        var s = Math.sin(rad);\r\n        var c = Math.cos(rad);\r\n        var t = 1 - c;\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        // Construct the elements of the rotation matrix\r\n        var b00 = x * x * t + c;\r\n        var b01 = y * x * t + z * s;\r\n        var b02 = z * x * t - y * s;\r\n\r\n        var b10 = x * y * t - z * s;\r\n        var b11 = y * y * t + c;\r\n        var b12 = z * y * t + x * s;\r\n\r\n        var b20 = x * z * t + y * s;\r\n        var b21 = y * z * t - x * s;\r\n        var b22 = z * z * t + c;\r\n\r\n        // Perform rotation-specific matrix multiplication\r\n        a[0] = a00 * b00 + a10 * b01 + a20 * b02;\r\n        a[1] = a01 * b00 + a11 * b01 + a21 * b02;\r\n        a[2] = a02 * b00 + a12 * b01 + a22 * b02;\r\n        a[3] = a03 * b00 + a13 * b01 + a23 * b02;\r\n        a[4] = a00 * b10 + a10 * b11 + a20 * b12;\r\n        a[5] = a01 * b10 + a11 * b11 + a21 * b12;\r\n        a[6] = a02 * b10 + a12 * b11 + a22 * b12;\r\n        a[7] = a03 * b10 + a13 * b11 + a23 * b12;\r\n        a[8] = a00 * b20 + a10 * b21 + a20 * b22;\r\n        a[9] = a01 * b20 + a11 * b21 + a21 * b22;\r\n        a[10] = a02 * b20 + a12 * b21 + a22 * b22;\r\n        a[11] = a03 * b20 + a13 * b21 + a23 * b22;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this matrix on its X axis.\r\n     *\r\n     * @method Phaser.Math.Matrix4#rotateX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The angle in radians to rotate by.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    rotateX: function (rad)\r\n    {\r\n        var a = this.val;\r\n        var s = Math.sin(rad);\r\n        var c = Math.cos(rad);\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        // Perform axis-specific matrix multiplication\r\n        a[4] = a10 * c + a20 * s;\r\n        a[5] = a11 * c + a21 * s;\r\n        a[6] = a12 * c + a22 * s;\r\n        a[7] = a13 * c + a23 * s;\r\n        a[8] = a20 * c - a10 * s;\r\n        a[9] = a21 * c - a11 * s;\r\n        a[10] = a22 * c - a12 * s;\r\n        a[11] = a23 * c - a13 * s;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this matrix on its Y axis.\r\n     *\r\n     * @method Phaser.Math.Matrix4#rotateY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The angle to rotate by, in radians.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    rotateY: function (rad)\r\n    {\r\n        var a = this.val;\r\n        var s = Math.sin(rad);\r\n        var c = Math.cos(rad);\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a20 = a[8];\r\n        var a21 = a[9];\r\n        var a22 = a[10];\r\n        var a23 = a[11];\r\n\r\n        // Perform axis-specific matrix multiplication\r\n        a[0] = a00 * c - a20 * s;\r\n        a[1] = a01 * c - a21 * s;\r\n        a[2] = a02 * c - a22 * s;\r\n        a[3] = a03 * c - a23 * s;\r\n        a[8] = a00 * s + a20 * c;\r\n        a[9] = a01 * s + a21 * c;\r\n        a[10] = a02 * s + a22 * c;\r\n        a[11] = a03 * s + a23 * c;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this matrix on its Z axis.\r\n     *\r\n     * @method Phaser.Math.Matrix4#rotateZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The angle to rotate by, in radians.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    rotateZ: function (rad)\r\n    {\r\n        var a = this.val;\r\n        var s = Math.sin(rad);\r\n        var c = Math.cos(rad);\r\n\r\n        var a00 = a[0];\r\n        var a01 = a[1];\r\n        var a02 = a[2];\r\n        var a03 = a[3];\r\n\r\n        var a10 = a[4];\r\n        var a11 = a[5];\r\n        var a12 = a[6];\r\n        var a13 = a[7];\r\n\r\n        // Perform axis-specific matrix multiplication\r\n        a[0] = a00 * c + a10 * s;\r\n        a[1] = a01 * c + a11 * s;\r\n        a[2] = a02 * c + a12 * s;\r\n        a[3] = a03 * c + a13 * s;\r\n        a[4] = a10 * c - a00 * s;\r\n        a[5] = a11 * c - a01 * s;\r\n        a[6] = a12 * c - a02 * s;\r\n        a[7] = a13 * c - a03 * s;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix from the given rotation Quaternion and translation Vector.\r\n     *\r\n     * @method Phaser.Math.Matrix4#fromRotationTranslation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Quaternion} q - The Quaternion to set rotation from.\r\n     * @param {Phaser.Math.Vector3} v - The Vector to set translation from.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    fromRotationTranslation: function (q, v)\r\n    {\r\n        // Quaternion math\r\n        var out = this.val;\r\n\r\n        var x = q.x;\r\n        var y = q.y;\r\n        var z = q.z;\r\n        var w = q.w;\r\n\r\n        var x2 = x + x;\r\n        var y2 = y + y;\r\n        var z2 = z + z;\r\n\r\n        var xx = x * x2;\r\n        var xy = x * y2;\r\n        var xz = x * z2;\r\n\r\n        var yy = y * y2;\r\n        var yz = y * z2;\r\n        var zz = z * z2;\r\n\r\n        var wx = w * x2;\r\n        var wy = w * y2;\r\n        var wz = w * z2;\r\n\r\n        out[0] = 1 - (yy + zz);\r\n        out[1] = xy + wz;\r\n        out[2] = xz - wy;\r\n        out[3] = 0;\r\n\r\n        out[4] = xy - wz;\r\n        out[5] = 1 - (xx + zz);\r\n        out[6] = yz + wx;\r\n        out[7] = 0;\r\n\r\n        out[8] = xz + wy;\r\n        out[9] = yz - wx;\r\n        out[10] = 1 - (xx + yy);\r\n        out[11] = 0;\r\n\r\n        out[12] = v.x;\r\n        out[13] = v.y;\r\n        out[14] = v.z;\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this Matrix from the given Quaternion.\r\n     *\r\n     * @method Phaser.Math.Matrix4#fromQuat\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Quaternion} q - The Quaternion to set the values of this Matrix from.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    fromQuat: function (q)\r\n    {\r\n        var out = this.val;\r\n\r\n        var x = q.x;\r\n        var y = q.y;\r\n        var z = q.z;\r\n        var w = q.w;\r\n\r\n        var x2 = x + x;\r\n        var y2 = y + y;\r\n        var z2 = z + z;\r\n\r\n        var xx = x * x2;\r\n        var xy = x * y2;\r\n        var xz = x * z2;\r\n\r\n        var yy = y * y2;\r\n        var yz = y * z2;\r\n        var zz = z * z2;\r\n\r\n        var wx = w * x2;\r\n        var wy = w * y2;\r\n        var wz = w * z2;\r\n\r\n        out[0] = 1 - (yy + zz);\r\n        out[1] = xy + wz;\r\n        out[2] = xz - wy;\r\n        out[3] = 0;\r\n\r\n        out[4] = xy - wz;\r\n        out[5] = 1 - (xx + zz);\r\n        out[6] = yz + wx;\r\n        out[7] = 0;\r\n\r\n        out[8] = xz + wy;\r\n        out[9] = yz - wx;\r\n        out[10] = 1 - (xx + yy);\r\n        out[11] = 0;\r\n\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = 0;\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a frustum matrix with the given bounds.\r\n     *\r\n     * @method Phaser.Math.Matrix4#frustum\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} left - The left bound of the frustum.\r\n     * @param {number} right - The right bound of the frustum.\r\n     * @param {number} bottom - The bottom bound of the frustum.\r\n     * @param {number} top - The top bound of the frustum.\r\n     * @param {number} near - The near bound of the frustum.\r\n     * @param {number} far - The far bound of the frustum.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    frustum: function (left, right, bottom, top, near, far)\r\n    {\r\n        var out = this.val;\r\n\r\n        var rl = 1 / (right - left);\r\n        var tb = 1 / (top - bottom);\r\n        var nf = 1 / (near - far);\r\n\r\n        out[0] = (near * 2) * rl;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n\r\n        out[4] = 0;\r\n        out[5] = (near * 2) * tb;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n\r\n        out[8] = (right + left) * rl;\r\n        out[9] = (top + bottom) * tb;\r\n        out[10] = (far + near) * nf;\r\n        out[11] = -1;\r\n\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = (far * near * 2) * nf;\r\n        out[15] = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a perspective projection matrix with the given bounds.\r\n     *\r\n     * @method Phaser.Math.Matrix4#perspective\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} fovy - Vertical field of view in radians\r\n     * @param {number} aspect - Aspect ratio. Typically viewport width  /height.\r\n     * @param {number} near - Near bound of the frustum.\r\n     * @param {number} far - Far bound of the frustum.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    perspective: function (fovy, aspect, near, far)\r\n    {\r\n        var out = this.val;\r\n        var f = 1.0 / Math.tan(fovy / 2);\r\n        var nf = 1 / (near - far);\r\n\r\n        out[0] = f / aspect;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n\r\n        out[4] = 0;\r\n        out[5] = f;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n\r\n        out[8] = 0;\r\n        out[9] = 0;\r\n        out[10] = (far + near) * nf;\r\n        out[11] = -1;\r\n\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = (2 * far * near) * nf;\r\n        out[15] = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a perspective projection matrix with the given bounds.\r\n     *\r\n     * @method Phaser.Math.Matrix4#perspectiveLH\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the frustum.\r\n     * @param {number} height - The height of the frustum.\r\n     * @param {number} near - Near bound of the frustum.\r\n     * @param {number} far - Far bound of the frustum.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    perspectiveLH: function (width, height, near, far)\r\n    {\r\n        var out = this.val;\r\n\r\n        out[0] = (2 * near) / width;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n\r\n        out[4] = 0;\r\n        out[5] = (2 * near) / height;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n\r\n        out[8] = 0;\r\n        out[9] = 0;\r\n        out[10] = -far / (near - far);\r\n        out[11] = 1;\r\n\r\n        out[12] = 0;\r\n        out[13] = 0;\r\n        out[14] = (near * far) / (near - far);\r\n        out[15] = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate an orthogonal projection matrix with the given bounds.\r\n     *\r\n     * @method Phaser.Math.Matrix4#ortho\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} left - The left bound of the frustum.\r\n     * @param {number} right - The right bound of the frustum.\r\n     * @param {number} bottom - The bottom bound of the frustum.\r\n     * @param {number} top - The top bound of the frustum.\r\n     * @param {number} near - The near bound of the frustum.\r\n     * @param {number} far - The far bound of the frustum.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    ortho: function (left, right, bottom, top, near, far)\r\n    {\r\n        var out = this.val;\r\n        var lr = left - right;\r\n        var bt = bottom - top;\r\n        var nf = near - far;\r\n\r\n        //  Avoid division by zero\r\n        lr = (lr === 0) ? lr : 1 / lr;\r\n        bt = (bt === 0) ? bt : 1 / bt;\r\n        nf = (nf === 0) ? nf : 1 / nf;\r\n\r\n        out[0] = -2 * lr;\r\n        out[1] = 0;\r\n        out[2] = 0;\r\n        out[3] = 0;\r\n\r\n        out[4] = 0;\r\n        out[5] = -2 * bt;\r\n        out[6] = 0;\r\n        out[7] = 0;\r\n\r\n        out[8] = 0;\r\n        out[9] = 0;\r\n        out[10] = 2 * nf;\r\n        out[11] = 0;\r\n\r\n        out[12] = (left + right) * lr;\r\n        out[13] = (top + bottom) * bt;\r\n        out[14] = (far + near) * nf;\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a look-at matrix with the given eye position, focal point, and up axis.\r\n     *\r\n     * @method Phaser.Math.Matrix4#lookAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} eye - Position of the viewer\r\n     * @param {Phaser.Math.Vector3} center - Point the viewer is looking at\r\n     * @param {Phaser.Math.Vector3} up - vec3 pointing up.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    lookAt: function (eye, center, up)\r\n    {\r\n        var out = this.val;\r\n\r\n        var eyex = eye.x;\r\n        var eyey = eye.y;\r\n        var eyez = eye.z;\r\n\r\n        var upx = up.x;\r\n        var upy = up.y;\r\n        var upz = up.z;\r\n\r\n        var centerx = center.x;\r\n        var centery = center.y;\r\n        var centerz = center.z;\r\n\r\n        if (Math.abs(eyex - centerx) < EPSILON &&\r\n            Math.abs(eyey - centery) < EPSILON &&\r\n            Math.abs(eyez - centerz) < EPSILON)\r\n        {\r\n            return this.identity();\r\n        }\r\n\r\n        var z0 = eyex - centerx;\r\n        var z1 = eyey - centery;\r\n        var z2 = eyez - centerz;\r\n\r\n        var len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\r\n\r\n        z0 *= len;\r\n        z1 *= len;\r\n        z2 *= len;\r\n\r\n        var x0 = upy * z2 - upz * z1;\r\n        var x1 = upz * z0 - upx * z2;\r\n        var x2 = upx * z1 - upy * z0;\r\n\r\n        len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\r\n\r\n        if (!len)\r\n        {\r\n            x0 = 0;\r\n            x1 = 0;\r\n            x2 = 0;\r\n        }\r\n        else\r\n        {\r\n            len = 1 / len;\r\n            x0 *= len;\r\n            x1 *= len;\r\n            x2 *= len;\r\n        }\r\n\r\n        var y0 = z1 * x2 - z2 * x1;\r\n        var y1 = z2 * x0 - z0 * x2;\r\n        var y2 = z0 * x1 - z1 * x0;\r\n\r\n        len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\r\n\r\n        if (!len)\r\n        {\r\n            y0 = 0;\r\n            y1 = 0;\r\n            y2 = 0;\r\n        }\r\n        else\r\n        {\r\n            len = 1 / len;\r\n            y0 *= len;\r\n            y1 *= len;\r\n            y2 *= len;\r\n        }\r\n\r\n        out[0] = x0;\r\n        out[1] = y0;\r\n        out[2] = z0;\r\n        out[3] = 0;\r\n\r\n        out[4] = x1;\r\n        out[5] = y1;\r\n        out[6] = z1;\r\n        out[7] = 0;\r\n\r\n        out[8] = x2;\r\n        out[9] = y2;\r\n        out[10] = z2;\r\n        out[11] = 0;\r\n\r\n        out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\r\n        out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\r\n        out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\r\n        out[15] = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the values of this matrix from the given `yaw`, `pitch` and `roll` values.\r\n     *\r\n     * @method Phaser.Math.Matrix4#yawPitchRoll\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} yaw - [description]\r\n     * @param {number} pitch - [description]\r\n     * @param {number} roll - [description]\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    yawPitchRoll: function (yaw, pitch, roll)\r\n    {\r\n        this.zero();\r\n        _tempMat1.zero();\r\n        _tempMat2.zero();\r\n\r\n        var m0 = this.val;\r\n        var m1 = _tempMat1.val;\r\n        var m2 = _tempMat2.val;\r\n\r\n        //  Rotate Z\r\n        var s = Math.sin(roll);\r\n        var c = Math.cos(roll);\r\n\r\n        m0[10] = 1;\r\n        m0[15] = 1;\r\n        m0[0] = c;\r\n        m0[1] = s;\r\n        m0[4] = -s;\r\n        m0[5] = c;\r\n\r\n        //  Rotate X\r\n        s = Math.sin(pitch);\r\n        c = Math.cos(pitch);\r\n\r\n        m1[0] = 1;\r\n        m1[15] = 1;\r\n        m1[5] = c;\r\n        m1[10] = c;\r\n        m1[9] = -s;\r\n        m1[6] = s;\r\n\r\n        //  Rotate Y\r\n        s = Math.sin(yaw);\r\n        c = Math.cos(yaw);\r\n\r\n        m2[5] = 1;\r\n        m2[15] = 1;\r\n        m2[0] = c;\r\n        m2[2] = -s;\r\n        m2[8] = s;\r\n        m2[10] = c;\r\n\r\n        this.multiplyLocal(_tempMat1);\r\n        this.multiplyLocal(_tempMat2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generate a world matrix from the given rotation, position, scale, view matrix and projection matrix.\r\n     *\r\n     * @method Phaser.Math.Matrix4#setWorldMatrix\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} rotation - The rotation of the world matrix.\r\n     * @param {Phaser.Math.Vector3} position - The position of the world matrix.\r\n     * @param {Phaser.Math.Vector3} scale - The scale of the world matrix.\r\n     * @param {Phaser.Math.Matrix4} [viewMatrix] - The view matrix.\r\n     * @param {Phaser.Math.Matrix4} [projectionMatrix] - The projection matrix.\r\n     *\r\n     * @return {Phaser.Math.Matrix4} This Matrix4.\r\n     */\r\n    setWorldMatrix: function (rotation, position, scale, viewMatrix, projectionMatrix)\r\n    {\r\n        this.yawPitchRoll(rotation.y, rotation.x, rotation.z);\r\n\r\n        _tempMat1.scaling(scale.x, scale.y, scale.z);\r\n        _tempMat2.xyz(position.x, position.y, position.z);\r\n\r\n        this.multiplyLocal(_tempMat1);\r\n        this.multiplyLocal(_tempMat2);\r\n\r\n        if (viewMatrix !== undefined)\r\n        {\r\n            this.multiplyLocal(viewMatrix);\r\n        }\r\n\r\n        if (projectionMatrix !== undefined)\r\n        {\r\n            this.multiplyLocal(projectionMatrix);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nvar _tempMat1 = new Matrix4();\r\nvar _tempMat2 = new Matrix4();\r\n\r\nmodule.exports = Matrix4;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL01hdHJpeDQuanM/ZDBjOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMENBQTBDO0FBQ3pEO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMENBQTBDO0FBQ3pELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvTWF0cml4NC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEFkYXB0ZWQgZnJvbSBbZ2wtbWF0cml4XShodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgpIGJ5IHRvamlcclxuLy8gIGFuZCBbdmVjbWF0aF0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL3ZlY21hdGgpIGJ5IG1hdHRkZXNsXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxudmFyIEVQU0lMT04gPSAwLjAwMDAwMTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgZm91ci1kaW1lbnNpb25hbCBtYXRyaXguXHJcbiAqXHJcbiAqIEBjbGFzcyBNYXRyaXg0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTWF0aFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gW21dIC0gT3B0aW9uYWwgTWF0cml4NCB0byBjb3B5IHZhbHVlcyBmcm9tLlxyXG4gKi9cclxudmFyIE1hdHJpeDQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTWF0cml4NCAobSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF0cml4IHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLk1hdHJpeDQjdmFsXHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZhbCA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xyXG5cclxuICAgICAgICBpZiAobSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBBc3N1bWUgTWF0cml4NCB3aXRoIHZhbDpcclxuICAgICAgICAgICAgdGhpcy5jb3B5KG0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRGVmYXVsdCB0byBpZGVudGl0eVxyXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ha2UgYSBjbG9uZSBvZiB0aGlzIE1hdHJpeDQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2Nsb25lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBBIGNsb25lIG9mIHRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXg0KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyAgVE9ETyAtIFNob3VsZCB3b3JrIHdpdGggYmFzaWMgdmFsdWVzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBhbiBhbGlhcyBmb3IgYE1hdHJpeDQuY29weWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I3NldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBzcmMgLSBUaGUgTWF0cml4IHRvIHNldCB0aGUgdmFsdWVzIG9mIHRoaXMgTWF0cml4J3MgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3B5KHNyYyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIG9mIGEgZ2l2ZW4gTWF0cml4IGludG8gdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2NvcHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gc3JjIC0gVGhlIE1hdHJpeCB0byBjb3B5IHRoZSB2YWx1ZXMgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG4gICAgICAgIHZhciBhID0gc3JjLnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzNdID0gYVszXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICAgICAgb3V0WzldID0gYVs5XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB2YWx1ZXMgb2YgdGhpcyBNYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2Zyb21BcnJheVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gYSAtIFRoZSBhcnJheSB0byBjb3B5IHRoZSB2YWx1ZXMgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIGZyb21BcnJheTogZnVuY3Rpb24gKGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFs3XSA9IGFbN107XHJcbiAgICAgICAgb3V0WzhdID0gYVs4XTtcclxuICAgICAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgICAgIG91dFsxMF0gPSBhWzEwXTtcclxuICAgICAgICBvdXRbMTFdID0gYVsxMV07XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBTZXRzIGFsbCB2YWx1ZXMgdG8gYDBgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCN6ZXJvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHplcm86IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSAwO1xyXG4gICAgICAgIG91dFsxXSA9IDA7XHJcbiAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICBvdXRbM10gPSAwO1xyXG4gICAgICAgIG91dFs0XSA9IDA7XHJcbiAgICAgICAgb3V0WzVdID0gMDtcclxuICAgICAgICBvdXRbNl0gPSAwO1xyXG4gICAgICAgIG91dFs3XSA9IDA7XHJcbiAgICAgICAgb3V0WzhdID0gMDtcclxuICAgICAgICBvdXRbOV0gPSAwO1xyXG4gICAgICAgIG91dFsxMF0gPSAwO1xyXG4gICAgICAgIG91dFsxMV0gPSAwO1xyXG4gICAgICAgIG91dFsxMl0gPSAwO1xyXG4gICAgICAgIG91dFsxM10gPSAwO1xyXG4gICAgICAgIG91dFsxNF0gPSAwO1xyXG4gICAgICAgIG91dFsxNV0gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGB4YCwgYHlgIGFuZCBgemAgdmFsdWVzIG9mIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCN4eXpcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHh5ejogZnVuY3Rpb24gKHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pZGVudGl0eSgpO1xyXG5cclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSB4O1xyXG4gICAgICAgIG91dFsxM10gPSB5O1xyXG4gICAgICAgIG91dFsxNF0gPSB6O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNjYWxpbmcgdmFsdWVzIG9mIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCNzY2FsaW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHNjYWxpbmcgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHNjYWxpbmcgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSB6IHNjYWxpbmcgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBzY2FsaW5nOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnplcm8oKTtcclxuXHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSB4O1xyXG4gICAgICAgIG91dFs1XSA9IHk7XHJcbiAgICAgICAgb3V0WzEwXSA9IHo7XHJcbiAgICAgICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoaXMgTWF0cml4IHRvIGFuIGlkZW50aXR5IChkZWZhdWx0KSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2lkZW50aXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gMTtcclxuICAgICAgICBvdXRbMV0gPSAwO1xyXG4gICAgICAgIG91dFsyXSA9IDA7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuICAgICAgICBvdXRbNF0gPSAwO1xyXG4gICAgICAgIG91dFs1XSA9IDE7XHJcbiAgICAgICAgb3V0WzZdID0gMDtcclxuICAgICAgICBvdXRbN10gPSAwO1xyXG4gICAgICAgIG91dFs4XSA9IDA7XHJcbiAgICAgICAgb3V0WzldID0gMDtcclxuICAgICAgICBvdXRbMTBdID0gMTtcclxuICAgICAgICBvdXRbMTFdID0gMDtcclxuICAgICAgICBvdXRbMTJdID0gMDtcclxuICAgICAgICBvdXRbMTNdID0gMDtcclxuICAgICAgICBvdXRbMTRdID0gMDtcclxuICAgICAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCN0cmFuc3Bvc2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMDMgPSBhWzNdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSBhWzddO1xyXG4gICAgICAgIHZhciBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgYVsxXSA9IGFbNF07XHJcbiAgICAgICAgYVsyXSA9IGFbOF07XHJcbiAgICAgICAgYVszXSA9IGFbMTJdO1xyXG4gICAgICAgIGFbNF0gPSBhMDE7XHJcbiAgICAgICAgYVs2XSA9IGFbOV07XHJcbiAgICAgICAgYVs3XSA9IGFbMTNdO1xyXG4gICAgICAgIGFbOF0gPSBhMDI7XHJcbiAgICAgICAgYVs5XSA9IGExMjtcclxuICAgICAgICBhWzExXSA9IGFbMTRdO1xyXG4gICAgICAgIGFbMTJdID0gYTAzO1xyXG4gICAgICAgIGFbMTNdID0gYTEzO1xyXG4gICAgICAgIGFbMTRdID0gYTIzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2ludmVydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGEwMyA9IGFbM107XHJcblxyXG4gICAgICAgIHZhciBhMTAgPSBhWzRdO1xyXG4gICAgICAgIHZhciBhMTEgPSBhWzVdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSBhWzddO1xyXG5cclxuICAgICAgICB2YXIgYTIwID0gYVs4XTtcclxuICAgICAgICB2YXIgYTIxID0gYVs5XTtcclxuICAgICAgICB2YXIgYTIyID0gYVsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICB2YXIgYTMwID0gYVsxMl07XHJcbiAgICAgICAgdmFyIGEzMSA9IGFbMTNdO1xyXG4gICAgICAgIHZhciBhMzIgPSBhWzE0XTtcclxuICAgICAgICB2YXIgYTMzID0gYVsxNV07XHJcblxyXG4gICAgICAgIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XHJcbiAgICAgICAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcclxuICAgICAgICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xyXG4gICAgICAgIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XHJcblxyXG4gICAgICAgIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XHJcbiAgICAgICAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcclxuICAgICAgICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xyXG4gICAgICAgIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XHJcblxyXG4gICAgICAgIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XHJcbiAgICAgICAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgICAgICBpZiAoIWRldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGV0ID0gMSAvIGRldDtcclxuXHJcbiAgICAgICAgYVswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgICAgIGFbMV0gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcclxuICAgICAgICBhWzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICAgICAgYVszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xyXG4gICAgICAgIGFbNF0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgICAgICBhWzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICAgICAgYVs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgICAgIGFbN10gPSAoYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxKSAqIGRldDtcclxuICAgICAgICBhWzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XHJcbiAgICAgICAgYVs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xyXG4gICAgICAgIGFbMTBdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcbiAgICAgICAgYVsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcclxuICAgICAgICBhWzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xyXG4gICAgICAgIGFbMTNdID0gKGEwMCAqIGIwOSAtIGEwMSAqIGIwNyArIGEwMiAqIGIwNikgKiBkZXQ7XHJcbiAgICAgICAgYVsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcclxuICAgICAgICBhWzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkam9pbnQsIG9yIGFkanVnYXRlLCBvZiB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjYWRqb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIHZhciBhMDAgPSBhWzBdO1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBhWzJdO1xyXG4gICAgICAgIHZhciBhMDMgPSBhWzNdO1xyXG5cclxuICAgICAgICB2YXIgYTEwID0gYVs0XTtcclxuICAgICAgICB2YXIgYTExID0gYVs1XTtcclxuICAgICAgICB2YXIgYTEyID0gYVs2XTtcclxuICAgICAgICB2YXIgYTEzID0gYVs3XTtcclxuXHJcbiAgICAgICAgdmFyIGEyMCA9IGFbOF07XHJcbiAgICAgICAgdmFyIGEyMSA9IGFbOV07XHJcbiAgICAgICAgdmFyIGEyMiA9IGFbMTBdO1xyXG4gICAgICAgIHZhciBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgdmFyIGEzMCA9IGFbMTJdO1xyXG4gICAgICAgIHZhciBhMzEgPSBhWzEzXTtcclxuICAgICAgICB2YXIgYTMyID0gYVsxNF07XHJcbiAgICAgICAgdmFyIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgICAgICBhWzBdID0gKGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XHJcbiAgICAgICAgYVsxXSA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgICAgICBhWzJdID0gKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICAgICAgYVszXSA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgICAgICBhWzRdID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgICAgIGFbNV0gPSAoYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgICAgICBhWzZdID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgICAgIGFbN10gPSAoYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgICAgICBhWzhdID0gKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XHJcbiAgICAgICAgYVs5XSA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcclxuICAgICAgICBhWzEwXSA9IChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgICAgIGFbMTFdID0gLShhMDAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgICAgIGFbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xyXG4gICAgICAgIGFbMTNdID0gKGEwMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSk7XHJcbiAgICAgICAgYVsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICAgICAgYVsxNV0gPSAoYTAwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiB0aGlzIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjZGV0ZXJtaW5hbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRldGVybWluYW50IG9mIHRoaXMgTWF0cml4LlxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICB2YXIgYTAwID0gYVswXTtcclxuICAgICAgICB2YXIgYTAxID0gYVsxXTtcclxuICAgICAgICB2YXIgYTAyID0gYVsyXTtcclxuICAgICAgICB2YXIgYTAzID0gYVszXTtcclxuXHJcbiAgICAgICAgdmFyIGExMCA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNV07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNl07XHJcbiAgICAgICAgdmFyIGExMyA9IGFbN107XHJcblxyXG4gICAgICAgIHZhciBhMjAgPSBhWzhdO1xyXG4gICAgICAgIHZhciBhMjEgPSBhWzldO1xyXG4gICAgICAgIHZhciBhMjIgPSBhWzEwXTtcclxuICAgICAgICB2YXIgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIHZhciBhMzAgPSBhWzEyXTtcclxuICAgICAgICB2YXIgYTMxID0gYVsxM107XHJcbiAgICAgICAgdmFyIGEzMiA9IGFbMTRdO1xyXG4gICAgICAgIHZhciBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAgICAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcclxuICAgICAgICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xyXG4gICAgICAgIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XHJcbiAgICAgICAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcclxuICAgICAgICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XHJcbiAgICAgICAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG4gICAgICAgIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XHJcbiAgICAgICAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgTWF0cml4IGJ5IHRoZSBnaXZlbiBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I211bHRpcGx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDR9IHNyYyAtIFRoZSBNYXRyaXggdG8gbXVsdGlwbHkgdGhpcyBNYXRyaXggYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICB2YXIgYTAwID0gYVswXTtcclxuICAgICAgICB2YXIgYTAxID0gYVsxXTtcclxuICAgICAgICB2YXIgYTAyID0gYVsyXTtcclxuICAgICAgICB2YXIgYTAzID0gYVszXTtcclxuXHJcbiAgICAgICAgdmFyIGExMCA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNV07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNl07XHJcbiAgICAgICAgdmFyIGExMyA9IGFbN107XHJcblxyXG4gICAgICAgIHZhciBhMjAgPSBhWzhdO1xyXG4gICAgICAgIHZhciBhMjEgPSBhWzldO1xyXG4gICAgICAgIHZhciBhMjIgPSBhWzEwXTtcclxuICAgICAgICB2YXIgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIHZhciBhMzAgPSBhWzEyXTtcclxuICAgICAgICB2YXIgYTMxID0gYVsxM107XHJcbiAgICAgICAgdmFyIGEzMiA9IGFbMTRdO1xyXG4gICAgICAgIHZhciBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAgICAgdmFyIGIgPSBzcmMudmFsO1xyXG5cclxuICAgICAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcclxuICAgICAgICB2YXIgYjAgPSBiWzBdO1xyXG4gICAgICAgIHZhciBiMSA9IGJbMV07XHJcbiAgICAgICAgdmFyIGIyID0gYlsyXTtcclxuICAgICAgICB2YXIgYjMgPSBiWzNdO1xyXG5cclxuICAgICAgICBhWzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgYVsxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIGFbMl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICBhWzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcblxyXG4gICAgICAgIGIwID0gYls0XTtcclxuICAgICAgICBiMSA9IGJbNV07XHJcbiAgICAgICAgYjIgPSBiWzZdO1xyXG4gICAgICAgIGIzID0gYls3XTtcclxuXHJcbiAgICAgICAgYVs0XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIGFbNV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICBhWzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgYVs3XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xyXG5cclxuICAgICAgICBiMCA9IGJbOF07XHJcbiAgICAgICAgYjEgPSBiWzldO1xyXG4gICAgICAgIGIyID0gYlsxMF07XHJcbiAgICAgICAgYjMgPSBiWzExXTtcclxuXHJcbiAgICAgICAgYVs4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xyXG4gICAgICAgIGFbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICBhWzEwXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIGFbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcblxyXG4gICAgICAgIGIwID0gYlsxMl07XHJcbiAgICAgICAgYjEgPSBiWzEzXTtcclxuICAgICAgICBiMiA9IGJbMTRdO1xyXG4gICAgICAgIGIzID0gYlsxNV07XHJcblxyXG4gICAgICAgIGFbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgYVsxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICBhWzE0XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIGFbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjbXVsdGlwbHlMb2NhbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBzcmMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxvY2FsOiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gW107XHJcbiAgICAgICAgdmFyIG0xID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIG0yID0gc3JjLnZhbDtcclxuXHJcbiAgICAgICAgYVswXSA9IG0xWzBdICogbTJbMF0gKyBtMVsxXSAqIG0yWzRdICsgbTFbMl0gKiBtMls4XSArIG0xWzNdICogbTJbMTJdO1xyXG4gICAgICAgIGFbMV0gPSBtMVswXSAqIG0yWzFdICsgbTFbMV0gKiBtMls1XSArIG0xWzJdICogbTJbOV0gKyBtMVszXSAqIG0yWzEzXTtcclxuICAgICAgICBhWzJdID0gbTFbMF0gKiBtMlsyXSArIG0xWzFdICogbTJbNl0gKyBtMVsyXSAqIG0yWzEwXSArIG0xWzNdICogbTJbMTRdO1xyXG4gICAgICAgIGFbM10gPSBtMVswXSAqIG0yWzNdICsgbTFbMV0gKiBtMls3XSArIG0xWzJdICogbTJbMTFdICsgbTFbM10gKiBtMlsxNV07XHJcblxyXG4gICAgICAgIGFbNF0gPSBtMVs0XSAqIG0yWzBdICsgbTFbNV0gKiBtMls0XSArIG0xWzZdICogbTJbOF0gKyBtMVs3XSAqIG0yWzEyXTtcclxuICAgICAgICBhWzVdID0gbTFbNF0gKiBtMlsxXSArIG0xWzVdICogbTJbNV0gKyBtMVs2XSAqIG0yWzldICsgbTFbN10gKiBtMlsxM107XHJcbiAgICAgICAgYVs2XSA9IG0xWzRdICogbTJbMl0gKyBtMVs1XSAqIG0yWzZdICsgbTFbNl0gKiBtMlsxMF0gKyBtMVs3XSAqIG0yWzE0XTtcclxuICAgICAgICBhWzddID0gbTFbNF0gKiBtMlszXSArIG0xWzVdICogbTJbN10gKyBtMVs2XSAqIG0yWzExXSArIG0xWzddICogbTJbMTVdO1xyXG5cclxuICAgICAgICBhWzhdID0gbTFbOF0gKiBtMlswXSArIG0xWzldICogbTJbNF0gKyBtMVsxMF0gKiBtMls4XSArIG0xWzExXSAqIG0yWzEyXTtcclxuICAgICAgICBhWzldID0gbTFbOF0gKiBtMlsxXSArIG0xWzldICogbTJbNV0gKyBtMVsxMF0gKiBtMls5XSArIG0xWzExXSAqIG0yWzEzXTtcclxuICAgICAgICBhWzEwXSA9IG0xWzhdICogbTJbMl0gKyBtMVs5XSAqIG0yWzZdICsgbTFbMTBdICogbTJbMTBdICsgbTFbMTFdICogbTJbMTRdO1xyXG4gICAgICAgIGFbMTFdID0gbTFbOF0gKiBtMlszXSArIG0xWzldICogbTJbN10gKyBtMVsxMF0gKiBtMlsxMV0gKyBtMVsxMV0gKiBtMlsxNV07XHJcblxyXG4gICAgICAgIGFbMTJdID0gbTFbMTJdICogbTJbMF0gKyBtMVsxM10gKiBtMls0XSArIG0xWzE0XSAqIG0yWzhdICsgbTFbMTVdICogbTJbMTJdO1xyXG4gICAgICAgIGFbMTNdID0gbTFbMTJdICogbTJbMV0gKyBtMVsxM10gKiBtMls1XSArIG0xWzE0XSAqIG0yWzldICsgbTFbMTVdICogbTJbMTNdO1xyXG4gICAgICAgIGFbMTRdID0gbTFbMTJdICogbTJbMl0gKyBtMVsxM10gKiBtMls2XSArIG0xWzE0XSAqIG0yWzEwXSArIG0xWzE1XSAqIG0yWzE0XTtcclxuICAgICAgICBhWzE1XSA9IG0xWzEyXSAqIG0yWzNdICsgbTFbMTNdICogbTJbN10gKyBtMVsxNF0gKiBtMlsxMV0gKyBtMVsxNV0gKiBtMlsxNV07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21BcnJheShhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgdGhpcyBNYXRyaXggdXNpbmcgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjdHJhbnNsYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IzfFBoYXNlci5NYXRoLlZlY3RvcjQpfSB2IC0gVGhlIFZlY3RvciB0byB0cmFuc2xhdGUgdGhpcyBNYXRyaXggd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB2Lng7XHJcbiAgICAgICAgdmFyIHkgPSB2Lnk7XHJcbiAgICAgICAgdmFyIHogPSB2Lno7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgYVsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcclxuICAgICAgICBhWzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xyXG4gICAgICAgIGFbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xyXG4gICAgICAgIGFbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgdGhpcyBNYXRyaXggdXNpbmcgdGhlIGdpdmVuIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjdHJhbnNsYXRlWFlaXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIHogY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlWFlaOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICBhWzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xyXG4gICAgICAgIGFbMTNdID0gYVsxXSAqIHggKyBhWzVdICogeSArIGFbOV0gKiB6ICsgYVsxM107XHJcbiAgICAgICAgYVsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XHJcbiAgICAgICAgYVsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogVXNlcyB0aGUgYHhgLCBgeWAgYW5kIGB6YCBjb21wb25lbnRzIG9mIHRoZSBnaXZlbiBWZWN0b3IgdG8gc2NhbGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjc2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjN8UGhhc2VyLk1hdGguVmVjdG9yNCl9IHYgLSBUaGUgVmVjdG9yIHRvIHNjYWxlIHRoaXMgTWF0cml4IHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB2Lng7XHJcbiAgICAgICAgdmFyIHkgPSB2Lnk7XHJcbiAgICAgICAgdmFyIHogPSB2Lno7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgYVswXSA9IGFbMF0gKiB4O1xyXG4gICAgICAgIGFbMV0gPSBhWzFdICogeDtcclxuICAgICAgICBhWzJdID0gYVsyXSAqIHg7XHJcbiAgICAgICAgYVszXSA9IGFbM10gKiB4O1xyXG5cclxuICAgICAgICBhWzRdID0gYVs0XSAqIHk7XHJcbiAgICAgICAgYVs1XSA9IGFbNV0gKiB5O1xyXG4gICAgICAgIGFbNl0gPSBhWzZdICogeTtcclxuICAgICAgICBhWzddID0gYVs3XSAqIHk7XHJcblxyXG4gICAgICAgIGFbOF0gPSBhWzhdICogejtcclxuICAgICAgICBhWzldID0gYVs5XSAqIHo7XHJcbiAgICAgICAgYVsxMF0gPSBhWzEwXSAqIHo7XHJcbiAgICAgICAgYVsxMV0gPSBhWzExXSAqIHo7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgc2NhbGUgdHJhbnNmb3JtYXRpb24gdG8gdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I3NjYWxlWFlaXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIHogY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgc2NhbGVYWVo6IGZ1bmN0aW9uICh4LCB5LCB6KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIGFbMF0gPSBhWzBdICogeDtcclxuICAgICAgICBhWzFdID0gYVsxXSAqIHg7XHJcbiAgICAgICAgYVsyXSA9IGFbMl0gKiB4O1xyXG4gICAgICAgIGFbM10gPSBhWzNdICogeDtcclxuXHJcbiAgICAgICAgYVs0XSA9IGFbNF0gKiB5O1xyXG4gICAgICAgIGFbNV0gPSBhWzVdICogeTtcclxuICAgICAgICBhWzZdID0gYVs2XSAqIHk7XHJcbiAgICAgICAgYVs3XSA9IGFbN10gKiB5O1xyXG5cclxuICAgICAgICBhWzhdID0gYVs4XSAqIHo7XHJcbiAgICAgICAgYVs5XSA9IGFbOV0gKiB6O1xyXG4gICAgICAgIGFbMTBdID0gYVsxMF0gKiB6O1xyXG4gICAgICAgIGFbMTFdID0gYVsxMV0gKiB6O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXJpdmUgYSByb3RhdGlvbiBtYXRyaXggYXJvdW5kIHRoZSBnaXZlbiBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCNtYWtlUm90YXRpb25BeGlzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IzfFBoYXNlci5NYXRoLlZlY3RvcjQpfSBheGlzIC0gVGhlIHJvdGF0aW9uIGF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgcm90YXRpb24gYW5nbGUgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIG1ha2VSb3RhdGlvbkF4aXM6IGZ1bmN0aW9uIChheGlzLCBhbmdsZSlcclxuICAgIHtcclxuICAgICAgICAvLyBCYXNlZCBvbiBodHRwOi8vd3d3LmdhbWVkZXYubmV0L3JlZmVyZW5jZS9hcnRpY2xlcy9hcnRpY2xlMTE5OS5hc3BcclxuXHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAgICAgdmFyIHQgPSAxIC0gYztcclxuICAgICAgICB2YXIgeCA9IGF4aXMueDtcclxuICAgICAgICB2YXIgeSA9IGF4aXMueTtcclxuICAgICAgICB2YXIgeiA9IGF4aXMuejtcclxuICAgICAgICB2YXIgdHggPSB0ICogeDtcclxuICAgICAgICB2YXIgdHkgPSB0ICogeTtcclxuXHJcbiAgICAgICAgdGhpcy5mcm9tQXJyYXkoW1xyXG4gICAgICAgICAgICB0eCAqIHggKyBjLCB0eCAqIHkgLSBzICogeiwgdHggKiB6ICsgcyAqIHksIDAsXHJcbiAgICAgICAgICAgIHR4ICogeSArIHMgKiB6LCB0eSAqIHkgKyBjLCB0eSAqIHogLSBzICogeCwgMCxcclxuICAgICAgICAgICAgdHggKiB6IC0gcyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICogeiAqIHogKyBjLCAwLFxyXG4gICAgICAgICAgICAwLCAwLCAwLCAxXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcm90YXRpb24gdHJhbnNmb3JtYXRpb24gdG8gdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I3JvdGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZCAtIFRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIHJvdGF0ZSBieS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gYXhpcyAtIFRoZSBheGlzIHRvIHJvdGF0ZSB1cG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkLCBheGlzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIHggPSBheGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSBheGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSBheGlzLno7XHJcbiAgICAgICAgdmFyIGxlbiA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnMobGVuKSA8IEVQU0lMT04pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgeCAqPSBsZW47XHJcbiAgICAgICAgeSAqPSBsZW47XHJcbiAgICAgICAgeiAqPSBsZW47XHJcblxyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XHJcbiAgICAgICAgdmFyIHQgPSAxIC0gYztcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGEwMyA9IGFbM107XHJcblxyXG4gICAgICAgIHZhciBhMTAgPSBhWzRdO1xyXG4gICAgICAgIHZhciBhMTEgPSBhWzVdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSBhWzddO1xyXG5cclxuICAgICAgICB2YXIgYTIwID0gYVs4XTtcclxuICAgICAgICB2YXIgYTIxID0gYVs5XTtcclxuICAgICAgICB2YXIgYTIyID0gYVsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgICAgICB2YXIgYjAwID0geCAqIHggKiB0ICsgYztcclxuICAgICAgICB2YXIgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XHJcbiAgICAgICAgdmFyIGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xyXG5cclxuICAgICAgICB2YXIgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XHJcbiAgICAgICAgdmFyIGIxMSA9IHkgKiB5ICogdCArIGM7XHJcbiAgICAgICAgdmFyIGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xyXG5cclxuICAgICAgICB2YXIgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7XHJcbiAgICAgICAgdmFyIGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xyXG4gICAgICAgIHZhciBiMjIgPSB6ICogeiAqIHQgKyBjO1xyXG5cclxuICAgICAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgICAgIGFbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XHJcbiAgICAgICAgYVsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgICAgICBhWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgICAgIGFbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XHJcbiAgICAgICAgYVs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgICAgICBhWzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIGFbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XHJcbiAgICAgICAgYVs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgICAgICBhWzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgICAgIGFbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XHJcbiAgICAgICAgYVsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICAgICAgYVsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGlzIG1hdHJpeCBvbiBpdHMgWCBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCNyb3RhdGVYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMgdG8gcm90YXRlIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlWDogZnVuY3Rpb24gKHJhZClcclxuICAgIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMudmFsO1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgICAgIHZhciBhMTAgPSBhWzRdO1xyXG4gICAgICAgIHZhciBhMTEgPSBhWzVdO1xyXG4gICAgICAgIHZhciBhMTIgPSBhWzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSBhWzddO1xyXG5cclxuICAgICAgICB2YXIgYTIwID0gYVs4XTtcclxuICAgICAgICB2YXIgYTIxID0gYVs5XTtcclxuICAgICAgICB2YXIgYTIyID0gYVsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICAgICAgYVs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xyXG4gICAgICAgIGFbNV0gPSBhMTEgKiBjICsgYTIxICogcztcclxuICAgICAgICBhWzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICAgICAgYVs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xyXG4gICAgICAgIGFbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcclxuICAgICAgICBhWzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICAgICAgYVsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcclxuICAgICAgICBhWzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgdGhpcyBtYXRyaXggb24gaXRzIFkgYXhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjcm90YXRlWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZCAtIFRoZSBhbmdsZSB0byByb3RhdGUgYnksIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MocmFkKTtcclxuXHJcbiAgICAgICAgdmFyIGEwMCA9IGFbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV07XHJcbiAgICAgICAgdmFyIGEwMiA9IGFbMl07XHJcbiAgICAgICAgdmFyIGEwMyA9IGFbM107XHJcblxyXG4gICAgICAgIHZhciBhMjAgPSBhWzhdO1xyXG4gICAgICAgIHZhciBhMjEgPSBhWzldO1xyXG4gICAgICAgIHZhciBhMjIgPSBhWzEwXTtcclxuICAgICAgICB2YXIgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgICAgICBhWzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICAgICAgYVsxXSA9IGEwMSAqIGMgLSBhMjEgKiBzO1xyXG4gICAgICAgIGFbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgICAgICBhWzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICAgICAgYVs4XSA9IGEwMCAqIHMgKyBhMjAgKiBjO1xyXG4gICAgICAgIGFbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgICAgICBhWzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgICAgIGFbMTFdID0gYTAzICogcyArIGEyMyAqIGM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGlzIG1hdHJpeCBvbiBpdHMgWiBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCNyb3RhdGVaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIGFuZ2xlIHRvIHJvdGF0ZSBieSwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uIChyYWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZhbDtcclxuICAgICAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG5cclxuICAgICAgICB2YXIgYTAwID0gYVswXTtcclxuICAgICAgICB2YXIgYTAxID0gYVsxXTtcclxuICAgICAgICB2YXIgYTAyID0gYVsyXTtcclxuICAgICAgICB2YXIgYTAzID0gYVszXTtcclxuXHJcbiAgICAgICAgdmFyIGExMCA9IGFbNF07XHJcbiAgICAgICAgdmFyIGExMSA9IGFbNV07XHJcbiAgICAgICAgdmFyIGExMiA9IGFbNl07XHJcbiAgICAgICAgdmFyIGExMyA9IGFbN107XHJcblxyXG4gICAgICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgICAgICBhWzBdID0gYTAwICogYyArIGExMCAqIHM7XHJcbiAgICAgICAgYVsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xyXG4gICAgICAgIGFbMl0gPSBhMDIgKiBjICsgYTEyICogcztcclxuICAgICAgICBhWzNdID0gYTAzICogYyArIGExMyAqIHM7XHJcbiAgICAgICAgYVs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xyXG4gICAgICAgIGFbNV0gPSBhMTEgKiBjIC0gYTAxICogcztcclxuICAgICAgICBhWzZdID0gYTEyICogYyAtIGEwMiAqIHM7XHJcbiAgICAgICAgYVs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCBmcm9tIHRoZSBnaXZlbiByb3RhdGlvbiBRdWF0ZXJuaW9uIGFuZCB0cmFuc2xhdGlvbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IHEgLSBUaGUgUXVhdGVybmlvbiB0byBzZXQgcm90YXRpb24gZnJvbS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdiAtIFRoZSBWZWN0b3IgdG8gc2V0IHRyYW5zbGF0aW9uIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbjogZnVuY3Rpb24gKHEsIHYpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gUXVhdGVybmlvbiBtYXRoXHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICB2YXIgeCA9IHEueDtcclxuICAgICAgICB2YXIgeSA9IHEueTtcclxuICAgICAgICB2YXIgeiA9IHEuejtcclxuICAgICAgICB2YXIgdyA9IHEudztcclxuXHJcbiAgICAgICAgdmFyIHgyID0geCArIHg7XHJcbiAgICAgICAgdmFyIHkyID0geSArIHk7XHJcbiAgICAgICAgdmFyIHoyID0geiArIHo7XHJcblxyXG4gICAgICAgIHZhciB4eCA9IHggKiB4MjtcclxuICAgICAgICB2YXIgeHkgPSB4ICogeTI7XHJcbiAgICAgICAgdmFyIHh6ID0geCAqIHoyO1xyXG5cclxuICAgICAgICB2YXIgeXkgPSB5ICogeTI7XHJcbiAgICAgICAgdmFyIHl6ID0geSAqIHoyO1xyXG4gICAgICAgIHZhciB6eiA9IHogKiB6MjtcclxuXHJcbiAgICAgICAgdmFyIHd4ID0gdyAqIHgyO1xyXG4gICAgICAgIHZhciB3eSA9IHcgKiB5MjtcclxuICAgICAgICB2YXIgd3ogPSB3ICogejI7XHJcblxyXG4gICAgICAgIG91dFswXSA9IDEgLSAoeXkgKyB6eik7XHJcbiAgICAgICAgb3V0WzFdID0geHkgKyB3ejtcclxuICAgICAgICBvdXRbMl0gPSB4eiAtIHd5O1xyXG4gICAgICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs0XSA9IHh5IC0gd3o7XHJcbiAgICAgICAgb3V0WzVdID0gMSAtICh4eCArIHp6KTtcclxuICAgICAgICBvdXRbNl0gPSB5eiArIHd4O1xyXG4gICAgICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs4XSA9IHh6ICsgd3k7XHJcbiAgICAgICAgb3V0WzldID0geXogLSB3eDtcclxuICAgICAgICBvdXRbMTBdID0gMSAtICh4eCArIHl5KTtcclxuICAgICAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IHYueDtcclxuICAgICAgICBvdXRbMTNdID0gdi55O1xyXG4gICAgICAgIG91dFsxNF0gPSB2Lno7XHJcbiAgICAgICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmFsdWVzIG9mIHRoaXMgTWF0cml4IGZyb20gdGhlIGdpdmVuIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I2Zyb21RdWF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IHEgLSBUaGUgUXVhdGVybmlvbiB0byBzZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIHggPSBxLng7XHJcbiAgICAgICAgdmFyIHkgPSBxLnk7XHJcbiAgICAgICAgdmFyIHogPSBxLno7XHJcbiAgICAgICAgdmFyIHcgPSBxLnc7XHJcblxyXG4gICAgICAgIHZhciB4MiA9IHggKyB4O1xyXG4gICAgICAgIHZhciB5MiA9IHkgKyB5O1xyXG4gICAgICAgIHZhciB6MiA9IHogKyB6O1xyXG5cclxuICAgICAgICB2YXIgeHggPSB4ICogeDI7XHJcbiAgICAgICAgdmFyIHh5ID0geCAqIHkyO1xyXG4gICAgICAgIHZhciB4eiA9IHggKiB6MjtcclxuXHJcbiAgICAgICAgdmFyIHl5ID0geSAqIHkyO1xyXG4gICAgICAgIHZhciB5eiA9IHkgKiB6MjtcclxuICAgICAgICB2YXIgenogPSB6ICogejI7XHJcblxyXG4gICAgICAgIHZhciB3eCA9IHcgKiB4MjtcclxuICAgICAgICB2YXIgd3kgPSB3ICogeTI7XHJcbiAgICAgICAgdmFyIHd6ID0gdyAqIHoyO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgICAgIG91dFsxXSA9IHh5ICsgd3o7XHJcbiAgICAgICAgb3V0WzJdID0geHogLSB3eTtcclxuICAgICAgICBvdXRbM10gPSAwO1xyXG5cclxuICAgICAgICBvdXRbNF0gPSB4eSAtIHd6O1xyXG4gICAgICAgIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XHJcbiAgICAgICAgb3V0WzZdID0geXogKyB3eDtcclxuICAgICAgICBvdXRbN10gPSAwO1xyXG5cclxuICAgICAgICBvdXRbOF0gPSB4eiArIHd5O1xyXG4gICAgICAgIG91dFs5XSA9IHl6IC0gd3g7XHJcbiAgICAgICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XHJcbiAgICAgICAgb3V0WzExXSA9IDA7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSAwO1xyXG4gICAgICAgIG91dFsxM10gPSAwO1xyXG4gICAgICAgIG91dFsxNF0gPSAwO1xyXG4gICAgICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjZnJ1c3R1bVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCAtIFRoZSByaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gLSBUaGUgYm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgYm91bmQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbmVhciAtIFRoZSBuZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZhciAtIFRoZSBmYXIgYm91bmQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG5cclxuICAgICAgICB2YXIgcmwgPSAxIC8gKHJpZ2h0IC0gbGVmdCk7XHJcbiAgICAgICAgdmFyIHRiID0gMSAvICh0b3AgLSBib3R0b20pO1xyXG4gICAgICAgIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcblxyXG4gICAgICAgIG91dFswXSA9IChuZWFyICogMikgKiBybDtcclxuICAgICAgICBvdXRbMV0gPSAwO1xyXG4gICAgICAgIG91dFsyXSA9IDA7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzRdID0gMDtcclxuICAgICAgICBvdXRbNV0gPSAobmVhciAqIDIpICogdGI7XHJcbiAgICAgICAgb3V0WzZdID0gMDtcclxuICAgICAgICBvdXRbN10gPSAwO1xyXG5cclxuICAgICAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xyXG4gICAgICAgIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XHJcbiAgICAgICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgICAgIG91dFsxMV0gPSAtMTtcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IDA7XHJcbiAgICAgICAgb3V0WzEzXSA9IDA7XHJcbiAgICAgICAgb3V0WzE0XSA9IChmYXIgKiBuZWFyICogMikgKiBuZjtcclxuICAgICAgICBvdXRbMTVdID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5NYXRyaXg0I3BlcnNwZWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZm92eSAtIFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCAtIEFzcGVjdCByYXRpby4gVHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoICAvaGVpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgLSBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZhciAtIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHBlcnNwZWN0aXZlOiBmdW5jdGlvbiAoZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IHRoaXMudmFsO1xyXG4gICAgICAgIHZhciBmID0gMS4wIC8gTWF0aC50YW4oZm92eSAvIDIpO1xyXG4gICAgICAgIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcblxyXG4gICAgICAgIG91dFswXSA9IGYgLyBhc3BlY3Q7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAwO1xyXG4gICAgICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs0XSA9IDA7XHJcbiAgICAgICAgb3V0WzVdID0gZjtcclxuICAgICAgICBvdXRbNl0gPSAwO1xyXG4gICAgICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs4XSA9IDA7XHJcbiAgICAgICAgb3V0WzldID0gMDtcclxuICAgICAgICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XHJcbiAgICAgICAgb3V0WzExXSA9IC0xO1xyXG5cclxuICAgICAgICBvdXRbMTJdID0gMDtcclxuICAgICAgICBvdXRbMTNdID0gMDtcclxuICAgICAgICBvdXRbMTRdID0gKDIgKiBmYXIgKiBuZWFyKSAqIG5mO1xyXG4gICAgICAgIG91dFsxNV0gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjcGVyc3BlY3RpdmVMSFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbmVhciAtIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZmFyIC0gRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmVMSDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIG5lYXIsIGZhcilcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy52YWw7XHJcblxyXG4gICAgICAgIG91dFswXSA9ICgyICogbmVhcikgLyB3aWR0aDtcclxuICAgICAgICBvdXRbMV0gPSAwO1xyXG4gICAgICAgIG91dFsyXSA9IDA7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzRdID0gMDtcclxuICAgICAgICBvdXRbNV0gPSAoMiAqIG5lYXIpIC8gaGVpZ2h0O1xyXG4gICAgICAgIG91dFs2XSA9IDA7XHJcbiAgICAgICAgb3V0WzddID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzhdID0gMDtcclxuICAgICAgICBvdXRbOV0gPSAwO1xyXG4gICAgICAgIG91dFsxMF0gPSAtZmFyIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgICAgIG91dFsxMV0gPSAxO1xyXG5cclxuICAgICAgICBvdXRbMTJdID0gMDtcclxuICAgICAgICBvdXRbMTNdID0gMDtcclxuICAgICAgICBvdXRbMTRdID0gKG5lYXIgKiBmYXIpIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgICAgIG91dFsxNV0gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBhbiBvcnRob2dvbmFsIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjb3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgYm91bmQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgLSBUaGUgcmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIC0gVGhlIGJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgLSBUaGUgbmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgLSBUaGUgZmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgb3J0aG86IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcilcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy52YWw7XHJcbiAgICAgICAgdmFyIGxyID0gbGVmdCAtIHJpZ2h0O1xyXG4gICAgICAgIHZhciBidCA9IGJvdHRvbSAtIHRvcDtcclxuICAgICAgICB2YXIgbmYgPSBuZWFyIC0gZmFyO1xyXG5cclxuICAgICAgICAvLyAgQXZvaWQgZGl2aXNpb24gYnkgemVyb1xyXG4gICAgICAgIGxyID0gKGxyID09PSAwKSA/IGxyIDogMSAvIGxyO1xyXG4gICAgICAgIGJ0ID0gKGJ0ID09PSAwKSA/IGJ0IDogMSAvIGJ0O1xyXG4gICAgICAgIG5mID0gKG5mID09PSAwKSA/IG5mIDogMSAvIG5mO1xyXG5cclxuICAgICAgICBvdXRbMF0gPSAtMiAqIGxyO1xyXG4gICAgICAgIG91dFsxXSA9IDA7XHJcbiAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICBvdXRbM10gPSAwO1xyXG5cclxuICAgICAgICBvdXRbNF0gPSAwO1xyXG4gICAgICAgIG91dFs1XSA9IC0yICogYnQ7XHJcbiAgICAgICAgb3V0WzZdID0gMDtcclxuICAgICAgICBvdXRbN10gPSAwO1xyXG5cclxuICAgICAgICBvdXRbOF0gPSAwO1xyXG4gICAgICAgIG91dFs5XSA9IDA7XHJcbiAgICAgICAgb3V0WzEwXSA9IDIgKiBuZjtcclxuICAgICAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XHJcbiAgICAgICAgb3V0WzEzXSA9ICh0b3AgKyBib3R0b20pICogYnQ7XHJcbiAgICAgICAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCNsb29rQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gZXllIC0gUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBjZW50ZXIgLSBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdXAgLSB2ZWMzIHBvaW50aW5nIHVwLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLk1hdHJpeDR9IFRoaXMgTWF0cml4NC5cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiBmdW5jdGlvbiAoZXllLCBjZW50ZXIsIHVwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnZhbDtcclxuXHJcbiAgICAgICAgdmFyIGV5ZXggPSBleWUueDtcclxuICAgICAgICB2YXIgZXlleSA9IGV5ZS55O1xyXG4gICAgICAgIHZhciBleWV6ID0gZXllLno7XHJcblxyXG4gICAgICAgIHZhciB1cHggPSB1cC54O1xyXG4gICAgICAgIHZhciB1cHkgPSB1cC55O1xyXG4gICAgICAgIHZhciB1cHogPSB1cC56O1xyXG5cclxuICAgICAgICB2YXIgY2VudGVyeCA9IGNlbnRlci54O1xyXG4gICAgICAgIHZhciBjZW50ZXJ5ID0gY2VudGVyLnk7XHJcbiAgICAgICAgdmFyIGNlbnRlcnogPSBjZW50ZXIuejtcclxuXHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGV5ZXggLSBjZW50ZXJ4KSA8IEVQU0lMT04gJiZcclxuICAgICAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgRVBTSUxPTiAmJlxyXG4gICAgICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBFUFNJTE9OKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xyXG4gICAgICAgIHZhciB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xyXG4gICAgICAgIHZhciB6MiA9IGV5ZXogLSBjZW50ZXJ6O1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gMSAvIE1hdGguc3FydCh6MCAqIHowICsgejEgKiB6MSArIHoyICogejIpO1xyXG5cclxuICAgICAgICB6MCAqPSBsZW47XHJcbiAgICAgICAgejEgKj0gbGVuO1xyXG4gICAgICAgIHoyICo9IGxlbjtcclxuXHJcbiAgICAgICAgdmFyIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcclxuICAgICAgICB2YXIgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xyXG4gICAgICAgIHZhciB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XHJcblxyXG4gICAgICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xyXG5cclxuICAgICAgICBpZiAoIWxlbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gMDtcclxuICAgICAgICAgICAgeDEgPSAwO1xyXG4gICAgICAgICAgICB4MiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgICAgIHgwICo9IGxlbjtcclxuICAgICAgICAgICAgeDEgKj0gbGVuO1xyXG4gICAgICAgICAgICB4MiAqPSBsZW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcclxuICAgICAgICB2YXIgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcclxuICAgICAgICB2YXIgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcclxuXHJcbiAgICAgICAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XHJcblxyXG4gICAgICAgIGlmICghbGVuKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeTAgPSAwO1xyXG4gICAgICAgICAgICB5MSA9IDA7XHJcbiAgICAgICAgICAgIHkyID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGVuID0gMSAvIGxlbjtcclxuICAgICAgICAgICAgeTAgKj0gbGVuO1xyXG4gICAgICAgICAgICB5MSAqPSBsZW47XHJcbiAgICAgICAgICAgIHkyICo9IGxlbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG91dFswXSA9IHgwO1xyXG4gICAgICAgIG91dFsxXSA9IHkwO1xyXG4gICAgICAgIG91dFsyXSA9IHowO1xyXG4gICAgICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs0XSA9IHgxO1xyXG4gICAgICAgIG91dFs1XSA9IHkxO1xyXG4gICAgICAgIG91dFs2XSA9IHoxO1xyXG4gICAgICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgICAgIG91dFs4XSA9IHgyO1xyXG4gICAgICAgIG91dFs5XSA9IHkyO1xyXG4gICAgICAgIG91dFsxMF0gPSB6MjtcclxuICAgICAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcclxuICAgICAgICBvdXRbMTNdID0gLSh5MCAqIGV5ZXggKyB5MSAqIGV5ZXkgKyB5MiAqIGV5ZXopO1xyXG4gICAgICAgIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XHJcbiAgICAgICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmFsdWVzIG9mIHRoaXMgbWF0cml4IGZyb20gdGhlIGdpdmVuIGB5YXdgLCBgcGl0Y2hgIGFuZCBgcm9sbGAgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguTWF0cml4NCN5YXdQaXRjaFJvbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5YXcgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGl0Y2ggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm9sbCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBUaGlzIE1hdHJpeDQuXHJcbiAgICAgKi9cclxuICAgIHlhd1BpdGNoUm9sbDogZnVuY3Rpb24gKHlhdywgcGl0Y2gsIHJvbGwpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy56ZXJvKCk7XHJcbiAgICAgICAgX3RlbXBNYXQxLnplcm8oKTtcclxuICAgICAgICBfdGVtcE1hdDIuemVybygpO1xyXG5cclxuICAgICAgICB2YXIgbTAgPSB0aGlzLnZhbDtcclxuICAgICAgICB2YXIgbTEgPSBfdGVtcE1hdDEudmFsO1xyXG4gICAgICAgIHZhciBtMiA9IF90ZW1wTWF0Mi52YWw7XHJcblxyXG4gICAgICAgIC8vICBSb3RhdGUgWlxyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocm9sbCk7XHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyb2xsKTtcclxuXHJcbiAgICAgICAgbTBbMTBdID0gMTtcclxuICAgICAgICBtMFsxNV0gPSAxO1xyXG4gICAgICAgIG0wWzBdID0gYztcclxuICAgICAgICBtMFsxXSA9IHM7XHJcbiAgICAgICAgbTBbNF0gPSAtcztcclxuICAgICAgICBtMFs1XSA9IGM7XHJcblxyXG4gICAgICAgIC8vICBSb3RhdGUgWFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihwaXRjaCk7XHJcbiAgICAgICAgYyA9IE1hdGguY29zKHBpdGNoKTtcclxuXHJcbiAgICAgICAgbTFbMF0gPSAxO1xyXG4gICAgICAgIG0xWzE1XSA9IDE7XHJcbiAgICAgICAgbTFbNV0gPSBjO1xyXG4gICAgICAgIG0xWzEwXSA9IGM7XHJcbiAgICAgICAgbTFbOV0gPSAtcztcclxuICAgICAgICBtMVs2XSA9IHM7XHJcblxyXG4gICAgICAgIC8vICBSb3RhdGUgWVxyXG4gICAgICAgIHMgPSBNYXRoLnNpbih5YXcpO1xyXG4gICAgICAgIGMgPSBNYXRoLmNvcyh5YXcpO1xyXG5cclxuICAgICAgICBtMls1XSA9IDE7XHJcbiAgICAgICAgbTJbMTVdID0gMTtcclxuICAgICAgICBtMlswXSA9IGM7XHJcbiAgICAgICAgbTJbMl0gPSAtcztcclxuICAgICAgICBtMls4XSA9IHM7XHJcbiAgICAgICAgbTJbMTBdID0gYztcclxuXHJcbiAgICAgICAgdGhpcy5tdWx0aXBseUxvY2FsKF90ZW1wTWF0MSk7XHJcbiAgICAgICAgdGhpcy5tdWx0aXBseUxvY2FsKF90ZW1wTWF0Mik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGEgd29ybGQgbWF0cml4IGZyb20gdGhlIGdpdmVuIHJvdGF0aW9uLCBwb3NpdGlvbiwgc2NhbGUsIHZpZXcgbWF0cml4IGFuZCBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLk1hdHJpeDQjc2V0V29ybGRNYXRyaXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gcm90YXRpb24gLSBUaGUgcm90YXRpb24gb2YgdGhlIHdvcmxkIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gcG9zaXRpb24gLSBUaGUgcG9zaXRpb24gb2YgdGhlIHdvcmxkIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gc2NhbGUgLSBUaGUgc2NhbGUgb2YgdGhlIHdvcmxkIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gW3ZpZXdNYXRyaXhdIC0gVGhlIHZpZXcgbWF0cml4LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBbcHJvamVjdGlvbk1hdHJpeF0gLSBUaGUgcHJvamVjdGlvbiBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguTWF0cml4NH0gVGhpcyBNYXRyaXg0LlxyXG4gICAgICovXHJcbiAgICBzZXRXb3JsZE1hdHJpeDogZnVuY3Rpb24gKHJvdGF0aW9uLCBwb3NpdGlvbiwgc2NhbGUsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy55YXdQaXRjaFJvbGwocm90YXRpb24ueSwgcm90YXRpb24ueCwgcm90YXRpb24ueik7XHJcblxyXG4gICAgICAgIF90ZW1wTWF0MS5zY2FsaW5nKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopO1xyXG4gICAgICAgIF90ZW1wTWF0Mi54eXoocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XHJcblxyXG4gICAgICAgIHRoaXMubXVsdGlwbHlMb2NhbChfdGVtcE1hdDEpO1xyXG4gICAgICAgIHRoaXMubXVsdGlwbHlMb2NhbChfdGVtcE1hdDIpO1xyXG5cclxuICAgICAgICBpZiAodmlld01hdHJpeCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aXBseUxvY2FsKHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb2plY3Rpb25NYXRyaXggIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbHlMb2NhbChwcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG52YXIgX3RlbXBNYXQxID0gbmV3IE1hdHJpeDQoKTtcclxudmFyIF90ZW1wTWF0MiA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeDQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Matrix4.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/MaxAdd.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/MaxAdd.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Add an `amount` to a `value`, limiting the maximum result to `max`.\r\n *\r\n * @function Phaser.Math.MaxAdd\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to add to.\r\n * @param {number} amount - The amount to add.\r\n * @param {number} max - The maximum value to return.\r\n *\r\n * @return {number} The resulting value.\r\n */\r\nvar MaxAdd = function (value, amount, max)\r\n{\r\n    return Math.min(value + amount, max);\r\n};\r\n\r\nmodule.exports = MaxAdd;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL01heEFkZC5qcz9lZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9NYXhBZGQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYW4gYGFtb3VudGAgdG8gYSBgdmFsdWVgLCBsaW1pdGluZyB0aGUgbWF4aW11bSByZXN1bHQgdG8gYG1heGAuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5NYXhBZGRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgYW1vdW50IHRvIGFkZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlIHRvIHJldHVybi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0aW5nIHZhbHVlLlxyXG4gKi9cclxudmFyIE1heEFkZCA9IGZ1bmN0aW9uICh2YWx1ZSwgYW1vdW50LCBtYXgpXHJcbntcclxuICAgIHJldHVybiBNYXRoLm1pbih2YWx1ZSArIGFtb3VudCwgbWF4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWF4QWRkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/MaxAdd.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/MinSub.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/MinSub.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Subtract an `amount` from `value`, limiting the minimum result to `min`.\r\n *\r\n * @function Phaser.Math.MinSub\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to subtract from.\r\n * @param {number} amount - The amount to subtract.\r\n * @param {number} min - The minimum value to return.\r\n *\r\n * @return {number} The resulting value.\r\n */\r\nvar MinSub = function (value, amount, min)\r\n{\r\n    return Math.max(value - amount, min);\r\n};\r\n\r\nmodule.exports = MinSub;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL01pblN1Yi5qcz9iYjhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9NaW5TdWIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdCBhbiBgYW1vdW50YCBmcm9tIGB2YWx1ZWAsIGxpbWl0aW5nIHRoZSBtaW5pbXVtIHJlc3VsdCB0byBgbWluYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLk1pblN1YlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUgdG8gcmV0dXJuLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgdmFsdWUuXHJcbiAqL1xyXG52YXIgTWluU3ViID0gZnVuY3Rpb24gKHZhbHVlLCBhbW91bnQsIG1pbilcclxue1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KHZhbHVlIC0gYW1vdW50LCBtaW4pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNaW5TdWI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/MinSub.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Percent.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Percent.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Work out what percentage `value` is of the range between `min` and `max`.\r\n * If `max` isn't given then it will return the percentage of `value` to `min`.\r\n *\r\n * You can optionally specify an `upperMax` value, which is a mid-way point in the range that represents 100%, after which the % starts to go down to zero again.\r\n *\r\n * @function Phaser.Math.Percent\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to determine the percentage of.\r\n * @param {number} min - The minimum value.\r\n * @param {number} [max] - The maximum value.\r\n * @param {number} [upperMax] - The mid-way point in the range that represents 100%.\r\n *\r\n * @return {number} A value between 0 and 1 representing the percentage.\r\n */\r\nvar Percent = function (value, min, max, upperMax)\r\n{\r\n    if (max === undefined) { max = min + 1; }\r\n\r\n    var percentage = (value - min) / (max - min);\r\n\r\n    if (percentage > 1)\r\n    {\r\n        if (upperMax !== undefined)\r\n        {\r\n            percentage = ((upperMax - value)) / (upperMax - max);\r\n\r\n            if (percentage < 0)\r\n            {\r\n                percentage = 0;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            percentage = 1;\r\n        }\r\n    }\r\n    else if (percentage < 0)\r\n    {\r\n        percentage = 0;\r\n    }\r\n\r\n    return percentage;\r\n};\r\n\r\nmodule.exports = Percent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1BlcmNlbnQuanM/ZTAyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixlQUFlOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvUGVyY2VudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdvcmsgb3V0IHdoYXQgcGVyY2VudGFnZSBgdmFsdWVgIGlzIG9mIHRoZSByYW5nZSBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YC5cclxuICogSWYgYG1heGAgaXNuJ3QgZ2l2ZW4gdGhlbiBpdCB3aWxsIHJldHVybiB0aGUgcGVyY2VudGFnZSBvZiBgdmFsdWVgIHRvIGBtaW5gLlxyXG4gKlxyXG4gKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBgdXBwZXJNYXhgIHZhbHVlLCB3aGljaCBpcyBhIG1pZC13YXkgcG9pbnQgaW4gdGhlIHJhbmdlIHRoYXQgcmVwcmVzZW50cyAxMDAlLCBhZnRlciB3aGljaCB0aGUgJSBzdGFydHMgdG8gZ28gZG93biB0byB6ZXJvIGFnYWluLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUGVyY2VudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZi5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF0gLSBUaGUgbWF4aW11bSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt1cHBlck1heF0gLSBUaGUgbWlkLXdheSBwb2ludCBpbiB0aGUgcmFuZ2UgdGhhdCByZXByZXNlbnRzIDEwMCUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgcmVwcmVzZW50aW5nIHRoZSBwZXJjZW50YWdlLlxyXG4gKi9cclxudmFyIFBlcmNlbnQgPSBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4LCB1cHBlck1heClcclxue1xyXG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7IG1heCA9IG1pbiArIDE7IH1cclxuXHJcbiAgICB2YXIgcGVyY2VudGFnZSA9ICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTtcclxuXHJcbiAgICBpZiAocGVyY2VudGFnZSA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVwcGVyTWF4ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwZXJjZW50YWdlID0gKCh1cHBlck1heCAtIHZhbHVlKSkgLyAodXBwZXJNYXggLSBtYXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPCAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwZXJjZW50YWdlID0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwZXJjZW50YWdlIDwgMClcclxuICAgIHtcclxuICAgICAgICBwZXJjZW50YWdlID0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGVyY2VudGFnZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGVyY2VudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Percent.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Quaternion.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/Quaternion.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector3 = __webpack_require__(/*! ./Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\nvar Matrix3 = __webpack_require__(/*! ./Matrix3 */ \"./node_modules/phaser/src/math/Matrix3.js\");\r\n\r\nvar EPSILON = 0.000001;\r\n\r\n//  Some shared 'private' arrays\r\nvar siNext = new Int8Array([ 1, 2, 0 ]);\r\nvar tmp = new Float32Array([ 0, 0, 0 ]);\r\n\r\nvar xUnitVec3 = new Vector3(1, 0, 0);\r\nvar yUnitVec3 = new Vector3(0, 1, 0);\r\n\r\nvar tmpvec = new Vector3();\r\nvar tmpMat3 = new Matrix3();\r\n\r\n/**\r\n * @classdesc\r\n * A quaternion.\r\n *\r\n * @class Quaternion\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - The x component.\r\n * @param {number} [y] - The y component.\r\n * @param {number} [z] - The z component.\r\n * @param {number} [w] - The w component.\r\n */\r\nvar Quaternion = new Class({\r\n\r\n    initialize:\r\n\r\n    function Quaternion (x, y, z, w)\r\n    {\r\n        /**\r\n         * The x component of this Quaternion.\r\n         *\r\n         * @name Phaser.Math.Quaternion#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n\r\n        /**\r\n         * The y component of this Quaternion.\r\n         *\r\n         * @name Phaser.Math.Quaternion#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n\r\n        /**\r\n         * The z component of this Quaternion.\r\n         *\r\n         * @name Phaser.Math.Quaternion#z\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n\r\n        /**\r\n         * The w component of this Quaternion.\r\n         *\r\n         * @name Phaser.Math.Quaternion#w\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n            this.w = x.w || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n            this.w = w || 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Copy the components of a given Quaternion or Vector into this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} src - The Quaternion or Vector to copy the components from.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        this.x = src.x;\r\n        this.y = src.y;\r\n        this.z = src.z;\r\n        this.w = src.w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the components of this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|object)} [x=0] - The x component, or an object containing x, y, z, and w components.\r\n     * @param {number} [y=0] - The y component.\r\n     * @param {number} [z=0] - The z component.\r\n     * @param {number} [w=0] - The w component.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    set: function (x, y, z, w)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n            this.w = x.w || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n            this.w = w || 0;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Add a given Quaternion or Vector to this Quaternion. Addition is component-wise.\r\n     *\r\n     * @method Phaser.Math.Quaternion#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} v - The Quaternion or Vector to add to this Quaternion.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    add: function (v)\r\n    {\r\n        this.x += v.x;\r\n        this.y += v.y;\r\n        this.z += v.z;\r\n        this.w += v.w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Subtract a given Quaternion or Vector from this Quaternion. Subtraction is component-wise.\r\n     *\r\n     * @method Phaser.Math.Quaternion#subtract\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} v - The Quaternion or Vector to subtract from this Quaternion.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    subtract: function (v)\r\n    {\r\n        this.x -= v.x;\r\n        this.y -= v.y;\r\n        this.z -= v.z;\r\n        this.w -= v.w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale this Quaternion by the given value.\r\n     *\r\n     * @method Phaser.Math.Quaternion#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} scale - The value to scale this Quaternion by.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    scale: function (scale)\r\n    {\r\n        this.x *= scale;\r\n        this.y *= scale;\r\n        this.z *= scale;\r\n        this.w *= scale;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the length of this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#length\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Quaternion.\r\n     */\r\n    length: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n\r\n        return Math.sqrt(x * x + y * y + z * z + w * w);\r\n    },\r\n\r\n    /**\r\n     * Calculate the length of this Quaternion squared.\r\n     *\r\n     * @method Phaser.Math.Quaternion#lengthSq\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Quaternion, squared.\r\n     */\r\n    lengthSq: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n\r\n        return x * x + y * y + z * z + w * w;\r\n    },\r\n\r\n    /**\r\n     * Normalize this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#normalize\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    normalize: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n        var len = x * x + y * y + z * z + w * w;\r\n\r\n        if (len > 0)\r\n        {\r\n            len = 1 / Math.sqrt(len);\r\n\r\n            this.x = x * len;\r\n            this.y = y * len;\r\n            this.z = z * len;\r\n            this.w = w * len;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the dot product of this Quaternion and the given Quaternion or Vector.\r\n     *\r\n     * @method Phaser.Math.Quaternion#dot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} v - The Quaternion or Vector to dot product with this Quaternion.\r\n     *\r\n     * @return {number} The dot product of this Quaternion and the given Quaternion or Vector.\r\n     */\r\n    dot: function (v)\r\n    {\r\n        return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\r\n    },\r\n\r\n    /**\r\n     * Linearly interpolate this Quaternion towards the given Quaternion or Vector.\r\n     *\r\n     * @method Phaser.Math.Quaternion#lerp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} v - The Quaternion or Vector to interpolate towards.\r\n     * @param {number} [t=0] - The percentage of interpolation.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    lerp: function (v, t)\r\n    {\r\n        if (t === undefined) { t = 0; }\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        this.x = ax + t * (v.x - ax);\r\n        this.y = ay + t * (v.y - ay);\r\n        this.z = az + t * (v.z - az);\r\n        this.w = aw + t * (v.w - aw);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Math.Quaternion#rotationTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} a - [description]\r\n     * @param {Phaser.Math.Vector3} b - [description]\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    rotationTo: function (a, b)\r\n    {\r\n        var dot = a.x * b.x + a.y * b.y + a.z * b.z;\r\n\r\n        if (dot < -0.999999)\r\n        {\r\n            if (tmpvec.copy(xUnitVec3).cross(a).length() < EPSILON)\r\n            {\r\n                tmpvec.copy(yUnitVec3).cross(a);\r\n            }\r\n\r\n            tmpvec.normalize();\r\n\r\n            return this.setAxisAngle(tmpvec, Math.PI);\r\n\r\n        }\r\n        else if (dot > 0.999999)\r\n        {\r\n            this.x = 0;\r\n            this.y = 0;\r\n            this.z = 0;\r\n            this.w = 1;\r\n\r\n            return this;\r\n        }\r\n        else\r\n        {\r\n            tmpvec.copy(a).cross(b);\r\n\r\n            this.x = tmpvec.x;\r\n            this.y = tmpvec.y;\r\n            this.z = tmpvec.z;\r\n            this.w = 1 + dot;\r\n\r\n            return this.normalize();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Set the axes of this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#setAxes\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} view - The view axis.\r\n     * @param {Phaser.Math.Vector3} right - The right axis.\r\n     * @param {Phaser.Math.Vector3} up - The upwards axis.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    setAxes: function (view, right, up)\r\n    {\r\n        var m = tmpMat3.val;\r\n\r\n        m[0] = right.x;\r\n        m[3] = right.y;\r\n        m[6] = right.z;\r\n\r\n        m[1] = up.x;\r\n        m[4] = up.y;\r\n        m[7] = up.z;\r\n\r\n        m[2] = -view.x;\r\n        m[5] = -view.y;\r\n        m[8] = -view.z;\r\n\r\n        return this.fromMat3(tmpMat3).normalize();\r\n    },\r\n\r\n    /**\r\n     * Reset this Matrix to an identity (default) Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#identity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    identity: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 0;\r\n        this.z = 0;\r\n        this.w = 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the axis angle of this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#setAxisAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} axis - The axis.\r\n     * @param {number} rad - The angle in radians.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    setAxisAngle: function (axis, rad)\r\n    {\r\n        rad = rad * 0.5;\r\n\r\n        var s = Math.sin(rad);\r\n\r\n        this.x = s * axis.x;\r\n        this.y = s * axis.y;\r\n        this.z = s * axis.z;\r\n        this.w = Math.cos(rad);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Multiply this Quaternion by the given Quaternion or Vector.\r\n     *\r\n     * @method Phaser.Math.Quaternion#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} b - The Quaternion or Vector to multiply this Quaternion by.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    multiply: function (b)\r\n    {\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        var bx = b.x;\r\n        var by = b.y;\r\n        var bz = b.z;\r\n        var bw = b.w;\r\n\r\n        this.x = ax * bw + aw * bx + ay * bz - az * by;\r\n        this.y = ay * bw + aw * by + az * bx - ax * bz;\r\n        this.z = az * bw + aw * bz + ax * by - ay * bx;\r\n        this.w = aw * bw - ax * bx - ay * by - az * bz;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Smoothly linearly interpolate this Quaternion towards the given Quaternion or Vector.\r\n     *\r\n     * @method Phaser.Math.Quaternion#slerp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Quaternion|Phaser.Math.Vector4)} b - The Quaternion or Vector to interpolate towards.\r\n     * @param {number} t - The percentage of interpolation.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    slerp: function (b, t)\r\n    {\r\n        // benchmarks: http://jsperf.com/quaternion-slerp-implementations\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        var bx = b.x;\r\n        var by = b.y;\r\n        var bz = b.z;\r\n        var bw = b.w;\r\n\r\n        // calc cosine\r\n        var cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n\r\n        // adjust signs (if necessary)\r\n        if (cosom < 0)\r\n        {\r\n            cosom = -cosom;\r\n            bx = - bx;\r\n            by = - by;\r\n            bz = - bz;\r\n            bw = - bw;\r\n        }\r\n\r\n        // \"from\" and \"to\" quaternions are very close\r\n        //  ... so we can do a linear interpolation\r\n        var scale0 = 1 - t;\r\n        var scale1 = t;\r\n\r\n        // calculate coefficients\r\n        if ((1 - cosom) > EPSILON)\r\n        {\r\n            // standard case (slerp)\r\n            var omega = Math.acos(cosom);\r\n            var sinom = Math.sin(omega);\r\n\r\n            scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n            scale1 = Math.sin(t * omega) / sinom;\r\n        }\r\n\r\n        // calculate final values\r\n        this.x = scale0 * ax + scale1 * bx;\r\n        this.y = scale0 * ay + scale1 * by;\r\n        this.z = scale0 * az + scale1 * bz;\r\n        this.w = scale0 * aw + scale1 * bw;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Invert this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#invert\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    invert: function ()\r\n    {\r\n        var a0 = this.x;\r\n        var a1 = this.y;\r\n        var a2 = this.z;\r\n        var a3 = this.w;\r\n\r\n        var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\r\n        var invDot = (dot) ? 1 / dot : 0;\r\n\r\n        // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\r\n\r\n        this.x = -a0 * invDot;\r\n        this.y = -a1 * invDot;\r\n        this.z = -a2 * invDot;\r\n        this.w = a3 * invDot;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Convert this Quaternion into its conjugate.\r\n     *\r\n     * Sets the x, y and z components.\r\n     *\r\n     * @method Phaser.Math.Quaternion#conjugate\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    conjugate: function ()\r\n    {\r\n        this.x = -this.x;\r\n        this.y = -this.y;\r\n        this.z = -this.z;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this Quaternion on the X axis.\r\n     *\r\n     * @method Phaser.Math.Quaternion#rotateX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The rotation angle in radians.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    rotateX: function (rad)\r\n    {\r\n        rad *= 0.5;\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        var bx = Math.sin(rad);\r\n        var bw = Math.cos(rad);\r\n\r\n        this.x = ax * bw + aw * bx;\r\n        this.y = ay * bw + az * bx;\r\n        this.z = az * bw - ay * bx;\r\n        this.w = aw * bw - ax * bx;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this Quaternion on the Y axis.\r\n     *\r\n     * @method Phaser.Math.Quaternion#rotateY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The rotation angle in radians.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    rotateY: function (rad)\r\n    {\r\n        rad *= 0.5;\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        var by = Math.sin(rad);\r\n        var bw = Math.cos(rad);\r\n\r\n        this.x = ax * bw - az * by;\r\n        this.y = ay * bw + aw * by;\r\n        this.z = az * bw + ax * by;\r\n        this.w = aw * bw - ay * by;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotate this Quaternion on the Z axis.\r\n     *\r\n     * @method Phaser.Math.Quaternion#rotateZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rad - The rotation angle in radians.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    rotateZ: function (rad)\r\n    {\r\n        rad *= 0.5;\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        var bz = Math.sin(rad);\r\n        var bw = Math.cos(rad);\r\n\r\n        this.x = ax * bw + ay * bz;\r\n        this.y = ay * bw - ax * bz;\r\n        this.z = az * bw + aw * bz;\r\n        this.w = aw * bw - az * bz;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Create a unit (or rotation) Quaternion from its x, y, and z components.\r\n     *\r\n     * Sets the w component.\r\n     *\r\n     * @method Phaser.Math.Quaternion#calculateW\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    calculateW: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n\r\n        this.w = -Math.sqrt(1.0 - x * x - y * y - z * z);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Convert the given Matrix into this Quaternion.\r\n     *\r\n     * @method Phaser.Math.Quaternion#fromMat3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} mat - The Matrix to convert from.\r\n     *\r\n     * @return {Phaser.Math.Quaternion} This Quaternion.\r\n     */\r\n    fromMat3: function (mat)\r\n    {\r\n        // benchmarks:\r\n        //    http://jsperf.com/typed-array-access-speed\r\n        //    http://jsperf.com/conversion-of-3x3-matrix-to-quaternion\r\n\r\n        // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\r\n        // article \"Quaternion Calculus and Fast Animation\".\r\n        var m = mat.val;\r\n        var fTrace = m[0] + m[4] + m[8];\r\n        var fRoot;\r\n\r\n        if (fTrace > 0)\r\n        {\r\n            // |w| > 1/2, may as well choose w > 1/2\r\n            fRoot = Math.sqrt(fTrace + 1.0); // 2w\r\n\r\n            this.w = 0.5 * fRoot;\r\n\r\n            fRoot = 0.5 / fRoot; // 1/(4w)\r\n\r\n            this.x = (m[7] - m[5]) * fRoot;\r\n            this.y = (m[2] - m[6]) * fRoot;\r\n            this.z = (m[3] - m[1]) * fRoot;\r\n        }\r\n        else\r\n        {\r\n            // |w| <= 1/2\r\n            var i = 0;\r\n\r\n            if (m[4] > m[0])\r\n            {\r\n                i = 1;\r\n            }\r\n\r\n            if (m[8] > m[i * 3 + i])\r\n            {\r\n                i = 2;\r\n            }\r\n\r\n            var j = siNext[i];\r\n            var k = siNext[j];\r\n\r\n            //  This isn't quite as clean without array access\r\n            fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1);\r\n            tmp[i] = 0.5 * fRoot;\r\n\r\n            fRoot = 0.5 / fRoot;\r\n\r\n            tmp[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\r\n            tmp[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\r\n\r\n            this.x = tmp[0];\r\n            this.y = tmp[1];\r\n            this.z = tmp[2];\r\n            this.w = (m[k * 3 + j] - m[j * 3 + k]) * fRoot;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Quaternion;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1F1YXRlcm5pb24uanM/NzUyYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyw0REFBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsNERBQVc7O0FBRWpDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVEO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVEO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7QUFFQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvUXVhdGVybmlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEFkYXB0ZWQgZnJvbSBbZ2wtbWF0cml4XShodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgpIGJ5IHRvamlcclxuLy8gIGFuZCBbdmVjbWF0aF0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL3ZlY21hdGgpIGJ5IG1hdHRkZXNsXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgVmVjdG9yMyA9IHJlcXVpcmUoJy4vVmVjdG9yMycpO1xyXG52YXIgTWF0cml4MyA9IHJlcXVpcmUoJy4vTWF0cml4MycpO1xyXG5cclxudmFyIEVQU0lMT04gPSAwLjAwMDAwMTtcclxuXHJcbi8vICBTb21lIHNoYXJlZCAncHJpdmF0ZScgYXJyYXlzXHJcbnZhciBzaU5leHQgPSBuZXcgSW50OEFycmF5KFsgMSwgMiwgMCBdKTtcclxudmFyIHRtcCA9IG5ldyBGbG9hdDMyQXJyYXkoWyAwLCAwLCAwIF0pO1xyXG5cclxudmFyIHhVbml0VmVjMyA9IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG52YXIgeVVuaXRWZWMzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcblxyXG52YXIgdG1wdmVjID0gbmV3IFZlY3RvcjMoKTtcclxudmFyIHRtcE1hdDMgPSBuZXcgTWF0cml4MygpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAY2xhc3MgUXVhdGVybmlvblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLk1hdGhcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIHggY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3pdIC0gVGhlIHogY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ddIC0gVGhlIHcgY29tcG9uZW50LlxyXG4gKi9cclxudmFyIFF1YXRlcm5pb24gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUXVhdGVybmlvbiAoeCwgeSwgeiwgdylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb21wb25lbnQgb2YgdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguUXVhdGVybmlvbiN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNvbXBvbmVudCBvZiB0aGlzIFF1YXRlcm5pb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHogY29tcG9uZW50IG9mIHRoaXMgUXVhdGVybmlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jelxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdyBjb21wb25lbnQgb2YgdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguUXVhdGVybmlvbiN3XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB4LnggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy55ID0geC55IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IHgueiB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB4LncgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0geCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IHogfHwgMDtcclxuICAgICAgICAgICAgdGhpcy53ID0gdyB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSBjb21wb25lbnRzIG9mIGEgZ2l2ZW4gUXVhdGVybmlvbiBvciBWZWN0b3IgaW50byB0aGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI2NvcHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlF1YXRlcm5pb258UGhhc2VyLk1hdGguVmVjdG9yNCl9IHNyYyAtIFRoZSBRdWF0ZXJuaW9uIG9yIFZlY3RvciB0byBjb3B5IHRoZSBjb21wb25lbnRzIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHNyYy54O1xyXG4gICAgICAgIHRoaXMueSA9IHNyYy55O1xyXG4gICAgICAgIHRoaXMueiA9IHNyYy56O1xyXG4gICAgICAgIHRoaXMudyA9IHNyYy53O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxvYmplY3QpfSBbeD0wXSAtIFRoZSB4IGNvbXBvbmVudCwgb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcgeCwgeSwgeiwgYW5kIHcgY29tcG9uZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbej0wXSAtIFRoZSB6IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdz0wXSAtIFRoZSB3IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB4LnkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geC56IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMudyA9IHgudyB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB4IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geiB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB3IHx8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBnaXZlbiBRdWF0ZXJuaW9uIG9yIFZlY3RvciB0byB0aGlzIFF1YXRlcm5pb24uIEFkZGl0aW9uIGlzIGNvbXBvbmVudC13aXNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlF1YXRlcm5pb258UGhhc2VyLk1hdGguVmVjdG9yNCl9IHYgLSBUaGUgUXVhdGVybmlvbiBvciBWZWN0b3IgdG8gYWRkIHRvIHRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ICs9IHYueDtcclxuICAgICAgICB0aGlzLnkgKz0gdi55O1xyXG4gICAgICAgIHRoaXMueiArPSB2Lno7XHJcbiAgICAgICAgdGhpcy53ICs9IHYudztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYSBnaXZlbiBRdWF0ZXJuaW9uIG9yIFZlY3RvciBmcm9tIHRoaXMgUXVhdGVybmlvbi4gU3VidHJhY3Rpb24gaXMgY29tcG9uZW50LXdpc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI3N1YnRyYWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufFBoYXNlci5NYXRoLlZlY3RvcjQpfSB2IC0gVGhlIFF1YXRlcm5pb24gb3IgVmVjdG9yIHRvIHN1YnRyYWN0IGZyb20gdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAtPSB2Lng7XHJcbiAgICAgICAgdGhpcy55IC09IHYueTtcclxuICAgICAgICB0aGlzLnogLT0gdi56O1xyXG4gICAgICAgIHRoaXMudyAtPSB2Lnc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHRoaXMgUXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI3NjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGUgLSBUaGUgdmFsdWUgdG8gc2NhbGUgdGhpcyBRdWF0ZXJuaW9uIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzY2FsZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggKj0gc2NhbGU7XHJcbiAgICAgICAgdGhpcy55ICo9IHNjYWxlO1xyXG4gICAgICAgIHRoaXMueiAqPSBzY2FsZTtcclxuICAgICAgICB0aGlzLncgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jbGVuZ3RoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBsZW5ndGggb2YgdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoaXMgUXVhdGVybmlvbiBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNsZW5ndGhTcVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbGVuZ3RoIG9mIHRoaXMgUXVhdGVybmlvbiwgc3F1YXJlZC5cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIHcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNub3JtYWxpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciB3ID0gdGhpcy53O1xyXG4gICAgICAgIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcclxuXHJcbiAgICAgICAgaWYgKGxlbiA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB4ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnogPSB6ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB3ICogbGVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFF1YXRlcm5pb24gYW5kIHRoZSBnaXZlbiBRdWF0ZXJuaW9uIG9yIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jZG90XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufFBoYXNlci5NYXRoLlZlY3RvcjQpfSB2IC0gVGhlIFF1YXRlcm5pb24gb3IgVmVjdG9yIHRvIGRvdCBwcm9kdWN0IHdpdGggdGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRvdCBwcm9kdWN0IG9mIHRoaXMgUXVhdGVybmlvbiBhbmQgdGhlIGdpdmVuIFF1YXRlcm5pb24gb3IgVmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2LnogKyB0aGlzLncgKiB2Lnc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFybHkgaW50ZXJwb2xhdGUgdGhpcyBRdWF0ZXJuaW9uIHRvd2FyZHMgdGhlIGdpdmVuIFF1YXRlcm5pb24gb3IgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNsZXJwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufFBoYXNlci5NYXRoLlZlY3RvcjQpfSB2IC0gVGhlIFF1YXRlcm5pb24gb3IgVmVjdG9yIHRvIGludGVycG9sYXRlIHRvd2FyZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Q9MF0gLSBUaGUgcGVyY2VudGFnZSBvZiBpbnRlcnBvbGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKHYsIHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZCkgeyB0ID0gMDsgfVxyXG5cclxuICAgICAgICB2YXIgYXggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGF5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciBheiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgYXcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHRoaXMueCA9IGF4ICsgdCAqICh2LnggLSBheCk7XHJcbiAgICAgICAgdGhpcy55ID0gYXkgKyB0ICogKHYueSAtIGF5KTtcclxuICAgICAgICB0aGlzLnogPSBheiArIHQgKiAodi56IC0gYXopO1xyXG4gICAgICAgIHRoaXMudyA9IGF3ICsgdCAqICh2LncgLSBhdyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jcm90YXRpb25Ub1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBhIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBiIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgcm90YXRpb25UbzogZnVuY3Rpb24gKGEsIGIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRvdCA9IGEueCAqIGIueCArIGEueSAqIGIueSArIGEueiAqIGIuejtcclxuXHJcbiAgICAgICAgaWYgKGRvdCA8IC0wLjk5OTk5OSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0bXB2ZWMuY29weSh4VW5pdFZlYzMpLmNyb3NzKGEpLmxlbmd0aCgpIDwgRVBTSUxPTilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG1wdmVjLmNvcHkoeVVuaXRWZWMzKS5jcm9zcyhhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdG1wdmVjLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0QXhpc0FuZ2xlKHRtcHZlYywgTWF0aC5QSSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkb3QgPiAwLjk5OTk5OSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMudyA9IDE7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdG1wdmVjLmNvcHkoYSkuY3Jvc3MoYik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB0bXB2ZWMueDtcclxuICAgICAgICAgICAgdGhpcy55ID0gdG1wdmVjLnk7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IHRtcHZlYy56O1xyXG4gICAgICAgICAgICB0aGlzLncgPSAxICsgZG90O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYXhlcyBvZiB0aGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI3NldEF4ZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdmlldyAtIFRoZSB2aWV3IGF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHJpZ2h0IC0gVGhlIHJpZ2h0IGF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHVwIC0gVGhlIHVwd2FyZHMgYXhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIHNldEF4ZXM6IGZ1bmN0aW9uICh2aWV3LCByaWdodCwgdXApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG0gPSB0bXBNYXQzLnZhbDtcclxuXHJcbiAgICAgICAgbVswXSA9IHJpZ2h0Lng7XHJcbiAgICAgICAgbVszXSA9IHJpZ2h0Lnk7XHJcbiAgICAgICAgbVs2XSA9IHJpZ2h0Lno7XHJcblxyXG4gICAgICAgIG1bMV0gPSB1cC54O1xyXG4gICAgICAgIG1bNF0gPSB1cC55O1xyXG4gICAgICAgIG1bN10gPSB1cC56O1xyXG5cclxuICAgICAgICBtWzJdID0gLXZpZXcueDtcclxuICAgICAgICBtWzVdID0gLXZpZXcueTtcclxuICAgICAgICBtWzhdID0gLXZpZXcuejtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbU1hdDModG1wTWF0Mykubm9ybWFsaXplKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgdGhpcyBNYXRyaXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI2lkZW50aXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYXhpcyBhbmdsZSBvZiB0aGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI3NldEF4aXNBbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBheGlzIC0gVGhlIGF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmFkID0gcmFkICogMC41O1xyXG5cclxuICAgICAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHMgKiBheGlzLng7XHJcbiAgICAgICAgdGhpcy55ID0gcyAqIGF4aXMueTtcclxuICAgICAgICB0aGlzLnogPSBzICogYXhpcy56O1xyXG4gICAgICAgIHRoaXMudyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgUXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gUXVhdGVybmlvbiBvciBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5RdWF0ZXJuaW9uI211bHRpcGx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufFBoYXNlci5NYXRoLlZlY3RvcjQpfSBiIC0gVGhlIFF1YXRlcm5pb24gb3IgVmVjdG9yIHRvIG11bHRpcGx5IHRoaXMgUXVhdGVybmlvbiBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYilcclxuICAgIHtcclxuICAgICAgICB2YXIgYXggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGF5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciBheiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgYXcgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHZhciBieCA9IGIueDtcclxuICAgICAgICB2YXIgYnkgPSBiLnk7XHJcbiAgICAgICAgdmFyIGJ6ID0gYi56O1xyXG4gICAgICAgIHZhciBidyA9IGIudztcclxuXHJcbiAgICAgICAgdGhpcy54ID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgICAgICB0aGlzLnkgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgICAgIHRoaXMueiA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYng7XHJcbiAgICAgICAgdGhpcy53ID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU21vb3RobHkgbGluZWFybHkgaW50ZXJwb2xhdGUgdGhpcyBRdWF0ZXJuaW9uIHRvd2FyZHMgdGhlIGdpdmVuIFF1YXRlcm5pb24gb3IgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNzbGVycFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguUXVhdGVybmlvbnxQaGFzZXIuTWF0aC5WZWN0b3I0KX0gYiAtIFRoZSBRdWF0ZXJuaW9uIG9yIFZlY3RvciB0byBpbnRlcnBvbGF0ZSB0b3dhcmRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcGVyY2VudGFnZSBvZiBpbnRlcnBvbGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IFRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqL1xyXG4gICAgc2xlcnA6IGZ1bmN0aW9uIChiLCB0KVxyXG4gICAge1xyXG4gICAgICAgIC8vIGJlbmNobWFya3M6IGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGF6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBhdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgdmFyIGJ4ID0gYi54O1xyXG4gICAgICAgIHZhciBieSA9IGIueTtcclxuICAgICAgICB2YXIgYnogPSBiLno7XHJcbiAgICAgICAgdmFyIGJ3ID0gYi53O1xyXG5cclxuICAgICAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgICAgIHZhciBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxyXG4gICAgICAgIGlmIChjb3NvbSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb3NvbSA9IC1jb3NvbTtcclxuICAgICAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgICAgICBieSA9IC0gYnk7XHJcbiAgICAgICAgICAgIGJ6ID0gLSBiejtcclxuICAgICAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICB2YXIgc2NhbGUwID0gMSAtIHQ7XHJcbiAgICAgICAgdmFyIHNjYWxlMSA9IHQ7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcclxuICAgICAgICBpZiAoKDEgLSBjb3NvbSkgPiBFUFNJTE9OKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgICAgIHZhciBvbWVnYSA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgICAgIHZhciBzaW5vbSA9IE1hdGguc2luKG9tZWdhKTtcclxuXHJcbiAgICAgICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgICAgICBzY2FsZTEgPSBNYXRoLnNpbih0ICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICAgICAgdGhpcy54ID0gc2NhbGUwICogYXggKyBzY2FsZTEgKiBieDtcclxuICAgICAgICB0aGlzLnkgPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgICAgIHRoaXMueiA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICAgICAgdGhpcy53ID0gc2NhbGUwICogYXcgKyBzY2FsZTEgKiBidztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jaW52ZXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYTAgPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGExID0gdGhpcy55O1xyXG4gICAgICAgIHZhciBhMiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgYTMgPSB0aGlzLnc7XHJcblxyXG4gICAgICAgIHZhciBkb3QgPSBhMCAqIGEwICsgYTEgKiBhMSArIGEyICogYTIgKyBhMyAqIGEzO1xyXG4gICAgICAgIHZhciBpbnZEb3QgPSAoZG90KSA/IDEgLyBkb3QgOiAwO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBXb3VsZCBiZSBmYXN0ZXIgdG8gcmV0dXJuIFswLDAsMCwwXSBpbW1lZGlhdGVseSBpZiBkb3QgPT0gMFxyXG5cclxuICAgICAgICB0aGlzLnggPSAtYTAgKiBpbnZEb3Q7XHJcbiAgICAgICAgdGhpcy55ID0gLWExICogaW52RG90O1xyXG4gICAgICAgIHRoaXMueiA9IC1hMiAqIGludkRvdDtcclxuICAgICAgICB0aGlzLncgPSBhMyAqIGludkRvdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCB0aGlzIFF1YXRlcm5pb24gaW50byBpdHMgY29uanVnYXRlLlxyXG4gICAgICpcclxuICAgICAqIFNldHMgdGhlIHgsIHkgYW5kIHogY29tcG9uZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jY29uanVnYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBUaGlzIFF1YXRlcm5pb24uXHJcbiAgICAgKi9cclxuICAgIGNvbmp1Z2F0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSAtdGhpcy54O1xyXG4gICAgICAgIHRoaXMueSA9IC10aGlzLnk7XHJcbiAgICAgICAgdGhpcy56ID0gLXRoaXMuejtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoaXMgUXVhdGVybmlvbiBvbiB0aGUgWCBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNyb3RhdGVYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIHJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbiAocmFkKVxyXG4gICAge1xyXG4gICAgICAgIHJhZCAqPSAwLjU7XHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGF6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBhdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgdmFyIGJ4ID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYncgPSBNYXRoLmNvcyhyYWQpO1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheCAqIGJ3ICsgYXcgKiBieDtcclxuICAgICAgICB0aGlzLnkgPSBheSAqIGJ3ICsgYXogKiBieDtcclxuICAgICAgICB0aGlzLnogPSBheiAqIGJ3IC0gYXkgKiBieDtcclxuICAgICAgICB0aGlzLncgPSBhdyAqIGJ3IC0gYXggKiBieDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoaXMgUXVhdGVybmlvbiBvbiB0aGUgWSBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNyb3RhdGVZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIHJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKVxyXG4gICAge1xyXG4gICAgICAgIHJhZCAqPSAwLjU7XHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGF6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBhdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgdmFyIGJ5ID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYncgPSBNYXRoLmNvcyhyYWQpO1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheCAqIGJ3IC0gYXogKiBieTtcclxuICAgICAgICB0aGlzLnkgPSBheSAqIGJ3ICsgYXcgKiBieTtcclxuICAgICAgICB0aGlzLnogPSBheiAqIGJ3ICsgYXggKiBieTtcclxuICAgICAgICB0aGlzLncgPSBhdyAqIGJ3IC0gYXkgKiBieTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoaXMgUXVhdGVybmlvbiBvbiB0aGUgWiBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUXVhdGVybmlvbiNyb3RhdGVaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkIC0gVGhlIHJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICByb3RhdGVaOiBmdW5jdGlvbiAocmFkKVxyXG4gICAge1xyXG4gICAgICAgIHJhZCAqPSAwLjU7XHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGF6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBhdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgdmFyIGJ6ID0gTWF0aC5zaW4ocmFkKTtcclxuICAgICAgICB2YXIgYncgPSBNYXRoLmNvcyhyYWQpO1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheCAqIGJ3ICsgYXkgKiBiejtcclxuICAgICAgICB0aGlzLnkgPSBheSAqIGJ3IC0gYXggKiBiejtcclxuICAgICAgICB0aGlzLnogPSBheiAqIGJ3ICsgYXcgKiBiejtcclxuICAgICAgICB0aGlzLncgPSBhdyAqIGJ3IC0gYXogKiBiejtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgdW5pdCAob3Igcm90YXRpb24pIFF1YXRlcm5pb24gZnJvbSBpdHMgeCwgeSwgYW5kIHogY29tcG9uZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBTZXRzIHRoZSB3IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jY2FsY3VsYXRlV1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG5cclxuICAgICAgICB0aGlzLncgPSAtTWF0aC5zcXJ0KDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgdGhlIGdpdmVuIE1hdHJpeCBpbnRvIHRoaXMgUXVhdGVybmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlF1YXRlcm5pb24jZnJvbU1hdDNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4M30gbWF0IC0gVGhlIE1hdHJpeCB0byBjb252ZXJ0IGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguUXVhdGVybmlvbn0gVGhpcyBRdWF0ZXJuaW9uLlxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MzogZnVuY3Rpb24gKG1hdClcclxuICAgIHtcclxuICAgICAgICAvLyBiZW5jaG1hcmtzOlxyXG4gICAgICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3R5cGVkLWFycmF5LWFjY2Vzcy1zcGVlZFxyXG4gICAgICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL2NvbnZlcnNpb24tb2YtM3gzLW1hdHJpeC10by1xdWF0ZXJuaW9uXHJcblxyXG4gICAgICAgIC8vIEFsZ29yaXRobSBpbiBLZW4gU2hvZW1ha2UncyBhcnRpY2xlIGluIDE5ODcgU0lHR1JBUEggY291cnNlIG5vdGVzXHJcbiAgICAgICAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXHJcbiAgICAgICAgdmFyIG0gPSBtYXQudmFsO1xyXG4gICAgICAgIHZhciBmVHJhY2UgPSBtWzBdICsgbVs0XSArIG1bOF07XHJcbiAgICAgICAgdmFyIGZSb290O1xyXG5cclxuICAgICAgICBpZiAoZlRyYWNlID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuICAgICAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgLy8gMndcclxuXHJcbiAgICAgICAgICAgIHRoaXMudyA9IDAuNSAqIGZSb290O1xyXG5cclxuICAgICAgICAgICAgZlJvb3QgPSAwLjUgLyBmUm9vdDsgLy8gMS8oNHcpXHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSAobVs3XSAtIG1bNV0pICogZlJvb3Q7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IChtWzJdIC0gbVs2XSkgKiBmUm9vdDtcclxuICAgICAgICAgICAgdGhpcy56ID0gKG1bM10gLSBtWzFdKSAqIGZSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyB8d3wgPD0gMS8yXHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChtWzRdID4gbVswXSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChtWzhdID4gbVtpICogMyArIGldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGogPSBzaU5leHRbaV07XHJcbiAgICAgICAgICAgIHZhciBrID0gc2lOZXh0W2pdO1xyXG5cclxuICAgICAgICAgICAgLy8gIFRoaXMgaXNuJ3QgcXVpdGUgYXMgY2xlYW4gd2l0aG91dCBhcnJheSBhY2Nlc3NcclxuICAgICAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpICogMyArIGldIC0gbVtqICogMyArIGpdIC0gbVtrICogMyArIGtdICsgMSk7XHJcbiAgICAgICAgICAgIHRtcFtpXSA9IDAuNSAqIGZSb290O1xyXG5cclxuICAgICAgICAgICAgZlJvb3QgPSAwLjUgLyBmUm9vdDtcclxuXHJcbiAgICAgICAgICAgIHRtcFtqXSA9IChtW2ogKiAzICsgaV0gKyBtW2kgKiAzICsgal0pICogZlJvb3Q7XHJcbiAgICAgICAgICAgIHRtcFtrXSA9IChtW2sgKiAzICsgaV0gKyBtW2kgKiAzICsga10pICogZlJvb3Q7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB0bXBbMF07XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHRtcFsxXTtcclxuICAgICAgICAgICAgdGhpcy56ID0gdG1wWzJdO1xyXG4gICAgICAgICAgICB0aGlzLncgPSAobVtrICogMyArIGpdIC0gbVtqICogMyArIGtdKSAqIGZSb290O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVhdGVybmlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Quaternion.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RadToDeg.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/math/RadToDeg.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Convert the given angle in radians, to the equivalent angle in degrees.\r\n *\r\n * @function Phaser.Math.RadToDeg\r\n * @since 3.0.0\r\n *\r\n * @param {number} radians - The angle in radians to convert ot degrees.\r\n *\r\n * @return {integer} The given angle converted to degrees.\r\n */\r\nvar RadToDeg = function (radians)\r\n{\r\n    return radians * CONST.RAD_TO_DEG;\r\n};\r\n\r\nmodule.exports = RadToDeg;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JhZFRvRGVnLmpzPzdjYTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JhZFRvRGVnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgaW4gcmFkaWFucywgdG8gdGhlIGVxdWl2YWxlbnQgYW5nbGUgaW4gZGVncmVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJhZFRvRGVnXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIGNvbnZlcnQgb3QgZGVncmVlcy5cclxuICpcclxuICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGdpdmVuIGFuZ2xlIGNvbnZlcnRlZCB0byBkZWdyZWVzLlxyXG4gKi9cclxudmFyIFJhZFRvRGVnID0gZnVuY3Rpb24gKHJhZGlhbnMpXHJcbntcclxuICAgIHJldHVybiByYWRpYW5zICogQ09OU1QuUkFEX1RPX0RFRztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFkVG9EZWc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RadToDeg.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RandomXY.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/math/RandomXY.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compute a random unit vector.\r\n *\r\n * Computes random values for the given vector between -1 and 1 that can be used to represent a direction.\r\n *\r\n * Optionally accepts a scale value to scale the resulting vector by.\r\n *\r\n * @function Phaser.Math.RandomXY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2} vector - The Vector to compute random values for.\r\n * @param {number} [scale=1] - The scale of the random values.\r\n *\r\n * @return {Phaser.Math.Vector2} The given Vector.\r\n */\r\nvar RandomXY = function (vector, scale)\r\n{\r\n    if (scale === undefined) { scale = 1; }\r\n\r\n    var r = Math.random() * 2 * Math.PI;\r\n\r\n    vector.x = Math.cos(r) * scale;\r\n    vector.y = Math.sin(r) * scale;\r\n\r\n    return vector;\r\n};\r\n\r\nmodule.exports = RandomXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JhbmRvbVhZLmpzPzJjOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvUmFuZG9tWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlIGEgcmFuZG9tIHVuaXQgdmVjdG9yLlxyXG4gKlxyXG4gKiBDb21wdXRlcyByYW5kb20gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdmVjdG9yIGJldHdlZW4gLTEgYW5kIDEgdGhhdCBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYSBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIE9wdGlvbmFsbHkgYWNjZXB0cyBhIHNjYWxlIHZhbHVlIHRvIHNjYWxlIHRoZSByZXN1bHRpbmcgdmVjdG9yIGJ5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUmFuZG9tWFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gdmVjdG9yIC0gVGhlIFZlY3RvciB0byBjb21wdXRlIHJhbmRvbSB2YWx1ZXMgZm9yLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NjYWxlPTFdIC0gVGhlIHNjYWxlIG9mIHRoZSByYW5kb20gdmFsdWVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgZ2l2ZW4gVmVjdG9yLlxyXG4gKi9cclxudmFyIFJhbmRvbVhZID0gZnVuY3Rpb24gKHZlY3Rvciwgc2NhbGUpXHJcbntcclxuICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7IHNjYWxlID0gMTsgfVxyXG5cclxuICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDIgKiBNYXRoLlBJO1xyXG5cclxuICAgIHZlY3Rvci54ID0gTWF0aC5jb3MocikgKiBzY2FsZTtcclxuICAgIHZlY3Rvci55ID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcclxuXHJcbiAgICByZXR1cm4gdmVjdG9yO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21YWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RandomXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RandomXYZ.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/math/RandomXYZ.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compute a random position vector in a spherical area, optionally defined by the given radius.\r\n *\r\n * @function Phaser.Math.RandomXYZ\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector3} vec3 - The Vector to compute random values for.\r\n * @param {number} [radius=1] - The radius.\r\n *\r\n * @return {Phaser.Math.Vector3} The given Vector.\r\n */\r\nvar RandomXYZ = function (vec3, radius)\r\n{\r\n    if (radius === undefined) { radius = 1; }\r\n\r\n    var r = Math.random() * 2 * Math.PI;\r\n    var z = (Math.random() * 2) - 1;\r\n    var zScale = Math.sqrt(1 - z * z) * radius;\r\n\r\n    vec3.x = Math.cos(r) * zScale;\r\n    vec3.y = Math.sin(r) * zScale;\r\n    vec3.z = z * radius;\r\n\r\n    return vec3;\r\n};\r\n\r\nmodule.exports = RandomXYZ;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JhbmRvbVhZWi5qcz84YzIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsWUFBWTs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9SYW5kb21YWVouanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlIGEgcmFuZG9tIHBvc2l0aW9uIHZlY3RvciBpbiBhIHNwaGVyaWNhbCBhcmVhLCBvcHRpb25hbGx5IGRlZmluZWQgYnkgdGhlIGdpdmVuIHJhZGl1cy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJhbmRvbVhZWlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSB2ZWMzIC0gVGhlIFZlY3RvciB0byBjb21wdXRlIHJhbmRvbSB2YWx1ZXMgZm9yLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0xXSAtIFRoZSByYWRpdXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoZSBnaXZlbiBWZWN0b3IuXHJcbiAqL1xyXG52YXIgUmFuZG9tWFlaID0gZnVuY3Rpb24gKHZlYzMsIHJhZGl1cylcclxue1xyXG4gICAgaWYgKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSB7IHJhZGl1cyA9IDE7IH1cclxuXHJcbiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAyICogTWF0aC5QSTtcclxuICAgIHZhciB6ID0gKE1hdGgucmFuZG9tKCkgKiAyKSAtIDE7XHJcbiAgICB2YXIgelNjYWxlID0gTWF0aC5zcXJ0KDEgLSB6ICogeikgKiByYWRpdXM7XHJcblxyXG4gICAgdmVjMy54ID0gTWF0aC5jb3MocikgKiB6U2NhbGU7XHJcbiAgICB2ZWMzLnkgPSBNYXRoLnNpbihyKSAqIHpTY2FsZTtcclxuICAgIHZlYzMueiA9IHogKiByYWRpdXM7XHJcblxyXG4gICAgcmV0dXJuIHZlYzM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVhZWjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RandomXYZ.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RandomXYZW.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/RandomXYZW.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compute a random four-dimensional vector.\r\n *\r\n * @function Phaser.Math.RandomXYZW\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector4} vec4 - The Vector to compute random values for.\r\n * @param {number} [scale=1] - The scale of the random values.\r\n *\r\n * @return {Phaser.Math.Vector4} The given Vector.\r\n */\r\nvar RandomXYZW = function (vec4, scale)\r\n{\r\n    if (scale === undefined) { scale = 1; }\r\n\r\n    // TODO: Not spherical; should fix this for more uniform distribution\r\n    vec4.x = (Math.random() * 2 - 1) * scale;\r\n    vec4.y = (Math.random() * 2 - 1) * scale;\r\n    vec4.z = (Math.random() * 2 - 1) * scale;\r\n    vec4.w = (Math.random() * 2 - 1) * scale;\r\n\r\n    return vec4;\r\n};\r\n\r\nmodule.exports = RandomXYZW;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JhbmRvbVhZWlcuanM/NzhlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9SYW5kb21YWVpXLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29tcHV0ZSBhIHJhbmRvbSBmb3VyLWRpbWVuc2lvbmFsIHZlY3Rvci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJhbmRvbVhZWldcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yNH0gdmVjNCAtIFRoZSBWZWN0b3IgdG8gY29tcHV0ZSByYW5kb20gdmFsdWVzIGZvci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xXSAtIFRoZSBzY2FsZSBvZiB0aGUgcmFuZG9tIHZhbHVlcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yNH0gVGhlIGdpdmVuIFZlY3Rvci5cclxuICovXHJcbnZhciBSYW5kb21YWVpXID0gZnVuY3Rpb24gKHZlYzQsIHNjYWxlKVxyXG57XHJcbiAgICBpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkgeyBzY2FsZSA9IDE7IH1cclxuXHJcbiAgICAvLyBUT0RPOiBOb3Qgc3BoZXJpY2FsOyBzaG91bGQgZml4IHRoaXMgZm9yIG1vcmUgdW5pZm9ybSBkaXN0cmlidXRpb25cclxuICAgIHZlYzQueCA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogc2NhbGU7XHJcbiAgICB2ZWM0LnkgPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHNjYWxlO1xyXG4gICAgdmVjNC56ID0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBzY2FsZTtcclxuICAgIHZlYzQudyA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogc2NhbGU7XHJcblxyXG4gICAgcmV0dXJuIHZlYzQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVhZWlc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RandomXYZW.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Rotate.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/Rotate.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotate a given point by a given angle around the origin (0, 0), in an anti-clockwise direction.\r\n *\r\n * @function Phaser.Math.Rotate\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|object)} point - The point to be rotated.\r\n * @param {number} angle - The angle to be rotated by in an anticlockwise direction.\r\n *\r\n * @return {Phaser.Geom.Point} The given point, rotated by the given angle in an anticlockwise direction.\r\n */\r\nvar Rotate = function (point, angle)\r\n{\r\n    var x = point.x;\r\n    var y = point.y;\r\n\r\n    point.x = (x * Math.cos(angle)) - (y * Math.sin(angle));\r\n    point.y = (x * Math.sin(angle)) + (y * Math.cos(angle));\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZS5qcz9iOGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvUm90YXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm90YXRlIGEgZ2l2ZW4gcG9pbnQgYnkgYSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIG9yaWdpbiAoMCwgMCksIGluIGFuIGFudGktY2xvY2t3aXNlIGRpcmVjdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJvdGF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gYmUgcm90YXRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIGJlIHJvdGF0ZWQgYnkgaW4gYW4gYW50aWNsb2Nrd2lzZSBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgZ2l2ZW4gcG9pbnQsIHJvdGF0ZWQgYnkgdGhlIGdpdmVuIGFuZ2xlIGluIGFuIGFudGljbG9ja3dpc2UgZGlyZWN0aW9uLlxyXG4gKi9cclxudmFyIFJvdGF0ZSA9IGZ1bmN0aW9uIChwb2ludCwgYW5nbGUpXHJcbntcclxuICAgIHZhciB4ID0gcG9pbnQueDtcclxuICAgIHZhciB5ID0gcG9pbnQueTtcclxuXHJcbiAgICBwb2ludC54ID0gKHggKiBNYXRoLmNvcyhhbmdsZSkpIC0gKHkgKiBNYXRoLnNpbihhbmdsZSkpO1xyXG4gICAgcG9pbnQueSA9ICh4ICogTWF0aC5zaW4oYW5nbGUpKSArICh5ICogTWF0aC5jb3MoYW5nbGUpKTtcclxuXHJcbiAgICByZXR1cm4gcG9pbnQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Rotate.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RotateAround.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/math/RotateAround.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotate a `point` around `x` and `y` by the given `angle`.\r\n *\r\n * @function Phaser.Math.RotateAround\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|object)} point - The point to be rotated.\r\n * @param {number} x - The horizontal coordinate to rotate around.\r\n * @param {number} y - The vertical coordinate to rotate around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Point} The given point, rotated by the given angle around the given coordinates.\r\n */\r\nvar RotateAround = function (point, x, y, angle)\r\n{\r\n    var c = Math.cos(angle);\r\n    var s = Math.sin(angle);\r\n\r\n    var tx = point.x - x;\r\n    var ty = point.y - y;\r\n\r\n    point.x = tx * c - ty * s + x;\r\n    point.y = tx * s + ty * c + y;\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = RotateAround;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZUFyb3VuZC5qcz81NTk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZUFyb3VuZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIGBwb2ludGAgYXJvdW5kIGB4YCBhbmQgYHlgIGJ5IHRoZSBnaXZlbiBgYW5nbGVgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUm90YXRlQXJvdW5kXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBiZSByb3RhdGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgdG8gcm90YXRlIGFyb3VuZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSB0byByb3RhdGUgYXJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBnaXZlbiBwb2ludCwgcm90YXRlZCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmQgPSBmdW5jdGlvbiAocG9pbnQsIHgsIHksIGFuZ2xlKVxyXG57XHJcbiAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgIHZhciBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuICAgIHZhciB0eCA9IHBvaW50LnggLSB4O1xyXG4gICAgdmFyIHR5ID0gcG9pbnQueSAtIHk7XHJcblxyXG4gICAgcG9pbnQueCA9IHR4ICogYyAtIHR5ICogcyArIHg7XHJcbiAgICBwb2ludC55ID0gdHggKiBzICsgdHkgKiBjICsgeTtcclxuXHJcbiAgICByZXR1cm4gcG9pbnQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZUFyb3VuZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RotateAround.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RotateAroundDistance.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/RotateAroundDistance.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotate a `point` around `x` and `y` by the given `angle` and `distance`.\r\n *\r\n * @function Phaser.Math.RotateAroundDistance\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|object)} point - The point to be rotated.\r\n * @param {number} x - The horizontal coordinate to rotate around.\r\n * @param {number} y - The vertical coordinate to rotate around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n * @param {number} distance - The distance from (x, y) to place the point at.\r\n *\r\n * @return {Phaser.Geom.Point} The given point.\r\n */\r\nvar RotateAroundDistance = function (point, x, y, angle, distance)\r\n{\r\n    var t = angle + Math.atan2(point.y - y, point.x - x);\r\n\r\n    point.x = x + (distance * Math.cos(t));\r\n    point.y = y + (distance * Math.sin(t));\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = RotateAroundDistance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZUFyb3VuZERpc3RhbmNlLmpzPzM0MzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvUm90YXRlQXJvdW5kRGlzdGFuY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSBgcG9pbnRgIGFyb3VuZCBgeGAgYW5kIGB5YCBieSB0aGUgZ2l2ZW4gYGFuZ2xlYCBhbmQgYGRpc3RhbmNlYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJvdGF0ZUFyb3VuZERpc3RhbmNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBiZSByb3RhdGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgdG8gcm90YXRlIGFyb3VuZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSB0byByb3RhdGUgYXJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIGZyb20gKHgsIHkpIHRvIHBsYWNlIHRoZSBwb2ludCBhdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBnaXZlbiBwb2ludC5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmREaXN0YW5jZSA9IGZ1bmN0aW9uIChwb2ludCwgeCwgeSwgYW5nbGUsIGRpc3RhbmNlKVxyXG57XHJcbiAgICB2YXIgdCA9IGFuZ2xlICsgTWF0aC5hdGFuMihwb2ludC55IC0geSwgcG9pbnQueCAtIHgpO1xyXG5cclxuICAgIHBvaW50LnggPSB4ICsgKGRpc3RhbmNlICogTWF0aC5jb3ModCkpO1xyXG4gICAgcG9pbnQueSA9IHkgKyAoZGlzdGFuY2UgKiBNYXRoLnNpbih0KSk7XHJcblxyXG4gICAgcmV0dXJuIHBvaW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmREaXN0YW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RotateAroundDistance.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RotateVec3.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/RotateVec3.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector3 = __webpack_require__(/*! ../math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\nvar Matrix4 = __webpack_require__(/*! ../math/Matrix4 */ \"./node_modules/phaser/src/math/Matrix4.js\");\r\nvar Quaternion = __webpack_require__(/*! ../math/Quaternion */ \"./node_modules/phaser/src/math/Quaternion.js\");\r\n\r\nvar tmpMat4 = new Matrix4();\r\nvar tmpQuat = new Quaternion();\r\nvar tmpVec3 = new Vector3();\r\n\r\n/**\r\n * Rotates a vector in place by axis angle.\r\n *\r\n * This is the same as transforming a point by an\r\n * axis-angle quaternion, but it has higher precision.\r\n *\r\n * @function Phaser.Math.RotateVec3\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector3} vec - The vector to be rotated.\r\n * @param {Phaser.Math.Vector3} axis - The axis to rotate around.\r\n * @param {number} radians - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Math.Vector3} The given vector.\r\n */\r\nvar RotateVec3 = function (vec, axis, radians)\r\n{\r\n    //  Set the quaternion to our axis angle\r\n    tmpQuat.setAxisAngle(axis, radians);\r\n\r\n    //  Create a rotation matrix from the axis angle\r\n    tmpMat4.fromRotationTranslation(tmpQuat, tmpVec3.set(0, 0, 0));\r\n\r\n    //  Multiply our vector by the rotation matrix\r\n    return vec.transformMat4(tmpMat4);\r\n};\r\n\r\nmodule.exports = RotateVec3;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZVZlYzMuanM/MTEzMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsa0VBQWlCO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHdFQUFvQjs7QUFFN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdGF0ZVZlYzMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBWZWN0b3IzID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IzJyk7XHJcbnZhciBNYXRyaXg0ID0gcmVxdWlyZSgnLi4vbWF0aC9NYXRyaXg0Jyk7XHJcbnZhciBRdWF0ZXJuaW9uID0gcmVxdWlyZSgnLi4vbWF0aC9RdWF0ZXJuaW9uJyk7XHJcblxyXG52YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcbnZhciB0bXBRdWF0ID0gbmV3IFF1YXRlcm5pb24oKTtcclxudmFyIHRtcFZlYzMgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSB2ZWN0b3IgaW4gcGxhY2UgYnkgYXhpcyBhbmdsZS5cclxuICpcclxuICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0cmFuc2Zvcm1pbmcgYSBwb2ludCBieSBhblxyXG4gKiBheGlzLWFuZ2xlIHF1YXRlcm5pb24sIGJ1dCBpdCBoYXMgaGlnaGVyIHByZWNpc2lvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJvdGF0ZVZlYzNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdmVjIC0gVGhlIHZlY3RvciB0byBiZSByb3RhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IGF4aXMgLSBUaGUgYXhpcyB0byByb3RhdGUgYXJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGUgZ2l2ZW4gdmVjdG9yLlxyXG4gKi9cclxudmFyIFJvdGF0ZVZlYzMgPSBmdW5jdGlvbiAodmVjLCBheGlzLCByYWRpYW5zKVxyXG57XHJcbiAgICAvLyAgU2V0IHRoZSBxdWF0ZXJuaW9uIHRvIG91ciBheGlzIGFuZ2xlXHJcbiAgICB0bXBRdWF0LnNldEF4aXNBbmdsZShheGlzLCByYWRpYW5zKTtcclxuXHJcbiAgICAvLyAgQ3JlYXRlIGEgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIGF4aXMgYW5nbGVcclxuICAgIHRtcE1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odG1wUXVhdCwgdG1wVmVjMy5zZXQoMCwgMCwgMCkpO1xyXG5cclxuICAgIC8vICBNdWx0aXBseSBvdXIgdmVjdG9yIGJ5IHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgIHJldHVybiB2ZWMudHJhbnNmb3JtTWF0NCh0bXBNYXQ0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlVmVjMztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RotateVec3.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RoundAwayFromZero.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/RoundAwayFromZero.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Round a given number so it is further away from zero. That is, positive numbers are rounded up, and negative numbers are rounded down.\r\n *\r\n * @function Phaser.Math.RoundAwayFromZero\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The number to round.\r\n *\r\n * @return {number} The rounded number, rounded away from zero.\r\n */\r\nvar RoundAwayFromZero = function (value)\r\n{\r\n    // \"Opposite\" of truncate.\r\n    return (value > 0) ? Math.ceil(value) : Math.floor(value);\r\n};\r\n\r\nmodule.exports = RoundAwayFromZero;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdW5kQXdheUZyb21aZXJvLmpzP2E0ODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdW5kQXdheUZyb21aZXJvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmQgYSBnaXZlbiBudW1iZXIgc28gaXQgaXMgZnVydGhlciBhd2F5IGZyb20gemVyby4gVGhhdCBpcywgcG9zaXRpdmUgbnVtYmVycyBhcmUgcm91bmRlZCB1cCwgYW5kIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJvdW5kZWQgZG93bi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJvdW5kQXdheUZyb21aZXJvXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIHJvdW5kLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByb3VuZGVkIG51bWJlciwgcm91bmRlZCBhd2F5IGZyb20gemVyby5cclxuICovXHJcbnZhciBSb3VuZEF3YXlGcm9tWmVybyA9IGZ1bmN0aW9uICh2YWx1ZSlcclxue1xyXG4gICAgLy8gXCJPcHBvc2l0ZVwiIG9mIHRydW5jYXRlLlxyXG4gICAgcmV0dXJuICh2YWx1ZSA+IDApID8gTWF0aC5jZWlsKHZhbHVlKSA6IE1hdGguZmxvb3IodmFsdWUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3VuZEF3YXlGcm9tWmVybztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RoundAwayFromZero.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/RoundTo.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/RoundTo.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Round a value to the given precision.\r\n * \r\n * For example:\r\n * \r\n * ```javascript\r\n * RoundTo(123.456, 0) = 123\r\n * RoundTo(123.456, 1) = 120\r\n * RoundTo(123.456, 2) = 100\r\n * ```\r\n * \r\n * To round the decimal, i.e. to round to precision, pass in a negative `place`:\r\n * \r\n * ```javascript\r\n * RoundTo(123.456789, 0) = 123\r\n * RoundTo(123.456789, -1) = 123.5\r\n * RoundTo(123.456789, -2) = 123.46\r\n * RoundTo(123.456789, -3) = 123.457\r\n * ```\r\n *\r\n * @function Phaser.Math.RoundTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to round.\r\n * @param {integer} [place=0] - The place to round to. Positive to round the units, negative to round the decimal.\r\n * @param {integer} [base=10] - The base to round in. Default is 10 for decimal.\r\n *\r\n * @return {number} The rounded value.\r\n */\r\nvar RoundTo = function (value, place, base)\r\n{\r\n    if (place === undefined) { place = 0; }\r\n    if (base === undefined) { base = 10; }\r\n\r\n    var p = Math.pow(base, -place);\r\n\r\n    return Math.round(value * p) / p;\r\n};\r\n\r\nmodule.exports = RoundTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1JvdW5kVG8uanM/OTk2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXO0FBQ3pDLDZCQUE2QixXQUFXOztBQUV4Qzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9Sb3VuZFRvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmQgYSB2YWx1ZSB0byB0aGUgZ2l2ZW4gcHJlY2lzaW9uLlxyXG4gKiBcclxuICogRm9yIGV4YW1wbGU6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIFJvdW5kVG8oMTIzLjQ1NiwgMCkgPSAxMjNcclxuICogUm91bmRUbygxMjMuNDU2LCAxKSA9IDEyMFxyXG4gKiBSb3VuZFRvKDEyMy40NTYsIDIpID0gMTAwXHJcbiAqIGBgYFxyXG4gKiBcclxuICogVG8gcm91bmQgdGhlIGRlY2ltYWwsIGkuZS4gdG8gcm91bmQgdG8gcHJlY2lzaW9uLCBwYXNzIGluIGEgbmVnYXRpdmUgYHBsYWNlYDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogUm91bmRUbygxMjMuNDU2Nzg5LCAwKSA9IDEyM1xyXG4gKiBSb3VuZFRvKDEyMy40NTY3ODksIC0xKSA9IDEyMy41XHJcbiAqIFJvdW5kVG8oMTIzLjQ1Njc4OSwgLTIpID0gMTIzLjQ2XHJcbiAqIFJvdW5kVG8oMTIzLjQ1Njc4OSwgLTMpID0gMTIzLjQ1N1xyXG4gKiBgYGBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLlJvdW5kVG9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByb3VuZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbcGxhY2U9MF0gLSBUaGUgcGxhY2UgdG8gcm91bmQgdG8uIFBvc2l0aXZlIHRvIHJvdW5kIHRoZSB1bml0cywgbmVnYXRpdmUgdG8gcm91bmQgdGhlIGRlY2ltYWwuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2Jhc2U9MTBdIC0gVGhlIGJhc2UgdG8gcm91bmQgaW4uIERlZmF1bHQgaXMgMTAgZm9yIGRlY2ltYWwuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJvdW5kZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgUm91bmRUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcGxhY2UsIGJhc2UpXHJcbntcclxuICAgIGlmIChwbGFjZSA9PT0gdW5kZWZpbmVkKSB7IHBsYWNlID0gMDsgfVxyXG4gICAgaWYgKGJhc2UgPT09IHVuZGVmaW5lZCkgeyBiYXNlID0gMTA7IH1cclxuXHJcbiAgICB2YXIgcCA9IE1hdGgucG93KGJhc2UsIC1wbGFjZSk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwKSAvIHA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kVG87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/RoundTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/SinCosTableGenerator.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/SinCosTableGenerator.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Generate a series of sine and cosine values.\r\n *\r\n * @function Phaser.Math.SinCosTableGenerator\r\n * @since 3.0.0\r\n *\r\n * @param {number} length - The number of values to generate.\r\n * @param {number} [sinAmp=1] - The sine value amplitude.\r\n * @param {number} [cosAmp=1] - The cosine value amplitude.\r\n * @param {number} [frequency=1] - The frequency of the values.\r\n *\r\n * @return {Phaser.Types.Math.SinCosTable} The generated values.\r\n */\r\nvar SinCosTableGenerator = function (length, sinAmp, cosAmp, frequency)\r\n{\r\n    if (sinAmp === undefined) { sinAmp = 1; }\r\n    if (cosAmp === undefined) { cosAmp = 1; }\r\n    if (frequency === undefined) { frequency = 1; }\r\n\r\n    frequency *= Math.PI / length;\r\n\r\n    var cos = [];\r\n    var sin = [];\r\n\r\n    for (var c = 0; c < length; c++)\r\n    {\r\n        cosAmp -= sinAmp * frequency;\r\n        sinAmp += cosAmp * frequency;\r\n\r\n        cos[c] = cosAmp;\r\n        sin[c] = sinAmp;\r\n    }\r\n\r\n    return {\r\n        sin: sin,\r\n        cos: cos,\r\n        length: length\r\n    };\r\n};\r\n\r\nmodule.exports = SinCosTableGenerator;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1NpbkNvc1RhYmxlR2VuZXJhdG9yLmpzPzhmNmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixZQUFZO0FBQzNDLCtCQUErQixZQUFZO0FBQzNDLGtDQUFrQyxlQUFlOztBQUVqRDs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9TaW5Db3NUYWJsZUdlbmVyYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIGEgc2VyaWVzIG9mIHNpbmUgYW5kIGNvc2luZSB2YWx1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5TaW5Db3NUYWJsZUdlbmVyYXRvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIFRoZSBudW1iZXIgb2YgdmFsdWVzIHRvIGdlbmVyYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpbkFtcD0xXSAtIFRoZSBzaW5lIHZhbHVlIGFtcGxpdHVkZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjb3NBbXA9MV0gLSBUaGUgY29zaW5lIHZhbHVlIGFtcGxpdHVkZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmcmVxdWVuY3k9MV0gLSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2YWx1ZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5NYXRoLlNpbkNvc1RhYmxlfSBUaGUgZ2VuZXJhdGVkIHZhbHVlcy5cclxuICovXHJcbnZhciBTaW5Db3NUYWJsZUdlbmVyYXRvciA9IGZ1bmN0aW9uIChsZW5ndGgsIHNpbkFtcCwgY29zQW1wLCBmcmVxdWVuY3kpXHJcbntcclxuICAgIGlmIChzaW5BbXAgPT09IHVuZGVmaW5lZCkgeyBzaW5BbXAgPSAxOyB9XHJcbiAgICBpZiAoY29zQW1wID09PSB1bmRlZmluZWQpIHsgY29zQW1wID0gMTsgfVxyXG4gICAgaWYgKGZyZXF1ZW5jeSA9PT0gdW5kZWZpbmVkKSB7IGZyZXF1ZW5jeSA9IDE7IH1cclxuXHJcbiAgICBmcmVxdWVuY3kgKj0gTWF0aC5QSSAvIGxlbmd0aDtcclxuXHJcbiAgICB2YXIgY29zID0gW107XHJcbiAgICB2YXIgc2luID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBsZW5ndGg7IGMrKylcclxuICAgIHtcclxuICAgICAgICBjb3NBbXAgLT0gc2luQW1wICogZnJlcXVlbmN5O1xyXG4gICAgICAgIHNpbkFtcCArPSBjb3NBbXAgKiBmcmVxdWVuY3k7XHJcblxyXG4gICAgICAgIGNvc1tjXSA9IGNvc0FtcDtcclxuICAgICAgICBzaW5bY10gPSBzaW5BbXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzaW46IHNpbixcclxuICAgICAgICBjb3M6IGNvcyxcclxuICAgICAgICBsZW5ndGg6IGxlbmd0aFxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2luQ29zVGFibGVHZW5lcmF0b3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/SinCosTableGenerator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/SmoothStep.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/SmoothStep.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate a smooth interpolation percentage of `x` between `min` and `max`.\r\n *\r\n * The function receives the number `x` as an argument and returns 0 if `x` is less than or equal to the left edge,\r\n * 1 if `x` is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial,\r\n * between 0 and 1 otherwise.\r\n *\r\n * @function Phaser.Math.SmoothStep\r\n * @since 3.0.0\r\n * @see {@link https://en.wikipedia.org/wiki/Smoothstep}\r\n *\r\n * @param {number} x - The input value.\r\n * @param {number} min - The minimum value, also known as the 'left edge', assumed smaller than the 'right edge'.\r\n * @param {number} max - The maximum value, also known as the 'right edge', assumed greater than the 'left edge'.\r\n *\r\n * @return {number} The percentage of interpolation, between 0 and 1.\r\n */\r\nvar SmoothStep = function (x, min, max)\r\n{\r\n    if (x <= min)\r\n    {\r\n        return 0;\r\n    }\r\n\r\n    if (x >= max)\r\n    {\r\n        return 1;\r\n    }\r\n\r\n    x = (x - min) / (max - min);\r\n\r\n    return x * x * (3 - 2 * x);\r\n};\r\n\r\nmodule.exports = SmoothStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1Ntb290aFN0ZXAuanM/MDNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvU21vb3RoU3RlcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSBhIHNtb290aCBpbnRlcnBvbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYHhgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgLlxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIG51bWJlciBgeGAgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgMCBpZiBgeGAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2UsXHJcbiAqIDEgaWYgYHhgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmlnaHQgZWRnZSwgYW5kIHNtb290aGx5IGludGVycG9sYXRlcywgdXNpbmcgYSBIZXJtaXRlIHBvbHlub21pYWwsXHJcbiAqIGJldHdlZW4gMCBhbmQgMSBvdGhlcndpc2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5TbW9vdGhTdGVwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwfVxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBpbnB1dCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAnbGVmdCBlZGdlJywgYXNzdW1lZCBzbWFsbGVyIHRoYW4gdGhlICdyaWdodCBlZGdlJy5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAncmlnaHQgZWRnZScsIGFzc3VtZWQgZ3JlYXRlciB0aGFuIHRoZSAnbGVmdCBlZGdlJy5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcGVyY2VudGFnZSBvZiBpbnRlcnBvbGF0aW9uLCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqL1xyXG52YXIgU21vb3RoU3RlcCA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heClcclxue1xyXG4gICAgaWYgKHggPD0gbWluKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh4ID49IG1heClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB4ID0gKHggLSBtaW4pIC8gKG1heCAtIG1pbik7XHJcblxyXG4gICAgcmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aFN0ZXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/SmoothStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/SmootherStep.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/math/SmootherStep.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate a smoother interpolation percentage of `x` between `min` and `max`.\r\n *\r\n * The function receives the number `x` as an argument and returns 0 if `x` is less than or equal to the left edge,\r\n * 1 if `x` is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial,\r\n * between 0 and 1 otherwise.\r\n *\r\n * Produces an even smoother interpolation than {@link Phaser.Math.SmoothStep}.\r\n *\r\n * @function Phaser.Math.SmootherStep\r\n * @since 3.0.0\r\n * @see {@link https://en.wikipedia.org/wiki/Smoothstep#Variations}\r\n *\r\n * @param {number} x - The input value.\r\n * @param {number} min - The minimum value, also known as the 'left edge', assumed smaller than the 'right edge'.\r\n * @param {number} max - The maximum value, also known as the 'right edge', assumed greater than the 'left edge'.\r\n *\r\n * @return {number} The percentage of interpolation, between 0 and 1.\r\n */\r\nvar SmootherStep = function (x, min, max)\r\n{\r\n    x = Math.max(0, Math.min(1, (x - min) / (max - min)));\r\n\r\n    return x * x * x * (x * (x * 6 - 15) + 10);\r\n};\r\n\r\nmodule.exports = SmootherStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1Ntb290aGVyU3RlcC5qcz9kODdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCw2QkFBNkI7QUFDOUU7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvU21vb3RoZXJTdGVwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIGEgc21vb3RoZXIgaW50ZXJwb2xhdGlvbiBwZXJjZW50YWdlIG9mIGB4YCBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YC5cclxuICpcclxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBudW1iZXIgYHhgIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIDAgaWYgYHhgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVmdCBlZGdlLFxyXG4gKiAxIGlmIGB4YCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJpZ2h0IGVkZ2UsIGFuZCBzbW9vdGhseSBpbnRlcnBvbGF0ZXMsIHVzaW5nIGEgSGVybWl0ZSBwb2x5bm9taWFsLFxyXG4gKiBiZXR3ZWVuIDAgYW5kIDEgb3RoZXJ3aXNlLlxyXG4gKlxyXG4gKiBQcm9kdWNlcyBhbiBldmVuIHNtb290aGVyIGludGVycG9sYXRpb24gdGhhbiB7QGxpbmsgUGhhc2VyLk1hdGguU21vb3RoU3RlcH0uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5TbW9vdGhlclN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ntb290aHN0ZXAjVmFyaWF0aW9uc31cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaW5wdXQgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZSwgYWxzbyBrbm93biBhcyB0aGUgJ2xlZnQgZWRnZScsIGFzc3VtZWQgc21hbGxlciB0aGFuIHRoZSAncmlnaHQgZWRnZScuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBUaGUgbWF4aW11bSB2YWx1ZSwgYWxzbyBrbm93biBhcyB0aGUgJ3JpZ2h0IGVkZ2UnLCBhc3N1bWVkIGdyZWF0ZXIgdGhhbiB0aGUgJ2xlZnQgZWRnZScuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBlcmNlbnRhZ2Ugb2YgaW50ZXJwb2xhdGlvbiwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKi9cclxudmFyIFNtb290aGVyU3RlcCA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heClcclxue1xyXG4gICAgeCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsICh4IC0gbWluKSAvIChtYXggLSBtaW4pKSk7XHJcblxyXG4gICAgcmV0dXJuIHggKiB4ICogeCAqICh4ICogKHggKiA2IC0gMTUpICsgMTApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbW9vdGhlclN0ZXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/SmootherStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/ToXY.js":
/*!**********************************************!*\
  !*** ./node_modules/phaser/src/math/ToXY.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ./Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Returns a Vec2 containing the x and y position of the given index in a `width` x `height` sized grid.\r\n * \r\n * For example, in a 6 x 4 grid, index 16 would equal x: 4 y: 2.\r\n * \r\n * If the given index is out of range an empty Vec2 is returned.\r\n *\r\n * @function Phaser.Math.ToXY\r\n * @since 3.19.0\r\n *\r\n * @param {integer} index - The position within the grid to get the x/y value for.\r\n * @param {integer} width - The width of the grid.\r\n * @param {integer} height - The height of the grid.\r\n * @param {Phaser.Math.Vector2} [out] - An optional Vector2 to store the result in. If not given, a new Vector2 instance will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} A Vector2 where the x and y properties contain the given grid index.\r\n */\r\nvar ToXY = function (index, width, height, out)\r\n{\r\n    if (out === undefined) { out = new Vector2(); }\r\n\r\n    var x = 0;\r\n    var y = 0;\r\n    var total = width * height;\r\n\r\n    if (index > 0 && index <= total)\r\n    {\r\n        if (index > width - 1)\r\n        {\r\n            y = Math.floor(index / width);\r\n            x = index - (y * width);\r\n        }\r\n        else\r\n        {\r\n            x = index;\r\n        }\r\n\r\n        out.set(x, y);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = ToXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1RvWFkuanM/YjMwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLDREQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjs7QUFFakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9Ub1hZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4vVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBWZWMyIGNvbnRhaW5pbmcgdGhlIHggYW5kIHkgcG9zaXRpb24gb2YgdGhlIGdpdmVuIGluZGV4IGluIGEgYHdpZHRoYCB4IGBoZWlnaHRgIHNpemVkIGdyaWQuXHJcbiAqIFxyXG4gKiBGb3IgZXhhbXBsZSwgaW4gYSA2IHggNCBncmlkLCBpbmRleCAxNiB3b3VsZCBlcXVhbCB4OiA0IHk6IDIuXHJcbiAqIFxyXG4gKiBJZiB0aGUgZ2l2ZW4gaW5kZXggaXMgb3V0IG9mIHJhbmdlIGFuIGVtcHR5IFZlYzIgaXMgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5Ub1hZXHJcbiAqIEBzaW5jZSAzLjE5LjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGdyaWQgdG8gZ2V0IHRoZSB4L3kgdmFsdWUgZm9yLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBbiBvcHRpb25hbCBWZWN0b3IyIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiwgYSBuZXcgVmVjdG9yMiBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IEEgVmVjdG9yMiB3aGVyZSB0aGUgeCBhbmQgeSBwcm9wZXJ0aWVzIGNvbnRhaW4gdGhlIGdpdmVuIGdyaWQgaW5kZXguXHJcbiAqL1xyXG52YXIgVG9YWSA9IGZ1bmN0aW9uIChpbmRleCwgd2lkdGgsIGhlaWdodCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuICAgIHZhciB0b3RhbCA9IHdpZHRoICogaGVpZ2h0O1xyXG5cclxuICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPD0gdG90YWwpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gd2lkdGggLSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeSA9IE1hdGguZmxvb3IoaW5kZXggLyB3aWR0aCk7XHJcbiAgICAgICAgICAgIHggPSBpbmRleCAtICh5ICogd2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQuc2V0KHgsIHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/ToXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/TransformXY.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/TransformXY.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ./Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Takes the `x` and `y` coordinates and transforms them into the same space as\r\n * defined by the position, rotation and scale values.\r\n *\r\n * @function Phaser.Math.TransformXY\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to be transformed.\r\n * @param {number} y - The y coordinate to be transformed.\r\n * @param {number} positionX - Horizontal position of the transform point.\r\n * @param {number} positionY - Vertical position of the transform point.\r\n * @param {number} rotation - Rotation of the transform point, in radians.\r\n * @param {number} scaleX - Horizontal scale of the transform point.\r\n * @param {number} scaleY - Vertical scale of the transform point.\r\n * @param {(Phaser.Math.Vector2|Phaser.Geom.Point|object)} [output] - The output vector, point or object for the translated coordinates.\r\n *\r\n * @return {(Phaser.Math.Vector2|Phaser.Geom.Point|object)} The translated point.\r\n */\r\nvar TransformXY = function (x, y, positionX, positionY, rotation, scaleX, scaleY, output)\r\n{\r\n    if (output === undefined) { output = new Vector2(); }\r\n\r\n    var radianSin = Math.sin(rotation);\r\n    var radianCos = Math.cos(rotation);\r\n\r\n    // Rotate and Scale\r\n    var a = radianCos * scaleX;\r\n    var b = radianSin * scaleX;\r\n    var c = -radianSin * scaleY;\r\n    var d = radianCos * scaleY;\r\n\r\n    //  Invert\r\n    var id = 1 / ((a * d) + (c * -b));\r\n\r\n    output.x = (d * id * x) + (-c * id * y) + (((positionY * c) - (positionX * d)) * id);\r\n    output.y = (a * id * y) + (-b * id * x) + (((-positionY * a) + (positionX * b)) * id);\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = TransformXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1RyYW5zZm9ybVhZLmpzPzA5NDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyw0REFBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVywrQ0FBK0M7QUFDMUQ7QUFDQSxZQUFZLCtDQUErQztBQUMzRDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isd0JBQXdCOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1RyYW5zZm9ybVhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4vVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBhbmQgdHJhbnNmb3JtcyB0aGVtIGludG8gdGhlIHNhbWUgc3BhY2UgYXNcclxuICogZGVmaW5lZCBieSB0aGUgcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZSB2YWx1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5UcmFuc2Zvcm1YWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGJlIHRyYW5zZm9ybWVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gYmUgdHJhbnNmb3JtZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblggLSBIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB0cmFuc2Zvcm0gcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblkgLSBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdHJhbnNmb3JtIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb24gLSBSb3RhdGlvbiBvZiB0aGUgdHJhbnNmb3JtIHBvaW50LCBpbiByYWRpYW5zLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYIC0gSG9yaXpvbnRhbCBzY2FsZSBvZiB0aGUgdHJhbnNmb3JtIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZIC0gVmVydGljYWwgc2NhbGUgb2YgdGhlIHRyYW5zZm9ybSBwb2ludC5cclxuICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0cHV0XSAtIFRoZSBvdXRwdXQgdmVjdG9yLCBwb2ludCBvciBvYmplY3QgZm9yIHRoZSB0cmFuc2xhdGVkIGNvb3JkaW5hdGVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgdHJhbnNsYXRlZCBwb2ludC5cclxuICovXHJcbnZhciBUcmFuc2Zvcm1YWSA9IGZ1bmN0aW9uICh4LCB5LCBwb3NpdGlvblgsIHBvc2l0aW9uWSwgcm90YXRpb24sIHNjYWxlWCwgc2NhbGVZLCBvdXRwdXQpXHJcbntcclxuICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkgeyBvdXRwdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgdmFyIHJhZGlhblNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcclxuICAgIHZhciByYWRpYW5Db3MgPSBNYXRoLmNvcyhyb3RhdGlvbik7XHJcblxyXG4gICAgLy8gUm90YXRlIGFuZCBTY2FsZVxyXG4gICAgdmFyIGEgPSByYWRpYW5Db3MgKiBzY2FsZVg7XHJcbiAgICB2YXIgYiA9IHJhZGlhblNpbiAqIHNjYWxlWDtcclxuICAgIHZhciBjID0gLXJhZGlhblNpbiAqIHNjYWxlWTtcclxuICAgIHZhciBkID0gcmFkaWFuQ29zICogc2NhbGVZO1xyXG5cclxuICAgIC8vICBJbnZlcnRcclxuICAgIHZhciBpZCA9IDEgLyAoKGEgKiBkKSArIChjICogLWIpKTtcclxuXHJcbiAgICBvdXRwdXQueCA9IChkICogaWQgKiB4KSArICgtYyAqIGlkICogeSkgKyAoKChwb3NpdGlvblkgKiBjKSAtIChwb3NpdGlvblggKiBkKSkgKiBpZCk7XHJcbiAgICBvdXRwdXQueSA9IChhICogaWQgKiB5KSArICgtYiAqIGlkICogeCkgKyAoKCgtcG9zaXRpb25ZICogYSkgKyAocG9zaXRpb25YICogYikpICogaWQpO1xyXG5cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybVhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/TransformXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Vector2.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Vector2.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A representation of a vector in 2D space.\r\n *\r\n * A two-component vector.\r\n *\r\n * @class Vector2\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number|Phaser.Types.Math.Vector2Like} [x] - The x component, or an object with `x` and `y` properties.\r\n * @param {number} [y] - The y component.\r\n */\r\nvar Vector2 = new Class({\r\n\r\n    initialize:\r\n\r\n    function Vector2 (x, y)\r\n    {\r\n        /**\r\n         * The x component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector2#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = 0;\r\n\r\n        /**\r\n         * The y component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector2#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = 0;\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n        }\r\n        else\r\n        {\r\n            if (y === undefined) { y = x; }\r\n\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Make a clone of this Vector2.\r\n     *\r\n     * @method Phaser.Math.Vector2#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} A clone of this Vector2.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Vector2(this.x, this.y);\r\n    },\r\n\r\n    /**\r\n     * Copy the components of a given Vector into this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to copy the components from.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        this.x = src.x || 0;\r\n        this.y = src.y || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the component values of this Vector from a given Vector2Like object.\r\n     *\r\n     * @method Phaser.Math.Vector2#setFromObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Math.Vector2Like} obj - The object containing the component values to set for this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    setFromObject: function (obj)\r\n    {\r\n        this.x = obj.x || 0;\r\n        this.y = obj.y || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the `x` and `y` components of the this Vector to the given `x` and `y` values.\r\n     *\r\n     * @method Phaser.Math.Vector2#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x value to set for this Vector.\r\n     * @param {number} [y=x] - The y value to set for this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    set: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This method is an alias for `Vector2.set`.\r\n     *\r\n     * @method Phaser.Math.Vector2#setTo\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} x - The x value to set for this Vector.\r\n     * @param {number} [y=x] - The y value to set for this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    setTo: function (x, y)\r\n    {\r\n        return this.set(x, y);\r\n    },\r\n\r\n    /**\r\n     * Sets the `x` and `y` values of this object from a given polar coordinate.\r\n     *\r\n     * @method Phaser.Math.Vector2#setToPolar\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} azimuth - The angular coordinate, in radians.\r\n     * @param {number} [radius=1] - The radial coordinate (length).\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    setToPolar: function (azimuth, radius)\r\n    {\r\n        if (radius == null) { radius = 1; }\r\n\r\n        this.x = Math.cos(azimuth) * radius;\r\n        this.y = Math.sin(azimuth) * radius;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check whether this Vector is equal to a given Vector.\r\n     *\r\n     * Performs a strict equality check against each Vector's components.\r\n     *\r\n     * @method Phaser.Math.Vector2#equals\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} v - The vector to compare with this Vector.\r\n     *\r\n     * @return {boolean} Whether the given Vector is equal to this Vector.\r\n     */\r\n    equals: function (v)\r\n    {\r\n        return ((this.x === v.x) && (this.y === v.y));\r\n    },\r\n\r\n    /**\r\n     * Calculate the angle between this Vector and the positive x-axis, in radians.\r\n     *\r\n     * @method Phaser.Math.Vector2#angle\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The angle between this Vector, and the positive x-axis, given in radians.\r\n     */\r\n    angle: function ()\r\n    {\r\n        // computes the angle in radians with respect to the positive x-axis\r\n\r\n        var angle = Math.atan2(this.y, this.x);\r\n\r\n        if (angle < 0)\r\n        {\r\n            angle += 2 * Math.PI;\r\n        }\r\n\r\n        return angle;\r\n    },\r\n\r\n    /**\r\n     * Add a given Vector to this Vector. Addition is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector2#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to add to this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    add: function (src)\r\n    {\r\n        this.x += src.x;\r\n        this.y += src.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Subtract the given Vector from this Vector. Subtraction is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector2#subtract\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to subtract from this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    subtract: function (src)\r\n    {\r\n        this.x -= src.x;\r\n        this.y -= src.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise multiplication between this Vector and the given Vector.\r\n     *\r\n     * Multiplies this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to multiply this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    multiply: function (src)\r\n    {\r\n        this.x *= src.x;\r\n        this.y *= src.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale this Vector by the given value.\r\n     *\r\n     * @method Phaser.Math.Vector2#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The value to scale this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    scale: function (value)\r\n    {\r\n        if (isFinite(value))\r\n        {\r\n            this.x *= value;\r\n            this.y *= value;\r\n        }\r\n        else\r\n        {\r\n            this.x = 0;\r\n            this.y = 0;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise division between this Vector and the given Vector.\r\n     *\r\n     * Divides this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#divide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to divide this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    divide: function (src)\r\n    {\r\n        this.x /= src.x;\r\n        this.y /= src.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Negate the `x` and `y` components of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#negate\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    negate: function ()\r\n    {\r\n        this.x = -this.x;\r\n        this.y = -this.y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#distance\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector.\r\n     */\r\n    distance: function (src)\r\n    {\r\n        var dx = src.x - this.x;\r\n        var dy = src.y - this.y;\r\n\r\n        return Math.sqrt(dx * dx + dy * dy);\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector, squared.\r\n     *\r\n     * @method Phaser.Math.Vector2#distanceSq\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector, squared.\r\n     */\r\n    distanceSq: function (src)\r\n    {\r\n        var dx = src.x - this.x;\r\n        var dy = src.y - this.y;\r\n\r\n        return dx * dx + dy * dy;\r\n    },\r\n\r\n    /**\r\n     * Calculate the length (or magnitude) of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#length\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector.\r\n     */\r\n    length: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n\r\n        return Math.sqrt(x * x + y * y);\r\n    },\r\n\r\n    /**\r\n     * Calculate the length of this Vector squared.\r\n     *\r\n     * @method Phaser.Math.Vector2#lengthSq\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector, squared.\r\n     */\r\n    lengthSq: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n\r\n        return x * x + y * y;\r\n    },\r\n\r\n    /**\r\n     * Normalize this Vector.\r\n     *\r\n     * Makes the vector a unit length vector (magnitude of 1) in the same direction.\r\n     *\r\n     * @method Phaser.Math.Vector2#normalize\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    normalize: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var len = x * x + y * y;\r\n\r\n        if (len > 0)\r\n        {\r\n            len = 1 / Math.sqrt(len);\r\n\r\n            this.x = x * len;\r\n            this.y = y * len;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Right-hand normalize (make unit length) this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#normalizeRightHand\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    normalizeRightHand: function ()\r\n    {\r\n        var x = this.x;\r\n\r\n        this.x = this.y * -1;\r\n        this.y = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the dot product of this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#dot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector2 to dot product with this Vector2.\r\n     *\r\n     * @return {number} The dot product of this Vector and the given Vector.\r\n     */\r\n    dot: function (src)\r\n    {\r\n        return this.x * src.x + this.y * src.y;\r\n    },\r\n\r\n    /**\r\n     * Calculate the cross product of this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#cross\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector2 to cross with this Vector2.\r\n     *\r\n     * @return {number} The cross product of this Vector and the given Vector.\r\n     */\r\n    cross: function (src)\r\n    {\r\n        return this.x * src.y - this.y * src.x;\r\n    },\r\n\r\n    /**\r\n     * Linearly interpolate between this Vector and the given Vector.\r\n     *\r\n     * Interpolates this Vector towards the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector2#lerp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} src - The Vector2 to interpolate towards.\r\n     * @param {number} [t=0] - The interpolation percentage, between 0 and 1.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    lerp: function (src, t)\r\n    {\r\n        if (t === undefined) { t = 0; }\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n\r\n        this.x = ax + t * (src.x - ax);\r\n        this.y = ay + t * (src.y - ay);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Vector2#transformMat3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} mat - The Matrix3 to transform this Vector2 with.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    transformMat3: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var m = mat.val;\r\n\r\n        this.x = m[0] * x + m[3] * y + m[6];\r\n        this.y = m[1] * x + m[4] * y + m[7];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Vector2#transformMat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector2 with.\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    transformMat4: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var m = mat.val;\r\n\r\n        this.x = m[0] * x + m[4] * y + m[12];\r\n        this.y = m[1] * x + m[5] * y + m[13];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Make this Vector the zero vector (0, 0).\r\n     *\r\n     * @method Phaser.Math.Vector2#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} This Vector2.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 0;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * A static zero Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.ZERO\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.1.0\r\n */\r\nVector2.ZERO = new Vector2();\r\n\r\n/**\r\n * A static right Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.RIGHT\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.16.0\r\n */\r\nVector2.RIGHT = new Vector2(1, 0);\r\n\r\n/**\r\n * A static left Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.LEFT\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.16.0\r\n */\r\nVector2.LEFT = new Vector2(-1, 0);\r\n\r\n/**\r\n * A static up Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.UP\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.16.0\r\n */\r\nVector2.UP = new Vector2(0, -1);\r\n\r\n/**\r\n * A static down Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.DOWN\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.16.0\r\n */\r\nVector2.DOWN = new Vector2(0, 1);\r\n\r\n/**\r\n * A static one Vector2 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector2.ONE\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.16.0\r\n */\r\nVector2.ONE = new Vector2(1, 1);\r\n\r\nmodule.exports = Vector2;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1ZlY3RvcjIuanM/Yjk3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQ0FBcUM7QUFDaEQsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87O0FBRXpDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixZQUFZOztBQUV6QztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9WZWN0b3IyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgQWRhcHRlZCBmcm9tIFtnbC1tYXRyaXhdKGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeCkgYnkgdG9qaVxyXG4vLyAgYW5kIFt2ZWNtYXRoXShodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvdmVjbWF0aCkgYnkgbWF0dGRlc2xcclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yIGluIDJEIHNwYWNlLlxyXG4gKlxyXG4gKiBBIHR3by1jb21wb25lbnQgdmVjdG9yLlxyXG4gKlxyXG4gKiBAY2xhc3MgVmVjdG9yMlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLk1hdGhcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcnxQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gW3hdIC0gVGhlIHggY29tcG9uZW50LCBvciBhbiBvYmplY3Qgd2l0aCBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29tcG9uZW50LlxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVmVjdG9yMiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb21wb25lbnQgb2YgdGhpcyBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IyI3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb21wb25lbnQgb2YgdGhpcyBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IyI3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0geC54IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHgueSB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB4IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHkgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFrZSBhIGNsb25lIG9mIHRoaXMgVmVjdG9yMi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjY2xvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IEEgY2xvbmUgb2YgdGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIGNvbXBvbmVudHMgb2YgYSBnaXZlbiBWZWN0b3IgaW50byB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBzcmMgLSBUaGUgVmVjdG9yIHRvIGNvcHkgdGhlIGNvbXBvbmVudHMgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0gc3JjLnggfHwgMDtcclxuICAgICAgICB0aGlzLnkgPSBzcmMueSB8fCAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGNvbXBvbmVudCB2YWx1ZXMgb2YgdGhpcyBWZWN0b3IgZnJvbSBhIGdpdmVuIFZlY3RvcjJMaWtlIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjc2V0RnJvbU9iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBjb21wb25lbnQgdmFsdWVzIHRvIHNldCBmb3IgdGhpcyBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tT2JqZWN0OiBmdW5jdGlvbiAob2JqKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IG9iai54IHx8IDA7XHJcbiAgICAgICAgdGhpcy55ID0gb2JqLnkgfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBgeGAgYW5kIGB5YCBjb21wb25lbnRzIG9mIHRoZSB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB5IHZhbHVlIHRvIHNldCBmb3IgdGhpcyBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBhbiBhbGlhcyBmb3IgYFZlY3RvcjIuc2V0YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB5IHZhbHVlIHRvIHNldCBmb3IgdGhpcyBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0KHgsIHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGB4YCBhbmQgYHlgIHZhbHVlcyBvZiB0aGlzIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcG9sYXIgY29vcmRpbmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjc2V0VG9Qb2xhclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF6aW11dGggLSBUaGUgYW5ndWxhciBjb29yZGluYXRlLCBpbiByYWRpYW5zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MV0gLSBUaGUgcmFkaWFsIGNvb3JkaW5hdGUgKGxlbmd0aCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBzZXRUb1BvbGFyOiBmdW5jdGlvbiAoYXppbXV0aCwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgeyByYWRpdXMgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMueCA9IE1hdGguY29zKGF6aW11dGgpICogcmFkaXVzO1xyXG4gICAgICAgIHRoaXMueSA9IE1hdGguc2luKGF6aW11dGgpICogcmFkaXVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgVmVjdG9yIGlzIGVxdWFsIHRvIGEgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIFBlcmZvcm1zIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrIGFnYWluc3QgZWFjaCBWZWN0b3IncyBjb21wb25lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNlcXVhbHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gdiAtIFRoZSB2ZWN0b3IgdG8gY29tcGFyZSB3aXRoIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIFZlY3RvciBpcyBlcXVhbCB0byB0aGlzIFZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgZXF1YWxzOiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKCh0aGlzLnggPT09IHYueCkgJiYgKHRoaXMueSA9PT0gdi55KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgcG9zaXRpdmUgeC1heGlzLCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNhbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgYmV0d2VlbiB0aGlzIFZlY3RvciwgYW5kIHRoZSBwb3NpdGl2ZSB4LWF4aXMsIGdpdmVuIGluIHJhZGlhbnMuXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vIGNvbXB1dGVzIHRoZSBhbmdsZSBpbiByYWRpYW5zIHdpdGggcmVzcGVjdCB0byB0aGUgcG9zaXRpdmUgeC1heGlzXHJcblxyXG4gICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIodGhpcy55LCB0aGlzLngpO1xyXG5cclxuICAgICAgICBpZiAoYW5nbGUgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYW5nbGUgKz0gMiAqIE1hdGguUEk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgZ2l2ZW4gVmVjdG9yIHRvIHRoaXMgVmVjdG9yLiBBZGRpdGlvbiBpcyBjb21wb25lbnQtd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNyYyAtIFRoZSBWZWN0b3IgdG8gYWRkIHRvIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoaXMgVmVjdG9yMi5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCArPSBzcmMueDtcclxuICAgICAgICB0aGlzLnkgKz0gc3JjLnk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0IHRoZSBnaXZlbiBWZWN0b3IgZnJvbSB0aGlzIFZlY3Rvci4gU3VidHJhY3Rpb24gaXMgY29tcG9uZW50LXdpc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IyI3N1YnRyYWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNyYyAtIFRoZSBWZWN0b3IgdG8gc3VidHJhY3QgZnJvbSB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAtPSBzcmMueDtcclxuICAgICAgICB0aGlzLnkgLT0gc3JjLnk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYSBjb21wb25lbnQtd2lzZSBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIE11bHRpcGxpZXMgdGhpcyBWZWN0b3IgYnkgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjbXVsdGlwbHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gc3JjIC0gVGhlIFZlY3RvciB0byBtdWx0aXBseSB0aGlzIFZlY3RvciBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAqPSBzcmMueDtcclxuICAgICAgICB0aGlzLnkgKj0gc3JjLnk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHRoaXMgVmVjdG9yIGJ5IHRoZSBnaXZlbiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjc2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzY2FsZSB0aGlzIFZlY3RvciBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGlzRmluaXRlKHZhbHVlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCAqPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy55ICo9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIGNvbXBvbmVudC13aXNlIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogRGl2aWRlcyB0aGlzIFZlY3RvciBieSB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNkaXZpZGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gc3JjIC0gVGhlIFZlY3RvciB0byBkaXZpZGUgdGhpcyBWZWN0b3IgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54IC89IHNyYy54O1xyXG4gICAgICAgIHRoaXMueSAvPSBzcmMueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHRoZSBgeGAgYW5kIGB5YCBjb21wb25lbnRzIG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNuZWdhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoaXMgVmVjdG9yMi5cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IC10aGlzLng7XHJcbiAgICAgICAgdGhpcy55ID0gLXRoaXMueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNkaXN0YW5jZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBzcmMgLSBUaGUgVmVjdG9yIHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGlzdGFuY2UgZnJvbSB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICB2YXIgZHggPSBzcmMueCAtIHRoaXMueDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMueSAtIHRoaXMueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLCBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNkaXN0YW5jZVNxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNyYyAtIFRoZSBWZWN0b3IgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgVmVjdG9yIHRvIHRoZSBnaXZlbiBWZWN0b3IsIHNxdWFyZWQuXHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlU3E6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLnggLSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGR5ID0gc3JjLnkgLSB0aGlzLnk7XHJcblxyXG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCAob3IgbWFnbml0dWRlKSBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjbGVuZ3RoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBsZW5ndGggb2YgdGhpcyBWZWN0b3IuXHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGlzIFZlY3RvciBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNsZW5ndGhTcVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbGVuZ3RoIG9mIHRoaXMgVmVjdG9yLCBzcXVhcmVkLlxyXG4gICAgICovXHJcbiAgICBsZW5ndGhTcTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIE1ha2VzIHRoZSB2ZWN0b3IgYSB1bml0IGxlbmd0aCB2ZWN0b3IgKG1hZ25pdHVkZSBvZiAxKSBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IyI25vcm1hbGl6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHk7XHJcblxyXG4gICAgICAgIGlmIChsZW4gPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy54ID0geCAqIGxlbjtcclxuICAgICAgICAgICAgdGhpcy55ID0geSAqIGxlbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpZ2h0LWhhbmQgbm9ybWFsaXplIChtYWtlIHVuaXQgbGVuZ3RoKSB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjbm9ybWFsaXplUmlnaHRIYW5kXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZVJpZ2h0SGFuZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuXHJcbiAgICAgICAgdGhpcy54ID0gdGhpcy55ICogLTE7XHJcbiAgICAgICAgdGhpcy55ID0geDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjZG90XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNyYyAtIFRoZSBWZWN0b3IyIHRvIGRvdCBwcm9kdWN0IHdpdGggdGhpcyBWZWN0b3IyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRvdCBwcm9kdWN0IG9mIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueCAqIHNyYy54ICsgdGhpcy55ICogc3JjLnk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNjcm9zc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBzcmMgLSBUaGUgVmVjdG9yMiB0byBjcm9zcyB3aXRoIHRoaXMgVmVjdG9yMi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54ICogc3JjLnkgLSB0aGlzLnkgKiBzcmMueDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEludGVycG9sYXRlcyB0aGlzIFZlY3RvciB0b3dhcmRzIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IyI2xlcnBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gc3JjIC0gVGhlIFZlY3RvcjIgdG8gaW50ZXJwb2xhdGUgdG93YXJkcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdD0wXSAtIFRoZSBpbnRlcnBvbGF0aW9uIHBlcmNlbnRhZ2UsIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uIChzcmMsIHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZCkgeyB0ID0gMDsgfVxyXG5cclxuICAgICAgICB2YXIgYXggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGF5ID0gdGhpcy55O1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheCArIHQgKiAoc3JjLnggLSBheCk7XHJcbiAgICAgICAgdGhpcy55ID0gYXkgKyB0ICogKHNyYy55IC0gYXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gdGhpcyBWZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiN0cmFuc2Zvcm1NYXQzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDN9IG1hdCAtIFRoZSBNYXRyaXgzIHRvIHRyYW5zZm9ybSB0aGlzIFZlY3RvcjIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGlzIFZlY3RvcjIuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDM6IGZ1bmN0aW9uIChtYXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIG0gPSBtYXQudmFsO1xyXG5cclxuICAgICAgICB0aGlzLnggPSBtWzBdICogeCArIG1bM10gKiB5ICsgbVs2XTtcclxuICAgICAgICB0aGlzLnkgPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHRoaXMgVmVjdG9yIHdpdGggdGhlIGdpdmVuIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjIjdHJhbnNmb3JtTWF0NFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBtYXQgLSBUaGUgTWF0cml4NCB0byB0cmFuc2Zvcm0gdGhpcyBWZWN0b3IyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobWF0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciBtID0gbWF0LnZhbDtcclxuXHJcbiAgICAgICAgdGhpcy54ID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xyXG4gICAgICAgIHRoaXMueSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFrZSB0aGlzIFZlY3RvciB0aGUgemVybyB2ZWN0b3IgKDAsIDApLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMiNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhpcyBWZWN0b3IyLlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSAwO1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQSBzdGF0aWMgemVybyBWZWN0b3IyIGZvciB1c2UgYnkgcmVmZXJlbmNlLlxyXG4gKiBcclxuICogVGhpcyBjb25zdGFudCBpcyBtZWFudCBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAY29uc3RhbnRcclxuICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMi5aRVJPXHJcbiAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gKiBAc2luY2UgMy4xLjBcclxuICovXHJcblZlY3RvcjIuWkVSTyA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4vKipcclxuICogQSBzdGF0aWMgcmlnaHQgVmVjdG9yMiBmb3IgdXNlIGJ5IHJlZmVyZW5jZS5cclxuICogXHJcbiAqIFRoaXMgY29uc3RhbnQgaXMgbWVhbnQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cclxuICpcclxuICogQGNvbnN0YW50XHJcbiAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjIuUklHSFRcclxuICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblZlY3RvcjIuUklHSFQgPSBuZXcgVmVjdG9yMigxLCAwKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyBsZWZ0IFZlY3RvcjIgZm9yIHVzZSBieSByZWZlcmVuY2UuXHJcbiAqIFxyXG4gKiBUaGlzIGNvbnN0YW50IGlzIG1lYW50IGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBjb25zdGFudFxyXG4gKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IyLkxFRlRcclxuICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblZlY3RvcjIuTEVGVCA9IG5ldyBWZWN0b3IyKC0xLCAwKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyB1cCBWZWN0b3IyIGZvciB1c2UgYnkgcmVmZXJlbmNlLlxyXG4gKiBcclxuICogVGhpcyBjb25zdGFudCBpcyBtZWFudCBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAY29uc3RhbnRcclxuICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMi5VUFxyXG4gKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuVmVjdG9yMi5VUCA9IG5ldyBWZWN0b3IyKDAsIC0xKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyBkb3duIFZlY3RvcjIgZm9yIHVzZSBieSByZWZlcmVuY2UuXHJcbiAqIFxyXG4gKiBUaGlzIGNvbnN0YW50IGlzIG1lYW50IGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBjb25zdGFudFxyXG4gKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IyLkRPV05cclxuICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblZlY3RvcjIuRE9XTiA9IG5ldyBWZWN0b3IyKDAsIDEpO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIG9uZSBWZWN0b3IyIGZvciB1c2UgYnkgcmVmZXJlbmNlLlxyXG4gKiBcclxuICogVGhpcyBjb25zdGFudCBpcyBtZWFudCBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAY29uc3RhbnRcclxuICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMi5PTkVcclxuICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblZlY3RvcjIuT05FID0gbmV3IFZlY3RvcjIoMSwgMSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvcjI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Vector2.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Vector3.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Vector3.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A representation of a vector in 3D space.\r\n *\r\n * A three-component vector.\r\n *\r\n * @class Vector3\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - The x component.\r\n * @param {number} [y] - The y component.\r\n * @param {number} [z] - The z component.\r\n */\r\nvar Vector3 = new Class({\r\n\r\n    initialize:\r\n\r\n    function Vector3 (x, y, z)\r\n    {\r\n        /**\r\n         * The x component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector3#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = 0;\r\n\r\n        /**\r\n         * The y component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector3#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = 0;\r\n\r\n        /**\r\n         * The z component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector3#z\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.z = 0;\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Set this Vector to point up.\r\n     *\r\n     * Sets the y component of the vector to 1, and the others to 0.\r\n     *\r\n     * @method Phaser.Math.Vector3#up\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    up: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 1;\r\n        this.z = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Make a clone of this Vector3.\r\n     *\r\n     * @method Phaser.Math.Vector3#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector3} A new Vector3 object containing this Vectors values.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Vector3(this.x, this.y, this.z);\r\n    },\r\n\r\n    /**\r\n     * Calculate the cross (vector) product of two given Vectors.\r\n     *\r\n     * @method Phaser.Math.Vector3#crossVectors\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} a - The first Vector to multiply.\r\n     * @param {Phaser.Math.Vector3} b - The second Vector to multiply.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    crossVectors: function (a, b)\r\n    {\r\n        var ax = a.x;\r\n        var ay = a.y;\r\n        var az = a.z;\r\n        var bx = b.x;\r\n        var by = b.y;\r\n        var bz = b.z;\r\n\r\n        this.x = ay * bz - az * by;\r\n        this.y = az * bx - ax * bz;\r\n        this.z = ax * by - ay * bx;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check whether this Vector is equal to a given Vector.\r\n     *\r\n     * Performs a strict equality check against each Vector's components.\r\n     *\r\n     * @method Phaser.Math.Vector3#equals\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} v - The Vector3 to compare against.\r\n     *\r\n     * @return {boolean} True if the two vectors strictly match, otherwise false.\r\n     */\r\n    equals: function (v)\r\n    {\r\n        return ((this.x === v.x) && (this.y === v.y) && (this.z === v.z));\r\n    },\r\n\r\n    /**\r\n     * Copy the components of a given Vector into this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} src - The Vector to copy the components from.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        this.x = src.x;\r\n        this.y = src.y;\r\n        this.z = src.z || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the `x`, `y`, and `z` components of this Vector to the given `x`, `y`, and `z` values.\r\n     *\r\n     * @method Phaser.Math.Vector3#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|object)} x - The x value to set for this Vector, or an object containing x, y and z components.\r\n     * @param {number} [y] - The y value to set for this Vector.\r\n     * @param {number} [z] - The z value to set for this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    set: function (x, y, z)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Add a given Vector to this Vector. Addition is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector3#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to add to this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    add: function (v)\r\n    {\r\n        this.x += v.x;\r\n        this.y += v.y;\r\n        this.z += v.z || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Subtract the given Vector from this Vector. Subtraction is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector3#subtract\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to subtract from this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    subtract: function (v)\r\n    {\r\n        this.x -= v.x;\r\n        this.y -= v.y;\r\n        this.z -= v.z || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise multiplication between this Vector and the given Vector.\r\n     *\r\n     * Multiplies this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to multiply this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    multiply: function (v)\r\n    {\r\n        this.x *= v.x;\r\n        this.y *= v.y;\r\n        this.z *= v.z || 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale this Vector by the given value.\r\n     *\r\n     * @method Phaser.Math.Vector3#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} scale - The value to scale this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    scale: function (scale)\r\n    {\r\n        if (isFinite(scale))\r\n        {\r\n            this.x *= scale;\r\n            this.y *= scale;\r\n            this.z *= scale;\r\n        }\r\n        else\r\n        {\r\n            this.x = 0;\r\n            this.y = 0;\r\n            this.z = 0;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise division between this Vector and the given Vector.\r\n     *\r\n     * Divides this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#divide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to divide this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    divide: function (v)\r\n    {\r\n        this.x /= v.x;\r\n        this.y /= v.y;\r\n        this.z /= v.z || 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Negate the `x`, `y` and `z` components of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#negate\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    negate: function ()\r\n    {\r\n        this.x = -this.x;\r\n        this.y = -this.y;\r\n        this.z = -this.z;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#distance\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector.\r\n     */\r\n    distance: function (v)\r\n    {\r\n        var dx = v.x - this.x;\r\n        var dy = v.y - this.y;\r\n        var dz = v.z - this.z || 0;\r\n\r\n        return Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector, squared.\r\n     *\r\n     * @method Phaser.Math.Vector3#distanceSq\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3)} v - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector, squared.\r\n     */\r\n    distanceSq: function (v)\r\n    {\r\n        var dx = v.x - this.x;\r\n        var dy = v.y - this.y;\r\n        var dz = v.z - this.z || 0;\r\n\r\n        return dx * dx + dy * dy + dz * dz;\r\n    },\r\n\r\n    /**\r\n     * Calculate the length (or magnitude) of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#length\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector.\r\n     */\r\n    length: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n\r\n        return Math.sqrt(x * x + y * y + z * z);\r\n    },\r\n\r\n    /**\r\n     * Calculate the length of this Vector squared.\r\n     *\r\n     * @method Phaser.Math.Vector3#lengthSq\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector, squared.\r\n     */\r\n    lengthSq: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n\r\n        return x * x + y * y + z * z;\r\n    },\r\n\r\n    /**\r\n     * Normalize this Vector.\r\n     *\r\n     * Makes the vector a unit length vector (magnitude of 1) in the same direction.\r\n     *\r\n     * @method Phaser.Math.Vector3#normalize\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    normalize: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var len = x * x + y * y + z * z;\r\n\r\n        if (len > 0)\r\n        {\r\n            len = 1 / Math.sqrt(len);\r\n\r\n            this.x = x * len;\r\n            this.y = y * len;\r\n            this.z = z * len;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the dot product of this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#dot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} v - The Vector3 to dot product with this Vector3.\r\n     *\r\n     * @return {number} The dot product of this Vector and `v`.\r\n     */\r\n    dot: function (v)\r\n    {\r\n        return this.x * v.x + this.y * v.y + this.z * v.z;\r\n    },\r\n\r\n    /**\r\n     * Calculate the cross (vector) product of this Vector (which will be modified) and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#cross\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} v - The Vector to cross product with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    cross: function (v)\r\n    {\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var bx = v.x;\r\n        var by = v.y;\r\n        var bz = v.z;\r\n\r\n        this.x = ay * bz - az * by;\r\n        this.y = az * bx - ax * bz;\r\n        this.z = ax * by - ay * bx;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Linearly interpolate between this Vector and the given Vector.\r\n     *\r\n     * Interpolates this Vector towards the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector3#lerp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector3} v - The Vector3 to interpolate towards.\r\n     * @param {number} [t=0] - The interpolation percentage, between 0 and 1.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    lerp: function (v, t)\r\n    {\r\n        if (t === undefined) { t = 0; }\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n\r\n        this.x = ax + t * (v.x - ax);\r\n        this.y = ay + t * (v.y - ay);\r\n        this.z = az + t * (v.z - az);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Vector3#transformMat3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix3} mat - The Matrix3 to transform this Vector3 with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    transformMat3: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var m = mat.val;\r\n\r\n        this.x = x * m[0] + y * m[3] + z * m[6];\r\n        this.y = x * m[1] + y * m[4] + z * m[7];\r\n        this.z = x * m[2] + y * m[5] + z * m[8];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Vector3#transformMat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector3 with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    transformMat4: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var m = mat.val;\r\n\r\n        this.x = m[0] * x + m[4] * y + m[8] * z + m[12];\r\n        this.y = m[1] * x + m[5] * y + m[9] * z + m[13];\r\n        this.z = m[2] * x + m[6] * y + m[10] * z + m[14];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transforms the coordinates of this Vector3 with the given Matrix4.\r\n     *\r\n     * @method Phaser.Math.Vector3#transformCoordinates\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector3 with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    transformCoordinates: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var m = mat.val;\r\n\r\n        var tx = (x * m[0]) + (y * m[4]) + (z * m[8]) + m[12];\r\n        var ty = (x * m[1]) + (y * m[5]) + (z * m[9]) + m[13];\r\n        var tz = (x * m[2]) + (y * m[6]) + (z * m[10]) + m[14];\r\n        var tw = (x * m[3]) + (y * m[7]) + (z * m[11]) + m[15];\r\n\r\n        this.x = tx / tw;\r\n        this.y = ty / tw;\r\n        this.z = tz / tw;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Quaternion.\r\n     *\r\n     * @method Phaser.Math.Vector3#transformQuat\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Quaternion} q - The Quaternion to transform this Vector with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    transformQuat: function (q)\r\n    {\r\n        // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var qx = q.x;\r\n        var qy = q.y;\r\n        var qz = q.z;\r\n        var qw = q.w;\r\n\r\n        // calculate quat * vec\r\n        var ix = qw * x + qy * z - qz * y;\r\n        var iy = qw * y + qz * x - qx * z;\r\n        var iz = qw * z + qx * y - qy * x;\r\n        var iw = -qx * x - qy * y - qz * z;\r\n\r\n        // calculate result * inverse quat\r\n        this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n        this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n        this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Multiplies this Vector3 by the specified matrix, applying a W divide. This is useful for projection,\r\n     * e.g. unprojecting a 2D point into 3D space.\r\n     *\r\n     * @method Phaser.Math.Vector3#project\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat - The Matrix4 to multiply this Vector3 with.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    project: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var m = mat.val;\r\n\r\n        var a00 = m[0];\r\n        var a01 = m[1];\r\n        var a02 = m[2];\r\n        var a03 = m[3];\r\n        var a10 = m[4];\r\n        var a11 = m[5];\r\n        var a12 = m[6];\r\n        var a13 = m[7];\r\n        var a20 = m[8];\r\n        var a21 = m[9];\r\n        var a22 = m[10];\r\n        var a23 = m[11];\r\n        var a30 = m[12];\r\n        var a31 = m[13];\r\n        var a32 = m[14];\r\n        var a33 = m[15];\r\n\r\n        var lw = 1 / (x * a03 + y * a13 + z * a23 + a33);\r\n\r\n        this.x = (x * a00 + y * a10 + z * a20 + a30) * lw;\r\n        this.y = (x * a01 + y * a11 + z * a21 + a31) * lw;\r\n        this.z = (x * a02 + y * a12 + z * a22 + a32) * lw;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Unproject this point from 2D space to 3D space.\r\n     * The point should have its x and y properties set to\r\n     * 2D screen space, and the z either at 0 (near plane)\r\n     * or 1 (far plane). The provided matrix is assumed to already\r\n     * be combined, i.e. projection * view * model.\r\n     *\r\n     * After this operation, this vector's (x, y, z) components will\r\n     * represent the unprojected 3D coordinate.\r\n     *\r\n     * @method Phaser.Math.Vector3#unproject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} viewport - Screen x, y, width and height in pixels.\r\n     * @param {Phaser.Math.Matrix4} invProjectionView - Combined projection and view matrix.\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    unproject: function (viewport, invProjectionView)\r\n    {\r\n        var viewX = viewport.x;\r\n        var viewY = viewport.y;\r\n        var viewWidth = viewport.z;\r\n        var viewHeight = viewport.w;\r\n\r\n        var x = this.x - viewX;\r\n        var y = (viewHeight - this.y - 1) - viewY;\r\n        var z = this.z;\r\n\r\n        this.x = (2 * x) / viewWidth - 1;\r\n        this.y = (2 * y) / viewHeight - 1;\r\n        this.z = 2 * z - 1;\r\n\r\n        return this.project(invProjectionView);\r\n    },\r\n\r\n    /**\r\n     * Make this Vector the zero vector (0, 0, 0).\r\n     *\r\n     * @method Phaser.Math.Vector3#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector3} This Vector3.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 0;\r\n        this.z = 0;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * A static zero Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.ZERO\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.ZERO = new Vector3();\r\n\r\n/**\r\n * A static right Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.RIGHT\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.RIGHT = new Vector3(1, 0, 0);\r\n\r\n/**\r\n * A static left Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.LEFT\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.LEFT = new Vector3(-1, 0, 0);\r\n\r\n/**\r\n * A static up Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.UP\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.UP = new Vector3(0, -1, 0);\r\n\r\n/**\r\n * A static down Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.DOWN\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.DOWN = new Vector3(0, 1, 0);\r\n\r\n/**\r\n * A static forward Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.FORWARD\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.FORWARD = new Vector3(0, 0, 1);\r\n\r\n/**\r\n * A static back Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.BACK\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.BACK = new Vector3(0, 0, -1);\r\n\r\n/**\r\n * A static one Vector3 for use by reference.\r\n * \r\n * This constant is meant for comparison operations and should not be modified directly.\r\n *\r\n * @constant\r\n * @name Phaser.Math.Vector3.ONE\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.16.0\r\n */\r\nVector3.ONE = new Vector3(1, 1, 1);\r\n\r\nmodule.exports = Vector3;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1ZlY3RvcjMuanM/MzFhOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBDQUEwQztBQUN6RDtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBDQUEwQztBQUN6RDtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBDQUEwQztBQUN6RDtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMENBQTBDO0FBQ3pEO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUJBQXVCO0FBQ3RDO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1ZlY3RvcjMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBBZGFwdGVkIGZyb20gW2dsLW1hdHJpeF0oaHR0cHM6Ly9naXRodWIuY29tL3RvamkvZ2wtbWF0cml4KSBieSB0b2ppXHJcbi8vICBhbmQgW3ZlY21hdGhdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC92ZWNtYXRoKSBieSBtYXR0ZGVzbFxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3IgaW4gM0Qgc3BhY2UuXHJcbiAqXHJcbiAqIEEgdGhyZWUtY29tcG9uZW50IHZlY3Rvci5cclxuICpcclxuICogQGNsYXNzIFZlY3RvcjNcclxuICogQG1lbWJlcm9mIFBoYXNlci5NYXRoXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt6XSAtIFRoZSB6IGNvbXBvbmVudC5cclxuICovXHJcbnZhciBWZWN0b3IzID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFZlY3RvcjMgKHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggY29tcG9uZW50IG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMyN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgY29tcG9uZW50IG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMyN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHogY29tcG9uZW50IG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMyN6XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB4LnkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geC56IHx8IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy55ID0geSB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnogPSB6IHx8IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGlzIFZlY3RvciB0byBwb2ludCB1cC5cclxuICAgICAqXHJcbiAgICAgKiBTZXRzIHRoZSB5IGNvbXBvbmVudCBvZiB0aGUgdmVjdG9yIHRvIDEsIGFuZCB0aGUgb3RoZXJzIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHVwOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMTtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlIGEgY2xvbmUgb2YgdGhpcyBWZWN0b3IzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNjbG9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gQSBuZXcgVmVjdG9yMyBvYmplY3QgY29udGFpbmluZyB0aGlzIFZlY3RvcnMgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyAodmVjdG9yKSBwcm9kdWN0IG9mIHR3byBnaXZlbiBWZWN0b3JzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNjcm9zc1ZlY3RvcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gYSAtIFRoZSBmaXJzdCBWZWN0b3IgdG8gbXVsdGlwbHkuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IGIgLSBUaGUgc2Vjb25kIFZlY3RvciB0byBtdWx0aXBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIGNyb3NzVmVjdG9yczogZnVuY3Rpb24gKGEsIGIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGF4ID0gYS54O1xyXG4gICAgICAgIHZhciBheSA9IGEueTtcclxuICAgICAgICB2YXIgYXogPSBhLno7XHJcbiAgICAgICAgdmFyIGJ4ID0gYi54O1xyXG4gICAgICAgIHZhciBieSA9IGIueTtcclxuICAgICAgICB2YXIgYnogPSBiLno7XHJcblxyXG4gICAgICAgIHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgICAgIHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgICAgIHRoaXMueiA9IGF4ICogYnkgLSBheSAqIGJ4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgVmVjdG9yIGlzIGVxdWFsIHRvIGEgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIFBlcmZvcm1zIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrIGFnYWluc3QgZWFjaCBWZWN0b3IncyBjb21wb25lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNlcXVhbHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdiAtIFRoZSBWZWN0b3IzIHRvIGNvbXBhcmUgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB0d28gdmVjdG9ycyBzdHJpY3RseSBtYXRjaCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBlcXVhbHM6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAoKHRoaXMueCA9PT0gdi54KSAmJiAodGhpcy55ID09PSB2LnkpICYmICh0aGlzLnogPT09IHYueikpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIGNvbXBvbmVudHMgb2YgYSBnaXZlbiBWZWN0b3IgaW50byB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxQaGFzZXIuTWF0aC5WZWN0b3IzKX0gc3JjIC0gVGhlIFZlY3RvciB0byBjb3B5IHRoZSBjb21wb25lbnRzIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoc3JjKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHNyYy54O1xyXG4gICAgICAgIHRoaXMueSA9IHNyYy55O1xyXG4gICAgICAgIHRoaXMueiA9IHNyYy56IHx8IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYHhgLCBgeWAsIGFuZCBgemAgY29tcG9uZW50cyBvZiB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gYHhgLCBgeWAsIGFuZCBgemAgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxvYmplY3QpfSB4IC0gVGhlIHggdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvciwgb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcgeCwgeSBhbmQgeiBjb21wb25lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHZhbHVlIHRvIHNldCBmb3IgdGhpcyBWZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3pdIC0gVGhlIHogdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB4LnkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geC56IHx8IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy55ID0geSB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnogPSB6IHx8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBnaXZlbiBWZWN0b3IgdG8gdGhpcyBWZWN0b3IuIEFkZGl0aW9uIGlzIGNvbXBvbmVudC13aXNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yMyl9IHYgLSBUaGUgVmVjdG9yIHRvIGFkZCB0byB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ICs9IHYueDtcclxuICAgICAgICB0aGlzLnkgKz0gdi55O1xyXG4gICAgICAgIHRoaXMueiArPSB2LnogfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgdGhlIGdpdmVuIFZlY3RvciBmcm9tIHRoaXMgVmVjdG9yLiBTdWJ0cmFjdGlvbiBpcyBjb21wb25lbnQtd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjc3VidHJhY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yMyl9IHYgLSBUaGUgVmVjdG9yIHRvIHN1YnRyYWN0IGZyb20gdGhpcyBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54IC09IHYueDtcclxuICAgICAgICB0aGlzLnkgLT0gdi55O1xyXG4gICAgICAgIHRoaXMueiAtPSB2LnogfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIGNvbXBvbmVudC13aXNlIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogTXVsdGlwbGllcyB0aGlzIFZlY3RvciBieSB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNtdWx0aXBseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxQaGFzZXIuTWF0aC5WZWN0b3IzKX0gdiAtIFRoZSBWZWN0b3IgdG8gbXVsdGlwbHkgdGhpcyBWZWN0b3IgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ICo9IHYueDtcclxuICAgICAgICB0aGlzLnkgKj0gdi55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2LnogfHwgMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgdGhpcyBWZWN0b3IgYnkgdGhlIGdpdmVuIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNzY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIC0gVGhlIHZhbHVlIHRvIHNjYWxlIHRoaXMgVmVjdG9yIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoaXMgVmVjdG9yMy5cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzY2FsZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaXNGaW5pdGUoc2NhbGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ICo9IHNjYWxlO1xyXG4gICAgICAgICAgICB0aGlzLnkgKj0gc2NhbGU7XHJcbiAgICAgICAgICAgIHRoaXMueiAqPSBzY2FsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICAgICAgdGhpcy56ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYSBjb21wb25lbnQtd2lzZSBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgVmVjdG9yIGFuZCB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIERpdmlkZXMgdGhpcyBWZWN0b3IgYnkgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjZGl2aWRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfFBoYXNlci5NYXRoLlZlY3RvcjMpfSB2IC0gVGhlIFZlY3RvciB0byBkaXZpZGUgdGhpcyBWZWN0b3IgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAvPSB2Lng7XHJcbiAgICAgICAgdGhpcy55IC89IHYueTtcclxuICAgICAgICB0aGlzLnogLz0gdi56IHx8IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSB0aGUgYHhgLCBgeWAgYW5kIGB6YCBjb21wb25lbnRzIG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNuZWdhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoaXMgVmVjdG9yMy5cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IC10aGlzLng7XHJcbiAgICAgICAgdGhpcy55ID0gLXRoaXMueTtcclxuICAgICAgICB0aGlzLnogPSAtdGhpcy56O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI2Rpc3RhbmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfFBoYXNlci5NYXRoLlZlY3RvcjMpfSB2IC0gVGhlIFZlY3RvciB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRpc3RhbmNlIGZyb20gdGhpcyBWZWN0b3IgdG8gdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2U6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHYueCAtIHRoaXMueDtcclxuICAgICAgICB2YXIgZHkgPSB2LnkgLSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGR6ID0gdi56IC0gdGhpcy56IHx8IDA7XHJcblxyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IsIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI2Rpc3RhbmNlU3FcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yMyl9IHYgLSBUaGUgVmVjdG9yIHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGlzdGFuY2UgZnJvbSB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gVmVjdG9yLCBzcXVhcmVkLlxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZVNxOiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICB2YXIgZHggPSB2LnggLSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGR5ID0gdi55IC0gdGhpcy55O1xyXG4gICAgICAgIHZhciBkeiA9IHYueiAtIHRoaXMueiB8fCAwO1xyXG5cclxuICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIChvciBtYWduaXR1ZGUpIG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNsZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG5cclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhpcyBWZWN0b3Igc3F1YXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjbGVuZ3RoU3FcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGlzIFZlY3Rvciwgc3F1YXJlZC5cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcblxyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIE1ha2VzIHRoZSB2ZWN0b3IgYSB1bml0IGxlbmd0aCB2ZWN0b3IgKG1hZ25pdHVkZSBvZiAxKSBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI25vcm1hbGl6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcclxuXHJcbiAgICAgICAgaWYgKGxlbiA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB4ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnogPSB6ICogbGVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjZG90XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHYgLSBUaGUgVmVjdG9yMyB0byBkb3QgcHJvZHVjdCB3aXRoIHRoaXMgVmVjdG9yMy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFZlY3RvciBhbmQgYHZgLlxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2Lno7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyAodmVjdG9yKSBwcm9kdWN0IG9mIHRoaXMgVmVjdG9yICh3aGljaCB3aWxsIGJlIG1vZGlmaWVkKSBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjY3Jvc3NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdiAtIFRoZSBWZWN0b3IgdG8gY3Jvc3MgcHJvZHVjdCB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoaXMgVmVjdG9yMy5cclxuICAgICAqL1xyXG4gICAgY3Jvc3M6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBheCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGF6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBieCA9IHYueDtcclxuICAgICAgICB2YXIgYnkgPSB2Lnk7XHJcbiAgICAgICAgdmFyIGJ6ID0gdi56O1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgICAgICB0aGlzLnkgPSBheiAqIGJ4IC0gYXggKiBiejtcclxuICAgICAgICB0aGlzLnogPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBJbnRlcnBvbGF0ZXMgdGhpcyBWZWN0b3IgdG93YXJkcyB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyNsZXJwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHYgLSBUaGUgVmVjdG9yMyB0byBpbnRlcnBvbGF0ZSB0b3dhcmRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0PTBdIC0gVGhlIGludGVycG9sYXRpb24gcGVyY2VudGFnZSwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoaXMgVmVjdG9yMy5cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKHYsIHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZCkgeyB0ID0gMDsgfVxyXG5cclxuICAgICAgICB2YXIgYXggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIGF5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciBheiA9IHRoaXMuejtcclxuXHJcbiAgICAgICAgdGhpcy54ID0gYXggKyB0ICogKHYueCAtIGF4KTtcclxuICAgICAgICB0aGlzLnkgPSBheSArIHQgKiAodi55IC0gYXkpO1xyXG4gICAgICAgIHRoaXMueiA9IGF6ICsgdCAqICh2LnogLSBheik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSB0aGlzIFZlY3RvciB3aXRoIHRoZSBnaXZlbiBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI3RyYW5zZm9ybU1hdDNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4M30gbWF0IC0gVGhlIE1hdHJpeDMgdG8gdHJhbnNmb3JtIHRoaXMgVmVjdG9yMyB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjN9IFRoaXMgVmVjdG9yMy5cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG1hdClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuICAgICAgICB2YXIgeiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgbSA9IG1hdC52YWw7XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgICAgICB0aGlzLnkgPSB4ICogbVsxXSArIHkgKiBtWzRdICsgeiAqIG1bN107XHJcbiAgICAgICAgdGhpcy56ID0geCAqIG1bMl0gKyB5ICogbVs1XSArIHogKiBtWzhdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gdGhpcyBWZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyN0cmFuc2Zvcm1NYXQ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLk1hdHJpeDR9IG1hdCAtIFRoZSBNYXRyaXg0IHRvIHRyYW5zZm9ybSB0aGlzIFZlY3RvcjMgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uIChtYXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIG0gPSBtYXQudmFsO1xyXG5cclxuICAgICAgICB0aGlzLnggPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXTtcclxuICAgICAgICB0aGlzLnkgPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXTtcclxuICAgICAgICB0aGlzLnogPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoaXMgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBNYXRyaXg0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yMyN0cmFuc2Zvcm1Db29yZGluYXRlc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBtYXQgLSBUaGUgTWF0cml4NCB0byB0cmFuc2Zvcm0gdGhpcyBWZWN0b3IzIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Db29yZGluYXRlczogZnVuY3Rpb24gKG1hdClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuICAgICAgICB2YXIgeiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgbSA9IG1hdC52YWw7XHJcblxyXG4gICAgICAgIHZhciB0eCA9ICh4ICogbVswXSkgKyAoeSAqIG1bNF0pICsgKHogKiBtWzhdKSArIG1bMTJdO1xyXG4gICAgICAgIHZhciB0eSA9ICh4ICogbVsxXSkgKyAoeSAqIG1bNV0pICsgKHogKiBtWzldKSArIG1bMTNdO1xyXG4gICAgICAgIHZhciB0eiA9ICh4ICogbVsyXSkgKyAoeSAqIG1bNl0pICsgKHogKiBtWzEwXSkgKyBtWzE0XTtcclxuICAgICAgICB2YXIgdHcgPSAoeCAqIG1bM10pICsgKHkgKiBtWzddKSArICh6ICogbVsxMV0pICsgbVsxNV07XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHR4IC8gdHc7XHJcbiAgICAgICAgdGhpcy55ID0gdHkgLyB0dztcclxuICAgICAgICB0aGlzLnogPSB0eiAvIHR3O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gdGhpcyBWZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gUXVhdGVybmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjdHJhbnNmb3JtUXVhdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5RdWF0ZXJuaW9ufSBxIC0gVGhlIFF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHRoaXMgVmVjdG9yIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gVGhpcyBWZWN0b3IzLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSlcclxuICAgIHtcclxuICAgICAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciBxeCA9IHEueDtcclxuICAgICAgICB2YXIgcXkgPSBxLnk7XHJcbiAgICAgICAgdmFyIHF6ID0gcS56O1xyXG4gICAgICAgIHZhciBxdyA9IHEudztcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICB2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XHJcbiAgICAgICAgdmFyIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xyXG4gICAgICAgIHZhciBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuICAgICAgICB2YXIgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICAgICAgdGhpcy54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgICAgICB0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG4gICAgICAgIHRoaXMueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGxpZXMgdGhpcyBWZWN0b3IzIGJ5IHRoZSBzcGVjaWZpZWQgbWF0cml4LCBhcHBseWluZyBhIFcgZGl2aWRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvamVjdGlvbixcclxuICAgICAqIGUuZy4gdW5wcm9qZWN0aW5nIGEgMkQgcG9pbnQgaW50byAzRCBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjMjcHJvamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBtYXQgLSBUaGUgTWF0cml4NCB0byBtdWx0aXBseSB0aGlzIFZlY3RvcjMgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Q6IGZ1bmN0aW9uIChtYXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIHogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIG0gPSBtYXQudmFsO1xyXG5cclxuICAgICAgICB2YXIgYTAwID0gbVswXTtcclxuICAgICAgICB2YXIgYTAxID0gbVsxXTtcclxuICAgICAgICB2YXIgYTAyID0gbVsyXTtcclxuICAgICAgICB2YXIgYTAzID0gbVszXTtcclxuICAgICAgICB2YXIgYTEwID0gbVs0XTtcclxuICAgICAgICB2YXIgYTExID0gbVs1XTtcclxuICAgICAgICB2YXIgYTEyID0gbVs2XTtcclxuICAgICAgICB2YXIgYTEzID0gbVs3XTtcclxuICAgICAgICB2YXIgYTIwID0gbVs4XTtcclxuICAgICAgICB2YXIgYTIxID0gbVs5XTtcclxuICAgICAgICB2YXIgYTIyID0gbVsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IG1bMTFdO1xyXG4gICAgICAgIHZhciBhMzAgPSBtWzEyXTtcclxuICAgICAgICB2YXIgYTMxID0gbVsxM107XHJcbiAgICAgICAgdmFyIGEzMiA9IG1bMTRdO1xyXG4gICAgICAgIHZhciBhMzMgPSBtWzE1XTtcclxuXHJcbiAgICAgICAgdmFyIGx3ID0gMSAvICh4ICogYTAzICsgeSAqIGExMyArIHogKiBhMjMgKyBhMzMpO1xyXG5cclxuICAgICAgICB0aGlzLnggPSAoeCAqIGEwMCArIHkgKiBhMTAgKyB6ICogYTIwICsgYTMwKSAqIGx3O1xyXG4gICAgICAgIHRoaXMueSA9ICh4ICogYTAxICsgeSAqIGExMSArIHogKiBhMjEgKyBhMzEpICogbHc7XHJcbiAgICAgICAgdGhpcy56ID0gKHggKiBhMDIgKyB5ICogYTEyICsgeiAqIGEyMiArIGEzMikgKiBsdztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5wcm9qZWN0IHRoaXMgcG9pbnQgZnJvbSAyRCBzcGFjZSB0byAzRCBzcGFjZS5cclxuICAgICAqIFRoZSBwb2ludCBzaG91bGQgaGF2ZSBpdHMgeCBhbmQgeSBwcm9wZXJ0aWVzIHNldCB0b1xyXG4gICAgICogMkQgc2NyZWVuIHNwYWNlLCBhbmQgdGhlIHogZWl0aGVyIGF0IDAgKG5lYXIgcGxhbmUpXHJcbiAgICAgKiBvciAxIChmYXIgcGxhbmUpLiBUaGUgcHJvdmlkZWQgbWF0cml4IGlzIGFzc3VtZWQgdG8gYWxyZWFkeVxyXG4gICAgICogYmUgY29tYmluZWQsIGkuZS4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbC5cclxuICAgICAqXHJcbiAgICAgKiBBZnRlciB0aGlzIG9wZXJhdGlvbiwgdGhpcyB2ZWN0b3IncyAoeCwgeSwgeikgY29tcG9uZW50cyB3aWxsXHJcbiAgICAgKiByZXByZXNlbnQgdGhlIHVucHJvamVjdGVkIDNEIGNvb3JkaW5hdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI3VucHJvamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSB2aWV3cG9ydCAtIFNjcmVlbiB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gaW52UHJvamVjdGlvblZpZXcgLSBDb21iaW5lZCBwcm9qZWN0aW9uIGFuZCB2aWV3IG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHVucHJvamVjdDogZnVuY3Rpb24gKHZpZXdwb3J0LCBpbnZQcm9qZWN0aW9uVmlldylcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlld1ggPSB2aWV3cG9ydC54O1xyXG4gICAgICAgIHZhciB2aWV3WSA9IHZpZXdwb3J0Lnk7XHJcbiAgICAgICAgdmFyIHZpZXdXaWR0aCA9IHZpZXdwb3J0Lno7XHJcbiAgICAgICAgdmFyIHZpZXdIZWlnaHQgPSB2aWV3cG9ydC53O1xyXG5cclxuICAgICAgICB2YXIgeCA9IHRoaXMueCAtIHZpZXdYO1xyXG4gICAgICAgIHZhciB5ID0gKHZpZXdIZWlnaHQgLSB0aGlzLnkgLSAxKSAtIHZpZXdZO1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG5cclxuICAgICAgICB0aGlzLnggPSAoMiAqIHgpIC8gdmlld1dpZHRoIC0gMTtcclxuICAgICAgICB0aGlzLnkgPSAoMiAqIHkpIC8gdmlld0hlaWdodCAtIDE7XHJcbiAgICAgICAgdGhpcy56ID0gMiAqIHogLSAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0KGludlByb2plY3Rpb25WaWV3KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlIHRoaXMgVmVjdG9yIHRoZSB6ZXJvIHZlY3RvciAoMCwgMCwgMCkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3IzI3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBUaGlzIFZlY3RvcjMuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIHplcm8gVmVjdG9yMyBmb3IgdXNlIGJ5IHJlZmVyZW5jZS5cclxuICogXHJcbiAqIFRoaXMgY29uc3RhbnQgaXMgbWVhbnQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cclxuICpcclxuICogQGNvbnN0YW50XHJcbiAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjMuWkVST1xyXG4gKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuVmVjdG9yMy5aRVJPID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyByaWdodCBWZWN0b3IzIGZvciB1c2UgYnkgcmVmZXJlbmNlLlxyXG4gKiBcclxuICogVGhpcyBjb25zdGFudCBpcyBtZWFudCBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAY29uc3RhbnRcclxuICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMy5SSUdIVFxyXG4gKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuVmVjdG9yMy5SSUdIVCA9IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIGxlZnQgVmVjdG9yMyBmb3IgdXNlIGJ5IHJlZmVyZW5jZS5cclxuICogXHJcbiAqIFRoaXMgY29uc3RhbnQgaXMgbWVhbnQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cclxuICpcclxuICogQGNvbnN0YW50XHJcbiAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjMuTEVGVFxyXG4gKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuVmVjdG9yMy5MRUZUID0gbmV3IFZlY3RvcjMoLTEsIDAsIDApO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIHVwIFZlY3RvcjMgZm9yIHVzZSBieSByZWZlcmVuY2UuXHJcbiAqIFxyXG4gKiBUaGlzIGNvbnN0YW50IGlzIG1lYW50IGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBjb25zdGFudFxyXG4gKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IzLlVQXHJcbiAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IzfVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5WZWN0b3IzLlVQID0gbmV3IFZlY3RvcjMoMCwgLTEsIDApO1xyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGljIGRvd24gVmVjdG9yMyBmb3IgdXNlIGJ5IHJlZmVyZW5jZS5cclxuICogXHJcbiAqIFRoaXMgY29uc3RhbnQgaXMgbWVhbnQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cclxuICpcclxuICogQGNvbnN0YW50XHJcbiAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjMuRE9XTlxyXG4gKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuVmVjdG9yMy5ET1dOID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcblxyXG4vKipcclxuICogQSBzdGF0aWMgZm9yd2FyZCBWZWN0b3IzIGZvciB1c2UgYnkgcmVmZXJlbmNlLlxyXG4gKiBcclxuICogVGhpcyBjb25zdGFudCBpcyBtZWFudCBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAY29uc3RhbnRcclxuICogQG5hbWUgUGhhc2VyLk1hdGguVmVjdG9yMy5GT1JXQVJEXHJcbiAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IzfVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5WZWN0b3IzLkZPUldBUkQgPSBuZXcgVmVjdG9yMygwLCAwLCAxKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyBiYWNrIFZlY3RvcjMgZm9yIHVzZSBieSByZWZlcmVuY2UuXHJcbiAqIFxyXG4gKiBUaGlzIGNvbnN0YW50IGlzIG1lYW50IGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBjb25zdGFudFxyXG4gKiBAbmFtZSBQaGFzZXIuTWF0aC5WZWN0b3IzLkJBQ0tcclxuICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjN9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblZlY3RvcjMuQkFDSyA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRpYyBvbmUgVmVjdG9yMyBmb3IgdXNlIGJ5IHJlZmVyZW5jZS5cclxuICogXHJcbiAqIFRoaXMgY29uc3RhbnQgaXMgbWVhbnQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cclxuICpcclxuICogQGNvbnN0YW50XHJcbiAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjMuT05FXHJcbiAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IzfVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5WZWN0b3IzLk9ORSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3IzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Vector3.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Vector4.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/math/Vector4.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\r\n//  and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A representation of a vector in 4D space.\r\n *\r\n * A four-component vector.\r\n *\r\n * @class Vector4\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - The x component.\r\n * @param {number} [y] - The y component.\r\n * @param {number} [z] - The z component.\r\n * @param {number} [w] - The w component.\r\n */\r\nvar Vector4 = new Class({\r\n\r\n    initialize:\r\n\r\n    function Vector4 (x, y, z, w)\r\n    {\r\n        /**\r\n         * The x component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector4#x\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = 0;\r\n\r\n        /**\r\n         * The y component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector4#y\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = 0;\r\n\r\n        /**\r\n         * The z component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector4#z\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.z = 0;\r\n\r\n        /**\r\n         * The w component of this Vector.\r\n         *\r\n         * @name Phaser.Math.Vector4#w\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.w = 0;\r\n\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n            this.w = x.w || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n            this.w = w || 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Make a clone of this Vector4.\r\n     *\r\n     * @method Phaser.Math.Vector4#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector4} A clone of this Vector4.\r\n     */\r\n    clone: function ()\r\n    {\r\n        return new Vector4(this.x, this.y, this.z, this.w);\r\n    },\r\n\r\n    /**\r\n     * Copy the components of a given Vector into this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} src - The Vector to copy the components from.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    copy: function (src)\r\n    {\r\n        this.x = src.x;\r\n        this.y = src.y;\r\n        this.z = src.z || 0;\r\n        this.w = src.w || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check whether this Vector is equal to a given Vector.\r\n     *\r\n     * Performs a strict quality check against each Vector's components.\r\n     *\r\n     * @method Phaser.Math.Vector4#equals\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} v - The vector to check equality with.\r\n     *\r\n     * @return {boolean} A boolean indicating whether the two Vectors are equal or not.\r\n     */\r\n    equals: function (v)\r\n    {\r\n        return ((this.x === v.x) && (this.y === v.y) && (this.z === v.z) && (this.w === v.w));\r\n    },\r\n\r\n    /**\r\n     * Set the `x`, `y`, `z` and `w` components of the this Vector to the given `x`, `y`, `z` and `w` values.\r\n     *\r\n     * @method Phaser.Math.Vector4#set\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|object)} x - The x value to set for this Vector, or an object containing x, y, z and w components.\r\n     * @param {number} y - The y value to set for this Vector.\r\n     * @param {number} z - The z value to set for this Vector.\r\n     * @param {number} w - The z value to set for this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    set: function (x, y, z, w)\r\n    {\r\n        if (typeof x === 'object')\r\n        {\r\n            this.x = x.x || 0;\r\n            this.y = x.y || 0;\r\n            this.z = x.z || 0;\r\n            this.w = x.w || 0;\r\n        }\r\n        else\r\n        {\r\n            this.x = x || 0;\r\n            this.y = y || 0;\r\n            this.z = z || 0;\r\n            this.w = w || 0;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Add a given Vector to this Vector. Addition is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector4#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to add to this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    add: function (v)\r\n    {\r\n        this.x += v.x;\r\n        this.y += v.y;\r\n        this.z += v.z || 0;\r\n        this.w += v.w || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Subtract the given Vector from this Vector. Subtraction is component-wise.\r\n     *\r\n     * @method Phaser.Math.Vector4#subtract\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to subtract from this Vector.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    subtract: function (v)\r\n    {\r\n        this.x -= v.x;\r\n        this.y -= v.y;\r\n        this.z -= v.z || 0;\r\n        this.w -= v.w || 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale this Vector by the given value.\r\n     *\r\n     * @method Phaser.Math.Vector4#scale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} scale - The value to scale this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    scale: function (scale)\r\n    {\r\n        this.x *= scale;\r\n        this.y *= scale;\r\n        this.z *= scale;\r\n        this.w *= scale;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the length (or magnitude) of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#length\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector.\r\n     */\r\n    length: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n\r\n        return Math.sqrt(x * x + y * y + z * z + w * w);\r\n    },\r\n\r\n    /**\r\n     * Calculate the length of this Vector squared.\r\n     *\r\n     * @method Phaser.Math.Vector4#lengthSq\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The length of this Vector, squared.\r\n     */\r\n    lengthSq: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n\r\n        return x * x + y * y + z * z + w * w;\r\n    },\r\n\r\n    /**\r\n     * Normalize this Vector.\r\n     *\r\n     * Makes the vector a unit length vector (magnitude of 1) in the same direction.\r\n     *\r\n     * @method Phaser.Math.Vector4#normalize\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    normalize: function ()\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n        var len = x * x + y * y + z * z + w * w;\r\n\r\n        if (len > 0)\r\n        {\r\n            len = 1 / Math.sqrt(len);\r\n\r\n            this.x = x * len;\r\n            this.y = y * len;\r\n            this.z = z * len;\r\n            this.w = w * len;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the dot product of this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#dot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} v - The Vector4 to dot product with this Vector4.\r\n     *\r\n     * @return {number} The dot product of this Vector and the given Vector.\r\n     */\r\n    dot: function (v)\r\n    {\r\n        return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\r\n    },\r\n\r\n    /**\r\n     * Linearly interpolate between this Vector and the given Vector.\r\n     *\r\n     * Interpolates this Vector towards the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#lerp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector4} v - The Vector4 to interpolate towards.\r\n     * @param {number} [t=0] - The interpolation percentage, between 0 and 1.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    lerp: function (v, t)\r\n    {\r\n        if (t === undefined) { t = 0; }\r\n\r\n        var ax = this.x;\r\n        var ay = this.y;\r\n        var az = this.z;\r\n        var aw = this.w;\r\n\r\n        this.x = ax + t * (v.x - ax);\r\n        this.y = ay + t * (v.y - ay);\r\n        this.z = az + t * (v.z - az);\r\n        this.w = aw + t * (v.w - aw);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise multiplication between this Vector and the given Vector.\r\n     *\r\n     * Multiplies this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#multiply\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to multiply this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    multiply: function (v)\r\n    {\r\n        this.x *= v.x;\r\n        this.y *= v.y;\r\n        this.z *= v.z || 1;\r\n        this.w *= v.w || 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Perform a component-wise division between this Vector and the given Vector.\r\n     *\r\n     * Divides this Vector by the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#divide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to divide this Vector by.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    divide: function (v)\r\n    {\r\n        this.x /= v.x;\r\n        this.y /= v.y;\r\n        this.z /= v.z || 1;\r\n        this.w /= v.w || 1;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#distance\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector.\r\n     */\r\n    distance: function (v)\r\n    {\r\n        var dx = v.x - this.x;\r\n        var dy = v.y - this.y;\r\n        var dz = v.z - this.z || 0;\r\n        var dw = v.w - this.w || 0;\r\n\r\n        return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\r\n    },\r\n\r\n    /**\r\n     * Calculate the distance between this Vector and the given Vector, squared.\r\n     *\r\n     * @method Phaser.Math.Vector4#distanceSq\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Math.Vector2|Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to calculate the distance to.\r\n     *\r\n     * @return {number} The distance from this Vector to the given Vector, squared.\r\n     */\r\n    distanceSq: function (v)\r\n    {\r\n        var dx = v.x - this.x;\r\n        var dy = v.y - this.y;\r\n        var dz = v.z - this.z || 0;\r\n        var dw = v.w - this.w || 0;\r\n\r\n        return dx * dx + dy * dy + dz * dz + dw * dw;\r\n    },\r\n\r\n    /**\r\n     * Negate the `x`, `y`, `z` and `w` components of this Vector.\r\n     *\r\n     * @method Phaser.Math.Vector4#negate\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    negate: function ()\r\n    {\r\n        this.x = -this.x;\r\n        this.y = -this.y;\r\n        this.z = -this.z;\r\n        this.w = -this.w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Matrix.\r\n     *\r\n     * @method Phaser.Math.Vector4#transformMat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector4 with.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    transformMat4: function (mat)\r\n    {\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var w = this.w;\r\n        var m = mat.val;\r\n\r\n        this.x = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\r\n        this.y = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\r\n        this.z = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\r\n        this.w = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Transform this Vector with the given Quaternion.\r\n     *\r\n     * @method Phaser.Math.Vector4#transformQuat\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Quaternion} q - The Quaternion to transform this Vector with.\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    transformQuat: function (q)\r\n    {\r\n        // TODO: is this really the same as Vector3?\r\n        // Also, what about this: http://molecularmusings.wordpress.com/2013/05/24/a-faster-quaternion-vector-multiplication/\r\n        // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\r\n        var x = this.x;\r\n        var y = this.y;\r\n        var z = this.z;\r\n        var qx = q.x;\r\n        var qy = q.y;\r\n        var qz = q.z;\r\n        var qw = q.w;\r\n\r\n        // calculate quat * vec\r\n        var ix = qw * x + qy * z - qz * y;\r\n        var iy = qw * y + qz * x - qx * z;\r\n        var iz = qw * z + qx * y - qy * x;\r\n        var iw = -qx * x - qy * y - qz * z;\r\n\r\n        // calculate result * inverse quat\r\n        this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n        this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n        this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Make this Vector the zero vector (0, 0, 0, 0).\r\n     *\r\n     * @method Phaser.Math.Vector4#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Math.Vector4} This Vector4.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.x = 0;\r\n        this.y = 0;\r\n        this.z = 0;\r\n        this.w = 0;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\n//  TODO: Check if these are required internally, if not, remove.\r\nVector4.prototype.sub = Vector4.prototype.subtract;\r\nVector4.prototype.mul = Vector4.prototype.multiply;\r\nVector4.prototype.div = Vector4.prototype.divide;\r\nVector4.prototype.dist = Vector4.prototype.distance;\r\nVector4.prototype.distSq = Vector4.prototype.distanceSq;\r\nVector4.prototype.len = Vector4.prototype.length;\r\nVector4.prototype.lenSq = Vector4.prototype.lengthSq;\r\n\r\nmodule.exports = Vector4;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1ZlY3RvcjQuanM/MmQwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOERBQThEO0FBQzdFO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOERBQThEO0FBQzdFO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOERBQThEO0FBQzdFO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvVmVjdG9yNC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEFkYXB0ZWQgZnJvbSBbZ2wtbWF0cml4XShodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgpIGJ5IHRvamlcclxuLy8gIGFuZCBbdmVjbWF0aF0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL3ZlY21hdGgpIGJ5IG1hdHRkZXNsXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvciBpbiA0RCBzcGFjZS5cclxuICpcclxuICogQSBmb3VyLWNvbXBvbmVudCB2ZWN0b3IuXHJcbiAqXHJcbiAqIEBjbGFzcyBWZWN0b3I0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTWF0aFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbel0gLSBUaGUgeiBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd10gLSBUaGUgdyBjb21wb25lbnQuXHJcbiAqL1xyXG52YXIgVmVjdG9yNCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBWZWN0b3I0ICh4LCB5LCB6LCB3KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNvbXBvbmVudCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjQjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNvbXBvbmVudCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjQjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB6IGNvbXBvbmVudCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjQjelxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3IGNvbXBvbmVudCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlZlY3RvcjQjd1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudyA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB4LnggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy55ID0geC55IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IHgueiB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB4LncgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0geCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueiA9IHogfHwgMDtcclxuICAgICAgICAgICAgdGhpcy53ID0gdyB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlIGEgY2xvbmUgb2YgdGhpcyBWZWN0b3I0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNjbG9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yNH0gQSBjbG9uZSBvZiB0aGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIGNvbXBvbmVudHMgb2YgYSBnaXZlbiBWZWN0b3IgaW50byB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBzcmMgLSBUaGUgVmVjdG9yIHRvIGNvcHkgdGhlIGNvbXBvbmVudHMgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0gc3JjLng7XHJcbiAgICAgICAgdGhpcy55ID0gc3JjLnk7XHJcbiAgICAgICAgdGhpcy56ID0gc3JjLnogfHwgMDtcclxuICAgICAgICB0aGlzLncgPSBzcmMudyB8fCAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgVmVjdG9yIGlzIGVxdWFsIHRvIGEgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIFBlcmZvcm1zIGEgc3RyaWN0IHF1YWxpdHkgY2hlY2sgYWdhaW5zdCBlYWNoIFZlY3RvcidzIGNvbXBvbmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I2VxdWFsc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSB2IC0gVGhlIHZlY3RvciB0byBjaGVjayBlcXVhbGl0eSB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHR3byBWZWN0b3JzIGFyZSBlcXVhbCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIGVxdWFsczogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICgodGhpcy54ID09PSB2LngpICYmICh0aGlzLnkgPT09IHYueSkgJiYgKHRoaXMueiA9PT0gdi56KSAmJiAodGhpcy53ID09PSB2LncpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGB4YCwgYHlgLCBgemAgYW5kIGB3YCBjb21wb25lbnRzIG9mIHRoZSB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gYHhgLCBgeWAsIGB6YCBhbmQgYHdgIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8b2JqZWN0KX0geCAtIFRoZSB4IHZhbHVlIHRvIHNldCBmb3IgdGhpcyBWZWN0b3IsIG9yIGFuIG9iamVjdCBjb250YWluaW5nIHgsIHksIHogYW5kIHcgY29tcG9uZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIHogdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3IC0gVGhlIHogdmFsdWUgdG8gc2V0IGZvciB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB4LnkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geC56IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMudyA9IHgudyB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB4IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy56ID0geiB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB3IHx8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBnaXZlbiBWZWN0b3IgdG8gdGhpcyBWZWN0b3IuIEFkZGl0aW9uIGlzIGNvbXBvbmVudC13aXNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yM3xQaGFzZXIuTWF0aC5WZWN0b3I0KX0gdiAtIFRoZSBWZWN0b3IgdG8gYWRkIHRvIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjR9IFRoaXMgVmVjdG9yNC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggKz0gdi54O1xyXG4gICAgICAgIHRoaXMueSArPSB2Lnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHYueiB8fCAwO1xyXG4gICAgICAgIHRoaXMudyArPSB2LncgfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgdGhlIGdpdmVuIFZlY3RvciBmcm9tIHRoaXMgVmVjdG9yLiBTdWJ0cmFjdGlvbiBpcyBjb21wb25lbnQtd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjc3VidHJhY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yM3xQaGFzZXIuTWF0aC5WZWN0b3I0KX0gdiAtIFRoZSBWZWN0b3IgdG8gc3VidHJhY3QgZnJvbSB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggLT0gdi54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2Lnk7XHJcbiAgICAgICAgdGhpcy56IC09IHYueiB8fCAwO1xyXG4gICAgICAgIHRoaXMudyAtPSB2LncgfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgdGhpcyBWZWN0b3IgYnkgdGhlIGdpdmVuIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNzY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIC0gVGhlIHZhbHVlIHRvIHNjYWxlIHRoaXMgVmVjdG9yIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjR9IFRoaXMgVmVjdG9yNC5cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzY2FsZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggKj0gc2NhbGU7XHJcbiAgICAgICAgdGhpcy55ICo9IHNjYWxlO1xyXG4gICAgICAgIHRoaXMueiAqPSBzY2FsZTtcclxuICAgICAgICB0aGlzLncgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIChvciBtYWduaXR1ZGUpIG9mIHRoaXMgVmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNsZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGlzIFZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciB3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGlzIFZlY3RvciBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNsZW5ndGhTcVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbGVuZ3RoIG9mIHRoaXMgVmVjdG9yLCBzcXVhcmVkLlxyXG4gICAgICovXHJcbiAgICBsZW5ndGhTcTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuICAgICAgICB2YXIgeiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgdyA9IHRoaXMudztcclxuXHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSB0aGlzIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBNYWtlcyB0aGUgdmVjdG9yIGEgdW5pdCBsZW5ndGggdmVjdG9yIChtYWduaXR1ZGUgb2YgMSkgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCNub3JtYWxpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjR9IFRoaXMgVmVjdG9yNC5cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciB3ID0gdGhpcy53O1xyXG4gICAgICAgIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcclxuXHJcbiAgICAgICAgaWYgKGxlbiA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnggPSB4ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLnogPSB6ICogbGVuO1xyXG4gICAgICAgICAgICB0aGlzLncgPSB3ICogbGVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjZG90XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjR9IHYgLSBUaGUgVmVjdG9yNCB0byBkb3QgcHJvZHVjdCB3aXRoIHRoaXMgVmVjdG9yNC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkb3QgcHJvZHVjdCBvZiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgZG90OiBmdW5jdGlvbiAodilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56ICsgdGhpcy53ICogdi53O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogSW50ZXJwb2xhdGVzIHRoaXMgVmVjdG9yIHRvd2FyZHMgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjbGVycFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSB2IC0gVGhlIFZlY3RvcjQgdG8gaW50ZXJwb2xhdGUgdG93YXJkcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdD0wXSAtIFRoZSBpbnRlcnBvbGF0aW9uIHBlcmNlbnRhZ2UsIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uICh2LCB0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ID09PSB1bmRlZmluZWQpIHsgdCA9IDA7IH1cclxuXHJcbiAgICAgICAgdmFyIGF4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciBheSA9IHRoaXMueTtcclxuICAgICAgICB2YXIgYXogPSB0aGlzLno7XHJcbiAgICAgICAgdmFyIGF3ID0gdGhpcy53O1xyXG5cclxuICAgICAgICB0aGlzLnggPSBheCArIHQgKiAodi54IC0gYXgpO1xyXG4gICAgICAgIHRoaXMueSA9IGF5ICsgdCAqICh2LnkgLSBheSk7XHJcbiAgICAgICAgdGhpcy56ID0gYXogKyB0ICogKHYueiAtIGF6KTtcclxuICAgICAgICB0aGlzLncgPSBhdyArIHQgKiAodi53IC0gYXcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgY29tcG9uZW50LXdpc2UgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBNdWx0aXBsaWVzIHRoaXMgVmVjdG9yIGJ5IHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I211bHRpcGx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfFBoYXNlci5NYXRoLlZlY3RvcjN8UGhhc2VyLk1hdGguVmVjdG9yNCl9IHYgLSBUaGUgVmVjdG9yIHRvIG11bHRpcGx5IHRoaXMgVmVjdG9yIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjR9IFRoaXMgVmVjdG9yNC5cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAqPSB2Lng7XHJcbiAgICAgICAgdGhpcy55ICo9IHYueTtcclxuICAgICAgICB0aGlzLnogKj0gdi56IHx8IDE7XHJcbiAgICAgICAgdGhpcy53ICo9IHYudyB8fCAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgY29tcG9uZW50LXdpc2UgZGl2aXNpb24gYmV0d2VlbiB0aGlzIFZlY3RvciBhbmQgdGhlIGdpdmVuIFZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBEaXZpZGVzIHRoaXMgVmVjdG9yIGJ5IHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I2RpdmlkZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxQaGFzZXIuTWF0aC5WZWN0b3IzfFBoYXNlci5NYXRoLlZlY3RvcjQpfSB2IC0gVGhlIFZlY3RvciB0byBkaXZpZGUgdGhpcyBWZWN0b3IgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yNH0gVGhpcyBWZWN0b3I0LlxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCAvPSB2Lng7XHJcbiAgICAgICAgdGhpcy55IC89IHYueTtcclxuICAgICAgICB0aGlzLnogLz0gdi56IHx8IDE7XHJcbiAgICAgICAgdGhpcy53IC89IHYudyB8fCAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I2Rpc3RhbmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfFBoYXNlci5NYXRoLlZlY3RvcjN8UGhhc2VyLk1hdGguVmVjdG9yNCl9IHYgLSBUaGUgVmVjdG9yIHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGlzdGFuY2UgZnJvbSB0aGlzIFZlY3RvciB0byB0aGUgZ2l2ZW4gVmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKHYpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gdi54IC0gdGhpcy54O1xyXG4gICAgICAgIHZhciBkeSA9IHYueSAtIHRoaXMueTtcclxuICAgICAgICB2YXIgZHogPSB2LnogLSB0aGlzLnogfHwgMDtcclxuICAgICAgICB2YXIgZHcgPSB2LncgLSB0aGlzLncgfHwgMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHogKyBkdyAqIGR3KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBWZWN0b3IgYW5kIHRoZSBnaXZlbiBWZWN0b3IsIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I2Rpc3RhbmNlU3FcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yM3xQaGFzZXIuTWF0aC5WZWN0b3I0KX0gdiAtIFRoZSBWZWN0b3IgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgVmVjdG9yIHRvIHRoZSBnaXZlbiBWZWN0b3IsIHNxdWFyZWQuXHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlU3E6IGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHYueCAtIHRoaXMueDtcclxuICAgICAgICB2YXIgZHkgPSB2LnkgLSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGR6ID0gdi56IC0gdGhpcy56IHx8IDA7XHJcbiAgICAgICAgdmFyIGR3ID0gdi53IC0gdGhpcy53IHx8IDA7XHJcblxyXG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHogKyBkdyAqIGR3O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSB0aGUgYHhgLCBgeWAsIGB6YCBhbmQgYHdgIGNvbXBvbmVudHMgb2YgdGhpcyBWZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I25lZ2F0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yNH0gVGhpcyBWZWN0b3I0LlxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0gLXRoaXMueDtcclxuICAgICAgICB0aGlzLnkgPSAtdGhpcy55O1xyXG4gICAgICAgIHRoaXMueiA9IC10aGlzLno7XHJcbiAgICAgICAgdGhpcy53ID0gLXRoaXMudztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHRoaXMgVmVjdG9yIHdpdGggdGhlIGdpdmVuIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlZlY3RvcjQjdHJhbnNmb3JtTWF0NFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5NYXRyaXg0fSBtYXQgLSBUaGUgTWF0cml4NCB0byB0cmFuc2Zvcm0gdGhpcyBWZWN0b3I0IHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yNH0gVGhpcyBWZWN0b3I0LlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobWF0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xyXG4gICAgICAgIHZhciB3ID0gdGhpcy53O1xyXG4gICAgICAgIHZhciBtID0gbWF0LnZhbDtcclxuXHJcbiAgICAgICAgdGhpcy54ID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgICAgIHRoaXMueSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdICogdztcclxuICAgICAgICB0aGlzLnogPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0gKiB3O1xyXG4gICAgICAgIHRoaXMudyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSB0aGlzIFZlY3RvciB3aXRoIHRoZSBnaXZlbiBRdWF0ZXJuaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguVmVjdG9yNCN0cmFuc2Zvcm1RdWF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlF1YXRlcm5pb259IHEgLSBUaGUgUXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gdGhpcyBWZWN0b3Igd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uIChxKVxyXG4gICAge1xyXG4gICAgICAgIC8vIFRPRE86IGlzIHRoaXMgcmVhbGx5IHRoZSBzYW1lIGFzIFZlY3RvcjM/XHJcbiAgICAgICAgLy8gQWxzbywgd2hhdCBhYm91dCB0aGlzOiBodHRwOi8vbW9sZWN1bGFybXVzaW5ncy53b3JkcHJlc3MuY29tLzIwMTMvMDUvMjQvYS1mYXN0ZXItcXVhdGVybmlvbi12ZWN0b3ItbXVsdGlwbGljYXRpb24vXHJcbiAgICAgICAgLy8gYmVuY2htYXJrczogaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnNcclxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueTtcclxuICAgICAgICB2YXIgeiA9IHRoaXMuejtcclxuICAgICAgICB2YXIgcXggPSBxLng7XHJcbiAgICAgICAgdmFyIHF5ID0gcS55O1xyXG4gICAgICAgIHZhciBxeiA9IHEuejtcclxuICAgICAgICB2YXIgcXcgPSBxLnc7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjXHJcbiAgICAgICAgdmFyIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xyXG4gICAgICAgIHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcclxuICAgICAgICB2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XHJcbiAgICAgICAgdmFyIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgICAgIHRoaXMueCA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XHJcbiAgICAgICAgdGhpcy55ID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgICAgICB0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlIHRoaXMgVmVjdG9yIHRoZSB6ZXJvIHZlY3RvciAoMCwgMCwgMCwgMCkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5WZWN0b3I0I3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBUaGlzIFZlY3RvcjQuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vLyAgVE9ETzogQ2hlY2sgaWYgdGhlc2UgYXJlIHJlcXVpcmVkIGludGVybmFsbHksIGlmIG5vdCwgcmVtb3ZlLlxyXG5WZWN0b3I0LnByb3RvdHlwZS5zdWIgPSBWZWN0b3I0LnByb3RvdHlwZS5zdWJ0cmFjdDtcclxuVmVjdG9yNC5wcm90b3R5cGUubXVsID0gVmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHk7XHJcblZlY3RvcjQucHJvdG90eXBlLmRpdiA9IFZlY3RvcjQucHJvdG90eXBlLmRpdmlkZTtcclxuVmVjdG9yNC5wcm90b3R5cGUuZGlzdCA9IFZlY3RvcjQucHJvdG90eXBlLmRpc3RhbmNlO1xyXG5WZWN0b3I0LnByb3RvdHlwZS5kaXN0U3EgPSBWZWN0b3I0LnByb3RvdHlwZS5kaXN0YW5jZVNxO1xyXG5WZWN0b3I0LnByb3RvdHlwZS5sZW4gPSBWZWN0b3I0LnByb3RvdHlwZS5sZW5ndGg7XHJcblZlY3RvcjQucHJvdG90eXBlLmxlblNxID0gVmVjdG9yNC5wcm90b3R5cGUubGVuZ3RoU3E7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvcjQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Vector4.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Within.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/math/Within.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if the two values are within the given `tolerance` of each other.\r\n *\r\n * @function Phaser.Math.Within\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The first value to use in the calculation.\r\n * @param {number} b - The second value to use in the calculation.\r\n * @param {number} tolerance - The tolerance. Anything equal to or less than this value is considered as being within range.\r\n *\r\n * @return {boolean} Returns `true` if `a` is less than or equal to the tolerance of `b`.\r\n */\r\nvar Within = function (a, b, tolerance)\r\n{\r\n    return (Math.abs(a - b) <= tolerance);\r\n};\r\n\r\nmodule.exports = Within;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1dpdGhpbi5qcz8wMmNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9XaXRoaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdGhlIHR3byB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgZ2l2ZW4gYHRvbGVyYW5jZWAgb2YgZWFjaCBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLldpdGhpblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGEgLSBUaGUgZmlyc3QgdmFsdWUgdG8gdXNlIGluIHRoZSBjYWxjdWxhdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgc2Vjb25kIHZhbHVlIHRvIHVzZSBpbiB0aGUgY2FsY3VsYXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b2xlcmFuY2UgLSBUaGUgdG9sZXJhbmNlLiBBbnl0aGluZyBlcXVhbCB0byBvciBsZXNzIHRoYW4gdGhpcyB2YWx1ZSBpcyBjb25zaWRlcmVkIGFzIGJlaW5nIHdpdGhpbiByYW5nZS5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdG9sZXJhbmNlIG9mIGBiYC5cclxuICovXHJcbnZhciBXaXRoaW4gPSBmdW5jdGlvbiAoYSwgYiwgdG9sZXJhbmNlKVxyXG57XHJcbiAgICByZXR1cm4gKE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2UpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXaXRoaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Within.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/Wrap.js":
/*!**********************************************!*\
  !*** ./node_modules/phaser/src/math/Wrap.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Wrap the given `value` between `min` and `max.\r\n *\r\n * @function Phaser.Math.Wrap\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to wrap.\r\n * @param {number} min - The minimum value.\r\n * @param {number} max - The maximum value.\r\n *\r\n * @return {number} The wrapped value.\r\n */\r\nvar Wrap = function (value, min, max)\r\n{\r\n    var range = max - min;\r\n\r\n    return (min + ((((value - min) % range) + range) % range));\r\n};\r\n\r\nmodule.exports = Wrap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL1dyYXAuanM/MjFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvV3JhcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyYXAgdGhlIGdpdmVuIGB2YWx1ZWAgYmV0d2VlbiBgbWluYCBhbmQgYG1heC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLldyYXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cmFwLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBUaGUgbWF4aW11bSB2YWx1ZS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgd3JhcHBlZCB2YWx1ZS5cclxuICovXHJcbnZhciBXcmFwID0gZnVuY3Rpb24gKHZhbHVlLCBtaW4sIG1heClcclxue1xyXG4gICAgdmFyIHJhbmdlID0gbWF4IC0gbWluO1xyXG5cclxuICAgIHJldHVybiAobWluICsgKCgoKHZhbHVlIC0gbWluKSAlIHJhbmdlKSArIHJhbmdlKSAlIHJhbmdlKSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/Wrap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/Between.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/Between.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Find the angle of a segment from (x1, y1) -> (x2, y2).\r\n *\r\n * @function Phaser.Math.Angle.Between\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the first point.\r\n * @param {number} y1 - The y coordinate of the first point.\r\n * @param {number} x2 - The x coordinate of the second point.\r\n * @param {number} y2 - The y coordinate of the second point.\r\n *\r\n * @return {number} The angle in radians.\r\n */\r\nvar Between = function (x1, y1, x2, y2)\r\n{\r\n    return Math.atan2(y2 - y1, x2 - x1);\r\n};\r\n\r\nmodule.exports = Between;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW4uanM/ODQ1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaW5kIHRoZSBhbmdsZSBvZiBhIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSAtPiAoeDIsIHkyKS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkFuZ2xlLkJldHdlZW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geTEgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geTIgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAqL1xyXG52YXIgQmV0d2VlbiA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5Milcclxue1xyXG4gICAgcmV0dXJuIE1hdGguYXRhbjIoeTIgLSB5MSwgeDIgLSB4MSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJldHdlZW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/Between.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/BetweenPoints.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/BetweenPoints.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Find the angle of a segment from (point1.x, point1.y) -> (point2.x, point2.y).\r\n *\r\n * Calculates the angle of the vector from the first point to the second point.\r\n *\r\n * @function Phaser.Math.Angle.BetweenPoints\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|object)} point1 - The first point.\r\n * @param {(Phaser.Geom.Point|object)} point2 - The second point.\r\n *\r\n * @return {number} The angle in radians.\r\n */\r\nvar BetweenPoints = function (point1, point2)\r\n{\r\n    return Math.atan2(point2.y - point1.y, point2.x - point1.x);\r\n};\r\n\r\nmodule.exports = BetweenPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW5Qb2ludHMuanM/NTdhZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW5Qb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaW5kIHRoZSBhbmdsZSBvZiBhIHNlZ21lbnQgZnJvbSAocG9pbnQxLngsIHBvaW50MS55KSAtPiAocG9pbnQyLngsIHBvaW50Mi55KS5cclxuICpcclxuICogQ2FsY3VsYXRlcyB0aGUgYW5nbGUgb2YgdGhlIHZlY3RvciBmcm9tIHRoZSBmaXJzdCBwb2ludCB0byB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQW5nbGUuQmV0d2VlblBvaW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gcG9pbnQxIC0gVGhlIGZpcnN0IHBvaW50LlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludDIgLSBUaGUgc2Vjb25kIHBvaW50LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKi9cclxudmFyIEJldHdlZW5Qb2ludHMgPSBmdW5jdGlvbiAocG9pbnQxLCBwb2ludDIpXHJcbntcclxuICAgIHJldHVybiBNYXRoLmF0YW4yKHBvaW50Mi55IC0gcG9pbnQxLnksIHBvaW50Mi54IC0gcG9pbnQxLngpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCZXR3ZWVuUG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/BetweenPoints.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/BetweenPointsY.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/BetweenPointsY.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Find the angle of a segment from (point1.x, point1.y) -> (point2.x, point2.y).\r\n *\r\n * The difference between this method and {@link Phaser.Math.Angle.BetweenPoints} is that this assumes the y coordinate\r\n * travels down the screen.\r\n *\r\n * @function Phaser.Math.Angle.BetweenPointsY\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|object)} point1 - The first point.\r\n * @param {(Phaser.Geom.Point|object)} point2 - The second point.\r\n *\r\n * @return {number} The angle in radians.\r\n */\r\nvar BetweenPointsY = function (point1, point2)\r\n{\r\n    return Math.atan2(point2.x - point1.x, point2.y - point1.y);\r\n};\r\n\r\nmodule.exports = BetweenPointsY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW5Qb2ludHNZLmpzPzE1YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxzQ0FBc0M7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW5Qb2ludHNZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRmluZCB0aGUgYW5nbGUgb2YgYSBzZWdtZW50IGZyb20gKHBvaW50MS54LCBwb2ludDEueSkgLT4gKHBvaW50Mi54LCBwb2ludDIueSkuXHJcbiAqXHJcbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtZXRob2QgYW5kIHtAbGluayBQaGFzZXIuTWF0aC5BbmdsZS5CZXR3ZWVuUG9pbnRzfSBpcyB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgeSBjb29yZGluYXRlXHJcbiAqIHRyYXZlbHMgZG93biB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQW5nbGUuQmV0d2VlblBvaW50c1lcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IHBvaW50MSAtIFRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gcG9pbnQyIC0gVGhlIHNlY29uZCBwb2ludC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cclxuICovXHJcbnZhciBCZXR3ZWVuUG9pbnRzWSA9IGZ1bmN0aW9uIChwb2ludDEsIHBvaW50Milcclxue1xyXG4gICAgcmV0dXJuIE1hdGguYXRhbjIocG9pbnQyLnggLSBwb2ludDEueCwgcG9pbnQyLnkgLSBwb2ludDEueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJldHdlZW5Qb2ludHNZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/BetweenPointsY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/BetweenY.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/BetweenY.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Find the angle of a segment from (x1, y1) -> (x2, y2).\r\n *\r\n * The difference between this method and {@link Phaser.Math.Angle.Between} is that this assumes the y coordinate\r\n * travels down the screen.\r\n *\r\n * @function Phaser.Math.Angle.BetweenY\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the first point.\r\n * @param {number} y1 - The y coordinate of the first point.\r\n * @param {number} x2 - The x coordinate of the second point.\r\n * @param {number} y2 - The y coordinate of the second point.\r\n *\r\n * @return {number} The angle in radians.\r\n */\r\nvar BetweenY = function (x1, y1, x2, y2)\r\n{\r\n    return Math.atan2(x2 - x1, y2 - y1);\r\n};\r\n\r\nmodule.exports = BetweenY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0JldHdlZW5ZLmpzPzA1MzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxnQ0FBZ0M7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9CZXR3ZWVuWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEZpbmQgdGhlIGFuZ2xlIG9mIGEgc2VnbWVudCBmcm9tICh4MSwgeTEpIC0+ICh4MiwgeTIpLlxyXG4gKlxyXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgbWV0aG9kIGFuZCB7QGxpbmsgUGhhc2VyLk1hdGguQW5nbGUuQmV0d2Vlbn0gaXMgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIHkgY29vcmRpbmF0ZVxyXG4gKiB0cmF2ZWxzIGRvd24gdGhlIHNjcmVlbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkFuZ2xlLkJldHdlZW5ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geDEgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkyIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKi9cclxudmFyIEJldHdlZW5ZID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5hdGFuMih4MiAtIHgxLCB5MiAtIHkxKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmV0d2Vlblk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/BetweenY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/CounterClockwise.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/CounterClockwise.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Takes an angle in Phasers default clockwise format and converts it so that\r\n * 0 is North, 90 is West, 180 is South and 270 is East,\r\n * therefore running counter-clockwise instead of clockwise.\r\n * \r\n * You can pass in the angle from a Game Object using:\r\n * \r\n * ```javascript\r\n * var converted = CounterClockwise(gameobject.rotation);\r\n * ```\r\n * \r\n * All values for this function are in radians.\r\n *\r\n * @function Phaser.Math.Angle.CounterClockwise\r\n * @since 3.16.0\r\n *\r\n * @param {number} angle - The angle to convert, in radians.\r\n *\r\n * @return {number} The converted angle, in radians.\r\n */\r\nvar CounterClockwise = function (angle)\r\n{\r\n    if (angle > Math.PI)\r\n    {\r\n        angle -= CONST.PI2;\r\n    }\r\n\r\n    return Math.abs((((angle + CONST.TAU) % CONST.PI2) - CONST.PI2) % CONST.PI2);\r\n};\r\n\r\nmodule.exports = CounterClockwise;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL0NvdW50ZXJDbG9ja3dpc2UuanM/Mzk3YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHlEQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9Db3VudGVyQ2xvY2t3aXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFuZ2xlIGluIFBoYXNlcnMgZGVmYXVsdCBjbG9ja3dpc2UgZm9ybWF0IGFuZCBjb252ZXJ0cyBpdCBzbyB0aGF0XHJcbiAqIDAgaXMgTm9ydGgsIDkwIGlzIFdlc3QsIDE4MCBpcyBTb3V0aCBhbmQgMjcwIGlzIEVhc3QsXHJcbiAqIHRoZXJlZm9yZSBydW5uaW5nIGNvdW50ZXItY2xvY2t3aXNlIGluc3RlYWQgb2YgY2xvY2t3aXNlLlxyXG4gKiBcclxuICogWW91IGNhbiBwYXNzIGluIHRoZSBhbmdsZSBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBjb252ZXJ0ZWQgPSBDb3VudGVyQ2xvY2t3aXNlKGdhbWVvYmplY3Qucm90YXRpb24pO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIEFsbCB2YWx1ZXMgZm9yIHRoaXMgZnVuY3Rpb24gYXJlIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5BbmdsZS5Db3VudGVyQ2xvY2t3aXNlXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIGNvbnZlcnQsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbnZlcnRlZCBhbmdsZSwgaW4gcmFkaWFucy5cclxuICovXHJcbnZhciBDb3VudGVyQ2xvY2t3aXNlID0gZnVuY3Rpb24gKGFuZ2xlKVxyXG57XHJcbiAgICBpZiAoYW5nbGUgPiBNYXRoLlBJKVxyXG4gICAge1xyXG4gICAgICAgIGFuZ2xlIC09IENPTlNULlBJMjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5hYnMoKCgoYW5nbGUgKyBDT05TVC5UQVUpICUgQ09OU1QuUEkyKSAtIENPTlNULlBJMikgJSBDT05TVC5QSTIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb3VudGVyQ2xvY2t3aXNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/CounterClockwise.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/Normalize.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/Normalize.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Normalize an angle to the [0, 2pi] range.\r\n *\r\n * @function Phaser.Math.Angle.Normalize\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle - The angle to normalize, in radians.\r\n *\r\n * @return {number} The normalized angle, in radians.\r\n */\r\nvar Normalize = function (angle)\r\n{\r\n    angle = angle % (2 * Math.PI);\r\n\r\n    if (angle >= 0)\r\n    {\r\n        return angle;\r\n    }\r\n    else\r\n    {\r\n        return angle + 2 * Math.PI;\r\n    }\r\n};\r\n\r\nmodule.exports = Normalize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL05vcm1hbGl6ZS5qcz9iNTYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9Ob3JtYWxpemUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYW4gYW5nbGUgdG8gdGhlIFswLCAycGldIHJhbmdlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQW5nbGUuTm9ybWFsaXplXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplLCBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBub3JtYWxpemVkIGFuZ2xlLCBpbiByYWRpYW5zLlxyXG4gKi9cclxudmFyIE5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhbmdsZSlcclxue1xyXG4gICAgYW5nbGUgPSBhbmdsZSAlICgyICogTWF0aC5QSSk7XHJcblxyXG4gICAgaWYgKGFuZ2xlID49IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGFuZ2xlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBhbmdsZSArIDIgKiBNYXRoLlBJO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOb3JtYWxpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/Normalize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/Reverse.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/Reverse.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Normalize = __webpack_require__(/*! ./Normalize */ \"./node_modules/phaser/src/math/angle/Normalize.js\");\r\n\r\n/**\r\n * Reverse the given angle.\r\n *\r\n * @function Phaser.Math.Angle.Reverse\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle - The angle to reverse, in radians.\r\n *\r\n * @return {number} The reversed angle, in radians.\r\n */\r\nvar Reverse = function (angle)\r\n{\r\n    return Normalize(angle + Math.PI);\r\n};\r\n\r\nmodule.exports = Reverse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1JldmVyc2UuanM/ZjhmYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9SZXZlcnNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTm9ybWFsaXplID0gcmVxdWlyZSgnLi9Ob3JtYWxpemUnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXZlcnNlIHRoZSBnaXZlbiBhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkFuZ2xlLlJldmVyc2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSB0byByZXZlcnNlLCBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXZlcnNlZCBhbmdsZSwgaW4gcmFkaWFucy5cclxuICovXHJcbnZhciBSZXZlcnNlID0gZnVuY3Rpb24gKGFuZ2xlKVxyXG57XHJcbiAgICByZXR1cm4gTm9ybWFsaXplKGFuZ2xlICsgTWF0aC5QSSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJldmVyc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/Reverse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/RotateTo.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/RotateTo.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Rotates `currentAngle` towards `targetAngle`, taking the shortest rotation distance. The `lerp` argument is the amount to rotate by in this call.\r\n *\r\n * @function Phaser.Math.Angle.RotateTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} currentAngle - The current angle, in radians.\r\n * @param {number} targetAngle - The target angle to rotate to, in radians.\r\n * @param {number} [lerp=0.05] - The lerp value to add to the current angle.\r\n *\r\n * @return {number} The adjusted angle.\r\n */\r\nvar RotateTo = function (currentAngle, targetAngle, lerp)\r\n{\r\n    if (lerp === undefined) { lerp = 0.05; }\r\n\r\n    if (currentAngle === targetAngle)\r\n    {\r\n        return currentAngle;\r\n    }\r\n\r\n    if (Math.abs(targetAngle - currentAngle) <= lerp || Math.abs(targetAngle - currentAngle) >= (MATH_CONST.PI2 - lerp))\r\n    {\r\n        currentAngle = targetAngle;\r\n    }\r\n    else\r\n    {\r\n        if (Math.abs(targetAngle - currentAngle) > Math.PI)\r\n        {\r\n            if (targetAngle < currentAngle)\r\n            {\r\n                targetAngle += MATH_CONST.PI2;\r\n            }\r\n            else\r\n            {\r\n                targetAngle -= MATH_CONST.PI2;\r\n            }\r\n        }\r\n\r\n        if (targetAngle > currentAngle)\r\n        {\r\n            currentAngle += lerp;\r\n        }\r\n        else if (targetAngle < currentAngle)\r\n        {\r\n            currentAngle -= lerp;\r\n        }\r\n    }\r\n\r\n    return currentAngle;\r\n};\r\n\r\nmodule.exports = RotateTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1JvdGF0ZVRvLmpzPzA2NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvYW5nbGUvUm90YXRlVG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGBjdXJyZW50QW5nbGVgIHRvd2FyZHMgYHRhcmdldEFuZ2xlYCwgdGFraW5nIHRoZSBzaG9ydGVzdCByb3RhdGlvbiBkaXN0YW5jZS4gVGhlIGBsZXJwYCBhcmd1bWVudCBpcyB0aGUgYW1vdW50IHRvIHJvdGF0ZSBieSBpbiB0aGlzIGNhbGwuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5BbmdsZS5Sb3RhdGVUb1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRBbmdsZSAtIFRoZSBjdXJyZW50IGFuZ2xlLCBpbiByYWRpYW5zLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0QW5nbGUgLSBUaGUgdGFyZ2V0IGFuZ2xlIHRvIHJvdGF0ZSB0bywgaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtsZXJwPTAuMDVdIC0gVGhlIGxlcnAgdmFsdWUgdG8gYWRkIHRvIHRoZSBjdXJyZW50IGFuZ2xlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhZGp1c3RlZCBhbmdsZS5cclxuICovXHJcbnZhciBSb3RhdGVUbyA9IGZ1bmN0aW9uIChjdXJyZW50QW5nbGUsIHRhcmdldEFuZ2xlLCBsZXJwKVxyXG57XHJcbiAgICBpZiAobGVycCA9PT0gdW5kZWZpbmVkKSB7IGxlcnAgPSAwLjA1OyB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnRBbmdsZSA9PT0gdGFyZ2V0QW5nbGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRBbmdsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTWF0aC5hYnModGFyZ2V0QW5nbGUgLSBjdXJyZW50QW5nbGUpIDw9IGxlcnAgfHwgTWF0aC5hYnModGFyZ2V0QW5nbGUgLSBjdXJyZW50QW5nbGUpID49IChNQVRIX0NPTlNULlBJMiAtIGxlcnApKVxyXG4gICAge1xyXG4gICAgICAgIGN1cnJlbnRBbmdsZSA9IHRhcmdldEFuZ2xlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0YXJnZXRBbmdsZSAtIGN1cnJlbnRBbmdsZSkgPiBNYXRoLlBJKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldEFuZ2xlIDwgY3VycmVudEFuZ2xlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRBbmdsZSArPSBNQVRIX0NPTlNULlBJMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEFuZ2xlIC09IE1BVEhfQ09OU1QuUEkyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFyZ2V0QW5nbGUgPiBjdXJyZW50QW5nbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjdXJyZW50QW5nbGUgKz0gbGVycDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0QW5nbGUgPCBjdXJyZW50QW5nbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjdXJyZW50QW5nbGUgLT0gbGVycDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRBbmdsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlVG87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/RotateTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/ShortestBetween.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/ShortestBetween.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Gets the shortest angle between `angle1` and `angle2`.\r\n *\r\n * Both angles must be in the range -180 to 180, which is the same clamped\r\n * range that `sprite.angle` uses, so you can pass in two sprite angles to\r\n * this method and get the shortest angle back between the two of them.\r\n *\r\n * The angle returned will be in the same range. If the returned angle is\r\n * greater than 0 then it's a counter-clockwise rotation, if < 0 then it's\r\n * a clockwise rotation.\r\n *\r\n * TODO: Wrap the angles in this function?\r\n *\r\n * @function Phaser.Math.Angle.ShortestBetween\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle1 - The first angle in the range -180 to 180.\r\n * @param {number} angle2 - The second angle in the range -180 to 180.\r\n *\r\n * @return {number} The shortest angle, in degrees. If greater than zero it's a counter-clockwise rotation.\r\n */\r\nvar ShortestBetween = function (angle1, angle2)\r\n{\r\n    var difference = angle2 - angle1;\r\n\r\n    if (difference === 0)\r\n    {\r\n        return 0;\r\n    }\r\n\r\n    var times = Math.floor((difference - (-180)) / 360);\r\n\r\n    return difference - (times * 360);\r\n\r\n};\r\n\r\nmodule.exports = ShortestBetween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1Nob3J0ZXN0QmV0d2Vlbi5qcz8xYWExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1Nob3J0ZXN0QmV0d2Vlbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHNob3J0ZXN0IGFuZ2xlIGJldHdlZW4gYGFuZ2xlMWAgYW5kIGBhbmdsZTJgLlxyXG4gKlxyXG4gKiBCb3RoIGFuZ2xlcyBtdXN0IGJlIGluIHRoZSByYW5nZSAtMTgwIHRvIDE4MCwgd2hpY2ggaXMgdGhlIHNhbWUgY2xhbXBlZFxyXG4gKiByYW5nZSB0aGF0IGBzcHJpdGUuYW5nbGVgIHVzZXMsIHNvIHlvdSBjYW4gcGFzcyBpbiB0d28gc3ByaXRlIGFuZ2xlcyB0b1xyXG4gKiB0aGlzIG1ldGhvZCBhbmQgZ2V0IHRoZSBzaG9ydGVzdCBhbmdsZSBiYWNrIGJldHdlZW4gdGhlIHR3byBvZiB0aGVtLlxyXG4gKlxyXG4gKiBUaGUgYW5nbGUgcmV0dXJuZWQgd2lsbCBiZSBpbiB0aGUgc2FtZSByYW5nZS4gSWYgdGhlIHJldHVybmVkIGFuZ2xlIGlzXHJcbiAqIGdyZWF0ZXIgdGhhbiAwIHRoZW4gaXQncyBhIGNvdW50ZXItY2xvY2t3aXNlIHJvdGF0aW9uLCBpZiA8IDAgdGhlbiBpdCdzXHJcbiAqIGEgY2xvY2t3aXNlIHJvdGF0aW9uLlxyXG4gKlxyXG4gKiBUT0RPOiBXcmFwIHRoZSBhbmdsZXMgaW4gdGhpcyBmdW5jdGlvbj9cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkFuZ2xlLlNob3J0ZXN0QmV0d2VlblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlMSAtIFRoZSBmaXJzdCBhbmdsZSBpbiB0aGUgcmFuZ2UgLTE4MCB0byAxODAuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZTIgLSBUaGUgc2Vjb25kIGFuZ2xlIGluIHRoZSByYW5nZSAtMTgwIHRvIDE4MC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgc2hvcnRlc3QgYW5nbGUsIGluIGRlZ3JlZXMuIElmIGdyZWF0ZXIgdGhhbiB6ZXJvIGl0J3MgYSBjb3VudGVyLWNsb2Nrd2lzZSByb3RhdGlvbi5cclxuICovXHJcbnZhciBTaG9ydGVzdEJldHdlZW4gPSBmdW5jdGlvbiAoYW5nbGUxLCBhbmdsZTIpXHJcbntcclxuICAgIHZhciBkaWZmZXJlbmNlID0gYW5nbGUyIC0gYW5nbGUxO1xyXG5cclxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0aW1lcyA9IE1hdGguZmxvb3IoKGRpZmZlcmVuY2UgLSAoLTE4MCkpIC8gMzYwKTtcclxuXHJcbiAgICByZXR1cm4gZGlmZmVyZW5jZSAtICh0aW1lcyAqIDM2MCk7XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaG9ydGVzdEJldHdlZW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/ShortestBetween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/Wrap.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/Wrap.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathWrap = __webpack_require__(/*! ../Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * Wrap an angle.\r\n *\r\n * Wraps the angle to a value in the range of -PI to PI.\r\n *\r\n * @function Phaser.Math.Angle.Wrap\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle - The angle to wrap, in radians.\r\n *\r\n * @return {number} The wrapped angle, in radians.\r\n */\r\nvar Wrap = function (angle)\r\n{\r\n    return MathWrap(angle, -Math.PI, Math.PI);\r\n};\r\n\r\nmodule.exports = Wrap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1dyYXAuanM/Y2NjNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVEQUFTOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1dyYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNYXRoV3JhcCA9IHJlcXVpcmUoJy4uL1dyYXAnKTtcclxuXHJcbi8qKlxyXG4gKiBXcmFwIGFuIGFuZ2xlLlxyXG4gKlxyXG4gKiBXcmFwcyB0aGUgYW5nbGUgdG8gYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgLVBJIHRvIFBJLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguQW5nbGUuV3JhcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHdyYXAsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHdyYXBwZWQgYW5nbGUsIGluIHJhZGlhbnMuXHJcbiAqL1xyXG52YXIgV3JhcCA9IGZ1bmN0aW9uIChhbmdsZSlcclxue1xyXG4gICAgcmV0dXJuIE1hdGhXcmFwKGFuZ2xlLCAtTWF0aC5QSSwgTWF0aC5QSSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/Wrap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/WrapDegrees.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/WrapDegrees.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Wrap = __webpack_require__(/*! ../Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * Wrap an angle in degrees.\r\n *\r\n * Wraps the angle to a value in the range of -180 to 180.\r\n *\r\n * @function Phaser.Math.Angle.WrapDegrees\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle - The angle to wrap, in degrees.\r\n *\r\n * @return {number} The wrapped angle, in degrees.\r\n */\r\nvar WrapDegrees = function (angle)\r\n{\r\n    return Wrap(angle, -180, 180);\r\n};\r\n\r\nmodule.exports = WrapDegrees;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL1dyYXBEZWdyZWVzLmpzP2ZlNzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyx1REFBUzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9XcmFwRGVncmVlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFdyYXAgPSByZXF1aXJlKCcuLi9XcmFwJyk7XHJcblxyXG4vKipcclxuICogV3JhcCBhbiBhbmdsZSBpbiBkZWdyZWVzLlxyXG4gKlxyXG4gKiBXcmFwcyB0aGUgYW5nbGUgdG8gYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgLTE4MCB0byAxODAuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5BbmdsZS5XcmFwRGVncmVlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHdyYXAsIGluIGRlZ3JlZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHdyYXBwZWQgYW5nbGUsIGluIGRlZ3JlZXMuXHJcbiAqL1xyXG52YXIgV3JhcERlZ3JlZXMgPSBmdW5jdGlvbiAoYW5nbGUpXHJcbntcclxuICAgIHJldHVybiBXcmFwKGFuZ2xlLCAtMTgwLCAxODApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXcmFwRGVncmVlcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/WrapDegrees.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/angle/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/angle/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Angle\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Between: __webpack_require__(/*! ./Between */ \"./node_modules/phaser/src/math/angle/Between.js\"),\r\n    BetweenPoints: __webpack_require__(/*! ./BetweenPoints */ \"./node_modules/phaser/src/math/angle/BetweenPoints.js\"),\r\n    BetweenPointsY: __webpack_require__(/*! ./BetweenPointsY */ \"./node_modules/phaser/src/math/angle/BetweenPointsY.js\"),\r\n    BetweenY: __webpack_require__(/*! ./BetweenY */ \"./node_modules/phaser/src/math/angle/BetweenY.js\"),\r\n    CounterClockwise: __webpack_require__(/*! ./CounterClockwise */ \"./node_modules/phaser/src/math/angle/CounterClockwise.js\"),\r\n    Normalize: __webpack_require__(/*! ./Normalize */ \"./node_modules/phaser/src/math/angle/Normalize.js\"),\r\n    Reverse: __webpack_require__(/*! ./Reverse */ \"./node_modules/phaser/src/math/angle/Reverse.js\"),\r\n    RotateTo: __webpack_require__(/*! ./RotateTo */ \"./node_modules/phaser/src/math/angle/RotateTo.js\"),\r\n    ShortestBetween: __webpack_require__(/*! ./ShortestBetween */ \"./node_modules/phaser/src/math/angle/ShortestBetween.js\"),\r\n    Wrap: __webpack_require__(/*! ./Wrap */ \"./node_modules/phaser/src/math/angle/Wrap.js\"),\r\n    WrapDegrees: __webpack_require__(/*! ./WrapDegrees */ \"./node_modules/phaser/src/math/angle/WrapDegrees.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2FuZ2xlL2luZGV4LmpzPzBjZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsa0VBQVc7QUFDaEMsbUJBQW1CLG1CQUFPLENBQUMsOEVBQWlCO0FBQzVDLG9CQUFvQixtQkFBTyxDQUFDLGdGQUFrQjtBQUM5QyxjQUFjLG1CQUFPLENBQUMsb0VBQVk7QUFDbEMsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxzRUFBYTtBQUNwQyxhQUFhLG1CQUFPLENBQUMsa0VBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLG9FQUFZO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLGtGQUFtQjtBQUNoRCxVQUFVLG1CQUFPLENBQUMsNERBQVE7QUFDMUIsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7O0FBRXhDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9hbmdsZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguQW5nbGVcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBCZXR3ZWVuOiByZXF1aXJlKCcuL0JldHdlZW4nKSxcclxuICAgIEJldHdlZW5Qb2ludHM6IHJlcXVpcmUoJy4vQmV0d2VlblBvaW50cycpLFxyXG4gICAgQmV0d2VlblBvaW50c1k6IHJlcXVpcmUoJy4vQmV0d2VlblBvaW50c1knKSxcclxuICAgIEJldHdlZW5ZOiByZXF1aXJlKCcuL0JldHdlZW5ZJyksXHJcbiAgICBDb3VudGVyQ2xvY2t3aXNlOiByZXF1aXJlKCcuL0NvdW50ZXJDbG9ja3dpc2UnKSxcclxuICAgIE5vcm1hbGl6ZTogcmVxdWlyZSgnLi9Ob3JtYWxpemUnKSxcclxuICAgIFJldmVyc2U6IHJlcXVpcmUoJy4vUmV2ZXJzZScpLFxyXG4gICAgUm90YXRlVG86IHJlcXVpcmUoJy4vUm90YXRlVG8nKSxcclxuICAgIFNob3J0ZXN0QmV0d2VlbjogcmVxdWlyZSgnLi9TaG9ydGVzdEJldHdlZW4nKSxcclxuICAgIFdyYXA6IHJlcXVpcmUoJy4vV3JhcCcpLFxyXG4gICAgV3JhcERlZ3JlZXM6IHJlcXVpcmUoJy4vV3JhcERlZ3JlZXMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/angle/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/const.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/math/const.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = {\r\n\r\n    /**\r\n     * The value of PI * 2.\r\n     * \r\n     * @name Phaser.Math.PI2\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    PI2: Math.PI * 2,\r\n\r\n    /**\r\n     * The value of PI * 0.5.\r\n     * \r\n     * @name Phaser.Math.TAU\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    TAU: Math.PI * 0.5,\r\n\r\n    /**\r\n     * An epsilon value (1.0e-6)\r\n     * \r\n     * @name Phaser.Math.EPSILON\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    EPSILON: 1.0e-6,\r\n\r\n    /**\r\n     * For converting degrees to radians (PI / 180)\r\n     * \r\n     * @name Phaser.Math.DEG_TO_RAD\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    DEG_TO_RAD: Math.PI / 180,\r\n\r\n    /**\r\n     * For converting radians to degrees (180 / PI)\r\n     * \r\n     * @name Phaser.Math.RAD_TO_DEG\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    RAD_TO_DEG: 180 / Math.PI,\r\n\r\n    /**\r\n     * An instance of the Random Number Generator.\r\n     * This is not set until the Game boots.\r\n     * \r\n     * @name Phaser.Math.RND\r\n     * @type {Phaser.Math.RandomDataGenerator}\r\n     * @since 3.0.0\r\n     */\r\n    RND: null,\r\n\r\n    /**\r\n     * The minimum safe integer this browser supports.\r\n     * We use a const for backward compatibility with Internet Explorer.\r\n     * \r\n     * @name Phaser.Math.MIN_SAFE_INTEGER\r\n     * @type {number}\r\n     * @since 3.21.0\r\n     */\r\n    MIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER || -9007199254740991,\r\n\r\n    /**\r\n     * The maximum safe integer this browser supports.\r\n     * We use a const for backward compatibility with Internet Explorer.\r\n     * \r\n     * @name Phaser.Math.MAX_SAFE_INTEGER\r\n     * @type {number}\r\n     * @since 3.21.0\r\n     */\r\n    MAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER || 9007199254740991\r\n\r\n};\r\n\r\nmodule.exports = MATH_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2NvbnN0LmpzPzE3YjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2NvbnN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTUFUSF9DT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiBQSSAqIDIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlBJMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQSTI6IE1hdGguUEkgKiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIG9mIFBJICogMC41LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5UQVVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVEFVOiBNYXRoLlBJICogMC41LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gZXBzaWxvbiB2YWx1ZSAoMS4wZS02KVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5FUFNJTE9OXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEVQU0lMT046IDEuMGUtNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8gcmFkaWFucyAoUEkgLyAxODApXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLkRFR19UT19SQURcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlcyAoMTgwIC8gUEkpXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlJBRF9UT19ERUdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvci5cclxuICAgICAqIFRoaXMgaXMgbm90IHNldCB1bnRpbCB0aGUgR2FtZSBib290cy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLk1hdGguUk5EXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBSTkQ6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgdGhpcyBicm93c2VyIHN1cHBvcnRzLlxyXG4gICAgICogV2UgdXNlIGEgY29uc3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBJbnRlcm5ldCBFeHBsb3Jlci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLk1hdGguTUlOX1NBRkVfSU5URUdFUlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqL1xyXG4gICAgTUlOX1NBRkVfSU5URUdFUjogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgLTkwMDcxOTkyNTQ3NDA5OTEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWF4aW11bSBzYWZlIGludGVnZXIgdGhpcyBicm93c2VyIHN1cHBvcnRzLlxyXG4gICAgICogV2UgdXNlIGEgY29uc3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBJbnRlcm5ldCBFeHBsb3Jlci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLk1hdGguTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqL1xyXG4gICAgTUFYX1NBRkVfSU5URUdFUjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgOTAwNzE5OTI1NDc0MDk5MVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTUFUSF9DT05TVDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/distance/DistanceBetween.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/math/distance/DistanceBetween.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the distance between two sets of coordinates (points).\r\n *\r\n * @function Phaser.Math.Distance.Between\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the first point.\r\n * @param {number} y1 - The y coordinate of the first point.\r\n * @param {number} x2 - The x coordinate of the second point.\r\n * @param {number} y2 - The y coordinate of the second point.\r\n *\r\n * @return {number} The distance between each point.\r\n */\r\nvar DistanceBetween = function (x1, y1, x2, y2)\r\n{\r\n    var dx = x1 - x2;\r\n    var dy = y1 - y2;\r\n\r\n    return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nmodule.exports = DistanceBetween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2Vlbi5qcz83ODlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9kaXN0YW5jZS9EaXN0YW5jZUJldHdlZW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNldHMgb2YgY29vcmRpbmF0ZXMgKHBvaW50cykuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5EaXN0YW5jZS5CZXR3ZWVuXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geDEgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkyIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQuXHJcbiAqL1xyXG52YXIgRGlzdGFuY2VCZXR3ZWVuID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG57XHJcbiAgICB2YXIgZHggPSB4MSAtIHgyO1xyXG4gICAgdmFyIGR5ID0geTEgLSB5MjtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGlzdGFuY2VCZXR3ZWVuO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/distance/DistanceBetween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/distance/DistancePower.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/distance/DistancePower.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the distance between two sets of coordinates (points) to the power of `pow`.\r\n *\r\n * @function Phaser.Math.Distance.Power\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the first point.\r\n * @param {number} y1 - The y coordinate of the first point.\r\n * @param {number} x2 - The x coordinate of the second point.\r\n * @param {number} y2 - The y coordinate of the second point.\r\n * @param {number} pow - The exponent.\r\n *\r\n * @return {number} The distance between each point.\r\n */\r\nvar DistancePower = function (x1, y1, x2, y2, pow)\r\n{\r\n    if (pow === undefined) { pow = 2; }\r\n\r\n    return Math.sqrt(Math.pow(x2 - x1, pow) + Math.pow(y2 - y1, pow));\r\n};\r\n\r\nmodule.exports = DistancePower;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlUG93ZXIuanM/NzhkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUzs7QUFFckM7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZGlzdGFuY2UvRGlzdGFuY2VQb3dlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gc2V0cyBvZiBjb29yZGluYXRlcyAocG9pbnRzKSB0byB0aGUgcG93ZXIgb2YgYHBvd2AuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5EaXN0YW5jZS5Qb3dlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5MSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geDIgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHBvdyAtIFRoZSBleHBvbmVudC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHBvaW50LlxyXG4gKi9cclxudmFyIERpc3RhbmNlUG93ZXIgPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHBvdylcclxue1xyXG4gICAgaWYgKHBvdyA9PT0gdW5kZWZpbmVkKSB7IHBvdyA9IDI7IH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHgyIC0geDEsIHBvdykgKyBNYXRoLnBvdyh5MiAtIHkxLCBwb3cpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGlzdGFuY2VQb3dlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/distance/DistancePower.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/distance/DistanceSquared.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/math/distance/DistanceSquared.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the distance between two sets of coordinates (points), squared.\r\n *\r\n * @function Phaser.Math.Distance.Squared\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the first point.\r\n * @param {number} y1 - The y coordinate of the first point.\r\n * @param {number} x2 - The x coordinate of the second point.\r\n * @param {number} y2 - The y coordinate of the second point.\r\n *\r\n * @return {number} The distance between each point, squared.\r\n */\r\nvar DistanceSquared = function (x1, y1, x2, y2)\r\n{\r\n    var dx = x1 - x2;\r\n    var dy = y1 - y2;\r\n\r\n    return dx * dx + dy * dy;\r\n};\r\n\r\nmodule.exports = DistanceSquared;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlU3F1YXJlZC5qcz9lOThmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9kaXN0YW5jZS9EaXN0YW5jZVNxdWFyZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNldHMgb2YgY29vcmRpbmF0ZXMgKHBvaW50cyksIHNxdWFyZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5EaXN0YW5jZS5TcXVhcmVkXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geDEgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkyIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQsIHNxdWFyZWQuXHJcbiAqL1xyXG52YXIgRGlzdGFuY2VTcXVhcmVkID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG57XHJcbiAgICB2YXIgZHggPSB4MSAtIHgyO1xyXG4gICAgdmFyIGR5ID0geTEgLSB5MjtcclxuXHJcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERpc3RhbmNlU3F1YXJlZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/distance/DistanceSquared.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/distance/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/distance/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Distance\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Between: __webpack_require__(/*! ./DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\"),\r\n    Power: __webpack_require__(/*! ./DistancePower */ \"./node_modules/phaser/src/math/distance/DistancePower.js\"),\r\n    Squared: __webpack_require__(/*! ./DistanceSquared */ \"./node_modules/phaser/src/math/distance/DistanceSquared.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Rpc3RhbmNlL2luZGV4LmpzP2UwYWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMscUZBQW1CO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQyxpRkFBaUI7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHFGQUFtQjs7QUFFeEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Rpc3RhbmNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5EaXN0YW5jZVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJldHdlZW46IHJlcXVpcmUoJy4vRGlzdGFuY2VCZXR3ZWVuJyksXHJcbiAgICBQb3dlcjogcmVxdWlyZSgnLi9EaXN0YW5jZVBvd2VyJyksXHJcbiAgICBTcXVhcmVkOiByZXF1aXJlKCcuL0Rpc3RhbmNlU3F1YXJlZCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/distance/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/EaseMap.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/EaseMap.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Back = __webpack_require__(/*! ./back */ \"./node_modules/phaser/src/math/easing/back/index.js\");\r\nvar Bounce = __webpack_require__(/*! ./bounce */ \"./node_modules/phaser/src/math/easing/bounce/index.js\");\r\nvar Circular = __webpack_require__(/*! ./circular */ \"./node_modules/phaser/src/math/easing/circular/index.js\");\r\nvar Cubic = __webpack_require__(/*! ./cubic */ \"./node_modules/phaser/src/math/easing/cubic/index.js\");\r\nvar Elastic = __webpack_require__(/*! ./elastic */ \"./node_modules/phaser/src/math/easing/elastic/index.js\");\r\nvar Expo = __webpack_require__(/*! ./expo */ \"./node_modules/phaser/src/math/easing/expo/index.js\");\r\nvar Linear = __webpack_require__(/*! ./linear */ \"./node_modules/phaser/src/math/easing/linear/index.js\");\r\nvar Quadratic = __webpack_require__(/*! ./quadratic */ \"./node_modules/phaser/src/math/easing/quadratic/index.js\");\r\nvar Quartic = __webpack_require__(/*! ./quartic */ \"./node_modules/phaser/src/math/easing/quartic/index.js\");\r\nvar Quintic = __webpack_require__(/*! ./quintic */ \"./node_modules/phaser/src/math/easing/quintic/index.js\");\r\nvar Sine = __webpack_require__(/*! ./sine */ \"./node_modules/phaser/src/math/easing/sine/index.js\");\r\nvar Stepped = __webpack_require__(/*! ./stepped */ \"./node_modules/phaser/src/math/easing/stepped/index.js\");\r\n\r\n//  EaseMap\r\nmodule.exports = {\r\n\r\n    Power0: Linear,\r\n    Power1: Quadratic.Out,\r\n    Power2: Cubic.Out,\r\n    Power3: Quartic.Out,\r\n    Power4: Quintic.Out,\r\n\r\n    Linear: Linear,\r\n    Quad: Quadratic.Out,\r\n    Cubic: Cubic.Out,\r\n    Quart: Quartic.Out,\r\n    Quint: Quintic.Out,\r\n    Sine: Sine.Out,\r\n    Expo: Expo.Out,\r\n    Circ: Circular.Out,\r\n    Elastic: Elastic.Out,\r\n    Back: Back.Out,\r\n    Bounce: Bounce.Out,\r\n    Stepped: Stepped,\r\n\r\n    'Quad.easeIn': Quadratic.In,\r\n    'Cubic.easeIn': Cubic.In,\r\n    'Quart.easeIn': Quartic.In,\r\n    'Quint.easeIn': Quintic.In,\r\n    'Sine.easeIn': Sine.In,\r\n    'Expo.easeIn': Expo.In,\r\n    'Circ.easeIn': Circular.In,\r\n    'Elastic.easeIn': Elastic.In,\r\n    'Back.easeIn': Back.In,\r\n    'Bounce.easeIn': Bounce.In,\r\n\r\n    'Quad.easeOut': Quadratic.Out,\r\n    'Cubic.easeOut': Cubic.Out,\r\n    'Quart.easeOut': Quartic.Out,\r\n    'Quint.easeOut': Quintic.Out,\r\n    'Sine.easeOut': Sine.Out,\r\n    'Expo.easeOut': Expo.Out,\r\n    'Circ.easeOut': Circular.Out,\r\n    'Elastic.easeOut': Elastic.Out,\r\n    'Back.easeOut': Back.Out,\r\n    'Bounce.easeOut': Bounce.Out,\r\n\r\n    'Quad.easeInOut': Quadratic.InOut,\r\n    'Cubic.easeInOut': Cubic.InOut,\r\n    'Quart.easeInOut': Quartic.InOut,\r\n    'Quint.easeInOut': Quintic.InOut,\r\n    'Sine.easeInOut': Sine.InOut,\r\n    'Expo.easeInOut': Expo.InOut,\r\n    'Circ.easeInOut': Circular.InOut,\r\n    'Elastic.easeInOut': Elastic.InOut,\r\n    'Back.easeInOut': Back.InOut,\r\n    'Bounce.easeInOut': Bounce.InOut\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9FYXNlTWFwLmpzPzFjMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxtRUFBUTtBQUMzQixhQUFhLG1CQUFPLENBQUMsdUVBQVU7QUFDL0IsZUFBZSxtQkFBTyxDQUFDLDJFQUFZO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxxRUFBUztBQUM3QixjQUFjLG1CQUFPLENBQUMseUVBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLG1FQUFRO0FBQzNCLGFBQWEsbUJBQU8sQ0FBQyx1RUFBVTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBYTtBQUNyQyxjQUFjLG1CQUFPLENBQUMseUVBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLHlFQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxtRUFBUTtBQUMzQixjQUFjLG1CQUFPLENBQUMseUVBQVc7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9FYXNlTWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFjayA9IHJlcXVpcmUoJy4vYmFjaycpO1xyXG52YXIgQm91bmNlID0gcmVxdWlyZSgnLi9ib3VuY2UnKTtcclxudmFyIENpcmN1bGFyID0gcmVxdWlyZSgnLi9jaXJjdWxhcicpO1xyXG52YXIgQ3ViaWMgPSByZXF1aXJlKCcuL2N1YmljJyk7XHJcbnZhciBFbGFzdGljID0gcmVxdWlyZSgnLi9lbGFzdGljJyk7XHJcbnZhciBFeHBvID0gcmVxdWlyZSgnLi9leHBvJyk7XHJcbnZhciBMaW5lYXIgPSByZXF1aXJlKCcuL2xpbmVhcicpO1xyXG52YXIgUXVhZHJhdGljID0gcmVxdWlyZSgnLi9xdWFkcmF0aWMnKTtcclxudmFyIFF1YXJ0aWMgPSByZXF1aXJlKCcuL3F1YXJ0aWMnKTtcclxudmFyIFF1aW50aWMgPSByZXF1aXJlKCcuL3F1aW50aWMnKTtcclxudmFyIFNpbmUgPSByZXF1aXJlKCcuL3NpbmUnKTtcclxudmFyIFN0ZXBwZWQgPSByZXF1aXJlKCcuL3N0ZXBwZWQnKTtcclxuXHJcbi8vICBFYXNlTWFwXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFBvd2VyMDogTGluZWFyLFxyXG4gICAgUG93ZXIxOiBRdWFkcmF0aWMuT3V0LFxyXG4gICAgUG93ZXIyOiBDdWJpYy5PdXQsXHJcbiAgICBQb3dlcjM6IFF1YXJ0aWMuT3V0LFxyXG4gICAgUG93ZXI0OiBRdWludGljLk91dCxcclxuXHJcbiAgICBMaW5lYXI6IExpbmVhcixcclxuICAgIFF1YWQ6IFF1YWRyYXRpYy5PdXQsXHJcbiAgICBDdWJpYzogQ3ViaWMuT3V0LFxyXG4gICAgUXVhcnQ6IFF1YXJ0aWMuT3V0LFxyXG4gICAgUXVpbnQ6IFF1aW50aWMuT3V0LFxyXG4gICAgU2luZTogU2luZS5PdXQsXHJcbiAgICBFeHBvOiBFeHBvLk91dCxcclxuICAgIENpcmM6IENpcmN1bGFyLk91dCxcclxuICAgIEVsYXN0aWM6IEVsYXN0aWMuT3V0LFxyXG4gICAgQmFjazogQmFjay5PdXQsXHJcbiAgICBCb3VuY2U6IEJvdW5jZS5PdXQsXHJcbiAgICBTdGVwcGVkOiBTdGVwcGVkLFxyXG5cclxuICAgICdRdWFkLmVhc2VJbic6IFF1YWRyYXRpYy5JbixcclxuICAgICdDdWJpYy5lYXNlSW4nOiBDdWJpYy5JbixcclxuICAgICdRdWFydC5lYXNlSW4nOiBRdWFydGljLkluLFxyXG4gICAgJ1F1aW50LmVhc2VJbic6IFF1aW50aWMuSW4sXHJcbiAgICAnU2luZS5lYXNlSW4nOiBTaW5lLkluLFxyXG4gICAgJ0V4cG8uZWFzZUluJzogRXhwby5JbixcclxuICAgICdDaXJjLmVhc2VJbic6IENpcmN1bGFyLkluLFxyXG4gICAgJ0VsYXN0aWMuZWFzZUluJzogRWxhc3RpYy5JbixcclxuICAgICdCYWNrLmVhc2VJbic6IEJhY2suSW4sXHJcbiAgICAnQm91bmNlLmVhc2VJbic6IEJvdW5jZS5JbixcclxuXHJcbiAgICAnUXVhZC5lYXNlT3V0JzogUXVhZHJhdGljLk91dCxcclxuICAgICdDdWJpYy5lYXNlT3V0JzogQ3ViaWMuT3V0LFxyXG4gICAgJ1F1YXJ0LmVhc2VPdXQnOiBRdWFydGljLk91dCxcclxuICAgICdRdWludC5lYXNlT3V0JzogUXVpbnRpYy5PdXQsXHJcbiAgICAnU2luZS5lYXNlT3V0JzogU2luZS5PdXQsXHJcbiAgICAnRXhwby5lYXNlT3V0JzogRXhwby5PdXQsXHJcbiAgICAnQ2lyYy5lYXNlT3V0JzogQ2lyY3VsYXIuT3V0LFxyXG4gICAgJ0VsYXN0aWMuZWFzZU91dCc6IEVsYXN0aWMuT3V0LFxyXG4gICAgJ0JhY2suZWFzZU91dCc6IEJhY2suT3V0LFxyXG4gICAgJ0JvdW5jZS5lYXNlT3V0JzogQm91bmNlLk91dCxcclxuXHJcbiAgICAnUXVhZC5lYXNlSW5PdXQnOiBRdWFkcmF0aWMuSW5PdXQsXHJcbiAgICAnQ3ViaWMuZWFzZUluT3V0JzogQ3ViaWMuSW5PdXQsXHJcbiAgICAnUXVhcnQuZWFzZUluT3V0JzogUXVhcnRpYy5Jbk91dCxcclxuICAgICdRdWludC5lYXNlSW5PdXQnOiBRdWludGljLkluT3V0LFxyXG4gICAgJ1NpbmUuZWFzZUluT3V0JzogU2luZS5Jbk91dCxcclxuICAgICdFeHBvLmVhc2VJbk91dCc6IEV4cG8uSW5PdXQsXHJcbiAgICAnQ2lyYy5lYXNlSW5PdXQnOiBDaXJjdWxhci5Jbk91dCxcclxuICAgICdFbGFzdGljLmVhc2VJbk91dCc6IEVsYXN0aWMuSW5PdXQsXHJcbiAgICAnQmFjay5lYXNlSW5PdXQnOiBCYWNrLkluT3V0LFxyXG4gICAgJ0JvdW5jZS5lYXNlSW5PdXQnOiBCb3VuY2UuSW5PdXRcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/EaseMap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/back/In.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/back/In.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Back ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Back.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [overshoot=1.70158] - The overshoot amount.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v, overshoot)\r\n{\r\n    if (overshoot === undefined) { overshoot = 1.70158; }\r\n\r\n    return v * v * ((overshoot + 1) * v - overshoot);\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL0luLmpzPzI2ZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFCQUFxQjs7QUFFdkQ7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2JhY2svSW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCYWNrIGVhc2UtaW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuQmFjay5JblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvdmVyc2hvb3Q9MS43MDE1OF0gLSBUaGUgb3ZlcnNob290IGFtb3VudC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbiA9IGZ1bmN0aW9uICh2LCBvdmVyc2hvb3QpXHJcbntcclxuICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAxLjcwMTU4OyB9XHJcblxyXG4gICAgcmV0dXJuIHYgKiB2ICogKChvdmVyc2hvb3QgKyAxKSAqIHYgLSBvdmVyc2hvb3QpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/back/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/back/InOut.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/back/InOut.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Back ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Back.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [overshoot=1.70158] - The overshoot amount.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v, overshoot)\r\n{\r\n    if (overshoot === undefined) { overshoot = 1.70158; }\r\n\r\n    var s = overshoot * 1.525;\r\n\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * (v * v * ((s + 1) * v - s));\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * ((v -= 2) * v * ((s + 1) * v + s) + 2);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL0luT3V0LmpzPzBjNjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFCQUFxQjs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvYmFjay9Jbk91dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEJhY2sgZWFzZS1pbi9vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuQmFjay5Jbk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvdmVyc2hvb3Q9MS43MDE1OF0gLSBUaGUgb3ZlcnNob290IGFtb3VudC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbk91dCA9IGZ1bmN0aW9uICh2LCBvdmVyc2hvb3QpXHJcbntcclxuICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAxLjcwMTU4OyB9XHJcblxyXG4gICAgdmFyIHMgPSBvdmVyc2hvb3QgKiAxLjUyNTtcclxuXHJcbiAgICBpZiAoKHYgKj0gMikgPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiAodiAqIHYgKiAoKHMgKyAxKSAqIHYgLSBzKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgodiAtPSAyKSAqIHYgKiAoKHMgKyAxKSAqIHYgKyBzKSArIDIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbk91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/back/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/back/Out.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/back/Out.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Back ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Back.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [overshoot=1.70158] - The overshoot amount.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v, overshoot)\r\n{\r\n    if (overshoot === undefined) { overshoot = 1.70158; }\r\n\r\n    return --v * v * ((overshoot + 1) * v + overshoot) + 1;\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL091dC5qcz9mMzYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxxQkFBcUI7O0FBRXZEO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL091dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEJhY2sgZWFzZS1vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuQmFjay5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3ZlcnNob290PTEuNzAxNThdIC0gVGhlIG92ZXJzaG9vdCBhbW91bnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgT3V0ID0gZnVuY3Rpb24gKHYsIG92ZXJzaG9vdClcclxue1xyXG4gICAgaWYgKG92ZXJzaG9vdCA9PT0gdW5kZWZpbmVkKSB7IG92ZXJzaG9vdCA9IDEuNzAxNTg7IH1cclxuXHJcbiAgICByZXR1cm4gLS12ICogdiAqICgob3ZlcnNob290ICsgMSkgKiB2ICsgb3ZlcnNob290KSArIDE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/back/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/back/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/back/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Back\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/back/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/back/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/back/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL2luZGV4LmpzPzdlNzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsOERBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLGdFQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyxvRUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9iYWNrL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuQmFja1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/back/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/bounce/In.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/bounce/In.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Bounce ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Bounce.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    v = 1 - v;\r\n\r\n    if (v < 1 / 2.75)\r\n    {\r\n        return 1 - (7.5625 * v * v);\r\n    }\r\n    else if (v < 2 / 2.75)\r\n    {\r\n        return 1 - (7.5625 * (v -= 1.5 / 2.75) * v + 0.75);\r\n    }\r\n    else if (v < 2.5 / 2.75)\r\n    {\r\n        return 1 - (7.5625 * (v -= 2.25 / 2.75) * v + 0.9375);\r\n    }\r\n    else\r\n    {\r\n        return 1 - (7.5625 * (v -= 2.625 / 2.75) * v + 0.984375);\r\n    }\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvSW4uanM/MjQyYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvSW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCb3VuY2UgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5Cb3VuY2UuSW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgSW4gPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgdiA9IDEgLSB2O1xyXG5cclxuICAgIGlmICh2IDwgMSAvIDIuNzUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoNy41NjI1ICogdiAqIHYpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodiA8IDIgLyAyLjc1KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxIC0gKDcuNTYyNSAqICh2IC09IDEuNSAvIDIuNzUpICogdiArIDAuNzUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodiA8IDIuNSAvIDIuNzUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoNy41NjI1ICogKHYgLT0gMi4yNSAvIDIuNzUpICogdiArIDAuOTM3NSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoNy41NjI1ICogKHYgLT0gMi42MjUgLyAyLjc1KSAqIHYgKyAwLjk4NDM3NSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/bounce/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/bounce/InOut.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/bounce/InOut.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Bounce ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Bounce.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    var reverse = false;\r\n\r\n    if (v < 0.5)\r\n    {\r\n        v = 1 - (v * 2);\r\n        reverse = true;\r\n    }\r\n    else\r\n    {\r\n        v = (v * 2) - 1;\r\n    }\r\n\r\n    if (v < 1 / 2.75)\r\n    {\r\n        v = 7.5625 * v * v;\r\n    }\r\n    else if (v < 2 / 2.75)\r\n    {\r\n        v = 7.5625 * (v -= 1.5 / 2.75) * v + 0.75;\r\n    }\r\n    else if (v < 2.5 / 2.75)\r\n    {\r\n        v = 7.5625 * (v -= 2.25 / 2.75) * v + 0.9375;\r\n    }\r\n    else\r\n    {\r\n        v = 7.5625 * (v -= 2.625 / 2.75) * v + 0.984375;\r\n    }\r\n\r\n    if (reverse)\r\n    {\r\n        return (1 - v) * 0.5;\r\n    }\r\n    else\r\n    {\r\n        return v * 0.5 + 0.5;\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvSW5PdXQuanM/YjIxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvSW5PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCb3VuY2UgZWFzZS1pbi9vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuQm91bmNlLkluT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHZhciByZXZlcnNlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHYgPCAwLjUpXHJcbiAgICB7XHJcbiAgICAgICAgdiA9IDEgLSAodiAqIDIpO1xyXG4gICAgICAgIHJldmVyc2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHYgPSAodiAqIDIpIC0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodiA8IDEgLyAyLjc1KVxyXG4gICAge1xyXG4gICAgICAgIHYgPSA3LjU2MjUgKiB2ICogdjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPCAyIC8gMi43NSlcclxuICAgIHtcclxuICAgICAgICB2ID0gNy41NjI1ICogKHYgLT0gMS41IC8gMi43NSkgKiB2ICsgMC43NTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPCAyLjUgLyAyLjc1KVxyXG4gICAge1xyXG4gICAgICAgIHYgPSA3LjU2MjUgKiAodiAtPSAyLjI1IC8gMi43NSkgKiB2ICsgMC45Mzc1O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHYgPSA3LjU2MjUgKiAodiAtPSAyLjYyNSAvIDIuNzUpICogdiArIDAuOTg0Mzc1O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXZlcnNlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAoMSAtIHYpICogMC41O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB2ICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbk91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/bounce/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/bounce/Out.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/bounce/Out.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Bounce ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Bounce.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    if (v < 1 / 2.75)\r\n    {\r\n        return 7.5625 * v * v;\r\n    }\r\n    else if (v < 2 / 2.75)\r\n    {\r\n        return 7.5625 * (v -= 1.5 / 2.75) * v + 0.75;\r\n    }\r\n    else if (v < 2.5 / 2.75)\r\n    {\r\n        return 7.5625 * (v -= 2.25 / 2.75) * v + 0.9375;\r\n    }\r\n    else\r\n    {\r\n        return 7.5625 * (v -= 2.625 / 2.75) * v + 0.984375;\r\n    }\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvT3V0LmpzPzdlNDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvYm91bmNlL091dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEJvdW5jZSBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5Cb3VuY2UuT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIE91dCA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICBpZiAodiA8IDEgLyAyLjc1KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiA3LjU2MjUgKiB2ICogdjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPCAyIC8gMi43NSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gNy41NjI1ICogKHYgLT0gMS41IC8gMi43NSkgKiB2ICsgMC43NTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPCAyLjUgLyAyLjc1KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiA3LjU2MjUgKiAodiAtPSAyLjI1IC8gMi43NSkgKiB2ICsgMC45Mzc1O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiA3LjU2MjUgKiAodiAtPSAyLjYyNSAvIDIuNzUpICogdiArIDAuOTg0Mzc1O1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/bounce/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/bounce/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/bounce/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Bounce\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/bounce/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/bounce/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/bounce/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9ib3VuY2UvaW5kZXguanM/YWU0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbUJBQU8sQ0FBQyxnRUFBTTtBQUN0QixTQUFTLG1CQUFPLENBQUMsa0VBQU87QUFDeEIsV0FBVyxtQkFBTyxDQUFDLHNFQUFTOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2JvdW5jZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguRWFzaW5nLkJvdW5jZVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/bounce/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/circular/In.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/circular/In.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Circular ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Circular.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return 1 - Math.sqrt(1 - v * v);\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jaXJjdWxhci9Jbi5qcz84ODk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2NpcmN1bGFyL0luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2lyY3VsYXIgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DaXJjdWxhci5JblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbiA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gdiAqIHYpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/circular/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/circular/InOut.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/circular/InOut.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Circular ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Circular.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return -0.5 * (Math.sqrt(1 - v * v) - 1);\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * (Math.sqrt(1 - (v -= 2) * v) + 1);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jaXJjdWxhci9Jbk91dC5qcz9jOTkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvY2lyY3VsYXIvSW5PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaXJjdWxhciBlYXNlLWluL291dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DaXJjdWxhci5Jbk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbk91dCA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICBpZiAoKHYgKj0gMikgPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAtMC41ICogKE1hdGguc3FydCgxIC0gdiAqIHYpIC0gMSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtICh2IC09IDIpICogdikgKyAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5PdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/circular/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/circular/Out.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/circular/Out.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Circular ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Circular.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return Math.sqrt(1 - (--v * v));\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jaXJjdWxhci9PdXQuanM/ZjkxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jaXJjdWxhci9PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaXJjdWxhciBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DaXJjdWxhci5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHJldHVybiBNYXRoLnNxcnQoMSAtICgtLXYgKiB2KSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/circular/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/circular/index.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/circular/index.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Circular\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/circular/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/circular/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/circular/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jaXJjdWxhci9pbmRleC5qcz8zMzc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBTyxDQUFDLGtFQUFNO0FBQ3RCLFNBQVMsbUJBQU8sQ0FBQyxvRUFBTztBQUN4QixXQUFXLG1CQUFPLENBQUMsd0VBQVM7O0FBRTVCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvY2lyY3VsYXIvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5NYXRoLkVhc2luZy5DaXJjdWxhclxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/circular/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/cubic/In.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/cubic/In.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Cubic ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Cubic.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return v * v * v;\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jdWJpYy9Jbi5qcz9lOTE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2N1YmljL0luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3ViaWMgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DdWJpYy5JblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbiA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICByZXR1cm4gdiAqIHYgKiB2O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/cubic/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/cubic/InOut.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/cubic/InOut.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Cubic ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Cubic.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * v * v * v;\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * ((v -= 2) * v * v + 2);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jdWJpYy9Jbk91dC5qcz80NzY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvY3ViaWMvSW5PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDdWJpYyBlYXNlLWluL291dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DdWJpYy5Jbk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbk91dCA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICBpZiAoKHYgKj0gMikgPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiB2ICogdiAqIHY7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgodiAtPSAyKSAqIHYgKiB2ICsgMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluT3V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/cubic/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/cubic/Out.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/cubic/Out.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Cubic ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Cubic.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return --v * v * v + 1;\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jdWJpYy9PdXQuanM/OWY2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jdWJpYy9PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDdWJpYyBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5DdWJpYy5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHJldHVybiAtLXYgKiB2ICogdiArIDE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/cubic/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/cubic/index.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/cubic/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Cubic\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/cubic/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/cubic/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/cubic/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9jdWJpYy9pbmRleC5qcz9kZmUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBTyxDQUFDLCtEQUFNO0FBQ3RCLFNBQVMsbUJBQU8sQ0FBQyxpRUFBTztBQUN4QixXQUFXLG1CQUFPLENBQUMscUVBQVM7O0FBRTVCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvY3ViaWMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5NYXRoLkVhc2luZy5DdWJpY1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/cubic/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/elastic/In.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/elastic/In.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Elastic ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Elastic.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [amplitude=0.1] - The amplitude of the elastic ease.\r\n * @param {number} [period=0.1] - Sets how tight the sine-wave is, where smaller values are tighter waves, which result in more cycles.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v, amplitude, period)\r\n{\r\n    if (amplitude === undefined) { amplitude = 0.1; }\r\n    if (period === undefined) { period = 0.1; }\r\n\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        var s = period / 4;\r\n\r\n        if (amplitude < 1)\r\n        {\r\n            amplitude = 1;\r\n        }\r\n        else\r\n        {\r\n            s = period * Math.asin(1 / amplitude) / (2 * Math.PI);\r\n        }\r\n\r\n        return -(amplitude * Math.pow(2, 10 * (v -= 1)) * Math.sin((v - s) * (2 * Math.PI) / period));\r\n    }\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL0luLmpzP2IwMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQsK0JBQStCLGNBQWM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL0luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRWxhc3RpYyBlYXNlLWluLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRWFzaW5nLkVsYXN0aWMuSW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYW1wbGl0dWRlPTAuMV0gLSBUaGUgYW1wbGl0dWRlIG9mIHRoZSBlbGFzdGljIGVhc2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVyaW9kPTAuMV0gLSBTZXRzIGhvdyB0aWdodCB0aGUgc2luZS13YXZlIGlzLCB3aGVyZSBzbWFsbGVyIHZhbHVlcyBhcmUgdGlnaHRlciB3YXZlcywgd2hpY2ggcmVzdWx0IGluIG1vcmUgY3ljbGVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluID0gZnVuY3Rpb24gKHYsIGFtcGxpdHVkZSwgcGVyaW9kKVxyXG57XHJcbiAgICBpZiAoYW1wbGl0dWRlID09PSB1bmRlZmluZWQpIHsgYW1wbGl0dWRlID0gMC4xOyB9XHJcbiAgICBpZiAocGVyaW9kID09PSB1bmRlZmluZWQpIHsgcGVyaW9kID0gMC4xOyB9XHJcblxyXG4gICAgaWYgKHYgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2ID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzID0gcGVyaW9kIC8gNDtcclxuXHJcbiAgICAgICAgaWYgKGFtcGxpdHVkZSA8IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbXBsaXR1ZGUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzID0gcGVyaW9kICogTWF0aC5hc2luKDEgLyBhbXBsaXR1ZGUpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtKGFtcGxpdHVkZSAqIE1hdGgucG93KDIsIDEwICogKHYgLT0gMSkpICogTWF0aC5zaW4oKHYgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwZXJpb2QpKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/elastic/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/elastic/InOut.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/elastic/InOut.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Elastic ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Elastic.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [amplitude=0.1] - The amplitude of the elastic ease.\r\n * @param {number} [period=0.1] - Sets how tight the sine-wave is, where smaller values are tighter waves, which result in more cycles.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v, amplitude, period)\r\n{\r\n    if (amplitude === undefined) { amplitude = 0.1; }\r\n    if (period === undefined) { period = 0.1; }\r\n\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        var s = period / 4;\r\n\r\n        if (amplitude < 1)\r\n        {\r\n            amplitude = 1;\r\n        }\r\n        else\r\n        {\r\n            s = period * Math.asin(1 / amplitude) / (2 * Math.PI);\r\n        }\r\n\r\n        if ((v *= 2) < 1)\r\n        {\r\n            return -0.5 * (amplitude * Math.pow(2, 10 * (v -= 1)) * Math.sin((v - s) * (2 * Math.PI) / period));\r\n        }\r\n        else\r\n        {\r\n            return amplitude * Math.pow(2, -10 * (v -= 1)) * Math.sin((v - s) * (2 * Math.PI) / period) * 0.5 + 1;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL0luT3V0LmpzPzY5MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQsK0JBQStCLGNBQWM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2VsYXN0aWMvSW5PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBFbGFzdGljIGVhc2UtaW4vb3V0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRWFzaW5nLkVsYXN0aWMuSW5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYW1wbGl0dWRlPTAuMV0gLSBUaGUgYW1wbGl0dWRlIG9mIHRoZSBlbGFzdGljIGVhc2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVyaW9kPTAuMV0gLSBTZXRzIGhvdyB0aWdodCB0aGUgc2luZS13YXZlIGlzLCB3aGVyZSBzbWFsbGVyIHZhbHVlcyBhcmUgdGlnaHRlciB3YXZlcywgd2hpY2ggcmVzdWx0IGluIG1vcmUgY3ljbGVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluT3V0ID0gZnVuY3Rpb24gKHYsIGFtcGxpdHVkZSwgcGVyaW9kKVxyXG57XHJcbiAgICBpZiAoYW1wbGl0dWRlID09PSB1bmRlZmluZWQpIHsgYW1wbGl0dWRlID0gMC4xOyB9XHJcbiAgICBpZiAocGVyaW9kID09PSB1bmRlZmluZWQpIHsgcGVyaW9kID0gMC4xOyB9XHJcblxyXG4gICAgaWYgKHYgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2ID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzID0gcGVyaW9kIC8gNDtcclxuXHJcbiAgICAgICAgaWYgKGFtcGxpdHVkZSA8IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbXBsaXR1ZGUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzID0gcGVyaW9kICogTWF0aC5hc2luKDEgLyBhbXBsaXR1ZGUpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodiAqPSAyKSA8IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gLTAuNSAqIChhbXBsaXR1ZGUgKiBNYXRoLnBvdygyLCAxMCAqICh2IC09IDEpKSAqIE1hdGguc2luKCh2IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcGVyaW9kKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbXBsaXR1ZGUgKiBNYXRoLnBvdygyLCAtMTAgKiAodiAtPSAxKSkgKiBNYXRoLnNpbigodiAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHBlcmlvZCkgKiAwLjUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5PdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/elastic/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/elastic/Out.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/elastic/Out.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Elastic ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Elastic.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [amplitude=0.1] - The amplitude of the elastic ease.\r\n * @param {number} [period=0.1] - Sets how tight the sine-wave is, where smaller values are tighter waves, which result in more cycles.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v, amplitude, period)\r\n{\r\n    if (amplitude === undefined) { amplitude = 0.1; }\r\n    if (period === undefined) { period = 0.1; }\r\n\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        var s = period / 4;\r\n\r\n        if (amplitude < 1)\r\n        {\r\n            amplitude = 1;\r\n        }\r\n        else\r\n        {\r\n            s = period * Math.asin(1 / amplitude) / (2 * Math.PI);\r\n        }\r\n\r\n        return (amplitude * Math.pow(2, -10 * v) * Math.sin((v - s) * (2 * Math.PI) / period) + 1);\r\n    }\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL091dC5qcz80ZDFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsaUJBQWlCO0FBQ25ELCtCQUErQixjQUFjOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvZWxhc3RpYy9PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBFbGFzdGljIGVhc2Utb3V0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRWFzaW5nLkVsYXN0aWMuT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2FtcGxpdHVkZT0wLjFdIC0gVGhlIGFtcGxpdHVkZSBvZiB0aGUgZWxhc3RpYyBlYXNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3BlcmlvZD0wLjFdIC0gU2V0cyBob3cgdGlnaHQgdGhlIHNpbmUtd2F2ZSBpcywgd2hlcmUgc21hbGxlciB2YWx1ZXMgYXJlIHRpZ2h0ZXIgd2F2ZXMsIHdoaWNoIHJlc3VsdCBpbiBtb3JlIGN5Y2xlcy5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBPdXQgPSBmdW5jdGlvbiAodiwgYW1wbGl0dWRlLCBwZXJpb2QpXHJcbntcclxuICAgIGlmIChhbXBsaXR1ZGUgPT09IHVuZGVmaW5lZCkgeyBhbXBsaXR1ZGUgPSAwLjE7IH1cclxuICAgIGlmIChwZXJpb2QgPT09IHVuZGVmaW5lZCkgeyBwZXJpb2QgPSAwLjE7IH1cclxuXHJcbiAgICBpZiAodiA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHMgPSBwZXJpb2QgLyA0O1xyXG5cclxuICAgICAgICBpZiAoYW1wbGl0dWRlIDwgMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFtcGxpdHVkZSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHMgPSBwZXJpb2QgKiBNYXRoLmFzaW4oMSAvIGFtcGxpdHVkZSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChhbXBsaXR1ZGUgKiBNYXRoLnBvdygyLCAtMTAgKiB2KSAqIE1hdGguc2luKCh2IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcGVyaW9kKSArIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/elastic/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/elastic/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/elastic/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Elastic\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/elastic/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/elastic/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/elastic/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL2luZGV4LmpzPzlmY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsaUVBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLG1FQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyx1RUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9lbGFzdGljL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuRWxhc3RpY1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/elastic/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/expo/In.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/expo/In.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Exponential ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Expo.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return Math.pow(2, 10 * (v - 1)) - 0.001;\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL0luLmpzPzA4NzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvZXhwby9Jbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEV4cG9uZW50aWFsIGVhc2UtaW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuRXhwby5JblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbiA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAodiAtIDEpKSAtIDAuMDAxO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/expo/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/expo/InOut.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/expo/InOut.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Exponential ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Expo.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * Math.pow(2, 10 * (v - 1));\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * (2 - Math.pow(2, -10 * (v - 1)));\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL0luT3V0LmpzPzE2ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL0luT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRXhwb25lbnRpYWwgZWFzZS1pbi9vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuRXhwby5Jbk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbk91dCA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICBpZiAoKHYgKj0gMikgPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiBNYXRoLnBvdygyLCAxMCAqICh2IC0gMSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiAoMiAtIE1hdGgucG93KDIsIC0xMCAqICh2IC0gMSkpKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5PdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/expo/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/expo/Out.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/expo/Out.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Exponential ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Expo.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return 1 - Math.pow(2, -10 * v);\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL091dC5qcz9mOGNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL2V4cG8vT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRXhwb25lbnRpYWwgZWFzZS1vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuRXhwby5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHJldHVybiAxIC0gTWF0aC5wb3coMiwgLTEwICogdik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/expo/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/expo/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/expo/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Expo\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/expo/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/expo/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/expo/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL2luZGV4LmpzPzZjZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsOERBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLGdFQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyxvRUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9leHBvL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuRXhwb1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/expo/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Back: __webpack_require__(/*! ./back */ \"./node_modules/phaser/src/math/easing/back/index.js\"),\r\n    Bounce: __webpack_require__(/*! ./bounce */ \"./node_modules/phaser/src/math/easing/bounce/index.js\"),\r\n    Circular: __webpack_require__(/*! ./circular */ \"./node_modules/phaser/src/math/easing/circular/index.js\"),\r\n    Cubic: __webpack_require__(/*! ./cubic */ \"./node_modules/phaser/src/math/easing/cubic/index.js\"),\r\n    Elastic: __webpack_require__(/*! ./elastic */ \"./node_modules/phaser/src/math/easing/elastic/index.js\"),\r\n    Expo: __webpack_require__(/*! ./expo */ \"./node_modules/phaser/src/math/easing/expo/index.js\"),\r\n    Linear: __webpack_require__(/*! ./linear */ \"./node_modules/phaser/src/math/easing/linear/index.js\"),\r\n    Quadratic: __webpack_require__(/*! ./quadratic */ \"./node_modules/phaser/src/math/easing/quadratic/index.js\"),\r\n    Quartic: __webpack_require__(/*! ./quartic */ \"./node_modules/phaser/src/math/easing/quartic/index.js\"),\r\n    Quintic: __webpack_require__(/*! ./quintic */ \"./node_modules/phaser/src/math/easing/quintic/index.js\"),\r\n    Sine: __webpack_require__(/*! ./sine */ \"./node_modules/phaser/src/math/easing/sine/index.js\"),\r\n    Stepped: __webpack_require__(/*! ./stepped */ \"./node_modules/phaser/src/math/easing/stepped/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9pbmRleC5qcz85Njk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLG1FQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyx1RUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsMkVBQVk7QUFDbEMsV0FBVyxtQkFBTyxDQUFDLHFFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyx5RUFBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsbUVBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLHVFQUFVO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyw2RUFBYTtBQUNwQyxhQUFhLG1CQUFPLENBQUMseUVBQVc7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLHlFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBUTtBQUMxQixhQUFhLG1CQUFPLENBQUMseUVBQVc7O0FBRWhDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5NYXRoLkVhc2luZ1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJhY2s6IHJlcXVpcmUoJy4vYmFjaycpLFxyXG4gICAgQm91bmNlOiByZXF1aXJlKCcuL2JvdW5jZScpLFxyXG4gICAgQ2lyY3VsYXI6IHJlcXVpcmUoJy4vY2lyY3VsYXInKSxcclxuICAgIEN1YmljOiByZXF1aXJlKCcuL2N1YmljJyksXHJcbiAgICBFbGFzdGljOiByZXF1aXJlKCcuL2VsYXN0aWMnKSxcclxuICAgIEV4cG86IHJlcXVpcmUoJy4vZXhwbycpLFxyXG4gICAgTGluZWFyOiByZXF1aXJlKCcuL2xpbmVhcicpLFxyXG4gICAgUXVhZHJhdGljOiByZXF1aXJlKCcuL3F1YWRyYXRpYycpLFxyXG4gICAgUXVhcnRpYzogcmVxdWlyZSgnLi9xdWFydGljJyksXHJcbiAgICBRdWludGljOiByZXF1aXJlKCcuL3F1aW50aWMnKSxcclxuICAgIFNpbmU6IHJlcXVpcmUoJy4vc2luZScpLFxyXG4gICAgU3RlcHBlZDogcmVxdWlyZSgnLi9zdGVwcGVkJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/linear/Linear.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/linear/Linear.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Linear easing (no variation).\r\n *\r\n * @function Phaser.Math.Easing.Linear.Linear\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Linear = function (v)\r\n{\r\n    return v;\r\n};\r\n\r\nmodule.exports = Linear;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9saW5lYXIvTGluZWFyLmpzPzhkMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvbGluZWFyL0xpbmVhci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIExpbmVhciBlYXNpbmcgKG5vIHZhcmlhdGlvbikuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuTGluZWFyLkxpbmVhclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBMaW5lYXIgPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgcmV0dXJuIHY7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVhcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/linear/Linear.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/linear/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/linear/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Linear\r\n */\r\n\r\nmodule.exports = __webpack_require__(/*! ./Linear */ \"./node_modules/phaser/src/math/easing/linear/Linear.js\");\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9saW5lYXIvaW5kZXguanM/OWNlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHdFQUFVIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvbGluZWFyL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuTGluZWFyXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL0xpbmVhcicpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/linear/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quadratic/In.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quadratic/In.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quadratic ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Quadratic.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return v * v;\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFkcmF0aWMvSW4uanM/N2E0OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFkcmF0aWMvSW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBRdWFkcmF0aWMgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFkcmF0aWMuSW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgSW4gPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgcmV0dXJuIHYgKiB2O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quadratic/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quadratic/InOut.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quadratic/InOut.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quadratic ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Quadratic.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * v * v;\r\n    }\r\n    else\r\n    {\r\n        return -0.5 * (--v * (v - 2) - 1);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFkcmF0aWMvSW5PdXQuanM/NzVkOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3F1YWRyYXRpYy9Jbk91dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFF1YWRyYXRpYyBlYXNlLWluL291dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFkcmF0aWMuSW5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgSW5PdXQgPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgaWYgKCh2ICo9IDIpIDwgMSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMC41ICogdiAqIHY7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIC0wLjUgKiAoLS12ICogKHYgLSAyKSAtIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbk91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quadratic/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quadratic/Out.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quadratic/Out.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quadratic ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Quadratic.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return v * (2 - v);\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFkcmF0aWMvT3V0LmpzPzFhZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvcXVhZHJhdGljL091dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFF1YWRyYXRpYyBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFkcmF0aWMuT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIE91dCA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICByZXR1cm4gdiAqICgyIC0gdik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE91dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quadratic/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quadratic/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quadratic/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Quadratic\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/quadratic/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/quadratic/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/quadratic/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFkcmF0aWMvaW5kZXguanM/NGI4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbUJBQU8sQ0FBQyxtRUFBTTtBQUN0QixTQUFTLG1CQUFPLENBQUMscUVBQU87QUFDeEIsV0FBVyxtQkFBTyxDQUFDLHlFQUFTOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3F1YWRyYXRpYy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguRWFzaW5nLlF1YWRyYXRpY1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quadratic/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quartic/In.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quartic/In.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quartic ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Quartic.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return v * v * v * v;\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL0luLmpzPzYzMDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvcXVhcnRpYy9Jbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFF1YXJ0aWMgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFydGljLkluXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHJldHVybiB2ICogdiAqIHYgKiB2O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quartic/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quartic/InOut.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quartic/InOut.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quartic ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Quartic.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * v * v * v * v;\r\n    }\r\n    else\r\n    {\r\n        return -0.5 * ((v -= 2) * v * v * v - 2);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL0luT3V0LmpzP2RiM2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL0luT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUXVhcnRpYyBlYXNlLWluL291dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFydGljLkluT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIGlmICgodiAqPSAyKSA8IDEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIHYgKiB2ICogdiAqIHY7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIC0wLjUgKiAoKHYgLT0gMikgKiB2ICogdiAqIHYgLSAyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5PdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quartic/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quartic/Out.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quartic/Out.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quartic ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Quartic.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return 1 - (--v * v * v * v);\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL091dC5qcz82Yzk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3F1YXJ0aWMvT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUXVhcnRpYyBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWFydGljLk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBPdXQgPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgcmV0dXJuIDEgLSAoLS12ICogdiAqIHYgKiB2KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT3V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quartic/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quartic/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quartic/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Quartic\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/quartic/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/quartic/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/quartic/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL2luZGV4LmpzPzRlNzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsaUVBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLG1FQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyx1RUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWFydGljL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuUXVhcnRpY1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quartic/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quintic/In.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quintic/In.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quintic ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Quintic.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    return v * v * v * v * v;\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL0luLmpzP2E5N2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9lYXNpbmcvcXVpbnRpYy9Jbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFF1aW50aWMgZWFzZS1pbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWludGljLkluXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIHJldHVybiB2ICogdiAqIHYgKiB2ICogdjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quintic/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quintic/InOut.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quintic/InOut.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quintic ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Quintic.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if ((v *= 2) < 1)\r\n    {\r\n        return 0.5 * v * v * v * v * v;\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * ((v -= 2) * v * v * v * v + 2);\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL0luT3V0LmpzP2RkYjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL0luT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUXVpbnRpYyBlYXNlLWluL291dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWludGljLkluT3V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0d2VlbmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEluT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIGlmICgodiAqPSAyKSA8IDEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIHYgKiB2ICogdiAqIHYgKiB2O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKHYgLT0gMikgKiB2ICogdiAqIHYgKiB2ICsgMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluT3V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quintic/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quintic/Out.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quintic/Out.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Quintic ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Quintic.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    return --v * v * v * v * v + 1;\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL091dC5qcz9mNTZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3F1aW50aWMvT3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUXVpbnRpYyBlYXNlLW91dC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5RdWludGljLk91dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBPdXQgPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgcmV0dXJuIC0tdiAqIHYgKiB2ICogdiAqIHYgKyAxO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quintic/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/quintic/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/quintic/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Quintic\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/quintic/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/quintic/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/quintic/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL2luZGV4LmpzPzQzNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsaUVBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLG1FQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyx1RUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9xdWludGljL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuUXVpbnRpY1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/quintic/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/sine/In.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/sine/In.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sinusoidal ease-in.\r\n *\r\n * @function Phaser.Math.Easing.Sine.In\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar In = function (v)\r\n{\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        return 1 - Math.cos(v * Math.PI / 2);\r\n    }\r\n};\r\n\r\nmodule.exports = In;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL0luLmpzPzlhNWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3NpbmUvSW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTaW51c29pZGFsIGVhc2UtaW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuU2luZS5JblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHYgLSBUaGUgdmFsdWUgdG8gYmUgdHdlZW5lZC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHdlZW5lZCB2YWx1ZS5cclxuICovXHJcbnZhciBJbiA9IGZ1bmN0aW9uICh2KVxyXG57XHJcbiAgICBpZiAodiA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHYgPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyh2ICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/sine/In.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/sine/InOut.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/sine/InOut.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sinusoidal ease-in/out.\r\n *\r\n * @function Phaser.Math.Easing.Sine.InOut\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar InOut = function (v)\r\n{\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        return 0.5 * (1 - Math.cos(Math.PI * v));\r\n    }\r\n};\r\n\r\nmodule.exports = InOut;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL0luT3V0LmpzPzkxODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3NpbmUvSW5PdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTaW51c29pZGFsIGVhc2UtaW4vb3V0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRWFzaW5nLlNpbmUuSW5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgSW5PdXQgPSBmdW5jdGlvbiAodilcclxue1xyXG4gICAgaWYgKHYgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2ID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiB2KSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluT3V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/sine/InOut.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/sine/Out.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/sine/Out.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sinusoidal ease-out.\r\n *\r\n * @function Phaser.Math.Easing.Sine.Out\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Out = function (v)\r\n{\r\n    if (v === 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v === 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        return Math.sin(v * Math.PI / 2);\r\n    }\r\n};\r\n\r\nmodule.exports = Out;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL091dC5qcz8yNDhlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL091dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNpbnVzb2lkYWwgZWFzZS1vdXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5FYXNpbmcuU2luZS5PdXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHR3ZWVuZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgT3V0ID0gZnVuY3Rpb24gKHYpXHJcbntcclxuICAgIGlmICh2ID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodiA9PT0gMSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zaW4odiAqIE1hdGguUEkgLyAyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT3V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/sine/Out.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/sine/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/sine/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Sine\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    In: __webpack_require__(/*! ./In */ \"./node_modules/phaser/src/math/easing/sine/In.js\"),\r\n    Out: __webpack_require__(/*! ./Out */ \"./node_modules/phaser/src/math/easing/sine/Out.js\"),\r\n    InOut: __webpack_require__(/*! ./InOut */ \"./node_modules/phaser/src/math/easing/sine/InOut.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL2luZGV4LmpzP2NmNmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsOERBQU07QUFDdEIsU0FBUyxtQkFBTyxDQUFDLGdFQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyxvRUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zaW5lL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aC5FYXNpbmcuU2luZVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL0luJyksXHJcbiAgICBPdXQ6IHJlcXVpcmUoJy4vT3V0JyksXHJcbiAgICBJbk91dDogcmVxdWlyZSgnLi9Jbk91dCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/sine/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/stepped/Stepped.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/stepped/Stepped.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Stepped easing.\r\n *\r\n * @function Phaser.Math.Easing.Stepped.Stepped\r\n * @since 3.0.0\r\n *\r\n * @param {number} v - The value to be tweened.\r\n * @param {number} [steps=1] - The number of steps in the ease.\r\n *\r\n * @return {number} The tweened value.\r\n */\r\nvar Stepped = function (v, steps)\r\n{\r\n    if (steps === undefined) { steps = 1; }\r\n\r\n    if (v <= 0)\r\n    {\r\n        return 0;\r\n    }\r\n    else if (v >= 1)\r\n    {\r\n        return 1;\r\n    }\r\n    else\r\n    {\r\n        return (((steps * v) | 0) + 1) * (1 / steps);\r\n    }\r\n};\r\n\r\nmodule.exports = Stepped;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zdGVwcGVkL1N0ZXBwZWQuanM/NjMwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zdGVwcGVkL1N0ZXBwZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTdGVwcGVkIGVhc2luZy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkVhc2luZy5TdGVwcGVkLlN0ZXBwZWRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlIHRvIGJlIHR3ZWVuZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcHM9MV0gLSBUaGUgbnVtYmVyIG9mIHN0ZXBzIGluIHRoZSBlYXNlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0d2VlbmVkIHZhbHVlLlxyXG4gKi9cclxudmFyIFN0ZXBwZWQgPSBmdW5jdGlvbiAodiwgc3RlcHMpXHJcbntcclxuICAgIGlmIChzdGVwcyA9PT0gdW5kZWZpbmVkKSB7IHN0ZXBzID0gMTsgfVxyXG5cclxuICAgIGlmICh2IDw9IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2ID49IDEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICgoKHN0ZXBzICogdikgfCAwKSArIDEpICogKDEgLyBzdGVwcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN0ZXBwZWQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/stepped/Stepped.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/easing/stepped/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/math/easing/stepped/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Easing.Stepped\r\n */\r\n\r\nmodule.exports = __webpack_require__(/*! ./Stepped */ \"./node_modules/phaser/src/math/easing/stepped/Stepped.js\");\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Vhc2luZy9zdGVwcGVkL2luZGV4LmpzPzA4Y2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywyRUFBVyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZWFzaW5nL3N0ZXBwZWQvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5NYXRoLkVhc2luZy5TdGVwcGVkXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL1N0ZXBwZWQnKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/easing/stepped/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/Ceil.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/Ceil.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the fuzzy ceiling of the given value.\r\n *\r\n * @function Phaser.Math.Fuzzy.Ceil\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value.\r\n * @param {number} [epsilon=0.0001] - The epsilon.\r\n *\r\n * @return {number} The fuzzy ceiling of the value.\r\n */\r\nvar Ceil = function (value, epsilon)\r\n{\r\n    if (epsilon === undefined) { epsilon = 0.0001; }\r\n\r\n    return Math.ceil(value - epsilon);\r\n};\r\n\r\nmodule.exports = Ceil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L0NlaWwuanM/NmEwNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCOztBQUVsRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9mdXp6eS9DZWlsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBmdXp6eSBjZWlsaW5nIG9mIHRoZSBnaXZlbiB2YWx1ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZ1enp5LkNlaWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtlcHNpbG9uPTAuMDAwMV0gLSBUaGUgZXBzaWxvbi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgZnV6enkgY2VpbGluZyBvZiB0aGUgdmFsdWUuXHJcbiAqL1xyXG52YXIgQ2VpbCA9IGZ1bmN0aW9uICh2YWx1ZSwgZXBzaWxvbilcclxue1xyXG4gICAgaWYgKGVwc2lsb24gPT09IHVuZGVmaW5lZCkgeyBlcHNpbG9uID0gMC4wMDAxOyB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh2YWx1ZSAtIGVwc2lsb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZWlsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/Ceil.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/Equal.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/Equal.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check whether the given values are fuzzily equal.\r\n *\r\n * Two numbers are fuzzily equal if their difference is less than `epsilon`.\r\n *\r\n * @function Phaser.Math.Fuzzy.Equal\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The first value.\r\n * @param {number} b - The second value.\r\n * @param {number} [epsilon=0.0001] - The epsilon.\r\n *\r\n * @return {boolean} `true` if the values are fuzzily equal, otherwise `false`.\r\n */\r\nvar Equal = function (a, b, epsilon)\r\n{\r\n    if (epsilon === undefined) { epsilon = 0.0001; }\r\n\r\n    return Math.abs(a - b) < epsilon;\r\n};\r\n\r\nmodule.exports = Equal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L0VxdWFsLmpzPzk1ODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCOztBQUVsRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9mdXp6eS9FcXVhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlcyBhcmUgZnV6emlseSBlcXVhbC5cclxuICpcclxuICogVHdvIG51bWJlcnMgYXJlIGZ1enppbHkgZXF1YWwgaWYgdGhlaXIgZGlmZmVyZW5jZSBpcyBsZXNzIHRoYW4gYGVwc2lsb25gLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguRnV6enkuRXF1YWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhIC0gVGhlIGZpcnN0IHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBzZWNvbmQgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbj0wLjAwMDFdIC0gVGhlIGVwc2lsb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBmdXp6aWx5IGVxdWFsLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBFcXVhbCA9IGZ1bmN0aW9uIChhLCBiLCBlcHNpbG9uKVxyXG57XHJcbiAgICBpZiAoZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7IGVwc2lsb24gPSAwLjAwMDE7IH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDwgZXBzaWxvbjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXF1YWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/Equal.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/Floor.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/Floor.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the fuzzy floor of the given value.\r\n *\r\n * @function Phaser.Math.Fuzzy.Floor\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value.\r\n * @param {number} [epsilon=0.0001] - The epsilon.\r\n *\r\n * @return {number} The floor of the value.\r\n */\r\nvar Floor = function (value, epsilon)\r\n{\r\n    if (epsilon === undefined) { epsilon = 0.0001; }\r\n\r\n    return Math.floor(value + epsilon);\r\n};\r\n\r\nmodule.exports = Floor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L0Zsb29yLmpzPzhiMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGtCQUFrQjs7QUFFbEQ7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvZnV6enkvRmxvb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIGZ1enp5IGZsb29yIG9mIHRoZSBnaXZlbiB2YWx1ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZ1enp5LkZsb29yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbj0wLjAwMDFdIC0gVGhlIGVwc2lsb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGZsb29yIG9mIHRoZSB2YWx1ZS5cclxuICovXHJcbnZhciBGbG9vciA9IGZ1bmN0aW9uICh2YWx1ZSwgZXBzaWxvbilcclxue1xyXG4gICAgaWYgKGVwc2lsb24gPT09IHVuZGVmaW5lZCkgeyBlcHNpbG9uID0gMC4wMDAxOyB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKyBlcHNpbG9uKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmxvb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/Floor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/GreaterThan.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/GreaterThan.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check whether `a` is fuzzily greater than `b`.\r\n *\r\n * `a` is fuzzily greater than `b` if it is more than `b - epsilon`.\r\n *\r\n * @function Phaser.Math.Fuzzy.GreaterThan\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The first value.\r\n * @param {number} b - The second value.\r\n * @param {number} [epsilon=0.0001] - The epsilon.\r\n *\r\n * @return {boolean} `true` if `a` is fuzzily greater than than `b`, otherwise `false`.\r\n */\r\nvar GreaterThan = function (a, b, epsilon)\r\n{\r\n    if (epsilon === undefined) { epsilon = 0.0001; }\r\n\r\n    return a > b - epsilon;\r\n};\r\n\r\nmodule.exports = GreaterThan;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L0dyZWF0ZXJUaGFuLmpzPzFhNDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCOztBQUVsRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9mdXp6eS9HcmVhdGVyVGhhbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdoZXRoZXIgYGFgIGlzIGZ1enppbHkgZ3JlYXRlciB0aGFuIGBiYC5cclxuICpcclxuICogYGFgIGlzIGZ1enppbHkgZ3JlYXRlciB0aGFuIGBiYCBpZiBpdCBpcyBtb3JlIHRoYW4gYGIgLSBlcHNpbG9uYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZ1enp5LkdyZWF0ZXJUaGFuXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBmaXJzdCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgc2Vjb25kIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Vwc2lsb249MC4wMDAxXSAtIFRoZSBlcHNpbG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYGFgIGlzIGZ1enppbHkgZ3JlYXRlciB0aGFuIHRoYW4gYGJgLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBHcmVhdGVyVGhhbiA9IGZ1bmN0aW9uIChhLCBiLCBlcHNpbG9uKVxyXG57XHJcbiAgICBpZiAoZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7IGVwc2lsb24gPSAwLjAwMDE7IH1cclxuXHJcbiAgICByZXR1cm4gYSA+IGIgLSBlcHNpbG9uO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmVhdGVyVGhhbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/GreaterThan.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/LessThan.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/LessThan.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check whether `a` is fuzzily less than `b`.\r\n *\r\n * `a` is fuzzily less than `b` if it is less than `b + epsilon`.\r\n *\r\n * @function Phaser.Math.Fuzzy.LessThan\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The first value.\r\n * @param {number} b - The second value.\r\n * @param {number} [epsilon=0.0001] - The epsilon.\r\n *\r\n * @return {boolean} `true` if `a` is fuzzily less than `b`, otherwise `false`.\r\n */\r\nvar LessThan = function (a, b, epsilon)\r\n{\r\n    if (epsilon === undefined) { epsilon = 0.0001; }\r\n\r\n    return a < b + epsilon;\r\n};\r\n\r\nmodule.exports = LessThan;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L0xlc3NUaGFuLmpzPzg0NDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCOztBQUVsRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9mdXp6eS9MZXNzVGhhbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdoZXRoZXIgYGFgIGlzIGZ1enppbHkgbGVzcyB0aGFuIGBiYC5cclxuICpcclxuICogYGFgIGlzIGZ1enppbHkgbGVzcyB0aGFuIGBiYCBpZiBpdCBpcyBsZXNzIHRoYW4gYGIgKyBlcHNpbG9uYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkZ1enp5Lkxlc3NUaGFuXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBmaXJzdCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgc2Vjb25kIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Vwc2lsb249MC4wMDAxXSAtIFRoZSBlcHNpbG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYGFgIGlzIGZ1enppbHkgbGVzcyB0aGFuIGBiYCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgTGVzc1RoYW4gPSBmdW5jdGlvbiAoYSwgYiwgZXBzaWxvbilcclxue1xyXG4gICAgaWYgKGVwc2lsb24gPT09IHVuZGVmaW5lZCkgeyBlcHNpbG9uID0gMC4wMDAxOyB9XHJcblxyXG4gICAgcmV0dXJuIGEgPCBiICsgZXBzaWxvbjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGVzc1RoYW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/LessThan.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/fuzzy/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/fuzzy/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Fuzzy\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Ceil: __webpack_require__(/*! ./Ceil */ \"./node_modules/phaser/src/math/fuzzy/Ceil.js\"),\r\n    Equal: __webpack_require__(/*! ./Equal */ \"./node_modules/phaser/src/math/fuzzy/Equal.js\"),\r\n    Floor: __webpack_require__(/*! ./Floor */ \"./node_modules/phaser/src/math/fuzzy/Floor.js\"),\r\n    GreaterThan: __webpack_require__(/*! ./GreaterThan */ \"./node_modules/phaser/src/math/fuzzy/GreaterThan.js\"),\r\n    LessThan: __webpack_require__(/*! ./LessThan */ \"./node_modules/phaser/src/math/fuzzy/LessThan.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2Z1enp5L2luZGV4LmpzPzg2ODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMsNERBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLDhEQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQyw4REFBUztBQUM1QixpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMsb0VBQVk7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9mdXp6eS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguRnV6enlcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBDZWlsOiByZXF1aXJlKCcuL0NlaWwnKSxcclxuICAgIEVxdWFsOiByZXF1aXJlKCcuL0VxdWFsJyksXHJcbiAgICBGbG9vcjogcmVxdWlyZSgnLi9GbG9vcicpLFxyXG4gICAgR3JlYXRlclRoYW46IHJlcXVpcmUoJy4vR3JlYXRlclRoYW4nKSxcclxuICAgIExlc3NUaGFuOiByZXF1aXJlKCcuL0xlc3NUaGFuJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/fuzzy/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/index.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/math/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Math\r\n */\r\n\r\nvar PhaserMath = {\r\n\r\n    //  Collections of functions\r\n    Angle: __webpack_require__(/*! ./angle/ */ \"./node_modules/phaser/src/math/angle/index.js\"),\r\n    Distance: __webpack_require__(/*! ./distance/ */ \"./node_modules/phaser/src/math/distance/index.js\"),\r\n    Easing: __webpack_require__(/*! ./easing/ */ \"./node_modules/phaser/src/math/easing/index.js\"),\r\n    Fuzzy: __webpack_require__(/*! ./fuzzy/ */ \"./node_modules/phaser/src/math/fuzzy/index.js\"),\r\n    Interpolation: __webpack_require__(/*! ./interpolation/ */ \"./node_modules/phaser/src/math/interpolation/index.js\"),\r\n    Pow2: __webpack_require__(/*! ./pow2/ */ \"./node_modules/phaser/src/math/pow2/index.js\"),\r\n    Snap: __webpack_require__(/*! ./snap/ */ \"./node_modules/phaser/src/math/snap/index.js\"),\r\n\r\n    //  Expose the RNG Class\r\n    RandomDataGenerator: __webpack_require__(/*! ./random-data-generator/RandomDataGenerator */ \"./node_modules/phaser/src/math/random-data-generator/RandomDataGenerator.js\"),\r\n\r\n    //  Single functions\r\n    Average: __webpack_require__(/*! ./Average */ \"./node_modules/phaser/src/math/Average.js\"),\r\n    Bernstein: __webpack_require__(/*! ./Bernstein */ \"./node_modules/phaser/src/math/Bernstein.js\"),\r\n    Between: __webpack_require__(/*! ./Between */ \"./node_modules/phaser/src/math/Between.js\"),\r\n    CatmullRom: __webpack_require__(/*! ./CatmullRom */ \"./node_modules/phaser/src/math/CatmullRom.js\"),\r\n    CeilTo: __webpack_require__(/*! ./CeilTo */ \"./node_modules/phaser/src/math/CeilTo.js\"),\r\n    Clamp: __webpack_require__(/*! ./Clamp */ \"./node_modules/phaser/src/math/Clamp.js\"),\r\n    DegToRad: __webpack_require__(/*! ./DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\"),\r\n    Difference: __webpack_require__(/*! ./Difference */ \"./node_modules/phaser/src/math/Difference.js\"),\r\n    Factorial: __webpack_require__(/*! ./Factorial */ \"./node_modules/phaser/src/math/Factorial.js\"),\r\n    FloatBetween: __webpack_require__(/*! ./FloatBetween */ \"./node_modules/phaser/src/math/FloatBetween.js\"),\r\n    FloorTo: __webpack_require__(/*! ./FloorTo */ \"./node_modules/phaser/src/math/FloorTo.js\"),\r\n    FromPercent: __webpack_require__(/*! ./FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\"),\r\n    GetSpeed: __webpack_require__(/*! ./GetSpeed */ \"./node_modules/phaser/src/math/GetSpeed.js\"),\r\n    IsEven: __webpack_require__(/*! ./IsEven */ \"./node_modules/phaser/src/math/IsEven.js\"),\r\n    IsEvenStrict: __webpack_require__(/*! ./IsEvenStrict */ \"./node_modules/phaser/src/math/IsEvenStrict.js\"),\r\n    Linear: __webpack_require__(/*! ./Linear */ \"./node_modules/phaser/src/math/Linear.js\"),\r\n    MaxAdd: __webpack_require__(/*! ./MaxAdd */ \"./node_modules/phaser/src/math/MaxAdd.js\"),\r\n    MinSub: __webpack_require__(/*! ./MinSub */ \"./node_modules/phaser/src/math/MinSub.js\"),\r\n    Percent: __webpack_require__(/*! ./Percent */ \"./node_modules/phaser/src/math/Percent.js\"),\r\n    RadToDeg: __webpack_require__(/*! ./RadToDeg */ \"./node_modules/phaser/src/math/RadToDeg.js\"),\r\n    RandomXY: __webpack_require__(/*! ./RandomXY */ \"./node_modules/phaser/src/math/RandomXY.js\"),\r\n    RandomXYZ: __webpack_require__(/*! ./RandomXYZ */ \"./node_modules/phaser/src/math/RandomXYZ.js\"),\r\n    RandomXYZW: __webpack_require__(/*! ./RandomXYZW */ \"./node_modules/phaser/src/math/RandomXYZW.js\"),\r\n    Rotate: __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/math/Rotate.js\"),\r\n    RotateAround: __webpack_require__(/*! ./RotateAround */ \"./node_modules/phaser/src/math/RotateAround.js\"),\r\n    RotateAroundDistance: __webpack_require__(/*! ./RotateAroundDistance */ \"./node_modules/phaser/src/math/RotateAroundDistance.js\"),\r\n    RoundAwayFromZero: __webpack_require__(/*! ./RoundAwayFromZero */ \"./node_modules/phaser/src/math/RoundAwayFromZero.js\"),\r\n    RoundTo: __webpack_require__(/*! ./RoundTo */ \"./node_modules/phaser/src/math/RoundTo.js\"),\r\n    SinCosTableGenerator: __webpack_require__(/*! ./SinCosTableGenerator */ \"./node_modules/phaser/src/math/SinCosTableGenerator.js\"),\r\n    SmootherStep: __webpack_require__(/*! ./SmootherStep */ \"./node_modules/phaser/src/math/SmootherStep.js\"),\r\n    SmoothStep: __webpack_require__(/*! ./SmoothStep */ \"./node_modules/phaser/src/math/SmoothStep.js\"),\r\n    ToXY: __webpack_require__(/*! ./ToXY */ \"./node_modules/phaser/src/math/ToXY.js\"),\r\n    TransformXY: __webpack_require__(/*! ./TransformXY */ \"./node_modules/phaser/src/math/TransformXY.js\"),\r\n    Within: __webpack_require__(/*! ./Within */ \"./node_modules/phaser/src/math/Within.js\"),\r\n    Wrap: __webpack_require__(/*! ./Wrap */ \"./node_modules/phaser/src/math/Wrap.js\"),\r\n\r\n    //  Vector classes\r\n    Vector2: __webpack_require__(/*! ./Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\"),\r\n    Vector3: __webpack_require__(/*! ./Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\"),\r\n    Vector4: __webpack_require__(/*! ./Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\"),\r\n    Matrix3: __webpack_require__(/*! ./Matrix3 */ \"./node_modules/phaser/src/math/Matrix3.js\"),\r\n    Matrix4: __webpack_require__(/*! ./Matrix4 */ \"./node_modules/phaser/src/math/Matrix4.js\"),\r\n    Quaternion: __webpack_require__(/*! ./Quaternion */ \"./node_modules/phaser/src/math/Quaternion.js\"),\r\n    RotateVec3: __webpack_require__(/*! ./RotateVec3 */ \"./node_modules/phaser/src/math/RotateVec3.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\n\r\nPhaserMath = Extend(false, PhaserMath, CONST);\r\n\r\n//  Export it\r\n\r\nmodule.exports = PhaserMath;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2luZGV4LmpzP2U0MmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLG1CQUFPLENBQUMsK0RBQVU7QUFDN0IsY0FBYyxtQkFBTyxDQUFDLHFFQUFhO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxpRUFBVztBQUMvQixXQUFXLG1CQUFPLENBQUMsK0RBQVU7QUFDN0IsbUJBQW1CLG1CQUFPLENBQUMsK0VBQWtCO0FBQzdDLFVBQVUsbUJBQU8sQ0FBQyw2REFBUztBQUMzQixVQUFVLG1CQUFPLENBQUMsNkRBQVM7O0FBRTNCO0FBQ0EseUJBQXlCLG1CQUFPLENBQUMsZ0lBQTZDOztBQUU5RTtBQUNBLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxlQUFlLG1CQUFPLENBQUMsZ0VBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFjO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQywwREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxnRUFBYTtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3hDLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWdCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQywwREFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLDBEQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQyxnRUFBYTtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWdCO0FBQzFDLDBCQUEwQixtQkFBTyxDQUFDLHNGQUF3QjtBQUMxRCx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLDBCQUEwQixtQkFBTyxDQUFDLHNGQUF3QjtBQUMxRCxrQkFBa0IsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQywwREFBVTtBQUM5QixVQUFVLG1CQUFPLENBQUMsc0RBQVE7O0FBRTFCO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYzs7QUFFdEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuTWF0aFxyXG4gKi9cclxuXHJcbnZhciBQaGFzZXJNYXRoID0ge1xyXG5cclxuICAgIC8vICBDb2xsZWN0aW9ucyBvZiBmdW5jdGlvbnNcclxuICAgIEFuZ2xlOiByZXF1aXJlKCcuL2FuZ2xlLycpLFxyXG4gICAgRGlzdGFuY2U6IHJlcXVpcmUoJy4vZGlzdGFuY2UvJyksXHJcbiAgICBFYXNpbmc6IHJlcXVpcmUoJy4vZWFzaW5nLycpLFxyXG4gICAgRnV6enk6IHJlcXVpcmUoJy4vZnV6enkvJyksXHJcbiAgICBJbnRlcnBvbGF0aW9uOiByZXF1aXJlKCcuL2ludGVycG9sYXRpb24vJyksXHJcbiAgICBQb3cyOiByZXF1aXJlKCcuL3BvdzIvJyksXHJcbiAgICBTbmFwOiByZXF1aXJlKCcuL3NuYXAvJyksXHJcblxyXG4gICAgLy8gIEV4cG9zZSB0aGUgUk5HIENsYXNzXHJcbiAgICBSYW5kb21EYXRhR2VuZXJhdG9yOiByZXF1aXJlKCcuL3JhbmRvbS1kYXRhLWdlbmVyYXRvci9SYW5kb21EYXRhR2VuZXJhdG9yJyksXHJcblxyXG4gICAgLy8gIFNpbmdsZSBmdW5jdGlvbnNcclxuICAgIEF2ZXJhZ2U6IHJlcXVpcmUoJy4vQXZlcmFnZScpLFxyXG4gICAgQmVybnN0ZWluOiByZXF1aXJlKCcuL0Jlcm5zdGVpbicpLFxyXG4gICAgQmV0d2VlbjogcmVxdWlyZSgnLi9CZXR3ZWVuJyksXHJcbiAgICBDYXRtdWxsUm9tOiByZXF1aXJlKCcuL0NhdG11bGxSb20nKSxcclxuICAgIENlaWxUbzogcmVxdWlyZSgnLi9DZWlsVG8nKSxcclxuICAgIENsYW1wOiByZXF1aXJlKCcuL0NsYW1wJyksXHJcbiAgICBEZWdUb1JhZDogcmVxdWlyZSgnLi9EZWdUb1JhZCcpLFxyXG4gICAgRGlmZmVyZW5jZTogcmVxdWlyZSgnLi9EaWZmZXJlbmNlJyksXHJcbiAgICBGYWN0b3JpYWw6IHJlcXVpcmUoJy4vRmFjdG9yaWFsJyksXHJcbiAgICBGbG9hdEJldHdlZW46IHJlcXVpcmUoJy4vRmxvYXRCZXR3ZWVuJyksXHJcbiAgICBGbG9vclRvOiByZXF1aXJlKCcuL0Zsb29yVG8nKSxcclxuICAgIEZyb21QZXJjZW50OiByZXF1aXJlKCcuL0Zyb21QZXJjZW50JyksXHJcbiAgICBHZXRTcGVlZDogcmVxdWlyZSgnLi9HZXRTcGVlZCcpLFxyXG4gICAgSXNFdmVuOiByZXF1aXJlKCcuL0lzRXZlbicpLFxyXG4gICAgSXNFdmVuU3RyaWN0OiByZXF1aXJlKCcuL0lzRXZlblN0cmljdCcpLFxyXG4gICAgTGluZWFyOiByZXF1aXJlKCcuL0xpbmVhcicpLFxyXG4gICAgTWF4QWRkOiByZXF1aXJlKCcuL01heEFkZCcpLFxyXG4gICAgTWluU3ViOiByZXF1aXJlKCcuL01pblN1YicpLFxyXG4gICAgUGVyY2VudDogcmVxdWlyZSgnLi9QZXJjZW50JyksXHJcbiAgICBSYWRUb0RlZzogcmVxdWlyZSgnLi9SYWRUb0RlZycpLFxyXG4gICAgUmFuZG9tWFk6IHJlcXVpcmUoJy4vUmFuZG9tWFknKSxcclxuICAgIFJhbmRvbVhZWjogcmVxdWlyZSgnLi9SYW5kb21YWVonKSxcclxuICAgIFJhbmRvbVhZWlc6IHJlcXVpcmUoJy4vUmFuZG9tWFlaVycpLFxyXG4gICAgUm90YXRlOiByZXF1aXJlKCcuL1JvdGF0ZScpLFxyXG4gICAgUm90YXRlQXJvdW5kOiByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZCcpLFxyXG4gICAgUm90YXRlQXJvdW5kRGlzdGFuY2U6IHJlcXVpcmUoJy4vUm90YXRlQXJvdW5kRGlzdGFuY2UnKSxcclxuICAgIFJvdW5kQXdheUZyb21aZXJvOiByZXF1aXJlKCcuL1JvdW5kQXdheUZyb21aZXJvJyksXHJcbiAgICBSb3VuZFRvOiByZXF1aXJlKCcuL1JvdW5kVG8nKSxcclxuICAgIFNpbkNvc1RhYmxlR2VuZXJhdG9yOiByZXF1aXJlKCcuL1NpbkNvc1RhYmxlR2VuZXJhdG9yJyksXHJcbiAgICBTbW9vdGhlclN0ZXA6IHJlcXVpcmUoJy4vU21vb3RoZXJTdGVwJyksXHJcbiAgICBTbW9vdGhTdGVwOiByZXF1aXJlKCcuL1Ntb290aFN0ZXAnKSxcclxuICAgIFRvWFk6IHJlcXVpcmUoJy4vVG9YWScpLFxyXG4gICAgVHJhbnNmb3JtWFk6IHJlcXVpcmUoJy4vVHJhbnNmb3JtWFknKSxcclxuICAgIFdpdGhpbjogcmVxdWlyZSgnLi9XaXRoaW4nKSxcclxuICAgIFdyYXA6IHJlcXVpcmUoJy4vV3JhcCcpLFxyXG5cclxuICAgIC8vICBWZWN0b3IgY2xhc3Nlc1xyXG4gICAgVmVjdG9yMjogcmVxdWlyZSgnLi9WZWN0b3IyJyksXHJcbiAgICBWZWN0b3IzOiByZXF1aXJlKCcuL1ZlY3RvcjMnKSxcclxuICAgIFZlY3RvcjQ6IHJlcXVpcmUoJy4vVmVjdG9yNCcpLFxyXG4gICAgTWF0cml4MzogcmVxdWlyZSgnLi9NYXRyaXgzJyksXHJcbiAgICBNYXRyaXg0OiByZXF1aXJlKCcuL01hdHJpeDQnKSxcclxuICAgIFF1YXRlcm5pb246IHJlcXVpcmUoJy4vUXVhdGVybmlvbicpLFxyXG4gICAgUm90YXRlVmVjMzogcmVxdWlyZSgnLi9Sb3RhdGVWZWMzJylcclxuXHJcbn07XHJcblxyXG4vLyAgIE1lcmdlIGluIHRoZSBjb25zdHNcclxuXHJcblBoYXNlck1hdGggPSBFeHRlbmQoZmFsc2UsIFBoYXNlck1hdGgsIENPTlNUKTtcclxuXHJcbi8vICBFeHBvcnQgaXRcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGhhc2VyTWF0aDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/BezierInterpolation.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/BezierInterpolation.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bernstein = __webpack_require__(/*! ../Bernstein */ \"./node_modules/phaser/src/math/Bernstein.js\");\r\n\r\n/**\r\n * A bezier interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.Bezier\r\n * @since 3.0.0\r\n *\r\n * @param {number[]} v - The input array of values to interpolate between.\r\n * @param {number} k - The percentage of interpolation, between 0 and 1.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar BezierInterpolation = function (v, k)\r\n{\r\n    var b = 0;\r\n    var n = v.length - 1;\r\n\r\n    for (var i = 0; i <= n; i++)\r\n    {\r\n        b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Bernstein(n, i);\r\n    }\r\n\r\n    return b;\r\n};\r\n\r\nmodule.exports = BezierInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vQmV6aWVySW50ZXJwb2xhdGlvbi5qcz83ZGU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxpRUFBYzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9pbnRlcnBvbGF0aW9uL0JlemllckludGVycG9sYXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCZXJuc3RlaW4gPSByZXF1aXJlKCcuLi9CZXJuc3RlaW4nKTtcclxuXHJcbi8qKlxyXG4gKiBBIGJlemllciBpbnRlcnBvbGF0aW9uIG1ldGhvZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkludGVycG9sYXRpb24uQmV6aWVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSB2IC0gVGhlIGlucHV0IGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gayAtIFRoZSBwZXJjZW50YWdlIG9mIGludGVycG9sYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEJlemllckludGVycG9sYXRpb24gPSBmdW5jdGlvbiAodiwgaylcclxue1xyXG4gICAgdmFyIGIgPSAwO1xyXG4gICAgdmFyIG4gPSB2Lmxlbmd0aCAtIDE7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGIgKz0gTWF0aC5wb3coMSAtIGssIG4gLSBpKSAqIE1hdGgucG93KGssIGkpICogdltpXSAqIEJlcm5zdGVpbihuLCBpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmV6aWVySW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/BezierInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/CatmullRomInterpolation.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/CatmullRomInterpolation.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CatmullRom = __webpack_require__(/*! ../CatmullRom */ \"./node_modules/phaser/src/math/CatmullRom.js\");\r\n\r\n/**\r\n * A Catmull-Rom interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.CatmullRom\r\n * @since 3.0.0\r\n *\r\n * @param {number[]} v - The input array of values to interpolate between.\r\n * @param {number} k - The percentage of interpolation, between 0 and 1.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar CatmullRomInterpolation = function (v, k)\r\n{\r\n    var m = v.length - 1;\r\n    var f = m * k;\r\n    var i = Math.floor(f);\r\n\r\n    if (v[0] === v[m])\r\n    {\r\n        if (k < 0)\r\n        {\r\n            i = Math.floor(f = m * (1 + k));\r\n        }\r\n\r\n        return CatmullRom(f - i, v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m]);\r\n    }\r\n    else\r\n    {\r\n        if (k < 0)\r\n        {\r\n            return v[0] - (CatmullRom(-f, v[0], v[0], v[1], v[1]) - v[0]);\r\n        }\r\n\r\n        if (k > 1)\r\n        {\r\n            return v[m] - (CatmullRom(f - m, v[m], v[m], v[m - 1], v[m - 1]) - v[m]);\r\n        }\r\n\r\n        return CatmullRom(f - i, v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2]);\r\n    }\r\n};\r\n\r\nmodule.exports = CatmullRomInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vQ2F0bXVsbFJvbUludGVycG9sYXRpb24uanM/ODFlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUVBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvaW50ZXJwb2xhdGlvbi9DYXRtdWxsUm9tSW50ZXJwb2xhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENhdG11bGxSb20gPSByZXF1aXJlKCcuLi9DYXRtdWxsUm9tJyk7XHJcblxyXG4vKipcclxuICogQSBDYXRtdWxsLVJvbSBpbnRlcnBvbGF0aW9uIG1ldGhvZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkludGVycG9sYXRpb24uQ2F0bXVsbFJvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJbXX0gdiAtIFRoZSBpbnB1dCBhcnJheSBvZiB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2Vlbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IGsgLSBUaGUgcGVyY2VudGFnZSBvZiBpbnRlcnBvbGF0aW9uLCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGludGVycG9sYXRlZCB2YWx1ZS5cclxuICovXHJcbnZhciBDYXRtdWxsUm9tSW50ZXJwb2xhdGlvbiA9IGZ1bmN0aW9uICh2LCBrKVxyXG57XHJcbiAgICB2YXIgbSA9IHYubGVuZ3RoIC0gMTtcclxuICAgIHZhciBmID0gbSAqIGs7XHJcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoZik7XHJcblxyXG4gICAgaWYgKHZbMF0gPT09IHZbbV0pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGsgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaSA9IE1hdGguZmxvb3IoZiA9IG0gKiAoMSArIGspKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBDYXRtdWxsUm9tKGYgLSBpLCB2WyhpIC0gMSArIG0pICUgbV0sIHZbaV0sIHZbKGkgKyAxKSAlIG1dLCB2WyhpICsgMikgJSBtXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGsgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZbMF0gLSAoQ2F0bXVsbFJvbSgtZiwgdlswXSwgdlswXSwgdlsxXSwgdlsxXSkgLSB2WzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrID4gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB2W21dIC0gKENhdG11bGxSb20oZiAtIG0sIHZbbV0sIHZbbV0sIHZbbSAtIDFdLCB2W20gLSAxXSkgLSB2W21dKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBDYXRtdWxsUm9tKGYgLSBpLCB2W2kgPyBpIC0gMSA6IDBdLCB2W2ldLCB2W20gPCBpICsgMSA/IG0gOiBpICsgMV0sIHZbbSA8IGkgKyAyID8gbSA6IGkgKyAyXSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhdG11bGxSb21JbnRlcnBvbGF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/CatmullRomInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P0 (t, p)\r\n{\r\n    var k = 1 - t;\r\n\r\n    return k * k * k * p;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P1 (t, p)\r\n{\r\n    var k = 1 - t;\r\n\r\n    return 3 * k * k * t * p;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P2 (t, p)\r\n{\r\n    return 3 * (1 - t) * t * t * p;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P3 (t, p)\r\n{\r\n    return t * t * t * p;\r\n}\r\n\r\n/**\r\n * A cubic bezier interpolation method.\r\n *\r\n * https://medium.com/@adrian_cooney/bezier-interpolation-13b68563313a\r\n *\r\n * @function Phaser.Math.Interpolation.CubicBezier\r\n * @since 3.0.0\r\n *\r\n * @param {number} t - The percentage of interpolation, between 0 and 1.\r\n * @param {number} p0 - The start point.\r\n * @param {number} p1 - The first control point.\r\n * @param {number} p2 - The second control point.\r\n * @param {number} p3 - The end point.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar CubicBezierInterpolation = function (t, p0, p1, p2, p3)\r\n{\r\n    return P0(t, p0) + P1(t, p1) + P2(t, p2) + P3(t, p3);\r\n};\r\n\r\nmodule.exports = CubicBezierInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vQ3ViaWNCZXppZXJJbnRlcnBvbGF0aW9uLmpzPzI3YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vQ3ViaWNCZXppZXJJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gUDAgKHQsIHApXHJcbntcclxuICAgIHZhciBrID0gMSAtIHQ7XHJcblxyXG4gICAgcmV0dXJuIGsgKiBrICogayAqIHA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5mdW5jdGlvbiBQMSAodCwgcClcclxue1xyXG4gICAgdmFyIGsgPSAxIC0gdDtcclxuXHJcbiAgICByZXR1cm4gMyAqIGsgKiBrICogdCAqIHA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5mdW5jdGlvbiBQMiAodCwgcClcclxue1xyXG4gICAgcmV0dXJuIDMgKiAoMSAtIHQpICogdCAqIHQgKiBwO1xyXG59XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gUDMgKHQsIHApXHJcbntcclxuICAgIHJldHVybiB0ICogdCAqIHQgKiBwO1xyXG59XHJcblxyXG4vKipcclxuICogQSBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiBtZXRob2QuXHJcbiAqXHJcbiAqIGh0dHBzOi8vbWVkaXVtLmNvbS9AYWRyaWFuX2Nvb25leS9iZXppZXItaW50ZXJwb2xhdGlvbi0xM2I2ODU2MzMxM2FcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkludGVycG9sYXRpb24uQ3ViaWNCZXppZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIHBlcmNlbnRhZ2Ugb2YgaW50ZXJwb2xhdGlvbiwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcDAgLSBUaGUgc3RhcnQgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwMSAtIFRoZSBmaXJzdCBjb250cm9sIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcDIgLSBUaGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwMyAtIFRoZSBlbmQgcG9pbnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGludGVycG9sYXRlZCB2YWx1ZS5cclxuICovXHJcbnZhciBDdWJpY0JlemllckludGVycG9sYXRpb24gPSBmdW5jdGlvbiAodCwgcDAsIHAxLCBwMiwgcDMpXHJcbntcclxuICAgIHJldHVybiBQMCh0LCBwMCkgKyBQMSh0LCBwMSkgKyBQMih0LCBwMikgKyBQMyh0LCBwMyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEN1YmljQmV6aWVySW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/LinearInterpolation.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/LinearInterpolation.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Linear = __webpack_require__(/*! ../Linear */ \"./node_modules/phaser/src/math/Linear.js\");\r\n\r\n/**\r\n * A linear interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.Linear\r\n * @since 3.0.0\r\n * @see {@link https://en.wikipedia.org/wiki/Linear_interpolation}\r\n *\r\n * @param {number[]} v - The input array of values to interpolate between.\r\n * @param {!number} k - The percentage of interpolation, between 0 and 1.\r\n *\r\n * @return {!number} The interpolated value.\r\n */\r\nvar LinearInterpolation = function (v, k)\r\n{\r\n    var m = v.length - 1;\r\n    var f = m * k;\r\n    var i = Math.floor(f);\r\n\r\n    if (k < 0)\r\n    {\r\n        return Linear(v[0], v[1], f);\r\n    }\r\n    else if (k > 1)\r\n    {\r\n        return Linear(v[m], v[m - 1], m - f);\r\n    }\r\n    else\r\n    {\r\n        return Linear(v[i], v[(i + 1 > m) ? m : i + 1], f - i);\r\n    }\r\n};\r\n\r\nmodule.exports = LinearInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vTGluZWFySW50ZXJwb2xhdGlvbi5qcz9lY2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsMkRBQVc7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvaW50ZXJwb2xhdGlvbi9MaW5lYXJJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZWFyID0gcmVxdWlyZSgnLi4vTGluZWFyJyk7XHJcblxyXG4vKipcclxuICogQSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBtZXRob2QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5JbnRlcnBvbGF0aW9uLkxpbmVhclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2ludGVycG9sYXRpb259XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IHYgLSBUaGUgaW5wdXQgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIGJldHdlZW4uXHJcbiAqIEBwYXJhbSB7IW51bWJlcn0gayAtIFRoZSBwZXJjZW50YWdlIG9mIGludGVycG9sYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICpcclxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIGludGVycG9sYXRlZCB2YWx1ZS5cclxuICovXHJcbnZhciBMaW5lYXJJbnRlcnBvbGF0aW9uID0gZnVuY3Rpb24gKHYsIGspXHJcbntcclxuICAgIHZhciBtID0gdi5sZW5ndGggLSAxO1xyXG4gICAgdmFyIGYgPSBtICogaztcclxuICAgIHZhciBpID0gTWF0aC5mbG9vcihmKTtcclxuXHJcbiAgICBpZiAoayA8IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIExpbmVhcih2WzBdLCB2WzFdLCBmKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGsgPiAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBMaW5lYXIodlttXSwgdlttIC0gMV0sIG0gLSBmKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTGluZWFyKHZbaV0sIHZbKGkgKyAxID4gbSkgPyBtIDogaSArIDFdLCBmIC0gaSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVhckludGVycG9sYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/LinearInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P0 (t, p)\r\n{\r\n    var k = 1 - t;\r\n\r\n    return k * k * p;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P1 (t, p)\r\n{\r\n    return 2 * (1 - t) * t * p;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction P2 (t, p)\r\n{\r\n    return t * t * p;\r\n}\r\n\r\n// https://github.com/mrdoob/three.js/blob/master/src/extras/core/Interpolations.js\r\n\r\n/**\r\n * A quadratic bezier interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.QuadraticBezier\r\n * @since 3.2.0\r\n *\r\n * @param {number} t - The percentage of interpolation, between 0 and 1.\r\n * @param {number} p0 - The start point.\r\n * @param {number} p1 - The control point.\r\n * @param {number} p2 - The end point.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar QuadraticBezierInterpolation = function (t, p0, p1, p2)\r\n{\r\n    return P0(t, p0) + P1(t, p1) + P2(t, p2);\r\n};\r\n\r\nmodule.exports = QuadraticBezierInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vUXVhZHJhdGljQmV6aWVySW50ZXJwb2xhdGlvbi5qcz80OGU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvaW50ZXJwb2xhdGlvbi9RdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gUDAgKHQsIHApXHJcbntcclxuICAgIHZhciBrID0gMSAtIHQ7XHJcblxyXG4gICAgcmV0dXJuIGsgKiBrICogcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIFAxICh0LCBwKVxyXG57XHJcbiAgICByZXR1cm4gMiAqICgxIC0gdCkgKiB0ICogcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIFAyICh0LCBwKVxyXG57XHJcbiAgICByZXR1cm4gdCAqIHQgKiBwO1xyXG59XHJcblxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL2Jsb2IvbWFzdGVyL3NyYy9leHRyYXMvY29yZS9JbnRlcnBvbGF0aW9ucy5qc1xyXG5cclxuLyoqXHJcbiAqIEEgcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uIG1ldGhvZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5NYXRoLkludGVycG9sYXRpb24uUXVhZHJhdGljQmV6aWVyXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBwZXJjZW50YWdlIG9mIGludGVycG9sYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHAwIC0gVGhlIHN0YXJ0IHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcDEgLSBUaGUgY29udHJvbCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHAyIC0gVGhlIGVuZCBwb2ludC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIFF1YWRyYXRpY0JlemllckludGVycG9sYXRpb24gPSBmdW5jdGlvbiAodCwgcDAsIHAxLCBwMilcclxue1xyXG4gICAgcmV0dXJuIFAwKHQsIHAwKSArIFAxKHQsIHAxKSArIFAyKHQsIHAyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVhZHJhdGljQmV6aWVySW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SmoothStep = __webpack_require__(/*! ../SmoothStep */ \"./node_modules/phaser/src/math/SmoothStep.js\");\r\n\r\n/**\r\n * A Smooth Step interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.SmoothStep\r\n * @since 3.9.0\r\n * @see {@link https://en.wikipedia.org/wiki/Smoothstep}\r\n *\r\n * @param {number} t - The percentage of interpolation, between 0 and 1.\r\n * @param {number} min - The minimum value, also known as the 'left edge', assumed smaller than the 'right edge'.\r\n * @param {number} max - The maximum value, also known as the 'right edge', assumed greater than the 'left edge'.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar SmoothStepInterpolation = function (t, min, max)\r\n{\r\n    return min + (max - min) * SmoothStep(t, 0, 1);\r\n};\r\n\r\nmodule.exports = SmoothStepInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vU21vb3RoU3RlcEludGVycG9sYXRpb24uanM/ZDYyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUVBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9pbnRlcnBvbGF0aW9uL1Ntb290aFN0ZXBJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU21vb3RoU3RlcCA9IHJlcXVpcmUoJy4uL1Ntb290aFN0ZXAnKTtcclxuXHJcbi8qKlxyXG4gKiBBIFNtb290aCBTdGVwIGludGVycG9sYXRpb24gbWV0aG9kLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguSW50ZXJwb2xhdGlvbi5TbW9vdGhTdGVwXHJcbiAqIEBzaW5jZSAzLjkuMFxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwfVxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBwZXJjZW50YWdlIG9mIGludGVycG9sYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAnbGVmdCBlZGdlJywgYXNzdW1lZCBzbWFsbGVyIHRoYW4gdGhlICdyaWdodCBlZGdlJy5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAncmlnaHQgZWRnZScsIGFzc3VtZWQgZ3JlYXRlciB0aGFuIHRoZSAnbGVmdCBlZGdlJy5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uID0gZnVuY3Rpb24gKHQsIG1pbiwgbWF4KVxyXG57XHJcbiAgICByZXR1cm4gbWluICsgKG1heCAtIG1pbikgKiBTbW9vdGhTdGVwKHQsIDAsIDEpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbW9vdGhTdGVwSW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/SmootherStepInterpolation.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/SmootherStepInterpolation.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SmootherStep = __webpack_require__(/*! ../SmootherStep */ \"./node_modules/phaser/src/math/SmootherStep.js\");\r\n\r\n/**\r\n * A Smoother Step interpolation method.\r\n *\r\n * @function Phaser.Math.Interpolation.SmootherStep\r\n * @since 3.9.0\r\n * @see {@link https://en.wikipedia.org/wiki/Smoothstep#Variations}\r\n *\r\n * @param {number} t - The percentage of interpolation, between 0 and 1.\r\n * @param {number} min - The minimum value, also known as the 'left edge', assumed smaller than the 'right edge'.\r\n * @param {number} max - The maximum value, also known as the 'right edge', assumed greater than the 'left edge'.\r\n *\r\n * @return {number} The interpolated value.\r\n */\r\nvar SmootherStepInterpolation = function (t, min, max)\r\n{\r\n    return min + (max - min) * SmootherStep(t, 0, 1);\r\n};\r\n\r\nmodule.exports = SmootherStepInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vU21vb3RoZXJTdGVwSW50ZXJwb2xhdGlvbi5qcz81NTQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyx1RUFBaUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9pbnRlcnBvbGF0aW9uL1Ntb290aGVyU3RlcEludGVycG9sYXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTbW9vdGhlclN0ZXAgPSByZXF1aXJlKCcuLi9TbW9vdGhlclN0ZXAnKTtcclxuXHJcbi8qKlxyXG4gKiBBIFNtb290aGVyIFN0ZXAgaW50ZXJwb2xhdGlvbiBtZXRob2QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5JbnRlcnBvbGF0aW9uLlNtb290aGVyU3RlcFxyXG4gKiBAc2luY2UgMy45LjBcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU21vb3Roc3RlcCNWYXJpYXRpb25zfVxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBwZXJjZW50YWdlIG9mIGludGVycG9sYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAnbGVmdCBlZGdlJywgYXNzdW1lZCBzbWFsbGVyIHRoYW4gdGhlICdyaWdodCBlZGdlJy5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlLCBhbHNvIGtub3duIGFzIHRoZSAncmlnaHQgZWRnZScsIGFzc3VtZWQgZ3JlYXRlciB0aGFuIHRoZSAnbGVmdCBlZGdlJy5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIFNtb290aGVyU3RlcEludGVycG9sYXRpb24gPSBmdW5jdGlvbiAodCwgbWluLCBtYXgpXHJcbntcclxuICAgIHJldHVybiBtaW4gKyAobWF4IC0gbWluKSAqIFNtb290aGVyU3RlcCh0LCAwLCAxKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU21vb3RoZXJTdGVwSW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/SmootherStepInterpolation.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/interpolation/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/math/interpolation/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Interpolation\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Bezier: __webpack_require__(/*! ./BezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/BezierInterpolation.js\"),\r\n    CatmullRom: __webpack_require__(/*! ./CatmullRomInterpolation */ \"./node_modules/phaser/src/math/interpolation/CatmullRomInterpolation.js\"),\r\n    CubicBezier: __webpack_require__(/*! ./CubicBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js\"),\r\n    Linear: __webpack_require__(/*! ./LinearInterpolation */ \"./node_modules/phaser/src/math/interpolation/LinearInterpolation.js\"),\r\n    QuadraticBezier: __webpack_require__(/*! ./QuadraticBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js\"),\r\n    SmoothStep: __webpack_require__(/*! ./SmoothStepInterpolation */ \"./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js\"),\r\n    SmootherStep: __webpack_require__(/*! ./SmootherStepInterpolation */ \"./node_modules/phaser/src/math/interpolation/SmootherStepInterpolation.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL2ludGVycG9sYXRpb24vaW5kZXguanM/ZGE1YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxrR0FBdUI7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsMEdBQTJCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLDRHQUE0QjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsa0dBQXVCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLG9IQUFnQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQywwR0FBMkI7QUFDbkQsa0JBQWtCLG1CQUFPLENBQUMsOEdBQTZCOztBQUV2RCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvaW50ZXJwb2xhdGlvbi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguSW50ZXJwb2xhdGlvblxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJlemllcjogcmVxdWlyZSgnLi9CZXppZXJJbnRlcnBvbGF0aW9uJyksXHJcbiAgICBDYXRtdWxsUm9tOiByZXF1aXJlKCcuL0NhdG11bGxSb21JbnRlcnBvbGF0aW9uJyksXHJcbiAgICBDdWJpY0JlemllcjogcmVxdWlyZSgnLi9DdWJpY0JlemllckludGVycG9sYXRpb24nKSxcclxuICAgIExpbmVhcjogcmVxdWlyZSgnLi9MaW5lYXJJbnRlcnBvbGF0aW9uJyksXHJcbiAgICBRdWFkcmF0aWNCZXppZXI6IHJlcXVpcmUoJy4vUXVhZHJhdGljQmV6aWVySW50ZXJwb2xhdGlvbicpLFxyXG4gICAgU21vb3RoU3RlcDogcmVxdWlyZSgnLi9TbW9vdGhTdGVwSW50ZXJwb2xhdGlvbicpLFxyXG4gICAgU21vb3RoZXJTdGVwOiByZXF1aXJlKCcuL1Ntb290aGVyU3RlcEludGVycG9sYXRpb24nKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/interpolation/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the nearest power of 2 to the given `value`.\r\n *\r\n * @function Phaser.Math.Pow2.GetNext\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value.\r\n *\r\n * @return {integer} The nearest power of 2 to `value`.\r\n */\r\nvar GetPowerOfTwo = function (value)\r\n{\r\n    var index = Math.log(value) / 0.6931471805599453;\r\n\r\n    return (1 << Math.ceil(index));\r\n};\r\n\r\nmodule.exports = GetPowerOfTwo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3BvdzIvR2V0UG93ZXJPZlR3by5qcz84ZTNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvcG93Mi9HZXRQb3dlck9mVHdvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBwb3dlciBvZiAyIHRvIHRoZSBnaXZlbiBgdmFsdWVgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUG93Mi5HZXROZXh0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBuZWFyZXN0IHBvd2VyIG9mIDIgdG8gYHZhbHVlYC5cclxuICovXHJcbnZhciBHZXRQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKVxyXG57XHJcbiAgICB2YXIgaW5kZXggPSBNYXRoLmxvZyh2YWx1ZSkgLyAwLjY5MzE0NzE4MDU1OTk0NTM7XHJcblxyXG4gICAgcmV0dXJuICgxIDw8IE1hdGguY2VpbChpbmRleCkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb3dlck9mVHdvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if the given `width` and `height` are a power of two.\r\n * Useful for checking texture dimensions.\r\n *\r\n * @function Phaser.Math.Pow2.IsSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width.\r\n * @param {number} height - The height.\r\n *\r\n * @return {boolean} `true` if `width` and `height` are a power of two, otherwise `false`.\r\n */\r\nvar IsSizePowerOfTwo = function (width, height)\r\n{\r\n    return (width > 0 && (width & (width - 1)) === 0 && height > 0 && (height & (height - 1)) === 0);\r\n};\r\n\r\nmodule.exports = IsSizePowerOfTwo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3BvdzIvSXNTaXplUG93ZXJPZlR3by5qcz80ODliIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvcG93Mi9Jc1NpemVQb3dlck9mVHdvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgYSBwb3dlciBvZiB0d28uXHJcbiAqIFVzZWZ1bCBmb3IgY2hlY2tpbmcgdGV4dHVyZSBkaW1lbnNpb25zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUG93Mi5Jc1NpemVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgYSBwb3dlciBvZiB0d28sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIElzU2l6ZVBvd2VyT2ZUd28gPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxue1xyXG4gICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc1NpemVQb3dlck9mVHdvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/pow2/IsValuePowerOfTwo.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/math/pow2/IsValuePowerOfTwo.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tests the value and returns `true` if it is a power of two.\r\n *\r\n * @function Phaser.Math.Pow2.IsValue\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to check if it's a power of two.\r\n *\r\n * @return {boolean} Returns `true` if `value` is a power of two, otherwise `false`.\r\n */\r\nvar IsValuePowerOfTwo = function (value)\r\n{\r\n    return (value > 0 && (value & (value - 1)) === 0);\r\n};\r\n\r\nmodule.exports = IsValuePowerOfTwo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3BvdzIvSXNWYWx1ZVBvd2VyT2ZUd28uanM/YmMxNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3BvdzIvSXNWYWx1ZVBvd2VyT2ZUd28uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUZXN0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgcG93ZXIgb2YgdHdvLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguUG93Mi5Jc1ZhbHVlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2sgaWYgaXQncyBhIHBvd2VyIG9mIHR3by5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBvd2VyIG9mIHR3bywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgSXNWYWx1ZVBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpXHJcbntcclxuICAgIHJldHVybiAodmFsdWUgPiAwICYmICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PT0gMCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzVmFsdWVQb3dlck9mVHdvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/pow2/IsValuePowerOfTwo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/pow2/index.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/pow2/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Pow2\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    GetNext: __webpack_require__(/*! ./GetPowerOfTwo */ \"./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js\"),\r\n    IsSize: __webpack_require__(/*! ./IsSizePowerOfTwo */ \"./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js\"),\r\n    IsValue: __webpack_require__(/*! ./IsValuePowerOfTwo */ \"./node_modules/phaser/src/math/pow2/IsValuePowerOfTwo.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3BvdzIvaW5kZXguanM/ZTRkNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyw2RUFBaUI7QUFDdEMsWUFBWSxtQkFBTyxDQUFDLG1GQUFvQjtBQUN4QyxhQUFhLG1CQUFPLENBQUMscUZBQXFCOztBQUUxQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvcG93Mi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguUG93MlxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEdldE5leHQ6IHJlcXVpcmUoJy4vR2V0UG93ZXJPZlR3bycpLFxyXG4gICAgSXNTaXplOiByZXF1aXJlKCcuL0lzU2l6ZVBvd2VyT2ZUd28nKSxcclxuICAgIElzVmFsdWU6IHJlcXVpcmUoJy4vSXNWYWx1ZVBvd2VyT2ZUd28nKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/pow2/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/random-data-generator/RandomDataGenerator.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/math/random-data-generator/RandomDataGenerator.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A seeded Random Data Generator.\r\n * \r\n * Access via `Phaser.Math.RND` which is an instance of this class pre-defined\r\n * by Phaser. Or, create your own instance to use as you require.\r\n * \r\n * The `Math.RND` generator is seeded by the Game Config property value `seed`.\r\n * If no such config property exists, a random number is used.\r\n * \r\n * If you create your own instance of this class you should provide a seed for it.\r\n * If no seed is given it will use a 'random' one based on Date.now.\r\n *\r\n * @class RandomDataGenerator\r\n * @memberof Phaser.Math\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} [seeds] - The seeds to use for the random number generator.\r\n */\r\nvar RandomDataGenerator = new Class({\r\n\r\n    initialize:\r\n\r\n    function RandomDataGenerator (seeds)\r\n    {\r\n        if (seeds === undefined) { seeds = [ (Date.now() * Math.random()).toString() ]; }\r\n\r\n        /**\r\n         * Internal var.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#c\r\n         * @type {number}\r\n         * @default 1\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.c = 1;\r\n\r\n        /**\r\n         * Internal var.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#s0\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.s0 = 0;\r\n\r\n        /**\r\n         * Internal var.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#s1\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.s1 = 0;\r\n\r\n        /**\r\n         * Internal var.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#s2\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.s2 = 0;\r\n\r\n        /**\r\n         * Internal var.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#n\r\n         * @type {number}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.2.0\r\n         */\r\n        this.n = 0;\r\n\r\n        /**\r\n         * Signs to choose from.\r\n         *\r\n         * @name Phaser.Math.RandomDataGenerator#signs\r\n         * @type {number[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.signs = [ -1, 1 ];\r\n\r\n        if (seeds)\r\n        {\r\n            this.init(seeds);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Private random helper.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#rnd\r\n     * @since 3.0.0\r\n     * @private\r\n     *\r\n     * @return {number} A random number.\r\n     */\r\n    rnd: function ()\r\n    {\r\n        var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32\r\n\r\n        this.c = t | 0;\r\n        this.s0 = this.s1;\r\n        this.s1 = this.s2;\r\n        this.s2 = t - this.c;\r\n\r\n        return this.s2;\r\n    },\r\n\r\n    /**\r\n     * Internal method that creates a seed hash.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#hash\r\n     * @since 3.0.0\r\n     * @private\r\n     *\r\n     * @param {string} data - The value to hash.\r\n     *\r\n     * @return {number} The hashed value.\r\n     */\r\n    hash: function (data)\r\n    {\r\n        var h;\r\n        var n = this.n;\r\n\r\n        data = data.toString();\r\n\r\n        for (var i = 0; i < data.length; i++)\r\n        {\r\n            n += data.charCodeAt(i);\r\n            h = 0.02519603282416938 * n;\r\n            n = h >>> 0;\r\n            h -= n;\r\n            h *= n;\r\n            n = h >>> 0;\r\n            h -= n;\r\n            n += h * 0x100000000;// 2^32\r\n        }\r\n\r\n        this.n = n;\r\n\r\n        return (n >>> 0) * 2.3283064365386963e-10;// 2^-32\r\n    },\r\n\r\n    /**\r\n     * Initialize the state of the random data generator.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#init\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|string[])} seeds - The seeds to initialize the random data generator with.\r\n     */\r\n    init: function (seeds)\r\n    {\r\n        if (typeof seeds === 'string')\r\n        {\r\n            this.state(seeds);\r\n        }\r\n        else\r\n        {\r\n            this.sow(seeds);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Reset the seed of the random data generator.\r\n     *\r\n     * _Note_: the seed array is only processed up to the first `undefined` (or `null`) value, should such be present.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#sow\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string[]} seeds - The array of seeds: the `toString()` of each value is used.\r\n     */\r\n    sow: function (seeds)\r\n    {\r\n        // Always reset to default seed\r\n        this.n = 0xefc8249d;\r\n        this.s0 = this.hash(' ');\r\n        this.s1 = this.hash(' ');\r\n        this.s2 = this.hash(' ');\r\n        this.c = 1;\r\n\r\n        if (!seeds)\r\n        {\r\n            return;\r\n        }\r\n\r\n        // Apply any seeds\r\n        for (var i = 0; i < seeds.length && (seeds[i] != null); i++)\r\n        {\r\n            var seed = seeds[i];\r\n\r\n            this.s0 -= this.hash(seed);\r\n            this.s0 += ~~(this.s0 < 0);\r\n            this.s1 -= this.hash(seed);\r\n            this.s1 += ~~(this.s1 < 0);\r\n            this.s2 -= this.hash(seed);\r\n            this.s2 += ~~(this.s2 < 0);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns a random integer between 0 and 2^32.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#integer\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random integer between 0 and 2^32.\r\n     */\r\n    integer: function ()\r\n    {\r\n        // 2^32\r\n        return this.rnd() * 0x100000000;\r\n    },\r\n\r\n    /**\r\n     * Returns a random real number between 0 and 1.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#frac\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random real number between 0 and 1.\r\n     */\r\n    frac: function ()\r\n    {\r\n        // 2^-53\r\n        return this.rnd() + (this.rnd() * 0x200000 | 0) * 1.1102230246251565e-16;\r\n    },\r\n\r\n    /**\r\n     * Returns a random real number between 0 and 2^32.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#real\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random real number between 0 and 2^32.\r\n     */\r\n    real: function ()\r\n    {\r\n        return this.integer() + this.frac();\r\n    },\r\n\r\n    /**\r\n     * Returns a random integer between and including min and max.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#integerInRange\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} min - The minimum value in the range.\r\n     * @param {number} max - The maximum value in the range.\r\n     *\r\n     * @return {number} A random number between min and max.\r\n     */\r\n    integerInRange: function (min, max)\r\n    {\r\n        return Math.floor(this.realInRange(0, max - min + 1) + min);\r\n    },\r\n\r\n    /**\r\n     * Returns a random integer between and including min and max.\r\n     * This method is an alias for RandomDataGenerator.integerInRange.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#between\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} min - The minimum value in the range.\r\n     * @param {number} max - The maximum value in the range.\r\n     *\r\n     * @return {number} A random number between min and max.\r\n     */\r\n    between: function (min, max)\r\n    {\r\n        return Math.floor(this.realInRange(0, max - min + 1) + min);\r\n    },\r\n\r\n    /**\r\n     * Returns a random real number between min and max.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#realInRange\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} min - The minimum value in the range.\r\n     * @param {number} max - The maximum value in the range.\r\n     *\r\n     * @return {number} A random number between min and max.\r\n     */\r\n    realInRange: function (min, max)\r\n    {\r\n        return this.frac() * (max - min) + min;\r\n    },\r\n\r\n    /**\r\n     * Returns a random real number between -1 and 1.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#normal\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random real number between -1 and 1.\r\n     */\r\n    normal: function ()\r\n    {\r\n        return 1 - (2 * this.frac());\r\n    },\r\n\r\n    /**\r\n     * Returns a valid RFC4122 version4 ID hex string from https://gist.github.com/1308368\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#uuid\r\n     * @since 3.0.0\r\n     *\r\n     * @return {string} A valid RFC4122 version4 ID hex string\r\n     */\r\n    uuid: function ()\r\n    {\r\n        var a = '';\r\n        var b = '';\r\n\r\n        for (b = a = ''; a++ < 36; b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-')\r\n        {\r\n            // eslint-disable-next-line no-empty\r\n        }\r\n\r\n        return b;\r\n    },\r\n\r\n    /**\r\n     * Returns a random element from within the given array.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#pick\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} array - The array to pick a random element from.\r\n     *\r\n     * @return {*} A random member of the array.\r\n     */\r\n    pick: function (array)\r\n    {\r\n        return array[this.integerInRange(0, array.length - 1)];\r\n    },\r\n\r\n    /**\r\n     * Returns a sign to be used with multiplication operator.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#sign\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} -1 or +1.\r\n     */\r\n    sign: function ()\r\n    {\r\n        return this.pick(this.signs);\r\n    },\r\n\r\n    /**\r\n     * Returns a random element from within the given array, favoring the earlier entries.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#weightedPick\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} array - The array to pick a random element from.\r\n     *\r\n     * @return {*} A random member of the array.\r\n     */\r\n    weightedPick: function (array)\r\n    {\r\n        return array[~~(Math.pow(this.frac(), 2) * (array.length - 1) + 0.5)];\r\n    },\r\n\r\n    /**\r\n     * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#timestamp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} min - The minimum value in the range.\r\n     * @param {number} max - The maximum value in the range.\r\n     *\r\n     * @return {number} A random timestamp between min and max.\r\n     */\r\n    timestamp: function (min, max)\r\n    {\r\n        return this.realInRange(min || 946684800000, max || 1577862000000);\r\n    },\r\n\r\n    /**\r\n     * Returns a random angle between -180 and 180.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#angle\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random number between -180 and 180.\r\n     */\r\n    angle: function ()\r\n    {\r\n        return this.integerInRange(-180, 180);\r\n    },\r\n\r\n    /**\r\n     * Returns a random rotation in radians, between -3.141 and 3.141\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#rotation\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A random number between -3.141 and 3.141\r\n     */\r\n    rotation: function ()\r\n    {\r\n        return this.realInRange(-3.1415926, 3.1415926);\r\n    },\r\n\r\n    /**\r\n     * Gets or Sets the state of the generator. This allows you to retain the values\r\n     * that the generator is using between games, i.e. in a game save file.\r\n     *\r\n     * To seed this generator with a previously saved state you can pass it as the\r\n     * `seed` value in your game config, or call this method directly after Phaser has booted.\r\n     *\r\n     * Call this method with no parameters to return the current state.\r\n     *\r\n     * If providing a state it should match the same format that this method\r\n     * returns, which is a string with a header `!rnd` followed by the `c`,\r\n     * `s0`, `s1` and `s2` values respectively, each comma-delimited.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#state\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [state] - Generator state to be set.\r\n     *\r\n     * @return {string} The current state of the generator.\r\n     */\r\n    state: function (state)\r\n    {\r\n        if (typeof state === 'string' && state.match(/^!rnd/))\r\n        {\r\n            state = state.split(',');\r\n\r\n            this.c = parseFloat(state[1]);\r\n            this.s0 = parseFloat(state[2]);\r\n            this.s1 = parseFloat(state[3]);\r\n            this.s2 = parseFloat(state[4]);\r\n        }\r\n\r\n        return [ '!rnd', this.c, this.s0, this.s1, this.s2 ].join(',');\r\n    },\r\n\r\n    /**\r\n     * Shuffles the given array, using the current seed.\r\n     *\r\n     * @method Phaser.Math.RandomDataGenerator#shuffle\r\n     * @since 3.7.0\r\n     *\r\n     * @param {array} [array] - The array to be shuffled.\r\n     *\r\n     * @return {array} The shuffled array.\r\n     */\r\n    shuffle: function (array)\r\n    {\r\n        var len = array.length - 1;\r\n\r\n        for (var i = len; i > 0; i--)\r\n        {\r\n            var randomIndex = Math.floor(this.frac() * (i + 1));\r\n            var itemAtIndex = array[randomIndex];\r\n\r\n            array[randomIndex] = array[i];\r\n            array[i] = itemAtIndex;\r\n        }\r\n\r\n        return array;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = RandomDataGenerator;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3JhbmRvbS1kYXRhLWdlbmVyYXRvci9SYW5kb21EYXRhR2VuZXJhdG9yLmpzPzBjNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxxREFBcUQ7O0FBRXZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTs7QUFFQSxrREFBa0Q7QUFDbEQsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qix3Q0FBd0M7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLFVBQVU7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3JhbmRvbS1kYXRhLWdlbmVyYXRvci9SYW5kb21EYXRhR2VuZXJhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzZWVkZWQgUmFuZG9tIERhdGEgR2VuZXJhdG9yLlxyXG4gKiBcclxuICogQWNjZXNzIHZpYSBgUGhhc2VyLk1hdGguUk5EYCB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHByZS1kZWZpbmVkXHJcbiAqIGJ5IFBoYXNlci4gT3IsIGNyZWF0ZSB5b3VyIG93biBpbnN0YW5jZSB0byB1c2UgYXMgeW91IHJlcXVpcmUuXHJcbiAqIFxyXG4gKiBUaGUgYE1hdGguUk5EYCBnZW5lcmF0b3IgaXMgc2VlZGVkIGJ5IHRoZSBHYW1lIENvbmZpZyBwcm9wZXJ0eSB2YWx1ZSBgc2VlZGAuXHJcbiAqIElmIG5vIHN1Y2ggY29uZmlnIHByb3BlcnR5IGV4aXN0cywgYSByYW5kb20gbnVtYmVyIGlzIHVzZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY3JlYXRlIHlvdXIgb3duIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgeW91IHNob3VsZCBwcm92aWRlIGEgc2VlZCBmb3IgaXQuXHJcbiAqIElmIG5vIHNlZWQgaXMgZ2l2ZW4gaXQgd2lsbCB1c2UgYSAncmFuZG9tJyBvbmUgYmFzZWQgb24gRGF0ZS5ub3cuXHJcbiAqXHJcbiAqIEBjbGFzcyBSYW5kb21EYXRhR2VuZXJhdG9yXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTWF0aFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFtzZWVkc10gLSBUaGUgc2VlZHMgdG8gdXNlIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqL1xyXG52YXIgUmFuZG9tRGF0YUdlbmVyYXRvciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBSYW5kb21EYXRhR2VuZXJhdG9yIChzZWVkcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc2VlZHMgPT09IHVuZGVmaW5lZCkgeyBzZWVkcyA9IFsgKERhdGUubm93KCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpIF07IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgdmFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNjXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmMgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB2YXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3MwXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnMwID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgdmFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNzMVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zMSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHZhci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjczJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuczIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB2YXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNpZ25zIHRvIGNob29zZSBmcm9tLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNzaWduc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpZ25zID0gWyAtMSwgMSBdO1xyXG5cclxuICAgICAgICBpZiAoc2VlZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoc2VlZHMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIHJhbmRvbSBoZWxwZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3JuZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gbnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBybmQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHQgPSAyMDkxNjM5ICogdGhpcy5zMCArIHRoaXMuYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcblxyXG4gICAgICAgIHRoaXMuYyA9IHQgfCAwO1xyXG4gICAgICAgIHRoaXMuczAgPSB0aGlzLnMxO1xyXG4gICAgICAgIHRoaXMuczEgPSB0aGlzLnMyO1xyXG4gICAgICAgIHRoaXMuczIgPSB0IC0gdGhpcy5jO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCBjcmVhdGVzIGEgc2VlZCBoYXNoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNoYXNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgdmFsdWUgdG8gaGFzaC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBoYXNoZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGhhc2g6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBoO1xyXG4gICAgICAgIHZhciBuID0gdGhpcy5uO1xyXG5cclxuICAgICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuICs9IGRhdGEuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBoICo9IG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOy8vIDJeMzJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubiA9IG47XHJcblxyXG4gICAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOy8vIDJeLTMyXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIHJhbmRvbSBkYXRhIGdlbmVyYXRvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjaW5pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0gc2VlZHMgLSBUaGUgc2VlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgcmFuZG9tIGRhdGEgZ2VuZXJhdG9yIHdpdGguXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChzZWVkcylcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNlZWRzID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUoc2VlZHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNvdyhzZWVkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBzZWVkIG9mIHRoZSByYW5kb20gZGF0YSBnZW5lcmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogX05vdGVfOiB0aGUgc2VlZCBhcnJheSBpcyBvbmx5IHByb2Nlc3NlZCB1cCB0byB0aGUgZmlyc3QgYHVuZGVmaW5lZGAgKG9yIGBudWxsYCkgdmFsdWUsIHNob3VsZCBzdWNoIGJlIHByZXNlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3Nvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2VlZHMgLSBUaGUgYXJyYXkgb2Ygc2VlZHM6IHRoZSBgdG9TdHJpbmcoKWAgb2YgZWFjaCB2YWx1ZSBpcyB1c2VkLlxyXG4gICAgICovXHJcbiAgICBzb3c6IGZ1bmN0aW9uIChzZWVkcylcclxuICAgIHtcclxuICAgICAgICAvLyBBbHdheXMgcmVzZXQgdG8gZGVmYXVsdCBzZWVkXHJcbiAgICAgICAgdGhpcy5uID0gMHhlZmM4MjQ5ZDtcclxuICAgICAgICB0aGlzLnMwID0gdGhpcy5oYXNoKCcgJyk7XHJcbiAgICAgICAgdGhpcy5zMSA9IHRoaXMuaGFzaCgnICcpO1xyXG4gICAgICAgIHRoaXMuczIgPSB0aGlzLmhhc2goJyAnKTtcclxuICAgICAgICB0aGlzLmMgPSAxO1xyXG5cclxuICAgICAgICBpZiAoIXNlZWRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXBwbHkgYW55IHNlZWRzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWVkcy5sZW5ndGggJiYgKHNlZWRzW2ldICE9IG51bGwpOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgc2VlZCA9IHNlZWRzW2ldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zMCAtPSB0aGlzLmhhc2goc2VlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuczAgKz0gfn4odGhpcy5zMCA8IDApO1xyXG4gICAgICAgICAgICB0aGlzLnMxIC09IHRoaXMuaGFzaChzZWVkKTtcclxuICAgICAgICAgICAgdGhpcy5zMSArPSB+fih0aGlzLnMxIDwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuczIgLT0gdGhpcy5oYXNoKHNlZWQpO1xyXG4gICAgICAgICAgICB0aGlzLnMyICs9IH5+KHRoaXMuczIgPCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMl4zMi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjaW50ZWdlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMl4zMi5cclxuICAgICAqL1xyXG4gICAgaW50ZWdlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAyXjMyXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm5kKCkgKiAweDEwMDAwMDAwMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHJlYWwgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjZnJhY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSByZWFsIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKi9cclxuICAgIGZyYWM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gMl4tNTNcclxuICAgICAgICByZXR1cm4gdGhpcy5ybmQoKSArICh0aGlzLnJuZCgpICogMHgyMDAwMDAgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSByZWFsIG51bWJlciBiZXR3ZWVuIDAgYW5kIDJeMzIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3JlYWxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gcmVhbCBudW1iZXIgYmV0d2VlbiAwIGFuZCAyXjMyLlxyXG4gICAgICovXHJcbiAgICByZWFsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVnZXIoKSArIHRoaXMuZnJhYygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIGFuZCBpbmNsdWRpbmcgbWluIGFuZCBtYXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI2ludGVnZXJJblJhbmdlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIG1pbiBhbmQgbWF4LlxyXG4gICAgICovXHJcbiAgICBpbnRlZ2VySW5SYW5nZTogZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMucmVhbEluUmFuZ2UoMCwgbWF4IC0gbWluICsgMSkgKyBtaW4pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIGFuZCBpbmNsdWRpbmcgbWluIGFuZCBtYXguXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBhbiBhbGlhcyBmb3IgUmFuZG9tRGF0YUdlbmVyYXRvci5pbnRlZ2VySW5SYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjYmV0d2VlblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBUaGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cclxuICAgICAqL1xyXG4gICAgYmV0d2VlbjogZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMucmVhbEluUmFuZ2UoMCwgbWF4IC0gbWluICsgMSkgKyBtaW4pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb20gcmVhbCBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjcmVhbEluUmFuZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluIGFuZCBtYXguXHJcbiAgICAgKi9cclxuICAgIHJlYWxJblJhbmdlOiBmdW5jdGlvbiAobWluLCBtYXgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhYygpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSByZWFsIG51bWJlciBiZXR3ZWVuIC0xIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNub3JtYWxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gcmVhbCBudW1iZXIgYmV0d2VlbiAtMSBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgbm9ybWFsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxIC0gKDIgKiB0aGlzLmZyYWMoKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHZhbGlkIFJGQzQxMjIgdmVyc2lvbjQgSUQgaGV4IHN0cmluZyBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEzMDgzNjhcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IjdXVpZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBBIHZhbGlkIFJGQzQxMjIgdmVyc2lvbjQgSUQgaGV4IHN0cmluZ1xyXG4gICAgICovXHJcbiAgICB1dWlkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhID0gJyc7XHJcbiAgICAgICAgdmFyIGIgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChiID0gYSA9ICcnOyBhKysgPCAzNjsgYiArPSB+YSAlIDUgfCBhICogMyAmIDQgPyAoYSBeIDE1ID8gOCBeIHRoaXMuZnJhYygpICogKGEgXiAyMCA/IDE2IDogNCkgOiA0KS50b1N0cmluZygxNikgOiAnLScpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBiO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb20gZWxlbWVudCBmcm9tIHdpdGhpbiB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3BpY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIHBpY2sgYSByYW5kb20gZWxlbWVudCBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IEEgcmFuZG9tIG1lbWJlciBvZiB0aGUgYXJyYXkuXHJcbiAgICAgKi9cclxuICAgIHBpY2s6IGZ1bmN0aW9uIChhcnJheSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gYXJyYXlbdGhpcy5pbnRlZ2VySW5SYW5nZSgwLCBhcnJheS5sZW5ndGggLSAxKV07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHNpZ24gdG8gYmUgdXNlZCB3aXRoIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNzaWduXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0xIG9yICsxLlxyXG4gICAgICovXHJcbiAgICBzaWduOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2sodGhpcy5zaWducyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSBlbGVtZW50IGZyb20gd2l0aGluIHRoZSBnaXZlbiBhcnJheSwgZmF2b3JpbmcgdGhlIGVhcmxpZXIgZW50cmllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3Ijd2VpZ2h0ZWRQaWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBwaWNrIGEgcmFuZG9tIGVsZW1lbnQgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBBIHJhbmRvbSBtZW1iZXIgb2YgdGhlIGFycmF5LlxyXG4gICAgICovXHJcbiAgICB3ZWlnaHRlZFBpY2s6IGZ1bmN0aW9uIChhcnJheSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gYXJyYXlbfn4oTWF0aC5wb3codGhpcy5mcmFjKCksIDIpICogKGFycmF5Lmxlbmd0aCAtIDEpICsgMC41KV07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSB0aW1lc3RhbXAgYmV0d2VlbiBtaW4gYW5kIG1heCwgb3IgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIDIwMDAgYW5kIHRoZSBlbmQgb2YgMjAyMCBpZiBtaW4gYW5kIG1heCBhcmVuJ3Qgc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciN0aW1lc3RhbXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gdGltZXN0YW1wIGJldHdlZW4gbWluIGFuZCBtYXguXHJcbiAgICAgKi9cclxuICAgIHRpbWVzdGFtcDogZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWxJblJhbmdlKG1pbiB8fCA5NDY2ODQ4MDAwMDAsIG1heCB8fCAxNTc3ODYyMDAwMDAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIGFuZ2xlIGJldHdlZW4gLTE4MCBhbmQgMTgwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLk1hdGguUmFuZG9tRGF0YUdlbmVyYXRvciNhbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAtMTgwIGFuZCAxODAuXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVnZXJJblJhbmdlKC0xODAsIDE4MCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSByb3RhdGlvbiBpbiByYWRpYW5zLCBiZXR3ZWVuIC0zLjE0MSBhbmQgMy4xNDFcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5NYXRoLlJhbmRvbURhdGFHZW5lcmF0b3Ijcm90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gbnVtYmVyIGJldHdlZW4gLTMuMTQxIGFuZCAzLjE0MVxyXG4gICAgICovXHJcbiAgICByb3RhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFsSW5SYW5nZSgtMy4xNDE1OTI2LCAzLjE0MTU5MjYpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3IgU2V0cyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvci4gVGhpcyBhbGxvd3MgeW91IHRvIHJldGFpbiB0aGUgdmFsdWVzXHJcbiAgICAgKiB0aGF0IHRoZSBnZW5lcmF0b3IgaXMgdXNpbmcgYmV0d2VlbiBnYW1lcywgaS5lLiBpbiBhIGdhbWUgc2F2ZSBmaWxlLlxyXG4gICAgICpcclxuICAgICAqIFRvIHNlZWQgdGhpcyBnZW5lcmF0b3Igd2l0aCBhIHByZXZpb3VzbHkgc2F2ZWQgc3RhdGUgeW91IGNhbiBwYXNzIGl0IGFzIHRoZVxyXG4gICAgICogYHNlZWRgIHZhbHVlIGluIHlvdXIgZ2FtZSBjb25maWcsIG9yIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHkgYWZ0ZXIgUGhhc2VyIGhhcyBib290ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIElmIHByb3ZpZGluZyBhIHN0YXRlIGl0IHNob3VsZCBtYXRjaCB0aGUgc2FtZSBmb3JtYXQgdGhhdCB0aGlzIG1ldGhvZFxyXG4gICAgICogcmV0dXJucywgd2hpY2ggaXMgYSBzdHJpbmcgd2l0aCBhIGhlYWRlciBgIXJuZGAgZm9sbG93ZWQgYnkgdGhlIGBjYCxcclxuICAgICAqIGBzMGAsIGBzMWAgYW5kIGBzMmAgdmFsdWVzIHJlc3BlY3RpdmVseSwgZWFjaCBjb21tYS1kZWxpbWl0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3N0YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YXRlXSAtIEdlbmVyYXRvciBzdGF0ZSB0byBiZSBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yLlxyXG4gICAgICovXHJcbiAgICBzdGF0ZTogZnVuY3Rpb24gKHN0YXRlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnICYmIHN0YXRlLm1hdGNoKC9eIXJuZC8pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS5zcGxpdCgnLCcpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jID0gcGFyc2VGbG9hdChzdGF0ZVsxXSk7XHJcbiAgICAgICAgICAgIHRoaXMuczAgPSBwYXJzZUZsb2F0KHN0YXRlWzJdKTtcclxuICAgICAgICAgICAgdGhpcy5zMSA9IHBhcnNlRmxvYXQoc3RhdGVbM10pO1xyXG4gICAgICAgICAgICB0aGlzLnMyID0gcGFyc2VGbG9hdChzdGF0ZVs0XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gWyAnIXJuZCcsIHRoaXMuYywgdGhpcy5zMCwgdGhpcy5zMSwgdGhpcy5zMiBdLmpvaW4oJywnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHVmZmxlcyB0aGUgZ2l2ZW4gYXJyYXksIHVzaW5nIHRoZSBjdXJyZW50IHNlZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTWF0aC5SYW5kb21EYXRhR2VuZXJhdG9yI3NodWZmbGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFthcnJheV0gLSBUaGUgYXJyYXkgdG8gYmUgc2h1ZmZsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IFRoZSBzaHVmZmxlZCBhcnJheS5cclxuICAgICAqL1xyXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKGFycmF5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gbGVuOyBpID4gMDsgaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcih0aGlzLmZyYWMoKSAqIChpICsgMSkpO1xyXG4gICAgICAgICAgICB2YXIgaXRlbUF0SW5kZXggPSBhcnJheVtyYW5kb21JbmRleF07XHJcblxyXG4gICAgICAgICAgICBhcnJheVtyYW5kb21JbmRleF0gPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgYXJyYXlbaV0gPSBpdGVtQXRJbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21EYXRhR2VuZXJhdG9yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/random-data-generator/RandomDataGenerator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/snap/SnapCeil.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/math/snap/SnapCeil.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Snap a value to nearest grid slice, using ceil.\r\n *\r\n * Example: if you have an interval gap of `5` and a position of `12`... you will snap to `15`.\r\n * As will `14` snap to `15`... but `16` will snap to `20`.\r\n *\r\n * @function Phaser.Math.Snap.Ceil\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to snap.\r\n * @param {number} gap - The interval gap of the grid.\r\n * @param {number} [start=0] - Optional starting offset for gap.\r\n * @param {boolean} [divide=false] - If `true` it will divide the snapped value by the gap before returning.\r\n *\r\n * @return {number} The snapped value.\r\n */\r\nvar SnapCeil = function (value, gap, start, divide)\r\n{\r\n    if (start === undefined) { start = 0; }\r\n\r\n    if (gap === 0)\r\n    {\r\n        return value;\r\n    }\r\n\r\n    value -= start;\r\n    value = gap * Math.ceil(value / gap);\r\n\r\n    return (divide) ? (start + value) / gap : start + value;\r\n};\r\n\r\nmodule.exports = SnapCeil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3NuYXAvU25hcENlaWwuanM/NDBhNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3NuYXAvU25hcENlaWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTbmFwIGEgdmFsdWUgdG8gbmVhcmVzdCBncmlkIHNsaWNlLCB1c2luZyBjZWlsLlxyXG4gKlxyXG4gKiBFeGFtcGxlOiBpZiB5b3UgaGF2ZSBhbiBpbnRlcnZhbCBnYXAgb2YgYDVgIGFuZCBhIHBvc2l0aW9uIG9mIGAxMmAuLi4geW91IHdpbGwgc25hcCB0byBgMTVgLlxyXG4gKiBBcyB3aWxsIGAxNGAgc25hcCB0byBgMTVgLi4uIGJ1dCBgMTZgIHdpbGwgc25hcCB0byBgMjBgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguU25hcC5DZWlsXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc25hcC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGdhcCAtIFRoZSBpbnRlcnZhbCBnYXAgb2YgdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gLSBPcHRpb25hbCBzdGFydGluZyBvZmZzZXQgZm9yIGdhcC5cclxuICogQHBhcmFtIHtib29sZWFufSBbZGl2aWRlPWZhbHNlXSAtIElmIGB0cnVlYCBpdCB3aWxsIGRpdmlkZSB0aGUgc25hcHBlZCB2YWx1ZSBieSB0aGUgZ2FwIGJlZm9yZSByZXR1cm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNuYXBwZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgU25hcENlaWwgPSBmdW5jdGlvbiAodmFsdWUsIGdhcCwgc3RhcnQsIGRpdmlkZSlcclxue1xyXG4gICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHsgc3RhcnQgPSAwOyB9XHJcblxyXG4gICAgaWYgKGdhcCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWUgLT0gc3RhcnQ7XHJcbiAgICB2YWx1ZSA9IGdhcCAqIE1hdGguY2VpbCh2YWx1ZSAvIGdhcCk7XHJcblxyXG4gICAgcmV0dXJuIChkaXZpZGUpID8gKHN0YXJ0ICsgdmFsdWUpIC8gZ2FwIDogc3RhcnQgKyB2YWx1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU25hcENlaWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/snap/SnapCeil.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/snap/SnapFloor.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/math/snap/SnapFloor.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Snap a value to nearest grid slice, using floor.\r\n *\r\n * Example: if you have an interval gap of `5` and a position of `12`... you will snap to `10`.\r\n * As will `14` snap to `10`... but `16` will snap to `15`.\r\n *\r\n * @function Phaser.Math.Snap.Floor\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to snap.\r\n * @param {number} gap - The interval gap of the grid.\r\n * @param {number} [start=0] - Optional starting offset for gap.\r\n * @param {boolean} [divide=false] - If `true` it will divide the snapped value by the gap before returning.\r\n *\r\n * @return {number} The snapped value.\r\n */\r\nvar SnapFloor = function (value, gap, start, divide)\r\n{\r\n    if (start === undefined) { start = 0; }\r\n\r\n    if (gap === 0)\r\n    {\r\n        return value;\r\n    }\r\n\r\n    value -= start;\r\n    value = gap * Math.floor(value / gap);\r\n\r\n    return (divide) ? (start + value) / gap : start + value;\r\n};\r\n\r\nmodule.exports = SnapFloor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3NuYXAvU25hcEZsb29yLmpzPzM0YjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbWF0aC9zbmFwL1NuYXBGbG9vci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgYSB2YWx1ZSB0byBuZWFyZXN0IGdyaWQgc2xpY2UsIHVzaW5nIGZsb29yLlxyXG4gKlxyXG4gKiBFeGFtcGxlOiBpZiB5b3UgaGF2ZSBhbiBpbnRlcnZhbCBnYXAgb2YgYDVgIGFuZCBhIHBvc2l0aW9uIG9mIGAxMmAuLi4geW91IHdpbGwgc25hcCB0byBgMTBgLlxyXG4gKiBBcyB3aWxsIGAxNGAgc25hcCB0byBgMTBgLi4uIGJ1dCBgMTZgIHdpbGwgc25hcCB0byBgMTVgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLk1hdGguU25hcC5GbG9vclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNuYXAuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBnYXAgLSBUaGUgaW50ZXJ2YWwgZ2FwIG9mIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIC0gT3B0aW9uYWwgc3RhcnRpbmcgb2Zmc2V0IGZvciBnYXAuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RpdmlkZT1mYWxzZV0gLSBJZiBgdHJ1ZWAgaXQgd2lsbCBkaXZpZGUgdGhlIHNuYXBwZWQgdmFsdWUgYnkgdGhlIGdhcCBiZWZvcmUgcmV0dXJuaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzbmFwcGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIFNuYXBGbG9vciA9IGZ1bmN0aW9uICh2YWx1ZSwgZ2FwLCBzdGFydCwgZGl2aWRlKVxyXG57XHJcbiAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkgeyBzdGFydCA9IDA7IH1cclxuXHJcbiAgICBpZiAoZ2FwID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZSAtPSBzdGFydDtcclxuICAgIHZhbHVlID0gZ2FwICogTWF0aC5mbG9vcih2YWx1ZSAvIGdhcCk7XHJcblxyXG4gICAgcmV0dXJuIChkaXZpZGUpID8gKHN0YXJ0ICsgdmFsdWUpIC8gZ2FwIDogc3RhcnQgKyB2YWx1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU25hcEZsb29yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/snap/SnapFloor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/snap/SnapTo.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/math/snap/SnapTo.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Snap a value to nearest grid slice, using rounding.\r\n *\r\n * Example: if you have an interval gap of `5` and a position of `12`... you will snap to `10` whereas `14` will snap to `15`.\r\n *\r\n * @function Phaser.Math.Snap.To\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to snap.\r\n * @param {number} gap - The interval gap of the grid.\r\n * @param {number} [start=0] - Optional starting offset for gap.\r\n * @param {boolean} [divide=false] - If `true` it will divide the snapped value by the gap before returning.\r\n *\r\n * @return {number} The snapped value.\r\n */\r\nvar SnapTo = function (value, gap, start, divide)\r\n{\r\n    if (start === undefined) { start = 0; }\r\n\r\n    if (gap === 0)\r\n    {\r\n        return value;\r\n    }\r\n\r\n    value -= start;\r\n    value = gap * Math.round(value / gap);\r\n\r\n    return (divide) ? (start + value) / gap : start + value;\r\n};\r\n\r\nmodule.exports = SnapTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3NuYXAvU25hcFRvLmpzPzUyYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvc25hcC9TbmFwVG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTbmFwIGEgdmFsdWUgdG8gbmVhcmVzdCBncmlkIHNsaWNlLCB1c2luZyByb3VuZGluZy5cclxuICpcclxuICogRXhhbXBsZTogaWYgeW91IGhhdmUgYW4gaW50ZXJ2YWwgZ2FwIG9mIGA1YCBhbmQgYSBwb3NpdGlvbiBvZiBgMTJgLi4uIHlvdSB3aWxsIHNuYXAgdG8gYDEwYCB3aGVyZWFzIGAxNGAgd2lsbCBzbmFwIHRvIGAxNWAuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuTWF0aC5TbmFwLlRvXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc25hcC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGdhcCAtIFRoZSBpbnRlcnZhbCBnYXAgb2YgdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gLSBPcHRpb25hbCBzdGFydGluZyBvZmZzZXQgZm9yIGdhcC5cclxuICogQHBhcmFtIHtib29sZWFufSBbZGl2aWRlPWZhbHNlXSAtIElmIGB0cnVlYCBpdCB3aWxsIGRpdmlkZSB0aGUgc25hcHBlZCB2YWx1ZSBieSB0aGUgZ2FwIGJlZm9yZSByZXR1cm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNuYXBwZWQgdmFsdWUuXHJcbiAqL1xyXG52YXIgU25hcFRvID0gZnVuY3Rpb24gKHZhbHVlLCBnYXAsIHN0YXJ0LCBkaXZpZGUpXHJcbntcclxuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0ID0gMDsgfVxyXG5cclxuICAgIGlmIChnYXAgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlIC09IHN0YXJ0O1xyXG4gICAgdmFsdWUgPSBnYXAgKiBNYXRoLnJvdW5kKHZhbHVlIC8gZ2FwKTtcclxuXHJcbiAgICByZXR1cm4gKGRpdmlkZSkgPyAoc3RhcnQgKyB2YWx1ZSkgLyBnYXAgOiBzdGFydCArIHZhbHVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbmFwVG87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/snap/SnapTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/math/snap/index.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/math/snap/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Math.Snap\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Ceil: __webpack_require__(/*! ./SnapCeil */ \"./node_modules/phaser/src/math/snap/SnapCeil.js\"),\r\n    Floor: __webpack_require__(/*! ./SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\"),\r\n    To: __webpack_require__(/*! ./SnapTo */ \"./node_modules/phaser/src/math/snap/SnapTo.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9tYXRoL3NuYXAvaW5kZXguanM/MjU5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxtRUFBWTtBQUM5QixXQUFXLG1CQUFPLENBQUMscUVBQWE7QUFDaEMsUUFBUSxtQkFBTyxDQUFDLCtEQUFVOztBQUUxQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL21hdGgvc25hcC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLk1hdGguU25hcFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENlaWw6IHJlcXVpcmUoJy4vU25hcENlaWwnKSxcclxuICAgIEZsb29yOiByZXF1aXJlKCcuL1NuYXBGbG9vcicpLFxyXG4gICAgVG86IHJlcXVpcmUoJy4vU25hcFRvJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/math/snap/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/phaser.js":
/*!*******************************************!*\
  !*** ./node_modules/phaser/src/phaser.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* WEBPACK VAR INJECTION */(function(global) {/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n__webpack_require__(/*! ./polyfills */ \"./node_modules/phaser/src/polyfills/index.js\");\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/const.js\");\r\nvar Extend = __webpack_require__(/*! ./utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser\r\n */\r\n\r\nvar Phaser = {\r\n\r\n    Actions: __webpack_require__(/*! ./actions */ \"./node_modules/phaser/src/actions/index.js\"),\r\n    Animations: __webpack_require__(/*! ./animations */ \"./node_modules/phaser/src/animations/index.js\"),\r\n    BlendModes: __webpack_require__(/*! ./renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\"),\r\n    Cache: __webpack_require__(/*! ./cache */ \"./node_modules/phaser/src/cache/index.js\"),\r\n    Cameras: __webpack_require__(/*! ./cameras */ \"./node_modules/phaser/src/cameras/index.js\"),\r\n    Core: __webpack_require__(/*! ./core */ \"./node_modules/phaser/src/core/index.js\"),\r\n    Class: __webpack_require__(/*! ./utils/Class */ \"./node_modules/phaser/src/utils/Class.js\"),\r\n    Create: __webpack_require__(/*! ./create */ \"./node_modules/phaser/src/create/index.js\"),\r\n    Curves: __webpack_require__(/*! ./curves */ \"./node_modules/phaser/src/curves/index.js\"),\r\n    Data: __webpack_require__(/*! ./data */ \"./node_modules/phaser/src/data/index.js\"),\r\n    Display: __webpack_require__(/*! ./display */ \"./node_modules/phaser/src/display/index.js\"),\r\n    DOM: __webpack_require__(/*! ./dom */ \"./node_modules/phaser/src/dom/index.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/events/index.js\"),\r\n    Game: __webpack_require__(/*! ./core/Game */ \"./node_modules/phaser/src/core/Game.js\"),\r\n    GameObjects: __webpack_require__(/*! ./gameobjects */ \"./node_modules/phaser/src/gameobjects/index.js\"),\r\n    Geom: __webpack_require__(/*! ./geom */ \"./node_modules/phaser/src/geom/index.js\"),\r\n    Input: __webpack_require__(/*! ./input */ \"./node_modules/phaser/src/input/index.js\"),\r\n    Loader: __webpack_require__(/*! ./loader */ \"./node_modules/phaser/src/loader/index.js\"),\r\n    Math: __webpack_require__(/*! ./math */ \"./node_modules/phaser/src/math/index.js\"),\r\n    Physics: __webpack_require__(/*! ./physics */ \"./node_modules/phaser/src/physics/index.js\"),\r\n    Plugins: __webpack_require__(/*! ./plugins */ \"./node_modules/phaser/src/plugins/index.js\"),\r\n    Renderer: __webpack_require__(/*! ./renderer */ \"./node_modules/phaser/src/renderer/index.js\"),\r\n    Scale: __webpack_require__(/*! ./scale */ \"./node_modules/phaser/src/scale/index.js\"),\r\n    ScaleModes: __webpack_require__(/*! ./renderer/ScaleModes */ \"./node_modules/phaser/src/renderer/ScaleModes.js\"),\r\n    Scene: __webpack_require__(/*! ./scene/Scene */ \"./node_modules/phaser/src/scene/Scene.js\"),\r\n    Scenes: __webpack_require__(/*! ./scene */ \"./node_modules/phaser/src/scene/index.js\"),\r\n    Structs: __webpack_require__(/*! ./structs */ \"./node_modules/phaser/src/structs/index.js\"),\r\n    Textures: __webpack_require__(/*! ./textures */ \"./node_modules/phaser/src/textures/index.js\"),\r\n    Tilemaps: __webpack_require__(/*! ./tilemaps */ \"./node_modules/phaser/src/tilemaps/index.js\"),\r\n    Time: __webpack_require__(/*! ./time */ \"./node_modules/phaser/src/time/index.js\"),\r\n    Tweens: __webpack_require__(/*! ./tweens */ \"./node_modules/phaser/src/tweens/index.js\"),\r\n    Utils: __webpack_require__(/*! ./utils */ \"./node_modules/phaser/src/utils/index.js\")\r\n\r\n};\r\n\r\n//  Merge in the optional plugins\r\n\r\nif (typeof FEATURE_SOUND)\r\n{\r\n    Phaser.Sound = __webpack_require__(/*! ./sound */ \"./node_modules/phaser/src/sound/index.js\");\r\n}\r\n\r\nif (typeof PLUGIN_CAMERA3D)\r\n{\r\n    Phaser.Cameras.Sprite3D = __webpack_require__(/*! ../plugins/camera3d/src */ \"./node_modules/phaser/plugins/camera3d/src/index.js\");\r\n    Phaser.GameObjects.Sprite3D = __webpack_require__(/*! ../plugins/camera3d/src/sprite3d/Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\n    Phaser.GameObjects.Factories.Sprite3D = __webpack_require__(/*! ../plugins/camera3d/src/sprite3d/Sprite3DFactory */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js\");\r\n    Phaser.GameObjects.Creators.Sprite3D = __webpack_require__(/*! ../plugins/camera3d/src/sprite3d/Sprite3DCreator */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js\");\r\n}\r\n\r\nif (typeof PLUGIN_FBINSTANT)\r\n{\r\n    Phaser.FacebookInstantGamesPlugin = __webpack_require__(/*! ../plugins/fbinstant/src/FacebookInstantGamesPlugin */ \"./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js\");\r\n}\r\n\r\n//   Merge in the consts\r\n\r\nPhaser = Extend(false, Phaser, CONST);\r\n\r\n/**\r\n * The root types namespace.\r\n * \r\n * @namespace Phaser.Types\r\n * @since 3.17.0\r\n */\r\n\r\n//  Export it\r\n\r\nmodule.exports = Phaser;\r\n\r\nglobal.Phaser = Phaser;\r\n\r\n/*\r\n * \"Documentation is like pizza: when it is good, it is very, very good;\r\n * and when it is bad, it is better than nothing.\"\r\n *  -- Dick Brandon\r\n */\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waGFzZXIuanM/NjRiOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQU8sQ0FBQyxpRUFBYTs7QUFFckIsWUFBWSxtQkFBTyxDQUFDLG1EQUFTO0FBQzdCLGFBQWEsbUJBQU8sQ0FBQywrRUFBdUI7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXVCO0FBQy9DLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLHVEQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQywrREFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFVBQVUsbUJBQU8sQ0FBQyx1REFBUTtBQUMxQixhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsU0FBUyxtQkFBTyxDQUFDLHFEQUFPO0FBQ3hCLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixVQUFVLG1CQUFPLENBQUMsMkRBQWE7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMscUVBQWU7QUFDeEMsVUFBVSxtQkFBTyxDQUFDLHVEQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsVUFBVSxtQkFBTyxDQUFDLHVEQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyw2REFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLCtEQUFZO0FBQ2xDLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBdUI7QUFDL0MsV0FBVyxtQkFBTyxDQUFDLCtEQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyx5REFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLCtEQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQywrREFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsdURBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUzs7QUFFNUI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHlEQUFTO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsbUJBQU8sQ0FBQyxvRkFBeUI7QUFDL0Qsa0NBQWtDLG1CQUFPLENBQUMsa0hBQTJDO0FBQ3JGLDRDQUE0QyxtQkFBTyxDQUFDLGdJQUFrRDtBQUN0RywyQ0FBMkMsbUJBQU8sQ0FBQyxnSUFBa0Q7QUFDckc7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxtQkFBTyxDQUFDLHNJQUFxRDtBQUNyRzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoYXNlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxucmVxdWlyZSgnLi9wb2x5ZmlsbHMnKTtcclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyXHJcbiAqL1xyXG5cclxudmFyIFBoYXNlciA9IHtcclxuXHJcbiAgICBBY3Rpb25zOiByZXF1aXJlKCcuL2FjdGlvbnMnKSxcclxuICAgIEFuaW1hdGlvbnM6IHJlcXVpcmUoJy4vYW5pbWF0aW9ucycpLFxyXG4gICAgQmxlbmRNb2RlczogcmVxdWlyZSgnLi9yZW5kZXJlci9CbGVuZE1vZGVzJyksXHJcbiAgICBDYWNoZTogcmVxdWlyZSgnLi9jYWNoZScpLFxyXG4gICAgQ2FtZXJhczogcmVxdWlyZSgnLi9jYW1lcmFzJyksXHJcbiAgICBDb3JlOiByZXF1aXJlKCcuL2NvcmUnKSxcclxuICAgIENsYXNzOiByZXF1aXJlKCcuL3V0aWxzL0NsYXNzJyksXHJcbiAgICBDcmVhdGU6IHJlcXVpcmUoJy4vY3JlYXRlJyksXHJcbiAgICBDdXJ2ZXM6IHJlcXVpcmUoJy4vY3VydmVzJyksXHJcbiAgICBEYXRhOiByZXF1aXJlKCcuL2RhdGEnKSxcclxuICAgIERpc3BsYXk6IHJlcXVpcmUoJy4vZGlzcGxheScpLFxyXG4gICAgRE9NOiByZXF1aXJlKCcuL2RvbScpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG4gICAgR2FtZTogcmVxdWlyZSgnLi9jb3JlL0dhbWUnKSxcclxuICAgIEdhbWVPYmplY3RzOiByZXF1aXJlKCcuL2dhbWVvYmplY3RzJyksXHJcbiAgICBHZW9tOiByZXF1aXJlKCcuL2dlb20nKSxcclxuICAgIElucHV0OiByZXF1aXJlKCcuL2lucHV0JyksXHJcbiAgICBMb2FkZXI6IHJlcXVpcmUoJy4vbG9hZGVyJyksXHJcbiAgICBNYXRoOiByZXF1aXJlKCcuL21hdGgnKSxcclxuICAgIFBoeXNpY3M6IHJlcXVpcmUoJy4vcGh5c2ljcycpLFxyXG4gICAgUGx1Z2luczogcmVxdWlyZSgnLi9wbHVnaW5zJyksXHJcbiAgICBSZW5kZXJlcjogcmVxdWlyZSgnLi9yZW5kZXJlcicpLFxyXG4gICAgU2NhbGU6IHJlcXVpcmUoJy4vc2NhbGUnKSxcclxuICAgIFNjYWxlTW9kZXM6IHJlcXVpcmUoJy4vcmVuZGVyZXIvU2NhbGVNb2RlcycpLFxyXG4gICAgU2NlbmU6IHJlcXVpcmUoJy4vc2NlbmUvU2NlbmUnKSxcclxuICAgIFNjZW5lczogcmVxdWlyZSgnLi9zY2VuZScpLFxyXG4gICAgU3RydWN0czogcmVxdWlyZSgnLi9zdHJ1Y3RzJyksXHJcbiAgICBUZXh0dXJlczogcmVxdWlyZSgnLi90ZXh0dXJlcycpLFxyXG4gICAgVGlsZW1hcHM6IHJlcXVpcmUoJy4vdGlsZW1hcHMnKSxcclxuICAgIFRpbWU6IHJlcXVpcmUoJy4vdGltZScpLFxyXG4gICAgVHdlZW5zOiByZXF1aXJlKCcuL3R3ZWVucycpLFxyXG4gICAgVXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKVxyXG5cclxufTtcclxuXHJcbi8vICBNZXJnZSBpbiB0aGUgb3B0aW9uYWwgcGx1Z2luc1xyXG5cclxuaWYgKHR5cGVvZiBGRUFUVVJFX1NPVU5EKVxyXG57XHJcbiAgICBQaGFzZXIuU291bmQgPSByZXF1aXJlKCcuL3NvdW5kJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUExVR0lOX0NBTUVSQTNEKVxyXG57XHJcbiAgICBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvY2FtZXJhM2Qvc3JjJyk7XHJcbiAgICBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QgPSByZXF1aXJlKCcuLi9wbHVnaW5zL2NhbWVyYTNkL3NyYy9zcHJpdGUzZC9TcHJpdGUzRCcpO1xyXG4gICAgUGhhc2VyLkdhbWVPYmplY3RzLkZhY3Rvcmllcy5TcHJpdGUzRCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNERmFjdG9yeScpO1xyXG4gICAgUGhhc2VyLkdhbWVPYmplY3RzLkNyZWF0b3JzLlNwcml0ZTNEID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9jYW1lcmEzZC9zcmMvc3ByaXRlM2QvU3ByaXRlM0RDcmVhdG9yJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUExVR0lOX0ZCSU5TVEFOVClcclxue1xyXG4gICAgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9mYmluc3RhbnQvc3JjL0ZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luJyk7XHJcbn1cclxuXHJcbi8vICAgTWVyZ2UgaW4gdGhlIGNvbnN0c1xyXG5cclxuUGhhc2VyID0gRXh0ZW5kKGZhbHNlLCBQaGFzZXIsIENPTlNUKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgcm9vdCB0eXBlcyBuYW1lc3BhY2UuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5UeXBlc1xyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqL1xyXG5cclxuLy8gIEV4cG9ydCBpdFxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQaGFzZXI7XHJcblxyXG5nbG9iYWwuUGhhc2VyID0gUGhhc2VyO1xyXG5cclxuLypcclxuICogXCJEb2N1bWVudGF0aW9uIGlzIGxpa2UgcGl6emE6IHdoZW4gaXQgaXMgZ29vZCwgaXQgaXMgdmVyeSwgdmVyeSBnb29kO1xyXG4gKiBhbmQgd2hlbiBpdCBpcyBiYWQsIGl0IGlzIGJldHRlciB0aGFuIG5vdGhpbmcuXCJcclxuICogIC0tIERpY2sgQnJhbmRvblxyXG4gKi9cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/phaser.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/ArcadeImage.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/ArcadeImage.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/arcade/components/index.js\");\r\nvar Image = __webpack_require__(/*! ../../gameobjects/image/Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Arcade Physics Image is an Image with an Arcade Physics body and related components.\r\n * The body can be dynamic or static.\r\n *\r\n * The main difference between an Arcade Image and an Arcade Sprite is that you cannot animate an Arcade Image.\r\n *\r\n * @class Image\r\n * @extends Phaser.GameObjects.Image\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Arcade.Components.Acceleration\r\n * @extends Phaser.Physics.Arcade.Components.Angular\r\n * @extends Phaser.Physics.Arcade.Components.Bounce\r\n * @extends Phaser.Physics.Arcade.Components.Debug\r\n * @extends Phaser.Physics.Arcade.Components.Drag\r\n * @extends Phaser.Physics.Arcade.Components.Enable\r\n * @extends Phaser.Physics.Arcade.Components.Friction\r\n * @extends Phaser.Physics.Arcade.Components.Gravity\r\n * @extends Phaser.Physics.Arcade.Components.Immovable\r\n * @extends Phaser.Physics.Arcade.Components.Mass\r\n * @extends Phaser.Physics.Arcade.Components.Size\r\n * @extends Phaser.Physics.Arcade.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar ArcadeImage = new Class({\r\n\r\n    Extends: Image,\r\n\r\n    Mixins: [\r\n        Components.Acceleration,\r\n        Components.Angular,\r\n        Components.Bounce,\r\n        Components.Debug,\r\n        Components.Drag,\r\n        Components.Enable,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Immovable,\r\n        Components.Mass,\r\n        Components.Size,\r\n        Components.Velocity\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ArcadeImage (scene, x, y, texture, frame)\r\n    {\r\n        Image.call(this, scene, x, y, texture, frame);\r\n\r\n        /**\r\n         * This Game Object's Physics Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Image#body\r\n         * @type {?(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.body = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ArcadeImage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9BcmNhZGVJbWFnZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGtGQUFjO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyRkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL0FyY2FkZUltYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xyXG52YXIgSW1hZ2UgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gQXJjYWRlIFBoeXNpY3MgSW1hZ2UgaXMgYW4gSW1hZ2Ugd2l0aCBhbiBBcmNhZGUgUGh5c2ljcyBib2R5IGFuZCByZWxhdGVkIGNvbXBvbmVudHMuXHJcbiAqIFRoZSBib2R5IGNhbiBiZSBkeW5hbWljIG9yIHN0YXRpYy5cclxuICpcclxuICogVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGFuIEFyY2FkZSBJbWFnZSBhbmQgYW4gQXJjYWRlIFNwcml0ZSBpcyB0aGF0IHlvdSBjYW5ub3QgYW5pbWF0ZSBhbiBBcmNhZGUgSW1hZ2UuXHJcbiAqXHJcbiAqIEBjbGFzcyBJbWFnZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuSW1hZ2VcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkFyY2FkZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkFjY2VsZXJhdGlvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5Bbmd1bGFyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkJvdW5jZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EZWJ1Z1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EcmFnXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkVuYWJsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5GcmljdGlvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5HcmF2aXR5XHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkltbW92YWJsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5NYXNzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuVmVsb2NpdHlcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXBcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKi9cclxudmFyIEFyY2FkZUltYWdlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBJbWFnZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFjY2VsZXJhdGlvbixcclxuICAgICAgICBDb21wb25lbnRzLkFuZ3VsYXIsXHJcbiAgICAgICAgQ29tcG9uZW50cy5Cb3VuY2UsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZWJ1ZyxcclxuICAgICAgICBDb21wb25lbnRzLkRyYWcsXHJcbiAgICAgICAgQ29tcG9uZW50cy5FbmFibGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5GcmljdGlvbixcclxuICAgICAgICBDb21wb25lbnRzLkdyYXZpdHksXHJcbiAgICAgICAgQ29tcG9uZW50cy5JbW1vdmFibGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNzLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLlZlbG9jaXR5XHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQXJjYWRlSW1hZ2UgKHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBJbWFnZS5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgR2FtZSBPYmplY3QncyBQaHlzaWNzIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuSW1hZ2UjYm9keVxyXG4gICAgICAgICAqIEB0eXBlIHs/KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5KX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcmNhZGVJbWFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/ArcadeImage.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/ArcadePhysics.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/ArcadePhysics.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar DistanceSquared = __webpack_require__(/*! ../../math/distance/DistanceSquared */ \"./node_modules/phaser/src/math/distance/DistanceSquared.js\");\r\nvar Factory = __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/arcade/Factory.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Merge = __webpack_require__(/*! ../../utils/object/Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\");\r\nvar OverlapCirc = __webpack_require__(/*! ./components/OverlapCirc */ \"./node_modules/phaser/src/physics/arcade/components/OverlapCirc.js\");\r\nvar OverlapRect = __webpack_require__(/*! ./components/OverlapRect */ \"./node_modules/phaser/src/physics/arcade/components/OverlapRect.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar World = __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/arcade/World.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Arcade Physics Plugin belongs to a Scene and sets up and manages the Scene's physics simulation.\r\n * It also holds some useful methods for moving and rotating Arcade Physics Bodies.\r\n *\r\n * You can access it from within a Scene using `this.physics`.\r\n *\r\n * Arcade Physics uses the Projection Method of collision resolution and separation. While it's fast and suitable\r\n * for 'arcade' style games it lacks stability when multiple objects are in close proximity or resting upon each other.\r\n * The separation that stops two objects penetrating may create a new penetration against a different object. If you\r\n * require a high level of stability please consider using an alternative physics system, such as Matter.js.\r\n *\r\n * @class ArcadePhysics\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this Plugin belongs to.\r\n */\r\nvar ArcadePhysics = new Class({\r\n\r\n    initialize:\r\n\r\n    function ArcadePhysics (scene)\r\n    {\r\n        /**\r\n         * The Scene that this Plugin belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.ArcadePhysics#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Scene's Systems.\r\n         *\r\n         * @name Phaser.Physics.Arcade.ArcadePhysics#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * A configuration object. Union of the `physics.arcade.*` properties of the GameConfig and SceneConfig objects.\r\n         *\r\n         * @name Phaser.Physics.Arcade.ArcadePhysics#config\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = this.getConfig();\r\n\r\n        /**\r\n         * The physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.ArcadePhysics#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world;\r\n\r\n        /**\r\n         * An object holding the Arcade Physics factory methods.\r\n         *\r\n         * @name Phaser.Physics.Arcade.ArcadePhysics#add\r\n         * @type {Phaser.Physics.Arcade.Factory}\r\n         * @since 3.0.0\r\n         */\r\n        this.add;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.world = new World(this.scene, this.config);\r\n        this.add = new Factory(this.world);\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (!this.world)\r\n        {\r\n            this.world = new World(this.scene, this.config);\r\n            this.add = new Factory(this.world);\r\n        }\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.UPDATE, this.world.update, this.world);\r\n        eventEmitter.on(SceneEvents.POST_UPDATE, this.world.postUpdate, this.world);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Creates the physics configuration for the current Scene.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#getConfig\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} The physics configuration.\r\n     */\r\n    getConfig: function ()\r\n    {\r\n        var gameConfig = this.systems.game.config.physics;\r\n        var sceneConfig = this.systems.settings.physics;\r\n\r\n        var config = Merge(\r\n            GetFastValue(sceneConfig, 'arcade', {}),\r\n            GetFastValue(gameConfig, 'arcade', {})\r\n        );\r\n\r\n        return config;\r\n    },\r\n\r\n    /**\r\n     * Tests if Game Objects overlap. See {@link Phaser.Physics.Arcade.World#overlap}\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#overlap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object or array of objects to check.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} [object2] - The second object or array of objects to check, or `undefined`.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they overlap. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {*} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if at least one Game Object overlaps another.\r\n     *\r\n     * @see Phaser.Physics.Arcade.World#overlap\r\n     */\r\n    overlap: function (object1, object2, overlapCallback, processCallback, callbackContext)\r\n    {\r\n        if (overlapCallback === undefined) { overlapCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = overlapCallback; }\r\n\r\n        return this.world.collideObjects(object1, object2, overlapCallback, processCallback, callbackContext, true);\r\n    },\r\n\r\n    /**\r\n     * Performs a collision check and separation between the two physics enabled objects given, which can be single\r\n     * Game Objects, arrays of Game Objects, Physics Groups, arrays of Physics Groups or normal Groups.\r\n     *\r\n     * If you don't require separation then use {@link #overlap} instead.\r\n     *\r\n     * If two Groups or arrays are passed, each member of one will be tested against each member of the other.\r\n     *\r\n     * If **only** one Group is passed (as `object1`), each member of the Group will be collided against the other members.\r\n     *\r\n     * If **only** one Array is passed, the array is iterated and every element in it is tested against the others.\r\n     *\r\n     * Two callbacks can be provided. The `collideCallback` is invoked if a collision occurs and the two colliding\r\n     * objects are passed to it.\r\n     *\r\n     * Arcade Physics uses the Projection Method of collision resolution and separation. While it's fast and suitable\r\n     * for 'arcade' style games it lacks stability when multiple objects are in close proximity or resting upon each other.\r\n     * The separation that stops two objects penetrating may create a new penetration against a different object. If you\r\n     * require a high level of stability please consider using an alternative physics system, such as Matter.js.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#collide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object or array of objects to check.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} [object2] - The second object or array of objects to check, or `undefined`.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {*} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if any overlapping Game Objects were separated, otherwise false.\r\n     *\r\n     * @see Phaser.Physics.Arcade.World#collide\r\n     */\r\n    collide: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (collideCallback === undefined) { collideCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = collideCallback; }\r\n\r\n        return this.world.collideObjects(object1, object2, collideCallback, processCallback, callbackContext, false);\r\n    },\r\n\r\n    /**\r\n     * This advanced method is specifically for testing for collision between a single Sprite and an array of Tile objects.\r\n     *\r\n     * You should generally use the `collide` method instead, with a Sprite vs. a Tilemap Layer, as that will perform\r\n     * tile filtering and culling for you, as well as handle the interesting face collision automatically.\r\n     *\r\n     * This method is offered for those who would like to check for collision with specific Tiles in a layer, without\r\n     * having to set any collision attributes on the tiles in question. This allows you to perform quick dynamic collisions\r\n     * on small sets of Tiles. As such, no culling or checks are made to the array of Tiles given to this method,\r\n     * you should filter them before passing them to this method.\r\n     *\r\n     * Important: Use of this method skips the `interesting faces` system that Tilemap Layers use. This means if you have\r\n     * say a row or column of tiles, and you jump into, or walk over them, it's possible to get stuck on the edges of the\r\n     * tiles as the interesting face calculations are skipped. However, for quick-fire small collision set tests on\r\n     * dynamic maps, this method can prove very useful.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#collideTiles\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_COLLIDE\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {Phaser.Tilemaps.Tile[]} tiles - An array of Tiles to check for collision against.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideTiles: function (sprite, tiles, collideCallback, processCallback, callbackContext)\r\n    {\r\n        return this.world.collideTiles(sprite, tiles, collideCallback, processCallback, callbackContext);\r\n    },\r\n\r\n    /**\r\n     * This advanced method is specifically for testing for overlaps between a single Sprite and an array of Tile objects.\r\n     *\r\n     * You should generally use the `overlap` method instead, with a Sprite vs. a Tilemap Layer, as that will perform\r\n     * tile filtering and culling for you, as well as handle the interesting face collision automatically.\r\n     *\r\n     * This method is offered for those who would like to check for overlaps with specific Tiles in a layer, without\r\n     * having to set any collision attributes on the tiles in question. This allows you to perform quick dynamic overlap\r\n     * tests on small sets of Tiles. As such, no culling or checks are made to the array of Tiles given to this method,\r\n     * you should filter them before passing them to this method.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#overlapTiles\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_OVERLAP\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {Phaser.Tilemaps.Tile[]} tiles - An array of Tiles to check for collision against.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects overlap.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    overlapTiles: function (sprite, tiles, collideCallback, processCallback, callbackContext)\r\n    {\r\n        return this.world.overlapTiles(sprite, tiles, collideCallback, processCallback, callbackContext);\r\n    },\r\n\r\n    /**\r\n     * Pauses the simulation.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} The simulation.\r\n     */\r\n    pause: function ()\r\n    {\r\n        return this.world.pause();\r\n    },\r\n\r\n    /**\r\n     * Resumes the simulation (if paused).\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} The simulation.\r\n     */\r\n    resume: function ()\r\n    {\r\n        return this.world.resume();\r\n    },\r\n\r\n    /**\r\n     * Sets the acceleration.x/y property on the game object so it will move towards the x/y coordinates at the given rate (in pixels per second squared)\r\n     *\r\n     * You must give a maximum speed value, beyond which the game object won't go any faster.\r\n     *\r\n     * Note: The game object does not continuously track the target. If the target changes location during transit the game object will not modify its course.\r\n     * Note: The game object doesn't stop moving once it reaches the destination coordinates.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#accelerateTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Any Game Object with an Arcade Physics body.\r\n     * @param {number} x - The x coordinate to accelerate towards.\r\n     * @param {number} y - The y coordinate to accelerate towards.\r\n     * @param {number} [speed=60] - The acceleration (change in speed) in pixels per second squared.\r\n     * @param {number} [xSpeedMax=500] - The maximum x velocity the game object can reach.\r\n     * @param {number} [ySpeedMax=500] - The maximum y velocity the game object can reach.\r\n     *\r\n     * @return {number} The angle (in radians) that the object should be visually set to in order to match its new velocity.\r\n     */\r\n    accelerateTo: function (gameObject, x, y, speed, xSpeedMax, ySpeedMax)\r\n    {\r\n        if (speed === undefined) { speed = 60; }\r\n\r\n        var angle = Math.atan2(y - gameObject.y, x - gameObject.x);\r\n\r\n        gameObject.body.acceleration.setToPolar(angle, speed);\r\n\r\n        if (xSpeedMax !== undefined && ySpeedMax !== undefined)\r\n        {\r\n            gameObject.body.maxVelocity.set(xSpeedMax, ySpeedMax);\r\n        }\r\n\r\n        return angle;\r\n    },\r\n\r\n    /**\r\n     * Sets the acceleration.x/y property on the game object so it will move towards the x/y coordinates at the given rate (in pixels per second squared)\r\n     *\r\n     * You must give a maximum speed value, beyond which the game object won't go any faster.\r\n     *\r\n     * Note: The game object does not continuously track the target. If the target changes location during transit the game object will not modify its course.\r\n     * Note: The game object doesn't stop moving once it reaches the destination coordinates.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#accelerateToObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Any Game Object with an Arcade Physics body.\r\n     * @param {Phaser.GameObjects.GameObject} destination - The Game Object to move towards. Can be any object but must have visible x/y properties.\r\n     * @param {number} [speed=60] - The acceleration (change in speed) in pixels per second squared.\r\n     * @param {number} [xSpeedMax=500] - The maximum x velocity the game object can reach.\r\n     * @param {number} [ySpeedMax=500] - The maximum y velocity the game object can reach.\r\n     *\r\n     * @return {number} The angle (in radians) that the object should be visually set to in order to match its new velocity.\r\n     */\r\n    accelerateToObject: function (gameObject, destination, speed, xSpeedMax, ySpeedMax)\r\n    {\r\n        return this.accelerateTo(gameObject, destination.x, destination.y, speed, xSpeedMax, ySpeedMax);\r\n    },\r\n\r\n    /**\r\n     * Finds the Body or Game Object closest to a source point or object.\r\n     *\r\n     * If a `targets` argument is passed, this method finds the closest of those.\r\n     * The targets can be Arcade Physics Game Objects, Dynamic Bodies, or Static Bodies.\r\n     *\r\n     * If no `targets` argument is passed, this method finds the closest Dynamic Body.\r\n     *\r\n     * If two or more targets are the exact same distance from the source point, only the first target\r\n     * is returned.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#closest\r\n     * @since 3.0.0\r\n     *\r\n     * @param {any} source - Any object with public `x` and `y` properties, such as a Game Object or Geometry object.\r\n     * @param {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[]|Phaser.GameObjects.GameObject[])} [targets] - The targets.\r\n     *\r\n     * @return {?(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody|Phaser.GameObjects.GameObject)} The target closest to the given source point.\r\n     */\r\n    closest: function (source, targets)\r\n    {\r\n        if (!targets)\r\n        {\r\n            targets = this.world.bodies.entries;\r\n        }\r\n\r\n        var min = Number.MAX_VALUE;\r\n        var closest = null;\r\n        var x = source.x;\r\n        var y = source.y;\r\n        var len = targets.length;\r\n\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            var target = targets[i];\r\n            var body = target.body || target;\r\n\r\n            if (source === target || source === body || source === body.gameObject || source === body.center)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var distance = DistanceSquared(x, y, body.center.x, body.center.y);\r\n\r\n            if (distance < min)\r\n            {\r\n                closest = target;\r\n                min = distance;\r\n            }\r\n        }\r\n\r\n        return closest;\r\n    },\r\n\r\n    /**\r\n     * Finds the Body or Game Object farthest from a source point or object.\r\n     *\r\n     * If a `targets` argument is passed, this method finds the farthest of those.\r\n     * The targets can be Arcade Physics Game Objects, Dynamic Bodies, or Static Bodies.\r\n     *\r\n     * If no `targets` argument is passed, this method finds the farthest Dynamic Body.\r\n     *\r\n     * If two or more targets are the exact same distance from the source point, only the first target\r\n     * is returned.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#furthest\r\n     * @since 3.0.0\r\n     *\r\n     * @param {any} source - Any object with public `x` and `y` properties, such as a Game Object or Geometry object.\r\n     * @param {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[]|Phaser.GameObjects.GameObject[])} [targets] - The targets.\r\n     *\r\n     * @return {?(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody|Phaser.GameObjects.GameObject)} The target farthest from the given source point.\r\n     */\r\n    furthest: function (source, targets)\r\n    {\r\n        if (!targets)\r\n        {\r\n            targets = this.world.bodies.entries;\r\n        }\r\n\r\n        var max = -1;\r\n        var farthest = null;\r\n        var x = source.x;\r\n        var y = source.y;\r\n        var len = targets.length;\r\n\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            var target = targets[i];\r\n            var body = target.body || target;\r\n\r\n            if (source === target || source === body || source === body.gameObject || source === body.center)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var distance = DistanceSquared(x, y, body.center.x, body.center.y);\r\n\r\n            if (distance > max)\r\n            {\r\n                farthest = target;\r\n                max = distance;\r\n            }\r\n\r\n        }\r\n\r\n        return farthest;\r\n    },\r\n\r\n    /**\r\n     * Move the given display object towards the x/y coordinates at a steady velocity.\r\n     * If you specify a maxTime then it will adjust the speed (over-writing what you set) so it arrives at the destination in that number of seconds.\r\n     * Timings are approximate due to the way browser timers work. Allow for a variance of +- 50ms.\r\n     * Note: The display object does not continuously track the target. If the target changes location during transit the display object will not modify its course.\r\n     * Note: The display object doesn't stop moving once it reaches the destination coordinates.\r\n     * Note: Doesn't take into account acceleration, maxVelocity or drag (if you've set drag or acceleration too high this object may not move at all)\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#moveTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Any Game Object with an Arcade Physics body.\r\n     * @param {number} x - The x coordinate to move towards.\r\n     * @param {number} y - The y coordinate to move towards.\r\n     * @param {number} [speed=60] - The speed it will move, in pixels per second (default is 60 pixels/sec)\r\n     * @param {number} [maxTime=0] - Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the object will arrive at destination in the given number of ms.\r\n     *\r\n     * @return {number} The angle (in radians) that the object should be visually set to in order to match its new velocity.\r\n     */\r\n    moveTo: function (gameObject, x, y, speed, maxTime)\r\n    {\r\n        if (speed === undefined) { speed = 60; }\r\n        if (maxTime === undefined) { maxTime = 0; }\r\n\r\n        var angle = Math.atan2(y - gameObject.y, x - gameObject.x);\r\n\r\n        if (maxTime > 0)\r\n        {\r\n            //  We know how many pixels we need to move, but how fast?\r\n            speed = DistanceBetween(gameObject.x, gameObject.y, x, y) / (maxTime / 1000);\r\n        }\r\n\r\n        gameObject.body.velocity.setToPolar(angle, speed);\r\n\r\n        return angle;\r\n    },\r\n\r\n    /**\r\n     * Move the given display object towards the destination object at a steady velocity.\r\n     * If you specify a maxTime then it will adjust the speed (overwriting what you set) so it arrives at the destination in that number of seconds.\r\n     * Timings are approximate due to the way browser timers work. Allow for a variance of +- 50ms.\r\n     * Note: The display object does not continuously track the target. If the target changes location during transit the display object will not modify its course.\r\n     * Note: The display object doesn't stop moving once it reaches the destination coordinates.\r\n     * Note: Doesn't take into account acceleration, maxVelocity or drag (if you've set drag or acceleration too high this object may not move at all)\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#moveToObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Any Game Object with an Arcade Physics body.\r\n     * @param {object} destination - Any object with public `x` and `y` properties, such as a Game Object or Geometry object.\r\n     * @param {number} [speed=60] - The speed it will move, in pixels per second (default is 60 pixels/sec)\r\n     * @param {number} [maxTime=0] - Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the object will arrive at destination in the given number of ms.\r\n     *\r\n     * @return {number} The angle (in radians) that the object should be visually set to in order to match its new velocity.\r\n     */\r\n    moveToObject: function (gameObject, destination, speed, maxTime)\r\n    {\r\n        return this.moveTo(gameObject, destination.x, destination.y, speed, maxTime);\r\n    },\r\n\r\n    /**\r\n     * Given the angle (in degrees) and speed calculate the velocity and return it as a vector, or set it to the given vector object.\r\n     * One way to use this is: velocityFromAngle(angle, 200, sprite.body.velocity) which will set the values directly to the sprite's velocity and not create a new vector object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#velocityFromAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} angle - The angle in degrees calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative)\r\n     * @param {number} [speed=60] - The speed it will move, in pixels per second squared.\r\n     * @param {Phaser.Math.Vector2} [vec2] - The Vector2 in which the x and y properties will be set to the calculated velocity.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The Vector2 that stores the velocity.\r\n     */\r\n    velocityFromAngle: function (angle, speed, vec2)\r\n    {\r\n        if (speed === undefined) { speed = 60; }\r\n        if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n        return vec2.setToPolar(DegToRad(angle), speed);\r\n    },\r\n\r\n    /**\r\n     * Given the rotation (in radians) and speed calculate the velocity and return it as a vector, or set it to the given vector object.\r\n     * One way to use this is: velocityFromRotation(rotation, 200, sprite.body.velocity) which will set the values directly to the sprite's velocity and not create a new vector object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#velocityFromRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} rotation - The angle in radians.\r\n     * @param {number} [speed=60] - The speed it will move, in pixels per second squared\r\n     * @param {Phaser.Math.Vector2} [vec2] - The Vector2 in which the x and y properties will be set to the calculated velocity.\r\n     *\r\n     * @return {Phaser.Math.Vector2} The Vector2 that stores the velocity.\r\n     */\r\n    velocityFromRotation: function (rotation, speed, vec2)\r\n    {\r\n        if (speed === undefined) { speed = 60; }\r\n        if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n        return vec2.setToPolar(rotation, speed);\r\n    },\r\n\r\n    /**\r\n     * This method will search the given rectangular area and return an array of all physics bodies that\r\n     * overlap with it. It can return either Dynamic, Static bodies or a mixture of both.\r\n     *\r\n     * A body only has to intersect with the search area to be considered, it doesn't have to be fully\r\n     * contained within it.\r\n     *\r\n     * If Arcade Physics is set to use the RTree (which it is by default) then the search for is extremely fast,\r\n     * otherwise the search is O(N) for Dynamic Bodies.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#overlapRect\r\n     * @since 3.17.0\r\n     *\r\n     * @param {number} x - The top-left x coordinate of the area to search within.\r\n     * @param {number} y - The top-left y coordinate of the area to search within.\r\n     * @param {number} width - The width of the area to search within.\r\n     * @param {number} height - The height of the area to search within.\r\n     * @param {boolean} [includeDynamic=true] - Should the search include Dynamic Bodies?\r\n     * @param {boolean} [includeStatic=false] - Should the search include Static Bodies?\r\n     *\r\n     * @return {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[])} An array of bodies that overlap with the given area.\r\n     */\r\n    overlapRect: function (x, y, width, height, includeDynamic, includeStatic)\r\n    {\r\n        return OverlapRect(this.world, x, y, width, height, includeDynamic, includeStatic);\r\n    },\r\n\r\n    /**\r\n     * This method will search the given circular area and return an array of all physics bodies that\r\n     * overlap with it. It can return either Dynamic, Static bodies or a mixture of both.\r\n     *\r\n     * A body only has to intersect with the search area to be considered, it doesn't have to be fully\r\n     * contained within it.\r\n     *\r\n     * If Arcade Physics is set to use the RTree (which it is by default) then the search is rather fast,\r\n     * otherwise the search is O(N) for Dynamic Bodies.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#overlapCirc\r\n     * @since 3.21.0\r\n     *\r\n     * @param {number} x - The x coordinate of the center of the area to search within.\r\n     * @param {number} y - The y coordinate of the center of the area to search within.\r\n     * @param {number} radius - The radius of the area to search within.\r\n     * @param {boolean} [includeDynamic=true] - Should the search include Dynamic Bodies?\r\n     * @param {boolean} [includeStatic=false] - Should the search include Static Bodies?\r\n     *\r\n     * @return {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[])} An array of bodies that overlap with the given area.\r\n     */\r\n    overlapCirc: function (x, y, radius, includeDynamic, includeStatic)\r\n    {\r\n        return OverlapCirc(this.world, x, y, radius, includeDynamic, includeStatic);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        if (!this.world)\r\n        {\r\n            //  Already destroyed\r\n            return;\r\n        }\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.UPDATE, this.world.update, this.world);\r\n        eventEmitter.off(SceneEvents.POST_UPDATE, this.world.postUpdate, this.world);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        this.add.destroy();\r\n        this.world.destroy();\r\n\r\n        this.add = null;\r\n        this.world = null;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Physics.Arcade.ArcadePhysics#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('ArcadePhysics', ArcadePhysics, 'arcadePhysics');\r\n\r\nmodule.exports = ArcadePhysics;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9BcmNhZGVQaHlzaWNzLmpzPzJhZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVFQUFxQjtBQUM1QyxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDbkUsc0JBQXNCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ25FLGNBQWMsbUJBQU8sQ0FBQyxzRUFBVztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsWUFBWSxtQkFBTyxDQUFDLGlGQUEwQjtBQUM5QyxrQkFBa0IsbUJBQU8sQ0FBQyxvR0FBMEI7QUFDcEQsa0JBQWtCLG1CQUFPLENBQUMsb0dBQTBCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7QUFDOUMsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsa0VBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRCxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQ0FBK0M7QUFDOUQsZUFBZSwrQ0FBK0M7QUFDOUQsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx3QkFBd0I7QUFDcEUsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsbUNBQW1DOztBQUUvRTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsZUFBZTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RCxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsd0JBQXdCO0FBQ3BFLDRDQUE0QyxtQ0FBbUM7O0FBRS9FO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSx1QkFBdUI7QUFDdEMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHVCQUF1QjtBQUN0QyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsUUFBUSxrREFBa0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7O0FBRTlDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQixlQUFlLGtHQUFrRztBQUNqSDtBQUNBLGdCQUFnQiw2RkFBNkY7QUFDN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CLGVBQWUsa0dBQWtHO0FBQ2pIO0FBQ0EsZ0JBQWdCLDZGQUE2RjtBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7QUFDOUMsb0NBQW9DLGFBQWE7O0FBRWpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxZQUFZO0FBQzlDLGlDQUFpQyxzQkFBc0I7O0FBRXZEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxZQUFZO0FBQzlDLGlDQUFpQyxzQkFBc0I7O0FBRXZEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtFQUFrRTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtFQUFrRTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL0FyY2FkZVBoeXNpY3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEZWdUb1JhZCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvRGVnVG9SYWQnKTtcclxudmFyIERpc3RhbmNlQmV0d2VlbiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvZGlzdGFuY2UvRGlzdGFuY2VCZXR3ZWVuJyk7XHJcbnZhciBEaXN0YW5jZVNxdWFyZWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlU3F1YXJlZCcpO1xyXG52YXIgRmFjdG9yeSA9IHJlcXVpcmUoJy4vRmFjdG9yeScpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgTWVyZ2UgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvTWVyZ2UnKTtcclxudmFyIE92ZXJsYXBDaXJjID0gcmVxdWlyZSgnLi9jb21wb25lbnRzL092ZXJsYXBDaXJjJyk7XHJcbnZhciBPdmVybGFwUmVjdCA9IHJlcXVpcmUoJy4vY29tcG9uZW50cy9PdmVybGFwUmVjdCcpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi8uLi9wbHVnaW5zL1BsdWdpbkNhY2hlJyk7XHJcbnZhciBTY2VuZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL3NjZW5lL2V2ZW50cycpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG52YXIgV29ybGQgPSByZXF1aXJlKCcuL1dvcmxkJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQXJjYWRlIFBoeXNpY3MgUGx1Z2luIGJlbG9uZ3MgdG8gYSBTY2VuZSBhbmQgc2V0cyB1cCBhbmQgbWFuYWdlcyB0aGUgU2NlbmUncyBwaHlzaWNzIHNpbXVsYXRpb24uXHJcbiAqIEl0IGFsc28gaG9sZHMgc29tZSB1c2VmdWwgbWV0aG9kcyBmb3IgbW92aW5nIGFuZCByb3RhdGluZyBBcmNhZGUgUGh5c2ljcyBCb2RpZXMuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWNjZXNzIGl0IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmcgYHRoaXMucGh5c2ljc2AuXHJcbiAqXHJcbiAqIEFyY2FkZSBQaHlzaWNzIHVzZXMgdGhlIFByb2plY3Rpb24gTWV0aG9kIG9mIGNvbGxpc2lvbiByZXNvbHV0aW9uIGFuZCBzZXBhcmF0aW9uLiBXaGlsZSBpdCdzIGZhc3QgYW5kIHN1aXRhYmxlXHJcbiAqIGZvciAnYXJjYWRlJyBzdHlsZSBnYW1lcyBpdCBsYWNrcyBzdGFiaWxpdHkgd2hlbiBtdWx0aXBsZSBvYmplY3RzIGFyZSBpbiBjbG9zZSBwcm94aW1pdHkgb3IgcmVzdGluZyB1cG9uIGVhY2ggb3RoZXIuXHJcbiAqIFRoZSBzZXBhcmF0aW9uIHRoYXQgc3RvcHMgdHdvIG9iamVjdHMgcGVuZXRyYXRpbmcgbWF5IGNyZWF0ZSBhIG5ldyBwZW5ldHJhdGlvbiBhZ2FpbnN0IGEgZGlmZmVyZW50IG9iamVjdC4gSWYgeW91XHJcbiAqIHJlcXVpcmUgYSBoaWdoIGxldmVsIG9mIHN0YWJpbGl0eSBwbGVhc2UgY29uc2lkZXIgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgcGh5c2ljcyBzeXN0ZW0sIHN1Y2ggYXMgTWF0dGVyLmpzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQXJjYWRlUGh5c2ljc1xyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuQXJjYWRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRoYXQgdGhpcyBQbHVnaW4gYmVsb25ncyB0by5cclxuICovXHJcbnZhciBBcmNhZGVQaHlzaWNzID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFyY2FkZVBoeXNpY3MgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0aGF0IHRoaXMgUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUncyBTeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3Mjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVbmlvbiBvZiB0aGUgYHBoeXNpY3MuYXJjYWRlLipgIHByb3BlcnRpZXMgb2YgdGhlIEdhbWVDb25maWcgYW5kIFNjZW5lQ29uZmlnIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNjb25maWdcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBoeXNpY3Mgc2ltdWxhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgaG9sZGluZyB0aGUgQXJjYWRlIFBoeXNpY3MgZmFjdG9yeSBtZXRob2RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3MjYWRkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5GYWN0b3J5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWRkO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjFcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndvcmxkID0gbmV3IFdvcmxkKHRoaXMuc2NlbmUsIHRoaXMuY29uZmlnKTtcclxuICAgICAgICB0aGlzLmFkZCA9IG5ldyBGYWN0b3J5KHRoaXMud29ybGQpO1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMud29ybGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkID0gbmV3IFdvcmxkKHRoaXMuc2NlbmUsIHRoaXMuY29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy5hZGQgPSBuZXcgRmFjdG9yeSh0aGlzLndvcmxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLndvcmxkLnVwZGF0ZSwgdGhpcy53b3JsZCk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKFNjZW5lRXZlbnRzLlBPU1RfVVBEQVRFLCB0aGlzLndvcmxkLnBvc3RVcGRhdGUsIHRoaXMud29ybGQpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbmNlKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBwaHlzaWNzIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXJyZW50IFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3MjZ2V0Q29uZmlnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBwaHlzaWNzIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGdldENvbmZpZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZUNvbmZpZyA9IHRoaXMuc3lzdGVtcy5nYW1lLmNvbmZpZy5waHlzaWNzO1xyXG4gICAgICAgIHZhciBzY2VuZUNvbmZpZyA9IHRoaXMuc3lzdGVtcy5zZXR0aW5ncy5waHlzaWNzO1xyXG5cclxuICAgICAgICB2YXIgY29uZmlnID0gTWVyZ2UoXHJcbiAgICAgICAgICAgIEdldEZhc3RWYWx1ZShzY2VuZUNvbmZpZywgJ2FyY2FkZScsIHt9KSxcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKGdhbWVDb25maWcsICdhcmNhZGUnLCB7fSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlc3RzIGlmIEdhbWUgT2JqZWN0cyBvdmVybGFwLiBTZWUge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNvdmVybGFwfVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3Mjb3ZlcmxhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QxIC0gVGhlIGZpcnN0IG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBbb2JqZWN0Ml0gLSBUaGUgc2Vjb25kIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIHRvIGNoZWNrLCBvciBgdW5kZWZpbmVkYC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbY29sbGlkZUNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGlmIHRoZSBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGxldHMgeW91IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYWdhaW5zdCB0aGUgdHdvIG9iamVjdHMgaWYgdGhleSBvdmVybGFwLiBJZiB0aGlzIGlzIHNldCB0aGVuIGBjb2xsaWRlQ2FsbGJhY2tgIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxsYmFjayByZXR1cm5zIGB0cnVlYC5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGNhbGxiYWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGF0IGxlYXN0IG9uZSBHYW1lIE9iamVjdCBvdmVybGFwcyBhbm90aGVyLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI292ZXJsYXBcclxuICAgICAqL1xyXG4gICAgb3ZlcmxhcDogZnVuY3Rpb24gKG9iamVjdDEsIG9iamVjdDIsIG92ZXJsYXBDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG92ZXJsYXBDYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IG92ZXJsYXBDYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAocHJvY2Vzc0NhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgcHJvY2Vzc0NhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChjYWxsYmFja0NvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFja0NvbnRleHQgPSBvdmVybGFwQ2FsbGJhY2s7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGQuY29sbGlkZU9iamVjdHMob2JqZWN0MSwgb2JqZWN0Miwgb3ZlcmxhcENhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgYSBjb2xsaXNpb24gY2hlY2sgYW5kIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgdHdvIHBoeXNpY3MgZW5hYmxlZCBvYmplY3RzIGdpdmVuLCB3aGljaCBjYW4gYmUgc2luZ2xlXHJcbiAgICAgKiBHYW1lIE9iamVjdHMsIGFycmF5cyBvZiBHYW1lIE9iamVjdHMsIFBoeXNpY3MgR3JvdXBzLCBhcnJheXMgb2YgUGh5c2ljcyBHcm91cHMgb3Igbm9ybWFsIEdyb3Vwcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZG9uJ3QgcmVxdWlyZSBzZXBhcmF0aW9uIHRoZW4gdXNlIHtAbGluayAjb3ZlcmxhcH0gaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0d28gR3JvdXBzIG9yIGFycmF5cyBhcmUgcGFzc2VkLCBlYWNoIG1lbWJlciBvZiBvbmUgd2lsbCBiZSB0ZXN0ZWQgYWdhaW5zdCBlYWNoIG1lbWJlciBvZiB0aGUgb3RoZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgKipvbmx5Kiogb25lIEdyb3VwIGlzIHBhc3NlZCAoYXMgYG9iamVjdDFgKSwgZWFjaCBtZW1iZXIgb2YgdGhlIEdyb3VwIHdpbGwgYmUgY29sbGlkZWQgYWdhaW5zdCB0aGUgb3RoZXIgbWVtYmVycy5cclxuICAgICAqXHJcbiAgICAgKiBJZiAqKm9ubHkqKiBvbmUgQXJyYXkgaXMgcGFzc2VkLCB0aGUgYXJyYXkgaXMgaXRlcmF0ZWQgYW5kIGV2ZXJ5IGVsZW1lbnQgaW4gaXQgaXMgdGVzdGVkIGFnYWluc3QgdGhlIG90aGVycy5cclxuICAgICAqXHJcbiAgICAgKiBUd28gY2FsbGJhY2tzIGNhbiBiZSBwcm92aWRlZC4gVGhlIGBjb2xsaWRlQ2FsbGJhY2tgIGlzIGludm9rZWQgaWYgYSBjb2xsaXNpb24gb2NjdXJzIGFuZCB0aGUgdHdvIGNvbGxpZGluZ1xyXG4gICAgICogb2JqZWN0cyBhcmUgcGFzc2VkIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEFyY2FkZSBQaHlzaWNzIHVzZXMgdGhlIFByb2plY3Rpb24gTWV0aG9kIG9mIGNvbGxpc2lvbiByZXNvbHV0aW9uIGFuZCBzZXBhcmF0aW9uLiBXaGlsZSBpdCdzIGZhc3QgYW5kIHN1aXRhYmxlXHJcbiAgICAgKiBmb3IgJ2FyY2FkZScgc3R5bGUgZ2FtZXMgaXQgbGFja3Mgc3RhYmlsaXR5IHdoZW4gbXVsdGlwbGUgb2JqZWN0cyBhcmUgaW4gY2xvc2UgcHJveGltaXR5IG9yIHJlc3RpbmcgdXBvbiBlYWNoIG90aGVyLlxyXG4gICAgICogVGhlIHNlcGFyYXRpb24gdGhhdCBzdG9wcyB0d28gb2JqZWN0cyBwZW5ldHJhdGluZyBtYXkgY3JlYXRlIGEgbmV3IHBlbmV0cmF0aW9uIGFnYWluc3QgYSBkaWZmZXJlbnQgb2JqZWN0LiBJZiB5b3VcclxuICAgICAqIHJlcXVpcmUgYSBoaWdoIGxldmVsIG9mIHN0YWJpbGl0eSBwbGVhc2UgY29uc2lkZXIgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgcGh5c2ljcyBzeXN0ZW0sIHN1Y2ggYXMgTWF0dGVyLmpzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3MjY29sbGlkZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QxIC0gVGhlIGZpcnN0IG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBbb2JqZWN0Ml0gLSBUaGUgc2Vjb25kIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIHRvIGNoZWNrLCBvciBgdW5kZWZpbmVkYC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbY29sbGlkZUNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGlmIHRoZSBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGxldHMgeW91IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYWdhaW5zdCB0aGUgdHdvIG9iamVjdHMgaWYgdGhleSBjb2xsaWRlLiBJZiB0aGlzIGlzIHNldCB0aGVuIGBjb2xsaWRlQ2FsbGJhY2tgIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxsYmFjayByZXR1cm5zIGB0cnVlYC5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGNhbGxiYWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFueSBvdmVybGFwcGluZyBHYW1lIE9iamVjdHMgd2VyZSBzZXBhcmF0ZWQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIChvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb2xsaWRlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjb2xsaWRlQ2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKHByb2Nlc3NDYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IHByb2Nlc3NDYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAoY2FsbGJhY2tDb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2tDb250ZXh0ID0gY29sbGlkZUNhbGxiYWNrOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLndvcmxkLmNvbGxpZGVPYmplY3RzKG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGFkdmFuY2VkIG1ldGhvZCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgZm9yIGNvbGxpc2lvbiBiZXR3ZWVuIGEgc2luZ2xlIFNwcml0ZSBhbmQgYW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IHVzZSB0aGUgYGNvbGxpZGVgIG1ldGhvZCBpbnN0ZWFkLCB3aXRoIGEgU3ByaXRlIHZzLiBhIFRpbGVtYXAgTGF5ZXIsIGFzIHRoYXQgd2lsbCBwZXJmb3JtXHJcbiAgICAgKiB0aWxlIGZpbHRlcmluZyBhbmQgY3VsbGluZyBmb3IgeW91LCBhcyB3ZWxsIGFzIGhhbmRsZSB0aGUgaW50ZXJlc3RpbmcgZmFjZSBjb2xsaXNpb24gYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvZmZlcmVkIGZvciB0aG9zZSB3aG8gd291bGQgbGlrZSB0byBjaGVjayBmb3IgY29sbGlzaW9uIHdpdGggc3BlY2lmaWMgVGlsZXMgaW4gYSBsYXllciwgd2l0aG91dFxyXG4gICAgICogaGF2aW5nIHRvIHNldCBhbnkgY29sbGlzaW9uIGF0dHJpYnV0ZXMgb24gdGhlIHRpbGVzIGluIHF1ZXN0aW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBxdWljayBkeW5hbWljIGNvbGxpc2lvbnNcclxuICAgICAqIG9uIHNtYWxsIHNldHMgb2YgVGlsZXMuIEFzIHN1Y2gsIG5vIGN1bGxpbmcgb3IgY2hlY2tzIGFyZSBtYWRlIHRvIHRoZSBhcnJheSBvZiBUaWxlcyBnaXZlbiB0byB0aGlzIG1ldGhvZCxcclxuICAgICAqIHlvdSBzaG91bGQgZmlsdGVyIHRoZW0gYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBJbXBvcnRhbnQ6IFVzZSBvZiB0aGlzIG1ldGhvZCBza2lwcyB0aGUgYGludGVyZXN0aW5nIGZhY2VzYCBzeXN0ZW0gdGhhdCBUaWxlbWFwIExheWVycyB1c2UuIFRoaXMgbWVhbnMgaWYgeW91IGhhdmVcclxuICAgICAqIHNheSBhIHJvdyBvciBjb2x1bW4gb2YgdGlsZXMsIGFuZCB5b3UganVtcCBpbnRvLCBvciB3YWxrIG92ZXIgdGhlbSwgaXQncyBwb3NzaWJsZSB0byBnZXQgc3R1Y2sgb24gdGhlIGVkZ2VzIG9mIHRoZVxyXG4gICAgICogdGlsZXMgYXMgdGhlIGludGVyZXN0aW5nIGZhY2UgY2FsY3VsYXRpb25zIGFyZSBza2lwcGVkLiBIb3dldmVyLCBmb3IgcXVpY2stZmlyZSBzbWFsbCBjb2xsaXNpb24gc2V0IHRlc3RzIG9uXHJcbiAgICAgKiBkeW5hbWljIG1hcHMsIHRoaXMgbWV0aG9kIGNhbiBwcm92ZSB2ZXJ5IHVzZWZ1bC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI2NvbGxpZGVUaWxlc1xyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjVElMRV9DT0xMSURFXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3ByaXRlIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSB0aWxlcyAtIEFuIGFycmF5IG9mIFRpbGVzIHRvIGNoZWNrIGZvciBjb2xsaXNpb24gYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbY29sbGlkZUNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGlmIHRoZSBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGxldHMgeW91IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYWdhaW5zdCB0aGUgdHdvIG9iamVjdHMgaWYgdGhleSBjb2xsaWRlLiBJZiB0aGlzIGlzIHNldCB0aGVuIGBjb2xsaWRlQ2FsbGJhY2tgIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxsYmFjayByZXR1cm5zIGB0cnVlYC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY2FsbGJhY2tDb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJ1biB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYW55IG9iamVjdHMgb3ZlcmxhcCAod2l0aCBgb3ZlcmxhcE9ubHlgKTsgb3IgdHJ1ZSBpZiBhbnkgb3ZlcmxhcHBpbmcgb2JqZWN0cyB3ZXJlIHNlcGFyYXRlZC5cclxuICAgICAqL1xyXG4gICAgY29sbGlkZVRpbGVzOiBmdW5jdGlvbiAoc3ByaXRlLCB0aWxlcywgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53b3JsZC5jb2xsaWRlVGlsZXMoc3ByaXRlLCB0aWxlcywgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBhZHZhbmNlZCBtZXRob2QgaXMgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIGZvciBvdmVybGFwcyBiZXR3ZWVuIGEgc2luZ2xlIFNwcml0ZSBhbmQgYW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IHVzZSB0aGUgYG92ZXJsYXBgIG1ldGhvZCBpbnN0ZWFkLCB3aXRoIGEgU3ByaXRlIHZzLiBhIFRpbGVtYXAgTGF5ZXIsIGFzIHRoYXQgd2lsbCBwZXJmb3JtXHJcbiAgICAgKiB0aWxlIGZpbHRlcmluZyBhbmQgY3VsbGluZyBmb3IgeW91LCBhcyB3ZWxsIGFzIGhhbmRsZSB0aGUgaW50ZXJlc3RpbmcgZmFjZSBjb2xsaXNpb24gYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvZmZlcmVkIGZvciB0aG9zZSB3aG8gd291bGQgbGlrZSB0byBjaGVjayBmb3Igb3ZlcmxhcHMgd2l0aCBzcGVjaWZpYyBUaWxlcyBpbiBhIGxheWVyLCB3aXRob3V0XHJcbiAgICAgKiBoYXZpbmcgdG8gc2V0IGFueSBjb2xsaXNpb24gYXR0cmlidXRlcyBvbiB0aGUgdGlsZXMgaW4gcXVlc3Rpb24uIFRoaXMgYWxsb3dzIHlvdSB0byBwZXJmb3JtIHF1aWNrIGR5bmFtaWMgb3ZlcmxhcFxyXG4gICAgICogdGVzdHMgb24gc21hbGwgc2V0cyBvZiBUaWxlcy4gQXMgc3VjaCwgbm8gY3VsbGluZyBvciBjaGVja3MgYXJlIG1hZGUgdG8gdGhlIGFycmF5IG9mIFRpbGVzIGdpdmVuIHRvIHRoaXMgbWV0aG9kLFxyXG4gICAgICogeW91IHNob3VsZCBmaWx0ZXIgdGhlbSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3Mjb3ZlcmxhcFRpbGVzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkV2ZW50cyNUSUxFX09WRVJMQVBcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBzcHJpdGUgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IHRpbGVzIC0gQW4gYXJyYXkgb2YgVGlsZXMgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgb3ZlcmxhcC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbnkgb2JqZWN0cyBvdmVybGFwICh3aXRoIGBvdmVybGFwT25seWApOyBvciB0cnVlIGlmIGFueSBvdmVybGFwcGluZyBvYmplY3RzIHdlcmUgc2VwYXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBvdmVybGFwVGlsZXM6IGZ1bmN0aW9uIChzcHJpdGUsIHRpbGVzLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndvcmxkLm92ZXJsYXBUaWxlcyhzcHJpdGUsIHRpbGVzLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZXMgdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSBUaGUgc2ltdWxhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGQucGF1c2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVzIHRoZSBzaW11bGF0aW9uIChpZiBwYXVzZWQpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3MjcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9IFRoZSBzaW11bGF0aW9uLlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGQucmVzdW1lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWNjZWxlcmF0aW9uLngveSBwcm9wZXJ0eSBvbiB0aGUgZ2FtZSBvYmplY3Qgc28gaXQgd2lsbCBtb3ZlIHRvd2FyZHMgdGhlIHgveSBjb29yZGluYXRlcyBhdCB0aGUgZ2l2ZW4gcmF0ZSAoaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZClcclxuICAgICAqXHJcbiAgICAgKiBZb3UgbXVzdCBnaXZlIGEgbWF4aW11bSBzcGVlZCB2YWx1ZSwgYmV5b25kIHdoaWNoIHRoZSBnYW1lIG9iamVjdCB3b24ndCBnbyBhbnkgZmFzdGVyLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IFRoZSBnYW1lIG9iamVjdCBkb2VzIG5vdCBjb250aW51b3VzbHkgdHJhY2sgdGhlIHRhcmdldC4gSWYgdGhlIHRhcmdldCBjaGFuZ2VzIGxvY2F0aW9uIGR1cmluZyB0cmFuc2l0IHRoZSBnYW1lIG9iamVjdCB3aWxsIG5vdCBtb2RpZnkgaXRzIGNvdXJzZS5cclxuICAgICAqIE5vdGU6IFRoZSBnYW1lIG9iamVjdCBkb2Vzbid0IHN0b3AgbW92aW5nIG9uY2UgaXQgcmVhY2hlcyB0aGUgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNhY2NlbGVyYXRlVG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBBbnkgR2FtZSBPYmplY3Qgd2l0aCBhbiBBcmNhZGUgUGh5c2ljcyBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGFjY2VsZXJhdGUgdG93YXJkcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBhY2NlbGVyYXRlIHRvd2FyZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwZWVkPTYwXSAtIFRoZSBhY2NlbGVyYXRpb24gKGNoYW5nZSBpbiBzcGVlZCkgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeFNwZWVkTWF4PTUwMF0gLSBUaGUgbWF4aW11bSB4IHZlbG9jaXR5IHRoZSBnYW1lIG9iamVjdCBjYW4gcmVhY2guXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3lTcGVlZE1heD01MDBdIC0gVGhlIG1heGltdW0geSB2ZWxvY2l0eSB0aGUgZ2FtZSBvYmplY3QgY2FuIHJlYWNoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFuZ2xlIChpbiByYWRpYW5zKSB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIHZpc3VhbGx5IHNldCB0byBpbiBvcmRlciB0byBtYXRjaCBpdHMgbmV3IHZlbG9jaXR5LlxyXG4gICAgICovXHJcbiAgICBhY2NlbGVyYXRlVG86IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCB4LCB5LCBzcGVlZCwgeFNwZWVkTWF4LCB5U3BlZWRNYXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwZWVkID09PSB1bmRlZmluZWQpIHsgc3BlZWQgPSA2MDsgfVxyXG5cclxuICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHkgLSBnYW1lT2JqZWN0LnksIHggLSBnYW1lT2JqZWN0LngpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmJvZHkuYWNjZWxlcmF0aW9uLnNldFRvUG9sYXIoYW5nbGUsIHNwZWVkKTtcclxuXHJcbiAgICAgICAgaWYgKHhTcGVlZE1heCAhPT0gdW5kZWZpbmVkICYmIHlTcGVlZE1heCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5ib2R5Lm1heFZlbG9jaXR5LnNldCh4U3BlZWRNYXgsIHlTcGVlZE1heCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWNjZWxlcmF0aW9uLngveSBwcm9wZXJ0eSBvbiB0aGUgZ2FtZSBvYmplY3Qgc28gaXQgd2lsbCBtb3ZlIHRvd2FyZHMgdGhlIHgveSBjb29yZGluYXRlcyBhdCB0aGUgZ2l2ZW4gcmF0ZSAoaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZClcclxuICAgICAqXHJcbiAgICAgKiBZb3UgbXVzdCBnaXZlIGEgbWF4aW11bSBzcGVlZCB2YWx1ZSwgYmV5b25kIHdoaWNoIHRoZSBnYW1lIG9iamVjdCB3b24ndCBnbyBhbnkgZmFzdGVyLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IFRoZSBnYW1lIG9iamVjdCBkb2VzIG5vdCBjb250aW51b3VzbHkgdHJhY2sgdGhlIHRhcmdldC4gSWYgdGhlIHRhcmdldCBjaGFuZ2VzIGxvY2F0aW9uIGR1cmluZyB0cmFuc2l0IHRoZSBnYW1lIG9iamVjdCB3aWxsIG5vdCBtb2RpZnkgaXRzIGNvdXJzZS5cclxuICAgICAqIE5vdGU6IFRoZSBnYW1lIG9iamVjdCBkb2Vzbid0IHN0b3AgbW92aW5nIG9uY2UgaXQgcmVhY2hlcyB0aGUgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNhY2NlbGVyYXRlVG9PYmplY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBBbnkgR2FtZSBPYmplY3Qgd2l0aCBhbiBBcmNhZGUgUGh5c2ljcyBib2R5LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZGVzdGluYXRpb24gLSBUaGUgR2FtZSBPYmplY3QgdG8gbW92ZSB0b3dhcmRzLiBDYW4gYmUgYW55IG9iamVjdCBidXQgbXVzdCBoYXZlIHZpc2libGUgeC95IHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwZWVkPTYwXSAtIFRoZSBhY2NlbGVyYXRpb24gKGNoYW5nZSBpbiBzcGVlZCkgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeFNwZWVkTWF4PTUwMF0gLSBUaGUgbWF4aW11bSB4IHZlbG9jaXR5IHRoZSBnYW1lIG9iamVjdCBjYW4gcmVhY2guXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3lTcGVlZE1heD01MDBdIC0gVGhlIG1heGltdW0geSB2ZWxvY2l0eSB0aGUgZ2FtZSBvYmplY3QgY2FuIHJlYWNoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFuZ2xlIChpbiByYWRpYW5zKSB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIHZpc3VhbGx5IHNldCB0byBpbiBvcmRlciB0byBtYXRjaCBpdHMgbmV3IHZlbG9jaXR5LlxyXG4gICAgICovXHJcbiAgICBhY2NlbGVyYXRlVG9PYmplY3Q6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBkZXN0aW5hdGlvbiwgc3BlZWQsIHhTcGVlZE1heCwgeVNwZWVkTWF4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY2VsZXJhdGVUbyhnYW1lT2JqZWN0LCBkZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCBzcGVlZCwgeFNwZWVkTWF4LCB5U3BlZWRNYXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIHRoZSBCb2R5IG9yIEdhbWUgT2JqZWN0IGNsb3Nlc3QgdG8gYSBzb3VyY2UgcG9pbnQgb3Igb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIGEgYHRhcmdldHNgIGFyZ3VtZW50IGlzIHBhc3NlZCwgdGhpcyBtZXRob2QgZmluZHMgdGhlIGNsb3Nlc3Qgb2YgdGhvc2UuXHJcbiAgICAgKiBUaGUgdGFyZ2V0cyBjYW4gYmUgQXJjYWRlIFBoeXNpY3MgR2FtZSBPYmplY3RzLCBEeW5hbWljIEJvZGllcywgb3IgU3RhdGljIEJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBgdGFyZ2V0c2AgYXJndW1lbnQgaXMgcGFzc2VkLCB0aGlzIG1ldGhvZCBmaW5kcyB0aGUgY2xvc2VzdCBEeW5hbWljIEJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdHdvIG9yIG1vcmUgdGFyZ2V0cyBhcmUgdGhlIGV4YWN0IHNhbWUgZGlzdGFuY2UgZnJvbSB0aGUgc291cmNlIHBvaW50LCBvbmx5IHRoZSBmaXJzdCB0YXJnZXRcclxuICAgICAqIGlzIHJldHVybmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3MjY2xvc2VzdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IHNvdXJjZSAtIEFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcywgc3VjaCBhcyBhIEdhbWUgT2JqZWN0IG9yIEdlb21ldHJ5IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5W118UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHlbXXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gW3RhcmdldHNdIC0gVGhlIHRhcmdldHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7PyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCl9IFRoZSB0YXJnZXQgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gc291cmNlIHBvaW50LlxyXG4gICAgICovXHJcbiAgICBjbG9zZXN0OiBmdW5jdGlvbiAoc291cmNlLCB0YXJnZXRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGFyZ2V0cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhcmdldHMgPSB0aGlzLndvcmxkLmJvZGllcy5lbnRyaWVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICAgICAgdmFyIGNsb3Nlc3QgPSBudWxsO1xyXG4gICAgICAgIHZhciB4ID0gc291cmNlLng7XHJcbiAgICAgICAgdmFyIHkgPSBzb3VyY2UueTtcclxuICAgICAgICB2YXIgbGVuID0gdGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSB0YXJnZXQuYm9keSB8fCB0YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoc291cmNlID09PSB0YXJnZXQgfHwgc291cmNlID09PSBib2R5IHx8IHNvdXJjZSA9PT0gYm9keS5nYW1lT2JqZWN0IHx8IHNvdXJjZSA9PT0gYm9keS5jZW50ZXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBEaXN0YW5jZVNxdWFyZWQoeCwgeSwgYm9keS5jZW50ZXIueCwgYm9keS5jZW50ZXIueSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBtaW4pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgdGhlIEJvZHkgb3IgR2FtZSBPYmplY3QgZmFydGhlc3QgZnJvbSBhIHNvdXJjZSBwb2ludCBvciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBgdGFyZ2V0c2AgYXJndW1lbnQgaXMgcGFzc2VkLCB0aGlzIG1ldGhvZCBmaW5kcyB0aGUgZmFydGhlc3Qgb2YgdGhvc2UuXHJcbiAgICAgKiBUaGUgdGFyZ2V0cyBjYW4gYmUgQXJjYWRlIFBoeXNpY3MgR2FtZSBPYmplY3RzLCBEeW5hbWljIEJvZGllcywgb3IgU3RhdGljIEJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBgdGFyZ2V0c2AgYXJndW1lbnQgaXMgcGFzc2VkLCB0aGlzIG1ldGhvZCBmaW5kcyB0aGUgZmFydGhlc3QgRHluYW1pYyBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIElmIHR3byBvciBtb3JlIHRhcmdldHMgYXJlIHRoZSBleGFjdCBzYW1lIGRpc3RhbmNlIGZyb20gdGhlIHNvdXJjZSBwb2ludCwgb25seSB0aGUgZmlyc3QgdGFyZ2V0XHJcbiAgICAgKiBpcyByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI2Z1cnRoZXN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gc291cmNlIC0gQW55IG9iamVjdCB3aXRoIHB1YmxpYyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLCBzdWNoIGFzIGEgR2FtZSBPYmplY3Qgb3IgR2VvbWV0cnkgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHlbXXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keVtdfFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBbdGFyZ2V0c10gLSBUaGUgdGFyZ2V0cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0KX0gVGhlIHRhcmdldCBmYXJ0aGVzdCBmcm9tIHRoZSBnaXZlbiBzb3VyY2UgcG9pbnQuXHJcbiAgICAgKi9cclxuICAgIGZ1cnRoZXN0OiBmdW5jdGlvbiAoc291cmNlLCB0YXJnZXRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGFyZ2V0cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhcmdldHMgPSB0aGlzLndvcmxkLmJvZGllcy5lbnRyaWVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1heCA9IC0xO1xyXG4gICAgICAgIHZhciBmYXJ0aGVzdCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHggPSBzb3VyY2UueDtcclxuICAgICAgICB2YXIgeSA9IHNvdXJjZS55O1xyXG4gICAgICAgIHZhciBsZW4gPSB0YXJnZXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0YXJnZXRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IHRhcmdldC5ib2R5IHx8IHRhcmdldDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCB8fCBzb3VyY2UgPT09IGJvZHkgfHwgc291cmNlID09PSBib2R5LmdhbWVPYmplY3QgfHwgc291cmNlID09PSBib2R5LmNlbnRlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IERpc3RhbmNlU3F1YXJlZCh4LCB5LCBib2R5LmNlbnRlci54LCBib2R5LmNlbnRlci55KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IG1heClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmFydGhlc3QgPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICBtYXggPSBkaXN0YW5jZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYXJ0aGVzdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIHRoZSBnaXZlbiBkaXNwbGF5IG9iamVjdCB0b3dhcmRzIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXQgYSBzdGVhZHkgdmVsb2NpdHkuXHJcbiAgICAgKiBJZiB5b3Ugc3BlY2lmeSBhIG1heFRpbWUgdGhlbiBpdCB3aWxsIGFkanVzdCB0aGUgc3BlZWQgKG92ZXItd3JpdGluZyB3aGF0IHlvdSBzZXQpIHNvIGl0IGFycml2ZXMgYXQgdGhlIGRlc3RpbmF0aW9uIGluIHRoYXQgbnVtYmVyIG9mIHNlY29uZHMuXHJcbiAgICAgKiBUaW1pbmdzIGFyZSBhcHByb3hpbWF0ZSBkdWUgdG8gdGhlIHdheSBicm93c2VyIHRpbWVycyB3b3JrLiBBbGxvdyBmb3IgYSB2YXJpYW5jZSBvZiArLSA1MG1zLlxyXG4gICAgICogTm90ZTogVGhlIGRpc3BsYXkgb2JqZWN0IGRvZXMgbm90IGNvbnRpbnVvdXNseSB0cmFjayB0aGUgdGFyZ2V0LiBJZiB0aGUgdGFyZ2V0IGNoYW5nZXMgbG9jYXRpb24gZHVyaW5nIHRyYW5zaXQgdGhlIGRpc3BsYXkgb2JqZWN0IHdpbGwgbm90IG1vZGlmeSBpdHMgY291cnNlLlxyXG4gICAgICogTm90ZTogVGhlIGRpc3BsYXkgb2JqZWN0IGRvZXNuJ3Qgc3RvcCBtb3Zpbmcgb25jZSBpdCByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcy5cclxuICAgICAqIE5vdGU6IERvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgYWNjZWxlcmF0aW9uLCBtYXhWZWxvY2l0eSBvciBkcmFnIChpZiB5b3UndmUgc2V0IGRyYWcgb3IgYWNjZWxlcmF0aW9uIHRvbyBoaWdoIHRoaXMgb2JqZWN0IG1heSBub3QgbW92ZSBhdCBhbGwpXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNtb3ZlVG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBBbnkgR2FtZSBPYmplY3Qgd2l0aCBhbiBBcmNhZGUgUGh5c2ljcyBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIG1vdmUgdG93YXJkcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBtb3ZlIHRvd2FyZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwZWVkPTYwXSAtIFRoZSBzcGVlZCBpdCB3aWxsIG1vdmUsIGluIHBpeGVscyBwZXIgc2Vjb25kIChkZWZhdWx0IGlzIDYwIHBpeGVscy9zZWMpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21heFRpbWU9MF0gLSBUaW1lIGdpdmVuIGluIG1pbGxpc2Vjb25kcyAoMTAwMCA9IDEgc2VjKS4gSWYgc2V0IHRoZSBzcGVlZCBpcyBhZGp1c3RlZCBzbyB0aGUgb2JqZWN0IHdpbGwgYXJyaXZlIGF0IGRlc3RpbmF0aW9uIGluIHRoZSBnaXZlbiBudW1iZXIgb2YgbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgKGluIHJhZGlhbnMpIHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgdmlzdWFsbHkgc2V0IHRvIGluIG9yZGVyIHRvIG1hdGNoIGl0cyBuZXcgdmVsb2NpdHkuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUbzogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgsIHksIHNwZWVkLCBtYXhUaW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzcGVlZCA9PT0gdW5kZWZpbmVkKSB7IHNwZWVkID0gNjA7IH1cclxuICAgICAgICBpZiAobWF4VGltZSA9PT0gdW5kZWZpbmVkKSB7IG1heFRpbWUgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoeSAtIGdhbWVPYmplY3QueSwgeCAtIGdhbWVPYmplY3QueCk7XHJcblxyXG4gICAgICAgIGlmIChtYXhUaW1lID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSBrbm93IGhvdyBtYW55IHBpeGVscyB3ZSBuZWVkIHRvIG1vdmUsIGJ1dCBob3cgZmFzdD9cclxuICAgICAgICAgICAgc3BlZWQgPSBEaXN0YW5jZUJldHdlZW4oZ2FtZU9iamVjdC54LCBnYW1lT2JqZWN0LnksIHgsIHkpIC8gKG1heFRpbWUgLyAxMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuYm9keS52ZWxvY2l0eS5zZXRUb1BvbGFyKGFuZ2xlLCBzcGVlZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhbmdsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIHRoZSBnaXZlbiBkaXNwbGF5IG9iamVjdCB0b3dhcmRzIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgYXQgYSBzdGVhZHkgdmVsb2NpdHkuXHJcbiAgICAgKiBJZiB5b3Ugc3BlY2lmeSBhIG1heFRpbWUgdGhlbiBpdCB3aWxsIGFkanVzdCB0aGUgc3BlZWQgKG92ZXJ3cml0aW5nIHdoYXQgeW91IHNldCkgc28gaXQgYXJyaXZlcyBhdCB0aGUgZGVzdGluYXRpb24gaW4gdGhhdCBudW1iZXIgb2Ygc2Vjb25kcy5cclxuICAgICAqIFRpbWluZ3MgYXJlIGFwcHJveGltYXRlIGR1ZSB0byB0aGUgd2F5IGJyb3dzZXIgdGltZXJzIHdvcmsuIEFsbG93IGZvciBhIHZhcmlhbmNlIG9mICstIDUwbXMuXHJcbiAgICAgKiBOb3RlOiBUaGUgZGlzcGxheSBvYmplY3QgZG9lcyBub3QgY29udGludW91c2x5IHRyYWNrIHRoZSB0YXJnZXQuIElmIHRoZSB0YXJnZXQgY2hhbmdlcyBsb2NhdGlvbiBkdXJpbmcgdHJhbnNpdCB0aGUgZGlzcGxheSBvYmplY3Qgd2lsbCBub3QgbW9kaWZ5IGl0cyBjb3Vyc2UuXHJcbiAgICAgKiBOb3RlOiBUaGUgZGlzcGxheSBvYmplY3QgZG9lc24ndCBzdG9wIG1vdmluZyBvbmNlIGl0IHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzLlxyXG4gICAgICogTm90ZTogRG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBhY2NlbGVyYXRpb24sIG1heFZlbG9jaXR5IG9yIGRyYWcgKGlmIHlvdSd2ZSBzZXQgZHJhZyBvciBhY2NlbGVyYXRpb24gdG9vIGhpZ2ggdGhpcyBvYmplY3QgbWF5IG5vdCBtb3ZlIGF0IGFsbClcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI21vdmVUb09iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIEFueSBHYW1lIE9iamVjdCB3aXRoIGFuIEFyY2FkZSBQaHlzaWNzIGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGVzdGluYXRpb24gLSBBbnkgb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMsIHN1Y2ggYXMgYSBHYW1lIE9iamVjdCBvciBHZW9tZXRyeSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwZWVkPTYwXSAtIFRoZSBzcGVlZCBpdCB3aWxsIG1vdmUsIGluIHBpeGVscyBwZXIgc2Vjb25kIChkZWZhdWx0IGlzIDYwIHBpeGVscy9zZWMpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21heFRpbWU9MF0gLSBUaW1lIGdpdmVuIGluIG1pbGxpc2Vjb25kcyAoMTAwMCA9IDEgc2VjKS4gSWYgc2V0IHRoZSBzcGVlZCBpcyBhZGp1c3RlZCBzbyB0aGUgb2JqZWN0IHdpbGwgYXJyaXZlIGF0IGRlc3RpbmF0aW9uIGluIHRoZSBnaXZlbiBudW1iZXIgb2YgbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgKGluIHJhZGlhbnMpIHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgdmlzdWFsbHkgc2V0IHRvIGluIG9yZGVyIHRvIG1hdGNoIGl0cyBuZXcgdmVsb2NpdHkuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUb09iamVjdDogZnVuY3Rpb24gKGdhbWVPYmplY3QsIGRlc3RpbmF0aW9uLCBzcGVlZCwgbWF4VGltZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb3ZlVG8oZ2FtZU9iamVjdCwgZGVzdGluYXRpb24ueCwgZGVzdGluYXRpb24ueSwgc3BlZWQsIG1heFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIHRoZSBhbmdsZSAoaW4gZGVncmVlcykgYW5kIHNwZWVkIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYW5kIHJldHVybiBpdCBhcyBhIHZlY3Rvciwgb3Igc2V0IGl0IHRvIHRoZSBnaXZlbiB2ZWN0b3Igb2JqZWN0LlxyXG4gICAgICogT25lIHdheSB0byB1c2UgdGhpcyBpczogdmVsb2NpdHlGcm9tQW5nbGUoYW5nbGUsIDIwMCwgc3ByaXRlLmJvZHkudmVsb2NpdHkpIHdoaWNoIHdpbGwgc2V0IHRoZSB2YWx1ZXMgZGlyZWN0bHkgdG8gdGhlIHNwcml0ZSdzIHZlbG9jaXR5IGFuZCBub3QgY3JlYXRlIGEgbmV3IHZlY3RvciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyN2ZWxvY2l0eUZyb21BbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIGRlZ3JlZXMgY2FsY3VsYXRlZCBpbiBjbG9ja3dpc2UgcG9zaXRpdmUgZGlyZWN0aW9uIChkb3duID0gOTAgZGVncmVlcyBwb3NpdGl2ZSwgcmlnaHQgPSAwIGRlZ3JlZXMgcG9zaXRpdmUsIHVwID0gOTAgZGVncmVlcyBuZWdhdGl2ZSlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlZWQ9NjBdIC0gVGhlIHNwZWVkIGl0IHdpbGwgbW92ZSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW3ZlYzJdIC0gVGhlIFZlY3RvcjIgaW4gd2hpY2ggdGhlIHggYW5kIHkgcHJvcGVydGllcyB3aWxsIGJlIHNldCB0byB0aGUgY2FsY3VsYXRlZCB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgVmVjdG9yMiB0aGF0IHN0b3JlcyB0aGUgdmVsb2NpdHkuXHJcbiAgICAgKi9cclxuICAgIHZlbG9jaXR5RnJvbUFuZ2xlOiBmdW5jdGlvbiAoYW5nbGUsIHNwZWVkLCB2ZWMyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzcGVlZCA9PT0gdW5kZWZpbmVkKSB7IHNwZWVkID0gNjA7IH1cclxuICAgICAgICBpZiAodmVjMiA9PT0gdW5kZWZpbmVkKSB7IHZlYzIgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWMyLnNldFRvUG9sYXIoRGVnVG9SYWQoYW5nbGUpLCBzcGVlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gdGhlIHJvdGF0aW9uIChpbiByYWRpYW5zKSBhbmQgc3BlZWQgY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSBhbmQgcmV0dXJuIGl0IGFzIGEgdmVjdG9yLCBvciBzZXQgaXQgdG8gdGhlIGdpdmVuIHZlY3RvciBvYmplY3QuXHJcbiAgICAgKiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzOiB2ZWxvY2l0eUZyb21Sb3RhdGlvbihyb3RhdGlvbiwgMjAwLCBzcHJpdGUuYm9keS52ZWxvY2l0eSkgd2hpY2ggd2lsbCBzZXQgdGhlIHZhbHVlcyBkaXJlY3RseSB0byB0aGUgc3ByaXRlJ3MgdmVsb2NpdHkgYW5kIG5vdCBjcmVhdGUgYSBuZXcgdmVjdG9yIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI3ZlbG9jaXR5RnJvbVJvdGF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb24gLSBUaGUgYW5nbGUgaW4gcmFkaWFucy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlZWQ9NjBdIC0gVGhlIHNwZWVkIGl0IHdpbGwgbW92ZSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbdmVjMl0gLSBUaGUgVmVjdG9yMiBpbiB3aGljaCB0aGUgeCBhbmQgeSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0IHRvIHRoZSBjYWxjdWxhdGVkIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBWZWN0b3IyIHRoYXQgc3RvcmVzIHRoZSB2ZWxvY2l0eS5cclxuICAgICAqL1xyXG4gICAgdmVsb2NpdHlGcm9tUm90YXRpb246IGZ1bmN0aW9uIChyb3RhdGlvbiwgc3BlZWQsIHZlYzIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwZWVkID09PSB1bmRlZmluZWQpIHsgc3BlZWQgPSA2MDsgfVxyXG4gICAgICAgIGlmICh2ZWMyID09PSB1bmRlZmluZWQpIHsgdmVjMiA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc2V0VG9Qb2xhcihyb3RhdGlvbiwgc3BlZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHBoeXNpY3MgYm9kaWVzIHRoYXRcclxuICAgICAqIG92ZXJsYXAgd2l0aCBpdC4gSXQgY2FuIHJldHVybiBlaXRoZXIgRHluYW1pYywgU3RhdGljIGJvZGllcyBvciBhIG1peHR1cmUgb2YgYm90aC5cclxuICAgICAqXHJcbiAgICAgKiBBIGJvZHkgb25seSBoYXMgdG8gaW50ZXJzZWN0IHdpdGggdGhlIHNlYXJjaCBhcmVhIHRvIGJlIGNvbnNpZGVyZWQsIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBmdWxseVxyXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBBcmNhZGUgUGh5c2ljcyBpcyBzZXQgdG8gdXNlIHRoZSBSVHJlZSAod2hpY2ggaXQgaXMgYnkgZGVmYXVsdCkgdGhlbiB0aGUgc2VhcmNoIGZvciBpcyBleHRyZW1lbHkgZmFzdCxcclxuICAgICAqIG90aGVyd2lzZSB0aGUgc2VhcmNoIGlzIE8oTikgZm9yIER5bmFtaWMgQm9kaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVBoeXNpY3Mjb3ZlcmxhcFJlY3RcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB0b3AtbGVmdCB4IGNvb3JkaW5hdGUgb2YgdGhlIGFyZWEgdG8gc2VhcmNoIHdpdGhpbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHRvcC1sZWZ0IHkgY29vcmRpbmF0ZSBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIHNlYXJjaCB3aXRoaW4uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUR5bmFtaWM9dHJ1ZV0gLSBTaG91bGQgdGhlIHNlYXJjaCBpbmNsdWRlIER5bmFtaWMgQm9kaWVzP1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVN0YXRpYz1mYWxzZV0gLSBTaG91bGQgdGhlIHNlYXJjaCBpbmNsdWRlIFN0YXRpYyBCb2RpZXM/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5W118UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHlbXSl9IEFuIGFycmF5IG9mIGJvZGllcyB0aGF0IG92ZXJsYXAgd2l0aCB0aGUgZ2l2ZW4gYXJlYS5cclxuICAgICAqL1xyXG4gICAgb3ZlcmxhcFJlY3Q6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpbmNsdWRlRHluYW1pYywgaW5jbHVkZVN0YXRpYylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gT3ZlcmxhcFJlY3QodGhpcy53b3JsZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaW5jbHVkZUR5bmFtaWMsIGluY2x1ZGVTdGF0aWMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIHRoZSBnaXZlbiBjaXJjdWxhciBhcmVhIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHBoeXNpY3MgYm9kaWVzIHRoYXRcclxuICAgICAqIG92ZXJsYXAgd2l0aCBpdC4gSXQgY2FuIHJldHVybiBlaXRoZXIgRHluYW1pYywgU3RhdGljIGJvZGllcyBvciBhIG1peHR1cmUgb2YgYm90aC5cclxuICAgICAqXHJcbiAgICAgKiBBIGJvZHkgb25seSBoYXMgdG8gaW50ZXJzZWN0IHdpdGggdGhlIHNlYXJjaCBhcmVhIHRvIGJlIGNvbnNpZGVyZWQsIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBmdWxseVxyXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBBcmNhZGUgUGh5c2ljcyBpcyBzZXQgdG8gdXNlIHRoZSBSVHJlZSAod2hpY2ggaXQgaXMgYnkgZGVmYXVsdCkgdGhlbiB0aGUgc2VhcmNoIGlzIHJhdGhlciBmYXN0LFxyXG4gICAgICogb3RoZXJ3aXNlIHRoZSBzZWFyY2ggaXMgTyhOKSBmb3IgRHluYW1pYyBCb2RpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQXJjYWRlUGh5c2ljcyNvdmVybGFwQ2lyY1xyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBhcmVhIHRvIHNlYXJjaCB3aXRoaW4uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGFyZWEgdG8gc2VhcmNoIHdpdGhpbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVEeW5hbWljPXRydWVdIC0gU2hvdWxkIHRoZSBzZWFyY2ggaW5jbHVkZSBEeW5hbWljIEJvZGllcz9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVTdGF0aWM9ZmFsc2VdIC0gU2hvdWxkIHRoZSBzZWFyY2ggaW5jbHVkZSBTdGF0aWMgQm9kaWVzP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keVtdfFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5W10pfSBBbiBhcnJheSBvZiBib2RpZXMgdGhhdCBvdmVybGFwIHdpdGggdGhlIGdpdmVuIGFyZWEuXHJcbiAgICAgKi9cclxuICAgIG92ZXJsYXBDaXJjOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBpbmNsdWRlRHluYW1pYywgaW5jbHVkZVN0YXRpYylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gT3ZlcmxhcENpcmModGhpcy53b3JsZCwgeCwgeSwgcmFkaXVzLCBpbmNsdWRlRHluYW1pYywgaW5jbHVkZVN0YXRpYyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndvcmxkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFscmVhZHkgZGVzdHJveWVkXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy53b3JsZC51cGRhdGUsIHRoaXMud29ybGQpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuUE9TVF9VUERBVEUsIHRoaXMud29ybGQucG9zdFVwZGF0ZSwgdGhpcy53b3JsZCk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLndvcmxkLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud29ybGQgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdBcmNhZGVQaHlzaWNzJywgQXJjYWRlUGh5c2ljcywgJ2FyY2FkZVBoeXNpY3MnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJjYWRlUGh5c2ljcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/ArcadePhysics.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/ArcadeSprite.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/ArcadeSprite.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/arcade/components/index.js\");\r\nvar Sprite = __webpack_require__(/*! ../../gameobjects/sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Arcade Physics Sprite is a Sprite with an Arcade Physics body and related components.\r\n * The body can be dynamic or static.\r\n *\r\n * The main difference between an Arcade Sprite and an Arcade Image is that you cannot animate an Arcade Image.\r\n * If you do not require animation then you can safely use Arcade Images instead of Arcade Sprites.\r\n *\r\n * @class Sprite\r\n * @extends Phaser.GameObjects.Sprite\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Arcade.Components.Acceleration\r\n * @extends Phaser.Physics.Arcade.Components.Angular\r\n * @extends Phaser.Physics.Arcade.Components.Bounce\r\n * @extends Phaser.Physics.Arcade.Components.Debug\r\n * @extends Phaser.Physics.Arcade.Components.Drag\r\n * @extends Phaser.Physics.Arcade.Components.Enable\r\n * @extends Phaser.Physics.Arcade.Components.Friction\r\n * @extends Phaser.Physics.Arcade.Components.Gravity\r\n * @extends Phaser.Physics.Arcade.Components.Immovable\r\n * @extends Phaser.Physics.Arcade.Components.Mass\r\n * @extends Phaser.Physics.Arcade.Components.Size\r\n * @extends Phaser.Physics.Arcade.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar ArcadeSprite = new Class({\r\n\r\n    Extends: Sprite,\r\n\r\n    Mixins: [\r\n        Components.Acceleration,\r\n        Components.Angular,\r\n        Components.Bounce,\r\n        Components.Debug,\r\n        Components.Drag,\r\n        Components.Enable,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Immovable,\r\n        Components.Mass,\r\n        Components.Size,\r\n        Components.Velocity\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ArcadeSprite (scene, x, y, texture, frame)\r\n    {\r\n        Sprite.call(this, scene, x, y, texture, frame);\r\n\r\n        /**\r\n         * This Game Object's Physics Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Sprite#body\r\n         * @type {?(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.body = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ArcadeSprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9BcmNhZGVTcHJpdGUuanM/YzFkNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBYztBQUN2QyxhQUFhLG1CQUFPLENBQUMsK0ZBQWlDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL0FyY2FkZVNwcml0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuL2NvbXBvbmVudHMnKTtcclxudmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEFuIEFyY2FkZSBQaHlzaWNzIFNwcml0ZSBpcyBhIFNwcml0ZSB3aXRoIGFuIEFyY2FkZSBQaHlzaWNzIGJvZHkgYW5kIHJlbGF0ZWQgY29tcG9uZW50cy5cclxuICogVGhlIGJvZHkgY2FuIGJlIGR5bmFtaWMgb3Igc3RhdGljLlxyXG4gKlxyXG4gKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYW4gQXJjYWRlIFNwcml0ZSBhbmQgYW4gQXJjYWRlIEltYWdlIGlzIHRoYXQgeW91IGNhbm5vdCBhbmltYXRlIGFuIEFyY2FkZSBJbWFnZS5cclxuICogSWYgeW91IGRvIG5vdCByZXF1aXJlIGFuaW1hdGlvbiB0aGVuIHlvdSBjYW4gc2FmZWx5IHVzZSBBcmNhZGUgSW1hZ2VzIGluc3RlYWQgb2YgQXJjYWRlIFNwcml0ZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBTcHJpdGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuQXJjYWRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQWNjZWxlcmF0aW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkFuZ3VsYXJcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQm91bmNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkRlYnVnXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkRyYWdcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuRW5hYmxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkZyaWN0aW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkdyYXZpdHlcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuSW1tb3ZhYmxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLk1hc3NcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgQXJjYWRlU3ByaXRlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTcHJpdGUsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BY2NlbGVyYXRpb24sXHJcbiAgICAgICAgQ29tcG9uZW50cy5Bbmd1bGFyLFxyXG4gICAgICAgIENvbXBvbmVudHMuQm91bmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRGVidWcsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EcmFnLFxyXG4gICAgICAgIENvbXBvbmVudHMuRW5hYmxlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRnJpY3Rpb24sXHJcbiAgICAgICAgQ29tcG9uZW50cy5HcmF2aXR5LFxyXG4gICAgICAgIENvbXBvbmVudHMuSW1tb3ZhYmxlLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzcyxcclxuICAgICAgICBDb21wb25lbnRzLlNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFyY2FkZVNwcml0ZSAoc2NlbmUsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIFNwcml0ZS5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgR2FtZSBPYmplY3QncyBQaHlzaWNzIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3ByaXRlI2JvZHlcclxuICAgICAgICAgKiBAdHlwZSB7PyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm9keSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJjYWRlU3ByaXRlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/ArcadeSprite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/Body.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/Body.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Benjamin D. Richards <benjamindrichards@gmail.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/arcade/events/index.js\");\r\nvar RadToDeg = __webpack_require__(/*! ../../math/RadToDeg */ \"./node_modules/phaser/src/math/RadToDeg.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Dynamic Arcade Body.\r\n *\r\n * Its static counterpart is {@link Phaser.Physics.Arcade.StaticBody}.\r\n *\r\n * @class Body\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The Arcade Physics simulation this Body belongs to.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object this Body belongs to.\r\n */\r\nvar Body = new Class({\r\n\r\n    initialize:\r\n\r\n    function Body (world, gameObject)\r\n    {\r\n        var width = (gameObject.width) ? gameObject.width : 64;\r\n        var height = (gameObject.height) ? gameObject.height : 64;\r\n\r\n        /**\r\n         * The Arcade Physics simulation this Body belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The Game Object this Body belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#gameObject\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.gameObject = gameObject;\r\n\r\n        /**\r\n         * Transformations applied to this Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#transform\r\n         * @type {object}\r\n         * @since 3.4.0\r\n         */\r\n        this.transform = {\r\n            x: gameObject.x,\r\n            y: gameObject.y,\r\n            rotation: gameObject.angle,\r\n            scaleX: gameObject.scaleX,\r\n            scaleY: gameObject.scaleY,\r\n            displayOriginX: gameObject.displayOriginX,\r\n            displayOriginY: gameObject.displayOriginY\r\n        };\r\n\r\n        /**\r\n         * Whether the Body's boundary is drawn to the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#debugShowBody\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugShowBody = world.defaults.debugShowBody;\r\n\r\n        /**\r\n         * Whether the Body's velocity is drawn to the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#debugShowVelocity\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugShowVelocity = world.defaults.debugShowVelocity;\r\n\r\n        /**\r\n         * The color of this Body on the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#debugBodyColor\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugBodyColor = world.defaults.bodyDebugColor;\r\n\r\n        /**\r\n         * Whether this Body is updated by the physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#enable\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enable = true;\r\n\r\n        /**\r\n         * Whether this Body's boundary is circular (true) or rectangular (false).\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#isCircle\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#setCircle\r\n         */\r\n        this.isCircle = false;\r\n\r\n        /**\r\n         * If this Body is circular, this is the unscaled radius of the Body's boundary, as set by setCircle(), in source pixels.\r\n         * The true radius is equal to `halfWidth`.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#radius\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#setCircle\r\n         */\r\n        this.radius = 0;\r\n\r\n        /**\r\n         * The offset of this Body's position from its Game Object's position, in source pixels.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#offset\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#setOffset\r\n         */\r\n        this.offset = new Vector2();\r\n\r\n        /**\r\n         * The position of this Body within the simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#position\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector2(gameObject.x, gameObject.y);\r\n\r\n        /**\r\n         * The position of this Body during the previous step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#prev\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.prev = new Vector2(gameObject.x, gameObject.y);\r\n\r\n        /**\r\n         * The position of this Body during the previous frame.\r\n         * \r\n         * @name Phaser.Physics.Arcade.Body#prevFrame\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.20.0\r\n         */\r\n        this.prevFrame = new Vector2(gameObject.x, gameObject.y);\r\n\r\n        /**\r\n         * Whether this Body's `rotation` is affected by its angular acceleration and angular velocity.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#allowRotation\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.allowRotation = true;\r\n\r\n        /**\r\n         * This body's rotation, in degrees, based on its angular acceleration and angular velocity.\r\n         * The Body's rotation controls the `angle` of its Game Object.\r\n         * It doesn't rotate the Body's boundary, which is always an axis-aligned rectangle or a circle.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#rotation\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.rotation = gameObject.angle;\r\n\r\n        /**\r\n         * The Body's rotation, in degrees, during the previous step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#preRotation\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.preRotation = gameObject.angle;\r\n\r\n        /**\r\n         * The width of the Body's boundary, in pixels.\r\n         * If the Body is circular, this is also the Body's diameter.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#width\r\n         * @type {number}\r\n         * @default 64\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the Body's boundary, in pixels.\r\n         * If the Body is circular, this is also the Body's diameter.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#height\r\n         * @type {number}\r\n         * @default 64\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n\r\n        /**\r\n         * The unscaled width of the Body, in source pixels, as set by setSize().\r\n         * The default is the width of the Body's Game Object's texture frame.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#sourceWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#setSize\r\n         */\r\n        this.sourceWidth = width;\r\n\r\n        /**\r\n         * The unscaled height of the Body, in source pixels, as set by setSize().\r\n         * The default is the height of the Body's Game Object's texture frame.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#sourceHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#setSize\r\n         */\r\n        this.sourceHeight = height;\r\n\r\n        if (gameObject.frame)\r\n        {\r\n            this.sourceWidth = gameObject.frame.realWidth;\r\n            this.sourceHeight = gameObject.frame.realHeight;\r\n        }\r\n\r\n        /**\r\n         * Half the Body's width, in pixels.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#halfWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfWidth = Math.abs(width / 2);\r\n\r\n        /**\r\n         * Half the Body's height, in pixels.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#halfHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfHeight = Math.abs(height / 2);\r\n\r\n        /**\r\n         * The center of the Body's boundary.\r\n         * The midpoint of its `position` (top-left corner) and its bottom-right corner.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#center\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.center = new Vector2(gameObject.x + this.halfWidth, gameObject.y + this.halfHeight);\r\n\r\n        /**\r\n         * The Body's velocity, in pixels per second.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#velocity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.velocity = new Vector2();\r\n\r\n        /**\r\n         * The Body's calculated velocity, in pixels per second, at the last step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#newVelocity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.newVelocity = new Vector2();\r\n\r\n        /**\r\n         * The Body's absolute maximum change in position, in pixels per step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#deltaMax\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.deltaMax = new Vector2();\r\n\r\n        /**\r\n         * The Body's change in velocity, in pixels per second squared.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#acceleration\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.acceleration = new Vector2();\r\n\r\n        /**\r\n         * Whether this Body's velocity is affected by its `drag`.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#allowDrag\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.allowDrag = true;\r\n\r\n        /**\r\n         * Absolute loss of velocity due to movement, in pixels per second squared.\r\n         * The x and y components are applied separately.\r\n         *\r\n         * When `useDamping` is true, this is 1 minus the damping factor.\r\n         * A value of 1 means the Body loses no velocity.\r\n         * A value of 0.95 means the Body loses 5% of its velocity per step.\r\n         * A value of 0.5 means the Body loses 50% of its velocity per step.\r\n         *\r\n         * Drag is applied only when `acceleration` is zero.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#drag\r\n         * @type {(Phaser.Math.Vector2|number)}\r\n         * @since 3.0.0\r\n         */\r\n        this.drag = new Vector2();\r\n\r\n        /**\r\n         * Whether this Body's position is affected by gravity (local or world).\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#allowGravity\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.Body#gravity\r\n         * @see Phaser.Physics.Arcade.World#gravity\r\n         */\r\n        this.allowGravity = true;\r\n\r\n        /**\r\n         * Acceleration due to gravity (specific to this Body), in pixels per second squared.\r\n         * Total gravity is the sum of this vector and the simulation's `gravity`.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#gravity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.World#gravity\r\n         */\r\n        this.gravity = new Vector2();\r\n\r\n        /**\r\n         * Rebound following a collision, relative to 1.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#bounce\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.bounce = new Vector2();\r\n\r\n        /**\r\n         * Rebound following a collision with the world boundary, relative to 1.\r\n         * If null, `bounce` is used instead.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#worldBounce\r\n         * @type {?Phaser.Math.Vector2}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.worldBounce = null;\r\n\r\n        /**\r\n         * The rectangle used for world boundary collisions.\r\n         * \r\n         * By default it is set to the world boundary rectangle. Or, if this Body was\r\n         * created by a Physics Group, then whatever rectangle that Group defined.\r\n         * \r\n         * You can also change it by using the `Body.setBoundsRectangle` method.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#customBoundsRectangle\r\n         * @type {?Phaser.Geom.Rectangle}\r\n         * @since 3.20\r\n         */\r\n        this.customBoundsRectangle = world.bounds;\r\n\r\n        //  If true this Body will dispatch events\r\n\r\n        /**\r\n         * Whether the simulation emits a `worldbounds` event when this Body collides with the world boundary (and `collideWorldBounds` is also true).\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#onWorldBounds\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.World#worldboundsEvent\r\n         */\r\n        this.onWorldBounds = false;\r\n\r\n        /**\r\n         * Whether the simulation emits a `collide` event when this Body collides with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#onCollide\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.World#collideEvent\r\n         */\r\n        this.onCollide = false;\r\n\r\n        /**\r\n         * Whether the simulation emits an `overlap` event when this Body overlaps with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#onOverlap\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.Physics.Arcade.World#overlapEvent\r\n         */\r\n        this.onOverlap = false;\r\n\r\n        /**\r\n         * The Body's absolute maximum velocity, in pixels per second.\r\n         * The horizontal and vertical components are applied separately.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#maxVelocity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVelocity = new Vector2(10000, 10000);\r\n\r\n        /**\r\n         * The maximum speed this Body is allowed to reach.\r\n         *\r\n         * If not negative it limits the scalar value of speed.\r\n         *\r\n         * Any negative value means no maximum is being applied.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#maxSpeed\r\n         * @type {number}\r\n         * @since 3.16.0\r\n         */\r\n        this.maxSpeed = -1;\r\n\r\n        /**\r\n         * If this Body is `immovable` and in motion, `friction` is the proportion of this Body's motion received by the riding Body on each axis, relative to 1.\r\n         * The default value (1, 0) moves the riding Body horizontally in equal proportion to this Body and vertically not at all.\r\n         * The horizontal component (x) is applied only when two colliding Bodies are separated vertically.\r\n         * The vertical component (y) is applied only when two colliding Bodies are separated horizontally.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#friction\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.friction = new Vector2(1, 0);\r\n\r\n        /**\r\n         * If this Body is using `drag` for deceleration this property controls how the drag is applied.\r\n         * If set to `true` drag will use a damping effect rather than a linear approach. If you are\r\n         * creating a game where the Body moves freely at any angle (i.e. like the way the ship moves in\r\n         * the game Asteroids) then you will get a far smoother and more visually correct deceleration\r\n         * by using damping, avoiding the axis-drift that is prone with linear deceleration.\r\n         *\r\n         * If you enable this property then you should use far smaller `drag` values than with linear, as\r\n         * they are used as a multiplier on the velocity. Values such as 0.95 will give a nice slow\r\n         * deceleration, where-as smaller values, such as 0.5 will stop an object almost immediately.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#useDamping\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.10.0\r\n         */\r\n        this.useDamping = false;\r\n\r\n        /**\r\n         * The rate of change of this Body's `rotation`, in degrees per second.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#angularVelocity\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.angularVelocity = 0;\r\n\r\n        /**\r\n         * The Body's angular acceleration (change in angular velocity), in degrees per second squared.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#angularAcceleration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.angularAcceleration = 0;\r\n\r\n        /**\r\n         * Loss of angular velocity due to angular movement, in degrees per second.\r\n         *\r\n         * Angular drag is applied only when angular acceleration is zero.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#angularDrag\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.angularDrag = 0;\r\n\r\n        /**\r\n         * The Body's maximum angular velocity, in degrees per second.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#maxAngular\r\n         * @type {number}\r\n         * @default 1000\r\n         * @since 3.0.0\r\n         */\r\n        this.maxAngular = 1000;\r\n\r\n        /**\r\n         * The Body's inertia, relative to a default unit (1).\r\n         * With `bounce`, this affects the exchange of momentum (velocities) during collisions.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#mass\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.mass = 1;\r\n\r\n        /**\r\n         * The calculated angle of this Body's velocity vector, in radians, during the last step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#angle\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.angle = 0;\r\n\r\n        /**\r\n         * The calculated magnitude of the Body's velocity, in pixels per second, during the last step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#speed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.speed = 0;\r\n\r\n        /**\r\n         * The direction of the Body's velocity, as calculated during the last step.\r\n         * If the Body is moving on both axes (diagonally), this describes motion on the vertical axis only.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#facing\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.facing = CONST.FACING_NONE;\r\n\r\n        /**\r\n         * Whether this Body can be moved by collisions with another Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#immovable\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.immovable = false;\r\n\r\n        /**\r\n         * Whether the Body's position and rotation are affected by its velocity, acceleration, drag, and gravity.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#moves\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.moves = true;\r\n\r\n        /**\r\n         * A flag disabling the default horizontal separation of colliding bodies.\r\n         * Pass your own `collideCallback` to the collider.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#customSeparateX\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.customSeparateX = false;\r\n\r\n        /**\r\n         * A flag disabling the default vertical separation of colliding bodies.\r\n         * Pass your own `collideCallback` to the collider.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#customSeparateY\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.customSeparateY = false;\r\n\r\n        /**\r\n         * The amount of horizontal overlap (before separation), if this Body is colliding with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#overlapX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapX = 0;\r\n\r\n        /**\r\n         * The amount of vertical overlap (before separation), if this Body is colliding with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#overlapY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapY = 0;\r\n\r\n        /**\r\n         * The amount of overlap (before separation), if this Body is circular and colliding with another circular body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#overlapR\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapR = 0;\r\n\r\n        /**\r\n         * Whether this Body is overlapped with another and both are not moving.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#embedded\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.embedded = false;\r\n\r\n        /**\r\n         * Whether this Body interacts with the world boundary.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#collideWorldBounds\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.collideWorldBounds = false;\r\n\r\n        /**\r\n         * Whether this Body is checked for collisions and for which directions.\r\n         * You can set `checkCollision.none = true` to disable collision checks.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#checkCollision\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.checkCollision = { none: false, up: true, down: true, left: true, right: true };\r\n\r\n        /**\r\n         * Whether this Body is colliding with another and in which direction.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#touching\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.touching = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * Whether this Body was colliding with another during the last step, and in which direction.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#wasTouching\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.wasTouching = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * Whether this Body is colliding with a tile or the world boundary.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#blocked\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.blocked = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * Whether to automatically synchronize this Body's dimensions to the dimensions of its Game Object's visual bounds.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#syncBounds\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         * @see Phaser.GameObjects.Components.GetBounds#getBounds\r\n         */\r\n        this.syncBounds = false;\r\n\r\n        /**\r\n         * The Body's physics type (dynamic or static).\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#physicsType\r\n         * @type {integer}\r\n         * @readonly\r\n         * @default Phaser.Physics.Arcade.DYNAMIC_BODY\r\n         * @since 3.0.0\r\n         */\r\n        this.physicsType = CONST.DYNAMIC_BODY;\r\n\r\n        /**\r\n         * Cached horizontal scale of the Body's Game Object.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#_sx\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._sx = gameObject.scaleX;\r\n\r\n        /**\r\n         * Cached vertical scale of the Body's Game Object.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#_sy\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._sy = gameObject.scaleY;\r\n\r\n        /**\r\n         * The calculated change in the Body's horizontal position during the last step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#_dx\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._dx = 0;\r\n\r\n        /**\r\n         * The calculated change in the Body's vertical position during the last step.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#_dy\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._dy = 0;\r\n\r\n        /**\r\n         * Stores the Game Object's bounds.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Body#_bounds\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._bounds = new Rectangle();\r\n    },\r\n\r\n    /**\r\n     * Updates the Body's `transform`, `width`, `height`, and `center` from its Game Object.\r\n     * The Body's `position` isn't changed.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#updateBounds\r\n     * @since 3.0.0\r\n     */\r\n    updateBounds: function ()\r\n    {\r\n        var sprite = this.gameObject;\r\n\r\n        //  Container?\r\n\r\n        var transform = this.transform;\r\n\r\n        if (sprite.parentContainer)\r\n        {\r\n            var matrix = sprite.getWorldTransformMatrix(this.world._tempMatrix, this.world._tempMatrix2);\r\n\r\n            transform.x = matrix.tx;\r\n            transform.y = matrix.ty;\r\n            transform.rotation = RadToDeg(matrix.rotation);\r\n            transform.scaleX = matrix.scaleX;\r\n            transform.scaleY = matrix.scaleY;\r\n            transform.displayOriginX = sprite.displayOriginX;\r\n            transform.displayOriginY = sprite.displayOriginY;\r\n        }\r\n        else\r\n        {\r\n            transform.x = sprite.x;\r\n            transform.y = sprite.y;\r\n            transform.rotation = sprite.angle;\r\n            transform.scaleX = sprite.scaleX;\r\n            transform.scaleY = sprite.scaleY;\r\n            transform.displayOriginX = sprite.displayOriginX;\r\n            transform.displayOriginY = sprite.displayOriginY;\r\n        }\r\n\r\n        var recalc = false;\r\n\r\n        if (this.syncBounds)\r\n        {\r\n            var b = sprite.getBounds(this._bounds);\r\n\r\n            this.width = b.width;\r\n            this.height = b.height;\r\n            recalc = true;\r\n        }\r\n        else\r\n        {\r\n            var asx = Math.abs(transform.scaleX);\r\n            var asy = Math.abs(transform.scaleY);\r\n\r\n            if (this._sx !== asx || this._sy !== asy)\r\n            {\r\n                this.width = this.sourceWidth * asx;\r\n                this.height = this.sourceHeight * asy;\r\n                this._sx = asx;\r\n                this._sy = asy;\r\n                recalc = true;\r\n            }\r\n        }\r\n\r\n        if (recalc)\r\n        {\r\n            this.halfWidth = Math.floor(this.width / 2);\r\n            this.halfHeight = Math.floor(this.height / 2);\r\n            this.updateCenter();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Updates the Body's `center` from its `position`, `width`, and `height`.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#updateCenter\r\n     * @since 3.0.0\r\n     */\r\n    updateCenter: function ()\r\n    {\r\n        this.center.set(this.position.x + this.halfWidth, this.position.y + this.halfHeight);\r\n    },\r\n\r\n    /**\r\n     * Prepares the Body for a physics step by resetting the `wasTouching`, `touching` and `blocked` states.\r\n     *\r\n     * This method is only called if the physics world is going to run a step this frame.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#resetFlags\r\n     * @since 3.18.0\r\n     */\r\n    resetFlags: function ()\r\n    {\r\n        //  Store and reset collision flags\r\n        this.wasTouching.none = this.touching.none;\r\n        this.wasTouching.up = this.touching.up;\r\n        this.wasTouching.down = this.touching.down;\r\n        this.wasTouching.left = this.touching.left;\r\n        this.wasTouching.right = this.touching.right;\r\n\r\n        this.touching.none = true;\r\n        this.touching.up = false;\r\n        this.touching.down = false;\r\n        this.touching.left = false;\r\n        this.touching.right = false;\r\n\r\n        this.blocked.none = true;\r\n        this.blocked.up = false;\r\n        this.blocked.down = false;\r\n        this.blocked.left = false;\r\n        this.blocked.right = false;\r\n\r\n        this.overlapR = 0;\r\n        this.overlapX = 0;\r\n        this.overlapY = 0;\r\n\r\n        this.embedded = false;\r\n    },\r\n\r\n    /**\r\n     * Syncs the position body position with the parent Game Object.\r\n     *\r\n     * This method is called every game frame, regardless if the world steps or not.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#preUpdate\r\n     * @since 3.17.0\r\n     *\r\n     * @param {boolean} willStep - Will this Body run an update as well?\r\n     * @param {number} delta - The delta time, in seconds, elapsed since the last frame.\r\n     */\r\n    preUpdate: function (willStep, delta)\r\n    {\r\n        if (willStep)\r\n        {\r\n            this.resetFlags();\r\n        }\r\n\r\n        this.updateBounds();\r\n\r\n        var sprite = this.transform;\r\n\r\n        this.position.x = sprite.x + sprite.scaleX * (this.offset.x - sprite.displayOriginX);\r\n        this.position.y = sprite.y + sprite.scaleY * (this.offset.y - sprite.displayOriginY);\r\n\r\n        this.updateCenter();\r\n\r\n        this.rotation = sprite.rotation;\r\n\r\n        this.preRotation = this.rotation;\r\n\r\n        if (this.moves)\r\n        {\r\n            this.prev.x = this.position.x;\r\n            this.prev.y = this.position.y;\r\n            this.prevFrame.x = this.position.x;\r\n            this.prevFrame.y = this.position.y;\r\n        }\r\n\r\n        if (willStep)\r\n        {\r\n            this.update(delta);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Performs a single physics step and updates the body velocity, angle, speed and other properties.\r\n     *\r\n     * This method can be called multiple times per game frame, depending on the physics step rate.\r\n     *\r\n     * The results are synced back to the Game Object in `postUpdate`.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#update\r\n     * @fires Phaser.Physics.Arcade.Events#WORLD_BOUNDS\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delta - The delta time, in seconds, elapsed since the last frame.\r\n     */\r\n    update: function (delta)\r\n    {\r\n        this.prev.x = this.position.x;\r\n        this.prev.y = this.position.y;\r\n\r\n        if (this.moves)\r\n        {\r\n            this.world.updateMotion(this, delta);\r\n\r\n            var vx = this.velocity.x;\r\n            var vy = this.velocity.y;\r\n\r\n            this.newVelocity.set(vx * delta, vy * delta);\r\n\r\n            this.position.add(this.newVelocity);\r\n\r\n            this.updateCenter();\r\n\r\n            this.angle = Math.atan2(vy, vx);\r\n            this.speed = Math.sqrt(vx * vx + vy * vy);\r\n\r\n            //  Now the update will throw collision checks at the Body\r\n            //  And finally we'll integrate the new position back to the Sprite in postUpdate\r\n\r\n            if (this.collideWorldBounds && this.checkWorldBounds() && this.onWorldBounds)\r\n            {\r\n                this.world.emit(Events.WORLD_BOUNDS, this, this.blocked.up, this.blocked.down, this.blocked.left, this.blocked.right);\r\n            }\r\n        }\r\n\r\n        this._dx = this.position.x - this.prev.x;\r\n        this._dy = this.position.y - this.prev.y;\r\n    },\r\n\r\n    /**\r\n     * Feeds the Body results back into the parent Game Object.\r\n     *\r\n     * This method is called every game frame, regardless if the world steps or not.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#postUpdate\r\n     * @since 3.0.0\r\n     */\r\n    postUpdate: function ()\r\n    {\r\n        var dx = this.position.x - this.prevFrame.x;\r\n        var dy = this.position.y - this.prevFrame.y;\r\n\r\n        if (this.moves)\r\n        {\r\n            var mx = this.deltaMax.x;\r\n            var my = this.deltaMax.y;\r\n\r\n            if (mx !== 0 && dx !== 0)\r\n            {\r\n                if (dx < 0 && dx < -mx)\r\n                {\r\n                    dx = -mx;\r\n                }\r\n                else if (dx > 0 && dx > mx)\r\n                {\r\n                    dx = mx;\r\n                }\r\n            }\r\n\r\n            if (my !== 0 && dy !== 0)\r\n            {\r\n                if (dy < 0 && dy < -my)\r\n                {\r\n                    dy = -my;\r\n                }\r\n                else if (dy > 0 && dy > my)\r\n                {\r\n                    dy = my;\r\n                }\r\n            }\r\n\r\n            this.gameObject.x += dx;\r\n            this.gameObject.y += dy;\r\n        }\r\n\r\n        if (dx < 0)\r\n        {\r\n            this.facing = CONST.FACING_LEFT;\r\n        }\r\n        else if (dx > 0)\r\n        {\r\n            this.facing = CONST.FACING_RIGHT;\r\n        }\r\n\r\n        if (dy < 0)\r\n        {\r\n            this.facing = CONST.FACING_UP;\r\n        }\r\n        else if (dy > 0)\r\n        {\r\n            this.facing = CONST.FACING_DOWN;\r\n        }\r\n\r\n        if (this.allowRotation)\r\n        {\r\n            this.gameObject.angle += this.deltaZ();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets a custom collision boundary rectangle. Use if you want to have a custom\r\n     * boundary instead of the world boundaries.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setBoundsRectangle\r\n     * @since 3.20\r\n     *\r\n     * @param {?Phaser.Geom.Rectangle} [bounds] - The new boundary rectangle. Pass `null` to use the World bounds.\r\n     * \r\n     * @return {this} This Body object.\r\n     */\r\n    setBoundsRectangle: function (bounds)\r\n    {\r\n        this.customBoundsRectangle = (!bounds) ? this.world.bounds : bounds;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks for collisions between this Body and the world boundary and separates them.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#checkWorldBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} True if this Body is colliding with the world boundary.\r\n     */\r\n    checkWorldBounds: function ()\r\n    {\r\n        var pos = this.position;\r\n        var bounds = this.customBoundsRectangle;\r\n        var check = this.world.checkCollision;\r\n\r\n        var bx = (this.worldBounce) ? -this.worldBounce.x : -this.bounce.x;\r\n        var by = (this.worldBounce) ? -this.worldBounce.y : -this.bounce.y;\r\n\r\n        var wasSet = false;\r\n\r\n        if (pos.x < bounds.x && check.left)\r\n        {\r\n            pos.x = bounds.x;\r\n            this.velocity.x *= bx;\r\n            this.blocked.left = true;\r\n            wasSet = true;\r\n        }\r\n        else if (this.right > bounds.right && check.right)\r\n        {\r\n            pos.x = bounds.right - this.width;\r\n            this.velocity.x *= bx;\r\n            this.blocked.right = true;\r\n            wasSet = true;\r\n        }\r\n\r\n        if (pos.y < bounds.y && check.up)\r\n        {\r\n            pos.y = bounds.y;\r\n            this.velocity.y *= by;\r\n            this.blocked.up = true;\r\n            wasSet = true;\r\n        }\r\n        else if (this.bottom > bounds.bottom && check.down)\r\n        {\r\n            pos.y = bounds.bottom - this.height;\r\n            this.velocity.y *= by;\r\n            this.blocked.down = true;\r\n            wasSet = true;\r\n        }\r\n\r\n        if (wasSet)\r\n        {\r\n            this.blocked.none = false;\r\n        }\r\n\r\n        return wasSet;\r\n    },\r\n\r\n    /**\r\n     * Sets the offset of the Body's position from its Game Object's position.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal offset, in source pixels.\r\n     * @param {number} [y=x] - The vertical offset, in source pixels.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setOffset: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.offset.set(x, y);\r\n        this.updateCenter();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sizes and positions this Body's boundary, as a rectangle.\r\n     * Modifies the Body `offset` if `center` is true (the default).\r\n     * Resets the width and height to match current frame, if no width and height provided and a frame is found.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [width] - The width of the Body in pixels. Cannot be zero. If not given, and the parent Game Object has a frame, it will use the frame width.\r\n     * @param {integer} [height] - The height of the Body in pixels. Cannot be zero. If not given, and the parent Game Object has a frame, it will use the frame height.\r\n     * @param {boolean} [center=true] - Modify the Body's `offset`, placing the Body's center on its Game Object's center. Only works if the Game Object has the `getCenter` method.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setSize: function (width, height, center)\r\n    {\r\n        if (center === undefined) { center = true; }\r\n\r\n        var gameObject = this.gameObject;\r\n\r\n        if (!width && gameObject.frame)\r\n        {\r\n            width = gameObject.frame.realWidth;\r\n        }\r\n\r\n        if (!height && gameObject.frame)\r\n        {\r\n            height = gameObject.frame.realHeight;\r\n        }\r\n\r\n        this.sourceWidth = width;\r\n        this.sourceHeight = height;\r\n\r\n        this.width = this.sourceWidth * this._sx;\r\n        this.height = this.sourceHeight * this._sy;\r\n\r\n        this.halfWidth = Math.floor(this.width / 2);\r\n        this.halfHeight = Math.floor(this.height / 2);\r\n\r\n        this.updateCenter();\r\n\r\n        if (center && gameObject.getCenter)\r\n        {\r\n            var ox = gameObject.displayWidth / 2;\r\n            var oy = gameObject.displayHeight / 2;\r\n\r\n            this.offset.set(ox - this.halfWidth, oy - this.halfHeight);\r\n        }\r\n\r\n        this.isCircle = false;\r\n        this.radius = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sizes and positions this Body's boundary, as a circle.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the Body, in source pixels.\r\n     * @param {number} [offsetX] - The horizontal offset of the Body from its Game Object, in source pixels.\r\n     * @param {number} [offsetY] - The vertical offset of the Body from its Game Object, in source pixels.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setCircle: function (radius, offsetX, offsetY)\r\n    {\r\n        if (offsetX === undefined) { offsetX = this.offset.x; }\r\n        if (offsetY === undefined) { offsetY = this.offset.y; }\r\n\r\n        if (radius > 0)\r\n        {\r\n            this.isCircle = true;\r\n            this.radius = radius;\r\n\r\n            this.sourceWidth = radius * 2;\r\n            this.sourceHeight = radius * 2;\r\n\r\n            this.width = this.sourceWidth * this._sx;\r\n            this.height = this.sourceHeight * this._sy;\r\n\r\n            this.halfWidth = Math.floor(this.width / 2);\r\n            this.halfHeight = Math.floor(this.height / 2);\r\n\r\n            this.offset.set(offsetX, offsetY);\r\n\r\n            this.updateCenter();\r\n        }\r\n        else\r\n        {\r\n            this.isCircle = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resets this Body to the given coordinates. Also positions its parent Game Object to the same coordinates.\r\n     * If the Body had any velocity or acceleration it is lost as a result of calling this.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position to place the Game Object and Body.\r\n     * @param {number} y - The vertical position to place the Game Object and Body.\r\n     */\r\n    reset: function (x, y)\r\n    {\r\n        this.stop();\r\n\r\n        var gameObject = this.gameObject;\r\n\r\n        gameObject.setPosition(x, y);\r\n\r\n        if (gameObject.getTopLeft)\r\n        {\r\n            gameObject.getTopLeft(this.position);\r\n        }\r\n        else\r\n        {\r\n            this.position.set(x, y);\r\n        }\r\n\r\n        this.prev.copy(this.position);\r\n        this.prevFrame.copy(this.position);\r\n\r\n        this.rotation = gameObject.angle;\r\n        this.preRotation = gameObject.angle;\r\n\r\n        this.updateBounds();\r\n        this.updateCenter();\r\n    },\r\n\r\n    /**\r\n     * Sets acceleration, velocity, and speed to zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.velocity.set(0);\r\n        this.acceleration.set(0);\r\n        this.speed = 0;\r\n        this.angularVelocity = 0;\r\n        this.angularAcceleration = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Copies the coordinates of this Body's edges into an object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeBodyBounds} obj - An object to copy the values into.\r\n     *\r\n     * @return {Phaser.Types.Physics.Arcade.ArcadeBodyBounds} - An object with {x, y, right, bottom}.\r\n     */\r\n    getBounds: function (obj)\r\n    {\r\n        obj.x = this.x;\r\n        obj.y = this.y;\r\n        obj.right = this.right;\r\n        obj.bottom = this.bottom;\r\n\r\n        return obj;\r\n    },\r\n\r\n    /**\r\n     * Tests if the coordinates are within this Body's boundary.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#hitTest\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal coordinate.\r\n     * @param {number} y - The vertical coordinate.\r\n     *\r\n     * @return {boolean} True if (x, y) is within this Body.\r\n     */\r\n    hitTest: function (x, y)\r\n    {\r\n        if (!this.isCircle)\r\n        {\r\n            return RectangleContains(this, x, y);\r\n        }\r\n\r\n        //  Check if x/y are within the bounds first\r\n        if (this.radius > 0 && x >= this.left && x <= this.right && y >= this.top && y <= this.bottom)\r\n        {\r\n            var dx = (this.center.x - x) * (this.center.x - x);\r\n            var dy = (this.center.y - y) * (this.center.y - y);\r\n\r\n            return (dx + dy) <= (this.radius * this.radius);\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Whether this Body is touching a tile or the world boundary while moving down.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#onFloor\r\n     * @since 3.0.0\r\n     * @see Phaser.Physics.Arcade.Body#blocked\r\n     *\r\n     * @return {boolean} True if touching.\r\n     */\r\n    onFloor: function ()\r\n    {\r\n        return this.blocked.down;\r\n    },\r\n\r\n    /**\r\n     * Whether this Body is touching a tile or the world boundary while moving up.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#onCeiling\r\n     * @since 3.0.0\r\n     * @see Phaser.Physics.Arcade.Body#blocked\r\n     *\r\n     * @return {boolean} True if touching.\r\n     */\r\n    onCeiling: function ()\r\n    {\r\n        return this.blocked.up;\r\n    },\r\n\r\n    /**\r\n     * Whether this Body is touching a tile or the world boundary while moving left or right.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#onWall\r\n     * @since 3.0.0\r\n     * @see Phaser.Physics.Arcade.Body#blocked\r\n     *\r\n     * @return {boolean} True if touching.\r\n     */\r\n    onWall: function ()\r\n    {\r\n        return (this.blocked.left || this.blocked.right);\r\n    },\r\n\r\n    /**\r\n     * The absolute (non-negative) change in this Body's horizontal position from the previous step.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#deltaAbsX\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The delta value.\r\n     */\r\n    deltaAbsX: function ()\r\n    {\r\n        return (this._dx > 0) ? this._dx : -this._dx;\r\n    },\r\n\r\n    /**\r\n     * The absolute (non-negative) change in this Body's vertical position from the previous step.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#deltaAbsY\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The delta value.\r\n     */\r\n    deltaAbsY: function ()\r\n    {\r\n        return (this._dy > 0) ? this._dy : -this._dy;\r\n    },\r\n\r\n    /**\r\n     * The change in this Body's horizontal position from the previous step.\r\n     * This value is set during the Body's update phase.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#deltaX\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The delta value.\r\n     */\r\n    deltaX: function ()\r\n    {\r\n        return this._dx;\r\n    },\r\n\r\n    /**\r\n     * The change in this Body's vertical position from the previous step.\r\n     * This value is set during the Body's update phase.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#deltaY\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The delta value.\r\n     */\r\n    deltaY: function ()\r\n    {\r\n        return this._dy;\r\n    },\r\n\r\n    /**\r\n     * The change in this Body's rotation from the previous step, in degrees.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#deltaZ\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The delta value.\r\n     */\r\n    deltaZ: function ()\r\n    {\r\n        return this.rotation - this.preRotation;\r\n    },\r\n\r\n    /**\r\n     * Disables this Body and marks it for deletion by the simulation.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.enable = false;\r\n\r\n        if (this.world)\r\n        {\r\n            this.world.pendingDestroy.set(this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Draws this Body's boundary and velocity, if enabled.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#drawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphic - The Graphics object to draw on.\r\n     */\r\n    drawDebug: function (graphic)\r\n    {\r\n        var pos = this.position;\r\n\r\n        var x = pos.x + this.halfWidth;\r\n        var y = pos.y + this.halfHeight;\r\n\r\n        if (this.debugShowBody)\r\n        {\r\n            graphic.lineStyle(graphic.defaultStrokeWidth, this.debugBodyColor);\r\n\r\n            if (this.isCircle)\r\n            {\r\n                graphic.strokeCircle(x, y, this.width / 2);\r\n            }\r\n            else\r\n            {\r\n                //  Only draw the sides where checkCollision is true, similar to debugger in layer\r\n                if (this.checkCollision.up)\r\n                {\r\n                    graphic.lineBetween(pos.x, pos.y, pos.x + this.width, pos.y);\r\n                }\r\n\r\n                if (this.checkCollision.right)\r\n                {\r\n                    graphic.lineBetween(pos.x + this.width, pos.y, pos.x + this.width, pos.y + this.height);\r\n                }\r\n\r\n                if (this.checkCollision.down)\r\n                {\r\n                    graphic.lineBetween(pos.x, pos.y + this.height, pos.x + this.width, pos.y + this.height);\r\n                }\r\n\r\n                if (this.checkCollision.left)\r\n                {\r\n                    graphic.lineBetween(pos.x, pos.y, pos.x, pos.y + this.height);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.debugShowVelocity)\r\n        {\r\n            graphic.lineStyle(graphic.defaultStrokeWidth, this.world.defaults.velocityDebugColor, 1);\r\n            graphic.lineBetween(x, y, x + this.velocity.x / 2, y + this.velocity.y / 2);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Whether this Body will be drawn to the debug display.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#willDrawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} True if either `debugShowBody` or `debugShowVelocity` are enabled.\r\n     */\r\n    willDrawDebug: function ()\r\n    {\r\n        return (this.debugShowBody || this.debugShowVelocity);\r\n    },\r\n\r\n    /**\r\n     * Sets whether this Body collides with the world boundary.\r\n     *\r\n     * Optionally also sets the World Bounce values. If the `Body.worldBounce` is null, it's set to a new Vec2 first.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setCollideWorldBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - `true` if this body should collide with the world bounds, otherwise `false`.\r\n     * @param {number} [bounceX] - If given this will be replace the `worldBounce.x` value.\r\n     * @param {number} [bounceY] - If given this will be replace the `worldBounce.y` value.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setCollideWorldBounds: function (value, bounceX, bounceY)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.collideWorldBounds = value;\r\n\r\n        var setBounceX = (bounceX !== undefined);\r\n        var setBounceY = (bounceY !== undefined);\r\n\r\n        if (setBounceX || setBounceY)\r\n        {\r\n            if (!this.worldBounce)\r\n            {\r\n                this.worldBounce = new Vector2();\r\n            }\r\n\r\n            if (setBounceX)\r\n            {\r\n                this.worldBounce.x = bounceX;\r\n            }\r\n\r\n            if (setBounceY)\r\n            {\r\n                this.worldBounce.y = bounceY;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity, in pixels per second.\r\n     * @param {number} [y=x] - The vertical velocity, in pixels per second.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setVelocity: function (x, y)\r\n    {\r\n        this.velocity.set(x, y);\r\n\r\n        x = this.velocity.x;\r\n        y = this.velocity.y;\r\n\r\n        this.speed = Math.sqrt(x * x + y * y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setVelocityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The velocity, in pixels per second.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setVelocityX: function (value)\r\n    {\r\n        this.velocity.x = value;\r\n\r\n        var x = value;\r\n        var y = this.velocity.y;\r\n\r\n        this.speed = Math.sqrt(x * x + y * y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setVelocityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The velocity, in pixels per second.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setVelocityY: function (value)\r\n    {\r\n        this.velocity.y = value;\r\n\r\n        var x = this.velocity.x;\r\n        var y = value;\r\n\r\n        this.speed = Math.sqrt(x * x + y * y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's maximum velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setMaxVelocity\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} x - The horizontal velocity, in pixels per second.\r\n     * @param {number} [y=x] - The vertical velocity, in pixels per second.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setMaxVelocity: function (x, y)\r\n    {\r\n        this.maxVelocity.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the maximum speed the Body can move.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setMaxSpeed\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} value - The maximum speed value, in pixels per second. Set to a negative value to disable.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setMaxSpeed: function (value)\r\n    {\r\n        this.maxSpeed = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's bounce.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setBounce\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal bounce, relative to 1.\r\n     * @param {number} y - The vertical bounce, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setBounce: function (x, y)\r\n    {\r\n        this.bounce.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal bounce.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setBounceX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The bounce, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setBounceX: function (value)\r\n    {\r\n        this.bounce.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical bounce.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setBounceY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The bounce, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setBounceY: function (value)\r\n    {\r\n        this.bounce.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAcceleration\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal component, in pixels per second squared.\r\n     * @param {number} y - The vertical component, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAcceleration: function (x, y)\r\n    {\r\n        this.acceleration.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAccelerationX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The acceleration, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAccelerationX: function (value)\r\n    {\r\n        this.acceleration.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAccelerationY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The acceleration, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAccelerationY: function (value)\r\n    {\r\n        this.acceleration.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Enables or disables drag.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAllowDrag\r\n     * @since 3.9.0\r\n     * @see Phaser.Physics.Arcade.Body#allowDrag\r\n     *\r\n     * @param {boolean} [value=true] - `true` to allow drag on this body, or `false` to disable it.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAllowDrag: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.allowDrag = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Enables or disables gravity's effect on this Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAllowGravity\r\n     * @since 3.9.0\r\n     * @see Phaser.Physics.Arcade.Body#allowGravity\r\n     *\r\n     * @param {boolean} [value=true] - `true` to allow gravity on this body, or `false` to disable it.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAllowGravity: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.allowGravity = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Enables or disables rotation.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAllowRotation\r\n     * @since 3.9.0\r\n     * @see Phaser.Physics.Arcade.Body#allowRotation\r\n     *\r\n     * @param {boolean} [value=true] - `true` to allow rotation on this body, or `false` to disable it.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAllowRotation: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.allowRotation = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's drag.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setDrag\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal component, in pixels per second squared.\r\n     * @param {number} y - The vertical component, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setDrag: function (x, y)\r\n    {\r\n        this.drag.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal drag.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setDragX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The drag, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setDragX: function (value)\r\n    {\r\n        this.drag.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical drag.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setDragY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The drag, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setDragY: function (value)\r\n    {\r\n        this.drag.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's gravity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal component, in pixels per second squared.\r\n     * @param {number} y - The vertical component, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setGravity: function (x, y)\r\n    {\r\n        this.gravity.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal gravity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setGravityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The gravity, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setGravityX: function (value)\r\n    {\r\n        this.gravity.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical gravity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setGravityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The gravity, in pixels per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setGravityY: function (value)\r\n    {\r\n        this.gravity.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's friction.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setFriction\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal component, relative to 1.\r\n     * @param {number} y - The vertical component, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setFriction: function (x, y)\r\n    {\r\n        this.friction.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's horizontal friction.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setFrictionX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The friction value, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setFrictionX: function (value)\r\n    {\r\n        this.friction.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's vertical friction.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setFrictionY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The friction value, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setFrictionY: function (value)\r\n    {\r\n        this.friction.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's angular velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAngularVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The velocity, in degrees per second.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAngularVelocity: function (value)\r\n    {\r\n        this.angularVelocity = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's angular acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAngularAcceleration\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The acceleration, in degrees per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAngularAcceleration: function (value)\r\n    {\r\n        this.angularAcceleration = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's angular drag.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setAngularDrag\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The drag, in degrees per second squared.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setAngularDrag: function (value)\r\n    {\r\n        this.angularDrag = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's mass.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setMass\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The mass value, relative to 1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setMass: function (value)\r\n    {\r\n        this.mass = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's `immovable` property.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setImmovable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - The value to assign to `immovable`.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setImmovable: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.immovable = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Body's `enable` property.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Body#setEnable\r\n     * @since 3.15.0\r\n     *\r\n     * @param {boolean} [value=true] - The value to assign to `enable`.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Body} This Body object.\r\n     */\r\n    setEnable: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.enable = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The Body's horizontal position (left edge).\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.x = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Body's vertical position (top edge).\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.position.y = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The left edge of the Body's boundary. Identical to x.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#left\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The right edge of the Body's boundary.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#right\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x + this.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The top edge of the Body's boundary. Identical to y.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#top\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The bottom edge of this Body's boundary.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Body#bottom\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y + this.height;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Body;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9Cb2R5LmpzP2U0OGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsa0VBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLDBFQUFVO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELHdCQUF3QixtQkFBTyxDQUFDLDJGQUErQjtBQUMvRCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix1Q0FBdUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZUFBZTs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QjtBQUM3RCxvQ0FBb0MseUJBQXlCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVEO0FBQ0EsZ0JBQWdCLDZDQUE2QyxtQkFBbUIsb0JBQW9CO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL0JvZHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBCZW5qYW1pbiBELiBSaWNoYXJkcyA8YmVuamFtaW5kcmljaGFyZHNAZ21haWwuY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIFJhZFRvRGVnID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9SYWRUb0RlZycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBSZWN0YW5nbGVDb250YWlucyA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL0NvbnRhaW5zJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIER5bmFtaWMgQXJjYWRlIEJvZHkuXHJcbiAqXHJcbiAqIEl0cyBzdGF0aWMgY291bnRlcnBhcnQgaXMge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5fS5cclxuICpcclxuICogQGNsYXNzIEJvZHlcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkFyY2FkZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSB3b3JsZCAtIFRoZSBBcmNhZGUgUGh5c2ljcyBzaW11bGF0aW9uIHRoaXMgQm9keSBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoaXMgQm9keSBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIEJvZHkgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQm9keSAod29ybGQsIGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gKGdhbWVPYmplY3Qud2lkdGgpID8gZ2FtZU9iamVjdC53aWR0aCA6IDY0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSAoZ2FtZU9iamVjdC5oZWlnaHQpID8gZ2FtZU9iamVjdC5oZWlnaHQgOiA2NDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEFyY2FkZSBQaHlzaWNzIHNpbXVsYXRpb24gdGhpcyBCb2R5IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN3b3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZCA9IHdvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR2FtZSBPYmplY3QgdGhpcyBCb2R5IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNnYW1lT2JqZWN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZU9iamVjdCA9IGdhbWVPYmplY3Q7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkIHRvIHRoaXMgQm9keS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3RyYW5zZm9ybVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB7XHJcbiAgICAgICAgICAgIHg6IGdhbWVPYmplY3QueCxcclxuICAgICAgICAgICAgeTogZ2FtZU9iamVjdC55LFxyXG4gICAgICAgICAgICByb3RhdGlvbjogZ2FtZU9iamVjdC5hbmdsZSxcclxuICAgICAgICAgICAgc2NhbGVYOiBnYW1lT2JqZWN0LnNjYWxlWCxcclxuICAgICAgICAgICAgc2NhbGVZOiBnYW1lT2JqZWN0LnNjYWxlWSxcclxuICAgICAgICAgICAgZGlzcGxheU9yaWdpblg6IGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblgsXHJcbiAgICAgICAgICAgIGRpc3BsYXlPcmlnaW5ZOiBnYW1lT2JqZWN0LmRpc3BsYXlPcmlnaW5ZXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgQm9keSdzIGJvdW5kYXJ5IGlzIGRyYXduIHRvIHRoZSBkZWJ1ZyBkaXNwbGF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZGVidWdTaG93Qm9keVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93Qm9keSA9IHdvcmxkLmRlZmF1bHRzLmRlYnVnU2hvd0JvZHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEJvZHkncyB2ZWxvY2l0eSBpcyBkcmF3biB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2RlYnVnU2hvd1ZlbG9jaXR5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWJ1Z1Nob3dWZWxvY2l0eSA9IHdvcmxkLmRlZmF1bHRzLmRlYnVnU2hvd1ZlbG9jaXR5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29sb3Igb2YgdGhpcyBCb2R5IG9uIHRoZSBkZWJ1ZyBkaXNwbGF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZGVidWdCb2R5Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYnVnQm9keUNvbG9yID0gd29ybGQuZGVmYXVsdHMuYm9keURlYnVnQ29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5IGlzIHVwZGF0ZWQgYnkgdGhlIHBoeXNpY3Mgc2ltdWxhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2VuYWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5J3MgYm91bmRhcnkgaXMgY2lyY3VsYXIgKHRydWUpIG9yIHJlY3Rhbmd1bGFyIChmYWxzZSkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNpc0NpcmNsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRDaXJjbGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzQ2lyY2xlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQm9keSBpcyBjaXJjdWxhciwgdGhpcyBpcyB0aGUgdW5zY2FsZWQgcmFkaXVzIG9mIHRoZSBCb2R5J3MgYm91bmRhcnksIGFzIHNldCBieSBzZXRDaXJjbGUoKSwgaW4gc291cmNlIHBpeGVscy5cclxuICAgICAgICAgKiBUaGUgdHJ1ZSByYWRpdXMgaXMgZXF1YWwgdG8gYGhhbGZXaWR0aGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNyYWRpdXNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldENpcmNsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG9mZnNldCBvZiB0aGlzIEJvZHkncyBwb3NpdGlvbiBmcm9tIGl0cyBHYW1lIE9iamVjdCdzIHBvc2l0aW9uLCBpbiBzb3VyY2UgcGl4ZWxzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjb2Zmc2V0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRPZmZzZXRcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9mZnNldCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGlzIEJvZHkgd2l0aGluIHRoZSBzaW11bGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjIoZ2FtZU9iamVjdC54LCBnYW1lT2JqZWN0LnkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhpcyBCb2R5IGR1cmluZyB0aGUgcHJldmlvdXMgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3ByZXZcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByZXYgPSBuZXcgVmVjdG9yMihnYW1lT2JqZWN0LngsIGdhbWVPYmplY3QueSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGlzIEJvZHkgZHVyaW5nIHRoZSBwcmV2aW91cyBmcmFtZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNwcmV2RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmV2RnJhbWUgPSBuZXcgVmVjdG9yMihnYW1lT2JqZWN0LngsIGdhbWVPYmplY3QueSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5J3MgYHJvdGF0aW9uYCBpcyBhZmZlY3RlZCBieSBpdHMgYW5ndWxhciBhY2NlbGVyYXRpb24gYW5kIGFuZ3VsYXIgdmVsb2NpdHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNhbGxvd1JvdGF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxsb3dSb3RhdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgYm9keSdzIHJvdGF0aW9uLCBpbiBkZWdyZWVzLCBiYXNlZCBvbiBpdHMgYW5ndWxhciBhY2NlbGVyYXRpb24gYW5kIGFuZ3VsYXIgdmVsb2NpdHkuXHJcbiAgICAgICAgICogVGhlIEJvZHkncyByb3RhdGlvbiBjb250cm9scyB0aGUgYGFuZ2xlYCBvZiBpdHMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogSXQgZG9lc24ndCByb3RhdGUgdGhlIEJvZHkncyBib3VuZGFyeSwgd2hpY2ggaXMgYWx3YXlzIGFuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUgb3IgYSBjaXJjbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNyb3RhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IGdhbWVPYmplY3QuYW5nbGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3Mgcm90YXRpb24sIGluIGRlZ3JlZXMsIGR1cmluZyB0aGUgcHJldmlvdXMgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3ByZVJvdGF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByZVJvdGF0aW9uID0gZ2FtZU9iamVjdC5hbmdsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBCb2R5J3MgYm91bmRhcnksIGluIHBpeGVscy5cclxuICAgICAgICAgKiBJZiB0aGUgQm9keSBpcyBjaXJjdWxhciwgdGhpcyBpcyBhbHNvIHRoZSBCb2R5J3MgZGlhbWV0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgNjRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIEJvZHkncyBib3VuZGFyeSwgaW4gcGl4ZWxzLlxyXG4gICAgICAgICAqIElmIHRoZSBCb2R5IGlzIGNpcmN1bGFyLCB0aGlzIGlzIGFsc28gdGhlIEJvZHkncyBkaWFtZXRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgNjRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHVuc2NhbGVkIHdpZHRoIG9mIHRoZSBCb2R5LCBpbiBzb3VyY2UgcGl4ZWxzLCBhcyBzZXQgYnkgc2V0U2l6ZSgpLlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGlzIHRoZSB3aWR0aCBvZiB0aGUgQm9keSdzIEdhbWUgT2JqZWN0J3MgdGV4dHVyZSBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NvdXJjZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldFNpemVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvdXJjZVdpZHRoID0gd2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB1bnNjYWxlZCBoZWlnaHQgb2YgdGhlIEJvZHksIGluIHNvdXJjZSBwaXhlbHMsIGFzIHNldCBieSBzZXRTaXplKCkuXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgQm9keSdzIEdhbWUgT2JqZWN0J3MgdGV4dHVyZSBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NvdXJjZUhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRTaXplXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2VIZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChnYW1lT2JqZWN0LmZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VXaWR0aCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUhlaWdodCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhhbGYgdGhlIEJvZHkncyB3aWR0aCwgaW4gcGl4ZWxzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjaGFsZldpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbGZXaWR0aCA9IE1hdGguYWJzKHdpZHRoIC8gMik7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhhbGYgdGhlIEJvZHkncyBoZWlnaHQsIGluIHBpeGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2hhbGZIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGFsZkhlaWdodCA9IE1hdGguYWJzKGhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2VudGVyIG9mIHRoZSBCb2R5J3MgYm91bmRhcnkuXHJcbiAgICAgICAgICogVGhlIG1pZHBvaW50IG9mIGl0cyBgcG9zaXRpb25gICh0b3AtbGVmdCBjb3JuZXIpIGFuZCBpdHMgYm90dG9tLXJpZ2h0IGNvcm5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2NlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoZ2FtZU9iamVjdC54ICsgdGhpcy5oYWxmV2lkdGgsIGdhbWVPYmplY3QueSArIHRoaXMuaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgdmVsb2NpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjdmVsb2NpdHlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEJvZHkncyBjYWxjdWxhdGVkIHZlbG9jaXR5LCBpbiBwaXhlbHMgcGVyIHNlY29uZCwgYXQgdGhlIGxhc3Qgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I25ld1ZlbG9jaXR5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZXdWZWxvY2l0eSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgYWJzb2x1dGUgbWF4aW11bSBjaGFuZ2UgaW4gcG9zaXRpb24sIGluIHBpeGVscyBwZXIgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2RlbHRhTWF4XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YU1heCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgY2hhbmdlIGluIHZlbG9jaXR5LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjYWNjZWxlcmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgQm9keSdzIHZlbG9jaXR5IGlzIGFmZmVjdGVkIGJ5IGl0cyBgZHJhZ2AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNhbGxvd0RyYWdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbGxvd0RyYWcgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBYnNvbHV0ZSBsb3NzIG9mIHZlbG9jaXR5IGR1ZSB0byBtb3ZlbWVudCwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKiBUaGUgeCBhbmQgeSBjb21wb25lbnRzIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBXaGVuIGB1c2VEYW1waW5nYCBpcyB0cnVlLCB0aGlzIGlzIDEgbWludXMgdGhlIGRhbXBpbmcgZmFjdG9yLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyB0aGUgQm9keSBsb3NlcyBubyB2ZWxvY2l0eS5cclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDAuOTUgbWVhbnMgdGhlIEJvZHkgbG9zZXMgNSUgb2YgaXRzIHZlbG9jaXR5IHBlciBzdGVwLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMC41IG1lYW5zIHRoZSBCb2R5IGxvc2VzIDUwJSBvZiBpdHMgdmVsb2NpdHkgcGVyIHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBEcmFnIGlzIGFwcGxpZWQgb25seSB3aGVuIGBhY2NlbGVyYXRpb25gIGlzIHplcm8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNkcmFnXHJcbiAgICAgICAgICogQHR5cGUgeyhQaGFzZXIuTWF0aC5WZWN0b3IyfG51bWJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmFnID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIEJvZHkncyBwb3NpdGlvbiBpcyBhZmZlY3RlZCBieSBncmF2aXR5IChsb2NhbCBvciB3b3JsZCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNhbGxvd0dyYXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNncmF2aXR5XHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjZ3Jhdml0eVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxsb3dHcmF2aXR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWNjZWxlcmF0aW9uIGR1ZSB0byBncmF2aXR5IChzcGVjaWZpYyB0byB0aGlzIEJvZHkpLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqIFRvdGFsIGdyYXZpdHkgaXMgdGhlIHN1bSBvZiB0aGlzIHZlY3RvciBhbmQgdGhlIHNpbXVsYXRpb24ncyBgZ3Jhdml0eWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNncmF2aXR5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjZ3Jhdml0eVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3Jhdml0eSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlYm91bmQgZm9sbG93aW5nIGEgY29sbGlzaW9uLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjYm91bmNlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib3VuY2UgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWJvdW5kIGZvbGxvd2luZyBhIGNvbGxpc2lvbiB3aXRoIHRoZSB3b3JsZCBib3VuZGFyeSwgcmVsYXRpdmUgdG8gMS5cclxuICAgICAgICAgKiBJZiBudWxsLCBgYm91bmNlYCBpcyB1c2VkIGluc3RlYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN3b3JsZEJvdW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZEJvdW5jZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByZWN0YW5nbGUgdXNlZCBmb3Igd29ybGQgYm91bmRhcnkgY29sbGlzaW9ucy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byB0aGUgd29ybGQgYm91bmRhcnkgcmVjdGFuZ2xlLiBPciwgaWYgdGhpcyBCb2R5IHdhc1xyXG4gICAgICAgICAqIGNyZWF0ZWQgYnkgYSBQaHlzaWNzIEdyb3VwLCB0aGVuIHdoYXRldmVyIHJlY3RhbmdsZSB0aGF0IEdyb3VwIGRlZmluZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogWW91IGNhbiBhbHNvIGNoYW5nZSBpdCBieSB1c2luZyB0aGUgYEJvZHkuc2V0Qm91bmRzUmVjdGFuZ2xlYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNjdXN0b21Cb3VuZHNSZWN0YW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5HZW9tLlJlY3RhbmdsZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VzdG9tQm91bmRzUmVjdGFuZ2xlID0gd29ybGQuYm91bmRzO1xyXG5cclxuICAgICAgICAvLyAgSWYgdHJ1ZSB0aGlzIEJvZHkgd2lsbCBkaXNwYXRjaCBldmVudHNcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgc2ltdWxhdGlvbiBlbWl0cyBhIGB3b3JsZGJvdW5kc2AgZXZlbnQgd2hlbiB0aGlzIEJvZHkgY29sbGlkZXMgd2l0aCB0aGUgd29ybGQgYm91bmRhcnkgKGFuZCBgY29sbGlkZVdvcmxkQm91bmRzYCBpcyBhbHNvIHRydWUpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjb25Xb3JsZEJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjd29ybGRib3VuZHNFdmVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Xb3JsZEJvdW5kcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBzaW11bGF0aW9uIGVtaXRzIGEgYGNvbGxpZGVgIGV2ZW50IHdoZW4gdGhpcyBCb2R5IGNvbGxpZGVzIHdpdGggYW5vdGhlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I29uQ29sbGlkZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZUV2ZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vbkNvbGxpZGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgc2ltdWxhdGlvbiBlbWl0cyBhbiBgb3ZlcmxhcGAgZXZlbnQgd2hlbiB0aGlzIEJvZHkgb3ZlcmxhcHMgd2l0aCBhbm90aGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjb25PdmVybGFwXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNvdmVybGFwRXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uT3ZlcmxhcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQm9keSdzIGFic29sdXRlIG1heGltdW0gdmVsb2NpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjb21wb25lbnRzIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNtYXhWZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4VmVsb2NpdHkgPSBuZXcgVmVjdG9yMigxMDAwMCwgMTAwMDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBzcGVlZCB0aGlzIEJvZHkgaXMgYWxsb3dlZCB0byByZWFjaC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIG5vdCBuZWdhdGl2ZSBpdCBsaW1pdHMgdGhlIHNjYWxhciB2YWx1ZSBvZiBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEFueSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBubyBtYXhpbXVtIGlzIGJlaW5nIGFwcGxpZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNtYXhTcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4U3BlZWQgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBCb2R5IGlzIGBpbW1vdmFibGVgIGFuZCBpbiBtb3Rpb24sIGBmcmljdGlvbmAgaXMgdGhlIHByb3BvcnRpb24gb2YgdGhpcyBCb2R5J3MgbW90aW9uIHJlY2VpdmVkIGJ5IHRoZSByaWRpbmcgQm9keSBvbiBlYWNoIGF4aXMsIHJlbGF0aXZlIHRvIDEuXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgKDEsIDApIG1vdmVzIHRoZSByaWRpbmcgQm9keSBob3Jpem9udGFsbHkgaW4gZXF1YWwgcHJvcG9ydGlvbiB0byB0aGlzIEJvZHkgYW5kIHZlcnRpY2FsbHkgbm90IGF0IGFsbC5cclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBjb21wb25lbnQgKHgpIGlzIGFwcGxpZWQgb25seSB3aGVuIHR3byBjb2xsaWRpbmcgQm9kaWVzIGFyZSBzZXBhcmF0ZWQgdmVydGljYWxseS5cclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgY29tcG9uZW50ICh5KSBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0d28gY29sbGlkaW5nIEJvZGllcyBhcmUgc2VwYXJhdGVkIGhvcml6b250YWxseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2ZyaWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmljdGlvbiA9IG5ldyBWZWN0b3IyKDEsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIEJvZHkgaXMgdXNpbmcgYGRyYWdgIGZvciBkZWNlbGVyYXRpb24gdGhpcyBwcm9wZXJ0eSBjb250cm9scyBob3cgdGhlIGRyYWcgaXMgYXBwbGllZC5cclxuICAgICAgICAgKiBJZiBzZXQgdG8gYHRydWVgIGRyYWcgd2lsbCB1c2UgYSBkYW1waW5nIGVmZmVjdCByYXRoZXIgdGhhbiBhIGxpbmVhciBhcHByb2FjaC4gSWYgeW91IGFyZVxyXG4gICAgICAgICAqIGNyZWF0aW5nIGEgZ2FtZSB3aGVyZSB0aGUgQm9keSBtb3ZlcyBmcmVlbHkgYXQgYW55IGFuZ2xlIChpLmUuIGxpa2UgdGhlIHdheSB0aGUgc2hpcCBtb3ZlcyBpblxyXG4gICAgICAgICAqIHRoZSBnYW1lIEFzdGVyb2lkcykgdGhlbiB5b3Ugd2lsbCBnZXQgYSBmYXIgc21vb3RoZXIgYW5kIG1vcmUgdmlzdWFsbHkgY29ycmVjdCBkZWNlbGVyYXRpb25cclxuICAgICAgICAgKiBieSB1c2luZyBkYW1waW5nLCBhdm9pZGluZyB0aGUgYXhpcy1kcmlmdCB0aGF0IGlzIHByb25lIHdpdGggbGluZWFyIGRlY2VsZXJhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSBlbmFibGUgdGhpcyBwcm9wZXJ0eSB0aGVuIHlvdSBzaG91bGQgdXNlIGZhciBzbWFsbGVyIGBkcmFnYCB2YWx1ZXMgdGhhbiB3aXRoIGxpbmVhciwgYXNcclxuICAgICAgICAgKiB0aGV5IGFyZSB1c2VkIGFzIGEgbXVsdGlwbGllciBvbiB0aGUgdmVsb2NpdHkuIFZhbHVlcyBzdWNoIGFzIDAuOTUgd2lsbCBnaXZlIGEgbmljZSBzbG93XHJcbiAgICAgICAgICogZGVjZWxlcmF0aW9uLCB3aGVyZS1hcyBzbWFsbGVyIHZhbHVlcywgc3VjaCBhcyAwLjUgd2lsbCBzdG9wIGFuIG9iamVjdCBhbG1vc3QgaW1tZWRpYXRlbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN1c2VEYW1waW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51c2VEYW1waW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByYXRlIG9mIGNoYW5nZSBvZiB0aGlzIEJvZHkncyBgcm90YXRpb25gLCBpbiBkZWdyZWVzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNhbmd1bGFyVmVsb2NpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgYW5ndWxhciBhY2NlbGVyYXRpb24gKGNoYW5nZSBpbiBhbmd1bGFyIHZlbG9jaXR5KSwgaW4gZGVncmVlcyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNhbmd1bGFyQWNjZWxlcmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmd1bGFyQWNjZWxlcmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTG9zcyBvZiBhbmd1bGFyIHZlbG9jaXR5IGR1ZSB0byBhbmd1bGFyIG1vdmVtZW50LCBpbiBkZWdyZWVzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBbmd1bGFyIGRyYWcgaXMgYXBwbGllZCBvbmx5IHdoZW4gYW5ndWxhciBhY2NlbGVyYXRpb24gaXMgemVyby5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2FuZ3VsYXJEcmFnXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmd1bGFyRHJhZyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgbWF4aW11bSBhbmd1bGFyIHZlbG9jaXR5LCBpbiBkZWdyZWVzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNtYXhBbmd1bGFyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMDAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhBbmd1bGFyID0gMTAwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEJvZHkncyBpbmVydGlhLCByZWxhdGl2ZSB0byBhIGRlZmF1bHQgdW5pdCAoMSkuXHJcbiAgICAgICAgICogV2l0aCBgYm91bmNlYCwgdGhpcyBhZmZlY3RzIHRoZSBleGNoYW5nZSBvZiBtb21lbnR1bSAodmVsb2NpdGllcykgZHVyaW5nIGNvbGxpc2lvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNtYXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXNzID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGN1bGF0ZWQgYW5nbGUgb2YgdGhpcyBCb2R5J3MgdmVsb2NpdHkgdmVjdG9yLCBpbiByYWRpYW5zLCBkdXJpbmcgdGhlIGxhc3Qgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2FuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmdsZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxjdWxhdGVkIG1hZ25pdHVkZSBvZiB0aGUgQm9keSdzIHZlbG9jaXR5LCBpbiBwaXhlbHMgcGVyIHNlY29uZCwgZHVyaW5nIHRoZSBsYXN0IHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3BlZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBCb2R5J3MgdmVsb2NpdHksIGFzIGNhbGN1bGF0ZWQgZHVyaW5nIHRoZSBsYXN0IHN0ZXAuXHJcbiAgICAgICAgICogSWYgdGhlIEJvZHkgaXMgbW92aW5nIG9uIGJvdGggYXhlcyAoZGlhZ29uYWxseSksIHRoaXMgZGVzY3JpYmVzIG1vdGlvbiBvbiB0aGUgdmVydGljYWwgYXhpcyBvbmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZmFjaW5nXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWNpbmcgPSBDT05TVC5GQUNJTkdfTk9ORTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIEJvZHkgY2FuIGJlIG1vdmVkIGJ5IGNvbGxpc2lvbnMgd2l0aCBhbm90aGVyIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNpbW1vdmFibGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW1tb3ZhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEJvZHkncyBwb3NpdGlvbiBhbmQgcm90YXRpb24gYXJlIGFmZmVjdGVkIGJ5IGl0cyB2ZWxvY2l0eSwgYWNjZWxlcmF0aW9uLCBkcmFnLCBhbmQgZ3Jhdml0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I21vdmVzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW92ZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgZGlzYWJsaW5nIHRoZSBkZWZhdWx0IGhvcml6b250YWwgc2VwYXJhdGlvbiBvZiBjb2xsaWRpbmcgYm9kaWVzLlxyXG4gICAgICAgICAqIFBhc3MgeW91ciBvd24gYGNvbGxpZGVDYWxsYmFja2AgdG8gdGhlIGNvbGxpZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjY3VzdG9tU2VwYXJhdGVYXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1c3RvbVNlcGFyYXRlWCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgZGlzYWJsaW5nIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNlcGFyYXRpb24gb2YgY29sbGlkaW5nIGJvZGllcy5cclxuICAgICAgICAgKiBQYXNzIHlvdXIgb3duIGBjb2xsaWRlQ2FsbGJhY2tgIHRvIHRoZSBjb2xsaWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2N1c3RvbVNlcGFyYXRlWVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21TZXBhcmF0ZVkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFtb3VudCBvZiBob3Jpem9udGFsIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvdmVybGFwWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHZlcnRpY2FsIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvdmVybGFwWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBCb2R5IGlzIGNpcmN1bGFyIGFuZCBjb2xsaWRpbmcgd2l0aCBhbm90aGVyIGNpcmN1bGFyIGJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvdmVybGFwUlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgQm9keSBpcyBvdmVybGFwcGVkIHdpdGggYW5vdGhlciBhbmQgYm90aCBhcmUgbm90IG1vdmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2VtYmVkZGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtYmVkZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5IGludGVyYWN0cyB3aXRoIHRoZSB3b3JsZCBib3VuZGFyeS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2NvbGxpZGVXb3JsZEJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlV29ybGRCb3VuZHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIEJvZHkgaXMgY2hlY2tlZCBmb3IgY29sbGlzaW9ucyBhbmQgZm9yIHdoaWNoIGRpcmVjdGlvbnMuXHJcbiAgICAgICAgICogWW91IGNhbiBzZXQgYGNoZWNrQ29sbGlzaW9uLm5vbmUgPSB0cnVlYCB0byBkaXNhYmxlIGNvbGxpc2lvbiBjaGVja3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNjaGVja0NvbGxpc2lvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQm9keUNvbGxpc2lvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNoZWNrQ29sbGlzaW9uID0geyBub25lOiBmYWxzZSwgdXA6IHRydWUsIGRvd246IHRydWUsIGxlZnQ6IHRydWUsIHJpZ2h0OiB0cnVlIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIgYW5kIGluIHdoaWNoIGRpcmVjdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3RvdWNoaW5nXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVCb2R5Q29sbGlzaW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG91Y2hpbmcgPSB7IG5vbmU6IHRydWUsIHVwOiBmYWxzZSwgZG93bjogZmFsc2UsIGxlZnQ6IGZhbHNlLCByaWdodDogZmFsc2UgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIEJvZHkgd2FzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIgZHVyaW5nIHRoZSBsYXN0IHN0ZXAsIGFuZCBpbiB3aGljaCBkaXJlY3Rpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN3YXNUb3VjaGluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQm9keUNvbGxpc2lvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndhc1RvdWNoaW5nID0geyBub25lOiB0cnVlLCB1cDogZmFsc2UsIGRvd246IGZhbHNlLCBsZWZ0OiBmYWxzZSwgcmlnaHQ6IGZhbHNlIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGEgdGlsZSBvciB0aGUgd29ybGQgYm91bmRhcnkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNibG9ja2VkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVCb2R5Q29sbGlzaW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxvY2tlZCA9IHsgbm9uZTogdHJ1ZSwgdXA6IGZhbHNlLCBkb3duOiBmYWxzZSwgbGVmdDogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgdGhpcyBCb2R5J3MgZGltZW5zaW9ucyB0byB0aGUgZGltZW5zaW9ucyBvZiBpdHMgR2FtZSBPYmplY3QncyB2aXN1YWwgYm91bmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc3luY0JvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm91bmRzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeW5jQm91bmRzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCb2R5J3MgcGh5c2ljcyB0eXBlIChkeW5hbWljIG9yIHN0YXRpYykuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNwaHlzaWNzVHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFBoYXNlci5QaHlzaWNzLkFyY2FkZS5EWU5BTUlDX0JPRFlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBoeXNpY3NUeXBlID0gQ09OU1QuRFlOQU1JQ19CT0RZO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWNoZWQgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGUgQm9keSdzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjX3N4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N4ID0gZ2FtZU9iamVjdC5zY2FsZVg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhY2hlZCB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGUgQm9keSdzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjX3N5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N5ID0gZ2FtZU9iamVjdC5zY2FsZVk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxjdWxhdGVkIGNoYW5nZSBpbiB0aGUgQm9keSdzIGhvcml6b250YWwgcG9zaXRpb24gZHVyaW5nIHRoZSBsYXN0IHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNfZHhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2R4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGN1bGF0ZWQgY2hhbmdlIGluIHRoZSBCb2R5J3MgdmVydGljYWwgcG9zaXRpb24gZHVyaW5nIHRoZSBsYXN0IHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNfZHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2R5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RvcmVzIHRoZSBHYW1lIE9iamVjdCdzIGJvdW5kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I19ib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYm91bmRzID0gbmV3IFJlY3RhbmdsZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIEJvZHkncyBgdHJhbnNmb3JtYCwgYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgY2VudGVyYCBmcm9tIGl0cyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBCb2R5J3MgYHBvc2l0aW9uYCBpc24ndCBjaGFuZ2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjdXBkYXRlQm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQm91bmRzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzcHJpdGUgPSB0aGlzLmdhbWVPYmplY3Q7XHJcblxyXG4gICAgICAgIC8vICBDb250YWluZXI/XHJcblxyXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTtcclxuXHJcbiAgICAgICAgaWYgKHNwcml0ZS5wYXJlbnRDb250YWluZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gc3ByaXRlLmdldFdvcmxkVHJhbnNmb3JtTWF0cml4KHRoaXMud29ybGQuX3RlbXBNYXRyaXgsIHRoaXMud29ybGQuX3RlbXBNYXRyaXgyKTtcclxuXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybS54ID0gbWF0cml4LnR4O1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm0ueSA9IG1hdHJpeC50eTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUmFkVG9EZWcobWF0cml4LnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnNjYWxlWCA9IG1hdHJpeC5zY2FsZVg7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZVkgPSBtYXRyaXguc2NhbGVZO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm0uZGlzcGxheU9yaWdpblggPSBzcHJpdGUuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybS5kaXNwbGF5T3JpZ2luWSA9IHNwcml0ZS5kaXNwbGF5T3JpZ2luWTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnggPSBzcHJpdGUueDtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnkgPSBzcHJpdGUueTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gc3ByaXRlLmFuZ2xlO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGVYID0gc3ByaXRlLnNjYWxlWDtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnNjYWxlWSA9IHNwcml0ZS5zY2FsZVk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybS5kaXNwbGF5T3JpZ2luWCA9IHNwcml0ZS5kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLmRpc3BsYXlPcmlnaW5ZID0gc3ByaXRlLmRpc3BsYXlPcmlnaW5ZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlY2FsYyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zeW5jQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGIgPSBzcHJpdGUuZ2V0Qm91bmRzKHRoaXMuX2JvdW5kcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gYi53aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBiLmhlaWdodDtcclxuICAgICAgICAgICAgcmVjYWxjID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGFzeCA9IE1hdGguYWJzKHRyYW5zZm9ybS5zY2FsZVgpO1xyXG4gICAgICAgICAgICB2YXIgYXN5ID0gTWF0aC5hYnModHJhbnNmb3JtLnNjYWxlWSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ggIT09IGFzeCB8fCB0aGlzLl9zeSAhPT0gYXN5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2VXaWR0aCAqIGFzeDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2VIZWlnaHQgKiBhc3k7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeCA9IGFzeDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5ID0gYXN5O1xyXG4gICAgICAgICAgICAgICAgcmVjYWxjID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlY2FsYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFsZldpZHRoID0gTWF0aC5mbG9vcih0aGlzLndpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIHRoaXMuaGFsZkhlaWdodCA9IE1hdGguZmxvb3IodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDZW50ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgQm9keSdzIGBjZW50ZXJgIGZyb20gaXRzIGBwb3NpdGlvbmAsIGB3aWR0aGAsIGFuZCBgaGVpZ2h0YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3VwZGF0ZUNlbnRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNlbnRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNlbnRlci5zZXQodGhpcy5wb3NpdGlvbi54ICsgdGhpcy5oYWxmV2lkdGgsIHRoaXMucG9zaXRpb24ueSArIHRoaXMuaGFsZkhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZXMgdGhlIEJvZHkgZm9yIGEgcGh5c2ljcyBzdGVwIGJ5IHJlc2V0dGluZyB0aGUgYHdhc1RvdWNoaW5nYCwgYHRvdWNoaW5nYCBhbmQgYGJsb2NrZWRgIHN0YXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBpZiB0aGUgcGh5c2ljcyB3b3JsZCBpcyBnb2luZyB0byBydW4gYSBzdGVwIHRoaXMgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNyZXNldEZsYWdzXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RmxhZ3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFN0b3JlIGFuZCByZXNldCBjb2xsaXNpb24gZmxhZ3NcclxuICAgICAgICB0aGlzLndhc1RvdWNoaW5nLm5vbmUgPSB0aGlzLnRvdWNoaW5nLm5vbmU7XHJcbiAgICAgICAgdGhpcy53YXNUb3VjaGluZy51cCA9IHRoaXMudG91Y2hpbmcudXA7XHJcbiAgICAgICAgdGhpcy53YXNUb3VjaGluZy5kb3duID0gdGhpcy50b3VjaGluZy5kb3duO1xyXG4gICAgICAgIHRoaXMud2FzVG91Y2hpbmcubGVmdCA9IHRoaXMudG91Y2hpbmcubGVmdDtcclxuICAgICAgICB0aGlzLndhc1RvdWNoaW5nLnJpZ2h0ID0gdGhpcy50b3VjaGluZy5yaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy50b3VjaGluZy5ub25lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvdWNoaW5nLnVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3VjaGluZy5kb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3VjaGluZy5sZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3VjaGluZy5yaWdodCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmJsb2NrZWQubm9uZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ibG9ja2VkLnVwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ibG9ja2VkLmRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJsb2NrZWQubGVmdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYmxvY2tlZC5yaWdodCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXBSID0gMDtcclxuICAgICAgICB0aGlzLm92ZXJsYXBYID0gMDtcclxuICAgICAgICB0aGlzLm92ZXJsYXBZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5lbWJlZGRlZCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN5bmNzIHRoZSBwb3NpdGlvbiBib2R5IHBvc2l0aW9uIHdpdGggdGhlIHBhcmVudCBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXZlcnkgZ2FtZSBmcmFtZSwgcmVnYXJkbGVzcyBpZiB0aGUgd29ybGQgc3RlcHMgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjcHJlVXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB3aWxsU3RlcCAtIFdpbGwgdGhpcyBCb2R5IHJ1biBhbiB1cGRhdGUgYXMgd2VsbD9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBzZWNvbmRzLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICBwcmVVcGRhdGU6IGZ1bmN0aW9uICh3aWxsU3RlcCwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpbGxTdGVwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldEZsYWdzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kcygpO1xyXG5cclxuICAgICAgICB2YXIgc3ByaXRlID0gdGhpcy50cmFuc2Zvcm07XHJcblxyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHNwcml0ZS54ICsgc3ByaXRlLnNjYWxlWCAqICh0aGlzLm9mZnNldC54IC0gc3ByaXRlLmRpc3BsYXlPcmlnaW5YKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSBzcHJpdGUueSArIHNwcml0ZS5zY2FsZVkgKiAodGhpcy5vZmZzZXQueSAtIHNwcml0ZS5kaXNwbGF5T3JpZ2luWSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2VudGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBzcHJpdGUucm90YXRpb247XHJcblxyXG4gICAgICAgIHRoaXMucHJlUm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb3ZlcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldi54ID0gdGhpcy5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICB0aGlzLnByZXYueSA9IHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2RnJhbWUueCA9IHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgdGhpcy5wcmV2RnJhbWUueSA9IHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3aWxsU3RlcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKGRlbHRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgYSBzaW5nbGUgcGh5c2ljcyBzdGVwIGFuZCB1cGRhdGVzIHRoZSBib2R5IHZlbG9jaXR5LCBhbmdsZSwgc3BlZWQgYW5kIG90aGVyIHByb3BlcnRpZXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgZ2FtZSBmcmFtZSwgZGVwZW5kaW5nIG9uIHRoZSBwaHlzaWNzIHN0ZXAgcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcmVzdWx0cyBhcmUgc3luY2VkIGJhY2sgdG8gdGhlIEdhbWUgT2JqZWN0IGluIGBwb3N0VXBkYXRlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3VwZGF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjV09STERfQk9VTkRTXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gc2Vjb25kcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wcmV2LnggPSB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgdGhpcy5wcmV2LnkgPSB0aGlzLnBvc2l0aW9uLnk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vdmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC51cGRhdGVNb3Rpb24odGhpcywgZGVsdGEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZ4ID0gdGhpcy52ZWxvY2l0eS54O1xyXG4gICAgICAgICAgICB2YXIgdnkgPSB0aGlzLnZlbG9jaXR5Lnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5ld1ZlbG9jaXR5LnNldCh2eCAqIGRlbHRhLCB2eSAqIGRlbHRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24uYWRkKHRoaXMubmV3VmVsb2NpdHkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDZW50ZXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYW5nbGUgPSBNYXRoLmF0YW4yKHZ5LCB2eCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlZWQgPSBNYXRoLnNxcnQodnggKiB2eCArIHZ5ICogdnkpO1xyXG5cclxuICAgICAgICAgICAgLy8gIE5vdyB0aGUgdXBkYXRlIHdpbGwgdGhyb3cgY29sbGlzaW9uIGNoZWNrcyBhdCB0aGUgQm9keVxyXG4gICAgICAgICAgICAvLyAgQW5kIGZpbmFsbHkgd2UnbGwgaW50ZWdyYXRlIHRoZSBuZXcgcG9zaXRpb24gYmFjayB0byB0aGUgU3ByaXRlIGluIHBvc3RVcGRhdGVcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxpZGVXb3JsZEJvdW5kcyAmJiB0aGlzLmNoZWNrV29ybGRCb3VuZHMoKSAmJiB0aGlzLm9uV29ybGRCb3VuZHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud29ybGQuZW1pdChFdmVudHMuV09STERfQk9VTkRTLCB0aGlzLCB0aGlzLmJsb2NrZWQudXAsIHRoaXMuYmxvY2tlZC5kb3duLCB0aGlzLmJsb2NrZWQubGVmdCwgdGhpcy5ibG9ja2VkLnJpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZHggPSB0aGlzLnBvc2l0aW9uLnggLSB0aGlzLnByZXYueDtcclxuICAgICAgICB0aGlzLl9keSA9IHRoaXMucG9zaXRpb24ueSAtIHRoaXMucHJldi55O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZlZWRzIHRoZSBCb2R5IHJlc3VsdHMgYmFjayBpbnRvIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IGdhbWUgZnJhbWUsIHJlZ2FyZGxlc3MgaWYgdGhlIHdvcmxkIHN0ZXBzIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3Bvc3RVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwb3N0VXBkYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHRoaXMucG9zaXRpb24ueCAtIHRoaXMucHJldkZyYW1lLng7XHJcbiAgICAgICAgdmFyIGR5ID0gdGhpcy5wb3NpdGlvbi55IC0gdGhpcy5wcmV2RnJhbWUueTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW92ZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbXggPSB0aGlzLmRlbHRhTWF4Lng7XHJcbiAgICAgICAgICAgIHZhciBteSA9IHRoaXMuZGVsdGFNYXgueTtcclxuXHJcbiAgICAgICAgICAgIGlmIChteCAhPT0gMCAmJiBkeCAhPT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGR4IDwgMCAmJiBkeCA8IC1teClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkeCA9IC1teDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGR4ID4gMCAmJiBkeCA+IG14KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGR4ID0gbXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChteSAhPT0gMCAmJiBkeSAhPT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGR5IDwgMCAmJiBkeSA8IC1teSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkeSA9IC1teTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGR5ID4gMCAmJiBkeSA+IG15KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGR5ID0gbXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU9iamVjdC54ICs9IGR4O1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVPYmplY3QueSArPSBkeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkeCA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZhY2luZyA9IENPTlNULkZBQ0lOR19MRUZUO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkeCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZhY2luZyA9IENPTlNULkZBQ0lOR19SSUdIVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkeSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZhY2luZyA9IENPTlNULkZBQ0lOR19VUDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZHkgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mYWNpbmcgPSBDT05TVC5GQUNJTkdfRE9XTjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFsbG93Um90YXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVPYmplY3QuYW5nbGUgKz0gdGhpcy5kZWx0YVooKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGN1c3RvbSBjb2xsaXNpb24gYm91bmRhcnkgcmVjdGFuZ2xlLiBVc2UgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGN1c3RvbVxyXG4gICAgICogYm91bmRhcnkgaW5zdGVhZCBvZiB0aGUgd29ybGQgYm91bmRhcmllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEJvdW5kc1JlY3RhbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gez9QaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFtib3VuZHNdIC0gVGhlIG5ldyBib3VuZGFyeSByZWN0YW5nbGUuIFBhc3MgYG51bGxgIHRvIHVzZSB0aGUgV29ybGQgYm91bmRzLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb3VuZHNSZWN0YW5nbGU6IGZ1bmN0aW9uIChib3VuZHMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21Cb3VuZHNSZWN0YW5nbGUgPSAoIWJvdW5kcykgPyB0aGlzLndvcmxkLmJvdW5kcyA6IGJvdW5kcztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGZvciBjb2xsaXNpb25zIGJldHdlZW4gdGhpcyBCb2R5IGFuZCB0aGUgd29ybGQgYm91bmRhcnkgYW5kIHNlcGFyYXRlcyB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjY2hlY2tXb3JsZEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIEJvZHkgaXMgY29sbGlkaW5nIHdpdGggdGhlIHdvcmxkIGJvdW5kYXJ5LlxyXG4gICAgICovXHJcbiAgICBjaGVja1dvcmxkQm91bmRzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLmN1c3RvbUJvdW5kc1JlY3RhbmdsZTtcclxuICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLndvcmxkLmNoZWNrQ29sbGlzaW9uO1xyXG5cclxuICAgICAgICB2YXIgYnggPSAodGhpcy53b3JsZEJvdW5jZSkgPyAtdGhpcy53b3JsZEJvdW5jZS54IDogLXRoaXMuYm91bmNlLng7XHJcbiAgICAgICAgdmFyIGJ5ID0gKHRoaXMud29ybGRCb3VuY2UpID8gLXRoaXMud29ybGRCb3VuY2UueSA6IC10aGlzLmJvdW5jZS55O1xyXG5cclxuICAgICAgICB2YXIgd2FzU2V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwb3MueCA8IGJvdW5kcy54ICYmIGNoZWNrLmxlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwb3MueCA9IGJvdW5kcy54O1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5LnggKj0gYng7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tlZC5sZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2FzU2V0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5yaWdodCA+IGJvdW5kcy5yaWdodCAmJiBjaGVjay5yaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvcy54ID0gYm91bmRzLnJpZ2h0IC0gdGhpcy53aWR0aDtcclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS54ICo9IGJ4O1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrZWQucmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB3YXNTZXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvcy55IDwgYm91bmRzLnkgJiYgY2hlY2sudXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwb3MueSA9IGJvdW5kcy55O1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5LnkgKj0gYnk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tlZC51cCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdhc1NldCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tID4gYm91bmRzLmJvdHRvbSAmJiBjaGVjay5kb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9zLnkgPSBib3VuZHMuYm90dG9tIC0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHkueSAqPSBieTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja2VkLmRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB3YXNTZXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhc1NldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gd2FzU2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG9mZnNldCBvZiB0aGUgQm9keSdzIHBvc2l0aW9uIGZyb20gaXRzIEdhbWUgT2JqZWN0J3MgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgb2Zmc2V0LCBpbiBzb3VyY2UgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIG9mZnNldCwgaW4gc291cmNlIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0LnNldCh4LCB5KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNlbnRlcigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaXplcyBhbmQgcG9zaXRpb25zIHRoaXMgQm9keSdzIGJvdW5kYXJ5LCBhcyBhIHJlY3RhbmdsZS5cclxuICAgICAqIE1vZGlmaWVzIHRoZSBCb2R5IGBvZmZzZXRgIGlmIGBjZW50ZXJgIGlzIHRydWUgKHRoZSBkZWZhdWx0KS5cclxuICAgICAqIFJlc2V0cyB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBtYXRjaCBjdXJyZW50IGZyYW1lLCBpZiBubyB3aWR0aCBhbmQgaGVpZ2h0IHByb3ZpZGVkIGFuZCBhIGZyYW1lIGlzIGZvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBCb2R5IGluIHBpeGVscy4gQ2Fubm90IGJlIHplcm8uIElmIG5vdCBnaXZlbiwgYW5kIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QgaGFzIGEgZnJhbWUsIGl0IHdpbGwgdXNlIHRoZSBmcmFtZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBCb2R5IGluIHBpeGVscy4gQ2Fubm90IGJlIHplcm8uIElmIG5vdCBnaXZlbiwgYW5kIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QgaGFzIGEgZnJhbWUsIGl0IHdpbGwgdXNlIHRoZSBmcmFtZSBoZWlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjZW50ZXI9dHJ1ZV0gLSBNb2RpZnkgdGhlIEJvZHkncyBgb2Zmc2V0YCwgcGxhY2luZyB0aGUgQm9keSdzIGNlbnRlciBvbiBpdHMgR2FtZSBPYmplY3QncyBjZW50ZXIuIE9ubHkgd29ya3MgaWYgdGhlIEdhbWUgT2JqZWN0IGhhcyB0aGUgYGdldENlbnRlcmAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgY2VudGVyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjZW50ZXIgPT09IHVuZGVmaW5lZCkgeyBjZW50ZXIgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBpZiAoIXdpZHRoICYmIGdhbWVPYmplY3QuZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFoZWlnaHQgJiYgZ2FtZU9iamVjdC5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc291cmNlV2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLnNvdXJjZUhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc291cmNlV2lkdGggKiB0aGlzLl9zeDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlSGVpZ2h0ICogdGhpcy5fc3k7XHJcblxyXG4gICAgICAgIHRoaXMuaGFsZldpZHRoID0gTWF0aC5mbG9vcih0aGlzLndpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5oYWxmSGVpZ2h0ID0gTWF0aC5mbG9vcih0aGlzLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNlbnRlcigpO1xyXG5cclxuICAgICAgICBpZiAoY2VudGVyICYmIGdhbWVPYmplY3QuZ2V0Q2VudGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG94ID0gZ2FtZU9iamVjdC5kaXNwbGF5V2lkdGggLyAyO1xyXG4gICAgICAgICAgICB2YXIgb3kgPSBnYW1lT2JqZWN0LmRpc3BsYXlIZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vZmZzZXQuc2V0KG94IC0gdGhpcy5oYWxmV2lkdGgsIG95IC0gdGhpcy5oYWxmSGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNDaXJjbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJhZGl1cyA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNpemVzIGFuZCBwb3NpdGlvbnMgdGhpcyBCb2R5J3MgYm91bmRhcnksIGFzIGEgY2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0Q2lyY2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgQm9keSwgaW4gc291cmNlIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WF0gLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIEJvZHkgZnJvbSBpdHMgR2FtZSBPYmplY3QsIGluIHNvdXJjZSBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFldIC0gVGhlIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgQm9keSBmcm9tIGl0cyBHYW1lIE9iamVjdCwgaW4gc291cmNlIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2lyY2xlOiBmdW5jdGlvbiAocmFkaXVzLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IHRoaXMub2Zmc2V0Lng7IH1cclxuICAgICAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSB0aGlzLm9mZnNldC55OyB9XHJcblxyXG4gICAgICAgIGlmIChyYWRpdXMgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NpcmNsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VXaWR0aCA9IHJhZGl1cyAqIDI7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlSGVpZ2h0ID0gcmFkaXVzICogMjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZVdpZHRoICogdGhpcy5fc3g7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2VIZWlnaHQgKiB0aGlzLl9zeTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFsZldpZHRoID0gTWF0aC5mbG9vcih0aGlzLndpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIHRoaXMuaGFsZkhlaWdodCA9IE1hdGguZmxvb3IodGhpcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2VudGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDaXJjbGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIEJvZHkgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBBbHNvIHBvc2l0aW9ucyBpdHMgcGFyZW50IEdhbWUgT2JqZWN0IHRvIHRoZSBzYW1lIGNvb3JkaW5hdGVzLlxyXG4gICAgICogSWYgdGhlIEJvZHkgaGFkIGFueSB2ZWxvY2l0eSBvciBhY2NlbGVyYXRpb24gaXQgaXMgbG9zdCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiB0byBwbGFjZSB0aGUgR2FtZSBPYmplY3QgYW5kIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiB0byBwbGFjZSB0aGUgR2FtZSBPYmplY3QgYW5kIEJvZHkuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLmdhbWVPYmplY3Q7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChnYW1lT2JqZWN0LmdldFRvcExlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmdldFRvcExlZnQodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24uc2V0KHgsIHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2LmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5wcmV2RnJhbWUuY29weSh0aGlzLnBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IGdhbWVPYmplY3QuYW5nbGU7XHJcbiAgICAgICAgdGhpcy5wcmVSb3RhdGlvbiA9IGdhbWVPYmplY3QuYW5nbGU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDZW50ZXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFjY2VsZXJhdGlvbiwgdmVsb2NpdHksIGFuZCBzcGVlZCB0byB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eS5zZXQoMCk7XHJcbiAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24uc2V0KDApO1xyXG4gICAgICAgIHRoaXMuc3BlZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5ID0gMDtcclxuICAgICAgICB0aGlzLmFuZ3VsYXJBY2NlbGVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoaXMgQm9keSdzIGVkZ2VzIGludG8gYW4gb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVCb2R5Qm91bmRzfSBvYmogLSBBbiBvYmplY3QgdG8gY29weSB0aGUgdmFsdWVzIGludG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUJvZHlCb3VuZHN9IC0gQW4gb2JqZWN0IHdpdGgge3gsIHksIHJpZ2h0LCBib3R0b219LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvYmopXHJcbiAgICB7XHJcbiAgICAgICAgb2JqLnggPSB0aGlzLng7XHJcbiAgICAgICAgb2JqLnkgPSB0aGlzLnk7XHJcbiAgICAgICAgb2JqLnJpZ2h0ID0gdGhpcy5yaWdodDtcclxuICAgICAgICBvYmouYm90dG9tID0gdGhpcy5ib3R0b207XHJcblxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVzdHMgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBCb2R5J3MgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNoaXRUZXN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgKHgsIHkpIGlzIHdpdGhpbiB0aGlzIEJvZHkuXHJcbiAgICAgKi9cclxuICAgIGhpdFRlc3Q6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0NpcmNsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBDaGVjayBpZiB4L3kgYXJlIHdpdGhpbiB0aGUgYm91bmRzIGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMucmFkaXVzID4gMCAmJiB4ID49IHRoaXMubGVmdCAmJiB4IDw9IHRoaXMucmlnaHQgJiYgeSA+PSB0aGlzLnRvcCAmJiB5IDw9IHRoaXMuYm90dG9tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGR4ID0gKHRoaXMuY2VudGVyLnggLSB4KSAqICh0aGlzLmNlbnRlci54IC0geCk7XHJcbiAgICAgICAgICAgIHZhciBkeSA9ICh0aGlzLmNlbnRlci55IC0geSkgKiAodGhpcy5jZW50ZXIueSAtIHkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChkeCArIGR5KSA8PSAodGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIEJvZHkgaXMgdG91Y2hpbmcgYSB0aWxlIG9yIHRoZSB3b3JsZCBib3VuZGFyeSB3aGlsZSBtb3ZpbmcgZG93bi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I29uRmxvb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNibG9ja2VkXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0b3VjaGluZy5cclxuICAgICAqL1xyXG4gICAgb25GbG9vcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2VkLmRvd247XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIEJvZHkgaXMgdG91Y2hpbmcgYSB0aWxlIG9yIHRoZSB3b3JsZCBib3VuZGFyeSB3aGlsZSBtb3ZpbmcgdXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvbkNlaWxpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNibG9ja2VkXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0b3VjaGluZy5cclxuICAgICAqL1xyXG4gICAgb25DZWlsaW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrZWQudXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIEJvZHkgaXMgdG91Y2hpbmcgYSB0aWxlIG9yIHRoZSB3b3JsZCBib3VuZGFyeSB3aGlsZSBtb3ZpbmcgbGVmdCBvciByaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I29uV2FsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2Jsb2NrZWRcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRvdWNoaW5nLlxyXG4gICAgICovXHJcbiAgICBvbldhbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJsb2NrZWQubGVmdCB8fCB0aGlzLmJsb2NrZWQucmlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhYnNvbHV0ZSAobm9uLW5lZ2F0aXZlKSBjaGFuZ2UgaW4gdGhpcyBCb2R5J3MgaG9yaXpvbnRhbCBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZGVsdGFBYnNYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkZWx0YSB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZGVsdGFBYnNYOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fZHggPiAwKSA/IHRoaXMuX2R4IDogLXRoaXMuX2R4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhYnNvbHV0ZSAobm9uLW5lZ2F0aXZlKSBjaGFuZ2UgaW4gdGhpcyBCb2R5J3MgdmVydGljYWwgcG9zaXRpb24gZnJvbSB0aGUgcHJldmlvdXMgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2RlbHRhQWJzWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVsdGEgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGRlbHRhQWJzWTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2R5ID4gMCkgPyB0aGlzLl9keSA6IC10aGlzLl9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY2hhbmdlIGluIHRoaXMgQm9keSdzIGhvcml6b250YWwgcG9zaXRpb24gZnJvbSB0aGUgcHJldmlvdXMgc3RlcC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgc2V0IGR1cmluZyB0aGUgQm9keSdzIHVwZGF0ZSBwaGFzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2RlbHRhWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVsdGEgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGRlbHRhWDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNoYW5nZSBpbiB0aGlzIEJvZHkncyB2ZXJ0aWNhbCBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICogVGhpcyB2YWx1ZSBpcyBzZXQgZHVyaW5nIHRoZSBCb2R5J3MgdXBkYXRlIHBoYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZGVsdGFZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkZWx0YSB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZGVsdGFZOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY2hhbmdlIGluIHRoaXMgQm9keSdzIHJvdGF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAsIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNkZWx0YVpcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRlbHRhIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBkZWx0YVo6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm90YXRpb24gLSB0aGlzLnByZVJvdGF0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGVzIHRoaXMgQm9keSBhbmQgbWFya3MgaXQgZm9yIGRlbGV0aW9uIGJ5IHRoZSBzaW11bGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMud29ybGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLnBlbmRpbmdEZXN0cm95LnNldCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhpcyBCb2R5J3MgYm91bmRhcnkgYW5kIHZlbG9jaXR5LCBpZiBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZHJhd0RlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpYyAtIFRoZSBHcmFwaGljcyBvYmplY3QgdG8gZHJhdyBvbi5cclxuICAgICAqL1xyXG4gICAgZHJhd0RlYnVnOiBmdW5jdGlvbiAoZ3JhcGhpYylcclxuICAgIHtcclxuICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3NpdGlvbjtcclxuXHJcbiAgICAgICAgdmFyIHggPSBwb3MueCArIHRoaXMuaGFsZldpZHRoO1xyXG4gICAgICAgIHZhciB5ID0gcG9zLnkgKyB0aGlzLmhhbGZIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnU2hvd0JvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBncmFwaGljLmxpbmVTdHlsZShncmFwaGljLmRlZmF1bHRTdHJva2VXaWR0aCwgdGhpcy5kZWJ1Z0JvZHlDb2xvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NpcmNsZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpYy5zdHJva2VDaXJjbGUoeCwgeSwgdGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE9ubHkgZHJhdyB0aGUgc2lkZXMgd2hlcmUgY2hlY2tDb2xsaXNpb24gaXMgdHJ1ZSwgc2ltaWxhciB0byBkZWJ1Z2dlciBpbiBsYXllclxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tDb2xsaXNpb24udXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGhpYy5saW5lQmV0d2Vlbihwb3MueCwgcG9zLnksIHBvcy54ICsgdGhpcy53aWR0aCwgcG9zLnkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQ29sbGlzaW9uLnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYXBoaWMubGluZUJldHdlZW4ocG9zLnggKyB0aGlzLndpZHRoLCBwb3MueSwgcG9zLnggKyB0aGlzLndpZHRoLCBwb3MueSArIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0NvbGxpc2lvbi5kb3duKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYXBoaWMubGluZUJldHdlZW4ocG9zLngsIHBvcy55ICsgdGhpcy5oZWlnaHQsIHBvcy54ICsgdGhpcy53aWR0aCwgcG9zLnkgKyB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tDb2xsaXNpb24ubGVmdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljLmxpbmVCZXR3ZWVuKHBvcy54LCBwb3MueSwgcG9zLngsIHBvcy55ICsgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z1Nob3dWZWxvY2l0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdyYXBoaWMubGluZVN0eWxlKGdyYXBoaWMuZGVmYXVsdFN0cm9rZVdpZHRoLCB0aGlzLndvcmxkLmRlZmF1bHRzLnZlbG9jaXR5RGVidWdDb2xvciwgMSk7XHJcbiAgICAgICAgICAgIGdyYXBoaWMubGluZUJldHdlZW4oeCwgeSwgeCArIHRoaXMudmVsb2NpdHkueCAvIDIsIHkgKyB0aGlzLnZlbG9jaXR5LnkgLyAyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIEJvZHkgd2lsbCBiZSBkcmF3biB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3dpbGxEcmF3RGVidWdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZWl0aGVyIGBkZWJ1Z1Nob3dCb2R5YCBvciBgZGVidWdTaG93VmVsb2NpdHlgIGFyZSBlbmFibGVkLlxyXG4gICAgICovXHJcbiAgICB3aWxsRHJhd0RlYnVnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kZWJ1Z1Nob3dCb2R5IHx8IHRoaXMuZGVidWdTaG93VmVsb2NpdHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGlzIEJvZHkgY29sbGlkZXMgd2l0aCB0aGUgd29ybGQgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogT3B0aW9uYWxseSBhbHNvIHNldHMgdGhlIFdvcmxkIEJvdW5jZSB2YWx1ZXMuIElmIHRoZSBgQm9keS53b3JsZEJvdW5jZWAgaXMgbnVsbCwgaXQncyBzZXQgdG8gYSBuZXcgVmVjMiBmaXJzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldENvbGxpZGVXb3JsZEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBgdHJ1ZWAgaWYgdGhpcyBib2R5IHNob3VsZCBjb2xsaWRlIHdpdGggdGhlIHdvcmxkIGJvdW5kcywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdW5jZVhdIC0gSWYgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJlcGxhY2UgdGhlIGB3b3JsZEJvdW5jZS54YCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYm91bmNlWV0gLSBJZiBnaXZlbiB0aGlzIHdpbGwgYmUgcmVwbGFjZSB0aGUgYHdvcmxkQm91bmNlLnlgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaWRlV29ybGRCb3VuZHM6IGZ1bmN0aW9uICh2YWx1ZSwgYm91bmNlWCwgYm91bmNlWSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlV29ybGRCb3VuZHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHNldEJvdW5jZVggPSAoYm91bmNlWCAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB2YXIgc2V0Qm91bmNlWSA9IChib3VuY2VZICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgICAgICBpZiAoc2V0Qm91bmNlWCB8fCBzZXRCb3VuY2VZKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLndvcmxkQm91bmNlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmxkQm91bmNlID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNldEJvdW5jZVgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud29ybGRCb3VuY2UueCA9IGJvdW5jZVg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZXRCb3VuY2VZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmxkQm91bmNlLnkgPSBib3VuY2VZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRWZWxvY2l0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB2ZWxvY2l0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgdmVsb2NpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWZWxvY2l0eTogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eS5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHggPSB0aGlzLnZlbG9jaXR5Lng7XHJcbiAgICAgICAgeSA9IHRoaXMudmVsb2NpdHkueTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGVlZCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGhvcml6b250YWwgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRWZWxvY2l0eVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2ZWxvY2l0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZlbG9jaXR5WDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHkueCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgeCA9IHZhbHVlO1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy52ZWxvY2l0eS55O1xyXG5cclxuICAgICAgICB0aGlzLnNwZWVkID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgdmVydGljYWwgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRWZWxvY2l0eVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2ZWxvY2l0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZlbG9jaXR5WTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHkueSA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgeCA9IHRoaXMudmVsb2NpdHkueDtcclxuICAgICAgICB2YXIgeSA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnNwZWVkID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgbWF4aW11bSB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldE1heFZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB2ZWxvY2l0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgdmVsb2NpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhWZWxvY2l0eTogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eS5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1heGltdW0gc3BlZWQgdGhlIEJvZHkgY2FuIG1vdmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRNYXhTcGVlZFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBtYXhpbXVtIHNwZWVkIHZhbHVlLCBpbiBwaXhlbHMgcGVyIHNlY29uZC4gU2V0IHRvIGEgbmVnYXRpdmUgdmFsdWUgdG8gZGlzYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TWF4U3BlZWQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1heFNwZWVkID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBib3VuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRCb3VuY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgYm91bmNlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgYm91bmNlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb3VuY2U6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm91bmNlLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGhvcml6b250YWwgYm91bmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0Qm91bmNlWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGJvdW5jZSwgcmVsYXRpdmUgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmNlWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm91bmNlLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIHZlcnRpY2FsIGJvdW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEJvdW5jZVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBib3VuY2UsIHJlbGF0aXZlIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5jZVk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvdW5jZS55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRBY2NlbGVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29tcG9uZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29tcG9uZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBY2NlbGVyYXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGhvcml6b250YWwgYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0QWNjZWxlcmF0aW9uWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFjY2VsZXJhdGlvbiwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWNjZWxlcmF0aW9uWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIHZlcnRpY2FsIGFjY2VsZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEFjY2VsZXJhdGlvbllcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhY2NlbGVyYXRpb24sIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjY2VsZXJhdGlvblk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvbi55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEFsbG93RHJhZ1xyXG4gICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2FsbG93RHJhZ1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gYHRydWVgIHRvIGFsbG93IGRyYWcgb24gdGhpcyBib2R5LCBvciBgZmFsc2VgIHRvIGRpc2FibGUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFsbG93RHJhZzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLmFsbG93RHJhZyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGdyYXZpdHkncyBlZmZlY3Qgb24gdGhpcyBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0QWxsb3dHcmF2aXR5XHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjYWxsb3dHcmF2aXR5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBgdHJ1ZWAgdG8gYWxsb3cgZ3Jhdml0eSBvbiB0aGlzIGJvZHksIG9yIGBmYWxzZWAgdG8gZGlzYWJsZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWxsb3dHcmF2aXR5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYWxsb3dHcmF2aXR5ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgcm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRBbGxvd1JvdGF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjYWxsb3dSb3RhdGlvblxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gYHRydWVgIHRvIGFsbG93IHJvdGF0aW9uIG9uIHRoaXMgYm9keSwgb3IgYGZhbHNlYCB0byBkaXNhYmxlIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbGxvd1JvdGF0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYWxsb3dSb3RhdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldERyYWdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29tcG9uZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29tcG9uZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRyYWcuc2V0KHgsIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgaG9yaXpvbnRhbCBkcmFnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0RHJhZ1hcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBkcmFnLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZHJhZy54ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyB2ZXJ0aWNhbCBkcmFnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0RHJhZ1lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBkcmFnLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZHJhZy55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBncmF2aXR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0R3Jhdml0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb21wb25lbnQsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb21wb25lbnQsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ3Jhdml0eS5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBob3Jpem9udGFsIGdyYXZpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRHcmF2aXR5WFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHlYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ncmF2aXR5LnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIHZlcnRpY2FsIGdyYXZpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRHcmF2aXR5WVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHlZOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ncmF2aXR5LnkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGZyaWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0RnJpY3Rpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29tcG9uZW50LCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29tcG9uZW50LCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmljdGlvbi5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBob3Jpem9udGFsIGZyaWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0RnJpY3Rpb25YXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgZnJpY3Rpb24gdmFsdWUsIHJlbGF0aXZlIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZyaWN0aW9uWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJpY3Rpb24ueCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgdmVydGljYWwgZnJpY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNzZXRGcmljdGlvbllcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBmcmljdGlvbiB2YWx1ZSwgcmVsYXRpdmUgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJpY3Rpb25ZOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmljdGlvbi55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBhbmd1bGFyIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0QW5ndWxhclZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmVsb2NpdHksIGluIGRlZ3JlZXMgcGVyIHNlY29uZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gVGhpcyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QW5ndWxhclZlbG9jaXR5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmd1bGFyVmVsb2NpdHkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGFuZ3VsYXIgYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0QW5ndWxhckFjY2VsZXJhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFjY2VsZXJhdGlvbiwgaW4gZGVncmVlcyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ3VsYXJBY2NlbGVyYXRpb246IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFuZ3VsYXJBY2NlbGVyYXRpb24gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGFuZ3VsYXIgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEFuZ3VsYXJEcmFnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgZHJhZywgaW4gZGVncmVlcyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ3VsYXJEcmFnOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmd1bGFyRHJhZyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBCb2R5J3MgbWFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldE1hc3NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBtYXNzIHZhbHVlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXNzOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJvZHkncyBgaW1tb3ZhYmxlYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3NldEltbW92YWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIGBpbW1vdmFibGVgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRJbW1vdmFibGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5pbW1vdmFibGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQm9keSdzIGBlbmFibGVgIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjc2V0RW5hYmxlXHJcbiAgICAgKiBAc2luY2UgMy4xNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIGBlbmFibGVgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBUaGlzIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRFbmFibGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEJvZHkncyBob3Jpem9udGFsIHBvc2l0aW9uIChsZWZ0IGVkZ2UpLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgeDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQm9keSdzIHZlcnRpY2FsIHBvc2l0aW9uICh0b3AgZWRnZSkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIEJvZHkncyBib3VuZGFyeS4gSWRlbnRpY2FsIHRvIHguXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjbGVmdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGxlZnQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByaWdodCBlZGdlIG9mIHRoZSBCb2R5J3MgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjcmlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54ICsgdGhpcy53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AgZWRnZSBvZiB0aGUgQm9keSdzIGJvdW5kYXJ5LiBJZGVudGljYWwgdG8geS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20gZWRnZSBvZiB0aGlzIEJvZHkncyBib3VuZGFyeS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueSArIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQm9keTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/Body.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/Collider.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/Collider.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Arcade Physics Collider will automatically check for collision, or overlaps, between two objects\r\n * every step. If a collision, or overlap, occurs it will invoke the given callbacks.\r\n *\r\n * @class Collider\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The Arcade physics World that will manage the collisions.\r\n * @param {boolean} overlapOnly - Whether to check for collisions or overlap.\r\n * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object to check for collision.\r\n * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object2 - The second object to check for collision.\r\n * @param {ArcadePhysicsCallback} collideCallback - The callback to invoke when the two objects collide.\r\n * @param {ArcadePhysicsCallback} processCallback - The callback to invoke when the two objects collide. Must return a boolean.\r\n * @param {any} callbackContext - The scope in which to call the callbacks.\r\n */\r\nvar Collider = new Class({\r\n\r\n    initialize:\r\n\r\n    function Collider (world, overlapOnly, object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        /**\r\n         * The world in which the bodies will collide.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The name of the collider (unused by Phaser).\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#name\r\n         * @type {string}\r\n         * @since 3.1.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * Whether the collider is active.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * Whether to check for collisions or overlaps.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#overlapOnly\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapOnly = overlapOnly;\r\n\r\n        /**\r\n         * The first object to check for collision.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#object1\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeColliderType}\r\n         * @since 3.0.0\r\n         */\r\n        this.object1 = object1;\r\n\r\n        /**\r\n         * The second object to check for collision.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#object2\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeColliderType}\r\n         * @since 3.0.0\r\n         */\r\n        this.object2 = object2;\r\n\r\n        /**\r\n         * The callback to invoke when the two objects collide.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#collideCallback\r\n         * @type {ArcadePhysicsCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideCallback = collideCallback;\r\n\r\n        /**\r\n         * If a processCallback exists it must return true or collision checking will be skipped.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#processCallback\r\n         * @type {ArcadePhysicsCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.processCallback = processCallback;\r\n\r\n        /**\r\n         * The context the collideCallback and processCallback will run in.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Collider#callbackContext\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbackContext = callbackContext;\r\n    },\r\n\r\n    /**\r\n     * A name for the Collider.\r\n     * \r\n     * Phaser does not use this value, it's for your own reference.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Collider#setName\r\n     * @since 3.1.0\r\n     *\r\n     * @param {string} name - The name to assign to the Collider.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Collider} This Collider instance.\r\n     */\r\n    setName: function (name)\r\n    {\r\n        this.name = name;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called by World as part of its step processing, initial operation of collision checking.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Collider#update\r\n     * @since 3.0.0\r\n     */\r\n    update: function ()\r\n    {\r\n        this.world.collideObjects(\r\n            this.object1,\r\n            this.object2,\r\n            this.collideCallback,\r\n            this.processCallback,\r\n            this.callbackContext,\r\n            this.overlapOnly\r\n        );\r\n    },\r\n\r\n    /**\r\n     * Removes Collider from World and disposes of its resources.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Collider#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world.removeCollider(this);\r\n\r\n        this.active = false;\r\n\r\n        this.world = null;\r\n\r\n        this.object1 = null;\r\n        this.object2 = null;\r\n\r\n        this.collideCallback = null;\r\n        this.processCallback = null;\r\n        this.callbackContext = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Collider;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9Db2xsaWRlci5qcz9iNjFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1COztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsUUFBUTtBQUNuQixXQUFXLCtDQUErQztBQUMxRCxXQUFXLCtDQUErQztBQUMxRCxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLElBQUk7QUFDZjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9Db2xsaWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEFuIEFyY2FkZSBQaHlzaWNzIENvbGxpZGVyIHdpbGwgYXV0b21hdGljYWxseSBjaGVjayBmb3IgY29sbGlzaW9uLCBvciBvdmVybGFwcywgYmV0d2VlbiB0d28gb2JqZWN0c1xyXG4gKiBldmVyeSBzdGVwLiBJZiBhIGNvbGxpc2lvbiwgb3Igb3ZlcmxhcCwgb2NjdXJzIGl0IHdpbGwgaW52b2tlIHRoZSBnaXZlbiBjYWxsYmFja3MuXHJcbiAqXHJcbiAqIEBjbGFzcyBDb2xsaWRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuQXJjYWRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9IHdvcmxkIC0gVGhlIEFyY2FkZSBwaHlzaWNzIFdvcmxkIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGNvbGxpc2lvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcmxhcE9ubHkgLSBXaGV0aGVyIHRvIGNoZWNrIGZvciBjb2xsaXNpb25zIG9yIG92ZXJsYXAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUNvbGxpZGVyVHlwZX0gb2JqZWN0MSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QyIC0gVGhlIHNlY29uZCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IGNvbGxpZGVDYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdHdvIG9iamVjdHMgY29sbGlkZS5cclxuICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IHByb2Nlc3NDYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdHdvIG9iamVjdHMgY29sbGlkZS4gTXVzdCByZXR1cm4gYSBib29sZWFuLlxyXG4gKiBAcGFyYW0ge2FueX0gY2FsbGJhY2tDb250ZXh0IC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGNhbGwgdGhlIGNhbGxiYWNrcy5cclxuICovXHJcbnZhciBDb2xsaWRlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDb2xsaWRlciAod29ybGQsIG92ZXJsYXBPbmx5LCBvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3b3JsZCBpbiB3aGljaCB0aGUgYm9kaWVzIHdpbGwgY29sbGlkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlciN3b3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZCA9IHdvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29sbGlkZXIgKHVudXNlZCBieSBQaGFzZXIpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBjb2xsaWRlciBpcyBhY3RpdmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29sbGlkZXIjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBjaGVjayBmb3IgY29sbGlzaW9ucyBvciBvdmVybGFwcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlciNvdmVybGFwT25seVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcE9ubHkgPSBvdmVybGFwT25seTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyI29iamVjdDFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUNvbGxpZGVyVHlwZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9iamVjdDEgPSBvYmplY3QxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2Vjb25kIG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyI29iamVjdDJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUNvbGxpZGVyVHlwZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9iamVjdDIgPSBvYmplY3QyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29sbGlkZXIjY29sbGlkZUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge0FyY2FkZVBoeXNpY3NDYWxsYmFja31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVDYWxsYmFjayA9IGNvbGxpZGVDYWxsYmFjaztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgYSBwcm9jZXNzQ2FsbGJhY2sgZXhpc3RzIGl0IG11c3QgcmV0dXJuIHRydWUgb3IgY29sbGlzaW9uIGNoZWNraW5nIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlciNwcm9jZXNzQ2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0NhbGxiYWNrID0gcHJvY2Vzc0NhbGxiYWNrO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29udGV4dCB0aGUgY29sbGlkZUNhbGxiYWNrIGFuZCBwcm9jZXNzQ2FsbGJhY2sgd2lsbCBydW4gaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29sbGlkZXIjY2FsbGJhY2tDb250ZXh0XHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbGxiYWNrQ29udGV4dCA9IGNhbGxiYWNrQ29udGV4dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIG5hbWUgZm9yIHRoZSBDb2xsaWRlci5cclxuICAgICAqIFxyXG4gICAgICogUGhhc2VyIGRvZXMgbm90IHVzZSB0aGlzIHZhbHVlLCBpdCdzIGZvciB5b3VyIG93biByZWZlcmVuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29sbGlkZXIjc2V0TmFtZVxyXG4gICAgICogQHNpbmNlIDMuMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byBhc3NpZ24gdG8gdGhlIENvbGxpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlcn0gVGhpcyBDb2xsaWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKG5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IFdvcmxkIGFzIHBhcnQgb2YgaXRzIHN0ZXAgcHJvY2Vzc2luZywgaW5pdGlhbCBvcGVyYXRpb24gb2YgY29sbGlzaW9uIGNoZWNraW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndvcmxkLmNvbGxpZGVPYmplY3RzKFxyXG4gICAgICAgICAgICB0aGlzLm9iamVjdDEsXHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0MixcclxuICAgICAgICAgICAgdGhpcy5jb2xsaWRlQ2FsbGJhY2ssXHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NhbGxiYWNrLFxyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQ29udGV4dCxcclxuICAgICAgICAgICAgdGhpcy5vdmVybGFwT25seVxyXG4gICAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBDb2xsaWRlciBmcm9tIFdvcmxkIGFuZCBkaXNwb3NlcyBvZiBpdHMgcmVzb3VyY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQucmVtb3ZlQ29sbGlkZXIodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLm9iamVjdDEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub2JqZWN0MiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuY29sbGlkZUNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnByb2Nlc3NDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0NvbnRleHQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxpZGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/Collider.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/Factory.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/Factory.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArcadeImage = __webpack_require__(/*! ./ArcadeImage */ \"./node_modules/phaser/src/physics/arcade/ArcadeImage.js\");\r\nvar ArcadeSprite = __webpack_require__(/*! ./ArcadeSprite */ \"./node_modules/phaser/src/physics/arcade/ArcadeSprite.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar PhysicsGroup = __webpack_require__(/*! ./PhysicsGroup */ \"./node_modules/phaser/src/physics/arcade/PhysicsGroup.js\");\r\nvar StaticPhysicsGroup = __webpack_require__(/*! ./StaticPhysicsGroup */ \"./node_modules/phaser/src/physics/arcade/StaticPhysicsGroup.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Arcade Physics Factory allows you to easily create Arcade Physics enabled Game Objects.\r\n * Objects that are created by this Factory are automatically added to the physics world.\r\n *\r\n * @class Factory\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The Arcade Physics World instance.\r\n */\r\nvar Factory = new Class({\r\n\r\n    initialize:\r\n\r\n    function Factory (world)\r\n    {\r\n        /**\r\n         * A reference to the Arcade Physics World.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Factory#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * A reference to the Scene this Arcade Physics instance belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Factory#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = world.scene;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems this Arcade Physics instance belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Factory#sys\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.sys = world.scene.sys;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Physics Collider object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#collider\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object1 - The first object to check for collision.\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object2 - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - The callback to invoke when the two objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - The callback to invoke when the two objects collide. Must return a boolean.\r\n     * @param {*} [callbackContext] - The scope in which to call the callbacks.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Collider} The Collider that was created.\r\n     */\r\n    collider: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        return this.world.addCollider(object1, object2, collideCallback, processCallback, callbackContext);\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Physics Collider Overlap object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#overlap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object1 - The first object to check for overlap.\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object2 - The second object to check for overlap.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - The callback to invoke when the two objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - The callback to invoke when the two objects collide. Must return a boolean.\r\n     * @param {*} [callbackContext] - The scope in which to call the callbacks.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Collider} The Collider that was created.\r\n     */\r\n    overlap: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        return this.world.addOverlap(object1, object2, collideCallback, processCallback, callbackContext);\r\n    },\r\n\r\n    /**\r\n     * Adds an Arcade Physics Body to the given Game Object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#existing\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - A Game Object.\r\n     * @param {boolean} [isStatic=false] - Create a Static body (true) or Dynamic body (false).\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object.\r\n     */\r\n    existing: function (gameObject, isStatic)\r\n    {\r\n        var type = (isStatic) ? CONST.STATIC_BODY : CONST.DYNAMIC_BODY;\r\n\r\n        this.world.enableBody(gameObject, type);\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Image object with a Static body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#staticImage\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Image} The Image object that was created.\r\n     */\r\n    staticImage: function (x, y, key, frame)\r\n    {\r\n        var image = new ArcadeImage(this.scene, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(image);\r\n\r\n        this.world.enableBody(image, CONST.STATIC_BODY);\r\n\r\n        return image;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Image object with a Dynamic body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#image\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Image} The Image object that was created.\r\n     */\r\n    image: function (x, y, key, frame)\r\n    {\r\n        var image = new ArcadeImage(this.scene, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(image);\r\n\r\n        this.world.enableBody(image, CONST.DYNAMIC_BODY);\r\n\r\n        return image;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Sprite object with a Static body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#staticSprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Sprite} The Sprite object that was created.\r\n     */\r\n    staticSprite: function (x, y, key, frame)\r\n    {\r\n        var sprite = new ArcadeSprite(this.scene, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(sprite);\r\n        this.sys.updateList.add(sprite);\r\n\r\n        this.world.enableBody(sprite, CONST.STATIC_BODY);\r\n\r\n        return sprite;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Arcade Sprite object with a Dynamic body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#sprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Sprite} The Sprite object that was created.\r\n     */\r\n    sprite: function (x, y, key, frame)\r\n    {\r\n        var sprite = new ArcadeSprite(this.scene, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(sprite);\r\n        this.sys.updateList.add(sprite);\r\n\r\n        this.world.enableBody(sprite, CONST.DYNAMIC_BODY);\r\n\r\n        return sprite;\r\n    },\r\n\r\n    /**\r\n     * Creates a Static Physics Group object.\r\n     * All Game Objects created by this Group will automatically be static Arcade Physics objects.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#staticGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n     * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticGroup} The Static Group object that was created.\r\n     */\r\n    staticGroup: function (children, config)\r\n    {\r\n        return this.sys.updateList.add(new StaticPhysicsGroup(this.world, this.world.scene, children, config));\r\n    },\r\n\r\n    /**\r\n     * Creates a Physics Group object.\r\n     * All Game Objects created by this Group will automatically be dynamic Arcade Physics objects.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#group\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.Physics.Arcade.PhysicsGroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n     * @param {Phaser.Types.Physics.Arcade.PhysicsGroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Group} The Group object that was created.\r\n     */\r\n    group: function (children, config)\r\n    {\r\n        return this.sys.updateList.add(new PhysicsGroup(this.world, this.world.scene, children, config));\r\n    },\r\n\r\n    /**\r\n     * Destroys this Factory.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Factory#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world = null;\r\n        this.scene = null;\r\n        this.sys = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Factory;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9GYWN0b3J5LmpzP2ZlZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFlO0FBQ3pDLG1CQUFtQixtQkFBTyxDQUFDLGdGQUFnQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxrRUFBUztBQUM3QixtQkFBbUIsbUJBQU8sQ0FBQyxnRkFBZ0I7QUFDM0MseUJBQXlCLG1CQUFPLENBQUMsNEZBQXNCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9IQUFvSDtBQUNuSSxlQUFlLG9IQUFvSDtBQUNuSSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9IQUFvSDtBQUNuSSxlQUFlLG9IQUFvSDtBQUNuSSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEhBQThILGdEQUFnRDtBQUM3TCxlQUFlLDRGQUE0RjtBQUMzRztBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrSUFBa0ksZ0RBQWdEO0FBQ2pNLGVBQWUsZ0dBQWdHO0FBQy9HO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9GYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXJjYWRlSW1hZ2UgPSByZXF1aXJlKCcuL0FyY2FkZUltYWdlJyk7XHJcbnZhciBBcmNhZGVTcHJpdGUgPSByZXF1aXJlKCcuL0FyY2FkZVNwcml0ZScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBQaHlzaWNzR3JvdXAgPSByZXF1aXJlKCcuL1BoeXNpY3NHcm91cCcpO1xyXG52YXIgU3RhdGljUGh5c2ljc0dyb3VwID0gcmVxdWlyZSgnLi9TdGF0aWNQaHlzaWNzR3JvdXAnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBBcmNhZGUgUGh5c2ljcyBGYWN0b3J5IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNyZWF0ZSBBcmNhZGUgUGh5c2ljcyBlbmFibGVkIEdhbWUgT2JqZWN0cy5cclxuICogT2JqZWN0cyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoaXMgRmFjdG9yeSBhcmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgcGh5c2ljcyB3b3JsZC5cclxuICpcclxuICogQGNsYXNzIEZhY3RvcnlcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkFyY2FkZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSB3b3JsZCAtIFRoZSBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZS5cclxuICovXHJcbnZhciBGYWN0b3J5ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZhY3RvcnkgKHdvcmxkKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBBcmNhZGUgUGh5c2ljcyBXb3JsZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5GYWN0b3J5I3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGlzIEFyY2FkZSBQaHlzaWNzIGluc3RhbmNlIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRmFjdG9yeSNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHdvcmxkLnNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUuU3lzdGVtcyB0aGlzIEFyY2FkZSBQaHlzaWNzIGluc3RhbmNlIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRmFjdG9yeSNzeXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzID0gd29ybGQuc2NlbmUuc3lzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXJjYWRlIFBoeXNpY3MgQ29sbGlkZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZhY3RvcnkjY29sbGlkZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cFtdKX0gb2JqZWN0MSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cFtdKX0gb2JqZWN0MiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW2NvbGxpZGVDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuIE11c3QgcmV0dXJuIGEgYm9vbGVhbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gY2FsbCB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlcn0gVGhlIENvbGxpZGVyIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVyOiBmdW5jdGlvbiAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53b3JsZC5hZGRDb2xsaWRlcihvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEFyY2FkZSBQaHlzaWNzIENvbGxpZGVyIE92ZXJsYXAgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZhY3Rvcnkjb3ZlcmxhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXXxQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB8UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwW10pfSBvYmplY3QxIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3Igb3ZlcmxhcC5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cFtdKX0gb2JqZWN0MiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBvdmVybGFwLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB0d28gb2JqZWN0cyBjb2xsaWRlLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtwcm9jZXNzQ2FsbGJhY2tdIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB0d28gb2JqZWN0cyBjb2xsaWRlLiBNdXN0IHJldHVybiBhIGJvb2xlYW4uXHJcbiAgICAgKiBAcGFyYW0geyp9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGNhbGwgdGhlIGNhbGxiYWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29sbGlkZXJ9IFRoZSBDb2xsaWRlciB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBvdmVybGFwOiBmdW5jdGlvbiAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53b3JsZC5hZGRPdmVybGFwKG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gQXJjYWRlIFBoeXNpY3MgQm9keSB0byB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRmFjdG9yeSNleGlzdGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIEEgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0YXRpYz1mYWxzZV0gLSBDcmVhdGUgYSBTdGF0aWMgYm9keSAodHJ1ZSkgb3IgRHluYW1pYyBib2R5IChmYWxzZSkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZXhpc3Rpbmc6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBpc1N0YXRpYylcclxuICAgIHtcclxuICAgICAgICB2YXIgdHlwZSA9IChpc1N0YXRpYykgPyBDT05TVC5TVEFUSUNfQk9EWSA6IENPTlNULkRZTkFNSUNfQk9EWTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5lbmFibGVCb2R5KGdhbWVPYmplY3QsIHR5cGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEFyY2FkZSBJbWFnZSBvYmplY3Qgd2l0aCBhIFN0YXRpYyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZhY3Rvcnkjc3RhdGljSW1hZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuSW1hZ2V9IFRoZSBJbWFnZSBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljSW1hZ2U6IGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBBcmNhZGVJbWFnZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXMuZGlzcGxheUxpc3QuYWRkKGltYWdlKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5lbmFibGVCb2R5KGltYWdlLCBDT05TVC5TVEFUSUNfQk9EWSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpbWFnZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEFyY2FkZSBJbWFnZSBvYmplY3Qgd2l0aCBhIER5bmFtaWMgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5GYWN0b3J5I2ltYWdlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkltYWdlfSBUaGUgSW1hZ2Ugb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGltYWdlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgQXJjYWRlSW1hZ2UodGhpcy5zY2VuZSwgeCwgeSwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzLmRpc3BsYXlMaXN0LmFkZChpbWFnZSk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuZW5hYmxlQm9keShpbWFnZSwgQ09OU1QuRFlOQU1JQ19CT0RZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXJjYWRlIFNwcml0ZSBvYmplY3Qgd2l0aCBhIFN0YXRpYyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZhY3Rvcnkjc3RhdGljU3ByaXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlNwcml0ZX0gVGhlIFNwcml0ZSBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljU3ByaXRlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc3ByaXRlID0gbmV3IEFyY2FkZVNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZSk7XHJcbiAgICAgICAgdGhpcy5zeXMudXBkYXRlTGlzdC5hZGQoc3ByaXRlKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5lbmFibGVCb2R5KHNwcml0ZSwgQ09OU1QuU1RBVElDX0JPRFkpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3ByaXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXJjYWRlIFNwcml0ZSBvYmplY3Qgd2l0aCBhIER5bmFtaWMgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5GYWN0b3J5I3Nwcml0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlNwcml0ZX0gVGhlIFNwcml0ZSBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgc3ByaXRlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc3ByaXRlID0gbmV3IEFyY2FkZVNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZSk7XHJcbiAgICAgICAgdGhpcy5zeXMudXBkYXRlTGlzdC5hZGQoc3ByaXRlKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5lbmFibGVCb2R5KHNwcml0ZSwgQ09OU1QuRFlOQU1JQ19CT0RZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNwcml0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgU3RhdGljIFBoeXNpY3MgR3JvdXAgb2JqZWN0LlxyXG4gICAgICogQWxsIEdhbWUgT2JqZWN0cyBjcmVhdGVkIGJ5IHRoaXMgR3JvdXAgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0YXRpYyBBcmNhZGUgUGh5c2ljcyBvYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZhY3Rvcnkjc3RhdGljR3JvdXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZyl9IFtjaGlsZHJlbl0gLSBHYW1lIE9iamVjdHMgdG8gYWRkIHRvIHRoaXMgZ3JvdXA7IG9yIHRoZSBgY29uZmlnYCBhcmd1bWVudC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ30gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXB9IFRoZSBTdGF0aWMgR3JvdXAgb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpY0dyb3VwOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zeXMudXBkYXRlTGlzdC5hZGQobmV3IFN0YXRpY1BoeXNpY3NHcm91cCh0aGlzLndvcmxkLCB0aGlzLndvcmxkLnNjZW5lLCBjaGlsZHJlbiwgY29uZmlnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFBoeXNpY3MgR3JvdXAgb2JqZWN0LlxyXG4gICAgICogQWxsIEdhbWUgT2JqZWN0cyBjcmVhdGVkIGJ5IHRoaXMgR3JvdXAgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGR5bmFtaWMgQXJjYWRlIFBoeXNpY3Mgb2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5GYWN0b3J5I2dyb3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfFBoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5QaHlzaWNzR3JvdXBDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ3JlYXRlQ29uZmlnKX0gW2NoaWxkcmVuXSAtIEdhbWUgT2JqZWN0cyB0byBhZGQgdG8gdGhpcyBncm91cDsgb3IgdGhlIGBjb25maWdgIGFyZ3VtZW50LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuUGh5c2ljc0dyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ30gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXB9IFRoZSBHcm91cCBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgZ3JvdXA6IGZ1bmN0aW9uIChjaGlsZHJlbiwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN5cy51cGRhdGVMaXN0LmFkZChuZXcgUGh5c2ljc0dyb3VwKHRoaXMud29ybGQsIHRoaXMud29ybGQuc2NlbmUsIGNoaWxkcmVuLCBjb25maWcpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEZhY3RvcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRmFjdG9yeSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndvcmxkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmFjdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/Factory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/GetOverlapX.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/GetOverlapX.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\n\r\n/**\r\n * Calculates and returns the horizontal overlap between two arcade physics bodies and sets their properties\r\n * accordingly, including: `touching.left`, `touching.right`, `touching.none` and `overlapX'.\r\n *\r\n * @function Phaser.Physics.Arcade.GetOverlapX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to separate.\r\n * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to separate.\r\n * @param {boolean} overlapOnly - Is this an overlap only check, or part of separation?\r\n * @param {number} bias - A value added to the delta values during collision checks. Increase it to prevent sprite tunneling(sprites passing through another instead of colliding).\r\n *\r\n * @return {number} The amount of overlap.\r\n */\r\nvar GetOverlapX = function (body1, body2, overlapOnly, bias)\r\n{\r\n    var overlap = 0;\r\n    var maxOverlap = body1.deltaAbsX() + body2.deltaAbsX() + bias;\r\n\r\n    if (body1._dx === 0 && body2._dx === 0)\r\n    {\r\n        //  They overlap but neither of them are moving\r\n        body1.embedded = true;\r\n        body2.embedded = true;\r\n    }\r\n    else if (body1._dx > body2._dx)\r\n    {\r\n        //  Body1 is moving right and / or Body2 is moving left\r\n        overlap = body1.right - body2.x;\r\n\r\n        if ((overlap > maxOverlap && !overlapOnly) || body1.checkCollision.right === false || body2.checkCollision.left === false)\r\n        {\r\n            overlap = 0;\r\n        }\r\n        else\r\n        {\r\n            body1.touching.none = false;\r\n            body1.touching.right = true;\r\n\r\n            body2.touching.none = false;\r\n            body2.touching.left = true;\r\n\r\n            if (body2.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body1.blocked.none = false;\r\n                body1.blocked.right = true;\r\n            }\r\n\r\n            if (body1.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body2.blocked.none = false;\r\n                body2.blocked.left = true;\r\n            }\r\n        }\r\n    }\r\n    else if (body1._dx < body2._dx)\r\n    {\r\n        //  Body1 is moving left and/or Body2 is moving right\r\n        overlap = body1.x - body2.width - body2.x;\r\n\r\n        if ((-overlap > maxOverlap && !overlapOnly) || body1.checkCollision.left === false || body2.checkCollision.right === false)\r\n        {\r\n            overlap = 0;\r\n        }\r\n        else\r\n        {\r\n            body1.touching.none = false;\r\n            body1.touching.left = true;\r\n\r\n            body2.touching.none = false;\r\n            body2.touching.right = true;\r\n\r\n            if (body2.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body1.blocked.none = false;\r\n                body1.blocked.left = true;\r\n            }\r\n\r\n            if (body1.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body2.blocked.none = false;\r\n                body2.blocked.right = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    //  Resets the overlapX to zero if there is no overlap, or to the actual pixel value if there is\r\n    body1.overlapX = overlap;\r\n    body2.overlapX = overlap;\r\n\r\n    return overlap;\r\n};\r\n\r\nmodule.exports = GetOverlapX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9HZXRPdmVybGFwWC5qcz8yODEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsa0VBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9HZXRPdmVybGFwWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGhvcml6b250YWwgb3ZlcmxhcCBiZXR3ZWVuIHR3byBhcmNhZGUgcGh5c2ljcyBib2RpZXMgYW5kIHNldHMgdGhlaXIgcHJvcGVydGllc1xyXG4gKiBhY2NvcmRpbmdseSwgaW5jbHVkaW5nOiBgdG91Y2hpbmcubGVmdGAsIGB0b3VjaGluZy5yaWdodGAsIGB0b3VjaGluZy5ub25lYCBhbmQgYG92ZXJsYXBYJy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5HZXRPdmVybGFwWFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keTEgLSBUaGUgZmlyc3QgQm9keSB0byBzZXBhcmF0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keTIgLSBUaGUgc2Vjb25kIEJvZHkgdG8gc2VwYXJhdGUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcmxhcE9ubHkgLSBJcyB0aGlzIGFuIG92ZXJsYXAgb25seSBjaGVjaywgb3IgcGFydCBvZiBzZXBhcmF0aW9uP1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYmlhcyAtIEEgdmFsdWUgYWRkZWQgdG8gdGhlIGRlbHRhIHZhbHVlcyBkdXJpbmcgY29sbGlzaW9uIGNoZWNrcy4gSW5jcmVhc2UgaXQgdG8gcHJldmVudCBzcHJpdGUgdHVubmVsaW5nKHNwcml0ZXMgcGFzc2luZyB0aHJvdWdoIGFub3RoZXIgaW5zdGVhZCBvZiBjb2xsaWRpbmcpLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbW91bnQgb2Ygb3ZlcmxhcC5cclxuICovXHJcbnZhciBHZXRPdmVybGFwWCA9IGZ1bmN0aW9uIChib2R5MSwgYm9keTIsIG92ZXJsYXBPbmx5LCBiaWFzKVxyXG57XHJcbiAgICB2YXIgb3ZlcmxhcCA9IDA7XHJcbiAgICB2YXIgbWF4T3ZlcmxhcCA9IGJvZHkxLmRlbHRhQWJzWCgpICsgYm9keTIuZGVsdGFBYnNYKCkgKyBiaWFzO1xyXG5cclxuICAgIGlmIChib2R5MS5fZHggPT09IDAgJiYgYm9keTIuX2R4ID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUaGV5IG92ZXJsYXAgYnV0IG5laXRoZXIgb2YgdGhlbSBhcmUgbW92aW5nXHJcbiAgICAgICAgYm9keTEuZW1iZWRkZWQgPSB0cnVlO1xyXG4gICAgICAgIGJvZHkyLmVtYmVkZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGJvZHkxLl9keCA+IGJvZHkyLl9keClcclxuICAgIHtcclxuICAgICAgICAvLyAgQm9keTEgaXMgbW92aW5nIHJpZ2h0IGFuZCAvIG9yIEJvZHkyIGlzIG1vdmluZyBsZWZ0XHJcbiAgICAgICAgb3ZlcmxhcCA9IGJvZHkxLnJpZ2h0IC0gYm9keTIueDtcclxuXHJcbiAgICAgICAgaWYgKChvdmVybGFwID4gbWF4T3ZlcmxhcCAmJiAhb3ZlcmxhcE9ubHkpIHx8IGJvZHkxLmNoZWNrQ29sbGlzaW9uLnJpZ2h0ID09PSBmYWxzZSB8fCBib2R5Mi5jaGVja0NvbGxpc2lvbi5sZWZ0ID09PSBmYWxzZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG92ZXJsYXAgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5MS50b3VjaGluZy5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJvZHkxLnRvdWNoaW5nLnJpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGJvZHkyLnRvdWNoaW5nLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgYm9keTIudG91Y2hpbmcubGVmdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keTIucGh5c2ljc1R5cGUgPT09IENPTlNULlNUQVRJQ19CT0RZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5MS5ibG9ja2VkLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvZHkxLmJsb2NrZWQucmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keTEucGh5c2ljc1R5cGUgPT09IENPTlNULlNUQVRJQ19CT0RZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5Mi5ibG9ja2VkLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvZHkyLmJsb2NrZWQubGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5MS5fZHggPCBib2R5Mi5fZHgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvZHkxIGlzIG1vdmluZyBsZWZ0IGFuZC9vciBCb2R5MiBpcyBtb3ZpbmcgcmlnaHRcclxuICAgICAgICBvdmVybGFwID0gYm9keTEueCAtIGJvZHkyLndpZHRoIC0gYm9keTIueDtcclxuXHJcbiAgICAgICAgaWYgKCgtb3ZlcmxhcCA+IG1heE92ZXJsYXAgJiYgIW92ZXJsYXBPbmx5KSB8fCBib2R5MS5jaGVja0NvbGxpc2lvbi5sZWZ0ID09PSBmYWxzZSB8fCBib2R5Mi5jaGVja0NvbGxpc2lvbi5yaWdodCA9PT0gZmFsc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdmVybGFwID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keTEudG91Y2hpbmcubm9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBib2R5MS50b3VjaGluZy5sZWZ0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGJvZHkyLnRvdWNoaW5nLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgYm9keTIudG91Y2hpbmcucmlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHkyLnBoeXNpY3NUeXBlID09PSBDT05TVC5TVEFUSUNfQk9EWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keTEuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib2R5MS5ibG9ja2VkLmxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keTEucGh5c2ljc1R5cGUgPT09IENPTlNULlNUQVRJQ19CT0RZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5Mi5ibG9ja2VkLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvZHkyLmJsb2NrZWQucmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBSZXNldHMgdGhlIG92ZXJsYXBYIHRvIHplcm8gaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCwgb3IgdG8gdGhlIGFjdHVhbCBwaXhlbCB2YWx1ZSBpZiB0aGVyZSBpc1xyXG4gICAgYm9keTEub3ZlcmxhcFggPSBvdmVybGFwO1xyXG4gICAgYm9keTIub3ZlcmxhcFggPSBvdmVybGFwO1xyXG5cclxuICAgIHJldHVybiBvdmVybGFwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRPdmVybGFwWDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/GetOverlapX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/GetOverlapY.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/GetOverlapY.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\n\r\n/**\r\n * Calculates and returns the vertical overlap between two arcade physics bodies and sets their properties\r\n * accordingly, including: `touching.up`, `touching.down`, `touching.none` and `overlapY'.\r\n *\r\n * @function Phaser.Physics.Arcade.GetOverlapY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to separate.\r\n * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to separate.\r\n * @param {boolean} overlapOnly - Is this an overlap only check, or part of separation?\r\n * @param {number} bias - A value added to the delta values during collision checks. Increase it to prevent sprite tunneling(sprites passing through another instead of colliding).\r\n *\r\n * @return {number} The amount of overlap.\r\n */\r\nvar GetOverlapY = function (body1, body2, overlapOnly, bias)\r\n{\r\n    var overlap = 0;\r\n    var maxOverlap = body1.deltaAbsY() + body2.deltaAbsY() + bias;\r\n\r\n    if (body1._dy === 0 && body2._dy === 0)\r\n    {\r\n        //  They overlap but neither of them are moving\r\n        body1.embedded = true;\r\n        body2.embedded = true;\r\n    }\r\n    else if (body1._dy > body2._dy)\r\n    {\r\n        //  Body1 is moving down and/or Body2 is moving up\r\n        overlap = body1.bottom - body2.y;\r\n\r\n        if ((overlap > maxOverlap && !overlapOnly) || body1.checkCollision.down === false || body2.checkCollision.up === false)\r\n        {\r\n            overlap = 0;\r\n        }\r\n        else\r\n        {\r\n            body1.touching.none = false;\r\n            body1.touching.down = true;\r\n\r\n            body2.touching.none = false;\r\n            body2.touching.up = true;\r\n\r\n            if (body2.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body1.blocked.none = false;\r\n                body1.blocked.down = true;\r\n            }\r\n\r\n            if (body1.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body2.blocked.none = false;\r\n                body2.blocked.up = true;\r\n            }\r\n        }\r\n    }\r\n    else if (body1._dy < body2._dy)\r\n    {\r\n        //  Body1 is moving up and/or Body2 is moving down\r\n        overlap = body1.y - body2.bottom;\r\n\r\n        if ((-overlap > maxOverlap && !overlapOnly) || body1.checkCollision.up === false || body2.checkCollision.down === false)\r\n        {\r\n            overlap = 0;\r\n        }\r\n        else\r\n        {\r\n            body1.touching.none = false;\r\n            body1.touching.up = true;\r\n\r\n            body2.touching.none = false;\r\n            body2.touching.down = true;\r\n\r\n            if (body2.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body1.blocked.none = false;\r\n                body1.blocked.up = true;\r\n            }\r\n\r\n            if (body1.physicsType === CONST.STATIC_BODY)\r\n            {\r\n                body2.blocked.none = false;\r\n                body2.blocked.down = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    //  Resets the overlapY to zero if there is no overlap, or to the actual pixel value if there is\r\n    body1.overlapY = overlap;\r\n    body2.overlapY = overlap;\r\n\r\n    return overlap;\r\n};\r\n\r\nmodule.exports = GetOverlapY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9HZXRPdmVybGFwWS5qcz80ODViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsa0VBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9HZXRPdmVybGFwWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIHZlcnRpY2FsIG92ZXJsYXAgYmV0d2VlbiB0d28gYXJjYWRlIHBoeXNpY3MgYm9kaWVzIGFuZCBzZXRzIHRoZWlyIHByb3BlcnRpZXNcclxuICogYWNjb3JkaW5nbHksIGluY2x1ZGluZzogYHRvdWNoaW5nLnVwYCwgYHRvdWNoaW5nLmRvd25gLCBgdG91Y2hpbmcubm9uZWAgYW5kIGBvdmVybGFwWScuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR2V0T3ZlcmxhcFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IEJvZHkgdG8gc2VwYXJhdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkyIC0gVGhlIHNlY29uZCBCb2R5IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJsYXBPbmx5IC0gSXMgdGhpcyBhbiBvdmVybGFwIG9ubHkgY2hlY2ssIG9yIHBhcnQgb2Ygc2VwYXJhdGlvbj9cclxuICogQHBhcmFtIHtudW1iZXJ9IGJpYXMgLSBBIHZhbHVlIGFkZGVkIHRvIHRoZSBkZWx0YSB2YWx1ZXMgZHVyaW5nIGNvbGxpc2lvbiBjaGVja3MuIEluY3JlYXNlIGl0IHRvIHByZXZlbnQgc3ByaXRlIHR1bm5lbGluZyhzcHJpdGVzIHBhc3NpbmcgdGhyb3VnaCBhbm90aGVyIGluc3RlYWQgb2YgY29sbGlkaW5nKS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW1vdW50IG9mIG92ZXJsYXAuXHJcbiAqL1xyXG52YXIgR2V0T3ZlcmxhcFkgPSBmdW5jdGlvbiAoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgYmlhcylcclxue1xyXG4gICAgdmFyIG92ZXJsYXAgPSAwO1xyXG4gICAgdmFyIG1heE92ZXJsYXAgPSBib2R5MS5kZWx0YUFic1koKSArIGJvZHkyLmRlbHRhQWJzWSgpICsgYmlhcztcclxuXHJcbiAgICBpZiAoYm9keTEuX2R5ID09PSAwICYmIGJvZHkyLl9keSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICAvLyAgVGhleSBvdmVybGFwIGJ1dCBuZWl0aGVyIG9mIHRoZW0gYXJlIG1vdmluZ1xyXG4gICAgICAgIGJvZHkxLmVtYmVkZGVkID0gdHJ1ZTtcclxuICAgICAgICBib2R5Mi5lbWJlZGRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5MS5fZHkgPiBib2R5Mi5fZHkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvZHkxIGlzIG1vdmluZyBkb3duIGFuZC9vciBCb2R5MiBpcyBtb3ZpbmcgdXBcclxuICAgICAgICBvdmVybGFwID0gYm9keTEuYm90dG9tIC0gYm9keTIueTtcclxuXHJcbiAgICAgICAgaWYgKChvdmVybGFwID4gbWF4T3ZlcmxhcCAmJiAhb3ZlcmxhcE9ubHkpIHx8IGJvZHkxLmNoZWNrQ29sbGlzaW9uLmRvd24gPT09IGZhbHNlIHx8IGJvZHkyLmNoZWNrQ29sbGlzaW9uLnVwID09PSBmYWxzZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG92ZXJsYXAgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5MS50b3VjaGluZy5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJvZHkxLnRvdWNoaW5nLmRvd24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgYm9keTIudG91Y2hpbmcubm9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBib2R5Mi50b3VjaGluZy51cCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keTIucGh5c2ljc1R5cGUgPT09IENPTlNULlNUQVRJQ19CT0RZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5MS5ibG9ja2VkLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvZHkxLmJsb2NrZWQuZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5MS5waHlzaWNzVHlwZSA9PT0gQ09OU1QuU1RBVElDX0JPRFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZHkyLmJsb2NrZWQubm9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm9keTIuYmxvY2tlZC51cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5MS5fZHkgPCBib2R5Mi5fZHkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvZHkxIGlzIG1vdmluZyB1cCBhbmQvb3IgQm9keTIgaXMgbW92aW5nIGRvd25cclxuICAgICAgICBvdmVybGFwID0gYm9keTEueSAtIGJvZHkyLmJvdHRvbTtcclxuXHJcbiAgICAgICAgaWYgKCgtb3ZlcmxhcCA+IG1heE92ZXJsYXAgJiYgIW92ZXJsYXBPbmx5KSB8fCBib2R5MS5jaGVja0NvbGxpc2lvbi51cCA9PT0gZmFsc2UgfHwgYm9keTIuY2hlY2tDb2xsaXNpb24uZG93biA9PT0gZmFsc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdmVybGFwID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keTEudG91Y2hpbmcubm9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBib2R5MS50b3VjaGluZy51cCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBib2R5Mi50b3VjaGluZy5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJvZHkyLnRvdWNoaW5nLmRvd24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHkyLnBoeXNpY3NUeXBlID09PSBDT05TVC5TVEFUSUNfQk9EWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keTEuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib2R5MS5ibG9ja2VkLnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHkxLnBoeXNpY3NUeXBlID09PSBDT05TVC5TVEFUSUNfQk9EWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keTIuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib2R5Mi5ibG9ja2VkLmRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBSZXNldHMgdGhlIG92ZXJsYXBZIHRvIHplcm8gaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCwgb3IgdG8gdGhlIGFjdHVhbCBwaXhlbCB2YWx1ZSBpZiB0aGVyZSBpc1xyXG4gICAgYm9keTEub3ZlcmxhcFkgPSBvdmVybGFwO1xyXG4gICAgYm9keTIub3ZlcmxhcFkgPSBvdmVybGFwO1xyXG5cclxuICAgIHJldHVybiBvdmVybGFwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRPdmVybGFwWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/GetOverlapY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/PhysicsGroup.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/PhysicsGroup.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArcadeSprite = __webpack_require__(/*! ./ArcadeSprite */ \"./node_modules/phaser/src/physics/arcade/ArcadeSprite.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Group = __webpack_require__(/*! ../../gameobjects/group/Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Arcade Physics Group object.\r\n *\r\n * All Game Objects created by this Group will automatically be given dynamic Arcade Physics bodies.\r\n *\r\n * Its static counterpart is {@link Phaser.Physics.Arcade.StaticGroup}.\r\n *\r\n * @class Group\r\n * @extends Phaser.GameObjects.Group\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The physics simulation.\r\n * @param {Phaser.Scene} scene - The scene this group belongs to.\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.Physics.Arcade.PhysicsGroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n * @param {Phaser.Types.Physics.Arcade.PhysicsGroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group.\r\n */\r\nvar PhysicsGroup = new Class({\r\n\r\n    Extends: Group,\r\n\r\n    initialize:\r\n\r\n    function PhysicsGroup (world, scene, children, config)\r\n    {\r\n        if (!children && !config)\r\n        {\r\n            config = {\r\n                createCallback: this.createCallbackHandler,\r\n                removeCallback: this.removeCallbackHandler\r\n            };\r\n        }\r\n        else if (IsPlainObject(children))\r\n        {\r\n            //  children is a plain object, so swizzle them:\r\n            config = children;\r\n            children = null;\r\n\r\n            config.createCallback = this.createCallbackHandler;\r\n            config.removeCallback = this.removeCallbackHandler;\r\n        }\r\n        else if (Array.isArray(children) && IsPlainObject(children[0]))\r\n        {\r\n            //  children is an array of plain objects\r\n            config = children[0];\r\n\r\n            var _this = this;\r\n\r\n            children.forEach(function (singleConfig)\r\n            {\r\n                singleConfig.createCallback = _this.createCallbackHandler;\r\n                singleConfig.removeCallback = _this.removeCallbackHandler;\r\n            });\r\n        }\r\n        else\r\n        {\r\n            // config is not defined and children is not a plain object nor an array of plain objects\r\n            config = {\r\n                createCallback: this.createCallbackHandler,\r\n                removeCallback: this.removeCallbackHandler\r\n            };\r\n        }\r\n\r\n        /**\r\n         * The physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Group#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The class to create new Group members from.\r\n         *\r\n         * This should be either `Phaser.Physics.Arcade.Image`, `Phaser.Physics.Arcade.Sprite`, or a class extending one of those.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Group#classType\r\n         * @type {Function}\r\n         * @default ArcadeSprite\r\n         * @since 3.0.0\r\n         */\r\n        config.classType = GetFastValue(config, 'classType', ArcadeSprite);\r\n\r\n        /**\r\n         * The physics type of the Group's members.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Group#physicsType\r\n         * @type {integer}\r\n         * @default Phaser.Physics.Arcade.DYNAMIC_BODY\r\n         * @since 3.0.0\r\n         */\r\n        this.physicsType = CONST.DYNAMIC_BODY;\r\n\r\n        /**\r\n         * Default physics properties applied to Game Objects added to the Group or created by the Group. Derived from the `config` argument.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Group#defaults\r\n         * @type {Phaser.Types.Physics.Arcade.PhysicsGroupDefaults}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaults = {\r\n            setCollideWorldBounds: GetFastValue(config, 'collideWorldBounds', false),\r\n            setBoundsRectangle: GetFastValue(config, 'customBoundsRectangle', null),\r\n            setAccelerationX: GetFastValue(config, 'accelerationX', 0),\r\n            setAccelerationY: GetFastValue(config, 'accelerationY', 0),\r\n            setAllowDrag: GetFastValue(config, 'allowDrag', true),\r\n            setAllowGravity: GetFastValue(config, 'allowGravity', true),\r\n            setAllowRotation: GetFastValue(config, 'allowRotation', true),\r\n            setBounceX: GetFastValue(config, 'bounceX', 0),\r\n            setBounceY: GetFastValue(config, 'bounceY', 0),\r\n            setDragX: GetFastValue(config, 'dragX', 0),\r\n            setDragY: GetFastValue(config, 'dragY', 0),\r\n            setEnable: GetFastValue(config, 'enable', true),\r\n            setGravityX: GetFastValue(config, 'gravityX', 0),\r\n            setGravityY: GetFastValue(config, 'gravityY', 0),\r\n            setFrictionX: GetFastValue(config, 'frictionX', 0),\r\n            setFrictionY: GetFastValue(config, 'frictionY', 0),\r\n            setVelocityX: GetFastValue(config, 'velocityX', 0),\r\n            setVelocityY: GetFastValue(config, 'velocityY', 0),\r\n            setAngularVelocity: GetFastValue(config, 'angularVelocity', 0),\r\n            setAngularAcceleration: GetFastValue(config, 'angularAcceleration', 0),\r\n            setAngularDrag: GetFastValue(config, 'angularDrag', 0),\r\n            setMass: GetFastValue(config, 'mass', 1),\r\n            setImmovable: GetFastValue(config, 'immovable', false)\r\n        };\r\n\r\n        if (Array.isArray(children))\r\n        {\r\n            config = null;\r\n        }\r\n\r\n        Group.call(this, scene, children, config);\r\n\r\n        /**\r\n         * A textual representation of this Game Object.\r\n         * Used internally by Phaser but is available for your own custom classes to populate.\r\n         *\r\n         * @name Phaser.Physics.Arcade.Group#type\r\n         * @type {string}\r\n         * @default 'PhysicsGroup'\r\n         * @since 3.21.0\r\n         */\r\n        this.type = 'PhysicsGroup';\r\n    },\r\n\r\n    /**\r\n     * Enables a Game Object's Body and assigns `defaults`. Called when a Group member is added or created.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Group#createCallbackHandler\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object being added.\r\n     */\r\n    createCallbackHandler: function (child)\r\n    {\r\n        if (!child.body)\r\n        {\r\n            this.world.enableBody(child, CONST.DYNAMIC_BODY);\r\n        }\r\n\r\n        var body = child.body;\r\n\r\n        for (var key in this.defaults)\r\n        {\r\n            body[key](this.defaults[key]);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Disables a Game Object's Body. Called when a Group member is removed.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Group#removeCallbackHandler\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The Game Object being removed.\r\n     */\r\n    removeCallbackHandler: function (child)\r\n    {\r\n        if (child.body)\r\n        {\r\n            this.world.disableBody(child);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the velocity of each Group member.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Group#setVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity.\r\n     * @param {number} y - The vertical velocity.\r\n     * @param {number} [step=0] - The velocity increment. When set, the first member receives velocity (x, y), the second (x + step, y + step), and so on.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Group} This Physics Group object.\r\n     */\r\n    setVelocity: function (x, y, step)\r\n    {\r\n        if (step === undefined) { step = 0; }\r\n\r\n        var items = this.getChildren();\r\n\r\n        for (var i = 0; i < items.length; i++)\r\n        {\r\n            items[i].body.velocity.set(x + (i * step), y + (i * step));\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal velocity of each Group member.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Group#setVelocityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The velocity value.\r\n     * @param {number} [step=0] - The velocity increment. When set, the first member receives velocity (x), the second (x + step), and so on.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Group} This Physics Group object.\r\n     */\r\n    setVelocityX: function (value, step)\r\n    {\r\n        if (step === undefined) { step = 0; }\r\n\r\n        var items = this.getChildren();\r\n\r\n        for (var i = 0; i < items.length; i++)\r\n        {\r\n            items[i].body.velocity.x = value + (i * step);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical velocity of each Group member.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Group#setVelocityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The velocity value.\r\n     * @param {number} [step=0] - The velocity increment. When set, the first member receives velocity (y), the second (y + step), and so on.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Group} This Physics Group object.\r\n     */\r\n    setVelocityY: function (value, step)\r\n    {\r\n        if (step === undefined) { step = 0; }\r\n\r\n        var items = this.getChildren();\r\n\r\n        for (var i = 0; i < items.length; i++)\r\n        {\r\n            items[i].body.velocity.y = value + (i * step);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = PhysicsGroup;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9QaHlzaWNzR3JvdXAuanM/NDE4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQzNDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLGtFQUFTO0FBQzdCLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxZQUFZLG1CQUFPLENBQUMsMkZBQStCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHdDQUF3QztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsYUFBYTtBQUN4QixXQUFXLGtJQUFrSSxnREFBZ0Q7QUFDN0wsV0FBVyxnR0FBZ0c7QUFDM0c7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsVUFBVTs7QUFFM0M7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxVQUFVOztBQUUzQzs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7O0FBRTNDOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL1BoeXNpY3NHcm91cC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFyY2FkZVNwcml0ZSA9IHJlcXVpcmUoJy4vQXJjYWRlU3ByaXRlJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEdyb3VwID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvZ3JvdXAvR3JvdXAnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gQXJjYWRlIFBoeXNpY3MgR3JvdXAgb2JqZWN0LlxyXG4gKlxyXG4gKiBBbGwgR2FtZSBPYmplY3RzIGNyZWF0ZWQgYnkgdGhpcyBHcm91cCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZ2l2ZW4gZHluYW1pYyBBcmNhZGUgUGh5c2ljcyBib2RpZXMuXHJcbiAqXHJcbiAqIEl0cyBzdGF0aWMgY291bnRlcnBhcnQgaXMge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cH0uXHJcbiAqXHJcbiAqIEBjbGFzcyBHcm91cFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXBcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkFyY2FkZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSB3b3JsZCAtIFRoZSBwaHlzaWNzIHNpbXVsYXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBzY2VuZSB0aGlzIGdyb3VwIGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLlBoeXNpY3NHcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWcpfSBbY2hpbGRyZW5dIC0gR2FtZSBPYmplY3RzIHRvIGFkZCB0byB0aGlzIGdyb3VwOyBvciB0aGUgYGNvbmZpZ2AgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLlBoeXNpY3NHcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IFtjb25maWddIC0gU2V0dGluZ3MgZm9yIHRoaXMgZ3JvdXAuXHJcbiAqL1xyXG52YXIgUGh5c2ljc0dyb3VwID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHcm91cCxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBoeXNpY3NHcm91cCAod29ybGQsIHNjZW5lLCBjaGlsZHJlbiwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gJiYgIWNvbmZpZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrOiB0aGlzLmNyZWF0ZUNhbGxiYWNrSGFuZGxlcixcclxuICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrOiB0aGlzLnJlbW92ZUNhbGxiYWNrSGFuZGxlclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChJc1BsYWluT2JqZWN0KGNoaWxkcmVuKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBjaGlsZHJlbiBpcyBhIHBsYWluIG9iamVjdCwgc28gc3dpenpsZSB0aGVtOlxyXG4gICAgICAgICAgICBjb25maWcgPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uZmlnLmNyZWF0ZUNhbGxiYWNrID0gdGhpcy5jcmVhdGVDYWxsYmFja0hhbmRsZXI7XHJcbiAgICAgICAgICAgIGNvbmZpZy5yZW1vdmVDYWxsYmFjayA9IHRoaXMucmVtb3ZlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJiBJc1BsYWluT2JqZWN0KGNoaWxkcmVuWzBdKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBjaGlsZHJlbiBpcyBhbiBhcnJheSBvZiBwbGFpbiBvYmplY3RzXHJcbiAgICAgICAgICAgIGNvbmZpZyA9IGNoaWxkcmVuWzBdO1xyXG5cclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKHNpbmdsZUNvbmZpZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlQ29uZmlnLmNyZWF0ZUNhbGxiYWNrID0gX3RoaXMuY3JlYXRlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlQ29uZmlnLnJlbW92ZUNhbGxiYWNrID0gX3RoaXMucmVtb3ZlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gY29uZmlnIGlzIG5vdCBkZWZpbmVkIGFuZCBjaGlsZHJlbiBpcyBub3QgYSBwbGFpbiBvYmplY3Qgbm9yIGFuIGFycmF5IG9mIHBsYWluIG9iamVjdHNcclxuICAgICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2s6IHRoaXMuY3JlYXRlQ2FsbGJhY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2s6IHRoaXMucmVtb3ZlQ2FsbGJhY2tIYW5kbGVyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGh5c2ljcyBzaW11bGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkdyb3VwI3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjbGFzcyB0byBjcmVhdGUgbmV3IEdyb3VwIG1lbWJlcnMgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgc2hvdWxkIGJlIGVpdGhlciBgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkltYWdlYCwgYFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TcHJpdGVgLCBvciBhIGNsYXNzIGV4dGVuZGluZyBvbmUgb2YgdGhvc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXAjY2xhc3NUeXBlXHJcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IEFyY2FkZVNwcml0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbmZpZy5jbGFzc1R5cGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY2xhc3NUeXBlJywgQXJjYWRlU3ByaXRlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBoeXNpY3MgdHlwZSBvZiB0aGUgR3JvdXAncyBtZW1iZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkdyb3VwI3BoeXNpY3NUeXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkRZTkFNSUNfQk9EWVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljc1R5cGUgPSBDT05TVC5EWU5BTUlDX0JPRFk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZmF1bHQgcGh5c2ljcyBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gR2FtZSBPYmplY3RzIGFkZGVkIHRvIHRoZSBHcm91cCBvciBjcmVhdGVkIGJ5IHRoZSBHcm91cC4gRGVyaXZlZCBmcm9tIHRoZSBgY29uZmlnYCBhcmd1bWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cCNkZWZhdWx0c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuUGh5c2ljc0dyb3VwRGVmYXVsdHN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgc2V0Q29sbGlkZVdvcmxkQm91bmRzOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY29sbGlkZVdvcmxkQm91bmRzJywgZmFsc2UpLFxyXG4gICAgICAgICAgICBzZXRCb3VuZHNSZWN0YW5nbGU6IEdldEZhc3RWYWx1ZShjb25maWcsICdjdXN0b21Cb3VuZHNSZWN0YW5nbGUnLCBudWxsKSxcclxuICAgICAgICAgICAgc2V0QWNjZWxlcmF0aW9uWDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FjY2VsZXJhdGlvblgnLCAwKSxcclxuICAgICAgICAgICAgc2V0QWNjZWxlcmF0aW9uWTogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FjY2VsZXJhdGlvblknLCAwKSxcclxuICAgICAgICAgICAgc2V0QWxsb3dEcmFnOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYWxsb3dEcmFnJywgdHJ1ZSksXHJcbiAgICAgICAgICAgIHNldEFsbG93R3Jhdml0eTogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FsbG93R3Jhdml0eScsIHRydWUpLFxyXG4gICAgICAgICAgICBzZXRBbGxvd1JvdGF0aW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYWxsb3dSb3RhdGlvbicsIHRydWUpLFxyXG4gICAgICAgICAgICBzZXRCb3VuY2VYOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYm91bmNlWCcsIDApLFxyXG4gICAgICAgICAgICBzZXRCb3VuY2VZOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYm91bmNlWScsIDApLFxyXG4gICAgICAgICAgICBzZXREcmFnWDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RyYWdYJywgMCksXHJcbiAgICAgICAgICAgIHNldERyYWdZOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZHJhZ1knLCAwKSxcclxuICAgICAgICAgICAgc2V0RW5hYmxlOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZW5hYmxlJywgdHJ1ZSksXHJcbiAgICAgICAgICAgIHNldEdyYXZpdHlYOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZ3Jhdml0eVgnLCAwKSxcclxuICAgICAgICAgICAgc2V0R3Jhdml0eVk6IEdldEZhc3RWYWx1ZShjb25maWcsICdncmF2aXR5WScsIDApLFxyXG4gICAgICAgICAgICBzZXRGcmljdGlvblg6IEdldEZhc3RWYWx1ZShjb25maWcsICdmcmljdGlvblgnLCAwKSxcclxuICAgICAgICAgICAgc2V0RnJpY3Rpb25ZOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZnJpY3Rpb25ZJywgMCksXHJcbiAgICAgICAgICAgIHNldFZlbG9jaXR5WDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3ZlbG9jaXR5WCcsIDApLFxyXG4gICAgICAgICAgICBzZXRWZWxvY2l0eVk6IEdldEZhc3RWYWx1ZShjb25maWcsICd2ZWxvY2l0eVknLCAwKSxcclxuICAgICAgICAgICAgc2V0QW5ndWxhclZlbG9jaXR5OiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYW5ndWxhclZlbG9jaXR5JywgMCksXHJcbiAgICAgICAgICAgIHNldEFuZ3VsYXJBY2NlbGVyYXRpb246IEdldEZhc3RWYWx1ZShjb25maWcsICdhbmd1bGFyQWNjZWxlcmF0aW9uJywgMCksXHJcbiAgICAgICAgICAgIHNldEFuZ3VsYXJEcmFnOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYW5ndWxhckRyYWcnLCAwKSxcclxuICAgICAgICAgICAgc2V0TWFzczogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ21hc3MnLCAxKSxcclxuICAgICAgICAgICAgc2V0SW1tb3ZhYmxlOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnaW1tb3ZhYmxlJywgZmFsc2UpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uZmlnID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEdyb3VwLmNhbGwodGhpcywgc2NlbmUsIGNoaWxkcmVuLCBjb25maWcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBVc2VkIGludGVybmFsbHkgYnkgUGhhc2VyIGJ1dCBpcyBhdmFpbGFibGUgZm9yIHlvdXIgb3duIGN1c3RvbSBjbGFzc2VzIHRvIHBvcHVsYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkdyb3VwI3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICdQaHlzaWNzR3JvdXAnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9ICdQaHlzaWNzR3JvdXAnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgYSBHYW1lIE9iamVjdCdzIEJvZHkgYW5kIGFzc2lnbnMgYGRlZmF1bHRzYC4gQ2FsbGVkIHdoZW4gYSBHcm91cCBtZW1iZXIgaXMgYWRkZWQgb3IgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cCNjcmVhdGVDYWxsYmFja0hhbmRsZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIGFkZGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVDYWxsYmFja0hhbmRsZXI6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICBpZiAoIWNoaWxkLmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLmVuYWJsZUJvZHkoY2hpbGQsIENPTlNULkRZTkFNSUNfQk9EWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9keSA9IGNoaWxkLmJvZHk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keVtrZXldKHRoaXMuZGVmYXVsdHNba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGVzIGEgR2FtZSBPYmplY3QncyBCb2R5LiBDYWxsZWQgd2hlbiBhIEdyb3VwIG1lbWJlciBpcyByZW1vdmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkdyb3VwI3JlbW92ZUNhbGxiYWNrSGFuZGxlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2FsbGJhY2tIYW5kbGVyOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNoaWxkLmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLmRpc2FibGVCb2R5KGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVsb2NpdHkgb2YgZWFjaCBHcm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXAjc2V0VmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgdmVsb2NpdHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCB2ZWxvY2l0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoZSB2ZWxvY2l0eSBpbmNyZW1lbnQuIFdoZW4gc2V0LCB0aGUgZmlyc3QgbWVtYmVyIHJlY2VpdmVzIHZlbG9jaXR5ICh4LCB5KSwgdGhlIHNlY29uZCAoeCArIHN0ZXAsIHkgKyBzdGVwKSwgYW5kIHNvIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cH0gVGhpcyBQaHlzaWNzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHk6IGZ1bmN0aW9uICh4LCB5LCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzdGVwID09PSB1bmRlZmluZWQpIHsgc3RlcCA9IDA7IH1cclxuXHJcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV0uYm9keS52ZWxvY2l0eS5zZXQoeCArIChpICogc3RlcCksIHkgKyAoaSAqIHN0ZXApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgdmVsb2NpdHkgb2YgZWFjaCBHcm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXAjc2V0VmVsb2NpdHlYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmVsb2NpdHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGUgdmVsb2NpdHkgaW5jcmVtZW50LiBXaGVuIHNldCwgdGhlIGZpcnN0IG1lbWJlciByZWNlaXZlcyB2ZWxvY2l0eSAoeCksIHRoZSBzZWNvbmQgKHggKyBzdGVwKSwgYW5kIHNvIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cH0gVGhpcyBQaHlzaWNzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHlYOiBmdW5jdGlvbiAodmFsdWUsIHN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN0ZXAgPT09IHVuZGVmaW5lZCkgeyBzdGVwID0gMDsgfVxyXG5cclxuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpdGVtc1tpXS5ib2R5LnZlbG9jaXR5LnggPSB2YWx1ZSArIChpICogc3RlcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCB2ZWxvY2l0eSBvZiBlYWNoIEdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cCNzZXRWZWxvY2l0eVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2ZWxvY2l0eSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoZSB2ZWxvY2l0eSBpbmNyZW1lbnQuIFdoZW4gc2V0LCB0aGUgZmlyc3QgbWVtYmVyIHJlY2VpdmVzIHZlbG9jaXR5ICh5KSwgdGhlIHNlY29uZCAoeSArIHN0ZXApLCBhbmQgc28gb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkdyb3VwfSBUaGlzIFBoeXNpY3MgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWZWxvY2l0eVk6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RlcCA9PT0gdW5kZWZpbmVkKSB7IHN0ZXAgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldLmJvZHkudmVsb2NpdHkueSA9IHZhbHVlICsgKGkgKiBzdGVwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBoeXNpY3NHcm91cDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/PhysicsGroup.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/SeparateX.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/SeparateX.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetOverlapX = __webpack_require__(/*! ./GetOverlapX */ \"./node_modules/phaser/src/physics/arcade/GetOverlapX.js\");\r\n\r\n/**\r\n * Separates two overlapping bodies on the X-axis (horizontally).\r\n *\r\n * Separation involves moving two overlapping bodies so they don't overlap anymore and adjusting their velocities based on their mass. This is a core part of collision detection.\r\n *\r\n * The bodies won't be separated if there is no horizontal overlap between them, if they are static, or if either one uses custom logic for its separation.\r\n *\r\n * @function Phaser.Physics.Arcade.SeparateX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to separate.\r\n * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to separate.\r\n * @param {boolean} overlapOnly - If `true`, the bodies will only have their overlap data set and no separation will take place.\r\n * @param {number} bias - A value to add to the delta value during overlap checking. Used to prevent sprite tunneling.\r\n *\r\n * @return {boolean} `true` if the two bodies overlap horizontally, otherwise `false`.\r\n */\r\nvar SeparateX = function (body1, body2, overlapOnly, bias)\r\n{\r\n    var overlap = GetOverlapX(body1, body2, overlapOnly, bias);\r\n\r\n    //  Can't separate two immovable bodies, or a body with its own custom separation logic\r\n    if (overlapOnly || overlap === 0 || (body1.immovable && body2.immovable) || body1.customSeparateX || body2.customSeparateX)\r\n    {\r\n        //  return true if there was some overlap, otherwise false\r\n        return (overlap !== 0) || (body1.embedded && body2.embedded);\r\n    }\r\n\r\n    //  Adjust their positions and velocities accordingly (if there was any overlap)\r\n    var v1 = body1.velocity.x;\r\n    var v2 = body2.velocity.x;\r\n\r\n    if (!body1.immovable && !body2.immovable)\r\n    {\r\n        overlap *= 0.5;\r\n\r\n        body1.x -= overlap;\r\n        body2.x += overlap;\r\n\r\n        var nv1 = Math.sqrt((v2 * v2 * body2.mass) / body1.mass) * ((v2 > 0) ? 1 : -1);\r\n        var nv2 = Math.sqrt((v1 * v1 * body1.mass) / body2.mass) * ((v1 > 0) ? 1 : -1);\r\n        var avg = (nv1 + nv2) * 0.5;\r\n\r\n        nv1 -= avg;\r\n        nv2 -= avg;\r\n\r\n        body1.velocity.x = avg + nv1 * body1.bounce.x;\r\n        body2.velocity.x = avg + nv2 * body2.bounce.x;\r\n    }\r\n    else if (!body1.immovable)\r\n    {\r\n        body1.x -= overlap;\r\n        body1.velocity.x = v2 - v1 * body1.bounce.x;\r\n\r\n        //  This is special case code that handles things like vertically moving platforms you can ride\r\n        if (body2.moves)\r\n        {\r\n            body1.y += (body2.y - body2.prev.y) * body2.friction.y;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        body2.x += overlap;\r\n        body2.velocity.x = v1 - v2 * body2.bounce.x;\r\n\r\n        //  This is special case code that handles things like vertically moving platforms you can ride\r\n        if (body1.moves)\r\n        {\r\n            body2.y += (body1.y - body1.prev.y) * body1.friction.y;\r\n        }\r\n    }\r\n\r\n    //  If we got this far then there WAS overlap, and separation is complete, so return true\r\n    return true;\r\n};\r\n\r\nmodule.exports = SeparateX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TZXBhcmF0ZVguanM/YTJiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsOEVBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TZXBhcmF0ZVguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRPdmVybGFwWCA9IHJlcXVpcmUoJy4vR2V0T3ZlcmxhcFgnKTtcclxuXHJcbi8qKlxyXG4gKiBTZXBhcmF0ZXMgdHdvIG92ZXJsYXBwaW5nIGJvZGllcyBvbiB0aGUgWC1heGlzIChob3Jpem9udGFsbHkpLlxyXG4gKlxyXG4gKiBTZXBhcmF0aW9uIGludm9sdmVzIG1vdmluZyB0d28gb3ZlcmxhcHBpbmcgYm9kaWVzIHNvIHRoZXkgZG9uJ3Qgb3ZlcmxhcCBhbnltb3JlIGFuZCBhZGp1c3RpbmcgdGhlaXIgdmVsb2NpdGllcyBiYXNlZCBvbiB0aGVpciBtYXNzLiBUaGlzIGlzIGEgY29yZSBwYXJ0IG9mIGNvbGxpc2lvbiBkZXRlY3Rpb24uXHJcbiAqXHJcbiAqIFRoZSBib2RpZXMgd29uJ3QgYmUgc2VwYXJhdGVkIGlmIHRoZXJlIGlzIG5vIGhvcml6b250YWwgb3ZlcmxhcCBiZXR3ZWVuIHRoZW0sIGlmIHRoZXkgYXJlIHN0YXRpYywgb3IgaWYgZWl0aGVyIG9uZSB1c2VzIGN1c3RvbSBsb2dpYyBmb3IgaXRzIHNlcGFyYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU2VwYXJhdGVYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5MSAtIFRoZSBmaXJzdCBCb2R5IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5MiAtIFRoZSBzZWNvbmQgQm9keSB0byBzZXBhcmF0ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBvdmVybGFwT25seSAtIElmIGB0cnVlYCwgdGhlIGJvZGllcyB3aWxsIG9ubHkgaGF2ZSB0aGVpciBvdmVybGFwIGRhdGEgc2V0IGFuZCBubyBzZXBhcmF0aW9uIHdpbGwgdGFrZSBwbGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGJpYXMgLSBBIHZhbHVlIHRvIGFkZCB0byB0aGUgZGVsdGEgdmFsdWUgZHVyaW5nIG92ZXJsYXAgY2hlY2tpbmcuIFVzZWQgdG8gcHJldmVudCBzcHJpdGUgdHVubmVsaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBib2RpZXMgb3ZlcmxhcCBob3Jpem9udGFsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFNlcGFyYXRlWCA9IGZ1bmN0aW9uIChib2R5MSwgYm9keTIsIG92ZXJsYXBPbmx5LCBiaWFzKVxyXG57XHJcbiAgICB2YXIgb3ZlcmxhcCA9IEdldE92ZXJsYXBYKGJvZHkxLCBib2R5Miwgb3ZlcmxhcE9ubHksIGJpYXMpO1xyXG5cclxuICAgIC8vICBDYW4ndCBzZXBhcmF0ZSB0d28gaW1tb3ZhYmxlIGJvZGllcywgb3IgYSBib2R5IHdpdGggaXRzIG93biBjdXN0b20gc2VwYXJhdGlvbiBsb2dpY1xyXG4gICAgaWYgKG92ZXJsYXBPbmx5IHx8IG92ZXJsYXAgPT09IDAgfHwgKGJvZHkxLmltbW92YWJsZSAmJiBib2R5Mi5pbW1vdmFibGUpIHx8IGJvZHkxLmN1c3RvbVNlcGFyYXRlWCB8fCBib2R5Mi5jdXN0b21TZXBhcmF0ZVgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBzb21lIG92ZXJsYXAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgIHJldHVybiAob3ZlcmxhcCAhPT0gMCkgfHwgKGJvZHkxLmVtYmVkZGVkICYmIGJvZHkyLmVtYmVkZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQWRqdXN0IHRoZWlyIHBvc2l0aW9ucyBhbmQgdmVsb2NpdGllcyBhY2NvcmRpbmdseSAoaWYgdGhlcmUgd2FzIGFueSBvdmVybGFwKVxyXG4gICAgdmFyIHYxID0gYm9keTEudmVsb2NpdHkueDtcclxuICAgIHZhciB2MiA9IGJvZHkyLnZlbG9jaXR5Lng7XHJcblxyXG4gICAgaWYgKCFib2R5MS5pbW1vdmFibGUgJiYgIWJvZHkyLmltbW92YWJsZSlcclxuICAgIHtcclxuICAgICAgICBvdmVybGFwICo9IDAuNTtcclxuXHJcbiAgICAgICAgYm9keTEueCAtPSBvdmVybGFwO1xyXG4gICAgICAgIGJvZHkyLnggKz0gb3ZlcmxhcDtcclxuXHJcbiAgICAgICAgdmFyIG52MSA9IE1hdGguc3FydCgodjIgKiB2MiAqIGJvZHkyLm1hc3MpIC8gYm9keTEubWFzcykgKiAoKHYyID4gMCkgPyAxIDogLTEpO1xyXG4gICAgICAgIHZhciBudjIgPSBNYXRoLnNxcnQoKHYxICogdjEgKiBib2R5MS5tYXNzKSAvIGJvZHkyLm1hc3MpICogKCh2MSA+IDApID8gMSA6IC0xKTtcclxuICAgICAgICB2YXIgYXZnID0gKG52MSArIG52MikgKiAwLjU7XHJcblxyXG4gICAgICAgIG52MSAtPSBhdmc7XHJcbiAgICAgICAgbnYyIC09IGF2ZztcclxuXHJcbiAgICAgICAgYm9keTEudmVsb2NpdHkueCA9IGF2ZyArIG52MSAqIGJvZHkxLmJvdW5jZS54O1xyXG4gICAgICAgIGJvZHkyLnZlbG9jaXR5LnggPSBhdmcgKyBudjIgKiBib2R5Mi5ib3VuY2UueDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFib2R5MS5pbW1vdmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgYm9keTEueCAtPSBvdmVybGFwO1xyXG4gICAgICAgIGJvZHkxLnZlbG9jaXR5LnggPSB2MiAtIHYxICogYm9keTEuYm91bmNlLng7XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGlzIHNwZWNpYWwgY2FzZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB2ZXJ0aWNhbGx5IG1vdmluZyBwbGF0Zm9ybXMgeW91IGNhbiByaWRlXHJcbiAgICAgICAgaWYgKGJvZHkyLm1vdmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keTEueSArPSAoYm9keTIueSAtIGJvZHkyLnByZXYueSkgKiBib2R5Mi5mcmljdGlvbi55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBib2R5Mi54ICs9IG92ZXJsYXA7XHJcbiAgICAgICAgYm9keTIudmVsb2NpdHkueCA9IHYxIC0gdjIgKiBib2R5Mi5ib3VuY2UueDtcclxuXHJcbiAgICAgICAgLy8gIFRoaXMgaXMgc3BlY2lhbCBjYXNlIGNvZGUgdGhhdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHZlcnRpY2FsbHkgbW92aW5nIHBsYXRmb3JtcyB5b3UgY2FuIHJpZGVcclxuICAgICAgICBpZiAoYm9keTEubW92ZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5Mi55ICs9IChib2R5MS55IC0gYm9keTEucHJldi55KSAqIGJvZHkxLmZyaWN0aW9uLnk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBJZiB3ZSBnb3QgdGhpcyBmYXIgdGhlbiB0aGVyZSBXQVMgb3ZlcmxhcCwgYW5kIHNlcGFyYXRpb24gaXMgY29tcGxldGUsIHNvIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VwYXJhdGVYO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/SeparateX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/SeparateY.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/SeparateY.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetOverlapY = __webpack_require__(/*! ./GetOverlapY */ \"./node_modules/phaser/src/physics/arcade/GetOverlapY.js\");\r\n\r\n/**\r\n * Separates two overlapping bodies on the Y-axis (vertically).\r\n *\r\n * Separation involves moving two overlapping bodies so they don't overlap anymore and adjusting their velocities based on their mass. This is a core part of collision detection.\r\n *\r\n * The bodies won't be separated if there is no vertical overlap between them, if they are static, or if either one uses custom logic for its separation.\r\n *\r\n * @function Phaser.Physics.Arcade.SeparateY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to separate.\r\n * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to separate.\r\n * @param {boolean} overlapOnly - If `true`, the bodies will only have their overlap data set and no separation will take place.\r\n * @param {number} bias - A value to add to the delta value during overlap checking. Used to prevent sprite tunneling.\r\n *\r\n * @return {boolean} `true` if the two bodies overlap vertically, otherwise `false`.\r\n */\r\nvar SeparateY = function (body1, body2, overlapOnly, bias)\r\n{\r\n    var overlap = GetOverlapY(body1, body2, overlapOnly, bias);\r\n\r\n    //  Can't separate two immovable bodies, or a body with its own custom separation logic\r\n    if (overlapOnly || overlap === 0 || (body1.immovable && body2.immovable) || body1.customSeparateY || body2.customSeparateY)\r\n    {\r\n        //  return true if there was some overlap, otherwise false\r\n        return (overlap !== 0) || (body1.embedded && body2.embedded);\r\n    }\r\n\r\n    //  Adjust their positions and velocities accordingly (if there was any overlap)\r\n    var v1 = body1.velocity.y;\r\n    var v2 = body2.velocity.y;\r\n\r\n    if (!body1.immovable && !body2.immovable)\r\n    {\r\n        overlap *= 0.5;\r\n\r\n        body1.y -= overlap;\r\n        body2.y += overlap;\r\n\r\n        var nv1 = Math.sqrt((v2 * v2 * body2.mass) / body1.mass) * ((v2 > 0) ? 1 : -1);\r\n        var nv2 = Math.sqrt((v1 * v1 * body1.mass) / body2.mass) * ((v1 > 0) ? 1 : -1);\r\n        var avg = (nv1 + nv2) * 0.5;\r\n\r\n        nv1 -= avg;\r\n        nv2 -= avg;\r\n\r\n        body1.velocity.y = avg + nv1 * body1.bounce.y;\r\n        body2.velocity.y = avg + nv2 * body2.bounce.y;\r\n    }\r\n    else if (!body1.immovable)\r\n    {\r\n        body1.y -= overlap;\r\n        body1.velocity.y = v2 - v1 * body1.bounce.y;\r\n\r\n        //  This is special case code that handles things like horizontal moving platforms you can ride\r\n        if (body2.moves)\r\n        {\r\n            body1.x += (body2.x - body2.prev.x) * body2.friction.x;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        body2.y += overlap;\r\n        body2.velocity.y = v1 - v2 * body2.bounce.y;\r\n\r\n        //  This is special case code that handles things like horizontal moving platforms you can ride\r\n        if (body1.moves)\r\n        {\r\n            body2.x += (body1.x - body1.prev.x) * body1.friction.x;\r\n        }\r\n    }\r\n\r\n    //  If we got this far then there WAS overlap, and separation is complete, so return true\r\n    return true;\r\n};\r\n\r\nmodule.exports = SeparateY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TZXBhcmF0ZVkuanM/ZWUxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsOEVBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TZXBhcmF0ZVkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRPdmVybGFwWSA9IHJlcXVpcmUoJy4vR2V0T3ZlcmxhcFknKTtcclxuXHJcbi8qKlxyXG4gKiBTZXBhcmF0ZXMgdHdvIG92ZXJsYXBwaW5nIGJvZGllcyBvbiB0aGUgWS1heGlzICh2ZXJ0aWNhbGx5KS5cclxuICpcclxuICogU2VwYXJhdGlvbiBpbnZvbHZlcyBtb3ZpbmcgdHdvIG92ZXJsYXBwaW5nIGJvZGllcyBzbyB0aGV5IGRvbid0IG92ZXJsYXAgYW55bW9yZSBhbmQgYWRqdXN0aW5nIHRoZWlyIHZlbG9jaXRpZXMgYmFzZWQgb24gdGhlaXIgbWFzcy4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiBjb2xsaXNpb24gZGV0ZWN0aW9uLlxyXG4gKlxyXG4gKiBUaGUgYm9kaWVzIHdvbid0IGJlIHNlcGFyYXRlZCBpZiB0aGVyZSBpcyBubyB2ZXJ0aWNhbCBvdmVybGFwIGJldHdlZW4gdGhlbSwgaWYgdGhleSBhcmUgc3RhdGljLCBvciBpZiBlaXRoZXIgb25lIHVzZXMgY3VzdG9tIGxvZ2ljIGZvciBpdHMgc2VwYXJhdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TZXBhcmF0ZVlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IEJvZHkgdG8gc2VwYXJhdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkyIC0gVGhlIHNlY29uZCBCb2R5IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJsYXBPbmx5IC0gSWYgYHRydWVgLCB0aGUgYm9kaWVzIHdpbGwgb25seSBoYXZlIHRoZWlyIG92ZXJsYXAgZGF0YSBzZXQgYW5kIG5vIHNlcGFyYXRpb24gd2lsbCB0YWtlIHBsYWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYmlhcyAtIEEgdmFsdWUgdG8gYWRkIHRvIHRoZSBkZWx0YSB2YWx1ZSBkdXJpbmcgb3ZlcmxhcCBjaGVja2luZy4gVXNlZCB0byBwcmV2ZW50IHNwcml0ZSB0dW5uZWxpbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIGJvZGllcyBvdmVybGFwIHZlcnRpY2FsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFNlcGFyYXRlWSA9IGZ1bmN0aW9uIChib2R5MSwgYm9keTIsIG92ZXJsYXBPbmx5LCBiaWFzKVxyXG57XHJcbiAgICB2YXIgb3ZlcmxhcCA9IEdldE92ZXJsYXBZKGJvZHkxLCBib2R5Miwgb3ZlcmxhcE9ubHksIGJpYXMpO1xyXG5cclxuICAgIC8vICBDYW4ndCBzZXBhcmF0ZSB0d28gaW1tb3ZhYmxlIGJvZGllcywgb3IgYSBib2R5IHdpdGggaXRzIG93biBjdXN0b20gc2VwYXJhdGlvbiBsb2dpY1xyXG4gICAgaWYgKG92ZXJsYXBPbmx5IHx8IG92ZXJsYXAgPT09IDAgfHwgKGJvZHkxLmltbW92YWJsZSAmJiBib2R5Mi5pbW1vdmFibGUpIHx8IGJvZHkxLmN1c3RvbVNlcGFyYXRlWSB8fCBib2R5Mi5jdXN0b21TZXBhcmF0ZVkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBzb21lIG92ZXJsYXAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgIHJldHVybiAob3ZlcmxhcCAhPT0gMCkgfHwgKGJvZHkxLmVtYmVkZGVkICYmIGJvZHkyLmVtYmVkZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQWRqdXN0IHRoZWlyIHBvc2l0aW9ucyBhbmQgdmVsb2NpdGllcyBhY2NvcmRpbmdseSAoaWYgdGhlcmUgd2FzIGFueSBvdmVybGFwKVxyXG4gICAgdmFyIHYxID0gYm9keTEudmVsb2NpdHkueTtcclxuICAgIHZhciB2MiA9IGJvZHkyLnZlbG9jaXR5Lnk7XHJcblxyXG4gICAgaWYgKCFib2R5MS5pbW1vdmFibGUgJiYgIWJvZHkyLmltbW92YWJsZSlcclxuICAgIHtcclxuICAgICAgICBvdmVybGFwICo9IDAuNTtcclxuXHJcbiAgICAgICAgYm9keTEueSAtPSBvdmVybGFwO1xyXG4gICAgICAgIGJvZHkyLnkgKz0gb3ZlcmxhcDtcclxuXHJcbiAgICAgICAgdmFyIG52MSA9IE1hdGguc3FydCgodjIgKiB2MiAqIGJvZHkyLm1hc3MpIC8gYm9keTEubWFzcykgKiAoKHYyID4gMCkgPyAxIDogLTEpO1xyXG4gICAgICAgIHZhciBudjIgPSBNYXRoLnNxcnQoKHYxICogdjEgKiBib2R5MS5tYXNzKSAvIGJvZHkyLm1hc3MpICogKCh2MSA+IDApID8gMSA6IC0xKTtcclxuICAgICAgICB2YXIgYXZnID0gKG52MSArIG52MikgKiAwLjU7XHJcblxyXG4gICAgICAgIG52MSAtPSBhdmc7XHJcbiAgICAgICAgbnYyIC09IGF2ZztcclxuXHJcbiAgICAgICAgYm9keTEudmVsb2NpdHkueSA9IGF2ZyArIG52MSAqIGJvZHkxLmJvdW5jZS55O1xyXG4gICAgICAgIGJvZHkyLnZlbG9jaXR5LnkgPSBhdmcgKyBudjIgKiBib2R5Mi5ib3VuY2UueTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFib2R5MS5pbW1vdmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgYm9keTEueSAtPSBvdmVybGFwO1xyXG4gICAgICAgIGJvZHkxLnZlbG9jaXR5LnkgPSB2MiAtIHYxICogYm9keTEuYm91bmNlLnk7XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGlzIHNwZWNpYWwgY2FzZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBob3Jpem9udGFsIG1vdmluZyBwbGF0Zm9ybXMgeW91IGNhbiByaWRlXHJcbiAgICAgICAgaWYgKGJvZHkyLm1vdmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keTEueCArPSAoYm9keTIueCAtIGJvZHkyLnByZXYueCkgKiBib2R5Mi5mcmljdGlvbi54O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBib2R5Mi55ICs9IG92ZXJsYXA7XHJcbiAgICAgICAgYm9keTIudmVsb2NpdHkueSA9IHYxIC0gdjIgKiBib2R5Mi5ib3VuY2UueTtcclxuXHJcbiAgICAgICAgLy8gIFRoaXMgaXMgc3BlY2lhbCBjYXNlIGNvZGUgdGhhdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGhvcml6b250YWwgbW92aW5nIHBsYXRmb3JtcyB5b3UgY2FuIHJpZGVcclxuICAgICAgICBpZiAoYm9keTEubW92ZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5Mi54ICs9IChib2R5MS54IC0gYm9keTEucHJldi54KSAqIGJvZHkxLmZyaWN0aW9uLng7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBJZiB3ZSBnb3QgdGhpcyBmYXIgdGhlbiB0aGVyZSBXQVMgb3ZlcmxhcCwgYW5kIHNlcGFyYXRpb24gaXMgY29tcGxldGUsIHNvIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VwYXJhdGVZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/SeparateY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/StaticBody.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/StaticBody.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CircleContains = __webpack_require__(/*! ../../geom/circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Static Arcade Physics Body.\r\n *\r\n * A Static Body never moves, and isn't automatically synchronized with its parent Game Object.\r\n * That means if you make any change to the parent's origin, position, or scale after creating or adding the body, you'll need to update the Body manually.\r\n *\r\n * A Static Body can collide with other Bodies, but is never moved by collisions.\r\n *\r\n * Its dynamic counterpart is {@link Phaser.Physics.Arcade.Body}.\r\n *\r\n * @class StaticBody\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The Arcade Physics simulation this Static Body belongs to.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object this Static Body belongs to.\r\n */\r\nvar StaticBody = new Class({\r\n\r\n    initialize:\r\n\r\n    function StaticBody (world, gameObject)\r\n    {\r\n        var width = (gameObject.width) ? gameObject.width : 64;\r\n        var height = (gameObject.height) ? gameObject.height : 64;\r\n\r\n        /**\r\n         * The Arcade Physics simulation this Static Body belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The Game Object this Static Body belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#gameObject\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.gameObject = gameObject;\r\n\r\n        /**\r\n         * Whether the Static Body's boundary is drawn to the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#debugShowBody\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugShowBody = world.defaults.debugShowStaticBody;\r\n\r\n        /**\r\n         * The color of this Static Body on the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#debugBodyColor\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugBodyColor = world.defaults.staticBodyDebugColor;\r\n\r\n        /**\r\n         * Whether this Static Body is updated by the physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#enable\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enable = true;\r\n\r\n        /**\r\n         * Whether this Static Body's boundary is circular (`true`) or rectangular (`false`).\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#isCircle\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isCircle = false;\r\n\r\n        /**\r\n         * If this Static Body is circular, this is the unscaled radius of the Static Body's boundary, as set by {@link #setCircle}, in source pixels.\r\n         * The true radius is equal to `halfWidth`.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#radius\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.radius = 0;\r\n\r\n        /**\r\n         * The offset of this Static Body's actual position from any updated position.\r\n         *\r\n         * Unlike a dynamic Body, a Static Body does not follow its Game Object. As such, this offset is only applied when resizing the Static Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#offset\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = new Vector2();\r\n\r\n        /**\r\n         * The position of this Static Body within the simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#position\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector2(gameObject.x - gameObject.displayOriginX, gameObject.y - gameObject.displayOriginY);\r\n\r\n        /**\r\n         * The width of the Static Body's boundary, in pixels.\r\n         * If the Static Body is circular, this is also the Static Body's diameter.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the Static Body's boundary, in pixels.\r\n         * If the Static Body is circular, this is also the Static Body's diameter.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n\r\n        /**\r\n         * Half the Static Body's width, in pixels.\r\n         * If the Static Body is circular, this is also the Static Body's radius.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#halfWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfWidth = Math.abs(this.width / 2);\r\n\r\n        /**\r\n         * Half the Static Body's height, in pixels.\r\n         * If the Static Body is circular, this is also the Static Body's radius.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#halfHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfHeight = Math.abs(this.height / 2);\r\n\r\n        /**\r\n         * The center of the Static Body's boundary.\r\n         * This is the midpoint of its `position` (top-left corner) and its bottom-right corner.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#center\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.center = new Vector2(gameObject.x + this.halfWidth, gameObject.y + this.halfHeight);\r\n\r\n        /**\r\n         * A constant zero velocity used by the Arcade Physics simulation for calculations.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#velocity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.velocity = Vector2.ZERO;\r\n\r\n        /**\r\n         * A constant `false` value expected by the Arcade Physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#allowGravity\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.allowGravity = false;\r\n\r\n        /**\r\n         * Gravitational force applied specifically to this Body. Values are in pixels per second squared. Always zero for a Static Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#gravity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.gravity = Vector2.ZERO;\r\n\r\n        /**\r\n         * Rebound, or restitution, following a collision, relative to 1. Always zero for a Static Body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#bounce\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.bounce = Vector2.ZERO;\r\n\r\n        //  If true this Body will dispatch events\r\n\r\n        /**\r\n         * Whether the simulation emits a `worldbounds` event when this StaticBody collides with the world boundary.\r\n         * Always false for a Static Body. (Static Bodies never collide with the world boundary and never trigger a `worldbounds` event.)\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#onWorldBounds\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.onWorldBounds = false;\r\n\r\n        /**\r\n         * Whether the simulation emits a `collide` event when this StaticBody collides with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#onCollide\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.onCollide = false;\r\n\r\n        /**\r\n         * Whether the simulation emits an `overlap` event when this StaticBody overlaps with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#onOverlap\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.onOverlap = false;\r\n\r\n        /**\r\n         * The StaticBody's inertia, relative to a default unit (1). With `bounce`, this affects the exchange of momentum (velocities) during collisions.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#mass\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.mass = 1;\r\n\r\n        /**\r\n         * Whether this object can be moved by collisions with another body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#immovable\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.immovable = true;\r\n\r\n        /**\r\n         * A flag disabling the default horizontal separation of colliding bodies. Pass your own `collideHandler` to the collider.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#customSeparateX\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.customSeparateX = false;\r\n\r\n        /**\r\n         * A flag disabling the default vertical separation of colliding bodies. Pass your own `collideHandler` to the collider.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#customSeparateY\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.customSeparateY = false;\r\n\r\n        /**\r\n         * The amount of horizontal overlap (before separation), if this Body is colliding with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#overlapX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapX = 0;\r\n\r\n        /**\r\n         * The amount of vertical overlap (before separation), if this Body is colliding with another.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#overlapY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapY = 0;\r\n\r\n        /**\r\n         * The amount of overlap (before separation), if this StaticBody is circular and colliding with another circular body.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#overlapR\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.overlapR = 0;\r\n\r\n        /**\r\n         * Whether this StaticBody has ever overlapped with another while both were not moving.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#embedded\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.embedded = false;\r\n\r\n        /**\r\n         * Whether this StaticBody interacts with the world boundary.\r\n         * Always false for a Static Body. (Static Bodies never collide with the world boundary.)\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#collideWorldBounds\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.collideWorldBounds = false;\r\n\r\n        /**\r\n         * Whether this StaticBody is checked for collisions and for which directions. You can set `checkCollision.none = false` to disable collision checks.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#checkCollision\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.checkCollision = { none: false, up: true, down: true, left: true, right: true };\r\n\r\n        /**\r\n         * Whether this StaticBody has ever collided with another body and in which direction.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#touching\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.touching = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * Whether this StaticBody was colliding with another body during the last step or any previous step, and in which direction.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#wasTouching\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.wasTouching = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * Whether this StaticBody has ever collided with a tile or the world boundary.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#blocked\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeBodyCollision}\r\n         * @since 3.0.0\r\n         */\r\n        this.blocked = { none: true, up: false, down: false, left: false, right: false };\r\n\r\n        /**\r\n         * The StaticBody's physics type (static by default).\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#physicsType\r\n         * @type {integer}\r\n         * @default Phaser.Physics.Arcade.STATIC_BODY\r\n         * @since 3.0.0\r\n         */\r\n        this.physicsType = CONST.STATIC_BODY;\r\n\r\n        /**\r\n         * The calculated change in the Body's horizontal position during the current step.\r\n         * For a static body this is always zero.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#_dx\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.10.0\r\n         */\r\n        this._dx = 0;\r\n\r\n        /**\r\n         * The calculated change in the Body's vertical position during the current step.\r\n         * For a static body this is always zero.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticBody#_dy\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.10.0\r\n         */\r\n        this._dy = 0;\r\n    },\r\n\r\n    /**\r\n     * Changes the Game Object this Body is bound to.\r\n     * First it removes its reference from the old Game Object, then sets the new one.\r\n     * You can optionally update the position and dimensions of this Body to reflect that of the new Game Object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#setGameObject\r\n     * @since 3.1.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The new Game Object that will own this Body.\r\n     * @param {boolean} [update=true] - Reposition and resize this Body to match the new Game Object?\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     *\r\n     * @see Phaser.Physics.Arcade.StaticBody#updateFromGameObject\r\n     */\r\n    setGameObject: function (gameObject, update)\r\n    {\r\n        if (gameObject && gameObject !== this.gameObject)\r\n        {\r\n            //  Remove this body from the old game object\r\n            this.gameObject.body = null;\r\n\r\n            gameObject.body = this;\r\n\r\n            //  Update our reference\r\n            this.gameObject = gameObject;\r\n        }\r\n\r\n        if (update)\r\n        {\r\n            this.updateFromGameObject();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates this Static Body so that its position and dimensions are updated\r\n     * based on the current Game Object it is bound to.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#updateFromGameObject\r\n     * @since 3.1.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    updateFromGameObject: function ()\r\n    {\r\n        this.world.staticTree.remove(this);\r\n\r\n        var gameObject = this.gameObject;\r\n\r\n        gameObject.getTopLeft(this.position);\r\n\r\n        this.width = gameObject.displayWidth;\r\n        this.height = gameObject.displayHeight;\r\n\r\n        this.halfWidth = Math.abs(this.width / 2);\r\n        this.halfHeight = Math.abs(this.height / 2);\r\n\r\n        this.center.set(this.position.x + this.halfWidth, this.position.y + this.halfHeight);\r\n\r\n        this.world.staticTree.insert(this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the offset of the body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#setOffset\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} x - The horizontal offset of the Body from the Game Object's center.\r\n     * @param {number} y - The vertical offset of the Body from the Game Object's center.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    setOffset: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.world.staticTree.remove(this);\r\n\r\n        this.position.x -= this.offset.x;\r\n        this.position.y -= this.offset.y;\r\n\r\n        this.offset.set(x, y);\r\n\r\n        this.position.x += this.offset.x;\r\n        this.position.y += this.offset.y;\r\n\r\n        this.updateCenter();\r\n\r\n        this.world.staticTree.insert(this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the size of the body.\r\n     * Resets the width and height to match current frame, if no width and height provided and a frame is found.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [width] - The width of the Body in pixels. Cannot be zero. If not given, and the parent Game Object has a frame, it will use the frame width.\r\n     * @param {integer} [height] - The height of the Body in pixels. Cannot be zero. If not given, and the parent Game Object has a frame, it will use the frame height.\r\n     * @param {boolean} [center=true] - Modify the Body's `offset`, placing the Body's center on its Game Object's center. Only works if the Game Object has the `getCenter` method.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    setSize: function (width, height, center)\r\n    {\r\n        if (center === undefined) { center = true; }\r\n\r\n        var gameObject = this.gameObject;\r\n\r\n        if (!width && gameObject.frame)\r\n        {\r\n            width = gameObject.frame.realWidth;\r\n        }\r\n\r\n        if (!height && gameObject.frame)\r\n        {\r\n            height = gameObject.frame.realHeight;\r\n        }\r\n\r\n        this.world.staticTree.remove(this);\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        this.halfWidth = Math.floor(width / 2);\r\n        this.halfHeight = Math.floor(height / 2);\r\n\r\n        if (center && gameObject.getCenter)\r\n        {\r\n            var ox = gameObject.displayWidth / 2;\r\n            var oy = gameObject.displayHeight / 2;\r\n\r\n            this.position.x -= this.offset.x;\r\n            this.position.y -= this.offset.y;\r\n\r\n            this.offset.set(ox - this.halfWidth, oy - this.halfHeight);\r\n\r\n            this.position.x += this.offset.x;\r\n            this.position.y += this.offset.y;\r\n        }\r\n\r\n        this.updateCenter();\r\n\r\n        this.isCircle = false;\r\n        this.radius = 0;\r\n\r\n        this.world.staticTree.insert(this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this Static Body to have a circular body and sets its sizes and position.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#setCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the StaticBody, in pixels.\r\n     * @param {number} [offsetX] - The horizontal offset of the StaticBody from its Game Object, in pixels.\r\n     * @param {number} [offsetY] - The vertical offset of the StaticBody from its Game Object, in pixels.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    setCircle: function (radius, offsetX, offsetY)\r\n    {\r\n        if (offsetX === undefined) { offsetX = this.offset.x; }\r\n        if (offsetY === undefined) { offsetY = this.offset.y; }\r\n\r\n        if (radius > 0)\r\n        {\r\n            this.world.staticTree.remove(this);\r\n\r\n            this.isCircle = true;\r\n\r\n            this.radius = radius;\r\n\r\n            this.width = radius * 2;\r\n            this.height = radius * 2;\r\n\r\n            this.halfWidth = Math.floor(this.width / 2);\r\n            this.halfHeight = Math.floor(this.height / 2);\r\n\r\n            this.offset.set(offsetX, offsetY);\r\n\r\n            this.updateCenter();\r\n\r\n            this.world.staticTree.insert(this);\r\n        }\r\n        else\r\n        {\r\n            this.isCircle = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the StaticBody's `center` from its `position` and dimensions.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#updateCenter\r\n     * @since 3.0.0\r\n     */\r\n    updateCenter: function ()\r\n    {\r\n        this.center.set(this.position.x + this.halfWidth, this.position.y + this.halfHeight);\r\n    },\r\n\r\n    /**\r\n     * Resets this Body to the given coordinates. Also positions its parent Game Object to the same coordinates.\r\n     * Similar to `updateFromGameObject`, but doesn't modify the Body's dimensions.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x] - The x coordinate to reset the body to. If not given will use the parent Game Object's coordinate.\r\n     * @param {number} [y] - The y coordinate to reset the body to. If not given will use the parent Game Object's coordinate.\r\n     */\r\n    reset: function (x, y)\r\n    {\r\n        var gameObject = this.gameObject;\r\n\r\n        if (x === undefined) { x = gameObject.x; }\r\n        if (y === undefined) { y = gameObject.y; }\r\n\r\n        this.world.staticTree.remove(this);\r\n\r\n        gameObject.setPosition(x, y);\r\n\r\n        gameObject.getTopLeft(this.position);\r\n\r\n        this.updateCenter();\r\n\r\n        this.world.staticTree.insert(this);\r\n    },\r\n\r\n    /**\r\n     * NOOP function. A Static Body cannot be stopped.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    stop: function ()\r\n    {\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the x and y coordinates of the top left and bottom right points of the StaticBody.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeBodyBounds} obj - The object which will hold the coordinates of the bounds.\r\n     *\r\n     * @return {Phaser.Types.Physics.Arcade.ArcadeBodyBounds} The same object that was passed with `x`, `y`, `right` and `bottom` values matching the respective values of the StaticBody.\r\n     */\r\n    getBounds: function (obj)\r\n    {\r\n        obj.x = this.x;\r\n        obj.y = this.y;\r\n        obj.right = this.right;\r\n        obj.bottom = this.bottom;\r\n\r\n        return obj;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if a given x,y coordinate is colliding with this Static Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#hitTest\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to check against this body.\r\n     * @param {number} y - The y coordinate to check against this body.\r\n     *\r\n     * @return {boolean} `true` if the given coordinate lies within this body, otherwise `false`.\r\n     */\r\n    hitTest: function (x, y)\r\n    {\r\n        return (this.isCircle) ? CircleContains(this, x, y) : RectangleContains(this, x, y);\r\n    },\r\n\r\n    /**\r\n     * NOOP\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#postUpdate\r\n     * @since 3.12.0\r\n     */\r\n    postUpdate: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * The absolute (non-negative) change in this StaticBody's horizontal position from the previous step. Always zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#deltaAbsX\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} Always zero for a Static Body.\r\n     */\r\n    deltaAbsX: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * The absolute (non-negative) change in this StaticBody's vertical position from the previous step. Always zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#deltaAbsY\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} Always zero for a Static Body.\r\n     */\r\n    deltaAbsY: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * The change in this StaticBody's horizontal position from the previous step. Always zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#deltaX\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The change in this StaticBody's velocity from the previous step. Always zero.\r\n     */\r\n    deltaX: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * The change in this StaticBody's vertical position from the previous step. Always zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#deltaY\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The change in this StaticBody's velocity from the previous step. Always zero.\r\n     */\r\n    deltaY: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * The change in this StaticBody's rotation from the previous step. Always zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#deltaZ\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The change in this StaticBody's rotation from the previous step. Always zero.\r\n     */\r\n    deltaZ: function ()\r\n    {\r\n        return 0;\r\n    },\r\n\r\n    /**\r\n     * Disables this Body and marks it for destruction during the next step.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.enable = false;\r\n\r\n        this.world.pendingDestroy.set(this);\r\n    },\r\n\r\n    /**\r\n     * Draws a graphical representation of the StaticBody for visual debugging purposes.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#drawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphic - The Graphics object to use for the debug drawing of the StaticBody.\r\n     */\r\n    drawDebug: function (graphic)\r\n    {\r\n        var pos = this.position;\r\n\r\n        var x = pos.x + this.halfWidth;\r\n        var y = pos.y + this.halfHeight;\r\n\r\n        if (this.debugShowBody)\r\n        {\r\n            graphic.lineStyle(graphic.defaultStrokeWidth, this.debugBodyColor, 1);\r\n\r\n            if (this.isCircle)\r\n            {\r\n                graphic.strokeCircle(x, y, this.width / 2);\r\n            }\r\n            else\r\n            {\r\n                graphic.strokeRect(pos.x, pos.y, this.width, this.height);\r\n            }\r\n\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Indicates whether the StaticBody is going to be showing a debug visualization during postUpdate.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#willDrawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether or not the StaticBody is going to show the debug visualization during postUpdate.\r\n     */\r\n    willDrawDebug: function ()\r\n    {\r\n        return this.debugShowBody;\r\n    },\r\n\r\n    /**\r\n     * Sets the Mass of the StaticBody. Will set the Mass to 0.1 if the value passed is less than or equal to zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticBody#setMass\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The value to set the Mass to. Values of zero or less are changed to 0.1.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticBody} This Static Body object.\r\n     */\r\n    setMass: function (value)\r\n    {\r\n        if (value <= 0)\r\n        {\r\n            //  Causes havoc otherwise\r\n            value = 0.1;\r\n        }\r\n\r\n        this.mass = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The x coordinate of the StaticBody.\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.world.staticTree.remove(this);\r\n\r\n            this.position.x = value;\r\n\r\n            this.world.staticTree.insert(this);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y coordinate of the StaticBody.\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.world.staticTree.remove(this);\r\n\r\n            this.position.y = value;\r\n\r\n            this.world.staticTree.insert(this);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Returns the left-most x coordinate of the area of the StaticBody.\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#left\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    left: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The right-most x coordinate of the area of the StaticBody.\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#right\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    right: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.x + this.width;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The highest y coordinate of the area of the StaticBody.\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#top\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    top: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The lowest y coordinate of the area of the StaticBody. (y + height)\r\n     *\r\n     * @name Phaser.Physics.Arcade.StaticBody#bottom\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    bottom: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.position.y + this.height;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = StaticBody;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TdGF0aWNCb2R5LmpzP2IyYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHFGQUE0QjtBQUN6RCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxrRUFBUztBQUM3Qix3QkFBd0IsbUJBQU8sQ0FBQywyRkFBK0I7QUFDL0QsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlDQUFpQztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtIQUFrSCxpQkFBaUI7QUFDbkk7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQ0FBaUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZUFBZTs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCO0FBQzdELG9DQUFvQyx5QkFBeUI7O0FBRTdEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsa0JBQWtCO0FBQ2hELDhCQUE4QixrQkFBa0I7O0FBRWhEOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvU3RhdGljQm9keS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENpcmNsZUNvbnRhaW5zID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9jaXJjbGUvQ29udGFpbnMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgUmVjdGFuZ2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9Db250YWlucycpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBTdGF0aWMgQXJjYWRlIFBoeXNpY3MgQm9keS5cclxuICpcclxuICogQSBTdGF0aWMgQm9keSBuZXZlciBtb3ZlcywgYW5kIGlzbid0IGF1dG9tYXRpY2FsbHkgc3luY2hyb25pemVkIHdpdGggaXRzIHBhcmVudCBHYW1lIE9iamVjdC5cclxuICogVGhhdCBtZWFucyBpZiB5b3UgbWFrZSBhbnkgY2hhbmdlIHRvIHRoZSBwYXJlbnQncyBvcmlnaW4sIHBvc2l0aW9uLCBvciBzY2FsZSBhZnRlciBjcmVhdGluZyBvciBhZGRpbmcgdGhlIGJvZHksIHlvdSdsbCBuZWVkIHRvIHVwZGF0ZSB0aGUgQm9keSBtYW51YWxseS5cclxuICpcclxuICogQSBTdGF0aWMgQm9keSBjYW4gY29sbGlkZSB3aXRoIG90aGVyIEJvZGllcywgYnV0IGlzIG5ldmVyIG1vdmVkIGJ5IGNvbGxpc2lvbnMuXHJcbiAqXHJcbiAqIEl0cyBkeW5hbWljIGNvdW50ZXJwYXJ0IGlzIHtAbGluayBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0uXHJcbiAqXHJcbiAqIEBjbGFzcyBTdGF0aWNCb2R5XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5BcmNhZGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH0gd29ybGQgLSBUaGUgQXJjYWRlIFBoeXNpY3Mgc2ltdWxhdGlvbiB0aGlzIFN0YXRpYyBCb2R5IGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhpcyBTdGF0aWMgQm9keSBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIFN0YXRpY0JvZHkgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU3RhdGljQm9keSAod29ybGQsIGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gKGdhbWVPYmplY3Qud2lkdGgpID8gZ2FtZU9iamVjdC53aWR0aCA6IDY0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSAoZ2FtZU9iamVjdC5oZWlnaHQpID8gZ2FtZU9iamVjdC5oZWlnaHQgOiA2NDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEFyY2FkZSBQaHlzaWNzIHNpbXVsYXRpb24gdGhpcyBTdGF0aWMgQm9keSBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjd29ybGRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud29ybGQgPSB3b3JsZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEdhbWUgT2JqZWN0IHRoaXMgU3RhdGljIEJvZHkgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2dhbWVPYmplY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lT2JqZWN0ID0gZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgU3RhdGljIEJvZHkncyBib3VuZGFyeSBpcyBkcmF3biB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlYnVnU2hvd0JvZHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYnVnU2hvd0JvZHkgPSB3b3JsZC5kZWZhdWx0cy5kZWJ1Z1Nob3dTdGF0aWNCb2R5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29sb3Igb2YgdGhpcyBTdGF0aWMgQm9keSBvbiB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlYnVnQm9keUNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWJ1Z0JvZHlDb2xvciA9IHdvcmxkLmRlZmF1bHRzLnN0YXRpY0JvZHlEZWJ1Z0NvbG9yO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljIEJvZHkgaXMgdXBkYXRlZCBieSB0aGUgcGh5c2ljcyBzaW11bGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjZW5hYmxlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIFN0YXRpYyBCb2R5J3MgYm91bmRhcnkgaXMgY2lyY3VsYXIgKGB0cnVlYCkgb3IgcmVjdGFuZ3VsYXIgKGBmYWxzZWApLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjaXNDaXJjbGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNDaXJjbGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBTdGF0aWMgQm9keSBpcyBjaXJjdWxhciwgdGhpcyBpcyB0aGUgdW5zY2FsZWQgcmFkaXVzIG9mIHRoZSBTdGF0aWMgQm9keSdzIGJvdW5kYXJ5LCBhcyBzZXQgYnkge0BsaW5rICNzZXRDaXJjbGV9LCBpbiBzb3VyY2UgcGl4ZWxzLlxyXG4gICAgICAgICAqIFRoZSB0cnVlIHJhZGl1cyBpcyBlcXVhbCB0byBgaGFsZldpZHRoYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I3JhZGl1c1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG9mZnNldCBvZiB0aGlzIFN0YXRpYyBCb2R5J3MgYWN0dWFsIHBvc2l0aW9uIGZyb20gYW55IHVwZGF0ZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBVbmxpa2UgYSBkeW5hbWljIEJvZHksIGEgU3RhdGljIEJvZHkgZG9lcyBub3QgZm9sbG93IGl0cyBHYW1lIE9iamVjdC4gQXMgc3VjaCwgdGhpcyBvZmZzZXQgaXMgb25seSBhcHBsaWVkIHdoZW4gcmVzaXppbmcgdGhlIFN0YXRpYyBCb2R5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjb2Zmc2V0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhpcyBTdGF0aWMgQm9keSB3aXRoaW4gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNwb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBuZXcgVmVjdG9yMihnYW1lT2JqZWN0LnggLSBnYW1lT2JqZWN0LmRpc3BsYXlPcmlnaW5YLCBnYW1lT2JqZWN0LnkgLSBnYW1lT2JqZWN0LmRpc3BsYXlPcmlnaW5ZKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBTdGF0aWMgQm9keSdzIGJvdW5kYXJ5LCBpbiBwaXhlbHMuXHJcbiAgICAgICAgICogSWYgdGhlIFN0YXRpYyBCb2R5IGlzIGNpcmN1bGFyLCB0aGlzIGlzIGFsc28gdGhlIFN0YXRpYyBCb2R5J3MgZGlhbWV0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBTdGF0aWMgQm9keSdzIGJvdW5kYXJ5LCBpbiBwaXhlbHMuXHJcbiAgICAgICAgICogSWYgdGhlIFN0YXRpYyBCb2R5IGlzIGNpcmN1bGFyLCB0aGlzIGlzIGFsc28gdGhlIFN0YXRpYyBCb2R5J3MgZGlhbWV0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYWxmIHRoZSBTdGF0aWMgQm9keSdzIHdpZHRoLCBpbiBwaXhlbHMuXHJcbiAgICAgICAgICogSWYgdGhlIFN0YXRpYyBCb2R5IGlzIGNpcmN1bGFyLCB0aGlzIGlzIGFsc28gdGhlIFN0YXRpYyBCb2R5J3MgcmFkaXVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjaGFsZldpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbGZXaWR0aCA9IE1hdGguYWJzKHRoaXMud2lkdGggLyAyKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGFsZiB0aGUgU3RhdGljIEJvZHkncyBoZWlnaHQsIGluIHBpeGVscy5cclxuICAgICAgICAgKiBJZiB0aGUgU3RhdGljIEJvZHkgaXMgY2lyY3VsYXIsIHRoaXMgaXMgYWxzbyB0aGUgU3RhdGljIEJvZHkncyByYWRpdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNoYWxmSGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbGZIZWlnaHQgPSBNYXRoLmFicyh0aGlzLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2VudGVyIG9mIHRoZSBTdGF0aWMgQm9keSdzIGJvdW5kYXJ5LlxyXG4gICAgICAgICAqIFRoaXMgaXMgdGhlIG1pZHBvaW50IG9mIGl0cyBgcG9zaXRpb25gICh0b3AtbGVmdCBjb3JuZXIpIGFuZCBpdHMgYm90dG9tLXJpZ2h0IGNvcm5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2NlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoZ2FtZU9iamVjdC54ICsgdGhpcy5oYWxmV2lkdGgsIGdhbWVPYmplY3QueSArIHRoaXMuaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgY29uc3RhbnQgemVybyB2ZWxvY2l0eSB1c2VkIGJ5IHRoZSBBcmNhZGUgUGh5c2ljcyBzaW11bGF0aW9uIGZvciBjYWxjdWxhdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN2ZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHkgPSBWZWN0b3IyLlpFUk87XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgY29uc3RhbnQgYGZhbHNlYCB2YWx1ZSBleHBlY3RlZCBieSB0aGUgQXJjYWRlIFBoeXNpY3Mgc2ltdWxhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2FsbG93R3Jhdml0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbGxvd0dyYXZpdHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR3Jhdml0YXRpb25hbCBmb3JjZSBhcHBsaWVkIHNwZWNpZmljYWxseSB0byB0aGlzIEJvZHkuIFZhbHVlcyBhcmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC4gQWx3YXlzIHplcm8gZm9yIGEgU3RhdGljIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNncmF2aXR5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ncmF2aXR5ID0gVmVjdG9yMi5aRVJPO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWJvdW5kLCBvciByZXN0aXR1dGlvbiwgZm9sbG93aW5nIGEgY29sbGlzaW9uLCByZWxhdGl2ZSB0byAxLiBBbHdheXMgemVybyBmb3IgYSBTdGF0aWMgQm9keS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2JvdW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmNlID0gVmVjdG9yMi5aRVJPO1xyXG5cclxuICAgICAgICAvLyAgSWYgdHJ1ZSB0aGlzIEJvZHkgd2lsbCBkaXNwYXRjaCBldmVudHNcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgc2ltdWxhdGlvbiBlbWl0cyBhIGB3b3JsZGJvdW5kc2AgZXZlbnQgd2hlbiB0aGlzIFN0YXRpY0JvZHkgY29sbGlkZXMgd2l0aCB0aGUgd29ybGQgYm91bmRhcnkuXHJcbiAgICAgICAgICogQWx3YXlzIGZhbHNlIGZvciBhIFN0YXRpYyBCb2R5LiAoU3RhdGljIEJvZGllcyBuZXZlciBjb2xsaWRlIHdpdGggdGhlIHdvcmxkIGJvdW5kYXJ5IGFuZCBuZXZlciB0cmlnZ2VyIGEgYHdvcmxkYm91bmRzYCBldmVudC4pXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNvbldvcmxkQm91bmRzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uV29ybGRCb3VuZHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgc2ltdWxhdGlvbiBlbWl0cyBhIGBjb2xsaWRlYCBldmVudCB3aGVuIHRoaXMgU3RhdGljQm9keSBjb2xsaWRlcyB3aXRoIGFub3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNvbkNvbGxpZGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Db2xsaWRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHNpbXVsYXRpb24gZW1pdHMgYW4gYG92ZXJsYXBgIGV2ZW50IHdoZW4gdGhpcyBTdGF0aWNCb2R5IG92ZXJsYXBzIHdpdGggYW5vdGhlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I29uT3ZlcmxhcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vbk92ZXJsYXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFN0YXRpY0JvZHkncyBpbmVydGlhLCByZWxhdGl2ZSB0byBhIGRlZmF1bHQgdW5pdCAoMSkuIFdpdGggYGJvdW5jZWAsIHRoaXMgYWZmZWN0cyB0aGUgZXhjaGFuZ2Ugb2YgbW9tZW50dW0gKHZlbG9jaXRpZXMpIGR1cmluZyBjb2xsaXNpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjbWFzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFzcyA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgY2FuIGJlIG1vdmVkIGJ5IGNvbGxpc2lvbnMgd2l0aCBhbm90aGVyIGJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNpbW1vdmFibGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbW1vdmFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgZGlzYWJsaW5nIHRoZSBkZWZhdWx0IGhvcml6b250YWwgc2VwYXJhdGlvbiBvZiBjb2xsaWRpbmcgYm9kaWVzLiBQYXNzIHlvdXIgb3duIGBjb2xsaWRlSGFuZGxlcmAgdG8gdGhlIGNvbGxpZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjY3VzdG9tU2VwYXJhdGVYXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1c3RvbVNlcGFyYXRlWCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgZGlzYWJsaW5nIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNlcGFyYXRpb24gb2YgY29sbGlkaW5nIGJvZGllcy4gUGFzcyB5b3VyIG93biBgY29sbGlkZUhhbmRsZXJgIHRvIHRoZSBjb2xsaWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2N1c3RvbVNlcGFyYXRlWVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21TZXBhcmF0ZVkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFtb3VudCBvZiBob3Jpem9udGFsIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNvdmVybGFwWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHZlcnRpY2FsIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBCb2R5IGlzIGNvbGxpZGluZyB3aXRoIGFub3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNvdmVybGFwWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIG92ZXJsYXAgKGJlZm9yZSBzZXBhcmF0aW9uKSwgaWYgdGhpcyBTdGF0aWNCb2R5IGlzIGNpcmN1bGFyIGFuZCBjb2xsaWRpbmcgd2l0aCBhbm90aGVyIGNpcmN1bGFyIGJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNvdmVybGFwUlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcmxhcFIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljQm9keSBoYXMgZXZlciBvdmVybGFwcGVkIHdpdGggYW5vdGhlciB3aGlsZSBib3RoIHdlcmUgbm90IG1vdmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2VtYmVkZGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtYmVkZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBTdGF0aWNCb2R5IGludGVyYWN0cyB3aXRoIHRoZSB3b3JsZCBib3VuZGFyeS5cclxuICAgICAgICAgKiBBbHdheXMgZmFsc2UgZm9yIGEgU3RhdGljIEJvZHkuIChTdGF0aWMgQm9kaWVzIG5ldmVyIGNvbGxpZGUgd2l0aCB0aGUgd29ybGQgYm91bmRhcnkuKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjY29sbGlkZVdvcmxkQm91bmRzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVXb3JsZEJvdW5kcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljQm9keSBpcyBjaGVja2VkIGZvciBjb2xsaXNpb25zIGFuZCBmb3Igd2hpY2ggZGlyZWN0aW9ucy4gWW91IGNhbiBzZXQgYGNoZWNrQ29sbGlzaW9uLm5vbmUgPSBmYWxzZWAgdG8gZGlzYWJsZSBjb2xsaXNpb24gY2hlY2tzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjY2hlY2tDb2xsaXNpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUJvZHlDb2xsaXNpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jaGVja0NvbGxpc2lvbiA9IHsgbm9uZTogZmFsc2UsIHVwOiB0cnVlLCBkb3duOiB0cnVlLCBsZWZ0OiB0cnVlLCByaWdodDogdHJ1ZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljQm9keSBoYXMgZXZlciBjb2xsaWRlZCB3aXRoIGFub3RoZXIgYm9keSBhbmQgaW4gd2hpY2ggZGlyZWN0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjdG91Y2hpbmdcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUJvZHlDb2xsaXNpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3VjaGluZyA9IHsgbm9uZTogdHJ1ZSwgdXA6IGZhbHNlLCBkb3duOiBmYWxzZSwgbGVmdDogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljQm9keSB3YXMgY29sbGlkaW5nIHdpdGggYW5vdGhlciBib2R5IGR1cmluZyB0aGUgbGFzdCBzdGVwIG9yIGFueSBwcmV2aW91cyBzdGVwLCBhbmQgaW4gd2hpY2ggZGlyZWN0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjd2FzVG91Y2hpbmdcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUJvZHlDb2xsaXNpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53YXNUb3VjaGluZyA9IHsgbm9uZTogdHJ1ZSwgdXA6IGZhbHNlLCBkb3duOiBmYWxzZSwgbGVmdDogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgU3RhdGljQm9keSBoYXMgZXZlciBjb2xsaWRlZCB3aXRoIGEgdGlsZSBvciB0aGUgd29ybGQgYm91bmRhcnkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNibG9ja2VkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVCb2R5Q29sbGlzaW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxvY2tlZCA9IHsgbm9uZTogdHJ1ZSwgdXA6IGZhbHNlLCBkb3duOiBmYWxzZSwgbGVmdDogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU3RhdGljQm9keSdzIHBoeXNpY3MgdHlwZSAoc3RhdGljIGJ5IGRlZmF1bHQpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjcGh5c2ljc1R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU1RBVElDX0JPRFlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBoeXNpY3NUeXBlID0gQ09OU1QuU1RBVElDX0JPRFk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxjdWxhdGVkIGNoYW5nZSBpbiB0aGUgQm9keSdzIGhvcml6b250YWwgcG9zaXRpb24gZHVyaW5nIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgICAgICogRm9yIGEgc3RhdGljIGJvZHkgdGhpcyBpcyBhbHdheXMgemVyby5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I19keFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2R4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGN1bGF0ZWQgY2hhbmdlIGluIHRoZSBCb2R5J3MgdmVydGljYWwgcG9zaXRpb24gZHVyaW5nIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgICAgICogRm9yIGEgc3RhdGljIGJvZHkgdGhpcyBpcyBhbHdheXMgemVyby5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I19keVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2R5ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBHYW1lIE9iamVjdCB0aGlzIEJvZHkgaXMgYm91bmQgdG8uXHJcbiAgICAgKiBGaXJzdCBpdCByZW1vdmVzIGl0cyByZWZlcmVuY2UgZnJvbSB0aGUgb2xkIEdhbWUgT2JqZWN0LCB0aGVuIHNldHMgdGhlIG5ldyBvbmUuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZGltZW5zaW9ucyBvZiB0aGlzIEJvZHkgdG8gcmVmbGVjdCB0aGF0IG9mIHRoZSBuZXcgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNzZXRHYW1lT2JqZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIG5ldyBHYW1lIE9iamVjdCB0aGF0IHdpbGwgb3duIHRoaXMgQm9keS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZT10cnVlXSAtIFJlcG9zaXRpb24gYW5kIHJlc2l6ZSB0aGlzIEJvZHkgdG8gbWF0Y2ggdGhlIG5ldyBHYW1lIE9iamVjdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keX0gVGhpcyBTdGF0aWMgQm9keSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN1cGRhdGVGcm9tR2FtZU9iamVjdFxyXG4gICAgICovXHJcbiAgICBzZXRHYW1lT2JqZWN0OiBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdXBkYXRlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChnYW1lT2JqZWN0ICYmIGdhbWVPYmplY3QgIT09IHRoaXMuZ2FtZU9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZW1vdmUgdGhpcyBib2R5IGZyb20gdGhlIG9sZCBnYW1lIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmdhbWVPYmplY3QuYm9keSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmJvZHkgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgLy8gIFVwZGF0ZSBvdXIgcmVmZXJlbmNlXHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU9iamVjdCA9IGdhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcm9tR2FtZU9iamVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGlzIFN0YXRpYyBCb2R5IHNvIHRoYXQgaXRzIHBvc2l0aW9uIGFuZCBkaW1lbnNpb25zIGFyZSB1cGRhdGVkXHJcbiAgICAgKiBiYXNlZCBvbiB0aGUgY3VycmVudCBHYW1lIE9iamVjdCBpdCBpcyBib3VuZCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I3VwZGF0ZUZyb21HYW1lT2JqZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keX0gVGhpcyBTdGF0aWMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUZyb21HYW1lT2JqZWN0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmdldFRvcExlZnQodGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSBnYW1lT2JqZWN0LmRpc3BsYXlXaWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGdhbWVPYmplY3QuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5oYWxmV2lkdGggPSBNYXRoLmFicyh0aGlzLndpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5oYWxmSGVpZ2h0ID0gTWF0aC5hYnModGhpcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgdGhpcy5jZW50ZXIuc2V0KHRoaXMucG9zaXRpb24ueCArIHRoaXMuaGFsZldpZHRoLCB0aGlzLnBvc2l0aW9uLnkgKyB0aGlzLmhhbGZIZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUuaW5zZXJ0KHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNzZXRPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBCb2R5IGZyb20gdGhlIEdhbWUgT2JqZWN0J3MgY2VudGVyLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgb2Zmc2V0IG9mIHRoZSBCb2R5IGZyb20gdGhlIEdhbWUgT2JqZWN0J3MgY2VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5fSBUaGlzIFN0YXRpYyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueCAtPSB0aGlzLm9mZnNldC54O1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueSAtPSB0aGlzLm9mZnNldC55O1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldC5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueCArPSB0aGlzLm9mZnNldC54O1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueSArPSB0aGlzLm9mZnNldC55O1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNlbnRlcigpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUuaW5zZXJ0KHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBib2R5LlxyXG4gICAgICogUmVzZXRzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIG1hdGNoIGN1cnJlbnQgZnJhbWUsIGlmIG5vIHdpZHRoIGFuZCBoZWlnaHQgcHJvdmlkZWQgYW5kIGEgZnJhbWUgaXMgZm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIEJvZHkgaW4gcGl4ZWxzLiBDYW5ub3QgYmUgemVyby4gSWYgbm90IGdpdmVuLCBhbmQgdGhlIHBhcmVudCBHYW1lIE9iamVjdCBoYXMgYSBmcmFtZSwgaXQgd2lsbCB1c2UgdGhlIGZyYW1lIHdpZHRoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIEJvZHkgaW4gcGl4ZWxzLiBDYW5ub3QgYmUgemVyby4gSWYgbm90IGdpdmVuLCBhbmQgdGhlIHBhcmVudCBHYW1lIE9iamVjdCBoYXMgYSBmcmFtZSwgaXQgd2lsbCB1c2UgdGhlIGZyYW1lIGhlaWdodC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NlbnRlcj10cnVlXSAtIE1vZGlmeSB0aGUgQm9keSdzIGBvZmZzZXRgLCBwbGFjaW5nIHRoZSBCb2R5J3MgY2VudGVyIG9uIGl0cyBHYW1lIE9iamVjdCdzIGNlbnRlci4gT25seSB3b3JrcyBpZiB0aGUgR2FtZSBPYmplY3QgaGFzIHRoZSBgZ2V0Q2VudGVyYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHl9IFRoaXMgU3RhdGljIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgY2VudGVyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjZW50ZXIgPT09IHVuZGVmaW5lZCkgeyBjZW50ZXIgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBpZiAoIXdpZHRoICYmIGdhbWVPYmplY3QuZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFoZWlnaHQgJiYgZ2FtZU9iamVjdC5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGdhbWVPYmplY3QuZnJhbWUucmVhbEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5oYWxmV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5oYWxmSGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgaWYgKGNlbnRlciAmJiBnYW1lT2JqZWN0LmdldENlbnRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBveCA9IGdhbWVPYmplY3QuZGlzcGxheVdpZHRoIC8gMjtcclxuICAgICAgICAgICAgdmFyIG95ID0gZ2FtZU9iamVjdC5kaXNwbGF5SGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCAtPSB0aGlzLm9mZnNldC54O1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgLT0gdGhpcy5vZmZzZXQueTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0LnNldChveCAtIHRoaXMuaGFsZldpZHRoLCBveSAtIHRoaXMuaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggKz0gdGhpcy5vZmZzZXQueDtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ICs9IHRoaXMub2Zmc2V0Lnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNlbnRlcigpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ2lyY2xlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yYWRpdXMgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUuaW5zZXJ0KHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgU3RhdGljIEJvZHkgdG8gaGF2ZSBhIGNpcmN1bGFyIGJvZHkgYW5kIHNldHMgaXRzIHNpemVzIGFuZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I3NldENpcmNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIFN0YXRpY0JvZHksIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WF0gLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIFN0YXRpY0JvZHkgZnJvbSBpdHMgR2FtZSBPYmplY3QsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WV0gLSBUaGUgdmVydGljYWwgb2Zmc2V0IG9mIHRoZSBTdGF0aWNCb2R5IGZyb20gaXRzIEdhbWUgT2JqZWN0LCBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHl9IFRoaXMgU3RhdGljIEJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDaXJjbGU6IGZ1bmN0aW9uIChyYWRpdXMsIG9mZnNldFgsIG9mZnNldFkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gdGhpcy5vZmZzZXQueDsgfVxyXG4gICAgICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IHRoaXMub2Zmc2V0Lnk7IH1cclxuXHJcbiAgICAgICAgaWYgKHJhZGl1cyA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0NpcmNsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cztcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSByYWRpdXMgKiAyO1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHJhZGl1cyAqIDI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhhbGZXaWR0aCA9IE1hdGguZmxvb3IodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbGZIZWlnaHQgPSBNYXRoLmZsb29yKHRoaXMuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9mZnNldC5zZXQob2Zmc2V0WCwgb2Zmc2V0WSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNlbnRlcigpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy53b3JsZC5zdGF0aWNUcmVlLmluc2VydCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NpcmNsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgU3RhdGljQm9keSdzIGBjZW50ZXJgIGZyb20gaXRzIGBwb3NpdGlvbmAgYW5kIGRpbWVuc2lvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN1cGRhdGVDZW50ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVDZW50ZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jZW50ZXIuc2V0KHRoaXMucG9zaXRpb24ueCArIHRoaXMuaGFsZldpZHRoLCB0aGlzLnBvc2l0aW9uLnkgKyB0aGlzLmhhbGZIZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIEJvZHkgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBBbHNvIHBvc2l0aW9ucyBpdHMgcGFyZW50IEdhbWUgT2JqZWN0IHRvIHRoZSBzYW1lIGNvb3JkaW5hdGVzLlxyXG4gICAgICogU2ltaWxhciB0byBgdXBkYXRlRnJvbUdhbWVPYmplY3RgLCBidXQgZG9lc24ndCBtb2RpZnkgdGhlIEJvZHkncyBkaW1lbnNpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBjb29yZGluYXRlIHRvIHJlc2V0IHRoZSBib2R5IHRvLiBJZiBub3QgZ2l2ZW4gd2lsbCB1c2UgdGhlIHBhcmVudCBHYW1lIE9iamVjdCdzIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29vcmRpbmF0ZSB0byByZXNldCB0aGUgYm9keSB0by4gSWYgbm90IGdpdmVuIHdpbGwgdXNlIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QncyBjb29yZGluYXRlLlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLmdhbWVPYmplY3Q7XHJcblxyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IGdhbWVPYmplY3QueDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IGdhbWVPYmplY3QueTsgfVxyXG5cclxuICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnNldFBvc2l0aW9uKHgsIHkpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmdldFRvcExlZnQodGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2VudGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5pbnNlcnQodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTk9PUCBmdW5jdGlvbi4gQSBTdGF0aWMgQm9keSBjYW5ub3QgYmUgc3RvcHBlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5fSBUaGlzIFN0YXRpYyBCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AgbGVmdCBhbmQgYm90dG9tIHJpZ2h0IHBvaW50cyBvZiB0aGUgU3RhdGljQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2dldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQm9keUJvdW5kc30gb2JqIC0gVGhlIG9iamVjdCB3aGljaCB3aWxsIGhvbGQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUJvZHlCb3VuZHN9IFRoZSBzYW1lIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgd2l0aCBgeGAsIGB5YCwgYHJpZ2h0YCBhbmQgYGJvdHRvbWAgdmFsdWVzIG1hdGNoaW5nIHRoZSByZXNwZWN0aXZlIHZhbHVlcyBvZiB0aGUgU3RhdGljQm9keS5cclxuICAgICAqL1xyXG4gICAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAob2JqKVxyXG4gICAge1xyXG4gICAgICAgIG9iai54ID0gdGhpcy54O1xyXG4gICAgICAgIG9iai55ID0gdGhpcy55O1xyXG4gICAgICAgIG9iai5yaWdodCA9IHRoaXMucmlnaHQ7XHJcbiAgICAgICAgb2JqLmJvdHRvbSA9IHRoaXMuYm90dG9tO1xyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSBnaXZlbiB4LHkgY29vcmRpbmF0ZSBpcyBjb2xsaWRpbmcgd2l0aCB0aGlzIFN0YXRpYyBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjaGl0VGVzdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGNoZWNrIGFnYWluc3QgdGhpcyBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNoZWNrIGFnYWluc3QgdGhpcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBsaWVzIHdpdGhpbiB0aGlzIGJvZHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBoaXRUZXN0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaXNDaXJjbGUpID8gQ2lyY2xlQ29udGFpbnModGhpcywgeCwgeSkgOiBSZWN0YW5nbGVDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOT09QXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNwb3N0VXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKi9cclxuICAgIHBvc3RVcGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFic29sdXRlIChub24tbmVnYXRpdmUpIGNoYW5nZSBpbiB0aGlzIFN0YXRpY0JvZHkncyBob3Jpem9udGFsIHBvc2l0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAuIEFsd2F5cyB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjZGVsdGFBYnNYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFsd2F5cyB6ZXJvIGZvciBhIFN0YXRpYyBCb2R5LlxyXG4gICAgICovXHJcbiAgICBkZWx0YUFic1g6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFic29sdXRlIChub24tbmVnYXRpdmUpIGNoYW5nZSBpbiB0aGlzIFN0YXRpY0JvZHkncyB2ZXJ0aWNhbCBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLiBBbHdheXMgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlbHRhQWJzWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBbHdheXMgemVybyBmb3IgYSBTdGF0aWMgQm9keS5cclxuICAgICAqL1xyXG4gICAgZGVsdGFBYnNZOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjaGFuZ2UgaW4gdGhpcyBTdGF0aWNCb2R5J3MgaG9yaXpvbnRhbCBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLiBBbHdheXMgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlbHRhWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2hhbmdlIGluIHRoaXMgU3RhdGljQm9keSdzIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHN0ZXAuIEFsd2F5cyB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBkZWx0YVg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNoYW5nZSBpbiB0aGlzIFN0YXRpY0JvZHkncyB2ZXJ0aWNhbCBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLiBBbHdheXMgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlbHRhWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2hhbmdlIGluIHRoaXMgU3RhdGljQm9keSdzIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHN0ZXAuIEFsd2F5cyB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBkZWx0YVk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNoYW5nZSBpbiB0aGlzIFN0YXRpY0JvZHkncyByb3RhdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLiBBbHdheXMgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RlbHRhWlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2hhbmdlIGluIHRoaXMgU3RhdGljQm9keSdzIHJvdGF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAuIEFsd2F5cyB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBkZWx0YVo6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZXMgdGhpcyBCb2R5IGFuZCBtYXJrcyBpdCBmb3IgZGVzdHJ1Y3Rpb24gZHVyaW5nIHRoZSBuZXh0IHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVuYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLnBlbmRpbmdEZXN0cm95LnNldCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RhdGljQm9keSBmb3IgdmlzdWFsIGRlYnVnZ2luZyBwdXJwb3Nlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2RyYXdEZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWMgLSBUaGUgR3JhcGhpY3Mgb2JqZWN0IHRvIHVzZSBmb3IgdGhlIGRlYnVnIGRyYXdpbmcgb2YgdGhlIFN0YXRpY0JvZHkuXHJcbiAgICAgKi9cclxuICAgIGRyYXdEZWJ1ZzogZnVuY3Rpb24gKGdyYXBoaWMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zaXRpb247XHJcblxyXG4gICAgICAgIHZhciB4ID0gcG9zLnggKyB0aGlzLmhhbGZXaWR0aDtcclxuICAgICAgICB2YXIgeSA9IHBvcy55ICsgdGhpcy5oYWxmSGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z1Nob3dCb2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ3JhcGhpYy5saW5lU3R5bGUoZ3JhcGhpYy5kZWZhdWx0U3Ryb2tlV2lkdGgsIHRoaXMuZGVidWdCb2R5Q29sb3IsIDEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaXJjbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdyYXBoaWMuc3Ryb2tlQ2lyY2xlKHgsIHksIHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdyYXBoaWMuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFN0YXRpY0JvZHkgaXMgZ29pbmcgdG8gYmUgc2hvd2luZyBhIGRlYnVnIHZpc3VhbGl6YXRpb24gZHVyaW5nIHBvc3RVcGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN3aWxsRHJhd0RlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgU3RhdGljQm9keSBpcyBnb2luZyB0byBzaG93IHRoZSBkZWJ1ZyB2aXN1YWxpemF0aW9uIGR1cmluZyBwb3N0VXBkYXRlLlxyXG4gICAgICovXHJcbiAgICB3aWxsRHJhd0RlYnVnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlYnVnU2hvd0JvZHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgTWFzcyBvZiB0aGUgU3RhdGljQm9keS4gV2lsbCBzZXQgdGhlIE1hc3MgdG8gMC4xIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNzZXRNYXNzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBNYXNzIHRvLiBWYWx1ZXMgb2YgemVybyBvciBsZXNzIGFyZSBjaGFuZ2VkIHRvIDAuMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keX0gVGhpcyBTdGF0aWMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldE1hc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPD0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDYXVzZXMgaGF2b2Mgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIHZhbHVlID0gMC4xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tYXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIFN0YXRpY0JvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLndvcmxkLnN0YXRpY1RyZWUuaW5zZXJ0KHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgU3RhdGljQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud29ybGQuc3RhdGljVHJlZS5pbnNlcnQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsZWZ0LW1vc3QgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIG9mIHRoZSBTdGF0aWNCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcmlnaHQtbW9zdCB4IGNvb3JkaW5hdGUgb2YgdGhlIGFyZWEgb2YgdGhlIFN0YXRpY0JvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjcmlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54ICsgdGhpcy53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoaWdoZXN0IHkgY29vcmRpbmF0ZSBvZiB0aGUgYXJlYSBvZiB0aGUgU3RhdGljQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb3dlc3QgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIG9mIHRoZSBTdGF0aWNCb2R5LiAoeSArIGhlaWdodClcclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueSArIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3RhdGljQm9keTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/StaticBody.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/StaticPhysicsGroup.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/StaticPhysicsGroup.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArcadeSprite = __webpack_require__(/*! ./ArcadeSprite */ \"./node_modules/phaser/src/physics/arcade/ArcadeSprite.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Group = __webpack_require__(/*! ../../gameobjects/group/Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Arcade Physics Static Group object.\r\n *\r\n * All Game Objects created by this Group will automatically be given static Arcade Physics bodies.\r\n *\r\n * Its dynamic counterpart is {@link Phaser.Physics.Arcade.Group}.\r\n *\r\n * @class StaticGroup\r\n * @extends Phaser.GameObjects.Group\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.World} world - The physics simulation.\r\n * @param {Phaser.Scene} scene - The scene this group belongs to.\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group.\r\n */\r\nvar StaticPhysicsGroup = new Class({\r\n\r\n    Extends: Group,\r\n\r\n    initialize:\r\n\r\n    function StaticPhysicsGroup (world, scene, children, config)\r\n    {\r\n        if (!children && !config)\r\n        {\r\n            config = {\r\n                createCallback: this.createCallbackHandler,\r\n                removeCallback: this.removeCallbackHandler,\r\n                createMultipleCallback: this.createMultipleCallbackHandler,\r\n                classType: ArcadeSprite\r\n            };\r\n        }\r\n        else if (IsPlainObject(children))\r\n        {\r\n            //  children is a plain object, so swizzle them:\r\n            config = children;\r\n            children = null;\r\n\r\n            config.createCallback = this.createCallbackHandler;\r\n            config.removeCallback = this.removeCallbackHandler;\r\n            config.createMultipleCallback = this.createMultipleCallbackHandler;\r\n            config.classType = GetFastValue(config, 'classType', ArcadeSprite);\r\n        }\r\n        else if (Array.isArray(children) && IsPlainObject(children[0]))\r\n        {\r\n            //  children is an array of plain objects\r\n            config = children;\r\n            children = null;\r\n\r\n            config.forEach(function (singleConfig)\r\n            {\r\n                singleConfig.createCallback = this.createCallbackHandler;\r\n                singleConfig.removeCallback = this.removeCallbackHandler;\r\n                singleConfig.createMultipleCallback = this.createMultipleCallbackHandler;\r\n                singleConfig.classType = GetFastValue(singleConfig, 'classType', ArcadeSprite);\r\n            });\r\n        }\r\n\r\n        /**\r\n         * The physics simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticGroup#world\r\n         * @type {Phaser.Physics.Arcade.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The scene this group belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticGroup#physicsType\r\n         * @type {integer}\r\n         * @default Phaser.Physics.Arcade.STATIC_BODY\r\n         * @since 3.0.0\r\n         */\r\n        this.physicsType = CONST.STATIC_BODY;\r\n\r\n        Group.call(this, scene, children, config);\r\n\r\n        /**\r\n         * A textual representation of this Game Object.\r\n         * Used internally by Phaser but is available for your own custom classes to populate.\r\n         *\r\n         * @name Phaser.Physics.Arcade.StaticGroup#type\r\n         * @type {string}\r\n         * @default 'StaticPhysicsGroup'\r\n         * @since 3.21.0\r\n         */\r\n        this.type = 'StaticPhysicsGroup';\r\n    },\r\n\r\n    /**\r\n     * Adds a static physics body to the new group member (if it lacks one) and adds it to the simulation.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticGroup#createCallbackHandler\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The new group member.\r\n     *\r\n     * @see Phaser.Physics.Arcade.World#enableBody\r\n     */\r\n    createCallbackHandler: function (child)\r\n    {\r\n        if (!child.body)\r\n        {\r\n            this.world.enableBody(child, CONST.STATIC_BODY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Disables the group member's physics body, removing it from the simulation.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticGroup#removeCallbackHandler\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} child - The group member being removed.\r\n     *\r\n     * @see Phaser.Physics.Arcade.World#disableBody\r\n     */\r\n    removeCallbackHandler: function (child)\r\n    {\r\n        if (child.body)\r\n        {\r\n            this.world.disableBody(child);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Refreshes the group.\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticGroup#createMultipleCallbackHandler\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject[]} entries - The newly created group members.\r\n     *\r\n     * @see Phaser.Physics.Arcade.StaticGroup#refresh\r\n     */\r\n    createMultipleCallbackHandler: function ()\r\n    {\r\n        this.refresh();\r\n    },\r\n\r\n    /**\r\n     * Resets each Body to the position of its parent Game Object.\r\n     * Body sizes aren't changed (use {@link Phaser.Physics.Arcade.Components.Enable#refreshBody} for that).\r\n     *\r\n     * @method Phaser.Physics.Arcade.StaticGroup#refresh\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.StaticGroup} This group.\r\n     *\r\n     * @see Phaser.Physics.Arcade.StaticBody#reset\r\n     */\r\n    refresh: function ()\r\n    {\r\n        var children = this.children.entries;\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            children[i].body.reset();\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = StaticPhysicsGroup;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9TdGF0aWNQaHlzaWNzR3JvdXAuanM/NjczNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQzNDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLGtFQUFTO0FBQzdCLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxZQUFZLG1CQUFPLENBQUMsMkZBQStCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGtDQUFrQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsYUFBYTtBQUN4QixXQUFXLDhIQUE4SCxnREFBZ0Q7QUFDekwsV0FBVyw0RkFBNEY7QUFDdkc7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdDQUFnQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSx1Q0FBdUMsMERBQTBEO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvU3RhdGljUGh5c2ljc0dyb3VwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXJjYWRlU3ByaXRlID0gcmVxdWlyZSgnLi9BcmNhZGVTcHJpdGUnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR3JvdXAgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cCcpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBBcmNhZGUgUGh5c2ljcyBTdGF0aWMgR3JvdXAgb2JqZWN0LlxyXG4gKlxyXG4gKiBBbGwgR2FtZSBPYmplY3RzIGNyZWF0ZWQgYnkgdGhpcyBHcm91cCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZ2l2ZW4gc3RhdGljIEFyY2FkZSBQaHlzaWNzIGJvZGllcy5cclxuICpcclxuICogSXRzIGR5bmFtaWMgY291bnRlcnBhcnQgaXMge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cH0uXHJcbiAqXHJcbiAqIEBjbGFzcyBTdGF0aWNHcm91cFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXBcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkFyY2FkZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSB3b3JsZCAtIFRoZSBwaHlzaWNzIHNpbXVsYXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBzY2VuZSB0aGlzIGdyb3VwIGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZyl9IFtjaGlsZHJlbl0gLSBHYW1lIE9iamVjdHMgdG8gYWRkIHRvIHRoaXMgZ3JvdXA7IG9yIHRoZSBgY29uZmlnYCBhcmd1bWVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ3JlYXRlQ29uZmlnfSBbY29uZmlnXSAtIFNldHRpbmdzIGZvciB0aGlzIGdyb3VwLlxyXG4gKi9cclxudmFyIFN0YXRpY1BoeXNpY3NHcm91cCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR3JvdXAsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTdGF0aWNQaHlzaWNzR3JvdXAgKHdvcmxkLCBzY2VuZSwgY2hpbGRyZW4sIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuICYmICFjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFjazogdGhpcy5jcmVhdGVDYWxsYmFja0hhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFjazogdGhpcy5yZW1vdmVDYWxsYmFja0hhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVNdWx0aXBsZUNhbGxiYWNrOiB0aGlzLmNyZWF0ZU11bHRpcGxlQ2FsbGJhY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NUeXBlOiBBcmNhZGVTcHJpdGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoSXNQbGFpbk9iamVjdChjaGlsZHJlbikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgY2hpbGRyZW4gaXMgYSBwbGFpbiBvYmplY3QsIHNvIHN3aXp6bGUgdGhlbTpcclxuICAgICAgICAgICAgY29uZmlnID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5jcmVhdGVDYWxsYmFjayA9IHRoaXMuY3JlYXRlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgICAgICBjb25maWcucmVtb3ZlQ2FsbGJhY2sgPSB0aGlzLnJlbW92ZUNhbGxiYWNrSGFuZGxlcjtcclxuICAgICAgICAgICAgY29uZmlnLmNyZWF0ZU11bHRpcGxlQ2FsbGJhY2sgPSB0aGlzLmNyZWF0ZU11bHRpcGxlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgICAgICBjb25maWcuY2xhc3NUeXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2NsYXNzVHlwZScsIEFyY2FkZVNwcml0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmIElzUGxhaW5PYmplY3QoY2hpbGRyZW5bMF0pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIGNoaWxkcmVuIGlzIGFuIGFycmF5IG9mIHBsYWluIG9iamVjdHNcclxuICAgICAgICAgICAgY29uZmlnID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5mb3JFYWNoKGZ1bmN0aW9uIChzaW5nbGVDb25maWcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNpbmdsZUNvbmZpZy5jcmVhdGVDYWxsYmFjayA9IHRoaXMuY3JlYXRlQ2FsbGJhY2tIYW5kbGVyO1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlQ29uZmlnLnJlbW92ZUNhbGxiYWNrID0gdGhpcy5yZW1vdmVDYWxsYmFja0hhbmRsZXI7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVDb25maWcuY3JlYXRlTXVsdGlwbGVDYWxsYmFjayA9IHRoaXMuY3JlYXRlTXVsdGlwbGVDYWxsYmFja0hhbmRsZXI7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVDb25maWcuY2xhc3NUeXBlID0gR2V0RmFzdFZhbHVlKHNpbmdsZUNvbmZpZywgJ2NsYXNzVHlwZScsIEFyY2FkZVNwcml0ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBoeXNpY3Mgc2ltdWxhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cCN3b3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZCA9IHdvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NlbmUgdGhpcyBncm91cCBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0dyb3VwI3BoeXNpY3NUeXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlNUQVRJQ19CT0RZXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5waHlzaWNzVHlwZSA9IENPTlNULlNUQVRJQ19CT0RZO1xyXG5cclxuICAgICAgICBHcm91cC5jYWxsKHRoaXMsIHNjZW5lLCBjaGlsZHJlbiwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IFBoYXNlciBidXQgaXMgYXZhaWxhYmxlIGZvciB5b3VyIG93biBjdXN0b20gY2xhc3NlcyB0byBwb3B1bGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cCN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnU3RhdGljUGh5c2ljc0dyb3VwJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSAnU3RhdGljUGh5c2ljc0dyb3VwJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc3RhdGljIHBoeXNpY3MgYm9keSB0byB0aGUgbmV3IGdyb3VwIG1lbWJlciAoaWYgaXQgbGFja3Mgb25lKSBhbmQgYWRkcyBpdCB0byB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cCNjcmVhdGVDYWxsYmFja0hhbmRsZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIG5ldyBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjZW5hYmxlQm9keVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVDYWxsYmFja0hhbmRsZXI6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICBpZiAoIWNoaWxkLmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLmVuYWJsZUJvZHkoY2hpbGQsIENPTlNULlNUQVRJQ19CT0RZKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZXMgdGhlIGdyb3VwIG1lbWJlcidzIHBoeXNpY3MgYm9keSwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cCNyZW1vdmVDYWxsYmFja0hhbmRsZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIGdyb3VwIG1lbWJlciBiZWluZyByZW1vdmVkLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2Rpc2FibGVCb2R5XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNhbGxiYWNrSGFuZGxlcjogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjaGlsZC5ib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC5kaXNhYmxlQm9keShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZnJlc2hlcyB0aGUgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXAjY3JlYXRlTXVsdGlwbGVDYWxsYmFja0hhbmRsZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gZW50cmllcyAtIFRoZSBuZXdseSBjcmVhdGVkIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXAjcmVmcmVzaFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVNdWx0aXBsZUNhbGxiYWNrSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgZWFjaCBCb2R5IHRvIHRoZSBwb3NpdGlvbiBvZiBpdHMgcGFyZW50IEdhbWUgT2JqZWN0LlxyXG4gICAgICogQm9keSBzaXplcyBhcmVuJ3QgY2hhbmdlZCAodXNlIHtAbGluayBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5FbmFibGUjcmVmcmVzaEJvZHl9IGZvciB0aGF0KS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNHcm91cCNyZWZyZXNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXB9IFRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSNyZXNldFxyXG4gICAgICovXHJcbiAgICByZWZyZXNoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZW50cmllcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmJvZHkucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRpY1BoeXNpY3NHcm91cDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/StaticPhysicsGroup.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/World.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/World.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ./Body */ \"./node_modules/phaser/src/physics/arcade/Body.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Collider = __webpack_require__(/*! ./Collider */ \"./node_modules/phaser/src/physics/arcade/Collider.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/arcade/events/index.js\");\r\nvar FuzzyEqual = __webpack_require__(/*! ../../math/fuzzy/Equal */ \"./node_modules/phaser/src/math/fuzzy/Equal.js\");\r\nvar FuzzyGreaterThan = __webpack_require__(/*! ../../math/fuzzy/GreaterThan */ \"./node_modules/phaser/src/math/fuzzy/GreaterThan.js\");\r\nvar FuzzyLessThan = __webpack_require__(/*! ../../math/fuzzy/LessThan */ \"./node_modules/phaser/src/math/fuzzy/LessThan.js\");\r\nvar GetOverlapX = __webpack_require__(/*! ./GetOverlapX */ \"./node_modules/phaser/src/physics/arcade/GetOverlapX.js\");\r\nvar GetOverlapY = __webpack_require__(/*! ./GetOverlapY */ \"./node_modules/phaser/src/physics/arcade/GetOverlapY.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar ProcessQueue = __webpack_require__(/*! ../../structs/ProcessQueue */ \"./node_modules/phaser/src/structs/ProcessQueue.js\");\r\nvar ProcessTileCallbacks = __webpack_require__(/*! ./tilemap/ProcessTileCallbacks */ \"./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileCallbacks.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RTree = __webpack_require__(/*! ../../structs/RTree */ \"./node_modules/phaser/src/structs/RTree.js\");\r\nvar SeparateTile = __webpack_require__(/*! ./tilemap/SeparateTile */ \"./node_modules/phaser/src/physics/arcade/tilemap/SeparateTile.js\");\r\nvar SeparateX = __webpack_require__(/*! ./SeparateX */ \"./node_modules/phaser/src/physics/arcade/SeparateX.js\");\r\nvar SeparateY = __webpack_require__(/*! ./SeparateY */ \"./node_modules/phaser/src/physics/arcade/SeparateY.js\");\r\nvar Set = __webpack_require__(/*! ../../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar StaticBody = __webpack_require__(/*! ./StaticBody */ \"./node_modules/phaser/src/physics/arcade/StaticBody.js\");\r\nvar TileIntersectsBody = __webpack_require__(/*! ./tilemap/TileIntersectsBody */ \"./node_modules/phaser/src/physics/arcade/tilemap/TileIntersectsBody.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Arcade Physics World.\r\n *\r\n * The World is responsible for creating, managing, colliding and updating all of the bodies within it.\r\n *\r\n * An instance of the World belongs to a Phaser.Scene and is accessed via the property `physics.world`.\r\n *\r\n * @class World\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Physics.Arcade\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this World instance belongs.\r\n * @param {Phaser.Types.Physics.Arcade.ArcadeWorldConfig} config - An Arcade Physics Configuration object.\r\n */\r\nvar World = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function World (scene, config)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Scene this simulation belongs to.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * Dynamic Bodies in this simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#bodies\r\n         * @type {Phaser.Structs.Set.<Phaser.Physics.Arcade.Body>}\r\n         * @since 3.0.0\r\n         */\r\n        this.bodies = new Set();\r\n\r\n        /**\r\n         * Static Bodies in this simulation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#staticBodies\r\n         * @type {Phaser.Structs.Set.<Phaser.Physics.Arcade.StaticBody>}\r\n         * @since 3.0.0\r\n         */\r\n        this.staticBodies = new Set();\r\n\r\n        /**\r\n         * Static Bodies marked for deletion.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#pendingDestroy\r\n         * @type {Phaser.Structs.Set.<(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)>}\r\n         * @since 3.1.0\r\n         */\r\n        this.pendingDestroy = new Set();\r\n\r\n        /**\r\n         * This simulation's collision processors.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#colliders\r\n         * @type {Phaser.Structs.ProcessQueue.<Phaser.Physics.Arcade.Collider>}\r\n         * @since 3.0.0\r\n         */\r\n        this.colliders = new ProcessQueue();\r\n\r\n        /**\r\n         * Acceleration of Bodies due to gravity, in pixels per second.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#gravity\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.gravity = new Vector2(GetValue(config, 'gravity.x', 0), GetValue(config, 'gravity.y', 0));\r\n\r\n        /**\r\n         * A boundary constraining Bodies.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#bounds\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @since 3.0.0\r\n         */\r\n        this.bounds = new Rectangle(\r\n            GetValue(config, 'x', 0),\r\n            GetValue(config, 'y', 0),\r\n            GetValue(config, 'width', scene.sys.scale.width),\r\n            GetValue(config, 'height', scene.sys.scale.height)\r\n        );\r\n\r\n        /**\r\n         * The boundary edges that Bodies can collide with.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#checkCollision\r\n         * @type {Phaser.Types.Physics.Arcade.CheckCollisionObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.checkCollision = {\r\n            up: GetValue(config, 'checkCollision.up', true),\r\n            down: GetValue(config, 'checkCollision.down', true),\r\n            left: GetValue(config, 'checkCollision.left', true),\r\n            right: GetValue(config, 'checkCollision.right', true)\r\n        };\r\n\r\n        /**\r\n         * The number of physics steps to be taken per second.\r\n         *\r\n         * This property is read-only. Use the `setFPS` method to modify it at run-time.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#fps\r\n         * @readonly\r\n         * @type {number}\r\n         * @default 60\r\n         * @since 3.10.0\r\n         */\r\n        this.fps = GetValue(config, 'fps', 60);\r\n\r\n        /**\r\n         * The amount of elapsed ms since the last frame.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_elapsed\r\n         * @private\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * Internal frame time value.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_frameTime\r\n         * @private\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this._frameTime = 1 / this.fps;\r\n\r\n        /**\r\n         * Internal frame time ms value.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_frameTimeMS\r\n         * @private\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this._frameTimeMS = 1000 * this._frameTime;\r\n\r\n        /**\r\n         * The number of steps that took place in the last frame.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#stepsLastFrame\r\n         * @readonly\r\n         * @type {number}\r\n         * @since 3.10.0\r\n         */\r\n        this.stepsLastFrame = 0;\r\n\r\n        /**\r\n         * Scaling factor applied to the frame rate.\r\n         *\r\n         * - 1.0 = normal speed\r\n         * - 2.0 = half speed\r\n         * - 0.5 = double speed\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.10.0\r\n         */\r\n        this.timeScale = GetValue(config, 'timeScale', 1);\r\n\r\n        /**\r\n         * The maximum absolute difference of a Body's per-step velocity and its overlap with another Body that will result in separation on *each axis*.\r\n         * Larger values favor separation.\r\n         * Smaller values favor no separation.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#OVERLAP_BIAS\r\n         * @type {number}\r\n         * @default 4\r\n         * @since 3.0.0\r\n         */\r\n        this.OVERLAP_BIAS = GetValue(config, 'overlapBias', 4);\r\n\r\n        /**\r\n         * The maximum absolute value of a Body's overlap with a tile that will result in separation on *each axis*.\r\n         * Larger values favor separation.\r\n         * Smaller values favor no separation.\r\n         * The optimum value may be similar to the tile size.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#TILE_BIAS\r\n         * @type {number}\r\n         * @default 16\r\n         * @since 3.0.0\r\n         */\r\n        this.TILE_BIAS = GetValue(config, 'tileBias', 16);\r\n\r\n        /**\r\n         * Always separate overlapping Bodies horizontally before vertically.\r\n         * False (the default) means Bodies are first separated on the axis of greater gravity, or the vertical axis if neither is greater.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#forceX\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.forceX = GetValue(config, 'forceX', false);\r\n\r\n        /**\r\n         * Whether the simulation advances with the game loop.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#isPaused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.isPaused = GetValue(config, 'isPaused', false);\r\n\r\n        /**\r\n         * Temporary total of colliding Bodies.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_total\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._total = 0;\r\n\r\n        /**\r\n         * Enables the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#drawDebug\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.drawDebug = GetValue(config, 'debug', false);\r\n\r\n        /**\r\n         * The graphics object drawing the debug display.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#debugGraphic\r\n         * @type {Phaser.GameObjects.Graphics}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugGraphic;\r\n\r\n        /**\r\n         * Default debug display settings for new Bodies.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#defaults\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeWorldDefaults}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaults = {\r\n            debugShowBody: GetValue(config, 'debugShowBody', true),\r\n            debugShowStaticBody: GetValue(config, 'debugShowStaticBody', true),\r\n            debugShowVelocity: GetValue(config, 'debugShowVelocity', true),\r\n            bodyDebugColor: GetValue(config, 'debugBodyColor', 0xff00ff),\r\n            staticBodyDebugColor: GetValue(config, 'debugStaticBodyColor', 0x0000ff),\r\n            velocityDebugColor: GetValue(config, 'debugVelocityColor', 0x00ff00)\r\n        };\r\n\r\n        /**\r\n         * The maximum number of items per node on the RTree.\r\n         *\r\n         * This is ignored if `useTree` is `false`. If you have a large number of bodies in\r\n         * your world then you may find search performance improves by increasing this value,\r\n         * to allow more items per node and less node division.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#maxEntries\r\n         * @type {integer}\r\n         * @default 16\r\n         * @since 3.0.0\r\n         */\r\n        this.maxEntries = GetValue(config, 'maxEntries', 16);\r\n\r\n        /**\r\n         * Should this Arcade Physics World use an RTree for Dynamic and Static Physics bodies?\r\n         *\r\n         * An RTree is a fast way of spatially sorting of all the bodies in the world.\r\n         * However, at certain limits, the cost of clearing and inserting the bodies into the\r\n         * tree every frame becomes more expensive than the search speed gains it provides.\r\n         *\r\n         * If you have a large number of dynamic bodies in your world then it may be best to\r\n         * disable the use of the RTree by setting this property to `false` in the physics config.\r\n         *\r\n         * The number it can cope with depends on browser and device, but a conservative estimate\r\n         * of around 5,000 bodies should be considered the max before disabling it.\r\n         *\r\n         * This only applies to dynamic bodies. Static bodies are always kept in an RTree,\r\n         * because they don't have to be cleared every frame, so you benefit from the\r\n         * massive search speeds all the time.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#useTree\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.10.0\r\n         */\r\n        this.useTree = GetValue(config, 'useTree', true);\r\n\r\n        /**\r\n         * The spatial index of Dynamic Bodies.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#tree\r\n         * @type {Phaser.Structs.RTree}\r\n         * @since 3.0.0\r\n         */\r\n        this.tree = new RTree(this.maxEntries);\r\n\r\n        /**\r\n         * The spatial index of Static Bodies.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#staticTree\r\n         * @type {Phaser.Structs.RTree}\r\n         * @since 3.0.0\r\n         */\r\n        this.staticTree = new RTree(this.maxEntries);\r\n\r\n        /**\r\n         * Recycled input for tree searches.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#treeMinMax\r\n         * @type {Phaser.Types.Physics.Arcade.ArcadeWorldTreeMinMax}\r\n         * @since 3.0.0\r\n         */\r\n        this.treeMinMax = { minX: 0, minY: 0, maxX: 0, maxY: 0 };\r\n\r\n        /**\r\n         * A temporary Transform Matrix used by bodies for calculations without them needing their own local copy.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_tempMatrix\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix used by bodies for calculations without them needing their own local copy.\r\n         *\r\n         * @name Phaser.Physics.Arcade.World#_tempMatrix2\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            this.createDebugGraphic();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds an Arcade Physics Body to a Game Object, an array of Game Objects, or the children of a Group.\r\n     *\r\n     * The difference between this and the `enableBody` method is that you can pass arrays or Groups\r\n     * to this method.\r\n     *\r\n     * You can specify if the bodies are to be Dynamic or Static. A dynamic body can move via velocity and\r\n     * acceleration. A static body remains fixed in place and as such is able to use an optimized search\r\n     * tree, making it ideal for static elements such as level objects. You can still collide and overlap\r\n     * with static bodies.\r\n     *\r\n     * Normally, rather than calling this method directly, you'd use the helper methods available in the\r\n     * Arcade Physics Factory, such as:\r\n     *\r\n     * ```javascript\r\n     * this.physics.add.image(x, y, textureKey);\r\n     * this.physics.add.sprite(x, y, textureKey);\r\n     * ```\r\n     *\r\n     * Calling factory methods encapsulates the creation of a Game Object and the creation of its\r\n     * body at the same time. If you are creating custom classes then you can pass them to this\r\n     * method to have their bodies created.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#enable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object - The object, or objects, on which to create the bodies.\r\n     * @param {integer} [bodyType] - The type of Body to create. Either `DYNAMIC_BODY` or `STATIC_BODY`.\r\n     */\r\n    enable: function (object, bodyType)\r\n    {\r\n        if (bodyType === undefined) { bodyType = CONST.DYNAMIC_BODY; }\r\n\r\n        if (!Array.isArray(object))\r\n        {\r\n            object = [ object ];\r\n        }\r\n\r\n        for (var i = 0; i < object.length; i++)\r\n        {\r\n            var entry = object[i];\r\n\r\n            if (entry.isParent)\r\n            {\r\n                var children = entry.getChildren();\r\n\r\n                for (var c = 0; c < children.length; c++)\r\n                {\r\n                    var child = children[c];\r\n\r\n                    if (child.isParent)\r\n                    {\r\n                        //  Handle Groups nested inside of Groups\r\n                        this.enable(child, bodyType);\r\n                    }\r\n                    else\r\n                    {\r\n                        this.enableBody(child, bodyType);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                this.enableBody(entry, bodyType);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates an Arcade Physics Body on a single Game Object.\r\n     *\r\n     * If the Game Object already has a body, this method will simply add it back into the simulation.\r\n     *\r\n     * You can specify if the body is Dynamic or Static. A dynamic body can move via velocity and\r\n     * acceleration. A static body remains fixed in place and as such is able to use an optimized search\r\n     * tree, making it ideal for static elements such as level objects. You can still collide and overlap\r\n     * with static bodies.\r\n     *\r\n     * Normally, rather than calling this method directly, you'd use the helper methods available in the\r\n     * Arcade Physics Factory, such as:\r\n     *\r\n     * ```javascript\r\n     * this.physics.add.image(x, y, textureKey);\r\n     * this.physics.add.sprite(x, y, textureKey);\r\n     * ```\r\n     *\r\n     * Calling factory methods encapsulates the creation of a Game Object and the creation of its\r\n     * body at the same time. If you are creating custom classes then you can pass them to this\r\n     * method to have their bodies created.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#enableBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} object - The Game Object on which to create the body.\r\n     * @param {integer} [bodyType] - The type of Body to create. Either `DYNAMIC_BODY` or `STATIC_BODY`.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object on which the body was created.\r\n     */\r\n    enableBody: function (object, bodyType)\r\n    {\r\n        if (bodyType === undefined) { bodyType = CONST.DYNAMIC_BODY; }\r\n\r\n        if (!object.body)\r\n        {\r\n            if (bodyType === CONST.DYNAMIC_BODY)\r\n            {\r\n                object.body = new Body(this, object);\r\n            }\r\n            else if (bodyType === CONST.STATIC_BODY)\r\n            {\r\n                object.body = new StaticBody(this, object);\r\n            }\r\n        }\r\n\r\n        this.add(object.body);\r\n\r\n        return object;\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Arcade Physics Body or StaticBody to the simulation.\r\n     *\r\n     * The body is enabled and added to the local search trees.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#add\r\n     * @since 3.10.0\r\n     *\r\n     * @param {(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)} body - The Body to be added to the simulation.\r\n     *\r\n     * @return {(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)} The Body that was added to the simulation.\r\n     */\r\n    add: function (body)\r\n    {\r\n        if (body.physicsType === CONST.DYNAMIC_BODY)\r\n        {\r\n            this.bodies.set(body);\r\n        }\r\n        else if (body.physicsType === CONST.STATIC_BODY)\r\n        {\r\n            this.staticBodies.set(body);\r\n\r\n            this.staticTree.insert(body);\r\n        }\r\n\r\n        body.enable = true;\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Disables the Arcade Physics Body of a Game Object, an array of Game Objects, or the children of a Group.\r\n     *\r\n     * The difference between this and the `disableBody` method is that you can pass arrays or Groups\r\n     * to this method.\r\n     *\r\n     * The body itself is not deleted, it just has its `enable` property set to false, which\r\n     * means you can re-enable it again at any point by passing it to enable `World.enable` or `World.add`.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#disable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group|Phaser.GameObjects.Group[])} object - The object, or objects, on which to disable the bodies.\r\n     */\r\n    disable: function (object)\r\n    {\r\n        if (!Array.isArray(object))\r\n        {\r\n            object = [ object ];\r\n        }\r\n\r\n        for (var i = 0; i < object.length; i++)\r\n        {\r\n            var entry = object[i];\r\n\r\n            if (entry.isParent)\r\n            {\r\n                var children = entry.getChildren();\r\n\r\n                for (var c = 0; c < children.length; c++)\r\n                {\r\n                    var child = children[c];\r\n\r\n                    if (child.isParent)\r\n                    {\r\n                        //  Handle Groups nested inside of Groups\r\n                        this.disable(child);\r\n                    }\r\n                    else\r\n                    {\r\n                        this.disableBody(child.body);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                this.disableBody(entry.body);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Disables an existing Arcade Physics Body or StaticBody and removes it from the simulation.\r\n     *\r\n     * The body is disabled and removed from the local search trees.\r\n     *\r\n     * The body itself is not deleted, it just has its `enable` property set to false, which\r\n     * means you can re-enable it again at any point by passing it to enable `World.enable` or `World.add`.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#disableBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)} body - The Body to be disabled.\r\n     */\r\n    disableBody: function (body)\r\n    {\r\n        this.remove(body);\r\n\r\n        body.enable = false;\r\n    },\r\n\r\n    /**\r\n     * Removes an existing Arcade Physics Body or StaticBody from the simulation.\r\n     *\r\n     * The body is disabled and removed from the local search trees.\r\n     *\r\n     * The body itself is not deleted, it just has its `enabled` property set to false, which\r\n     * means you can re-enable it again at any point by passing it to enable `enable` or `add`.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody)} body - The body to be removed from the simulation.\r\n     */\r\n    remove: function (body)\r\n    {\r\n        if (body.physicsType === CONST.DYNAMIC_BODY)\r\n        {\r\n            this.tree.remove(body);\r\n            this.bodies.delete(body);\r\n        }\r\n        else if (body.physicsType === CONST.STATIC_BODY)\r\n        {\r\n            this.staticBodies.delete(body);\r\n            this.staticTree.remove(body);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a Graphics Game Object that the world will use to render the debug display to.\r\n     *\r\n     * This is called automatically when the World is instantiated if the `debug` config property\r\n     * was set to `true`. However, you can call it at any point should you need to display the\r\n     * debug Graphic from a fixed point.\r\n     *\r\n     * You can control which objects are drawn to the Graphics object, and the colors they use,\r\n     * by setting the debug properties in the physics config.\r\n     *\r\n     * You should not typically use this in a production game. Use it to aid during debugging.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#createDebugGraphic\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The Graphics object that was created for use by the World.\r\n     */\r\n    createDebugGraphic: function ()\r\n    {\r\n        var graphic = this.scene.sys.add.graphics({ x: 0, y: 0 });\r\n\r\n        graphic.setDepth(Number.MAX_VALUE);\r\n\r\n        this.debugGraphic = graphic;\r\n\r\n        this.drawDebug = true;\r\n\r\n        return graphic;\r\n    },\r\n\r\n    /**\r\n     * Sets the position, size and properties of the World boundary.\r\n     *\r\n     * The World boundary is an invisible rectangle that defines the edges of the World.\r\n     * If a Body is set to collide with the world bounds then it will automatically stop\r\n     * when it reaches any of the edges. You can optionally set which edges of the boundary\r\n     * should be checked against.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#setBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The top-left x coordinate of the boundary.\r\n     * @param {number} y - The top-left y coordinate of the boundary.\r\n     * @param {number} width - The width of the boundary.\r\n     * @param {number} height - The height of the boundary.\r\n     * @param {boolean} [checkLeft] - Should bodies check against the left edge of the boundary?\r\n     * @param {boolean} [checkRight] - Should bodies check against the right edge of the boundary?\r\n     * @param {boolean} [checkUp] - Should bodies check against the top edge of the boundary?\r\n     * @param {boolean} [checkDown] - Should bodies check against the bottom edge of the boundary?\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} This World object.\r\n     */\r\n    setBounds: function (x, y, width, height, checkLeft, checkRight, checkUp, checkDown)\r\n    {\r\n        this.bounds.setTo(x, y, width, height);\r\n\r\n        if (checkLeft !== undefined)\r\n        {\r\n            this.setBoundsCollision(checkLeft, checkRight, checkUp, checkDown);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Enables or disables collisions on each edge of the World boundary.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#setBoundsCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [left=true] - Should bodies check against the left edge of the boundary?\r\n     * @param {boolean} [right=true] - Should bodies check against the right edge of the boundary?\r\n     * @param {boolean} [up=true] - Should bodies check against the top edge of the boundary?\r\n     * @param {boolean} [down=true] - Should bodies check against the bottom edge of the boundary?\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} This World object.\r\n     */\r\n    setBoundsCollision: function (left, right, up, down)\r\n    {\r\n        if (left === undefined) { left = true; }\r\n        if (right === undefined) { right = true; }\r\n        if (up === undefined) { up = true; }\r\n        if (down === undefined) { down = true; }\r\n\r\n        this.checkCollision.left = left;\r\n        this.checkCollision.right = right;\r\n        this.checkCollision.up = up;\r\n        this.checkCollision.down = down;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Pauses the simulation.\r\n     *\r\n     * A paused simulation does not update any existing bodies, or run any Colliders.\r\n     *\r\n     * However, you can still enable and disable bodies within it, or manually run collide or overlap\r\n     * checks.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#pause\r\n     * @fires Phaser.Physics.Arcade.Events#PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} This World object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.isPaused = true;\r\n\r\n        this.emit(Events.PAUSE);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes the simulation, if paused.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#resume\r\n     * @fires Phaser.Physics.Arcade.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} This World object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.isPaused = false;\r\n\r\n        this.emit(Events.RESUME);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Collider object and adds it to the simulation.\r\n     *\r\n     * A Collider is a way to automatically perform collision checks between two objects,\r\n     * calling the collide and process callbacks if they occur.\r\n     *\r\n     * Colliders are run as part of the World update, after all of the Bodies have updated.\r\n     *\r\n     * By creating a Collider you don't need then call `World.collide` in your `update` loop,\r\n     * as it will be handled for you automatically.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#addCollider\r\n     * @since 3.0.0\r\n     * @see Phaser.Physics.Arcade.World#collide\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object to check for collision.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object2 - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - The callback to invoke when the two objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - The callback to invoke when the two objects collide. Must return a boolean.\r\n     * @param {*} [callbackContext] - The scope in which to call the callbacks.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Collider} The Collider that was created.\r\n     */\r\n    addCollider: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (collideCallback === undefined) { collideCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = collideCallback; }\r\n\r\n        var collider = new Collider(this, false, object1, object2, collideCallback, processCallback, callbackContext);\r\n\r\n        this.colliders.add(collider);\r\n\r\n        return collider;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Overlap Collider object and adds it to the simulation.\r\n     *\r\n     * A Collider is a way to automatically perform overlap checks between two objects,\r\n     * calling the collide and process callbacks if they occur.\r\n     *\r\n     * Colliders are run as part of the World update, after all of the Bodies have updated.\r\n     *\r\n     * By creating a Collider you don't need then call `World.overlap` in your `update` loop,\r\n     * as it will be handled for you automatically.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#addOverlap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object to check for overlap.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object2 - The second object to check for overlap.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - The callback to invoke when the two objects overlap.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - The callback to invoke when the two objects overlap. Must return a boolean.\r\n     * @param {*} [callbackContext] - The scope in which to call the callbacks.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.Collider} The Collider that was created.\r\n     */\r\n    addOverlap: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (collideCallback === undefined) { collideCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = collideCallback; }\r\n\r\n        var collider = new Collider(this, true, object1, object2, collideCallback, processCallback, callbackContext);\r\n\r\n        this.colliders.add(collider);\r\n\r\n        return collider;\r\n    },\r\n\r\n    /**\r\n     * Removes a Collider from the simulation so it is no longer processed.\r\n     *\r\n     * This method does not destroy the Collider. If you wish to add it back at a later stage you can call\r\n     * `World.colliders.add(Collider)`.\r\n     *\r\n     * If you no longer need the Collider you can call the `Collider.destroy` method instead, which will\r\n     * automatically clear all of its references and then remove it from the World. If you call destroy on\r\n     * a Collider you _don't_ need to pass it to this method too.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#removeCollider\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Collider} collider - The Collider to remove from the simulation.\r\n     *\r\n     * @return {Phaser.Physics.Arcade.World} This World object.\r\n     */\r\n    removeCollider: function (collider)\r\n    {\r\n        this.colliders.remove(collider);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the frame rate to run the simulation at.\r\n     *\r\n     * The frame rate value is used to simulate a fixed update time step. This fixed\r\n     * time step allows for a straightforward implementation of a deterministic game state.\r\n     *\r\n     * This frame rate is independent of the frequency at which the game is rendering. The\r\n     * higher you set the fps, the more physics simulation steps will occur per game step.\r\n     * Conversely, the lower you set it, the less will take place.\r\n     *\r\n     * You can optionally advance the simulation directly yourself by calling the `step` method.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#setFPS\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} framerate - The frame rate to advance the simulation at.\r\n     *\r\n     * @return {this} This World object.\r\n     */\r\n    setFPS: function (framerate)\r\n    {\r\n        this.fps = framerate;\r\n        this._frameTime = 1 / this.fps;\r\n        this._frameTimeMS = 1000 * this._frameTime;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Advances the simulation based on the elapsed time and fps rate.\r\n     *\r\n     * This is called automatically by your Scene and does not need to be invoked directly.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#update\r\n     * @protected\r\n     * @fires Phaser.Physics.Arcade.Events#WORLD_STEP\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (this.isPaused || this.bodies.size === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var i;\r\n        var fixedDelta = this._frameTime;\r\n        var msPerFrame = this._frameTimeMS * this.timeScale;\r\n\r\n        this._elapsed += delta;\r\n\r\n        //  Update all active bodies\r\n        var body;\r\n        var bodies = this.bodies.entries;\r\n\r\n        //  Will a step happen this frame?\r\n        var willStep = (this._elapsed >= msPerFrame);\r\n\r\n        for (i = 0; i < bodies.length; i++)\r\n        {\r\n            body = bodies[i];\r\n\r\n            if (body.enable)\r\n            {\r\n                body.preUpdate(willStep, fixedDelta);\r\n            }\r\n        }\r\n\r\n        //  We know that a step will happen this frame, so let's bundle it all together to save branching and iteration costs\r\n        if (willStep)\r\n        {\r\n            this._elapsed -= msPerFrame;\r\n            this.stepsLastFrame = 1;\r\n\r\n            //  Optionally populate our dynamic collision tree\r\n            if (this.useTree)\r\n            {\r\n                this.tree.clear();\r\n                this.tree.load(bodies);\r\n            }\r\n\r\n            //  Process any colliders\r\n            var colliders = this.colliders.update();\r\n\r\n            for (i = 0; i < colliders.length; i++)\r\n            {\r\n                var collider = colliders[i];\r\n\r\n                if (collider.active)\r\n                {\r\n                    collider.update();\r\n                }\r\n            }\r\n\r\n            this.emit(Events.WORLD_STEP);\r\n        }\r\n\r\n        //  Process any additional steps this frame\r\n        while (this._elapsed >= msPerFrame)\r\n        {\r\n            this._elapsed -= msPerFrame;\r\n\r\n            this.step(fixedDelta);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Advances the simulation by a time increment.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#step\r\n     * @fires Phaser.Physics.Arcade.Events#WORLD_STEP\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} delta - The delta time amount, in seconds, by which to advance the simulation.\r\n     */\r\n    step: function (delta)\r\n    {\r\n        //  Update all active bodies\r\n        var i;\r\n        var body;\r\n        var bodies = this.bodies.entries;\r\n        var len = bodies.length;\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            body = bodies[i];\r\n\r\n            if (body.enable)\r\n            {\r\n                body.update(delta);\r\n            }\r\n        }\r\n\r\n        //  Optionally populate our dynamic collision tree\r\n        if (this.useTree)\r\n        {\r\n            this.tree.clear();\r\n            this.tree.load(bodies);\r\n        }\r\n\r\n        //  Process any colliders\r\n        var colliders = this.colliders.update();\r\n\r\n        for (i = 0; i < colliders.length; i++)\r\n        {\r\n            var collider = colliders[i];\r\n\r\n            if (collider.active)\r\n            {\r\n                collider.update();\r\n            }\r\n        }\r\n\r\n        this.emit(Events.WORLD_STEP);\r\n\r\n        this.stepsLastFrame++;\r\n    },\r\n\r\n    /**\r\n     * Updates bodies, draws the debug display, and handles pending queue operations.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#postUpdate\r\n     * @since 3.0.0\r\n     */\r\n    postUpdate: function ()\r\n    {\r\n        var i;\r\n        var body;\r\n        var bodies = this.bodies.entries;\r\n        var len = bodies.length;\r\n\r\n        var dynamic = this.bodies;\r\n        var staticBodies = this.staticBodies;\r\n\r\n        //  We don't need to postUpdate if there wasn't a step this frame\r\n        if (this.stepsLastFrame)\r\n        {\r\n            this.stepsLastFrame = 0;\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                body = bodies[i];\r\n\r\n                if (body.enable)\r\n                {\r\n                    body.postUpdate();\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            var graphics = this.debugGraphic;\r\n\r\n            graphics.clear();\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                body = bodies[i];\r\n\r\n                if (body.willDrawDebug())\r\n                {\r\n                    body.drawDebug(graphics);\r\n                }\r\n            }\r\n\r\n            bodies = staticBodies.entries;\r\n            len = bodies.length;\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                body = bodies[i];\r\n\r\n                if (body.willDrawDebug())\r\n                {\r\n                    body.drawDebug(graphics);\r\n                }\r\n            }\r\n        }\r\n\r\n        var pending = this.pendingDestroy;\r\n\r\n        if (pending.size > 0)\r\n        {\r\n            var dynamicTree = this.tree;\r\n            var staticTree = this.staticTree;\r\n\r\n            bodies = pending.entries;\r\n            len = bodies.length;\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                body = bodies[i];\r\n\r\n                if (body.physicsType === CONST.DYNAMIC_BODY)\r\n                {\r\n                    dynamicTree.remove(body);\r\n                    dynamic.delete(body);\r\n                }\r\n                else if (body.physicsType === CONST.STATIC_BODY)\r\n                {\r\n                    staticTree.remove(body);\r\n                    staticBodies.delete(body);\r\n                }\r\n\r\n                body.world = undefined;\r\n                body.gameObject = undefined;\r\n            }\r\n\r\n            pending.clear();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calculates a Body's velocity and updates its position.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#updateMotion\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body - The Body to be updated.\r\n     * @param {number} delta - The delta value to be used in the motion calculations, in seconds.\r\n     */\r\n    updateMotion: function (body, delta)\r\n    {\r\n        if (body.allowRotation)\r\n        {\r\n            this.computeAngularVelocity(body, delta);\r\n        }\r\n\r\n        this.computeVelocity(body, delta);\r\n    },\r\n\r\n    /**\r\n     * Calculates a Body's angular velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#computeAngularVelocity\r\n     * @since 3.10.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body - The Body to compute the velocity for.\r\n     * @param {number} delta - The delta value to be used in the calculation, in seconds.\r\n     */\r\n    computeAngularVelocity: function (body, delta)\r\n    {\r\n        var velocity = body.angularVelocity;\r\n        var acceleration = body.angularAcceleration;\r\n        var drag = body.angularDrag;\r\n        var max = body.maxAngular;\r\n\r\n        if (acceleration)\r\n        {\r\n            velocity += acceleration * delta;\r\n        }\r\n        else if (body.allowDrag && drag)\r\n        {\r\n            drag *= delta;\r\n\r\n            if (FuzzyGreaterThan(velocity - drag, 0, 0.1))\r\n            {\r\n                velocity -= drag;\r\n            }\r\n            else if (FuzzyLessThan(velocity + drag, 0, 0.1))\r\n            {\r\n                velocity += drag;\r\n            }\r\n            else\r\n            {\r\n                velocity = 0;\r\n            }\r\n        }\r\n\r\n        velocity = Clamp(velocity, -max, max);\r\n\r\n        var velocityDelta = velocity - body.angularVelocity;\r\n\r\n        body.angularVelocity += velocityDelta;\r\n        body.rotation += (body.angularVelocity * delta);\r\n    },\r\n\r\n    /**\r\n     * Calculates a Body's per-axis velocity.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#computeVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body - The Body to compute the velocity for.\r\n     * @param {number} delta - The delta value to be used in the calculation, in seconds.\r\n     */\r\n    computeVelocity: function (body, delta)\r\n    {\r\n        var velocityX = body.velocity.x;\r\n        var accelerationX = body.acceleration.x;\r\n        var dragX = body.drag.x;\r\n        var maxX = body.maxVelocity.x;\r\n\r\n        var velocityY = body.velocity.y;\r\n        var accelerationY = body.acceleration.y;\r\n        var dragY = body.drag.y;\r\n        var maxY = body.maxVelocity.y;\r\n\r\n        var speed = body.speed;\r\n        var maxSpeed = body.maxSpeed;\r\n        var allowDrag = body.allowDrag;\r\n        var useDamping = body.useDamping;\r\n\r\n        if (body.allowGravity)\r\n        {\r\n            velocityX += (this.gravity.x + body.gravity.x) * delta;\r\n            velocityY += (this.gravity.y + body.gravity.y) * delta;\r\n        }\r\n\r\n        if (accelerationX)\r\n        {\r\n            velocityX += accelerationX * delta;\r\n        }\r\n        else if (allowDrag && dragX)\r\n        {\r\n            if (useDamping)\r\n            {\r\n                //  Damping based deceleration\r\n\r\n                velocityX *= dragX;\r\n\r\n                speed = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\r\n\r\n                if (FuzzyEqual(speed, 0, 0.001))\r\n                {\r\n                    velocityX = 0;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  Linear deceleration\r\n                dragX *= delta;\r\n\r\n                if (FuzzyGreaterThan(velocityX - dragX, 0, 0.01))\r\n                {\r\n                    velocityX -= dragX;\r\n                }\r\n                else if (FuzzyLessThan(velocityX + dragX, 0, 0.01))\r\n                {\r\n                    velocityX += dragX;\r\n                }\r\n                else\r\n                {\r\n                    velocityX = 0;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (accelerationY)\r\n        {\r\n            velocityY += accelerationY * delta;\r\n        }\r\n        else if (allowDrag && dragY)\r\n        {\r\n            if (useDamping)\r\n            {\r\n                //  Damping based deceleration\r\n                velocityY *= dragY;\r\n\r\n                speed = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\r\n\r\n                if (FuzzyEqual(speed, 0, 0.001))\r\n                {\r\n                    velocityY = 0;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  Linear deceleration\r\n                dragY *= delta;\r\n\r\n                if (FuzzyGreaterThan(velocityY - dragY, 0, 0.01))\r\n                {\r\n                    velocityY -= dragY;\r\n                }\r\n                else if (FuzzyLessThan(velocityY + dragY, 0, 0.01))\r\n                {\r\n                    velocityY += dragY;\r\n                }\r\n                else\r\n                {\r\n                    velocityY = 0;\r\n                }\r\n            }\r\n        }\r\n\r\n        velocityX = Clamp(velocityX, -maxX, maxX);\r\n        velocityY = Clamp(velocityY, -maxY, maxY);\r\n\r\n        body.velocity.set(velocityX, velocityY);\r\n\r\n        if (maxSpeed > -1 && speed > maxSpeed)\r\n        {\r\n            body.velocity.normalize().scale(maxSpeed);\r\n            speed = maxSpeed;\r\n        }\r\n\r\n        body.speed = speed;\r\n    },\r\n\r\n    /**\r\n     * Separates two Bodies.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#separate\r\n     * @fires Phaser.Physics.Arcade.Events#COLLIDE\r\n     * @fires Phaser.Physics.Arcade.Events#OVERLAP\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to be separated.\r\n     * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to be separated.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - The process callback.\r\n     * @param {*} [callbackContext] - The context in which to invoke the callback.\r\n     * @param {boolean} [overlapOnly] - If this a collide or overlap check?\r\n     *\r\n     * @return {boolean} True if separation occurred, otherwise false.\r\n     */\r\n    separate: function (body1, body2, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        if (\r\n            !body1.enable ||\r\n            !body2.enable ||\r\n            body1.checkCollision.none ||\r\n            body2.checkCollision.none ||\r\n            !this.intersects(body1, body2))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  They overlap. Is there a custom process callback? If it returns true then we can carry on, otherwise we should abort.\r\n        if (processCallback && processCallback.call(callbackContext, body1.gameObject, body2.gameObject) === false)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  Circle vs. Circle quick bail out\r\n        if (body1.isCircle && body2.isCircle)\r\n        {\r\n            return this.separateCircle(body1, body2, overlapOnly);\r\n        }\r\n\r\n        // We define the behavior of bodies in a collision circle and rectangle\r\n        // If a collision occurs in the corner points of the rectangle, the body behave like circles\r\n\r\n        //  Either body1 or body2 is a circle\r\n        if (body1.isCircle !== body2.isCircle)\r\n        {\r\n            var bodyRect = (body1.isCircle) ? body2 : body1;\r\n            var bodyCircle = (body1.isCircle) ? body1 : body2;\r\n\r\n            var rect = {\r\n                x: bodyRect.x,\r\n                y: bodyRect.y,\r\n                right: bodyRect.right,\r\n                bottom: bodyRect.bottom\r\n            };\r\n\r\n            var circle = bodyCircle.center;\r\n\r\n            if (circle.y < rect.y || circle.y > rect.bottom)\r\n            {\r\n                if (circle.x < rect.x || circle.x > rect.right)\r\n                {\r\n                    return this.separateCircle(body1, body2, overlapOnly);\r\n                }\r\n            }\r\n        }\r\n\r\n        var resultX = false;\r\n        var resultY = false;\r\n\r\n        //  Do we separate on x or y first?\r\n        if (this.forceX || Math.abs(this.gravity.y + body1.gravity.y) < Math.abs(this.gravity.x + body1.gravity.x))\r\n        {\r\n            resultX = SeparateX(body1, body2, overlapOnly, this.OVERLAP_BIAS);\r\n\r\n            //  Are they still intersecting? Let's do the other axis then\r\n            if (this.intersects(body1, body2))\r\n            {\r\n                resultY = SeparateY(body1, body2, overlapOnly, this.OVERLAP_BIAS);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            resultY = SeparateY(body1, body2, overlapOnly, this.OVERLAP_BIAS);\r\n\r\n            //  Are they still intersecting? Let's do the other axis then\r\n            if (this.intersects(body1, body2))\r\n            {\r\n                resultX = SeparateX(body1, body2, overlapOnly, this.OVERLAP_BIAS);\r\n            }\r\n        }\r\n\r\n        var result = (resultX || resultY);\r\n\r\n        if (result)\r\n        {\r\n            if (overlapOnly)\r\n            {\r\n                if (body1.onOverlap || body2.onOverlap)\r\n                {\r\n                    this.emit(Events.OVERLAP, body1.gameObject, body2.gameObject, body1, body2);\r\n                }\r\n            }\r\n            else if (body1.onCollide || body2.onCollide)\r\n            {\r\n                this.emit(Events.COLLIDE, body1.gameObject, body2.gameObject, body1, body2);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    },\r\n\r\n    /**\r\n     * Separates two Bodies, when both are circular.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#separateCircle\r\n     * @fires Phaser.Physics.Arcade.Events#COLLIDE\r\n     * @fires Phaser.Physics.Arcade.Events#OVERLAP\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body1 - The first Body to be separated.\r\n     * @param {Phaser.Physics.Arcade.Body} body2 - The second Body to be separated.\r\n     * @param {boolean} [overlapOnly] - If this a collide or overlap check?\r\n     * @param {number} [bias] - A small value added to the calculations.\r\n     *\r\n     * @return {boolean} True if separation occurred, otherwise false.\r\n     */\r\n    separateCircle: function (body1, body2, overlapOnly, bias)\r\n    {\r\n        //  Set the bounding box overlap values into the bodies themselves (hence we don't use the return values here)\r\n        GetOverlapX(body1, body2, false, bias);\r\n        GetOverlapY(body1, body2, false, bias);\r\n\r\n        var overlap = 0;\r\n\r\n        if (body1.isCircle !== body2.isCircle)\r\n        {\r\n            var rect = {\r\n                x: (body2.isCircle) ? body1.position.x : body2.position.x,\r\n                y: (body2.isCircle) ? body1.position.y : body2.position.y,\r\n                right: (body2.isCircle) ? body1.right : body2.right,\r\n                bottom: (body2.isCircle) ? body1.bottom : body2.bottom\r\n            };\r\n\r\n            var circle = {\r\n                x: (body1.isCircle) ? body1.center.x : body2.center.x,\r\n                y: (body1.isCircle) ? body1.center.y : body2.center.y,\r\n                radius: (body1.isCircle) ? body1.halfWidth : body2.halfWidth\r\n            };\r\n\r\n            if (circle.y < rect.y)\r\n            {\r\n                if (circle.x < rect.x)\r\n                {\r\n                    overlap = DistanceBetween(circle.x, circle.y, rect.x, rect.y) - circle.radius;\r\n                }\r\n                else if (circle.x > rect.right)\r\n                {\r\n                    overlap = DistanceBetween(circle.x, circle.y, rect.right, rect.y) - circle.radius;\r\n                }\r\n            }\r\n            else if (circle.y > rect.bottom)\r\n            {\r\n                if (circle.x < rect.x)\r\n                {\r\n                    overlap = DistanceBetween(circle.x, circle.y, rect.x, rect.bottom) - circle.radius;\r\n                }\r\n                else if (circle.x > rect.right)\r\n                {\r\n                    overlap = DistanceBetween(circle.x, circle.y, rect.right, rect.bottom) - circle.radius;\r\n                }\r\n            }\r\n\r\n            overlap *= -1;\r\n        }\r\n        else\r\n        {\r\n            overlap = (body1.halfWidth + body2.halfWidth) - DistanceBetween(body1.center.x, body1.center.y, body2.center.x, body2.center.y);\r\n        }\r\n\r\n        //  Can't separate two immovable bodies, or a body with its own custom separation logic\r\n        if (overlapOnly || overlap === 0 || (body1.immovable && body2.immovable) || body1.customSeparateX || body2.customSeparateX)\r\n        {\r\n            if (overlap !== 0 && (body1.onOverlap || body2.onOverlap))\r\n            {\r\n                this.emit(Events.OVERLAP, body1.gameObject, body2.gameObject, body1, body2);\r\n            }\r\n\r\n            //  return true if there was some overlap, otherwise false\r\n            return (overlap !== 0);\r\n        }\r\n\r\n        var dx = body1.center.x - body2.center.x;\r\n        var dy = body1.center.y - body2.center.y;\r\n        var d = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\r\n        var nx = ((body2.center.x - body1.center.x) / d) || 0;\r\n        var ny = ((body2.center.y - body1.center.y) / d) || 0;\r\n        var p = 2 * (body1.velocity.x * nx + body1.velocity.y * ny - body2.velocity.x * nx - body2.velocity.y * ny) / (body1.mass + body2.mass);\r\n\r\n        if (!body1.immovable)\r\n        {\r\n            body1.velocity.x = (body1.velocity.x - p * body1.mass * nx);\r\n            body1.velocity.y = (body1.velocity.y - p * body1.mass * ny);\r\n        }\r\n\r\n        if (!body2.immovable)\r\n        {\r\n            body2.velocity.x = (body2.velocity.x + p * body2.mass * nx);\r\n            body2.velocity.y = (body2.velocity.y + p * body2.mass * ny);\r\n        }\r\n\r\n        var dvx = body2.velocity.x - body1.velocity.x;\r\n        var dvy = body2.velocity.y - body1.velocity.y;\r\n        var angleCollision = Math.atan2(dvy, dvx);\r\n\r\n        var delta = this._frameTime;\r\n\r\n        if (!body1.immovable && !body2.immovable)\r\n        {\r\n            overlap /= 2;\r\n        }\r\n\r\n        if (!body1.immovable)\r\n        {\r\n            body1.x += (body1.velocity.x * delta) - overlap * Math.cos(angleCollision);\r\n            body1.y += (body1.velocity.y * delta) - overlap * Math.sin(angleCollision);\r\n        }\r\n\r\n        if (!body2.immovable)\r\n        {\r\n            body2.x += (body2.velocity.x * delta) + overlap * Math.cos(angleCollision);\r\n            body2.y += (body2.velocity.y * delta) + overlap * Math.sin(angleCollision);\r\n        }\r\n\r\n        body1.velocity.x *= body1.bounce.x;\r\n        body1.velocity.y *= body1.bounce.y;\r\n        body2.velocity.x *= body2.bounce.x;\r\n        body2.velocity.y *= body2.bounce.y;\r\n\r\n        if (body1.onCollide || body2.onCollide)\r\n        {\r\n            this.emit(Events.COLLIDE, body1.gameObject, body2.gameObject, body1, body2);\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if two Bodies intersect at all.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#intersects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} body1 - The first body to check.\r\n     * @param {Phaser.Physics.Arcade.Body} body2 - The second body to check.\r\n     *\r\n     * @return {boolean} True if the two bodies intersect, otherwise false.\r\n     */\r\n    intersects: function (body1, body2)\r\n    {\r\n        if (body1 === body2)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!body1.isCircle && !body2.isCircle)\r\n        {\r\n            //  Rect vs. Rect\r\n            return !(\r\n                body1.right <= body2.position.x ||\r\n                body1.bottom <= body2.position.y ||\r\n                body1.position.x >= body2.right ||\r\n                body1.position.y >= body2.bottom\r\n            );\r\n        }\r\n        else if (body1.isCircle)\r\n        {\r\n            if (body2.isCircle)\r\n            {\r\n                //  Circle vs. Circle\r\n                return DistanceBetween(body1.center.x, body1.center.y, body2.center.x, body2.center.y) <= (body1.halfWidth + body2.halfWidth);\r\n            }\r\n            else\r\n            {\r\n                //  Circle vs. Rect\r\n                return this.circleBodyIntersects(body1, body2);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  Rect vs. Circle\r\n            return this.circleBodyIntersects(body2, body1);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Tests if a circular Body intersects with another Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#circleBodyIntersects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Arcade.Body} circle - The circular body to test.\r\n     * @param {Phaser.Physics.Arcade.Body} body - The rectangular body to test.\r\n     *\r\n     * @return {boolean} True if the two bodies intersect, otherwise false.\r\n     */\r\n    circleBodyIntersects: function (circle, body)\r\n    {\r\n        var x = Clamp(circle.center.x, body.left, body.right);\r\n        var y = Clamp(circle.center.y, body.top, body.bottom);\r\n\r\n        var dx = (circle.center.x - x) * (circle.center.x - x);\r\n        var dy = (circle.center.y - y) * (circle.center.y - y);\r\n\r\n        return (dx + dy) <= (circle.halfWidth * circle.halfWidth);\r\n    },\r\n\r\n    /**\r\n     * Tests if Game Objects overlap.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#overlap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object or array of objects to check.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} [object2] - The second object or array of objects to check, or `undefined`.\r\n     * @param {ArcadePhysicsCallback} [overlapCallback] - An optional callback function that is called if the objects overlap.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they overlap. If this is set then `overlapCallback` will only be called if this callback returns `true`.\r\n     * @param {*} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if at least one Game Object overlaps another.\r\n     */\r\n    overlap: function (object1, object2, overlapCallback, processCallback, callbackContext)\r\n    {\r\n        if (overlapCallback === undefined) { overlapCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = overlapCallback; }\r\n\r\n        return this.collideObjects(object1, object2, overlapCallback, processCallback, callbackContext, true);\r\n    },\r\n\r\n    /**\r\n     * Performs a collision check and separation between the two physics enabled objects given, which can be single\r\n     * Game Objects, arrays of Game Objects, Physics Groups, arrays of Physics Groups or normal Groups.\r\n     *\r\n     * If you don't require separation then use {@link #overlap} instead.\r\n     *\r\n     * If two Groups or arrays are passed, each member of one will be tested against each member of the other.\r\n     *\r\n     * If **only** one Group is passed (as `object1`), each member of the Group will be collided against the other members.\r\n     *\r\n     * If **only** one Array is passed, the array is iterated and every element in it is tested against the others.\r\n     *\r\n     * Two callbacks can be provided. The `collideCallback` is invoked if a collision occurs and the two colliding\r\n     * objects are passed to it.\r\n     *\r\n     * Arcade Physics uses the Projection Method of collision resolution and separation. While it's fast and suitable\r\n     * for 'arcade' style games it lacks stability when multiple objects are in close proximity or resting upon each other.\r\n     * The separation that stops two objects penetrating may create a new penetration against a different object. If you\r\n     * require a high level of stability please consider using an alternative physics system, such as Matter.js.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collide\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object or array of objects to check.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} [object2] - The second object or array of objects to check, or `undefined`.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} `true` if any overlapping Game Objects were separated, otherwise `false`.\r\n     */\r\n    collide: function (object1, object2, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (collideCallback === undefined) { collideCallback = null; }\r\n        if (processCallback === undefined) { processCallback = null; }\r\n        if (callbackContext === undefined) { callbackContext = collideCallback; }\r\n\r\n        return this.collideObjects(object1, object2, collideCallback, processCallback, callbackContext, false);\r\n    },\r\n\r\n    /**\r\n     * Internal helper function. Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideObjects\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object to check for collision.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} [object2] - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} collideCallback - The callback to invoke when the two objects collide.\r\n     * @param {ArcadePhysicsCallback} processCallback - The callback to invoke when the two objects collide. Must return a boolean.\r\n     * @param {any} callbackContext - The scope in which to call the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideObjects: function (object1, object2, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        var i;\r\n        var j;\r\n\r\n        if (object1.isParent && object1.physicsType === undefined)\r\n        {\r\n            object1 = object1.children.entries;\r\n        }\r\n\r\n        if (object2 && object2.isParent && object2.physicsType === undefined)\r\n        {\r\n            object2 = object2.children.entries;\r\n        }\r\n\r\n        var object1isArray = Array.isArray(object1);\r\n        var object2isArray = Array.isArray(object2);\r\n\r\n        this._total = 0;\r\n\r\n        if (!object1isArray && !object2isArray)\r\n        {\r\n            //  Neither of them are arrays - do this first as it's the most common use-case\r\n            this.collideHandler(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n        }\r\n        else if (!object1isArray && object2isArray)\r\n        {\r\n            //  Object 2 is an Array\r\n            for (i = 0; i < object2.length; i++)\r\n            {\r\n                this.collideHandler(object1, object2[i], collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n        }\r\n        else if (object1isArray && !object2isArray)\r\n        {\r\n            //  Object 1 is an Array\r\n            if (!object2)\r\n            {\r\n                //  Special case for array vs. self\r\n                for (i = 0; i < object1.length; i++)\r\n                {\r\n                    var child = object1[i];\r\n\r\n                    for (j = i + 1; j < object1.length; j++)\r\n                    {\r\n                        if (i === j)\r\n                        {\r\n                            continue;\r\n                        }\r\n\r\n                        this.collideHandler(child, object1[j], collideCallback, processCallback, callbackContext, overlapOnly);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                for (i = 0; i < object1.length; i++)\r\n                {\r\n                    this.collideHandler(object1[i], object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  They're both arrays\r\n            for (i = 0; i < object1.length; i++)\r\n            {\r\n                for (j = 0; j < object2.length; j++)\r\n                {\r\n                    this.collideHandler(object1[i], object2[j], collideCallback, processCallback, callbackContext, overlapOnly);\r\n                }\r\n            }\r\n        }\r\n\r\n        return (this._total > 0);\r\n    },\r\n\r\n    /**\r\n     * Internal helper function. Please use Phaser.Physics.Arcade.World#collide and Phaser.Physics.Arcade.World#overlap instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideHandler\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object1 - The first object or array of objects to check.\r\n     * @param {Phaser.Types.Physics.Arcade.ArcadeColliderType} object2 - The second object or array of objects to check, or `undefined`.\r\n     * @param {ArcadePhysicsCallback} collideCallback - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} processCallback - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} callbackContext - The context in which to run the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideHandler: function (object1, object2, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        //  Collide Group with Self\r\n        //  Only collide valid objects\r\n        if (object2 === undefined && object1.isParent)\r\n        {\r\n            return this.collideGroupVsGroup(object1, object1, collideCallback, processCallback, callbackContext, overlapOnly);\r\n        }\r\n\r\n        //  If neither of the objects are set then bail out\r\n        if (!object1 || !object2)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  A Body\r\n        if (object1.body)\r\n        {\r\n            if (object2.body)\r\n            {\r\n                return this.collideSpriteVsSprite(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n            else if (object2.isParent)\r\n            {\r\n                return this.collideSpriteVsGroup(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n            else if (object2.isTilemap)\r\n            {\r\n                return this.collideSpriteVsTilemapLayer(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n        }\r\n\r\n        //  GROUPS\r\n        else if (object1.isParent)\r\n        {\r\n            if (object2.body)\r\n            {\r\n                return this.collideSpriteVsGroup(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n            else if (object2.isParent)\r\n            {\r\n                return this.collideGroupVsGroup(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n            else if (object2.isTilemap)\r\n            {\r\n                return this.collideGroupVsTilemapLayer(object1, object2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n        }\r\n\r\n        //  TILEMAP LAYERS\r\n        else if (object1.isTilemap)\r\n        {\r\n            if (object2.body)\r\n            {\r\n                return this.collideSpriteVsTilemapLayer(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n            else if (object2.isParent)\r\n            {\r\n                return this.collideGroupVsTilemapLayer(object2, object1, collideCallback, processCallback, callbackContext, overlapOnly);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal handler for Sprite vs. Sprite collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideSpriteVsSprite\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite1 - The first object to check for collision.\r\n     * @param {Phaser.GameObjects.GameObject} sprite2 - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideSpriteVsSprite: function (sprite1, sprite2, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        if (!sprite1.body || !sprite2.body)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (this.separate(sprite1.body, sprite2.body, processCallback, callbackContext, overlapOnly))\r\n        {\r\n            if (collideCallback)\r\n            {\r\n                collideCallback.call(callbackContext, sprite1, sprite2);\r\n            }\r\n\r\n            this._total++;\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Internal handler for Sprite vs. Group collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideSpriteVsGroup\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {Phaser.GameObjects.Group} group - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} collideCallback - The callback to invoke when the two objects collide.\r\n     * @param {ArcadePhysicsCallback} processCallback - The callback to invoke when the two objects collide. Must return a boolean.\r\n     * @param {any} callbackContext - The scope in which to call the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} `true` if the Sprite collided with the given Group, otherwise `false`.\r\n     */\r\n    collideSpriteVsGroup: function (sprite, group, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        var bodyA = sprite.body;\r\n\r\n        if (group.length === 0 || !bodyA || !bodyA.enable)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  Does sprite collide with anything?\r\n\r\n        var i;\r\n        var len;\r\n        var bodyB;\r\n\r\n        if (this.useTree)\r\n        {\r\n            var minMax = this.treeMinMax;\r\n\r\n            minMax.minX = bodyA.left;\r\n            minMax.minY = bodyA.top;\r\n            minMax.maxX = bodyA.right;\r\n            minMax.maxY = bodyA.bottom;\r\n\r\n            var results = (group.physicsType === CONST.DYNAMIC_BODY) ? this.tree.search(minMax) : this.staticTree.search(minMax);\r\n\r\n            len = results.length;\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                bodyB = results[i];\r\n\r\n                if (bodyA === bodyB || !group.contains(bodyB.gameObject))\r\n                {\r\n                    //  Skip if comparing against itself, or if bodyB isn't actually part of the Group\r\n                    continue;\r\n                }\r\n\r\n                if (this.separate(bodyA, bodyB, processCallback, callbackContext, overlapOnly))\r\n                {\r\n                    if (collideCallback)\r\n                    {\r\n                        collideCallback.call(callbackContext, bodyA.gameObject, bodyB.gameObject);\r\n                    }\r\n\r\n                    this._total++;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            var children = group.getChildren();\r\n            var skipIndex = group.children.entries.indexOf(sprite);\r\n\r\n            len = children.length;\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                bodyB = children[i].body;\r\n\r\n                if (!bodyB || i === skipIndex || !bodyB.enable)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                if (this.separate(bodyA, bodyB, processCallback, callbackContext, overlapOnly))\r\n                {\r\n                    if (collideCallback)\r\n                    {\r\n                        collideCallback.call(callbackContext, bodyA.gameObject, bodyB.gameObject);\r\n                    }\r\n\r\n                    this._total++;\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal handler for Group vs. Tilemap collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideGroupVsTilemapLayer\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Group} group - The first object to check for collision.\r\n     * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideGroupVsTilemapLayer: function (group, tilemapLayer, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        var children = group.getChildren();\r\n\r\n        if (children.length === 0)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var didCollide = false;\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            if (children[i].body)\r\n            {\r\n                if (this.collideSpriteVsTilemapLayer(children[i], tilemapLayer, collideCallback, processCallback, callbackContext, overlapOnly))\r\n                {\r\n                    didCollide = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return didCollide;\r\n    },\r\n\r\n    /**\r\n     * This advanced method is specifically for testing for collision between a single Sprite and an array of Tile objects.\r\n     *\r\n     * You should generally use the `collide` method instead, with a Sprite vs. a Tilemap Layer, as that will perform\r\n     * tile filtering and culling for you, as well as handle the interesting face collision automatically.\r\n     *\r\n     * This method is offered for those who would like to check for collision with specific Tiles in a layer, without\r\n     * having to set any collision attributes on the tiles in question. This allows you to perform quick dynamic collisions\r\n     * on small sets of Tiles. As such, no culling or checks are made to the array of Tiles given to this method,\r\n     * you should filter them before passing them to this method.\r\n     *\r\n     * Important: Use of this method skips the `interesting faces` system that Tilemap Layers use. This means if you have\r\n     * say a row or column of tiles, and you jump into, or walk over them, it's possible to get stuck on the edges of the\r\n     * tiles as the interesting face calculations are skipped. However, for quick-fire small collision set tests on\r\n     * dynamic maps, this method can prove very useful.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideTiles\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_COLLIDE\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {Phaser.Tilemaps.Tile[]} tiles - An array of Tiles to check for collision against.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideTiles: function (sprite, tiles, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (!sprite.body.enable || tiles.length === 0)\r\n        {\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return this.collideSpriteVsTilesHandler(sprite, tiles, collideCallback, processCallback, callbackContext, false, false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * This advanced method is specifically for testing for overlaps between a single Sprite and an array of Tile objects.\r\n     *\r\n     * You should generally use the `overlap` method instead, with a Sprite vs. a Tilemap Layer, as that will perform\r\n     * tile filtering and culling for you, as well as handle the interesting face collision automatically.\r\n     *\r\n     * This method is offered for those who would like to check for overlaps with specific Tiles in a layer, without\r\n     * having to set any collision attributes on the tiles in question. This allows you to perform quick dynamic overlap\r\n     * tests on small sets of Tiles. As such, no culling or checks are made to the array of Tiles given to this method,\r\n     * you should filter them before passing them to this method.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#overlapTiles\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_OVERLAP\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {Phaser.Tilemaps.Tile[]} tiles - An array of Tiles to check for collision against.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects overlap.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    overlapTiles: function (sprite, tiles, collideCallback, processCallback, callbackContext)\r\n    {\r\n        if (!sprite.body.enable || tiles.length === 0)\r\n        {\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return this.collideSpriteVsTilesHandler(sprite, tiles, collideCallback, processCallback, callbackContext, true, false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal handler for Sprite vs. Tilemap collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideSpriteVsTilemapLayer\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_COLLIDE\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_OVERLAP\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     * @param {boolean} [overlapOnly] - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideSpriteVsTilemapLayer: function (sprite, tilemapLayer, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        var body = sprite.body;\r\n\r\n        if (!body.enable)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var x = body.position.x;\r\n        var y = body.position.y;\r\n        var w = body.width;\r\n        var h = body.height;\r\n\r\n        // TODO: this logic should be encapsulated within the Tilemap API at some point.\r\n        // If the maps base tile size differs from the layer's tile size, we need to adjust the\r\n        // selection area by the difference between the two.\r\n        var layerData = tilemapLayer.layer;\r\n\r\n        if (layerData.tileWidth > layerData.baseTileWidth)\r\n        {\r\n            // The x origin of a tile is the left side, so x and width need to be adjusted.\r\n            var xDiff = (layerData.tileWidth - layerData.baseTileWidth) * tilemapLayer.scaleX;\r\n            x -= xDiff;\r\n            w += xDiff;\r\n        }\r\n\r\n        if (layerData.tileHeight > layerData.baseTileHeight)\r\n        {\r\n            // The y origin of a tile is the bottom side, so just the height needs to be adjusted.\r\n            var yDiff = (layerData.tileHeight - layerData.baseTileHeight) * tilemapLayer.scaleY;\r\n            h += yDiff;\r\n        }\r\n\r\n        var mapData = tilemapLayer.getTilesWithinWorldXY(x, y, w, h);\r\n\r\n        if (mapData.length === 0)\r\n        {\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return this.collideSpriteVsTilesHandler(sprite, mapData, collideCallback, processCallback, callbackContext, overlapOnly, true);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal handler for Sprite vs. Tilemap collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideSpriteVsTilesHandler\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_COLLIDE\r\n     * @fires Phaser.Physics.Arcade.Events#TILE_OVERLAP\r\n     * @private\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The first object to check for collision.\r\n     * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     * @param {boolean} [overlapOnly] - Whether this is a collision or overlap check.\r\n     * @param {boolean} [isLayer] - Is this check coming from a TilemapLayer or an array of tiles?\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideSpriteVsTilesHandler: function (sprite, tiles, collideCallback, processCallback, callbackContext, overlapOnly, isLayer)\r\n    {\r\n        var body = sprite.body;\r\n\r\n        var tile;\r\n        var tileWorldRect = { left: 0, right: 0, top: 0, bottom: 0 };\r\n        var tilemapLayer;\r\n        var collision = false;\r\n\r\n        for (var i = 0; i < tiles.length; i++)\r\n        {\r\n            tile = tiles[i];\r\n\r\n            tilemapLayer = tile.tilemapLayer;\r\n\r\n            tileWorldRect.left = tilemapLayer.tileToWorldX(tile.x);\r\n            tileWorldRect.top = tilemapLayer.tileToWorldY(tile.y);\r\n\r\n            // If the map's base tile size differs from the layer's tile size, only the top of the rect\r\n            // needs to be adjusted since its origin is (0, 1).\r\n            if (tile.baseHeight !== tile.height)\r\n            {\r\n                tileWorldRect.top -= (tile.height - tile.baseHeight) * tilemapLayer.scaleY;\r\n            }\r\n\r\n            tileWorldRect.right = tileWorldRect.left + tile.width * tilemapLayer.scaleX;\r\n            tileWorldRect.bottom = tileWorldRect.top + tile.height * tilemapLayer.scaleY;\r\n\r\n            if (TileIntersectsBody(tileWorldRect, body)\r\n                && (!processCallback || processCallback.call(callbackContext, sprite, tile))\r\n                && ProcessTileCallbacks(tile, sprite)\r\n                && (overlapOnly || SeparateTile(i, body, tile, tileWorldRect, tilemapLayer, this.TILE_BIAS, isLayer)))\r\n            {\r\n                this._total++;\r\n\r\n                collision = true;\r\n\r\n                if (collideCallback)\r\n                {\r\n                    collideCallback.call(callbackContext, sprite, tile);\r\n                }\r\n\r\n                if (overlapOnly && body.onOverlap)\r\n                {\r\n                    this.emit(Events.TILE_OVERLAP, sprite, tile, body);\r\n                }\r\n                else if (body.onCollide)\r\n                {\r\n                    this.emit(Events.TILE_COLLIDE, sprite, tile, body);\r\n                }\r\n            }\r\n        }\r\n\r\n        return collision;\r\n    },\r\n\r\n    /**\r\n     * Internal helper for Group vs. Group collisions.\r\n     * Please use Phaser.Physics.Arcade.World#collide instead.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#collideGroupVsGroup\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Group} group1 - The first object to check for collision.\r\n     * @param {Phaser.GameObjects.Group} group2 - The second object to check for collision.\r\n     * @param {ArcadePhysicsCallback} [collideCallback] - An optional callback function that is called if the objects collide.\r\n     * @param {ArcadePhysicsCallback} [processCallback] - An optional callback function that lets you perform additional checks against the two objects if they collide. If this is set then `collideCallback` will only be called if this callback returns `true`.\r\n     * @param {any} [callbackContext] - The context in which to run the callbacks.\r\n     * @param {boolean} overlapOnly - Whether this is a collision or overlap check.\r\n     *\r\n     * @return {boolean} True if any objects overlap (with `overlapOnly`); or true if any overlapping objects were separated.\r\n     */\r\n    collideGroupVsGroup: function (group1, group2, collideCallback, processCallback, callbackContext, overlapOnly)\r\n    {\r\n        if (group1.length === 0 || group2.length === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var children = group1.getChildren();\r\n\r\n        for (var i = 0; i < children.length; i++)\r\n        {\r\n            this.collideSpriteVsGroup(children[i], group2, collideCallback, processCallback, callbackContext, overlapOnly);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Wrap an object's coordinates (or several objects' coordinates) within {@link Phaser.Physics.Arcade.World#bounds}.\r\n     *\r\n     * If the object is outside any boundary edge (left, top, right, bottom), it will be moved to the same offset from the opposite edge (the interior).\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#wrap\r\n     * @since 3.3.0\r\n     *\r\n     * @param {*} object - A Game Object, a Group, an object with `x` and `y` coordinates, or an array of such objects.\r\n     * @param {number} [padding=0] - An amount added to each boundary edge during the operation.\r\n     */\r\n    wrap: function (object, padding)\r\n    {\r\n        if (object.body)\r\n        {\r\n            this.wrapObject(object, padding);\r\n        }\r\n        else if (object.getChildren)\r\n        {\r\n            this.wrapArray(object.getChildren(), padding);\r\n        }\r\n        else if (Array.isArray(object))\r\n        {\r\n            this.wrapArray(object, padding);\r\n        }\r\n        else\r\n        {\r\n            this.wrapObject(object, padding);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Wrap each object's coordinates within {@link Phaser.Physics.Arcade.World#bounds}.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#wrapArray\r\n     * @since 3.3.0\r\n     *\r\n     * @param {Array.<*>} objects - An array of objects to be wrapped.\r\n     * @param {number} [padding=0] - An amount added to the boundary.\r\n     */\r\n    wrapArray: function (objects, padding)\r\n    {\r\n        for (var i = 0; i < objects.length; i++)\r\n        {\r\n            this.wrapObject(objects[i], padding);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Wrap an object's coordinates within {@link Phaser.Physics.Arcade.World#bounds}.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#wrapObject\r\n     * @since 3.3.0\r\n     *\r\n     * @param {*} object - A Game Object, a Physics Body, or any object with `x` and `y` coordinates\r\n     * @param {number} [padding=0] - An amount added to the boundary.\r\n     */\r\n    wrapObject: function (object, padding)\r\n    {\r\n        if (padding === undefined) { padding = 0; }\r\n\r\n        object.x = Wrap(object.x, this.bounds.left - padding, this.bounds.right + padding);\r\n        object.y = Wrap(object.y, this.bounds.top - padding, this.bounds.bottom + padding);\r\n    },\r\n\r\n    /**\r\n     * Shuts down the simulation, clearing physics data and removing listeners.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.tree.clear();\r\n        this.staticTree.clear();\r\n        this.bodies.clear();\r\n        this.staticBodies.clear();\r\n        this.colliders.destroy();\r\n\r\n        this.removeAllListeners();\r\n    },\r\n\r\n    /**\r\n     * Shuts down the simulation and disconnects it from the current scene.\r\n     *\r\n     * @method Phaser.Physics.Arcade.World#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = World;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9Xb3JsZC5qcz9iMDg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsZ0VBQVE7QUFDM0IsWUFBWSxtQkFBTyxDQUFDLGlFQUFrQjtBQUN0QyxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx3RUFBWTtBQUNuQyxZQUFZLG1CQUFPLENBQUMsa0VBQVM7QUFDN0Isc0JBQXNCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ25FLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywwRUFBVTtBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDakQsdUJBQXVCLG1CQUFPLENBQUMseUZBQThCO0FBQzdELG9CQUFvQixtQkFBTyxDQUFDLG1GQUEyQjtBQUN2RCxrQkFBa0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUN6QyxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLHFGQUE0QjtBQUN2RCwyQkFBMkIsbUJBQU8sQ0FBQyxnSEFBZ0M7QUFDbkUsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELFlBQVksbUJBQU8sQ0FBQyx1RUFBcUI7QUFDekMsbUJBQW1CLG1CQUFPLENBQUMsZ0dBQXdCO0FBQ25ELGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsNEVBQWM7QUFDdkMseUJBQXlCLG1CQUFPLENBQUMsNEdBQThCO0FBQy9ELHNCQUFzQixtQkFBTyxDQUFDLHlIQUE4QztBQUM1RSxjQUFjLG1CQUFPLENBQUMscUVBQW9CO0FBQzFDLFdBQVcsbUJBQU8sQ0FBQywrREFBaUI7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0hBQW9IO0FBQ25JLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsK0JBQStCOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtCQUErQixxQkFBcUI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywrQkFBK0I7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQiw4REFBOEQ7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvSEFBb0g7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOERBQThEO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxhQUFhOztBQUVoRTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxhQUFhO0FBQzlDLGtDQUFrQyxjQUFjO0FBQ2hELCtCQUErQixXQUFXO0FBQzFDLGlDQUFpQyxhQUFhOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RCxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx3QkFBd0I7QUFDcEUsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsbUNBQW1DOztBQUUvRTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0NBQStDO0FBQzlELGVBQWUsK0NBQStDO0FBQzlELGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsd0JBQXdCO0FBQ3BFLDRDQUE0QyxtQ0FBbUM7O0FBRS9FOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQyxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsRUFBRTtBQUNqQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQyxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQyxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQ0FBK0M7QUFDOUQsZUFBZSwrQ0FBK0M7QUFDOUQsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsd0JBQXdCO0FBQ3BFLDRDQUE0QyxtQ0FBbUM7O0FBRS9FO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxlQUFlO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0NBQStDO0FBQzlELGVBQWUsK0NBQStDO0FBQzlELGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx3QkFBd0I7QUFDcEUsNENBQTRDLHdCQUF3QjtBQUNwRSw0Q0FBNEMsbUNBQW1DOztBQUUvRTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RCxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTs7QUFFQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9CQUFvQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RCxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUSxrREFBa0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHlCQUF5QjtBQUN4QyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QyxlQUFlLHlFQUF5RTtBQUN4RixlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSx1QkFBdUI7QUFDdEMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsdUJBQXVCO0FBQ3RDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixRQUFRLGtEQUFrRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHlFQUF5RTtBQUN4RixlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLElBQUk7QUFDbkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUseUVBQXlFO0FBQ3hGLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVEsa0RBQWtEO0FBQzFFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxJQUFJO0FBQ25CLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixRQUFRLGtEQUFrRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4RUFBOEUseUNBQXlDO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLHlDQUF5QztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNENBQTRDLHlDQUF5QztBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvV29ybGQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi9Cb2R5Jyk7XHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvQ2xhbXAnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbGxpZGVyID0gcmVxdWlyZSgnLi9Db2xsaWRlcicpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEZ1enp5RXF1YWwgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2Z1enp5L0VxdWFsJyk7XHJcbnZhciBGdXp6eUdyZWF0ZXJUaGFuID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9mdXp6eS9HcmVhdGVyVGhhbicpO1xyXG52YXIgRnV6enlMZXNzVGhhbiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvZnV6enkvTGVzc1RoYW4nKTtcclxudmFyIEdldE92ZXJsYXBYID0gcmVxdWlyZSgnLi9HZXRPdmVybGFwWCcpO1xyXG52YXIgR2V0T3ZlcmxhcFkgPSByZXF1aXJlKCcuL0dldE92ZXJsYXBZJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgUHJvY2Vzc1F1ZXVlID0gcmVxdWlyZSgnLi4vLi4vc3RydWN0cy9Qcm9jZXNzUXVldWUnKTtcclxudmFyIFByb2Nlc3NUaWxlQ2FsbGJhY2tzID0gcmVxdWlyZSgnLi90aWxlbWFwL1Byb2Nlc3NUaWxlQ2FsbGJhY2tzJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFJUcmVlID0gcmVxdWlyZSgnLi4vLi4vc3RydWN0cy9SVHJlZScpO1xyXG52YXIgU2VwYXJhdGVUaWxlID0gcmVxdWlyZSgnLi90aWxlbWFwL1NlcGFyYXRlVGlsZScpO1xyXG52YXIgU2VwYXJhdGVYID0gcmVxdWlyZSgnLi9TZXBhcmF0ZVgnKTtcclxudmFyIFNlcGFyYXRlWSA9IHJlcXVpcmUoJy4vU2VwYXJhdGVZJyk7XHJcbnZhciBTZXQgPSByZXF1aXJlKCcuLi8uLi9zdHJ1Y3RzL1NldCcpO1xyXG52YXIgU3RhdGljQm9keSA9IHJlcXVpcmUoJy4vU3RhdGljQm9keScpO1xyXG52YXIgVGlsZUludGVyc2VjdHNCb2R5ID0gcmVxdWlyZSgnLi90aWxlbWFwL1RpbGVJbnRlcnNlY3RzQm9keScpO1xyXG52YXIgVHJhbnNmb3JtTWF0cml4ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXgnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxudmFyIFdyYXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1dyYXAnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBBcmNhZGUgUGh5c2ljcyBXb3JsZC5cclxuICpcclxuICogVGhlIFdvcmxkIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZywgbWFuYWdpbmcsIGNvbGxpZGluZyBhbmQgdXBkYXRpbmcgYWxsIG9mIHRoZSBib2RpZXMgd2l0aGluIGl0LlxyXG4gKlxyXG4gKiBBbiBpbnN0YW5jZSBvZiB0aGUgV29ybGQgYmVsb25ncyB0byBhIFBoYXNlci5TY2VuZSBhbmQgaXMgYWNjZXNzZWQgdmlhIHRoZSBwcm9wZXJ0eSBgcGh5c2ljcy53b3JsZGAuXHJcbiAqXHJcbiAqIEBjbGFzcyBXb3JsZFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuQXJjYWRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgV29ybGQgaW5zdGFuY2UgYmVsb25ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlV29ybGRDb25maWd9IGNvbmZpZyAtIEFuIEFyY2FkZSBQaHlzaWNzIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIFdvcmxkID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBXb3JsZCAoc2NlbmUsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRoaXMgc2ltdWxhdGlvbiBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIER5bmFtaWMgQm9kaWVzIGluIHRoaXMgc2ltdWxhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNib2RpZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuU2V0LjxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keT59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2RpZXMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXRpYyBCb2RpZXMgaW4gdGhpcyBzaW11bGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3N0YXRpY0JvZGllc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5Pn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXRpY0JvZGllcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RhdGljIEJvZGllcyBtYXJrZWQgZm9yIGRlbGV0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3BlbmRpbmdEZXN0cm95XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5KT59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBzaW11bGF0aW9uJ3MgY29sbGlzaW9uIHByb2Nlc3NvcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZXJzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZS48UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbGxpZGVyPn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVycyA9IG5ldyBQcm9jZXNzUXVldWUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWNjZWxlcmF0aW9uIG9mIEJvZGllcyBkdWUgdG8gZ3Jhdml0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjZ3Jhdml0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3Jhdml0eSA9IG5ldyBWZWN0b3IyKEdldFZhbHVlKGNvbmZpZywgJ2dyYXZpdHkueCcsIDApLCBHZXRWYWx1ZShjb25maWcsICdncmF2aXR5LnknLCAwKSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgYm91bmRhcnkgY29uc3RyYWluaW5nIEJvZGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmRzID0gbmV3IFJlY3RhbmdsZShcclxuICAgICAgICAgICAgR2V0VmFsdWUoY29uZmlnLCAneCcsIDApLFxyXG4gICAgICAgICAgICBHZXRWYWx1ZShjb25maWcsICd5JywgMCksXHJcbiAgICAgICAgICAgIEdldFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgc2NlbmUuc3lzLnNjYWxlLndpZHRoKSxcclxuICAgICAgICAgICAgR2V0VmFsdWUoY29uZmlnLCAnaGVpZ2h0Jywgc2NlbmUuc3lzLnNjYWxlLmhlaWdodClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYm91bmRhcnkgZWRnZXMgdGhhdCBCb2RpZXMgY2FuIGNvbGxpZGUgd2l0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjaGVja0NvbGxpc2lvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQ2hlY2tDb2xsaXNpb25PYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jaGVja0NvbGxpc2lvbiA9IHtcclxuICAgICAgICAgICAgdXA6IEdldFZhbHVlKGNvbmZpZywgJ2NoZWNrQ29sbGlzaW9uLnVwJywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRvd246IEdldFZhbHVlKGNvbmZpZywgJ2NoZWNrQ29sbGlzaW9uLmRvd24nLCB0cnVlKSxcclxuICAgICAgICAgICAgbGVmdDogR2V0VmFsdWUoY29uZmlnLCAnY2hlY2tDb2xsaXNpb24ubGVmdCcsIHRydWUpLFxyXG4gICAgICAgICAgICByaWdodDogR2V0VmFsdWUoY29uZmlnLCAnY2hlY2tDb2xsaXNpb24ucmlnaHQnLCB0cnVlKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcGh5c2ljcyBzdGVwcyB0byBiZSB0YWtlbiBwZXIgc2Vjb25kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZWFkLW9ubHkuIFVzZSB0aGUgYHNldEZQU2AgbWV0aG9kIHRvIG1vZGlmeSBpdCBhdCBydW4tdGltZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNmcHNcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDYwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnBzID0gR2V0VmFsdWUoY29uZmlnLCAnZnBzJywgNjApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIGVsYXBzZWQgbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjX2VsYXBzZWRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBmcmFtZSB0aW1lIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI19mcmFtZVRpbWVcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lVGltZSA9IDEgLyB0aGlzLmZwcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZnJhbWUgdGltZSBtcyB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNfZnJhbWVUaW1lTVNcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lVGltZU1TID0gMTAwMCAqIHRoaXMuX2ZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0aGF0IHRvb2sgcGxhY2UgaW4gdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjc3RlcHNMYXN0RnJhbWVcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0ZXBzTGFzdEZyYW1lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NhbGluZyBmYWN0b3IgYXBwbGllZCB0byB0aGUgZnJhbWUgcmF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIC0gMS4wID0gbm9ybWFsIHNwZWVkXHJcbiAgICAgICAgICogLSAyLjAgPSBoYWxmIHNwZWVkXHJcbiAgICAgICAgICogLSAwLjUgPSBkb3VibGUgc3BlZWRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCN0aW1lU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lU2NhbGUgPSBHZXRWYWx1ZShjb25maWcsICd0aW1lU2NhbGUnLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gYWJzb2x1dGUgZGlmZmVyZW5jZSBvZiBhIEJvZHkncyBwZXItc3RlcCB2ZWxvY2l0eSBhbmQgaXRzIG92ZXJsYXAgd2l0aCBhbm90aGVyIEJvZHkgdGhhdCB3aWxsIHJlc3VsdCBpbiBzZXBhcmF0aW9uIG9uICplYWNoIGF4aXMqLlxyXG4gICAgICAgICAqIExhcmdlciB2YWx1ZXMgZmF2b3Igc2VwYXJhdGlvbi5cclxuICAgICAgICAgKiBTbWFsbGVyIHZhbHVlcyBmYXZvciBubyBzZXBhcmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI09WRVJMQVBfQklBU1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgNFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuT1ZFUkxBUF9CSUFTID0gR2V0VmFsdWUoY29uZmlnLCAnb3ZlcmxhcEJpYXMnLCA0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gYWJzb2x1dGUgdmFsdWUgb2YgYSBCb2R5J3Mgb3ZlcmxhcCB3aXRoIGEgdGlsZSB0aGF0IHdpbGwgcmVzdWx0IGluIHNlcGFyYXRpb24gb24gKmVhY2ggYXhpcyouXHJcbiAgICAgICAgICogTGFyZ2VyIHZhbHVlcyBmYXZvciBzZXBhcmF0aW9uLlxyXG4gICAgICAgICAqIFNtYWxsZXIgdmFsdWVzIGZhdm9yIG5vIHNlcGFyYXRpb24uXHJcbiAgICAgICAgICogVGhlIG9wdGltdW0gdmFsdWUgbWF5IGJlIHNpbWlsYXIgdG8gdGhlIHRpbGUgc2l6ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNUSUxFX0JJQVNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDE2XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5USUxFX0JJQVMgPSBHZXRWYWx1ZShjb25maWcsICd0aWxlQmlhcycsIDE2KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWx3YXlzIHNlcGFyYXRlIG92ZXJsYXBwaW5nIEJvZGllcyBob3Jpem9udGFsbHkgYmVmb3JlIHZlcnRpY2FsbHkuXHJcbiAgICAgICAgICogRmFsc2UgKHRoZSBkZWZhdWx0KSBtZWFucyBCb2RpZXMgYXJlIGZpcnN0IHNlcGFyYXRlZCBvbiB0aGUgYXhpcyBvZiBncmVhdGVyIGdyYXZpdHksIG9yIHRoZSB2ZXJ0aWNhbCBheGlzIGlmIG5laXRoZXIgaXMgZ3JlYXRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNmb3JjZVhcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9yY2VYID0gR2V0VmFsdWUoY29uZmlnLCAnZm9yY2VYJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBzaW11bGF0aW9uIGFkdmFuY2VzIHdpdGggdGhlIGdhbWUgbG9vcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNpc1BhdXNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IEdldFZhbHVlKGNvbmZpZywgJ2lzUGF1c2VkJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUZW1wb3JhcnkgdG90YWwgb2YgY29sbGlkaW5nIEJvZGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNfdG90YWxcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RvdGFsID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRW5hYmxlcyB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNkcmF3RGVidWdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHJhd0RlYnVnID0gR2V0VmFsdWUoY29uZmlnLCAnZGVidWcnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBncmFwaGljcyBvYmplY3QgZHJhd2luZyB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNkZWJ1Z0dyYXBoaWNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVidWdHcmFwaGljO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0IGRlYnVnIGRpc3BsYXkgc2V0dGluZ3MgZm9yIG5ldyBCb2RpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjZGVmYXVsdHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZVdvcmxkRGVmYXVsdHN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgZGVidWdTaG93Qm9keTogR2V0VmFsdWUoY29uZmlnLCAnZGVidWdTaG93Qm9keScsIHRydWUpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dTdGF0aWNCb2R5OiBHZXRWYWx1ZShjb25maWcsICdkZWJ1Z1Nob3dTdGF0aWNCb2R5JywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRlYnVnU2hvd1ZlbG9jaXR5OiBHZXRWYWx1ZShjb25maWcsICdkZWJ1Z1Nob3dWZWxvY2l0eScsIHRydWUpLFxyXG4gICAgICAgICAgICBib2R5RGVidWdDb2xvcjogR2V0VmFsdWUoY29uZmlnLCAnZGVidWdCb2R5Q29sb3InLCAweGZmMDBmZiksXHJcbiAgICAgICAgICAgIHN0YXRpY0JvZHlEZWJ1Z0NvbG9yOiBHZXRWYWx1ZShjb25maWcsICdkZWJ1Z1N0YXRpY0JvZHlDb2xvcicsIDB4MDAwMGZmKSxcclxuICAgICAgICAgICAgdmVsb2NpdHlEZWJ1Z0NvbG9yOiBHZXRWYWx1ZShjb25maWcsICdkZWJ1Z1ZlbG9jaXR5Q29sb3InLCAweDAwZmYwMClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgcGVyIG5vZGUgb24gdGhlIFJUcmVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBpZ25vcmVkIGlmIGB1c2VUcmVlYCBpcyBgZmFsc2VgLiBJZiB5b3UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBib2RpZXMgaW5cclxuICAgICAgICAgKiB5b3VyIHdvcmxkIHRoZW4geW91IG1heSBmaW5kIHNlYXJjaCBwZXJmb3JtYW5jZSBpbXByb3ZlcyBieSBpbmNyZWFzaW5nIHRoaXMgdmFsdWUsXHJcbiAgICAgICAgICogdG8gYWxsb3cgbW9yZSBpdGVtcyBwZXIgbm9kZSBhbmQgbGVzcyBub2RlIGRpdmlzaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI21heEVudHJpZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxNlxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4RW50cmllcyA9IEdldFZhbHVlKGNvbmZpZywgJ21heEVudHJpZXMnLCAxNik7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGlzIEFyY2FkZSBQaHlzaWNzIFdvcmxkIHVzZSBhbiBSVHJlZSBmb3IgRHluYW1pYyBhbmQgU3RhdGljIFBoeXNpY3MgYm9kaWVzP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQW4gUlRyZWUgaXMgYSBmYXN0IHdheSBvZiBzcGF0aWFsbHkgc29ydGluZyBvZiBhbGwgdGhlIGJvZGllcyBpbiB0aGUgd29ybGQuXHJcbiAgICAgICAgICogSG93ZXZlciwgYXQgY2VydGFpbiBsaW1pdHMsIHRoZSBjb3N0IG9mIGNsZWFyaW5nIGFuZCBpbnNlcnRpbmcgdGhlIGJvZGllcyBpbnRvIHRoZVxyXG4gICAgICAgICAqIHRyZWUgZXZlcnkgZnJhbWUgYmVjb21lcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIHRoZSBzZWFyY2ggc3BlZWQgZ2FpbnMgaXQgcHJvdmlkZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBJZiB5b3UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBkeW5hbWljIGJvZGllcyBpbiB5b3VyIHdvcmxkIHRoZW4gaXQgbWF5IGJlIGJlc3QgdG9cclxuICAgICAgICAgKiBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIFJUcmVlIGJ5IHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgIGluIHRoZSBwaHlzaWNzIGNvbmZpZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgaXQgY2FuIGNvcGUgd2l0aCBkZXBlbmRzIG9uIGJyb3dzZXIgYW5kIGRldmljZSwgYnV0IGEgY29uc2VydmF0aXZlIGVzdGltYXRlXHJcbiAgICAgICAgICogb2YgYXJvdW5kIDUsMDAwIGJvZGllcyBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgbWF4IGJlZm9yZSBkaXNhYmxpbmcgaXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBkeW5hbWljIGJvZGllcy4gU3RhdGljIGJvZGllcyBhcmUgYWx3YXlzIGtlcHQgaW4gYW4gUlRyZWUsXHJcbiAgICAgICAgICogYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgdG8gYmUgY2xlYXJlZCBldmVyeSBmcmFtZSwgc28geW91IGJlbmVmaXQgZnJvbSB0aGVcclxuICAgICAgICAgKiBtYXNzaXZlIHNlYXJjaCBzcGVlZHMgYWxsIHRoZSB0aW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3VzZVRyZWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXNlVHJlZSA9IEdldFZhbHVlKGNvbmZpZywgJ3VzZVRyZWUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwYXRpYWwgaW5kZXggb2YgRHluYW1pYyBCb2RpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjdHJlZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5SVHJlZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRyZWUgPSBuZXcgUlRyZWUodGhpcy5tYXhFbnRyaWVzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwYXRpYWwgaW5kZXggb2YgU3RhdGljIEJvZGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNzdGF0aWNUcmVlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlJUcmVlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RhdGljVHJlZSA9IG5ldyBSVHJlZSh0aGlzLm1heEVudHJpZXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWN5Y2xlZCBpbnB1dCBmb3IgdHJlZSBzZWFyY2hlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCN0cmVlTWluTWF4XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVXb3JsZFRyZWVNaW5NYXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmVlTWluTWF4ID0geyBtaW5YOiAwLCBtaW5ZOiAwLCBtYXhYOiAwLCBtYXhZOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXggdXNlZCBieSBib2RpZXMgZm9yIGNhbGN1bGF0aW9ucyB3aXRob3V0IHRoZW0gbmVlZGluZyB0aGVpciBvd24gbG9jYWwgY29weS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNfdGVtcE1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCB1c2VkIGJ5IGJvZGllcyBmb3IgY2FsY3VsYXRpb25zIHdpdGhvdXQgdGhlbSBuZWVkaW5nIHRoZWlyIG93biBsb2NhbCBjb3B5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI190ZW1wTWF0cml4MlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDIgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyYXdEZWJ1ZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGVidWdHcmFwaGljKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gQXJjYWRlIFBoeXNpY3MgQm9keSB0byBhIEdhbWUgT2JqZWN0LCBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIHRoZSBjaGlsZHJlbiBvZiBhIEdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgdGhlIGBlbmFibGVCb2R5YCBtZXRob2QgaXMgdGhhdCB5b3UgY2FuIHBhc3MgYXJyYXlzIG9yIEdyb3Vwc1xyXG4gICAgICogdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBib2RpZXMgYXJlIHRvIGJlIER5bmFtaWMgb3IgU3RhdGljLiBBIGR5bmFtaWMgYm9keSBjYW4gbW92ZSB2aWEgdmVsb2NpdHkgYW5kXHJcbiAgICAgKiBhY2NlbGVyYXRpb24uIEEgc3RhdGljIGJvZHkgcmVtYWlucyBmaXhlZCBpbiBwbGFjZSBhbmQgYXMgc3VjaCBpcyBhYmxlIHRvIHVzZSBhbiBvcHRpbWl6ZWQgc2VhcmNoXHJcbiAgICAgKiB0cmVlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIHN0YXRpYyBlbGVtZW50cyBzdWNoIGFzIGxldmVsIG9iamVjdHMuIFlvdSBjYW4gc3RpbGwgY29sbGlkZSBhbmQgb3ZlcmxhcFxyXG4gICAgICogd2l0aCBzdGF0aWMgYm9kaWVzLlxyXG4gICAgICpcclxuICAgICAqIE5vcm1hbGx5LCByYXRoZXIgdGhhbiBjYWxsaW5nIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCB5b3UnZCB1c2UgdGhlIGhlbHBlciBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGVcclxuICAgICAqIEFyY2FkZSBQaHlzaWNzIEZhY3RvcnksIHN1Y2ggYXM6XHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5waHlzaWNzLmFkZC5pbWFnZSh4LCB5LCB0ZXh0dXJlS2V5KTtcclxuICAgICAqIHRoaXMucGh5c2ljcy5hZGQuc3ByaXRlKHgsIHksIHRleHR1cmVLZXkpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyBmYWN0b3J5IG1ldGhvZHMgZW5jYXBzdWxhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIEdhbWUgT2JqZWN0IGFuZCB0aGUgY3JlYXRpb24gb2YgaXRzXHJcbiAgICAgKiBib2R5IGF0IHRoZSBzYW1lIHRpbWUuIElmIHlvdSBhcmUgY3JlYXRpbmcgY3VzdG9tIGNsYXNzZXMgdGhlbiB5b3UgY2FuIHBhc3MgdGhlbSB0byB0aGlzXHJcbiAgICAgKiBtZXRob2QgdG8gaGF2ZSB0aGVpciBib2RpZXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNlbmFibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cFtdKX0gb2JqZWN0IC0gVGhlIG9iamVjdCwgb3Igb2JqZWN0cywgb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBib2RpZXMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtib2R5VHlwZV0gLSBUaGUgdHlwZSBvZiBCb2R5IHRvIGNyZWF0ZS4gRWl0aGVyIGBEWU5BTUlDX0JPRFlgIG9yIGBTVEFUSUNfQk9EWWAuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZTogZnVuY3Rpb24gKG9iamVjdCwgYm9keVR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJvZHlUeXBlID09PSB1bmRlZmluZWQpIHsgYm9keVR5cGUgPSBDT05TVC5EWU5BTUlDX0JPRFk7IH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3QgPSBbIG9iamVjdCBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSBvYmplY3RbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkuaXNQYXJlbnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGVudHJ5LmdldENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGlsZHJlbi5sZW5ndGg7IGMrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltjXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzUGFyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIEhhbmRsZSBHcm91cHMgbmVzdGVkIGluc2lkZSBvZiBHcm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoY2hpbGQsIGJvZHlUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVCb2R5KGNoaWxkLCBib2R5VHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVCb2R5KGVudHJ5LCBib2R5VHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5IG9uIGEgc2luZ2xlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhIGJvZHksIHRoaXMgbWV0aG9kIHdpbGwgc2ltcGx5IGFkZCBpdCBiYWNrIGludG8gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBib2R5IGlzIER5bmFtaWMgb3IgU3RhdGljLiBBIGR5bmFtaWMgYm9keSBjYW4gbW92ZSB2aWEgdmVsb2NpdHkgYW5kXHJcbiAgICAgKiBhY2NlbGVyYXRpb24uIEEgc3RhdGljIGJvZHkgcmVtYWlucyBmaXhlZCBpbiBwbGFjZSBhbmQgYXMgc3VjaCBpcyBhYmxlIHRvIHVzZSBhbiBvcHRpbWl6ZWQgc2VhcmNoXHJcbiAgICAgKiB0cmVlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIHN0YXRpYyBlbGVtZW50cyBzdWNoIGFzIGxldmVsIG9iamVjdHMuIFlvdSBjYW4gc3RpbGwgY29sbGlkZSBhbmQgb3ZlcmxhcFxyXG4gICAgICogd2l0aCBzdGF0aWMgYm9kaWVzLlxyXG4gICAgICpcclxuICAgICAqIE5vcm1hbGx5LCByYXRoZXIgdGhhbiBjYWxsaW5nIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCB5b3UnZCB1c2UgdGhlIGhlbHBlciBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGVcclxuICAgICAqIEFyY2FkZSBQaHlzaWNzIEZhY3RvcnksIHN1Y2ggYXM6XHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5waHlzaWNzLmFkZC5pbWFnZSh4LCB5LCB0ZXh0dXJlS2V5KTtcclxuICAgICAqIHRoaXMucGh5c2ljcy5hZGQuc3ByaXRlKHgsIHksIHRleHR1cmVLZXkpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyBmYWN0b3J5IG1ldGhvZHMgZW5jYXBzdWxhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIEdhbWUgT2JqZWN0IGFuZCB0aGUgY3JlYXRpb24gb2YgaXRzXHJcbiAgICAgKiBib2R5IGF0IHRoZSBzYW1lIHRpbWUuIElmIHlvdSBhcmUgY3JlYXRpbmcgY3VzdG9tIGNsYXNzZXMgdGhlbiB5b3UgY2FuIHBhc3MgdGhlbSB0byB0aGlzXHJcbiAgICAgKiBtZXRob2QgdG8gaGF2ZSB0aGVpciBib2RpZXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNlbmFibGVCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBvYmplY3QgLSBUaGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYm9keVR5cGVdIC0gVGhlIHR5cGUgb2YgQm9keSB0byBjcmVhdGUuIEVpdGhlciBgRFlOQU1JQ19CT0RZYCBvciBgU1RBVElDX0JPRFlgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGJvZHkgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUJvZHk6IGZ1bmN0aW9uIChvYmplY3QsIGJvZHlUeXBlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChib2R5VHlwZSA9PT0gdW5kZWZpbmVkKSB7IGJvZHlUeXBlID0gQ09OU1QuRFlOQU1JQ19CT0RZOyB9XHJcblxyXG4gICAgICAgIGlmICghb2JqZWN0LmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYm9keVR5cGUgPT09IENPTlNULkRZTkFNSUNfQk9EWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LmJvZHkgPSBuZXcgQm9keSh0aGlzLCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGJvZHlUeXBlID09PSBDT05TVC5TVEFUSUNfQk9EWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LmJvZHkgPSBuZXcgU3RhdGljQm9keSh0aGlzLCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFkZChvYmplY3QuYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBleGlzdGluZyBBcmNhZGUgUGh5c2ljcyBCb2R5IG9yIFN0YXRpY0JvZHkgdG8gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGJvZHkgaXMgZW5hYmxlZCBhbmQgYWRkZWQgdG8gdGhlIGxvY2FsIHNlYXJjaCB0cmVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNhZGRcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSl9IGJvZHkgLSBUaGUgQm9keSB0byBiZSBhZGRlZCB0byB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl8UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkpfSBUaGUgQm9keSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYm9keSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYm9keS5waHlzaWNzVHlwZSA9PT0gQ09OU1QuRFlOQU1JQ19CT0RZKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2RpZXMuc2V0KGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChib2R5LnBoeXNpY3NUeXBlID09PSBDT05TVC5TVEFUSUNfQk9EWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljQm9kaWVzLnNldChib2R5KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljVHJlZS5pbnNlcnQoYm9keSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBib2R5LmVuYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGVzIHRoZSBBcmNhZGUgUGh5c2ljcyBCb2R5IG9mIGEgR2FtZSBPYmplY3QsIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgdGhlIGNoaWxkcmVuIG9mIGEgR3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCB0aGUgYGRpc2FibGVCb2R5YCBtZXRob2QgaXMgdGhhdCB5b3UgY2FuIHBhc3MgYXJyYXlzIG9yIEdyb3Vwc1xyXG4gICAgICogdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGJvZHkgaXRzZWxmIGlzIG5vdCBkZWxldGVkLCBpdCBqdXN0IGhhcyBpdHMgYGVuYWJsZWAgcHJvcGVydHkgc2V0IHRvIGZhbHNlLCB3aGljaFxyXG4gICAgICogbWVhbnMgeW91IGNhbiByZS1lbmFibGUgaXQgYWdhaW4gYXQgYW55IHBvaW50IGJ5IHBhc3NpbmcgaXQgdG8gZW5hYmxlIGBXb3JsZC5lbmFibGVgIG9yIGBXb3JsZC5hZGRgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2Rpc2FibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cFtdKX0gb2JqZWN0IC0gVGhlIG9iamVjdCwgb3Igb2JqZWN0cywgb24gd2hpY2ggdG8gZGlzYWJsZSB0aGUgYm9kaWVzLlxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlOiBmdW5jdGlvbiAob2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2JqZWN0ID0gWyBvYmplY3QgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gb2JqZWN0W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LmlzUGFyZW50KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbnRyeS5nZXRDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hpbGRyZW4ubGVuZ3RoOyBjKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bY107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc1BhcmVudClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBIYW5kbGUgR3JvdXBzIG5lc3RlZCBpbnNpZGUgb2YgR3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUJvZHkoY2hpbGQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQm9keShlbnRyeS5ib2R5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNhYmxlcyBhbiBleGlzdGluZyBBcmNhZGUgUGh5c2ljcyBCb2R5IG9yIFN0YXRpY0JvZHkgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYm9keSBpcyBkaXNhYmxlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBzZWFyY2ggdHJlZXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGJvZHkgaXRzZWxmIGlzIG5vdCBkZWxldGVkLCBpdCBqdXN0IGhhcyBpdHMgYGVuYWJsZWAgcHJvcGVydHkgc2V0IHRvIGZhbHNlLCB3aGljaFxyXG4gICAgICogbWVhbnMgeW91IGNhbiByZS1lbmFibGUgaXQgYWdhaW4gYXQgYW55IHBvaW50IGJ5IHBhc3NpbmcgaXQgdG8gZW5hYmxlIGBXb3JsZC5lbmFibGVgIG9yIGBXb3JsZC5hZGRgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2Rpc2FibGVCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSl9IGJvZHkgLSBUaGUgQm9keSB0byBiZSBkaXNhYmxlZC5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUJvZHk6IGZ1bmN0aW9uIChib2R5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKGJvZHkpO1xyXG5cclxuICAgICAgICBib2R5LmVuYWJsZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gZXhpc3RpbmcgQXJjYWRlIFBoeXNpY3MgQm9keSBvciBTdGF0aWNCb2R5IGZyb20gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGJvZHkgaXMgZGlzYWJsZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgbG9jYWwgc2VhcmNoIHRyZWVzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBib2R5IGl0c2VsZiBpcyBub3QgZGVsZXRlZCwgaXQganVzdCBoYXMgaXRzIGBlbmFibGVkYCBwcm9wZXJ0eSBzZXQgdG8gZmFsc2UsIHdoaWNoXHJcbiAgICAgKiBtZWFucyB5b3UgY2FuIHJlLWVuYWJsZSBpdCBhZ2FpbiBhdCBhbnkgcG9pbnQgYnkgcGFzc2luZyBpdCB0byBlbmFibGUgYGVuYWJsZWAgb3IgYGFkZGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSl9IGJvZHkgLSBUaGUgYm9keSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKGJvZHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJvZHkucGh5c2ljc1R5cGUgPT09IENPTlNULkRZTkFNSUNfQk9EWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZS5yZW1vdmUoYm9keSk7XHJcbiAgICAgICAgICAgIHRoaXMuYm9kaWVzLmRlbGV0ZShib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm9keS5waHlzaWNzVHlwZSA9PT0gQ09OU1QuU1RBVElDX0JPRFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY0JvZGllcy5kZWxldGUoYm9keSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljVHJlZS5yZW1vdmUoYm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBHcmFwaGljcyBHYW1lIE9iamVjdCB0aGF0IHRoZSB3b3JsZCB3aWxsIHVzZSB0byByZW5kZXIgdGhlIGRlYnVnIGRpc3BsYXkgdG8uXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBXb3JsZCBpcyBpbnN0YW50aWF0ZWQgaWYgdGhlIGBkZWJ1Z2AgY29uZmlnIHByb3BlcnR5XHJcbiAgICAgKiB3YXMgc2V0IHRvIGB0cnVlYC4gSG93ZXZlciwgeW91IGNhbiBjYWxsIGl0IGF0IGFueSBwb2ludCBzaG91bGQgeW91IG5lZWQgdG8gZGlzcGxheSB0aGVcclxuICAgICAqIGRlYnVnIEdyYXBoaWMgZnJvbSBhIGZpeGVkIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gY29udHJvbCB3aGljaCBvYmplY3RzIGFyZSBkcmF3biB0byB0aGUgR3JhcGhpY3Mgb2JqZWN0LCBhbmQgdGhlIGNvbG9ycyB0aGV5IHVzZSxcclxuICAgICAqIGJ5IHNldHRpbmcgdGhlIGRlYnVnIHByb3BlcnRpZXMgaW4gdGhlIHBoeXNpY3MgY29uZmlnLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBzaG91bGQgbm90IHR5cGljYWxseSB1c2UgdGhpcyBpbiBhIHByb2R1Y3Rpb24gZ2FtZS4gVXNlIGl0IHRvIGFpZCBkdXJpbmcgZGVidWdnaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NyZWF0ZURlYnVnR3JhcGhpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGUgR3JhcGhpY3Mgb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQgZm9yIHVzZSBieSB0aGUgV29ybGQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZURlYnVnR3JhcGhpYzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ3JhcGhpYyA9IHRoaXMuc2NlbmUuc3lzLmFkZC5ncmFwaGljcyh7IHg6IDAsIHk6IDAgfSk7XHJcblxyXG4gICAgICAgIGdyYXBoaWMuc2V0RGVwdGgoTnVtYmVyLk1BWF9WQUxVRSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVidWdHcmFwaGljID0gZ3JhcGhpYztcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3RGVidWcgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gZ3JhcGhpYztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiwgc2l6ZSBhbmQgcHJvcGVydGllcyBvZiB0aGUgV29ybGQgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIFdvcmxkIGJvdW5kYXJ5IGlzIGFuIGludmlzaWJsZSByZWN0YW5nbGUgdGhhdCBkZWZpbmVzIHRoZSBlZGdlcyBvZiB0aGUgV29ybGQuXHJcbiAgICAgKiBJZiBhIEJvZHkgaXMgc2V0IHRvIGNvbGxpZGUgd2l0aCB0aGUgd29ybGQgYm91bmRzIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHN0b3BcclxuICAgICAqIHdoZW4gaXQgcmVhY2hlcyBhbnkgb2YgdGhlIGVkZ2VzLiBZb3UgY2FuIG9wdGlvbmFsbHkgc2V0IHdoaWNoIGVkZ2VzIG9mIHRoZSBib3VuZGFyeVxyXG4gICAgICogc2hvdWxkIGJlIGNoZWNrZWQgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNzZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRvcC1sZWZ0IHggY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRhcnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0b3AtbGVmdCB5IGNvb3JkaW5hdGUgb2YgdGhlIGJvdW5kYXJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBib3VuZGFyeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBib3VuZGFyeS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrTGVmdF0gLSBTaG91bGQgYm9kaWVzIGNoZWNrIGFnYWluc3QgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm91bmRhcnk/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja1JpZ2h0XSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYm91bmRhcnk/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja1VwXSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGJvdW5kYXJ5P1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tEb3duXSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdW5kYXJ5P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5kczogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNoZWNrTGVmdCwgY2hlY2tSaWdodCwgY2hlY2tVcCwgY2hlY2tEb3duKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm91bmRzLnNldFRvKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoY2hlY2tMZWZ0ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJvdW5kc0NvbGxpc2lvbihjaGVja0xlZnQsIGNoZWNrUmlnaHQsIGNoZWNrVXAsIGNoZWNrRG93bik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGNvbGxpc2lvbnMgb24gZWFjaCBlZGdlIG9mIHRoZSBXb3JsZCBib3VuZGFyeS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNzZXRCb3VuZHNDb2xsaXNpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9dHJ1ZV0gLSBTaG91bGQgYm9kaWVzIGNoZWNrIGFnYWluc3QgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm91bmRhcnk/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyaWdodD10cnVlXSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYm91bmRhcnk/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cD10cnVlXSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGJvdW5kYXJ5P1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZG93bj10cnVlXSAtIFNob3VsZCBib2RpZXMgY2hlY2sgYWdhaW5zdCB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdW5kYXJ5P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5kc0NvbGxpc2lvbjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCB1cCwgZG93bilcclxuICAgIHtcclxuICAgICAgICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkKSB7IGxlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHJpZ2h0ID09PSB1bmRlZmluZWQpIHsgcmlnaHQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHVwID09PSB1bmRlZmluZWQpIHsgdXAgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGRvd24gPT09IHVuZGVmaW5lZCkgeyBkb3duID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLmNoZWNrQ29sbGlzaW9uLmxlZnQgPSBsZWZ0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb2xsaXNpb24ucmlnaHQgPSByaWdodDtcclxuICAgICAgICB0aGlzLmNoZWNrQ29sbGlzaW9uLnVwID0gdXA7XHJcbiAgICAgICAgdGhpcy5jaGVja0NvbGxpc2lvbi5kb3duID0gZG93bjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIHRoZSBzaW11bGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEEgcGF1c2VkIHNpbXVsYXRpb24gZG9lcyBub3QgdXBkYXRlIGFueSBleGlzdGluZyBib2RpZXMsIG9yIHJ1biBhbnkgQ29sbGlkZXJzLlxyXG4gICAgICpcclxuICAgICAqIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgZW5hYmxlIGFuZCBkaXNhYmxlIGJvZGllcyB3aXRoaW4gaXQsIG9yIG1hbnVhbGx5IHJ1biBjb2xsaWRlIG9yIG92ZXJsYXBcclxuICAgICAqIGNoZWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNwYXVzZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjUEFVU0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBBVVNFKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyB0aGUgc2ltdWxhdGlvbiwgaWYgcGF1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3Jlc3VtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjUkVTVU1FXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGR9IFRoaXMgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFU1VNRSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sbGlkZXIgb2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBzaW11bGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEEgQ29sbGlkZXIgaXMgYSB3YXkgdG8gYXV0b21hdGljYWxseSBwZXJmb3JtIGNvbGxpc2lvbiBjaGVja3MgYmV0d2VlbiB0d28gb2JqZWN0cyxcclxuICAgICAqIGNhbGxpbmcgdGhlIGNvbGxpZGUgYW5kIHByb2Nlc3MgY2FsbGJhY2tzIGlmIHRoZXkgb2NjdXIuXHJcbiAgICAgKlxyXG4gICAgICogQ29sbGlkZXJzIGFyZSBydW4gYXMgcGFydCBvZiB0aGUgV29ybGQgdXBkYXRlLCBhZnRlciBhbGwgb2YgdGhlIEJvZGllcyBoYXZlIHVwZGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQnkgY3JlYXRpbmcgYSBDb2xsaWRlciB5b3UgZG9uJ3QgbmVlZCB0aGVuIGNhbGwgYFdvcmxkLmNvbGxpZGVgIGluIHlvdXIgYHVwZGF0ZWAgbG9vcCxcclxuICAgICAqIGFzIGl0IHdpbGwgYmUgaGFuZGxlZCBmb3IgeW91IGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjYWRkQ29sbGlkZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUNvbGxpZGVyVHlwZX0gb2JqZWN0MSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuQXJjYWRlLkFyY2FkZUNvbGxpZGVyVHlwZX0gb2JqZWN0MiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW2NvbGxpZGVDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuIE11c3QgcmV0dXJuIGEgYm9vbGVhbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gY2FsbCB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlcn0gVGhlIENvbGxpZGVyIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZENvbGxpZGVyOiBmdW5jdGlvbiAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29sbGlkZUNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY29sbGlkZUNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChwcm9jZXNzQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBwcm9jZXNzQ2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrQ29udGV4dCA9IGNvbGxpZGVDYWxsYmFjazsgfVxyXG5cclxuICAgICAgICB2YXIgY29sbGlkZXIgPSBuZXcgQ29sbGlkZXIodGhpcywgZmFsc2UsIG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbGxpZGVycy5hZGQoY29sbGlkZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29sbGlkZXI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBPdmVybGFwIENvbGxpZGVyIG9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBBIENvbGxpZGVyIGlzIGEgd2F5IHRvIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSBvdmVybGFwIGNoZWNrcyBiZXR3ZWVuIHR3byBvYmplY3RzLFxyXG4gICAgICogY2FsbGluZyB0aGUgY29sbGlkZSBhbmQgcHJvY2VzcyBjYWxsYmFja3MgaWYgdGhleSBvY2N1ci5cclxuICAgICAqXHJcbiAgICAgKiBDb2xsaWRlcnMgYXJlIHJ1biBhcyBwYXJ0IG9mIHRoZSBXb3JsZCB1cGRhdGUsIGFmdGVyIGFsbCBvZiB0aGUgQm9kaWVzIGhhdmUgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBCeSBjcmVhdGluZyBhIENvbGxpZGVyIHlvdSBkb24ndCBuZWVkIHRoZW4gY2FsbCBgV29ybGQub3ZlcmxhcGAgaW4geW91ciBgdXBkYXRlYCBsb29wLFxyXG4gICAgICogYXMgaXQgd2lsbCBiZSBoYW5kbGVkIGZvciB5b3UgYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNhZGRPdmVybGFwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IG9iamVjdDEgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNoZWNrIGZvciBvdmVybGFwLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QyIC0gVGhlIHNlY29uZCBvYmplY3QgdG8gY2hlY2sgZm9yIG92ZXJsYXAuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW2NvbGxpZGVDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIG92ZXJsYXAuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIG92ZXJsYXAuIE11c3QgcmV0dXJuIGEgYm9vbGVhbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gY2FsbCB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlcn0gVGhlIENvbGxpZGVyIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZE92ZXJsYXA6IGZ1bmN0aW9uIChvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb2xsaWRlQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjb2xsaWRlQ2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKHByb2Nlc3NDYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IHByb2Nlc3NDYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAoY2FsbGJhY2tDb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2tDb250ZXh0ID0gY29sbGlkZUNhbGxiYWNrOyB9XHJcblxyXG4gICAgICAgIHZhciBjb2xsaWRlciA9IG5ldyBDb2xsaWRlcih0aGlzLCB0cnVlLCBvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlcnMuYWRkKGNvbGxpZGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbGxpZGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBDb2xsaWRlciBmcm9tIHRoZSBzaW11bGF0aW9uIHNvIGl0IGlzIG5vIGxvbmdlciBwcm9jZXNzZWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgZGVzdHJveSB0aGUgQ29sbGlkZXIuIElmIHlvdSB3aXNoIHRvIGFkZCBpdCBiYWNrIGF0IGEgbGF0ZXIgc3RhZ2UgeW91IGNhbiBjYWxsXHJcbiAgICAgKiBgV29ybGQuY29sbGlkZXJzLmFkZChDb2xsaWRlcilgLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBubyBsb25nZXIgbmVlZCB0aGUgQ29sbGlkZXIgeW91IGNhbiBjYWxsIHRoZSBgQ29sbGlkZXIuZGVzdHJveWAgbWV0aG9kIGluc3RlYWQsIHdoaWNoIHdpbGxcclxuICAgICAqIGF1dG9tYXRpY2FsbHkgY2xlYXIgYWxsIG9mIGl0cyByZWZlcmVuY2VzIGFuZCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBXb3JsZC4gSWYgeW91IGNhbGwgZGVzdHJveSBvblxyXG4gICAgICogYSBDb2xsaWRlciB5b3UgX2Rvbid0XyBuZWVkIHRvIHBhc3MgaXQgdG8gdGhpcyBtZXRob2QgdG9vLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3JlbW92ZUNvbGxpZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Db2xsaWRlcn0gY29sbGlkZXIgLSBUaGUgQ29sbGlkZXIgdG8gcmVtb3ZlIGZyb20gdGhlIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ29sbGlkZXI6IGZ1bmN0aW9uIChjb2xsaWRlcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbGxpZGVycy5yZW1vdmUoY29sbGlkZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBmcmFtZSByYXRlIHRvIHJ1biB0aGUgc2ltdWxhdGlvbiBhdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZnJhbWUgcmF0ZSB2YWx1ZSBpcyB1c2VkIHRvIHNpbXVsYXRlIGEgZml4ZWQgdXBkYXRlIHRpbWUgc3RlcC4gVGhpcyBmaXhlZFxyXG4gICAgICogdGltZSBzdGVwIGFsbG93cyBmb3IgYSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gb2YgYSBkZXRlcm1pbmlzdGljIGdhbWUgc3RhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBmcmFtZSByYXRlIGlzIGluZGVwZW5kZW50IG9mIHRoZSBmcmVxdWVuY3kgYXQgd2hpY2ggdGhlIGdhbWUgaXMgcmVuZGVyaW5nLiBUaGVcclxuICAgICAqIGhpZ2hlciB5b3Ugc2V0IHRoZSBmcHMsIHRoZSBtb3JlIHBoeXNpY3Mgc2ltdWxhdGlvbiBzdGVwcyB3aWxsIG9jY3VyIHBlciBnYW1lIHN0ZXAuXHJcbiAgICAgKiBDb252ZXJzZWx5LCB0aGUgbG93ZXIgeW91IHNldCBpdCwgdGhlIGxlc3Mgd2lsbCB0YWtlIHBsYWNlLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBhZHZhbmNlIHRoZSBzaW11bGF0aW9uIGRpcmVjdGx5IHlvdXJzZWxmIGJ5IGNhbGxpbmcgdGhlIGBzdGVwYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjc2V0RlBTXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBmcmFtZXJhdGUgLSBUaGUgZnJhbWUgcmF0ZSB0byBhZHZhbmNlIHRoZSBzaW11bGF0aW9uIGF0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGUFM6IGZ1bmN0aW9uIChmcmFtZXJhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcHMgPSBmcmFtZXJhdGU7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVUaW1lID0gMSAvIHRoaXMuZnBzO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lVGltZU1TID0gMTAwMCAqIHRoaXMuX2ZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWR2YW5jZXMgdGhlIHNpbXVsYXRpb24gYmFzZWQgb24gdGhlIGVsYXBzZWQgdGltZSBhbmQgZnBzIHJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB5b3VyIFNjZW5lIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGludm9rZWQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjdXBkYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkV2ZW50cyNXT1JMRF9TVEVQXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBnZW5lcmF0ZWQgYnkgdGhlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIG9yIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUGF1c2VkIHx8IHRoaXMuYm9kaWVzLnNpemUgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZml4ZWREZWx0YSA9IHRoaXMuX2ZyYW1lVGltZTtcclxuICAgICAgICB2YXIgbXNQZXJGcmFtZSA9IHRoaXMuX2ZyYW1lVGltZU1TICogdGhpcy50aW1lU2NhbGU7XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgKz0gZGVsdGE7XHJcblxyXG4gICAgICAgIC8vICBVcGRhdGUgYWxsIGFjdGl2ZSBib2RpZXNcclxuICAgICAgICB2YXIgYm9keTtcclxuICAgICAgICB2YXIgYm9kaWVzID0gdGhpcy5ib2RpZXMuZW50cmllcztcclxuXHJcbiAgICAgICAgLy8gIFdpbGwgYSBzdGVwIGhhcHBlbiB0aGlzIGZyYW1lP1xyXG4gICAgICAgIHZhciB3aWxsU3RlcCA9ICh0aGlzLl9lbGFwc2VkID49IG1zUGVyRnJhbWUpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmVuYWJsZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keS5wcmVVcGRhdGUod2lsbFN0ZXAsIGZpeGVkRGVsdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgV2Uga25vdyB0aGF0IGEgc3RlcCB3aWxsIGhhcHBlbiB0aGlzIGZyYW1lLCBzbyBsZXQncyBidW5kbGUgaXQgYWxsIHRvZ2V0aGVyIHRvIHNhdmUgYnJhbmNoaW5nIGFuZCBpdGVyYXRpb24gY29zdHNcclxuICAgICAgICBpZiAod2lsbFN0ZXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lbGFwc2VkIC09IG1zUGVyRnJhbWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcHNMYXN0RnJhbWUgPSAxO1xyXG5cclxuICAgICAgICAgICAgLy8gIE9wdGlvbmFsbHkgcG9wdWxhdGUgb3VyIGR5bmFtaWMgY29sbGlzaW9uIHRyZWVcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlVHJlZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWUubG9hZChib2RpZXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgUHJvY2VzcyBhbnkgY29sbGlkZXJzXHJcbiAgICAgICAgICAgIHZhciBjb2xsaWRlcnMgPSB0aGlzLmNvbGxpZGVycy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xsaWRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xsaWRlciA9IGNvbGxpZGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlkZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpZGVyLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLldPUkxEX1NURVApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFByb2Nlc3MgYW55IGFkZGl0aW9uYWwgc3RlcHMgdGhpcyBmcmFtZVxyXG4gICAgICAgIHdoaWxlICh0aGlzLl9lbGFwc2VkID49IG1zUGVyRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lbGFwc2VkIC09IG1zUGVyRnJhbWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXAoZml4ZWREZWx0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBzaW11bGF0aW9uIGJ5IGEgdGltZSBpbmNyZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjc3RlcFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjV09STERfU1RFUFxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGFtb3VudCwgaW4gc2Vjb25kcywgYnkgd2hpY2ggdG8gYWR2YW5jZSB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBVcGRhdGUgYWxsIGFjdGl2ZSBib2RpZXNcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgYm9keTtcclxuICAgICAgICB2YXIgYm9kaWVzID0gdGhpcy5ib2RpZXMuZW50cmllcztcclxuICAgICAgICB2YXIgbGVuID0gYm9kaWVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmVuYWJsZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keS51cGRhdGUoZGVsdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgT3B0aW9uYWxseSBwb3B1bGF0ZSBvdXIgZHluYW1pYyBjb2xsaXNpb24gdHJlZVxyXG4gICAgICAgIGlmICh0aGlzLnVzZVRyZWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWUuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy50cmVlLmxvYWQoYm9kaWVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBQcm9jZXNzIGFueSBjb2xsaWRlcnNcclxuICAgICAgICB2YXIgY29sbGlkZXJzID0gdGhpcy5jb2xsaWRlcnMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xsaWRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29sbGlkZXIgPSBjb2xsaWRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoY29sbGlkZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb2xsaWRlci51cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5XT1JMRF9TVEVQKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGVwc0xhc3RGcmFtZSsrO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgYm9kaWVzLCBkcmF3cyB0aGUgZGVidWcgZGlzcGxheSwgYW5kIGhhbmRsZXMgcGVuZGluZyBxdWV1ZSBvcGVyYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3Bvc3RVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwb3N0VXBkYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBib2R5O1xyXG4gICAgICAgIHZhciBib2RpZXMgPSB0aGlzLmJvZGllcy5lbnRyaWVzO1xyXG4gICAgICAgIHZhciBsZW4gPSBib2RpZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgZHluYW1pYyA9IHRoaXMuYm9kaWVzO1xyXG4gICAgICAgIHZhciBzdGF0aWNCb2RpZXMgPSB0aGlzLnN0YXRpY0JvZGllcztcclxuXHJcbiAgICAgICAgLy8gIFdlIGRvbid0IG5lZWQgdG8gcG9zdFVwZGF0ZSBpZiB0aGVyZSB3YXNuJ3QgYSBzdGVwIHRoaXMgZnJhbWVcclxuICAgICAgICBpZiAodGhpcy5zdGVwc0xhc3RGcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcHNMYXN0RnJhbWUgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5LmVuYWJsZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnBvc3RVcGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJhd0RlYnVnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdyYXBoaWNzID0gdGhpcy5kZWJ1Z0dyYXBoaWM7XHJcblxyXG4gICAgICAgICAgICBncmFwaGljcy5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5LndpbGxEcmF3RGVidWcoKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmRyYXdEZWJ1ZyhncmFwaGljcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvZGllcyA9IHN0YXRpY0JvZGllcy5lbnRyaWVzO1xyXG4gICAgICAgICAgICBsZW4gPSBib2RpZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5LndpbGxEcmF3RGVidWcoKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmRyYXdEZWJ1ZyhncmFwaGljcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwZW5kaW5nID0gdGhpcy5wZW5kaW5nRGVzdHJveTtcclxuXHJcbiAgICAgICAgaWYgKHBlbmRpbmcuc2l6ZSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZHluYW1pY1RyZWUgPSB0aGlzLnRyZWU7XHJcbiAgICAgICAgICAgIHZhciBzdGF0aWNUcmVlID0gdGhpcy5zdGF0aWNUcmVlO1xyXG5cclxuICAgICAgICAgICAgYm9kaWVzID0gcGVuZGluZy5lbnRyaWVzO1xyXG4gICAgICAgICAgICBsZW4gPSBib2RpZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5LnBoeXNpY3NUeXBlID09PSBDT05TVC5EWU5BTUlDX0JPRFkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY1RyZWUucmVtb3ZlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMuZGVsZXRlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYm9keS5waHlzaWNzVHlwZSA9PT0gQ09OU1QuU1RBVElDX0JPRFkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljVHJlZS5yZW1vdmUoYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQm9kaWVzLmRlbGV0ZShib2R5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBib2R5LndvcmxkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgYm9keS5nYW1lT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwZW5kaW5nLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSBCb2R5J3MgdmVsb2NpdHkgYW5kIHVwZGF0ZXMgaXRzIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3VwZGF0ZU1vdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keSAtIFRoZSBCb2R5IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUgbW90aW9uIGNhbGN1bGF0aW9ucywgaW4gc2Vjb25kcy5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlTW90aW9uOiBmdW5jdGlvbiAoYm9keSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJvZHkuYWxsb3dSb3RhdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZUFuZ3VsYXJWZWxvY2l0eShib2R5LCBkZWx0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbXB1dGVWZWxvY2l0eShib2R5LCBkZWx0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhIEJvZHkncyBhbmd1bGFyIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbXB1dGVBbmd1bGFyVmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEJvZHkgdG8gY29tcHV0ZSB0aGUgdmVsb2NpdHkgZm9yLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLCBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBjb21wdXRlQW5ndWxhclZlbG9jaXR5OiBmdW5jdGlvbiAoYm9keSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gYm9keS5hbmd1bGFyVmVsb2NpdHk7XHJcbiAgICAgICAgdmFyIGFjY2VsZXJhdGlvbiA9IGJvZHkuYW5ndWxhckFjY2VsZXJhdGlvbjtcclxuICAgICAgICB2YXIgZHJhZyA9IGJvZHkuYW5ndWxhckRyYWc7XHJcbiAgICAgICAgdmFyIG1heCA9IGJvZHkubWF4QW5ndWxhcjtcclxuXHJcbiAgICAgICAgaWYgKGFjY2VsZXJhdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZlbG9jaXR5ICs9IGFjY2VsZXJhdGlvbiAqIGRlbHRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChib2R5LmFsbG93RHJhZyAmJiBkcmFnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZHJhZyAqPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIGlmIChGdXp6eUdyZWF0ZXJUaGFuKHZlbG9jaXR5IC0gZHJhZywgMCwgMC4xKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmVsb2NpdHkgLT0gZHJhZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChGdXp6eUxlc3NUaGFuKHZlbG9jaXR5ICsgZHJhZywgMCwgMC4xKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmVsb2NpdHkgKz0gZHJhZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZlbG9jaXR5ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVsb2NpdHkgPSBDbGFtcCh2ZWxvY2l0eSwgLW1heCwgbWF4KTtcclxuXHJcbiAgICAgICAgdmFyIHZlbG9jaXR5RGVsdGEgPSB2ZWxvY2l0eSAtIGJvZHkuYW5ndWxhclZlbG9jaXR5O1xyXG5cclxuICAgICAgICBib2R5LmFuZ3VsYXJWZWxvY2l0eSArPSB2ZWxvY2l0eURlbHRhO1xyXG4gICAgICAgIGJvZHkucm90YXRpb24gKz0gKGJvZHkuYW5ndWxhclZlbG9jaXR5ICogZGVsdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSBCb2R5J3MgcGVyLWF4aXMgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29tcHV0ZVZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEJvZHkgdG8gY29tcHV0ZSB0aGUgdmVsb2NpdHkgZm9yLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLCBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBjb21wdXRlVmVsb2NpdHk6IGZ1bmN0aW9uIChib2R5LCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdmVsb2NpdHlYID0gYm9keS52ZWxvY2l0eS54O1xyXG4gICAgICAgIHZhciBhY2NlbGVyYXRpb25YID0gYm9keS5hY2NlbGVyYXRpb24ueDtcclxuICAgICAgICB2YXIgZHJhZ1ggPSBib2R5LmRyYWcueDtcclxuICAgICAgICB2YXIgbWF4WCA9IGJvZHkubWF4VmVsb2NpdHkueDtcclxuXHJcbiAgICAgICAgdmFyIHZlbG9jaXR5WSA9IGJvZHkudmVsb2NpdHkueTtcclxuICAgICAgICB2YXIgYWNjZWxlcmF0aW9uWSA9IGJvZHkuYWNjZWxlcmF0aW9uLnk7XHJcbiAgICAgICAgdmFyIGRyYWdZID0gYm9keS5kcmFnLnk7XHJcbiAgICAgICAgdmFyIG1heFkgPSBib2R5Lm1heFZlbG9jaXR5Lnk7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IGJvZHkuc3BlZWQ7XHJcbiAgICAgICAgdmFyIG1heFNwZWVkID0gYm9keS5tYXhTcGVlZDtcclxuICAgICAgICB2YXIgYWxsb3dEcmFnID0gYm9keS5hbGxvd0RyYWc7XHJcbiAgICAgICAgdmFyIHVzZURhbXBpbmcgPSBib2R5LnVzZURhbXBpbmc7XHJcblxyXG4gICAgICAgIGlmIChib2R5LmFsbG93R3Jhdml0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZlbG9jaXR5WCArPSAodGhpcy5ncmF2aXR5LnggKyBib2R5LmdyYXZpdHkueCkgKiBkZWx0YTtcclxuICAgICAgICAgICAgdmVsb2NpdHlZICs9ICh0aGlzLmdyYXZpdHkueSArIGJvZHkuZ3Jhdml0eS55KSAqIGRlbHRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjY2VsZXJhdGlvblgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2ZWxvY2l0eVggKz0gYWNjZWxlcmF0aW9uWCAqIGRlbHRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGxvd0RyYWcgJiYgZHJhZ1gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodXNlRGFtcGluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIERhbXBpbmcgYmFzZWQgZGVjZWxlcmF0aW9uXHJcblxyXG4gICAgICAgICAgICAgICAgdmVsb2NpdHlYICo9IGRyYWdYO1xyXG5cclxuICAgICAgICAgICAgICAgIHNwZWVkID0gTWF0aC5zcXJ0KHZlbG9jaXR5WCAqIHZlbG9jaXR5WCArIHZlbG9jaXR5WSAqIHZlbG9jaXR5WSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKEZ1enp5RXF1YWwoc3BlZWQsIDAsIDAuMDAxKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eVggPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIExpbmVhciBkZWNlbGVyYXRpb25cclxuICAgICAgICAgICAgICAgIGRyYWdYICo9IGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChGdXp6eUdyZWF0ZXJUaGFuKHZlbG9jaXR5WCAtIGRyYWdYLCAwLCAwLjAxKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eVggLT0gZHJhZ1g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChGdXp6eUxlc3NUaGFuKHZlbG9jaXR5WCArIGRyYWdYLCAwLCAwLjAxKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eVggKz0gZHJhZ1g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHlYID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjY2VsZXJhdGlvblkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2ZWxvY2l0eVkgKz0gYWNjZWxlcmF0aW9uWSAqIGRlbHRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGxvd0RyYWcgJiYgZHJhZ1kpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodXNlRGFtcGluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIERhbXBpbmcgYmFzZWQgZGVjZWxlcmF0aW9uXHJcbiAgICAgICAgICAgICAgICB2ZWxvY2l0eVkgKj0gZHJhZ1k7XHJcblxyXG4gICAgICAgICAgICAgICAgc3BlZWQgPSBNYXRoLnNxcnQodmVsb2NpdHlYICogdmVsb2NpdHlYICsgdmVsb2NpdHlZICogdmVsb2NpdHlZKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoRnV6enlFcXVhbChzcGVlZCwgMCwgMC4wMDEpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlbG9jaXR5WSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgTGluZWFyIGRlY2VsZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgZHJhZ1kgKj0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKEZ1enp5R3JlYXRlclRoYW4odmVsb2NpdHlZIC0gZHJhZ1ksIDAsIDAuMDEpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlbG9jaXR5WSAtPSBkcmFnWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEZ1enp5TGVzc1RoYW4odmVsb2NpdHlZICsgZHJhZ1ksIDAsIDAuMDEpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlbG9jaXR5WSArPSBkcmFnWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eVkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZWxvY2l0eVggPSBDbGFtcCh2ZWxvY2l0eVgsIC1tYXhYLCBtYXhYKTtcclxuICAgICAgICB2ZWxvY2l0eVkgPSBDbGFtcCh2ZWxvY2l0eVksIC1tYXhZLCBtYXhZKTtcclxuXHJcbiAgICAgICAgYm9keS52ZWxvY2l0eS5zZXQodmVsb2NpdHlYLCB2ZWxvY2l0eVkpO1xyXG5cclxuICAgICAgICBpZiAobWF4U3BlZWQgPiAtMSAmJiBzcGVlZCA+IG1heFNwZWVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keS52ZWxvY2l0eS5ub3JtYWxpemUoKS5zY2FsZShtYXhTcGVlZCk7XHJcbiAgICAgICAgICAgIHNwZWVkID0gbWF4U3BlZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBib2R5LnNwZWVkID0gc3BlZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VwYXJhdGVzIHR3byBCb2RpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjc2VwYXJhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI0NPTExJREVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI09WRVJMQVBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IEJvZHkgdG8gYmUgc2VwYXJhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keTIgLSBUaGUgc2Vjb25kIEJvZHkgdG8gYmUgc2VwYXJhdGVkLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtwcm9jZXNzQ2FsbGJhY2tdIC0gVGhlIHByb2Nlc3MgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0geyp9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gaW52b2tlIHRoZSBjYWxsYmFjay5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW292ZXJsYXBPbmx5XSAtIElmIHRoaXMgYSBjb2xsaWRlIG9yIG92ZXJsYXAgY2hlY2s/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBzZXBhcmF0aW9uIG9jY3VycmVkLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHNlcGFyYXRlOiBmdW5jdGlvbiAoYm9keTEsIGJvZHkyLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhYm9keTEuZW5hYmxlIHx8XHJcbiAgICAgICAgICAgICFib2R5Mi5lbmFibGUgfHxcclxuICAgICAgICAgICAgYm9keTEuY2hlY2tDb2xsaXNpb24ubm9uZSB8fFxyXG4gICAgICAgICAgICBib2R5Mi5jaGVja0NvbGxpc2lvbi5ub25lIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmludGVyc2VjdHMoYm9keTEsIGJvZHkyKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGV5IG92ZXJsYXAuIElzIHRoZXJlIGEgY3VzdG9tIHByb2Nlc3MgY2FsbGJhY2s/IElmIGl0IHJldHVybnMgdHJ1ZSB0aGVuIHdlIGNhbiBjYXJyeSBvbiwgb3RoZXJ3aXNlIHdlIHNob3VsZCBhYm9ydC5cclxuICAgICAgICBpZiAocHJvY2Vzc0NhbGxiYWNrICYmIHByb2Nlc3NDYWxsYmFjay5jYWxsKGNhbGxiYWNrQ29udGV4dCwgYm9keTEuZ2FtZU9iamVjdCwgYm9keTIuZ2FtZU9iamVjdCkgPT09IGZhbHNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIENpcmNsZSB2cy4gQ2lyY2xlIHF1aWNrIGJhaWwgb3V0XHJcbiAgICAgICAgaWYgKGJvZHkxLmlzQ2lyY2xlICYmIGJvZHkyLmlzQ2lyY2xlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VwYXJhdGVDaXJjbGUoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXZSBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIGJvZGllcyBpbiBhIGNvbGxpc2lvbiBjaXJjbGUgYW5kIHJlY3RhbmdsZVxyXG4gICAgICAgIC8vIElmIGEgY29sbGlzaW9uIG9jY3VycyBpbiB0aGUgY29ybmVyIHBvaW50cyBvZiB0aGUgcmVjdGFuZ2xlLCB0aGUgYm9keSBiZWhhdmUgbGlrZSBjaXJjbGVzXHJcblxyXG4gICAgICAgIC8vICBFaXRoZXIgYm9keTEgb3IgYm9keTIgaXMgYSBjaXJjbGVcclxuICAgICAgICBpZiAoYm9keTEuaXNDaXJjbGUgIT09IGJvZHkyLmlzQ2lyY2xlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvZHlSZWN0ID0gKGJvZHkxLmlzQ2lyY2xlKSA/IGJvZHkyIDogYm9keTE7XHJcbiAgICAgICAgICAgIHZhciBib2R5Q2lyY2xlID0gKGJvZHkxLmlzQ2lyY2xlKSA/IGJvZHkxIDogYm9keTI7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IGJvZHlSZWN0LngsXHJcbiAgICAgICAgICAgICAgICB5OiBib2R5UmVjdC55LFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGJvZHlSZWN0LnJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiBib2R5UmVjdC5ib3R0b21cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjaXJjbGUgPSBib2R5Q2lyY2xlLmNlbnRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaXJjbGUueSA8IHJlY3QueSB8fCBjaXJjbGUueSA+IHJlY3QuYm90dG9tKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2lyY2xlLnggPCByZWN0LnggfHwgY2lyY2xlLnggPiByZWN0LnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRlQ2lyY2xlKGJvZHkxLCBib2R5Miwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0WCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciByZXN1bHRZID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vICBEbyB3ZSBzZXBhcmF0ZSBvbiB4IG9yIHkgZmlyc3Q/XHJcbiAgICAgICAgaWYgKHRoaXMuZm9yY2VYIHx8IE1hdGguYWJzKHRoaXMuZ3Jhdml0eS55ICsgYm9keTEuZ3Jhdml0eS55KSA8IE1hdGguYWJzKHRoaXMuZ3Jhdml0eS54ICsgYm9keTEuZ3Jhdml0eS54KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc3VsdFggPSBTZXBhcmF0ZVgoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgdGhpcy5PVkVSTEFQX0JJQVMpO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFyZSB0aGV5IHN0aWxsIGludGVyc2VjdGluZz8gTGV0J3MgZG8gdGhlIG90aGVyIGF4aXMgdGhlblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnNlY3RzKGJvZHkxLCBib2R5MikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFkgPSBTZXBhcmF0ZVkoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgdGhpcy5PVkVSTEFQX0JJQVMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc3VsdFkgPSBTZXBhcmF0ZVkoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgdGhpcy5PVkVSTEFQX0JJQVMpO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFyZSB0aGV5IHN0aWxsIGludGVyc2VjdGluZz8gTGV0J3MgZG8gdGhlIG90aGVyIGF4aXMgdGhlblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnNlY3RzKGJvZHkxLCBib2R5MikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFggPSBTZXBhcmF0ZVgoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgdGhpcy5PVkVSTEFQX0JJQVMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gKHJlc3VsdFggfHwgcmVzdWx0WSk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAob3ZlcmxhcE9ubHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChib2R5MS5vbk92ZXJsYXAgfHwgYm9keTIub25PdmVybGFwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuT1ZFUkxBUCwgYm9keTEuZ2FtZU9iamVjdCwgYm9keTIuZ2FtZU9iamVjdCwgYm9keTEsIGJvZHkyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChib2R5MS5vbkNvbGxpZGUgfHwgYm9keTIub25Db2xsaWRlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTExJREUsIGJvZHkxLmdhbWVPYmplY3QsIGJvZHkyLmdhbWVPYmplY3QsIGJvZHkxLCBib2R5Mik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VwYXJhdGVzIHR3byBCb2RpZXMsIHdoZW4gYm90aCBhcmUgY2lyY3VsYXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjc2VwYXJhdGVDaXJjbGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI0NPTExJREVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI09WRVJMQVBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IEJvZHkgdG8gYmUgc2VwYXJhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keTIgLSBUaGUgc2Vjb25kIEJvZHkgdG8gYmUgc2VwYXJhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3ZlcmxhcE9ubHldIC0gSWYgdGhpcyBhIGNvbGxpZGUgb3Igb3ZlcmxhcCBjaGVjaz9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmlhc10gLSBBIHNtYWxsIHZhbHVlIGFkZGVkIHRvIHRoZSBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBzZXBhcmF0aW9uIG9jY3VycmVkLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHNlcGFyYXRlQ2lyY2xlOiBmdW5jdGlvbiAoYm9keTEsIGJvZHkyLCBvdmVybGFwT25seSwgYmlhcylcclxuICAgIHtcclxuICAgICAgICAvLyAgU2V0IHRoZSBib3VuZGluZyBib3ggb3ZlcmxhcCB2YWx1ZXMgaW50byB0aGUgYm9kaWVzIHRoZW1zZWx2ZXMgKGhlbmNlIHdlIGRvbid0IHVzZSB0aGUgcmV0dXJuIHZhbHVlcyBoZXJlKVxyXG4gICAgICAgIEdldE92ZXJsYXBYKGJvZHkxLCBib2R5MiwgZmFsc2UsIGJpYXMpO1xyXG4gICAgICAgIEdldE92ZXJsYXBZKGJvZHkxLCBib2R5MiwgZmFsc2UsIGJpYXMpO1xyXG5cclxuICAgICAgICB2YXIgb3ZlcmxhcCA9IDA7XHJcblxyXG4gICAgICAgIGlmIChib2R5MS5pc0NpcmNsZSAhPT0gYm9keTIuaXNDaXJjbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IChib2R5Mi5pc0NpcmNsZSkgPyBib2R5MS5wb3NpdGlvbi54IDogYm9keTIucG9zaXRpb24ueCxcclxuICAgICAgICAgICAgICAgIHk6IChib2R5Mi5pc0NpcmNsZSkgPyBib2R5MS5wb3NpdGlvbi55IDogYm9keTIucG9zaXRpb24ueSxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiAoYm9keTIuaXNDaXJjbGUpID8gYm9keTEucmlnaHQgOiBib2R5Mi5yaWdodCxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogKGJvZHkyLmlzQ2lyY2xlKSA/IGJvZHkxLmJvdHRvbSA6IGJvZHkyLmJvdHRvbVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGNpcmNsZSA9IHtcclxuICAgICAgICAgICAgICAgIHg6IChib2R5MS5pc0NpcmNsZSkgPyBib2R5MS5jZW50ZXIueCA6IGJvZHkyLmNlbnRlci54LFxyXG4gICAgICAgICAgICAgICAgeTogKGJvZHkxLmlzQ2lyY2xlKSA/IGJvZHkxLmNlbnRlci55IDogYm9keTIuY2VudGVyLnksXHJcbiAgICAgICAgICAgICAgICByYWRpdXM6IChib2R5MS5pc0NpcmNsZSkgPyBib2R5MS5oYWxmV2lkdGggOiBib2R5Mi5oYWxmV2lkdGhcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaXJjbGUueSA8IHJlY3QueSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNpcmNsZS54IDwgcmVjdC54KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXAgPSBEaXN0YW5jZUJldHdlZW4oY2lyY2xlLngsIGNpcmNsZS55LCByZWN0LngsIHJlY3QueSkgLSBjaXJjbGUucmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2lyY2xlLnggPiByZWN0LnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXAgPSBEaXN0YW5jZUJldHdlZW4oY2lyY2xlLngsIGNpcmNsZS55LCByZWN0LnJpZ2h0LCByZWN0LnkpIC0gY2lyY2xlLnJhZGl1cztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjaXJjbGUueSA+IHJlY3QuYm90dG9tKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2lyY2xlLnggPCByZWN0LngpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcCA9IERpc3RhbmNlQmV0d2VlbihjaXJjbGUueCwgY2lyY2xlLnksIHJlY3QueCwgcmVjdC5ib3R0b20pIC0gY2lyY2xlLnJhZGl1cztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNpcmNsZS54ID4gcmVjdC5yaWdodClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGFwID0gRGlzdGFuY2VCZXR3ZWVuKGNpcmNsZS54LCBjaXJjbGUueSwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pIC0gY2lyY2xlLnJhZGl1cztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3ZlcmxhcCAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3ZlcmxhcCA9IChib2R5MS5oYWxmV2lkdGggKyBib2R5Mi5oYWxmV2lkdGgpIC0gRGlzdGFuY2VCZXR3ZWVuKGJvZHkxLmNlbnRlci54LCBib2R5MS5jZW50ZXIueSwgYm9keTIuY2VudGVyLngsIGJvZHkyLmNlbnRlci55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBDYW4ndCBzZXBhcmF0ZSB0d28gaW1tb3ZhYmxlIGJvZGllcywgb3IgYSBib2R5IHdpdGggaXRzIG93biBjdXN0b20gc2VwYXJhdGlvbiBsb2dpY1xyXG4gICAgICAgIGlmIChvdmVybGFwT25seSB8fCBvdmVybGFwID09PSAwIHx8IChib2R5MS5pbW1vdmFibGUgJiYgYm9keTIuaW1tb3ZhYmxlKSB8fCBib2R5MS5jdXN0b21TZXBhcmF0ZVggfHwgYm9keTIuY3VzdG9tU2VwYXJhdGVYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKG92ZXJsYXAgIT09IDAgJiYgKGJvZHkxLm9uT3ZlcmxhcCB8fCBib2R5Mi5vbk92ZXJsYXApKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLk9WRVJMQVAsIGJvZHkxLmdhbWVPYmplY3QsIGJvZHkyLmdhbWVPYmplY3QsIGJvZHkxLCBib2R5Mik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICByZXR1cm4gdHJ1ZSBpZiB0aGVyZSB3YXMgc29tZSBvdmVybGFwLCBvdGhlcndpc2UgZmFsc2VcclxuICAgICAgICAgICAgcmV0dXJuIChvdmVybGFwICE9PSAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkeCA9IGJvZHkxLmNlbnRlci54IC0gYm9keTIuY2VudGVyLng7XHJcbiAgICAgICAgdmFyIGR5ID0gYm9keTEuY2VudGVyLnkgLSBib2R5Mi5jZW50ZXIueTtcclxuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xyXG4gICAgICAgIHZhciBueCA9ICgoYm9keTIuY2VudGVyLnggLSBib2R5MS5jZW50ZXIueCkgLyBkKSB8fCAwO1xyXG4gICAgICAgIHZhciBueSA9ICgoYm9keTIuY2VudGVyLnkgLSBib2R5MS5jZW50ZXIueSkgLyBkKSB8fCAwO1xyXG4gICAgICAgIHZhciBwID0gMiAqIChib2R5MS52ZWxvY2l0eS54ICogbnggKyBib2R5MS52ZWxvY2l0eS55ICogbnkgLSBib2R5Mi52ZWxvY2l0eS54ICogbnggLSBib2R5Mi52ZWxvY2l0eS55ICogbnkpIC8gKGJvZHkxLm1hc3MgKyBib2R5Mi5tYXNzKTtcclxuXHJcbiAgICAgICAgaWYgKCFib2R5MS5pbW1vdmFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5MS52ZWxvY2l0eS54ID0gKGJvZHkxLnZlbG9jaXR5LnggLSBwICogYm9keTEubWFzcyAqIG54KTtcclxuICAgICAgICAgICAgYm9keTEudmVsb2NpdHkueSA9IChib2R5MS52ZWxvY2l0eS55IC0gcCAqIGJvZHkxLm1hc3MgKiBueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWJvZHkyLmltbW92YWJsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZHkyLnZlbG9jaXR5LnggPSAoYm9keTIudmVsb2NpdHkueCArIHAgKiBib2R5Mi5tYXNzICogbngpO1xyXG4gICAgICAgICAgICBib2R5Mi52ZWxvY2l0eS55ID0gKGJvZHkyLnZlbG9jaXR5LnkgKyBwICogYm9keTIubWFzcyAqIG55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkdnggPSBib2R5Mi52ZWxvY2l0eS54IC0gYm9keTEudmVsb2NpdHkueDtcclxuICAgICAgICB2YXIgZHZ5ID0gYm9keTIudmVsb2NpdHkueSAtIGJvZHkxLnZlbG9jaXR5Lnk7XHJcbiAgICAgICAgdmFyIGFuZ2xlQ29sbGlzaW9uID0gTWF0aC5hdGFuMihkdnksIGR2eCk7XHJcblxyXG4gICAgICAgIHZhciBkZWx0YSA9IHRoaXMuX2ZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgaWYgKCFib2R5MS5pbW1vdmFibGUgJiYgIWJvZHkyLmltbW92YWJsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG92ZXJsYXAgLz0gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYm9keTEuaW1tb3ZhYmxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keTEueCArPSAoYm9keTEudmVsb2NpdHkueCAqIGRlbHRhKSAtIG92ZXJsYXAgKiBNYXRoLmNvcyhhbmdsZUNvbGxpc2lvbik7XHJcbiAgICAgICAgICAgIGJvZHkxLnkgKz0gKGJvZHkxLnZlbG9jaXR5LnkgKiBkZWx0YSkgLSBvdmVybGFwICogTWF0aC5zaW4oYW5nbGVDb2xsaXNpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFib2R5Mi5pbW1vdmFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5Mi54ICs9IChib2R5Mi52ZWxvY2l0eS54ICogZGVsdGEpICsgb3ZlcmxhcCAqIE1hdGguY29zKGFuZ2xlQ29sbGlzaW9uKTtcclxuICAgICAgICAgICAgYm9keTIueSArPSAoYm9keTIudmVsb2NpdHkueSAqIGRlbHRhKSArIG92ZXJsYXAgKiBNYXRoLnNpbihhbmdsZUNvbGxpc2lvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBib2R5MS52ZWxvY2l0eS54ICo9IGJvZHkxLmJvdW5jZS54O1xyXG4gICAgICAgIGJvZHkxLnZlbG9jaXR5LnkgKj0gYm9keTEuYm91bmNlLnk7XHJcbiAgICAgICAgYm9keTIudmVsb2NpdHkueCAqPSBib2R5Mi5ib3VuY2UueDtcclxuICAgICAgICBib2R5Mi52ZWxvY2l0eS55ICo9IGJvZHkyLmJvdW5jZS55O1xyXG5cclxuICAgICAgICBpZiAoYm9keTEub25Db2xsaWRlIHx8IGJvZHkyLm9uQ29sbGlkZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQ09MTElERSwgYm9keTEuZ2FtZU9iamVjdCwgYm9keTIuZ2FtZU9iamVjdCwgYm9keTEsIGJvZHkyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdHdvIEJvZGllcyBpbnRlcnNlY3QgYXQgYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2ludGVyc2VjdHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IGJvZHkgdG8gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5MiAtIFRoZSBzZWNvbmQgYm9keSB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB0d28gYm9kaWVzIGludGVyc2VjdCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RzOiBmdW5jdGlvbiAoYm9keTEsIGJvZHkyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChib2R5MSA9PT0gYm9keTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWJvZHkxLmlzQ2lyY2xlICYmICFib2R5Mi5pc0NpcmNsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZWN0IHZzLiBSZWN0XHJcbiAgICAgICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgICAgICAgYm9keTEucmlnaHQgPD0gYm9keTIucG9zaXRpb24ueCB8fFxyXG4gICAgICAgICAgICAgICAgYm9keTEuYm90dG9tIDw9IGJvZHkyLnBvc2l0aW9uLnkgfHxcclxuICAgICAgICAgICAgICAgIGJvZHkxLnBvc2l0aW9uLnggPj0gYm9keTIucmlnaHQgfHxcclxuICAgICAgICAgICAgICAgIGJvZHkxLnBvc2l0aW9uLnkgPj0gYm9keTIuYm90dG9tXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvZHkxLmlzQ2lyY2xlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGJvZHkyLmlzQ2lyY2xlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgQ2lyY2xlIHZzLiBDaXJjbGVcclxuICAgICAgICAgICAgICAgIHJldHVybiBEaXN0YW5jZUJldHdlZW4oYm9keTEuY2VudGVyLngsIGJvZHkxLmNlbnRlci55LCBib2R5Mi5jZW50ZXIueCwgYm9keTIuY2VudGVyLnkpIDw9IChib2R5MS5oYWxmV2lkdGggKyBib2R5Mi5oYWxmV2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIENpcmNsZSB2cy4gUmVjdFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2lyY2xlQm9keUludGVyc2VjdHMoYm9keTEsIGJvZHkyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUmVjdCB2cy4gQ2lyY2xlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNpcmNsZUJvZHlJbnRlcnNlY3RzKGJvZHkyLCBib2R5MSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlc3RzIGlmIGEgY2lyY3VsYXIgQm9keSBpbnRlcnNlY3RzIHdpdGggYW5vdGhlciBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NpcmNsZUJvZHlJbnRlcnNlY3RzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBjaXJjbGUgLSBUaGUgY2lyY3VsYXIgYm9keSB0byB0ZXN0LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keSAtIFRoZSByZWN0YW5ndWxhciBib2R5IHRvIHRlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdHdvIGJvZGllcyBpbnRlcnNlY3QsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgY2lyY2xlQm9keUludGVyc2VjdHM6IGZ1bmN0aW9uIChjaXJjbGUsIGJvZHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSBDbGFtcChjaXJjbGUuY2VudGVyLngsIGJvZHkubGVmdCwgYm9keS5yaWdodCk7XHJcbiAgICAgICAgdmFyIHkgPSBDbGFtcChjaXJjbGUuY2VudGVyLnksIGJvZHkudG9wLCBib2R5LmJvdHRvbSk7XHJcblxyXG4gICAgICAgIHZhciBkeCA9IChjaXJjbGUuY2VudGVyLnggLSB4KSAqIChjaXJjbGUuY2VudGVyLnggLSB4KTtcclxuICAgICAgICB2YXIgZHkgPSAoY2lyY2xlLmNlbnRlci55IC0geSkgKiAoY2lyY2xlLmNlbnRlci55IC0geSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoZHggKyBkeSkgPD0gKGNpcmNsZS5oYWxmV2lkdGggKiBjaXJjbGUuaGFsZldpZHRoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0cyBpZiBHYW1lIE9iamVjdHMgb3ZlcmxhcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNvdmVybGFwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IG9iamVjdDEgLSBUaGUgZmlyc3Qgb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMgdG8gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IFtvYmplY3QyXSAtIFRoZSBzZWNvbmQgb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMgdG8gY2hlY2ssIG9yIGB1bmRlZmluZWRgLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtvdmVybGFwQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgb3ZlcmxhcC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IG92ZXJsYXAuIElmIHRoaXMgaXMgc2V0IHRoZW4gYG92ZXJsYXBDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY2FsbGJhY2tDb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJ1biB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYXQgbGVhc3Qgb25lIEdhbWUgT2JqZWN0IG92ZXJsYXBzIGFub3RoZXIuXHJcbiAgICAgKi9cclxuICAgIG92ZXJsYXA6IGZ1bmN0aW9uIChvYmplY3QxLCBvYmplY3QyLCBvdmVybGFwQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdmVybGFwQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBvdmVybGFwQ2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKHByb2Nlc3NDYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IHByb2Nlc3NDYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAoY2FsbGJhY2tDb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2tDb250ZXh0ID0gb3ZlcmxhcENhbGxiYWNrOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxpZGVPYmplY3RzKG9iamVjdDEsIG9iamVjdDIsIG92ZXJsYXBDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgY29sbGlzaW9uIGNoZWNrIGFuZCBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHR3byBwaHlzaWNzIGVuYWJsZWQgb2JqZWN0cyBnaXZlbiwgd2hpY2ggY2FuIGJlIHNpbmdsZVxyXG4gICAgICogR2FtZSBPYmplY3RzLCBhcnJheXMgb2YgR2FtZSBPYmplY3RzLCBQaHlzaWNzIEdyb3VwcywgYXJyYXlzIG9mIFBoeXNpY3MgR3JvdXBzIG9yIG5vcm1hbCBHcm91cHMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGRvbid0IHJlcXVpcmUgc2VwYXJhdGlvbiB0aGVuIHVzZSB7QGxpbmsgI292ZXJsYXB9IGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdHdvIEdyb3VwcyBvciBhcnJheXMgYXJlIHBhc3NlZCwgZWFjaCBtZW1iZXIgb2Ygb25lIHdpbGwgYmUgdGVzdGVkIGFnYWluc3QgZWFjaCBtZW1iZXIgb2YgdGhlIG90aGVyLlxyXG4gICAgICpcclxuICAgICAqIElmICoqb25seSoqIG9uZSBHcm91cCBpcyBwYXNzZWQgKGFzIGBvYmplY3QxYCksIGVhY2ggbWVtYmVyIG9mIHRoZSBHcm91cCB3aWxsIGJlIGNvbGxpZGVkIGFnYWluc3QgdGhlIG90aGVyIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgKipvbmx5Kiogb25lIEFycmF5IGlzIHBhc3NlZCwgdGhlIGFycmF5IGlzIGl0ZXJhdGVkIGFuZCBldmVyeSBlbGVtZW50IGluIGl0IGlzIHRlc3RlZCBhZ2FpbnN0IHRoZSBvdGhlcnMuXHJcbiAgICAgKlxyXG4gICAgICogVHdvIGNhbGxiYWNrcyBjYW4gYmUgcHJvdmlkZWQuIFRoZSBgY29sbGlkZUNhbGxiYWNrYCBpcyBpbnZva2VkIGlmIGEgY29sbGlzaW9uIG9jY3VycyBhbmQgdGhlIHR3byBjb2xsaWRpbmdcclxuICAgICAqIG9iamVjdHMgYXJlIHBhc3NlZCB0byBpdC5cclxuICAgICAqXHJcbiAgICAgKiBBcmNhZGUgUGh5c2ljcyB1c2VzIHRoZSBQcm9qZWN0aW9uIE1ldGhvZCBvZiBjb2xsaXNpb24gcmVzb2x1dGlvbiBhbmQgc2VwYXJhdGlvbi4gV2hpbGUgaXQncyBmYXN0IGFuZCBzdWl0YWJsZVxyXG4gICAgICogZm9yICdhcmNhZGUnIHN0eWxlIGdhbWVzIGl0IGxhY2tzIHN0YWJpbGl0eSB3aGVuIG11bHRpcGxlIG9iamVjdHMgYXJlIGluIGNsb3NlIHByb3hpbWl0eSBvciByZXN0aW5nIHVwb24gZWFjaCBvdGhlci5cclxuICAgICAqIFRoZSBzZXBhcmF0aW9uIHRoYXQgc3RvcHMgdHdvIG9iamVjdHMgcGVuZXRyYXRpbmcgbWF5IGNyZWF0ZSBhIG5ldyBwZW5ldHJhdGlvbiBhZ2FpbnN0IGEgZGlmZmVyZW50IG9iamVjdC4gSWYgeW91XHJcbiAgICAgKiByZXF1aXJlIGEgaGlnaCBsZXZlbCBvZiBzdGFiaWxpdHkgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIGFuIGFsdGVybmF0aXZlIHBoeXNpY3Mgc3lzdGVtLCBzdWNoIGFzIE1hdHRlci5qcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IG9iamVjdDEgLSBUaGUgZmlyc3Qgb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMgdG8gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IFtvYmplY3QyXSAtIFRoZSBzZWNvbmQgb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMgdG8gY2hlY2ssIG9yIGB1bmRlZmluZWRgLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgY29sbGlkZS5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGFueSBvdmVybGFwcGluZyBHYW1lIE9iamVjdHMgd2VyZSBzZXBhcmF0ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjb2xsaWRlOiBmdW5jdGlvbiAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29sbGlkZUNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY29sbGlkZUNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChwcm9jZXNzQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBwcm9jZXNzQ2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrQ29udGV4dCA9IGNvbGxpZGVDYWxsYmFjazsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jb2xsaWRlT2JqZWN0cyhvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBQbGVhc2UgdXNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZU9iamVjdHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IG9iamVjdDEgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkFyY2FkZS5BcmNhZGVDb2xsaWRlclR5cGV9IFtvYmplY3QyXSAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gY29sbGlkZUNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB0d28gb2JqZWN0cyBjb2xsaWRlLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IHByb2Nlc3NDYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdHdvIG9iamVjdHMgY29sbGlkZS4gTXVzdCByZXR1cm4gYSBib29sZWFuLlxyXG4gICAgICogQHBhcmFtIHthbnl9IGNhbGxiYWNrQ29udGV4dCAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBjYWxsIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJsYXBPbmx5IC0gV2hldGhlciB0aGlzIGlzIGEgY29sbGlzaW9uIG9yIG92ZXJsYXAgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbnkgb2JqZWN0cyBvdmVybGFwICh3aXRoIGBvdmVybGFwT25seWApOyBvciB0cnVlIGlmIGFueSBvdmVybGFwcGluZyBvYmplY3RzIHdlcmUgc2VwYXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBjb2xsaWRlT2JqZWN0czogZnVuY3Rpb24gKG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBqO1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0MS5pc1BhcmVudCAmJiBvYmplY3QxLnBoeXNpY3NUeXBlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3QxID0gb2JqZWN0MS5jaGlsZHJlbi5lbnRyaWVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9iamVjdDIgJiYgb2JqZWN0Mi5pc1BhcmVudCAmJiBvYmplY3QyLnBoeXNpY3NUeXBlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3QyID0gb2JqZWN0Mi5jaGlsZHJlbi5lbnRyaWVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9iamVjdDFpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmplY3QxKTtcclxuICAgICAgICB2YXIgb2JqZWN0MmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iamVjdDIpO1xyXG5cclxuICAgICAgICB0aGlzLl90b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGlmICghb2JqZWN0MWlzQXJyYXkgJiYgIW9iamVjdDJpc0FycmF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5laXRoZXIgb2YgdGhlbSBhcmUgYXJyYXlzIC0gZG8gdGhpcyBmaXJzdCBhcyBpdCdzIHRoZSBtb3N0IGNvbW1vbiB1c2UtY2FzZVxyXG4gICAgICAgICAgICB0aGlzLmNvbGxpZGVIYW5kbGVyKG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIW9iamVjdDFpc0FycmF5ICYmIG9iamVjdDJpc0FycmF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE9iamVjdCAyIGlzIGFuIEFycmF5XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmplY3QyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpZGVIYW5kbGVyKG9iamVjdDEsIG9iamVjdDJbaV0sIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmplY3QxaXNBcnJheSAmJiAhb2JqZWN0MmlzQXJyYXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgT2JqZWN0IDEgaXMgYW4gQXJyYXlcclxuICAgICAgICAgICAgaWYgKCFvYmplY3QyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgU3BlY2lhbCBjYXNlIGZvciBhcnJheSB2cy4gc2VsZlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamVjdDEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gb2JqZWN0MVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCBvYmplY3QxLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGopXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxpZGVIYW5kbGVyKGNoaWxkLCBvYmplY3QxW2pdLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamVjdDEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsaWRlSGFuZGxlcihvYmplY3QxW2ldLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFRoZXkncmUgYm90aCBhcnJheXNcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamVjdDEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvYmplY3QyLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlkZUhhbmRsZXIob2JqZWN0MVtpXSwgb2JqZWN0MltqXSwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKHRoaXMuX3RvdGFsID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBQbGVhc2UgdXNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlIGFuZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjb3ZlcmxhcCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGVIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QxIC0gVGhlIGZpcnN0IG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5BcmNhZGUuQXJjYWRlQ29sbGlkZXJUeXBlfSBvYmplY3QyIC0gVGhlIHNlY29uZCBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cyB0byBjaGVjaywgb3IgYHVuZGVmaW5lZGAuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gY29sbGlkZUNhbGxiYWNrIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgY29sbGlkZS5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBwcm9jZXNzQ2FsbGJhY2sgLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGxldHMgeW91IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYWdhaW5zdCB0aGUgdHdvIG9iamVjdHMgaWYgdGhleSBjb2xsaWRlLiBJZiB0aGlzIGlzIHNldCB0aGVuIGBjb2xsaWRlQ2FsbGJhY2tgIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxsYmFjayByZXR1cm5zIGB0cnVlYC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBjYWxsYmFja0NvbnRleHQgLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcmxhcE9ubHkgLSBXaGV0aGVyIHRoaXMgaXMgYSBjb2xsaXNpb24gb3Igb3ZlcmxhcCBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFueSBvYmplY3RzIG92ZXJsYXAgKHdpdGggYG92ZXJsYXBPbmx5YCk7IG9yIHRydWUgaWYgYW55IG92ZXJsYXBwaW5nIG9iamVjdHMgd2VyZSBzZXBhcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVIYW5kbGVyOiBmdW5jdGlvbiAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIENvbGxpZGUgR3JvdXAgd2l0aCBTZWxmXHJcbiAgICAgICAgLy8gIE9ubHkgY29sbGlkZSB2YWxpZCBvYmplY3RzXHJcbiAgICAgICAgaWYgKG9iamVjdDIgPT09IHVuZGVmaW5lZCAmJiBvYmplY3QxLmlzUGFyZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZUdyb3VwVnNHcm91cChvYmplY3QxLCBvYmplY3QxLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgbmVpdGhlciBvZiB0aGUgb2JqZWN0cyBhcmUgc2V0IHRoZW4gYmFpbCBvdXRcclxuICAgICAgICBpZiAoIW9iamVjdDEgfHwgIW9iamVjdDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQSBCb2R5XHJcbiAgICAgICAgaWYgKG9iamVjdDEuYm9keSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QyLmJvZHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpZGVTcHJpdGVWc1Nwcml0ZShvYmplY3QxLCBvYmplY3QyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0Mi5pc1BhcmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZVNwcml0ZVZzR3JvdXAob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdDIuaXNUaWxlbWFwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xsaWRlU3ByaXRlVnNUaWxlbWFwTGF5ZXIob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgR1JPVVBTXHJcbiAgICAgICAgZWxzZSBpZiAob2JqZWN0MS5pc1BhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QyLmJvZHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpZGVTcHJpdGVWc0dyb3VwKG9iamVjdDIsIG9iamVjdDEsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvYmplY3QyLmlzUGFyZW50KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xsaWRlR3JvdXBWc0dyb3VwKG9iamVjdDEsIG9iamVjdDIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvYmplY3QyLmlzVGlsZW1hcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZUdyb3VwVnNUaWxlbWFwTGF5ZXIob2JqZWN0MSwgb2JqZWN0MiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVElMRU1BUCBMQVlFUlNcclxuICAgICAgICBlbHNlIGlmIChvYmplY3QxLmlzVGlsZW1hcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QyLmJvZHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpZGVTcHJpdGVWc1RpbGVtYXBMYXllcihvYmplY3QyLCBvYmplY3QxLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0Mi5pc1BhcmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZUdyb3VwVnNUaWxlbWFwTGF5ZXIob2JqZWN0Miwgb2JqZWN0MSwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGhhbmRsZXIgZm9yIFNwcml0ZSB2cy4gU3ByaXRlIGNvbGxpc2lvbnMuXHJcbiAgICAgKiBQbGVhc2UgdXNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZVNwcml0ZVZzU3ByaXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3ByaXRlMSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHNwcml0ZTIgLSBUaGUgc2Vjb25kIG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgY29sbGlkZS5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJsYXBPbmx5IC0gV2hldGhlciB0aGlzIGlzIGEgY29sbGlzaW9uIG9yIG92ZXJsYXAgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbnkgb2JqZWN0cyBvdmVybGFwICh3aXRoIGBvdmVybGFwT25seWApOyBvciB0cnVlIGlmIGFueSBvdmVybGFwcGluZyBvYmplY3RzIHdlcmUgc2VwYXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBjb2xsaWRlU3ByaXRlVnNTcHJpdGU6IGZ1bmN0aW9uIChzcHJpdGUxLCBzcHJpdGUyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXNwcml0ZTEuYm9keSB8fCAhc3ByaXRlMi5ib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VwYXJhdGUoc3ByaXRlMS5ib2R5LCBzcHJpdGUyLmJvZHksIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY29sbGlkZUNhbGxiYWNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb2xsaWRlQ2FsbGJhY2suY2FsbChjYWxsYmFja0NvbnRleHQsIHNwcml0ZTEsIHNwcml0ZTIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90b3RhbCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaGFuZGxlciBmb3IgU3ByaXRlIHZzLiBHcm91cCBjb2xsaXNpb25zLlxyXG4gICAgICogUGxlYXNlIHVzZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGVTcHJpdGVWc0dyb3VwXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3ByaXRlIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IGdyb3VwIC0gVGhlIHNlY29uZCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBjb2xsaWRlQ2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHR3byBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gcHJvY2Vzc0NhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB0d28gb2JqZWN0cyBjb2xsaWRlLiBNdXN0IHJldHVybiBhIGJvb2xlYW4uXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gY2FsbGJhY2tDb250ZXh0IC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGNhbGwgdGhlIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcmxhcE9ubHkgLSBXaGV0aGVyIHRoaXMgaXMgYSBjb2xsaXNpb24gb3Igb3ZlcmxhcCBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFNwcml0ZSBjb2xsaWRlZCB3aXRoIHRoZSBnaXZlbiBHcm91cCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVTcHJpdGVWc0dyb3VwOiBmdW5jdGlvbiAoc3ByaXRlLCBncm91cCwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHlBID0gc3ByaXRlLmJvZHk7XHJcblxyXG4gICAgICAgIGlmIChncm91cC5sZW5ndGggPT09IDAgfHwgIWJvZHlBIHx8ICFib2R5QS5lbmFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgRG9lcyBzcHJpdGUgY29sbGlkZSB3aXRoIGFueXRoaW5nP1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgbGVuO1xyXG4gICAgICAgIHZhciBib2R5QjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlVHJlZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBtaW5NYXggPSB0aGlzLnRyZWVNaW5NYXg7XHJcblxyXG4gICAgICAgICAgICBtaW5NYXgubWluWCA9IGJvZHlBLmxlZnQ7XHJcbiAgICAgICAgICAgIG1pbk1heC5taW5ZID0gYm9keUEudG9wO1xyXG4gICAgICAgICAgICBtaW5NYXgubWF4WCA9IGJvZHlBLnJpZ2h0O1xyXG4gICAgICAgICAgICBtaW5NYXgubWF4WSA9IGJvZHlBLmJvdHRvbTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gKGdyb3VwLnBoeXNpY3NUeXBlID09PSBDT05TVC5EWU5BTUlDX0JPRFkpID8gdGhpcy50cmVlLnNlYXJjaChtaW5NYXgpIDogdGhpcy5zdGF0aWNUcmVlLnNlYXJjaChtaW5NYXgpO1xyXG5cclxuICAgICAgICAgICAgbGVuID0gcmVzdWx0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZHlCID0gcmVzdWx0c1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYm9keUEgPT09IGJvZHlCIHx8ICFncm91cC5jb250YWlucyhib2R5Qi5nYW1lT2JqZWN0KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgU2tpcCBpZiBjb21wYXJpbmcgYWdhaW5zdCBpdHNlbGYsIG9yIGlmIGJvZHlCIGlzbid0IGFjdHVhbGx5IHBhcnQgb2YgdGhlIEdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VwYXJhdGUoYm9keUEsIGJvZHlCLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaWRlQ2FsbGJhY2spXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaWRlQ2FsbGJhY2suY2FsbChjYWxsYmFja0NvbnRleHQsIGJvZHlBLmdhbWVPYmplY3QsIGJvZHlCLmdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG90YWwrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBncm91cC5nZXRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB2YXIgc2tpcEluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZW50cmllcy5pbmRleE9mKHNwcml0ZSk7XHJcblxyXG4gICAgICAgICAgICBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZHlCID0gY2hpbGRyZW5baV0uYm9keTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWJvZHlCIHx8IGkgPT09IHNraXBJbmRleCB8fCAhYm9keUIuZW5hYmxlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcGFyYXRlKGJvZHlBLCBib2R5QiwgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlkZUNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlkZUNhbGxiYWNrLmNhbGwoY2FsbGJhY2tDb250ZXh0LCBib2R5QS5nYW1lT2JqZWN0LCBib2R5Qi5nYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaGFuZGxlciBmb3IgR3JvdXAgdnMuIFRpbGVtYXAgY29sbGlzaW9ucy5cclxuICAgICAqIFBsZWFzZSB1c2UgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGUgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlR3JvdXBWc1RpbGVtYXBMYXllclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBncm91cCAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSB0aWxlbWFwTGF5ZXIgLSBUaGUgc2Vjb25kIG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgY29sbGlkZS5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJsYXBPbmx5IC0gV2hldGhlciB0aGlzIGlzIGEgY29sbGlzaW9uIG9yIG92ZXJsYXAgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbnkgb2JqZWN0cyBvdmVybGFwICh3aXRoIGBvdmVybGFwT25seWApOyBvciB0cnVlIGlmIGFueSBvdmVybGFwcGluZyBvYmplY3RzIHdlcmUgc2VwYXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBjb2xsaWRlR3JvdXBWc1RpbGVtYXBMYXllcjogZnVuY3Rpb24gKGdyb3VwLCB0aWxlbWFwTGF5ZXIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGdyb3VwLmdldENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlkQ29sbGlkZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmJvZHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxpZGVTcHJpdGVWc1RpbGVtYXBMYXllcihjaGlsZHJlbltpXSwgdGlsZW1hcExheWVyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlkQ29sbGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkaWRDb2xsaWRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgYWR2YW5jZWQgbWV0aG9kIGlzIHNwZWNpZmljYWxseSBmb3IgdGVzdGluZyBmb3IgY29sbGlzaW9uIGJldHdlZW4gYSBzaW5nbGUgU3ByaXRlIGFuZCBhbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IHNob3VsZCBnZW5lcmFsbHkgdXNlIHRoZSBgY29sbGlkZWAgbWV0aG9kIGluc3RlYWQsIHdpdGggYSBTcHJpdGUgdnMuIGEgVGlsZW1hcCBMYXllciwgYXMgdGhhdCB3aWxsIHBlcmZvcm1cclxuICAgICAqIHRpbGUgZmlsdGVyaW5nIGFuZCBjdWxsaW5nIGZvciB5b3UsIGFzIHdlbGwgYXMgaGFuZGxlIHRoZSBpbnRlcmVzdGluZyBmYWNlIGNvbGxpc2lvbiBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIG9mZmVyZWQgZm9yIHRob3NlIHdobyB3b3VsZCBsaWtlIHRvIGNoZWNrIGZvciBjb2xsaXNpb24gd2l0aCBzcGVjaWZpYyBUaWxlcyBpbiBhIGxheWVyLCB3aXRob3V0XHJcbiAgICAgKiBoYXZpbmcgdG8gc2V0IGFueSBjb2xsaXNpb24gYXR0cmlidXRlcyBvbiB0aGUgdGlsZXMgaW4gcXVlc3Rpb24uIFRoaXMgYWxsb3dzIHlvdSB0byBwZXJmb3JtIHF1aWNrIGR5bmFtaWMgY29sbGlzaW9uc1xyXG4gICAgICogb24gc21hbGwgc2V0cyBvZiBUaWxlcy4gQXMgc3VjaCwgbm8gY3VsbGluZyBvciBjaGVja3MgYXJlIG1hZGUgdG8gdGhlIGFycmF5IG9mIFRpbGVzIGdpdmVuIHRvIHRoaXMgbWV0aG9kLFxyXG4gICAgICogeW91IHNob3VsZCBmaWx0ZXIgdGhlbSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEltcG9ydGFudDogVXNlIG9mIHRoaXMgbWV0aG9kIHNraXBzIHRoZSBgaW50ZXJlc3RpbmcgZmFjZXNgIHN5c3RlbSB0aGF0IFRpbGVtYXAgTGF5ZXJzIHVzZS4gVGhpcyBtZWFucyBpZiB5b3UgaGF2ZVxyXG4gICAgICogc2F5IGEgcm93IG9yIGNvbHVtbiBvZiB0aWxlcywgYW5kIHlvdSBqdW1wIGludG8sIG9yIHdhbGsgb3ZlciB0aGVtLCBpdCdzIHBvc3NpYmxlIHRvIGdldCBzdHVjayBvbiB0aGUgZWRnZXMgb2YgdGhlXHJcbiAgICAgKiB0aWxlcyBhcyB0aGUgaW50ZXJlc3RpbmcgZmFjZSBjYWxjdWxhdGlvbnMgYXJlIHNraXBwZWQuIEhvd2V2ZXIsIGZvciBxdWljay1maXJlIHNtYWxsIGNvbGxpc2lvbiBzZXQgdGVzdHMgb25cclxuICAgICAqIGR5bmFtaWMgbWFwcywgdGhpcyBtZXRob2QgY2FuIHByb3ZlIHZlcnkgdXNlZnVsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGVUaWxlc1xyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjVElMRV9DT0xMSURFXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3ByaXRlIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSB0aWxlcyAtIEFuIGFycmF5IG9mIFRpbGVzIHRvIGNoZWNrIGZvciBjb2xsaXNpb24gYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbY29sbGlkZUNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGlmIHRoZSBvYmplY3RzIGNvbGxpZGUuXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW3Byb2Nlc3NDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGxldHMgeW91IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MgYWdhaW5zdCB0aGUgdHdvIG9iamVjdHMgaWYgdGhleSBjb2xsaWRlLiBJZiB0aGlzIGlzIHNldCB0aGVuIGBjb2xsaWRlQ2FsbGJhY2tgIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxsYmFjayByZXR1cm5zIGB0cnVlYC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY2FsbGJhY2tDb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJ1biB0aGUgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYW55IG9iamVjdHMgb3ZlcmxhcCAod2l0aCBgb3ZlcmxhcE9ubHlgKTsgb3IgdHJ1ZSBpZiBhbnkgb3ZlcmxhcHBpbmcgb2JqZWN0cyB3ZXJlIHNlcGFyYXRlZC5cclxuICAgICAqL1xyXG4gICAgY29sbGlkZVRpbGVzOiBmdW5jdGlvbiAoc3ByaXRlLCB0aWxlcywgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXNwcml0ZS5ib2R5LmVuYWJsZSB8fCB0aWxlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpZGVTcHJpdGVWc1RpbGVzSGFuZGxlcihzcHJpdGUsIHRpbGVzLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGFkdmFuY2VkIG1ldGhvZCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgZm9yIG92ZXJsYXBzIGJldHdlZW4gYSBzaW5nbGUgU3ByaXRlIGFuZCBhbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IHNob3VsZCBnZW5lcmFsbHkgdXNlIHRoZSBgb3ZlcmxhcGAgbWV0aG9kIGluc3RlYWQsIHdpdGggYSBTcHJpdGUgdnMuIGEgVGlsZW1hcCBMYXllciwgYXMgdGhhdCB3aWxsIHBlcmZvcm1cclxuICAgICAqIHRpbGUgZmlsdGVyaW5nIGFuZCBjdWxsaW5nIGZvciB5b3UsIGFzIHdlbGwgYXMgaGFuZGxlIHRoZSBpbnRlcmVzdGluZyBmYWNlIGNvbGxpc2lvbiBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIG9mZmVyZWQgZm9yIHRob3NlIHdobyB3b3VsZCBsaWtlIHRvIGNoZWNrIGZvciBvdmVybGFwcyB3aXRoIHNwZWNpZmljIFRpbGVzIGluIGEgbGF5ZXIsIHdpdGhvdXRcclxuICAgICAqIGhhdmluZyB0byBzZXQgYW55IGNvbGxpc2lvbiBhdHRyaWJ1dGVzIG9uIHRoZSB0aWxlcyBpbiBxdWVzdGlvbi4gVGhpcyBhbGxvd3MgeW91IHRvIHBlcmZvcm0gcXVpY2sgZHluYW1pYyBvdmVybGFwXHJcbiAgICAgKiB0ZXN0cyBvbiBzbWFsbCBzZXRzIG9mIFRpbGVzLiBBcyBzdWNoLCBubyBjdWxsaW5nIG9yIGNoZWNrcyBhcmUgbWFkZSB0byB0aGUgYXJyYXkgb2YgVGlsZXMgZ2l2ZW4gdG8gdGhpcyBtZXRob2QsXHJcbiAgICAgKiB5b3Ugc2hvdWxkIGZpbHRlciB0aGVtIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjb3ZlcmxhcFRpbGVzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkV2ZW50cyNUSUxFX09WRVJMQVBcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBzcHJpdGUgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IHRpbGVzIC0gQW4gYXJyYXkgb2YgVGlsZXMgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgb3ZlcmxhcC5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbnkgb2JqZWN0cyBvdmVybGFwICh3aXRoIGBvdmVybGFwT25seWApOyBvciB0cnVlIGlmIGFueSBvdmVybGFwcGluZyBvYmplY3RzIHdlcmUgc2VwYXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBvdmVybGFwVGlsZXM6IGZ1bmN0aW9uIChzcHJpdGUsIHRpbGVzLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghc3ByaXRlLmJvZHkuZW5hYmxlIHx8IHRpbGVzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZVNwcml0ZVZzVGlsZXNIYW5kbGVyKHNwcml0ZSwgdGlsZXMsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaGFuZGxlciBmb3IgU3ByaXRlIHZzLiBUaWxlbWFwIGNvbGxpc2lvbnMuXHJcbiAgICAgKiBQbGVhc2UgdXNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZVNwcml0ZVZzVGlsZW1hcExheWVyXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkV2ZW50cyNUSUxFX0NPTExJREVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI1RJTEVfT1ZFUkxBUFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3ByaXRlIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IHRpbGVtYXBMYXllciAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW2NvbGxpZGVDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBpZiB0aGUgb2JqZWN0cyBjb2xsaWRlLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtwcm9jZXNzQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBsZXRzIHlvdSBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIGFnYWluc3QgdGhlIHR3byBvYmplY3RzIGlmIHRoZXkgY29sbGlkZS4gSWYgdGhpcyBpcyBzZXQgdGhlbiBgY29sbGlkZUNhbGxiYWNrYCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoaXMgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW292ZXJsYXBPbmx5XSAtIFdoZXRoZXIgdGhpcyBpcyBhIGNvbGxpc2lvbiBvciBvdmVybGFwIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYW55IG9iamVjdHMgb3ZlcmxhcCAod2l0aCBgb3ZlcmxhcE9ubHlgKTsgb3IgdHJ1ZSBpZiBhbnkgb3ZlcmxhcHBpbmcgb2JqZWN0cyB3ZXJlIHNlcGFyYXRlZC5cclxuICAgICAqL1xyXG4gICAgY29sbGlkZVNwcml0ZVZzVGlsZW1hcExheWVyOiBmdW5jdGlvbiAoc3ByaXRlLCB0aWxlbWFwTGF5ZXIsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib2R5ID0gc3ByaXRlLmJvZHk7XHJcblxyXG4gICAgICAgIGlmICghYm9keS5lbmFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeCA9IGJvZHkucG9zaXRpb24ueDtcclxuICAgICAgICB2YXIgeSA9IGJvZHkucG9zaXRpb24ueTtcclxuICAgICAgICB2YXIgdyA9IGJvZHkud2lkdGg7XHJcbiAgICAgICAgdmFyIGggPSBib2R5LmhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogdGhpcyBsb2dpYyBzaG91bGQgYmUgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGUgVGlsZW1hcCBBUEkgYXQgc29tZSBwb2ludC5cclxuICAgICAgICAvLyBJZiB0aGUgbWFwcyBiYXNlIHRpbGUgc2l6ZSBkaWZmZXJzIGZyb20gdGhlIGxheWVyJ3MgdGlsZSBzaXplLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGVcclxuICAgICAgICAvLyBzZWxlY3Rpb24gYXJlYSBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28uXHJcbiAgICAgICAgdmFyIGxheWVyRGF0YSA9IHRpbGVtYXBMYXllci5sYXllcjtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyRGF0YS50aWxlV2lkdGggPiBsYXllckRhdGEuYmFzZVRpbGVXaWR0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIFRoZSB4IG9yaWdpbiBvZiBhIHRpbGUgaXMgdGhlIGxlZnQgc2lkZSwgc28geCBhbmQgd2lkdGggbmVlZCB0byBiZSBhZGp1c3RlZC5cclxuICAgICAgICAgICAgdmFyIHhEaWZmID0gKGxheWVyRGF0YS50aWxlV2lkdGggLSBsYXllckRhdGEuYmFzZVRpbGVXaWR0aCkgKiB0aWxlbWFwTGF5ZXIuc2NhbGVYO1xyXG4gICAgICAgICAgICB4IC09IHhEaWZmO1xyXG4gICAgICAgICAgICB3ICs9IHhEaWZmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxheWVyRGF0YS50aWxlSGVpZ2h0ID4gbGF5ZXJEYXRhLmJhc2VUaWxlSGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gVGhlIHkgb3JpZ2luIG9mIGEgdGlsZSBpcyB0aGUgYm90dG9tIHNpZGUsIHNvIGp1c3QgdGhlIGhlaWdodCBuZWVkcyB0byBiZSBhZGp1c3RlZC5cclxuICAgICAgICAgICAgdmFyIHlEaWZmID0gKGxheWVyRGF0YS50aWxlSGVpZ2h0IC0gbGF5ZXJEYXRhLmJhc2VUaWxlSGVpZ2h0KSAqIHRpbGVtYXBMYXllci5zY2FsZVk7XHJcbiAgICAgICAgICAgIGggKz0geURpZmY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWFwRGF0YSA9IHRpbGVtYXBMYXllci5nZXRUaWxlc1dpdGhpbldvcmxkWFkoeCwgeSwgdywgaCk7XHJcblxyXG4gICAgICAgIGlmIChtYXBEYXRhLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlkZVNwcml0ZVZzVGlsZXNIYW5kbGVyKHNwcml0ZSwgbWFwRGF0YSwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHksIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBoYW5kbGVyIGZvciBTcHJpdGUgdnMuIFRpbGVtYXAgY29sbGlzaW9ucy5cclxuICAgICAqIFBsZWFzZSB1c2UgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGUgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNjb2xsaWRlU3ByaXRlVnNUaWxlc0hhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI1RJTEVfQ09MTElERVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjVElMRV9PVkVSTEFQXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHNwcml0ZSAtIFRoZSBmaXJzdCBvYmplY3QgdG8gY2hlY2sgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSB0aWxlbWFwTGF5ZXIgLSBUaGUgc2Vjb25kIG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtjb2xsaWRlQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG9iamVjdHMgY29sbGlkZS5cclxuICAgICAqIEBwYXJhbSB7QXJjYWRlUGh5c2ljc0NhbGxiYWNrfSBbcHJvY2Vzc0NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbGV0cyB5b3UgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBhZ2FpbnN0IHRoZSB0d28gb2JqZWN0cyBpZiB0aGV5IGNvbGxpZGUuIElmIHRoaXMgaXMgc2V0IHRoZW4gYGNvbGxpZGVDYWxsYmFja2Agd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGlzIGNhbGxiYWNrIHJldHVybnMgYHRydWVgLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBjYWxsYmFja3MuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvdmVybGFwT25seV0gLSBXaGV0aGVyIHRoaXMgaXMgYSBjb2xsaXNpb24gb3Igb3ZlcmxhcCBjaGVjay5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzTGF5ZXJdIC0gSXMgdGhpcyBjaGVjayBjb21pbmcgZnJvbSBhIFRpbGVtYXBMYXllciBvciBhbiBhcnJheSBvZiB0aWxlcz9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFueSBvYmplY3RzIG92ZXJsYXAgKHdpdGggYG92ZXJsYXBPbmx5YCk7IG9yIHRydWUgaWYgYW55IG92ZXJsYXBwaW5nIG9iamVjdHMgd2VyZSBzZXBhcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVTcHJpdGVWc1RpbGVzSGFuZGxlcjogZnVuY3Rpb24gKHNwcml0ZSwgdGlsZXMsIGNvbGxpZGVDYWxsYmFjaywgcHJvY2Vzc0NhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIG92ZXJsYXBPbmx5LCBpc0xheWVyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib2R5ID0gc3ByaXRlLmJvZHk7XHJcblxyXG4gICAgICAgIHZhciB0aWxlO1xyXG4gICAgICAgIHZhciB0aWxlV29ybGRSZWN0ID0geyBsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDAgfTtcclxuICAgICAgICB2YXIgdGlsZW1hcExheWVyO1xyXG4gICAgICAgIHZhciBjb2xsaXNpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpbGUgPSB0aWxlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHRpbGVtYXBMYXllciA9IHRpbGUudGlsZW1hcExheWVyO1xyXG5cclxuICAgICAgICAgICAgdGlsZVdvcmxkUmVjdC5sZWZ0ID0gdGlsZW1hcExheWVyLnRpbGVUb1dvcmxkWCh0aWxlLngpO1xyXG4gICAgICAgICAgICB0aWxlV29ybGRSZWN0LnRvcCA9IHRpbGVtYXBMYXllci50aWxlVG9Xb3JsZFkodGlsZS55KTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBtYXAncyBiYXNlIHRpbGUgc2l6ZSBkaWZmZXJzIGZyb20gdGhlIGxheWVyJ3MgdGlsZSBzaXplLCBvbmx5IHRoZSB0b3Agb2YgdGhlIHJlY3RcclxuICAgICAgICAgICAgLy8gbmVlZHMgdG8gYmUgYWRqdXN0ZWQgc2luY2UgaXRzIG9yaWdpbiBpcyAoMCwgMSkuXHJcbiAgICAgICAgICAgIGlmICh0aWxlLmJhc2VIZWlnaHQgIT09IHRpbGUuaGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aWxlV29ybGRSZWN0LnRvcCAtPSAodGlsZS5oZWlnaHQgLSB0aWxlLmJhc2VIZWlnaHQpICogdGlsZW1hcExheWVyLnNjYWxlWTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGlsZVdvcmxkUmVjdC5yaWdodCA9IHRpbGVXb3JsZFJlY3QubGVmdCArIHRpbGUud2lkdGggKiB0aWxlbWFwTGF5ZXIuc2NhbGVYO1xyXG4gICAgICAgICAgICB0aWxlV29ybGRSZWN0LmJvdHRvbSA9IHRpbGVXb3JsZFJlY3QudG9wICsgdGlsZS5oZWlnaHQgKiB0aWxlbWFwTGF5ZXIuc2NhbGVZO1xyXG5cclxuICAgICAgICAgICAgaWYgKFRpbGVJbnRlcnNlY3RzQm9keSh0aWxlV29ybGRSZWN0LCBib2R5KVxyXG4gICAgICAgICAgICAgICAgJiYgKCFwcm9jZXNzQ2FsbGJhY2sgfHwgcHJvY2Vzc0NhbGxiYWNrLmNhbGwoY2FsbGJhY2tDb250ZXh0LCBzcHJpdGUsIHRpbGUpKVxyXG4gICAgICAgICAgICAgICAgJiYgUHJvY2Vzc1RpbGVDYWxsYmFja3ModGlsZSwgc3ByaXRlKVxyXG4gICAgICAgICAgICAgICAgJiYgKG92ZXJsYXBPbmx5IHx8IFNlcGFyYXRlVGlsZShpLCBib2R5LCB0aWxlLCB0aWxlV29ybGRSZWN0LCB0aWxlbWFwTGF5ZXIsIHRoaXMuVElMRV9CSUFTLCBpc0xheWVyKSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsKys7XHJcblxyXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlkZUNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpZGVDYWxsYmFjay5jYWxsKGNhbGxiYWNrQ29udGV4dCwgc3ByaXRlLCB0aWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcE9ubHkgJiYgYm9keS5vbk92ZXJsYXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5USUxFX09WRVJMQVAsIHNwcml0ZSwgdGlsZSwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChib2R5Lm9uQ29sbGlkZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlRJTEVfQ09MTElERSwgc3ByaXRlLCB0aWxlLCBib2R5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbGxpc2lvbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIEdyb3VwIHZzLiBHcm91cCBjb2xsaXNpb25zLlxyXG4gICAgICogUGxlYXNlIHVzZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuV29ybGQjY29sbGlkZSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2NvbGxpZGVHcm91cFZzR3JvdXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gZ3JvdXAxIC0gVGhlIGZpcnN0IG9iamVjdCB0byBjaGVjayBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IGdyb3VwMiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNoZWNrIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge0FyY2FkZVBoeXNpY3NDYWxsYmFja30gW2NvbGxpZGVDYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBpZiB0aGUgb2JqZWN0cyBjb2xsaWRlLlxyXG4gICAgICogQHBhcmFtIHtBcmNhZGVQaHlzaWNzQ2FsbGJhY2t9IFtwcm9jZXNzQ2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBsZXRzIHlvdSBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIGFnYWluc3QgdGhlIHR3byBvYmplY3RzIGlmIHRoZXkgY29sbGlkZS4gSWYgdGhpcyBpcyBzZXQgdGhlbiBgY29sbGlkZUNhbGxiYWNrYCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoaXMgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3ZlcmxhcE9ubHkgLSBXaGV0aGVyIHRoaXMgaXMgYSBjb2xsaXNpb24gb3Igb3ZlcmxhcCBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFueSBvYmplY3RzIG92ZXJsYXAgKHdpdGggYG92ZXJsYXBPbmx5YCk7IG9yIHRydWUgaWYgYW55IG92ZXJsYXBwaW5nIG9iamVjdHMgd2VyZSBzZXBhcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVHcm91cFZzR3JvdXA6IGZ1bmN0aW9uIChncm91cDEsIGdyb3VwMiwgY29sbGlkZUNhbGxiYWNrLCBwcm9jZXNzQ2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgb3ZlcmxhcE9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGdyb3VwMS5sZW5ndGggPT09IDAgfHwgZ3JvdXAyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGdyb3VwMS5nZXRDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xsaWRlU3ByaXRlVnNHcm91cChjaGlsZHJlbltpXSwgZ3JvdXAyLCBjb2xsaWRlQ2FsbGJhY2ssIHByb2Nlc3NDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBvdmVybGFwT25seSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyYXAgYW4gb2JqZWN0J3MgY29vcmRpbmF0ZXMgKG9yIHNldmVyYWwgb2JqZWN0cycgY29vcmRpbmF0ZXMpIHdpdGhpbiB7QGxpbmsgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI2JvdW5kc30uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIG9iamVjdCBpcyBvdXRzaWRlIGFueSBib3VuZGFyeSBlZGdlIChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pLCBpdCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBzYW1lIG9mZnNldCBmcm9tIHRoZSBvcHBvc2l0ZSBlZGdlICh0aGUgaW50ZXJpb3IpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3dyYXBcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IC0gQSBHYW1lIE9iamVjdCwgYSBHcm91cCwgYW4gb2JqZWN0IHdpdGggYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMsIG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFkZGluZz0wXSAtIEFuIGFtb3VudCBhZGRlZCB0byBlYWNoIGJvdW5kYXJ5IGVkZ2UgZHVyaW5nIHRoZSBvcGVyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHdyYXA6IGZ1bmN0aW9uIChvYmplY3QsIHBhZGRpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG9iamVjdC5ib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53cmFwT2JqZWN0KG9iamVjdCwgcGFkZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9iamVjdC5nZXRDaGlsZHJlbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud3JhcEFycmF5KG9iamVjdC5nZXRDaGlsZHJlbigpLCBwYWRkaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53cmFwQXJyYXkob2JqZWN0LCBwYWRkaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53cmFwT2JqZWN0KG9iamVjdCwgcGFkZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyYXAgZWFjaCBvYmplY3QncyBjb29yZGluYXRlcyB3aXRoaW4ge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNib3VuZHN9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3dyYXBBcnJheVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheS48Kj59IG9iamVjdHMgLSBBbiBhcnJheSBvZiBvYmplY3RzIHRvIGJlIHdyYXBwZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3BhZGRpbmc9MF0gLSBBbiBhbW91bnQgYWRkZWQgdG8gdGhlIGJvdW5kYXJ5LlxyXG4gICAgICovXHJcbiAgICB3cmFwQXJyYXk6IGZ1bmN0aW9uIChvYmplY3RzLCBwYWRkaW5nKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud3JhcE9iamVjdChvYmplY3RzW2ldLCBwYWRkaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV3JhcCBhbiBvYmplY3QncyBjb29yZGluYXRlcyB3aXRoaW4ge0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNib3VuZHN9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLldvcmxkI3dyYXBPYmplY3RcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IC0gQSBHYW1lIE9iamVjdCwgYSBQaHlzaWNzIEJvZHksIG9yIGFueSBvYmplY3Qgd2l0aCBgeGAgYW5kIGB5YCBjb29yZGluYXRlc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYWRkaW5nPTBdIC0gQW4gYW1vdW50IGFkZGVkIHRvIHRoZSBib3VuZGFyeS5cclxuICAgICAqL1xyXG4gICAgd3JhcE9iamVjdDogZnVuY3Rpb24gKG9iamVjdCwgcGFkZGluZylcclxuICAgIHtcclxuICAgICAgICBpZiAocGFkZGluZyA9PT0gdW5kZWZpbmVkKSB7IHBhZGRpbmcgPSAwOyB9XHJcblxyXG4gICAgICAgIG9iamVjdC54ID0gV3JhcChvYmplY3QueCwgdGhpcy5ib3VuZHMubGVmdCAtIHBhZGRpbmcsIHRoaXMuYm91bmRzLnJpZ2h0ICsgcGFkZGluZyk7XHJcbiAgICAgICAgb2JqZWN0LnkgPSBXcmFwKG9iamVjdC55LCB0aGlzLmJvdW5kcy50b3AgLSBwYWRkaW5nLCB0aGlzLmJvdW5kcy5ib3R0b20gKyBwYWRkaW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHV0cyBkb3duIHRoZSBzaW11bGF0aW9uLCBjbGVhcmluZyBwaHlzaWNzIGRhdGEgYW5kIHJlbW92aW5nIGxpc3RlbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudHJlZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGljVHJlZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuYm9kaWVzLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0aWNCb2RpZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmNvbGxpZGVycy5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1dHMgZG93biB0aGUgc2ltdWxhdGlvbiBhbmQgZGlzY29ubmVjdHMgaXQgZnJvbSB0aGUgY3VycmVudCBzY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Xb3JsZCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmxkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/World.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Acceleration.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Acceleration.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the acceleration properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Acceleration\r\n * @since 3.0.0\r\n */\r\nvar Acceleration = {\r\n\r\n    /**\r\n     * Sets the body's horizontal and vertical acceleration. If the vertical acceleration value is not provided, the vertical acceleration is set to the same value as the horizontal acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Acceleration#setAcceleration\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal acceleration\r\n     * @param {number} [y=x] - The vertical acceleration\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAcceleration: function (x, y)\r\n    {\r\n        this.body.acceleration.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the body's horizontal acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Acceleration#setAccelerationX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The horizontal acceleration\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAccelerationX: function (value)\r\n    {\r\n        this.body.acceleration.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the body's vertical acceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Acceleration#setAccelerationY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The vertical acceleration\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAccelerationY: function (value)\r\n    {\r\n        this.body.acceleration.y = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Acceleration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0FjY2VsZXJhdGlvbi5qcz8wNjA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvY29tcG9uZW50cy9BY2NlbGVyYXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIHNldHRpbmcgdGhlIGFjY2VsZXJhdGlvbiBwcm9wZXJ0aWVzIG9mIGFuIEFyY2FkZSBQaHlzaWNzIEJvZHkuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQWNjZWxlcmF0aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIEFjY2VsZXJhdGlvbiA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvZHkncyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhY2NlbGVyYXRpb24uIElmIHRoZSB2ZXJ0aWNhbCBhY2NlbGVyYXRpb24gdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB0aGUgdmVydGljYWwgYWNjZWxlcmF0aW9uIGlzIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgaG9yaXpvbnRhbCBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5BY2NlbGVyYXRpb24jc2V0QWNjZWxlcmF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGFjY2VsZXJhdGlvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIGFjY2VsZXJhdGlvblxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjY2VsZXJhdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmFjY2VsZXJhdGlvbi5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvZHkncyBob3Jpem9udGFsIGFjY2VsZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkFjY2VsZXJhdGlvbiNzZXRBY2NlbGVyYXRpb25YXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgaG9yaXpvbnRhbCBhY2NlbGVyYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBY2NlbGVyYXRpb25YOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmFjY2VsZXJhdGlvbi54ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvZHkncyB2ZXJ0aWNhbCBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5BY2NlbGVyYXRpb24jc2V0QWNjZWxlcmF0aW9uWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZlcnRpY2FsIGFjY2VsZXJhdGlvblxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjY2VsZXJhdGlvblk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuYWNjZWxlcmF0aW9uLnkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBY2NlbGVyYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Acceleration.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Angular.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Angular.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the angular acceleration properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Angular\r\n * @since 3.0.0\r\n */\r\nvar Angular = {\r\n\r\n    /**\r\n     * Sets the angular velocity of the body.\r\n     * \r\n     * In Arcade Physics, bodies cannot rotate. They are always axis-aligned.\r\n     * However, they can have angular motion, which is passed on to the Game Object bound to the body,\r\n     * causing them to visually rotate, even though the body remains axis-aligned.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Angular#setAngularVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of angular velocity.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAngularVelocity: function (value)\r\n    {\r\n        this.body.angularVelocity = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angular acceleration of the body.\r\n     * \r\n     * In Arcade Physics, bodies cannot rotate. They are always axis-aligned.\r\n     * However, they can have angular motion, which is passed on to the Game Object bound to the body,\r\n     * causing them to visually rotate, even though the body remains axis-aligned.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Angular#setAngularAcceleration\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of angular acceleration.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAngularAcceleration: function (value)\r\n    {\r\n        this.body.angularAcceleration = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the angular drag of the body. Drag is applied to the current velocity, providing a form of deceleration.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Angular#setAngularDrag\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of drag.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAngularDrag: function (value)\r\n    {\r\n        this.body.angularDrag = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Angular;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0FuZ3VsYXIuanM/NmQxNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvQW5ndWxhci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgYW5ndWxhciBhY2NlbGVyYXRpb24gcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkFuZ3VsYXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgQW5ndWxhciA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFuZ3VsYXIgdmVsb2NpdHkgb2YgdGhlIGJvZHkuXHJcbiAgICAgKiBcclxuICAgICAqIEluIEFyY2FkZSBQaHlzaWNzLCBib2RpZXMgY2Fubm90IHJvdGF0ZS4gVGhleSBhcmUgYWx3YXlzIGF4aXMtYWxpZ25lZC5cclxuICAgICAqIEhvd2V2ZXIsIHRoZXkgY2FuIGhhdmUgYW5ndWxhciBtb3Rpb24sIHdoaWNoIGlzIHBhc3NlZCBvbiB0byB0aGUgR2FtZSBPYmplY3QgYm91bmQgdG8gdGhlIGJvZHksXHJcbiAgICAgKiBjYXVzaW5nIHRoZW0gdG8gdmlzdWFsbHkgcm90YXRlLCBldmVuIHRob3VnaCB0aGUgYm9keSByZW1haW5zIGF4aXMtYWxpZ25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkFuZ3VsYXIjc2V0QW5ndWxhclZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIGFuZ3VsYXIgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QW5ndWxhclZlbG9jaXR5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmFuZ3VsYXJWZWxvY2l0eSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbmd1bGFyIGFjY2VsZXJhdGlvbiBvZiB0aGUgYm9keS5cclxuICAgICAqIFxyXG4gICAgICogSW4gQXJjYWRlIFBoeXNpY3MsIGJvZGllcyBjYW5ub3Qgcm90YXRlLiBUaGV5IGFyZSBhbHdheXMgYXhpcy1hbGlnbmVkLlxyXG4gICAgICogSG93ZXZlciwgdGhleSBjYW4gaGF2ZSBhbmd1bGFyIG1vdGlvbiwgd2hpY2ggaXMgcGFzc2VkIG9uIHRvIHRoZSBHYW1lIE9iamVjdCBib3VuZCB0byB0aGUgYm9keSxcclxuICAgICAqIGNhdXNpbmcgdGhlbSB0byB2aXN1YWxseSByb3RhdGUsIGV2ZW4gdGhvdWdoIHRoZSBib2R5IHJlbWFpbnMgYXhpcy1hbGlnbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQW5ndWxhciNzZXRBbmd1bGFyQWNjZWxlcmF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIGFuZ3VsYXIgYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ3VsYXJBY2NlbGVyYXRpb246IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuYW5ndWxhckFjY2VsZXJhdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbmd1bGFyIGRyYWcgb2YgdGhlIGJvZHkuIERyYWcgaXMgYXBwbGllZCB0byB0aGUgY3VycmVudCB2ZWxvY2l0eSwgcHJvdmlkaW5nIGEgZm9ybSBvZiBkZWNlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5Bbmd1bGFyI3NldEFuZ3VsYXJEcmFnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIGRyYWcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QW5ndWxhckRyYWc6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuYW5ndWxhckRyYWcgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmd1bGFyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Angular.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Bounce.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Bounce.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the bounce properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Bounce\r\n * @since 3.0.0\r\n */\r\nvar Bounce = {\r\n\r\n    /**\r\n     * Sets the bounce values of this body.\r\n     * \r\n     * Bounce is the amount of restitution, or elasticity, the body has when it collides with another object.\r\n     * A value of 1 means that it will retain its full velocity after the rebound. A value of 0 means it will not rebound at all.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Bounce#setBounce\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of horizontal bounce to apply on collision. A float, typically between 0 and 1.\r\n     * @param {number} [y=x] - The amount of vertical bounce to apply on collision. A float, typically between 0 and 1.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setBounce: function (x, y)\r\n    {\r\n        this.body.bounce.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal bounce value for this body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Bounce#setBounceX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of horizontal bounce to apply on collision. A float, typically between 0 and 1.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setBounceX: function (value)\r\n    {\r\n        this.body.bounce.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical bounce value for this body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Bounce#setBounceY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of vertical bounce to apply on collision. A float, typically between 0 and 1.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setBounceY: function (value)\r\n    {\r\n        this.body.bounce.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets whether this Body collides with the world boundary.\r\n     * \r\n     * Optionally also sets the World Bounce values. If the `Body.worldBounce` is null, it's set to a new Vec2 first.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Bounce#setCollideWorldBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - `true` if this body should collide with the world bounds, otherwise `false`.\r\n     * @param {number} [bounceX] - If given this will be replace the `worldBounce.x` value.\r\n     * @param {number} [bounceY] - If given this will be replace the `worldBounce.y` value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setCollideWorldBounds: function (value, bounceX, bounceY)\r\n    {\r\n        this.body.setCollideWorldBounds(value, bounceX, bounceY);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Bounce;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0JvdW5jZS5qcz9mZTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvQm91bmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBib3VuY2UgcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkJvdW5jZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBCb3VuY2UgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib3VuY2UgdmFsdWVzIG9mIHRoaXMgYm9keS5cclxuICAgICAqIFxyXG4gICAgICogQm91bmNlIGlzIHRoZSBhbW91bnQgb2YgcmVzdGl0dXRpb24sIG9yIGVsYXN0aWNpdHksIHRoZSBib2R5IGhhcyB3aGVuIGl0IGNvbGxpZGVzIHdpdGggYW5vdGhlciBvYmplY3QuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgdGhhdCBpdCB3aWxsIHJldGFpbiBpdHMgZnVsbCB2ZWxvY2l0eSBhZnRlciB0aGUgcmVib3VuZC4gQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IHJlYm91bmQgYXQgYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQm91bmNlI3NldEJvdW5jZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgYm91bmNlIHRvIGFwcGx5IG9uIGNvbGxpc2lvbi4gQSBmbG9hdCwgdHlwaWNhbGx5IGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbW91bnQgb2YgdmVydGljYWwgYm91bmNlIHRvIGFwcGx5IG9uIGNvbGxpc2lvbi4gQSBmbG9hdCwgdHlwaWNhbGx5IGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb3VuY2U6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5ib3VuY2Uuc2V0KHgsIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIGJvdW5jZSB2YWx1ZSBmb3IgdGhpcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuQm91bmNlI3NldEJvdW5jZVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgb2YgaG9yaXpvbnRhbCBib3VuY2UgdG8gYXBwbHkgb24gY29sbGlzaW9uLiBBIGZsb2F0LCB0eXBpY2FsbHkgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5jZVg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuYm91bmNlLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgYm91bmNlIHZhbHVlIGZvciB0aGlzIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5Cb3VuY2Ujc2V0Qm91bmNlWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBib3VuY2UgdG8gYXBwbHkgb24gY29sbGlzaW9uLiBBIGZsb2F0LCB0eXBpY2FsbHkgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5jZVk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuYm91bmNlLnkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoaXMgQm9keSBjb2xsaWRlcyB3aXRoIHRoZSB3b3JsZCBib3VuZGFyeS5cclxuICAgICAqIFxyXG4gICAgICogT3B0aW9uYWxseSBhbHNvIHNldHMgdGhlIFdvcmxkIEJvdW5jZSB2YWx1ZXMuIElmIHRoZSBgQm9keS53b3JsZEJvdW5jZWAgaXMgbnVsbCwgaXQncyBzZXQgdG8gYSBuZXcgVmVjMiBmaXJzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkJvdW5jZSNzZXRDb2xsaWRlV29ybGRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gYHRydWVgIGlmIHRoaXMgYm9keSBzaG91bGQgY29sbGlkZSB3aXRoIHRoZSB3b3JsZCBib3VuZHMsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtib3VuY2VYXSAtIElmIGdpdmVuIHRoaXMgd2lsbCBiZSByZXBsYWNlIHRoZSBgd29ybGRCb3VuY2UueGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdW5jZVldIC0gSWYgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJlcGxhY2UgdGhlIGB3b3JsZEJvdW5jZS55YCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaWRlV29ybGRCb3VuZHM6IGZ1bmN0aW9uICh2YWx1ZSwgYm91bmNlWCwgYm91bmNlWSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuc2V0Q29sbGlkZVdvcmxkQm91bmRzKHZhbHVlLCBib3VuY2VYLCBib3VuY2VZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3VuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Bounce.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Debug.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Debug.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the debug properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Debug\r\n * @since 3.0.0\r\n */\r\nvar Debug = {\r\n\r\n    /**\r\n     * Sets the debug values of this body.\r\n     * \r\n     * Bodies will only draw their debug if debug has been enabled for Arcade Physics as a whole.\r\n     * Note that there is a performance cost in drawing debug displays. It should never be used in production.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Debug#setDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} showBody - Set to `true` to have this body render its outline to the debug display.\r\n     * @param {boolean} showVelocity - Set to `true` to have this body render a velocity marker to the debug display.\r\n     * @param {number} bodyColor - The color of the body outline when rendered to the debug display.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDebug: function (showBody, showVelocity, bodyColor)\r\n    {\r\n        this.debugShowBody = showBody;\r\n        this.debugShowVelocity = showVelocity;\r\n        this.debugBodyColor = bodyColor;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the color of the body outline when it renders to the debug display.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Debug#setDebugBodyColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The color of the body outline when rendered to the debug display.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDebugBodyColor: function (value)\r\n    {\r\n        this.body.debugBodyColor = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set to `true` to have this body render its outline to the debug display.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Components.Debug#debugShowBody\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    debugShowBody: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugShowBody;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugShowBody = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Set to `true` to have this body render a velocity marker to the debug display.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Components.Debug#debugShowVelocity\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    debugShowVelocity: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugShowVelocity;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugShowVelocity = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The color of the body outline when it renders to the debug display.\r\n     *\r\n     * @name Phaser.Physics.Arcade.Components.Debug#debugBodyColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    debugBodyColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugBodyColor;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugBodyColor = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Debug;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0RlYnVnLmpzP2FkZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvY29tcG9uZW50cy9EZWJ1Zy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgZGVidWcgcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkRlYnVnXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIERlYnVnID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGVidWcgdmFsdWVzIG9mIHRoaXMgYm9keS5cclxuICAgICAqIFxyXG4gICAgICogQm9kaWVzIHdpbGwgb25seSBkcmF3IHRoZWlyIGRlYnVnIGlmIGRlYnVnIGhhcyBiZWVuIGVuYWJsZWQgZm9yIEFyY2FkZSBQaHlzaWNzIGFzIGEgd2hvbGUuXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlcmUgaXMgYSBwZXJmb3JtYW5jZSBjb3N0IGluIGRyYXdpbmcgZGVidWcgZGlzcGxheXMuIEl0IHNob3VsZCBuZXZlciBiZSB1c2VkIGluIHByb2R1Y3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EZWJ1ZyNzZXREZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93Qm9keSAtIFNldCB0byBgdHJ1ZWAgdG8gaGF2ZSB0aGlzIGJvZHkgcmVuZGVyIGl0cyBvdXRsaW5lIHRvIHRoZSBkZWJ1ZyBkaXNwbGF5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93VmVsb2NpdHkgLSBTZXQgdG8gYHRydWVgIHRvIGhhdmUgdGhpcyBib2R5IHJlbmRlciBhIHZlbG9jaXR5IG1hcmtlciB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib2R5Q29sb3IgLSBUaGUgY29sb3Igb2YgdGhlIGJvZHkgb3V0bGluZSB3aGVuIHJlbmRlcmVkIHRvIHRoZSBkZWJ1ZyBkaXNwbGF5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERlYnVnOiBmdW5jdGlvbiAoc2hvd0JvZHksIHNob3dWZWxvY2l0eSwgYm9keUNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93Qm9keSA9IHNob3dCb2R5O1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93VmVsb2NpdHkgPSBzaG93VmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0JvZHlDb2xvciA9IGJvZHlDb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvZHkgb3V0bGluZSB3aGVuIGl0IHJlbmRlcnMgdG8gdGhlIGRlYnVnIGRpc3BsYXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EZWJ1ZyNzZXREZWJ1Z0JvZHlDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGNvbG9yIG9mIHRoZSBib2R5IG91dGxpbmUgd2hlbiByZW5kZXJlZCB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREZWJ1Z0JvZHlDb2xvcjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5kZWJ1Z0JvZHlDb2xvciA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhhdmUgdGhpcyBib2R5IHJlbmRlciBpdHMgb3V0bGluZSB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EZWJ1ZyNkZWJ1Z1Nob3dCb2R5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZWJ1Z1Nob3dCb2R5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkuZGVidWdTaG93Qm9keTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keS5kZWJ1Z1Nob3dCb2R5ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhhdmUgdGhpcyBib2R5IHJlbmRlciBhIHZlbG9jaXR5IG1hcmtlciB0byB0aGUgZGVidWcgZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EZWJ1ZyNkZWJ1Z1Nob3dWZWxvY2l0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVidWdTaG93VmVsb2NpdHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5kZWJ1Z1Nob3dWZWxvY2l0eTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keS5kZWJ1Z1Nob3dWZWxvY2l0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIG9mIHRoZSBib2R5IG91dGxpbmUgd2hlbiBpdCByZW5kZXJzIHRvIHRoZSBkZWJ1ZyBkaXNwbGF5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkRlYnVnI2RlYnVnQm9keUNvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlYnVnQm9keUNvbG9yOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkuZGVidWdCb2R5Q29sb3I7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGVidWdCb2R5Q29sb3IgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVidWc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Debug.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Drag.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Drag.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the drag properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Drag\r\n * @since 3.0.0\r\n */\r\nvar Drag = {\r\n\r\n    /**\r\n     * Sets the body's horizontal and vertical drag. If the vertical drag value is not provided, the vertical drag is set to the same value as the horizontal drag.\r\n     *\r\n     * Drag can be considered as a form of deceleration that will return the velocity of a body back to zero over time.\r\n     * It is the absolute loss of velocity due to movement, in pixels per second squared.\r\n     * The x and y components are applied separately.\r\n     *\r\n     * When `useDamping` is true, this is 1 minus the damping factor.\r\n     * A value of 1 means the Body loses no velocity.\r\n     * A value of 0.95 means the Body loses 5% of its velocity per step.\r\n     * A value of 0.5 means the Body loses 50% of its velocity per step.\r\n     *\r\n     * Drag is applied only when `acceleration` is zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Drag#setDrag\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of horizontal drag to apply.\r\n     * @param {number} [y=x] - The amount of vertical drag to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDrag: function (x, y)\r\n    {\r\n        this.body.drag.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the body's horizontal drag.\r\n     *\r\n     * Drag can be considered as a form of deceleration that will return the velocity of a body back to zero over time.\r\n     * It is the absolute loss of velocity due to movement, in pixels per second squared.\r\n     * The x and y components are applied separately.\r\n     *\r\n     * When `useDamping` is true, this is 1 minus the damping factor.\r\n     * A value of 1 means the Body loses no velocity.\r\n     * A value of 0.95 means the Body loses 5% of its velocity per step.\r\n     * A value of 0.5 means the Body loses 50% of its velocity per step.\r\n     *\r\n     * Drag is applied only when `acceleration` is zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Drag#setDragX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of horizontal drag to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDragX: function (value)\r\n    {\r\n        this.body.drag.x = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the body's vertical drag.\r\n     *\r\n     * Drag can be considered as a form of deceleration that will return the velocity of a body back to zero over time.\r\n     * It is the absolute loss of velocity due to movement, in pixels per second squared.\r\n     * The x and y components are applied separately.\r\n     *\r\n     * When `useDamping` is true, this is 1 minus the damping factor.\r\n     * A value of 1 means the Body loses no velocity.\r\n     * A value of 0.95 means the Body loses 5% of its velocity per step.\r\n     * A value of 0.5 means the Body loses 50% of its velocity per step.\r\n     *\r\n     * Drag is applied only when `acceleration` is zero.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Drag#setDragY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The amount of vertical drag to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDragY: function (value)\r\n    {\r\n        this.body.drag.y = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If this Body is using `drag` for deceleration this function controls how the drag is applied.\r\n     * If set to `true` drag will use a damping effect rather than a linear approach. If you are\r\n     * creating a game where the Body moves freely at any angle (i.e. like the way the ship moves in\r\n     * the game Asteroids) then you will get a far smoother and more visually correct deceleration\r\n     * by using damping, avoiding the axis-drift that is prone with linear deceleration.\r\n     *\r\n     * If you enable this property then you should use far smaller `drag` values than with linear, as\r\n     * they are used as a multiplier on the velocity. Values such as 0.95 will give a nice slow\r\n     * deceleration, where-as smaller values, such as 0.5 will stop an object almost immediately.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Drag#setDamping\r\n     * @since 3.10.0\r\n     *\r\n     * @param {boolean} value - `true` to use damping for deceleration, or `false` to use linear deceleration.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setDamping: function (value)\r\n    {\r\n        this.body.useDamping = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Drag;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0RyYWcuanM/YmNlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvY29tcG9uZW50cy9EcmFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBkcmFnIHByb3BlcnRpZXMgb2YgYW4gQXJjYWRlIFBoeXNpY3MgQm9keS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EcmFnXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIERyYWcgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib2R5J3MgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZHJhZy4gSWYgdGhlIHZlcnRpY2FsIGRyYWcgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB0aGUgdmVydGljYWwgZHJhZyBpcyBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGhvcml6b250YWwgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBEcmFnIGNhbiBiZSBjb25zaWRlcmVkIGFzIGEgZm9ybSBvZiBkZWNlbGVyYXRpb24gdGhhdCB3aWxsIHJldHVybiB0aGUgdmVsb2NpdHkgb2YgYSBib2R5IGJhY2sgdG8gemVybyBvdmVyIHRpbWUuXHJcbiAgICAgKiBJdCBpcyB0aGUgYWJzb2x1dGUgbG9zcyBvZiB2ZWxvY2l0eSBkdWUgdG8gbW92ZW1lbnQsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKiBUaGUgeCBhbmQgeSBjb21wb25lbnRzIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkuXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiBgdXNlRGFtcGluZ2AgaXMgdHJ1ZSwgdGhpcyBpcyAxIG1pbnVzIHRoZSBkYW1waW5nIGZhY3Rvci5cclxuICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyB0aGUgQm9keSBsb3NlcyBubyB2ZWxvY2l0eS5cclxuICAgICAqIEEgdmFsdWUgb2YgMC45NSBtZWFucyB0aGUgQm9keSBsb3NlcyA1JSBvZiBpdHMgdmVsb2NpdHkgcGVyIHN0ZXAuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAuNSBtZWFucyB0aGUgQm9keSBsb3NlcyA1MCUgb2YgaXRzIHZlbG9jaXR5IHBlciBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIERyYWcgaXMgYXBwbGllZCBvbmx5IHdoZW4gYGFjY2VsZXJhdGlvbmAgaXMgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkRyYWcjc2V0RHJhZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgZHJhZyB0byBhcHBseS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbW91bnQgb2YgdmVydGljYWwgZHJhZyB0byBhcHBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZHJhZy5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvZHkncyBob3Jpem9udGFsIGRyYWcuXHJcbiAgICAgKlxyXG4gICAgICogRHJhZyBjYW4gYmUgY29uc2lkZXJlZCBhcyBhIGZvcm0gb2YgZGVjZWxlcmF0aW9uIHRoYXQgd2lsbCByZXR1cm4gdGhlIHZlbG9jaXR5IG9mIGEgYm9keSBiYWNrIHRvIHplcm8gb3ZlciB0aW1lLlxyXG4gICAgICogSXQgaXMgdGhlIGFic29sdXRlIGxvc3Mgb2YgdmVsb2NpdHkgZHVlIHRvIG1vdmVtZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICogVGhlIHggYW5kIHkgY29tcG9uZW50cyBhcmUgYXBwbGllZCBzZXBhcmF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYHVzZURhbXBpbmdgIGlzIHRydWUsIHRoaXMgaXMgMSBtaW51cyB0aGUgZGFtcGluZyBmYWN0b3IuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgdGhlIEJvZHkgbG9zZXMgbm8gdmVsb2NpdHkuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAuOTUgbWVhbnMgdGhlIEJvZHkgbG9zZXMgNSUgb2YgaXRzIHZlbG9jaXR5IHBlciBzdGVwLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwLjUgbWVhbnMgdGhlIEJvZHkgbG9zZXMgNTAlIG9mIGl0cyB2ZWxvY2l0eSBwZXIgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBEcmFnIGlzIGFwcGxpZWQgb25seSB3aGVuIGBhY2NlbGVyYXRpb25gIGlzIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EcmFnI3NldERyYWdYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgZHJhZyB0byBhcHBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5kcmFnLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm9keSdzIHZlcnRpY2FsIGRyYWcuXHJcbiAgICAgKlxyXG4gICAgICogRHJhZyBjYW4gYmUgY29uc2lkZXJlZCBhcyBhIGZvcm0gb2YgZGVjZWxlcmF0aW9uIHRoYXQgd2lsbCByZXR1cm4gdGhlIHZlbG9jaXR5IG9mIGEgYm9keSBiYWNrIHRvIHplcm8gb3ZlciB0aW1lLlxyXG4gICAgICogSXQgaXMgdGhlIGFic29sdXRlIGxvc3Mgb2YgdmVsb2NpdHkgZHVlIHRvIG1vdmVtZW50LCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICogVGhlIHggYW5kIHkgY29tcG9uZW50cyBhcmUgYXBwbGllZCBzZXBhcmF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYHVzZURhbXBpbmdgIGlzIHRydWUsIHRoaXMgaXMgMSBtaW51cyB0aGUgZGFtcGluZyBmYWN0b3IuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgdGhlIEJvZHkgbG9zZXMgbm8gdmVsb2NpdHkuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAuOTUgbWVhbnMgdGhlIEJvZHkgbG9zZXMgNSUgb2YgaXRzIHZlbG9jaXR5IHBlciBzdGVwLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwLjUgbWVhbnMgdGhlIEJvZHkgbG9zZXMgNTAlIG9mIGl0cyB2ZWxvY2l0eSBwZXIgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBEcmFnIGlzIGFwcGxpZWQgb25seSB3aGVuIGBhY2NlbGVyYXRpb25gIGlzIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EcmFnI3NldERyYWdZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIHZlcnRpY2FsIGRyYWcgdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RHJhZ1k6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZHJhZy55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoaXMgQm9keSBpcyB1c2luZyBgZHJhZ2AgZm9yIGRlY2VsZXJhdGlvbiB0aGlzIGZ1bmN0aW9uIGNvbnRyb2xzIGhvdyB0aGUgZHJhZyBpcyBhcHBsaWVkLlxyXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCBkcmFnIHdpbGwgdXNlIGEgZGFtcGluZyBlZmZlY3QgcmF0aGVyIHRoYW4gYSBsaW5lYXIgYXBwcm9hY2guIElmIHlvdSBhcmVcclxuICAgICAqIGNyZWF0aW5nIGEgZ2FtZSB3aGVyZSB0aGUgQm9keSBtb3ZlcyBmcmVlbHkgYXQgYW55IGFuZ2xlIChpLmUuIGxpa2UgdGhlIHdheSB0aGUgc2hpcCBtb3ZlcyBpblxyXG4gICAgICogdGhlIGdhbWUgQXN0ZXJvaWRzKSB0aGVuIHlvdSB3aWxsIGdldCBhIGZhciBzbW9vdGhlciBhbmQgbW9yZSB2aXN1YWxseSBjb3JyZWN0IGRlY2VsZXJhdGlvblxyXG4gICAgICogYnkgdXNpbmcgZGFtcGluZywgYXZvaWRpbmcgdGhlIGF4aXMtZHJpZnQgdGhhdCBpcyBwcm9uZSB3aXRoIGxpbmVhciBkZWNlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGVuYWJsZSB0aGlzIHByb3BlcnR5IHRoZW4geW91IHNob3VsZCB1c2UgZmFyIHNtYWxsZXIgYGRyYWdgIHZhbHVlcyB0aGFuIHdpdGggbGluZWFyLCBhc1xyXG4gICAgICogdGhleSBhcmUgdXNlZCBhcyBhIG11bHRpcGxpZXIgb24gdGhlIHZlbG9jaXR5LiBWYWx1ZXMgc3VjaCBhcyAwLjk1IHdpbGwgZ2l2ZSBhIG5pY2Ugc2xvd1xyXG4gICAgICogZGVjZWxlcmF0aW9uLCB3aGVyZS1hcyBzbWFsbGVyIHZhbHVlcywgc3VjaCBhcyAwLjUgd2lsbCBzdG9wIGFuIG9iamVjdCBhbG1vc3QgaW1tZWRpYXRlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5EcmFnI3NldERhbXBpbmdcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gYHRydWVgIHRvIHVzZSBkYW1waW5nIGZvciBkZWNlbGVyYXRpb24sIG9yIGBmYWxzZWAgdG8gdXNlIGxpbmVhciBkZWNlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RGFtcGluZzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS51c2VEYW1waW5nID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRHJhZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Drag.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Enable.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Enable.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the enable properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Enable\r\n * @since 3.0.0\r\n */\r\nvar Enable = {\r\n\r\n    /**\r\n     * Enables this Game Object's Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Enable#enableBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} reset - Also reset the Body and place it at (x, y).\r\n     * @param {number} x - The horizontal position to place the Game Object and Body.\r\n     * @param {number} y - The horizontal position to place the Game Object and Body.\r\n     * @param {boolean} enableGameObject - Also activate this Game Object.\r\n     * @param {boolean} showGameObject - Also show this Game Object.\r\n     *\r\n     * @return {this} This Game Object.\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#enable\r\n     * @see Phaser.Physics.Arcade.StaticBody#enable\r\n     * @see Phaser.Physics.Arcade.Body#reset\r\n     * @see Phaser.Physics.Arcade.StaticBody#reset\r\n     * @see Phaser.GameObjects.GameObject#active\r\n     * @see Phaser.GameObjects.GameObject#visible\r\n     */\r\n    enableBody: function (reset, x, y, enableGameObject, showGameObject)\r\n    {\r\n        if (reset)\r\n        {\r\n            this.body.reset(x, y);\r\n        }\r\n\r\n        if (enableGameObject)\r\n        {\r\n            this.body.gameObject.active = true;\r\n        }\r\n\r\n        if (showGameObject)\r\n        {\r\n            this.body.gameObject.visible = true;\r\n        }\r\n\r\n        this.body.enable = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops and disables this Game Object's Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Enable#disableBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [disableGameObject=false] - Also deactivate this Game Object.\r\n     * @param {boolean} [hideGameObject=false] - Also hide this Game Object.\r\n     *\r\n     * @return {this} This Game Object.\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#enable\r\n     * @see Phaser.Physics.Arcade.StaticBody#enable\r\n     * @see Phaser.GameObjects.GameObject#active\r\n     * @see Phaser.GameObjects.GameObject#visible\r\n     */\r\n    disableBody: function (disableGameObject, hideGameObject)\r\n    {\r\n        if (disableGameObject === undefined) { disableGameObject = false; }\r\n        if (hideGameObject === undefined) { hideGameObject = false; }\r\n\r\n        this.body.stop();\r\n\r\n        this.body.enable = false;\r\n\r\n        if (disableGameObject)\r\n        {\r\n            this.body.gameObject.active = false;\r\n        }\r\n\r\n        if (hideGameObject)\r\n        {\r\n            this.body.gameObject.visible = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Syncs the Body's position and size with its parent Game Object.\r\n     * You don't need to call this for Dynamic Bodies, as it happens automatically.\r\n     * But for Static bodies it's a useful way of modifying the position of a Static Body\r\n     * in the Physics World, based on its Game Object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Enable#refreshBody\r\n     * @since 3.1.0\r\n     *\r\n     * @return {this} This Game Object.\r\n     *\r\n     * @see Phaser.Physics.Arcade.StaticBody#updateFromGameObject\r\n     */\r\n    refreshBody: function ()\r\n    {\r\n        this.body.updateFromGameObject();\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Enable;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0VuYWJsZS5qcz8wM2FhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsMkJBQTJCO0FBQ3pFLDJDQUEyQyx3QkFBd0I7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvRW5hYmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBlbmFibGUgcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkVuYWJsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBFbmFibGUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIHRoaXMgR2FtZSBPYmplY3QncyBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuRW5hYmxlI2VuYWJsZUJvZHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXQgLSBBbHNvIHJlc2V0IHRoZSBCb2R5IGFuZCBwbGFjZSBpdCBhdCAoeCwgeSkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHRvIHBsYWNlIHRoZSBHYW1lIE9iamVjdCBhbmQgQm9keS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gdG8gcGxhY2UgdGhlIEdhbWUgT2JqZWN0IGFuZCBCb2R5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVHYW1lT2JqZWN0IC0gQWxzbyBhY3RpdmF0ZSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93R2FtZU9iamVjdCAtIEFsc28gc2hvdyB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNlbmFibGVcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjZW5hYmxlXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3Jlc2V0XHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5I3Jlc2V0XHJcbiAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I2FjdGl2ZVxyXG4gICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCN2aXNpYmxlXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUJvZHk6IGZ1bmN0aW9uIChyZXNldCwgeCwgeSwgZW5hYmxlR2FtZU9iamVjdCwgc2hvd0dhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlc2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LnJlc2V0KHgsIHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZUdhbWVPYmplY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZ2FtZU9iamVjdC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3dHYW1lT2JqZWN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmdhbWVPYmplY3QudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvZHkuZW5hYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgYW5kIGRpc2FibGVzIHRoaXMgR2FtZSBPYmplY3QncyBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuRW5hYmxlI2Rpc2FibGVCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNhYmxlR2FtZU9iamVjdD1mYWxzZV0gLSBBbHNvIGRlYWN0aXZhdGUgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGVHYW1lT2JqZWN0PWZhbHNlXSAtIEFsc28gaGlkZSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNlbmFibGVcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjZW5hYmxlXHJcbiAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I2FjdGl2ZVxyXG4gICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCN2aXNpYmxlXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVCb2R5OiBmdW5jdGlvbiAoZGlzYWJsZUdhbWVPYmplY3QsIGhpZGVHYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXNhYmxlR2FtZU9iamVjdCA9PT0gdW5kZWZpbmVkKSB7IGRpc2FibGVHYW1lT2JqZWN0ID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoaGlkZUdhbWVPYmplY3QgPT09IHVuZGVmaW5lZCkgeyBoaWRlR2FtZU9iamVjdCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5zdG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5lbmFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGRpc2FibGVHYW1lT2JqZWN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmdhbWVPYmplY3QuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGlkZUdhbWVPYmplY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZ2FtZU9iamVjdC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTeW5jcyB0aGUgQm9keSdzIHBvc2l0aW9uIGFuZCBzaXplIHdpdGggaXRzIHBhcmVudCBHYW1lIE9iamVjdC5cclxuICAgICAqIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmb3IgRHluYW1pYyBCb2RpZXMsIGFzIGl0IGhhcHBlbnMgYXV0b21hdGljYWxseS5cclxuICAgICAqIEJ1dCBmb3IgU3RhdGljIGJvZGllcyBpdCdzIGEgdXNlZnVsIHdheSBvZiBtb2RpZnlpbmcgdGhlIHBvc2l0aW9uIG9mIGEgU3RhdGljIEJvZHlcclxuICAgICAqIGluIHRoZSBQaHlzaWNzIFdvcmxkLCBiYXNlZCBvbiBpdHMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5FbmFibGUjcmVmcmVzaEJvZHlcclxuICAgICAqIEBzaW5jZSAzLjEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keSN1cGRhdGVGcm9tR2FtZU9iamVjdFxyXG4gICAgICovXHJcbiAgICByZWZyZXNoQm9keTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkudXBkYXRlRnJvbUdhbWVPYmplY3QoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbmFibGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Enable.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Friction.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Friction.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the friction (e.g. the amount of velocity reduced over time) of the physics body when moving horizontally in the X axis. The higher than friction, the faster the body will slow down once force stops being applied to it.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Friction\r\n * @since 3.0.0\r\n */\r\nvar Friction = {\r\n\r\n    /**\r\n     * Sets the friction (e.g. the amount of velocity reduced over time) of the physics body when moving.\r\n     * The higher than friction, the faster the body will slow down once force stops being applied to it.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Friction#setFriction\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of horizontal friction to apply.\r\n     * @param {number} [y=x] - The amount of vertical friction to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setFriction: function (x, y)\r\n    {\r\n        this.body.friction.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the friction (e.g. the amount of velocity reduced over time) of the physics body when moving horizontally in the X axis.\r\n     * The higher than friction, the faster the body will slow down once force stops being applied to it.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Friction#setFrictionX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of friction to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setFrictionX: function (x)\r\n    {\r\n        this.body.friction.x = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the friction (e.g. the amount of velocity reduced over time) of the physics body when moving vertically in the Y axis.\r\n     * The higher than friction, the faster the body will slow down once force stops being applied to it.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Friction#setFrictionY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of friction to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setFrictionY: function (y)\r\n    {\r\n        this.body.friction.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Friction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0ZyaWN0aW9uLmpzPzA2OTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0ZyaWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgZnJpY3Rpb24gKGUuZy4gdGhlIGFtb3VudCBvZiB2ZWxvY2l0eSByZWR1Y2VkIG92ZXIgdGltZSkgb2YgdGhlIHBoeXNpY3MgYm9keSB3aGVuIG1vdmluZyBob3Jpem9udGFsbHkgaW4gdGhlIFggYXhpcy4gVGhlIGhpZ2hlciB0aGFuIGZyaWN0aW9uLCB0aGUgZmFzdGVyIHRoZSBib2R5IHdpbGwgc2xvdyBkb3duIG9uY2UgZm9yY2Ugc3RvcHMgYmVpbmcgYXBwbGllZCB0byBpdC5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5GcmljdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBGcmljdGlvbiA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZyaWN0aW9uIChlLmcuIHRoZSBhbW91bnQgb2YgdmVsb2NpdHkgcmVkdWNlZCBvdmVyIHRpbWUpIG9mIHRoZSBwaHlzaWNzIGJvZHkgd2hlbiBtb3ZpbmcuXHJcbiAgICAgKiBUaGUgaGlnaGVyIHRoYW4gZnJpY3Rpb24sIHRoZSBmYXN0ZXIgdGhlIGJvZHkgd2lsbCBzbG93IGRvd24gb25jZSBmb3JjZSBzdG9wcyBiZWluZyBhcHBsaWVkIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuRnJpY3Rpb24jc2V0RnJpY3Rpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCBvZiBob3Jpem9udGFsIGZyaWN0aW9uIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBmcmljdGlvbiB0byBhcHBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmZyaWN0aW9uLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJpY3Rpb24gKGUuZy4gdGhlIGFtb3VudCBvZiB2ZWxvY2l0eSByZWR1Y2VkIG92ZXIgdGltZSkgb2YgdGhlIHBoeXNpY3MgYm9keSB3aGVuIG1vdmluZyBob3Jpem9udGFsbHkgaW4gdGhlIFggYXhpcy5cclxuICAgICAqIFRoZSBoaWdoZXIgdGhhbiBmcmljdGlvbiwgdGhlIGZhc3RlciB0aGUgYm9keSB3aWxsIHNsb3cgZG93biBvbmNlIGZvcmNlIHN0b3BzIGJlaW5nIGFwcGxpZWQgdG8gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5GcmljdGlvbiNzZXRGcmljdGlvblhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCBvZiBmcmljdGlvbiB0byBhcHBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvblg6IGZ1bmN0aW9uICh4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5mcmljdGlvbi54ID0geDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJpY3Rpb24gKGUuZy4gdGhlIGFtb3VudCBvZiB2ZWxvY2l0eSByZWR1Y2VkIG92ZXIgdGltZSkgb2YgdGhlIHBoeXNpY3MgYm9keSB3aGVuIG1vdmluZyB2ZXJ0aWNhbGx5IGluIHRoZSBZIGF4aXMuXHJcbiAgICAgKiBUaGUgaGlnaGVyIHRoYW4gZnJpY3Rpb24sIHRoZSBmYXN0ZXIgdGhlIGJvZHkgd2lsbCBzbG93IGRvd24gb25jZSBmb3JjZSBzdG9wcyBiZWluZyBhcHBsaWVkIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuRnJpY3Rpb24jc2V0RnJpY3Rpb25ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgb2YgZnJpY3Rpb24gdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJpY3Rpb25ZOiBmdW5jdGlvbiAoeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZnJpY3Rpb24ueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRnJpY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Friction.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Gravity.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Gravity.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods for setting the gravity properties of an Arcade Physics Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Gravity\r\n * @since 3.0.0\r\n */\r\nvar Gravity = {\r\n\r\n    /**\r\n     * Set the X and Y values of the gravitational pull to act upon this Arcade Physics Game Object. Values can be positive or negative. Larger values result in a stronger effect.\r\n     * \r\n     * If only one value is provided, this value will be used for both the X and Y axis.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Gravity#setGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The gravitational force to be applied to the X-axis.\r\n     * @param {number} [y=x] - The gravitational force to be applied to the Y-axis. If this is not specified, the X value will be used.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setGravity: function (x, y)\r\n    {\r\n        this.body.gravity.set(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the gravitational force to be applied to the X axis. Value can be positive or negative. Larger values result in a stronger effect.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Gravity#setGravityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The gravitational force to be applied to the X-axis.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setGravityX: function (x)\r\n    {\r\n        this.body.gravity.x = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the gravitational force to be applied to the Y axis. Value can be positive or negative. Larger values result in a stronger effect.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Gravity#setGravityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - The gravitational force to be applied to the Y-axis.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setGravityY: function (y)\r\n    {\r\n        this.body.gravity.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Gravity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0dyYXZpdHkuanM/OWYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvR3Jhdml0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHNldHRpbmcgdGhlIGdyYXZpdHkgcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBHYW1lIE9iamVjdC5cclxuICogU2hvdWxkIGJlIGFwcGxpZWQgYXMgYSBtaXhpbiBhbmQgbm90IHVzZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuR3Jhdml0eVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBHcmF2aXR5ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBYIGFuZCBZIHZhbHVlcyBvZiB0aGUgZ3Jhdml0YXRpb25hbCBwdWxsIHRvIGFjdCB1cG9uIHRoaXMgQXJjYWRlIFBoeXNpY3MgR2FtZSBPYmplY3QuIFZhbHVlcyBjYW4gYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGEgc3Ryb25nZXIgZWZmZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBvbmx5IG9uZSB2YWx1ZSBpcyBwcm92aWRlZCwgdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIGJvdGggdGhlIFggYW5kIFkgYXhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkdyYXZpdHkjc2V0R3Jhdml0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZ3Jhdml0YXRpb25hbCBmb3JjZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBYLWF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgZ3Jhdml0YXRpb25hbCBmb3JjZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBZLWF4aXMuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCwgdGhlIFggdmFsdWUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5ncmF2aXR5LnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBncmF2aXRhdGlvbmFsIGZvcmNlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIFggYXhpcy4gVmFsdWUgY2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBhIHN0cm9uZ2VyIGVmZmVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkdyYXZpdHkjc2V0R3Jhdml0eVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGdyYXZpdGF0aW9uYWwgZm9yY2UgdG8gYmUgYXBwbGllZCB0byB0aGUgWC1heGlzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHlYOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZ3Jhdml0eS54ID0geDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBncmF2aXRhdGlvbmFsIGZvcmNlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIFkgYXhpcy4gVmFsdWUgY2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBhIHN0cm9uZ2VyIGVmZmVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkdyYXZpdHkjc2V0R3Jhdml0eVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGdyYXZpdGF0aW9uYWwgZm9yY2UgdG8gYmUgYXBwbGllZCB0byB0aGUgWS1heGlzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHlZOiBmdW5jdGlvbiAoeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZ3Jhdml0eS55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmF2aXR5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Gravity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Immovable.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Immovable.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the immovable properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Immovable\r\n * @since 3.0.0\r\n */\r\nvar Immovable = {\r\n\r\n    /**\r\n     * Sets Whether this Body can be moved by collisions with another Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Immovable#setImmovable\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [value=true] - Sets if this body can be moved by collisions with another Body.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setImmovable: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.body.immovable = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Immovable;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL0ltbW92YWJsZS5qcz9kNmNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvSW1tb3ZhYmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBpbW1vdmFibGUgcHJvcGVydGllcyBvZiBhbiBBcmNhZGUgUGh5c2ljcyBCb2R5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLkltbW92YWJsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBJbW1vdmFibGUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIFdoZXRoZXIgdGhpcyBCb2R5IGNhbiBiZSBtb3ZlZCBieSBjb2xsaXNpb25zIHdpdGggYW5vdGhlciBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuSW1tb3ZhYmxlI3NldEltbW92YWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBTZXRzIGlmIHRoaXMgYm9keSBjYW4gYmUgbW92ZWQgYnkgY29sbGlzaW9ucyB3aXRoIGFub3RoZXIgQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRJbW1vdmFibGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5ib2R5LmltbW92YWJsZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEltbW92YWJsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Immovable.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Mass.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Mass.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the mass properties of an Arcade Physics Body.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Mass\r\n * @since 3.0.0\r\n */\r\nvar Mass = {\r\n\r\n    /**\r\n     * Sets the mass of the physics body\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Mass#setMass\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - New value for the mass of the body.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setMass: function (value)\r\n    {\r\n        this.body.mass = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Mass;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL01hc3MuanM/NDZkOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvTWFzcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgbWFzcyBwcm9wZXJ0aWVzIG9mIGFuIEFyY2FkZSBQaHlzaWNzIEJvZHkuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuTWFzc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBNYXNzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWFzcyBvZiB0aGUgcGh5c2ljcyBib2R5XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5NYXNzI3NldE1hc3NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIE5ldyB2YWx1ZSBmb3IgdGhlIG1hc3Mgb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TWFzczogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5tYXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWFzcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Mass.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/OverlapCirc.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/OverlapCirc.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("var OverlapRect = __webpack_require__(/*! ./OverlapRect */ \"./node_modules/phaser/src/physics/arcade/components/OverlapRect.js\");\r\nvar Circle = __webpack_require__(/*! ../../../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar CircleToCircle = __webpack_require__(/*! ../../../geom/intersects/CircleToCircle */ \"./node_modules/phaser/src/geom/intersects/CircleToCircle.js\");\r\nvar CircleToRectangle = __webpack_require__(/*! ../../../geom/intersects/CircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\");\r\n\r\n/**\r\n * This method will search the given circular area and return an array of all physics bodies that\r\n * overlap with it. It can return either Dynamic, Static bodies or a mixture of both.\r\n *\r\n * A body only has to intersect with the search area to be considered, it doesn't have to be fully\r\n * contained within it.\r\n *\r\n * If Arcade Physics is set to use the RTree (which it is by default) then the search is rather fast,\r\n * otherwise the search is O(N) for Dynamic Bodies.\r\n *\r\n * @function Phaser.Physics.Arcade.Components.OverlapCirc\r\n * @since 3.21.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the area to search within.\r\n * @param {number} y - The y coordinate of the center of the area to search within.\r\n * @param {number} radius - The radius of the area to search within.\r\n * @param {boolean} [includeDynamic=true] - Should the search include Dynamic Bodies?\r\n * @param {boolean} [includeStatic=false] - Should the search include Static Bodies?\r\n *\r\n * @return {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[])} An array of bodies that overlap with the given area.\r\n */\r\nvar OverlapCirc = function (world, x, y, radius, includeDynamic, includeStatic)\r\n{\r\n    var bodiesInRect = OverlapRect(world, x - radius, y - radius, 2 * radius, 2 * radius, includeDynamic, includeStatic);\r\n\r\n    if (bodiesInRect.length === 0)\r\n    {\r\n        return bodiesInRect;\r\n    }\r\n\r\n    var area = new Circle(x, y, radius);\r\n    var circFromBody = new Circle();\r\n    var bodiesInArea = [];\r\n\r\n    for (var i = 0; i < bodiesInRect.length; i++)\r\n    {\r\n        var body = bodiesInRect[i];\r\n\r\n        if (body.isCircle)\r\n        {\r\n            circFromBody.setTo(body.center.x, body.center.y, body.halfWidth);\r\n\r\n            if (CircleToCircle(area, circFromBody))\r\n            {\r\n                bodiesInArea.push(body);\r\n            }\r\n        }\r\n        else if (CircleToRectangle(area, body))\r\n        {\r\n            bodiesInArea.push(body);\r\n        }\r\n    }\r\n\r\n    return bodiesInArea;\r\n};\r\n\r\nmodule.exports = OverlapCirc;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL092ZXJsYXBDaXJjLmpzP2FjNDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMseUZBQWU7QUFDekMsYUFBYSxtQkFBTyxDQUFDLG9GQUE2QjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQyw0R0FBeUM7QUFDdEUsd0JBQXdCLG1CQUFPLENBQUMsa0hBQTRDOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLGtFQUFrRTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHlCQUF5QjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvY29tcG9uZW50cy9PdmVybGFwQ2lyYy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBPdmVybGFwUmVjdCA9IHJlcXVpcmUoJy4vT3ZlcmxhcFJlY3QnKTtcclxudmFyIENpcmNsZSA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vY2lyY2xlL0NpcmNsZScpO1xyXG52YXIgQ2lyY2xlVG9DaXJjbGUgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL2ludGVyc2VjdHMvQ2lyY2xlVG9DaXJjbGUnKTtcclxudmFyIENpcmNsZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9pbnRlcnNlY3RzL0NpcmNsZVRvUmVjdGFuZ2xlJyk7XHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2Qgd2lsbCBzZWFyY2ggdGhlIGdpdmVuIGNpcmN1bGFyIGFyZWEgYW5kIHJldHVybiBhbiBhcnJheSBvZiBhbGwgcGh5c2ljcyBib2RpZXMgdGhhdFxyXG4gKiBvdmVybGFwIHdpdGggaXQuIEl0IGNhbiByZXR1cm4gZWl0aGVyIER5bmFtaWMsIFN0YXRpYyBib2RpZXMgb3IgYSBtaXh0dXJlIG9mIGJvdGguXHJcbiAqXHJcbiAqIEEgYm9keSBvbmx5IGhhcyB0byBpbnRlcnNlY3Qgd2l0aCB0aGUgc2VhcmNoIGFyZWEgdG8gYmUgY29uc2lkZXJlZCwgaXQgZG9lc24ndCBoYXZlIHRvIGJlIGZ1bGx5XHJcbiAqIGNvbnRhaW5lZCB3aXRoaW4gaXQuXHJcbiAqXHJcbiAqIElmIEFyY2FkZSBQaHlzaWNzIGlzIHNldCB0byB1c2UgdGhlIFJUcmVlICh3aGljaCBpdCBpcyBieSBkZWZhdWx0KSB0aGVuIHRoZSBzZWFyY2ggaXMgcmF0aGVyIGZhc3QsXHJcbiAqIG90aGVyd2lzZSB0aGUgc2VhcmNoIGlzIE8oTikgZm9yIER5bmFtaWMgQm9kaWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuT3ZlcmxhcENpcmNcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlRHluYW1pYz10cnVlXSAtIFNob3VsZCB0aGUgc2VhcmNoIGluY2x1ZGUgRHluYW1pYyBCb2RpZXM/XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVTdGF0aWM9ZmFsc2VdIC0gU2hvdWxkIHRoZSBzZWFyY2ggaW5jbHVkZSBTdGF0aWMgQm9kaWVzP1xyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHlbXXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keVtdKX0gQW4gYXJyYXkgb2YgYm9kaWVzIHRoYXQgb3ZlcmxhcCB3aXRoIHRoZSBnaXZlbiBhcmVhLlxyXG4gKi9cclxudmFyIE92ZXJsYXBDaXJjID0gZnVuY3Rpb24gKHdvcmxkLCB4LCB5LCByYWRpdXMsIGluY2x1ZGVEeW5hbWljLCBpbmNsdWRlU3RhdGljKVxyXG57XHJcbiAgICB2YXIgYm9kaWVzSW5SZWN0ID0gT3ZlcmxhcFJlY3Qod29ybGQsIHggLSByYWRpdXMsIHkgLSByYWRpdXMsIDIgKiByYWRpdXMsIDIgKiByYWRpdXMsIGluY2x1ZGVEeW5hbWljLCBpbmNsdWRlU3RhdGljKTtcclxuXHJcbiAgICBpZiAoYm9kaWVzSW5SZWN0Lmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gYm9kaWVzSW5SZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhcmVhID0gbmV3IENpcmNsZSh4LCB5LCByYWRpdXMpO1xyXG4gICAgdmFyIGNpcmNGcm9tQm9keSA9IG5ldyBDaXJjbGUoKTtcclxuICAgIHZhciBib2RpZXNJbkFyZWEgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllc0luUmVjdC5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9keSA9IGJvZGllc0luUmVjdFtpXTtcclxuXHJcbiAgICAgICAgaWYgKGJvZHkuaXNDaXJjbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaXJjRnJvbUJvZHkuc2V0VG8oYm9keS5jZW50ZXIueCwgYm9keS5jZW50ZXIueSwgYm9keS5oYWxmV2lkdGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKENpcmNsZVRvQ2lyY2xlKGFyZWEsIGNpcmNGcm9tQm9keSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZGllc0luQXJlYS5wdXNoKGJvZHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKENpcmNsZVRvUmVjdGFuZ2xlKGFyZWEsIGJvZHkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9kaWVzSW5BcmVhLnB1c2goYm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib2RpZXNJbkFyZWE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE92ZXJsYXBDaXJjO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/OverlapCirc.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/OverlapRect.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/OverlapRect.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * This method will search the given rectangular area and return an array of all physics bodies that\r\n * overlap with it. It can return either Dynamic, Static bodies or a mixture of both.\r\n * \r\n * A body only has to intersect with the search area to be considered, it doesn't have to be fully\r\n * contained within it.\r\n * \r\n * If Arcade Physics is set to use the RTree (which it is by default) then the search for is extremely fast,\r\n * otherwise the search is O(N) for Dynamic Bodies.\r\n *\r\n * @function Phaser.Physics.Arcade.Components.OverlapRect\r\n * @since 3.17.0\r\n *\r\n * @param {number} x - The top-left x coordinate of the area to search within.\r\n * @param {number} y - The top-left y coordinate of the area to search within.\r\n * @param {number} width - The width of the area to search within.\r\n * @param {number} height - The height of the area to search within.\r\n * @param {boolean} [includeDynamic=true] - Should the search include Dynamic Bodies?\r\n * @param {boolean} [includeStatic=false] - Should the search include Static Bodies?\r\n *\r\n * @return {(Phaser.Physics.Arcade.Body[]|Phaser.Physics.Arcade.StaticBody[])} An array of bodies that overlap with the given area.\r\n */\r\nvar OverlapRect = function (world, x, y, width, height, includeDynamic, includeStatic)\r\n{\r\n    if (includeDynamic === undefined) { includeDynamic = true; }\r\n    if (includeStatic === undefined) { includeStatic = false; }\r\n\r\n    var dynamicBodies = [];\r\n    var staticBodies = [];\r\n\r\n    var minMax = world.treeMinMax;\r\n\r\n    minMax.minX = x;\r\n    minMax.minY = y;\r\n    minMax.maxX = x + width;\r\n    minMax.maxY = y + height;\r\n\r\n    if (includeStatic)\r\n    {\r\n        staticBodies = world.staticTree.search(minMax);\r\n    }\r\n\r\n    if (includeDynamic && world.useTree)\r\n    {\r\n        dynamicBodies = world.tree.search(minMax);\r\n    }\r\n    else if (includeDynamic)\r\n    {\r\n        var bodies = world.bodies;\r\n\r\n        var fakeBody =\r\n        {\r\n            position: {\r\n                x: x,\r\n                y: y\r\n            },\r\n            left: x,\r\n            top: y,\r\n            right: x + width,\r\n            bottom: y + height,\r\n            isCircle: false\r\n        };\r\n\r\n        var intersects = world.intersects;\r\n\r\n        bodies.iterate(function (target)\r\n        {\r\n            if (intersects(target, fakeBody))\r\n            {\r\n                dynamicBodies.push(target);\r\n            }\r\n\r\n        });\r\n    }\r\n\r\n    return staticBodies.concat(dynamicBodies);\r\n};\r\n\r\nmodule.exports = OverlapRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL092ZXJsYXBSZWN0LmpzPzYyMGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksa0VBQWtFO0FBQzlFO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyx1QkFBdUI7QUFDOUQsc0NBQXNDLHVCQUF1Qjs7QUFFN0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL092ZXJsYXBSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHBoeXNpY3MgYm9kaWVzIHRoYXRcclxuICogb3ZlcmxhcCB3aXRoIGl0LiBJdCBjYW4gcmV0dXJuIGVpdGhlciBEeW5hbWljLCBTdGF0aWMgYm9kaWVzIG9yIGEgbWl4dHVyZSBvZiBib3RoLlxyXG4gKiBcclxuICogQSBib2R5IG9ubHkgaGFzIHRvIGludGVyc2VjdCB3aXRoIHRoZSBzZWFyY2ggYXJlYSB0byBiZSBjb25zaWRlcmVkLCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgZnVsbHlcclxuICogY29udGFpbmVkIHdpdGhpbiBpdC5cclxuICogXHJcbiAqIElmIEFyY2FkZSBQaHlzaWNzIGlzIHNldCB0byB1c2UgdGhlIFJUcmVlICh3aGljaCBpdCBpcyBieSBkZWZhdWx0KSB0aGVuIHRoZSBzZWFyY2ggZm9yIGlzIGV4dHJlbWVseSBmYXN0LFxyXG4gKiBvdGhlcndpc2UgdGhlIHNlYXJjaCBpcyBPKE4pIGZvciBEeW5hbWljIEJvZGllcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLk92ZXJsYXBSZWN0XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgdG9wLWxlZnQgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIHNlYXJjaCB3aXRoaW4uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHRvcC1sZWZ0IHkgY29vcmRpbmF0ZSBvZiB0aGUgYXJlYSB0byBzZWFyY2ggd2l0aGluLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEgdG8gc2VhcmNoIHdpdGhpbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgdG8gc2VhcmNoIHdpdGhpbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUR5bmFtaWM9dHJ1ZV0gLSBTaG91bGQgdGhlIHNlYXJjaCBpbmNsdWRlIER5bmFtaWMgQm9kaWVzP1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlU3RhdGljPWZhbHNlXSAtIFNob3VsZCB0aGUgc2VhcmNoIGluY2x1ZGUgU3RhdGljIEJvZGllcz9cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5W118UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHlbXSl9IEFuIGFycmF5IG9mIGJvZGllcyB0aGF0IG92ZXJsYXAgd2l0aCB0aGUgZ2l2ZW4gYXJlYS5cclxuICovXHJcbnZhciBPdmVybGFwUmVjdCA9IGZ1bmN0aW9uICh3b3JsZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaW5jbHVkZUR5bmFtaWMsIGluY2x1ZGVTdGF0aWMpXHJcbntcclxuICAgIGlmIChpbmNsdWRlRHluYW1pYyA9PT0gdW5kZWZpbmVkKSB7IGluY2x1ZGVEeW5hbWljID0gdHJ1ZTsgfVxyXG4gICAgaWYgKGluY2x1ZGVTdGF0aWMgPT09IHVuZGVmaW5lZCkgeyBpbmNsdWRlU3RhdGljID0gZmFsc2U7IH1cclxuXHJcbiAgICB2YXIgZHluYW1pY0JvZGllcyA9IFtdO1xyXG4gICAgdmFyIHN0YXRpY0JvZGllcyA9IFtdO1xyXG5cclxuICAgIHZhciBtaW5NYXggPSB3b3JsZC50cmVlTWluTWF4O1xyXG5cclxuICAgIG1pbk1heC5taW5YID0geDtcclxuICAgIG1pbk1heC5taW5ZID0geTtcclxuICAgIG1pbk1heC5tYXhYID0geCArIHdpZHRoO1xyXG4gICAgbWluTWF4Lm1heFkgPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgIGlmIChpbmNsdWRlU3RhdGljKVxyXG4gICAge1xyXG4gICAgICAgIHN0YXRpY0JvZGllcyA9IHdvcmxkLnN0YXRpY1RyZWUuc2VhcmNoKG1pbk1heCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluY2x1ZGVEeW5hbWljICYmIHdvcmxkLnVzZVRyZWUpXHJcbiAgICB7XHJcbiAgICAgICAgZHluYW1pY0JvZGllcyA9IHdvcmxkLnRyZWUuc2VhcmNoKG1pbk1heCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmNsdWRlRHluYW1pYylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9kaWVzID0gd29ybGQuYm9kaWVzO1xyXG5cclxuICAgICAgICB2YXIgZmFrZUJvZHkgPVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICAgICAgICB5OiB5XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcclxuICAgICAgICAgICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxyXG4gICAgICAgICAgICBpc0NpcmNsZTogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgaW50ZXJzZWN0cyA9IHdvcmxkLmludGVyc2VjdHM7XHJcblxyXG4gICAgICAgIGJvZGllcy5pdGVyYXRlKGZ1bmN0aW9uICh0YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0cyh0YXJnZXQsIGZha2VCb2R5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHluYW1pY0JvZGllcy5wdXNoKHRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0YXRpY0JvZGllcy5jb25jYXQoZHluYW1pY0JvZGllcyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE92ZXJsYXBSZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/OverlapRect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Size.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Size.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods for setting the size of an Arcade Physics Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Size\r\n * @since 3.0.0\r\n */\r\nvar Size = {\r\n\r\n    /**\r\n     * Sets the body offset. This allows you to adjust the difference between the center of the body\r\n     * and the x and y coordinates of the parent Game Object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Size#setOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount to offset the body from the parent Game Object along the x-axis.\r\n     * @param {number} [y=x] - The amount to offset the body from the parent Game Object along the y-axis. Defaults to the value given for the x-axis.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setOffset: function (x, y)\r\n    {\r\n        this.body.setOffset(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the size of this physics body. Setting the size does not adjust the dimensions\r\n     * of the parent Game Object.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Size#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The new width of the physics body, in pixels.\r\n     * @param {number} height - The new height of the physics body, in pixels.\r\n     * @param {boolean} [center=true] - Should the body be re-positioned so its center aligns with the parent Game Object?\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setSize: function (width, height, center)\r\n    {\r\n        this.body.setSize(width, height, center);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets this physics body to use a circle for collision instead of a rectangle.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Size#setCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the physics body, in pixels.\r\n     * @param {number} [offsetX] - The amount to offset the body from the parent Game Object along the x-axis.\r\n     * @param {number} [offsetY] - The amount to offset the body from the parent Game Object along the y-axis.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setCircle: function (radius, offsetX, offsetY)\r\n    {\r\n        this.body.setCircle(radius, offsetX, offsetY);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Size;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL1NpemUuanM/MGU0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL1NpemUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciBzZXR0aW5nIHRoZSBzaXplIG9mIGFuIEFyY2FkZSBQaHlzaWNzIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFNpemUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib2R5IG9mZnNldC4gVGhpcyBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjZW50ZXIgb2YgdGhlIGJvZHlcclxuICAgICAqIGFuZCB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50IEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuU2l6ZSNzZXRPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCB0byBvZmZzZXQgdGhlIGJvZHkgZnJvbSB0aGUgcGFyZW50IEdhbWUgT2JqZWN0IGFsb25nIHRoZSB4LWF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIG9mZnNldCB0aGUgYm9keSBmcm9tIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QgYWxvbmcgdGhlIHktYXhpcy4gRGVmYXVsdHMgdG8gdGhlIHZhbHVlIGdpdmVuIGZvciB0aGUgeC1heGlzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldE9mZnNldDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LnNldE9mZnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIHBoeXNpY3MgYm9keS4gU2V0dGluZyB0aGUgc2l6ZSBkb2VzIG5vdCBhZGp1c3QgdGhlIGRpbWVuc2lvbnNcclxuICAgICAqIG9mIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5TaXplI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIHBoeXNpY3MgYm9keSwgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBwaHlzaWNzIGJvZHksIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NlbnRlcj10cnVlXSAtIFNob3VsZCB0aGUgYm9keSBiZSByZS1wb3NpdGlvbmVkIHNvIGl0cyBjZW50ZXIgYWxpZ25zIHdpdGggdGhlIHBhcmVudCBHYW1lIE9iamVjdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgY2VudGVyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIGNlbnRlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBwaHlzaWNzIGJvZHkgdG8gdXNlIGEgY2lyY2xlIGZvciBjb2xsaXNpb24gaW5zdGVhZCBvZiBhIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLlNpemUjc2V0Q2lyY2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgcGh5c2ljcyBib2R5LCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFhdIC0gVGhlIGFtb3VudCB0byBvZmZzZXQgdGhlIGJvZHkgZnJvbSB0aGUgcGFyZW50IEdhbWUgT2JqZWN0IGFsb25nIHRoZSB4LWF4aXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFldIC0gVGhlIGFtb3VudCB0byBvZmZzZXQgdGhlIGJvZHkgZnJvbSB0aGUgcGFyZW50IEdhbWUgT2JqZWN0IGFsb25nIHRoZSB5LWF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2lyY2xlOiBmdW5jdGlvbiAocmFkaXVzLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5zZXRDaXJjbGUocmFkaXVzLCBvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaXplO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Size.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/Velocity.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/Velocity.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods for modifying the velocity of an Arcade Physics body.\r\n *\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.Physics.Arcade.Components.Velocity\r\n * @since 3.0.0\r\n */\r\nvar Velocity = {\r\n\r\n    /**\r\n     * Sets the velocity of the Body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Velocity#setVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity of the body. Positive values move the body to the right, while negative values move it to the left.\r\n     * @param {number} [y=x] - The vertical velocity of the body. Positive values move the body down, while negative values move it up.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocity: function (x, y)\r\n    {\r\n        this.body.setVelocity(x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal component of the body's velocity.\r\n     *\r\n     * Positive values move the body to the right, while negative values move it to the left.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Velocity#setVelocityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The new horizontal velocity.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocityX: function (x)\r\n    {\r\n        this.body.setVelocityX(x);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical component of the body's velocity.\r\n     *\r\n     * Positive values move the body down, while negative values move it up.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Velocity#setVelocityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - The new vertical velocity of the body.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocityY: function (y)\r\n    {\r\n        this.body.setVelocityY(y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the maximum velocity of the body.\r\n     *\r\n     * @method Phaser.Physics.Arcade.Components.Velocity#setMaxVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The new maximum horizontal velocity.\r\n     * @param {number} [y=x] - The new maximum vertical velocity.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setMaxVelocity: function (x, y)\r\n    {\r\n        this.body.maxVelocity.set(x, y);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Velocity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL1ZlbG9jaXR5LmpzP2RlNTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2NvbXBvbmVudHMvVmVsb2NpdHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciBtb2RpZnlpbmcgdGhlIHZlbG9jaXR5IG9mIGFuIEFyY2FkZSBQaHlzaWNzIGJvZHkuXHJcbiAqXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Db21wb25lbnRzLlZlbG9jaXR5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFZlbG9jaXR5ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVsb2NpdHkgb2YgdGhlIEJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50cy5WZWxvY2l0eSNzZXRWZWxvY2l0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB2ZWxvY2l0eSBvZiB0aGUgYm9keS4gUG9zaXRpdmUgdmFsdWVzIG1vdmUgdGhlIGJvZHkgdG8gdGhlIHJpZ2h0LCB3aGlsZSBuZWdhdGl2ZSB2YWx1ZXMgbW92ZSBpdCB0byB0aGUgbGVmdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB2ZXJ0aWNhbCB2ZWxvY2l0eSBvZiB0aGUgYm9keS4gUG9zaXRpdmUgdmFsdWVzIG1vdmUgdGhlIGJvZHkgZG93biwgd2hpbGUgbmVnYXRpdmUgdmFsdWVzIG1vdmUgaXQgdXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5zZXRWZWxvY2l0eSh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaG9yaXpvbnRhbCBjb21wb25lbnQgb2YgdGhlIGJvZHkncyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBQb3NpdGl2ZSB2YWx1ZXMgbW92ZSB0aGUgYm9keSB0byB0aGUgcmlnaHQsIHdoaWxlIG5lZ2F0aXZlIHZhbHVlcyBtb3ZlIGl0IHRvIHRoZSBsZWZ0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuVmVsb2NpdHkjc2V0VmVsb2NpdHlYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBuZXcgaG9yaXpvbnRhbCB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWZWxvY2l0eVg6IGZ1bmN0aW9uICh4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5zZXRWZWxvY2l0eVgoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZlcnRpY2FsIGNvbXBvbmVudCBvZiB0aGUgYm9keSdzIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIFBvc2l0aXZlIHZhbHVlcyBtb3ZlIHRoZSBib2R5IGRvd24sIHdoaWxlIG5lZ2F0aXZlIHZhbHVlcyBtb3ZlIGl0IHVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuVmVsb2NpdHkjc2V0VmVsb2NpdHlZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBuZXcgdmVydGljYWwgdmVsb2NpdHkgb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHlZOiBmdW5jdGlvbiAoeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuc2V0VmVsb2NpdHlZKHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIHZlbG9jaXR5IG9mIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkNvbXBvbmVudHMuVmVsb2NpdHkjc2V0TWF4VmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIG5ldyBtYXhpbXVtIGhvcml6b250YWwgdmVsb2NpdHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgbmV3IG1heGltdW0gdmVydGljYWwgdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TWF4VmVsb2NpdHk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5tYXhWZWxvY2l0eS5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmVsb2NpdHk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/Velocity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/components/index.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/components/index.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Arcade.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Acceleration: __webpack_require__(/*! ./Acceleration */ \"./node_modules/phaser/src/physics/arcade/components/Acceleration.js\"),\r\n    Angular: __webpack_require__(/*! ./Angular */ \"./node_modules/phaser/src/physics/arcade/components/Angular.js\"),\r\n    Bounce: __webpack_require__(/*! ./Bounce */ \"./node_modules/phaser/src/physics/arcade/components/Bounce.js\"),\r\n    Debug: __webpack_require__(/*! ./Debug */ \"./node_modules/phaser/src/physics/arcade/components/Debug.js\"),\r\n    Drag: __webpack_require__(/*! ./Drag */ \"./node_modules/phaser/src/physics/arcade/components/Drag.js\"),\r\n    Enable: __webpack_require__(/*! ./Enable */ \"./node_modules/phaser/src/physics/arcade/components/Enable.js\"),\r\n    Friction: __webpack_require__(/*! ./Friction */ \"./node_modules/phaser/src/physics/arcade/components/Friction.js\"),\r\n    Gravity: __webpack_require__(/*! ./Gravity */ \"./node_modules/phaser/src/physics/arcade/components/Gravity.js\"),\r\n    Immovable: __webpack_require__(/*! ./Immovable */ \"./node_modules/phaser/src/physics/arcade/components/Immovable.js\"),\r\n    Mass: __webpack_require__(/*! ./Mass */ \"./node_modules/phaser/src/physics/arcade/components/Mass.js\"),\r\n    Size: __webpack_require__(/*! ./Size */ \"./node_modules/phaser/src/physics/arcade/components/Size.js\"),\r\n    Velocity: __webpack_require__(/*! ./Velocity */ \"./node_modules/phaser/src/physics/arcade/components/Velocity.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL2luZGV4LmpzPzNhZmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBZ0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlGQUFXO0FBQ2hDLFlBQVksbUJBQU8sQ0FBQywrRUFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsNkVBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLDJFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQywrRUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsbUZBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlGQUFXO0FBQ2hDLGVBQWUsbUJBQU8sQ0FBQyxxRkFBYTtBQUNwQyxVQUFVLG1CQUFPLENBQUMsMkVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLDJFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxtRkFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb21wb25lbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQ29tcG9uZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFjY2VsZXJhdGlvbjogcmVxdWlyZSgnLi9BY2NlbGVyYXRpb24nKSxcclxuICAgIEFuZ3VsYXI6IHJlcXVpcmUoJy4vQW5ndWxhcicpLFxyXG4gICAgQm91bmNlOiByZXF1aXJlKCcuL0JvdW5jZScpLFxyXG4gICAgRGVidWc6IHJlcXVpcmUoJy4vRGVidWcnKSxcclxuICAgIERyYWc6IHJlcXVpcmUoJy4vRHJhZycpLFxyXG4gICAgRW5hYmxlOiByZXF1aXJlKCcuL0VuYWJsZScpLFxyXG4gICAgRnJpY3Rpb246IHJlcXVpcmUoJy4vRnJpY3Rpb24nKSxcclxuICAgIEdyYXZpdHk6IHJlcXVpcmUoJy4vR3Jhdml0eScpLFxyXG4gICAgSW1tb3ZhYmxlOiByZXF1aXJlKCcuL0ltbW92YWJsZScpLFxyXG4gICAgTWFzczogcmVxdWlyZSgnLi9NYXNzJyksXHJcbiAgICBTaXplOiByZXF1aXJlKCcuL1NpemUnKSxcclxuICAgIFZlbG9jaXR5OiByZXF1aXJlKCcuL1ZlbG9jaXR5JylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/components/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/const.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/const.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Arcade Physics consts.\r\n *\r\n * @ignore\r\n */\r\n\r\nvar CONST = {\r\n\r\n    /**\r\n     * Dynamic Body.\r\n     *\r\n     * @name Phaser.Physics.Arcade.DYNAMIC_BODY\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#physicsType\r\n     * @see Phaser.Physics.Arcade.Group#physicsType\r\n     */\r\n    DYNAMIC_BODY: 0,\r\n\r\n    /**\r\n     * Static Body.\r\n     *\r\n     * @name Phaser.Physics.Arcade.STATIC_BODY\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#physicsType\r\n     * @see Phaser.Physics.Arcade.StaticBody#physicsType\r\n     */\r\n    STATIC_BODY: 1,\r\n\r\n    /**\r\n     * Arcade Physics Group containing Dynamic Bodies.\r\n     *\r\n     * @name Phaser.Physics.Arcade.GROUP\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    GROUP: 2,\r\n\r\n    /**\r\n     * A Tilemap Layer.\r\n     *\r\n     * @name Phaser.Physics.Arcade.TILEMAPLAYER\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    TILEMAPLAYER: 3,\r\n\r\n    /**\r\n     * Facing no direction (initial value).\r\n     *\r\n     * @name Phaser.Physics.Arcade.FACING_NONE\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#facing\r\n     */\r\n    FACING_NONE: 10,\r\n\r\n    /**\r\n     * Facing up.\r\n     *\r\n     * @name Phaser.Physics.Arcade.FACING_UP\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#facing\r\n     */\r\n    FACING_UP: 11,\r\n\r\n    /**\r\n     * Facing down.\r\n     *\r\n     * @name Phaser.Physics.Arcade.FACING_DOWN\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#facing\r\n     */\r\n    FACING_DOWN: 12,\r\n\r\n    /**\r\n     * Facing left.\r\n     *\r\n     * @name Phaser.Physics.Arcade.FACING_LEFT\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#facing\r\n     */\r\n    FACING_LEFT: 13,\r\n\r\n    /**\r\n     * Facing right.\r\n     *\r\n     * @name Phaser.Physics.Arcade.FACING_RIGHT\r\n     * @readonly\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Physics.Arcade.Body#facing\r\n     */\r\n    FACING_RIGHT: 14\r\n\r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb25zdC5qcz8xZWE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9jb25zdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEFyY2FkZSBQaHlzaWNzIGNvbnN0cy5cclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIER5bmFtaWMgQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRFlOQU1JQ19CT0RZXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I3BoeXNpY3NUeXBlXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Hcm91cCNwaHlzaWNzVHlwZVxyXG4gICAgICovXHJcbiAgICBEWU5BTUlDX0JPRFk6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU1RBVElDX0JPRFlcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjcGh5c2ljc1R5cGVcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHkjcGh5c2ljc1R5cGVcclxuICAgICAqL1xyXG4gICAgU1RBVElDX0JPRFk6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcmNhZGUgUGh5c2ljcyBHcm91cCBjb250YWluaW5nIER5bmFtaWMgQm9kaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5HUk9VUFxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEdST1VQOiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBUaWxlbWFwIExheWVyLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5USUxFTUFQTEFZRVJcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBUSUxFTUFQTEFZRVI6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWNpbmcgbm8gZGlyZWN0aW9uIChpbml0aWFsIHZhbHVlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRkFDSU5HX05PTkVcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZmFjaW5nXHJcbiAgICAgKi9cclxuICAgIEZBQ0lOR19OT05FOiAxMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhY2luZyB1cC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRkFDSU5HX1VQXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2ZhY2luZ1xyXG4gICAgICovXHJcbiAgICBGQUNJTkdfVVA6IDExLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmFjaW5nIGRvd24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkZBQ0lOR19ET1dOXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2ZhY2luZ1xyXG4gICAgICovXHJcbiAgICBGQUNJTkdfRE9XTjogMTIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWNpbmcgbGVmdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRkFDSU5HX0xFRlRcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjZmFjaW5nXHJcbiAgICAgKi9cclxuICAgIEZBQ0lOR19MRUZUOiAxMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhY2luZyByaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRkFDSU5HX1JJR0hUXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAc2VlIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I2ZhY2luZ1xyXG4gICAgICovXHJcbiAgICBGQUNJTkdfUklHSFQ6IDE0XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/COLLIDE_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/COLLIDE_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Collide Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance if two bodies collide _and_ at least\r\n * one of them has their [onCollide]{@link Phaser.Physics.Arcade.Body#onCollide} property set to `true`.\r\n * \r\n * It provides an alternative means to handling collide events rather than using the callback approach.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('collide', listener)`.\r\n * \r\n * Please note that 'collide' and 'overlap' are two different things in Arcade Physics.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#COLLIDE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject1 - The first Game Object involved in the collision. This is the parent of `body1`.\r\n * @param {Phaser.GameObjects.GameObject} gameObject2 - The second Game Object involved in the collision. This is the parent of `body2`.\r\n * @param {Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody} body1 - The first Physics Body involved in the collision.\r\n * @param {Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody} body2 - The second Physics Body involved in the collision.\r\n */\r\nmodule.exports = 'collide';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvQ09MTElERV9FVkVOVC5qcz9iOWQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywyQ0FBMkM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLDREQUE0RDtBQUN2RTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvZXZlbnRzL0NPTExJREVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQXJjYWRlIFBoeXNpY3MgV29ybGQgQ29sbGlkZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiB0d28gYm9kaWVzIGNvbGxpZGUgX2FuZF8gYXQgbGVhc3RcclxuICogb25lIG9mIHRoZW0gaGFzIHRoZWlyIFtvbkNvbGxpZGVde0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I29uQ29sbGlkZX0gcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICogXHJcbiAqIEl0IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIG1lYW5zIHRvIGhhbmRsaW5nIGNvbGxpZGUgZXZlbnRzIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBjYWxsYmFjayBhcHByb2FjaC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ2NvbGxpZGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogUGxlYXNlIG5vdGUgdGhhdCAnY29sbGlkZScgYW5kICdvdmVybGFwJyBhcmUgdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gQXJjYWRlIFBoeXNpY3MuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI0NPTExJREVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0MSAtIFRoZSBmaXJzdCBHYW1lIE9iamVjdCBpbnZvbHZlZCBpbiB0aGUgY29sbGlzaW9uLiBUaGlzIGlzIHRoZSBwYXJlbnQgb2YgYGJvZHkxYC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdDIgLSBUaGUgc2Vjb25kIEdhbWUgT2JqZWN0IGludm9sdmVkIGluIHRoZSBjb2xsaXNpb24uIFRoaXMgaXMgdGhlIHBhcmVudCBvZiBgYm9keTJgLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5TdGF0aWNCb2R5fSBib2R5MSAtIFRoZSBmaXJzdCBQaHlzaWNzIEJvZHkgaW52b2x2ZWQgaW4gdGhlIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keX0gYm9keTIgLSBUaGUgc2Vjb25kIFBoeXNpY3MgQm9keSBpbnZvbHZlZCBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY29sbGlkZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/COLLIDE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/OVERLAP_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/OVERLAP_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Overlap Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance if two bodies overlap _and_ at least\r\n * one of them has their [onOverlap]{@link Phaser.Physics.Arcade.Body#onOverlap} property set to `true`.\r\n * \r\n * It provides an alternative means to handling overlap events rather than using the callback approach.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('overlap', listener)`.\r\n * \r\n * Please note that 'collide' and 'overlap' are two different things in Arcade Physics.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#OVERLAP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject1 - The first Game Object involved in the overlap. This is the parent of `body1`.\r\n * @param {Phaser.GameObjects.GameObject} gameObject2 - The second Game Object involved in the overlap. This is the parent of `body2`.\r\n * @param {Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody} body1 - The first Physics Body involved in the overlap.\r\n * @param {Phaser.Physics.Arcade.Body|Phaser.Physics.Arcade.StaticBody} body2 - The second Physics Body involved in the overlap.\r\n */\r\nmodule.exports = 'overlap';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvT1ZFUkxBUF9FVkVOVC5qcz9lMDNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywyQ0FBMkM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDREQUE0RDtBQUN2RSxXQUFXLDREQUE0RDtBQUN2RTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvZXZlbnRzL09WRVJMQVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQXJjYWRlIFBoeXNpY3MgV29ybGQgT3ZlcmxhcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiB0d28gYm9kaWVzIG92ZXJsYXAgX2FuZF8gYXQgbGVhc3RcclxuICogb25lIG9mIHRoZW0gaGFzIHRoZWlyIFtvbk92ZXJsYXBde0BsaW5rIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5I29uT3ZlcmxhcH0gcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICogXHJcbiAqIEl0IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIG1lYW5zIHRvIGhhbmRsaW5nIG92ZXJsYXAgZXZlbnRzIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBjYWxsYmFjayBhcHByb2FjaC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ292ZXJsYXAnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogUGxlYXNlIG5vdGUgdGhhdCAnY29sbGlkZScgYW5kICdvdmVybGFwJyBhcmUgdHdvIGRpZmZlcmVudCB0aGluZ3MgaW4gQXJjYWRlIFBoeXNpY3MuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI09WRVJMQVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0MSAtIFRoZSBmaXJzdCBHYW1lIE9iamVjdCBpbnZvbHZlZCBpbiB0aGUgb3ZlcmxhcC4gVGhpcyBpcyB0aGUgcGFyZW50IG9mIGBib2R5MWAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QyIC0gVGhlIHNlY29uZCBHYW1lIE9iamVjdCBpbnZvbHZlZCBpbiB0aGUgb3ZlcmxhcC4gVGhpcyBpcyB0aGUgcGFyZW50IG9mIGBib2R5MmAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl8UGhhc2VyLlBoeXNpY3MuQXJjYWRlLlN0YXRpY0JvZHl9IGJvZHkxIC0gVGhlIGZpcnN0IFBoeXNpY3MgQm9keSBpbnZvbHZlZCBpbiB0aGUgb3ZlcmxhcC5cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keXxQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljQm9keX0gYm9keTIgLSBUaGUgc2Vjb25kIFBoeXNpY3MgQm9keSBpbnZvbHZlZCBpbiB0aGUgb3ZlcmxhcC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ292ZXJsYXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/OVERLAP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/PAUSE_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/PAUSE_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Pause Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance when it is paused.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('pause', listener)`.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvUEFVU0VfRVZFTlQuanM/YWZlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL2V2ZW50cy9QQVVTRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBcmNhZGUgUGh5c2ljcyBXb3JsZCBQYXVzZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IGlzIHBhdXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ3BhdXNlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjUEFVU0VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwYXVzZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/RESUME_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/RESUME_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Resume Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance when it resumes from a paused state.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('resume', listener)`.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#RESUME\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvUkVTVU1FX0VWRU5ULmpzPzU5ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFyY2FkZSBQaHlzaWNzIFdvcmxkIFJlc3VtZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IHJlc3VtZXMgZnJvbSBhIHBhdXNlZCBzdGF0ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ3Jlc3VtZScsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI1JFU1VNRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/TILE_COLLIDE_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/TILE_COLLIDE_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics Tile Collide Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance if a body collides with a Tile _and_\r\n * has its [onCollide]{@link Phaser.Physics.Arcade.Body#onCollide} property set to `true`.\r\n * \r\n * It provides an alternative means to handling collide events rather than using the callback approach.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('tilecollide', listener)`.\r\n * \r\n * Please note that 'collide' and 'overlap' are two different things in Arcade Physics.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#TILE_COLLIDE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object involved in the collision. This is the parent of `body`.\r\n * @param {Phaser.Tilemaps.Tile} tile - The tile the body collided with.\r\n * @param {Phaser.Physics.Arcade.Body} body - The Arcade Physics Body of the Game Object involved in the collision.\r\n */\r\nmodule.exports = 'tilecollide';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvVElMRV9DT0xMSURFX0VWRU5ULmpzP2QzZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJDQUEyQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvVElMRV9DT0xMSURFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFyY2FkZSBQaHlzaWNzIFRpbGUgQ29sbGlkZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiBhIGJvZHkgY29sbGlkZXMgd2l0aCBhIFRpbGUgX2FuZF9cclxuICogaGFzIGl0cyBbb25Db2xsaWRlXXtAbGluayBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvbkNvbGxpZGV9IHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAqIFxyXG4gKiBJdCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBtZWFucyB0byBoYW5kbGluZyBjb2xsaWRlIGV2ZW50cyByYXRoZXIgdGhhbiB1c2luZyB0aGUgY2FsbGJhY2sgYXBwcm9hY2guXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5waHlzaWNzLndvcmxkLm9uKCd0aWxlY29sbGlkZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBQbGVhc2Ugbm90ZSB0aGF0ICdjb2xsaWRlJyBhbmQgJ292ZXJsYXAnIGFyZSB0d28gZGlmZmVyZW50IHRoaW5ncyBpbiBBcmNhZGUgUGh5c2ljcy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjVElMRV9DT0xMSURFXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgaW52b2x2ZWQgaW4gdGhlIGNvbGxpc2lvbi4gVGhpcyBpcyB0aGUgcGFyZW50IG9mIGBib2R5YC5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gdGlsZSAtIFRoZSB0aWxlIHRoZSBib2R5IGNvbGxpZGVkIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkgLSBUaGUgQXJjYWRlIFBoeXNpY3MgQm9keSBvZiB0aGUgR2FtZSBPYmplY3QgaW52b2x2ZWQgaW4gdGhlIGNvbGxpc2lvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3RpbGVjb2xsaWRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/TILE_COLLIDE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/TILE_OVERLAP_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/TILE_OVERLAP_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics Tile Overlap Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance if a body overlaps with a Tile _and_\r\n * has its [onOverlap]{@link Phaser.Physics.Arcade.Body#onOverlap} property set to `true`.\r\n * \r\n * It provides an alternative means to handling overlap events rather than using the callback approach.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('tileoverlap', listener)`.\r\n * \r\n * Please note that 'collide' and 'overlap' are two different things in Arcade Physics.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#TILE_OVERLAP\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object involved in the overlap. This is the parent of `body`.\r\n * @param {Phaser.Tilemaps.Tile} tile - The tile the body overlapped.\r\n * @param {Phaser.Physics.Arcade.Body} body - The Arcade Physics Body of the Game Object involved in the overlap.\r\n */\r\nmodule.exports = 'tileoverlap';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvVElMRV9PVkVSTEFQX0VWRU5ULmpzPzgyNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJDQUEyQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvVElMRV9PVkVSTEFQX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFyY2FkZSBQaHlzaWNzIFRpbGUgT3ZlcmxhcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiBhIGJvZHkgb3ZlcmxhcHMgd2l0aCBhIFRpbGUgX2FuZF9cclxuICogaGFzIGl0cyBbb25PdmVybGFwXXtAbGluayBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keSNvbk92ZXJsYXB9IHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAqIFxyXG4gKiBJdCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBtZWFucyB0byBoYW5kbGluZyBvdmVybGFwIGV2ZW50cyByYXRoZXIgdGhhbiB1c2luZyB0aGUgY2FsbGJhY2sgYXBwcm9hY2guXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5waHlzaWNzLndvcmxkLm9uKCd0aWxlb3ZlcmxhcCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBQbGVhc2Ugbm90ZSB0aGF0ICdjb2xsaWRlJyBhbmQgJ292ZXJsYXAnIGFyZSB0d28gZGlmZmVyZW50IHRoaW5ncyBpbiBBcmNhZGUgUGh5c2ljcy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjVElMRV9PVkVSTEFQXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgaW52b2x2ZWQgaW4gdGhlIG92ZXJsYXAuIFRoaXMgaXMgdGhlIHBhcmVudCBvZiBgYm9keWAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgdGlsZSB0aGUgYm9keSBvdmVybGFwcGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEFyY2FkZSBQaHlzaWNzIEJvZHkgb2YgdGhlIEdhbWUgT2JqZWN0IGludm9sdmVkIGluIHRoZSBvdmVybGFwLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndGlsZW92ZXJsYXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/TILE_OVERLAP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/WORLD_BOUNDS_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/WORLD_BOUNDS_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Bounds Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance if a body makes contact with the world bounds _and_\r\n * it has its [onWorldBounds]{@link Phaser.Physics.Arcade.Body#onWorldBounds} property set to `true`.\r\n * \r\n * It provides an alternative means to handling collide events rather than using the callback approach.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('worldbounds', listener)`.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#WORLD_BOUNDS\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Arcade.Body} body - The Arcade Physics Body that hit the world bounds.\r\n * @param {boolean} up - Is the Body blocked up? I.e. collided with the top of the world bounds.\r\n * @param {boolean} down - Is the Body blocked down? I.e. collided with the bottom of the world bounds.\r\n * @param {boolean} left - Is the Body blocked left? I.e. collided with the left of the world bounds.\r\n * @param {boolean} right - Is the Body blocked right? I.e. collided with the right of the world bounds.\r\n */\r\nmodule.exports = 'worldbounds';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvV09STERfQk9VTkRTX0VWRU5ULmpzP2Q1NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLCtDQUErQztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvV09STERfQk9VTkRTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFyY2FkZSBQaHlzaWNzIFdvcmxkIEJvdW5kcyBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiBhIGJvZHkgbWFrZXMgY29udGFjdCB3aXRoIHRoZSB3b3JsZCBib3VuZHMgX2FuZF9cclxuICogaXQgaGFzIGl0cyBbb25Xb3JsZEJvdW5kc117QGxpbmsgUGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHkjb25Xb3JsZEJvdW5kc30gcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICogXHJcbiAqIEl0IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIG1lYW5zIHRvIGhhbmRsaW5nIGNvbGxpZGUgZXZlbnRzIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBjYWxsYmFjayBhcHByb2FjaC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ3dvcmxkYm91bmRzJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLkFyY2FkZS5FdmVudHMjV09STERfQk9VTkRTXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5BcmNhZGUuQm9keX0gYm9keSAtIFRoZSBBcmNhZGUgUGh5c2ljcyBCb2R5IHRoYXQgaGl0IHRoZSB3b3JsZCBib3VuZHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXAgLSBJcyB0aGUgQm9keSBibG9ja2VkIHVwPyBJLmUuIGNvbGxpZGVkIHdpdGggdGhlIHRvcCBvZiB0aGUgd29ybGQgYm91bmRzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRvd24gLSBJcyB0aGUgQm9keSBibG9ja2VkIGRvd24/IEkuZS4gY29sbGlkZWQgd2l0aCB0aGUgYm90dG9tIG9mIHRoZSB3b3JsZCBib3VuZHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbGVmdCAtIElzIHRoZSBCb2R5IGJsb2NrZWQgbGVmdD8gSS5lLiBjb2xsaWRlZCB3aXRoIHRoZSBsZWZ0IG9mIHRoZSB3b3JsZCBib3VuZHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmlnaHQgLSBJcyB0aGUgQm9keSBibG9ja2VkIHJpZ2h0PyBJLmUuIGNvbGxpZGVkIHdpdGggdGhlIHJpZ2h0IG9mIHRoZSB3b3JsZCBib3VuZHMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICd3b3JsZGJvdW5kcyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/WORLD_BOUNDS_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/WORLD_STEP_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/WORLD_STEP_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Arcade Physics World Step Event.\r\n * \r\n * This event is dispatched by an Arcade Physics World instance whenever a physics step is run.\r\n * It is emitted _after_ the bodies and colliders have been updated.\r\n * \r\n * In high framerate settings this can be multiple times per game frame.\r\n * \r\n * Listen to it from a Scene using: `this.physics.world.on('worldstep', listener)`.\r\n *\r\n * @event Phaser.Physics.Arcade.Events#WORLD_STEP\r\n * @since 3.18.0\r\n */\r\nmodule.exports = 'worldstep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvV09STERfU1RFUF9FVkVOVC5qcz8xYjRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvZXZlbnRzL1dPUkxEX1NURVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQXJjYWRlIFBoeXNpY3MgV29ybGQgU3RlcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBBcmNhZGUgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuZXZlciBhIHBoeXNpY3Mgc3RlcCBpcyBydW4uXHJcbiAqIEl0IGlzIGVtaXR0ZWQgX2FmdGVyXyB0aGUgYm9kaWVzIGFuZCBjb2xsaWRlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuXHJcbiAqIFxyXG4gKiBJbiBoaWdoIGZyYW1lcmF0ZSBzZXR0aW5ncyB0aGlzIGNhbiBiZSBtdWx0aXBsZSB0aW1lcyBwZXIgZ2FtZSBmcmFtZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnBoeXNpY3Mud29ybGQub24oJ3dvcmxkc3RlcCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzI1dPUkxEX1NURVBcclxuICogQHNpbmNlIDMuMTguMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnd29ybGRzdGVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/WORLD_STEP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/events/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/events/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Arcade.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    COLLIDE: __webpack_require__(/*! ./COLLIDE_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/COLLIDE_EVENT.js\"),\r\n    OVERLAP: __webpack_require__(/*! ./OVERLAP_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/OVERLAP_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/PAUSE_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/RESUME_EVENT.js\"),\r\n    TILE_COLLIDE: __webpack_require__(/*! ./TILE_COLLIDE_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/TILE_COLLIDE_EVENT.js\"),\r\n    TILE_OVERLAP: __webpack_require__(/*! ./TILE_OVERLAP_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/TILE_OVERLAP_EVENT.js\"),\r\n    WORLD_BOUNDS: __webpack_require__(/*! ./WORLD_BOUNDS_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/WORLD_BOUNDS_EVENT.js\"),\r\n    WORLD_STEP: __webpack_require__(/*! ./WORLD_STEP_EVENT */ \"./node_modules/phaser/src/physics/arcade/events/WORLD_STEP_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9ldmVudHMvaW5kZXguanM/NTQ1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyx5RkFBaUI7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHlGQUFpQjtBQUN0QyxXQUFXLG1CQUFPLENBQUMscUZBQWU7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLHVGQUFnQjtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyxtR0FBc0I7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsbUdBQXNCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLG1HQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRkFBb0I7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ09MTElERTogcmVxdWlyZSgnLi9DT0xMSURFX0VWRU5UJyksXHJcbiAgICBPVkVSTEFQOiByZXF1aXJlKCcuL09WRVJMQVBfRVZFTlQnKSxcclxuICAgIFBBVVNFOiByZXF1aXJlKCcuL1BBVVNFX0VWRU5UJyksXHJcbiAgICBSRVNVTUU6IHJlcXVpcmUoJy4vUkVTVU1FX0VWRU5UJyksXHJcbiAgICBUSUxFX0NPTExJREU6IHJlcXVpcmUoJy4vVElMRV9DT0xMSURFX0VWRU5UJyksXHJcbiAgICBUSUxFX09WRVJMQVA6IHJlcXVpcmUoJy4vVElMRV9PVkVSTEFQX0VWRU5UJyksXHJcbiAgICBXT1JMRF9CT1VORFM6IHJlcXVpcmUoJy4vV09STERfQk9VTkRTX0VWRU5UJyksXHJcbiAgICBXT1JMRF9TVEVQOiByZXF1aXJlKCcuL1dPUkxEX1NURVBfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/physics/arcade/const.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @callback ArcadePhysicsCallback\r\n *\r\n * @param {Phaser.GameObjects.GameObject} object1 - The first Body to separate.\r\n * @param {Phaser.GameObjects.GameObject} object2 - The second Body to separate.\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Arcade\r\n */\r\n\r\nvar Arcade = {\r\n\r\n    ArcadePhysics: __webpack_require__(/*! ./ArcadePhysics */ \"./node_modules/phaser/src/physics/arcade/ArcadePhysics.js\"),\r\n    Body: __webpack_require__(/*! ./Body */ \"./node_modules/phaser/src/physics/arcade/Body.js\"),\r\n    Collider: __webpack_require__(/*! ./Collider */ \"./node_modules/phaser/src/physics/arcade/Collider.js\"),\r\n    Components: __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/arcade/components/index.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/arcade/events/index.js\"),\r\n    Factory: __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/arcade/Factory.js\"),\r\n    Group: __webpack_require__(/*! ./PhysicsGroup */ \"./node_modules/phaser/src/physics/arcade/PhysicsGroup.js\"),\r\n    Image: __webpack_require__(/*! ./ArcadeImage */ \"./node_modules/phaser/src/physics/arcade/ArcadeImage.js\"),\r\n    Sprite: __webpack_require__(/*! ./ArcadeSprite */ \"./node_modules/phaser/src/physics/arcade/ArcadeSprite.js\"),\r\n    StaticBody: __webpack_require__(/*! ./StaticBody */ \"./node_modules/phaser/src/physics/arcade/StaticBody.js\"),\r\n    StaticGroup: __webpack_require__(/*! ./StaticPhysicsGroup */ \"./node_modules/phaser/src/physics/arcade/StaticPhysicsGroup.js\"),\r\n    World: __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/arcade/World.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nArcade = Extend(false, Arcade, CONST);\r\n\r\nmodule.exports = Arcade;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS9pbmRleC5qcz8zNzY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsa0VBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLG1GQUEyQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLGtGQUFpQjtBQUM1QyxVQUFVLG1CQUFPLENBQUMsZ0VBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLHdFQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLGtGQUFjO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQywwRUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsc0VBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLGdGQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsOEVBQWU7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLGdGQUFnQjtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBc0I7QUFDL0MsV0FBVyxtQkFBTyxDQUFDLGtFQUFTOztBQUU1Qjs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9hcmNhZGUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgQXJjYWRlUGh5c2ljc0NhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG9iamVjdDEgLSBUaGUgZmlyc3QgQm9keSB0byBzZXBhcmF0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gb2JqZWN0MiAtIFRoZSBzZWNvbmQgQm9keSB0byBzZXBhcmF0ZS5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGVcclxuICovXHJcblxyXG52YXIgQXJjYWRlID0ge1xyXG5cclxuICAgIEFyY2FkZVBoeXNpY3M6IHJlcXVpcmUoJy4vQXJjYWRlUGh5c2ljcycpLFxyXG4gICAgQm9keTogcmVxdWlyZSgnLi9Cb2R5JyksXHJcbiAgICBDb2xsaWRlcjogcmVxdWlyZSgnLi9Db2xsaWRlcicpLFxyXG4gICAgQ29tcG9uZW50czogcmVxdWlyZSgnLi9jb21wb25lbnRzJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgICBGYWN0b3J5OiByZXF1aXJlKCcuL0ZhY3RvcnknKSxcclxuICAgIEdyb3VwOiByZXF1aXJlKCcuL1BoeXNpY3NHcm91cCcpLFxyXG4gICAgSW1hZ2U6IHJlcXVpcmUoJy4vQXJjYWRlSW1hZ2UnKSxcclxuICAgIFNwcml0ZTogcmVxdWlyZSgnLi9BcmNhZGVTcHJpdGUnKSxcclxuICAgIFN0YXRpY0JvZHk6IHJlcXVpcmUoJy4vU3RhdGljQm9keScpLFxyXG4gICAgU3RhdGljR3JvdXA6IHJlcXVpcmUoJy4vU3RhdGljUGh5c2ljc0dyb3VwJyksXHJcbiAgICBXb3JsZDogcmVxdWlyZSgnLi9Xb3JsZCcpXHJcblxyXG59O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcbkFyY2FkZSA9IEV4dGVuZChmYWxzZSwgQXJjYWRlLCBDT05TVCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyY2FkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileCallbacks.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileCallbacks.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A function to process the collision callbacks between a single tile and an Arcade Physics enabled Game Object.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.ProcessTileCallbacks\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tilemaps.Tile} tile - The Tile to process.\r\n * @param {Phaser.GameObjects.Sprite} sprite - The Game Object to process with the Tile.\r\n *\r\n * @return {boolean} The result of the callback, `true` for further processing, or `false` to skip this pair.\r\n */\r\nvar ProcessTileCallbacks = function (tile, sprite)\r\n{\r\n    //  Tile callbacks take priority over layer level callbacks\r\n    if (tile.collisionCallback)\r\n    {\r\n        return !tile.collisionCallback.call(tile.collisionCallbackContext, sprite, tile);\r\n    }\r\n    else if (tile.layer.callbacks[tile.index])\r\n    {\r\n        return !tile.layer.callbacks[tile.index].callback.call(\r\n            tile.layer.callbacks[tile.index].callbackContext, sprite, tile\r\n        );\r\n    }\r\n\r\n    return true;\r\n};\r\n\r\nmodule.exports = ProcessTileCallbacks;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1Byb2Nlc3NUaWxlQ2FsbGJhY2tzLmpzPzZiNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL3RpbGVtYXAvUHJvY2Vzc1RpbGVDYWxsYmFja3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGNvbGxpc2lvbiBjYWxsYmFja3MgYmV0d2VlbiBhIHNpbmdsZSB0aWxlIGFuZCBhbiBBcmNhZGUgUGh5c2ljcyBlbmFibGVkIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlRpbGVtYXAuUHJvY2Vzc1RpbGVDYWxsYmFja3NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgVGlsZSB0byBwcm9jZXNzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IHNwcml0ZSAtIFRoZSBHYW1lIE9iamVjdCB0byBwcm9jZXNzIHdpdGggdGhlIFRpbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRoZSByZXN1bHQgb2YgdGhlIGNhbGxiYWNrLCBgdHJ1ZWAgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywgb3IgYGZhbHNlYCB0byBza2lwIHRoaXMgcGFpci5cclxuICovXHJcbnZhciBQcm9jZXNzVGlsZUNhbGxiYWNrcyA9IGZ1bmN0aW9uICh0aWxlLCBzcHJpdGUpXHJcbntcclxuICAgIC8vICBUaWxlIGNhbGxiYWNrcyB0YWtlIHByaW9yaXR5IG92ZXIgbGF5ZXIgbGV2ZWwgY2FsbGJhY2tzXHJcbiAgICBpZiAodGlsZS5jb2xsaXNpb25DYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gIXRpbGUuY29sbGlzaW9uQ2FsbGJhY2suY2FsbCh0aWxlLmNvbGxpc2lvbkNhbGxiYWNrQ29udGV4dCwgc3ByaXRlLCB0aWxlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRpbGUubGF5ZXIuY2FsbGJhY2tzW3RpbGUuaW5kZXhdKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAhdGlsZS5sYXllci5jYWxsYmFja3NbdGlsZS5pbmRleF0uY2FsbGJhY2suY2FsbChcclxuICAgICAgICAgICAgdGlsZS5sYXllci5jYWxsYmFja3NbdGlsZS5pbmRleF0uY2FsbGJhY2tDb250ZXh0LCBzcHJpdGUsIHRpbGVcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQcm9jZXNzVGlsZUNhbGxiYWNrcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileCallbacks.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationX.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationX.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Internal function to process the separation of a physics body from a tile.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.ProcessTileSeparationX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body - The Body object to separate.\r\n * @param {number} x - The x separation amount.\r\n */\r\nvar ProcessTileSeparationX = function (body, x)\r\n{\r\n    if (x < 0)\r\n    {\r\n        body.blocked.none = false;\r\n        body.blocked.left = true;\r\n    }\r\n    else if (x > 0)\r\n    {\r\n        body.blocked.none = false;\r\n        body.blocked.right = true;\r\n    }\r\n\r\n    body.position.x -= x;\r\n\r\n    if (body.bounce.x === 0)\r\n    {\r\n        body.velocity.x = 0;\r\n    }\r\n    else\r\n    {\r\n        body.velocity.x = -body.velocity.x * body.bounce.x;\r\n    }\r\n};\r\n\r\nmodule.exports = ProcessTileSeparationX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1Byb2Nlc3NUaWxlU2VwYXJhdGlvblguanM/YTc2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL3RpbGVtYXAvUHJvY2Vzc1RpbGVTZXBhcmF0aW9uWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHNlcGFyYXRpb24gb2YgYSBwaHlzaWNzIGJvZHkgZnJvbSBhIHRpbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuVGlsZW1hcC5Qcm9jZXNzVGlsZVNlcGFyYXRpb25YXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEJvZHkgb2JqZWN0IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHNlcGFyYXRpb24gYW1vdW50LlxyXG4gKi9cclxudmFyIFByb2Nlc3NUaWxlU2VwYXJhdGlvblggPSBmdW5jdGlvbiAoYm9keSwgeClcclxue1xyXG4gICAgaWYgKHggPCAwKVxyXG4gICAge1xyXG4gICAgICAgIGJvZHkuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgYm9keS5ibG9ja2VkLmxlZnQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoeCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgYm9keS5ibG9ja2VkLm5vbmUgPSBmYWxzZTtcclxuICAgICAgICBib2R5LmJsb2NrZWQucmlnaHQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGJvZHkucG9zaXRpb24ueCAtPSB4O1xyXG5cclxuICAgIGlmIChib2R5LmJvdW5jZS54ID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIGJvZHkudmVsb2NpdHkueCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgYm9keS52ZWxvY2l0eS54ID0gLWJvZHkudmVsb2NpdHkueCAqIGJvZHkuYm91bmNlLng7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2Nlc3NUaWxlU2VwYXJhdGlvblg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationY.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationY.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Internal function to process the separation of a physics body from a tile.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.ProcessTileSeparationY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body - The Body object to separate.\r\n * @param {number} y - The y separation amount.\r\n */\r\nvar ProcessTileSeparationY = function (body, y)\r\n{\r\n    if (y < 0)\r\n    {\r\n        body.blocked.none = false;\r\n        body.blocked.up = true;\r\n    }\r\n    else if (y > 0)\r\n    {\r\n        body.blocked.none = false;\r\n        body.blocked.down = true;\r\n    }\r\n\r\n    body.position.y -= y;\r\n\r\n    if (body.bounce.y === 0)\r\n    {\r\n        body.velocity.y = 0;\r\n    }\r\n    else\r\n    {\r\n        body.velocity.y = -body.velocity.y * body.bounce.y;\r\n    }\r\n};\r\n\r\nmodule.exports = ProcessTileSeparationY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1Byb2Nlc3NUaWxlU2VwYXJhdGlvblkuanM/MTFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL3RpbGVtYXAvUHJvY2Vzc1RpbGVTZXBhcmF0aW9uWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHNlcGFyYXRpb24gb2YgYSBwaHlzaWNzIGJvZHkgZnJvbSBhIHRpbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuVGlsZW1hcC5Qcm9jZXNzVGlsZVNlcGFyYXRpb25ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEJvZHkgb2JqZWN0IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHNlcGFyYXRpb24gYW1vdW50LlxyXG4gKi9cclxudmFyIFByb2Nlc3NUaWxlU2VwYXJhdGlvblkgPSBmdW5jdGlvbiAoYm9keSwgeSlcclxue1xyXG4gICAgaWYgKHkgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIGJvZHkuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgYm9keS5ibG9ja2VkLnVwID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHkgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIGJvZHkuYmxvY2tlZC5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgYm9keS5ibG9ja2VkLmRvd24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGJvZHkucG9zaXRpb24ueSAtPSB5O1xyXG5cclxuICAgIGlmIChib2R5LmJvdW5jZS55ID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIGJvZHkudmVsb2NpdHkueSA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgYm9keS52ZWxvY2l0eS55ID0gLWJvZHkudmVsb2NpdHkueSAqIGJvZHkuYm91bmNlLnk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2Nlc3NUaWxlU2VwYXJhdGlvblk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/SeparateTile.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/SeparateTile.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TileCheckX = __webpack_require__(/*! ./TileCheckX */ \"./node_modules/phaser/src/physics/arcade/tilemap/TileCheckX.js\");\r\nvar TileCheckY = __webpack_require__(/*! ./TileCheckY */ \"./node_modules/phaser/src/physics/arcade/tilemap/TileCheckY.js\");\r\nvar TileIntersectsBody = __webpack_require__(/*! ./TileIntersectsBody */ \"./node_modules/phaser/src/physics/arcade/tilemap/TileIntersectsBody.js\");\r\n\r\n/**\r\n * The core separation function to separate a physics body and a tile.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.SeparateTile\r\n * @since 3.0.0\r\n *\r\n * @param {number} i - The index of the tile within the map data.\r\n * @param {Phaser.Physics.Arcade.Body} body - The Body object to separate.\r\n * @param {Phaser.Tilemaps.Tile} tile - The tile to collide against.\r\n * @param {Phaser.Geom.Rectangle} tileWorldRect - A rectangle-like object defining the dimensions of the tile.\r\n * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer - The tilemapLayer to collide against.\r\n * @param {number} tileBias - The tile bias value. Populated by the `World.TILE_BIAS` constant.\r\n * @param {boolean} isLayer - Is this check coming from a TilemapLayer or an array of tiles?\r\n *\r\n * @return {boolean} `true` if the body was separated, otherwise `false`.\r\n */\r\nvar SeparateTile = function (i, body, tile, tileWorldRect, tilemapLayer, tileBias, isLayer)\r\n{\r\n    var tileLeft = tileWorldRect.left;\r\n    var tileTop = tileWorldRect.top;\r\n    var tileRight = tileWorldRect.right;\r\n    var tileBottom = tileWorldRect.bottom;\r\n    var faceHorizontal = tile.faceLeft || tile.faceRight;\r\n    var faceVertical = tile.faceTop || tile.faceBottom;\r\n\r\n    if (!isLayer)\r\n    {\r\n        faceHorizontal = true;\r\n        faceVertical = true;\r\n    }\r\n\r\n    //  We don't need to go any further if this tile doesn't actually have any colliding faces. This\r\n    //  could happen if the tile was meant to be collided with re: a callback, but otherwise isn't\r\n    //  needed for separation.\r\n    if (!faceHorizontal && !faceVertical)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    var ox = 0;\r\n    var oy = 0;\r\n    var minX = 0;\r\n    var minY = 1;\r\n\r\n    if (body.deltaAbsX() > body.deltaAbsY())\r\n    {\r\n        //  Moving faster horizontally, check X axis first\r\n        minX = -1;\r\n    }\r\n    else if (body.deltaAbsX() < body.deltaAbsY())\r\n    {\r\n        //  Moving faster vertically, check Y axis first\r\n        minY = -1;\r\n    }\r\n\r\n    if (body.deltaX() !== 0 && body.deltaY() !== 0 && faceHorizontal && faceVertical)\r\n    {\r\n        //  We only need do this if both axes have colliding faces AND we're moving in both\r\n        //  directions\r\n        minX = Math.min(Math.abs(body.position.x - tileRight), Math.abs(body.right - tileLeft));\r\n        minY = Math.min(Math.abs(body.position.y - tileBottom), Math.abs(body.bottom - tileTop));\r\n    }\r\n\r\n    if (minX < minY)\r\n    {\r\n        if (faceHorizontal)\r\n        {\r\n            ox = TileCheckX(body, tile, tileLeft, tileRight, tileBias, isLayer);\r\n\r\n            //  That's horizontal done, check if we still intersects? If not then we can return now\r\n            if (ox !== 0 && !TileIntersectsBody(tileWorldRect, body))\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        if (faceVertical)\r\n        {\r\n            oy = TileCheckY(body, tile, tileTop, tileBottom, tileBias, isLayer);\r\n        }\r\n    }\r\n    else\r\n    {\r\n        if (faceVertical)\r\n        {\r\n            oy = TileCheckY(body, tile, tileTop, tileBottom, tileBias, isLayer);\r\n\r\n            //  That's vertical done, check if we still intersects? If not then we can return now\r\n            if (oy !== 0 && !TileIntersectsBody(tileWorldRect, body))\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        if (faceHorizontal)\r\n        {\r\n            ox = TileCheckX(body, tile, tileLeft, tileRight, tileBias, isLayer);\r\n        }\r\n    }\r\n\r\n    return (ox !== 0 || oy !== 0);\r\n};\r\n\r\nmodule.exports = SeparateTile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1NlcGFyYXRlVGlsZS5qcz9mODNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxvRkFBYztBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxvRkFBYztBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxvR0FBc0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHlFQUF5RTtBQUNwRixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1NlcGFyYXRlVGlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRpbGVDaGVja1ggPSByZXF1aXJlKCcuL1RpbGVDaGVja1gnKTtcclxudmFyIFRpbGVDaGVja1kgPSByZXF1aXJlKCcuL1RpbGVDaGVja1knKTtcclxudmFyIFRpbGVJbnRlcnNlY3RzQm9keSA9IHJlcXVpcmUoJy4vVGlsZUludGVyc2VjdHNCb2R5Jyk7XHJcblxyXG4vKipcclxuICogVGhlIGNvcmUgc2VwYXJhdGlvbiBmdW5jdGlvbiB0byBzZXBhcmF0ZSBhIHBoeXNpY3MgYm9keSBhbmQgYSB0aWxlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlBoeXNpY3MuQXJjYWRlLlRpbGVtYXAuU2VwYXJhdGVUaWxlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaSAtIFRoZSBpbmRleCBvZiB0aGUgdGlsZSB3aXRoaW4gdGhlIG1hcCBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIEJvZHkgb2JqZWN0IHRvIHNlcGFyYXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSB0aWxlIC0gVGhlIHRpbGUgdG8gY29sbGlkZSBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gdGlsZVdvcmxkUmVjdCAtIEEgcmVjdGFuZ2xlLWxpa2Ugb2JqZWN0IGRlZmluaW5nIHRoZSBkaW1lbnNpb25zIG9mIHRoZSB0aWxlLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gdGlsZW1hcExheWVyIC0gVGhlIHRpbGVtYXBMYXllciB0byBjb2xsaWRlIGFnYWluc3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aWxlQmlhcyAtIFRoZSB0aWxlIGJpYXMgdmFsdWUuIFBvcHVsYXRlZCBieSB0aGUgYFdvcmxkLlRJTEVfQklBU2AgY29uc3RhbnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMYXllciAtIElzIHRoaXMgY2hlY2sgY29taW5nIGZyb20gYSBUaWxlbWFwTGF5ZXIgb3IgYW4gYXJyYXkgb2YgdGlsZXM/XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYm9keSB3YXMgc2VwYXJhdGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBTZXBhcmF0ZVRpbGUgPSBmdW5jdGlvbiAoaSwgYm9keSwgdGlsZSwgdGlsZVdvcmxkUmVjdCwgdGlsZW1hcExheWVyLCB0aWxlQmlhcywgaXNMYXllcilcclxue1xyXG4gICAgdmFyIHRpbGVMZWZ0ID0gdGlsZVdvcmxkUmVjdC5sZWZ0O1xyXG4gICAgdmFyIHRpbGVUb3AgPSB0aWxlV29ybGRSZWN0LnRvcDtcclxuICAgIHZhciB0aWxlUmlnaHQgPSB0aWxlV29ybGRSZWN0LnJpZ2h0O1xyXG4gICAgdmFyIHRpbGVCb3R0b20gPSB0aWxlV29ybGRSZWN0LmJvdHRvbTtcclxuICAgIHZhciBmYWNlSG9yaXpvbnRhbCA9IHRpbGUuZmFjZUxlZnQgfHwgdGlsZS5mYWNlUmlnaHQ7XHJcbiAgICB2YXIgZmFjZVZlcnRpY2FsID0gdGlsZS5mYWNlVG9wIHx8IHRpbGUuZmFjZUJvdHRvbTtcclxuXHJcbiAgICBpZiAoIWlzTGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgZmFjZUhvcml6b250YWwgPSB0cnVlO1xyXG4gICAgICAgIGZhY2VWZXJ0aWNhbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFdlIGRvbid0IG5lZWQgdG8gZ28gYW55IGZ1cnRoZXIgaWYgdGhpcyB0aWxlIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhbnkgY29sbGlkaW5nIGZhY2VzLiBUaGlzXHJcbiAgICAvLyAgY291bGQgaGFwcGVuIGlmIHRoZSB0aWxlIHdhcyBtZWFudCB0byBiZSBjb2xsaWRlZCB3aXRoIHJlOiBhIGNhbGxiYWNrLCBidXQgb3RoZXJ3aXNlIGlzbid0XHJcbiAgICAvLyAgbmVlZGVkIGZvciBzZXBhcmF0aW9uLlxyXG4gICAgaWYgKCFmYWNlSG9yaXpvbnRhbCAmJiAhZmFjZVZlcnRpY2FsKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgb3ggPSAwO1xyXG4gICAgdmFyIG95ID0gMDtcclxuICAgIHZhciBtaW5YID0gMDtcclxuICAgIHZhciBtaW5ZID0gMTtcclxuXHJcbiAgICBpZiAoYm9keS5kZWx0YUFic1goKSA+IGJvZHkuZGVsdGFBYnNZKCkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE1vdmluZyBmYXN0ZXIgaG9yaXpvbnRhbGx5LCBjaGVjayBYIGF4aXMgZmlyc3RcclxuICAgICAgICBtaW5YID0gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5LmRlbHRhQWJzWCgpIDwgYm9keS5kZWx0YUFic1koKSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTW92aW5nIGZhc3RlciB2ZXJ0aWNhbGx5LCBjaGVjayBZIGF4aXMgZmlyc3RcclxuICAgICAgICBtaW5ZID0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJvZHkuZGVsdGFYKCkgIT09IDAgJiYgYm9keS5kZWx0YVkoKSAhPT0gMCAmJiBmYWNlSG9yaXpvbnRhbCAmJiBmYWNlVmVydGljYWwpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFdlIG9ubHkgbmVlZCBkbyB0aGlzIGlmIGJvdGggYXhlcyBoYXZlIGNvbGxpZGluZyBmYWNlcyBBTkQgd2UncmUgbW92aW5nIGluIGJvdGhcclxuICAgICAgICAvLyAgZGlyZWN0aW9uc1xyXG4gICAgICAgIG1pblggPSBNYXRoLm1pbihNYXRoLmFicyhib2R5LnBvc2l0aW9uLnggLSB0aWxlUmlnaHQpLCBNYXRoLmFicyhib2R5LnJpZ2h0IC0gdGlsZUxlZnQpKTtcclxuICAgICAgICBtaW5ZID0gTWF0aC5taW4oTWF0aC5hYnMoYm9keS5wb3NpdGlvbi55IC0gdGlsZUJvdHRvbSksIE1hdGguYWJzKGJvZHkuYm90dG9tIC0gdGlsZVRvcCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtaW5YIDwgbWluWSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmFjZUhvcml6b250YWwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBveCA9IFRpbGVDaGVja1goYm9keSwgdGlsZSwgdGlsZUxlZnQsIHRpbGVSaWdodCwgdGlsZUJpYXMsIGlzTGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gIFRoYXQncyBob3Jpem9udGFsIGRvbmUsIGNoZWNrIGlmIHdlIHN0aWxsIGludGVyc2VjdHM/IElmIG5vdCB0aGVuIHdlIGNhbiByZXR1cm4gbm93XHJcbiAgICAgICAgICAgIGlmIChveCAhPT0gMCAmJiAhVGlsZUludGVyc2VjdHNCb2R5KHRpbGVXb3JsZFJlY3QsIGJvZHkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZhY2VWZXJ0aWNhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG95ID0gVGlsZUNoZWNrWShib2R5LCB0aWxlLCB0aWxlVG9wLCB0aWxlQm90dG9tLCB0aWxlQmlhcywgaXNMYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmYWNlVmVydGljYWwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBveSA9IFRpbGVDaGVja1koYm9keSwgdGlsZSwgdGlsZVRvcCwgdGlsZUJvdHRvbSwgdGlsZUJpYXMsIGlzTGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gIFRoYXQncyB2ZXJ0aWNhbCBkb25lLCBjaGVjayBpZiB3ZSBzdGlsbCBpbnRlcnNlY3RzPyBJZiBub3QgdGhlbiB3ZSBjYW4gcmV0dXJuIG5vd1xyXG4gICAgICAgICAgICBpZiAob3kgIT09IDAgJiYgIVRpbGVJbnRlcnNlY3RzQm9keSh0aWxlV29ybGRSZWN0LCBib2R5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmYWNlSG9yaXpvbnRhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG94ID0gVGlsZUNoZWNrWChib2R5LCB0aWxlLCB0aWxlTGVmdCwgdGlsZVJpZ2h0LCB0aWxlQmlhcywgaXNMYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAob3ggIT09IDAgfHwgb3kgIT09IDApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXBhcmF0ZVRpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/SeparateTile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/TileCheckX.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/TileCheckX.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ProcessTileSeparationX = __webpack_require__(/*! ./ProcessTileSeparationX */ \"./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationX.js\");\r\n\r\n/**\r\n * Check the body against the given tile on the X axis.\r\n * Used internally by the SeparateTile function.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.TileCheckX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body - The Body object to separate.\r\n * @param {Phaser.Tilemaps.Tile} tile - The tile to check.\r\n * @param {number} tileLeft - The left position of the tile within the tile world.\r\n * @param {number} tileRight - The right position of the tile within the tile world.\r\n * @param {number} tileBias - The tile bias value. Populated by the `World.TILE_BIAS` constant.\r\n * @param {boolean} isLayer - Is this check coming from a TilemapLayer or an array of tiles?\r\n *\r\n * @return {number} The amount of separation that occurred.\r\n */\r\nvar TileCheckX = function (body, tile, tileLeft, tileRight, tileBias, isLayer)\r\n{\r\n    var ox = 0;\r\n\r\n    var faceLeft = tile.faceLeft;\r\n    var faceRight = tile.faceRight;\r\n    var collideLeft = tile.collideLeft;\r\n    var collideRight = tile.collideRight;\r\n\r\n    if (!isLayer)\r\n    {\r\n        faceLeft = true;\r\n        faceRight = true;\r\n        collideLeft = true;\r\n        collideRight = true;\r\n    }\r\n\r\n    if (body.deltaX() < 0 && collideRight && body.checkCollision.left)\r\n    {\r\n        //  Body is moving LEFT\r\n        if (faceRight && body.x < tileRight)\r\n        {\r\n            ox = body.x - tileRight;\r\n\r\n            if (ox < -tileBias)\r\n            {\r\n                ox = 0;\r\n            }\r\n        }\r\n    }\r\n    else if (body.deltaX() > 0 && collideLeft && body.checkCollision.right)\r\n    {\r\n        //  Body is moving RIGHT\r\n        if (faceLeft && body.right > tileLeft)\r\n        {\r\n            ox = body.right - tileLeft;\r\n\r\n            if (ox > tileBias)\r\n            {\r\n                ox = 0;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (ox !== 0)\r\n    {\r\n        if (body.customSeparateX)\r\n        {\r\n            body.overlapX = ox;\r\n        }\r\n        else\r\n        {\r\n            ProcessTileSeparationX(body, ox);\r\n        }\r\n    }\r\n\r\n    return ox;\r\n};\r\n\r\nmodule.exports = TileCheckX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1RpbGVDaGVja1guanM/OGI2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsNEdBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1RpbGVDaGVja1guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9jZXNzVGlsZVNlcGFyYXRpb25YID0gcmVxdWlyZSgnLi9Qcm9jZXNzVGlsZVNlcGFyYXRpb25YJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2sgdGhlIGJvZHkgYWdhaW5zdCB0aGUgZ2l2ZW4gdGlsZSBvbiB0aGUgWCBheGlzLlxyXG4gKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIFNlcGFyYXRlVGlsZSBmdW5jdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5UaWxlbWFwLlRpbGVDaGVja1hcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkgLSBUaGUgQm9keSBvYmplY3QgdG8gc2VwYXJhdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgdGlsZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbGVMZWZ0IC0gVGhlIGxlZnQgcG9zaXRpb24gb2YgdGhlIHRpbGUgd2l0aGluIHRoZSB0aWxlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdGlsZVJpZ2h0IC0gVGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSB0aWxlIHdpdGhpbiB0aGUgdGlsZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbGVCaWFzIC0gVGhlIHRpbGUgYmlhcyB2YWx1ZS4gUG9wdWxhdGVkIGJ5IHRoZSBgV29ybGQuVElMRV9CSUFTYCBjb25zdGFudC5cclxuICogQHBhcmFtIHtib29sZWFufSBpc0xheWVyIC0gSXMgdGhpcyBjaGVjayBjb21pbmcgZnJvbSBhIFRpbGVtYXBMYXllciBvciBhbiBhcnJheSBvZiB0aWxlcz9cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW1vdW50IG9mIHNlcGFyYXRpb24gdGhhdCBvY2N1cnJlZC5cclxuICovXHJcbnZhciBUaWxlQ2hlY2tYID0gZnVuY3Rpb24gKGJvZHksIHRpbGUsIHRpbGVMZWZ0LCB0aWxlUmlnaHQsIHRpbGVCaWFzLCBpc0xheWVyKVxyXG57XHJcbiAgICB2YXIgb3ggPSAwO1xyXG5cclxuICAgIHZhciBmYWNlTGVmdCA9IHRpbGUuZmFjZUxlZnQ7XHJcbiAgICB2YXIgZmFjZVJpZ2h0ID0gdGlsZS5mYWNlUmlnaHQ7XHJcbiAgICB2YXIgY29sbGlkZUxlZnQgPSB0aWxlLmNvbGxpZGVMZWZ0O1xyXG4gICAgdmFyIGNvbGxpZGVSaWdodCA9IHRpbGUuY29sbGlkZVJpZ2h0O1xyXG5cclxuICAgIGlmICghaXNMYXllcilcclxuICAgIHtcclxuICAgICAgICBmYWNlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgZmFjZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICBjb2xsaWRlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgY29sbGlkZVJpZ2h0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYm9keS5kZWx0YVgoKSA8IDAgJiYgY29sbGlkZVJpZ2h0ICYmIGJvZHkuY2hlY2tDb2xsaXNpb24ubGVmdClcclxuICAgIHtcclxuICAgICAgICAvLyAgQm9keSBpcyBtb3ZpbmcgTEVGVFxyXG4gICAgICAgIGlmIChmYWNlUmlnaHQgJiYgYm9keS54IDwgdGlsZVJpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3ggPSBib2R5LnggLSB0aWxlUmlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAob3ggPCAtdGlsZUJpYXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG94ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGJvZHkuZGVsdGFYKCkgPiAwICYmIGNvbGxpZGVMZWZ0ICYmIGJvZHkuY2hlY2tDb2xsaXNpb24ucmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvZHkgaXMgbW92aW5nIFJJR0hUXHJcbiAgICAgICAgaWYgKGZhY2VMZWZ0ICYmIGJvZHkucmlnaHQgPiB0aWxlTGVmdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG94ID0gYm9keS5yaWdodCAtIHRpbGVMZWZ0O1xyXG5cclxuICAgICAgICAgICAgaWYgKG94ID4gdGlsZUJpYXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG94ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAob3ggIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJvZHkuY3VzdG9tU2VwYXJhdGVYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keS5vdmVybGFwWCA9IG94O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBQcm9jZXNzVGlsZVNlcGFyYXRpb25YKGJvZHksIG94KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG94O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlQ2hlY2tYO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/TileCheckX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/TileCheckY.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/TileCheckY.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ProcessTileSeparationY = __webpack_require__(/*! ./ProcessTileSeparationY */ \"./node_modules/phaser/src/physics/arcade/tilemap/ProcessTileSeparationY.js\");\r\n\r\n/**\r\n * Check the body against the given tile on the Y axis.\r\n * Used internally by the SeparateTile function.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.TileCheckY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Arcade.Body} body - The Body object to separate.\r\n * @param {Phaser.Tilemaps.Tile} tile - The tile to check.\r\n * @param {number} tileTop - The top position of the tile within the tile world.\r\n * @param {number} tileBottom - The bottom position of the tile within the tile world.\r\n * @param {number} tileBias - The tile bias value. Populated by the `World.TILE_BIAS` constant.\r\n * @param {boolean} isLayer - Is this check coming from a TilemapLayer or an array of tiles?\r\n *\r\n * @return {number} The amount of separation that occurred.\r\n */\r\nvar TileCheckY = function (body, tile, tileTop, tileBottom, tileBias, isLayer)\r\n{\r\n    var oy = 0;\r\n\r\n    var faceTop = tile.faceTop;\r\n    var faceBottom = tile.faceBottom;\r\n    var collideUp = tile.collideUp;\r\n    var collideDown = tile.collideDown;\r\n\r\n    if (!isLayer)\r\n    {\r\n        faceTop = true;\r\n        faceBottom = true;\r\n        collideUp = true;\r\n        collideDown = true;\r\n    }\r\n\r\n    if (body.deltaY() < 0 && collideDown && body.checkCollision.up)\r\n    {\r\n        //  Body is moving UP\r\n        if (faceBottom && body.y < tileBottom)\r\n        {\r\n            oy = body.y - tileBottom;\r\n\r\n            if (oy < -tileBias)\r\n            {\r\n                oy = 0;\r\n            }\r\n        }\r\n    }\r\n    else if (body.deltaY() > 0 && collideUp && body.checkCollision.down)\r\n    {\r\n        //  Body is moving DOWN\r\n        if (faceTop && body.bottom > tileTop)\r\n        {\r\n            oy = body.bottom - tileTop;\r\n\r\n            if (oy > tileBias)\r\n            {\r\n                oy = 0;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (oy !== 0)\r\n    {\r\n        if (body.customSeparateY)\r\n        {\r\n            body.overlapY = oy;\r\n        }\r\n        else\r\n        {\r\n            ProcessTileSeparationY(body, oy);\r\n        }\r\n    }\r\n\r\n    return oy;\r\n};\r\n\r\nmodule.exports = TileCheckY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1RpbGVDaGVja1kuanM/OWZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsNEdBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1RpbGVDaGVja1kuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9jZXNzVGlsZVNlcGFyYXRpb25ZID0gcmVxdWlyZSgnLi9Qcm9jZXNzVGlsZVNlcGFyYXRpb25ZJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2sgdGhlIGJvZHkgYWdhaW5zdCB0aGUgZ2l2ZW4gdGlsZSBvbiB0aGUgWSBheGlzLlxyXG4gKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIFNlcGFyYXRlVGlsZSBmdW5jdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkFyY2FkZS5UaWxlbWFwLlRpbGVDaGVja1lcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuQXJjYWRlLkJvZHl9IGJvZHkgLSBUaGUgQm9keSBvYmplY3QgdG8gc2VwYXJhdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgdGlsZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbGVUb3AgLSBUaGUgdG9wIHBvc2l0aW9uIG9mIHRoZSB0aWxlIHdpdGhpbiB0aGUgdGlsZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbGVCb3R0b20gLSBUaGUgYm90dG9tIHBvc2l0aW9uIG9mIHRoZSB0aWxlIHdpdGhpbiB0aGUgdGlsZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbGVCaWFzIC0gVGhlIHRpbGUgYmlhcyB2YWx1ZS4gUG9wdWxhdGVkIGJ5IHRoZSBgV29ybGQuVElMRV9CSUFTYCBjb25zdGFudC5cclxuICogQHBhcmFtIHtib29sZWFufSBpc0xheWVyIC0gSXMgdGhpcyBjaGVjayBjb21pbmcgZnJvbSBhIFRpbGVtYXBMYXllciBvciBhbiBhcnJheSBvZiB0aWxlcz9cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW1vdW50IG9mIHNlcGFyYXRpb24gdGhhdCBvY2N1cnJlZC5cclxuICovXHJcbnZhciBUaWxlQ2hlY2tZID0gZnVuY3Rpb24gKGJvZHksIHRpbGUsIHRpbGVUb3AsIHRpbGVCb3R0b20sIHRpbGVCaWFzLCBpc0xheWVyKVxyXG57XHJcbiAgICB2YXIgb3kgPSAwO1xyXG5cclxuICAgIHZhciBmYWNlVG9wID0gdGlsZS5mYWNlVG9wO1xyXG4gICAgdmFyIGZhY2VCb3R0b20gPSB0aWxlLmZhY2VCb3R0b207XHJcbiAgICB2YXIgY29sbGlkZVVwID0gdGlsZS5jb2xsaWRlVXA7XHJcbiAgICB2YXIgY29sbGlkZURvd24gPSB0aWxlLmNvbGxpZGVEb3duO1xyXG5cclxuICAgIGlmICghaXNMYXllcilcclxuICAgIHtcclxuICAgICAgICBmYWNlVG9wID0gdHJ1ZTtcclxuICAgICAgICBmYWNlQm90dG9tID0gdHJ1ZTtcclxuICAgICAgICBjb2xsaWRlVXAgPSB0cnVlO1xyXG4gICAgICAgIGNvbGxpZGVEb3duID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYm9keS5kZWx0YVkoKSA8IDAgJiYgY29sbGlkZURvd24gJiYgYm9keS5jaGVja0NvbGxpc2lvbi51cClcclxuICAgIHtcclxuICAgICAgICAvLyAgQm9keSBpcyBtb3ZpbmcgVVBcclxuICAgICAgICBpZiAoZmFjZUJvdHRvbSAmJiBib2R5LnkgPCB0aWxlQm90dG9tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3kgPSBib2R5LnkgLSB0aWxlQm90dG9tO1xyXG5cclxuICAgICAgICAgICAgaWYgKG95IDwgLXRpbGVCaWFzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBveSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5LmRlbHRhWSgpID4gMCAmJiBjb2xsaWRlVXAgJiYgYm9keS5jaGVja0NvbGxpc2lvbi5kb3duKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBCb2R5IGlzIG1vdmluZyBET1dOXHJcbiAgICAgICAgaWYgKGZhY2VUb3AgJiYgYm9keS5ib3R0b20gPiB0aWxlVG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3kgPSBib2R5LmJvdHRvbSAtIHRpbGVUb3A7XHJcblxyXG4gICAgICAgICAgICBpZiAob3kgPiB0aWxlQmlhcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3kgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChveSAhPT0gMClcclxuICAgIHtcclxuICAgICAgICBpZiAoYm9keS5jdXN0b21TZXBhcmF0ZVkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5Lm92ZXJsYXBZID0gb3k7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFByb2Nlc3NUaWxlU2VwYXJhdGlvblkoYm9keSwgb3kpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3k7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVDaGVja1k7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/TileCheckY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/arcade/tilemap/TileIntersectsBody.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/arcade/tilemap/TileIntersectsBody.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks for intersection between the given tile rectangle-like object and an Arcade Physics body.\r\n *\r\n * @function Phaser.Physics.Arcade.Tilemap.TileIntersectsBody\r\n * @since 3.0.0\r\n *\r\n * @param {{ left: number, right: number, top: number, bottom: number }} tileWorldRect - A rectangle object that defines the tile placement in the world.\r\n * @param {Phaser.Physics.Arcade.Body} body - The body to check for intersection against.\r\n *\r\n * @return {boolean} Returns `true` of the tile intersects with the body, otherwise `false`.\r\n */\r\nvar TileIntersectsBody = function (tileWorldRect, body)\r\n{\r\n    // Currently, all bodies are treated as rectangles when colliding with a Tile.\r\n\r\n    return !(\r\n        body.right <= tileWorldRect.left ||\r\n        body.bottom <= tileWorldRect.top ||\r\n        body.position.x >= tileWorldRect.right ||\r\n        body.position.y >= tileWorldRect.bottom\r\n    );\r\n};\r\n\r\nmodule.exports = TileIntersectsBody;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2FyY2FkZS90aWxlbWFwL1RpbGVJbnRlcnNlY3RzQm9keS5qcz9mOWFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDREQUE0RDtBQUN4RSxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvYXJjYWRlL3RpbGVtYXAvVGlsZUludGVyc2VjdHNCb2R5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgZ2l2ZW4gdGlsZSByZWN0YW5nbGUtbGlrZSBvYmplY3QgYW5kIGFuIEFyY2FkZSBQaHlzaWNzIGJvZHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuVGlsZW1hcC5UaWxlSW50ZXJzZWN0c0JvZHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7eyBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlciB9fSB0aWxlV29ybGRSZWN0IC0gQSByZWN0YW5nbGUgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgdGlsZSBwbGFjZW1lbnQgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fSBib2R5IC0gVGhlIGJvZHkgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbiBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBvZiB0aGUgdGlsZSBpbnRlcnNlY3RzIHdpdGggdGhlIGJvZHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFRpbGVJbnRlcnNlY3RzQm9keSA9IGZ1bmN0aW9uICh0aWxlV29ybGRSZWN0LCBib2R5KVxyXG57XHJcbiAgICAvLyBDdXJyZW50bHksIGFsbCBib2RpZXMgYXJlIHRyZWF0ZWQgYXMgcmVjdGFuZ2xlcyB3aGVuIGNvbGxpZGluZyB3aXRoIGEgVGlsZS5cclxuXHJcbiAgICByZXR1cm4gIShcclxuICAgICAgICBib2R5LnJpZ2h0IDw9IHRpbGVXb3JsZFJlY3QubGVmdCB8fFxyXG4gICAgICAgIGJvZHkuYm90dG9tIDw9IHRpbGVXb3JsZFJlY3QudG9wIHx8XHJcbiAgICAgICAgYm9keS5wb3NpdGlvbi54ID49IHRpbGVXb3JsZFJlY3QucmlnaHQgfHxcclxuICAgICAgICBib2R5LnBvc2l0aW9uLnkgPj0gdGlsZVdvcmxkUmVjdC5ib3R0b21cclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVJbnRlcnNlY3RzQm9keTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/arcade/tilemap/TileIntersectsBody.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/Body.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/Body.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar COLLIDES = __webpack_require__(/*! ./COLLIDES */ \"./node_modules/phaser/src/physics/impact/COLLIDES.js\");\r\nvar GetVelocity = __webpack_require__(/*! ./GetVelocity */ \"./node_modules/phaser/src/physics/impact/GetVelocity.js\");\r\nvar TYPE = __webpack_require__(/*! ./TYPE */ \"./node_modules/phaser/src/physics/impact/TYPE.js\");\r\nvar UpdateMotion = __webpack_require__(/*! ./UpdateMotion */ \"./node_modules/phaser/src/physics/impact/UpdateMotion.js\");\r\n\r\n/**\r\n * @callback Phaser.Types.Physics.Impact.BodyUpdateCallback\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.Body} body - [description]\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * An Impact.js compatible physics body.\r\n * This re-creates the properties you'd get on an Entity and the math needed to update them.\r\n *\r\n * @class Body\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - [description]\r\n * @param {number} x - [description]\r\n * @param {number} y - [description]\r\n * @param {number} [sx=16] - [description]\r\n * @param {number} [sy=16] - [description]\r\n */\r\nvar Body = new Class({\r\n\r\n    initialize:\r\n\r\n    function Body (world, x, y, sx, sy)\r\n    {\r\n        if (sx === undefined) { sx = 16; }\r\n        if (sy === undefined) { sy = sx; }\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#world\r\n         * @type {Phaser.Physics.Impact.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#gameObject\r\n         * @type {Phaser.GameObjects.GameObject}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.gameObject = null;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * The ImpactBody, ImpactSprite or ImpactImage object that owns this Body, if any.\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#parent\r\n         * @type {?(Phaser.Physics.Impact.ImpactBody|Phaser.Physics.Impact.ImpactImage|Phaser.Physics.Impact.ImpactSprite)}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#id\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.id = world.getNextID();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#name\r\n         * @type {string}\r\n         * @default ''\r\n         * @since 3.0.0\r\n         */\r\n        this.name = '';\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#size\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = { x: sx, y: sy };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#offset\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = { x: 0, y: 0 };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#pos\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.pos = { x: x, y: y };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#last\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.last = { x: x, y: y };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#vel\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.vel = { x: 0, y: 0 };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#accel\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.accel = { x: 0, y: 0 };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#friction\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.friction = { x: 0, y: 0 };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#maxVel\r\n         * @type {Phaser.Types.Math.Vector2Like}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVel = { x: world.defaults.maxVelocityX, y: world.defaults.maxVelocityY };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#standing\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.standing = false;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#gravityFactor\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.gravityFactor = world.defaults.gravityFactor;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#bounciness\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.bounciness = world.defaults.bounciness;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#minBounceVelocity\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.minBounceVelocity = world.defaults.minBounceVelocity;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#accelGround\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelGround = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#accelAir\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.accelAir = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#jumpSpeed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.jumpSpeed = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#type\r\n         * @type {Phaser.Physics.Impact.TYPE}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = TYPE.NONE;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#checkAgainst\r\n         * @type {Phaser.Physics.Impact.TYPE}\r\n         * @since 3.0.0\r\n         */\r\n        this.checkAgainst = TYPE.NONE;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#collides\r\n         * @type {Phaser.Physics.Impact.COLLIDES}\r\n         * @since 3.0.0\r\n         */\r\n        this.collides = COLLIDES.NEVER;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#debugShowBody\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugShowBody = world.defaults.debugShowBody;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#debugShowVelocity\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugShowVelocity = world.defaults.debugShowVelocity;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#debugBodyColor\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugBodyColor = world.defaults.bodyDebugColor;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#updateCallback\r\n         * @type {?Phaser.Types.Physics.Impact.BodyUpdateCallback}\r\n         * @since 3.0.0\r\n         */\r\n        this.updateCallback;\r\n\r\n        /**\r\n         * min 44 deg, max 136 deg\r\n         *\r\n         * @name Phaser.Physics.Impact.Body#slopeStanding\r\n         * @type {{ min: number, max: number }}\r\n         * @since 3.0.0\r\n         */\r\n        this.slopeStanding = { min: 0.767944870877505, max: 2.3736477827122884 };\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     */\r\n    reset: function (x, y)\r\n    {\r\n        this.pos = { x: x, y: y };\r\n        this.last = { x: x, y: y };\r\n        this.vel = { x: 0, y: 0 };\r\n        this.accel = { x: 0, y: 0 };\r\n        this.friction = { x: 0, y: 0 };\r\n        this.maxVel = { x: 100, y: 100 };\r\n\r\n        this.standing = false;\r\n\r\n        this.gravityFactor = 1;\r\n        this.bounciness = 0;\r\n        this.minBounceVelocity = 40;\r\n\r\n        this.accelGround = 0;\r\n        this.accelAir = 0;\r\n        this.jumpSpeed = 0;\r\n\r\n        this.type = TYPE.NONE;\r\n        this.checkAgainst = TYPE.NONE;\r\n        this.collides = COLLIDES.NEVER;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (delta)\r\n    {\r\n        var pos = this.pos;\r\n\r\n        this.last.x = pos.x;\r\n        this.last.y = pos.y;\r\n\r\n        this.vel.y += this.world.gravity * delta * this.gravityFactor;\r\n\r\n        this.vel.x = GetVelocity(delta, this.vel.x, this.accel.x, this.friction.x, this.maxVel.x);\r\n        this.vel.y = GetVelocity(delta, this.vel.y, this.accel.y, this.friction.y, this.maxVel.y);\r\n\r\n        var mx = this.vel.x * delta;\r\n        var my = this.vel.y * delta;\r\n\r\n        var res = this.world.collisionMap.trace(pos.x, pos.y, mx, my, this.size.x, this.size.y);\r\n\r\n        if (this.handleMovementTrace(res))\r\n        {\r\n            UpdateMotion(this, res);\r\n        }\r\n\r\n        var go = this.gameObject;\r\n\r\n        if (go)\r\n        {\r\n            go.x = (pos.x - this.offset.x) + go.displayOriginX * go.scaleX;\r\n            go.y = (pos.y - this.offset.y) + go.displayOriginY * go.scaleY;\r\n        }\r\n\r\n        if (this.updateCallback)\r\n        {\r\n            this.updateCallback(this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#drawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphic - [description]\r\n     */\r\n    drawDebug: function (graphic)\r\n    {\r\n        var pos = this.pos;\r\n\r\n        if (this.debugShowBody)\r\n        {\r\n            graphic.lineStyle(1, this.debugBodyColor, 1);\r\n            graphic.strokeRect(pos.x, pos.y, this.size.x, this.size.y);\r\n        }\r\n\r\n        if (this.debugShowVelocity)\r\n        {\r\n            var x = pos.x + this.size.x / 2;\r\n            var y = pos.y + this.size.y / 2;\r\n\r\n            graphic.lineStyle(1, this.world.defaults.velocityDebugColor, 1);\r\n            graphic.lineBetween(x, y, x + this.vel.x, y + this.vel.y);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#willDrawDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    willDrawDebug: function ()\r\n    {\r\n        return (this.debugShowBody || this.debugShowVelocity);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#skipHash\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    skipHash: function ()\r\n    {\r\n        return (!this.enabled || (this.type === 0 && this.checkAgainst === 0 && this.collides === 0));\r\n    },\r\n\r\n    /**\r\n     * Determines whether the body collides with the `other` one or not.\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#touches\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} other - [description]\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    touches: function (other)\r\n    {\r\n        return !(\r\n            this.pos.x >= other.pos.x + other.size.x ||\r\n            this.pos.x + this.size.x <= other.pos.x ||\r\n            this.pos.y >= other.pos.y + other.size.y ||\r\n            this.pos.y + this.size.y <= other.pos.y\r\n        );\r\n    },\r\n\r\n    /**\r\n     * Reset the size and position of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#resetSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to position the body.\r\n     * @param {number} y - The y coordinate to position the body.\r\n     * @param {number} width - The width of the body.\r\n     * @param {number} height - The height of the body.\r\n     *\r\n     * @return {Phaser.Physics.Impact.Body} This Body object.\r\n     */\r\n    resetSize: function (x, y, width, height)\r\n    {\r\n        this.pos.x = x;\r\n        this.pos.y = y;\r\n        this.size.x = width;\r\n        this.size.y = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Export this body object to JSON.\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#toJSON\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Types.Physics.Impact.JSONImpactBody} JSON representation of this body object.\r\n     */\r\n    toJSON: function ()\r\n    {\r\n        var output = {\r\n            name: this.name,\r\n            size: { x: this.size.x, y: this.size.y },\r\n            pos: { x: this.pos.x, y: this.pos.y },\r\n            vel: { x: this.vel.x, y: this.vel.y },\r\n            accel: { x: this.accel.x, y: this.accel.y },\r\n            friction: { x: this.friction.x, y: this.friction.y },\r\n            maxVel: { x: this.maxVel.x, y: this.maxVel.y },\r\n            gravityFactor: this.gravityFactor,\r\n            bounciness: this.bounciness,\r\n            minBounceVelocity: this.minBounceVelocity,\r\n            type: this.type,\r\n            checkAgainst: this.checkAgainst,\r\n            collides: this.collides\r\n        };\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#fromJSON\r\n     * @todo Code it!\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} config - [description]\r\n     */\r\n    fromJSON: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Can be overridden by user code\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#check\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} other - [description]\r\n     */\r\n    check: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Can be overridden by user code\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#collideWith\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} other - [description]\r\n     * @param {string} axis - [description]\r\n     */\r\n    collideWith: function (other, axis)\r\n    {\r\n        if (this.parent && this.parent._collideCallback)\r\n        {\r\n            this.parent._collideCallback.call(this.parent._callbackScope, this, other, axis);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Can be overridden by user code but must return a boolean.\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#handleMovementTrace\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} res - [description]\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    handleMovementTrace: function ()\r\n    {\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Body#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world.remove(this);\r\n\r\n        this.enabled = false;\r\n\r\n        this.world = null;\r\n\r\n        this.gameObject = null;\r\n\r\n        this.parent = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Body;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9Cb2R5LmpzPzBlOTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFlO0FBQ3pDLFdBQVcsbUJBQU8sQ0FBQyxnRUFBUTtBQUMzQixtQkFBbUIsbUJBQU8sQ0FBQyxnRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEMsK0JBQStCLFNBQVM7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIscUJBQXFCO0FBQ3JCLG9CQUFvQjtBQUNwQixzQkFBc0I7QUFDdEIseUJBQXlCO0FBQ3pCLHVCQUF1Qjs7QUFFdkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlDQUFpQztBQUNwRCxrQkFBa0IsK0JBQStCO0FBQ2pELGtCQUFrQiwrQkFBK0I7QUFDakQsb0JBQW9CLG1DQUFtQztBQUN2RCx1QkFBdUIseUNBQXlDO0FBQ2hFLHFCQUFxQixxQ0FBcUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQyxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvQm9keS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTExJREVTID0gcmVxdWlyZSgnLi9DT0xMSURFUycpO1xyXG52YXIgR2V0VmVsb2NpdHkgPSByZXF1aXJlKCcuL0dldFZlbG9jaXR5Jyk7XHJcbnZhciBUWVBFID0gcmVxdWlyZSgnLi9UWVBFJyk7XHJcbnZhciBVcGRhdGVNb3Rpb24gPSByZXF1aXJlKCcuL1VwZGF0ZU1vdGlvbicpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBQaGFzZXIuVHlwZXMuUGh5c2ljcy5JbXBhY3QuQm9keVVwZGF0ZUNhbGxiYWNrXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEFuIEltcGFjdC5qcyBjb21wYXRpYmxlIHBoeXNpY3MgYm9keS5cclxuICogVGhpcyByZS1jcmVhdGVzIHRoZSBwcm9wZXJ0aWVzIHlvdSdkIGdldCBvbiBhbiBFbnRpdHkgYW5kIHRoZSBtYXRoIG5lZWRlZCB0byB1cGRhdGUgdGhlbS5cclxuICpcclxuICogQGNsYXNzIEJvZHlcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkltcGFjdFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSB3b3JsZCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N4PTE2XSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzeT0xNl0gLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQm9keSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCb2R5ICh3b3JsZCwgeCwgeSwgc3gsIHN5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzeCA9PT0gdW5kZWZpbmVkKSB7IHN4ID0gMTY7IH1cclxuICAgICAgICBpZiAoc3kgPT09IHVuZGVmaW5lZCkgeyBzeSA9IHN4OyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2dhbWVPYmplY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZU9iamVjdCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEltcGFjdEJvZHksIEltcGFjdFNwcml0ZSBvciBJbXBhY3RJbWFnZSBvYmplY3QgdGhhdCBvd25zIHRoaXMgQm9keSwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUgez8oUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEJvZHl8UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEltYWdlfFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RTcHJpdGUpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNpZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaWQgPSB3b3JsZC5nZXROZXh0SUQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpemUgPSB7IHg6IHN4LCB5OiBzeSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNvZmZzZXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLk1hdGguVmVjdG9yMkxpa2V9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjcG9zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5NYXRoLlZlY3RvcjJMaWtlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9zID0geyB4OiB4LCB5OiB5IH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2xhc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLk1hdGguVmVjdG9yMkxpa2V9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXN0ID0geyB4OiB4LCB5OiB5IH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3ZlbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbCA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNhY2NlbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsID0geyB4OiAwLCB5OiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2ZyaWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5NYXRoLlZlY3RvcjJMaWtlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJpY3Rpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjbWF4VmVsXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5NYXRoLlZlY3RvcjJMaWtlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4VmVsID0geyB4OiB3b3JsZC5kZWZhdWx0cy5tYXhWZWxvY2l0eVgsIHk6IHdvcmxkLmRlZmF1bHRzLm1heFZlbG9jaXR5WSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNzdGFuZGluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGFuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNncmF2aXR5RmFjdG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdyYXZpdHlGYWN0b3IgPSB3b3JsZC5kZWZhdWx0cy5ncmF2aXR5RmFjdG9yO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNib3VuY2luZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJvdW5jaW5lc3MgPSB3b3JsZC5kZWZhdWx0cy5ib3VuY2luZXNzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNtaW5Cb3VuY2VWZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taW5Cb3VuY2VWZWxvY2l0eSA9IHdvcmxkLmRlZmF1bHRzLm1pbkJvdW5jZVZlbG9jaXR5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNhY2NlbEdyb3VuZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxHcm91bmQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNhY2NlbEFpclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxBaXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNqdW1wU3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmp1bXBTcGVlZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LlRZUEV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5OT05FO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNjaGVja0FnYWluc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LlRZUEV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jaGVja0FnYWluc3QgPSBUWVBFLk5PTkU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2NvbGxpZGVzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkltcGFjdC5DT0xMSURFU31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVzID0gQ09MTElERVMuTkVWRVI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2RlYnVnU2hvd0JvZHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYnVnU2hvd0JvZHkgPSB3b3JsZC5kZWZhdWx0cy5kZWJ1Z1Nob3dCb2R5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNkZWJ1Z1Nob3dWZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93VmVsb2NpdHkgPSB3b3JsZC5kZWZhdWx0cy5kZWJ1Z1Nob3dWZWxvY2l0eTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjZGVidWdCb2R5Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYnVnQm9keUNvbG9yID0gd29ybGQuZGVmYXVsdHMuYm9keURlYnVnQ29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3VwZGF0ZUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuUGh5c2ljcy5JbXBhY3QuQm9keVVwZGF0ZUNhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2s7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIG1pbiA0NCBkZWcsIG1heCAxMzYgZGVnXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNzbG9wZVN0YW5kaW5nXHJcbiAgICAgICAgICogQHR5cGUge3sgbWluOiBudW1iZXIsIG1heDogbnVtYmVyIH19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zbG9wZVN0YW5kaW5nID0geyBtaW46IDAuNzY3OTQ0ODcwODc3NTA1LCBtYXg6IDIuMzczNjQ3NzgyNzEyMjg4NCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wb3MgPSB7IHg6IHgsIHk6IHkgfTtcclxuICAgICAgICB0aGlzLmxhc3QgPSB7IHg6IHgsIHk6IHkgfTtcclxuICAgICAgICB0aGlzLnZlbCA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgIHRoaXMuYWNjZWwgPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICB0aGlzLmZyaWN0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgdGhpcy5tYXhWZWwgPSB7IHg6IDEwMCwgeTogMTAwIH07XHJcblxyXG4gICAgICAgIHRoaXMuc3RhbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmF2aXR5RmFjdG9yID0gMTtcclxuICAgICAgICB0aGlzLmJvdW5jaW5lc3MgPSAwO1xyXG4gICAgICAgIHRoaXMubWluQm91bmNlVmVsb2NpdHkgPSA0MDtcclxuXHJcbiAgICAgICAgdGhpcy5hY2NlbEdyb3VuZCA9IDA7XHJcbiAgICAgICAgdGhpcy5hY2NlbEFpciA9IDA7XHJcbiAgICAgICAgdGhpcy5qdW1wU3BlZWQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnR5cGUgPSBUWVBFLk5PTkU7XHJcbiAgICAgICAgdGhpcy5jaGVja0FnYWluc3QgPSBUWVBFLk5PTkU7XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlcyA9IENPTExJREVTLk5FVkVSO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xyXG5cclxuICAgICAgICB0aGlzLmxhc3QueCA9IHBvcy54O1xyXG4gICAgICAgIHRoaXMubGFzdC55ID0gcG9zLnk7XHJcblxyXG4gICAgICAgIHRoaXMudmVsLnkgKz0gdGhpcy53b3JsZC5ncmF2aXR5ICogZGVsdGEgKiB0aGlzLmdyYXZpdHlGYWN0b3I7XHJcblxyXG4gICAgICAgIHRoaXMudmVsLnggPSBHZXRWZWxvY2l0eShkZWx0YSwgdGhpcy52ZWwueCwgdGhpcy5hY2NlbC54LCB0aGlzLmZyaWN0aW9uLngsIHRoaXMubWF4VmVsLngpO1xyXG4gICAgICAgIHRoaXMudmVsLnkgPSBHZXRWZWxvY2l0eShkZWx0YSwgdGhpcy52ZWwueSwgdGhpcy5hY2NlbC55LCB0aGlzLmZyaWN0aW9uLnksIHRoaXMubWF4VmVsLnkpO1xyXG5cclxuICAgICAgICB2YXIgbXggPSB0aGlzLnZlbC54ICogZGVsdGE7XHJcbiAgICAgICAgdmFyIG15ID0gdGhpcy52ZWwueSAqIGRlbHRhO1xyXG5cclxuICAgICAgICB2YXIgcmVzID0gdGhpcy53b3JsZC5jb2xsaXNpb25NYXAudHJhY2UocG9zLngsIHBvcy55LCBteCwgbXksIHRoaXMuc2l6ZS54LCB0aGlzLnNpemUueSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZU1vdmVtZW50VHJhY2UocmVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFVwZGF0ZU1vdGlvbih0aGlzLCByZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdvID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBpZiAoZ28pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnby54ID0gKHBvcy54IC0gdGhpcy5vZmZzZXQueCkgKyBnby5kaXNwbGF5T3JpZ2luWCAqIGdvLnNjYWxlWDtcclxuICAgICAgICAgICAgZ28ueSA9IChwb3MueSAtIHRoaXMub2Zmc2V0LnkpICsgZ28uZGlzcGxheU9yaWdpblkgKiBnby5zY2FsZVk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy51cGRhdGVDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2RyYXdEZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGRyYXdEZWJ1ZzogZnVuY3Rpb24gKGdyYXBoaWMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z1Nob3dCb2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ3JhcGhpYy5saW5lU3R5bGUoMSwgdGhpcy5kZWJ1Z0JvZHlDb2xvciwgMSk7XHJcbiAgICAgICAgICAgIGdyYXBoaWMuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMuc2l6ZS54LCB0aGlzLnNpemUueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z1Nob3dWZWxvY2l0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcG9zLnggKyB0aGlzLnNpemUueCAvIDI7XHJcbiAgICAgICAgICAgIHZhciB5ID0gcG9zLnkgKyB0aGlzLnNpemUueSAvIDI7XHJcblxyXG4gICAgICAgICAgICBncmFwaGljLmxpbmVTdHlsZSgxLCB0aGlzLndvcmxkLmRlZmF1bHRzLnZlbG9jaXR5RGVidWdDb2xvciwgMSk7XHJcbiAgICAgICAgICAgIGdyYXBoaWMubGluZUJldHdlZW4oeCwgeSwgeCArIHRoaXMudmVsLngsIHkgKyB0aGlzLnZlbC55KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjd2lsbERyYXdEZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB3aWxsRHJhd0RlYnVnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kZWJ1Z1Nob3dCb2R5IHx8IHRoaXMuZGVidWdTaG93VmVsb2NpdHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3NraXBIYXNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHNraXBIYXNoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAoIXRoaXMuZW5hYmxlZCB8fCAodGhpcy50eXBlID09PSAwICYmIHRoaXMuY2hlY2tBZ2FpbnN0ID09PSAwICYmIHRoaXMuY29sbGlkZXMgPT09IDApKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJvZHkgY29sbGlkZXMgd2l0aCB0aGUgYG90aGVyYCBvbmUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjdG91Y2hlc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gb3RoZXIgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB0b3VjaGVzOiBmdW5jdGlvbiAob3RoZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgICAgIHRoaXMucG9zLnggPj0gb3RoZXIucG9zLnggKyBvdGhlci5zaXplLnggfHxcclxuICAgICAgICAgICAgdGhpcy5wb3MueCArIHRoaXMuc2l6ZS54IDw9IG90aGVyLnBvcy54IHx8XHJcbiAgICAgICAgICAgIHRoaXMucG9zLnkgPj0gb3RoZXIucG9zLnkgKyBvdGhlci5zaXplLnkgfHxcclxuICAgICAgICAgICAgdGhpcy5wb3MueSArIHRoaXMuc2l6ZS55IDw9IG90aGVyLnBvcy55XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIHBoeXNpY3MgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3Jlc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHl9IFRoaXMgQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0U2l6ZTogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wb3MueCA9IHg7XHJcbiAgICAgICAgdGhpcy5wb3MueSA9IHk7XHJcbiAgICAgICAgdGhpcy5zaXplLnggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLnNpemUueSA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IHRoaXMgYm9keSBvYmplY3QgdG8gSlNPTi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuSW1wYWN0LkpTT05JbXBhY3RCb2R5fSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0cHV0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNpemU6IHsgeDogdGhpcy5zaXplLngsIHk6IHRoaXMuc2l6ZS55IH0sXHJcbiAgICAgICAgICAgIHBvczogeyB4OiB0aGlzLnBvcy54LCB5OiB0aGlzLnBvcy55IH0sXHJcbiAgICAgICAgICAgIHZlbDogeyB4OiB0aGlzLnZlbC54LCB5OiB0aGlzLnZlbC55IH0sXHJcbiAgICAgICAgICAgIGFjY2VsOiB7IHg6IHRoaXMuYWNjZWwueCwgeTogdGhpcy5hY2NlbC55IH0sXHJcbiAgICAgICAgICAgIGZyaWN0aW9uOiB7IHg6IHRoaXMuZnJpY3Rpb24ueCwgeTogdGhpcy5mcmljdGlvbi55IH0sXHJcbiAgICAgICAgICAgIG1heFZlbDogeyB4OiB0aGlzLm1heFZlbC54LCB5OiB0aGlzLm1heFZlbC55IH0sXHJcbiAgICAgICAgICAgIGdyYXZpdHlGYWN0b3I6IHRoaXMuZ3Jhdml0eUZhY3RvcixcclxuICAgICAgICAgICAgYm91bmNpbmVzczogdGhpcy5ib3VuY2luZXNzLFxyXG4gICAgICAgICAgICBtaW5Cb3VuY2VWZWxvY2l0eTogdGhpcy5taW5Cb3VuY2VWZWxvY2l0eSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBjaGVja0FnYWluc3Q6IHRoaXMuY2hlY2tBZ2FpbnN0LFxyXG4gICAgICAgICAgICBjb2xsaWRlczogdGhpcy5jb2xsaWRlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHkjZnJvbUpTT05cclxuICAgICAqIEB0b2RvIENvZGUgaXQhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBmcm9tSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGNvZGVcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2NoZWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBvdGhlciAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY2hlY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBjb2RlXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keSNjb2xsaWRlV2l0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gb3RoZXIgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXhpcyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY29sbGlkZVdpdGg6IGZ1bmN0aW9uIChvdGhlciwgYXhpcylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuX2NvbGxpZGVDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9jb2xsaWRlQ2FsbGJhY2suY2FsbCh0aGlzLnBhcmVudC5fY2FsbGJhY2tTY29wZSwgdGhpcywgb3RoZXIsIGF4aXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGNvZGUgYnV0IG11c3QgcmV0dXJuIGEgYm9vbGVhbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2hhbmRsZU1vdmVtZW50VHJhY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBoYW5kbGVNb3ZlbWVudFRyYWNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5I2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQucmVtb3ZlKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZU9iamVjdCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb2R5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/Body.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/COLLIDES.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/COLLIDES.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Collision Types - Determine if and how entities collide with each other.\r\n *\r\n * In ACTIVE vs. LITE or FIXED vs. ANY collisions, only the \"weak\" entity moves,\r\n * while the other one stays fixed. In ACTIVE vs. ACTIVE and ACTIVE vs. PASSIVE\r\n * collisions, both entities are moved. LITE or PASSIVE entities don't collide\r\n * with other LITE or PASSIVE entities at all. The behavior for FIXED vs.\r\n * FIXED collisions is undefined.\r\n *\r\n * @namespace Phaser.Physics.Impact.COLLIDES\r\n * @memberof Phaser.Physics.Impact\r\n * @since 3.0.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * Never collides.\r\n     *\r\n     * @name Phaser.Physics.Impact.COLLIDES.NEVER\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    NEVER: 0,\r\n\r\n    /**\r\n     * Lite collision.\r\n     *\r\n     * @name Phaser.Physics.Impact.COLLIDES.LITE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    LITE: 1,\r\n\r\n    /**\r\n     * Passive collision.\r\n     *\r\n     * @name Phaser.Physics.Impact.COLLIDES.PASSIVE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    PASSIVE: 2,\r\n\r\n    /**\r\n     * Active collision.\r\n     *\r\n     * @name Phaser.Physics.Impact.COLLIDES.ACTIVE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    ACTIVE: 4,\r\n\r\n    /**\r\n     * Fixed collision.\r\n     *\r\n     * @name Phaser.Physics.Impact.COLLIDES.FIXED\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    FIXED: 8\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9DT0xMSURFUy5qcz9mZmYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L0NPTExJREVTLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29sbGlzaW9uIFR5cGVzIC0gRGV0ZXJtaW5lIGlmIGFuZCBob3cgZW50aXRpZXMgY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIuXHJcbiAqXHJcbiAqIEluIEFDVElWRSB2cy4gTElURSBvciBGSVhFRCB2cy4gQU5ZIGNvbGxpc2lvbnMsIG9ubHkgdGhlIFwid2Vha1wiIGVudGl0eSBtb3ZlcyxcclxuICogd2hpbGUgdGhlIG90aGVyIG9uZSBzdGF5cyBmaXhlZC4gSW4gQUNUSVZFIHZzLiBBQ1RJVkUgYW5kIEFDVElWRSB2cy4gUEFTU0lWRVxyXG4gKiBjb2xsaXNpb25zLCBib3RoIGVudGl0aWVzIGFyZSBtb3ZlZC4gTElURSBvciBQQVNTSVZFIGVudGl0aWVzIGRvbid0IGNvbGxpZGVcclxuICogd2l0aCBvdGhlciBMSVRFIG9yIFBBU1NJVkUgZW50aXRpZXMgYXQgYWxsLiBUaGUgYmVoYXZpb3IgZm9yIEZJWEVEIHZzLlxyXG4gKiBGSVhFRCBjb2xsaXNpb25zIGlzIHVuZGVmaW5lZC5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ09MTElERVNcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkltcGFjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5ldmVyIGNvbGxpZGVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5DT0xMSURFUy5ORVZFUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBORVZFUjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpdGUgY29sbGlzaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5DT0xMSURFUy5MSVRFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExJVEU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXNzaXZlIGNvbGxpc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ09MTElERVMuUEFTU0lWRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQVNTSVZFOiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWN0aXZlIGNvbGxpc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ09MTElERVMuQUNUSVZFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEFDVElWRTogNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpeGVkIGNvbGxpc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ09MTElERVMuRklYRURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklYRUQ6IDhcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/COLLIDES.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/CollisionMap.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/CollisionMap.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DefaultDefs = __webpack_require__(/*! ./DefaultDefs */ \"./node_modules/phaser/src/physics/impact/DefaultDefs.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class CollisionMap\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [tilesize=32] - [description]\r\n * @param {array} [data] - [description]\r\n */\r\nvar CollisionMap = new Class({\r\n\r\n    initialize:\r\n\r\n    function CollisionMap (tilesize, data)\r\n    {\r\n        if (tilesize === undefined) { tilesize = 32; }\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#tilesize\r\n         * @type {integer}\r\n         * @default 32\r\n         * @since 3.0.0\r\n         */\r\n        this.tilesize = tilesize;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#data\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = (Array.isArray(data)) ? data : [];\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = (Array.isArray(data)) ? data[0].length : 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = (Array.isArray(data)) ? data.length : 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#lastSlope\r\n         * @type {integer}\r\n         * @default 55\r\n         * @since 3.0.0\r\n         */\r\n        this.lastSlope = 55;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.CollisionMap#tiledef\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.tiledef = DefaultDefs;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.CollisionMap#trace\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} vx - [description]\r\n     * @param {number} vy - [description]\r\n     * @param {number} objectWidth - [description]\r\n     * @param {number} objectHeight - [description]\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    trace: function (x, y, vx, vy, objectWidth, objectHeight)\r\n    {\r\n        // Set up the trace-result\r\n        var res = {\r\n            collision: { x: false, y: false, slope: false },\r\n            pos: { x: x + vx, y: y + vy },\r\n            tile: { x: 0, y: 0 }\r\n        };\r\n\r\n        if (!this.data)\r\n        {\r\n            return res;\r\n        }\r\n        \r\n        var steps = Math.ceil(Math.max(Math.abs(vx), Math.abs(vy)) / this.tilesize);\r\n\r\n        if (steps > 1)\r\n        {\r\n            var sx = vx / steps;\r\n            var sy = vy / steps;\r\n            \r\n            for (var i = 0; i < steps && (sx || sy); i++)\r\n            {\r\n                this.step(res, x, y, sx, sy, objectWidth, objectHeight, vx, vy, i);\r\n                \r\n                x = res.pos.x;\r\n                y = res.pos.y;\r\n\r\n                if (res.collision.x)\r\n                {\r\n                    sx = 0;\r\n                    vx = 0;\r\n                }\r\n\r\n                if (res.collision.y)\r\n                {\r\n                    sy = 0;\r\n                    vy = 0;\r\n                }\r\n\r\n                if (res.collision.slope)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.step(res, x, y, vx, vy, objectWidth, objectHeight, vx, vy, 0);\r\n        }\r\n        \r\n        return res;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.CollisionMap#step\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} res - [description]\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} vx - [description]\r\n     * @param {number} vy - [description]\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     * @param {number} rvx - [description]\r\n     * @param {number} rvy - [description]\r\n     * @param {number} step - [description]\r\n     */\r\n    step: function (res, x, y, vx, vy, width, height, rvx, rvy, step)\r\n    {\r\n        var t = 0;\r\n        var tileX;\r\n        var tileY;\r\n        var tilesize = this.tilesize;\r\n        var mapWidth = this.width;\r\n        var mapHeight = this.height;\r\n        \r\n        //  Horizontal\r\n        if (vx)\r\n        {\r\n            var pxOffsetX = (vx > 0 ? width : 0);\r\n            var tileOffsetX = (vx < 0 ? tilesize : 0);\r\n            \r\n            var firstTileY = Math.max(Math.floor(y / tilesize), 0);\r\n            var lastTileY = Math.min(Math.ceil((y + height) / tilesize), mapHeight);\r\n            \r\n            tileX = Math.floor((res.pos.x + pxOffsetX) / tilesize);\r\n\r\n            var prevTileX = Math.floor((x + pxOffsetX) / tilesize);\r\n\r\n            if (step > 0 || tileX === prevTileX || prevTileX < 0 || prevTileX >= mapWidth)\r\n            {\r\n                prevTileX = -1;\r\n            }\r\n           \r\n            if (tileX >= 0 && tileX < mapWidth)\r\n            {\r\n                for (tileY = firstTileY; tileY < lastTileY; tileY++)\r\n                {\r\n                    if (prevTileX !== -1)\r\n                    {\r\n                        t = this.data[tileY][prevTileX];\r\n\r\n                        if (t > 1 && t <= this.lastSlope && this.checkDef(res, t, x, y, rvx, rvy, width, height, prevTileX, tileY))\r\n                        {\r\n                            break;\r\n                        }\r\n                    }\r\n                    \r\n                    t = this.data[tileY][tileX];\r\n\r\n                    if (t === 1 || t > this.lastSlope || (t > 1 && this.checkDef(res, t, x, y, rvx, rvy, width, height, tileX, tileY)))\r\n                    {\r\n                        if (t > 1 && t <= this.lastSlope && res.collision.slope)\r\n                        {\r\n                            break;\r\n                        }\r\n                        \r\n                        res.collision.x = true;\r\n                        res.tile.x = t;\r\n                        res.pos.x = (tileX * tilesize) - pxOffsetX + tileOffsetX;\r\n                        x = res.pos.x;\r\n                        rvx = 0;\r\n\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        \r\n        //  Vertical\r\n        if (vy)\r\n        {\r\n            var pxOffsetY = (vy > 0 ? height : 0);\r\n            var tileOffsetY = (vy < 0 ? tilesize : 0);\r\n            \r\n            var firstTileX = Math.max(Math.floor(res.pos.x / tilesize), 0);\r\n            var lastTileX = Math.min(Math.ceil((res.pos.x + width) / tilesize), mapWidth);\r\n            \r\n            tileY = Math.floor((res.pos.y + pxOffsetY) / tilesize);\r\n            \r\n            var prevTileY = Math.floor((y + pxOffsetY) / tilesize);\r\n\r\n            if (step > 0 || tileY === prevTileY || prevTileY < 0 || prevTileY >= mapHeight)\r\n            {\r\n                prevTileY = -1;\r\n            }\r\n            \r\n            if (tileY >= 0 && tileY < mapHeight)\r\n            {\r\n                for (tileX = firstTileX; tileX < lastTileX; tileX++)\r\n                {\r\n                    if (prevTileY !== -1)\r\n                    {\r\n                        t = this.data[prevTileY][tileX];\r\n\r\n                        if (t > 1 && t <= this.lastSlope && this.checkDef(res, t, x, y, rvx, rvy, width, height, tileX, prevTileY))\r\n                        {\r\n                            break;\r\n                        }\r\n                    }\r\n                    \r\n                    t = this.data[tileY][tileX];\r\n\r\n                    if (t === 1 || t > this.lastSlope || (t > 1 && this.checkDef(res, t, x, y, rvx, rvy, width, height, tileX, tileY)))\r\n                    {\r\n                        if (t > 1 && t <= this.lastSlope && res.collision.slope)\r\n                        {\r\n                            break;\r\n                        }\r\n                        \r\n                        res.collision.y = true;\r\n                        res.tile.y = t;\r\n                        res.pos.y = tileY * tilesize - pxOffsetY + tileOffsetY;\r\n\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    },\r\n    \r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.CollisionMap#checkDef\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} res - [description]\r\n     * @param {number} t - [description]\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} vx - [description]\r\n     * @param {number} vy - [description]\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     * @param {number} tileX - [description]\r\n     * @param {number} tileY - [description]\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    checkDef: function (res, t, x, y, vx, vy, width, height, tileX, tileY)\r\n    {\r\n        var def = this.tiledef[t];\r\n\r\n        if (!def)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var tilesize = this.tilesize;\r\n        \r\n        var lx = (tileX + def[0]) * tilesize;\r\n        var ly = (tileY + def[1]) * tilesize;\r\n        var lvx = (def[2] - def[0]) * tilesize;\r\n        var lvy = (def[3] - def[1]) * tilesize;\r\n        var solid = def[4];\r\n        \r\n        var tx = x + vx + (lvy < 0 ? width : 0) - lx;\r\n        var ty = y + vy + (lvx > 0 ? height : 0) - ly;\r\n        \r\n        if (lvx * ty - lvy * tx > 0)\r\n        {\r\n            if (vx * -lvy + vy * lvx < 0)\r\n            {\r\n                return solid;\r\n            }\r\n            \r\n            var length = Math.sqrt(lvx * lvx + lvy * lvy);\r\n            var nx = lvy / length;\r\n            var ny = -lvx / length;\r\n            \r\n            var proj = tx * nx + ty * ny;\r\n            var px = nx * proj;\r\n            var py = ny * proj;\r\n            \r\n            if (px * px + py * py >= vx * vx + vy * vy)\r\n            {\r\n                return solid || (lvx * (ty - vy) - lvy * (tx - vx) < 0.5);\r\n            }\r\n            \r\n            res.pos.x = x + vx - px;\r\n            res.pos.y = y + vy - py;\r\n            res.collision.slope = { x: lvx, y: lvy, nx: nx, ny: ny };\r\n\r\n            return true;\r\n        }\r\n        \r\n        return false;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = CollisionMap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9Db2xsaXNpb25NYXAuanM/ZTYzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyw4RUFBZTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUNBQW1DO0FBQzNELGtCQUFrQix1QkFBdUI7QUFDekMsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLG1CQUFtQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvQ29sbGlzaW9uTWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGVmYXVsdERlZnMgPSByZXF1aXJlKCcuL0RlZmF1bHREZWZzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBDb2xsaXNpb25NYXBcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkltcGFjdFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVzaXplPTMyXSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHthcnJheX0gW2RhdGFdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIENvbGxpc2lvbk1hcCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDb2xsaXNpb25NYXAgKHRpbGVzaXplLCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aWxlc2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHRpbGVzaXplID0gMzI7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbGxpc2lvbk1hcCN0aWxlc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDMyXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlc2l6ZSA9IHRpbGVzaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0gKEFycmF5LmlzQXJyYXkoZGF0YSkpID8gZGF0YSA6IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gKEFycmF5LmlzQXJyYXkoZGF0YSkpID8gZGF0YVswXS5sZW5ndGggOiAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAoQXJyYXkuaXNBcnJheShkYXRhKSkgPyBkYXRhLmxlbmd0aCA6IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db2xsaXNpb25NYXAjbGFzdFNsb3BlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgNTVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxhc3RTbG9wZSA9IDU1O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwI3RpbGVkZWZcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZWRlZiA9IERlZmF1bHREZWZzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db2xsaXNpb25NYXAjdHJhY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdnggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdnkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqZWN0V2lkdGggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqZWN0SGVpZ2h0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgdHJhY2U6IGZ1bmN0aW9uICh4LCB5LCB2eCwgdnksIG9iamVjdFdpZHRoLCBvYmplY3RIZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gU2V0IHVwIHRoZSB0cmFjZS1yZXN1bHRcclxuICAgICAgICB2YXIgcmVzID0ge1xyXG4gICAgICAgICAgICBjb2xsaXNpb246IHsgeDogZmFsc2UsIHk6IGZhbHNlLCBzbG9wZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgcG9zOiB7IHg6IHggKyB2eCwgeTogeSArIHZ5IH0sXHJcbiAgICAgICAgICAgIHRpbGU6IHsgeDogMCwgeTogMCB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgc3RlcHMgPSBNYXRoLmNlaWwoTWF0aC5tYXgoTWF0aC5hYnModngpLCBNYXRoLmFicyh2eSkpIC8gdGhpcy50aWxlc2l6ZSk7XHJcblxyXG4gICAgICAgIGlmIChzdGVwcyA+IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgc3ggPSB2eCAvIHN0ZXBzO1xyXG4gICAgICAgICAgICB2YXIgc3kgPSB2eSAvIHN0ZXBzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwcyAmJiAoc3ggfHwgc3kpOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcChyZXMsIHgsIHksIHN4LCBzeSwgb2JqZWN0V2lkdGgsIG9iamVjdEhlaWdodCwgdngsIHZ5LCBpKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgeCA9IHJlcy5wb3MueDtcclxuICAgICAgICAgICAgICAgIHkgPSByZXMucG9zLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2xsaXNpb24ueClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdnggPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXMuY29sbGlzaW9uLnkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3kgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZ5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvbGxpc2lvbi5zbG9wZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXAocmVzLCB4LCB5LCB2eCwgdnksIG9iamVjdFdpZHRoLCBvYmplY3RIZWlnaHQsIHZ4LCB2eSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbGxpc2lvbk1hcCNzdGVwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gcmVzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2eCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2eSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcnZ4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJ2eSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBzdGVwOiBmdW5jdGlvbiAocmVzLCB4LCB5LCB2eCwgdnksIHdpZHRoLCBoZWlnaHQsIHJ2eCwgcnZ5LCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ID0gMDtcclxuICAgICAgICB2YXIgdGlsZVg7XHJcbiAgICAgICAgdmFyIHRpbGVZO1xyXG4gICAgICAgIHZhciB0aWxlc2l6ZSA9IHRoaXMudGlsZXNpemU7XHJcbiAgICAgICAgdmFyIG1hcFdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgbWFwSGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gIEhvcml6b250YWxcclxuICAgICAgICBpZiAodngpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcHhPZmZzZXRYID0gKHZ4ID4gMCA/IHdpZHRoIDogMCk7XHJcbiAgICAgICAgICAgIHZhciB0aWxlT2Zmc2V0WCA9ICh2eCA8IDAgPyB0aWxlc2l6ZSA6IDApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGZpcnN0VGlsZVkgPSBNYXRoLm1heChNYXRoLmZsb29yKHkgLyB0aWxlc2l6ZSksIDApO1xyXG4gICAgICAgICAgICB2YXIgbGFzdFRpbGVZID0gTWF0aC5taW4oTWF0aC5jZWlsKCh5ICsgaGVpZ2h0KSAvIHRpbGVzaXplKSwgbWFwSGVpZ2h0KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRpbGVYID0gTWF0aC5mbG9vcigocmVzLnBvcy54ICsgcHhPZmZzZXRYKSAvIHRpbGVzaXplKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcmV2VGlsZVggPSBNYXRoLmZsb29yKCh4ICsgcHhPZmZzZXRYKSAvIHRpbGVzaXplKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGVwID4gMCB8fCB0aWxlWCA9PT0gcHJldlRpbGVYIHx8IHByZXZUaWxlWCA8IDAgfHwgcHJldlRpbGVYID49IG1hcFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcmV2VGlsZVggPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGlsZVggPj0gMCAmJiB0aWxlWCA8IG1hcFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHRpbGVZID0gZmlyc3RUaWxlWTsgdGlsZVkgPCBsYXN0VGlsZVk7IHRpbGVZKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUaWxlWCAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gdGhpcy5kYXRhW3RpbGVZXVtwcmV2VGlsZVhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiAxICYmIHQgPD0gdGhpcy5sYXN0U2xvcGUgJiYgdGhpcy5jaGVja0RlZihyZXMsIHQsIHgsIHksIHJ2eCwgcnZ5LCB3aWR0aCwgaGVpZ2h0LCBwcmV2VGlsZVgsIHRpbGVZKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdCA9IHRoaXMuZGF0YVt0aWxlWV1bdGlsZVhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gMSB8fCB0ID4gdGhpcy5sYXN0U2xvcGUgfHwgKHQgPiAxICYmIHRoaXMuY2hlY2tEZWYocmVzLCB0LCB4LCB5LCBydngsIHJ2eSwgd2lkdGgsIGhlaWdodCwgdGlsZVgsIHRpbGVZKSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IDEgJiYgdCA8PSB0aGlzLmxhc3RTbG9wZSAmJiByZXMuY29sbGlzaW9uLnNsb3BlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmNvbGxpc2lvbi54ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnRpbGUueCA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wb3MueCA9ICh0aWxlWCAqIHRpbGVzaXplKSAtIHB4T2Zmc2V0WCArIHRpbGVPZmZzZXRYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0gcmVzLnBvcy54O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydnggPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vICBWZXJ0aWNhbFxyXG4gICAgICAgIGlmICh2eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweE9mZnNldFkgPSAodnkgPiAwID8gaGVpZ2h0IDogMCk7XHJcbiAgICAgICAgICAgIHZhciB0aWxlT2Zmc2V0WSA9ICh2eSA8IDAgPyB0aWxlc2l6ZSA6IDApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGZpcnN0VGlsZVggPSBNYXRoLm1heChNYXRoLmZsb29yKHJlcy5wb3MueCAvIHRpbGVzaXplKSwgMCk7XHJcbiAgICAgICAgICAgIHZhciBsYXN0VGlsZVggPSBNYXRoLm1pbihNYXRoLmNlaWwoKHJlcy5wb3MueCArIHdpZHRoKSAvIHRpbGVzaXplKSwgbWFwV2lkdGgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGlsZVkgPSBNYXRoLmZsb29yKChyZXMucG9zLnkgKyBweE9mZnNldFkpIC8gdGlsZXNpemUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHByZXZUaWxlWSA9IE1hdGguZmxvb3IoKHkgKyBweE9mZnNldFkpIC8gdGlsZXNpemUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0ZXAgPiAwIHx8IHRpbGVZID09PSBwcmV2VGlsZVkgfHwgcHJldlRpbGVZIDwgMCB8fCBwcmV2VGlsZVkgPj0gbWFwSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcmV2VGlsZVkgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRpbGVZID49IDAgJiYgdGlsZVkgPCBtYXBIZWlnaHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAodGlsZVggPSBmaXJzdFRpbGVYOyB0aWxlWCA8IGxhc3RUaWxlWDsgdGlsZVgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldlRpbGVZICE9PSAtMSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0aGlzLmRhdGFbcHJldlRpbGVZXVt0aWxlWF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IDEgJiYgdCA8PSB0aGlzLmxhc3RTbG9wZSAmJiB0aGlzLmNoZWNrRGVmKHJlcywgdCwgeCwgeSwgcnZ4LCBydnksIHdpZHRoLCBoZWlnaHQsIHRpbGVYLCBwcmV2VGlsZVkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0ID0gdGhpcy5kYXRhW3RpbGVZXVt0aWxlWF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ID09PSAxIHx8IHQgPiB0aGlzLmxhc3RTbG9wZSB8fCAodCA+IDEgJiYgdGhpcy5jaGVja0RlZihyZXMsIHQsIHgsIHksIHJ2eCwgcnZ5LCB3aWR0aCwgaGVpZ2h0LCB0aWxlWCwgdGlsZVkpKSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gMSAmJiB0IDw9IHRoaXMubGFzdFNsb3BlICYmIHJlcy5jb2xsaXNpb24uc2xvcGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuY29sbGlzaW9uLnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMudGlsZS55ID0gdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnBvcy55ID0gdGlsZVkgKiB0aWxlc2l6ZSAtIHB4T2Zmc2V0WSArIHRpbGVPZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwI2NoZWNrRGVmXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gcmVzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZ4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZ5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWxlWCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWxlWSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRGVmOiBmdW5jdGlvbiAocmVzLCB0LCB4LCB5LCB2eCwgdnksIHdpZHRoLCBoZWlnaHQsIHRpbGVYLCB0aWxlWSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZGVmID0gdGhpcy50aWxlZGVmW3RdO1xyXG5cclxuICAgICAgICBpZiAoIWRlZilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aWxlc2l6ZSA9IHRoaXMudGlsZXNpemU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGx4ID0gKHRpbGVYICsgZGVmWzBdKSAqIHRpbGVzaXplO1xyXG4gICAgICAgIHZhciBseSA9ICh0aWxlWSArIGRlZlsxXSkgKiB0aWxlc2l6ZTtcclxuICAgICAgICB2YXIgbHZ4ID0gKGRlZlsyXSAtIGRlZlswXSkgKiB0aWxlc2l6ZTtcclxuICAgICAgICB2YXIgbHZ5ID0gKGRlZlszXSAtIGRlZlsxXSkgKiB0aWxlc2l6ZTtcclxuICAgICAgICB2YXIgc29saWQgPSBkZWZbNF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHR4ID0geCArIHZ4ICsgKGx2eSA8IDAgPyB3aWR0aCA6IDApIC0gbHg7XHJcbiAgICAgICAgdmFyIHR5ID0geSArIHZ5ICsgKGx2eCA+IDAgPyBoZWlnaHQgOiAwKSAtIGx5O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChsdnggKiB0eSAtIGx2eSAqIHR4ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh2eCAqIC1sdnkgKyB2eSAqIGx2eCA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb2xpZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGguc3FydChsdnggKiBsdnggKyBsdnkgKiBsdnkpO1xyXG4gICAgICAgICAgICB2YXIgbnggPSBsdnkgLyBsZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBueSA9IC1sdnggLyBsZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcHJvaiA9IHR4ICogbnggKyB0eSAqIG55O1xyXG4gICAgICAgICAgICB2YXIgcHggPSBueCAqIHByb2o7XHJcbiAgICAgICAgICAgIHZhciBweSA9IG55ICogcHJvajtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChweCAqIHB4ICsgcHkgKiBweSA+PSB2eCAqIHZ4ICsgdnkgKiB2eSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvbGlkIHx8IChsdnggKiAodHkgLSB2eSkgLSBsdnkgKiAodHggLSB2eCkgPCAwLjUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMucG9zLnggPSB4ICsgdnggLSBweDtcclxuICAgICAgICAgICAgcmVzLnBvcy55ID0geSArIHZ5IC0gcHk7XHJcbiAgICAgICAgICAgIHJlcy5jb2xsaXNpb24uc2xvcGUgPSB7IHg6IGx2eCwgeTogbHZ5LCBueDogbngsIG55OiBueSB9O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb2xsaXNpb25NYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/CollisionMap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/DefaultDefs.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/DefaultDefs.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar H = 0.5;\r\nvar N = 1 / 3;\r\nvar M = 2 / 3;\r\n\r\n//  Tile ID to Slope defs.\r\n//  First 4 elements = line data, final = solid or non-solid behind the line\r\n    \r\nmodule.exports = {\r\n\r\n    2: [ 0, 1, 1, 0, true ],\r\n    3: [ 0, 1, 1, H, true ],\r\n    4: [ 0, H, 1, 0, true ],\r\n    5: [ 0, 1, 1, M, true ],\r\n    6: [ 0, M, 1, N, true ],\r\n    7: [ 0, N, 1, 0, true ],\r\n    8: [ H, 1, 0, 0, true ],\r\n    9: [ 1, 0, H, 1, true ],\r\n    10: [ H, 1, 1, 0, true ],\r\n    11: [ 0, 0, H, 1, true ],\r\n    12: [ 0, 0, 1, 0, false ],\r\n    13: [ 1, 1, 0, 0, true ],\r\n    14: [ 1, H, 0, 0, true ],\r\n    15: [ 1, 1, 0, H, true ],\r\n    16: [ 1, N, 0, 0, true ],\r\n    17: [ 1, M, 0, N, true ],\r\n    18: [ 1, 1, 0, M, true ],\r\n    19: [ 1, 1, H, 0, true ],\r\n    20: [ H, 0, 0, 1, true ],\r\n    21: [ 0, 1, H, 0, true ],\r\n    22: [ H, 0, 1, 1, true ],\r\n    23: [ 1, 1, 0, 1, false ],\r\n    24: [ 0, 0, 1, 1, true ],\r\n    25: [ 0, 0, 1, H, true ],\r\n    26: [ 0, H, 1, 1, true ],\r\n    27: [ 0, 0, 1, N, true ],\r\n    28: [ 0, N, 1, M, true ],\r\n    29: [ 0, M, 1, 1, true ],\r\n    30: [ N, 1, 0, 0, true ],\r\n    31: [ 1, 0, M, 1, true ],\r\n    32: [ M, 1, 1, 0, true ],\r\n    33: [ 0, 0, N, 1, true ],\r\n    34: [ 1, 0, 1, 1, false ],\r\n    35: [ 1, 0, 0, 1, true ],\r\n    36: [ 1, H, 0, 1, true ],\r\n    37: [ 1, 0, 0, H, true ],\r\n    38: [ 1, M, 0, 1, true ],\r\n    39: [ 1, N, 0, M, true ],\r\n    40: [ 1, 0, 0, N, true ],\r\n    41: [ M, 1, N, 0, true ],\r\n    42: [ M, 0, N, 1, true ],\r\n    43: [ N, 1, M, 0, true ],\r\n    44: [ N, 0, M, 1, true ],\r\n    45: [ 0, 1, 0, 0, false ],\r\n    52: [ 1, 1, M, 0, true ],\r\n    53: [ N, 0, 0, 1, true ],\r\n    54: [ 0, 1, N, 0, true ],\r\n    55: [ M, 0, 1, 1, true ]\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9EZWZhdWx0RGVmcy5qcz82YWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9EZWZhdWx0RGVmcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEggPSAwLjU7XHJcbnZhciBOID0gMSAvIDM7XHJcbnZhciBNID0gMiAvIDM7XHJcblxyXG4vLyAgVGlsZSBJRCB0byBTbG9wZSBkZWZzLlxyXG4vLyAgRmlyc3QgNCBlbGVtZW50cyA9IGxpbmUgZGF0YSwgZmluYWwgPSBzb2xpZCBvciBub24tc29saWQgYmVoaW5kIHRoZSBsaW5lXHJcbiAgICBcclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgMjogWyAwLCAxLCAxLCAwLCB0cnVlIF0sXHJcbiAgICAzOiBbIDAsIDEsIDEsIEgsIHRydWUgXSxcclxuICAgIDQ6IFsgMCwgSCwgMSwgMCwgdHJ1ZSBdLFxyXG4gICAgNTogWyAwLCAxLCAxLCBNLCB0cnVlIF0sXHJcbiAgICA2OiBbIDAsIE0sIDEsIE4sIHRydWUgXSxcclxuICAgIDc6IFsgMCwgTiwgMSwgMCwgdHJ1ZSBdLFxyXG4gICAgODogWyBILCAxLCAwLCAwLCB0cnVlIF0sXHJcbiAgICA5OiBbIDEsIDAsIEgsIDEsIHRydWUgXSxcclxuICAgIDEwOiBbIEgsIDEsIDEsIDAsIHRydWUgXSxcclxuICAgIDExOiBbIDAsIDAsIEgsIDEsIHRydWUgXSxcclxuICAgIDEyOiBbIDAsIDAsIDEsIDAsIGZhbHNlIF0sXHJcbiAgICAxMzogWyAxLCAxLCAwLCAwLCB0cnVlIF0sXHJcbiAgICAxNDogWyAxLCBILCAwLCAwLCB0cnVlIF0sXHJcbiAgICAxNTogWyAxLCAxLCAwLCBILCB0cnVlIF0sXHJcbiAgICAxNjogWyAxLCBOLCAwLCAwLCB0cnVlIF0sXHJcbiAgICAxNzogWyAxLCBNLCAwLCBOLCB0cnVlIF0sXHJcbiAgICAxODogWyAxLCAxLCAwLCBNLCB0cnVlIF0sXHJcbiAgICAxOTogWyAxLCAxLCBILCAwLCB0cnVlIF0sXHJcbiAgICAyMDogWyBILCAwLCAwLCAxLCB0cnVlIF0sXHJcbiAgICAyMTogWyAwLCAxLCBILCAwLCB0cnVlIF0sXHJcbiAgICAyMjogWyBILCAwLCAxLCAxLCB0cnVlIF0sXHJcbiAgICAyMzogWyAxLCAxLCAwLCAxLCBmYWxzZSBdLFxyXG4gICAgMjQ6IFsgMCwgMCwgMSwgMSwgdHJ1ZSBdLFxyXG4gICAgMjU6IFsgMCwgMCwgMSwgSCwgdHJ1ZSBdLFxyXG4gICAgMjY6IFsgMCwgSCwgMSwgMSwgdHJ1ZSBdLFxyXG4gICAgMjc6IFsgMCwgMCwgMSwgTiwgdHJ1ZSBdLFxyXG4gICAgMjg6IFsgMCwgTiwgMSwgTSwgdHJ1ZSBdLFxyXG4gICAgMjk6IFsgMCwgTSwgMSwgMSwgdHJ1ZSBdLFxyXG4gICAgMzA6IFsgTiwgMSwgMCwgMCwgdHJ1ZSBdLFxyXG4gICAgMzE6IFsgMSwgMCwgTSwgMSwgdHJ1ZSBdLFxyXG4gICAgMzI6IFsgTSwgMSwgMSwgMCwgdHJ1ZSBdLFxyXG4gICAgMzM6IFsgMCwgMCwgTiwgMSwgdHJ1ZSBdLFxyXG4gICAgMzQ6IFsgMSwgMCwgMSwgMSwgZmFsc2UgXSxcclxuICAgIDM1OiBbIDEsIDAsIDAsIDEsIHRydWUgXSxcclxuICAgIDM2OiBbIDEsIEgsIDAsIDEsIHRydWUgXSxcclxuICAgIDM3OiBbIDEsIDAsIDAsIEgsIHRydWUgXSxcclxuICAgIDM4OiBbIDEsIE0sIDAsIDEsIHRydWUgXSxcclxuICAgIDM5OiBbIDEsIE4sIDAsIE0sIHRydWUgXSxcclxuICAgIDQwOiBbIDEsIDAsIDAsIE4sIHRydWUgXSxcclxuICAgIDQxOiBbIE0sIDEsIE4sIDAsIHRydWUgXSxcclxuICAgIDQyOiBbIE0sIDAsIE4sIDEsIHRydWUgXSxcclxuICAgIDQzOiBbIE4sIDEsIE0sIDAsIHRydWUgXSxcclxuICAgIDQ0OiBbIE4sIDAsIE0sIDEsIHRydWUgXSxcclxuICAgIDQ1OiBbIDAsIDEsIDAsIDAsIGZhbHNlIF0sXHJcbiAgICA1MjogWyAxLCAxLCBNLCAwLCB0cnVlIF0sXHJcbiAgICA1MzogWyBOLCAwLCAwLCAxLCB0cnVlIF0sXHJcbiAgICA1NDogWyAwLCAxLCBOLCAwLCB0cnVlIF0sXHJcbiAgICA1NTogWyBNLCAwLCAxLCAxLCB0cnVlIF1cclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/DefaultDefs.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/Factory.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/Factory.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ImpactBody = __webpack_require__(/*! ./ImpactBody */ \"./node_modules/phaser/src/physics/impact/ImpactBody.js\");\r\nvar ImpactImage = __webpack_require__(/*! ./ImpactImage */ \"./node_modules/phaser/src/physics/impact/ImpactImage.js\");\r\nvar ImpactSprite = __webpack_require__(/*! ./ImpactSprite */ \"./node_modules/phaser/src/physics/impact/ImpactSprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Impact Physics Factory allows you to easily create Impact Physics enabled Game Objects.\r\n * Objects that are created by this Factory are automatically added to the physics world.\r\n *\r\n * @class Factory\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - A reference to the Impact Physics world.\r\n */\r\nvar Factory = new Class({\r\n\r\n    initialize:\r\n\r\n    function Factory (world)\r\n    {\r\n        /**\r\n         * A reference to the Impact Physics world.\r\n         *\r\n         * @name Phaser.Physics.Impact.Factory#world\r\n         * @type {Phaser.Physics.Impact.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems this Impact Physics instance belongs to.\r\n         *\r\n         * @name Phaser.Physics.Impact.Factory#sys\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.sys = world.scene.sys;\r\n    },\r\n\r\n    /**\r\n     * Creates a new ImpactBody object and adds it to the physics simulation.\r\n     *\r\n     * @method Phaser.Physics.Impact.Factory#body\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of the body in the physics world.\r\n     * @param {number} y - The vertical position of the body in the physics world.\r\n     * @param {number} width - The width of the body.\r\n     * @param {number} height - The height of the body.\r\n     *\r\n     * @return {Phaser.Physics.Impact.ImpactBody} The ImpactBody object that was created.\r\n     */\r\n    body: function (x, y, width, height)\r\n    {\r\n        return new ImpactBody(this.world, x, y, width, height);\r\n    },\r\n\r\n    /**\r\n     * Adds an Impact Physics Body to the given Game Object.\r\n     *\r\n     * @method Phaser.Physics.Impact.Factory#existing\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to receive the physics body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object.\r\n     */\r\n    existing: function (gameObject)\r\n    {\r\n        var x = gameObject.x - gameObject.frame.centerX;\r\n        var y = gameObject.y - gameObject.frame.centerY;\r\n        var w = gameObject.width;\r\n        var h = gameObject.height;\r\n\r\n        gameObject.body = this.world.create(x, y, w, h);\r\n\r\n        gameObject.body.parent = gameObject;\r\n        gameObject.body.gameObject = gameObject;\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Creates a new ImpactImage object and adds it to the physics world.\r\n     *\r\n     * @method Phaser.Physics.Impact.Factory#image\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Impact.ImpactImage} The ImpactImage object that was created.\r\n     */\r\n    image: function (x, y, key, frame)\r\n    {\r\n        var image = new ImpactImage(this.world, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(image);\r\n\r\n        return image;\r\n    },\r\n\r\n    /**\r\n     * Creates a new ImpactSprite object and adds it to the physics world.\r\n     *\r\n     * @method Phaser.Physics.Impact.Factory#sprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n     *\r\n     * @return {Phaser.Physics.Impact.ImpactSprite} The ImpactSprite object that was created.\r\n     */\r\n    sprite: function (x, y, key, frame)\r\n    {\r\n        var sprite = new ImpactSprite(this.world, x, y, key, frame);\r\n\r\n        this.sys.displayList.add(sprite);\r\n        this.sys.updateList.add(sprite);\r\n\r\n        return sprite;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Factory.\r\n     *\r\n     * @method Phaser.Physics.Impact.Factory#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world = null;\r\n        this.sys = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Factory;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9GYWN0b3J5LmpzPzMwNjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsNEVBQWM7QUFDdkMsa0JBQWtCLG1CQUFPLENBQUMsOEVBQWU7QUFDekMsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixpQ0FBaUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9GYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgSW1wYWN0Qm9keSA9IHJlcXVpcmUoJy4vSW1wYWN0Qm9keScpO1xyXG52YXIgSW1wYWN0SW1hZ2UgPSByZXF1aXJlKCcuL0ltcGFjdEltYWdlJyk7XHJcbnZhciBJbXBhY3RTcHJpdGUgPSByZXF1aXJlKCcuL0ltcGFjdFNwcml0ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEltcGFjdCBQaHlzaWNzIEZhY3RvcnkgYWxsb3dzIHlvdSB0byBlYXNpbHkgY3JlYXRlIEltcGFjdCBQaHlzaWNzIGVuYWJsZWQgR2FtZSBPYmplY3RzLlxyXG4gKiBPYmplY3RzIHRoYXQgYXJlIGNyZWF0ZWQgYnkgdGhpcyBGYWN0b3J5IGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBwaHlzaWNzIHdvcmxkLlxyXG4gKlxyXG4gKiBAY2xhc3MgRmFjdG9yeVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuSW1wYWN0XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IHdvcmxkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEltcGFjdCBQaHlzaWNzIHdvcmxkLlxyXG4gKi9cclxudmFyIEZhY3RvcnkgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRmFjdG9yeSAod29ybGQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEltcGFjdCBQaHlzaWNzIHdvcmxkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkZhY3Rvcnkjd29ybGRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud29ybGQgPSB3b3JsZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlN5c3RlbXMgdGhpcyBJbXBhY3QgUGh5c2ljcyBpbnN0YW5jZSBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkZhY3Rvcnkjc3lzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU3lzdGVtc31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN5cyA9IHdvcmxkLnNjZW5lLnN5cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEltcGFjdEJvZHkgb2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBwaHlzaWNzIHNpbXVsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuRmFjdG9yeSNib2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBib2R5IGluIHRoZSBwaHlzaWNzIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGJvZHkgaW4gdGhlIHBoeXNpY3Mgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0Qm9keX0gVGhlIEltcGFjdEJvZHkgb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGJvZHk6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW1wYWN0Qm9keSh0aGlzLndvcmxkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIEltcGFjdCBQaHlzaWNzIEJvZHkgdG8gdGhlIGdpdmVuIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkZhY3RvcnkjZXhpc3RpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gcmVjZWl2ZSB0aGUgcGh5c2ljcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0aW5nOiBmdW5jdGlvbiAoZ2FtZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IGdhbWVPYmplY3QueCAtIGdhbWVPYmplY3QuZnJhbWUuY2VudGVyWDtcclxuICAgICAgICB2YXIgeSA9IGdhbWVPYmplY3QueSAtIGdhbWVPYmplY3QuZnJhbWUuY2VudGVyWTtcclxuICAgICAgICB2YXIgdyA9IGdhbWVPYmplY3Qud2lkdGg7XHJcbiAgICAgICAgdmFyIGggPSBnYW1lT2JqZWN0LmhlaWdodDtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5ib2R5ID0gdGhpcy53b3JsZC5jcmVhdGUoeCwgeSwgdywgaCk7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuYm9keS5wYXJlbnQgPSBnYW1lT2JqZWN0O1xyXG4gICAgICAgIGdhbWVPYmplY3QuYm9keS5nYW1lT2JqZWN0ID0gZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBJbXBhY3RJbWFnZSBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIHBoeXNpY3Mgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuRmFjdG9yeSNpbWFnZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEltYWdlfSBUaGUgSW1wYWN0SW1hZ2Ugb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGltYWdlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1wYWN0SW1hZ2UodGhpcy53b3JsZCwgeCwgeSwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzLmRpc3BsYXlMaXN0LmFkZChpbWFnZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpbWFnZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEltcGFjdFNwcml0ZSBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIHBoeXNpY3Mgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuRmFjdG9yeSNzcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RTcHJpdGV9IFRoZSBJbXBhY3RTcHJpdGUgb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHNwcml0ZTogZnVuY3Rpb24gKHgsIHksIGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNwcml0ZSA9IG5ldyBJbXBhY3RTcHJpdGUodGhpcy53b3JsZCwgeCwgeSwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzLmRpc3BsYXlMaXN0LmFkZChzcHJpdGUpO1xyXG4gICAgICAgIHRoaXMuc3lzLnVwZGF0ZUxpc3QuYWRkKHNwcml0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBGYWN0b3J5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkZhY3RvcnkjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy53b3JsZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZhY3Rvcnk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/Factory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/GetVelocity.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/GetVelocity.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Physics.Impact.GetVelocity\r\n * @since 3.0.0\r\n *\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n * @param {number} vel - [description]\r\n * @param {number} accel - [description]\r\n * @param {number} friction - [description]\r\n * @param {number} max - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\nvar GetVelocity = function (delta, vel, accel, friction, max)\r\n{\r\n    if (accel)\r\n    {\r\n        return Clamp(vel + accel * delta, -max, max);\r\n    }\r\n    else if (friction)\r\n    {\r\n        var frictionDelta = friction * delta;\r\n        \r\n        if (vel - frictionDelta > 0)\r\n        {\r\n            return vel - frictionDelta;\r\n        }\r\n        else if (vel + frictionDelta < 0)\r\n        {\r\n            return vel + frictionDelta;\r\n        }\r\n        else\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    return Clamp(vel, -max, max);\r\n};\r\n\r\nmodule.exports = GetVelocity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9HZXRWZWxvY2l0eS5qcz85NGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsaUVBQWtCOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9HZXRWZWxvY2l0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkltcGFjdC5HZXRWZWxvY2l0eVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZlbCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IGFjY2VsIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZnJpY3Rpb24gLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEdldFZlbG9jaXR5ID0gZnVuY3Rpb24gKGRlbHRhLCB2ZWwsIGFjY2VsLCBmcmljdGlvbiwgbWF4KVxyXG57XHJcbiAgICBpZiAoYWNjZWwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIENsYW1wKHZlbCArIGFjY2VsICogZGVsdGEsIC1tYXgsIG1heCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmcmljdGlvbilcclxuICAgIHtcclxuICAgICAgICB2YXIgZnJpY3Rpb25EZWx0YSA9IGZyaWN0aW9uICogZGVsdGE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHZlbCAtIGZyaWN0aW9uRGVsdGEgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZlbCAtIGZyaWN0aW9uRGVsdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZlbCArIGZyaWN0aW9uRGVsdGEgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZlbCArIGZyaWN0aW9uRGVsdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gQ2xhbXAodmVsLCAtbWF4LCBtYXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRWZWxvY2l0eTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/GetVelocity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/ImpactBody.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/ImpactBody.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/impact/components/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class ImpactBody\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Impact.Components.Acceleration\r\n * @extends Phaser.Physics.Impact.Components.BodyScale\r\n * @extends Phaser.Physics.Impact.Components.BodyType\r\n * @extends Phaser.Physics.Impact.Components.Bounce\r\n * @extends Phaser.Physics.Impact.Components.CheckAgainst\r\n * @extends Phaser.Physics.Impact.Components.Collides\r\n * @extends Phaser.Physics.Impact.Components.Debug\r\n * @extends Phaser.Physics.Impact.Components.Friction\r\n * @extends Phaser.Physics.Impact.Components.Gravity\r\n * @extends Phaser.Physics.Impact.Components.Offset\r\n * @extends Phaser.Physics.Impact.Components.SetGameObject\r\n * @extends Phaser.Physics.Impact.Components.Velocity\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - [description]\r\n * @param {number} x - x - The horizontal position of this physics body in the world.\r\n * @param {number} y - y - The vertical position of this physics body in the world.\r\n * @param {number} width - The width of the physics body in the world.\r\n * @param {number} height - [description]\r\n */\r\nvar ImpactBody = new Class({\r\n\r\n    Mixins: [\r\n        Components.Acceleration,\r\n        Components.BodyScale,\r\n        Components.BodyType,\r\n        Components.Bounce,\r\n        Components.CheckAgainst,\r\n        Components.Collides,\r\n        Components.Debug,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Offset,\r\n        Components.SetGameObject,\r\n        Components.Velocity\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ImpactBody (world, x, y, width, height)\r\n    {\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#body\r\n         * @type {Phaser.Physics.Impact.Body}\r\n         * @since 3.0.0\r\n         */\r\n        this.body = world.create(x, y, width, height);\r\n\r\n        this.body.parent = this;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#size\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = this.body.size;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#offset\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = this.body.offset;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#vel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.vel = this.body.vel;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#accel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.accel = this.body.accel;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#friction\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.friction = this.body.friction;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactBody#maxVel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVel = this.body.maxVel;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ImpactBody;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9JbXBhY3RCb2R5LmpzPzA4MzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsa0ZBQWM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L0ltcGFjdEJvZHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi9jb21wb25lbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBJbXBhY3RCb2R5XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5JbXBhY3RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5BY2NlbGVyYXRpb25cclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVNjYWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvZHlUeXBlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvdW5jZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5DaGVja0FnYWluc3RcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXNcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRGVidWdcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRnJpY3Rpb25cclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuR3Jhdml0eVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5PZmZzZXRcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuU2V0R2FtZU9iamVjdFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gd29ybGQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgcGh5c2ljcyBib2R5IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgcGh5c2ljcyBib2R5IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwaHlzaWNzIGJvZHkgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEltcGFjdEJvZHkgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWNjZWxlcmF0aW9uLFxyXG4gICAgICAgIENvbXBvbmVudHMuQm9keVNjYWxlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQm9keVR5cGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5Cb3VuY2UsXHJcbiAgICAgICAgQ29tcG9uZW50cy5DaGVja0FnYWluc3QsXHJcbiAgICAgICAgQ29tcG9uZW50cy5Db2xsaWRlcyxcclxuICAgICAgICBDb21wb25lbnRzLkRlYnVnLFxyXG4gICAgICAgIENvbXBvbmVudHMuRnJpY3Rpb24sXHJcbiAgICAgICAgQ29tcG9uZW50cy5HcmF2aXR5LFxyXG4gICAgICAgIENvbXBvbmVudHMuT2Zmc2V0LFxyXG4gICAgICAgIENvbXBvbmVudHMuU2V0R2FtZU9iamVjdCxcclxuICAgICAgICBDb21wb25lbnRzLlZlbG9jaXR5XHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSW1wYWN0Qm9keSAod29ybGQsIHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEJvZHkjYm9keVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJvZHkgPSB3b3JsZC5jcmVhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5wYXJlbnQgPSB0aGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0Qm9keSNzaXplXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy5ib2R5LnNpemU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RCb2R5I29mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5ib2R5Lm9mZnNldDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEJvZHkjdmVsXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZWwgPSB0aGlzLmJvZHkudmVsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0Qm9keSNhY2NlbFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWwgPSB0aGlzLmJvZHkuYWNjZWw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RCb2R5I2ZyaWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmljdGlvbiA9IHRoaXMuYm9keS5mcmljdGlvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEJvZHkjbWF4VmVsXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhWZWwgPSB0aGlzLmJvZHkubWF4VmVsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEltcGFjdEJvZHk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/ImpactBody.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/ImpactImage.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/ImpactImage.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/impact/components/index.js\");\r\nvar Image = __webpack_require__(/*! ../../gameobjects/image/Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Impact Physics Image Game Object.\r\n * \r\n * An Image is a light-weight Game Object useful for the display of static images in your game,\r\n * such as logos, backgrounds, scenery or other non-animated elements. Images can have input\r\n * events and physics bodies, or be tweened, tinted or scrolled. The main difference between an\r\n * Image and a Sprite is that you cannot animate an Image as they do not have the Animation component.\r\n *\r\n * @class ImpactImage\r\n * @extends Phaser.GameObjects.Image\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Impact.Components.Acceleration\r\n * @extends Phaser.Physics.Impact.Components.BodyScale\r\n * @extends Phaser.Physics.Impact.Components.BodyType\r\n * @extends Phaser.Physics.Impact.Components.Bounce\r\n * @extends Phaser.Physics.Impact.Components.CheckAgainst\r\n * @extends Phaser.Physics.Impact.Components.Collides\r\n * @extends Phaser.Physics.Impact.Components.Debug\r\n * @extends Phaser.Physics.Impact.Components.Friction\r\n * @extends Phaser.Physics.Impact.Components.Gravity\r\n * @extends Phaser.Physics.Impact.Components.Offset\r\n * @extends Phaser.Physics.Impact.Components.SetGameObject\r\n * @extends Phaser.Physics.Impact.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - The physics world of the Impact physics system.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar ImpactImage = new Class({\r\n\r\n    Extends: Image,\r\n\r\n    Mixins: [\r\n        Components.Acceleration,\r\n        Components.BodyScale,\r\n        Components.BodyType,\r\n        Components.Bounce,\r\n        Components.CheckAgainst,\r\n        Components.Collides,\r\n        Components.Debug,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Offset,\r\n        Components.SetGameObject,\r\n        Components.Velocity\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ImpactImage (world, x, y, texture, frame)\r\n    {\r\n        Image.call(this, world.scene, x, y, texture, frame);\r\n\r\n        /**\r\n         * The Physics Body linked to an ImpactImage.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#body\r\n         * @type {Phaser.Physics.Impact.Body}\r\n         * @since 3.0.0\r\n         */\r\n        this.body = world.create(x - this.frame.centerX, y - this.frame.centerY, this.width, this.height);\r\n\r\n        this.body.parent = this;\r\n        this.body.gameObject = this;\r\n\r\n        /**\r\n         * The size of the physics Body.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#size\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = this.body.size;\r\n\r\n        /**\r\n         * The X and Y offset of the Body from the left and top of the Image.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#offset\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = this.body.offset;\r\n\r\n        /**\r\n         * The velocity, or rate of change the Body's position. Measured in pixels per second.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#vel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.vel = this.body.vel;\r\n\r\n        /**\r\n         * The acceleration is the rate of change of the velocity. Measured in pixels per second squared.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#accel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.accel = this.body.accel;\r\n\r\n        /**\r\n         * Friction between colliding bodies.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#friction\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.friction = this.body.friction;\r\n\r\n        /**\r\n         * The maximum velocity of the body.\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactImage#maxVel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVel = this.body.maxVel;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ImpactImage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9JbXBhY3RJbWFnZS5qcz8zMGJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGtGQUFjO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyRkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L0ltcGFjdEltYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xyXG52YXIgSW1hZ2UgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gSW1wYWN0IFBoeXNpY3MgSW1hZ2UgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBBbiBJbWFnZSBpcyBhIGxpZ2h0LXdlaWdodCBHYW1lIE9iamVjdCB1c2VmdWwgZm9yIHRoZSBkaXNwbGF5IG9mIHN0YXRpYyBpbWFnZXMgaW4geW91ciBnYW1lLFxyXG4gKiBzdWNoIGFzIGxvZ29zLCBiYWNrZ3JvdW5kcywgc2NlbmVyeSBvciBvdGhlciBub24tYW5pbWF0ZWQgZWxlbWVudHMuIEltYWdlcyBjYW4gaGF2ZSBpbnB1dFxyXG4gKiBldmVudHMgYW5kIHBoeXNpY3MgYm9kaWVzLCBvciBiZSB0d2VlbmVkLCB0aW50ZWQgb3Igc2Nyb2xsZWQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhblxyXG4gKiBJbWFnZSBhbmQgYSBTcHJpdGUgaXMgdGhhdCB5b3UgY2Fubm90IGFuaW1hdGUgYW4gSW1hZ2UgYXMgdGhleSBkbyBub3QgaGF2ZSB0aGUgQW5pbWF0aW9uIGNvbXBvbmVudC5cclxuICpcclxuICogQGNsYXNzIEltcGFjdEltYWdlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuSW1wYWN0XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQWNjZWxlcmF0aW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvZHlTY2FsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Cb2R5VHlwZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Cb3VuY2VcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNvbGxpZGVzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkRlYnVnXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkZyaWN0aW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkdyYXZpdHlcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuT2Zmc2V0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLlNldEdhbWVPYmplY3RcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuVmVsb2NpdHlcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXBcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IHdvcmxkIC0gVGhlIHBoeXNpY3Mgd29ybGQgb2YgdGhlIEltcGFjdCBwaHlzaWNzIHN5c3RlbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKi9cclxudmFyIEltcGFjdEltYWdlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBJbWFnZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFjY2VsZXJhdGlvbixcclxuICAgICAgICBDb21wb25lbnRzLkJvZHlTY2FsZSxcclxuICAgICAgICBDb21wb25lbnRzLkJvZHlUeXBlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQm91bmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0LFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29sbGlkZXMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZWJ1ZyxcclxuICAgICAgICBDb21wb25lbnRzLkZyaWN0aW9uLFxyXG4gICAgICAgIENvbXBvbmVudHMuR3Jhdml0eSxcclxuICAgICAgICBDb21wb25lbnRzLk9mZnNldCxcclxuICAgICAgICBDb21wb25lbnRzLlNldEdhbWVPYmplY3QsXHJcbiAgICAgICAgQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEltcGFjdEltYWdlICh3b3JsZCwgeCwgeSwgdGV4dHVyZSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgSW1hZ2UuY2FsbCh0aGlzLCB3b3JsZC5zY2VuZSwgeCwgeSwgdGV4dHVyZSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgUGh5c2ljcyBCb2R5IGxpbmtlZCB0byBhbiBJbXBhY3RJbWFnZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RJbWFnZSNib2R5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm9keSA9IHdvcmxkLmNyZWF0ZSh4IC0gdGhpcy5mcmFtZS5jZW50ZXJYLCB5IC0gdGhpcy5mcmFtZS5jZW50ZXJZLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYm9keS5nYW1lT2JqZWN0ID0gdGhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNpemUgb2YgdGhlIHBoeXNpY3MgQm9keS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RJbWFnZSNzaXplXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy5ib2R5LnNpemU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBYIGFuZCBZIG9mZnNldCBvZiB0aGUgQm9keSBmcm9tIHRoZSBsZWZ0IGFuZCB0b3Agb2YgdGhlIEltYWdlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEltYWdlI29mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5ib2R5Lm9mZnNldDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlbG9jaXR5LCBvciByYXRlIG9mIGNoYW5nZSB0aGUgQm9keSdzIHBvc2l0aW9uLiBNZWFzdXJlZCBpbiBwaXhlbHMgcGVyIHNlY29uZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RJbWFnZSN2ZWxcclxuICAgICAgICAgKiBAdHlwZSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbCA9IHRoaXMuYm9keS52ZWw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhY2NlbGVyYXRpb24gaXMgdGhlIHJhdGUgb2YgY2hhbmdlIG9mIHRoZSB2ZWxvY2l0eS4gTWVhc3VyZWQgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RJbWFnZSNhY2NlbFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWwgPSB0aGlzLmJvZHkuYWNjZWw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZyaWN0aW9uIGJldHdlZW4gY29sbGlkaW5nIGJvZGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RJbWFnZSNmcmljdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJpY3Rpb24gPSB0aGlzLmJvZHkuZnJpY3Rpb247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHZlbG9jaXR5IG9mIHRoZSBib2R5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdEltYWdlI21heFZlbFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4VmVsID0gdGhpcy5ib2R5Lm1heFZlbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbXBhY3RJbWFnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/ImpactImage.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/ImpactPhysics.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/ImpactPhysics.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Factory = __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/impact/Factory.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Merge = __webpack_require__(/*! ../../utils/object/Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar World = __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/impact/World.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class ImpactPhysics\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar ImpactPhysics = new Class({\r\n\r\n    initialize:\r\n\r\n    function ImpactPhysics (scene)\r\n    {\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactPhysics#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactPhysics#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactPhysics#config\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = this.getConfig();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactPhysics#world\r\n         * @type {Phaser.Physics.Impact.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactPhysics#add\r\n         * @type {Phaser.Physics.Impact.Factory}\r\n         * @since 3.0.0\r\n         */\r\n        this.add;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.world = new World(this.scene, this.config);\r\n        this.add = new Factory(this.world);\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (!this.world)\r\n        {\r\n            this.world = new World(this.scene, this.config);\r\n            this.add = new Factory(this.world);\r\n        }\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.UPDATE, this.world.update, this.world);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#getConfig\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} [description]\r\n     */\r\n    getConfig: function ()\r\n    {\r\n        var gameConfig = this.systems.game.config.physics;\r\n        var sceneConfig = this.systems.settings.physics;\r\n\r\n        var config = Merge(\r\n            GetFastValue(sceneConfig, 'impact', {}),\r\n            GetFastValue(gameConfig, 'impact', {})\r\n        );\r\n\r\n        return config;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} The Impact World object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        return this.world.pause();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} The Impact World object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        return this.world.resume();\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.UPDATE, this.world.update, this.world);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        this.add.destroy();\r\n        this.world.destroy();\r\n\r\n        this.add = null;\r\n        this.world = null;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Physics.Impact.ImpactPhysics#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('ImpactPhysics', ImpactPhysics, 'impactPhysics');\r\n\r\nmodule.exports = ImpactPhysics;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9JbXBhY3RQaHlzaWNzLmpzP2E1YzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLHNFQUFXO0FBQ2pDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxZQUFZLG1CQUFPLENBQUMsaUZBQTBCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7QUFDOUMsWUFBWSxtQkFBTyxDQUFDLGtFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7QUFDbEQsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvSW1wYWN0UGh5c2ljcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZhY3RvcnkgPSByZXF1aXJlKCcuL0ZhY3RvcnknKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIE1lcmdlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L01lcmdlJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uLy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vc2NlbmUvZXZlbnRzJyk7XHJcbnZhciBXb3JsZCA9IHJlcXVpcmUoJy4vV29ybGQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGNsYXNzIEltcGFjdFBoeXNpY3NcclxuICogQG1lbWJlcm9mIFBoYXNlci5QaHlzaWNzLkltcGFjdFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBJbXBhY3RQaHlzaWNzID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEltcGFjdFBoeXNpY3MgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RQaHlzaWNzI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RQaHlzaWNzI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFBoeXNpY3MjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RQaHlzaWNzI3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0UGh5c2ljcyNhZGRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkZhY3Rvcnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGQ7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFBoeXNpY3MjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQgPSBuZXcgV29ybGQodGhpcy5zY2VuZSwgdGhpcy5jb25maWcpO1xyXG4gICAgICAgIHRoaXMuYWRkID0gbmV3IEZhY3RvcnkodGhpcy53b3JsZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RQaHlzaWNzI3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy53b3JsZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud29ybGQgPSBuZXcgV29ybGQodGhpcy5zY2VuZSwgdGhpcy5jb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZCA9IG5ldyBGYWN0b3J5KHRoaXMud29ybGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5VUERBVEUsIHRoaXMud29ybGQudXBkYXRlLCB0aGlzLndvcmxkKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFBoeXNpY3MjZ2V0Q29uZmlnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZmlnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnYW1lQ29uZmlnID0gdGhpcy5zeXN0ZW1zLmdhbWUuY29uZmlnLnBoeXNpY3M7XHJcbiAgICAgICAgdmFyIHNjZW5lQ29uZmlnID0gdGhpcy5zeXN0ZW1zLnNldHRpbmdzLnBoeXNpY3M7XHJcblxyXG4gICAgICAgIHZhciBjb25maWcgPSBNZXJnZShcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnaW1wYWN0Jywge30pLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoZ2FtZUNvbmZpZywgJ2ltcGFjdCcsIHt9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFBoeXNpY3MjcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhlIEltcGFjdCBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndvcmxkLnBhdXNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFBoeXNpY3MjcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IFRoZSBJbXBhY3QgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGQucmVzdW1lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RQaHlzaWNzI3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy53b3JsZC51cGRhdGUsIHRoaXMud29ybGQpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZC5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy53b3JsZC5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkID0gbnVsbDtcclxuICAgICAgICB0aGlzLndvcmxkID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0UGh5c2ljcyNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0ltcGFjdFBoeXNpY3MnLCBJbXBhY3RQaHlzaWNzLCAnaW1wYWN0UGh5c2ljcycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbXBhY3RQaHlzaWNzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/ImpactPhysics.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/ImpactSprite.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/ImpactSprite.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/impact/components/index.js\");\r\nvar Sprite = __webpack_require__(/*! ../../gameobjects/sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Impact Physics Sprite Game Object.\r\n *\r\n * A Sprite Game Object is used for the display of both static and animated images in your game.\r\n * Sprites can have input events and physics bodies. They can also be tweened, tinted, scrolled\r\n * and animated.\r\n *\r\n * The main difference between a Sprite and an Image Game Object is that you cannot animate Images.\r\n * As such, Sprites take a fraction longer to process and have a larger API footprint due to the Animation\r\n * Component. If you do not require animation then you can safely use Images to replace Sprites in all cases.\r\n *\r\n * @class ImpactSprite\r\n * @extends Phaser.GameObjects.Sprite\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Impact.Components.Acceleration\r\n * @extends Phaser.Physics.Impact.Components.BodyScale\r\n * @extends Phaser.Physics.Impact.Components.BodyType\r\n * @extends Phaser.Physics.Impact.Components.Bounce\r\n * @extends Phaser.Physics.Impact.Components.CheckAgainst\r\n * @extends Phaser.Physics.Impact.Components.Collides\r\n * @extends Phaser.Physics.Impact.Components.Debug\r\n * @extends Phaser.Physics.Impact.Components.Friction\r\n * @extends Phaser.Physics.Impact.Components.Gravity\r\n * @extends Phaser.Physics.Impact.Components.Offset\r\n * @extends Phaser.Physics.Impact.Components.SetGameObject\r\n * @extends Phaser.Physics.Impact.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - [description]\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar ImpactSprite = new Class({\r\n\r\n    Extends: Sprite,\r\n\r\n    Mixins: [\r\n        Components.Acceleration,\r\n        Components.BodyScale,\r\n        Components.BodyType,\r\n        Components.Bounce,\r\n        Components.CheckAgainst,\r\n        Components.Collides,\r\n        Components.Debug,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Offset,\r\n        Components.SetGameObject,\r\n        Components.Velocity\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function ImpactSprite (world, x, y, texture, frame)\r\n    {\r\n        Sprite.call(this, world.scene, x, y, texture, frame);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#body\r\n         * @type {Phaser.Physics.Impact.Body}\r\n         * @since 3.0.0\r\n         */\r\n        this.body = world.create(x - this.frame.centerX, y - this.frame.centerY, this.width, this.height);\r\n\r\n        this.body.parent = this;\r\n        this.body.gameObject = this;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#size\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.size = this.body.size;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#offset\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = this.body.offset;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#vel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.vel = this.body.vel;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#accel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.accel = this.body.accel;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#friction\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.friction = this.body.friction;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.ImpactSprite#maxVel\r\n         * @type {{x: number, y: number}}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxVel = this.body.maxVel;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ImpactSprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9JbXBhY3RTcHJpdGUuanM/M2E5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBYztBQUN2QyxhQUFhLG1CQUFPLENBQUMsK0ZBQWlDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9JbXBhY3RTcHJpdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi9jb21wb25lbnRzJyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBJbXBhY3QgUGh5c2ljcyBTcHJpdGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgU3ByaXRlIEdhbWUgT2JqZWN0IGlzIHVzZWQgZm9yIHRoZSBkaXNwbGF5IG9mIGJvdGggc3RhdGljIGFuZCBhbmltYXRlZCBpbWFnZXMgaW4geW91ciBnYW1lLlxyXG4gKiBTcHJpdGVzIGNhbiBoYXZlIGlucHV0IGV2ZW50cyBhbmQgcGh5c2ljcyBib2RpZXMuIFRoZXkgY2FuIGFsc28gYmUgdHdlZW5lZCwgdGludGVkLCBzY3JvbGxlZFxyXG4gKiBhbmQgYW5pbWF0ZWQuXHJcbiAqXHJcbiAqIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhIFNwcml0ZSBhbmQgYW4gSW1hZ2UgR2FtZSBPYmplY3QgaXMgdGhhdCB5b3UgY2Fubm90IGFuaW1hdGUgSW1hZ2VzLlxyXG4gKiBBcyBzdWNoLCBTcHJpdGVzIHRha2UgYSBmcmFjdGlvbiBsb25nZXIgdG8gcHJvY2VzcyBhbmQgaGF2ZSBhIGxhcmdlciBBUEkgZm9vdHByaW50IGR1ZSB0byB0aGUgQW5pbWF0aW9uXHJcbiAqIENvbXBvbmVudC4gSWYgeW91IGRvIG5vdCByZXF1aXJlIGFuaW1hdGlvbiB0aGVuIHlvdSBjYW4gc2FmZWx5IHVzZSBJbWFnZXMgdG8gcmVwbGFjZSBTcHJpdGVzIGluIGFsbCBjYXNlcy5cclxuICpcclxuICogQGNsYXNzIEltcGFjdFNwcml0ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5JbXBhY3RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5BY2NlbGVyYXRpb25cclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVNjYWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvZHlUeXBlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvdW5jZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5DaGVja0FnYWluc3RcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXNcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRGVidWdcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRnJpY3Rpb25cclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuR3Jhdml0eVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5PZmZzZXRcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuU2V0R2FtZU9iamVjdFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gd29ybGQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBJbXBhY3RTcHJpdGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNwcml0ZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFjY2VsZXJhdGlvbixcclxuICAgICAgICBDb21wb25lbnRzLkJvZHlTY2FsZSxcclxuICAgICAgICBDb21wb25lbnRzLkJvZHlUeXBlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQm91bmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0LFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29sbGlkZXMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZWJ1ZyxcclxuICAgICAgICBDb21wb25lbnRzLkZyaWN0aW9uLFxyXG4gICAgICAgIENvbXBvbmVudHMuR3Jhdml0eSxcclxuICAgICAgICBDb21wb25lbnRzLk9mZnNldCxcclxuICAgICAgICBDb21wb25lbnRzLlNldEdhbWVPYmplY3QsXHJcbiAgICAgICAgQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEltcGFjdFNwcml0ZSAod29ybGQsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIFNwcml0ZS5jYWxsKHRoaXMsIHdvcmxkLnNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RTcHJpdGUjYm9keVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJvZHkgPSB3b3JsZC5jcmVhdGUoeCAtIHRoaXMuZnJhbWUuY2VudGVyWCwgeSAtIHRoaXMuZnJhbWUuY2VudGVyWSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmJvZHkucGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLmJvZHkuZ2FtZU9iamVjdCA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RTcHJpdGUjc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMuYm9keS5zaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0U3ByaXRlI29mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5ib2R5Lm9mZnNldDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFNwcml0ZSN2ZWxcclxuICAgICAgICAgKiBAdHlwZSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbCA9IHRoaXMuYm9keS52ZWw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5JbXBhY3RTcHJpdGUjYWNjZWxcclxuICAgICAgICAgKiBAdHlwZSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsID0gdGhpcy5ib2R5LmFjY2VsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0U3ByaXRlI2ZyaWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmljdGlvbiA9IHRoaXMuYm9keS5mcmljdGlvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkltcGFjdFNwcml0ZSNtYXhWZWxcclxuICAgICAgICAgKiBAdHlwZSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFZlbCA9IHRoaXMuYm9keS5tYXhWZWw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW1wYWN0U3ByaXRlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/ImpactSprite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/SeparateX.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/SeparateX.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Physics.Impact.SeparateX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - [description]\r\n * @param {Phaser.Physics.Impact.Body} left - [description]\r\n * @param {Phaser.Physics.Impact.Body} right - [description]\r\n * @param {Phaser.Physics.Impact.Body} [weak] - [description]\r\n */\r\nvar SeparateX = function (world, left, right, weak)\r\n{\r\n    var nudge = left.pos.x + left.size.x - right.pos.x;\r\n    \r\n    // We have a weak entity, so just move this one\r\n    if (weak)\r\n    {\r\n        var strong = (left === weak) ? right : left;\r\n\r\n        weak.vel.x = -weak.vel.x * weak.bounciness + strong.vel.x;\r\n        \r\n        var resWeak = world.collisionMap.trace(weak.pos.x, weak.pos.y, weak === left ? -nudge : nudge, 0, weak.size.x, weak.size.y);\r\n\r\n        weak.pos.x = resWeak.pos.x;\r\n    }\r\n    else\r\n    {\r\n        var v2 = (left.vel.x - right.vel.x) / 2;\r\n\r\n        left.vel.x = -v2;\r\n        right.vel.x = v2;\r\n    \r\n        var resLeft = world.collisionMap.trace(left.pos.x, left.pos.y, -nudge / 2, 0, left.size.x, left.size.y);\r\n\r\n        left.pos.x = Math.floor(resLeft.pos.x);\r\n        \r\n        var resRight = world.collisionMap.trace(right.pos.x, right.pos.y, nudge / 2, 0, right.size.x, right.size.y);\r\n\r\n        right.pos.x = Math.ceil(resRight.pos.x);\r\n    }\r\n};\r\n\r\nmodule.exports = SeparateX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9TZXBhcmF0ZVguanM/ZTBiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L1NlcGFyYXRlWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLkltcGFjdC5TZXBhcmF0ZVhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSB3b3JsZCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gbGVmdCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gcmlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHl9IFt3ZWFrXSAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBTZXBhcmF0ZVggPSBmdW5jdGlvbiAod29ybGQsIGxlZnQsIHJpZ2h0LCB3ZWFrKVxyXG57XHJcbiAgICB2YXIgbnVkZ2UgPSBsZWZ0LnBvcy54ICsgbGVmdC5zaXplLnggLSByaWdodC5wb3MueDtcclxuICAgIFxyXG4gICAgLy8gV2UgaGF2ZSBhIHdlYWsgZW50aXR5LCBzbyBqdXN0IG1vdmUgdGhpcyBvbmVcclxuICAgIGlmICh3ZWFrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdHJvbmcgPSAobGVmdCA9PT0gd2VhaykgPyByaWdodCA6IGxlZnQ7XHJcblxyXG4gICAgICAgIHdlYWsudmVsLnggPSAtd2Vhay52ZWwueCAqIHdlYWsuYm91bmNpbmVzcyArIHN0cm9uZy52ZWwueDtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgcmVzV2VhayA9IHdvcmxkLmNvbGxpc2lvbk1hcC50cmFjZSh3ZWFrLnBvcy54LCB3ZWFrLnBvcy55LCB3ZWFrID09PSBsZWZ0ID8gLW51ZGdlIDogbnVkZ2UsIDAsIHdlYWsuc2l6ZS54LCB3ZWFrLnNpemUueSk7XHJcblxyXG4gICAgICAgIHdlYWsucG9zLnggPSByZXNXZWFrLnBvcy54O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2MiA9IChsZWZ0LnZlbC54IC0gcmlnaHQudmVsLngpIC8gMjtcclxuXHJcbiAgICAgICAgbGVmdC52ZWwueCA9IC12MjtcclxuICAgICAgICByaWdodC52ZWwueCA9IHYyO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHJlc0xlZnQgPSB3b3JsZC5jb2xsaXNpb25NYXAudHJhY2UobGVmdC5wb3MueCwgbGVmdC5wb3MueSwgLW51ZGdlIC8gMiwgMCwgbGVmdC5zaXplLngsIGxlZnQuc2l6ZS55KTtcclxuXHJcbiAgICAgICAgbGVmdC5wb3MueCA9IE1hdGguZmxvb3IocmVzTGVmdC5wb3MueCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHJlc1JpZ2h0ID0gd29ybGQuY29sbGlzaW9uTWFwLnRyYWNlKHJpZ2h0LnBvcy54LCByaWdodC5wb3MueSwgbnVkZ2UgLyAyLCAwLCByaWdodC5zaXplLngsIHJpZ2h0LnNpemUueSk7XHJcblxyXG4gICAgICAgIHJpZ2h0LnBvcy54ID0gTWF0aC5jZWlsKHJlc1JpZ2h0LnBvcy54KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VwYXJhdGVYO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/SeparateX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/SeparateY.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/SeparateY.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Physics.Impact.SeparateY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - [description]\r\n * @param {Phaser.Physics.Impact.Body} top - [description]\r\n * @param {Phaser.Physics.Impact.Body} bottom - [description]\r\n * @param {Phaser.Physics.Impact.Body} [weak] - [description]\r\n */\r\nvar SeparateY = function (world, top, bottom, weak)\r\n{\r\n    var nudge = (top.pos.y + top.size.y - bottom.pos.y);\r\n    var nudgeX;\r\n    var resTop;\r\n    \r\n    if (weak)\r\n    {\r\n        var strong = (top === weak) ? bottom : top;\r\n\r\n        weak.vel.y = -weak.vel.y * weak.bounciness + strong.vel.y;\r\n        \r\n        // Riding on a platform?\r\n        nudgeX = 0;\r\n\r\n        if (weak === top && Math.abs(weak.vel.y - strong.vel.y) < weak.minBounceVelocity)\r\n        {\r\n            weak.standing = true;\r\n            nudgeX = strong.vel.x * world.delta;\r\n        }\r\n        \r\n        var resWeak = world.collisionMap.trace(weak.pos.x, weak.pos.y, nudgeX, weak === top ? -nudge : nudge, weak.size.x, weak.size.y);\r\n\r\n        weak.pos.y = resWeak.pos.y;\r\n        weak.pos.x = resWeak.pos.x;\r\n    }\r\n    else if (world.gravity && (bottom.standing || top.vel.y > 0))\r\n    {\r\n        resTop = world.collisionMap.trace(top.pos.x, top.pos.y, 0, -(top.pos.y + top.size.y - bottom.pos.y), top.size.x, top.size.y);\r\n\r\n        top.pos.y = resTop.pos.y;\r\n        \r\n        if (top.bounciness > 0 && top.vel.y > top.minBounceVelocity)\r\n        {\r\n            top.vel.y *= -top.bounciness;\r\n        }\r\n        else\r\n        {\r\n            top.standing = true;\r\n            top.vel.y = 0;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        var v2 = (top.vel.y - bottom.vel.y) / 2;\r\n\r\n        top.vel.y = -v2;\r\n        bottom.vel.y = v2;\r\n        \r\n        nudgeX = bottom.vel.x * world.delta;\r\n\r\n        resTop = world.collisionMap.trace(top.pos.x, top.pos.y, nudgeX, -nudge / 2, top.size.x, top.size.y);\r\n\r\n        top.pos.y = resTop.pos.y;\r\n        \r\n        var resBottom = world.collisionMap.trace(bottom.pos.x, bottom.pos.y, 0, nudge / 2, bottom.size.x, bottom.size.y);\r\n\r\n        bottom.pos.y = resBottom.pos.y;\r\n    }\r\n};\r\n\r\nmodule.exports = SeparateY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9TZXBhcmF0ZVkuanM/NzEzYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvU2VwYXJhdGVZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlBoeXNpY3MuSW1wYWN0LlNlcGFyYXRlWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IHdvcmxkIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSB0b3AgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHl9IGJvdHRvbSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gW3dlYWtdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFNlcGFyYXRlWSA9IGZ1bmN0aW9uICh3b3JsZCwgdG9wLCBib3R0b20sIHdlYWspXHJcbntcclxuICAgIHZhciBudWRnZSA9ICh0b3AucG9zLnkgKyB0b3Auc2l6ZS55IC0gYm90dG9tLnBvcy55KTtcclxuICAgIHZhciBudWRnZVg7XHJcbiAgICB2YXIgcmVzVG9wO1xyXG4gICAgXHJcbiAgICBpZiAod2VhaylcclxuICAgIHtcclxuICAgICAgICB2YXIgc3Ryb25nID0gKHRvcCA9PT0gd2VhaykgPyBib3R0b20gOiB0b3A7XHJcblxyXG4gICAgICAgIHdlYWsudmVsLnkgPSAtd2Vhay52ZWwueSAqIHdlYWsuYm91bmNpbmVzcyArIHN0cm9uZy52ZWwueTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBSaWRpbmcgb24gYSBwbGF0Zm9ybT9cclxuICAgICAgICBudWRnZVggPSAwO1xyXG5cclxuICAgICAgICBpZiAod2VhayA9PT0gdG9wICYmIE1hdGguYWJzKHdlYWsudmVsLnkgLSBzdHJvbmcudmVsLnkpIDwgd2Vhay5taW5Cb3VuY2VWZWxvY2l0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdlYWsuc3RhbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBudWRnZVggPSBzdHJvbmcudmVsLnggKiB3b3JsZC5kZWx0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHJlc1dlYWsgPSB3b3JsZC5jb2xsaXNpb25NYXAudHJhY2Uod2Vhay5wb3MueCwgd2Vhay5wb3MueSwgbnVkZ2VYLCB3ZWFrID09PSB0b3AgPyAtbnVkZ2UgOiBudWRnZSwgd2Vhay5zaXplLngsIHdlYWsuc2l6ZS55KTtcclxuXHJcbiAgICAgICAgd2Vhay5wb3MueSA9IHJlc1dlYWsucG9zLnk7XHJcbiAgICAgICAgd2Vhay5wb3MueCA9IHJlc1dlYWsucG9zLng7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh3b3JsZC5ncmF2aXR5ICYmIChib3R0b20uc3RhbmRpbmcgfHwgdG9wLnZlbC55ID4gMCkpXHJcbiAgICB7XHJcbiAgICAgICAgcmVzVG9wID0gd29ybGQuY29sbGlzaW9uTWFwLnRyYWNlKHRvcC5wb3MueCwgdG9wLnBvcy55LCAwLCAtKHRvcC5wb3MueSArIHRvcC5zaXplLnkgLSBib3R0b20ucG9zLnkpLCB0b3Auc2l6ZS54LCB0b3Auc2l6ZS55KTtcclxuXHJcbiAgICAgICAgdG9wLnBvcy55ID0gcmVzVG9wLnBvcy55O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0b3AuYm91bmNpbmVzcyA+IDAgJiYgdG9wLnZlbC55ID4gdG9wLm1pbkJvdW5jZVZlbG9jaXR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdG9wLnZlbC55ICo9IC10b3AuYm91bmNpbmVzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdG9wLnN0YW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdG9wLnZlbC55ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHYyID0gKHRvcC52ZWwueSAtIGJvdHRvbS52ZWwueSkgLyAyO1xyXG5cclxuICAgICAgICB0b3AudmVsLnkgPSAtdjI7XHJcbiAgICAgICAgYm90dG9tLnZlbC55ID0gdjI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbnVkZ2VYID0gYm90dG9tLnZlbC54ICogd29ybGQuZGVsdGE7XHJcblxyXG4gICAgICAgIHJlc1RvcCA9IHdvcmxkLmNvbGxpc2lvbk1hcC50cmFjZSh0b3AucG9zLngsIHRvcC5wb3MueSwgbnVkZ2VYLCAtbnVkZ2UgLyAyLCB0b3Auc2l6ZS54LCB0b3Auc2l6ZS55KTtcclxuXHJcbiAgICAgICAgdG9wLnBvcy55ID0gcmVzVG9wLnBvcy55O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciByZXNCb3R0b20gPSB3b3JsZC5jb2xsaXNpb25NYXAudHJhY2UoYm90dG9tLnBvcy54LCBib3R0b20ucG9zLnksIDAsIG51ZGdlIC8gMiwgYm90dG9tLnNpemUueCwgYm90dG9tLnNpemUueSk7XHJcblxyXG4gICAgICAgIGJvdHRvbS5wb3MueSA9IHJlc0JvdHRvbS5wb3MueTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VwYXJhdGVZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/SeparateY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/Solver.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/Solver.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar COLLIDES = __webpack_require__(/*! ./COLLIDES */ \"./node_modules/phaser/src/physics/impact/COLLIDES.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/impact/events/index.js\");\r\nvar SeparateX = __webpack_require__(/*! ./SeparateX */ \"./node_modules/phaser/src/physics/impact/SeparateX.js\");\r\nvar SeparateY = __webpack_require__(/*! ./SeparateY */ \"./node_modules/phaser/src/physics/impact/SeparateY.js\");\r\n\r\n/**\r\n * Impact Physics Solver\r\n *\r\n * @function Phaser.Physics.Impact.Solver\r\n * @fires Phaser.Physics.Impact.Events#COLLIDE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.World} world - The Impact simulation to run the solver in.\r\n * @param {Phaser.Physics.Impact.Body} bodyA - The first body in the collision.\r\n * @param {Phaser.Physics.Impact.Body} bodyB - The second body in the collision.\r\n */\r\nvar Solver = function (world, bodyA, bodyB)\r\n{\r\n    var weak = null;\r\n\r\n    if (bodyA.collides === COLLIDES.LITE || bodyB.collides === COLLIDES.FIXED)\r\n    {\r\n        weak = bodyA;\r\n    }\r\n    else if (bodyB.collides === COLLIDES.LITE || bodyA.collides === COLLIDES.FIXED)\r\n    {\r\n        weak = bodyB;\r\n    }\r\n\r\n    if (bodyA.last.x + bodyA.size.x > bodyB.last.x && bodyA.last.x < bodyB.last.x + bodyB.size.x)\r\n    {\r\n        if (bodyA.last.y < bodyB.last.y)\r\n        {\r\n            SeparateY(world, bodyA, bodyB, weak);\r\n        }\r\n        else\r\n        {\r\n            SeparateY(world, bodyB, bodyA, weak);\r\n        }\r\n\r\n        bodyA.collideWith(bodyB, 'y');\r\n        bodyB.collideWith(bodyA, 'y');\r\n\r\n        world.emit(Events.COLLIDE, bodyA, bodyB, 'y');\r\n    }\r\n    else if (bodyA.last.y + bodyA.size.y > bodyB.last.y && bodyA.last.y < bodyB.last.y + bodyB.size.y)\r\n    {\r\n        if (bodyA.last.x < bodyB.last.x)\r\n        {\r\n            SeparateX(world, bodyA, bodyB, weak);\r\n        }\r\n        else\r\n        {\r\n            SeparateX(world, bodyB, bodyA, weak);\r\n        }\r\n\r\n        bodyA.collideWith(bodyB, 'x');\r\n        bodyB.collideWith(bodyA, 'x');\r\n\r\n        world.emit(Events.COLLIDE, bodyA, bodyB, 'x');\r\n    }\r\n};\r\n\r\nmodule.exports = Solver;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9Tb2x2ZXIuanM/MzRmYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQywwRUFBVTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvU29sdmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09MTElERVMgPSByZXF1aXJlKCcuL0NPTExJREVTJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgU2VwYXJhdGVYID0gcmVxdWlyZSgnLi9TZXBhcmF0ZVgnKTtcclxudmFyIFNlcGFyYXRlWSA9IHJlcXVpcmUoJy4vU2VwYXJhdGVZJyk7XHJcblxyXG4vKipcclxuICogSW1wYWN0IFBoeXNpY3MgU29sdmVyXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuU29sdmVyXHJcbiAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuRXZlbnRzI0NPTExJREVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSB3b3JsZCAtIFRoZSBJbXBhY3Qgc2ltdWxhdGlvbiB0byBydW4gdGhlIHNvbHZlciBpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gYm9keUEgLSBUaGUgZmlyc3QgYm9keSBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5QiAtIFRoZSBzZWNvbmQgYm9keSBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKi9cclxudmFyIFNvbHZlciA9IGZ1bmN0aW9uICh3b3JsZCwgYm9keUEsIGJvZHlCKVxyXG57XHJcbiAgICB2YXIgd2VhayA9IG51bGw7XHJcblxyXG4gICAgaWYgKGJvZHlBLmNvbGxpZGVzID09PSBDT0xMSURFUy5MSVRFIHx8IGJvZHlCLmNvbGxpZGVzID09PSBDT0xMSURFUy5GSVhFRClcclxuICAgIHtcclxuICAgICAgICB3ZWFrID0gYm9keUE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5Qi5jb2xsaWRlcyA9PT0gQ09MTElERVMuTElURSB8fCBib2R5QS5jb2xsaWRlcyA9PT0gQ09MTElERVMuRklYRUQpXHJcbiAgICB7XHJcbiAgICAgICAgd2VhayA9IGJvZHlCO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChib2R5QS5sYXN0LnggKyBib2R5QS5zaXplLnggPiBib2R5Qi5sYXN0LnggJiYgYm9keUEubGFzdC54IDwgYm9keUIubGFzdC54ICsgYm9keUIuc2l6ZS54KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChib2R5QS5sYXN0LnkgPCBib2R5Qi5sYXN0LnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTZXBhcmF0ZVkod29ybGQsIGJvZHlBLCBib2R5Qiwgd2Vhayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNlcGFyYXRlWSh3b3JsZCwgYm9keUIsIGJvZHlBLCB3ZWFrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJvZHlBLmNvbGxpZGVXaXRoKGJvZHlCLCAneScpO1xyXG4gICAgICAgIGJvZHlCLmNvbGxpZGVXaXRoKGJvZHlBLCAneScpO1xyXG5cclxuICAgICAgICB3b3JsZC5lbWl0KEV2ZW50cy5DT0xMSURFLCBib2R5QSwgYm9keUIsICd5Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5QS5sYXN0LnkgKyBib2R5QS5zaXplLnkgPiBib2R5Qi5sYXN0LnkgJiYgYm9keUEubGFzdC55IDwgYm9keUIubGFzdC55ICsgYm9keUIuc2l6ZS55KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChib2R5QS5sYXN0LnggPCBib2R5Qi5sYXN0LngpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTZXBhcmF0ZVgod29ybGQsIGJvZHlBLCBib2R5Qiwgd2Vhayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNlcGFyYXRlWCh3b3JsZCwgYm9keUIsIGJvZHlBLCB3ZWFrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJvZHlBLmNvbGxpZGVXaXRoKGJvZHlCLCAneCcpO1xyXG4gICAgICAgIGJvZHlCLmNvbGxpZGVXaXRoKGJvZHlBLCAneCcpO1xyXG5cclxuICAgICAgICB3b3JsZC5lbWl0KEV2ZW50cy5DT0xMSURFLCBib2R5QSwgYm9keUIsICd4Jyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNvbHZlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/Solver.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/TYPE.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/TYPE.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Collision Types - Determine if and how entities collide with each other.\r\n *\r\n * In ACTIVE vs. LITE or FIXED vs. ANY collisions, only the \"weak\" entity moves,\r\n * while the other one stays fixed. In ACTIVE vs. ACTIVE and ACTIVE vs. PASSIVE\r\n * collisions, both entities are moved. LITE or PASSIVE entities don't collide\r\n * with other LITE or PASSIVE entities at all. The behavior for FIXED vs.\r\n * FIXED collisions is undefined.\r\n *\r\n * @namespace Phaser.Physics.Impact.TYPE\r\n * @memberof Phaser.Physics.Impact\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n    /**\r\n     * Collides with nothing.\r\n     *\r\n     * @name Phaser.Physics.Impact.TYPE.NONE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    NONE: 0,\r\n\r\n    /**\r\n     * Type A. Collides with Type B.\r\n     *\r\n     * @name Phaser.Physics.Impact.TYPE.A\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    A: 1,\r\n\r\n    /**\r\n     * Type B. Collides with Type A.\r\n     *\r\n     * @name Phaser.Physics.Impact.TYPE.B\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    B: 2,\r\n\r\n    /**\r\n     * Collides with both types A and B.\r\n     *\r\n     * @name Phaser.Physics.Impact.TYPE.BOTH\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    BOTH: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9UWVBFLmpzPzY0NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9UWVBFLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29sbGlzaW9uIFR5cGVzIC0gRGV0ZXJtaW5lIGlmIGFuZCBob3cgZW50aXRpZXMgY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIuXHJcbiAqXHJcbiAqIEluIEFDVElWRSB2cy4gTElURSBvciBGSVhFRCB2cy4gQU5ZIGNvbGxpc2lvbnMsIG9ubHkgdGhlIFwid2Vha1wiIGVudGl0eSBtb3ZlcyxcclxuICogd2hpbGUgdGhlIG90aGVyIG9uZSBzdGF5cyBmaXhlZC4gSW4gQUNUSVZFIHZzLiBBQ1RJVkUgYW5kIEFDVElWRSB2cy4gUEFTU0lWRVxyXG4gKiBjb2xsaXNpb25zLCBib3RoIGVudGl0aWVzIGFyZSBtb3ZlZC4gTElURSBvciBQQVNTSVZFIGVudGl0aWVzIGRvbid0IGNvbGxpZGVcclxuICogd2l0aCBvdGhlciBMSVRFIG9yIFBBU1NJVkUgZW50aXRpZXMgYXQgYWxsLiBUaGUgYmVoYXZpb3IgZm9yIEZJWEVEIHZzLlxyXG4gKiBGSVhFRCBjb2xsaXNpb25zIGlzIHVuZGVmaW5lZC5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuVFlQRVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuSW1wYWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xsaWRlcyB3aXRoIG5vdGhpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LlRZUEUuTk9ORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOT05FOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHlwZSBBLiBDb2xsaWRlcyB3aXRoIFR5cGUgQi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuVFlQRS5BXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEE6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUeXBlIEIuIENvbGxpZGVzIHdpdGggVHlwZSBBLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5UWVBFLkJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQjogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbGxpZGVzIHdpdGggYm90aCB0eXBlcyBBIGFuZCBCLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5UWVBFLkJPVEhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQk9USDogM1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/TYPE.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/UpdateMotion.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/UpdateMotion.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Set up the trace-result\r\n * var res = {\r\n *     collision: {x: false, y: false, slope: false},\r\n *     pos: {x: x, y: y},\r\n *     tile: {x: 0, y: 0}\r\n * };\r\n *\r\n * @function Phaser.Physics.Impact.UpdateMotion\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Impact.Body} body - [description]\r\n * @param {object} res - [description]\r\n */\r\nvar UpdateMotion = function (body, res)\r\n{\r\n    body.standing = false;\r\n\r\n    //  Y\r\n    if (res.collision.y)\r\n    {\r\n        if (body.bounciness > 0 && Math.abs(body.vel.y) > body.minBounceVelocity)\r\n        {\r\n            body.vel.y *= -body.bounciness;\r\n        }\r\n        else\r\n        {\r\n            if (body.vel.y > 0)\r\n            {\r\n                body.standing = true;\r\n            }\r\n\r\n            body.vel.y = 0;\r\n        }\r\n    }\r\n\r\n    //  X\r\n    if (res.collision.x)\r\n    {\r\n        if (body.bounciness > 0 && Math.abs(body.vel.x) > body.minBounceVelocity)\r\n        {\r\n            body.vel.x *= -body.bounciness;\r\n        }\r\n        else\r\n        {\r\n            body.vel.x = 0;\r\n        }\r\n    }\r\n\r\n    //  SLOPE\r\n    if (res.collision.slope)\r\n    {\r\n        var s = res.collision.slope;\r\n       \r\n        if (body.bounciness > 0)\r\n        {\r\n            var proj = body.vel.x * s.nx + body.vel.y * s.ny;\r\n\r\n            body.vel.x = (body.vel.x - s.nx * proj * 2) * body.bounciness;\r\n            body.vel.y = (body.vel.y - s.ny * proj * 2) * body.bounciness;\r\n        }\r\n        else\r\n        {\r\n            var lengthSquared = s.x * s.x + s.y * s.y;\r\n            var dot = (body.vel.x * s.x + body.vel.y * s.y) / lengthSquared;\r\n            \r\n            body.vel.x = s.x * dot;\r\n            body.vel.y = s.y * dot;\r\n            \r\n            var angle = Math.atan2(s.x, s.y);\r\n\r\n            if (angle > body.slopeStanding.min && angle < body.slopeStanding.max)\r\n            {\r\n                body.standing = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    body.pos.x = res.pos.x;\r\n    body.pos.y = res.pos.y;\r\n};\r\n\r\nmodule.exports = UpdateMotion;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9VcGRhdGVNb3Rpb24uanM/NmJkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlDQUFpQztBQUNwRCxhQUFhLFdBQVc7QUFDeEIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvVXBkYXRlTW90aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU2V0IHVwIHRoZSB0cmFjZS1yZXN1bHRcclxuICogdmFyIHJlcyA9IHtcclxuICogICAgIGNvbGxpc2lvbjoge3g6IGZhbHNlLCB5OiBmYWxzZSwgc2xvcGU6IGZhbHNlfSxcclxuICogICAgIHBvczoge3g6IHgsIHk6IHl9LFxyXG4gKiAgICAgdGlsZToge3g6IDAsIHk6IDB9XHJcbiAqIH07XHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuVXBkYXRlTW90aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFVwZGF0ZU1vdGlvbiA9IGZ1bmN0aW9uIChib2R5LCByZXMpXHJcbntcclxuICAgIGJvZHkuc3RhbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyAgWVxyXG4gICAgaWYgKHJlcy5jb2xsaXNpb24ueSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYm9keS5ib3VuY2luZXNzID4gMCAmJiBNYXRoLmFicyhib2R5LnZlbC55KSA+IGJvZHkubWluQm91bmNlVmVsb2NpdHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5LnZlbC55ICo9IC1ib2R5LmJvdW5jaW5lc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChib2R5LnZlbC55ID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keS5zdGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvZHkudmVsLnkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgWFxyXG4gICAgaWYgKHJlcy5jb2xsaXNpb24ueClcclxuICAgIHtcclxuICAgICAgICBpZiAoYm9keS5ib3VuY2luZXNzID4gMCAmJiBNYXRoLmFicyhib2R5LnZlbC54KSA+IGJvZHkubWluQm91bmNlVmVsb2NpdHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5LnZlbC54ICo9IC1ib2R5LmJvdW5jaW5lc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZHkudmVsLnggPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgU0xPUEVcclxuICAgIGlmIChyZXMuY29sbGlzaW9uLnNsb3BlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzID0gcmVzLmNvbGxpc2lvbi5zbG9wZTtcclxuICAgICAgIFxyXG4gICAgICAgIGlmIChib2R5LmJvdW5jaW5lc3MgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHByb2ogPSBib2R5LnZlbC54ICogcy5ueCArIGJvZHkudmVsLnkgKiBzLm55O1xyXG5cclxuICAgICAgICAgICAgYm9keS52ZWwueCA9IChib2R5LnZlbC54IC0gcy5ueCAqIHByb2ogKiAyKSAqIGJvZHkuYm91bmNpbmVzcztcclxuICAgICAgICAgICAgYm9keS52ZWwueSA9IChib2R5LnZlbC55IC0gcy5ueSAqIHByb2ogKiAyKSAqIGJvZHkuYm91bmNpbmVzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxlbmd0aFNxdWFyZWQgPSBzLnggKiBzLnggKyBzLnkgKiBzLnk7XHJcbiAgICAgICAgICAgIHZhciBkb3QgPSAoYm9keS52ZWwueCAqIHMueCArIGJvZHkudmVsLnkgKiBzLnkpIC8gbGVuZ3RoU3F1YXJlZDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJvZHkudmVsLnggPSBzLnggKiBkb3Q7XHJcbiAgICAgICAgICAgIGJvZHkudmVsLnkgPSBzLnkgKiBkb3Q7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHMueCwgcy55KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhbmdsZSA+IGJvZHkuc2xvcGVTdGFuZGluZy5taW4gJiYgYW5nbGUgPCBib2R5LnNsb3BlU3RhbmRpbmcubWF4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5LnN0YW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBib2R5LnBvcy54ID0gcmVzLnBvcy54O1xyXG4gICAgYm9keS5wb3MueSA9IHJlcy5wb3MueTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlTW90aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/UpdateMotion.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/World.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/World.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ./Body */ \"./node_modules/phaser/src/physics/impact/Body.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar COLLIDES = __webpack_require__(/*! ./COLLIDES */ \"./node_modules/phaser/src/physics/impact/COLLIDES.js\");\r\nvar CollisionMap = __webpack_require__(/*! ./CollisionMap */ \"./node_modules/phaser/src/physics/impact/CollisionMap.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/impact/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar HasValue = __webpack_require__(/*! ../../utils/object/HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\nvar Set = __webpack_require__(/*! ../../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar Solver = __webpack_require__(/*! ./Solver */ \"./node_modules/phaser/src/physics/impact/Solver.js\");\r\nvar TILEMAP_FORMATS = __webpack_require__(/*! ../../tilemaps/Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar TYPE = __webpack_require__(/*! ./TYPE */ \"./node_modules/phaser/src/physics/impact/TYPE.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class World\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Physics.Impact\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Impact World instance belongs.\r\n * @param {Phaser.Types.Physics.Impact.WorldConfig} config - [description]\r\n */\r\nvar World = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function World (scene, config)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#bodies\r\n         * @type {Phaser.Structs.Set.<Phaser.Physics.Impact.Body>}\r\n         * @since 3.0.0\r\n         */\r\n        this.bodies = new Set();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#gravity\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.gravity = GetFastValue(config, 'gravity', 0);\r\n\r\n        /**\r\n         * Spatial hash cell dimensions\r\n         *\r\n         * @name Phaser.Physics.Impact.World#cellSize\r\n         * @type {integer}\r\n         * @default 64\r\n         * @since 3.0.0\r\n         */\r\n        this.cellSize = GetFastValue(config, 'cellSize', 64);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#collisionMap\r\n         * @type {Phaser.Physics.Impact.CollisionMap}\r\n         * @since 3.0.0\r\n         */\r\n        this.collisionMap = new CollisionMap();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = GetFastValue(config, 'timeScale', 1);\r\n\r\n        /**\r\n         * Impacts maximum time step is 20 fps.\r\n         *\r\n         * @name Phaser.Physics.Impact.World#maxStep\r\n         * @type {number}\r\n         * @default 0.05\r\n         * @since 3.0.0\r\n         */\r\n        this.maxStep = GetFastValue(config, 'maxStep', 0.05);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = true;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#drawDebug\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.drawDebug = GetFastValue(config, 'debug', false);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#debugGraphic\r\n         * @type {Phaser.GameObjects.Graphics}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugGraphic;\r\n\r\n        var _maxVelocity = GetFastValue(config, 'maxVelocity', 100);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#defaults\r\n         * @type {Phaser.Types.Physics.Impact.WorldDefaults}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaults = {\r\n            debugShowBody: GetFastValue(config, 'debugShowBody', true),\r\n            debugShowVelocity: GetFastValue(config, 'debugShowVelocity', true),\r\n            bodyDebugColor: GetFastValue(config, 'debugBodyColor', 0xff00ff),\r\n            velocityDebugColor: GetFastValue(config, 'debugVelocityColor', 0x00ff00),\r\n            maxVelocityX: GetFastValue(config, 'maxVelocityX', _maxVelocity),\r\n            maxVelocityY: GetFastValue(config, 'maxVelocityY', _maxVelocity),\r\n            minBounceVelocity: GetFastValue(config, 'minBounceVelocity', 40),\r\n            gravityFactor: GetFastValue(config, 'gravityFactor', 1),\r\n            bounciness: GetFastValue(config, 'bounciness', 0)\r\n        };\r\n\r\n        /**\r\n         * An object containing the 4 wall bodies that bound the physics world.\r\n         *\r\n         * @name Phaser.Physics.Impact.World#walls\r\n         * @type {Phaser.Types.Physics.Impact.WorldWalls}\r\n         * @since 3.0.0\r\n         */\r\n        this.walls = { left: null, right: null, top: null, bottom: null };\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#delta\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.delta = 0;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Impact.World#_lastId\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._lastId = 0;\r\n\r\n        if (GetFastValue(config, 'setBounds', false))\r\n        {\r\n            var boundsConfig = config['setBounds'];\r\n\r\n            if (typeof boundsConfig === 'boolean')\r\n            {\r\n                this.setBounds();\r\n            }\r\n            else\r\n            {\r\n                var x = GetFastValue(boundsConfig, 'x', 0);\r\n                var y = GetFastValue(boundsConfig, 'y', 0);\r\n                var width = GetFastValue(boundsConfig, 'width', scene.sys.scale.width);\r\n                var height = GetFastValue(boundsConfig, 'height', scene.sys.scale.height);\r\n                var thickness = GetFastValue(boundsConfig, 'thickness', 64);\r\n                var left = GetFastValue(boundsConfig, 'left', true);\r\n                var right = GetFastValue(boundsConfig, 'right', true);\r\n                var top = GetFastValue(boundsConfig, 'top', true);\r\n                var bottom = GetFastValue(boundsConfig, 'bottom', true);\r\n\r\n                this.setBounds(x, y, width, height, thickness, left, right, top, bottom);\r\n            }\r\n        }\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            this.createDebugGraphic();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the collision map for the world either from a Weltmeister JSON level in the cache or from\r\n     * a 2D array. If loading from a Weltmeister level, the map must have a layer called \"collision\".\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCollisionMap\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer[][])} key - Either a string key that corresponds to a Weltmeister level\r\n     * in the cache, or a 2D array of collision IDs.\r\n     * @param {integer} tileSize - The size of a tile. This is optional if loading from a Weltmeister\r\n     * level in the cache.\r\n     *\r\n     * @return {?Phaser.Physics.Impact.CollisionMap} The newly created CollisionMap, or null if the method failed to\r\n     * create the CollisionMap.\r\n     */\r\n    setCollisionMap: function (key, tileSize)\r\n    {\r\n        if (typeof key === 'string')\r\n        {\r\n            var tilemapData = this.scene.cache.tilemap.get(key);\r\n\r\n            if (!tilemapData || tilemapData.format !== TILEMAP_FORMATS.WELTMEISTER)\r\n            {\r\n                console.warn('The specified key does not correspond to a Weltmeister tilemap: ' + key);\r\n                return null;\r\n            }\r\n\r\n            var layers = tilemapData.data.layer;\r\n            var collisionLayer;\r\n            for (var i = 0; i < layers.length; i++)\r\n            {\r\n                if (layers[i].name === 'collision')\r\n                {\r\n                    collisionLayer = layers[i];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (tileSize === undefined) { tileSize = collisionLayer.tilesize; }\r\n\r\n            this.collisionMap = new CollisionMap(tileSize, collisionLayer.data);\r\n        }\r\n        else if (Array.isArray(key))\r\n        {\r\n            this.collisionMap = new CollisionMap(tileSize, key);\r\n        }\r\n        else\r\n        {\r\n            console.warn('Invalid Weltmeister collision map data: ' + key);\r\n        }\r\n\r\n        return this.collisionMap;\r\n    },\r\n\r\n    /**\r\n     * Sets the collision map for the world from a tilemap layer. Only tiles that are marked as\r\n     * colliding will be used. You can specify the mapping from tiles to slope IDs in a couple of\r\n     * ways. The easiest is to use Tiled and the slopeTileProperty option. Alternatively, you can\r\n     * manually create a slopeMap that stores the mapping between tile indices and slope IDs.\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCollisionMapFromTilemapLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer - The tilemap layer to use.\r\n     * @param {Phaser.Types.Physics.Impact.CollisionOptions} [options] - Options for controlling the mapping from tiles to slope IDs.\r\n     *\r\n     * @return {Phaser.Physics.Impact.CollisionMap} The newly created CollisionMap.\r\n     */\r\n    setCollisionMapFromTilemapLayer: function (tilemapLayer, options)\r\n    {\r\n        if (options === undefined) { options = {}; }\r\n        var slopeProperty = GetFastValue(options, 'slopeProperty', null);\r\n        var slopeMap = GetFastValue(options, 'slopeMap', null);\r\n        var collidingSlope = GetFastValue(options, 'defaultCollidingSlope', null);\r\n        var nonCollidingSlope = GetFastValue(options, 'defaultNonCollidingSlope', 0);\r\n\r\n        var layerData = tilemapLayer.layer;\r\n        var tileSize = layerData.baseTileWidth;\r\n        var collisionData = [];\r\n\r\n        for (var ty = 0; ty < layerData.height; ty++)\r\n        {\r\n            collisionData[ty] = [];\r\n\r\n            for (var tx = 0; tx < layerData.width; tx++)\r\n            {\r\n                var tile = layerData.data[ty][tx];\r\n\r\n                if (tile && tile.collides)\r\n                {\r\n                    if (slopeProperty !== null && HasValue(tile.properties, slopeProperty))\r\n                    {\r\n                        collisionData[ty][tx] = parseInt(tile.properties[slopeProperty], 10);\r\n                    }\r\n                    else if (slopeMap !== null && HasValue(slopeMap, tile.index))\r\n                    {\r\n                        collisionData[ty][tx] = slopeMap[tile.index];\r\n                    }\r\n                    else if (collidingSlope !== null)\r\n                    {\r\n                        collisionData[ty][tx] = collidingSlope;\r\n                    }\r\n                    else\r\n                    {\r\n                        collisionData[ty][tx] = tile.index;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    collisionData[ty][tx] = nonCollidingSlope;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.collisionMap = new CollisionMap(tileSize, collisionData);\r\n\r\n        return this.collisionMap;\r\n    },\r\n\r\n    /**\r\n     * Sets the bounds of the Physics world to match the given world pixel dimensions.\r\n     * You can optionally set which 'walls' to create: left, right, top or bottom.\r\n     * If none of the walls are given it will default to use the walls settings it had previously.\r\n     * I.e. if you previously told it to not have the left or right walls, and you then adjust the world size\r\n     * the newly created bounds will also not have the left and right walls.\r\n     * Explicitly state them in the parameters to override this.\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x] - The x coordinate of the top-left corner of the bounds.\r\n     * @param {number} [y] - The y coordinate of the top-left corner of the bounds.\r\n     * @param {number} [width] - The width of the bounds.\r\n     * @param {number} [height] - The height of the bounds.\r\n     * @param {number} [thickness=64] - [description]\r\n     * @param {boolean} [left=true] - If true will create the left bounds wall.\r\n     * @param {boolean} [right=true] - If true will create the right bounds wall.\r\n     * @param {boolean} [top=true] - If true will create the top bounds wall.\r\n     * @param {boolean} [bottom=true] - If true will create the bottom bounds wall.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setBounds: function (x, y, width, height, thickness, left, right, top, bottom)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.scene.sys.scale.width; }\r\n        if (height === undefined) { height = this.scene.sys.scale.height; }\r\n        if (thickness === undefined) { thickness = 64; }\r\n        if (left === undefined) { left = true; }\r\n        if (right === undefined) { right = true; }\r\n        if (top === undefined) { top = true; }\r\n        if (bottom === undefined) { bottom = true; }\r\n\r\n        this.updateWall(left, 'left', x - thickness, y, thickness, height);\r\n        this.updateWall(right, 'right', x + width, y, thickness, height);\r\n        this.updateWall(top, 'top', x, y - thickness, width, thickness);\r\n        this.updateWall(bottom, 'bottom', x, y + height, width, thickness);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * position = 'left', 'right', 'top' or 'bottom'\r\n     *\r\n     * @method Phaser.Physics.Impact.World#updateWall\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} add - [description]\r\n     * @param {string} position - [description]\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     */\r\n    updateWall: function (add, position, x, y, width, height)\r\n    {\r\n        var wall = this.walls[position];\r\n\r\n        if (add)\r\n        {\r\n            if (wall)\r\n            {\r\n                wall.resetSize(x, y, width, height);\r\n            }\r\n            else\r\n            {\r\n                this.walls[position] = this.create(x, y, width, height);\r\n                this.walls[position].name = position;\r\n                this.walls[position].gravityFactor = 0;\r\n                this.walls[position].collides = COLLIDES.FIXED;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            if (wall)\r\n            {\r\n                this.bodies.remove(wall);\r\n            }\r\n\r\n            this.walls[position] = null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a Graphics Game Object used for debug display and enables the world for debug drawing.\r\n     *\r\n     * @method Phaser.Physics.Impact.World#createDebugGraphic\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} The Graphics object created that will have the debug visuals drawn to it.\r\n     */\r\n    createDebugGraphic: function ()\r\n    {\r\n        var graphic = this.scene.sys.add.graphics({ x: 0, y: 0 });\r\n\r\n        graphic.setDepth(Number.MAX_VALUE);\r\n\r\n        this.debugGraphic = graphic;\r\n\r\n        this.drawDebug = true;\r\n\r\n        return graphic;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#getNextID\r\n     * @since 3.0.0\r\n     *\r\n     * @return {integer} [description]\r\n     */\r\n    getNextID: function ()\r\n    {\r\n        return this._lastId++;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} sizeX - [description]\r\n     * @param {number} sizeY - [description]\r\n     *\r\n     * @return {Phaser.Physics.Impact.Body} The Body that was added to this World.\r\n     */\r\n    create: function (x, y, sizeX, sizeY)\r\n    {\r\n        var body = new Body(this, x, y, sizeX, sizeY);\r\n\r\n        this.bodies.set(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} object - The Body to remove from this World.\r\n     */\r\n    remove: function (object)\r\n    {\r\n        this.bodies.delete(object);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#pause\r\n     * @fires Phaser.Physics.Impact.Events#PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.enabled = false;\r\n\r\n        this.emit(Events.PAUSE);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#resume\r\n     * @fires Phaser.Physics.Impact.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.enabled = true;\r\n\r\n        this.emit(Events.RESUME);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.enabled || this.bodies.size === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  Impact uses a divided delta value that is clamped to the maxStep (20fps) maximum\r\n\r\n        var clampedDelta = Math.min(delta / 1000, this.maxStep) * this.timeScale;\r\n\r\n        this.delta = clampedDelta;\r\n\r\n        //  Update all active bodies\r\n\r\n        var i;\r\n        var body;\r\n        var bodies = this.bodies.entries;\r\n        var len = bodies.length;\r\n        var hash = {};\r\n        var size = this.cellSize;\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            body = bodies[i];\r\n\r\n            if (body.enabled)\r\n            {\r\n                body.update(clampedDelta);\r\n            }\r\n        }\r\n\r\n        //  Run collision against them all now they're in the new positions from the update\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            body = bodies[i];\r\n\r\n            if (body && !body.skipHash())\r\n            {\r\n                this.checkHash(body, hash, size);\r\n            }\r\n        }\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            var graphics = this.debugGraphic;\r\n\r\n            graphics.clear();\r\n\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                body = bodies[i];\r\n\r\n                if (body && body.willDrawDebug())\r\n                {\r\n                    body.drawDebug(graphics);\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Check the body against the spatial hash.\r\n     *\r\n     * @method Phaser.Physics.Impact.World#checkHash\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} body - [description]\r\n     * @param {object} hash - [description]\r\n     * @param {number} size - [description]\r\n     */\r\n    checkHash: function (body, hash, size)\r\n    {\r\n        var checked = {};\r\n\r\n        var xmin = Math.floor(body.pos.x / size);\r\n        var ymin = Math.floor(body.pos.y / size);\r\n        var xmax = Math.floor((body.pos.x + body.size.x) / size) + 1;\r\n        var ymax = Math.floor((body.pos.y + body.size.y) / size) + 1;\r\n\r\n        for (var x = xmin; x < xmax; x++)\r\n        {\r\n            for (var y = ymin; y < ymax; y++)\r\n            {\r\n                if (!hash[x])\r\n                {\r\n                    hash[x] = {};\r\n                    hash[x][y] = [ body ];\r\n                }\r\n                else if (!hash[x][y])\r\n                {\r\n                    hash[x][y] = [ body ];\r\n                }\r\n                else\r\n                {\r\n                    var cell = hash[x][y];\r\n\r\n                    for (var c = 0; c < cell.length; c++)\r\n                    {\r\n                        if (body.touches(cell[c]) && !checked[cell[c].id])\r\n                        {\r\n                            checked[cell[c].id] = true;\r\n\r\n                            this.checkBodies(body, cell[c]);\r\n                        }\r\n                    }\r\n\r\n                    cell.push(body);\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#checkBodies\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body} bodyA - [description]\r\n     * @param {Phaser.Physics.Impact.Body} bodyB - [description]\r\n     */\r\n    checkBodies: function (bodyA, bodyB)\r\n    {\r\n        //  2 fixed bodies won't do anything\r\n        if (bodyA.collides === COLLIDES.FIXED && bodyB.collides === COLLIDES.FIXED)\r\n        {\r\n            return;\r\n        }\r\n\r\n        //  bitwise checks\r\n        if (bodyA.checkAgainst & bodyB.type)\r\n        {\r\n            bodyA.check(bodyB);\r\n        }\r\n\r\n        if (bodyB.checkAgainst & bodyA.type)\r\n        {\r\n            bodyB.check(bodyA);\r\n        }\r\n\r\n        if (bodyA.collides && bodyB.collides && bodyA.collides + bodyB.collides > COLLIDES.ACTIVE)\r\n        {\r\n            Solver(this, bodyA, bodyB);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCollidesNever\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the collides value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setCollidesNever: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].collides = COLLIDES.NEVER;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setLite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the collides value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setLite: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].collides = COLLIDES.LITE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setPassive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the collides value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setPassive: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].collides = COLLIDES.PASSIVE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the collides value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setActive: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].collides = COLLIDES.ACTIVE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setFixed\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the collides value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setFixed: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].collides = COLLIDES.FIXED;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setTypeNone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setTypeNone: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].type = TYPE.NONE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setTypeA\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setTypeA: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].type = TYPE.A;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setTypeB\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setTypeB: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].type = TYPE.B;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setAvsB\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setAvsB: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].type = TYPE.A;\r\n            bodies[i].checkAgainst = TYPE.B;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setBvsA\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setBvsA: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].type = TYPE.B;\r\n            bodies[i].checkAgainst = TYPE.A;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCheckAgainstNone\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setCheckAgainstNone: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].checkAgainst = TYPE.NONE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCheckAgainstA\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setCheckAgainstA: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].checkAgainst = TYPE.A;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#setCheckAgainstB\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Physics.Impact.Body[]} bodies - An Array of Impact Bodies to set the type value on.\r\n     *\r\n     * @return {Phaser.Physics.Impact.World} This World object.\r\n     */\r\n    setCheckAgainstB: function (bodies)\r\n    {\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            bodies[i].checkAgainst = TYPE.B;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.removeAllListeners();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.World#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.scene = null;\r\n\r\n        this.bodies.clear();\r\n\r\n        this.bodies = null;\r\n\r\n        this.collisionMap = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = World;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9Xb3JsZC5qcz9iZGIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsZ0VBQVE7QUFDM0IsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsd0VBQVk7QUFDbkMsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywwRUFBVTtBQUMvQixtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxVQUFVLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxvRUFBVTtBQUMvQixzQkFBc0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDdEQsV0FBVyxtQkFBTyxDQUFDLGdFQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLHdDQUF3QztBQUNuRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLG1CQUFtQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsb0NBQW9DOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5RUFBeUU7QUFDeEYsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7O0FBRUEsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxvQ0FBb0M7QUFDdEUsbUNBQW1DLHNDQUFzQztBQUN6RSxzQ0FBc0MsZ0JBQWdCO0FBQ3RELGlDQUFpQyxhQUFhO0FBQzlDLGtDQUFrQyxjQUFjO0FBQ2hELGdDQUFnQyxZQUFZO0FBQzVDLG1DQUFtQyxlQUFlOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxhQUFhOztBQUVoRTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLFVBQVU7QUFDcEM7QUFDQSw4QkFBOEIsVUFBVTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsaUJBQWlCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUMsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9Xb3JsZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZHkgPSByZXF1aXJlKCcuL0JvZHknKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTExJREVTID0gcmVxdWlyZSgnLi9DT0xMSURFUycpO1xyXG52YXIgQ29sbGlzaW9uTWFwID0gcmVxdWlyZSgnLi9Db2xsaXNpb25NYXAnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9IYXNWYWx1ZScpO1xyXG52YXIgU2V0ID0gcmVxdWlyZSgnLi4vLi4vc3RydWN0cy9TZXQnKTtcclxudmFyIFNvbHZlciA9IHJlcXVpcmUoJy4vU29sdmVyJyk7XHJcbnZhciBUSUxFTUFQX0ZPUk1BVFMgPSByZXF1aXJlKCcuLi8uLi90aWxlbWFwcy9Gb3JtYXRzJyk7XHJcbnZhciBUWVBFID0gcmVxdWlyZSgnLi9UWVBFJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBXb3JsZFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuSW1wYWN0XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgSW1wYWN0IFdvcmxkIGluc3RhbmNlIGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuSW1wYWN0LldvcmxkQ29uZmlnfSBjb25maWcgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgV29ybGQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFdvcmxkIChzY2VuZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2JvZGllc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5Pn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJvZGllcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2dyYXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdyYXZpdHkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZ3Jhdml0eScsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTcGF0aWFsIGhhc2ggY2VsbCBkaW1lbnNpb25zXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjY2VsbFNpemVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCA2NFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2VsbFNpemUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY2VsbFNpemUnLCA2NCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNjb2xsaXNpb25NYXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbGxpc2lvbk1hcH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpc2lvbk1hcCA9IG5ldyBDb2xsaXNpb25NYXAoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3RpbWVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RpbWVTY2FsZScsIDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbXBhY3RzIG1heGltdW0gdGltZSBzdGVwIGlzIDIwIGZwcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNtYXhTdGVwXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjA1XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhTdGVwID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ21heFN0ZXAnLCAwLjA1KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2RyYXdEZWJ1Z1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHJhd0RlYnVnID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjZGVidWdHcmFwaGljXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYnVnR3JhcGhpYztcclxuXHJcbiAgICAgICAgdmFyIF9tYXhWZWxvY2l0eSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdtYXhWZWxvY2l0eScsIDEwMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNkZWZhdWx0c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUGh5c2ljcy5JbXBhY3QuV29ybGREZWZhdWx0c31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dCb2R5OiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdTaG93Qm9keScsIHRydWUpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dWZWxvY2l0eTogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnU2hvd1ZlbG9jaXR5JywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGJvZHlEZWJ1Z0NvbG9yOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdCb2R5Q29sb3InLCAweGZmMDBmZiksXHJcbiAgICAgICAgICAgIHZlbG9jaXR5RGVidWdDb2xvcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnVmVsb2NpdHlDb2xvcicsIDB4MDBmZjAwKSxcclxuICAgICAgICAgICAgbWF4VmVsb2NpdHlYOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWF4VmVsb2NpdHlYJywgX21heFZlbG9jaXR5KSxcclxuICAgICAgICAgICAgbWF4VmVsb2NpdHlZOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWF4VmVsb2NpdHlZJywgX21heFZlbG9jaXR5KSxcclxuICAgICAgICAgICAgbWluQm91bmNlVmVsb2NpdHk6IEdldEZhc3RWYWx1ZShjb25maWcsICdtaW5Cb3VuY2VWZWxvY2l0eScsIDQwKSxcclxuICAgICAgICAgICAgZ3Jhdml0eUZhY3RvcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2dyYXZpdHlGYWN0b3InLCAxKSxcclxuICAgICAgICAgICAgYm91bmNpbmVzczogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2JvdW5jaW5lc3MnLCAwKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSA0IHdhbGwgYm9kaWVzIHRoYXQgYm91bmQgdGhlIHBoeXNpY3Mgd29ybGQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjd2FsbHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuSW1wYWN0LldvcmxkV2FsbHN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53YWxscyA9IHsgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwsIHRvcDogbnVsbCwgYm90dG9tOiBudWxsIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNkZWx0YVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjX2xhc3RJZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbGFzdElkID0gMDtcclxuXHJcbiAgICAgICAgaWYgKEdldEZhc3RWYWx1ZShjb25maWcsICdzZXRCb3VuZHMnLCBmYWxzZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYm91bmRzQ29uZmlnID0gY29uZmlnWydzZXRCb3VuZHMnXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYm91bmRzQ29uZmlnID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd4JywgMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd5JywgMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBHZXRGYXN0VmFsdWUoYm91bmRzQ29uZmlnLCAnd2lkdGgnLCBzY2VuZS5zeXMuc2NhbGUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICdoZWlnaHQnLCBzY2VuZS5zeXMuc2NhbGUuaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIHZhciB0aGlja25lc3MgPSBHZXRGYXN0VmFsdWUoYm91bmRzQ29uZmlnLCAndGhpY2tuZXNzJywgNjQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBHZXRGYXN0VmFsdWUoYm91bmRzQ29uZmlnLCAnbGVmdCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3JpZ2h0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3RvcCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdHRvbSA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICdib3R0b20nLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJvdW5kcyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aGlja25lc3MsIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyYXdEZWJ1ZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGVidWdHcmFwaGljKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbGxpc2lvbiBtYXAgZm9yIHRoZSB3b3JsZCBlaXRoZXIgZnJvbSBhIFdlbHRtZWlzdGVyIEpTT04gbGV2ZWwgaW4gdGhlIGNhY2hlIG9yIGZyb21cclxuICAgICAqIGEgMkQgYXJyYXkuIElmIGxvYWRpbmcgZnJvbSBhIFdlbHRtZWlzdGVyIGxldmVsLCB0aGUgbWFwIG11c3QgaGF2ZSBhIGxheWVyIGNhbGxlZCBcImNvbGxpc2lvblwiLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldENvbGxpc2lvbk1hcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJbXVtdKX0ga2V5IC0gRWl0aGVyIGEgc3RyaW5nIGtleSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgV2VsdG1laXN0ZXIgbGV2ZWxcclxuICAgICAqIGluIHRoZSBjYWNoZSwgb3IgYSAyRCBhcnJheSBvZiBjb2xsaXNpb24gSURzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlU2l6ZSAtIFRoZSBzaXplIG9mIGEgdGlsZS4gVGhpcyBpcyBvcHRpb25hbCBpZiBsb2FkaW5nIGZyb20gYSBXZWx0bWVpc3RlclxyXG4gICAgICogbGV2ZWwgaW4gdGhlIGNhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwfSBUaGUgbmV3bHkgY3JlYXRlZCBDb2xsaXNpb25NYXAsIG9yIG51bGwgaWYgdGhlIG1ldGhvZCBmYWlsZWQgdG9cclxuICAgICAqIGNyZWF0ZSB0aGUgQ29sbGlzaW9uTWFwLlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25NYXA6IGZ1bmN0aW9uIChrZXksIHRpbGVTaXplKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlbWFwRGF0YSA9IHRoaXMuc2NlbmUuY2FjaGUudGlsZW1hcC5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGlsZW1hcERhdGEgfHwgdGlsZW1hcERhdGEuZm9ybWF0ICE9PSBUSUxFTUFQX0ZPUk1BVFMuV0VMVE1FSVNURVIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIFdlbHRtZWlzdGVyIHRpbGVtYXA6ICcgKyBrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBsYXllcnMgPSB0aWxlbWFwRGF0YS5kYXRhLmxheWVyO1xyXG4gICAgICAgICAgICB2YXIgY29sbGlzaW9uTGF5ZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXJzW2ldLm5hbWUgPT09ICdjb2xsaXNpb24nKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkxheWVyID0gbGF5ZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGlsZVNpemUgPT09IHVuZGVmaW5lZCkgeyB0aWxlU2l6ZSA9IGNvbGxpc2lvbkxheWVyLnRpbGVzaXplOyB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbk1hcCA9IG5ldyBDb2xsaXNpb25NYXAodGlsZVNpemUsIGNvbGxpc2lvbkxheWVyLmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbk1hcCA9IG5ldyBDb2xsaXNpb25NYXAodGlsZVNpemUsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBXZWx0bWVpc3RlciBjb2xsaXNpb24gbWFwIGRhdGE6ICcgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uTWFwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbGxpc2lvbiBtYXAgZm9yIHRoZSB3b3JsZCBmcm9tIGEgdGlsZW1hcCBsYXllci4gT25seSB0aWxlcyB0aGF0IGFyZSBtYXJrZWQgYXNcclxuICAgICAqIGNvbGxpZGluZyB3aWxsIGJlIHVzZWQuIFlvdSBjYW4gc3BlY2lmeSB0aGUgbWFwcGluZyBmcm9tIHRpbGVzIHRvIHNsb3BlIElEcyBpbiBhIGNvdXBsZSBvZlxyXG4gICAgICogd2F5cy4gVGhlIGVhc2llc3QgaXMgdG8gdXNlIFRpbGVkIGFuZCB0aGUgc2xvcGVUaWxlUHJvcGVydHkgb3B0aW9uLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuXHJcbiAgICAgKiBtYW51YWxseSBjcmVhdGUgYSBzbG9wZU1hcCB0aGF0IHN0b3JlcyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRpbGUgaW5kaWNlcyBhbmQgc2xvcGUgSURzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldENvbGxpc2lvbk1hcEZyb21UaWxlbWFwTGF5ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSB0aWxlbWFwTGF5ZXIgLSBUaGUgdGlsZW1hcCBsYXllciB0byB1c2UuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLkltcGFjdC5Db2xsaXNpb25PcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciBjb250cm9sbGluZyB0aGUgbWFwcGluZyBmcm9tIHRpbGVzIHRvIHNsb3BlIElEcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29sbGlzaW9uTWFwfSBUaGUgbmV3bHkgY3JlYXRlZCBDb2xsaXNpb25NYXAuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbk1hcEZyb21UaWxlbWFwTGF5ZXI6IGZ1bmN0aW9uICh0aWxlbWFwTGF5ZXIsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICB2YXIgc2xvcGVQcm9wZXJ0eSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnc2xvcGVQcm9wZXJ0eScsIG51bGwpO1xyXG4gICAgICAgIHZhciBzbG9wZU1hcCA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnc2xvcGVNYXAnLCBudWxsKTtcclxuICAgICAgICB2YXIgY29sbGlkaW5nU2xvcGUgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2RlZmF1bHRDb2xsaWRpbmdTbG9wZScsIG51bGwpO1xyXG4gICAgICAgIHZhciBub25Db2xsaWRpbmdTbG9wZSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnZGVmYXVsdE5vbkNvbGxpZGluZ1Nsb3BlJywgMCk7XHJcblxyXG4gICAgICAgIHZhciBsYXllckRhdGEgPSB0aWxlbWFwTGF5ZXIubGF5ZXI7XHJcbiAgICAgICAgdmFyIHRpbGVTaXplID0gbGF5ZXJEYXRhLmJhc2VUaWxlV2lkdGg7XHJcbiAgICAgICAgdmFyIGNvbGxpc2lvbkRhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdHkgPSAwOyB0eSA8IGxheWVyRGF0YS5oZWlnaHQ7IHR5KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2xsaXNpb25EYXRhW3R5XSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgdHggPSAwOyB0eCA8IGxheWVyRGF0YS53aWR0aDsgdHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBsYXllckRhdGEuZGF0YVt0eV1bdHhdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuY29sbGlkZXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3BlUHJvcGVydHkgIT09IG51bGwgJiYgSGFzVmFsdWUodGlsZS5wcm9wZXJ0aWVzLCBzbG9wZVByb3BlcnR5KSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkRhdGFbdHldW3R4XSA9IHBhcnNlSW50KHRpbGUucHJvcGVydGllc1tzbG9wZVByb3BlcnR5XSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG9wZU1hcCAhPT0gbnVsbCAmJiBIYXNWYWx1ZShzbG9wZU1hcCwgdGlsZS5pbmRleCkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25EYXRhW3R5XVt0eF0gPSBzbG9wZU1hcFt0aWxlLmluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sbGlkaW5nU2xvcGUgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25EYXRhW3R5XVt0eF0gPSBjb2xsaWRpbmdTbG9wZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRGF0YVt0eV1bdHhdID0gdGlsZS5pbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRGF0YVt0eV1bdHhdID0gbm9uQ29sbGlkaW5nU2xvcGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uTWFwID0gbmV3IENvbGxpc2lvbk1hcCh0aWxlU2l6ZSwgY29sbGlzaW9uRGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxpc2lvbk1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib3VuZHMgb2YgdGhlIFBoeXNpY3Mgd29ybGQgdG8gbWF0Y2ggdGhlIGdpdmVuIHdvcmxkIHBpeGVsIGRpbWVuc2lvbnMuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc2V0IHdoaWNoICd3YWxscycgdG8gY3JlYXRlOiBsZWZ0LCByaWdodCwgdG9wIG9yIGJvdHRvbS5cclxuICAgICAqIElmIG5vbmUgb2YgdGhlIHdhbGxzIGFyZSBnaXZlbiBpdCB3aWxsIGRlZmF1bHQgdG8gdXNlIHRoZSB3YWxscyBzZXR0aW5ncyBpdCBoYWQgcHJldmlvdXNseS5cclxuICAgICAqIEkuZS4gaWYgeW91IHByZXZpb3VzbHkgdG9sZCBpdCB0byBub3QgaGF2ZSB0aGUgbGVmdCBvciByaWdodCB3YWxscywgYW5kIHlvdSB0aGVuIGFkanVzdCB0aGUgd29ybGQgc2l6ZVxyXG4gICAgICogdGhlIG5ld2x5IGNyZWF0ZWQgYm91bmRzIHdpbGwgYWxzbyBub3QgaGF2ZSB0aGUgbGVmdCBhbmQgcmlnaHQgd2FsbHMuXHJcbiAgICAgKiBFeHBsaWNpdGx5IHN0YXRlIHRoZW0gaW4gdGhlIHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNzZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RoaWNrbmVzcz02NF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWZ0PXRydWVdIC0gSWYgdHJ1ZSB3aWxsIGNyZWF0ZSB0aGUgbGVmdCBib3VuZHMgd2FsbC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JpZ2h0PXRydWVdIC0gSWYgdHJ1ZSB3aWxsIGNyZWF0ZSB0aGUgcmlnaHQgYm91bmRzIHdhbGwuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b3A9dHJ1ZV0gLSBJZiB0cnVlIHdpbGwgY3JlYXRlIHRoZSB0b3AgYm91bmRzIHdhbGwuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtib3R0b209dHJ1ZV0gLSBJZiB0cnVlIHdpbGwgY3JlYXRlIHRoZSBib3R0b20gYm91bmRzIHdhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGhpY2tuZXNzLCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLmhlaWdodDsgfVxyXG4gICAgICAgIGlmICh0aGlja25lc3MgPT09IHVuZGVmaW5lZCkgeyB0aGlja25lc3MgPSA2NDsgfVxyXG4gICAgICAgIGlmIChsZWZ0ID09PSB1bmRlZmluZWQpIHsgbGVmdCA9IHRydWU7IH1cclxuICAgICAgICBpZiAocmlnaHQgPT09IHVuZGVmaW5lZCkgeyByaWdodCA9IHRydWU7IH1cclxuICAgICAgICBpZiAodG9wID09PSB1bmRlZmluZWQpIHsgdG9wID0gdHJ1ZTsgfVxyXG4gICAgICAgIGlmIChib3R0b20gPT09IHVuZGVmaW5lZCkgeyBib3R0b20gPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlV2FsbChsZWZ0LCAnbGVmdCcsIHggLSB0aGlja25lc3MsIHksIHRoaWNrbmVzcywgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGwocmlnaHQsICdyaWdodCcsIHggKyB3aWR0aCwgeSwgdGhpY2tuZXNzLCBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2FsbCh0b3AsICd0b3AnLCB4LCB5IC0gdGhpY2tuZXNzLCB3aWR0aCwgdGhpY2tuZXNzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGwoYm90dG9tLCAnYm90dG9tJywgeCwgeSArIGhlaWdodCwgd2lkdGgsIHRoaWNrbmVzcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIHBvc2l0aW9uID0gJ2xlZnQnLCAncmlnaHQnLCAndG9wJyBvciAnYm90dG9tJ1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3VwZGF0ZVdhbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVdhbGw6IGZ1bmN0aW9uIChhZGQsIHBvc2l0aW9uLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB3YWxsID0gdGhpcy53YWxsc1twb3NpdGlvbl07XHJcblxyXG4gICAgICAgIGlmIChhZGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAod2FsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2FsbC5yZXNldFNpemUoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhbGxzW3Bvc2l0aW9uXSA9IHRoaXMuY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsc1twb3NpdGlvbl0ubmFtZSA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsc1twb3NpdGlvbl0uZ3Jhdml0eUZhY3RvciA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhbGxzW3Bvc2l0aW9uXS5jb2xsaWRlcyA9IENPTExJREVTLkZJWEVEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh3YWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJvZGllcy5yZW1vdmUod2FsbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMud2FsbHNbcG9zaXRpb25dID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIEdyYXBoaWNzIEdhbWUgT2JqZWN0IHVzZWQgZm9yIGRlYnVnIGRpc3BsYXkgYW5kIGVuYWJsZXMgdGhlIHdvcmxkIGZvciBkZWJ1ZyBkcmF3aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2NyZWF0ZURlYnVnR3JhcGhpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGUgR3JhcGhpY3Mgb2JqZWN0IGNyZWF0ZWQgdGhhdCB3aWxsIGhhdmUgdGhlIGRlYnVnIHZpc3VhbHMgZHJhd24gdG8gaXQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZURlYnVnR3JhcGhpYzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ3JhcGhpYyA9IHRoaXMuc2NlbmUuc3lzLmFkZC5ncmFwaGljcyh7IHg6IDAsIHk6IDAgfSk7XHJcblxyXG4gICAgICAgIGdyYXBoaWMuc2V0RGVwdGgoTnVtYmVyLk1BWF9WQUxVRSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVidWdHcmFwaGljID0gZ3JhcGhpYztcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3RGVidWcgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gZ3JhcGhpYztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjZ2V0TmV4dElEXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldE5leHRJRDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdElkKys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplWCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplWSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gVGhlIEJvZHkgdGhhdCB3YXMgYWRkZWQgdG8gdGhpcyBXb3JsZC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoeCwgeSwgc2l6ZVgsIHNpemVZKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib2R5ID0gbmV3IEJvZHkodGhpcywgeCwgeSwgc2l6ZVgsIHNpemVZKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib2RpZXMuc2V0KGJvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBvYmplY3QgLSBUaGUgQm9keSB0byByZW1vdmUgZnJvbSB0aGlzIFdvcmxkLlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChvYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2RpZXMuZGVsZXRlKG9iamVjdCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3BhdXNlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkV2ZW50cyNQQVVTRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUEFVU0UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjcmVzdW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkV2ZW50cyNSRVNVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFU1VNRSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmJvZGllcy5zaXplID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEltcGFjdCB1c2VzIGEgZGl2aWRlZCBkZWx0YSB2YWx1ZSB0aGF0IGlzIGNsYW1wZWQgdG8gdGhlIG1heFN0ZXAgKDIwZnBzKSBtYXhpbXVtXHJcblxyXG4gICAgICAgIHZhciBjbGFtcGVkRGVsdGEgPSBNYXRoLm1pbihkZWx0YSAvIDEwMDAsIHRoaXMubWF4U3RlcCkgKiB0aGlzLnRpbWVTY2FsZTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWx0YSA9IGNsYW1wZWREZWx0YTtcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSBhbGwgYWN0aXZlIGJvZGllc1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgYm9keTtcclxuICAgICAgICB2YXIgYm9kaWVzID0gdGhpcy5ib2RpZXMuZW50cmllcztcclxuICAgICAgICB2YXIgbGVuID0gYm9kaWVzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaGFzaCA9IHt9O1xyXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5jZWxsU2l6ZTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZHkudXBkYXRlKGNsYW1wZWREZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSdW4gY29sbGlzaW9uIGFnYWluc3QgdGhlbSBhbGwgbm93IHRoZXkncmUgaW4gdGhlIG5ldyBwb3NpdGlvbnMgZnJvbSB0aGUgdXBkYXRlXHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZHkgPSBib2RpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keSAmJiAhYm9keS5za2lwSGFzaCgpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSGFzaChib2R5LCBoYXNoLCBzaXplKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJhd0RlYnVnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdyYXBoaWNzID0gdGhpcy5kZWJ1Z0dyYXBoaWM7XHJcblxyXG4gICAgICAgICAgICBncmFwaGljcy5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5ICYmIGJvZHkud2lsbERyYXdEZWJ1ZygpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkuZHJhd0RlYnVnKGdyYXBoaWNzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB0aGUgYm9keSBhZ2FpbnN0IHRoZSBzcGF0aWFsIGhhc2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjY2hlY2tIYXNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGhhc2ggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY2hlY2tIYXNoOiBmdW5jdGlvbiAoYm9keSwgaGFzaCwgc2l6ZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY2hlY2tlZCA9IHt9O1xyXG5cclxuICAgICAgICB2YXIgeG1pbiA9IE1hdGguZmxvb3IoYm9keS5wb3MueCAvIHNpemUpO1xyXG4gICAgICAgIHZhciB5bWluID0gTWF0aC5mbG9vcihib2R5LnBvcy55IC8gc2l6ZSk7XHJcbiAgICAgICAgdmFyIHhtYXggPSBNYXRoLmZsb29yKChib2R5LnBvcy54ICsgYm9keS5zaXplLngpIC8gc2l6ZSkgKyAxO1xyXG4gICAgICAgIHZhciB5bWF4ID0gTWF0aC5mbG9vcigoYm9keS5wb3MueSArIGJvZHkuc2l6ZS55KSAvIHNpemUpICsgMTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IHhtaW47IHggPCB4bWF4OyB4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0geW1pbjsgeSA8IHltYXg7IHkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNoW3hdKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc2hbeF0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBoYXNoW3hdW3ldID0gWyBib2R5IF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaGFzaFt4XVt5XSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNoW3hdW3ldID0gWyBib2R5IF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBoYXNoW3hdW3ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNlbGwubGVuZ3RoOyBjKyspXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS50b3VjaGVzKGNlbGxbY10pICYmICFjaGVja2VkW2NlbGxbY10uaWRdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkW2NlbGxbY10uaWRdID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQm9kaWVzKGJvZHksIGNlbGxbY10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjZWxsLnB1c2goYm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI2NoZWNrQm9kaWVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5QSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHl9IGJvZHlCIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjaGVja0JvZGllczogZnVuY3Rpb24gKGJvZHlBLCBib2R5QilcclxuICAgIHtcclxuICAgICAgICAvLyAgMiBmaXhlZCBib2RpZXMgd29uJ3QgZG8gYW55dGhpbmdcclxuICAgICAgICBpZiAoYm9keUEuY29sbGlkZXMgPT09IENPTExJREVTLkZJWEVEICYmIGJvZHlCLmNvbGxpZGVzID09PSBDT0xMSURFUy5GSVhFRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBiaXR3aXNlIGNoZWNrc1xyXG4gICAgICAgIGlmIChib2R5QS5jaGVja0FnYWluc3QgJiBib2R5Qi50eXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9keUEuY2hlY2soYm9keUIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlCLmNoZWNrQWdhaW5zdCAmIGJvZHlBLnR5cGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5Qi5jaGVjayhib2R5QSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYm9keUEuY29sbGlkZXMgJiYgYm9keUIuY29sbGlkZXMgJiYgYm9keUEuY29sbGlkZXMgKyBib2R5Qi5jb2xsaWRlcyA+IENPTExJREVTLkFDVElWRSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNvbHZlcih0aGlzLCBib2R5QSwgYm9keUIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjc2V0Q29sbGlkZXNOZXZlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keVtdfSBib2RpZXMgLSBBbiBBcnJheSBvZiBJbXBhY3QgQm9kaWVzIHRvIHNldCB0aGUgY29sbGlkZXMgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlkZXNOZXZlcjogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS5jb2xsaWRlcyA9IENPTExJREVTLk5FVkVSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldExpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIGNvbGxpZGVzIHZhbHVlIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldExpdGU6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2RpZXNbaV0uY29sbGlkZXMgPSBDT0xMSURFUy5MSVRFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldFBhc3NpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIGNvbGxpZGVzIHZhbHVlIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhc3NpdmU6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2RpZXNbaV0uY29sbGlkZXMgPSBDT0xMSURFUy5QQVNTSVZFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldEFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keVtdfSBib2RpZXMgLSBBbiBBcnJheSBvZiBJbXBhY3QgQm9kaWVzIHRvIHNldCB0aGUgY29sbGlkZXMgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlOiBmdW5jdGlvbiAoYm9kaWVzKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9kaWVzW2ldLmNvbGxpZGVzID0gQ09MTElERVMuQUNUSVZFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldEZpeGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5W119IGJvZGllcyAtIEFuIEFycmF5IG9mIEltcGFjdCBCb2RpZXMgdG8gc2V0IHRoZSBjb2xsaWRlcyB2YWx1ZSBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IFRoaXMgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGaXhlZDogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS5jb2xsaWRlcyA9IENPTExJREVTLkZJWEVEO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldFR5cGVOb25lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5W119IGJvZGllcyAtIEFuIEFycmF5IG9mIEltcGFjdCBCb2RpZXMgdG8gc2V0IHRoZSB0eXBlIHZhbHVlIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFR5cGVOb25lOiBmdW5jdGlvbiAoYm9kaWVzKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9kaWVzW2ldLnR5cGUgPSBUWVBFLk5PTkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjc2V0VHlwZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIHR5cGUgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VHlwZUE6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2RpZXNbaV0udHlwZSA9IFRZUEUuQTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNzZXRUeXBlQlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keVtdfSBib2RpZXMgLSBBbiBBcnJheSBvZiBJbXBhY3QgQm9kaWVzIHRvIHNldCB0aGUgdHlwZSB2YWx1ZSBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IFRoaXMgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUeXBlQjogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS50eXBlID0gVFlQRS5CO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldEF2c0JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIHR5cGUgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QXZzQjogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS50eXBlID0gVFlQRS5BO1xyXG4gICAgICAgICAgICBib2RpZXNbaV0uY2hlY2tBZ2FpbnN0ID0gVFlQRS5CO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldEJ2c0FcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIHR5cGUgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QnZzQTogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS50eXBlID0gVFlQRS5CO1xyXG4gICAgICAgICAgICBib2RpZXNbaV0uY2hlY2tBZ2FpbnN0ID0gVFlQRS5BO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NldENoZWNrQWdhaW5zdE5vbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LkJvZHlbXX0gYm9kaWVzIC0gQW4gQXJyYXkgb2YgSW1wYWN0IEJvZGllcyB0byBzZXQgdGhlIHR5cGUgdmFsdWUgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkfSBUaGlzIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hlY2tBZ2FpbnN0Tm9uZTogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZGllc1tpXS5jaGVja0FnYWluc3QgPSBUWVBFLk5PTkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjc2V0Q2hlY2tBZ2FpbnN0QVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keVtdfSBib2RpZXMgLSBBbiBBcnJheSBvZiBJbXBhY3QgQm9kaWVzIHRvIHNldCB0aGUgdHlwZSB2YWx1ZSBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGR9IFRoaXMgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDaGVja0FnYWluc3RBOiBmdW5jdGlvbiAoYm9kaWVzKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYm9kaWVzW2ldLmNoZWNrQWdhaW5zdCA9IFRZUEUuQTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZCNzZXRDaGVja0FnYWluc3RCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5W119IGJvZGllcyAtIEFuIEFycmF5IG9mIEltcGFjdCBCb2RpZXMgdG8gc2V0IHRoZSB0eXBlIHZhbHVlIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Xb3JsZH0gVGhpcyBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENoZWNrQWdhaW5zdEI6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2RpZXNbaV0uY2hlY2tBZ2FpbnN0ID0gVFlQRS5CO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LldvcmxkI3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuV29ybGQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuYm9kaWVzLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYm9kaWVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb25NYXAgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmxkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/World.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Acceleration.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Acceleration.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Acceleration component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Acceleration\r\n * @since 3.0.0\r\n */\r\nvar Acceleration = {\r\n\r\n    /**\r\n     * Sets the horizontal acceleration of this body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Acceleration#setAccelerationX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of acceleration to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAccelerationX: function (x)\r\n    {\r\n        this.accel.x = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical acceleration of this body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Acceleration#setAccelerationY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - The amount of acceleration to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAccelerationY: function (y)\r\n    {\r\n        this.accel.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical acceleration of this body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Acceleration#setAcceleration\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The amount of horizontal acceleration to apply.\r\n     * @param {number} y - The amount of vertical acceleration to apply.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAcceleration: function (x, y)\r\n    {\r\n        this.accel.x = x;\r\n        this.accel.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Acceleration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0FjY2VsZXJhdGlvbi5qcz9mNzBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L2NvbXBvbmVudHMvQWNjZWxlcmF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEltcGFjdCBBY2NlbGVyYXRpb24gY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkFjY2VsZXJhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBBY2NlbGVyYXRpb24gPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIGFjY2VsZXJhdGlvbiBvZiB0aGlzIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5BY2NlbGVyYXRpb24jc2V0QWNjZWxlcmF0aW9uWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgYW1vdW50IG9mIGFjY2VsZXJhdGlvbiB0byBhcHBseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBY2NlbGVyYXRpb25YOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjY2VsLnggPSB4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBhY2NlbGVyYXRpb24gb2YgdGhpcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQWNjZWxlcmF0aW9uI3NldEFjY2VsZXJhdGlvbllcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGFtb3VudCBvZiBhY2NlbGVyYXRpb24gdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWNjZWxlcmF0aW9uWTogZnVuY3Rpb24gKHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY2NlbC55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWNjZWxlcmF0aW9uIG9mIHRoaXMgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkFjY2VsZXJhdGlvbiNzZXRBY2NlbGVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCBvZiBob3Jpem9udGFsIGFjY2VsZXJhdGlvbiB0byBhcHBseS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBhY2NlbGVyYXRpb24gdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWNjZWxlcmF0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjY2VsLnggPSB4O1xyXG4gICAgICAgIHRoaXMuYWNjZWwueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWNjZWxlcmF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Acceleration.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/BodyScale.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/BodyScale.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Body Scale component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.BodyScale\r\n * @since 3.0.0\r\n */\r\nvar BodyScale = {\r\n\r\n    /**\r\n     * Sets the size of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyScale#setBodySize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the body in pixels.\r\n     * @param {number} [height=width] - The height of the body in pixels.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setBodySize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.body.size.x = Math.round(width);\r\n        this.body.size.y = Math.round(height);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scale of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyScale#setBodyScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} scaleX - The horizontal scale of the body.\r\n     * @param {number} [scaleY] - The vertical scale of the body. If not given, will use the horizontal scale value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setBodyScale: function (scaleX, scaleY)\r\n    {\r\n        if (scaleY === undefined) { scaleY = scaleX; }\r\n\r\n        var gameObject = this.body.gameObject;\r\n\r\n        if (gameObject)\r\n        {\r\n            gameObject.setScale(scaleX, scaleY);\r\n\r\n            return this.setBodySize(gameObject.width * gameObject.scaleX, gameObject.height * gameObject.scaleY);\r\n        }\r\n        else\r\n        {\r\n            return this.setBodySize(this.body.size.x * scaleX, this.body.size.y * scaleY);\r\n        }\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = BodyScale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0JvZHlTY2FsZS5qcz85MDkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGlCQUFpQjs7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9Cb2R5U2NhbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW1wYWN0IEJvZHkgU2NhbGUgY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvZHlTY2FsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBCb2R5U2NhbGUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBwaHlzaWNzIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Cb2R5U2NhbGUjc2V0Qm9keVNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgYm9keSBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBib2R5IGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb2R5U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5zaXplLnggPSBNYXRoLnJvdW5kKHdpZHRoKTtcclxuICAgICAgICB0aGlzLmJvZHkuc2l6ZS55ID0gTWF0aC5yb3VuZChoZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY2FsZSBvZiB0aGUgcGh5c2ljcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVNjYWxlI3NldEJvZHlTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIG9mIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZVldIC0gVGhlIHZlcnRpY2FsIHNjYWxlIG9mIHRoZSBib2R5LiBJZiBub3QgZ2l2ZW4sIHdpbGwgdXNlIHRoZSBob3Jpem9udGFsIHNjYWxlIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvZHlTY2FsZTogZnVuY3Rpb24gKHNjYWxlWCwgc2NhbGVZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzY2FsZVkgPT09IHVuZGVmaW5lZCkgeyBzY2FsZVkgPSBzY2FsZVg7IH1cclxuXHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLmJvZHkuZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldFNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEJvZHlTaXplKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0LnNjYWxlWCwgZ2FtZU9iamVjdC5oZWlnaHQgKiBnYW1lT2JqZWN0LnNjYWxlWSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEJvZHlTaXplKHRoaXMuYm9keS5zaXplLnggKiBzY2FsZVgsIHRoaXMuYm9keS5zaXplLnkgKiBzY2FsZVkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvZHlTY2FsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/BodyScale.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/BodyType.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/BodyType.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TYPE = __webpack_require__(/*! ../TYPE */ \"./node_modules/phaser/src/physics/impact/TYPE.js\");\r\n\r\n/**\r\n * The Impact Body Type component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.BodyType\r\n * @since 3.0.0\r\n */\r\nvar BodyType = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyType#getBodyType\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    getBodyType: function ()\r\n    {\r\n        return this.body.type;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyType#setTypeNone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setTypeNone: function ()\r\n    {\r\n        this.body.type = TYPE.NONE;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyType#setTypeA\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setTypeA: function ()\r\n    {\r\n        this.body.type = TYPE.A;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.BodyType#setTypeB\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setTypeB: function ()\r\n    {\r\n        this.body.type = TYPE.B;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = BodyType;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0JvZHlUeXBlLmpzPzE5ZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxpRUFBUzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9Cb2R5VHlwZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRZUEUgPSByZXF1aXJlKCcuLi9UWVBFJyk7XHJcblxyXG4vKipcclxuICogVGhlIEltcGFjdCBCb2R5IFR5cGUgY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkJvZHlUeXBlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIEJvZHlUeXBlID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVR5cGUjZ2V0Qm9keVR5cGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRCb2R5VHlwZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ib2R5LnR5cGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVR5cGUjc2V0VHlwZU5vbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUeXBlTm9uZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkudHlwZSA9IFRZUEUuTk9ORTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVR5cGUjc2V0VHlwZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUeXBlQTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkudHlwZSA9IFRZUEUuQTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm9keVR5cGUjc2V0VHlwZUJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUeXBlQjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkudHlwZSA9IFRZUEUuQjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb2R5VHlwZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/BodyType.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Bounce.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Bounce.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Bounce component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Bounce\r\n * @since 3.0.0\r\n */\r\nvar Bounce = {\r\n\r\n    /**\r\n     * Sets the impact physics bounce, or restitution, value.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Bounce#setBounce\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - A value between 0 (no rebound) and 1 (full rebound)\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setBounce: function (value)\r\n    {\r\n        this.body.bounciness = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the minimum velocity the body is allowed to be moving to be considered for rebound.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Bounce#setMinBounceVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The minimum allowed velocity.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setMinBounceVelocity: function (value)\r\n    {\r\n        this.body.minBounceVelocity = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The bounce, or restitution, value of this body.\r\n     * A value between 0 (no rebound) and 1 (full rebound)\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Bounce#bounce\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    bounce: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.bounciness;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.bounciness = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Bounce;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0JvdW5jZS5qcz9mNmFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0JvdW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgQm91bmNlIGNvbXBvbmVudC5cclxuICogU2hvdWxkIGJlIGFwcGxpZWQgYXMgYSBtaXhpbi5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Cb3VuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgQm91bmNlID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW1wYWN0IHBoeXNpY3MgYm91bmNlLCBvciByZXN0aXR1dGlvbiwgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Cb3VuY2Ujc2V0Qm91bmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIHZhbHVlIGJldHdlZW4gMCAobm8gcmVib3VuZCkgYW5kIDEgKGZ1bGwgcmVib3VuZClcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmNlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmJvdW5jaW5lc3MgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWluaW11bSB2ZWxvY2l0eSB0aGUgYm9keSBpcyBhbGxvd2VkIHRvIGJlIG1vdmluZyB0byBiZSBjb25zaWRlcmVkIGZvciByZWJvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm91bmNlI3NldE1pbkJvdW5jZVZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbWluaW11bSBhbGxvd2VkIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNaW5Cb3VuY2VWZWxvY2l0eTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5taW5Cb3VuY2VWZWxvY2l0eSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm91bmNlLCBvciByZXN0aXR1dGlvbiwgdmFsdWUgb2YgdGhpcyBib2R5LlxyXG4gICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgKG5vIHJlYm91bmQpIGFuZCAxIChmdWxsIHJlYm91bmQpXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQm91bmNlI2JvdW5jZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3VuY2U6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5ib3VuY2luZXNzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmJvdW5jaW5lc3MgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQm91bmNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Bounce.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/CheckAgainst.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/CheckAgainst.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TYPE = __webpack_require__(/*! ../TYPE */ \"./node_modules/phaser/src/physics/impact/TYPE.js\");\r\n\r\n/**\r\n * The Impact Check Against component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.CheckAgainst\r\n * @since 3.0.0\r\n */\r\nvar CheckAgainst = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.CheckAgainst#setAvsB\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setAvsB: function ()\r\n    {\r\n        this.setTypeA();\r\n\r\n        return this.setCheckAgainstB();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.CheckAgainst#setBvsA\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setBvsA: function ()\r\n    {\r\n        this.setTypeB();\r\n\r\n        return this.setCheckAgainstA();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.CheckAgainst#setCheckAgainstNone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCheckAgainstNone: function ()\r\n    {\r\n        this.body.checkAgainst = TYPE.NONE;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.CheckAgainst#setCheckAgainstA\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCheckAgainstA: function ()\r\n    {\r\n        this.body.checkAgainst = TYPE.A;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.CheckAgainst#setCheckAgainstB\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCheckAgainstB: function ()\r\n    {\r\n        this.body.checkAgainst = TYPE.B;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.CheckAgainst#checkAgainst\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    checkAgainst: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.checkAgainst;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.checkAgainst = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = CheckAgainst;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0NoZWNrQWdhaW5zdC5qcz8yMzVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsaUVBQVM7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0NoZWNrQWdhaW5zdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRZUEUgPSByZXF1aXJlKCcuLi9UWVBFJyk7XHJcblxyXG4vKipcclxuICogVGhlIEltcGFjdCBDaGVjayBBZ2FpbnN0IGNvbXBvbmVudC5cclxuICogU2hvdWxkIGJlIGFwcGxpZWQgYXMgYSBtaXhpbi5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5DaGVja0FnYWluc3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgQ2hlY2tBZ2FpbnN0ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0I3NldEF2c0JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBdnNCOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2V0VHlwZUEoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q2hlY2tBZ2FpbnN0QigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNoZWNrQWdhaW5zdCNzZXRCdnNBXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QnZzQTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFR5cGVCKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldENoZWNrQWdhaW5zdEEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5DaGVja0FnYWluc3Qjc2V0Q2hlY2tBZ2FpbnN0Tm9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENoZWNrQWdhaW5zdE5vbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmNoZWNrQWdhaW5zdCA9IFRZUEUuTk9ORTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0I3NldENoZWNrQWdhaW5zdEFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDaGVja0FnYWluc3RBOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5jaGVja0FnYWluc3QgPSBUWVBFLkE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNoZWNrQWdhaW5zdCNzZXRDaGVja0FnYWluc3RCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hlY2tBZ2FpbnN0QjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuY2hlY2tBZ2FpbnN0ID0gVFlQRS5CO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ2hlY2tBZ2FpbnN0I2NoZWNrQWdhaW5zdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjaGVja0FnYWluc3Q6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5jaGVja0FnYWluc3Q7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuY2hlY2tBZ2FpbnN0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENoZWNrQWdhaW5zdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/CheckAgainst.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Collides.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Collides.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar COLLIDES = __webpack_require__(/*! ../COLLIDES */ \"./node_modules/phaser/src/physics/impact/COLLIDES.js\");\r\n\r\n/**\r\n * @callback CollideCallback\r\n *\r\n * @param {Phaser.Physics.Impact.Body} body - [description]\r\n * @param {Phaser.Physics.Impact.Body} other - [description]\r\n * @param {string} axis - [description]\r\n */\r\n\r\n/**\r\n * The Impact Collides component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Collides\r\n * @since 3.0.0\r\n */\r\nvar Collides = {\r\n\r\n    _collideCallback: null,\r\n    _callbackScope: null,\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setCollideCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {CollideCallback} callback - [description]\r\n     * @param {*} scope - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCollideCallback: function (callback, scope)\r\n    {\r\n        this._collideCallback = callback;\r\n\r\n        if (scope)\r\n        {\r\n            this._callbackScope = scope;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setCollidesNever\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCollidesNever: function ()\r\n    {\r\n        this.body.collides = COLLIDES.NEVER;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setLiteCollision\r\n     * @since 3.6.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setLiteCollision: function ()\r\n    {\r\n        this.body.collides = COLLIDES.LITE;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setPassiveCollision\r\n     * @since 3.6.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setPassiveCollision: function ()\r\n    {\r\n        this.body.collides = COLLIDES.PASSIVE;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setActiveCollision\r\n     * @since 3.6.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setActiveCollision: function ()\r\n    {\r\n        this.body.collides = COLLIDES.ACTIVE;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Collides#setFixedCollision\r\n     * @since 3.6.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFixedCollision: function ()\r\n    {\r\n        this.body.collides = COLLIDES.FIXED;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Collides#collides\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    collides: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.collides;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.collides = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Collides;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0NvbGxpZGVzLmpzPzgyZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx5RUFBYTs7QUFFcEM7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L2NvbXBvbmVudHMvQ29sbGlkZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT0xMSURFUyA9IHJlcXVpcmUoJy4uL0NPTExJREVTJyk7XHJcblxyXG4vKipcclxuICogQGNhbGxiYWNrIENvbGxpZGVDYWxsYmFja1xyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBvdGhlciAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXMgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgQ29sbGlkZXMgY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNvbGxpZGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIENvbGxpZGVzID0ge1xyXG5cclxuICAgIF9jb2xsaWRlQ2FsbGJhY2s6IG51bGwsXHJcbiAgICBfY2FsbGJhY2tTY29wZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNvbGxpZGVzI3NldENvbGxpZGVDYWxsYmFja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDb2xsaWRlQ2FsbGJhY2t9IGNhbGxiYWNrIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHsqfSBzY29wZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlkZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIHNjb3BlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2NvbGxpZGVDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICBpZiAoc2NvcGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja1Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5Db2xsaWRlcyNzZXRDb2xsaWRlc05ldmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlkZXNOZXZlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuY29sbGlkZXMgPSBDT0xMSURFUy5ORVZFUjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXMjc2V0TGl0ZUNvbGxpc2lvblxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldExpdGVDb2xsaXNpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmNvbGxpZGVzID0gQ09MTElERVMuTElURTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXMjc2V0UGFzc2l2ZUNvbGxpc2lvblxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhc3NpdmVDb2xsaXNpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ib2R5LmNvbGxpZGVzID0gQ09MTElERVMuUEFTU0lWRTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXMjc2V0QWN0aXZlQ29sbGlzaW9uXHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlQ29sbGlzaW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5jb2xsaWRlcyA9IENPTExJREVTLkFDVElWRTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuQ29sbGlkZXMjc2V0Rml4ZWRDb2xsaXNpb25cclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGaXhlZENvbGxpc2lvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuY29sbGlkZXMgPSBDT0xMSURFUy5GSVhFRDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkNvbGxpZGVzI2NvbGxpZGVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkuY29sbGlkZXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuY29sbGlkZXMgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sbGlkZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Collides.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Debug.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Debug.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Debug component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Debug\r\n * @since 3.0.0\r\n */\r\nvar Debug = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Debug#setDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} showBody - [description]\r\n     * @param {boolean} showVelocity - [description]\r\n     * @param {number} bodyColor - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setDebug: function (showBody, showVelocity, bodyColor)\r\n    {\r\n        this.debugShowBody = showBody;\r\n        this.debugShowVelocity = showVelocity;\r\n        this.debugBodyColor = bodyColor;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Debug#setDebugBodyColor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setDebugBodyColor: function (value)\r\n    {\r\n        this.body.debugBodyColor = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Debug#debugShowBody\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    debugShowBody: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugShowBody;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugShowBody = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Debug#debugShowVelocity\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    debugShowVelocity: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugShowVelocity;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugShowVelocity = value;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Debug#debugBodyColor\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    debugBodyColor: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.debugBodyColor;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.debugBodyColor = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Debug;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0RlYnVnLmpzP2JiMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9EZWJ1Zy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgRGVidWcgY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkRlYnVnXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIERlYnVnID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRGVidWcjc2V0RGVidWdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0JvZHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dWZWxvY2l0eSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib2R5Q29sb3IgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERlYnVnOiBmdW5jdGlvbiAoc2hvd0JvZHksIHNob3dWZWxvY2l0eSwgYm9keUNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93Qm9keSA9IHNob3dCb2R5O1xyXG4gICAgICAgIHRoaXMuZGVidWdTaG93VmVsb2NpdHkgPSBzaG93VmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0JvZHlDb2xvciA9IGJvZHlDb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRGVidWcjc2V0RGVidWdCb2R5Q29sb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RGVidWdCb2R5Q29sb3I6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZGVidWdCb2R5Q29sb3IgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkRlYnVnI2RlYnVnU2hvd0JvZHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlYnVnU2hvd0JvZHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5kZWJ1Z1Nob3dCb2R5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmRlYnVnU2hvd0JvZHkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5EZWJ1ZyNkZWJ1Z1Nob3dWZWxvY2l0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVidWdTaG93VmVsb2NpdHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5kZWJ1Z1Nob3dWZWxvY2l0eTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keS5kZWJ1Z1Nob3dWZWxvY2l0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkRlYnVnI2RlYnVnQm9keUNvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlYnVnQm9keUNvbG9yOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkuZGVidWdCb2R5Q29sb3I7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGVidWdCb2R5Q29sb3IgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVidWc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Debug.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Friction.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Friction.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Friction component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Friction\r\n * @since 3.0.0\r\n */\r\nvar Friction = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Friction#setFrictionX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFrictionX: function (x)\r\n    {\r\n        this.friction.x = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Friction#setFrictionY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFrictionY: function (y)\r\n    {\r\n        this.friction.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Friction#setFriction\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFriction: function (x, y)\r\n    {\r\n        this.friction.x = x;\r\n        this.friction.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Friction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0ZyaWN0aW9uLmpzP2EwMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9GcmljdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgRnJpY3Rpb24gY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkZyaWN0aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIEZyaWN0aW9uID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuRnJpY3Rpb24jc2V0RnJpY3Rpb25YXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJpY3Rpb25YOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZyaWN0aW9uLnggPSB4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5GcmljdGlvbiNzZXRGcmljdGlvbllcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvblk6IGZ1bmN0aW9uICh5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJpY3Rpb24ueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLkZyaWN0aW9uI3NldEZyaWN0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmljdGlvbi54ID0geDtcclxuICAgICAgICB0aGlzLmZyaWN0aW9uLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZyaWN0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Friction.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Gravity.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Gravity.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Gravity component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Gravity\r\n * @since 3.0.0\r\n */\r\nvar Gravity = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Gravity#setGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setGravity: function (value)\r\n    {\r\n        this.body.gravityFactor = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @name Phaser.Physics.Impact.Components.Gravity#gravity\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    gravity: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.gravityFactor;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.body.gravityFactor = value;\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Gravity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL0dyYXZpdHkuanM/MGExMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L2NvbXBvbmVudHMvR3Jhdml0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgR3Jhdml0eSBjb21wb25lbnQuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4uXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuR3Jhdml0eVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBHcmF2aXR5ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuR3Jhdml0eSNzZXRHcmF2aXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdyYXZpdHk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZ3Jhdml0eUZhY3RvciA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuR3Jhdml0eSNncmF2aXR5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGdyYXZpdHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5ncmF2aXR5RmFjdG9yO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmdyYXZpdHlGYWN0b3IgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3Jhdml0eTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Gravity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Offset.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Offset.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Offset component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Offset\r\n * @since 3.0.0\r\n */\r\nvar Offset = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Offset#setOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} [width] - [description]\r\n     * @param {number} [height] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setOffset: function (x, y, width, height)\r\n    {\r\n        this.body.offset.x = x;\r\n        this.body.offset.y = y;\r\n\r\n        if (width)\r\n        {\r\n            this.setBodySize(width, height);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL09mZnNldC5qcz8wNjcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9PZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW1wYWN0IE9mZnNldCBjb21wb25lbnQuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4uXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuT2Zmc2V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIE9mZnNldCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLk9mZnNldCNzZXRPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkub2Zmc2V0LnggPSB4O1xyXG4gICAgICAgIHRoaXMuYm9keS5vZmZzZXQueSA9IHk7XHJcblxyXG4gICAgICAgIGlmICh3aWR0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Qm9keVNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Offset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/SetGameObject.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/SetGameObject.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Set Game Object component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.SetGameObject\r\n * @since 3.0.0\r\n */\r\nvar SetGameObject = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.SetGameObject#setGameObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - [description]\r\n     * @param {boolean} [sync=true] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setGameObject: function (gameObject, sync)\r\n    {\r\n        if (sync === undefined) { sync = true; }\r\n\r\n        if (gameObject)\r\n        {\r\n            this.body.gameObject = gameObject;\r\n\r\n            if (sync)\r\n            {\r\n                this.syncGameObject();\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.body.gameObject = null;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.SetGameObject#syncGameObject\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    syncGameObject: function ()\r\n    {\r\n        var gameObject = this.body.gameObject;\r\n\r\n        if (gameObject)\r\n        {\r\n            this.setBodySize(gameObject.width * gameObject.scaleX, gameObject.height * gameObject.scaleY);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = SetGameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL1NldEdhbWVPYmplY3QuanM/NzI5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxhQUFhOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL1NldEdhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW1wYWN0IFNldCBHYW1lIE9iamVjdCBjb21wb25lbnQuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4uXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuU2V0R2FtZU9iamVjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBTZXRHYW1lT2JqZWN0ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuU2V0R2FtZU9iamVjdCNzZXRHYW1lT2JqZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3luYz10cnVlXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0R2FtZU9iamVjdDogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHN5bmMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN5bmMgPT09IHVuZGVmaW5lZCkgeyBzeW5jID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keS5nYW1lT2JqZWN0ID0gZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzeW5jKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNHYW1lT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmdhbWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuU2V0R2FtZU9iamVjdCNzeW5jR2FtZU9iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN5bmNHYW1lT2JqZWN0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5ib2R5LmdhbWVPYmplY3Q7XHJcblxyXG4gICAgICAgIGlmIChnYW1lT2JqZWN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRCb2R5U2l6ZShnYW1lT2JqZWN0LndpZHRoICogZ2FtZU9iamVjdC5zY2FsZVgsIGdhbWVPYmplY3QuaGVpZ2h0ICogZ2FtZU9iamVjdC5zY2FsZVkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRHYW1lT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/SetGameObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/Velocity.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/Velocity.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Velocity component.\r\n * Should be applied as a mixin.\r\n *\r\n * @namespace Phaser.Physics.Impact.Components.Velocity\r\n * @since 3.0.0\r\n */\r\nvar Velocity = {\r\n\r\n    /**\r\n     * Sets the horizontal velocity of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Velocity#setVelocityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocityX: function (x)\r\n    {\r\n        this.vel.x = x;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the vertical velocity of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Velocity#setVelocityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - The vertical velocity value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocityY: function (y)\r\n    {\r\n        this.vel.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal and vertical velocities of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Velocity#setVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity value.\r\n     * @param {number} [y=x] - The vertical velocity value. If not given, defaults to the horizontal value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setVelocity: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.vel.x = x;\r\n        this.vel.y = y;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the maximum velocity this body can travel at.\r\n     *\r\n     * @method Phaser.Physics.Impact.Components.Velocity#setMaxVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The maximum allowed horizontal velocity.\r\n     * @param {number} [y=x] - The maximum allowed vertical velocity. If not given, defaults to the horizontal value.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setMaxVelocity: function (x, y)\r\n    {\r\n        if (y === undefined) { y = x; }\r\n\r\n        this.maxVel.x = x;\r\n        this.maxVel.y = y;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Velocity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL1ZlbG9jaXR5LmpzPzQwMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvY29tcG9uZW50cy9WZWxvY2l0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgVmVsb2NpdHkgY29tcG9uZW50LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLlZlbG9jaXR5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFZlbG9jaXR5ID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaG9yaXpvbnRhbCB2ZWxvY2l0eSBvZiB0aGUgcGh5c2ljcyBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuVmVsb2NpdHkjc2V0VmVsb2NpdHlYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHZlbG9jaXR5IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZlbG9jaXR5WDogZnVuY3Rpb24gKHgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52ZWwueCA9IHg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZlcnRpY2FsIHZlbG9jaXR5IG9mIHRoZSBwaHlzaWNzIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50cy5WZWxvY2l0eSNzZXRWZWxvY2l0eVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHZlbG9jaXR5IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZlbG9jaXR5WTogZnVuY3Rpb24gKHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52ZWwueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHZlbG9jaXRpZXMgb2YgdGhlIHBoeXNpY3MgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLkltcGFjdC5Db21wb25lbnRzLlZlbG9jaXR5I3NldFZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHZlbG9jaXR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHZlbG9jaXR5IHZhbHVlLiBJZiBub3QgZ2l2ZW4sIGRlZmF1bHRzIHRvIHRoZSBob3Jpem9udGFsIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZlbG9jaXR5OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMudmVsLnggPSB4O1xyXG4gICAgICAgIHRoaXMudmVsLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIHZlbG9jaXR5IHRoaXMgYm9keSBjYW4gdHJhdmVsIGF0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkNvbXBvbmVudHMuVmVsb2NpdHkjc2V0TWF4VmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIG1heGltdW0gYWxsb3dlZCBob3Jpem9udGFsIHZlbG9jaXR5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCB2ZXJ0aWNhbCB2ZWxvY2l0eS4gSWYgbm90IGdpdmVuLCBkZWZhdWx0cyB0byB0aGUgaG9yaXpvbnRhbCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhWZWxvY2l0eTogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLm1heFZlbC54ID0geDtcclxuICAgICAgICB0aGlzLm1heFZlbC55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWZWxvY2l0eTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/Velocity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/components/index.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/components/index.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Impact.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Acceleration: __webpack_require__(/*! ./Acceleration */ \"./node_modules/phaser/src/physics/impact/components/Acceleration.js\"),\r\n    BodyScale: __webpack_require__(/*! ./BodyScale */ \"./node_modules/phaser/src/physics/impact/components/BodyScale.js\"),\r\n    BodyType: __webpack_require__(/*! ./BodyType */ \"./node_modules/phaser/src/physics/impact/components/BodyType.js\"),\r\n    Bounce: __webpack_require__(/*! ./Bounce */ \"./node_modules/phaser/src/physics/impact/components/Bounce.js\"),\r\n    CheckAgainst: __webpack_require__(/*! ./CheckAgainst */ \"./node_modules/phaser/src/physics/impact/components/CheckAgainst.js\"),\r\n    Collides: __webpack_require__(/*! ./Collides */ \"./node_modules/phaser/src/physics/impact/components/Collides.js\"),\r\n    Debug: __webpack_require__(/*! ./Debug */ \"./node_modules/phaser/src/physics/impact/components/Debug.js\"),\r\n    Friction: __webpack_require__(/*! ./Friction */ \"./node_modules/phaser/src/physics/impact/components/Friction.js\"),\r\n    Gravity: __webpack_require__(/*! ./Gravity */ \"./node_modules/phaser/src/physics/impact/components/Gravity.js\"),\r\n    Offset: __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/physics/impact/components/Offset.js\"),\r\n    SetGameObject: __webpack_require__(/*! ./SetGameObject */ \"./node_modules/phaser/src/physics/impact/components/SetGameObject.js\"),\r\n    Velocity: __webpack_require__(/*! ./Velocity */ \"./node_modules/phaser/src/physics/impact/components/Velocity.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL2luZGV4LmpzP2JhNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBZ0I7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLHFGQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxtRkFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsK0VBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsMkZBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxtRkFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsNkVBQVM7QUFDNUIsY0FBYyxtQkFBTyxDQUFDLG1GQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxpRkFBVztBQUNoQyxZQUFZLG1CQUFPLENBQUMsK0VBQVU7QUFDOUIsbUJBQW1CLG1CQUFPLENBQUMsNkZBQWlCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyxtRkFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9jb21wb25lbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQ29tcG9uZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFjY2VsZXJhdGlvbjogcmVxdWlyZSgnLi9BY2NlbGVyYXRpb24nKSxcclxuICAgIEJvZHlTY2FsZTogcmVxdWlyZSgnLi9Cb2R5U2NhbGUnKSxcclxuICAgIEJvZHlUeXBlOiByZXF1aXJlKCcuL0JvZHlUeXBlJyksXHJcbiAgICBCb3VuY2U6IHJlcXVpcmUoJy4vQm91bmNlJyksXHJcbiAgICBDaGVja0FnYWluc3Q6IHJlcXVpcmUoJy4vQ2hlY2tBZ2FpbnN0JyksXHJcbiAgICBDb2xsaWRlczogcmVxdWlyZSgnLi9Db2xsaWRlcycpLFxyXG4gICAgRGVidWc6IHJlcXVpcmUoJy4vRGVidWcnKSxcclxuICAgIEZyaWN0aW9uOiByZXF1aXJlKCcuL0ZyaWN0aW9uJyksXHJcbiAgICBHcmF2aXR5OiByZXF1aXJlKCcuL0dyYXZpdHknKSxcclxuICAgIE9mZnNldDogcmVxdWlyZSgnLi9PZmZzZXQnKSxcclxuICAgIFNldEdhbWVPYmplY3Q6IHJlcXVpcmUoJy4vU2V0R2FtZU9iamVjdCcpLFxyXG4gICAgVmVsb2NpdHk6IHJlcXVpcmUoJy4vVmVsb2NpdHknKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/components/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/events/COLLIDE_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/events/COLLIDE_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Physics World Collide Event.\r\n * \r\n * This event is dispatched by an Impact Physics World instance if two bodies collide.\r\n * \r\n * Listen to it from a Scene using: `this.impact.world.on('collide', listener)`.\r\n *\r\n * @event Phaser.Physics.Impact.Events#COLLIDE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Impact.Body} bodyA - The first body involved in the collision.\r\n * @param {Phaser.Physics.Impact.Body} bodyB - The second body involved in the collision.\r\n * @param {string} axis - The collision axis. Either `x` or `y`.\r\n */\r\nmodule.exports = 'collide';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9ldmVudHMvQ09MTElERV9FVkVOVC5qcz80MTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvZXZlbnRzL0NPTExJREVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW1wYWN0IFBoeXNpY3MgV29ybGQgQ29sbGlkZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBJbXBhY3QgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSBpZiB0d28gYm9kaWVzIGNvbGxpZGUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbXBhY3Qud29ybGQub24oJ2NvbGxpZGUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkV2ZW50cyNDT0xMSURFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuQm9keX0gYm9keUEgLSBUaGUgZmlyc3QgYm9keSBpbnZvbHZlZCBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5fSBib2R5QiAtIFRoZSBzZWNvbmQgYm9keSBpbnZvbHZlZCBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpcyAtIFRoZSBjb2xsaXNpb24gYXhpcy4gRWl0aGVyIGB4YCBvciBgeWAuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjb2xsaWRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/events/COLLIDE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/events/PAUSE_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/events/PAUSE_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Physics World Pause Event.\r\n * \r\n * This event is dispatched by an Impact Physics World instance when it is paused.\r\n * \r\n * Listen to it from a Scene using: `this.impact.world.on('pause', listener)`.\r\n *\r\n * @event Phaser.Physics.Impact.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9ldmVudHMvUEFVU0VfRVZFTlQuanM/MThiYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L2V2ZW50cy9QQVVTRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbXBhY3QgUGh5c2ljcyBXb3JsZCBQYXVzZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBJbXBhY3QgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IGlzIHBhdXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmltcGFjdC53b3JsZC5vbigncGF1c2UnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuSW1wYWN0LkV2ZW50cyNQQVVTRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/events/RESUME_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/events/RESUME_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Impact Physics World Resume Event.\r\n * \r\n * This event is dispatched by an Impact Physics World instance when it resumes from a paused state.\r\n * \r\n * Listen to it from a Scene using: `this.impact.world.on('resume', listener)`.\r\n *\r\n * @event Phaser.Physics.Impact.Events#RESUME\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9ldmVudHMvUkVTVU1FX0VWRU5ULmpzPzE0NjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEltcGFjdCBQaHlzaWNzIFdvcmxkIFJlc3VtZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBJbXBhY3QgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IHJlc3VtZXMgZnJvbSBhIHBhdXNlZCBzdGF0ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmltcGFjdC53b3JsZC5vbigncmVzdW1lJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLkltcGFjdC5FdmVudHMjUkVTVU1FXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVzdW1lJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/events/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/events/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Impact.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    COLLIDE: __webpack_require__(/*! ./COLLIDE_EVENT */ \"./node_modules/phaser/src/physics/impact/events/COLLIDE_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/physics/impact/events/PAUSE_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/physics/impact/events/RESUME_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9ldmVudHMvaW5kZXguanM/Y2Y4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyx5RkFBaUI7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLHFGQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyx1RkFBZ0I7O0FBRXBDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbXBhY3QvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5JbXBhY3QuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ09MTElERTogcmVxdWlyZSgnLi9DT0xMSURFX0VWRU5UJyksXHJcbiAgICBQQVVTRTogcmVxdWlyZSgnLi9QQVVTRV9FVkVOVCcpLFxyXG4gICAgUkVTVU1FOiByZXF1aXJlKCcuL1JFU1VNRV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/impact/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/physics/impact/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * An Impact.js compatible physics world, body and solver, for those who are used\r\n * to the Impact way of defining and controlling physics bodies. Also works with\r\n * the new Loader support for Weltmeister map data.\r\n *\r\n * World updated to run off the Phaser main loop.\r\n * Body extended to support additional setter functions.\r\n *\r\n * To create the map data you'll need Weltmeister, which comes with Impact\r\n * and can be purchased from http://impactjs.com\r\n *\r\n * My thanks to Dominic Szablewski for his permission to support Impact in Phaser.\r\n *\r\n * @namespace Phaser.Physics.Impact\r\n */\r\nmodule.exports = {\r\n\r\n    Body: __webpack_require__(/*! ./Body */ \"./node_modules/phaser/src/physics/impact/Body.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/impact/events/index.js\"),\r\n    COLLIDES: __webpack_require__(/*! ./COLLIDES */ \"./node_modules/phaser/src/physics/impact/COLLIDES.js\"),\r\n    CollisionMap: __webpack_require__(/*! ./CollisionMap */ \"./node_modules/phaser/src/physics/impact/CollisionMap.js\"),\r\n    Factory: __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/impact/Factory.js\"),\r\n    Image: __webpack_require__(/*! ./ImpactImage */ \"./node_modules/phaser/src/physics/impact/ImpactImage.js\"),\r\n    ImpactBody: __webpack_require__(/*! ./ImpactBody */ \"./node_modules/phaser/src/physics/impact/ImpactBody.js\"),\r\n    ImpactPhysics: __webpack_require__(/*! ./ImpactPhysics */ \"./node_modules/phaser/src/physics/impact/ImpactPhysics.js\"),\r\n    Sprite: __webpack_require__(/*! ./ImpactSprite */ \"./node_modules/phaser/src/physics/impact/ImpactSprite.js\"),\r\n    TYPE: __webpack_require__(/*! ./TYPE */ \"./node_modules/phaser/src/physics/impact/TYPE.js\"),\r\n    World: __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/impact/World.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2ltcGFjdC9pbmRleC5qcz9mMjkzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMsZ0VBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLDBFQUFVO0FBQzlCLGNBQWMsbUJBQU8sQ0FBQyx3RUFBWTtBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyxnRkFBZ0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNFQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyw4RUFBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBaUI7QUFDNUMsWUFBWSxtQkFBTyxDQUFDLGdGQUFnQjtBQUNwQyxVQUFVLG1CQUFPLENBQUMsZ0VBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLGtFQUFTOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvaW1wYWN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQW4gSW1wYWN0LmpzIGNvbXBhdGlibGUgcGh5c2ljcyB3b3JsZCwgYm9keSBhbmQgc29sdmVyLCBmb3IgdGhvc2Ugd2hvIGFyZSB1c2VkXHJcbiAqIHRvIHRoZSBJbXBhY3Qgd2F5IG9mIGRlZmluaW5nIGFuZCBjb250cm9sbGluZyBwaHlzaWNzIGJvZGllcy4gQWxzbyB3b3JrcyB3aXRoXHJcbiAqIHRoZSBuZXcgTG9hZGVyIHN1cHBvcnQgZm9yIFdlbHRtZWlzdGVyIG1hcCBkYXRhLlxyXG4gKlxyXG4gKiBXb3JsZCB1cGRhdGVkIHRvIHJ1biBvZmYgdGhlIFBoYXNlciBtYWluIGxvb3AuXHJcbiAqIEJvZHkgZXh0ZW5kZWQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIHNldHRlciBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSB0aGUgbWFwIGRhdGEgeW91J2xsIG5lZWQgV2VsdG1laXN0ZXIsIHdoaWNoIGNvbWVzIHdpdGggSW1wYWN0XHJcbiAqIGFuZCBjYW4gYmUgcHVyY2hhc2VkIGZyb20gaHR0cDovL2ltcGFjdGpzLmNvbVxyXG4gKlxyXG4gKiBNeSB0aGFua3MgdG8gRG9taW5pYyBTemFibGV3c2tpIGZvciBoaXMgcGVybWlzc2lvbiB0byBzdXBwb3J0IEltcGFjdCBpbiBQaGFzZXIuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuSW1wYWN0XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBCb2R5OiByZXF1aXJlKCcuL0JvZHknKSxcclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKSxcclxuICAgIENPTExJREVTOiByZXF1aXJlKCcuL0NPTExJREVTJyksXHJcbiAgICBDb2xsaXNpb25NYXA6IHJlcXVpcmUoJy4vQ29sbGlzaW9uTWFwJyksXHJcbiAgICBGYWN0b3J5OiByZXF1aXJlKCcuL0ZhY3RvcnknKSxcclxuICAgIEltYWdlOiByZXF1aXJlKCcuL0ltcGFjdEltYWdlJyksXHJcbiAgICBJbXBhY3RCb2R5OiByZXF1aXJlKCcuL0ltcGFjdEJvZHknKSxcclxuICAgIEltcGFjdFBoeXNpY3M6IHJlcXVpcmUoJy4vSW1wYWN0UGh5c2ljcycpLFxyXG4gICAgU3ByaXRlOiByZXF1aXJlKCcuL0ltcGFjdFNwcml0ZScpLFxyXG4gICAgVFlQRTogcmVxdWlyZSgnLi9UWVBFJyksXHJcbiAgICBXb3JsZDogcmVxdWlyZSgnLi9Xb3JsZCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/impact/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/physics/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Types.Physics\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Arcade: __webpack_require__(/*! ./arcade */ \"./node_modules/phaser/src/physics/arcade/index.js\"),\r\n    Impact: __webpack_require__(/*! ./impact */ \"./node_modules/phaser/src/physics/impact/index.js\"),\r\n    Matter: __webpack_require__(/*! ./matter-js */ \"./node_modules/phaser/src/physics/matter-js/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL2luZGV4LmpzPzUzMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFVO0FBQzlCLFlBQVksbUJBQU8sQ0FBQyxtRUFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMseUVBQWE7O0FBRWpDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3NcclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVHlwZXMuUGh5c2ljc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFyY2FkZTogcmVxdWlyZSgnLi9hcmNhZGUnKSxcclxuICAgIEltcGFjdDogcmVxdWlyZSgnLi9pbXBhY3QnKSxcclxuICAgIE1hdHRlcjogcmVxdWlyZSgnLi9tYXR0ZXItanMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/CustomMain.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/CustomMain.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Matter.Matter\r\n */\r\n\r\nvar Matter = __webpack_require__(/*! ./lib/core/Matter */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Matter.js\");\r\n\r\nMatter.Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nMatter.Composite = __webpack_require__(/*! ./lib/body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nMatter.World = __webpack_require__(/*! ./lib/body/World */ \"./node_modules/phaser/src/physics/matter-js/lib/body/World.js\");\r\n\r\nMatter.Detector = __webpack_require__(/*! ./lib/collision/Detector */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js\");\r\nMatter.Grid = __webpack_require__(/*! ./lib/collision/Grid */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Grid.js\");\r\nMatter.Pairs = __webpack_require__(/*! ./lib/collision/Pairs */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pairs.js\");\r\nMatter.Pair = __webpack_require__(/*! ./lib/collision/Pair */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js\");\r\nMatter.Query = __webpack_require__(/*! ./lib/collision/Query */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Query.js\");\r\nMatter.Resolver = __webpack_require__(/*! ./lib/collision/Resolver */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Resolver.js\");\r\nMatter.SAT = __webpack_require__(/*! ./lib/collision/SAT */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js\");\r\n\r\nMatter.Constraint = __webpack_require__(/*! ./lib/constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\n\r\nMatter.Common = __webpack_require__(/*! ./lib/core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nMatter.Engine = __webpack_require__(/*! ./lib/core/Engine */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Engine.js\");\r\nMatter.Events = __webpack_require__(/*! ./lib/core/Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\nMatter.Sleeping = __webpack_require__(/*! ./lib/core/Sleeping */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\");\r\nMatter.Plugin = __webpack_require__(/*! ./lib/core/Plugin */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js\");\r\n\r\nMatter.Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nMatter.Composites = __webpack_require__(/*! ./lib/factory/Composites */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Composites.js\");\r\n\r\nMatter.Axes = __webpack_require__(/*! ./lib/geometry/Axes */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js\");\r\nMatter.Bounds = __webpack_require__(/*! ./lib/geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nMatter.Svg = __webpack_require__(/*! ./lib/geometry/Svg */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Svg.js\");\r\nMatter.Vector = __webpack_require__(/*! ./lib/geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nMatter.Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n// aliases\r\n\r\nMatter.World.add = Matter.Composite.add;\r\nMatter.World.remove = Matter.Composite.remove;\r\nMatter.World.addComposite = Matter.Composite.addComposite;\r\nMatter.World.addBody = Matter.Composite.addBody;\r\nMatter.World.addConstraint = Matter.Composite.addConstraint;\r\nMatter.World.clear = Matter.Composite.clear;\r\n\r\nmodule.exports = Matter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9DdXN0b21NYWluLmpzP2RiYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMseUZBQW1COztBQUV4QyxjQUFjLG1CQUFPLENBQUMscUZBQWlCO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFzQjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsdUZBQWtCOztBQUV6QyxrQkFBa0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDcEQsY0FBYyxtQkFBTyxDQUFDLCtGQUFzQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsaUdBQXVCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQywrRkFBc0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLGlHQUF1QjtBQUM5QyxrQkFBa0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDcEQsYUFBYSxtQkFBTyxDQUFDLDZGQUFxQjs7QUFFMUMsb0JBQW9CLG1CQUFPLENBQUMsNkdBQTZCOztBQUV6RCxnQkFBZ0IsbUJBQU8sQ0FBQyx5RkFBbUI7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMseUZBQW1CO0FBQzNDLGdCQUFnQixtQkFBTyxDQUFDLHlGQUFtQjtBQUMzQyxrQkFBa0IsbUJBQU8sQ0FBQyw2RkFBcUI7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMseUZBQW1COztBQUUzQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRkFBc0I7QUFDOUMsb0JBQW9CLG1CQUFPLENBQUMsdUdBQTBCOztBQUV0RCxjQUFjLG1CQUFPLENBQUMsNkZBQXFCO0FBQzNDLGdCQUFnQixtQkFBTyxDQUFDLGlHQUF1QjtBQUMvQyxhQUFhLG1CQUFPLENBQUMsMkZBQW9CO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLGlHQUF1QjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBeUI7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL0N1c3RvbU1haW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJcclxuICovXHJcblxyXG52YXIgTWF0dGVyID0gcmVxdWlyZSgnLi9saWIvY29yZS9NYXR0ZXInKTtcclxuXHJcbk1hdHRlci5Cb2R5ID0gcmVxdWlyZSgnLi9saWIvYm9keS9Cb2R5Jyk7XHJcbk1hdHRlci5Db21wb3NpdGUgPSByZXF1aXJlKCcuL2xpYi9ib2R5L0NvbXBvc2l0ZScpO1xyXG5NYXR0ZXIuV29ybGQgPSByZXF1aXJlKCcuL2xpYi9ib2R5L1dvcmxkJyk7XHJcblxyXG5NYXR0ZXIuRGV0ZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vRGV0ZWN0b3InKTtcclxuTWF0dGVyLkdyaWQgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vR3JpZCcpO1xyXG5NYXR0ZXIuUGFpcnMgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vUGFpcnMnKTtcclxuTWF0dGVyLlBhaXIgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vUGFpcicpO1xyXG5NYXR0ZXIuUXVlcnkgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vUXVlcnknKTtcclxuTWF0dGVyLlJlc29sdmVyID0gcmVxdWlyZSgnLi9saWIvY29sbGlzaW9uL1Jlc29sdmVyJyk7XHJcbk1hdHRlci5TQVQgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vU0FUJyk7XHJcblxyXG5NYXR0ZXIuQ29uc3RyYWludCA9IHJlcXVpcmUoJy4vbGliL2NvbnN0cmFpbnQvQ29uc3RyYWludCcpO1xyXG5cclxuTWF0dGVyLkNvbW1vbiA9IHJlcXVpcmUoJy4vbGliL2NvcmUvQ29tbW9uJyk7XHJcbk1hdHRlci5FbmdpbmUgPSByZXF1aXJlKCcuL2xpYi9jb3JlL0VuZ2luZScpO1xyXG5NYXR0ZXIuRXZlbnRzID0gcmVxdWlyZSgnLi9saWIvY29yZS9FdmVudHMnKTtcclxuTWF0dGVyLlNsZWVwaW5nID0gcmVxdWlyZSgnLi9saWIvY29yZS9TbGVlcGluZycpO1xyXG5NYXR0ZXIuUGx1Z2luID0gcmVxdWlyZSgnLi9saWIvY29yZS9QbHVnaW4nKTtcclxuXHJcbk1hdHRlci5Cb2RpZXMgPSByZXF1aXJlKCcuL2xpYi9mYWN0b3J5L0JvZGllcycpO1xyXG5NYXR0ZXIuQ29tcG9zaXRlcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQ29tcG9zaXRlcycpO1xyXG5cclxuTWF0dGVyLkF4ZXMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9BeGVzJyk7XHJcbk1hdHRlci5Cb3VuZHMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9Cb3VuZHMnKTtcclxuTWF0dGVyLlN2ZyA9IHJlcXVpcmUoJy4vbGliL2dlb21ldHJ5L1N2ZycpO1xyXG5NYXR0ZXIuVmVjdG9yID0gcmVxdWlyZSgnLi9saWIvZ2VvbWV0cnkvVmVjdG9yJyk7XHJcbk1hdHRlci5WZXJ0aWNlcyA9IHJlcXVpcmUoJy4vbGliL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcblxyXG4vLyBhbGlhc2VzXHJcblxyXG5NYXR0ZXIuV29ybGQuYWRkID0gTWF0dGVyLkNvbXBvc2l0ZS5hZGQ7XHJcbk1hdHRlci5Xb3JsZC5yZW1vdmUgPSBNYXR0ZXIuQ29tcG9zaXRlLnJlbW92ZTtcclxuTWF0dGVyLldvcmxkLmFkZENvbXBvc2l0ZSA9IE1hdHRlci5Db21wb3NpdGUuYWRkQ29tcG9zaXRlO1xyXG5NYXR0ZXIuV29ybGQuYWRkQm9keSA9IE1hdHRlci5Db21wb3NpdGUuYWRkQm9keTtcclxuTWF0dGVyLldvcmxkLmFkZENvbnN0cmFpbnQgPSBNYXR0ZXIuQ29tcG9zaXRlLmFkZENvbnN0cmFpbnQ7XHJcbk1hdHRlci5Xb3JsZC5jbGVhciA9IE1hdHRlci5Db21wb3NpdGUuY2xlYXI7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/CustomMain.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/Factory.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/Factory.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Composites = __webpack_require__(/*! ./lib/factory/Composites */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Composites.js\");\r\nvar Constraint = __webpack_require__(/*! ./lib/constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\nvar MatterGameObject = __webpack_require__(/*! ./MatterGameObject */ \"./node_modules/phaser/src/physics/matter-js/MatterGameObject.js\");\r\nvar MatterImage = __webpack_require__(/*! ./MatterImage */ \"./node_modules/phaser/src/physics/matter-js/MatterImage.js\");\r\nvar MatterSprite = __webpack_require__(/*! ./MatterSprite */ \"./node_modules/phaser/src/physics/matter-js/MatterSprite.js\");\r\nvar MatterTileBody = __webpack_require__(/*! ./MatterTileBody */ \"./node_modules/phaser/src/physics/matter-js/MatterTileBody.js\");\r\nvar PointerConstraint = __webpack_require__(/*! ./PointerConstraint */ \"./node_modules/phaser/src/physics/matter-js/PointerConstraint.js\");\r\nvar Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Matter Factory can create different types of bodies and them to a physics world.\r\n *\r\n * @class Factory\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Physics.Matter.World} world - The Matter World which this Factory adds to.\r\n */\r\nvar Factory = new Class({\r\n\r\n    initialize:\r\n\r\n    function Factory (world)\r\n    {\r\n        /**\r\n         * The Matter World which this Factory adds to.\r\n         *\r\n         * @name Phaser.Physics.Matter.Factory#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The Scene which this Factory's Matter World belongs to.\r\n         *\r\n         * @name Phaser.Physics.Matter.Factory#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = world.scene;\r\n\r\n        /**\r\n         * A reference to the Scene.Systems this Matter Physics instance belongs to.\r\n         *\r\n         * @name Phaser.Physics.Matter.Factory#sys\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.sys = world.scene.sys;\r\n    },\r\n\r\n    /**\r\n     * Creates a new rigid rectangular Body and adds it to the World.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#rectangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the center of the Body.\r\n     * @param {number} y - The Y coordinate of the center of the Body.\r\n     * @param {number} width - The width of the Body.\r\n     * @param {number} height - The height of the Body.\r\n     * @param {object} options - An object of properties to set on the Body. You can also specify a `chamfer` property to automatically adjust the body.\r\n     *\r\n     * @return {MatterJS.Body} A Matter JS Body.\r\n     */\r\n    rectangle: function (x, y, width, height, options)\r\n    {\r\n        var body = Bodies.rectangle(x, y, width, height, options);\r\n\r\n        this.world.add(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Creates a new rigid trapezoidal Body and adds it to the World.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#trapezoid\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the center of the Body.\r\n     * @param {number} y - The Y coordinate of the center of the Body.\r\n     * @param {number} width - The width of the trapezoid of the Body.\r\n     * @param {number} height - The height of the trapezoid of the Body.\r\n     * @param {number} slope - The slope of the trapezoid. 0 creates a rectangle, while 1 creates a triangle. Positive values make the top side shorter, while negative values make the bottom side shorter.\r\n     * @param {object} options - An object of properties to set on the Body. You can also specify a `chamfer` property to automatically adjust the body.\r\n     *\r\n     * @return {MatterJS.Body} A Matter JS Body.\r\n     */\r\n    trapezoid: function (x, y, width, height, slope, options)\r\n    {\r\n        var body = Bodies.trapezoid(x, y, width, height, slope, options);\r\n\r\n        this.world.add(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Creates a new rigid circular Body and adds it to the World.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#circle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the center of the Body.\r\n     * @param {number} y - The Y coordinate of the center of the Body.\r\n     * @param {number} radius - The radius of the circle.\r\n     * @param {object} [options] - An object of properties to set on the Body. You can also specify a `chamfer` property to automatically adjust the body.\r\n     * @param {number} [maxSides] - The maximum amount of sides to use for the polygon which will approximate this circle.\r\n     *\r\n     * @return {MatterJS.Body} A Matter JS Body.\r\n     */\r\n    circle: function (x, y, radius, options, maxSides)\r\n    {\r\n        var body = Bodies.circle(x, y, radius, options, maxSides);\r\n\r\n        this.world.add(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Creates a new rigid polygonal Body and adds it to the World.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#polygon\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the center of the Body.\r\n     * @param {number} y - The Y coordinate of the center of the Body.\r\n     * @param {number} sides - The number of sides the polygon will have.\r\n     * @param {number} radius - The \"radius\" of the polygon, i.e. the distance from its center to any vertex. This is also the radius of its circumcircle.\r\n     * @param {object} options - An object of properties to set on the Body. You can also specify a `chamfer` property to automatically adjust the body.\r\n     *\r\n     * @return {MatterJS.Body} A Matter JS Body.\r\n     */\r\n    polygon: function (x, y, sides, radius, options)\r\n    {\r\n        var body = Bodies.polygon(x, y, sides, radius, options);\r\n\r\n        this.world.add(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Creates a body using the supplied vertices (or an array containing multiple sets of vertices) and adds it to the World.\r\n     * If the vertices are convex, they will pass through as supplied. Otherwise, if the vertices are concave, they will be decomposed. Note that this process is not guaranteed to support complex sets of vertices, e.g. ones with holes.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#fromVertices\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The X coordinate of the center of the Body.\r\n     * @param {number} y - The Y coordinate of the center of the Body.\r\n     * @param {(string|array)} vertexSets - [description]\r\n     * @param {object} [options] - [description]\r\n     * @param {boolean} [flagInternal=false] - Flag internal edges (coincident part edges)\r\n     * @param {number} [removeCollinear=0.01] - Whether Matter.js will discard collinear edges (to improve performance).\r\n     * @param {number} [minimumArea=10] - During decomposition discard parts that have an area less than this.\r\n     *\r\n     * @return {MatterJS.Body} A Matter JS Body.\r\n     */\r\n    fromVertices: function (x, y, vertexSets, options, flagInternal, removeCollinear, minimumArea)\r\n    {\r\n        if (typeof vertexSets === 'string')\r\n        {\r\n            vertexSets = Vertices.fromPath(vertexSets);\r\n        }\r\n\r\n        var body = Bodies.fromVertices(x, y, vertexSets, options, flagInternal, removeCollinear, minimumArea);\r\n\r\n        this.world.add(body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Create a new composite containing Matter Image objects created in a grid arrangement.\r\n     * This function uses the body bounds to prevent overlaps.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#imageStack\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} frame - An optional frame from the Texture this Game Object is rendering with. Set to `null` to skip this value.\r\n     * @param {number} x - The horizontal position of this composite in the world.\r\n     * @param {number} y - The vertical position of this composite in the world.\r\n     * @param {number} columns - The number of columns in the grid.\r\n     * @param {number} rows - The number of rows in the grid.\r\n     * @param {number} [columnGap=0] - The distance between each column.\r\n     * @param {number} [rowGap=0] - The distance between each row.\r\n     * @param {object} [options] - [description]\r\n     *\r\n     * @return {MatterJS.Composite} A Matter JS Composite Stack.\r\n     */\r\n    imageStack: function (key, frame, x, y, columns, rows, columnGap, rowGap, options)\r\n    {\r\n        if (columnGap === undefined) { columnGap = 0; }\r\n        if (rowGap === undefined) { rowGap = 0; }\r\n        if (options === undefined) { options = {}; }\r\n\r\n        var world = this.world;\r\n        var displayList = this.sys.displayList;\r\n\r\n        options.addToWorld = false;\r\n\r\n        var stack = Composites.stack(x, y, columns, rows, columnGap, rowGap, function (x, y)\r\n        {\r\n            var image = new MatterImage(world, x, y, key, frame, options);\r\n\r\n            displayList.add(image);\r\n\r\n            return image.body;\r\n        });\r\n\r\n        world.add(stack);\r\n\r\n        return stack;\r\n    },\r\n\r\n    /**\r\n     * Create a new composite containing bodies created in the callback in a grid arrangement.\r\n     * This function uses the body bounds to prevent overlaps.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#stack\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this composite in the world.\r\n     * @param {number} y - The vertical position of this composite in the world.\r\n     * @param {number} columns - The number of columns in the grid.\r\n     * @param {number} rows - The number of rows in the grid.\r\n     * @param {number} columnGap - The distance between each column.\r\n     * @param {number} rowGap - The distance between each row.\r\n     * @param {function} callback - The callback that creates the stack.\r\n     *\r\n     * @return {MatterJS.Composite} A new composite containing objects created in the callback.\r\n     */\r\n    stack: function (x, y, columns, rows, columnGap, rowGap, callback)\r\n    {\r\n        var stack = Composites.stack(x, y, columns, rows, columnGap, rowGap, callback);\r\n\r\n        this.world.add(stack);\r\n\r\n        return stack;\r\n    },\r\n\r\n    /**\r\n     * Create a new composite containing bodies created in the callback in a pyramid arrangement.\r\n     * This function uses the body bounds to prevent overlaps.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#pyramid\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this composite in the world.\r\n     * @param {number} y - The vertical position of this composite in the world.\r\n     * @param {number} columns - The number of columns in the pyramid.\r\n     * @param {number} rows - The number of rows in the pyramid.\r\n     * @param {number} columnGap - The distance between each column.\r\n     * @param {number} rowGap - The distance between each row.\r\n     * @param {function} callback - The callback function to be invoked.\r\n     *\r\n     * @return {MatterJS.Composite} A Matter JS Composite pyramid.\r\n     */\r\n    pyramid: function (x, y, columns, rows, columnGap, rowGap, callback)\r\n    {\r\n        var stack = Composites.pyramid(x, y, columns, rows, columnGap, rowGap, callback);\r\n\r\n        this.world.add(stack);\r\n\r\n        return stack;\r\n    },\r\n\r\n    /**\r\n     * Chains all bodies in the given composite together using constraints.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#chain\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Composite} composite - [description]\r\n     * @param {number} xOffsetA - [description]\r\n     * @param {number} yOffsetA - [description]\r\n     * @param {number} xOffsetB - [description]\r\n     * @param {number} yOffsetB - [description]\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {MatterJS.Composite} A new composite containing objects chained together with constraints.\r\n     */\r\n    chain: function (composite, xOffsetA, yOffsetA, xOffsetB, yOffsetB, options)\r\n    {\r\n        return Composites.chain(composite, xOffsetA, yOffsetA, xOffsetB, yOffsetB, options);\r\n    },\r\n\r\n    /**\r\n     * Connects bodies in the composite with constraints in a grid pattern, with optional cross braces.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#mesh\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Composite} composite - [description]\r\n     * @param {number} columns - [description]\r\n     * @param {number} rows - [description]\r\n     * @param {boolean} crossBrace - [description]\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {MatterJS.Composite} The composite containing objects meshed together with constraints.\r\n     */\r\n    mesh: function (composite, columns, rows, crossBrace, options)\r\n    {\r\n        return Composites.mesh(composite, columns, rows, crossBrace, options);\r\n    },\r\n\r\n    /**\r\n     * Creates a composite with a Newton's Cradle setup of bodies and constraints.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#newtonsCradle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} number - [description]\r\n     * @param {number} size - [description]\r\n     * @param {number} length - [description]\r\n     *\r\n     * @return {MatterJS.Composite} A new composite newtonsCradle body.\r\n     */\r\n    newtonsCradle: function (x, y, number, size, length)\r\n    {\r\n        var composite = Composites.newtonsCradle(x, y, number, size, length);\r\n\r\n        this.world.add(composite);\r\n\r\n        return composite;\r\n    },\r\n\r\n    /**\r\n     * Creates a composite with simple car setup of bodies and constraints.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#car\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     * @param {number} wheelSize - [description]\r\n     *\r\n     * @return {MatterJS.Composite} A new composite car body.\r\n     */\r\n    car: function (x, y, width, height, wheelSize)\r\n    {\r\n        var composite = Composites.car(x, y, width, height, wheelSize);\r\n\r\n        this.world.add(composite);\r\n\r\n        return composite;\r\n    },\r\n\r\n    /**\r\n     * Creates a simple soft body like object.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#softBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this composite in the world.\r\n     * @param {number} y - The vertical position of this composite in the world.\r\n     * @param {number} columns - The number of columns in the Composite.\r\n     * @param {number} rows - The number of rows in the Composite.\r\n     * @param {number} columnGap - The distance between each column.\r\n     * @param {number} rowGap - The distance between each row.\r\n     * @param {boolean} crossBrace - [description]\r\n     * @param {number} particleRadius - The radius of this circlular composite.\r\n     * @param {object} particleOptions - [description]\r\n     * @param {object} constraintOptions - [description]\r\n     *\r\n     * @return {MatterJS.Composite} A new composite simple soft body.\r\n     */\r\n    softBody: function (x, y, columns, rows, columnGap, rowGap, crossBrace, particleRadius, particleOptions, constraintOptions)\r\n    {\r\n        var composite = Composites.softBody(x, y, columns, rows, columnGap, rowGap, crossBrace, particleRadius, particleOptions, constraintOptions);\r\n\r\n        this.world.add(composite);\r\n\r\n        return composite;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#joint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} bodyA - The first possible `Body` that this constraint is attached to.\r\n     * @param {MatterJS.Body} bodyB - The second possible `Body` that this constraint is attached to.\r\n     * @param {number} [length] - A Number that specifies the target resting length of the constraint. If not given it is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\r\n     * @param {number} [stiffness=1] - A Number that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`. A value of `1` means the constraint should be very stiff. A value of `0.2` means the constraint acts as a soft spring.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    joint: function (bodyA, bodyB, length, stiffness, options)\r\n    {\r\n        return this.constraint(bodyA, bodyB, length, stiffness, options);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#spring\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} bodyA - The first possible `Body` that this constraint is attached to.\r\n     * @param {MatterJS.Body} bodyB - The second possible `Body` that this constraint is attached to.\r\n     * @param {number} [length] - A Number that specifies the target resting length of the constraint. If not given it is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\r\n     * @param {number} [stiffness=1] - A Number that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`. A value of `1` means the constraint should be very stiff. A value of `0.2` means the constraint acts as a soft spring.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    spring: function (bodyA, bodyB, length, stiffness, options)\r\n    {\r\n        return this.constraint(bodyA, bodyB, length, stiffness, options);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#constraint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} bodyA - The first possible `Body` that this constraint is attached to.\r\n     * @param {MatterJS.Body} bodyB - The second possible `Body` that this constraint is attached to.\r\n     * @param {number} [length] - A Number that specifies the target resting length of the constraint. If not given it is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\r\n     * @param {number} [stiffness=1] - A Number that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`. A value of `1` means the constraint should be very stiff. A value of `0.2` means the constraint acts as a soft spring.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    constraint: function (bodyA, bodyB, length, stiffness, options)\r\n    {\r\n        if (stiffness === undefined) { stiffness = 1; }\r\n        if (options === undefined) { options = {}; }\r\n\r\n        options.bodyA = (bodyA.type === 'body') ? bodyA : bodyA.body;\r\n        options.bodyB = (bodyB.type === 'body') ? bodyB : bodyB.body;\r\n\r\n        if (!isNaN(length))\r\n        {\r\n            options.length = length;\r\n        }\r\n\r\n        options.stiffness = stiffness;\r\n\r\n        var constraint = Constraint.create(options);\r\n\r\n        this.world.add(constraint);\r\n\r\n        return constraint;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#worldConstraint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} bodyB - The second possible `Body` that this constraint is attached to.\r\n     * @param {number} [length] - A Number that specifies the target resting length of the constraint. If not given it is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\r\n     * @param {number} [stiffness=1] - A Number that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`. A value of `1` means the constraint should be very stiff. A value of `0.2` means the constraint acts as a soft spring.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    worldConstraint: function (bodyB, length, stiffness, options)\r\n    {\r\n        if (stiffness === undefined) { stiffness = 1; }\r\n        if (options === undefined) { options = {}; }\r\n\r\n        options.bodyB = (bodyB.type === 'body') ? bodyB : bodyB.body;\r\n\r\n        if (!isNaN(length))\r\n        {\r\n            options.length = length;\r\n        }\r\n\r\n        options.stiffness = stiffness;\r\n\r\n        var constraint = Constraint.create(options);\r\n\r\n        this.world.add(constraint);\r\n\r\n        return constraint;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#mouseSpring\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    mouseSpring: function (options)\r\n    {\r\n        return this.pointerConstraint(options);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#pointerConstraint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {MatterJS.Constraint} A Matter JS Constraint.\r\n     */\r\n    pointerConstraint: function (options)\r\n    {\r\n        if (options === undefined) { options = {}; }\r\n\r\n        if (!options.hasOwnProperty('render'))\r\n        {\r\n            options.render = { visible: false };\r\n        }\r\n\r\n        var pointerConstraint = new PointerConstraint(this.scene, this.world, options);\r\n\r\n        this.world.add(pointerConstraint.constraint);\r\n\r\n        return pointerConstraint;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#image\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with. Set to `null` to skip this value.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.Image} [description]\r\n     */\r\n    image: function (x, y, key, frame, options)\r\n    {\r\n        var image = new MatterImage(this.world, x, y, key, frame, options);\r\n\r\n        this.sys.displayList.add(image);\r\n\r\n        return image;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#tileBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tilemaps.Tile} tile - [description]\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.TileBody} [description]\r\n     */\r\n    tileBody: function (tile, options)\r\n    {\r\n        var tileBody = new MatterTileBody(this.world, tile, options);\r\n\r\n        return tileBody;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#sprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of this Game Object in the world.\r\n     * @param {number} y - The vertical position of this Game Object in the world.\r\n     * @param {string} key - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n     * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with. Set to `null` to skip this value.\r\n     * @param {object} [options={}] - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.Sprite} [description]\r\n     */\r\n    sprite: function (x, y, key, frame, options)\r\n    {\r\n        var sprite = new MatterSprite(this.world, x, y, key, frame, options);\r\n\r\n        this.sys.displayList.add(sprite);\r\n        this.sys.updateList.add(sprite);\r\n\r\n        return sprite;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#gameObject\r\n     * @since 3.3.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to inject the Matter Body in to.\r\n     * @param {(object|MatterJS.Body)} options - A Matter Body configuration object, or an instance of a Matter Body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object that had the Matter Body injected into it.\r\n     */\r\n    gameObject: function (gameObject, options)\r\n    {\r\n        return MatterGameObject(this.world, gameObject, options);\r\n    },\r\n\r\n    /**\r\n     * Instantly sets the linear velocity of the given body. Position, angle, force etc. are unchanged.\r\n     * \r\n     * See also `force`.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#velocity\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MatterJS.Body} body - The Matter Body to set the velocity on.\r\n     * @param {Phaser.Types.Math.Vector2Like} velocity - The velocity to set. An object with public `x` and `y` components.\r\n     *\r\n     * @return {MatterJS.Body} The Matter body.\r\n     */\r\n    velocity: function (body, velocity)\r\n    {\r\n        Body.setVelocity(body, velocity);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Instantly sets the angular velocity of the given body. Position, angle, force etc. are unchanged.\r\n     * \r\n     * See also `force`.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#angularVelocity\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MatterJS.Body} body - The Matter Body to set the velocity on.\r\n     * @param {number} velocity - The angular velocity to set.\r\n     *\r\n     * @return {MatterJS.Body} The Matter body.\r\n     */\r\n    angularVelocity: function (body, velocity)\r\n    {\r\n        Body.setAngularVelocity(body, velocity);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Applies a force to a body from a given world-space position, including resulting torque.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#force\r\n     * @since 3.18.0\r\n     *\r\n     * @param {MatterJS.Body} body - The Matter Body to set the force on.\r\n     * @param {Phaser.Types.Math.Vector2Like} position - The world position to apply the force from. An object with public `x` and `y` components.\r\n     * @param {Phaser.Types.Math.Vector2Like} force - The force to set. An object with public `x` and `y` components.\r\n     *\r\n     * @return {MatterJS.Body} The Matter body.\r\n     */\r\n    force: function (body, position, force)\r\n    {\r\n        Body.applyForce(body, position, force);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Factory.\r\n     *\r\n     * @method Phaser.Physics.Matter.Factory#destroy\r\n     * @since 3.5.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world = null;\r\n        this.scene = null;\r\n        this.sys = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Factory;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9GYWN0b3J5LmpzPzZlZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrRkFBc0I7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLHFGQUFpQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHVHQUEwQjtBQUNuRCxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBNkI7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsMkZBQW9CO0FBQ25ELGtCQUFrQixtQkFBTyxDQUFDLGlGQUFlO0FBQ3pDLG1CQUFtQixtQkFBTyxDQUFDLG1GQUFnQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBa0I7QUFDL0Msd0JBQXdCLG1CQUFPLENBQUMsNkZBQXFCO0FBQ3JELGVBQWUsbUJBQU8sQ0FBQyxxR0FBeUI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixjQUFjO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxlQUFlO0FBQzlCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixjQUFjO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlO0FBQ3JELG1DQUFtQyxZQUFZO0FBQy9DLG9DQUFvQyxjQUFjOztBQUVsRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFlBQVk7QUFDbEM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFlBQVk7QUFDbEM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxjQUFjO0FBQzdCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPLFlBQVk7QUFDbEM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlO0FBQ3JELG9DQUFvQyxjQUFjOztBQUVsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU8sWUFBWTtBQUNsQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7QUFDckQsb0NBQW9DLGNBQWM7O0FBRWxEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjOztBQUVsRDtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLE9BQU8sWUFBWTtBQUNsQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTyxZQUFZO0FBQ2xDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHVCQUF1QjtBQUN0QztBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb3NpdGVzID0gcmVxdWlyZSgnLi9saWIvZmFjdG9yeS9Db21wb3NpdGVzJyk7XHJcbnZhciBDb25zdHJhaW50ID0gcmVxdWlyZSgnLi9saWIvY29uc3RyYWludC9Db25zdHJhaW50Jyk7XHJcbnZhciBNYXR0ZXJHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi9NYXR0ZXJHYW1lT2JqZWN0Jyk7XHJcbnZhciBNYXR0ZXJJbWFnZSA9IHJlcXVpcmUoJy4vTWF0dGVySW1hZ2UnKTtcclxudmFyIE1hdHRlclNwcml0ZSA9IHJlcXVpcmUoJy4vTWF0dGVyU3ByaXRlJyk7XHJcbnZhciBNYXR0ZXJUaWxlQm9keSA9IHJlcXVpcmUoJy4vTWF0dGVyVGlsZUJvZHknKTtcclxudmFyIFBvaW50ZXJDb25zdHJhaW50ID0gcmVxdWlyZSgnLi9Qb2ludGVyQ29uc3RyYWludCcpO1xyXG52YXIgVmVydGljZXMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9WZXJ0aWNlcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIE1hdHRlciBGYWN0b3J5IGNhbiBjcmVhdGUgZGlmZmVyZW50IHR5cGVzIG9mIGJvZGllcyBhbmQgdGhlbSB0byBhIHBoeXNpY3Mgd29ybGQuXHJcbiAqXHJcbiAqIEBjbGFzcyBGYWN0b3J5XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5NYXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gd29ybGQgLSBUaGUgTWF0dGVyIFdvcmxkIHdoaWNoIHRoaXMgRmFjdG9yeSBhZGRzIHRvLlxyXG4gKi9cclxudmFyIEZhY3RvcnkgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRmFjdG9yeSAod29ybGQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hdHRlciBXb3JsZCB3aGljaCB0aGlzIEZhY3RvcnkgYWRkcyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB3aGljaCB0aGlzIEZhY3RvcnkncyBNYXR0ZXIgV29ybGQgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gd29ybGQuc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZS5TeXN0ZW1zIHRoaXMgTWF0dGVyIFBoeXNpY3MgaW5zdGFuY2UgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3N5c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXMgPSB3b3JsZC5zY2VuZS5zeXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyByaWdpZCByZWN0YW5ndWxhciBCb2R5IGFuZCBhZGRzIGl0IHRvIHRoZSBXb3JsZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3JlY3RhbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgQm9keS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgQm9keS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBCb2R5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBBbiBvYmplY3Qgb2YgcHJvcGVydGllcyB0byBzZXQgb24gdGhlIEJvZHkuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgYGNoYW1mZXJgIHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge01hdHRlckpTLkJvZHl9IEEgTWF0dGVyIEpTIEJvZHkuXHJcbiAgICAgKi9cclxuICAgIHJlY3RhbmdsZTogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBCb2RpZXMucmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLmFkZChib2R5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyByaWdpZCB0cmFwZXpvaWRhbCBCb2R5IGFuZCBhZGRzIGl0IHRvIHRoZSBXb3JsZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3RyYXBlem9pZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgQm9keS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdHJhcGV6b2lkIG9mIHRoZSBCb2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRyYXBlem9pZCBvZiB0aGUgQm9keS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG9wZSAtIFRoZSBzbG9wZSBvZiB0aGUgdHJhcGV6b2lkLiAwIGNyZWF0ZXMgYSByZWN0YW5nbGUsIHdoaWxlIDEgY3JlYXRlcyBhIHRyaWFuZ2xlLiBQb3NpdGl2ZSB2YWx1ZXMgbWFrZSB0aGUgdG9wIHNpZGUgc2hvcnRlciwgd2hpbGUgbmVnYXRpdmUgdmFsdWVzIG1ha2UgdGhlIGJvdHRvbSBzaWRlIHNob3J0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgQm9keS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBgY2hhbWZlcmAgcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQm9keX0gQSBNYXR0ZXIgSlMgQm9keS5cclxuICAgICAqL1xyXG4gICAgdHJhcGV6b2lkOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgc2xvcGUsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBCb2RpZXMudHJhcGV6b2lkKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNsb3BlLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5hZGQoYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgcmlnaWQgY2lyY3VsYXIgQm9keSBhbmQgYWRkcyBpdCB0byB0aGUgV29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNjaXJjbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBCb2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgQm9keS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBgY2hhbWZlcmAgcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21heFNpZGVzXSAtIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBzaWRlcyB0byB1c2UgZm9yIHRoZSBwb2x5Z29uIHdoaWNoIHdpbGwgYXBwcm94aW1hdGUgdGhpcyBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQm9keX0gQSBNYXR0ZXIgSlMgQm9keS5cclxuICAgICAqL1xyXG4gICAgY2lyY2xlOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBvcHRpb25zLCBtYXhTaWRlcylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9keSA9IEJvZGllcy5jaXJjbGUoeCwgeSwgcmFkaXVzLCBvcHRpb25zLCBtYXhTaWRlcyk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuYWRkKGJvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJpZ2lkIHBvbHlnb25hbCBCb2R5IGFuZCBhZGRzIGl0IHRvIHRoZSBXb3JsZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3BvbHlnb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBCb2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lkZXMgLSBUaGUgbnVtYmVyIG9mIHNpZGVzIHRoZSBwb2x5Z29uIHdpbGwgaGF2ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgXCJyYWRpdXNcIiBvZiB0aGUgcG9seWdvbiwgaS5lLiB0aGUgZGlzdGFuY2UgZnJvbSBpdHMgY2VudGVyIHRvIGFueSB2ZXJ0ZXguIFRoaXMgaXMgYWxzbyB0aGUgcmFkaXVzIG9mIGl0cyBjaXJjdW1jaXJjbGUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgQm9keS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBgY2hhbWZlcmAgcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQm9keX0gQSBNYXR0ZXIgSlMgQm9keS5cclxuICAgICAqL1xyXG4gICAgcG9seWdvbjogZnVuY3Rpb24gKHgsIHksIHNpZGVzLCByYWRpdXMsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBCb2RpZXMucG9seWdvbih4LCB5LCBzaWRlcywgcmFkaXVzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5hZGQoYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBib2R5IHVzaW5nIHRoZSBzdXBwbGllZCB2ZXJ0aWNlcyAob3IgYW4gYXJyYXkgY29udGFpbmluZyBtdWx0aXBsZSBzZXRzIG9mIHZlcnRpY2VzKSBhbmQgYWRkcyBpdCB0byB0aGUgV29ybGQuXHJcbiAgICAgKiBJZiB0aGUgdmVydGljZXMgYXJlIGNvbnZleCwgdGhleSB3aWxsIHBhc3MgdGhyb3VnaCBhcyBzdXBwbGllZC4gT3RoZXJ3aXNlLCBpZiB0aGUgdmVydGljZXMgYXJlIGNvbmNhdmUsIHRoZXkgd2lsbCBiZSBkZWNvbXBvc2VkLiBOb3RlIHRoYXQgdGhpcyBwcm9jZXNzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1cHBvcnQgY29tcGxleCBzZXRzIG9mIHZlcnRpY2VzLCBlLmcuIG9uZXMgd2l0aCBob2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2Zyb21WZXJ0aWNlc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIEJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgQm9keS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IHZlcnRleFNldHMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxhZ0ludGVybmFsPWZhbHNlXSAtIEZsYWcgaW50ZXJuYWwgZWRnZXMgKGNvaW5jaWRlbnQgcGFydCBlZGdlcylcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmVtb3ZlQ29sbGluZWFyPTAuMDFdIC0gV2hldGhlciBNYXR0ZXIuanMgd2lsbCBkaXNjYXJkIGNvbGxpbmVhciBlZGdlcyAodG8gaW1wcm92ZSBwZXJmb3JtYW5jZSkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21pbmltdW1BcmVhPTEwXSAtIER1cmluZyBkZWNvbXBvc2l0aW9uIGRpc2NhcmQgcGFydHMgdGhhdCBoYXZlIGFuIGFyZWEgbGVzcyB0aGFuIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQm9keX0gQSBNYXR0ZXIgSlMgQm9keS5cclxuICAgICAqL1xyXG4gICAgZnJvbVZlcnRpY2VzOiBmdW5jdGlvbiAoeCwgeSwgdmVydGV4U2V0cywgb3B0aW9ucywgZmxhZ0ludGVybmFsLCByZW1vdmVDb2xsaW5lYXIsIG1pbmltdW1BcmVhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmVydGV4U2V0cyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhTZXRzID0gVmVydGljZXMuZnJvbVBhdGgodmVydGV4U2V0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9keSA9IEJvZGllcy5mcm9tVmVydGljZXMoeCwgeSwgdmVydGV4U2V0cywgb3B0aW9ucywgZmxhZ0ludGVybmFsLCByZW1vdmVDb2xsaW5lYXIsIG1pbmltdW1BcmVhKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5hZGQoYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBNYXR0ZXIgSW1hZ2Ugb2JqZWN0cyBjcmVhdGVkIGluIGEgZ3JpZCBhcnJhbmdlbWVudC5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYm9keSBib3VuZHMgdG8gcHJldmVudCBvdmVybGFwcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2ltYWdlU3RhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBmcmFtZSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC4gU2V0IHRvIGBudWxsYCB0byBza2lwIHRoaXMgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgY29tcG9zaXRlIGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgY29tcG9zaXRlIGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zIC0gVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBncmlkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgLSBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGdyaWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbkdhcD0wXSAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sdW1uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyb3dHYXA9MF0gLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHJvdy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29tcG9zaXRlfSBBIE1hdHRlciBKUyBDb21wb3NpdGUgU3RhY2suXHJcbiAgICAgKi9cclxuICAgIGltYWdlU3RhY2s6IGZ1bmN0aW9uIChrZXksIGZyYW1lLCB4LCB5LCBjb2x1bW5zLCByb3dzLCBjb2x1bW5HYXAsIHJvd0dhcCwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoY29sdW1uR2FwID09PSB1bmRlZmluZWQpIHsgY29sdW1uR2FwID0gMDsgfVxyXG4gICAgICAgIGlmIChyb3dHYXAgPT09IHVuZGVmaW5lZCkgeyByb3dHYXAgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBvcHRpb25zID0ge307IH1cclxuXHJcbiAgICAgICAgdmFyIHdvcmxkID0gdGhpcy53b3JsZDtcclxuICAgICAgICB2YXIgZGlzcGxheUxpc3QgPSB0aGlzLnN5cy5kaXNwbGF5TGlzdDtcclxuXHJcbiAgICAgICAgb3B0aW9ucy5hZGRUb1dvcmxkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHZhciBzdGFjayA9IENvbXBvc2l0ZXMuc3RhY2soeCwgeSwgY29sdW1ucywgcm93cywgY29sdW1uR2FwLCByb3dHYXAsIGZ1bmN0aW9uICh4LCB5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGltYWdlID0gbmV3IE1hdHRlckltYWdlKHdvcmxkLCB4LCB5LCBrZXksIGZyYW1lLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgIGRpc3BsYXlMaXN0LmFkZChpbWFnZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2UuYm9keTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgd29ybGQuYWRkKHN0YWNrKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YWNrO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBib2RpZXMgY3JlYXRlZCBpbiB0aGUgY2FsbGJhY2sgaW4gYSBncmlkIGFycmFuZ2VtZW50LlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBib2R5IGJvdW5kcyB0byBwcmV2ZW50IG92ZXJsYXBzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3Rvcnkjc3RhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBjb21wb3NpdGUgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBjb21wb3NpdGUgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgLSBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZ3JpZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5HYXAgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbHVtbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dHYXAgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHJvdy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRoYXQgY3JlYXRlcyB0aGUgc3RhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29tcG9zaXRlfSBBIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIGNhbGxiYWNrLlxyXG4gICAgICovXHJcbiAgICBzdGFjazogZnVuY3Rpb24gKHgsIHksIGNvbHVtbnMsIHJvd3MsIGNvbHVtbkdhcCwgcm93R2FwLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICB2YXIgc3RhY2sgPSBDb21wb3NpdGVzLnN0YWNrKHgsIHksIGNvbHVtbnMsIHJvd3MsIGNvbHVtbkdhcCwgcm93R2FwLCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuYWRkKHN0YWNrKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YWNrO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBib2RpZXMgY3JlYXRlZCBpbiB0aGUgY2FsbGJhY2sgaW4gYSBweXJhbWlkIGFycmFuZ2VtZW50LlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBib2R5IGJvdW5kcyB0byBwcmV2ZW50IG92ZXJsYXBzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3RvcnkjcHlyYW1pZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIGNvbXBvc2l0ZSBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIGNvbXBvc2l0ZSBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyAtIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgcHlyYW1pZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzIC0gVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBweXJhbWlkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkdhcCAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sdW1uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0dhcCAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcm93LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Db21wb3NpdGV9IEEgTWF0dGVyIEpTIENvbXBvc2l0ZSBweXJhbWlkLlxyXG4gICAgICovXHJcbiAgICBweXJhbWlkOiBmdW5jdGlvbiAoeCwgeSwgY29sdW1ucywgcm93cywgY29sdW1uR2FwLCByb3dHYXAsIGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdGFjayA9IENvbXBvc2l0ZXMucHlyYW1pZCh4LCB5LCBjb2x1bW5zLCByb3dzLCBjb2x1bW5HYXAsIHJvd0dhcCwgY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLmFkZChzdGFjayk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFpbnMgYWxsIGJvZGllcyBpbiB0aGUgZ2l2ZW4gY29tcG9zaXRlIHRvZ2V0aGVyIHVzaW5nIGNvbnN0cmFpbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3RvcnkjY2hhaW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQ29tcG9zaXRlfSBjb21wb3NpdGUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geE9mZnNldEEgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geU9mZnNldEEgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geE9mZnNldEIgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geU9mZnNldEIgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Db21wb3NpdGV9IEEgbmV3IGNvbXBvc2l0ZSBjb250YWluaW5nIG9iamVjdHMgY2hhaW5lZCB0b2dldGhlciB3aXRoIGNvbnN0cmFpbnRzLlxyXG4gICAgICovXHJcbiAgICBjaGFpbjogZnVuY3Rpb24gKGNvbXBvc2l0ZSwgeE9mZnNldEEsIHlPZmZzZXRBLCB4T2Zmc2V0QiwgeU9mZnNldEIsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIENvbXBvc2l0ZXMuY2hhaW4oY29tcG9zaXRlLCB4T2Zmc2V0QSwgeU9mZnNldEEsIHhPZmZzZXRCLCB5T2Zmc2V0Qiwgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVjdHMgYm9kaWVzIGluIHRoZSBjb21wb3NpdGUgd2l0aCBjb25zdHJhaW50cyBpbiBhIGdyaWQgcGF0dGVybiwgd2l0aCBvcHRpb25hbCBjcm9zcyBicmFjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNtZXNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlckpTLkNvbXBvc2l0ZX0gY29tcG9zaXRlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY3Jvc3NCcmFjZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge01hdHRlckpTLkNvbXBvc2l0ZX0gVGhlIGNvbXBvc2l0ZSBjb250YWluaW5nIG9iamVjdHMgbWVzaGVkIHRvZ2V0aGVyIHdpdGggY29uc3RyYWludHMuXHJcbiAgICAgKi9cclxuICAgIG1lc2g6IGZ1bmN0aW9uIChjb21wb3NpdGUsIGNvbHVtbnMsIHJvd3MsIGNyb3NzQnJhY2UsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIENvbXBvc2l0ZXMubWVzaChjb21wb3NpdGUsIGNvbHVtbnMsIHJvd3MsIGNyb3NzQnJhY2UsIG9wdGlvbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgd2l0aCBhIE5ld3RvbidzIENyYWRsZSBzZXR1cCBvZiBib2RpZXMgYW5kIGNvbnN0cmFpbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3RvcnkjbmV3dG9uc0NyYWRsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29tcG9zaXRlfSBBIG5ldyBjb21wb3NpdGUgbmV3dG9uc0NyYWRsZSBib2R5LlxyXG4gICAgICovXHJcbiAgICBuZXd0b25zQ3JhZGxlOiBmdW5jdGlvbiAoeCwgeSwgbnVtYmVyLCBzaXplLCBsZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbXBvc2l0ZSA9IENvbXBvc2l0ZXMubmV3dG9uc0NyYWRsZSh4LCB5LCBudW1iZXIsIHNpemUsIGxlbmd0aCk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuYWRkKGNvbXBvc2l0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSB3aXRoIHNpbXBsZSBjYXIgc2V0dXAgb2YgYm9kaWVzIGFuZCBjb25zdHJhaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2NhclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2hlZWxTaXplIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge01hdHRlckpTLkNvbXBvc2l0ZX0gQSBuZXcgY29tcG9zaXRlIGNhciBib2R5LlxyXG4gICAgICovXHJcbiAgICBjYXI6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB3aGVlbFNpemUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbXBvc2l0ZSA9IENvbXBvc2l0ZXMuY2FyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdoZWVsU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuYWRkKGNvbXBvc2l0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIHNpbXBsZSBzb2Z0IGJvZHkgbGlrZSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNzb2Z0Qm9keVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIGNvbXBvc2l0ZSBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIGNvbXBvc2l0ZSBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyAtIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgQ29tcG9zaXRlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgLSBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIENvbXBvc2l0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5HYXAgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbHVtbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dHYXAgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHJvdy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY3Jvc3NCcmFjZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYXJ0aWNsZVJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhpcyBjaXJjbHVsYXIgY29tcG9zaXRlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpY2xlT3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25zdHJhaW50T3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Db21wb3NpdGV9IEEgbmV3IGNvbXBvc2l0ZSBzaW1wbGUgc29mdCBib2R5LlxyXG4gICAgICovXHJcbiAgICBzb2Z0Qm9keTogZnVuY3Rpb24gKHgsIHksIGNvbHVtbnMsIHJvd3MsIGNvbHVtbkdhcCwgcm93R2FwLCBjcm9zc0JyYWNlLCBwYXJ0aWNsZVJhZGl1cywgcGFydGljbGVPcHRpb25zLCBjb25zdHJhaW50T3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgY29tcG9zaXRlID0gQ29tcG9zaXRlcy5zb2Z0Qm9keSh4LCB5LCBjb2x1bW5zLCByb3dzLCBjb2x1bW5HYXAsIHJvd0dhcCwgY3Jvc3NCcmFjZSwgcGFydGljbGVSYWRpdXMsIHBhcnRpY2xlT3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLmFkZChjb21wb3NpdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2pvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHlBIC0gVGhlIGZpcnN0IHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUIgLSBUaGUgc2Vjb25kIHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSAtIEEgTnVtYmVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0YXJnZXQgcmVzdGluZyBsZW5ndGggb2YgdGhlIGNvbnN0cmFpbnQuIElmIG5vdCBnaXZlbiBpdCBpcyBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgaW4gYENvbnN0cmFpbnQuY3JlYXRlYCBmcm9tIGluaXRpYWwgcG9zaXRpb25zIG9mIHRoZSBgY29uc3RyYWludC5ib2R5QWAgYW5kIGBjb25zdHJhaW50LmJvZHlCYC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RpZmZuZXNzPTFdIC0gQSBOdW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHN0aWZmbmVzcyBvZiB0aGUgY29uc3RyYWludCwgaS5lLiB0aGUgcmF0ZSBhdCB3aGljaCBpdCByZXR1cm5zIHRvIGl0cyByZXN0aW5nIGBjb25zdHJhaW50Lmxlbmd0aGAuIEEgdmFsdWUgb2YgYDFgIG1lYW5zIHRoZSBjb25zdHJhaW50IHNob3VsZCBiZSB2ZXJ5IHN0aWZmLiBBIHZhbHVlIG9mIGAwLjJgIG1lYW5zIHRoZSBjb25zdHJhaW50IGFjdHMgYXMgYSBzb2Z0IHNwcmluZy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29uc3RyYWludH0gQSBNYXR0ZXIgSlMgQ29uc3RyYWludC5cclxuICAgICAqL1xyXG4gICAgam9pbnQ6IGZ1bmN0aW9uIChib2R5QSwgYm9keUIsIGxlbmd0aCwgc3RpZmZuZXNzLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnQoYm9keUEsIGJvZHlCLCBsZW5ndGgsIHN0aWZmbmVzcywgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3Rvcnkjc3ByaW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHlBIC0gVGhlIGZpcnN0IHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUIgLSBUaGUgc2Vjb25kIHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSAtIEEgTnVtYmVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0YXJnZXQgcmVzdGluZyBsZW5ndGggb2YgdGhlIGNvbnN0cmFpbnQuIElmIG5vdCBnaXZlbiBpdCBpcyBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgaW4gYENvbnN0cmFpbnQuY3JlYXRlYCBmcm9tIGluaXRpYWwgcG9zaXRpb25zIG9mIHRoZSBgY29uc3RyYWludC5ib2R5QWAgYW5kIGBjb25zdHJhaW50LmJvZHlCYC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RpZmZuZXNzPTFdIC0gQSBOdW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHN0aWZmbmVzcyBvZiB0aGUgY29uc3RyYWludCwgaS5lLiB0aGUgcmF0ZSBhdCB3aGljaCBpdCByZXR1cm5zIHRvIGl0cyByZXN0aW5nIGBjb25zdHJhaW50Lmxlbmd0aGAuIEEgdmFsdWUgb2YgYDFgIG1lYW5zIHRoZSBjb25zdHJhaW50IHNob3VsZCBiZSB2ZXJ5IHN0aWZmLiBBIHZhbHVlIG9mIGAwLjJgIG1lYW5zIHRoZSBjb25zdHJhaW50IGFjdHMgYXMgYSBzb2Z0IHNwcmluZy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29uc3RyYWludH0gQSBNYXR0ZXIgSlMgQ29uc3RyYWludC5cclxuICAgICAqL1xyXG4gICAgc3ByaW5nOiBmdW5jdGlvbiAoYm9keUEsIGJvZHlCLCBsZW5ndGgsIHN0aWZmbmVzcywgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50KGJvZHlBLCBib2R5QiwgbGVuZ3RoLCBzdGlmZm5lc3MsIG9wdGlvbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2NvbnN0cmFpbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUEgLSBUaGUgZmlyc3QgcG9zc2libGUgYEJvZHlgIHRoYXQgdGhpcyBjb25zdHJhaW50IGlzIGF0dGFjaGVkIHRvLlxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5QiAtIFRoZSBzZWNvbmQgcG9zc2libGUgYEJvZHlgIHRoYXQgdGhpcyBjb25zdHJhaW50IGlzIGF0dGFjaGVkIHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIC0gQSBOdW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHRhcmdldCByZXN0aW5nIGxlbmd0aCBvZiB0aGUgY29uc3RyYWludC4gSWYgbm90IGdpdmVuIGl0IGlzIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBpbiBgQ29uc3RyYWludC5jcmVhdGVgIGZyb20gaW5pdGlhbCBwb3NpdGlvbnMgb2YgdGhlIGBjb25zdHJhaW50LmJvZHlBYCBhbmQgYGNvbnN0cmFpbnQuYm9keUJgLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGlmZm5lc3M9MV0gLSBBIE51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgc3RpZmZuZXNzIG9mIHRoZSBjb25zdHJhaW50LCBpLmUuIHRoZSByYXRlIGF0IHdoaWNoIGl0IHJldHVybnMgdG8gaXRzIHJlc3RpbmcgYGNvbnN0cmFpbnQubGVuZ3RoYC4gQSB2YWx1ZSBvZiBgMWAgbWVhbnMgdGhlIGNvbnN0cmFpbnQgc2hvdWxkIGJlIHZlcnkgc3RpZmYuIEEgdmFsdWUgb2YgYDAuMmAgbWVhbnMgdGhlIGNvbnN0cmFpbnQgYWN0cyBhcyBhIHNvZnQgc3ByaW5nLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Db25zdHJhaW50fSBBIE1hdHRlciBKUyBDb25zdHJhaW50LlxyXG4gICAgICovXHJcbiAgICBjb25zdHJhaW50OiBmdW5jdGlvbiAoYm9keUEsIGJvZHlCLCBsZW5ndGgsIHN0aWZmbmVzcywgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RpZmZuZXNzID09PSB1bmRlZmluZWQpIHsgc3RpZmZuZXNzID0gMTsgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsgb3B0aW9ucyA9IHt9OyB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMuYm9keUEgPSAoYm9keUEudHlwZSA9PT0gJ2JvZHknKSA/IGJvZHlBIDogYm9keUEuYm9keTtcclxuICAgICAgICBvcHRpb25zLmJvZHlCID0gKGJvZHlCLnR5cGUgPT09ICdib2R5JykgPyBib2R5QiA6IGJvZHlCLmJvZHk7XHJcblxyXG4gICAgICAgIGlmICghaXNOYU4obGVuZ3RoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3B0aW9ucy5zdGlmZm5lc3MgPSBzdGlmZm5lc3M7XHJcblxyXG4gICAgICAgIHZhciBjb25zdHJhaW50ID0gQ29uc3RyYWludC5jcmVhdGUob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQuYWRkKGNvbnN0cmFpbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29uc3RyYWludDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSN3b3JsZENvbnN0cmFpbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUIgLSBUaGUgc2Vjb25kIHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSAtIEEgTnVtYmVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0YXJnZXQgcmVzdGluZyBsZW5ndGggb2YgdGhlIGNvbnN0cmFpbnQuIElmIG5vdCBnaXZlbiBpdCBpcyBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgaW4gYENvbnN0cmFpbnQuY3JlYXRlYCBmcm9tIGluaXRpYWwgcG9zaXRpb25zIG9mIHRoZSBgY29uc3RyYWludC5ib2R5QWAgYW5kIGBjb25zdHJhaW50LmJvZHlCYC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RpZmZuZXNzPTFdIC0gQSBOdW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHN0aWZmbmVzcyBvZiB0aGUgY29uc3RyYWludCwgaS5lLiB0aGUgcmF0ZSBhdCB3aGljaCBpdCByZXR1cm5zIHRvIGl0cyByZXN0aW5nIGBjb25zdHJhaW50Lmxlbmd0aGAuIEEgdmFsdWUgb2YgYDFgIG1lYW5zIHRoZSBjb25zdHJhaW50IHNob3VsZCBiZSB2ZXJ5IHN0aWZmLiBBIHZhbHVlIG9mIGAwLjJgIG1lYW5zIHRoZSBjb25zdHJhaW50IGFjdHMgYXMgYSBzb2Z0IHNwcmluZy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29uc3RyYWludH0gQSBNYXR0ZXIgSlMgQ29uc3RyYWludC5cclxuICAgICAqL1xyXG4gICAgd29ybGRDb25zdHJhaW50OiBmdW5jdGlvbiAoYm9keUIsIGxlbmd0aCwgc3RpZmZuZXNzLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzdGlmZm5lc3MgPT09IHVuZGVmaW5lZCkgeyBzdGlmZm5lc3MgPSAxOyB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBvcHRpb25zID0ge307IH1cclxuXHJcbiAgICAgICAgb3B0aW9ucy5ib2R5QiA9IChib2R5Qi50eXBlID09PSAnYm9keScpID8gYm9keUIgOiBib2R5Qi5ib2R5O1xyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKGxlbmd0aCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcHRpb25zLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMuc3RpZmZuZXNzID0gc3RpZmZuZXNzO1xyXG5cclxuICAgICAgICB2YXIgY29uc3RyYWludCA9IENvbnN0cmFpbnQuY3JlYXRlKG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLmFkZChjb25zdHJhaW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkZhY3RvcnkjbW91c2VTcHJpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge01hdHRlckpTLkNvbnN0cmFpbnR9IEEgTWF0dGVyIEpTIENvbnN0cmFpbnQuXHJcbiAgICAgKi9cclxuICAgIG1vdXNlU3ByaW5nOiBmdW5jdGlvbiAob3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludGVyQ29uc3RyYWludChvcHRpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNwb2ludGVyQ29uc3RyYWludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7TWF0dGVySlMuQ29uc3RyYWludH0gQSBNYXR0ZXIgSlMgQ29uc3RyYWludC5cclxuICAgICAqL1xyXG4gICAgcG9pbnRlckNvbnN0cmFpbnQ6IGZ1bmN0aW9uIChvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsgb3B0aW9ucyA9IHt9OyB9XHJcblxyXG4gICAgICAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVuZGVyJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcHRpb25zLnJlbmRlciA9IHsgdmlzaWJsZTogZmFsc2UgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludGVyQ29uc3RyYWludCA9IG5ldyBQb2ludGVyQ29uc3RyYWludCh0aGlzLnNjZW5lLCB0aGlzLndvcmxkLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZC5hZGQocG9pbnRlckNvbnN0cmFpbnQuY29uc3RyYWludCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwb2ludGVyQ29uc3RyYWludDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNpbWFnZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguIFNldCB0byBgbnVsbGAgdG8gc2tpcCB0aGlzIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuSW1hZ2V9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgaW1hZ2U6IGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBNYXR0ZXJJbWFnZSh0aGlzLndvcmxkLCB4LCB5LCBrZXksIGZyYW1lLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXMuZGlzcGxheUxpc3QuYWRkKGltYWdlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I3RpbGVCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSB0aWxlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5fSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHRpbGVCb2R5OiBmdW5jdGlvbiAodGlsZSwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZUJvZHkgPSBuZXcgTWF0dGVyVGlsZUJvZHkodGhpcy53b3JsZCwgdGlsZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aWxlQm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNzcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLiBTZXQgdG8gYG51bGxgIHRvIHNraXAgdGhpcyB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLlNwcml0ZX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBzcHJpdGU6IGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzcHJpdGUgPSBuZXcgTWF0dGVyU3ByaXRlKHRoaXMud29ybGQsIHgsIHksIGtleSwgZnJhbWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLnN5cy5kaXNwbGF5TGlzdC5hZGQoc3ByaXRlKTtcclxuICAgICAgICB0aGlzLnN5cy51cGRhdGVMaXN0LmFkZChzcHJpdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3ByaXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2dhbWVPYmplY3RcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gaW5qZWN0IHRoZSBNYXR0ZXIgQm9keSBpbiB0by5cclxuICAgICAqIEBwYXJhbSB7KG9iamVjdHxNYXR0ZXJKUy5Cb2R5KX0gb3B0aW9ucyAtIEEgTWF0dGVyIEJvZHkgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFuIGluc3RhbmNlIG9mIGEgTWF0dGVyIEJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IGhhZCB0aGUgTWF0dGVyIEJvZHkgaW5qZWN0ZWQgaW50byBpdC5cclxuICAgICAqL1xyXG4gICAgZ2FtZU9iamVjdDogZnVuY3Rpb24gKGdhbWVPYmplY3QsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIE1hdHRlckdhbWVPYmplY3QodGhpcy53b3JsZCwgZ2FtZU9iamVjdCwgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zdGFudGx5IHNldHMgdGhlIGxpbmVhciB2ZWxvY2l0eSBvZiB0aGUgZ2l2ZW4gYm9keS4gUG9zaXRpb24sIGFuZ2xlLCBmb3JjZSBldGMuIGFyZSB1bmNoYW5nZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSBhbHNvIGBmb3JjZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSN2ZWxvY2l0eVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keSAtIFRoZSBNYXR0ZXIgQm9keSB0byBzZXQgdGhlIHZlbG9jaXR5IG9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gdmVsb2NpdHkgLSBUaGUgdmVsb2NpdHkgdG8gc2V0LiBBbiBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgY29tcG9uZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Cb2R5fSBUaGUgTWF0dGVyIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIHZlbG9jaXR5OiBmdW5jdGlvbiAoYm9keSwgdmVsb2NpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXRWZWxvY2l0eShib2R5LCB2ZWxvY2l0eSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc3RhbnRseSBzZXRzIHRoZSBhbmd1bGFyIHZlbG9jaXR5IG9mIHRoZSBnaXZlbiBib2R5LiBQb3NpdGlvbiwgYW5nbGUsIGZvcmNlIGV0Yy4gYXJlIHVuY2hhbmdlZC5cclxuICAgICAqIFxyXG4gICAgICogU2VlIGFsc28gYGZvcmNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5I2FuZ3VsYXJWZWxvY2l0eVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keSAtIFRoZSBNYXR0ZXIgQm9keSB0byBzZXQgdGhlIHZlbG9jaXR5IG9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZlbG9jaXR5IC0gVGhlIGFuZ3VsYXIgdmVsb2NpdHkgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge01hdHRlckpTLkJvZHl9IFRoZSBNYXR0ZXIgYm9keS5cclxuICAgICAqL1xyXG4gICAgYW5ndWxhclZlbG9jaXR5OiBmdW5jdGlvbiAoYm9keSwgdmVsb2NpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXRBbmd1bGFyVmVsb2NpdHkoYm9keSwgdmVsb2NpdHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGEgZm9yY2UgdG8gYSBib2R5IGZyb20gYSBnaXZlbiB3b3JsZC1zcGFjZSBwb3NpdGlvbiwgaW5jbHVkaW5nIHJlc3VsdGluZyB0b3JxdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNmb3JjZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keSAtIFRoZSBNYXR0ZXIgQm9keSB0byBzZXQgdGhlIGZvcmNlIG9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gcG9zaXRpb24gLSBUaGUgd29ybGQgcG9zaXRpb24gdG8gYXBwbHkgdGhlIGZvcmNlIGZyb20uIEFuIG9iamVjdCB3aXRoIHB1YmxpYyBgeGAgYW5kIGB5YCBjb21wb25lbnRzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gZm9yY2UgLSBUaGUgZm9yY2UgdG8gc2V0LiBBbiBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgY29tcG9uZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Cb2R5fSBUaGUgTWF0dGVyIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIGZvcmNlOiBmdW5jdGlvbiAoYm9keSwgcG9zaXRpb24sIGZvcmNlKVxyXG4gICAge1xyXG4gICAgICAgIEJvZHkuYXBwbHlGb3JjZShib2R5LCBwb3NpdGlvbiwgZm9yY2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEZhY3RvcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRmFjdG9yeSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndvcmxkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmFjdG9yeTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/Factory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/MatterGameObject.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/MatterGameObject.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/matter-js/components/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Internal function to check if the object has a getter or setter.\r\n *\r\n * @function hasGetterOrSetter\r\n * @private\r\n *\r\n * @param {object} def - The object to check.\r\n *\r\n * @return {boolean} True if it has a getter or setter, otherwise false.\r\n */\r\nfunction hasGetterOrSetter (def)\r\n{\r\n    return (!!def.get && typeof def.get === 'function') || (!!def.set && typeof def.set === 'function');\r\n}\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Physics.Matter.MatterGameObject\r\n * @since 3.3.0\r\n *\r\n * @param {Phaser.Physics.Matter.World} world - The Matter world to add the body to.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will have the Matter body applied to it.\r\n * @param {(object|MatterJS.Body)} options - A Matter Body configuration object, or an instance of a Matter Body.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was created with the Matter body.\r\n */\r\nvar MatterGameObject = function (world, gameObject, options)\r\n{\r\n    if (options === undefined) { options = {}; }\r\n\r\n    var x = gameObject.x;\r\n    var y = gameObject.y;\r\n\r\n    //  Temp body pos to avoid body null checks\r\n    gameObject.body = {\r\n        temp: true,\r\n        position: {\r\n            x: x,\r\n            y: y\r\n        }\r\n    };\r\n\r\n    var mixins = [\r\n        Components.Bounce,\r\n        Components.Collision,\r\n        Components.Force,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Mass,\r\n        Components.Sensor,\r\n        Components.SetBody,\r\n        Components.Sleep,\r\n        Components.Static,\r\n        Components.Transform,\r\n        Components.Velocity\r\n    ];\r\n\r\n    //  First let's inject all of the components into the Game Object\r\n    mixins.forEach(function (mixin)\r\n    {\r\n        for (var key in mixin)\r\n        {\r\n            if (hasGetterOrSetter(mixin[key]))\r\n            {\r\n                Object.defineProperty(gameObject, key, {\r\n                    get: mixin[key].get,\r\n                    set: mixin[key].set\r\n                });\r\n            }\r\n            else\r\n            {\r\n                Object.defineProperty(gameObject, key, {value: mixin[key]});\r\n            }\r\n        }\r\n\r\n    });\r\n\r\n    gameObject.world = world;\r\n\r\n    gameObject._tempVec2 = new Vector2(x, y);\r\n\r\n    if (options.hasOwnProperty('type') && options.type === 'body')\r\n    {\r\n        gameObject.setExistingBody(options, true);\r\n    }\r\n    else\r\n    {\r\n        var shape = GetFastValue(options, 'shape', null);\r\n\r\n        if (!shape)\r\n        {\r\n            shape = 'rectangle';\r\n        }\r\n    \r\n        gameObject.setBody(shape, options);\r\n    }\r\n\r\n    return gameObject;\r\n};\r\n\r\nmodule.exports = MatterGameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJHYW1lT2JqZWN0LmpzPzM0NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHFGQUFjO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLHVCQUF1QjtBQUNsQztBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxjQUFjOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSx3REFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJHYW1lT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBvYmplY3QgaGFzIGEgZ2V0dGVyIG9yIHNldHRlci5cclxuICpcclxuICogQGZ1bmN0aW9uIGhhc0dldHRlck9yU2V0dGVyXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWYgLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGl0IGhhcyBhIGdldHRlciBvciBzZXR0ZXIsIG90aGVyd2lzZSBmYWxzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc0dldHRlck9yU2V0dGVyIChkZWYpXHJcbntcclxuICAgIHJldHVybiAoISFkZWYuZ2V0ICYmIHR5cGVvZiBkZWYuZ2V0ID09PSAnZnVuY3Rpb24nKSB8fCAoISFkZWYuc2V0ICYmIHR5cGVvZiBkZWYuc2V0ID09PSAnZnVuY3Rpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJHYW1lT2JqZWN0XHJcbiAqIEBzaW5jZSAzLjMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gd29ybGQgLSBUaGUgTWF0dGVyIHdvcmxkIHRvIGFkZCB0aGUgYm9keSB0by5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgaGF2ZSB0aGUgTWF0dGVyIGJvZHkgYXBwbGllZCB0byBpdC5cclxuICogQHBhcmFtIHsob2JqZWN0fE1hdHRlckpTLkJvZHkpfSBvcHRpb25zIC0gQSBNYXR0ZXIgQm9keSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBNYXR0ZXIgQm9keS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkIHdpdGggdGhlIE1hdHRlciBib2R5LlxyXG4gKi9cclxudmFyIE1hdHRlckdhbWVPYmplY3QgPSBmdW5jdGlvbiAod29ybGQsIGdhbWVPYmplY3QsIG9wdGlvbnMpXHJcbntcclxuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsgb3B0aW9ucyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHggPSBnYW1lT2JqZWN0Lng7XHJcbiAgICB2YXIgeSA9IGdhbWVPYmplY3QueTtcclxuXHJcbiAgICAvLyAgVGVtcCBib2R5IHBvcyB0byBhdm9pZCBib2R5IG51bGwgY2hlY2tzXHJcbiAgICBnYW1lT2JqZWN0LmJvZHkgPSB7XHJcbiAgICAgICAgdGVtcDogdHJ1ZSxcclxuICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB4OiB4LFxyXG4gICAgICAgICAgICB5OiB5XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgbWl4aW5zID0gW1xyXG4gICAgICAgIENvbXBvbmVudHMuQm91bmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29sbGlzaW9uLFxyXG4gICAgICAgIENvbXBvbmVudHMuRm9yY2UsXHJcbiAgICAgICAgQ29tcG9uZW50cy5GcmljdGlvbixcclxuICAgICAgICBDb21wb25lbnRzLkdyYXZpdHksXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNzLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Vuc29yLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2V0Qm9keSxcclxuICAgICAgICBDb21wb25lbnRzLlNsZWVwLFxyXG4gICAgICAgIENvbXBvbmVudHMuU3RhdGljLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmVsb2NpdHlcclxuICAgIF07XHJcblxyXG4gICAgLy8gIEZpcnN0IGxldCdzIGluamVjdCBhbGwgb2YgdGhlIGNvbXBvbmVudHMgaW50byB0aGUgR2FtZSBPYmplY3RcclxuICAgIG1peGlucy5mb3JFYWNoKGZ1bmN0aW9uIChtaXhpbilcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWl4aW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaGFzR2V0dGVyT3JTZXR0ZXIobWl4aW5ba2V5XSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnYW1lT2JqZWN0LCBrZXksIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6IG1peGluW2tleV0uZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNldDogbWl4aW5ba2V5XS5zZXRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdhbWVPYmplY3QsIGtleSwge3ZhbHVlOiBtaXhpbltrZXldfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgZ2FtZU9iamVjdC53b3JsZCA9IHdvcmxkO1xyXG5cclxuICAgIGdhbWVPYmplY3QuX3RlbXBWZWMyID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJiBvcHRpb25zLnR5cGUgPT09ICdib2R5JylcclxuICAgIHtcclxuICAgICAgICBnYW1lT2JqZWN0LnNldEV4aXN0aW5nQm9keShvcHRpb25zLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB2YXIgc2hhcGUgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ3NoYXBlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghc2hhcGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzaGFwZSA9ICdyZWN0YW5nbGUnO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0Qm9keShzaGFwZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHRlckdhbWVPYmplY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/MatterGameObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/MatterImage.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/MatterImage.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/matter-js/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Image = __webpack_require__(/*! ../../gameobjects/image/Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\nvar Pipeline = __webpack_require__(/*! ../../gameobjects/components/Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Matter Physics Image Game Object.\r\n * \r\n * An Image is a light-weight Game Object useful for the display of static images in your game,\r\n * such as logos, backgrounds, scenery or other non-animated elements. Images can have input\r\n * events and physics bodies, or be tweened, tinted or scrolled. The main difference between an\r\n * Image and a Sprite is that you cannot animate an Image as they do not have the Animation component.\r\n *\r\n * @class Image\r\n * @extends Phaser.GameObjects.Image\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Matter.Components.Bounce\r\n * @extends Phaser.Physics.Matter.Components.Collision\r\n * @extends Phaser.Physics.Matter.Components.Force\r\n * @extends Phaser.Physics.Matter.Components.Friction\r\n * @extends Phaser.Physics.Matter.Components.Gravity\r\n * @extends Phaser.Physics.Matter.Components.Mass\r\n * @extends Phaser.Physics.Matter.Components.Sensor\r\n * @extends Phaser.Physics.Matter.Components.SetBody\r\n * @extends Phaser.Physics.Matter.Components.Sleep\r\n * @extends Phaser.Physics.Matter.Components.Static\r\n * @extends Phaser.Physics.Matter.Components.Transform\r\n * @extends Phaser.Physics.Matter.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Physics.Matter.World} world - [description]\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * @param {object} [options={}] - Matter.js configuration object.\r\n */\r\nvar MatterImage = new Class({\r\n\r\n    Extends: Image,\r\n\r\n    Mixins: [\r\n        Components.Bounce,\r\n        Components.Collision,\r\n        Components.Force,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Mass,\r\n        Components.Sensor,\r\n        Components.SetBody,\r\n        Components.Sleep,\r\n        Components.Static,\r\n        Components.Transform,\r\n        Components.Velocity,\r\n        Pipeline\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function MatterImage (world, x, y, texture, frame, options)\r\n    {\r\n        GameObject.call(this, world.scene, 'Image');\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setSizeToFrame();\r\n        this.setOrigin();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.Image#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.Image#_tempVec2\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempVec2 = new Vector2(x, y);\r\n\r\n        var shape = GetFastValue(options, 'shape', null);\r\n\r\n        if (shape)\r\n        {\r\n            this.setBody(shape, options);\r\n        }\r\n        else\r\n        {\r\n            this.setRectangle(this.width, this.height, options);\r\n        }\r\n\r\n        this.setPosition(x, y);\r\n\r\n        this.initPipeline('TextureTintPipeline');\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MatterImage;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJJbWFnZS5qcz84YjY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHFGQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHlGQUE4QjtBQUN2RCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsWUFBWSxtQkFBTyxDQUFDLDJGQUErQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsMkdBQXVDO0FBQzlELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU8sWUFBWTtBQUM5QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL01hdHRlckltYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL0dhbWVPYmplY3QnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEltYWdlID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvaW1hZ2UvSW1hZ2UnKTtcclxudmFyIFBpcGVsaW5lID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9QaXBlbGluZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBNYXR0ZXIgUGh5c2ljcyBJbWFnZSBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIEFuIEltYWdlIGlzIGEgbGlnaHQtd2VpZ2h0IEdhbWUgT2JqZWN0IHVzZWZ1bCBmb3IgdGhlIGRpc3BsYXkgb2Ygc3RhdGljIGltYWdlcyBpbiB5b3VyIGdhbWUsXHJcbiAqIHN1Y2ggYXMgbG9nb3MsIGJhY2tncm91bmRzLCBzY2VuZXJ5IG9yIG90aGVyIG5vbi1hbmltYXRlZCBlbGVtZW50cy4gSW1hZ2VzIGNhbiBoYXZlIGlucHV0XHJcbiAqIGV2ZW50cyBhbmQgcGh5c2ljcyBib2RpZXMsIG9yIGJlIHR3ZWVuZWQsIHRpbnRlZCBvciBzY3JvbGxlZC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGFuXHJcbiAqIEltYWdlIGFuZCBhIFNwcml0ZSBpcyB0aGF0IHlvdSBjYW5ub3QgYW5pbWF0ZSBhbiBJbWFnZSBhcyB0aGV5IGRvIG5vdCBoYXZlIHRoZSBBbmltYXRpb24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAY2xhc3MgSW1hZ2VcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkltYWdlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5NYXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Cb3VuY2VcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuQ29sbGlzaW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZvcmNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZyaWN0aW9uXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkdyYXZpdHlcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuTWFzc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TZW5zb3JcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2V0Qm9keVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TbGVlcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TdGF0aWNcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlZlbG9jaXR5XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkfSB3b3JsZCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIC0gTWF0dGVyLmpzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIE1hdHRlckltYWdlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBJbWFnZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkJvdW5jZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbGxpc2lvbixcclxuICAgICAgICBDb21wb25lbnRzLkZvcmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRnJpY3Rpb24sXHJcbiAgICAgICAgQ29tcG9uZW50cy5HcmF2aXR5LFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzcyxcclxuICAgICAgICBDb21wb25lbnRzLlNlbnNvcixcclxuICAgICAgICBDb21wb25lbnRzLlNldEJvZHksXHJcbiAgICAgICAgQ29tcG9uZW50cy5TbGVlcCxcclxuICAgICAgICBDb21wb25lbnRzLlN0YXRpYyxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZlbG9jaXR5LFxyXG4gICAgICAgIFBpcGVsaW5lXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTWF0dGVySW1hZ2UgKHdvcmxkLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgd29ybGQuc2NlbmUsICdJbWFnZScpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2l6ZVRvRnJhbWUoKTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuSW1hZ2Ujd29ybGRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud29ybGQgPSB3b3JsZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkltYWdlI190ZW1wVmVjMlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcFZlYzIgPSBuZXcgVmVjdG9yMih4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHNoYXBlID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdzaGFwZScsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoc2hhcGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJvZHkoc2hhcGUsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFJlY3RhbmdsZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgnVGV4dHVyZVRpbnRQaXBlbGluZScpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHRlckltYWdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/MatterImage.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/MatterPhysics.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/MatterPhysics.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Factory = __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/matter-js/Factory.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MatterAttractors = __webpack_require__(/*! ./lib/plugins/MatterAttractors */ \"./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterAttractors.js\");\r\nvar MatterLib = __webpack_require__(/*! ./lib/core/Matter */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Matter.js\");\r\nvar MatterWrap = __webpack_require__(/*! ./lib/plugins/MatterWrap */ \"./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterWrap.js\");\r\nvar Merge = __webpack_require__(/*! ../../utils/object/Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\");\r\nvar Plugin = __webpack_require__(/*! ./lib/core/Plugin */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar World = __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/matter-js/World.js\");\r\nvar Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class MatterPhysics\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar MatterPhysics = new Class({\r\n\r\n    initialize:\r\n\r\n    function MatterPhysics (scene)\r\n    {\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#config\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = this.getConfig();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#add\r\n         * @type {Phaser.Physics.Matter.Factory}\r\n         * @since 3.0.0\r\n         */\r\n        this.add;\r\n\r\n        /**\r\n         * A reference to the `Matter.Vertices` module which contains methods for creating and manipulating sets of vertices.\r\n         * A set of vertices is an array of `Matter.Vector` with additional indexing properties inserted by `Vertices.create`.\r\n         * A `Matter.Body` maintains a set of vertices to represent the shape of the object (its convex hull).\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#verts\r\n         * @type {MatterJS.Vertices}\r\n         * @since 3.14.0\r\n         */\r\n        this.verts = Vertices;\r\n\r\n        /**\r\n         * A reference to the `Matter.Body` module which contains methods for creating and manipulating body models.\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#body\r\n         * @type {MatterJS.Body}\r\n         * @since 3.18.0\r\n         */\r\n        this.body = Body;\r\n\r\n        /**\r\n         * A reference to the `Matter.Bodies` module which contains methods for creating bodies.\r\n         *\r\n         * @name Phaser.Physics.Matter.MatterPhysics#bodies\r\n         * @type {MatterJS.Bodies}\r\n         * @since 3.18.0\r\n         */\r\n        this.bodies = Bodies;\r\n\r\n        //  Matter plugins\r\n\r\n        if (GetValue(this.config, 'plugins.attractors', false))\r\n        {\r\n            Plugin.register(MatterAttractors);\r\n            Plugin.use(MatterLib, MatterAttractors);\r\n        }\r\n\r\n        if (GetValue(this.config, 'plugins.wrap', false))\r\n        {\r\n            Plugin.register(MatterWrap);\r\n            Plugin.use(MatterLib, MatterWrap);\r\n        }\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.world = new World(this.scene, this.config);\r\n        this.add = new Factory(this.world);\r\n\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        if (!this.world)\r\n        {\r\n            this.world = new World(this.scene, this.config);\r\n            this.add = new Factory(this.world);\r\n        }\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.UPDATE, this.world.update, this.world);\r\n        eventEmitter.on(SceneEvents.POST_UPDATE, this.world.postUpdate, this.world);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#getConfig\r\n     * @since 3.0.0\r\n     *\r\n     * @return {object} [description]\r\n     */\r\n    getConfig: function ()\r\n    {\r\n        var gameConfig = this.systems.game.config.physics;\r\n        var sceneConfig = this.systems.settings.physics;\r\n\r\n        var config = Merge(\r\n            GetFastValue(sceneConfig, 'matter', {}),\r\n            GetFastValue(gameConfig, 'matter', {})\r\n        );\r\n\r\n        return config;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#enableAttractorPlugin\r\n     * @since 3.0.0\r\n     * \r\n     * @return {Phaser.Physics.Matter.MatterPhysics} This Matter Physics instance.\r\n     */\r\n    enableAttractorPlugin: function ()\r\n    {\r\n        Plugin.register(MatterAttractors);\r\n        Plugin.use(MatterLib, MatterAttractors);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#enableWrapPlugin\r\n     * @since 3.0.0\r\n     * \r\n     * @return {Phaser.Physics.Matter.MatterPhysics} This Matter Physics instance.\r\n     */\r\n    enableWrapPlugin: function ()\r\n    {\r\n        Plugin.register(MatterWrap);\r\n        Plugin.use(MatterLib, MatterWrap);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} The Matter World object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        return this.world.pause();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} The Matter World object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        return this.world.resume();\r\n    },\r\n\r\n    /**\r\n     * Sets the Matter Engine to run at fixed timestep of 60Hz and enables `autoUpdate`.\r\n     * If you have set a custom `getDelta` function then this will override it.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#set60Hz\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.MatterPhysics} This Matter Physics instance.\r\n     */\r\n    set60Hz: function ()\r\n    {\r\n        this.world.getDelta = this.world.update60Hz;\r\n        this.world.autoUpdate = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the Matter Engine to run at fixed timestep of 30Hz and enables `autoUpdate`.\r\n     * If you have set a custom `getDelta` function then this will override it.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#set30Hz\r\n     * @since 3.4.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.MatterPhysics} This Matter Physics instance.\r\n     */\r\n    set30Hz: function ()\r\n    {\r\n        this.world.getDelta = this.world.update30Hz;\r\n        this.world.autoUpdate = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Manually advances the physics simulation by one iteration.\r\n     * \r\n     * You can optionally pass in the `delta` and `correction` values to be used by Engine.update.\r\n     * If undefined they use the Matter defaults of 60Hz and no correction.\r\n     * \r\n     * Calling `step` directly bypasses any checks of `enabled` or `autoUpdate`.\r\n     * \r\n     * It also ignores any custom `getDelta` functions, as you should be passing the delta\r\n     * value in to this call.\r\n     *\r\n     * You can adjust the number of iterations that Engine.update performs internally.\r\n     * Use the Scene Matter Physics config object to set the following properties:\r\n     *\r\n     * positionIterations (defaults to 6)\r\n     * velocityIterations (defaults to 4)\r\n     * constraintIterations (defaults to 2)\r\n     *\r\n     * Adjusting these values can help performance in certain situations, depending on the physics requirements\r\n     * of your game.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#step\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} [delta=16.666] - [description]\r\n     * @param {number} [correction=1] - [description]\r\n     */\r\n    step: function (delta, correction)\r\n    {\r\n        this.world.step(delta, correction);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        if (this.world)\r\n        {\r\n            eventEmitter.off(SceneEvents.UPDATE, this.world.update, this.world);\r\n            eventEmitter.off(SceneEvents.POST_UPDATE, this.world.postUpdate, this.world);\r\n        }\r\n\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        if (this.add)\r\n        {\r\n            this.add.destroy();\r\n        }\r\n\r\n        if (this.world)\r\n        {\r\n            this.world.destroy();\r\n        }\r\n\r\n        this.add = null;\r\n        this.world = null;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Physics.Matter.MatterPhysics#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('MatterPhysics', MatterPhysics, 'matterPhysics');\r\n\r\nmodule.exports = MatterPhysics;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJQaHlzaWNzLmpzPzQzODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxxRkFBaUI7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLCtGQUFzQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyx5RUFBVztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCx1QkFBdUIsbUJBQU8sQ0FBQyxtSEFBZ0M7QUFDL0QsZ0JBQWdCLG1CQUFPLENBQUMseUZBQW1CO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLHVHQUEwQjtBQUNuRCxZQUFZLG1CQUFPLENBQUMsaUZBQTBCO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyx5RkFBbUI7QUFDeEMsa0JBQWtCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLDJFQUFvQjtBQUM5QyxZQUFZLG1CQUFPLENBQUMscUVBQVM7QUFDN0IsZUFBZSxtQkFBTyxDQUFDLHFHQUF5Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRCxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvTWF0dGVyUGh5c2ljcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZHkgPSByZXF1aXJlKCcuL2xpYi9ib2R5L0JvZHknKTtcclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGYWN0b3J5ID0gcmVxdWlyZSgnLi9GYWN0b3J5Jyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgTWF0dGVyQXR0cmFjdG9ycyA9IHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvTWF0dGVyQXR0cmFjdG9ycycpO1xyXG52YXIgTWF0dGVyTGliID0gcmVxdWlyZSgnLi9saWIvY29yZS9NYXR0ZXInKTtcclxudmFyIE1hdHRlcldyYXAgPSByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL01hdHRlcldyYXAnKTtcclxudmFyIE1lcmdlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L01lcmdlJyk7XHJcbnZhciBQbHVnaW4gPSByZXF1aXJlKCcuL2xpYi9jb3JlL1BsdWdpbicpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi8uLi9wbHVnaW5zL1BsdWdpbkNhY2hlJyk7XHJcbnZhciBTY2VuZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL3NjZW5lL2V2ZW50cycpO1xyXG52YXIgV29ybGQgPSByZXF1aXJlKCcuL1dvcmxkJyk7XHJcbnZhciBWZXJ0aWNlcyA9IHJlcXVpcmUoJy4vbGliL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBNYXR0ZXJQaHlzaWNzXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGh5c2ljcy5NYXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgTWF0dGVyUGh5c2ljcyA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBNYXR0ZXJQaHlzaWNzIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyNzeXN0ZW1zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU3lzdGVtc31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBzY2VuZS5zeXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI2NvbmZpZ1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyN3b3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjYWRkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLk1hdHRlci5GYWN0b3J5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWRkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYE1hdHRlci5WZXJ0aWNlc2AgbW9kdWxlIHdoaWNoIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgc2V0cyBvZiB2ZXJ0aWNlcy5cclxuICAgICAgICAgKiBBIHNldCBvZiB2ZXJ0aWNlcyBpcyBhbiBhcnJheSBvZiBgTWF0dGVyLlZlY3RvcmAgd2l0aCBhZGRpdGlvbmFsIGluZGV4aW5nIHByb3BlcnRpZXMgaW5zZXJ0ZWQgYnkgYFZlcnRpY2VzLmNyZWF0ZWAuXHJcbiAgICAgICAgICogQSBgTWF0dGVyLkJvZHlgIG1haW50YWlucyBhIHNldCBvZiB2ZXJ0aWNlcyB0byByZXByZXNlbnQgdGhlIHNoYXBlIG9mIHRoZSBvYmplY3QgKGl0cyBjb252ZXggaHVsbCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyN2ZXJ0c1xyXG4gICAgICAgICAqIEB0eXBlIHtNYXR0ZXJKUy5WZXJ0aWNlc31cclxuICAgICAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0cyA9IFZlcnRpY2VzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYE1hdHRlci5Cb2R5YCBtb2R1bGUgd2hpY2ggY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBib2R5IG1vZGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI2JvZHlcclxuICAgICAgICAgKiBAdHlwZSB7TWF0dGVySlMuQm9keX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2R5ID0gQm9keTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBNYXR0ZXIuQm9kaWVzYCBtb2R1bGUgd2hpY2ggY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYm9kaWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjYm9kaWVzXHJcbiAgICAgICAgICogQHR5cGUge01hdHRlckpTLkJvZGllc31cclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2RpZXMgPSBCb2RpZXM7XHJcblxyXG4gICAgICAgIC8vICBNYXR0ZXIgcGx1Z2luc1xyXG5cclxuICAgICAgICBpZiAoR2V0VmFsdWUodGhpcy5jb25maWcsICdwbHVnaW5zLmF0dHJhY3RvcnMnLCBmYWxzZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBQbHVnaW4ucmVnaXN0ZXIoTWF0dGVyQXR0cmFjdG9ycyk7XHJcbiAgICAgICAgICAgIFBsdWdpbi51c2UoTWF0dGVyTGliLCBNYXR0ZXJBdHRyYWN0b3JzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChHZXRWYWx1ZSh0aGlzLmNvbmZpZywgJ3BsdWdpbnMud3JhcCcsIGZhbHNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFBsdWdpbi5yZWdpc3RlcihNYXR0ZXJXcmFwKTtcclxuICAgICAgICAgICAgUGx1Z2luLnVzZShNYXR0ZXJMaWIsIE1hdHRlcldyYXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy53b3JsZCA9IG5ldyBXb3JsZCh0aGlzLnNjZW5lLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5hZGQgPSBuZXcgRmFjdG9yeSh0aGlzLndvcmxkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3Mjc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndvcmxkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZCA9IG5ldyBXb3JsZCh0aGlzLnNjZW5lLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkID0gbmV3IEZhY3RvcnkodGhpcy53b3JsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy53b3JsZC51cGRhdGUsIHRoaXMud29ybGQpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5QT1NUX1VQREFURSwgdGhpcy53b3JsZC5wb3N0VXBkYXRlLCB0aGlzLndvcmxkKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjZ2V0Q29uZmlnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZmlnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnYW1lQ29uZmlnID0gdGhpcy5zeXN0ZW1zLmdhbWUuY29uZmlnLnBoeXNpY3M7XHJcbiAgICAgICAgdmFyIHNjZW5lQ29uZmlnID0gdGhpcy5zeXN0ZW1zLnNldHRpbmdzLnBoeXNpY3M7XHJcblxyXG4gICAgICAgIHZhciBjb25maWcgPSBNZXJnZShcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnbWF0dGVyJywge30pLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoZ2FtZUNvbmZpZywgJ21hdHRlcicsIHt9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjZW5hYmxlQXR0cmFjdG9yUGx1Z2luXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3N9IFRoaXMgTWF0dGVyIFBoeXNpY3MgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUF0dHJhY3RvclBsdWdpbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBQbHVnaW4ucmVnaXN0ZXIoTWF0dGVyQXR0cmFjdG9ycyk7XHJcbiAgICAgICAgUGx1Z2luLnVzZShNYXR0ZXJMaWIsIE1hdHRlckF0dHJhY3RvcnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyNlbmFibGVXcmFwUGx1Z2luXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3N9IFRoaXMgTWF0dGVyIFBoeXNpY3MgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVdyYXBQbHVnaW46IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgUGx1Z2luLnJlZ2lzdGVyKE1hdHRlcldyYXApO1xyXG4gICAgICAgIFBsdWdpbi51c2UoTWF0dGVyTGliLCBNYXR0ZXJXcmFwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gVGhlIE1hdHRlciBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndvcmxkLnBhdXNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLk1hdHRlclBoeXNpY3MjcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoZSBNYXR0ZXIgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGQucmVzdW1lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgTWF0dGVyIEVuZ2luZSB0byBydW4gYXQgZml4ZWQgdGltZXN0ZXAgb2YgNjBIeiBhbmQgZW5hYmxlcyBgYXV0b1VwZGF0ZWAuXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBzZXQgYSBjdXN0b20gYGdldERlbHRhYCBmdW5jdGlvbiB0aGVuIHRoaXMgd2lsbCBvdmVycmlkZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI3NldDYwSHpcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzfSBUaGlzIE1hdHRlciBQaHlzaWNzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXQ2MEh6OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQuZ2V0RGVsdGEgPSB0aGlzLndvcmxkLnVwZGF0ZTYwSHo7XHJcbiAgICAgICAgdGhpcy53b3JsZC5hdXRvVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgTWF0dGVyIEVuZ2luZSB0byBydW4gYXQgZml4ZWQgdGltZXN0ZXAgb2YgMzBIeiBhbmQgZW5hYmxlcyBgYXV0b1VwZGF0ZWAuXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBzZXQgYSBjdXN0b20gYGdldERlbHRhYCBmdW5jdGlvbiB0aGVuIHRoaXMgd2lsbCBvdmVycmlkZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI3NldDMwSHpcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzfSBUaGlzIE1hdHRlciBQaHlzaWNzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXQzMEh6OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQuZ2V0RGVsdGEgPSB0aGlzLndvcmxkLnVwZGF0ZTMwSHo7XHJcbiAgICAgICAgdGhpcy53b3JsZC5hdXRvVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgYWR2YW5jZXMgdGhlIHBoeXNpY3Mgc2ltdWxhdGlvbiBieSBvbmUgaXRlcmF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgYGRlbHRhYCBhbmQgYGNvcnJlY3Rpb25gIHZhbHVlcyB0byBiZSB1c2VkIGJ5IEVuZ2luZS51cGRhdGUuXHJcbiAgICAgKiBJZiB1bmRlZmluZWQgdGhleSB1c2UgdGhlIE1hdHRlciBkZWZhdWx0cyBvZiA2MEh6IGFuZCBubyBjb3JyZWN0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIGBzdGVwYCBkaXJlY3RseSBieXBhc3NlcyBhbnkgY2hlY2tzIG9mIGBlbmFibGVkYCBvciBgYXV0b1VwZGF0ZWAuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGFsc28gaWdub3JlcyBhbnkgY3VzdG9tIGBnZXREZWx0YWAgZnVuY3Rpb25zLCBhcyB5b3Ugc2hvdWxkIGJlIHBhc3NpbmcgdGhlIGRlbHRhXHJcbiAgICAgKiB2YWx1ZSBpbiB0byB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhZGp1c3QgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgRW5naW5lLnVwZGF0ZSBwZXJmb3JtcyBpbnRlcm5hbGx5LlxyXG4gICAgICogVXNlIHRoZSBTY2VuZSBNYXR0ZXIgUGh5c2ljcyBjb25maWcgb2JqZWN0IHRvIHNldCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKlxyXG4gICAgICogcG9zaXRpb25JdGVyYXRpb25zIChkZWZhdWx0cyB0byA2KVxyXG4gICAgICogdmVsb2NpdHlJdGVyYXRpb25zIChkZWZhdWx0cyB0byA0KVxyXG4gICAgICogY29uc3RyYWludEl0ZXJhdGlvbnMgKGRlZmF1bHRzIHRvIDIpXHJcbiAgICAgKlxyXG4gICAgICogQWRqdXN0aW5nIHRoZXNlIHZhbHVlcyBjYW4gaGVscCBwZXJmb3JtYW5jZSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgcGh5c2ljcyByZXF1aXJlbWVudHNcclxuICAgICAqIG9mIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI3N0ZXBcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGE9MTYuNjY2XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29ycmVjdGlvbj0xXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKGRlbHRhLCBjb3JyZWN0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud29ybGQuc3RlcChkZWx0YSwgY29ycmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5NYXR0ZXJQaHlzaWNzI3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy53b3JsZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLndvcmxkLnVwZGF0ZSwgdGhpcy53b3JsZCk7XHJcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuUE9TVF9VUERBVEUsIHRoaXMud29ybGQucG9zdFVwZGF0ZSwgdGhpcy53b3JsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWRkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGQuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMud29ybGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWRkID0gbnVsbDtcclxuICAgICAgICB0aGlzLndvcmxkID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljcyNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ01hdHRlclBoeXNpY3MnLCBNYXR0ZXJQaHlzaWNzLCAnbWF0dGVyUGh5c2ljcycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYXR0ZXJQaHlzaWNzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/MatterPhysics.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/MatterSprite.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/MatterSprite.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AnimationComponent = __webpack_require__(/*! ../../gameobjects/components/Animation */ \"./node_modules/phaser/src/gameobjects/components/Animation.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/matter-js/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Pipeline = __webpack_require__(/*! ../../gameobjects/components/Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\");\r\nvar Sprite = __webpack_require__(/*! ../../gameobjects/sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Matter Physics Sprite Game Object.\r\n *\r\n * A Sprite Game Object is used for the display of both static and animated images in your game.\r\n * Sprites can have input events and physics bodies. They can also be tweened, tinted, scrolled\r\n * and animated.\r\n *\r\n * The main difference between a Sprite and an Image Game Object is that you cannot animate Images.\r\n * As such, Sprites take a fraction longer to process and have a larger API footprint due to the Animation\r\n * Component. If you do not require animation then you can safely use Images to replace Sprites in all cases.\r\n *\r\n * @class Sprite\r\n * @extends Phaser.GameObjects.Sprite\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Matter.Components.Bounce\r\n * @extends Phaser.Physics.Matter.Components.Collision\r\n * @extends Phaser.Physics.Matter.Components.Force\r\n * @extends Phaser.Physics.Matter.Components.Friction\r\n * @extends Phaser.Physics.Matter.Components.Gravity\r\n * @extends Phaser.Physics.Matter.Components.Mass\r\n * @extends Phaser.Physics.Matter.Components.Sensor\r\n * @extends Phaser.Physics.Matter.Components.SetBody\r\n * @extends Phaser.Physics.Matter.Components.Sleep\r\n * @extends Phaser.Physics.Matter.Components.Static\r\n * @extends Phaser.Physics.Matter.Components.Transform\r\n * @extends Phaser.Physics.Matter.Components.Velocity\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Physics.Matter.World} world - [description]\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * @param {object} [options={}] - Matter.js configuration object.\r\n */\r\nvar MatterSprite = new Class({\r\n\r\n    Extends: Sprite,\r\n\r\n    Mixins: [\r\n        Components.Bounce,\r\n        Components.Collision,\r\n        Components.Force,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Mass,\r\n        Components.Sensor,\r\n        Components.SetBody,\r\n        Components.Sleep,\r\n        Components.Static,\r\n        Components.Transform,\r\n        Components.Velocity,\r\n        Pipeline\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function MatterSprite (world, x, y, texture, frame, options)\r\n    {\r\n        GameObject.call(this, world.scene, 'Sprite');\r\n\r\n        this.anims = new AnimationComponent(this);\r\n\r\n        this.setTexture(texture, frame);\r\n        this.setSizeToFrame();\r\n        this.setOrigin();\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.Sprite#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Physics.Matter.Sprite#_tempVec2\r\n         * @type {Phaser.Math.Vector2}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempVec2 = new Vector2(x, y);\r\n\r\n        var shape = GetFastValue(options, 'shape', null);\r\n\r\n        if (shape)\r\n        {\r\n            this.setBody(shape, options);\r\n        }\r\n        else\r\n        {\r\n            this.setRectangle(this.width, this.height, options);\r\n        }\r\n\r\n        this.setPosition(x, y);\r\n\r\n        this.initPipeline('TextureTintPipeline');\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MatterSprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJTcHJpdGUuanM/ZTNmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsNkdBQXdDO0FBQ3pFLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMscUZBQWM7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMseUZBQThCO0FBQ3ZELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxlQUFlLG1CQUFPLENBQUMsMkdBQXVDO0FBQzlELGFBQWEsbUJBQU8sQ0FBQywrRkFBaUM7QUFDdEQsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTyxZQUFZO0FBQzlCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvTWF0dGVyU3ByaXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQW5pbWF0aW9uQ29tcG9uZW50ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9BbmltYXRpb24nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQaXBlbGluZSA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvUGlwZWxpbmUnKTtcclxudmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGUnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgTWF0dGVyIFBoeXNpY3MgU3ByaXRlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBBIFNwcml0ZSBHYW1lIE9iamVjdCBpcyB1c2VkIGZvciB0aGUgZGlzcGxheSBvZiBib3RoIHN0YXRpYyBhbmQgYW5pbWF0ZWQgaW1hZ2VzIGluIHlvdXIgZ2FtZS5cclxuICogU3ByaXRlcyBjYW4gaGF2ZSBpbnB1dCBldmVudHMgYW5kIHBoeXNpY3MgYm9kaWVzLiBUaGV5IGNhbiBhbHNvIGJlIHR3ZWVuZWQsIHRpbnRlZCwgc2Nyb2xsZWRcclxuICogYW5kIGFuaW1hdGVkLlxyXG4gKlxyXG4gKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYSBTcHJpdGUgYW5kIGFuIEltYWdlIEdhbWUgT2JqZWN0IGlzIHRoYXQgeW91IGNhbm5vdCBhbmltYXRlIEltYWdlcy5cclxuICogQXMgc3VjaCwgU3ByaXRlcyB0YWtlIGEgZnJhY3Rpb24gbG9uZ2VyIHRvIHByb2Nlc3MgYW5kIGhhdmUgYSBsYXJnZXIgQVBJIGZvb3RwcmludCBkdWUgdG8gdGhlIEFuaW1hdGlvblxyXG4gKiBDb21wb25lbnQuIElmIHlvdSBkbyBub3QgcmVxdWlyZSBhbmltYXRpb24gdGhlbiB5b3UgY2FuIHNhZmVseSB1c2UgSW1hZ2VzIHRvIHJlcGxhY2UgU3ByaXRlcyBpbiBhbGwgY2FzZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBTcHJpdGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuTWF0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuQm91bmNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkNvbGxpc2lvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Gb3JjZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5GcmljdGlvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5HcmF2aXR5XHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLk1hc3NcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2Vuc29yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlNldEJvZHlcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2xlZXBcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU3RhdGljXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5WZWxvY2l0eVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gd29ybGQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAtIE1hdHRlci5qcyBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICovXHJcbnZhciBNYXR0ZXJTcHJpdGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNwcml0ZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkJvdW5jZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbGxpc2lvbixcclxuICAgICAgICBDb21wb25lbnRzLkZvcmNlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRnJpY3Rpb24sXHJcbiAgICAgICAgQ29tcG9uZW50cy5HcmF2aXR5LFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzcyxcclxuICAgICAgICBDb21wb25lbnRzLlNlbnNvcixcclxuICAgICAgICBDb21wb25lbnRzLlNldEJvZHksXHJcbiAgICAgICAgQ29tcG9uZW50cy5TbGVlcCxcclxuICAgICAgICBDb21wb25lbnRzLlN0YXRpYyxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZlbG9jaXR5LFxyXG4gICAgICAgIFBpcGVsaW5lXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTWF0dGVyU3ByaXRlICh3b3JsZCwgeCwgeSwgdGV4dHVyZSwgZnJhbWUsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHdvcmxkLnNjZW5lLCAnU3ByaXRlJyk7XHJcblxyXG4gICAgICAgIHRoaXMuYW5pbXMgPSBuZXcgQW5pbWF0aW9uQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2l6ZVRvRnJhbWUoKTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuU3ByaXRlI3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5TcHJpdGUjX3RlbXBWZWMyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wVmVjMiA9IG5ldyBWZWN0b3IyKHgsIHkpO1xyXG5cclxuICAgICAgICB2YXIgc2hhcGUgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ3NoYXBlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChzaGFwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Qm9keShzaGFwZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVjdGFuZ2xlKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCdUZXh0dXJlVGludFBpcGVsaW5lJyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWF0dGVyU3ByaXRlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/MatterSprite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/MatterTileBody.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/MatterTileBody.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/physics/matter-js/components/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar HasValue = __webpack_require__(/*! ../../utils/object/HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\nvar Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A wrapper around a Tile that provides access to a corresponding Matter body. A tile can only\r\n * have one Matter body associated with it. You can either pass in an existing Matter body for\r\n * the tile or allow the constructor to create the corresponding body for you. If the Tile has a\r\n * collision group (defined in Tiled), those shapes will be used to create the body. If not, the\r\n * tile's rectangle bounding box will be used.\r\n *\r\n * The corresponding body will be accessible on the Tile itself via Tile.physics.matterBody.\r\n *\r\n * Note: not all Tiled collision shapes are supported. See\r\n * Phaser.Physics.Matter.TileBody#setFromTileCollision for more information.\r\n *\r\n * @class TileBody\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Physics.Matter.Components.Bounce\r\n * @extends Phaser.Physics.Matter.Components.Collision\r\n * @extends Phaser.Physics.Matter.Components.Friction\r\n * @extends Phaser.Physics.Matter.Components.Gravity\r\n * @extends Phaser.Physics.Matter.Components.Mass\r\n * @extends Phaser.Physics.Matter.Components.Sensor\r\n * @extends Phaser.Physics.Matter.Components.Sleep\r\n * @extends Phaser.Physics.Matter.Components.Static\r\n *\r\n * @param {Phaser.Physics.Matter.World} world - [description]\r\n * @param {Phaser.Tilemaps.Tile} tile - The target tile that should have a Matter body.\r\n * @param {Phaser.Types.Physics.Matter.MatterTileOptions} [options] - Options to be used when creating the Matter body.\r\n */\r\nvar MatterTileBody = new Class({\r\n\r\n    Mixins: [\r\n        Components.Bounce,\r\n        Components.Collision,\r\n        Components.Friction,\r\n        Components.Gravity,\r\n        Components.Mass,\r\n        Components.Sensor,\r\n        Components.Sleep,\r\n        Components.Static\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function MatterTileBody (world, tile, options)\r\n    {\r\n        /**\r\n         * The tile object the body is associated with.\r\n         *\r\n         * @name Phaser.Physics.Matter.TileBody#tile\r\n         * @type {Phaser.Tilemaps.Tile}\r\n         * @since 3.0.0\r\n         */\r\n        this.tile = tile;\r\n\r\n        /**\r\n         * The Matter world the body exists within.\r\n         *\r\n         * @name Phaser.Physics.Matter.TileBody#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        // Install a reference to 'this' on the tile and ensure there can only be one matter body\r\n        // associated with the tile\r\n        if (tile.physics.matterBody)\r\n        {\r\n            tile.physics.matterBody.destroy();\r\n        }\r\n\r\n        tile.physics.matterBody = this;\r\n\r\n        // Set the body either from an existing body (if provided), the shapes in the tileset\r\n        // collision layer (if it exists) or a rectangle matching the tile.\r\n        var body = GetFastValue(options, 'body', null);\r\n\r\n        var addToWorld = GetFastValue(options, 'addToWorld', true);\r\n\r\n        if (!body)\r\n        {\r\n            var collisionGroup = tile.getCollisionGroup();\r\n            var collisionObjects = GetFastValue(collisionGroup, 'objects', []);\r\n\r\n            if (collisionObjects.length > 0)\r\n            {\r\n                this.setFromTileCollision(options);\r\n            }\r\n            else\r\n            {\r\n                this.setFromTileRectangle(options);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.setBody(body, addToWorld);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the current body to a rectangle that matches the bounds of the tile.\r\n     *\r\n     * @method Phaser.Physics.Matter.TileBody#setFromTileRectangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Matter.MatterBodyTileOptions} [options] - Options to be used when creating the Matter body. See MatterJS.Body for a list of what Matter accepts.\r\n     * \r\n     * @return {Phaser.Physics.Matter.TileBody} This TileBody object.\r\n     */\r\n    setFromTileRectangle: function (options)\r\n    {\r\n        if (options === undefined) { options = {}; }\r\n        if (!HasValue(options, 'isStatic')) { options.isStatic = true; }\r\n        if (!HasValue(options, 'addToWorld')) { options.addToWorld = true; }\r\n\r\n        var bounds = this.tile.getBounds();\r\n        var cx = bounds.x + (bounds.width / 2);\r\n        var cy = bounds.y + (bounds.height / 2);\r\n        var body = Bodies.rectangle(cx, cy, bounds.width, bounds.height, options);\r\n\r\n        this.setBody(body, options.addToWorld);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the current body from the collision group associated with the Tile. This is typically\r\n     * set up in Tiled's collision editor.\r\n     *\r\n     * Note: Matter doesn't support all shapes from Tiled. Rectangles and polygons are directly\r\n     * supported. Ellipses are converted into circle bodies. Polylines are treated as if they are\r\n     * closed polygons. If a tile has multiple shapes, a multi-part body will be created. Concave\r\n     * shapes are supported if poly-decomp library is included. Decomposition is not guaranteed to\r\n     * work for complex shapes (e.g. holes), so it's often best to manually decompose a concave\r\n     * polygon into multiple convex polygons yourself.\r\n     *\r\n     * @method Phaser.Physics.Matter.TileBody#setFromTileCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Physics.Matter.MatterBodyTileOptions} [options] - Options to be used when creating the Matter body. See MatterJS.Body for a list of what Matter accepts.\r\n     * \r\n     * @return {Phaser.Physics.Matter.TileBody} This TileBody object.\r\n     */\r\n    setFromTileCollision: function (options)\r\n    {\r\n        if (options === undefined) { options = {}; }\r\n        if (!HasValue(options, 'isStatic')) { options.isStatic = true; }\r\n        if (!HasValue(options, 'addToWorld')) { options.addToWorld = true; }\r\n\r\n        var sx = this.tile.tilemapLayer.scaleX;\r\n        var sy = this.tile.tilemapLayer.scaleY;\r\n        var tileX = this.tile.getLeft();\r\n        var tileY = this.tile.getTop();\r\n        var collisionGroup = this.tile.getCollisionGroup();\r\n        var collisionObjects = GetFastValue(collisionGroup, 'objects', []);\r\n\r\n        var parts = [];\r\n\r\n        for (var i = 0; i < collisionObjects.length; i++)\r\n        {\r\n            var object = collisionObjects[i];\r\n            var ox = tileX + (object.x * sx);\r\n            var oy = tileY + (object.y * sy);\r\n            var ow = object.width * sx;\r\n            var oh = object.height * sy;\r\n            var body = null;\r\n\r\n            if (object.rectangle)\r\n            {\r\n                body = Bodies.rectangle(ox + ow / 2, oy + oh / 2, ow, oh, options);\r\n            }\r\n            else if (object.ellipse)\r\n            {\r\n                body = Bodies.circle(ox + ow / 2, oy + oh / 2, ow / 2, options);\r\n            }\r\n            else if (object.polygon || object.polyline)\r\n            {\r\n                // Polygons and polylines are both treated as closed polygons\r\n                var originalPoints = object.polygon ? object.polygon : object.polyline;\r\n\r\n                var points = originalPoints.map(function (p)\r\n                {\r\n                    return { x: p.x * sx, y: p.y * sy };\r\n                });\r\n\r\n                var vertices = Vertices.create(points);\r\n\r\n                // Points are relative to the object's origin (first point placed in Tiled), but\r\n                // matter expects points to be relative to the center of mass. This only applies to\r\n                // convex shapes. When a concave shape is decomposed, multiple parts are created and\r\n                // the individual parts are positioned relative to (ox, oy).\r\n                //\r\n                //  Update: 8th January 2019 - the latest version of Matter needs the Vertices adjusted,\r\n                //  regardless if convex or concave.\r\n\r\n                var center = Vertices.centre(vertices);\r\n\r\n                ox += center.x;\r\n                oy += center.y;\r\n\r\n                body = Bodies.fromVertices(ox, oy, vertices, options);\r\n            }\r\n\r\n            if (body)\r\n            {\r\n                parts.push(body);\r\n            }\r\n        }\r\n\r\n        if (parts.length === 1)\r\n        {\r\n            this.setBody(parts[0], options.addToWorld);\r\n        }\r\n        else if (parts.length > 1)\r\n        {\r\n            options.parts = parts;\r\n            this.setBody(Body.create(options), options.addToWorld);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the current body to the given body. This will remove the previous body, if one already\r\n     * exists.\r\n     *\r\n     * @method Phaser.Physics.Matter.TileBody#setBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} body - The new Matter body to use.\r\n     * @param {boolean} [addToWorld=true] - Whether or not to add the body to the Matter world.\r\n     * \r\n     * @return {Phaser.Physics.Matter.TileBody} This TileBody object.\r\n     */\r\n    setBody: function (body, addToWorld)\r\n    {\r\n        if (addToWorld === undefined) { addToWorld = true; }\r\n\r\n        if (this.body)\r\n        {\r\n            this.removeBody();\r\n        }\r\n\r\n        this.body = body;\r\n        this.body.gameObject = this;\r\n\r\n        if (addToWorld)\r\n        {\r\n            this.world.add(this.body);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the current body from the TileBody and from the Matter world\r\n     *\r\n     * @method Phaser.Physics.Matter.TileBody#removeBody\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.TileBody} This TileBody object.\r\n     */\r\n    removeBody: function ()\r\n    {\r\n        if (this.body)\r\n        {\r\n            this.world.remove(this.body);\r\n            this.body.gameObject = undefined;\r\n            this.body = undefined;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the current body from the tile and the world.\r\n     *\r\n     * @method Phaser.Physics.Matter.TileBody#destroy\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.TileBody} This TileBody object.\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeBody();\r\n        this.tile.physics.matterBody = undefined;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MatterTileBody;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJUaWxlQm9keS5qcz83OTQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsK0ZBQXNCO0FBQzNDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBaUI7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxxRkFBYztBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxlQUFlLG1CQUFPLENBQUMscUdBQXlCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRCw2Q0FBNkMseUJBQXlCO0FBQ3RFLCtDQUErQywyQkFBMkI7O0FBRTFFO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrREFBa0Q7QUFDakU7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xELDZDQUE2Qyx5QkFBeUI7QUFDdEUsK0NBQStDLDJCQUEyQjs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qiw2QkFBNkI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9NYXR0ZXJUaWxlQm9keS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi9jb21wb25lbnRzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9IYXNWYWx1ZScpO1xyXG52YXIgVmVydGljZXMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9WZXJ0aWNlcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSB3cmFwcGVyIGFyb3VuZCBhIFRpbGUgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gYSBjb3JyZXNwb25kaW5nIE1hdHRlciBib2R5LiBBIHRpbGUgY2FuIG9ubHlcclxuICogaGF2ZSBvbmUgTWF0dGVyIGJvZHkgYXNzb2NpYXRlZCB3aXRoIGl0LiBZb3UgY2FuIGVpdGhlciBwYXNzIGluIGFuIGV4aXN0aW5nIE1hdHRlciBib2R5IGZvclxyXG4gKiB0aGUgdGlsZSBvciBhbGxvdyB0aGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIHRoZSBjb3JyZXNwb25kaW5nIGJvZHkgZm9yIHlvdS4gSWYgdGhlIFRpbGUgaGFzIGFcclxuICogY29sbGlzaW9uIGdyb3VwIChkZWZpbmVkIGluIFRpbGVkKSwgdGhvc2Ugc2hhcGVzIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGJvZHkuIElmIG5vdCwgdGhlXHJcbiAqIHRpbGUncyByZWN0YW5nbGUgYm91bmRpbmcgYm94IHdpbGwgYmUgdXNlZC5cclxuICpcclxuICogVGhlIGNvcnJlc3BvbmRpbmcgYm9keSB3aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlIFRpbGUgaXRzZWxmIHZpYSBUaWxlLnBoeXNpY3MubWF0dGVyQm9keS5cclxuICpcclxuICogTm90ZTogbm90IGFsbCBUaWxlZCBjb2xsaXNpb24gc2hhcGVzIGFyZSBzdXBwb3J0ZWQuIFNlZVxyXG4gKiBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHkjc2V0RnJvbVRpbGVDb2xsaXNpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBUaWxlQm9keVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuTWF0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuQm91bmNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkNvbGxpc2lvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5GcmljdGlvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5HcmF2aXR5XHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLk1hc3NcclxuICogQGV4dGVuZHMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2Vuc29yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlNsZWVwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlN0YXRpY1xyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gd29ybGQgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgdGFyZ2V0IHRpbGUgdGhhdCBzaG91bGQgaGF2ZSBhIE1hdHRlciBib2R5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLk1hdHRlci5NYXR0ZXJUaWxlT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIE1hdHRlciBib2R5LlxyXG4gKi9cclxudmFyIE1hdHRlclRpbGVCb2R5ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkJvdW5jZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbGxpc2lvbixcclxuICAgICAgICBDb21wb25lbnRzLkZyaWN0aW9uLFxyXG4gICAgICAgIENvbXBvbmVudHMuR3Jhdml0eSxcclxuICAgICAgICBDb21wb25lbnRzLk1hc3MsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TZW5zb3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TbGVlcCxcclxuICAgICAgICBDb21wb25lbnRzLlN0YXRpY1xyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1hdHRlclRpbGVCb2R5ICh3b3JsZCwgdGlsZSwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGlsZSBvYmplY3QgdGhlIGJvZHkgaXMgYXNzb2NpYXRlZCB3aXRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5I3RpbGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlID0gdGlsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hdHRlciB3b3JsZCB0aGUgYm9keSBleGlzdHMgd2l0aGluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5I3dvcmxkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkID0gd29ybGQ7XHJcblxyXG4gICAgICAgIC8vIEluc3RhbGwgYSByZWZlcmVuY2UgdG8gJ3RoaXMnIG9uIHRoZSB0aWxlIGFuZCBlbnN1cmUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIG1hdHRlciBib2R5XHJcbiAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSB0aWxlXHJcbiAgICAgICAgaWYgKHRpbGUucGh5c2ljcy5tYXR0ZXJCb2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGlsZS5waHlzaWNzLm1hdHRlckJvZHkuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGlsZS5waHlzaWNzLm1hdHRlckJvZHkgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIGJvZHkgZWl0aGVyIGZyb20gYW4gZXhpc3RpbmcgYm9keSAoaWYgcHJvdmlkZWQpLCB0aGUgc2hhcGVzIGluIHRoZSB0aWxlc2V0XHJcbiAgICAgICAgLy8gY29sbGlzaW9uIGxheWVyIChpZiBpdCBleGlzdHMpIG9yIGEgcmVjdGFuZ2xlIG1hdGNoaW5nIHRoZSB0aWxlLlxyXG4gICAgICAgIHZhciBib2R5ID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdib2R5JywgbnVsbCk7XHJcblxyXG4gICAgICAgIHZhciBhZGRUb1dvcmxkID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdhZGRUb1dvcmxkJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICghYm9keSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb2xsaXNpb25Hcm91cCA9IHRpbGUuZ2V0Q29sbGlzaW9uR3JvdXAoKTtcclxuICAgICAgICAgICAgdmFyIGNvbGxpc2lvbk9iamVjdHMgPSBHZXRGYXN0VmFsdWUoY29sbGlzaW9uR3JvdXAsICdvYmplY3RzJywgW10pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbk9iamVjdHMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGcm9tVGlsZUNvbGxpc2lvbihvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RnJvbVRpbGVSZWN0YW5nbGUob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRCb2R5KGJvZHksIGFkZFRvV29ybGQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGJvZHkgdG8gYSByZWN0YW5nbGUgdGhhdCBtYXRjaGVzIHRoZSBib3VuZHMgb2YgdGhlIHRpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHkjc2V0RnJvbVRpbGVSZWN0YW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuTWF0dGVyLk1hdHRlckJvZHlUaWxlT3B0aW9uc30gW29wdGlvbnNdIC0gT3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIE1hdHRlciBib2R5LiBTZWUgTWF0dGVySlMuQm9keSBmb3IgYSBsaXN0IG9mIHdoYXQgTWF0dGVyIGFjY2VwdHMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5UaWxlQm9keX0gVGhpcyBUaWxlQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZyb21UaWxlUmVjdGFuZ2xlOiBmdW5jdGlvbiAob3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIGlmICghSGFzVmFsdWUob3B0aW9ucywgJ2lzU3RhdGljJykpIHsgb3B0aW9ucy5pc1N0YXRpYyA9IHRydWU7IH1cclxuICAgICAgICBpZiAoIUhhc1ZhbHVlKG9wdGlvbnMsICdhZGRUb1dvcmxkJykpIHsgb3B0aW9ucy5hZGRUb1dvcmxkID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy50aWxlLmdldEJvdW5kcygpO1xyXG4gICAgICAgIHZhciBjeCA9IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIHZhciBjeSA9IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB2YXIgYm9keSA9IEJvZGllcy5yZWN0YW5nbGUoY3gsIGN5LCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJvZHkoYm9keSwgb3B0aW9ucy5hZGRUb1dvcmxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBib2R5IGZyb20gdGhlIGNvbGxpc2lvbiBncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIFRpbGUuIFRoaXMgaXMgdHlwaWNhbGx5XHJcbiAgICAgKiBzZXQgdXAgaW4gVGlsZWQncyBjb2xsaXNpb24gZWRpdG9yLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IE1hdHRlciBkb2Vzbid0IHN1cHBvcnQgYWxsIHNoYXBlcyBmcm9tIFRpbGVkLiBSZWN0YW5nbGVzIGFuZCBwb2x5Z29ucyBhcmUgZGlyZWN0bHlcclxuICAgICAqIHN1cHBvcnRlZC4gRWxsaXBzZXMgYXJlIGNvbnZlcnRlZCBpbnRvIGNpcmNsZSBib2RpZXMuIFBvbHlsaW5lcyBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IGFyZVxyXG4gICAgICogY2xvc2VkIHBvbHlnb25zLiBJZiBhIHRpbGUgaGFzIG11bHRpcGxlIHNoYXBlcywgYSBtdWx0aS1wYXJ0IGJvZHkgd2lsbCBiZSBjcmVhdGVkLiBDb25jYXZlXHJcbiAgICAgKiBzaGFwZXMgYXJlIHN1cHBvcnRlZCBpZiBwb2x5LWRlY29tcCBsaWJyYXJ5IGlzIGluY2x1ZGVkLiBEZWNvbXBvc2l0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvXHJcbiAgICAgKiB3b3JrIGZvciBjb21wbGV4IHNoYXBlcyAoZS5nLiBob2xlcyksIHNvIGl0J3Mgb2Z0ZW4gYmVzdCB0byBtYW51YWxseSBkZWNvbXBvc2UgYSBjb25jYXZlXHJcbiAgICAgKiBwb2x5Z29uIGludG8gbXVsdGlwbGUgY29udmV4IHBvbHlnb25zIHlvdXJzZWxmLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5I3NldEZyb21UaWxlQ29sbGlzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5QaHlzaWNzLk1hdHRlci5NYXR0ZXJCb2R5VGlsZU9wdGlvbnN9IFtvcHRpb25zXSAtIE9wdGlvbnMgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBNYXR0ZXIgYm9keS4gU2VlIE1hdHRlckpTLkJvZHkgZm9yIGEgbGlzdCBvZiB3aGF0IE1hdHRlciBhY2NlcHRzLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHl9IFRoaXMgVGlsZUJvZHkgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tVGlsZUNvbGxpc2lvbjogZnVuY3Rpb24gKG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICBpZiAoIUhhc1ZhbHVlKG9wdGlvbnMsICdpc1N0YXRpYycpKSB7IG9wdGlvbnMuaXNTdGF0aWMgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKCFIYXNWYWx1ZShvcHRpb25zLCAnYWRkVG9Xb3JsZCcpKSB7IG9wdGlvbnMuYWRkVG9Xb3JsZCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFyIHN4ID0gdGhpcy50aWxlLnRpbGVtYXBMYXllci5zY2FsZVg7XHJcbiAgICAgICAgdmFyIHN5ID0gdGhpcy50aWxlLnRpbGVtYXBMYXllci5zY2FsZVk7XHJcbiAgICAgICAgdmFyIHRpbGVYID0gdGhpcy50aWxlLmdldExlZnQoKTtcclxuICAgICAgICB2YXIgdGlsZVkgPSB0aGlzLnRpbGUuZ2V0VG9wKCk7XHJcbiAgICAgICAgdmFyIGNvbGxpc2lvbkdyb3VwID0gdGhpcy50aWxlLmdldENvbGxpc2lvbkdyb3VwKCk7XHJcbiAgICAgICAgdmFyIGNvbGxpc2lvbk9iamVjdHMgPSBHZXRGYXN0VmFsdWUoY29sbGlzaW9uR3JvdXAsICdvYmplY3RzJywgW10pO1xyXG5cclxuICAgICAgICB2YXIgcGFydHMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xsaXNpb25PYmplY3RzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG9iamVjdCA9IGNvbGxpc2lvbk9iamVjdHNbaV07XHJcbiAgICAgICAgICAgIHZhciBveCA9IHRpbGVYICsgKG9iamVjdC54ICogc3gpO1xyXG4gICAgICAgICAgICB2YXIgb3kgPSB0aWxlWSArIChvYmplY3QueSAqIHN5KTtcclxuICAgICAgICAgICAgdmFyIG93ID0gb2JqZWN0LndpZHRoICogc3g7XHJcbiAgICAgICAgICAgIHZhciBvaCA9IG9iamVjdC5oZWlnaHQgKiBzeTtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5yZWN0YW5nbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJvZHkgPSBCb2RpZXMucmVjdGFuZ2xlKG94ICsgb3cgLyAyLCBveSArIG9oIC8gMiwgb3csIG9oLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvYmplY3QuZWxsaXBzZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keSA9IEJvZGllcy5jaXJjbGUob3ggKyBvdyAvIDIsIG95ICsgb2ggLyAyLCBvdyAvIDIsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5wb2x5Z29uIHx8IG9iamVjdC5wb2x5bGluZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gUG9seWdvbnMgYW5kIHBvbHlsaW5lcyBhcmUgYm90aCB0cmVhdGVkIGFzIGNsb3NlZCBwb2x5Z29uc1xyXG4gICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsUG9pbnRzID0gb2JqZWN0LnBvbHlnb24gPyBvYmplY3QucG9seWdvbiA6IG9iamVjdC5wb2x5bGluZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gb3JpZ2luYWxQb2ludHMubWFwKGZ1bmN0aW9uIChwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHg6IHAueCAqIHN4LCB5OiBwLnkgKiBzeSB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gVmVydGljZXMuY3JlYXRlKHBvaW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUG9pbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgb2JqZWN0J3Mgb3JpZ2luIChmaXJzdCBwb2ludCBwbGFjZWQgaW4gVGlsZWQpLCBidXRcclxuICAgICAgICAgICAgICAgIC8vIG1hdHRlciBleHBlY3RzIHBvaW50cyB0byBiZSByZWxhdGl2ZSB0byB0aGUgY2VudGVyIG9mIG1hc3MuIFRoaXMgb25seSBhcHBsaWVzIHRvXHJcbiAgICAgICAgICAgICAgICAvLyBjb252ZXggc2hhcGVzLiBXaGVuIGEgY29uY2F2ZSBzaGFwZSBpcyBkZWNvbXBvc2VkLCBtdWx0aXBsZSBwYXJ0cyBhcmUgY3JlYXRlZCBhbmRcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBpbmRpdmlkdWFsIHBhcnRzIGFyZSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvIChveCwgb3kpLlxyXG4gICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgIC8vICBVcGRhdGU6IDh0aCBKYW51YXJ5IDIwMTkgLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTWF0dGVyIG5lZWRzIHRoZSBWZXJ0aWNlcyBhZGp1c3RlZCxcclxuICAgICAgICAgICAgICAgIC8vICByZWdhcmRsZXNzIGlmIGNvbnZleCBvciBjb25jYXZlLlxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjZW50ZXIgPSBWZXJ0aWNlcy5jZW50cmUodmVydGljZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIG94ICs9IGNlbnRlci54O1xyXG4gICAgICAgICAgICAgICAgb3kgKz0gY2VudGVyLnk7XHJcblxyXG4gICAgICAgICAgICAgICAgYm9keSA9IEJvZGllcy5mcm9tVmVydGljZXMob3gsIG95LCB2ZXJ0aWNlcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKGJvZHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRCb2R5KHBhcnRzWzBdLCBvcHRpb25zLmFkZFRvV29ybGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5wYXJ0cyA9IHBhcnRzO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJvZHkoQm9keS5jcmVhdGUob3B0aW9ucyksIG9wdGlvbnMuYWRkVG9Xb3JsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGJvZHkgdG8gdGhlIGdpdmVuIGJvZHkuIFRoaXMgd2lsbCByZW1vdmUgdGhlIHByZXZpb3VzIGJvZHksIGlmIG9uZSBhbHJlYWR5XHJcbiAgICAgKiBleGlzdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHkjc2V0Qm9keVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5IC0gVGhlIG5ldyBNYXR0ZXIgYm9keSB0byB1c2UuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1dvcmxkPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gYWRkIHRoZSBib2R5IHRvIHRoZSBNYXR0ZXIgd29ybGQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5UaWxlQm9keX0gVGhpcyBUaWxlQm9keSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvZHk6IGZ1bmN0aW9uIChib2R5LCBhZGRUb1dvcmxkKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhZGRUb1dvcmxkID09PSB1bmRlZmluZWQpIHsgYWRkVG9Xb3JsZCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYm9keSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQm9keSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcclxuICAgICAgICB0aGlzLmJvZHkuZ2FtZU9iamVjdCA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChhZGRUb1dvcmxkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC5hZGQodGhpcy5ib2R5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgYm9keSBmcm9tIHRoZSBUaWxlQm9keSBhbmQgZnJvbSB0aGUgTWF0dGVyIHdvcmxkXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHkjcmVtb3ZlQm9keVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5fSBUaGlzIFRpbGVCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQm9keTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5ib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC5yZW1vdmUodGhpcy5ib2R5KTtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmdhbWVPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgYm9keSBmcm9tIHRoZSB0aWxlIGFuZCB0aGUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHkjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLlRpbGVCb2R5fSBUaGlzIFRpbGVCb2R5IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUJvZHkoKTtcclxuICAgICAgICB0aGlzLnRpbGUucGh5c2ljcy5tYXR0ZXJCb2R5ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHRlclRpbGVCb2R5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/MatterTileBody.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/PhysicsEditorParser.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/PhysicsEditorParser.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Joachim Grill <joachim@codeandweb.com>\r\n * @copyright    2018 CodeAndWeb GmbH\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Bounds = __webpack_require__(/*! ./lib/geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Common = __webpack_require__(/*! ./lib/core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Vector = __webpack_require__(/*! ./lib/geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * Use PhysicsEditorParser.parseBody() to build a Matter body object, based on a physics data file\r\n * created and exported with PhysicsEditor (https://www.codeandweb.com/physicseditor).\r\n *\r\n * @namespace Phaser.Physics.Matter.PhysicsEditorParser\r\n * @since 3.10.0\r\n */\r\nvar PhysicsEditorParser = {\r\n\r\n    /**\r\n     * Parses a body element exported by PhysicsEditor.\r\n     *\r\n     * @function Phaser.Physics.Matter.PhysicsEditorParser.parseBody\r\n     * @since 3.10.0\r\n     *\r\n     * @param {number} x - x position.\r\n     * @param {number} y - y position.\r\n     * @param {number} w - width.\r\n     * @param {number} h - height.\r\n     * @param {object} config - body configuration and fixture (child body) definitions.\r\n     * \r\n     * @return {object} A matter body, consisting of several parts (child bodies)\r\n     */\r\n    parseBody: function (x, y, w, h, config)\r\n    {\r\n        var fixtureConfigs = GetFastValue(config, 'fixtures', []);\r\n        var fixtures = [];\r\n\r\n        for (var fc = 0; fc < fixtureConfigs.length; fc++)\r\n        {\r\n            var fixtureParts = this.parseFixture(fixtureConfigs[fc]);\r\n\r\n            for (var i = 0; i < fixtureParts.length; i++)\r\n            {\r\n                fixtures.push(fixtureParts[i]);\r\n            }\r\n        }\r\n\r\n        var matterConfig = Common.extend({}, false, config);\r\n\r\n        delete matterConfig.fixtures;\r\n        delete matterConfig.type;\r\n\r\n        var body = Body.create(matterConfig);\r\n\r\n        Body.setParts(body, fixtures);\r\n        body.render.sprite.xOffset = body.position.x / w;\r\n        body.render.sprite.yOffset = body.position.y / h;\r\n        Body.setPosition(body, { x: x, y: y });\r\n\r\n        return body;\r\n    },\r\n\r\n\r\n    /**\r\n     * Parses an element of the \"fixtures\" list exported by PhysicsEditor\r\n     *\r\n     * @function Phaser.Physics.Matter.PhysicsEditorParser.parseFixture\r\n     * @since 3.10.0\r\n     *\r\n     * @param {object} fixtureConfig - the fixture object to parse\r\n     * \r\n     * @return {object[]} - A list of matter bodies\r\n     */\r\n    parseFixture: function (fixtureConfig)\r\n    {\r\n        var matterConfig = Common.extend({}, false, fixtureConfig);\r\n\r\n        delete matterConfig.circle;\r\n        delete matterConfig.vertices;\r\n\r\n        var fixtures;\r\n\r\n        if (fixtureConfig.circle)\r\n        {\r\n            var x = GetFastValue(fixtureConfig.circle, 'x');\r\n            var y = GetFastValue(fixtureConfig.circle, 'y');\r\n            var r = GetFastValue(fixtureConfig.circle, 'radius');\r\n            fixtures = [ Bodies.circle(x, y, r, matterConfig) ];\r\n        }\r\n        else if (fixtureConfig.vertices)\r\n        {\r\n            fixtures = this.parseVertices(fixtureConfig.vertices, matterConfig);\r\n        }\r\n\r\n        return fixtures;\r\n    },\r\n\r\n    /**\r\n     * Parses the \"vertices\" lists exported by PhysicsEditor.\r\n     *\r\n     * @function Phaser.Physics.Matter.PhysicsEditorParser.parseVertices\r\n     * @since 3.10.0\r\n     *\r\n     * @param {object} vertexSets - The vertex lists to parse.\r\n     * @param {object} options - Matter body options.\r\n     * \r\n     * @return {object[]} - A list of matter bodies.\r\n     */\r\n    parseVertices: function (vertexSets, options)\r\n    {\r\n        var i, j, k, v, z;\r\n        var parts = [];\r\n\r\n        options = options || {};\r\n\r\n        for (v = 0; v < vertexSets.length; v += 1)\r\n        {\r\n            parts.push(Body.create(Common.extend({\r\n                position: Vertices.centre(vertexSets[v]),\r\n                vertices: vertexSets[v]\r\n            }, options)));\r\n        }\r\n\r\n        // flag coincident part edges\r\n        var coincidentMaxDist = 5;\r\n\r\n        for (i = 0; i < parts.length; i++)\r\n        {\r\n            var partA = parts[i];\r\n\r\n            for (j = i + 1; j < parts.length; j++)\r\n            {\r\n                var partB = parts[j];\r\n\r\n                if (Bounds.overlaps(partA.bounds, partB.bounds))\r\n                {\r\n                    var pav = partA.vertices,\r\n                        pbv = partB.vertices;\r\n\r\n                    // iterate vertices of both parts\r\n                    for (k = 0; k < partA.vertices.length; k++)\r\n                    {\r\n                        for (z = 0; z < partB.vertices.length; z++)\r\n                        {\r\n                            // find distances between the vertices\r\n                            var da = Vector.magnitudeSquared(Vector.sub(pav[(k + 1) % pav.length], pbv[z])),\r\n                                db = Vector.magnitudeSquared(Vector.sub(pav[k], pbv[(z + 1) % pbv.length]));\r\n\r\n                            // if both vertices are very close, consider the edge concident (internal)\r\n                            if (da < coincidentMaxDist && db < coincidentMaxDist)\r\n                            {\r\n                                pav[k].isInternal = true;\r\n                                pbv[z].isInternal = true;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                }\r\n            }\r\n        }\r\n\r\n        return parts;\r\n    }\r\n};\r\n\r\nmodule.exports = PhysicsEditorParser;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9QaHlzaWNzRWRpdG9yUGFyc2VyLmpzP2NmMmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrRkFBc0I7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLHFGQUFpQjtBQUNwQyxhQUFhLG1CQUFPLENBQUMsaUdBQXVCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQyx5RkFBbUI7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHFHQUF5Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsNEJBQTRCO0FBQ3BEO0FBQ0E7O0FBRUEsMkJBQTJCLHlCQUF5QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQix1QkFBdUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUEsMkJBQTJCLGtCQUFrQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCLDJCQUEyQjtBQUMxRDtBQUNBLG1DQUFtQywyQkFBMkI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvUGh5c2ljc0VkaXRvclBhcnNlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEpvYWNoaW0gR3JpbGwgPGpvYWNoaW1AY29kZWFuZHdlYi5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBDb2RlQW5kV2ViIEdtYkhcclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBCb3VuZHMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9Cb3VuZHMnKTtcclxudmFyIENvbW1vbiA9IHJlcXVpcmUoJy4vbGliL2NvcmUvQ29tbW9uJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBWZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9WZWN0b3InKTtcclxudmFyIFZlcnRpY2VzID0gcmVxdWlyZSgnLi9saWIvZ2VvbWV0cnkvVmVydGljZXMnKTtcclxuXHJcbi8qKlxyXG4gKiBVc2UgUGh5c2ljc0VkaXRvclBhcnNlci5wYXJzZUJvZHkoKSB0byBidWlsZCBhIE1hdHRlciBib2R5IG9iamVjdCwgYmFzZWQgb24gYSBwaHlzaWNzIGRhdGEgZmlsZVxyXG4gKiBjcmVhdGVkIGFuZCBleHBvcnRlZCB3aXRoIFBoeXNpY3NFZGl0b3IgKGh0dHBzOi8vd3d3LmNvZGVhbmR3ZWIuY29tL3BoeXNpY3NlZGl0b3IpLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5QaHlzaWNzRWRpdG9yUGFyc2VyXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICovXHJcbnZhciBQaHlzaWNzRWRpdG9yUGFyc2VyID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgYm9keSBlbGVtZW50IGV4cG9ydGVkIGJ5IFBoeXNpY3NFZGl0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLk1hdHRlci5QaHlzaWNzRWRpdG9yUGFyc2VyLnBhcnNlQm9keVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0geCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0geSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3IC0gd2lkdGguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaCAtIGhlaWdodC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBib2R5IGNvbmZpZ3VyYXRpb24gYW5kIGZpeHR1cmUgKGNoaWxkIGJvZHkpIGRlZmluaXRpb25zLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEEgbWF0dGVyIGJvZHksIGNvbnNpc3Rpbmcgb2Ygc2V2ZXJhbCBwYXJ0cyAoY2hpbGQgYm9kaWVzKVxyXG4gICAgICovXHJcbiAgICBwYXJzZUJvZHk6IGZ1bmN0aW9uICh4LCB5LCB3LCBoLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZpeHR1cmVDb25maWdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZpeHR1cmVzJywgW10pO1xyXG4gICAgICAgIHZhciBmaXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBmYyA9IDA7IGZjIDwgZml4dHVyZUNvbmZpZ3MubGVuZ3RoOyBmYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZpeHR1cmVQYXJ0cyA9IHRoaXMucGFyc2VGaXh0dXJlKGZpeHR1cmVDb25maWdzW2ZjXSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpeHR1cmVQYXJ0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml4dHVyZXMucHVzaChmaXh0dXJlUGFydHNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0dGVyQ29uZmlnID0gQ29tbW9uLmV4dGVuZCh7fSwgZmFsc2UsIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBtYXR0ZXJDb25maWcuZml4dHVyZXM7XHJcbiAgICAgICAgZGVsZXRlIG1hdHRlckNvbmZpZy50eXBlO1xyXG5cclxuICAgICAgICB2YXIgYm9keSA9IEJvZHkuY3JlYXRlKG1hdHRlckNvbmZpZyk7XHJcblxyXG4gICAgICAgIEJvZHkuc2V0UGFydHMoYm9keSwgZml4dHVyZXMpO1xyXG4gICAgICAgIGJvZHkucmVuZGVyLnNwcml0ZS54T2Zmc2V0ID0gYm9keS5wb3NpdGlvbi54IC8gdztcclxuICAgICAgICBib2R5LnJlbmRlci5zcHJpdGUueU9mZnNldCA9IGJvZHkucG9zaXRpb24ueSAvIGg7XHJcbiAgICAgICAgQm9keS5zZXRQb3NpdGlvbihib2R5LCB7IHg6IHgsIHk6IHkgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYW4gZWxlbWVudCBvZiB0aGUgXCJmaXh0dXJlc1wiIGxpc3QgZXhwb3J0ZWQgYnkgUGh5c2ljc0VkaXRvclxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUGh5c2ljc0VkaXRvclBhcnNlci5wYXJzZUZpeHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZml4dHVyZUNvbmZpZyAtIHRoZSBmaXh0dXJlIG9iamVjdCB0byBwYXJzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3RbXX0gLSBBIGxpc3Qgb2YgbWF0dGVyIGJvZGllc1xyXG4gICAgICovXHJcbiAgICBwYXJzZUZpeHR1cmU6IGZ1bmN0aW9uIChmaXh0dXJlQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXR0ZXJDb25maWcgPSBDb21tb24uZXh0ZW5kKHt9LCBmYWxzZSwgZml4dHVyZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIGRlbGV0ZSBtYXR0ZXJDb25maWcuY2lyY2xlO1xyXG4gICAgICAgIGRlbGV0ZSBtYXR0ZXJDb25maWcudmVydGljZXM7XHJcblxyXG4gICAgICAgIHZhciBmaXh0dXJlcztcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmVDb25maWcuY2lyY2xlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHggPSBHZXRGYXN0VmFsdWUoZml4dHVyZUNvbmZpZy5jaXJjbGUsICd4Jyk7XHJcbiAgICAgICAgICAgIHZhciB5ID0gR2V0RmFzdFZhbHVlKGZpeHR1cmVDb25maWcuY2lyY2xlLCAneScpO1xyXG4gICAgICAgICAgICB2YXIgciA9IEdldEZhc3RWYWx1ZShmaXh0dXJlQ29uZmlnLmNpcmNsZSwgJ3JhZGl1cycpO1xyXG4gICAgICAgICAgICBmaXh0dXJlcyA9IFsgQm9kaWVzLmNpcmNsZSh4LCB5LCByLCBtYXR0ZXJDb25maWcpIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZpeHR1cmVDb25maWcudmVydGljZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmaXh0dXJlcyA9IHRoaXMucGFyc2VWZXJ0aWNlcyhmaXh0dXJlQ29uZmlnLnZlcnRpY2VzLCBtYXR0ZXJDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpeHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyB0aGUgXCJ2ZXJ0aWNlc1wiIGxpc3RzIGV4cG9ydGVkIGJ5IFBoeXNpY3NFZGl0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5QaHlzaWNzLk1hdHRlci5QaHlzaWNzRWRpdG9yUGFyc2VyLnBhcnNlVmVydGljZXNcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdmVydGV4U2V0cyAtIFRoZSB2ZXJ0ZXggbGlzdHMgdG8gcGFyc2UuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE1hdHRlciBib2R5IG9wdGlvbnMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge29iamVjdFtdfSAtIEEgbGlzdCBvZiBtYXR0ZXIgYm9kaWVzLlxyXG4gICAgICovXHJcbiAgICBwYXJzZVZlcnRpY2VzOiBmdW5jdGlvbiAodmVydGV4U2V0cywgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgaSwgaiwgaywgdiwgejtcclxuICAgICAgICB2YXIgcGFydHMgPSBbXTtcclxuXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICAgIGZvciAodiA9IDA7IHYgPCB2ZXJ0ZXhTZXRzLmxlbmd0aDsgdiArPSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGFydHMucHVzaChCb2R5LmNyZWF0ZShDb21tb24uZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBWZXJ0aWNlcy5jZW50cmUodmVydGV4U2V0c1t2XSksXHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlczogdmVydGV4U2V0c1t2XVxyXG4gICAgICAgICAgICB9LCBvcHRpb25zKSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmxhZyBjb2luY2lkZW50IHBhcnQgZWRnZXNcclxuICAgICAgICB2YXIgY29pbmNpZGVudE1heERpc3QgPSA1O1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcGFydEEgPSBwYXJ0c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgcGFydHMubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJ0QiA9IHBhcnRzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChCb3VuZHMub3ZlcmxhcHMocGFydEEuYm91bmRzLCBwYXJ0Qi5ib3VuZHMpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXYgPSBwYXJ0QS52ZXJ0aWNlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGJ2ID0gcGFydEIudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgdmVydGljZXMgb2YgYm90aCBwYXJ0c1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBwYXJ0QS52ZXJ0aWNlcy5sZW5ndGg7IGsrKylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBwYXJ0Qi52ZXJ0aWNlcy5sZW5ndGg7IHorKylcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBkaXN0YW5jZXMgYmV0d2VlbiB0aGUgdmVydGljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYSA9IFZlY3Rvci5tYWduaXR1ZGVTcXVhcmVkKFZlY3Rvci5zdWIocGF2WyhrICsgMSkgJSBwYXYubGVuZ3RoXSwgcGJ2W3pdKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIgPSBWZWN0b3IubWFnbml0dWRlU3F1YXJlZChWZWN0b3Iuc3ViKHBhdltrXSwgcGJ2Wyh6ICsgMSkgJSBwYnYubGVuZ3RoXSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJvdGggdmVydGljZXMgYXJlIHZlcnkgY2xvc2UsIGNvbnNpZGVyIHRoZSBlZGdlIGNvbmNpZGVudCAoaW50ZXJuYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGEgPCBjb2luY2lkZW50TWF4RGlzdCAmJiBkYiA8IGNvaW5jaWRlbnRNYXhEaXN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdltrXS5pc0ludGVybmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnZbel0uaXNJbnRlcm5hbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFydHM7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBoeXNpY3NFZGl0b3JQYXJzZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/PhysicsEditorParser.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/PointerConstraint.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/PointerConstraint.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bounds = __webpack_require__(/*! ./lib/geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Composite = __webpack_require__(/*! ./lib/body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Constraint = __webpack_require__(/*! ./lib/constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\nvar Detector = __webpack_require__(/*! ./lib/collision/Detector */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/matter-js/events/index.js\");\r\nvar InputEvents = __webpack_require__(/*! ../../input/events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar Merge = __webpack_require__(/*! ../../utils/object/Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\");\r\nvar Sleeping = __webpack_require__(/*! ./lib/core/Sleeping */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Vertices = __webpack_require__(/*! ./lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Pointer Constraint is a special type of constraint that allows you to click\r\n * and drag bodies in a Matter World. It monitors the active Pointers in a Scene,\r\n * and when one is pressed down it checks to see if that hit any part of any active\r\n * body in the world. If it did, and the body has input enabled, it will begin to\r\n * drag it until either released, or you stop it via the `stopDrag` method.\r\n * \r\n * You can adjust the stiffness, length and other properties of the constraint via\r\n * the `options` object on creation.\r\n *\r\n * @class PointerConstraint\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene to which this Pointer Constraint belongs.\r\n * @param {Phaser.Physics.Matter.World} world - A reference to the Matter World instance to which this Constraint belongs.\r\n * @param {object} [options] - A Constraint configuration object.\r\n */\r\nvar PointerConstraint = new Class({\r\n\r\n    initialize:\r\n\r\n    function PointerConstraint (scene, world, options)\r\n    {\r\n        if (options === undefined) { options = {}; }\r\n\r\n        //  Defaults\r\n        var defaults = {\r\n            label: 'Pointer Constraint',\r\n            pointA: { x: 0, y: 0 },\r\n            pointB: { x: 0, y: 0 },\r\n            damping: 0,\r\n            length: 0.01,\r\n            stiffness: 0.1,\r\n            angularStiffness: 1,\r\n            collisionFilter: {\r\n                category: 0x0001,\r\n                mask: 0xFFFFFFFF,\r\n                group: 0\r\n            }\r\n        };\r\n\r\n        /**\r\n         * A reference to the Scene to which this Pointer Constraint belongs.\r\n         * This is the same Scene as the Matter World instance.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Matter World instance to which this Constraint belongs.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#world\r\n         * @type {Phaser.Physics.Matter.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.world = world;\r\n\r\n        /**\r\n         * The Camera the Pointer was interacting with when the input\r\n         * down event was processed.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#camera\r\n         * @type {Phaser.Cameras.Scene2D.Camera}\r\n         * @since 3.0.0\r\n         */\r\n        this.camera = null;\r\n\r\n        /**\r\n         * A reference to the Input Pointer that activated this Constraint.\r\n         * This is set in the `onDown` handler.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#pointer\r\n         * @type {Phaser.Input.Pointer}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.pointer = null;\r\n\r\n        /**\r\n         * Is this Constraint active or not?\r\n         * \r\n         * An active constraint will be processed each update. An inactive one will be skipped.\r\n         * Use this to toggle a Pointer Constraint on and off.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#active\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.active = true;\r\n\r\n        /**\r\n         * The internal transformed position.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#position\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.0.0\r\n         */\r\n        this.position = new Vector2();\r\n\r\n        /**\r\n         * The body that is currently being dragged, if any.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#body\r\n         * @type {?MatterJS.Body}\r\n         * @since 3.16.2\r\n         */\r\n        this.body = null;\r\n\r\n        /**\r\n         * The part of the body that was clicked on to start the drag.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#part\r\n         * @type {?MatterJS.Body}\r\n         * @since 3.16.2\r\n         */\r\n        this.part = null;\r\n\r\n        /**\r\n         * The native Matter Constraint that is used to attach to bodies.\r\n         *\r\n         * @name Phaser.Physics.Matter.PointerConstraint#constraint\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.constraint = Constraint.create(Merge(options, defaults));\r\n\r\n        this.world.on(Events.BEFORE_UPDATE, this.update, this);\r\n\r\n        scene.sys.input.on(InputEvents.POINTER_DOWN, this.onDown, this);\r\n    },\r\n\r\n    /**\r\n     * A Pointer has been pressed down onto the Scene.\r\n     * \r\n     * If this Constraint doesn't have an active Pointer then a hit test is\r\n     * run against all active bodies in the world. If one is found it is bound\r\n     * to this constraint and the drag begins.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#onDown\r\n     * @fires Phaser.Physics.Matter.Events#DRAG_START\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Input.Pointer} pointer - A reference to the Pointer that was pressed.\r\n     */\r\n    onDown: function (pointer)\r\n    {\r\n        if (!this.pointer)\r\n        {\r\n            if (this.getBody(pointer))\r\n            {\r\n                this.pointer = pointer;\r\n\r\n                this.camera = pointer.camera;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Scans all active bodies in the current Matter World to see if any of them\r\n     * are hit by the Pointer. The _first one_ found to hit is set as the active contraint\r\n     * body.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#getBody\r\n     * @since 3.16.2\r\n     * \r\n     * @return {boolean} `true` if a body was found and set, otherwise `false`.\r\n     */\r\n    getBody: function (pointer)\r\n    {\r\n        var pos = this.position;\r\n        var constraint = this.constraint;\r\n\r\n        pointer.camera.getWorldPoint(pointer.x, pointer.y, pos);\r\n\r\n        var bodies = Composite.allBodies(this.world.localWorld);\r\n\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            var body = bodies[i];\r\n\r\n            if (!body.ignorePointer &&\r\n                Bounds.contains(body.bounds, pos) &&\r\n                Detector.canCollide(body.collisionFilter, constraint.collisionFilter))\r\n            {\r\n                if (this.hitTestBody(body, pos))\r\n                {\r\n                    this.world.emit(Events.DRAG_START, this.body, this.part, this);\r\n\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Scans the current body to determine if a part of it was clicked on.\r\n     * If a part is found the body is set as the `constraint.bodyB` property,\r\n     * as well as the `body` property of this class. The part is also set.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#hitTestBody\r\n     * @since 3.16.2\r\n     *\r\n     * @param {MatterJS.Body} body - The Matter Body to check.\r\n     * @param {Phaser.Math.Vector2} position - A translated hit test position.\r\n     *\r\n     * @return {boolean} `true` if a part of the body was hit, otherwise `false`.\r\n     */\r\n    hitTestBody: function (body, position)\r\n    {\r\n        var constraint = this.constraint;\r\n\r\n        var start = (body.parts.length > 1) ? 1 : 0;\r\n\r\n        for (var i = start; i < body.parts.length; i++)\r\n        {\r\n            var part = body.parts[i];\r\n\r\n            if (Vertices.contains(part.vertices, position))\r\n            {\r\n                constraint.bodyB = body;\r\n\r\n                constraint.pointA.x = position.x;\r\n                constraint.pointA.y = position.y;\r\n\r\n                constraint.pointB.x = position.x - body.position.x;\r\n                constraint.pointB.y = position.y - body.position.y;\r\n\r\n                constraint.angleB = body.angle;\r\n\r\n                Sleeping.set(body, false);\r\n\r\n                this.part = part;\r\n                this.body = body;\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Internal update handler. Called in the Matter BEFORE_UPDATE step.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#update\r\n     * @fires Phaser.Physics.Matter.Events#DRAG\r\n     * @since 3.0.0\r\n     */\r\n    update: function ()\r\n    {\r\n        var body = this.body;\r\n        var pointer = this.pointer;\r\n\r\n        if (!this.active || !pointer || !body)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (pointer.isDown)\r\n        {\r\n            var pos = this.position;\r\n            var constraint = this.constraint;\r\n    \r\n            this.camera.getWorldPoint(pointer.x, pointer.y, pos);\r\n    \r\n            Sleeping.set(body, false);\r\n    \r\n            constraint.pointA.x = pos.x;\r\n            constraint.pointA.y = pos.y;\r\n    \r\n            this.world.emit(Events.DRAG, body, this);\r\n        }\r\n        else\r\n        {\r\n            //  Pointer has been released since the last world step\r\n            this.stopDrag();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Stops the Pointer Constraint from dragging the body any further.\r\n     * \r\n     * This is called automatically if the Pointer is released while actively\r\n     * dragging a body. Or, you can call it manually to release a body from a\r\n     * constraint without having to first release the pointer.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#stopDrag\r\n     * @fires Phaser.Physics.Matter.Events#DRAG_END\r\n     * @since 3.16.2\r\n     */\r\n    stopDrag: function ()\r\n    {\r\n        var body = this.body;\r\n        var constraint = this.constraint;\r\n\r\n        if (body)\r\n        {\r\n            this.world.emit(Events.DRAG_END, body, this);\r\n\r\n            this.pointer = null;\r\n            this.body = null;\r\n            this.part = null;\r\n\r\n            constraint.bodyB = null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Pointer Constraint instance and all of its references.\r\n     *\r\n     * @method Phaser.Physics.Matter.PointerConstraint#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.world.removeConstraint(this.constraint);\r\n\r\n        this.pointer = null;\r\n        this.constraint = null;\r\n        this.body = null;\r\n        this.part = null;\r\n\r\n        this.world.off(Events.BEFORE_UPDATE, this.update);\r\n\r\n        this.scene.sys.input.off(InputEvents.POINTER_DOWN, this.onDown, this);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = PointerConstraint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9Qb2ludGVyQ29uc3RyYWludC5qcz8zNzA2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsaUdBQXVCO0FBQzVDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsK0ZBQXNCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLDZHQUE2QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsdUdBQTBCO0FBQ2pELGFBQWEsbUJBQU8sQ0FBQyw2RUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7QUFDOUMsWUFBWSxtQkFBTyxDQUFDLGlGQUEwQjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsNkZBQXFCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLHFHQUF5Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQyxjQUFjOztBQUVsRDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYTtBQUNsQyxxQkFBcUIsYUFBYTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLHVCQUF1QjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL1BvaW50ZXJDb25zdHJhaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQm91bmRzID0gcmVxdWlyZSgnLi9saWIvZ2VvbWV0cnkvQm91bmRzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb3NpdGUgPSByZXF1aXJlKCcuL2xpYi9ib2R5L0NvbXBvc2l0ZScpO1xyXG52YXIgQ29uc3RyYWludCA9IHJlcXVpcmUoJy4vbGliL2NvbnN0cmFpbnQvQ29uc3RyYWludCcpO1xyXG52YXIgRGV0ZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb2xsaXNpb24vRGV0ZWN0b3InKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL2lucHV0L2V2ZW50cycpO1xyXG52YXIgTWVyZ2UgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvTWVyZ2UnKTtcclxudmFyIFNsZWVwaW5nID0gcmVxdWlyZSgnLi9saWIvY29yZS9TbGVlcGluZycpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG52YXIgVmVydGljZXMgPSByZXF1aXJlKCcuL2xpYi9nZW9tZXRyeS9WZXJ0aWNlcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQb2ludGVyIENvbnN0cmFpbnQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgY29uc3RyYWludCB0aGF0IGFsbG93cyB5b3UgdG8gY2xpY2tcclxuICogYW5kIGRyYWcgYm9kaWVzIGluIGEgTWF0dGVyIFdvcmxkLiBJdCBtb25pdG9ycyB0aGUgYWN0aXZlIFBvaW50ZXJzIGluIGEgU2NlbmUsXHJcbiAqIGFuZCB3aGVuIG9uZSBpcyBwcmVzc2VkIGRvd24gaXQgY2hlY2tzIHRvIHNlZSBpZiB0aGF0IGhpdCBhbnkgcGFydCBvZiBhbnkgYWN0aXZlXHJcbiAqIGJvZHkgaW4gdGhlIHdvcmxkLiBJZiBpdCBkaWQsIGFuZCB0aGUgYm9keSBoYXMgaW5wdXQgZW5hYmxlZCwgaXQgd2lsbCBiZWdpbiB0b1xyXG4gKiBkcmFnIGl0IHVudGlsIGVpdGhlciByZWxlYXNlZCwgb3IgeW91IHN0b3AgaXQgdmlhIHRoZSBgc3RvcERyYWdgIG1ldGhvZC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWRqdXN0IHRoZSBzdGlmZm5lc3MsIGxlbmd0aCBhbmQgb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgY29uc3RyYWludCB2aWFcclxuICogdGhlIGBvcHRpb25zYCBvYmplY3Qgb24gY3JlYXRpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBQb2ludGVyQ29uc3RyYWludFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuTWF0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgUG9pbnRlciBDb25zdHJhaW50IGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkfSB3b3JsZCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBNYXR0ZXIgV29ybGQgaW5zdGFuY2UgdG8gd2hpY2ggdGhpcyBDb25zdHJhaW50IGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBBIENvbnN0cmFpbnQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgUG9pbnRlckNvbnN0cmFpbnQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUG9pbnRlckNvbnN0cmFpbnQgKHNjZW5lLCB3b3JsZCwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG5cclxuICAgICAgICAvLyAgRGVmYXVsdHNcclxuICAgICAgICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIGxhYmVsOiAnUG9pbnRlciBDb25zdHJhaW50JyxcclxuICAgICAgICAgICAgcG9pbnRBOiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgICAgcG9pbnRCOiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgICAgZGFtcGluZzogMCxcclxuICAgICAgICAgICAgbGVuZ3RoOiAwLjAxLFxyXG4gICAgICAgICAgICBzdGlmZm5lc3M6IDAuMSxcclxuICAgICAgICAgICAgYW5ndWxhclN0aWZmbmVzczogMSxcclxuICAgICAgICAgICAgY29sbGlzaW9uRmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogMHgwMDAxLFxyXG4gICAgICAgICAgICAgICAgbWFzazogMHhGRkZGRkZGRixcclxuICAgICAgICAgICAgICAgIGdyb3VwOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBQb2ludGVyIENvbnN0cmFpbnQgYmVsb25ncy5cclxuICAgICAgICAgKiBUaGlzIGlzIHRoZSBzYW1lIFNjZW5lIGFzIHRoZSBNYXR0ZXIgV29ybGQgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUG9pbnRlckNvbnN0cmFpbnQjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIE1hdHRlciBXb3JsZCBpbnN0YW5jZSB0byB3aGljaCB0aGlzIENvbnN0cmFpbnQgYmVsb25ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCN3b3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZCA9IHdvcmxkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoZSBQb2ludGVyIHdhcyBpbnRlcmFjdGluZyB3aXRoIHdoZW4gdGhlIGlucHV0XHJcbiAgICAgICAgICogZG93biBldmVudCB3YXMgcHJvY2Vzc2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlBvaW50ZXJDb25zdHJhaW50I2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBJbnB1dCBQb2ludGVyIHRoYXQgYWN0aXZhdGVkIHRoaXMgQ29uc3RyYWludC5cclxuICAgICAgICAgKiBUaGlzIGlzIHNldCBpbiB0aGUgYG9uRG93bmAgaGFuZGxlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCNwb2ludGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvaW50ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIENvbnN0cmFpbnQgYWN0aXZlIG9yIG5vdD9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBbiBhY3RpdmUgY29uc3RyYWludCB3aWxsIGJlIHByb2Nlc3NlZCBlYWNoIHVwZGF0ZS4gQW4gaW5hY3RpdmUgb25lIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgICAgICAgKiBVc2UgdGhpcyB0byB0b2dnbGUgYSBQb2ludGVyIENvbnN0cmFpbnQgb24gYW5kIG9mZi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW50ZXJuYWwgdHJhbnNmb3JtZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUG9pbnRlckNvbnN0cmFpbnQjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJvZHkgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZHJhZ2dlZCwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlBvaW50ZXJDb25zdHJhaW50I2JvZHlcclxuICAgICAgICAgKiBAdHlwZSB7P01hdHRlckpTLkJvZHl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm9keSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJ0IG9mIHRoZSBib2R5IHRoYXQgd2FzIGNsaWNrZWQgb24gdG8gc3RhcnQgdGhlIGRyYWcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUG9pbnRlckNvbnN0cmFpbnQjcGFydFxyXG4gICAgICAgICAqIEB0eXBlIHs/TWF0dGVySlMuQm9keX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXJ0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5hdGl2ZSBNYXR0ZXIgQ29uc3RyYWludCB0aGF0IGlzIHVzZWQgdG8gYXR0YWNoIHRvIGJvZGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCNjb25zdHJhaW50XHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnN0cmFpbnQgPSBDb25zdHJhaW50LmNyZWF0ZShNZXJnZShvcHRpb25zLCBkZWZhdWx0cykpO1xyXG5cclxuICAgICAgICB0aGlzLndvcmxkLm9uKEV2ZW50cy5CRUZPUkVfVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5pbnB1dC5vbihJbnB1dEV2ZW50cy5QT0lOVEVSX0RPV04sIHRoaXMub25Eb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFBvaW50ZXIgaGFzIGJlZW4gcHJlc3NlZCBkb3duIG9udG8gdGhlIFNjZW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGlzIENvbnN0cmFpbnQgZG9lc24ndCBoYXZlIGFuIGFjdGl2ZSBQb2ludGVyIHRoZW4gYSBoaXQgdGVzdCBpc1xyXG4gICAgICogcnVuIGFnYWluc3QgYWxsIGFjdGl2ZSBib2RpZXMgaW4gdGhlIHdvcmxkLiBJZiBvbmUgaXMgZm91bmQgaXQgaXMgYm91bmRcclxuICAgICAqIHRvIHRoaXMgY29uc3RyYWludCBhbmQgdGhlIGRyYWcgYmVnaW5zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlBvaW50ZXJDb25zdHJhaW50I29uRG93blxyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjRFJBR19TVEFSVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBQb2ludGVyIHRoYXQgd2FzIHByZXNzZWQuXHJcbiAgICAgKi9cclxuICAgIG9uRG93bjogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCb2R5KHBvaW50ZXIpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXIgPSBwb2ludGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhID0gcG9pbnRlci5jYW1lcmE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgYWxsIGFjdGl2ZSBib2RpZXMgaW4gdGhlIGN1cnJlbnQgTWF0dGVyIFdvcmxkIHRvIHNlZSBpZiBhbnkgb2YgdGhlbVxyXG4gICAgICogYXJlIGhpdCBieSB0aGUgUG9pbnRlci4gVGhlIF9maXJzdCBvbmVfIGZvdW5kIHRvIGhpdCBpcyBzZXQgYXMgdGhlIGFjdGl2ZSBjb250cmFpbnRcclxuICAgICAqIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUG9pbnRlckNvbnN0cmFpbnQjZ2V0Qm9keVxyXG4gICAgICogQHNpbmNlIDMuMTYuMlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYSBib2R5IHdhcyBmb3VuZCBhbmQgc2V0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgZ2V0Qm9keTogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnQ7XHJcblxyXG4gICAgICAgIHBvaW50ZXIuY2FtZXJhLmdldFdvcmxkUG9pbnQocG9pbnRlci54LCBwb2ludGVyLnksIHBvcyk7XHJcblxyXG4gICAgICAgIHZhciBib2RpZXMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKHRoaXMud29ybGQubG9jYWxXb3JsZCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWJvZHkuaWdub3JlUG9pbnRlciAmJlxyXG4gICAgICAgICAgICAgICAgQm91bmRzLmNvbnRhaW5zKGJvZHkuYm91bmRzLCBwb3MpICYmXHJcbiAgICAgICAgICAgICAgICBEZXRlY3Rvci5jYW5Db2xsaWRlKGJvZHkuY29sbGlzaW9uRmlsdGVyLCBjb25zdHJhaW50LmNvbGxpc2lvbkZpbHRlcikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpdFRlc3RCb2R5KGJvZHksIHBvcykpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JsZC5lbWl0KEV2ZW50cy5EUkFHX1NUQVJULCB0aGlzLmJvZHksIHRoaXMucGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGN1cnJlbnQgYm9keSB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0IG9mIGl0IHdhcyBjbGlja2VkIG9uLlxyXG4gICAgICogSWYgYSBwYXJ0IGlzIGZvdW5kIHRoZSBib2R5IGlzIHNldCBhcyB0aGUgYGNvbnN0cmFpbnQuYm9keUJgIHByb3BlcnR5LFxyXG4gICAgICogYXMgd2VsbCBhcyB0aGUgYGJvZHlgIHByb3BlcnR5IG9mIHRoaXMgY2xhc3MuIFRoZSBwYXJ0IGlzIGFsc28gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLlBvaW50ZXJDb25zdHJhaW50I2hpdFRlc3RCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4xNi4yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5IC0gVGhlIE1hdHRlciBCb2R5IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwb3NpdGlvbiAtIEEgdHJhbnNsYXRlZCBoaXQgdGVzdCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYSBwYXJ0IG9mIHRoZSBib2R5IHdhcyBoaXQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBoaXRUZXN0Qm9keTogZnVuY3Rpb24gKGJvZHksIHBvc2l0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25zdHJhaW50ID0gdGhpcy5jb25zdHJhaW50O1xyXG5cclxuICAgICAgICB2YXIgc3RhcnQgPSAoYm9keS5wYXJ0cy5sZW5ndGggPiAxKSA/IDEgOiAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBib2R5LnBhcnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnQgPSBib2R5LnBhcnRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKFZlcnRpY2VzLmNvbnRhaW5zKHBhcnQudmVydGljZXMsIHBvc2l0aW9uKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5ib2R5QiA9IGJvZHk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5wb2ludEEueCA9IHBvc2l0aW9uLng7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnBvaW50QS55ID0gcG9zaXRpb24ueTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnBvaW50Qi54ID0gcG9zaXRpb24ueCAtIGJvZHkucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQucG9pbnRCLnkgPSBwb3NpdGlvbi55IC0gYm9keS5wb3NpdGlvbi55O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuYW5nbGVCID0gYm9keS5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBTbGVlcGluZy5zZXQoYm9keSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucGFydCA9IHBhcnQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIuIENhbGxlZCBpbiB0aGUgTWF0dGVyIEJFRk9SRV9VUERBVEUgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCN1cGRhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzI0RSQUdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLmJvZHk7XHJcbiAgICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzLnBvaW50ZXI7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUgfHwgIXBvaW50ZXIgfHwgIWJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocG9pbnRlci5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnQ7XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmEuZ2V0V29ybGRQb2ludChwb2ludGVyLngsIHBvaW50ZXIueSwgcG9zKTtcclxuICAgIFxyXG4gICAgICAgICAgICBTbGVlcGluZy5zZXQoYm9keSwgZmFsc2UpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnQucG9pbnRBLnggPSBwb3MueDtcclxuICAgICAgICAgICAgY29uc3RyYWludC5wb2ludEEueSA9IHBvcy55O1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMud29ybGQuZW1pdChFdmVudHMuRFJBRywgYm9keSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBQb2ludGVyIGhhcyBiZWVuIHJlbGVhc2VkIHNpbmNlIHRoZSBsYXN0IHdvcmxkIHN0ZXBcclxuICAgICAgICAgICAgdGhpcy5zdG9wRHJhZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgUG9pbnRlciBDb25zdHJhaW50IGZyb20gZHJhZ2dpbmcgdGhlIGJvZHkgYW55IGZ1cnRoZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIFBvaW50ZXIgaXMgcmVsZWFzZWQgd2hpbGUgYWN0aXZlbHlcclxuICAgICAqIGRyYWdnaW5nIGEgYm9keS4gT3IsIHlvdSBjYW4gY2FsbCBpdCBtYW51YWxseSB0byByZWxlYXNlIGEgYm9keSBmcm9tIGFcclxuICAgICAqIGNvbnN0cmFpbnQgd2l0aG91dCBoYXZpbmcgdG8gZmlyc3QgcmVsZWFzZSB0aGUgcG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludCNzdG9wRHJhZ1xyXG4gICAgICogQGZpcmVzIFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjRFJBR19FTkRcclxuICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAqL1xyXG4gICAgc3RvcERyYWc6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLmJvZHk7XHJcbiAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSB0aGlzLmNvbnN0cmFpbnQ7XHJcblxyXG4gICAgICAgIGlmIChib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC5lbWl0KEV2ZW50cy5EUkFHX0VORCwgYm9keSwgdGhpcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnQgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3RyYWludC5ib2R5QiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgUG9pbnRlciBDb25zdHJhaW50IGluc3RhbmNlIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuUG9pbnRlckNvbnN0cmFpbnQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy53b3JsZC5yZW1vdmVDb25zdHJhaW50KHRoaXMuY29uc3RyYWludCk7XHJcblxyXG4gICAgICAgIHRoaXMucG9pbnRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb25zdHJhaW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmJvZHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFydCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMud29ybGQub2ZmKEV2ZW50cy5CRUZPUkVfVVBEQVRFLCB0aGlzLnVwZGF0ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmlucHV0Lm9mZihJbnB1dEV2ZW50cy5QT0lOVEVSX0RPV04sIHRoaXMub25Eb3duLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludGVyQ29uc3RyYWludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/PointerConstraint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/World.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/World.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bodies = __webpack_require__(/*! ./lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Body = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Common = __webpack_require__(/*! ./lib/core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Composite = __webpack_require__(/*! ./lib/body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Engine = __webpack_require__(/*! ./lib/core/Engine */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Engine.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/physics/matter-js/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MatterBody = __webpack_require__(/*! ./lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar MatterEvents = __webpack_require__(/*! ./lib/core/Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\nvar MatterTileBody = __webpack_require__(/*! ./MatterTileBody */ \"./node_modules/phaser/src/physics/matter-js/MatterTileBody.js\");\r\nvar MatterWorld = __webpack_require__(/*! ./lib/body/World */ \"./node_modules/phaser/src/physics/matter-js/lib/body/World.js\");\r\nvar Vector = __webpack_require__(/*! ./lib/geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class World\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Physics.Matter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Matter World instance belongs.\r\n * @param {Phaser.Types.Physics.Matter.MatterWorldConfig} config - The Matter World configuration object.\r\n */\r\nvar World = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function World (scene, config)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Scene to which this Matter World instance belongs.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * An instance of the MatterJS Engine.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#engine\r\n         * @type {MatterJS.Engine}\r\n         * @since 3.0.0\r\n         */\r\n        this.engine = Engine.create(config);\r\n\r\n        /**\r\n         * A `World` composite object that will contain all simulated bodies and constraints.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#localWorld\r\n         * @type {MatterJS.World}\r\n         * @since 3.0.0\r\n         */\r\n        this.localWorld = this.engine.world;\r\n\r\n        var gravity = GetValue(config, 'gravity', null);\r\n\r\n        if (gravity)\r\n        {\r\n            this.setGravity(gravity.x, gravity.y, gravity.scale);\r\n        }\r\n\r\n        /**\r\n         * An object containing the 4 wall bodies that bound the physics world.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#walls\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.walls = { left: null, right: null, top: null, bottom: null };\r\n\r\n        if (GetFastValue(config, 'setBounds', false))\r\n        {\r\n            var boundsConfig = config['setBounds'];\r\n\r\n            if (typeof boundsConfig === 'boolean')\r\n            {\r\n                this.setBounds();\r\n            }\r\n            else\r\n            {\r\n                var x = GetFastValue(boundsConfig, 'x', 0);\r\n                var y = GetFastValue(boundsConfig, 'y', 0);\r\n                var width = GetFastValue(boundsConfig, 'width', scene.sys.scale.width);\r\n                var height = GetFastValue(boundsConfig, 'height', scene.sys.scale.height);\r\n                var thickness = GetFastValue(boundsConfig, 'thickness', 64);\r\n                var left = GetFastValue(boundsConfig, 'left', true);\r\n                var right = GetFastValue(boundsConfig, 'right', true);\r\n                var top = GetFastValue(boundsConfig, 'top', true);\r\n                var bottom = GetFastValue(boundsConfig, 'bottom', true);\r\n\r\n                this.setBounds(x, y, width, height, thickness, left, right, top, bottom);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * A flag that toggles if the world is enabled or not.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#enabled\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.enabled = GetValue(config, 'enabled', true);\r\n\r\n        /**\r\n         * The correction argument is an optional Number that specifies the time correction factor to apply to the update.\r\n         * This can help improve the accuracy of the simulation in cases where delta is changing between updates.\r\n         * The value of correction is defined as delta / lastDelta, i.e. the percentage change of delta over the last step.\r\n         * Therefore the value is always 1 (no correction) when delta constant (or when no correction is desired, which is the default).\r\n         * See the paper on Time Corrected Verlet for more information.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#correction\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.4.0\r\n         */\r\n        this.correction = GetValue(config, 'correction', 1);\r\n\r\n        /**\r\n         * This function is called every time the core game loop steps, which is bound to the\r\n         * Request Animation Frame frequency unless otherwise modified.\r\n         * \r\n         * The function is passed two values: `time` and `delta`, both of which come from the game step values.\r\n         * \r\n         * It must return a number. This number is used as the delta value passed to Matter.Engine.update.\r\n         * \r\n         * You can override this function with your own to define your own timestep.\r\n         * \r\n         * If you need to update the Engine multiple times in a single game step then call\r\n         * `World.update` as many times as required. Each call will trigger the `getDelta` function.\r\n         * If you wish to have full control over when the Engine updates then see the property `autoUpdate`.\r\n         *\r\n         * You can also adjust the number of iterations that Engine.update performs.\r\n         * Use the Scene Matter Physics config object to set the following properties:\r\n         *\r\n         * positionIterations (defaults to 6)\r\n         * velocityIterations (defaults to 4)\r\n         * constraintIterations (defaults to 2)\r\n         *\r\n         * Adjusting these values can help performance in certain situations, depending on the physics requirements\r\n         * of your game.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#getDelta\r\n         * @type {function}\r\n         * @since 3.4.0\r\n         */\r\n        this.getDelta = GetValue(config, 'getDelta', this.update60Hz);\r\n\r\n        /**\r\n         * Automatically call Engine.update every time the game steps.\r\n         * If you disable this then you are responsible for calling `World.step` directly from your game.\r\n         * If you call `set60Hz` or `set30Hz` then `autoUpdate` is reset to `true`.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#autoUpdate\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.4.0\r\n         */\r\n        this.autoUpdate = GetValue(config, 'autoUpdate', true);\r\n\r\n        /**\r\n         * A flag that controls if the debug graphics will be drawn to or not.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#drawDebug\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.drawDebug = GetValue(config, 'debug', false);\r\n\r\n        /**\r\n         * An instance of the Graphics object the debug bodies are drawn to, if enabled.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#debugGraphic\r\n         * @type {Phaser.GameObjects.Graphics}\r\n         * @since 3.0.0\r\n         */\r\n        this.debugGraphic;\r\n\r\n        /**\r\n         * The default configuration values.\r\n         *\r\n         * @name Phaser.Physics.Matter.World#defaults\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.defaults = {\r\n            debugShowBody: GetFastValue(config, 'debugShowBody', true),\r\n            debugShowStaticBody: GetFastValue(config, 'debugShowStaticBody', true),\r\n            debugShowVelocity: GetFastValue(config, 'debugShowVelocity', true),\r\n            bodyDebugColor: GetFastValue(config, 'debugBodyColor', 0xff00ff),\r\n            bodyDebugFillColor: GetFastValue(config, 'debugBodyFillColor', 0xe3a7e3),\r\n            staticBodyDebugColor: GetFastValue(config, 'debugStaticBodyColor', 0x0000ff),\r\n            velocityDebugColor: GetFastValue(config, 'debugVelocityColor', 0x00ff00),\r\n            debugShowJoint: GetFastValue(config, 'debugShowJoint', true),\r\n            jointDebugColor: GetFastValue(config, 'debugJointColor', 0x000000),\r\n            debugWireframes: GetFastValue(config, 'debugWireframes', true),\r\n            debugShowInternalEdges: GetFastValue(config, 'debugShowInternalEdges', false),\r\n            debugShowConvexHulls: GetFastValue(config, 'debugShowConvexHulls', false),\r\n            debugConvexHullColor: GetFastValue(config, 'debugConvexHullColor', 0xaaaaaa),\r\n            debugShowSleeping: GetFastValue(config, 'debugShowSleeping', false)\r\n        };\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            this.createDebugGraphic();\r\n        }\r\n\r\n        this.setEventsProxy();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#setEventsProxy\r\n     * @since 3.0.0\r\n     */\r\n    setEventsProxy: function ()\r\n    {\r\n        var _this = this;\r\n        var engine = this.engine;\r\n\r\n        MatterEvents.on(engine, 'beforeUpdate', function (event)\r\n        {\r\n            _this.emit(Events.BEFORE_UPDATE, event);\r\n        });\r\n\r\n        MatterEvents.on(engine, 'afterUpdate', function (event)\r\n        {\r\n            _this.emit(Events.AFTER_UPDATE, event);\r\n        });\r\n\r\n        MatterEvents.on(engine, 'collisionStart', function (event)\r\n        {\r\n            var pairs = event.pairs;\r\n            var bodyA;\r\n            var bodyB;\r\n\r\n            if (pairs.length > 0)\r\n            {\r\n                bodyA = pairs[0].bodyA;\r\n                bodyB = pairs[0].bodyB;\r\n            }\r\n\r\n            _this.emit(Events.COLLISION_START, event, bodyA, bodyB);\r\n        });\r\n\r\n        MatterEvents.on(engine, 'collisionActive', function (event)\r\n        {\r\n            var pairs = event.pairs;\r\n            var bodyA;\r\n            var bodyB;\r\n\r\n            if (pairs.length > 0)\r\n            {\r\n                bodyA = pairs[0].bodyA;\r\n                bodyB = pairs[0].bodyB;\r\n            }\r\n\r\n            _this.emit(Events.COLLISION_ACTIVE, event, bodyA, bodyB);\r\n        });\r\n\r\n        MatterEvents.on(engine, 'collisionEnd', function (event)\r\n        {\r\n            var pairs = event.pairs;\r\n            var bodyA;\r\n            var bodyB;\r\n\r\n            if (pairs.length > 0)\r\n            {\r\n                bodyA = pairs[0].bodyA;\r\n                bodyB = pairs[0].bodyB;\r\n            }\r\n\r\n            _this.emit(Events.COLLISION_END, event, bodyA, bodyB);\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Sets the bounds of the Physics world to match the given world pixel dimensions.\r\n     * You can optionally set which 'walls' to create: left, right, top or bottom.\r\n     * If none of the walls are given it will default to use the walls settings it had previously.\r\n     * I.e. if you previously told it to not have the left or right walls, and you then adjust the world size\r\n     * the newly created bounds will also not have the left and right walls.\r\n     * Explicitly state them in the parameters to override this.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#setBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The x coordinate of the top-left corner of the bounds.\r\n     * @param {number} [y=0] - The y coordinate of the top-left corner of the bounds.\r\n     * @param {number} [width] - The width of the bounds.\r\n     * @param {number} [height] - The height of the bounds.\r\n     * @param {number} [thickness=128] - The thickness of each wall, in pixels.\r\n     * @param {boolean} [left=true] - If true will create the left bounds wall.\r\n     * @param {boolean} [right=true] - If true will create the right bounds wall.\r\n     * @param {boolean} [top=true] - If true will create the top bounds wall.\r\n     * @param {boolean} [bottom=true] - If true will create the bottom bounds wall.\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    setBounds: function (x, y, width, height, thickness, left, right, top, bottom)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.scene.sys.scale.width; }\r\n        if (height === undefined) { height = this.scene.sys.scale.height; }\r\n        if (thickness === undefined) { thickness = 128; }\r\n        if (left === undefined) { left = true; }\r\n        if (right === undefined) { right = true; }\r\n        if (top === undefined) { top = true; }\r\n        if (bottom === undefined) { bottom = true; }\r\n\r\n        this.updateWall(left, 'left', x - thickness, y - thickness, thickness, height + (thickness * 2));\r\n        this.updateWall(right, 'right', x + width, y - thickness, thickness, height + (thickness * 2));\r\n        this.updateWall(top, 'top', x, y - thickness, width, thickness);\r\n        this.updateWall(bottom, 'bottom', x, y + height, width, thickness);\r\n\r\n        return this;\r\n    },\r\n\r\n    //  position = 'left', 'right', 'top' or 'bottom'\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#updateWall\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} add - [description]\r\n     * @param {string} position - [description]\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     */\r\n    updateWall: function (add, position, x, y, width, height)\r\n    {\r\n        var wall = this.walls[position];\r\n\r\n        if (add)\r\n        {\r\n            if (wall)\r\n            {\r\n                MatterWorld.remove(this.localWorld, wall);\r\n            }\r\n\r\n            //  adjust center\r\n            x += (width / 2);\r\n            y += (height / 2);\r\n\r\n            this.walls[position] = this.create(x, y, width, height, { isStatic: true, friction: 0, frictionStatic: 0 });\r\n        }\r\n        else\r\n        {\r\n            if (wall)\r\n            {\r\n                MatterWorld.remove(this.localWorld, wall);\r\n            }\r\n\r\n            this.walls[position] = null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#createDebugGraphic\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.GameObjects.Graphics} [description]\r\n     */\r\n    createDebugGraphic: function ()\r\n    {\r\n        var graphic = this.scene.sys.add.graphics({ x: 0, y: 0 });\r\n\r\n        graphic.setDepth(Number.MAX_VALUE);\r\n\r\n        this.debugGraphic = graphic;\r\n\r\n        this.drawDebug = true;\r\n\r\n        return graphic;\r\n    },\r\n\r\n    /**\r\n     * Sets the world's gravity and gravity scale to 0.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#disableGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    disableGravity: function ()\r\n    {\r\n        this.localWorld.gravity.x = 0;\r\n        this.localWorld.gravity.y = 0;\r\n        this.localWorld.gravity.scale = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the world's gravity\r\n     *\r\n     * @method Phaser.Physics.Matter.World#setGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The world gravity x component.\r\n     * @param {number} [y=1] - The world gravity y component.\r\n     * @param {number} [scale] - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    setGravity: function (x, y, scale)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 1; }\r\n\r\n        this.localWorld.gravity.x = x;\r\n        this.localWorld.gravity.y = y;\r\n\r\n        if (scale !== undefined)\r\n        {\r\n            this.localWorld.gravity.scale = scale;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a rectangle Matter body and adds it to the world.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal position of the body in the world.\r\n     * @param {number} y - The vertical position of the body in the world.\r\n     * @param {number} width - The width of the body.\r\n     * @param {number} height - The height of the body.\r\n     * @param {object} options - Optional Matter configuration object.\r\n     *\r\n     * @return {MatterJS.Body} The Matter.js body that was created.\r\n     */\r\n    create: function (x, y, width, height, options)\r\n    {\r\n        var body = Bodies.rectangle(x, y, width, height, options);\r\n\r\n        MatterWorld.add(this.localWorld, body);\r\n\r\n        return body;\r\n    },\r\n\r\n    /**\r\n     * Adds an object to the world.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(object|object[])} object - Can be single or an array, and can be a body, composite or constraint\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    add: function (object)\r\n    {\r\n        MatterWorld.add(this.localWorld, object);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} object - The object to be removed from the world.\r\n     * @param {boolean} deep - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    remove: function (object, deep)\r\n    {\r\n        var body = (object.body) ? object.body : object;\r\n\r\n        Composite.remove(this.localWorld, body, deep);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#removeConstraint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Constraint} constraint - [description]\r\n     * @param {boolean} deep - [description]\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    removeConstraint: function (constraint, deep)\r\n    {\r\n        Composite.remove(this.localWorld, constraint, deep);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds MatterTileBody instances for all the colliding tiles within the given tilemap layer. Set\r\n     * the appropriate tiles in your layer to collide before calling this method!\r\n     *\r\n     * @method Phaser.Physics.Matter.World#convertTilemapLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} tilemapLayer -\r\n     * An array of tiles.\r\n     * @param {object} [options] - Options to be passed to the MatterTileBody constructor. {@ee Phaser.Physics.Matter.TileBody}\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    convertTilemapLayer: function (tilemapLayer, options)\r\n    {\r\n        var layerData = tilemapLayer.layer;\r\n        var tiles = tilemapLayer.getTilesWithin(0, 0, layerData.width, layerData.height, { isColliding: true });\r\n\r\n        this.convertTiles(tiles, options);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds MatterTileBody instances for the given tiles. This adds bodies regardless of whether the\r\n     * tiles are set to collide or not.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#convertTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tilemaps.Tile[]} tiles - An array of tiles.\r\n     * @param {object} [options] - Options to be passed to the MatterTileBody constructor. {@see Phaser.Physics.Matter.TileBody}\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    convertTiles: function (tiles, options)\r\n    {\r\n        if (tiles.length === 0)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        for (var i = 0; i < tiles.length; i++)\r\n        {\r\n            new MatterTileBody(this, tiles[i], options);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#nextGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} isNonColliding - [description]\r\n     *\r\n     * @return {number} [description]\r\n     */\r\n    nextGroup: function (isNonColliding)\r\n    {\r\n        return MatterBody.nextGroup(isNonColliding);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#nextCategory\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} Returns the next unique category bitfield.\r\n     */\r\n    nextCategory: function ()\r\n    {\r\n        return MatterBody.nextCategory();\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#pause\r\n     * @fires Phaser.Physics.Matter.Events#PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.enabled = false;\r\n\r\n        this.emit(Events.PAUSE);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#resume\r\n     * @fires Phaser.Physics.Matter.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Physics.Matter.World} This Matter World object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.enabled = true;\r\n\r\n        this.emit(Events.RESUME);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (this.enabled && this.autoUpdate)\r\n        {\r\n            Engine.update(this.engine, this.getDelta(time, delta), this.correction);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Manually advances the physics simulation by one iteration.\r\n     * \r\n     * You can optionally pass in the `delta` and `correction` values to be used by Engine.update.\r\n     * If undefined they use the Matter defaults of 60Hz and no correction.\r\n     * \r\n     * Calling `step` directly bypasses any checks of `enabled` or `autoUpdate`.\r\n     * \r\n     * It also ignores any custom `getDelta` functions, as you should be passing the delta\r\n     * value in to this call.\r\n     *\r\n     * You can adjust the number of iterations that Engine.update performs internally.\r\n     * Use the Scene Matter Physics config object to set the following properties:\r\n     *\r\n     * positionIterations (defaults to 6)\r\n     * velocityIterations (defaults to 4)\r\n     * constraintIterations (defaults to 2)\r\n     *\r\n     * Adjusting these values can help performance in certain situations, depending on the physics requirements\r\n     * of your game.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#step\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} [delta=16.666] - [description]\r\n     * @param {number} [correction=1] - [description]\r\n     */\r\n    step: function (delta, correction)\r\n    {\r\n        Engine.update(this.engine, delta, correction);\r\n    },\r\n\r\n    /**\r\n     * Runs the Matter Engine.update at a fixed timestep of 60Hz.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#update60Hz\r\n     * @since 3.4.0\r\n     *\r\n     * @return {number} The delta value to be passed to Engine.update.\r\n     */\r\n    update60Hz: function ()\r\n    {\r\n        return 1000 / 60;\r\n    },\r\n\r\n    /**\r\n     * Runs the Matter Engine.update at a fixed timestep of 30Hz.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#update30Hz\r\n     * @since 3.4.0\r\n     *\r\n     * @return {number} The delta value to be passed to Engine.update.\r\n     */\r\n    update30Hz: function ()\r\n    {\r\n        return 1000 / 30;\r\n    },\r\n\r\n    /**\r\n     * Handles the rendering of bodies and debug information to the debug Graphics object, if enabled.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#postUpdate\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    postUpdate: function ()\r\n    {\r\n        if (!this.drawDebug)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.debugGraphic.clear();\r\n\r\n        var bodies = Composite.allBodies(this.localWorld);\r\n\r\n        if (this.defaults.debugWireframes)\r\n        {\r\n            if (this.defaults.debugShowConvexHulls)\r\n            {\r\n                this.renderConvexHulls(bodies);\r\n            }\r\n\r\n            this.renderWireframes(bodies);\r\n        }\r\n        else\r\n        {\r\n            this.renderBodies(bodies);\r\n        }\r\n\r\n        if (this.defaults.debugShowJoint)\r\n        {\r\n            this.renderJoints();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Renders the debug convex hulls from the given array of bodies.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#renderConvexHulls\r\n     * @private\r\n     * @since 3.14.0\r\n     * \r\n     * @param {array} bodies - An array of bodies from the localWorld.\r\n     */\r\n    renderConvexHulls: function (bodies)\r\n    {\r\n        var graphics = this.debugGraphic;\r\n\r\n        graphics.lineStyle(1, this.defaults.debugConvexHullColor);\r\n\r\n        graphics.beginPath();\r\n\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            var body = bodies[i];\r\n\r\n            if (!body.render.visible || body.parts.length === 1)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            graphics.moveTo(body.vertices[0].x, body.vertices[0].y);\r\n\r\n            for (var j = 1; j < body.vertices.length; j++)\r\n            {\r\n                graphics.lineTo(body.vertices[j].x, body.vertices[j].y);\r\n            }\r\n            \r\n            graphics.lineTo(body.vertices[0].x, body.vertices[0].y);\r\n        }\r\n\r\n        graphics.strokePath();\r\n    },\r\n\r\n    /**\r\n     * Renders the wireframes of the given array of bodies.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#renderWireframes\r\n     * @private\r\n     * @since 3.14.0\r\n     * \r\n     * @param {array} bodies - An array of bodies from the localWorld.\r\n     */\r\n    renderWireframes: function (bodies)\r\n    {\r\n        var graphics = this.debugGraphic;\r\n        var showInternalEdges = this.defaults.debugShowInternalEdges;\r\n\r\n        graphics.lineStyle(1, this.defaults.bodyDebugColor);\r\n\r\n        graphics.beginPath();\r\n\r\n        for (var i = 0; i < bodies.length; i++)\r\n        {\r\n            var body = bodies[i];\r\n\r\n            if (!body.render.visible)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            for (var k = (body.parts.length > 1) ? 1 : 0; k < body.parts.length; k++)\r\n            {\r\n                var part = body.parts[k];\r\n\r\n                var vertLength = part.vertices.length;\r\n\r\n                graphics.moveTo(part.vertices[0].x, part.vertices[0].y);\r\n\r\n                for (var j = 1; j < vertLength; j++)\r\n                {\r\n                    if (!part.vertices[j - 1].isInternal || showInternalEdges)\r\n                    {\r\n                        graphics.lineTo(part.vertices[j].x, part.vertices[j].y);\r\n                    }\r\n                    else\r\n                    {\r\n                        graphics.moveTo(part.vertices[j].x, part.vertices[j].y);\r\n                    }\r\n\r\n                    if (part.vertices[j].isInternal && !showInternalEdges)\r\n                    {\r\n                        graphics.moveTo(part.vertices[(j + 1) % vertLength].x, part.vertices[(j + 1) % vertLength].y);\r\n                    }\r\n                }\r\n                \r\n                graphics.lineTo(part.vertices[0].x, part.vertices[0].y);\r\n            }\r\n        }\r\n\r\n        graphics.strokePath();\r\n    },\r\n\r\n    /**\r\n     * Renders the array of bodies.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#renderBodies\r\n     * @private\r\n     * @since 3.14.0\r\n     * \r\n     * @param {array} bodies - An array of bodies from the localWorld.\r\n     */\r\n    renderBodies: function (bodies)\r\n    {\r\n        var graphics = this.debugGraphic;\r\n\r\n        var showInternalEdges = this.defaults.debugShowInternalEdges || !this.defaults.debugWireframes;\r\n        var showSleeping = this.defaults.debugShowSleeping;\r\n        var wireframes = this.defaults.debugWireframes;\r\n\r\n        var body;\r\n        var part;\r\n        var i;\r\n        var k;\r\n\r\n        for (i = 0; i < bodies.length; i++)\r\n        {\r\n            body = bodies[i];\r\n\r\n            if (!body.render.visible)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            //  Handle compound parts\r\n            for (k = body.parts.length > 1 ? 1 : 0; k < body.parts.length; k++)\r\n            {\r\n                part = body.parts[k];\r\n\r\n                if (!part.render.visible)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                if (showSleeping && body.isSleeping)\r\n                {\r\n                    graphics.lineStyle(1, this.defaults.bodyDebugColor, 0.5 * part.render.opacity);\r\n                    graphics.fillStyle(this.defaults.bodyDebugColor, 0.5 * part.render.opacity);\r\n                }\r\n                else\r\n                {\r\n                    graphics.lineStyle(1, this.defaults.bodyDebugColor, part.render.opacity);\r\n                    graphics.fillStyle(this.defaults.bodyDebugColor, part.render.opacity);\r\n                }\r\n\r\n                //  Part polygon\r\n                if (part.circleRadius)\r\n                {\r\n                    graphics.beginPath();\r\n                    graphics.arc(part.position.x, part.position.y, part.circleRadius, 0, 2 * Math.PI);\r\n                }\r\n                else\r\n                {\r\n                    graphics.beginPath();\r\n                    graphics.moveTo(part.vertices[0].x, part.vertices[0].y);\r\n\r\n                    var vertLength = part.vertices.length;\r\n\r\n                    for (var j = 1; j < vertLength; j++)\r\n                    {\r\n                        if (!part.vertices[j - 1].isInternal || showInternalEdges)\r\n                        {\r\n                            graphics.lineTo(part.vertices[j].x, part.vertices[j].y);\r\n                        }\r\n                        else\r\n                        {\r\n                            graphics.moveTo(part.vertices[j].x, part.vertices[j].y);\r\n                        }\r\n\r\n                        if (part.vertices[j].isInternal && !showInternalEdges)\r\n                        {\r\n                            graphics.moveTo(part.vertices[(j + 1) % part.vertices.length].x, part.vertices[(j + 1) % part.vertices.length].y);\r\n                        }\r\n                    }\r\n                    \r\n                    graphics.lineTo(part.vertices[0].x, part.vertices[0].y);\r\n\r\n                    graphics.closePath();\r\n                }\r\n\r\n                if (!wireframes)\r\n                {\r\n                    graphics.fillPath();\r\n                }\r\n                else\r\n                {\r\n                    graphics.strokePath();\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Renders world constraints.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#renderJoints\r\n     * @private\r\n     * @since 3.14.0\r\n     */\r\n    renderJoints: function ()\r\n    {\r\n        var graphics = this.debugGraphic;\r\n\r\n        graphics.lineStyle(2, this.defaults.jointDebugColor);\r\n\r\n        // Render constraints \r\n        var constraints = Composite.allConstraints(this.localWorld);\r\n\r\n        for (var i = 0; i < constraints.length; i++)\r\n        {\r\n            var constraint = constraints[i];\r\n\r\n            if (!constraint.render.visible || !constraint.pointA || !constraint.pointB)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (constraint.render.lineWidth)\r\n            {\r\n                graphics.lineStyle(constraint.render.lineWidth, Common.colorToNumber(constraint.render.strokeStyle));\r\n            }\r\n\r\n            var bodyA = constraint.bodyA;\r\n            var bodyB = constraint.bodyB;\r\n            var start;\r\n            var end;\r\n\r\n            if (bodyA)\r\n            {\r\n                start = Vector.add(bodyA.position, constraint.pointA);\r\n            }\r\n            else\r\n            {\r\n                start = constraint.pointA;\r\n            }\r\n\r\n            if (constraint.render.type === 'pin')\r\n            {\r\n                graphics.beginPath();\r\n                graphics.arc(start.x, start.y, 3, 0, 2 * Math.PI);\r\n                graphics.closePath();\r\n            }\r\n            else\r\n            {\r\n                if (bodyB)\r\n                {\r\n                    end = Vector.add(bodyB.position, constraint.pointB);\r\n                }\r\n                else\r\n                {\r\n                    end = constraint.pointB;\r\n                }\r\n\r\n                graphics.beginPath();\r\n                graphics.moveTo(start.x, start.y);\r\n\r\n                if (constraint.render.type === 'spring')\r\n                {\r\n                    var delta = Vector.sub(end, start);\r\n                    var normal = Vector.perp(Vector.normalise(delta));\r\n                    var coils = Math.ceil(Common.clamp(constraint.length / 5, 12, 20));\r\n                    var offset;\r\n\r\n                    for (var j = 1; j < coils; j += 1)\r\n                    {\r\n                        offset = (j % 2 === 0) ? 1 : -1;\r\n\r\n                        graphics.lineTo(\r\n                            start.x + delta.x * (j / coils) + normal.x * offset * 4,\r\n                            start.y + delta.y * (j / coils) + normal.y * offset * 4\r\n                        );\r\n                    }\r\n                }\r\n\r\n                graphics.lineTo(end.x, end.y);\r\n            }\r\n\r\n            if (constraint.render.lineWidth)\r\n            {\r\n                graphics.strokePath();\r\n            }\r\n\r\n            if (constraint.render.anchors)\r\n            {\r\n                graphics.fillStyle(Common.colorToNumber(constraint.render.strokeStyle));\r\n                graphics.beginPath();\r\n                graphics.arc(start.x, start.y, 6, 0, 2 * Math.PI);\r\n                graphics.arc(end.x, end.y, 6, 0, 2 * Math.PI);\r\n                graphics.closePath();\r\n                graphics.fillPath();\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.World#fromPath\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} path - [description]\r\n     * @param {array} points - [description]\r\n     *\r\n     * @return {array} [description]\r\n     */\r\n    fromPath: function (path, points)\r\n    {\r\n        if (points === undefined) { points = []; }\r\n\r\n        // var pathPattern = /L?\\s*([-\\d.e]+)[\\s,]*([-\\d.e]+)*/ig;\r\n\r\n        // eslint-disable-next-line no-useless-escape\r\n        var pathPattern = /L?\\s*([\\-\\d\\.e]+)[\\s,]*([\\-\\d\\.e]+)*/ig;\r\n\r\n        path.replace(pathPattern, function (match, x, y)\r\n        {\r\n            points.push({ x: parseFloat(x), y: parseFloat(y) });\r\n        });\r\n\r\n        return points;\r\n    },\r\n\r\n    /**\r\n     * Resets the internal collision IDs that Matter.JS uses for Body collision groups.\r\n     * \r\n     * You should call this before destroying your game if you need to restart the game\r\n     * again on the same page, without first reloading the page. Or, if you wish to\r\n     * consistently destroy a Scene that contains Matter.js and then run it again\r\n     * later in the same game.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#resetCollisionIDs\r\n     * @since 3.17.0\r\n     */\r\n    resetCollisionIDs: function ()\r\n    {\r\n        Body._nextCollidingGroupId = 1;\r\n        Body._nextNonCollidingGroupId = -1;\r\n        Body._nextCategory = 0x0001;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Will remove all Matter physics event listeners and clear the matter physics world,\r\n     * engine and any debug graphics, if any.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        MatterEvents.off(this.engine);\r\n\r\n        this.removeAllListeners();\r\n\r\n        MatterWorld.clear(this.localWorld, false);\r\n\r\n        Engine.clear(this.engine);\r\n\r\n        if (this.drawDebug)\r\n        {\r\n            this.debugGraphic.destroy();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Will remove all Matter physics event listeners and clear the matter physics world,\r\n     * engine and any debug graphics, if any.\r\n     *\r\n     * After destroying the world it cannot be re-used again.\r\n     *\r\n     * @method Phaser.Physics.Matter.World#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = World;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9Xb3JsZC5qcz9hMjk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsK0ZBQXNCO0FBQzNDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBaUI7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxhQUFhLG1CQUFPLENBQUMseUZBQW1CO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLCtGQUFzQjtBQUM5QyxhQUFhLG1CQUFPLENBQUMseUZBQW1CO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyw2RUFBVTtBQUMvQixtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxpQkFBaUIsbUJBQU8sQ0FBQyxxRkFBaUI7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMseUZBQW1CO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLHVGQUFrQjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyx1RkFBa0I7QUFDNUMsYUFBYSxtQkFBTyxDQUFDLGlHQUF1Qjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0Msb0NBQW9DO0FBQ3RFLG1DQUFtQyxzQ0FBc0M7QUFDekUsc0NBQXNDLGlCQUFpQjtBQUN2RCxpQ0FBaUMsYUFBYTtBQUM5QyxrQ0FBa0MsY0FBYztBQUNoRCxnQ0FBZ0MsWUFBWTtBQUM1QyxtQ0FBbUMsZUFBZTs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxRUFBcUUsaURBQWlEO0FBQ3RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELGFBQWE7O0FBRWhFOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5RUFBeUU7QUFDeEY7QUFDQSxlQUFlLE9BQU8sc0VBQXNFO0FBQzVGO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRixvQkFBb0I7O0FBRTlHOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUJBQXVCO0FBQ3RDLGVBQWUsT0FBTyxzRUFBc0U7QUFDNUY7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIsMEJBQTBCO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5REFBeUQsdUJBQXVCO0FBQ2hGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsK0JBQStCLGdCQUFnQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQsdUJBQXVCO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUNBQW1DLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxXQUFXO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLHFDQUFxQztBQUM5RCxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9Xb3JsZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4vbGliL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuL2xpYi9jb3JlL0NvbW1vbicpO1xyXG52YXIgQ29tcG9zaXRlID0gcmVxdWlyZSgnLi9saWIvYm9keS9Db21wb3NpdGUnKTtcclxudmFyIEVuZ2luZSA9IHJlcXVpcmUoJy4vbGliL2NvcmUvRW5naW5lJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIE1hdHRlckJvZHkgPSByZXF1aXJlKCcuL2xpYi9ib2R5L0JvZHknKTtcclxudmFyIE1hdHRlckV2ZW50cyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvRXZlbnRzJyk7XHJcbnZhciBNYXR0ZXJUaWxlQm9keSA9IHJlcXVpcmUoJy4vTWF0dGVyVGlsZUJvZHknKTtcclxudmFyIE1hdHRlcldvcmxkID0gcmVxdWlyZSgnLi9saWIvYm9keS9Xb3JsZCcpO1xyXG52YXIgVmVjdG9yID0gcmVxdWlyZSgnLi9saWIvZ2VvbWV0cnkvVmVjdG9yJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBXb3JsZFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBoeXNpY3MuTWF0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgTWF0dGVyIFdvcmxkIGluc3RhbmNlIGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlBoeXNpY3MuTWF0dGVyLk1hdHRlcldvcmxkQ29uZmlnfSBjb25maWcgLSBUaGUgTWF0dGVyIFdvcmxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIFdvcmxkID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBXb3JsZCAoc2NlbmUsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgTWF0dGVyIFdvcmxkIGluc3RhbmNlIGJlbG9uZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIE1hdHRlckpTIEVuZ2luZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNlbmdpbmVcclxuICAgICAgICAgKiBAdHlwZSB7TWF0dGVySlMuRW5naW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5naW5lID0gRW5naW5lLmNyZWF0ZShjb25maWcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGBXb3JsZGAgY29tcG9zaXRlIG9iamVjdCB0aGF0IHdpbGwgY29udGFpbiBhbGwgc2ltdWxhdGVkIGJvZGllcyBhbmQgY29uc3RyYWludHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjbG9jYWxXb3JsZFxyXG4gICAgICAgICAqIEB0eXBlIHtNYXR0ZXJKUy5Xb3JsZH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvY2FsV29ybGQgPSB0aGlzLmVuZ2luZS53b3JsZDtcclxuXHJcbiAgICAgICAgdmFyIGdyYXZpdHkgPSBHZXRWYWx1ZShjb25maWcsICdncmF2aXR5JywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChncmF2aXR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRHcmF2aXR5KGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnNjYWxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSA0IHdhbGwgYm9kaWVzIHRoYXQgYm91bmQgdGhlIHBoeXNpY3Mgd29ybGQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjd2FsbHNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2FsbHMgPSB7IGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsLCB0b3A6IG51bGwsIGJvdHRvbTogbnVsbCB9O1xyXG5cclxuICAgICAgICBpZiAoR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3NldEJvdW5kcycsIGZhbHNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBib3VuZHNDb25maWcgPSBjb25maWdbJ3NldEJvdW5kcyddO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBib3VuZHNDb25maWcgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3gnLCAwKTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3knLCAwKTtcclxuICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd3aWR0aCcsIHNjZW5lLnN5cy5zY2FsZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ2hlaWdodCcsIHNjZW5lLnN5cy5zY2FsZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRoaWNrbmVzcyA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd0aGlja25lc3MnLCA2NCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICdsZWZ0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSBHZXRGYXN0VmFsdWUoYm91bmRzQ29uZmlnLCAncmlnaHQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBHZXRGYXN0VmFsdWUoYm91bmRzQ29uZmlnLCAndG9wJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm90dG9tID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ2JvdHRvbScsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Qm91bmRzKHgsIHksIHdpZHRoLCBoZWlnaHQsIHRoaWNrbmVzcywgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgdG9nZ2xlcyBpZiB0aGUgd29ybGQgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBHZXRWYWx1ZShjb25maWcsICdlbmFibGVkJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb3JyZWN0aW9uIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIE51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgdGltZSBjb3JyZWN0aW9uIGZhY3RvciB0byBhcHBseSB0byB0aGUgdXBkYXRlLlxyXG4gICAgICAgICAqIFRoaXMgY2FuIGhlbHAgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIHNpbXVsYXRpb24gaW4gY2FzZXMgd2hlcmUgZGVsdGEgaXMgY2hhbmdpbmcgYmV0d2VlbiB1cGRhdGVzLlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiBjb3JyZWN0aW9uIGlzIGRlZmluZWQgYXMgZGVsdGEgLyBsYXN0RGVsdGEsIGkuZS4gdGhlIHBlcmNlbnRhZ2UgY2hhbmdlIG9mIGRlbHRhIG92ZXIgdGhlIGxhc3Qgc3RlcC5cclxuICAgICAgICAgKiBUaGVyZWZvcmUgdGhlIHZhbHVlIGlzIGFsd2F5cyAxIChubyBjb3JyZWN0aW9uKSB3aGVuIGRlbHRhIGNvbnN0YW50IChvciB3aGVuIG5vIGNvcnJlY3Rpb24gaXMgZGVzaXJlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQpLlxyXG4gICAgICAgICAqIFNlZSB0aGUgcGFwZXIgb24gVGltZSBDb3JyZWN0ZWQgVmVybGV0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2NvcnJlY3Rpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvcnJlY3Rpb24gPSBHZXRWYWx1ZShjb25maWcsICdjb3JyZWN0aW9uJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGNvcmUgZ2FtZSBsb29wIHN0ZXBzLCB3aGljaCBpcyBib3VuZCB0byB0aGVcclxuICAgICAgICAgKiBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBmcmVxdWVuY3kgdW5sZXNzIG90aGVyd2lzZSBtb2RpZmllZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHR3byB2YWx1ZXM6IGB0aW1lYCBhbmQgYGRlbHRhYCwgYm90aCBvZiB3aGljaCBjb21lIGZyb20gdGhlIGdhbWUgc3RlcCB2YWx1ZXMuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSXQgbXVzdCByZXR1cm4gYSBudW1iZXIuIFRoaXMgbnVtYmVyIGlzIHVzZWQgYXMgdGhlIGRlbHRhIHZhbHVlIHBhc3NlZCB0byBNYXR0ZXIuRW5naW5lLnVwZGF0ZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gd2l0aCB5b3VyIG93biB0byBkZWZpbmUgeW91ciBvd24gdGltZXN0ZXAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBFbmdpbmUgbXVsdGlwbGUgdGltZXMgaW4gYSBzaW5nbGUgZ2FtZSBzdGVwIHRoZW4gY2FsbFxyXG4gICAgICAgICAqIGBXb3JsZC51cGRhdGVgIGFzIG1hbnkgdGltZXMgYXMgcmVxdWlyZWQuIEVhY2ggY2FsbCB3aWxsIHRyaWdnZXIgdGhlIGBnZXREZWx0YWAgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGVuIHRoZSBFbmdpbmUgdXBkYXRlcyB0aGVuIHNlZSB0aGUgcHJvcGVydHkgYGF1dG9VcGRhdGVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBhbHNvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhhdCBFbmdpbmUudXBkYXRlIHBlcmZvcm1zLlxyXG4gICAgICAgICAqIFVzZSB0aGUgU2NlbmUgTWF0dGVyIFBoeXNpY3MgY29uZmlnIG9iamVjdCB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogcG9zaXRpb25JdGVyYXRpb25zIChkZWZhdWx0cyB0byA2KVxyXG4gICAgICAgICAqIHZlbG9jaXR5SXRlcmF0aW9ucyAoZGVmYXVsdHMgdG8gNClcclxuICAgICAgICAgKiBjb25zdHJhaW50SXRlcmF0aW9ucyAoZGVmYXVsdHMgdG8gMilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEFkanVzdGluZyB0aGVzZSB2YWx1ZXMgY2FuIGhlbHAgcGVyZm9ybWFuY2UgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBkZXBlbmRpbmcgb24gdGhlIHBoeXNpY3MgcmVxdWlyZW1lbnRzXHJcbiAgICAgICAgICogb2YgeW91ciBnYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2dldERlbHRhXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2V0RGVsdGEgPSBHZXRWYWx1ZShjb25maWcsICdnZXREZWx0YScsIHRoaXMudXBkYXRlNjBIeik7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEF1dG9tYXRpY2FsbHkgY2FsbCBFbmdpbmUudXBkYXRlIGV2ZXJ5IHRpbWUgdGhlIGdhbWUgc3RlcHMuXHJcbiAgICAgICAgICogSWYgeW91IGRpc2FibGUgdGhpcyB0aGVuIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYFdvcmxkLnN0ZXBgIGRpcmVjdGx5IGZyb20geW91ciBnYW1lLlxyXG4gICAgICAgICAqIElmIHlvdSBjYWxsIGBzZXQ2MEh6YCBvciBgc2V0MzBIemAgdGhlbiBgYXV0b1VwZGF0ZWAgaXMgcmVzZXQgdG8gYHRydWVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2F1dG9VcGRhdGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b1VwZGF0ZScsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgdGhhdCBjb250cm9scyBpZiB0aGUgZGVidWcgZ3JhcGhpY3Mgd2lsbCBiZSBkcmF3biB0byBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjZHJhd0RlYnVnXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRyYXdEZWJ1ZyA9IEdldFZhbHVlKGNvbmZpZywgJ2RlYnVnJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgR3JhcGhpY3Mgb2JqZWN0IHRoZSBkZWJ1ZyBib2RpZXMgYXJlIGRyYXduIHRvLCBpZiBlbmFibGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2RlYnVnR3JhcGhpY1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWJ1Z0dyYXBoaWM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2RlZmF1bHRzXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dCb2R5OiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdTaG93Qm9keScsIHRydWUpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dTdGF0aWNCb2R5OiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdTaG93U3RhdGljQm9keScsIHRydWUpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dWZWxvY2l0eTogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnU2hvd1ZlbG9jaXR5JywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGJvZHlEZWJ1Z0NvbG9yOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdCb2R5Q29sb3InLCAweGZmMDBmZiksXHJcbiAgICAgICAgICAgIGJvZHlEZWJ1Z0ZpbGxDb2xvcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnQm9keUZpbGxDb2xvcicsIDB4ZTNhN2UzKSxcclxuICAgICAgICAgICAgc3RhdGljQm9keURlYnVnQ29sb3I6IEdldEZhc3RWYWx1ZShjb25maWcsICdkZWJ1Z1N0YXRpY0JvZHlDb2xvcicsIDB4MDAwMGZmKSxcclxuICAgICAgICAgICAgdmVsb2NpdHlEZWJ1Z0NvbG9yOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdWZWxvY2l0eUNvbG9yJywgMHgwMGZmMDApLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dKb2ludDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnU2hvd0pvaW50JywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGpvaW50RGVidWdDb2xvcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnSm9pbnRDb2xvcicsIDB4MDAwMDAwKSxcclxuICAgICAgICAgICAgZGVidWdXaXJlZnJhbWVzOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVidWdXaXJlZnJhbWVzJywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRlYnVnU2hvd0ludGVybmFsRWRnZXM6IEdldEZhc3RWYWx1ZShjb25maWcsICdkZWJ1Z1Nob3dJbnRlcm5hbEVkZ2VzJywgZmFsc2UpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dDb252ZXhIdWxsczogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnU2hvd0NvbnZleEh1bGxzJywgZmFsc2UpLFxyXG4gICAgICAgICAgICBkZWJ1Z0NvbnZleEh1bGxDb2xvcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnQ29udmV4SHVsbENvbG9yJywgMHhhYWFhYWEpLFxyXG4gICAgICAgICAgICBkZWJ1Z1Nob3dTbGVlcGluZzogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlYnVnU2hvd1NsZWVwaW5nJywgZmFsc2UpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJhd0RlYnVnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVEZWJ1Z0dyYXBoaWMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RXZlbnRzUHJveHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjc2V0RXZlbnRzUHJveHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzZXRFdmVudHNQcm94eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmVuZ2luZTtcclxuXHJcbiAgICAgICAgTWF0dGVyRXZlbnRzLm9uKGVuZ2luZSwgJ2JlZm9yZVVwZGF0ZScsIGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoRXZlbnRzLkJFRk9SRV9VUERBVEUsIGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTWF0dGVyRXZlbnRzLm9uKGVuZ2luZSwgJ2FmdGVyVXBkYXRlJywgZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdChFdmVudHMuQUZURVJfVVBEQVRFLCBldmVudCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIE1hdHRlckV2ZW50cy5vbihlbmdpbmUsICdjb2xsaXNpb25TdGFydCcsIGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYWlycyA9IGV2ZW50LnBhaXJzO1xyXG4gICAgICAgICAgICB2YXIgYm9keUE7XHJcbiAgICAgICAgICAgIHZhciBib2R5QjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYWlycy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5QSA9IHBhaXJzWzBdLmJvZHlBO1xyXG4gICAgICAgICAgICAgICAgYm9keUIgPSBwYWlyc1swXS5ib2R5QjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdChFdmVudHMuQ09MTElTSU9OX1NUQVJULCBldmVudCwgYm9keUEsIGJvZHlCKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTWF0dGVyRXZlbnRzLm9uKGVuZ2luZSwgJ2NvbGxpc2lvbkFjdGl2ZScsIGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYWlycyA9IGV2ZW50LnBhaXJzO1xyXG4gICAgICAgICAgICB2YXIgYm9keUE7XHJcbiAgICAgICAgICAgIHZhciBib2R5QjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYWlycy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2R5QSA9IHBhaXJzWzBdLmJvZHlBO1xyXG4gICAgICAgICAgICAgICAgYm9keUIgPSBwYWlyc1swXS5ib2R5QjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdChFdmVudHMuQ09MTElTSU9OX0FDVElWRSwgZXZlbnQsIGJvZHlBLCBib2R5Qik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIE1hdHRlckV2ZW50cy5vbihlbmdpbmUsICdjb2xsaXNpb25FbmQnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcGFpcnMgPSBldmVudC5wYWlycztcclxuICAgICAgICAgICAgdmFyIGJvZHlBO1xyXG4gICAgICAgICAgICB2YXIgYm9keUI7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFpcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYm9keUEgPSBwYWlyc1swXS5ib2R5QTtcclxuICAgICAgICAgICAgICAgIGJvZHlCID0gcGFpcnNbMF0uYm9keUI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoRXZlbnRzLkNPTExJU0lPTl9FTkQsIGV2ZW50LCBib2R5QSwgYm9keUIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvdW5kcyBvZiB0aGUgUGh5c2ljcyB3b3JsZCB0byBtYXRjaCB0aGUgZ2l2ZW4gd29ybGQgcGl4ZWwgZGltZW5zaW9ucy5cclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzZXQgd2hpY2ggJ3dhbGxzJyB0byBjcmVhdGU6IGxlZnQsIHJpZ2h0LCB0b3Agb3IgYm90dG9tLlxyXG4gICAgICogSWYgbm9uZSBvZiB0aGUgd2FsbHMgYXJlIGdpdmVuIGl0IHdpbGwgZGVmYXVsdCB0byB1c2UgdGhlIHdhbGxzIHNldHRpbmdzIGl0IGhhZCBwcmV2aW91c2x5LlxyXG4gICAgICogSS5lLiBpZiB5b3UgcHJldmlvdXNseSB0b2xkIGl0IHRvIG5vdCBoYXZlIHRoZSBsZWZ0IG9yIHJpZ2h0IHdhbGxzLCBhbmQgeW91IHRoZW4gYWRqdXN0IHRoZSB3b3JsZCBzaXplXHJcbiAgICAgKiB0aGUgbmV3bHkgY3JlYXRlZCBib3VuZHMgd2lsbCBhbHNvIG5vdCBoYXZlIHRoZSBsZWZ0IGFuZCByaWdodCB3YWxscy5cclxuICAgICAqIEV4cGxpY2l0bHkgc3RhdGUgdGhlbSBpbiB0aGUgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3NldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RoaWNrbmVzcz0xMjhdIC0gVGhlIHRoaWNrbmVzcyBvZiBlYWNoIHdhbGwsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9dHJ1ZV0gLSBJZiB0cnVlIHdpbGwgY3JlYXRlIHRoZSBsZWZ0IGJvdW5kcyB3YWxsLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmlnaHQ9dHJ1ZV0gLSBJZiB0cnVlIHdpbGwgY3JlYXRlIHRoZSByaWdodCBib3VuZHMgd2FsbC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RvcD10cnVlXSAtIElmIHRydWUgd2lsbCBjcmVhdGUgdGhlIHRvcCBib3VuZHMgd2FsbC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JvdHRvbT10cnVlXSAtIElmIHRydWUgd2lsbCBjcmVhdGUgdGhlIGJvdHRvbSBib3VuZHMgd2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoaXMgTWF0dGVyIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGhpY2tuZXNzLCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLmhlaWdodDsgfVxyXG4gICAgICAgIGlmICh0aGlja25lc3MgPT09IHVuZGVmaW5lZCkgeyB0aGlja25lc3MgPSAxMjg7IH1cclxuICAgICAgICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkKSB7IGxlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHJpZ2h0ID09PSB1bmRlZmluZWQpIHsgcmlnaHQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHRvcCA9PT0gdW5kZWZpbmVkKSB7IHRvcCA9IHRydWU7IH1cclxuICAgICAgICBpZiAoYm90dG9tID09PSB1bmRlZmluZWQpIHsgYm90dG9tID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGwobGVmdCwgJ2xlZnQnLCB4IC0gdGhpY2tuZXNzLCB5IC0gdGhpY2tuZXNzLCB0aGlja25lc3MsIGhlaWdodCArICh0aGlja25lc3MgKiAyKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWxsKHJpZ2h0LCAncmlnaHQnLCB4ICsgd2lkdGgsIHkgLSB0aGlja25lc3MsIHRoaWNrbmVzcywgaGVpZ2h0ICsgKHRoaWNrbmVzcyAqIDIpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGwodG9wLCAndG9wJywgeCwgeSAtIHRoaWNrbmVzcywgd2lkdGgsIHRoaWNrbmVzcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWxsKGJvdHRvbSwgJ2JvdHRvbScsIHgsIHkgKyBoZWlnaHQsIHdpZHRoLCB0aGlja25lc3MpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLy8gIHBvc2l0aW9uID0gJ2xlZnQnLCAncmlnaHQnLCAndG9wJyBvciAnYm90dG9tJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjdXBkYXRlV2FsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhZGQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb24gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlV2FsbDogZnVuY3Rpb24gKGFkZCwgcG9zaXRpb24sIHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdhbGwgPSB0aGlzLndhbGxzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICAgICAgaWYgKGFkZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh3YWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBNYXR0ZXJXb3JsZC5yZW1vdmUodGhpcy5sb2NhbFdvcmxkLCB3YWxsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIGFkanVzdCBjZW50ZXJcclxuICAgICAgICAgICAgeCArPSAod2lkdGggLyAyKTtcclxuICAgICAgICAgICAgeSArPSAoaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLndhbGxzW3Bvc2l0aW9uXSA9IHRoaXMuY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHsgaXNTdGF0aWM6IHRydWUsIGZyaWN0aW9uOiAwLCBmcmljdGlvblN0YXRpYzogMCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHdhbGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIE1hdHRlcldvcmxkLnJlbW92ZSh0aGlzLmxvY2FsV29ybGQsIHdhbGwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLndhbGxzW3Bvc2l0aW9uXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNjcmVhdGVEZWJ1Z0dyYXBoaWNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVEZWJ1Z0dyYXBoaWM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdyYXBoaWMgPSB0aGlzLnNjZW5lLnN5cy5hZGQuZ3JhcGhpY3MoeyB4OiAwLCB5OiAwIH0pO1xyXG5cclxuICAgICAgICBncmFwaGljLnNldERlcHRoKE51bWJlci5NQVhfVkFMVUUpO1xyXG5cclxuICAgICAgICB0aGlzLmRlYnVnR3JhcGhpYyA9IGdyYXBoaWM7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0RlYnVnID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGdyYXBoaWM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd29ybGQncyBncmF2aXR5IGFuZCBncmF2aXR5IHNjYWxlIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjZGlzYWJsZUdyYXZpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gVGhpcyBNYXR0ZXIgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlR3Jhdml0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvY2FsV29ybGQuZ3Jhdml0eS54ID0gMDtcclxuICAgICAgICB0aGlzLmxvY2FsV29ybGQuZ3Jhdml0eS55ID0gMDtcclxuICAgICAgICB0aGlzLmxvY2FsV29ybGQuZ3Jhdml0eS5zY2FsZSA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdvcmxkJ3MgZ3Jhdml0eVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3NldEdyYXZpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB3b3JsZCBncmF2aXR5IHggY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTFdIC0gVGhlIHdvcmxkIGdyYXZpdHkgeSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NjYWxlXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoaXMgTWF0dGVyIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0R3Jhdml0eTogZnVuY3Rpb24gKHgsIHksIHNjYWxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMubG9jYWxXb3JsZC5ncmF2aXR5LnggPSB4O1xyXG4gICAgICAgIHRoaXMubG9jYWxXb3JsZC5ncmF2aXR5LnkgPSB5O1xyXG5cclxuICAgICAgICBpZiAoc2NhbGUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxXb3JsZC5ncmF2aXR5LnNjYWxlID0gc2NhbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgcmVjdGFuZ2xlIE1hdHRlciBib2R5IGFuZCBhZGRzIGl0IHRvIHRoZSB3b3JsZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNjcmVhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGJvZHkgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGJvZHkgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIE1hdHRlciBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtNYXR0ZXJKUy5Cb2R5fSBUaGUgTWF0dGVyLmpzIGJvZHkgdGhhdCB3YXMgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9keSA9IEJvZGllcy5yZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIE1hdHRlcldvcmxkLmFkZCh0aGlzLmxvY2FsV29ybGQsIGJvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIG9iamVjdCB0byB0aGUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhvYmplY3R8b2JqZWN0W10pfSBvYmplY3QgLSBDYW4gYmUgc2luZ2xlIG9yIGFuIGFycmF5LCBhbmQgY2FuIGJlIGEgYm9keSwgY29tcG9zaXRlIG9yIGNvbnN0cmFpbnRcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoaXMgTWF0dGVyIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAob2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIE1hdHRlcldvcmxkLmFkZCh0aGlzLmxvY2FsV29ybGQsIG9iamVjdCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRlZXAgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkfSBUaGlzIE1hdHRlciBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKG9iamVjdCwgZGVlcClcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9keSA9IChvYmplY3QuYm9keSkgPyBvYmplY3QuYm9keSA6IG9iamVjdDtcclxuXHJcbiAgICAgICAgQ29tcG9zaXRlLnJlbW92ZSh0aGlzLmxvY2FsV29ybGQsIGJvZHksIGRlZXApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjcmVtb3ZlQ29uc3RyYWludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXJKUy5Db25zdHJhaW50fSBjb25zdHJhaW50IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZWVwIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gVGhpcyBNYXR0ZXIgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVDb25zdHJhaW50OiBmdW5jdGlvbiAoY29uc3RyYWludCwgZGVlcClcclxuICAgIHtcclxuICAgICAgICBDb21wb3NpdGUucmVtb3ZlKHRoaXMubG9jYWxXb3JsZCwgY29uc3RyYWludCwgZGVlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgTWF0dGVyVGlsZUJvZHkgaW5zdGFuY2VzIGZvciBhbGwgdGhlIGNvbGxpZGluZyB0aWxlcyB3aXRoaW4gdGhlIGdpdmVuIHRpbGVtYXAgbGF5ZXIuIFNldFxyXG4gICAgICogdGhlIGFwcHJvcHJpYXRlIHRpbGVzIGluIHlvdXIgbGF5ZXIgdG8gY29sbGlkZSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCFcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNjb252ZXJ0VGlsZW1hcExheWVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gdGlsZW1hcExheWVyIC1cclxuICAgICAqIEFuIGFycmF5IG9mIHRpbGVzLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBNYXR0ZXJUaWxlQm9keSBjb25zdHJ1Y3Rvci4ge0BlZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuVGlsZUJvZHl9XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkfSBUaGlzIE1hdHRlciBXb3JsZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNvbnZlcnRUaWxlbWFwTGF5ZXI6IGZ1bmN0aW9uICh0aWxlbWFwTGF5ZXIsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxheWVyRGF0YSA9IHRpbGVtYXBMYXllci5sYXllcjtcclxuICAgICAgICB2YXIgdGlsZXMgPSB0aWxlbWFwTGF5ZXIuZ2V0VGlsZXNXaXRoaW4oMCwgMCwgbGF5ZXJEYXRhLndpZHRoLCBsYXllckRhdGEuaGVpZ2h0LCB7IGlzQ29sbGlkaW5nOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnZlcnRUaWxlcyh0aWxlcywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgTWF0dGVyVGlsZUJvZHkgaW5zdGFuY2VzIGZvciB0aGUgZ2l2ZW4gdGlsZXMuIFRoaXMgYWRkcyBib2RpZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZVxyXG4gICAgICogdGlsZXMgYXJlIHNldCB0byBjb2xsaWRlIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNjb252ZXJ0VGlsZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gdGlsZXMgLSBBbiBhcnJheSBvZiB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIHRvIGJlIHBhc3NlZCB0byB0aGUgTWF0dGVyVGlsZUJvZHkgY29uc3RydWN0b3IuIHtAc2VlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5UaWxlQm9keX1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoaXMgTWF0dGVyIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY29udmVydFRpbGVzOiBmdW5jdGlvbiAodGlsZXMsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5ldyBNYXR0ZXJUaWxlQm9keSh0aGlzLCB0aWxlc1tpXSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjbmV4dEdyb3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTm9uQ29sbGlkaW5nIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBuZXh0R3JvdXA6IGZ1bmN0aW9uIChpc05vbkNvbGxpZGluZylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0dGVyQm9keS5uZXh0R3JvdXAoaXNOb25Db2xsaWRpbmcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNuZXh0Q2F0ZWdvcnlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgbmV4dCB1bmlxdWUgY2F0ZWdvcnkgYml0ZmllbGQuXHJcbiAgICAgKi9cclxuICAgIG5leHRDYXRlZ29yeTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0dGVyQm9keS5uZXh0Q2F0ZWdvcnkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjcGF1c2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzI1BBVVNFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGR9IFRoaXMgTWF0dGVyIFdvcmxkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUEFVU0UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjcmVzdW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNSRVNVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZH0gVGhpcyBNYXR0ZXIgV29ybGQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5SRVNVTUUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmF1dG9VcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBFbmdpbmUudXBkYXRlKHRoaXMuZW5naW5lLCB0aGlzLmdldERlbHRhKHRpbWUsIGRlbHRhKSwgdGhpcy5jb3JyZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgYWR2YW5jZXMgdGhlIHBoeXNpY3Mgc2ltdWxhdGlvbiBieSBvbmUgaXRlcmF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgYGRlbHRhYCBhbmQgYGNvcnJlY3Rpb25gIHZhbHVlcyB0byBiZSB1c2VkIGJ5IEVuZ2luZS51cGRhdGUuXHJcbiAgICAgKiBJZiB1bmRlZmluZWQgdGhleSB1c2UgdGhlIE1hdHRlciBkZWZhdWx0cyBvZiA2MEh6IGFuZCBubyBjb3JyZWN0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIGBzdGVwYCBkaXJlY3RseSBieXBhc3NlcyBhbnkgY2hlY2tzIG9mIGBlbmFibGVkYCBvciBgYXV0b1VwZGF0ZWAuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGFsc28gaWdub3JlcyBhbnkgY3VzdG9tIGBnZXREZWx0YWAgZnVuY3Rpb25zLCBhcyB5b3Ugc2hvdWxkIGJlIHBhc3NpbmcgdGhlIGRlbHRhXHJcbiAgICAgKiB2YWx1ZSBpbiB0byB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhZGp1c3QgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgRW5naW5lLnVwZGF0ZSBwZXJmb3JtcyBpbnRlcm5hbGx5LlxyXG4gICAgICogVXNlIHRoZSBTY2VuZSBNYXR0ZXIgUGh5c2ljcyBjb25maWcgb2JqZWN0IHRvIHNldCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKlxyXG4gICAgICogcG9zaXRpb25JdGVyYXRpb25zIChkZWZhdWx0cyB0byA2KVxyXG4gICAgICogdmVsb2NpdHlJdGVyYXRpb25zIChkZWZhdWx0cyB0byA0KVxyXG4gICAgICogY29uc3RyYWludEl0ZXJhdGlvbnMgKGRlZmF1bHRzIHRvIDIpXHJcbiAgICAgKlxyXG4gICAgICogQWRqdXN0aW5nIHRoZXNlIHZhbHVlcyBjYW4gaGVscCBwZXJmb3JtYW5jZSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgcGh5c2ljcyByZXF1aXJlbWVudHNcclxuICAgICAqIG9mIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNzdGVwXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbHRhPTE2LjY2Nl0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvcnJlY3Rpb249MV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHN0ZXA6IGZ1bmN0aW9uIChkZWx0YSwgY29ycmVjdGlvbilcclxuICAgIHtcclxuICAgICAgICBFbmdpbmUudXBkYXRlKHRoaXMuZW5naW5lLCBkZWx0YSwgY29ycmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgTWF0dGVyIEVuZ2luZS51cGRhdGUgYXQgYSBmaXhlZCB0aW1lc3RlcCBvZiA2MEh6LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3VwZGF0ZTYwSHpcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRlbHRhIHZhbHVlIHRvIGJlIHBhc3NlZCB0byBFbmdpbmUudXBkYXRlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU2MEh6OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxMDAwIC8gNjA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgTWF0dGVyIEVuZ2luZS51cGRhdGUgYXQgYSBmaXhlZCB0aW1lc3RlcCBvZiAzMEh6LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3VwZGF0ZTMwSHpcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRlbHRhIHZhbHVlIHRvIGJlIHBhc3NlZCB0byBFbmdpbmUudXBkYXRlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGUzMEh6OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAxMDAwIC8gMzA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgcmVuZGVyaW5nIG9mIGJvZGllcyBhbmQgZGVidWcgaW5mb3JtYXRpb24gdG8gdGhlIGRlYnVnIEdyYXBoaWNzIG9iamVjdCwgaWYgZW5hYmxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNwb3N0VXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBvc3RVcGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyYXdEZWJ1ZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVidWdHcmFwaGljLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHZhciBib2RpZXMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKHRoaXMubG9jYWxXb3JsZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmRlYnVnV2lyZWZyYW1lcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmRlYnVnU2hvd0NvbnZleEh1bGxzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvbnZleEh1bGxzKGJvZGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyV2lyZWZyYW1lcyhib2RpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckJvZGllcyhib2RpZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdHMuZGVidWdTaG93Sm9pbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckpvaW50cygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXJzIHRoZSBkZWJ1ZyBjb252ZXggaHVsbHMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgYm9kaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3JlbmRlckNvbnZleEh1bGxzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTQuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBib2RpZXMgLSBBbiBhcnJheSBvZiBib2RpZXMgZnJvbSB0aGUgbG9jYWxXb3JsZC5cclxuICAgICAqL1xyXG4gICAgcmVuZGVyQ29udmV4SHVsbHM6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdyYXBoaWNzID0gdGhpcy5kZWJ1Z0dyYXBoaWM7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzLmxpbmVTdHlsZSgxLCB0aGlzLmRlZmF1bHRzLmRlYnVnQ29udmV4SHVsbENvbG9yKTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3MuYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWJvZHkucmVuZGVyLnZpc2libGUgfHwgYm9keS5wYXJ0cy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBncmFwaGljcy5tb3ZlVG8oYm9keS52ZXJ0aWNlc1swXS54LCBib2R5LnZlcnRpY2VzWzBdLnkpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBib2R5LnZlcnRpY2VzLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5saW5lVG8oYm9keS52ZXJ0aWNlc1tqXS54LCBib2R5LnZlcnRpY2VzW2pdLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBncmFwaGljcy5saW5lVG8oYm9keS52ZXJ0aWNlc1swXS54LCBib2R5LnZlcnRpY2VzWzBdLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlcnMgdGhlIHdpcmVmcmFtZXMgb2YgdGhlIGdpdmVuIGFycmF5IG9mIGJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNyZW5kZXJXaXJlZnJhbWVzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTQuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBib2RpZXMgLSBBbiBhcnJheSBvZiBib2RpZXMgZnJvbSB0aGUgbG9jYWxXb3JsZC5cclxuICAgICAqL1xyXG4gICAgcmVuZGVyV2lyZWZyYW1lczogZnVuY3Rpb24gKGJvZGllcylcclxuICAgIHtcclxuICAgICAgICB2YXIgZ3JhcGhpY3MgPSB0aGlzLmRlYnVnR3JhcGhpYztcclxuICAgICAgICB2YXIgc2hvd0ludGVybmFsRWRnZXMgPSB0aGlzLmRlZmF1bHRzLmRlYnVnU2hvd0ludGVybmFsRWRnZXM7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzLmxpbmVTdHlsZSgxLCB0aGlzLmRlZmF1bHRzLmJvZHlEZWJ1Z0NvbG9yKTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3MuYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWJvZHkucmVuZGVyLnZpc2libGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gKGJvZHkucGFydHMubGVuZ3RoID4gMSkgPyAxIDogMDsgayA8IGJvZHkucGFydHMubGVuZ3RoOyBrKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keS5wYXJ0c1trXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdmVydExlbmd0aCA9IHBhcnQudmVydGljZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIGdyYXBoaWNzLm1vdmVUbyhwYXJ0LnZlcnRpY2VzWzBdLngsIHBhcnQudmVydGljZXNbMF0ueSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCB2ZXJ0TGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJ0LnZlcnRpY2VzW2ogLSAxXS5pc0ludGVybmFsIHx8IHNob3dJbnRlcm5hbEVkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MubGluZVRvKHBhcnQudmVydGljZXNbal0ueCwgcGFydC52ZXJ0aWNlc1tqXS55KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHBhcnQudmVydGljZXNbal0ueCwgcGFydC52ZXJ0aWNlc1tqXS55KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LnZlcnRpY2VzW2pdLmlzSW50ZXJuYWwgJiYgIXNob3dJbnRlcm5hbEVkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHBhcnQudmVydGljZXNbKGogKyAxKSAlIHZlcnRMZW5ndGhdLngsIHBhcnQudmVydGljZXNbKGogKyAxKSAlIHZlcnRMZW5ndGhdLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MubGluZVRvKHBhcnQudmVydGljZXNbMF0ueCwgcGFydC52ZXJ0aWNlc1swXS55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlcnMgdGhlIGFycmF5IG9mIGJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNyZW5kZXJCb2RpZXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGJvZGllcyAtIEFuIGFycmF5IG9mIGJvZGllcyBmcm9tIHRoZSBsb2NhbFdvcmxkLlxyXG4gICAgICovXHJcbiAgICByZW5kZXJCb2RpZXM6IGZ1bmN0aW9uIChib2RpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdyYXBoaWNzID0gdGhpcy5kZWJ1Z0dyYXBoaWM7XHJcblxyXG4gICAgICAgIHZhciBzaG93SW50ZXJuYWxFZGdlcyA9IHRoaXMuZGVmYXVsdHMuZGVidWdTaG93SW50ZXJuYWxFZGdlcyB8fCAhdGhpcy5kZWZhdWx0cy5kZWJ1Z1dpcmVmcmFtZXM7XHJcbiAgICAgICAgdmFyIHNob3dTbGVlcGluZyA9IHRoaXMuZGVmYXVsdHMuZGVidWdTaG93U2xlZXBpbmc7XHJcbiAgICAgICAgdmFyIHdpcmVmcmFtZXMgPSB0aGlzLmRlZmF1bHRzLmRlYnVnV2lyZWZyYW1lcztcclxuXHJcbiAgICAgICAgdmFyIGJvZHk7XHJcbiAgICAgICAgdmFyIHBhcnQ7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGs7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBib2R5ID0gYm9kaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFib2R5LnJlbmRlci52aXNpYmxlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIEhhbmRsZSBjb21wb3VuZCBwYXJ0c1xyXG4gICAgICAgICAgICBmb3IgKGsgPSBib2R5LnBhcnRzLmxlbmd0aCA+IDEgPyAxIDogMDsgayA8IGJvZHkucGFydHMubGVuZ3RoOyBrKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhcnQgPSBib2R5LnBhcnRzW2tdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGFydC5yZW5kZXIudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1NsZWVwaW5nICYmIGJvZHkuaXNTbGVlcGluZylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5saW5lU3R5bGUoMSwgdGhpcy5kZWZhdWx0cy5ib2R5RGVidWdDb2xvciwgMC41ICogcGFydC5yZW5kZXIub3BhY2l0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbFN0eWxlKHRoaXMuZGVmYXVsdHMuYm9keURlYnVnQ29sb3IsIDAuNSAqIHBhcnQucmVuZGVyLm9wYWNpdHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmxpbmVTdHlsZSgxLCB0aGlzLmRlZmF1bHRzLmJvZHlEZWJ1Z0NvbG9yLCBwYXJ0LnJlbmRlci5vcGFjaXR5KTtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsU3R5bGUodGhpcy5kZWZhdWx0cy5ib2R5RGVidWdDb2xvciwgcGFydC5yZW5kZXIub3BhY2l0eSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFBhcnQgcG9seWdvblxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnQuY2lyY2xlUmFkaXVzKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmFyYyhwYXJ0LnBvc2l0aW9uLngsIHBhcnQucG9zaXRpb24ueSwgcGFydC5jaXJjbGVSYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5tb3ZlVG8ocGFydC52ZXJ0aWNlc1swXS54LCBwYXJ0LnZlcnRpY2VzWzBdLnkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVydExlbmd0aCA9IHBhcnQudmVydGljZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHZlcnRMZW5ndGg7IGorKylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFydC52ZXJ0aWNlc1tqIC0gMV0uaXNJbnRlcm5hbCB8fCBzaG93SW50ZXJuYWxFZGdlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MubGluZVRvKHBhcnQudmVydGljZXNbal0ueCwgcGFydC52ZXJ0aWNlc1tqXS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLm1vdmVUbyhwYXJ0LnZlcnRpY2VzW2pdLngsIHBhcnQudmVydGljZXNbal0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LnZlcnRpY2VzW2pdLmlzSW50ZXJuYWwgJiYgIXNob3dJbnRlcm5hbEVkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5tb3ZlVG8ocGFydC52ZXJ0aWNlc1soaiArIDEpICUgcGFydC52ZXJ0aWNlcy5sZW5ndGhdLngsIHBhcnQudmVydGljZXNbKGogKyAxKSAlIHBhcnQudmVydGljZXMubGVuZ3RoXS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5saW5lVG8ocGFydC52ZXJ0aWNlc1swXS54LCBwYXJ0LnZlcnRpY2VzWzBdLnkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5jbG9zZVBhdGgoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXdpcmVmcmFtZXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbFBhdGgoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5zdHJva2VQYXRoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVycyB3b3JsZCBjb25zdHJhaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Xb3JsZCNyZW5kZXJKb2ludHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckpvaW50czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ3JhcGhpY3MgPSB0aGlzLmRlYnVnR3JhcGhpYztcclxuXHJcbiAgICAgICAgZ3JhcGhpY3MubGluZVN0eWxlKDIsIHRoaXMuZGVmYXVsdHMuam9pbnREZWJ1Z0NvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIGNvbnN0cmFpbnRzIFxyXG4gICAgICAgIHZhciBjb25zdHJhaW50cyA9IENvbXBvc2l0ZS5hbGxDb25zdHJhaW50cyh0aGlzLmxvY2FsV29ybGQpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29uc3RyYWludC5yZW5kZXIudmlzaWJsZSB8fCAhY29uc3RyYWludC5wb2ludEEgfHwgIWNvbnN0cmFpbnQucG9pbnRCKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucmVuZGVyLmxpbmVXaWR0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MubGluZVN0eWxlKGNvbnN0cmFpbnQucmVuZGVyLmxpbmVXaWR0aCwgQ29tbW9uLmNvbG9yVG9OdW1iZXIoY29uc3RyYWludC5yZW5kZXIuc3Ryb2tlU3R5bGUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGJvZHlBID0gY29uc3RyYWludC5ib2R5QTtcclxuICAgICAgICAgICAgdmFyIGJvZHlCID0gY29uc3RyYWludC5ib2R5QjtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0O1xyXG4gICAgICAgICAgICB2YXIgZW5kO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHlBKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IFZlY3Rvci5hZGQoYm9keUEucG9zaXRpb24sIGNvbnN0cmFpbnQucG9pbnRBKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gY29uc3RyYWludC5wb2ludEE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnJlbmRlci50eXBlID09PSAncGluJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5hcmMoc3RhcnQueCwgc3RhcnQueSwgMywgMCwgMiAqIE1hdGguUEkpO1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm9keUIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gVmVjdG9yLmFkZChib2R5Qi5wb3NpdGlvbiwgY29uc3RyYWludC5wb2ludEIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IGNvbnN0cmFpbnQucG9pbnRCO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGdyYXBoaWNzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHN0YXJ0LngsIHN0YXJ0LnkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnJlbmRlci50eXBlID09PSAnc3ByaW5nJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBWZWN0b3Iuc3ViKGVuZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWwgPSBWZWN0b3IucGVycChWZWN0b3Iubm9ybWFsaXNlKGRlbHRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvaWxzID0gTWF0aC5jZWlsKENvbW1vbi5jbGFtcChjb25zdHJhaW50Lmxlbmd0aCAvIDUsIDEyLCAyMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgY29pbHM7IGogKz0gMSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IChqICUgMiA9PT0gMCkgPyAxIDogLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5saW5lVG8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC54ICsgZGVsdGEueCAqIChqIC8gY29pbHMpICsgbm9ybWFsLnggKiBvZmZzZXQgKiA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQueSArIGRlbHRhLnkgKiAoaiAvIGNvaWxzKSArIG5vcm1hbC55ICogb2Zmc2V0ICogNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5saW5lVG8oZW5kLngsIGVuZC55KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucmVuZGVyLmxpbmVXaWR0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5yZW5kZXIuYW5jaG9ycylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbFN0eWxlKENvbW1vbi5jb2xvclRvTnVtYmVyKGNvbnN0cmFpbnQucmVuZGVyLnN0cm9rZVN0eWxlKSk7XHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgIGdyYXBoaWNzLmFyYyhzdGFydC54LCBzdGFydC55LCA2LCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5hcmMoZW5kLngsIGVuZC55LCA2LCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgICAgICAgICBncmFwaGljcy5jbG9zZVBhdGgoKTtcclxuICAgICAgICAgICAgICAgIGdyYXBoaWNzLmZpbGxQYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI2Zyb21QYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHBvaW50cyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBmcm9tUGF0aDogZnVuY3Rpb24gKHBhdGgsIHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBpZiAocG9pbnRzID09PSB1bmRlZmluZWQpIHsgcG9pbnRzID0gW107IH1cclxuXHJcbiAgICAgICAgLy8gdmFyIHBhdGhQYXR0ZXJuID0gL0w/XFxzKihbLVxcZC5lXSspW1xccyxdKihbLVxcZC5lXSspKi9pZztcclxuXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXHJcbiAgICAgICAgdmFyIHBhdGhQYXR0ZXJuID0gL0w/XFxzKihbXFwtXFxkXFwuZV0rKVtcXHMsXSooW1xcLVxcZFxcLmVdKykqL2lnO1xyXG5cclxuICAgICAgICBwYXRoLnJlcGxhY2UocGF0aFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCwgeCwgeSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcGFyc2VGbG9hdCh4KSwgeTogcGFyc2VGbG9hdCh5KSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBvaW50cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIGludGVybmFsIGNvbGxpc2lvbiBJRHMgdGhhdCBNYXR0ZXIuSlMgdXNlcyBmb3IgQm9keSBjb2xsaXNpb24gZ3JvdXBzLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBiZWZvcmUgZGVzdHJveWluZyB5b3VyIGdhbWUgaWYgeW91IG5lZWQgdG8gcmVzdGFydCB0aGUgZ2FtZVxyXG4gICAgICogYWdhaW4gb24gdGhlIHNhbWUgcGFnZSwgd2l0aG91dCBmaXJzdCByZWxvYWRpbmcgdGhlIHBhZ2UuIE9yLCBpZiB5b3Ugd2lzaCB0b1xyXG4gICAgICogY29uc2lzdGVudGx5IGRlc3Ryb3kgYSBTY2VuZSB0aGF0IGNvbnRhaW5zIE1hdHRlci5qcyBhbmQgdGhlbiBydW4gaXQgYWdhaW5cclxuICAgICAqIGxhdGVyIGluIHRoZSBzYW1lIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjcmVzZXRDb2xsaXNpb25JRHNcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcmVzZXRDb2xsaXNpb25JRHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5fbmV4dENvbGxpZGluZ0dyb3VwSWQgPSAxO1xyXG4gICAgICAgIEJvZHkuX25leHROb25Db2xsaWRpbmdHcm91cElkID0gLTE7XHJcbiAgICAgICAgQm9keS5fbmV4dENhdGVnb3J5ID0gMHgwMDAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIHJlbW92ZSBhbGwgTWF0dGVyIHBoeXNpY3MgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhciB0aGUgbWF0dGVyIHBoeXNpY3Mgd29ybGQsXHJcbiAgICAgKiBlbmdpbmUgYW5kIGFueSBkZWJ1ZyBncmFwaGljcywgaWYgYW55LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLldvcmxkI3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgTWF0dGVyRXZlbnRzLm9mZih0aGlzLmVuZ2luZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIE1hdHRlcldvcmxkLmNsZWFyKHRoaXMubG9jYWxXb3JsZCwgZmFsc2UpO1xyXG5cclxuICAgICAgICBFbmdpbmUuY2xlYXIodGhpcy5lbmdpbmUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kcmF3RGVidWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlYnVnR3JhcGhpYy5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgcmVtb3ZlIGFsbCBNYXR0ZXIgcGh5c2ljcyBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFyIHRoZSBtYXR0ZXIgcGh5c2ljcyB3b3JsZCxcclxuICAgICAqIGVuZ2luZSBhbmQgYW55IGRlYnVnIGdyYXBoaWNzLCBpZiBhbnkuXHJcbiAgICAgKlxyXG4gICAgICogQWZ0ZXIgZGVzdHJveWluZyB0aGUgd29ybGQgaXQgY2Fubm90IGJlIHJlLXVzZWQgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuV29ybGQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmxkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/World.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Bounce.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Bounce.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A component to set restitution on objects.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Bounce\r\n * @since 3.0.0\r\n */\r\nvar Bounce = {\r\n\r\n    /**\r\n     * Sets the restitution on the physics object.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Bounce#setBounce\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - A Number that defines the restitution (elasticity) of the body. The value is always positive and is in the range (0, 1). A value of 0 means collisions may be perfectly inelastic and no bouncing may occur. A value of 0.8 means the body may bounce back with approximately 80% of its kinetic energy. Note that collision response is based on pairs of bodies, and that restitution values are combined with the following formula: `Math.max(bodyA.restitution, bodyB.restitution)`\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setBounce: function (value)\r\n    {\r\n        this.body.restitution = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Bounce;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0JvdW5jZS5qcz82OTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0JvdW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRvIHNldCByZXN0aXR1dGlvbiBvbiBvYmplY3RzLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkJvdW5jZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBCb3VuY2UgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSByZXN0aXR1dGlvbiBvbiB0aGUgcGh5c2ljcyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Cb3VuY2Ujc2V0Qm91bmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIE51bWJlciB0aGF0IGRlZmluZXMgdGhlIHJlc3RpdHV0aW9uIChlbGFzdGljaXR5KSBvZiB0aGUgYm9keS4gVGhlIHZhbHVlIGlzIGFsd2F5cyBwb3NpdGl2ZSBhbmQgaXMgaW4gdGhlIHJhbmdlICgwLCAxKS4gQSB2YWx1ZSBvZiAwIG1lYW5zIGNvbGxpc2lvbnMgbWF5IGJlIHBlcmZlY3RseSBpbmVsYXN0aWMgYW5kIG5vIGJvdW5jaW5nIG1heSBvY2N1ci4gQSB2YWx1ZSBvZiAwLjggbWVhbnMgdGhlIGJvZHkgbWF5IGJvdW5jZSBiYWNrIHdpdGggYXBwcm94aW1hdGVseSA4MCUgb2YgaXRzIGtpbmV0aWMgZW5lcmd5LiBOb3RlIHRoYXQgY29sbGlzaW9uIHJlc3BvbnNlIGlzIGJhc2VkIG9uIHBhaXJzIG9mIGJvZGllcywgYW5kIHRoYXQgcmVzdGl0dXRpb24gdmFsdWVzIGFyZSBjb21iaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogYE1hdGgubWF4KGJvZHlBLnJlc3RpdHV0aW9uLCBib2R5Qi5yZXN0aXR1dGlvbilgXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdW5jZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5yZXN0aXR1dGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Bounce.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Collision.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Collision.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Contains methods for changing the collision filter of a Matter Body. Should be used as a mixin and not called directly.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Collision\r\n * @since 3.0.0\r\n */\r\nvar Collision = {\r\n\r\n    /**\r\n     * Sets the collision category of this Game Object's Matter Body. This number must be a power of two between 2^0 (= 1) and 2^31. Two bodies with different collision groups (see {@link #setCollisionGroup}) will only collide if their collision categories are included in their collision masks (see {@link #setCollidesWith}).\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Collision#setCollisionCategory\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - Unique category bitfield.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCollisionCategory: function (value)\r\n    {\r\n        this.body.collisionFilter.category = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the collision group of this Game Object's Matter Body. If this is zero or two Matter Bodies have different values, they will collide according to the usual rules (see {@link #setCollisionCategory} and {@link #setCollisionGroup}). If two Matter Bodies have the same positive value, they will always collide; if they have the same negative value, they will never collide.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Collision#setCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - Unique group index.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCollisionGroup: function (value)\r\n    {\r\n        this.body.collisionFilter.group = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the collision mask for this Game Object's Matter Body. Two Matter Bodies with different collision groups will only collide if each one includes the other's category in its mask based on a bitwise AND, i.e. `(categoryA & maskB) !== 0` and `(categoryB & maskA) !== 0` are both true.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Collision#setCollidesWith\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(number|number[])} categories - A unique category bitfield, or an array of them.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCollidesWith: function (categories)\r\n    {\r\n        var flags = 0;\r\n\r\n        if (!Array.isArray(categories))\r\n        {\r\n            flags = categories;\r\n        }\r\n        else\r\n        {\r\n            for (var i = 0; i < categories.length; i++)\r\n            {\r\n                flags |= categories[i];\r\n            }\r\n        }\r\n\r\n        this.body.collisionFilter.mask = flags;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Collision;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0NvbGxpc2lvbi5qcz8wZGFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNMQUFzTCx5QkFBeUIsOEZBQThGLHVCQUF1QjtBQUNwVTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0Esb0xBQW9MLDRCQUE0QixNQUFNLHlCQUF5QiwrRUFBK0U7QUFDOVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVCQUF1QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9Db2xsaXNpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb250YWlucyBtZXRob2RzIGZvciBjaGFuZ2luZyB0aGUgY29sbGlzaW9uIGZpbHRlciBvZiBhIE1hdHRlciBCb2R5LiBTaG91bGQgYmUgdXNlZCBhcyBhIG1peGluIGFuZCBub3QgY2FsbGVkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkNvbGxpc2lvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBDb2xsaXNpb24gPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjb2xsaXNpb24gY2F0ZWdvcnkgb2YgdGhpcyBHYW1lIE9iamVjdCdzIE1hdHRlciBCb2R5LiBUaGlzIG51bWJlciBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGJldHdlZW4gMl4wICg9IDEpIGFuZCAyXjMxLiBUd28gYm9kaWVzIHdpdGggZGlmZmVyZW50IGNvbGxpc2lvbiBncm91cHMgKHNlZSB7QGxpbmsgI3NldENvbGxpc2lvbkdyb3VwfSkgd2lsbCBvbmx5IGNvbGxpZGUgaWYgdGhlaXIgY29sbGlzaW9uIGNhdGVnb3JpZXMgYXJlIGluY2x1ZGVkIGluIHRoZWlyIGNvbGxpc2lvbiBtYXNrcyAoc2VlIHtAbGluayAjc2V0Q29sbGlkZXNXaXRofSkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Db2xsaXNpb24jc2V0Q29sbGlzaW9uQ2F0ZWdvcnlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFVuaXF1ZSBjYXRlZ29yeSBiaXRmaWVsZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlzaW9uQ2F0ZWdvcnk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuY29sbGlzaW9uRmlsdGVyLmNhdGVnb3J5ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbGxpc2lvbiBncm91cCBvZiB0aGlzIEdhbWUgT2JqZWN0J3MgTWF0dGVyIEJvZHkuIElmIHRoaXMgaXMgemVybyBvciB0d28gTWF0dGVyIEJvZGllcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMsIHRoZXkgd2lsbCBjb2xsaWRlIGFjY29yZGluZyB0byB0aGUgdXN1YWwgcnVsZXMgKHNlZSB7QGxpbmsgI3NldENvbGxpc2lvbkNhdGVnb3J5fSBhbmQge0BsaW5rICNzZXRDb2xsaXNpb25Hcm91cH0pLiBJZiB0d28gTWF0dGVyIEJvZGllcyBoYXZlIHRoZSBzYW1lIHBvc2l0aXZlIHZhbHVlLCB0aGV5IHdpbGwgYWx3YXlzIGNvbGxpZGU7IGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBuZWdhdGl2ZSB2YWx1ZSwgdGhleSB3aWxsIG5ldmVyIGNvbGxpZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Db2xsaXNpb24jc2V0Q29sbGlzaW9uR3JvdXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFVuaXF1ZSBncm91cCBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlzaW9uR3JvdXA6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuY29sbGlzaW9uRmlsdGVyLmdyb3VwID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbGxpc2lvbiBtYXNrIGZvciB0aGlzIEdhbWUgT2JqZWN0J3MgTWF0dGVyIEJvZHkuIFR3byBNYXR0ZXIgQm9kaWVzIHdpdGggZGlmZmVyZW50IGNvbGxpc2lvbiBncm91cHMgd2lsbCBvbmx5IGNvbGxpZGUgaWYgZWFjaCBvbmUgaW5jbHVkZXMgdGhlIG90aGVyJ3MgY2F0ZWdvcnkgaW4gaXRzIG1hc2sgYmFzZWQgb24gYSBiaXR3aXNlIEFORCwgaS5lLiBgKGNhdGVnb3J5QSAmIG1hc2tCKSAhPT0gMGAgYW5kIGAoY2F0ZWdvcnlCICYgbWFza0EpICE9PSAwYCBhcmUgYm90aCB0cnVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuQ29sbGlzaW9uI3NldENvbGxpZGVzV2l0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfG51bWJlcltdKX0gY2F0ZWdvcmllcyAtIEEgdW5pcXVlIGNhdGVnb3J5IGJpdGZpZWxkLCBvciBhbiBhcnJheSBvZiB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaWRlc1dpdGg6IGZ1bmN0aW9uIChjYXRlZ29yaWVzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBmbGFncyA9IDA7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjYXRlZ29yaWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZsYWdzID0gY2F0ZWdvcmllcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmbGFncyB8PSBjYXRlZ29yaWVzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvZHkuY29sbGlzaW9uRmlsdGVyLm1hc2sgPSBmbGFncztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb2xsaXNpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Collision.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Force.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Force.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\n\r\n/**\r\n * A component to apply force to Matter.js bodies.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Force\r\n * @since 3.0.0\r\n */\r\nvar Force = {\r\n\r\n    //  force = vec2 / point\r\n\r\n    /**\r\n     * Applies a force to a body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#applyForce\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} force - A Vector that specifies the force to apply.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    applyForce: function (force)\r\n    {\r\n        this._tempVec2.set(this.body.position.x, this.body.position.y);\r\n\r\n        Body.applyForce(this.body, this._tempVec2, force);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Applies a force to a body from a given position.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#applyForceFrom\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Math.Vector2} position - The position in which the force comes from.\r\n     * @param {Phaser.Math.Vector2} force - A Vector that specifies the force to apply.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    applyForceFrom: function (position, force)\r\n    {\r\n        Body.applyForce(this.body, position, force);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply thrust to the forward position of the body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#thrust\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} speed - A speed value to be applied to a directional force.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    thrust: function (speed)\r\n    {\r\n        var angle = this.body.angle;\r\n\r\n        this._tempVec2.set(speed * Math.cos(angle), speed * Math.sin(angle));\r\n\r\n        Body.applyForce(this.body, { x: this.body.position.x, y: this.body.position.y }, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply thrust to the left position of the body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#thrustLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} speed - A speed value to be applied to a directional force.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    thrustLeft: function (speed)\r\n    {\r\n        var angle = this.body.angle - Math.PI / 2;\r\n\r\n        this._tempVec2.set(speed * Math.cos(angle), speed * Math.sin(angle));\r\n\r\n        Body.applyForce(this.body, { x: this.body.position.x, y: this.body.position.y }, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply thrust to the right position of the body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#thrustRight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} speed - A speed value to be applied to a directional force.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    thrustRight: function (speed)\r\n    {\r\n        var angle = this.body.angle + Math.PI / 2;\r\n\r\n        this._tempVec2.set(speed * Math.cos(angle), speed * Math.sin(angle));\r\n\r\n        Body.applyForce(this.body, { x: this.body.position.x, y: this.body.position.y }, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Apply thrust to the back position of the body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Force#thrustBack\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} speed - A speed value to be applied to a directional force.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    thrustBack: function (speed)\r\n    {\r\n        var angle = this.body.angle - Math.PI;\r\n\r\n        this._tempVec2.set(speed * Math.cos(angle), speed * Math.sin(angle));\r\n\r\n        Body.applyForce(this.body, { x: this.body.position.x, y: this.body.position.y }, this._tempVec2);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Force;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0ZvcmNlLmpzPzdhODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxzRkFBa0I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9DQUFvQyxtREFBbUQ7O0FBRXZGO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9DQUFvQyxtREFBbUQ7O0FBRXZGO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9DQUFvQyxtREFBbUQ7O0FBRXZGO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9DQUFvQyxtREFBbUQ7O0FBRXZGO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0ZvcmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQm9keSA9IHJlcXVpcmUoJy4uL2xpYi9ib2R5L0JvZHknKTtcclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBvbmVudCB0byBhcHBseSBmb3JjZSB0byBNYXR0ZXIuanMgYm9kaWVzLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZvcmNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIEZvcmNlID0ge1xyXG5cclxuICAgIC8vICBmb3JjZSA9IHZlYzIgLyBwb2ludFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyBhIGZvcmNlIHRvIGEgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZvcmNlI2FwcGx5Rm9yY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gZm9yY2UgLSBBIFZlY3RvciB0aGF0IHNwZWNpZmllcyB0aGUgZm9yY2UgdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFwcGx5Rm9yY2U6IGZ1bmN0aW9uIChmb3JjZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl90ZW1wVmVjMi5zZXQodGhpcy5ib2R5LnBvc2l0aW9uLngsIHRoaXMuYm9keS5wb3NpdGlvbi55KTtcclxuXHJcbiAgICAgICAgQm9keS5hcHBseUZvcmNlKHRoaXMuYm9keSwgdGhpcy5fdGVtcFZlYzIsIGZvcmNlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyBhIGZvcmNlIHRvIGEgYm9keSBmcm9tIGEgZ2l2ZW4gcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5Gb3JjZSNhcHBseUZvcmNlRnJvbVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiBpbiB3aGljaCB0aGUgZm9yY2UgY29tZXMgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gZm9yY2UgLSBBIFZlY3RvciB0aGF0IHNwZWNpZmllcyB0aGUgZm9yY2UgdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFwcGx5Rm9yY2VGcm9tOiBmdW5jdGlvbiAocG9zaXRpb24sIGZvcmNlKVxyXG4gICAge1xyXG4gICAgICAgIEJvZHkuYXBwbHlGb3JjZSh0aGlzLmJvZHksIHBvc2l0aW9uLCBmb3JjZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRocnVzdCB0byB0aGUgZm9yd2FyZCBwb3NpdGlvbiBvZiB0aGUgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZvcmNlI3RocnVzdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNwZWVkIC0gQSBzcGVlZCB2YWx1ZSB0byBiZSBhcHBsaWVkIHRvIGEgZGlyZWN0aW9uYWwgZm9yY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRocnVzdDogZnVuY3Rpb24gKHNwZWVkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhbmdsZSA9IHRoaXMuYm9keS5hbmdsZTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGVtcFZlYzIuc2V0KHNwZWVkICogTWF0aC5jb3MoYW5nbGUpLCBzcGVlZCAqIE1hdGguc2luKGFuZ2xlKSk7XHJcblxyXG4gICAgICAgIEJvZHkuYXBwbHlGb3JjZSh0aGlzLmJvZHksIHsgeDogdGhpcy5ib2R5LnBvc2l0aW9uLngsIHk6IHRoaXMuYm9keS5wb3NpdGlvbi55IH0sIHRoaXMuX3RlbXBWZWMyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdGhydXN0IHRvIHRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuRm9yY2UjdGhydXN0TGVmdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNwZWVkIC0gQSBzcGVlZCB2YWx1ZSB0byBiZSBhcHBsaWVkIHRvIGEgZGlyZWN0aW9uYWwgZm9yY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRocnVzdExlZnQ6IGZ1bmN0aW9uIChzcGVlZClcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmJvZHkuYW5nbGUgLSBNYXRoLlBJIC8gMjtcclxuXHJcbiAgICAgICAgdGhpcy5fdGVtcFZlYzIuc2V0KHNwZWVkICogTWF0aC5jb3MoYW5nbGUpLCBzcGVlZCAqIE1hdGguc2luKGFuZ2xlKSk7XHJcblxyXG4gICAgICAgIEJvZHkuYXBwbHlGb3JjZSh0aGlzLmJvZHksIHsgeDogdGhpcy5ib2R5LnBvc2l0aW9uLngsIHk6IHRoaXMuYm9keS5wb3NpdGlvbi55IH0sIHRoaXMuX3RlbXBWZWMyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdGhydXN0IHRvIHRoZSByaWdodCBwb3NpdGlvbiBvZiB0aGUgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZvcmNlI3RocnVzdFJpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3BlZWQgLSBBIHNwZWVkIHZhbHVlIHRvIGJlIGFwcGxpZWQgdG8gYSBkaXJlY3Rpb25hbCBmb3JjZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdGhydXN0UmlnaHQ6IGZ1bmN0aW9uIChzcGVlZClcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmJvZHkuYW5nbGUgKyBNYXRoLlBJIC8gMjtcclxuXHJcbiAgICAgICAgdGhpcy5fdGVtcFZlYzIuc2V0KHNwZWVkICogTWF0aC5jb3MoYW5nbGUpLCBzcGVlZCAqIE1hdGguc2luKGFuZ2xlKSk7XHJcblxyXG4gICAgICAgIEJvZHkuYXBwbHlGb3JjZSh0aGlzLmJvZHksIHsgeDogdGhpcy5ib2R5LnBvc2l0aW9uLngsIHk6IHRoaXMuYm9keS5wb3NpdGlvbi55IH0sIHRoaXMuX3RlbXBWZWMyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdGhydXN0IHRvIHRoZSBiYWNrIHBvc2l0aW9uIG9mIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuRm9yY2UjdGhydXN0QmFja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNwZWVkIC0gQSBzcGVlZCB2YWx1ZSB0byBiZSBhcHBsaWVkIHRvIGEgZGlyZWN0aW9uYWwgZm9yY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRocnVzdEJhY2s6IGZ1bmN0aW9uIChzcGVlZClcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmJvZHkuYW5nbGUgLSBNYXRoLlBJO1xyXG5cclxuICAgICAgICB0aGlzLl90ZW1wVmVjMi5zZXQoc3BlZWQgKiBNYXRoLmNvcyhhbmdsZSksIHNwZWVkICogTWF0aC5zaW4oYW5nbGUpKTtcclxuXHJcbiAgICAgICAgQm9keS5hcHBseUZvcmNlKHRoaXMuYm9keSwgeyB4OiB0aGlzLmJvZHkucG9zaXRpb24ueCwgeTogdGhpcy5ib2R5LnBvc2l0aW9uLnkgfSwgdGhpcy5fdGVtcFZlYzIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZvcmNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Force.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Friction.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Friction.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Contains methods for changing the friction of a Game Object's Matter Body. Should be used a mixin, not called directly.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Friction\r\n * @since 3.0.0\r\n */\r\nvar Friction = {\r\n\r\n    /**\r\n     * Sets new friction values for this Game Object's Matter Body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Friction#setFriction\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new friction of the body, between 0 and 1, where 0 allows the Body to slide indefinitely, while 1 allows it to stop almost immediately after a force is applied.\r\n     * @param {number} [air] - If provided, the new air resistance of the Body. The higher the value, the faster the Body will slow as it moves through space. 0 means the body has no air resistance.\r\n     * @param {number} [fstatic] - If provided, the new static friction of the Body. The higher the value (e.g. 10), the more force it will take to initially get the Body moving when it is nearly stationary. 0 means the body will never \"stick\" when it is nearly stationary.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFriction: function (value, air, fstatic)\r\n    {\r\n        this.body.friction = value;\r\n\r\n        if (air !== undefined)\r\n        {\r\n            this.body.frictionAir = air;\r\n        }\r\n\r\n        if (fstatic !== undefined)\r\n        {\r\n            this.body.frictionStatic = fstatic;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a new air resistance for this Game Object's Matter Body. A value of 0 means the Body will never slow as it moves through space. The higher the value, the faster a Body slows when moving through space.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Friction#setFrictionAir\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new air resistance for the Body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFrictionAir: function (value)\r\n    {\r\n        this.body.frictionAir = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a new static friction for this Game Object's Matter Body. A value of 0 means the Body will never \"stick\" when it is nearly stationary. The higher the value (e.g. 10), the more force it will take to initially get the Body moving when it is nearly stationary.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Friction#setFrictionStatic\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new static friction for the Body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setFrictionStatic: function (value)\r\n    {\r\n        this.body.frictionStatic = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Friction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0ZyaWN0aW9uLmpzPzc0OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9GcmljdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIG1ldGhvZHMgZm9yIGNoYW5naW5nIHRoZSBmcmljdGlvbiBvZiBhIEdhbWUgT2JqZWN0J3MgTWF0dGVyIEJvZHkuIFNob3VsZCBiZSB1c2VkIGEgbWl4aW4sIG5vdCBjYWxsZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuRnJpY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgRnJpY3Rpb24gPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG5ldyBmcmljdGlvbiB2YWx1ZXMgZm9yIHRoaXMgR2FtZSBPYmplY3QncyBNYXR0ZXIgQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZyaWN0aW9uI3NldEZyaWN0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbmV3IGZyaWN0aW9uIG9mIHRoZSBib2R5LCBiZXR3ZWVuIDAgYW5kIDEsIHdoZXJlIDAgYWxsb3dzIHRoZSBCb2R5IHRvIHNsaWRlIGluZGVmaW5pdGVseSwgd2hpbGUgMSBhbGxvd3MgaXQgdG8gc3RvcCBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBmb3JjZSBpcyBhcHBsaWVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthaXJdIC0gSWYgcHJvdmlkZWQsIHRoZSBuZXcgYWlyIHJlc2lzdGFuY2Ugb2YgdGhlIEJvZHkuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgZmFzdGVyIHRoZSBCb2R5IHdpbGwgc2xvdyBhcyBpdCBtb3ZlcyB0aHJvdWdoIHNwYWNlLiAwIG1lYW5zIHRoZSBib2R5IGhhcyBubyBhaXIgcmVzaXN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnN0YXRpY10gLSBJZiBwcm92aWRlZCwgdGhlIG5ldyBzdGF0aWMgZnJpY3Rpb24gb2YgdGhlIEJvZHkuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIChlLmcuIDEwKSwgdGhlIG1vcmUgZm9yY2UgaXQgd2lsbCB0YWtlIHRvIGluaXRpYWxseSBnZXQgdGhlIEJvZHkgbW92aW5nIHdoZW4gaXQgaXMgbmVhcmx5IHN0YXRpb25hcnkuIDAgbWVhbnMgdGhlIGJvZHkgd2lsbCBuZXZlciBcInN0aWNrXCIgd2hlbiBpdCBpcyBuZWFybHkgc3RhdGlvbmFyeS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJpY3Rpb246IGZ1bmN0aW9uICh2YWx1ZSwgYWlyLCBmc3RhdGljKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5mcmljdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoYWlyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZnJpY3Rpb25BaXIgPSBhaXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnN0YXRpYyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5LmZyaWN0aW9uU3RhdGljID0gZnN0YXRpYztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBuZXcgYWlyIHJlc2lzdGFuY2UgZm9yIHRoaXMgR2FtZSBPYmplY3QncyBNYXR0ZXIgQm9keS4gQSB2YWx1ZSBvZiAwIG1lYW5zIHRoZSBCb2R5IHdpbGwgbmV2ZXIgc2xvdyBhcyBpdCBtb3ZlcyB0aHJvdWdoIHNwYWNlLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGZhc3RlciBhIEJvZHkgc2xvd3Mgd2hlbiBtb3ZpbmcgdGhyb3VnaCBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkZyaWN0aW9uI3NldEZyaWN0aW9uQWlyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbmV3IGFpciByZXNpc3RhbmNlIGZvciB0aGUgQm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJpY3Rpb25BaXI6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvZHkuZnJpY3Rpb25BaXIgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIG5ldyBzdGF0aWMgZnJpY3Rpb24gZm9yIHRoaXMgR2FtZSBPYmplY3QncyBNYXR0ZXIgQm9keS4gQSB2YWx1ZSBvZiAwIG1lYW5zIHRoZSBCb2R5IHdpbGwgbmV2ZXIgXCJzdGlja1wiIHdoZW4gaXQgaXMgbmVhcmx5IHN0YXRpb25hcnkuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIChlLmcuIDEwKSwgdGhlIG1vcmUgZm9yY2UgaXQgd2lsbCB0YWtlIHRvIGluaXRpYWxseSBnZXQgdGhlIEJvZHkgbW92aW5nIHdoZW4gaXQgaXMgbmVhcmx5IHN0YXRpb25hcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5GcmljdGlvbiNzZXRGcmljdGlvblN0YXRpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG5ldyBzdGF0aWMgZnJpY3Rpb24gZm9yIHRoZSBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmljdGlvblN0YXRpYzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5mcmljdGlvblN0YXRpYyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZyaWN0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Friction.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Gravity.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Gravity.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A component to manipulate world gravity for Matter.js bodies.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Gravity\r\n * @since 3.0.0\r\n */\r\nvar Gravity = {\r\n\r\n    /**\r\n     * A togglable function for ignoring world gravity in real-time on the current body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Gravity#setIgnoreGravity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - Set to true to ignore the effect of world gravity, or false to not ignore it.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setIgnoreGravity: function (value)\r\n    {\r\n        this.body.ignoreGravity = value;\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Gravity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL0dyYXZpdHkuanM/MWZlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9HcmF2aXR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQSBjb21wb25lbnQgdG8gbWFuaXB1bGF0ZSB3b3JsZCBncmF2aXR5IGZvciBNYXR0ZXIuanMgYm9kaWVzLlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLkdyYXZpdHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgR3Jhdml0eSA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG9nZ2xhYmxlIGZ1bmN0aW9uIGZvciBpZ25vcmluZyB3b3JsZCBncmF2aXR5IGluIHJlYWwtdGltZSBvbiB0aGUgY3VycmVudCBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuR3Jhdml0eSNzZXRJZ25vcmVHcmF2aXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gU2V0IHRvIHRydWUgdG8gaWdub3JlIHRoZSBlZmZlY3Qgb2Ygd29ybGQgZ3Jhdml0eSwgb3IgZmFsc2UgdG8gbm90IGlnbm9yZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SWdub3JlR3Jhdml0eTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5pZ25vcmVHcmF2aXR5ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3Jhdml0eTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Gravity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Mass.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Mass.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Allows accessing the mass, density, and center of mass of a Matter-enabled Game Object. Should be used as a mixin and not directly.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Mass\r\n * @since 3.0.0\r\n */\r\nvar Mass = {\r\n\r\n    /**\r\n     * Sets the mass of the Game Object's Matter Body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Mass#setMass\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new mass of the body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setMass: function (value)\r\n    {\r\n        Body.setMass(this.body, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets density of the body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Mass#setDensity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new density of the body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setDensity: function (value)\r\n    {\r\n        Body.setDensity(this.body, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The body's center of mass.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Mass#centerOfMass\r\n     * @type {Phaser.Math.Vector2}\r\n     * @readonly\r\n     * @since 3.10.0\r\n     *\r\n     * @return {Phaser.Math.Vector2} The center of mass.\r\n     */\r\n    centerOfMass: {\r\n\r\n        get: function ()\r\n        {\r\n            return new Vector2(this.body.render.sprite.xOffset * this.width, this.body.render.sprite.yOffset * this.height);\r\n        }\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Mass;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL01hc3MuanM/ODVlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLHNGQUFrQjtBQUNyQyxjQUFjLG1CQUFPLENBQUMsd0VBQXVCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2NvbXBvbmVudHMvTWFzcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJvZHkgPSByZXF1aXJlKCcuLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQWxsb3dzIGFjY2Vzc2luZyB0aGUgbWFzcywgZGVuc2l0eSwgYW5kIGNlbnRlciBvZiBtYXNzIG9mIGEgTWF0dGVyLWVuYWJsZWQgR2FtZSBPYmplY3QuIFNob3VsZCBiZSB1c2VkIGFzIGEgbWl4aW4gYW5kIG5vdCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5NYXNzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIE1hc3MgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXNzIG9mIHRoZSBHYW1lIE9iamVjdCdzIE1hdHRlciBCb2R5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuTWFzcyNzZXRNYXNzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbmV3IG1hc3Mgb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldE1hc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBCb2R5LnNldE1hc3ModGhpcy5ib2R5LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgZGVuc2l0eSBvZiB0aGUgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLk1hc3Mjc2V0RGVuc2l0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG5ldyBkZW5zaXR5IG9mIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREZW5zaXR5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXREZW5zaXR5KHRoaXMuYm9keSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm9keSdzIGNlbnRlciBvZiBtYXNzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLk1hc3MjY2VudGVyT2ZNYXNzXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjZW50ZXIgb2YgbWFzcy5cclxuICAgICAqL1xyXG4gICAgY2VudGVyT2ZNYXNzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLmJvZHkucmVuZGVyLnNwcml0ZS54T2Zmc2V0ICogdGhpcy53aWR0aCwgdGhpcy5ib2R5LnJlbmRlci5zcHJpdGUueU9mZnNldCAqIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYXNzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Mass.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Sensor.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Sensor.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * [description]\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Sensor\r\n * @since 3.0.0\r\n */\r\nvar Sensor = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sensor#setSensor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setSensor: function (value)\r\n    {\r\n        this.body.isSensor = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sensor#isSensor\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    isSensor: function ()\r\n    {\r\n        return this.body.isSensor;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Sensor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1NlbnNvci5qcz9iNDMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9TZW5zb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2Vuc29yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFNlbnNvciA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlNlbnNvciNzZXRTZW5zb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNlbnNvcjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9keS5pc1NlbnNvciA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TZW5zb3IjaXNTZW5zb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgaXNTZW5zb3I6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5pc1NlbnNvcjtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNlbnNvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Sensor.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/SetBody.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/SetBody.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Bodies = __webpack_require__(/*! ../lib/factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PhysicsEditorParser = __webpack_require__(/*! ../PhysicsEditorParser */ \"./node_modules/phaser/src/physics/matter-js/PhysicsEditorParser.js\");\r\nvar Vertices = __webpack_require__(/*! ../lib/geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.SetBody\r\n * @since 3.0.0\r\n */\r\nvar SetBody = {\r\n\r\n    //  Calling any of these methods resets previous properties you may have set on the body, including plugins, mass, etc\r\n\r\n    /**\r\n     * Set the body on a Game Object to a rectangle.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setRectangle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - Width of the rectangle.\r\n     * @param {number} height - Height of the rectangle.\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setRectangle: function (width, height, options)\r\n    {\r\n        return this.setBody({ type: 'rectangle', width: width, height: height }, options);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setCircle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - [description]\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setCircle: function (radius, options)\r\n    {\r\n        return this.setBody({ type: 'circle', radius: radius }, options);\r\n    },\r\n\r\n    /**\r\n     * Set the body on the Game Object to a polygon shape.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setPolygon\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radius - The radius of the polygon.\r\n     * @param {number} sides - The amount of sides creating the polygon.\r\n     * @param {object} options - A matterjs config object.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setPolygon: function (radius, sides, options)\r\n    {\r\n        return this.setBody({ type: 'polygon', sides: sides, radius: radius }, options);\r\n    },\r\n\r\n    /**\r\n     * Creates a new matterjs trapezoid body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setTrapezoid\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The width of the trapezoid.\r\n     * @param {number} height - The height of the trapezoid.\r\n     * @param {number} slope - The angle of slope for the trapezoid.\r\n     * @param {object} options - A matterjs config object for the body.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setTrapezoid: function (width, height, slope, options)\r\n    {\r\n        return this.setBody({ type: 'trapezoid', width: width, height: height, slope: slope }, options);\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setExistingBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {MatterJS.Body} body - [description]\r\n     * @param {boolean} [addToWorld=true] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setExistingBody: function (body, addToWorld)\r\n    {\r\n        if (addToWorld === undefined)\r\n        {\r\n            addToWorld = true;\r\n        }\r\n\r\n        if (this.body)\r\n        {\r\n            this.world.remove(this.body);\r\n        }\r\n\r\n        this.body = body;\r\n\r\n        for (var i = 0; i < body.parts.length; i++)\r\n        {\r\n            body.parts[i].gameObject = this;\r\n        }\r\n\r\n        var _this = this;\r\n\r\n        body.destroy = function destroy ()\r\n        {\r\n            _this.world.remove(_this.body);\r\n            _this.body.gameObject = null;\r\n        };\r\n\r\n        if (addToWorld)\r\n        {\r\n            this.world.add(body);\r\n        }\r\n\r\n        if (this._originComponent)\r\n        {\r\n            this.setOrigin(body.render.sprite.xOffset, body.render.sprite.yOffset);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.SetBody#setBody\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} config - [description]\r\n     * @param {object} options - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setBody: function (config, options)\r\n    {\r\n        if (!config)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var body;\r\n\r\n        //  Allow them to do: shape: 'circle' instead of shape: { type: 'circle' }\r\n        if (typeof config === 'string')\r\n        {\r\n            //  Using defaults\r\n            config = { type: config };\r\n        }\r\n\r\n        var shapeType = GetFastValue(config, 'type', 'rectangle');\r\n        var bodyX = GetFastValue(config, 'x', this._tempVec2.x);\r\n        var bodyY = GetFastValue(config, 'y', this._tempVec2.y);\r\n        var bodyWidth = GetFastValue(config, 'width', this.width);\r\n        var bodyHeight = GetFastValue(config, 'height', this.height);\r\n\r\n        switch (shapeType)\r\n        {\r\n            case 'rectangle':\r\n                body = Bodies.rectangle(bodyX, bodyY, bodyWidth, bodyHeight, options);\r\n                break;\r\n\r\n            case 'circle':\r\n                var radius = GetFastValue(config, 'radius', Math.max(bodyWidth, bodyHeight) / 2);\r\n                var maxSides = GetFastValue(config, 'maxSides', 25);\r\n                body = Bodies.circle(bodyX, bodyY, radius, options, maxSides);\r\n                break;\r\n\r\n            case 'trapezoid':\r\n                var slope = GetFastValue(config, 'slope', 0.5);\r\n                body = Bodies.trapezoid(bodyX, bodyY, bodyWidth, bodyHeight, slope, options);\r\n                break;\r\n\r\n            case 'polygon':\r\n                var sides = GetFastValue(config, 'sides', 5);\r\n                var pRadius = GetFastValue(config, 'radius', Math.max(bodyWidth, bodyHeight) / 2);\r\n                body = Bodies.polygon(bodyX, bodyY, sides, pRadius, options);\r\n                break;\r\n\r\n            case 'fromVertices':\r\n            case 'fromVerts':\r\n\r\n                var verts = GetFastValue(config, 'verts', null);\r\n\r\n                if (verts)\r\n                {\r\n                    //  Has the verts array come from Vertices.fromPath, or is it raw?\r\n                    if (typeof verts === 'string')\r\n                    {\r\n                        verts = Vertices.fromPath(verts);\r\n                    }\r\n\r\n                    if (this.body && !this.body.hasOwnProperty('temp'))\r\n                    {\r\n                        Body.setVertices(this.body, verts);\r\n\r\n                        body = this.body;\r\n                    }\r\n                    else\r\n                    {\r\n                        var flagInternal = GetFastValue(config, 'flagInternal', false);\r\n                        var removeCollinear = GetFastValue(config, 'removeCollinear', 0.01);\r\n                        var minimumArea = GetFastValue(config, 'minimumArea', 10);\r\n    \r\n                        body = Bodies.fromVertices(bodyX, bodyY, verts, options, flagInternal, removeCollinear, minimumArea);\r\n                    }\r\n                }\r\n\r\n                break;\r\n\r\n            case 'fromPhysicsEditor':\r\n                body = PhysicsEditorParser.parseBody(bodyX, bodyY, bodyWidth, bodyHeight, config);\r\n                break;\r\n        }\r\n\r\n        if (body)\r\n        {\r\n            this.setExistingBody(body, config.addToWorld);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = SetBody;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1NldEJvZHkuanM/YjNjYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdHQUF1QjtBQUM1QyxXQUFXLG1CQUFPLENBQUMsc0ZBQWtCO0FBQ3JDLG1CQUFtQixtQkFBTyxDQUFDLGtHQUFvQztBQUMvRCwwQkFBMEIsbUJBQU8sQ0FBQyxrR0FBd0I7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLHNHQUEwQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixrREFBa0Q7QUFDL0UsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsaUNBQWlDO0FBQzlELEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixnREFBZ0Q7QUFDN0UsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixnRUFBZ0U7QUFDN0YsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1NldEJvZHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCb2RpZXMgPSByZXF1aXJlKCcuLi9saWIvZmFjdG9yeS9Cb2RpZXMnKTtcclxudmFyIEJvZHkgPSByZXF1aXJlKCcuLi9saWIvYm9keS9Cb2R5Jyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQaHlzaWNzRWRpdG9yUGFyc2VyID0gcmVxdWlyZSgnLi4vUGh5c2ljc0VkaXRvclBhcnNlcicpO1xyXG52YXIgVmVydGljZXMgPSByZXF1aXJlKCcuLi9saWIvZ2VvbWV0cnkvVmVydGljZXMnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2V0Qm9keVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBTZXRCb2R5ID0ge1xyXG5cclxuICAgIC8vICBDYWxsaW5nIGFueSBvZiB0aGVzZSBtZXRob2RzIHJlc2V0cyBwcmV2aW91cyBwcm9wZXJ0aWVzIHlvdSBtYXkgaGF2ZSBzZXQgb24gdGhlIGJvZHksIGluY2x1ZGluZyBwbHVnaW5zLCBtYXNzLCBldGNcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYm9keSBvbiBhIEdhbWUgT2JqZWN0IHRvIGEgcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2V0Qm9keSNzZXRSZWN0YW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmVjdGFuZ2xlOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRCb2R5KHsgdHlwZTogJ3JlY3RhbmdsZScsIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSwgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2V0Qm9keSNzZXRDaXJjbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2lyY2xlOiBmdW5jdGlvbiAocmFkaXVzLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldEJvZHkoeyB0eXBlOiAnY2lyY2xlJywgcmFkaXVzOiByYWRpdXMgfSwgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBib2R5IG9uIHRoZSBHYW1lIE9iamVjdCB0byBhIHBvbHlnb24gc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TZXRCb2R5I3NldFBvbHlnb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBwb2x5Z29uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZGVzIC0gVGhlIGFtb3VudCBvZiBzaWRlcyBjcmVhdGluZyB0aGUgcG9seWdvbi5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gQSBtYXR0ZXJqcyBjb25maWcgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb2x5Z29uOiBmdW5jdGlvbiAocmFkaXVzLCBzaWRlcywgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRCb2R5KHsgdHlwZTogJ3BvbHlnb24nLCBzaWRlczogc2lkZXMsIHJhZGl1czogcmFkaXVzIH0sIG9wdGlvbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgbWF0dGVyanMgdHJhcGV6b2lkIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TZXRCb2R5I3NldFRyYXBlem9pZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSB0cmFwZXpvaWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdHJhcGV6b2lkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNsb3BlIC0gVGhlIGFuZ2xlIG9mIHNsb3BlIGZvciB0aGUgdHJhcGV6b2lkLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBBIG1hdHRlcmpzIGNvbmZpZyBvYmplY3QgZm9yIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUcmFwZXpvaWQ6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBzbG9wZSwgb3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRCb2R5KHsgdHlwZTogJ3RyYXBlem9pZCcsIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQsIHNsb3BlOiBzbG9wZSB9LCBvcHRpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TZXRCb2R5I3NldEV4aXN0aW5nQm9keVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9Xb3JsZD10cnVlXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RXhpc3RpbmdCb2R5OiBmdW5jdGlvbiAoYm9keSwgYWRkVG9Xb3JsZClcclxuICAgIHtcclxuICAgICAgICBpZiAoYWRkVG9Xb3JsZCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYWRkVG9Xb3JsZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53b3JsZC5yZW1vdmUodGhpcy5ib2R5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9keS5wYXJ0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZHkucGFydHNbaV0uZ2FtZU9iamVjdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBib2R5LmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95ICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy53b3JsZC5yZW1vdmUoX3RoaXMuYm9keSk7XHJcbiAgICAgICAgICAgIF90aGlzLmJvZHkuZ2FtZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGFkZFRvV29ybGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkLmFkZChib2R5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9vcmlnaW5Db21wb25lbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9yaWdpbihib2R5LnJlbmRlci5zcHJpdGUueE9mZnNldCwgYm9keS5yZW5kZXIuc3ByaXRlLnlPZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2V0Qm9keSNzZXRCb2R5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvZHk6IGZ1bmN0aW9uIChjb25maWcsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBib2R5O1xyXG5cclxuICAgICAgICAvLyAgQWxsb3cgdGhlbSB0byBkbzogc2hhcGU6ICdjaXJjbGUnIGluc3RlYWQgb2Ygc2hhcGU6IHsgdHlwZTogJ2NpcmNsZScgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBVc2luZyBkZWZhdWx0c1xyXG4gICAgICAgICAgICBjb25maWcgPSB7IHR5cGU6IGNvbmZpZyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYXBlVHlwZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICd0eXBlJywgJ3JlY3RhbmdsZScpO1xyXG4gICAgICAgIHZhciBib2R5WCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4JywgdGhpcy5fdGVtcFZlYzIueCk7XHJcbiAgICAgICAgdmFyIGJvZHlZID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3knLCB0aGlzLl90ZW1wVmVjMi55KTtcclxuICAgICAgICB2YXIgYm9keVdpZHRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgdGhpcy53aWR0aCk7XHJcbiAgICAgICAgdmFyIGJvZHlIZWlnaHQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnaGVpZ2h0JywgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHNoYXBlVHlwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlY3RhbmdsZSc6XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gQm9kaWVzLnJlY3RhbmdsZShib2R5WCwgYm9keVksIGJvZHlXaWR0aCwgYm9keUhlaWdodCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmNsZSc6XHJcbiAgICAgICAgICAgICAgICB2YXIgcmFkaXVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3JhZGl1cycsIE1hdGgubWF4KGJvZHlXaWR0aCwgYm9keUhlaWdodCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXhTaWRlcyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdtYXhTaWRlcycsIDI1KTtcclxuICAgICAgICAgICAgICAgIGJvZHkgPSBCb2RpZXMuY2lyY2xlKGJvZHlYLCBib2R5WSwgcmFkaXVzLCBvcHRpb25zLCBtYXhTaWRlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3RyYXBlem9pZCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2xvcGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc2xvcGUnLCAwLjUpO1xyXG4gICAgICAgICAgICAgICAgYm9keSA9IEJvZGllcy50cmFwZXpvaWQoYm9keVgsIGJvZHlZLCBib2R5V2lkdGgsIGJvZHlIZWlnaHQsIHNsb3BlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncG9seWdvbic6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2lkZXMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc2lkZXMnLCA1KTtcclxuICAgICAgICAgICAgICAgIHZhciBwUmFkaXVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3JhZGl1cycsIE1hdGgubWF4KGJvZHlXaWR0aCwgYm9keUhlaWdodCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIGJvZHkgPSBCb2RpZXMucG9seWdvbihib2R5WCwgYm9keVksIHNpZGVzLCBwUmFkaXVzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnZnJvbVZlcnRpY2VzJzpcclxuICAgICAgICAgICAgY2FzZSAnZnJvbVZlcnRzJzpcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdmVydHMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAndmVydHMnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIEhhcyB0aGUgdmVydHMgYXJyYXkgY29tZSBmcm9tIFZlcnRpY2VzLmZyb21QYXRoLCBvciBpcyBpdCByYXc/XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ZXJ0cyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0cyA9IFZlcnRpY2VzLmZyb21QYXRoKHZlcnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJvZHkgJiYgIXRoaXMuYm9keS5oYXNPd25Qcm9wZXJ0eSgndGVtcCcpKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQm9keS5zZXRWZXJ0aWNlcyh0aGlzLmJvZHksIHZlcnRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFnSW50ZXJuYWwgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZmxhZ0ludGVybmFsJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlQ29sbGluZWFyID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3JlbW92ZUNvbGxpbmVhcicsIDAuMDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluaW11bUFyZWEgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWluaW11bUFyZWEnLCAxMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IEJvZGllcy5mcm9tVmVydGljZXMoYm9keVgsIGJvZHlZLCB2ZXJ0cywgb3B0aW9ucywgZmxhZ0ludGVybmFsLCByZW1vdmVDb2xsaW5lYXIsIG1pbmltdW1BcmVhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdmcm9tUGh5c2ljc0VkaXRvcic6XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gUGh5c2ljc0VkaXRvclBhcnNlci5wYXJzZUJvZHkoYm9keVgsIGJvZHlZLCBib2R5V2lkdGgsIGJvZHlIZWlnaHQsIGNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChib2R5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZ0JvZHkoYm9keSwgY29uZmlnLmFkZFRvV29ybGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRCb2R5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/SetBody.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Sleep.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Sleep.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/physics/matter-js/events/index.js\");\r\nvar MatterEvents = __webpack_require__(/*! ../lib/core/Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Sleep\r\n * @since 3.0.0\r\n */\r\nvar Sleep = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sleep#setSleepThreshold\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [value=60] - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setSleepThreshold: function (value)\r\n    {\r\n        if (value === undefined) { value = 60; }\r\n\r\n        this.body.sleepThreshold = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sleep#setSleepEvents\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} start - [description]\r\n     * @param {boolean} end - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setSleepEvents: function (start, end)\r\n    {\r\n        this.setSleepStartEvent(start);\r\n        this.setSleepEndEvent(end);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sleep#setSleepStartEvent\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setSleepStartEvent: function (value)\r\n    {\r\n        if (value)\r\n        {\r\n            var world = this.world;\r\n\r\n            MatterEvents.on(this.body, 'sleepStart', function (event)\r\n            {\r\n                world.emit(Events.SLEEP_START, event, this);\r\n            });\r\n        }\r\n        else\r\n        {\r\n            MatterEvents.off(this.body, 'sleepStart');\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Sleep#setSleepEndEvent\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setSleepEndEvent: function (value)\r\n    {\r\n        if (value)\r\n        {\r\n            var world = this.world;\r\n\r\n            MatterEvents.on(this.body, 'sleepEnd', function (event)\r\n            {\r\n                world.emit(Events.SLEEP_END, event, this);\r\n            });\r\n        }\r\n        else\r\n        {\r\n            MatterEvents.off(this.body, 'sleepEnd');\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Sleep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1NsZWVwLmpzPzdmZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyw4RUFBVztBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7O0FBRTlDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2NvbXBvbmVudHMvU2xlZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIE1hdHRlckV2ZW50cyA9IHJlcXVpcmUoJy4uL2xpYi9jb3JlL0V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TbGVlcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBTbGVlcCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlNsZWVwI3NldFNsZWVwVGhyZXNob2xkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTYwXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2xlZXBUaHJlc2hvbGQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDYwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYm9keS5zbGVlcFRocmVzaG9sZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TbGVlcCNzZXRTbGVlcEV2ZW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzdGFydCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5kIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTbGVlcEV2ZW50czogZnVuY3Rpb24gKHN0YXJ0LCBlbmQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZXRTbGVlcFN0YXJ0RXZlbnQoc3RhcnQpO1xyXG4gICAgICAgIHRoaXMuc2V0U2xlZXBFbmRFdmVudChlbmQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TbGVlcCNzZXRTbGVlcFN0YXJ0RXZlbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNsZWVwU3RhcnRFdmVudDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB3b3JsZCA9IHRoaXMud29ybGQ7XHJcblxyXG4gICAgICAgICAgICBNYXR0ZXJFdmVudHMub24odGhpcy5ib2R5LCAnc2xlZXBTdGFydCcsIGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd29ybGQuZW1pdChFdmVudHMuU0xFRVBfU1RBUlQsIGV2ZW50LCB0aGlzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIE1hdHRlckV2ZW50cy5vZmYodGhpcy5ib2R5LCAnc2xlZXBTdGFydCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU2xlZXAjc2V0U2xlZXBFbmRFdmVudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2xlZXBFbmRFdmVudDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB3b3JsZCA9IHRoaXMud29ybGQ7XHJcblxyXG4gICAgICAgICAgICBNYXR0ZXJFdmVudHMub24odGhpcy5ib2R5LCAnc2xlZXBFbmQnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdvcmxkLmVtaXQoRXZlbnRzLlNMRUVQX0VORCwgZXZlbnQsIHRoaXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTWF0dGVyRXZlbnRzLm9mZih0aGlzLmJvZHksICdzbGVlcEVuZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbGVlcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Sleep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Static.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Static.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Static\r\n * @since 3.0.0\r\n */\r\nvar Static = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Static#setStatic\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setStatic: function (value)\r\n    {\r\n        Body.setStatic(this.body, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Static#isStatic\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} [description]\r\n     */\r\n    isStatic: function ()\r\n    {\r\n        return this.body.isStatic;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Static;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1N0YXRpYy5qcz81ZDM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsc0ZBQWtCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9TdGF0aWMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi4vbGliL2JvZHkvQm9keScpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5TdGF0aWNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgU3RhdGljID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuU3RhdGljI3NldFN0YXRpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U3RhdGljOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXRTdGF0aWModGhpcy5ib2R5LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlN0YXRpYyNpc1N0YXRpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBpc1N0YXRpYzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ib2R5LmlzU3RhdGljO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3RhdGljO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Static.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Transform.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Transform.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar WrapAngle = __webpack_require__(/*! ../../../math/angle/Wrap */ \"./node_modules/phaser/src/math/angle/Wrap.js\");\r\nvar WrapAngleDegrees = __webpack_require__(/*! ../../../math/angle/WrapDegrees */ \"./node_modules/phaser/src/math/angle/WrapDegrees.js\");\r\n\r\n//  global bitmask flag for GameObject.renderMask (used by Scale)\r\nvar _FLAG = 4; // 0100\r\n\r\n//  Transform Component\r\n\r\n/**\r\n * Provides methods used for getting and setting the position, scale and rotation of a Game Object.\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Transform\r\n * @since 3.0.0\r\n */\r\nvar Transform = {\r\n\r\n    /**\r\n     * The x position of this Game Object.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#x\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    x: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.position.x;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tempVec2.set(value, this.y);\r\n\r\n            Body.setPosition(this.body, this._tempVec2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The y position of this Game Object.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#y\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    y: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.position.y;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._tempVec2.set(this.x, value);\r\n\r\n            Body.setPosition(this.body, this._tempVec2);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The horizontal scale of this Game Object.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#scaleX\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    scaleX: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scaleX;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var factorX = 1 / this._scaleX;\r\n            var factorY = 1 / this._scaleY;\r\n    \r\n            this._scaleX = value;\r\n\r\n            if (this._scaleX === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n\r\n            //  Reset Matter scale back to 1 (sigh)\r\n            Body.scale(this.body, factorX, factorY);\r\n\r\n            Body.scale(this.body, value, this._scaleY);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The vertical scale of this Game Object.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#scaleY\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    scaleY: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._scaleY;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            var factorX = 1 / this._scaleX;\r\n            var factorY = 1 / this._scaleY;\r\n\r\n            this._scaleY = value;\r\n\r\n            if (this._scaleY === 0)\r\n            {\r\n                this.renderFlags &= ~_FLAG;\r\n            }\r\n            else\r\n            {\r\n                this.renderFlags |= _FLAG;\r\n            }\r\n\r\n            Body.scale(this.body, factorX, factorY);\r\n\r\n            Body.scale(this.body, this._scaleX, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Use `angle` to set or get rotation of the physics body associated to this GameObject. Unlike rotation, when using set the value can be in degrees, which will be converted to radians internally.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#angle\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    angle: {\r\n\r\n        get: function ()\r\n        {\r\n            return WrapAngleDegrees(this.body.angle * MATH_CONST.RAD_TO_DEG);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            //  value is in degrees\r\n            this.rotation = WrapAngleDegrees(value) * MATH_CONST.DEG_TO_RAD;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Use `rotation` to set or get the rotation of the physics body associated with this GameObject. The value when set must be in radians.\r\n     *\r\n     * @name Phaser.Physics.Matter.Components.Transform#rotation\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    rotation: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.body.angle;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            //  value is in radians\r\n            this._rotation = WrapAngle(value);\r\n\r\n            Body.setAngle(this.body, this._rotation);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the position of the physics body along x and y axes. Both the parameters to this function are optional and if not passed any they default to 0.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Transform#setPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=0] - The horizontal position of the body.\r\n     * @param {number} [y=x] - The vertical position of the body.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setPosition: function (x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        this._tempVec2.set(x, y);\r\n\r\n        Body.setPosition(this.body, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Transform#setRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [radians=0] - [description]\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setRotation: function (radians)\r\n    {\r\n        if (radians === undefined) { radians = 0; }\r\n\r\n        this._rotation = WrapAngle(radians);\r\n\r\n        Body.setAngle(this.body, radians);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Transform#setFixedRotation\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setFixedRotation: function ()\r\n    {\r\n        Body.setInertia(this.body, Infinity);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Transform#setAngle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [degrees=0] - [description]\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setAngle: function (degrees)\r\n    {\r\n        if (degrees === undefined) { degrees = 0; }\r\n\r\n        this.angle = degrees;\r\n\r\n        Body.setAngle(this.body, this.rotation);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the scale of this Game Object.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Transform#setScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [x=1] - The horizontal scale of this Game Object.\r\n     * @param {number} [y=x] - The vertical scale of this Game Object. If not set it will use the x value.\r\n     * @param {Phaser.Math.Vector2} [point] - The point (Vector2) from which scaling will occur.\r\n     *\r\n     * @return {this} This Game Object.\r\n     */\r\n    setScale: function (x, y, point)\r\n    {\r\n        if (x === undefined) { x = 1; }\r\n        if (y === undefined) { y = x; }\r\n\r\n        var factorX = 1 / this._scaleX;\r\n        var factorY = 1 / this._scaleY;\r\n\r\n        this._scaleX = x;\r\n        this._scaleY = y;\r\n\r\n        Body.scale(this.body, factorX, factorY, point);\r\n\r\n        Body.scale(this.body, x, y, point);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Transform;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1RyYW5zZm9ybS5qcz8xMTY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsc0ZBQWtCO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFxQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQyw4RUFBMEI7QUFDbEQsdUJBQXVCLG1CQUFPLENBQUMsNEZBQWlDOztBQUVoRTtBQUNBLGNBQWM7O0FBRWQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvY29tcG9uZW50cy9UcmFuc2Zvcm0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi4vbGliL2JvZHkvQm9keScpO1xyXG52YXIgTUFUSF9DT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgvY29uc3QnKTtcclxudmFyIFdyYXBBbmdsZSA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgvYW5nbGUvV3JhcCcpO1xyXG52YXIgV3JhcEFuZ2xlRGVncmVlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgvYW5nbGUvV3JhcERlZ3JlZXMnKTtcclxuXHJcbi8vICBnbG9iYWwgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2sgKHVzZWQgYnkgU2NhbGUpXHJcbnZhciBfRkxBRyA9IDQ7IC8vIDAxMDBcclxuXHJcbi8vICBUcmFuc2Zvcm0gQ29tcG9uZW50XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBwb3NpdGlvbiwgc2NhbGUgYW5kIHJvdGF0aW9uIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFRyYW5zZm9ybSA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtI3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgeDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ib2R5LnBvc2l0aW9uLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90ZW1wVmVjMi5zZXQodmFsdWUsIHRoaXMueSk7XHJcblxyXG4gICAgICAgICAgICBCb2R5LnNldFBvc2l0aW9uKHRoaXMuYm9keSwgdGhpcy5fdGVtcFZlYzIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5UcmFuc2Zvcm0jeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RlbXBWZWMyLnNldCh0aGlzLngsIHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIEJvZHkuc2V0UG9zaXRpb24odGhpcy5ib2R5LCB0aGlzLl90ZW1wVmVjMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2NhbGVYOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZmFjdG9yWCA9IDEgLyB0aGlzLl9zY2FsZVg7XHJcbiAgICAgICAgICAgIHZhciBmYWN0b3JZID0gMSAvIHRoaXMuX3NjYWxlWTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZVggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2FsZVggPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgJj0gfl9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIFJlc2V0IE1hdHRlciBzY2FsZSBiYWNrIHRvIDEgKHNpZ2gpXHJcbiAgICAgICAgICAgIEJvZHkuc2NhbGUodGhpcy5ib2R5LCBmYWN0b3JYLCBmYWN0b3JZKTtcclxuXHJcbiAgICAgICAgICAgIEJvZHkuc2NhbGUodGhpcy5ib2R5LCB2YWx1ZSwgdGhpcy5fc2NhbGVZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2NhbGVZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZmFjdG9yWCA9IDEgLyB0aGlzLl9zY2FsZVg7XHJcbiAgICAgICAgICAgIHZhciBmYWN0b3JZID0gMSAvIHRoaXMuX3NjYWxlWTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlWSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NjYWxlWSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCb2R5LnNjYWxlKHRoaXMuYm9keSwgZmFjdG9yWCwgZmFjdG9yWSk7XHJcblxyXG4gICAgICAgICAgICBCb2R5LnNjYWxlKHRoaXMuYm9keSwgdGhpcy5fc2NhbGVYLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgYGFuZ2xlYCB0byBzZXQgb3IgZ2V0IHJvdGF0aW9uIG9mIHRoZSBwaHlzaWNzIGJvZHkgYXNzb2NpYXRlZCB0byB0aGlzIEdhbWVPYmplY3QuIFVubGlrZSByb3RhdGlvbiwgd2hlbiB1c2luZyBzZXQgdGhlIHZhbHVlIGNhbiBiZSBpbiBkZWdyZWVzLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byByYWRpYW5zIGludGVybmFsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtI2FuZ2xlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBXcmFwQW5nbGVEZWdyZWVzKHRoaXMuYm9keS5hbmdsZSAqIE1BVEhfQ09OU1QuUkFEX1RPX0RFRyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgdmFsdWUgaXMgaW4gZGVncmVlc1xyXG4gICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gV3JhcEFuZ2xlRGVncmVlcyh2YWx1ZSkgKiBNQVRIX0NPTlNULkRFR19UT19SQUQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBgcm90YXRpb25gIHRvIHNldCBvciBnZXQgdGhlIHJvdGF0aW9uIG9mIHRoZSBwaHlzaWNzIGJvZHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgR2FtZU9iamVjdC4gVGhlIHZhbHVlIHdoZW4gc2V0IG11c3QgYmUgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5UcmFuc2Zvcm0jcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5hbmdsZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICB2YWx1ZSBpcyBpbiByYWRpYW5zXHJcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gV3JhcEFuZ2xlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIEJvZHkuc2V0QW5nbGUodGhpcy5ib2R5LCB0aGlzLl9yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwaHlzaWNzIGJvZHkgYWxvbmcgeCBhbmQgeSBheGVzLiBCb3RoIHRoZSBwYXJhbWV0ZXJzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG9wdGlvbmFsIGFuZCBpZiBub3QgcGFzc2VkIGFueSB0aGV5IGRlZmF1bHQgdG8gMC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RlbXBWZWMyLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgQm9keS5zZXRQb3NpdGlvbih0aGlzLmJvZHksIHRoaXMuX3RlbXBWZWMyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFJvdGF0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGlhbnM9MF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRpb246IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpYW5zID09PSB1bmRlZmluZWQpIHsgcmFkaWFucyA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSBXcmFwQW5nbGUocmFkaWFucyk7XHJcblxyXG4gICAgICAgIEJvZHkuc2V0QW5nbGUodGhpcy5ib2R5LCByYWRpYW5zKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldEZpeGVkUm90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZpeGVkUm90YXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXRJbmVydGlhKHRoaXMuYm9keSwgSW5maW5pdHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0QW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVncmVlcz0wXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbmdsZTogZnVuY3Rpb24gKGRlZ3JlZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlZ3JlZXMgPT09IHVuZGVmaW5lZCkgeyBkZWdyZWVzID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLmFuZ2xlID0gZGVncmVlcztcclxuXHJcbiAgICAgICAgQm9keS5zZXRBbmdsZSh0aGlzLmJvZHksIHRoaXMucm90YXRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MV0gLSBUaGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHNjYWxlIG9mIHRoaXMgR2FtZSBPYmplY3QuIElmIG5vdCBzZXQgaXQgd2lsbCB1c2UgdGhlIHggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtwb2ludF0gLSBUaGUgcG9pbnQgKFZlY3RvcjIpIGZyb20gd2hpY2ggc2NhbGluZyB3aWxsIG9jY3VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlOiBmdW5jdGlvbiAoeCwgeSwgcG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMTsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdmFyIGZhY3RvclggPSAxIC8gdGhpcy5fc2NhbGVYO1xyXG4gICAgICAgIHZhciBmYWN0b3JZID0gMSAvIHRoaXMuX3NjYWxlWTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NhbGVYID0geDtcclxuICAgICAgICB0aGlzLl9zY2FsZVkgPSB5O1xyXG5cclxuICAgICAgICBCb2R5LnNjYWxlKHRoaXMuYm9keSwgZmFjdG9yWCwgZmFjdG9yWSwgcG9pbnQpO1xyXG5cclxuICAgICAgICBCb2R5LnNjYWxlKHRoaXMuYm9keSwgeCwgeSwgcG9pbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Transform.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/Velocity.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/Velocity.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Body = __webpack_require__(/*! ../lib/body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @namespace Phaser.Physics.Matter.Components.Velocity\r\n * @since 3.0.0\r\n */\r\nvar Velocity = {\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Velocity#setAngularVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - [description]\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setAngularVelocity: function (value)\r\n    {\r\n        Body.setAngularVelocity(this.body, value);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the horizontal velocity of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Velocity#setVelocityX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity value.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setVelocityX: function (x)\r\n    {\r\n        this._tempVec2.set(x, this.body.velocity.y);\r\n\r\n        Body.setVelocity(this.body, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets vertical velocity of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Velocity#setVelocityY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} y - The vertical velocity value.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setVelocityY: function (y)\r\n    {\r\n        this._tempVec2.set(this.body.velocity.x, y);\r\n\r\n        Body.setVelocity(this.body, this._tempVec2);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets both the horizontal and vertical velocity of the physics body.\r\n     *\r\n     * @method Phaser.Physics.Matter.Components.Velocity#setVelocity\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The horizontal velocity value.\r\n     * @param {number} [y=x] - The vertical velocity value, it can be either positive or negative. If not given, it will be the same as the `x` value.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} This Game Object.\r\n     */\r\n    setVelocity: function (x, y)\r\n    {\r\n        this._tempVec2.set(x, y);\r\n\r\n        Body.setVelocity(this.body, this._tempVec2);\r\n\r\n        return this;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Velocity;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1ZlbG9jaXR5LmpzPzU3NzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxzRkFBa0I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL1ZlbG9jaXR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQm9keSA9IHJlcXVpcmUoJy4uL2xpYi9ib2R5L0JvZHknKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkNvbXBvbmVudHMuVmVsb2NpdHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgVmVsb2NpdHkgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5WZWxvY2l0eSNzZXRBbmd1bGFyVmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QW5ndWxhclZlbG9jaXR5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgQm9keS5zZXRBbmd1bGFyVmVsb2NpdHkodGhpcy5ib2R5LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgdmVsb2NpdHkgb2YgdGhlIHBoeXNpY3MgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlZlbG9jaXR5I3NldFZlbG9jaXR5WFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB2ZWxvY2l0eSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHlYOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl90ZW1wVmVjMi5zZXQoeCwgdGhpcy5ib2R5LnZlbG9jaXR5LnkpO1xyXG5cclxuICAgICAgICBCb2R5LnNldFZlbG9jaXR5KHRoaXMuYm9keSwgdGhpcy5fdGVtcFZlYzIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHZlcnRpY2FsIHZlbG9jaXR5IG9mIHRoZSBwaHlzaWNzIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50cy5WZWxvY2l0eSNzZXRWZWxvY2l0eVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHZlbG9jaXR5IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWZWxvY2l0eVk6IGZ1bmN0aW9uICh5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3RlbXBWZWMyLnNldCh0aGlzLmJvZHkudmVsb2NpdHkueCwgeSk7XHJcblxyXG4gICAgICAgIEJvZHkuc2V0VmVsb2NpdHkodGhpcy5ib2R5LCB0aGlzLl90ZW1wVmVjMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYm90aCB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmVsb2NpdHkgb2YgdGhlIHBoeXNpY3MgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QaHlzaWNzLk1hdHRlci5Db21wb25lbnRzLlZlbG9jaXR5I3NldFZlbG9jaXR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHZlbG9jaXR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHZlbG9jaXR5IHZhbHVlLCBpdCBjYW4gYmUgZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLiBJZiBub3QgZ2l2ZW4sIGl0IHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGB4YCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmVsb2NpdHk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3RlbXBWZWMyLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgQm9keS5zZXRWZWxvY2l0eSh0aGlzLmJvZHksIHRoaXMuX3RlbXBWZWMyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWZWxvY2l0eTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/Velocity.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/components/index.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/components/index.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Matter.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Bounce: __webpack_require__(/*! ./Bounce */ \"./node_modules/phaser/src/physics/matter-js/components/Bounce.js\"),\r\n    Collision: __webpack_require__(/*! ./Collision */ \"./node_modules/phaser/src/physics/matter-js/components/Collision.js\"),\r\n    Force: __webpack_require__(/*! ./Force */ \"./node_modules/phaser/src/physics/matter-js/components/Force.js\"),\r\n    Friction: __webpack_require__(/*! ./Friction */ \"./node_modules/phaser/src/physics/matter-js/components/Friction.js\"),\r\n    Gravity: __webpack_require__(/*! ./Gravity */ \"./node_modules/phaser/src/physics/matter-js/components/Gravity.js\"),\r\n    Mass: __webpack_require__(/*! ./Mass */ \"./node_modules/phaser/src/physics/matter-js/components/Mass.js\"),\r\n    Static: __webpack_require__(/*! ./Static */ \"./node_modules/phaser/src/physics/matter-js/components/Static.js\"),\r\n    Sensor: __webpack_require__(/*! ./Sensor */ \"./node_modules/phaser/src/physics/matter-js/components/Sensor.js\"),\r\n    SetBody: __webpack_require__(/*! ./SetBody */ \"./node_modules/phaser/src/physics/matter-js/components/SetBody.js\"),\r\n    Sleep: __webpack_require__(/*! ./Sleep */ \"./node_modules/phaser/src/physics/matter-js/components/Sleep.js\"),\r\n    Transform: __webpack_require__(/*! ./Transform */ \"./node_modules/phaser/src/physics/matter-js/components/Transform.js\"),\r\n    Velocity: __webpack_require__(/*! ./Velocity */ \"./node_modules/phaser/src/physics/matter-js/components/Velocity.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL2luZGV4LmpzPzQzYTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsa0ZBQVU7QUFDOUIsZUFBZSxtQkFBTyxDQUFDLHdGQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxnRkFBUztBQUM1QixjQUFjLG1CQUFPLENBQUMsc0ZBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLG9GQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyw4RUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsa0ZBQVU7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLGtGQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxvRkFBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsZ0ZBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLHdGQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxzRkFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9jb21wb25lbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuQ29tcG9uZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJvdW5jZTogcmVxdWlyZSgnLi9Cb3VuY2UnKSxcclxuICAgIENvbGxpc2lvbjogcmVxdWlyZSgnLi9Db2xsaXNpb24nKSxcclxuICAgIEZvcmNlOiByZXF1aXJlKCcuL0ZvcmNlJyksXHJcbiAgICBGcmljdGlvbjogcmVxdWlyZSgnLi9GcmljdGlvbicpLFxyXG4gICAgR3Jhdml0eTogcmVxdWlyZSgnLi9HcmF2aXR5JyksXHJcbiAgICBNYXNzOiByZXF1aXJlKCcuL01hc3MnKSxcclxuICAgIFN0YXRpYzogcmVxdWlyZSgnLi9TdGF0aWMnKSxcclxuICAgIFNlbnNvcjogcmVxdWlyZSgnLi9TZW5zb3InKSxcclxuICAgIFNldEJvZHk6IHJlcXVpcmUoJy4vU2V0Qm9keScpLFxyXG4gICAgU2xlZXA6IHJlcXVpcmUoJy4vU2xlZXAnKSxcclxuICAgIFRyYW5zZm9ybTogcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcclxuICAgIFZlbG9jaXR5OiByZXF1aXJlKCcuL1ZlbG9jaXR5JylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/components/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/AFTER_UPDATE_EVENT.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/AFTER_UPDATE_EVENT.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.AfterUpdateEvent\r\n *\r\n * @property {number} timestamp - The Matter Engine `timing.timestamp` value for the event.\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics After Update Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance after the engine has updated and all collision events have resolved.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('afterupdate', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#AFTER_UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.AfterUpdateEvent} event - The Update Event object.\r\n */\r\nmodule.exports = 'afterupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQUZURVJfVVBEQVRFX0VWRU5ULmpzP2YzNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsSUFBSTtBQUNsQixjQUFjLE9BQU87QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhDQUE4QztBQUN6RDtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL0FGVEVSX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMuQWZ0ZXJVcGRhdGVFdmVudFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIE1hdHRlciBFbmdpbmUgYHRpbWluZy50aW1lc3RhbXBgIHZhbHVlIGZvciB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgQWZ0ZXIgVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgTWF0dGVyIFBoeXNpY3MgV29ybGQgaW5zdGFuY2UgYWZ0ZXIgdGhlIGVuZ2luZSBoYXMgdXBkYXRlZCBhbmQgYWxsIGNvbGxpc2lvbiBldmVudHMgaGF2ZSByZXNvbHZlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLm1hdHRlci53b3JsZC5vbignYWZ0ZXJ1cGRhdGUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNBRlRFUl9VUERBVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMuQWZ0ZXJVcGRhdGVFdmVudH0gZXZlbnQgLSBUaGUgVXBkYXRlIEV2ZW50IG9iamVjdC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FmdGVydXBkYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/AFTER_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/BEFORE_UPDATE_EVENT.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/BEFORE_UPDATE_EVENT.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.BeforeUpdateEvent\r\n *\r\n * @property {number} timestamp - The Matter Engine `timing.timestamp` value for the event.\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Before Update Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance right before all the collision processing takes place.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('beforeupdate', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#BEFORE_UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.BeforeUpdateEvent} event - The Update Event object.\r\n */\r\nmodule.exports = 'beforeupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQkVGT1JFX1VQREFURV9FVkVOVC5qcz9iODI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGNBQWMsT0FBTztBQUNyQixjQUFjLElBQUk7QUFDbEIsY0FBYyxPQUFPO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQ0FBK0M7QUFDMUQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2V2ZW50cy9CRUZPUkVfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cy5CZWZvcmVVcGRhdGVFdmVudFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIE1hdHRlciBFbmdpbmUgYHRpbWluZy50aW1lc3RhbXBgIHZhbHVlIGZvciB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgQmVmb3JlIFVwZGF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIE1hdHRlciBQaHlzaWNzIFdvcmxkIGluc3RhbmNlIHJpZ2h0IGJlZm9yZSBhbGwgdGhlIGNvbGxpc2lvbiBwcm9jZXNzaW5nIHRha2VzIHBsYWNlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZzogYHRoaXMubWF0dGVyLndvcmxkLm9uKCdiZWZvcmV1cGRhdGUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNCRUZPUkVfVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLkJlZm9yZVVwZGF0ZUV2ZW50fSBldmVudCAtIFRoZSBVcGRhdGUgRXZlbnQgb2JqZWN0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYmVmb3JldXBkYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/BEFORE_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/COLLISION_ACTIVE_EVENT.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/COLLISION_ACTIVE_EVENT.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.CollisionActiveEvent\r\n *\r\n * @property {array} pairs - A list of all affected pairs in the collision.\r\n * @property {number} timestamp - The Matter Engine `timing.timestamp` value for the event.\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Collision Active Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance after the engine has updated.\r\n * It provides a list of all pairs that are colliding in the current tick (if any).\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('collisionactive', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#COLLISION_ACTIVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.CollisionActiveEvent} event - The Collision Event object.\r\n * @param {MatterJS.Body} bodyA - The first body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n * @param {MatterJS.Body} bodyB - The second body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n */\r\nmodule.exports = 'collisionactive';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQ09MTElTSU9OX0FDVElWRV9FVkVOVC5qcz9lN2FkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckIsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsY0FBYztBQUN6QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL0NPTExJU0lPTl9BQ1RJVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLkNvbGxpc2lvbkFjdGl2ZUV2ZW50XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IHBhaXJzIC0gQSBsaXN0IG9mIGFsbCBhZmZlY3RlZCBwYWlycyBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIE1hdHRlciBFbmdpbmUgYHRpbWluZy50aW1lc3RhbXBgIHZhbHVlIGZvciB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgQ29sbGlzaW9uIEFjdGl2ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIE1hdHRlciBQaHlzaWNzIFdvcmxkIGluc3RhbmNlIGFmdGVyIHRoZSBlbmdpbmUgaGFzIHVwZGF0ZWQuXHJcbiAqIEl0IHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFpcnMgdGhhdCBhcmUgY29sbGlkaW5nIGluIHRoZSBjdXJyZW50IHRpY2sgKGlmIGFueSkuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5tYXR0ZXIud29ybGQub24oJ2NvbGxpc2lvbmFjdGl2ZScsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzI0NPTExJU0lPTl9BQ1RJVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMuQ29sbGlzaW9uQWN0aXZlRXZlbnR9IGV2ZW50IC0gVGhlIENvbGxpc2lvbiBFdmVudCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUEgLSBUaGUgZmlyc3QgYm9keSBvZiB0aGUgZmlyc3QgY29sbGlkaW5nIHBhaXIuIFRoZSBgZXZlbnQucGFpcnNgIGFycmF5IG1heSBjb250YWluIG1vcmUgY29sbGlkaW5nIGJvZGllcy5cclxuICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5QiAtIFRoZSBzZWNvbmQgYm9keSBvZiB0aGUgZmlyc3QgY29sbGlkaW5nIHBhaXIuIFRoZSBgZXZlbnQucGFpcnNgIGFycmF5IG1heSBjb250YWluIG1vcmUgY29sbGlkaW5nIGJvZGllcy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbGxpc2lvbmFjdGl2ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/COLLISION_ACTIVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/COLLISION_END_EVENT.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/COLLISION_END_EVENT.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.CollisionEndEvent\r\n *\r\n * @property {array} pairs - A list of all affected pairs in the collision.\r\n * @property {number} timestamp - The Matter Engine `timing.timestamp` value for the event.\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Collision End Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance after the engine has updated.\r\n * It provides a list of all pairs that have finished colliding in the current tick (if any).\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('collisionend', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#COLLISION_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.CollisionEndEvent} event - The Collision Event object.\r\n * @param {MatterJS.Body} bodyA - The first body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n * @param {MatterJS.Body} bodyB - The second body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n */\r\nmodule.exports = 'collisionend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQ09MTElTSU9OX0VORF9FVkVOVC5qcz80ZDhlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckIsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQ0FBK0M7QUFDMUQsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsY0FBYztBQUN6QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL0NPTExJU0lPTl9FTkRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLkNvbGxpc2lvbkVuZEV2ZW50XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IHBhaXJzIC0gQSBsaXN0IG9mIGFsbCBhZmZlY3RlZCBwYWlycyBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIE1hdHRlciBFbmdpbmUgYHRpbWluZy50aW1lc3RhbXBgIHZhbHVlIGZvciB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgQ29sbGlzaW9uIEVuZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIE1hdHRlciBQaHlzaWNzIFdvcmxkIGluc3RhbmNlIGFmdGVyIHRoZSBlbmdpbmUgaGFzIHVwZGF0ZWQuXHJcbiAqIEl0IHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFpcnMgdGhhdCBoYXZlIGZpbmlzaGVkIGNvbGxpZGluZyBpbiB0aGUgY3VycmVudCB0aWNrIChpZiBhbnkpLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZzogYHRoaXMubWF0dGVyLndvcmxkLm9uKCdjb2xsaXNpb25lbmQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNDT0xMSVNJT05fRU5EXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLkNvbGxpc2lvbkVuZEV2ZW50fSBldmVudCAtIFRoZSBDb2xsaXNpb24gRXZlbnQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHlBIC0gVGhlIGZpcnN0IGJvZHkgb2YgdGhlIGZpcnN0IGNvbGxpZGluZyBwYWlyLiBUaGUgYGV2ZW50LnBhaXJzYCBhcnJheSBtYXkgY29udGFpbiBtb3JlIGNvbGxpZGluZyBib2RpZXMuXHJcbiAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUIgLSBUaGUgc2Vjb25kIGJvZHkgb2YgdGhlIGZpcnN0IGNvbGxpZGluZyBwYWlyLiBUaGUgYGV2ZW50LnBhaXJzYCBhcnJheSBtYXkgY29udGFpbiBtb3JlIGNvbGxpZGluZyBib2RpZXMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjb2xsaXNpb25lbmQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/COLLISION_END_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/COLLISION_START_EVENT.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/COLLISION_START_EVENT.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.CollisionStartEvent\r\n *\r\n * @property {array} pairs - A list of all affected pairs in the collision.\r\n * @property {number} timestamp - The Matter Engine `timing.timestamp` value for the event.\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Collision Start Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance after the engine has updated.\r\n * It provides a list of all pairs that have started to collide in the current tick (if any).\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('collisionstart', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#COLLISION_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.CollisionStartEvent} event - The Collision Event object.\r\n * @param {MatterJS.Body} bodyA - The first body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n * @param {MatterJS.Body} bodyB - The second body of the first colliding pair. The `event.pairs` array may contain more colliding bodies.\r\n */\r\nmodule.exports = 'collisionstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQ09MTElTSU9OX1NUQVJUX0VWRU5ULmpzP2IwZWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGNBQWMsT0FBTztBQUNyQixjQUFjLElBQUk7QUFDbEIsY0FBYyxPQUFPO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlEQUFpRDtBQUM1RCxXQUFXLGNBQWM7QUFDekIsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvQ09MTElTSU9OX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cy5Db2xsaXNpb25TdGFydEV2ZW50XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IHBhaXJzIC0gQSBsaXN0IG9mIGFsbCBhZmZlY3RlZCBwYWlycyBpbiB0aGUgY29sbGlzaW9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIE1hdHRlciBFbmdpbmUgYHRpbWluZy50aW1lc3RhbXBgIHZhbHVlIGZvciB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgQ29sbGlzaW9uIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgTWF0dGVyIFBoeXNpY3MgV29ybGQgaW5zdGFuY2UgYWZ0ZXIgdGhlIGVuZ2luZSBoYXMgdXBkYXRlZC5cclxuICogSXQgcHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBwYWlycyB0aGF0IGhhdmUgc3RhcnRlZCB0byBjb2xsaWRlIGluIHRoZSBjdXJyZW50IHRpY2sgKGlmIGFueSkuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5tYXR0ZXIud29ybGQub24oJ2NvbGxpc2lvbnN0YXJ0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjQ09MTElTSU9OX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLkNvbGxpc2lvblN0YXJ0RXZlbnR9IGV2ZW50IC0gVGhlIENvbGxpc2lvbiBFdmVudCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7TWF0dGVySlMuQm9keX0gYm9keUEgLSBUaGUgZmlyc3QgYm9keSBvZiB0aGUgZmlyc3QgY29sbGlkaW5nIHBhaXIuIFRoZSBgZXZlbnQucGFpcnNgIGFycmF5IG1heSBjb250YWluIG1vcmUgY29sbGlkaW5nIGJvZGllcy5cclxuICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5QiAtIFRoZSBzZWNvbmQgYm9keSBvZiB0aGUgZmlyc3QgY29sbGlkaW5nIHBhaXIuIFRoZSBgZXZlbnQucGFpcnNgIGFycmF5IG1heSBjb250YWluIG1vcmUgY29sbGlkaW5nIGJvZGllcy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbGxpc2lvbnN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/COLLISION_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/DRAG_END_EVENT.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/DRAG_END_EVENT.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Matter Physics Drag End Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance when a Pointer Constraint\r\n * stops dragging a body.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('dragend', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#DRAG_END\r\n * @since 3.16.2\r\n * \r\n * @param {MatterJS.Body} body - The Body that has stopped being dragged. This is a Matter Body, not a Phaser Game Object.\r\n * @param {Phaser.Physics.Matter.PointerConstraint} constraint - The Pointer Constraint that was dragging the body.\r\n */\r\nmodule.exports = 'dragend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvRFJBR19FTkRfRVZFTlQuanM/MDkwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLHdDQUF3QztBQUNuRDtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL0RSQUdfRU5EX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIE1hdHRlciBQaHlzaWNzIERyYWcgRW5kIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgTWF0dGVyIFBoeXNpY3MgV29ybGQgaW5zdGFuY2Ugd2hlbiBhIFBvaW50ZXIgQ29uc3RyYWludFxyXG4gKiBzdG9wcyBkcmFnZ2luZyBhIGJvZHkuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5tYXR0ZXIud29ybGQub24oJ2RyYWdlbmQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNEUkFHX0VORFxyXG4gKiBAc2luY2UgMy4xNi4yXHJcbiAqIFxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHkgLSBUaGUgQm9keSB0aGF0IGhhcyBzdG9wcGVkIGJlaW5nIGRyYWdnZWQuIFRoaXMgaXMgYSBNYXR0ZXIgQm9keSwgbm90IGEgUGhhc2VyIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludH0gY29uc3RyYWludCAtIFRoZSBQb2ludGVyIENvbnN0cmFpbnQgdGhhdCB3YXMgZHJhZ2dpbmcgdGhlIGJvZHkuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnZW5kJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/DRAG_END_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/DRAG_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/DRAG_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Matter Physics Drag Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance when a Pointer Constraint\r\n * is actively dragging a body. It is emitted each time the pointer moves.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('drag', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#DRAG\r\n * @since 3.16.2\r\n * \r\n * @param {MatterJS.Body} body - The Body that is being dragged. This is a Matter Body, not a Phaser Game Object.\r\n * @param {Phaser.Physics.Matter.PointerConstraint} constraint - The Pointer Constraint that is dragging the body.\r\n */\r\nmodule.exports = 'drag';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvRFJBR19FVkVOVC5qcz80ZjJmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvRFJBR19FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBNYXR0ZXIgUGh5c2ljcyBEcmFnIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgTWF0dGVyIFBoeXNpY3MgV29ybGQgaW5zdGFuY2Ugd2hlbiBhIFBvaW50ZXIgQ29uc3RyYWludFxyXG4gKiBpcyBhY3RpdmVseSBkcmFnZ2luZyBhIGJvZHkuIEl0IGlzIGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBwb2ludGVyIG1vdmVzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZzogYHRoaXMubWF0dGVyLndvcmxkLm9uKCdkcmFnJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjRFJBR1xyXG4gKiBAc2luY2UgMy4xNi4yXHJcbiAqIFxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHkgLSBUaGUgQm9keSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFRoaXMgaXMgYSBNYXR0ZXIgQm9keSwgbm90IGEgUGhhc2VyIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludH0gY29uc3RyYWludCAtIFRoZSBQb2ludGVyIENvbnN0cmFpbnQgdGhhdCBpcyBkcmFnZ2luZyB0aGUgYm9keS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWcnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/DRAG_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/DRAG_START_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/DRAG_START_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Matter Physics Drag Start Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance when a Pointer Constraint\r\n * starts dragging a body.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('dragstart', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#DRAG_START\r\n * @since 3.16.2\r\n * \r\n * @param {MatterJS.Body} body - The Body that has started being dragged. This is a Matter Body, not a Phaser Game Object.\r\n * @param {MatterJS.Body} part - The part of the body that was clicked on.\r\n * @param {Phaser.Physics.Matter.PointerConstraint} constraint - The Pointer Constraint that is dragging the body.\r\n */\r\nmodule.exports = 'dragstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvRFJBR19TVEFSVF9FVkVOVC5qcz80MDcwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsY0FBYztBQUN6QixXQUFXLHdDQUF3QztBQUNuRDtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL0RSQUdfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgTWF0dGVyIFBoeXNpY3MgRHJhZyBTdGFydCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIE1hdHRlciBQaHlzaWNzIFdvcmxkIGluc3RhbmNlIHdoZW4gYSBQb2ludGVyIENvbnN0cmFpbnRcclxuICogc3RhcnRzIGRyYWdnaW5nIGEgYm9keS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLm1hdHRlci53b3JsZC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjRFJBR19TVEFSVFxyXG4gKiBAc2luY2UgMy4xNi4yXHJcbiAqIFxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHkgLSBUaGUgQm9keSB0aGF0IGhhcyBzdGFydGVkIGJlaW5nIGRyYWdnZWQuIFRoaXMgaXMgYSBNYXR0ZXIgQm9keSwgbm90IGEgUGhhc2VyIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IHBhcnQgLSBUaGUgcGFydCBvZiB0aGUgYm9keSB0aGF0IHdhcyBjbGlja2VkIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5QaHlzaWNzLk1hdHRlci5Qb2ludGVyQ29uc3RyYWludH0gY29uc3RyYWludCAtIFRoZSBQb2ludGVyIENvbnN0cmFpbnQgdGhhdCBpcyBkcmFnZ2luZyB0aGUgYm9keS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/DRAG_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/PAUSE_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/PAUSE_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Matter Physics World Pause Event.\r\n * \r\n * This event is dispatched by an Matter Physics World instance when it is paused.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('pause', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvUEFVU0VfRVZFTlQuanM/MzJlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2V2ZW50cy9QQVVTRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBNYXR0ZXIgUGh5c2ljcyBXb3JsZCBQYXVzZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBNYXR0ZXIgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IGlzIHBhdXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLm1hdHRlci53b3JsZC5vbigncGF1c2UnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50cyNQQVVTRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/RESUME_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/RESUME_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Matter Physics World Resume Event.\r\n * \r\n * This event is dispatched by an Matter Physics World instance when it resumes from a paused state.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('resume', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#RESUME\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvUkVTVU1FX0VWRU5ULmpzP2NjNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIE1hdHRlciBQaHlzaWNzIFdvcmxkIFJlc3VtZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBNYXR0ZXIgUGh5c2ljcyBXb3JsZCBpbnN0YW5jZSB3aGVuIGl0IHJlc3VtZXMgZnJvbSBhIHBhdXNlZCBzdGF0ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLm1hdHRlci53b3JsZC5vbigncmVzdW1lJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjUkVTVU1FXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVzdW1lJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/SLEEP_END_EVENT.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/SLEEP_END_EVENT.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.SleepEndEvent\r\n *\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Sleep End Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance when a Body stop sleeping.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('sleepend', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#SLEEP_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.SleepEndEvent} event - The Sleep Event object.\r\n * @param {MatterJS.Body} body - The body that has stopped sleeping.\r\n */\r\nmodule.exports = 'sleepend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvU0xFRVBfRU5EX0VWRU5ULmpzP2U4YjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkNBQTJDO0FBQ3RELFdBQVcsY0FBYztBQUN6QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvZXZlbnRzL1NMRUVQX0VORF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMuU2xlZXBFbmRFdmVudFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge2FueX0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIGV2ZW50LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIE1hdHRlciBQaHlzaWNzIFNsZWVwIEVuZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIE1hdHRlciBQaHlzaWNzIFdvcmxkIGluc3RhbmNlIHdoZW4gYSBCb2R5IHN0b3Agc2xlZXBpbmcuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5tYXR0ZXIud29ybGQub24oJ3NsZWVwZW5kJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5QaHlzaWNzLk1hdHRlci5FdmVudHMjU0xFRVBfRU5EXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLlNsZWVwRW5kRXZlbnR9IGV2ZW50IC0gVGhlIFNsZWVwIEV2ZW50IG9iamVjdC5cclxuICogQHBhcmFtIHtNYXR0ZXJKUy5Cb2R5fSBib2R5IC0gVGhlIGJvZHkgdGhhdCBoYXMgc3RvcHBlZCBzbGVlcGluZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3NsZWVwZW5kJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/SLEEP_END_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/SLEEP_START_EVENT.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/SLEEP_START_EVENT.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Physics.Matter.Events.SleepStartEvent\r\n *\r\n * @property {any} source - The source object of the event.\r\n * @property {string} name - The name of the event.\r\n */\r\n\r\n/**\r\n * The Matter Physics Sleep Start Event.\r\n * \r\n * This event is dispatched by a Matter Physics World instance when a Body goes to sleep.\r\n * \r\n * Listen to it from a Scene using: `this.matter.world.on('sleepstart', listener)`.\r\n *\r\n * @event Phaser.Physics.Matter.Events#SLEEP_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Physics.Matter.Events.SleepStartEvent} event - The Sleep Event object.\r\n * @param {MatterJS.Body} body - The body that has gone to sleep.\r\n */\r\nmodule.exports = 'sleepstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvU0xFRVBfU1RBUlRfRVZFTlQuanM/NmMzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLElBQUk7QUFDbEIsY0FBYyxPQUFPO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2Q0FBNkM7QUFDeEQsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvU0xFRVBfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLlNsZWVwU3RhcnRFdmVudFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge2FueX0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIGV2ZW50LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIE1hdHRlciBQaHlzaWNzIFNsZWVwIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgTWF0dGVyIFBoeXNpY3MgV29ybGQgaW5zdGFuY2Ugd2hlbiBhIEJvZHkgZ29lcyB0byBzbGVlcC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLm1hdHRlci53b3JsZC5vbignc2xlZXBzdGFydCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzI1NMRUVQX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuRXZlbnRzLlNsZWVwU3RhcnRFdmVudH0gZXZlbnQgLSBUaGUgU2xlZXAgRXZlbnQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge01hdHRlckpTLkJvZHl9IGJvZHkgLSBUaGUgYm9keSB0aGF0IGhhcyBnb25lIHRvIHNsZWVwLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc2xlZXBzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/SLEEP_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/events/index.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/events/index.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Matter.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    AFTER_UPDATE: __webpack_require__(/*! ./AFTER_UPDATE_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/AFTER_UPDATE_EVENT.js\"),\r\n    BEFORE_UPDATE: __webpack_require__(/*! ./BEFORE_UPDATE_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/BEFORE_UPDATE_EVENT.js\"),\r\n    COLLISION_ACTIVE: __webpack_require__(/*! ./COLLISION_ACTIVE_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/COLLISION_ACTIVE_EVENT.js\"),\r\n    COLLISION_END: __webpack_require__(/*! ./COLLISION_END_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/COLLISION_END_EVENT.js\"),\r\n    COLLISION_START: __webpack_require__(/*! ./COLLISION_START_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/COLLISION_START_EVENT.js\"),\r\n    DRAG_END: __webpack_require__(/*! ./DRAG_END_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/DRAG_END_EVENT.js\"),\r\n    DRAG: __webpack_require__(/*! ./DRAG_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/DRAG_EVENT.js\"),\r\n    DRAG_START: __webpack_require__(/*! ./DRAG_START_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/DRAG_START_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/PAUSE_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/RESUME_EVENT.js\"),\r\n    SLEEP_END: __webpack_require__(/*! ./SLEEP_END_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/SLEEP_END_EVENT.js\"),\r\n    SLEEP_START: __webpack_require__(/*! ./SLEEP_START_EVENT */ \"./node_modules/phaser/src/physics/matter-js/events/SLEEP_START_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9ldmVudHMvaW5kZXguanM/Y2U4ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLHNHQUFzQjtBQUNoRCxtQkFBbUIsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsOEdBQTBCO0FBQ3hELG1CQUFtQixtQkFBTyxDQUFDLHdHQUF1QjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDdEQsY0FBYyxtQkFBTyxDQUFDLDhGQUFrQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsc0ZBQWM7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsa0dBQW9CO0FBQzVDLFdBQVcsbUJBQU8sQ0FBQyx3RkFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsMEZBQWdCO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsb0dBQXFCOztBQUU5QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlBoeXNpY3MuTWF0dGVyLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFGVEVSX1VQREFURTogcmVxdWlyZSgnLi9BRlRFUl9VUERBVEVfRVZFTlQnKSxcclxuICAgIEJFRk9SRV9VUERBVEU6IHJlcXVpcmUoJy4vQkVGT1JFX1VQREFURV9FVkVOVCcpLFxyXG4gICAgQ09MTElTSU9OX0FDVElWRTogcmVxdWlyZSgnLi9DT0xMSVNJT05fQUNUSVZFX0VWRU5UJyksXHJcbiAgICBDT0xMSVNJT05fRU5EOiByZXF1aXJlKCcuL0NPTExJU0lPTl9FTkRfRVZFTlQnKSxcclxuICAgIENPTExJU0lPTl9TVEFSVDogcmVxdWlyZSgnLi9DT0xMSVNJT05fU1RBUlRfRVZFTlQnKSxcclxuICAgIERSQUdfRU5EOiByZXF1aXJlKCcuL0RSQUdfRU5EX0VWRU5UJyksXHJcbiAgICBEUkFHOiByZXF1aXJlKCcuL0RSQUdfRVZFTlQnKSxcclxuICAgIERSQUdfU1RBUlQ6IHJlcXVpcmUoJy4vRFJBR19TVEFSVF9FVkVOVCcpLFxyXG4gICAgUEFVU0U6IHJlcXVpcmUoJy4vUEFVU0VfRVZFTlQnKSxcclxuICAgIFJFU1VNRTogcmVxdWlyZSgnLi9SRVNVTUVfRVZFTlQnKSxcclxuICAgIFNMRUVQX0VORDogcmVxdWlyZSgnLi9TTEVFUF9FTkRfRVZFTlQnKSxcclxuICAgIFNMRUVQX1NUQVJUOiByZXF1aXJlKCcuL1NMRUVQX1NUQVJUX0VWRU5UJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/index.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Physics.Matter\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Factory: __webpack_require__(/*! ./Factory */ \"./node_modules/phaser/src/physics/matter-js/Factory.js\"),\r\n    Image: __webpack_require__(/*! ./MatterImage */ \"./node_modules/phaser/src/physics/matter-js/MatterImage.js\"),\r\n    Matter: __webpack_require__(/*! ./CustomMain */ \"./node_modules/phaser/src/physics/matter-js/CustomMain.js\"),\r\n    MatterPhysics: __webpack_require__(/*! ./MatterPhysics */ \"./node_modules/phaser/src/physics/matter-js/MatterPhysics.js\"),\r\n    PolyDecomp: __webpack_require__(/*! ./poly-decomp */ \"./node_modules/phaser/src/physics/matter-js/poly-decomp/index.js\"),\r\n    Sprite: __webpack_require__(/*! ./MatterSprite */ \"./node_modules/phaser/src/physics/matter-js/MatterSprite.js\"),\r\n    TileBody: __webpack_require__(/*! ./MatterTileBody */ \"./node_modules/phaser/src/physics/matter-js/MatterTileBody.js\"),\r\n    PhysicsEditorParser: __webpack_require__(/*! ./PhysicsEditorParser */ \"./node_modules/phaser/src/physics/matter-js/PhysicsEditorParser.js\"),\r\n    World: __webpack_require__(/*! ./World */ \"./node_modules/phaser/src/physics/matter-js/World.js\")\r\n\r\n};\r\n\r\n/**\r\n * @namespace MatterJS\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Body` module contains methods for creating and manipulating body models.\r\n * A `Matter.Body` is a rigid body that can be simulated by a `Matter.Engine`.\r\n * Factories for commonly used body configurations (such as rectangles, circles and other polygons) can be found in the module `Matter.Bodies`.\r\n *\r\n * @class MatterJS.Body\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Bodies` module contains factory methods for creating rigid body models \r\n * with commonly used body configurations (such as rectangles, circles and other polygons).\r\n *\r\n * @class MatterJS.Bodies\r\n * @since 3.18.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Composite` module contains methods for creating and manipulating composite bodies.\r\n * A composite body is a collection of `Matter.Body`, `Matter.Constraint` and other `Matter.Composite`, therefore composites form a tree structure.\r\n * It is important to use the functions in this module to modify composites, rather than directly modifying their properties.\r\n * Note that the `Matter.World` object is also a type of `Matter.Composite` and as such all composite methods here can also operate on a `Matter.World`.\r\n *\r\n * @class MatterJS.Composite\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.World` module contains methods for creating and manipulating the world composite.\r\n * A `Matter.World` is a `Matter.Composite` body, which is a collection of `Matter.Body`, `Matter.Constraint` and other `Matter.Composite`.\r\n * A `Matter.World` has a few additional properties including `gravity` and `bounds`.\r\n * It is important to use the functions in the `Matter.Composite` module to modify the world composite, rather than directly modifying its properties.\r\n * There are also a few methods here that alias those in `Matter.Composite` for easier readability.\r\n *\r\n * @class MatterJS.World\r\n * @extends MatterJS.Composite\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Constraint` module contains methods for creating and manipulating constraints.\r\n * Constraints are used for specifying that a fixed distance must be maintained between two bodies (or a body and a fixed world-space position).\r\n * The stiffness of constraints can be modified to create springs or elastic.\r\n *\r\n * @class MatterJS.Constraint\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Engine` module contains methods for creating and manipulating engines.\r\n * An engine is a controller that manages updating the simulation of the world.\r\n *\r\n * @class MatterJS.Engine\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The `Matter.Vertices` module contains methods for creating and manipulating sets of vertices.\r\n * A set of vertices is an array of `Matter.Vector` with additional indexing properties inserted by `Vertices.create`.\r\n * A `Matter.Body` maintains a set of vertices to represent the shape of the object (its convex hull).\r\n *\r\n * @class MatterJS.Vertices\r\n * @since 3.0.0\r\n */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9pbmRleC5qcz83ZWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHlFQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxpRkFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsK0VBQWM7QUFDbEMsbUJBQW1CLG1CQUFPLENBQUMscUZBQWlCO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLHVGQUFlO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxtRkFBZ0I7QUFDcEMsY0FBYyxtQkFBTyxDQUFDLHVGQUFrQjtBQUN4Qyx5QkFBeUIsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDeEQsV0FBVyxtQkFBTyxDQUFDLHFFQUFTOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGh5c2ljcy5NYXR0ZXJcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBGYWN0b3J5OiByZXF1aXJlKCcuL0ZhY3RvcnknKSxcclxuICAgIEltYWdlOiByZXF1aXJlKCcuL01hdHRlckltYWdlJyksXHJcbiAgICBNYXR0ZXI6IHJlcXVpcmUoJy4vQ3VzdG9tTWFpbicpLFxyXG4gICAgTWF0dGVyUGh5c2ljczogcmVxdWlyZSgnLi9NYXR0ZXJQaHlzaWNzJyksXHJcbiAgICBQb2x5RGVjb21wOiByZXF1aXJlKCcuL3BvbHktZGVjb21wJyksXHJcbiAgICBTcHJpdGU6IHJlcXVpcmUoJy4vTWF0dGVyU3ByaXRlJyksXHJcbiAgICBUaWxlQm9keTogcmVxdWlyZSgnLi9NYXR0ZXJUaWxlQm9keScpLFxyXG4gICAgUGh5c2ljc0VkaXRvclBhcnNlcjogcmVxdWlyZSgnLi9QaHlzaWNzRWRpdG9yUGFyc2VyJyksXHJcbiAgICBXb3JsZDogcmVxdWlyZSgnLi9Xb3JsZCcpXHJcblxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgTWF0dGVySlNcclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgYE1hdHRlci5Cb2R5YCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBib2R5IG1vZGVscy5cclxuICogQSBgTWF0dGVyLkJvZHlgIGlzIGEgcmlnaWQgYm9keSB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgYnkgYSBgTWF0dGVyLkVuZ2luZWAuXHJcbiAqIEZhY3RvcmllcyBmb3IgY29tbW9ubHkgdXNlZCBib2R5IGNvbmZpZ3VyYXRpb25zIChzdWNoIGFzIHJlY3RhbmdsZXMsIGNpcmNsZXMgYW5kIG90aGVyIHBvbHlnb25zKSBjYW4gYmUgZm91bmQgaW4gdGhlIG1vZHVsZSBgTWF0dGVyLkJvZGllc2AuXHJcbiAqXHJcbiAqIEBjbGFzcyBNYXR0ZXJKUy5Cb2R5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBgTWF0dGVyLkJvZGllc2AgbW9kdWxlIGNvbnRhaW5zIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgcmlnaWQgYm9keSBtb2RlbHMgXHJcbiAqIHdpdGggY29tbW9ubHkgdXNlZCBib2R5IGNvbmZpZ3VyYXRpb25zIChzdWNoIGFzIHJlY3RhbmdsZXMsIGNpcmNsZXMgYW5kIG90aGVyIHBvbHlnb25zKS5cclxuICpcclxuICogQGNsYXNzIE1hdHRlckpTLkJvZGllc1xyXG4gKiBAc2luY2UgMy4xOC4wXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIGBNYXR0ZXIuQ29tcG9zaXRlYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb21wb3NpdGUgYm9kaWVzLlxyXG4gKiBBIGNvbXBvc2l0ZSBib2R5IGlzIGEgY29sbGVjdGlvbiBvZiBgTWF0dGVyLkJvZHlgLCBgTWF0dGVyLkNvbnN0cmFpbnRgIGFuZCBvdGhlciBgTWF0dGVyLkNvbXBvc2l0ZWAsIHRoZXJlZm9yZSBjb21wb3NpdGVzIGZvcm0gYSB0cmVlIHN0cnVjdHVyZS5cclxuICogSXQgaXMgaW1wb3J0YW50IHRvIHVzZSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRvIG1vZGlmeSBjb21wb3NpdGVzLCByYXRoZXIgdGhhbiBkaXJlY3RseSBtb2RpZnlpbmcgdGhlaXIgcHJvcGVydGllcy5cclxuICogTm90ZSB0aGF0IHRoZSBgTWF0dGVyLldvcmxkYCBvYmplY3QgaXMgYWxzbyBhIHR5cGUgb2YgYE1hdHRlci5Db21wb3NpdGVgIGFuZCBhcyBzdWNoIGFsbCBjb21wb3NpdGUgbWV0aG9kcyBoZXJlIGNhbiBhbHNvIG9wZXJhdGUgb24gYSBgTWF0dGVyLldvcmxkYC5cclxuICpcclxuICogQGNsYXNzIE1hdHRlckpTLkNvbXBvc2l0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgYE1hdHRlci5Xb3JsZGAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhlIHdvcmxkIGNvbXBvc2l0ZS5cclxuICogQSBgTWF0dGVyLldvcmxkYCBpcyBhIGBNYXR0ZXIuQ29tcG9zaXRlYCBib2R5LCB3aGljaCBpcyBhIGNvbGxlY3Rpb24gb2YgYE1hdHRlci5Cb2R5YCwgYE1hdHRlci5Db25zdHJhaW50YCBhbmQgb3RoZXIgYE1hdHRlci5Db21wb3NpdGVgLlxyXG4gKiBBIGBNYXR0ZXIuV29ybGRgIGhhcyBhIGZldyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaW5jbHVkaW5nIGBncmF2aXR5YCBhbmQgYGJvdW5kc2AuXHJcbiAqIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYE1hdHRlci5Db21wb3NpdGVgIG1vZHVsZSB0byBtb2RpZnkgdGhlIHdvcmxkIGNvbXBvc2l0ZSwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW9kaWZ5aW5nIGl0cyBwcm9wZXJ0aWVzLlxyXG4gKiBUaGVyZSBhcmUgYWxzbyBhIGZldyBtZXRob2RzIGhlcmUgdGhhdCBhbGlhcyB0aG9zZSBpbiBgTWF0dGVyLkNvbXBvc2l0ZWAgZm9yIGVhc2llciByZWFkYWJpbGl0eS5cclxuICpcclxuICogQGNsYXNzIE1hdHRlckpTLldvcmxkXHJcbiAqIEBleHRlbmRzIE1hdHRlckpTLkNvbXBvc2l0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgYE1hdHRlci5Db25zdHJhaW50YCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb25zdHJhaW50cy5cclxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgdGhhdCBhIGZpeGVkIGRpc3RhbmNlIG11c3QgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIHR3byBib2RpZXMgKG9yIGEgYm9keSBhbmQgYSBmaXhlZCB3b3JsZC1zcGFjZSBwb3NpdGlvbikuXHJcbiAqIFRoZSBzdGlmZm5lc3Mgb2YgY29uc3RyYWludHMgY2FuIGJlIG1vZGlmaWVkIHRvIGNyZWF0ZSBzcHJpbmdzIG9yIGVsYXN0aWMuXHJcbiAqXHJcbiAqIEBjbGFzcyBNYXR0ZXJKUy5Db25zdHJhaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBgTWF0dGVyLkVuZ2luZWAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgZW5naW5lcy5cclxuICogQW4gZW5naW5lIGlzIGEgY29udHJvbGxlciB0aGF0IG1hbmFnZXMgdXBkYXRpbmcgdGhlIHNpbXVsYXRpb24gb2YgdGhlIHdvcmxkLlxyXG4gKlxyXG4gKiBAY2xhc3MgTWF0dGVySlMuRW5naW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBgTWF0dGVyLlZlcnRpY2VzYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzZXRzIG9mIHZlcnRpY2VzLlxyXG4gKiBBIHNldCBvZiB2ZXJ0aWNlcyBpcyBhbiBhcnJheSBvZiBgTWF0dGVyLlZlY3RvcmAgd2l0aCBhZGRpdGlvbmFsIGluZGV4aW5nIHByb3BlcnRpZXMgaW5zZXJ0ZWQgYnkgYFZlcnRpY2VzLmNyZWF0ZWAuXHJcbiAqIEEgYE1hdHRlci5Cb2R5YCBtYWludGFpbnMgYSBzZXQgb2YgdmVydGljZXMgdG8gcmVwcmVzZW50IHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IChpdHMgY29udmV4IGh1bGwpLlxyXG4gKlxyXG4gKiBAY2xhc3MgTWF0dGVySlMuVmVydGljZXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/body/Body.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/body/Body.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Body` module contains methods for creating and manipulating body models.\r\n* A `Matter.Body` is a rigid body that can be simulated by a `Matter.Engine`.\r\n* Factories for commonly used body configurations (such as rectangles, circles and other polygons) can be found in the module `Matter.Bodies`.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n\r\n* @class Body\r\n*/\r\n\r\nvar Body = {};\r\n\r\nmodule.exports = Body;\r\n\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Sleeping = __webpack_require__(/*! ../core/Sleeping */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Axes = __webpack_require__(/*! ../geometry/Axes */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js\");\r\n\r\n(function() {\r\n\r\n    Body._inertiaScale = 4;\r\n    Body._nextCollidingGroupId = 1;\r\n    Body._nextNonCollidingGroupId = -1;\r\n    Body._nextCategory = 0x0001;\r\n\r\n    /**\r\n     * Creates a new rigid body model. The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * All properties have default values, and many are pre-calculated automatically based on other properties.\r\n     * Vertices must be specified in clockwise order.\r\n     * See the properties section below for detailed information on what you can pass via the `options` object.\r\n     * @method create\r\n     * @param {} options\r\n     * @return {body} body\r\n     */\r\n    Body.create = function(options) {\r\n        var defaults = {\r\n            id: Common.nextId(),\r\n            type: 'body',\r\n            label: 'Body',\r\n            gameObject: null,\r\n            parts: [],\r\n            plugin: {},\r\n            angle: 0,\r\n            vertices: Vertices.fromPath('L 0 0 L 40 0 L 40 40 L 0 40'),\r\n            position: { x: 0, y: 0 },\r\n            force: { x: 0, y: 0 },\r\n            torque: 0,\r\n            positionImpulse: { x: 0, y: 0 },\r\n            previousPositionImpulse: { x: 0, y: 0 },\r\n            constraintImpulse: { x: 0, y: 0, angle: 0 },\r\n            totalContacts: 0,\r\n            speed: 0,\r\n            angularSpeed: 0,\r\n            velocity: { x: 0, y: 0 },\r\n            angularVelocity: 0,\r\n            isSensor: false,\r\n            isStatic: false,\r\n            isSleeping: false,\r\n            ignoreGravity: false,\r\n            ignorePointer: false,\r\n            motion: 0,\r\n            sleepThreshold: 60,\r\n            density: 0.001,\r\n            restitution: 0,\r\n            friction: 0.1,\r\n            frictionStatic: 0.5,\r\n            frictionAir: 0.01,\r\n            collisionFilter: {\r\n                category: 0x0001,\r\n                mask: 0xFFFFFFFF,\r\n                group: 0\r\n            },\r\n            slop: 0.05,\r\n            timeScale: 1,\r\n            render: {\r\n                visible: true,\r\n                opacity: 1,\r\n                sprite: {\r\n                    xScale: 1,\r\n                    yScale: 1,\r\n                    xOffset: 0,\r\n                    yOffset: 0\r\n                },\r\n                lineWidth: 0\r\n            },\r\n\r\n            events: null,\r\n            bounds: null,\r\n            chamfer: null,\r\n            circleRadius: 0,\r\n            positionPrev: null,\r\n            anglePrev: 0,\r\n            parent: null,\r\n\r\n            axes: null,\r\n            area: 0,\r\n            mass: 0,\r\n            inertia: 0,\r\n\r\n            _original: null\r\n        };\r\n\r\n        var body = Common.extend(defaults, options);\r\n\r\n        _initProperties(body, options);\r\n\r\n        return body;\r\n    };\r\n\r\n    /**\r\n     * Returns the next unique group index for which bodies will collide.\r\n     * If `isNonColliding` is `true`, returns the next unique group index for which bodies will _not_ collide.\r\n     * See `body.collisionFilter` for more information.\r\n     * @method nextGroup\r\n     * @param {bool} [isNonColliding=false]\r\n     * @return {Number} Unique group index\r\n     */\r\n    Body.nextGroup = function(isNonColliding) {\r\n        if (isNonColliding)\r\n            return Body._nextNonCollidingGroupId--;\r\n\r\n        return Body._nextCollidingGroupId++;\r\n    };\r\n\r\n    /**\r\n     * Returns the next unique category bitfield (starting after the initial default category `0x0001`).\r\n     * There are 32 available. See `body.collisionFilter` for more information.\r\n     * @method nextCategory\r\n     * @return {Number} Unique category bitfield\r\n     */\r\n    Body.nextCategory = function() {\r\n        Body._nextCategory = Body._nextCategory << 1;\r\n        return Body._nextCategory;\r\n    };\r\n\r\n    /**\r\n     * Initialises body properties.\r\n     * @method _initProperties\r\n     * @private\r\n     * @param {body} body\r\n     * @param {} [options]\r\n     */\r\n    var _initProperties = function(body, options) {\r\n        options = options || {};\r\n\r\n        // init required properties (order is important)\r\n        Body.set(body, {\r\n            bounds: body.bounds || Bounds.create(body.vertices),\r\n            positionPrev: body.positionPrev || Vector.clone(body.position),\r\n            anglePrev: body.anglePrev || body.angle,\r\n            vertices: body.vertices,\r\n            parts: body.parts || [body],\r\n            isStatic: body.isStatic,\r\n            isSleeping: body.isSleeping,\r\n            parent: body.parent || body\r\n        });\r\n\r\n        Vertices.rotate(body.vertices, body.angle, body.position);\r\n        Axes.rotate(body.axes, body.angle);\r\n        Bounds.update(body.bounds, body.vertices, body.velocity);\r\n\r\n        // allow options to override the automatically calculated properties\r\n        Body.set(body, {\r\n            axes: options.axes || body.axes,\r\n            area: options.area || body.area,\r\n            mass: options.mass || body.mass,\r\n            inertia: options.inertia || body.inertia\r\n        });\r\n\r\n        // render properties\r\n        var defaultFillStyle = (body.isStatic ? '#2e2b44' : Common.choose(['#006BA6', '#0496FF', '#FFBC42', '#D81159', '#8F2D56'])),\r\n            defaultStrokeStyle = '#000';\r\n        body.render.fillStyle = body.render.fillStyle || defaultFillStyle;\r\n        body.render.strokeStyle = body.render.strokeStyle || defaultStrokeStyle;\r\n        body.render.sprite.xOffset += -(body.bounds.min.x - body.position.x) / (body.bounds.max.x - body.bounds.min.x);\r\n        body.render.sprite.yOffset += -(body.bounds.min.y - body.position.y) / (body.bounds.max.y - body.bounds.min.y);\r\n    };\r\n\r\n    /**\r\n     * Given a property and a value (or map of), sets the property(s) on the body, using the appropriate setter functions if they exist.\r\n     * Prefer to use the actual setter functions in performance critical situations.\r\n     * @method set\r\n     * @param {body} body\r\n     * @param {} settings A property name (or map of properties and values) to set on the body.\r\n     * @param {} value The value to set if `settings` is a single property name.\r\n     */\r\n    Body.set = function(body, settings, value) {\r\n        var property;\r\n\r\n        if (typeof settings === 'string') {\r\n            property = settings;\r\n            settings = {};\r\n            settings[property] = value;\r\n        }\r\n\r\n        for (property in settings) {\r\n\r\n            if (!settings.hasOwnProperty(property))\r\n                continue;\r\n\r\n            value = settings[property];\r\n            switch (property) {\r\n\r\n            case 'isStatic':\r\n                Body.setStatic(body, value);\r\n                break;\r\n            case 'isSleeping':\r\n                Sleeping.set(body, value);\r\n                break;\r\n            case 'mass':\r\n                Body.setMass(body, value);\r\n                break;\r\n            case 'density':\r\n                Body.setDensity(body, value);\r\n                break;\r\n            case 'inertia':\r\n                Body.setInertia(body, value);\r\n                break;\r\n            case 'vertices':\r\n                Body.setVertices(body, value);\r\n                break;\r\n            case 'position':\r\n                Body.setPosition(body, value);\r\n                break;\r\n            case 'angle':\r\n                Body.setAngle(body, value);\r\n                break;\r\n            case 'velocity':\r\n                Body.setVelocity(body, value);\r\n                break;\r\n            case 'angularVelocity':\r\n                Body.setAngularVelocity(body, value);\r\n                break;\r\n            case 'parts':\r\n                Body.setParts(body, value);\r\n                break;\r\n            default:\r\n                body[property] = value;\r\n\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Sets the body as static, including isStatic flag and setting mass and inertia to Infinity.\r\n     * @method setStatic\r\n     * @param {body} body\r\n     * @param {bool} isStatic\r\n     */\r\n    Body.setStatic = function(body, isStatic) {\r\n        for (var i = 0; i < body.parts.length; i++) {\r\n            var part = body.parts[i];\r\n            part.isStatic = isStatic;\r\n\r\n            if (isStatic) {\r\n                part._original = {\r\n                    restitution: part.restitution,\r\n                    friction: part.friction,\r\n                    mass: part.mass,\r\n                    inertia: part.inertia,\r\n                    density: part.density,\r\n                    inverseMass: part.inverseMass,\r\n                    inverseInertia: part.inverseInertia\r\n                };\r\n\r\n                part.restitution = 0;\r\n                part.friction = 1;\r\n                part.mass = part.inertia = part.density = Infinity;\r\n                part.inverseMass = part.inverseInertia = 0;\r\n\r\n                part.positionPrev.x = part.position.x;\r\n                part.positionPrev.y = part.position.y;\r\n                part.anglePrev = part.angle;\r\n                part.angularVelocity = 0;\r\n                part.speed = 0;\r\n                part.angularSpeed = 0;\r\n                part.motion = 0;\r\n            } else if (part._original) {\r\n                part.restitution = part._original.restitution;\r\n                part.friction = part._original.friction;\r\n                part.mass = part._original.mass;\r\n                part.inertia = part._original.inertia;\r\n                part.density = part._original.density;\r\n                part.inverseMass = part._original.inverseMass;\r\n                part.inverseInertia = part._original.inverseInertia;\r\n\r\n                part._original = null;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Sets the mass of the body. Inverse mass, density and inertia are automatically updated to reflect the change.\r\n     * @method setMass\r\n     * @param {body} body\r\n     * @param {number} mass\r\n     */\r\n    Body.setMass = function(body, mass) {\r\n        var moment = body.inertia / (body.mass / 6);\r\n        body.inertia = moment * (mass / 6);\r\n        body.inverseInertia = 1 / body.inertia;\r\n\r\n        body.mass = mass;\r\n        body.inverseMass = 1 / body.mass;\r\n        body.density = body.mass / body.area;\r\n    };\r\n\r\n    /**\r\n     * Sets the density of the body. Mass and inertia are automatically updated to reflect the change.\r\n     * @method setDensity\r\n     * @param {body} body\r\n     * @param {number} density\r\n     */\r\n    Body.setDensity = function(body, density) {\r\n        Body.setMass(body, density * body.area);\r\n        body.density = density;\r\n    };\r\n\r\n    /**\r\n     * Sets the moment of inertia (i.e. second moment of area) of the body of the body. \r\n     * Inverse inertia is automatically updated to reflect the change. Mass is not changed.\r\n     * @method setInertia\r\n     * @param {body} body\r\n     * @param {number} inertia\r\n     */\r\n    Body.setInertia = function(body, inertia) {\r\n        body.inertia = inertia;\r\n        body.inverseInertia = 1 / body.inertia;\r\n    };\r\n\r\n    /**\r\n     * Sets the body's vertices and updates body properties accordingly, including inertia, area and mass (with respect to `body.density`).\r\n     * Vertices will be automatically transformed to be orientated around their centre of mass as the origin.\r\n     * They are then automatically translated to world space based on `body.position`.\r\n     *\r\n     * The `vertices` argument should be passed as an array of `Matter.Vector` points (or a `Matter.Vertices` array).\r\n     * Vertices must form a convex hull, concave hulls are not supported.\r\n     *\r\n     * @method setVertices\r\n     * @param {body} body\r\n     * @param {vector[]} vertices\r\n     */\r\n    Body.setVertices = function(body, vertices) {\r\n        // change vertices\r\n        if (vertices[0].body === body) {\r\n            body.vertices = vertices;\r\n        } else {\r\n            body.vertices = Vertices.create(vertices, body);\r\n        }\r\n\r\n        // update properties\r\n        body.axes = Axes.fromVertices(body.vertices);\r\n        body.area = Vertices.area(body.vertices);\r\n        Body.setMass(body, body.density * body.area);\r\n\r\n        // orient vertices around the centre of mass at origin (0, 0)\r\n        var centre = Vertices.centre(body.vertices);\r\n        Vertices.translate(body.vertices, centre, -1);\r\n\r\n        // update inertia while vertices are at origin (0, 0)\r\n        Body.setInertia(body, Body._inertiaScale * Vertices.inertia(body.vertices, body.mass));\r\n\r\n        // update geometry\r\n        Vertices.translate(body.vertices, body.position);\r\n        Bounds.update(body.bounds, body.vertices, body.velocity);\r\n    };\r\n\r\n    /**\r\n     * Sets the parts of the `body` and updates mass, inertia and centroid.\r\n     * Each part will have its parent set to `body`.\r\n     * By default the convex hull will be automatically computed and set on `body`, unless `autoHull` is set to `false.`\r\n     * Note that this method will ensure that the first part in `body.parts` will always be the `body`.\r\n     * @method setParts\r\n     * @param {body} body\r\n     * @param [body] parts\r\n     * @param {bool} [autoHull=true]\r\n     */\r\n    Body.setParts = function(body, parts, autoHull) {\r\n        var i;\r\n\r\n        // add all the parts, ensuring that the first part is always the parent body\r\n        parts = parts.slice(0);\r\n        body.parts.length = 0;\r\n        body.parts.push(body);\r\n        body.parent = body;\r\n\r\n        for (i = 0; i < parts.length; i++) {\r\n            var part = parts[i];\r\n            if (part !== body) {\r\n                part.parent = body;\r\n                body.parts.push(part);\r\n            }\r\n        }\r\n\r\n        if (body.parts.length === 1)\r\n            return;\r\n\r\n        autoHull = typeof autoHull !== 'undefined' ? autoHull : true;\r\n\r\n        // find the convex hull of all parts to set on the parent body\r\n        if (autoHull) {\r\n            var vertices = [];\r\n            for (i = 0; i < parts.length; i++) {\r\n                vertices = vertices.concat(parts[i].vertices);\r\n            }\r\n\r\n            Vertices.clockwiseSort(vertices);\r\n\r\n            var hull = Vertices.hull(vertices),\r\n                hullCentre = Vertices.centre(hull);\r\n\r\n            Body.setVertices(body, hull);\r\n            Vertices.translate(body.vertices, hullCentre);\r\n        }\r\n\r\n        // sum the properties of all compound parts of the parent body\r\n        var total = Body._totalProperties(body);\r\n\r\n        body.area = total.area;\r\n        body.parent = body;\r\n        body.position.x = total.centre.x;\r\n        body.position.y = total.centre.y;\r\n        body.positionPrev.x = total.centre.x;\r\n        body.positionPrev.y = total.centre.y;\r\n\r\n        Body.setMass(body, total.mass);\r\n        Body.setInertia(body, total.inertia);\r\n        Body.setPosition(body, total.centre);\r\n    };\r\n\r\n    /**\r\n     * Sets the position of the body instantly. Velocity, angle, force etc. are unchanged.\r\n     * @method setPosition\r\n     * @param {body} body\r\n     * @param {vector} position\r\n     */\r\n    Body.setPosition = function(body, position) {\r\n        var delta = Vector.sub(position, body.position);\r\n        body.positionPrev.x += delta.x;\r\n        body.positionPrev.y += delta.y;\r\n\r\n        for (var i = 0; i < body.parts.length; i++) {\r\n            var part = body.parts[i];\r\n            part.position.x += delta.x;\r\n            part.position.y += delta.y;\r\n            Vertices.translate(part.vertices, delta);\r\n            Bounds.update(part.bounds, part.vertices, body.velocity);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Sets the angle of the body instantly. Angular velocity, position, force etc. are unchanged.\r\n     * @method setAngle\r\n     * @param {body} body\r\n     * @param {number} angle\r\n     */\r\n    Body.setAngle = function(body, angle) {\r\n        var delta = angle - body.angle;\r\n        body.anglePrev += delta;\r\n\r\n        for (var i = 0; i < body.parts.length; i++) {\r\n            var part = body.parts[i];\r\n            part.angle += delta;\r\n            Vertices.rotate(part.vertices, delta, body.position);\r\n            Axes.rotate(part.axes, delta);\r\n            Bounds.update(part.bounds, part.vertices, body.velocity);\r\n            if (i > 0) {\r\n                part.angle += body.angularVelocity;\r\n                Vector.rotateAbout(part.position, delta, body.position, part.position);\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Sets the linear velocity of the body instantly. Position, angle, force etc. are unchanged. See also `Body.applyForce`.\r\n     * @method setVelocity\r\n     * @param {body} body\r\n     * @param {vector} velocity\r\n     */\r\n    Body.setVelocity = function(body, velocity) {\r\n        body.positionPrev.x = body.position.x - velocity.x;\r\n        body.positionPrev.y = body.position.y - velocity.y;\r\n        body.velocity.x = velocity.x;\r\n        body.velocity.y = velocity.y;\r\n        body.speed = Vector.magnitude(body.velocity);\r\n    };\r\n\r\n    /**\r\n     * Sets the angular velocity of the body instantly. Position, angle, force etc. are unchanged. See also `Body.applyForce`.\r\n     * @method setAngularVelocity\r\n     * @param {body} body\r\n     * @param {number} velocity\r\n     */\r\n    Body.setAngularVelocity = function(body, velocity) {\r\n        body.anglePrev = body.angle - velocity;\r\n        body.angularVelocity = velocity;\r\n        body.angularSpeed = Math.abs(body.angularVelocity);\r\n    };\r\n\r\n    /**\r\n     * Moves a body by a given vector relative to its current position, without imparting any velocity.\r\n     * @method translate\r\n     * @param {body} body\r\n     * @param {vector} translation\r\n     */\r\n    Body.translate = function(body, translation) {\r\n        Body.setPosition(body, Vector.add(body.position, translation));\r\n    };\r\n\r\n    /**\r\n     * Rotates a body by a given angle relative to its current angle, without imparting any angular velocity.\r\n     * @method rotate\r\n     * @param {body} body\r\n     * @param {number} rotation\r\n     * @param {vector} [point]\r\n     */\r\n    Body.rotate = function(body, rotation, point) {\r\n        if (!point) {\r\n            Body.setAngle(body, body.angle + rotation);\r\n        } else {\r\n            var cos = Math.cos(rotation),\r\n                sin = Math.sin(rotation),\r\n                dx = body.position.x - point.x,\r\n                dy = body.position.y - point.y;\r\n                \r\n            Body.setPosition(body, {\r\n                x: point.x + (dx * cos - dy * sin),\r\n                y: point.y + (dx * sin + dy * cos)\r\n            });\r\n\r\n            Body.setAngle(body, body.angle + rotation);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Scales the body, including updating physical properties (mass, area, axes, inertia), from a world-space point (default is body centre).\r\n     * @method scale\r\n     * @param {body} body\r\n     * @param {number} scaleX\r\n     * @param {number} scaleY\r\n     * @param {vector} [point]\r\n     */\r\n    Body.scale = function(body, scaleX, scaleY, point) {\r\n        var totalArea = 0,\r\n            totalInertia = 0;\r\n\r\n        point = point || body.position;\r\n\r\n        for (var i = 0; i < body.parts.length; i++) {\r\n            var part = body.parts[i];\r\n\r\n            // scale vertices\r\n            Vertices.scale(part.vertices, scaleX, scaleY, point);\r\n\r\n            // update properties\r\n            part.axes = Axes.fromVertices(part.vertices);\r\n            part.area = Vertices.area(part.vertices);\r\n            Body.setMass(part, body.density * part.area);\r\n\r\n            // update inertia (requires vertices to be at origin)\r\n            Vertices.translate(part.vertices, { x: -part.position.x, y: -part.position.y });\r\n            Body.setInertia(part, Body._inertiaScale * Vertices.inertia(part.vertices, part.mass));\r\n            Vertices.translate(part.vertices, { x: part.position.x, y: part.position.y });\r\n\r\n            if (i > 0) {\r\n                totalArea += part.area;\r\n                totalInertia += part.inertia;\r\n            }\r\n\r\n            // scale position\r\n            part.position.x = point.x + (part.position.x - point.x) * scaleX;\r\n            part.position.y = point.y + (part.position.y - point.y) * scaleY;\r\n\r\n            // update bounds\r\n            Bounds.update(part.bounds, part.vertices, body.velocity);\r\n        }\r\n\r\n        // handle parent body\r\n        if (body.parts.length > 1) {\r\n            body.area = totalArea;\r\n\r\n            if (!body.isStatic) {\r\n                Body.setMass(body, body.density * totalArea);\r\n                Body.setInertia(body, totalInertia);\r\n            }\r\n        }\r\n\r\n        // handle circles\r\n        if (body.circleRadius) { \r\n            if (scaleX === scaleY) {\r\n                body.circleRadius *= scaleX;\r\n            } else {\r\n                // body is no longer a circle\r\n                body.circleRadius = null;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Performs a simulation step for the given `body`, including updating position and angle using Verlet integration.\r\n     * @method update\r\n     * @param {body} body\r\n     * @param {number} deltaTime\r\n     * @param {number} timeScale\r\n     * @param {number} correction\r\n     */\r\n    Body.update = function(body, deltaTime, timeScale, correction) {\r\n        var deltaTimeSquared = Math.pow(deltaTime * timeScale * body.timeScale, 2);\r\n\r\n        // from the previous step\r\n        var frictionAir = 1 - body.frictionAir * timeScale * body.timeScale,\r\n            velocityPrevX = body.position.x - body.positionPrev.x,\r\n            velocityPrevY = body.position.y - body.positionPrev.y;\r\n\r\n        // update velocity with Verlet integration\r\n        body.velocity.x = (velocityPrevX * frictionAir * correction) + (body.force.x / body.mass) * deltaTimeSquared;\r\n        body.velocity.y = (velocityPrevY * frictionAir * correction) + (body.force.y / body.mass) * deltaTimeSquared;\r\n\r\n        body.positionPrev.x = body.position.x;\r\n        body.positionPrev.y = body.position.y;\r\n        body.position.x += body.velocity.x;\r\n        body.position.y += body.velocity.y;\r\n\r\n        // update angular velocity with Verlet integration\r\n        body.angularVelocity = ((body.angle - body.anglePrev) * frictionAir * correction) + (body.torque / body.inertia) * deltaTimeSquared;\r\n        body.anglePrev = body.angle;\r\n        body.angle += body.angularVelocity;\r\n\r\n        // track speed and acceleration\r\n        body.speed = Vector.magnitude(body.velocity);\r\n        body.angularSpeed = Math.abs(body.angularVelocity);\r\n\r\n        // transform the body geometry\r\n        for (var i = 0; i < body.parts.length; i++) {\r\n            var part = body.parts[i];\r\n\r\n            Vertices.translate(part.vertices, body.velocity);\r\n            \r\n            if (i > 0) {\r\n                part.position.x += body.velocity.x;\r\n                part.position.y += body.velocity.y;\r\n            }\r\n\r\n            if (body.angularVelocity !== 0) {\r\n                Vertices.rotate(part.vertices, body.angularVelocity, body.position);\r\n                Axes.rotate(part.axes, body.angularVelocity);\r\n                if (i > 0) {\r\n                    Vector.rotateAbout(part.position, body.angularVelocity, body.position, part.position);\r\n                }\r\n            }\r\n\r\n            Bounds.update(part.bounds, part.vertices, body.velocity);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Applies a force to a body from a given world-space position, including resulting torque.\r\n     * @method applyForce\r\n     * @param {body} body\r\n     * @param {vector} position\r\n     * @param {vector} force\r\n     */\r\n    Body.applyForce = function(body, position, force) {\r\n        body.force.x += force.x;\r\n        body.force.y += force.y;\r\n        var offset = { x: position.x - body.position.x, y: position.y - body.position.y };\r\n        body.torque += offset.x * force.y - offset.y * force.x;\r\n    };\r\n\r\n    /**\r\n     * Returns the sums of the properties of all compound parts of the parent body.\r\n     * @method _totalProperties\r\n     * @private\r\n     * @param {body} body\r\n     * @return {}\r\n     */\r\n    Body._totalProperties = function(body) {\r\n        // from equations at:\r\n        // https://ecourses.ou.edu/cgi-bin/ebook.cgi?doc=&topic=st&chap_sec=07.2&page=theory\r\n        // http://output.to/sideway/default.asp?qno=121100087\r\n\r\n        var properties = {\r\n            mass: 0,\r\n            area: 0,\r\n            inertia: 0,\r\n            centre: { x: 0, y: 0 }\r\n        };\r\n\r\n        // sum the properties of all compound parts of the parent body\r\n        for (var i = body.parts.length === 1 ? 0 : 1; i < body.parts.length; i++) {\r\n            var part = body.parts[i],\r\n                mass = part.mass !== Infinity ? part.mass : 1;\r\n\r\n            properties.mass += mass;\r\n            properties.area += part.area;\r\n            properties.inertia += part.inertia;\r\n            properties.centre = Vector.add(properties.centre, Vector.mult(part.position, mass));\r\n        }\r\n\r\n        properties.centre = Vector.div(properties.centre, properties.mass);\r\n\r\n        return properties;\r\n    };\r\n\r\n    /*\r\n    *\r\n    *  Events Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n    * Fired when a body starts sleeping (where `this` is the body).\r\n    *\r\n    * @event sleepStart\r\n    * @this {body} The body that has started sleeping\r\n    * @param {} event An event object\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired when a body ends sleeping (where `this` is the body).\r\n    *\r\n    * @event sleepEnd\r\n    * @this {body} The body that has ended sleeping\r\n    * @param {} event An event object\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /*\r\n    *\r\n    *  Properties Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n     * An integer `Number` uniquely identifying number generated in `Body.create` by `Common.nextId`.\r\n     *\r\n     * @property id\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `String` denoting the type of object.\r\n     *\r\n     * @property type\r\n     * @type string\r\n     * @default \"body\"\r\n     * @readOnly\r\n     */\r\n\r\n    /**\r\n     * An arbitrary `String` name to help the user identify and manage bodies.\r\n     *\r\n     * @property label\r\n     * @type string\r\n     * @default \"Body\"\r\n     */\r\n\r\n    /**\r\n     * An array of bodies that make up this body. \r\n     * The first body in the array must always be a self reference to the current body instance.\r\n     * All bodies in the `parts` array together form a single rigid compound body.\r\n     * Parts are allowed to overlap, have gaps or holes or even form concave bodies.\r\n     * Parts themselves should never be added to a `World`, only the parent body should be.\r\n     * Use `Body.setParts` when setting parts to ensure correct updates of all properties.\r\n     *\r\n     * @property parts\r\n     * @type body[]\r\n     */\r\n\r\n    /**\r\n     * An object reserved for storing plugin-specific properties.\r\n     *\r\n     * @property plugin\r\n     * @type {}\r\n     */\r\n\r\n    /**\r\n     * A self reference if the body is _not_ a part of another body.\r\n     * Otherwise this is a reference to the body that this is a part of.\r\n     * See `body.parts`.\r\n     *\r\n     * @property parent\r\n     * @type body\r\n     */\r\n\r\n    /**\r\n     * A `Number` specifying the angle of the body, in radians.\r\n     *\r\n     * @property angle\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * An array of `Vector` objects that specify the convex hull of the rigid body.\r\n     * These should be provided about the origin `(0, 0)`. E.g.\r\n     *\r\n     *     [{ x: 0, y: 0 }, { x: 25, y: 50 }, { x: 50, y: 0 }]\r\n     *\r\n     * When passed via `Body.create`, the vertices are translated relative to `body.position` (i.e. world-space, and constantly updated by `Body.update` during simulation).\r\n     * The `Vector` objects are also augmented with additional properties required for efficient collision detection. \r\n     *\r\n     * Other properties such as `inertia` and `bounds` are automatically calculated from the passed vertices (unless provided via `options`).\r\n     * Concave hulls are not currently supported. The module `Matter.Vertices` contains useful methods for working with vertices.\r\n     *\r\n     * @property vertices\r\n     * @type vector[]\r\n     */\r\n\r\n    /**\r\n     * A `Vector` that specifies the current world-space position of the body.\r\n     *\r\n     * @property position\r\n     * @type vector\r\n     * @default { x: 0, y: 0 }\r\n     */\r\n\r\n    /**\r\n     * A `Vector` that specifies the force to apply in the current step. It is zeroed after every `Body.update`. See also `Body.applyForce`.\r\n     *\r\n     * @property force\r\n     * @type vector\r\n     * @default { x: 0, y: 0 }\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the torque (turning force) to apply in the current step. It is zeroed after every `Body.update`.\r\n     *\r\n     * @property torque\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Number` that _measures_ the current speed of the body after the last `Body.update`. It is read-only and always positive (it's the magnitude of `body.velocity`).\r\n     *\r\n     * @readOnly\r\n     * @property speed\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Number` that _measures_ the current angular speed of the body after the last `Body.update`. It is read-only and always positive (it's the magnitude of `body.angularVelocity`).\r\n     *\r\n     * @readOnly\r\n     * @property angularSpeed\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Vector` that _measures_ the current velocity of the body after the last `Body.update`. It is read-only. \r\n     * If you need to modify a body's velocity directly, you should either apply a force or simply change the body's `position` (as the engine uses position-Verlet integration).\r\n     *\r\n     * @readOnly\r\n     * @property velocity\r\n     * @type vector\r\n     * @default { x: 0, y: 0 }\r\n     */\r\n\r\n    /**\r\n     * A `Number` that _measures_ the current angular velocity of the body after the last `Body.update`. It is read-only. \r\n     * If you need to modify a body's angular velocity directly, you should apply a torque or simply change the body's `angle` (as the engine uses position-Verlet integration).\r\n     *\r\n     * @readOnly\r\n     * @property angularVelocity\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A flag that indicates whether a body is considered static. A static body can never change position or angle and is completely fixed.\r\n     * If you need to set a body as static after its creation, you should use `Body.setStatic` as this requires more than just setting this flag.\r\n     *\r\n     * @property isStatic\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n\r\n    /**\r\n     * A flag that indicates whether a body is a sensor. Sensor triggers collision events, but doesn't react with colliding body physically.\r\n     *\r\n     * @property isSensor\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n\r\n    /**\r\n     * A flag that indicates whether the body is considered sleeping. A sleeping body acts similar to a static body, except it is only temporary and can be awoken.\r\n     * If you need to set a body as sleeping, you should use `Sleeping.set` as this requires more than just setting this flag.\r\n     *\r\n     * @property isSleeping\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n\r\n    /**\r\n     * A `Number` that _measures_ the amount of movement a body currently has (a combination of `speed` and `angularSpeed`). It is read-only and always positive.\r\n     * It is used and updated by the `Matter.Sleeping` module during simulation to decide if a body has come to rest.\r\n     *\r\n     * @readOnly\r\n     * @property motion\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the number of updates in which this body must have near-zero velocity before it is set as sleeping by the `Matter.Sleeping` module (if sleeping is enabled by the engine).\r\n     *\r\n     * @property sleepThreshold\r\n     * @type number\r\n     * @default 60\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the density of the body, that is its mass per unit area.\r\n     * If you pass the density via `Body.create` the `mass` property is automatically calculated for you based on the size (area) of the object.\r\n     * This is generally preferable to simply setting mass and allows for more intuitive definition of materials (e.g. rock has a higher density than wood).\r\n     *\r\n     * @property density\r\n     * @type number\r\n     * @default 0.001\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the mass of the body, although it may be more appropriate to specify the `density` property instead.\r\n     * If you modify this value, you must also modify the `body.inverseMass` property (`1 / mass`).\r\n     *\r\n     * @property mass\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the inverse mass of the body (`1 / mass`).\r\n     * If you modify this value, you must also modify the `body.mass` property.\r\n     *\r\n     * @property inverseMass\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the moment of inertia (i.e. second moment of area) of the body.\r\n     * It is automatically calculated from the given convex hull (`vertices` array) and density in `Body.create`.\r\n     * If you modify this value, you must also modify the `body.inverseInertia` property (`1 / inertia`).\r\n     *\r\n     * @property inertia\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the inverse moment of inertia of the body (`1 / inertia`).\r\n     * If you modify this value, you must also modify the `body.inertia` property.\r\n     *\r\n     * @property inverseInertia\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the restitution (elasticity) of the body. The value is always positive and is in the range `(0, 1)`.\r\n     * A value of `0` means collisions may be perfectly inelastic and no bouncing may occur. \r\n     * A value of `0.8` means the body may bounce back with approximately 80% of its kinetic energy.\r\n     * Note that collision response is based on _pairs_ of bodies, and that `restitution` values are _combined_ with the following formula:\r\n     *\r\n     *     Math.max(bodyA.restitution, bodyB.restitution)\r\n     *\r\n     * @property restitution\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the friction of the body. The value is always positive and is in the range `(0, 1)`.\r\n     * A value of `0` means that the body may slide indefinitely.\r\n     * A value of `1` means the body may come to a stop almost instantly after a force is applied.\r\n     *\r\n     * The effects of the value may be non-linear. \r\n     * High values may be unstable depending on the body.\r\n     * The engine uses a Coulomb friction model including static and kinetic friction.\r\n     * Note that collision response is based on _pairs_ of bodies, and that `friction` values are _combined_ with the following formula:\r\n     *\r\n     *     Math.min(bodyA.friction, bodyB.friction)\r\n     *\r\n     * @property friction\r\n     * @type number\r\n     * @default 0.1\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the static friction of the body (in the Coulomb friction model). \r\n     * A value of `0` means the body will never 'stick' when it is nearly stationary and only dynamic `friction` is used.\r\n     * The higher the value (e.g. `10`), the more force it will take to initially get the body moving when nearly stationary.\r\n     * This value is multiplied with the `friction` property to make it easier to change `friction` and maintain an appropriate amount of static friction.\r\n     *\r\n     * @property frictionStatic\r\n     * @type number\r\n     * @default 0.5\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the air friction of the body (air resistance). \r\n     * A value of `0` means the body will never slow as it moves through space.\r\n     * The higher the value, the faster a body slows when moving through space.\r\n     * The effects of the value are non-linear. \r\n     *\r\n     * @property frictionAir\r\n     * @type number\r\n     * @default 0.01\r\n     */\r\n\r\n    /**\r\n     * An `Object` that specifies the collision filtering properties of this body.\r\n     *\r\n     * Collisions between two bodies will obey the following rules:\r\n     * - If the two bodies have the same non-zero value of `collisionFilter.group`,\r\n     *   they will always collide if the value is positive, and they will never collide\r\n     *   if the value is negative.\r\n     * - If the two bodies have different values of `collisionFilter.group` or if one\r\n     *   (or both) of the bodies has a value of 0, then the category/mask rules apply as follows:\r\n     *\r\n     * Each body belongs to a collision category, given by `collisionFilter.category`. This\r\n     * value is used as a bit field and the category should have only one bit set, meaning that\r\n     * the value of this property is a power of two in the range [1, 2^31]. Thus, there are 32\r\n     * different collision categories available.\r\n     *\r\n     * Each body also defines a collision bitmask, given by `collisionFilter.mask` which specifies\r\n     * the categories it collides with (the value is the bitwise AND value of all these categories).\r\n     *\r\n     * Using the category/mask rules, two bodies `A` and `B` collide if each includes the other's\r\n     * category in its mask, i.e. `(categoryA & maskB) !== 0` and `(categoryB & maskA) !== 0`\r\n     * are both true.\r\n     *\r\n     * @property collisionFilter\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * An Integer `Number`, that specifies the collision group this body belongs to.\r\n     * See `body.collisionFilter` for more information.\r\n     *\r\n     * @property collisionFilter.group\r\n     * @type object\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A bit field that specifies the collision category this body belongs to.\r\n     * The category value should have only one bit set, for example `0x0001`.\r\n     * This means there are up to 32 unique collision categories available.\r\n     * See `body.collisionFilter` for more information.\r\n     *\r\n     * @property collisionFilter.category\r\n     * @type object\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * A bit mask that specifies the collision categories this body may collide with.\r\n     * See `body.collisionFilter` for more information.\r\n     *\r\n     * @property collisionFilter.mask\r\n     * @type object\r\n     * @default -1\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies a tolerance on how far a body is allowed to 'sink' or rotate into other bodies.\r\n     * Avoid changing this value unless you understand the purpose of `slop` in physics engines.\r\n     * The default should generally suffice, although very large bodies may require larger values for stable stacking.\r\n     *\r\n     * @property slop\r\n     * @type number\r\n     * @default 0.05\r\n     */\r\n\r\n    /**\r\n     * A `Number` that allows per-body time scaling, e.g. a force-field where bodies inside are in slow-motion, while others are at full speed.\r\n     *\r\n     * @property timeScale\r\n     * @type number\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * An `Object` that defines the rendering properties to be consumed by the module `Matter.Render`.\r\n     *\r\n     * @property render\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * A flag that indicates if the body should be rendered.\r\n     *\r\n     * @property render.visible\r\n     * @type boolean\r\n     * @default true\r\n     */\r\n\r\n    /**\r\n     * Sets the opacity to use when rendering.\r\n     *\r\n     * @property render.opacity\r\n     * @type number\r\n     * @default 1\r\n    */\r\n\r\n    /**\r\n     * An `Object` that defines the sprite properties to use when rendering, if any.\r\n     *\r\n     * @property render.sprite\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * An `String` that defines the path to the image to use as the sprite texture, if any.\r\n     *\r\n     * @property render.sprite.texture\r\n     * @type string\r\n     */\r\n     \r\n    /**\r\n     * A `Number` that defines the scaling in the x-axis for the sprite, if any.\r\n     *\r\n     * @property render.sprite.xScale\r\n     * @type number\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the scaling in the y-axis for the sprite, if any.\r\n     *\r\n     * @property render.sprite.yScale\r\n     * @type number\r\n     * @default 1\r\n     */\r\n\r\n     /**\r\n      * A `Number` that defines the offset in the x-axis for the sprite (normalised by texture width).\r\n      *\r\n      * @property render.sprite.xOffset\r\n      * @type number\r\n      * @default 0\r\n      */\r\n\r\n     /**\r\n      * A `Number` that defines the offset in the y-axis for the sprite (normalised by texture height).\r\n      *\r\n      * @property render.sprite.yOffset\r\n      * @type number\r\n      * @default 0\r\n      */\r\n\r\n    /**\r\n     * A `Number` that defines the line width to use when rendering the body outline (if a sprite is not defined).\r\n     * A value of `0` means no outline will be rendered.\r\n     *\r\n     * @property render.lineWidth\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `String` that defines the fill style to use when rendering the body (if a sprite is not defined).\r\n     * It is the same as when using a canvas, so it accepts CSS style property values.\r\n     *\r\n     * @property render.fillStyle\r\n     * @type string\r\n     * @default a random colour\r\n     */\r\n\r\n    /**\r\n     * A `String` that defines the stroke style to use when rendering the body outline (if a sprite is not defined).\r\n     * It is the same as when using a canvas, so it accepts CSS style property values.\r\n     *\r\n     * @property render.strokeStyle\r\n     * @type string\r\n     * @default a random colour\r\n     */\r\n\r\n    /**\r\n     * An array of unique axis vectors (edge normals) used for collision detection.\r\n     * These are automatically calculated from the given convex hull (`vertices` array) in `Body.create`.\r\n     * They are constantly updated by `Body.update` during the simulation.\r\n     *\r\n     * @property axes\r\n     * @type vector[]\r\n     */\r\n     \r\n    /**\r\n     * A `Number` that _measures_ the area of the body's convex hull, calculated at creation by `Body.create`.\r\n     *\r\n     * @property area\r\n     * @type string\r\n     * @default \r\n     */\r\n\r\n    /**\r\n     * A `Bounds` object that defines the AABB region for the body.\r\n     * It is automatically calculated from the given convex hull (`vertices` array) in `Body.create` and constantly updated by `Body.update` during simulation.\r\n     *\r\n     * @property bounds\r\n     * @type bounds\r\n     */\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvYm9keS9Cb2R5LmpzPzY2N2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGtHQUFzQjtBQUM3QyxhQUFhLG1CQUFPLENBQUMsOEZBQW9CO0FBQ3pDLGVBQWUsbUJBQU8sQ0FBQywwRkFBa0I7QUFDekMsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsOEZBQW9CO0FBQ3pDLFdBQVcsbUJBQU8sQ0FBQywwRkFBa0I7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSx1QkFBdUIsYUFBYTtBQUNwQyxvQkFBb0IsYUFBYTtBQUNqQztBQUNBLDhCQUE4QixhQUFhO0FBQzNDLHNDQUFzQyxhQUFhO0FBQ25ELGdDQUFnQyx1QkFBdUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qix1QkFBdUI7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUErQywyQ0FBMkM7QUFDMUY7QUFDQSwrQ0FBK0MseUNBQXlDOztBQUV4RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0M7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQSxxREFBcUQsdUJBQXVCO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEIsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEIsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhLEdBQUcsZUFBZSxHQUFHLGNBQWM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvYm9keS9Cb2R5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuQm9keWAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgYm9keSBtb2RlbHMuXHJcbiogQSBgTWF0dGVyLkJvZHlgIGlzIGEgcmlnaWQgYm9keSB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgYnkgYSBgTWF0dGVyLkVuZ2luZWAuXHJcbiogRmFjdG9yaWVzIGZvciBjb21tb25seSB1c2VkIGJvZHkgY29uZmlndXJhdGlvbnMgKHN1Y2ggYXMgcmVjdGFuZ2xlcywgY2lyY2xlcyBhbmQgb3RoZXIgcG9seWdvbnMpIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW9kdWxlIGBNYXR0ZXIuQm9kaWVzYC5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcblxyXG4qIEBjbGFzcyBCb2R5XHJcbiovXHJcblxyXG52YXIgQm9keSA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb2R5O1xyXG5cclxudmFyIFZlcnRpY2VzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvVmVydGljZXMnKTtcclxudmFyIFZlY3RvciA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlY3RvcicpO1xyXG52YXIgU2xlZXBpbmcgPSByZXF1aXJlKCcuLi9jb3JlL1NsZWVwaW5nJyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuLi9jb3JlL0NvbW1vbicpO1xyXG52YXIgQm91bmRzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvQm91bmRzJyk7XHJcbnZhciBBeGVzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvQXhlcycpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIEJvZHkuX2luZXJ0aWFTY2FsZSA9IDQ7XHJcbiAgICBCb2R5Ll9uZXh0Q29sbGlkaW5nR3JvdXBJZCA9IDE7XHJcbiAgICBCb2R5Ll9uZXh0Tm9uQ29sbGlkaW5nR3JvdXBJZCA9IC0xO1xyXG4gICAgQm9keS5fbmV4dENhdGVnb3J5ID0gMHgwMDAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyByaWdpZCBib2R5IG1vZGVsLiBUaGUgb3B0aW9ucyBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGFueSBwcm9wZXJ0aWVzIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy5cclxuICAgICAqIEFsbCBwcm9wZXJ0aWVzIGhhdmUgZGVmYXVsdCB2YWx1ZXMsIGFuZCBtYW55IGFyZSBwcmUtY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIG90aGVyIHByb3BlcnRpZXMuXHJcbiAgICAgKiBWZXJ0aWNlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXHJcbiAgICAgKiBTZWUgdGhlIHByb3BlcnRpZXMgc2VjdGlvbiBiZWxvdyBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCB5b3UgY2FuIHBhc3MgdmlhIHRoZSBgb3B0aW9uc2Agb2JqZWN0LlxyXG4gICAgICogQG1ldGhvZCBjcmVhdGVcclxuICAgICAqIEBwYXJhbSB7fSBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJuIHtib2R5fSBib2R5XHJcbiAgICAgKi9cclxuICAgIEJvZHkuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBkZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgaWQ6IENvbW1vbi5uZXh0SWQoKSxcclxuICAgICAgICAgICAgdHlwZTogJ2JvZHknLFxyXG4gICAgICAgICAgICBsYWJlbDogJ0JvZHknLFxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0OiBudWxsLFxyXG4gICAgICAgICAgICBwYXJ0czogW10sXHJcbiAgICAgICAgICAgIHBsdWdpbjoge30sXHJcbiAgICAgICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgICAgICB2ZXJ0aWNlczogVmVydGljZXMuZnJvbVBhdGgoJ0wgMCAwIEwgNDAgMCBMIDQwIDQwIEwgMCA0MCcpLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXHJcbiAgICAgICAgICAgIGZvcmNlOiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgICAgdG9ycXVlOiAwLFxyXG4gICAgICAgICAgICBwb3NpdGlvbkltcHVsc2U6IHsgeDogMCwgeTogMCB9LFxyXG4gICAgICAgICAgICBwcmV2aW91c1Bvc2l0aW9uSW1wdWxzZTogeyB4OiAwLCB5OiAwIH0sXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnRJbXB1bHNlOiB7IHg6IDAsIHk6IDAsIGFuZ2xlOiAwIH0sXHJcbiAgICAgICAgICAgIHRvdGFsQ29udGFjdHM6IDAsXHJcbiAgICAgICAgICAgIHNwZWVkOiAwLFxyXG4gICAgICAgICAgICBhbmd1bGFyU3BlZWQ6IDAsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgICAgYW5ndWxhclZlbG9jaXR5OiAwLFxyXG4gICAgICAgICAgICBpc1NlbnNvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNTbGVlcGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIGlnbm9yZUdyYXZpdHk6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZ25vcmVQb2ludGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgbW90aW9uOiAwLFxyXG4gICAgICAgICAgICBzbGVlcFRocmVzaG9sZDogNjAsXHJcbiAgICAgICAgICAgIGRlbnNpdHk6IDAuMDAxLFxyXG4gICAgICAgICAgICByZXN0aXR1dGlvbjogMCxcclxuICAgICAgICAgICAgZnJpY3Rpb246IDAuMSxcclxuICAgICAgICAgICAgZnJpY3Rpb25TdGF0aWM6IDAuNSxcclxuICAgICAgICAgICAgZnJpY3Rpb25BaXI6IDAuMDEsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbkZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IDB4MDAwMSxcclxuICAgICAgICAgICAgICAgIG1hc2s6IDB4RkZGRkZGRkYsXHJcbiAgICAgICAgICAgICAgICBncm91cDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzbG9wOiAwLjA1LFxyXG4gICAgICAgICAgICB0aW1lU2NhbGU6IDEsXHJcbiAgICAgICAgICAgIHJlbmRlcjoge1xyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICBzcHJpdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICB4U2NhbGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgeVNjYWxlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHhPZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgeU9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogMFxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgZXZlbnRzOiBudWxsLFxyXG4gICAgICAgICAgICBib3VuZHM6IG51bGwsXHJcbiAgICAgICAgICAgIGNoYW1mZXI6IG51bGwsXHJcbiAgICAgICAgICAgIGNpcmNsZVJhZGl1czogMCxcclxuICAgICAgICAgICAgcG9zaXRpb25QcmV2OiBudWxsLFxyXG4gICAgICAgICAgICBhbmdsZVByZXY6IDAsXHJcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcclxuXHJcbiAgICAgICAgICAgIGF4ZXM6IG51bGwsXHJcbiAgICAgICAgICAgIGFyZWE6IDAsXHJcbiAgICAgICAgICAgIG1hc3M6IDAsXHJcbiAgICAgICAgICAgIGluZXJ0aWE6IDAsXHJcblxyXG4gICAgICAgICAgICBfb3JpZ2luYWw6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYm9keSA9IENvbW1vbi5leHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBfaW5pdFByb3BlcnRpZXMoYm9keSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5leHQgdW5pcXVlIGdyb3VwIGluZGV4IGZvciB3aGljaCBib2RpZXMgd2lsbCBjb2xsaWRlLlxyXG4gICAgICogSWYgYGlzTm9uQ29sbGlkaW5nYCBpcyBgdHJ1ZWAsIHJldHVybnMgdGhlIG5leHQgdW5pcXVlIGdyb3VwIGluZGV4IGZvciB3aGljaCBib2RpZXMgd2lsbCBfbm90XyBjb2xsaWRlLlxyXG4gICAgICogU2VlIGBib2R5LmNvbGxpc2lvbkZpbHRlcmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBAbWV0aG9kIG5leHRHcm91cFxyXG4gICAgICogQHBhcmFtIHtib29sfSBbaXNOb25Db2xsaWRpbmc9ZmFsc2VdXHJcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFVuaXF1ZSBncm91cCBpbmRleFxyXG4gICAgICovXHJcbiAgICBCb2R5Lm5leHRHcm91cCA9IGZ1bmN0aW9uKGlzTm9uQ29sbGlkaW5nKSB7XHJcbiAgICAgICAgaWYgKGlzTm9uQ29sbGlkaW5nKVxyXG4gICAgICAgICAgICByZXR1cm4gQm9keS5fbmV4dE5vbkNvbGxpZGluZ0dyb3VwSWQtLTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJvZHkuX25leHRDb2xsaWRpbmdHcm91cElkKys7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbmV4dCB1bmlxdWUgY2F0ZWdvcnkgYml0ZmllbGQgKHN0YXJ0aW5nIGFmdGVyIHRoZSBpbml0aWFsIGRlZmF1bHQgY2F0ZWdvcnkgYDB4MDAwMWApLlxyXG4gICAgICogVGhlcmUgYXJlIDMyIGF2YWlsYWJsZS4gU2VlIGBib2R5LmNvbGxpc2lvbkZpbHRlcmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBAbWV0aG9kIG5leHRDYXRlZ29yeVxyXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBVbmlxdWUgY2F0ZWdvcnkgYml0ZmllbGRcclxuICAgICAqL1xyXG4gICAgQm9keS5uZXh0Q2F0ZWdvcnkgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBCb2R5Ll9uZXh0Q2F0ZWdvcnkgPSBCb2R5Ll9uZXh0Q2F0ZWdvcnkgPDwgMTtcclxuICAgICAgICByZXR1cm4gQm9keS5fbmV4dENhdGVnb3J5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpc2VzIGJvZHkgcHJvcGVydGllcy5cclxuICAgICAqIEBtZXRob2QgX2luaXRQcm9wZXJ0aWVzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5XHJcbiAgICAgKiBAcGFyYW0ge30gW29wdGlvbnNdXHJcbiAgICAgKi9cclxuICAgIHZhciBfaW5pdFByb3BlcnRpZXMgPSBmdW5jdGlvbihib2R5LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICAgIC8vIGluaXQgcmVxdWlyZWQgcHJvcGVydGllcyAob3JkZXIgaXMgaW1wb3J0YW50KVxyXG4gICAgICAgIEJvZHkuc2V0KGJvZHksIHtcclxuICAgICAgICAgICAgYm91bmRzOiBib2R5LmJvdW5kcyB8fCBCb3VuZHMuY3JlYXRlKGJvZHkudmVydGljZXMpLFxyXG4gICAgICAgICAgICBwb3NpdGlvblByZXY6IGJvZHkucG9zaXRpb25QcmV2IHx8IFZlY3Rvci5jbG9uZShib2R5LnBvc2l0aW9uKSxcclxuICAgICAgICAgICAgYW5nbGVQcmV2OiBib2R5LmFuZ2xlUHJldiB8fCBib2R5LmFuZ2xlLFxyXG4gICAgICAgICAgICB2ZXJ0aWNlczogYm9keS52ZXJ0aWNlcyxcclxuICAgICAgICAgICAgcGFydHM6IGJvZHkucGFydHMgfHwgW2JvZHldLFxyXG4gICAgICAgICAgICBpc1N0YXRpYzogYm9keS5pc1N0YXRpYyxcclxuICAgICAgICAgICAgaXNTbGVlcGluZzogYm9keS5pc1NsZWVwaW5nLFxyXG4gICAgICAgICAgICBwYXJlbnQ6IGJvZHkucGFyZW50IHx8IGJvZHlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgVmVydGljZXMucm90YXRlKGJvZHkudmVydGljZXMsIGJvZHkuYW5nbGUsIGJvZHkucG9zaXRpb24pO1xyXG4gICAgICAgIEF4ZXMucm90YXRlKGJvZHkuYXhlcywgYm9keS5hbmdsZSk7XHJcbiAgICAgICAgQm91bmRzLnVwZGF0ZShib2R5LmJvdW5kcywgYm9keS52ZXJ0aWNlcywgYm9keS52ZWxvY2l0eSk7XHJcblxyXG4gICAgICAgIC8vIGFsbG93IG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgQm9keS5zZXQoYm9keSwge1xyXG4gICAgICAgICAgICBheGVzOiBvcHRpb25zLmF4ZXMgfHwgYm9keS5heGVzLFxyXG4gICAgICAgICAgICBhcmVhOiBvcHRpb25zLmFyZWEgfHwgYm9keS5hcmVhLFxyXG4gICAgICAgICAgICBtYXNzOiBvcHRpb25zLm1hc3MgfHwgYm9keS5tYXNzLFxyXG4gICAgICAgICAgICBpbmVydGlhOiBvcHRpb25zLmluZXJ0aWEgfHwgYm9keS5pbmVydGlhXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdmFyIGRlZmF1bHRGaWxsU3R5bGUgPSAoYm9keS5pc1N0YXRpYyA/ICcjMmUyYjQ0JyA6IENvbW1vbi5jaG9vc2UoWycjMDA2QkE2JywgJyMwNDk2RkYnLCAnI0ZGQkM0MicsICcjRDgxMTU5JywgJyM4RjJENTYnXSkpLFxyXG4gICAgICAgICAgICBkZWZhdWx0U3Ryb2tlU3R5bGUgPSAnIzAwMCc7XHJcbiAgICAgICAgYm9keS5yZW5kZXIuZmlsbFN0eWxlID0gYm9keS5yZW5kZXIuZmlsbFN0eWxlIHx8IGRlZmF1bHRGaWxsU3R5bGU7XHJcbiAgICAgICAgYm9keS5yZW5kZXIuc3Ryb2tlU3R5bGUgPSBib2R5LnJlbmRlci5zdHJva2VTdHlsZSB8fCBkZWZhdWx0U3Ryb2tlU3R5bGU7XHJcbiAgICAgICAgYm9keS5yZW5kZXIuc3ByaXRlLnhPZmZzZXQgKz0gLShib2R5LmJvdW5kcy5taW4ueCAtIGJvZHkucG9zaXRpb24ueCkgLyAoYm9keS5ib3VuZHMubWF4LnggLSBib2R5LmJvdW5kcy5taW4ueCk7XHJcbiAgICAgICAgYm9keS5yZW5kZXIuc3ByaXRlLnlPZmZzZXQgKz0gLShib2R5LmJvdW5kcy5taW4ueSAtIGJvZHkucG9zaXRpb24ueSkgLyAoYm9keS5ib3VuZHMubWF4LnkgLSBib2R5LmJvdW5kcy5taW4ueSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwcm9wZXJ0eSBhbmQgYSB2YWx1ZSAob3IgbWFwIG9mKSwgc2V0cyB0aGUgcHJvcGVydHkocykgb24gdGhlIGJvZHksIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBzZXR0ZXIgZnVuY3Rpb25zIGlmIHRoZXkgZXhpc3QuXHJcbiAgICAgKiBQcmVmZXIgdG8gdXNlIHRoZSBhY3R1YWwgc2V0dGVyIGZ1bmN0aW9ucyBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBzaXR1YXRpb25zLlxyXG4gICAgICogQG1ldGhvZCBzZXRcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHt9IHNldHRpbmdzIEEgcHJvcGVydHkgbmFtZSAob3IgbWFwIG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcykgdG8gc2V0IG9uIHRoZSBib2R5LlxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgaWYgYHNldHRpbmdzYCBpcyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lLlxyXG4gICAgICovXHJcbiAgICBCb2R5LnNldCA9IGZ1bmN0aW9uKGJvZHksIHNldHRpbmdzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0eTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcHJvcGVydHkgPSBzZXR0aW5ncztcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSB7fTtcclxuICAgICAgICAgICAgc2V0dGluZ3NbcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHByb3BlcnR5IGluIHNldHRpbmdzKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1twcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2lzU3RhdGljJzpcclxuICAgICAgICAgICAgICAgIEJvZHkuc2V0U3RhdGljKGJvZHksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpc1NsZWVwaW5nJzpcclxuICAgICAgICAgICAgICAgIFNsZWVwaW5nLnNldChib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbWFzcyc6XHJcbiAgICAgICAgICAgICAgICBCb2R5LnNldE1hc3MoYm9keSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RlbnNpdHknOlxyXG4gICAgICAgICAgICAgICAgQm9keS5zZXREZW5zaXR5KGJvZHksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpbmVydGlhJzpcclxuICAgICAgICAgICAgICAgIEJvZHkuc2V0SW5lcnRpYShib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndmVydGljZXMnOlxyXG4gICAgICAgICAgICAgICAgQm9keS5zZXRWZXJ0aWNlcyhib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncG9zaXRpb24nOlxyXG4gICAgICAgICAgICAgICAgQm9keS5zZXRQb3NpdGlvbihib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYW5nbGUnOlxyXG4gICAgICAgICAgICAgICAgQm9keS5zZXRBbmdsZShib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndmVsb2NpdHknOlxyXG4gICAgICAgICAgICAgICAgQm9keS5zZXRWZWxvY2l0eShib2R5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYW5ndWxhclZlbG9jaXR5JzpcclxuICAgICAgICAgICAgICAgIEJvZHkuc2V0QW5ndWxhclZlbG9jaXR5KGJvZHksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwYXJ0cyc6XHJcbiAgICAgICAgICAgICAgICBCb2R5LnNldFBhcnRzKGJvZHksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYm9keVtwcm9wZXJ0eV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm9keSBhcyBzdGF0aWMsIGluY2x1ZGluZyBpc1N0YXRpYyBmbGFnIGFuZCBzZXR0aW5nIG1hc3MgYW5kIGluZXJ0aWEgdG8gSW5maW5pdHkuXHJcbiAgICAgKiBAbWV0aG9kIHNldFN0YXRpY1xyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2x9IGlzU3RhdGljXHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0U3RhdGljID0gZnVuY3Rpb24oYm9keSwgaXNTdGF0aWMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkucGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnQgPSBib2R5LnBhcnRzW2ldO1xyXG4gICAgICAgICAgICBwYXJ0LmlzU3RhdGljID0gaXNTdGF0aWM7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIHBhcnQuX29yaWdpbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3RpdHV0aW9uOiBwYXJ0LnJlc3RpdHV0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyaWN0aW9uOiBwYXJ0LmZyaWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hc3M6IHBhcnQubWFzcyxcclxuICAgICAgICAgICAgICAgICAgICBpbmVydGlhOiBwYXJ0LmluZXJ0aWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVuc2l0eTogcGFydC5kZW5zaXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIGludmVyc2VNYXNzOiBwYXJ0LmludmVyc2VNYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgIGludmVyc2VJbmVydGlhOiBwYXJ0LmludmVyc2VJbmVydGlhXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcnQucmVzdGl0dXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgcGFydC5mcmljdGlvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBwYXJ0Lm1hc3MgPSBwYXJ0LmluZXJ0aWEgPSBwYXJ0LmRlbnNpdHkgPSBJbmZpbml0eTtcclxuICAgICAgICAgICAgICAgIHBhcnQuaW52ZXJzZU1hc3MgPSBwYXJ0LmludmVyc2VJbmVydGlhID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBwYXJ0LnBvc2l0aW9uUHJldi54ID0gcGFydC5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICAgICAgcGFydC5wb3NpdGlvblByZXYueSA9IHBhcnQucG9zaXRpb24ueTtcclxuICAgICAgICAgICAgICAgIHBhcnQuYW5nbGVQcmV2ID0gcGFydC5hbmdsZTtcclxuICAgICAgICAgICAgICAgIHBhcnQuYW5ndWxhclZlbG9jaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIHBhcnQuc3BlZWQgPSAwO1xyXG4gICAgICAgICAgICAgICAgcGFydC5hbmd1bGFyU3BlZWQgPSAwO1xyXG4gICAgICAgICAgICAgICAgcGFydC5tb3Rpb24gPSAwO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQuX29yaWdpbmFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0LnJlc3RpdHV0aW9uID0gcGFydC5fb3JpZ2luYWwucmVzdGl0dXRpb247XHJcbiAgICAgICAgICAgICAgICBwYXJ0LmZyaWN0aW9uID0gcGFydC5fb3JpZ2luYWwuZnJpY3Rpb247XHJcbiAgICAgICAgICAgICAgICBwYXJ0Lm1hc3MgPSBwYXJ0Ll9vcmlnaW5hbC5tYXNzO1xyXG4gICAgICAgICAgICAgICAgcGFydC5pbmVydGlhID0gcGFydC5fb3JpZ2luYWwuaW5lcnRpYTtcclxuICAgICAgICAgICAgICAgIHBhcnQuZGVuc2l0eSA9IHBhcnQuX29yaWdpbmFsLmRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0LmludmVyc2VNYXNzID0gcGFydC5fb3JpZ2luYWwuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJ0LmludmVyc2VJbmVydGlhID0gcGFydC5fb3JpZ2luYWwuaW52ZXJzZUluZXJ0aWE7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFydC5fb3JpZ2luYWwgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1hc3Mgb2YgdGhlIGJvZHkuIEludmVyc2UgbWFzcywgZGVuc2l0eSBhbmQgaW5lcnRpYSBhcmUgYXV0b21hdGljYWxseSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZS5cclxuICAgICAqIEBtZXRob2Qgc2V0TWFzc1xyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWFzc1xyXG4gICAgICovXHJcbiAgICBCb2R5LnNldE1hc3MgPSBmdW5jdGlvbihib2R5LCBtYXNzKSB7XHJcbiAgICAgICAgdmFyIG1vbWVudCA9IGJvZHkuaW5lcnRpYSAvIChib2R5Lm1hc3MgLyA2KTtcclxuICAgICAgICBib2R5LmluZXJ0aWEgPSBtb21lbnQgKiAobWFzcyAvIDYpO1xyXG4gICAgICAgIGJvZHkuaW52ZXJzZUluZXJ0aWEgPSAxIC8gYm9keS5pbmVydGlhO1xyXG5cclxuICAgICAgICBib2R5Lm1hc3MgPSBtYXNzO1xyXG4gICAgICAgIGJvZHkuaW52ZXJzZU1hc3MgPSAxIC8gYm9keS5tYXNzO1xyXG4gICAgICAgIGJvZHkuZGVuc2l0eSA9IGJvZHkubWFzcyAvIGJvZHkuYXJlYTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZW5zaXR5IG9mIHRoZSBib2R5LiBNYXNzIGFuZCBpbmVydGlhIGFyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlLlxyXG4gICAgICogQG1ldGhvZCBzZXREZW5zaXR5XHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZW5zaXR5XHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0RGVuc2l0eSA9IGZ1bmN0aW9uKGJvZHksIGRlbnNpdHkpIHtcclxuICAgICAgICBCb2R5LnNldE1hc3MoYm9keSwgZGVuc2l0eSAqIGJvZHkuYXJlYSk7XHJcbiAgICAgICAgYm9keS5kZW5zaXR5ID0gZGVuc2l0eTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtb21lbnQgb2YgaW5lcnRpYSAoaS5lLiBzZWNvbmQgbW9tZW50IG9mIGFyZWEpIG9mIHRoZSBib2R5IG9mIHRoZSBib2R5LiBcclxuICAgICAqIEludmVyc2UgaW5lcnRpYSBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlLiBNYXNzIGlzIG5vdCBjaGFuZ2VkLlxyXG4gICAgICogQG1ldGhvZCBzZXRJbmVydGlhXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmVydGlhXHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0SW5lcnRpYSA9IGZ1bmN0aW9uKGJvZHksIGluZXJ0aWEpIHtcclxuICAgICAgICBib2R5LmluZXJ0aWEgPSBpbmVydGlhO1xyXG4gICAgICAgIGJvZHkuaW52ZXJzZUluZXJ0aWEgPSAxIC8gYm9keS5pbmVydGlhO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJvZHkncyB2ZXJ0aWNlcyBhbmQgdXBkYXRlcyBib2R5IHByb3BlcnRpZXMgYWNjb3JkaW5nbHksIGluY2x1ZGluZyBpbmVydGlhLCBhcmVhIGFuZCBtYXNzICh3aXRoIHJlc3BlY3QgdG8gYGJvZHkuZGVuc2l0eWApLlxyXG4gICAgICogVmVydGljZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIHRvIGJlIG9yaWVudGF0ZWQgYXJvdW5kIHRoZWlyIGNlbnRyZSBvZiBtYXNzIGFzIHRoZSBvcmlnaW4uXHJcbiAgICAgKiBUaGV5IGFyZSB0aGVuIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCB0byB3b3JsZCBzcGFjZSBiYXNlZCBvbiBgYm9keS5wb3NpdGlvbmAuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGB2ZXJ0aWNlc2AgYXJndW1lbnQgc2hvdWxkIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBgTWF0dGVyLlZlY3RvcmAgcG9pbnRzIChvciBhIGBNYXR0ZXIuVmVydGljZXNgIGFycmF5KS5cclxuICAgICAqIFZlcnRpY2VzIG11c3QgZm9ybSBhIGNvbnZleCBodWxsLCBjb25jYXZlIGh1bGxzIGFyZSBub3Qgc3VwcG9ydGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2Qgc2V0VmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3JbXX0gdmVydGljZXNcclxuICAgICAqL1xyXG4gICAgQm9keS5zZXRWZXJ0aWNlcyA9IGZ1bmN0aW9uKGJvZHksIHZlcnRpY2VzKSB7XHJcbiAgICAgICAgLy8gY2hhbmdlIHZlcnRpY2VzXHJcbiAgICAgICAgaWYgKHZlcnRpY2VzWzBdLmJvZHkgPT09IGJvZHkpIHtcclxuICAgICAgICAgICAgYm9keS52ZXJ0aWNlcyA9IHZlcnRpY2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJvZHkudmVydGljZXMgPSBWZXJ0aWNlcy5jcmVhdGUodmVydGljZXMsIGJvZHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHByb3BlcnRpZXNcclxuICAgICAgICBib2R5LmF4ZXMgPSBBeGVzLmZyb21WZXJ0aWNlcyhib2R5LnZlcnRpY2VzKTtcclxuICAgICAgICBib2R5LmFyZWEgPSBWZXJ0aWNlcy5hcmVhKGJvZHkudmVydGljZXMpO1xyXG4gICAgICAgIEJvZHkuc2V0TWFzcyhib2R5LCBib2R5LmRlbnNpdHkgKiBib2R5LmFyZWEpO1xyXG5cclxuICAgICAgICAvLyBvcmllbnQgdmVydGljZXMgYXJvdW5kIHRoZSBjZW50cmUgb2YgbWFzcyBhdCBvcmlnaW4gKDAsIDApXHJcbiAgICAgICAgdmFyIGNlbnRyZSA9IFZlcnRpY2VzLmNlbnRyZShib2R5LnZlcnRpY2VzKTtcclxuICAgICAgICBWZXJ0aWNlcy50cmFuc2xhdGUoYm9keS52ZXJ0aWNlcywgY2VudHJlLCAtMSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBpbmVydGlhIHdoaWxlIHZlcnRpY2VzIGFyZSBhdCBvcmlnaW4gKDAsIDApXHJcbiAgICAgICAgQm9keS5zZXRJbmVydGlhKGJvZHksIEJvZHkuX2luZXJ0aWFTY2FsZSAqIFZlcnRpY2VzLmluZXJ0aWEoYm9keS52ZXJ0aWNlcywgYm9keS5tYXNzKSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBnZW9tZXRyeVxyXG4gICAgICAgIFZlcnRpY2VzLnRyYW5zbGF0ZShib2R5LnZlcnRpY2VzLCBib2R5LnBvc2l0aW9uKTtcclxuICAgICAgICBCb3VuZHMudXBkYXRlKGJvZHkuYm91bmRzLCBib2R5LnZlcnRpY2VzLCBib2R5LnZlbG9jaXR5KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwYXJ0cyBvZiB0aGUgYGJvZHlgIGFuZCB1cGRhdGVzIG1hc3MsIGluZXJ0aWEgYW5kIGNlbnRyb2lkLlxyXG4gICAgICogRWFjaCBwYXJ0IHdpbGwgaGF2ZSBpdHMgcGFyZW50IHNldCB0byBgYm9keWAuXHJcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBjb252ZXggaHVsbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgYW5kIHNldCBvbiBgYm9keWAsIHVubGVzcyBgYXV0b0h1bGxgIGlzIHNldCB0byBgZmFsc2UuYFxyXG4gICAgICogTm90ZSB0aGF0IHRoaXMgbWV0aG9kIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZpcnN0IHBhcnQgaW4gYGJvZHkucGFydHNgIHdpbGwgYWx3YXlzIGJlIHRoZSBgYm9keWAuXHJcbiAgICAgKiBAbWV0aG9kIHNldFBhcnRzXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSBbYm9keV0gcGFydHNcclxuICAgICAqIEBwYXJhbSB7Ym9vbH0gW2F1dG9IdWxsPXRydWVdXHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0UGFydHMgPSBmdW5jdGlvbihib2R5LCBwYXJ0cywgYXV0b0h1bGwpIHtcclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGFsbCB0aGUgcGFydHMsIGVuc3VyaW5nIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgYWx3YXlzIHRoZSBwYXJlbnQgYm9keVxyXG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCk7XHJcbiAgICAgICAgYm9keS5wYXJ0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGJvZHkucGFydHMucHVzaChib2R5KTtcclxuICAgICAgICBib2R5LnBhcmVudCA9IGJvZHk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAocGFydCAhPT0gYm9keSkge1xyXG4gICAgICAgICAgICAgICAgcGFydC5wYXJlbnQgPSBib2R5O1xyXG4gICAgICAgICAgICAgICAgYm9keS5wYXJ0cy5wdXNoKHBhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYm9keS5wYXJ0cy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgYXV0b0h1bGwgPSB0eXBlb2YgYXV0b0h1bGwgIT09ICd1bmRlZmluZWQnID8gYXV0b0h1bGwgOiB0cnVlO1xyXG5cclxuICAgICAgICAvLyBmaW5kIHRoZSBjb252ZXggaHVsbCBvZiBhbGwgcGFydHMgdG8gc2V0IG9uIHRoZSBwYXJlbnQgYm9keVxyXG4gICAgICAgIGlmIChhdXRvSHVsbCkge1xyXG4gICAgICAgICAgICB2YXIgdmVydGljZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlcyA9IHZlcnRpY2VzLmNvbmNhdChwYXJ0c1tpXS52ZXJ0aWNlcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFZlcnRpY2VzLmNsb2Nrd2lzZVNvcnQodmVydGljZXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGh1bGwgPSBWZXJ0aWNlcy5odWxsKHZlcnRpY2VzKSxcclxuICAgICAgICAgICAgICAgIGh1bGxDZW50cmUgPSBWZXJ0aWNlcy5jZW50cmUoaHVsbCk7XHJcblxyXG4gICAgICAgICAgICBCb2R5LnNldFZlcnRpY2VzKGJvZHksIGh1bGwpO1xyXG4gICAgICAgICAgICBWZXJ0aWNlcy50cmFuc2xhdGUoYm9keS52ZXJ0aWNlcywgaHVsbENlbnRyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdW0gdGhlIHByb3BlcnRpZXMgb2YgYWxsIGNvbXBvdW5kIHBhcnRzIG9mIHRoZSBwYXJlbnQgYm9keVxyXG4gICAgICAgIHZhciB0b3RhbCA9IEJvZHkuX3RvdGFsUHJvcGVydGllcyhib2R5KTtcclxuXHJcbiAgICAgICAgYm9keS5hcmVhID0gdG90YWwuYXJlYTtcclxuICAgICAgICBib2R5LnBhcmVudCA9IGJvZHk7XHJcbiAgICAgICAgYm9keS5wb3NpdGlvbi54ID0gdG90YWwuY2VudHJlLng7XHJcbiAgICAgICAgYm9keS5wb3NpdGlvbi55ID0gdG90YWwuY2VudHJlLnk7XHJcbiAgICAgICAgYm9keS5wb3NpdGlvblByZXYueCA9IHRvdGFsLmNlbnRyZS54O1xyXG4gICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnkgPSB0b3RhbC5jZW50cmUueTtcclxuXHJcbiAgICAgICAgQm9keS5zZXRNYXNzKGJvZHksIHRvdGFsLm1hc3MpO1xyXG4gICAgICAgIEJvZHkuc2V0SW5lcnRpYShib2R5LCB0b3RhbC5pbmVydGlhKTtcclxuICAgICAgICBCb2R5LnNldFBvc2l0aW9uKGJvZHksIHRvdGFsLmNlbnRyZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGJvZHkgaW5zdGFudGx5LiBWZWxvY2l0eSwgYW5nbGUsIGZvcmNlIGV0Yy4gYXJlIHVuY2hhbmdlZC5cclxuICAgICAqIEBtZXRob2Qgc2V0UG9zaXRpb25cclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0UG9zaXRpb24gPSBmdW5jdGlvbihib2R5LCBwb3NpdGlvbikge1xyXG4gICAgICAgIHZhciBkZWx0YSA9IFZlY3Rvci5zdWIocG9zaXRpb24sIGJvZHkucG9zaXRpb24pO1xyXG4gICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnggKz0gZGVsdGEueDtcclxuICAgICAgICBib2R5LnBvc2l0aW9uUHJldi55ICs9IGRlbHRhLnk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9keS5wYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFydCA9IGJvZHkucGFydHNbaV07XHJcbiAgICAgICAgICAgIHBhcnQucG9zaXRpb24ueCArPSBkZWx0YS54O1xyXG4gICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnkgKz0gZGVsdGEueTtcclxuICAgICAgICAgICAgVmVydGljZXMudHJhbnNsYXRlKHBhcnQudmVydGljZXMsIGRlbHRhKTtcclxuICAgICAgICAgICAgQm91bmRzLnVwZGF0ZShwYXJ0LmJvdW5kcywgcGFydC52ZXJ0aWNlcywgYm9keS52ZWxvY2l0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBib2R5IGluc3RhbnRseS4gQW5ndWxhciB2ZWxvY2l0eSwgcG9zaXRpb24sIGZvcmNlIGV0Yy4gYXJlIHVuY2hhbmdlZC5cclxuICAgICAqIEBtZXRob2Qgc2V0QW5nbGVcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0QW5nbGUgPSBmdW5jdGlvbihib2R5LCBhbmdsZSkge1xyXG4gICAgICAgIHZhciBkZWx0YSA9IGFuZ2xlIC0gYm9keS5hbmdsZTtcclxuICAgICAgICBib2R5LmFuZ2xlUHJldiArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2R5LnBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keS5wYXJ0c1tpXTtcclxuICAgICAgICAgICAgcGFydC5hbmdsZSArPSBkZWx0YTtcclxuICAgICAgICAgICAgVmVydGljZXMucm90YXRlKHBhcnQudmVydGljZXMsIGRlbHRhLCBib2R5LnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgQXhlcy5yb3RhdGUocGFydC5heGVzLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIEJvdW5kcy51cGRhdGUocGFydC5ib3VuZHMsIHBhcnQudmVydGljZXMsIGJvZHkudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHBhcnQuYW5nbGUgKz0gYm9keS5hbmd1bGFyVmVsb2NpdHk7XHJcbiAgICAgICAgICAgICAgICBWZWN0b3Iucm90YXRlQWJvdXQocGFydC5wb3NpdGlvbiwgZGVsdGEsIGJvZHkucG9zaXRpb24sIHBhcnQucG9zaXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGxpbmVhciB2ZWxvY2l0eSBvZiB0aGUgYm9keSBpbnN0YW50bHkuIFBvc2l0aW9uLCBhbmdsZSwgZm9yY2UgZXRjLiBhcmUgdW5jaGFuZ2VkLiBTZWUgYWxzbyBgQm9keS5hcHBseUZvcmNlYC5cclxuICAgICAqIEBtZXRob2Qgc2V0VmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlbG9jaXR5XHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0VmVsb2NpdHkgPSBmdW5jdGlvbihib2R5LCB2ZWxvY2l0eSkge1xyXG4gICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnggPSBib2R5LnBvc2l0aW9uLnggLSB2ZWxvY2l0eS54O1xyXG4gICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnkgPSBib2R5LnBvc2l0aW9uLnkgLSB2ZWxvY2l0eS55O1xyXG4gICAgICAgIGJvZHkudmVsb2NpdHkueCA9IHZlbG9jaXR5Lng7XHJcbiAgICAgICAgYm9keS52ZWxvY2l0eS55ID0gdmVsb2NpdHkueTtcclxuICAgICAgICBib2R5LnNwZWVkID0gVmVjdG9yLm1hZ25pdHVkZShib2R5LnZlbG9jaXR5KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbmd1bGFyIHZlbG9jaXR5IG9mIHRoZSBib2R5IGluc3RhbnRseS4gUG9zaXRpb24sIGFuZ2xlLCBmb3JjZSBldGMuIGFyZSB1bmNoYW5nZWQuIFNlZSBhbHNvIGBCb2R5LmFwcGx5Rm9yY2VgLlxyXG4gICAgICogQG1ldGhvZCBzZXRBbmd1bGFyVmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZlbG9jaXR5XHJcbiAgICAgKi9cclxuICAgIEJvZHkuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24oYm9keSwgdmVsb2NpdHkpIHtcclxuICAgICAgICBib2R5LmFuZ2xlUHJldiA9IGJvZHkuYW5nbGUgLSB2ZWxvY2l0eTtcclxuICAgICAgICBib2R5LmFuZ3VsYXJWZWxvY2l0eSA9IHZlbG9jaXR5O1xyXG4gICAgICAgIGJvZHkuYW5ndWxhclNwZWVkID0gTWF0aC5hYnMoYm9keS5hbmd1bGFyVmVsb2NpdHkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgYm9keSBieSBhIGdpdmVuIHZlY3RvciByZWxhdGl2ZSB0byBpdHMgY3VycmVudCBwb3NpdGlvbiwgd2l0aG91dCBpbXBhcnRpbmcgYW55IHZlbG9jaXR5LlxyXG4gICAgICogQG1ldGhvZCB0cmFuc2xhdGVcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHRyYW5zbGF0aW9uXHJcbiAgICAgKi9cclxuICAgIEJvZHkudHJhbnNsYXRlID0gZnVuY3Rpb24oYm9keSwgdHJhbnNsYXRpb24pIHtcclxuICAgICAgICBCb2R5LnNldFBvc2l0aW9uKGJvZHksIFZlY3Rvci5hZGQoYm9keS5wb3NpdGlvbiwgdHJhbnNsYXRpb24pKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGVzIGEgYm9keSBieSBhIGdpdmVuIGFuZ2xlIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IGFuZ2xlLCB3aXRob3V0IGltcGFydGluZyBhbnkgYW5ndWxhciB2ZWxvY2l0eS5cclxuICAgICAqIEBtZXRob2Qgcm90YXRlXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IFtwb2ludF1cclxuICAgICAqL1xyXG4gICAgQm9keS5yb3RhdGUgPSBmdW5jdGlvbihib2R5LCByb3RhdGlvbiwgcG9pbnQpIHtcclxuICAgICAgICBpZiAoIXBvaW50KSB7XHJcbiAgICAgICAgICAgIEJvZHkuc2V0QW5nbGUoYm9keSwgYm9keS5hbmdsZSArIHJvdGF0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgY29zID0gTWF0aC5jb3Mocm90YXRpb24pLFxyXG4gICAgICAgICAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pLFxyXG4gICAgICAgICAgICAgICAgZHggPSBib2R5LnBvc2l0aW9uLnggLSBwb2ludC54LFxyXG4gICAgICAgICAgICAgICAgZHkgPSBib2R5LnBvc2l0aW9uLnkgLSBwb2ludC55O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIEJvZHkuc2V0UG9zaXRpb24oYm9keSwge1xyXG4gICAgICAgICAgICAgICAgeDogcG9pbnQueCArIChkeCAqIGNvcyAtIGR5ICogc2luKSxcclxuICAgICAgICAgICAgICAgIHk6IHBvaW50LnkgKyAoZHggKiBzaW4gKyBkeSAqIGNvcylcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBCb2R5LnNldEFuZ2xlKGJvZHksIGJvZHkuYW5nbGUgKyByb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlcyB0aGUgYm9keSwgaW5jbHVkaW5nIHVwZGF0aW5nIHBoeXNpY2FsIHByb3BlcnRpZXMgKG1hc3MsIGFyZWEsIGF4ZXMsIGluZXJ0aWEpLCBmcm9tIGEgd29ybGQtc3BhY2UgcG9pbnQgKGRlZmF1bHQgaXMgYm9keSBjZW50cmUpLlxyXG4gICAgICogQG1ldGhvZCBzY2FsZVxyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gW3BvaW50XVxyXG4gICAgICovXHJcbiAgICBCb2R5LnNjYWxlID0gZnVuY3Rpb24oYm9keSwgc2NhbGVYLCBzY2FsZVksIHBvaW50KSB7XHJcbiAgICAgICAgdmFyIHRvdGFsQXJlYSA9IDAsXHJcbiAgICAgICAgICAgIHRvdGFsSW5lcnRpYSA9IDA7XHJcblxyXG4gICAgICAgIHBvaW50ID0gcG9pbnQgfHwgYm9keS5wb3NpdGlvbjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2R5LnBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keS5wYXJ0c1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNjYWxlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIFZlcnRpY2VzLnNjYWxlKHBhcnQudmVydGljZXMsIHNjYWxlWCwgc2NhbGVZLCBwb2ludCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgcHJvcGVydGllc1xyXG4gICAgICAgICAgICBwYXJ0LmF4ZXMgPSBBeGVzLmZyb21WZXJ0aWNlcyhwYXJ0LnZlcnRpY2VzKTtcclxuICAgICAgICAgICAgcGFydC5hcmVhID0gVmVydGljZXMuYXJlYShwYXJ0LnZlcnRpY2VzKTtcclxuICAgICAgICAgICAgQm9keS5zZXRNYXNzKHBhcnQsIGJvZHkuZGVuc2l0eSAqIHBhcnQuYXJlYSk7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgaW5lcnRpYSAocmVxdWlyZXMgdmVydGljZXMgdG8gYmUgYXQgb3JpZ2luKVxyXG4gICAgICAgICAgICBWZXJ0aWNlcy50cmFuc2xhdGUocGFydC52ZXJ0aWNlcywgeyB4OiAtcGFydC5wb3NpdGlvbi54LCB5OiAtcGFydC5wb3NpdGlvbi55IH0pO1xyXG4gICAgICAgICAgICBCb2R5LnNldEluZXJ0aWEocGFydCwgQm9keS5faW5lcnRpYVNjYWxlICogVmVydGljZXMuaW5lcnRpYShwYXJ0LnZlcnRpY2VzLCBwYXJ0Lm1hc3MpKTtcclxuICAgICAgICAgICAgVmVydGljZXMudHJhbnNsYXRlKHBhcnQudmVydGljZXMsIHsgeDogcGFydC5wb3NpdGlvbi54LCB5OiBwYXJ0LnBvc2l0aW9uLnkgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsQXJlYSArPSBwYXJ0LmFyZWE7XHJcbiAgICAgICAgICAgICAgICB0b3RhbEluZXJ0aWEgKz0gcGFydC5pbmVydGlhO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzY2FsZSBwb3NpdGlvblxyXG4gICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnggPSBwb2ludC54ICsgKHBhcnQucG9zaXRpb24ueCAtIHBvaW50LngpICogc2NhbGVYO1xyXG4gICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnkgPSBwb2ludC55ICsgKHBhcnQucG9zaXRpb24ueSAtIHBvaW50LnkpICogc2NhbGVZO1xyXG5cclxuICAgICAgICAgICAgLy8gdXBkYXRlIGJvdW5kc1xyXG4gICAgICAgICAgICBCb3VuZHMudXBkYXRlKHBhcnQuYm91bmRzLCBwYXJ0LnZlcnRpY2VzLCBib2R5LnZlbG9jaXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBwYXJlbnQgYm9keVxyXG4gICAgICAgIGlmIChib2R5LnBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgYm9keS5hcmVhID0gdG90YWxBcmVhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFib2R5LmlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgICAgICBCb2R5LnNldE1hc3MoYm9keSwgYm9keS5kZW5zaXR5ICogdG90YWxBcmVhKTtcclxuICAgICAgICAgICAgICAgIEJvZHkuc2V0SW5lcnRpYShib2R5LCB0b3RhbEluZXJ0aWEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoYW5kbGUgY2lyY2xlc1xyXG4gICAgICAgIGlmIChib2R5LmNpcmNsZVJhZGl1cykgeyBcclxuICAgICAgICAgICAgaWYgKHNjYWxlWCA9PT0gc2NhbGVZKSB7XHJcbiAgICAgICAgICAgICAgICBib2R5LmNpcmNsZVJhZGl1cyAqPSBzY2FsZVg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBib2R5IGlzIG5vIGxvbmdlciBhIGNpcmNsZVxyXG4gICAgICAgICAgICAgICAgYm9keS5jaXJjbGVSYWRpdXMgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgc2ltdWxhdGlvbiBzdGVwIGZvciB0aGUgZ2l2ZW4gYGJvZHlgLCBpbmNsdWRpbmcgdXBkYXRpbmcgcG9zaXRpb24gYW5kIGFuZ2xlIHVzaW5nIFZlcmxldCBpbnRlZ3JhdGlvbi5cclxuICAgICAqIEBtZXRob2QgdXBkYXRlXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU2NhbGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb3JyZWN0aW9uXHJcbiAgICAgKi9cclxuICAgIEJvZHkudXBkYXRlID0gZnVuY3Rpb24oYm9keSwgZGVsdGFUaW1lLCB0aW1lU2NhbGUsIGNvcnJlY3Rpb24pIHtcclxuICAgICAgICB2YXIgZGVsdGFUaW1lU3F1YXJlZCA9IE1hdGgucG93KGRlbHRhVGltZSAqIHRpbWVTY2FsZSAqIGJvZHkudGltZVNjYWxlLCAyKTtcclxuXHJcbiAgICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgIHZhciBmcmljdGlvbkFpciA9IDEgLSBib2R5LmZyaWN0aW9uQWlyICogdGltZVNjYWxlICogYm9keS50aW1lU2NhbGUsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5UHJldlggPSBib2R5LnBvc2l0aW9uLnggLSBib2R5LnBvc2l0aW9uUHJldi54LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eVByZXZZID0gYm9keS5wb3NpdGlvbi55IC0gYm9keS5wb3NpdGlvblByZXYueTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHZlbG9jaXR5IHdpdGggVmVybGV0IGludGVncmF0aW9uXHJcbiAgICAgICAgYm9keS52ZWxvY2l0eS54ID0gKHZlbG9jaXR5UHJldlggKiBmcmljdGlvbkFpciAqIGNvcnJlY3Rpb24pICsgKGJvZHkuZm9yY2UueCAvIGJvZHkubWFzcykgKiBkZWx0YVRpbWVTcXVhcmVkO1xyXG4gICAgICAgIGJvZHkudmVsb2NpdHkueSA9ICh2ZWxvY2l0eVByZXZZICogZnJpY3Rpb25BaXIgKiBjb3JyZWN0aW9uKSArIChib2R5LmZvcmNlLnkgLyBib2R5Lm1hc3MpICogZGVsdGFUaW1lU3F1YXJlZDtcclxuXHJcbiAgICAgICAgYm9keS5wb3NpdGlvblByZXYueCA9IGJvZHkucG9zaXRpb24ueDtcclxuICAgICAgICBib2R5LnBvc2l0aW9uUHJldi55ID0gYm9keS5wb3NpdGlvbi55O1xyXG4gICAgICAgIGJvZHkucG9zaXRpb24ueCArPSBib2R5LnZlbG9jaXR5Lng7XHJcbiAgICAgICAgYm9keS5wb3NpdGlvbi55ICs9IGJvZHkudmVsb2NpdHkueTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGFuZ3VsYXIgdmVsb2NpdHkgd2l0aCBWZXJsZXQgaW50ZWdyYXRpb25cclxuICAgICAgICBib2R5LmFuZ3VsYXJWZWxvY2l0eSA9ICgoYm9keS5hbmdsZSAtIGJvZHkuYW5nbGVQcmV2KSAqIGZyaWN0aW9uQWlyICogY29ycmVjdGlvbikgKyAoYm9keS50b3JxdWUgLyBib2R5LmluZXJ0aWEpICogZGVsdGFUaW1lU3F1YXJlZDtcclxuICAgICAgICBib2R5LmFuZ2xlUHJldiA9IGJvZHkuYW5nbGU7XHJcbiAgICAgICAgYm9keS5hbmdsZSArPSBib2R5LmFuZ3VsYXJWZWxvY2l0eTtcclxuXHJcbiAgICAgICAgLy8gdHJhY2sgc3BlZWQgYW5kIGFjY2VsZXJhdGlvblxyXG4gICAgICAgIGJvZHkuc3BlZWQgPSBWZWN0b3IubWFnbml0dWRlKGJvZHkudmVsb2NpdHkpO1xyXG4gICAgICAgIGJvZHkuYW5ndWxhclNwZWVkID0gTWF0aC5hYnMoYm9keS5hbmd1bGFyVmVsb2NpdHkpO1xyXG5cclxuICAgICAgICAvLyB0cmFuc2Zvcm0gdGhlIGJvZHkgZ2VvbWV0cnlcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkucGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnQgPSBib2R5LnBhcnRzW2ldO1xyXG5cclxuICAgICAgICAgICAgVmVydGljZXMudHJhbnNsYXRlKHBhcnQudmVydGljZXMsIGJvZHkudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnggKz0gYm9keS52ZWxvY2l0eS54O1xyXG4gICAgICAgICAgICAgICAgcGFydC5wb3NpdGlvbi55ICs9IGJvZHkudmVsb2NpdHkueTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHkuYW5ndWxhclZlbG9jaXR5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBWZXJ0aWNlcy5yb3RhdGUocGFydC52ZXJ0aWNlcywgYm9keS5hbmd1bGFyVmVsb2NpdHksIGJvZHkucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgQXhlcy5yb3RhdGUocGFydC5heGVzLCBib2R5LmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBWZWN0b3Iucm90YXRlQWJvdXQocGFydC5wb3NpdGlvbiwgYm9keS5hbmd1bGFyVmVsb2NpdHksIGJvZHkucG9zaXRpb24sIHBhcnQucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCb3VuZHMudXBkYXRlKHBhcnQuYm91bmRzLCBwYXJ0LnZlcnRpY2VzLCBib2R5LnZlbG9jaXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyBhIGZvcmNlIHRvIGEgYm9keSBmcm9tIGEgZ2l2ZW4gd29ybGQtc3BhY2UgcG9zaXRpb24sIGluY2x1ZGluZyByZXN1bHRpbmcgdG9ycXVlLlxyXG4gICAgICogQG1ldGhvZCBhcHBseUZvcmNlXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBwb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IGZvcmNlXHJcbiAgICAgKi9cclxuICAgIEJvZHkuYXBwbHlGb3JjZSA9IGZ1bmN0aW9uKGJvZHksIHBvc2l0aW9uLCBmb3JjZSkge1xyXG4gICAgICAgIGJvZHkuZm9yY2UueCArPSBmb3JjZS54O1xyXG4gICAgICAgIGJvZHkuZm9yY2UueSArPSBmb3JjZS55O1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSB7IHg6IHBvc2l0aW9uLnggLSBib2R5LnBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnkgLSBib2R5LnBvc2l0aW9uLnkgfTtcclxuICAgICAgICBib2R5LnRvcnF1ZSArPSBvZmZzZXQueCAqIGZvcmNlLnkgLSBvZmZzZXQueSAqIGZvcmNlLng7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc3VtcyBvZiB0aGUgcHJvcGVydGllcyBvZiBhbGwgY29tcG91bmQgcGFydHMgb2YgdGhlIHBhcmVudCBib2R5LlxyXG4gICAgICogQG1ldGhvZCBfdG90YWxQcm9wZXJ0aWVzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5XHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIEJvZHkuX3RvdGFsUHJvcGVydGllcyA9IGZ1bmN0aW9uKGJvZHkpIHtcclxuICAgICAgICAvLyBmcm9tIGVxdWF0aW9ucyBhdDpcclxuICAgICAgICAvLyBodHRwczovL2Vjb3Vyc2VzLm91LmVkdS9jZ2ktYmluL2Vib29rLmNnaT9kb2M9JnRvcGljPXN0JmNoYXBfc2VjPTA3LjImcGFnZT10aGVvcnlcclxuICAgICAgICAvLyBodHRwOi8vb3V0cHV0LnRvL3NpZGV3YXkvZGVmYXVsdC5hc3A/cW5vPTEyMTEwMDA4N1xyXG5cclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgbWFzczogMCxcclxuICAgICAgICAgICAgYXJlYTogMCxcclxuICAgICAgICAgICAgaW5lcnRpYTogMCxcclxuICAgICAgICAgICAgY2VudHJlOiB7IHg6IDAsIHk6IDAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIHN1bSB0aGUgcHJvcGVydGllcyBvZiBhbGwgY29tcG91bmQgcGFydHMgb2YgdGhlIHBhcmVudCBib2R5XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGJvZHkucGFydHMubGVuZ3RoID09PSAxID8gMCA6IDE7IGkgPCBib2R5LnBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keS5wYXJ0c1tpXSxcclxuICAgICAgICAgICAgICAgIG1hc3MgPSBwYXJ0Lm1hc3MgIT09IEluZmluaXR5ID8gcGFydC5tYXNzIDogMTtcclxuXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMubWFzcyArPSBtYXNzO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmFyZWEgKz0gcGFydC5hcmVhO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmluZXJ0aWEgKz0gcGFydC5pbmVydGlhO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmNlbnRyZSA9IFZlY3Rvci5hZGQocHJvcGVydGllcy5jZW50cmUsIFZlY3Rvci5tdWx0KHBhcnQucG9zaXRpb24sIG1hc3MpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3BlcnRpZXMuY2VudHJlID0gVmVjdG9yLmRpdihwcm9wZXJ0aWVzLmNlbnRyZSwgcHJvcGVydGllcy5tYXNzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qXHJcbiAgICAqXHJcbiAgICAqICBFdmVudHMgRG9jdW1lbnRhdGlvblxyXG4gICAgKlxyXG4gICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICogRmlyZWQgd2hlbiBhIGJvZHkgc3RhcnRzIHNsZWVwaW5nICh3aGVyZSBgdGhpc2AgaXMgdGhlIGJvZHkpLlxyXG4gICAgKlxyXG4gICAgKiBAZXZlbnQgc2xlZXBTdGFydFxyXG4gICAgKiBAdGhpcyB7Ym9keX0gVGhlIGJvZHkgdGhhdCBoYXMgc3RhcnRlZCBzbGVlcGluZ1xyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5zb3VyY2UgVGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIGV2ZW50XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5uYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudFxyXG4gICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICogRmlyZWQgd2hlbiBhIGJvZHkgZW5kcyBzbGVlcGluZyAod2hlcmUgYHRoaXNgIGlzIHRoZSBib2R5KS5cclxuICAgICpcclxuICAgICogQGV2ZW50IHNsZWVwRW5kXHJcbiAgICAqIEB0aGlzIHtib2R5fSBUaGUgYm9keSB0aGF0IGhhcyBlbmRlZCBzbGVlcGluZ1xyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5zb3VyY2UgVGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIGV2ZW50XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5uYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudFxyXG4gICAgKi9cclxuXHJcbiAgICAvKlxyXG4gICAgKlxyXG4gICAgKiAgUHJvcGVydGllcyBEb2N1bWVudGF0aW9uXHJcbiAgICAqXHJcbiAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZWdlciBgTnVtYmVyYCB1bmlxdWVseSBpZGVudGlmeWluZyBudW1iZXIgZ2VuZXJhdGVkIGluIGBCb2R5LmNyZWF0ZWAgYnkgYENvbW1vbi5uZXh0SWRgLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBpZFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFN0cmluZ2AgZGVub3RpbmcgdGhlIHR5cGUgb2Ygb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB0eXBlXHJcbiAgICAgKiBAdHlwZSBzdHJpbmdcclxuICAgICAqIEBkZWZhdWx0IFwiYm9keVwiXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYXJiaXRyYXJ5IGBTdHJpbmdgIG5hbWUgdG8gaGVscCB0aGUgdXNlciBpZGVudGlmeSBhbmQgbWFuYWdlIGJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgbGFiZWxcclxuICAgICAqIEB0eXBlIHN0cmluZ1xyXG4gICAgICogQGRlZmF1bHQgXCJCb2R5XCJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYXJyYXkgb2YgYm9kaWVzIHRoYXQgbWFrZSB1cCB0aGlzIGJvZHkuIFxyXG4gICAgICogVGhlIGZpcnN0IGJvZHkgaW4gdGhlIGFycmF5IG11c3QgYWx3YXlzIGJlIGEgc2VsZiByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYm9keSBpbnN0YW5jZS5cclxuICAgICAqIEFsbCBib2RpZXMgaW4gdGhlIGBwYXJ0c2AgYXJyYXkgdG9nZXRoZXIgZm9ybSBhIHNpbmdsZSByaWdpZCBjb21wb3VuZCBib2R5LlxyXG4gICAgICogUGFydHMgYXJlIGFsbG93ZWQgdG8gb3ZlcmxhcCwgaGF2ZSBnYXBzIG9yIGhvbGVzIG9yIGV2ZW4gZm9ybSBjb25jYXZlIGJvZGllcy5cclxuICAgICAqIFBhcnRzIHRoZW1zZWx2ZXMgc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHRvIGEgYFdvcmxkYCwgb25seSB0aGUgcGFyZW50IGJvZHkgc2hvdWxkIGJlLlxyXG4gICAgICogVXNlIGBCb2R5LnNldFBhcnRzYCB3aGVuIHNldHRpbmcgcGFydHMgdG8gZW5zdXJlIGNvcnJlY3QgdXBkYXRlcyBvZiBhbGwgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcGFydHNcclxuICAgICAqIEB0eXBlIGJvZHlbXVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBvYmplY3QgcmVzZXJ2ZWQgZm9yIHN0b3JpbmcgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHBsdWdpblxyXG4gICAgICogQHR5cGUge31cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzZWxmIHJlZmVyZW5jZSBpZiB0aGUgYm9keSBpcyBfbm90XyBhIHBhcnQgb2YgYW5vdGhlciBib2R5LlxyXG4gICAgICogT3RoZXJ3aXNlIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGJvZHkgdGhhdCB0aGlzIGlzIGEgcGFydCBvZi5cclxuICAgICAqIFNlZSBgYm9keS5wYXJ0c2AuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHBhcmVudFxyXG4gICAgICogQHR5cGUgYm9keVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHNwZWNpZnlpbmcgdGhlIGFuZ2xlIG9mIHRoZSBib2R5LCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBhbmdsZVxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIGBWZWN0b3JgIG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRoZSBjb252ZXggaHVsbCBvZiB0aGUgcmlnaWQgYm9keS5cclxuICAgICAqIFRoZXNlIHNob3VsZCBiZSBwcm92aWRlZCBhYm91dCB0aGUgb3JpZ2luIGAoMCwgMClgLiBFLmcuXHJcbiAgICAgKlxyXG4gICAgICogICAgIFt7IHg6IDAsIHk6IDAgfSwgeyB4OiAyNSwgeTogNTAgfSwgeyB4OiA1MCwgeTogMCB9XVxyXG4gICAgICpcclxuICAgICAqIFdoZW4gcGFzc2VkIHZpYSBgQm9keS5jcmVhdGVgLCB0aGUgdmVydGljZXMgYXJlIHRyYW5zbGF0ZWQgcmVsYXRpdmUgdG8gYGJvZHkucG9zaXRpb25gIChpLmUuIHdvcmxkLXNwYWNlLCBhbmQgY29uc3RhbnRseSB1cGRhdGVkIGJ5IGBCb2R5LnVwZGF0ZWAgZHVyaW5nIHNpbXVsYXRpb24pLlxyXG4gICAgICogVGhlIGBWZWN0b3JgIG9iamVjdHMgYXJlIGFsc28gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBlZmZpY2llbnQgY29sbGlzaW9uIGRldGVjdGlvbi4gXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXIgcHJvcGVydGllcyBzdWNoIGFzIGBpbmVydGlhYCBhbmQgYGJvdW5kc2AgYXJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBmcm9tIHRoZSBwYXNzZWQgdmVydGljZXMgKHVubGVzcyBwcm92aWRlZCB2aWEgYG9wdGlvbnNgKS5cclxuICAgICAqIENvbmNhdmUgaHVsbHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiBUaGUgbW9kdWxlIGBNYXR0ZXIuVmVydGljZXNgIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggdmVydGljZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHZlcnRpY2VzXHJcbiAgICAgKiBAdHlwZSB2ZWN0b3JbXVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBWZWN0b3JgIHRoYXQgc3BlY2lmaWVzIHRoZSBjdXJyZW50IHdvcmxkLXNwYWNlIHBvc2l0aW9uIG9mIHRoZSBib2R5LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBwb3NpdGlvblxyXG4gICAgICogQHR5cGUgdmVjdG9yXHJcbiAgICAgKiBAZGVmYXVsdCB7IHg6IDAsIHk6IDAgfVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBWZWN0b3JgIHRoYXQgc3BlY2lmaWVzIHRoZSBmb3JjZSB0byBhcHBseSBpbiB0aGUgY3VycmVudCBzdGVwLiBJdCBpcyB6ZXJvZWQgYWZ0ZXIgZXZlcnkgYEJvZHkudXBkYXRlYC4gU2VlIGFsc28gYEJvZHkuYXBwbHlGb3JjZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGZvcmNlXHJcbiAgICAgKiBAdHlwZSB2ZWN0b3JcclxuICAgICAqIEBkZWZhdWx0IHsgeDogMCwgeTogMCB9XHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBzcGVjaWZpZXMgdGhlIHRvcnF1ZSAodHVybmluZyBmb3JjZSkgdG8gYXBwbHkgaW4gdGhlIGN1cnJlbnQgc3RlcC4gSXQgaXMgemVyb2VkIGFmdGVyIGV2ZXJ5IGBCb2R5LnVwZGF0ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHRvcnF1ZVxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBfbWVhc3VyZXNfIHRoZSBjdXJyZW50IHNwZWVkIG9mIHRoZSBib2R5IGFmdGVyIHRoZSBsYXN0IGBCb2R5LnVwZGF0ZWAuIEl0IGlzIHJlYWQtb25seSBhbmQgYWx3YXlzIHBvc2l0aXZlIChpdCdzIHRoZSBtYWduaXR1ZGUgb2YgYGJvZHkudmVsb2NpdHlgKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBwcm9wZXJ0eSBzcGVlZFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBfbWVhc3VyZXNfIHRoZSBjdXJyZW50IGFuZ3VsYXIgc3BlZWQgb2YgdGhlIGJvZHkgYWZ0ZXIgdGhlIGxhc3QgYEJvZHkudXBkYXRlYC4gSXQgaXMgcmVhZC1vbmx5IGFuZCBhbHdheXMgcG9zaXRpdmUgKGl0J3MgdGhlIG1hZ25pdHVkZSBvZiBgYm9keS5hbmd1bGFyVmVsb2NpdHlgKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBwcm9wZXJ0eSBhbmd1bGFyU3BlZWRcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBWZWN0b3JgIHRoYXQgX21lYXN1cmVzXyB0aGUgY3VycmVudCB2ZWxvY2l0eSBvZiB0aGUgYm9keSBhZnRlciB0aGUgbGFzdCBgQm9keS51cGRhdGVgLiBJdCBpcyByZWFkLW9ubHkuIFxyXG4gICAgICogSWYgeW91IG5lZWQgdG8gbW9kaWZ5IGEgYm9keSdzIHZlbG9jaXR5IGRpcmVjdGx5LCB5b3Ugc2hvdWxkIGVpdGhlciBhcHBseSBhIGZvcmNlIG9yIHNpbXBseSBjaGFuZ2UgdGhlIGJvZHkncyBgcG9zaXRpb25gIChhcyB0aGUgZW5naW5lIHVzZXMgcG9zaXRpb24tVmVybGV0IGludGVncmF0aW9uKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBwcm9wZXJ0eSB2ZWxvY2l0eVxyXG4gICAgICogQHR5cGUgdmVjdG9yXHJcbiAgICAgKiBAZGVmYXVsdCB7IHg6IDAsIHk6IDAgfVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgX21lYXN1cmVzXyB0aGUgY3VycmVudCBhbmd1bGFyIHZlbG9jaXR5IG9mIHRoZSBib2R5IGFmdGVyIHRoZSBsYXN0IGBCb2R5LnVwZGF0ZWAuIEl0IGlzIHJlYWQtb25seS4gXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byBtb2RpZnkgYSBib2R5J3MgYW5ndWxhciB2ZWxvY2l0eSBkaXJlY3RseSwgeW91IHNob3VsZCBhcHBseSBhIHRvcnF1ZSBvciBzaW1wbHkgY2hhbmdlIHRoZSBib2R5J3MgYGFuZ2xlYCAoYXMgdGhlIGVuZ2luZSB1c2VzIHBvc2l0aW9uLVZlcmxldCBpbnRlZ3JhdGlvbikuXHJcbiAgICAgKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAcHJvcGVydHkgYW5ndWxhclZlbG9jaXR5XHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBib2R5IGlzIGNvbnNpZGVyZWQgc3RhdGljLiBBIHN0YXRpYyBib2R5IGNhbiBuZXZlciBjaGFuZ2UgcG9zaXRpb24gb3IgYW5nbGUgYW5kIGlzIGNvbXBsZXRlbHkgZml4ZWQuXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byBzZXQgYSBib2R5IGFzIHN0YXRpYyBhZnRlciBpdHMgY3JlYXRpb24sIHlvdSBzaG91bGQgdXNlIGBCb2R5LnNldFN0YXRpY2AgYXMgdGhpcyByZXF1aXJlcyBtb3JlIHRoYW4ganVzdCBzZXR0aW5nIHRoaXMgZmxhZy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgaXNTdGF0aWNcclxuICAgICAqIEB0eXBlIGJvb2xlYW5cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGEgYm9keSBpcyBhIHNlbnNvci4gU2Vuc29yIHRyaWdnZXJzIGNvbGxpc2lvbiBldmVudHMsIGJ1dCBkb2Vzbid0IHJlYWN0IHdpdGggY29sbGlkaW5nIGJvZHkgcGh5c2ljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgaXNTZW5zb3JcclxuICAgICAqIEB0eXBlIGJvb2xlYW5cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBib2R5IGlzIGNvbnNpZGVyZWQgc2xlZXBpbmcuIEEgc2xlZXBpbmcgYm9keSBhY3RzIHNpbWlsYXIgdG8gYSBzdGF0aWMgYm9keSwgZXhjZXB0IGl0IGlzIG9ubHkgdGVtcG9yYXJ5IGFuZCBjYW4gYmUgYXdva2VuLlxyXG4gICAgICogSWYgeW91IG5lZWQgdG8gc2V0IGEgYm9keSBhcyBzbGVlcGluZywgeW91IHNob3VsZCB1c2UgYFNsZWVwaW5nLnNldGAgYXMgdGhpcyByZXF1aXJlcyBtb3JlIHRoYW4ganVzdCBzZXR0aW5nIHRoaXMgZmxhZy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgaXNTbGVlcGluZ1xyXG4gICAgICogQHR5cGUgYm9vbGVhblxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IF9tZWFzdXJlc18gdGhlIGFtb3VudCBvZiBtb3ZlbWVudCBhIGJvZHkgY3VycmVudGx5IGhhcyAoYSBjb21iaW5hdGlvbiBvZiBgc3BlZWRgIGFuZCBgYW5ndWxhclNwZWVkYCkuIEl0IGlzIHJlYWQtb25seSBhbmQgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICogSXQgaXMgdXNlZCBhbmQgdXBkYXRlZCBieSB0aGUgYE1hdHRlci5TbGVlcGluZ2AgbW9kdWxlIGR1cmluZyBzaW11bGF0aW9uIHRvIGRlY2lkZSBpZiBhIGJvZHkgaGFzIGNvbWUgdG8gcmVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBwcm9wZXJ0eSBtb3Rpb25cclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHVwZGF0ZXMgaW4gd2hpY2ggdGhpcyBib2R5IG11c3QgaGF2ZSBuZWFyLXplcm8gdmVsb2NpdHkgYmVmb3JlIGl0IGlzIHNldCBhcyBzbGVlcGluZyBieSB0aGUgYE1hdHRlci5TbGVlcGluZ2AgbW9kdWxlIChpZiBzbGVlcGluZyBpcyBlbmFibGVkIGJ5IHRoZSBlbmdpbmUpLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBzbGVlcFRocmVzaG9sZFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCA2MFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgZGVmaW5lcyB0aGUgZGVuc2l0eSBvZiB0aGUgYm9keSwgdGhhdCBpcyBpdHMgbWFzcyBwZXIgdW5pdCBhcmVhLlxyXG4gICAgICogSWYgeW91IHBhc3MgdGhlIGRlbnNpdHkgdmlhIGBCb2R5LmNyZWF0ZWAgdGhlIGBtYXNzYCBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgZm9yIHlvdSBiYXNlZCBvbiB0aGUgc2l6ZSAoYXJlYSkgb2YgdGhlIG9iamVjdC5cclxuICAgICAqIFRoaXMgaXMgZ2VuZXJhbGx5IHByZWZlcmFibGUgdG8gc2ltcGx5IHNldHRpbmcgbWFzcyBhbmQgYWxsb3dzIGZvciBtb3JlIGludHVpdGl2ZSBkZWZpbml0aW9uIG9mIG1hdGVyaWFscyAoZS5nLiByb2NrIGhhcyBhIGhpZ2hlciBkZW5zaXR5IHRoYW4gd29vZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGRlbnNpdHlcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMC4wMDFcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIG1hc3Mgb2YgdGhlIGJvZHksIGFsdGhvdWdoIGl0IG1heSBiZSBtb3JlIGFwcHJvcHJpYXRlIHRvIHNwZWNpZnkgdGhlIGBkZW5zaXR5YCBwcm9wZXJ0eSBpbnN0ZWFkLlxyXG4gICAgICogSWYgeW91IG1vZGlmeSB0aGlzIHZhbHVlLCB5b3UgbXVzdCBhbHNvIG1vZGlmeSB0aGUgYGJvZHkuaW52ZXJzZU1hc3NgIHByb3BlcnR5IChgMSAvIG1hc3NgKS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgbWFzc1xyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBkZWZpbmVzIHRoZSBpbnZlcnNlIG1hc3Mgb2YgdGhlIGJvZHkgKGAxIC8gbWFzc2ApLlxyXG4gICAgICogSWYgeW91IG1vZGlmeSB0aGlzIHZhbHVlLCB5b3UgbXVzdCBhbHNvIG1vZGlmeSB0aGUgYGJvZHkubWFzc2AgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGludmVyc2VNYXNzXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIG1vbWVudCBvZiBpbmVydGlhIChpLmUuIHNlY29uZCBtb21lbnQgb2YgYXJlYSkgb2YgdGhlIGJvZHkuXHJcbiAgICAgKiBJdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0aGUgZ2l2ZW4gY29udmV4IGh1bGwgKGB2ZXJ0aWNlc2AgYXJyYXkpIGFuZCBkZW5zaXR5IGluIGBCb2R5LmNyZWF0ZWAuXHJcbiAgICAgKiBJZiB5b3UgbW9kaWZ5IHRoaXMgdmFsdWUsIHlvdSBtdXN0IGFsc28gbW9kaWZ5IHRoZSBgYm9keS5pbnZlcnNlSW5lcnRpYWAgcHJvcGVydHkgKGAxIC8gaW5lcnRpYWApLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBpbmVydGlhXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIGludmVyc2UgbW9tZW50IG9mIGluZXJ0aWEgb2YgdGhlIGJvZHkgKGAxIC8gaW5lcnRpYWApLlxyXG4gICAgICogSWYgeW91IG1vZGlmeSB0aGlzIHZhbHVlLCB5b3UgbXVzdCBhbHNvIG1vZGlmeSB0aGUgYGJvZHkuaW5lcnRpYWAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGludmVyc2VJbmVydGlhXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIHJlc3RpdHV0aW9uIChlbGFzdGljaXR5KSBvZiB0aGUgYm9keS4gVGhlIHZhbHVlIGlzIGFsd2F5cyBwb3NpdGl2ZSBhbmQgaXMgaW4gdGhlIHJhbmdlIGAoMCwgMSlgLlxyXG4gICAgICogQSB2YWx1ZSBvZiBgMGAgbWVhbnMgY29sbGlzaW9ucyBtYXkgYmUgcGVyZmVjdGx5IGluZWxhc3RpYyBhbmQgbm8gYm91bmNpbmcgbWF5IG9jY3VyLiBcclxuICAgICAqIEEgdmFsdWUgb2YgYDAuOGAgbWVhbnMgdGhlIGJvZHkgbWF5IGJvdW5jZSBiYWNrIHdpdGggYXBwcm94aW1hdGVseSA4MCUgb2YgaXRzIGtpbmV0aWMgZW5lcmd5LlxyXG4gICAgICogTm90ZSB0aGF0IGNvbGxpc2lvbiByZXNwb25zZSBpcyBiYXNlZCBvbiBfcGFpcnNfIG9mIGJvZGllcywgYW5kIHRoYXQgYHJlc3RpdHV0aW9uYCB2YWx1ZXMgYXJlIF9jb21iaW5lZF8gd2l0aCB0aGUgZm9sbG93aW5nIGZvcm11bGE6XHJcbiAgICAgKlxyXG4gICAgICogICAgIE1hdGgubWF4KGJvZHlBLnJlc3RpdHV0aW9uLCBib2R5Qi5yZXN0aXR1dGlvbilcclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVzdGl0dXRpb25cclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgZGVmaW5lcyB0aGUgZnJpY3Rpb24gb2YgdGhlIGJvZHkuIFRoZSB2YWx1ZSBpcyBhbHdheXMgcG9zaXRpdmUgYW5kIGlzIGluIHRoZSByYW5nZSBgKDAsIDEpYC5cclxuICAgICAqIEEgdmFsdWUgb2YgYDBgIG1lYW5zIHRoYXQgdGhlIGJvZHkgbWF5IHNsaWRlIGluZGVmaW5pdGVseS5cclxuICAgICAqIEEgdmFsdWUgb2YgYDFgIG1lYW5zIHRoZSBib2R5IG1heSBjb21lIHRvIGEgc3RvcCBhbG1vc3QgaW5zdGFudGx5IGFmdGVyIGEgZm9yY2UgaXMgYXBwbGllZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZWZmZWN0cyBvZiB0aGUgdmFsdWUgbWF5IGJlIG5vbi1saW5lYXIuIFxyXG4gICAgICogSGlnaCB2YWx1ZXMgbWF5IGJlIHVuc3RhYmxlIGRlcGVuZGluZyBvbiB0aGUgYm9keS5cclxuICAgICAqIFRoZSBlbmdpbmUgdXNlcyBhIENvdWxvbWIgZnJpY3Rpb24gbW9kZWwgaW5jbHVkaW5nIHN0YXRpYyBhbmQga2luZXRpYyBmcmljdGlvbi5cclxuICAgICAqIE5vdGUgdGhhdCBjb2xsaXNpb24gcmVzcG9uc2UgaXMgYmFzZWQgb24gX3BhaXJzXyBvZiBib2RpZXMsIGFuZCB0aGF0IGBmcmljdGlvbmAgdmFsdWVzIGFyZSBfY29tYmluZWRfIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtdWxhOlxyXG4gICAgICpcclxuICAgICAqICAgICBNYXRoLm1pbihib2R5QS5mcmljdGlvbiwgYm9keUIuZnJpY3Rpb24pXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGZyaWN0aW9uXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDAuMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgZGVmaW5lcyB0aGUgc3RhdGljIGZyaWN0aW9uIG9mIHRoZSBib2R5IChpbiB0aGUgQ291bG9tYiBmcmljdGlvbiBtb2RlbCkuIFxyXG4gICAgICogQSB2YWx1ZSBvZiBgMGAgbWVhbnMgdGhlIGJvZHkgd2lsbCBuZXZlciAnc3RpY2snIHdoZW4gaXQgaXMgbmVhcmx5IHN0YXRpb25hcnkgYW5kIG9ubHkgZHluYW1pYyBgZnJpY3Rpb25gIGlzIHVzZWQuXHJcbiAgICAgKiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSAoZS5nLiBgMTBgKSwgdGhlIG1vcmUgZm9yY2UgaXQgd2lsbCB0YWtlIHRvIGluaXRpYWxseSBnZXQgdGhlIGJvZHkgbW92aW5nIHdoZW4gbmVhcmx5IHN0YXRpb25hcnkuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIG11bHRpcGxpZWQgd2l0aCB0aGUgYGZyaWN0aW9uYCBwcm9wZXJ0eSB0byBtYWtlIGl0IGVhc2llciB0byBjaGFuZ2UgYGZyaWN0aW9uYCBhbmQgbWFpbnRhaW4gYW4gYXBwcm9wcmlhdGUgYW1vdW50IG9mIHN0YXRpYyBmcmljdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgZnJpY3Rpb25TdGF0aWNcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBkZWZpbmVzIHRoZSBhaXIgZnJpY3Rpb24gb2YgdGhlIGJvZHkgKGFpciByZXNpc3RhbmNlKS4gXHJcbiAgICAgKiBBIHZhbHVlIG9mIGAwYCBtZWFucyB0aGUgYm9keSB3aWxsIG5ldmVyIHNsb3cgYXMgaXQgbW92ZXMgdGhyb3VnaCBzcGFjZS5cclxuICAgICAqIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgZmFzdGVyIGEgYm9keSBzbG93cyB3aGVuIG1vdmluZyB0aHJvdWdoIHNwYWNlLlxyXG4gICAgICogVGhlIGVmZmVjdHMgb2YgdGhlIHZhbHVlIGFyZSBub24tbGluZWFyLiBcclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgZnJpY3Rpb25BaXJcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMC4wMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBgT2JqZWN0YCB0aGF0IHNwZWNpZmllcyB0aGUgY29sbGlzaW9uIGZpbHRlcmluZyBwcm9wZXJ0aWVzIG9mIHRoaXMgYm9keS5cclxuICAgICAqXHJcbiAgICAgKiBDb2xsaXNpb25zIGJldHdlZW4gdHdvIGJvZGllcyB3aWxsIG9iZXkgdGhlIGZvbGxvd2luZyBydWxlczpcclxuICAgICAqIC0gSWYgdGhlIHR3byBib2RpZXMgaGF2ZSB0aGUgc2FtZSBub24temVybyB2YWx1ZSBvZiBgY29sbGlzaW9uRmlsdGVyLmdyb3VwYCxcclxuICAgICAqICAgdGhleSB3aWxsIGFsd2F5cyBjb2xsaWRlIGlmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSwgYW5kIHRoZXkgd2lsbCBuZXZlciBjb2xsaWRlXHJcbiAgICAgKiAgIGlmIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS5cclxuICAgICAqIC0gSWYgdGhlIHR3byBib2RpZXMgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIG9mIGBjb2xsaXNpb25GaWx0ZXIuZ3JvdXBgIG9yIGlmIG9uZVxyXG4gICAgICogICAob3IgYm90aCkgb2YgdGhlIGJvZGllcyBoYXMgYSB2YWx1ZSBvZiAwLCB0aGVuIHRoZSBjYXRlZ29yeS9tYXNrIHJ1bGVzIGFwcGx5IGFzIGZvbGxvd3M6XHJcbiAgICAgKlxyXG4gICAgICogRWFjaCBib2R5IGJlbG9uZ3MgdG8gYSBjb2xsaXNpb24gY2F0ZWdvcnksIGdpdmVuIGJ5IGBjb2xsaXNpb25GaWx0ZXIuY2F0ZWdvcnlgLiBUaGlzXHJcbiAgICAgKiB2YWx1ZSBpcyB1c2VkIGFzIGEgYml0IGZpZWxkIGFuZCB0aGUgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgb25seSBvbmUgYml0IHNldCwgbWVhbmluZyB0aGF0XHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgWzEsIDJeMzFdLiBUaHVzLCB0aGVyZSBhcmUgMzJcclxuICAgICAqIGRpZmZlcmVudCBjb2xsaXNpb24gY2F0ZWdvcmllcyBhdmFpbGFibGUuXHJcbiAgICAgKlxyXG4gICAgICogRWFjaCBib2R5IGFsc28gZGVmaW5lcyBhIGNvbGxpc2lvbiBiaXRtYXNrLCBnaXZlbiBieSBgY29sbGlzaW9uRmlsdGVyLm1hc2tgIHdoaWNoIHNwZWNpZmllc1xyXG4gICAgICogdGhlIGNhdGVnb3JpZXMgaXQgY29sbGlkZXMgd2l0aCAodGhlIHZhbHVlIGlzIHRoZSBiaXR3aXNlIEFORCB2YWx1ZSBvZiBhbGwgdGhlc2UgY2F0ZWdvcmllcykuXHJcbiAgICAgKlxyXG4gICAgICogVXNpbmcgdGhlIGNhdGVnb3J5L21hc2sgcnVsZXMsIHR3byBib2RpZXMgYEFgIGFuZCBgQmAgY29sbGlkZSBpZiBlYWNoIGluY2x1ZGVzIHRoZSBvdGhlcidzXHJcbiAgICAgKiBjYXRlZ29yeSBpbiBpdHMgbWFzaywgaS5lLiBgKGNhdGVnb3J5QSAmIG1hc2tCKSAhPT0gMGAgYW5kIGAoY2F0ZWdvcnlCICYgbWFza0EpICE9PSAwYFxyXG4gICAgICogYXJlIGJvdGggdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgY29sbGlzaW9uRmlsdGVyXHJcbiAgICAgKiBAdHlwZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gSW50ZWdlciBgTnVtYmVyYCwgdGhhdCBzcGVjaWZpZXMgdGhlIGNvbGxpc2lvbiBncm91cCB0aGlzIGJvZHkgYmVsb25ncyB0by5cclxuICAgICAqIFNlZSBgYm9keS5jb2xsaXNpb25GaWx0ZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBjb2xsaXNpb25GaWx0ZXIuZ3JvdXBcclxuICAgICAqIEB0eXBlIG9iamVjdFxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGJpdCBmaWVsZCB0aGF0IHNwZWNpZmllcyB0aGUgY29sbGlzaW9uIGNhdGVnb3J5IHRoaXMgYm9keSBiZWxvbmdzIHRvLlxyXG4gICAgICogVGhlIGNhdGVnb3J5IHZhbHVlIHNob3VsZCBoYXZlIG9ubHkgb25lIGJpdCBzZXQsIGZvciBleGFtcGxlIGAweDAwMDFgLlxyXG4gICAgICogVGhpcyBtZWFucyB0aGVyZSBhcmUgdXAgdG8gMzIgdW5pcXVlIGNvbGxpc2lvbiBjYXRlZ29yaWVzIGF2YWlsYWJsZS5cclxuICAgICAqIFNlZSBgYm9keS5jb2xsaXNpb25GaWx0ZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBjb2xsaXNpb25GaWx0ZXIuY2F0ZWdvcnlcclxuICAgICAqIEB0eXBlIG9iamVjdFxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHRoZSBjb2xsaXNpb24gY2F0ZWdvcmllcyB0aGlzIGJvZHkgbWF5IGNvbGxpZGUgd2l0aC5cclxuICAgICAqIFNlZSBgYm9keS5jb2xsaXNpb25GaWx0ZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBjb2xsaXNpb25GaWx0ZXIubWFza1xyXG4gICAgICogQHR5cGUgb2JqZWN0XHJcbiAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIGEgdG9sZXJhbmNlIG9uIGhvdyBmYXIgYSBib2R5IGlzIGFsbG93ZWQgdG8gJ3NpbmsnIG9yIHJvdGF0ZSBpbnRvIG90aGVyIGJvZGllcy5cclxuICAgICAqIEF2b2lkIGNoYW5naW5nIHRoaXMgdmFsdWUgdW5sZXNzIHlvdSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBzbG9wYCBpbiBwaHlzaWNzIGVuZ2luZXMuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBzaG91bGQgZ2VuZXJhbGx5IHN1ZmZpY2UsIGFsdGhvdWdoIHZlcnkgbGFyZ2UgYm9kaWVzIG1heSByZXF1aXJlIGxhcmdlciB2YWx1ZXMgZm9yIHN0YWJsZSBzdGFja2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgc2xvcFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAwLjA1XHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBhbGxvd3MgcGVyLWJvZHkgdGltZSBzY2FsaW5nLCBlLmcuIGEgZm9yY2UtZmllbGQgd2hlcmUgYm9kaWVzIGluc2lkZSBhcmUgaW4gc2xvdy1tb3Rpb24sIHdoaWxlIG90aGVycyBhcmUgYXQgZnVsbCBzcGVlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgdGltZVNjYWxlXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYE9iamVjdGAgdGhhdCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgcHJvcGVydGllcyB0byBiZSBjb25zdW1lZCBieSB0aGUgbW9kdWxlIGBNYXR0ZXIuUmVuZGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyXHJcbiAgICAgKiBAdHlwZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBib2R5IHNob3VsZCBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyLnZpc2libGVcclxuICAgICAqIEB0eXBlIGJvb2xlYW5cclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgb3BhY2l0eSB0byB1c2Ugd2hlbiByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHJlbmRlci5vcGFjaXR5XHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBgT2JqZWN0YCB0aGF0IGRlZmluZXMgdGhlIHNwcml0ZSBwcm9wZXJ0aWVzIHRvIHVzZSB3aGVuIHJlbmRlcmluZywgaWYgYW55LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSByZW5kZXIuc3ByaXRlXHJcbiAgICAgKiBAdHlwZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYFN0cmluZ2AgdGhhdCBkZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSBpbWFnZSB0byB1c2UgYXMgdGhlIHNwcml0ZSB0ZXh0dXJlLCBpZiBhbnkuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHJlbmRlci5zcHJpdGUudGV4dHVyZVxyXG4gICAgICogQHR5cGUgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgICBcclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIHNjYWxpbmcgaW4gdGhlIHgtYXhpcyBmb3IgdGhlIHNwcml0ZSwgaWYgYW55LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSByZW5kZXIuc3ByaXRlLnhTY2FsZVxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBkZWZpbmVzIHRoZSBzY2FsaW5nIGluIHRoZSB5LWF4aXMgZm9yIHRoZSBzcHJpdGUsIGlmIGFueS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyLnNwcml0ZS55U2NhbGVcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICovXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEEgYE51bWJlcmAgdGhhdCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHgtYXhpcyBmb3IgdGhlIHNwcml0ZSAobm9ybWFsaXNlZCBieSB0ZXh0dXJlIHdpZHRoKS5cclxuICAgICAgKlxyXG4gICAgICAqIEBwcm9wZXJ0eSByZW5kZXIuc3ByaXRlLnhPZmZzZXRcclxuICAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICovXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEEgYE51bWJlcmAgdGhhdCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHktYXhpcyBmb3IgdGhlIHNwcml0ZSAobm9ybWFsaXNlZCBieSB0ZXh0dXJlIGhlaWdodCkuXHJcbiAgICAgICpcclxuICAgICAgKiBAcHJvcGVydHkgcmVuZGVyLnNwcml0ZS55T2Zmc2V0XHJcbiAgICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIGxpbmUgd2lkdGggdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHRoZSBib2R5IG91dGxpbmUgKGlmIGEgc3ByaXRlIGlzIG5vdCBkZWZpbmVkKS5cclxuICAgICAqIEEgdmFsdWUgb2YgYDBgIG1lYW5zIG5vIG91dGxpbmUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyLmxpbmVXaWR0aFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFN0cmluZ2AgdGhhdCBkZWZpbmVzIHRoZSBmaWxsIHN0eWxlIHRvIHVzZSB3aGVuIHJlbmRlcmluZyB0aGUgYm9keSAoaWYgYSBzcHJpdGUgaXMgbm90IGRlZmluZWQpLlxyXG4gICAgICogSXQgaXMgdGhlIHNhbWUgYXMgd2hlbiB1c2luZyBhIGNhbnZhcywgc28gaXQgYWNjZXB0cyBDU1Mgc3R5bGUgcHJvcGVydHkgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSByZW5kZXIuZmlsbFN0eWxlXHJcbiAgICAgKiBAdHlwZSBzdHJpbmdcclxuICAgICAqIEBkZWZhdWx0IGEgcmFuZG9tIGNvbG91clxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBTdHJpbmdgIHRoYXQgZGVmaW5lcyB0aGUgc3Ryb2tlIHN0eWxlIHRvIHVzZSB3aGVuIHJlbmRlcmluZyB0aGUgYm9keSBvdXRsaW5lIChpZiBhIHNwcml0ZSBpcyBub3QgZGVmaW5lZCkuXHJcbiAgICAgKiBJdCBpcyB0aGUgc2FtZSBhcyB3aGVuIHVzaW5nIGEgY2FudmFzLCBzbyBpdCBhY2NlcHRzIENTUyBzdHlsZSBwcm9wZXJ0eSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHJlbmRlci5zdHJva2VTdHlsZVxyXG4gICAgICogQHR5cGUgc3RyaW5nXHJcbiAgICAgKiBAZGVmYXVsdCBhIHJhbmRvbSBjb2xvdXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYXJyYXkgb2YgdW5pcXVlIGF4aXMgdmVjdG9ycyAoZWRnZSBub3JtYWxzKSB1c2VkIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uLlxyXG4gICAgICogVGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBjb252ZXggaHVsbCAoYHZlcnRpY2VzYCBhcnJheSkgaW4gYEJvZHkuY3JlYXRlYC5cclxuICAgICAqIFRoZXkgYXJlIGNvbnN0YW50bHkgdXBkYXRlZCBieSBgQm9keS51cGRhdGVgIGR1cmluZyB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgYXhlc1xyXG4gICAgICogQHR5cGUgdmVjdG9yW11cclxuICAgICAqL1xyXG4gICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgX21lYXN1cmVzXyB0aGUgYXJlYSBvZiB0aGUgYm9keSdzIGNvbnZleCBodWxsLCBjYWxjdWxhdGVkIGF0IGNyZWF0aW9uIGJ5IGBCb2R5LmNyZWF0ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGFyZWFcclxuICAgICAqIEB0eXBlIHN0cmluZ1xyXG4gICAgICogQGRlZmF1bHQgXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYEJvdW5kc2Agb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgQUFCQiByZWdpb24gZm9yIHRoZSBib2R5LlxyXG4gICAgICogSXQgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIGdpdmVuIGNvbnZleCBodWxsIChgdmVydGljZXNgIGFycmF5KSBpbiBgQm9keS5jcmVhdGVgIGFuZCBjb25zdGFudGx5IHVwZGF0ZWQgYnkgYEJvZHkudXBkYXRlYCBkdXJpbmcgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgYm91bmRzXHJcbiAgICAgKiBAdHlwZSBib3VuZHNcclxuICAgICAqL1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Composite` module contains methods for creating and manipulating composite bodies.\r\n* A composite body is a collection of `Matter.Body`, `Matter.Constraint` and other `Matter.Composite`, therefore composites form a tree structure.\r\n* It is important to use the functions in this module to modify composites, rather than directly modifying their properties.\r\n* Note that the `Matter.World` object is also a type of `Matter.Composite` and as such all composite methods here can also operate on a `Matter.World`.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Composite\r\n*/\r\n\r\nvar Composite = {};\r\n\r\nmodule.exports = Composite;\r\n\r\nvar Events = __webpack_require__(/*! ../core/Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Body = __webpack_require__(/*! ./Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new composite. The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properites section below for detailed information on what you can pass via the `options` object.\r\n     * @method create\r\n     * @param {} [options]\r\n     * @return {composite} A new composite\r\n     */\r\n    Composite.create = function(options) {\r\n        return Common.extend({ \r\n            id: Common.nextId(),\r\n            type: 'composite',\r\n            parent: null,\r\n            isModified: false,\r\n            bodies: [], \r\n            constraints: [], \r\n            composites: [],\r\n            label: 'Composite',\r\n            plugin: {}\r\n        }, options);\r\n    };\r\n\r\n    /**\r\n     * Sets the composite's `isModified` flag. \r\n     * If `updateParents` is true, all parents will be set (default: false).\r\n     * If `updateChildren` is true, all children will be set (default: false).\r\n     * @method setModified\r\n     * @param {composite} composite\r\n     * @param {boolean} isModified\r\n     * @param {boolean} [updateParents=false]\r\n     * @param {boolean} [updateChildren=false]\r\n     */\r\n    Composite.setModified = function(composite, isModified, updateParents, updateChildren) {\r\n        composite.isModified = isModified;\r\n\r\n        if (updateParents && composite.parent) {\r\n            Composite.setModified(composite.parent, isModified, updateParents, updateChildren);\r\n        }\r\n\r\n        if (updateChildren) {\r\n            for(var i = 0; i < composite.composites.length; i++) {\r\n                var childComposite = composite.composites[i];\r\n                Composite.setModified(childComposite, isModified, updateParents, updateChildren);\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Generic add function. Adds one or many body(s), constraint(s) or a composite(s) to the given composite.\r\n     * Triggers `beforeAdd` and `afterAdd` events on the `composite`.\r\n     * @method add\r\n     * @param {composite} composite\r\n     * @param {} object\r\n     * @return {composite} The original composite with the objects added\r\n     */\r\n    Composite.add = function(composite, object) {\r\n        var objects = [].concat(object);\r\n\r\n        Events.trigger(composite, 'beforeAdd', { object: object });\r\n\r\n        for (var i = 0; i < objects.length; i++) {\r\n            var obj = objects[i];\r\n\r\n            switch (obj.type) {\r\n\r\n            case 'body':\r\n                // skip adding compound parts\r\n                if (obj.parent !== obj) {\r\n                    Common.warn('Composite.add: skipped adding a compound body part (you must add its parent instead)');\r\n                    break;\r\n                }\r\n\r\n                Composite.addBody(composite, obj);\r\n                break;\r\n            case 'constraint':\r\n                Composite.addConstraint(composite, obj);\r\n                break;\r\n            case 'composite':\r\n                Composite.addComposite(composite, obj);\r\n                break;\r\n            case 'mouseConstraint':\r\n                Composite.addConstraint(composite, obj.constraint);\r\n                break;\r\n\r\n            }\r\n        }\r\n\r\n        Events.trigger(composite, 'afterAdd', { object: object });\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Generic remove function. Removes one or many body(s), constraint(s) or a composite(s) to the given composite.\r\n     * Optionally searching its children recursively.\r\n     * Triggers `beforeRemove` and `afterRemove` events on the `composite`.\r\n     * @method remove\r\n     * @param {composite} composite\r\n     * @param {} object\r\n     * @param {boolean} [deep=false]\r\n     * @return {composite} The original composite with the objects removed\r\n     */\r\n    Composite.remove = function(composite, object, deep) {\r\n        var objects = [].concat(object);\r\n\r\n        Events.trigger(composite, 'beforeRemove', { object: object });\r\n\r\n        for (var i = 0; i < objects.length; i++) {\r\n            var obj = objects[i];\r\n\r\n            switch (obj.type) {\r\n\r\n            case 'body':\r\n                Composite.removeBody(composite, obj, deep);\r\n                break;\r\n            case 'constraint':\r\n                Composite.removeConstraint(composite, obj, deep);\r\n                break;\r\n            case 'composite':\r\n                Composite.removeComposite(composite, obj, deep);\r\n                break;\r\n            case 'mouseConstraint':\r\n                Composite.removeConstraint(composite, obj.constraint);\r\n                break;\r\n\r\n            }\r\n        }\r\n\r\n        Events.trigger(composite, 'afterRemove', { object: object });\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Adds a composite to the given composite.\r\n     * @private\r\n     * @method addComposite\r\n     * @param {composite} compositeA\r\n     * @param {composite} compositeB\r\n     * @return {composite} The original compositeA with the objects from compositeB added\r\n     */\r\n    Composite.addComposite = function(compositeA, compositeB) {\r\n        compositeA.composites.push(compositeB);\r\n        compositeB.parent = compositeA;\r\n        Composite.setModified(compositeA, true, true, false);\r\n        return compositeA;\r\n    };\r\n\r\n    /**\r\n     * Removes a composite from the given composite, and optionally searching its children recursively.\r\n     * @private\r\n     * @method removeComposite\r\n     * @param {composite} compositeA\r\n     * @param {composite} compositeB\r\n     * @param {boolean} [deep=false]\r\n     * @return {composite} The original compositeA with the composite removed\r\n     */\r\n    Composite.removeComposite = function(compositeA, compositeB, deep) {\r\n        var position = compositeA.composites.indexOf(compositeB);\r\n        if (position !== -1) {\r\n            Composite.removeCompositeAt(compositeA, position);\r\n            Composite.setModified(compositeA, true, true, false);\r\n        }\r\n\r\n        if (deep) {\r\n            for (var i = 0; i < compositeA.composites.length; i++){\r\n                Composite.removeComposite(compositeA.composites[i], compositeB, true);\r\n            }\r\n        }\r\n\r\n        return compositeA;\r\n    };\r\n\r\n    /**\r\n     * Removes a composite from the given composite.\r\n     * @private\r\n     * @method removeCompositeAt\r\n     * @param {composite} composite\r\n     * @param {number} position\r\n     * @return {composite} The original composite with the composite removed\r\n     */\r\n    Composite.removeCompositeAt = function(composite, position) {\r\n        composite.composites.splice(position, 1);\r\n        Composite.setModified(composite, true, true, false);\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Adds a body to the given composite.\r\n     * @private\r\n     * @method addBody\r\n     * @param {composite} composite\r\n     * @param {body} body\r\n     * @return {composite} The original composite with the body added\r\n     */\r\n    Composite.addBody = function(composite, body) {\r\n        composite.bodies.push(body);\r\n        Composite.setModified(composite, true, true, false);\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Removes a body from the given composite, and optionally searching its children recursively.\r\n     * @private\r\n     * @method removeBody\r\n     * @param {composite} composite\r\n     * @param {body} body\r\n     * @param {boolean} [deep=false]\r\n     * @return {composite} The original composite with the body removed\r\n     */\r\n    Composite.removeBody = function(composite, body, deep) {\r\n        var position = composite.bodies.indexOf(body);\r\n        if (position !== -1) {\r\n            Composite.removeBodyAt(composite, position);\r\n            Composite.setModified(composite, true, true, false);\r\n        }\r\n\r\n        if (deep) {\r\n            for (var i = 0; i < composite.composites.length; i++){\r\n                Composite.removeBody(composite.composites[i], body, true);\r\n            }\r\n        }\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Removes a body from the given composite.\r\n     * @private\r\n     * @method removeBodyAt\r\n     * @param {composite} composite\r\n     * @param {number} position\r\n     * @return {composite} The original composite with the body removed\r\n     */\r\n    Composite.removeBodyAt = function(composite, position) {\r\n        composite.bodies.splice(position, 1);\r\n        Composite.setModified(composite, true, true, false);\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Adds a constraint to the given composite.\r\n     * @private\r\n     * @method addConstraint\r\n     * @param {composite} composite\r\n     * @param {constraint} constraint\r\n     * @return {composite} The original composite with the constraint added\r\n     */\r\n    Composite.addConstraint = function(composite, constraint) {\r\n        composite.constraints.push(constraint);\r\n        Composite.setModified(composite, true, true, false);\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Removes a constraint from the given composite, and optionally searching its children recursively.\r\n     * @private\r\n     * @method removeConstraint\r\n     * @param {composite} composite\r\n     * @param {constraint} constraint\r\n     * @param {boolean} [deep=false]\r\n     * @return {composite} The original composite with the constraint removed\r\n     */\r\n    Composite.removeConstraint = function(composite, constraint, deep) {\r\n        var position = composite.constraints.indexOf(constraint);\r\n        if (position !== -1) {\r\n            Composite.removeConstraintAt(composite, position);\r\n        }\r\n\r\n        if (deep) {\r\n            for (var i = 0; i < composite.composites.length; i++){\r\n                Composite.removeConstraint(composite.composites[i], constraint, true);\r\n            }\r\n        }\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Removes a body from the given composite.\r\n     * @private\r\n     * @method removeConstraintAt\r\n     * @param {composite} composite\r\n     * @param {number} position\r\n     * @return {composite} The original composite with the constraint removed\r\n     */\r\n    Composite.removeConstraintAt = function(composite, position) {\r\n        composite.constraints.splice(position, 1);\r\n        Composite.setModified(composite, true, true, false);\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Removes all bodies, constraints and composites from the given composite.\r\n     * Optionally clearing its children recursively.\r\n     * @method clear\r\n     * @param {composite} composite\r\n     * @param {boolean} keepStatic\r\n     * @param {boolean} [deep=false]\r\n     */\r\n    Composite.clear = function(composite, keepStatic, deep) {\r\n        if (deep) {\r\n            for (var i = 0; i < composite.composites.length; i++){\r\n                Composite.clear(composite.composites[i], keepStatic, true);\r\n            }\r\n        }\r\n        \r\n        if (keepStatic) {\r\n            composite.bodies = composite.bodies.filter(function(body) { return body.isStatic; });\r\n        } else {\r\n            composite.bodies.length = 0;\r\n        }\r\n\r\n        composite.constraints.length = 0;\r\n        composite.composites.length = 0;\r\n        Composite.setModified(composite, true, true, false);\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Returns all bodies in the given composite, including all bodies in its children, recursively.\r\n     * @method allBodies\r\n     * @param {composite} composite\r\n     * @return {body[]} All the bodies\r\n     */\r\n    Composite.allBodies = function(composite) {\r\n        var bodies = [].concat(composite.bodies);\r\n\r\n        for (var i = 0; i < composite.composites.length; i++)\r\n            bodies = bodies.concat(Composite.allBodies(composite.composites[i]));\r\n\r\n        return bodies;\r\n    };\r\n\r\n    /**\r\n     * Returns all constraints in the given composite, including all constraints in its children, recursively.\r\n     * @method allConstraints\r\n     * @param {composite} composite\r\n     * @return {constraint[]} All the constraints\r\n     */\r\n    Composite.allConstraints = function(composite) {\r\n        var constraints = [].concat(composite.constraints);\r\n\r\n        for (var i = 0; i < composite.composites.length; i++)\r\n            constraints = constraints.concat(Composite.allConstraints(composite.composites[i]));\r\n\r\n        return constraints;\r\n    };\r\n\r\n    /**\r\n     * Returns all composites in the given composite, including all composites in its children, recursively.\r\n     * @method allComposites\r\n     * @param {composite} composite\r\n     * @return {composite[]} All the composites\r\n     */\r\n    Composite.allComposites = function(composite) {\r\n        var composites = [].concat(composite.composites);\r\n\r\n        for (var i = 0; i < composite.composites.length; i++)\r\n            composites = composites.concat(Composite.allComposites(composite.composites[i]));\r\n\r\n        return composites;\r\n    };\r\n\r\n    /**\r\n     * Searches the composite recursively for an object matching the type and id supplied, null if not found.\r\n     * @method get\r\n     * @param {composite} composite\r\n     * @param {number} id\r\n     * @param {string} type\r\n     * @return {object} The requested object, if found\r\n     */\r\n    Composite.get = function(composite, id, type) {\r\n        var objects,\r\n            object;\r\n\r\n        switch (type) {\r\n        case 'body':\r\n            objects = Composite.allBodies(composite);\r\n            break;\r\n        case 'constraint':\r\n            objects = Composite.allConstraints(composite);\r\n            break;\r\n        case 'composite':\r\n            objects = Composite.allComposites(composite).concat(composite);\r\n            break;\r\n        }\r\n\r\n        if (!objects)\r\n            return null;\r\n\r\n        object = objects.filter(function(object) { \r\n            return object.id.toString() === id.toString(); \r\n        });\r\n\r\n        return object.length === 0 ? null : object[0];\r\n    };\r\n\r\n    /**\r\n     * Moves the given object(s) from compositeA to compositeB (equal to a remove followed by an add).\r\n     * @method move\r\n     * @param {compositeA} compositeA\r\n     * @param {object[]} objects\r\n     * @param {compositeB} compositeB\r\n     * @return {composite} Returns compositeA\r\n     */\r\n    Composite.move = function(compositeA, objects, compositeB) {\r\n        Composite.remove(compositeA, objects);\r\n        Composite.add(compositeB, objects);\r\n        return compositeA;\r\n    };\r\n\r\n    /**\r\n     * Assigns new ids for all objects in the composite, recursively.\r\n     * @method rebase\r\n     * @param {composite} composite\r\n     * @return {composite} Returns composite\r\n     */\r\n    Composite.rebase = function(composite) {\r\n        var objects = Composite.allBodies(composite)\r\n                        .concat(Composite.allConstraints(composite))\r\n                        .concat(Composite.allComposites(composite));\r\n\r\n        for (var i = 0; i < objects.length; i++) {\r\n            objects[i].id = Common.nextId();\r\n        }\r\n\r\n        Composite.setModified(composite, true, true, false);\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Translates all children in the composite by a given vector relative to their current positions, \r\n     * without imparting any velocity.\r\n     * @method translate\r\n     * @param {composite} composite\r\n     * @param {vector} translation\r\n     * @param {bool} [recursive=true]\r\n     */\r\n    Composite.translate = function(composite, translation, recursive) {\r\n        var bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            Body.translate(bodies[i], translation);\r\n        }\r\n\r\n        Composite.setModified(composite, true, true, false);\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Rotates all children in the composite by a given angle about the given point, without imparting any angular velocity.\r\n     * @method rotate\r\n     * @param {composite} composite\r\n     * @param {number} rotation\r\n     * @param {vector} point\r\n     * @param {bool} [recursive=true]\r\n     */\r\n    Composite.rotate = function(composite, rotation, point, recursive) {\r\n        var cos = Math.cos(rotation),\r\n            sin = Math.sin(rotation),\r\n            bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i],\r\n                dx = body.position.x - point.x,\r\n                dy = body.position.y - point.y;\r\n                \r\n            Body.setPosition(body, {\r\n                x: point.x + (dx * cos - dy * sin),\r\n                y: point.y + (dx * sin + dy * cos)\r\n            });\r\n\r\n            Body.rotate(body, rotation);\r\n        }\r\n\r\n        Composite.setModified(composite, true, true, false);\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Scales all children in the composite, including updating physical properties (mass, area, axes, inertia), from a world-space point.\r\n     * @method scale\r\n     * @param {composite} composite\r\n     * @param {number} scaleX\r\n     * @param {number} scaleY\r\n     * @param {vector} point\r\n     * @param {bool} [recursive=true]\r\n     */\r\n    Composite.scale = function(composite, scaleX, scaleY, point, recursive) {\r\n        var bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i],\r\n                dx = body.position.x - point.x,\r\n                dy = body.position.y - point.y;\r\n                \r\n            Body.setPosition(body, {\r\n                x: point.x + dx * scaleX,\r\n                y: point.y + dy * scaleY\r\n            });\r\n\r\n            Body.scale(body, scaleX, scaleY);\r\n        }\r\n\r\n        Composite.setModified(composite, true, true, false);\r\n\r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Returns the union of the bounds of all of the composite's bodies.\r\n     * @method bounds\r\n     * @param {composite} composite The composite.\r\n     * @returns {bounds} The composite bounds.\r\n     */\r\n    Composite.bounds = function(composite) {\r\n        var bodies = Composite.allBodies(composite),\r\n            vertices = [];\r\n\r\n        for (var i = 0; i < bodies.length; i += 1) {\r\n            var body = bodies[i];\r\n            vertices.push(body.bounds.min, body.bounds.max);\r\n        }\r\n\r\n        return Bounds.create(vertices);\r\n    };\r\n\r\n    /*\r\n    *\r\n    *  Events Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n    * Fired when a call to `Composite.add` is made, before objects have been added.\r\n    *\r\n    * @event beforeAdd\r\n    * @param {} event An event object\r\n    * @param {} event.object The object(s) to be added (may be a single body, constraint, composite or a mixed array of these)\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired when a call to `Composite.add` is made, after objects have been added.\r\n    *\r\n    * @event afterAdd\r\n    * @param {} event An event object\r\n    * @param {} event.object The object(s) that have been added (may be a single body, constraint, composite or a mixed array of these)\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired when a call to `Composite.remove` is made, before objects have been removed.\r\n    *\r\n    * @event beforeRemove\r\n    * @param {} event An event object\r\n    * @param {} event.object The object(s) to be removed (may be a single body, constraint, composite or a mixed array of these)\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired when a call to `Composite.remove` is made, after objects have been removed.\r\n    *\r\n    * @event afterRemove\r\n    * @param {} event An event object\r\n    * @param {} event.object The object(s) that have been removed (may be a single body, constraint, composite or a mixed array of these)\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /*\r\n    *\r\n    *  Properties Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n     * An integer `Number` uniquely identifying number generated in `Composite.create` by `Common.nextId`.\r\n     *\r\n     * @property id\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `String` denoting the type of object.\r\n     *\r\n     * @property type\r\n     * @type string\r\n     * @default \"composite\"\r\n     * @readOnly\r\n     */\r\n\r\n    /**\r\n     * An arbitrary `String` name to help the user identify and manage composites.\r\n     *\r\n     * @property label\r\n     * @type string\r\n     * @default \"Composite\"\r\n     */\r\n\r\n    /**\r\n     * A flag that specifies whether the composite has been modified during the current step.\r\n     * Most `Matter.Composite` methods will automatically set this flag to `true` to inform the engine of changes to be handled.\r\n     * If you need to change it manually, you should use the `Composite.setModified` method.\r\n     *\r\n     * @property isModified\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n\r\n    /**\r\n     * The `Composite` that is the parent of this composite. It is automatically managed by the `Matter.Composite` methods.\r\n     *\r\n     * @property parent\r\n     * @type composite\r\n     * @default null\r\n     */\r\n\r\n    /**\r\n     * An array of `Body` that are _direct_ children of this composite.\r\n     * To add or remove bodies you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\r\n     * If you wish to recursively find all descendants, you should use the `Composite.allBodies` method.\r\n     *\r\n     * @property bodies\r\n     * @type body[]\r\n     * @default []\r\n     */\r\n\r\n    /**\r\n     * An array of `Constraint` that are _direct_ children of this composite.\r\n     * To add or remove constraints you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\r\n     * If you wish to recursively find all descendants, you should use the `Composite.allConstraints` method.\r\n     *\r\n     * @property constraints\r\n     * @type constraint[]\r\n     * @default []\r\n     */\r\n\r\n    /**\r\n     * An array of `Composite` that are _direct_ children of this composite.\r\n     * To add or remove composites you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\r\n     * If you wish to recursively find all descendants, you should use the `Composite.allComposites` method.\r\n     *\r\n     * @property composites\r\n     * @type composite[]\r\n     * @default []\r\n     */\r\n\r\n    /**\r\n     * An object reserved for storing plugin-specific properties.\r\n     *\r\n     * @property plugin\r\n     * @type {}\r\n     */\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvYm9keS9Db21wb3NpdGUuanM/MzQxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsc0ZBQWdCO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxzRkFBZ0I7QUFDckMsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxXQUFXLG1CQUFPLENBQUMsNEVBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQSw4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsaUNBQWlDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZ0JBQWdCO0FBQ2hCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsaUJBQWlCOztBQUVqRSx1QkFBdUIsb0JBQW9CO0FBQzNDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsK0NBQStDLGlCQUFpQjs7QUFFaEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGdCQUFnQjtBQUNoQixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCxpQkFBaUI7O0FBRXBFLHVCQUF1QixvQkFBb0I7QUFDM0M7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0RBQWtELGlCQUFpQjs7QUFFbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFVBQVU7QUFDekIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QixnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixrQ0FBa0M7QUFDN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsS0FBSztBQUNwQixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxXQUFXO0FBQzFCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFdBQVc7QUFDMUIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixpQ0FBaUM7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQ0FBaUM7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFLHNCQUFzQixFQUFFO0FBQy9GLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrRDtBQUNBLDBEO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQixlQUFlLFNBQVM7QUFDeEIsZUFBZSxXQUFXO0FBQzFCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2JvZHkvQ29tcG9zaXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuQ29tcG9zaXRlYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb21wb3NpdGUgYm9kaWVzLlxyXG4qIEEgY29tcG9zaXRlIGJvZHkgaXMgYSBjb2xsZWN0aW9uIG9mIGBNYXR0ZXIuQm9keWAsIGBNYXR0ZXIuQ29uc3RyYWludGAgYW5kIG90aGVyIGBNYXR0ZXIuQ29tcG9zaXRlYCwgdGhlcmVmb3JlIGNvbXBvc2l0ZXMgZm9ybSBhIHRyZWUgc3RydWN0dXJlLlxyXG4qIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0byBtb2RpZnkgY29tcG9zaXRlcywgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZWlyIHByb3BlcnRpZXMuXHJcbiogTm90ZSB0aGF0IHRoZSBgTWF0dGVyLldvcmxkYCBvYmplY3QgaXMgYWxzbyBhIHR5cGUgb2YgYE1hdHRlci5Db21wb3NpdGVgIGFuZCBhcyBzdWNoIGFsbCBjb21wb3NpdGUgbWV0aG9kcyBoZXJlIGNhbiBhbHNvIG9wZXJhdGUgb24gYSBgTWF0dGVyLldvcmxkYC5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcbipcclxuKiBAY2xhc3MgQ29tcG9zaXRlXHJcbiovXHJcblxyXG52YXIgQ29tcG9zaXRlID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbXBvc2l0ZTtcclxuXHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL0V2ZW50cycpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxudmFyIEJvdW5kcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L0JvdW5kcycpO1xyXG52YXIgQm9keSA9IHJlcXVpcmUoJy4vQm9keScpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb21wb3NpdGUuIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBzcGVjaWZpZXMgYW55IHByb3BlcnRpZXMgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJpdGVzIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgeW91IGNhbiBwYXNzIHZpYSB0aGUgYG9wdGlvbnNgIG9iamVjdC5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge30gW29wdGlvbnNdXHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IEEgbmV3IGNvbXBvc2l0ZVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBDb21tb24uZXh0ZW5kKHsgXHJcbiAgICAgICAgICAgIGlkOiBDb21tb24ubmV4dElkKCksXHJcbiAgICAgICAgICAgIHR5cGU6ICdjb21wb3NpdGUnLFxyXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIGlzTW9kaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBib2RpZXM6IFtdLCBcclxuICAgICAgICAgICAgY29uc3RyYWludHM6IFtdLCBcclxuICAgICAgICAgICAgY29tcG9zaXRlczogW10sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnQ29tcG9zaXRlJyxcclxuICAgICAgICAgICAgcGx1Z2luOiB7fVxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbXBvc2l0ZSdzIGBpc01vZGlmaWVkYCBmbGFnLiBcclxuICAgICAqIElmIGB1cGRhdGVQYXJlbnRzYCBpcyB0cnVlLCBhbGwgcGFyZW50cyB3aWxsIGJlIHNldCAoZGVmYXVsdDogZmFsc2UpLlxyXG4gICAgICogSWYgYHVwZGF0ZUNoaWxkcmVuYCBpcyB0cnVlLCBhbGwgY2hpbGRyZW4gd2lsbCBiZSBzZXQgKGRlZmF1bHQ6IGZhbHNlKS5cclxuICAgICAqIEBtZXRob2Qgc2V0TW9kaWZpZWRcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNNb2RpZmllZFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlUGFyZW50cz1mYWxzZV1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZUNoaWxkcmVuPWZhbHNlXVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQgPSBmdW5jdGlvbihjb21wb3NpdGUsIGlzTW9kaWZpZWQsIHVwZGF0ZVBhcmVudHMsIHVwZGF0ZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgY29tcG9zaXRlLmlzTW9kaWZpZWQgPSBpc01vZGlmaWVkO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlUGFyZW50cyAmJiBjb21wb3NpdGUucGFyZW50KSB7XHJcbiAgICAgICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUucGFyZW50LCBpc01vZGlmaWVkLCB1cGRhdGVQYXJlbnRzLCB1cGRhdGVDaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXBkYXRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXBvc2l0ZS5jb21wb3NpdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRDb21wb3NpdGUgPSBjb21wb3NpdGUuY29tcG9zaXRlc1tpXTtcclxuICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjaGlsZENvbXBvc2l0ZSwgaXNNb2RpZmllZCwgdXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyaWMgYWRkIGZ1bmN0aW9uLiBBZGRzIG9uZSBvciBtYW55IGJvZHkocyksIGNvbnN0cmFpbnQocykgb3IgYSBjb21wb3NpdGUocykgdG8gdGhlIGdpdmVuIGNvbXBvc2l0ZS5cclxuICAgICAqIFRyaWdnZXJzIGBiZWZvcmVBZGRgIGFuZCBgYWZ0ZXJBZGRgIGV2ZW50cyBvbiB0aGUgYGNvbXBvc2l0ZWAuXHJcbiAgICAgKiBAbWV0aG9kIGFkZFxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHBhcmFtIHt9IG9iamVjdFxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBUaGUgb3JpZ2luYWwgY29tcG9zaXRlIHdpdGggdGhlIG9iamVjdHMgYWRkZWRcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLmFkZCA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwgb2JqZWN0KSB7XHJcbiAgICAgICAgdmFyIG9iamVjdHMgPSBbXS5jb25jYXQob2JqZWN0KTtcclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoY29tcG9zaXRlLCAnYmVmb3JlQWRkJywgeyBvYmplY3Q6IG9iamVjdCB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBvYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChvYmoudHlwZSkge1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9keSc6XHJcbiAgICAgICAgICAgICAgICAvLyBza2lwIGFkZGluZyBjb21wb3VuZCBwYXJ0c1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5wYXJlbnQgIT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbi53YXJuKCdDb21wb3NpdGUuYWRkOiBza2lwcGVkIGFkZGluZyBhIGNvbXBvdW5kIGJvZHkgcGFydCAoeW91IG11c3QgYWRkIGl0cyBwYXJlbnQgaW5zdGVhZCknKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQm9keShjb21wb3NpdGUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uc3RyYWludCc6XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29tcG9zaXRlJzpcclxuICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5hZGRDb21wb3NpdGUoY29tcG9zaXRlLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vdXNlQ29uc3RyYWludCc6XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIG9iai5jb25zdHJhaW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoY29tcG9zaXRlLCAnYWZ0ZXJBZGQnLCB7IG9iamVjdDogb2JqZWN0IH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyaWMgcmVtb3ZlIGZ1bmN0aW9uLiBSZW1vdmVzIG9uZSBvciBtYW55IGJvZHkocyksIGNvbnN0cmFpbnQocykgb3IgYSBjb21wb3NpdGUocykgdG8gdGhlIGdpdmVuIGNvbXBvc2l0ZS5cclxuICAgICAqIE9wdGlvbmFsbHkgc2VhcmNoaW5nIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cclxuICAgICAqIFRyaWdnZXJzIGBiZWZvcmVSZW1vdmVgIGFuZCBgYWZ0ZXJSZW1vdmVgIGV2ZW50cyBvbiB0aGUgYGNvbXBvc2l0ZWAuXHJcbiAgICAgKiBAbWV0aG9kIHJlbW92ZVxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHBhcmFtIHt9IG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVlcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIG9yaWdpbmFsIGNvbXBvc2l0ZSB3aXRoIHRoZSBvYmplY3RzIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLnJlbW92ZSA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwgb2JqZWN0LCBkZWVwKSB7XHJcbiAgICAgICAgdmFyIG9iamVjdHMgPSBbXS5jb25jYXQob2JqZWN0KTtcclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoY29tcG9zaXRlLCAnYmVmb3JlUmVtb3ZlJywgeyBvYmplY3Q6IG9iamVjdCB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBvYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChvYmoudHlwZSkge1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnYm9keSc6XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUucmVtb3ZlQm9keShjb21wb3NpdGUsIG9iaiwgZGVlcCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29uc3RyYWludCc6XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUucmVtb3ZlQ29uc3RyYWludChjb21wb3NpdGUsIG9iaiwgZGVlcCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY29tcG9zaXRlJzpcclxuICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5yZW1vdmVDb21wb3NpdGUoY29tcG9zaXRlLCBvYmosIGRlZXApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vdXNlQ29uc3RyYWludCc6XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUucmVtb3ZlQ29uc3RyYWludChjb21wb3NpdGUsIG9iai5jb25zdHJhaW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoY29tcG9zaXRlLCAnYWZ0ZXJSZW1vdmUnLCB7IG9iamVjdDogb2JqZWN0IH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBjb21wb3NpdGUgdG8gdGhlIGdpdmVuIGNvbXBvc2l0ZS5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIGFkZENvbXBvc2l0ZVxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZUFcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVCXHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IFRoZSBvcmlnaW5hbCBjb21wb3NpdGVBIHdpdGggdGhlIG9iamVjdHMgZnJvbSBjb21wb3NpdGVCIGFkZGVkXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5hZGRDb21wb3NpdGUgPSBmdW5jdGlvbihjb21wb3NpdGVBLCBjb21wb3NpdGVCKSB7XHJcbiAgICAgICAgY29tcG9zaXRlQS5jb21wb3NpdGVzLnB1c2goY29tcG9zaXRlQik7XHJcbiAgICAgICAgY29tcG9zaXRlQi5wYXJlbnQgPSBjb21wb3NpdGVBO1xyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGVBLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZUE7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGNvbXBvc2l0ZSBmcm9tIHRoZSBnaXZlbiBjb21wb3NpdGUsIGFuZCBvcHRpb25hbGx5IHNlYXJjaGluZyBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQG1ldGhvZCByZW1vdmVDb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVBXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlQlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVlcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIG9yaWdpbmFsIGNvbXBvc2l0ZUEgd2l0aCB0aGUgY29tcG9zaXRlIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLnJlbW92ZUNvbXBvc2l0ZSA9IGZ1bmN0aW9uKGNvbXBvc2l0ZUEsIGNvbXBvc2l0ZUIsIGRlZXApIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBjb21wb3NpdGVBLmNvbXBvc2l0ZXMuaW5kZXhPZihjb21wb3NpdGVCKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgIENvbXBvc2l0ZS5yZW1vdmVDb21wb3NpdGVBdChjb21wb3NpdGVBLCBwb3NpdGlvbik7XHJcbiAgICAgICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGVBLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVlcCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvc2l0ZUEuY29tcG9zaXRlcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUucmVtb3ZlQ29tcG9zaXRlKGNvbXBvc2l0ZUEuY29tcG9zaXRlc1tpXSwgY29tcG9zaXRlQiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGVBO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjb21wb3NpdGUgZnJvbSB0aGUgZ2l2ZW4gY29tcG9zaXRlLlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBtZXRob2QgcmVtb3ZlQ29tcG9zaXRlQXRcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBUaGUgb3JpZ2luYWwgY29tcG9zaXRlIHdpdGggdGhlIGNvbXBvc2l0ZSByZW1vdmVkXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5yZW1vdmVDb21wb3NpdGVBdCA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwgcG9zaXRpb24pIHtcclxuICAgICAgICBjb21wb3NpdGUuY29tcG9zaXRlcy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBib2R5IHRvIHRoZSBnaXZlbiBjb21wb3NpdGUuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQG1ldGhvZCBhZGRCb2R5XHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIG9yaWdpbmFsIGNvbXBvc2l0ZSB3aXRoIHRoZSBib2R5IGFkZGVkXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5hZGRCb2R5ID0gZnVuY3Rpb24oY29tcG9zaXRlLCBib2R5KSB7XHJcbiAgICAgICAgY29tcG9zaXRlLmJvZGllcy5wdXNoKGJvZHkpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBib2R5IGZyb20gdGhlIGdpdmVuIGNvbXBvc2l0ZSwgYW5kIG9wdGlvbmFsbHkgc2VhcmNoaW5nIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIHJlbW92ZUJvZHlcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVlcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIG9yaWdpbmFsIGNvbXBvc2l0ZSB3aXRoIHRoZSBib2R5IHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLnJlbW92ZUJvZHkgPSBmdW5jdGlvbihjb21wb3NpdGUsIGJvZHksIGRlZXApIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBjb21wb3NpdGUuYm9kaWVzLmluZGV4T2YoYm9keSk7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICBDb21wb3NpdGUucmVtb3ZlQm9keUF0KGNvbXBvc2l0ZSwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQoY29tcG9zaXRlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVlcCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvc2l0ZS5jb21wb3NpdGVzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5yZW1vdmVCb2R5KGNvbXBvc2l0ZS5jb21wb3NpdGVzW2ldLCBib2R5LCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgYm9keSBmcm9tIHRoZSBnaXZlbiBjb21wb3NpdGUuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQG1ldGhvZCByZW1vdmVCb2R5QXRcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBUaGUgb3JpZ2luYWwgY29tcG9zaXRlIHdpdGggdGhlIGJvZHkgcmVtb3ZlZFxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUucmVtb3ZlQm9keUF0ID0gZnVuY3Rpb24oY29tcG9zaXRlLCBwb3NpdGlvbikge1xyXG4gICAgICAgIGNvbXBvc2l0ZS5ib2RpZXMuc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQoY29tcG9zaXRlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgY29uc3RyYWludCB0byB0aGUgZ2l2ZW4gY29tcG9zaXRlLlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBtZXRob2QgYWRkQ29uc3RyYWludFxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHBhcmFtIHtjb25zdHJhaW50fSBjb25zdHJhaW50XHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IFRoZSBvcmlnaW5hbCBjb21wb3NpdGUgd2l0aCB0aGUgY29uc3RyYWludCBhZGRlZFxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludCA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwgY29uc3RyYWludCkge1xyXG4gICAgICAgIGNvbXBvc2l0ZS5jb25zdHJhaW50cy5wdXNoKGNvbnN0cmFpbnQpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjb25zdHJhaW50IGZyb20gdGhlIGdpdmVuIGNvbXBvc2l0ZSwgYW5kIG9wdGlvbmFsbHkgc2VhcmNoaW5nIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIHJlbW92ZUNvbnN0cmFpbnRcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7Y29uc3RyYWludH0gY29uc3RyYWludFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVlcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIG9yaWdpbmFsIGNvbXBvc2l0ZSB3aXRoIHRoZSBjb25zdHJhaW50IHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLnJlbW92ZUNvbnN0cmFpbnQgPSBmdW5jdGlvbihjb21wb3NpdGUsIGNvbnN0cmFpbnQsIGRlZXApIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBjb21wb3NpdGUuY29uc3RyYWludHMuaW5kZXhPZihjb25zdHJhaW50KTtcclxuICAgICAgICBpZiAocG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgIENvbXBvc2l0ZS5yZW1vdmVDb25zdHJhaW50QXQoY29tcG9zaXRlLCBwb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVlcCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvc2l0ZS5jb21wb3NpdGVzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5yZW1vdmVDb25zdHJhaW50KGNvbXBvc2l0ZS5jb21wb3NpdGVzW2ldLCBjb25zdHJhaW50LCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgYm9keSBmcm9tIHRoZSBnaXZlbiBjb21wb3NpdGUuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQG1ldGhvZCByZW1vdmVDb25zdHJhaW50QXRcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBUaGUgb3JpZ2luYWwgY29tcG9zaXRlIHdpdGggdGhlIGNvbnN0cmFpbnQgcmVtb3ZlZFxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUucmVtb3ZlQ29uc3RyYWludEF0ID0gZnVuY3Rpb24oY29tcG9zaXRlLCBwb3NpdGlvbikge1xyXG4gICAgICAgIGNvbXBvc2l0ZS5jb25zdHJhaW50cy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGJvZGllcywgY29uc3RyYWludHMgYW5kIGNvbXBvc2l0ZXMgZnJvbSB0aGUgZ2l2ZW4gY29tcG9zaXRlLlxyXG4gICAgICogT3B0aW9uYWxseSBjbGVhcmluZyBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuXHJcbiAgICAgKiBAbWV0aG9kIGNsZWFyXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGtlZXBTdGF0aWNcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZXA9ZmFsc2VdXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5jbGVhciA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwga2VlcFN0YXRpYywgZGVlcCkge1xyXG4gICAgICAgIGlmIChkZWVwKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9zaXRlLmNvbXBvc2l0ZXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgQ29tcG9zaXRlLmNsZWFyKGNvbXBvc2l0ZS5jb21wb3NpdGVzW2ldLCBrZWVwU3RhdGljLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAoa2VlcFN0YXRpYykge1xyXG4gICAgICAgICAgICBjb21wb3NpdGUuYm9kaWVzID0gY29tcG9zaXRlLmJvZGllcy5maWx0ZXIoZnVuY3Rpb24oYm9keSkgeyByZXR1cm4gYm9keS5pc1N0YXRpYzsgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29tcG9zaXRlLmJvZGllcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9zaXRlLmNvbnN0cmFpbnRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgY29tcG9zaXRlLmNvbXBvc2l0ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQoY29tcG9zaXRlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgYm9kaWVzIGluIHRoZSBnaXZlbiBjb21wb3NpdGUsIGluY2x1ZGluZyBhbGwgYm9kaWVzIGluIGl0cyBjaGlsZHJlbiwgcmVjdXJzaXZlbHkuXHJcbiAgICAgKiBAbWV0aG9kIGFsbEJvZGllc1xyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHJldHVybiB7Ym9keVtdfSBBbGwgdGhlIGJvZGllc1xyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuYWxsQm9kaWVzID0gZnVuY3Rpb24oY29tcG9zaXRlKSB7XHJcbiAgICAgICAgdmFyIGJvZGllcyA9IFtdLmNvbmNhdChjb21wb3NpdGUuYm9kaWVzKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb3NpdGUuY29tcG9zaXRlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYm9kaWVzID0gYm9kaWVzLmNvbmNhdChDb21wb3NpdGUuYWxsQm9kaWVzKGNvbXBvc2l0ZS5jb21wb3NpdGVzW2ldKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBib2RpZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgY29uc3RyYWludHMgaW4gdGhlIGdpdmVuIGNvbXBvc2l0ZSwgaW5jbHVkaW5nIGFsbCBjb25zdHJhaW50cyBpbiBpdHMgY2hpbGRyZW4sIHJlY3Vyc2l2ZWx5LlxyXG4gICAgICogQG1ldGhvZCBhbGxDb25zdHJhaW50c1xyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHJldHVybiB7Y29uc3RyYWludFtdfSBBbGwgdGhlIGNvbnN0cmFpbnRzXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5hbGxDb25zdHJhaW50cyA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSkge1xyXG4gICAgICAgIHZhciBjb25zdHJhaW50cyA9IFtdLmNvbmNhdChjb21wb3NpdGUuY29uc3RyYWludHMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvc2l0ZS5jb21wb3NpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLmNvbmNhdChDb21wb3NpdGUuYWxsQ29uc3RyYWludHMoY29tcG9zaXRlLmNvbXBvc2l0ZXNbaV0pKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGNvbXBvc2l0ZXMgaW4gdGhlIGdpdmVuIGNvbXBvc2l0ZSwgaW5jbHVkaW5nIGFsbCBjb21wb3NpdGVzIGluIGl0cyBjaGlsZHJlbiwgcmVjdXJzaXZlbHkuXHJcbiAgICAgKiBAbWV0aG9kIGFsbENvbXBvc2l0ZXNcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlfSBjb21wb3NpdGVcclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZVtdfSBBbGwgdGhlIGNvbXBvc2l0ZXNcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLmFsbENvbXBvc2l0ZXMgPSBmdW5jdGlvbihjb21wb3NpdGUpIHtcclxuICAgICAgICB2YXIgY29tcG9zaXRlcyA9IFtdLmNvbmNhdChjb21wb3NpdGUuY29tcG9zaXRlcyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9zaXRlLmNvbXBvc2l0ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNvbXBvc2l0ZXMgPSBjb21wb3NpdGVzLmNvbmNhdChDb21wb3NpdGUuYWxsQ29tcG9zaXRlcyhjb21wb3NpdGUuY29tcG9zaXRlc1tpXSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlcztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWFyY2hlcyB0aGUgY29tcG9zaXRlIHJlY3Vyc2l2ZWx5IGZvciBhbiBvYmplY3QgbWF0Y2hpbmcgdGhlIHR5cGUgYW5kIGlkIHN1cHBsaWVkLCBudWxsIGlmIG5vdCBmb3VuZC5cclxuICAgICAqIEBtZXRob2QgZ2V0XHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSByZXF1ZXN0ZWQgb2JqZWN0LCBpZiBmb3VuZFxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuZ2V0ID0gZnVuY3Rpb24oY29tcG9zaXRlLCBpZCwgdHlwZSkge1xyXG4gICAgICAgIHZhciBvYmplY3RzLFxyXG4gICAgICAgICAgICBvYmplY3Q7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2JvZHknOlxyXG4gICAgICAgICAgICBvYmplY3RzID0gQ29tcG9zaXRlLmFsbEJvZGllcyhjb21wb3NpdGUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdjb25zdHJhaW50JzpcclxuICAgICAgICAgICAgb2JqZWN0cyA9IENvbXBvc2l0ZS5hbGxDb25zdHJhaW50cyhjb21wb3NpdGUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdjb21wb3NpdGUnOlxyXG4gICAgICAgICAgICBvYmplY3RzID0gQ29tcG9zaXRlLmFsbENvbXBvc2l0ZXMoY29tcG9zaXRlKS5jb25jYXQoY29tcG9zaXRlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW9iamVjdHMpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBvYmplY3QgPSBvYmplY3RzLmZpbHRlcihmdW5jdGlvbihvYmplY3QpIHsgXHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QuaWQudG9TdHJpbmcoKSA9PT0gaWQudG9TdHJpbmcoKTsgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3QubGVuZ3RoID09PSAwID8gbnVsbCA6IG9iamVjdFswXTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgZ2l2ZW4gb2JqZWN0KHMpIGZyb20gY29tcG9zaXRlQSB0byBjb21wb3NpdGVCIChlcXVhbCB0byBhIHJlbW92ZSBmb2xsb3dlZCBieSBhbiBhZGQpLlxyXG4gICAgICogQG1ldGhvZCBtb3ZlXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZUF9IGNvbXBvc2l0ZUFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0W119IG9iamVjdHNcclxuICAgICAqIEBwYXJhbSB7Y29tcG9zaXRlQn0gY29tcG9zaXRlQlxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBSZXR1cm5zIGNvbXBvc2l0ZUFcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLm1vdmUgPSBmdW5jdGlvbihjb21wb3NpdGVBLCBvYmplY3RzLCBjb21wb3NpdGVCKSB7XHJcbiAgICAgICAgQ29tcG9zaXRlLnJlbW92ZShjb21wb3NpdGVBLCBvYmplY3RzKTtcclxuICAgICAgICBDb21wb3NpdGUuYWRkKGNvbXBvc2l0ZUIsIG9iamVjdHMpO1xyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGVBO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFzc2lnbnMgbmV3IGlkcyBmb3IgYWxsIG9iamVjdHMgaW4gdGhlIGNvbXBvc2l0ZSwgcmVjdXJzaXZlbHkuXHJcbiAgICAgKiBAbWV0aG9kIHJlYmFzZVxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBSZXR1cm5zIGNvbXBvc2l0ZVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUucmViYXNlID0gZnVuY3Rpb24oY29tcG9zaXRlKSB7XHJcbiAgICAgICAgdmFyIG9iamVjdHMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKGNvbXBvc2l0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChDb21wb3NpdGUuYWxsQ29uc3RyYWludHMoY29tcG9zaXRlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChDb21wb3NpdGUuYWxsQ29tcG9zaXRlcyhjb21wb3NpdGUpKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9iamVjdHNbaV0uaWQgPSBDb21tb24ubmV4dElkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQoY29tcG9zaXRlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlcyBhbGwgY2hpbGRyZW4gaW4gdGhlIGNvbXBvc2l0ZSBieSBhIGdpdmVuIHZlY3RvciByZWxhdGl2ZSB0byB0aGVpciBjdXJyZW50IHBvc2l0aW9ucywgXHJcbiAgICAgKiB3aXRob3V0IGltcGFydGluZyBhbnkgdmVsb2NpdHkuXHJcbiAgICAgKiBAbWV0aG9kIHRyYW5zbGF0ZVxyXG4gICAgICogQHBhcmFtIHtjb21wb3NpdGV9IGNvbXBvc2l0ZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHRyYW5zbGF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2x9IFtyZWN1cnNpdmU9dHJ1ZV1cclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSwgdHJhbnNsYXRpb24sIHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBib2RpZXMgPSByZWN1cnNpdmUgPyBDb21wb3NpdGUuYWxsQm9kaWVzKGNvbXBvc2l0ZSkgOiBjb21wb3NpdGUuYm9kaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBCb2R5LnRyYW5zbGF0ZShib2RpZXNbaV0sIHRyYW5zbGF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIENvbXBvc2l0ZS5zZXRNb2RpZmllZChjb21wb3NpdGUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGVzIGFsbCBjaGlsZHJlbiBpbiB0aGUgY29tcG9zaXRlIGJ5IGEgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIGdpdmVuIHBvaW50LCB3aXRob3V0IGltcGFydGluZyBhbnkgYW5ndWxhciB2ZWxvY2l0eS5cclxuICAgICAqIEBtZXRob2Qgcm90YXRlXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBwb2ludFxyXG4gICAgICogQHBhcmFtIHtib29sfSBbcmVjdXJzaXZlPXRydWVdXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZS5yb3RhdGUgPSBmdW5jdGlvbihjb21wb3NpdGUsIHJvdGF0aW9uLCBwb2ludCwgcmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcclxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pLFxyXG4gICAgICAgICAgICBib2RpZXMgPSByZWN1cnNpdmUgPyBDb21wb3NpdGUuYWxsQm9kaWVzKGNvbXBvc2l0ZSkgOiBjb21wb3NpdGUuYm9kaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXSxcclxuICAgICAgICAgICAgICAgIGR4ID0gYm9keS5wb3NpdGlvbi54IC0gcG9pbnQueCxcclxuICAgICAgICAgICAgICAgIGR5ID0gYm9keS5wb3NpdGlvbi55IC0gcG9pbnQueTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBCb2R5LnNldFBvc2l0aW9uKGJvZHksIHtcclxuICAgICAgICAgICAgICAgIHg6IHBvaW50LnggKyAoZHggKiBjb3MgLSBkeSAqIHNpbiksXHJcbiAgICAgICAgICAgICAgICB5OiBwb2ludC55ICsgKGR4ICogc2luICsgZHkgKiBjb3MpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgQm9keS5yb3RhdGUoYm9keSwgcm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQ29tcG9zaXRlLnNldE1vZGlmaWVkKGNvbXBvc2l0ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlcyBhbGwgY2hpbGRyZW4gaW4gdGhlIGNvbXBvc2l0ZSwgaW5jbHVkaW5nIHVwZGF0aW5nIHBoeXNpY2FsIHByb3BlcnRpZXMgKG1hc3MsIGFyZWEsIGF4ZXMsIGluZXJ0aWEpLCBmcm9tIGEgd29ybGQtc3BhY2UgcG9pbnQuXHJcbiAgICAgKiBAbWV0aG9kIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Ym9vbH0gW3JlY3Vyc2l2ZT10cnVlXVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGUuc2NhbGUgPSBmdW5jdGlvbihjb21wb3NpdGUsIHNjYWxlWCwgc2NhbGVZLCBwb2ludCwgcmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIGJvZGllcyA9IHJlY3Vyc2l2ZSA/IENvbXBvc2l0ZS5hbGxCb2RpZXMoY29tcG9zaXRlKSA6IGNvbXBvc2l0ZS5ib2RpZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gYm9kaWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgZHggPSBib2R5LnBvc2l0aW9uLnggLSBwb2ludC54LFxyXG4gICAgICAgICAgICAgICAgZHkgPSBib2R5LnBvc2l0aW9uLnkgLSBwb2ludC55O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIEJvZHkuc2V0UG9zaXRpb24oYm9keSwge1xyXG4gICAgICAgICAgICAgICAgeDogcG9pbnQueCArIGR4ICogc2NhbGVYLFxyXG4gICAgICAgICAgICAgICAgeTogcG9pbnQueSArIGR5ICogc2NhbGVZXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgQm9keS5zY2FsZShib2R5LCBzY2FsZVgsIHNjYWxlWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQoY29tcG9zaXRlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21wb3NpdGU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgdGhlIGJvdW5kcyBvZiBhbGwgb2YgdGhlIGNvbXBvc2l0ZSdzIGJvZGllcy5cclxuICAgICAqIEBtZXRob2QgYm91bmRzXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlIFRoZSBjb21wb3NpdGUuXHJcbiAgICAgKiBAcmV0dXJucyB7Ym91bmRzfSBUaGUgY29tcG9zaXRlIGJvdW5kcy5cclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlLmJvdW5kcyA9IGZ1bmN0aW9uKGNvbXBvc2l0ZSkge1xyXG4gICAgICAgIHZhciBib2RpZXMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKGNvbXBvc2l0ZSksXHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gYm9kaWVzW2ldO1xyXG4gICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKGJvZHkuYm91bmRzLm1pbiwgYm9keS5ib3VuZHMubWF4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBCb3VuZHMuY3JlYXRlKHZlcnRpY2VzKTtcclxuICAgIH07XHJcblxyXG4gICAgLypcclxuICAgICpcclxuICAgICogIEV2ZW50cyBEb2N1bWVudGF0aW9uXHJcbiAgICAqXHJcbiAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaXJlZCB3aGVuIGEgY2FsbCB0byBgQ29tcG9zaXRlLmFkZGAgaXMgbWFkZSwgYmVmb3JlIG9iamVjdHMgaGF2ZSBiZWVuIGFkZGVkLlxyXG4gICAgKlxyXG4gICAgKiBAZXZlbnQgYmVmb3JlQWRkXHJcbiAgICAqIEBwYXJhbSB7fSBldmVudCBBbiBldmVudCBvYmplY3RcclxuICAgICogQHBhcmFtIHt9IGV2ZW50Lm9iamVjdCBUaGUgb2JqZWN0KHMpIHRvIGJlIGFkZGVkIChtYXkgYmUgYSBzaW5nbGUgYm9keSwgY29uc3RyYWludCwgY29tcG9zaXRlIG9yIGEgbWl4ZWQgYXJyYXkgb2YgdGhlc2UpXHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5zb3VyY2UgVGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIGV2ZW50XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5uYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudFxyXG4gICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICogRmlyZWQgd2hlbiBhIGNhbGwgdG8gYENvbXBvc2l0ZS5hZGRgIGlzIG1hZGUsIGFmdGVyIG9iamVjdHMgaGF2ZSBiZWVuIGFkZGVkLlxyXG4gICAgKlxyXG4gICAgKiBAZXZlbnQgYWZ0ZXJBZGRcclxuICAgICogQHBhcmFtIHt9IGV2ZW50IEFuIGV2ZW50IG9iamVjdFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQub2JqZWN0IFRoZSBvYmplY3QocykgdGhhdCBoYXZlIGJlZW4gYWRkZWQgKG1heSBiZSBhIHNpbmdsZSBib2R5LCBjb25zdHJhaW50LCBjb21wb3NpdGUgb3IgYSBtaXhlZCBhcnJheSBvZiB0aGVzZSlcclxuICAgICogQHBhcmFtIHt9IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnRcclxuICAgICogQHBhcmFtIHt9IGV2ZW50Lm5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XHJcbiAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaXJlZCB3aGVuIGEgY2FsbCB0byBgQ29tcG9zaXRlLnJlbW92ZWAgaXMgbWFkZSwgYmVmb3JlIG9iamVjdHMgaGF2ZSBiZWVuIHJlbW92ZWQuXHJcbiAgICAqXHJcbiAgICAqIEBldmVudCBiZWZvcmVSZW1vdmVcclxuICAgICogQHBhcmFtIHt9IGV2ZW50IEFuIGV2ZW50IG9iamVjdFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQub2JqZWN0IFRoZSBvYmplY3QocykgdG8gYmUgcmVtb3ZlZCAobWF5IGJlIGEgc2luZ2xlIGJvZHksIGNvbnN0cmFpbnQsIGNvbXBvc2l0ZSBvciBhIG1peGVkIGFycmF5IG9mIHRoZXNlKVxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZpcmVkIHdoZW4gYSBjYWxsIHRvIGBDb21wb3NpdGUucmVtb3ZlYCBpcyBtYWRlLCBhZnRlciBvYmplY3RzIGhhdmUgYmVlbiByZW1vdmVkLlxyXG4gICAgKlxyXG4gICAgKiBAZXZlbnQgYWZ0ZXJSZW1vdmVcclxuICAgICogQHBhcmFtIHt9IGV2ZW50IEFuIGV2ZW50IG9iamVjdFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQub2JqZWN0IFRoZSBvYmplY3QocykgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCAobWF5IGJlIGEgc2luZ2xlIGJvZHksIGNvbnN0cmFpbnQsIGNvbXBvc2l0ZSBvciBhIG1peGVkIGFycmF5IG9mIHRoZXNlKVxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLypcclxuICAgICpcclxuICAgICogIFByb3BlcnRpZXMgRG9jdW1lbnRhdGlvblxyXG4gICAgKlxyXG4gICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVnZXIgYE51bWJlcmAgdW5pcXVlbHkgaWRlbnRpZnlpbmcgbnVtYmVyIGdlbmVyYXRlZCBpbiBgQ29tcG9zaXRlLmNyZWF0ZWAgYnkgYENvbW1vbi5uZXh0SWRgLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBpZFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFN0cmluZ2AgZGVub3RpbmcgdGhlIHR5cGUgb2Ygb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB0eXBlXHJcbiAgICAgKiBAdHlwZSBzdHJpbmdcclxuICAgICAqIEBkZWZhdWx0IFwiY29tcG9zaXRlXCJcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhcmJpdHJhcnkgYFN0cmluZ2AgbmFtZSB0byBoZWxwIHRoZSB1c2VyIGlkZW50aWZ5IGFuZCBtYW5hZ2UgY29tcG9zaXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgbGFiZWxcclxuICAgICAqIEB0eXBlIHN0cmluZ1xyXG4gICAgICogQGRlZmF1bHQgXCJDb21wb3NpdGVcIlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgY29tcG9zaXRlIGhhcyBiZWVuIG1vZGlmaWVkIGR1cmluZyB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICogTW9zdCBgTWF0dGVyLkNvbXBvc2l0ZWAgbWV0aG9kcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoaXMgZmxhZyB0byBgdHJ1ZWAgdG8gaW5mb3JtIHRoZSBlbmdpbmUgb2YgY2hhbmdlcyB0byBiZSBoYW5kbGVkLlxyXG4gICAgICogSWYgeW91IG5lZWQgdG8gY2hhbmdlIGl0IG1hbnVhbGx5LCB5b3Ugc2hvdWxkIHVzZSB0aGUgYENvbXBvc2l0ZS5zZXRNb2RpZmllZGAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBpc01vZGlmaWVkXHJcbiAgICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYENvbXBvc2l0ZWAgdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgY29tcG9zaXRlLiBJdCBpcyBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgYnkgdGhlIGBNYXR0ZXIuQ29tcG9zaXRlYCBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBwYXJlbnRcclxuICAgICAqIEB0eXBlIGNvbXBvc2l0ZVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhcnJheSBvZiBgQm9keWAgdGhhdCBhcmUgX2RpcmVjdF8gY2hpbGRyZW4gb2YgdGhpcyBjb21wb3NpdGUuXHJcbiAgICAgKiBUbyBhZGQgb3IgcmVtb3ZlIGJvZGllcyB5b3Ugc2hvdWxkIHVzZSBgQ29tcG9zaXRlLmFkZGAgYW5kIGBDb21wb3NpdGUucmVtb3ZlYCBtZXRob2RzIHJhdGhlciB0aGFuIGRpcmVjdGx5IG1vZGlmeWluZyB0aGlzIHByb3BlcnR5LlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gcmVjdXJzaXZlbHkgZmluZCBhbGwgZGVzY2VuZGFudHMsIHlvdSBzaG91bGQgdXNlIHRoZSBgQ29tcG9zaXRlLmFsbEJvZGllc2AgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBib2RpZXNcclxuICAgICAqIEB0eXBlIGJvZHlbXVxyXG4gICAgICogQGRlZmF1bHQgW11cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYXJyYXkgb2YgYENvbnN0cmFpbnRgIHRoYXQgYXJlIF9kaXJlY3RfIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9zaXRlLlxyXG4gICAgICogVG8gYWRkIG9yIHJlbW92ZSBjb25zdHJhaW50cyB5b3Ugc2hvdWxkIHVzZSBgQ29tcG9zaXRlLmFkZGAgYW5kIGBDb21wb3NpdGUucmVtb3ZlYCBtZXRob2RzIHJhdGhlciB0aGFuIGRpcmVjdGx5IG1vZGlmeWluZyB0aGlzIHByb3BlcnR5LlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gcmVjdXJzaXZlbHkgZmluZCBhbGwgZGVzY2VuZGFudHMsIHlvdSBzaG91bGQgdXNlIHRoZSBgQ29tcG9zaXRlLmFsbENvbnN0cmFpbnRzYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGNvbnN0cmFpbnRzXHJcbiAgICAgKiBAdHlwZSBjb25zdHJhaW50W11cclxuICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIGBDb21wb3NpdGVgIHRoYXQgYXJlIF9kaXJlY3RfIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9zaXRlLlxyXG4gICAgICogVG8gYWRkIG9yIHJlbW92ZSBjb21wb3NpdGVzIHlvdSBzaG91bGQgdXNlIGBDb21wb3NpdGUuYWRkYCBhbmQgYENvbXBvc2l0ZS5yZW1vdmVgIG1ldGhvZHMgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW9kaWZ5aW5nIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byByZWN1cnNpdmVseSBmaW5kIGFsbCBkZXNjZW5kYW50cywgeW91IHNob3VsZCB1c2UgdGhlIGBDb21wb3NpdGUuYWxsQ29tcG9zaXRlc2AgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBjb21wb3NpdGVzXHJcbiAgICAgKiBAdHlwZSBjb21wb3NpdGVbXVxyXG4gICAgICogQGRlZmF1bHQgW11cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gb2JqZWN0IHJlc2VydmVkIGZvciBzdG9yaW5nIHBsdWdpbi1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBwbHVnaW5cclxuICAgICAqIEB0eXBlIHt9XHJcbiAgICAgKi9cclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/body/World.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/body/World.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.World` module contains methods for creating and manipulating the world composite.\r\n* A `Matter.World` is a `Matter.Composite` body, which is a collection of `Matter.Body`, `Matter.Constraint` and other `Matter.Composite`.\r\n* A `Matter.World` has a few additional properties including `gravity` and `bounds`.\r\n* It is important to use the functions in the `Matter.Composite` module to modify the world composite, rather than directly modifying its properties.\r\n* There are also a few methods here that alias those in `Matter.Composite` for easier readability.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class World\r\n* @extends Composite\r\n*/\r\n\r\nvar World = {};\r\n\r\nmodule.exports = World;\r\n\r\nvar Composite = __webpack_require__(/*! ./Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Constraint = __webpack_require__(/*! ../constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new world composite. The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properties section below for detailed information on what you can pass via the `options` object.\r\n     * @method create\r\n     * @constructor\r\n     * @param {} options\r\n     * @return {world} A new world\r\n     */\r\n    World.create = function(options) {\r\n        var composite = Composite.create();\r\n\r\n        var defaults = {\r\n            label: 'World',\r\n            gravity: {\r\n                x: 0,\r\n                y: 1,\r\n                scale: 0.001\r\n            },\r\n            bounds: { \r\n                min: { x: -Infinity, y: -Infinity }, \r\n                max: { x: Infinity, y: Infinity } \r\n            }\r\n        };\r\n        \r\n        return Common.extend(composite, defaults, options);\r\n    };\r\n\r\n    /*\r\n    *\r\n    *  Properties Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n     * The gravity to apply on the world.\r\n     *\r\n     * @property gravity\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * The gravity x component.\r\n     *\r\n     * @property gravity.x\r\n     * @type object\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * The gravity y component.\r\n     *\r\n     * @property gravity.y\r\n     * @type object\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * The gravity scale factor.\r\n     *\r\n     * @property gravity.scale\r\n     * @type object\r\n     * @default 0.001\r\n     */\r\n\r\n    /**\r\n     * A `Bounds` object that defines the world bounds for collision detection.\r\n     *\r\n     * @property bounds\r\n     * @type bounds\r\n     * @default { min: { x: -Infinity, y: -Infinity }, max: { x: Infinity, y: Infinity } }\r\n     */\r\n\r\n    // World is a Composite body\r\n    // see src/module/Outro.js for these aliases:\r\n    \r\n    /**\r\n     * An alias for Composite.add\r\n     * @method add\r\n     * @param {world} world\r\n     * @param {} object\r\n     * @return {composite} The original world with the objects added\r\n     */\r\n\r\n    /**\r\n     * An alias for Composite.remove\r\n     * @method remove\r\n     * @param {world} world\r\n     * @param {} object\r\n     * @param {boolean} [deep=false]\r\n     * @return {composite} The original world with the objects removed\r\n     */\r\n\r\n    /**\r\n     * An alias for Composite.clear\r\n     * @method clear\r\n     * @param {world} world\r\n     * @param {boolean} keepStatic\r\n     */\r\n\r\n    /**\r\n     * An alias for Composite.addComposite\r\n     * @method addComposite\r\n     * @param {world} world\r\n     * @param {composite} composite\r\n     * @return {world} The original world with the objects from composite added\r\n     */\r\n    \r\n     /**\r\n      * An alias for Composite.addBody\r\n      * @method addBody\r\n      * @param {world} world\r\n      * @param {body} body\r\n      * @return {world} The original world with the body added\r\n      */\r\n\r\n     /**\r\n      * An alias for Composite.addConstraint\r\n      * @method addConstraint\r\n      * @param {world} world\r\n      * @param {constraint} constraint\r\n      * @return {world} The original world with the constraint added\r\n      */\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvYm9keS9Xb3JsZC5qcz9kZWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQywwR0FBMEI7QUFDbkQsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLHFCO0FBQ0Esc0JBQXNCLDZCQUE2QjtBQUNuRCxzQkFBc0IsMkI7QUFDdEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTyw2QkFBNkIsUUFBUSwyQkFBMkI7QUFDeEY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZ0JBQWdCO0FBQ2hCLGdCQUFnQixVQUFVO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixnQkFBZ0I7QUFDaEIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixVQUFVO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFFBQVE7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0IsTUFBTTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QixnQkFBZ0IsS0FBSztBQUNyQixpQkFBaUIsTUFBTTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QixnQkFBZ0IsV0FBVztBQUMzQixpQkFBaUIsTUFBTTtBQUN2Qjs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2JvZHkvV29ybGQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5Xb3JsZGAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhlIHdvcmxkIGNvbXBvc2l0ZS5cclxuKiBBIGBNYXR0ZXIuV29ybGRgIGlzIGEgYE1hdHRlci5Db21wb3NpdGVgIGJvZHksIHdoaWNoIGlzIGEgY29sbGVjdGlvbiBvZiBgTWF0dGVyLkJvZHlgLCBgTWF0dGVyLkNvbnN0cmFpbnRgIGFuZCBvdGhlciBgTWF0dGVyLkNvbXBvc2l0ZWAuXHJcbiogQSBgTWF0dGVyLldvcmxkYCBoYXMgYSBmZXcgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGluY2x1ZGluZyBgZ3Jhdml0eWAgYW5kIGBib3VuZHNgLlxyXG4qIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYE1hdHRlci5Db21wb3NpdGVgIG1vZHVsZSB0byBtb2RpZnkgdGhlIHdvcmxkIGNvbXBvc2l0ZSwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW9kaWZ5aW5nIGl0cyBwcm9wZXJ0aWVzLlxyXG4qIFRoZXJlIGFyZSBhbHNvIGEgZmV3IG1ldGhvZHMgaGVyZSB0aGF0IGFsaWFzIHRob3NlIGluIGBNYXR0ZXIuQ29tcG9zaXRlYCBmb3IgZWFzaWVyIHJlYWRhYmlsaXR5LlxyXG4qXHJcbiogU2VlIHRoZSBpbmNsdWRlZCB1c2FnZSBbZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9saWFicnUvbWF0dGVyLWpzL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS5cclxuKlxyXG4qIEBjbGFzcyBXb3JsZFxyXG4qIEBleHRlbmRzIENvbXBvc2l0ZVxyXG4qL1xyXG5cclxudmFyIFdvcmxkID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmxkO1xyXG5cclxudmFyIENvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vQ29tcG9zaXRlJyk7XHJcbnZhciBDb25zdHJhaW50ID0gcmVxdWlyZSgnLi4vY29uc3RyYWludC9Db25zdHJhaW50Jyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuLi9jb3JlL0NvbW1vbicpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyB3b3JsZCBjb21wb3NpdGUuIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBzcGVjaWZpZXMgYW55IHByb3BlcnRpZXMgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgeW91IGNhbiBwYXNzIHZpYSB0aGUgYG9wdGlvbnNgIG9iamVjdC5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqIEBwYXJhbSB7fSBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJuIHt3b3JsZH0gQSBuZXcgd29ybGRcclxuICAgICAqL1xyXG4gICAgV29ybGQuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBjb21wb3NpdGUgPSBDb21wb3NpdGUuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgbGFiZWw6ICdXb3JsZCcsXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAxLFxyXG4gICAgICAgICAgICAgICAgc2NhbGU6IDAuMDAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvdW5kczogeyBcclxuICAgICAgICAgICAgICAgIG1pbjogeyB4OiAtSW5maW5pdHksIHk6IC1JbmZpbml0eSB9LCBcclxuICAgICAgICAgICAgICAgIG1heDogeyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfSBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIENvbW1vbi5leHRlbmQoY29tcG9zaXRlLCBkZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qXHJcbiAgICAqXHJcbiAgICAqICBQcm9wZXJ0aWVzIERvY3VtZW50YXRpb25cclxuICAgICpcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3Jhdml0eSB0byBhcHBseSBvbiB0aGUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGdyYXZpdHlcclxuICAgICAqIEB0eXBlIG9iamVjdFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3Jhdml0eSB4IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgZ3Jhdml0eS54XHJcbiAgICAgKiBAdHlwZSBvYmplY3RcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyYXZpdHkgeSBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGdyYXZpdHkueVxyXG4gICAgICogQHR5cGUgb2JqZWN0XHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBncmF2aXR5IHNjYWxlIGZhY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgZ3Jhdml0eS5zY2FsZVxyXG4gICAgICogQHR5cGUgb2JqZWN0XHJcbiAgICAgKiBAZGVmYXVsdCAwLjAwMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBCb3VuZHNgIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHdvcmxkIGJvdW5kcyBmb3IgY29sbGlzaW9uIGRldGVjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgYm91bmRzXHJcbiAgICAgKiBAdHlwZSBib3VuZHNcclxuICAgICAqIEBkZWZhdWx0IHsgbWluOiB7IHg6IC1JbmZpbml0eSwgeTogLUluZmluaXR5IH0sIG1heDogeyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfSB9XHJcbiAgICAgKi9cclxuXHJcbiAgICAvLyBXb3JsZCBpcyBhIENvbXBvc2l0ZSBib2R5XHJcbiAgICAvLyBzZWUgc3JjL21vZHVsZS9PdXRyby5qcyBmb3IgdGhlc2UgYWxpYXNlczpcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhbGlhcyBmb3IgQ29tcG9zaXRlLmFkZFxyXG4gICAgICogQG1ldGhvZCBhZGRcclxuICAgICAqIEBwYXJhbSB7d29ybGR9IHdvcmxkXHJcbiAgICAgKiBAcGFyYW0ge30gb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IFRoZSBvcmlnaW5hbCB3b3JsZCB3aXRoIHRoZSBvYmplY3RzIGFkZGVkXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGFsaWFzIGZvciBDb21wb3NpdGUucmVtb3ZlXHJcbiAgICAgKiBAbWV0aG9kIHJlbW92ZVxyXG4gICAgICogQHBhcmFtIHt3b3JsZH0gd29ybGRcclxuICAgICAqIEBwYXJhbSB7fSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZXA9ZmFsc2VdXHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IFRoZSBvcmlnaW5hbCB3b3JsZCB3aXRoIHRoZSBvYmplY3RzIHJlbW92ZWRcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYWxpYXMgZm9yIENvbXBvc2l0ZS5jbGVhclxyXG4gICAgICogQG1ldGhvZCBjbGVhclxyXG4gICAgICogQHBhcmFtIHt3b3JsZH0gd29ybGRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0ga2VlcFN0YXRpY1xyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhbGlhcyBmb3IgQ29tcG9zaXRlLmFkZENvbXBvc2l0ZVxyXG4gICAgICogQG1ldGhvZCBhZGRDb21wb3NpdGVcclxuICAgICAqIEBwYXJhbSB7d29ybGR9IHdvcmxkXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcmV0dXJuIHt3b3JsZH0gVGhlIG9yaWdpbmFsIHdvcmxkIHdpdGggdGhlIG9iamVjdHMgZnJvbSBjb21wb3NpdGUgYWRkZWRcclxuICAgICAqL1xyXG4gICAgXHJcbiAgICAgLyoqXHJcbiAgICAgICogQW4gYWxpYXMgZm9yIENvbXBvc2l0ZS5hZGRCb2R5XHJcbiAgICAgICogQG1ldGhvZCBhZGRCb2R5XHJcbiAgICAgICogQHBhcmFtIHt3b3JsZH0gd29ybGRcclxuICAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAgKiBAcmV0dXJuIHt3b3JsZH0gVGhlIG9yaWdpbmFsIHdvcmxkIHdpdGggdGhlIGJvZHkgYWRkZWRcclxuICAgICAgKi9cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQW4gYWxpYXMgZm9yIENvbXBvc2l0ZS5hZGRDb25zdHJhaW50XHJcbiAgICAgICogQG1ldGhvZCBhZGRDb25zdHJhaW50XHJcbiAgICAgICogQHBhcmFtIHt3b3JsZH0gd29ybGRcclxuICAgICAgKiBAcGFyYW0ge2NvbnN0cmFpbnR9IGNvbnN0cmFpbnRcclxuICAgICAgKiBAcmV0dXJuIHt3b3JsZH0gVGhlIG9yaWdpbmFsIHdvcmxkIHdpdGggdGhlIGNvbnN0cmFpbnQgYWRkZWRcclxuICAgICAgKi9cclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/body/World.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Detector` module contains methods for detecting collisions given a set of pairs.\r\n*\r\n* @class Detector\r\n*/\r\n\r\n// TODO: speculative contacts\r\n\r\nvar Detector = {};\r\n\r\nmodule.exports = Detector;\r\n\r\nvar SAT = __webpack_require__(/*! ./SAT */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js\");\r\nvar Pair = __webpack_require__(/*! ./Pair */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Finds all collisions given a list of pairs.\r\n     * @method collisions\r\n     * @param {pair[]} broadphasePairs\r\n     * @param {engine} engine\r\n     * @return {array} collisions\r\n     */\r\n    Detector.collisions = function(broadphasePairs, engine) {\r\n        var collisions = [],\r\n            pairsTable = engine.pairs.table;\r\n\r\n        // @if DEBUG\r\n        var metrics = engine.metrics;\r\n        // @endif\r\n        \r\n        for (var i = 0; i < broadphasePairs.length; i++) {\r\n            var bodyA = broadphasePairs[i][0], \r\n                bodyB = broadphasePairs[i][1];\r\n\r\n            if ((bodyA.isStatic || bodyA.isSleeping) && (bodyB.isStatic || bodyB.isSleeping))\r\n                continue;\r\n            \r\n            if (!Detector.canCollide(bodyA.collisionFilter, bodyB.collisionFilter))\r\n                continue;\r\n\r\n            // @if DEBUG\r\n            metrics.midphaseTests += 1;\r\n            // @endif\r\n\r\n            // mid phase\r\n            if (Bounds.overlaps(bodyA.bounds, bodyB.bounds)) {\r\n                for (var j = bodyA.parts.length > 1 ? 1 : 0; j < bodyA.parts.length; j++) {\r\n                    var partA = bodyA.parts[j];\r\n\r\n                    for (var k = bodyB.parts.length > 1 ? 1 : 0; k < bodyB.parts.length; k++) {\r\n                        var partB = bodyB.parts[k];\r\n\r\n                        if ((partA === bodyA && partB === bodyB) || Bounds.overlaps(partA.bounds, partB.bounds)) {\r\n                            // find a previous collision we could reuse\r\n                            var pairId = Pair.id(partA, partB),\r\n                                pair = pairsTable[pairId],\r\n                                previousCollision;\r\n\r\n                            if (pair && pair.isActive) {\r\n                                previousCollision = pair.collision;\r\n                            } else {\r\n                                previousCollision = null;\r\n                            }\r\n\r\n                            // narrow phase\r\n                            var collision = SAT.collides(partA, partB, previousCollision);\r\n\r\n                            // @if DEBUG\r\n                            metrics.narrowphaseTests += 1;\r\n                            if (collision.reused)\r\n                                metrics.narrowReuseCount += 1;\r\n                            // @endif\r\n\r\n                            if (collision.collided) {\r\n                                collisions.push(collision);\r\n                                // @if DEBUG\r\n                                metrics.narrowDetections += 1;\r\n                                // @endif\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return collisions;\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if both supplied collision filters will allow a collision to occur.\r\n     * See `body.collisionFilter` for more information.\r\n     * @method canCollide\r\n     * @param {} filterA\r\n     * @param {} filterB\r\n     * @return {bool} `true` if collision can occur\r\n     */\r\n    Detector.canCollide = function(filterA, filterB) {\r\n        if (filterA.group === filterB.group && filterA.group !== 0)\r\n            return filterA.group > 0;\r\n\r\n        return (filterA.mask & filterB.category) !== 0 && (filterB.mask & filterA.category) !== 0;\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL0RldGVjdG9yLmpzPzU1MmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMsK0VBQU87QUFDekIsV0FBVyxtQkFBTyxDQUFDLGlGQUFRO0FBQzNCLGFBQWEsbUJBQU8sQ0FBQyw4RkFBb0I7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qiw0QkFBNEI7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0REFBNEQsd0JBQXdCO0FBQ3BGOztBQUVBLGdFQUFnRSx3QkFBd0I7QUFDeEY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2NvbGxpc2lvbi9EZXRlY3Rvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLkRldGVjdG9yYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgZGV0ZWN0aW5nIGNvbGxpc2lvbnMgZ2l2ZW4gYSBzZXQgb2YgcGFpcnMuXHJcbipcclxuKiBAY2xhc3MgRGV0ZWN0b3JcclxuKi9cclxuXHJcbi8vIFRPRE86IHNwZWN1bGF0aXZlIGNvbnRhY3RzXHJcblxyXG52YXIgRGV0ZWN0b3IgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGV0ZWN0b3I7XHJcblxyXG52YXIgU0FUID0gcmVxdWlyZSgnLi9TQVQnKTtcclxudmFyIFBhaXIgPSByZXF1aXJlKCcuL1BhaXInKTtcclxudmFyIEJvdW5kcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L0JvdW5kcycpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIGNvbGxpc2lvbnMgZ2l2ZW4gYSBsaXN0IG9mIHBhaXJzLlxyXG4gICAgICogQG1ldGhvZCBjb2xsaXNpb25zXHJcbiAgICAgKiBAcGFyYW0ge3BhaXJbXX0gYnJvYWRwaGFzZVBhaXJzXHJcbiAgICAgKiBAcGFyYW0ge2VuZ2luZX0gZW5naW5lXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gY29sbGlzaW9uc1xyXG4gICAgICovXHJcbiAgICBEZXRlY3Rvci5jb2xsaXNpb25zID0gZnVuY3Rpb24oYnJvYWRwaGFzZVBhaXJzLCBlbmdpbmUpIHtcclxuICAgICAgICB2YXIgY29sbGlzaW9ucyA9IFtdLFxyXG4gICAgICAgICAgICBwYWlyc1RhYmxlID0gZW5naW5lLnBhaXJzLnRhYmxlO1xyXG5cclxuICAgICAgICAvLyBAaWYgREVCVUdcclxuICAgICAgICB2YXIgbWV0cmljcyA9IGVuZ2luZS5tZXRyaWNzO1xyXG4gICAgICAgIC8vIEBlbmRpZlxyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJvYWRwaGFzZVBhaXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5QSA9IGJyb2FkcGhhc2VQYWlyc1tpXVswXSwgXHJcbiAgICAgICAgICAgICAgICBib2R5QiA9IGJyb2FkcGhhc2VQYWlyc1tpXVsxXTtcclxuXHJcbiAgICAgICAgICAgIGlmICgoYm9keUEuaXNTdGF0aWMgfHwgYm9keUEuaXNTbGVlcGluZykgJiYgKGJvZHlCLmlzU3RhdGljIHx8IGJvZHlCLmlzU2xlZXBpbmcpKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIURldGVjdG9yLmNhbkNvbGxpZGUoYm9keUEuY29sbGlzaW9uRmlsdGVyLCBib2R5Qi5jb2xsaXNpb25GaWx0ZXIpKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAvLyBAaWYgREVCVUdcclxuICAgICAgICAgICAgbWV0cmljcy5taWRwaGFzZVRlc3RzICs9IDE7XHJcbiAgICAgICAgICAgIC8vIEBlbmRpZlxyXG5cclxuICAgICAgICAgICAgLy8gbWlkIHBoYXNlXHJcbiAgICAgICAgICAgIGlmIChCb3VuZHMub3ZlcmxhcHMoYm9keUEuYm91bmRzLCBib2R5Qi5ib3VuZHMpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gYm9keUEucGFydHMubGVuZ3RoID4gMSA/IDEgOiAwOyBqIDwgYm9keUEucGFydHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydEEgPSBib2R5QS5wYXJ0c1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IGJvZHlCLnBhcnRzLmxlbmd0aCA+IDEgPyAxIDogMDsgayA8IGJvZHlCLnBhcnRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0QiA9IGJvZHlCLnBhcnRzW2tdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwYXJ0QSA9PT0gYm9keUEgJiYgcGFydEIgPT09IGJvZHlCKSB8fCBCb3VuZHMub3ZlcmxhcHMocGFydEEuYm91bmRzLCBwYXJ0Qi5ib3VuZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIGEgcHJldmlvdXMgY29sbGlzaW9uIHdlIGNvdWxkIHJldXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpcklkID0gUGFpci5pZChwYXJ0QSwgcGFydEIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBwYWlyc1RhYmxlW3BhaXJJZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb2xsaXNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIgJiYgcGFpci5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29sbGlzaW9uID0gcGFpci5jb2xsaXNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29sbGlzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJyb3cgcGhhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsaXNpb24gPSBTQVQuY29sbGlkZXMocGFydEEsIHBhcnRCLCBwcmV2aW91c0NvbGxpc2lvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGlmIERFQlVHXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLm5hcnJvd3BoYXNlVGVzdHMgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb24ucmV1c2VkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MubmFycm93UmV1c2VDb3VudCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGVuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbi5jb2xsaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbnMucHVzaChjb2xsaXNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBpZiBERUJVR1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MubmFycm93RGV0ZWN0aW9ucyArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBlbmRpZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29sbGlzaW9ucztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIHN1cHBsaWVkIGNvbGxpc2lvbiBmaWx0ZXJzIHdpbGwgYWxsb3cgYSBjb2xsaXNpb24gdG8gb2NjdXIuXHJcbiAgICAgKiBTZWUgYGJvZHkuY29sbGlzaW9uRmlsdGVyYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqIEBtZXRob2QgY2FuQ29sbGlkZVxyXG4gICAgICogQHBhcmFtIHt9IGZpbHRlckFcclxuICAgICAqIEBwYXJhbSB7fSBmaWx0ZXJCXHJcbiAgICAgKiBAcmV0dXJuIHtib29sfSBgdHJ1ZWAgaWYgY29sbGlzaW9uIGNhbiBvY2N1clxyXG4gICAgICovXHJcbiAgICBEZXRlY3Rvci5jYW5Db2xsaWRlID0gZnVuY3Rpb24oZmlsdGVyQSwgZmlsdGVyQikge1xyXG4gICAgICAgIGlmIChmaWx0ZXJBLmdyb3VwID09PSBmaWx0ZXJCLmdyb3VwICYmIGZpbHRlckEuZ3JvdXAgIT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJBLmdyb3VwID4gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIChmaWx0ZXJBLm1hc2sgJiBmaWx0ZXJCLmNhdGVnb3J5KSAhPT0gMCAmJiAoZmlsdGVyQi5tYXNrICYgZmlsdGVyQS5jYXRlZ29yeSkgIT09IDA7XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Grid.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Grid.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Grid` module contains methods for creating and manipulating collision broadphase grid structures.\r\n*\r\n* @class Grid\r\n*/\r\n\r\nvar Grid = {};\r\n\r\nmodule.exports = Grid;\r\n\r\nvar Pair = __webpack_require__(/*! ./Pair */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js\");\r\nvar Detector = __webpack_require__(/*! ./Detector */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Detector.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new grid.\r\n     * @method create\r\n     * @param {} options\r\n     * @return {grid} A new grid\r\n     */\r\n    Grid.create = function(options) {\r\n        var defaults = {\r\n            controller: Grid,\r\n            detector: Detector.collisions,\r\n            buckets: {},\r\n            pairs: {},\r\n            pairsList: [],\r\n            bucketWidth: 48,\r\n            bucketHeight: 48\r\n        };\r\n\r\n        return Common.extend(defaults, options);\r\n    };\r\n\r\n    /**\r\n     * The width of a single grid bucket.\r\n     *\r\n     * @property bucketWidth\r\n     * @type number\r\n     * @default 48\r\n     */\r\n\r\n    /**\r\n     * The height of a single grid bucket.\r\n     *\r\n     * @property bucketHeight\r\n     * @type number\r\n     * @default 48\r\n     */\r\n\r\n    /**\r\n     * Updates the grid.\r\n     * @method update\r\n     * @param {grid} grid\r\n     * @param {body[]} bodies\r\n     * @param {engine} engine\r\n     * @param {boolean} forceUpdate\r\n     */\r\n    Grid.update = function(grid, bodies, engine, forceUpdate) {\r\n        var i, col, row,\r\n            world = engine.world,\r\n            buckets = grid.buckets,\r\n            bucket,\r\n            bucketId,\r\n            gridChanged = false;\r\n\r\n        // @if DEBUG\r\n        var metrics = engine.metrics;\r\n        metrics.broadphaseTests = 0;\r\n        // @endif\r\n\r\n        for (i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n\r\n            if (body.isSleeping && !forceUpdate)\r\n                continue;\r\n\r\n            // don't update out of world bodies\r\n            if (body.bounds.max.x < world.bounds.min.x || body.bounds.min.x > world.bounds.max.x\r\n                || body.bounds.max.y < world.bounds.min.y || body.bounds.min.y > world.bounds.max.y)\r\n                continue;\r\n\r\n            var newRegion = Grid._getRegion(grid, body);\r\n\r\n            // if the body has changed grid region\r\n            if (!body.region || newRegion.id !== body.region.id || forceUpdate) {\r\n\r\n                // @if DEBUG\r\n                metrics.broadphaseTests += 1;\r\n                // @endif\r\n\r\n                if (!body.region || forceUpdate)\r\n                    body.region = newRegion;\r\n\r\n                var union = Grid._regionUnion(newRegion, body.region);\r\n\r\n                // update grid buckets affected by region change\r\n                // iterate over the union of both regions\r\n                for (col = union.startCol; col <= union.endCol; col++) {\r\n                    for (row = union.startRow; row <= union.endRow; row++) {\r\n                        bucketId = Grid._getBucketId(col, row);\r\n                        bucket = buckets[bucketId];\r\n\r\n                        var isInsideNewRegion = (col >= newRegion.startCol && col <= newRegion.endCol\r\n                                                && row >= newRegion.startRow && row <= newRegion.endRow);\r\n\r\n                        var isInsideOldRegion = (col >= body.region.startCol && col <= body.region.endCol\r\n                                                && row >= body.region.startRow && row <= body.region.endRow);\r\n\r\n                        // remove from old region buckets\r\n                        if (!isInsideNewRegion && isInsideOldRegion) {\r\n                            if (isInsideOldRegion) {\r\n                                if (bucket)\r\n                                    Grid._bucketRemoveBody(grid, bucket, body);\r\n                            }\r\n                        }\r\n\r\n                        // add to new region buckets\r\n                        if (body.region === newRegion || (isInsideNewRegion && !isInsideOldRegion) || forceUpdate) {\r\n                            if (!bucket)\r\n                                bucket = Grid._createBucket(buckets, bucketId);\r\n                            Grid._bucketAddBody(grid, bucket, body);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // set the new region\r\n                body.region = newRegion;\r\n\r\n                // flag changes so we can update pairs\r\n                gridChanged = true;\r\n            }\r\n        }\r\n\r\n        // update pairs list only if pairs changed (i.e. a body changed region)\r\n        if (gridChanged)\r\n            grid.pairsList = Grid._createActivePairsList(grid);\r\n    };\r\n\r\n    /**\r\n     * Clears the grid.\r\n     * @method clear\r\n     * @param {grid} grid\r\n     */\r\n    Grid.clear = function(grid) {\r\n        grid.buckets = {};\r\n        grid.pairs = {};\r\n        grid.pairsList = [];\r\n    };\r\n\r\n    /**\r\n     * Finds the union of two regions.\r\n     * @method _regionUnion\r\n     * @private\r\n     * @param {} regionA\r\n     * @param {} regionB\r\n     * @return {} region\r\n     */\r\n    Grid._regionUnion = function(regionA, regionB) {\r\n        var startCol = Math.min(regionA.startCol, regionB.startCol),\r\n            endCol = Math.max(regionA.endCol, regionB.endCol),\r\n            startRow = Math.min(regionA.startRow, regionB.startRow),\r\n            endRow = Math.max(regionA.endRow, regionB.endRow);\r\n\r\n        return Grid._createRegion(startCol, endCol, startRow, endRow);\r\n    };\r\n\r\n    /**\r\n     * Gets the region a given body falls in for a given grid.\r\n     * @method _getRegion\r\n     * @private\r\n     * @param {} grid\r\n     * @param {} body\r\n     * @return {} region\r\n     */\r\n    Grid._getRegion = function(grid, body) {\r\n        var bounds = body.bounds,\r\n            startCol = Math.floor(bounds.min.x / grid.bucketWidth),\r\n            endCol = Math.floor(bounds.max.x / grid.bucketWidth),\r\n            startRow = Math.floor(bounds.min.y / grid.bucketHeight),\r\n            endRow = Math.floor(bounds.max.y / grid.bucketHeight);\r\n\r\n        return Grid._createRegion(startCol, endCol, startRow, endRow);\r\n    };\r\n\r\n    /**\r\n     * Creates a region.\r\n     * @method _createRegion\r\n     * @private\r\n     * @param {} startCol\r\n     * @param {} endCol\r\n     * @param {} startRow\r\n     * @param {} endRow\r\n     * @return {} region\r\n     */\r\n    Grid._createRegion = function(startCol, endCol, startRow, endRow) {\r\n        return { \r\n            id: startCol + ',' + endCol + ',' + startRow + ',' + endRow,\r\n            startCol: startCol, \r\n            endCol: endCol, \r\n            startRow: startRow, \r\n            endRow: endRow \r\n        };\r\n    };\r\n\r\n    /**\r\n     * Gets the bucket id at the given position.\r\n     * @method _getBucketId\r\n     * @private\r\n     * @param {} column\r\n     * @param {} row\r\n     * @return {string} bucket id\r\n     */\r\n    Grid._getBucketId = function(column, row) {\r\n        return 'C' + column + 'R' + row;\r\n    };\r\n\r\n    /**\r\n     * Creates a bucket.\r\n     * @method _createBucket\r\n     * @private\r\n     * @param {} buckets\r\n     * @param {} bucketId\r\n     * @return {} bucket\r\n     */\r\n    Grid._createBucket = function(buckets, bucketId) {\r\n        var bucket = buckets[bucketId] = [];\r\n        return bucket;\r\n    };\r\n\r\n    /**\r\n     * Adds a body to a bucket.\r\n     * @method _bucketAddBody\r\n     * @private\r\n     * @param {} grid\r\n     * @param {} bucket\r\n     * @param {} body\r\n     */\r\n    Grid._bucketAddBody = function(grid, bucket, body) {\r\n        // add new pairs\r\n        for (var i = 0; i < bucket.length; i++) {\r\n            var bodyB = bucket[i];\r\n\r\n            if (body.id === bodyB.id || (body.isStatic && bodyB.isStatic))\r\n                continue;\r\n\r\n            // keep track of the number of buckets the pair exists in\r\n            // important for Grid.update to work\r\n            var pairId = Pair.id(body, bodyB),\r\n                pair = grid.pairs[pairId];\r\n\r\n            if (pair) {\r\n                pair[2] += 1;\r\n            } else {\r\n                grid.pairs[pairId] = [body, bodyB, 1];\r\n            }\r\n        }\r\n\r\n        // add to bodies (after pairs, otherwise pairs with self)\r\n        bucket.push(body);\r\n    };\r\n\r\n    /**\r\n     * Removes a body from a bucket.\r\n     * @method _bucketRemoveBody\r\n     * @private\r\n     * @param {} grid\r\n     * @param {} bucket\r\n     * @param {} body\r\n     */\r\n    Grid._bucketRemoveBody = function(grid, bucket, body) {\r\n        // remove from bucket\r\n        bucket.splice(Common.indexOf(bucket, body), 1);\r\n\r\n        // update pair counts\r\n        for (var i = 0; i < bucket.length; i++) {\r\n            // keep track of the number of buckets the pair exists in\r\n            // important for _createActivePairsList to work\r\n            var bodyB = bucket[i],\r\n                pairId = Pair.id(body, bodyB),\r\n                pair = grid.pairs[pairId];\r\n\r\n            if (pair)\r\n                pair[2] -= 1;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Generates a list of the active pairs in the grid.\r\n     * @method _createActivePairsList\r\n     * @private\r\n     * @param {} grid\r\n     * @return [] pairs\r\n     */\r\n    Grid._createActivePairsList = function(grid) {\r\n        var pairKeys,\r\n            pair,\r\n            pairs = [];\r\n\r\n        // grid.pairs is used as a hashmap\r\n        pairKeys = Common.keys(grid.pairs);\r\n\r\n        // iterate over grid.pairs\r\n        for (var k = 0; k < pairKeys.length; k++) {\r\n            pair = grid.pairs[pairKeys[k]];\r\n\r\n            // if pair exists in at least one bucket\r\n            // it is a pair that needs further collision testing so push it\r\n            if (pair[2] > 0) {\r\n                pairs.push(pair);\r\n            } else {\r\n                delete grid.pairs[pairKeys[k]];\r\n            }\r\n        }\r\n\r\n        return pairs;\r\n    };\r\n    \r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL0dyaWQuanM/NTBkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxpRkFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMseUZBQVk7QUFDbkMsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxxQkFBcUI7QUFDL0QsOENBQThDLHFCQUFxQjtBQUNuRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb2xsaXNpb24vR3JpZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLkdyaWRgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbGxpc2lvbiBicm9hZHBoYXNlIGdyaWQgc3RydWN0dXJlcy5cclxuKlxyXG4qIEBjbGFzcyBHcmlkXHJcbiovXHJcblxyXG52YXIgR3JpZCA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmlkO1xyXG5cclxudmFyIFBhaXIgPSByZXF1aXJlKCcuL1BhaXInKTtcclxudmFyIERldGVjdG9yID0gcmVxdWlyZSgnLi9EZXRlY3RvcicpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgZ3JpZC5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge30gb3B0aW9uc1xyXG4gICAgICogQHJldHVybiB7Z3JpZH0gQSBuZXcgZ3JpZFxyXG4gICAgICovXHJcbiAgICBHcmlkLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IEdyaWQsXHJcbiAgICAgICAgICAgIGRldGVjdG9yOiBEZXRlY3Rvci5jb2xsaXNpb25zLFxyXG4gICAgICAgICAgICBidWNrZXRzOiB7fSxcclxuICAgICAgICAgICAgcGFpcnM6IHt9LFxyXG4gICAgICAgICAgICBwYWlyc0xpc3Q6IFtdLFxyXG4gICAgICAgICAgICBidWNrZXRXaWR0aDogNDgsXHJcbiAgICAgICAgICAgIGJ1Y2tldEhlaWdodDogNDhcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gQ29tbW9uLmV4dGVuZChkZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpZHRoIG9mIGEgc2luZ2xlIGdyaWQgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBidWNrZXRXaWR0aFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCA0OFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGdyaWQgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBidWNrZXRIZWlnaHRcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgNDhcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZ3JpZC5cclxuICAgICAqIEBtZXRob2QgdXBkYXRlXHJcbiAgICAgKiBAcGFyYW0ge2dyaWR9IGdyaWRcclxuICAgICAqIEBwYXJhbSB7Ym9keVtdfSBib2RpZXNcclxuICAgICAqIEBwYXJhbSB7ZW5naW5lfSBlbmdpbmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VVcGRhdGVcclxuICAgICAqL1xyXG4gICAgR3JpZC51cGRhdGUgPSBmdW5jdGlvbihncmlkLCBib2RpZXMsIGVuZ2luZSwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICB2YXIgaSwgY29sLCByb3csXHJcbiAgICAgICAgICAgIHdvcmxkID0gZW5naW5lLndvcmxkLFxyXG4gICAgICAgICAgICBidWNrZXRzID0gZ3JpZC5idWNrZXRzLFxyXG4gICAgICAgICAgICBidWNrZXQsXHJcbiAgICAgICAgICAgIGJ1Y2tldElkLFxyXG4gICAgICAgICAgICBncmlkQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBAaWYgREVCVUdcclxuICAgICAgICB2YXIgbWV0cmljcyA9IGVuZ2luZS5tZXRyaWNzO1xyXG4gICAgICAgIG1ldHJpY3MuYnJvYWRwaGFzZVRlc3RzID0gMDtcclxuICAgICAgICAvLyBAZW5kaWZcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmlzU2xlZXBpbmcgJiYgIWZvcmNlVXBkYXRlKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAvLyBkb24ndCB1cGRhdGUgb3V0IG9mIHdvcmxkIGJvZGllc1xyXG4gICAgICAgICAgICBpZiAoYm9keS5ib3VuZHMubWF4LnggPCB3b3JsZC5ib3VuZHMubWluLnggfHwgYm9keS5ib3VuZHMubWluLnggPiB3b3JsZC5ib3VuZHMubWF4LnhcclxuICAgICAgICAgICAgICAgIHx8IGJvZHkuYm91bmRzLm1heC55IDwgd29ybGQuYm91bmRzLm1pbi55IHx8IGJvZHkuYm91bmRzLm1pbi55ID4gd29ybGQuYm91bmRzLm1heC55KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgbmV3UmVnaW9uID0gR3JpZC5fZ2V0UmVnaW9uKGdyaWQsIGJvZHkpO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlIGJvZHkgaGFzIGNoYW5nZWQgZ3JpZCByZWdpb25cclxuICAgICAgICAgICAgaWYgKCFib2R5LnJlZ2lvbiB8fCBuZXdSZWdpb24uaWQgIT09IGJvZHkucmVnaW9uLmlkIHx8IGZvcmNlVXBkYXRlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQGlmIERFQlVHXHJcbiAgICAgICAgICAgICAgICBtZXRyaWNzLmJyb2FkcGhhc2VUZXN0cyArPSAxO1xyXG4gICAgICAgICAgICAgICAgLy8gQGVuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFib2R5LnJlZ2lvbiB8fCBmb3JjZVVwZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnJlZ2lvbiA9IG5ld1JlZ2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pb24gPSBHcmlkLl9yZWdpb25VbmlvbihuZXdSZWdpb24sIGJvZHkucmVnaW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZ3JpZCBidWNrZXRzIGFmZmVjdGVkIGJ5IHJlZ2lvbiBjaGFuZ2VcclxuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgdW5pb24gb2YgYm90aCByZWdpb25zXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbCA9IHVuaW9uLnN0YXJ0Q29sOyBjb2wgPD0gdW5pb24uZW5kQ29sOyBjb2wrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAocm93ID0gdW5pb24uc3RhcnRSb3c7IHJvdyA8PSB1bmlvbi5lbmRSb3c7IHJvdysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkID0gR3JpZC5fZ2V0QnVja2V0SWQoY29sLCByb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRzW2J1Y2tldElkXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0luc2lkZU5ld1JlZ2lvbiA9IChjb2wgPj0gbmV3UmVnaW9uLnN0YXJ0Q29sICYmIGNvbCA8PSBuZXdSZWdpb24uZW5kQ29sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdyA+PSBuZXdSZWdpb24uc3RhcnRSb3cgJiYgcm93IDw9IG5ld1JlZ2lvbi5lbmRSb3cpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzSW5zaWRlT2xkUmVnaW9uID0gKGNvbCA+PSBib2R5LnJlZ2lvbi5zdGFydENvbCAmJiBjb2wgPD0gYm9keS5yZWdpb24uZW5kQ29sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdyA+PSBib2R5LnJlZ2lvbi5zdGFydFJvdyAmJiByb3cgPD0gYm9keS5yZWdpb24uZW5kUm93KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCByZWdpb24gYnVja2V0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSW5zaWRlTmV3UmVnaW9uICYmIGlzSW5zaWRlT2xkUmVnaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnNpZGVPbGRSZWdpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLl9idWNrZXRSZW1vdmVCb2R5KGdyaWQsIGJ1Y2tldCwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byBuZXcgcmVnaW9uIGJ1Y2tldHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkucmVnaW9uID09PSBuZXdSZWdpb24gfHwgKGlzSW5zaWRlTmV3UmVnaW9uICYmICFpc0luc2lkZU9sZFJlZ2lvbikgfHwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnVja2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IEdyaWQuX2NyZWF0ZUJ1Y2tldChidWNrZXRzLCBidWNrZXRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLl9idWNrZXRBZGRCb2R5KGdyaWQsIGJ1Y2tldCwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXcgcmVnaW9uXHJcbiAgICAgICAgICAgICAgICBib2R5LnJlZ2lvbiA9IG5ld1JlZ2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmbGFnIGNoYW5nZXMgc28gd2UgY2FuIHVwZGF0ZSBwYWlyc1xyXG4gICAgICAgICAgICAgICAgZ3JpZENoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB1cGRhdGUgcGFpcnMgbGlzdCBvbmx5IGlmIHBhaXJzIGNoYW5nZWQgKGkuZS4gYSBib2R5IGNoYW5nZWQgcmVnaW9uKVxyXG4gICAgICAgIGlmIChncmlkQ2hhbmdlZClcclxuICAgICAgICAgICAgZ3JpZC5wYWlyc0xpc3QgPSBHcmlkLl9jcmVhdGVBY3RpdmVQYWlyc0xpc3QoZ3JpZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBncmlkLlxyXG4gICAgICogQG1ldGhvZCBjbGVhclxyXG4gICAgICogQHBhcmFtIHtncmlkfSBncmlkXHJcbiAgICAgKi9cclxuICAgIEdyaWQuY2xlYXIgPSBmdW5jdGlvbihncmlkKSB7XHJcbiAgICAgICAgZ3JpZC5idWNrZXRzID0ge307XHJcbiAgICAgICAgZ3JpZC5wYWlycyA9IHt9O1xyXG4gICAgICAgIGdyaWQucGFpcnNMaXN0ID0gW107XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgdGhlIHVuaW9uIG9mIHR3byByZWdpb25zLlxyXG4gICAgICogQG1ldGhvZCBfcmVnaW9uVW5pb25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge30gcmVnaW9uQVxyXG4gICAgICogQHBhcmFtIHt9IHJlZ2lvbkJcclxuICAgICAqIEByZXR1cm4ge30gcmVnaW9uXHJcbiAgICAgKi9cclxuICAgIEdyaWQuX3JlZ2lvblVuaW9uID0gZnVuY3Rpb24ocmVnaW9uQSwgcmVnaW9uQikge1xyXG4gICAgICAgIHZhciBzdGFydENvbCA9IE1hdGgubWluKHJlZ2lvbkEuc3RhcnRDb2wsIHJlZ2lvbkIuc3RhcnRDb2wpLFxyXG4gICAgICAgICAgICBlbmRDb2wgPSBNYXRoLm1heChyZWdpb25BLmVuZENvbCwgcmVnaW9uQi5lbmRDb2wpLFxyXG4gICAgICAgICAgICBzdGFydFJvdyA9IE1hdGgubWluKHJlZ2lvbkEuc3RhcnRSb3csIHJlZ2lvbkIuc3RhcnRSb3cpLFxyXG4gICAgICAgICAgICBlbmRSb3cgPSBNYXRoLm1heChyZWdpb25BLmVuZFJvdywgcmVnaW9uQi5lbmRSb3cpO1xyXG5cclxuICAgICAgICByZXR1cm4gR3JpZC5fY3JlYXRlUmVnaW9uKHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0Um93LCBlbmRSb3cpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlZ2lvbiBhIGdpdmVuIGJvZHkgZmFsbHMgaW4gZm9yIGEgZ2l2ZW4gZ3JpZC5cclxuICAgICAqIEBtZXRob2QgX2dldFJlZ2lvblxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7fSBncmlkXHJcbiAgICAgKiBAcGFyYW0ge30gYm9keVxyXG4gICAgICogQHJldHVybiB7fSByZWdpb25cclxuICAgICAqL1xyXG4gICAgR3JpZC5fZ2V0UmVnaW9uID0gZnVuY3Rpb24oZ3JpZCwgYm9keSkge1xyXG4gICAgICAgIHZhciBib3VuZHMgPSBib2R5LmJvdW5kcyxcclxuICAgICAgICAgICAgc3RhcnRDb2wgPSBNYXRoLmZsb29yKGJvdW5kcy5taW4ueCAvIGdyaWQuYnVja2V0V2lkdGgpLFxyXG4gICAgICAgICAgICBlbmRDb2wgPSBNYXRoLmZsb29yKGJvdW5kcy5tYXgueCAvIGdyaWQuYnVja2V0V2lkdGgpLFxyXG4gICAgICAgICAgICBzdGFydFJvdyA9IE1hdGguZmxvb3IoYm91bmRzLm1pbi55IC8gZ3JpZC5idWNrZXRIZWlnaHQpLFxyXG4gICAgICAgICAgICBlbmRSb3cgPSBNYXRoLmZsb29yKGJvdW5kcy5tYXgueSAvIGdyaWQuYnVja2V0SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEdyaWQuX2NyZWF0ZVJlZ2lvbihzdGFydENvbCwgZW5kQ29sLCBzdGFydFJvdywgZW5kUm93KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgcmVnaW9uLlxyXG4gICAgICogQG1ldGhvZCBfY3JlYXRlUmVnaW9uXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHt9IHN0YXJ0Q29sXHJcbiAgICAgKiBAcGFyYW0ge30gZW5kQ29sXHJcbiAgICAgKiBAcGFyYW0ge30gc3RhcnRSb3dcclxuICAgICAqIEBwYXJhbSB7fSBlbmRSb3dcclxuICAgICAqIEByZXR1cm4ge30gcmVnaW9uXHJcbiAgICAgKi9cclxuICAgIEdyaWQuX2NyZWF0ZVJlZ2lvbiA9IGZ1bmN0aW9uKHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0Um93LCBlbmRSb3cpIHtcclxuICAgICAgICByZXR1cm4geyBcclxuICAgICAgICAgICAgaWQ6IHN0YXJ0Q29sICsgJywnICsgZW5kQ29sICsgJywnICsgc3RhcnRSb3cgKyAnLCcgKyBlbmRSb3csXHJcbiAgICAgICAgICAgIHN0YXJ0Q29sOiBzdGFydENvbCwgXHJcbiAgICAgICAgICAgIGVuZENvbDogZW5kQ29sLCBcclxuICAgICAgICAgICAgc3RhcnRSb3c6IHN0YXJ0Um93LCBcclxuICAgICAgICAgICAgZW5kUm93OiBlbmRSb3cgXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBidWNrZXQgaWQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICogQG1ldGhvZCBfZ2V0QnVja2V0SWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge30gY29sdW1uXHJcbiAgICAgKiBAcGFyYW0ge30gcm93XHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IGJ1Y2tldCBpZFxyXG4gICAgICovXHJcbiAgICBHcmlkLl9nZXRCdWNrZXRJZCA9IGZ1bmN0aW9uKGNvbHVtbiwgcm93KSB7XHJcbiAgICAgICAgcmV0dXJuICdDJyArIGNvbHVtbiArICdSJyArIHJvdztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgYnVja2V0LlxyXG4gICAgICogQG1ldGhvZCBfY3JlYXRlQnVja2V0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHt9IGJ1Y2tldHNcclxuICAgICAqIEBwYXJhbSB7fSBidWNrZXRJZFxyXG4gICAgICogQHJldHVybiB7fSBidWNrZXRcclxuICAgICAqL1xyXG4gICAgR3JpZC5fY3JlYXRlQnVja2V0ID0gZnVuY3Rpb24oYnVja2V0cywgYnVja2V0SWQpIHtcclxuICAgICAgICB2YXIgYnVja2V0ID0gYnVja2V0c1tidWNrZXRJZF0gPSBbXTtcclxuICAgICAgICByZXR1cm4gYnVja2V0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBib2R5IHRvIGEgYnVja2V0LlxyXG4gICAgICogQG1ldGhvZCBfYnVja2V0QWRkQm9keVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7fSBncmlkXHJcbiAgICAgKiBAcGFyYW0ge30gYnVja2V0XHJcbiAgICAgKiBAcGFyYW0ge30gYm9keVxyXG4gICAgICovXHJcbiAgICBHcmlkLl9idWNrZXRBZGRCb2R5ID0gZnVuY3Rpb24oZ3JpZCwgYnVja2V0LCBib2R5KSB7XHJcbiAgICAgICAgLy8gYWRkIG5ldyBwYWlyc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVja2V0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5QiA9IGJ1Y2tldFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmlkID09PSBib2R5Qi5pZCB8fCAoYm9keS5pc1N0YXRpYyAmJiBib2R5Qi5pc1N0YXRpYykpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBidWNrZXRzIHRoZSBwYWlyIGV4aXN0cyBpblxyXG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIEdyaWQudXBkYXRlIHRvIHdvcmtcclxuICAgICAgICAgICAgdmFyIHBhaXJJZCA9IFBhaXIuaWQoYm9keSwgYm9keUIpLFxyXG4gICAgICAgICAgICAgICAgcGFpciA9IGdyaWQucGFpcnNbcGFpcklkXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYWlyKSB7XHJcbiAgICAgICAgICAgICAgICBwYWlyWzJdICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBncmlkLnBhaXJzW3BhaXJJZF0gPSBbYm9keSwgYm9keUIsIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgdG8gYm9kaWVzIChhZnRlciBwYWlycywgb3RoZXJ3aXNlIHBhaXJzIHdpdGggc2VsZilcclxuICAgICAgICBidWNrZXQucHVzaChib2R5KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgYm9keSBmcm9tIGEgYnVja2V0LlxyXG4gICAgICogQG1ldGhvZCBfYnVja2V0UmVtb3ZlQm9keVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7fSBncmlkXHJcbiAgICAgKiBAcGFyYW0ge30gYnVja2V0XHJcbiAgICAgKiBAcGFyYW0ge30gYm9keVxyXG4gICAgICovXHJcbiAgICBHcmlkLl9idWNrZXRSZW1vdmVCb2R5ID0gZnVuY3Rpb24oZ3JpZCwgYnVja2V0LCBib2R5KSB7XHJcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gYnVja2V0XHJcbiAgICAgICAgYnVja2V0LnNwbGljZShDb21tb24uaW5kZXhPZihidWNrZXQsIGJvZHkpLCAxKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHBhaXIgY291bnRzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWNrZXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdGhlIHBhaXIgZXhpc3RzIGluXHJcbiAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgX2NyZWF0ZUFjdGl2ZVBhaXJzTGlzdCB0byB3b3JrXHJcbiAgICAgICAgICAgIHZhciBib2R5QiA9IGJ1Y2tldFtpXSxcclxuICAgICAgICAgICAgICAgIHBhaXJJZCA9IFBhaXIuaWQoYm9keSwgYm9keUIpLFxyXG4gICAgICAgICAgICAgICAgcGFpciA9IGdyaWQucGFpcnNbcGFpcklkXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYWlyKVxyXG4gICAgICAgICAgICAgICAgcGFpclsyXSAtPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBsaXN0IG9mIHRoZSBhY3RpdmUgcGFpcnMgaW4gdGhlIGdyaWQuXHJcbiAgICAgKiBAbWV0aG9kIF9jcmVhdGVBY3RpdmVQYWlyc0xpc3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge30gZ3JpZFxyXG4gICAgICogQHJldHVybiBbXSBwYWlyc1xyXG4gICAgICovXHJcbiAgICBHcmlkLl9jcmVhdGVBY3RpdmVQYWlyc0xpc3QgPSBmdW5jdGlvbihncmlkKSB7XHJcbiAgICAgICAgdmFyIHBhaXJLZXlzLFxyXG4gICAgICAgICAgICBwYWlyLFxyXG4gICAgICAgICAgICBwYWlycyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBncmlkLnBhaXJzIGlzIHVzZWQgYXMgYSBoYXNobWFwXHJcbiAgICAgICAgcGFpcktleXMgPSBDb21tb24ua2V5cyhncmlkLnBhaXJzKTtcclxuXHJcbiAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGdyaWQucGFpcnNcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHBhaXJLZXlzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHBhaXIgPSBncmlkLnBhaXJzW3BhaXJLZXlzW2tdXTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHBhaXIgZXhpc3RzIGluIGF0IGxlYXN0IG9uZSBidWNrZXRcclxuICAgICAgICAgICAgLy8gaXQgaXMgYSBwYWlyIHRoYXQgbmVlZHMgZnVydGhlciBjb2xsaXNpb24gdGVzdGluZyBzbyBwdXNoIGl0XHJcbiAgICAgICAgICAgIGlmIChwYWlyWzJdID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcGFpcnMucHVzaChwYWlyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBncmlkLnBhaXJzW3BhaXJLZXlzW2tdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhaXJzO1xyXG4gICAgfTtcclxuICAgIFxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Grid.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* The `Matter.Pair` module contains methods for creating and manipulating collision pairs.\r\n*\r\n* @class Pair\r\n*/\r\n\r\nvar Pair = {};\r\n\r\nmodule.exports = Pair;\r\n\r\n(function() {\r\n    \r\n    /**\r\n     * Creates a pair.\r\n     * @method create\r\n     * @param {collision} collision\r\n     * @param {number} timestamp\r\n     * @return {pair} A new pair\r\n     */\r\n    Pair.create = function(collision, timestamp) {\r\n        var bodyA = collision.bodyA,\r\n            bodyB = collision.bodyB;\r\n\r\n        var pair = {\r\n            id: Pair.id(bodyA, bodyB),\r\n            bodyA: bodyA,\r\n            bodyB: bodyB,\r\n            activeContacts: [],\r\n            separation: 0,\r\n            isActive: true,\r\n            confirmedActive: true,\r\n            isSensor: bodyA.isSensor || bodyB.isSensor,\r\n            timeCreated: timestamp,\r\n            timeUpdated: timestamp,\r\n            collision: null,\r\n            inverseMass: 0,\r\n            friction: 0,\r\n            frictionStatic: 0,\r\n            restitution: 0,\r\n            slop: 0\r\n        };\r\n\r\n        Pair.update(pair, collision, timestamp);\r\n\r\n        return pair;\r\n    };\r\n\r\n    /**\r\n     * Updates a pair given a collision.\r\n     * @method update\r\n     * @param {pair} pair\r\n     * @param {collision} collision\r\n     * @param {number} timestamp\r\n     */\r\n    Pair.update = function(pair, collision, timestamp) {\r\n        pair.collision = collision;\r\n\r\n        if (collision.collided) {\r\n            var supports = collision.supports,\r\n                activeContacts = pair.activeContacts,\r\n                parentA = collision.parentA,\r\n                parentB = collision.parentB;\r\n\r\n            pair.inverseMass = parentA.inverseMass + parentB.inverseMass;\r\n            pair.friction = Math.min(parentA.friction, parentB.friction);\r\n            pair.frictionStatic = Math.max(parentA.frictionStatic, parentB.frictionStatic);\r\n            pair.restitution = Math.max(parentA.restitution, parentB.restitution);\r\n            pair.slop = Math.max(parentA.slop, parentB.slop);\r\n\r\n            for (var i = 0; i < supports.length; i++) {\r\n                activeContacts[i] = supports[i].contact;\r\n            }\r\n\r\n            // optimise array size\r\n            var supportCount = supports.length;\r\n            if (supportCount < activeContacts.length) {\r\n                activeContacts.length = supportCount;\r\n            }\r\n\r\n            pair.separation = collision.depth;\r\n            Pair.setActive(pair, true, timestamp);\r\n        } else {\r\n            if (pair.isActive === true)\r\n                Pair.setActive(pair, false, timestamp);\r\n        }\r\n    };\r\n    \r\n    /**\r\n     * Set a pair as active or inactive.\r\n     * @method setActive\r\n     * @param {pair} pair\r\n     * @param {bool} isActive\r\n     * @param {number} timestamp\r\n     */\r\n    Pair.setActive = function(pair, isActive, timestamp) {\r\n        if (isActive) {\r\n            pair.isActive = true;\r\n            pair.timeUpdated = timestamp;\r\n        } else {\r\n            pair.isActive = false;\r\n            pair.activeContacts.length = 0;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Get the id for the given pair.\r\n     * @method id\r\n     * @param {body} bodyA\r\n     * @param {body} bodyB\r\n     * @return {string} Unique pairId\r\n     */\r\n    Pair.id = function(bodyA, bodyB) {\r\n        if (bodyA.id < bodyB.id) {\r\n            return 'A' + bodyA.id + 'B' + bodyB.id;\r\n        } else {\r\n            return 'A' + bodyB.id + 'B' + bodyA.id;\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1BhaXIuanM/NWIzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLEtBQUs7QUFDcEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsS0FBSztBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb2xsaXNpb24vUGFpci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLlBhaXJgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbGxpc2lvbiBwYWlycy5cclxuKlxyXG4qIEBjbGFzcyBQYWlyXHJcbiovXHJcblxyXG52YXIgUGFpciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYWlyO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBwYWlyLlxyXG4gICAgICogQG1ldGhvZCBjcmVhdGVcclxuICAgICAqIEBwYXJhbSB7Y29sbGlzaW9ufSBjb2xsaXNpb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RhbXBcclxuICAgICAqIEByZXR1cm4ge3BhaXJ9IEEgbmV3IHBhaXJcclxuICAgICAqL1xyXG4gICAgUGFpci5jcmVhdGUgPSBmdW5jdGlvbihjb2xsaXNpb24sIHRpbWVzdGFtcCkge1xyXG4gICAgICAgIHZhciBib2R5QSA9IGNvbGxpc2lvbi5ib2R5QSxcclxuICAgICAgICAgICAgYm9keUIgPSBjb2xsaXNpb24uYm9keUI7XHJcblxyXG4gICAgICAgIHZhciBwYWlyID0ge1xyXG4gICAgICAgICAgICBpZDogUGFpci5pZChib2R5QSwgYm9keUIpLFxyXG4gICAgICAgICAgICBib2R5QTogYm9keUEsXHJcbiAgICAgICAgICAgIGJvZHlCOiBib2R5QixcclxuICAgICAgICAgICAgYWN0aXZlQ29udGFjdHM6IFtdLFxyXG4gICAgICAgICAgICBzZXBhcmF0aW9uOiAwLFxyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlybWVkQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBpc1NlbnNvcjogYm9keUEuaXNTZW5zb3IgfHwgYm9keUIuaXNTZW5zb3IsXHJcbiAgICAgICAgICAgIHRpbWVDcmVhdGVkOiB0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIHRpbWVVcGRhdGVkOiB0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbjogbnVsbCxcclxuICAgICAgICAgICAgaW52ZXJzZU1hc3M6IDAsXHJcbiAgICAgICAgICAgIGZyaWN0aW9uOiAwLFxyXG4gICAgICAgICAgICBmcmljdGlvblN0YXRpYzogMCxcclxuICAgICAgICAgICAgcmVzdGl0dXRpb246IDAsXHJcbiAgICAgICAgICAgIHNsb3A6IDBcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBQYWlyLnVwZGF0ZShwYWlyLCBjb2xsaXNpb24sIHRpbWVzdGFtcCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwYWlyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgYSBwYWlyIGdpdmVuIGEgY29sbGlzaW9uLlxyXG4gICAgICogQG1ldGhvZCB1cGRhdGVcclxuICAgICAqIEBwYXJhbSB7cGFpcn0gcGFpclxyXG4gICAgICogQHBhcmFtIHtjb2xsaXNpb259IGNvbGxpc2lvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcFxyXG4gICAgICovXHJcbiAgICBQYWlyLnVwZGF0ZSA9IGZ1bmN0aW9uKHBhaXIsIGNvbGxpc2lvbiwgdGltZXN0YW1wKSB7XHJcbiAgICAgICAgcGFpci5jb2xsaXNpb24gPSBjb2xsaXNpb247XHJcblxyXG4gICAgICAgIGlmIChjb2xsaXNpb24uY29sbGlkZWQpIHtcclxuICAgICAgICAgICAgdmFyIHN1cHBvcnRzID0gY29sbGlzaW9uLnN1cHBvcnRzLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlQ29udGFjdHMgPSBwYWlyLmFjdGl2ZUNvbnRhY3RzLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50QSA9IGNvbGxpc2lvbi5wYXJlbnRBLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50QiA9IGNvbGxpc2lvbi5wYXJlbnRCO1xyXG5cclxuICAgICAgICAgICAgcGFpci5pbnZlcnNlTWFzcyA9IHBhcmVudEEuaW52ZXJzZU1hc3MgKyBwYXJlbnRCLmludmVyc2VNYXNzO1xyXG4gICAgICAgICAgICBwYWlyLmZyaWN0aW9uID0gTWF0aC5taW4ocGFyZW50QS5mcmljdGlvbiwgcGFyZW50Qi5mcmljdGlvbik7XHJcbiAgICAgICAgICAgIHBhaXIuZnJpY3Rpb25TdGF0aWMgPSBNYXRoLm1heChwYXJlbnRBLmZyaWN0aW9uU3RhdGljLCBwYXJlbnRCLmZyaWN0aW9uU3RhdGljKTtcclxuICAgICAgICAgICAgcGFpci5yZXN0aXR1dGlvbiA9IE1hdGgubWF4KHBhcmVudEEucmVzdGl0dXRpb24sIHBhcmVudEIucmVzdGl0dXRpb24pO1xyXG4gICAgICAgICAgICBwYWlyLnNsb3AgPSBNYXRoLm1heChwYXJlbnRBLnNsb3AsIHBhcmVudEIuc2xvcCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cHBvcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVDb250YWN0c1tpXSA9IHN1cHBvcnRzW2ldLmNvbnRhY3Q7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIG9wdGltaXNlIGFycmF5IHNpemVcclxuICAgICAgICAgICAgdmFyIHN1cHBvcnRDb3VudCA9IHN1cHBvcnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHN1cHBvcnRDb3VudCA8IGFjdGl2ZUNvbnRhY3RzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlQ29udGFjdHMubGVuZ3RoID0gc3VwcG9ydENvdW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYWlyLnNlcGFyYXRpb24gPSBjb2xsaXNpb24uZGVwdGg7XHJcbiAgICAgICAgICAgIFBhaXIuc2V0QWN0aXZlKHBhaXIsIHRydWUsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHBhaXIuaXNBY3RpdmUgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICBQYWlyLnNldEFjdGl2ZShwYWlyLCBmYWxzZSwgdGltZXN0YW1wKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHBhaXIgYXMgYWN0aXZlIG9yIGluYWN0aXZlLlxyXG4gICAgICogQG1ldGhvZCBzZXRBY3RpdmVcclxuICAgICAqIEBwYXJhbSB7cGFpcn0gcGFpclxyXG4gICAgICogQHBhcmFtIHtib29sfSBpc0FjdGl2ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcFxyXG4gICAgICovXHJcbiAgICBQYWlyLnNldEFjdGl2ZSA9IGZ1bmN0aW9uKHBhaXIsIGlzQWN0aXZlLCB0aW1lc3RhbXApIHtcclxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcGFpci5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHBhaXIudGltZVVwZGF0ZWQgPSB0aW1lc3RhbXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGFpci5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBwYWlyLmFjdGl2ZUNvbnRhY3RzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgaWQgZm9yIHRoZSBnaXZlbiBwYWlyLlxyXG4gICAgICogQG1ldGhvZCBpZFxyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5QVxyXG4gICAgICogQHBhcmFtIHtib2R5fSBib2R5QlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBVbmlxdWUgcGFpcklkXHJcbiAgICAgKi9cclxuICAgIFBhaXIuaWQgPSBmdW5jdGlvbihib2R5QSwgYm9keUIpIHtcclxuICAgICAgICBpZiAoYm9keUEuaWQgPCBib2R5Qi5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0EnICsgYm9keUEuaWQgKyAnQicgKyBib2R5Qi5pZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0EnICsgYm9keUIuaWQgKyAnQicgKyBib2R5QS5pZDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Pairs.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Pairs.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Pairs` module contains methods for creating and manipulating collision pair sets.\r\n*\r\n* @class Pairs\r\n*/\r\n\r\nvar Pairs = {};\r\n\r\nmodule.exports = Pairs;\r\n\r\nvar Pair = __webpack_require__(/*! ./Pair */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pair.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n    \r\n    Pairs._pairMaxIdleLife = 1000;\r\n\r\n    /**\r\n     * Creates a new pairs structure.\r\n     * @method create\r\n     * @param {object} options\r\n     * @return {pairs} A new pairs structure\r\n     */\r\n    Pairs.create = function(options) {\r\n        return Common.extend({ \r\n            table: {},\r\n            list: [],\r\n            collisionStart: [],\r\n            collisionActive: [],\r\n            collisionEnd: []\r\n        }, options);\r\n    };\r\n\r\n    /**\r\n     * Updates pairs given a list of collisions.\r\n     * @method update\r\n     * @param {object} pairs\r\n     * @param {collision[]} collisions\r\n     * @param {number} timestamp\r\n     */\r\n    Pairs.update = function(pairs, collisions, timestamp) {\r\n        var pairsList = pairs.list,\r\n            pairsTable = pairs.table,\r\n            collisionStart = pairs.collisionStart,\r\n            collisionEnd = pairs.collisionEnd,\r\n            collisionActive = pairs.collisionActive,\r\n            collision,\r\n            pairId,\r\n            pair,\r\n            i;\r\n\r\n        // clear collision state arrays, but maintain old reference\r\n        collisionStart.length = 0;\r\n        collisionEnd.length = 0;\r\n        collisionActive.length = 0;\r\n\r\n        for (i = 0; i < pairsList.length; i++) {\r\n            pairsList[i].confirmedActive = false;\r\n        }\r\n\r\n        for (i = 0; i < collisions.length; i++) {\r\n            collision = collisions[i];\r\n\r\n            if (collision.collided) {\r\n                pairId = Pair.id(collision.bodyA, collision.bodyB);\r\n\r\n                pair = pairsTable[pairId];\r\n                \r\n                if (pair) {\r\n                    // pair already exists (but may or may not be active)\r\n                    if (pair.isActive) {\r\n                        // pair exists and is active\r\n                        collisionActive.push(pair);\r\n                    } else {\r\n                        // pair exists but was inactive, so a collision has just started again\r\n                        collisionStart.push(pair);\r\n                    }\r\n\r\n                    // update the pair\r\n                    Pair.update(pair, collision, timestamp);\r\n                    pair.confirmedActive = true;\r\n                } else {\r\n                    // pair did not exist, create a new pair\r\n                    pair = Pair.create(collision, timestamp);\r\n                    pairsTable[pairId] = pair;\r\n\r\n                    // push the new pair\r\n                    collisionStart.push(pair);\r\n                    pairsList.push(pair);\r\n                }\r\n            }\r\n        }\r\n\r\n        // deactivate previously active pairs that are now inactive\r\n        for (i = 0; i < pairsList.length; i++) {\r\n            pair = pairsList[i];\r\n            if (pair.isActive && !pair.confirmedActive) {\r\n                Pair.setActive(pair, false, timestamp);\r\n                collisionEnd.push(pair);\r\n            }\r\n        }\r\n    };\r\n    \r\n    /**\r\n     * Finds and removes pairs that have been inactive for a set amount of time.\r\n     * @method removeOld\r\n     * @param {object} pairs\r\n     * @param {number} timestamp\r\n     */\r\n    Pairs.removeOld = function(pairs, timestamp) {\r\n        var pairsList = pairs.list,\r\n            pairsTable = pairs.table,\r\n            indexesToRemove = [],\r\n            pair,\r\n            collision,\r\n            pairIndex,\r\n            i;\r\n\r\n        for (i = 0; i < pairsList.length; i++) {\r\n            pair = pairsList[i];\r\n            collision = pair.collision;\r\n            \r\n            // never remove sleeping pairs\r\n            if (collision.bodyA.isSleeping || collision.bodyB.isSleeping) {\r\n                pair.timeUpdated = timestamp;\r\n                continue;\r\n            }\r\n\r\n            // if pair is inactive for too long, mark it to be removed\r\n            if (timestamp - pair.timeUpdated > Pairs._pairMaxIdleLife) {\r\n                indexesToRemove.push(i);\r\n            }\r\n        }\r\n\r\n        // remove marked pairs\r\n        for (i = 0; i < indexesToRemove.length; i++) {\r\n            pairIndex = indexesToRemove[i] - i;\r\n            pair = pairsList[pairIndex];\r\n            delete pairsTable[pair.id];\r\n            pairsList.splice(pairIndex, 1);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Clears the given pairs structure.\r\n     * @method clear\r\n     * @param {pairs} pairs\r\n     * @return {pairs} pairs\r\n     */\r\n    Pairs.clear = function(pairs) {\r\n        pairs.table = {};\r\n        pairs.list.length = 0;\r\n        pairs.collisionStart.length = 0;\r\n        pairs.collisionActive.length = 0;\r\n        pairs.collisionEnd.length = 0;\r\n        return pairs;\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1BhaXJzLmpzPzU4MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsaUZBQVE7QUFDM0IsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjs7QUFFckM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQSw4QjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxZQUFZO0FBQzNCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQSxtQkFBbUIsdUJBQXVCO0FBQzFDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsNEJBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1BhaXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuUGFpcnNgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbGxpc2lvbiBwYWlyIHNldHMuXHJcbipcclxuKiBAY2xhc3MgUGFpcnNcclxuKi9cclxuXHJcbnZhciBQYWlycyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYWlycztcclxuXHJcbnZhciBQYWlyID0gcmVxdWlyZSgnLi9QYWlyJyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuLi9jb3JlL0NvbW1vbicpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG4gICAgXHJcbiAgICBQYWlycy5fcGFpck1heElkbGVMaWZlID0gMTAwMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgcGFpcnMgc3RydWN0dXJlLlxyXG4gICAgICogQG1ldGhvZCBjcmVhdGVcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJuIHtwYWlyc30gQSBuZXcgcGFpcnMgc3RydWN0dXJlXHJcbiAgICAgKi9cclxuICAgIFBhaXJzLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gQ29tbW9uLmV4dGVuZCh7IFxyXG4gICAgICAgICAgICB0YWJsZToge30sXHJcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICAgICAgICBjb2xsaXNpb25TdGFydDogW10sXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbkFjdGl2ZTogW10sXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbkVuZDogW11cclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHBhaXJzIGdpdmVuIGEgbGlzdCBvZiBjb2xsaXNpb25zLlxyXG4gICAgICogQG1ldGhvZCB1cGRhdGVcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYWlyc1xyXG4gICAgICogQHBhcmFtIHtjb2xsaXNpb25bXX0gY29sbGlzaW9uc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcFxyXG4gICAgICovXHJcbiAgICBQYWlycy51cGRhdGUgPSBmdW5jdGlvbihwYWlycywgY29sbGlzaW9ucywgdGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIHBhaXJzTGlzdCA9IHBhaXJzLmxpc3QsXHJcbiAgICAgICAgICAgIHBhaXJzVGFibGUgPSBwYWlycy50YWJsZSxcclxuICAgICAgICAgICAgY29sbGlzaW9uU3RhcnQgPSBwYWlycy5jb2xsaXNpb25TdGFydCxcclxuICAgICAgICAgICAgY29sbGlzaW9uRW5kID0gcGFpcnMuY29sbGlzaW9uRW5kLFxyXG4gICAgICAgICAgICBjb2xsaXNpb25BY3RpdmUgPSBwYWlycy5jb2xsaXNpb25BY3RpdmUsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgcGFpcklkLFxyXG4gICAgICAgICAgICBwYWlyLFxyXG4gICAgICAgICAgICBpO1xyXG5cclxuICAgICAgICAvLyBjbGVhciBjb2xsaXNpb24gc3RhdGUgYXJyYXlzLCBidXQgbWFpbnRhaW4gb2xkIHJlZmVyZW5jZVxyXG4gICAgICAgIGNvbGxpc2lvblN0YXJ0Lmxlbmd0aCA9IDA7XHJcbiAgICAgICAgY29sbGlzaW9uRW5kLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgY29sbGlzaW9uQWN0aXZlLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWlyc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcGFpcnNMaXN0W2ldLmNvbmZpcm1lZEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbGxpc2lvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29sbGlzaW9uID0gY29sbGlzaW9uc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb2xsaXNpb24uY29sbGlkZWQpIHtcclxuICAgICAgICAgICAgICAgIHBhaXJJZCA9IFBhaXIuaWQoY29sbGlzaW9uLmJvZHlBLCBjb2xsaXNpb24uYm9keUIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhaXIgPSBwYWlyc1RhYmxlW3BhaXJJZF07XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChwYWlyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFpciBhbHJlYWR5IGV4aXN0cyAoYnV0IG1heSBvciBtYXkgbm90IGJlIGFjdGl2ZSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYWlyIGV4aXN0cyBhbmQgaXMgYWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFjdGl2ZS5wdXNoKHBhaXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhaXIgZXhpc3RzIGJ1dCB3YXMgaW5hY3RpdmUsIHNvIGEgY29sbGlzaW9uIGhhcyBqdXN0IHN0YXJ0ZWQgYWdhaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uU3RhcnQucHVzaChwYWlyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcGFpclxyXG4gICAgICAgICAgICAgICAgICAgIFBhaXIudXBkYXRlKHBhaXIsIGNvbGxpc2lvbiwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICBwYWlyLmNvbmZpcm1lZEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhaXIgZGlkIG5vdCBleGlzdCwgY3JlYXRlIGEgbmV3IHBhaXJcclxuICAgICAgICAgICAgICAgICAgICBwYWlyID0gUGFpci5jcmVhdGUoY29sbGlzaW9uLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhaXJzVGFibGVbcGFpcklkXSA9IHBhaXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHB1c2ggdGhlIG5ldyBwYWlyXHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uU3RhcnQucHVzaChwYWlyKTtcclxuICAgICAgICAgICAgICAgICAgICBwYWlyc0xpc3QucHVzaChwYWlyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVhY3RpdmF0ZSBwcmV2aW91c2x5IGFjdGl2ZSBwYWlycyB0aGF0IGFyZSBub3cgaW5hY3RpdmVcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFpcnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhaXIgPSBwYWlyc0xpc3RbaV07XHJcbiAgICAgICAgICAgIGlmIChwYWlyLmlzQWN0aXZlICYmICFwYWlyLmNvbmZpcm1lZEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgUGFpci5zZXRBY3RpdmUocGFpciwgZmFsc2UsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25FbmQucHVzaChwYWlyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYW5kIHJlbW92ZXMgcGFpcnMgdGhhdCBoYXZlIGJlZW4gaW5hY3RpdmUgZm9yIGEgc2V0IGFtb3VudCBvZiB0aW1lLlxyXG4gICAgICogQG1ldGhvZCByZW1vdmVPbGRcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYWlyc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcFxyXG4gICAgICovXHJcbiAgICBQYWlycy5yZW1vdmVPbGQgPSBmdW5jdGlvbihwYWlycywgdGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIHBhaXJzTGlzdCA9IHBhaXJzLmxpc3QsXHJcbiAgICAgICAgICAgIHBhaXJzVGFibGUgPSBwYWlycy50YWJsZSxcclxuICAgICAgICAgICAgaW5kZXhlc1RvUmVtb3ZlID0gW10sXHJcbiAgICAgICAgICAgIHBhaXIsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgcGFpckluZGV4LFxyXG4gICAgICAgICAgICBpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFpcnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhaXIgPSBwYWlyc0xpc3RbaV07XHJcbiAgICAgICAgICAgIGNvbGxpc2lvbiA9IHBhaXIuY29sbGlzaW9uO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gbmV2ZXIgcmVtb3ZlIHNsZWVwaW5nIHBhaXJzXHJcbiAgICAgICAgICAgIGlmIChjb2xsaXNpb24uYm9keUEuaXNTbGVlcGluZyB8fCBjb2xsaXNpb24uYm9keUIuaXNTbGVlcGluZykge1xyXG4gICAgICAgICAgICAgICAgcGFpci50aW1lVXBkYXRlZCA9IHRpbWVzdGFtcDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBwYWlyIGlzIGluYWN0aXZlIGZvciB0b28gbG9uZywgbWFyayBpdCB0byBiZSByZW1vdmVkXHJcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXAgLSBwYWlyLnRpbWVVcGRhdGVkID4gUGFpcnMuX3BhaXJNYXhJZGxlTGlmZSkge1xyXG4gICAgICAgICAgICAgICAgaW5kZXhlc1RvUmVtb3ZlLnB1c2goaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSBtYXJrZWQgcGFpcnNcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhlc1RvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhaXJJbmRleCA9IGluZGV4ZXNUb1JlbW92ZVtpXSAtIGk7XHJcbiAgICAgICAgICAgIHBhaXIgPSBwYWlyc0xpc3RbcGFpckluZGV4XTtcclxuICAgICAgICAgICAgZGVsZXRlIHBhaXJzVGFibGVbcGFpci5pZF07XHJcbiAgICAgICAgICAgIHBhaXJzTGlzdC5zcGxpY2UocGFpckluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBnaXZlbiBwYWlycyBzdHJ1Y3R1cmUuXHJcbiAgICAgKiBAbWV0aG9kIGNsZWFyXHJcbiAgICAgKiBAcGFyYW0ge3BhaXJzfSBwYWlyc1xyXG4gICAgICogQHJldHVybiB7cGFpcnN9IHBhaXJzXHJcbiAgICAgKi9cclxuICAgIFBhaXJzLmNsZWFyID0gZnVuY3Rpb24ocGFpcnMpIHtcclxuICAgICAgICBwYWlycy50YWJsZSA9IHt9O1xyXG4gICAgICAgIHBhaXJzLmxpc3QubGVuZ3RoID0gMDtcclxuICAgICAgICBwYWlycy5jb2xsaXNpb25TdGFydC5sZW5ndGggPSAwO1xyXG4gICAgICAgIHBhaXJzLmNvbGxpc2lvbkFjdGl2ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgIHBhaXJzLmNvbGxpc2lvbkVuZC5sZW5ndGggPSAwO1xyXG4gICAgICAgIHJldHVybiBwYWlycztcclxuICAgIH07XHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Pairs.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Query.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Query.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Query` module contains methods for performing collision queries.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Query\r\n*/\r\n\r\nvar Query = {};\r\n\r\nmodule.exports = Query;\r\n\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar SAT = __webpack_require__(/*! ./SAT */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Bodies = __webpack_require__(/*! ../factory/Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Returns a list of collisions between `body` and `bodies`.\r\n     * @method collides\r\n     * @param {body} body\r\n     * @param {body[]} bodies\r\n     * @return {object[]} Collisions\r\n     */\r\n    Query.collides = function(body, bodies) {\r\n        var collisions = [];\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var bodyA = bodies[i];\r\n            \r\n            if (Bounds.overlaps(bodyA.bounds, body.bounds)) {\r\n                for (var j = bodyA.parts.length === 1 ? 0 : 1; j < bodyA.parts.length; j++) {\r\n                    var part = bodyA.parts[j];\r\n\r\n                    if (Bounds.overlaps(part.bounds, body.bounds)) {\r\n                        var collision = SAT.collides(part, body);\r\n\r\n                        if (collision.collided) {\r\n                            collisions.push(collision);\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return collisions;\r\n    };\r\n\r\n    /**\r\n     * Casts a ray segment against a set of bodies and returns all collisions, ray width is optional. Intersection points are not provided.\r\n     * @method ray\r\n     * @param {body[]} bodies\r\n     * @param {vector} startPoint\r\n     * @param {vector} endPoint\r\n     * @param {number} [rayWidth]\r\n     * @return {object[]} Collisions\r\n     */\r\n    Query.ray = function(bodies, startPoint, endPoint, rayWidth) {\r\n        rayWidth = rayWidth || 1e-100;\r\n\r\n        var rayAngle = Vector.angle(startPoint, endPoint),\r\n            rayLength = Vector.magnitude(Vector.sub(startPoint, endPoint)),\r\n            rayX = (endPoint.x + startPoint.x) * 0.5,\r\n            rayY = (endPoint.y + startPoint.y) * 0.5,\r\n            ray = Bodies.rectangle(rayX, rayY, rayLength, rayWidth, { angle: rayAngle }),\r\n            collisions = Query.collides(ray, bodies);\r\n\r\n        for (var i = 0; i < collisions.length; i += 1) {\r\n            var collision = collisions[i];\r\n            collision.body = collision.bodyB = collision.bodyA;            \r\n        }\r\n\r\n        return collisions;\r\n    };\r\n\r\n    /**\r\n     * Returns all bodies whose bounds are inside (or outside if set) the given set of bounds, from the given set of bodies.\r\n     * @method region\r\n     * @param {body[]} bodies\r\n     * @param {bounds} bounds\r\n     * @param {bool} [outside=false]\r\n     * @return {body[]} The bodies matching the query\r\n     */\r\n    Query.region = function(bodies, bounds, outside) {\r\n        var result = [];\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i],\r\n                overlaps = Bounds.overlaps(body.bounds, bounds);\r\n            if ((overlaps && !outside) || (!overlaps && outside))\r\n                result.push(body);\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n    /**\r\n     * Returns all bodies whose vertices contain the given point, from the given set of bodies.\r\n     * @method point\r\n     * @param {body[]} bodies\r\n     * @param {vector} point\r\n     * @return {body[]} The bodies matching the query\r\n     */\r\n    Query.point = function(bodies, point) {\r\n        var result = [];\r\n\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n            \r\n            if (Bounds.contains(body.bounds, point)) {\r\n                for (var j = body.parts.length === 1 ? 0 : 1; j < body.parts.length; j++) {\r\n                    var part = body.parts[j];\r\n\r\n                    if (Bounds.contains(part.bounds, point)\r\n                        && Vertices.contains(part.vertices, point)) {\r\n                        result.push(body);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1F1ZXJ5LmpzPzdkZTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxVQUFVLG1CQUFPLENBQUMsK0VBQU87QUFDekIsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsNEZBQW1CO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyxrR0FBc0I7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQSw4REFBOEQsd0JBQXdCO0FBQ3RGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUsa0JBQWtCO0FBQ3ZGOztBQUVBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQSwrRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQSw2REFBNkQsdUJBQXVCO0FBQ3BGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2NvbGxpc2lvbi9RdWVyeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLlF1ZXJ5YCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBjb2xsaXNpb24gcXVlcmllcy5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcbipcclxuKiBAY2xhc3MgUXVlcnlcclxuKi9cclxuXHJcbnZhciBRdWVyeSA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeTtcclxuXHJcbnZhciBWZWN0b3IgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9WZWN0b3InKTtcclxudmFyIFNBVCA9IHJlcXVpcmUoJy4vU0FUJyk7XHJcbnZhciBCb3VuZHMgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9Cb3VuZHMnKTtcclxudmFyIEJvZGllcyA9IHJlcXVpcmUoJy4uL2ZhY3RvcnkvQm9kaWVzJyk7XHJcbnZhciBWZXJ0aWNlcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjb2xsaXNpb25zIGJldHdlZW4gYGJvZHlgIGFuZCBgYm9kaWVzYC5cclxuICAgICAqIEBtZXRob2QgY29sbGlkZXNcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keVxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICogQHJldHVybiB7b2JqZWN0W119IENvbGxpc2lvbnNcclxuICAgICAqL1xyXG4gICAgUXVlcnkuY29sbGlkZXMgPSBmdW5jdGlvbihib2R5LCBib2RpZXMpIHtcclxuICAgICAgICB2YXIgY29sbGlzaW9ucyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keUEgPSBib2RpZXNbaV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoQm91bmRzLm92ZXJsYXBzKGJvZHlBLmJvdW5kcywgYm9keS5ib3VuZHMpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gYm9keUEucGFydHMubGVuZ3RoID09PSAxID8gMCA6IDE7IGogPCBib2R5QS5wYXJ0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keUEucGFydHNbal07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChCb3VuZHMub3ZlcmxhcHMocGFydC5ib3VuZHMsIGJvZHkuYm91bmRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sbGlzaW9uID0gU0FULmNvbGxpZGVzKHBhcnQsIGJvZHkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbi5jb2xsaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9ucy5wdXNoKGNvbGxpc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbGxpc2lvbnM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdHMgYSByYXkgc2VnbWVudCBhZ2FpbnN0IGEgc2V0IG9mIGJvZGllcyBhbmQgcmV0dXJucyBhbGwgY29sbGlzaW9ucywgcmF5IHdpZHRoIGlzIG9wdGlvbmFsLiBJbnRlcnNlY3Rpb24gcG9pbnRzIGFyZSBub3QgcHJvdmlkZWQuXHJcbiAgICAgKiBAbWV0aG9kIHJheVxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHN0YXJ0UG9pbnRcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBlbmRQb2ludFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYXlXaWR0aF1cclxuICAgICAqIEByZXR1cm4ge29iamVjdFtdfSBDb2xsaXNpb25zXHJcbiAgICAgKi9cclxuICAgIFF1ZXJ5LnJheSA9IGZ1bmN0aW9uKGJvZGllcywgc3RhcnRQb2ludCwgZW5kUG9pbnQsIHJheVdpZHRoKSB7XHJcbiAgICAgICAgcmF5V2lkdGggPSByYXlXaWR0aCB8fCAxZS0xMDA7XHJcblxyXG4gICAgICAgIHZhciByYXlBbmdsZSA9IFZlY3Rvci5hbmdsZShzdGFydFBvaW50LCBlbmRQb2ludCksXHJcbiAgICAgICAgICAgIHJheUxlbmd0aCA9IFZlY3Rvci5tYWduaXR1ZGUoVmVjdG9yLnN1YihzdGFydFBvaW50LCBlbmRQb2ludCkpLFxyXG4gICAgICAgICAgICByYXlYID0gKGVuZFBvaW50LnggKyBzdGFydFBvaW50LngpICogMC41LFxyXG4gICAgICAgICAgICByYXlZID0gKGVuZFBvaW50LnkgKyBzdGFydFBvaW50LnkpICogMC41LFxyXG4gICAgICAgICAgICByYXkgPSBCb2RpZXMucmVjdGFuZ2xlKHJheVgsIHJheVksIHJheUxlbmd0aCwgcmF5V2lkdGgsIHsgYW5nbGU6IHJheUFuZ2xlIH0pLFxyXG4gICAgICAgICAgICBjb2xsaXNpb25zID0gUXVlcnkuY29sbGlkZXMocmF5LCBib2RpZXMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbGxpc2lvbnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgICAgdmFyIGNvbGxpc2lvbiA9IGNvbGxpc2lvbnNbaV07XHJcbiAgICAgICAgICAgIGNvbGxpc2lvbi5ib2R5ID0gY29sbGlzaW9uLmJvZHlCID0gY29sbGlzaW9uLmJvZHlBOyAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbGxpc2lvbnM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgYm9kaWVzIHdob3NlIGJvdW5kcyBhcmUgaW5zaWRlIChvciBvdXRzaWRlIGlmIHNldCkgdGhlIGdpdmVuIHNldCBvZiBib3VuZHMsIGZyb20gdGhlIGdpdmVuIHNldCBvZiBib2RpZXMuXHJcbiAgICAgKiBAbWV0aG9kIHJlZ2lvblxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICogQHBhcmFtIHtib3VuZHN9IGJvdW5kc1xyXG4gICAgICogQHBhcmFtIHtib29sfSBbb3V0c2lkZT1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge2JvZHlbXX0gVGhlIGJvZGllcyBtYXRjaGluZyB0aGUgcXVlcnlcclxuICAgICAqL1xyXG4gICAgUXVlcnkucmVnaW9uID0gZnVuY3Rpb24oYm9kaWVzLCBib3VuZHMsIG91dHNpZGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gYm9kaWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxhcHMgPSBCb3VuZHMub3ZlcmxhcHMoYm9keS5ib3VuZHMsIGJvdW5kcyk7XHJcbiAgICAgICAgICAgIGlmICgob3ZlcmxhcHMgJiYgIW91dHNpZGUpIHx8ICghb3ZlcmxhcHMgJiYgb3V0c2lkZSkpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChib2R5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgYm9kaWVzIHdob3NlIHZlcnRpY2VzIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50LCBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgYm9kaWVzLlxyXG4gICAgICogQG1ldGhvZCBwb2ludFxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtib2R5W119IFRoZSBib2RpZXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIFF1ZXJ5LnBvaW50ID0gZnVuY3Rpb24oYm9kaWVzLCBwb2ludCkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoQm91bmRzLmNvbnRhaW5zKGJvZHkuYm91bmRzLCBwb2ludCkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBib2R5LnBhcnRzLmxlbmd0aCA9PT0gMSA/IDAgOiAxOyBqIDwgYm9keS5wYXJ0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gYm9keS5wYXJ0c1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEJvdW5kcy5jb250YWlucyhwYXJ0LmJvdW5kcywgcG9pbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIFZlcnRpY2VzLmNvbnRhaW5zKHBhcnQudmVydGljZXMsIHBvaW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Query.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/Resolver.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/Resolver.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Resolver` module contains methods for resolving collision pairs.\r\n*\r\n* @class Resolver\r\n*/\r\n\r\nvar Resolver = {};\r\n\r\nmodule.exports = Resolver;\r\n\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\n\r\n(function() {\r\n\r\n    Resolver._restingThresh = 4;\r\n    Resolver._restingThreshTangent = 6;\r\n    Resolver._positionDampen = 0.9;\r\n    Resolver._positionWarming = 0.8;\r\n    Resolver._frictionNormalMultiplier = 5;\r\n\r\n    /**\r\n     * Prepare pairs for position solving.\r\n     * @method preSolvePosition\r\n     * @param {pair[]} pairs\r\n     */\r\n    Resolver.preSolvePosition = function(pairs) {\r\n        var i,\r\n            pair,\r\n            activeCount;\r\n\r\n        // find total contacts on each body\r\n        for (i = 0; i < pairs.length; i++) {\r\n            pair = pairs[i];\r\n            \r\n            if (!pair.isActive)\r\n                continue;\r\n            \r\n            activeCount = pair.activeContacts.length;\r\n            pair.collision.parentA.totalContacts += activeCount;\r\n            pair.collision.parentB.totalContacts += activeCount;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Find a solution for pair positions.\r\n     * @method solvePosition\r\n     * @param {pair[]} pairs\r\n     * @param {body[]} bodies\r\n     * @param {number} timeScale\r\n     */\r\n    Resolver.solvePosition = function(pairs, bodies, timeScale) {\r\n        var i,\r\n            normalX,\r\n            normalY,\r\n            pair,\r\n            collision,\r\n            bodyA,\r\n            bodyB,\r\n            normal,\r\n            separation,\r\n            penetration,\r\n            positionImpulseA,\r\n            positionImpulseB,\r\n            contactShare,\r\n            bodyBtoAX,\r\n            bodyBtoAY,\r\n            positionImpulse,\r\n            impulseCoefficient = timeScale * Resolver._positionDampen;\r\n\r\n        for (i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n            body.previousPositionImpulse.x = body.positionImpulse.x;\r\n            body.previousPositionImpulse.y = body.positionImpulse.y;\r\n        }\r\n\r\n        // find impulses required to resolve penetration\r\n        for (i = 0; i < pairs.length; i++) {\r\n            pair = pairs[i];\r\n            \r\n            if (!pair.isActive || pair.isSensor)\r\n                continue;\r\n\r\n            collision = pair.collision;\r\n            bodyA = collision.parentA;\r\n            bodyB = collision.parentB;\r\n            normal = collision.normal;\r\n\r\n            positionImpulseA = bodyA.previousPositionImpulse;\r\n            positionImpulseB = bodyB.previousPositionImpulse;\r\n\r\n            penetration = collision.penetration;\r\n\r\n            bodyBtoAX = positionImpulseB.x - positionImpulseA.x + penetration.x;\r\n            bodyBtoAY = positionImpulseB.y - positionImpulseA.y + penetration.y;\r\n\r\n            normalX = normal.x;\r\n            normalY = normal.y;\r\n\r\n            separation = normalX * bodyBtoAX + normalY * bodyBtoAY;\r\n            pair.separation = separation;\r\n\r\n            positionImpulse = (separation - pair.slop) * impulseCoefficient;\r\n\r\n            if (bodyA.isStatic || bodyB.isStatic)\r\n                positionImpulse *= 2;\r\n            \r\n            if (!(bodyA.isStatic || bodyA.isSleeping)) {\r\n                contactShare = positionImpulse / bodyA.totalContacts;\r\n                bodyA.positionImpulse.x += normalX * contactShare;\r\n                bodyA.positionImpulse.y += normalY * contactShare;\r\n            }\r\n\r\n            if (!(bodyB.isStatic || bodyB.isSleeping)) {\r\n                contactShare = positionImpulse / bodyB.totalContacts;\r\n                bodyB.positionImpulse.x -= normalX * contactShare;\r\n                bodyB.positionImpulse.y -= normalY * contactShare;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Apply position resolution.\r\n     * @method postSolvePosition\r\n     * @param {body[]} bodies\r\n     */\r\n    Resolver.postSolvePosition = function(bodies) {\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n\r\n            // reset contact count\r\n            body.totalContacts = 0;\r\n\r\n            if (body.positionImpulse.x !== 0 || body.positionImpulse.y !== 0) {\r\n                // update body geometry\r\n                for (var j = 0; j < body.parts.length; j++) {\r\n                    var part = body.parts[j];\r\n                    Vertices.translate(part.vertices, body.positionImpulse);\r\n                    Bounds.update(part.bounds, part.vertices, body.velocity);\r\n                    part.position.x += body.positionImpulse.x;\r\n                    part.position.y += body.positionImpulse.y;\r\n                }\r\n\r\n                // move the body without changing velocity\r\n                body.positionPrev.x += body.positionImpulse.x;\r\n                body.positionPrev.y += body.positionImpulse.y;\r\n\r\n                if (Vector.dot(body.positionImpulse, body.velocity) < 0) {\r\n                    // reset cached impulse if the body has velocity along it\r\n                    body.positionImpulse.x = 0;\r\n                    body.positionImpulse.y = 0;\r\n                } else {\r\n                    // warm the next iteration\r\n                    body.positionImpulse.x *= Resolver._positionWarming;\r\n                    body.positionImpulse.y *= Resolver._positionWarming;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Prepare pairs for velocity solving.\r\n     * @method preSolveVelocity\r\n     * @param {pair[]} pairs\r\n     */\r\n    Resolver.preSolveVelocity = function(pairs) {\r\n        var i,\r\n            j,\r\n            pair,\r\n            contacts,\r\n            collision,\r\n            bodyA,\r\n            bodyB,\r\n            normal,\r\n            tangent,\r\n            contact,\r\n            contactVertex,\r\n            normalImpulse,\r\n            tangentImpulse,\r\n            offset,\r\n            impulse = Vector._temp[0],\r\n            tempA = Vector._temp[1];\r\n        \r\n        for (i = 0; i < pairs.length; i++) {\r\n            pair = pairs[i];\r\n            \r\n            if (!pair.isActive || pair.isSensor)\r\n                continue;\r\n            \r\n            contacts = pair.activeContacts;\r\n            collision = pair.collision;\r\n            bodyA = collision.parentA;\r\n            bodyB = collision.parentB;\r\n            normal = collision.normal;\r\n            tangent = collision.tangent;\r\n\r\n            // resolve each contact\r\n            for (j = 0; j < contacts.length; j++) {\r\n                contact = contacts[j];\r\n                contactVertex = contact.vertex;\r\n                normalImpulse = contact.normalImpulse;\r\n                tangentImpulse = contact.tangentImpulse;\r\n\r\n                if (normalImpulse !== 0 || tangentImpulse !== 0) {\r\n                    // total impulse from contact\r\n                    impulse.x = (normal.x * normalImpulse) + (tangent.x * tangentImpulse);\r\n                    impulse.y = (normal.y * normalImpulse) + (tangent.y * tangentImpulse);\r\n                    \r\n                    // apply impulse from contact\r\n                    if (!(bodyA.isStatic || bodyA.isSleeping)) {\r\n                        offset = Vector.sub(contactVertex, bodyA.position, tempA);\r\n                        bodyA.positionPrev.x += impulse.x * bodyA.inverseMass;\r\n                        bodyA.positionPrev.y += impulse.y * bodyA.inverseMass;\r\n                        bodyA.anglePrev += Vector.cross(offset, impulse) * bodyA.inverseInertia;\r\n                    }\r\n\r\n                    if (!(bodyB.isStatic || bodyB.isSleeping)) {\r\n                        offset = Vector.sub(contactVertex, bodyB.position, tempA);\r\n                        bodyB.positionPrev.x -= impulse.x * bodyB.inverseMass;\r\n                        bodyB.positionPrev.y -= impulse.y * bodyB.inverseMass;\r\n                        bodyB.anglePrev -= Vector.cross(offset, impulse) * bodyB.inverseInertia;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Find a solution for pair velocities.\r\n     * @method solveVelocity\r\n     * @param {pair[]} pairs\r\n     * @param {number} timeScale\r\n     */\r\n    Resolver.solveVelocity = function(pairs, timeScale) {\r\n        var timeScaleSquared = timeScale * timeScale,\r\n            impulse = Vector._temp[0],\r\n            tempA = Vector._temp[1],\r\n            tempB = Vector._temp[2],\r\n            tempC = Vector._temp[3],\r\n            tempD = Vector._temp[4],\r\n            tempE = Vector._temp[5];\r\n        \r\n        for (var i = 0; i < pairs.length; i++) {\r\n            var pair = pairs[i];\r\n            \r\n            if (!pair.isActive || pair.isSensor)\r\n                continue;\r\n            \r\n            var collision = pair.collision,\r\n                bodyA = collision.parentA,\r\n                bodyB = collision.parentB,\r\n                normal = collision.normal,\r\n                tangent = collision.tangent,\r\n                contacts = pair.activeContacts,\r\n                contactShare = 1 / contacts.length;\r\n\r\n            // update body velocities\r\n            bodyA.velocity.x = bodyA.position.x - bodyA.positionPrev.x;\r\n            bodyA.velocity.y = bodyA.position.y - bodyA.positionPrev.y;\r\n            bodyB.velocity.x = bodyB.position.x - bodyB.positionPrev.x;\r\n            bodyB.velocity.y = bodyB.position.y - bodyB.positionPrev.y;\r\n            bodyA.angularVelocity = bodyA.angle - bodyA.anglePrev;\r\n            bodyB.angularVelocity = bodyB.angle - bodyB.anglePrev;\r\n\r\n            // resolve each contact\r\n            for (var j = 0; j < contacts.length; j++) {\r\n                var contact = contacts[j],\r\n                    contactVertex = contact.vertex,\r\n                    offsetA = Vector.sub(contactVertex, bodyA.position, tempA),\r\n                    offsetB = Vector.sub(contactVertex, bodyB.position, tempB),\r\n                    velocityPointA = Vector.add(bodyA.velocity, Vector.mult(Vector.perp(offsetA), bodyA.angularVelocity), tempC),\r\n                    velocityPointB = Vector.add(bodyB.velocity, Vector.mult(Vector.perp(offsetB), bodyB.angularVelocity), tempD), \r\n                    relativeVelocity = Vector.sub(velocityPointA, velocityPointB, tempE),\r\n                    normalVelocity = Vector.dot(normal, relativeVelocity);\r\n\r\n                var tangentVelocity = Vector.dot(tangent, relativeVelocity),\r\n                    tangentSpeed = Math.abs(tangentVelocity),\r\n                    tangentVelocityDirection = Common.sign(tangentVelocity);\r\n\r\n                // raw impulses\r\n                var normalImpulse = (1 + pair.restitution) * normalVelocity,\r\n                    normalForce = Common.clamp(pair.separation + normalVelocity, 0, 1) * Resolver._frictionNormalMultiplier;\r\n\r\n                // coulomb friction\r\n                var tangentImpulse = tangentVelocity,\r\n                    maxFriction = Infinity;\r\n\r\n                if (tangentSpeed > pair.friction * pair.frictionStatic * normalForce * timeScaleSquared) {\r\n                    maxFriction = tangentSpeed;\r\n                    tangentImpulse = Common.clamp(\r\n                        pair.friction * tangentVelocityDirection * timeScaleSquared,\r\n                        -maxFriction, maxFriction\r\n                    );\r\n                }\r\n\r\n                // modify impulses accounting for mass, inertia and offset\r\n                var oAcN = Vector.cross(offsetA, normal),\r\n                    oBcN = Vector.cross(offsetB, normal),\r\n                    share = contactShare / (bodyA.inverseMass + bodyB.inverseMass + bodyA.inverseInertia * oAcN * oAcN  + bodyB.inverseInertia * oBcN * oBcN);\r\n\r\n                normalImpulse *= share;\r\n                tangentImpulse *= share;\r\n\r\n                // handle high velocity and resting collisions separately\r\n                if (normalVelocity < 0 && normalVelocity * normalVelocity > Resolver._restingThresh * timeScaleSquared) {\r\n                    // high normal velocity so clear cached contact normal impulse\r\n                    contact.normalImpulse = 0;\r\n                } else {\r\n                    // solve resting collision constraints using Erin Catto's method (GDC08)\r\n                    // impulse constraint tends to 0\r\n                    var contactNormalImpulse = contact.normalImpulse;\r\n                    contact.normalImpulse = Math.min(contact.normalImpulse + normalImpulse, 0);\r\n                    normalImpulse = contact.normalImpulse - contactNormalImpulse;\r\n                }\r\n\r\n                // handle high velocity and resting collisions separately\r\n                if (tangentVelocity * tangentVelocity > Resolver._restingThreshTangent * timeScaleSquared) {\r\n                    // high tangent velocity so clear cached contact tangent impulse\r\n                    contact.tangentImpulse = 0;\r\n                } else {\r\n                    // solve resting collision constraints using Erin Catto's method (GDC08)\r\n                    // tangent impulse tends to -tangentSpeed or +tangentSpeed\r\n                    var contactTangentImpulse = contact.tangentImpulse;\r\n                    contact.tangentImpulse = Common.clamp(contact.tangentImpulse + tangentImpulse, -maxFriction, maxFriction);\r\n                    tangentImpulse = contact.tangentImpulse - contactTangentImpulse;\r\n                }\r\n\r\n                // total impulse from contact\r\n                impulse.x = (normal.x * normalImpulse) + (tangent.x * tangentImpulse);\r\n                impulse.y = (normal.y * normalImpulse) + (tangent.y * tangentImpulse);\r\n                \r\n                // apply impulse from contact\r\n                if (!(bodyA.isStatic || bodyA.isSleeping)) {\r\n                    bodyA.positionPrev.x += impulse.x * bodyA.inverseMass;\r\n                    bodyA.positionPrev.y += impulse.y * bodyA.inverseMass;\r\n                    bodyA.anglePrev += Vector.cross(offsetA, impulse) * bodyA.inverseInertia;\r\n                }\r\n\r\n                if (!(bodyB.isStatic || bodyB.isSleeping)) {\r\n                    bodyB.positionPrev.x -= impulse.x * bodyB.inverseMass;\r\n                    bodyB.positionPrev.y -= impulse.y * bodyB.inverseMass;\r\n                    bodyB.anglePrev -= Vector.cross(offsetB, impulse) * bodyB.inverseInertia;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1Jlc29sdmVyLmpzP2I3ZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsa0dBQXNCO0FBQzdDLGFBQWEsbUJBQU8sQ0FBQyw4RkFBb0I7QUFDekMsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsOEZBQW9COztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLHVCQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLHFCQUFxQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb2xsaXNpb24vUmVzb2x2ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5SZXNvbHZlcmAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHJlc29sdmluZyBjb2xsaXNpb24gcGFpcnMuXHJcbipcclxuKiBAY2xhc3MgUmVzb2x2ZXJcclxuKi9cclxuXHJcbnZhciBSZXNvbHZlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZXNvbHZlcjtcclxuXHJcbnZhciBWZXJ0aWNlcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcbnZhciBWZWN0b3IgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9WZWN0b3InKTtcclxudmFyIENvbW1vbiA9IHJlcXVpcmUoJy4uL2NvcmUvQ29tbW9uJyk7XHJcbnZhciBCb3VuZHMgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9Cb3VuZHMnKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICBSZXNvbHZlci5fcmVzdGluZ1RocmVzaCA9IDQ7XHJcbiAgICBSZXNvbHZlci5fcmVzdGluZ1RocmVzaFRhbmdlbnQgPSA2O1xyXG4gICAgUmVzb2x2ZXIuX3Bvc2l0aW9uRGFtcGVuID0gMC45O1xyXG4gICAgUmVzb2x2ZXIuX3Bvc2l0aW9uV2FybWluZyA9IDAuODtcclxuICAgIFJlc29sdmVyLl9mcmljdGlvbk5vcm1hbE11bHRpcGxpZXIgPSA1O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZSBwYWlycyBmb3IgcG9zaXRpb24gc29sdmluZy5cclxuICAgICAqIEBtZXRob2QgcHJlU29sdmVQb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHtwYWlyW119IHBhaXJzXHJcbiAgICAgKi9cclxuICAgIFJlc29sdmVyLnByZVNvbHZlUG9zaXRpb24gPSBmdW5jdGlvbihwYWlycykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgICBwYWlyLFxyXG4gICAgICAgICAgICBhY3RpdmVDb3VudDtcclxuXHJcbiAgICAgICAgLy8gZmluZCB0b3RhbCBjb250YWN0cyBvbiBlYWNoIGJvZHlcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcGFpciA9IHBhaXJzW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFwYWlyLmlzQWN0aXZlKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhY3RpdmVDb3VudCA9IHBhaXIuYWN0aXZlQ29udGFjdHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBwYWlyLmNvbGxpc2lvbi5wYXJlbnRBLnRvdGFsQ29udGFjdHMgKz0gYWN0aXZlQ291bnQ7XHJcbiAgICAgICAgICAgIHBhaXIuY29sbGlzaW9uLnBhcmVudEIudG90YWxDb250YWN0cyArPSBhY3RpdmVDb3VudDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBhIHNvbHV0aW9uIGZvciBwYWlyIHBvc2l0aW9ucy5cclxuICAgICAqIEBtZXRob2Qgc29sdmVQb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHtwYWlyW119IHBhaXJzXHJcbiAgICAgKiBAcGFyYW0ge2JvZHlbXX0gYm9kaWVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZVNjYWxlXHJcbiAgICAgKi9cclxuICAgIFJlc29sdmVyLnNvbHZlUG9zaXRpb24gPSBmdW5jdGlvbihwYWlycywgYm9kaWVzLCB0aW1lU2NhbGUpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgICAgbm9ybWFsWCxcclxuICAgICAgICAgICAgbm9ybWFsWSxcclxuICAgICAgICAgICAgcGFpcixcclxuICAgICAgICAgICAgY29sbGlzaW9uLFxyXG4gICAgICAgICAgICBib2R5QSxcclxuICAgICAgICAgICAgYm9keUIsXHJcbiAgICAgICAgICAgIG5vcm1hbCxcclxuICAgICAgICAgICAgc2VwYXJhdGlvbixcclxuICAgICAgICAgICAgcGVuZXRyYXRpb24sXHJcbiAgICAgICAgICAgIHBvc2l0aW9uSW1wdWxzZUEsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uSW1wdWxzZUIsXHJcbiAgICAgICAgICAgIGNvbnRhY3RTaGFyZSxcclxuICAgICAgICAgICAgYm9keUJ0b0FYLFxyXG4gICAgICAgICAgICBib2R5QnRvQVksXHJcbiAgICAgICAgICAgIHBvc2l0aW9uSW1wdWxzZSxcclxuICAgICAgICAgICAgaW1wdWxzZUNvZWZmaWNpZW50ID0gdGltZVNjYWxlICogUmVzb2x2ZXIuX3Bvc2l0aW9uRGFtcGVuO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gYm9kaWVzW2ldO1xyXG4gICAgICAgICAgICBib2R5LnByZXZpb3VzUG9zaXRpb25JbXB1bHNlLnggPSBib2R5LnBvc2l0aW9uSW1wdWxzZS54O1xyXG4gICAgICAgICAgICBib2R5LnByZXZpb3VzUG9zaXRpb25JbXB1bHNlLnkgPSBib2R5LnBvc2l0aW9uSW1wdWxzZS55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmluZCBpbXB1bHNlcyByZXF1aXJlZCB0byByZXNvbHZlIHBlbmV0cmF0aW9uXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhaXIgPSBwYWlyc1tpXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghcGFpci5pc0FjdGl2ZSB8fCBwYWlyLmlzU2Vuc29yKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb2xsaXNpb24gPSBwYWlyLmNvbGxpc2lvbjtcclxuICAgICAgICAgICAgYm9keUEgPSBjb2xsaXNpb24ucGFyZW50QTtcclxuICAgICAgICAgICAgYm9keUIgPSBjb2xsaXNpb24ucGFyZW50QjtcclxuICAgICAgICAgICAgbm9ybWFsID0gY29sbGlzaW9uLm5vcm1hbDtcclxuXHJcbiAgICAgICAgICAgIHBvc2l0aW9uSW1wdWxzZUEgPSBib2R5QS5wcmV2aW91c1Bvc2l0aW9uSW1wdWxzZTtcclxuICAgICAgICAgICAgcG9zaXRpb25JbXB1bHNlQiA9IGJvZHlCLnByZXZpb3VzUG9zaXRpb25JbXB1bHNlO1xyXG5cclxuICAgICAgICAgICAgcGVuZXRyYXRpb24gPSBjb2xsaXNpb24ucGVuZXRyYXRpb247XHJcblxyXG4gICAgICAgICAgICBib2R5QnRvQVggPSBwb3NpdGlvbkltcHVsc2VCLnggLSBwb3NpdGlvbkltcHVsc2VBLnggKyBwZW5ldHJhdGlvbi54O1xyXG4gICAgICAgICAgICBib2R5QnRvQVkgPSBwb3NpdGlvbkltcHVsc2VCLnkgLSBwb3NpdGlvbkltcHVsc2VBLnkgKyBwZW5ldHJhdGlvbi55O1xyXG5cclxuICAgICAgICAgICAgbm9ybWFsWCA9IG5vcm1hbC54O1xyXG4gICAgICAgICAgICBub3JtYWxZID0gbm9ybWFsLnk7XHJcblxyXG4gICAgICAgICAgICBzZXBhcmF0aW9uID0gbm9ybWFsWCAqIGJvZHlCdG9BWCArIG5vcm1hbFkgKiBib2R5QnRvQVk7XHJcbiAgICAgICAgICAgIHBhaXIuc2VwYXJhdGlvbiA9IHNlcGFyYXRpb247XHJcblxyXG4gICAgICAgICAgICBwb3NpdGlvbkltcHVsc2UgPSAoc2VwYXJhdGlvbiAtIHBhaXIuc2xvcCkgKiBpbXB1bHNlQ29lZmZpY2llbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keUEuaXNTdGF0aWMgfHwgYm9keUIuaXNTdGF0aWMpXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkltcHVsc2UgKj0gMjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghKGJvZHlBLmlzU3RhdGljIHx8IGJvZHlBLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWN0U2hhcmUgPSBwb3NpdGlvbkltcHVsc2UgLyBib2R5QS50b3RhbENvbnRhY3RzO1xyXG4gICAgICAgICAgICAgICAgYm9keUEucG9zaXRpb25JbXB1bHNlLnggKz0gbm9ybWFsWCAqIGNvbnRhY3RTaGFyZTtcclxuICAgICAgICAgICAgICAgIGJvZHlBLnBvc2l0aW9uSW1wdWxzZS55ICs9IG5vcm1hbFkgKiBjb250YWN0U2hhcmU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghKGJvZHlCLmlzU3RhdGljIHx8IGJvZHlCLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWN0U2hhcmUgPSBwb3NpdGlvbkltcHVsc2UgLyBib2R5Qi50b3RhbENvbnRhY3RzO1xyXG4gICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25JbXB1bHNlLnggLT0gbm9ybWFsWCAqIGNvbnRhY3RTaGFyZTtcclxuICAgICAgICAgICAgICAgIGJvZHlCLnBvc2l0aW9uSW1wdWxzZS55IC09IG5vcm1hbFkgKiBjb250YWN0U2hhcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgcG9zaXRpb24gcmVzb2x1dGlvbi5cclxuICAgICAqIEBtZXRob2QgcG9zdFNvbHZlUG9zaXRpb25cclxuICAgICAqIEBwYXJhbSB7Ym9keVtdfSBib2RpZXNcclxuICAgICAqL1xyXG4gICAgUmVzb2x2ZXIucG9zdFNvbHZlUG9zaXRpb24gPSBmdW5jdGlvbihib2RpZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGNvbnRhY3QgY291bnRcclxuICAgICAgICAgICAgYm9keS50b3RhbENvbnRhY3RzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LnBvc2l0aW9uSW1wdWxzZS54ICE9PSAwIHx8IGJvZHkucG9zaXRpb25JbXB1bHNlLnkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBib2R5IGdlb21ldHJ5XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJvZHkucGFydHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydCA9IGJvZHkucGFydHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgVmVydGljZXMudHJhbnNsYXRlKHBhcnQudmVydGljZXMsIGJvZHkucG9zaXRpb25JbXB1bHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBCb3VuZHMudXBkYXRlKHBhcnQuYm91bmRzLCBwYXJ0LnZlcnRpY2VzLCBib2R5LnZlbG9jaXR5KTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnggKz0gYm9keS5wb3NpdGlvbkltcHVsc2UueDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnkgKz0gYm9keS5wb3NpdGlvbkltcHVsc2UueTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBib2R5IHdpdGhvdXQgY2hhbmdpbmcgdmVsb2NpdHlcclxuICAgICAgICAgICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnggKz0gYm9keS5wb3NpdGlvbkltcHVsc2UueDtcclxuICAgICAgICAgICAgICAgIGJvZHkucG9zaXRpb25QcmV2LnkgKz0gYm9keS5wb3NpdGlvbkltcHVsc2UueTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoVmVjdG9yLmRvdChib2R5LnBvc2l0aW9uSW1wdWxzZSwgYm9keS52ZWxvY2l0eSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgY2FjaGVkIGltcHVsc2UgaWYgdGhlIGJvZHkgaGFzIHZlbG9jaXR5IGFsb25nIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5wb3NpdGlvbkltcHVsc2UueCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5wb3NpdGlvbkltcHVsc2UueSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhcm0gdGhlIG5leHQgaXRlcmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5wb3NpdGlvbkltcHVsc2UueCAqPSBSZXNvbHZlci5fcG9zaXRpb25XYXJtaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkucG9zaXRpb25JbXB1bHNlLnkgKj0gUmVzb2x2ZXIuX3Bvc2l0aW9uV2FybWluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlIHBhaXJzIGZvciB2ZWxvY2l0eSBzb2x2aW5nLlxyXG4gICAgICogQG1ldGhvZCBwcmVTb2x2ZVZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0ge3BhaXJbXX0gcGFpcnNcclxuICAgICAqL1xyXG4gICAgUmVzb2x2ZXIucHJlU29sdmVWZWxvY2l0eSA9IGZ1bmN0aW9uKHBhaXJzKSB7XHJcbiAgICAgICAgdmFyIGksXHJcbiAgICAgICAgICAgIGosXHJcbiAgICAgICAgICAgIHBhaXIsXHJcbiAgICAgICAgICAgIGNvbnRhY3RzLFxyXG4gICAgICAgICAgICBjb2xsaXNpb24sXHJcbiAgICAgICAgICAgIGJvZHlBLFxyXG4gICAgICAgICAgICBib2R5QixcclxuICAgICAgICAgICAgbm9ybWFsLFxyXG4gICAgICAgICAgICB0YW5nZW50LFxyXG4gICAgICAgICAgICBjb250YWN0LFxyXG4gICAgICAgICAgICBjb250YWN0VmVydGV4LFxyXG4gICAgICAgICAgICBub3JtYWxJbXB1bHNlLFxyXG4gICAgICAgICAgICB0YW5nZW50SW1wdWxzZSxcclxuICAgICAgICAgICAgb2Zmc2V0LFxyXG4gICAgICAgICAgICBpbXB1bHNlID0gVmVjdG9yLl90ZW1wWzBdLFxyXG4gICAgICAgICAgICB0ZW1wQSA9IFZlY3Rvci5fdGVtcFsxXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcGFpciA9IHBhaXJzW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFwYWlyLmlzQWN0aXZlIHx8IHBhaXIuaXNTZW5zb3IpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnRhY3RzID0gcGFpci5hY3RpdmVDb250YWN0cztcclxuICAgICAgICAgICAgY29sbGlzaW9uID0gcGFpci5jb2xsaXNpb247XHJcbiAgICAgICAgICAgIGJvZHlBID0gY29sbGlzaW9uLnBhcmVudEE7XHJcbiAgICAgICAgICAgIGJvZHlCID0gY29sbGlzaW9uLnBhcmVudEI7XHJcbiAgICAgICAgICAgIG5vcm1hbCA9IGNvbGxpc2lvbi5ub3JtYWw7XHJcbiAgICAgICAgICAgIHRhbmdlbnQgPSBjb2xsaXNpb24udGFuZ2VudDtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlc29sdmUgZWFjaCBjb250YWN0XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb250YWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29udGFjdCA9IGNvbnRhY3RzW2pdO1xyXG4gICAgICAgICAgICAgICAgY29udGFjdFZlcnRleCA9IGNvbnRhY3QudmVydGV4O1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsSW1wdWxzZSA9IGNvbnRhY3Qubm9ybWFsSW1wdWxzZTtcclxuICAgICAgICAgICAgICAgIHRhbmdlbnRJbXB1bHNlID0gY29udGFjdC50YW5nZW50SW1wdWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsSW1wdWxzZSAhPT0gMCB8fCB0YW5nZW50SW1wdWxzZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvdGFsIGltcHVsc2UgZnJvbSBjb250YWN0XHJcbiAgICAgICAgICAgICAgICAgICAgaW1wdWxzZS54ID0gKG5vcm1hbC54ICogbm9ybWFsSW1wdWxzZSkgKyAodGFuZ2VudC54ICogdGFuZ2VudEltcHVsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGltcHVsc2UueSA9IChub3JtYWwueSAqIG5vcm1hbEltcHVsc2UpICsgKHRhbmdlbnQueSAqIHRhbmdlbnRJbXB1bHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBhcHBseSBpbXB1bHNlIGZyb20gY29udGFjdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGJvZHlBLmlzU3RhdGljIHx8IGJvZHlBLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IFZlY3Rvci5zdWIoY29udGFjdFZlcnRleCwgYm9keUEucG9zaXRpb24sIHRlbXBBKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keUEucG9zaXRpb25QcmV2LnggKz0gaW1wdWxzZS54ICogYm9keUEuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlBLnBvc2l0aW9uUHJldi55ICs9IGltcHVsc2UueSAqIGJvZHlBLmludmVyc2VNYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5QS5hbmdsZVByZXYgKz0gVmVjdG9yLmNyb3NzKG9mZnNldCwgaW1wdWxzZSkgKiBib2R5QS5pbnZlcnNlSW5lcnRpYTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGJvZHlCLmlzU3RhdGljIHx8IGJvZHlCLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IFZlY3Rvci5zdWIoY29udGFjdFZlcnRleCwgYm9keUIucG9zaXRpb24sIHRlbXBBKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25QcmV2LnggLT0gaW1wdWxzZS54ICogYm9keUIuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlCLnBvc2l0aW9uUHJldi55IC09IGltcHVsc2UueSAqIGJvZHlCLmludmVyc2VNYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5Qi5hbmdsZVByZXYgLT0gVmVjdG9yLmNyb3NzKG9mZnNldCwgaW1wdWxzZSkgKiBib2R5Qi5pbnZlcnNlSW5lcnRpYTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBhIHNvbHV0aW9uIGZvciBwYWlyIHZlbG9jaXRpZXMuXHJcbiAgICAgKiBAbWV0aG9kIHNvbHZlVmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSB7cGFpcltdfSBwYWlyc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVTY2FsZVxyXG4gICAgICovXHJcbiAgICBSZXNvbHZlci5zb2x2ZVZlbG9jaXR5ID0gZnVuY3Rpb24ocGFpcnMsIHRpbWVTY2FsZSkge1xyXG4gICAgICAgIHZhciB0aW1lU2NhbGVTcXVhcmVkID0gdGltZVNjYWxlICogdGltZVNjYWxlLFxyXG4gICAgICAgICAgICBpbXB1bHNlID0gVmVjdG9yLl90ZW1wWzBdLFxyXG4gICAgICAgICAgICB0ZW1wQSA9IFZlY3Rvci5fdGVtcFsxXSxcclxuICAgICAgICAgICAgdGVtcEIgPSBWZWN0b3IuX3RlbXBbMl0sXHJcbiAgICAgICAgICAgIHRlbXBDID0gVmVjdG9yLl90ZW1wWzNdLFxyXG4gICAgICAgICAgICB0ZW1wRCA9IFZlY3Rvci5fdGVtcFs0XSxcclxuICAgICAgICAgICAgdGVtcEUgPSBWZWN0b3IuX3RlbXBbNV07XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFwYWlyLmlzQWN0aXZlIHx8IHBhaXIuaXNTZW5zb3IpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjb2xsaXNpb24gPSBwYWlyLmNvbGxpc2lvbixcclxuICAgICAgICAgICAgICAgIGJvZHlBID0gY29sbGlzaW9uLnBhcmVudEEsXHJcbiAgICAgICAgICAgICAgICBib2R5QiA9IGNvbGxpc2lvbi5wYXJlbnRCLFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gY29sbGlzaW9uLm5vcm1hbCxcclxuICAgICAgICAgICAgICAgIHRhbmdlbnQgPSBjb2xsaXNpb24udGFuZ2VudCxcclxuICAgICAgICAgICAgICAgIGNvbnRhY3RzID0gcGFpci5hY3RpdmVDb250YWN0cyxcclxuICAgICAgICAgICAgICAgIGNvbnRhY3RTaGFyZSA9IDEgLyBjb250YWN0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgYm9keSB2ZWxvY2l0aWVzXHJcbiAgICAgICAgICAgIGJvZHlBLnZlbG9jaXR5LnggPSBib2R5QS5wb3NpdGlvbi54IC0gYm9keUEucG9zaXRpb25QcmV2Lng7XHJcbiAgICAgICAgICAgIGJvZHlBLnZlbG9jaXR5LnkgPSBib2R5QS5wb3NpdGlvbi55IC0gYm9keUEucG9zaXRpb25QcmV2Lnk7XHJcbiAgICAgICAgICAgIGJvZHlCLnZlbG9jaXR5LnggPSBib2R5Qi5wb3NpdGlvbi54IC0gYm9keUIucG9zaXRpb25QcmV2Lng7XHJcbiAgICAgICAgICAgIGJvZHlCLnZlbG9jaXR5LnkgPSBib2R5Qi5wb3NpdGlvbi55IC0gYm9keUIucG9zaXRpb25QcmV2Lnk7XHJcbiAgICAgICAgICAgIGJvZHlBLmFuZ3VsYXJWZWxvY2l0eSA9IGJvZHlBLmFuZ2xlIC0gYm9keUEuYW5nbGVQcmV2O1xyXG4gICAgICAgICAgICBib2R5Qi5hbmd1bGFyVmVsb2NpdHkgPSBib2R5Qi5hbmdsZSAtIGJvZHlCLmFuZ2xlUHJldjtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlc29sdmUgZWFjaCBjb250YWN0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29udGFjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb250YWN0ID0gY29udGFjdHNbal0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFjdFZlcnRleCA9IGNvbnRhY3QudmVydGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldEEgPSBWZWN0b3Iuc3ViKGNvbnRhY3RWZXJ0ZXgsIGJvZHlBLnBvc2l0aW9uLCB0ZW1wQSksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0QiA9IFZlY3Rvci5zdWIoY29udGFjdFZlcnRleCwgYm9keUIucG9zaXRpb24sIHRlbXBCKSxcclxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eVBvaW50QSA9IFZlY3Rvci5hZGQoYm9keUEudmVsb2NpdHksIFZlY3Rvci5tdWx0KFZlY3Rvci5wZXJwKG9mZnNldEEpLCBib2R5QS5hbmd1bGFyVmVsb2NpdHkpLCB0ZW1wQyksXHJcbiAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHlQb2ludEIgPSBWZWN0b3IuYWRkKGJvZHlCLnZlbG9jaXR5LCBWZWN0b3IubXVsdChWZWN0b3IucGVycChvZmZzZXRCKSwgYm9keUIuYW5ndWxhclZlbG9jaXR5KSwgdGVtcEQpLCBcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVZlbG9jaXR5ID0gVmVjdG9yLnN1Yih2ZWxvY2l0eVBvaW50QSwgdmVsb2NpdHlQb2ludEIsIHRlbXBFKSxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxWZWxvY2l0eSA9IFZlY3Rvci5kb3Qobm9ybWFsLCByZWxhdGl2ZVZlbG9jaXR5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFuZ2VudFZlbG9jaXR5ID0gVmVjdG9yLmRvdCh0YW5nZW50LCByZWxhdGl2ZVZlbG9jaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICB0YW5nZW50U3BlZWQgPSBNYXRoLmFicyh0YW5nZW50VmVsb2NpdHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhbmdlbnRWZWxvY2l0eURpcmVjdGlvbiA9IENvbW1vbi5zaWduKHRhbmdlbnRWZWxvY2l0eSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmF3IGltcHVsc2VzXHJcbiAgICAgICAgICAgICAgICB2YXIgbm9ybWFsSW1wdWxzZSA9ICgxICsgcGFpci5yZXN0aXR1dGlvbikgKiBub3JtYWxWZWxvY2l0eSxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxGb3JjZSA9IENvbW1vbi5jbGFtcChwYWlyLnNlcGFyYXRpb24gKyBub3JtYWxWZWxvY2l0eSwgMCwgMSkgKiBSZXNvbHZlci5fZnJpY3Rpb25Ob3JtYWxNdWx0aXBsaWVyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvdWxvbWIgZnJpY3Rpb25cclxuICAgICAgICAgICAgICAgIHZhciB0YW5nZW50SW1wdWxzZSA9IHRhbmdlbnRWZWxvY2l0eSxcclxuICAgICAgICAgICAgICAgICAgICBtYXhGcmljdGlvbiA9IEluZmluaXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0YW5nZW50U3BlZWQgPiBwYWlyLmZyaWN0aW9uICogcGFpci5mcmljdGlvblN0YXRpYyAqIG5vcm1hbEZvcmNlICogdGltZVNjYWxlU3F1YXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEZyaWN0aW9uID0gdGFuZ2VudFNwZWVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhbmdlbnRJbXB1bHNlID0gQ29tbW9uLmNsYW1wKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWlyLmZyaWN0aW9uICogdGFuZ2VudFZlbG9jaXR5RGlyZWN0aW9uICogdGltZVNjYWxlU3F1YXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLW1heEZyaWN0aW9uLCBtYXhGcmljdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbW9kaWZ5IGltcHVsc2VzIGFjY291bnRpbmcgZm9yIG1hc3MsIGluZXJ0aWEgYW5kIG9mZnNldFxyXG4gICAgICAgICAgICAgICAgdmFyIG9BY04gPSBWZWN0b3IuY3Jvc3Mob2Zmc2V0QSwgbm9ybWFsKSxcclxuICAgICAgICAgICAgICAgICAgICBvQmNOID0gVmVjdG9yLmNyb3NzKG9mZnNldEIsIG5vcm1hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmUgPSBjb250YWN0U2hhcmUgLyAoYm9keUEuaW52ZXJzZU1hc3MgKyBib2R5Qi5pbnZlcnNlTWFzcyArIGJvZHlBLmludmVyc2VJbmVydGlhICogb0FjTiAqIG9BY04gICsgYm9keUIuaW52ZXJzZUluZXJ0aWEgKiBvQmNOICogb0JjTik7XHJcblxyXG4gICAgICAgICAgICAgICAgbm9ybWFsSW1wdWxzZSAqPSBzaGFyZTtcclxuICAgICAgICAgICAgICAgIHRhbmdlbnRJbXB1bHNlICo9IHNoYXJlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBoaWdoIHZlbG9jaXR5IGFuZCByZXN0aW5nIGNvbGxpc2lvbnMgc2VwYXJhdGVseVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbFZlbG9jaXR5IDwgMCAmJiBub3JtYWxWZWxvY2l0eSAqIG5vcm1hbFZlbG9jaXR5ID4gUmVzb2x2ZXIuX3Jlc3RpbmdUaHJlc2ggKiB0aW1lU2NhbGVTcXVhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGlnaCBub3JtYWwgdmVsb2NpdHkgc28gY2xlYXIgY2FjaGVkIGNvbnRhY3Qgbm9ybWFsIGltcHVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb250YWN0Lm5vcm1hbEltcHVsc2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzb2x2ZSByZXN0aW5nIGNvbGxpc2lvbiBjb25zdHJhaW50cyB1c2luZyBFcmluIENhdHRvJ3MgbWV0aG9kIChHREMwOClcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbXB1bHNlIGNvbnN0cmFpbnQgdGVuZHMgdG8gMFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0Tm9ybWFsSW1wdWxzZSA9IGNvbnRhY3Qubm9ybWFsSW1wdWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWN0Lm5vcm1hbEltcHVsc2UgPSBNYXRoLm1pbihjb250YWN0Lm5vcm1hbEltcHVsc2UgKyBub3JtYWxJbXB1bHNlLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxJbXB1bHNlID0gY29udGFjdC5ub3JtYWxJbXB1bHNlIC0gY29udGFjdE5vcm1hbEltcHVsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGhpZ2ggdmVsb2NpdHkgYW5kIHJlc3RpbmcgY29sbGlzaW9ucyBzZXBhcmF0ZWx5XHJcbiAgICAgICAgICAgICAgICBpZiAodGFuZ2VudFZlbG9jaXR5ICogdGFuZ2VudFZlbG9jaXR5ID4gUmVzb2x2ZXIuX3Jlc3RpbmdUaHJlc2hUYW5nZW50ICogdGltZVNjYWxlU3F1YXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhpZ2ggdGFuZ2VudCB2ZWxvY2l0eSBzbyBjbGVhciBjYWNoZWQgY29udGFjdCB0YW5nZW50IGltcHVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb250YWN0LnRhbmdlbnRJbXB1bHNlID0gMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc29sdmUgcmVzdGluZyBjb2xsaXNpb24gY29uc3RyYWludHMgdXNpbmcgRXJpbiBDYXR0bydzIG1ldGhvZCAoR0RDMDgpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGFuZ2VudCBpbXB1bHNlIHRlbmRzIHRvIC10YW5nZW50U3BlZWQgb3IgK3RhbmdlbnRTcGVlZFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VGFuZ2VudEltcHVsc2UgPSBjb250YWN0LnRhbmdlbnRJbXB1bHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhY3QudGFuZ2VudEltcHVsc2UgPSBDb21tb24uY2xhbXAoY29udGFjdC50YW5nZW50SW1wdWxzZSArIHRhbmdlbnRJbXB1bHNlLCAtbWF4RnJpY3Rpb24sIG1heEZyaWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0YW5nZW50SW1wdWxzZSA9IGNvbnRhY3QudGFuZ2VudEltcHVsc2UgLSBjb250YWN0VGFuZ2VudEltcHVsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdG90YWwgaW1wdWxzZSBmcm9tIGNvbnRhY3RcclxuICAgICAgICAgICAgICAgIGltcHVsc2UueCA9IChub3JtYWwueCAqIG5vcm1hbEltcHVsc2UpICsgKHRhbmdlbnQueCAqIHRhbmdlbnRJbXB1bHNlKTtcclxuICAgICAgICAgICAgICAgIGltcHVsc2UueSA9IChub3JtYWwueSAqIG5vcm1hbEltcHVsc2UpICsgKHRhbmdlbnQueSAqIHRhbmdlbnRJbXB1bHNlKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgaW1wdWxzZSBmcm9tIGNvbnRhY3RcclxuICAgICAgICAgICAgICAgIGlmICghKGJvZHlBLmlzU3RhdGljIHx8IGJvZHlBLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUEucG9zaXRpb25QcmV2LnggKz0gaW1wdWxzZS54ICogYm9keUEuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUEucG9zaXRpb25QcmV2LnkgKz0gaW1wdWxzZS55ICogYm9keUEuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUEuYW5nbGVQcmV2ICs9IFZlY3Rvci5jcm9zcyhvZmZzZXRBLCBpbXB1bHNlKSAqIGJvZHlBLmludmVyc2VJbmVydGlhO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKGJvZHlCLmlzU3RhdGljIHx8IGJvZHlCLmlzU2xlZXBpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25QcmV2LnggLT0gaW1wdWxzZS54ICogYm9keUIuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25QcmV2LnkgLT0gaW1wdWxzZS55ICogYm9keUIuaW52ZXJzZU1hc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUIuYW5nbGVQcmV2IC09IFZlY3Rvci5jcm9zcyhvZmZzZXRCLCBpbXB1bHNlKSAqIGJvZHlCLmludmVyc2VJbmVydGlhO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/Resolver.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.SAT` module contains methods for detecting collisions using the Separating Axis Theorem.\r\n*\r\n* @class SAT\r\n*/\r\n\r\n// TODO: true circles and curves\r\n\r\nvar SAT = {};\r\n\r\nmodule.exports = SAT;\r\n\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Detect collision between two bodies using the Separating Axis Theorem.\r\n     * @method collides\r\n     * @param {body} bodyA\r\n     * @param {body} bodyB\r\n     * @param {collision} previousCollision\r\n     * @return {collision} collision\r\n     */\r\n    SAT.collides = function(bodyA, bodyB, previousCollision) {\r\n        var overlapAB,\r\n            overlapBA, \r\n            minOverlap,\r\n            collision,\r\n            canReusePrevCol = false;\r\n\r\n        if (previousCollision) {\r\n            // estimate total motion\r\n            var parentA = bodyA.parent,\r\n                parentB = bodyB.parent,\r\n                motion = parentA.speed * parentA.speed + parentA.angularSpeed * parentA.angularSpeed\r\n                       + parentB.speed * parentB.speed + parentB.angularSpeed * parentB.angularSpeed;\r\n\r\n            // we may be able to (partially) reuse collision result \r\n            // but only safe if collision was resting\r\n            canReusePrevCol = previousCollision && previousCollision.collided && motion < 0.2;\r\n\r\n            // reuse collision object\r\n            collision = previousCollision;\r\n        } else {\r\n            collision = { collided: false, bodyA: bodyA, bodyB: bodyB };\r\n        }\r\n\r\n        if (previousCollision && canReusePrevCol) {\r\n            // if we can reuse the collision result\r\n            // we only need to test the previously found axis\r\n            var axisBodyA = collision.axisBody,\r\n                axisBodyB = axisBodyA === bodyA ? bodyB : bodyA,\r\n                axes = [axisBodyA.axes[previousCollision.axisNumber]];\r\n\r\n            minOverlap = SAT._overlapAxes(axisBodyA.vertices, axisBodyB.vertices, axes);\r\n            collision.reused = true;\r\n\r\n            if (minOverlap.overlap <= 0) {\r\n                collision.collided = false;\r\n                return collision;\r\n            }\r\n        } else {\r\n            // if we can't reuse a result, perform a full SAT test\r\n\r\n            overlapAB = SAT._overlapAxes(bodyA.vertices, bodyB.vertices, bodyA.axes);\r\n\r\n            if (overlapAB.overlap <= 0) {\r\n                collision.collided = false;\r\n                return collision;\r\n            }\r\n\r\n            overlapBA = SAT._overlapAxes(bodyB.vertices, bodyA.vertices, bodyB.axes);\r\n\r\n            if (overlapBA.overlap <= 0) {\r\n                collision.collided = false;\r\n                return collision;\r\n            }\r\n\r\n            if (overlapAB.overlap < overlapBA.overlap) {\r\n                minOverlap = overlapAB;\r\n                collision.axisBody = bodyA;\r\n            } else {\r\n                minOverlap = overlapBA;\r\n                collision.axisBody = bodyB;\r\n            }\r\n\r\n            // important for reuse later\r\n            collision.axisNumber = minOverlap.axisNumber;\r\n        }\r\n\r\n        collision.bodyA = bodyA.id < bodyB.id ? bodyA : bodyB;\r\n        collision.bodyB = bodyA.id < bodyB.id ? bodyB : bodyA;\r\n        collision.collided = true;\r\n        collision.depth = minOverlap.overlap;\r\n        collision.parentA = collision.bodyA.parent;\r\n        collision.parentB = collision.bodyB.parent;\r\n        \r\n        bodyA = collision.bodyA;\r\n        bodyB = collision.bodyB;\r\n\r\n        // ensure normal is facing away from bodyA\r\n        if (Vector.dot(minOverlap.axis, Vector.sub(bodyB.position, bodyA.position)) < 0) {\r\n            collision.normal = {\r\n                x: minOverlap.axis.x,\r\n                y: minOverlap.axis.y\r\n            };\r\n        } else {\r\n            collision.normal = {\r\n                x: -minOverlap.axis.x,\r\n                y: -minOverlap.axis.y\r\n            };\r\n        }\r\n\r\n        collision.tangent = Vector.perp(collision.normal);\r\n\r\n        collision.penetration = collision.penetration || {};\r\n        collision.penetration.x = collision.normal.x * collision.depth;\r\n        collision.penetration.y = collision.normal.y * collision.depth; \r\n\r\n        // find support points, there is always either exactly one or two\r\n        var verticesB = SAT._findSupports(bodyA, bodyB, collision.normal),\r\n            supports = [];\r\n\r\n        // find the supports from bodyB that are inside bodyA\r\n        if (Vertices.contains(bodyA.vertices, verticesB[0]))\r\n            supports.push(verticesB[0]);\r\n\r\n        if (Vertices.contains(bodyA.vertices, verticesB[1]))\r\n            supports.push(verticesB[1]);\r\n\r\n        // find the supports from bodyA that are inside bodyB\r\n        if (supports.length < 2) {\r\n            var verticesA = SAT._findSupports(bodyB, bodyA, Vector.neg(collision.normal));\r\n                \r\n            if (Vertices.contains(bodyB.vertices, verticesA[0]))\r\n                supports.push(verticesA[0]);\r\n\r\n            if (supports.length < 2 && Vertices.contains(bodyB.vertices, verticesA[1]))\r\n                supports.push(verticesA[1]);\r\n        }\r\n\r\n        // account for the edge case of overlapping but no vertex containment\r\n        if (supports.length < 1)\r\n            supports = [verticesB[0]];\r\n        \r\n        collision.supports = supports;\r\n\r\n        return collision;\r\n    };\r\n\r\n    /**\r\n     * Find the overlap between two sets of vertices.\r\n     * @method _overlapAxes\r\n     * @private\r\n     * @param {} verticesA\r\n     * @param {} verticesB\r\n     * @param {} axes\r\n     * @return result\r\n     */\r\n    SAT._overlapAxes = function(verticesA, verticesB, axes) {\r\n        var projectionA = Vector._temp[0], \r\n            projectionB = Vector._temp[1],\r\n            result = { overlap: Number.MAX_VALUE },\r\n            overlap,\r\n            axis;\r\n\r\n        for (var i = 0; i < axes.length; i++) {\r\n            axis = axes[i];\r\n\r\n            SAT._projectToAxis(projectionA, verticesA, axis);\r\n            SAT._projectToAxis(projectionB, verticesB, axis);\r\n\r\n            overlap = Math.min(projectionA.max - projectionB.min, projectionB.max - projectionA.min);\r\n\r\n            if (overlap <= 0) {\r\n                result.overlap = overlap;\r\n                return result;\r\n            }\r\n\r\n            if (overlap < result.overlap) {\r\n                result.overlap = overlap;\r\n                result.axis = axis;\r\n                result.axisNumber = i;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n    /**\r\n     * Projects vertices on an axis and returns an interval.\r\n     * @method _projectToAxis\r\n     * @private\r\n     * @param {} projection\r\n     * @param {} vertices\r\n     * @param {} axis\r\n     */\r\n    SAT._projectToAxis = function(projection, vertices, axis) {\r\n        var min = Vector.dot(vertices[0], axis),\r\n            max = min;\r\n\r\n        for (var i = 1; i < vertices.length; i += 1) {\r\n            var dot = Vector.dot(vertices[i], axis);\r\n\r\n            if (dot > max) { \r\n                max = dot; \r\n            } else if (dot < min) { \r\n                min = dot; \r\n            }\r\n        }\r\n\r\n        projection.min = min;\r\n        projection.max = max;\r\n    };\r\n    \r\n    /**\r\n     * Finds supporting vertices given two bodies along a given direction using hill-climbing.\r\n     * @method _findSupports\r\n     * @private\r\n     * @param {} bodyA\r\n     * @param {} bodyB\r\n     * @param {} normal\r\n     * @return [vector]\r\n     */\r\n    SAT._findSupports = function(bodyA, bodyB, normal) {\r\n        var nearestDistance = Number.MAX_VALUE,\r\n            vertexToBody = Vector._temp[0],\r\n            vertices = bodyB.vertices,\r\n            bodyAPosition = bodyA.position,\r\n            distance,\r\n            vertex,\r\n            vertexA,\r\n            vertexB;\r\n\r\n        // find closest vertex on bodyB\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            vertex = vertices[i];\r\n            vertexToBody.x = vertex.x - bodyAPosition.x;\r\n            vertexToBody.y = vertex.y - bodyAPosition.y;\r\n            distance = -Vector.dot(normal, vertexToBody);\r\n\r\n            if (distance < nearestDistance) {\r\n                nearestDistance = distance;\r\n                vertexA = vertex;\r\n            }\r\n        }\r\n\r\n        // find next closest vertex using the two connected to it\r\n        var prevIndex = vertexA.index - 1 >= 0 ? vertexA.index - 1 : vertices.length - 1;\r\n        vertex = vertices[prevIndex];\r\n        vertexToBody.x = vertex.x - bodyAPosition.x;\r\n        vertexToBody.y = vertex.y - bodyAPosition.y;\r\n        nearestDistance = -Vector.dot(normal, vertexToBody);\r\n        vertexB = vertex;\r\n\r\n        var nextIndex = (vertexA.index + 1) % vertices.length;\r\n        vertex = vertices[nextIndex];\r\n        vertexToBody.x = vertex.x - bodyAPosition.x;\r\n        vertexToBody.y = vertex.y - bodyAPosition.y;\r\n        distance = -Vector.dot(normal, vertexToBody);\r\n        if (distance < nearestDistance) {\r\n            vertexB = vertex;\r\n        }\r\n\r\n        return [vertexA, vertexB];\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1NBVC5qcz8wYWUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGtHQUFzQjtBQUM3QyxhQUFhLG1CQUFPLENBQUMsOEZBQW9COztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx1RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDOztBQUVBLDRCO0FBQ0EsMEI7QUFDQSxhQUFhLHNCO0FBQ2IsMEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29sbGlzaW9uL1NBVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLlNBVGAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGRldGVjdGluZyBjb2xsaXNpb25zIHVzaW5nIHRoZSBTZXBhcmF0aW5nIEF4aXMgVGhlb3JlbS5cclxuKlxyXG4qIEBjbGFzcyBTQVRcclxuKi9cclxuXHJcbi8vIFRPRE86IHRydWUgY2lyY2xlcyBhbmQgY3VydmVzXHJcblxyXG52YXIgU0FUID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNBVDtcclxuXHJcbnZhciBWZXJ0aWNlcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcbnZhciBWZWN0b3IgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9WZWN0b3InKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVjdCBjb2xsaXNpb24gYmV0d2VlbiB0d28gYm9kaWVzIHVzaW5nIHRoZSBTZXBhcmF0aW5nIEF4aXMgVGhlb3JlbS5cclxuICAgICAqIEBtZXRob2QgY29sbGlkZXNcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keUFcclxuICAgICAqIEBwYXJhbSB7Ym9keX0gYm9keUJcclxuICAgICAqIEBwYXJhbSB7Y29sbGlzaW9ufSBwcmV2aW91c0NvbGxpc2lvblxyXG4gICAgICogQHJldHVybiB7Y29sbGlzaW9ufSBjb2xsaXNpb25cclxuICAgICAqL1xyXG4gICAgU0FULmNvbGxpZGVzID0gZnVuY3Rpb24oYm9keUEsIGJvZHlCLCBwcmV2aW91c0NvbGxpc2lvbikge1xyXG4gICAgICAgIHZhciBvdmVybGFwQUIsXHJcbiAgICAgICAgICAgIG92ZXJsYXBCQSwgXHJcbiAgICAgICAgICAgIG1pbk92ZXJsYXAsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgY2FuUmV1c2VQcmV2Q29sID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwcmV2aW91c0NvbGxpc2lvbikge1xyXG4gICAgICAgICAgICAvLyBlc3RpbWF0ZSB0b3RhbCBtb3Rpb25cclxuICAgICAgICAgICAgdmFyIHBhcmVudEEgPSBib2R5QS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRCID0gYm9keUIucGFyZW50LFxyXG4gICAgICAgICAgICAgICAgbW90aW9uID0gcGFyZW50QS5zcGVlZCAqIHBhcmVudEEuc3BlZWQgKyBwYXJlbnRBLmFuZ3VsYXJTcGVlZCAqIHBhcmVudEEuYW5ndWxhclNwZWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKyBwYXJlbnRCLnNwZWVkICogcGFyZW50Qi5zcGVlZCArIHBhcmVudEIuYW5ndWxhclNwZWVkICogcGFyZW50Qi5hbmd1bGFyU3BlZWQ7XHJcblxyXG4gICAgICAgICAgICAvLyB3ZSBtYXkgYmUgYWJsZSB0byAocGFydGlhbGx5KSByZXVzZSBjb2xsaXNpb24gcmVzdWx0IFxyXG4gICAgICAgICAgICAvLyBidXQgb25seSBzYWZlIGlmIGNvbGxpc2lvbiB3YXMgcmVzdGluZ1xyXG4gICAgICAgICAgICBjYW5SZXVzZVByZXZDb2wgPSBwcmV2aW91c0NvbGxpc2lvbiAmJiBwcmV2aW91c0NvbGxpc2lvbi5jb2xsaWRlZCAmJiBtb3Rpb24gPCAwLjI7XHJcblxyXG4gICAgICAgICAgICAvLyByZXVzZSBjb2xsaXNpb24gb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbGxpc2lvbiA9IHByZXZpb3VzQ29sbGlzaW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbGxpc2lvbiA9IHsgY29sbGlkZWQ6IGZhbHNlLCBib2R5QTogYm9keUEsIGJvZHlCOiBib2R5QiB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByZXZpb3VzQ29sbGlzaW9uICYmIGNhblJldXNlUHJldkNvbCkge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSBjYW4gcmV1c2UgdGhlIGNvbGxpc2lvbiByZXN1bHRcclxuICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHRlc3QgdGhlIHByZXZpb3VzbHkgZm91bmQgYXhpc1xyXG4gICAgICAgICAgICB2YXIgYXhpc0JvZHlBID0gY29sbGlzaW9uLmF4aXNCb2R5LFxyXG4gICAgICAgICAgICAgICAgYXhpc0JvZHlCID0gYXhpc0JvZHlBID09PSBib2R5QSA/IGJvZHlCIDogYm9keUEsXHJcbiAgICAgICAgICAgICAgICBheGVzID0gW2F4aXNCb2R5QS5heGVzW3ByZXZpb3VzQ29sbGlzaW9uLmF4aXNOdW1iZXJdXTtcclxuXHJcbiAgICAgICAgICAgIG1pbk92ZXJsYXAgPSBTQVQuX292ZXJsYXBBeGVzKGF4aXNCb2R5QS52ZXJ0aWNlcywgYXhpc0JvZHlCLnZlcnRpY2VzLCBheGVzKTtcclxuICAgICAgICAgICAgY29sbGlzaW9uLnJldXNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAobWluT3ZlcmxhcC5vdmVybGFwIDw9IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbi5jb2xsaWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxpc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHdlIGNhbid0IHJldXNlIGEgcmVzdWx0LCBwZXJmb3JtIGEgZnVsbCBTQVQgdGVzdFxyXG5cclxuICAgICAgICAgICAgb3ZlcmxhcEFCID0gU0FULl9vdmVybGFwQXhlcyhib2R5QS52ZXJ0aWNlcywgYm9keUIudmVydGljZXMsIGJvZHlBLmF4ZXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXBBQi5vdmVybGFwIDw9IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbi5jb2xsaWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxpc2lvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3ZlcmxhcEJBID0gU0FULl9vdmVybGFwQXhlcyhib2R5Qi52ZXJ0aWNlcywgYm9keUEudmVydGljZXMsIGJvZHlCLmF4ZXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXBCQS5vdmVybGFwIDw9IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbi5jb2xsaWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxpc2lvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXBBQi5vdmVybGFwIDwgb3ZlcmxhcEJBLm92ZXJsYXApIHtcclxuICAgICAgICAgICAgICAgIG1pbk92ZXJsYXAgPSBvdmVybGFwQUI7XHJcbiAgICAgICAgICAgICAgICBjb2xsaXNpb24uYXhpc0JvZHkgPSBib2R5QTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pbk92ZXJsYXAgPSBvdmVybGFwQkE7XHJcbiAgICAgICAgICAgICAgICBjb2xsaXNpb24uYXhpc0JvZHkgPSBib2R5QjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciByZXVzZSBsYXRlclxyXG4gICAgICAgICAgICBjb2xsaXNpb24uYXhpc051bWJlciA9IG1pbk92ZXJsYXAuYXhpc051bWJlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbGxpc2lvbi5ib2R5QSA9IGJvZHlBLmlkIDwgYm9keUIuaWQgPyBib2R5QSA6IGJvZHlCO1xyXG4gICAgICAgIGNvbGxpc2lvbi5ib2R5QiA9IGJvZHlBLmlkIDwgYm9keUIuaWQgPyBib2R5QiA6IGJvZHlBO1xyXG4gICAgICAgIGNvbGxpc2lvbi5jb2xsaWRlZCA9IHRydWU7XHJcbiAgICAgICAgY29sbGlzaW9uLmRlcHRoID0gbWluT3ZlcmxhcC5vdmVybGFwO1xyXG4gICAgICAgIGNvbGxpc2lvbi5wYXJlbnRBID0gY29sbGlzaW9uLmJvZHlBLnBhcmVudDtcclxuICAgICAgICBjb2xsaXNpb24ucGFyZW50QiA9IGNvbGxpc2lvbi5ib2R5Qi5wYXJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgYm9keUEgPSBjb2xsaXNpb24uYm9keUE7XHJcbiAgICAgICAgYm9keUIgPSBjb2xsaXNpb24uYm9keUI7XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSBub3JtYWwgaXMgZmFjaW5nIGF3YXkgZnJvbSBib2R5QVxyXG4gICAgICAgIGlmIChWZWN0b3IuZG90KG1pbk92ZXJsYXAuYXhpcywgVmVjdG9yLnN1Yihib2R5Qi5wb3NpdGlvbiwgYm9keUEucG9zaXRpb24pKSA8IDApIHtcclxuICAgICAgICAgICAgY29sbGlzaW9uLm5vcm1hbCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IG1pbk92ZXJsYXAuYXhpcy54LFxyXG4gICAgICAgICAgICAgICAgeTogbWluT3ZlcmxhcC5heGlzLnlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2xsaXNpb24ubm9ybWFsID0ge1xyXG4gICAgICAgICAgICAgICAgeDogLW1pbk92ZXJsYXAuYXhpcy54LFxyXG4gICAgICAgICAgICAgICAgeTogLW1pbk92ZXJsYXAuYXhpcy55XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xsaXNpb24udGFuZ2VudCA9IFZlY3Rvci5wZXJwKGNvbGxpc2lvbi5ub3JtYWwpO1xyXG5cclxuICAgICAgICBjb2xsaXNpb24ucGVuZXRyYXRpb24gPSBjb2xsaXNpb24ucGVuZXRyYXRpb24gfHwge307XHJcbiAgICAgICAgY29sbGlzaW9uLnBlbmV0cmF0aW9uLnggPSBjb2xsaXNpb24ubm9ybWFsLnggKiBjb2xsaXNpb24uZGVwdGg7XHJcbiAgICAgICAgY29sbGlzaW9uLnBlbmV0cmF0aW9uLnkgPSBjb2xsaXNpb24ubm9ybWFsLnkgKiBjb2xsaXNpb24uZGVwdGg7IFxyXG5cclxuICAgICAgICAvLyBmaW5kIHN1cHBvcnQgcG9pbnRzLCB0aGVyZSBpcyBhbHdheXMgZWl0aGVyIGV4YWN0bHkgb25lIG9yIHR3b1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlc0IgPSBTQVQuX2ZpbmRTdXBwb3J0cyhib2R5QSwgYm9keUIsIGNvbGxpc2lvbi5ub3JtYWwpLFxyXG4gICAgICAgICAgICBzdXBwb3J0cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBmaW5kIHRoZSBzdXBwb3J0cyBmcm9tIGJvZHlCIHRoYXQgYXJlIGluc2lkZSBib2R5QVxyXG4gICAgICAgIGlmIChWZXJ0aWNlcy5jb250YWlucyhib2R5QS52ZXJ0aWNlcywgdmVydGljZXNCWzBdKSlcclxuICAgICAgICAgICAgc3VwcG9ydHMucHVzaCh2ZXJ0aWNlc0JbMF0pO1xyXG5cclxuICAgICAgICBpZiAoVmVydGljZXMuY29udGFpbnMoYm9keUEudmVydGljZXMsIHZlcnRpY2VzQlsxXSkpXHJcbiAgICAgICAgICAgIHN1cHBvcnRzLnB1c2godmVydGljZXNCWzFdKTtcclxuXHJcbiAgICAgICAgLy8gZmluZCB0aGUgc3VwcG9ydHMgZnJvbSBib2R5QSB0aGF0IGFyZSBpbnNpZGUgYm9keUJcclxuICAgICAgICBpZiAoc3VwcG9ydHMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICB2YXIgdmVydGljZXNBID0gU0FULl9maW5kU3VwcG9ydHMoYm9keUIsIGJvZHlBLCBWZWN0b3IubmVnKGNvbGxpc2lvbi5ub3JtYWwpKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoVmVydGljZXMuY29udGFpbnMoYm9keUIudmVydGljZXMsIHZlcnRpY2VzQVswXSkpXHJcbiAgICAgICAgICAgICAgICBzdXBwb3J0cy5wdXNoKHZlcnRpY2VzQVswXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3VwcG9ydHMubGVuZ3RoIDwgMiAmJiBWZXJ0aWNlcy5jb250YWlucyhib2R5Qi52ZXJ0aWNlcywgdmVydGljZXNBWzFdKSlcclxuICAgICAgICAgICAgICAgIHN1cHBvcnRzLnB1c2godmVydGljZXNBWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFjY291bnQgZm9yIHRoZSBlZGdlIGNhc2Ugb2Ygb3ZlcmxhcHBpbmcgYnV0IG5vIHZlcnRleCBjb250YWlubWVudFxyXG4gICAgICAgIGlmIChzdXBwb3J0cy5sZW5ndGggPCAxKVxyXG4gICAgICAgICAgICBzdXBwb3J0cyA9IFt2ZXJ0aWNlc0JbMF1dO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbGxpc2lvbi5zdXBwb3J0cyA9IHN1cHBvcnRzO1xyXG5cclxuICAgICAgICByZXR1cm4gY29sbGlzaW9uO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgdGhlIG92ZXJsYXAgYmV0d2VlbiB0d28gc2V0cyBvZiB2ZXJ0aWNlcy5cclxuICAgICAqIEBtZXRob2QgX292ZXJsYXBBeGVzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHt9IHZlcnRpY2VzQVxyXG4gICAgICogQHBhcmFtIHt9IHZlcnRpY2VzQlxyXG4gICAgICogQHBhcmFtIHt9IGF4ZXNcclxuICAgICAqIEByZXR1cm4gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIFNBVC5fb3ZlcmxhcEF4ZXMgPSBmdW5jdGlvbih2ZXJ0aWNlc0EsIHZlcnRpY2VzQiwgYXhlcykge1xyXG4gICAgICAgIHZhciBwcm9qZWN0aW9uQSA9IFZlY3Rvci5fdGVtcFswXSwgXHJcbiAgICAgICAgICAgIHByb2plY3Rpb25CID0gVmVjdG9yLl90ZW1wWzFdLFxyXG4gICAgICAgICAgICByZXN1bHQgPSB7IG92ZXJsYXA6IE51bWJlci5NQVhfVkFMVUUgfSxcclxuICAgICAgICAgICAgb3ZlcmxhcCxcclxuICAgICAgICAgICAgYXhpcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGF4aXMgPSBheGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgU0FULl9wcm9qZWN0VG9BeGlzKHByb2plY3Rpb25BLCB2ZXJ0aWNlc0EsIGF4aXMpO1xyXG4gICAgICAgICAgICBTQVQuX3Byb2plY3RUb0F4aXMocHJvamVjdGlvbkIsIHZlcnRpY2VzQiwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBvdmVybGFwID0gTWF0aC5taW4ocHJvamVjdGlvbkEubWF4IC0gcHJvamVjdGlvbkIubWluLCBwcm9qZWN0aW9uQi5tYXggLSBwcm9qZWN0aW9uQS5taW4pO1xyXG5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXAgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm92ZXJsYXAgPSBvdmVybGFwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXAgPCByZXN1bHQub3ZlcmxhcCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm92ZXJsYXAgPSBvdmVybGFwO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmF4aXMgPSBheGlzO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmF4aXNOdW1iZXIgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2plY3RzIHZlcnRpY2VzIG9uIGFuIGF4aXMgYW5kIHJldHVybnMgYW4gaW50ZXJ2YWwuXHJcbiAgICAgKiBAbWV0aG9kIF9wcm9qZWN0VG9BeGlzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHt9IHByb2plY3Rpb25cclxuICAgICAqIEBwYXJhbSB7fSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHt9IGF4aXNcclxuICAgICAqL1xyXG4gICAgU0FULl9wcm9qZWN0VG9BeGlzID0gZnVuY3Rpb24ocHJvamVjdGlvbiwgdmVydGljZXMsIGF4aXMpIHtcclxuICAgICAgICB2YXIgbWluID0gVmVjdG9yLmRvdCh2ZXJ0aWNlc1swXSwgYXhpcyksXHJcbiAgICAgICAgICAgIG1heCA9IG1pbjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICB2YXIgZG90ID0gVmVjdG9yLmRvdCh2ZXJ0aWNlc1tpXSwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZG90ID4gbWF4KSB7IFxyXG4gICAgICAgICAgICAgICAgbWF4ID0gZG90OyBcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkb3QgPCBtaW4pIHsgXHJcbiAgICAgICAgICAgICAgICBtaW4gPSBkb3Q7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcm9qZWN0aW9uLm1pbiA9IG1pbjtcclxuICAgICAgICBwcm9qZWN0aW9uLm1heCA9IG1heDtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgc3VwcG9ydGluZyB2ZXJ0aWNlcyBnaXZlbiB0d28gYm9kaWVzIGFsb25nIGEgZ2l2ZW4gZGlyZWN0aW9uIHVzaW5nIGhpbGwtY2xpbWJpbmcuXHJcbiAgICAgKiBAbWV0aG9kIF9maW5kU3VwcG9ydHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge30gYm9keUFcclxuICAgICAqIEBwYXJhbSB7fSBib2R5QlxyXG4gICAgICogQHBhcmFtIHt9IG5vcm1hbFxyXG4gICAgICogQHJldHVybiBbdmVjdG9yXVxyXG4gICAgICovXHJcbiAgICBTQVQuX2ZpbmRTdXBwb3J0cyA9IGZ1bmN0aW9uKGJvZHlBLCBib2R5Qiwgbm9ybWFsKSB7XHJcbiAgICAgICAgdmFyIG5lYXJlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUUsXHJcbiAgICAgICAgICAgIHZlcnRleFRvQm9keSA9IFZlY3Rvci5fdGVtcFswXSxcclxuICAgICAgICAgICAgdmVydGljZXMgPSBib2R5Qi52ZXJ0aWNlcyxcclxuICAgICAgICAgICAgYm9keUFQb3NpdGlvbiA9IGJvZHlBLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICBkaXN0YW5jZSxcclxuICAgICAgICAgICAgdmVydGV4LFxyXG4gICAgICAgICAgICB2ZXJ0ZXhBLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhCO1xyXG5cclxuICAgICAgICAvLyBmaW5kIGNsb3Nlc3QgdmVydGV4IG9uIGJvZHlCXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgdmVydGV4VG9Cb2R5LnggPSB2ZXJ0ZXgueCAtIGJvZHlBUG9zaXRpb24ueDtcclxuICAgICAgICAgICAgdmVydGV4VG9Cb2R5LnkgPSB2ZXJ0ZXgueSAtIGJvZHlBUG9zaXRpb24ueTtcclxuICAgICAgICAgICAgZGlzdGFuY2UgPSAtVmVjdG9yLmRvdChub3JtYWwsIHZlcnRleFRvQm9keSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBuZWFyZXN0RGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIG5lYXJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgdmVydGV4QSA9IHZlcnRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmluZCBuZXh0IGNsb3Nlc3QgdmVydGV4IHVzaW5nIHRoZSB0d28gY29ubmVjdGVkIHRvIGl0XHJcbiAgICAgICAgdmFyIHByZXZJbmRleCA9IHZlcnRleEEuaW5kZXggLSAxID49IDAgPyB2ZXJ0ZXhBLmluZGV4IC0gMSA6IHZlcnRpY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgdmVydGV4ID0gdmVydGljZXNbcHJldkluZGV4XTtcclxuICAgICAgICB2ZXJ0ZXhUb0JvZHkueCA9IHZlcnRleC54IC0gYm9keUFQb3NpdGlvbi54O1xyXG4gICAgICAgIHZlcnRleFRvQm9keS55ID0gdmVydGV4LnkgLSBib2R5QVBvc2l0aW9uLnk7XHJcbiAgICAgICAgbmVhcmVzdERpc3RhbmNlID0gLVZlY3Rvci5kb3Qobm9ybWFsLCB2ZXJ0ZXhUb0JvZHkpO1xyXG4gICAgICAgIHZlcnRleEIgPSB2ZXJ0ZXg7XHJcblxyXG4gICAgICAgIHZhciBuZXh0SW5kZXggPSAodmVydGV4QS5pbmRleCArIDEpICUgdmVydGljZXMubGVuZ3RoO1xyXG4gICAgICAgIHZlcnRleCA9IHZlcnRpY2VzW25leHRJbmRleF07XHJcbiAgICAgICAgdmVydGV4VG9Cb2R5LnggPSB2ZXJ0ZXgueCAtIGJvZHlBUG9zaXRpb24ueDtcclxuICAgICAgICB2ZXJ0ZXhUb0JvZHkueSA9IHZlcnRleC55IC0gYm9keUFQb3NpdGlvbi55O1xyXG4gICAgICAgIGRpc3RhbmNlID0gLVZlY3Rvci5kb3Qobm9ybWFsLCB2ZXJ0ZXhUb0JvZHkpO1xyXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IG5lYXJlc3REaXN0YW5jZSkge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhCID0gdmVydGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFt2ZXJ0ZXhBLCB2ZXJ0ZXhCXTtcclxuICAgIH07XHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/collision/SAT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Constraint` module contains methods for creating and manipulating constraints.\r\n* Constraints are used for specifying that a fixed distance must be maintained between two bodies (or a body and a fixed world-space position).\r\n* The stiffness of constraints can be modified to create springs or elastic.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Constraint\r\n*/\r\n\r\nvar Constraint = {};\r\n\r\nmodule.exports = Constraint;\r\n\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Sleeping = __webpack_require__(/*! ../core/Sleeping */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Axes = __webpack_require__(/*! ../geometry/Axes */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    Constraint._warming = 0.4;\r\n    Constraint._torqueDampen = 1;\r\n    Constraint._minLength = 0.000001;\r\n\r\n    /**\r\n     * Creates a new constraint.\r\n     * All properties have default values, and many are pre-calculated automatically based on other properties.\r\n     * To simulate a revolute constraint (or pin joint) set `length: 0` and a high `stiffness` value (e.g. `0.7` or above).\r\n     * If the constraint is unstable, try lowering the `stiffness` value and / or increasing `engine.constraintIterations`.\r\n     * For compound bodies, constraints must be applied to the parent body (not one of its parts).\r\n     * See the properties section below for detailed information on what you can pass via the `options` object.\r\n     * @method create\r\n     * @param {} options\r\n     * @return {constraint} constraint\r\n     */\r\n    Constraint.create = function(options) {\r\n        var constraint = options;\r\n\r\n        // if bodies defined but no points, use body centre\r\n        if (constraint.bodyA && !constraint.pointA)\r\n            constraint.pointA = { x: 0, y: 0 };\r\n        if (constraint.bodyB && !constraint.pointB)\r\n            constraint.pointB = { x: 0, y: 0 };\r\n\r\n        // calculate static length using initial world space points\r\n        var initialPointA = constraint.bodyA ? Vector.add(constraint.bodyA.position, constraint.pointA) : constraint.pointA,\r\n            initialPointB = constraint.bodyB ? Vector.add(constraint.bodyB.position, constraint.pointB) : constraint.pointB,\r\n            length = Vector.magnitude(Vector.sub(initialPointA, initialPointB));\r\n    \r\n        constraint.length = typeof constraint.length !== 'undefined' ? constraint.length : length;\r\n\r\n        // option defaults\r\n        constraint.id = constraint.id || Common.nextId();\r\n        constraint.label = constraint.label || 'Constraint';\r\n        constraint.type = 'constraint';\r\n        constraint.stiffness = constraint.stiffness || (constraint.length > 0 ? 1 : 0.7);\r\n        constraint.damping = constraint.damping || 0;\r\n        constraint.angularStiffness = constraint.angularStiffness || 0;\r\n        constraint.angleA = constraint.bodyA ? constraint.bodyA.angle : constraint.angleA;\r\n        constraint.angleB = constraint.bodyB ? constraint.bodyB.angle : constraint.angleB;\r\n        constraint.plugin = {};\r\n\r\n        // render\r\n        var render = {\r\n            visible: true,\r\n            lineWidth: 2,\r\n            strokeStyle: '#ffffff',\r\n            type: 'line',\r\n            anchors: true\r\n        };\r\n\r\n        if (constraint.length === 0 && constraint.stiffness > 0.1) {\r\n            render.type = 'pin';\r\n            render.anchors = false;\r\n        } else if (constraint.stiffness < 0.9) {\r\n            render.type = 'spring';\r\n        }\r\n\r\n        constraint.render = Common.extend(render, constraint.render);\r\n\r\n        return constraint;\r\n    };\r\n\r\n    /**\r\n     * Prepares for solving by constraint warming.\r\n     * @private\r\n     * @method preSolveAll\r\n     * @param {body[]} bodies\r\n     */\r\n    Constraint.preSolveAll = function(bodies) {\r\n        for (var i = 0; i < bodies.length; i += 1) {\r\n            var body = bodies[i],\r\n                impulse = body.constraintImpulse;\r\n\r\n            if (body.isStatic || (impulse.x === 0 && impulse.y === 0 && impulse.angle === 0)) {\r\n                continue;\r\n            }\r\n\r\n            body.position.x += impulse.x;\r\n            body.position.y += impulse.y;\r\n            body.angle += impulse.angle;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Solves all constraints in a list of collisions.\r\n     * @private\r\n     * @method solveAll\r\n     * @param {constraint[]} constraints\r\n     * @param {number} timeScale\r\n     */\r\n    Constraint.solveAll = function(constraints, timeScale) {\r\n        // Solve fixed constraints first.\r\n        for (var i = 0; i < constraints.length; i += 1) {\r\n            var constraint = constraints[i],\r\n                fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic),\r\n                fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);\r\n\r\n            if (fixedA || fixedB) {\r\n                Constraint.solve(constraints[i], timeScale);\r\n            }\r\n        }\r\n\r\n        // Solve free constraints last.\r\n        for (i = 0; i < constraints.length; i += 1) {\r\n            constraint = constraints[i];\r\n            fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic);\r\n            fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);\r\n\r\n            if (!fixedA && !fixedB) {\r\n                Constraint.solve(constraints[i], timeScale);\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Solves a distance constraint with Gauss-Siedel method.\r\n     * @private\r\n     * @method solve\r\n     * @param {constraint} constraint\r\n     * @param {number} timeScale\r\n     */\r\n    Constraint.solve = function(constraint, timeScale) {\r\n        var bodyA = constraint.bodyA,\r\n            bodyB = constraint.bodyB,\r\n            pointA = constraint.pointA,\r\n            pointB = constraint.pointB;\r\n\r\n        if (!bodyA && !bodyB)\r\n            return;\r\n\r\n        // update reference angle\r\n        if (bodyA && !bodyA.isStatic) {\r\n            Vector.rotate(pointA, bodyA.angle - constraint.angleA, pointA);\r\n            constraint.angleA = bodyA.angle;\r\n        }\r\n        \r\n        // update reference angle\r\n        if (bodyB && !bodyB.isStatic) {\r\n            Vector.rotate(pointB, bodyB.angle - constraint.angleB, pointB);\r\n            constraint.angleB = bodyB.angle;\r\n        }\r\n\r\n        var pointAWorld = pointA,\r\n            pointBWorld = pointB;\r\n\r\n        if (bodyA) pointAWorld = Vector.add(bodyA.position, pointA);\r\n        if (bodyB) pointBWorld = Vector.add(bodyB.position, pointB);\r\n\r\n        if (!pointAWorld || !pointBWorld)\r\n            return;\r\n\r\n        var delta = Vector.sub(pointAWorld, pointBWorld),\r\n            currentLength = Vector.magnitude(delta);\r\n\r\n        // prevent singularity\r\n        if (currentLength < Constraint._minLength) {\r\n            currentLength = Constraint._minLength;\r\n        }\r\n\r\n        // solve distance constraint with Gauss-Siedel method\r\n        var difference = (currentLength - constraint.length) / currentLength,\r\n            stiffness = constraint.stiffness < 1 ? constraint.stiffness * timeScale : constraint.stiffness,\r\n            force = Vector.mult(delta, difference * stiffness),\r\n            massTotal = (bodyA ? bodyA.inverseMass : 0) + (bodyB ? bodyB.inverseMass : 0),\r\n            inertiaTotal = (bodyA ? bodyA.inverseInertia : 0) + (bodyB ? bodyB.inverseInertia : 0),\r\n            resistanceTotal = massTotal + inertiaTotal,\r\n            torque,\r\n            share,\r\n            normal,\r\n            normalVelocity,\r\n            relativeVelocity;\r\n\r\n        if (constraint.damping) {\r\n            var zero = Vector.create();\r\n            normal = Vector.div(delta, currentLength);\r\n\r\n            relativeVelocity = Vector.sub(\r\n                bodyB && Vector.sub(bodyB.position, bodyB.positionPrev) || zero,\r\n                bodyA && Vector.sub(bodyA.position, bodyA.positionPrev) || zero\r\n            );\r\n\r\n            normalVelocity = Vector.dot(normal, relativeVelocity);\r\n        }\r\n\r\n        if (bodyA && !bodyA.isStatic) {\r\n            share = bodyA.inverseMass / massTotal;\r\n\r\n            // keep track of applied impulses for post solving\r\n            bodyA.constraintImpulse.x -= force.x * share;\r\n            bodyA.constraintImpulse.y -= force.y * share;\r\n\r\n            // apply forces\r\n            bodyA.position.x -= force.x * share;\r\n            bodyA.position.y -= force.y * share;\r\n\r\n            // apply damping\r\n            if (constraint.damping) {\r\n                bodyA.positionPrev.x -= constraint.damping * normal.x * normalVelocity * share;\r\n                bodyA.positionPrev.y -= constraint.damping * normal.y * normalVelocity * share;\r\n            }\r\n\r\n            // apply torque\r\n            torque = (Vector.cross(pointA, force) / resistanceTotal) * Constraint._torqueDampen * bodyA.inverseInertia * (1 - constraint.angularStiffness);\r\n            bodyA.constraintImpulse.angle -= torque;\r\n            bodyA.angle -= torque;\r\n        }\r\n\r\n        if (bodyB && !bodyB.isStatic) {\r\n            share = bodyB.inverseMass / massTotal;\r\n\r\n            // keep track of applied impulses for post solving\r\n            bodyB.constraintImpulse.x += force.x * share;\r\n            bodyB.constraintImpulse.y += force.y * share;\r\n            \r\n            // apply forces\r\n            bodyB.position.x += force.x * share;\r\n            bodyB.position.y += force.y * share;\r\n\r\n            // apply damping\r\n            if (constraint.damping) {\r\n                bodyB.positionPrev.x += constraint.damping * normal.x * normalVelocity * share;\r\n                bodyB.positionPrev.y += constraint.damping * normal.y * normalVelocity * share;\r\n            }\r\n\r\n            // apply torque\r\n            torque = (Vector.cross(pointB, force) / resistanceTotal) * Constraint._torqueDampen * bodyB.inverseInertia * (1 - constraint.angularStiffness);\r\n            bodyB.constraintImpulse.angle += torque;\r\n            bodyB.angle += torque;\r\n        }\r\n\r\n    };\r\n\r\n    /**\r\n     * Performs body updates required after solving constraints.\r\n     * @private\r\n     * @method postSolveAll\r\n     * @param {body[]} bodies\r\n     */\r\n    Constraint.postSolveAll = function(bodies) {\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i],\r\n                impulse = body.constraintImpulse;\r\n\r\n            if (body.isStatic || (impulse.x === 0 && impulse.y === 0 && impulse.angle === 0)) {\r\n                continue;\r\n            }\r\n\r\n            Sleeping.set(body, false);\r\n\r\n            // update geometry and reset\r\n            for (var j = 0; j < body.parts.length; j++) {\r\n                var part = body.parts[j];\r\n                \r\n                Vertices.translate(part.vertices, impulse);\r\n\r\n                if (j > 0) {\r\n                    part.position.x += impulse.x;\r\n                    part.position.y += impulse.y;\r\n                }\r\n\r\n                if (impulse.angle !== 0) {\r\n                    Vertices.rotate(part.vertices, impulse.angle, body.position);\r\n                    Axes.rotate(part.axes, impulse.angle);\r\n                    if (j > 0) {\r\n                        Vector.rotateAbout(part.position, impulse.angle, body.position, part.position);\r\n                    }\r\n                }\r\n\r\n                Bounds.update(part.bounds, part.vertices, body.velocity);\r\n            }\r\n\r\n            // dampen the cached impulse for warming next step\r\n            impulse.angle *= Constraint._warming;\r\n            impulse.x *= Constraint._warming;\r\n            impulse.y *= Constraint._warming;\r\n        }\r\n    };\r\n\r\n    /*\r\n    *\r\n    *  Properties Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n     * An integer `Number` uniquely identifying number generated in `Composite.create` by `Common.nextId`.\r\n     *\r\n     * @property id\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * A `String` denoting the type of object.\r\n     *\r\n     * @property type\r\n     * @type string\r\n     * @default \"constraint\"\r\n     * @readOnly\r\n     */\r\n\r\n    /**\r\n     * An arbitrary `String` name to help the user identify and manage bodies.\r\n     *\r\n     * @property label\r\n     * @type string\r\n     * @default \"Constraint\"\r\n     */\r\n\r\n    /**\r\n     * An `Object` that defines the rendering properties to be consumed by the module `Matter.Render`.\r\n     *\r\n     * @property render\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * A flag that indicates if the constraint should be rendered.\r\n     *\r\n     * @property render.visible\r\n     * @type boolean\r\n     * @default true\r\n     */\r\n\r\n    /**\r\n     * A `Number` that defines the line width to use when rendering the constraint outline.\r\n     * A value of `0` means no outline will be rendered.\r\n     *\r\n     * @property render.lineWidth\r\n     * @type number\r\n     * @default 2\r\n     */\r\n\r\n    /**\r\n     * A `String` that defines the stroke style to use when rendering the constraint outline.\r\n     * It is the same as when using a canvas, so it accepts CSS style property values.\r\n     *\r\n     * @property render.strokeStyle\r\n     * @type string\r\n     * @default a random colour\r\n     */\r\n\r\n    /**\r\n     * A `String` that defines the constraint rendering type. \r\n     * The possible values are 'line', 'pin', 'spring'.\r\n     * An appropriate render type will be automatically chosen unless one is given in options.\r\n     *\r\n     * @property render.type\r\n     * @type string\r\n     * @default 'line'\r\n     */\r\n\r\n    /**\r\n     * A `Boolean` that defines if the constraint's anchor points should be rendered.\r\n     *\r\n     * @property render.anchors\r\n     * @type boolean\r\n     * @default true\r\n     */\r\n\r\n    /**\r\n     * The first possible `Body` that this constraint is attached to.\r\n     *\r\n     * @property bodyA\r\n     * @type body\r\n     * @default null\r\n     */\r\n\r\n    /**\r\n     * The second possible `Body` that this constraint is attached to.\r\n     *\r\n     * @property bodyB\r\n     * @type body\r\n     * @default null\r\n     */\r\n\r\n    /**\r\n     * A `Vector` that specifies the offset of the constraint from center of the `constraint.bodyA` if defined, otherwise a world-space position.\r\n     *\r\n     * @property pointA\r\n     * @type vector\r\n     * @default { x: 0, y: 0 }\r\n     */\r\n\r\n    /**\r\n     * A `Vector` that specifies the offset of the constraint from center of the `constraint.bodyB` if defined, otherwise a world-space position.\r\n     *\r\n     * @property pointB\r\n     * @type vector\r\n     * @default { x: 0, y: 0 }\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`.\r\n     * A value of `1` means the constraint should be very stiff.\r\n     * A value of `0.2` means the constraint acts like a soft spring.\r\n     *\r\n     * @property stiffness\r\n     * @type number\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the damping of the constraint, \r\n     * i.e. the amount of resistance applied to each body based on their velocities to limit the amount of oscillation.\r\n     * Damping will only be apparent when the constraint also has a very low `stiffness`.\r\n     * A value of `0.1` means the constraint will apply heavy damping, resulting in little to no oscillation.\r\n     * A value of `0` means the constraint will apply no damping.\r\n     *\r\n     * @property damping\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the target resting length of the constraint. \r\n     * It is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\r\n     *\r\n     * @property length\r\n     * @type number\r\n     */\r\n\r\n    /**\r\n     * An object reserved for storing plugin-specific properties.\r\n     *\r\n     * @property plugin\r\n     * @type {}\r\n     */\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29uc3RyYWludC9Db25zdHJhaW50LmpzP2VlNDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxrR0FBc0I7QUFDN0MsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsMEZBQWtCO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQyw4RkFBb0I7QUFDekMsV0FBVyxtQkFBTyxDQUFDLDBGQUFrQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsc0ZBQWdCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLHdCQUF3QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29uc3RyYWludC9Db25zdHJhaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuQ29uc3RyYWludGAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29uc3RyYWludHMuXHJcbiogQ29uc3RyYWludHMgYXJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgdGhhdCBhIGZpeGVkIGRpc3RhbmNlIG11c3QgYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIHR3byBib2RpZXMgKG9yIGEgYm9keSBhbmQgYSBmaXhlZCB3b3JsZC1zcGFjZSBwb3NpdGlvbikuXHJcbiogVGhlIHN0aWZmbmVzcyBvZiBjb25zdHJhaW50cyBjYW4gYmUgbW9kaWZpZWQgdG8gY3JlYXRlIHNwcmluZ3Mgb3IgZWxhc3RpYy5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcbipcclxuKiBAY2xhc3MgQ29uc3RyYWludFxyXG4qL1xyXG5cclxudmFyIENvbnN0cmFpbnQgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29uc3RyYWludDtcclxuXHJcbnZhciBWZXJ0aWNlcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlcnRpY2VzJyk7XHJcbnZhciBWZWN0b3IgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9WZWN0b3InKTtcclxudmFyIFNsZWVwaW5nID0gcmVxdWlyZSgnLi4vY29yZS9TbGVlcGluZycpO1xyXG52YXIgQm91bmRzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvQm91bmRzJyk7XHJcbnZhciBBeGVzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvQXhlcycpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICBDb25zdHJhaW50Ll93YXJtaW5nID0gMC40O1xyXG4gICAgQ29uc3RyYWludC5fdG9ycXVlRGFtcGVuID0gMTtcclxuICAgIENvbnN0cmFpbnQuX21pbkxlbmd0aCA9IDAuMDAwMDAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb25zdHJhaW50LlxyXG4gICAgICogQWxsIHByb3BlcnRpZXMgaGF2ZSBkZWZhdWx0IHZhbHVlcywgYW5kIG1hbnkgYXJlIHByZS1jYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gb3RoZXIgcHJvcGVydGllcy5cclxuICAgICAqIFRvIHNpbXVsYXRlIGEgcmV2b2x1dGUgY29uc3RyYWludCAob3IgcGluIGpvaW50KSBzZXQgYGxlbmd0aDogMGAgYW5kIGEgaGlnaCBgc3RpZmZuZXNzYCB2YWx1ZSAoZS5nLiBgMC43YCBvciBhYm92ZSkuXHJcbiAgICAgKiBJZiB0aGUgY29uc3RyYWludCBpcyB1bnN0YWJsZSwgdHJ5IGxvd2VyaW5nIHRoZSBgc3RpZmZuZXNzYCB2YWx1ZSBhbmQgLyBvciBpbmNyZWFzaW5nIGBlbmdpbmUuY29uc3RyYWludEl0ZXJhdGlvbnNgLlxyXG4gICAgICogRm9yIGNvbXBvdW5kIGJvZGllcywgY29uc3RyYWludHMgbXVzdCBiZSBhcHBsaWVkIHRvIHRoZSBwYXJlbnQgYm9keSAobm90IG9uZSBvZiBpdHMgcGFydHMpLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgeW91IGNhbiBwYXNzIHZpYSB0aGUgYG9wdGlvbnNgIG9iamVjdC5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge30gb3B0aW9uc1xyXG4gICAgICogQHJldHVybiB7Y29uc3RyYWludH0gY29uc3RyYWludFxyXG4gICAgICovXHJcbiAgICBDb25zdHJhaW50LmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgY29uc3RyYWludCA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIC8vIGlmIGJvZGllcyBkZWZpbmVkIGJ1dCBubyBwb2ludHMsIHVzZSBib2R5IGNlbnRyZVxyXG4gICAgICAgIGlmIChjb25zdHJhaW50LmJvZHlBICYmICFjb25zdHJhaW50LnBvaW50QSlcclxuICAgICAgICAgICAgY29uc3RyYWludC5wb2ludEEgPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICBpZiAoY29uc3RyYWludC5ib2R5QiAmJiAhY29uc3RyYWludC5wb2ludEIpXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnQucG9pbnRCID0geyB4OiAwLCB5OiAwIH07XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBzdGF0aWMgbGVuZ3RoIHVzaW5nIGluaXRpYWwgd29ybGQgc3BhY2UgcG9pbnRzXHJcbiAgICAgICAgdmFyIGluaXRpYWxQb2ludEEgPSBjb25zdHJhaW50LmJvZHlBID8gVmVjdG9yLmFkZChjb25zdHJhaW50LmJvZHlBLnBvc2l0aW9uLCBjb25zdHJhaW50LnBvaW50QSkgOiBjb25zdHJhaW50LnBvaW50QSxcclxuICAgICAgICAgICAgaW5pdGlhbFBvaW50QiA9IGNvbnN0cmFpbnQuYm9keUIgPyBWZWN0b3IuYWRkKGNvbnN0cmFpbnQuYm9keUIucG9zaXRpb24sIGNvbnN0cmFpbnQucG9pbnRCKSA6IGNvbnN0cmFpbnQucG9pbnRCLFxyXG4gICAgICAgICAgICBsZW5ndGggPSBWZWN0b3IubWFnbml0dWRlKFZlY3Rvci5zdWIoaW5pdGlhbFBvaW50QSwgaW5pdGlhbFBvaW50QikpO1xyXG4gICAgXHJcbiAgICAgICAgY29uc3RyYWludC5sZW5ndGggPSB0eXBlb2YgY29uc3RyYWludC5sZW5ndGggIT09ICd1bmRlZmluZWQnID8gY29uc3RyYWludC5sZW5ndGggOiBsZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIG9wdGlvbiBkZWZhdWx0c1xyXG4gICAgICAgIGNvbnN0cmFpbnQuaWQgPSBjb25zdHJhaW50LmlkIHx8IENvbW1vbi5uZXh0SWQoKTtcclxuICAgICAgICBjb25zdHJhaW50LmxhYmVsID0gY29uc3RyYWludC5sYWJlbCB8fCAnQ29uc3RyYWludCc7XHJcbiAgICAgICAgY29uc3RyYWludC50eXBlID0gJ2NvbnN0cmFpbnQnO1xyXG4gICAgICAgIGNvbnN0cmFpbnQuc3RpZmZuZXNzID0gY29uc3RyYWludC5zdGlmZm5lc3MgfHwgKGNvbnN0cmFpbnQubGVuZ3RoID4gMCA/IDEgOiAwLjcpO1xyXG4gICAgICAgIGNvbnN0cmFpbnQuZGFtcGluZyA9IGNvbnN0cmFpbnQuZGFtcGluZyB8fCAwO1xyXG4gICAgICAgIGNvbnN0cmFpbnQuYW5ndWxhclN0aWZmbmVzcyA9IGNvbnN0cmFpbnQuYW5ndWxhclN0aWZmbmVzcyB8fCAwO1xyXG4gICAgICAgIGNvbnN0cmFpbnQuYW5nbGVBID0gY29uc3RyYWludC5ib2R5QSA/IGNvbnN0cmFpbnQuYm9keUEuYW5nbGUgOiBjb25zdHJhaW50LmFuZ2xlQTtcclxuICAgICAgICBjb25zdHJhaW50LmFuZ2xlQiA9IGNvbnN0cmFpbnQuYm9keUIgPyBjb25zdHJhaW50LmJvZHlCLmFuZ2xlIDogY29uc3RyYWludC5hbmdsZUI7XHJcbiAgICAgICAgY29uc3RyYWludC5wbHVnaW4gPSB7fTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyXHJcbiAgICAgICAgdmFyIHJlbmRlciA9IHtcclxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgbGluZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBzdHJva2VTdHlsZTogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICB0eXBlOiAnbGluZScsXHJcbiAgICAgICAgICAgIGFuY2hvcnM6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoY29uc3RyYWludC5sZW5ndGggPT09IDAgJiYgY29uc3RyYWludC5zdGlmZm5lc3MgPiAwLjEpIHtcclxuICAgICAgICAgICAgcmVuZGVyLnR5cGUgPSAncGluJztcclxuICAgICAgICAgICAgcmVuZGVyLmFuY2hvcnMgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnN0cmFpbnQuc3RpZmZuZXNzIDwgMC45KSB7XHJcbiAgICAgICAgICAgIHJlbmRlci50eXBlID0gJ3NwcmluZyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdHJhaW50LnJlbmRlciA9IENvbW1vbi5leHRlbmQocmVuZGVyLCBjb25zdHJhaW50LnJlbmRlcik7XHJcblxyXG4gICAgICAgIHJldHVybiBjb25zdHJhaW50O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBhcmVzIGZvciBzb2x2aW5nIGJ5IGNvbnN0cmFpbnQgd2FybWluZy5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIHByZVNvbHZlQWxsXHJcbiAgICAgKiBAcGFyYW0ge2JvZHlbXX0gYm9kaWVzXHJcbiAgICAgKi9cclxuICAgIENvbnN0cmFpbnQucHJlU29sdmVBbGwgPSBmdW5jdGlvbihib2RpZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXSxcclxuICAgICAgICAgICAgICAgIGltcHVsc2UgPSBib2R5LmNvbnN0cmFpbnRJbXB1bHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvZHkuaXNTdGF0aWMgfHwgKGltcHVsc2UueCA9PT0gMCAmJiBpbXB1bHNlLnkgPT09IDAgJiYgaW1wdWxzZS5hbmdsZSA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBib2R5LnBvc2l0aW9uLnggKz0gaW1wdWxzZS54O1xyXG4gICAgICAgICAgICBib2R5LnBvc2l0aW9uLnkgKz0gaW1wdWxzZS55O1xyXG4gICAgICAgICAgICBib2R5LmFuZ2xlICs9IGltcHVsc2UuYW5nbGU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvbHZlcyBhbGwgY29uc3RyYWludHMgaW4gYSBsaXN0IG9mIGNvbGxpc2lvbnMuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQG1ldGhvZCBzb2x2ZUFsbFxyXG4gICAgICogQHBhcmFtIHtjb25zdHJhaW50W119IGNvbnN0cmFpbnRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZVNjYWxlXHJcbiAgICAgKi9cclxuICAgIENvbnN0cmFpbnQuc29sdmVBbGwgPSBmdW5jdGlvbihjb25zdHJhaW50cywgdGltZVNjYWxlKSB7XHJcbiAgICAgICAgLy8gU29sdmUgZml4ZWQgY29uc3RyYWludHMgZmlyc3QuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJhaW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2ldLFxyXG4gICAgICAgICAgICAgICAgZml4ZWRBID0gIWNvbnN0cmFpbnQuYm9keUEgfHwgKGNvbnN0cmFpbnQuYm9keUEgJiYgY29uc3RyYWludC5ib2R5QS5pc1N0YXRpYyksXHJcbiAgICAgICAgICAgICAgICBmaXhlZEIgPSAhY29uc3RyYWludC5ib2R5QiB8fCAoY29uc3RyYWludC5ib2R5QiAmJiBjb25zdHJhaW50LmJvZHlCLmlzU3RhdGljKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaXhlZEEgfHwgZml4ZWRCKSB7XHJcbiAgICAgICAgICAgICAgICBDb25zdHJhaW50LnNvbHZlKGNvbnN0cmFpbnRzW2ldLCB0aW1lU2NhbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTb2x2ZSBmcmVlIGNvbnN0cmFpbnRzIGxhc3QuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbnN0cmFpbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1tpXTtcclxuICAgICAgICAgICAgZml4ZWRBID0gIWNvbnN0cmFpbnQuYm9keUEgfHwgKGNvbnN0cmFpbnQuYm9keUEgJiYgY29uc3RyYWludC5ib2R5QS5pc1N0YXRpYyk7XHJcbiAgICAgICAgICAgIGZpeGVkQiA9ICFjb25zdHJhaW50LmJvZHlCIHx8IChjb25zdHJhaW50LmJvZHlCICYmIGNvbnN0cmFpbnQuYm9keUIuaXNTdGF0aWMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFmaXhlZEEgJiYgIWZpeGVkQikge1xyXG4gICAgICAgICAgICAgICAgQ29uc3RyYWludC5zb2x2ZShjb25zdHJhaW50c1tpXSwgdGltZVNjYWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTb2x2ZXMgYSBkaXN0YW5jZSBjb25zdHJhaW50IHdpdGggR2F1c3MtU2llZGVsIG1ldGhvZC5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIHNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge2NvbnN0cmFpbnR9IGNvbnN0cmFpbnRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU2NhbGVcclxuICAgICAqL1xyXG4gICAgQ29uc3RyYWludC5zb2x2ZSA9IGZ1bmN0aW9uKGNvbnN0cmFpbnQsIHRpbWVTY2FsZSkge1xyXG4gICAgICAgIHZhciBib2R5QSA9IGNvbnN0cmFpbnQuYm9keUEsXHJcbiAgICAgICAgICAgIGJvZHlCID0gY29uc3RyYWludC5ib2R5QixcclxuICAgICAgICAgICAgcG9pbnRBID0gY29uc3RyYWludC5wb2ludEEsXHJcbiAgICAgICAgICAgIHBvaW50QiA9IGNvbnN0cmFpbnQucG9pbnRCO1xyXG5cclxuICAgICAgICBpZiAoIWJvZHlBICYmICFib2R5QilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgcmVmZXJlbmNlIGFuZ2xlXHJcbiAgICAgICAgaWYgKGJvZHlBICYmICFib2R5QS5pc1N0YXRpYykge1xyXG4gICAgICAgICAgICBWZWN0b3Iucm90YXRlKHBvaW50QSwgYm9keUEuYW5nbGUgLSBjb25zdHJhaW50LmFuZ2xlQSwgcG9pbnRBKTtcclxuICAgICAgICAgICAgY29uc3RyYWludC5hbmdsZUEgPSBib2R5QS5hbmdsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gdXBkYXRlIHJlZmVyZW5jZSBhbmdsZVxyXG4gICAgICAgIGlmIChib2R5QiAmJiAhYm9keUIuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgVmVjdG9yLnJvdGF0ZShwb2ludEIsIGJvZHlCLmFuZ2xlIC0gY29uc3RyYWludC5hbmdsZUIsIHBvaW50Qik7XHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuYW5nbGVCID0gYm9keUIuYW5nbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRBV29ybGQgPSBwb2ludEEsXHJcbiAgICAgICAgICAgIHBvaW50QldvcmxkID0gcG9pbnRCO1xyXG5cclxuICAgICAgICBpZiAoYm9keUEpIHBvaW50QVdvcmxkID0gVmVjdG9yLmFkZChib2R5QS5wb3NpdGlvbiwgcG9pbnRBKTtcclxuICAgICAgICBpZiAoYm9keUIpIHBvaW50QldvcmxkID0gVmVjdG9yLmFkZChib2R5Qi5wb3NpdGlvbiwgcG9pbnRCKTtcclxuXHJcbiAgICAgICAgaWYgKCFwb2ludEFXb3JsZCB8fCAhcG9pbnRCV29ybGQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGRlbHRhID0gVmVjdG9yLnN1Yihwb2ludEFXb3JsZCwgcG9pbnRCV29ybGQpLFxyXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoID0gVmVjdG9yLm1hZ25pdHVkZShkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vIHByZXZlbnQgc2luZ3VsYXJpdHlcclxuICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IENvbnN0cmFpbnQuX21pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoID0gQ29uc3RyYWludC5fbWluTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc29sdmUgZGlzdGFuY2UgY29uc3RyYWludCB3aXRoIEdhdXNzLVNpZWRlbCBtZXRob2RcclxuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IChjdXJyZW50TGVuZ3RoIC0gY29uc3RyYWludC5sZW5ndGgpIC8gY3VycmVudExlbmd0aCxcclxuICAgICAgICAgICAgc3RpZmZuZXNzID0gY29uc3RyYWludC5zdGlmZm5lc3MgPCAxID8gY29uc3RyYWludC5zdGlmZm5lc3MgKiB0aW1lU2NhbGUgOiBjb25zdHJhaW50LnN0aWZmbmVzcyxcclxuICAgICAgICAgICAgZm9yY2UgPSBWZWN0b3IubXVsdChkZWx0YSwgZGlmZmVyZW5jZSAqIHN0aWZmbmVzcyksXHJcbiAgICAgICAgICAgIG1hc3NUb3RhbCA9IChib2R5QSA/IGJvZHlBLmludmVyc2VNYXNzIDogMCkgKyAoYm9keUIgPyBib2R5Qi5pbnZlcnNlTWFzcyA6IDApLFxyXG4gICAgICAgICAgICBpbmVydGlhVG90YWwgPSAoYm9keUEgPyBib2R5QS5pbnZlcnNlSW5lcnRpYSA6IDApICsgKGJvZHlCID8gYm9keUIuaW52ZXJzZUluZXJ0aWEgOiAwKSxcclxuICAgICAgICAgICAgcmVzaXN0YW5jZVRvdGFsID0gbWFzc1RvdGFsICsgaW5lcnRpYVRvdGFsLFxyXG4gICAgICAgICAgICB0b3JxdWUsXHJcbiAgICAgICAgICAgIHNoYXJlLFxyXG4gICAgICAgICAgICBub3JtYWwsXHJcbiAgICAgICAgICAgIG5vcm1hbFZlbG9jaXR5LFxyXG4gICAgICAgICAgICByZWxhdGl2ZVZlbG9jaXR5O1xyXG5cclxuICAgICAgICBpZiAoY29uc3RyYWludC5kYW1waW5nKSB7XHJcbiAgICAgICAgICAgIHZhciB6ZXJvID0gVmVjdG9yLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBub3JtYWwgPSBWZWN0b3IuZGl2KGRlbHRhLCBjdXJyZW50TGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgIHJlbGF0aXZlVmVsb2NpdHkgPSBWZWN0b3Iuc3ViKFxyXG4gICAgICAgICAgICAgICAgYm9keUIgJiYgVmVjdG9yLnN1Yihib2R5Qi5wb3NpdGlvbiwgYm9keUIucG9zaXRpb25QcmV2KSB8fCB6ZXJvLFxyXG4gICAgICAgICAgICAgICAgYm9keUEgJiYgVmVjdG9yLnN1Yihib2R5QS5wb3NpdGlvbiwgYm9keUEucG9zaXRpb25QcmV2KSB8fCB6ZXJvXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBub3JtYWxWZWxvY2l0eSA9IFZlY3Rvci5kb3Qobm9ybWFsLCByZWxhdGl2ZVZlbG9jaXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChib2R5QSAmJiAhYm9keUEuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgc2hhcmUgPSBib2R5QS5pbnZlcnNlTWFzcyAvIG1hc3NUb3RhbDtcclxuXHJcbiAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgYXBwbGllZCBpbXB1bHNlcyBmb3IgcG9zdCBzb2x2aW5nXHJcbiAgICAgICAgICAgIGJvZHlBLmNvbnN0cmFpbnRJbXB1bHNlLnggLT0gZm9yY2UueCAqIHNoYXJlO1xyXG4gICAgICAgICAgICBib2R5QS5jb25zdHJhaW50SW1wdWxzZS55IC09IGZvcmNlLnkgKiBzaGFyZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFwcGx5IGZvcmNlc1xyXG4gICAgICAgICAgICBib2R5QS5wb3NpdGlvbi54IC09IGZvcmNlLnggKiBzaGFyZTtcclxuICAgICAgICAgICAgYm9keUEucG9zaXRpb24ueSAtPSBmb3JjZS55ICogc2hhcmU7XHJcblxyXG4gICAgICAgICAgICAvLyBhcHBseSBkYW1waW5nXHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmRhbXBpbmcpIHtcclxuICAgICAgICAgICAgICAgIGJvZHlBLnBvc2l0aW9uUHJldi54IC09IGNvbnN0cmFpbnQuZGFtcGluZyAqIG5vcm1hbC54ICogbm9ybWFsVmVsb2NpdHkgKiBzaGFyZTtcclxuICAgICAgICAgICAgICAgIGJvZHlBLnBvc2l0aW9uUHJldi55IC09IGNvbnN0cmFpbnQuZGFtcGluZyAqIG5vcm1hbC55ICogbm9ybWFsVmVsb2NpdHkgKiBzaGFyZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYXBwbHkgdG9ycXVlXHJcbiAgICAgICAgICAgIHRvcnF1ZSA9IChWZWN0b3IuY3Jvc3MocG9pbnRBLCBmb3JjZSkgLyByZXNpc3RhbmNlVG90YWwpICogQ29uc3RyYWludC5fdG9ycXVlRGFtcGVuICogYm9keUEuaW52ZXJzZUluZXJ0aWEgKiAoMSAtIGNvbnN0cmFpbnQuYW5ndWxhclN0aWZmbmVzcyk7XHJcbiAgICAgICAgICAgIGJvZHlBLmNvbnN0cmFpbnRJbXB1bHNlLmFuZ2xlIC09IHRvcnF1ZTtcclxuICAgICAgICAgICAgYm9keUEuYW5nbGUgLT0gdG9ycXVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlCICYmICFib2R5Qi5pc1N0YXRpYykge1xyXG4gICAgICAgICAgICBzaGFyZSA9IGJvZHlCLmludmVyc2VNYXNzIC8gbWFzc1RvdGFsO1xyXG5cclxuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBhcHBsaWVkIGltcHVsc2VzIGZvciBwb3N0IHNvbHZpbmdcclxuICAgICAgICAgICAgYm9keUIuY29uc3RyYWludEltcHVsc2UueCArPSBmb3JjZS54ICogc2hhcmU7XHJcbiAgICAgICAgICAgIGJvZHlCLmNvbnN0cmFpbnRJbXB1bHNlLnkgKz0gZm9yY2UueSAqIHNoYXJlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gYXBwbHkgZm9yY2VzXHJcbiAgICAgICAgICAgIGJvZHlCLnBvc2l0aW9uLnggKz0gZm9yY2UueCAqIHNoYXJlO1xyXG4gICAgICAgICAgICBib2R5Qi5wb3NpdGlvbi55ICs9IGZvcmNlLnkgKiBzaGFyZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFwcGx5IGRhbXBpbmdcclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQuZGFtcGluZykge1xyXG4gICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25QcmV2LnggKz0gY29uc3RyYWludC5kYW1waW5nICogbm9ybWFsLnggKiBub3JtYWxWZWxvY2l0eSAqIHNoYXJlO1xyXG4gICAgICAgICAgICAgICAgYm9keUIucG9zaXRpb25QcmV2LnkgKz0gY29uc3RyYWludC5kYW1waW5nICogbm9ybWFsLnkgKiBub3JtYWxWZWxvY2l0eSAqIHNoYXJlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhcHBseSB0b3JxdWVcclxuICAgICAgICAgICAgdG9ycXVlID0gKFZlY3Rvci5jcm9zcyhwb2ludEIsIGZvcmNlKSAvIHJlc2lzdGFuY2VUb3RhbCkgKiBDb25zdHJhaW50Ll90b3JxdWVEYW1wZW4gKiBib2R5Qi5pbnZlcnNlSW5lcnRpYSAqICgxIC0gY29uc3RyYWludC5hbmd1bGFyU3RpZmZuZXNzKTtcclxuICAgICAgICAgICAgYm9keUIuY29uc3RyYWludEltcHVsc2UuYW5nbGUgKz0gdG9ycXVlO1xyXG4gICAgICAgICAgICBib2R5Qi5hbmdsZSArPSB0b3JxdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBib2R5IHVwZGF0ZXMgcmVxdWlyZWQgYWZ0ZXIgc29sdmluZyBjb25zdHJhaW50cy5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIHBvc3RTb2x2ZUFsbFxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICovXHJcbiAgICBDb25zdHJhaW50LnBvc3RTb2x2ZUFsbCA9IGZ1bmN0aW9uKGJvZGllcykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gYm9kaWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgaW1wdWxzZSA9IGJvZHkuY29uc3RyYWludEltcHVsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAoYm9keS5pc1N0YXRpYyB8fCAoaW1wdWxzZS54ID09PSAwICYmIGltcHVsc2UueSA9PT0gMCAmJiBpbXB1bHNlLmFuZ2xlID09PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFNsZWVwaW5nLnNldChib2R5LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgZ2VvbWV0cnkgYW5kIHJlc2V0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYm9keS5wYXJ0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBib2R5LnBhcnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBWZXJ0aWNlcy50cmFuc2xhdGUocGFydC52ZXJ0aWNlcywgaW1wdWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wb3NpdGlvbi54ICs9IGltcHVsc2UueDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0LnBvc2l0aW9uLnkgKz0gaW1wdWxzZS55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbXB1bHNlLmFuZ2xlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVmVydGljZXMucm90YXRlKHBhcnQudmVydGljZXMsIGltcHVsc2UuYW5nbGUsIGJvZHkucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIEF4ZXMucm90YXRlKHBhcnQuYXhlcywgaW1wdWxzZS5hbmdsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvci5yb3RhdGVBYm91dChwYXJ0LnBvc2l0aW9uLCBpbXB1bHNlLmFuZ2xlLCBib2R5LnBvc2l0aW9uLCBwYXJ0LnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgQm91bmRzLnVwZGF0ZShwYXJ0LmJvdW5kcywgcGFydC52ZXJ0aWNlcywgYm9keS52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGRhbXBlbiB0aGUgY2FjaGVkIGltcHVsc2UgZm9yIHdhcm1pbmcgbmV4dCBzdGVwXHJcbiAgICAgICAgICAgIGltcHVsc2UuYW5nbGUgKj0gQ29uc3RyYWludC5fd2FybWluZztcclxuICAgICAgICAgICAgaW1wdWxzZS54ICo9IENvbnN0cmFpbnQuX3dhcm1pbmc7XHJcbiAgICAgICAgICAgIGltcHVsc2UueSAqPSBDb25zdHJhaW50Ll93YXJtaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLypcclxuICAgICpcclxuICAgICogIFByb3BlcnRpZXMgRG9jdW1lbnRhdGlvblxyXG4gICAgKlxyXG4gICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVnZXIgYE51bWJlcmAgdW5pcXVlbHkgaWRlbnRpZnlpbmcgbnVtYmVyIGdlbmVyYXRlZCBpbiBgQ29tcG9zaXRlLmNyZWF0ZWAgYnkgYENvbW1vbi5uZXh0SWRgLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBpZFxyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFN0cmluZ2AgZGVub3RpbmcgdGhlIHR5cGUgb2Ygb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB0eXBlXHJcbiAgICAgKiBAdHlwZSBzdHJpbmdcclxuICAgICAqIEBkZWZhdWx0IFwiY29uc3RyYWludFwiXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYXJiaXRyYXJ5IGBTdHJpbmdgIG5hbWUgdG8gaGVscCB0aGUgdXNlciBpZGVudGlmeSBhbmQgbWFuYWdlIGJvZGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgbGFiZWxcclxuICAgICAqIEB0eXBlIHN0cmluZ1xyXG4gICAgICogQGRlZmF1bHQgXCJDb25zdHJhaW50XCJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYE9iamVjdGAgdGhhdCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgcHJvcGVydGllcyB0byBiZSBjb25zdW1lZCBieSB0aGUgbW9kdWxlIGBNYXR0ZXIuUmVuZGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyXHJcbiAgICAgKiBAdHlwZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBjb25zdHJhaW50IHNob3VsZCBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyLnZpc2libGVcclxuICAgICAqIEB0eXBlIGJvb2xlYW5cclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IGRlZmluZXMgdGhlIGxpbmUgd2lkdGggdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHRoZSBjb25zdHJhaW50IG91dGxpbmUuXHJcbiAgICAgKiBBIHZhbHVlIG9mIGAwYCBtZWFucyBubyBvdXRsaW5lIHdpbGwgYmUgcmVuZGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHJlbmRlci5saW5lV2lkdGhcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBTdHJpbmdgIHRoYXQgZGVmaW5lcyB0aGUgc3Ryb2tlIHN0eWxlIHRvIHVzZSB3aGVuIHJlbmRlcmluZyB0aGUgY29uc3RyYWludCBvdXRsaW5lLlxyXG4gICAgICogSXQgaXMgdGhlIHNhbWUgYXMgd2hlbiB1c2luZyBhIGNhbnZhcywgc28gaXQgYWNjZXB0cyBDU1Mgc3R5bGUgcHJvcGVydHkgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSByZW5kZXIuc3Ryb2tlU3R5bGVcclxuICAgICAqIEB0eXBlIHN0cmluZ1xyXG4gICAgICogQGRlZmF1bHQgYSByYW5kb20gY29sb3VyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFN0cmluZ2AgdGhhdCBkZWZpbmVzIHRoZSBjb25zdHJhaW50IHJlbmRlcmluZyB0eXBlLiBcclxuICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlICdsaW5lJywgJ3BpbicsICdzcHJpbmcnLlxyXG4gICAgICogQW4gYXBwcm9wcmlhdGUgcmVuZGVyIHR5cGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNob3NlbiB1bmxlc3Mgb25lIGlzIGdpdmVuIGluIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHJlbmRlci50eXBlXHJcbiAgICAgKiBAdHlwZSBzdHJpbmdcclxuICAgICAqIEBkZWZhdWx0ICdsaW5lJ1xyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBCb29sZWFuYCB0aGF0IGRlZmluZXMgaWYgdGhlIGNvbnN0cmFpbnQncyBhbmNob3IgcG9pbnRzIHNob3VsZCBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcmVuZGVyLmFuY2hvcnNcclxuICAgICAqIEB0eXBlIGJvb2xlYW5cclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZpcnN0IHBvc3NpYmxlIGBCb2R5YCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyBhdHRhY2hlZCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgYm9keUFcclxuICAgICAqIEB0eXBlIGJvZHlcclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlY29uZCBwb3NzaWJsZSBgQm9keWAgdGhhdCB0aGlzIGNvbnN0cmFpbnQgaXMgYXR0YWNoZWQgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGJvZHlCXHJcbiAgICAgKiBAdHlwZSBib2R5XHJcbiAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYFZlY3RvcmAgdGhhdCBzcGVjaWZpZXMgdGhlIG9mZnNldCBvZiB0aGUgY29uc3RyYWludCBmcm9tIGNlbnRlciBvZiB0aGUgYGNvbnN0cmFpbnQuYm9keUFgIGlmIGRlZmluZWQsIG90aGVyd2lzZSBhIHdvcmxkLXNwYWNlIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBwb2ludEFcclxuICAgICAqIEB0eXBlIHZlY3RvclxyXG4gICAgICogQGRlZmF1bHQgeyB4OiAwLCB5OiAwIH1cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgVmVjdG9yYCB0aGF0IHNwZWNpZmllcyB0aGUgb2Zmc2V0IG9mIHRoZSBjb25zdHJhaW50IGZyb20gY2VudGVyIG9mIHRoZSBgY29uc3RyYWludC5ib2R5QmAgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIGEgd29ybGQtc3BhY2UgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHBvaW50QlxyXG4gICAgICogQHR5cGUgdmVjdG9yXHJcbiAgICAgKiBAZGVmYXVsdCB7IHg6IDAsIHk6IDAgfVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSBzdGlmZm5lc3Mgb2YgdGhlIGNvbnN0cmFpbnQsIGkuZS4gdGhlIHJhdGUgYXQgd2hpY2ggaXQgcmV0dXJucyB0byBpdHMgcmVzdGluZyBgY29uc3RyYWludC5sZW5ndGhgLlxyXG4gICAgICogQSB2YWx1ZSBvZiBgMWAgbWVhbnMgdGhlIGNvbnN0cmFpbnQgc2hvdWxkIGJlIHZlcnkgc3RpZmYuXHJcbiAgICAgKiBBIHZhbHVlIG9mIGAwLjJgIG1lYW5zIHRoZSBjb25zdHJhaW50IGFjdHMgbGlrZSBhIHNvZnQgc3ByaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBzdGlmZm5lc3NcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSBkYW1waW5nIG9mIHRoZSBjb25zdHJhaW50LCBcclxuICAgICAqIGkuZS4gdGhlIGFtb3VudCBvZiByZXNpc3RhbmNlIGFwcGxpZWQgdG8gZWFjaCBib2R5IGJhc2VkIG9uIHRoZWlyIHZlbG9jaXRpZXMgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBvc2NpbGxhdGlvbi5cclxuICAgICAqIERhbXBpbmcgd2lsbCBvbmx5IGJlIGFwcGFyZW50IHdoZW4gdGhlIGNvbnN0cmFpbnQgYWxzbyBoYXMgYSB2ZXJ5IGxvdyBgc3RpZmZuZXNzYC5cclxuICAgICAqIEEgdmFsdWUgb2YgYDAuMWAgbWVhbnMgdGhlIGNvbnN0cmFpbnQgd2lsbCBhcHBseSBoZWF2eSBkYW1waW5nLCByZXN1bHRpbmcgaW4gbGl0dGxlIHRvIG5vIG9zY2lsbGF0aW9uLlxyXG4gICAgICogQSB2YWx1ZSBvZiBgMGAgbWVhbnMgdGhlIGNvbnN0cmFpbnQgd2lsbCBhcHBseSBubyBkYW1waW5nLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBkYW1waW5nXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IHNwZWNpZmllcyB0aGUgdGFyZ2V0IHJlc3RpbmcgbGVuZ3RoIG9mIHRoZSBjb25zdHJhaW50LiBcclxuICAgICAqIEl0IGlzIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBpbiBgQ29uc3RyYWludC5jcmVhdGVgIGZyb20gaW5pdGlhbCBwb3NpdGlvbnMgb2YgdGhlIGBjb25zdHJhaW50LmJvZHlBYCBhbmQgYGNvbnN0cmFpbnQuYm9keUJgLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBsZW5ndGhcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBvYmplY3QgcmVzZXJ2ZWQgZm9yIHN0b3JpbmcgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHBsdWdpblxyXG4gICAgICogQHR5cGUge31cclxuICAgICAqL1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Common.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Common.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* WEBPACK VAR INJECTION */(function(global) {/**\r\n* The `Matter.Common` module contains utility functions that are common to all modules.\r\n*\r\n* @class Common\r\n*/\r\n\r\nvar Common = {};\r\n\r\nmodule.exports = Common;\r\n\r\n(function() {\r\n\r\n    Common._nextId = 0;\r\n    Common._seed = 0;\r\n    Common._nowStartTime = +(new Date());\r\n\r\n    /**\r\n     * Extends the object in the first argument using the object in the second argument.\r\n     * @method extend\r\n     * @param {} obj\r\n     * @param {boolean} deep\r\n     * @return {} obj extended\r\n     */\r\n    Common.extend = function(obj, deep) {\r\n        var argsStart,\r\n            args,\r\n            deepClone;\r\n\r\n        if (typeof deep === 'boolean') {\r\n            argsStart = 2;\r\n            deepClone = deep;\r\n        } else {\r\n            argsStart = 1;\r\n            deepClone = true;\r\n        }\r\n\r\n        for (var i = argsStart; i < arguments.length; i++) {\r\n            var source = arguments[i];\r\n\r\n            if (source) {\r\n                for (var prop in source) {\r\n                    if (deepClone && source[prop] && source[prop].constructor === Object) {\r\n                        if (!obj[prop] || obj[prop].constructor === Object) {\r\n                            obj[prop] = obj[prop] || {};\r\n                            Common.extend(obj[prop], deepClone, source[prop]);\r\n                        } else {\r\n                            obj[prop] = source[prop];\r\n                        }\r\n                    } else {\r\n                        obj[prop] = source[prop];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        \r\n        return obj;\r\n    };\r\n\r\n    /**\r\n     * Creates a new clone of the object, if deep is true references will also be cloned.\r\n     * @method clone\r\n     * @param {} obj\r\n     * @param {bool} deep\r\n     * @return {} obj cloned\r\n     */\r\n    Common.clone = function(obj, deep) {\r\n        return Common.extend({}, deep, obj);\r\n    };\r\n\r\n    /**\r\n     * Returns the list of keys for the given object.\r\n     * @method keys\r\n     * @param {} obj\r\n     * @return {string[]} keys\r\n     */\r\n    Common.keys = function(obj) {\r\n        if (Object.keys)\r\n            return Object.keys(obj);\r\n\r\n        // avoid hasOwnProperty for performance\r\n        var keys = [];\r\n        for (var key in obj)\r\n            keys.push(key);\r\n        return keys;\r\n    };\r\n\r\n    /**\r\n     * Returns the list of values for the given object.\r\n     * @method values\r\n     * @param {} obj\r\n     * @return {array} Array of the objects property values\r\n     */\r\n    Common.values = function(obj) {\r\n        var values = [];\r\n        \r\n        if (Object.keys) {\r\n            var keys = Object.keys(obj);\r\n            for (var i = 0; i < keys.length; i++) {\r\n                values.push(obj[keys[i]]);\r\n            }\r\n            return values;\r\n        }\r\n        \r\n        // avoid hasOwnProperty for performance\r\n        for (var key in obj)\r\n            values.push(obj[key]);\r\n        return values;\r\n    };\r\n\r\n    /**\r\n     * Gets a value from `base` relative to the `path` string.\r\n     * @method get\r\n     * @param {} obj The base object\r\n     * @param {string} path The path relative to `base`, e.g. 'Foo.Bar.baz'\r\n     * @param {number} [begin] Path slice begin\r\n     * @param {number} [end] Path slice end\r\n     * @return {} The object at the given path\r\n     */\r\n    Common.get = function(obj, path, begin, end) {\r\n        path = path.split('.').slice(begin, end);\r\n\r\n        for (var i = 0; i < path.length; i += 1) {\r\n            obj = obj[path[i]];\r\n        }\r\n\r\n        return obj;\r\n    };\r\n\r\n    /**\r\n     * Sets a value on `base` relative to the given `path` string.\r\n     * @method set\r\n     * @param {} obj The base object\r\n     * @param {string} path The path relative to `base`, e.g. 'Foo.Bar.baz'\r\n     * @param {} val The value to set\r\n     * @param {number} [begin] Path slice begin\r\n     * @param {number} [end] Path slice end\r\n     * @return {} Pass through `val` for chaining\r\n     */\r\n    Common.set = function(obj, path, val, begin, end) {\r\n        var parts = path.split('.').slice(begin, end);\r\n        Common.get(obj, path, 0, -1)[parts[parts.length - 1]] = val;\r\n        return val;\r\n    };\r\n\r\n    /**\r\n     * Shuffles the given array in-place.\r\n     * The function uses a seeded random generator.\r\n     * @method shuffle\r\n     * @param {array} array\r\n     * @return {array} array shuffled randomly\r\n     */\r\n    Common.shuffle = function(array) {\r\n        for (var i = array.length - 1; i > 0; i--) {\r\n            var j = Math.floor(Common.random() * (i + 1));\r\n            var temp = array[i];\r\n            array[i] = array[j];\r\n            array[j] = temp;\r\n        }\r\n        return array;\r\n    };\r\n\r\n    /**\r\n     * Randomly chooses a value from a list with equal probability.\r\n     * The function uses a seeded random generator.\r\n     * @method choose\r\n     * @param {array} choices\r\n     * @return {object} A random choice object from the array\r\n     */\r\n    Common.choose = function(choices) {\r\n        return choices[Math.floor(Common.random() * choices.length)];\r\n    };\r\n\r\n    /**\r\n     * Returns true if the object is a HTMLElement, otherwise false.\r\n     * @method isElement\r\n     * @param {object} obj\r\n     * @return {boolean} True if the object is a HTMLElement, otherwise false\r\n     */\r\n    Common.isElement = function(obj) {\r\n        if (typeof HTMLElement !== 'undefined') {\r\n            return obj instanceof HTMLElement;\r\n        }\r\n\r\n        return !!(obj && obj.nodeType && obj.nodeName);\r\n    };\r\n\r\n    /**\r\n     * Returns true if the object is an array.\r\n     * @method isArray\r\n     * @param {object} obj\r\n     * @return {boolean} True if the object is an array, otherwise false\r\n     */\r\n    Common.isArray = function(obj) {\r\n        return Object.prototype.toString.call(obj) === '[object Array]';\r\n    };\r\n\r\n    /**\r\n     * Returns true if the object is a function.\r\n     * @method isFunction\r\n     * @param {object} obj\r\n     * @return {boolean} True if the object is a function, otherwise false\r\n     */\r\n    Common.isFunction = function(obj) {\r\n        return typeof obj === \"function\";\r\n    };\r\n\r\n    /**\r\n     * Returns true if the object is a plain object.\r\n     * @method isPlainObject\r\n     * @param {object} obj\r\n     * @return {boolean} True if the object is a plain object, otherwise false\r\n     */\r\n    Common.isPlainObject = function(obj) {\r\n        return typeof obj === 'object' && obj.constructor === Object;\r\n    };\r\n\r\n    /**\r\n     * Returns true if the object is a string.\r\n     * @method isString\r\n     * @param {object} obj\r\n     * @return {boolean} True if the object is a string, otherwise false\r\n     */\r\n    Common.isString = function(obj) {\r\n        return toString.call(obj) === '[object String]';\r\n    };\r\n    \r\n    /**\r\n     * Returns the given value clamped between a minimum and maximum value.\r\n     * @method clamp\r\n     * @param {number} value\r\n     * @param {number} min\r\n     * @param {number} max\r\n     * @return {number} The value clamped between min and max inclusive\r\n     */\r\n    Common.clamp = function(value, min, max) {\r\n        if (value < min)\r\n            return min;\r\n        if (value > max)\r\n            return max;\r\n        return value;\r\n    };\r\n    \r\n    /**\r\n     * Returns the sign of the given value.\r\n     * @method sign\r\n     * @param {number} value\r\n     * @return {number} -1 if negative, +1 if 0 or positive\r\n     */\r\n    Common.sign = function(value) {\r\n        return value < 0 ? -1 : 1;\r\n    };\r\n    \r\n    /**\r\n     * Returns the current timestamp since the time origin (e.g. from page load).\r\n     * The result will be high-resolution including decimal places if available.\r\n     * @method now\r\n     * @return {number} the current timestamp\r\n     */\r\n    Common.now = function() {\r\n        if (window.performance) {\r\n            if (window.performance.now) {\r\n                return window.performance.now();\r\n            } else if (window.performance.webkitNow) {\r\n                return window.performance.webkitNow();\r\n            }\r\n        }\r\n\r\n        return (new Date()) - Common._nowStartTime;\r\n    };\r\n    \r\n    /**\r\n     * Returns a random value between a minimum and a maximum value inclusive.\r\n     * The function uses a seeded random generator.\r\n     * @method random\r\n     * @param {number} min\r\n     * @param {number} max\r\n     * @return {number} A random number between min and max inclusive\r\n     */\r\n    Common.random = function(min, max) {\r\n        min = (typeof min !== \"undefined\") ? min : 0;\r\n        max = (typeof max !== \"undefined\") ? max : 1;\r\n        return min + _seededRandom() * (max - min);\r\n    };\r\n\r\n    var _seededRandom = function() {\r\n        // https://en.wikipedia.org/wiki/Linear_congruential_generator\r\n        Common._seed = (Common._seed * 9301 + 49297) % 233280;\r\n        return Common._seed / 233280;\r\n    };\r\n\r\n    /**\r\n     * Converts a CSS hex colour string into an integer.\r\n     * @method colorToNumber\r\n     * @param {string} colorString\r\n     * @return {number} An integer representing the CSS hex string\r\n     */\r\n    Common.colorToNumber = function(colorString) {\r\n        colorString = colorString.replace('#','');\r\n\r\n        if (colorString.length == 3) {\r\n            colorString = colorString.charAt(0) + colorString.charAt(0)\r\n                        + colorString.charAt(1) + colorString.charAt(1)\r\n                        + colorString.charAt(2) + colorString.charAt(2);\r\n        }\r\n\r\n        return parseInt(colorString, 16);\r\n    };\r\n\r\n    /**\r\n     * The console logging level to use, where each level includes all levels above and excludes the levels below.\r\n     * The default level is 'debug' which shows all console messages.  \r\n     *\r\n     * Possible level values are:\r\n     * - 0 = None\r\n     * - 1 = Debug\r\n     * - 2 = Info\r\n     * - 3 = Warn\r\n     * - 4 = Error\r\n     * @property Common.logLevel\r\n     * @type {Number}\r\n     * @default 1\r\n     */\r\n    Common.logLevel = 1;\r\n\r\n    /**\r\n     * Shows a `console.log` message only if the current `Common.logLevel` allows it.\r\n     * The message will be prefixed with 'matter-js' to make it easily identifiable.\r\n     * @method log\r\n     * @param ...objs {} The objects to log.\r\n     */\r\n    Common.log = function() {\r\n        if (console && Common.logLevel > 0 && Common.logLevel <= 3) {\r\n            console.log.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Shows a `console.info` message only if the current `Common.logLevel` allows it.\r\n     * The message will be prefixed with 'matter-js' to make it easily identifiable.\r\n     * @method info\r\n     * @param ...objs {} The objects to log.\r\n     */\r\n    Common.info = function() {\r\n        if (console && Common.logLevel > 0 && Common.logLevel <= 2) {\r\n            console.info.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Shows a `console.warn` message only if the current `Common.logLevel` allows it.\r\n     * The message will be prefixed with 'matter-js' to make it easily identifiable.\r\n     * @method warn\r\n     * @param ...objs {} The objects to log.\r\n     */\r\n    Common.warn = function() {\r\n        if (console && Common.logLevel > 0 && Common.logLevel <= 3) {\r\n            console.warn.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Returns the next unique sequential ID.\r\n     * @method nextId\r\n     * @return {Number} Unique sequential ID\r\n     */\r\n    Common.nextId = function() {\r\n        return Common._nextId++;\r\n    };\r\n\r\n    /**\r\n     * A cross browser compatible indexOf implementation.\r\n     * @method indexOf\r\n     * @param {array} haystack\r\n     * @param {object} needle\r\n     * @return {number} The position of needle in haystack, otherwise -1.\r\n     */\r\n    Common.indexOf = function(haystack, needle) {\r\n        if (haystack.indexOf)\r\n            return haystack.indexOf(needle);\r\n\r\n        for (var i = 0; i < haystack.length; i++) {\r\n            if (haystack[i] === needle)\r\n                return i;\r\n        }\r\n\r\n        return -1;\r\n    };\r\n\r\n    /**\r\n     * A cross browser compatible array map implementation.\r\n     * @method map\r\n     * @param {array} list\r\n     * @param {function} func\r\n     * @return {array} Values from list transformed by func.\r\n     */\r\n    Common.map = function(list, func) {\r\n        if (list.map) {\r\n            return list.map(func);\r\n        }\r\n\r\n        var mapped = [];\r\n\r\n        for (var i = 0; i < list.length; i += 1) {\r\n            mapped.push(func(list[i]));\r\n        }\r\n\r\n        return mapped;\r\n    };\r\n\r\n    /**\r\n     * Takes a directed graph and returns the partially ordered set of vertices in topological order.\r\n     * Circular dependencies are allowed.\r\n     * @method topologicalSort\r\n     * @param {object} graph\r\n     * @return {array} Partially ordered set of vertices in topological order.\r\n     */\r\n    Common.topologicalSort = function(graph) {\r\n        // https://github.com/mgechev/javascript-algorithms\r\n        // Copyright (c) Minko Gechev (MIT license)\r\n        // Modifications: tidy formatting and naming\r\n        var result = [],\r\n            visited = [],\r\n            temp = [];\r\n\r\n        for (var node in graph) {\r\n            if (!visited[node] && !temp[node]) {\r\n                Common._topologicalSort(node, visited, temp, graph, result);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n    Common._topologicalSort = function(node, visited, temp, graph, result) {\r\n        var neighbors = graph[node] || [];\r\n        temp[node] = true;\r\n\r\n        for (var i = 0; i < neighbors.length; i += 1) {\r\n            var neighbor = neighbors[i];\r\n\r\n            if (temp[neighbor]) {\r\n                // skip circular dependencies\r\n                continue;\r\n            }\r\n\r\n            if (!visited[neighbor]) {\r\n                Common._topologicalSort(neighbor, visited, temp, graph, result);\r\n            }\r\n        }\r\n\r\n        temp[node] = false;\r\n        visited[node] = true;\r\n\r\n        result.push(node);\r\n    };\r\n\r\n    /**\r\n     * Takes _n_ functions as arguments and returns a new function that calls them in order.\r\n     * The arguments applied when calling the new function will also be applied to every function passed.\r\n     * The value of `this` refers to the last value returned in the chain that was not `undefined`.\r\n     * Therefore if a passed function does not return a value, the previously returned value is maintained.\r\n     * After all passed functions have been called the new function returns the last returned value (if any).\r\n     * If any of the passed functions are a chain, then the chain will be flattened.\r\n     * @method chain\r\n     * @param ...funcs {function} The functions to chain.\r\n     * @return {function} A new function that calls the passed functions in order.\r\n     */\r\n    Common.chain = function() {\r\n        var funcs = [];\r\n\r\n        for (var i = 0; i < arguments.length; i += 1) {\r\n            var func = arguments[i];\r\n\r\n            if (func._chained) {\r\n                // flatten already chained functions\r\n                funcs.push.apply(funcs, func._chained);\r\n            } else {\r\n                funcs.push(func);\r\n            }\r\n        }\r\n\r\n        var chain = function() {\r\n            // https://github.com/GoogleChrome/devtools-docs/issues/53#issuecomment-51941358\r\n            var lastResult,\r\n                args = new Array(arguments.length);\r\n\r\n            for (var i = 0, l = arguments.length; i < l; i++) {\r\n                args[i] = arguments[i];\r\n            }\r\n\r\n            for (i = 0; i < funcs.length; i += 1) {\r\n                var result = funcs[i].apply(lastResult, args);\r\n\r\n                if (typeof result !== 'undefined') {\r\n                    lastResult = result;\r\n                }\r\n            }\r\n\r\n            return lastResult;\r\n        };\r\n\r\n        chain._chained = funcs;\r\n\r\n        return chain;\r\n    };\r\n\r\n    /**\r\n     * Chains a function to excute before the original function on the given `path` relative to `base`.\r\n     * See also docs for `Common.chain`.\r\n     * @method chainPathBefore\r\n     * @param {} base The base object\r\n     * @param {string} path The path relative to `base`\r\n     * @param {function} func The function to chain before the original\r\n     * @return {function} The chained function that replaced the original\r\n     */\r\n    Common.chainPathBefore = function(base, path, func) {\r\n        return Common.set(base, path, Common.chain(\r\n            func,\r\n            Common.get(base, path)\r\n        ));\r\n    };\r\n\r\n    /**\r\n     * Chains a function to excute after the original function on the given `path` relative to `base`.\r\n     * See also docs for `Common.chain`.\r\n     * @method chainPathAfter\r\n     * @param {} base The base object\r\n     * @param {string} path The path relative to `base`\r\n     * @param {function} func The function to chain after the original\r\n     * @return {function} The chained function that replaced the original\r\n     */\r\n    Common.chainPathAfter = function(base, path, func) {\r\n        return Common.set(base, path, Common.chain(\r\n            Common.get(base, path),\r\n            func\r\n        ));\r\n    };\r\n\r\n    /**\r\n     * Used to require external libraries outside of the bundle.\r\n     * It first looks for the `globalName` on the environment's global namespace.\r\n     * If the global is not found, it will fall back to using the standard `require` using the `moduleName`.\r\n     * @private\r\n     * @method _requireGlobal\r\n     * @param {string} globalName The global module name\r\n     * @param {string} moduleName The fallback CommonJS module name\r\n     * @return {} The loaded module\r\n     */\r\n    Common._requireGlobal = function(globalName, moduleName) {\r\n        var obj = (typeof window !== 'undefined' ? window[globalName] : typeof global !== 'undefined' ? global[globalName] : null);\r\n\r\n        //  Breaks webpack :(\r\n        // return obj || require(moduleName);\r\n\r\n        return obj;\r\n    };\r\n})();\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9Db21tb24uanM/NzQ5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLHNCQUFzQjtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGVBQWUsS0FBSztBQUNwQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQjtBQUNoQixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixTQUFTO0FBQ2pDLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsc0JBQXNCO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELE9BQU87QUFDeEQ7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9Db21tb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5Db21tb25gIG1vZHVsZSBjb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIG1vZHVsZXMuXHJcbipcclxuKiBAY2xhc3MgQ29tbW9uXHJcbiovXHJcblxyXG52YXIgQ29tbW9uID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbW1vbjtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICBDb21tb24uX25leHRJZCA9IDA7XHJcbiAgICBDb21tb24uX3NlZWQgPSAwO1xyXG4gICAgQ29tbW9uLl9ub3dTdGFydFRpbWUgPSArKG5ldyBEYXRlKCkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kcyB0aGUgb2JqZWN0IGluIHRoZSBmaXJzdCBhcmd1bWVudCB1c2luZyB0aGUgb2JqZWN0IGluIHRoZSBzZWNvbmQgYXJndW1lbnQuXHJcbiAgICAgKiBAbWV0aG9kIGV4dGVuZFxyXG4gICAgICogQHBhcmFtIHt9IG9ialxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZWVwXHJcbiAgICAgKiBAcmV0dXJuIHt9IG9iaiBleHRlbmRlZFxyXG4gICAgICovXHJcbiAgICBDb21tb24uZXh0ZW5kID0gZnVuY3Rpb24ob2JqLCBkZWVwKSB7XHJcbiAgICAgICAgdmFyIGFyZ3NTdGFydCxcclxuICAgICAgICAgICAgYXJncyxcclxuICAgICAgICAgICAgZGVlcENsb25lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGRlZXAgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBhcmdzU3RhcnQgPSAyO1xyXG4gICAgICAgICAgICBkZWVwQ2xvbmUgPSBkZWVwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFyZ3NTdGFydCA9IDE7XHJcbiAgICAgICAgICAgIGRlZXBDbG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gYXJnc1N0YXJ0OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWVwQ2xvbmUgJiYgc291cmNlW3Byb3BdICYmIHNvdXJjZVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2JqW3Byb3BdIHx8IG9ialtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbcHJvcF0gPSBvYmpbcHJvcF0gfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb24uZXh0ZW5kKG9ialtwcm9wXSwgZGVlcENsb25lLCBzb3VyY2VbcHJvcF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgY2xvbmUgb2YgdGhlIG9iamVjdCwgaWYgZGVlcCBpcyB0cnVlIHJlZmVyZW5jZXMgd2lsbCBhbHNvIGJlIGNsb25lZC5cclxuICAgICAqIEBtZXRob2QgY2xvbmVcclxuICAgICAqIEBwYXJhbSB7fSBvYmpcclxuICAgICAqIEBwYXJhbSB7Ym9vbH0gZGVlcFxyXG4gICAgICogQHJldHVybiB7fSBvYmogY2xvbmVkXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5jbG9uZSA9IGZ1bmN0aW9uKG9iaiwgZGVlcCkge1xyXG4gICAgICAgIHJldHVybiBDb21tb24uZXh0ZW5kKHt9LCBkZWVwLCBvYmopO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2Yga2V5cyBmb3IgdGhlIGdpdmVuIG9iamVjdC5cclxuICAgICAqIEBtZXRob2Qga2V5c1xyXG4gICAgICogQHBhcmFtIHt9IG9ialxyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IGtleXNcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmtleXMgPSBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMpXHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xyXG5cclxuICAgICAgICAvLyBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBmb3IgcGVyZm9ybWFuY2VcclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopXHJcbiAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LlxyXG4gICAgICogQG1ldGhvZCB2YWx1ZXNcclxuICAgICAqIEBwYXJhbSB7fSBvYmpcclxuICAgICAqIEByZXR1cm4ge2FycmF5fSBBcnJheSBvZiB0aGUgb2JqZWN0cyBwcm9wZXJ0eSB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcclxuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG9ialtrZXlzW2ldXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYXZvaWQgaGFzT3duUHJvcGVydHkgZm9yIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iailcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2gob2JqW2tleV0pO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGZyb20gYGJhc2VgIHJlbGF0aXZlIHRvIHRoZSBgcGF0aGAgc3RyaW5nLlxyXG4gICAgICogQG1ldGhvZCBnZXRcclxuICAgICAqIEBwYXJhbSB7fSBvYmogVGhlIGJhc2Ugb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCByZWxhdGl2ZSB0byBgYmFzZWAsIGUuZy4gJ0Zvby5CYXIuYmF6J1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtiZWdpbl0gUGF0aCBzbGljZSBiZWdpblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmRdIFBhdGggc2xpY2UgZW5kXHJcbiAgICAgKiBAcmV0dXJuIHt9IFRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIHBhdGhcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmdldCA9IGZ1bmN0aW9uKG9iaiwgcGF0aCwgYmVnaW4sIGVuZCkge1xyXG4gICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcuJykuc2xpY2UoYmVnaW4sIGVuZCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpbcGF0aFtpXV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSB2YWx1ZSBvbiBgYmFzZWAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIGBwYXRoYCBzdHJpbmcuXHJcbiAgICAgKiBAbWV0aG9kIHNldFxyXG4gICAgICogQHBhcmFtIHt9IG9iaiBUaGUgYmFzZSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHJlbGF0aXZlIHRvIGBiYXNlYCwgZS5nLiAnRm9vLkJhci5iYXonXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsIFRoZSB2YWx1ZSB0byBzZXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmVnaW5dIFBhdGggc2xpY2UgYmVnaW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXSBQYXRoIHNsaWNlIGVuZFxyXG4gICAgICogQHJldHVybiB7fSBQYXNzIHRocm91Z2ggYHZhbGAgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5zZXQgPSBmdW5jdGlvbihvYmosIHBhdGgsIHZhbCwgYmVnaW4sIGVuZCkge1xyXG4gICAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKS5zbGljZShiZWdpbiwgZW5kKTtcclxuICAgICAgICBDb21tb24uZ2V0KG9iaiwgcGF0aCwgMCwgLTEpW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNodWZmbGVzIHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZS5cclxuICAgICAqIFRoZSBmdW5jdGlvbiB1c2VzIGEgc2VlZGVkIHJhbmRvbSBnZW5lcmF0b3IuXHJcbiAgICAgKiBAbWV0aG9kIHNodWZmbGVcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFycmF5XHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gYXJyYXkgc2h1ZmZsZWQgcmFuZG9tbHlcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLnNodWZmbGUgPSBmdW5jdGlvbihhcnJheSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBqID0gTWF0aC5mbG9vcihDb21tb24ucmFuZG9tKCkgKiAoaSArIDEpKTtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgYXJyYXlbaV0gPSBhcnJheVtqXTtcclxuICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmFuZG9tbHkgY2hvb3NlcyBhIHZhbHVlIGZyb20gYSBsaXN0IHdpdGggZXF1YWwgcHJvYmFiaWxpdHkuXHJcbiAgICAgKiBUaGUgZnVuY3Rpb24gdXNlcyBhIHNlZWRlZCByYW5kb20gZ2VuZXJhdG9yLlxyXG4gICAgICogQG1ldGhvZCBjaG9vc2VcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGNob2ljZXNcclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gQSByYW5kb20gY2hvaWNlIG9iamVjdCBmcm9tIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBDb21tb24uY2hvb3NlID0gZnVuY3Rpb24oY2hvaWNlcykge1xyXG4gICAgICAgIHJldHVybiBjaG9pY2VzW01hdGguZmxvb3IoQ29tbW9uLnJhbmRvbSgpICogY2hvaWNlcy5sZW5ndGgpXTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIEhUTUxFbGVtZW50LCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKiBAbWV0aG9kIGlzRWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgSFRNTEVsZW1lbnQsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICovXHJcbiAgICBDb21tb24uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgJiYgb2JqLm5vZGVOYW1lKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheS5cclxuICAgICAqIEBtZXRob2QgaXNBcnJheVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5LCBvdGhlcndpc2UgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmlzQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBmdW5jdGlvbi5cclxuICAgICAqIEBtZXRob2QgaXNGdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICovXHJcbiAgICBDb21tb24uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBwbGFpbiBvYmplY3QuXHJcbiAgICAgKiBAbWV0aG9kIGlzUGxhaW5PYmplY3RcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHBsYWluIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5pc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgc3RyaW5nLlxyXG4gICAgICogQG1ldGhvZCBpc1N0cmluZ1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgc3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmlzU3RyaW5nID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGdpdmVuIHZhbHVlIGNsYW1wZWQgYmV0d2VlbiBhIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUuXHJcbiAgICAgKiBAbWV0aG9kIGNsYW1wXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVlIGNsYW1wZWQgYmV0d2VlbiBtaW4gYW5kIG1heCBpbmNsdXNpdmVcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmNsYW1wID0gZnVuY3Rpb24odmFsdWUsIG1pbiwgbWF4KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgbWluKVxyXG4gICAgICAgICAgICByZXR1cm4gbWluO1xyXG4gICAgICAgIGlmICh2YWx1ZSA+IG1heClcclxuICAgICAgICAgICAgcmV0dXJuIG1heDtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGdpdmVuIHZhbHVlLlxyXG4gICAgICogQG1ldGhvZCBzaWduXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLTEgaWYgbmVnYXRpdmUsICsxIGlmIDAgb3IgcG9zaXRpdmVcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLnNpZ24gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyAtMSA6IDE7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZXN0YW1wIHNpbmNlIHRoZSB0aW1lIG9yaWdpbiAoZS5nLiBmcm9tIHBhZ2UgbG9hZCkuXHJcbiAgICAgKiBUaGUgcmVzdWx0IHdpbGwgYmUgaGlnaC1yZXNvbHV0aW9uIGluY2x1ZGluZyBkZWNpbWFsIHBsYWNlcyBpZiBhdmFpbGFibGUuXHJcbiAgICAgKiBAbWV0aG9kIG5vd1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLm5vdyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cucGVyZm9ybWFuY2UpIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5wZXJmb3JtYW5jZS5ub3cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LnBlcmZvcm1hbmNlLndlYmtpdE5vdykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS53ZWJraXROb3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZSgpKSAtIENvbW1vbi5fbm93U3RhcnRUaW1lO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gYSBtaW5pbXVtIGFuZCBhIG1heGltdW0gdmFsdWUgaW5jbHVzaXZlLlxyXG4gICAgICogVGhlIGZ1bmN0aW9uIHVzZXMgYSBzZWVkZWQgcmFuZG9tIGdlbmVyYXRvci5cclxuICAgICAqIEBtZXRob2QgcmFuZG9tXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IGluY2x1c2l2ZVxyXG4gICAgICovXHJcbiAgICBDb21tb24ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgICAgICBtaW4gPSAodHlwZW9mIG1pbiAhPT0gXCJ1bmRlZmluZWRcIikgPyBtaW4gOiAwO1xyXG4gICAgICAgIG1heCA9ICh0eXBlb2YgbWF4ICE9PSBcInVuZGVmaW5lZFwiKSA/IG1heCA6IDE7XHJcbiAgICAgICAgcmV0dXJuIG1pbiArIF9zZWVkZWRSYW5kb20oKSAqIChtYXggLSBtaW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX3NlZWRlZFJhbmRvbSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpbmVhcl9jb25ncnVlbnRpYWxfZ2VuZXJhdG9yXHJcbiAgICAgICAgQ29tbW9uLl9zZWVkID0gKENvbW1vbi5fc2VlZCAqIDkzMDEgKyA0OTI5NykgJSAyMzMyODA7XHJcbiAgICAgICAgcmV0dXJuIENvbW1vbi5fc2VlZCAvIDIzMzI4MDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBhIENTUyBoZXggY29sb3VyIHN0cmluZyBpbnRvIGFuIGludGVnZXIuXHJcbiAgICAgKiBAbWV0aG9kIGNvbG9yVG9OdW1iZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclN0cmluZ1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgQ1NTIGhleCBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLmNvbG9yVG9OdW1iZXIgPSBmdW5jdGlvbihjb2xvclN0cmluZykge1xyXG4gICAgICAgIGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcucmVwbGFjZSgnIycsJycpO1xyXG5cclxuICAgICAgICBpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgY29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5jaGFyQXQoMCkgKyBjb2xvclN0cmluZy5jaGFyQXQoMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBjb2xvclN0cmluZy5jaGFyQXQoMSkgKyBjb2xvclN0cmluZy5jaGFyQXQoMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBjb2xvclN0cmluZy5jaGFyQXQoMikgKyBjb2xvclN0cmluZy5jaGFyQXQoMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29uc29sZSBsb2dnaW5nIGxldmVsIHRvIHVzZSwgd2hlcmUgZWFjaCBsZXZlbCBpbmNsdWRlcyBhbGwgbGV2ZWxzIGFib3ZlIGFuZCBleGNsdWRlcyB0aGUgbGV2ZWxzIGJlbG93LlxyXG4gICAgICogVGhlIGRlZmF1bHQgbGV2ZWwgaXMgJ2RlYnVnJyB3aGljaCBzaG93cyBhbGwgY29uc29sZSBtZXNzYWdlcy4gIFxyXG4gICAgICpcclxuICAgICAqIFBvc3NpYmxlIGxldmVsIHZhbHVlcyBhcmU6XHJcbiAgICAgKiAtIDAgPSBOb25lXHJcbiAgICAgKiAtIDEgPSBEZWJ1Z1xyXG4gICAgICogLSAyID0gSW5mb1xyXG4gICAgICogLSAzID0gV2FyblxyXG4gICAgICogLSA0ID0gRXJyb3JcclxuICAgICAqIEBwcm9wZXJ0eSBDb21tb24ubG9nTGV2ZWxcclxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5sb2dMZXZlbCA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyBhIGBjb25zb2xlLmxvZ2AgbWVzc2FnZSBvbmx5IGlmIHRoZSBjdXJyZW50IGBDb21tb24ubG9nTGV2ZWxgIGFsbG93cyBpdC5cclxuICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnbWF0dGVyLWpzJyB0byBtYWtlIGl0IGVhc2lseSBpZGVudGlmaWFibGUuXHJcbiAgICAgKiBAbWV0aG9kIGxvZ1xyXG4gICAgICogQHBhcmFtIC4uLm9ianMge30gVGhlIG9iamVjdHMgdG8gbG9nLlxyXG4gICAgICovXHJcbiAgICBDb21tb24ubG9nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKGNvbnNvbGUgJiYgQ29tbW9uLmxvZ0xldmVsID4gMCAmJiBDb21tb24ubG9nTGV2ZWwgPD0gMykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBbJ21hdHRlci1qczonXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyBhIGBjb25zb2xlLmluZm9gIG1lc3NhZ2Ugb25seSBpZiB0aGUgY3VycmVudCBgQ29tbW9uLmxvZ0xldmVsYCBhbGxvd3MgaXQuXHJcbiAgICAgKiBUaGUgbWVzc2FnZSB3aWxsIGJlIHByZWZpeGVkIHdpdGggJ21hdHRlci1qcycgdG8gbWFrZSBpdCBlYXNpbHkgaWRlbnRpZmlhYmxlLlxyXG4gICAgICogQG1ldGhvZCBpbmZvXHJcbiAgICAgKiBAcGFyYW0gLi4ub2JqcyB7fSBUaGUgb2JqZWN0cyB0byBsb2cuXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5pbmZvID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKGNvbnNvbGUgJiYgQ29tbW9uLmxvZ0xldmVsID4gMCAmJiBDb21tb24ubG9nTGV2ZWwgPD0gMikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8uYXBwbHkoY29uc29sZSwgWydtYXR0ZXItanM6J10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgYSBgY29uc29sZS53YXJuYCBtZXNzYWdlIG9ubHkgaWYgdGhlIGN1cnJlbnQgYENvbW1vbi5sb2dMZXZlbGAgYWxsb3dzIGl0LlxyXG4gICAgICogVGhlIG1lc3NhZ2Ugd2lsbCBiZSBwcmVmaXhlZCB3aXRoICdtYXR0ZXItanMnIHRvIG1ha2UgaXQgZWFzaWx5IGlkZW50aWZpYWJsZS5cclxuICAgICAqIEBtZXRob2Qgd2FyblxyXG4gICAgICogQHBhcmFtIC4uLm9ianMge30gVGhlIG9iamVjdHMgdG8gbG9nLlxyXG4gICAgICovXHJcbiAgICBDb21tb24ud2FybiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChjb25zb2xlICYmIENvbW1vbi5sb2dMZXZlbCA+IDAgJiYgQ29tbW9uLmxvZ0xldmVsIDw9IDMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIFsnbWF0dGVyLWpzOiddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5leHQgdW5pcXVlIHNlcXVlbnRpYWwgSUQuXHJcbiAgICAgKiBAbWV0aG9kIG5leHRJZFxyXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBVbmlxdWUgc2VxdWVudGlhbCBJRFxyXG4gICAgICovXHJcbiAgICBDb21tb24ubmV4dElkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIENvbW1vbi5fbmV4dElkKys7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBjcm9zcyBicm93c2VyIGNvbXBhdGlibGUgaW5kZXhPZiBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAqIEBtZXRob2QgaW5kZXhPZlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gaGF5c3RhY2tcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZWVkbGVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBvc2l0aW9uIG9mIG5lZWRsZSBpbiBoYXlzdGFjaywgb3RoZXJ3aXNlIC0xLlxyXG4gICAgICovXHJcbiAgICBDb21tb24uaW5kZXhPZiA9IGZ1bmN0aW9uKGhheXN0YWNrLCBuZWVkbGUpIHtcclxuICAgICAgICBpZiAoaGF5c3RhY2suaW5kZXhPZilcclxuICAgICAgICAgICAgcmV0dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGF5c3RhY2tbaV0gPT09IG5lZWRsZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgY3Jvc3MgYnJvd3NlciBjb21wYXRpYmxlIGFycmF5IG1hcCBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAqIEBtZXRob2QgbWFwXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBsaXN0XHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gVmFsdWVzIGZyb20gbGlzdCB0cmFuc2Zvcm1lZCBieSBmdW5jLlxyXG4gICAgICovXHJcbiAgICBDb21tb24ubWFwID0gZnVuY3Rpb24obGlzdCwgZnVuYykge1xyXG4gICAgICAgIGlmIChsaXN0Lm1hcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdC5tYXAoZnVuYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWFwcGVkID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICBtYXBwZWQucHVzaChmdW5jKGxpc3RbaV0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXBwZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBkaXJlY3RlZCBncmFwaCBhbmQgcmV0dXJucyB0aGUgcGFydGlhbGx5IG9yZGVyZWQgc2V0IG9mIHZlcnRpY2VzIGluIHRvcG9sb2dpY2FsIG9yZGVyLlxyXG4gICAgICogQ2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFyZSBhbGxvd2VkLlxyXG4gICAgICogQG1ldGhvZCB0b3BvbG9naWNhbFNvcnRcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IFBhcnRpYWxseSBvcmRlcmVkIHNldCBvZiB2ZXJ0aWNlcyBpbiB0b3BvbG9naWNhbCBvcmRlci5cclxuICAgICAqL1xyXG4gICAgQ29tbW9uLnRvcG9sb2dpY2FsU29ydCA9IGZ1bmN0aW9uKGdyYXBoKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21nZWNoZXYvamF2YXNjcmlwdC1hbGdvcml0aG1zXHJcbiAgICAgICAgLy8gQ29weXJpZ2h0IChjKSBNaW5rbyBHZWNoZXYgKE1JVCBsaWNlbnNlKVxyXG4gICAgICAgIC8vIE1vZGlmaWNhdGlvbnM6IHRpZHkgZm9ybWF0dGluZyBhbmQgbmFtaW5nXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdLFxyXG4gICAgICAgICAgICB2aXNpdGVkID0gW10sXHJcbiAgICAgICAgICAgIHRlbXAgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbm9kZSBpbiBncmFwaCkge1xyXG4gICAgICAgICAgICBpZiAoIXZpc2l0ZWRbbm9kZV0gJiYgIXRlbXBbbm9kZV0pIHtcclxuICAgICAgICAgICAgICAgIENvbW1vbi5fdG9wb2xvZ2ljYWxTb3J0KG5vZGUsIHZpc2l0ZWQsIHRlbXAsIGdyYXBoLCByZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBDb21tb24uX3RvcG9sb2dpY2FsU29ydCA9IGZ1bmN0aW9uKG5vZGUsIHZpc2l0ZWQsIHRlbXAsIGdyYXBoLCByZXN1bHQpIHtcclxuICAgICAgICB2YXIgbmVpZ2hib3JzID0gZ3JhcGhbbm9kZV0gfHwgW107XHJcbiAgICAgICAgdGVtcFtub2RlXSA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVpZ2hib3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIHZhciBuZWlnaGJvciA9IG5laWdoYm9yc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0ZW1wW25laWdoYm9yXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBjaXJjdWxhciBkZXBlbmRlbmNpZXNcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZpc2l0ZWRbbmVpZ2hib3JdKSB7XHJcbiAgICAgICAgICAgICAgICBDb21tb24uX3RvcG9sb2dpY2FsU29ydChuZWlnaGJvciwgdmlzaXRlZCwgdGVtcCwgZ3JhcGgsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRlbXBbbm9kZV0gPSBmYWxzZTtcclxuICAgICAgICB2aXNpdGVkW25vZGVdID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgX25fIGZ1bmN0aW9ucyBhcyBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGVtIGluIG9yZGVyLlxyXG4gICAgICogVGhlIGFyZ3VtZW50cyBhcHBsaWVkIHdoZW4gY2FsbGluZyB0aGUgbmV3IGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBhcHBsaWVkIHRvIGV2ZXJ5IGZ1bmN0aW9uIHBhc3NlZC5cclxuICAgICAqIFRoZSB2YWx1ZSBvZiBgdGhpc2AgcmVmZXJzIHRvIHRoZSBsYXN0IHZhbHVlIHJldHVybmVkIGluIHRoZSBjaGFpbiB0aGF0IHdhcyBub3QgYHVuZGVmaW5lZGAuXHJcbiAgICAgKiBUaGVyZWZvcmUgaWYgYSBwYXNzZWQgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUsIHRoZSBwcmV2aW91c2x5IHJldHVybmVkIHZhbHVlIGlzIG1haW50YWluZWQuXHJcbiAgICAgKiBBZnRlciBhbGwgcGFzc2VkIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY2FsbGVkIHRoZSBuZXcgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGFzdCByZXR1cm5lZCB2YWx1ZSAoaWYgYW55KS5cclxuICAgICAqIElmIGFueSBvZiB0aGUgcGFzc2VkIGZ1bmN0aW9ucyBhcmUgYSBjaGFpbiwgdGhlbiB0aGUgY2hhaW4gd2lsbCBiZSBmbGF0dGVuZWQuXHJcbiAgICAgKiBAbWV0aG9kIGNoYWluXHJcbiAgICAgKiBAcGFyYW0gLi4uZnVuY3Mge2Z1bmN0aW9ufSBUaGUgZnVuY3Rpb25zIHRvIGNoYWluLlxyXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHBhc3NlZCBmdW5jdGlvbnMgaW4gb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIENvbW1vbi5jaGFpbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBmdW5jcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICB2YXIgZnVuYyA9IGFyZ3VtZW50c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmdW5jLl9jaGFpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmbGF0dGVuIGFscmVhZHkgY2hhaW5lZCBmdW5jdGlvbnNcclxuICAgICAgICAgICAgICAgIGZ1bmNzLnB1c2guYXBwbHkoZnVuY3MsIGZ1bmMuX2NoYWluZWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZnVuY3MucHVzaChmdW5jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNoYWluID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvZGV2dG9vbHMtZG9jcy9pc3N1ZXMvNTMjaXNzdWVjb21tZW50LTUxOTQxMzU4XHJcbiAgICAgICAgICAgIHZhciBsYXN0UmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZnVuY3NbaV0uYXBwbHkobGFzdFJlc3VsdCwgYXJncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hhaW4uX2NoYWluZWQgPSBmdW5jcztcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYWluO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYWlucyBhIGZ1bmN0aW9uIHRvIGV4Y3V0ZSBiZWZvcmUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9uIHRoZSBnaXZlbiBgcGF0aGAgcmVsYXRpdmUgdG8gYGJhc2VgLlxyXG4gICAgICogU2VlIGFsc28gZG9jcyBmb3IgYENvbW1vbi5jaGFpbmAuXHJcbiAgICAgKiBAbWV0aG9kIGNoYWluUGF0aEJlZm9yZVxyXG4gICAgICogQHBhcmFtIHt9IGJhc2UgVGhlIGJhc2Ugb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCByZWxhdGl2ZSB0byBgYmFzZWBcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoYWluIGJlZm9yZSB0aGUgb3JpZ2luYWxcclxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgY2hhaW5lZCBmdW5jdGlvbiB0aGF0IHJlcGxhY2VkIHRoZSBvcmlnaW5hbFxyXG4gICAgICovXHJcbiAgICBDb21tb24uY2hhaW5QYXRoQmVmb3JlID0gZnVuY3Rpb24oYmFzZSwgcGF0aCwgZnVuYykge1xyXG4gICAgICAgIHJldHVybiBDb21tb24uc2V0KGJhc2UsIHBhdGgsIENvbW1vbi5jaGFpbihcclxuICAgICAgICAgICAgZnVuYyxcclxuICAgICAgICAgICAgQ29tbW9uLmdldChiYXNlLCBwYXRoKVxyXG4gICAgICAgICkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYWlucyBhIGZ1bmN0aW9uIHRvIGV4Y3V0ZSBhZnRlciB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb24gdGhlIGdpdmVuIGBwYXRoYCByZWxhdGl2ZSB0byBgYmFzZWAuXHJcbiAgICAgKiBTZWUgYWxzbyBkb2NzIGZvciBgQ29tbW9uLmNoYWluYC5cclxuICAgICAqIEBtZXRob2QgY2hhaW5QYXRoQWZ0ZXJcclxuICAgICAqIEBwYXJhbSB7fSBiYXNlIFRoZSBiYXNlIG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggcmVsYXRpdmUgdG8gYGJhc2VgXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGFpbiBhZnRlciB0aGUgb3JpZ2luYWxcclxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgY2hhaW5lZCBmdW5jdGlvbiB0aGF0IHJlcGxhY2VkIHRoZSBvcmlnaW5hbFxyXG4gICAgICovXHJcbiAgICBDb21tb24uY2hhaW5QYXRoQWZ0ZXIgPSBmdW5jdGlvbihiYXNlLCBwYXRoLCBmdW5jKSB7XHJcbiAgICAgICAgcmV0dXJuIENvbW1vbi5zZXQoYmFzZSwgcGF0aCwgQ29tbW9uLmNoYWluKFxyXG4gICAgICAgICAgICBDb21tb24uZ2V0KGJhc2UsIHBhdGgpLFxyXG4gICAgICAgICAgICBmdW5jXHJcbiAgICAgICAgKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB0byByZXF1aXJlIGV4dGVybmFsIGxpYnJhcmllcyBvdXRzaWRlIG9mIHRoZSBidW5kbGUuXHJcbiAgICAgKiBJdCBmaXJzdCBsb29rcyBmb3IgdGhlIGBnbG9iYWxOYW1lYCBvbiB0aGUgZW52aXJvbm1lbnQncyBnbG9iYWwgbmFtZXNwYWNlLlxyXG4gICAgICogSWYgdGhlIGdsb2JhbCBpcyBub3QgZm91bmQsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzdGFuZGFyZCBgcmVxdWlyZWAgdXNpbmcgdGhlIGBtb2R1bGVOYW1lYC5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAbWV0aG9kIF9yZXF1aXJlR2xvYmFsXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ2xvYmFsTmFtZSBUaGUgZ2xvYmFsIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBUaGUgZmFsbGJhY2sgQ29tbW9uSlMgbW9kdWxlIG5hbWVcclxuICAgICAqIEByZXR1cm4ge30gVGhlIGxvYWRlZCBtb2R1bGVcclxuICAgICAqL1xyXG4gICAgQ29tbW9uLl9yZXF1aXJlR2xvYmFsID0gZnVuY3Rpb24oZ2xvYmFsTmFtZSwgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIHZhciBvYmogPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3dbZ2xvYmFsTmFtZV0gOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFtnbG9iYWxOYW1lXSA6IG51bGwpO1xyXG5cclxuICAgICAgICAvLyAgQnJlYWtzIHdlYnBhY2sgOihcclxuICAgICAgICAvLyByZXR1cm4gb2JqIHx8IHJlcXVpcmUobW9kdWxlTmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Engine.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Engine.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Engine` module contains methods for creating and manipulating engines.\r\n* An engine is a controller that manages updating the simulation of the world.\r\n* See `Matter.Runner` for an optional game loop utility.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Engine\r\n*/\r\n\r\nvar Engine = {};\r\n\r\nmodule.exports = Engine;\r\n\r\nvar World = __webpack_require__(/*! ../body/World */ \"./node_modules/phaser/src/physics/matter-js/lib/body/World.js\");\r\nvar Sleeping = __webpack_require__(/*! ./Sleeping */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\");\r\nvar Resolver = __webpack_require__(/*! ../collision/Resolver */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Resolver.js\");\r\nvar Pairs = __webpack_require__(/*! ../collision/Pairs */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Pairs.js\");\r\nvar Metrics = __webpack_require__(/*! ./Metrics */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Metrics.js\");\r\nvar Grid = __webpack_require__(/*! ../collision/Grid */ \"./node_modules/phaser/src/physics/matter-js/lib/collision/Grid.js\");\r\nvar Events = __webpack_require__(/*! ./Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\nvar Composite = __webpack_require__(/*! ../body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Constraint = __webpack_require__(/*! ../constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\nvar Common = __webpack_require__(/*! ./Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Body = __webpack_require__(/*! ../body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new engine. The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * All properties have default values, and many are pre-calculated automatically based on other properties.\r\n     * See the properties section below for detailed information on what you can pass via the `options` object.\r\n     * @method create\r\n     * @param {object} [options]\r\n     * @return {engine} engine\r\n     */\r\n    Engine.create = function(element, options) {\r\n        // options may be passed as the first (and only) argument\r\n        options = Common.isElement(element) ? options : element;\r\n        element = Common.isElement(element) ? element : null;\r\n        options = options || {};\r\n\r\n        if (element || options.render) {\r\n            Common.warn('Engine.create: engine.render is deprecated (see docs)');\r\n        }\r\n\r\n        var defaults = {\r\n            positionIterations: 6,\r\n            velocityIterations: 4,\r\n            constraintIterations: 2,\r\n            enableSleeping: false,\r\n            events: [],\r\n            plugin: {},\r\n            timing: {\r\n                timestamp: 0,\r\n                timeScale: 1\r\n            },\r\n            broadphase: {\r\n                controller: Grid\r\n            }\r\n        };\r\n\r\n        var engine = Common.extend(defaults, options);\r\n\r\n        // @deprecated\r\n        if (element || engine.render) {\r\n            var renderDefaults = {\r\n                element: element,\r\n                controller: Render\r\n            };\r\n            \r\n            engine.render = Common.extend(renderDefaults, engine.render);\r\n        }\r\n\r\n        // @deprecated\r\n        if (engine.render && engine.render.controller) {\r\n            engine.render = engine.render.controller.create(engine.render);\r\n        }\r\n\r\n        // @deprecated\r\n        if (engine.render) {\r\n            engine.render.engine = engine;\r\n        }\r\n\r\n        engine.world = options.world || World.create(engine.world);\r\n        engine.pairs = Pairs.create();\r\n        engine.broadphase = engine.broadphase.controller.create(engine.broadphase);\r\n        engine.metrics = engine.metrics || { extended: false };\r\n\r\n        // @if DEBUG\r\n        engine.metrics = Metrics.create(engine.metrics);\r\n        // @endif\r\n\r\n        return engine;\r\n    };\r\n\r\n    /**\r\n     * Moves the simulation forward in time by `delta` ms.\r\n     * The `correction` argument is an optional `Number` that specifies the time correction factor to apply to the update.\r\n     * This can help improve the accuracy of the simulation in cases where `delta` is changing between updates.\r\n     * The value of `correction` is defined as `delta / lastDelta`, i.e. the percentage change of `delta` over the last step.\r\n     * Therefore the value is always `1` (no correction) when `delta` constant (or when no correction is desired, which is the default).\r\n     * See the paper on <a href=\"http://lonesock.net/article/verlet.html\">Time Corrected Verlet</a> for more information.\r\n     *\r\n     * Triggers `beforeUpdate` and `afterUpdate` events.\r\n     * Triggers `collisionStart`, `collisionActive` and `collisionEnd` events.\r\n     * @method update\r\n     * @param {engine} engine\r\n     * @param {number} [delta=16.666]\r\n     * @param {number} [correction=1]\r\n     */\r\n    Engine.update = function(engine, delta, correction) {\r\n        delta = delta || 1000 / 60;\r\n        correction = correction || 1;\r\n\r\n        var world = engine.world,\r\n            timing = engine.timing,\r\n            broadphase = engine.broadphase,\r\n            broadphasePairs = [],\r\n            i;\r\n\r\n        // increment timestamp\r\n        timing.timestamp += delta * timing.timeScale;\r\n\r\n        // create an event object\r\n        var event = {\r\n            timestamp: timing.timestamp\r\n        };\r\n\r\n        Events.trigger(engine, 'beforeUpdate', event);\r\n\r\n        // get lists of all bodies and constraints, no matter what composites they are in\r\n        var allBodies = Composite.allBodies(world),\r\n            allConstraints = Composite.allConstraints(world);\r\n\r\n        // @if DEBUG\r\n        // reset metrics logging\r\n        Metrics.reset(engine.metrics);\r\n        // @endif\r\n\r\n        // if sleeping enabled, call the sleeping controller\r\n        if (engine.enableSleeping)\r\n            Sleeping.update(allBodies, timing.timeScale);\r\n\r\n        // applies gravity to all bodies\r\n        Engine._bodiesApplyGravity(allBodies, world.gravity);\r\n\r\n        // update all body position and rotation by integration\r\n        Engine._bodiesUpdate(allBodies, delta, timing.timeScale, correction, world.bounds);\r\n\r\n        // update all constraints (first pass)\r\n        Constraint.preSolveAll(allBodies);\r\n        for (i = 0; i < engine.constraintIterations; i++) {\r\n            Constraint.solveAll(allConstraints, timing.timeScale);\r\n        }\r\n        Constraint.postSolveAll(allBodies);\r\n\r\n        // broadphase pass: find potential collision pairs\r\n        if (broadphase.controller) {\r\n            // if world is dirty, we must flush the whole grid\r\n            if (world.isModified)\r\n                broadphase.controller.clear(broadphase);\r\n\r\n            // update the grid buckets based on current bodies\r\n            broadphase.controller.update(broadphase, allBodies, engine, world.isModified);\r\n            broadphasePairs = broadphase.pairsList;\r\n        } else {\r\n            // if no broadphase set, we just pass all bodies\r\n            broadphasePairs = allBodies;\r\n        }\r\n\r\n        // clear all composite modified flags\r\n        if (world.isModified) {\r\n            Composite.setModified(world, false, false, true);\r\n        }\r\n\r\n        // narrowphase pass: find actual collisions, then create or update collision pairs\r\n        var collisions = broadphase.detector(broadphasePairs, engine);\r\n\r\n        // update collision pairs\r\n        var pairs = engine.pairs,\r\n            timestamp = timing.timestamp;\r\n        Pairs.update(pairs, collisions, timestamp);\r\n        Pairs.removeOld(pairs, timestamp);\r\n\r\n        // wake up bodies involved in collisions\r\n        if (engine.enableSleeping)\r\n            Sleeping.afterCollisions(pairs.list, timing.timeScale);\r\n\r\n        // trigger collision events\r\n        if (pairs.collisionStart.length > 0)\r\n            Events.trigger(engine, 'collisionStart', { pairs: pairs.collisionStart });\r\n\r\n        // iteratively resolve position between collisions\r\n        Resolver.preSolvePosition(pairs.list);\r\n        for (i = 0; i < engine.positionIterations; i++) {\r\n            Resolver.solvePosition(pairs.list, allBodies, timing.timeScale);\r\n        }\r\n        Resolver.postSolvePosition(allBodies);\r\n\r\n        // update all constraints (second pass)\r\n        Constraint.preSolveAll(allBodies);\r\n        for (i = 0; i < engine.constraintIterations; i++) {\r\n            Constraint.solveAll(allConstraints, timing.timeScale);\r\n        }\r\n        Constraint.postSolveAll(allBodies);\r\n\r\n        // iteratively resolve velocity between collisions\r\n        Resolver.preSolveVelocity(pairs.list);\r\n        for (i = 0; i < engine.velocityIterations; i++) {\r\n            Resolver.solveVelocity(pairs.list, timing.timeScale);\r\n        }\r\n\r\n        // trigger collision events\r\n        if (pairs.collisionActive.length > 0)\r\n            Events.trigger(engine, 'collisionActive', { pairs: pairs.collisionActive });\r\n\r\n        if (pairs.collisionEnd.length > 0)\r\n            Events.trigger(engine, 'collisionEnd', { pairs: pairs.collisionEnd });\r\n\r\n        // @if DEBUG\r\n        // update metrics log\r\n        Metrics.update(engine.metrics, engine);\r\n        // @endif\r\n\r\n        // clear force buffers\r\n        Engine._bodiesClearForces(allBodies);\r\n\r\n        Events.trigger(engine, 'afterUpdate', event);\r\n\r\n        return engine;\r\n    };\r\n    \r\n    /**\r\n     * Merges two engines by keeping the configuration of `engineA` but replacing the world with the one from `engineB`.\r\n     * @method merge\r\n     * @param {engine} engineA\r\n     * @param {engine} engineB\r\n     */\r\n    Engine.merge = function(engineA, engineB) {\r\n        Common.extend(engineA, engineB);\r\n        \r\n        if (engineB.world) {\r\n            engineA.world = engineB.world;\r\n\r\n            Engine.clear(engineA);\r\n\r\n            var bodies = Composite.allBodies(engineA.world);\r\n\r\n            for (var i = 0; i < bodies.length; i++) {\r\n                var body = bodies[i];\r\n                Sleeping.set(body, false);\r\n                body.id = Common.nextId();\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Clears the engine including the world, pairs and broadphase.\r\n     * @method clear\r\n     * @param {engine} engine\r\n     */\r\n    Engine.clear = function(engine) {\r\n        var world = engine.world;\r\n        \r\n        Pairs.clear(engine.pairs);\r\n\r\n        var broadphase = engine.broadphase;\r\n        if (broadphase.controller) {\r\n            var bodies = Composite.allBodies(world);\r\n            broadphase.controller.clear(broadphase);\r\n            broadphase.controller.update(broadphase, bodies, engine, true);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Zeroes the `body.force` and `body.torque` force buffers.\r\n     * @method _bodiesClearForces\r\n     * @private\r\n     * @param {body[]} bodies\r\n     */\r\n    Engine._bodiesClearForces = function(bodies) {\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n\r\n            // reset force buffers\r\n            body.force.x = 0;\r\n            body.force.y = 0;\r\n            body.torque = 0;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Applys a mass dependant force to all given bodies.\r\n     * @method _bodiesApplyGravity\r\n     * @private\r\n     * @param {body[]} bodies\r\n     * @param {vector} gravity\r\n     */\r\n    Engine._bodiesApplyGravity = function(bodies, gravity) {\r\n        var gravityScale = typeof gravity.scale !== 'undefined' ? gravity.scale : 0.001;\r\n\r\n        if ((gravity.x === 0 && gravity.y === 0) || gravityScale === 0) {\r\n            return;\r\n        }\r\n        \r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n\r\n            if (body.ignoreGravity || body.isStatic || body.isSleeping)\r\n                continue;\r\n\r\n            // apply gravity\r\n            body.force.y += body.mass * gravity.y * gravityScale;\r\n            body.force.x += body.mass * gravity.x * gravityScale;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Applys `Body.update` to all given `bodies`.\r\n     * @method _bodiesUpdate\r\n     * @private\r\n     * @param {body[]} bodies\r\n     * @param {number} deltaTime \r\n     * The amount of time elapsed between updates\r\n     * @param {number} timeScale\r\n     * @param {number} correction \r\n     * The Verlet correction factor (deltaTime / lastDeltaTime)\r\n     * @param {bounds} worldBounds\r\n     */\r\n    Engine._bodiesUpdate = function(bodies, deltaTime, timeScale, correction, worldBounds) {\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i];\r\n\r\n            if (body.isStatic || body.isSleeping)\r\n                continue;\r\n\r\n            Body.update(body, deltaTime, timeScale, correction);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * An alias for `Runner.run`, see `Matter.Runner` for more information.\r\n     * @method run\r\n     * @param {engine} engine\r\n     */\r\n\r\n    /**\r\n    * Fired just before an update\r\n    *\r\n    * @event beforeUpdate\r\n    * @param {} event An event object\r\n    * @param {number} event.timestamp The engine.timing.timestamp of the event\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired after engine update and all collision events\r\n    *\r\n    * @event afterUpdate\r\n    * @param {} event An event object\r\n    * @param {number} event.timestamp The engine.timing.timestamp of the event\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired after engine update, provides a list of all pairs that have started to collide in the current tick (if any)\r\n    *\r\n    * @event collisionStart\r\n    * @param {} event An event object\r\n    * @param {} event.pairs List of affected pairs\r\n    * @param {number} event.timestamp The engine.timing.timestamp of the event\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired after engine update, provides a list of all pairs that are colliding in the current tick (if any)\r\n    *\r\n    * @event collisionActive\r\n    * @param {} event An event object\r\n    * @param {} event.pairs List of affected pairs\r\n    * @param {number} event.timestamp The engine.timing.timestamp of the event\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /**\r\n    * Fired after engine update, provides a list of all pairs that have ended collision in the current tick (if any)\r\n    *\r\n    * @event collisionEnd\r\n    * @param {} event An event object\r\n    * @param {} event.pairs List of affected pairs\r\n    * @param {number} event.timestamp The engine.timing.timestamp of the event\r\n    * @param {} event.source The source object of the event\r\n    * @param {} event.name The name of the event\r\n    */\r\n\r\n    /*\r\n    *\r\n    *  Properties Documentation\r\n    *\r\n    */\r\n\r\n    /**\r\n     * An integer `Number` that specifies the number of position iterations to perform each update.\r\n     * The higher the value, the higher quality the simulation will be at the expense of performance.\r\n     *\r\n     * @property positionIterations\r\n     * @type number\r\n     * @default 6\r\n     */\r\n\r\n    /**\r\n     * An integer `Number` that specifies the number of velocity iterations to perform each update.\r\n     * The higher the value, the higher quality the simulation will be at the expense of performance.\r\n     *\r\n     * @property velocityIterations\r\n     * @type number\r\n     * @default 4\r\n     */\r\n\r\n    /**\r\n     * An integer `Number` that specifies the number of constraint iterations to perform each update.\r\n     * The higher the value, the higher quality the simulation will be at the expense of performance.\r\n     * The default value of `2` is usually very adequate.\r\n     *\r\n     * @property constraintIterations\r\n     * @type number\r\n     * @default 2\r\n     */\r\n\r\n    /**\r\n     * A flag that specifies whether the engine should allow sleeping via the `Matter.Sleeping` module.\r\n     * Sleeping can improve stability and performance, but often at the expense of accuracy.\r\n     *\r\n     * @property enableSleeping\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n\r\n    /**\r\n     * An `Object` containing properties regarding the timing systems of the engine. \r\n     *\r\n     * @property timing\r\n     * @type object\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the global scaling factor of time for all bodies.\r\n     * A value of `0` freezes the simulation.\r\n     * A value of `0.1` gives a slow-motion effect.\r\n     * A value of `1.2` gives a speed-up effect.\r\n     *\r\n     * @property timing.timeScale\r\n     * @type number\r\n     * @default 1\r\n     */\r\n\r\n    /**\r\n     * A `Number` that specifies the current simulation-time in milliseconds starting from `0`. \r\n     * It is incremented on every `Engine.update` by the given `delta` argument. \r\n     *\r\n     * @property timing.timestamp\r\n     * @type number\r\n     * @default 0\r\n     */\r\n\r\n    /**\r\n     * An instance of a `Render` controller. The default value is a `Matter.Render` instance created by `Engine.create`.\r\n     * One may also develop a custom renderer module based on `Matter.Render` and pass an instance of it to `Engine.create` via `options.render`.\r\n     *\r\n     * A minimal custom renderer object must define at least three functions: `create`, `clear` and `world` (see `Matter.Render`).\r\n     * It is also possible to instead pass the _module_ reference via `options.render.controller` and `Engine.create` will instantiate one for you.\r\n     *\r\n     * @property render\r\n     * @type render\r\n     * @deprecated see Demo.js for an example of creating a renderer\r\n     * @default a Matter.Render instance\r\n     */\r\n\r\n    /**\r\n     * An instance of a broadphase controller. The default value is a `Matter.Grid` instance created by `Engine.create`.\r\n     *\r\n     * @property broadphase\r\n     * @type grid\r\n     * @default a Matter.Grid instance\r\n     */\r\n\r\n    /**\r\n     * A `World` composite object that will contain all simulated bodies and constraints.\r\n     *\r\n     * @property world\r\n     * @type world\r\n     * @default a Matter.World instance\r\n     */\r\n\r\n    /**\r\n     * An object reserved for storing plugin-specific properties.\r\n     *\r\n     * @property plugin\r\n     * @type {}\r\n     */\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9FbmdpbmUuanM/YTRhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG9GQUFlO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxvRkFBWTtBQUNuQyxlQUFlLG1CQUFPLENBQUMsb0dBQXVCO0FBQzlDLFlBQVksbUJBQU8sQ0FBQyw4RkFBb0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLGtGQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyw0RkFBbUI7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLGdGQUFVO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLDRGQUFtQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQywwR0FBMEI7QUFDbkQsYUFBYSxtQkFBTyxDQUFDLGdGQUFVO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxrRkFBYzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsaUNBQWlDO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNELDhCQUE4Qjs7QUFFcEY7QUFDQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsaUNBQWlDO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsK0JBQStCOztBQUV0RjtBQUNBLG9EQUFvRCw0QkFBNEI7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWMsT0FBTztBQUNyQixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWMsT0FBTztBQUNyQixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGVBQWU7QUFDZixjQUFjLE9BQU87QUFDckIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixlQUFlO0FBQ2YsY0FBYyxPQUFPO0FBQ3JCLGVBQWU7QUFDZixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsZUFBZTtBQUNmLGNBQWMsT0FBTztBQUNyQixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb3JlL0VuZ2luZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLkVuZ2luZWAgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgZW5naW5lcy5cclxuKiBBbiBlbmdpbmUgaXMgYSBjb250cm9sbGVyIHRoYXQgbWFuYWdlcyB1cGRhdGluZyB0aGUgc2ltdWxhdGlvbiBvZiB0aGUgd29ybGQuXHJcbiogU2VlIGBNYXR0ZXIuUnVubmVyYCBmb3IgYW4gb3B0aW9uYWwgZ2FtZSBsb29wIHV0aWxpdHkuXHJcbipcclxuKiBTZWUgdGhlIGluY2x1ZGVkIHVzYWdlIFtleGFtcGxlc10oaHR0cHM6Ly9naXRodWIuY29tL2xpYWJydS9tYXR0ZXItanMvdHJlZS9tYXN0ZXIvZXhhbXBsZXMpLlxyXG4qXHJcbiogQGNsYXNzIEVuZ2luZVxyXG4qL1xyXG5cclxudmFyIEVuZ2luZSA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbmdpbmU7XHJcblxyXG52YXIgV29ybGQgPSByZXF1aXJlKCcuLi9ib2R5L1dvcmxkJyk7XHJcbnZhciBTbGVlcGluZyA9IHJlcXVpcmUoJy4vU2xlZXBpbmcnKTtcclxudmFyIFJlc29sdmVyID0gcmVxdWlyZSgnLi4vY29sbGlzaW9uL1Jlc29sdmVyJyk7XHJcbnZhciBQYWlycyA9IHJlcXVpcmUoJy4uL2NvbGxpc2lvbi9QYWlycycpO1xyXG52YXIgTWV0cmljcyA9IHJlcXVpcmUoJy4vTWV0cmljcycpO1xyXG52YXIgR3JpZCA9IHJlcXVpcmUoJy4uL2NvbGxpc2lvbi9HcmlkJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL0V2ZW50cycpO1xyXG52YXIgQ29tcG9zaXRlID0gcmVxdWlyZSgnLi4vYm9keS9Db21wb3NpdGUnKTtcclxudmFyIENvbnN0cmFpbnQgPSByZXF1aXJlKCcuLi9jb25zdHJhaW50L0NvbnN0cmFpbnQnKTtcclxudmFyIENvbW1vbiA9IHJlcXVpcmUoJy4vQ29tbW9uJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi4vYm9keS9Cb2R5Jyk7XHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGVuZ2luZS4gVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB0aGF0IHNwZWNpZmllcyBhbnkgcHJvcGVydGllcyB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuXHJcbiAgICAgKiBBbGwgcHJvcGVydGllcyBoYXZlIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWFueSBhcmUgcHJlLWNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBvdGhlciBwcm9wZXJ0aWVzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgeW91IGNhbiBwYXNzIHZpYSB0aGUgYG9wdGlvbnNgIG9iamVjdC5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXHJcbiAgICAgKiBAcmV0dXJuIHtlbmdpbmV9IGVuZ2luZVxyXG4gICAgICovXHJcbiAgICBFbmdpbmUuY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgICAgIC8vIG9wdGlvbnMgbWF5IGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgKGFuZCBvbmx5KSBhcmd1bWVudFxyXG4gICAgICAgIG9wdGlvbnMgPSBDb21tb24uaXNFbGVtZW50KGVsZW1lbnQpID8gb3B0aW9ucyA6IGVsZW1lbnQ7XHJcbiAgICAgICAgZWxlbWVudCA9IENvbW1vbi5pc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogbnVsbDtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQgfHwgb3B0aW9ucy5yZW5kZXIpIHtcclxuICAgICAgICAgICAgQ29tbW9uLndhcm4oJ0VuZ2luZS5jcmVhdGU6IGVuZ2luZS5yZW5kZXIgaXMgZGVwcmVjYXRlZCAoc2VlIGRvY3MpJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uSXRlcmF0aW9uczogNixcclxuICAgICAgICAgICAgdmVsb2NpdHlJdGVyYXRpb25zOiA0LFxyXG4gICAgICAgICAgICBjb25zdHJhaW50SXRlcmF0aW9uczogMixcclxuICAgICAgICAgICAgZW5hYmxlU2xlZXBpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudHM6IFtdLFxyXG4gICAgICAgICAgICBwbHVnaW46IHt9LFxyXG4gICAgICAgICAgICB0aW1pbmc6IHtcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogMCxcclxuICAgICAgICAgICAgICAgIHRpbWVTY2FsZTogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBicm9hZHBoYXNlOiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBHcmlkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgZW5naW5lID0gQ29tbW9uLmV4dGVuZChkZWZhdWx0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vIEBkZXByZWNhdGVkXHJcbiAgICAgICAgaWYgKGVsZW1lbnQgfHwgZW5naW5lLnJlbmRlcikge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyRGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogUmVuZGVyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBlbmdpbmUucmVuZGVyID0gQ29tbW9uLmV4dGVuZChyZW5kZXJEZWZhdWx0cywgZW5naW5lLnJlbmRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBAZGVwcmVjYXRlZFxyXG4gICAgICAgIGlmIChlbmdpbmUucmVuZGVyICYmIGVuZ2luZS5yZW5kZXIuY29udHJvbGxlcikge1xyXG4gICAgICAgICAgICBlbmdpbmUucmVuZGVyID0gZW5naW5lLnJlbmRlci5jb250cm9sbGVyLmNyZWF0ZShlbmdpbmUucmVuZGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEBkZXByZWNhdGVkXHJcbiAgICAgICAgaWYgKGVuZ2luZS5yZW5kZXIpIHtcclxuICAgICAgICAgICAgZW5naW5lLnJlbmRlci5lbmdpbmUgPSBlbmdpbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmdpbmUud29ybGQgPSBvcHRpb25zLndvcmxkIHx8IFdvcmxkLmNyZWF0ZShlbmdpbmUud29ybGQpO1xyXG4gICAgICAgIGVuZ2luZS5wYWlycyA9IFBhaXJzLmNyZWF0ZSgpO1xyXG4gICAgICAgIGVuZ2luZS5icm9hZHBoYXNlID0gZW5naW5lLmJyb2FkcGhhc2UuY29udHJvbGxlci5jcmVhdGUoZW5naW5lLmJyb2FkcGhhc2UpO1xyXG4gICAgICAgIGVuZ2luZS5tZXRyaWNzID0gZW5naW5lLm1ldHJpY3MgfHwgeyBleHRlbmRlZDogZmFsc2UgfTtcclxuXHJcbiAgICAgICAgLy8gQGlmIERFQlVHXHJcbiAgICAgICAgZW5naW5lLm1ldHJpY3MgPSBNZXRyaWNzLmNyZWF0ZShlbmdpbmUubWV0cmljcyk7XHJcbiAgICAgICAgLy8gQGVuZGlmXHJcblxyXG4gICAgICAgIHJldHVybiBlbmdpbmU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIHNpbXVsYXRpb24gZm9yd2FyZCBpbiB0aW1lIGJ5IGBkZWx0YWAgbXMuXHJcbiAgICAgKiBUaGUgYGNvcnJlY3Rpb25gIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGNvcnJlY3Rpb24gZmFjdG9yIHRvIGFwcGx5IHRvIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBUaGlzIGNhbiBoZWxwIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBzaW11bGF0aW9uIGluIGNhc2VzIHdoZXJlIGBkZWx0YWAgaXMgY2hhbmdpbmcgYmV0d2VlbiB1cGRhdGVzLlxyXG4gICAgICogVGhlIHZhbHVlIG9mIGBjb3JyZWN0aW9uYCBpcyBkZWZpbmVkIGFzIGBkZWx0YSAvIGxhc3REZWx0YWAsIGkuZS4gdGhlIHBlcmNlbnRhZ2UgY2hhbmdlIG9mIGBkZWx0YWAgb3ZlciB0aGUgbGFzdCBzdGVwLlxyXG4gICAgICogVGhlcmVmb3JlIHRoZSB2YWx1ZSBpcyBhbHdheXMgYDFgIChubyBjb3JyZWN0aW9uKSB3aGVuIGBkZWx0YWAgY29uc3RhbnQgKG9yIHdoZW4gbm8gY29ycmVjdGlvbiBpcyBkZXNpcmVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCkuXHJcbiAgICAgKiBTZWUgdGhlIHBhcGVyIG9uIDxhIGhyZWY9XCJodHRwOi8vbG9uZXNvY2submV0L2FydGljbGUvdmVybGV0Lmh0bWxcIj5UaW1lIENvcnJlY3RlZCBWZXJsZXQ8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFRyaWdnZXJzIGBiZWZvcmVVcGRhdGVgIGFuZCBgYWZ0ZXJVcGRhdGVgIGV2ZW50cy5cclxuICAgICAqIFRyaWdnZXJzIGBjb2xsaXNpb25TdGFydGAsIGBjb2xsaXNpb25BY3RpdmVgIGFuZCBgY29sbGlzaW9uRW5kYCBldmVudHMuXHJcbiAgICAgKiBAbWV0aG9kIHVwZGF0ZVxyXG4gICAgICogQHBhcmFtIHtlbmdpbmV9IGVuZ2luZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YT0xNi42NjZdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvcnJlY3Rpb249MV1cclxuICAgICAqL1xyXG4gICAgRW5naW5lLnVwZGF0ZSA9IGZ1bmN0aW9uKGVuZ2luZSwgZGVsdGEsIGNvcnJlY3Rpb24pIHtcclxuICAgICAgICBkZWx0YSA9IGRlbHRhIHx8IDEwMDAgLyA2MDtcclxuICAgICAgICBjb3JyZWN0aW9uID0gY29ycmVjdGlvbiB8fCAxO1xyXG5cclxuICAgICAgICB2YXIgd29ybGQgPSBlbmdpbmUud29ybGQsXHJcbiAgICAgICAgICAgIHRpbWluZyA9IGVuZ2luZS50aW1pbmcsXHJcbiAgICAgICAgICAgIGJyb2FkcGhhc2UgPSBlbmdpbmUuYnJvYWRwaGFzZSxcclxuICAgICAgICAgICAgYnJvYWRwaGFzZVBhaXJzID0gW10sXHJcbiAgICAgICAgICAgIGk7XHJcblxyXG4gICAgICAgIC8vIGluY3JlbWVudCB0aW1lc3RhbXBcclxuICAgICAgICB0aW1pbmcudGltZXN0YW1wICs9IGRlbHRhICogdGltaW5nLnRpbWVTY2FsZTtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGFuIGV2ZW50IG9iamVjdFxyXG4gICAgICAgIHZhciBldmVudCA9IHtcclxuICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1pbmcudGltZXN0YW1wXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoZW5naW5lLCAnYmVmb3JlVXBkYXRlJywgZXZlbnQpO1xyXG5cclxuICAgICAgICAvLyBnZXQgbGlzdHMgb2YgYWxsIGJvZGllcyBhbmQgY29uc3RyYWludHMsIG5vIG1hdHRlciB3aGF0IGNvbXBvc2l0ZXMgdGhleSBhcmUgaW5cclxuICAgICAgICB2YXIgYWxsQm9kaWVzID0gQ29tcG9zaXRlLmFsbEJvZGllcyh3b3JsZCksXHJcbiAgICAgICAgICAgIGFsbENvbnN0cmFpbnRzID0gQ29tcG9zaXRlLmFsbENvbnN0cmFpbnRzKHdvcmxkKTtcclxuXHJcbiAgICAgICAgLy8gQGlmIERFQlVHXHJcbiAgICAgICAgLy8gcmVzZXQgbWV0cmljcyBsb2dnaW5nXHJcbiAgICAgICAgTWV0cmljcy5yZXNldChlbmdpbmUubWV0cmljcyk7XHJcbiAgICAgICAgLy8gQGVuZGlmXHJcblxyXG4gICAgICAgIC8vIGlmIHNsZWVwaW5nIGVuYWJsZWQsIGNhbGwgdGhlIHNsZWVwaW5nIGNvbnRyb2xsZXJcclxuICAgICAgICBpZiAoZW5naW5lLmVuYWJsZVNsZWVwaW5nKVxyXG4gICAgICAgICAgICBTbGVlcGluZy51cGRhdGUoYWxsQm9kaWVzLCB0aW1pbmcudGltZVNjYWxlKTtcclxuXHJcbiAgICAgICAgLy8gYXBwbGllcyBncmF2aXR5IHRvIGFsbCBib2RpZXNcclxuICAgICAgICBFbmdpbmUuX2JvZGllc0FwcGx5R3Jhdml0eShhbGxCb2RpZXMsIHdvcmxkLmdyYXZpdHkpO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgYWxsIGJvZHkgcG9zaXRpb24gYW5kIHJvdGF0aW9uIGJ5IGludGVncmF0aW9uXHJcbiAgICAgICAgRW5naW5lLl9ib2RpZXNVcGRhdGUoYWxsQm9kaWVzLCBkZWx0YSwgdGltaW5nLnRpbWVTY2FsZSwgY29ycmVjdGlvbiwgd29ybGQuYm91bmRzKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGFsbCBjb25zdHJhaW50cyAoZmlyc3QgcGFzcylcclxuICAgICAgICBDb25zdHJhaW50LnByZVNvbHZlQWxsKGFsbEJvZGllcyk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVuZ2luZS5jb25zdHJhaW50SXRlcmF0aW9uczsgaSsrKSB7XHJcbiAgICAgICAgICAgIENvbnN0cmFpbnQuc29sdmVBbGwoYWxsQ29uc3RyYWludHMsIHRpbWluZy50aW1lU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBDb25zdHJhaW50LnBvc3RTb2x2ZUFsbChhbGxCb2RpZXMpO1xyXG5cclxuICAgICAgICAvLyBicm9hZHBoYXNlIHBhc3M6IGZpbmQgcG90ZW50aWFsIGNvbGxpc2lvbiBwYWlyc1xyXG4gICAgICAgIGlmIChicm9hZHBoYXNlLmNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgLy8gaWYgd29ybGQgaXMgZGlydHksIHdlIG11c3QgZmx1c2ggdGhlIHdob2xlIGdyaWRcclxuICAgICAgICAgICAgaWYgKHdvcmxkLmlzTW9kaWZpZWQpXHJcbiAgICAgICAgICAgICAgICBicm9hZHBoYXNlLmNvbnRyb2xsZXIuY2xlYXIoYnJvYWRwaGFzZSk7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGdyaWQgYnVja2V0cyBiYXNlZCBvbiBjdXJyZW50IGJvZGllc1xyXG4gICAgICAgICAgICBicm9hZHBoYXNlLmNvbnRyb2xsZXIudXBkYXRlKGJyb2FkcGhhc2UsIGFsbEJvZGllcywgZW5naW5lLCB3b3JsZC5pc01vZGlmaWVkKTtcclxuICAgICAgICAgICAgYnJvYWRwaGFzZVBhaXJzID0gYnJvYWRwaGFzZS5wYWlyc0xpc3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaWYgbm8gYnJvYWRwaGFzZSBzZXQsIHdlIGp1c3QgcGFzcyBhbGwgYm9kaWVzXHJcbiAgICAgICAgICAgIGJyb2FkcGhhc2VQYWlycyA9IGFsbEJvZGllcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFyIGFsbCBjb21wb3NpdGUgbW9kaWZpZWQgZmxhZ3NcclxuICAgICAgICBpZiAod29ybGQuaXNNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBDb21wb3NpdGUuc2V0TW9kaWZpZWQod29ybGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBuYXJyb3dwaGFzZSBwYXNzOiBmaW5kIGFjdHVhbCBjb2xsaXNpb25zLCB0aGVuIGNyZWF0ZSBvciB1cGRhdGUgY29sbGlzaW9uIHBhaXJzXHJcbiAgICAgICAgdmFyIGNvbGxpc2lvbnMgPSBicm9hZHBoYXNlLmRldGVjdG9yKGJyb2FkcGhhc2VQYWlycywgZW5naW5lKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGNvbGxpc2lvbiBwYWlyc1xyXG4gICAgICAgIHZhciBwYWlycyA9IGVuZ2luZS5wYWlycyxcclxuICAgICAgICAgICAgdGltZXN0YW1wID0gdGltaW5nLnRpbWVzdGFtcDtcclxuICAgICAgICBQYWlycy51cGRhdGUocGFpcnMsIGNvbGxpc2lvbnMsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgUGFpcnMucmVtb3ZlT2xkKHBhaXJzLCB0aW1lc3RhbXApO1xyXG5cclxuICAgICAgICAvLyB3YWtlIHVwIGJvZGllcyBpbnZvbHZlZCBpbiBjb2xsaXNpb25zXHJcbiAgICAgICAgaWYgKGVuZ2luZS5lbmFibGVTbGVlcGluZylcclxuICAgICAgICAgICAgU2xlZXBpbmcuYWZ0ZXJDb2xsaXNpb25zKHBhaXJzLmxpc3QsIHRpbWluZy50aW1lU2NhbGUpO1xyXG5cclxuICAgICAgICAvLyB0cmlnZ2VyIGNvbGxpc2lvbiBldmVudHNcclxuICAgICAgICBpZiAocGFpcnMuY29sbGlzaW9uU3RhcnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgRXZlbnRzLnRyaWdnZXIoZW5naW5lLCAnY29sbGlzaW9uU3RhcnQnLCB7IHBhaXJzOiBwYWlycy5jb2xsaXNpb25TdGFydCB9KTtcclxuXHJcbiAgICAgICAgLy8gaXRlcmF0aXZlbHkgcmVzb2x2ZSBwb3NpdGlvbiBiZXR3ZWVuIGNvbGxpc2lvbnNcclxuICAgICAgICBSZXNvbHZlci5wcmVTb2x2ZVBvc2l0aW9uKHBhaXJzLmxpc3QpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbmdpbmUucG9zaXRpb25JdGVyYXRpb25zOyBpKyspIHtcclxuICAgICAgICAgICAgUmVzb2x2ZXIuc29sdmVQb3NpdGlvbihwYWlycy5saXN0LCBhbGxCb2RpZXMsIHRpbWluZy50aW1lU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBSZXNvbHZlci5wb3N0U29sdmVQb3NpdGlvbihhbGxCb2RpZXMpO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgYWxsIGNvbnN0cmFpbnRzIChzZWNvbmQgcGFzcylcclxuICAgICAgICBDb25zdHJhaW50LnByZVNvbHZlQWxsKGFsbEJvZGllcyk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVuZ2luZS5jb25zdHJhaW50SXRlcmF0aW9uczsgaSsrKSB7XHJcbiAgICAgICAgICAgIENvbnN0cmFpbnQuc29sdmVBbGwoYWxsQ29uc3RyYWludHMsIHRpbWluZy50aW1lU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBDb25zdHJhaW50LnBvc3RTb2x2ZUFsbChhbGxCb2RpZXMpO1xyXG5cclxuICAgICAgICAvLyBpdGVyYXRpdmVseSByZXNvbHZlIHZlbG9jaXR5IGJldHdlZW4gY29sbGlzaW9uc1xyXG4gICAgICAgIFJlc29sdmVyLnByZVNvbHZlVmVsb2NpdHkocGFpcnMubGlzdCk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVuZ2luZS52ZWxvY2l0eUl0ZXJhdGlvbnM7IGkrKykge1xyXG4gICAgICAgICAgICBSZXNvbHZlci5zb2x2ZVZlbG9jaXR5KHBhaXJzLmxpc3QsIHRpbWluZy50aW1lU2NhbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJpZ2dlciBjb2xsaXNpb24gZXZlbnRzXHJcbiAgICAgICAgaWYgKHBhaXJzLmNvbGxpc2lvbkFjdGl2ZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICBFdmVudHMudHJpZ2dlcihlbmdpbmUsICdjb2xsaXNpb25BY3RpdmUnLCB7IHBhaXJzOiBwYWlycy5jb2xsaXNpb25BY3RpdmUgfSk7XHJcblxyXG4gICAgICAgIGlmIChwYWlycy5jb2xsaXNpb25FbmQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgRXZlbnRzLnRyaWdnZXIoZW5naW5lLCAnY29sbGlzaW9uRW5kJywgeyBwYWlyczogcGFpcnMuY29sbGlzaW9uRW5kIH0pO1xyXG5cclxuICAgICAgICAvLyBAaWYgREVCVUdcclxuICAgICAgICAvLyB1cGRhdGUgbWV0cmljcyBsb2dcclxuICAgICAgICBNZXRyaWNzLnVwZGF0ZShlbmdpbmUubWV0cmljcywgZW5naW5lKTtcclxuICAgICAgICAvLyBAZW5kaWZcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgZm9yY2UgYnVmZmVyc1xyXG4gICAgICAgIEVuZ2luZS5fYm9kaWVzQ2xlYXJGb3JjZXMoYWxsQm9kaWVzKTtcclxuXHJcbiAgICAgICAgRXZlbnRzLnRyaWdnZXIoZW5naW5lLCAnYWZ0ZXJVcGRhdGUnLCBldmVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBlbmdpbmU7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlcyB0d28gZW5naW5lcyBieSBrZWVwaW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGBlbmdpbmVBYCBidXQgcmVwbGFjaW5nIHRoZSB3b3JsZCB3aXRoIHRoZSBvbmUgZnJvbSBgZW5naW5lQmAuXHJcbiAgICAgKiBAbWV0aG9kIG1lcmdlXHJcbiAgICAgKiBAcGFyYW0ge2VuZ2luZX0gZW5naW5lQVxyXG4gICAgICogQHBhcmFtIHtlbmdpbmV9IGVuZ2luZUJcclxuICAgICAqL1xyXG4gICAgRW5naW5lLm1lcmdlID0gZnVuY3Rpb24oZW5naW5lQSwgZW5naW5lQikge1xyXG4gICAgICAgIENvbW1vbi5leHRlbmQoZW5naW5lQSwgZW5naW5lQik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGVuZ2luZUIud29ybGQpIHtcclxuICAgICAgICAgICAgZW5naW5lQS53b3JsZCA9IGVuZ2luZUIud29ybGQ7XHJcblxyXG4gICAgICAgICAgICBFbmdpbmUuY2xlYXIoZW5naW5lQSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9kaWVzID0gQ29tcG9zaXRlLmFsbEJvZGllcyhlbmdpbmVBLndvcmxkKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuICAgICAgICAgICAgICAgIFNsZWVwaW5nLnNldChib2R5LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBib2R5LmlkID0gQ29tbW9uLm5leHRJZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgZW5naW5lIGluY2x1ZGluZyB0aGUgd29ybGQsIHBhaXJzIGFuZCBicm9hZHBoYXNlLlxyXG4gICAgICogQG1ldGhvZCBjbGVhclxyXG4gICAgICogQHBhcmFtIHtlbmdpbmV9IGVuZ2luZVxyXG4gICAgICovXHJcbiAgICBFbmdpbmUuY2xlYXIgPSBmdW5jdGlvbihlbmdpbmUpIHtcclxuICAgICAgICB2YXIgd29ybGQgPSBlbmdpbmUud29ybGQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgUGFpcnMuY2xlYXIoZW5naW5lLnBhaXJzKTtcclxuXHJcbiAgICAgICAgdmFyIGJyb2FkcGhhc2UgPSBlbmdpbmUuYnJvYWRwaGFzZTtcclxuICAgICAgICBpZiAoYnJvYWRwaGFzZS5jb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHZhciBib2RpZXMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKHdvcmxkKTtcclxuICAgICAgICAgICAgYnJvYWRwaGFzZS5jb250cm9sbGVyLmNsZWFyKGJyb2FkcGhhc2UpO1xyXG4gICAgICAgICAgICBicm9hZHBoYXNlLmNvbnRyb2xsZXIudXBkYXRlKGJyb2FkcGhhc2UsIGJvZGllcywgZW5naW5lLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWmVyb2VzIHRoZSBgYm9keS5mb3JjZWAgYW5kIGBib2R5LnRvcnF1ZWAgZm9yY2UgYnVmZmVycy5cclxuICAgICAqIEBtZXRob2QgX2JvZGllc0NsZWFyRm9yY2VzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICovXHJcbiAgICBFbmdpbmUuX2JvZGllc0NsZWFyRm9yY2VzID0gZnVuY3Rpb24oYm9kaWVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV07XHJcblxyXG4gICAgICAgICAgICAvLyByZXNldCBmb3JjZSBidWZmZXJzXHJcbiAgICAgICAgICAgIGJvZHkuZm9yY2UueCA9IDA7XHJcbiAgICAgICAgICAgIGJvZHkuZm9yY2UueSA9IDA7XHJcbiAgICAgICAgICAgIGJvZHkudG9ycXVlID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHlzIGEgbWFzcyBkZXBlbmRhbnQgZm9yY2UgdG8gYWxsIGdpdmVuIGJvZGllcy5cclxuICAgICAqIEBtZXRob2QgX2JvZGllc0FwcGx5R3Jhdml0eVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7Ym9keVtdfSBib2RpZXNcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBncmF2aXR5XHJcbiAgICAgKi9cclxuICAgIEVuZ2luZS5fYm9kaWVzQXBwbHlHcmF2aXR5ID0gZnVuY3Rpb24oYm9kaWVzLCBncmF2aXR5KSB7XHJcbiAgICAgICAgdmFyIGdyYXZpdHlTY2FsZSA9IHR5cGVvZiBncmF2aXR5LnNjYWxlICE9PSAndW5kZWZpbmVkJyA/IGdyYXZpdHkuc2NhbGUgOiAwLjAwMTtcclxuXHJcbiAgICAgICAgaWYgKChncmF2aXR5LnggPT09IDAgJiYgZ3Jhdml0eS55ID09PSAwKSB8fCBncmF2aXR5U2NhbGUgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5Lmlnbm9yZUdyYXZpdHkgfHwgYm9keS5pc1N0YXRpYyB8fCBib2R5LmlzU2xlZXBpbmcpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFwcGx5IGdyYXZpdHlcclxuICAgICAgICAgICAgYm9keS5mb3JjZS55ICs9IGJvZHkubWFzcyAqIGdyYXZpdHkueSAqIGdyYXZpdHlTY2FsZTtcclxuICAgICAgICAgICAgYm9keS5mb3JjZS54ICs9IGJvZHkubWFzcyAqIGdyYXZpdHkueCAqIGdyYXZpdHlTY2FsZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHlzIGBCb2R5LnVwZGF0ZWAgdG8gYWxsIGdpdmVuIGBib2RpZXNgLlxyXG4gICAgICogQG1ldGhvZCBfYm9kaWVzVXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtib2R5W119IGJvZGllc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSBcclxuICAgICAqIFRoZSBhbW91bnQgb2YgdGltZSBlbGFwc2VkIGJldHdlZW4gdXBkYXRlc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVTY2FsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvcnJlY3Rpb24gXHJcbiAgICAgKiBUaGUgVmVybGV0IGNvcnJlY3Rpb24gZmFjdG9yIChkZWx0YVRpbWUgLyBsYXN0RGVsdGFUaW1lKVxyXG4gICAgICogQHBhcmFtIHtib3VuZHN9IHdvcmxkQm91bmRzXHJcbiAgICAgKi9cclxuICAgIEVuZ2luZS5fYm9kaWVzVXBkYXRlID0gZnVuY3Rpb24oYm9kaWVzLCBkZWx0YVRpbWUsIHRpbWVTY2FsZSwgY29ycmVjdGlvbiwgd29ybGRCb3VuZHMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChib2R5LmlzU3RhdGljIHx8IGJvZHkuaXNTbGVlcGluZylcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgQm9keS51cGRhdGUoYm9keSwgZGVsdGFUaW1lLCB0aW1lU2NhbGUsIGNvcnJlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhbGlhcyBmb3IgYFJ1bm5lci5ydW5gLCBzZWUgYE1hdHRlci5SdW5uZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICogQG1ldGhvZCBydW5cclxuICAgICAqIEBwYXJhbSB7ZW5naW5lfSBlbmdpbmVcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaXJlZCBqdXN0IGJlZm9yZSBhbiB1cGRhdGVcclxuICAgICpcclxuICAgICogQGV2ZW50IGJlZm9yZVVwZGF0ZVxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC50aW1lc3RhbXAgVGhlIGVuZ2luZS50aW1pbmcudGltZXN0YW1wIG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZpcmVkIGFmdGVyIGVuZ2luZSB1cGRhdGUgYW5kIGFsbCBjb2xsaXNpb24gZXZlbnRzXHJcbiAgICAqXHJcbiAgICAqIEBldmVudCBhZnRlclVwZGF0ZVxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC50aW1lc3RhbXAgVGhlIGVuZ2luZS50aW1pbmcudGltZXN0YW1wIG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZpcmVkIGFmdGVyIGVuZ2luZSB1cGRhdGUsIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFpcnMgdGhhdCBoYXZlIHN0YXJ0ZWQgdG8gY29sbGlkZSBpbiB0aGUgY3VycmVudCB0aWNrIChpZiBhbnkpXHJcbiAgICAqXHJcbiAgICAqIEBldmVudCBjb2xsaXNpb25TdGFydFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5wYWlycyBMaXN0IG9mIGFmZmVjdGVkIHBhaXJzXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC50aW1lc3RhbXAgVGhlIGVuZ2luZS50aW1pbmcudGltZXN0YW1wIG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZpcmVkIGFmdGVyIGVuZ2luZSB1cGRhdGUsIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFpcnMgdGhhdCBhcmUgY29sbGlkaW5nIGluIHRoZSBjdXJyZW50IHRpY2sgKGlmIGFueSlcclxuICAgICpcclxuICAgICogQGV2ZW50IGNvbGxpc2lvbkFjdGl2ZVxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQgQW4gZXZlbnQgb2JqZWN0XHJcbiAgICAqIEBwYXJhbSB7fSBldmVudC5wYWlycyBMaXN0IG9mIGFmZmVjdGVkIHBhaXJzXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC50aW1lc3RhbXAgVGhlIGVuZ2luZS50aW1pbmcudGltZXN0YW1wIG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQuc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSBldmVudFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQubmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEZpcmVkIGFmdGVyIGVuZ2luZSB1cGRhdGUsIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgcGFpcnMgdGhhdCBoYXZlIGVuZGVkIGNvbGxpc2lvbiBpbiB0aGUgY3VycmVudCB0aWNrIChpZiBhbnkpXHJcbiAgICAqXHJcbiAgICAqIEBldmVudCBjb2xsaXNpb25FbmRcclxuICAgICogQHBhcmFtIHt9IGV2ZW50IEFuIGV2ZW50IG9iamVjdFxyXG4gICAgKiBAcGFyYW0ge30gZXZlbnQucGFpcnMgTGlzdCBvZiBhZmZlY3RlZCBwYWlyc1xyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQudGltZXN0YW1wIFRoZSBlbmdpbmUudGltaW5nLnRpbWVzdGFtcCBvZiB0aGUgZXZlbnRcclxuICAgICogQHBhcmFtIHt9IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBvZiB0aGUgZXZlbnRcclxuICAgICogQHBhcmFtIHt9IGV2ZW50Lm5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XHJcbiAgICAqL1xyXG5cclxuICAgIC8qXHJcbiAgICAqXHJcbiAgICAqICBQcm9wZXJ0aWVzIERvY3VtZW50YXRpb25cclxuICAgICpcclxuICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlZ2VyIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcG9zaXRpb24gaXRlcmF0aW9ucyB0byBwZXJmb3JtIGVhY2ggdXBkYXRlLlxyXG4gICAgICogVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBoaWdoZXIgcXVhbGl0eSB0aGUgc2ltdWxhdGlvbiB3aWxsIGJlIGF0IHRoZSBleHBlbnNlIG9mIHBlcmZvcm1hbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBwb3NpdGlvbkl0ZXJhdGlvbnNcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgNlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlZ2VyIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdmVsb2NpdHkgaXRlcmF0aW9ucyB0byBwZXJmb3JtIGVhY2ggdXBkYXRlLlxyXG4gICAgICogVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBoaWdoZXIgcXVhbGl0eSB0aGUgc2ltdWxhdGlvbiB3aWxsIGJlIGF0IHRoZSBleHBlbnNlIG9mIHBlcmZvcm1hbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB2ZWxvY2l0eUl0ZXJhdGlvbnNcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgNFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlZ2VyIGBOdW1iZXJgIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29uc3RyYWludCBpdGVyYXRpb25zIHRvIHBlcmZvcm0gZWFjaCB1cGRhdGUuXHJcbiAgICAgKiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGhpZ2hlciBxdWFsaXR5IHRoZSBzaW11bGF0aW9uIHdpbGwgYmUgYXQgdGhlIGV4cGVuc2Ugb2YgcGVyZm9ybWFuY2UuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBgMmAgaXMgdXN1YWxseSB2ZXJ5IGFkZXF1YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBjb25zdHJhaW50SXRlcmF0aW9uc1xyXG4gICAgICogQHR5cGUgbnVtYmVyXHJcbiAgICAgKiBAZGVmYXVsdCAyXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBlbmdpbmUgc2hvdWxkIGFsbG93IHNsZWVwaW5nIHZpYSB0aGUgYE1hdHRlci5TbGVlcGluZ2AgbW9kdWxlLlxyXG4gICAgICogU2xlZXBpbmcgY2FuIGltcHJvdmUgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSwgYnV0IG9mdGVuIGF0IHRoZSBleHBlbnNlIG9mIGFjY3VyYWN5LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSBlbmFibGVTbGVlcGluZ1xyXG4gICAgICogQHR5cGUgYm9vbGVhblxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYE9iamVjdGAgY29udGFpbmluZyBwcm9wZXJ0aWVzIHJlZ2FyZGluZyB0aGUgdGltaW5nIHN5c3RlbXMgb2YgdGhlIGVuZ2luZS4gXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHRpbWluZ1xyXG4gICAgICogQHR5cGUgb2JqZWN0XHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYE51bWJlcmAgdGhhdCBzcGVjaWZpZXMgdGhlIGdsb2JhbCBzY2FsaW5nIGZhY3RvciBvZiB0aW1lIGZvciBhbGwgYm9kaWVzLlxyXG4gICAgICogQSB2YWx1ZSBvZiBgMGAgZnJlZXplcyB0aGUgc2ltdWxhdGlvbi5cclxuICAgICAqIEEgdmFsdWUgb2YgYDAuMWAgZ2l2ZXMgYSBzbG93LW1vdGlvbiBlZmZlY3QuXHJcbiAgICAgKiBBIHZhbHVlIG9mIGAxLjJgIGdpdmVzIGEgc3BlZWQtdXAgZWZmZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB0aW1pbmcudGltZVNjYWxlXHJcbiAgICAgKiBAdHlwZSBudW1iZXJcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgTnVtYmVyYCB0aGF0IHNwZWNpZmllcyB0aGUgY3VycmVudCBzaW11bGF0aW9uLXRpbWUgaW4gbWlsbGlzZWNvbmRzIHN0YXJ0aW5nIGZyb20gYDBgLiBcclxuICAgICAqIEl0IGlzIGluY3JlbWVudGVkIG9uIGV2ZXJ5IGBFbmdpbmUudXBkYXRlYCBieSB0aGUgZ2l2ZW4gYGRlbHRhYCBhcmd1bWVudC4gXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IHRpbWluZy50aW1lc3RhbXBcclxuICAgICAqIEB0eXBlIG51bWJlclxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnN0YW5jZSBvZiBhIGBSZW5kZXJgIGNvbnRyb2xsZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgYE1hdHRlci5SZW5kZXJgIGluc3RhbmNlIGNyZWF0ZWQgYnkgYEVuZ2luZS5jcmVhdGVgLlxyXG4gICAgICogT25lIG1heSBhbHNvIGRldmVsb3AgYSBjdXN0b20gcmVuZGVyZXIgbW9kdWxlIGJhc2VkIG9uIGBNYXR0ZXIuUmVuZGVyYCBhbmQgcGFzcyBhbiBpbnN0YW5jZSBvZiBpdCB0byBgRW5naW5lLmNyZWF0ZWAgdmlhIGBvcHRpb25zLnJlbmRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQSBtaW5pbWFsIGN1c3RvbSByZW5kZXJlciBvYmplY3QgbXVzdCBkZWZpbmUgYXQgbGVhc3QgdGhyZWUgZnVuY3Rpb25zOiBgY3JlYXRlYCwgYGNsZWFyYCBhbmQgYHdvcmxkYCAoc2VlIGBNYXR0ZXIuUmVuZGVyYCkuXHJcbiAgICAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGluc3RlYWQgcGFzcyB0aGUgX21vZHVsZV8gcmVmZXJlbmNlIHZpYSBgb3B0aW9ucy5yZW5kZXIuY29udHJvbGxlcmAgYW5kIGBFbmdpbmUuY3JlYXRlYCB3aWxsIGluc3RhbnRpYXRlIG9uZSBmb3IgeW91LlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSByZW5kZXJcclxuICAgICAqIEB0eXBlIHJlbmRlclxyXG4gICAgICogQGRlcHJlY2F0ZWQgc2VlIERlbW8uanMgZm9yIGFuIGV4YW1wbGUgb2YgY3JlYXRpbmcgYSByZW5kZXJlclxyXG4gICAgICogQGRlZmF1bHQgYSBNYXR0ZXIuUmVuZGVyIGluc3RhbmNlXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGluc3RhbmNlIG9mIGEgYnJvYWRwaGFzZSBjb250cm9sbGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGBNYXR0ZXIuR3JpZGAgaW5zdGFuY2UgY3JlYXRlZCBieSBgRW5naW5lLmNyZWF0ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHByb3BlcnR5IGJyb2FkcGhhc2VcclxuICAgICAqIEB0eXBlIGdyaWRcclxuICAgICAqIEBkZWZhdWx0IGEgTWF0dGVyLkdyaWQgaW5zdGFuY2VcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBgV29ybGRgIGNvbXBvc2l0ZSBvYmplY3QgdGhhdCB3aWxsIGNvbnRhaW4gYWxsIHNpbXVsYXRlZCBib2RpZXMgYW5kIGNvbnN0cmFpbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB3b3JsZFxyXG4gICAgICogQHR5cGUgd29ybGRcclxuICAgICAqIEBkZWZhdWx0IGEgTWF0dGVyLldvcmxkIGluc3RhbmNlXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIG9iamVjdCByZXNlcnZlZCBmb3Igc3RvcmluZyBwbHVnaW4tc3BlY2lmaWMgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvcGVydHkgcGx1Z2luXHJcbiAgICAgKiBAdHlwZSB7fVxyXG4gICAgICovXHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Engine.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Events.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Events.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Events` module contains methods to fire and listen to events on other objects.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Events\r\n*/\r\n\r\nvar Events = {};\r\n\r\nmodule.exports = Events;\r\n\r\nvar Common = __webpack_require__(/*! ./Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Subscribes a callback function to the given object's `eventName`.\r\n     * @method on\r\n     * @param {} object\r\n     * @param {string} eventNames\r\n     * @param {function} callback\r\n     */\r\n    Events.on = function(object, eventNames, callback) {\r\n        var names = eventNames.split(' '),\r\n            name;\r\n\r\n        for (var i = 0; i < names.length; i++) {\r\n            name = names[i];\r\n            object.events = object.events || {};\r\n            object.events[name] = object.events[name] || [];\r\n            object.events[name].push(callback);\r\n        }\r\n\r\n        return callback;\r\n    };\r\n\r\n    /**\r\n     * Removes the given event callback. If no callback, clears all callbacks in `eventNames`. If no `eventNames`, clears all events.\r\n     * @method off\r\n     * @param {} object\r\n     * @param {string} eventNames\r\n     * @param {function} callback\r\n     */\r\n    Events.off = function(object, eventNames, callback) {\r\n        if (!eventNames) {\r\n            object.events = {};\r\n            return;\r\n        }\r\n\r\n        // handle Events.off(object, callback)\r\n        if (typeof eventNames === 'function') {\r\n            callback = eventNames;\r\n            eventNames = Common.keys(object.events).join(' ');\r\n        }\r\n\r\n        var names = eventNames.split(' ');\r\n\r\n        for (var i = 0; i < names.length; i++) {\r\n            var callbacks = object.events[names[i]],\r\n                newCallbacks = [];\r\n\r\n            if (callback && callbacks) {\r\n                for (var j = 0; j < callbacks.length; j++) {\r\n                    if (callbacks[j] !== callback)\r\n                        newCallbacks.push(callbacks[j]);\r\n                }\r\n            }\r\n\r\n            object.events[names[i]] = newCallbacks;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Fires all the callbacks subscribed to the given object's `eventName`, in the order they subscribed, if any.\r\n     * @method trigger\r\n     * @param {} object\r\n     * @param {string} eventNames\r\n     * @param {} event\r\n     */\r\n    Events.trigger = function(object, eventNames, event) {\r\n        var names,\r\n            name,\r\n            callbacks,\r\n            eventClone;\r\n\r\n        var events = object.events;\r\n        \r\n        if (events && Common.keys(events).length > 0) {\r\n            if (!event)\r\n                event = {};\r\n\r\n            names = eventNames.split(' ');\r\n\r\n            for (var i = 0; i < names.length; i++) {\r\n                name = names[i];\r\n                callbacks = events[name];\r\n\r\n                if (callbacks) {\r\n                    eventClone = Common.clone(event, false);\r\n                    eventClone.name = name;\r\n                    eventClone.source = object;\r\n\r\n                    for (var j = 0; j < callbacks.length; j++) {\r\n                        callbacks[j].apply(object, [eventClone]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9FdmVudHMuanM/MDZjNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQVU7O0FBRS9COztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixzQkFBc0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLGtCQUFrQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxzQkFBc0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9FdmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5FdmVudHNgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIHRvIGZpcmUgYW5kIGxpc3RlbiB0byBldmVudHMgb24gb3RoZXIgb2JqZWN0cy5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcbipcclxuKiBAY2xhc3MgRXZlbnRzXHJcbiovXHJcblxyXG52YXIgRXZlbnRzID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50cztcclxuXHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuL0NvbW1vbicpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaWJlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBnaXZlbiBvYmplY3QncyBgZXZlbnROYW1lYC5cclxuICAgICAqIEBtZXRob2Qgb25cclxuICAgICAqIEBwYXJhbSB7fSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVzXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICovXHJcbiAgICBFdmVudHMub24gPSBmdW5jdGlvbihvYmplY3QsIGV2ZW50TmFtZXMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG5hbWVzID0gZXZlbnROYW1lcy5zcGxpdCgnICcpLFxyXG4gICAgICAgICAgICBuYW1lO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lc1tpXTtcclxuICAgICAgICAgICAgb2JqZWN0LmV2ZW50cyA9IG9iamVjdC5ldmVudHMgfHwge307XHJcbiAgICAgICAgICAgIG9iamVjdC5ldmVudHNbbmFtZV0gPSBvYmplY3QuZXZlbnRzW25hbWVdIHx8IFtdO1xyXG4gICAgICAgICAgICBvYmplY3QuZXZlbnRzW25hbWVdLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIGV2ZW50IGNhbGxiYWNrLiBJZiBubyBjYWxsYmFjaywgY2xlYXJzIGFsbCBjYWxsYmFja3MgaW4gYGV2ZW50TmFtZXNgLiBJZiBubyBgZXZlbnROYW1lc2AsIGNsZWFycyBhbGwgZXZlbnRzLlxyXG4gICAgICogQG1ldGhvZCBvZmZcclxuICAgICAqIEBwYXJhbSB7fSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVzXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICovXHJcbiAgICBFdmVudHMub2ZmID0gZnVuY3Rpb24ob2JqZWN0LCBldmVudE5hbWVzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICghZXZlbnROYW1lcykge1xyXG4gICAgICAgICAgICBvYmplY3QuZXZlbnRzID0ge307XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBFdmVudHMub2ZmKG9iamVjdCwgY2FsbGJhY2spXHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudE5hbWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gZXZlbnROYW1lcztcclxuICAgICAgICAgICAgZXZlbnROYW1lcyA9IENvbW1vbi5rZXlzKG9iamVjdC5ldmVudHMpLmpvaW4oJyAnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuYW1lcyA9IGV2ZW50TmFtZXMuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gb2JqZWN0LmV2ZW50c1tuYW1lc1tpXV0sXHJcbiAgICAgICAgICAgICAgICBuZXdDYWxsYmFja3MgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiBjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc1tqXSAhPT0gY2FsbGJhY2spXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrc1tqXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9iamVjdC5ldmVudHNbbmFtZXNbaV1dID0gbmV3Q2FsbGJhY2tzO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaXJlcyBhbGwgdGhlIGNhbGxiYWNrcyBzdWJzY3JpYmVkIHRvIHRoZSBnaXZlbiBvYmplY3QncyBgZXZlbnROYW1lYCwgaW4gdGhlIG9yZGVyIHRoZXkgc3Vic2NyaWJlZCwgaWYgYW55LlxyXG4gICAgICogQG1ldGhvZCB0cmlnZ2VyXHJcbiAgICAgKiBAcGFyYW0ge30gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lc1xyXG4gICAgICogQHBhcmFtIHt9IGV2ZW50XHJcbiAgICAgKi9cclxuICAgIEV2ZW50cy50cmlnZ2VyID0gZnVuY3Rpb24ob2JqZWN0LCBldmVudE5hbWVzLCBldmVudCkge1xyXG4gICAgICAgIHZhciBuYW1lcyxcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgY2FsbGJhY2tzLFxyXG4gICAgICAgICAgICBldmVudENsb25lO1xyXG5cclxuICAgICAgICB2YXIgZXZlbnRzID0gb2JqZWN0LmV2ZW50cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXZlbnRzICYmIENvbW1vbi5rZXlzKGV2ZW50cykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50KVxyXG4gICAgICAgICAgICAgICAgZXZlbnQgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIG5hbWVzID0gZXZlbnROYW1lcy5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gZXZlbnRzW25hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudENsb25lID0gQ29tbW9uLmNsb25lKGV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRDbG9uZS5uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudENsb25lLnNvdXJjZSA9IG9iamVjdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjYWxsYmFja3MubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2pdLmFwcGx5KG9iamVjdCwgW2V2ZW50Q2xvbmVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Matter.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Matter.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter` module is the top level namespace. It also includes a function for installing plugins on top of the library.\r\n*\r\n* @class Matter\r\n*/\r\n\r\nvar Matter = {};\r\n\r\nmodule.exports = Matter;\r\n\r\nvar Plugin = __webpack_require__(/*! ./Plugin */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js\");\r\nvar Common = __webpack_require__(/*! ./Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * The library name.\r\n     * @property name\r\n     * @readOnly\r\n     * @type {String}\r\n     */\r\n    Matter.name = 'matter-js';\r\n\r\n    /**\r\n     * The library version.\r\n     * @property version\r\n     * @readOnly\r\n     * @type {String}\r\n     */\r\n    Matter.version = '0.14.2';\r\n\r\n    /**\r\n     * A list of plugin dependencies to be installed. These are normally set and installed through `Matter.use`.\r\n     * Alternatively you may set `Matter.uses` manually and install them by calling `Plugin.use(Matter)`.\r\n     * @property uses\r\n     * @type {Array}\r\n     */\r\n    Matter.uses = [];\r\n\r\n    /**\r\n     * The plugins that have been installed through `Matter.Plugin.install`. Read only.\r\n     * @property used\r\n     * @readOnly\r\n     * @type {Array}\r\n     */\r\n    Matter.used = [];\r\n\r\n    /**\r\n     * Installs the given plugins on the `Matter` namespace.\r\n     * This is a short-hand for `Plugin.use`, see it for more information.\r\n     * Call this function once at the start of your code, with all of the plugins you wish to install as arguments.\r\n     * Avoid calling this function multiple times unless you intend to manually control installation order.\r\n     * @method use\r\n     * @param ...plugin {Function} The plugin(s) to install on `base` (multi-argument).\r\n     */\r\n    Matter.use = function() {\r\n        Plugin.use(Matter, Array.prototype.slice.call(arguments));\r\n    };\r\n\r\n    /**\r\n     * Chains a function to excute before the original function on the given `path` relative to `Matter`.\r\n     * See also docs for `Common.chain`.\r\n     * @method before\r\n     * @param {string} path The path relative to `Matter`\r\n     * @param {function} func The function to chain before the original\r\n     * @return {function} The chained function that replaced the original\r\n     */\r\n    Matter.before = function(path, func) {\r\n        path = path.replace(/^Matter./, '');\r\n        return Common.chainPathBefore(Matter, path, func);\r\n    };\r\n\r\n    /**\r\n     * Chains a function to excute after the original function on the given `path` relative to `Matter`.\r\n     * See also docs for `Common.chain`.\r\n     * @method after\r\n     * @param {string} path The path relative to `Matter`\r\n     * @param {function} func The function to chain after the original\r\n     * @return {function} The chained function that replaced the original\r\n     */\r\n    Matter.after = function(path, func) {\r\n        path = path.replace(/^Matter./, '');\r\n        return Common.chainPathAfter(Matter, path, func);\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9NYXR0ZXIuanM/NWU5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxnRkFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsZ0ZBQVU7O0FBRS9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFNBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb3JlL01hdHRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyYCBtb2R1bGUgaXMgdGhlIHRvcCBsZXZlbCBuYW1lc3BhY2UuIEl0IGFsc28gaW5jbHVkZXMgYSBmdW5jdGlvbiBmb3IgaW5zdGFsbGluZyBwbHVnaW5zIG9uIHRvcCBvZiB0aGUgbGlicmFyeS5cclxuKlxyXG4qIEBjbGFzcyBNYXR0ZXJcclxuKi9cclxuXHJcbnZhciBNYXR0ZXIgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWF0dGVyO1xyXG5cclxudmFyIFBsdWdpbiA9IHJlcXVpcmUoJy4vUGx1Z2luJyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuL0NvbW1vbicpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxpYnJhcnkgbmFtZS5cclxuICAgICAqIEBwcm9wZXJ0eSBuYW1lXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEB0eXBlIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIE1hdHRlci5uYW1lID0gJ21hdHRlci1qcyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGlicmFyeSB2ZXJzaW9uLlxyXG4gICAgICogQHByb3BlcnR5IHZlcnNpb25cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQHR5cGUge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgTWF0dGVyLnZlcnNpb24gPSAnMC4xNC4yJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgbGlzdCBvZiBwbHVnaW4gZGVwZW5kZW5jaWVzIHRvIGJlIGluc3RhbGxlZC4gVGhlc2UgYXJlIG5vcm1hbGx5IHNldCBhbmQgaW5zdGFsbGVkIHRocm91Z2ggYE1hdHRlci51c2VgLlxyXG4gICAgICogQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHNldCBgTWF0dGVyLnVzZXNgIG1hbnVhbGx5IGFuZCBpbnN0YWxsIHRoZW0gYnkgY2FsbGluZyBgUGx1Z2luLnVzZShNYXR0ZXIpYC5cclxuICAgICAqIEBwcm9wZXJ0eSB1c2VzXHJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIE1hdHRlci51c2VzID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGx1Z2lucyB0aGF0IGhhdmUgYmVlbiBpbnN0YWxsZWQgdGhyb3VnaCBgTWF0dGVyLlBsdWdpbi5pbnN0YWxsYC4gUmVhZCBvbmx5LlxyXG4gICAgICogQHByb3BlcnR5IHVzZWRcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBNYXR0ZXIudXNlZCA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIHBsdWdpbnMgb24gdGhlIGBNYXR0ZXJgIG5hbWVzcGFjZS5cclxuICAgICAqIFRoaXMgaXMgYSBzaG9ydC1oYW5kIGZvciBgUGx1Z2luLnVzZWAsIHNlZSBpdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqIENhbGwgdGhpcyBmdW5jdGlvbiBvbmNlIGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIHdpdGggYWxsIG9mIHRoZSBwbHVnaW5zIHlvdSB3aXNoIHRvIGluc3RhbGwgYXMgYXJndW1lbnRzLlxyXG4gICAgICogQXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIHVubGVzcyB5b3UgaW50ZW5kIHRvIG1hbnVhbGx5IGNvbnRyb2wgaW5zdGFsbGF0aW9uIG9yZGVyLlxyXG4gICAgICogQG1ldGhvZCB1c2VcclxuICAgICAqIEBwYXJhbSAuLi5wbHVnaW4ge0Z1bmN0aW9ufSBUaGUgcGx1Z2luKHMpIHRvIGluc3RhbGwgb24gYGJhc2VgIChtdWx0aS1hcmd1bWVudCkuXHJcbiAgICAgKi9cclxuICAgIE1hdHRlci51c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBQbHVnaW4udXNlKE1hdHRlciwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhaW5zIGEgZnVuY3Rpb24gdG8gZXhjdXRlIGJlZm9yZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb24gdGhlIGdpdmVuIGBwYXRoYCByZWxhdGl2ZSB0byBgTWF0dGVyYC5cclxuICAgICAqIFNlZSBhbHNvIGRvY3MgZm9yIGBDb21tb24uY2hhaW5gLlxyXG4gICAgICogQG1ldGhvZCBiZWZvcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHJlbGF0aXZlIHRvIGBNYXR0ZXJgXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGFpbiBiZWZvcmUgdGhlIG9yaWdpbmFsXHJcbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGNoYWluZWQgZnVuY3Rpb24gdGhhdCByZXBsYWNlZCB0aGUgb3JpZ2luYWxcclxuICAgICAqL1xyXG4gICAgTWF0dGVyLmJlZm9yZSA9IGZ1bmN0aW9uKHBhdGgsIGZ1bmMpIHtcclxuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eTWF0dGVyLi8sICcnKTtcclxuICAgICAgICByZXR1cm4gQ29tbW9uLmNoYWluUGF0aEJlZm9yZShNYXR0ZXIsIHBhdGgsIGZ1bmMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYWlucyBhIGZ1bmN0aW9uIHRvIGV4Y3V0ZSBhZnRlciB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb24gdGhlIGdpdmVuIGBwYXRoYCByZWxhdGl2ZSB0byBgTWF0dGVyYC5cclxuICAgICAqIFNlZSBhbHNvIGRvY3MgZm9yIGBDb21tb24uY2hhaW5gLlxyXG4gICAgICogQG1ldGhvZCBhZnRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggcmVsYXRpdmUgdG8gYE1hdHRlcmBcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoYWluIGFmdGVyIHRoZSBvcmlnaW5hbFxyXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBjaGFpbmVkIGZ1bmN0aW9uIHRoYXQgcmVwbGFjZWQgdGhlIG9yaWdpbmFsXHJcbiAgICAgKi9cclxuICAgIE1hdHRlci5hZnRlciA9IGZ1bmN0aW9uKHBhdGgsIGZ1bmMpIHtcclxuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eTWF0dGVyLi8sICcnKTtcclxuICAgICAgICByZXR1cm4gQ29tbW9uLmNoYWluUGF0aEFmdGVyKE1hdHRlciwgcGF0aCwgZnVuYyk7XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Matter.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Metrics.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Metrics.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("// @if DEBUG\r\n/**\r\n* _Internal Class_, not generally used outside of the engine's internals.\r\n*\r\n*/\r\n\r\nvar Metrics = {};\r\n\r\nmodule.exports = Metrics;\r\n\r\nvar Composite = __webpack_require__(/*! ../body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Common = __webpack_require__(/*! ./Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new metrics.\r\n     * @method create\r\n     * @private\r\n     * @return {metrics} A new metrics\r\n     */\r\n    Metrics.create = function(options) {\r\n        var defaults = {\r\n            extended: false,\r\n            narrowDetections: 0,\r\n            narrowphaseTests: 0,\r\n            narrowReuse: 0,\r\n            narrowReuseCount: 0,\r\n            midphaseTests: 0,\r\n            broadphaseTests: 0,\r\n            narrowEff: 0.0001,\r\n            midEff: 0.0001,\r\n            broadEff: 0.0001,\r\n            collisions: 0,\r\n            buckets: 0,\r\n            bodies: 0,\r\n            pairs: 0\r\n        };\r\n\r\n        return Common.extend(defaults, false, options);\r\n    };\r\n\r\n    /**\r\n     * Resets metrics.\r\n     * @method reset\r\n     * @private\r\n     * @param {metrics} metrics\r\n     */\r\n    Metrics.reset = function(metrics) {\r\n        if (metrics.extended) {\r\n            metrics.narrowDetections = 0;\r\n            metrics.narrowphaseTests = 0;\r\n            metrics.narrowReuse = 0;\r\n            metrics.narrowReuseCount = 0;\r\n            metrics.midphaseTests = 0;\r\n            metrics.broadphaseTests = 0;\r\n            metrics.narrowEff = 0;\r\n            metrics.midEff = 0;\r\n            metrics.broadEff = 0;\r\n            metrics.collisions = 0;\r\n            metrics.buckets = 0;\r\n            metrics.pairs = 0;\r\n            metrics.bodies = 0;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Updates metrics.\r\n     * @method update\r\n     * @private\r\n     * @param {metrics} metrics\r\n     * @param {engine} engine\r\n     */\r\n    Metrics.update = function(metrics, engine) {\r\n        if (metrics.extended) {\r\n            var world = engine.world,\r\n                bodies = Composite.allBodies(world);\r\n\r\n            metrics.collisions = metrics.narrowDetections;\r\n            metrics.pairs = engine.pairs.list.length;\r\n            metrics.bodies = bodies.length;\r\n            metrics.midEff = (metrics.narrowDetections / (metrics.midphaseTests || 1)).toFixed(2);\r\n            metrics.narrowEff = (metrics.narrowDetections / (metrics.narrowphaseTests || 1)).toFixed(2);\r\n            metrics.broadEff = (1 - (metrics.broadphaseTests / (bodies.length || 1))).toFixed(2);\r\n            metrics.narrowReuse = (metrics.narrowReuseCount / (metrics.narrowphaseTests || 1)).toFixed(2);\r\n            //var broadphase = engine.broadphase[engine.broadphase.current];\r\n            //if (broadphase.instance)\r\n            //    metrics.buckets = Common.keys(broadphase.instance.buckets).length;\r\n        }\r\n    };\r\n\r\n})();\r\n// @endif\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9NZXRyaWNzLmpzP2VhZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyw0RkFBbUI7QUFDM0MsYUFBYSxtQkFBTyxDQUFDLGdGQUFVOztBQUUvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2NvcmUvTWV0cmljcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBpZiBERUJVR1xyXG4vKipcclxuKiBfSW50ZXJuYWwgQ2xhc3NfLCBub3QgZ2VuZXJhbGx5IHVzZWQgb3V0c2lkZSBvZiB0aGUgZW5naW5lJ3MgaW50ZXJuYWxzLlxyXG4qXHJcbiovXHJcblxyXG52YXIgTWV0cmljcyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXRyaWNzO1xyXG5cclxudmFyIENvbXBvc2l0ZSA9IHJlcXVpcmUoJy4uL2JvZHkvQ29tcG9zaXRlJyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuL0NvbW1vbicpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBtZXRyaWNzLlxyXG4gICAgICogQG1ldGhvZCBjcmVhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJuIHttZXRyaWNzfSBBIG5ldyBtZXRyaWNzXHJcbiAgICAgKi9cclxuICAgIE1ldHJpY3MuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBkZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgZXh0ZW5kZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBuYXJyb3dEZXRlY3Rpb25zOiAwLFxyXG4gICAgICAgICAgICBuYXJyb3dwaGFzZVRlc3RzOiAwLFxyXG4gICAgICAgICAgICBuYXJyb3dSZXVzZTogMCxcclxuICAgICAgICAgICAgbmFycm93UmV1c2VDb3VudDogMCxcclxuICAgICAgICAgICAgbWlkcGhhc2VUZXN0czogMCxcclxuICAgICAgICAgICAgYnJvYWRwaGFzZVRlc3RzOiAwLFxyXG4gICAgICAgICAgICBuYXJyb3dFZmY6IDAuMDAwMSxcclxuICAgICAgICAgICAgbWlkRWZmOiAwLjAwMDEsXHJcbiAgICAgICAgICAgIGJyb2FkRWZmOiAwLjAwMDEsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbnM6IDAsXHJcbiAgICAgICAgICAgIGJ1Y2tldHM6IDAsXHJcbiAgICAgICAgICAgIGJvZGllczogMCxcclxuICAgICAgICAgICAgcGFpcnM6IDBcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gQ29tbW9uLmV4dGVuZChkZWZhdWx0cywgZmFsc2UsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBtZXRyaWNzLlxyXG4gICAgICogQG1ldGhvZCByZXNldFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7bWV0cmljc30gbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBNZXRyaWNzLnJlc2V0ID0gZnVuY3Rpb24obWV0cmljcykge1xyXG4gICAgICAgIGlmIChtZXRyaWNzLmV4dGVuZGVkKSB7XHJcbiAgICAgICAgICAgIG1ldHJpY3MubmFycm93RGV0ZWN0aW9ucyA9IDA7XHJcbiAgICAgICAgICAgIG1ldHJpY3MubmFycm93cGhhc2VUZXN0cyA9IDA7XHJcbiAgICAgICAgICAgIG1ldHJpY3MubmFycm93UmV1c2UgPSAwO1xyXG4gICAgICAgICAgICBtZXRyaWNzLm5hcnJvd1JldXNlQ291bnQgPSAwO1xyXG4gICAgICAgICAgICBtZXRyaWNzLm1pZHBoYXNlVGVzdHMgPSAwO1xyXG4gICAgICAgICAgICBtZXRyaWNzLmJyb2FkcGhhc2VUZXN0cyA9IDA7XHJcbiAgICAgICAgICAgIG1ldHJpY3MubmFycm93RWZmID0gMDtcclxuICAgICAgICAgICAgbWV0cmljcy5taWRFZmYgPSAwO1xyXG4gICAgICAgICAgICBtZXRyaWNzLmJyb2FkRWZmID0gMDtcclxuICAgICAgICAgICAgbWV0cmljcy5jb2xsaXNpb25zID0gMDtcclxuICAgICAgICAgICAgbWV0cmljcy5idWNrZXRzID0gMDtcclxuICAgICAgICAgICAgbWV0cmljcy5wYWlycyA9IDA7XHJcbiAgICAgICAgICAgIG1ldHJpY3MuYm9kaWVzID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBtZXRyaWNzLlxyXG4gICAgICogQG1ldGhvZCB1cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge21ldHJpY3N9IG1ldHJpY3NcclxuICAgICAqIEBwYXJhbSB7ZW5naW5lfSBlbmdpbmVcclxuICAgICAqL1xyXG4gICAgTWV0cmljcy51cGRhdGUgPSBmdW5jdGlvbihtZXRyaWNzLCBlbmdpbmUpIHtcclxuICAgICAgICBpZiAobWV0cmljcy5leHRlbmRlZCkge1xyXG4gICAgICAgICAgICB2YXIgd29ybGQgPSBlbmdpbmUud29ybGQsXHJcbiAgICAgICAgICAgICAgICBib2RpZXMgPSBDb21wb3NpdGUuYWxsQm9kaWVzKHdvcmxkKTtcclxuXHJcbiAgICAgICAgICAgIG1ldHJpY3MuY29sbGlzaW9ucyA9IG1ldHJpY3MubmFycm93RGV0ZWN0aW9ucztcclxuICAgICAgICAgICAgbWV0cmljcy5wYWlycyA9IGVuZ2luZS5wYWlycy5saXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgbWV0cmljcy5ib2RpZXMgPSBib2RpZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBtZXRyaWNzLm1pZEVmZiA9IChtZXRyaWNzLm5hcnJvd0RldGVjdGlvbnMgLyAobWV0cmljcy5taWRwaGFzZVRlc3RzIHx8IDEpKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBtZXRyaWNzLm5hcnJvd0VmZiA9IChtZXRyaWNzLm5hcnJvd0RldGVjdGlvbnMgLyAobWV0cmljcy5uYXJyb3dwaGFzZVRlc3RzIHx8IDEpKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBtZXRyaWNzLmJyb2FkRWZmID0gKDEgLSAobWV0cmljcy5icm9hZHBoYXNlVGVzdHMgLyAoYm9kaWVzLmxlbmd0aCB8fCAxKSkpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgIG1ldHJpY3MubmFycm93UmV1c2UgPSAobWV0cmljcy5uYXJyb3dSZXVzZUNvdW50IC8gKG1ldHJpY3MubmFycm93cGhhc2VUZXN0cyB8fCAxKSkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgLy92YXIgYnJvYWRwaGFzZSA9IGVuZ2luZS5icm9hZHBoYXNlW2VuZ2luZS5icm9hZHBoYXNlLmN1cnJlbnRdO1xyXG4gICAgICAgICAgICAvL2lmIChicm9hZHBoYXNlLmluc3RhbmNlKVxyXG4gICAgICAgICAgICAvLyAgICBtZXRyaWNzLmJ1Y2tldHMgPSBDb21tb24ua2V5cyhicm9hZHBoYXNlLmluc3RhbmNlLmJ1Y2tldHMpLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuLy8gQGVuZGlmXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Metrics.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Plugin` module contains functions for registering and installing plugins on modules.\r\n*\r\n* @class Plugin\r\n*/\r\n\r\nvar Plugin = {};\r\n\r\nmodule.exports = Plugin;\r\n\r\nvar Common = __webpack_require__(/*! ./Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    Plugin._registry = {};\r\n\r\n    /**\r\n     * Registers a plugin object so it can be resolved later by name.\r\n     * @method register\r\n     * @param plugin {} The plugin to register.\r\n     * @return {object} The plugin.\r\n     */\r\n    Plugin.register = function(plugin) {\r\n        if (!Plugin.isPlugin(plugin)) {\r\n            Common.warn('Plugin.register:', Plugin.toString(plugin), 'does not implement all required fields.');\r\n        }\r\n\r\n        if (plugin.name in Plugin._registry) {\r\n            var registered = Plugin._registry[plugin.name],\r\n                pluginVersion = Plugin.versionParse(plugin.version).number,\r\n                registeredVersion = Plugin.versionParse(registered.version).number;\r\n\r\n            if (pluginVersion > registeredVersion) {\r\n                Common.warn('Plugin.register:', Plugin.toString(registered), 'was upgraded to', Plugin.toString(plugin));\r\n                Plugin._registry[plugin.name] = plugin;\r\n            } else if (pluginVersion < registeredVersion) {\r\n                Common.warn('Plugin.register:', Plugin.toString(registered), 'can not be downgraded to', Plugin.toString(plugin));\r\n            } else if (plugin !== registered) {\r\n                Common.warn('Plugin.register:', Plugin.toString(plugin), 'is already registered to different plugin object');\r\n            }\r\n        } else {\r\n            Plugin._registry[plugin.name] = plugin;\r\n        }\r\n\r\n        return plugin;\r\n    };\r\n\r\n    /**\r\n     * Resolves a dependency to a plugin object from the registry if it exists. \r\n     * The `dependency` may contain a version, but only the name matters when resolving.\r\n     * @method resolve\r\n     * @param dependency {string} The dependency.\r\n     * @return {object} The plugin if resolved, otherwise `undefined`.\r\n     */\r\n    Plugin.resolve = function(dependency) {\r\n        return Plugin._registry[Plugin.dependencyParse(dependency).name];\r\n    };\r\n\r\n    /**\r\n     * Returns a pretty printed plugin name and version.\r\n     * @method toString\r\n     * @param plugin {} The plugin.\r\n     * @return {string} Pretty printed plugin name and version.\r\n     */\r\n    Plugin.toString = function(plugin) {\r\n        return typeof plugin === 'string' ? plugin : (plugin.name || 'anonymous') + '@' + (plugin.version || plugin.range || '0.0.0');\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if the object meets the minimum standard to be considered a plugin.\r\n     * This means it must define the following properties:\r\n     * - `name`\r\n     * - `version`\r\n     * - `install`\r\n     * @method isPlugin\r\n     * @param obj {} The obj to test.\r\n     * @return {boolean} `true` if the object can be considered a plugin otherwise `false`.\r\n     */\r\n    Plugin.isPlugin = function(obj) {\r\n        return obj && obj.name && obj.version && obj.install;\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if a plugin with the given `name` been installed on `module`.\r\n     * @method isUsed\r\n     * @param module {} The module.\r\n     * @param name {string} The plugin name.\r\n     * @return {boolean} `true` if a plugin with the given `name` been installed on `module`, otherwise `false`.\r\n     */\r\n    Plugin.isUsed = function(module, name) {\r\n        return module.used.indexOf(name) > -1;\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if `plugin.for` is applicable to `module` by comparing against `module.name` and `module.version`.\r\n     * If `plugin.for` is not specified then it is assumed to be applicable.\r\n     * The value of `plugin.for` is a string of the format `'module-name'` or `'module-name@version'`.\r\n     * @method isFor\r\n     * @param plugin {} The plugin.\r\n     * @param module {} The module.\r\n     * @return {boolean} `true` if `plugin.for` is applicable to `module`, otherwise `false`.\r\n     */\r\n    Plugin.isFor = function(plugin, module) {\r\n        var parsed = plugin.for && Plugin.dependencyParse(plugin.for);\r\n        return !plugin.for || (module.name === parsed.name && Plugin.versionSatisfies(module.version, parsed.range));\r\n    };\r\n\r\n    /**\r\n     * Installs the plugins by calling `plugin.install` on each plugin specified in `plugins` if passed, otherwise `module.uses`.\r\n     * For installing plugins on `Matter` see the convenience function `Matter.use`.\r\n     * Plugins may be specified either by their name or a reference to the plugin object.\r\n     * Plugins themselves may specify further dependencies, but each plugin is installed only once.\r\n     * Order is important, a topological sort is performed to find the best resulting order of installation.\r\n     * This sorting attempts to satisfy every dependency's requested ordering, but may not be exact in all cases.\r\n     * This function logs the resulting status of each dependency in the console, along with any warnings.\r\n     * - A green tick ✅ indicates a dependency was resolved and installed.\r\n     * - An orange diamond 🔶 indicates a dependency was resolved but a warning was thrown for it or one if its dependencies.\r\n     * - A red cross ❌ indicates a dependency could not be resolved.\r\n     * Avoid calling this function multiple times on the same module unless you intend to manually control installation order.\r\n     * @method use\r\n     * @param module {} The module install plugins on.\r\n     * @param [plugins=module.uses] {} The plugins to install on module (optional, defaults to `module.uses`).\r\n     */\r\n    Plugin.use = function(module, plugins) {\r\n        module.uses = (module.uses || []).concat(plugins || []);\r\n\r\n        if (module.uses.length === 0) {\r\n            Common.warn('Plugin.use:', Plugin.toString(module), 'does not specify any dependencies to install.');\r\n            return;\r\n        }\r\n\r\n        var dependencies = Plugin.dependencies(module),\r\n            sortedDependencies = Common.topologicalSort(dependencies),\r\n            status = [];\r\n\r\n        for (var i = 0; i < sortedDependencies.length; i += 1) {\r\n            if (sortedDependencies[i] === module.name) {\r\n                continue;\r\n            }\r\n\r\n            var plugin = Plugin.resolve(sortedDependencies[i]);\r\n\r\n            if (!plugin) {\r\n                status.push('❌ ' + sortedDependencies[i]);\r\n                continue;\r\n            }\r\n\r\n            if (Plugin.isUsed(module, plugin.name)) {\r\n                continue;\r\n            }\r\n\r\n            if (!Plugin.isFor(plugin, module)) {\r\n                Common.warn('Plugin.use:', Plugin.toString(plugin), 'is for', plugin.for, 'but installed on', Plugin.toString(module) + '.');\r\n                plugin._warned = true;\r\n            }\r\n\r\n            if (plugin.install) {\r\n                plugin.install(module);\r\n            } else {\r\n                Common.warn('Plugin.use:', Plugin.toString(plugin), 'does not specify an install function.');\r\n                plugin._warned = true;\r\n            }\r\n\r\n            if (plugin._warned) {\r\n                status.push('🔶 ' + Plugin.toString(plugin));\r\n                delete plugin._warned;\r\n            } else {\r\n                status.push('✅ ' + Plugin.toString(plugin));\r\n            }\r\n\r\n            module.used.push(plugin.name);\r\n        }\r\n\r\n        if (status.length > 0 && !plugin.silent) {\r\n            Common.info(status.join('  '));\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Recursively finds all of a module's dependencies and returns a flat dependency graph.\r\n     * @method dependencies\r\n     * @param module {} The module.\r\n     * @return {object} A dependency graph.\r\n     */\r\n    Plugin.dependencies = function(module, tracked) {\r\n        var parsedBase = Plugin.dependencyParse(module),\r\n            name = parsedBase.name;\r\n\r\n        tracked = tracked || {};\r\n\r\n        if (name in tracked) {\r\n            return;\r\n        }\r\n\r\n        module = Plugin.resolve(module) || module;\r\n\r\n        tracked[name] = Common.map(module.uses || [], function(dependency) {\r\n            if (Plugin.isPlugin(dependency)) {\r\n                Plugin.register(dependency);\r\n            }\r\n\r\n            var parsed = Plugin.dependencyParse(dependency),\r\n                resolved = Plugin.resolve(dependency);\r\n\r\n            if (resolved && !Plugin.versionSatisfies(resolved.version, parsed.range)) {\r\n                Common.warn(\r\n                    'Plugin.dependencies:', Plugin.toString(resolved), 'does not satisfy',\r\n                    Plugin.toString(parsed), 'used by', Plugin.toString(parsedBase) + '.'\r\n                );\r\n\r\n                resolved._warned = true;\r\n                module._warned = true;\r\n            } else if (!resolved) {\r\n                Common.warn(\r\n                    'Plugin.dependencies:', Plugin.toString(dependency), 'used by',\r\n                    Plugin.toString(parsedBase), 'could not be resolved.'\r\n                );\r\n\r\n                module._warned = true;\r\n            }\r\n\r\n            return parsed.name;\r\n        });\r\n\r\n        for (var i = 0; i < tracked[name].length; i += 1) {\r\n            Plugin.dependencies(tracked[name][i], tracked);\r\n        }\r\n\r\n        return tracked;\r\n    };\r\n\r\n    /**\r\n     * Parses a dependency string into its components.\r\n     * The `dependency` is a string of the format `'module-name'` or `'module-name@version'`.\r\n     * See documentation for `Plugin.versionParse` for a description of the format.\r\n     * This function can also handle dependencies that are already resolved (e.g. a module object).\r\n     * @method dependencyParse\r\n     * @param dependency {string} The dependency of the format `'module-name'` or `'module-name@version'`.\r\n     * @return {object} The dependency parsed into its components.\r\n     */\r\n    Plugin.dependencyParse = function(dependency) {\r\n        if (Common.isString(dependency)) {\r\n            var pattern = /^[\\w-]+(@(\\*|[\\^~]?\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-]+)?))?$/;\r\n\r\n            if (!pattern.test(dependency)) {\r\n                Common.warn('Plugin.dependencyParse:', dependency, 'is not a valid dependency string.');\r\n            }\r\n\r\n            return {\r\n                name: dependency.split('@')[0],\r\n                range: dependency.split('@')[1] || '*'\r\n            };\r\n        }\r\n\r\n        return {\r\n            name: dependency.name,\r\n            range: dependency.range || dependency.version\r\n        };\r\n    };\r\n\r\n    /**\r\n     * Parses a version string into its components.  \r\n     * Versions are strictly of the format `x.y.z` (as in [semver](http://semver.org/)).\r\n     * Versions may optionally have a prerelease tag in the format `x.y.z-alpha`.\r\n     * Ranges are a strict subset of [npm ranges](https://docs.npmjs.com/misc/semver#advanced-range-syntax).\r\n     * Only the following range types are supported:\r\n     * - Tilde ranges e.g. `~1.2.3`\r\n     * - Caret ranges e.g. `^1.2.3`\r\n     * - Exact version e.g. `1.2.3`\r\n     * - Any version `*`\r\n     * @method versionParse\r\n     * @param range {string} The version string.\r\n     * @return {object} The version range parsed into its components.\r\n     */\r\n    Plugin.versionParse = function(range) {\r\n        var pattern = /^\\*|[\\^~]?\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-]+)?$/;\r\n\r\n        if (!pattern.test(range)) {\r\n            Common.warn('Plugin.versionParse:', range, 'is not a valid version or range.');\r\n        }\r\n\r\n        var identifiers = range.split('-');\r\n        range = identifiers[0];\r\n\r\n        var isRange = isNaN(Number(range[0])),\r\n            version = isRange ? range.substr(1) : range,\r\n            parts = Common.map(version.split('.'), function(part) {\r\n                return Number(part);\r\n            });\r\n\r\n        return {\r\n            isRange: isRange,\r\n            version: version,\r\n            range: range,\r\n            operator: isRange ? range[0] : '',\r\n            parts: parts,\r\n            prerelease: identifiers[1],\r\n            number: parts[0] * 1e8 + parts[1] * 1e4 + parts[2]\r\n        };\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if `version` satisfies the given `range`.\r\n     * See documentation for `Plugin.versionParse` for a description of the format.\r\n     * If a version or range is not specified, then any version (`*`) is assumed to satisfy.\r\n     * @method versionSatisfies\r\n     * @param version {string} The version string.\r\n     * @param range {string} The range string.\r\n     * @return {boolean} `true` if `version` satisfies `range`, otherwise `false`.\r\n     */\r\n    Plugin.versionSatisfies = function(version, range) {\r\n        range = range || '*';\r\n\r\n        var rangeParsed = Plugin.versionParse(range),\r\n            rangeParts = rangeParsed.parts,\r\n            versionParsed = Plugin.versionParse(version),\r\n            versionParts = versionParsed.parts;\r\n\r\n        if (rangeParsed.isRange) {\r\n            if (rangeParsed.operator === '*' || version === '*') {\r\n                return true;\r\n            }\r\n\r\n            if (rangeParsed.operator === '~') {\r\n                return versionParts[0] === rangeParts[0] && versionParts[1] === rangeParts[1] && versionParts[2] >= rangeParts[2];\r\n            }\r\n\r\n            if (rangeParsed.operator === '^') {\r\n                if (rangeParts[0] > 0) {\r\n                    return versionParts[0] === rangeParts[0] && versionParsed.number >= rangeParsed.number;\r\n                }\r\n\r\n                if (rangeParts[1] > 0) {\r\n                    return versionParts[1] === rangeParts[1] && versionParts[2] >= rangeParts[2];\r\n                }\r\n\r\n                return versionParts[2] === rangeParts[2];\r\n            }\r\n        }\r\n\r\n        return version === range || version === '*';\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9QbHVnaW4uanM/NGZkMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxnRkFBVTs7QUFFL0I7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE9BQU87QUFDakMsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixvQkFBb0IsT0FBTztBQUMzQixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QiwrQkFBK0I7QUFDdEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE9BQU87QUFDakMsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE9BQU87QUFDNUIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUIscUJBQXFCLE9BQU87QUFDNUIsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL2xpYi9jb3JlL1BsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLlBsdWdpbmAgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJpbmcgYW5kIGluc3RhbGxpbmcgcGx1Z2lucyBvbiBtb2R1bGVzLlxyXG4qXHJcbiogQGNsYXNzIFBsdWdpblxyXG4qL1xyXG5cclxudmFyIFBsdWdpbiA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbHVnaW47XHJcblxyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICBQbHVnaW4uX3JlZ2lzdHJ5ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBwbHVnaW4gb2JqZWN0IHNvIGl0IGNhbiBiZSByZXNvbHZlZCBsYXRlciBieSBuYW1lLlxyXG4gICAgICogQG1ldGhvZCByZWdpc3RlclxyXG4gICAgICogQHBhcmFtIHBsdWdpbiB7fSBUaGUgcGx1Z2luIHRvIHJlZ2lzdGVyLlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcGx1Z2luLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4ucmVnaXN0ZXIgPSBmdW5jdGlvbihwbHVnaW4pIHtcclxuICAgICAgICBpZiAoIVBsdWdpbi5pc1BsdWdpbihwbHVnaW4pKSB7XHJcbiAgICAgICAgICAgIENvbW1vbi53YXJuKCdQbHVnaW4ucmVnaXN0ZXI6JywgUGx1Z2luLnRvU3RyaW5nKHBsdWdpbiksICdkb2VzIG5vdCBpbXBsZW1lbnQgYWxsIHJlcXVpcmVkIGZpZWxkcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwbHVnaW4ubmFtZSBpbiBQbHVnaW4uX3JlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkID0gUGx1Z2luLl9yZWdpc3RyeVtwbHVnaW4ubmFtZV0sXHJcbiAgICAgICAgICAgICAgICBwbHVnaW5WZXJzaW9uID0gUGx1Z2luLnZlcnNpb25QYXJzZShwbHVnaW4udmVyc2lvbikubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZFZlcnNpb24gPSBQbHVnaW4udmVyc2lvblBhcnNlKHJlZ2lzdGVyZWQudmVyc2lvbikubnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBsdWdpblZlcnNpb24gPiByZWdpc3RlcmVkVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgQ29tbW9uLndhcm4oJ1BsdWdpbi5yZWdpc3RlcjonLCBQbHVnaW4udG9TdHJpbmcocmVnaXN0ZXJlZCksICd3YXMgdXBncmFkZWQgdG8nLCBQbHVnaW4udG9TdHJpbmcocGx1Z2luKSk7XHJcbiAgICAgICAgICAgICAgICBQbHVnaW4uX3JlZ2lzdHJ5W3BsdWdpbi5uYW1lXSA9IHBsdWdpbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnaW5WZXJzaW9uIDwgcmVnaXN0ZXJlZFZlcnNpb24pIHtcclxuICAgICAgICAgICAgICAgIENvbW1vbi53YXJuKCdQbHVnaW4ucmVnaXN0ZXI6JywgUGx1Z2luLnRvU3RyaW5nKHJlZ2lzdGVyZWQpLCAnY2FuIG5vdCBiZSBkb3duZ3JhZGVkIHRvJywgUGx1Z2luLnRvU3RyaW5nKHBsdWdpbikpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbiAhPT0gcmVnaXN0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgQ29tbW9uLndhcm4oJ1BsdWdpbi5yZWdpc3RlcjonLCBQbHVnaW4udG9TdHJpbmcocGx1Z2luKSwgJ2lzIGFscmVhZHkgcmVnaXN0ZXJlZCB0byBkaWZmZXJlbnQgcGx1Z2luIG9iamVjdCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgUGx1Z2luLl9yZWdpc3RyeVtwbHVnaW4ubmFtZV0gPSBwbHVnaW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGx1Z2luO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIGEgZGVwZW5kZW5jeSB0byBhIHBsdWdpbiBvYmplY3QgZnJvbSB0aGUgcmVnaXN0cnkgaWYgaXQgZXhpc3RzLiBcclxuICAgICAqIFRoZSBgZGVwZW5kZW5jeWAgbWF5IGNvbnRhaW4gYSB2ZXJzaW9uLCBidXQgb25seSB0aGUgbmFtZSBtYXR0ZXJzIHdoZW4gcmVzb2x2aW5nLlxyXG4gICAgICogQG1ldGhvZCByZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0gZGVwZW5kZW5jeSB7c3RyaW5nfSBUaGUgZGVwZW5kZW5jeS5cclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHBsdWdpbiBpZiByZXNvbHZlZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4ucmVzb2x2ZSA9IGZ1bmN0aW9uKGRlcGVuZGVuY3kpIHtcclxuICAgICAgICByZXR1cm4gUGx1Z2luLl9yZWdpc3RyeVtQbHVnaW4uZGVwZW5kZW5jeVBhcnNlKGRlcGVuZGVuY3kpLm5hbWVdO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBwcmV0dHkgcHJpbnRlZCBwbHVnaW4gbmFtZSBhbmQgdmVyc2lvbi5cclxuICAgICAqIEBtZXRob2QgdG9TdHJpbmdcclxuICAgICAqIEBwYXJhbSBwbHVnaW4ge30gVGhlIHBsdWdpbi5cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJldHR5IHByaW50ZWQgcGx1Z2luIG5hbWUgYW5kIHZlcnNpb24uXHJcbiAgICAgKi9cclxuICAgIFBsdWdpbi50b1N0cmluZyA9IGZ1bmN0aW9uKHBsdWdpbikge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJyA/IHBsdWdpbiA6IChwbHVnaW4ubmFtZSB8fCAnYW5vbnltb3VzJykgKyAnQCcgKyAocGx1Z2luLnZlcnNpb24gfHwgcGx1Z2luLnJhbmdlIHx8ICcwLjAuMCcpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgbWVldHMgdGhlIG1pbmltdW0gc3RhbmRhcmQgdG8gYmUgY29uc2lkZXJlZCBhIHBsdWdpbi5cclxuICAgICAqIFRoaXMgbWVhbnMgaXQgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogLSBgbmFtZWBcclxuICAgICAqIC0gYHZlcnNpb25gXHJcbiAgICAgKiAtIGBpbnN0YWxsYFxyXG4gICAgICogQG1ldGhvZCBpc1BsdWdpblxyXG4gICAgICogQHBhcmFtIG9iaiB7fSBUaGUgb2JqIHRvIHRlc3QuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBjYW4gYmUgY29uc2lkZXJlZCBhIHBsdWdpbiBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgUGx1Z2luLmlzUGx1Z2luID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmoubmFtZSAmJiBvYmoudmVyc2lvbiAmJiBvYmouaW5zdGFsbDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBgbmFtZWAgYmVlbiBpbnN0YWxsZWQgb24gYG1vZHVsZWAuXHJcbiAgICAgKiBAbWV0aG9kIGlzVXNlZFxyXG4gICAgICogQHBhcmFtIG1vZHVsZSB7fSBUaGUgbW9kdWxlLlxyXG4gICAgICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIHBsdWdpbiBuYW1lLlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGEgcGx1Z2luIHdpdGggdGhlIGdpdmVuIGBuYW1lYCBiZWVuIGluc3RhbGxlZCBvbiBgbW9kdWxlYCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIFBsdWdpbi5pc1VzZWQgPSBmdW5jdGlvbihtb2R1bGUsIG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlLnVzZWQuaW5kZXhPZihuYW1lKSA+IC0xO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGBwbHVnaW4uZm9yYCBpcyBhcHBsaWNhYmxlIHRvIGBtb2R1bGVgIGJ5IGNvbXBhcmluZyBhZ2FpbnN0IGBtb2R1bGUubmFtZWAgYW5kIGBtb2R1bGUudmVyc2lvbmAuXHJcbiAgICAgKiBJZiBgcGx1Z2luLmZvcmAgaXMgbm90IHNwZWNpZmllZCB0aGVuIGl0IGlzIGFzc3VtZWQgdG8gYmUgYXBwbGljYWJsZS5cclxuICAgICAqIFRoZSB2YWx1ZSBvZiBgcGx1Z2luLmZvcmAgaXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdCBgJ21vZHVsZS1uYW1lJ2Agb3IgYCdtb2R1bGUtbmFtZUB2ZXJzaW9uJ2AuXHJcbiAgICAgKiBAbWV0aG9kIGlzRm9yXHJcbiAgICAgKiBAcGFyYW0gcGx1Z2luIHt9IFRoZSBwbHVnaW4uXHJcbiAgICAgKiBAcGFyYW0gbW9kdWxlIHt9IFRoZSBtb2R1bGUuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYHBsdWdpbi5mb3JgIGlzIGFwcGxpY2FibGUgdG8gYG1vZHVsZWAsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4uaXNGb3IgPSBmdW5jdGlvbihwbHVnaW4sIG1vZHVsZSkge1xyXG4gICAgICAgIHZhciBwYXJzZWQgPSBwbHVnaW4uZm9yICYmIFBsdWdpbi5kZXBlbmRlbmN5UGFyc2UocGx1Z2luLmZvcik7XHJcbiAgICAgICAgcmV0dXJuICFwbHVnaW4uZm9yIHx8IChtb2R1bGUubmFtZSA9PT0gcGFyc2VkLm5hbWUgJiYgUGx1Z2luLnZlcnNpb25TYXRpc2ZpZXMobW9kdWxlLnZlcnNpb24sIHBhcnNlZC5yYW5nZSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc3RhbGxzIHRoZSBwbHVnaW5zIGJ5IGNhbGxpbmcgYHBsdWdpbi5pbnN0YWxsYCBvbiBlYWNoIHBsdWdpbiBzcGVjaWZpZWQgaW4gYHBsdWdpbnNgIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIGBtb2R1bGUudXNlc2AuXHJcbiAgICAgKiBGb3IgaW5zdGFsbGluZyBwbHVnaW5zIG9uIGBNYXR0ZXJgIHNlZSB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb24gYE1hdHRlci51c2VgLlxyXG4gICAgICogUGx1Z2lucyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBieSB0aGVpciBuYW1lIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW4gb2JqZWN0LlxyXG4gICAgICogUGx1Z2lucyB0aGVtc2VsdmVzIG1heSBzcGVjaWZ5IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLCBidXQgZWFjaCBwbHVnaW4gaXMgaW5zdGFsbGVkIG9ubHkgb25jZS5cclxuICAgICAqIE9yZGVyIGlzIGltcG9ydGFudCwgYSB0b3BvbG9naWNhbCBzb3J0IGlzIHBlcmZvcm1lZCB0byBmaW5kIHRoZSBiZXN0IHJlc3VsdGluZyBvcmRlciBvZiBpbnN0YWxsYXRpb24uXHJcbiAgICAgKiBUaGlzIHNvcnRpbmcgYXR0ZW1wdHMgdG8gc2F0aXNmeSBldmVyeSBkZXBlbmRlbmN5J3MgcmVxdWVzdGVkIG9yZGVyaW5nLCBidXQgbWF5IG5vdCBiZSBleGFjdCBpbiBhbGwgY2FzZXMuXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgdGhlIHJlc3VsdGluZyBzdGF0dXMgb2YgZWFjaCBkZXBlbmRlbmN5IGluIHRoZSBjb25zb2xlLCBhbG9uZyB3aXRoIGFueSB3YXJuaW5ncy5cclxuICAgICAqIC0gQSBncmVlbiB0aWNrIOKchSBpbmRpY2F0ZXMgYSBkZXBlbmRlbmN5IHdhcyByZXNvbHZlZCBhbmQgaW5zdGFsbGVkLlxyXG4gICAgICogLSBBbiBvcmFuZ2UgZGlhbW9uZCDwn5S2IGluZGljYXRlcyBhIGRlcGVuZGVuY3kgd2FzIHJlc29sdmVkIGJ1dCBhIHdhcm5pbmcgd2FzIHRocm93biBmb3IgaXQgb3Igb25lIGlmIGl0cyBkZXBlbmRlbmNpZXMuXHJcbiAgICAgKiAtIEEgcmVkIGNyb3NzIOKdjCBpbmRpY2F0ZXMgYSBkZXBlbmRlbmN5IGNvdWxkIG5vdCBiZSByZXNvbHZlZC5cclxuICAgICAqIEF2b2lkIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBtb2R1bGUgdW5sZXNzIHlvdSBpbnRlbmQgdG8gbWFudWFsbHkgY29udHJvbCBpbnN0YWxsYXRpb24gb3JkZXIuXHJcbiAgICAgKiBAbWV0aG9kIHVzZVxyXG4gICAgICogQHBhcmFtIG1vZHVsZSB7fSBUaGUgbW9kdWxlIGluc3RhbGwgcGx1Z2lucyBvbi5cclxuICAgICAqIEBwYXJhbSBbcGx1Z2lucz1tb2R1bGUudXNlc10ge30gVGhlIHBsdWdpbnMgdG8gaW5zdGFsbCBvbiBtb2R1bGUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBgbW9kdWxlLnVzZXNgKS5cclxuICAgICAqL1xyXG4gICAgUGx1Z2luLnVzZSA9IGZ1bmN0aW9uKG1vZHVsZSwgcGx1Z2lucykge1xyXG4gICAgICAgIG1vZHVsZS51c2VzID0gKG1vZHVsZS51c2VzIHx8IFtdKS5jb25jYXQocGx1Z2lucyB8fCBbXSk7XHJcblxyXG4gICAgICAgIGlmIChtb2R1bGUudXNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgQ29tbW9uLndhcm4oJ1BsdWdpbi51c2U6JywgUGx1Z2luLnRvU3RyaW5nKG1vZHVsZSksICdkb2VzIG5vdCBzcGVjaWZ5IGFueSBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IFBsdWdpbi5kZXBlbmRlbmNpZXMobW9kdWxlKSxcclxuICAgICAgICAgICAgc29ydGVkRGVwZW5kZW5jaWVzID0gQ29tbW9uLnRvcG9sb2dpY2FsU29ydChkZXBlbmRlbmNpZXMpLFxyXG4gICAgICAgICAgICBzdGF0dXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgICAgaWYgKHNvcnRlZERlcGVuZGVuY2llc1tpXSA9PT0gbW9kdWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGx1Z2luID0gUGx1Z2luLnJlc29sdmUoc29ydGVkRGVwZW5kZW5jaWVzW2ldKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMucHVzaCgn4p2MICcgKyBzb3J0ZWREZXBlbmRlbmNpZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChQbHVnaW4uaXNVc2VkKG1vZHVsZSwgcGx1Z2luLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFQbHVnaW4uaXNGb3IocGx1Z2luLCBtb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICBDb21tb24ud2FybignUGx1Z2luLnVzZTonLCBQbHVnaW4udG9TdHJpbmcocGx1Z2luKSwgJ2lzIGZvcicsIHBsdWdpbi5mb3IsICdidXQgaW5zdGFsbGVkIG9uJywgUGx1Z2luLnRvU3RyaW5nKG1vZHVsZSkgKyAnLicpO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLl93YXJuZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLmluc3RhbGwpIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbi5pbnN0YWxsKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDb21tb24ud2FybignUGx1Z2luLnVzZTonLCBQbHVnaW4udG9TdHJpbmcocGx1Z2luKSwgJ2RvZXMgbm90IHNwZWNpZnkgYW4gaW5zdGFsbCBmdW5jdGlvbi4nKTtcclxuICAgICAgICAgICAgICAgIHBsdWdpbi5fd2FybmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5fd2FybmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMucHVzaCgn8J+UtiAnICsgUGx1Z2luLnRvU3RyaW5nKHBsdWdpbikpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHBsdWdpbi5fd2FybmVkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLnB1c2goJ+KchSAnICsgUGx1Z2luLnRvU3RyaW5nKHBsdWdpbikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtb2R1bGUudXNlZC5wdXNoKHBsdWdpbi5uYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMubGVuZ3RoID4gMCAmJiAhcGx1Z2luLnNpbGVudCkge1xyXG4gICAgICAgICAgICBDb21tb24uaW5mbyhzdGF0dXMuam9pbignICAnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY3Vyc2l2ZWx5IGZpbmRzIGFsbCBvZiBhIG1vZHVsZSdzIGRlcGVuZGVuY2llcyBhbmQgcmV0dXJucyBhIGZsYXQgZGVwZW5kZW5jeSBncmFwaC5cclxuICAgICAqIEBtZXRob2QgZGVwZW5kZW5jaWVzXHJcbiAgICAgKiBAcGFyYW0gbW9kdWxlIHt9IFRoZSBtb2R1bGUuXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEEgZGVwZW5kZW5jeSBncmFwaC5cclxuICAgICAqL1xyXG4gICAgUGx1Z2luLmRlcGVuZGVuY2llcyA9IGZ1bmN0aW9uKG1vZHVsZSwgdHJhY2tlZCkge1xyXG4gICAgICAgIHZhciBwYXJzZWRCYXNlID0gUGx1Z2luLmRlcGVuZGVuY3lQYXJzZShtb2R1bGUpLFxyXG4gICAgICAgICAgICBuYW1lID0gcGFyc2VkQmFzZS5uYW1lO1xyXG5cclxuICAgICAgICB0cmFja2VkID0gdHJhY2tlZCB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKG5hbWUgaW4gdHJhY2tlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtb2R1bGUgPSBQbHVnaW4ucmVzb2x2ZShtb2R1bGUpIHx8IG1vZHVsZTtcclxuXHJcbiAgICAgICAgdHJhY2tlZFtuYW1lXSA9IENvbW1vbi5tYXAobW9kdWxlLnVzZXMgfHwgW10sIGZ1bmN0aW9uKGRlcGVuZGVuY3kpIHtcclxuICAgICAgICAgICAgaWYgKFBsdWdpbi5pc1BsdWdpbihkZXBlbmRlbmN5KSkge1xyXG4gICAgICAgICAgICAgICAgUGx1Z2luLnJlZ2lzdGVyKGRlcGVuZGVuY3kpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyc2VkID0gUGx1Z2luLmRlcGVuZGVuY3lQYXJzZShkZXBlbmRlbmN5KSxcclxuICAgICAgICAgICAgICAgIHJlc29sdmVkID0gUGx1Z2luLnJlc29sdmUoZGVwZW5kZW5jeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzb2x2ZWQgJiYgIVBsdWdpbi52ZXJzaW9uU2F0aXNmaWVzKHJlc29sdmVkLnZlcnNpb24sIHBhcnNlZC5yYW5nZSkpIHtcclxuICAgICAgICAgICAgICAgIENvbW1vbi53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICdQbHVnaW4uZGVwZW5kZW5jaWVzOicsIFBsdWdpbi50b1N0cmluZyhyZXNvbHZlZCksICdkb2VzIG5vdCBzYXRpc2Z5JyxcclxuICAgICAgICAgICAgICAgICAgICBQbHVnaW4udG9TdHJpbmcocGFyc2VkKSwgJ3VzZWQgYnknLCBQbHVnaW4udG9TdHJpbmcocGFyc2VkQmFzZSkgKyAnLidcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWQuX3dhcm5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX3dhcm5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICBDb21tb24ud2FybihcclxuICAgICAgICAgICAgICAgICAgICAnUGx1Z2luLmRlcGVuZGVuY2llczonLCBQbHVnaW4udG9TdHJpbmcoZGVwZW5kZW5jeSksICd1c2VkIGJ5JyxcclxuICAgICAgICAgICAgICAgICAgICBQbHVnaW4udG9TdHJpbmcocGFyc2VkQmFzZSksICdjb3VsZCBub3QgYmUgcmVzb2x2ZWQuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX3dhcm5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQubmFtZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFja2VkW25hbWVdLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIFBsdWdpbi5kZXBlbmRlbmNpZXModHJhY2tlZFtuYW1lXVtpXSwgdHJhY2tlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJhY2tlZDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBkZXBlbmRlbmN5IHN0cmluZyBpbnRvIGl0cyBjb21wb25lbnRzLlxyXG4gICAgICogVGhlIGBkZXBlbmRlbmN5YCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0IGAnbW9kdWxlLW5hbWUnYCBvciBgJ21vZHVsZS1uYW1lQHZlcnNpb24nYC5cclxuICAgICAqIFNlZSBkb2N1bWVudGF0aW9uIGZvciBgUGx1Z2luLnZlcnNpb25QYXJzZWAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdC5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gaGFuZGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHJlc29sdmVkIChlLmcuIGEgbW9kdWxlIG9iamVjdCkuXHJcbiAgICAgKiBAbWV0aG9kIGRlcGVuZGVuY3lQYXJzZVxyXG4gICAgICogQHBhcmFtIGRlcGVuZGVuY3kge3N0cmluZ30gVGhlIGRlcGVuZGVuY3kgb2YgdGhlIGZvcm1hdCBgJ21vZHVsZS1uYW1lJ2Agb3IgYCdtb2R1bGUtbmFtZUB2ZXJzaW9uJ2AuXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBkZXBlbmRlbmN5IHBhcnNlZCBpbnRvIGl0cyBjb21wb25lbnRzLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4uZGVwZW5kZW5jeVBhcnNlID0gZnVuY3Rpb24oZGVwZW5kZW5jeSkge1xyXG4gICAgICAgIGlmIChDb21tb24uaXNTdHJpbmcoZGVwZW5kZW5jeSkpIHtcclxuICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAvXltcXHctXSsoQChcXCp8W1xcXn5dP1xcZCtcXC5cXGQrXFwuXFxkKygtWzAtOUEtWmEtei1dKyk/KSk/JC87XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4udGVzdChkZXBlbmRlbmN5KSkge1xyXG4gICAgICAgICAgICAgICAgQ29tbW9uLndhcm4oJ1BsdWdpbi5kZXBlbmRlbmN5UGFyc2U6JywgZGVwZW5kZW5jeSwgJ2lzIG5vdCBhIHZhbGlkIGRlcGVuZGVuY3kgc3RyaW5nLicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGVwZW5kZW5jeS5zcGxpdCgnQCcpWzBdLFxyXG4gICAgICAgICAgICAgICAgcmFuZ2U6IGRlcGVuZGVuY3kuc3BsaXQoJ0AnKVsxXSB8fCAnKidcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IGRlcGVuZGVuY3kubmFtZSxcclxuICAgICAgICAgICAgcmFuZ2U6IGRlcGVuZGVuY3kucmFuZ2UgfHwgZGVwZW5kZW5jeS52ZXJzaW9uXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSB2ZXJzaW9uIHN0cmluZyBpbnRvIGl0cyBjb21wb25lbnRzLiAgXHJcbiAgICAgKiBWZXJzaW9ucyBhcmUgc3RyaWN0bHkgb2YgdGhlIGZvcm1hdCBgeC55LnpgIChhcyBpbiBbc2VtdmVyXShodHRwOi8vc2VtdmVyLm9yZy8pKS5cclxuICAgICAqIFZlcnNpb25zIG1heSBvcHRpb25hbGx5IGhhdmUgYSBwcmVyZWxlYXNlIHRhZyBpbiB0aGUgZm9ybWF0IGB4Lnkuei1hbHBoYWAuXHJcbiAgICAgKiBSYW5nZXMgYXJlIGEgc3RyaWN0IHN1YnNldCBvZiBbbnBtIHJhbmdlc10oaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9taXNjL3NlbXZlciNhZHZhbmNlZC1yYW5nZS1zeW50YXgpLlxyXG4gICAgICogT25seSB0aGUgZm9sbG93aW5nIHJhbmdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XHJcbiAgICAgKiAtIFRpbGRlIHJhbmdlcyBlLmcuIGB+MS4yLjNgXHJcbiAgICAgKiAtIENhcmV0IHJhbmdlcyBlLmcuIGBeMS4yLjNgXHJcbiAgICAgKiAtIEV4YWN0IHZlcnNpb24gZS5nLiBgMS4yLjNgXHJcbiAgICAgKiAtIEFueSB2ZXJzaW9uIGAqYFxyXG4gICAgICogQG1ldGhvZCB2ZXJzaW9uUGFyc2VcclxuICAgICAqIEBwYXJhbSByYW5nZSB7c3RyaW5nfSBUaGUgdmVyc2lvbiBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSB2ZXJzaW9uIHJhbmdlIHBhcnNlZCBpbnRvIGl0cyBjb21wb25lbnRzLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4udmVyc2lvblBhcnNlID0gZnVuY3Rpb24ocmFuZ2UpIHtcclxuICAgICAgICB2YXIgcGF0dGVybiA9IC9eXFwqfFtcXF5+XT9cXGQrXFwuXFxkK1xcLlxcZCsoLVswLTlBLVphLXotXSspPyQvO1xyXG5cclxuICAgICAgICBpZiAoIXBhdHRlcm4udGVzdChyYW5nZSkpIHtcclxuICAgICAgICAgICAgQ29tbW9uLndhcm4oJ1BsdWdpbi52ZXJzaW9uUGFyc2U6JywgcmFuZ2UsICdpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG9yIHJhbmdlLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlkZW50aWZpZXJzID0gcmFuZ2Uuc3BsaXQoJy0nKTtcclxuICAgICAgICByYW5nZSA9IGlkZW50aWZpZXJzWzBdO1xyXG5cclxuICAgICAgICB2YXIgaXNSYW5nZSA9IGlzTmFOKE51bWJlcihyYW5nZVswXSkpLFxyXG4gICAgICAgICAgICB2ZXJzaW9uID0gaXNSYW5nZSA/IHJhbmdlLnN1YnN0cigxKSA6IHJhbmdlLFxyXG4gICAgICAgICAgICBwYXJ0cyA9IENvbW1vbi5tYXAodmVyc2lvbi5zcGxpdCgnLicpLCBmdW5jdGlvbihwYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHBhcnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaXNSYW5nZTogaXNSYW5nZSxcclxuICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcclxuICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogaXNSYW5nZSA/IHJhbmdlWzBdIDogJycsXHJcbiAgICAgICAgICAgIHBhcnRzOiBwYXJ0cyxcclxuICAgICAgICAgICAgcHJlcmVsZWFzZTogaWRlbnRpZmllcnNbMV0sXHJcbiAgICAgICAgICAgIG51bWJlcjogcGFydHNbMF0gKiAxZTggKyBwYXJ0c1sxXSAqIDFlNCArIHBhcnRzWzJdXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgdmVyc2lvbmAgc2F0aXNmaWVzIHRoZSBnaXZlbiBgcmFuZ2VgLlxyXG4gICAgICogU2VlIGRvY3VtZW50YXRpb24gZm9yIGBQbHVnaW4udmVyc2lvblBhcnNlYCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0LlxyXG4gICAgICogSWYgYSB2ZXJzaW9uIG9yIHJhbmdlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gYW55IHZlcnNpb24gKGAqYCkgaXMgYXNzdW1lZCB0byBzYXRpc2Z5LlxyXG4gICAgICogQG1ldGhvZCB2ZXJzaW9uU2F0aXNmaWVzXHJcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiB7c3RyaW5nfSBUaGUgdmVyc2lvbiBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gcmFuZ2Uge3N0cmluZ30gVGhlIHJhbmdlIHN0cmluZy5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBgdmVyc2lvbmAgc2F0aXNmaWVzIGByYW5nZWAsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBQbHVnaW4udmVyc2lvblNhdGlzZmllcyA9IGZ1bmN0aW9uKHZlcnNpb24sIHJhbmdlKSB7XHJcbiAgICAgICAgcmFuZ2UgPSByYW5nZSB8fCAnKic7XHJcblxyXG4gICAgICAgIHZhciByYW5nZVBhcnNlZCA9IFBsdWdpbi52ZXJzaW9uUGFyc2UocmFuZ2UpLFxyXG4gICAgICAgICAgICByYW5nZVBhcnRzID0gcmFuZ2VQYXJzZWQucGFydHMsXHJcbiAgICAgICAgICAgIHZlcnNpb25QYXJzZWQgPSBQbHVnaW4udmVyc2lvblBhcnNlKHZlcnNpb24pLFxyXG4gICAgICAgICAgICB2ZXJzaW9uUGFydHMgPSB2ZXJzaW9uUGFyc2VkLnBhcnRzO1xyXG5cclxuICAgICAgICBpZiAocmFuZ2VQYXJzZWQuaXNSYW5nZSkge1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VQYXJzZWQub3BlcmF0b3IgPT09ICcqJyB8fCB2ZXJzaW9uID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2VQYXJzZWQub3BlcmF0b3IgPT09ICd+Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25QYXJ0c1swXSA9PT0gcmFuZ2VQYXJ0c1swXSAmJiB2ZXJzaW9uUGFydHNbMV0gPT09IHJhbmdlUGFydHNbMV0gJiYgdmVyc2lvblBhcnRzWzJdID49IHJhbmdlUGFydHNbMl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyYW5nZVBhcnNlZC5vcGVyYXRvciA9PT0gJ14nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VQYXJ0c1swXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvblBhcnRzWzBdID09PSByYW5nZVBhcnRzWzBdICYmIHZlcnNpb25QYXJzZWQubnVtYmVyID49IHJhbmdlUGFyc2VkLm51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VQYXJ0c1sxXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvblBhcnRzWzFdID09PSByYW5nZVBhcnRzWzFdICYmIHZlcnNpb25QYXJ0c1syXSA+PSByYW5nZVBhcnRzWzJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uUGFydHNbMl0gPT09IHJhbmdlUGFydHNbMl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2ZXJzaW9uID09PSByYW5nZSB8fCB2ZXJzaW9uID09PSAnKic7XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Plugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Sleeping` module contains methods to manage the sleeping state of bodies.\r\n*\r\n* @class Sleeping\r\n*/\r\n\r\nvar Sleeping = {};\r\n\r\nmodule.exports = Sleeping;\r\n\r\nvar Events = __webpack_require__(/*! ./Events */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Events.js\");\r\n\r\n(function() {\r\n\r\n    Sleeping._motionWakeThreshold = 0.18;\r\n    Sleeping._motionSleepThreshold = 0.08;\r\n    Sleeping._minBias = 0.9;\r\n\r\n    /**\r\n     * Puts bodies to sleep or wakes them up depending on their motion.\r\n     * @method update\r\n     * @param {body[]} bodies\r\n     * @param {number} timeScale\r\n     */\r\n    Sleeping.update = function(bodies, timeScale) {\r\n        var timeFactor = timeScale * timeScale * timeScale;\r\n\r\n        // update bodies sleeping status\r\n        for (var i = 0; i < bodies.length; i++) {\r\n            var body = bodies[i],\r\n                motion = body.speed * body.speed + body.angularSpeed * body.angularSpeed;\r\n\r\n            // wake up bodies if they have a force applied\r\n            if (body.force.x !== 0 || body.force.y !== 0) {\r\n                Sleeping.set(body, false);\r\n                continue;\r\n            }\r\n\r\n            var minMotion = Math.min(body.motion, motion),\r\n                maxMotion = Math.max(body.motion, motion);\r\n        \r\n            // biased average motion estimation between frames\r\n            body.motion = Sleeping._minBias * minMotion + (1 - Sleeping._minBias) * maxMotion;\r\n            \r\n            if (body.sleepThreshold > 0 && body.motion < Sleeping._motionSleepThreshold * timeFactor) {\r\n                body.sleepCounter += 1;\r\n                \r\n                if (body.sleepCounter >= body.sleepThreshold)\r\n                    Sleeping.set(body, true);\r\n            } else if (body.sleepCounter > 0) {\r\n                body.sleepCounter -= 1;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Given a set of colliding pairs, wakes the sleeping bodies involved.\r\n     * @method afterCollisions\r\n     * @param {pair[]} pairs\r\n     * @param {number} timeScale\r\n     */\r\n    Sleeping.afterCollisions = function(pairs, timeScale) {\r\n        var timeFactor = timeScale * timeScale * timeScale;\r\n\r\n        // wake up bodies involved in collisions\r\n        for (var i = 0; i < pairs.length; i++) {\r\n            var pair = pairs[i];\r\n            \r\n            // don't wake inactive pairs\r\n            if (!pair.isActive)\r\n                continue;\r\n\r\n            var collision = pair.collision,\r\n                bodyA = collision.bodyA.parent, \r\n                bodyB = collision.bodyB.parent;\r\n        \r\n            // don't wake if at least one body is static\r\n            if ((bodyA.isSleeping && bodyB.isSleeping) || bodyA.isStatic || bodyB.isStatic)\r\n                continue;\r\n        \r\n            if (bodyA.isSleeping || bodyB.isSleeping) {\r\n                var sleepingBody = (bodyA.isSleeping && !bodyA.isStatic) ? bodyA : bodyB,\r\n                    movingBody = sleepingBody === bodyA ? bodyB : bodyA;\r\n\r\n                if (!sleepingBody.isStatic && movingBody.motion > Sleeping._motionWakeThreshold * timeFactor) {\r\n                    Sleeping.set(sleepingBody, false);\r\n                }\r\n            }\r\n        }\r\n    };\r\n  \r\n    /**\r\n     * Set a body as sleeping or awake.\r\n     * @method set\r\n     * @param {body} body\r\n     * @param {boolean} isSleeping\r\n     */\r\n    Sleeping.set = function(body, isSleeping) {\r\n        var wasSleeping = body.isSleeping;\r\n\r\n        if (isSleeping) {\r\n            body.isSleeping = true;\r\n            body.sleepCounter = body.sleepThreshold;\r\n\r\n            body.positionImpulse.x = 0;\r\n            body.positionImpulse.y = 0;\r\n\r\n            body.positionPrev.x = body.position.x;\r\n            body.positionPrev.y = body.position.y;\r\n\r\n            body.anglePrev = body.angle;\r\n            body.speed = 0;\r\n            body.angularSpeed = 0;\r\n            body.motion = 0;\r\n\r\n            if (!wasSleeping) {\r\n                Events.trigger(body, 'sleepStart');\r\n            }\r\n        } else {\r\n            body.isSleeping = false;\r\n            body.sleepCounter = 0;\r\n\r\n            if (wasSleeping) {\r\n                Events.trigger(body, 'sleepEnd');\r\n            }\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvY29yZS9TbGVlcGluZy5qcz9kYzI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdGQUFVOztBQUUvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGtCQUFrQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2NvcmUvU2xlZXBpbmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5TbGVlcGluZ2AgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgdG8gbWFuYWdlIHRoZSBzbGVlcGluZyBzdGF0ZSBvZiBib2RpZXMuXHJcbipcclxuKiBAY2xhc3MgU2xlZXBpbmdcclxuKi9cclxuXHJcbnZhciBTbGVlcGluZyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbGVlcGluZztcclxuXHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL0V2ZW50cycpO1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIFNsZWVwaW5nLl9tb3Rpb25XYWtlVGhyZXNob2xkID0gMC4xODtcclxuICAgIFNsZWVwaW5nLl9tb3Rpb25TbGVlcFRocmVzaG9sZCA9IDAuMDg7XHJcbiAgICBTbGVlcGluZy5fbWluQmlhcyA9IDAuOTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgYm9kaWVzIHRvIHNsZWVwIG9yIHdha2VzIHRoZW0gdXAgZGVwZW5kaW5nIG9uIHRoZWlyIG1vdGlvbi5cclxuICAgICAqIEBtZXRob2QgdXBkYXRlXHJcbiAgICAgKiBAcGFyYW0ge2JvZHlbXX0gYm9kaWVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZVNjYWxlXHJcbiAgICAgKi9cclxuICAgIFNsZWVwaW5nLnVwZGF0ZSA9IGZ1bmN0aW9uKGJvZGllcywgdGltZVNjYWxlKSB7XHJcbiAgICAgICAgdmFyIHRpbWVGYWN0b3IgPSB0aW1lU2NhbGUgKiB0aW1lU2NhbGUgKiB0aW1lU2NhbGU7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBib2RpZXMgc2xlZXBpbmcgc3RhdHVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBib2RpZXNbaV0sXHJcbiAgICAgICAgICAgICAgICBtb3Rpb24gPSBib2R5LnNwZWVkICogYm9keS5zcGVlZCArIGJvZHkuYW5ndWxhclNwZWVkICogYm9keS5hbmd1bGFyU3BlZWQ7XHJcblxyXG4gICAgICAgICAgICAvLyB3YWtlIHVwIGJvZGllcyBpZiB0aGV5IGhhdmUgYSBmb3JjZSBhcHBsaWVkXHJcbiAgICAgICAgICAgIGlmIChib2R5LmZvcmNlLnggIT09IDAgfHwgYm9keS5mb3JjZS55ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBTbGVlcGluZy5zZXQoYm9keSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBtaW5Nb3Rpb24gPSBNYXRoLm1pbihib2R5Lm1vdGlvbiwgbW90aW9uKSxcclxuICAgICAgICAgICAgICAgIG1heE1vdGlvbiA9IE1hdGgubWF4KGJvZHkubW90aW9uLCBtb3Rpb24pO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAvLyBiaWFzZWQgYXZlcmFnZSBtb3Rpb24gZXN0aW1hdGlvbiBiZXR3ZWVuIGZyYW1lc1xyXG4gICAgICAgICAgICBib2R5Lm1vdGlvbiA9IFNsZWVwaW5nLl9taW5CaWFzICogbWluTW90aW9uICsgKDEgLSBTbGVlcGluZy5fbWluQmlhcykgKiBtYXhNb3Rpb247XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoYm9keS5zbGVlcFRocmVzaG9sZCA+IDAgJiYgYm9keS5tb3Rpb24gPCBTbGVlcGluZy5fbW90aW9uU2xlZXBUaHJlc2hvbGQgKiB0aW1lRmFjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBib2R5LnNsZWVwQ291bnRlciArPSAxO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoYm9keS5zbGVlcENvdW50ZXIgPj0gYm9keS5zbGVlcFRocmVzaG9sZClcclxuICAgICAgICAgICAgICAgICAgICBTbGVlcGluZy5zZXQoYm9keSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zbGVlcENvdW50ZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBib2R5LnNsZWVwQ291bnRlciAtPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgc2V0IG9mIGNvbGxpZGluZyBwYWlycywgd2FrZXMgdGhlIHNsZWVwaW5nIGJvZGllcyBpbnZvbHZlZC5cclxuICAgICAqIEBtZXRob2QgYWZ0ZXJDb2xsaXNpb25zXHJcbiAgICAgKiBAcGFyYW0ge3BhaXJbXX0gcGFpcnNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU2NhbGVcclxuICAgICAqL1xyXG4gICAgU2xlZXBpbmcuYWZ0ZXJDb2xsaXNpb25zID0gZnVuY3Rpb24ocGFpcnMsIHRpbWVTY2FsZSkge1xyXG4gICAgICAgIHZhciB0aW1lRmFjdG9yID0gdGltZVNjYWxlICogdGltZVNjYWxlICogdGltZVNjYWxlO1xyXG5cclxuICAgICAgICAvLyB3YWtlIHVwIGJvZGllcyBpbnZvbHZlZCBpbiBjb2xsaXNpb25zXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gZG9uJ3Qgd2FrZSBpbmFjdGl2ZSBwYWlyc1xyXG4gICAgICAgICAgICBpZiAoIXBhaXIuaXNBY3RpdmUpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjb2xsaXNpb24gPSBwYWlyLmNvbGxpc2lvbixcclxuICAgICAgICAgICAgICAgIGJvZHlBID0gY29sbGlzaW9uLmJvZHlBLnBhcmVudCwgXHJcbiAgICAgICAgICAgICAgICBib2R5QiA9IGNvbGxpc2lvbi5ib2R5Qi5wYXJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGRvbid0IHdha2UgaWYgYXQgbGVhc3Qgb25lIGJvZHkgaXMgc3RhdGljXHJcbiAgICAgICAgICAgIGlmICgoYm9keUEuaXNTbGVlcGluZyAmJiBib2R5Qi5pc1NsZWVwaW5nKSB8fCBib2R5QS5pc1N0YXRpYyB8fCBib2R5Qi5pc1N0YXRpYylcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoYm9keUEuaXNTbGVlcGluZyB8fCBib2R5Qi5pc1NsZWVwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2xlZXBpbmdCb2R5ID0gKGJvZHlBLmlzU2xlZXBpbmcgJiYgIWJvZHlBLmlzU3RhdGljKSA/IGJvZHlBIDogYm9keUIsXHJcbiAgICAgICAgICAgICAgICAgICAgbW92aW5nQm9keSA9IHNsZWVwaW5nQm9keSA9PT0gYm9keUEgPyBib2R5QiA6IGJvZHlBO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2xlZXBpbmdCb2R5LmlzU3RhdGljICYmIG1vdmluZ0JvZHkubW90aW9uID4gU2xlZXBpbmcuX21vdGlvbldha2VUaHJlc2hvbGQgKiB0aW1lRmFjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU2xlZXBpbmcuc2V0KHNsZWVwaW5nQm9keSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgYm9keSBhcyBzbGVlcGluZyBvciBhd2FrZS5cclxuICAgICAqIEBtZXRob2Qgc2V0XHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTbGVlcGluZ1xyXG4gICAgICovXHJcbiAgICBTbGVlcGluZy5zZXQgPSBmdW5jdGlvbihib2R5LCBpc1NsZWVwaW5nKSB7XHJcbiAgICAgICAgdmFyIHdhc1NsZWVwaW5nID0gYm9keS5pc1NsZWVwaW5nO1xyXG5cclxuICAgICAgICBpZiAoaXNTbGVlcGluZykge1xyXG4gICAgICAgICAgICBib2R5LmlzU2xlZXBpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBib2R5LnNsZWVwQ291bnRlciA9IGJvZHkuc2xlZXBUaHJlc2hvbGQ7XHJcblxyXG4gICAgICAgICAgICBib2R5LnBvc2l0aW9uSW1wdWxzZS54ID0gMDtcclxuICAgICAgICAgICAgYm9keS5wb3NpdGlvbkltcHVsc2UueSA9IDA7XHJcblxyXG4gICAgICAgICAgICBib2R5LnBvc2l0aW9uUHJldi54ID0gYm9keS5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICBib2R5LnBvc2l0aW9uUHJldi55ID0gYm9keS5wb3NpdGlvbi55O1xyXG5cclxuICAgICAgICAgICAgYm9keS5hbmdsZVByZXYgPSBib2R5LmFuZ2xlO1xyXG4gICAgICAgICAgICBib2R5LnNwZWVkID0gMDtcclxuICAgICAgICAgICAgYm9keS5hbmd1bGFyU3BlZWQgPSAwO1xyXG4gICAgICAgICAgICBib2R5Lm1vdGlvbiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXdhc1NsZWVwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBFdmVudHMudHJpZ2dlcihib2R5LCAnc2xlZXBTdGFydCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYm9keS5pc1NsZWVwaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJvZHkuc2xlZXBDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3YXNTbGVlcGluZykge1xyXG4gICAgICAgICAgICAgICAgRXZlbnRzLnRyaWdnZXIoYm9keSwgJ3NsZWVwRW5kJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/core/Sleeping.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Bodies` module contains factory methods for creating rigid body models \r\n* with commonly used body configurations (such as rectangles, circles and other polygons).\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Bodies\r\n*/\r\n\r\n// TODO: true circle bodies\r\n\r\nvar Bodies = {};\r\n\r\nmodule.exports = Bodies;\r\n\r\nvar Vertices = __webpack_require__(/*! ../geometry/Vertices */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Body = __webpack_require__(/*! ../body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar decomp = __webpack_require__(/*! ../../poly-decomp */ \"./node_modules/phaser/src/physics/matter-js/poly-decomp/index.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new rigid body model with a rectangle hull. \r\n     * The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\r\n     * @method rectangle\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param {number} width\r\n     * @param {number} height\r\n     * @param {object} [options]\r\n     * @return {body} A new rectangle body\r\n     */\r\n    Bodies.rectangle = function(x, y, width, height, options) {\r\n        options = options || {};\r\n\r\n        var rectangle = { \r\n            label: 'Rectangle Body',\r\n            position: { x: x, y: y },\r\n            vertices: Vertices.fromPath('L 0 0 L ' + width + ' 0 L ' + width + ' ' + height + ' L 0 ' + height)\r\n        };\r\n\r\n        if (options.chamfer) {\r\n            var chamfer = options.chamfer;\r\n            rectangle.vertices = Vertices.chamfer(rectangle.vertices, chamfer.radius, \r\n                                    chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\r\n            delete options.chamfer;\r\n        }\r\n\r\n        return Body.create(Common.extend({}, rectangle, options));\r\n    };\r\n    \r\n    /**\r\n     * Creates a new rigid body model with a trapezoid hull. \r\n     * The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\r\n     * @method trapezoid\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param {number} width\r\n     * @param {number} height\r\n     * @param {number} slope\r\n     * @param {object} [options]\r\n     * @return {body} A new trapezoid body\r\n     */\r\n    Bodies.trapezoid = function(x, y, width, height, slope, options) {\r\n        options = options || {};\r\n\r\n        slope *= 0.5;\r\n        var roof = (1 - (slope * 2)) * width;\r\n        \r\n        var x1 = width * slope,\r\n            x2 = x1 + roof,\r\n            x3 = x2 + x1,\r\n            verticesPath;\r\n\r\n        if (slope < 0.5) {\r\n            verticesPath = 'L 0 0 L ' + x1 + ' ' + (-height) + ' L ' + x2 + ' ' + (-height) + ' L ' + x3 + ' 0';\r\n        } else {\r\n            verticesPath = 'L 0 0 L ' + x2 + ' ' + (-height) + ' L ' + x3 + ' 0';\r\n        }\r\n\r\n        var trapezoid = { \r\n            label: 'Trapezoid Body',\r\n            position: { x: x, y: y },\r\n            vertices: Vertices.fromPath(verticesPath)\r\n        };\r\n\r\n        if (options.chamfer) {\r\n            var chamfer = options.chamfer;\r\n            trapezoid.vertices = Vertices.chamfer(trapezoid.vertices, chamfer.radius, \r\n                                    chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\r\n            delete options.chamfer;\r\n        }\r\n\r\n        return Body.create(Common.extend({}, trapezoid, options));\r\n    };\r\n\r\n    /**\r\n     * Creates a new rigid body model with a circle hull. \r\n     * The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\r\n     * @method circle\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param {number} radius\r\n     * @param {object} [options]\r\n     * @param {number} [maxSides]\r\n     * @return {body} A new circle body\r\n     */\r\n    Bodies.circle = function(x, y, radius, options, maxSides) {\r\n        options = options || {};\r\n\r\n        var circle = {\r\n            label: 'Circle Body',\r\n            circleRadius: radius\r\n        };\r\n        \r\n        // approximate circles with polygons until true circles implemented in SAT\r\n        maxSides = maxSides || 25;\r\n        var sides = Math.ceil(Math.max(10, Math.min(maxSides, radius)));\r\n\r\n        // optimisation: always use even number of sides (half the number of unique axes)\r\n        if (sides % 2 === 1)\r\n            sides += 1;\r\n\r\n        return Bodies.polygon(x, y, sides, radius, Common.extend({}, circle, options));\r\n    };\r\n\r\n    /**\r\n     * Creates a new rigid body model with a regular polygon hull with the given number of sides. \r\n     * The options parameter is an object that specifies any properties you wish to override the defaults.\r\n     * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\r\n     * @method polygon\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param {number} sides\r\n     * @param {number} radius\r\n     * @param {object} [options]\r\n     * @return {body} A new regular polygon body\r\n     */\r\n    Bodies.polygon = function(x, y, sides, radius, options) {\r\n        options = options || {};\r\n\r\n        if (sides < 3)\r\n            return Bodies.circle(x, y, radius, options);\r\n\r\n        var theta = 2 * Math.PI / sides,\r\n            path = '',\r\n            offset = theta * 0.5;\r\n\r\n        for (var i = 0; i < sides; i += 1) {\r\n            var angle = offset + (i * theta),\r\n                xx = Math.cos(angle) * radius,\r\n                yy = Math.sin(angle) * radius;\r\n\r\n            path += 'L ' + xx.toFixed(3) + ' ' + yy.toFixed(3) + ' ';\r\n        }\r\n\r\n        var polygon = { \r\n            label: 'Polygon Body',\r\n            position: { x: x, y: y },\r\n            vertices: Vertices.fromPath(path)\r\n        };\r\n\r\n        if (options.chamfer) {\r\n            var chamfer = options.chamfer;\r\n            polygon.vertices = Vertices.chamfer(polygon.vertices, chamfer.radius, \r\n                                    chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\r\n            delete options.chamfer;\r\n        }\r\n\r\n        return Body.create(Common.extend({}, polygon, options));\r\n    };\r\n\r\n    /**\r\n     * Creates a body using the supplied vertices (or an array containing multiple sets of vertices).\r\n     * If the vertices are convex, they will pass through as supplied.\r\n     * Otherwise if the vertices are concave, they will be decomposed if [poly-decomp.js](https://github.com/schteppe/poly-decomp.js) is available.\r\n     * Note that this process is not guaranteed to support complex sets of vertices (e.g. those with holes may fail).\r\n     * By default the decomposition will discard collinear edges (to improve performance).\r\n     * It can also optionally discard any parts that have an area less than `minimumArea`.\r\n     * If the vertices can not be decomposed, the result will fall back to using the convex hull.\r\n     * The options parameter is an object that specifies any `Matter.Body` properties you wish to override the defaults.\r\n     * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\r\n     * @method fromVertices\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param [[vector]] vertexSets\r\n     * @param {object} [options]\r\n     * @param {bool} [flagInternal=false]\r\n     * @param {number} [removeCollinear=0.01]\r\n     * @param {number} [minimumArea=10]\r\n     * @return {body}\r\n     */\r\n    Bodies.fromVertices = function(x, y, vertexSets, options, flagInternal, removeCollinear, minimumArea) {\r\n        var body,\r\n            parts,\r\n            isConvex,\r\n            vertices,\r\n            i,\r\n            j,\r\n            k,\r\n            v,\r\n            z;\r\n\r\n        options = options || {};\r\n        parts = [];\r\n\r\n        flagInternal = typeof flagInternal !== 'undefined' ? flagInternal : false;\r\n        removeCollinear = typeof removeCollinear !== 'undefined' ? removeCollinear : 0.01;\r\n        minimumArea = typeof minimumArea !== 'undefined' ? minimumArea : 10;\r\n\r\n        if (!decomp) {\r\n            Common.warn('Bodies.fromVertices: poly-decomp.js required. Could not decompose vertices. Fallback to convex hull.');\r\n        }\r\n\r\n        // ensure vertexSets is an array of arrays\r\n        if (!Common.isArray(vertexSets[0])) {\r\n            vertexSets = [vertexSets];\r\n        }\r\n\r\n        for (v = 0; v < vertexSets.length; v += 1) {\r\n            vertices = vertexSets[v];\r\n            isConvex = Vertices.isConvex(vertices);\r\n\r\n            if (isConvex || !decomp) {\r\n                if (isConvex) {\r\n                    vertices = Vertices.clockwiseSort(vertices);\r\n                } else {\r\n                    // fallback to convex hull when decomposition is not possible\r\n                    vertices = Vertices.hull(vertices);\r\n                }\r\n\r\n                parts.push({\r\n                    position: { x: x, y: y },\r\n                    vertices: vertices\r\n                });\r\n            } else {\r\n                // initialise a decomposition\r\n                var concave = vertices.map(function(vertex) {\r\n                    return [vertex.x, vertex.y];\r\n                });\r\n\r\n                // vertices are concave and simple, we can decompose into parts\r\n                decomp.makeCCW(concave);\r\n                if (removeCollinear !== false)\r\n                    decomp.removeCollinearPoints(concave, removeCollinear);\r\n\r\n                // use the quick decomposition algorithm (Bayazit)\r\n                var decomposed = decomp.quickDecomp(concave);\r\n\r\n                // for each decomposed chunk\r\n                for (i = 0; i < decomposed.length; i++) {\r\n                    var chunk = decomposed[i];\r\n\r\n                    // convert vertices into the correct structure\r\n                    var chunkVertices = chunk.map(function(vertices) {\r\n                        return {\r\n                            x: vertices[0],\r\n                            y: vertices[1]\r\n                        };\r\n                    });\r\n\r\n                    // skip small chunks\r\n                    if (minimumArea > 0 && Vertices.area(chunkVertices) < minimumArea)\r\n                        continue;\r\n\r\n                    // create a compound part\r\n                    parts.push({\r\n                        position: Vertices.centre(chunkVertices),\r\n                        vertices: chunkVertices\r\n                    });\r\n                }\r\n            }\r\n        }\r\n\r\n        // create body parts\r\n        for (i = 0; i < parts.length; i++) {\r\n            parts[i] = Body.create(Common.extend(parts[i], options));\r\n        }\r\n\r\n        // flag internal edges (coincident part edges)\r\n        if (flagInternal) {\r\n            var coincident_max_dist = 5;\r\n\r\n            for (i = 0; i < parts.length; i++) {\r\n                var partA = parts[i];\r\n\r\n                for (j = i + 1; j < parts.length; j++) {\r\n                    var partB = parts[j];\r\n\r\n                    if (Bounds.overlaps(partA.bounds, partB.bounds)) {\r\n                        var pav = partA.vertices,\r\n                            pbv = partB.vertices;\r\n\r\n                        // iterate vertices of both parts\r\n                        for (k = 0; k < partA.vertices.length; k++) {\r\n                            for (z = 0; z < partB.vertices.length; z++) {\r\n                                // find distances between the vertices\r\n                                var da = Vector.magnitudeSquared(Vector.sub(pav[(k + 1) % pav.length], pbv[z])),\r\n                                    db = Vector.magnitudeSquared(Vector.sub(pav[k], pbv[(z + 1) % pbv.length]));\r\n\r\n                                // if both vertices are very close, consider the edge concident (internal)\r\n                                if (da < coincident_max_dist && db < coincident_max_dist) {\r\n                                    pav[k].isInternal = true;\r\n                                    pbv[z].isInternal = true;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (parts.length > 1) {\r\n            // create the parent body to be returned, that contains generated compound parts\r\n            body = Body.create(Common.extend({ parts: parts.slice(0) }, options));\r\n            Body.setPosition(body, { x: x, y: y });\r\n\r\n            return body;\r\n        } else {\r\n            return parts[0];\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZmFjdG9yeS9Cb2RpZXMuanM/YTQ0OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxrR0FBc0I7QUFDN0MsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMsa0ZBQWM7QUFDakMsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsOEZBQW9CO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQywyRkFBbUI7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQSx5QjtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUEseUI7QUFDQTtBQUNBLHVCQUF1QixhQUFhO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtRUFBbUU7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCO0FBQ0E7QUFDQSx1QkFBdUIsYUFBYTtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix1QkFBdUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCLGFBQWE7QUFDNUM7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDOztBQUVBLCtCQUErQixrQkFBa0I7QUFDakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLDJCQUEyQjtBQUM5RCx1Q0FBdUMsMkJBQTJCO0FBQ2xFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOENBQThDLHdCQUF3QjtBQUN0RSxvQ0FBb0MsYUFBYTs7QUFFakQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZmFjdG9yeS9Cb2RpZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBUaGUgYE1hdHRlci5Cb2RpZXNgIG1vZHVsZSBjb250YWlucyBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0aW5nIHJpZ2lkIGJvZHkgbW9kZWxzIFxyXG4qIHdpdGggY29tbW9ubHkgdXNlZCBib2R5IGNvbmZpZ3VyYXRpb25zIChzdWNoIGFzIHJlY3RhbmdsZXMsIGNpcmNsZXMgYW5kIG90aGVyIHBvbHlnb25zKS5cclxuKlxyXG4qIFNlZSB0aGUgaW5jbHVkZWQgdXNhZ2UgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vbGlhYnJ1L21hdHRlci1qcy90cmVlL21hc3Rlci9leGFtcGxlcykuXHJcbipcclxuKiBAY2xhc3MgQm9kaWVzXHJcbiovXHJcblxyXG4vLyBUT0RPOiB0cnVlIGNpcmNsZSBib2RpZXNcclxuXHJcbnZhciBCb2RpZXMgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQm9kaWVzO1xyXG5cclxudmFyIFZlcnRpY2VzID0gcmVxdWlyZSgnLi4vZ2VvbWV0cnkvVmVydGljZXMnKTtcclxudmFyIENvbW1vbiA9IHJlcXVpcmUoJy4uL2NvcmUvQ29tbW9uJyk7XHJcbnZhciBCb2R5ID0gcmVxdWlyZSgnLi4vYm9keS9Cb2R5Jyk7XHJcbnZhciBCb3VuZHMgPSByZXF1aXJlKCcuLi9nZW9tZXRyeS9Cb3VuZHMnKTtcclxudmFyIFZlY3RvciA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlY3RvcicpO1xyXG52YXIgZGVjb21wID0gcmVxdWlyZSgnLi4vLi4vcG9seS1kZWNvbXAnKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgcmlnaWQgYm9keSBtb2RlbCB3aXRoIGEgcmVjdGFuZ2xlIGh1bGwuIFxyXG4gICAgICogVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB0aGF0IHNwZWNpZmllcyBhbnkgcHJvcGVydGllcyB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuXHJcbiAgICAgKiBTZWUgdGhlIHByb3BlcnRpZXMgc2VjdGlvbiBvZiB0aGUgYE1hdHRlci5Cb2R5YCBtb2R1bGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgeW91IGNhbiBwYXNzIHZpYSB0aGUgYG9wdGlvbnNgIG9iamVjdC5cclxuICAgICAqIEBtZXRob2QgcmVjdGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHJldHVybiB7Ym9keX0gQSBuZXcgcmVjdGFuZ2xlIGJvZHlcclxuICAgICAqL1xyXG4gICAgQm9kaWVzLnJlY3RhbmdsZSA9IGZ1bmN0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpIHtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIHJlY3RhbmdsZSA9IHsgXHJcbiAgICAgICAgICAgIGxhYmVsOiAnUmVjdGFuZ2xlIEJvZHknLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB4OiB4LCB5OiB5IH0sXHJcbiAgICAgICAgICAgIHZlcnRpY2VzOiBWZXJ0aWNlcy5mcm9tUGF0aCgnTCAwIDAgTCAnICsgd2lkdGggKyAnIDAgTCAnICsgd2lkdGggKyAnICcgKyBoZWlnaHQgKyAnIEwgMCAnICsgaGVpZ2h0KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmNoYW1mZXIpIHtcclxuICAgICAgICAgICAgdmFyIGNoYW1mZXIgPSBvcHRpb25zLmNoYW1mZXI7XHJcbiAgICAgICAgICAgIHJlY3RhbmdsZS52ZXJ0aWNlcyA9IFZlcnRpY2VzLmNoYW1mZXIocmVjdGFuZ2xlLnZlcnRpY2VzLCBjaGFtZmVyLnJhZGl1cywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW1mZXIucXVhbGl0eSwgY2hhbWZlci5xdWFsaXR5TWluLCBjaGFtZmVyLnF1YWxpdHlNYXgpO1xyXG4gICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5jaGFtZmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEJvZHkuY3JlYXRlKENvbW1vbi5leHRlbmQoe30sIHJlY3RhbmdsZSwgb3B0aW9ucykpO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJpZ2lkIGJvZHkgbW9kZWwgd2l0aCBhIHRyYXBlem9pZCBodWxsLiBcclxuICAgICAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBzcGVjaWZpZXMgYW55IHByb3BlcnRpZXMgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gb2YgdGhlIGBNYXR0ZXIuQm9keWAgbW9kdWxlIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IHlvdSBjYW4gcGFzcyB2aWEgdGhlIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgICAgKiBAbWV0aG9kIHRyYXBlem9pZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG9wZVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHJldHVybiB7Ym9keX0gQSBuZXcgdHJhcGV6b2lkIGJvZHlcclxuICAgICAqL1xyXG4gICAgQm9kaWVzLnRyYXBlem9pZCA9IGZ1bmN0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNsb3BlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICAgIHNsb3BlICo9IDAuNTtcclxuICAgICAgICB2YXIgcm9vZiA9ICgxIC0gKHNsb3BlICogMikpICogd2lkdGg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHgxID0gd2lkdGggKiBzbG9wZSxcclxuICAgICAgICAgICAgeDIgPSB4MSArIHJvb2YsXHJcbiAgICAgICAgICAgIHgzID0geDIgKyB4MSxcclxuICAgICAgICAgICAgdmVydGljZXNQYXRoO1xyXG5cclxuICAgICAgICBpZiAoc2xvcGUgPCAwLjUpIHtcclxuICAgICAgICAgICAgdmVydGljZXNQYXRoID0gJ0wgMCAwIEwgJyArIHgxICsgJyAnICsgKC1oZWlnaHQpICsgJyBMICcgKyB4MiArICcgJyArICgtaGVpZ2h0KSArICcgTCAnICsgeDMgKyAnIDAnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZlcnRpY2VzUGF0aCA9ICdMIDAgMCBMICcgKyB4MiArICcgJyArICgtaGVpZ2h0KSArICcgTCAnICsgeDMgKyAnIDAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRyYXBlem9pZCA9IHsgXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHJhcGV6b2lkIEJvZHknLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB4OiB4LCB5OiB5IH0sXHJcbiAgICAgICAgICAgIHZlcnRpY2VzOiBWZXJ0aWNlcy5mcm9tUGF0aCh2ZXJ0aWNlc1BhdGgpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhbWZlcikge1xyXG4gICAgICAgICAgICB2YXIgY2hhbWZlciA9IG9wdGlvbnMuY2hhbWZlcjtcclxuICAgICAgICAgICAgdHJhcGV6b2lkLnZlcnRpY2VzID0gVmVydGljZXMuY2hhbWZlcih0cmFwZXpvaWQudmVydGljZXMsIGNoYW1mZXIucmFkaXVzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbWZlci5xdWFsaXR5LCBjaGFtZmVyLnF1YWxpdHlNaW4sIGNoYW1mZXIucXVhbGl0eU1heCk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmNoYW1mZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gQm9keS5jcmVhdGUoQ29tbW9uLmV4dGVuZCh7fSwgdHJhcGV6b2lkLCBvcHRpb25zKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyByaWdpZCBib2R5IG1vZGVsIHdpdGggYSBjaXJjbGUgaHVsbC4gXHJcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGFueSBwcm9wZXJ0aWVzIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy5cclxuICAgICAqIFNlZSB0aGUgcHJvcGVydGllcyBzZWN0aW9uIG9mIHRoZSBgTWF0dGVyLkJvZHlgIG1vZHVsZSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCB5b3UgY2FuIHBhc3MgdmlhIHRoZSBgb3B0aW9uc2Agb2JqZWN0LlxyXG4gICAgICogQG1ldGhvZCBjaXJjbGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1c1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhTaWRlc11cclxuICAgICAqIEByZXR1cm4ge2JvZHl9IEEgbmV3IGNpcmNsZSBib2R5XHJcbiAgICAgKi9cclxuICAgIEJvZGllcy5jaXJjbGUgPSBmdW5jdGlvbih4LCB5LCByYWRpdXMsIG9wdGlvbnMsIG1heFNpZGVzKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICAgIHZhciBjaXJjbGUgPSB7XHJcbiAgICAgICAgICAgIGxhYmVsOiAnQ2lyY2xlIEJvZHknLFxyXG4gICAgICAgICAgICBjaXJjbGVSYWRpdXM6IHJhZGl1c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYXBwcm94aW1hdGUgY2lyY2xlcyB3aXRoIHBvbHlnb25zIHVudGlsIHRydWUgY2lyY2xlcyBpbXBsZW1lbnRlZCBpbiBTQVRcclxuICAgICAgICBtYXhTaWRlcyA9IG1heFNpZGVzIHx8IDI1O1xyXG4gICAgICAgIHZhciBzaWRlcyA9IE1hdGguY2VpbChNYXRoLm1heCgxMCwgTWF0aC5taW4obWF4U2lkZXMsIHJhZGl1cykpKTtcclxuXHJcbiAgICAgICAgLy8gb3B0aW1pc2F0aW9uOiBhbHdheXMgdXNlIGV2ZW4gbnVtYmVyIG9mIHNpZGVzIChoYWxmIHRoZSBudW1iZXIgb2YgdW5pcXVlIGF4ZXMpXHJcbiAgICAgICAgaWYgKHNpZGVzICUgMiA9PT0gMSlcclxuICAgICAgICAgICAgc2lkZXMgKz0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJvZGllcy5wb2x5Z29uKHgsIHksIHNpZGVzLCByYWRpdXMsIENvbW1vbi5leHRlbmQoe30sIGNpcmNsZSwgb3B0aW9ucykpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgcmlnaWQgYm9keSBtb2RlbCB3aXRoIGEgcmVndWxhciBwb2x5Z29uIGh1bGwgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNpZGVzLiBcclxuICAgICAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBzcGVjaWZpZXMgYW55IHByb3BlcnRpZXMgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gb2YgdGhlIGBNYXR0ZXIuQm9keWAgbW9kdWxlIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IHlvdSBjYW4gcGFzcyB2aWEgdGhlIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgICAgKiBAbWV0aG9kIHBvbHlnb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZGVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXHJcbiAgICAgKiBAcmV0dXJuIHtib2R5fSBBIG5ldyByZWd1bGFyIHBvbHlnb24gYm9keVxyXG4gICAgICovXHJcbiAgICBCb2RpZXMucG9seWdvbiA9IGZ1bmN0aW9uKHgsIHksIHNpZGVzLCByYWRpdXMsIG9wdGlvbnMpIHtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKHNpZGVzIDwgMylcclxuICAgICAgICAgICAgcmV0dXJuIEJvZGllcy5jaXJjbGUoeCwgeSwgcmFkaXVzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdmFyIHRoZXRhID0gMiAqIE1hdGguUEkgLyBzaWRlcyxcclxuICAgICAgICAgICAgcGF0aCA9ICcnLFxyXG4gICAgICAgICAgICBvZmZzZXQgPSB0aGV0YSAqIDAuNTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWRlczsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIHZhciBhbmdsZSA9IG9mZnNldCArIChpICogdGhldGEpLFxyXG4gICAgICAgICAgICAgICAgeHggPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMsXHJcbiAgICAgICAgICAgICAgICB5eSA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cztcclxuXHJcbiAgICAgICAgICAgIHBhdGggKz0gJ0wgJyArIHh4LnRvRml4ZWQoMykgKyAnICcgKyB5eS50b0ZpeGVkKDMpICsgJyAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBvbHlnb24gPSB7IFxyXG4gICAgICAgICAgICBsYWJlbDogJ1BvbHlnb24gQm9keScsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHgsIHk6IHkgfSxcclxuICAgICAgICAgICAgdmVydGljZXM6IFZlcnRpY2VzLmZyb21QYXRoKHBhdGgpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhbWZlcikge1xyXG4gICAgICAgICAgICB2YXIgY2hhbWZlciA9IG9wdGlvbnMuY2hhbWZlcjtcclxuICAgICAgICAgICAgcG9seWdvbi52ZXJ0aWNlcyA9IFZlcnRpY2VzLmNoYW1mZXIocG9seWdvbi52ZXJ0aWNlcywgY2hhbWZlci5yYWRpdXMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtZmVyLnF1YWxpdHksIGNoYW1mZXIucXVhbGl0eU1pbiwgY2hhbWZlci5xdWFsaXR5TWF4KTtcclxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuY2hhbWZlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBCb2R5LmNyZWF0ZShDb21tb24uZXh0ZW5kKHt9LCBwb2x5Z29uLCBvcHRpb25zKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIGJvZHkgdXNpbmcgdGhlIHN1cHBsaWVkIHZlcnRpY2VzIChvciBhbiBhcnJheSBjb250YWluaW5nIG11bHRpcGxlIHNldHMgb2YgdmVydGljZXMpLlxyXG4gICAgICogSWYgdGhlIHZlcnRpY2VzIGFyZSBjb252ZXgsIHRoZXkgd2lsbCBwYXNzIHRocm91Z2ggYXMgc3VwcGxpZWQuXHJcbiAgICAgKiBPdGhlcndpc2UgaWYgdGhlIHZlcnRpY2VzIGFyZSBjb25jYXZlLCB0aGV5IHdpbGwgYmUgZGVjb21wb3NlZCBpZiBbcG9seS1kZWNvbXAuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2h0ZXBwZS9wb2x5LWRlY29tcC5qcykgaXMgYXZhaWxhYmxlLlxyXG4gICAgICogTm90ZSB0aGF0IHRoaXMgcHJvY2VzcyBpcyBub3QgZ3VhcmFudGVlZCB0byBzdXBwb3J0IGNvbXBsZXggc2V0cyBvZiB2ZXJ0aWNlcyAoZS5nLiB0aG9zZSB3aXRoIGhvbGVzIG1heSBmYWlsKS5cclxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGRlY29tcG9zaXRpb24gd2lsbCBkaXNjYXJkIGNvbGxpbmVhciBlZGdlcyAodG8gaW1wcm92ZSBwZXJmb3JtYW5jZSkuXHJcbiAgICAgKiBJdCBjYW4gYWxzbyBvcHRpb25hbGx5IGRpc2NhcmQgYW55IHBhcnRzIHRoYXQgaGF2ZSBhbiBhcmVhIGxlc3MgdGhhbiBgbWluaW11bUFyZWFgLlxyXG4gICAgICogSWYgdGhlIHZlcnRpY2VzIGNhbiBub3QgYmUgZGVjb21wb3NlZCwgdGhlIHJlc3VsdCB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgY29udmV4IGh1bGwuXHJcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGFueSBgTWF0dGVyLkJvZHlgIHByb3BlcnRpZXMgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxyXG4gICAgICogU2VlIHRoZSBwcm9wZXJ0aWVzIHNlY3Rpb24gb2YgdGhlIGBNYXR0ZXIuQm9keWAgbW9kdWxlIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IHlvdSBjYW4gcGFzcyB2aWEgdGhlIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgICAgKiBAbWV0aG9kIGZyb21WZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAgICAgKiBAcGFyYW0gW1t2ZWN0b3JdXSB2ZXJ0ZXhTZXRzXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2x9IFtmbGFnSW50ZXJuYWw9ZmFsc2VdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JlbW92ZUNvbGxpbmVhcj0wLjAxXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5pbXVtQXJlYT0xMF1cclxuICAgICAqIEByZXR1cm4ge2JvZHl9XHJcbiAgICAgKi9cclxuICAgIEJvZGllcy5mcm9tVmVydGljZXMgPSBmdW5jdGlvbih4LCB5LCB2ZXJ0ZXhTZXRzLCBvcHRpb25zLCBmbGFnSW50ZXJuYWwsIHJlbW92ZUNvbGxpbmVhciwgbWluaW11bUFyZWEpIHtcclxuICAgICAgICB2YXIgYm9keSxcclxuICAgICAgICAgICAgcGFydHMsXHJcbiAgICAgICAgICAgIGlzQ29udmV4LFxyXG4gICAgICAgICAgICB2ZXJ0aWNlcyxcclxuICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgaixcclxuICAgICAgICAgICAgayxcclxuICAgICAgICAgICAgdixcclxuICAgICAgICAgICAgejtcclxuXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgcGFydHMgPSBbXTtcclxuXHJcbiAgICAgICAgZmxhZ0ludGVybmFsID0gdHlwZW9mIGZsYWdJbnRlcm5hbCAhPT0gJ3VuZGVmaW5lZCcgPyBmbGFnSW50ZXJuYWwgOiBmYWxzZTtcclxuICAgICAgICByZW1vdmVDb2xsaW5lYXIgPSB0eXBlb2YgcmVtb3ZlQ29sbGluZWFyICE9PSAndW5kZWZpbmVkJyA/IHJlbW92ZUNvbGxpbmVhciA6IDAuMDE7XHJcbiAgICAgICAgbWluaW11bUFyZWEgPSB0eXBlb2YgbWluaW11bUFyZWEgIT09ICd1bmRlZmluZWQnID8gbWluaW11bUFyZWEgOiAxMDtcclxuXHJcbiAgICAgICAgaWYgKCFkZWNvbXApIHtcclxuICAgICAgICAgICAgQ29tbW9uLndhcm4oJ0JvZGllcy5mcm9tVmVydGljZXM6IHBvbHktZGVjb21wLmpzIHJlcXVpcmVkLiBDb3VsZCBub3QgZGVjb21wb3NlIHZlcnRpY2VzLiBGYWxsYmFjayB0byBjb252ZXggaHVsbC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSB2ZXJ0ZXhTZXRzIGlzIGFuIGFycmF5IG9mIGFycmF5c1xyXG4gICAgICAgIGlmICghQ29tbW9uLmlzQXJyYXkodmVydGV4U2V0c1swXSkpIHtcclxuICAgICAgICAgICAgdmVydGV4U2V0cyA9IFt2ZXJ0ZXhTZXRzXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodiA9IDA7IHYgPCB2ZXJ0ZXhTZXRzLmxlbmd0aDsgdiArPSAxKSB7XHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gdmVydGV4U2V0c1t2XTtcclxuICAgICAgICAgICAgaXNDb252ZXggPSBWZXJ0aWNlcy5pc0NvbnZleCh2ZXJ0aWNlcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNDb252ZXggfHwgIWRlY29tcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQ29udmV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGljZXMgPSBWZXJ0aWNlcy5jbG9ja3dpc2VTb3J0KHZlcnRpY2VzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gY29udmV4IGh1bGwgd2hlbiBkZWNvbXBvc2l0aW9uIGlzIG5vdCBwb3NzaWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzID0gVmVydGljZXMuaHVsbCh2ZXJ0aWNlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHsgeDogeCwgeTogeSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzOiB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXNlIGEgZGVjb21wb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgdmFyIGNvbmNhdmUgPSB2ZXJ0aWNlcy5tYXAoZnVuY3Rpb24odmVydGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2ZXJ0ZXgueCwgdmVydGV4LnldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmVydGljZXMgYXJlIGNvbmNhdmUgYW5kIHNpbXBsZSwgd2UgY2FuIGRlY29tcG9zZSBpbnRvIHBhcnRzXHJcbiAgICAgICAgICAgICAgICBkZWNvbXAubWFrZUNDVyhjb25jYXZlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVDb2xsaW5lYXIgIT09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlY29tcC5yZW1vdmVDb2xsaW5lYXJQb2ludHMoY29uY2F2ZSwgcmVtb3ZlQ29sbGluZWFyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIHF1aWNrIGRlY29tcG9zaXRpb24gYWxnb3JpdGhtIChCYXlheml0KVxyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29tcG9zZWQgPSBkZWNvbXAucXVpY2tEZWNvbXAoY29uY2F2ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggZGVjb21wb3NlZCBjaHVua1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlY29tcG9zZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBkZWNvbXBvc2VkW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHZlcnRpY2VzIGludG8gdGhlIGNvcnJlY3Qgc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rVmVydGljZXMgPSBjaHVuay5tYXAoZnVuY3Rpb24odmVydGljZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHZlcnRpY2VzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogdmVydGljZXNbMV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBzbWFsbCBjaHVua3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWluaW11bUFyZWEgPiAwICYmIFZlcnRpY2VzLmFyZWEoY2h1bmtWZXJ0aWNlcykgPCBtaW5pbXVtQXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvbXBvdW5kIHBhcnRcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFZlcnRpY2VzLmNlbnRyZShjaHVua1ZlcnRpY2VzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXM6IGNodW5rVmVydGljZXNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGJvZHkgcGFydHNcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcGFydHNbaV0gPSBCb2R5LmNyZWF0ZShDb21tb24uZXh0ZW5kKHBhcnRzW2ldLCBvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmbGFnIGludGVybmFsIGVkZ2VzIChjb2luY2lkZW50IHBhcnQgZWRnZXMpXHJcbiAgICAgICAgaWYgKGZsYWdJbnRlcm5hbCkge1xyXG4gICAgICAgICAgICB2YXIgY29pbmNpZGVudF9tYXhfZGlzdCA9IDU7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJ0QSA9IHBhcnRzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgcGFydHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydEIgPSBwYXJ0c1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEJvdW5kcy5vdmVybGFwcyhwYXJ0QS5ib3VuZHMsIHBhcnRCLmJvdW5kcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdiA9IHBhcnRBLnZlcnRpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ2ID0gcGFydEIudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIHZlcnRpY2VzIG9mIGJvdGggcGFydHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHBhcnRBLnZlcnRpY2VzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgcGFydEIudmVydGljZXMubGVuZ3RoOyB6KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIGRpc3RhbmNlcyBiZXR3ZWVuIHRoZSB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYSA9IFZlY3Rvci5tYWduaXR1ZGVTcXVhcmVkKFZlY3Rvci5zdWIocGF2WyhrICsgMSkgJSBwYXYubGVuZ3RoXSwgcGJ2W3pdKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiID0gVmVjdG9yLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yLnN1YihwYXZba10sIHBidlsoeiArIDEpICUgcGJ2Lmxlbmd0aF0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYm90aCB2ZXJ0aWNlcyBhcmUgdmVyeSBjbG9zZSwgY29uc2lkZXIgdGhlIGVkZ2UgY29uY2lkZW50IChpbnRlcm5hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGEgPCBjb2luY2lkZW50X21heF9kaXN0ICYmIGRiIDwgY29pbmNpZGVudF9tYXhfZGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXZba10uaXNJbnRlcm5hbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidlt6XS5pc0ludGVybmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAvLyBjcmVhdGUgdGhlIHBhcmVudCBib2R5IHRvIGJlIHJldHVybmVkLCB0aGF0IGNvbnRhaW5zIGdlbmVyYXRlZCBjb21wb3VuZCBwYXJ0c1xyXG4gICAgICAgICAgICBib2R5ID0gQm9keS5jcmVhdGUoQ29tbW9uLmV4dGVuZCh7IHBhcnRzOiBwYXJ0cy5zbGljZSgwKSB9LCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgIEJvZHkuc2V0UG9zaXRpb24oYm9keSwgeyB4OiB4LCB5OiB5IH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/factory/Composites.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/factory/Composites.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Composites` module contains factory methods for creating composite bodies\r\n* with commonly used configurations (such as stacks and chains).\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Composites\r\n*/\r\n\r\nvar Composites = {};\r\n\r\nmodule.exports = Composites;\r\n\r\nvar Composite = __webpack_require__(/*! ../body/Composite */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Composite.js\");\r\nvar Constraint = __webpack_require__(/*! ../constraint/Constraint */ \"./node_modules/phaser/src/physics/matter-js/lib/constraint/Constraint.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\nvar Body = __webpack_require__(/*! ../body/Body */ \"./node_modules/phaser/src/physics/matter-js/lib/body/Body.js\");\r\nvar Bodies = __webpack_require__(/*! ./Bodies */ \"./node_modules/phaser/src/physics/matter-js/lib/factory/Bodies.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Create a new composite containing bodies created in the callback in a grid arrangement.\r\n     * This function uses the body's bounds to prevent overlaps.\r\n     * @method stack\r\n     * @param {number} xx\r\n     * @param {number} yy\r\n     * @param {number} columns\r\n     * @param {number} rows\r\n     * @param {number} columnGap\r\n     * @param {number} rowGap\r\n     * @param {function} callback\r\n     * @return {composite} A new composite containing objects created in the callback\r\n     */\r\n    Composites.stack = function(xx, yy, columns, rows, columnGap, rowGap, callback) {\r\n        var stack = Composite.create({ label: 'Stack' }),\r\n            x = xx,\r\n            y = yy,\r\n            lastBody,\r\n            i = 0;\r\n\r\n        for (var row = 0; row < rows; row++) {\r\n            var maxHeight = 0;\r\n            \r\n            for (var column = 0; column < columns; column++) {\r\n                var body = callback(x, y, column, row, lastBody, i);\r\n                    \r\n                if (body) {\r\n                    var bodyHeight = body.bounds.max.y - body.bounds.min.y,\r\n                        bodyWidth = body.bounds.max.x - body.bounds.min.x; \r\n\r\n                    if (bodyHeight > maxHeight)\r\n                        maxHeight = bodyHeight;\r\n                    \r\n                    Body.translate(body, { x: bodyWidth * 0.5, y: bodyHeight * 0.5 });\r\n\r\n                    x = body.bounds.max.x + columnGap;\r\n\r\n                    Composite.addBody(stack, body);\r\n                    \r\n                    lastBody = body;\r\n                    i += 1;\r\n                } else {\r\n                    x += columnGap;\r\n                }\r\n            }\r\n            \r\n            y += maxHeight + rowGap;\r\n            x = xx;\r\n        }\r\n\r\n        return stack;\r\n    };\r\n    \r\n    /**\r\n     * Chains all bodies in the given composite together using constraints.\r\n     * @method chain\r\n     * @param {composite} composite\r\n     * @param {number} xOffsetA\r\n     * @param {number} yOffsetA\r\n     * @param {number} xOffsetB\r\n     * @param {number} yOffsetB\r\n     * @param {object} options\r\n     * @return {composite} A new composite containing objects chained together with constraints\r\n     */\r\n    Composites.chain = function(composite, xOffsetA, yOffsetA, xOffsetB, yOffsetB, options) {\r\n        var bodies = composite.bodies;\r\n        \r\n        for (var i = 1; i < bodies.length; i++) {\r\n            var bodyA = bodies[i - 1],\r\n                bodyB = bodies[i],\r\n                bodyAHeight = bodyA.bounds.max.y - bodyA.bounds.min.y,\r\n                bodyAWidth = bodyA.bounds.max.x - bodyA.bounds.min.x, \r\n                bodyBHeight = bodyB.bounds.max.y - bodyB.bounds.min.y,\r\n                bodyBWidth = bodyB.bounds.max.x - bodyB.bounds.min.x;\r\n        \r\n            var defaults = {\r\n                bodyA: bodyA,\r\n                pointA: { x: bodyAWidth * xOffsetA, y: bodyAHeight * yOffsetA },\r\n                bodyB: bodyB,\r\n                pointB: { x: bodyBWidth * xOffsetB, y: bodyBHeight * yOffsetB }\r\n            };\r\n            \r\n            var constraint = Common.extend(defaults, options);\r\n        \r\n            Composite.addConstraint(composite, Constraint.create(constraint));\r\n        }\r\n\r\n        composite.label += ' Chain';\r\n        \r\n        return composite;\r\n    };\r\n\r\n    /**\r\n     * Connects bodies in the composite with constraints in a grid pattern, with optional cross braces.\r\n     * @method mesh\r\n     * @param {composite} composite\r\n     * @param {number} columns\r\n     * @param {number} rows\r\n     * @param {boolean} crossBrace\r\n     * @param {object} options\r\n     * @return {composite} The composite containing objects meshed together with constraints\r\n     */\r\n    Composites.mesh = function(composite, columns, rows, crossBrace, options) {\r\n        var bodies = composite.bodies,\r\n            row,\r\n            col,\r\n            bodyA,\r\n            bodyB,\r\n            bodyC;\r\n        \r\n        for (row = 0; row < rows; row++) {\r\n            for (col = 1; col < columns; col++) {\r\n                bodyA = bodies[(col - 1) + (row * columns)];\r\n                bodyB = bodies[col + (row * columns)];\r\n                Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));\r\n            }\r\n\r\n            if (row > 0) {\r\n                for (col = 0; col < columns; col++) {\r\n                    bodyA = bodies[col + ((row - 1) * columns)];\r\n                    bodyB = bodies[col + (row * columns)];\r\n                    Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));\r\n\r\n                    if (crossBrace && col > 0) {\r\n                        bodyC = bodies[(col - 1) + ((row - 1) * columns)];\r\n                        Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));\r\n                    }\r\n\r\n                    if (crossBrace && col < columns - 1) {\r\n                        bodyC = bodies[(col + 1) + ((row - 1) * columns)];\r\n                        Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        composite.label += ' Mesh';\r\n        \r\n        return composite;\r\n    };\r\n    \r\n    /**\r\n     * Create a new composite containing bodies created in the callback in a pyramid arrangement.\r\n     * This function uses the body's bounds to prevent overlaps.\r\n     * @method pyramid\r\n     * @param {number} xx\r\n     * @param {number} yy\r\n     * @param {number} columns\r\n     * @param {number} rows\r\n     * @param {number} columnGap\r\n     * @param {number} rowGap\r\n     * @param {function} callback\r\n     * @return {composite} A new composite containing objects created in the callback\r\n     */\r\n    Composites.pyramid = function(xx, yy, columns, rows, columnGap, rowGap, callback) {\r\n        return Composites.stack(xx, yy, columns, rows, columnGap, rowGap, function(x, y, column, row, lastBody, i) {\r\n            var actualRows = Math.min(rows, Math.ceil(columns / 2)),\r\n                lastBodyWidth = lastBody ? lastBody.bounds.max.x - lastBody.bounds.min.x : 0;\r\n            \r\n            if (row > actualRows)\r\n                return;\r\n            \r\n            // reverse row order\r\n            row = actualRows - row;\r\n            \r\n            var start = row,\r\n                end = columns - 1 - row;\r\n\r\n            if (column < start || column > end)\r\n                return;\r\n            \r\n            // retroactively fix the first body's position, since width was unknown\r\n            if (i === 1) {\r\n                Body.translate(lastBody, { x: (column + (columns % 2 === 1 ? 1 : -1)) * lastBodyWidth, y: 0 });\r\n            }\r\n\r\n            var xOffset = lastBody ? column * lastBodyWidth : 0;\r\n            \r\n            return callback(xx + xOffset + column * columnGap, y, column, row, lastBody, i);\r\n        });\r\n    };\r\n\r\n    /**\r\n     * Creates a composite with a Newton's Cradle setup of bodies and constraints.\r\n     * @method newtonsCradle\r\n     * @param {number} xx\r\n     * @param {number} yy\r\n     * @param {number} number\r\n     * @param {number} size\r\n     * @param {number} length\r\n     * @return {composite} A new composite newtonsCradle body\r\n     */\r\n    Composites.newtonsCradle = function(xx, yy, number, size, length) {\r\n        var newtonsCradle = Composite.create({ label: 'Newtons Cradle' });\r\n\r\n        for (var i = 0; i < number; i++) {\r\n            var separation = 1.9,\r\n                circle = Bodies.circle(xx + i * (size * separation), yy + length, size, \r\n                            { inertia: Infinity, restitution: 1, friction: 0, frictionAir: 0.0001, slop: 1 }),\r\n                constraint = Constraint.create({ pointA: { x: xx + i * (size * separation), y: yy }, bodyB: circle });\r\n\r\n            Composite.addBody(newtonsCradle, circle);\r\n            Composite.addConstraint(newtonsCradle, constraint);\r\n        }\r\n\r\n        return newtonsCradle;\r\n    };\r\n    \r\n    /**\r\n     * Creates a composite with simple car setup of bodies and constraints.\r\n     * @method car\r\n     * @param {number} xx\r\n     * @param {number} yy\r\n     * @param {number} width\r\n     * @param {number} height\r\n     * @param {number} wheelSize\r\n     * @return {composite} A new composite car body\r\n     */\r\n    Composites.car = function(xx, yy, width, height, wheelSize) {\r\n        var group = Body.nextGroup(true),\r\n            wheelBase = 20,\r\n            wheelAOffset = -width * 0.5 + wheelBase,\r\n            wheelBOffset = width * 0.5 - wheelBase,\r\n            wheelYOffset = 0;\r\n    \r\n        var car = Composite.create({ label: 'Car' }),\r\n            body = Bodies.rectangle(xx, yy, width, height, { \r\n                collisionFilter: {\r\n                    group: group\r\n                },\r\n                chamfer: {\r\n                    radius: height * 0.5\r\n                },\r\n                density: 0.0002\r\n            });\r\n    \r\n        var wheelA = Bodies.circle(xx + wheelAOffset, yy + wheelYOffset, wheelSize, { \r\n            collisionFilter: {\r\n                group: group\r\n            },\r\n            friction: 0.8\r\n        });\r\n                    \r\n        var wheelB = Bodies.circle(xx + wheelBOffset, yy + wheelYOffset, wheelSize, { \r\n            collisionFilter: {\r\n                group: group\r\n            },\r\n            friction: 0.8\r\n        });\r\n                    \r\n        var axelA = Constraint.create({\r\n            bodyB: body,\r\n            pointB: { x: wheelAOffset, y: wheelYOffset },\r\n            bodyA: wheelA,\r\n            stiffness: 1,\r\n            length: 0\r\n        });\r\n                        \r\n        var axelB = Constraint.create({\r\n            bodyB: body,\r\n            pointB: { x: wheelBOffset, y: wheelYOffset },\r\n            bodyA: wheelB,\r\n            stiffness: 1,\r\n            length: 0\r\n        });\r\n        \r\n        Composite.addBody(car, body);\r\n        Composite.addBody(car, wheelA);\r\n        Composite.addBody(car, wheelB);\r\n        Composite.addConstraint(car, axelA);\r\n        Composite.addConstraint(car, axelB);\r\n\r\n        return car;\r\n    };\r\n\r\n    /**\r\n     * Creates a simple soft body like object.\r\n     * @method softBody\r\n     * @param {number} xx\r\n     * @param {number} yy\r\n     * @param {number} columns\r\n     * @param {number} rows\r\n     * @param {number} columnGap\r\n     * @param {number} rowGap\r\n     * @param {boolean} crossBrace\r\n     * @param {number} particleRadius\r\n     * @param {} particleOptions\r\n     * @param {} constraintOptions\r\n     * @return {composite} A new composite softBody\r\n     */\r\n    Composites.softBody = function(xx, yy, columns, rows, columnGap, rowGap, crossBrace, particleRadius, particleOptions, constraintOptions) {\r\n        particleOptions = Common.extend({ inertia: Infinity }, particleOptions);\r\n        constraintOptions = Common.extend({ stiffness: 0.2, render: { type: 'line', anchors: false } }, constraintOptions);\r\n\r\n        var softBody = Composites.stack(xx, yy, columns, rows, columnGap, rowGap, function(x, y) {\r\n            return Bodies.circle(x, y, particleRadius, particleOptions);\r\n        });\r\n\r\n        Composites.mesh(softBody, columns, rows, crossBrace, constraintOptions);\r\n\r\n        softBody.label = 'Soft Body';\r\n\r\n        return softBody;\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZmFjdG9yeS9Db21wb3NpdGVzLmpzPzUwMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyw0RkFBbUI7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsMEdBQTBCO0FBQ25ELGFBQWEsbUJBQU8sQ0FBQyxzRkFBZ0I7QUFDckMsV0FBVyxtQkFBTyxDQUFDLGtGQUFjO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxtRkFBVTs7QUFFL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBLHNDQUFzQyxpQkFBaUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLFlBQVk7QUFDckM7O0FBRUEsZ0NBQWdDLGtCQUFrQjtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsMEU7O0FBRUE7QUFDQTs7QUFFQSwwQ0FBMEMsMENBQTBDOztBQUVwRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QixzREFBc0Q7QUFDL0U7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsWUFBWTtBQUNqQyx5QkFBeUIsZUFBZTtBQUN4QztBQUNBO0FBQ0Esb0ZBQW9GLDZCQUE2QjtBQUNqSDs7QUFFQTtBQUNBLDZCQUE2QixlQUFlO0FBQzVDO0FBQ0E7QUFDQSx3RkFBd0YsNkJBQTZCOztBQUVySDtBQUNBO0FBQ0EsNEZBQTRGLDZCQUE2QjtBQUN6SDs7QUFFQTtBQUNBO0FBQ0EsNEZBQTRGLDZCQUE2QjtBQUN6SDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLG1FQUFtRTtBQUM3Rzs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQSw4Q0FBOEMsMEJBQTBCOztBQUV4RSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBO0FBQ0EsNkJBQTZCLCtFQUErRTtBQUM1RyxnREFBZ0QsVUFBVSx5Q0FBeUMsaUJBQWlCOztBQUVwSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxlQUFlO0FBQ25ELDREO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTs7QUFFYixxRjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTOztBQUVULHFGO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLHFCQUFxQixtQ0FBbUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EscUJBQXFCLG1DQUFtQztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBLHlDQUF5QyxvQkFBb0I7QUFDN0QsMkNBQTJDLDBCQUEwQiwrQkFBK0IsRUFBRTs7QUFFdEc7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2ZhY3RvcnkvQ29tcG9zaXRlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLkNvbXBvc2l0ZXNgIG1vZHVsZSBjb250YWlucyBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0aW5nIGNvbXBvc2l0ZSBib2RpZXNcclxuKiB3aXRoIGNvbW1vbmx5IHVzZWQgY29uZmlndXJhdGlvbnMgKHN1Y2ggYXMgc3RhY2tzIGFuZCBjaGFpbnMpLlxyXG4qXHJcbiogU2VlIHRoZSBpbmNsdWRlZCB1c2FnZSBbZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9saWFicnUvbWF0dGVyLWpzL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS5cclxuKlxyXG4qIEBjbGFzcyBDb21wb3NpdGVzXHJcbiovXHJcblxyXG52YXIgQ29tcG9zaXRlcyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wb3NpdGVzO1xyXG5cclxudmFyIENvbXBvc2l0ZSA9IHJlcXVpcmUoJy4uL2JvZHkvQ29tcG9zaXRlJyk7XHJcbnZhciBDb25zdHJhaW50ID0gcmVxdWlyZSgnLi4vY29uc3RyYWludC9Db25zdHJhaW50Jyk7XHJcbnZhciBDb21tb24gPSByZXF1aXJlKCcuLi9jb3JlL0NvbW1vbicpO1xyXG52YXIgQm9keSA9IHJlcXVpcmUoJy4uL2JvZHkvQm9keScpO1xyXG52YXIgQm9kaWVzID0gcmVxdWlyZSgnLi9Cb2RpZXMnKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBib2RpZXMgY3JlYXRlZCBpbiB0aGUgY2FsbGJhY2sgaW4gYSBncmlkIGFycmFuZ2VtZW50LlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBib2R5J3MgYm91bmRzIHRvIHByZXZlbnQgb3ZlcmxhcHMuXHJcbiAgICAgKiBAbWV0aG9kIHN0YWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5eVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uR2FwXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93R2FwXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBBIG5ldyBjb21wb3NpdGUgY29udGFpbmluZyBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIGNhbGxiYWNrXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZXMuc3RhY2sgPSBmdW5jdGlvbih4eCwgeXksIGNvbHVtbnMsIHJvd3MsIGNvbHVtbkdhcCwgcm93R2FwLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBzdGFjayA9IENvbXBvc2l0ZS5jcmVhdGUoeyBsYWJlbDogJ1N0YWNrJyB9KSxcclxuICAgICAgICAgICAgeCA9IHh4LFxyXG4gICAgICAgICAgICB5ID0geXksXHJcbiAgICAgICAgICAgIGxhc3RCb2R5LFxyXG4gICAgICAgICAgICBpID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcclxuICAgICAgICAgICAgdmFyIG1heEhlaWdodCA9IDA7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zOyBjb2x1bW4rKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBjYWxsYmFjayh4LCB5LCBjb2x1bW4sIHJvdywgbGFzdEJvZHksIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYm9keUhlaWdodCA9IGJvZHkuYm91bmRzLm1heC55IC0gYm9keS5ib3VuZHMubWluLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlXaWR0aCA9IGJvZHkuYm91bmRzLm1heC54IC0gYm9keS5ib3VuZHMubWluLng7IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keUhlaWdodCA+IG1heEhlaWdodClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm9keUhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBCb2R5LnRyYW5zbGF0ZShib2R5LCB7IHg6IGJvZHlXaWR0aCAqIDAuNSwgeTogYm9keUhlaWdodCAqIDAuNSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IGJvZHkuYm91bmRzLm1heC54ICsgY29sdW1uR2FwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQm9keShzdGFjaywgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEJvZHkgPSBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gMTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeCArPSBjb2x1bW5HYXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHkgKz0gbWF4SGVpZ2h0ICsgcm93R2FwO1xyXG4gICAgICAgICAgICB4ID0geHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RhY2s7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENoYWlucyBhbGwgYm9kaWVzIGluIHRoZSBnaXZlbiBjb21wb3NpdGUgdG9nZXRoZXIgdXNpbmcgY29uc3RyYWludHMuXHJcbiAgICAgKiBAbWV0aG9kIGNoYWluXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geE9mZnNldEFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5T2Zmc2V0QVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHhPZmZzZXRCXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geU9mZnNldEJcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IEEgbmV3IGNvbXBvc2l0ZSBjb250YWluaW5nIG9iamVjdHMgY2hhaW5lZCB0b2dldGhlciB3aXRoIGNvbnN0cmFpbnRzXHJcbiAgICAgKi9cclxuICAgIENvbXBvc2l0ZXMuY2hhaW4gPSBmdW5jdGlvbihjb21wb3NpdGUsIHhPZmZzZXRBLCB5T2Zmc2V0QSwgeE9mZnNldEIsIHlPZmZzZXRCLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGJvZGllcyA9IGNvbXBvc2l0ZS5ib2RpZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBib2RpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGJvZHlBID0gYm9kaWVzW2kgLSAxXSxcclxuICAgICAgICAgICAgICAgIGJvZHlCID0gYm9kaWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgYm9keUFIZWlnaHQgPSBib2R5QS5ib3VuZHMubWF4LnkgLSBib2R5QS5ib3VuZHMubWluLnksXHJcbiAgICAgICAgICAgICAgICBib2R5QVdpZHRoID0gYm9keUEuYm91bmRzLm1heC54IC0gYm9keUEuYm91bmRzLm1pbi54LCBcclxuICAgICAgICAgICAgICAgIGJvZHlCSGVpZ2h0ID0gYm9keUIuYm91bmRzLm1heC55IC0gYm9keUIuYm91bmRzLm1pbi55LFxyXG4gICAgICAgICAgICAgICAgYm9keUJXaWR0aCA9IGJvZHlCLmJvdW5kcy5tYXgueCAtIGJvZHlCLmJvdW5kcy5taW4ueDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICAgICAgYm9keUE6IGJvZHlBLFxyXG4gICAgICAgICAgICAgICAgcG9pbnRBOiB7IHg6IGJvZHlBV2lkdGggKiB4T2Zmc2V0QSwgeTogYm9keUFIZWlnaHQgKiB5T2Zmc2V0QSB9LFxyXG4gICAgICAgICAgICAgICAgYm9keUI6IGJvZHlCLFxyXG4gICAgICAgICAgICAgICAgcG9pbnRCOiB7IHg6IGJvZHlCV2lkdGggKiB4T2Zmc2V0QiwgeTogYm9keUJIZWlnaHQgKiB5T2Zmc2V0QiB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IENvbW1vbi5leHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIENvbnN0cmFpbnQuY3JlYXRlKGNvbnN0cmFpbnQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvc2l0ZS5sYWJlbCArPSAnIENoYWluJztcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gY29tcG9zaXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lY3RzIGJvZGllcyBpbiB0aGUgY29tcG9zaXRlIHdpdGggY29uc3RyYWludHMgaW4gYSBncmlkIHBhdHRlcm4sIHdpdGggb3B0aW9uYWwgY3Jvc3MgYnJhY2VzLlxyXG4gICAgICogQG1ldGhvZCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge2NvbXBvc2l0ZX0gY29tcG9zaXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3NcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY3Jvc3NCcmFjZVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gVGhlIGNvbXBvc2l0ZSBjb250YWluaW5nIG9iamVjdHMgbWVzaGVkIHRvZ2V0aGVyIHdpdGggY29uc3RyYWludHNcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlcy5tZXNoID0gZnVuY3Rpb24oY29tcG9zaXRlLCBjb2x1bW5zLCByb3dzLCBjcm9zc0JyYWNlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGJvZGllcyA9IGNvbXBvc2l0ZS5ib2RpZXMsXHJcbiAgICAgICAgICAgIHJvdyxcclxuICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICBib2R5QSxcclxuICAgICAgICAgICAgYm9keUIsXHJcbiAgICAgICAgICAgIGJvZHlDO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcclxuICAgICAgICAgICAgZm9yIChjb2wgPSAxOyBjb2wgPCBjb2x1bW5zOyBjb2wrKykge1xyXG4gICAgICAgICAgICAgICAgYm9keUEgPSBib2RpZXNbKGNvbCAtIDEpICsgKHJvdyAqIGNvbHVtbnMpXTtcclxuICAgICAgICAgICAgICAgIGJvZHlCID0gYm9kaWVzW2NvbCArIChyb3cgKiBjb2x1bW5zKV07XHJcbiAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIENvbnN0cmFpbnQuY3JlYXRlKENvbW1vbi5leHRlbmQoeyBib2R5QTogYm9keUEsIGJvZHlCOiBib2R5QiB9LCBvcHRpb25zKSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocm93ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBjb2x1bW5zOyBjb2wrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHlBID0gYm9kaWVzW2NvbCArICgocm93IC0gMSkgKiBjb2x1bW5zKV07XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUIgPSBib2RpZXNbY29sICsgKHJvdyAqIGNvbHVtbnMpXTtcclxuICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIENvbnN0cmFpbnQuY3JlYXRlKENvbW1vbi5leHRlbmQoeyBib2R5QTogYm9keUEsIGJvZHlCOiBib2R5QiB9LCBvcHRpb25zKSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3Jvc3NCcmFjZSAmJiBjb2wgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDID0gYm9kaWVzWyhjb2wgLSAxKSArICgocm93IC0gMSkgKiBjb2x1bW5zKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZS5hZGRDb25zdHJhaW50KGNvbXBvc2l0ZSwgQ29uc3RyYWludC5jcmVhdGUoQ29tbW9uLmV4dGVuZCh7IGJvZHlBOiBib2R5QywgYm9keUI6IGJvZHlCIH0sIG9wdGlvbnMpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3Jvc3NCcmFjZSAmJiBjb2wgPCBjb2x1bW5zIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5QyA9IGJvZGllc1soY29sICsgMSkgKyAoKHJvdyAtIDEpICogY29sdW1ucyldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGUuYWRkQ29uc3RyYWludChjb21wb3NpdGUsIENvbnN0cmFpbnQuY3JlYXRlKENvbW1vbi5leHRlbmQoeyBib2R5QTogYm9keUMsIGJvZHlCOiBib2R5QiB9LCBvcHRpb25zKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9zaXRlLmxhYmVsICs9ICcgTWVzaCc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGNvbXBvc2l0ZSBjb250YWluaW5nIGJvZGllcyBjcmVhdGVkIGluIHRoZSBjYWxsYmFjayBpbiBhIHB5cmFtaWQgYXJyYW5nZW1lbnQuXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGJvZHkncyBib3VuZHMgdG8gcHJldmVudCBvdmVybGFwcy5cclxuICAgICAqIEBtZXRob2QgcHlyYW1pZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHh4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geXlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkdhcFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0dhcFxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gQSBuZXcgY29tcG9zaXRlIGNvbnRhaW5pbmcgb2JqZWN0cyBjcmVhdGVkIGluIHRoZSBjYWxsYmFja1xyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGVzLnB5cmFtaWQgPSBmdW5jdGlvbih4eCwgeXksIGNvbHVtbnMsIHJvd3MsIGNvbHVtbkdhcCwgcm93R2FwLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiBDb21wb3NpdGVzLnN0YWNrKHh4LCB5eSwgY29sdW1ucywgcm93cywgY29sdW1uR2FwLCByb3dHYXAsIGZ1bmN0aW9uKHgsIHksIGNvbHVtbiwgcm93LCBsYXN0Qm9keSwgaSkge1xyXG4gICAgICAgICAgICB2YXIgYWN0dWFsUm93cyA9IE1hdGgubWluKHJvd3MsIE1hdGguY2VpbChjb2x1bW5zIC8gMikpLFxyXG4gICAgICAgICAgICAgICAgbGFzdEJvZHlXaWR0aCA9IGxhc3RCb2R5ID8gbGFzdEJvZHkuYm91bmRzLm1heC54IC0gbGFzdEJvZHkuYm91bmRzLm1pbi54IDogMDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChyb3cgPiBhY3R1YWxSb3dzKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gcmV2ZXJzZSByb3cgb3JkZXJcclxuICAgICAgICAgICAgcm93ID0gYWN0dWFsUm93cyAtIHJvdztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHJvdyxcclxuICAgICAgICAgICAgICAgIGVuZCA9IGNvbHVtbnMgLSAxIC0gcm93O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0IHx8IGNvbHVtbiA+IGVuZClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHJldHJvYWN0aXZlbHkgZml4IHRoZSBmaXJzdCBib2R5J3MgcG9zaXRpb24sIHNpbmNlIHdpZHRoIHdhcyB1bmtub3duXHJcbiAgICAgICAgICAgIGlmIChpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBCb2R5LnRyYW5zbGF0ZShsYXN0Qm9keSwgeyB4OiAoY29sdW1uICsgKGNvbHVtbnMgJSAyID09PSAxID8gMSA6IC0xKSkgKiBsYXN0Qm9keVdpZHRoLCB5OiAwIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgeE9mZnNldCA9IGxhc3RCb2R5ID8gY29sdW1uICogbGFzdEJvZHlXaWR0aCA6IDA7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soeHggKyB4T2Zmc2V0ICsgY29sdW1uICogY29sdW1uR2FwLCB5LCBjb2x1bW4sIHJvdywgbGFzdEJvZHksIGkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgd2l0aCBhIE5ld3RvbidzIENyYWRsZSBzZXR1cCBvZiBib2RpZXMgYW5kIGNvbnN0cmFpbnRzLlxyXG4gICAgICogQG1ldGhvZCBuZXd0b25zQ3JhZGxlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5eVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge2NvbXBvc2l0ZX0gQSBuZXcgY29tcG9zaXRlIG5ld3RvbnNDcmFkbGUgYm9keVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGVzLm5ld3RvbnNDcmFkbGUgPSBmdW5jdGlvbih4eCwgeXksIG51bWJlciwgc2l6ZSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIG5ld3RvbnNDcmFkbGUgPSBDb21wb3NpdGUuY3JlYXRlKHsgbGFiZWw6ICdOZXd0b25zIENyYWRsZScgfSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHNlcGFyYXRpb24gPSAxLjksXHJcbiAgICAgICAgICAgICAgICBjaXJjbGUgPSBCb2RpZXMuY2lyY2xlKHh4ICsgaSAqIChzaXplICogc2VwYXJhdGlvbiksIHl5ICsgbGVuZ3RoLCBzaXplLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5lcnRpYTogSW5maW5pdHksIHJlc3RpdHV0aW9uOiAxLCBmcmljdGlvbjogMCwgZnJpY3Rpb25BaXI6IDAuMDAwMSwgc2xvcDogMSB9KSxcclxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBDb25zdHJhaW50LmNyZWF0ZSh7IHBvaW50QTogeyB4OiB4eCArIGkgKiAoc2l6ZSAqIHNlcGFyYXRpb24pLCB5OiB5eSB9LCBib2R5QjogY2lyY2xlIH0pO1xyXG5cclxuICAgICAgICAgICAgQ29tcG9zaXRlLmFkZEJvZHkobmV3dG9uc0NyYWRsZSwgY2lyY2xlKTtcclxuICAgICAgICAgICAgQ29tcG9zaXRlLmFkZENvbnN0cmFpbnQobmV3dG9uc0NyYWRsZSwgY29uc3RyYWludCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3dG9uc0NyYWRsZTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSB3aXRoIHNpbXBsZSBjYXIgc2V0dXAgb2YgYm9kaWVzIGFuZCBjb25zdHJhaW50cy5cclxuICAgICAqIEBtZXRob2QgY2FyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5eVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2hlZWxTaXplXHJcbiAgICAgKiBAcmV0dXJuIHtjb21wb3NpdGV9IEEgbmV3IGNvbXBvc2l0ZSBjYXIgYm9keVxyXG4gICAgICovXHJcbiAgICBDb21wb3NpdGVzLmNhciA9IGZ1bmN0aW9uKHh4LCB5eSwgd2lkdGgsIGhlaWdodCwgd2hlZWxTaXplKSB7XHJcbiAgICAgICAgdmFyIGdyb3VwID0gQm9keS5uZXh0R3JvdXAodHJ1ZSksXHJcbiAgICAgICAgICAgIHdoZWVsQmFzZSA9IDIwLFxyXG4gICAgICAgICAgICB3aGVlbEFPZmZzZXQgPSAtd2lkdGggKiAwLjUgKyB3aGVlbEJhc2UsXHJcbiAgICAgICAgICAgIHdoZWVsQk9mZnNldCA9IHdpZHRoICogMC41IC0gd2hlZWxCYXNlLFxyXG4gICAgICAgICAgICB3aGVlbFlPZmZzZXQgPSAwO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGNhciA9IENvbXBvc2l0ZS5jcmVhdGUoeyBsYWJlbDogJ0NhcicgfSksXHJcbiAgICAgICAgICAgIGJvZHkgPSBCb2RpZXMucmVjdGFuZ2xlKHh4LCB5eSwgd2lkdGgsIGhlaWdodCwgeyBcclxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwOiBncm91cFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNoYW1mZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGhlaWdodCAqIDAuNVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRlbnNpdHk6IDAuMDAwMlxyXG4gICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgIHZhciB3aGVlbEEgPSBCb2RpZXMuY2lyY2xlKHh4ICsgd2hlZWxBT2Zmc2V0LCB5eSArIHdoZWVsWU9mZnNldCwgd2hlZWxTaXplLCB7IFxyXG4gICAgICAgICAgICBjb2xsaXNpb25GaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgIGdyb3VwOiBncm91cFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmljdGlvbjogMC44XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIHdoZWVsQiA9IEJvZGllcy5jaXJjbGUoeHggKyB3aGVlbEJPZmZzZXQsIHl5ICsgd2hlZWxZT2Zmc2V0LCB3aGVlbFNpemUsIHsgXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbkZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXA6IGdyb3VwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyaWN0aW9uOiAwLjhcclxuICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB2YXIgYXhlbEEgPSBDb25zdHJhaW50LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIGJvZHlCOiBib2R5LFxyXG4gICAgICAgICAgICBwb2ludEI6IHsgeDogd2hlZWxBT2Zmc2V0LCB5OiB3aGVlbFlPZmZzZXQgfSxcclxuICAgICAgICAgICAgYm9keUE6IHdoZWVsQSxcclxuICAgICAgICAgICAgc3RpZmZuZXNzOiAxLFxyXG4gICAgICAgICAgICBsZW5ndGg6IDBcclxuICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGF4ZWxCID0gQ29uc3RyYWludC5jcmVhdGUoe1xyXG4gICAgICAgICAgICBib2R5QjogYm9keSxcclxuICAgICAgICAgICAgcG9pbnRCOiB7IHg6IHdoZWVsQk9mZnNldCwgeTogd2hlZWxZT2Zmc2V0IH0sXHJcbiAgICAgICAgICAgIGJvZHlBOiB3aGVlbEIsXHJcbiAgICAgICAgICAgIHN0aWZmbmVzczogMSxcclxuICAgICAgICAgICAgbGVuZ3RoOiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgQ29tcG9zaXRlLmFkZEJvZHkoY2FyLCBib2R5KTtcclxuICAgICAgICBDb21wb3NpdGUuYWRkQm9keShjYXIsIHdoZWVsQSk7XHJcbiAgICAgICAgQ29tcG9zaXRlLmFkZEJvZHkoY2FyLCB3aGVlbEIpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5hZGRDb25zdHJhaW50KGNhciwgYXhlbEEpO1xyXG4gICAgICAgIENvbXBvc2l0ZS5hZGRDb25zdHJhaW50KGNhciwgYXhlbEIpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBzaW1wbGUgc29mdCBib2R5IGxpa2Ugb2JqZWN0LlxyXG4gICAgICogQG1ldGhvZCBzb2Z0Qm9keVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHh4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geXlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkdhcFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0dhcFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjcm9zc0JyYWNlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFydGljbGVSYWRpdXNcclxuICAgICAqIEBwYXJhbSB7fSBwYXJ0aWNsZU9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7fSBjb25zdHJhaW50T3B0aW9uc1xyXG4gICAgICogQHJldHVybiB7Y29tcG9zaXRlfSBBIG5ldyBjb21wb3NpdGUgc29mdEJvZHlcclxuICAgICAqL1xyXG4gICAgQ29tcG9zaXRlcy5zb2Z0Qm9keSA9IGZ1bmN0aW9uKHh4LCB5eSwgY29sdW1ucywgcm93cywgY29sdW1uR2FwLCByb3dHYXAsIGNyb3NzQnJhY2UsIHBhcnRpY2xlUmFkaXVzLCBwYXJ0aWNsZU9wdGlvbnMsIGNvbnN0cmFpbnRPcHRpb25zKSB7XHJcbiAgICAgICAgcGFydGljbGVPcHRpb25zID0gQ29tbW9uLmV4dGVuZCh7IGluZXJ0aWE6IEluZmluaXR5IH0sIHBhcnRpY2xlT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3RyYWludE9wdGlvbnMgPSBDb21tb24uZXh0ZW5kKHsgc3RpZmZuZXNzOiAwLjIsIHJlbmRlcjogeyB0eXBlOiAnbGluZScsIGFuY2hvcnM6IGZhbHNlIH0gfSwgY29uc3RyYWludE9wdGlvbnMpO1xyXG5cclxuICAgICAgICB2YXIgc29mdEJvZHkgPSBDb21wb3NpdGVzLnN0YWNrKHh4LCB5eSwgY29sdW1ucywgcm93cywgY29sdW1uR2FwLCByb3dHYXAsIGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEJvZGllcy5jaXJjbGUoeCwgeSwgcGFydGljbGVSYWRpdXMsIHBhcnRpY2xlT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIENvbXBvc2l0ZXMubWVzaChzb2Z0Qm9keSwgY29sdW1ucywgcm93cywgY3Jvc3NCcmFjZSwgY29uc3RyYWludE9wdGlvbnMpO1xyXG5cclxuICAgICAgICBzb2Z0Qm9keS5sYWJlbCA9ICdTb2Z0IEJvZHknO1xyXG5cclxuICAgICAgICByZXR1cm4gc29mdEJvZHk7XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/factory/Composites.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Axes` module contains methods for creating and manipulating sets of axes.\r\n*\r\n* @class Axes\r\n*/\r\n\r\nvar Axes = {};\r\n\r\nmodule.exports = Axes;\r\n\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new set of axes from the given vertices.\r\n     * @method fromVertices\r\n     * @param {vertices} vertices\r\n     * @return {axes} A new axes from the given vertices\r\n     */\r\n    Axes.fromVertices = function(vertices) {\r\n        var axes = {};\r\n\r\n        // find the unique axes, using edge normal gradients\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            var j = (i + 1) % vertices.length, \r\n                normal = Vector.normalise({ \r\n                    x: vertices[j].y - vertices[i].y, \r\n                    y: vertices[i].x - vertices[j].x\r\n                }),\r\n                gradient = (normal.y === 0) ? Infinity : (normal.x / normal.y);\r\n            \r\n            // limit precision\r\n            gradient = gradient.toFixed(3).toString();\r\n            axes[gradient] = normal;\r\n        }\r\n\r\n        return Common.values(axes);\r\n    };\r\n\r\n    /**\r\n     * Rotates a set of axes by the given angle.\r\n     * @method rotate\r\n     * @param {axes} axes\r\n     * @param {number} angle\r\n     */\r\n    Axes.rotate = function(axes, angle) {\r\n        if (angle === 0)\r\n            return;\r\n        \r\n        var cos = Math.cos(angle),\r\n            sin = Math.sin(angle);\r\n\r\n        for (var i = 0; i < axes.length; i++) {\r\n            var axis = axes[i],\r\n                xx;\r\n            xx = axis.x * cos - axis.y * sin;\r\n            axis.y = axis.x * sin + axis.y * cos;\r\n            axis.x = xx;\r\n        }\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvQXhlcy5qcz83ZTg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsc0ZBQWdCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBLDJDO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvQXhlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLkF4ZXNgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIHNldHMgb2YgYXhlcy5cclxuKlxyXG4qIEBjbGFzcyBBeGVzXHJcbiovXHJcblxyXG52YXIgQXhlcyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBeGVzO1xyXG5cclxudmFyIFZlY3RvciA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlY3RvcicpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2V0IG9mIGF4ZXMgZnJvbSB0aGUgZ2l2ZW4gdmVydGljZXMuXHJcbiAgICAgKiBAbWV0aG9kIGZyb21WZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqIEByZXR1cm4ge2F4ZXN9IEEgbmV3IGF4ZXMgZnJvbSB0aGUgZ2l2ZW4gdmVydGljZXNcclxuICAgICAqL1xyXG4gICAgQXhlcy5mcm9tVmVydGljZXMgPSBmdW5jdGlvbih2ZXJ0aWNlcykge1xyXG4gICAgICAgIHZhciBheGVzID0ge307XHJcblxyXG4gICAgICAgIC8vIGZpbmQgdGhlIHVuaXF1ZSBheGVzLCB1c2luZyBlZGdlIG5vcm1hbCBncmFkaWVudHNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqID0gKGkgKyAxKSAlIHZlcnRpY2VzLmxlbmd0aCwgXHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBWZWN0b3Iubm9ybWFsaXNlKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgeDogdmVydGljZXNbal0ueSAtIHZlcnRpY2VzW2ldLnksIFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHZlcnRpY2VzW2ldLnggLSB2ZXJ0aWNlc1tqXS54XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIGdyYWRpZW50ID0gKG5vcm1hbC55ID09PSAwKSA/IEluZmluaXR5IDogKG5vcm1hbC54IC8gbm9ybWFsLnkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gbGltaXQgcHJlY2lzaW9uXHJcbiAgICAgICAgICAgIGdyYWRpZW50ID0gZ3JhZGllbnQudG9GaXhlZCgzKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBheGVzW2dyYWRpZW50XSA9IG5vcm1hbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBDb21tb24udmFsdWVzKGF4ZXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgYSBzZXQgb2YgYXhlcyBieSB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAgICAgKiBAbWV0aG9kIHJvdGF0ZVxyXG4gICAgICogQHBhcmFtIHtheGVzfSBheGVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICAgICAqL1xyXG4gICAgQXhlcy5yb3RhdGUgPSBmdW5jdGlvbihheGVzLCBhbmdsZSkge1xyXG4gICAgICAgIGlmIChhbmdsZSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyhhbmdsZSksXHJcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBheGlzID0gYXhlc1tpXSxcclxuICAgICAgICAgICAgICAgIHh4O1xyXG4gICAgICAgICAgICB4eCA9IGF4aXMueCAqIGNvcyAtIGF4aXMueSAqIHNpbjtcclxuICAgICAgICAgICAgYXhpcy55ID0gYXhpcy54ICogc2luICsgYXhpcy55ICogY29zO1xyXG4gICAgICAgICAgICBheGlzLnggPSB4eDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/geometry/Axes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* The `Matter.Bounds` module contains methods for creating and manipulating axis-aligned bounding boxes (AABB).\r\n*\r\n* @class Bounds\r\n*/\r\n\r\nvar Bounds = {};\r\n\r\nmodule.exports = Bounds;\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new axis-aligned bounding box (AABB) for the given vertices.\r\n     * @method create\r\n     * @param {vertices} vertices\r\n     * @return {bounds} A new bounds object\r\n     */\r\n    Bounds.create = function(vertices) {\r\n        var bounds = { \r\n            min: { x: 0, y: 0 }, \r\n            max: { x: 0, y: 0 }\r\n        };\r\n\r\n        if (vertices)\r\n            Bounds.update(bounds, vertices);\r\n        \r\n        return bounds;\r\n    };\r\n\r\n    /**\r\n     * Updates bounds using the given vertices and extends the bounds given a velocity.\r\n     * @method update\r\n     * @param {bounds} bounds\r\n     * @param {vertices} vertices\r\n     * @param {vector} velocity\r\n     */\r\n    Bounds.update = function(bounds, vertices, velocity) {\r\n        bounds.min.x = Infinity;\r\n        bounds.max.x = -Infinity;\r\n        bounds.min.y = Infinity;\r\n        bounds.max.y = -Infinity;\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            var vertex = vertices[i];\r\n            if (vertex.x > bounds.max.x) bounds.max.x = vertex.x;\r\n            if (vertex.x < bounds.min.x) bounds.min.x = vertex.x;\r\n            if (vertex.y > bounds.max.y) bounds.max.y = vertex.y;\r\n            if (vertex.y < bounds.min.y) bounds.min.y = vertex.y;\r\n        }\r\n        \r\n        if (velocity) {\r\n            if (velocity.x > 0) {\r\n                bounds.max.x += velocity.x;\r\n            } else {\r\n                bounds.min.x += velocity.x;\r\n            }\r\n            \r\n            if (velocity.y > 0) {\r\n                bounds.max.y += velocity.y;\r\n            } else {\r\n                bounds.min.y += velocity.y;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Returns true if the bounds contains the given point.\r\n     * @method contains\r\n     * @param {bounds} bounds\r\n     * @param {vector} point\r\n     * @return {boolean} True if the bounds contain the point, otherwise false\r\n     */\r\n    Bounds.contains = function(bounds, point) {\r\n        return point.x >= bounds.min.x && point.x <= bounds.max.x \r\n               && point.y >= bounds.min.y && point.y <= bounds.max.y;\r\n    };\r\n\r\n    /**\r\n     * Returns true if the two bounds intersect.\r\n     * @method overlaps\r\n     * @param {bounds} boundsA\r\n     * @param {bounds} boundsB\r\n     * @return {boolean} True if the bounds overlap, otherwise false\r\n     */\r\n    Bounds.overlaps = function(boundsA, boundsB) {\r\n        return (boundsA.min.x <= boundsB.max.x && boundsA.max.x >= boundsB.min.x\r\n                && boundsA.max.y >= boundsB.min.y && boundsA.min.y <= boundsB.max.y);\r\n    };\r\n\r\n    /**\r\n     * Translates the bounds by the given vector.\r\n     * @method translate\r\n     * @param {bounds} bounds\r\n     * @param {vector} vector\r\n     */\r\n    Bounds.translate = function(bounds, vector) {\r\n        bounds.min.x += vector.x;\r\n        bounds.max.x += vector.x;\r\n        bounds.min.y += vector.y;\r\n        bounds.max.y += vector.y;\r\n    };\r\n\r\n    /**\r\n     * Shifts the bounds to the given position.\r\n     * @method shift\r\n     * @param {bounds} bounds\r\n     * @param {vector} position\r\n     */\r\n    Bounds.shift = function(bounds, position) {\r\n        var deltaX = bounds.max.x - bounds.min.x,\r\n            deltaY = bounds.max.y - bounds.min.y;\r\n            \r\n        bounds.min.x = position.x;\r\n        bounds.max.x = position.x + deltaX;\r\n        bounds.min.y = position.y;\r\n        bounds.max.y = position.y + deltaY;\r\n    };\r\n    \r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvQm91bmRzLmpzPzJkZmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBLHNCO0FBQ0Esa0JBQWtCLGFBQWE7QUFDL0Isa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvQm91bmRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuQm91bmRzYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBheGlzLWFsaWduZWQgYm91bmRpbmcgYm94ZXMgKEFBQkIpLlxyXG4qXHJcbiogQGNsYXNzIEJvdW5kc1xyXG4qL1xyXG5cclxudmFyIEJvdW5kcyA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3VuZHM7XHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGF4aXMtYWxpZ25lZCBib3VuZGluZyBib3ggKEFBQkIpIGZvciB0aGUgZ2l2ZW4gdmVydGljZXMuXHJcbiAgICAgKiBAbWV0aG9kIGNyZWF0ZVxyXG4gICAgICogQHBhcmFtIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqIEByZXR1cm4ge2JvdW5kc30gQSBuZXcgYm91bmRzIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBCb3VuZHMuY3JlYXRlID0gZnVuY3Rpb24odmVydGljZXMpIHtcclxuICAgICAgICB2YXIgYm91bmRzID0geyBcclxuICAgICAgICAgICAgbWluOiB7IHg6IDAsIHk6IDAgfSwgXHJcbiAgICAgICAgICAgIG1heDogeyB4OiAwLCB5OiAwIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodmVydGljZXMpXHJcbiAgICAgICAgICAgIEJvdW5kcy51cGRhdGUoYm91bmRzLCB2ZXJ0aWNlcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGJvdW5kcztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGJvdW5kcyB1c2luZyB0aGUgZ2l2ZW4gdmVydGljZXMgYW5kIGV4dGVuZHMgdGhlIGJvdW5kcyBnaXZlbiBhIHZlbG9jaXR5LlxyXG4gICAgICogQG1ldGhvZCB1cGRhdGVcclxuICAgICAqIEBwYXJhbSB7Ym91bmRzfSBib3VuZHNcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gdmVsb2NpdHlcclxuICAgICAqL1xyXG4gICAgQm91bmRzLnVwZGF0ZSA9IGZ1bmN0aW9uKGJvdW5kcywgdmVydGljZXMsIHZlbG9jaXR5KSB7XHJcbiAgICAgICAgYm91bmRzLm1pbi54ID0gSW5maW5pdHk7XHJcbiAgICAgICAgYm91bmRzLm1heC54ID0gLUluZmluaXR5O1xyXG4gICAgICAgIGJvdW5kcy5taW4ueSA9IEluZmluaXR5O1xyXG4gICAgICAgIGJvdW5kcy5tYXgueSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmVydGV4ID0gdmVydGljZXNbaV07XHJcbiAgICAgICAgICAgIGlmICh2ZXJ0ZXgueCA+IGJvdW5kcy5tYXgueCkgYm91bmRzLm1heC54ID0gdmVydGV4Lng7XHJcbiAgICAgICAgICAgIGlmICh2ZXJ0ZXgueCA8IGJvdW5kcy5taW4ueCkgYm91bmRzLm1pbi54ID0gdmVydGV4Lng7XHJcbiAgICAgICAgICAgIGlmICh2ZXJ0ZXgueSA+IGJvdW5kcy5tYXgueSkgYm91bmRzLm1heC55ID0gdmVydGV4Lnk7XHJcbiAgICAgICAgICAgIGlmICh2ZXJ0ZXgueSA8IGJvdW5kcy5taW4ueSkgYm91bmRzLm1pbi55ID0gdmVydGV4Lnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh2ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICBpZiAodmVsb2NpdHkueCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kcy5tYXgueCArPSB2ZWxvY2l0eS54O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYm91bmRzLm1pbi54ICs9IHZlbG9jaXR5Lng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh2ZWxvY2l0eS55ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYm91bmRzLm1heC55ICs9IHZlbG9jaXR5Lnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZHMubWluLnkgKz0gdmVsb2NpdHkueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJvdW5kcyBjb250YWlucyB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgICAgKiBAbWV0aG9kIGNvbnRhaW5zXHJcbiAgICAgKiBAcGFyYW0ge2JvdW5kc30gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGJvdW5kcyBjb250YWluIHRoZSBwb2ludCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIEJvdW5kcy5jb250YWlucyA9IGZ1bmN0aW9uKGJvdW5kcywgcG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gcG9pbnQueCA+PSBib3VuZHMubWluLnggJiYgcG9pbnQueCA8PSBib3VuZHMubWF4LnggXHJcbiAgICAgICAgICAgICAgICYmIHBvaW50LnkgPj0gYm91bmRzLm1pbi55ICYmIHBvaW50LnkgPD0gYm91bmRzLm1heC55O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGJvdW5kcyBpbnRlcnNlY3QuXHJcbiAgICAgKiBAbWV0aG9kIG92ZXJsYXBzXHJcbiAgICAgKiBAcGFyYW0ge2JvdW5kc30gYm91bmRzQVxyXG4gICAgICogQHBhcmFtIHtib3VuZHN9IGJvdW5kc0JcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGJvdW5kcyBvdmVybGFwLCBvdGhlcndpc2UgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQm91bmRzLm92ZXJsYXBzID0gZnVuY3Rpb24oYm91bmRzQSwgYm91bmRzQikge1xyXG4gICAgICAgIHJldHVybiAoYm91bmRzQS5taW4ueCA8PSBib3VuZHNCLm1heC54ICYmIGJvdW5kc0EubWF4LnggPj0gYm91bmRzQi5taW4ueFxyXG4gICAgICAgICAgICAgICAgJiYgYm91bmRzQS5tYXgueSA+PSBib3VuZHNCLm1pbi55ICYmIGJvdW5kc0EubWluLnkgPD0gYm91bmRzQi5tYXgueSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlcyB0aGUgYm91bmRzIGJ5IHRoZSBnaXZlbiB2ZWN0b3IuXHJcbiAgICAgKiBAbWV0aG9kIHRyYW5zbGF0ZVxyXG4gICAgICogQHBhcmFtIHtib3VuZHN9IGJvdW5kc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICovXHJcbiAgICBCb3VuZHMudHJhbnNsYXRlID0gZnVuY3Rpb24oYm91bmRzLCB2ZWN0b3IpIHtcclxuICAgICAgICBib3VuZHMubWluLnggKz0gdmVjdG9yLng7XHJcbiAgICAgICAgYm91bmRzLm1heC54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIGJvdW5kcy5taW4ueSArPSB2ZWN0b3IueTtcclxuICAgICAgICBib3VuZHMubWF4LnkgKz0gdmVjdG9yLnk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hpZnRzIHRoZSBib3VuZHMgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICogQG1ldGhvZCBzaGlmdFxyXG4gICAgICogQHBhcmFtIHtib3VuZHN9IGJvdW5kc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIEJvdW5kcy5zaGlmdCA9IGZ1bmN0aW9uKGJvdW5kcywgcG9zaXRpb24pIHtcclxuICAgICAgICB2YXIgZGVsdGFYID0gYm91bmRzLm1heC54IC0gYm91bmRzLm1pbi54LFxyXG4gICAgICAgICAgICBkZWx0YVkgPSBib3VuZHMubWF4LnkgLSBib3VuZHMubWluLnk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIGJvdW5kcy5taW4ueCA9IHBvc2l0aW9uLng7XHJcbiAgICAgICAgYm91bmRzLm1heC54ID0gcG9zaXRpb24ueCArIGRlbHRhWDtcclxuICAgICAgICBib3VuZHMubWluLnkgPSBwb3NpdGlvbi55O1xyXG4gICAgICAgIGJvdW5kcy5tYXgueSA9IHBvc2l0aW9uLnkgKyBkZWx0YVk7XHJcbiAgICB9O1xyXG4gICAgXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/geometry/Svg.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/geometry/Svg.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Svg` module contains methods for converting SVG images into an array of vector points.\r\n*\r\n* To use this module you also need the SVGPathSeg polyfill: https://github.com/progers/pathseg\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Svg\r\n*/\r\n\r\nvar Svg = {};\r\n\r\nmodule.exports = Svg;\r\n\r\nvar Bounds = __webpack_require__(/*! ../geometry/Bounds */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Bounds.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Converts an SVG path into an array of vector points.\r\n     * If the input path forms a concave shape, you must decompose the result into convex parts before use.\r\n     * See `Bodies.fromVertices` which provides support for this.\r\n     * Note that this function is not guaranteed to support complex paths (such as those with holes).\r\n     * You must load the `pathseg.js` polyfill on newer browsers.\r\n     * @method pathToVertices\r\n     * @param {SVGPathElement} path\r\n     * @param {Number} [sampleLength=15]\r\n     * @return {Vector[]} points\r\n     */\r\n    Svg.pathToVertices = function(path, sampleLength) {\r\n        if (typeof window !== 'undefined' && !('SVGPathSeg' in window)) {\r\n            Common.warn('Svg.pathToVertices: SVGPathSeg not defined, a polyfill is required.');\r\n        }\r\n\r\n        // https://github.com/wout/svg.topoly.js/blob/master/svg.topoly.js\r\n        var i, il, total, point, segment, segments, \r\n            segmentsQueue, lastSegment, \r\n            lastPoint, segmentIndex, points = [],\r\n            lx, ly, length = 0, x = 0, y = 0;\r\n\r\n        sampleLength = sampleLength || 15;\r\n\r\n        var addPoint = function(px, py, pathSegType) {\r\n            // all odd-numbered path types are relative except PATHSEG_CLOSEPATH (1)\r\n            var isRelative = pathSegType % 2 === 1 && pathSegType > 1;\r\n\r\n            // when the last point doesn't equal the current point add the current point\r\n            if (!lastPoint || px != lastPoint.x || py != lastPoint.y) {\r\n                if (lastPoint && isRelative) {\r\n                    lx = lastPoint.x;\r\n                    ly = lastPoint.y;\r\n                } else {\r\n                    lx = 0;\r\n                    ly = 0;\r\n                }\r\n\r\n                var point = {\r\n                    x: lx + px,\r\n                    y: ly + py\r\n                };\r\n\r\n                // set last point\r\n                if (isRelative || !lastPoint) {\r\n                    lastPoint = point;\r\n                }\r\n\r\n                points.push(point);\r\n\r\n                x = lx + px;\r\n                y = ly + py;\r\n            }\r\n        };\r\n\r\n        var addSegmentPoint = function(segment) {\r\n            var segType = segment.pathSegTypeAsLetter.toUpperCase();\r\n\r\n            // skip path ends\r\n            if (segType === 'Z') \r\n                return;\r\n\r\n            // map segment to x and y\r\n            switch (segType) {\r\n\r\n            case 'M':\r\n            case 'L':\r\n            case 'T':\r\n            case 'C':\r\n            case 'S':\r\n            case 'Q':\r\n                x = segment.x;\r\n                y = segment.y;\r\n                break;\r\n            case 'H':\r\n                x = segment.x;\r\n                break;\r\n            case 'V':\r\n                y = segment.y;\r\n                break;\r\n            }\r\n\r\n            addPoint(x, y, segment.pathSegType);\r\n        };\r\n\r\n        // ensure path is absolute\r\n        Svg._svgPathToAbsolute(path);\r\n\r\n        // get total length\r\n        total = path.getTotalLength();\r\n\r\n        // queue segments\r\n        segments = [];\r\n        for (i = 0; i < path.pathSegList.numberOfItems; i += 1)\r\n            segments.push(path.pathSegList.getItem(i));\r\n\r\n        segmentsQueue = segments.concat();\r\n\r\n        // sample through path\r\n        while (length < total) {\r\n            // get segment at position\r\n            segmentIndex = path.getPathSegAtLength(length);\r\n            segment = segments[segmentIndex];\r\n\r\n            // new segment\r\n            if (segment != lastSegment) {\r\n                while (segmentsQueue.length && segmentsQueue[0] != segment)\r\n                    addSegmentPoint(segmentsQueue.shift());\r\n\r\n                lastSegment = segment;\r\n            }\r\n\r\n            // add points in between when curving\r\n            // TODO: adaptive sampling\r\n            switch (segment.pathSegTypeAsLetter.toUpperCase()) {\r\n\r\n            case 'C':\r\n            case 'T':\r\n            case 'S':\r\n            case 'Q':\r\n            case 'A':\r\n                point = path.getPointAtLength(length);\r\n                addPoint(point.x, point.y, 0);\r\n                break;\r\n\r\n            }\r\n\r\n            // increment by sample value\r\n            length += sampleLength;\r\n        }\r\n\r\n        // add remaining segments not passed by sampling\r\n        for (i = 0, il = segmentsQueue.length; i < il; ++i)\r\n            addSegmentPoint(segmentsQueue[i]);\r\n\r\n        return points;\r\n    };\r\n\r\n    Svg._svgPathToAbsolute = function(path) {\r\n        // http://phrogz.net/convert-svg-path-to-all-absolute-commands\r\n        // Copyright (c) Gavin Kistner\r\n        // http://phrogz.net/js/_ReuseLicense.txt\r\n        // Modifications: tidy formatting and naming\r\n        var x0, y0, x1, y1, x2, y2, segs = path.pathSegList,\r\n            x = 0, y = 0, len = segs.numberOfItems;\r\n\r\n        for (var i = 0; i < len; ++i) {\r\n            var seg = segs.getItem(i),\r\n                segType = seg.pathSegTypeAsLetter;\r\n\r\n            if (/[MLHVCSQTA]/.test(segType)) {\r\n                if ('x' in seg) x = seg.x;\r\n                if ('y' in seg) y = seg.y;\r\n            } else {\r\n                if ('x1' in seg) x1 = x + seg.x1;\r\n                if ('x2' in seg) x2 = x + seg.x2;\r\n                if ('y1' in seg) y1 = y + seg.y1;\r\n                if ('y2' in seg) y2 = y + seg.y2;\r\n                if ('x' in seg) x += seg.x;\r\n                if ('y' in seg) y += seg.y;\r\n\r\n                switch (segType) {\r\n\r\n                case 'm':\r\n                    segs.replaceItem(path.createSVGPathSegMovetoAbs(x, y), i);\r\n                    break;\r\n                case 'l':\r\n                    segs.replaceItem(path.createSVGPathSegLinetoAbs(x, y), i);\r\n                    break;\r\n                case 'h':\r\n                    segs.replaceItem(path.createSVGPathSegLinetoHorizontalAbs(x), i);\r\n                    break;\r\n                case 'v':\r\n                    segs.replaceItem(path.createSVGPathSegLinetoVerticalAbs(y), i);\r\n                    break;\r\n                case 'c':\r\n                    segs.replaceItem(path.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2), i);\r\n                    break;\r\n                case 's':\r\n                    segs.replaceItem(path.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2), i);\r\n                    break;\r\n                case 'q':\r\n                    segs.replaceItem(path.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1), i);\r\n                    break;\r\n                case 't':\r\n                    segs.replaceItem(path.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y), i);\r\n                    break;\r\n                case 'a':\r\n                    segs.replaceItem(path.createSVGPathSegArcAbs(x, y, seg.r1, seg.r2, seg.angle, seg.largeArcFlag, seg.sweepFlag), i);\r\n                    break;\r\n                case 'z':\r\n                case 'Z':\r\n                    x = x0;\r\n                    y = y0;\r\n                    break;\r\n\r\n                }\r\n            }\r\n\r\n            if (segType == 'M' || segType == 'm') {\r\n                x0 = x;\r\n                y0 = y;\r\n            }\r\n        }\r\n    };\r\n\r\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvU3ZnLmpzPzYwNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyw4RkFBb0I7QUFDekMsYUFBYSxtQkFBTyxDQUFDLHNGQUFnQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLG9DQUFvQztBQUN2RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2dlb21ldHJ5L1N2Zy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIFRoZSBgTWF0dGVyLlN2Z2AgbW9kdWxlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIGNvbnZlcnRpbmcgU1ZHIGltYWdlcyBpbnRvIGFuIGFycmF5IG9mIHZlY3RvciBwb2ludHMuXHJcbipcclxuKiBUbyB1c2UgdGhpcyBtb2R1bGUgeW91IGFsc28gbmVlZCB0aGUgU1ZHUGF0aFNlZyBwb2x5ZmlsbDogaHR0cHM6Ly9naXRodWIuY29tL3Byb2dlcnMvcGF0aHNlZ1xyXG4qXHJcbiogU2VlIHRoZSBpbmNsdWRlZCB1c2FnZSBbZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9saWFicnUvbWF0dGVyLWpzL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS5cclxuKlxyXG4qIEBjbGFzcyBTdmdcclxuKi9cclxuXHJcbnZhciBTdmcgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3ZnO1xyXG5cclxudmFyIEJvdW5kcyA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L0JvdW5kcycpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIGFuIFNWRyBwYXRoIGludG8gYW4gYXJyYXkgb2YgdmVjdG9yIHBvaW50cy5cclxuICAgICAqIElmIHRoZSBpbnB1dCBwYXRoIGZvcm1zIGEgY29uY2F2ZSBzaGFwZSwgeW91IG11c3QgZGVjb21wb3NlIHRoZSByZXN1bHQgaW50byBjb252ZXggcGFydHMgYmVmb3JlIHVzZS5cclxuICAgICAqIFNlZSBgQm9kaWVzLmZyb21WZXJ0aWNlc2Agd2hpY2ggcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhpcy5cclxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1cHBvcnQgY29tcGxleCBwYXRocyAoc3VjaCBhcyB0aG9zZSB3aXRoIGhvbGVzKS5cclxuICAgICAqIFlvdSBtdXN0IGxvYWQgdGhlIGBwYXRoc2VnLmpzYCBwb2x5ZmlsbCBvbiBuZXdlciBicm93c2Vycy5cclxuICAgICAqIEBtZXRob2QgcGF0aFRvVmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7U1ZHUGF0aEVsZW1lbnR9IHBhdGhcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlTGVuZ3RoPTE1XVxyXG4gICAgICogQHJldHVybiB7VmVjdG9yW119IHBvaW50c1xyXG4gICAgICovXHJcbiAgICBTdmcucGF0aFRvVmVydGljZXMgPSBmdW5jdGlvbihwYXRoLCBzYW1wbGVMZW5ndGgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISgnU1ZHUGF0aFNlZycgaW4gd2luZG93KSkge1xyXG4gICAgICAgICAgICBDb21tb24ud2FybignU3ZnLnBhdGhUb1ZlcnRpY2VzOiBTVkdQYXRoU2VnIG5vdCBkZWZpbmVkLCBhIHBvbHlmaWxsIGlzIHJlcXVpcmVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dvdXQvc3ZnLnRvcG9seS5qcy9ibG9iL21hc3Rlci9zdmcudG9wb2x5LmpzXHJcbiAgICAgICAgdmFyIGksIGlsLCB0b3RhbCwgcG9pbnQsIHNlZ21lbnQsIHNlZ21lbnRzLCBcclxuICAgICAgICAgICAgc2VnbWVudHNRdWV1ZSwgbGFzdFNlZ21lbnQsIFxyXG4gICAgICAgICAgICBsYXN0UG9pbnQsIHNlZ21lbnRJbmRleCwgcG9pbnRzID0gW10sXHJcbiAgICAgICAgICAgIGx4LCBseSwgbGVuZ3RoID0gMCwgeCA9IDAsIHkgPSAwO1xyXG5cclxuICAgICAgICBzYW1wbGVMZW5ndGggPSBzYW1wbGVMZW5ndGggfHwgMTU7XHJcblxyXG4gICAgICAgIHZhciBhZGRQb2ludCA9IGZ1bmN0aW9uKHB4LCBweSwgcGF0aFNlZ1R5cGUpIHtcclxuICAgICAgICAgICAgLy8gYWxsIG9kZC1udW1iZXJlZCBwYXRoIHR5cGVzIGFyZSByZWxhdGl2ZSBleGNlcHQgUEFUSFNFR19DTE9TRVBBVEggKDEpXHJcbiAgICAgICAgICAgIHZhciBpc1JlbGF0aXZlID0gcGF0aFNlZ1R5cGUgJSAyID09PSAxICYmIHBhdGhTZWdUeXBlID4gMTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIGxhc3QgcG9pbnQgZG9lc24ndCBlcXVhbCB0aGUgY3VycmVudCBwb2ludCBhZGQgdGhlIGN1cnJlbnQgcG9pbnRcclxuICAgICAgICAgICAgaWYgKCFsYXN0UG9pbnQgfHwgcHggIT0gbGFzdFBvaW50LnggfHwgcHkgIT0gbGFzdFBvaW50LnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0UG9pbnQgJiYgaXNSZWxhdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGx4ID0gbGFzdFBvaW50Lng7XHJcbiAgICAgICAgICAgICAgICAgICAgbHkgPSBsYXN0UG9pbnQueTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGx5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogbHggKyBweCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBseSArIHB5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNldCBsYXN0IHBvaW50XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGl2ZSB8fCAhbGFzdFBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2gocG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHggPSBseCArIHB4O1xyXG4gICAgICAgICAgICAgICAgeSA9IGx5ICsgcHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYWRkU2VnbWVudFBvaW50ID0gZnVuY3Rpb24oc2VnbWVudCkge1xyXG4gICAgICAgICAgICB2YXIgc2VnVHlwZSA9IHNlZ21lbnQucGF0aFNlZ1R5cGVBc0xldHRlci50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2tpcCBwYXRoIGVuZHNcclxuICAgICAgICAgICAgaWYgKHNlZ1R5cGUgPT09ICdaJykgXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyBtYXAgc2VnbWVudCB0byB4IGFuZCB5XHJcbiAgICAgICAgICAgIHN3aXRjaCAoc2VnVHlwZSkge1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgICBjYXNlICdUJzpcclxuICAgICAgICAgICAgY2FzZSAnQyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICBjYXNlICdRJzpcclxuICAgICAgICAgICAgICAgIHggPSBzZWdtZW50Lng7XHJcbiAgICAgICAgICAgICAgICB5ID0gc2VnbWVudC55O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgICAgICAgeCA9IHNlZ21lbnQueDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdWJzpcclxuICAgICAgICAgICAgICAgIHkgPSBzZWdtZW50Lnk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWRkUG9pbnQoeCwgeSwgc2VnbWVudC5wYXRoU2VnVHlwZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gZW5zdXJlIHBhdGggaXMgYWJzb2x1dGVcclxuICAgICAgICBTdmcuX3N2Z1BhdGhUb0Fic29sdXRlKHBhdGgpO1xyXG5cclxuICAgICAgICAvLyBnZXQgdG90YWwgbGVuZ3RoXHJcbiAgICAgICAgdG90YWwgPSBwYXRoLmdldFRvdGFsTGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIC8vIHF1ZXVlIHNlZ21lbnRzXHJcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0aC5wYXRoU2VnTGlzdC5udW1iZXJPZkl0ZW1zOyBpICs9IDEpXHJcbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2gocGF0aC5wYXRoU2VnTGlzdC5nZXRJdGVtKGkpKTtcclxuXHJcbiAgICAgICAgc2VnbWVudHNRdWV1ZSA9IHNlZ21lbnRzLmNvbmNhdCgpO1xyXG5cclxuICAgICAgICAvLyBzYW1wbGUgdGhyb3VnaCBwYXRoXHJcbiAgICAgICAgd2hpbGUgKGxlbmd0aCA8IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIC8vIGdldCBzZWdtZW50IGF0IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIHNlZ21lbnRJbmRleCA9IHBhdGguZ2V0UGF0aFNlZ0F0TGVuZ3RoKGxlbmd0aCk7XHJcbiAgICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgLy8gbmV3IHNlZ21lbnRcclxuICAgICAgICAgICAgaWYgKHNlZ21lbnQgIT0gbGFzdFNlZ21lbnQpIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzZWdtZW50c1F1ZXVlLmxlbmd0aCAmJiBzZWdtZW50c1F1ZXVlWzBdICE9IHNlZ21lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkU2VnbWVudFBvaW50KHNlZ21lbnRzUXVldWUuc2hpZnQoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGFzdFNlZ21lbnQgPSBzZWdtZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgcG9pbnRzIGluIGJldHdlZW4gd2hlbiBjdXJ2aW5nXHJcbiAgICAgICAgICAgIC8vIFRPRE86IGFkYXB0aXZlIHNhbXBsaW5nXHJcbiAgICAgICAgICAgIHN3aXRjaCAoc2VnbWVudC5wYXRoU2VnVHlwZUFzTGV0dGVyLnRvVXBwZXJDYXNlKCkpIHtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxyXG4gICAgICAgICAgICBjYXNlICdUJzpcclxuICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgICAgICAgIHBvaW50ID0gcGF0aC5nZXRQb2ludEF0TGVuZ3RoKGxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBhZGRQb2ludChwb2ludC54LCBwb2ludC55LCAwKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IGJ5IHNhbXBsZSB2YWx1ZVxyXG4gICAgICAgICAgICBsZW5ndGggKz0gc2FtcGxlTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyBzZWdtZW50cyBub3QgcGFzc2VkIGJ5IHNhbXBsaW5nXHJcbiAgICAgICAgZm9yIChpID0gMCwgaWwgPSBzZWdtZW50c1F1ZXVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXHJcbiAgICAgICAgICAgIGFkZFNlZ21lbnRQb2ludChzZWdtZW50c1F1ZXVlW2ldKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBvaW50cztcclxuICAgIH07XHJcblxyXG4gICAgU3ZnLl9zdmdQYXRoVG9BYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcclxuICAgICAgICAvLyBodHRwOi8vcGhyb2d6Lm5ldC9jb252ZXJ0LXN2Zy1wYXRoLXRvLWFsbC1hYnNvbHV0ZS1jb21tYW5kc1xyXG4gICAgICAgIC8vIENvcHlyaWdodCAoYykgR2F2aW4gS2lzdG5lclxyXG4gICAgICAgIC8vIGh0dHA6Ly9waHJvZ3oubmV0L2pzL19SZXVzZUxpY2Vuc2UudHh0XHJcbiAgICAgICAgLy8gTW9kaWZpY2F0aW9uczogdGlkeSBmb3JtYXR0aW5nIGFuZCBuYW1pbmdcclxuICAgICAgICB2YXIgeDAsIHkwLCB4MSwgeTEsIHgyLCB5Miwgc2VncyA9IHBhdGgucGF0aFNlZ0xpc3QsXHJcbiAgICAgICAgICAgIHggPSAwLCB5ID0gMCwgbGVuID0gc2Vncy5udW1iZXJPZkl0ZW1zO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWcgPSBzZWdzLmdldEl0ZW0oaSksXHJcbiAgICAgICAgICAgICAgICBzZWdUeXBlID0gc2VnLnBhdGhTZWdUeXBlQXNMZXR0ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAoL1tNTEhWQ1NRVEFdLy50ZXN0KHNlZ1R5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ3gnIGluIHNlZykgeCA9IHNlZy54O1xyXG4gICAgICAgICAgICAgICAgaWYgKCd5JyBpbiBzZWcpIHkgPSBzZWcueTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgneDEnIGluIHNlZykgeDEgPSB4ICsgc2VnLngxO1xyXG4gICAgICAgICAgICAgICAgaWYgKCd4MicgaW4gc2VnKSB4MiA9IHggKyBzZWcueDI7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ3kxJyBpbiBzZWcpIHkxID0geSArIHNlZy55MTtcclxuICAgICAgICAgICAgICAgIGlmICgneTInIGluIHNlZykgeTIgPSB5ICsgc2VnLnkyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCd4JyBpbiBzZWcpIHggKz0gc2VnLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ3knIGluIHNlZykgeSArPSBzZWcueTtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlZ1R5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyh4LCB5KSwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdsJzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Ficyh4LCB5KSwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoeCksIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndic6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vncy5yZXBsYWNlSXRlbShwYXRoLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh5KSwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjJzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh4LCB5LCB4MSwgeTEsIHgyLCB5MiksIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vncy5yZXBsYWNlSXRlbShwYXRoLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoeCwgeSwgeDIsIHkyKSwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdxJzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoeCwgeSwgeDEsIHkxKSwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0JzpcclxuICAgICAgICAgICAgICAgICAgICBzZWdzLnJlcGxhY2VJdGVtKHBhdGguY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMoeCwgeSksIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYSc6XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vncy5yZXBsYWNlSXRlbShwYXRoLmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMoeCwgeSwgc2VnLnIxLCBzZWcucjIsIHNlZy5hbmdsZSwgc2VnLmxhcmdlQXJjRmxhZywgc2VnLnN3ZWVwRmxhZyksIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAneic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgICAgICAgICAgICB4ID0geDA7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHkwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlZ1R5cGUgPT0gJ00nIHx8IHNlZ1R5cGUgPT0gJ20nKSB7XHJcbiAgICAgICAgICAgICAgICB4MCA9IHg7XHJcbiAgICAgICAgICAgICAgICB5MCA9IHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/geometry/Svg.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* The `Matter.Vector` module contains methods for creating and manipulating vectors.\r\n* Vectors are the basis of all the geometry related operations in the engine.\r\n* A `Matter.Vector` object is of the form `{ x: 0, y: 0 }`.\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Vector\r\n*/\r\n\r\n// TODO: consider params for reusing vector objects\r\n\r\nvar Vector = {};\r\n\r\nmodule.exports = Vector;\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new vector.\r\n     * @method create\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @return {vector} A new vector\r\n     */\r\n    Vector.create = function(x, y) {\r\n        return { x: x || 0, y: y || 0 };\r\n    };\r\n\r\n    /**\r\n     * Returns a new vector with `x` and `y` copied from the given `vector`.\r\n     * @method clone\r\n     * @param {vector} vector\r\n     * @return {vector} A new cloned vector\r\n     */\r\n    Vector.clone = function(vector) {\r\n        return { x: vector.x, y: vector.y };\r\n    };\r\n\r\n    /**\r\n     * Returns the magnitude (length) of a vector.\r\n     * @method magnitude\r\n     * @param {vector} vector\r\n     * @return {number} The magnitude of the vector\r\n     */\r\n    Vector.magnitude = function(vector) {\r\n        return Math.sqrt((vector.x * vector.x) + (vector.y * vector.y));\r\n    };\r\n\r\n    /**\r\n     * Returns the magnitude (length) of a vector (therefore saving a `sqrt` operation).\r\n     * @method magnitudeSquared\r\n     * @param {vector} vector\r\n     * @return {number} The squared magnitude of the vector\r\n     */\r\n    Vector.magnitudeSquared = function(vector) {\r\n        return (vector.x * vector.x) + (vector.y * vector.y);\r\n    };\r\n\r\n    /**\r\n     * Rotates the vector about (0, 0) by specified angle.\r\n     * @method rotate\r\n     * @param {vector} vector\r\n     * @param {number} angle\r\n     * @param {vector} [output]\r\n     * @return {vector} The vector rotated about (0, 0)\r\n     */\r\n    Vector.rotate = function(vector, angle, output) {\r\n        var cos = Math.cos(angle), sin = Math.sin(angle);\r\n        if (!output) output = {};\r\n        var x = vector.x * cos - vector.y * sin;\r\n        output.y = vector.x * sin + vector.y * cos;\r\n        output.x = x;\r\n        return output;\r\n    };\r\n\r\n    /**\r\n     * Rotates the vector about a specified point by specified angle.\r\n     * @method rotateAbout\r\n     * @param {vector} vector\r\n     * @param {number} angle\r\n     * @param {vector} point\r\n     * @param {vector} [output]\r\n     * @return {vector} A new vector rotated about the point\r\n     */\r\n    Vector.rotateAbout = function(vector, angle, point, output) {\r\n        var cos = Math.cos(angle), sin = Math.sin(angle);\r\n        if (!output) output = {};\r\n        var x = point.x + ((vector.x - point.x) * cos - (vector.y - point.y) * sin);\r\n        output.y = point.y + ((vector.x - point.x) * sin + (vector.y - point.y) * cos);\r\n        output.x = x;\r\n        return output;\r\n    };\r\n\r\n    /**\r\n     * Normalises a vector (such that its magnitude is `1`).\r\n     * @method normalise\r\n     * @param {vector} vector\r\n     * @return {vector} A new vector normalised\r\n     */\r\n    Vector.normalise = function(vector) {\r\n        var magnitude = Vector.magnitude(vector);\r\n        if (magnitude === 0)\r\n            return { x: 0, y: 0 };\r\n        return { x: vector.x / magnitude, y: vector.y / magnitude };\r\n    };\r\n\r\n    /**\r\n     * Returns the dot-product of two vectors.\r\n     * @method dot\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @return {number} The dot product of the two vectors\r\n     */\r\n    Vector.dot = function(vectorA, vectorB) {\r\n        return (vectorA.x * vectorB.x) + (vectorA.y * vectorB.y);\r\n    };\r\n\r\n    /**\r\n     * Returns the cross-product of two vectors.\r\n     * @method cross\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @return {number} The cross product of the two vectors\r\n     */\r\n    Vector.cross = function(vectorA, vectorB) {\r\n        return (vectorA.x * vectorB.y) - (vectorA.y * vectorB.x);\r\n    };\r\n\r\n    /**\r\n     * Returns the cross-product of three vectors.\r\n     * @method cross3\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @param {vector} vectorC\r\n     * @return {number} The cross product of the three vectors\r\n     */\r\n    Vector.cross3 = function(vectorA, vectorB, vectorC) {\r\n        return (vectorB.x - vectorA.x) * (vectorC.y - vectorA.y) - (vectorB.y - vectorA.y) * (vectorC.x - vectorA.x);\r\n    };\r\n\r\n    /**\r\n     * Adds the two vectors.\r\n     * @method add\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @param {vector} [output]\r\n     * @return {vector} A new vector of vectorA and vectorB added\r\n     */\r\n    Vector.add = function(vectorA, vectorB, output) {\r\n        if (!output) output = {};\r\n        output.x = vectorA.x + vectorB.x;\r\n        output.y = vectorA.y + vectorB.y;\r\n        return output;\r\n    };\r\n\r\n    /**\r\n     * Subtracts the two vectors.\r\n     * @method sub\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @param {vector} [output]\r\n     * @return {vector} A new vector of vectorA and vectorB subtracted\r\n     */\r\n    Vector.sub = function(vectorA, vectorB, output) {\r\n        if (!output) output = {};\r\n        output.x = vectorA.x - vectorB.x;\r\n        output.y = vectorA.y - vectorB.y;\r\n        return output;\r\n    };\r\n\r\n    /**\r\n     * Multiplies a vector and a scalar.\r\n     * @method mult\r\n     * @param {vector} vector\r\n     * @param {number} scalar\r\n     * @return {vector} A new vector multiplied by scalar\r\n     */\r\n    Vector.mult = function(vector, scalar) {\r\n        return { x: vector.x * scalar, y: vector.y * scalar };\r\n    };\r\n\r\n    /**\r\n     * Divides a vector and a scalar.\r\n     * @method div\r\n     * @param {vector} vector\r\n     * @param {number} scalar\r\n     * @return {vector} A new vector divided by scalar\r\n     */\r\n    Vector.div = function(vector, scalar) {\r\n        return { x: vector.x / scalar, y: vector.y / scalar };\r\n    };\r\n\r\n    /**\r\n     * Returns the perpendicular vector. Set `negate` to true for the perpendicular in the opposite direction.\r\n     * @method perp\r\n     * @param {vector} vector\r\n     * @param {bool} [negate=false]\r\n     * @return {vector} The perpendicular vector\r\n     */\r\n    Vector.perp = function(vector, negate) {\r\n        negate = negate === true ? -1 : 1;\r\n        return { x: negate * -vector.y, y: negate * vector.x };\r\n    };\r\n\r\n    /**\r\n     * Negates both components of a vector such that it points in the opposite direction.\r\n     * @method neg\r\n     * @param {vector} vector\r\n     * @return {vector} The negated vector\r\n     */\r\n    Vector.neg = function(vector) {\r\n        return { x: -vector.x, y: -vector.y };\r\n    };\r\n\r\n    /**\r\n     * Returns the angle between the vector `vectorB - vectorA` and the x-axis in radians.\r\n     * @method angle\r\n     * @param {vector} vectorA\r\n     * @param {vector} vectorB\r\n     * @return {number} The angle in radians\r\n     */\r\n    Vector.angle = function(vectorA, vectorB) {\r\n        return Math.atan2(vectorB.y - vectorA.y, vectorB.x - vectorA.x);\r\n    };\r\n\r\n    /**\r\n     * Temporary vector pool (not thread-safe).\r\n     * @property _temp\r\n     * @type {vector[]}\r\n     * @private\r\n     */\r\n    Vector._temp = [\r\n        Vector.create(), Vector.create(), \r\n        Vector.create(), Vector.create(), \r\n        Vector.create(), Vector.create()\r\n    ];\r\n\r\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvVmVjdG9yLmpzPzBhNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGFBQWE7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvVmVjdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuVmVjdG9yYCBtb2R1bGUgY29udGFpbnMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyB2ZWN0b3JzLlxyXG4qIFZlY3RvcnMgYXJlIHRoZSBiYXNpcyBvZiBhbGwgdGhlIGdlb21ldHJ5IHJlbGF0ZWQgb3BlcmF0aW9ucyBpbiB0aGUgZW5naW5lLlxyXG4qIEEgYE1hdHRlci5WZWN0b3JgIG9iamVjdCBpcyBvZiB0aGUgZm9ybSBgeyB4OiAwLCB5OiAwIH1gLlxyXG4qXHJcbiogU2VlIHRoZSBpbmNsdWRlZCB1c2FnZSBbZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9saWFicnUvbWF0dGVyLWpzL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS5cclxuKlxyXG4qIEBjbGFzcyBWZWN0b3JcclxuKi9cclxuXHJcbi8vIFRPRE86IGNvbnNpZGVyIHBhcmFtcyBmb3IgcmV1c2luZyB2ZWN0b3Igb2JqZWN0c1xyXG5cclxudmFyIFZlY3RvciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3I7XHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHZlY3Rvci5cclxuICAgICAqIEBtZXRob2QgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gQSBuZXcgdmVjdG9yXHJcbiAgICAgKi9cclxuICAgIFZlY3Rvci5jcmVhdGUgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAgICAgcmV0dXJuIHsgeDogeCB8fCAwLCB5OiB5IHx8IDAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIGB4YCBhbmQgYHlgIGNvcGllZCBmcm9tIHRoZSBnaXZlbiBgdmVjdG9yYC5cclxuICAgICAqIEBtZXRob2QgY2xvbmVcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JcclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gQSBuZXcgY2xvbmVkIHZlY3RvclxyXG4gICAgICovXHJcbiAgICBWZWN0b3IuY2xvbmUgPSBmdW5jdGlvbih2ZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4geyB4OiB2ZWN0b3IueCwgeTogdmVjdG9yLnkgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBtYWduaXR1ZGUgKGxlbmd0aCkgb2YgYSB2ZWN0b3IuXHJcbiAgICAgKiBAbWV0aG9kIG1hZ25pdHVkZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbWFnbml0dWRlIG9mIHRoZSB2ZWN0b3JcclxuICAgICAqL1xyXG4gICAgVmVjdG9yLm1hZ25pdHVkZSA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoKHZlY3Rvci54ICogdmVjdG9yLngpICsgKHZlY3Rvci55ICogdmVjdG9yLnkpKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBtYWduaXR1ZGUgKGxlbmd0aCkgb2YgYSB2ZWN0b3IgKHRoZXJlZm9yZSBzYXZpbmcgYSBgc3FydGAgb3BlcmF0aW9uKS5cclxuICAgICAqIEBtZXRob2QgbWFnbml0dWRlU3F1YXJlZFxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgc3F1YXJlZCBtYWduaXR1ZGUgb2YgdGhlIHZlY3RvclxyXG4gICAgICovXHJcbiAgICBWZWN0b3IubWFnbml0dWRlU3F1YXJlZCA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiAodmVjdG9yLnggKiB2ZWN0b3IueCkgKyAodmVjdG9yLnkgKiB2ZWN0b3IueSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB0aGUgdmVjdG9yIGFib3V0ICgwLCAwKSBieSBzcGVjaWZpZWQgYW5nbGUuXHJcbiAgICAgKiBAbWV0aG9kIHJvdGF0ZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gW291dHB1dF1cclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gVGhlIHZlY3RvciByb3RhdGVkIGFib3V0ICgwLCAwKVxyXG4gICAgICovXHJcbiAgICBWZWN0b3Iucm90YXRlID0gZnVuY3Rpb24odmVjdG9yLCBhbmdsZSwgb3V0cHV0KSB7XHJcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSwgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGlmICghb3V0cHV0KSBvdXRwdXQgPSB7fTtcclxuICAgICAgICB2YXIgeCA9IHZlY3Rvci54ICogY29zIC0gdmVjdG9yLnkgKiBzaW47XHJcbiAgICAgICAgb3V0cHV0LnkgPSB2ZWN0b3IueCAqIHNpbiArIHZlY3Rvci55ICogY29zO1xyXG4gICAgICAgIG91dHB1dC54ID0geDtcclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgdGhlIHZlY3RvciBhYm91dCBhIHNwZWNpZmllZCBwb2ludCBieSBzcGVjaWZpZWQgYW5nbGUuXHJcbiAgICAgKiBAbWV0aG9kIHJvdGF0ZUFib3V0XHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gdmVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBwb2ludFxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IFtvdXRwdXRdXHJcbiAgICAgKiBAcmV0dXJuIHt2ZWN0b3J9IEEgbmV3IHZlY3RvciByb3RhdGVkIGFib3V0IHRoZSBwb2ludFxyXG4gICAgICovXHJcbiAgICBWZWN0b3Iucm90YXRlQWJvdXQgPSBmdW5jdGlvbih2ZWN0b3IsIGFuZ2xlLCBwb2ludCwgb3V0cHV0KSB7XHJcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSwgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGlmICghb3V0cHV0KSBvdXRwdXQgPSB7fTtcclxuICAgICAgICB2YXIgeCA9IHBvaW50LnggKyAoKHZlY3Rvci54IC0gcG9pbnQueCkgKiBjb3MgLSAodmVjdG9yLnkgLSBwb2ludC55KSAqIHNpbik7XHJcbiAgICAgICAgb3V0cHV0LnkgPSBwb2ludC55ICsgKCh2ZWN0b3IueCAtIHBvaW50LngpICogc2luICsgKHZlY3Rvci55IC0gcG9pbnQueSkgKiBjb3MpO1xyXG4gICAgICAgIG91dHB1dC54ID0geDtcclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGlzZXMgYSB2ZWN0b3IgKHN1Y2ggdGhhdCBpdHMgbWFnbml0dWRlIGlzIGAxYCkuXHJcbiAgICAgKiBAbWV0aG9kIG5vcm1hbGlzZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICogQHJldHVybiB7dmVjdG9yfSBBIG5ldyB2ZWN0b3Igbm9ybWFsaXNlZFxyXG4gICAgICovXHJcbiAgICBWZWN0b3Iubm9ybWFsaXNlID0gZnVuY3Rpb24odmVjdG9yKSB7XHJcbiAgICAgICAgdmFyIG1hZ25pdHVkZSA9IFZlY3Rvci5tYWduaXR1ZGUodmVjdG9yKTtcclxuICAgICAgICBpZiAobWFnbml0dWRlID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgcmV0dXJuIHsgeDogdmVjdG9yLnggLyBtYWduaXR1ZGUsIHk6IHZlY3Rvci55IC8gbWFnbml0dWRlIH07XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZG90LXByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuXHJcbiAgICAgKiBAbWV0aG9kIGRvdFxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckFcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JCXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkb3QgcHJvZHVjdCBvZiB0aGUgdHdvIHZlY3RvcnNcclxuICAgICAqL1xyXG4gICAgVmVjdG9yLmRvdCA9IGZ1bmN0aW9uKHZlY3RvckEsIHZlY3RvckIpIHtcclxuICAgICAgICByZXR1cm4gKHZlY3RvckEueCAqIHZlY3RvckIueCkgKyAodmVjdG9yQS55ICogdmVjdG9yQi55KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjcm9zcy1wcm9kdWN0IG9mIHR3byB2ZWN0b3JzLlxyXG4gICAgICogQG1ldGhvZCBjcm9zc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckFcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JCXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSB0d28gdmVjdG9yc1xyXG4gICAgICovXHJcbiAgICBWZWN0b3IuY3Jvc3MgPSBmdW5jdGlvbih2ZWN0b3JBLCB2ZWN0b3JCKSB7XHJcbiAgICAgICAgcmV0dXJuICh2ZWN0b3JBLnggKiB2ZWN0b3JCLnkpIC0gKHZlY3RvckEueSAqIHZlY3RvckIueCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3Jvc3MtcHJvZHVjdCBvZiB0aHJlZSB2ZWN0b3JzLlxyXG4gICAgICogQG1ldGhvZCBjcm9zczNcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JBXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gdmVjdG9yQlxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckNcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNyb3NzIHByb2R1Y3Qgb2YgdGhlIHRocmVlIHZlY3RvcnNcclxuICAgICAqL1xyXG4gICAgVmVjdG9yLmNyb3NzMyA9IGZ1bmN0aW9uKHZlY3RvckEsIHZlY3RvckIsIHZlY3RvckMpIHtcclxuICAgICAgICByZXR1cm4gKHZlY3RvckIueCAtIHZlY3RvckEueCkgKiAodmVjdG9yQy55IC0gdmVjdG9yQS55KSAtICh2ZWN0b3JCLnkgLSB2ZWN0b3JBLnkpICogKHZlY3RvckMueCAtIHZlY3RvckEueCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgdHdvIHZlY3RvcnMuXHJcbiAgICAgKiBAbWV0aG9kIGFkZFxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckFcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JCXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gW291dHB1dF1cclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gQSBuZXcgdmVjdG9yIG9mIHZlY3RvckEgYW5kIHZlY3RvckIgYWRkZWRcclxuICAgICAqL1xyXG4gICAgVmVjdG9yLmFkZCA9IGZ1bmN0aW9uKHZlY3RvckEsIHZlY3RvckIsIG91dHB1dCkge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSBvdXRwdXQgPSB7fTtcclxuICAgICAgICBvdXRwdXQueCA9IHZlY3RvckEueCArIHZlY3RvckIueDtcclxuICAgICAgICBvdXRwdXQueSA9IHZlY3RvckEueSArIHZlY3RvckIueTtcclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0cyB0aGUgdHdvIHZlY3RvcnMuXHJcbiAgICAgKiBAbWV0aG9kIHN1YlxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckFcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JCXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gW291dHB1dF1cclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gQSBuZXcgdmVjdG9yIG9mIHZlY3RvckEgYW5kIHZlY3RvckIgc3VidHJhY3RlZFxyXG4gICAgICovXHJcbiAgICBWZWN0b3Iuc3ViID0gZnVuY3Rpb24odmVjdG9yQSwgdmVjdG9yQiwgb3V0cHV0KSB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIG91dHB1dCA9IHt9O1xyXG4gICAgICAgIG91dHB1dC54ID0gdmVjdG9yQS54IC0gdmVjdG9yQi54O1xyXG4gICAgICAgIG91dHB1dC55ID0gdmVjdG9yQS55IC0gdmVjdG9yQi55O1xyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbGllcyBhIHZlY3RvciBhbmQgYSBzY2FsYXIuXHJcbiAgICAgKiBAbWV0aG9kIG11bHRcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsYXJcclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gQSBuZXcgdmVjdG9yIG11bHRpcGxpZWQgYnkgc2NhbGFyXHJcbiAgICAgKi9cclxuICAgIFZlY3Rvci5tdWx0ID0gZnVuY3Rpb24odmVjdG9yLCBzY2FsYXIpIHtcclxuICAgICAgICByZXR1cm4geyB4OiB2ZWN0b3IueCAqIHNjYWxhciwgeTogdmVjdG9yLnkgKiBzY2FsYXIgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGVzIGEgdmVjdG9yIGFuZCBhIHNjYWxhci5cclxuICAgICAqIEBtZXRob2QgZGl2XHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gdmVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGFyXHJcbiAgICAgKiBAcmV0dXJuIHt2ZWN0b3J9IEEgbmV3IHZlY3RvciBkaXZpZGVkIGJ5IHNjYWxhclxyXG4gICAgICovXHJcbiAgICBWZWN0b3IuZGl2ID0gZnVuY3Rpb24odmVjdG9yLCBzY2FsYXIpIHtcclxuICAgICAgICByZXR1cm4geyB4OiB2ZWN0b3IueCAvIHNjYWxhciwgeTogdmVjdG9yLnkgLyBzY2FsYXIgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwZXJwZW5kaWN1bGFyIHZlY3Rvci4gU2V0IGBuZWdhdGVgIHRvIHRydWUgZm9yIHRoZSBwZXJwZW5kaWN1bGFyIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uXHJcbiAgICAgKiBAbWV0aG9kIHBlcnBcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JcclxuICAgICAqIEBwYXJhbSB7Ym9vbH0gW25lZ2F0ZT1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gVGhlIHBlcnBlbmRpY3VsYXIgdmVjdG9yXHJcbiAgICAgKi9cclxuICAgIFZlY3Rvci5wZXJwID0gZnVuY3Rpb24odmVjdG9yLCBuZWdhdGUpIHtcclxuICAgICAgICBuZWdhdGUgPSBuZWdhdGUgPT09IHRydWUgPyAtMSA6IDE7XHJcbiAgICAgICAgcmV0dXJuIHsgeDogbmVnYXRlICogLXZlY3Rvci55LCB5OiBuZWdhdGUgKiB2ZWN0b3IueCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZXMgYm90aCBjb21wb25lbnRzIG9mIGEgdmVjdG9yIHN1Y2ggdGhhdCBpdCBwb2ludHMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi5cclxuICAgICAqIEBtZXRob2QgbmVnXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gdmVjdG9yXHJcbiAgICAgKiBAcmV0dXJuIHt2ZWN0b3J9IFRoZSBuZWdhdGVkIHZlY3RvclxyXG4gICAgICovXHJcbiAgICBWZWN0b3IubmVnID0gZnVuY3Rpb24odmVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgeDogLXZlY3Rvci54LCB5OiAtdmVjdG9yLnkgfTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSB2ZWN0b3IgYHZlY3RvckIgLSB2ZWN0b3JBYCBhbmQgdGhlIHgtYXhpcyBpbiByYWRpYW5zLlxyXG4gICAgICogQG1ldGhvZCBhbmdsZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvckFcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSB2ZWN0b3JCXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAgICAgKi9cclxuICAgIFZlY3Rvci5hbmdsZSA9IGZ1bmN0aW9uKHZlY3RvckEsIHZlY3RvckIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMih2ZWN0b3JCLnkgLSB2ZWN0b3JBLnksIHZlY3RvckIueCAtIHZlY3RvckEueCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcG9yYXJ5IHZlY3RvciBwb29sIChub3QgdGhyZWFkLXNhZmUpLlxyXG4gICAgICogQHByb3BlcnR5IF90ZW1wXHJcbiAgICAgKiBAdHlwZSB7dmVjdG9yW119XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBWZWN0b3IuX3RlbXAgPSBbXHJcbiAgICAgICAgVmVjdG9yLmNyZWF0ZSgpLCBWZWN0b3IuY3JlYXRlKCksIFxyXG4gICAgICAgIFZlY3Rvci5jcmVhdGUoKSwgVmVjdG9yLmNyZWF0ZSgpLCBcclxuICAgICAgICBWZWN0b3IuY3JlYXRlKCksIFZlY3Rvci5jcmVhdGUoKVxyXG4gICAgXTtcclxuXHJcbn0pKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* The `Matter.Vertices` module contains methods for creating and manipulating sets of vertices.\r\n* A set of vertices is an array of `Matter.Vector` with additional indexing properties inserted by `Vertices.create`.\r\n* A `Matter.Body` maintains a set of vertices to represent the shape of the object (its convex hull).\r\n*\r\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\r\n*\r\n* @class Vertices\r\n*/\r\n\r\nvar Vertices = {};\r\n\r\nmodule.exports = Vertices;\r\n\r\nvar Vector = __webpack_require__(/*! ../geometry/Vector */ \"./node_modules/phaser/src/physics/matter-js/lib/geometry/Vector.js\");\r\nvar Common = __webpack_require__(/*! ../core/Common */ \"./node_modules/phaser/src/physics/matter-js/lib/core/Common.js\");\r\n\r\n(function() {\r\n\r\n    /**\r\n     * Creates a new set of `Matter.Body` compatible vertices.\r\n     * The `points` argument accepts an array of `Matter.Vector` points orientated around the origin `(0, 0)`, for example:\r\n     *\r\n     *     [{ x: 0, y: 0 }, { x: 25, y: 50 }, { x: 50, y: 0 }]\r\n     *\r\n     * The `Vertices.create` method returns a new array of vertices, which are similar to Matter.Vector objects,\r\n     * but with some additional references required for efficient collision detection routines.\r\n     *\r\n     * Vertices must be specified in clockwise order.\r\n     *\r\n     * Note that the `body` argument is not optional, a `Matter.Body` reference must be provided.\r\n     *\r\n     * @method create\r\n     * @param {vector[]} points\r\n     * @param {body} body\r\n     */\r\n    Vertices.create = function(points, body) {\r\n        var vertices = [];\r\n\r\n        for (var i = 0; i < points.length; i++) {\r\n            var point = points[i],\r\n                vertex = {\r\n                    x: point.x,\r\n                    y: point.y,\r\n                    index: i,\r\n                    body: body,\r\n                    isInternal: false,\r\n                    contact: null\r\n                };\r\n\r\n            vertex.contact = {\r\n                vertex: vertex,\r\n                normalImpulse: 0,\r\n                tangentImpulse: 0\r\n            };\r\n\r\n            vertices.push(vertex);\r\n        }\r\n\r\n        return vertices;\r\n    };\r\n\r\n    /**\r\n     * Parses a string containing ordered x y pairs separated by spaces (and optionally commas), \r\n     * into a `Matter.Vertices` object for the given `Matter.Body`.\r\n     * For parsing SVG paths, see `Svg.pathToVertices`.\r\n     * @method fromPath\r\n     * @param {string} path\r\n     * @param {body} body\r\n     * @return {vertices} vertices\r\n     */\r\n    Vertices.fromPath = function(path, body) {\r\n        var pathPattern = /L?\\s*([\\-\\d\\.e]+)[\\s,]*([\\-\\d\\.e]+)*/ig,\r\n            points = [];\r\n\r\n        path.replace(pathPattern, function(match, x, y) {\r\n            points.push({ x: parseFloat(x), y: parseFloat(y) });\r\n        });\r\n\r\n        return Vertices.create(points, body);\r\n    };\r\n\r\n    /**\r\n     * Returns the centre (centroid) of the set of vertices.\r\n     * @method centre\r\n     * @param {vertices} vertices\r\n     * @return {vector} The centre point\r\n     */\r\n    Vertices.centre = function(vertices) {\r\n        var area = Vertices.area(vertices, true),\r\n            centre = { x: 0, y: 0 },\r\n            cross,\r\n            temp,\r\n            j;\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            j = (i + 1) % vertices.length;\r\n            cross = Vector.cross(vertices[i], vertices[j]);\r\n            temp = Vector.mult(Vector.add(vertices[i], vertices[j]), cross);\r\n            centre = Vector.add(centre, temp);\r\n        }\r\n\r\n        return Vector.div(centre, 6 * area);\r\n    };\r\n\r\n    /**\r\n     * Returns the average (mean) of the set of vertices.\r\n     * @method mean\r\n     * @param {vertices} vertices\r\n     * @return {vector} The average point\r\n     */\r\n    Vertices.mean = function(vertices) {\r\n        var average = { x: 0, y: 0 };\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            average.x += vertices[i].x;\r\n            average.y += vertices[i].y;\r\n        }\r\n\r\n        return Vector.div(average, vertices.length);\r\n    };\r\n\r\n    /**\r\n     * Returns the area of the set of vertices.\r\n     * @method area\r\n     * @param {vertices} vertices\r\n     * @param {bool} signed\r\n     * @return {number} The area\r\n     */\r\n    Vertices.area = function(vertices, signed) {\r\n        var area = 0,\r\n            j = vertices.length - 1;\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            area += (vertices[j].x - vertices[i].x) * (vertices[j].y + vertices[i].y);\r\n            j = i;\r\n        }\r\n\r\n        if (signed)\r\n            return area / 2;\r\n\r\n        return Math.abs(area) / 2;\r\n    };\r\n\r\n    /**\r\n     * Returns the moment of inertia (second moment of area) of the set of vertices given the total mass.\r\n     * @method inertia\r\n     * @param {vertices} vertices\r\n     * @param {number} mass\r\n     * @return {number} The polygon's moment of inertia\r\n     */\r\n    Vertices.inertia = function(vertices, mass) {\r\n        var numerator = 0,\r\n            denominator = 0,\r\n            v = vertices,\r\n            cross,\r\n            j;\r\n\r\n        // find the polygon's moment of inertia, using second moment of area\r\n        // from equations at http://www.physicsforums.com/showthread.php?t=25293\r\n        for (var n = 0; n < v.length; n++) {\r\n            j = (n + 1) % v.length;\r\n            cross = Math.abs(Vector.cross(v[j], v[n]));\r\n            numerator += cross * (Vector.dot(v[j], v[j]) + Vector.dot(v[j], v[n]) + Vector.dot(v[n], v[n]));\r\n            denominator += cross;\r\n        }\r\n\r\n        return (mass / 6) * (numerator / denominator);\r\n    };\r\n\r\n    /**\r\n     * Translates the set of vertices in-place.\r\n     * @method translate\r\n     * @param {vertices} vertices\r\n     * @param {vector} vector\r\n     * @param {number} scalar\r\n     */\r\n    Vertices.translate = function(vertices, vector, scalar) {\r\n        var i;\r\n        if (scalar) {\r\n            for (i = 0; i < vertices.length; i++) {\r\n                vertices[i].x += vector.x * scalar;\r\n                vertices[i].y += vector.y * scalar;\r\n            }\r\n        } else {\r\n            for (i = 0; i < vertices.length; i++) {\r\n                vertices[i].x += vector.x;\r\n                vertices[i].y += vector.y;\r\n            }\r\n        }\r\n\r\n        return vertices;\r\n    };\r\n\r\n    /**\r\n     * Rotates the set of vertices in-place.\r\n     * @method rotate\r\n     * @param {vertices} vertices\r\n     * @param {number} angle\r\n     * @param {vector} point\r\n     */\r\n    Vertices.rotate = function(vertices, angle, point) {\r\n        if (angle === 0)\r\n            return;\r\n\r\n        var cos = Math.cos(angle),\r\n            sin = Math.sin(angle);\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            var vertice = vertices[i],\r\n                dx = vertice.x - point.x,\r\n                dy = vertice.y - point.y;\r\n                \r\n            vertice.x = point.x + (dx * cos - dy * sin);\r\n            vertice.y = point.y + (dx * sin + dy * cos);\r\n        }\r\n\r\n        return vertices;\r\n    };\r\n\r\n    /**\r\n     * Returns `true` if the `point` is inside the set of `vertices`.\r\n     * @method contains\r\n     * @param {vertices} vertices\r\n     * @param {vector} point\r\n     * @return {boolean} True if the vertices contains point, otherwise false\r\n     */\r\n    Vertices.contains = function(vertices, point) {\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            var vertice = vertices[i],\r\n                nextVertice = vertices[(i + 1) % vertices.length];\r\n            if ((point.x - vertice.x) * (nextVertice.y - vertice.y) + (point.y - vertice.y) * (vertice.x - nextVertice.x) > 0) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    };\r\n\r\n    /**\r\n     * Scales the vertices from a point (default is centre) in-place.\r\n     * @method scale\r\n     * @param {vertices} vertices\r\n     * @param {number} scaleX\r\n     * @param {number} scaleY\r\n     * @param {vector} point\r\n     */\r\n    Vertices.scale = function(vertices, scaleX, scaleY, point) {\r\n        if (scaleX === 1 && scaleY === 1)\r\n            return vertices;\r\n\r\n        point = point || Vertices.centre(vertices);\r\n\r\n        var vertex,\r\n            delta;\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            vertex = vertices[i];\r\n            delta = Vector.sub(vertex, point);\r\n            vertices[i].x = point.x + delta.x * scaleX;\r\n            vertices[i].y = point.y + delta.y * scaleY;\r\n        }\r\n\r\n        return vertices;\r\n    };\r\n\r\n    /**\r\n     * Chamfers a set of vertices by giving them rounded corners, returns a new set of vertices.\r\n     * The radius parameter is a single number or an array to specify the radius for each vertex.\r\n     * @method chamfer\r\n     * @param {vertices} vertices\r\n     * @param {number[]} radius\r\n     * @param {number} quality\r\n     * @param {number} qualityMin\r\n     * @param {number} qualityMax\r\n     */\r\n    Vertices.chamfer = function(vertices, radius, quality, qualityMin, qualityMax) {\r\n        if (typeof radius === 'number') {\r\n            radius = [radius];\r\n        } else {\r\n            radius = radius || [8];\r\n        }\r\n\r\n        // quality defaults to -1, which is auto\r\n        quality = (typeof quality !== 'undefined') ? quality : -1;\r\n        qualityMin = qualityMin || 2;\r\n        qualityMax = qualityMax || 14;\r\n\r\n        var newVertices = [];\r\n\r\n        for (var i = 0; i < vertices.length; i++) {\r\n            var prevVertex = vertices[i - 1 >= 0 ? i - 1 : vertices.length - 1],\r\n                vertex = vertices[i],\r\n                nextVertex = vertices[(i + 1) % vertices.length],\r\n                currentRadius = radius[i < radius.length ? i : radius.length - 1];\r\n\r\n            if (currentRadius === 0) {\r\n                newVertices.push(vertex);\r\n                continue;\r\n            }\r\n\r\n            var prevNormal = Vector.normalise({ \r\n                x: vertex.y - prevVertex.y, \r\n                y: prevVertex.x - vertex.x\r\n            });\r\n\r\n            var nextNormal = Vector.normalise({ \r\n                x: nextVertex.y - vertex.y, \r\n                y: vertex.x - nextVertex.x\r\n            });\r\n\r\n            var diagonalRadius = Math.sqrt(2 * Math.pow(currentRadius, 2)),\r\n                radiusVector = Vector.mult(Common.clone(prevNormal), currentRadius),\r\n                midNormal = Vector.normalise(Vector.mult(Vector.add(prevNormal, nextNormal), 0.5)),\r\n                scaledVertex = Vector.sub(vertex, Vector.mult(midNormal, diagonalRadius));\r\n\r\n            var precision = quality;\r\n\r\n            if (quality === -1) {\r\n                // automatically decide precision\r\n                precision = Math.pow(currentRadius, 0.32) * 1.75;\r\n            }\r\n\r\n            precision = Common.clamp(precision, qualityMin, qualityMax);\r\n\r\n            // use an even value for precision, more likely to reduce axes by using symmetry\r\n            if (precision % 2 === 1)\r\n                precision += 1;\r\n\r\n            var alpha = Math.acos(Vector.dot(prevNormal, nextNormal)),\r\n                theta = alpha / precision;\r\n\r\n            for (var j = 0; j < precision; j++) {\r\n                newVertices.push(Vector.add(Vector.rotate(radiusVector, theta * j), scaledVertex));\r\n            }\r\n        }\r\n\r\n        return newVertices;\r\n    };\r\n\r\n    /**\r\n     * Sorts the input vertices into clockwise order in place.\r\n     * @method clockwiseSort\r\n     * @param {vertices} vertices\r\n     * @return {vertices} vertices\r\n     */\r\n    Vertices.clockwiseSort = function(vertices) {\r\n        var centre = Vertices.mean(vertices);\r\n\r\n        vertices.sort(function(vertexA, vertexB) {\r\n            return Vector.angle(centre, vertexA) - Vector.angle(centre, vertexB);\r\n        });\r\n\r\n        return vertices;\r\n    };\r\n\r\n    /**\r\n     * Returns true if the vertices form a convex shape (vertices must be in clockwise order).\r\n     * @method isConvex\r\n     * @param {vertices} vertices\r\n     * @return {bool} `true` if the `vertices` are convex, `false` if not (or `null` if not computable).\r\n     */\r\n    Vertices.isConvex = function(vertices) {\r\n        // http://paulbourke.net/geometry/polygonmesh/\r\n        // Copyright (c) Paul Bourke (use permitted)\r\n\r\n        var flag = 0,\r\n            n = vertices.length,\r\n            i,\r\n            j,\r\n            k,\r\n            z;\r\n\r\n        if (n < 3)\r\n            return null;\r\n\r\n        for (i = 0; i < n; i++) {\r\n            j = (i + 1) % n;\r\n            k = (i + 2) % n;\r\n            z = (vertices[j].x - vertices[i].x) * (vertices[k].y - vertices[j].y);\r\n            z -= (vertices[j].y - vertices[i].y) * (vertices[k].x - vertices[j].x);\r\n\r\n            if (z < 0) {\r\n                flag |= 1;\r\n            } else if (z > 0) {\r\n                flag |= 2;\r\n            }\r\n\r\n            if (flag === 3) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (flag !== 0){\r\n            return true;\r\n        } else {\r\n            return null;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Returns the convex hull of the input vertices as a new array of points.\r\n     * @method hull\r\n     * @param {vertices} vertices\r\n     * @return [vertex] vertices\r\n     */\r\n    Vertices.hull = function(vertices) {\r\n        // http://geomalgorithms.com/a10-_hull-1.html\r\n\r\n        var upper = [],\r\n            lower = [], \r\n            vertex,\r\n            i;\r\n\r\n        // sort vertices on x-axis (y-axis for ties)\r\n        vertices = vertices.slice(0);\r\n        vertices.sort(function(vertexA, vertexB) {\r\n            var dx = vertexA.x - vertexB.x;\r\n            return dx !== 0 ? dx : vertexA.y - vertexB.y;\r\n        });\r\n\r\n        // build lower hull\r\n        for (i = 0; i < vertices.length; i += 1) {\r\n            vertex = vertices[i];\r\n\r\n            while (lower.length >= 2 \r\n                   && Vector.cross3(lower[lower.length - 2], lower[lower.length - 1], vertex) <= 0) {\r\n                lower.pop();\r\n            }\r\n\r\n            lower.push(vertex);\r\n        }\r\n\r\n        // build upper hull\r\n        for (i = vertices.length - 1; i >= 0; i -= 1) {\r\n            vertex = vertices[i];\r\n\r\n            while (upper.length >= 2 \r\n                   && Vector.cross3(upper[upper.length - 2], upper[upper.length - 1], vertex) <= 0) {\r\n                upper.pop();\r\n            }\r\n\r\n            upper.push(vertex);\r\n        }\r\n\r\n        // concatenation of the lower and upper hulls gives the convex hull\r\n        // omit last points because they are repeated at the beginning of the other list\r\n        upper.pop();\r\n        lower.pop();\r\n\r\n        return upper.concat(lower);\r\n    };\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvZ2VvbWV0cnkvVmVydGljZXMuanM/ZjljMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDhGQUFvQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsc0ZBQWdCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsYUFBYSxHQUFHLGVBQWUsR0FBRyxjQUFjO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCLHFDQUFxQztBQUM5RCxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBLHVCQUF1Qjs7QUFFdkIsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxLQUFLO0FBQ3BCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsY0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0M7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYiwrQztBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyxRQUFRO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL2dlb21ldHJ5L1ZlcnRpY2VzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogVGhlIGBNYXR0ZXIuVmVydGljZXNgIG1vZHVsZSBjb250YWlucyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIHNldHMgb2YgdmVydGljZXMuXHJcbiogQSBzZXQgb2YgdmVydGljZXMgaXMgYW4gYXJyYXkgb2YgYE1hdHRlci5WZWN0b3JgIHdpdGggYWRkaXRpb25hbCBpbmRleGluZyBwcm9wZXJ0aWVzIGluc2VydGVkIGJ5IGBWZXJ0aWNlcy5jcmVhdGVgLlxyXG4qIEEgYE1hdHRlci5Cb2R5YCBtYWludGFpbnMgYSBzZXQgb2YgdmVydGljZXMgdG8gcmVwcmVzZW50IHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IChpdHMgY29udmV4IGh1bGwpLlxyXG4qXHJcbiogU2VlIHRoZSBpbmNsdWRlZCB1c2FnZSBbZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9saWFicnUvbWF0dGVyLWpzL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS5cclxuKlxyXG4qIEBjbGFzcyBWZXJ0aWNlc1xyXG4qL1xyXG5cclxudmFyIFZlcnRpY2VzID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRpY2VzO1xyXG5cclxudmFyIFZlY3RvciA9IHJlcXVpcmUoJy4uL2dlb21ldHJ5L1ZlY3RvcicpO1xyXG52YXIgQ29tbW9uID0gcmVxdWlyZSgnLi4vY29yZS9Db21tb24nKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2V0IG9mIGBNYXR0ZXIuQm9keWAgY29tcGF0aWJsZSB2ZXJ0aWNlcy5cclxuICAgICAqIFRoZSBgcG9pbnRzYCBhcmd1bWVudCBhY2NlcHRzIGFuIGFycmF5IG9mIGBNYXR0ZXIuVmVjdG9yYCBwb2ludHMgb3JpZW50YXRlZCBhcm91bmQgdGhlIG9yaWdpbiBgKDAsIDApYCwgZm9yIGV4YW1wbGU6XHJcbiAgICAgKlxyXG4gICAgICogICAgIFt7IHg6IDAsIHk6IDAgfSwgeyB4OiAyNSwgeTogNTAgfSwgeyB4OiA1MCwgeTogMCB9XVxyXG4gICAgICpcclxuICAgICAqIFRoZSBgVmVydGljZXMuY3JlYXRlYCBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheSBvZiB2ZXJ0aWNlcywgd2hpY2ggYXJlIHNpbWlsYXIgdG8gTWF0dGVyLlZlY3RvciBvYmplY3RzLFxyXG4gICAgICogYnV0IHdpdGggc29tZSBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgcmVxdWlyZWQgZm9yIGVmZmljaWVudCBjb2xsaXNpb24gZGV0ZWN0aW9uIHJvdXRpbmVzLlxyXG4gICAgICpcclxuICAgICAqIFZlcnRpY2VzIG11c3QgYmUgc3BlY2lmaWVkIGluIGNsb2Nrd2lzZSBvcmRlci5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlIGBib2R5YCBhcmd1bWVudCBpcyBub3Qgb3B0aW9uYWwsIGEgYE1hdHRlci5Cb2R5YCByZWZlcmVuY2UgbXVzdCBiZSBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIGNyZWF0ZVxyXG4gICAgICogQHBhcmFtIHt2ZWN0b3JbXX0gcG9pbnRzXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqL1xyXG4gICAgVmVydGljZXMuY3JlYXRlID0gZnVuY3Rpb24ocG9pbnRzLCBib2R5KSB7XHJcbiAgICAgICAgdmFyIHZlcnRpY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXSxcclxuICAgICAgICAgICAgICAgIHZlcnRleCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBwb2ludC54LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvaW50LnksXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICBpc0ludGVybmFsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWN0OiBudWxsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmVydGV4LmNvbnRhY3QgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcclxuICAgICAgICAgICAgICAgIG5vcm1hbEltcHVsc2U6IDAsXHJcbiAgICAgICAgICAgICAgICB0YW5nZW50SW1wdWxzZTogMFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmVydGljZXMucHVzaCh2ZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZlcnRpY2VzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIG9yZGVyZWQgeCB5IHBhaXJzIHNlcGFyYXRlZCBieSBzcGFjZXMgKGFuZCBvcHRpb25hbGx5IGNvbW1hcyksIFxyXG4gICAgICogaW50byBhIGBNYXR0ZXIuVmVydGljZXNgIG9iamVjdCBmb3IgdGhlIGdpdmVuIGBNYXR0ZXIuQm9keWAuXHJcbiAgICAgKiBGb3IgcGFyc2luZyBTVkcgcGF0aHMsIHNlZSBgU3ZnLnBhdGhUb1ZlcnRpY2VzYC5cclxuICAgICAqIEBtZXRob2QgZnJvbVBhdGhcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge2JvZHl9IGJvZHlcclxuICAgICAqIEByZXR1cm4ge3ZlcnRpY2VzfSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5mcm9tUGF0aCA9IGZ1bmN0aW9uKHBhdGgsIGJvZHkpIHtcclxuICAgICAgICB2YXIgcGF0aFBhdHRlcm4gPSAvTD9cXHMqKFtcXC1cXGRcXC5lXSspW1xccyxdKihbXFwtXFxkXFwuZV0rKSovaWcsXHJcbiAgICAgICAgICAgIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICBwYXRoLnJlcGxhY2UocGF0aFBhdHRlcm4sIGZ1bmN0aW9uKG1hdGNoLCB4LCB5KSB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcGFyc2VGbG9hdCh4KSwgeTogcGFyc2VGbG9hdCh5KSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFZlcnRpY2VzLmNyZWF0ZShwb2ludHMsIGJvZHkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNlbnRyZSAoY2VudHJvaWQpIG9mIHRoZSBzZXQgb2YgdmVydGljZXMuXHJcbiAgICAgKiBAbWV0aG9kIGNlbnRyZVxyXG4gICAgICogQHBhcmFtIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqIEByZXR1cm4ge3ZlY3Rvcn0gVGhlIGNlbnRyZSBwb2ludFxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5jZW50cmUgPSBmdW5jdGlvbih2ZXJ0aWNlcykge1xyXG4gICAgICAgIHZhciBhcmVhID0gVmVydGljZXMuYXJlYSh2ZXJ0aWNlcywgdHJ1ZSksXHJcbiAgICAgICAgICAgIGNlbnRyZSA9IHsgeDogMCwgeTogMCB9LFxyXG4gICAgICAgICAgICBjcm9zcyxcclxuICAgICAgICAgICAgdGVtcCxcclxuICAgICAgICAgICAgajtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBqID0gKGkgKyAxKSAlIHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgY3Jvc3MgPSBWZWN0b3IuY3Jvc3ModmVydGljZXNbaV0sIHZlcnRpY2VzW2pdKTtcclxuICAgICAgICAgICAgdGVtcCA9IFZlY3Rvci5tdWx0KFZlY3Rvci5hZGQodmVydGljZXNbaV0sIHZlcnRpY2VzW2pdKSwgY3Jvc3MpO1xyXG4gICAgICAgICAgICBjZW50cmUgPSBWZWN0b3IuYWRkKGNlbnRyZSwgdGVtcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gVmVjdG9yLmRpdihjZW50cmUsIDYgKiBhcmVhKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIChtZWFuKSBvZiB0aGUgc2V0IG9mIHZlcnRpY2VzLlxyXG4gICAgICogQG1ldGhvZCBtZWFuXHJcbiAgICAgKiBAcGFyYW0ge3ZlcnRpY2VzfSB2ZXJ0aWNlc1xyXG4gICAgICogQHJldHVybiB7dmVjdG9yfSBUaGUgYXZlcmFnZSBwb2ludFxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5tZWFuID0gZnVuY3Rpb24odmVydGljZXMpIHtcclxuICAgICAgICB2YXIgYXZlcmFnZSA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGF2ZXJhZ2UueCArPSB2ZXJ0aWNlc1tpXS54O1xyXG4gICAgICAgICAgICBhdmVyYWdlLnkgKz0gdmVydGljZXNbaV0ueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBWZWN0b3IuZGl2KGF2ZXJhZ2UsIHZlcnRpY2VzLmxlbmd0aCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYXJlYSBvZiB0aGUgc2V0IG9mIHZlcnRpY2VzLlxyXG4gICAgICogQG1ldGhvZCBhcmVhXHJcbiAgICAgKiBAcGFyYW0ge3ZlcnRpY2VzfSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtib29sfSBzaWduZWRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFyZWFcclxuICAgICAqL1xyXG4gICAgVmVydGljZXMuYXJlYSA9IGZ1bmN0aW9uKHZlcnRpY2VzLCBzaWduZWQpIHtcclxuICAgICAgICB2YXIgYXJlYSA9IDAsXHJcbiAgICAgICAgICAgIGogPSB2ZXJ0aWNlcy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZWEgKz0gKHZlcnRpY2VzW2pdLnggLSB2ZXJ0aWNlc1tpXS54KSAqICh2ZXJ0aWNlc1tqXS55ICsgdmVydGljZXNbaV0ueSk7XHJcbiAgICAgICAgICAgIGogPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNpZ25lZClcclxuICAgICAgICAgICAgcmV0dXJuIGFyZWEgLyAyO1xyXG5cclxuICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJlYSkgLyAyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG1vbWVudCBvZiBpbmVydGlhIChzZWNvbmQgbW9tZW50IG9mIGFyZWEpIG9mIHRoZSBzZXQgb2YgdmVydGljZXMgZ2l2ZW4gdGhlIHRvdGFsIG1hc3MuXHJcbiAgICAgKiBAbWV0aG9kIGluZXJ0aWFcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWFzc1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgcG9seWdvbidzIG1vbWVudCBvZiBpbmVydGlhXHJcbiAgICAgKi9cclxuICAgIFZlcnRpY2VzLmluZXJ0aWEgPSBmdW5jdGlvbih2ZXJ0aWNlcywgbWFzcykge1xyXG4gICAgICAgIHZhciBudW1lcmF0b3IgPSAwLFxyXG4gICAgICAgICAgICBkZW5vbWluYXRvciA9IDAsXHJcbiAgICAgICAgICAgIHYgPSB2ZXJ0aWNlcyxcclxuICAgICAgICAgICAgY3Jvc3MsXHJcbiAgICAgICAgICAgIGo7XHJcblxyXG4gICAgICAgIC8vIGZpbmQgdGhlIHBvbHlnb24ncyBtb21lbnQgb2YgaW5lcnRpYSwgdXNpbmcgc2Vjb25kIG1vbWVudCBvZiBhcmVhXHJcbiAgICAgICAgLy8gZnJvbSBlcXVhdGlvbnMgYXQgaHR0cDovL3d3dy5waHlzaWNzZm9ydW1zLmNvbS9zaG93dGhyZWFkLnBocD90PTI1MjkzXHJcbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB2Lmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgIGogPSAobiArIDEpICUgdi5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNyb3NzID0gTWF0aC5hYnMoVmVjdG9yLmNyb3NzKHZbal0sIHZbbl0pKTtcclxuICAgICAgICAgICAgbnVtZXJhdG9yICs9IGNyb3NzICogKFZlY3Rvci5kb3QodltqXSwgdltqXSkgKyBWZWN0b3IuZG90KHZbal0sIHZbbl0pICsgVmVjdG9yLmRvdCh2W25dLCB2W25dKSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yICs9IGNyb3NzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChtYXNzIC8gNikgKiAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZXMgdGhlIHNldCBvZiB2ZXJ0aWNlcyBpbi1wbGFjZS5cclxuICAgICAqIEBtZXRob2QgdHJhbnNsYXRlXHJcbiAgICAgKiBAcGFyYW0ge3ZlcnRpY2VzfSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHt2ZWN0b3J9IHZlY3RvclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxhclxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy50cmFuc2xhdGUgPSBmdW5jdGlvbih2ZXJ0aWNlcywgdmVjdG9yLCBzY2FsYXIpIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICBpZiAoc2NhbGFyKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0ueCArPSB2ZWN0b3IueCAqIHNjYWxhcjtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldLnkgKz0gdmVjdG9yLnkgKiBzY2FsYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldLnggKz0gdmVjdG9yLng7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXS55ICs9IHZlY3Rvci55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmVydGljZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB0aGUgc2V0IG9mIHZlcnRpY2VzIGluLXBsYWNlLlxyXG4gICAgICogQG1ldGhvZCByb3RhdGVcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBwb2ludFxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5yb3RhdGUgPSBmdW5jdGlvbih2ZXJ0aWNlcywgYW5nbGUsIHBvaW50KSB7XHJcbiAgICAgICAgaWYgKGFuZ2xlID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyhhbmdsZSksXHJcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdmVydGljZSA9IHZlcnRpY2VzW2ldLFxyXG4gICAgICAgICAgICAgICAgZHggPSB2ZXJ0aWNlLnggLSBwb2ludC54LFxyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlLnkgLSBwb2ludC55O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZlcnRpY2UueCA9IHBvaW50LnggKyAoZHggKiBjb3MgLSBkeSAqIHNpbik7XHJcbiAgICAgICAgICAgIHZlcnRpY2UueSA9IHBvaW50LnkgKyAoZHggKiBzaW4gKyBkeSAqIGNvcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmVydGljZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGBwb2ludGAgaXMgaW5zaWRlIHRoZSBzZXQgb2YgYHZlcnRpY2VzYC5cclxuICAgICAqIEBtZXRob2QgY29udGFpbnNcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcGFyYW0ge3ZlY3Rvcn0gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZlcnRpY2VzIGNvbnRhaW5zIHBvaW50LCBvdGhlcndpc2UgZmFsc2VcclxuICAgICAqL1xyXG4gICAgVmVydGljZXMuY29udGFpbnMgPSBmdW5jdGlvbih2ZXJ0aWNlcywgcG9pbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlID0gdmVydGljZXNbaV0sXHJcbiAgICAgICAgICAgICAgICBuZXh0VmVydGljZSA9IHZlcnRpY2VzWyhpICsgMSkgJSB2ZXJ0aWNlcy5sZW5ndGhdO1xyXG4gICAgICAgICAgICBpZiAoKHBvaW50LnggLSB2ZXJ0aWNlLngpICogKG5leHRWZXJ0aWNlLnkgLSB2ZXJ0aWNlLnkpICsgKHBvaW50LnkgLSB2ZXJ0aWNlLnkpICogKHZlcnRpY2UueCAtIG5leHRWZXJ0aWNlLngpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZXMgdGhlIHZlcnRpY2VzIGZyb20gYSBwb2ludCAoZGVmYXVsdCBpcyBjZW50cmUpIGluLXBsYWNlLlxyXG4gICAgICogQG1ldGhvZCBzY2FsZVxyXG4gICAgICogQHBhcmFtIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVlcclxuICAgICAqIEBwYXJhbSB7dmVjdG9yfSBwb2ludFxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5zY2FsZSA9IGZ1bmN0aW9uKHZlcnRpY2VzLCBzY2FsZVgsIHNjYWxlWSwgcG9pbnQpIHtcclxuICAgICAgICBpZiAoc2NhbGVYID09PSAxICYmIHNjYWxlWSA9PT0gMSlcclxuICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2VzO1xyXG5cclxuICAgICAgICBwb2ludCA9IHBvaW50IHx8IFZlcnRpY2VzLmNlbnRyZSh2ZXJ0aWNlcyk7XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXgsXHJcbiAgICAgICAgICAgIGRlbHRhO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZlcnRleCA9IHZlcnRpY2VzW2ldO1xyXG4gICAgICAgICAgICBkZWx0YSA9IFZlY3Rvci5zdWIodmVydGV4LCBwb2ludCk7XHJcbiAgICAgICAgICAgIHZlcnRpY2VzW2ldLnggPSBwb2ludC54ICsgZGVsdGEueCAqIHNjYWxlWDtcclxuICAgICAgICAgICAgdmVydGljZXNbaV0ueSA9IHBvaW50LnkgKyBkZWx0YS55ICogc2NhbGVZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZlcnRpY2VzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYW1mZXJzIGEgc2V0IG9mIHZlcnRpY2VzIGJ5IGdpdmluZyB0aGVtIHJvdW5kZWQgY29ybmVycywgcmV0dXJucyBhIG5ldyBzZXQgb2YgdmVydGljZXMuXHJcbiAgICAgKiBUaGUgcmFkaXVzIHBhcmFtZXRlciBpcyBhIHNpbmdsZSBudW1iZXIgb3IgYW4gYXJyYXkgdG8gc3BlY2lmeSB0aGUgcmFkaXVzIGZvciBlYWNoIHZlcnRleC5cclxuICAgICAqIEBtZXRob2QgY2hhbWZlclxyXG4gICAgICogQHBhcmFtIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IHJhZGl1c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHF1YWxpdHlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBxdWFsaXR5TWluXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcXVhbGl0eU1heFxyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5jaGFtZmVyID0gZnVuY3Rpb24odmVydGljZXMsIHJhZGl1cywgcXVhbGl0eSwgcXVhbGl0eU1pbiwgcXVhbGl0eU1heCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmFkaXVzID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICByYWRpdXMgPSBbcmFkaXVzXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgWzhdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcXVhbGl0eSBkZWZhdWx0cyB0byAtMSwgd2hpY2ggaXMgYXV0b1xyXG4gICAgICAgIHF1YWxpdHkgPSAodHlwZW9mIHF1YWxpdHkgIT09ICd1bmRlZmluZWQnKSA/IHF1YWxpdHkgOiAtMTtcclxuICAgICAgICBxdWFsaXR5TWluID0gcXVhbGl0eU1pbiB8fCAyO1xyXG4gICAgICAgIHF1YWxpdHlNYXggPSBxdWFsaXR5TWF4IHx8IDE0O1xyXG5cclxuICAgICAgICB2YXIgbmV3VmVydGljZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcHJldlZlcnRleCA9IHZlcnRpY2VzW2kgLSAxID49IDAgPyBpIC0gMSA6IHZlcnRpY2VzLmxlbmd0aCAtIDFdLFxyXG4gICAgICAgICAgICAgICAgdmVydGV4ID0gdmVydGljZXNbaV0sXHJcbiAgICAgICAgICAgICAgICBuZXh0VmVydGV4ID0gdmVydGljZXNbKGkgKyAxKSAlIHZlcnRpY2VzLmxlbmd0aF0sXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UmFkaXVzID0gcmFkaXVzW2kgPCByYWRpdXMubGVuZ3RoID8gaSA6IHJhZGl1cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UmFkaXVzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdWZXJ0aWNlcy5wdXNoKHZlcnRleCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHByZXZOb3JtYWwgPSBWZWN0b3Iubm9ybWFsaXNlKHsgXHJcbiAgICAgICAgICAgICAgICB4OiB2ZXJ0ZXgueSAtIHByZXZWZXJ0ZXgueSwgXHJcbiAgICAgICAgICAgICAgICB5OiBwcmV2VmVydGV4LnggLSB2ZXJ0ZXgueFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBuZXh0Tm9ybWFsID0gVmVjdG9yLm5vcm1hbGlzZSh7IFxyXG4gICAgICAgICAgICAgICAgeDogbmV4dFZlcnRleC55IC0gdmVydGV4LnksIFxyXG4gICAgICAgICAgICAgICAgeTogdmVydGV4LnggLSBuZXh0VmVydGV4LnhcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGlhZ29uYWxSYWRpdXMgPSBNYXRoLnNxcnQoMiAqIE1hdGgucG93KGN1cnJlbnRSYWRpdXMsIDIpKSxcclxuICAgICAgICAgICAgICAgIHJhZGl1c1ZlY3RvciA9IFZlY3Rvci5tdWx0KENvbW1vbi5jbG9uZShwcmV2Tm9ybWFsKSwgY3VycmVudFJhZGl1cyksXHJcbiAgICAgICAgICAgICAgICBtaWROb3JtYWwgPSBWZWN0b3Iubm9ybWFsaXNlKFZlY3Rvci5tdWx0KFZlY3Rvci5hZGQocHJldk5vcm1hbCwgbmV4dE5vcm1hbCksIDAuNSkpLFxyXG4gICAgICAgICAgICAgICAgc2NhbGVkVmVydGV4ID0gVmVjdG9yLnN1Yih2ZXJ0ZXgsIFZlY3Rvci5tdWx0KG1pZE5vcm1hbCwgZGlhZ29uYWxSYWRpdXMpKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBxdWFsaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHF1YWxpdHkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGRlY2lkZSBwcmVjaXNpb25cclxuICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IE1hdGgucG93KGN1cnJlbnRSYWRpdXMsIDAuMzIpICogMS43NTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJlY2lzaW9uID0gQ29tbW9uLmNsYW1wKHByZWNpc2lvbiwgcXVhbGl0eU1pbiwgcXVhbGl0eU1heCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2UgYW4gZXZlbiB2YWx1ZSBmb3IgcHJlY2lzaW9uLCBtb3JlIGxpa2VseSB0byByZWR1Y2UgYXhlcyBieSB1c2luZyBzeW1tZXRyeVxyXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uICUgMiA9PT0gMSlcclxuICAgICAgICAgICAgICAgIHByZWNpc2lvbiArPSAxO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5hY29zKFZlY3Rvci5kb3QocHJldk5vcm1hbCwgbmV4dE5vcm1hbCkpLFxyXG4gICAgICAgICAgICAgICAgdGhldGEgPSBhbHBoYSAvIHByZWNpc2lvbjtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJlY2lzaW9uOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZlcnRpY2VzLnB1c2goVmVjdG9yLmFkZChWZWN0b3Iucm90YXRlKHJhZGl1c1ZlY3RvciwgdGhldGEgKiBqKSwgc2NhbGVkVmVydGV4KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdWZXJ0aWNlcztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTb3J0cyB0aGUgaW5wdXQgdmVydGljZXMgaW50byBjbG9ja3dpc2Ugb3JkZXIgaW4gcGxhY2UuXHJcbiAgICAgKiBAbWV0aG9kIGNsb2Nrd2lzZVNvcnRcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcmV0dXJuIHt2ZXJ0aWNlc30gdmVydGljZXNcclxuICAgICAqL1xyXG4gICAgVmVydGljZXMuY2xvY2t3aXNlU29ydCA9IGZ1bmN0aW9uKHZlcnRpY2VzKSB7XHJcbiAgICAgICAgdmFyIGNlbnRyZSA9IFZlcnRpY2VzLm1lYW4odmVydGljZXMpO1xyXG5cclxuICAgICAgICB2ZXJ0aWNlcy5zb3J0KGZ1bmN0aW9uKHZlcnRleEEsIHZlcnRleEIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFZlY3Rvci5hbmdsZShjZW50cmUsIHZlcnRleEEpIC0gVmVjdG9yLmFuZ2xlKGNlbnRyZSwgdmVydGV4Qik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZXJ0aWNlcztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZlcnRpY2VzIGZvcm0gYSBjb252ZXggc2hhcGUgKHZlcnRpY2VzIG11c3QgYmUgaW4gY2xvY2t3aXNlIG9yZGVyKS5cclxuICAgICAqIEBtZXRob2QgaXNDb252ZXhcclxuICAgICAqIEBwYXJhbSB7dmVydGljZXN9IHZlcnRpY2VzXHJcbiAgICAgKiBAcmV0dXJuIHtib29sfSBgdHJ1ZWAgaWYgdGhlIGB2ZXJ0aWNlc2AgYXJlIGNvbnZleCwgYGZhbHNlYCBpZiBub3QgKG9yIGBudWxsYCBpZiBub3QgY29tcHV0YWJsZSkuXHJcbiAgICAgKi9cclxuICAgIFZlcnRpY2VzLmlzQ29udmV4ID0gZnVuY3Rpb24odmVydGljZXMpIHtcclxuICAgICAgICAvLyBodHRwOi8vcGF1bGJvdXJrZS5uZXQvZ2VvbWV0cnkvcG9seWdvbm1lc2gvXHJcbiAgICAgICAgLy8gQ29weXJpZ2h0IChjKSBQYXVsIEJvdXJrZSAodXNlIHBlcm1pdHRlZClcclxuXHJcbiAgICAgICAgdmFyIGZsYWcgPSAwLFxyXG4gICAgICAgICAgICBuID0gdmVydGljZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICBqLFxyXG4gICAgICAgICAgICBrLFxyXG4gICAgICAgICAgICB6O1xyXG5cclxuICAgICAgICBpZiAobiA8IDMpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGogPSAoaSArIDEpICUgbjtcclxuICAgICAgICAgICAgayA9IChpICsgMikgJSBuO1xyXG4gICAgICAgICAgICB6ID0gKHZlcnRpY2VzW2pdLnggLSB2ZXJ0aWNlc1tpXS54KSAqICh2ZXJ0aWNlc1trXS55IC0gdmVydGljZXNbal0ueSk7XHJcbiAgICAgICAgICAgIHogLT0gKHZlcnRpY2VzW2pdLnkgLSB2ZXJ0aWNlc1tpXS55KSAqICh2ZXJ0aWNlc1trXS54IC0gdmVydGljZXNbal0ueCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoeiA8IDApIHtcclxuICAgICAgICAgICAgICAgIGZsYWcgfD0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh6ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZmxhZyB8PSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmxhZyA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmxhZyAhPT0gMCl7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjb252ZXggaHVsbCBvZiB0aGUgaW5wdXQgdmVydGljZXMgYXMgYSBuZXcgYXJyYXkgb2YgcG9pbnRzLlxyXG4gICAgICogQG1ldGhvZCBodWxsXHJcbiAgICAgKiBAcGFyYW0ge3ZlcnRpY2VzfSB2ZXJ0aWNlc1xyXG4gICAgICogQHJldHVybiBbdmVydGV4XSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICBWZXJ0aWNlcy5odWxsID0gZnVuY3Rpb24odmVydGljZXMpIHtcclxuICAgICAgICAvLyBodHRwOi8vZ2VvbWFsZ29yaXRobXMuY29tL2ExMC1faHVsbC0xLmh0bWxcclxuXHJcbiAgICAgICAgdmFyIHVwcGVyID0gW10sXHJcbiAgICAgICAgICAgIGxvd2VyID0gW10sIFxyXG4gICAgICAgICAgICB2ZXJ0ZXgsXHJcbiAgICAgICAgICAgIGk7XHJcblxyXG4gICAgICAgIC8vIHNvcnQgdmVydGljZXMgb24geC1heGlzICh5LWF4aXMgZm9yIHRpZXMpXHJcbiAgICAgICAgdmVydGljZXMgPSB2ZXJ0aWNlcy5zbGljZSgwKTtcclxuICAgICAgICB2ZXJ0aWNlcy5zb3J0KGZ1bmN0aW9uKHZlcnRleEEsIHZlcnRleEIpIHtcclxuICAgICAgICAgICAgdmFyIGR4ID0gdmVydGV4QS54IC0gdmVydGV4Qi54O1xyXG4gICAgICAgICAgICByZXR1cm4gZHggIT09IDAgPyBkeCA6IHZlcnRleEEueSAtIHZlcnRleEIueTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gYnVpbGQgbG93ZXIgaHVsbFxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChsb3dlci5sZW5ndGggPj0gMiBcclxuICAgICAgICAgICAgICAgICAgICYmIFZlY3Rvci5jcm9zczMobG93ZXJbbG93ZXIubGVuZ3RoIC0gMl0sIGxvd2VyW2xvd2VyLmxlbmd0aCAtIDFdLCB2ZXJ0ZXgpIDw9IDApIHtcclxuICAgICAgICAgICAgICAgIGxvd2VyLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsb3dlci5wdXNoKHZlcnRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBidWlsZCB1cHBlciBodWxsXHJcbiAgICAgICAgZm9yIChpID0gdmVydGljZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcclxuICAgICAgICAgICAgdmVydGV4ID0gdmVydGljZXNbaV07XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodXBwZXIubGVuZ3RoID49IDIgXHJcbiAgICAgICAgICAgICAgICAgICAmJiBWZWN0b3IuY3Jvc3MzKHVwcGVyW3VwcGVyLmxlbmd0aCAtIDJdLCB1cHBlclt1cHBlci5sZW5ndGggLSAxXSwgdmVydGV4KSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1cHBlci5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXBwZXIucHVzaCh2ZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29uY2F0ZW5hdGlvbiBvZiB0aGUgbG93ZXIgYW5kIHVwcGVyIGh1bGxzIGdpdmVzIHRoZSBjb252ZXggaHVsbFxyXG4gICAgICAgIC8vIG9taXQgbGFzdCBwb2ludHMgYmVjYXVzZSB0aGV5IGFyZSByZXBlYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvdGhlciBsaXN0XHJcbiAgICAgICAgdXBwZXIucG9wKCk7XHJcbiAgICAgICAgbG93ZXIucG9wKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cHBlci5jb25jYXQobG93ZXIpO1xyXG4gICAgfTtcclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/geometry/Vertices.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterAttractors.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterAttractors.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("var Matter = __webpack_require__(/*! ../../CustomMain */ \"./node_modules/phaser/src/physics/matter-js/CustomMain.js\");\r\n\r\n/**\r\n * An attractors plugin for matter.js.\r\n * See the readme for usage and examples.\r\n * @module MatterAttractors\r\n */\r\nvar MatterAttractors = {\r\n  // plugin meta\r\n  name: 'matter-attractors', // PLUGIN_NAME\r\n  version: '0.1.7', // PLUGIN_VERSION\r\n  for: 'matter-js@^0.13.1',\r\n  silent: true, // no console log please\r\n\r\n  // installs the plugin where `base` is `Matter`\r\n  // you should not need to call this directly.\r\n  install: function(base) {\r\n    base.after('Body.create', function() {\r\n      MatterAttractors.Body.init(this);\r\n    });\r\n\r\n    base.before('Engine.update', function(engine) {\r\n      MatterAttractors.Engine.update(engine);\r\n    });\r\n  },\r\n\r\n  Body: {\r\n    /**\r\n     * Initialises the `body` to support attractors.\r\n     * This is called automatically by the plugin.\r\n     * @function MatterAttractors.Body.init\r\n     * @param {Matter.Body} body The body to init.\r\n     * @returns {void} No return value.\r\n     */\r\n    init: function(body) {\r\n      body.plugin.attractors = body.plugin.attractors || [];\r\n    }\r\n  },\r\n\r\n  Engine: {\r\n    /**\r\n     * Applies all attractors for all bodies in the `engine`.\r\n     * This is called automatically by the plugin.\r\n     * @function MatterAttractors.Engine.update\r\n     * @param {Matter.Engine} engine The engine to update.\r\n     * @returns {void} No return value.\r\n     */\r\n    update: function(engine) {\r\n      var world = engine.world,\r\n        bodies = Matter.Composite.allBodies(world);\r\n\r\n      for (var i = 0; i < bodies.length; i += 1) {\r\n        var bodyA = bodies[i],\r\n          attractors = bodyA.plugin.attractors;\r\n\r\n        if (attractors && attractors.length > 0) {\r\n          for (var j = i + 1; j < bodies.length; j += 1) {\r\n            var bodyB = bodies[j];\r\n\r\n            for (var k = 0; k < attractors.length; k += 1) {\r\n              var attractor = attractors[k],\r\n                forceVector = attractor;\r\n\r\n              if (Matter.Common.isFunction(attractor)) {\r\n                forceVector = attractor(bodyA, bodyB);\r\n              }\r\n\r\n              if (forceVector) {\r\n                Matter.Body.applyForce(bodyB, bodyB.position, forceVector);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Defines some useful common attractor functions that can be used\r\n   * by pushing them to your body's `body.plugin.attractors` array.\r\n   * @namespace MatterAttractors.Attractors\r\n   * @property {number} gravityConstant The gravitational constant used by the gravity attractor.\r\n   */\r\n  Attractors: {\r\n    gravityConstant: 0.001,\r\n\r\n    /**\r\n     * An attractor function that applies Newton's law of gravitation.\r\n     * Use this by pushing `MatterAttractors.Attractors.gravity` to your body's `body.plugin.attractors` array.\r\n     * The gravitational constant defaults to `0.001` which you can change\r\n     * at `MatterAttractors.Attractors.gravityConstant`.\r\n     * @function MatterAttractors.Attractors.gravity\r\n     * @param {Matter.Body} bodyA The first body.\r\n     * @param {Matter.Body} bodyB The second body.\r\n     * @returns {void} No return value.\r\n     */\r\n    gravity: function(bodyA, bodyB) {\r\n      // use Newton's law of gravitation\r\n      var bToA = Matter.Vector.sub(bodyB.position, bodyA.position),\r\n        distanceSq = Matter.Vector.magnitudeSquared(bToA) || 0.0001,\r\n        normal = Matter.Vector.normalise(bToA),\r\n        magnitude = -MatterAttractors.Attractors.gravityConstant * (bodyA.mass * bodyB.mass / distanceSq),\r\n        force = Matter.Vector.mult(normal, magnitude);\r\n\r\n      // to apply forces to both bodies\r\n      Matter.Body.applyForce(bodyA, bodyA.position, Matter.Vector.neg(force));\r\n      Matter.Body.applyForce(bodyB, bodyB.position, force);\r\n    }\r\n  }\r\n};\r\n\r\nmodule.exports = MatterAttractors;\r\n\r\n/**\r\n * @namespace Matter.Body\r\n * @see http://brm.io/matter-js/docs/classes/Body.html\r\n */\r\n\r\n/**\r\n * This plugin adds a new property `body.plugin.attractors` to instances of `Matter.Body`.\r\n * This is an array of callback functions that will be called automatically\r\n * for every pair of bodies, on every engine update.\r\n * @property {Function[]} body.plugin.attractors\r\n * @memberof Matter.Body\r\n */\r\n\r\n/**\r\n * An attractor function calculates the force to be applied\r\n * to `bodyB`, it should either:\r\n * - return the force vector to be applied to `bodyB`\r\n * - or apply the force to the body(s) itself\r\n * @callback AttractorFunction\r\n * @param {Matter.Body} bodyA\r\n * @param {Matter.Body} bodyB\r\n * @returns {(Vector|undefined)} a force vector (optional)\r\n */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvcGx1Z2lucy9NYXR0ZXJBdHRyYWN0b3JzLmpzPzk3NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLG1GQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQixpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsbUJBQW1CO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsbUJBQW1CO0FBQ2hEOztBQUVBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxZQUFZO0FBQzNCLGVBQWUsWUFBWTtBQUMzQixpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsV0FBVztBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFlBQVk7QUFDdkIsYUFBYSxtQkFBbUI7QUFDaEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvcGx1Z2lucy9NYXR0ZXJBdHRyYWN0b3JzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIE1hdHRlciA9IHJlcXVpcmUoJy4uLy4uL0N1c3RvbU1haW4nKTtcclxuXHJcbi8qKlxyXG4gKiBBbiBhdHRyYWN0b3JzIHBsdWdpbiBmb3IgbWF0dGVyLmpzLlxyXG4gKiBTZWUgdGhlIHJlYWRtZSBmb3IgdXNhZ2UgYW5kIGV4YW1wbGVzLlxyXG4gKiBAbW9kdWxlIE1hdHRlckF0dHJhY3RvcnNcclxuICovXHJcbnZhciBNYXR0ZXJBdHRyYWN0b3JzID0ge1xyXG4gIC8vIHBsdWdpbiBtZXRhXHJcbiAgbmFtZTogJ21hdHRlci1hdHRyYWN0b3JzJywgLy8gUExVR0lOX05BTUVcclxuICB2ZXJzaW9uOiAnMC4xLjcnLCAvLyBQTFVHSU5fVkVSU0lPTlxyXG4gIGZvcjogJ21hdHRlci1qc0BeMC4xMy4xJyxcclxuICBzaWxlbnQ6IHRydWUsIC8vIG5vIGNvbnNvbGUgbG9nIHBsZWFzZVxyXG5cclxuICAvLyBpbnN0YWxscyB0aGUgcGx1Z2luIHdoZXJlIGBiYXNlYCBpcyBgTWF0dGVyYFxyXG4gIC8vIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LlxyXG4gIGluc3RhbGw6IGZ1bmN0aW9uKGJhc2UpIHtcclxuICAgIGJhc2UuYWZ0ZXIoJ0JvZHkuY3JlYXRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgIE1hdHRlckF0dHJhY3RvcnMuQm9keS5pbml0KHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYmFzZS5iZWZvcmUoJ0VuZ2luZS51cGRhdGUnLCBmdW5jdGlvbihlbmdpbmUpIHtcclxuICAgICAgTWF0dGVyQXR0cmFjdG9ycy5FbmdpbmUudXBkYXRlKGVuZ2luZSk7XHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBCb2R5OiB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpc2VzIHRoZSBgYm9keWAgdG8gc3VwcG9ydCBhdHRyYWN0b3JzLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgcGx1Z2luLlxyXG4gICAgICogQGZ1bmN0aW9uIE1hdHRlckF0dHJhY3RvcnMuQm9keS5pbml0XHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Cb2R5fSBib2R5IFRoZSBib2R5IHRvIGluaXQuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gTm8gcmV0dXJuIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbihib2R5KSB7XHJcbiAgICAgIGJvZHkucGx1Z2luLmF0dHJhY3RvcnMgPSBib2R5LnBsdWdpbi5hdHRyYWN0b3JzIHx8IFtdO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIEVuZ2luZToge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGFsbCBhdHRyYWN0b3JzIGZvciBhbGwgYm9kaWVzIGluIHRoZSBgZW5naW5lYC5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHBsdWdpbi5cclxuICAgICAqIEBmdW5jdGlvbiBNYXR0ZXJBdHRyYWN0b3JzLkVuZ2luZS51cGRhdGVcclxuICAgICAqIEBwYXJhbSB7TWF0dGVyLkVuZ2luZX0gZW5naW5lIFRoZSBlbmdpbmUgdG8gdXBkYXRlLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9IE5vIHJldHVybiB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbihlbmdpbmUpIHtcclxuICAgICAgdmFyIHdvcmxkID0gZW5naW5lLndvcmxkLFxyXG4gICAgICAgIGJvZGllcyA9IE1hdHRlci5Db21wb3NpdGUuYWxsQm9kaWVzKHdvcmxkKTtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9kaWVzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgdmFyIGJvZHlBID0gYm9kaWVzW2ldLFxyXG4gICAgICAgICAgYXR0cmFjdG9ycyA9IGJvZHlBLnBsdWdpbi5hdHRyYWN0b3JzO1xyXG5cclxuICAgICAgICBpZiAoYXR0cmFjdG9ycyAmJiBhdHRyYWN0b3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGJvZGllcy5sZW5ndGg7IGogKz0gMSkge1xyXG4gICAgICAgICAgICB2YXIgYm9keUIgPSBib2RpZXNbal07XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJhY3RvcnMubGVuZ3RoOyBrICs9IDEpIHtcclxuICAgICAgICAgICAgICB2YXIgYXR0cmFjdG9yID0gYXR0cmFjdG9yc1trXSxcclxuICAgICAgICAgICAgICAgIGZvcmNlVmVjdG9yID0gYXR0cmFjdG9yO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoTWF0dGVyLkNvbW1vbi5pc0Z1bmN0aW9uKGF0dHJhY3RvcikpIHtcclxuICAgICAgICAgICAgICAgIGZvcmNlVmVjdG9yID0gYXR0cmFjdG9yKGJvZHlBLCBib2R5Qik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoZm9yY2VWZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIE1hdHRlci5Cb2R5LmFwcGx5Rm9yY2UoYm9keUIsIGJvZHlCLnBvc2l0aW9uLCBmb3JjZVZlY3Rvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyBzb21lIHVzZWZ1bCBjb21tb24gYXR0cmFjdG9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkXHJcbiAgICogYnkgcHVzaGluZyB0aGVtIHRvIHlvdXIgYm9keSdzIGBib2R5LnBsdWdpbi5hdHRyYWN0b3JzYCBhcnJheS5cclxuICAgKiBAbmFtZXNwYWNlIE1hdHRlckF0dHJhY3RvcnMuQXR0cmFjdG9yc1xyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmF2aXR5Q29uc3RhbnQgVGhlIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgdXNlZCBieSB0aGUgZ3Jhdml0eSBhdHRyYWN0b3IuXHJcbiAgICovXHJcbiAgQXR0cmFjdG9yczoge1xyXG4gICAgZ3Jhdml0eUNvbnN0YW50OiAwLjAwMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGF0dHJhY3RvciBmdW5jdGlvbiB0aGF0IGFwcGxpZXMgTmV3dG9uJ3MgbGF3IG9mIGdyYXZpdGF0aW9uLlxyXG4gICAgICogVXNlIHRoaXMgYnkgcHVzaGluZyBgTWF0dGVyQXR0cmFjdG9ycy5BdHRyYWN0b3JzLmdyYXZpdHlgIHRvIHlvdXIgYm9keSdzIGBib2R5LnBsdWdpbi5hdHRyYWN0b3JzYCBhcnJheS5cclxuICAgICAqIFRoZSBncmF2aXRhdGlvbmFsIGNvbnN0YW50IGRlZmF1bHRzIHRvIGAwLjAwMWAgd2hpY2ggeW91IGNhbiBjaGFuZ2VcclxuICAgICAqIGF0IGBNYXR0ZXJBdHRyYWN0b3JzLkF0dHJhY3RvcnMuZ3Jhdml0eUNvbnN0YW50YC5cclxuICAgICAqIEBmdW5jdGlvbiBNYXR0ZXJBdHRyYWN0b3JzLkF0dHJhY3RvcnMuZ3Jhdml0eVxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXIuQm9keX0gYm9keUEgVGhlIGZpcnN0IGJvZHkuXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Cb2R5fSBib2R5QiBUaGUgc2Vjb25kIGJvZHkuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gTm8gcmV0dXJuIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBncmF2aXR5OiBmdW5jdGlvbihib2R5QSwgYm9keUIpIHtcclxuICAgICAgLy8gdXNlIE5ld3RvbidzIGxhdyBvZiBncmF2aXRhdGlvblxyXG4gICAgICB2YXIgYlRvQSA9IE1hdHRlci5WZWN0b3Iuc3ViKGJvZHlCLnBvc2l0aW9uLCBib2R5QS5wb3NpdGlvbiksXHJcbiAgICAgICAgZGlzdGFuY2VTcSA9IE1hdHRlci5WZWN0b3IubWFnbml0dWRlU3F1YXJlZChiVG9BKSB8fCAwLjAwMDEsXHJcbiAgICAgICAgbm9ybWFsID0gTWF0dGVyLlZlY3Rvci5ub3JtYWxpc2UoYlRvQSksXHJcbiAgICAgICAgbWFnbml0dWRlID0gLU1hdHRlckF0dHJhY3RvcnMuQXR0cmFjdG9ycy5ncmF2aXR5Q29uc3RhbnQgKiAoYm9keUEubWFzcyAqIGJvZHlCLm1hc3MgLyBkaXN0YW5jZVNxKSxcclxuICAgICAgICBmb3JjZSA9IE1hdHRlci5WZWN0b3IubXVsdChub3JtYWwsIG1hZ25pdHVkZSk7XHJcblxyXG4gICAgICAvLyB0byBhcHBseSBmb3JjZXMgdG8gYm90aCBib2RpZXNcclxuICAgICAgTWF0dGVyLkJvZHkuYXBwbHlGb3JjZShib2R5QSwgYm9keUEucG9zaXRpb24sIE1hdHRlci5WZWN0b3IubmVnKGZvcmNlKSk7XHJcbiAgICAgIE1hdHRlci5Cb2R5LmFwcGx5Rm9yY2UoYm9keUIsIGJvZHlCLnBvc2l0aW9uLCBmb3JjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYXR0ZXJBdHRyYWN0b3JzO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgTWF0dGVyLkJvZHlcclxuICogQHNlZSBodHRwOi8vYnJtLmlvL21hdHRlci1qcy9kb2NzL2NsYXNzZXMvQm9keS5odG1sXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgcGx1Z2luIGFkZHMgYSBuZXcgcHJvcGVydHkgYGJvZHkucGx1Z2luLmF0dHJhY3RvcnNgIHRvIGluc3RhbmNlcyBvZiBgTWF0dGVyLkJvZHlgLlxyXG4gKiBUaGlzIGlzIGFuIGFycmF5IG9mIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHlcclxuICogZm9yIGV2ZXJ5IHBhaXIgb2YgYm9kaWVzLCBvbiBldmVyeSBlbmdpbmUgdXBkYXRlLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9uW119IGJvZHkucGx1Z2luLmF0dHJhY3RvcnNcclxuICogQG1lbWJlcm9mIE1hdHRlci5Cb2R5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEFuIGF0dHJhY3RvciBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBmb3JjZSB0byBiZSBhcHBsaWVkXHJcbiAqIHRvIGBib2R5QmAsIGl0IHNob3VsZCBlaXRoZXI6XHJcbiAqIC0gcmV0dXJuIHRoZSBmb3JjZSB2ZWN0b3IgdG8gYmUgYXBwbGllZCB0byBgYm9keUJgXHJcbiAqIC0gb3IgYXBwbHkgdGhlIGZvcmNlIHRvIHRoZSBib2R5KHMpIGl0c2VsZlxyXG4gKiBAY2FsbGJhY2sgQXR0cmFjdG9yRnVuY3Rpb25cclxuICogQHBhcmFtIHtNYXR0ZXIuQm9keX0gYm9keUFcclxuICogQHBhcmFtIHtNYXR0ZXIuQm9keX0gYm9keUJcclxuICogQHJldHVybnMgeyhWZWN0b3J8dW5kZWZpbmVkKX0gYSBmb3JjZSB2ZWN0b3IgKG9wdGlvbmFsKVxyXG4gKi9cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterAttractors.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterWrap.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterWrap.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("var Matter = __webpack_require__(/*! ../../CustomMain */ \"./node_modules/phaser/src/physics/matter-js/CustomMain.js\");\r\n\r\n/**\r\n * A coordinate wrapping plugin for matter.js.\r\n * See the readme for usage and examples.\r\n * @module MatterWrap\r\n */\r\nvar MatterWrap = {\r\n  // plugin meta\r\n  name: 'matter-wrap', // PLUGIN_NAME\r\n  version: '0.1.4', // PLUGIN_VERSION\r\n  for: 'matter-js@^0.13.1',\r\n  silent: true, // no console log please\r\n\r\n  // installs the plugin where `base` is `Matter`\r\n  // you should not need to call this directly.\r\n  install: function(base) {\r\n    base.after('Engine.update', function() {\r\n      MatterWrap.Engine.update(this);\r\n    });\r\n  },\r\n\r\n  Engine: {\r\n    /**\r\n     * Updates the engine by wrapping bodies and composites inside `engine.world`.\r\n     * This is called automatically by the plugin.\r\n     * @function MatterWrap.Engine.update\r\n     * @param {Matter.Engine} engine The engine to update.\r\n     * @returns {void} No return value.\r\n     */\r\n    update: function(engine) {\r\n      var world = engine.world,\r\n        bodies = Matter.Composite.allBodies(world),\r\n        composites = Matter.Composite.allComposites(world);\r\n\r\n      for (var i = 0; i < bodies.length; i += 1) {\r\n        var body = bodies[i];\r\n\r\n        if (body.plugin.wrap) {\r\n          MatterWrap.Body.wrap(body, body.plugin.wrap);\r\n        }\r\n      }\r\n\r\n      for (i = 0; i < composites.length; i += 1) {\r\n        var composite = composites[i];\r\n\r\n        if (composite.plugin.wrap) {\r\n          MatterWrap.Composite.wrap(composite, composite.plugin.wrap);\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  Bounds: {\r\n    /**\r\n     * Returns a translation vector that wraps the `objectBounds` inside the `bounds`.\r\n     * @function MatterWrap.Bounds.wrap\r\n     * @param {Matter.Bounds} objectBounds The bounds of the object to wrap inside the bounds.\r\n     * @param {Matter.Bounds} bounds The bounds to wrap the body inside.\r\n     * @returns {?Matter.Vector} A translation vector (only if wrapping is required).\r\n     */\r\n    wrap: function(objectBounds, bounds) {\r\n      var x = null,\r\n        y = null;\r\n\r\n      if (typeof bounds.min.x !== 'undefined' && typeof bounds.max.x !== 'undefined') {\r\n        if (objectBounds.min.x > bounds.max.x) {\r\n          x = bounds.min.x - objectBounds.max.x;\r\n        } else if (objectBounds.max.x < bounds.min.x) {\r\n          x = bounds.max.x - objectBounds.min.x;\r\n        }\r\n      }\r\n\r\n      if (typeof bounds.min.y !== 'undefined' && typeof bounds.max.y !== 'undefined') {\r\n        if (objectBounds.min.y > bounds.max.y) {\r\n          y = bounds.min.y - objectBounds.max.y;\r\n        } else if (objectBounds.max.y < bounds.min.y) {\r\n          y = bounds.max.y - objectBounds.min.y;\r\n        }\r\n      }\r\n\r\n      if (x !== null || y !== null) {\r\n        return {\r\n          x: x || 0,\r\n          y: y || 0\r\n        };\r\n      }\r\n    }\r\n  },\r\n\r\n  Body: {\r\n    /**\r\n     * Wraps the `body` position such that it always stays within the given bounds. \r\n     * Upon crossing a boundary the body will appear on the opposite side of the bounds, \r\n     * while maintaining its velocity.\r\n     * This is called automatically by the plugin.\r\n     * @function MatterWrap.Body.wrap\r\n     * @param {Matter.Body} body The body to wrap.\r\n     * @param {Matter.Bounds} bounds The bounds to wrap the body inside.\r\n     * @returns {?Matter.Vector} The translation vector that was applied (only if wrapping was required).\r\n     */\r\n    wrap: function(body, bounds) {\r\n      var translation = MatterWrap.Bounds.wrap(body.bounds, bounds);\r\n\r\n      if (translation) {\r\n        Matter.Body.translate(body, translation);\r\n      }\r\n\r\n      return translation;\r\n    }\r\n  },\r\n\r\n  Composite: {\r\n    /**\r\n     * Returns the union of the bounds of all of the composite's bodies\r\n     * (not accounting for constraints).\r\n     * @function MatterWrap.Composite.bounds\r\n     * @param {Matter.Composite} composite The composite.\r\n     * @returns {Matter.Bounds} The composite bounds.\r\n     */\r\n    bounds: function(composite) {\r\n      var bodies = Matter.Composite.allBodies(composite),\r\n        vertices = [];\r\n      \r\n      for (var i = 0; i < bodies.length; i += 1) {\r\n        var body = bodies[i];\r\n        vertices.push(body.bounds.min, body.bounds.max);\r\n      }\r\n\r\n      return Matter.Bounds.create(vertices);\r\n    },\r\n\r\n    /**\r\n     * Wraps the `composite` position such that it always stays within the given bounds. \r\n     * Upon crossing a boundary the composite will appear on the opposite side of the bounds, \r\n     * while maintaining its velocity.\r\n     * This is called automatically by the plugin.\r\n     * @function MatterWrap.Composite.wrap\r\n     * @param {Matter.Composite} composite The composite to wrap.\r\n     * @param {Matter.Bounds} bounds The bounds to wrap the composite inside.\r\n     * @returns {?Matter.Vector} The translation vector that was applied (only if wrapping was required).\r\n     */\r\n    wrap: function(composite, bounds) {\r\n      var translation = MatterWrap.Bounds.wrap(\r\n        MatterWrap.Composite.bounds(composite), \r\n        bounds\r\n      );\r\n\r\n      if (translation) {\r\n        Matter.Composite.translate(composite, translation);\r\n      }\r\n\r\n      return translation;\r\n    }\r\n  }\r\n};\r\n\r\nmodule.exports = MatterWrap;\r\n\r\n/**\r\n * @namespace Matter.Body\r\n * @see http://brm.io/matter-js/docs/classes/Body.html\r\n */\r\n\r\n/**\r\n * This plugin adds a new property `body.plugin.wrap` to instances of `Matter.Body`.  \r\n * This is a `Matter.Bounds` instance that specifies the wrapping region.\r\n * @property {Matter.Bounds} body.plugin.wrap\r\n * @memberof Matter.Body\r\n */\r\n\r\n/**\r\n * This plugin adds a new property `composite.plugin.wrap` to instances of `Matter.Composite`.  \r\n * This is a `Matter.Bounds` instance that specifies the wrapping region.\r\n * @property {Matter.Bounds} composite.plugin.wrap\r\n * @memberof Matter.Composite\r\n *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9saWIvcGx1Z2lucy9NYXR0ZXJXcmFwLmpzP2UyODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLG1GQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixtQkFBbUI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixlQUFlLGNBQWM7QUFDN0IsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQixlQUFlLGNBQWM7QUFDN0IsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLG1CQUFtQjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsY0FBYztBQUM3QixpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsY0FBYztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsY0FBYztBQUM1QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGh5c2ljcy9tYXR0ZXItanMvbGliL3BsdWdpbnMvTWF0dGVyV3JhcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNYXR0ZXIgPSByZXF1aXJlKCcuLi8uLi9DdXN0b21NYWluJyk7XHJcblxyXG4vKipcclxuICogQSBjb29yZGluYXRlIHdyYXBwaW5nIHBsdWdpbiBmb3IgbWF0dGVyLmpzLlxyXG4gKiBTZWUgdGhlIHJlYWRtZSBmb3IgdXNhZ2UgYW5kIGV4YW1wbGVzLlxyXG4gKiBAbW9kdWxlIE1hdHRlcldyYXBcclxuICovXHJcbnZhciBNYXR0ZXJXcmFwID0ge1xyXG4gIC8vIHBsdWdpbiBtZXRhXHJcbiAgbmFtZTogJ21hdHRlci13cmFwJywgLy8gUExVR0lOX05BTUVcclxuICB2ZXJzaW9uOiAnMC4xLjQnLCAvLyBQTFVHSU5fVkVSU0lPTlxyXG4gIGZvcjogJ21hdHRlci1qc0BeMC4xMy4xJyxcclxuICBzaWxlbnQ6IHRydWUsIC8vIG5vIGNvbnNvbGUgbG9nIHBsZWFzZVxyXG5cclxuICAvLyBpbnN0YWxscyB0aGUgcGx1Z2luIHdoZXJlIGBiYXNlYCBpcyBgTWF0dGVyYFxyXG4gIC8vIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LlxyXG4gIGluc3RhbGw6IGZ1bmN0aW9uKGJhc2UpIHtcclxuICAgIGJhc2UuYWZ0ZXIoJ0VuZ2luZS51cGRhdGUnLCBmdW5jdGlvbigpIHtcclxuICAgICAgTWF0dGVyV3JhcC5FbmdpbmUudXBkYXRlKHRoaXMpO1xyXG4gICAgfSk7XHJcbiAgfSxcclxuXHJcbiAgRW5naW5lOiB7XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGVuZ2luZSBieSB3cmFwcGluZyBib2RpZXMgYW5kIGNvbXBvc2l0ZXMgaW5zaWRlIGBlbmdpbmUud29ybGRgLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgcGx1Z2luLlxyXG4gICAgICogQGZ1bmN0aW9uIE1hdHRlcldyYXAuRW5naW5lLnVwZGF0ZVxyXG4gICAgICogQHBhcmFtIHtNYXR0ZXIuRW5naW5lfSBlbmdpbmUgVGhlIGVuZ2luZSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gTm8gcmV0dXJuIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKGVuZ2luZSkge1xyXG4gICAgICB2YXIgd29ybGQgPSBlbmdpbmUud29ybGQsXHJcbiAgICAgICAgYm9kaWVzID0gTWF0dGVyLkNvbXBvc2l0ZS5hbGxCb2RpZXMod29ybGQpLFxyXG4gICAgICAgIGNvbXBvc2l0ZXMgPSBNYXR0ZXIuQ29tcG9zaXRlLmFsbENvbXBvc2l0ZXMod29ybGQpO1xyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGJvZHkucGx1Z2luLndyYXApIHtcclxuICAgICAgICAgIE1hdHRlcldyYXAuQm9keS53cmFwKGJvZHksIGJvZHkucGx1Z2luLndyYXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvc2l0ZXMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICB2YXIgY29tcG9zaXRlID0gY29tcG9zaXRlc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGNvbXBvc2l0ZS5wbHVnaW4ud3JhcCkge1xyXG4gICAgICAgICAgTWF0dGVyV3JhcC5Db21wb3NpdGUud3JhcChjb21wb3NpdGUsIGNvbXBvc2l0ZS5wbHVnaW4ud3JhcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgQm91bmRzOiB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB0cmFuc2xhdGlvbiB2ZWN0b3IgdGhhdCB3cmFwcyB0aGUgYG9iamVjdEJvdW5kc2AgaW5zaWRlIHRoZSBgYm91bmRzYC5cclxuICAgICAqIEBmdW5jdGlvbiBNYXR0ZXJXcmFwLkJvdW5kcy53cmFwXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Cb3VuZHN9IG9iamVjdEJvdW5kcyBUaGUgYm91bmRzIG9mIHRoZSBvYmplY3QgdG8gd3JhcCBpbnNpZGUgdGhlIGJvdW5kcy5cclxuICAgICAqIEBwYXJhbSB7TWF0dGVyLkJvdW5kc30gYm91bmRzIFRoZSBib3VuZHMgdG8gd3JhcCB0aGUgYm9keSBpbnNpZGUuXHJcbiAgICAgKiBAcmV0dXJucyB7P01hdHRlci5WZWN0b3J9IEEgdHJhbnNsYXRpb24gdmVjdG9yIChvbmx5IGlmIHdyYXBwaW5nIGlzIHJlcXVpcmVkKS5cclxuICAgICAqL1xyXG4gICAgd3JhcDogZnVuY3Rpb24ob2JqZWN0Qm91bmRzLCBib3VuZHMpIHtcclxuICAgICAgdmFyIHggPSBudWxsLFxyXG4gICAgICAgIHkgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBib3VuZHMubWluLnggIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBib3VuZHMubWF4LnggIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdEJvdW5kcy5taW4ueCA+IGJvdW5kcy5tYXgueCkge1xyXG4gICAgICAgICAgeCA9IGJvdW5kcy5taW4ueCAtIG9iamVjdEJvdW5kcy5tYXgueDtcclxuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEJvdW5kcy5tYXgueCA8IGJvdW5kcy5taW4ueCkge1xyXG4gICAgICAgICAgeCA9IGJvdW5kcy5tYXgueCAtIG9iamVjdEJvdW5kcy5taW4ueDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYm91bmRzLm1pbi55ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgYm91bmRzLm1heC55ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmIChvYmplY3RCb3VuZHMubWluLnkgPiBib3VuZHMubWF4LnkpIHtcclxuICAgICAgICAgIHkgPSBib3VuZHMubWluLnkgLSBvYmplY3RCb3VuZHMubWF4Lnk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3RCb3VuZHMubWF4LnkgPCBib3VuZHMubWluLnkpIHtcclxuICAgICAgICAgIHkgPSBib3VuZHMubWF4LnkgLSBvYmplY3RCb3VuZHMubWluLnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoeCAhPT0gbnVsbCB8fCB5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHggfHwgMCxcclxuICAgICAgICAgIHk6IHkgfHwgMFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICBCb2R5OiB7XHJcbiAgICAvKipcclxuICAgICAqIFdyYXBzIHRoZSBgYm9keWAgcG9zaXRpb24gc3VjaCB0aGF0IGl0IGFsd2F5cyBzdGF5cyB3aXRoaW4gdGhlIGdpdmVuIGJvdW5kcy4gXHJcbiAgICAgKiBVcG9uIGNyb3NzaW5nIGEgYm91bmRhcnkgdGhlIGJvZHkgd2lsbCBhcHBlYXIgb24gdGhlIG9wcG9zaXRlIHNpZGUgb2YgdGhlIGJvdW5kcywgXHJcbiAgICAgKiB3aGlsZSBtYWludGFpbmluZyBpdHMgdmVsb2NpdHkuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBwbHVnaW4uXHJcbiAgICAgKiBAZnVuY3Rpb24gTWF0dGVyV3JhcC5Cb2R5LndyYXBcclxuICAgICAqIEBwYXJhbSB7TWF0dGVyLkJvZHl9IGJvZHkgVGhlIGJvZHkgdG8gd3JhcC5cclxuICAgICAqIEBwYXJhbSB7TWF0dGVyLkJvdW5kc30gYm91bmRzIFRoZSBib3VuZHMgdG8gd3JhcCB0aGUgYm9keSBpbnNpZGUuXHJcbiAgICAgKiBAcmV0dXJucyB7P01hdHRlci5WZWN0b3J9IFRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgdGhhdCB3YXMgYXBwbGllZCAob25seSBpZiB3cmFwcGluZyB3YXMgcmVxdWlyZWQpLlxyXG4gICAgICovXHJcbiAgICB3cmFwOiBmdW5jdGlvbihib2R5LCBib3VuZHMpIHtcclxuICAgICAgdmFyIHRyYW5zbGF0aW9uID0gTWF0dGVyV3JhcC5Cb3VuZHMud3JhcChib2R5LmJvdW5kcywgYm91bmRzKTtcclxuXHJcbiAgICAgIGlmICh0cmFuc2xhdGlvbikge1xyXG4gICAgICAgIE1hdHRlci5Cb2R5LnRyYW5zbGF0ZShib2R5LCB0cmFuc2xhdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbjtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBDb21wb3NpdGU6IHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgdGhlIGJvdW5kcyBvZiBhbGwgb2YgdGhlIGNvbXBvc2l0ZSdzIGJvZGllc1xyXG4gICAgICogKG5vdCBhY2NvdW50aW5nIGZvciBjb25zdHJhaW50cykuXHJcbiAgICAgKiBAZnVuY3Rpb24gTWF0dGVyV3JhcC5Db21wb3NpdGUuYm91bmRzXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Db21wb3NpdGV9IGNvbXBvc2l0ZSBUaGUgY29tcG9zaXRlLlxyXG4gICAgICogQHJldHVybnMge01hdHRlci5Cb3VuZHN9IFRoZSBjb21wb3NpdGUgYm91bmRzLlxyXG4gICAgICovXHJcbiAgICBib3VuZHM6IGZ1bmN0aW9uKGNvbXBvc2l0ZSkge1xyXG4gICAgICB2YXIgYm9kaWVzID0gTWF0dGVyLkNvbXBvc2l0ZS5hbGxCb2RpZXMoY29tcG9zaXRlKSxcclxuICAgICAgICB2ZXJ0aWNlcyA9IFtdO1xyXG4gICAgICBcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2RpZXMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICB2YXIgYm9keSA9IGJvZGllc1tpXTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKGJvZHkuYm91bmRzLm1pbiwgYm9keS5ib3VuZHMubWF4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIE1hdHRlci5Cb3VuZHMuY3JlYXRlKHZlcnRpY2VzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyB0aGUgYGNvbXBvc2l0ZWAgcG9zaXRpb24gc3VjaCB0aGF0IGl0IGFsd2F5cyBzdGF5cyB3aXRoaW4gdGhlIGdpdmVuIGJvdW5kcy4gXHJcbiAgICAgKiBVcG9uIGNyb3NzaW5nIGEgYm91bmRhcnkgdGhlIGNvbXBvc2l0ZSB3aWxsIGFwcGVhciBvbiB0aGUgb3Bwb3NpdGUgc2lkZSBvZiB0aGUgYm91bmRzLCBcclxuICAgICAqIHdoaWxlIG1haW50YWluaW5nIGl0cyB2ZWxvY2l0eS5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHBsdWdpbi5cclxuICAgICAqIEBmdW5jdGlvbiBNYXR0ZXJXcmFwLkNvbXBvc2l0ZS53cmFwXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Db21wb3NpdGV9IGNvbXBvc2l0ZSBUaGUgY29tcG9zaXRlIHRvIHdyYXAuXHJcbiAgICAgKiBAcGFyYW0ge01hdHRlci5Cb3VuZHN9IGJvdW5kcyBUaGUgYm91bmRzIHRvIHdyYXAgdGhlIGNvbXBvc2l0ZSBpbnNpZGUuXHJcbiAgICAgKiBAcmV0dXJucyB7P01hdHRlci5WZWN0b3J9IFRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgdGhhdCB3YXMgYXBwbGllZCAob25seSBpZiB3cmFwcGluZyB3YXMgcmVxdWlyZWQpLlxyXG4gICAgICovXHJcbiAgICB3cmFwOiBmdW5jdGlvbihjb21wb3NpdGUsIGJvdW5kcykge1xyXG4gICAgICB2YXIgdHJhbnNsYXRpb24gPSBNYXR0ZXJXcmFwLkJvdW5kcy53cmFwKFxyXG4gICAgICAgIE1hdHRlcldyYXAuQ29tcG9zaXRlLmJvdW5kcyhjb21wb3NpdGUpLCBcclxuICAgICAgICBib3VuZHNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0cmFuc2xhdGlvbikge1xyXG4gICAgICAgIE1hdHRlci5Db21wb3NpdGUudHJhbnNsYXRlKGNvbXBvc2l0ZSwgdHJhbnNsYXRpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJhbnNsYXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYXR0ZXJXcmFwO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgTWF0dGVyLkJvZHlcclxuICogQHNlZSBodHRwOi8vYnJtLmlvL21hdHRlci1qcy9kb2NzL2NsYXNzZXMvQm9keS5odG1sXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgcGx1Z2luIGFkZHMgYSBuZXcgcHJvcGVydHkgYGJvZHkucGx1Z2luLndyYXBgIHRvIGluc3RhbmNlcyBvZiBgTWF0dGVyLkJvZHlgLiAgXHJcbiAqIFRoaXMgaXMgYSBgTWF0dGVyLkJvdW5kc2AgaW5zdGFuY2UgdGhhdCBzcGVjaWZpZXMgdGhlIHdyYXBwaW5nIHJlZ2lvbi5cclxuICogQHByb3BlcnR5IHtNYXR0ZXIuQm91bmRzfSBib2R5LnBsdWdpbi53cmFwXHJcbiAqIEBtZW1iZXJvZiBNYXR0ZXIuQm9keVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGlzIHBsdWdpbiBhZGRzIGEgbmV3IHByb3BlcnR5IGBjb21wb3NpdGUucGx1Z2luLndyYXBgIHRvIGluc3RhbmNlcyBvZiBgTWF0dGVyLkNvbXBvc2l0ZWAuICBcclxuICogVGhpcyBpcyBhIGBNYXR0ZXIuQm91bmRzYCBpbnN0YW5jZSB0aGF0IHNwZWNpZmllcyB0aGUgd3JhcHBpbmcgcmVnaW9uLlxyXG4gKiBAcHJvcGVydHkge01hdHRlci5Cb3VuZHN9IGNvbXBvc2l0ZS5wbHVnaW4ud3JhcFxyXG4gKiBAbWVtYmVyb2YgTWF0dGVyLkNvbXBvc2l0ZVxyXG4gKi8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/lib/plugins/MatterWrap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/physics/matter-js/poly-decomp/index.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/physics/matter-js/poly-decomp/index.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Stefan Hedman <schteppe@gmail.com> (http://steffe.se)\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  v0.3.0\r\n\r\nmodule.exports = {\r\n    decomp: polygonDecomp,\r\n    quickDecomp: polygonQuickDecomp,\r\n    isSimple: polygonIsSimple,\r\n    removeCollinearPoints: polygonRemoveCollinearPoints,\r\n    removeDuplicatePoints: polygonRemoveDuplicatePoints,\r\n    makeCCW: polygonMakeCCW\r\n};\r\n\r\n/**\r\n * Compute the intersection between two lines.\r\n * @static\r\n * @method lineInt\r\n * @param  {Array}  l1          Line vector 1\r\n * @param  {Array}  l2          Line vector 2\r\n * @param  {Number} precision   Precision to use when checking if the lines are parallel\r\n * @return {Array}              The intersection point.\r\n */\r\nfunction lineInt(l1,l2,precision){\r\n    precision = precision || 0;\r\n    var i = [0,0]; // point\r\n    var a1, b1, c1, a2, b2, c2, det; // scalars\r\n    a1 = l1[1][1] - l1[0][1];\r\n    b1 = l1[0][0] - l1[1][0];\r\n    c1 = a1 * l1[0][0] + b1 * l1[0][1];\r\n    a2 = l2[1][1] - l2[0][1];\r\n    b2 = l2[0][0] - l2[1][0];\r\n    c2 = a2 * l2[0][0] + b2 * l2[0][1];\r\n    det = a1 * b2 - a2*b1;\r\n    if (!scalar_eq(det, 0, precision)) { // lines are not parallel\r\n        i[0] = (b2 * c1 - b1 * c2) / det;\r\n        i[1] = (a1 * c2 - a2 * c1) / det;\r\n    }\r\n    return i;\r\n}\r\n\r\n/**\r\n * Checks if two line segments intersects.\r\n * @method segmentsIntersect\r\n * @param {Array} p1 The start vertex of the first line segment.\r\n * @param {Array} p2 The end vertex of the first line segment.\r\n * @param {Array} q1 The start vertex of the second line segment.\r\n * @param {Array} q2 The end vertex of the second line segment.\r\n * @return {Boolean} True if the two line segments intersect\r\n */\r\nfunction lineSegmentsIntersect(p1, p2, q1, q2){\r\n\tvar dx = p2[0] - p1[0];\r\n\tvar dy = p2[1] - p1[1];\r\n\tvar da = q2[0] - q1[0];\r\n\tvar db = q2[1] - q1[1];\r\n\r\n\t// segments are parallel\r\n\tif((da*dy - db*dx) === 0){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar s = (dx * (q1[1] - p1[1]) + dy * (p1[0] - q1[0])) / (da * dy - db * dx);\r\n\tvar t = (da * (p1[1] - q1[1]) + db * (q1[0] - p1[0])) / (db * dx - da * dy);\r\n\r\n\treturn (s>=0 && s<=1 && t>=0 && t<=1);\r\n}\r\n\r\n/**\r\n * Get the area of a triangle spanned by the three given points. Note that the area will be negative if the points are not given in counter-clockwise order.\r\n * @static\r\n * @method area\r\n * @param  {Array} a\r\n * @param  {Array} b\r\n * @param  {Array} c\r\n * @return {Number}\r\n */\r\nfunction triangleArea(a,b,c){\r\n    return (((b[0] - a[0])*(c[1] - a[1]))-((c[0] - a[0])*(b[1] - a[1])));\r\n}\r\n\r\nfunction isLeft(a,b,c){\r\n    return triangleArea(a,b,c) > 0;\r\n}\r\n\r\nfunction isLeftOn(a,b,c) {\r\n    return triangleArea(a, b, c) >= 0;\r\n}\r\n\r\nfunction isRight(a,b,c) {\r\n    return triangleArea(a, b, c) < 0;\r\n}\r\n\r\nfunction isRightOn(a,b,c) {\r\n    return triangleArea(a, b, c) <= 0;\r\n}\r\n\r\nvar tmpPoint1 = [],\r\n    tmpPoint2 = [];\r\n\r\n/**\r\n * Check if three points are collinear\r\n * @method collinear\r\n * @param  {Array} a\r\n * @param  {Array} b\r\n * @param  {Array} c\r\n * @param  {Number} [thresholdAngle=0] Threshold angle to use when comparing the vectors. The function will return true if the angle between the resulting vectors is less than this value. Use zero for max precision.\r\n * @return {Boolean}\r\n */\r\nfunction collinear(a,b,c,thresholdAngle) {\r\n    if(!thresholdAngle){\r\n        return triangleArea(a, b, c) === 0;\r\n    } else {\r\n        var ab = tmpPoint1,\r\n            bc = tmpPoint2;\r\n\r\n        ab[0] = b[0]-a[0];\r\n        ab[1] = b[1]-a[1];\r\n        bc[0] = c[0]-b[0];\r\n        bc[1] = c[1]-b[1];\r\n\r\n        var dot = ab[0]*bc[0] + ab[1]*bc[1],\r\n            magA = Math.sqrt(ab[0]*ab[0] + ab[1]*ab[1]),\r\n            magB = Math.sqrt(bc[0]*bc[0] + bc[1]*bc[1]),\r\n            angle = Math.acos(dot/(magA*magB));\r\n        return angle < thresholdAngle;\r\n    }\r\n}\r\n\r\nfunction sqdist(a,b){\r\n    var dx = b[0] - a[0];\r\n    var dy = b[1] - a[1];\r\n    return dx * dx + dy * dy;\r\n}\r\n\r\n/**\r\n * Get a vertex at position i. It does not matter if i is out of bounds, this function will just cycle.\r\n * @method at\r\n * @param  {Number} i\r\n * @return {Array}\r\n */\r\nfunction polygonAt(polygon, i){\r\n    var s = polygon.length;\r\n    return polygon[i < 0 ? i % s + s : i % s];\r\n}\r\n\r\n/**\r\n * Clear the polygon data\r\n * @method clear\r\n * @return {Array}\r\n */\r\nfunction polygonClear(polygon){\r\n    polygon.length = 0;\r\n}\r\n\r\n/**\r\n * Append points \"from\" to \"to\"-1 from an other polygon \"poly\" onto this one.\r\n * @method append\r\n * @param {Polygon} poly The polygon to get points from.\r\n * @param {Number}  from The vertex index in \"poly\".\r\n * @param {Number}  to The end vertex index in \"poly\". Note that this vertex is NOT included when appending.\r\n * @return {Array}\r\n */\r\nfunction polygonAppend(polygon, poly, from, to){\r\n    for(var i=from; i<to; i++){\r\n        polygon.push(poly[i]);\r\n    }\r\n}\r\n\r\n/**\r\n * Make sure that the polygon vertices are ordered counter-clockwise.\r\n * @method makeCCW\r\n */\r\nfunction polygonMakeCCW(polygon){\r\n    var br = 0,\r\n        v = polygon;\r\n\r\n    // find bottom right point\r\n    for (var i = 1; i < polygon.length; ++i) {\r\n        if (v[i][1] < v[br][1] || (v[i][1] === v[br][1] && v[i][0] > v[br][0])) {\r\n            br = i;\r\n        }\r\n    }\r\n\r\n    // reverse poly if clockwise\r\n    if (!isLeft(polygonAt(polygon, br - 1), polygonAt(polygon, br), polygonAt(polygon, br + 1))) {\r\n        polygonReverse(polygon);\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Reverse the vertices in the polygon\r\n * @method reverse\r\n */\r\nfunction polygonReverse(polygon){\r\n    var tmp = [];\r\n    var N = polygon.length;\r\n    for(var i=0; i!==N; i++){\r\n        tmp.push(polygon.pop());\r\n    }\r\n    for(var i=0; i!==N; i++){\r\n\t\tpolygon[i] = tmp[i];\r\n    }\r\n}\r\n\r\n/**\r\n * Check if a point in the polygon is a reflex point\r\n * @method isReflex\r\n * @param  {Number}  i\r\n * @return {Boolean}\r\n */\r\nfunction polygonIsReflex(polygon, i){\r\n    return isRight(polygonAt(polygon, i - 1), polygonAt(polygon, i), polygonAt(polygon, i + 1));\r\n}\r\n\r\nvar tmpLine1=[],\r\n    tmpLine2=[];\r\n\r\n/**\r\n * Check if two vertices in the polygon can see each other\r\n * @method canSee\r\n * @param  {Number} a Vertex index 1\r\n * @param  {Number} b Vertex index 2\r\n * @return {Boolean}\r\n */\r\nfunction polygonCanSee(polygon, a,b) {\r\n    var p, dist, l1=tmpLine1, l2=tmpLine2;\r\n\r\n    if (isLeftOn(polygonAt(polygon, a + 1), polygonAt(polygon, a), polygonAt(polygon, b)) && isRightOn(polygonAt(polygon, a - 1), polygonAt(polygon, a), polygonAt(polygon, b))) {\r\n        return false;\r\n    }\r\n    dist = sqdist(polygonAt(polygon, a), polygonAt(polygon, b));\r\n    for (var i = 0; i !== polygon.length; ++i) { // for each edge\r\n        if ((i + 1) % polygon.length === a || i === a){ // ignore incident edges\r\n            continue;\r\n        }\r\n        if (isLeftOn(polygonAt(polygon, a), polygonAt(polygon, b), polygonAt(polygon, i + 1)) && isRightOn(polygonAt(polygon, a), polygonAt(polygon, b), polygonAt(polygon, i))) { // if diag intersects an edge\r\n            l1[0] = polygonAt(polygon, a);\r\n            l1[1] = polygonAt(polygon, b);\r\n            l2[0] = polygonAt(polygon, i);\r\n            l2[1] = polygonAt(polygon, i + 1);\r\n            p = lineInt(l1,l2);\r\n            if (sqdist(polygonAt(polygon, a), p) < dist) { // if edge is blocking visibility to b\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n/**\r\n * Check if two vertices in the polygon can see each other\r\n * @method canSee2\r\n * @param  {Number} a Vertex index 1\r\n * @param  {Number} b Vertex index 2\r\n * @return {Boolean}\r\n */\r\nfunction polygonCanSee2(polygon, a,b) {\r\n    // for each edge\r\n    for (var i = 0; i !== polygon.length; ++i) {\r\n        // ignore incident edges\r\n        if (i === a || i === b || (i + 1) % polygon.length === a || (i + 1) % polygon.length === b){\r\n            continue;\r\n        }\r\n        if( lineSegmentsIntersect(polygonAt(polygon, a), polygonAt(polygon, b), polygonAt(polygon, i), polygonAt(polygon, i+1)) ){\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Copy the polygon from vertex i to vertex j.\r\n * @method copy\r\n * @param  {Number} i\r\n * @param  {Number} j\r\n * @param  {Polygon} [targetPoly]   Optional target polygon to save in.\r\n * @return {Polygon}                The resulting copy.\r\n */\r\nfunction polygonCopy(polygon, i,j,targetPoly){\r\n    var p = targetPoly || [];\r\n    polygonClear(p);\r\n    if (i < j) {\r\n        // Insert all vertices from i to j\r\n        for(var k=i; k<=j; k++){\r\n            p.push(polygon[k]);\r\n        }\r\n\r\n    } else {\r\n\r\n        // Insert vertices 0 to j\r\n        for(var k=0; k<=j; k++){\r\n            p.push(polygon[k]);\r\n        }\r\n\r\n        // Insert vertices i to end\r\n        for(var k=i; k<polygon.length; k++){\r\n            p.push(polygon[k]);\r\n        }\r\n    }\r\n\r\n    return p;\r\n}\r\n\r\n/**\r\n * Decomposes the polygon into convex pieces. Returns a list of edges [[p1,p2],[p2,p3],...] that cuts the polygon.\r\n * Note that this algorithm has complexity O(N^4) and will be very slow for polygons with many vertices.\r\n * @method getCutEdges\r\n * @return {Array}\r\n */\r\nfunction polygonGetCutEdges(polygon) {\r\n    var min=[], tmp1=[], tmp2=[], tmpPoly = [];\r\n    var nDiags = Number.MAX_VALUE;\r\n\r\n    for (var i = 0; i < polygon.length; ++i) {\r\n        if (polygonIsReflex(polygon, i)) {\r\n            for (var j = 0; j < polygon.length; ++j) {\r\n                if (polygonCanSee(polygon, i, j)) {\r\n                    tmp1 = polygonGetCutEdges(polygonCopy(polygon, i, j, tmpPoly));\r\n                    tmp2 = polygonGetCutEdges(polygonCopy(polygon, j, i, tmpPoly));\r\n\r\n                    for(var k=0; k<tmp2.length; k++){\r\n                        tmp1.push(tmp2[k]);\r\n                    }\r\n\r\n                    if (tmp1.length < nDiags) {\r\n                        min = tmp1;\r\n                        nDiags = tmp1.length;\r\n                        min.push([polygonAt(polygon, i), polygonAt(polygon, j)]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return min;\r\n}\r\n\r\n/**\r\n * Decomposes the polygon into one or more convex sub-Polygons.\r\n * @method decomp\r\n * @return {Array} An array or Polygon objects.\r\n */\r\nfunction polygonDecomp(polygon){\r\n    var edges = polygonGetCutEdges(polygon);\r\n    if(edges.length > 0){\r\n        return polygonSlice(polygon, edges);\r\n    } else {\r\n        return [polygon];\r\n    }\r\n}\r\n\r\n/**\r\n * Slices the polygon given one or more cut edges. If given one, this function will return two polygons (false on failure). If many, an array of polygons.\r\n * @method slice\r\n * @param {Array} cutEdges A list of edges, as returned by .getCutEdges()\r\n * @return {Array}\r\n */\r\nfunction polygonSlice(polygon, cutEdges){\r\n    if(cutEdges.length === 0){\r\n\t\treturn [polygon];\r\n    }\r\n    if(cutEdges instanceof Array && cutEdges.length && cutEdges[0] instanceof Array && cutEdges[0].length===2 && cutEdges[0][0] instanceof Array){\r\n\r\n        var polys = [polygon];\r\n\r\n        for(var i=0; i<cutEdges.length; i++){\r\n            var cutEdge = cutEdges[i];\r\n            // Cut all polys\r\n            for(var j=0; j<polys.length; j++){\r\n                var poly = polys[j];\r\n                var result = polygonSlice(poly, cutEdge);\r\n                if(result){\r\n                    // Found poly! Cut and quit\r\n                    polys.splice(j,1);\r\n                    polys.push(result[0],result[1]);\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return polys;\r\n    } else {\r\n\r\n        // Was given one edge\r\n        var cutEdge = cutEdges;\r\n        var i = polygon.indexOf(cutEdge[0]);\r\n        var j = polygon.indexOf(cutEdge[1]);\r\n\r\n        if(i !== -1 && j !== -1){\r\n            return [polygonCopy(polygon, i,j),\r\n                    polygonCopy(polygon, j,i)];\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Checks that the line segments of this polygon do not intersect each other.\r\n * @method isSimple\r\n * @param  {Array} path An array of vertices e.g. [[0,0],[0,1],...]\r\n * @return {Boolean}\r\n * @todo Should it check all segments with all others?\r\n */\r\nfunction polygonIsSimple(polygon){\r\n    var path = polygon, i;\r\n    // Check\r\n    for(i=0; i<path.length-1; i++){\r\n        for(var j=0; j<i-1; j++){\r\n            if(lineSegmentsIntersect(path[i], path[i+1], path[j], path[j+1] )){\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check the segment between the last and the first point to all others\r\n    for(i=1; i<path.length-2; i++){\r\n        if(lineSegmentsIntersect(path[0], path[path.length-1], path[i], path[i+1] )){\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nfunction getIntersectionPoint(p1, p2, q1, q2, delta){\r\n\tdelta = delta || 0;\r\n\tvar a1 = p2[1] - p1[1];\r\n\tvar b1 = p1[0] - p2[0];\r\n\tvar c1 = (a1 * p1[0]) + (b1 * p1[1]);\r\n\tvar a2 = q2[1] - q1[1];\r\n\tvar b2 = q1[0] - q2[0];\r\n\tvar c2 = (a2 * q1[0]) + (b2 * q1[1]);\r\n\tvar det = (a1 * b2) - (a2 * b1);\r\n\r\n\tif(!scalar_eq(det,0,delta)){\r\n\t\treturn [((b2 * c1) - (b1 * c2)) / det, ((a1 * c2) - (a2 * c1)) / det];\r\n\t} else {\r\n\t\treturn [0,0];\r\n    }\r\n}\r\n\r\n/**\r\n * Quickly decompose the Polygon into convex sub-polygons.\r\n * @method quickDecomp\r\n * @param  {Array} result\r\n * @param  {Array} [reflexVertices]\r\n * @param  {Array} [steinerPoints]\r\n * @param  {Number} [delta]\r\n * @param  {Number} [maxlevel]\r\n * @param  {Number} [level]\r\n * @return {Array}\r\n */\r\nfunction polygonQuickDecomp(polygon, result,reflexVertices,steinerPoints,delta,maxlevel,level){\r\n    maxlevel = maxlevel || 100;\r\n    level = level || 0;\r\n    delta = delta || 25;\r\n    result = typeof(result)!==\"undefined\" ? result : [];\r\n    reflexVertices = reflexVertices || [];\r\n    steinerPoints = steinerPoints || [];\r\n\r\n    var upperInt=[0,0], lowerInt=[0,0], p=[0,0]; // Points\r\n    var upperDist=0, lowerDist=0, d=0, closestDist=0; // scalars\r\n    var upperIndex=0, lowerIndex=0, closestIndex=0; // Integers\r\n    var lowerPoly=[], upperPoly=[]; // polygons\r\n    var poly = polygon,\r\n        v = polygon;\r\n\r\n    if(v.length < 3){\r\n\t\treturn result;\r\n    }\r\n\r\n    level++;\r\n    if(level > maxlevel){\r\n        console.warn(\"quickDecomp: max level (\"+maxlevel+\") reached.\");\r\n        return result;\r\n    }\r\n\r\n    for (var i = 0; i < polygon.length; ++i) {\r\n        if (polygonIsReflex(poly, i)) {\r\n            reflexVertices.push(poly[i]);\r\n            upperDist = lowerDist = Number.MAX_VALUE;\r\n\r\n\r\n            for (var j = 0; j < polygon.length; ++j) {\r\n                if (isLeft(polygonAt(poly, i - 1), polygonAt(poly, i), polygonAt(poly, j)) && isRightOn(polygonAt(poly, i - 1), polygonAt(poly, i), polygonAt(poly, j - 1))) { // if line intersects with an edge\r\n                    p = getIntersectionPoint(polygonAt(poly, i - 1), polygonAt(poly, i), polygonAt(poly, j), polygonAt(poly, j - 1)); // find the point of intersection\r\n                    if (isRight(polygonAt(poly, i + 1), polygonAt(poly, i), p)) { // make sure it's inside the poly\r\n                        d = sqdist(poly[i], p);\r\n                        if (d < lowerDist) { // keep only the closest intersection\r\n                            lowerDist = d;\r\n                            lowerInt = p;\r\n                            lowerIndex = j;\r\n                        }\r\n                    }\r\n                }\r\n                if (isLeft(polygonAt(poly, i + 1), polygonAt(poly, i), polygonAt(poly, j + 1)) && isRightOn(polygonAt(poly, i + 1), polygonAt(poly, i), polygonAt(poly, j))) {\r\n                    p = getIntersectionPoint(polygonAt(poly, i + 1), polygonAt(poly, i), polygonAt(poly, j), polygonAt(poly, j + 1));\r\n                    if (isLeft(polygonAt(poly, i - 1), polygonAt(poly, i), p)) {\r\n                        d = sqdist(poly[i], p);\r\n                        if (d < upperDist) {\r\n                            upperDist = d;\r\n                            upperInt = p;\r\n                            upperIndex = j;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            // if there are no vertices to connect to, choose a point in the middle\r\n            if (lowerIndex === (upperIndex + 1) % polygon.length) {\r\n                //console.log(\"Case 1: Vertex(\"+i+\"), lowerIndex(\"+lowerIndex+\"), upperIndex(\"+upperIndex+\"), poly.size(\"+polygon.length+\")\");\r\n                p[0] = (lowerInt[0] + upperInt[0]) / 2;\r\n                p[1] = (lowerInt[1] + upperInt[1]) / 2;\r\n                steinerPoints.push(p);\r\n\r\n                if (i < upperIndex) {\r\n                    //lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.begin() + upperIndex + 1);\r\n                    polygonAppend(lowerPoly, poly, i, upperIndex+1);\r\n                    lowerPoly.push(p);\r\n                    upperPoly.push(p);\r\n                    if (lowerIndex !== 0){\r\n                        //upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.end());\r\n                        polygonAppend(upperPoly, poly,lowerIndex,poly.length);\r\n                    }\r\n                    //upperPoly.insert(upperPoly.end(), poly.begin(), poly.begin() + i + 1);\r\n                    polygonAppend(upperPoly, poly,0,i+1);\r\n                } else {\r\n                    if (i !== 0){\r\n                        //lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.end());\r\n                        polygonAppend(lowerPoly, poly,i,poly.length);\r\n                    }\r\n                    //lowerPoly.insert(lowerPoly.end(), poly.begin(), poly.begin() + upperIndex + 1);\r\n                    polygonAppend(lowerPoly, poly,0,upperIndex+1);\r\n                    lowerPoly.push(p);\r\n                    upperPoly.push(p);\r\n                    //upperPoly.insert(upperPoly.end(), poly.begin() + lowerIndex, poly.begin() + i + 1);\r\n                    polygonAppend(upperPoly, poly,lowerIndex,i+1);\r\n                }\r\n            } else {\r\n                // connect to the closest point within the triangle\r\n                //console.log(\"Case 2: Vertex(\"+i+\"), closestIndex(\"+closestIndex+\"), poly.size(\"+polygon.length+\")\\n\");\r\n\r\n                if (lowerIndex > upperIndex) {\r\n                    upperIndex += polygon.length;\r\n                }\r\n                closestDist = Number.MAX_VALUE;\r\n\r\n                if(upperIndex < lowerIndex){\r\n                    return result;\r\n                }\r\n\r\n                for (var j = lowerIndex; j <= upperIndex; ++j) {\r\n                    if (\r\n                        isLeftOn(polygonAt(poly, i - 1), polygonAt(poly, i), polygonAt(poly, j)) &&\r\n                        isRightOn(polygonAt(poly, i + 1), polygonAt(poly, i), polygonAt(poly, j))\r\n                    ) {\r\n                        d = sqdist(polygonAt(poly, i), polygonAt(poly, j));\r\n                        if (d < closestDist && polygonCanSee2(poly, i, j)) {\r\n                            closestDist = d;\r\n                            closestIndex = j % polygon.length;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (i < closestIndex) {\r\n                    polygonAppend(lowerPoly, poly,i,closestIndex+1);\r\n                    if (closestIndex !== 0){\r\n                        polygonAppend(upperPoly, poly,closestIndex,v.length);\r\n                    }\r\n                    polygonAppend(upperPoly, poly,0,i+1);\r\n                } else {\r\n                    if (i !== 0){\r\n                        polygonAppend(lowerPoly, poly,i,v.length);\r\n                    }\r\n                    polygonAppend(lowerPoly, poly,0,closestIndex+1);\r\n                    polygonAppend(upperPoly, poly,closestIndex,i+1);\r\n                }\r\n            }\r\n\r\n            // solve smallest poly first\r\n            if (lowerPoly.length < upperPoly.length) {\r\n                polygonQuickDecomp(lowerPoly,result,reflexVertices,steinerPoints,delta,maxlevel,level);\r\n                polygonQuickDecomp(upperPoly,result,reflexVertices,steinerPoints,delta,maxlevel,level);\r\n            } else {\r\n                polygonQuickDecomp(upperPoly,result,reflexVertices,steinerPoints,delta,maxlevel,level);\r\n                polygonQuickDecomp(lowerPoly,result,reflexVertices,steinerPoints,delta,maxlevel,level);\r\n            }\r\n\r\n            return result;\r\n        }\r\n    }\r\n    result.push(polygon);\r\n\r\n    return result;\r\n}\r\n\r\n/**\r\n * Remove collinear points in the polygon.\r\n * @method removeCollinearPoints\r\n * @param  {Number} [precision] The threshold angle to use when determining whether two edges are collinear. Use zero for finest precision.\r\n * @return {Number}           The number of points removed\r\n */\r\nfunction polygonRemoveCollinearPoints(polygon, precision){\r\n    var num = 0;\r\n    for(var i=polygon.length-1; polygon.length>3 && i>=0; --i){\r\n        if(collinear(polygonAt(polygon, i-1),polygonAt(polygon, i),polygonAt(polygon, i+1),precision)){\r\n            // Remove the middle point\r\n            polygon.splice(i%polygon.length,1);\r\n            num++;\r\n        }\r\n    }\r\n    return num;\r\n}\r\n\r\n/**\r\n * Remove duplicate points in the polygon.\r\n * @method removeDuplicatePoints\r\n * @param  {Number} [precision] The threshold to use when determining whether two points are the same. Use zero for best precision.\r\n */\r\nfunction polygonRemoveDuplicatePoints(polygon, precision){\r\n    for(var i=polygon.length-1; i>=1; --i){\r\n        var pi = polygon[i];\r\n        for(var j=i-1; j>=0; --j){\r\n            if(points_eq(pi, polygon[j], precision)){\r\n                polygon.splice(i,1);\r\n                continue;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Check if two scalars are equal\r\n * @static\r\n * @method eq\r\n * @param  {Number} a\r\n * @param  {Number} b\r\n * @param  {Number} [precision]\r\n * @return {Boolean}\r\n */\r\nfunction scalar_eq(a,b,precision){\r\n    precision = precision || 0;\r\n    return Math.abs(a-b) <= precision;\r\n}\r\n\r\n/**\r\n * Check if two points are equal\r\n * @static\r\n * @method points_eq\r\n * @param  {Array} a\r\n * @param  {Array} b\r\n * @param  {Number} [precision]\r\n * @return {Boolean}\r\n */\r\nfunction points_eq(a,b,precision){\r\n    return scalar_eq(a[0],b[0],precision) && scalar_eq(a[1],b[1],precision);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9waHlzaWNzL21hdHRlci1qcy9wb2x5LWRlY29tcC9pbmRleC5qcz81ZmQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWSxPQUFPO0FBQ25CLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQixXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksTUFBTTtBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWSxNQUFNO0FBQ2xCLFlBQVksT0FBTztBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQSxtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkIsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0IsT0FBTztBQUNoRCx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLGtMQUFrTDtBQUNsTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksUUFBUTtBQUNwQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBLGdDQUFnQyxlQUFlO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QixvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksTUFBTTtBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEO0FBQ2hELHFEQUFxRDtBQUNyRCxtREFBbUQ7QUFDbkQsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7OztBQUdBLDJCQUEyQixvQkFBb0I7QUFDL0MsOEtBQThLO0FBQzlLLHFJQUFxSTtBQUNySSxpRkFBaUY7QUFDakY7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLGlCQUFpQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwwQkFBMEI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBLCtCQUErQixNQUFNO0FBQ3JDO0FBQ0Esc0JBQXNCLE1BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWSxPQUFPO0FBQ25CLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BoeXNpY3MvbWF0dGVyLWpzL3BvbHktZGVjb21wL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgU3RlZmFuIEhlZG1hbiA8c2NodGVwcGVAZ21haWwuY29tPiAoaHR0cDovL3N0ZWZmZS5zZSlcclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIHYwLjMuMFxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBkZWNvbXA6IHBvbHlnb25EZWNvbXAsXHJcbiAgICBxdWlja0RlY29tcDogcG9seWdvblF1aWNrRGVjb21wLFxyXG4gICAgaXNTaW1wbGU6IHBvbHlnb25Jc1NpbXBsZSxcclxuICAgIHJlbW92ZUNvbGxpbmVhclBvaW50czogcG9seWdvblJlbW92ZUNvbGxpbmVhclBvaW50cyxcclxuICAgIHJlbW92ZUR1cGxpY2F0ZVBvaW50czogcG9seWdvblJlbW92ZUR1cGxpY2F0ZVBvaW50cyxcclxuICAgIG1ha2VDQ1c6IHBvbHlnb25NYWtlQ0NXXHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIGxpbmVzLlxyXG4gKiBAc3RhdGljXHJcbiAqIEBtZXRob2QgbGluZUludFxyXG4gKiBAcGFyYW0gIHtBcnJheX0gIGwxICAgICAgICAgIExpbmUgdmVjdG9yIDFcclxuICogQHBhcmFtICB7QXJyYXl9ICBsMiAgICAgICAgICBMaW5lIHZlY3RvciAyXHJcbiAqIEBwYXJhbSAge051bWJlcn0gcHJlY2lzaW9uICAgUHJlY2lzaW9uIHRvIHVzZSB3aGVuIGNoZWNraW5nIGlmIHRoZSBsaW5lcyBhcmUgcGFyYWxsZWxcclxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBUaGUgaW50ZXJzZWN0aW9uIHBvaW50LlxyXG4gKi9cclxuZnVuY3Rpb24gbGluZUludChsMSxsMixwcmVjaXNpb24pe1xyXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDA7XHJcbiAgICB2YXIgaSA9IFswLDBdOyAvLyBwb2ludFxyXG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzIsIGRldDsgLy8gc2NhbGFyc1xyXG4gICAgYTEgPSBsMVsxXVsxXSAtIGwxWzBdWzFdO1xyXG4gICAgYjEgPSBsMVswXVswXSAtIGwxWzFdWzBdO1xyXG4gICAgYzEgPSBhMSAqIGwxWzBdWzBdICsgYjEgKiBsMVswXVsxXTtcclxuICAgIGEyID0gbDJbMV1bMV0gLSBsMlswXVsxXTtcclxuICAgIGIyID0gbDJbMF1bMF0gLSBsMlsxXVswXTtcclxuICAgIGMyID0gYTIgKiBsMlswXVswXSArIGIyICogbDJbMF1bMV07XHJcbiAgICBkZXQgPSBhMSAqIGIyIC0gYTIqYjE7XHJcbiAgICBpZiAoIXNjYWxhcl9lcShkZXQsIDAsIHByZWNpc2lvbikpIHsgLy8gbGluZXMgYXJlIG5vdCBwYXJhbGxlbFxyXG4gICAgICAgIGlbMF0gPSAoYjIgKiBjMSAtIGIxICogYzIpIC8gZGV0O1xyXG4gICAgICAgIGlbMV0gPSAoYTEgKiBjMiAtIGEyICogYzEpIC8gZGV0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIGxpbmUgc2VnbWVudHMgaW50ZXJzZWN0cy5cclxuICogQG1ldGhvZCBzZWdtZW50c0ludGVyc2VjdFxyXG4gKiBAcGFyYW0ge0FycmF5fSBwMSBUaGUgc3RhcnQgdmVydGV4IG9mIHRoZSBmaXJzdCBsaW5lIHNlZ21lbnQuXHJcbiAqIEBwYXJhbSB7QXJyYXl9IHAyIFRoZSBlbmQgdmVydGV4IG9mIHRoZSBmaXJzdCBsaW5lIHNlZ21lbnQuXHJcbiAqIEBwYXJhbSB7QXJyYXl9IHExIFRoZSBzdGFydCB2ZXJ0ZXggb2YgdGhlIHNlY29uZCBsaW5lIHNlZ21lbnQuXHJcbiAqIEBwYXJhbSB7QXJyYXl9IHEyIFRoZSBlbmQgdmVydGV4IG9mIHRoZSBzZWNvbmQgbGluZSBzZWdtZW50LlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoZSB0d28gbGluZSBzZWdtZW50cyBpbnRlcnNlY3RcclxuICovXHJcbmZ1bmN0aW9uIGxpbmVTZWdtZW50c0ludGVyc2VjdChwMSwgcDIsIHExLCBxMil7XHJcblx0dmFyIGR4ID0gcDJbMF0gLSBwMVswXTtcclxuXHR2YXIgZHkgPSBwMlsxXSAtIHAxWzFdO1xyXG5cdHZhciBkYSA9IHEyWzBdIC0gcTFbMF07XHJcblx0dmFyIGRiID0gcTJbMV0gLSBxMVsxXTtcclxuXHJcblx0Ly8gc2VnbWVudHMgYXJlIHBhcmFsbGVsXHJcblx0aWYoKGRhKmR5IC0gZGIqZHgpID09PSAwKXtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHZhciBzID0gKGR4ICogKHExWzFdIC0gcDFbMV0pICsgZHkgKiAocDFbMF0gLSBxMVswXSkpIC8gKGRhICogZHkgLSBkYiAqIGR4KTtcclxuXHR2YXIgdCA9IChkYSAqIChwMVsxXSAtIHExWzFdKSArIGRiICogKHExWzBdIC0gcDFbMF0pKSAvIChkYiAqIGR4IC0gZGEgKiBkeSk7XHJcblxyXG5cdHJldHVybiAocz49MCAmJiBzPD0xICYmIHQ+PTAgJiYgdDw9MSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZSBzcGFubmVkIGJ5IHRoZSB0aHJlZSBnaXZlbiBwb2ludHMuIE5vdGUgdGhhdCB0aGUgYXJlYSB3aWxsIGJlIG5lZ2F0aXZlIGlmIHRoZSBwb2ludHMgYXJlIG5vdCBnaXZlbiBpbiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cclxuICogQHN0YXRpY1xyXG4gKiBAbWV0aG9kIGFyZWFcclxuICogQHBhcmFtICB7QXJyYXl9IGFcclxuICogQHBhcmFtICB7QXJyYXl9IGJcclxuICogQHBhcmFtICB7QXJyYXl9IGNcclxuICogQHJldHVybiB7TnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gdHJpYW5nbGVBcmVhKGEsYixjKXtcclxuICAgIHJldHVybiAoKChiWzBdIC0gYVswXSkqKGNbMV0gLSBhWzFdKSktKChjWzBdIC0gYVswXSkqKGJbMV0gLSBhWzFdKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0xlZnQoYSxiLGMpe1xyXG4gICAgcmV0dXJuIHRyaWFuZ2xlQXJlYShhLGIsYykgPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0xlZnRPbihhLGIsYykge1xyXG4gICAgcmV0dXJuIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSA+PSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JpZ2h0KGEsYixjKSB7XHJcbiAgICByZXR1cm4gdHJpYW5nbGVBcmVhKGEsIGIsIGMpIDwgMDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNSaWdodE9uKGEsYixjKSB7XHJcbiAgICByZXR1cm4gdHJpYW5nbGVBcmVhKGEsIGIsIGMpIDw9IDA7XHJcbn1cclxuXHJcbnZhciB0bXBQb2ludDEgPSBbXSxcclxuICAgIHRtcFBvaW50MiA9IFtdO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHRocmVlIHBvaW50cyBhcmUgY29sbGluZWFyXHJcbiAqIEBtZXRob2QgY29sbGluZWFyXHJcbiAqIEBwYXJhbSAge0FycmF5fSBhXHJcbiAqIEBwYXJhbSAge0FycmF5fSBiXHJcbiAqIEBwYXJhbSAge0FycmF5fSBjXHJcbiAqIEBwYXJhbSAge051bWJlcn0gW3RocmVzaG9sZEFuZ2xlPTBdIFRocmVzaG9sZCBhbmdsZSB0byB1c2Ugd2hlbiBjb21wYXJpbmcgdGhlIHZlY3RvcnMuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGlmIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSByZXN1bHRpbmcgdmVjdG9ycyBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVXNlIHplcm8gZm9yIG1heCBwcmVjaXNpb24uXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsaW5lYXIoYSxiLGMsdGhyZXNob2xkQW5nbGUpIHtcclxuICAgIGlmKCF0aHJlc2hvbGRBbmdsZSl7XHJcbiAgICAgICAgcmV0dXJuIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSA9PT0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGFiID0gdG1wUG9pbnQxLFxyXG4gICAgICAgICAgICBiYyA9IHRtcFBvaW50MjtcclxuXHJcbiAgICAgICAgYWJbMF0gPSBiWzBdLWFbMF07XHJcbiAgICAgICAgYWJbMV0gPSBiWzFdLWFbMV07XHJcbiAgICAgICAgYmNbMF0gPSBjWzBdLWJbMF07XHJcbiAgICAgICAgYmNbMV0gPSBjWzFdLWJbMV07XHJcblxyXG4gICAgICAgIHZhciBkb3QgPSBhYlswXSpiY1swXSArIGFiWzFdKmJjWzFdLFxyXG4gICAgICAgICAgICBtYWdBID0gTWF0aC5zcXJ0KGFiWzBdKmFiWzBdICsgYWJbMV0qYWJbMV0pLFxyXG4gICAgICAgICAgICBtYWdCID0gTWF0aC5zcXJ0KGJjWzBdKmJjWzBdICsgYmNbMV0qYmNbMV0pLFxyXG4gICAgICAgICAgICBhbmdsZSA9IE1hdGguYWNvcyhkb3QvKG1hZ0EqbWFnQikpO1xyXG4gICAgICAgIHJldHVybiBhbmdsZSA8IHRocmVzaG9sZEFuZ2xlO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzcWRpc3QoYSxiKXtcclxuICAgIHZhciBkeCA9IGJbMF0gLSBhWzBdO1xyXG4gICAgdmFyIGR5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSB2ZXJ0ZXggYXQgcG9zaXRpb24gaS4gSXQgZG9lcyBub3QgbWF0dGVyIGlmIGkgaXMgb3V0IG9mIGJvdW5kcywgdGhpcyBmdW5jdGlvbiB3aWxsIGp1c3QgY3ljbGUuXHJcbiAqIEBtZXRob2QgYXRcclxuICogQHBhcmFtICB7TnVtYmVyfSBpXHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbkF0KHBvbHlnb24sIGkpe1xyXG4gICAgdmFyIHMgPSBwb2x5Z29uLmxlbmd0aDtcclxuICAgIHJldHVybiBwb2x5Z29uW2kgPCAwID8gaSAlIHMgKyBzIDogaSAlIHNdO1xyXG59XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIHBvbHlnb24gZGF0YVxyXG4gKiBAbWV0aG9kIGNsZWFyXHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbkNsZWFyKHBvbHlnb24pe1xyXG4gICAgcG9seWdvbi5sZW5ndGggPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwZW5kIHBvaW50cyBcImZyb21cIiB0byBcInRvXCItMSBmcm9tIGFuIG90aGVyIHBvbHlnb24gXCJwb2x5XCIgb250byB0aGlzIG9uZS5cclxuICogQG1ldGhvZCBhcHBlbmRcclxuICogQHBhcmFtIHtQb2x5Z29ufSBwb2x5IFRoZSBwb2x5Z29uIHRvIGdldCBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtOdW1iZXJ9ICBmcm9tIFRoZSB2ZXJ0ZXggaW5kZXggaW4gXCJwb2x5XCIuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSAgdG8gVGhlIGVuZCB2ZXJ0ZXggaW5kZXggaW4gXCJwb2x5XCIuIE5vdGUgdGhhdCB0aGlzIHZlcnRleCBpcyBOT1QgaW5jbHVkZWQgd2hlbiBhcHBlbmRpbmcuXHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbkFwcGVuZChwb2x5Z29uLCBwb2x5LCBmcm9tLCB0byl7XHJcbiAgICBmb3IodmFyIGk9ZnJvbTsgaTx0bzsgaSsrKXtcclxuICAgICAgICBwb2x5Z29uLnB1c2gocG9seVtpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgcG9seWdvbiB2ZXJ0aWNlcyBhcmUgb3JkZXJlZCBjb3VudGVyLWNsb2Nrd2lzZS5cclxuICogQG1ldGhvZCBtYWtlQ0NXXHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uTWFrZUNDVyhwb2x5Z29uKXtcclxuICAgIHZhciBiciA9IDAsXHJcbiAgICAgICAgdiA9IHBvbHlnb247XHJcblxyXG4gICAgLy8gZmluZCBib3R0b20gcmlnaHQgcG9pbnRcclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcG9seWdvbi5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGlmICh2W2ldWzFdIDwgdlticl1bMV0gfHwgKHZbaV1bMV0gPT09IHZbYnJdWzFdICYmIHZbaV1bMF0gPiB2W2JyXVswXSkpIHtcclxuICAgICAgICAgICAgYnIgPSBpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyByZXZlcnNlIHBvbHkgaWYgY2xvY2t3aXNlXHJcbiAgICBpZiAoIWlzTGVmdChwb2x5Z29uQXQocG9seWdvbiwgYnIgLSAxKSwgcG9seWdvbkF0KHBvbHlnb24sIGJyKSwgcG9seWdvbkF0KHBvbHlnb24sIGJyICsgMSkpKSB7XHJcbiAgICAgICAgcG9seWdvblJldmVyc2UocG9seWdvbik7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldmVyc2UgdGhlIHZlcnRpY2VzIGluIHRoZSBwb2x5Z29uXHJcbiAqIEBtZXRob2QgcmV2ZXJzZVxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvblJldmVyc2UocG9seWdvbil7XHJcbiAgICB2YXIgdG1wID0gW107XHJcbiAgICB2YXIgTiA9IHBvbHlnb24ubGVuZ3RoO1xyXG4gICAgZm9yKHZhciBpPTA7IGkhPT1OOyBpKyspe1xyXG4gICAgICAgIHRtcC5wdXNoKHBvbHlnb24ucG9wKCkpO1xyXG4gICAgfVxyXG4gICAgZm9yKHZhciBpPTA7IGkhPT1OOyBpKyspe1xyXG5cdFx0cG9seWdvbltpXSA9IHRtcFtpXTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgcG9pbnQgaW4gdGhlIHBvbHlnb24gaXMgYSByZWZsZXggcG9pbnRcclxuICogQG1ldGhvZCBpc1JlZmxleFxyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICBpXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uSXNSZWZsZXgocG9seWdvbiwgaSl7XHJcbiAgICByZXR1cm4gaXNSaWdodChwb2x5Z29uQXQocG9seWdvbiwgaSAtIDEpLCBwb2x5Z29uQXQocG9seWdvbiwgaSksIHBvbHlnb25BdChwb2x5Z29uLCBpICsgMSkpO1xyXG59XHJcblxyXG52YXIgdG1wTGluZTE9W10sXHJcbiAgICB0bXBMaW5lMj1bXTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0d28gdmVydGljZXMgaW4gdGhlIHBvbHlnb24gY2FuIHNlZSBlYWNoIG90aGVyXHJcbiAqIEBtZXRob2QgY2FuU2VlXHJcbiAqIEBwYXJhbSAge051bWJlcn0gYSBWZXJ0ZXggaW5kZXggMVxyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGIgVmVydGV4IGluZGV4IDJcclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHBvbHlnb25DYW5TZWUocG9seWdvbiwgYSxiKSB7XHJcbiAgICB2YXIgcCwgZGlzdCwgbDE9dG1wTGluZTEsIGwyPXRtcExpbmUyO1xyXG5cclxuICAgIGlmIChpc0xlZnRPbihwb2x5Z29uQXQocG9seWdvbiwgYSArIDEpLCBwb2x5Z29uQXQocG9seWdvbiwgYSksIHBvbHlnb25BdChwb2x5Z29uLCBiKSkgJiYgaXNSaWdodE9uKHBvbHlnb25BdChwb2x5Z29uLCBhIC0gMSksIHBvbHlnb25BdChwb2x5Z29uLCBhKSwgcG9seWdvbkF0KHBvbHlnb24sIGIpKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGRpc3QgPSBzcWRpc3QocG9seWdvbkF0KHBvbHlnb24sIGEpLCBwb2x5Z29uQXQocG9seWdvbiwgYikpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgIT09IHBvbHlnb24ubGVuZ3RoOyArK2kpIHsgLy8gZm9yIGVhY2ggZWRnZVxyXG4gICAgICAgIGlmICgoaSArIDEpICUgcG9seWdvbi5sZW5ndGggPT09IGEgfHwgaSA9PT0gYSl7IC8vIGlnbm9yZSBpbmNpZGVudCBlZGdlc1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTGVmdE9uKHBvbHlnb25BdChwb2x5Z29uLCBhKSwgcG9seWdvbkF0KHBvbHlnb24sIGIpLCBwb2x5Z29uQXQocG9seWdvbiwgaSArIDEpKSAmJiBpc1JpZ2h0T24ocG9seWdvbkF0KHBvbHlnb24sIGEpLCBwb2x5Z29uQXQocG9seWdvbiwgYiksIHBvbHlnb25BdChwb2x5Z29uLCBpKSkpIHsgLy8gaWYgZGlhZyBpbnRlcnNlY3RzIGFuIGVkZ2VcclxuICAgICAgICAgICAgbDFbMF0gPSBwb2x5Z29uQXQocG9seWdvbiwgYSk7XHJcbiAgICAgICAgICAgIGwxWzFdID0gcG9seWdvbkF0KHBvbHlnb24sIGIpO1xyXG4gICAgICAgICAgICBsMlswXSA9IHBvbHlnb25BdChwb2x5Z29uLCBpKTtcclxuICAgICAgICAgICAgbDJbMV0gPSBwb2x5Z29uQXQocG9seWdvbiwgaSArIDEpO1xyXG4gICAgICAgICAgICBwID0gbGluZUludChsMSxsMik7XHJcbiAgICAgICAgICAgIGlmIChzcWRpc3QocG9seWdvbkF0KHBvbHlnb24sIGEpLCBwKSA8IGRpc3QpIHsgLy8gaWYgZWRnZSBpcyBibG9ja2luZyB2aXNpYmlsaXR5IHRvIGJcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHR3byB2ZXJ0aWNlcyBpbiB0aGUgcG9seWdvbiBjYW4gc2VlIGVhY2ggb3RoZXJcclxuICogQG1ldGhvZCBjYW5TZWUyXHJcbiAqIEBwYXJhbSAge051bWJlcn0gYSBWZXJ0ZXggaW5kZXggMVxyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGIgVmVydGV4IGluZGV4IDJcclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHBvbHlnb25DYW5TZWUyKHBvbHlnb24sIGEsYikge1xyXG4gICAgLy8gZm9yIGVhY2ggZWRnZVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgIT09IHBvbHlnb24ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBpZ25vcmUgaW5jaWRlbnQgZWRnZXNcclxuICAgICAgICBpZiAoaSA9PT0gYSB8fCBpID09PSBiIHx8IChpICsgMSkgJSBwb2x5Z29uLmxlbmd0aCA9PT0gYSB8fCAoaSArIDEpICUgcG9seWdvbi5sZW5ndGggPT09IGIpe1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIGxpbmVTZWdtZW50c0ludGVyc2VjdChwb2x5Z29uQXQocG9seWdvbiwgYSksIHBvbHlnb25BdChwb2x5Z29uLCBiKSwgcG9seWdvbkF0KHBvbHlnb24sIGkpLCBwb2x5Z29uQXQocG9seWdvbiwgaSsxKSkgKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgcG9seWdvbiBmcm9tIHZlcnRleCBpIHRvIHZlcnRleCBqLlxyXG4gKiBAbWV0aG9kIGNvcHlcclxuICogQHBhcmFtICB7TnVtYmVyfSBpXHJcbiAqIEBwYXJhbSAge051bWJlcn0galxyXG4gKiBAcGFyYW0gIHtQb2x5Z29ufSBbdGFyZ2V0UG9seV0gICBPcHRpb25hbCB0YXJnZXQgcG9seWdvbiB0byBzYXZlIGluLlxyXG4gKiBAcmV0dXJuIHtQb2x5Z29ufSAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGNvcHkuXHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uQ29weShwb2x5Z29uLCBpLGosdGFyZ2V0UG9seSl7XHJcbiAgICB2YXIgcCA9IHRhcmdldFBvbHkgfHwgW107XHJcbiAgICBwb2x5Z29uQ2xlYXIocCk7XHJcbiAgICBpZiAoaSA8IGopIHtcclxuICAgICAgICAvLyBJbnNlcnQgYWxsIHZlcnRpY2VzIGZyb20gaSB0byBqXHJcbiAgICAgICAgZm9yKHZhciBrPWk7IGs8PWo7IGsrKyl7XHJcbiAgICAgICAgICAgIHAucHVzaChwb2x5Z29uW2tdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gSW5zZXJ0IHZlcnRpY2VzIDAgdG8galxyXG4gICAgICAgIGZvcih2YXIgaz0wOyBrPD1qOyBrKyspe1xyXG4gICAgICAgICAgICBwLnB1c2gocG9seWdvbltrXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbnNlcnQgdmVydGljZXMgaSB0byBlbmRcclxuICAgICAgICBmb3IodmFyIGs9aTsgazxwb2x5Z29uLmxlbmd0aDsgaysrKXtcclxuICAgICAgICAgICAgcC5wdXNoKHBvbHlnb25ba10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlY29tcG9zZXMgdGhlIHBvbHlnb24gaW50byBjb252ZXggcGllY2VzLiBSZXR1cm5zIGEgbGlzdCBvZiBlZGdlcyBbW3AxLHAyXSxbcDIscDNdLC4uLl0gdGhhdCBjdXRzIHRoZSBwb2x5Z29uLlxyXG4gKiBOb3RlIHRoYXQgdGhpcyBhbGdvcml0aG0gaGFzIGNvbXBsZXhpdHkgTyhOXjQpIGFuZCB3aWxsIGJlIHZlcnkgc2xvdyBmb3IgcG9seWdvbnMgd2l0aCBtYW55IHZlcnRpY2VzLlxyXG4gKiBAbWV0aG9kIGdldEN1dEVkZ2VzXHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbkdldEN1dEVkZ2VzKHBvbHlnb24pIHtcclxuICAgIHZhciBtaW49W10sIHRtcDE9W10sIHRtcDI9W10sIHRtcFBvbHkgPSBbXTtcclxuICAgIHZhciBuRGlhZ3MgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGlmIChwb2x5Z29uSXNSZWZsZXgocG9seWdvbiwgaSkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2x5Z29uLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkNhblNlZShwb2x5Z29uLCBpLCBqKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwb2x5Z29uR2V0Q3V0RWRnZXMocG9seWdvbkNvcHkocG9seWdvbiwgaSwgaiwgdG1wUG9seSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBwb2x5Z29uR2V0Q3V0RWRnZXMocG9seWdvbkNvcHkocG9seWdvbiwgaiwgaSwgdG1wUG9seSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDsgazx0bXAyLmxlbmd0aDsgaysrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wMS5wdXNoKHRtcDJba10pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRtcDEubGVuZ3RoIDwgbkRpYWdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IHRtcDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5EaWFncyA9IHRtcDEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4ucHVzaChbcG9seWdvbkF0KHBvbHlnb24sIGkpLCBwb2x5Z29uQXQocG9seWdvbiwgaildKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlY29tcG9zZXMgdGhlIHBvbHlnb24gaW50byBvbmUgb3IgbW9yZSBjb252ZXggc3ViLVBvbHlnb25zLlxyXG4gKiBAbWV0aG9kIGRlY29tcFxyXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb3IgUG9seWdvbiBvYmplY3RzLlxyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbkRlY29tcChwb2x5Z29uKXtcclxuICAgIHZhciBlZGdlcyA9IHBvbHlnb25HZXRDdXRFZGdlcyhwb2x5Z29uKTtcclxuICAgIGlmKGVkZ2VzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHJldHVybiBwb2x5Z29uU2xpY2UocG9seWdvbiwgZWRnZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gW3BvbHlnb25dO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2xpY2VzIHRoZSBwb2x5Z29uIGdpdmVuIG9uZSBvciBtb3JlIGN1dCBlZGdlcy4gSWYgZ2l2ZW4gb25lLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHR3byBwb2x5Z29ucyAoZmFsc2Ugb24gZmFpbHVyZSkuIElmIG1hbnksIGFuIGFycmF5IG9mIHBvbHlnb25zLlxyXG4gKiBAbWV0aG9kIHNsaWNlXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGN1dEVkZ2VzIEEgbGlzdCBvZiBlZGdlcywgYXMgcmV0dXJuZWQgYnkgLmdldEN1dEVkZ2VzKClcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uU2xpY2UocG9seWdvbiwgY3V0RWRnZXMpe1xyXG4gICAgaWYoY3V0RWRnZXMubGVuZ3RoID09PSAwKXtcclxuXHRcdHJldHVybiBbcG9seWdvbl07XHJcbiAgICB9XHJcbiAgICBpZihjdXRFZGdlcyBpbnN0YW5jZW9mIEFycmF5ICYmIGN1dEVkZ2VzLmxlbmd0aCAmJiBjdXRFZGdlc1swXSBpbnN0YW5jZW9mIEFycmF5ICYmIGN1dEVkZ2VzWzBdLmxlbmd0aD09PTIgJiYgY3V0RWRnZXNbMF1bMF0gaW5zdGFuY2VvZiBBcnJheSl7XHJcblxyXG4gICAgICAgIHZhciBwb2x5cyA9IFtwb2x5Z29uXTtcclxuXHJcbiAgICAgICAgZm9yKHZhciBpPTA7IGk8Y3V0RWRnZXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICB2YXIgY3V0RWRnZSA9IGN1dEVkZ2VzW2ldO1xyXG4gICAgICAgICAgICAvLyBDdXQgYWxsIHBvbHlzXHJcbiAgICAgICAgICAgIGZvcih2YXIgaj0wOyBqPHBvbHlzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgICAgICAgIHZhciBwb2x5ID0gcG9seXNbal07XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcG9seWdvblNsaWNlKHBvbHksIGN1dEVkZ2UpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCBwb2x5ISBDdXQgYW5kIHF1aXRcclxuICAgICAgICAgICAgICAgICAgICBwb2x5cy5zcGxpY2UoaiwxKTtcclxuICAgICAgICAgICAgICAgICAgICBwb2x5cy5wdXNoKHJlc3VsdFswXSxyZXN1bHRbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9seXM7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBXYXMgZ2l2ZW4gb25lIGVkZ2VcclxuICAgICAgICB2YXIgY3V0RWRnZSA9IGN1dEVkZ2VzO1xyXG4gICAgICAgIHZhciBpID0gcG9seWdvbi5pbmRleE9mKGN1dEVkZ2VbMF0pO1xyXG4gICAgICAgIHZhciBqID0gcG9seWdvbi5pbmRleE9mKGN1dEVkZ2VbMV0pO1xyXG5cclxuICAgICAgICBpZihpICE9PSAtMSAmJiBqICE9PSAtMSl7XHJcbiAgICAgICAgICAgIHJldHVybiBbcG9seWdvbkNvcHkocG9seWdvbiwgaSxqKSxcclxuICAgICAgICAgICAgICAgICAgICBwb2x5Z29uQ29weShwb2x5Z29uLCBqLGkpXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHRoYXQgdGhlIGxpbmUgc2VnbWVudHMgb2YgdGhpcyBwb2x5Z29uIGRvIG5vdCBpbnRlcnNlY3QgZWFjaCBvdGhlci5cclxuICogQG1ldGhvZCBpc1NpbXBsZVxyXG4gKiBAcGFyYW0gIHtBcnJheX0gcGF0aCBBbiBhcnJheSBvZiB2ZXJ0aWNlcyBlLmcuIFtbMCwwXSxbMCwxXSwuLi5dXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqIEB0b2RvIFNob3VsZCBpdCBjaGVjayBhbGwgc2VnbWVudHMgd2l0aCBhbGwgb3RoZXJzP1xyXG4gKi9cclxuZnVuY3Rpb24gcG9seWdvbklzU2ltcGxlKHBvbHlnb24pe1xyXG4gICAgdmFyIHBhdGggPSBwb2x5Z29uLCBpO1xyXG4gICAgLy8gQ2hlY2tcclxuICAgIGZvcihpPTA7IGk8cGF0aC5sZW5ndGgtMTsgaSsrKXtcclxuICAgICAgICBmb3IodmFyIGo9MDsgajxpLTE7IGorKyl7XHJcbiAgICAgICAgICAgIGlmKGxpbmVTZWdtZW50c0ludGVyc2VjdChwYXRoW2ldLCBwYXRoW2krMV0sIHBhdGhbal0sIHBhdGhbaisxXSApKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayB0aGUgc2VnbWVudCBiZXR3ZWVuIHRoZSBsYXN0IGFuZCB0aGUgZmlyc3QgcG9pbnQgdG8gYWxsIG90aGVyc1xyXG4gICAgZm9yKGk9MTsgaTxwYXRoLmxlbmd0aC0yOyBpKyspe1xyXG4gICAgICAgIGlmKGxpbmVTZWdtZW50c0ludGVyc2VjdChwYXRoWzBdLCBwYXRoW3BhdGgubGVuZ3RoLTFdLCBwYXRoW2ldLCBwYXRoW2krMV0gKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEludGVyc2VjdGlvblBvaW50KHAxLCBwMiwgcTEsIHEyLCBkZWx0YSl7XHJcblx0ZGVsdGEgPSBkZWx0YSB8fCAwO1xyXG5cdHZhciBhMSA9IHAyWzFdIC0gcDFbMV07XHJcblx0dmFyIGIxID0gcDFbMF0gLSBwMlswXTtcclxuXHR2YXIgYzEgPSAoYTEgKiBwMVswXSkgKyAoYjEgKiBwMVsxXSk7XHJcblx0dmFyIGEyID0gcTJbMV0gLSBxMVsxXTtcclxuXHR2YXIgYjIgPSBxMVswXSAtIHEyWzBdO1xyXG5cdHZhciBjMiA9IChhMiAqIHExWzBdKSArIChiMiAqIHExWzFdKTtcclxuXHR2YXIgZGV0ID0gKGExICogYjIpIC0gKGEyICogYjEpO1xyXG5cclxuXHRpZighc2NhbGFyX2VxKGRldCwwLGRlbHRhKSl7XHJcblx0XHRyZXR1cm4gWygoYjIgKiBjMSkgLSAoYjEgKiBjMikpIC8gZGV0LCAoKGExICogYzIpIC0gKGEyICogYzEpKSAvIGRldF07XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiBbMCwwXTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFF1aWNrbHkgZGVjb21wb3NlIHRoZSBQb2x5Z29uIGludG8gY29udmV4IHN1Yi1wb2x5Z29ucy5cclxuICogQG1ldGhvZCBxdWlja0RlY29tcFxyXG4gKiBAcGFyYW0gIHtBcnJheX0gcmVzdWx0XHJcbiAqIEBwYXJhbSAge0FycmF5fSBbcmVmbGV4VmVydGljZXNdXHJcbiAqIEBwYXJhbSAge0FycmF5fSBbc3RlaW5lclBvaW50c11cclxuICogQHBhcmFtICB7TnVtYmVyfSBbZGVsdGFdXHJcbiAqIEBwYXJhbSAge051bWJlcn0gW21heGxldmVsXVxyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IFtsZXZlbF1cclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uUXVpY2tEZWNvbXAocG9seWdvbiwgcmVzdWx0LHJlZmxleFZlcnRpY2VzLHN0ZWluZXJQb2ludHMsZGVsdGEsbWF4bGV2ZWwsbGV2ZWwpe1xyXG4gICAgbWF4bGV2ZWwgPSBtYXhsZXZlbCB8fCAxMDA7XHJcbiAgICBsZXZlbCA9IGxldmVsIHx8IDA7XHJcbiAgICBkZWx0YSA9IGRlbHRhIHx8IDI1O1xyXG4gICAgcmVzdWx0ID0gdHlwZW9mKHJlc3VsdCkhPT1cInVuZGVmaW5lZFwiID8gcmVzdWx0IDogW107XHJcbiAgICByZWZsZXhWZXJ0aWNlcyA9IHJlZmxleFZlcnRpY2VzIHx8IFtdO1xyXG4gICAgc3RlaW5lclBvaW50cyA9IHN0ZWluZXJQb2ludHMgfHwgW107XHJcblxyXG4gICAgdmFyIHVwcGVySW50PVswLDBdLCBsb3dlckludD1bMCwwXSwgcD1bMCwwXTsgLy8gUG9pbnRzXHJcbiAgICB2YXIgdXBwZXJEaXN0PTAsIGxvd2VyRGlzdD0wLCBkPTAsIGNsb3Nlc3REaXN0PTA7IC8vIHNjYWxhcnNcclxuICAgIHZhciB1cHBlckluZGV4PTAsIGxvd2VySW5kZXg9MCwgY2xvc2VzdEluZGV4PTA7IC8vIEludGVnZXJzXHJcbiAgICB2YXIgbG93ZXJQb2x5PVtdLCB1cHBlclBvbHk9W107IC8vIHBvbHlnb25zXHJcbiAgICB2YXIgcG9seSA9IHBvbHlnb24sXHJcbiAgICAgICAgdiA9IHBvbHlnb247XHJcblxyXG4gICAgaWYodi5sZW5ndGggPCAzKXtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbGV2ZWwrKztcclxuICAgIGlmKGxldmVsID4gbWF4bGV2ZWwpe1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcInF1aWNrRGVjb21wOiBtYXggbGV2ZWwgKFwiK21heGxldmVsK1wiKSByZWFjaGVkLlwiKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGlmIChwb2x5Z29uSXNSZWZsZXgocG9seSwgaSkpIHtcclxuICAgICAgICAgICAgcmVmbGV4VmVydGljZXMucHVzaChwb2x5W2ldKTtcclxuICAgICAgICAgICAgdXBwZXJEaXN0ID0gbG93ZXJEaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvbHlnb24ubGVuZ3RoOyArK2opIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0xlZnQocG9seWdvbkF0KHBvbHksIGkgLSAxKSwgcG9seWdvbkF0KHBvbHksIGkpLCBwb2x5Z29uQXQocG9seSwgaikpICYmIGlzUmlnaHRPbihwb2x5Z29uQXQocG9seSwgaSAtIDEpLCBwb2x5Z29uQXQocG9seSwgaSksIHBvbHlnb25BdChwb2x5LCBqIC0gMSkpKSB7IC8vIGlmIGxpbmUgaW50ZXJzZWN0cyB3aXRoIGFuIGVkZ2VcclxuICAgICAgICAgICAgICAgICAgICBwID0gZ2V0SW50ZXJzZWN0aW9uUG9pbnQocG9seWdvbkF0KHBvbHksIGkgLSAxKSwgcG9seWdvbkF0KHBvbHksIGkpLCBwb2x5Z29uQXQocG9seSwgaiksIHBvbHlnb25BdChwb2x5LCBqIC0gMSkpOyAvLyBmaW5kIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSaWdodChwb2x5Z29uQXQocG9seSwgaSArIDEpLCBwb2x5Z29uQXQocG9seSwgaSksIHApKSB7IC8vIG1ha2Ugc3VyZSBpdCdzIGluc2lkZSB0aGUgcG9seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gc3FkaXN0KHBvbHlbaV0sIHApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IGxvd2VyRGlzdCkgeyAvLyBrZWVwIG9ubHkgdGhlIGNsb3Nlc3QgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckRpc3QgPSBkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJJbnQgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNMZWZ0KHBvbHlnb25BdChwb2x5LCBpICsgMSksIHBvbHlnb25BdChwb2x5LCBpKSwgcG9seWdvbkF0KHBvbHksIGogKyAxKSkgJiYgaXNSaWdodE9uKHBvbHlnb25BdChwb2x5LCBpICsgMSksIHBvbHlnb25BdChwb2x5LCBpKSwgcG9seWdvbkF0KHBvbHksIGopKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHAgPSBnZXRJbnRlcnNlY3Rpb25Qb2ludChwb2x5Z29uQXQocG9seSwgaSArIDEpLCBwb2x5Z29uQXQocG9seSwgaSksIHBvbHlnb25BdChwb2x5LCBqKSwgcG9seWdvbkF0KHBvbHksIGogKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGVmdChwb2x5Z29uQXQocG9seSwgaSAtIDEpLCBwb2x5Z29uQXQocG9seSwgaSksIHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzcWRpc3QocG9seVtpXSwgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgdXBwZXJEaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlckRpc3QgPSBkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJJbnQgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IGo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyB2ZXJ0aWNlcyB0byBjb25uZWN0IHRvLCBjaG9vc2UgYSBwb2ludCBpbiB0aGUgbWlkZGxlXHJcbiAgICAgICAgICAgIGlmIChsb3dlckluZGV4ID09PSAodXBwZXJJbmRleCArIDEpICUgcG9seWdvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJDYXNlIDE6IFZlcnRleChcIitpK1wiKSwgbG93ZXJJbmRleChcIitsb3dlckluZGV4K1wiKSwgdXBwZXJJbmRleChcIit1cHBlckluZGV4K1wiKSwgcG9seS5zaXplKFwiK3BvbHlnb24ubGVuZ3RoK1wiKVwiKTtcclxuICAgICAgICAgICAgICAgIHBbMF0gPSAobG93ZXJJbnRbMF0gKyB1cHBlckludFswXSkgLyAyO1xyXG4gICAgICAgICAgICAgICAgcFsxXSA9IChsb3dlckludFsxXSArIHVwcGVySW50WzFdKSAvIDI7XHJcbiAgICAgICAgICAgICAgICBzdGVpbmVyUG9pbnRzLnB1c2gocCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCB1cHBlckluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9sb3dlclBvbHkuaW5zZXJ0KGxvd2VyUG9seS5lbmQoKSwgcG9seS5iZWdpbigpICsgaSwgcG9seS5iZWdpbigpICsgdXBwZXJJbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQobG93ZXJQb2x5LCBwb2x5LCBpLCB1cHBlckluZGV4KzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvd2VyUG9seS5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwcGVyUG9seS5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3dlckluZGV4ICE9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cHBlclBvbHkuaW5zZXJ0KHVwcGVyUG9seS5lbmQoKSwgcG9seS5iZWdpbigpICsgbG93ZXJJbmRleCwgcG9seS5lbmQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQodXBwZXJQb2x5LCBwb2x5LGxvd2VySW5kZXgscG9seS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL3VwcGVyUG9seS5pbnNlcnQodXBwZXJQb2x5LmVuZCgpLCBwb2x5LmJlZ2luKCksIHBvbHkuYmVnaW4oKSArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBwb2x5Z29uQXBwZW5kKHVwcGVyUG9seSwgcG9seSwwLGkrMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb3dlclBvbHkuaW5zZXJ0KGxvd2VyUG9seS5lbmQoKSwgcG9seS5iZWdpbigpICsgaSwgcG9seS5lbmQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQobG93ZXJQb2x5LCBwb2x5LGkscG9seS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL2xvd2VyUG9seS5pbnNlcnQobG93ZXJQb2x5LmVuZCgpLCBwb2x5LmJlZ2luKCksIHBvbHkuYmVnaW4oKSArIHVwcGVySW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBwb2x5Z29uQXBwZW5kKGxvd2VyUG9seSwgcG9seSwwLHVwcGVySW5kZXgrMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG93ZXJQb2x5LnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBwZXJQb2x5LnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy91cHBlclBvbHkuaW5zZXJ0KHVwcGVyUG9seS5lbmQoKSwgcG9seS5iZWdpbigpICsgbG93ZXJJbmRleCwgcG9seS5iZWdpbigpICsgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQodXBwZXJQb2x5LCBwb2x5LGxvd2VySW5kZXgsaSsxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbm5lY3QgdG8gdGhlIGNsb3Nlc3QgcG9pbnQgd2l0aGluIHRoZSB0cmlhbmdsZVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkNhc2UgMjogVmVydGV4KFwiK2krXCIpLCBjbG9zZXN0SW5kZXgoXCIrY2xvc2VzdEluZGV4K1wiKSwgcG9seS5zaXplKFwiK3BvbHlnb24ubGVuZ3RoK1wiKVxcblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJJbmRleCA+IHVwcGVySW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cHBlckluZGV4ICs9IHBvbHlnb24ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2xvc2VzdERpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHVwcGVySW5kZXggPCBsb3dlckluZGV4KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBsb3dlckluZGV4OyBqIDw9IHVwcGVySW5kZXg7ICsraikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0T24ocG9seWdvbkF0KHBvbHksIGkgLSAxKSwgcG9seWdvbkF0KHBvbHksIGkpLCBwb2x5Z29uQXQocG9seSwgaikpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmlnaHRPbihwb2x5Z29uQXQocG9seSwgaSArIDEpLCBwb2x5Z29uQXQocG9seSwgaSksIHBvbHlnb25BdChwb2x5LCBqKSlcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHNxZGlzdChwb2x5Z29uQXQocG9seSwgaSksIHBvbHlnb25BdChwb2x5LCBqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgY2xvc2VzdERpc3QgJiYgcG9seWdvbkNhblNlZTIocG9seSwgaSwgaikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0ID0gZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RJbmRleCA9IGogJSBwb2x5Z29uLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGNsb3Nlc3RJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQobG93ZXJQb2x5LCBwb2x5LGksY2xvc2VzdEluZGV4KzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0SW5kZXggIT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2x5Z29uQXBwZW5kKHVwcGVyUG9seSwgcG9seSxjbG9zZXN0SW5kZXgsdi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2x5Z29uQXBwZW5kKHVwcGVyUG9seSwgcG9seSwwLGkrMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9seWdvbkFwcGVuZChsb3dlclBvbHksIHBvbHksaSx2Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQobG93ZXJQb2x5LCBwb2x5LDAsY2xvc2VzdEluZGV4KzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvbHlnb25BcHBlbmQodXBwZXJQb2x5LCBwb2x5LGNsb3Nlc3RJbmRleCxpKzEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzb2x2ZSBzbWFsbGVzdCBwb2x5IGZpcnN0XHJcbiAgICAgICAgICAgIGlmIChsb3dlclBvbHkubGVuZ3RoIDwgdXBwZXJQb2x5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9seWdvblF1aWNrRGVjb21wKGxvd2VyUG9seSxyZXN1bHQscmVmbGV4VmVydGljZXMsc3RlaW5lclBvaW50cyxkZWx0YSxtYXhsZXZlbCxsZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBwb2x5Z29uUXVpY2tEZWNvbXAodXBwZXJQb2x5LHJlc3VsdCxyZWZsZXhWZXJ0aWNlcyxzdGVpbmVyUG9pbnRzLGRlbHRhLG1heGxldmVsLGxldmVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBvbHlnb25RdWlja0RlY29tcCh1cHBlclBvbHkscmVzdWx0LHJlZmxleFZlcnRpY2VzLHN0ZWluZXJQb2ludHMsZGVsdGEsbWF4bGV2ZWwsbGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgcG9seWdvblF1aWNrRGVjb21wKGxvd2VyUG9seSxyZXN1bHQscmVmbGV4VmVydGljZXMsc3RlaW5lclBvaW50cyxkZWx0YSxtYXhsZXZlbCxsZXZlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnB1c2gocG9seWdvbik7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBjb2xsaW5lYXIgcG9pbnRzIGluIHRoZSBwb2x5Z29uLlxyXG4gKiBAbWV0aG9kIHJlbW92ZUNvbGxpbmVhclBvaW50c1xyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IFtwcmVjaXNpb25dIFRoZSB0aHJlc2hvbGQgYW5nbGUgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0d28gZWRnZXMgYXJlIGNvbGxpbmVhci4gVXNlIHplcm8gZm9yIGZpbmVzdCBwcmVjaXNpb24uXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgIFRoZSBudW1iZXIgb2YgcG9pbnRzIHJlbW92ZWRcclxuICovXHJcbmZ1bmN0aW9uIHBvbHlnb25SZW1vdmVDb2xsaW5lYXJQb2ludHMocG9seWdvbiwgcHJlY2lzaW9uKXtcclxuICAgIHZhciBudW0gPSAwO1xyXG4gICAgZm9yKHZhciBpPXBvbHlnb24ubGVuZ3RoLTE7IHBvbHlnb24ubGVuZ3RoPjMgJiYgaT49MDsgLS1pKXtcclxuICAgICAgICBpZihjb2xsaW5lYXIocG9seWdvbkF0KHBvbHlnb24sIGktMSkscG9seWdvbkF0KHBvbHlnb24sIGkpLHBvbHlnb25BdChwb2x5Z29uLCBpKzEpLHByZWNpc2lvbikpe1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1pZGRsZSBwb2ludFxyXG4gICAgICAgICAgICBwb2x5Z29uLnNwbGljZShpJXBvbHlnb24ubGVuZ3RoLDEpO1xyXG4gICAgICAgICAgICBudW0rKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtO1xyXG59XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGR1cGxpY2F0ZSBwb2ludHMgaW4gdGhlIHBvbHlnb24uXHJcbiAqIEBtZXRob2QgcmVtb3ZlRHVwbGljYXRlUG9pbnRzXHJcbiAqIEBwYXJhbSAge051bWJlcn0gW3ByZWNpc2lvbl0gVGhlIHRocmVzaG9sZCB0byB1c2Ugd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIHR3byBwb2ludHMgYXJlIHRoZSBzYW1lLiBVc2UgemVybyBmb3IgYmVzdCBwcmVjaXNpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBwb2x5Z29uUmVtb3ZlRHVwbGljYXRlUG9pbnRzKHBvbHlnb24sIHByZWNpc2lvbil7XHJcbiAgICBmb3IodmFyIGk9cG9seWdvbi5sZW5ndGgtMTsgaT49MTsgLS1pKXtcclxuICAgICAgICB2YXIgcGkgPSBwb2x5Z29uW2ldO1xyXG4gICAgICAgIGZvcih2YXIgaj1pLTE7IGo+PTA7IC0tail7XHJcbiAgICAgICAgICAgIGlmKHBvaW50c19lcShwaSwgcG9seWdvbltqXSwgcHJlY2lzaW9uKSl7XHJcbiAgICAgICAgICAgICAgICBwb2x5Z29uLnNwbGljZShpLDEpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0d28gc2NhbGFycyBhcmUgZXF1YWxcclxuICogQHN0YXRpY1xyXG4gKiBAbWV0aG9kIGVxXHJcbiAqIEBwYXJhbSAge051bWJlcn0gYVxyXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGJcclxuICogQHBhcmFtICB7TnVtYmVyfSBbcHJlY2lzaW9uXVxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gc2NhbGFyX2VxKGEsYixwcmVjaXNpb24pe1xyXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDA7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoYS1iKSA8PSBwcmVjaXNpb247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxyXG4gKiBAc3RhdGljXHJcbiAqIEBtZXRob2QgcG9pbnRzX2VxXHJcbiAqIEBwYXJhbSAge0FycmF5fSBhXHJcbiAqIEBwYXJhbSAge0FycmF5fSBiXHJcbiAqIEBwYXJhbSAge051bWJlcn0gW3ByZWNpc2lvbl1cclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHBvaW50c19lcShhLGIscHJlY2lzaW9uKXtcclxuICAgIHJldHVybiBzY2FsYXJfZXEoYVswXSxiWzBdLHByZWNpc2lvbikgJiYgc2NhbGFyX2VxKGFbMV0sYlsxXSxwcmVjaXNpb24pO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/physics/matter-js/poly-decomp/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/BasePlugin.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/plugins/BasePlugin.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* @author       Richard Davey <rich@photonstorm.com>\r\n* @copyright    2019 Photon Storm Ltd.\r\n* @license      {@link https://github.com/photonstorm/phaser3-plugin-template/blob/master/LICENSE|MIT License}\r\n*/\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Global Plugin is installed just once into the Game owned Plugin Manager.\r\n * It can listen for Game events and respond to them.\r\n *\r\n * @class BasePlugin\r\n * @memberof Phaser.Plugins\r\n * @constructor\r\n * @since 3.8.0\r\n *\r\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Plugin Manager.\r\n */\r\nvar BasePlugin = new Class({\r\n\r\n    initialize:\r\n\r\n    function BasePlugin (pluginManager)\r\n    {\r\n        /**\r\n         * A handy reference to the Plugin Manager that is responsible for this plugin.\r\n         * Can be used as a route to gain access to game systems and  events.\r\n         *\r\n         * @name Phaser.Plugins.BasePlugin#pluginManager\r\n         * @type {Phaser.Plugins.PluginManager}\r\n         * @protected\r\n         * @since 3.8.0\r\n         */\r\n        this.pluginManager = pluginManager;\r\n\r\n        /**\r\n         * A reference to the Game instance this plugin is running under.\r\n         *\r\n         * @name Phaser.Plugins.BasePlugin#game\r\n         * @type {Phaser.Game}\r\n         * @protected\r\n         * @since 3.8.0\r\n         */\r\n        this.game = pluginManager.game;\r\n    },\r\n\r\n    /**\r\n     * The PluginManager calls this method on a Global Plugin when the plugin is first instantiated.\r\n     * It will never be called again on this instance.\r\n     * In here you can set-up whatever you need for this plugin to run.\r\n     * If a plugin is set to automatically start then `BasePlugin.start` will be called immediately after this.\r\n     * On a Scene Plugin, this method is never called. Use {@link Phaser.Plugins.ScenePlugin#boot} instead.\r\n     *\r\n     * @method Phaser.Plugins.BasePlugin#init\r\n     * @since 3.8.0\r\n     *\r\n     * @param {?any} [data] - A value specified by the user, if any, from the `data` property of the plugin's configuration object (if started at game boot) or passed in the PluginManager's `install` method (if started manually).\r\n     */\r\n    init: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * The PluginManager calls this method on a Global Plugin when the plugin is started.\r\n     * If a plugin is stopped, and then started again, this will get called again.\r\n     * Typically called immediately after `BasePlugin.init`.\r\n     * On a Scene Plugin, this method is never called.\r\n     *\r\n     * @method Phaser.Plugins.BasePlugin#start\r\n     * @since 3.8.0\r\n     */\r\n    start: function ()\r\n    {\r\n        //  Here are the game-level events you can listen to.\r\n        //  At the very least you should offer a destroy handler for when the game closes down.\r\n\r\n        // var eventEmitter = this.game.events;\r\n\r\n        // eventEmitter.once('destroy', this.gameDestroy, this);\r\n        // eventEmitter.on('pause', this.gamePause, this);\r\n        // eventEmitter.on('resume', this.gameResume, this);\r\n        // eventEmitter.on('resize', this.gameResize, this);\r\n        // eventEmitter.on('prestep', this.gamePreStep, this);\r\n        // eventEmitter.on('step', this.gameStep, this);\r\n        // eventEmitter.on('poststep', this.gamePostStep, this);\r\n        // eventEmitter.on('prerender', this.gamePreRender, this);\r\n        // eventEmitter.on('postrender', this.gamePostRender, this);\r\n    },\r\n\r\n    /**\r\n     * The PluginManager calls this method on a Global Plugin when the plugin is stopped.\r\n     * The game code has requested that your plugin stop doing whatever it does.\r\n     * It is now considered as 'inactive' by the PluginManager.\r\n     * Handle that process here (i.e. stop listening for events, etc)\r\n     * If the plugin is started again then `BasePlugin.start` will be called again.\r\n     * On a Scene Plugin, this method is never called.\r\n     *\r\n     * @method Phaser.Plugins.BasePlugin#stop\r\n     * @since 3.8.0\r\n     */\r\n    stop: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Game instance has been destroyed.\r\n     * You must release everything in here, all references, all objects, free it all up.\r\n     *\r\n     * @method Phaser.Plugins.BasePlugin#destroy\r\n     * @since 3.8.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.pluginManager = null;\r\n        this.game = null;\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BasePlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL0Jhc2VQbHVnaW4uanM/OWQ2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELHNDQUFzQztBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BsdWdpbnMvQmFzZVBsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlcjMtcGx1Z2luLXRlbXBsYXRlL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XHJcbiovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBHbG9iYWwgUGx1Z2luIGlzIGluc3RhbGxlZCBqdXN0IG9uY2UgaW50byB0aGUgR2FtZSBvd25lZCBQbHVnaW4gTWFuYWdlci5cclxuICogSXQgY2FuIGxpc3RlbiBmb3IgR2FtZSBldmVudHMgYW5kIHJlc3BvbmQgdG8gdGhlbS5cclxuICpcclxuICogQGNsYXNzIEJhc2VQbHVnaW5cclxuICogQG1lbWJlcm9mIFBoYXNlci5QbHVnaW5zXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy44LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyfSBwbHVnaW5NYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIFBsdWdpbiBNYW5hZ2VyLlxyXG4gKi9cclxudmFyIEJhc2VQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZVBsdWdpbiAocGx1Z2luTWFuYWdlcilcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGhhbmR5IHJlZmVyZW5jZSB0byB0aGUgUGx1Z2luIE1hbmFnZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBwbHVnaW4uXHJcbiAgICAgICAgICogQ2FuIGJlIHVzZWQgYXMgYSByb3V0ZSB0byBnYWluIGFjY2VzcyB0byBnYW1lIHN5c3RlbXMgYW5kICBldmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2luI3BsdWdpbk1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlcn1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbHVnaW5NYW5hZ2VyID0gcGx1Z2luTWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgaW5zdGFuY2UgdGhpcyBwbHVnaW4gaXMgcnVubmluZyB1bmRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QbHVnaW5zLkJhc2VQbHVnaW4jZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gcGx1Z2luTWFuYWdlci5nYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQbHVnaW5NYW5hZ2VyIGNhbGxzIHRoaXMgbWV0aG9kIG9uIGEgR2xvYmFsIFBsdWdpbiB3aGVuIHRoZSBwbHVnaW4gaXMgZmlyc3QgaW5zdGFudGlhdGVkLlxyXG4gICAgICogSXQgd2lsbCBuZXZlciBiZSBjYWxsZWQgYWdhaW4gb24gdGhpcyBpbnN0YW5jZS5cclxuICAgICAqIEluIGhlcmUgeW91IGNhbiBzZXQtdXAgd2hhdGV2ZXIgeW91IG5lZWQgZm9yIHRoaXMgcGx1Z2luIHRvIHJ1bi5cclxuICAgICAqIElmIGEgcGx1Z2luIGlzIHNldCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZW4gYEJhc2VQbHVnaW4uc3RhcnRgIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMuXHJcbiAgICAgKiBPbiBhIFNjZW5lIFBsdWdpbiwgdGhpcyBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkLiBVc2Uge0BsaW5rIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luI2Jvb3R9IGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2luI2luaXRcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7P2FueX0gW2RhdGFdIC0gQSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIGlmIGFueSwgZnJvbSB0aGUgYGRhdGFgIHByb3BlcnR5IG9mIHRoZSBwbHVnaW4ncyBjb25maWd1cmF0aW9uIG9iamVjdCAoaWYgc3RhcnRlZCBhdCBnYW1lIGJvb3QpIG9yIHBhc3NlZCBpbiB0aGUgUGx1Z2luTWFuYWdlcidzIGBpbnN0YWxsYCBtZXRob2QgKGlmIHN0YXJ0ZWQgbWFudWFsbHkpLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQbHVnaW5NYW5hZ2VyIGNhbGxzIHRoaXMgbWV0aG9kIG9uIGEgR2xvYmFsIFBsdWdpbiB3aGVuIHRoZSBwbHVnaW4gaXMgc3RhcnRlZC5cclxuICAgICAqIElmIGEgcGx1Z2luIGlzIHN0b3BwZWQsIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4sIHRoaXMgd2lsbCBnZXQgY2FsbGVkIGFnYWluLlxyXG4gICAgICogVHlwaWNhbGx5IGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBgQmFzZVBsdWdpbi5pbml0YC5cclxuICAgICAqIE9uIGEgU2NlbmUgUGx1Z2luLCB0aGlzIG1ldGhvZCBpcyBuZXZlciBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2luI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEhlcmUgYXJlIHRoZSBnYW1lLWxldmVsIGV2ZW50cyB5b3UgY2FuIGxpc3RlbiB0by5cclxuICAgICAgICAvLyAgQXQgdGhlIHZlcnkgbGVhc3QgeW91IHNob3VsZCBvZmZlciBhIGRlc3Ryb3kgaGFuZGxlciBmb3Igd2hlbiB0aGUgZ2FtZSBjbG9zZXMgZG93bi5cclxuXHJcbiAgICAgICAgLy8gdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuZ2FtZS5ldmVudHM7XHJcblxyXG4gICAgICAgIC8vIGV2ZW50RW1pdHRlci5vbmNlKCdkZXN0cm95JywgdGhpcy5nYW1lRGVzdHJveSwgdGhpcyk7XHJcbiAgICAgICAgLy8gZXZlbnRFbWl0dGVyLm9uKCdwYXVzZScsIHRoaXMuZ2FtZVBhdXNlLCB0aGlzKTtcclxuICAgICAgICAvLyBldmVudEVtaXR0ZXIub24oJ3Jlc3VtZScsIHRoaXMuZ2FtZVJlc3VtZSwgdGhpcyk7XHJcbiAgICAgICAgLy8gZXZlbnRFbWl0dGVyLm9uKCdyZXNpemUnLCB0aGlzLmdhbWVSZXNpemUsIHRoaXMpO1xyXG4gICAgICAgIC8vIGV2ZW50RW1pdHRlci5vbigncHJlc3RlcCcsIHRoaXMuZ2FtZVByZVN0ZXAsIHRoaXMpO1xyXG4gICAgICAgIC8vIGV2ZW50RW1pdHRlci5vbignc3RlcCcsIHRoaXMuZ2FtZVN0ZXAsIHRoaXMpO1xyXG4gICAgICAgIC8vIGV2ZW50RW1pdHRlci5vbigncG9zdHN0ZXAnLCB0aGlzLmdhbWVQb3N0U3RlcCwgdGhpcyk7XHJcbiAgICAgICAgLy8gZXZlbnRFbWl0dGVyLm9uKCdwcmVyZW5kZXInLCB0aGlzLmdhbWVQcmVSZW5kZXIsIHRoaXMpO1xyXG4gICAgICAgIC8vIGV2ZW50RW1pdHRlci5vbigncG9zdHJlbmRlcicsIHRoaXMuZ2FtZVBvc3RSZW5kZXIsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQbHVnaW5NYW5hZ2VyIGNhbGxzIHRoaXMgbWV0aG9kIG9uIGEgR2xvYmFsIFBsdWdpbiB3aGVuIHRoZSBwbHVnaW4gaXMgc3RvcHBlZC5cclxuICAgICAqIFRoZSBnYW1lIGNvZGUgaGFzIHJlcXVlc3RlZCB0aGF0IHlvdXIgcGx1Z2luIHN0b3AgZG9pbmcgd2hhdGV2ZXIgaXQgZG9lcy5cclxuICAgICAqIEl0IGlzIG5vdyBjb25zaWRlcmVkIGFzICdpbmFjdGl2ZScgYnkgdGhlIFBsdWdpbk1hbmFnZXIuXHJcbiAgICAgKiBIYW5kbGUgdGhhdCBwcm9jZXNzIGhlcmUgKGkuZS4gc3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50cywgZXRjKVxyXG4gICAgICogSWYgdGhlIHBsdWdpbiBpcyBzdGFydGVkIGFnYWluIHRoZW4gYEJhc2VQbHVnaW4uc3RhcnRgIHdpbGwgYmUgY2FsbGVkIGFnYWluLlxyXG4gICAgICogT24gYSBTY2VuZSBQbHVnaW4sIHRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLkJhc2VQbHVnaW4jc3RvcFxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2FtZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQuXHJcbiAgICAgKiBZb3UgbXVzdCByZWxlYXNlIGV2ZXJ5dGhpbmcgaW4gaGVyZSwgYWxsIHJlZmVyZW5jZXMsIGFsbCBvYmplY3RzLCBmcmVlIGl0IGFsbCB1cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLkJhc2VQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZVBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/BasePlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/DefaultPlugins.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/plugins/DefaultPlugins.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Plugins.DefaultPlugins\r\n * \r\n * @property {array} Global - These are the Global Managers that are created by the Phaser.Game instance.\r\n * @property {array} CoreScene - These are the core plugins that are installed into every Scene.Systems instance, no matter what.\r\n * @property {array} DefaultScene - These plugins are created in Scene.Systems in addition to the CoreScenePlugins.\r\n */\r\n\r\nvar DefaultPlugins = {\r\n\r\n    /**\r\n     * These are the Global Managers that are created by the Phaser.Game instance.\r\n     * They are referenced from Scene.Systems so that plugins can use them.\r\n     * \r\n     * @name Phaser.Plugins.Global\r\n     * @type {array}\r\n     * @since 3.0.0\r\n     */\r\n    Global: [\r\n\r\n        'game',\r\n        'anims',\r\n        'cache',\r\n        'plugins',\r\n        'registry',\r\n        'scale',\r\n        'sound',\r\n        'textures'\r\n\r\n    ],\r\n\r\n    /**\r\n     * These are the core plugins that are installed into every Scene.Systems instance, no matter what.\r\n     * They are optionally exposed in the Scene as well (see the InjectionMap for details)\r\n     * \r\n     * They are created in the order in which they appear in this array and EventEmitter is always first.\r\n     * \r\n     * @name Phaser.Plugins.CoreScene\r\n     * @type {array}\r\n     * @since 3.0.0\r\n     */\r\n    CoreScene: [\r\n\r\n        'EventEmitter',\r\n\r\n        'CameraManager',\r\n        'GameObjectCreator',\r\n        'GameObjectFactory',\r\n        'ScenePlugin',\r\n        'DisplayList',\r\n        'UpdateList'\r\n\r\n    ],\r\n\r\n    /**\r\n     * These plugins are created in Scene.Systems in addition to the CoreScenePlugins.\r\n     * \r\n     * You can elect not to have these plugins by either creating a DefaultPlugins object as part\r\n     * of the Game Config, by creating a Plugins object as part of a Scene Config, or by modifying this array\r\n     * and building your own bundle.\r\n     * \r\n     * They are optionally exposed in the Scene as well (see the InjectionMap for details)\r\n     * \r\n     * They are always created in the order in which they appear in the array.\r\n     * \r\n     * @name Phaser.Plugins.DefaultScene\r\n     * @type {array}\r\n     * @since 3.0.0\r\n     */\r\n    DefaultScene: [\r\n\r\n        'Clock',\r\n        'DataManagerPlugin',\r\n        'InputPlugin',\r\n        'Loader',\r\n        'TweenManager',\r\n        'LightsPlugin'\r\n\r\n    ]\r\n\r\n};\r\n\r\nif (typeof PLUGIN_CAMERA3D)\r\n{\r\n    DefaultPlugins.DefaultScene.push('CameraManager3D');\r\n}\r\n\r\nif (typeof PLUGIN_FBINSTANT)\r\n{\r\n    DefaultPlugins.Global.push('facebook');\r\n}\r\n\r\nmodule.exports = DefaultPlugins;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL0RlZmF1bHRQbHVnaW5zLmpzPzBkN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGNBQWMsTUFBTTtBQUNwQixjQUFjLE1BQU07QUFDcEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGx1Z2lucy9EZWZhdWx0UGx1Z2lucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5QbHVnaW5zLkRlZmF1bHRQbHVnaW5zXHJcbiAqIFxyXG4gKiBAcHJvcGVydHkge2FycmF5fSBHbG9iYWwgLSBUaGVzZSBhcmUgdGhlIEdsb2JhbCBNYW5hZ2VycyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICogQHByb3BlcnR5IHthcnJheX0gQ29yZVNjZW5lIC0gVGhlc2UgYXJlIHRoZSBjb3JlIHBsdWdpbnMgdGhhdCBhcmUgaW5zdGFsbGVkIGludG8gZXZlcnkgU2NlbmUuU3lzdGVtcyBpbnN0YW5jZSwgbm8gbWF0dGVyIHdoYXQuXHJcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IERlZmF1bHRTY2VuZSAtIFRoZXNlIHBsdWdpbnMgYXJlIGNyZWF0ZWQgaW4gU2NlbmUuU3lzdGVtcyBpbiBhZGRpdGlvbiB0byB0aGUgQ29yZVNjZW5lUGx1Z2lucy5cclxuICovXHJcblxyXG52YXIgRGVmYXVsdFBsdWdpbnMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGVzZSBhcmUgdGhlIEdsb2JhbCBNYW5hZ2VycyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICAgICAqIFRoZXkgYXJlIHJlZmVyZW5jZWQgZnJvbSBTY2VuZS5TeXN0ZW1zIHNvIHRoYXQgcGx1Z2lucyBjYW4gdXNlIHRoZW0uXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5QbHVnaW5zLkdsb2JhbFxyXG4gICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEdsb2JhbDogW1xyXG5cclxuICAgICAgICAnZ2FtZScsXHJcbiAgICAgICAgJ2FuaW1zJyxcclxuICAgICAgICAnY2FjaGUnLFxyXG4gICAgICAgICdwbHVnaW5zJyxcclxuICAgICAgICAncmVnaXN0cnknLFxyXG4gICAgICAgICdzY2FsZScsXHJcbiAgICAgICAgJ3NvdW5kJyxcclxuICAgICAgICAndGV4dHVyZXMnXHJcblxyXG4gICAgXSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZXNlIGFyZSB0aGUgY29yZSBwbHVnaW5zIHRoYXQgYXJlIGluc3RhbGxlZCBpbnRvIGV2ZXJ5IFNjZW5lLlN5c3RlbXMgaW5zdGFuY2UsIG5vIG1hdHRlciB3aGF0LlxyXG4gICAgICogVGhleSBhcmUgb3B0aW9uYWxseSBleHBvc2VkIGluIHRoZSBTY2VuZSBhcyB3ZWxsIChzZWUgdGhlIEluamVjdGlvbk1hcCBmb3IgZGV0YWlscylcclxuICAgICAqIFxyXG4gICAgICogVGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhpcyBhcnJheSBhbmQgRXZlbnRFbWl0dGVyIGlzIGFsd2F5cyBmaXJzdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBsdWdpbnMuQ29yZVNjZW5lXHJcbiAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ29yZVNjZW5lOiBbXHJcblxyXG4gICAgICAgICdFdmVudEVtaXR0ZXInLFxyXG5cclxuICAgICAgICAnQ2FtZXJhTWFuYWdlcicsXHJcbiAgICAgICAgJ0dhbWVPYmplY3RDcmVhdG9yJyxcclxuICAgICAgICAnR2FtZU9iamVjdEZhY3RvcnknLFxyXG4gICAgICAgICdTY2VuZVBsdWdpbicsXHJcbiAgICAgICAgJ0Rpc3BsYXlMaXN0JyxcclxuICAgICAgICAnVXBkYXRlTGlzdCdcclxuXHJcbiAgICBdLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlc2UgcGx1Z2lucyBhcmUgY3JlYXRlZCBpbiBTY2VuZS5TeXN0ZW1zIGluIGFkZGl0aW9uIHRvIHRoZSBDb3JlU2NlbmVQbHVnaW5zLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGVsZWN0IG5vdCB0byBoYXZlIHRoZXNlIHBsdWdpbnMgYnkgZWl0aGVyIGNyZWF0aW5nIGEgRGVmYXVsdFBsdWdpbnMgb2JqZWN0IGFzIHBhcnRcclxuICAgICAqIG9mIHRoZSBHYW1lIENvbmZpZywgYnkgY3JlYXRpbmcgYSBQbHVnaW5zIG9iamVjdCBhcyBwYXJ0IG9mIGEgU2NlbmUgQ29uZmlnLCBvciBieSBtb2RpZnlpbmcgdGhpcyBhcnJheVxyXG4gICAgICogYW5kIGJ1aWxkaW5nIHlvdXIgb3duIGJ1bmRsZS5cclxuICAgICAqIFxyXG4gICAgICogVGhleSBhcmUgb3B0aW9uYWxseSBleHBvc2VkIGluIHRoZSBTY2VuZSBhcyB3ZWxsIChzZWUgdGhlIEluamVjdGlvbk1hcCBmb3IgZGV0YWlscylcclxuICAgICAqIFxyXG4gICAgICogVGhleSBhcmUgYWx3YXlzIGNyZWF0ZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBhcnJheS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlBsdWdpbnMuRGVmYXVsdFNjZW5lXHJcbiAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRGVmYXVsdFNjZW5lOiBbXHJcblxyXG4gICAgICAgICdDbG9jaycsXHJcbiAgICAgICAgJ0RhdGFNYW5hZ2VyUGx1Z2luJyxcclxuICAgICAgICAnSW5wdXRQbHVnaW4nLFxyXG4gICAgICAgICdMb2FkZXInLFxyXG4gICAgICAgICdUd2Vlbk1hbmFnZXInLFxyXG4gICAgICAgICdMaWdodHNQbHVnaW4nXHJcblxyXG4gICAgXVxyXG5cclxufTtcclxuXHJcbmlmICh0eXBlb2YgUExVR0lOX0NBTUVSQTNEKVxyXG57XHJcbiAgICBEZWZhdWx0UGx1Z2lucy5EZWZhdWx0U2NlbmUucHVzaCgnQ2FtZXJhTWFuYWdlcjNEJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUExVR0lOX0ZCSU5TVEFOVClcclxue1xyXG4gICAgRGVmYXVsdFBsdWdpbnMuR2xvYmFsLnB1c2goJ2ZhY2Vib29rJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdFBsdWdpbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/DefaultPlugins.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/PluginCache.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/plugins/PluginCache.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Contains the plugins that Phaser uses globally and locally.\r\n//  These are the source objects, not instantiated.\r\nvar corePlugins = {};\r\n\r\n//  Contains the plugins that the dev has loaded into their game\r\n//  These are the source objects, not instantiated.\r\nvar customPlugins = {};\r\n\r\nvar PluginCache = {};\r\n\r\n/**\r\n * @namespace Phaser.Plugins.PluginCache\r\n */\r\n\r\n/**\r\n * Static method called directly by the Core internal Plugins.\r\n * Key is a reference used to get the plugin from the plugins object (i.e. InputPlugin)\r\n * Plugin is the object to instantiate to create the plugin\r\n * Mapping is what the plugin is injected into the Scene.Systems as (i.e. input)\r\n *\r\n * @method Phaser.Plugins.PluginCache.register\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - A reference used to get this plugin from the plugin cache.\r\n * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated.\r\n * @param {string} mapping - If this plugin is to be injected into the Scene Systems, this is the property key map used.\r\n * @param {boolean} [custom=false] - Core Scene plugin or a Custom Scene plugin?\r\n */\r\nPluginCache.register = function (key, plugin, mapping, custom)\r\n{\r\n    if (custom === undefined) { custom = false; }\r\n\r\n    corePlugins[key] = { plugin: plugin, mapping: mapping, custom: custom };\r\n};\r\n\r\n/**\r\n * Stores a custom plugin in the global plugin cache.\r\n * The key must be unique, within the scope of the cache.\r\n *\r\n * @method Phaser.Plugins.PluginCache.registerCustom\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - A reference used to get this plugin from the plugin cache.\r\n * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated.\r\n * @param {string} mapping - If this plugin is to be injected into the Scene Systems, this is the property key map used.\r\n * @param {?any} data - A value to be passed to the plugin's `init` method.\r\n */\r\nPluginCache.registerCustom = function (key, plugin, mapping, data)\r\n{\r\n    customPlugins[key] = { plugin: plugin, mapping: mapping, data: data };\r\n};\r\n\r\n/**\r\n * Checks if the given key is already being used in the core plugin cache.\r\n *\r\n * @method Phaser.Plugins.PluginCache.hasCore\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key to check for.\r\n *\r\n * @return {boolean} `true` if the key is already in use in the core cache, otherwise `false`.\r\n */\r\nPluginCache.hasCore = function (key)\r\n{\r\n    return corePlugins.hasOwnProperty(key);\r\n};\r\n\r\n/**\r\n * Checks if the given key is already being used in the custom plugin cache.\r\n *\r\n * @method Phaser.Plugins.PluginCache.hasCustom\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key to check for.\r\n *\r\n * @return {boolean} `true` if the key is already in use in the custom cache, otherwise `false`.\r\n */\r\nPluginCache.hasCustom = function (key)\r\n{\r\n    return customPlugins.hasOwnProperty(key);\r\n};\r\n\r\n/**\r\n * Returns the core plugin object from the cache based on the given key.\r\n *\r\n * @method Phaser.Plugins.PluginCache.getCore\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key of the core plugin to get.\r\n *\r\n * @return {Phaser.Types.Plugins.CorePluginContainer} The core plugin object.\r\n */\r\nPluginCache.getCore = function (key)\r\n{\r\n    return corePlugins[key];\r\n};\r\n\r\n/**\r\n * Returns the custom plugin object from the cache based on the given key.\r\n *\r\n * @method Phaser.Plugins.PluginCache.getCustom\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key of the custom plugin to get.\r\n *\r\n * @return {Phaser.Types.Plugins.CustomPluginContainer} The custom plugin object.\r\n */\r\nPluginCache.getCustom = function (key)\r\n{\r\n    return customPlugins[key];\r\n};\r\n\r\n/**\r\n * Returns an object from the custom cache based on the given key that can be instantiated.\r\n *\r\n * @method Phaser.Plugins.PluginCache.getCustomClass\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key of the custom plugin to get.\r\n *\r\n * @return {function} The custom plugin object.\r\n */\r\nPluginCache.getCustomClass = function (key)\r\n{\r\n    return (customPlugins.hasOwnProperty(key)) ? customPlugins[key].plugin : null;\r\n};\r\n\r\n/**\r\n * Removes a core plugin based on the given key.\r\n *\r\n * @method Phaser.Plugins.PluginCache.remove\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key of the core plugin to remove.\r\n */\r\nPluginCache.remove = function (key)\r\n{\r\n    if (corePlugins.hasOwnProperty(key))\r\n    {\r\n        delete corePlugins[key];\r\n    }\r\n};\r\n\r\n/**\r\n * Removes a custom plugin based on the given key.\r\n *\r\n * @method Phaser.Plugins.PluginCache.removeCustom\r\n * @since 3.8.0\r\n * \r\n * @param {string} key - The key of the custom plugin to remove.\r\n */\r\nPluginCache.removeCustom = function (key)\r\n{\r\n    if (customPlugins.hasOwnProperty(key))\r\n    {\r\n        delete customPlugins[key];\r\n    }\r\n};\r\n\r\n/**\r\n * Removes all Core Plugins.\r\n * \r\n * This includes all of the internal system plugins that Phaser needs, like the Input Plugin and Loader Plugin.\r\n * So be sure you only call this if you do not wish to run Phaser again.\r\n *\r\n * @method Phaser.Plugins.PluginCache.destroyCorePlugins\r\n * @since 3.12.0\r\n */\r\nPluginCache.destroyCorePlugins = function ()\r\n{\r\n    for (var key in corePlugins)\r\n    {\r\n        if (corePlugins.hasOwnProperty(key))\r\n        {\r\n            delete corePlugins[key];\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * Removes all Custom Plugins.\r\n *\r\n * @method Phaser.Plugins.PluginCache.destroyCustomPlugins\r\n * @since 3.12.0\r\n */\r\nPluginCache.destroyCustomPlugins = function ()\r\n{\r\n    for (var key in customPlugins)\r\n    {\r\n        if (customPlugins.hasOwnProperty(key))\r\n        {\r\n            delete customPlugins[key];\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = PluginCache;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL1BsdWdpbkNhY2hlLmpzPzI5ZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCOztBQUUvQyx3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVkseUNBQXlDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSwyQ0FBMkM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BsdWdpbnMvUGx1Z2luQ2FjaGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBDb250YWlucyB0aGUgcGx1Z2lucyB0aGF0IFBoYXNlciB1c2VzIGdsb2JhbGx5IGFuZCBsb2NhbGx5LlxyXG4vLyAgVGhlc2UgYXJlIHRoZSBzb3VyY2Ugb2JqZWN0cywgbm90IGluc3RhbnRpYXRlZC5cclxudmFyIGNvcmVQbHVnaW5zID0ge307XHJcblxyXG4vLyAgQ29udGFpbnMgdGhlIHBsdWdpbnMgdGhhdCB0aGUgZGV2IGhhcyBsb2FkZWQgaW50byB0aGVpciBnYW1lXHJcbi8vICBUaGVzZSBhcmUgdGhlIHNvdXJjZSBvYmplY3RzLCBub3QgaW5zdGFudGlhdGVkLlxyXG52YXIgY3VzdG9tUGx1Z2lucyA9IHt9O1xyXG5cclxudmFyIFBsdWdpbkNhY2hlID0ge307XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUGx1Z2lucy5QbHVnaW5DYWNoZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgQ29yZSBpbnRlcm5hbCBQbHVnaW5zLlxyXG4gKiBLZXkgaXMgYSByZWZlcmVuY2UgdXNlZCB0byBnZXQgdGhlIHBsdWdpbiBmcm9tIHRoZSBwbHVnaW5zIG9iamVjdCAoaS5lLiBJbnB1dFBsdWdpbilcclxuICogUGx1Z2luIGlzIHRoZSBvYmplY3QgdG8gaW5zdGFudGlhdGUgdG8gY3JlYXRlIHRoZSBwbHVnaW5cclxuICogTWFwcGluZyBpcyB3aGF0IHRoZSBwbHVnaW4gaXMgaW5qZWN0ZWQgaW50byB0aGUgU2NlbmUuU3lzdGVtcyBhcyAoaS5lLiBpbnB1dClcclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5DYWNoZS5yZWdpc3RlclxyXG4gKiBAc2luY2UgMy44LjBcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBIHJlZmVyZW5jZSB1c2VkIHRvIGdldCB0aGlzIHBsdWdpbiBmcm9tIHRoZSBwbHVnaW4gY2FjaGUuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gYmUgc3RvcmVkLiBTaG91bGQgYmUgdGhlIGNvcmUgb2JqZWN0LCBub3QgaW5zdGFudGlhdGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFwcGluZyAtIElmIHRoaXMgcGx1Z2luIGlzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIFNjZW5lIFN5c3RlbXMsIHRoaXMgaXMgdGhlIHByb3BlcnR5IGtleSBtYXAgdXNlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbY3VzdG9tPWZhbHNlXSAtIENvcmUgU2NlbmUgcGx1Z2luIG9yIGEgQ3VzdG9tIFNjZW5lIHBsdWdpbj9cclxuICovXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGtleSwgcGx1Z2luLCBtYXBwaW5nLCBjdXN0b20pXHJcbntcclxuICAgIGlmIChjdXN0b20gPT09IHVuZGVmaW5lZCkgeyBjdXN0b20gPSBmYWxzZTsgfVxyXG5cclxuICAgIGNvcmVQbHVnaW5zW2tleV0gPSB7IHBsdWdpbjogcGx1Z2luLCBtYXBwaW5nOiBtYXBwaW5nLCBjdXN0b206IGN1c3RvbSB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN0b3JlcyBhIGN1c3RvbSBwbHVnaW4gaW4gdGhlIGdsb2JhbCBwbHVnaW4gY2FjaGUuXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSB1bmlxdWUsIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGNhY2hlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbkNhY2hlLnJlZ2lzdGVyQ3VzdG9tXHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEEgcmVmZXJlbmNlIHVzZWQgdG8gZ2V0IHRoaXMgcGx1Z2luIGZyb20gdGhlIHBsdWdpbiBjYWNoZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBiZSBzdG9yZWQuIFNob3VsZCBiZSB0aGUgY29yZSBvYmplY3QsIG5vdCBpbnN0YW50aWF0ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXBwaW5nIC0gSWYgdGhpcyBwbHVnaW4gaXMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgU2NlbmUgU3lzdGVtcywgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IG1hcCB1c2VkLlxyXG4gKiBAcGFyYW0gez9hbnl9IGRhdGEgLSBBIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgcGx1Z2luJ3MgYGluaXRgIG1ldGhvZC5cclxuICovXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyQ3VzdG9tID0gZnVuY3Rpb24gKGtleSwgcGx1Z2luLCBtYXBwaW5nLCBkYXRhKVxyXG57XHJcbiAgICBjdXN0b21QbHVnaW5zW2tleV0gPSB7IHBsdWdpbjogcGx1Z2luLCBtYXBwaW5nOiBtYXBwaW5nLCBkYXRhOiBkYXRhIH07XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBrZXkgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGluIHRoZSBjb3JlIHBsdWdpbiBjYWNoZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5DYWNoZS5oYXNDb3JlXHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2sgZm9yLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZSBpbiB0aGUgY29yZSBjYWNoZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG5QbHVnaW5DYWNoZS5oYXNDb3JlID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgcmV0dXJuIGNvcmVQbHVnaW5zLmhhc093blByb3BlcnR5KGtleSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBrZXkgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGluIHRoZSBjdXN0b20gcGx1Z2luIGNhY2hlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbkNhY2hlLmhhc0N1c3RvbVxyXG4gKiBAc2luY2UgMy44LjBcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrIGZvci5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UgaW4gdGhlIGN1c3RvbSBjYWNoZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG5QbHVnaW5DYWNoZS5oYXNDdXN0b20gPSBmdW5jdGlvbiAoa2V5KVxyXG57XHJcbiAgICByZXR1cm4gY3VzdG9tUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGNvcmUgcGx1Z2luIG9iamVjdCBmcm9tIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgZ2l2ZW4ga2V5LlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbkNhY2hlLmdldENvcmVcclxuICogQHNpbmNlIDMuOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY29yZSBwbHVnaW4gdG8gZ2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuUGx1Z2lucy5Db3JlUGx1Z2luQ29udGFpbmVyfSBUaGUgY29yZSBwbHVnaW4gb2JqZWN0LlxyXG4gKi9cclxuUGx1Z2luQ2FjaGUuZ2V0Q29yZSA9IGZ1bmN0aW9uIChrZXkpXHJcbntcclxuICAgIHJldHVybiBjb3JlUGx1Z2luc1trZXldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGN1c3RvbSBwbHVnaW4gb2JqZWN0IGZyb20gdGhlIGNhY2hlIGJhc2VkIG9uIHRoZSBnaXZlbiBrZXkuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luQ2FjaGUuZ2V0Q3VzdG9tXHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1c3RvbSBwbHVnaW4gdG8gZ2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuUGx1Z2lucy5DdXN0b21QbHVnaW5Db250YWluZXJ9IFRoZSBjdXN0b20gcGx1Z2luIG9iamVjdC5cclxuICovXHJcblBsdWdpbkNhY2hlLmdldEN1c3RvbSA9IGZ1bmN0aW9uIChrZXkpXHJcbntcclxuICAgIHJldHVybiBjdXN0b21QbHVnaW5zW2tleV07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBvYmplY3QgZnJvbSB0aGUgY3VzdG9tIGNhY2hlIGJhc2VkIG9uIHRoZSBnaXZlbiBrZXkgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbkNhY2hlLmdldEN1c3RvbUNsYXNzXHJcbiAqIEBzaW5jZSAzLjguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1c3RvbSBwbHVnaW4gdG8gZ2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGN1c3RvbSBwbHVnaW4gb2JqZWN0LlxyXG4gKi9cclxuUGx1Z2luQ2FjaGUuZ2V0Q3VzdG9tQ2xhc3MgPSBmdW5jdGlvbiAoa2V5KVxyXG57XHJcbiAgICByZXR1cm4gKGN1c3RvbVBsdWdpbnMuaGFzT3duUHJvcGVydHkoa2V5KSkgPyBjdXN0b21QbHVnaW5zW2tleV0ucGx1Z2luIDogbnVsbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIGEgY29yZSBwbHVnaW4gYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5DYWNoZS5yZW1vdmVcclxuICogQHNpbmNlIDMuOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY29yZSBwbHVnaW4gdG8gcmVtb3ZlLlxyXG4gKi9cclxuUGx1Z2luQ2FjaGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgaWYgKGNvcmVQbHVnaW5zLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZGVsZXRlIGNvcmVQbHVnaW5zW2tleV07XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhIGN1c3RvbSBwbHVnaW4gYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5DYWNoZS5yZW1vdmVDdXN0b21cclxuICogQHNpbmNlIDMuOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VzdG9tIHBsdWdpbiB0byByZW1vdmUuXHJcbiAqL1xyXG5QbHVnaW5DYWNoZS5yZW1vdmVDdXN0b20gPSBmdW5jdGlvbiAoa2V5KVxyXG57XHJcbiAgICBpZiAoY3VzdG9tUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGRlbGV0ZSBjdXN0b21QbHVnaW5zW2tleV07XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbGwgQ29yZSBQbHVnaW5zLlxyXG4gKiBcclxuICogVGhpcyBpbmNsdWRlcyBhbGwgb2YgdGhlIGludGVybmFsIHN5c3RlbSBwbHVnaW5zIHRoYXQgUGhhc2VyIG5lZWRzLCBsaWtlIHRoZSBJbnB1dCBQbHVnaW4gYW5kIExvYWRlciBQbHVnaW4uXHJcbiAqIFNvIGJlIHN1cmUgeW91IG9ubHkgY2FsbCB0aGlzIGlmIHlvdSBkbyBub3Qgd2lzaCB0byBydW4gUGhhc2VyIGFnYWluLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbkNhY2hlLmRlc3Ryb3lDb3JlUGx1Z2luc1xyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqL1xyXG5QbHVnaW5DYWNoZS5kZXN0cm95Q29yZVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxyXG57XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gY29yZVBsdWdpbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvcmVQbHVnaW5zLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWxldGUgY29yZVBsdWdpbnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbGwgQ3VzdG9tIFBsdWdpbnMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luQ2FjaGUuZGVzdHJveUN1c3RvbVBsdWdpbnNcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKi9cclxuUGx1Z2luQ2FjaGUuZGVzdHJveUN1c3RvbVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxyXG57XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tUGx1Z2lucylcclxuICAgIHtcclxuICAgICAgICBpZiAoY3VzdG9tUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsZXRlIGN1c3RvbVBsdWdpbnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBsdWdpbkNhY2hlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/PluginCache.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/PluginManager.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/plugins/PluginManager.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../loader/FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../gameobjects/GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ./PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar Remove = __webpack_require__(/*! ../utils/array/Remove */ \"./node_modules/phaser/src/utils/array/Remove.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The PluginManager is responsible for installing and adding plugins to Phaser.\r\n *\r\n * It is a global system and therefore belongs to the Game instance, not a specific Scene.\r\n *\r\n * It works in conjunction with the PluginCache. Core internal plugins automatically register themselves \r\n * with the Cache, but it's the Plugin Manager that is responsible for injecting them into the Scenes.\r\n *\r\n * There are two types of plugin:\r\n *\r\n * 1. A Global Plugin\r\n * 2. A Scene Plugin\r\n *\r\n * A Global Plugin is a plugin that lives within the Plugin Manager rather than a Scene. You can get\r\n * access to it by calling `PluginManager.get` and providing a key. Any Scene that requests a plugin in\r\n * this way will all get access to the same plugin instance, allowing you to use a single plugin across\r\n * multiple Scenes.\r\n *\r\n * A Scene Plugin is a plugin dedicated to running within a Scene. These are different to Global Plugins\r\n * in that their instances do not live within the Plugin Manager, but within the Scene Systems class instead.\r\n * And that every Scene created is given its own unique instance of a Scene Plugin. Examples of core Scene\r\n * Plugins include the Input Plugin, the Tween Plugin and the physics Plugins.\r\n *\r\n * You can add a plugin to Phaser in three different ways:\r\n *\r\n * 1. Preload it\r\n * 2. Include it in your source code and install it via the Game Config\r\n * 3. Include it in your source code and install it within a Scene\r\n *\r\n * For examples of all of these approaches please see the Phaser 3 Examples Repo `plugins` folder.\r\n *\r\n * For information on creating your own plugin please see the Phaser 3 Plugin Template.\r\n *\r\n * @class PluginManager\r\n * @memberof Phaser.Plugins\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The game instance that owns this Plugin Manager.\r\n */\r\nvar PluginManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function PluginManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The game instance that owns this Plugin Manager.\r\n         *\r\n         * @name Phaser.Plugins.PluginManager#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * The global plugins currently running and managed by this Plugin Manager.\r\n         * A plugin must have been started at least once in order to appear in this list.\r\n         *\r\n         * @name Phaser.Plugins.PluginManager#plugins\r\n         * @type {Phaser.Types.Plugins.GlobalPlugin[]}\r\n         * @since 3.8.0\r\n         */\r\n        this.plugins = [];\r\n\r\n        /**\r\n         * A list of plugin keys that should be installed into Scenes as well as the Core Plugins.\r\n         *\r\n         * @name Phaser.Plugins.PluginManager#scenePlugins\r\n         * @type {string[]}\r\n         * @since 3.8.0\r\n         */\r\n        this.scenePlugins = [];\r\n\r\n        /**\r\n         * A temporary list of plugins to install when the game has booted.\r\n         *\r\n         * @name Phaser.Plugins.PluginManager#_pendingGlobal\r\n         * @private\r\n         * @type {array}\r\n         * @since 3.8.0\r\n         */\r\n        this._pendingGlobal = [];\r\n\r\n        /**\r\n         * A temporary list of scene plugins to install when the game has booted.\r\n         *\r\n         * @name Phaser.Plugins.PluginManager#_pendingScene\r\n         * @private\r\n         * @type {array}\r\n         * @since 3.8.0\r\n         */\r\n        this._pendingScene = [];\r\n\r\n        if (game.isBooted)\r\n        {\r\n            this.boot();\r\n        }\r\n        else\r\n        {\r\n            game.events.once(GameEvents.BOOT, this.boot, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Run once the game has booted and installs all of the plugins configured in the Game Config.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#boot\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var i;\r\n        var entry;\r\n        var key;\r\n        var plugin;\r\n        var start;\r\n        var mapping;\r\n        var data;\r\n        var config = this.game.config;\r\n\r\n        //  Any plugins to install?\r\n        var list = config.installGlobalPlugins;\r\n\r\n        //  Any plugins added outside of the game config, but before the game booted?\r\n        list = list.concat(this._pendingGlobal);\r\n\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            entry = list[i];\r\n\r\n            // { key: 'TestPlugin', plugin: TestPlugin, start: true, mapping: 'test', data: { msg: 'The plugin is alive' } }\r\n\r\n            key = GetFastValue(entry, 'key', null);\r\n            plugin = GetFastValue(entry, 'plugin', null);\r\n            start = GetFastValue(entry, 'start', false);\r\n            mapping = GetFastValue(entry, 'mapping', null);\r\n            data = GetFastValue(entry, 'data', null);\r\n\r\n            if (key)\r\n            {\r\n                if (plugin)\r\n                {\r\n                    this.install(key, plugin, start, mapping, data);\r\n                }\r\n                else\r\n                {\r\n                    console.warn('Missing `plugin` for key: ' + key);\r\n                }\r\n                \r\n            }\r\n        }\r\n\r\n        //  Any scene plugins to install?\r\n        list = config.installScenePlugins;\r\n\r\n        //  Any plugins added outside of the game config, but before the game booted?\r\n        list = list.concat(this._pendingScene);\r\n\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            entry = list[i];\r\n\r\n            // { key: 'moveSpritePlugin', plugin: MoveSpritePlugin, , mapping: 'move' }\r\n\r\n            key = GetFastValue(entry, 'key', null);\r\n            plugin = GetFastValue(entry, 'plugin', null);\r\n            mapping = GetFastValue(entry, 'mapping', null);\r\n\r\n            if (key)\r\n            {\r\n                if (plugin)\r\n                {\r\n                    this.installScenePlugin(key, plugin, mapping);\r\n                }\r\n                else\r\n                {\r\n                    console.warn('Missing `plugin` for key: ' + key);\r\n                }\r\n            }\r\n        }\r\n\r\n        this._pendingGlobal = [];\r\n        this._pendingScene = [];\r\n\r\n        this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Called by the Scene Systems class. Tells the plugin manager to install all Scene plugins into it.\r\n     *\r\n     * First it will install global references, i.e. references from the Game systems into the Scene Systems (and Scene if mapped.)\r\n     * Then it will install Core Scene Plugins followed by Scene Plugins registered with the PluginManager.\r\n     * Finally it will install any references to Global Plugins that have a Scene mapping property into the Scene itself.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#addToScene\r\n     * @protected\r\n     * @since 3.8.0\r\n     *\r\n     * @param {Phaser.Scenes.Systems} sys - The Scene Systems class to install all the plugins in to.\r\n     * @param {array} globalPlugins - An array of global plugins to install.\r\n     * @param {array} scenePlugins - An array of scene plugins to install.\r\n     */\r\n    addToScene: function (sys, globalPlugins, scenePlugins)\r\n    {\r\n        var i;\r\n        var pluginKey;\r\n        var pluginList;\r\n        var game = this.game;\r\n        var scene = sys.scene;\r\n        var map = sys.settings.map;\r\n        var isBooted = sys.settings.isBooted;\r\n\r\n        //  Reference the GlobalPlugins from Game into Scene.Systems\r\n        for (i = 0; i < globalPlugins.length; i++)\r\n        {\r\n            pluginKey = globalPlugins[i];\r\n\r\n            if (game[pluginKey])\r\n            {\r\n                sys[pluginKey] = game[pluginKey];\r\n\r\n                //  Scene level injection\r\n                if (map.hasOwnProperty(pluginKey))\r\n                {\r\n                    scene[map[pluginKey]] = sys[pluginKey];\r\n                }\r\n            }\r\n            else if (pluginKey === 'game' && map.hasOwnProperty(pluginKey))\r\n            {\r\n                scene[map[pluginKey]] = game;\r\n            }\r\n        }\r\n\r\n        for (var s = 0; s < scenePlugins.length; s++)\r\n        {\r\n            pluginList = scenePlugins[s];\r\n\r\n            for (i = 0; i < pluginList.length; i++)\r\n            {\r\n                pluginKey = pluginList[i];\r\n\r\n                if (!PluginCache.hasCore(pluginKey))\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                var source = PluginCache.getCore(pluginKey);\r\n\r\n                var plugin = new source.plugin(scene, this);\r\n                \r\n                sys[source.mapping] = plugin;\r\n\r\n                //  Scene level injection\r\n                if (source.custom)\r\n                {\r\n                    scene[source.mapping] = plugin;\r\n                }\r\n                else if (map.hasOwnProperty(source.mapping))\r\n                {\r\n                    scene[map[source.mapping]] = plugin;\r\n                }\r\n\r\n                //  Scene is already booted, usually because this method is being called at run-time, so boot the plugin\r\n                if (isBooted)\r\n                {\r\n                    plugin.boot();\r\n                }\r\n            }\r\n        }\r\n\r\n        //  And finally, inject any 'global scene plugins'\r\n        pluginList = this.plugins;\r\n\r\n        for (i = 0; i < pluginList.length; i++)\r\n        {\r\n            var entry = pluginList[i];\r\n\r\n            if (entry.mapping)\r\n            {\r\n                scene[entry.mapping] = entry.plugin;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by the Scene Systems class. Returns a list of plugins to be installed.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#getDefaultScenePlugins\r\n     * @protected\r\n     * @since 3.8.0\r\n     *\r\n     * @return {string[]} A list keys of all the Scene Plugins to install.\r\n     */\r\n    getDefaultScenePlugins: function ()\r\n    {\r\n        var list = this.game.config.defaultPlugins;\r\n\r\n        //  Merge in custom Scene plugins\r\n        list = list.concat(this.scenePlugins);\r\n\r\n        return list;\r\n    },\r\n\r\n    /**\r\n     * Installs a new Scene Plugin into the Plugin Manager and optionally adds it\r\n     * to the given Scene as well. A Scene Plugin added to the manager in this way\r\n     * will be automatically installed into all new Scenes using the key and mapping given.\r\n     *\r\n     * The `key` property is what the plugin is injected into Scene.Systems as.\r\n     * The `mapping` property is optional, and if specified is what the plugin is installed into\r\n     * the Scene as. For example:\r\n     *\r\n     * ```javascript\r\n     * this.plugins.installScenePlugin('powerupsPlugin', pluginCode, 'powerups');\r\n     * \r\n     * // and from within the scene:\r\n     * this.sys.powerupsPlugin; // key value\r\n     * this.powerups; // mapping value\r\n     * ```\r\n     *\r\n     * This method is called automatically by Phaser if you install your plugins using either the\r\n     * Game Configuration object, or by preloading them via the Loader.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#installScenePlugin\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The property key that will be used to add this plugin to Scene.Systems.\r\n     * @param {function} plugin - The plugin code. This should be the non-instantiated version.\r\n     * @param {string} [mapping] - If this plugin is injected into the Phaser.Scene class, this is the property key to use.\r\n     * @param {Phaser.Scene} [addToScene] - Optionally automatically add this plugin to the given Scene.\r\n     * @param {boolean} [fromLoader=false] - Is this being called by the Loader?\r\n     */\r\n    installScenePlugin: function (key, plugin, mapping, addToScene, fromLoader)\r\n    {\r\n        if (fromLoader === undefined) { fromLoader = false; }\r\n\r\n        if (typeof plugin !== 'function')\r\n        {\r\n            console.warn('Invalid Scene Plugin: ' + key);\r\n            return;\r\n        }\r\n\r\n        if (!PluginCache.hasCore(key))\r\n        {\r\n            //  Plugin is freshly loaded\r\n            PluginCache.register(key, plugin, mapping, true);\r\n\r\n            this.scenePlugins.push(key);\r\n        }\r\n        else if (!fromLoader && PluginCache.hasCore(key))\r\n        {\r\n            //  Plugin wasn't from the loader but already exists\r\n            console.warn('Scene Plugin key in use: ' + key);\r\n            return;\r\n        }\r\n\r\n        if (addToScene)\r\n        {\r\n            var instance = new plugin(addToScene, this);\r\n\r\n            addToScene.sys[key] = instance;\r\n\r\n            if (mapping && mapping !== '')\r\n            {\r\n                addToScene[mapping] = instance;\r\n            }\r\n\r\n            instance.boot();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Installs a new Global Plugin into the Plugin Manager and optionally starts it running.\r\n     * A global plugin belongs to the Plugin Manager, rather than a specific Scene, and can be accessed\r\n     * and used by all Scenes in your game.\r\n     *\r\n     * The `key` property is what you use to access this plugin from the Plugin Manager.\r\n     *\r\n     * ```javascript\r\n     * this.plugins.install('powerupsPlugin', pluginCode);\r\n     * \r\n     * // and from within the scene:\r\n     * this.plugins.get('powerupsPlugin');\r\n     * ```\r\n     *\r\n     * This method is called automatically by Phaser if you install your plugins using either the\r\n     * Game Configuration object, or by preloading them via the Loader.\r\n     *\r\n     * The same plugin can be installed multiple times into the Plugin Manager by simply giving each\r\n     * instance its own unique key.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#install\r\n     * @since 3.8.0\r\n     * \r\n     * @param {string} key - The unique handle given to this plugin within the Plugin Manager.\r\n     * @param {function} plugin - The plugin code. This should be the non-instantiated version.\r\n     * @param {boolean} [start=false] - Automatically start the plugin running? This is always `true` if you provide a mapping value.\r\n     * @param {string} [mapping] - If this plugin is injected into the Phaser.Scene class, this is the property key to use.\r\n     * @param {any} [data] - A value passed to the plugin's `init` method.\r\n     *\r\n     * @return {?Phaser.Plugins.BasePlugin} The plugin that was started, or `null` if `start` was false, or game isn't yet booted.\r\n     */\r\n    install: function (key, plugin, start, mapping, data)\r\n    {\r\n        if (start === undefined) { start = false; }\r\n        if (mapping === undefined) { mapping = null; }\r\n        if (data === undefined) { data = null; }\r\n\r\n        if (typeof plugin !== 'function')\r\n        {\r\n            console.warn('Invalid Plugin: ' + key);\r\n            return null;\r\n        }\r\n\r\n        if (PluginCache.hasCustom(key))\r\n        {\r\n            console.warn('Plugin key in use: ' + key);\r\n            return null;\r\n        }\r\n\r\n        if (mapping !== null)\r\n        {\r\n            start = true;\r\n        }\r\n\r\n        if (!this.game.isBooted)\r\n        {\r\n            this._pendingGlobal.push({ key: key, plugin: plugin, start: start, mapping: mapping, data: data });\r\n        }\r\n        else\r\n        {\r\n            //  Add it to the plugin store\r\n            PluginCache.registerCustom(key, plugin, mapping, data);\r\n\r\n            if (start)\r\n            {\r\n                return this.start(key);\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Gets an index of a global plugin based on the given key.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#getIndex\r\n     * @protected\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The unique plugin key.\r\n     *\r\n     * @return {integer} The index of the plugin within the plugins array.\r\n     */\r\n    getIndex: function (key)\r\n    {\r\n        var list = this.plugins;\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            var entry = list[i];\r\n\r\n            if (entry.key === key)\r\n            {\r\n                return i;\r\n            }\r\n        }\r\n\r\n        return -1;\r\n    },\r\n\r\n    /**\r\n     * Gets a global plugin based on the given key.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#getEntry\r\n     * @protected\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The unique plugin key.\r\n     *\r\n     * @return {Phaser.Types.Plugins.GlobalPlugin} The plugin entry.\r\n     */\r\n    getEntry: function (key)\r\n    {\r\n        var idx = this.getIndex(key);\r\n\r\n        if (idx !== -1)\r\n        {\r\n            return this.plugins[idx];\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks if the given global plugin, based on its key, is active or not.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#isActive\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The unique plugin key.\r\n     *\r\n     * @return {boolean} `true` if the plugin is active, otherwise `false`.\r\n     */\r\n    isActive: function (key)\r\n    {\r\n        var entry = this.getEntry(key);\r\n\r\n        return (entry && entry.active);\r\n    },\r\n\r\n    /**\r\n     * Starts a global plugin running.\r\n     *\r\n     * If the plugin was previously active then calling `start` will reset it to an active state and then\r\n     * call its `start` method.\r\n     *\r\n     * If the plugin has never been run before a new instance of it will be created within the Plugin Manager,\r\n     * its active state set and then both of its `init` and `start` methods called, in that order.\r\n     *\r\n     * If the plugin is already running under the given key then nothing happens.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#start\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to start.\r\n     * @param {string} [runAs] - Run the plugin under a new key. This allows you to run one plugin multiple times.\r\n     *\r\n     * @return {?Phaser.Plugins.BasePlugin} The plugin that was started, or `null` if invalid key given or plugin is already stopped.\r\n     */\r\n    start: function (key, runAs)\r\n    {\r\n        if (runAs === undefined) { runAs = key; }\r\n\r\n        var entry = this.getEntry(runAs);\r\n\r\n        //  Plugin already running under this key?\r\n        if (entry && !entry.active)\r\n        {\r\n            //  It exists, we just need to start it up again\r\n            entry.active = true;\r\n            entry.plugin.start();\r\n        }\r\n        else if (!entry)\r\n        {\r\n            entry = this.createEntry(key, runAs);\r\n        }\r\n\r\n        return (entry) ? entry.plugin : null;\r\n    },\r\n\r\n    /**\r\n     * Creates a new instance of a global plugin, adds an entry into the plugins array and returns it.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#createEntry\r\n     * @private\r\n     * @since 3.9.0\r\n     *\r\n     * @param {string} key - The key of the plugin to create an instance of.\r\n     * @param {string} [runAs] - Run the plugin under a new key. This allows you to run one plugin multiple times.\r\n     *\r\n     * @return {?Phaser.Plugins.BasePlugin} The plugin that was started, or `null` if invalid key given.\r\n     */\r\n    createEntry: function (key, runAs)\r\n    {\r\n        var entry = PluginCache.getCustom(key);\r\n\r\n        if (entry)\r\n        {\r\n            var instance = new entry.plugin(this);\r\n\r\n            entry = {\r\n                key: runAs,\r\n                plugin: instance,\r\n                active: true,\r\n                mapping: entry.mapping,\r\n                data: entry.data\r\n            };\r\n\r\n            this.plugins.push(entry);\r\n\r\n            instance.init(entry.data);\r\n            instance.start();\r\n        }\r\n\r\n        return entry;\r\n    },\r\n\r\n    /**\r\n     * Stops a global plugin from running.\r\n     *\r\n     * If the plugin is active then its active state will be set to false and the plugins `stop` method\r\n     * will be called.\r\n     *\r\n     * If the plugin is not already running, nothing will happen.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#stop\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to stop.\r\n     *\r\n     * @return {Phaser.Plugins.PluginManager} The Plugin Manager.\r\n     */\r\n    stop: function (key)\r\n    {\r\n        var entry = this.getEntry(key);\r\n\r\n        if (entry && entry.active)\r\n        {\r\n            entry.active = false;\r\n            entry.plugin.stop();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets a global plugin from the Plugin Manager based on the given key and returns it.\r\n     *\r\n     * If it cannot find an active plugin based on the key, but there is one in the Plugin Cache with the same key,\r\n     * then it will create a new instance of the cached plugin and return that.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#get\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to get.\r\n     * @param {boolean} [autoStart=true] - Automatically start a new instance of the plugin if found in the cache, but not actively running.\r\n     *\r\n     * @return {?(Phaser.Plugins.BasePlugin|function)} The plugin, or `null` if no plugin was found matching the key.\r\n     */\r\n    get: function (key, autoStart)\r\n    {\r\n        if (autoStart === undefined) { autoStart = true; }\r\n\r\n        var entry = this.getEntry(key);\r\n\r\n        if (entry)\r\n        {\r\n            return entry.plugin;\r\n        }\r\n        else\r\n        {\r\n            var plugin = this.getClass(key);\r\n\r\n            if (plugin && autoStart)\r\n            {\r\n                entry = this.createEntry(key, key);\r\n\r\n                return (entry) ? entry.plugin : null;\r\n            }\r\n            else if (plugin)\r\n            {\r\n                return plugin;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Returns the plugin class from the cache.\r\n     * Used internally by the Plugin Manager.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#getClass\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to get.\r\n     *\r\n     * @return {Phaser.Plugins.BasePlugin} A Plugin object\r\n     */\r\n    getClass: function (key)\r\n    {\r\n        return PluginCache.getCustomClass(key);\r\n    },\r\n\r\n    /**\r\n     * Removes a global plugin from the Plugin Manager and Plugin Cache.\r\n     *\r\n     * It is up to you to remove all references to this plugin that you may hold within your game code.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#removeGlobalPlugin\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to remove.\r\n     */\r\n    removeGlobalPlugin: function (key)\r\n    {\r\n        var entry = this.getEntry(key);\r\n\r\n        if (entry)\r\n        {\r\n            Remove(this.plugins, entry);\r\n        }\r\n\r\n        PluginCache.removeCustom(key);\r\n    },\r\n\r\n    /**\r\n     * Removes a scene plugin from the Plugin Manager and Plugin Cache.\r\n     *\r\n     * This will not remove the plugin from any active Scenes that are already using it.\r\n     *\r\n     * It is up to you to remove all references to this plugin that you may hold within your game code.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#removeScenePlugin\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the plugin to remove.\r\n     */\r\n    removeScenePlugin: function (key)\r\n    {\r\n        Remove(this.scenePlugins, key);\r\n\r\n        PluginCache.remove(key);\r\n    },\r\n\r\n    /**\r\n     * Registers a new type of Game Object with the global Game Object Factory and / or Creator.\r\n     * This is usually called from within your Plugin code and is a helpful short-cut for creating\r\n     * new Game Objects.\r\n     *\r\n     * The key is the property that will be injected into the factories and used to create the\r\n     * Game Object. For example:\r\n     *\r\n     * ```javascript\r\n     * this.plugins.registerGameObject('clown', clownFactoryCallback, clownCreatorCallback);\r\n     * // later in your game code:\r\n     * this.add.clown();\r\n     * this.make.clown();\r\n     * ```\r\n     * \r\n     * The callbacks are what are called when the factories try to create a Game Object\r\n     * matching the given key. It's important to understand that the callbacks are invoked within\r\n     * the context of the GameObjectFactory. In this context there are several properties available\r\n     * to use:\r\n     * \r\n     * this.scene - A reference to the Scene that owns the GameObjectFactory.\r\n     * this.displayList - A reference to the Display List the Scene owns.\r\n     * this.updateList - A reference to the Update List the Scene owns.\r\n     * \r\n     * See the GameObjectFactory and GameObjectCreator classes for more details.\r\n     * Any public property or method listed is available from your callbacks under `this`.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#registerGameObject\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the Game Object that the given callbacks will create, i.e. `image`, `sprite`.\r\n     * @param {function} [factoryCallback] - The callback to invoke when the Game Object Factory is called.\r\n     * @param {function} [creatorCallback] - The callback to invoke when the Game Object Creator is called.\r\n     */\r\n    registerGameObject: function (key, factoryCallback, creatorCallback)\r\n    {\r\n        if (factoryCallback)\r\n        {\r\n            GameObjectFactory.register(key, factoryCallback);\r\n        }\r\n\r\n        if (creatorCallback)\r\n        {\r\n            GameObjectCreator.register(key, creatorCallback);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a previously registered Game Object from the global Game Object Factory and / or Creator.\r\n     * This is usually called from within your Plugin destruction code to help clean-up after your plugin has been removed.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#removeGameObject\r\n     * @since 3.19.0\r\n     *\r\n     * @param {string} key - The key of the Game Object to be removed from the factories.\r\n     * @param {boolean} [removeFromFactory=true] - Should the Game Object be removed from the Game Object Factory?\r\n     * @param {boolean} [removeFromCreator=true] - Should the Game Object be removed from the Game Object Creator?\r\n     */\r\n    removeGameObject: function (key, removeFromFactory, removeFromCreator)\r\n    {\r\n        if (removeFromFactory === undefined) { removeFromFactory = true; }\r\n        if (removeFromCreator === undefined) { removeFromCreator = true; }\r\n\r\n        if (removeFromFactory)\r\n        {\r\n            GameObjectFactory.remove(key);\r\n        }\r\n\r\n        if (removeFromCreator)\r\n        {\r\n            GameObjectCreator.remove(key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Registers a new file type with the global File Types Manager, making it available to all Loader\r\n     * Plugins created after this.\r\n     * \r\n     * This is usually called from within your Plugin code and is a helpful short-cut for creating\r\n     * new loader file types.\r\n     *\r\n     * The key is the property that will be injected into the Loader Plugin and used to load the\r\n     * files. For example:\r\n     *\r\n     * ```javascript\r\n     * this.plugins.registerFileType('wad', doomWadLoaderCallback);\r\n     * // later in your preload code:\r\n     * this.load.wad();\r\n     * ```\r\n     * \r\n     * The callback is what is called when the loader tries to load a file  matching the given key.\r\n     * It's important to understand that the callback is invoked within\r\n     * the context of the LoaderPlugin. In this context there are several properties / methods available\r\n     * to use:\r\n     * \r\n     * this.addFile - A method to add the new file to the load queue.\r\n     * this.scene - The Scene that owns the Loader Plugin instance.\r\n     *\r\n     * See the LoaderPlugin class for more details. Any public property or method listed is available from\r\n     * your callback under `this`.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#registerFileType\r\n     * @since 3.8.0\r\n     *\r\n     * @param {string} key - The key of the Game Object that the given callbacks will create, i.e. `image`, `sprite`.\r\n     * @param {function} callback - The callback to invoke when the Game Object Factory is called.\r\n     * @param {Phaser.Scene} [addToScene] - Optionally add this file type into the Loader Plugin owned by the given Scene.\r\n     */\r\n    registerFileType: function (key, callback, addToScene)\r\n    {\r\n        FileTypesManager.register(key, callback);\r\n\r\n        if (addToScene && addToScene.sys.load)\r\n        {\r\n            addToScene.sys.load[key] = callback;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Plugin Manager and all associated plugins.\r\n     * It will iterate all plugins found and call their `destroy` methods.\r\n     * \r\n     * The PluginCache will remove all custom plugins.\r\n     *\r\n     * @method Phaser.Plugins.PluginManager#destroy\r\n     * @since 3.8.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        for (var i = 0; i < this.plugins.length; i++)\r\n        {\r\n            this.plugins[i].plugin.destroy();\r\n        }\r\n\r\n        PluginCache.destroyCustomPlugins();\r\n\r\n        if (this.game.noReturn)\r\n        {\r\n            PluginCache.destroyCorePlugins();\r\n        }\r\n\r\n        this.game = null;\r\n        this.plugins = [];\r\n        this.scenePlugins = [];\r\n    }\r\n\r\n});\r\n\r\n/*\r\n * \"Sometimes, the elegant implementation is just a function.\r\n * Not a method. Not a class. Not a framework. Just a function.\"\r\n *  -- John Carmack\r\n */\r\n\r\nmodule.exports = PluginManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL1BsdWdpbk1hbmFnZXIuanM/OThmZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDekMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQTRCO0FBQzNELHdCQUF3QixtQkFBTyxDQUFDLG9HQUFrQztBQUNsRSx3QkFBd0IsbUJBQU8sQ0FBQyxvR0FBa0M7QUFDbEUsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGtCQUFrQixtQkFBTyxDQUFDLHVFQUFlO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQyw4RUFBdUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQSxnQkFBZ0IsNkVBQTZFLDZCQUE2Qjs7QUFFMUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUEsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxvQkFBb0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlO0FBQ2pELG9DQUFvQyxnQkFBZ0I7QUFDcEQsaUNBQWlDLGFBQWE7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDLHVFQUF1RTtBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTs7QUFFL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msa0JBQWtCOztBQUV4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywwQkFBMEI7QUFDeEUsOENBQThDLDBCQUEwQjs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxhQUFhO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcGx1Z2lucy9QbHVnaW5NYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbG9hZGVyL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi9QbHVnaW5DYWNoZScpO1xyXG52YXIgUmVtb3ZlID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvUmVtb3ZlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgUGx1Z2luTWFuYWdlciBpcyByZXNwb25zaWJsZSBmb3IgaW5zdGFsbGluZyBhbmQgYWRkaW5nIHBsdWdpbnMgdG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBJdCBpcyBhIGdsb2JhbCBzeXN0ZW0gYW5kIHRoZXJlZm9yZSBiZWxvbmdzIHRvIHRoZSBHYW1lIGluc3RhbmNlLCBub3QgYSBzcGVjaWZpYyBTY2VuZS5cclxuICpcclxuICogSXQgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUGx1Z2luQ2FjaGUuIENvcmUgaW50ZXJuYWwgcGx1Z2lucyBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgXHJcbiAqIHdpdGggdGhlIENhY2hlLCBidXQgaXQncyB0aGUgUGx1Z2luIE1hbmFnZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgaW5qZWN0aW5nIHRoZW0gaW50byB0aGUgU2NlbmVzLlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHBsdWdpbjpcclxuICpcclxuICogMS4gQSBHbG9iYWwgUGx1Z2luXHJcbiAqIDIuIEEgU2NlbmUgUGx1Z2luXHJcbiAqXHJcbiAqIEEgR2xvYmFsIFBsdWdpbiBpcyBhIHBsdWdpbiB0aGF0IGxpdmVzIHdpdGhpbiB0aGUgUGx1Z2luIE1hbmFnZXIgcmF0aGVyIHRoYW4gYSBTY2VuZS4gWW91IGNhbiBnZXRcclxuICogYWNjZXNzIHRvIGl0IGJ5IGNhbGxpbmcgYFBsdWdpbk1hbmFnZXIuZ2V0YCBhbmQgcHJvdmlkaW5nIGEga2V5LiBBbnkgU2NlbmUgdGhhdCByZXF1ZXN0cyBhIHBsdWdpbiBpblxyXG4gKiB0aGlzIHdheSB3aWxsIGFsbCBnZXQgYWNjZXNzIHRvIHRoZSBzYW1lIHBsdWdpbiBpbnN0YW5jZSwgYWxsb3dpbmcgeW91IHRvIHVzZSBhIHNpbmdsZSBwbHVnaW4gYWNyb3NzXHJcbiAqIG11bHRpcGxlIFNjZW5lcy5cclxuICpcclxuICogQSBTY2VuZSBQbHVnaW4gaXMgYSBwbHVnaW4gZGVkaWNhdGVkIHRvIHJ1bm5pbmcgd2l0aGluIGEgU2NlbmUuIFRoZXNlIGFyZSBkaWZmZXJlbnQgdG8gR2xvYmFsIFBsdWdpbnNcclxuICogaW4gdGhhdCB0aGVpciBpbnN0YW5jZXMgZG8gbm90IGxpdmUgd2l0aGluIHRoZSBQbHVnaW4gTWFuYWdlciwgYnV0IHdpdGhpbiB0aGUgU2NlbmUgU3lzdGVtcyBjbGFzcyBpbnN0ZWFkLlxyXG4gKiBBbmQgdGhhdCBldmVyeSBTY2VuZSBjcmVhdGVkIGlzIGdpdmVuIGl0cyBvd24gdW5pcXVlIGluc3RhbmNlIG9mIGEgU2NlbmUgUGx1Z2luLiBFeGFtcGxlcyBvZiBjb3JlIFNjZW5lXHJcbiAqIFBsdWdpbnMgaW5jbHVkZSB0aGUgSW5wdXQgUGx1Z2luLCB0aGUgVHdlZW4gUGx1Z2luIGFuZCB0aGUgcGh5c2ljcyBQbHVnaW5zLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGFkZCBhIHBsdWdpbiB0byBQaGFzZXIgaW4gdGhyZWUgZGlmZmVyZW50IHdheXM6XHJcbiAqXHJcbiAqIDEuIFByZWxvYWQgaXRcclxuICogMi4gSW5jbHVkZSBpdCBpbiB5b3VyIHNvdXJjZSBjb2RlIGFuZCBpbnN0YWxsIGl0IHZpYSB0aGUgR2FtZSBDb25maWdcclxuICogMy4gSW5jbHVkZSBpdCBpbiB5b3VyIHNvdXJjZSBjb2RlIGFuZCBpbnN0YWxsIGl0IHdpdGhpbiBhIFNjZW5lXHJcbiAqXHJcbiAqIEZvciBleGFtcGxlcyBvZiBhbGwgb2YgdGhlc2UgYXBwcm9hY2hlcyBwbGVhc2Ugc2VlIHRoZSBQaGFzZXIgMyBFeGFtcGxlcyBSZXBvIGBwbHVnaW5zYCBmb2xkZXIuXHJcbiAqXHJcbiAqIEZvciBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyB5b3VyIG93biBwbHVnaW4gcGxlYXNlIHNlZSB0aGUgUGhhc2VyIDMgUGx1Z2luIFRlbXBsYXRlLlxyXG4gKlxyXG4gKiBAY2xhc3MgUGx1Z2luTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlBsdWdpbnNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIGdhbWUgaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgUGx1Z2luIE1hbmFnZXIuXHJcbiAqL1xyXG52YXIgUGx1Z2luTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUGx1Z2luTWFuYWdlciAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdhbWUgaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgUGx1Z2luIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdsb2JhbCBwbHVnaW5zIGN1cnJlbnRseSBydW5uaW5nIGFuZCBtYW5hZ2VkIGJ5IHRoaXMgUGx1Z2luIE1hbmFnZXIuXHJcbiAgICAgICAgICogQSBwbHVnaW4gbXVzdCBoYXZlIGJlZW4gc3RhcnRlZCBhdCBsZWFzdCBvbmNlIGluIG9yZGVyIHRvIGFwcGVhciBpbiB0aGlzIGxpc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI3BsdWdpbnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlBsdWdpbnMuR2xvYmFsUGx1Z2luW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBwbHVnaW4ga2V5cyB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgaW50byBTY2VuZXMgYXMgd2VsbCBhcyB0aGUgQ29yZSBQbHVnaW5zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNzY2VuZVBsdWdpbnNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZVBsdWdpbnMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgbGlzdCBvZiBwbHVnaW5zIHRvIGluc3RhbGwgd2hlbiB0aGUgZ2FtZSBoYXMgYm9vdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNfcGVuZGluZ0dsb2JhbFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdHbG9iYWwgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgbGlzdCBvZiBzY2VuZSBwbHVnaW5zIHRvIGluc3RhbGwgd2hlbiB0aGUgZ2FtZSBoYXMgYm9vdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNfcGVuZGluZ1NjZW5lXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1NjZW5lID0gW107XHJcblxyXG4gICAgICAgIGlmIChnYW1lLmlzQm9vdGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ib290KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSdW4gb25jZSB0aGUgZ2FtZSBoYXMgYm9vdGVkIGFuZCBpbnN0YWxscyBhbGwgb2YgdGhlIHBsdWdpbnMgY29uZmlndXJlZCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBlbnRyeTtcclxuICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgIHZhciBwbHVnaW47XHJcbiAgICAgICAgdmFyIHN0YXJ0O1xyXG4gICAgICAgIHZhciBtYXBwaW5nO1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmdhbWUuY29uZmlnO1xyXG5cclxuICAgICAgICAvLyAgQW55IHBsdWdpbnMgdG8gaW5zdGFsbD9cclxuICAgICAgICB2YXIgbGlzdCA9IGNvbmZpZy5pbnN0YWxsR2xvYmFsUGx1Z2lucztcclxuXHJcbiAgICAgICAgLy8gIEFueSBwbHVnaW5zIGFkZGVkIG91dHNpZGUgb2YgdGhlIGdhbWUgY29uZmlnLCBidXQgYmVmb3JlIHRoZSBnYW1lIGJvb3RlZD9cclxuICAgICAgICBsaXN0ID0gbGlzdC5jb25jYXQodGhpcy5fcGVuZGluZ0dsb2JhbCk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW50cnkgPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgLy8geyBrZXk6ICdUZXN0UGx1Z2luJywgcGx1Z2luOiBUZXN0UGx1Z2luLCBzdGFydDogdHJ1ZSwgbWFwcGluZzogJ3Rlc3QnLCBkYXRhOiB7IG1zZzogJ1RoZSBwbHVnaW4gaXMgYWxpdmUnIH0gfVxyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGVudHJ5LCAna2V5JywgbnVsbCk7XHJcbiAgICAgICAgICAgIHBsdWdpbiA9IEdldEZhc3RWYWx1ZShlbnRyeSwgJ3BsdWdpbicsIG51bGwpO1xyXG4gICAgICAgICAgICBzdGFydCA9IEdldEZhc3RWYWx1ZShlbnRyeSwgJ3N0YXJ0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICBtYXBwaW5nID0gR2V0RmFzdFZhbHVlKGVudHJ5LCAnbWFwcGluZycsIG51bGwpO1xyXG4gICAgICAgICAgICBkYXRhID0gR2V0RmFzdFZhbHVlKGVudHJ5LCAnZGF0YScsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGwoa2V5LCBwbHVnaW4sIHN0YXJ0LCBtYXBwaW5nLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgYHBsdWdpbmAgZm9yIGtleTogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFueSBzY2VuZSBwbHVnaW5zIHRvIGluc3RhbGw/XHJcbiAgICAgICAgbGlzdCA9IGNvbmZpZy5pbnN0YWxsU2NlbmVQbHVnaW5zO1xyXG5cclxuICAgICAgICAvLyAgQW55IHBsdWdpbnMgYWRkZWQgb3V0c2lkZSBvZiB0aGUgZ2FtZSBjb25maWcsIGJ1dCBiZWZvcmUgdGhlIGdhbWUgYm9vdGVkP1xyXG4gICAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdCh0aGlzLl9wZW5kaW5nU2NlbmUpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJ5ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHsga2V5OiAnbW92ZVNwcml0ZVBsdWdpbicsIHBsdWdpbjogTW92ZVNwcml0ZVBsdWdpbiwgLCBtYXBwaW5nOiAnbW92ZScgfVxyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGVudHJ5LCAna2V5JywgbnVsbCk7XHJcbiAgICAgICAgICAgIHBsdWdpbiA9IEdldEZhc3RWYWx1ZShlbnRyeSwgJ3BsdWdpbicsIG51bGwpO1xyXG4gICAgICAgICAgICBtYXBwaW5nID0gR2V0RmFzdFZhbHVlKGVudHJ5LCAnbWFwcGluZycsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxTY2VuZVBsdWdpbihrZXksIHBsdWdpbiwgbWFwcGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNzaW5nIGBwbHVnaW5gIGZvciBrZXk6ICcgKyBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wZW5kaW5nR2xvYmFsID0gW107XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1NjZW5lID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub25jZShHYW1lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzLiBUZWxscyB0aGUgcGx1Z2luIG1hbmFnZXIgdG8gaW5zdGFsbCBhbGwgU2NlbmUgcGx1Z2lucyBpbnRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEZpcnN0IGl0IHdpbGwgaW5zdGFsbCBnbG9iYWwgcmVmZXJlbmNlcywgaS5lLiByZWZlcmVuY2VzIGZyb20gdGhlIEdhbWUgc3lzdGVtcyBpbnRvIHRoZSBTY2VuZSBTeXN0ZW1zIChhbmQgU2NlbmUgaWYgbWFwcGVkLilcclxuICAgICAqIFRoZW4gaXQgd2lsbCBpbnN0YWxsIENvcmUgU2NlbmUgUGx1Z2lucyBmb2xsb3dlZCBieSBTY2VuZSBQbHVnaW5zIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlci5cclxuICAgICAqIEZpbmFsbHkgaXQgd2lsbCBpbnN0YWxsIGFueSByZWZlcmVuY2VzIHRvIEdsb2JhbCBQbHVnaW5zIHRoYXQgaGF2ZSBhIFNjZW5lIG1hcHBpbmcgcHJvcGVydHkgaW50byB0aGUgU2NlbmUgaXRzZWxmLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNhZGRUb1NjZW5lXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gVGhlIFNjZW5lIFN5c3RlbXMgY2xhc3MgdG8gaW5zdGFsbCBhbGwgdGhlIHBsdWdpbnMgaW4gdG8uXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBnbG9iYWxQbHVnaW5zIC0gQW4gYXJyYXkgb2YgZ2xvYmFsIHBsdWdpbnMgdG8gaW5zdGFsbC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHNjZW5lUGx1Z2lucyAtIEFuIGFycmF5IG9mIHNjZW5lIHBsdWdpbnMgdG8gaW5zdGFsbC5cclxuICAgICAqL1xyXG4gICAgYWRkVG9TY2VuZTogZnVuY3Rpb24gKHN5cywgZ2xvYmFsUGx1Z2lucywgc2NlbmVQbHVnaW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBwbHVnaW5LZXk7XHJcbiAgICAgICAgdmFyIHBsdWdpbkxpc3Q7XHJcbiAgICAgICAgdmFyIGdhbWUgPSB0aGlzLmdhbWU7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gc3lzLnNjZW5lO1xyXG4gICAgICAgIHZhciBtYXAgPSBzeXMuc2V0dGluZ3MubWFwO1xyXG4gICAgICAgIHZhciBpc0Jvb3RlZCA9IHN5cy5zZXR0aW5ncy5pc0Jvb3RlZDtcclxuXHJcbiAgICAgICAgLy8gIFJlZmVyZW5jZSB0aGUgR2xvYmFsUGx1Z2lucyBmcm9tIEdhbWUgaW50byBTY2VuZS5TeXN0ZW1zXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdsb2JhbFBsdWdpbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbHVnaW5LZXkgPSBnbG9iYWxQbHVnaW5zW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVbcGx1Z2luS2V5XSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3lzW3BsdWdpbktleV0gPSBnYW1lW3BsdWdpbktleV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFNjZW5lIGxldmVsIGluamVjdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hcC5oYXNPd25Qcm9wZXJ0eShwbHVnaW5LZXkpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lW21hcFtwbHVnaW5LZXldXSA9IHN5c1twbHVnaW5LZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBsdWdpbktleSA9PT0gJ2dhbWUnICYmIG1hcC5oYXNPd25Qcm9wZXJ0eShwbHVnaW5LZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzY2VuZVttYXBbcGx1Z2luS2V5XV0gPSBnYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHNjZW5lUGx1Z2lucy5sZW5ndGg7IHMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBsdWdpbkxpc3QgPSBzY2VuZVBsdWdpbnNbc107XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2luTGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luS2V5ID0gcGx1Z2luTGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIVBsdWdpbkNhY2hlLmhhc0NvcmUocGx1Z2luS2V5KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gUGx1Z2luQ2FjaGUuZ2V0Q29yZShwbHVnaW5LZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwbHVnaW4gPSBuZXcgc291cmNlLnBsdWdpbihzY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHN5c1tzb3VyY2UubWFwcGluZ10gPSBwbHVnaW47XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFNjZW5lIGxldmVsIGluamVjdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jdXN0b20pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmVbc291cmNlLm1hcHBpbmddID0gcGx1Z2luO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWFwLmhhc093blByb3BlcnR5KHNvdXJjZS5tYXBwaW5nKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZVttYXBbc291cmNlLm1hcHBpbmddXSA9IHBsdWdpbjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgU2NlbmUgaXMgYWxyZWFkeSBib290ZWQsIHVzdWFsbHkgYmVjYXVzZSB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgYXQgcnVuLXRpbWUsIHNvIGJvb3QgdGhlIHBsdWdpblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzQm9vdGVkKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5ib290KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBBbmQgZmluYWxseSwgaW5qZWN0IGFueSAnZ2xvYmFsIHNjZW5lIHBsdWdpbnMnXHJcbiAgICAgICAgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2lucztcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsdWdpbkxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSBwbHVnaW5MaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5Lm1hcHBpbmcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNjZW5lW2VudHJ5Lm1hcHBpbmddID0gZW50cnkucGx1Z2luO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgU2NlbmUgU3lzdGVtcyBjbGFzcy4gUmV0dXJucyBhIGxpc3Qgb2YgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2dldERlZmF1bHRTY2VuZVBsdWdpbnNcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBIGxpc3Qga2V5cyBvZiBhbGwgdGhlIFNjZW5lIFBsdWdpbnMgdG8gaW5zdGFsbC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGVmYXVsdFNjZW5lUGx1Z2luczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuZ2FtZS5jb25maWcuZGVmYXVsdFBsdWdpbnM7XHJcblxyXG4gICAgICAgIC8vICBNZXJnZSBpbiBjdXN0b20gU2NlbmUgcGx1Z2luc1xyXG4gICAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdCh0aGlzLnNjZW5lUGx1Z2lucyk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc3RhbGxzIGEgbmV3IFNjZW5lIFBsdWdpbiBpbnRvIHRoZSBQbHVnaW4gTWFuYWdlciBhbmQgb3B0aW9uYWxseSBhZGRzIGl0XHJcbiAgICAgKiB0byB0aGUgZ2l2ZW4gU2NlbmUgYXMgd2VsbC4gQSBTY2VuZSBQbHVnaW4gYWRkZWQgdG8gdGhlIG1hbmFnZXIgaW4gdGhpcyB3YXlcclxuICAgICAqIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgaW50byBhbGwgbmV3IFNjZW5lcyB1c2luZyB0aGUga2V5IGFuZCBtYXBwaW5nIGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBga2V5YCBwcm9wZXJ0eSBpcyB3aGF0IHRoZSBwbHVnaW4gaXMgaW5qZWN0ZWQgaW50byBTY2VuZS5TeXN0ZW1zIGFzLlxyXG4gICAgICogVGhlIGBtYXBwaW5nYCBwcm9wZXJ0eSBpcyBvcHRpb25hbCwgYW5kIGlmIHNwZWNpZmllZCBpcyB3aGF0IHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGludG9cclxuICAgICAqIHRoZSBTY2VuZSBhcy4gRm9yIGV4YW1wbGU6XHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5wbHVnaW5zLmluc3RhbGxTY2VuZVBsdWdpbigncG93ZXJ1cHNQbHVnaW4nLCBwbHVnaW5Db2RlLCAncG93ZXJ1cHMnKTtcclxuICAgICAqIFxyXG4gICAgICogLy8gYW5kIGZyb20gd2l0aGluIHRoZSBzY2VuZTpcclxuICAgICAqIHRoaXMuc3lzLnBvd2VydXBzUGx1Z2luOyAvLyBrZXkgdmFsdWVcclxuICAgICAqIHRoaXMucG93ZXJ1cHM7IC8vIG1hcHBpbmcgdmFsdWVcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IFBoYXNlciBpZiB5b3UgaW5zdGFsbCB5b3VyIHBsdWdpbnMgdXNpbmcgZWl0aGVyIHRoZVxyXG4gICAgICogR2FtZSBDb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYnkgcHJlbG9hZGluZyB0aGVtIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNpbnN0YWxsU2NlbmVQbHVnaW5cclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGFkZCB0aGlzIHBsdWdpbiB0byBTY2VuZS5TeXN0ZW1zLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcGx1Z2luIC0gVGhlIHBsdWdpbiBjb2RlLiBUaGlzIHNob3VsZCBiZSB0aGUgbm9uLWluc3RhbnRpYXRlZCB2ZXJzaW9uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFttYXBwaW5nXSAtIElmIHRoaXMgcGx1Z2luIGlzIGluamVjdGVkIGludG8gdGhlIFBoYXNlci5TY2VuZSBjbGFzcywgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IHRvIHVzZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBbYWRkVG9TY2VuZV0gLSBPcHRpb25hbGx5IGF1dG9tYXRpY2FsbHkgYWRkIHRoaXMgcGx1Z2luIHRvIHRoZSBnaXZlbiBTY2VuZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21Mb2FkZXI9ZmFsc2VdIC0gSXMgdGhpcyBiZWluZyBjYWxsZWQgYnkgdGhlIExvYWRlcj9cclxuICAgICAqL1xyXG4gICAgaW5zdGFsbFNjZW5lUGx1Z2luOiBmdW5jdGlvbiAoa2V5LCBwbHVnaW4sIG1hcHBpbmcsIGFkZFRvU2NlbmUsIGZyb21Mb2FkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZyb21Mb2FkZXIgPT09IHVuZGVmaW5lZCkgeyBmcm9tTG9hZGVyID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4gIT09ICdmdW5jdGlvbicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgU2NlbmUgUGx1Z2luOiAnICsga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFQbHVnaW5DYWNoZS5oYXNDb3JlKGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUGx1Z2luIGlzIGZyZXNobHkgbG9hZGVkXHJcbiAgICAgICAgICAgIFBsdWdpbkNhY2hlLnJlZ2lzdGVyKGtleSwgcGx1Z2luLCBtYXBwaW5nLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVQbHVnaW5zLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWZyb21Mb2FkZXIgJiYgUGx1Z2luQ2FjaGUuaGFzQ29yZShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFBsdWdpbiB3YXNuJ3QgZnJvbSB0aGUgbG9hZGVyIGJ1dCBhbHJlYWR5IGV4aXN0c1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjZW5lIFBsdWdpbiBrZXkgaW4gdXNlOiAnICsga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFkZFRvU2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgcGx1Z2luKGFkZFRvU2NlbmUsIHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgYWRkVG9TY2VuZS5zeXNba2V5XSA9IGluc3RhbmNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hcHBpbmcgJiYgbWFwcGluZyAhPT0gJycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkZFRvU2NlbmVbbWFwcGluZ10gPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaW5zdGFuY2UuYm9vdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnN0YWxscyBhIG5ldyBHbG9iYWwgUGx1Z2luIGludG8gdGhlIFBsdWdpbiBNYW5hZ2VyIGFuZCBvcHRpb25hbGx5IHN0YXJ0cyBpdCBydW5uaW5nLlxyXG4gICAgICogQSBnbG9iYWwgcGx1Z2luIGJlbG9uZ3MgdG8gdGhlIFBsdWdpbiBNYW5hZ2VyLCByYXRoZXIgdGhhbiBhIHNwZWNpZmljIFNjZW5lLCBhbmQgY2FuIGJlIGFjY2Vzc2VkXHJcbiAgICAgKiBhbmQgdXNlZCBieSBhbGwgU2NlbmVzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYGtleWAgcHJvcGVydHkgaXMgd2hhdCB5b3UgdXNlIHRvIGFjY2VzcyB0aGlzIHBsdWdpbiBmcm9tIHRoZSBQbHVnaW4gTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLnBsdWdpbnMuaW5zdGFsbCgncG93ZXJ1cHNQbHVnaW4nLCBwbHVnaW5Db2RlKTtcclxuICAgICAqIFxyXG4gICAgICogLy8gYW5kIGZyb20gd2l0aGluIHRoZSBzY2VuZTpcclxuICAgICAqIHRoaXMucGx1Z2lucy5nZXQoJ3Bvd2VydXBzUGx1Z2luJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBQaGFzZXIgaWYgeW91IGluc3RhbGwgeW91ciBwbHVnaW5zIHVzaW5nIGVpdGhlciB0aGVcclxuICAgICAqIEdhbWUgQ29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGJ5IHByZWxvYWRpbmcgdGhlbSB2aWEgdGhlIExvYWRlci5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgc2FtZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbnRvIHRoZSBQbHVnaW4gTWFuYWdlciBieSBzaW1wbHkgZ2l2aW5nIGVhY2hcclxuICAgICAqIGluc3RhbmNlIGl0cyBvd24gdW5pcXVlIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjaW5zdGFsbFxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGhhbmRsZSBnaXZlbiB0byB0aGlzIHBsdWdpbiB3aXRoaW4gdGhlIFBsdWdpbiBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcGx1Z2luIC0gVGhlIHBsdWdpbiBjb2RlLiBUaGlzIHNob3VsZCBiZSB0aGUgbm9uLWluc3RhbnRpYXRlZCB2ZXJzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3RhcnQ9ZmFsc2VdIC0gQXV0b21hdGljYWxseSBzdGFydCB0aGUgcGx1Z2luIHJ1bm5pbmc/IFRoaXMgaXMgYWx3YXlzIGB0cnVlYCBpZiB5b3UgcHJvdmlkZSBhIG1hcHBpbmcgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW21hcHBpbmddIC0gSWYgdGhpcyBwbHVnaW4gaXMgaW5qZWN0ZWQgaW50byB0aGUgUGhhc2VyLlNjZW5lIGNsYXNzLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtkYXRhXSAtIEEgdmFsdWUgcGFzc2VkIHRvIHRoZSBwbHVnaW4ncyBgaW5pdGAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2lufSBUaGUgcGx1Z2luIHRoYXQgd2FzIHN0YXJ0ZWQsIG9yIGBudWxsYCBpZiBgc3RhcnRgIHdhcyBmYWxzZSwgb3IgZ2FtZSBpc24ndCB5ZXQgYm9vdGVkLlxyXG4gICAgICovXHJcbiAgICBpbnN0YWxsOiBmdW5jdGlvbiAoa2V5LCBwbHVnaW4sIHN0YXJ0LCBtYXBwaW5nLCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0ID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAobWFwcGluZyA9PT0gdW5kZWZpbmVkKSB7IG1hcHBpbmcgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgeyBkYXRhID0gbnVsbDsgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbiAhPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBQbHVnaW46ICcgKyBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChQbHVnaW5DYWNoZS5oYXNDdXN0b20oa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGx1Z2luIGtleSBpbiB1c2U6ICcgKyBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtYXBwaW5nICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdhbWUuaXNCb290ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nR2xvYmFsLnB1c2goeyBrZXk6IGtleSwgcGx1Z2luOiBwbHVnaW4sIHN0YXJ0OiBzdGFydCwgbWFwcGluZzogbWFwcGluZywgZGF0YTogZGF0YSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFkZCBpdCB0byB0aGUgcGx1Z2luIHN0b3JlXHJcbiAgICAgICAgICAgIFBsdWdpbkNhY2hlLnJlZ2lzdGVyQ3VzdG9tKGtleSwgcGx1Z2luLCBtYXBwaW5nLCBkYXRhKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbiBpbmRleCBvZiBhIGdsb2JhbCBwbHVnaW4gYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjZ2V0SW5kZXhcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHBsdWdpbiBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGluZGV4IG9mIHRoZSBwbHVnaW4gd2l0aGluIHRoZSBwbHVnaW5zIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleDogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMucGx1Z2lucztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgZ2xvYmFsIHBsdWdpbiBiYXNlZCBvbiB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNnZXRFbnRyeVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgcGx1Z2luIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuUGx1Z2lucy5HbG9iYWxQbHVnaW59IFRoZSBwbHVnaW4gZW50cnkuXHJcbiAgICAgKi9cclxuICAgIGdldEVudHJ5OiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLmdldEluZGV4KGtleSk7XHJcblxyXG4gICAgICAgIGlmIChpZHggIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luc1tpZHhdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGdsb2JhbCBwbHVnaW4sIGJhc2VkIG9uIGl0cyBrZXksIGlzIGFjdGl2ZSBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2lzQWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBwbHVnaW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGx1Z2luIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0RW50cnkoa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChlbnRyeSAmJiBlbnRyeS5hY3RpdmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyBhIGdsb2JhbCBwbHVnaW4gcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcGx1Z2luIHdhcyBwcmV2aW91c2x5IGFjdGl2ZSB0aGVuIGNhbGxpbmcgYHN0YXJ0YCB3aWxsIHJlc2V0IGl0IHRvIGFuIGFjdGl2ZSBzdGF0ZSBhbmQgdGhlblxyXG4gICAgICogY2FsbCBpdHMgYHN0YXJ0YCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIHBsdWdpbiBoYXMgbmV2ZXIgYmVlbiBydW4gYmVmb3JlIGEgbmV3IGluc3RhbmNlIG9mIGl0IHdpbGwgYmUgY3JlYXRlZCB3aXRoaW4gdGhlIFBsdWdpbiBNYW5hZ2VyLFxyXG4gICAgICogaXRzIGFjdGl2ZSBzdGF0ZSBzZXQgYW5kIHRoZW4gYm90aCBvZiBpdHMgYGluaXRgIGFuZCBgc3RhcnRgIG1ldGhvZHMgY2FsbGVkLCBpbiB0aGF0IG9yZGVyLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBydW5uaW5nIHVuZGVyIHRoZSBnaXZlbiBrZXkgdGhlbiBub3RoaW5nIGhhcHBlbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGx1Z2luIHRvIHN0YXJ0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtydW5Bc10gLSBSdW4gdGhlIHBsdWdpbiB1bmRlciBhIG5ldyBrZXkuIFRoaXMgYWxsb3dzIHlvdSB0byBydW4gb25lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlBsdWdpbnMuQmFzZVBsdWdpbn0gVGhlIHBsdWdpbiB0aGF0IHdhcyBzdGFydGVkLCBvciBgbnVsbGAgaWYgaW52YWxpZCBrZXkgZ2l2ZW4gb3IgcGx1Z2luIGlzIGFscmVhZHkgc3RvcHBlZC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIChrZXksIHJ1bkFzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChydW5BcyA9PT0gdW5kZWZpbmVkKSB7IHJ1bkFzID0ga2V5OyB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0RW50cnkocnVuQXMpO1xyXG5cclxuICAgICAgICAvLyAgUGx1Z2luIGFscmVhZHkgcnVubmluZyB1bmRlciB0aGlzIGtleT9cclxuICAgICAgICBpZiAoZW50cnkgJiYgIWVudHJ5LmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJdCBleGlzdHMsIHdlIGp1c3QgbmVlZCB0byBzdGFydCBpdCB1cCBhZ2FpblxyXG4gICAgICAgICAgICBlbnRyeS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbnRyeS5wbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWVudHJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmNyZWF0ZUVudHJ5KGtleSwgcnVuQXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChlbnRyeSkgPyBlbnRyeS5wbHVnaW4gOiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBnbG9iYWwgcGx1Z2luLCBhZGRzIGFuIGVudHJ5IGludG8gdGhlIHBsdWdpbnMgYXJyYXkgYW5kIHJldHVybnMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2NyZWF0ZUVudHJ5XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBsdWdpbiB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3J1bkFzXSAtIFJ1biB0aGUgcGx1Z2luIHVuZGVyIGEgbmV3IGtleS4gVGhpcyBhbGxvd3MgeW91IHRvIHJ1biBvbmUgcGx1Z2luIG11bHRpcGxlIHRpbWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2lufSBUaGUgcGx1Z2luIHRoYXQgd2FzIHN0YXJ0ZWQsIG9yIGBudWxsYCBpZiBpbnZhbGlkIGtleSBnaXZlbi5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRW50cnk6IGZ1bmN0aW9uIChrZXksIHJ1bkFzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IFBsdWdpbkNhY2hlLmdldEN1c3RvbShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgZW50cnkucGx1Z2luKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgZW50cnkgPSB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IHJ1bkFzLFxyXG4gICAgICAgICAgICAgICAgcGx1Z2luOiBpbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1hcHBpbmc6IGVudHJ5Lm1hcHBpbmcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBlbnRyeS5kYXRhXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucHVzaChlbnRyeSk7XHJcblxyXG4gICAgICAgICAgICBpbnN0YW5jZS5pbml0KGVudHJ5LmRhdGEpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGEgZ2xvYmFsIHBsdWdpbiBmcm9tIHJ1bm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIHBsdWdpbiBpcyBhY3RpdmUgdGhlbiBpdHMgYWN0aXZlIHN0YXRlIHdpbGwgYmUgc2V0IHRvIGZhbHNlIGFuZCB0aGUgcGx1Z2lucyBgc3RvcGAgbWV0aG9kXHJcbiAgICAgKiB3aWxsIGJlIGNhbGxlZC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcGx1Z2luIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIG5vdGhpbmcgd2lsbCBoYXBwZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gdG8gc3RvcC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyfSBUaGUgUGx1Z2luIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXRFbnRyeShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkuYWN0aXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW50cnkuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGVudHJ5LnBsdWdpbi5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgZ2xvYmFsIHBsdWdpbiBmcm9tIHRoZSBQbHVnaW4gTWFuYWdlciBiYXNlZCBvbiB0aGUgZ2l2ZW4ga2V5IGFuZCByZXR1cm5zIGl0LlxyXG4gICAgICpcclxuICAgICAqIElmIGl0IGNhbm5vdCBmaW5kIGFuIGFjdGl2ZSBwbHVnaW4gYmFzZWQgb24gdGhlIGtleSwgYnV0IHRoZXJlIGlzIG9uZSBpbiB0aGUgUGx1Z2luIENhY2hlIHdpdGggdGhlIHNhbWUga2V5LFxyXG4gICAgICogdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2FjaGVkIHBsdWdpbiBhbmQgcmV0dXJuIHRoYXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI2dldFxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBsdWdpbiB0byBnZXQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvU3RhcnQ9dHJ1ZV0gLSBBdXRvbWF0aWNhbGx5IHN0YXJ0IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBwbHVnaW4gaWYgZm91bmQgaW4gdGhlIGNhY2hlLCBidXQgbm90IGFjdGl2ZWx5IHJ1bm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7PyhQaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2lufGZ1bmN0aW9uKX0gVGhlIHBsdWdpbiwgb3IgYG51bGxgIGlmIG5vIHBsdWdpbiB3YXMgZm91bmQgbWF0Y2hpbmcgdGhlIGtleS5cclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5LCBhdXRvU3RhcnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGF1dG9TdGFydCA9PT0gdW5kZWZpbmVkKSB7IGF1dG9TdGFydCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXRFbnRyeShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZW50cnkucGx1Z2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5nZXRDbGFzcyhrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbiAmJiBhdXRvU3RhcnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jcmVhdGVFbnRyeShrZXksIGtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChlbnRyeSkgPyBlbnRyeS5wbHVnaW4gOiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBsdWdpbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGx1Z2luIGNsYXNzIGZyb20gdGhlIGNhY2hlLlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQbHVnaW4gTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjZ2V0Q2xhc3NcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gdG8gZ2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5QbHVnaW5zLkJhc2VQbHVnaW59IEEgUGx1Z2luIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBnZXRDbGFzczogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gUGx1Z2luQ2FjaGUuZ2V0Q3VzdG9tQ2xhc3Moa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgZ2xvYmFsIHBsdWdpbiBmcm9tIHRoZSBQbHVnaW4gTWFuYWdlciBhbmQgUGx1Z2luIENhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEl0IGlzIHVwIHRvIHlvdSB0byByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBwbHVnaW4gdGhhdCB5b3UgbWF5IGhvbGQgd2l0aGluIHlvdXIgZ2FtZSBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciNyZW1vdmVHbG9iYWxQbHVnaW5cclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gdG8gcmVtb3ZlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVHbG9iYWxQbHVnaW46IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXRFbnRyeShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSZW1vdmUodGhpcy5wbHVnaW5zLCBlbnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBQbHVnaW5DYWNoZS5yZW1vdmVDdXN0b20oa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgc2NlbmUgcGx1Z2luIGZyb20gdGhlIFBsdWdpbiBNYW5hZ2VyIGFuZCBQbHVnaW4gQ2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIG5vdCByZW1vdmUgdGhlIHBsdWdpbiBmcm9tIGFueSBhY3RpdmUgU2NlbmVzIHRoYXQgYXJlIGFscmVhZHkgdXNpbmcgaXQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgaXMgdXAgdG8geW91IHRvIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIHBsdWdpbiB0aGF0IHlvdSBtYXkgaG9sZCB3aXRoaW4geW91ciBnYW1lIGNvZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI3JlbW92ZVNjZW5lUGx1Z2luXHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGx1Z2luIHRvIHJlbW92ZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlU2NlbmVQbHVnaW46IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgUmVtb3ZlKHRoaXMuc2NlbmVQbHVnaW5zLCBrZXkpO1xyXG5cclxuICAgICAgICBQbHVnaW5DYWNoZS5yZW1vdmUoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgdHlwZSBvZiBHYW1lIE9iamVjdCB3aXRoIHRoZSBnbG9iYWwgR2FtZSBPYmplY3QgRmFjdG9yeSBhbmQgLyBvciBDcmVhdG9yLlxyXG4gICAgICogVGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB5b3VyIFBsdWdpbiBjb2RlIGFuZCBpcyBhIGhlbHBmdWwgc2hvcnQtY3V0IGZvciBjcmVhdGluZ1xyXG4gICAgICogbmV3IEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUga2V5IGlzIHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgZmFjdG9yaWVzIGFuZCB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgICAqIEdhbWUgT2JqZWN0LiBGb3IgZXhhbXBsZTpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLnBsdWdpbnMucmVnaXN0ZXJHYW1lT2JqZWN0KCdjbG93bicsIGNsb3duRmFjdG9yeUNhbGxiYWNrLCBjbG93bkNyZWF0b3JDYWxsYmFjayk7XHJcbiAgICAgKiAvLyBsYXRlciBpbiB5b3VyIGdhbWUgY29kZTpcclxuICAgICAqIHRoaXMuYWRkLmNsb3duKCk7XHJcbiAgICAgKiB0aGlzLm1ha2UuY2xvd24oKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY2FsbGJhY2tzIGFyZSB3aGF0IGFyZSBjYWxsZWQgd2hlbiB0aGUgZmFjdG9yaWVzIHRyeSB0byBjcmVhdGUgYSBHYW1lIE9iamVjdFxyXG4gICAgICogbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aGluXHJcbiAgICAgKiB0aGUgY29udGV4dCBvZiB0aGUgR2FtZU9iamVjdEZhY3RvcnkuIEluIHRoaXMgY29udGV4dCB0aGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZVxyXG4gICAgICogdG8gdXNlOlxyXG4gICAgICogXHJcbiAgICAgKiB0aGlzLnNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnkuXHJcbiAgICAgKiB0aGlzLmRpc3BsYXlMaXN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3ducy5cclxuICAgICAqIHRoaXMudXBkYXRlTGlzdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3ducy5cclxuICAgICAqIFxyXG4gICAgICogU2VlIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBhbmQgR2FtZU9iamVjdENyZWF0b3IgY2xhc3NlcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gICAgICogQW55IHB1YmxpYyBwcm9wZXJ0eSBvciBtZXRob2QgbGlzdGVkIGlzIGF2YWlsYWJsZSBmcm9tIHlvdXIgY2FsbGJhY2tzIHVuZGVyIGB0aGlzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjcmVnaXN0ZXJHYW1lT2JqZWN0XHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgR2FtZSBPYmplY3QgdGhhdCB0aGUgZ2l2ZW4gY2FsbGJhY2tzIHdpbGwgY3JlYXRlLCBpLmUuIGBpbWFnZWAsIGBzcHJpdGVgLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2ZhY3RvcnlDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIEdhbWUgT2JqZWN0IEZhY3RvcnkgaXMgY2FsbGVkLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NyZWF0b3JDYWxsYmFja10gLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIEdhbWUgT2JqZWN0IENyZWF0b3IgaXMgY2FsbGVkLlxyXG4gICAgICovXHJcbiAgICByZWdpc3RlckdhbWVPYmplY3Q6IGZ1bmN0aW9uIChrZXksIGZhY3RvcnlDYWxsYmFjaywgY3JlYXRvckNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmYWN0b3J5Q2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBHYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcihrZXksIGZhY3RvcnlDYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3JlYXRvckNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoa2V5LCBjcmVhdG9yQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBHYW1lIE9iamVjdCBmcm9tIHRoZSBnbG9iYWwgR2FtZSBPYmplY3QgRmFjdG9yeSBhbmQgLyBvciBDcmVhdG9yLlxyXG4gICAgICogVGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB5b3VyIFBsdWdpbiBkZXN0cnVjdGlvbiBjb2RlIHRvIGhlbHAgY2xlYW4tdXAgYWZ0ZXIgeW91ciBwbHVnaW4gaGFzIGJlZW4gcmVtb3ZlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjcmVtb3ZlR2FtZU9iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBHYW1lIE9iamVjdCB0byBiZSByZW1vdmVkIGZyb20gdGhlIGZhY3Rvcmllcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZUZyb21GYWN0b3J5PXRydWVdIC0gU2hvdWxkIHRoZSBHYW1lIE9iamVjdCBiZSByZW1vdmVkIGZyb20gdGhlIEdhbWUgT2JqZWN0IEZhY3Rvcnk/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW1vdmVGcm9tQ3JlYXRvcj10cnVlXSAtIFNob3VsZCB0aGUgR2FtZSBPYmplY3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBHYW1lIE9iamVjdCBDcmVhdG9yP1xyXG4gICAgICovXHJcbiAgICByZW1vdmVHYW1lT2JqZWN0OiBmdW5jdGlvbiAoa2V5LCByZW1vdmVGcm9tRmFjdG9yeSwgcmVtb3ZlRnJvbUNyZWF0b3IpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlbW92ZUZyb21GYWN0b3J5ID09PSB1bmRlZmluZWQpIHsgcmVtb3ZlRnJvbUZhY3RvcnkgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHJlbW92ZUZyb21DcmVhdG9yID09PSB1bmRlZmluZWQpIHsgcmVtb3ZlRnJvbUNyZWF0b3IgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVGcm9tRmFjdG9yeSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEdhbWVPYmplY3RGYWN0b3J5LnJlbW92ZShrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZUZyb21DcmVhdG9yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgR2FtZU9iamVjdENyZWF0b3IucmVtb3ZlKGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgZmlsZSB0eXBlIHdpdGggdGhlIGdsb2JhbCBGaWxlIFR5cGVzIE1hbmFnZXIsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYWxsIExvYWRlclxyXG4gICAgICogUGx1Z2lucyBjcmVhdGVkIGFmdGVyIHRoaXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSB3aXRoaW4geW91ciBQbHVnaW4gY29kZSBhbmQgaXMgYSBoZWxwZnVsIHNob3J0LWN1dCBmb3IgY3JlYXRpbmdcclxuICAgICAqIG5ldyBsb2FkZXIgZmlsZSB0eXBlcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUga2V5IGlzIHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgTG9hZGVyIFBsdWdpbiBhbmQgdXNlZCB0byBsb2FkIHRoZVxyXG4gICAgICogZmlsZXMuIEZvciBleGFtcGxlOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMucGx1Z2lucy5yZWdpc3RlckZpbGVUeXBlKCd3YWQnLCBkb29tV2FkTG9hZGVyQ2FsbGJhY2spO1xyXG4gICAgICogLy8gbGF0ZXIgaW4geW91ciBwcmVsb2FkIGNvZGU6XHJcbiAgICAgKiB0aGlzLmxvYWQud2FkKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVGhlIGNhbGxiYWNrIGlzIHdoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGxvYWRlciB0cmllcyB0byBsb2FkIGEgZmlsZSAgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS5cclxuICAgICAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoaW5cclxuICAgICAqIHRoZSBjb250ZXh0IG9mIHRoZSBMb2FkZXJQbHVnaW4uIEluIHRoaXMgY29udGV4dCB0aGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIC8gbWV0aG9kcyBhdmFpbGFibGVcclxuICAgICAqIHRvIHVzZTpcclxuICAgICAqIFxyXG4gICAgICogdGhpcy5hZGRGaWxlIC0gQSBtZXRob2QgdG8gYWRkIHRoZSBuZXcgZmlsZSB0byB0aGUgbG9hZCBxdWV1ZS5cclxuICAgICAqIHRoaXMuc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCBvd25zIHRoZSBMb2FkZXIgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIFNlZSB0aGUgTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuIEFueSBwdWJsaWMgcHJvcGVydHkgb3IgbWV0aG9kIGxpc3RlZCBpcyBhdmFpbGFibGUgZnJvbVxyXG4gICAgICogeW91ciBjYWxsYmFjayB1bmRlciBgdGhpc2AuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyI3JlZ2lzdGVyRmlsZVR5cGVcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBHYW1lIE9iamVjdCB0aGF0IHRoZSBnaXZlbiBjYWxsYmFja3Mgd2lsbCBjcmVhdGUsIGkuZS4gYGltYWdlYCwgYHNwcml0ZWAuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgR2FtZSBPYmplY3QgRmFjdG9yeSBpcyBjYWxsZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gW2FkZFRvU2NlbmVdIC0gT3B0aW9uYWxseSBhZGQgdGhpcyBmaWxlIHR5cGUgaW50byB0aGUgTG9hZGVyIFBsdWdpbiBvd25lZCBieSB0aGUgZ2l2ZW4gU2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyRmlsZVR5cGU6IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrLCBhZGRUb1NjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoa2V5LCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIGlmIChhZGRUb1NjZW5lICYmIGFkZFRvU2NlbmUuc3lzLmxvYWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhZGRUb1NjZW5lLnN5cy5sb2FkW2tleV0gPSBjYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBQbHVnaW4gTWFuYWdlciBhbmQgYWxsIGFzc29jaWF0ZWQgcGx1Z2lucy5cclxuICAgICAqIEl0IHdpbGwgaXRlcmF0ZSBhbGwgcGx1Z2lucyBmb3VuZCBhbmQgY2FsbCB0aGVpciBgZGVzdHJveWAgbWV0aG9kcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIFBsdWdpbkNhY2hlIHdpbGwgcmVtb3ZlIGFsbCBjdXN0b20gcGx1Z2lucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBsdWdpbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbaV0ucGx1Z2luLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFBsdWdpbkNhY2hlLmRlc3Ryb3lDdXN0b21QbHVnaW5zKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWUubm9SZXR1cm4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBQbHVnaW5DYWNoZS5kZXN0cm95Q29yZVBsdWdpbnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW107XHJcbiAgICAgICAgdGhpcy5zY2VuZVBsdWdpbnMgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLypcclxuICogXCJTb21ldGltZXMsIHRoZSBlbGVnYW50IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgYSBmdW5jdGlvbi5cclxuICogTm90IGEgbWV0aG9kLiBOb3QgYSBjbGFzcy4gTm90IGEgZnJhbWV3b3JrLiBKdXN0IGEgZnVuY3Rpb24uXCJcclxuICogIC0tIEpvaG4gQ2FybWFja1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGx1Z2luTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/PluginManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/ScenePlugin.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/plugins/ScenePlugin.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n* @author       Richard Davey <rich@photonstorm.com>\r\n* @copyright    2019 Photon Storm Ltd.\r\n* @license      {@link https://github.com/photonstorm/phaser3-plugin-template/blob/master/LICENSE|MIT License}\r\n*/\r\n\r\nvar BasePlugin = __webpack_require__(/*! ./BasePlugin */ \"./node_modules/phaser/src/plugins/BasePlugin.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Scene Level Plugin is installed into every Scene and belongs to that Scene.\r\n * It can listen for Scene events and respond to them.\r\n * It can map itself to a Scene property, or into the Scene Systems, or both.\r\n *\r\n * @class ScenePlugin\r\n * @memberof Phaser.Plugins\r\n * @extends Phaser.Plugins.BasePlugin\r\n * @constructor\r\n * @since 3.8.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene that has installed this plugin.\r\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Plugin Manager.\r\n */\r\nvar ScenePlugin = new Class({\r\n\r\n    Extends: BasePlugin,\r\n\r\n    initialize:\r\n\r\n    function ScenePlugin (scene, pluginManager)\r\n    {\r\n        BasePlugin.call(this, pluginManager);\r\n\r\n        /**\r\n         * A reference to the Scene that has installed this plugin.\r\n         * Only set if it's a Scene Plugin, otherwise `null`.\r\n         * This property is only set when the plugin is instantiated and added to the Scene, not before.\r\n         * You can use it during the `boot` method.\r\n         *\r\n         * @name Phaser.Plugins.ScenePlugin#scene\r\n         * @type {?Phaser.Scene}\r\n         * @protected\r\n         * @since 3.8.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Scene Systems of the Scene that has installed this plugin.\r\n         * Only set if it's a Scene Plugin, otherwise `null`.\r\n         * This property is only set when the plugin is instantiated and added to the Scene, not before.\r\n         * You can use it during the `boot` method.\r\n         *\r\n         * @name Phaser.Plugins.ScenePlugin#systems\r\n         * @type {?Phaser.Scenes.Systems}\r\n         * @protected\r\n         * @since 3.8.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called when the Scene boots. It is only ever called once.\r\n     *\r\n     * By this point the plugin properties `scene` and `systems` will have already been set.\r\n     *\r\n     * In here you can listen for {@link Phaser.Scenes.Events Scene events} and set-up whatever you need for this plugin to run.\r\n     * Here are the Scene events you can listen to:\r\n     *\r\n     * - start\r\n     * - ready\r\n     * - preupdate\r\n     * - update\r\n     * - postupdate\r\n     * - resize\r\n     * - pause\r\n     * - resume\r\n     * - sleep\r\n     * - wake\r\n     * - transitioninit\r\n     * - transitionstart\r\n     * - transitioncomplete\r\n     * - transitionout\r\n     * - shutdown\r\n     * - destroy\r\n     *\r\n     * At the very least you should offer a destroy handler for when the Scene closes down, i.e:\r\n     *\r\n     * ```javascript\r\n     * var eventEmitter = this.systems.events;\r\n     * eventEmitter.once('destroy', this.sceneDestroy, this);\r\n     * ```\r\n     *\r\n     * @method Phaser.Plugins.ScenePlugin#boot\r\n     * @since 3.8.0\r\n     */\r\n    boot: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Game instance has been destroyed.\r\n     * \r\n     * You must release everything in here, all references, all objects, free it all up.\r\n     *\r\n     * @method Phaser.Plugins.ScenePlugin#destroy\r\n     * @since 3.8.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.pluginManager = null;\r\n        this.game = null;\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ScenePlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL1NjZW5lUGx1Z2luLmpzP2VhZjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHFFQUFjO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsd0NBQXdDO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BsdWdpbnMvU2NlbmVQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4qIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4qIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIzLXBsdWdpbi10ZW1wbGF0ZS9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxyXG4qL1xyXG5cclxudmFyIEJhc2VQbHVnaW4gPSByZXF1aXJlKCcuL0Jhc2VQbHVnaW4nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNjZW5lIExldmVsIFBsdWdpbiBpcyBpbnN0YWxsZWQgaW50byBldmVyeSBTY2VuZSBhbmQgYmVsb25ncyB0byB0aGF0IFNjZW5lLlxyXG4gKiBJdCBjYW4gbGlzdGVuIGZvciBTY2VuZSBldmVudHMgYW5kIHJlc3BvbmQgdG8gdGhlbS5cclxuICogSXQgY2FuIG1hcCBpdHNlbGYgdG8gYSBTY2VuZSBwcm9wZXJ0eSwgb3IgaW50byB0aGUgU2NlbmUgU3lzdGVtcywgb3IgYm90aC5cclxuICpcclxuICogQGNsYXNzIFNjZW5lUGx1Z2luXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUGx1Z2luc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUGx1Z2lucy5CYXNlUGx1Z2luXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy44LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgaGFzIGluc3RhbGxlZCB0aGlzIHBsdWdpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuUGx1Z2lucy5QbHVnaW5NYW5hZ2VyfSBwbHVnaW5NYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIFBsdWdpbiBNYW5hZ2VyLlxyXG4gKi9cclxudmFyIFNjZW5lUGx1Z2luID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCYXNlUGx1Z2luLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU2NlbmVQbHVnaW4gKHNjZW5lLCBwbHVnaW5NYW5hZ2VyKVxyXG4gICAge1xyXG4gICAgICAgIEJhc2VQbHVnaW4uY2FsbCh0aGlzLCBwbHVnaW5NYW5hZ2VyKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgaGFzIGluc3RhbGxlZCB0aGlzIHBsdWdpbi5cclxuICAgICAgICAgKiBPbmx5IHNldCBpZiBpdCdzIGEgU2NlbmUgUGx1Z2luLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgd2hlbiB0aGUgcGx1Z2luIGlzIGluc3RhbnRpYXRlZCBhbmQgYWRkZWQgdG8gdGhlIFNjZW5lLCBub3QgYmVmb3JlLlxyXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIGl0IGR1cmluZyB0aGUgYGJvb3RgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgb2YgdGhlIFNjZW5lIHRoYXQgaGFzIGluc3RhbGxlZCB0aGlzIHBsdWdpbi5cclxuICAgICAgICAgKiBPbmx5IHNldCBpZiBpdCdzIGEgU2NlbmUgUGx1Z2luLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgd2hlbiB0aGUgcGx1Z2luIGlzIGluc3RhbnRpYXRlZCBhbmQgYWRkZWQgdG8gdGhlIFNjZW5lLCBub3QgYmVmb3JlLlxyXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIGl0IGR1cmluZyB0aGUgYGJvb3RgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5TY2VuZXMuU3lzdGVtc31cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgU2NlbmUgYm9vdHMuIEl0IGlzIG9ubHkgZXZlciBjYWxsZWQgb25jZS5cclxuICAgICAqXHJcbiAgICAgKiBCeSB0aGlzIHBvaW50IHRoZSBwbHVnaW4gcHJvcGVydGllcyBgc2NlbmVgIGFuZCBgc3lzdGVtc2Agd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogSW4gaGVyZSB5b3UgY2FuIGxpc3RlbiBmb3Ige0BsaW5rIFBoYXNlci5TY2VuZXMuRXZlbnRzIFNjZW5lIGV2ZW50c30gYW5kIHNldC11cCB3aGF0ZXZlciB5b3UgbmVlZCBmb3IgdGhpcyBwbHVnaW4gdG8gcnVuLlxyXG4gICAgICogSGVyZSBhcmUgdGhlIFNjZW5lIGV2ZW50cyB5b3UgY2FuIGxpc3RlbiB0bzpcclxuICAgICAqXHJcbiAgICAgKiAtIHN0YXJ0XHJcbiAgICAgKiAtIHJlYWR5XHJcbiAgICAgKiAtIHByZXVwZGF0ZVxyXG4gICAgICogLSB1cGRhdGVcclxuICAgICAqIC0gcG9zdHVwZGF0ZVxyXG4gICAgICogLSByZXNpemVcclxuICAgICAqIC0gcGF1c2VcclxuICAgICAqIC0gcmVzdW1lXHJcbiAgICAgKiAtIHNsZWVwXHJcbiAgICAgKiAtIHdha2VcclxuICAgICAqIC0gdHJhbnNpdGlvbmluaXRcclxuICAgICAqIC0gdHJhbnNpdGlvbnN0YXJ0XHJcbiAgICAgKiAtIHRyYW5zaXRpb25jb21wbGV0ZVxyXG4gICAgICogLSB0cmFuc2l0aW9ub3V0XHJcbiAgICAgKiAtIHNodXRkb3duXHJcbiAgICAgKiAtIGRlc3Ryb3lcclxuICAgICAqXHJcbiAgICAgKiBBdCB0aGUgdmVyeSBsZWFzdCB5b3Ugc2hvdWxkIG9mZmVyIGEgZGVzdHJveSBoYW5kbGVyIGZvciB3aGVuIHRoZSBTY2VuZSBjbG9zZXMgZG93biwgaS5lOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG4gICAgICogZXZlbnRFbWl0dGVyLm9uY2UoJ2Rlc3Ryb3knLCB0aGlzLnNjZW5lRGVzdHJveSwgdGhpcyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luI2Jvb3RcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdhbWUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgbXVzdCByZWxlYXNlIGV2ZXJ5dGhpbmcgaW4gaGVyZSwgYWxsIHJlZmVyZW5jZXMsIGFsbCBvYmplY3RzLCBmcmVlIGl0IGFsbCB1cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGx1Z2luTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjZW5lUGx1Z2luO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/ScenePlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/plugins/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/plugins/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Plugins\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BasePlugin: __webpack_require__(/*! ./BasePlugin */ \"./node_modules/phaser/src/plugins/BasePlugin.js\"),\r\n    DefaultPlugins: __webpack_require__(/*! ./DefaultPlugins */ \"./node_modules/phaser/src/plugins/DefaultPlugins.js\"),\r\n    PluginCache: __webpack_require__(/*! ./PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\"),\r\n    PluginManager: __webpack_require__(/*! ./PluginManager */ \"./node_modules/phaser/src/plugins/PluginManager.js\"),\r\n    ScenePlugin: __webpack_require__(/*! ./ScenePlugin */ \"./node_modules/phaser/src/plugins/ScenePlugin.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wbHVnaW5zL2luZGV4LmpzP2YzMjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRUFBYztBQUN0QyxvQkFBb0IsbUJBQU8sQ0FBQyw2RUFBa0I7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsdUVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsMkVBQWlCO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLHVFQUFlOztBQUV4QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BsdWdpbnMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5QbHVnaW5zXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQmFzZVBsdWdpbjogcmVxdWlyZSgnLi9CYXNlUGx1Z2luJyksXHJcbiAgICBEZWZhdWx0UGx1Z2luczogcmVxdWlyZSgnLi9EZWZhdWx0UGx1Z2lucycpLFxyXG4gICAgUGx1Z2luQ2FjaGU6IHJlcXVpcmUoJy4vUGx1Z2luQ2FjaGUnKSxcclxuICAgIFBsdWdpbk1hbmFnZXI6IHJlcXVpcmUoJy4vUGx1Z2luTWFuYWdlcicpLFxyXG4gICAgU2NlbmVQbHVnaW46IHJlcXVpcmUoJy4vU2NlbmVQbHVnaW4nKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/plugins/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/Array.forEach.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/Array.forEach.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* A polyfill for Array.forEach\r\n* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\r\n*/\r\nif (!Array.prototype.forEach)\r\n{\r\n    Array.prototype.forEach = function (fun /*, thisArg */)\r\n    {\r\n        'use strict';\r\n\r\n        if (this === void 0 || this === null)\r\n        {\r\n            throw new TypeError();\r\n        }\r\n\r\n        var t = Object(this);\r\n        var len = t.length >>> 0;\r\n\r\n        if (typeof fun !== 'function')\r\n        {\r\n            throw new TypeError();\r\n        }\r\n\r\n        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\r\n\r\n        for (var i = 0; i < len; i++)\r\n        {\r\n            if (i in t)\r\n            {\r\n                fun.call(thisArg, t[i], i, t);\r\n            }\r\n        }\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvQXJyYXkuZm9yRWFjaC5qcz9hZTVkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvQXJyYXkuZm9yRWFjaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIEEgcG9seWZpbGwgZm9yIEFycmF5LmZvckVhY2hcclxuKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mb3JFYWNoXHJcbiovXHJcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpXHJcbntcclxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZ1biAvKiwgdGhpc0FyZyAqLylcclxuICAgIHtcclxuICAgICAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xyXG4gICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBmdW4gIT09ICdmdW5jdGlvbicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMiA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpIGluIHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNBcmcsIHRbaV0sIGksIHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/Array.forEach.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/Array.isArray.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/Array.isArray.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* A polyfill for Array.isArray\r\n*/\r\nif (!Array.isArray)\r\n{\r\n    Array.isArray = function (arg)\r\n    {\r\n        return Object.prototype.toString.call(arg) === '[object Array]';\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvQXJyYXkuaXNBcnJheS5qcz9jYjBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcG9seWZpbGxzL0FycmF5LmlzQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuKiBBIHBvbHlmaWxsIGZvciBBcnJheS5pc0FycmF5XHJcbiovXHJcbmlmICghQXJyYXkuaXNBcnJheSlcclxue1xyXG4gICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xyXG4gICAgfTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/Array.isArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/AudioContextMonkeyPatch.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/AudioContextMonkeyPatch.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/* Copyright 2013 Chris Wilson\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n*/\r\n\r\n/*\r\n\r\nThis monkeypatch library is intended to be included in projects that are\r\nwritten to the proper AudioContext spec (instead of webkitAudioContext),\r\nand that use the new naming and proper bits of the Web Audio API (e.g.\r\nusing BufferSourceNode.start() instead of BufferSourceNode.noteOn()), but may\r\nhave to run on systems that only support the deprecated bits.\r\n\r\nThis library should be harmless to include if the browser supports\r\nunprefixed \"AudioContext\", and/or if it supports the new names.\r\n\r\nThe patches this library handles:\r\nif window.AudioContext is unsupported, it will be aliased to webkitAudioContext().\r\nif AudioBufferSourceNode.start() is unimplemented, it will be routed to noteOn() or\r\nnoteGrainOn(), depending on parameters.\r\n\r\nThe following aliases only take effect if the new names are not already in place:\r\n\r\nAudioBufferSourceNode.stop() is aliased to noteOff()\r\nAudioContext.createGain() is aliased to createGainNode()\r\nAudioContext.createDelay() is aliased to createDelayNode()\r\nAudioContext.createScriptProcessor() is aliased to createJavaScriptNode()\r\nAudioContext.createPeriodicWave() is aliased to createWaveTable()\r\nOscillatorNode.start() is aliased to noteOn()\r\nOscillatorNode.stop() is aliased to noteOff()\r\nOscillatorNode.setPeriodicWave() is aliased to setWaveTable()\r\nAudioParam.setTargetAtTime() is aliased to setTargetValueAtTime()\r\n\r\nThis library does NOT patch the enumerated type changes, as it is\r\nrecommended in the specification that implementations support both integer\r\nand string types for AudioPannerNode.panningModel, AudioPannerNode.distanceModel\r\nBiquadFilterNode.type and OscillatorNode.type.\r\n\r\n*/\r\n\r\n(function () {\r\n\r\n  function fixSetTarget(param) {\r\n    if (!param)\t// if NYI, just return\r\n      return;\r\n    if (!param.setTargetAtTime)\r\n      param.setTargetAtTime = param.setTargetValueAtTime;\r\n  }\r\n\r\n  if (window.hasOwnProperty('webkitAudioContext') &&\r\n      !window.hasOwnProperty('AudioContext')) {\r\n    window.AudioContext = webkitAudioContext;\r\n\r\n    if (!AudioContext.prototype.hasOwnProperty('createGain'))\r\n      AudioContext.prototype.createGain = AudioContext.prototype.createGainNode;\r\n    if (!AudioContext.prototype.hasOwnProperty('createDelay'))\r\n      AudioContext.prototype.createDelay = AudioContext.prototype.createDelayNode;\r\n    if (!AudioContext.prototype.hasOwnProperty('createScriptProcessor'))\r\n      AudioContext.prototype.createScriptProcessor = AudioContext.prototype.createJavaScriptNode;\r\n    if (!AudioContext.prototype.hasOwnProperty('createPeriodicWave'))\r\n      AudioContext.prototype.createPeriodicWave = AudioContext.prototype.createWaveTable;\r\n\r\n\r\n    AudioContext.prototype.internal_createGain = AudioContext.prototype.createGain;\r\n    AudioContext.prototype.createGain = function() {\r\n      var node = this.internal_createGain();\r\n      fixSetTarget(node.gain);\r\n      return node;\r\n    };\r\n\r\n    AudioContext.prototype.internal_createDelay = AudioContext.prototype.createDelay;\r\n    AudioContext.prototype.createDelay = function(maxDelayTime) {\r\n      var node = maxDelayTime ? this.internal_createDelay(maxDelayTime) : this.internal_createDelay();\r\n      fixSetTarget(node.delayTime);\r\n      return node;\r\n    };\r\n\r\n    AudioContext.prototype.internal_createBufferSource = AudioContext.prototype.createBufferSource;\r\n    AudioContext.prototype.createBufferSource = function() {\r\n      var node = this.internal_createBufferSource();\r\n      if (!node.start) {\r\n        node.start = function ( when, offset, duration ) {\r\n          if ( offset || duration )\r\n            this.noteGrainOn( when || 0, offset, duration );\r\n          else\r\n            this.noteOn( when || 0 );\r\n        };\r\n      } else {\r\n        node.internal_start = node.start;\r\n        node.start = function( when, offset, duration ) {\r\n          if( typeof duration !== 'undefined' )\r\n            node.internal_start( when || 0, offset, duration );\r\n          else\r\n            node.internal_start( when || 0, offset || 0 );\r\n        };\r\n      }\r\n      if (!node.stop) {\r\n        node.stop = function ( when ) {\r\n          this.noteOff( when || 0 );\r\n        };\r\n      } else {\r\n        node.internal_stop = node.stop;\r\n        node.stop = function( when ) {\r\n          node.internal_stop( when || 0 );\r\n        };\r\n      }\r\n      fixSetTarget(node.playbackRate);\r\n      return node;\r\n    };\r\n\r\n    AudioContext.prototype.internal_createDynamicsCompressor = AudioContext.prototype.createDynamicsCompressor;\r\n    AudioContext.prototype.createDynamicsCompressor = function() {\r\n      var node = this.internal_createDynamicsCompressor();\r\n      fixSetTarget(node.threshold);\r\n      fixSetTarget(node.knee);\r\n      fixSetTarget(node.ratio);\r\n      fixSetTarget(node.reduction);\r\n      fixSetTarget(node.attack);\r\n      fixSetTarget(node.release);\r\n      return node;\r\n    };\r\n\r\n    AudioContext.prototype.internal_createBiquadFilter = AudioContext.prototype.createBiquadFilter;\r\n    AudioContext.prototype.createBiquadFilter = function() {\r\n      var node = this.internal_createBiquadFilter();\r\n      fixSetTarget(node.frequency);\r\n      fixSetTarget(node.detune);\r\n      fixSetTarget(node.Q);\r\n      fixSetTarget(node.gain);\r\n      return node;\r\n    };\r\n\r\n    if (AudioContext.prototype.hasOwnProperty( 'createOscillator' )) {\r\n      AudioContext.prototype.internal_createOscillator = AudioContext.prototype.createOscillator;\r\n      AudioContext.prototype.createOscillator = function() {\r\n        var node = this.internal_createOscillator();\r\n        if (!node.start) {\r\n          node.start = function ( when ) {\r\n            this.noteOn( when || 0 );\r\n          };\r\n        } else {\r\n          node.internal_start = node.start;\r\n          node.start = function ( when ) {\r\n            node.internal_start( when || 0);\r\n          };\r\n        }\r\n        if (!node.stop) {\r\n          node.stop = function ( when ) {\r\n            this.noteOff( when || 0 );\r\n          };\r\n        } else {\r\n          node.internal_stop = node.stop;\r\n          node.stop = function( when ) {\r\n            node.internal_stop( when || 0 );\r\n          };\r\n        }\r\n        if (!node.setPeriodicWave)\r\n          node.setPeriodicWave = node.setWaveTable;\r\n        fixSetTarget(node.frequency);\r\n        fixSetTarget(node.detune);\r\n        return node;\r\n      };\r\n    }\r\n  }\r\n\r\n  if (window.hasOwnProperty('webkitOfflineAudioContext') &&\r\n      !window.hasOwnProperty('OfflineAudioContext')) {\r\n    window.OfflineAudioContext = webkitOfflineAudioContext;\r\n  }\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvQXVkaW9Db250ZXh0TW9ua2V5UGF0Y2guanM/ZWM1ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvQXVkaW9Db250ZXh0TW9ua2V5UGF0Y2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgMjAxMyBDaHJpcyBXaWxzb25cclxuXHJcbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcblxyXG4gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG4gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG4vKlxyXG5cclxuVGhpcyBtb25rZXlwYXRjaCBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIHByb2plY3RzIHRoYXQgYXJlXHJcbndyaXR0ZW4gdG8gdGhlIHByb3BlciBBdWRpb0NvbnRleHQgc3BlYyAoaW5zdGVhZCBvZiB3ZWJraXRBdWRpb0NvbnRleHQpLFxyXG5hbmQgdGhhdCB1c2UgdGhlIG5ldyBuYW1pbmcgYW5kIHByb3BlciBiaXRzIG9mIHRoZSBXZWIgQXVkaW8gQVBJIChlLmcuXHJcbnVzaW5nIEJ1ZmZlclNvdXJjZU5vZGUuc3RhcnQoKSBpbnN0ZWFkIG9mIEJ1ZmZlclNvdXJjZU5vZGUubm90ZU9uKCkpLCBidXQgbWF5XHJcbmhhdmUgdG8gcnVuIG9uIHN5c3RlbXMgdGhhdCBvbmx5IHN1cHBvcnQgdGhlIGRlcHJlY2F0ZWQgYml0cy5cclxuXHJcblRoaXMgbGlicmFyeSBzaG91bGQgYmUgaGFybWxlc3MgdG8gaW5jbHVkZSBpZiB0aGUgYnJvd3NlciBzdXBwb3J0c1xyXG51bnByZWZpeGVkIFwiQXVkaW9Db250ZXh0XCIsIGFuZC9vciBpZiBpdCBzdXBwb3J0cyB0aGUgbmV3IG5hbWVzLlxyXG5cclxuVGhlIHBhdGNoZXMgdGhpcyBsaWJyYXJ5IGhhbmRsZXM6XHJcbmlmIHdpbmRvdy5BdWRpb0NvbnRleHQgaXMgdW5zdXBwb3J0ZWQsIGl0IHdpbGwgYmUgYWxpYXNlZCB0byB3ZWJraXRBdWRpb0NvbnRleHQoKS5cclxuaWYgQXVkaW9CdWZmZXJTb3VyY2VOb2RlLnN0YXJ0KCkgaXMgdW5pbXBsZW1lbnRlZCwgaXQgd2lsbCBiZSByb3V0ZWQgdG8gbm90ZU9uKCkgb3Jcclxubm90ZUdyYWluT24oKSwgZGVwZW5kaW5nIG9uIHBhcmFtZXRlcnMuXHJcblxyXG5UaGUgZm9sbG93aW5nIGFsaWFzZXMgb25seSB0YWtlIGVmZmVjdCBpZiB0aGUgbmV3IG5hbWVzIGFyZSBub3QgYWxyZWFkeSBpbiBwbGFjZTpcclxuXHJcbkF1ZGlvQnVmZmVyU291cmNlTm9kZS5zdG9wKCkgaXMgYWxpYXNlZCB0byBub3RlT2ZmKClcclxuQXVkaW9Db250ZXh0LmNyZWF0ZUdhaW4oKSBpcyBhbGlhc2VkIHRvIGNyZWF0ZUdhaW5Ob2RlKClcclxuQXVkaW9Db250ZXh0LmNyZWF0ZURlbGF5KCkgaXMgYWxpYXNlZCB0byBjcmVhdGVEZWxheU5vZGUoKVxyXG5BdWRpb0NvbnRleHQuY3JlYXRlU2NyaXB0UHJvY2Vzc29yKCkgaXMgYWxpYXNlZCB0byBjcmVhdGVKYXZhU2NyaXB0Tm9kZSgpXHJcbkF1ZGlvQ29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmUoKSBpcyBhbGlhc2VkIHRvIGNyZWF0ZVdhdmVUYWJsZSgpXHJcbk9zY2lsbGF0b3JOb2RlLnN0YXJ0KCkgaXMgYWxpYXNlZCB0byBub3RlT24oKVxyXG5Pc2NpbGxhdG9yTm9kZS5zdG9wKCkgaXMgYWxpYXNlZCB0byBub3RlT2ZmKClcclxuT3NjaWxsYXRvck5vZGUuc2V0UGVyaW9kaWNXYXZlKCkgaXMgYWxpYXNlZCB0byBzZXRXYXZlVGFibGUoKVxyXG5BdWRpb1BhcmFtLnNldFRhcmdldEF0VGltZSgpIGlzIGFsaWFzZWQgdG8gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKVxyXG5cclxuVGhpcyBsaWJyYXJ5IGRvZXMgTk9UIHBhdGNoIHRoZSBlbnVtZXJhdGVkIHR5cGUgY2hhbmdlcywgYXMgaXQgaXNcclxucmVjb21tZW5kZWQgaW4gdGhlIHNwZWNpZmljYXRpb24gdGhhdCBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydCBib3RoIGludGVnZXJcclxuYW5kIHN0cmluZyB0eXBlcyBmb3IgQXVkaW9QYW5uZXJOb2RlLnBhbm5pbmdNb2RlbCwgQXVkaW9QYW5uZXJOb2RlLmRpc3RhbmNlTW9kZWxcclxuQmlxdWFkRmlsdGVyTm9kZS50eXBlIGFuZCBPc2NpbGxhdG9yTm9kZS50eXBlLlxyXG5cclxuKi9cclxuXHJcbihmdW5jdGlvbiAoKSB7XHJcblxyXG4gIGZ1bmN0aW9uIGZpeFNldFRhcmdldChwYXJhbSkge1xyXG4gICAgaWYgKCFwYXJhbSlcdC8vIGlmIE5ZSSwganVzdCByZXR1cm5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKCFwYXJhbS5zZXRUYXJnZXRBdFRpbWUpXHJcbiAgICAgIHBhcmFtLnNldFRhcmdldEF0VGltZSA9IHBhcmFtLnNldFRhcmdldFZhbHVlQXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgaWYgKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykgJiZcclxuICAgICAgIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykpIHtcclxuICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3ZWJraXRBdWRpb0NvbnRleHQ7XHJcblxyXG4gICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdjcmVhdGVHYWluJykpXHJcbiAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XHJcbiAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2NyZWF0ZURlbGF5JykpXHJcbiAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZTtcclxuICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlU2NyaXB0UHJvY2Vzc29yJykpXHJcbiAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU2NyaXB0UHJvY2Vzc29yID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVKYXZhU2NyaXB0Tm9kZTtcclxuICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlUGVyaW9kaWNXYXZlJykpXHJcbiAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XHJcblxyXG5cclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaW50ZXJuYWxfY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbjtcclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgbm9kZSA9IHRoaXMuaW50ZXJuYWxfY3JlYXRlR2FpbigpO1xyXG4gICAgICBmaXhTZXRUYXJnZXQobm9kZS5nYWluKTtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9O1xyXG5cclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaW50ZXJuYWxfY3JlYXRlRGVsYXkgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5O1xyXG4gICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IGZ1bmN0aW9uKG1heERlbGF5VGltZSkge1xyXG4gICAgICB2YXIgbm9kZSA9IG1heERlbGF5VGltZSA/IHRoaXMuaW50ZXJuYWxfY3JlYXRlRGVsYXkobWF4RGVsYXlUaW1lKSA6IHRoaXMuaW50ZXJuYWxfY3JlYXRlRGVsYXkoKTtcclxuICAgICAgZml4U2V0VGFyZ2V0KG5vZGUuZGVsYXlUaW1lKTtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9O1xyXG5cclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaW50ZXJuYWxfY3JlYXRlQnVmZmVyU291cmNlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2U7XHJcbiAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgbm9kZSA9IHRoaXMuaW50ZXJuYWxfY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgIGlmICghbm9kZS5zdGFydCkge1xyXG4gICAgICAgIG5vZGUuc3RhcnQgPSBmdW5jdGlvbiAoIHdoZW4sIG9mZnNldCwgZHVyYXRpb24gKSB7XHJcbiAgICAgICAgICBpZiAoIG9mZnNldCB8fCBkdXJhdGlvbiApXHJcbiAgICAgICAgICAgIHRoaXMubm90ZUdyYWluT24oIHdoZW4gfHwgMCwgb2Zmc2V0LCBkdXJhdGlvbiApO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm5vdGVPbiggd2hlbiB8fCAwICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLmludGVybmFsX3N0YXJ0ID0gbm9kZS5zdGFydDtcclxuICAgICAgICBub2RlLnN0YXJ0ID0gZnVuY3Rpb24oIHdoZW4sIG9mZnNldCwgZHVyYXRpb24gKSB7XHJcbiAgICAgICAgICBpZiggdHlwZW9mIGR1cmF0aW9uICE9PSAndW5kZWZpbmVkJyApXHJcbiAgICAgICAgICAgIG5vZGUuaW50ZXJuYWxfc3RhcnQoIHdoZW4gfHwgMCwgb2Zmc2V0LCBkdXJhdGlvbiApO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBub2RlLmludGVybmFsX3N0YXJ0KCB3aGVuIHx8IDAsIG9mZnNldCB8fCAwICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW5vZGUuc3RvcCkge1xyXG4gICAgICAgIG5vZGUuc3RvcCA9IGZ1bmN0aW9uICggd2hlbiApIHtcclxuICAgICAgICAgIHRoaXMubm90ZU9mZiggd2hlbiB8fCAwICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLmludGVybmFsX3N0b3AgPSBub2RlLnN0b3A7XHJcbiAgICAgICAgbm9kZS5zdG9wID0gZnVuY3Rpb24oIHdoZW4gKSB7XHJcbiAgICAgICAgICBub2RlLmludGVybmFsX3N0b3AoIHdoZW4gfHwgMCApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZml4U2V0VGFyZ2V0KG5vZGUucGxheWJhY2tSYXRlKTtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9O1xyXG5cclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaW50ZXJuYWxfY3JlYXRlRHluYW1pY3NDb21wcmVzc29yID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEeW5hbWljc0NvbXByZXNzb3I7XHJcbiAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgbm9kZSA9IHRoaXMuaW50ZXJuYWxfY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLnRocmVzaG9sZCk7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLmtuZWUpO1xyXG4gICAgICBmaXhTZXRUYXJnZXQobm9kZS5yYXRpbyk7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLnJlZHVjdGlvbik7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLmF0dGFjayk7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLnJlbGVhc2UpO1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH07XHJcblxyXG4gICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5pbnRlcm5hbF9jcmVhdGVCaXF1YWRGaWx0ZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJpcXVhZEZpbHRlcjtcclxuICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQmlxdWFkRmlsdGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBub2RlID0gdGhpcy5pbnRlcm5hbF9jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcclxuICAgICAgZml4U2V0VGFyZ2V0KG5vZGUuZnJlcXVlbmN5KTtcclxuICAgICAgZml4U2V0VGFyZ2V0KG5vZGUuZGV0dW5lKTtcclxuICAgICAgZml4U2V0VGFyZ2V0KG5vZGUuUSk7XHJcbiAgICAgIGZpeFNldFRhcmdldChub2RlLmdhaW4pO1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoICdjcmVhdGVPc2NpbGxhdG9yJyApKSB7XHJcbiAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuaW50ZXJuYWxfY3JlYXRlT3NjaWxsYXRvciA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlT3NjaWxsYXRvcjtcclxuICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVPc2NpbGxhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmludGVybmFsX2NyZWF0ZU9zY2lsbGF0b3IoKTtcclxuICAgICAgICBpZiAoIW5vZGUuc3RhcnQpIHtcclxuICAgICAgICAgIG5vZGUuc3RhcnQgPSBmdW5jdGlvbiAoIHdoZW4gKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90ZU9uKCB3aGVuIHx8IDAgKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5vZGUuaW50ZXJuYWxfc3RhcnQgPSBub2RlLnN0YXJ0O1xyXG4gICAgICAgICAgbm9kZS5zdGFydCA9IGZ1bmN0aW9uICggd2hlbiApIHtcclxuICAgICAgICAgICAgbm9kZS5pbnRlcm5hbF9zdGFydCggd2hlbiB8fCAwKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbm9kZS5zdG9wKSB7XHJcbiAgICAgICAgICBub2RlLnN0b3AgPSBmdW5jdGlvbiAoIHdoZW4gKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90ZU9mZiggd2hlbiB8fCAwICk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlLmludGVybmFsX3N0b3AgPSBub2RlLnN0b3A7XHJcbiAgICAgICAgICBub2RlLnN0b3AgPSBmdW5jdGlvbiggd2hlbiApIHtcclxuICAgICAgICAgICAgbm9kZS5pbnRlcm5hbF9zdG9wKCB3aGVuIHx8IDAgKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbm9kZS5zZXRQZXJpb2RpY1dhdmUpXHJcbiAgICAgICAgICBub2RlLnNldFBlcmlvZGljV2F2ZSA9IG5vZGUuc2V0V2F2ZVRhYmxlO1xyXG4gICAgICAgIGZpeFNldFRhcmdldChub2RlLmZyZXF1ZW5jeSk7XHJcbiAgICAgICAgZml4U2V0VGFyZ2V0KG5vZGUuZGV0dW5lKTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSAmJlxyXG4gICAgICAhd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcclxuICAgIHdpbmRvdy5PZmZsaW5lQXVkaW9Db250ZXh0ID0gd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcclxuICB9XHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/AudioContextMonkeyPatch.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/Math.trunc.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/Math.trunc.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("// ES6 Math.trunc - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\r\nif (!Math.trunc) {\r\n    Math.trunc = function trunc(x) {\r\n        return x < 0 ? Math.ceil(x) : Math.floor(x);\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvTWF0aC50cnVuYy5qcz9kMzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BvbHlmaWxscy9NYXRoLnRydW5jLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRVM2IE1hdGgudHJ1bmMgLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3RydW5jXHJcbmlmICghTWF0aC50cnVuYykge1xyXG4gICAgTWF0aC50cnVuYyA9IGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgICAgICByZXR1cm4geCA8IDAgPyBNYXRoLmNlaWwoeCkgOiBNYXRoLmZsb29yKHgpO1xyXG4gICAgfTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/Math.trunc.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/Uint32Array.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/Uint32Array.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n* Low-budget Float32Array knock-off, suitable for use with P2.js in IE9\r\n* Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/\r\n* Cameron Foale (http://www.kibibu.com)\r\n*/\r\nif (typeof window.Uint32Array !== 'function' && typeof window.Uint32Array !== 'object')\r\n{\r\n    var CheapArray = function (fakeType)\r\n    {\r\n        var proto = new Array(); // jshint ignore:line\r\n\r\n        window[fakeType] = function(arg) {\r\n\r\n            if (typeof(arg) === 'number')\r\n            {\r\n                Array.call(this, arg);\r\n\r\n                this.length = arg;\r\n\r\n                for (var i = 0; i < this.length; i++)\r\n                {\r\n                    this[i] = 0;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Array.call(this, arg.length);\r\n\r\n                this.length = arg.length;\r\n\r\n                for (var i = 0; i < this.length; i++)\r\n                {\r\n                    this[i] = arg[i];\r\n                }\r\n            }\r\n        };\r\n\r\n        window[fakeType].prototype = proto;\r\n        window[fakeType].constructor = window[fakeType];\r\n    };\r\n\r\n    CheapArray('Float32Array'); // jshint ignore:line\r\n    CheapArray('Uint32Array'); // jshint ignore:line\r\n    CheapArray('Uint16Array'); // jshint ignore:line\r\n    CheapArray('Int16Array'); // jshint ignore:line\r\n    CheapArray('ArrayBuffer'); // jshint ignore:line\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvVWludDMyQXJyYXkuanM/NzkwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwrQkFBK0IsaUJBQWlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtCQUErQixpQkFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCO0FBQy9CLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsNkJBQTZCO0FBQzdCLDhCQUE4QjtBQUM5QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BvbHlmaWxscy9VaW50MzJBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4qIExvdy1idWRnZXQgRmxvYXQzMkFycmF5IGtub2NrLW9mZiwgc3VpdGFibGUgZm9yIHVzZSB3aXRoIFAyLmpzIGluIElFOVxyXG4qIFNvdXJjZTogaHR0cDovL3d3dy5odG1sNWdhbWVkZXZzLmNvbS90b3BpYy81OTg4LXBoYXNlci0xMi1pZTkvXHJcbiogQ2FtZXJvbiBGb2FsZSAoaHR0cDovL3d3dy5raWJpYnUuY29tKVxyXG4qL1xyXG5pZiAodHlwZW9mIHdpbmRvdy5VaW50MzJBcnJheSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygd2luZG93LlVpbnQzMkFycmF5ICE9PSAnb2JqZWN0Jylcclxue1xyXG4gICAgdmFyIENoZWFwQXJyYXkgPSBmdW5jdGlvbiAoZmFrZVR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByb3RvID0gbmV3IEFycmF5KCk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG5cclxuICAgICAgICB3aW5kb3dbZmFrZVR5cGVdID0gZnVuY3Rpb24oYXJnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGFyZykgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBBcnJheS5jYWxsKHRoaXMsIGFyZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBhcmc7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgQXJyYXkuY2FsbCh0aGlzLCBhcmcubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGFyZy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBhcmdbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3aW5kb3dbZmFrZVR5cGVdLnByb3RvdHlwZSA9IHByb3RvO1xyXG4gICAgICAgIHdpbmRvd1tmYWtlVHlwZV0uY29uc3RydWN0b3IgPSB3aW5kb3dbZmFrZVR5cGVdO1xyXG4gICAgfTtcclxuXHJcbiAgICBDaGVhcEFycmF5KCdGbG9hdDMyQXJyYXknKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXHJcbiAgICBDaGVhcEFycmF5KCdVaW50MzJBcnJheScpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcclxuICAgIENoZWFwQXJyYXkoJ1VpbnQxNkFycmF5Jyk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG4gICAgQ2hlYXBBcnJheSgnSW50MTZBcnJheScpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcclxuICAgIENoZWFwQXJyYXkoJ0FycmF5QnVmZmVyJyk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/Uint32Array.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/console.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/console.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * Also fix for the absent console in IE9\r\n */\r\nif (!window.console)\r\n{\r\n    window.console = {};\r\n    window.console.log = window.console.assert = function(){};\r\n    window.console.warn = window.console.assert = function(){};\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvY29uc29sZS5qcz9mMDczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BvbHlmaWxscy9jb25zb2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEFsc28gZml4IGZvciB0aGUgYWJzZW50IGNvbnNvbGUgaW4gSUU5XHJcbiAqL1xyXG5pZiAoIXdpbmRvdy5jb25zb2xlKVxyXG57XHJcbiAgICB3aW5kb3cuY29uc29sZSA9IHt9O1xyXG4gICAgd2luZG93LmNvbnNvbGUubG9nID0gd2luZG93LmNvbnNvbGUuYXNzZXJ0ID0gZnVuY3Rpb24oKXt9O1xyXG4gICAgd2luZG93LmNvbnNvbGUud2FybiA9IHdpbmRvdy5jb25zb2xlLmFzc2VydCA9IGZ1bmN0aW9uKCl7fTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/console.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/index.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/index.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("__webpack_require__(/*! ./Array.forEach */ \"./node_modules/phaser/src/polyfills/Array.forEach.js\");\r\n__webpack_require__(/*! ./Array.isArray */ \"./node_modules/phaser/src/polyfills/Array.isArray.js\");\r\n__webpack_require__(/*! ./AudioContextMonkeyPatch */ \"./node_modules/phaser/src/polyfills/AudioContextMonkeyPatch.js\");\r\n__webpack_require__(/*! ./console */ \"./node_modules/phaser/src/polyfills/console.js\");\r\n__webpack_require__(/*! ./Math.trunc */ \"./node_modules/phaser/src/polyfills/Math.trunc.js\");\r\n__webpack_require__(/*! ./performance.now */ \"./node_modules/phaser/src/polyfills/performance.now.js\");\r\n__webpack_require__(/*! ./requestAnimationFrame */ \"./node_modules/phaser/src/polyfills/requestAnimationFrame.js\");\r\n__webpack_require__(/*! ./Uint32Array */ \"./node_modules/phaser/src/polyfills/Uint32Array.js\");\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvaW5kZXguanM/MzJjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLDZFQUFpQjtBQUN6QixtQkFBTyxDQUFDLDZFQUFpQjtBQUN6QixtQkFBTyxDQUFDLGlHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGlFQUFXO0FBQ25CLG1CQUFPLENBQUMsdUVBQWM7QUFDdEIsbUJBQU8sQ0FBQyxpRkFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw2RkFBeUI7QUFDakMsbUJBQU8sQ0FBQyx5RUFBZSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3BvbHlmaWxscy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vQXJyYXkuZm9yRWFjaCcpO1xyXG5yZXF1aXJlKCcuL0FycmF5LmlzQXJyYXknKTtcclxucmVxdWlyZSgnLi9BdWRpb0NvbnRleHRNb25rZXlQYXRjaCcpO1xyXG5yZXF1aXJlKCcuL2NvbnNvbGUnKTtcclxucmVxdWlyZSgnLi9NYXRoLnRydW5jJyk7XHJcbnJlcXVpcmUoJy4vcGVyZm9ybWFuY2Uubm93Jyk7XHJcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XHJcbnJlcXVpcmUoJy4vVWludDMyQXJyYXknKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/performance.now.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/performance.now.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * performance.now\r\n */\r\n(function () {\r\n\r\n    if ('performance' in window === false)\r\n    {\r\n        window.performance = {};\r\n    }\r\n\r\n    //  Thanks IE8\r\n    Date.now = (Date.now || function () {\r\n        return new Date().getTime();\r\n    });\r\n\r\n    if ('now' in window.performance === false)\r\n    {\r\n        var nowOffset = Date.now();\r\n\r\n        if (performance.timing && performance.timing.navigationStart)\r\n        {\r\n            nowOffset = performance.timing.navigationStart;\r\n        }\r\n\r\n        window.performance.now = function now ()\r\n        {\r\n            return Date.now() - nowOffset;\r\n        }\r\n    }\r\n\r\n})();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvcGVyZm9ybWFuY2Uubm93LmpzP2Q4YmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcG9seWZpbGxzL3BlcmZvcm1hbmNlLm5vdy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBwZXJmb3JtYW5jZS5ub3dcclxuICovXHJcbihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKCdwZXJmb3JtYW5jZScgaW4gd2luZG93ID09PSBmYWxzZSlcclxuICAgIHtcclxuICAgICAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgVGhhbmtzIElFOFxyXG4gICAgRGF0ZS5ub3cgPSAoRGF0ZS5ub3cgfHwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICgnbm93JyBpbiB3aW5kb3cucGVyZm9ybWFuY2UgPT09IGZhbHNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBub3dPZmZzZXQgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICBpZiAocGVyZm9ybWFuY2UudGltaW5nICYmIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBub3dPZmZzZXQgPSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uIG5vdyAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBub3dPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSkoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/performance.now.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/polyfills/requestAnimationFrame.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/polyfills/requestAnimationFrame.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("// References:\r\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n// https://gist.github.com/1579671\r\n// http://updates.html5rocks.com/2012/05/requestAnimationFrame-API-now-with-sub-millisecond-precision\r\n// https://gist.github.com/timhall/4078614\r\n// https://github.com/Financial-Times/polyfill-service/tree/master/polyfills/requestAnimationFrame\r\n\r\n// requestAnimationFrame\r\nvar lastTime = Date.now();\r\n\r\nvar vendors = [ 'ms', 'moz', 'webkit', 'o' ];\r\n\r\nfor (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)\r\n{\r\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n}\r\n\r\nif (!window.requestAnimationFrame)\r\n{\r\n    window.requestAnimationFrame = function (callback)\r\n    {\r\n        if (typeof callback !== 'function')\r\n        {\r\n            throw new TypeError(callback + 'is not a function');\r\n        }\r\n\r\n        var currentTime = Date.now();\r\n        var delay = 16 + lastTime - currentTime;\r\n\r\n        if (delay < 0)\r\n        {\r\n            delay = 0;\r\n        }\r\n\r\n        lastTime = currentTime;\r\n\r\n        return setTimeout(function () {\r\n            lastTime = Date.now();\r\n            callback(performance.now());\r\n        }, delay);\r\n    };\r\n}\r\n\r\nif (!window.cancelAnimationFrame)\r\n{\r\n    window.cancelAnimationFrame = function(id)\r\n    {\r\n        clearTimeout(id);\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmpzP2RkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsZUFBZSxxREFBcUQ7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFJlZmVyZW5jZXM6XHJcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXHJcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1Nzk2NzFcclxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cclxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9GaW5hbmNpYWwtVGltZXMvcG9seWZpbGwtc2VydmljZS90cmVlL21hc3Rlci9wb2x5ZmlsbHMvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcblxyXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxudmFyIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbnZhciB2ZW5kb3JzID0gWyAnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJyBdO1xyXG5cclxuZm9yICh2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgeCsrKVxyXG57XHJcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XHJcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8IHdpbmRvd1t2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xyXG59XHJcblxyXG5pZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXHJcbntcclxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAoZGVsYXkgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsYXkgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyZW50VGltZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcclxuICAgICAgICB9LCBkZWxheSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5pZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSlcclxue1xyXG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpXHJcbiAgICB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcclxuICAgIH07XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/polyfills/requestAnimationFrame.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/BlendModes.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/renderer/BlendModes.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Blend Modes.\r\n * \r\n * @namespace Phaser.BlendModes\r\n * @since 3.0.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * Skips the Blend Mode check in the renderer.\r\n     * \r\n     * @name Phaser.BlendModes.SKIP_CHECK\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SKIP_CHECK: -1,\r\n\r\n    /**\r\n     * Normal blend mode. For Canvas and WebGL.\r\n     * This is the default setting and draws new shapes on top of the existing canvas content.\r\n     * \r\n     * @name Phaser.BlendModes.NORMAL\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    NORMAL: 0,\r\n\r\n    /**\r\n     * Add blend mode. For Canvas and WebGL.\r\n     * Where both shapes overlap the color is determined by adding color values.\r\n     * \r\n     * @name Phaser.BlendModes.ADD\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    ADD: 1,\r\n\r\n    /**\r\n     * Multiply blend mode. For Canvas and WebGL.\r\n     * The pixels are of the top layer are multiplied with the corresponding pixel of the bottom layer. A darker picture is the result.\r\n     * \r\n     * @name Phaser.BlendModes.MULTIPLY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    MULTIPLY: 2,\r\n\r\n    /**\r\n     * Screen blend mode. For Canvas and WebGL.\r\n     * The pixels are inverted, multiplied, and inverted again. A lighter picture is the result (opposite of multiply)\r\n     * \r\n     * @name Phaser.BlendModes.SCREEN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SCREEN: 3,\r\n\r\n    /**\r\n     * Overlay blend mode. For Canvas only.\r\n     * A combination of multiply and screen. Dark parts on the base layer become darker, and light parts become lighter.\r\n     * \r\n     * @name Phaser.BlendModes.OVERLAY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    OVERLAY: 4,\r\n\r\n    /**\r\n     * Darken blend mode. For Canvas only.\r\n     * Retains the darkest pixels of both layers.\r\n     * \r\n     * @name Phaser.BlendModes.DARKEN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DARKEN: 5,\r\n\r\n    /**\r\n     * Lighten blend mode. For Canvas only.\r\n     * Retains the lightest pixels of both layers.\r\n     * \r\n     * @name Phaser.BlendModes.LIGHTEN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    LIGHTEN: 6,\r\n\r\n    /**\r\n     * Color Dodge blend mode. For Canvas only.\r\n     * Divides the bottom layer by the inverted top layer.\r\n     * \r\n     * @name Phaser.BlendModes.COLOR_DODGE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    COLOR_DODGE: 7,\r\n\r\n    /**\r\n     * Color Burn blend mode. For Canvas only.\r\n     * Divides the inverted bottom layer by the top layer, and then inverts the result.\r\n     * \r\n     * @name Phaser.BlendModes.COLOR_BURN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    COLOR_BURN: 8,\r\n\r\n    /**\r\n     * Hard Light blend mode. For Canvas only.\r\n     * A combination of multiply and screen like overlay, but with top and bottom layer swapped.\r\n     * \r\n     * @name Phaser.BlendModes.HARD_LIGHT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    HARD_LIGHT: 9,\r\n\r\n    /**\r\n     * Soft Light blend mode. For Canvas only.\r\n     * A softer version of hard-light. Pure black or white does not result in pure black or white.\r\n     * \r\n     * @name Phaser.BlendModes.SOFT_LIGHT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SOFT_LIGHT: 10,\r\n\r\n    /**\r\n     * Difference blend mode. For Canvas only.\r\n     * Subtracts the bottom layer from the top layer or the other way round to always get a positive value.\r\n     * \r\n     * @name Phaser.BlendModes.DIFFERENCE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DIFFERENCE: 11,\r\n\r\n    /**\r\n     * Exclusion blend mode. For Canvas only.\r\n     * Like difference, but with lower contrast.\r\n     * \r\n     * @name Phaser.BlendModes.EXCLUSION\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    EXCLUSION: 12,\r\n\r\n    /**\r\n     * Hue blend mode. For Canvas only.\r\n     * Preserves the luma and chroma of the bottom layer, while adopting the hue of the top layer.\r\n     * \r\n     * @name Phaser.BlendModes.HUE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    HUE: 13,\r\n\r\n    /**\r\n     * Saturation blend mode. For Canvas only.\r\n     * Preserves the luma and hue of the bottom layer, while adopting the chroma of the top layer.\r\n     * \r\n     * @name Phaser.BlendModes.SATURATION\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SATURATION: 14,\r\n\r\n    /**\r\n     * Color blend mode. For Canvas only.\r\n     * Preserves the luma of the bottom layer, while adopting the hue and chroma of the top layer.\r\n     * \r\n     * @name Phaser.BlendModes.COLOR\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    COLOR: 15,\r\n\r\n    /**\r\n     * Luminosity blend mode. For Canvas only.\r\n     * Preserves the hue and chroma of the bottom layer, while adopting the luma of the top layer.\r\n     * \r\n     * @name Phaser.BlendModes.LUMINOSITY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    LUMINOSITY: 16,\r\n\r\n    /**\r\n     * Alpha erase blend mode. For Canvas and WebGL.\r\n     * \r\n     * @name Phaser.BlendModes.ERASE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    ERASE: 17,\r\n\r\n    /**\r\n     * Source-in blend mode. For Canvas only.\r\n     * The new shape is drawn only where both the new shape and the destination canvas overlap. Everything else is made transparent.\r\n     * \r\n     * @name Phaser.BlendModes.SOURCE_IN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SOURCE_IN: 18,\r\n\r\n    /**\r\n     * Source-out blend mode. For Canvas only.\r\n     * The new shape is drawn where it doesn't overlap the existing canvas content.\r\n     * \r\n     * @name Phaser.BlendModes.SOURCE_OUT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SOURCE_OUT: 19,\r\n\r\n    /**\r\n     * Source-out blend mode. For Canvas only.\r\n     * The new shape is only drawn where it overlaps the existing canvas content.\r\n     * \r\n     * @name Phaser.BlendModes.SOURCE_ATOP\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    SOURCE_ATOP: 20,\r\n\r\n    /**\r\n     * Destination-over blend mode. For Canvas only.\r\n     * New shapes are drawn behind the existing canvas content.\r\n     * \r\n     * @name Phaser.BlendModes.DESTINATION_OVER\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DESTINATION_OVER: 21,\r\n\r\n    /**\r\n     * Destination-in blend mode. For Canvas only.\r\n     * The existing canvas content is kept where both the new shape and existing canvas content overlap. Everything else is made transparent.\r\n     * \r\n     * @name Phaser.BlendModes.DESTINATION_IN\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DESTINATION_IN: 22,\r\n\r\n    /**\r\n     * Destination-out blend mode. For Canvas only.\r\n     * The existing content is kept where it doesn't overlap the new shape.\r\n     * \r\n     * @name Phaser.BlendModes.DESTINATION_OUT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DESTINATION_OUT: 23,\r\n\r\n    /**\r\n     * Destination-out blend mode. For Canvas only.\r\n     * The existing canvas is only kept where it overlaps the new shape. The new shape is drawn behind the canvas content.\r\n     * \r\n     * @name Phaser.BlendModes.DESTINATION_ATOP\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    DESTINATION_ATOP: 24,\r\n\r\n    /**\r\n     * Lighten blend mode. For Canvas only.\r\n     * Where both shapes overlap the color is determined by adding color values.\r\n     * \r\n     * @name Phaser.BlendModes.LIGHTER\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    LIGHTER: 25,\r\n\r\n    /**\r\n     * Copy blend mode. For Canvas only.\r\n     * Only the new shape is shown.\r\n     * \r\n     * @name Phaser.BlendModes.COPY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    COPY: 26,\r\n\r\n    /**\r\n     * Xor blend mode. For Canvas only.\r\n     * Shapes are made transparent where both overlap and drawn normal everywhere else.\r\n     * \r\n     * @name Phaser.BlendModes.XOR\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    XOR: 27\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9CbGVuZE1vZGVzLmpzPzM4YTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL0JsZW5kTW9kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgQmxlbmQgTW9kZXMuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5CbGVuZE1vZGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2tpcHMgdGhlIEJsZW5kIE1vZGUgY2hlY2sgaW4gdGhlIHJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5TS0lQX0NIRUNLXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNLSVBfQ0hFQ0s6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsIGJsZW5kIG1vZGUuIEZvciBDYW52YXMgYW5kIFdlYkdMLlxyXG4gICAgICogVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIGFuZCBkcmF3cyBuZXcgc2hhcGVzIG9uIHRvcCBvZiB0aGUgZXhpc3RpbmcgY2FudmFzIGNvbnRlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLk5PUk1BTFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOT1JNQUw6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBhbmQgV2ViR0wuXHJcbiAgICAgKiBXaGVyZSBib3RoIHNoYXBlcyBvdmVybGFwIHRoZSBjb2xvciBpcyBkZXRlcm1pbmVkIGJ5IGFkZGluZyBjb2xvciB2YWx1ZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkFERFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBBREQ6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIGFuZCBXZWJHTC5cclxuICAgICAqIFRoZSBwaXhlbHMgYXJlIG9mIHRoZSB0b3AgbGF5ZXIgYXJlIG11bHRpcGxpZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBvZiB0aGUgYm90dG9tIGxheWVyLiBBIGRhcmtlciBwaWN0dXJlIGlzIHRoZSByZXN1bHQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLk1VTFRJUExZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE1VTFRJUExZOiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NyZWVuIGJsZW5kIG1vZGUuIEZvciBDYW52YXMgYW5kIFdlYkdMLlxyXG4gICAgICogVGhlIHBpeGVscyBhcmUgaW52ZXJ0ZWQsIG11bHRpcGxpZWQsIGFuZCBpbnZlcnRlZCBhZ2Fpbi4gQSBsaWdodGVyIHBpY3R1cmUgaXMgdGhlIHJlc3VsdCAob3Bwb3NpdGUgb2YgbXVsdGlwbHkpXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLlNDUkVFTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTQ1JFRU46IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVybGF5IGJsZW5kIG1vZGUuIEZvciBDYW52YXMgb25seS5cclxuICAgICAqIEEgY29tYmluYXRpb24gb2YgbXVsdGlwbHkgYW5kIHNjcmVlbi4gRGFyayBwYXJ0cyBvbiB0aGUgYmFzZSBsYXllciBiZWNvbWUgZGFya2VyLCBhbmQgbGlnaHQgcGFydHMgYmVjb21lIGxpZ2h0ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLk9WRVJMQVlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgT1ZFUkxBWTogNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERhcmtlbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBSZXRhaW5zIHRoZSBkYXJrZXN0IHBpeGVscyBvZiBib3RoIGxheWVycy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuREFSS0VOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERBUktFTjogNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpZ2h0ZW4gYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogUmV0YWlucyB0aGUgbGlnaHRlc3QgcGl4ZWxzIG9mIGJvdGggbGF5ZXJzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5MSUdIVEVOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExJR0hURU46IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xvciBEb2RnZSBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBEaXZpZGVzIHRoZSBib3R0b20gbGF5ZXIgYnkgdGhlIGludmVydGVkIHRvcCBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuQ09MT1JfRE9ER0VcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ09MT1JfRE9ER0U6IDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xvciBCdXJuIGJsZW5kIG1vZGUuIEZvciBDYW52YXMgb25seS5cclxuICAgICAqIERpdmlkZXMgdGhlIGludmVydGVkIGJvdHRvbSBsYXllciBieSB0aGUgdG9wIGxheWVyLCBhbmQgdGhlbiBpbnZlcnRzIHRoZSByZXN1bHQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkNPTE9SX0JVUk5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ09MT1JfQlVSTjogOCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhcmQgTGlnaHQgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogQSBjb21iaW5hdGlvbiBvZiBtdWx0aXBseSBhbmQgc2NyZWVuIGxpa2Ugb3ZlcmxheSwgYnV0IHdpdGggdG9wIGFuZCBib3R0b20gbGF5ZXIgc3dhcHBlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuSEFSRF9MSUdIVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBIQVJEX0xJR0hUOiA5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU29mdCBMaWdodCBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBBIHNvZnRlciB2ZXJzaW9uIG9mIGhhcmQtbGlnaHQuIFB1cmUgYmxhY2sgb3Igd2hpdGUgZG9lcyBub3QgcmVzdWx0IGluIHB1cmUgYmxhY2sgb3Igd2hpdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLlNPRlRfTElHSFRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU09GVF9MSUdIVDogMTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaWZmZXJlbmNlIGJsZW5kIG1vZGUuIEZvciBDYW52YXMgb25seS5cclxuICAgICAqIFN1YnRyYWN0cyB0aGUgYm90dG9tIGxheWVyIGZyb20gdGhlIHRvcCBsYXllciBvciB0aGUgb3RoZXIgd2F5IHJvdW5kIHRvIGFsd2F5cyBnZXQgYSBwb3NpdGl2ZSB2YWx1ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuRElGRkVSRU5DRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBESUZGRVJFTkNFOiAxMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4Y2x1c2lvbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBMaWtlIGRpZmZlcmVuY2UsIGJ1dCB3aXRoIGxvd2VyIGNvbnRyYXN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5FWENMVVNJT05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRVhDTFVTSU9OOiAxMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEh1ZSBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBQcmVzZXJ2ZXMgdGhlIGx1bWEgYW5kIGNocm9tYSBvZiB0aGUgYm90dG9tIGxheWVyLCB3aGlsZSBhZG9wdGluZyB0aGUgaHVlIG9mIHRoZSB0b3AgbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkhVRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBIVUU6IDEzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F0dXJhdGlvbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBQcmVzZXJ2ZXMgdGhlIGx1bWEgYW5kIGh1ZSBvZiB0aGUgYm90dG9tIGxheWVyLCB3aGlsZSBhZG9wdGluZyB0aGUgY2hyb21hIG9mIHRoZSB0b3AgbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLlNBVFVSQVRJT05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU0FUVVJBVElPTjogMTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xvciBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBQcmVzZXJ2ZXMgdGhlIGx1bWEgb2YgdGhlIGJvdHRvbSBsYXllciwgd2hpbGUgYWRvcHRpbmcgdGhlIGh1ZSBhbmQgY2hyb21hIG9mIHRoZSB0b3AgbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkNPTE9SXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENPTE9SOiAxNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEx1bWlub3NpdHkgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogUHJlc2VydmVzIHRoZSBodWUgYW5kIGNocm9tYSBvZiB0aGUgYm90dG9tIGxheWVyLCB3aGlsZSBhZG9wdGluZyB0aGUgbHVtYSBvZiB0aGUgdG9wIGxheWVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5MVU1JTk9TSVRZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExVTUlOT1NJVFk6IDE2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxwaGEgZXJhc2UgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBhbmQgV2ViR0wuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkVSQVNFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEVSQVNFOiAxNyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvdXJjZS1pbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBUaGUgbmV3IHNoYXBlIGlzIGRyYXduIG9ubHkgd2hlcmUgYm90aCB0aGUgbmV3IHNoYXBlIGFuZCB0aGUgZGVzdGluYXRpb24gY2FudmFzIG92ZXJsYXAuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBtYWRlIHRyYW5zcGFyZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5TT1VSQ0VfSU5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU09VUkNFX0lOOiAxOCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvdXJjZS1vdXQgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogVGhlIG5ldyBzaGFwZSBpcyBkcmF3biB3aGVyZSBpdCBkb2Vzbid0IG92ZXJsYXAgdGhlIGV4aXN0aW5nIGNhbnZhcyBjb250ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5TT1VSQ0VfT1VUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNPVVJDRV9PVVQ6IDE5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU291cmNlLW91dCBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBUaGUgbmV3IHNoYXBlIGlzIG9ubHkgZHJhd24gd2hlcmUgaXQgb3ZlcmxhcHMgdGhlIGV4aXN0aW5nIGNhbnZhcyBjb250ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5TT1VSQ0VfQVRPUFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTT1VSQ0VfQVRPUDogMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0aW5hdGlvbi1vdmVyIGJsZW5kIG1vZGUuIEZvciBDYW52YXMgb25seS5cclxuICAgICAqIE5ldyBzaGFwZXMgYXJlIGRyYXduIGJlaGluZCB0aGUgZXhpc3RpbmcgY2FudmFzIGNvbnRlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkRFU1RJTkFUSU9OX09WRVJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgREVTVElOQVRJT05fT1ZFUjogMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0aW5hdGlvbi1pbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBUaGUgZXhpc3RpbmcgY2FudmFzIGNvbnRlbnQgaXMga2VwdCB3aGVyZSBib3RoIHRoZSBuZXcgc2hhcGUgYW5kIGV4aXN0aW5nIGNhbnZhcyBjb250ZW50IG92ZXJsYXAuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBtYWRlIHRyYW5zcGFyZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5ERVNUSU5BVElPTl9JTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBERVNUSU5BVElPTl9JTjogMjIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0aW5hdGlvbi1vdXQgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogVGhlIGV4aXN0aW5nIGNvbnRlbnQgaXMga2VwdCB3aGVyZSBpdCBkb2Vzbid0IG92ZXJsYXAgdGhlIG5ldyBzaGFwZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuREVTVElOQVRJT05fT1VUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERFU1RJTkFUSU9OX09VVDogMjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0aW5hdGlvbi1vdXQgYmxlbmQgbW9kZS4gRm9yIENhbnZhcyBvbmx5LlxyXG4gICAgICogVGhlIGV4aXN0aW5nIGNhbnZhcyBpcyBvbmx5IGtlcHQgd2hlcmUgaXQgb3ZlcmxhcHMgdGhlIG5ldyBzaGFwZS4gVGhlIG5ldyBzaGFwZSBpcyBkcmF3biBiZWhpbmQgdGhlIGNhbnZhcyBjb250ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5ERVNUSU5BVElPTl9BVE9QXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERFU1RJTkFUSU9OX0FUT1A6IDI0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlnaHRlbiBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBXaGVyZSBib3RoIHNoYXBlcyBvdmVybGFwIHRoZSBjb2xvciBpcyBkZXRlcm1pbmVkIGJ5IGFkZGluZyBjb2xvciB2YWx1ZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5CbGVuZE1vZGVzLkxJR0hURVJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTElHSFRFUjogMjUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGJsZW5kIG1vZGUuIEZvciBDYW52YXMgb25seS5cclxuICAgICAqIE9ubHkgdGhlIG5ldyBzaGFwZSBpcyBzaG93bi5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkJsZW5kTW9kZXMuQ09QWVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDT1BZOiAyNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFhvciBibGVuZCBtb2RlLiBGb3IgQ2FudmFzIG9ubHkuXHJcbiAgICAgKiBTaGFwZXMgYXJlIG1hZGUgdHJhbnNwYXJlbnQgd2hlcmUgYm90aCBvdmVybGFwIGFuZCBkcmF3biBub3JtYWwgZXZlcnl3aGVyZSBlbHNlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQmxlbmRNb2Rlcy5YT1JcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgWE9SOiAyN1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/BlendModes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/ScaleModes.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/renderer/ScaleModes.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Scale Modes.\r\n * \r\n * @namespace Phaser.ScaleModes\r\n * @since 3.0.0\r\n */\r\n\r\nvar ScaleModes = {\r\n\r\n    /**\r\n     * Default Scale Mode (Linear).\r\n     * \r\n     * @name Phaser.ScaleModes.DEFAULT\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    DEFAULT: 0,\r\n\r\n    /**\r\n     * Linear Scale Mode.\r\n     * \r\n     * @name Phaser.ScaleModes.LINEAR\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    LINEAR: 0,\r\n\r\n    /**\r\n     * Nearest Scale Mode.\r\n     * \r\n     * @name Phaser.ScaleModes.NEAREST\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    NEAREST: 1\r\n\r\n};\r\n\r\nmodule.exports = ScaleModes;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9TY2FsZU1vZGVzLmpzPzIxYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL1NjYWxlTW9kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTW9kZXMuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5TY2FsZU1vZGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbnZhciBTY2FsZU1vZGVzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCBTY2FsZSBNb2RlIChMaW5lYXIpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGVNb2Rlcy5ERUZBVUxUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERFRkFVTFQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgU2NhbGUgTW9kZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlTW9kZXMuTElORUFSXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExJTkVBUjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lYXJlc3QgU2NhbGUgTW9kZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlTW9kZXMuTkVBUkVTVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBORUFSRVNUOiAxXHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2FsZU1vZGVzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/ScaleModes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasSnapshot = __webpack_require__(/*! ../snapshot/CanvasSnapshot */ \"./node_modules/phaser/src/renderer/snapshot/CanvasSnapshot.js\");\r\nvar CameraEvents = __webpack_require__(/*! ../../cameras/2d/events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar GetBlendModes = __webpack_require__(/*! ./utils/GetBlendModes */ \"./node_modules/phaser/src/renderer/canvas/utils/GetBlendModes.js\");\r\nvar ScaleEvents = __webpack_require__(/*! ../../scale/events */ \"./node_modules/phaser/src/scale/events/index.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Canvas Renderer is responsible for managing 2D canvas rendering contexts, including the one used by the Game's canvas. It tracks the internal state of a given context and can renderer textured Game Objects to it, taking into account alpha, blending, and scaling.\r\n *\r\n * @class CanvasRenderer\r\n * @memberof Phaser.Renderer.Canvas\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser Game instance that owns this renderer.\r\n */\r\nvar CanvasRenderer = new Class({\r\n\r\n    initialize:\r\n\r\n    function CanvasRenderer (game)\r\n    {\r\n        /**\r\n         * The Phaser Game instance that owns this renderer.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A constant which allows the renderer to be easily identified as a Canvas Renderer.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#type\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = CONST.CANVAS;\r\n\r\n        /**\r\n         * The total number of Game Objects which were rendered in a frame.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#drawCount\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.drawCount = 0;\r\n\r\n        /**\r\n         * The width of the canvas being rendered to.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#width\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = 0;\r\n\r\n        /**\r\n         * The height of the canvas being rendered to.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#height\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = 0;\r\n\r\n        /**\r\n         * The local configuration settings of the CanvasRenderer.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#config\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = {\r\n            clearBeforeRender: game.config.clearBeforeRender,\r\n            backgroundColor: game.config.backgroundColor,\r\n            resolution: game.config.resolution,\r\n            antialias: game.config.antialias,\r\n            roundPixels: game.config.roundPixels\r\n        };\r\n\r\n        /**\r\n         * The canvas element which the Game uses.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#gameCanvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.gameCanvas = game.canvas;\r\n\r\n        var contextOptions = {\r\n            alpha: game.config.transparent,\r\n            desynchronized: game.config.desynchronized\r\n        };\r\n\r\n        /**\r\n         * The canvas context used to render all Cameras in all Scenes during the game loop.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#gameContext\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.0.0\r\n         */\r\n        this.gameContext = (this.game.config.context) ? this.game.config.context : this.gameCanvas.getContext('2d', contextOptions);\r\n\r\n        /**\r\n         * The canvas context currently used by the CanvasRenderer for all rendering operations.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#currentContext\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.0.0\r\n         */\r\n        this.currentContext = this.gameContext;\r\n\r\n        /**\r\n         * Should the Canvas use Image Smoothing or not when drawing Sprites?\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#antialias\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.antialias = game.config.antialias;\r\n\r\n        /**\r\n         * The blend modes supported by the Canvas Renderer.\r\n         *\r\n         * This object maps the {@link Phaser.BlendModes} to canvas compositing operations.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#blendModes\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.blendModes = GetBlendModes();\r\n\r\n        /**\r\n         * Details about the currently scheduled snapshot.\r\n         * \r\n         * If a non-null `callback` is set in this object, a snapshot of the canvas will be taken after the current frame is fully rendered.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#snapshotState\r\n         * @type {Phaser.Types.Renderer.Snapshot.SnapshotState}\r\n         * @since 3.16.0\r\n         */\r\n        this.snapshotState = {\r\n            x: 0,\r\n            y: 0,\r\n            width: 1,\r\n            height: 1,\r\n            getPixel: false,\r\n            callback: null,\r\n            type: 'image/png',\r\n            encoder: 0.92\r\n        };\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#_tempMatrix1\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix1 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#_tempMatrix2\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#_tempMatrix3\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix3 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.Canvas.CanvasRenderer#_tempMatrix4\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix4 = new TransformMatrix();\r\n\r\n        this.init();\r\n    },\r\n\r\n    /**\r\n     * Prepares the game canvas for rendering.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#init\r\n     * @since 3.0.0\r\n     */\r\n    init: function ()\r\n    {\r\n        this.game.scale.on(ScaleEvents.RESIZE, this.onResize, this);\r\n\r\n        var baseSize = this.game.scale.baseSize;\r\n\r\n        this.resize(baseSize.width, baseSize.height);\r\n    },\r\n\r\n    /**\r\n     * The event handler that manages the `resize` event dispatched by the Scale Manager.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#onResize\r\n     * @since 3.16.0\r\n     *\r\n     * @param {Phaser.Structs.Size} gameSize - The default Game Size object. This is the un-modified game dimensions.\r\n     * @param {Phaser.Structs.Size} baseSize - The base Size object. The game dimensions multiplied by the resolution. The canvas width / height values match this.\r\n     * @param {Phaser.Structs.Size} displaySize - The display Size object. The size of the canvas style width / height attributes.\r\n     * @param {number} [resolution] - The Scale Manager resolution setting.\r\n     */\r\n    onResize: function (gameSize, baseSize)\r\n    {\r\n        //  Has the underlying canvas size changed?\r\n        if (baseSize.width !== this.width || baseSize.height !== this.height)\r\n        {\r\n            this.resize(baseSize.width, baseSize.height);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resize the main game canvas.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#resize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [width] - The new width of the renderer.\r\n     * @param {number} [height] - The new height of the renderer.\r\n     */\r\n    resize: function (width, height)\r\n    {\r\n        this.width = width;\r\n        this.height = height;\r\n    },\r\n\r\n    /**\r\n     * Resets the transformation matrix of the current context to the identity matrix, thus resetting any transformation.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#resetTransform\r\n     * @since 3.0.0\r\n     */\r\n    resetTransform: function ()\r\n    {\r\n        this.currentContext.setTransform(1, 0, 0, 1, 0, 0);\r\n    },\r\n\r\n    /**\r\n     * Sets the blend mode (compositing operation) of the current context.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#setBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} blendMode - The new blend mode which should be used.\r\n     *\r\n     * @return {this} This CanvasRenderer object.\r\n     */\r\n    setBlendMode: function (blendMode)\r\n    {\r\n        this.currentContext.globalCompositeOperation = blendMode;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Changes the Canvas Rendering Context that all draw operations are performed against.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#setContext\r\n     * @since 3.12.0\r\n     *\r\n     * @param {?CanvasRenderingContext2D} [ctx] - The new Canvas Rendering Context to draw everything to. Leave empty to reset to the Game Canvas.\r\n     *\r\n     * @return {this} The Canvas Renderer instance.\r\n     */\r\n    setContext: function (ctx)\r\n    {\r\n        this.currentContext = (ctx) ? ctx : this.gameContext;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the global alpha of the current context.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#setAlpha\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} alpha - The new alpha to use, where 0 is fully transparent and 1 is fully opaque.\r\n     *\r\n     * @return {this} This CanvasRenderer object.\r\n     */\r\n    setAlpha: function (alpha)\r\n    {\r\n        this.currentContext.globalAlpha = alpha;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called at the start of the render loop.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#preRender\r\n     * @since 3.0.0\r\n     */\r\n    preRender: function ()\r\n    {\r\n        var ctx = this.gameContext;\r\n        var config = this.config;\r\n\r\n        var width = this.width;\r\n        var height = this.height;\r\n\r\n        ctx.globalAlpha = 1;\r\n        ctx.globalCompositeOperation = 'source-over';\r\n        ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n\r\n        if (config.clearBeforeRender)\r\n        {\r\n            ctx.clearRect(0, 0, width, height);\r\n        }\r\n\r\n        if (!config.transparent)\r\n        {\r\n            ctx.fillStyle = config.backgroundColor.rgba;\r\n            ctx.fillRect(0, 0, width, height);\r\n        }\r\n\r\n        ctx.save();\r\n\r\n        this.drawCount = 0;\r\n    },\r\n\r\n    /**\r\n     * Renders the Scene to the given Camera.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#render\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene to render.\r\n     * @param {Phaser.GameObjects.DisplayList} children - The Game Objects within the Scene to be rendered.\r\n     * @param {number} interpolationPercentage - The interpolation percentage to apply. Currently unused.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Scene Camera to render with.\r\n     */\r\n    render: function (scene, children, interpolationPercentage, camera)\r\n    {\r\n        var list = children.list;\r\n        var childCount = list.length;\r\n\r\n        var cx = camera._cx;\r\n        var cy = camera._cy;\r\n        var cw = camera._cw;\r\n        var ch = camera._ch;\r\n\r\n        var ctx = (camera.renderToTexture) ? camera.context : scene.sys.context;\r\n\r\n        //  Save context pre-clip\r\n        ctx.save();\r\n\r\n        if (this.game.scene.customViewports)\r\n        {\r\n            ctx.beginPath();\r\n            ctx.rect(cx, cy, cw, ch);\r\n            ctx.clip();\r\n        }\r\n\r\n        this.currentContext = ctx;\r\n\r\n        var mask = camera.mask;\r\n\r\n        if (mask)\r\n        {\r\n            mask.preRenderCanvas(this, null, camera._maskCamera);\r\n        }\r\n\r\n        if (!camera.transparent)\r\n        {\r\n            ctx.fillStyle = camera.backgroundColor.rgba;\r\n            ctx.fillRect(cx, cy, cw, ch);\r\n        }\r\n\r\n        ctx.globalAlpha = camera.alpha;\r\n\r\n        ctx.globalCompositeOperation = 'source-over';\r\n\r\n        this.drawCount += list.length;\r\n\r\n        if (camera.renderToTexture)\r\n        {\r\n            camera.emit(CameraEvents.PRE_RENDER, camera);\r\n        }\r\n\r\n        camera.matrix.copyToContext(ctx);\r\n\r\n        for (var i = 0; i < childCount; i++)\r\n        {\r\n            var child = list[i];\r\n\r\n            if (!child.willRender(camera))\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (child.mask)\r\n            {\r\n                child.mask.preRenderCanvas(this, child, camera);\r\n            }\r\n\r\n            child.renderCanvas(this, child, interpolationPercentage, camera);\r\n\r\n            if (child.mask)\r\n            {\r\n                child.mask.postRenderCanvas(this, child, camera);\r\n            }\r\n        }\r\n\r\n        ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n        ctx.globalCompositeOperation = 'source-over';\r\n        ctx.globalAlpha = 1;\r\n\r\n        camera.flashEffect.postRenderCanvas(ctx);\r\n        camera.fadeEffect.postRenderCanvas(ctx);\r\n\r\n        camera.dirty = false;\r\n\r\n        if (mask)\r\n        {\r\n            mask.postRenderCanvas(this);\r\n        }\r\n\r\n        //  Restore pre-clip context\r\n        ctx.restore();\r\n\r\n        if (camera.renderToTexture)\r\n        {\r\n            camera.emit(CameraEvents.POST_RENDER, camera);\r\n\r\n            scene.sys.context.drawImage(camera.canvas, cx, cy);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Restores the game context's global settings and takes a snapshot if one is scheduled.\r\n     *\r\n     * The post-render step happens after all Cameras in all Scenes have been rendered.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#postRender\r\n     * @since 3.0.0\r\n     */\r\n    postRender: function ()\r\n    {\r\n        var ctx = this.gameContext;\r\n\r\n        ctx.restore();\r\n\r\n        var state = this.snapshotState;\r\n\r\n        if (state.callback)\r\n        {\r\n            CanvasSnapshot(this.gameCanvas, state);\r\n\r\n            state.callback = null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the given area of the given canvas.\r\n     * \r\n     * Unlike the other snapshot methods, this one is processed immediately and doesn't wait for the next render.\r\n     * \r\n     * Snapshots work by creating an Image object from the canvas data, this is a blocking process, which gets\r\n     * more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#snapshotCanvas\r\n     * @since 3.19.0\r\n     *\r\n     * @param {HTMLCanvasElement} canvas - The canvas to grab from.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {boolean} [getPixel=false] - Grab a single pixel as a Color object, or an area as an Image object?\r\n     * @param {integer} [x=0] - The x coordinate to grab from.\r\n     * @param {integer} [y=0] - The y coordinate to grab from.\r\n     * @param {integer} [width=canvas.width] - The width of the area to grab.\r\n     * @param {integer} [height=canvas.height] - The height of the area to grab.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This Canvas Renderer.\r\n     */\r\n    snapshotCanvas: function (canvas, callback, getPixel, x, y, width, height, type, encoderOptions)\r\n    {\r\n        if (getPixel === undefined) { getPixel = false; }\r\n\r\n        this.snapshotArea(x, y, width, height, callback, type, encoderOptions);\r\n\r\n        var state = this.snapshotState;\r\n\r\n        state.getPixel = getPixel;\r\n\r\n        CanvasSnapshot(this.canvas, state);\r\n\r\n        state.callback = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the entire game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture a specific area see the `snapshotArea` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotPixel`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Snapshots work by creating an Image object from the canvas data, this is a blocking process, which gets\r\n     * more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#snapshot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshot: function (callback, type, encoderOptions)\r\n    {\r\n        return this.snapshotArea(0, 0, this.gameCanvas.width, this.gameCanvas.height, callback, type, encoderOptions);\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the given area of the game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture the whole game viewport see the `snapshot` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotPixel`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Snapshots work by creating an Image object from the canvas data, this is a blocking process, which gets\r\n     * more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#snapshotArea\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} x - The x coordinate to grab from.\r\n     * @param {integer} y - The y coordinate to grab from.\r\n     * @param {integer} width - The width of the area to grab.\r\n     * @param {integer} height - The height of the area to grab.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshotArea: function (x, y, width, height, callback, type, encoderOptions)\r\n    {\r\n        var state = this.snapshotState;\r\n\r\n        state.callback = callback;\r\n        state.type = type;\r\n        state.encoder = encoderOptions;\r\n        state.getPixel = false;\r\n        state.x = x;\r\n        state.y = y;\r\n        state.width = Math.min(width, this.gameCanvas.width);\r\n        state.height = Math.min(height, this.gameCanvas.height);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the given pixel from the game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture the whole game viewport see the `snapshot` method. To capture a specific area, see `snapshotArea`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotArea`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Unlike the other two snapshot methods, this one will return a `Color` object containing the color data for\r\n     * the requested pixel. It doesn't need to create an internal Canvas or Image object, so is a lot faster to execute,\r\n     * using less memory.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#snapshotPixel\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} x - The x coordinate of the pixel to get.\r\n     * @param {integer} y - The y coordinate of the pixel to get.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot pixel data is extracted.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshotPixel: function (x, y, callback)\r\n    {\r\n        this.snapshotArea(x, y, 1, 1, callback);\r\n\r\n        this.snapshotState.getPixel = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a Sprite Game Object, or any object that extends it, and draws it to the current context.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#batchSprite\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} sprite - The texture based Game Object to draw.\r\n     * @param {Phaser.Textures.Frame} frame - The frame to draw, doesn't have to be that owned by the Game Object.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to use for the rendering transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [parentTransformMatrix] - The transform matrix of the parent container, if set.\r\n     */\r\n    batchSprite: function (sprite, frame, camera, parentTransformMatrix)\r\n    {\r\n        var alpha = camera.alpha * sprite.alpha;\r\n\r\n        if (alpha === 0)\r\n        {\r\n            //  Nothing to see, so abort early\r\n            return;\r\n        }\r\n    \r\n        var ctx = this.currentContext;\r\n\r\n        var camMatrix = this._tempMatrix1;\r\n        var spriteMatrix = this._tempMatrix2;\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        var cd = frame.canvasData;\r\n\r\n        var frameX = cd.x;\r\n        var frameY = cd.y;\r\n        var frameWidth = frame.cutWidth;\r\n        var frameHeight = frame.cutHeight;\r\n        var customPivot = frame.customPivot;\r\n\r\n        var res = frame.source.resolution;\r\n\r\n        var displayOriginX = sprite.displayOriginX;\r\n        var displayOriginY = sprite.displayOriginY;\r\n\r\n        var x = -displayOriginX + frame.x;\r\n        var y = -displayOriginY + frame.y;\r\n\r\n        if (sprite.isCropped)\r\n        {\r\n            var crop = sprite._crop;\r\n\r\n            if (crop.flipX !== sprite.flipX || crop.flipY !== sprite.flipY)\r\n            {\r\n                frame.updateCropUVs(crop, sprite.flipX, sprite.flipY);\r\n            }\r\n\r\n            frameWidth = crop.cw;\r\n            frameHeight = crop.ch;\r\n    \r\n            frameX = crop.cx;\r\n            frameY = crop.cy;\r\n\r\n            x = -displayOriginX + crop.x;\r\n            y = -displayOriginY + crop.y;\r\n\r\n            if (sprite.flipX)\r\n            {\r\n                if (x >= 0)\r\n                {\r\n                    x = -(x + frameWidth);\r\n                }\r\n                else if (x < 0)\r\n                {\r\n                    x = (Math.abs(x) - frameWidth);\r\n                }\r\n            }\r\n        \r\n            if (sprite.flipY)\r\n            {\r\n                if (y >= 0)\r\n                {\r\n                    y = -(y + frameHeight);\r\n                }\r\n                else if (y < 0)\r\n                {\r\n                    y = (Math.abs(y) - frameHeight);\r\n                }\r\n            }\r\n        }\r\n\r\n        var flipX = 1;\r\n        var flipY = 1;\r\n\r\n        if (sprite.flipX)\r\n        {\r\n            if (!customPivot)\r\n            {\r\n                x += (-frame.realWidth + (displayOriginX * 2));\r\n            }\r\n\r\n            flipX = -1;\r\n        }\r\n\r\n        //  Auto-invert the flipY if this is coming from a GLTexture\r\n        if (sprite.flipY)\r\n        {\r\n            if (!customPivot)\r\n            {\r\n                y += (-frame.realHeight + (displayOriginY * 2));\r\n            }\r\n\r\n            flipY = -1;\r\n        }\r\n\r\n        spriteMatrix.applyITRS(sprite.x, sprite.y, sprite.rotation, sprite.scaleX * flipX, sprite.scaleY * flipY);\r\n\r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        if (parentTransformMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentTransformMatrix, -camera.scrollX * sprite.scrollFactorX, -camera.scrollY * sprite.scrollFactorY);\r\n\r\n            //  Undo the camera scroll\r\n            spriteMatrix.e = sprite.x;\r\n            spriteMatrix.f = sprite.y;\r\n\r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n        else\r\n        {\r\n            spriteMatrix.e -= camera.scrollX * sprite.scrollFactorX;\r\n            spriteMatrix.f -= camera.scrollY * sprite.scrollFactorY;\r\n    \r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n\r\n        ctx.save();\r\n       \r\n        calcMatrix.setToContext(ctx);\r\n\r\n        ctx.globalCompositeOperation = this.blendModes[sprite.blendMode];\r\n\r\n        ctx.globalAlpha = alpha;\r\n\r\n        ctx.imageSmoothingEnabled = !(!this.antialias || frame.source.scaleMode);\r\n\r\n        ctx.drawImage(frame.source.image, frameX, frameY, frameWidth, frameHeight, x, y, frameWidth / res, frameHeight / res);\r\n\r\n        ctx.restore();\r\n    },\r\n\r\n    /**\r\n     * Destroys all object references in the Canvas Renderer.\r\n     *\r\n     * @method Phaser.Renderer.Canvas.CanvasRenderer#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.gameCanvas = null;\r\n        this.gameContext = null;\r\n\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = CanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanM/N2NlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyxpR0FBNEI7QUFDekQsbUJBQW1CLG1CQUFPLENBQUMscUZBQXlCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLHVEQUFhO0FBQ2pDLG9CQUFvQixtQkFBTyxDQUFDLCtGQUF1QjtBQUNuRCxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7QUFDOUMsc0JBQXNCLG1CQUFPLENBQUMseUhBQThDOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHdCQUF3QjtBQUN6RDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSwrQkFBK0I7QUFDOUMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxnREFBZ0Q7QUFDL0QsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0QsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0Q7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBGZWxpcGUgQWxmb25zbyA8QGJpdG5lbmZlcj5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW52YXNTbmFwc2hvdCA9IHJlcXVpcmUoJy4uL3NuYXBzaG90L0NhbnZhc1NuYXBzaG90Jyk7XHJcbnZhciBDYW1lcmFFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9jYW1lcmFzLzJkL2V2ZW50cycpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xyXG52YXIgR2V0QmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4vdXRpbHMvR2V0QmxlbmRNb2RlcycpO1xyXG52YXIgU2NhbGVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9zY2FsZS9ldmVudHMnKTtcclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQ2FudmFzIFJlbmRlcmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyAyRCBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHRzLCBpbmNsdWRpbmcgdGhlIG9uZSB1c2VkIGJ5IHRoZSBHYW1lJ3MgY2FudmFzLiBJdCB0cmFja3MgdGhlIGludGVybmFsIHN0YXRlIG9mIGEgZ2l2ZW4gY29udGV4dCBhbmQgY2FuIHJlbmRlcmVyIHRleHR1cmVkIEdhbWUgT2JqZWN0cyB0byBpdCwgdGFraW5nIGludG8gYWNjb3VudCBhbHBoYSwgYmxlbmRpbmcsIGFuZCBzY2FsaW5nLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ2FudmFzUmVuZGVyZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5SZW5kZXJlci5DYW52YXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIFBoYXNlciBHYW1lIGluc3RhbmNlIHRoYXQgb3ducyB0aGlzIHJlbmRlcmVyLlxyXG4gKi9cclxudmFyIENhbnZhc1JlbmRlcmVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBQaGFzZXIgR2FtZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhpcyByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNvbnN0YW50IHdoaWNoIGFsbG93cyB0aGUgcmVuZGVyZXIgdG8gYmUgZWFzaWx5IGlkZW50aWZpZWQgYXMgYSBDYW52YXMgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBDT05TVC5DQU5WQVM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgR2FtZSBPYmplY3RzIHdoaWNoIHdlcmUgcmVuZGVyZWQgaW4gYSBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjZHJhd0NvdW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmF3Q291bnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyBiZWluZyByZW5kZXJlZCB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIGJlaW5nIHJlbmRlcmVkIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsb2NhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzIG9mIHRoZSBDYW52YXNSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IGdhbWUuY29uZmlnLmNsZWFyQmVmb3JlUmVuZGVyLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGdhbWUuY29uZmlnLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgcmVzb2x1dGlvbjogZ2FtZS5jb25maWcucmVzb2x1dGlvbixcclxuICAgICAgICAgICAgYW50aWFsaWFzOiBnYW1lLmNvbmZpZy5hbnRpYWxpYXMsXHJcbiAgICAgICAgICAgIHJvdW5kUGl4ZWxzOiBnYW1lLmNvbmZpZy5yb3VuZFBpeGVsc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB3aGljaCB0aGUgR2FtZSB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNnYW1lQ2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZUNhbnZhcyA9IGdhbWUuY2FudmFzO1xyXG5cclxuICAgICAgICB2YXIgY29udGV4dE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGFscGhhOiBnYW1lLmNvbmZpZy50cmFuc3BhcmVudCxcclxuICAgICAgICAgICAgZGVzeW5jaHJvbml6ZWQ6IGdhbWUuY29uZmlnLmRlc3luY2hyb25pemVkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbnZhcyBjb250ZXh0IHVzZWQgdG8gcmVuZGVyIGFsbCBDYW1lcmFzIGluIGFsbCBTY2VuZXMgZHVyaW5nIHRoZSBnYW1lIGxvb3AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI2dhbWVDb250ZXh0XHJcbiAgICAgICAgICogQHR5cGUge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWVDb250ZXh0ID0gKHRoaXMuZ2FtZS5jb25maWcuY29udGV4dCkgPyB0aGlzLmdhbWUuY29uZmlnLmNvbnRleHQgOiB0aGlzLmdhbWVDYW52YXMuZ2V0Q29udGV4dCgnMmQnLCBjb250ZXh0T3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYW52YXMgY29udGV4dCBjdXJyZW50bHkgdXNlZCBieSB0aGUgQ2FudmFzUmVuZGVyZXIgZm9yIGFsbCByZW5kZXJpbmcgb3BlcmF0aW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjY3VycmVudENvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbnRleHQgPSB0aGlzLmdhbWVDb250ZXh0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTaG91bGQgdGhlIENhbnZhcyB1c2UgSW1hZ2UgU21vb3RoaW5nIG9yIG5vdCB3aGVuIGRyYXdpbmcgU3ByaXRlcz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjYW50aWFsaWFzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW50aWFsaWFzID0gZ2FtZS5jb25maWcuYW50aWFsaWFzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYmxlbmQgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBDYW52YXMgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIG9iamVjdCBtYXBzIHRoZSB7QGxpbmsgUGhhc2VyLkJsZW5kTW9kZXN9IHRvIGNhbnZhcyBjb21wb3NpdGluZyBvcGVyYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNibGVuZE1vZGVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxlbmRNb2RlcyA9IEdldEJsZW5kTW9kZXMoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgY3VycmVudGx5IHNjaGVkdWxlZCBzbmFwc2hvdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJZiBhIG5vbi1udWxsIGBjYWxsYmFja2AgaXMgc2V0IGluIHRoaXMgb2JqZWN0LCBhIHNuYXBzaG90IG9mIHRoZSBjYW52YXMgd2lsbCBiZSB0YWtlbiBhZnRlciB0aGUgY3VycmVudCBmcmFtZSBpcyBmdWxseSByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjc25hcHNob3RTdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RTdGF0ZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdFN0YXRlID0ge1xyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgICAgICBnZXRQaXhlbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsLFxyXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcclxuICAgICAgICAgICAgZW5jb2RlcjogMC45MlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI190ZW1wTWF0cml4MVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDEgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI190ZW1wTWF0cml4MlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDIgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI190ZW1wTWF0cml4M1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDMgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI190ZW1wTWF0cml4NFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDQgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBhcmVzIHRoZSBnYW1lIGNhbnZhcyBmb3IgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNpbml0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdhbWUuc2NhbGUub24oU2NhbGVFdmVudHMuUkVTSVpFLCB0aGlzLm9uUmVzaXplLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIGJhc2VTaXplID0gdGhpcy5nYW1lLnNjYWxlLmJhc2VTaXplO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZShiYXNlU2l6ZS53aWR0aCwgYmFzZVNpemUuaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgaGFuZGxlciB0aGF0IG1hbmFnZXMgdGhlIGByZXNpemVgIGV2ZW50IGRpc3BhdGNoZWQgYnkgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI29uUmVzaXplXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBnYW1lU2l6ZSAtIFRoZSBkZWZhdWx0IEdhbWUgU2l6ZSBvYmplY3QuIFRoaXMgaXMgdGhlIHVuLW1vZGlmaWVkIGdhbWUgZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX0gYmFzZVNpemUgLSBUaGUgYmFzZSBTaXplIG9iamVjdC4gVGhlIGdhbWUgZGltZW5zaW9ucyBtdWx0aXBsaWVkIGJ5IHRoZSByZXNvbHV0aW9uLiBUaGUgY2FudmFzIHdpZHRoIC8gaGVpZ2h0IHZhbHVlcyBtYXRjaCB0aGlzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBkaXNwbGF5U2l6ZSAtIFRoZSBkaXNwbGF5IFNpemUgb2JqZWN0LiBUaGUgc2l6ZSBvZiB0aGUgY2FudmFzIHN0eWxlIHdpZHRoIC8gaGVpZ2h0IGF0dHJpYnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Jlc29sdXRpb25dIC0gVGhlIFNjYWxlIE1hbmFnZXIgcmVzb2x1dGlvbiBzZXR0aW5nLlxyXG4gICAgICovXHJcbiAgICBvblJlc2l6ZTogZnVuY3Rpb24gKGdhbWVTaXplLCBiYXNlU2l6ZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgSGFzIHRoZSB1bmRlcmx5aW5nIGNhbnZhcyBzaXplIGNoYW5nZWQ/XHJcbiAgICAgICAgaWYgKGJhc2VTaXplLndpZHRoICE9PSB0aGlzLndpZHRoIHx8IGJhc2VTaXplLmhlaWdodCAhPT0gdGhpcy5oZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShiYXNlU2l6ZS53aWR0aCwgYmFzZVNpemUuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBtYWluIGdhbWUgY2FudmFzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNyZXNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeCwgdGh1cyByZXNldHRpbmcgYW55IHRyYW5zZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNyZXNldFRyYW5zZm9ybVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJsZW5kIG1vZGUgKGNvbXBvc2l0aW5nIG9wZXJhdGlvbikgb2YgdGhlIGN1cnJlbnQgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjc2V0QmxlbmRNb2RlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmRNb2RlIC0gVGhlIG5ldyBibGVuZCBtb2RlIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FudmFzUmVuZGVyZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCbGVuZE1vZGU6IGZ1bmN0aW9uIChibGVuZE1vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBibGVuZE1vZGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYW5nZXMgdGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dCB0aGF0IGFsbCBkcmF3IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNzZXRDb250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHs/Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBbY3R4XSAtIFRoZSBuZXcgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0IHRvIGRyYXcgZXZlcnl0aGluZyB0by4gTGVhdmUgZW1wdHkgdG8gcmVzZXQgdG8gdGhlIEdhbWUgQ2FudmFzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoZSBDYW52YXMgUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENvbnRleHQ6IGZ1bmN0aW9uIChjdHgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dCA9IChjdHgpID8gY3R4IDogdGhpcy5nYW1lQ29udGV4dDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZ2xvYmFsIGFscGhhIG9mIHRoZSBjdXJyZW50IGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGEgLSBUaGUgbmV3IGFscGhhIHRvIHVzZSwgd2hlcmUgMCBpcyBmdWxseSB0cmFuc3BhcmVudCBhbmQgMSBpcyBmdWxseSBvcGFxdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW52YXNSZW5kZXJlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dC5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZW5kZXIgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjcHJlUmVuZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcHJlUmVuZGVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjdHggPSB0aGlzLmdhbWVDb250ZXh0O1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XHJcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XHJcbiAgICAgICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5jbGVhckJlZm9yZVJlbmRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy50cmFuc3BhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb25maWcuYmFja2dyb3VuZENvbG9yLnJnYmE7XHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0NvdW50ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXJzIHRoZSBTY2VuZSB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNyZW5kZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byByZW5kZXIuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH0gY2hpbGRyZW4gLSBUaGUgR2FtZSBPYmplY3RzIHdpdGhpbiB0aGUgU2NlbmUgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBUaGUgaW50ZXJwb2xhdGlvbiBwZXJjZW50YWdlIHRvIGFwcGx5LiBDdXJyZW50bHkgdW51c2VkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIFNjZW5lIENhbWVyYSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoc2NlbmUsIGNoaWxkcmVuLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaXN0ID0gY2hpbGRyZW4ubGlzdDtcclxuICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgY3ggPSBjYW1lcmEuX2N4O1xyXG4gICAgICAgIHZhciBjeSA9IGNhbWVyYS5fY3k7XHJcbiAgICAgICAgdmFyIGN3ID0gY2FtZXJhLl9jdztcclxuICAgICAgICB2YXIgY2ggPSBjYW1lcmEuX2NoO1xyXG5cclxuICAgICAgICB2YXIgY3R4ID0gKGNhbWVyYS5yZW5kZXJUb1RleHR1cmUpID8gY2FtZXJhLmNvbnRleHQgOiBzY2VuZS5zeXMuY29udGV4dDtcclxuXHJcbiAgICAgICAgLy8gIFNhdmUgY29udGV4dCBwcmUtY2xpcFxyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWUuc2NlbmUuY3VzdG9tVmlld3BvcnRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICBjdHgucmVjdChjeCwgY3ksIGN3LCBjaCk7XHJcbiAgICAgICAgICAgIGN0eC5jbGlwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRDb250ZXh0ID0gY3R4O1xyXG5cclxuICAgICAgICB2YXIgbWFzayA9IGNhbWVyYS5tYXNrO1xyXG5cclxuICAgICAgICBpZiAobWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1hc2sucHJlUmVuZGVyQ2FudmFzKHRoaXMsIG51bGwsIGNhbWVyYS5fbWFza0NhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNhbWVyYS50cmFuc3BhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjYW1lcmEuYmFja2dyb3VuZENvbG9yLnJnYmE7XHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChjeCwgY3ksIGN3LCBjaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBjYW1lcmEuYWxwaGE7XHJcblxyXG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdDb3VudCArPSBsaXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYS5yZW5kZXJUb1RleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW1lcmEuZW1pdChDYW1lcmFFdmVudHMuUFJFX1JFTkRFUiwgY2FtZXJhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhbWVyYS5tYXRyaXguY29weVRvQ29udGV4dChjdHgpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNoaWxkLndpbGxSZW5kZXIoY2FtZXJhKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXNrLnByZVJlbmRlckNhbnZhcyh0aGlzLCBjaGlsZCwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hpbGQucmVuZGVyQ2FudmFzKHRoaXMsIGNoaWxkLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXNrLnBvc3RSZW5kZXJDYW52YXModGhpcywgY2hpbGQsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XHJcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZsYXNoRWZmZWN0LnBvc3RSZW5kZXJDYW52YXMoY3R4KTtcclxuICAgICAgICBjYW1lcmEuZmFkZUVmZmVjdC5wb3N0UmVuZGVyQ2FudmFzKGN0eCk7XHJcblxyXG4gICAgICAgIGNhbWVyYS5kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAobWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1hc2sucG9zdFJlbmRlckNhbnZhcyh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHByZS1jbGlwIGNvbnRleHRcclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbWVyYS5lbWl0KENhbWVyYUV2ZW50cy5QT1NUX1JFTkRFUiwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5jb250ZXh0LmRyYXdJbWFnZShjYW1lcmEuY2FudmFzLCBjeCwgY3kpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlcyB0aGUgZ2FtZSBjb250ZXh0J3MgZ2xvYmFsIHNldHRpbmdzIGFuZCB0YWtlcyBhIHNuYXBzaG90IGlmIG9uZSBpcyBzY2hlZHVsZWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBvc3QtcmVuZGVyIHN0ZXAgaGFwcGVucyBhZnRlciBhbGwgQ2FtZXJhcyBpbiBhbGwgU2NlbmVzIGhhdmUgYmVlbiByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjcG9zdFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuZ2FtZUNvbnRleHQ7XHJcblxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc25hcHNob3RTdGF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQ2FudmFzU25hcHNob3QodGhpcy5nYW1lQ2FudmFzLCBzdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZS5jYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGdpdmVuIGFyZWEgb2YgdGhlIGdpdmVuIGNhbnZhcy5cclxuICAgICAqIFxyXG4gICAgICogVW5saWtlIHRoZSBvdGhlciBzbmFwc2hvdCBtZXRob2RzLCB0aGlzIG9uZSBpcyBwcm9jZXNzZWQgaW1tZWRpYXRlbHkgYW5kIGRvZXNuJ3Qgd2FpdCBmb3IgdGhlIG5leHQgcmVuZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBTbmFwc2hvdHMgd29yayBieSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSB0aGUgY2FudmFzIGRhdGEsIHRoaXMgaXMgYSBibG9ja2luZyBwcm9jZXNzLCB3aGljaCBnZXRzXHJcbiAgICAgKiBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjc25hcHNob3RDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgLSBUaGUgY2FudmFzIHRvIGdyYWIgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgaW1hZ2UgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2dldFBpeGVsPWZhbHNlXSAtIEdyYWIgYSBzaW5nbGUgcGl4ZWwgYXMgYSBDb2xvciBvYmplY3QsIG9yIGFuIGFyZWEgYXMgYW4gSW1hZ2Ugb2JqZWN0P1xyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZ3JhYiBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeT0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZ3JhYiBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9Y2FudmFzLndpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgYXJlYSB0byBncmFiLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PWNhbnZhcy5oZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBncmFiLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RDYW52YXM6IGZ1bmN0aW9uIChjYW52YXMsIGNhbGxiYWNrLCBnZXRQaXhlbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZW5jb2Rlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGdldFBpeGVsID09PSB1bmRlZmluZWQpIHsgZ2V0UGl4ZWwgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB0aGlzLnNuYXBzaG90QXJlYSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaywgdHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNuYXBzaG90U3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlLmdldFBpeGVsID0gZ2V0UGl4ZWw7XHJcblxyXG4gICAgICAgIENhbnZhc1NuYXBzaG90KHRoaXMuY2FudmFzLCBzdGF0ZSk7XHJcblxyXG4gICAgICAgIHN0YXRlLmNhbGxiYWNrID0gbnVsbDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NoZWR1bGVzIGEgc25hcHNob3Qgb2YgdGhlIGVudGlyZSBnYW1lIHZpZXdwb3J0IHRvIGJlIHRha2VuIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lIGlzIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgYXJlYSBzZWUgdGhlIGBzbmFwc2hvdEFyZWFgIG1ldGhvZC4gVG8gY2FwdHVyZSBhIHNwZWNpZmljIHBpeGVsLCBzZWUgYHNuYXBzaG90UGl4ZWxgLlxyXG4gICAgICogXHJcbiAgICAgKiBPbmx5IG9uZSBzbmFwc2hvdCBjYW4gYmUgYWN0aXZlIF9wZXIgZnJhbWVfLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGxlZCBgc25hcHNob3RQaXhlbGAsIGZvciBleGFtcGxlLCB0aGVuXHJcbiAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgb3ZlcnJpZGUgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIFNuYXBzaG90cyB3b3JrIGJ5IGNyZWF0aW5nIGFuIEltYWdlIG9iamVjdCBmcm9tIHRoZSBjYW52YXMgZGF0YSwgdGhpcyBpcyBhIGJsb2NraW5nIHByb2Nlc3MsIHdoaWNoIGdldHNcclxuICAgICAqIG1vcmUgZXhwZW5zaXZlIHRoZSBsYXJnZXIgdGhlIGNhbnZhcyBzaXplIGdldHMsIHNvIHBsZWFzZSBiZSBjYXJlZnVsIGhvdyB5b3UgZW1wbG95IHRoaXMgaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlciNzbmFwc2hvdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdDogZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCBlbmNvZGVyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdEFyZWEoMCwgMCwgdGhpcy5nYW1lQ2FudmFzLndpZHRoLCB0aGlzLmdhbWVDYW52YXMuaGVpZ2h0LCBjYWxsYmFjaywgdHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjaGVkdWxlcyBhIHNuYXBzaG90IG9mIHRoZSBnaXZlbiBhcmVhIG9mIHRoZSBnYW1lIHZpZXdwb3J0IHRvIGJlIHRha2VuIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lIGlzIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBjYXB0dXJlIHRoZSB3aG9sZSBnYW1lIHZpZXdwb3J0IHNlZSB0aGUgYHNuYXBzaG90YCBtZXRob2QuIFRvIGNhcHR1cmUgYSBzcGVjaWZpYyBwaXhlbCwgc2VlIGBzbmFwc2hvdFBpeGVsYC5cclxuICAgICAqIFxyXG4gICAgICogT25seSBvbmUgc25hcHNob3QgY2FuIGJlIGFjdGl2ZSBfcGVyIGZyYW1lXy4gSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxsZWQgYHNuYXBzaG90UGl4ZWxgLCBmb3IgZXhhbXBsZSwgdGhlblxyXG4gICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBTbmFwc2hvdHMgd29yayBieSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSB0aGUgY2FudmFzIGRhdGEsIHRoaXMgaXMgYSBibG9ja2luZyBwcm9jZXNzLCB3aGljaCBnZXRzXHJcbiAgICAgKiBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjc25hcHNob3RBcmVhXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGdyYWIgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEgdG8gZ3JhYi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBncmFiLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdEFyZWE6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaywgdHlwZSwgZW5jb2Rlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zbmFwc2hvdFN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHN0YXRlLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHN0YXRlLmVuY29kZXIgPSBlbmNvZGVyT3B0aW9ucztcclxuICAgICAgICBzdGF0ZS5nZXRQaXhlbCA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXRlLnggPSB4O1xyXG4gICAgICAgIHN0YXRlLnkgPSB5O1xyXG4gICAgICAgIHN0YXRlLndpZHRoID0gTWF0aC5taW4od2lkdGgsIHRoaXMuZ2FtZUNhbnZhcy53aWR0aCk7XHJcbiAgICAgICAgc3RhdGUuaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCB0aGlzLmdhbWVDYW52YXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NoZWR1bGVzIGEgc25hcHNob3Qgb2YgdGhlIGdpdmVuIHBpeGVsIGZyb20gdGhlIGdhbWUgdmlld3BvcnQgdG8gYmUgdGFrZW4gYWZ0ZXIgdGhlIGN1cnJlbnQgZnJhbWUgaXMgcmVuZGVyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIGNhcHR1cmUgdGhlIHdob2xlIGdhbWUgdmlld3BvcnQgc2VlIHRoZSBgc25hcHNob3RgIG1ldGhvZC4gVG8gY2FwdHVyZSBhIHNwZWNpZmljIGFyZWEsIHNlZSBgc25hcHNob3RBcmVhYC5cclxuICAgICAqIFxyXG4gICAgICogT25seSBvbmUgc25hcHNob3QgY2FuIGJlIGFjdGl2ZSBfcGVyIGZyYW1lXy4gSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxsZWQgYHNuYXBzaG90QXJlYWAsIGZvciBleGFtcGxlLCB0aGVuXHJcbiAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgb3ZlcnJpZGUgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIFVubGlrZSB0aGUgb3RoZXIgdHdvIHNuYXBzaG90IG1ldGhvZHMsIHRoaXMgb25lIHdpbGwgcmV0dXJuIGEgYENvbG9yYCBvYmplY3QgY29udGFpbmluZyB0aGUgY29sb3IgZGF0YSBmb3JcclxuICAgICAqIHRoZSByZXF1ZXN0ZWQgcGl4ZWwuIEl0IGRvZXNuJ3QgbmVlZCB0byBjcmVhdGUgYW4gaW50ZXJuYWwgQ2FudmFzIG9yIEltYWdlIG9iamVjdCwgc28gaXMgYSBsb3QgZmFzdGVyIHRvIGV4ZWN1dGUsXHJcbiAgICAgKiB1c2luZyBsZXNzIG1lbW9yeS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjc25hcHNob3RQaXhlbFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgcGl4ZWwgZGF0YSBpcyBleHRyYWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlci5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RQaXhlbDogZnVuY3Rpb24gKHgsIHksIGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc25hcHNob3RBcmVhKHgsIHksIDEsIDEsIGNhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdFN0YXRlLmdldFBpeGVsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBTcHJpdGUgR2FtZSBPYmplY3QsIG9yIGFueSBvYmplY3QgdGhhdCBleHRlbmRzIGl0LCBhbmQgZHJhd3MgaXQgdG8gdGhlIGN1cnJlbnQgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjYmF0Y2hTcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBzcHJpdGUgLSBUaGUgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IGZyYW1lIC0gVGhlIGZyYW1lIHRvIGRyYXcsIGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGF0IG93bmVkIGJ5IHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gdXNlIGZvciB0aGUgcmVuZGVyaW5nIHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBbcGFyZW50VHJhbnNmb3JtTWF0cml4XSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4IG9mIHRoZSBwYXJlbnQgY29udGFpbmVyLCBpZiBzZXQuXHJcbiAgICAgKi9cclxuICAgIGJhdGNoU3ByaXRlOiBmdW5jdGlvbiAoc3ByaXRlLCBmcmFtZSwgY2FtZXJhLCBwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3ByaXRlLmFscGhhO1xyXG5cclxuICAgICAgICBpZiAoYWxwaGEgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTm90aGluZyB0byBzZWUsIHNvIGFib3J0IGVhcmx5XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICAgICAgdmFyIGNhbU1hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgxO1xyXG4gICAgICAgIHZhciBzcHJpdGVNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MjtcclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgICAgICB2YXIgY2QgPSBmcmFtZS5jYW52YXNEYXRhO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVYID0gY2QueDtcclxuICAgICAgICB2YXIgZnJhbWVZID0gY2QueTtcclxuICAgICAgICB2YXIgZnJhbWVXaWR0aCA9IGZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgIHZhciBmcmFtZUhlaWdodCA9IGZyYW1lLmN1dEhlaWdodDtcclxuICAgICAgICB2YXIgY3VzdG9tUGl2b3QgPSBmcmFtZS5jdXN0b21QaXZvdDtcclxuXHJcbiAgICAgICAgdmFyIHJlcyA9IGZyYW1lLnNvdXJjZS5yZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheU9yaWdpblggPSBzcHJpdGUuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgdmFyIGRpc3BsYXlPcmlnaW5ZID0gc3ByaXRlLmRpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgeCA9IC1kaXNwbGF5T3JpZ2luWCArIGZyYW1lLng7XHJcbiAgICAgICAgdmFyIHkgPSAtZGlzcGxheU9yaWdpblkgKyBmcmFtZS55O1xyXG5cclxuICAgICAgICBpZiAoc3ByaXRlLmlzQ3JvcHBlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjcm9wID0gc3ByaXRlLl9jcm9wO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNyb3AuZmxpcFggIT09IHNwcml0ZS5mbGlwWCB8fCBjcm9wLmZsaXBZICE9PSBzcHJpdGUuZmxpcFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyYW1lLnVwZGF0ZUNyb3BVVnMoY3JvcCwgc3ByaXRlLmZsaXBYLCBzcHJpdGUuZmxpcFkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmcmFtZVdpZHRoID0gY3JvcC5jdztcclxuICAgICAgICAgICAgZnJhbWVIZWlnaHQgPSBjcm9wLmNoO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGZyYW1lWCA9IGNyb3AuY3g7XHJcbiAgICAgICAgICAgIGZyYW1lWSA9IGNyb3AuY3k7XHJcblxyXG4gICAgICAgICAgICB4ID0gLWRpc3BsYXlPcmlnaW5YICsgY3JvcC54O1xyXG4gICAgICAgICAgICB5ID0gLWRpc3BsYXlPcmlnaW5ZICsgY3JvcC55O1xyXG5cclxuICAgICAgICAgICAgaWYgKHNwcml0ZS5mbGlwWClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHggPj0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gLSh4ICsgZnJhbWVXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4IDwgMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gKE1hdGguYWJzKHgpIC0gZnJhbWVXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHNwcml0ZS5mbGlwWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPj0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gLSh5ICsgZnJhbWVIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA8IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IChNYXRoLmFicyh5KSAtIGZyYW1lSGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZsaXBYID0gMTtcclxuICAgICAgICB2YXIgZmxpcFkgPSAxO1xyXG5cclxuICAgICAgICBpZiAoc3ByaXRlLmZsaXBYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFjdXN0b21QaXZvdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgeCArPSAoLWZyYW1lLnJlYWxXaWR0aCArIChkaXNwbGF5T3JpZ2luWCAqIDIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZmxpcFggPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBBdXRvLWludmVydCB0aGUgZmxpcFkgaWYgdGhpcyBpcyBjb21pbmcgZnJvbSBhIEdMVGV4dHVyZVxyXG4gICAgICAgIGlmIChzcHJpdGUuZmxpcFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVBpdm90KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB5ICs9ICgtZnJhbWUucmVhbEhlaWdodCArIChkaXNwbGF5T3JpZ2luWSAqIDIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZmxpcFkgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5hcHBseUlUUlMoc3ByaXRlLngsIHNwcml0ZS55LCBzcHJpdGUucm90YXRpb24sIHNwcml0ZS5zY2FsZVggKiBmbGlwWCwgc3ByaXRlLnNjYWxlWSAqIGZsaXBZKTtcclxuXHJcbiAgICAgICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50VHJhbnNmb3JtTWF0cml4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRUcmFuc2Zvcm1NYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNwcml0ZS5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcHJpdGUuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZSA9IHNwcml0ZS54O1xyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZiA9IHNwcml0ZS55O1xyXG5cclxuICAgICAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcHJpdGUuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcHJpdGUuc2Nyb2xsRmFjdG9yWTtcclxuICAgIFxyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgIFxyXG4gICAgICAgIGNhbGNNYXRyaXguc2V0VG9Db250ZXh0KGN0eCk7XHJcblxyXG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB0aGlzLmJsZW5kTW9kZXNbc3ByaXRlLmJsZW5kTW9kZV07XHJcblxyXG4gICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gISghdGhpcy5hbnRpYWxpYXMgfHwgZnJhbWUuc291cmNlLnNjYWxlTW9kZSk7XHJcblxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoZnJhbWUuc291cmNlLmltYWdlLCBmcmFtZVgsIGZyYW1lWSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHgsIHksIGZyYW1lV2lkdGggLyByZXMsIGZyYW1lSGVpZ2h0IC8gcmVzKTtcclxuXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyBhbGwgb2JqZWN0IHJlZmVyZW5jZXMgaW4gdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nYW1lQ2FudmFzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWVDb250ZXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/canvas/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/renderer/canvas/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer.Canvas\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CanvasRenderer: __webpack_require__(/*! ./CanvasRenderer */ \"./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js\"),\r\n    GetBlendModes: __webpack_require__(/*! ./utils/GetBlendModes */ \"./node_modules/phaser/src/renderer/canvas/utils/GetBlendModes.js\"),\r\n    SetTransform: __webpack_require__(/*! ./utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9jYW52YXMvaW5kZXguanM/MzZmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHFGQUFrQjtBQUM5QyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBdUI7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsNkZBQXNCOztBQUVoRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL2NhbnZhcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlJlbmRlcmVyLkNhbnZhc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbnZhc1JlbmRlcmVyOiByZXF1aXJlKCcuL0NhbnZhc1JlbmRlcmVyJyksXHJcbiAgICBHZXRCbGVuZE1vZGVzOiByZXF1aXJlKCcuL3V0aWxzL0dldEJsZW5kTW9kZXMnKSxcclxuICAgIFNldFRyYW5zZm9ybTogcmVxdWlyZSgnLi91dGlscy9TZXRUcmFuc2Zvcm0nKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/canvas/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/canvas/utils/GetBlendModes.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/canvas/utils/GetBlendModes.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar modes = __webpack_require__(/*! ../../BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar CanvasFeatures = __webpack_require__(/*! ../../../device/CanvasFeatures */ \"./node_modules/phaser/src/device/CanvasFeatures.js\");\r\n\r\n/**\r\n * Returns an array which maps the default blend modes to supported Canvas blend modes.\r\n *\r\n * If the browser doesn't support a blend mode, it will default to the normal `source-over` blend mode.\r\n *\r\n * @function Phaser.Renderer.Canvas.GetBlendModes\r\n * @since 3.0.0\r\n *\r\n * @return {array} Which Canvas blend mode corresponds to which default Phaser blend mode.\r\n */\r\nvar GetBlendModes = function ()\r\n{\r\n    var output = [];\r\n    var useNew = CanvasFeatures.supportNewBlendModes;\r\n    var so = 'source-over';\r\n\r\n    output[modes.NORMAL] = so;\r\n    output[modes.ADD] = 'lighter';\r\n    output[modes.MULTIPLY] = (useNew) ? 'multiply' : so;\r\n    output[modes.SCREEN] = (useNew) ? 'screen' : so;\r\n    output[modes.OVERLAY] = (useNew) ? 'overlay' : so;\r\n    output[modes.DARKEN] = (useNew) ? 'darken' : so;\r\n    output[modes.LIGHTEN] = (useNew) ? 'lighten' : so;\r\n    output[modes.COLOR_DODGE] = (useNew) ? 'color-dodge' : so;\r\n    output[modes.COLOR_BURN] = (useNew) ? 'color-burn' : so;\r\n    output[modes.HARD_LIGHT] = (useNew) ? 'hard-light' : so;\r\n    output[modes.SOFT_LIGHT] = (useNew) ? 'soft-light' : so;\r\n    output[modes.DIFFERENCE] = (useNew) ? 'difference' : so;\r\n    output[modes.EXCLUSION] = (useNew) ? 'exclusion' : so;\r\n    output[modes.HUE] = (useNew) ? 'hue' : so;\r\n    output[modes.SATURATION] = (useNew) ? 'saturation' : so;\r\n    output[modes.COLOR] = (useNew) ? 'color' : so;\r\n    output[modes.LUMINOSITY] = (useNew) ? 'luminosity' : so;\r\n    output[modes.ERASE] = 'destination-out';\r\n    output[modes.SOURCE_IN] = 'source-in';\r\n    output[modes.SOURCE_OUT] = 'source-out';\r\n    output[modes.SOURCE_ATOP] = 'source-atop';\r\n    output[modes.DESTINATION_OVER] = 'destination-over';\r\n    output[modes.DESTINATION_IN] = 'destination-in';\r\n    output[modes.DESTINATION_OUT] = 'destination-out';\r\n    output[modes.DESTINATION_ATOP] = 'destination-atop';\r\n    output[modes.LIGHTER] = 'lighter';\r\n    output[modes.COPY] = 'copy';\r\n    output[modes.XOR] = 'xor';\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = GetBlendModes;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9jYW52YXMvdXRpbHMvR2V0QmxlbmRNb2Rlcy5qcz9iNTg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMEVBQWtCO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLDBGQUFnQzs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL2NhbnZhcy91dGlscy9HZXRCbGVuZE1vZGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuLi8uLi9CbGVuZE1vZGVzJyk7XHJcbnZhciBDYW52YXNGZWF0dXJlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2RldmljZS9DYW52YXNGZWF0dXJlcycpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggbWFwcyB0aGUgZGVmYXVsdCBibGVuZCBtb2RlcyB0byBzdXBwb3J0ZWQgQ2FudmFzIGJsZW5kIG1vZGVzLlxyXG4gKlxyXG4gKiBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgYSBibGVuZCBtb2RlLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIG5vcm1hbCBgc291cmNlLW92ZXJgIGJsZW5kIG1vZGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkdldEJsZW5kTW9kZXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBXaGljaCBDYW52YXMgYmxlbmQgbW9kZSBjb3JyZXNwb25kcyB0byB3aGljaCBkZWZhdWx0IFBoYXNlciBibGVuZCBtb2RlLlxyXG4gKi9cclxudmFyIEdldEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxyXG57XHJcbiAgICB2YXIgb3V0cHV0ID0gW107XHJcbiAgICB2YXIgdXNlTmV3ID0gQ2FudmFzRmVhdHVyZXMuc3VwcG9ydE5ld0JsZW5kTW9kZXM7XHJcbiAgICB2YXIgc28gPSAnc291cmNlLW92ZXInO1xyXG5cclxuICAgIG91dHB1dFttb2Rlcy5OT1JNQUxdID0gc287XHJcbiAgICBvdXRwdXRbbW9kZXMuQUREXSA9ICdsaWdodGVyJztcclxuICAgIG91dHB1dFttb2Rlcy5NVUxUSVBMWV0gPSAodXNlTmV3KSA/ICdtdWx0aXBseScgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5TQ1JFRU5dID0gKHVzZU5ldykgPyAnc2NyZWVuJyA6IHNvO1xyXG4gICAgb3V0cHV0W21vZGVzLk9WRVJMQVldID0gKHVzZU5ldykgPyAnb3ZlcmxheScgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5EQVJLRU5dID0gKHVzZU5ldykgPyAnZGFya2VuJyA6IHNvO1xyXG4gICAgb3V0cHV0W21vZGVzLkxJR0hURU5dID0gKHVzZU5ldykgPyAnbGlnaHRlbicgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5DT0xPUl9ET0RHRV0gPSAodXNlTmV3KSA/ICdjb2xvci1kb2RnZScgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5DT0xPUl9CVVJOXSA9ICh1c2VOZXcpID8gJ2NvbG9yLWJ1cm4nIDogc287XHJcbiAgICBvdXRwdXRbbW9kZXMuSEFSRF9MSUdIVF0gPSAodXNlTmV3KSA/ICdoYXJkLWxpZ2h0JyA6IHNvO1xyXG4gICAgb3V0cHV0W21vZGVzLlNPRlRfTElHSFRdID0gKHVzZU5ldykgPyAnc29mdC1saWdodCcgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5ESUZGRVJFTkNFXSA9ICh1c2VOZXcpID8gJ2RpZmZlcmVuY2UnIDogc287XHJcbiAgICBvdXRwdXRbbW9kZXMuRVhDTFVTSU9OXSA9ICh1c2VOZXcpID8gJ2V4Y2x1c2lvbicgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5IVUVdID0gKHVzZU5ldykgPyAnaHVlJyA6IHNvO1xyXG4gICAgb3V0cHV0W21vZGVzLlNBVFVSQVRJT05dID0gKHVzZU5ldykgPyAnc2F0dXJhdGlvbicgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5DT0xPUl0gPSAodXNlTmV3KSA/ICdjb2xvcicgOiBzbztcclxuICAgIG91dHB1dFttb2Rlcy5MVU1JTk9TSVRZXSA9ICh1c2VOZXcpID8gJ2x1bWlub3NpdHknIDogc287XHJcbiAgICBvdXRwdXRbbW9kZXMuRVJBU0VdID0gJ2Rlc3RpbmF0aW9uLW91dCc7XHJcbiAgICBvdXRwdXRbbW9kZXMuU09VUkNFX0lOXSA9ICdzb3VyY2UtaW4nO1xyXG4gICAgb3V0cHV0W21vZGVzLlNPVVJDRV9PVVRdID0gJ3NvdXJjZS1vdXQnO1xyXG4gICAgb3V0cHV0W21vZGVzLlNPVVJDRV9BVE9QXSA9ICdzb3VyY2UtYXRvcCc7XHJcbiAgICBvdXRwdXRbbW9kZXMuREVTVElOQVRJT05fT1ZFUl0gPSAnZGVzdGluYXRpb24tb3Zlcic7XHJcbiAgICBvdXRwdXRbbW9kZXMuREVTVElOQVRJT05fSU5dID0gJ2Rlc3RpbmF0aW9uLWluJztcclxuICAgIG91dHB1dFttb2Rlcy5ERVNUSU5BVElPTl9PVVRdID0gJ2Rlc3RpbmF0aW9uLW91dCc7XHJcbiAgICBvdXRwdXRbbW9kZXMuREVTVElOQVRJT05fQVRPUF0gPSAnZGVzdGluYXRpb24tYXRvcCc7XHJcbiAgICBvdXRwdXRbbW9kZXMuTElHSFRFUl0gPSAnbGlnaHRlcic7XHJcbiAgICBvdXRwdXRbbW9kZXMuQ09QWV0gPSAnY29weSc7XHJcbiAgICBvdXRwdXRbbW9kZXMuWE9SXSA9ICd4b3InO1xyXG5cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEJsZW5kTW9kZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/canvas/utils/GetBlendModes.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes a reference to the Canvas Renderer, a Canvas Rendering Context, a Game Object, a Camera and a parent matrix\r\n * and then performs the following steps:\r\n * \r\n * 1. Checks the alpha of the source combined with the Camera alpha. If 0 or less it aborts.\r\n * 2. Takes the Camera and Game Object matrix and multiplies them, combined with the parent matrix if given.\r\n * 3. Sets the blend mode of the context to be that used by the Game Object.\r\n * 4. Sets the alpha value of the context to be that used by the Game Object combined with the Camera.\r\n * 5. Saves the context state.\r\n * 6. Sets the final matrix values into the context via setTransform.\r\n * 7. If Renderer.antialias, or the frame.source.scaleMode is set, then imageSmoothingEnabled is set.\r\n * \r\n * This function is only meant to be used internally. Most of the Canvas Renderer classes use it.\r\n *\r\n * @function Phaser.Renderer.Canvas.SetTransform\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {CanvasRenderingContext2D} ctx - The canvas context to set the transform on.\r\n * @param {Phaser.GameObjects.GameObject} src - The Game Object being rendered. Can be any type that extends the base class.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [parentMatrix] - A parent transform matrix to apply to the Game Object before rendering.\r\n * \r\n * @return {boolean} `true` if the Game Object context was set, otherwise `false`.\r\n */\r\nvar SetTransform = function (renderer, ctx, src, camera, parentMatrix)\r\n{\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (alpha <= 0)\r\n    {\r\n        //  Nothing to see, so don't waste time calculating stuff\r\n        return false;\r\n    }\r\n\r\n    var camMatrix = renderer._tempMatrix1.copyFromArray(camera.matrix.matrix);\r\n    var gameObjectMatrix = renderer._tempMatrix2.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n    var calcMatrix = renderer._tempMatrix3;\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        gameObjectMatrix.e = src.x;\r\n        gameObjectMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(gameObjectMatrix, calcMatrix);\r\n    }\r\n    else\r\n    {\r\n        gameObjectMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        gameObjectMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(gameObjectMatrix, calcMatrix);\r\n    }\r\n\r\n    //  Blend Mode\r\n    ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];\r\n\r\n    //  Alpha\r\n    ctx.globalAlpha = alpha;\r\n\r\n    ctx.save();\r\n\r\n    calcMatrix.setToContext(ctx);\r\n\r\n    ctx.imageSmoothingEnabled = !(!renderer.antialias || (src.frame && src.frame.source.scaleMode));\r\n\r\n    return true;\r\n};\r\n\r\nmodule.exports = SetTransform;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtLmpzPzFlMjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBDYW52YXMgUmVuZGVyZXIsIGEgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LCBhIEdhbWUgT2JqZWN0LCBhIENhbWVyYSBhbmQgYSBwYXJlbnQgbWF0cml4XHJcbiAqIGFuZCB0aGVuIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6XHJcbiAqIFxyXG4gKiAxLiBDaGVja3MgdGhlIGFscGhhIG9mIHRoZSBzb3VyY2UgY29tYmluZWQgd2l0aCB0aGUgQ2FtZXJhIGFscGhhLiBJZiAwIG9yIGxlc3MgaXQgYWJvcnRzLlxyXG4gKiAyLiBUYWtlcyB0aGUgQ2FtZXJhIGFuZCBHYW1lIE9iamVjdCBtYXRyaXggYW5kIG11bHRpcGxpZXMgdGhlbSwgY29tYmluZWQgd2l0aCB0aGUgcGFyZW50IG1hdHJpeCBpZiBnaXZlbi5cclxuICogMy4gU2V0cyB0aGUgYmxlbmQgbW9kZSBvZiB0aGUgY29udGV4dCB0byBiZSB0aGF0IHVzZWQgYnkgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiA0LiBTZXRzIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgY29udGV4dCB0byBiZSB0aGF0IHVzZWQgYnkgdGhlIEdhbWUgT2JqZWN0IGNvbWJpbmVkIHdpdGggdGhlIENhbWVyYS5cclxuICogNS4gU2F2ZXMgdGhlIGNvbnRleHQgc3RhdGUuXHJcbiAqIDYuIFNldHMgdGhlIGZpbmFsIG1hdHJpeCB2YWx1ZXMgaW50byB0aGUgY29udGV4dCB2aWEgc2V0VHJhbnNmb3JtLlxyXG4gKiA3LiBJZiBSZW5kZXJlci5hbnRpYWxpYXMsIG9yIHRoZSBmcmFtZS5zb3VyY2Uuc2NhbGVNb2RlIGlzIHNldCwgdGhlbiBpbWFnZVNtb290aGluZ0VuYWJsZWQgaXMgc2V0LlxyXG4gKiBcclxuICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW50IHRvIGJlIHVzZWQgaW50ZXJuYWxseS4gTW9zdCBvZiB0aGUgQ2FudmFzIFJlbmRlcmVyIGNsYXNzZXMgdXNlIGl0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5TZXRUcmFuc2Zvcm1cclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBjYW52YXMgY29udGV4dCB0byBzZXQgdGhlIHRyYW5zZm9ybSBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkLiBDYW4gYmUgYW55IHR5cGUgdGhhdCBleHRlbmRzIHRoZSBiYXNlIGNsYXNzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFtwYXJlbnRNYXRyaXhdIC0gQSBwYXJlbnQgdHJhbnNmb3JtIG1hdHJpeCB0byBhcHBseSB0byB0aGUgR2FtZSBPYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cclxuICogXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3QgY29udGV4dCB3YXMgc2V0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBTZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChhbHBoYSA8PSAwKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBOb3RoaW5nIHRvIHNlZSwgc28gZG9uJ3Qgd2FzdGUgdGltZSBjYWxjdWxhdGluZyBzdHVmZlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgxLmNvcHlGcm9tQXJyYXkoY2FtZXJhLm1hdHJpeC5tYXRyaXgpO1xyXG4gICAgdmFyIGdhbWVPYmplY3RNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDIuYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBnYW1lT2JqZWN0TWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBnYW1lT2JqZWN0TWF0cml4LmYgPSBzcmMueTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShnYW1lT2JqZWN0TWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBnYW1lT2JqZWN0TWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBnYW1lT2JqZWN0TWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShnYW1lT2JqZWN0TWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQmxlbmQgTW9kZVxyXG4gICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbc3JjLmJsZW5kTW9kZV07XHJcblxyXG4gICAgLy8gIEFscGhhXHJcbiAgICBjdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcclxuXHJcbiAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgIGNhbGNNYXRyaXguc2V0VG9Db250ZXh0KGN0eCk7XHJcblxyXG4gICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9ICEoIXJlbmRlcmVyLmFudGlhbGlhcyB8fCAoc3JjLmZyYW1lICYmIHNyYy5mcmFtZS5zb3VyY2Uuc2NhbGVNb2RlKSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFRyYW5zZm9ybTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/index.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/renderer/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Types.Renderer\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Canvas: __webpack_require__(/*! ./canvas */ \"./node_modules/phaser/src/renderer/canvas/index.js\"),\r\n    Snapshot: __webpack_require__(/*! ./snapshot */ \"./node_modules/phaser/src/renderer/snapshot/index.js\"),\r\n    WebGL: __webpack_require__(/*! ./webgl */ \"./node_modules/phaser/src/renderer/webgl/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9pbmRleC5qcz9kYTU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvRUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsd0VBQVk7QUFDbEMsV0FBVyxtQkFBTyxDQUFDLGtFQUFTOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUmVuZGVyZXJcclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVHlwZXMuUmVuZGVyZXJcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBDYW52YXM6IHJlcXVpcmUoJy4vY2FudmFzJyksXHJcbiAgICBTbmFwc2hvdDogcmVxdWlyZSgnLi9zbmFwc2hvdCcpLFxyXG4gICAgV2ViR0w6IHJlcXVpcmUoJy4vd2ViZ2wnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/snapshot/CanvasSnapshot.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/snapshot/CanvasSnapshot.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Color = __webpack_require__(/*! ../../display/color/Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Takes a snapshot of an area from the current frame displayed by a canvas.\r\n * \r\n * This is then copied to an Image object. When this loads, the results are sent\r\n * to the callback provided in the Snapshot Configuration object.\r\n *\r\n * @function Phaser.Renderer.Snapshot.Canvas\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} sourceCanvas - The canvas to take a snapshot of.\r\n * @param {Phaser.Types.Renderer.Snapshot.SnapshotState} config - The snapshot configuration object.\r\n */\r\nvar CanvasSnapshot = function (canvas, config)\r\n{\r\n    var callback = GetFastValue(config, 'callback');\r\n    var type = GetFastValue(config, 'type', 'image/png');\r\n    var encoderOptions = GetFastValue(config, 'encoder', 0.92);\r\n    var x = Math.abs(Math.round(GetFastValue(config, 'x', 0)));\r\n    var y = Math.abs(Math.round(GetFastValue(config, 'y', 0)));\r\n    var width = GetFastValue(config, 'width', canvas.width);\r\n    var height = GetFastValue(config, 'height', canvas.height);\r\n    var getPixel = GetFastValue(config, 'getPixel', false);\r\n\r\n    if (getPixel)\r\n    {\r\n        var context = canvas.getContext('2d');\r\n        var imageData = context.getImageData(x, y, 1, 1);\r\n        var data = imageData.data;\r\n\r\n        callback.call(null, new Color(data[0], data[1], data[2], data[3] / 255));\r\n    }\r\n    else if (x !== 0 || y !== 0 || width !== canvas.width || height !== canvas.height)\r\n    {\r\n        //  Area Grab\r\n        var copyCanvas = CanvasPool.createWebGL(this, width, height);\r\n        var ctx = copyCanvas.getContext('2d');\r\n\r\n        ctx.drawImage(canvas, x, y, width, height, 0, 0, width, height);\r\n\r\n        var image1 = new Image();\r\n    \r\n        image1.onerror = function ()\r\n        {\r\n            callback.call(null);\r\n\r\n            CanvasPool.remove(copyCanvas);\r\n        };\r\n\r\n        image1.onload = function ()\r\n        {\r\n            callback.call(null, image1);\r\n\r\n            CanvasPool.remove(copyCanvas);\r\n        };\r\n\r\n        image1.src = copyCanvas.toDataURL(type, encoderOptions);\r\n    }\r\n    else\r\n    {\r\n        //  Full Grab\r\n        var image2 = new Image();\r\n    \r\n        image2.onerror = function ()\r\n        {\r\n            callback.call(null);\r\n        };\r\n\r\n        image2.onload = function ()\r\n        {\r\n            callback.call(null, image2);\r\n        };\r\n\r\n        image2.src = canvas.toDataURL(type, encoderOptions);\r\n    }\r\n};\r\n\r\nmodule.exports = CanvasSnapshot;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9zbmFwc2hvdC9DYW52YXNTbmFwc2hvdC5qcz9mYjQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDMUQsWUFBWSxtQkFBTyxDQUFDLG1GQUEyQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsNkNBQTZDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvc25hcHNob3QvQ2FudmFzU25hcHNob3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuLi8uLi9kaXNwbGF5L2NvbG9yL0NvbG9yJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYSBzbmFwc2hvdCBvZiBhbiBhcmVhIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgZGlzcGxheWVkIGJ5IGEgY2FudmFzLlxyXG4gKiBcclxuICogVGhpcyBpcyB0aGVuIGNvcGllZCB0byBhbiBJbWFnZSBvYmplY3QuIFdoZW4gdGhpcyBsb2FkcywgdGhlIHJlc3VsdHMgYXJlIHNlbnRcclxuICogdG8gdGhlIGNhbGxiYWNrIHByb3ZpZGVkIGluIHRoZSBTbmFwc2hvdCBDb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5SZW5kZXJlci5TbmFwc2hvdC5DYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IHNvdXJjZUNhbnZhcyAtIFRoZSBjYW52YXMgdG8gdGFrZSBhIHNuYXBzaG90IG9mLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5SZW5kZXJlci5TbmFwc2hvdC5TbmFwc2hvdFN0YXRlfSBjb25maWcgLSBUaGUgc25hcHNob3QgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgQ2FudmFzU25hcHNob3QgPSBmdW5jdGlvbiAoY2FudmFzLCBjb25maWcpXHJcbntcclxuICAgIHZhciBjYWxsYmFjayA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjYWxsYmFjaycpO1xyXG4gICAgdmFyIHR5cGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAndHlwZScsICdpbWFnZS9wbmcnKTtcclxuICAgIHZhciBlbmNvZGVyT3B0aW9ucyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdlbmNvZGVyJywgMC45Mik7XHJcbiAgICB2YXIgeCA9IE1hdGguYWJzKE1hdGgucm91bmQoR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3gnLCAwKSkpO1xyXG4gICAgdmFyIHkgPSBNYXRoLmFicyhNYXRoLnJvdW5kKEdldEZhc3RWYWx1ZShjb25maWcsICd5JywgMCkpKTtcclxuICAgIHZhciB3aWR0aCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd3aWR0aCcsIGNhbnZhcy53aWR0aCk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgdmFyIGdldFBpeGVsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2dldFBpeGVsJywgZmFsc2UpO1xyXG5cclxuICAgIGlmIChnZXRQaXhlbClcclxuICAgIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciBpbWFnZURhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKTtcclxuICAgICAgICB2YXIgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICBjYWxsYmFjay5jYWxsKG51bGwsIG5ldyBDb2xvcihkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdIC8gMjU1KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh4ICE9PSAwIHx8IHkgIT09IDAgfHwgd2lkdGggIT09IGNhbnZhcy53aWR0aCB8fCBoZWlnaHQgIT09IGNhbnZhcy5oZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEFyZWEgR3JhYlxyXG4gICAgICAgIHZhciBjb3B5Q2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGVXZWJHTCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB2YXIgY3R4ID0gY29weUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKGNhbnZhcywgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBpbWFnZTEgPSBuZXcgSW1hZ2UoKTtcclxuICAgIFxyXG4gICAgICAgIGltYWdlMS5vbmVycm9yID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XHJcblxyXG4gICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZShjb3B5Q2FudmFzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZTEub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgaW1hZ2UxKTtcclxuXHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNvcHlDYW52YXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGltYWdlMS5zcmMgPSBjb3B5Q2FudmFzLnRvRGF0YVVSTCh0eXBlLCBlbmNvZGVyT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEZ1bGwgR3JhYlxyXG4gICAgICAgIHZhciBpbWFnZTIgPSBuZXcgSW1hZ2UoKTtcclxuICAgIFxyXG4gICAgICAgIGltYWdlMi5vbmVycm9yID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1hZ2UyLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKG51bGwsIGltYWdlMik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1hZ2UyLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwodHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNTbmFwc2hvdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/snapshot/CanvasSnapshot.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/snapshot/WebGLSnapshot.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/snapshot/WebGLSnapshot.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Color = __webpack_require__(/*! ../../display/color/Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Takes a snapshot of an area from the current frame displayed by a WebGL canvas.\r\n * \r\n * This is then copied to an Image object. When this loads, the results are sent\r\n * to the callback provided in the Snapshot Configuration object.\r\n *\r\n * @function Phaser.Renderer.Snapshot.WebGL\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} sourceCanvas - The canvas to take a snapshot of.\r\n * @param {Phaser.Types.Renderer.Snapshot.SnapshotState} config - The snapshot configuration object.\r\n */\r\nvar WebGLSnapshot = function (sourceCanvas, config)\r\n{\r\n    var gl = sourceCanvas.getContext('experimental-webgl');\r\n\r\n    var callback = GetFastValue(config, 'callback');\r\n    var type = GetFastValue(config, 'type', 'image/png');\r\n    var encoderOptions = GetFastValue(config, 'encoder', 0.92);\r\n    var x = GetFastValue(config, 'x', 0);\r\n    var y = GetFastValue(config, 'y', 0);\r\n\r\n    var getPixel = GetFastValue(config, 'getPixel', false);\r\n\r\n    var isFramebuffer = GetFastValue(config, 'isFramebuffer', false);\r\n\r\n    var bufferWidth = (isFramebuffer) ? GetFastValue(config, 'bufferWidth', 1) : gl.drawingBufferWidth;\r\n    var bufferHeight = (isFramebuffer) ? GetFastValue(config, 'bufferHeight', 1) : gl.drawingBufferHeight;\r\n\r\n    if (getPixel)\r\n    {\r\n        var pixel = new Uint8Array(4);\r\n\r\n        var destY = (isFramebuffer) ? y : bufferHeight - y;\r\n\r\n        gl.readPixels(x, destY, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);\r\n\r\n        callback.call(null, new Color(pixel[0], pixel[1], pixel[2], pixel[3] / 255));\r\n    }\r\n    else\r\n    {\r\n        var width = GetFastValue(config, 'width', bufferWidth);\r\n        var height = GetFastValue(config, 'height', bufferHeight);\r\n\r\n        var total = width * height * 4;\r\n\r\n        var pixels = new Uint8Array(total);\r\n\r\n        gl.readPixels(x, bufferHeight - y - height, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n    \r\n        var canvas = CanvasPool.createWebGL(this, width, height);\r\n        var ctx = canvas.getContext('2d');\r\n\r\n        var imageData = ctx.getImageData(0, 0, width, height);\r\n    \r\n        var data = imageData.data;\r\n\r\n        for (var py = 0; py < height; py++)\r\n        {\r\n            for (var px = 0; px < width; px++)\r\n            {\r\n                var sourceIndex = ((height - py) * width + px) * 4;\r\n                var destIndex = (isFramebuffer) ? total - ((py * width + (width - px)) * 4) : (py * width + px) * 4;\r\n\r\n                data[destIndex + 0] = pixels[sourceIndex + 0];\r\n                data[destIndex + 1] = pixels[sourceIndex + 1];\r\n                data[destIndex + 2] = pixels[sourceIndex + 2];\r\n                data[destIndex + 3] = pixels[sourceIndex + 3];\r\n            }\r\n        }\r\n\r\n        ctx.putImageData(imageData, 0, 0);\r\n    \r\n        var image = new Image();\r\n\r\n        image.onerror = function ()\r\n        {\r\n            callback.call(null);\r\n\r\n            CanvasPool.remove(canvas);\r\n        };\r\n\r\n        image.onload = function ()\r\n        {\r\n            callback.call(null, image);\r\n\r\n            CanvasPool.remove(canvas);\r\n        };\r\n\r\n        image.src = canvas.toDataURL(type, encoderOptions);\r\n    }\r\n};\r\n\r\nmodule.exports = WebGLSnapshot;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9zbmFwc2hvdC9XZWJHTFNuYXBzaG90LmpzPzEzNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLCtGQUFpQztBQUMxRCxZQUFZLG1CQUFPLENBQUMsbUZBQTJCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyw2Q0FBNkM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx3QkFBd0IsYUFBYTtBQUNyQztBQUNBLDRCQUE0QixZQUFZO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvc25hcHNob3QvV2ViR0xTbmFwc2hvdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi8uLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDb2xvciA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BsYXkvY29sb3IvQ29sb3InKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhIHNuYXBzaG90IG9mIGFuIGFyZWEgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBkaXNwbGF5ZWQgYnkgYSBXZWJHTCBjYW52YXMuXHJcbiAqIFxyXG4gKiBUaGlzIGlzIHRoZW4gY29waWVkIHRvIGFuIEltYWdlIG9iamVjdC4gV2hlbiB0aGlzIGxvYWRzLCB0aGUgcmVzdWx0cyBhcmUgc2VudFxyXG4gKiB0byB0aGUgY2FsbGJhY2sgcHJvdmlkZWQgaW4gdGhlIFNuYXBzaG90IENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlJlbmRlcmVyLlNuYXBzaG90LldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxDYW52YXNFbGVtZW50fSBzb3VyY2VDYW52YXMgLSBUaGUgY2FudmFzIHRvIHRha2UgYSBzbmFwc2hvdCBvZi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RTdGF0ZX0gY29uZmlnIC0gVGhlIHNuYXBzaG90IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIFdlYkdMU25hcHNob3QgPSBmdW5jdGlvbiAoc291cmNlQ2FudmFzLCBjb25maWcpXHJcbntcclxuICAgIHZhciBnbCA9IHNvdXJjZUNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuXHJcbiAgICB2YXIgY2FsbGJhY2sgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY2FsbGJhY2snKTtcclxuICAgIHZhciB0eXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3R5cGUnLCAnaW1hZ2UvcG5nJyk7XHJcbiAgICB2YXIgZW5jb2Rlck9wdGlvbnMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZW5jb2RlcicsIDAuOTIpO1xyXG4gICAgdmFyIHggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneCcsIDApO1xyXG4gICAgdmFyIHkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG5cclxuICAgIHZhciBnZXRQaXhlbCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdnZXRQaXhlbCcsIGZhbHNlKTtcclxuXHJcbiAgICB2YXIgaXNGcmFtZWJ1ZmZlciA9IEdldEZhc3RWYWx1ZShjb25maWcsICdpc0ZyYW1lYnVmZmVyJywgZmFsc2UpO1xyXG5cclxuICAgIHZhciBidWZmZXJXaWR0aCA9IChpc0ZyYW1lYnVmZmVyKSA/IEdldEZhc3RWYWx1ZShjb25maWcsICdidWZmZXJXaWR0aCcsIDEpIDogZ2wuZHJhd2luZ0J1ZmZlcldpZHRoO1xyXG4gICAgdmFyIGJ1ZmZlckhlaWdodCA9IChpc0ZyYW1lYnVmZmVyKSA/IEdldEZhc3RWYWx1ZShjb25maWcsICdidWZmZXJIZWlnaHQnLCAxKSA6IGdsLmRyYXdpbmdCdWZmZXJIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGdldFBpeGVsKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwaXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xyXG5cclxuICAgICAgICB2YXIgZGVzdFkgPSAoaXNGcmFtZWJ1ZmZlcikgPyB5IDogYnVmZmVySGVpZ2h0IC0geTtcclxuXHJcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCBkZXN0WSwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgcGl4ZWwpO1xyXG5cclxuICAgICAgICBjYWxsYmFjay5jYWxsKG51bGwsIG5ldyBDb2xvcihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSAvIDI1NSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciB3aWR0aCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd3aWR0aCcsIGJ1ZmZlcldpZHRoKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIGJ1ZmZlckhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IHdpZHRoICogaGVpZ2h0ICogNDtcclxuXHJcbiAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBVaW50OEFycmF5KHRvdGFsKTtcclxuXHJcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCBidWZmZXJIZWlnaHQgLSB5IC0gaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBwaXhlbHMpO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlV2ViR0wodGhpcywgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICB2YXIgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgIHZhciBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHB5ID0gMDsgcHkgPCBoZWlnaHQ7IHB5KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBweCA9IDA7IHB4IDwgd2lkdGg7IHB4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VJbmRleCA9ICgoaGVpZ2h0IC0gcHkpICogd2lkdGggKyBweCkgKiA0O1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlc3RJbmRleCA9IChpc0ZyYW1lYnVmZmVyKSA/IHRvdGFsIC0gKChweSAqIHdpZHRoICsgKHdpZHRoIC0gcHgpKSAqIDQpIDogKHB5ICogd2lkdGggKyBweCkgKiA0O1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFbZGVzdEluZGV4ICsgMF0gPSBwaXhlbHNbc291cmNlSW5kZXggKyAwXTtcclxuICAgICAgICAgICAgICAgIGRhdGFbZGVzdEluZGV4ICsgMV0gPSBwaXhlbHNbc291cmNlSW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgIGRhdGFbZGVzdEluZGV4ICsgMl0gPSBwaXhlbHNbc291cmNlSW5kZXggKyAyXTtcclxuICAgICAgICAgICAgICAgIGRhdGFbZGVzdEluZGV4ICsgM10gPSBwaXhlbHNbc291cmNlSW5kZXggKyAzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcclxuXHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNhbnZhcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgaW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgQ2FudmFzUG9vbC5yZW1vdmUoY2FudmFzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKHR5cGUsIGVuY29kZXJPcHRpb25zKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xTbmFwc2hvdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/snapshot/WebGLSnapshot.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/snapshot/index.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/snapshot/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer.Snapshot\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Canvas: __webpack_require__(/*! ./CanvasSnapshot */ \"./node_modules/phaser/src/renderer/snapshot/CanvasSnapshot.js\"),\r\n    WebGL: __webpack_require__(/*! ./WebGLSnapshot */ \"./node_modules/phaser/src/renderer/snapshot/WebGLSnapshot.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci9zbmFwc2hvdC9pbmRleC5qcz8xNDYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHVGQUFrQjtBQUN0QyxXQUFXLG1CQUFPLENBQUMscUZBQWlCOztBQUVwQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3NuYXBzaG90L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuUmVuZGVyZXIuU25hcHNob3RcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBDYW52YXM6IHJlcXVpcmUoJy4vQ2FudmFzU25hcHNob3QnKSxcclxuICAgIFdlYkdMOiByZXF1aXJlKCcuL1dlYkdMU25hcHNob3QnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/snapshot/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/Utils.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/Utils.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer.WebGL.Utils\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n    /**\r\n     * Packs four floats on a range from 0.0 to 1.0 into a single Uint32\r\n     *\r\n     * @function Phaser.Renderer.WebGL.Utils.getTintFromFloats\r\n     * @since 3.0.0\r\n     * \r\n     * @param {number} r - Red component in a range from 0.0 to 1.0 \r\n     * @param {number} g - Green component in a range from 0.0 to 1.0\r\n     * @param {number} b - Blue component in a range from 0.0 to 1.0\r\n     * @param {number} a - Alpha component in a range from 0.0 to 1.0\r\n     * \r\n     * @return {number} [description]\r\n     */\r\n    getTintFromFloats: function (r, g, b, a)\r\n    {\r\n        var ur = ((r * 255.0)|0) & 0xFF;\r\n        var ug = ((g * 255.0)|0) & 0xFF;\r\n        var ub = ((b * 255.0)|0) & 0xFF;\r\n        var ua = ((a * 255.0)|0) & 0xFF;\r\n\r\n        return ((ua << 24) | (ur << 16) | (ug << 8) | ub) >>> 0;\r\n    },\r\n\r\n    /**\r\n     * Packs a Uint24, representing RGB components, with a Float32, representing\r\n     * the alpha component, with a range between 0.0 and 1.0 and return a Uint32\r\n     *\r\n     * @function Phaser.Renderer.WebGL.Utils.getTintAppendFloatAlpha\r\n     * @since 3.0.0\r\n     * \r\n     * @param {number} rgb - Uint24 representing RGB components\r\n     * @param {number} a - Float32 representing Alpha component\r\n     * \r\n     * @return {number} Packed RGBA as Uint32\r\n     */\r\n    getTintAppendFloatAlpha: function (rgb, a)\r\n    {\r\n        var ua = ((a * 255.0)|0) & 0xFF;\r\n        return ((ua << 24) | rgb) >>> 0;\r\n    },\r\n\r\n    /**\r\n     * Packs a Uint24, representing RGB components, with a Float32, representing\r\n     * the alpha component, with a range between 0.0 and 1.0 and return a \r\n     * swizzled Uint32\r\n     *\r\n     * @function Phaser.Renderer.WebGL.Utils.getTintAppendFloatAlphaAndSwap\r\n     * @since 3.0.0\r\n     * \r\n     * @param {number} rgb - Uint24 representing RGB components\r\n     * @param {number} a - Float32 representing Alpha component\r\n     * \r\n     * @return {number} Packed RGBA as Uint32\r\n     */\r\n    getTintAppendFloatAlphaAndSwap: function (rgb, a)\r\n    {\r\n        var ur = ((rgb >> 16)|0) & 0xff;\r\n        var ug = ((rgb >> 8)|0) & 0xff;\r\n        var ub = (rgb|0) & 0xff;\r\n        var ua = ((a * 255.0)|0) & 0xFF;\r\n\r\n        return ((ua << 24) | (ub << 16) | (ug << 8) | ur) >>> 0;\r\n    },\r\n\r\n    /**\r\n     * Unpacks a Uint24 RGB into an array of floats of ranges of 0.0 and 1.0\r\n     *\r\n     * @function Phaser.Renderer.WebGL.Utils.getFloatsFromUintRGB\r\n     * @since 3.0.0\r\n     * \r\n     * @param {number} rgb - RGB packed as a Uint24\r\n     * \r\n     * @return {array} Array of floats representing each component as a float \r\n     */\r\n    getFloatsFromUintRGB: function (rgb)\r\n    {\r\n        var ur = ((rgb >> 16)|0) & 0xff;\r\n        var ug = ((rgb >> 8)|0) & 0xff;\r\n        var ub = (rgb|0) & 0xff;\r\n\r\n        return [ ur / 255.0, ug / 255.0, ub / 255.0 ];\r\n    },\r\n\r\n    /**\r\n     * Counts how many attributes of 32 bits a vertex has\r\n     *\r\n     * @function Phaser.Renderer.WebGL.Utils.getComponentCount\r\n     * @since 3.0.0\r\n     * \r\n     * @param {array} attributes - Array of attributes \r\n     * @param {WebGLRenderingContext} glContext - WebGLContext used for check types\r\n     * \r\n     * @return {number} Count of 32 bit attributes in vertex\r\n     */\r\n    getComponentCount: function (attributes, glContext)\r\n    {\r\n        var count = 0;\r\n\r\n        for (var index = 0; index < attributes.length; ++index)\r\n        {\r\n            var element = attributes[index];\r\n            \r\n            if (element.type === glContext.FLOAT)\r\n            {\r\n                count += element.size;\r\n            }\r\n            else\r\n            {\r\n                count += 1; // We'll force any other type to be 32 bit. for now\r\n            }\r\n        }\r\n\r\n        return count;\r\n    }\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9VdGlscy5qcz9hMzJiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLDJCQUEyQjtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9VdGlscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlV0aWxzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYWNrcyBmb3VyIGZsb2F0cyBvbiBhIHJhbmdlIGZyb20gMC4wIHRvIDEuMCBpbnRvIGEgc2luZ2xlIFVpbnQzMlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuVXRpbHMuZ2V0VGludEZyb21GbG9hdHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFJlZCBjb21wb25lbnQgaW4gYSByYW5nZSBmcm9tIDAuMCB0byAxLjAgXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIEdyZWVuIGNvbXBvbmVudCBpbiBhIHJhbmdlIGZyb20gMC4wIHRvIDEuMFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBCbHVlIGNvbXBvbmVudCBpbiBhIHJhbmdlIGZyb20gMC4wIHRvIDEuMFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGEgLSBBbHBoYSBjb21wb25lbnQgaW4gYSByYW5nZSBmcm9tIDAuMCB0byAxLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFRpbnRGcm9tRmxvYXRzOiBmdW5jdGlvbiAociwgZywgYiwgYSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdXIgPSAoKHIgKiAyNTUuMCl8MCkgJiAweEZGO1xyXG4gICAgICAgIHZhciB1ZyA9ICgoZyAqIDI1NS4wKXwwKSAmIDB4RkY7XHJcbiAgICAgICAgdmFyIHViID0gKChiICogMjU1LjApfDApICYgMHhGRjtcclxuICAgICAgICB2YXIgdWEgPSAoKGEgKiAyNTUuMCl8MCkgJiAweEZGO1xyXG5cclxuICAgICAgICByZXR1cm4gKCh1YSA8PCAyNCkgfCAodXIgPDwgMTYpIHwgKHVnIDw8IDgpIHwgdWIpID4+PiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhY2tzIGEgVWludDI0LCByZXByZXNlbnRpbmcgUkdCIGNvbXBvbmVudHMsIHdpdGggYSBGbG9hdDMyLCByZXByZXNlbnRpbmdcclxuICAgICAqIHRoZSBhbHBoYSBjb21wb25lbnQsIHdpdGggYSByYW5nZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIGFuZCByZXR1cm4gYSBVaW50MzJcclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLlJlbmRlcmVyLldlYkdMLlV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFVpbnQyNCByZXByZXNlbnRpbmcgUkdCIGNvbXBvbmVudHNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhIC0gRmxvYXQzMiByZXByZXNlbnRpbmcgQWxwaGEgY29tcG9uZW50XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUGFja2VkIFJHQkEgYXMgVWludDMyXHJcbiAgICAgKi9cclxuICAgIGdldFRpbnRBcHBlbmRGbG9hdEFscGhhOiBmdW5jdGlvbiAocmdiLCBhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB1YSA9ICgoYSAqIDI1NS4wKXwwKSAmIDB4RkY7XHJcbiAgICAgICAgcmV0dXJuICgodWEgPDwgMjQpIHwgcmdiKSA+Pj4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYWNrcyBhIFVpbnQyNCwgcmVwcmVzZW50aW5nIFJHQiBjb21wb25lbnRzLCB3aXRoIGEgRmxvYXQzMiwgcmVwcmVzZW50aW5nXHJcbiAgICAgKiB0aGUgYWxwaGEgY29tcG9uZW50LCB3aXRoIGEgcmFuZ2UgYmV0d2VlbiAwLjAgYW5kIDEuMCBhbmQgcmV0dXJuIGEgXHJcbiAgICAgKiBzd2l6emxlZCBVaW50MzJcclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLlJlbmRlcmVyLldlYkdMLlV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZ2IgLSBVaW50MjQgcmVwcmVzZW50aW5nIFJHQiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYSAtIEZsb2F0MzIgcmVwcmVzZW50aW5nIEFscGhhIGNvbXBvbmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFBhY2tlZCBSR0JBIGFzIFVpbnQzMlxyXG4gICAgICovXHJcbiAgICBnZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXA6IGZ1bmN0aW9uIChyZ2IsIGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVyID0gKChyZ2IgPj4gMTYpfDApICYgMHhmZjtcclxuICAgICAgICB2YXIgdWcgPSAoKHJnYiA+PiA4KXwwKSAmIDB4ZmY7XHJcbiAgICAgICAgdmFyIHViID0gKHJnYnwwKSAmIDB4ZmY7XHJcbiAgICAgICAgdmFyIHVhID0gKChhICogMjU1LjApfDApICYgMHhGRjtcclxuXHJcbiAgICAgICAgcmV0dXJuICgodWEgPDwgMjQpIHwgKHViIDw8IDE2KSB8ICh1ZyA8PCA4KSB8IHVyKSA+Pj4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnBhY2tzIGEgVWludDI0IFJHQiBpbnRvIGFuIGFycmF5IG9mIGZsb2F0cyBvZiByYW5nZXMgb2YgMC4wIGFuZCAxLjBcclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLlJlbmRlcmVyLldlYkdMLlV0aWxzLmdldEZsb2F0c0Zyb21VaW50UkdCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFJHQiBwYWNrZWQgYXMgYSBVaW50MjRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIGZsb2F0cyByZXByZXNlbnRpbmcgZWFjaCBjb21wb25lbnQgYXMgYSBmbG9hdCBcclxuICAgICAqL1xyXG4gICAgZ2V0RmxvYXRzRnJvbVVpbnRSR0I6IGZ1bmN0aW9uIChyZ2IpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVyID0gKChyZ2IgPj4gMTYpfDApICYgMHhmZjtcclxuICAgICAgICB2YXIgdWcgPSAoKHJnYiA+PiA4KXwwKSAmIDB4ZmY7XHJcbiAgICAgICAgdmFyIHViID0gKHJnYnwwKSAmIDB4ZmY7XHJcblxyXG4gICAgICAgIHJldHVybiBbIHVyIC8gMjU1LjAsIHVnIC8gMjU1LjAsIHViIC8gMjU1LjAgXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3VudHMgaG93IG1hbnkgYXR0cmlidXRlcyBvZiAzMiBiaXRzIGEgdmVydGV4IGhhc1xyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuVXRpbHMuZ2V0Q29tcG9uZW50Q291bnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhdHRyaWJ1dGVzIC0gQXJyYXkgb2YgYXR0cmlidXRlcyBcclxuICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbENvbnRleHQgLSBXZWJHTENvbnRleHQgdXNlZCBmb3IgY2hlY2sgdHlwZXNcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBDb3VudCBvZiAzMiBiaXQgYXR0cmlidXRlcyBpbiB2ZXJ0ZXhcclxuICAgICAqL1xyXG4gICAgZ2V0Q29tcG9uZW50Q291bnQ6IGZ1bmN0aW9uIChhdHRyaWJ1dGVzLCBnbENvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2luZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhdHRyaWJ1dGVzW2luZGV4XTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IGdsQ29udGV4dC5GTE9BVClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY291bnQgKz0gZWxlbWVudC5zaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTsgLy8gV2UnbGwgZm9yY2UgYW55IG90aGVyIHR5cGUgdG8gYmUgMzIgYml0LiBmb3Igbm93XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH1cclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/Utils.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Utils = __webpack_require__(/*! ./Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @classdesc\r\n * WebGLPipeline is a class that describes the way elements will be renderered\r\n * in WebGL, specially focused on batching vertices (batching is not provided).\r\n * Pipelines are mostly used for describing 2D rendering passes but it's\r\n * flexible enough to be used for any type of rendering including 3D.\r\n * Internally WebGLPipeline will handle things like compiling shaders,\r\n * creating vertex buffers, assigning primitive topology and binding\r\n * vertex attributes.\r\n *\r\n * The config properties are:\r\n * - game: Current game instance.\r\n * - renderer: Current WebGL renderer.\r\n * - gl: Current WebGL context.\r\n * - topology: This indicates how the primitives are rendered. The default value is GL_TRIANGLES.\r\n *              Here is the full list of rendering primitives (https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants).\r\n * - vertShader: Source for vertex shader as a string.\r\n * - fragShader: Source for fragment shader as a string.\r\n * - vertexCapacity: The amount of vertices that shall be allocated\r\n * - vertexSize: The size of a single vertex in bytes.\r\n * - vertices: An optional buffer of vertices\r\n * - attributes: An array describing the vertex attributes\r\n *\r\n * The vertex attributes properties are:\r\n * - name : String - Name of the attribute in the vertex shader\r\n * - size : integer - How many components describe the attribute. For ex: vec3 = size of 3, float = size of 1\r\n * - type : GLenum - WebGL type (gl.BYTE, gl.SHORT, gl.UNSIGNED_BYTE, gl.UNSIGNED_SHORT, gl.FLOAT)\r\n * - normalized : boolean - Is the attribute normalized\r\n * - offset : integer - The offset in bytes to the current attribute in the vertex. Equivalent to offsetof(vertex, attrib) in C\r\n * Here you can find more information of how to describe an attribute:\r\n * - https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n *\r\n * @class WebGLPipeline\r\n * @memberof Phaser.Renderer.WebGL\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object for this WebGL Pipeline, as described above.\r\n */\r\nvar WebGLPipeline = new Class({\r\n\r\n    initialize:\r\n\r\n    function WebGLPipeline (config)\r\n    {\r\n        /**\r\n         * Name of the Pipeline. Used for identifying\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = 'WebGLPipeline';\r\n\r\n        /**\r\n         * The Game which owns this WebGL Pipeline.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = config.game;\r\n\r\n        /**\r\n         * The canvas which this WebGL Pipeline renders to.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#view\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.view = config.game.canvas;\r\n\r\n        /**\r\n         * Used to store the current game resolution\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#resolution\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.resolution = 1;\r\n\r\n        /**\r\n         * Width of the current viewport\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = 0;\r\n\r\n        /**\r\n         * Height of the current viewport\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = 0;\r\n\r\n        /**\r\n         * The WebGL context this WebGL Pipeline uses.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#gl\r\n         * @type {WebGLRenderingContext}\r\n         * @since 3.0.0\r\n         */\r\n        this.gl = config.gl;\r\n\r\n        /**\r\n         * How many vertices have been fed to the current pipeline.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexCount\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexCount = 0;\r\n\r\n        /**\r\n         * The limit of vertices that the pipeline can hold\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexCapacity\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexCapacity = config.vertexCapacity;\r\n\r\n        /**\r\n         * The WebGL Renderer which owns this WebGL Pipeline.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#renderer\r\n         * @type {Phaser.Renderer.WebGL.WebGLRenderer}\r\n         * @since 3.0.0\r\n         */\r\n        this.renderer = config.renderer;\r\n\r\n        /**\r\n         * Raw byte buffer of vertices.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexData\r\n         * @type {ArrayBuffer}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexData = (config.vertices ? config.vertices : new ArrayBuffer(config.vertexCapacity * config.vertexSize));\r\n\r\n        /**\r\n         * The handle to a WebGL vertex buffer object.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexBuffer\r\n         * @type {WebGLBuffer}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexBuffer = this.renderer.createVertexBuffer((config.vertices ? config.vertices : this.vertexData.byteLength), this.gl.STREAM_DRAW);\r\n\r\n        /**\r\n         * The handle to a WebGL program\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#program\r\n         * @type {WebGLProgram}\r\n         * @since 3.0.0\r\n         */\r\n        this.program = this.renderer.createProgram(config.vertShader, config.fragShader);\r\n\r\n        /**\r\n         * Array of objects that describe the vertex attributes\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#attributes\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.attributes = config.attributes;\r\n\r\n        /**\r\n         * The size in bytes of the vertex\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexSize\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexSize = config.vertexSize;\r\n\r\n        /**\r\n         * The primitive topology which the pipeline will use to submit draw calls\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#topology\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.topology = config.topology;\r\n\r\n        /**\r\n         * Uint8 view to the vertex raw buffer. Used for uploading vertex buffer resources\r\n         * to the GPU.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#bytes\r\n         * @type {Uint8Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.bytes = new Uint8Array(this.vertexData);\r\n\r\n        /**\r\n         * This will store the amount of components of 32 bit length\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#vertexComponentCount\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexComponentCount = Utils.getComponentCount(config.attributes, this.gl);\r\n\r\n        /**\r\n         * Indicates if the current pipeline is flushing the contents to the GPU.\r\n         * When the variable is set the flush function will be locked.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#flushLocked\r\n         * @type {boolean}\r\n         * @since 3.1.0\r\n         */\r\n        this.flushLocked = false;\r\n\r\n        /**\r\n         * Indicates if the current pipeline is active or not for this frame only.\r\n         * Reset in the onRender method.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLPipeline#active\r\n         * @type {boolean}\r\n         * @since 3.10.0\r\n         */\r\n        this.active = false;\r\n    },\r\n\r\n    /**\r\n     * Called when the Game has fully booted and the Renderer has finished setting up.\r\n     *\r\n     * By this stage all Game level systems are now in place and you can perform any final\r\n     * tasks that the pipeline may need that relied on game systems such as the Texture Manager.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#boot\r\n     * @since 3.11.0\r\n     */\r\n    boot: function ()\r\n    {\r\n    },\r\n\r\n    /**\r\n     * Adds a description of vertex attribute to the pipeline\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#addAttribute\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - Name of the vertex attribute\r\n     * @param {integer} size - Vertex component size\r\n     * @param {integer} type - Type of the attribute\r\n     * @param {boolean} normalized - Is the value normalized to a range\r\n     * @param {integer} offset - Byte offset to the beginning of the first element in the vertex\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    addAttribute: function (name, size, type, normalized, offset)\r\n    {\r\n        this.attributes.push({\r\n            name: name,\r\n            size: size,\r\n            type: this.renderer.glFormats[type],\r\n            normalized: normalized,\r\n            offset: offset\r\n        });\r\n\r\n        this.vertexComponentCount = Utils.getComponentCount(\r\n            this.attributes,\r\n            this.gl\r\n        );\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Check if the current batch of vertices is full.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#shouldFlush\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the current batch should be flushed, otherwise `false`.\r\n     */\r\n    shouldFlush: function ()\r\n    {\r\n        return (this.vertexCount >= this.vertexCapacity);\r\n    },\r\n\r\n    /**\r\n     * Resizes the properties used to describe the viewport\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#resize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The new width of this WebGL Pipeline.\r\n     * @param {number} height - The new height of this WebGL Pipeline.\r\n     * @param {number} resolution - The resolution this WebGL Pipeline should be resized to.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    resize: function (width, height, resolution)\r\n    {\r\n        this.width = width * resolution;\r\n        this.height = height * resolution;\r\n        this.resolution = resolution;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds the pipeline resources, including programs, vertex buffers and binds attributes\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#bind\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    bind: function ()\r\n    {\r\n        var gl = this.gl;\r\n        var vertexBuffer = this.vertexBuffer;\r\n        var attributes = this.attributes;\r\n        var program = this.program;\r\n        var renderer = this.renderer;\r\n        var vertexSize = this.vertexSize;\r\n\r\n        renderer.setProgram(program);\r\n        renderer.setVertexBuffer(vertexBuffer);\r\n\r\n        for (var index = 0; index < attributes.length; ++index)\r\n        {\r\n            var element = attributes[index];\r\n            var location = gl.getAttribLocation(program, element.name);\r\n\r\n            if (location >= 0)\r\n            {\r\n                gl.enableVertexAttribArray(location);\r\n                gl.vertexAttribPointer(location, element.size, element.type, element.normalized, vertexSize, element.offset);\r\n            }\r\n            else if (location !== -1)\r\n            {\r\n                gl.disableVertexAttribArray(location);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set whenever this WebGL Pipeline is bound to a WebGL Renderer.\r\n     *\r\n     * This method is called every time the WebGL Pipeline is attempted to be bound, even if it already is the current pipeline.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#onBind\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onBind: function ()\r\n    {\r\n        // This is for updating uniform data it's called on each bind attempt.\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called before each frame is rendered, but after the canvas has been cleared.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#onPreRender\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onPreRender: function ()\r\n    {\r\n        // called once every frame\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called before a Scene's Camera is rendered.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#onRender\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene being rendered.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Scene Camera being rendered with.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onRender: function ()\r\n    {\r\n        // called for each camera\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Called after each frame has been completely rendered and snapshots have been taken.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#onPostRender\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onPostRender: function ()\r\n    {\r\n        // called once every frame\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Uploads the vertex data and emits a draw call\r\n     * for the current batch of vertices.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#flush\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    flush: function ()\r\n    {\r\n        if (this.flushLocked) { return this; }\r\n\r\n        this.flushLocked = true;\r\n\r\n        var gl = this.gl;\r\n        var vertexCount = this.vertexCount;\r\n        var topology = this.topology;\r\n        var vertexSize = this.vertexSize;\r\n\r\n        if (vertexCount === 0)\r\n        {\r\n            this.flushLocked = false;\r\n            return;\r\n        }\r\n\r\n        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bytes.subarray(0, vertexCount * vertexSize));\r\n        gl.drawArrays(topology, 0, vertexCount);\r\n\r\n        this.vertexCount = 0;\r\n        this.flushLocked = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes all object references in this WebGL Pipeline and removes its program from the WebGL context.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#destroy\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    destroy: function ()\r\n    {\r\n        var gl = this.gl;\r\n\r\n        gl.deleteProgram(this.program);\r\n        gl.deleteBuffer(this.vertexBuffer);\r\n\r\n        delete this.program;\r\n        delete this.vertexBuffer;\r\n        delete this.gl;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat1\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - The new value of the `float` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat1: function (name, x)\r\n    {\r\n        this.renderer.setFloat1(this.program, name, x);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat2\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - The new X component of the `vec2` uniform.\r\n     * @param {number} y - The new Y component of the `vec2` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat2: function (name, x, y)\r\n    {\r\n        this.renderer.setFloat2(this.program, name, x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat3\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - The new X component of the `vec3` uniform.\r\n     * @param {number} y - The new Y component of the `vec3` uniform.\r\n     * @param {number} z - The new Z component of the `vec3` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat3: function (name, x, y, z)\r\n    {\r\n        this.renderer.setFloat3(this.program, name, x, y, z);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat4\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - X component of the uniform\r\n     * @param {number} y - Y component of the uniform\r\n     * @param {number} z - Z component of the uniform\r\n     * @param {number} w - W component of the uniform\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat4: function (name, x, y, z, w)\r\n    {\r\n        this.renderer.setFloat4(this.program, name, x, y, z, w);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat1v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat1v: function (name, arr)\r\n    {\r\n        this.renderer.setFloat1v(this.program, name, arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat2v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat2v: function (name, arr)\r\n    {\r\n        this.renderer.setFloat2v(this.program, name, arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat3v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat3v: function (name, arr)\r\n    {\r\n        this.renderer.setFloat3v(this.program, name, arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setFloat4v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setFloat4v: function (name, arr)\r\n    {\r\n        this.renderer.setFloat4v(this.program, name, arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setInt1\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - The new value of the `int` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setInt1: function (name, x)\r\n    {\r\n        this.renderer.setInt1(this.program, name, x);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setInt2\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - The new X component of the `ivec2` uniform.\r\n     * @param {integer} y - The new Y component of the `ivec2` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setInt2: function (name, x, y)\r\n    {\r\n        this.renderer.setInt2(this.program, name, x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setInt3\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - The new X component of the `ivec3` uniform.\r\n     * @param {integer} y - The new Y component of the `ivec3` uniform.\r\n     * @param {integer} z - The new Z component of the `ivec3` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setInt3: function (name, x, y, z)\r\n    {\r\n        this.renderer.setInt3(this.program, name, x, y, z);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setInt4\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - X component of the uniform\r\n     * @param {integer} y - Y component of the uniform\r\n     * @param {integer} z - Z component of the uniform\r\n     * @param {integer} w - W component of the uniform\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setInt4: function (name, x, y, z, w)\r\n    {\r\n        this.renderer.setInt4(this.program, name, x, y, z, w);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setMatrix2\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - Whether to transpose the matrix. Should be `false`.\r\n     * @param {Float32Array} matrix - The new values for the `mat2` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setMatrix2: function (name, transpose, matrix)\r\n    {\r\n        this.renderer.setMatrix2(this.program, name, transpose, matrix);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setMatrix3\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - Whether to transpose the matrix. Should be `false`.\r\n     * @param {Float32Array} matrix - The new values for the `mat3` uniform.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setMatrix3: function (name, transpose, matrix)\r\n    {\r\n        this.renderer.setMatrix3(this.program, name, transpose, matrix);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a uniform value of the current pipeline program.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLPipeline#setMatrix4\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - Should the matrix be transpose\r\n     * @param {Float32Array} matrix - Matrix data\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    setMatrix4: function (name, transpose, matrix)\r\n    {\r\n        this.renderer.setMatrix4(this.program, name, transpose, matrix);\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = WebGLPipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9XZWJHTFBpcGVsaW5lLmpzPzYyM2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsa0VBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkIsMkJBQTJCO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9XZWJHTFBpcGVsaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBXZWJHTFBpcGVsaW5lIGlzIGEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIHdheSBlbGVtZW50cyB3aWxsIGJlIHJlbmRlcmVyZWRcclxuICogaW4gV2ViR0wsIHNwZWNpYWxseSBmb2N1c2VkIG9uIGJhdGNoaW5nIHZlcnRpY2VzIChiYXRjaGluZyBpcyBub3QgcHJvdmlkZWQpLlxyXG4gKiBQaXBlbGluZXMgYXJlIG1vc3RseSB1c2VkIGZvciBkZXNjcmliaW5nIDJEIHJlbmRlcmluZyBwYXNzZXMgYnV0IGl0J3NcclxuICogZmxleGlibGUgZW5vdWdoIHRvIGJlIHVzZWQgZm9yIGFueSB0eXBlIG9mIHJlbmRlcmluZyBpbmNsdWRpbmcgM0QuXHJcbiAqIEludGVybmFsbHkgV2ViR0xQaXBlbGluZSB3aWxsIGhhbmRsZSB0aGluZ3MgbGlrZSBjb21waWxpbmcgc2hhZGVycyxcclxuICogY3JlYXRpbmcgdmVydGV4IGJ1ZmZlcnMsIGFzc2lnbmluZyBwcmltaXRpdmUgdG9wb2xvZ3kgYW5kIGJpbmRpbmdcclxuICogdmVydGV4IGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqIFRoZSBjb25maWcgcHJvcGVydGllcyBhcmU6XHJcbiAqIC0gZ2FtZTogQ3VycmVudCBnYW1lIGluc3RhbmNlLlxyXG4gKiAtIHJlbmRlcmVyOiBDdXJyZW50IFdlYkdMIHJlbmRlcmVyLlxyXG4gKiAtIGdsOiBDdXJyZW50IFdlYkdMIGNvbnRleHQuXHJcbiAqIC0gdG9wb2xvZ3k6IFRoaXMgaW5kaWNhdGVzIGhvdyB0aGUgcHJpbWl0aXZlcyBhcmUgcmVuZGVyZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEdMX1RSSUFOR0xFUy5cclxuICogICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGZ1bGwgbGlzdCBvZiByZW5kZXJpbmcgcHJpbWl0aXZlcyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMX0FQSS9Db25zdGFudHMpLlxyXG4gKiAtIHZlcnRTaGFkZXI6IFNvdXJjZSBmb3IgdmVydGV4IHNoYWRlciBhcyBhIHN0cmluZy5cclxuICogLSBmcmFnU2hhZGVyOiBTb3VyY2UgZm9yIGZyYWdtZW50IHNoYWRlciBhcyBhIHN0cmluZy5cclxuICogLSB2ZXJ0ZXhDYXBhY2l0eTogVGhlIGFtb3VudCBvZiB2ZXJ0aWNlcyB0aGF0IHNoYWxsIGJlIGFsbG9jYXRlZFxyXG4gKiAtIHZlcnRleFNpemU6IFRoZSBzaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cclxuICogLSB2ZXJ0aWNlczogQW4gb3B0aW9uYWwgYnVmZmVyIG9mIHZlcnRpY2VzXHJcbiAqIC0gYXR0cmlidXRlczogQW4gYXJyYXkgZGVzY3JpYmluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXNcclxuICpcclxuICogVGhlIHZlcnRleCBhdHRyaWJ1dGVzIHByb3BlcnRpZXMgYXJlOlxyXG4gKiAtIG5hbWUgOiBTdHJpbmcgLSBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgaW4gdGhlIHZlcnRleCBzaGFkZXJcclxuICogLSBzaXplIDogaW50ZWdlciAtIEhvdyBtYW55IGNvbXBvbmVudHMgZGVzY3JpYmUgdGhlIGF0dHJpYnV0ZS4gRm9yIGV4OiB2ZWMzID0gc2l6ZSBvZiAzLCBmbG9hdCA9IHNpemUgb2YgMVxyXG4gKiAtIHR5cGUgOiBHTGVudW0gLSBXZWJHTCB0eXBlIChnbC5CWVRFLCBnbC5TSE9SVCwgZ2wuVU5TSUdORURfQllURSwgZ2wuVU5TSUdORURfU0hPUlQsIGdsLkZMT0FUKVxyXG4gKiAtIG5vcm1hbGl6ZWQgOiBib29sZWFuIC0gSXMgdGhlIGF0dHJpYnV0ZSBub3JtYWxpemVkXHJcbiAqIC0gb2Zmc2V0IDogaW50ZWdlciAtIFRoZSBvZmZzZXQgaW4gYnl0ZXMgdG8gdGhlIGN1cnJlbnQgYXR0cmlidXRlIGluIHRoZSB2ZXJ0ZXguIEVxdWl2YWxlbnQgdG8gb2Zmc2V0b2YodmVydGV4LCBhdHRyaWIpIGluIENcclxuICogSGVyZSB5b3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvZiBob3cgdG8gZGVzY3JpYmUgYW4gYXR0cmlidXRlOlxyXG4gKiAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJHTFJlbmRlcmluZ0NvbnRleHQvdmVydGV4QXR0cmliUG9pbnRlclxyXG4gKlxyXG4gKiBAY2xhc3MgV2ViR0xQaXBlbGluZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhpcyBXZWJHTCBQaXBlbGluZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxyXG4gKi9cclxudmFyIFdlYkdMUGlwZWxpbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gV2ViR0xQaXBlbGluZSAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE5hbWUgb2YgdGhlIFBpcGVsaW5lLiBVc2VkIGZvciBpZGVudGlmeWluZ1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ1dlYkdMUGlwZWxpbmUnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR2FtZSB3aGljaCBvd25zIHRoaXMgV2ViR0wgUGlwZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGNvbmZpZy5nYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FudmFzIHdoaWNoIHRoaXMgV2ViR0wgUGlwZWxpbmUgcmVuZGVycyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3ZpZXdcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3ID0gY29uZmlnLmdhbWUuY2FudmFzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGdhbWUgcmVzb2x1dGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjcmVzb2x1dGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lkdGggb2YgdGhlIGN1cnJlbnQgdmlld3BvcnRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGVpZ2h0IG9mIHRoZSBjdXJyZW50IHZpZXdwb3J0XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIGNvbnRleHQgdGhpcyBXZWJHTCBQaXBlbGluZSB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2wgPSBjb25maWcuZ2w7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvdyBtYW55IHZlcnRpY2VzIGhhdmUgYmVlbiBmZWQgdG8gdGhlIGN1cnJlbnQgcGlwZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSN2ZXJ0ZXhDb3VudFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVydGV4Q291bnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGltaXQgb2YgdmVydGljZXMgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGhvbGRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3ZlcnRleENhcGFjaXR5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDYXBhY2l0eSA9IGNvbmZpZy52ZXJ0ZXhDYXBhY2l0eTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIFJlbmRlcmVyIHdoaWNoIG93bnMgdGhpcyBXZWJHTCBQaXBlbGluZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBjb25maWcucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJhdyBieXRlIGJ1ZmZlciBvZiB2ZXJ0aWNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3ZlcnRleERhdGFcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXlCdWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhEYXRhID0gKGNvbmZpZy52ZXJ0aWNlcyA/IGNvbmZpZy52ZXJ0aWNlcyA6IG5ldyBBcnJheUJ1ZmZlcihjb25maWcudmVydGV4Q2FwYWNpdHkgKiBjb25maWcudmVydGV4U2l6ZSkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGFuZGxlIHRvIGEgV2ViR0wgdmVydGV4IGJ1ZmZlciBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSN2ZXJ0ZXhCdWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xCdWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigoY29uZmlnLnZlcnRpY2VzID8gY29uZmlnLnZlcnRpY2VzIDogdGhpcy52ZXJ0ZXhEYXRhLmJ5dGVMZW5ndGgpLCB0aGlzLmdsLlNUUkVBTV9EUkFXKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhhbmRsZSB0byBhIFdlYkdMIHByb2dyYW1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3Byb2dyYW1cclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xQcm9ncmFtfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlUHJvZ3JhbShjb25maWcudmVydFNoYWRlciwgY29uZmlnLmZyYWdTaGFkZXIpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBcnJheSBvZiBvYmplY3RzIHRoYXQgZGVzY3JpYmUgdGhlIHZlcnRleCBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNhdHRyaWJ1dGVzXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBjb25maWcuYXR0cmlidXRlcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHZlcnRleFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjdmVydGV4U2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVydGV4U2l6ZSA9IGNvbmZpZy52ZXJ0ZXhTaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJpbWl0aXZlIHRvcG9sb2d5IHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIHVzZSB0byBzdWJtaXQgZHJhdyBjYWxsc1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjdG9wb2xvZ3lcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvcG9sb2d5ID0gY29uZmlnLnRvcG9sb2d5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVaW50OCB2aWV3IHRvIHRoZSB2ZXJ0ZXggcmF3IGJ1ZmZlci4gVXNlZCBmb3IgdXBsb2FkaW5nIHZlcnRleCBidWZmZXIgcmVzb3VyY2VzXHJcbiAgICAgICAgICogdG8gdGhlIEdQVS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI2J5dGVzXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQ4QXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmVydGV4RGF0YSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgd2lsbCBzdG9yZSB0aGUgYW1vdW50IG9mIGNvbXBvbmVudHMgb2YgMzIgYml0IGxlbmd0aFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjdmVydGV4Q29tcG9uZW50Q291bnRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleENvbXBvbmVudENvdW50ID0gVXRpbHMuZ2V0Q29tcG9uZW50Q291bnQoY29uZmlnLmF0dHJpYnV0ZXMsIHRoaXMuZ2wpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgcGlwZWxpbmUgaXMgZmx1c2hpbmcgdGhlIGNvbnRlbnRzIHRvIHRoZSBHUFUuXHJcbiAgICAgICAgICogV2hlbiB0aGUgdmFyaWFibGUgaXMgc2V0IHRoZSBmbHVzaCBmdW5jdGlvbiB3aWxsIGJlIGxvY2tlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI2ZsdXNoTG9ja2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mbHVzaExvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgcGlwZWxpbmUgaXMgYWN0aXZlIG9yIG5vdCBmb3IgdGhpcyBmcmFtZSBvbmx5LlxyXG4gICAgICAgICAqIFJlc2V0IGluIHRoZSBvblJlbmRlciBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgR2FtZSBoYXMgZnVsbHkgYm9vdGVkIGFuZCB0aGUgUmVuZGVyZXIgaGFzIGZpbmlzaGVkIHNldHRpbmcgdXAuXHJcbiAgICAgKlxyXG4gICAgICogQnkgdGhpcyBzdGFnZSBhbGwgR2FtZSBsZXZlbCBzeXN0ZW1zIGFyZSBub3cgaW4gcGxhY2UgYW5kIHlvdSBjYW4gcGVyZm9ybSBhbnkgZmluYWxcclxuICAgICAqIHRhc2tzIHRoYXQgdGhlIHBpcGVsaW5lIG1heSBuZWVkIHRoYXQgcmVsaWVkIG9uIGdhbWUgc3lzdGVtcyBzdWNoIGFzIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNib290XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGRlc2NyaXB0aW9uIG9mIHZlcnRleCBhdHRyaWJ1dGUgdG8gdGhlIHBpcGVsaW5lXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNhZGRBdHRyaWJ1dGVcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgdmVydGV4IGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzaXplIC0gVmVydGV4IGNvbXBvbmVudCBzaXplXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHR5cGUgLSBUeXBlIG9mIHRoZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9ybWFsaXplZCAtIElzIHRoZSB2YWx1ZSBub3JtYWxpemVkIHRvIGEgcmFuZ2VcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gb2Zmc2V0IC0gQnl0ZSBvZmZzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgdmVydGV4XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBhZGRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBvZmZzZXQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBzaXplOiBzaXplLFxyXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnJlbmRlcmVyLmdsRm9ybWF0c1t0eXBlXSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZDogbm9ybWFsaXplZCxcclxuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb21wb25lbnRDb3VudCA9IFV0aWxzLmdldENvbXBvbmVudENvdW50KFxyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgIHRoaXMuZ2xcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGJhdGNoIG9mIHZlcnRpY2VzIGlzIGZ1bGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzaG91bGRGbHVzaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjdXJyZW50IGJhdGNoIHNob3VsZCBiZSBmbHVzaGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgc2hvdWxkRmx1c2g6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnZlcnRleENvdW50ID49IHRoaXMudmVydGV4Q2FwYWNpdHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZXMgdGhlIHByb3BlcnRpZXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdmlld3BvcnRcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3Jlc2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGlzIFdlYkdMIFBpcGVsaW5lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBuZXcgaGVpZ2h0IG9mIHRoaXMgV2ViR0wgUGlwZWxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVzb2x1dGlvbiAtIFRoZSByZXNvbHV0aW9uIHRoaXMgV2ViR0wgUGlwZWxpbmUgc2hvdWxkIGJlIHJlc2l6ZWQgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCByZXNvbHV0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHJlc29sdXRpb247XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgKiByZXNvbHV0aW9uO1xyXG4gICAgICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIHRoZSBwaXBlbGluZSByZXNvdXJjZXMsIGluY2x1ZGluZyBwcm9ncmFtcywgdmVydGV4IGJ1ZmZlcnMgYW5kIGJpbmRzIGF0dHJpYnV0ZXNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI2JpbmRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYmluZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLnZlcnRleEJ1ZmZlcjtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMucHJvZ3JhbTtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaXplID0gdGhpcy52ZXJ0ZXhTaXplO1xyXG5cclxuICAgICAgICByZW5kZXJlci5zZXRQcm9ncmFtKHByb2dyYW0pO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFZlcnRleEJ1ZmZlcih2ZXJ0ZXhCdWZmZXIpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGF0dHJpYnV0ZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBlbGVtZW50Lm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uID49IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIGVsZW1lbnQuc2l6ZSwgZWxlbWVudC50eXBlLCBlbGVtZW50Lm5vcm1hbGl6ZWQsIHZlcnRleFNpemUsIGVsZW1lbnQub2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdGlvbiAhPT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB3aGVuZXZlciB0aGlzIFdlYkdMIFBpcGVsaW5lIGlzIGJvdW5kIHRvIGEgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIFdlYkdMIFBpcGVsaW5lIGlzIGF0dGVtcHRlZCB0byBiZSBib3VuZCwgZXZlbiBpZiBpdCBhbHJlYWR5IGlzIHRoZSBjdXJyZW50IHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjb25CaW5kXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIG9uQmluZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBUaGlzIGlzIGZvciB1cGRhdGluZyB1bmlmb3JtIGRhdGEgaXQncyBjYWxsZWQgb24gZWFjaCBiaW5kIGF0dGVtcHQuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJlZm9yZSBlYWNoIGZyYW1lIGlzIHJlbmRlcmVkLCBidXQgYWZ0ZXIgdGhlIGNhbnZhcyBoYXMgYmVlbiBjbGVhcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjb25QcmVSZW5kZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb25QcmVSZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gY2FsbGVkIG9uY2UgZXZlcnkgZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYmVmb3JlIGEgU2NlbmUncyBDYW1lcmEgaXMgcmVuZGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNvblJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIGJlaW5nIHJlbmRlcmVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIFNjZW5lIENhbWVyYSBiZWluZyByZW5kZXJlZCB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb25SZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gY2FsbGVkIGZvciBlYWNoIGNhbWVyYVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhZnRlciBlYWNoIGZyYW1lIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmVuZGVyZWQgYW5kIHNuYXBzaG90cyBoYXZlIGJlZW4gdGFrZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNvblBvc3RSZW5kZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb25Qb3N0UmVuZGVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vIGNhbGxlZCBvbmNlIGV2ZXJ5IGZyYW1lXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBsb2FkcyB0aGUgdmVydGV4IGRhdGEgYW5kIGVtaXRzIGEgZHJhdyBjYWxsXHJcbiAgICAgKiBmb3IgdGhlIGN1cnJlbnQgYmF0Y2ggb2YgdmVydGljZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNmbHVzaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmbHVzaDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mbHVzaExvY2tlZCkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICAgICAgICB0aGlzLmZsdXNoTG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgdmVydGV4Q291bnQgPSB0aGlzLnZlcnRleENvdW50O1xyXG4gICAgICAgIHZhciB0b3BvbG9neSA9IHRoaXMudG9wb2xvZ3k7XHJcbiAgICAgICAgdmFyIHZlcnRleFNpemUgPSB0aGlzLnZlcnRleFNpemU7XHJcblxyXG4gICAgICAgIGlmICh2ZXJ0ZXhDb3VudCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2hMb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuYnl0ZXMuc3ViYXJyYXkoMCwgdmVydGV4Q291bnQgKiB2ZXJ0ZXhTaXplKSk7XHJcbiAgICAgICAgZ2wuZHJhd0FycmF5cyh0b3BvbG9neSwgMCwgdmVydGV4Q291bnQpO1xyXG5cclxuICAgICAgICB0aGlzLnZlcnRleENvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmZsdXNoTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIG9iamVjdCByZWZlcmVuY2VzIGluIHRoaXMgV2ViR0wgUGlwZWxpbmUgYW5kIHJlbW92ZXMgaXRzIHByb2dyYW0gZnJvbSB0aGUgV2ViR0wgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XHJcbiAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcclxuXHJcbiAgICAgICAgZGVsZXRlIHRoaXMucHJvZ3JhbTtcclxuICAgICAgICBkZWxldGUgdGhpcy52ZXJ0ZXhCdWZmZXI7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldEZsb2F0MVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGBmbG9hdGAgdW5pZm9ybS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsb2F0MTogZnVuY3Rpb24gKG5hbWUsIHgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGbG9hdDEodGhpcy5wcm9ncmFtLCBuYW1lLCB4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgdW5pZm9ybSB2YWx1ZSBvZiB0aGUgY3VycmVudCBwaXBlbGluZSBwcm9ncmFtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjc2V0RmxvYXQyXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIG5ldyBYIGNvbXBvbmVudCBvZiB0aGUgYHZlYzJgIHVuaWZvcm0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBuZXcgWSBjb21wb25lbnQgb2YgdGhlIGB2ZWMyYCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQyOiBmdW5jdGlvbiAobmFtZSwgeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZsb2F0Mih0aGlzLnByb2dyYW0sIG5hbWUsIHgsIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSB1bmlmb3JtIHZhbHVlIG9mIHRoZSBjdXJyZW50IHBpcGVsaW5lIHByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzZXRGbG9hdDNcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgbmV3IFggY29tcG9uZW50IG9mIHRoZSBgdmVjM2AgdW5pZm9ybS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIG5ldyBZIGNvbXBvbmVudCBvZiB0aGUgYHZlYzNgIHVuaWZvcm0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSBuZXcgWiBjb21wb25lbnQgb2YgdGhlIGB2ZWMzYCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQzOiBmdW5jdGlvbiAobmFtZSwgeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZsb2F0Myh0aGlzLnByb2dyYW0sIG5hbWUsIHgsIHksIHopO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSB1bmlmb3JtIHZhbHVlIG9mIHRoZSBjdXJyZW50IHBpcGVsaW5lIHByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzZXRGbG9hdDRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBYIGNvbXBvbmVudCBvZiB0aGUgdW5pZm9ybVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBZIGNvbXBvbmVudCBvZiB0aGUgdW5pZm9ybVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBaIGNvbXBvbmVudCBvZiB0aGUgdW5pZm9ybVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHcgLSBXIGNvbXBvbmVudCBvZiB0aGUgdW5pZm9ybVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQ0OiBmdW5jdGlvbiAobmFtZSwgeCwgeSwgeiwgdylcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZsb2F0NCh0aGlzLnByb2dyYW0sIG5hbWUsIHgsIHksIHosIHcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSB1bmlmb3JtIHZhbHVlIG9mIHRoZSBjdXJyZW50IHBpcGVsaW5lIHByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzZXRGbG9hdDF2XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgdW5pZm9ybSB2YXJpYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsb2F0MXY6IGZ1bmN0aW9uIChuYW1lLCBhcnIpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGbG9hdDF2KHRoaXMucHJvZ3JhbSwgbmFtZSwgYXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgdW5pZm9ybSB2YWx1ZSBvZiB0aGUgY3VycmVudCBwaXBlbGluZSBwcm9ncmFtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjc2V0RmxvYXQydlxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFyciAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIHVuaWZvcm0gdmFyaWFibGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGbG9hdDJ2OiBmdW5jdGlvbiAobmFtZSwgYXJyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RmxvYXQydih0aGlzLnByb2dyYW0sIG5hbWUsIGFycik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldEZsb2F0M3ZcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnIgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSB1bmlmb3JtIHZhcmlhYmxlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQzdjogZnVuY3Rpb24gKG5hbWUsIGFycilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZsb2F0M3YodGhpcy5wcm9ncmFtLCBuYW1lLCBhcnIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSB1bmlmb3JtIHZhbHVlIG9mIHRoZSBjdXJyZW50IHBpcGVsaW5lIHByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzZXRGbG9hdDR2XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgdW5pZm9ybSB2YXJpYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsb2F0NHY6IGZ1bmN0aW9uIChuYW1lLCBhcnIpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGbG9hdDR2KHRoaXMucHJvZ3JhbSwgbmFtZSwgYXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgdW5pZm9ybSB2YWx1ZSBvZiB0aGUgY3VycmVudCBwaXBlbGluZSBwcm9ncmFtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjc2V0SW50MVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBgaW50YCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW50MTogZnVuY3Rpb24gKG5hbWUsIHgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRJbnQxKHRoaXMucHJvZ3JhbSwgbmFtZSwgeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldEludDJcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIG5ldyBYIGNvbXBvbmVudCBvZiB0aGUgYGl2ZWMyYCB1bmlmb3JtLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIG5ldyBZIGNvbXBvbmVudCBvZiB0aGUgYGl2ZWMyYCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW50MjogZnVuY3Rpb24gKG5hbWUsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRJbnQyKHRoaXMucHJvZ3JhbSwgbmFtZSwgeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldEludDNcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIG5ldyBYIGNvbXBvbmVudCBvZiB0aGUgYGl2ZWMzYCB1bmlmb3JtLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIG5ldyBZIGNvbXBvbmVudCBvZiB0aGUgYGl2ZWMzYCB1bmlmb3JtLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB6IC0gVGhlIG5ldyBaIGNvbXBvbmVudCBvZiB0aGUgYGl2ZWMzYCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW50MzogZnVuY3Rpb24gKG5hbWUsIHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRJbnQzKHRoaXMucHJvZ3JhbSwgbmFtZSwgeCwgeSwgeik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldEludDRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gWCBjb21wb25lbnQgb2YgdGhlIHVuaWZvcm1cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFkgY29tcG9uZW50IG9mIHRoZSB1bmlmb3JtXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHogLSBaIGNvbXBvbmVudCBvZiB0aGUgdW5pZm9ybVxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB3IC0gVyBjb21wb25lbnQgb2YgdGhlIHVuaWZvcm1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEludDQ6IGZ1bmN0aW9uIChuYW1lLCB4LCB5LCB6LCB3KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0SW50NCh0aGlzLnByb2dyYW0sIG5hbWUsIHgsIHksIHosIHcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSB1bmlmb3JtIHZhbHVlIG9mIHRoZSBjdXJyZW50IHBpcGVsaW5lIHByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZSNzZXRNYXRyaXgyXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhbnNwb3NlIC0gV2hldGhlciB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeC4gU2hvdWxkIGJlIGBmYWxzZWAuXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gbWF0cml4IC0gVGhlIG5ldyB2YWx1ZXMgZm9yIHRoZSBgbWF0MmAgdW5pZm9ybS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE1hdHJpeDI6IGZ1bmN0aW9uIChuYW1lLCB0cmFuc3Bvc2UsIG1hdHJpeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldE1hdHJpeDIodGhpcy5wcm9ncmFtLCBuYW1lLCB0cmFuc3Bvc2UsIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIHVuaWZvcm0gdmFsdWUgb2YgdGhlIGN1cnJlbnQgcGlwZWxpbmUgcHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lI3NldE1hdHJpeDNcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB0cmFuc3Bvc2UgLSBXaGV0aGVyIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4LiBTaG91bGQgYmUgYGZhbHNlYC5cclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBtYXRyaXggLSBUaGUgbmV3IHZhbHVlcyBmb3IgdGhlIGBtYXQzYCB1bmlmb3JtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWF0cml4MzogZnVuY3Rpb24gKG5hbWUsIHRyYW5zcG9zZSwgbWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0TWF0cml4Myh0aGlzLnByb2dyYW0sIG5hbWUsIHRyYW5zcG9zZSwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgdW5pZm9ybSB2YWx1ZSBvZiB0aGUgY3VycmVudCBwaXBlbGluZSBwcm9ncmFtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUjc2V0TWF0cml4NFxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSAtIFNob3VsZCB0aGUgbWF0cml4IGJlIHRyYW5zcG9zZVxyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IG1hdHJpeCAtIE1hdHJpeCBkYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNYXRyaXg0OiBmdW5jdGlvbiAobmFtZSwgdHJhbnNwb3NlLCBtYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRNYXRyaXg0KHRoaXMucHJvZ3JhbSwgbmFtZSwgdHJhbnNwb3NlLCBtYXRyaXgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXZWJHTFBpcGVsaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCamera = __webpack_require__(/*! ../../cameras/2d/BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar CameraEvents = __webpack_require__(/*! ../../cameras/2d/events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar IsSizePowerOfTwo = __webpack_require__(/*! ../../math/pow2/IsSizePowerOfTwo */ \"./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar ScaleEvents = __webpack_require__(/*! ../../scale/events */ \"./node_modules/phaser/src/scale/events/index.js\");\r\nvar SpliceOne = __webpack_require__(/*! ../../utils/array/SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\");\r\nvar TextureEvents = __webpack_require__(/*! ../../textures/events */ \"./node_modules/phaser/src/textures/events/index.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar Utils = __webpack_require__(/*! ./Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\nvar WebGLSnapshot = __webpack_require__(/*! ../snapshot/WebGLSnapshot */ \"./node_modules/phaser/src/renderer/snapshot/WebGLSnapshot.js\");\r\n\r\n//  Default Pipelines\r\nvar BitmapMaskPipeline = __webpack_require__(/*! ./pipelines/BitmapMaskPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/BitmapMaskPipeline.js\");\r\nvar ForwardDiffuseLightPipeline = __webpack_require__(/*! ./pipelines/ForwardDiffuseLightPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js\");\r\nvar TextureTintPipeline = __webpack_require__(/*! ./pipelines/TextureTintPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js\");\r\n\r\n/**\r\n * @callback WebGLContextCallback\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer which owns the context.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * WebGLRenderer is a class that contains the needed functionality to keep the\r\n * WebGLRenderingContext state clean. The main idea of the WebGLRenderer is to keep track of\r\n * any context change that happens for WebGL rendering inside of Phaser. This means\r\n * if raw webgl functions are called outside the WebGLRenderer of the Phaser WebGL\r\n * rendering ecosystem they might pollute the current WebGLRenderingContext state producing\r\n * unexpected behavior. It's recommended that WebGL interaction is done through\r\n * WebGLRenderer and/or WebGLPipeline.\r\n *\r\n * @class WebGLRenderer\r\n * @memberof Phaser.Renderer.WebGL\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Game instance which owns this WebGL Renderer.\r\n */\r\nvar WebGLRenderer = new Class({\r\n\r\n    initialize:\r\n\r\n    function WebGLRenderer (game)\r\n    {\r\n        var gameConfig = game.config;\r\n\r\n        var contextCreationConfig = {\r\n            alpha: gameConfig.transparent,\r\n            desynchronized: gameConfig.desynchronized,\r\n            depth: false,\r\n            antialias: gameConfig.antialiasGL,\r\n            premultipliedAlpha: gameConfig.premultipliedAlpha,\r\n            stencil: true,\r\n            failIfMajorPerformanceCaveat: gameConfig.failIfMajorPerformanceCaveat,\r\n            powerPreference: gameConfig.powerPreference\r\n        };\r\n\r\n        /**\r\n         * The local configuration settings of this WebGL Renderer.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#config\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = {\r\n            clearBeforeRender: gameConfig.clearBeforeRender,\r\n            antialias: gameConfig.antialias,\r\n            backgroundColor: gameConfig.backgroundColor,\r\n            contextCreation: contextCreationConfig,\r\n            resolution: gameConfig.resolution,\r\n            roundPixels: gameConfig.roundPixels,\r\n            maxTextures: gameConfig.maxTextures,\r\n            maxTextureSize: gameConfig.maxTextureSize,\r\n            batchSize: gameConfig.batchSize,\r\n            maxLights: gameConfig.maxLights,\r\n            mipmapFilter: gameConfig.mipmapFilter\r\n        };\r\n\r\n        /**\r\n         * The Game instance which owns this WebGL Renderer.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A constant which allows the renderer to be easily identified as a WebGL Renderer.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#type\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = CONST.WEBGL;\r\n\r\n        /**\r\n         * The width of the canvas being rendered to.\r\n         * This is populated in the onResize event handler.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#width\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = 0;\r\n\r\n        /**\r\n         * The height of the canvas being rendered to.\r\n         * This is populated in the onResize event handler.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#height\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = 0;\r\n\r\n        /**\r\n         * The canvas which this WebGL Renderer draws to.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.canvas = game.canvas;\r\n\r\n        /**\r\n         * An array of blend modes supported by the WebGL Renderer.\r\n         * \r\n         * This array includes the default blend modes as well as any custom blend modes added through {@link #addBlendMode}.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#blendModes\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.blendModes = [];\r\n\r\n        /**\r\n         * Keeps track of any WebGLTexture created with the current WebGLRenderingContext\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#nativeTextures\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.nativeTextures = [];\r\n\r\n        /**\r\n         * This property is set to `true` if the WebGL context of the renderer is lost.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#contextLost\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.contextLost = false;\r\n\r\n        /**\r\n         * This object will store all pipelines created through addPipeline\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#pipelines\r\n         * @type {object}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.pipelines = null;\r\n\r\n        /**\r\n         * Details about the currently scheduled snapshot.\r\n         * \r\n         * If a non-null `callback` is set in this object, a snapshot of the canvas will be taken after the current frame is fully rendered.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#snapshotState\r\n         * @type {Phaser.Types.Renderer.Snapshot.SnapshotState}\r\n         * @since 3.0.0\r\n         */\r\n        this.snapshotState = {\r\n            x: 0,\r\n            y: 0,\r\n            width: 1,\r\n            height: 1,\r\n            getPixel: false,\r\n            callback: null,\r\n            type: 'image/png',\r\n            encoder: 0.92,\r\n            isFramebuffer: false,\r\n            bufferWidth: 0,\r\n            bufferHeight: 0\r\n        };\r\n\r\n        // Internal Renderer State (Textures, Framebuffers, Pipelines, Buffers, etc)\r\n\r\n        /**\r\n         * Cached value for the last texture unit that was used\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentActiveTextureUnit\r\n         * @type {integer}\r\n         * @since 3.1.0\r\n         */\r\n        this.currentActiveTextureUnit = 0;\r\n\r\n        /**\r\n         * An array of the last texture handles that were bound to the WebGLRenderingContext\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentTextures\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.currentTextures = new Array(16);\r\n\r\n        /**\r\n         * Current framebuffer in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentFramebuffer\r\n         * @type {WebGLFramebuffer}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentFramebuffer = null;\r\n\r\n        /**\r\n         * Current WebGLPipeline in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentPipeline\r\n         * @type {Phaser.Renderer.WebGL.WebGLPipeline}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentPipeline = null;\r\n\r\n        /**\r\n         * Current WebGLProgram in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentProgram\r\n         * @type {WebGLProgram}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentProgram = null;\r\n\r\n        /**\r\n         * Current WebGLBuffer (Vertex buffer) in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentVertexBuffer\r\n         * @type {WebGLBuffer}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentVertexBuffer = null;\r\n\r\n        /**\r\n         * Current WebGLBuffer (Index buffer) in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentIndexBuffer\r\n         * @type {WebGLBuffer}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.currentIndexBuffer = null;\r\n\r\n        /**\r\n         * Current blend mode in use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentBlendMode\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.currentBlendMode = Infinity;\r\n\r\n        /**\r\n         * Indicates if the the scissor state is enabled in WebGLRenderingContext\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentScissorEnabled\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.currentScissorEnabled = false;\r\n\r\n        /**\r\n         * Stores the current scissor data\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentScissor\r\n         * @type {Uint32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.currentScissor = null;\r\n\r\n        /**\r\n         * Stack of scissor data\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#scissorStack\r\n         * @type {Uint32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.scissorStack = [];\r\n\r\n        /**\r\n         * The handler to invoke when the context is lost.\r\n         * This should not be changed and is set in the boot method.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#contextLostHandler\r\n         * @type {function}\r\n         * @since 3.19.0\r\n         */\r\n        this.contextLostHandler = NOOP;\r\n\r\n        /**\r\n         * The handler to invoke when the context is restored.\r\n         * This should not be changed and is set in the boot method.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#contextRestoredHandler\r\n         * @type {function}\r\n         * @since 3.19.0\r\n         */\r\n        this.contextRestoredHandler = NOOP;\r\n\r\n        /**\r\n         * The underlying WebGL context of the renderer.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#gl\r\n         * @type {WebGLRenderingContext}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.gl = null;\r\n\r\n        /**\r\n         * Array of strings that indicate which WebGL extensions are supported by the browser\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#supportedExtensions\r\n         * @type {object}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.supportedExtensions = null;\r\n\r\n        /**\r\n         * Extensions loaded into the current context\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#extensions\r\n         * @type {object}\r\n         * @default {}\r\n         * @since 3.0.0\r\n         */\r\n        this.extensions = {};\r\n\r\n        /**\r\n         * Stores the current WebGL component formats for further use\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#glFormats\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.2.0\r\n         */\r\n        this.glFormats = [];\r\n\r\n        /**\r\n         * Stores the supported WebGL texture compression formats.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#compression\r\n         * @type {array}\r\n         * @since 3.8.0\r\n         */\r\n        this.compression = {\r\n            ETC1: false,\r\n            PVRTC: false,\r\n            S3TC: false\r\n        };\r\n\r\n        /**\r\n         * Cached drawing buffer height to reduce gl calls.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#drawingBufferHeight\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.drawingBufferHeight = 0;\r\n\r\n        /**\r\n         * A blank 32x32 transparent texture, as used by the Graphics system where needed.\r\n         * This is set in the `boot` method.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#blankTexture\r\n         * @type {WebGLTexture}\r\n         * @readonly\r\n         * @since 3.12.0\r\n         */\r\n        this.blankTexture = null;\r\n\r\n        /**\r\n         * A default Camera used in calls when no other camera has been provided.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#defaultCamera\r\n         * @type {Phaser.Cameras.Scene2D.BaseCamera}\r\n         * @since 3.12.0\r\n         */\r\n        this.defaultCamera = new BaseCamera(0, 0, 0, 0);\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#_tempMatrix1\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix1 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#_tempMatrix2\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#_tempMatrix3\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix3 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#_tempMatrix4\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.12.0\r\n         */\r\n        this._tempMatrix4 = new TransformMatrix();\r\n\r\n        /**\r\n         * The total number of masks currently stacked.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#maskCount\r\n         * @type {integer}\r\n         * @since 3.17.0\r\n         */\r\n        this.maskCount = 0;\r\n\r\n        /**\r\n         * The mask stack.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#maskStack\r\n         * @type {Phaser.Display.Masks.GeometryMask[]}\r\n         * @since 3.17.0\r\n         */\r\n        this.maskStack = [];\r\n\r\n        /**\r\n         * Internal property that tracks the currently set mask.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentMask\r\n         * @type {any}\r\n         * @since 3.17.0\r\n         */\r\n        this.currentMask = { mask: null, camera: null };\r\n\r\n        /**\r\n         * Internal property that tracks the currently set camera mask.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentCameraMask\r\n         * @type {any}\r\n         * @since 3.17.0\r\n         */\r\n        this.currentCameraMask = { mask: null, camera: null };\r\n\r\n        /**\r\n         * Internal gl function mapping for uniform look-up.\r\n         * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/uniform\r\n         * \r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#glFuncMap\r\n         * @type {any}\r\n         * @since 3.17.0\r\n         */\r\n        this.glFuncMap = null;\r\n\r\n        /**\r\n         * The `type` of the Game Object being currently rendered.\r\n         * This can be used by advanced render functions for batching look-ahead.\r\n         * \r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#currentType\r\n         * @type {string}\r\n         * @since 3.19.0\r\n         */\r\n        this.currentType = '';\r\n\r\n        /**\r\n         * Is the `type` of the Game Object being currently rendered different than the\r\n         * type of the object before it in the display list? I.e. it's a 'new' type.\r\n         * \r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#newType\r\n         * @type {boolean}\r\n         * @since 3.19.0\r\n         */\r\n        this.newType = false;\r\n\r\n        /**\r\n         * Does the `type` of the next Game Object in the display list match that\r\n         * of the object being currently rendered?\r\n         * \r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#nextTypeMatch\r\n         * @type {boolean}\r\n         * @since 3.19.0\r\n         */\r\n        this.nextTypeMatch = false;\r\n\r\n        /**\r\n         * The mipmap magFilter to be used when creating textures.\r\n         * \r\n         * You can specify this as a string in the game config, i.e.:\r\n         * \r\n         * `renderer: { mipmapFilter: 'NEAREST_MIPMAP_LINEAR' }`\r\n         * \r\n         * The 6 options for WebGL1 are, in order from least to most computationally expensive:\r\n         * \r\n         * NEAREST (for pixel art)\r\n         * LINEAR (the default)\r\n         * NEAREST_MIPMAP_NEAREST\r\n         * LINEAR_MIPMAP_NEAREST\r\n         * NEAREST_MIPMAP_LINEAR\r\n         * LINEAR_MIPMAP_LINEAR\r\n         * \r\n         * Mipmaps only work with textures that are fully power-of-two in size.\r\n         * \r\n         * For more details see https://webglfundamentals.org/webgl/lessons/webgl-3d-textures.html\r\n         * \r\n         * @name Phaser.Renderer.WebGL.WebGLRenderer#mipmapFilter\r\n         * @type {GLenum}\r\n         * @since 3.21.0\r\n         */\r\n        this.mipmapFilter = null;\r\n\r\n        this.init(this.config);\r\n    },\r\n\r\n    /**\r\n     * Creates a new WebGLRenderingContext and initializes all internal state.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#init\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} config - The configuration object for the renderer.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    init: function (config)\r\n    {\r\n        var gl;\r\n        var game = this.game;\r\n        var canvas = this.canvas;\r\n        var clearColor = config.backgroundColor;\r\n\r\n        //  Did they provide their own context?\r\n        if (game.config.context)\r\n        {\r\n            gl = game.config.context;\r\n        }\r\n        else\r\n        {\r\n            gl = canvas.getContext('webgl', config.contextCreation) || canvas.getContext('experimental-webgl', config.contextCreation);\r\n        }\r\n\r\n        if (!gl || gl.isContextLost())\r\n        {\r\n            this.contextLost = true;\r\n\r\n            throw new Error('WebGL unsupported');\r\n        }\r\n\r\n        this.gl = gl;\r\n\r\n        var _this = this;\r\n\r\n        this.contextLostHandler = function (event)\r\n        {\r\n            _this.contextLost = true;\r\n\r\n            _this.game.events.emit(GameEvents.CONTEXT_LOST, _this);\r\n\r\n            event.preventDefault();\r\n        };\r\n\r\n        this.contextRestoredHandler = function ()\r\n        {\r\n            _this.contextLost = false;\r\n\r\n            _this.init(_this.config);\r\n\r\n            _this.game.events.emit(GameEvents.CONTEXT_RESTORED, _this);\r\n        };\r\n\r\n        canvas.addEventListener('webglcontextlost', this.contextLostHandler, false);\r\n        canvas.addEventListener('webglcontextrestored', this.contextRestoredHandler, false);\r\n\r\n        //  Set it back into the Game, so developers can access it from there too\r\n        game.context = gl;\r\n\r\n        for (var i = 0; i <= 27; i++)\r\n        {\r\n            this.blendModes.push({ func: [ gl.ONE, gl.ONE_MINUS_SRC_ALPHA ], equation: gl.FUNC_ADD });\r\n        }\r\n\r\n        //  ADD\r\n        this.blendModes[1].func = [ gl.ONE, gl.DST_ALPHA ];\r\n\r\n        //  MULTIPLY\r\n        this.blendModes[2].func = [ gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA ];\r\n\r\n        //  SCREEN\r\n        this.blendModes[3].func = [ gl.ONE, gl.ONE_MINUS_SRC_COLOR ];\r\n\r\n        //  ERASE\r\n        this.blendModes[17] = { func: [ gl.ZERO, gl.ONE_MINUS_SRC_ALPHA ], equation: gl.FUNC_REVERSE_SUBTRACT };\r\n\r\n        this.glFormats[0] = gl.BYTE;\r\n        this.glFormats[1] = gl.SHORT;\r\n        this.glFormats[2] = gl.UNSIGNED_BYTE;\r\n        this.glFormats[3] = gl.UNSIGNED_SHORT;\r\n        this.glFormats[4] = gl.FLOAT;\r\n\r\n        //  Set the gl function map\r\n        this.glFuncMap = {\r\n\r\n            mat2: { func: gl.uniformMatrix2fv, length: 1, matrix: true },\r\n            mat3: { func: gl.uniformMatrix3fv, length: 1, matrix: true },\r\n            mat4: { func: gl.uniformMatrix4fv, length: 1, matrix: true },\r\n\r\n            '1f': { func: gl.uniform1f, length: 1 },\r\n            '1fv': { func: gl.uniform1fv, length: 1 },\r\n            '1i': { func: gl.uniform1i, length: 1 },\r\n            '1iv': { func: gl.uniform1iv, length: 1 },\r\n\r\n            '2f': { func: gl.uniform2f, length: 2 },\r\n            '2fv': { func: gl.uniform2fv, length: 1 },\r\n            '2i': { func: gl.uniform2i, length: 2 },\r\n            '2iv': { func: gl.uniform2iv, length: 1 },\r\n\r\n            '3f': { func: gl.uniform3f, length: 3 },\r\n            '3fv': { func: gl.uniform3fv, length: 1 },\r\n            '3i': { func: gl.uniform3i, length: 3 },\r\n            '3iv': { func: gl.uniform3iv, length: 1 },\r\n\r\n            '4f': { func: gl.uniform4f, length: 4 },\r\n            '4fv': { func: gl.uniform4fv, length: 1 },\r\n            '4i': { func: gl.uniform4i, length: 4 },\r\n            '4iv': { func: gl.uniform4iv, length: 1 }\r\n\r\n        };\r\n\r\n        // Load supported extensions\r\n        var exts = gl.getSupportedExtensions();\r\n\r\n        if (!config.maxTextures)\r\n        {\r\n            config.maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\r\n        }\r\n\r\n        if (!config.maxTextureSize)\r\n        {\r\n            config.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n        }\r\n\r\n        var extString = 'WEBGL_compressed_texture_';\r\n        var wkExtString = 'WEBKIT_' + extString;\r\n\r\n        this.compression.ETC1 = gl.getExtension(extString + 'etc1') || gl.getExtension(wkExtString + 'etc1');\r\n        this.compression.PVRTC = gl.getExtension(extString + 'pvrtc') || gl.getExtension(wkExtString + 'pvrtc');\r\n        this.compression.S3TC = gl.getExtension(extString + 's3tc') || gl.getExtension(wkExtString + 's3tc');\r\n\r\n        this.supportedExtensions = exts;\r\n\r\n        //  Setup initial WebGL state\r\n        gl.disable(gl.DEPTH_TEST);\r\n        gl.disable(gl.CULL_FACE);\r\n\r\n        gl.enable(gl.BLEND);\r\n\r\n        gl.clearColor(clearColor.redGL, clearColor.greenGL, clearColor.blueGL, clearColor.alphaGL);\r\n\r\n        //  Mipmaps\r\n        this.mipmapFilter = gl[config.mipmapFilter];\r\n\r\n        // Initialize all textures to null\r\n        for (var index = 0; index < this.currentTextures.length; ++index)\r\n        {\r\n            this.currentTextures[index] = null;\r\n        }\r\n\r\n        // Clear previous pipelines and reload default ones\r\n        this.pipelines = {};\r\n\r\n        this.addPipeline('TextureTintPipeline', new TextureTintPipeline({ game: game, renderer: this }));\r\n        this.addPipeline('BitmapMaskPipeline', new BitmapMaskPipeline({ game: game, renderer: this }));\r\n        this.addPipeline('Light2D', new ForwardDiffuseLightPipeline({ game: game, renderer: this, maxLights: config.maxLights }));\r\n\r\n        this.setBlendMode(CONST.BlendModes.NORMAL);\r\n\r\n        game.textures.once(TextureEvents.READY, this.boot, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal boot handler. Calls 'boot' on each pipeline.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#boot\r\n     * @private\r\n     * @since 3.11.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        for (var pipelineName in this.pipelines)\r\n        {\r\n            this.pipelines[pipelineName].boot();\r\n        }\r\n\r\n        var blank = this.game.textures.getFrame('__DEFAULT');\r\n\r\n        this.pipelines.TextureTintPipeline.currentFrame = blank;\r\n\r\n        this.blankTexture = blank;\r\n\r\n        var gl = this.gl;\r\n\r\n        gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n        gl.enable(gl.SCISSOR_TEST);\r\n\r\n        this.setPipeline(this.pipelines.TextureTintPipeline);\r\n\r\n        this.game.scale.on(ScaleEvents.RESIZE, this.onResize, this);\r\n\r\n        var baseSize = this.game.scale.baseSize;\r\n\r\n        this.resize(baseSize.width, baseSize.height, this.game.scale.resolution);\r\n    },\r\n\r\n    /**\r\n     * The event handler that manages the `resize` event dispatched by the Scale Manager.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#onResize\r\n     * @since 3.16.0\r\n     *\r\n     * @param {Phaser.Structs.Size} gameSize - The default Game Size object. This is the un-modified game dimensions.\r\n     * @param {Phaser.Structs.Size} baseSize - The base Size object. The game dimensions multiplied by the resolution. The canvas width / height values match this.\r\n     * @param {Phaser.Structs.Size} displaySize - The display Size object. The size of the canvas style width / height attributes.\r\n     * @param {number} [resolution] - The Scale Manager resolution setting.\r\n     */\r\n    onResize: function (gameSize, baseSize, displaySize, resolution)\r\n    {\r\n        //  Has the underlying canvas size changed?\r\n        if (baseSize.width !== this.width || baseSize.height !== this.height || resolution !== this.resolution)\r\n        {\r\n            this.resize(baseSize.width, baseSize.height, resolution);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resizes the drawing buffer to match that required by the Scale Manager.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#resize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [width] - The new width of the renderer.\r\n     * @param {number} [height] - The new height of the renderer.\r\n     * @param {number} [resolution] - The new resolution of the renderer.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    resize: function (width, height, resolution)\r\n    {\r\n        var gl = this.gl;\r\n        var pipelines = this.pipelines;\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n        this.resolution = resolution;\r\n\r\n        gl.viewport(0, 0, width, height);\r\n\r\n        //  Update all registered pipelines\r\n        for (var pipelineName in pipelines)\r\n        {\r\n            pipelines[pipelineName].resize(width, height, resolution);\r\n        }\r\n\r\n        this.drawingBufferHeight = gl.drawingBufferHeight;\r\n\r\n        gl.scissor(0, (gl.drawingBufferHeight - height), width, height);\r\n\r\n        this.defaultCamera.setSize(width, height);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if a WebGL extension is supported\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#hasExtension\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} extensionName - Name of the WebGL extension\r\n     *\r\n     * @return {boolean} `true` if the extension is supported, otherwise `false`.\r\n     */\r\n    hasExtension: function (extensionName)\r\n    {\r\n        return this.supportedExtensions ? this.supportedExtensions.indexOf(extensionName) : false;\r\n    },\r\n\r\n    /**\r\n     * Loads a WebGL extension\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#getExtension\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} extensionName - The name of the extension to load.\r\n     *\r\n     * @return {object} WebGL extension if the extension is supported\r\n     */\r\n    getExtension: function (extensionName)\r\n    {\r\n        if (!this.hasExtension(extensionName)) { return null; }\r\n\r\n        if (!(extensionName in this.extensions))\r\n        {\r\n            this.extensions[extensionName] = this.gl.getExtension(extensionName);\r\n        }\r\n\r\n        return this.extensions[extensionName];\r\n    },\r\n\r\n    /**\r\n     * Flushes the current pipeline if the pipeline is bound\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#flush\r\n     * @since 3.0.0\r\n     */\r\n    flush: function ()\r\n    {\r\n        if (this.currentPipeline)\r\n        {\r\n            this.currentPipeline.flush();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks if a pipeline is present in the current WebGLRenderer\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#hasPipeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} pipelineName - The name of the pipeline.\r\n     *\r\n     * @return {boolean} `true` if the given pipeline is loaded, otherwise `false`.\r\n     */\r\n    hasPipeline: function (pipelineName)\r\n    {\r\n        return (pipelineName in this.pipelines);\r\n    },\r\n\r\n    /**\r\n     * Returns the pipeline by name if the pipeline exists\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#getPipeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} pipelineName - The name of the pipeline.\r\n     *\r\n     * @return {Phaser.Renderer.WebGL.WebGLPipeline} The pipeline instance, or `null` if not found.\r\n     */\r\n    getPipeline: function (pipelineName)\r\n    {\r\n        return (this.hasPipeline(pipelineName)) ? this.pipelines[pipelineName] : null;\r\n    },\r\n\r\n    /**\r\n     * Removes a pipeline by name.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#removePipeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} pipelineName - The name of the pipeline to be removed.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    removePipeline: function (pipelineName)\r\n    {\r\n        delete this.pipelines[pipelineName];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a pipeline instance into the collection of pipelines\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#addPipeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} pipelineName - A unique string-based key for the pipeline.\r\n     * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipelineInstance - A pipeline instance which must extend WebGLPipeline.\r\n     *\r\n     * @return {Phaser.Renderer.WebGL.WebGLPipeline} The pipeline instance that was passed.\r\n     */\r\n    addPipeline: function (pipelineName, pipelineInstance)\r\n    {\r\n        if (!this.hasPipeline(pipelineName))\r\n        {\r\n            this.pipelines[pipelineName] = pipelineInstance;\r\n        }\r\n        else\r\n        {\r\n            console.warn('Pipeline exists: ' + pipelineName);\r\n        }\r\n\r\n        pipelineInstance.name = pipelineName;\r\n\r\n        this.pipelines[pipelineName].resize(this.width, this.height, this.config.resolution);\r\n\r\n        return pipelineInstance;\r\n    },\r\n\r\n    /**\r\n     * Pushes a new scissor state. This is used to set nested scissor states.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#pushScissor\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} x - The x position of the scissor.\r\n     * @param {integer} y - The y position of the scissor.\r\n     * @param {integer} width - The width of the scissor.\r\n     * @param {integer} height - The height of the scissor.\r\n     * @param {integer} [drawingBufferHeight] - Optional drawingBufferHeight override value.\r\n     *\r\n     * @return {integer[]} An array containing the scissor values.\r\n     */\r\n    pushScissor: function (x, y, width, height, drawingBufferHeight)\r\n    {\r\n        if (drawingBufferHeight === undefined) { drawingBufferHeight = this.drawingBufferHeight; }\r\n\r\n        var scissorStack = this.scissorStack;\r\n\r\n        var scissor = [ x, y, width, height ];\r\n\r\n        scissorStack.push(scissor);\r\n\r\n        this.setScissor(x, y, width, height, drawingBufferHeight);\r\n\r\n        this.currentScissor = scissor;\r\n\r\n        return scissor;\r\n    },\r\n\r\n    /**\r\n     * Sets the current scissor state.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setScissor\r\n     * @since 3.0.0\r\n     * \r\n     * @param {integer} x - The x position of the scissor.\r\n     * @param {integer} y - The y position of the scissor.\r\n     * @param {integer} width - The width of the scissor.\r\n     * @param {integer} height - The height of the scissor.\r\n     * @param {integer} [drawingBufferHeight] - Optional drawingBufferHeight override value.\r\n     */\r\n    setScissor: function (x, y, width, height, drawingBufferHeight)\r\n    {\r\n        if (drawingBufferHeight === undefined) { drawingBufferHeight = this.drawingBufferHeight; }\r\n\r\n        var gl = this.gl;\r\n\r\n        var current = this.currentScissor;\r\n\r\n        var setScissor = (width > 0 && height > 0);\r\n\r\n        if (current && setScissor)\r\n        {\r\n            var cx = current[0];\r\n            var cy = current[1];\r\n            var cw = current[2];\r\n            var ch = current[3];\r\n\r\n            setScissor = (cx !== x || cy !== y || cw !== width || ch !== height);\r\n        }\r\n\r\n        if (setScissor)\r\n        {\r\n            this.flush();\r\n\r\n            // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/scissor\r\n            gl.scissor(x, (drawingBufferHeight - y - height), width, height);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Pops the last scissor state and sets it.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#popScissor\r\n     * @since 3.0.0\r\n     */\r\n    popScissor: function ()\r\n    {\r\n        var scissorStack = this.scissorStack;\r\n\r\n        //  Remove the current scissor\r\n        scissorStack.pop();\r\n\r\n        //  Reset the previous scissor\r\n        var scissor = scissorStack[scissorStack.length - 1];\r\n\r\n        if (scissor)\r\n        {\r\n            this.setScissor(scissor[0], scissor[1], scissor[2], scissor[3]);\r\n        }\r\n\r\n        this.currentScissor = scissor;\r\n    },\r\n\r\n    /**\r\n     * Binds a WebGLPipeline and sets it as the current pipeline to be used.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setPipeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipelineInstance - The pipeline instance to be activated.\r\n     * @param {Phaser.GameObjects.GameObject} [gameObject] - The Game Object that invoked this pipeline, if any.\r\n     *\r\n     * @return {Phaser.Renderer.WebGL.WebGLPipeline} The pipeline that was activated.\r\n     */\r\n    setPipeline: function (pipelineInstance, gameObject)\r\n    {\r\n        if (this.currentPipeline !== pipelineInstance ||\r\n            this.currentPipeline.vertexBuffer !== this.currentVertexBuffer ||\r\n            this.currentPipeline.program !== this.currentProgram)\r\n        {\r\n            this.flush();\r\n            this.currentPipeline = pipelineInstance;\r\n            this.currentPipeline.bind();\r\n        }\r\n\r\n        this.currentPipeline.onBind(gameObject);\r\n\r\n        return this.currentPipeline;\r\n    },\r\n\r\n    /**\r\n     * Is there an active stencil mask?\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#hasActiveStencilMask\r\n     * @since 3.17.0\r\n     * \r\n     * @return {boolean} `true` if there is an active stencil mask, otherwise `false`.\r\n     */\r\n    hasActiveStencilMask: function ()\r\n    {\r\n        var mask = this.currentMask.mask;\r\n        var camMask = this.currentCameraMask.mask;\r\n\r\n        return ((mask && mask.isStencil) || (camMask && camMask.isStencil));\r\n    },\r\n\r\n    /**\r\n     * Use this to reset the gl context to the state that Phaser requires to continue rendering.\r\n     * Calling this will:\r\n     * \r\n     * * Disable `DEPTH_TEST`, `CULL_FACE` and `STENCIL_TEST`.\r\n     * * Clear the depth buffer and stencil buffers.\r\n     * * Reset the viewport size.\r\n     * * Reset the blend mode.\r\n     * * Bind a blank texture as the active texture on texture unit zero.\r\n     * * Rebinds the given pipeline instance.\r\n     * \r\n     * You should call this having previously called `clearPipeline` and then wishing to return\r\n     * control to Phaser again.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#rebindPipeline\r\n     * @since 3.16.0\r\n     * \r\n     * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipelineInstance - The pipeline instance to be activated.\r\n     */\r\n    rebindPipeline: function (pipelineInstance)\r\n    {\r\n        var gl = this.gl;\r\n\r\n        gl.disable(gl.DEPTH_TEST);\r\n        gl.disable(gl.CULL_FACE);\r\n\r\n        if (this.hasActiveStencilMask())\r\n        {\r\n            gl.clear(gl.DEPTH_BUFFER_BIT);\r\n        }\r\n        else\r\n        {\r\n            //  If there wasn't a stencil mask set before this call, we can disable it safely\r\n            gl.disable(gl.STENCIL_TEST);\r\n            gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\r\n        }\r\n\r\n        gl.viewport(0, 0, this.width, this.height);\r\n\r\n        this.setBlendMode(0, true);\r\n\r\n        gl.activeTexture(gl.TEXTURE0);\r\n        gl.bindTexture(gl.TEXTURE_2D, this.blankTexture.glTexture);\r\n\r\n        this.currentActiveTextureUnit = 0;\r\n        this.currentTextures[0] = this.blankTexture.glTexture;\r\n\r\n        this.currentPipeline = pipelineInstance;\r\n        this.currentPipeline.bind();\r\n        this.currentPipeline.onBind();\r\n    },\r\n\r\n    /**\r\n     * Flushes the current WebGLPipeline being used and then clears it, along with the\r\n     * the current shader program and vertex buffer. Then resets the blend mode to NORMAL.\r\n     * Call this before jumping to your own gl context handler, and then call `rebindPipeline` when\r\n     * you wish to return control to Phaser again.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#clearPipeline\r\n     * @since 3.16.0\r\n     */\r\n    clearPipeline: function ()\r\n    {\r\n        this.flush();\r\n\r\n        this.currentPipeline = null;\r\n        this.currentProgram = null;\r\n        this.currentVertexBuffer = null;\r\n        this.currentIndexBuffer = null;\r\n\r\n        this.setBlendMode(0, true);\r\n    },\r\n\r\n    /**\r\n     * Sets the blend mode to the value given.\r\n     *\r\n     * If the current blend mode is different from the one given, the pipeline is flushed and the new\r\n     * blend mode is enabled.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} blendModeId - The blend mode to be set. Can be a `BlendModes` const or an integer value.\r\n     * @param {boolean} [force=false] - Force the blend mode to be set, regardless of the currently set blend mode.\r\n     *\r\n     * @return {boolean} `true` if the blend mode was changed as a result of this call, forcing a flush, otherwise `false`.\r\n     */\r\n    setBlendMode: function (blendModeId, force)\r\n    {\r\n        if (force === undefined) { force = false; }\r\n\r\n        var gl = this.gl;\r\n        var blendMode = this.blendModes[blendModeId];\r\n\r\n        if (force || (blendModeId !== CONST.BlendModes.SKIP_CHECK && this.currentBlendMode !== blendModeId))\r\n        {\r\n            this.flush();\r\n\r\n            gl.enable(gl.BLEND);\r\n            gl.blendEquation(blendMode.equation);\r\n\r\n            if (blendMode.func.length > 2)\r\n            {\r\n                gl.blendFuncSeparate(blendMode.func[0], blendMode.func[1], blendMode.func[2], blendMode.func[3]);\r\n            }\r\n            else\r\n            {\r\n                gl.blendFunc(blendMode.func[0], blendMode.func[1]);\r\n            }\r\n\r\n            this.currentBlendMode = blendModeId;\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Creates a new custom blend mode for the renderer.\r\n     * \r\n     * See https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants#Blending_modes\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#addBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {GLenum[]} func - An array containing the WebGL functions to use for the source and the destination blending factors, respectively. See the possible constants for {@link WebGLRenderingContext#blendFunc()}.\r\n     * @param {GLenum} equation - The equation to use for combining the RGB and alpha components of a new pixel with a rendered one. See the possible constants for {@link WebGLRenderingContext#blendEquation()}.\r\n     *\r\n     * @return {integer} The index of the new blend mode, used for referencing it in the future.\r\n     */\r\n    addBlendMode: function (func, equation)\r\n    {\r\n        var index = this.blendModes.push({ func: func, equation: equation });\r\n\r\n        return index - 1;\r\n    },\r\n\r\n    /**\r\n     * Updates the function bound to a given custom blend mode.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#updateBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index of the custom blend mode.\r\n     * @param {function} func - The function to use for the blend mode.\r\n     * @param {function} equation - The equation to use for the blend mode.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    updateBlendMode: function (index, func, equation)\r\n    {\r\n        if (this.blendModes[index])\r\n        {\r\n            this.blendModes[index].func = func;\r\n\r\n            if (equation)\r\n            {\r\n                this.blendModes[index].equation = equation;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a custom blend mode from the renderer.\r\n     * Any Game Objects still using this blend mode will error, so be sure to clear them first.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#removeBlendMode\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index of the custom blend mode to be removed.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    removeBlendMode: function (index)\r\n    {\r\n        if (index > 17 && this.blendModes[index])\r\n        {\r\n            this.blendModes.splice(index, 1);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the current active texture for texture unit zero to be a blank texture.\r\n     * This only happens if there isn't a texture already in use by texture unit zero.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setBlankTexture\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {boolean} [force=false] - Force a blank texture set, regardless of what's already bound?\r\n     */\r\n    setBlankTexture: function (force)\r\n    {\r\n        if (force === undefined) { force = false; }\r\n\r\n        if (force || this.currentActiveTextureUnit !== 0 || !this.currentTextures[0])\r\n        {\r\n            this.setTexture2D(this.blankTexture.glTexture, 0);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Binds a texture at a texture unit. If a texture is already\r\n     * bound to that unit it will force a flush on the current pipeline.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setTexture2D\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLTexture} texture - The WebGL texture that needs to be bound.\r\n     * @param {integer} textureUnit - The texture unit to which the texture will be bound.\r\n     * @param {boolean} [flush=true] - Will the current pipeline be flushed if this is a new texture, or not?\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    setTexture2D: function (texture, textureUnit, flush)\r\n    {\r\n        if (flush === undefined) { flush = true; }\r\n\r\n        var gl = this.gl;\r\n\r\n        if (texture !== this.currentTextures[textureUnit])\r\n        {\r\n            if (flush)\r\n            {\r\n                this.flush();\r\n            }\r\n\r\n            if (this.currentActiveTextureUnit !== textureUnit)\r\n            {\r\n                gl.activeTexture(gl.TEXTURE0 + textureUnit);\r\n\r\n                this.currentActiveTextureUnit = textureUnit;\r\n            }\r\n\r\n            gl.bindTexture(gl.TEXTURE_2D, texture);\r\n\r\n            this.currentTextures[textureUnit] = texture;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds a framebuffer. If there was another framebuffer already bound it will force a pipeline flush.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFramebuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLFramebuffer} framebuffer - The framebuffer that needs to be bound.\r\n     * @param {boolean} [updateScissor=false] - If a framebuffer is given, set the gl scissor to match the frame buffer size? Or, if `null` given, pop the scissor from the stack.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    setFramebuffer: function (framebuffer, updateScissor)\r\n    {\r\n        if (updateScissor === undefined) { updateScissor = false; }\r\n\r\n        var gl = this.gl;\r\n\r\n        var width = this.width;\r\n        var height = this.height;\r\n\r\n        if (framebuffer !== this.currentFramebuffer)\r\n        {\r\n            if (framebuffer && framebuffer.renderTexture)\r\n            {\r\n                width = framebuffer.renderTexture.width;\r\n                height = framebuffer.renderTexture.height;\r\n            }\r\n            else\r\n            {\r\n                this.flush();\r\n            }\r\n\r\n            gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\r\n\r\n            gl.viewport(0, 0, width, height);\r\n\r\n            if (updateScissor)\r\n            {\r\n                if (framebuffer)\r\n                {\r\n                    this.drawingBufferHeight = height;\r\n\r\n                    this.pushScissor(0, 0, width, height);\r\n                }\r\n                else\r\n                {\r\n                    this.drawingBufferHeight = this.height;\r\n\r\n                    this.popScissor();\r\n                }\r\n            }\r\n\r\n            this.currentFramebuffer = framebuffer;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds a program. If there was another program already bound it will force a pipeline flush.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setProgram\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The program that needs to be bound.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    setProgram: function (program)\r\n    {\r\n        var gl = this.gl;\r\n\r\n        if (program !== this.currentProgram)\r\n        {\r\n            this.flush();\r\n\r\n            gl.useProgram(program);\r\n\r\n            this.currentProgram = program;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Bounds a vertex buffer. If there is a vertex buffer already bound it'll force a pipeline flush.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setVertexBuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLBuffer} vertexBuffer - The buffer that needs to be bound.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    setVertexBuffer: function (vertexBuffer)\r\n    {\r\n        var gl = this.gl;\r\n\r\n        if (vertexBuffer !== this.currentVertexBuffer)\r\n        {\r\n            this.flush();\r\n\r\n            gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\r\n\r\n            this.currentVertexBuffer = vertexBuffer;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Bounds a index buffer. If there is a index buffer already bound it'll force a pipeline flush.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setIndexBuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLBuffer} indexBuffer - The buffer the needs to be bound.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    setIndexBuffer: function (indexBuffer)\r\n    {\r\n        var gl = this.gl;\r\n\r\n        if (indexBuffer !== this.currentIndexBuffer)\r\n        {\r\n            this.flush();\r\n\r\n            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\r\n\r\n            this.currentIndexBuffer = indexBuffer;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a texture from an image source. If the source is not valid it creates an empty texture.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createTextureFromSource\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} source - The source of the texture.\r\n     * @param {integer} width - The width of the texture.\r\n     * @param {integer} height - The height of the texture.\r\n     * @param {integer} scaleMode - The scale mode to be used by the texture.\r\n     *\r\n     * @return {?WebGLTexture} The WebGL Texture that was created, or `null` if it couldn't be created.\r\n     */\r\n    createTextureFromSource: function (source, width, height, scaleMode)\r\n    {\r\n        var gl = this.gl;\r\n        var minFilter = gl.NEAREST;\r\n        var magFilter = gl.NEAREST;\r\n        var wrap = gl.CLAMP_TO_EDGE;\r\n        var texture = null;\r\n\r\n        width = source ? source.width : width;\r\n        height = source ? source.height : height;\r\n\r\n        var pow = IsSizePowerOfTwo(width, height);\r\n\r\n        if (pow)\r\n        {\r\n            wrap = gl.REPEAT;\r\n        }\r\n\r\n        if (scaleMode === CONST.ScaleModes.LINEAR && this.config.antialias)\r\n        {\r\n            minFilter = (pow) ? this.mipmapFilter : gl.LINEAR;\r\n            magFilter = gl.LINEAR;\r\n        }\r\n\r\n        if (!source && typeof width === 'number' && typeof height === 'number')\r\n        {\r\n            texture = this.createTexture2D(0, minFilter, magFilter, wrap, wrap, gl.RGBA, null, width, height);\r\n        }\r\n        else\r\n        {\r\n            texture = this.createTexture2D(0, minFilter, magFilter, wrap, wrap, gl.RGBA, source);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * A wrapper for creating a WebGLTexture. If no pixel data is passed it will create an empty texture.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createTexture2D\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} mipLevel - Mip level of the texture.\r\n     * @param {integer} minFilter - Filtering of the texture.\r\n     * @param {integer} magFilter - Filtering of the texture.\r\n     * @param {integer} wrapT - Wrapping mode of the texture.\r\n     * @param {integer} wrapS - Wrapping mode of the texture.\r\n     * @param {integer} format - Which format does the texture use.\r\n     * @param {?object} pixels - pixel data.\r\n     * @param {integer} width - Width of the texture in pixels.\r\n     * @param {integer} height - Height of the texture in pixels.\r\n     * @param {boolean} [pma=true] - Does the texture have premultiplied alpha?\r\n     * @param {boolean} [forceSize=false] - If `true` it will use the width and height passed to this method, regardless of the pixels dimension.\r\n     * @param {boolean} [flipY=false] - Sets the `UNPACK_FLIP_Y_WEBGL` flag the WebGL Texture uses during upload.\r\n     *\r\n     * @return {WebGLTexture} The WebGLTexture that was created.\r\n     */\r\n    createTexture2D: function (mipLevel, minFilter, magFilter, wrapT, wrapS, format, pixels, width, height, pma, forceSize, flipY)\r\n    {\r\n        pma = (pma === undefined || pma === null) ? true : pma;\r\n        if (forceSize === undefined) { forceSize = false; }\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var gl = this.gl;\r\n        var texture = gl.createTexture();\r\n\r\n        this.setTexture2D(texture, 0);\r\n\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);\r\n\r\n        gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, pma);\r\n        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\r\n\r\n        if (pixels === null || pixels === undefined)\r\n        {\r\n            gl.texImage2D(gl.TEXTURE_2D, mipLevel, format, width, height, 0, format, gl.UNSIGNED_BYTE, null);\r\n        }\r\n        else\r\n        {\r\n            if (!forceSize)\r\n            {\r\n                width = pixels.width;\r\n                height = pixels.height;\r\n            }\r\n\r\n            gl.texImage2D(gl.TEXTURE_2D, mipLevel, format, format, gl.UNSIGNED_BYTE, pixels);\r\n        }\r\n\r\n        if (IsSizePowerOfTwo(width, height))\r\n        {\r\n            gl.generateMipmap(gl.TEXTURE_2D);\r\n        }\r\n\r\n        this.setTexture2D(null, 0);\r\n\r\n        texture.isAlphaPremultiplied = pma;\r\n        texture.isRenderTexture = false;\r\n        texture.width = width;\r\n        texture.height = height;\r\n\r\n        this.nativeTextures.push(texture);\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Wrapper for creating WebGLFramebuffer.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createFramebuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} width - Width in pixels of the framebuffer\r\n     * @param {integer} height - Height in pixels of the framebuffer\r\n     * @param {WebGLTexture} renderTexture - The color texture to where the color pixels are written\r\n     * @param {boolean} addDepthStencilBuffer - Indicates if the current framebuffer support depth and stencil buffers\r\n     *\r\n     * @return {WebGLFramebuffer} Raw WebGLFramebuffer\r\n     */\r\n    createFramebuffer: function (width, height, renderTexture, addDepthStencilBuffer)\r\n    {\r\n        var gl = this.gl;\r\n        var framebuffer = gl.createFramebuffer();\r\n        var complete = 0;\r\n\r\n        this.setFramebuffer(framebuffer);\r\n\r\n        if (addDepthStencilBuffer)\r\n        {\r\n            var depthStencilBuffer = gl.createRenderbuffer();\r\n            gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);\r\n            gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);\r\n            gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilBuffer);\r\n        }\r\n\r\n        renderTexture.isRenderTexture = true;\r\n        renderTexture.isAlphaPremultiplied = false;\r\n\r\n        gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, renderTexture, 0);\r\n\r\n        complete = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\r\n\r\n        if (complete !== gl.FRAMEBUFFER_COMPLETE)\r\n        {\r\n            var errors = {\r\n                36054: 'Incomplete Attachment',\r\n                36055: 'Missing Attachment',\r\n                36057: 'Incomplete Dimensions',\r\n                36061: 'Framebuffer Unsupported'\r\n            };\r\n\r\n            throw new Error('Framebuffer incomplete. Framebuffer status: ' + errors[complete]);\r\n        }\r\n\r\n        framebuffer.renderTexture = renderTexture;\r\n\r\n        this.setFramebuffer(null);\r\n\r\n        return framebuffer;\r\n    },\r\n\r\n    /**\r\n     * Wrapper for creating a WebGLProgram\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createProgram\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} vertexShader - Source to the vertex shader\r\n     * @param {string} fragmentShader - Source to the fragment shader\r\n     *\r\n     * @return {WebGLProgram} Raw WebGLProgram\r\n     */\r\n    createProgram: function (vertexShader, fragmentShader)\r\n    {\r\n        var gl = this.gl;\r\n        var program = gl.createProgram();\r\n        var vs = gl.createShader(gl.VERTEX_SHADER);\r\n        var fs = gl.createShader(gl.FRAGMENT_SHADER);\r\n\r\n        gl.shaderSource(vs, vertexShader);\r\n        gl.shaderSource(fs, fragmentShader);\r\n        gl.compileShader(vs);\r\n        gl.compileShader(fs);\r\n\r\n        if (!gl.getShaderParameter(vs, gl.COMPILE_STATUS))\r\n        {\r\n            throw new Error('Failed to compile Vertex Shader:\\n' + gl.getShaderInfoLog(vs));\r\n        }\r\n        if (!gl.getShaderParameter(fs, gl.COMPILE_STATUS))\r\n        {\r\n            throw new Error('Failed to compile Fragment Shader:\\n' + gl.getShaderInfoLog(fs));\r\n        }\r\n\r\n        gl.attachShader(program, vs);\r\n        gl.attachShader(program, fs);\r\n        gl.linkProgram(program);\r\n\r\n        if (!gl.getProgramParameter(program, gl.LINK_STATUS))\r\n        {\r\n            throw new Error('Failed to link program:\\n' + gl.getProgramInfoLog(program));\r\n        }\r\n\r\n        return program;\r\n    },\r\n\r\n    /**\r\n     * Wrapper for creating a vertex buffer.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createVertexBuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {ArrayBuffer} initialDataOrSize - It's either ArrayBuffer or an integer indicating the size of the vbo\r\n     * @param {integer} bufferUsage - How the buffer is used. gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\r\n     *\r\n     * @return {WebGLBuffer} Raw vertex buffer\r\n     */\r\n    createVertexBuffer: function (initialDataOrSize, bufferUsage)\r\n    {\r\n        var gl = this.gl;\r\n        var vertexBuffer = gl.createBuffer();\r\n\r\n        this.setVertexBuffer(vertexBuffer);\r\n\r\n        gl.bufferData(gl.ARRAY_BUFFER, initialDataOrSize, bufferUsage);\r\n\r\n        this.setVertexBuffer(null);\r\n\r\n        return vertexBuffer;\r\n    },\r\n\r\n    /**\r\n     * Wrapper for creating a vertex buffer.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createIndexBuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {ArrayBuffer} initialDataOrSize - Either ArrayBuffer or an integer indicating the size of the vbo.\r\n     * @param {integer} bufferUsage - How the buffer is used. gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW.\r\n     *\r\n     * @return {WebGLBuffer} Raw index buffer\r\n     */\r\n    createIndexBuffer: function (initialDataOrSize, bufferUsage)\r\n    {\r\n        var gl = this.gl;\r\n        var indexBuffer = gl.createBuffer();\r\n\r\n        this.setIndexBuffer(indexBuffer);\r\n\r\n        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, initialDataOrSize, bufferUsage);\r\n\r\n        this.setIndexBuffer(null);\r\n\r\n        return indexBuffer;\r\n    },\r\n\r\n    /**\r\n     * Removes the given texture from the nativeTextures array and then deletes it from the GPU.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#deleteTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLTexture} texture - The WebGL Texture to be deleted.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    deleteTexture: function (texture)\r\n    {\r\n        var index = this.nativeTextures.indexOf(texture);\r\n\r\n        if (index !== -1)\r\n        {\r\n            SpliceOne(this.nativeTextures, index);\r\n        }\r\n\r\n        this.gl.deleteTexture(texture);\r\n\r\n        if (this.currentTextures[0] === texture && !this.game.pendingDestroy)\r\n        {\r\n            //  texture we just deleted is in use, so bind a blank texture\r\n            this.setBlankTexture(true);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Deletes a WebGLFramebuffer from the GL instance.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#deleteFramebuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLFramebuffer} framebuffer - The Framebuffer to be deleted.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    deleteFramebuffer: function (framebuffer)\r\n    {\r\n        this.gl.deleteFramebuffer(framebuffer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Deletes a WebGLProgram from the GL instance.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#deleteProgram\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The shader program to be deleted.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    deleteProgram: function (program)\r\n    {\r\n        this.gl.deleteProgram(program);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Deletes a WebGLBuffer from the GL instance.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#deleteBuffer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLBuffer} vertexBuffer - The WebGLBuffer to be deleted.\r\n     *\r\n     * @return {this} This WebGLRenderer instance.\r\n     */\r\n    deleteBuffer: function (buffer)\r\n    {\r\n        this.gl.deleteBuffer(buffer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Controls the pre-render operations for the given camera.\r\n     * Handles any clipping needed by the camera and renders the background color if a color is visible.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#preRenderCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to pre-render.\r\n     */\r\n    preRenderCamera: function (camera)\r\n    {\r\n        var cx = camera._cx;\r\n        var cy = camera._cy;\r\n        var cw = camera._cw;\r\n        var ch = camera._ch;\r\n\r\n        var TextureTintPipeline = this.pipelines.TextureTintPipeline;\r\n\r\n        var color = camera.backgroundColor;\r\n\r\n        if (camera.renderToTexture)\r\n        {\r\n            this.flush();\r\n\r\n            this.pushScissor(cx, cy, cw, -ch);\r\n\r\n            this.setFramebuffer(camera.framebuffer);\r\n\r\n            var gl = this.gl;\r\n\r\n            gl.clearColor(0, 0, 0, 0);\r\n\r\n            gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n            TextureTintPipeline.projOrtho(cx, cw + cx, cy, ch + cy, -1000, 1000);\r\n\r\n            if (camera.mask)\r\n            {\r\n                this.currentCameraMask.mask = camera.mask;\r\n                this.currentCameraMask.camera = camera._maskCamera;\r\n\r\n                camera.mask.preRenderWebGL(this, camera, camera._maskCamera);\r\n            }\r\n\r\n            if (color.alphaGL > 0)\r\n            {\r\n                TextureTintPipeline.drawFillRect(\r\n                    cx, cy, cw + cx, ch + cy,\r\n                    Utils.getTintFromFloats(color.redGL, color.greenGL, color.blueGL, 1),\r\n                    color.alphaGL\r\n                );\r\n            }\r\n            \r\n            camera.emit(CameraEvents.PRE_RENDER, camera);\r\n        }\r\n        else\r\n        {\r\n            this.pushScissor(cx, cy, cw, ch);\r\n\r\n            if (camera.mask)\r\n            {\r\n                this.currentCameraMask.mask = camera.mask;\r\n                this.currentCameraMask.camera = camera._maskCamera;\r\n\r\n                camera.mask.preRenderWebGL(this, camera, camera._maskCamera);\r\n            }\r\n\r\n            if (color.alphaGL > 0)\r\n            {\r\n                TextureTintPipeline.drawFillRect(\r\n                    cx, cy, cw , ch,\r\n                    Utils.getTintFromFloats(color.redGL, color.greenGL, color.blueGL, 1),\r\n                    color.alphaGL\r\n                );\r\n            }\r\n        }\r\n    },\r\n\r\n    getCurrentStencilMask: function ()\r\n    {\r\n        var prev = null;\r\n        var stack = this.maskStack;\r\n        var cameraMask = this.currentCameraMask;\r\n\r\n        if (stack.length > 0)\r\n        {\r\n            prev = stack[stack.length - 1];\r\n        }\r\n        else if (cameraMask.mask && cameraMask.mask.isStencil)\r\n        {\r\n            prev = cameraMask;\r\n        }\r\n\r\n        return prev;\r\n    },\r\n\r\n    /**\r\n     * Controls the post-render operations for the given camera.\r\n     * Renders the foreground camera effects like flash and fading. It resets the current scissor state.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#postRenderCamera\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to post-render.\r\n     */\r\n    postRenderCamera: function (camera)\r\n    {\r\n        var TextureTintPipeline = this.pipelines.TextureTintPipeline;\r\n\r\n        camera.flashEffect.postRenderWebGL(TextureTintPipeline, Utils.getTintFromFloats);\r\n        camera.fadeEffect.postRenderWebGL(TextureTintPipeline, Utils.getTintFromFloats);\r\n\r\n        camera.dirty = false;\r\n\r\n        this.popScissor();\r\n\r\n        if (camera.renderToTexture)\r\n        {\r\n            TextureTintPipeline.flush();\r\n\r\n            this.setFramebuffer(null);\r\n\r\n            camera.emit(CameraEvents.POST_RENDER, camera);\r\n\r\n            TextureTintPipeline.projOrtho(0, TextureTintPipeline.width, TextureTintPipeline.height, 0, -1000.0, 1000.0);\r\n\r\n            var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n            var pipeline = (camera.pipeline) ? camera.pipeline : TextureTintPipeline;\r\n\r\n            pipeline.batchTexture(\r\n                camera,\r\n                camera.glTexture,\r\n                camera.width, camera.height,\r\n                camera.x, camera.y,\r\n                camera.width, camera.height,\r\n                camera.zoom, camera.zoom,\r\n                camera.rotation,\r\n                camera.flipX, !camera.flipY,\r\n                1, 1,\r\n                0, 0,\r\n                0, 0, camera.width, camera.height,\r\n                getTint(camera._tintTL, camera._alphaTL),\r\n                getTint(camera._tintTR, camera._alphaTR),\r\n                getTint(camera._tintBL, camera._alphaBL),\r\n                getTint(camera._tintBR, camera._alphaBR),\r\n                (camera._isTinted && camera.tintFill),\r\n                0, 0,\r\n                this.defaultCamera,\r\n                null\r\n            );\r\n\r\n            //  Force clear the current texture so that items next in the batch (like Graphics) don't try and use it\r\n            this.setBlankTexture(true);\r\n        }\r\n\r\n        if (camera.mask)\r\n        {\r\n            this.currentCameraMask.mask = null;\r\n\r\n            camera.mask.postRenderWebGL(this, camera._maskCamera);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Clears the current vertex buffer and updates pipelines.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#preRender\r\n     * @since 3.0.0\r\n     */\r\n    preRender: function ()\r\n    {\r\n        if (this.contextLost) { return; }\r\n\r\n        var gl = this.gl;\r\n        var pipelines = this.pipelines;\r\n\r\n        //  Make sure we are bound to the main frame buffer\r\n        gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n        if (this.config.clearBeforeRender)\r\n        {\r\n            var clearColor = this.config.backgroundColor;\r\n\r\n            gl.clearColor(clearColor.redGL, clearColor.greenGL, clearColor.blueGL, clearColor.alphaGL);\r\n\r\n            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\r\n        }\r\n\r\n        gl.enable(gl.SCISSOR_TEST);\r\n\r\n        for (var key in pipelines)\r\n        {\r\n            pipelines[key].onPreRender();\r\n        }\r\n\r\n        //  TODO - Find a way to stop needing to create these arrays every frame\r\n        //  and equally not need a huge array buffer created to hold them\r\n\r\n        this.currentScissor = [ 0, 0, this.width, this.height ];\r\n        this.scissorStack = [ this.currentScissor ];\r\n\r\n        if (this.game.scene.customViewports)\r\n        {\r\n            gl.scissor(0, (this.drawingBufferHeight - this.height), this.width, this.height);\r\n        }\r\n\r\n        this.currentMask.mask = null;\r\n        this.currentCameraMask.mask = null;\r\n        this.maskStack.length = 0;\r\n\r\n        this.setPipeline(this.pipelines.TextureTintPipeline);\r\n    },\r\n\r\n    /**\r\n     * The core render step for a Scene Camera.\r\n     * \r\n     * Iterates through the given Game Object's array and renders them with the given Camera.\r\n     * \r\n     * This is called by the `CameraManager.render` method. The Camera Manager instance belongs to a Scene, and is invoked\r\n     * by the Scene Systems.render method.\r\n     * \r\n     * This method is not called if `Camera.visible` is `false`, or `Camera.alpha` is zero.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#render\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene to render.\r\n     * @param {Phaser.GameObjects.GameObject} children - The Game Object's within the Scene to be rendered.\r\n     * @param {number} interpolationPercentage - The interpolation percentage to apply. Currently un-used.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Scene Camera to render with.\r\n     */\r\n    render: function (scene, children, interpolationPercentage, camera)\r\n    {\r\n        if (this.contextLost) { return; }\r\n\r\n        var list = children.list;\r\n        var childCount = list.length;\r\n        var pipelines = this.pipelines;\r\n\r\n        for (var key in pipelines)\r\n        {\r\n            pipelines[key].onRender(scene, camera);\r\n        }\r\n\r\n        //   Apply scissor for cam region + render background color, if not transparent\r\n        this.preRenderCamera(camera);\r\n\r\n        //  Nothing to render, so bail out\r\n        if (childCount === 0)\r\n        {\r\n            this.setBlendMode(CONST.BlendModes.NORMAL);\r\n\r\n            //  Applies camera effects and pops the scissor, if set\r\n            this.postRenderCamera(camera);\r\n\r\n            return;\r\n        }\r\n\r\n        //  Reset the current type\r\n        this.currentType = '';\r\n            \r\n        var current = this.currentMask;\r\n\r\n        for (var i = 0; i < childCount; i++)\r\n        {\r\n            var child = list[i];\r\n\r\n            if (!child.willRender(camera))\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (child.blendMode !== this.currentBlendMode)\r\n            {\r\n                this.setBlendMode(child.blendMode);\r\n            }\r\n\r\n            var mask = child.mask;\r\n\r\n            current = this.currentMask;\r\n\r\n            if (current.mask && current.mask !== mask)\r\n            {\r\n                //  Render out the previously set mask\r\n                current.mask.postRenderWebGL(this, current.camera);\r\n            }\r\n\r\n            if (mask && current.mask !== mask)\r\n            {\r\n                mask.preRenderWebGL(this, child, camera);\r\n            }\r\n\r\n            var type = child.type;\r\n\r\n            if (type !== this.currentType)\r\n            {\r\n                this.newType = true;\r\n                this.currentType = type;\r\n            }\r\n\r\n            this.nextTypeMatch = (i < childCount - 1) ? (list[i + 1].type === this.currentType) : false;\r\n\r\n            child.renderWebGL(this, child, interpolationPercentage, camera);\r\n\r\n            this.newType = false;\r\n        }\r\n\r\n        current = this.currentMask;\r\n\r\n        if (current.mask)\r\n        {\r\n            //  Render out the previously set mask, if it was the last item in the display list\r\n            current.mask.postRenderWebGL(this, current.camera);\r\n        }\r\n\r\n        this.setBlendMode(CONST.BlendModes.NORMAL);\r\n\r\n        //  Applies camera effects and pops the scissor, if set\r\n        this.postRenderCamera(camera);\r\n    },\r\n\r\n    /**\r\n     * The post-render step happens after all Cameras in all Scenes have been rendered.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#postRender\r\n     * @since 3.0.0\r\n     */\r\n    postRender: function ()\r\n    {\r\n        if (this.contextLost) { return; }\r\n\r\n        this.flush();\r\n\r\n        // Unbind custom framebuffer here\r\n\r\n        var state = this.snapshotState;\r\n\r\n        if (state.callback)\r\n        {\r\n            WebGLSnapshot(this.canvas, state);\r\n\r\n            state.callback = null;\r\n        }\r\n\r\n        var pipelines = this.pipelines;\r\n\r\n        for (var key in pipelines)\r\n        {\r\n            pipelines[key].onPostRender();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the entire game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture a specific area see the `snapshotArea` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotPixel`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n     * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n     * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n     * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#snapshot\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshot: function (callback, type, encoderOptions)\r\n    {\r\n        return this.snapshotArea(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight, callback, type, encoderOptions);\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the given area of the game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture the whole game viewport see the `snapshot` method. To capture a specific pixel, see `snapshotPixel`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotPixel`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n     * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n     * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n     * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#snapshotArea\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} x - The x coordinate to grab from.\r\n     * @param {integer} y - The y coordinate to grab from.\r\n     * @param {integer} width - The width of the area to grab.\r\n     * @param {integer} height - The height of the area to grab.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshotArea: function (x, y, width, height, callback, type, encoderOptions)\r\n    {\r\n        var state = this.snapshotState;\r\n\r\n        state.callback = callback;\r\n        state.type = type;\r\n        state.encoder = encoderOptions;\r\n        state.getPixel = false;\r\n        state.x = x;\r\n        state.y = y;\r\n        state.width = Math.min(width, this.gl.drawingBufferWidth);\r\n        state.height = Math.min(height, this.gl.drawingBufferHeight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Schedules a snapshot of the given pixel from the game viewport to be taken after the current frame is rendered.\r\n     * \r\n     * To capture the whole game viewport see the `snapshot` method. To capture a specific area, see `snapshotArea`.\r\n     * \r\n     * Only one snapshot can be active _per frame_. If you have already called `snapshotArea`, for example, then\r\n     * calling this method will override it.\r\n     * \r\n     * Unlike the other two snapshot methods, this one will return a `Color` object containing the color data for\r\n     * the requested pixel. It doesn't need to create an internal Canvas or Image object, so is a lot faster to execute,\r\n     * using less memory.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#snapshotPixel\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} x - The x coordinate of the pixel to get.\r\n     * @param {integer} y - The y coordinate of the pixel to get.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot pixel data is extracted.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshotPixel: function (x, y, callback)\r\n    {\r\n        this.snapshotArea(x, y, 1, 1, callback);\r\n\r\n        this.snapshotState.getPixel = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a snapshot of the given area of the given frame buffer.\r\n     * \r\n     * Unlike the other snapshot methods, this one is processed immediately and doesn't wait for the next render.\r\n     * \r\n     * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n     * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n     * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n     * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#snapshotFramebuffer\r\n     * @since 3.19.0\r\n     *\r\n     * @param {WebGLFramebuffer} framebuffer - The framebuffer to grab from.\r\n     * @param {integer} bufferWidth - The width of the framebuffer.\r\n     * @param {integer} bufferHeight - The height of the framebuffer.\r\n     * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n     * @param {boolean} [getPixel=false] - Grab a single pixel as a Color object, or an area as an Image object?\r\n     * @param {integer} [x=0] - The x coordinate to grab from.\r\n     * @param {integer} [y=0] - The y coordinate to grab from.\r\n     * @param {integer} [width=bufferWidth] - The width of the area to grab.\r\n     * @param {integer} [height=bufferHeight] - The height of the area to grab.\r\n     * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n     * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n     *\r\n     * @return {this} This WebGL Renderer.\r\n     */\r\n    snapshotFramebuffer: function (framebuffer, bufferWidth, bufferHeight, callback, getPixel, x, y, width, height, type, encoderOptions)\r\n    {\r\n        if (getPixel === undefined) { getPixel = false; }\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = bufferWidth; }\r\n        if (height === undefined) { height = bufferHeight; }\r\n\r\n        var currentFramebuffer = this.currentFramebuffer;\r\n\r\n        this.snapshotArea(x, y, width, height, callback, type, encoderOptions);\r\n\r\n        var state = this.snapshotState;\r\n\r\n        state.getPixel = getPixel;\r\n\r\n        state.isFramebuffer = true;\r\n        state.bufferWidth = bufferWidth;\r\n        state.bufferHeight = bufferHeight;\r\n\r\n        this.setFramebuffer(framebuffer);\r\n\r\n        WebGLSnapshot(this.canvas, state);\r\n\r\n        this.setFramebuffer(currentFramebuffer);\r\n\r\n        state.callback = null;\r\n        state.isFramebuffer = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a new WebGL Texture based on the given Canvas Element.\r\n     * \r\n     * If the `dstTexture` parameter is given, the WebGL Texture is updated, rather than created fresh.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#canvasToTexture\r\n     * @since 3.0.0\r\n     * \r\n     * @param {HTMLCanvasElement} srcCanvas - The Canvas to create the WebGL Texture from\r\n     * @param {WebGLTexture} [dstTexture] - The destination WebGL Texture to set.\r\n     * @param {boolean} [noRepeat=false] - Should this canvas be allowed to set `REPEAT` (such as for Text objects?)\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y`?\r\n     * \r\n     * @return {WebGLTexture} The newly created, or updated, WebGL Texture.\r\n     */\r\n    canvasToTexture: function (srcCanvas, dstTexture, noRepeat, flipY)\r\n    {\r\n        if (noRepeat === undefined) { noRepeat = false; }\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        if (!dstTexture)\r\n        {\r\n            return this.createCanvasTexture(srcCanvas, noRepeat, flipY);\r\n        }\r\n        else\r\n        {\r\n            return this.updateCanvasTexture(srcCanvas, dstTexture, flipY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a new WebGL Texture based on the given Canvas Element.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createCanvasTexture\r\n     * @since 3.20.0\r\n     * \r\n     * @param {HTMLCanvasElement} srcCanvas - The Canvas to create the WebGL Texture from\r\n     * @param {boolean} [noRepeat=false] - Should this canvas be allowed to set `REPEAT` (such as for Text objects?)\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y`?\r\n     * \r\n     * @return {WebGLTexture} The newly created WebGL Texture.\r\n     */\r\n    createCanvasTexture: function (srcCanvas, noRepeat, flipY)\r\n    {\r\n        if (noRepeat === undefined) { noRepeat = false; }\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var gl = this.gl;\r\n        var minFilter = gl.NEAREST;\r\n        var magFilter = gl.NEAREST;\r\n\r\n        var width = srcCanvas.width;\r\n        var height = srcCanvas.height;\r\n\r\n        var wrapping = gl.CLAMP_TO_EDGE;\r\n\r\n        var pow = IsSizePowerOfTwo(width, height);\r\n\r\n        if (!noRepeat && pow)\r\n        {\r\n            wrapping = gl.REPEAT;\r\n        }\r\n\r\n        if (this.config.antialias)\r\n        {\r\n            minFilter = (pow) ? this.mipmapFilter : gl.LINEAR;\r\n            magFilter = gl.LINEAR;\r\n        }\r\n\r\n        return this.createTexture2D(0, minFilter, magFilter, wrapping, wrapping, gl.RGBA, srcCanvas, width, height, true, false, flipY);\r\n    },\r\n\r\n    /**\r\n     * Updates a WebGL Texture based on the given Canvas Element.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#updateCanvasTexture\r\n     * @since 3.20.0\r\n     * \r\n     * @param {HTMLCanvasElement} srcCanvas - The Canvas to update the WebGL Texture from.\r\n     * @param {WebGLTexture} dstTexture - The destination WebGL Texture to update.\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y`?\r\n     * \r\n     * @return {WebGLTexture} The updated WebGL Texture.\r\n     */\r\n    updateCanvasTexture: function (srcCanvas, dstTexture, flipY)\r\n    {\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var gl = this.gl;\r\n\r\n        var width = srcCanvas.width;\r\n        var height = srcCanvas.height;\r\n\r\n        if (width > 0 && height > 0)\r\n        {\r\n            this.setTexture2D(dstTexture, 0);\r\n\r\n            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\r\n\r\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, srcCanvas);\r\n    \r\n            dstTexture.width = width;\r\n            dstTexture.height = height;\r\n    \r\n            this.setTexture2D(null, 0);\r\n        }\r\n\r\n        return dstTexture;\r\n    },\r\n\r\n    /**\r\n     * Creates a new WebGL Texture based on the given HTML Video Element.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#createVideoTexture\r\n     * @since 3.20.0\r\n     * \r\n     * @param {HTMLVideoElement} srcVideo - The Video to create the WebGL Texture from\r\n     * @param {boolean} [noRepeat=false] - Should this canvas be allowed to set `REPEAT`?\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y`?\r\n     * \r\n     * @return {WebGLTexture} The newly created WebGL Texture.\r\n     */\r\n    createVideoTexture: function (srcVideo, noRepeat, flipY)\r\n    {\r\n        if (noRepeat === undefined) { noRepeat = false; }\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var gl = this.gl;\r\n        var minFilter = gl.NEAREST;\r\n        var magFilter = gl.NEAREST;\r\n\r\n        var width = srcVideo.videoWidth;\r\n        var height = srcVideo.videoHeight;\r\n\r\n        var wrapping = gl.CLAMP_TO_EDGE;\r\n\r\n        var pow = IsSizePowerOfTwo(width, height);\r\n\r\n        if (!noRepeat && pow)\r\n        {\r\n            wrapping = gl.REPEAT;\r\n        }\r\n\r\n        if (this.config.antialias)\r\n        {\r\n            minFilter = (pow) ? this.mipmapFilter : gl.LINEAR;\r\n            magFilter = gl.LINEAR;\r\n        }\r\n\r\n        return this.createTexture2D(0, minFilter, magFilter, wrapping, wrapping, gl.RGBA, srcVideo, width, height, true, true, flipY);\r\n    },\r\n\r\n    /**\r\n     * Updates a WebGL Texture based on the given HTML Video Element.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#updateVideoTexture\r\n     * @since 3.20.0\r\n     * \r\n     * @param {HTMLVideoElement} srcVideo - The Video to update the WebGL Texture with.\r\n     * @param {WebGLTexture} dstTexture - The destination WebGL Texture to update.\r\n     * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y`?\r\n     * \r\n     * @return {WebGLTexture} The updated WebGL Texture.\r\n     */\r\n    updateVideoTexture: function (srcVideo, dstTexture, flipY)\r\n    {\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var gl = this.gl;\r\n\r\n        var width = srcVideo.videoWidth;\r\n        var height = srcVideo.videoHeight;\r\n\r\n        if (width > 0 && height > 0)\r\n        {\r\n            this.setTexture2D(dstTexture, 0);\r\n\r\n            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\r\n\r\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, srcVideo);\r\n\r\n            dstTexture.width = width;\r\n            dstTexture.height = height;\r\n\r\n            this.setTexture2D(null, 0);\r\n        }\r\n\r\n        return dstTexture;\r\n    },\r\n\r\n    /**\r\n     * Sets the minification and magnification filter for a texture.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setTextureFilter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} texture - The texture to set the filter for.\r\n     * @param {integer} filter - The filter to set. 0 for linear filtering, 1 for nearest neighbor (blocky) filtering.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setTextureFilter: function (texture, filter)\r\n    {\r\n        var gl = this.gl;\r\n        var glFilter = [ gl.LINEAR, gl.NEAREST ][filter];\r\n\r\n        this.setTexture2D(texture, 0);\r\n\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glFilter);\r\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glFilter);\r\n\r\n        this.setTexture2D(null, 0);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat1\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - [description]\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat1: function (program, name, x)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform1f(this.gl.getUniformLocation(program, name), x);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat2\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat2: function (program, name, x, y)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform2f(this.gl.getUniformLocation(program, name), x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - [description]\r\n     * @param {number} y - [description]\r\n     * @param {number} z - [description]\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat3: function (program, name, x, y, z)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform3f(this.gl.getUniformLocation(program, name), x, y, z);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets uniform of a WebGLProgram\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {number} x - X component\r\n     * @param {number} y - Y component\r\n     * @param {number} z - Z component\r\n     * @param {number} w - W component\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat4: function (program, name, x, y, z, w)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform4f(this.gl.getUniformLocation(program, name), x, y, z, w);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat1v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat1v: function (program, name, arr)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform1fv(this.gl.getUniformLocation(program, name), arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat2v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat2v: function (program, name, arr)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform2fv(this.gl.getUniformLocation(program, name), arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat3v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setFloat3v: function (program, name, arr)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform3fv(this.gl.getUniformLocation(program, name), arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setFloat4v\r\n     * @since 3.13.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {Float32Array} arr - The new value to be used for the uniform variable.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n\r\n    setFloat4v: function (program, name, arr)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform4fv(this.gl.getUniformLocation(program, name), arr);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setInt1\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - [description]\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setInt1: function (program, name, x)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform1i(this.gl.getUniformLocation(program, name), x);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setInt2\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - The new X component\r\n     * @param {integer} y - The new Y component\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setInt2: function (program, name, x, y)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform2i(this.gl.getUniformLocation(program, name), x, y);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setInt3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - The new X component\r\n     * @param {integer} y - The new Y component\r\n     * @param {integer} z - The new Z component\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setInt3: function (program, name, x, y, z)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform3i(this.gl.getUniformLocation(program, name), x, y, z);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setInt4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {integer} x - X component\r\n     * @param {integer} y - Y component\r\n     * @param {integer} z - Z component\r\n     * @param {integer} w - W component\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setInt4: function (program, name, x, y, z, w)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniform4i(this.gl.getUniformLocation(program, name), x, y, z, w);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the value of a 2x2 matrix uniform variable in the given WebGLProgram.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setMatrix2\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - The value indicating whether to transpose the matrix. Must be false.\r\n     * @param {Float32Array} matrix - The new matrix value.\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setMatrix2: function (program, name, transpose, matrix)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniformMatrix2fv(this.gl.getUniformLocation(program, name), transpose, matrix);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setMatrix3\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - [description]\r\n     * @param {Float32Array} matrix - [description]\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setMatrix3: function (program, name, transpose, matrix)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniformMatrix3fv(this.gl.getUniformLocation(program, name), transpose, matrix);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets uniform of a WebGLProgram\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#setMatrix4\r\n     * @since 3.0.0\r\n     *\r\n     * @param {WebGLProgram} program - The target WebGLProgram from which the uniform location will be looked-up.\r\n     * @param {string} name - The name of the uniform to look-up and modify.\r\n     * @param {boolean} transpose - Is the matrix transposed\r\n     * @param {Float32Array} matrix - Matrix data\r\n     *\r\n     * @return {this} This WebGL Renderer instance.\r\n     */\r\n    setMatrix4: function (program, name, transpose, matrix)\r\n    {\r\n        this.setProgram(program);\r\n\r\n        this.gl.uniformMatrix4fv(this.gl.getUniformLocation(program, name), transpose, matrix);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the maximum number of texture units that can be used in a fragment shader.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#getMaxTextures\r\n     * @since 3.8.0\r\n     *\r\n     * @return {integer} The maximum number of textures WebGL supports.\r\n     */\r\n    getMaxTextures: function ()\r\n    {\r\n        return this.config.maxTextures;\r\n    },\r\n\r\n    /**\r\n     * Returns the largest texture size (either width or height) that can be created.\r\n     * Note that VRAM may not allow a texture of any given size, it just expresses\r\n     * hardware / driver support for a given size.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#getMaxTextureSize\r\n     * @since 3.8.0\r\n     *\r\n     * @return {integer} The maximum supported texture size.\r\n     */\r\n    getMaxTextureSize: function ()\r\n    {\r\n        return this.config.maxTextureSize;\r\n    },\r\n\r\n    /**\r\n     * Destroy this WebGLRenderer, cleaning up all related resources such as pipelines, native textures, etc.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.WebGLRenderer#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        //  Clear-up anything that should be cleared :)\r\n\r\n        for (var i = 0; i < this.nativeTextures.length; i++)\r\n        {\r\n            this.gl.deleteTexture(this.nativeTextures[i]);\r\n        }\r\n\r\n        this.nativeTextures = [];\r\n\r\n        for (var key in this.pipelines)\r\n        {\r\n            this.pipelines[key].destroy();\r\n\r\n            delete this.pipelines[key];\r\n        }\r\n\r\n        this.defaultCamera.destroy();\r\n\r\n        this.currentMask = null;\r\n        this.currentCameraMask = null;\r\n\r\n        this.canvas.removeEventListener('webglcontextlost', this.contextLostHandler, false);\r\n        this.canvas.removeEventListener('webglcontextrestored', this.contextRestoredHandler, false);\r\n\r\n        this.game = null;\r\n        this.gl = null;\r\n        this.canvas = null;\r\n\r\n        this.maskStack = [];\r\n\r\n        this.contextLost = true;\r\n\r\n        this.extensions = {};\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = WebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9XZWJHTFJlbmRlcmVyLmpzPzQ2MDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3RELG1CQUFtQixtQkFBTyxDQUFDLHFGQUF5QjtBQUNwRCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyx5RUFBbUI7QUFDNUMsdUJBQXVCLG1CQUFPLENBQUMsaUdBQWtDO0FBQ2pFLFdBQVcsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsMkVBQW9CO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLHVGQUE2QjtBQUNyRCxvQkFBb0IsbUJBQU8sQ0FBQyxpRkFBdUI7QUFDbkQsc0JBQXNCLG1CQUFPLENBQUMseUhBQThDO0FBQzVFLFlBQVksbUJBQU8sQ0FBQyxrRUFBUztBQUM3QixvQkFBb0IsbUJBQU8sQ0FBQywrRkFBMkI7O0FBRXZEO0FBQ0EseUJBQXlCLG1CQUFPLENBQUMsZ0hBQWdDO0FBQ2pFLGtDQUFrQyxtQkFBTyxDQUFDLGtJQUF5QztBQUNuRiwwQkFBMEIsbUJBQU8sQ0FBQyxrSEFBaUM7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0dBQXdHLG9CQUFvQjtBQUM1SDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0NBQXdDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQSxrQ0FBa0Msa0VBQWtFO0FBQ3BHOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHFEQUFxRDtBQUN4RSxtQkFBbUIscURBQXFEO0FBQ3hFLG1CQUFtQixxREFBcUQ7O0FBRXhFLG1CQUFtQixnQ0FBZ0M7QUFDbkQsb0JBQW9CLGlDQUFpQztBQUNyRCxtQkFBbUIsZ0NBQWdDO0FBQ25ELG9CQUFvQixpQ0FBaUM7O0FBRXJELG1CQUFtQixnQ0FBZ0M7QUFDbkQsb0JBQW9CLGlDQUFpQztBQUNyRCxtQkFBbUIsZ0NBQWdDO0FBQ25ELG9CQUFvQixpQ0FBaUM7O0FBRXJELG1CQUFtQixnQ0FBZ0M7QUFDbkQsb0JBQW9CLGlDQUFpQztBQUNyRCxtQkFBbUIsZ0NBQWdDO0FBQ25ELG9CQUFvQixpQ0FBaUM7O0FBRXJELG1CQUFtQixnQ0FBZ0M7QUFDbkQsb0JBQW9CLGlDQUFpQztBQUNyRCxtQkFBbUIsZ0NBQWdDO0FBQ25ELG9CQUFvQjs7QUFFcEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixxQ0FBcUM7QUFDaEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUVBQXlFLDZCQUE2QjtBQUN0Ryx1RUFBdUUsNkJBQTZCO0FBQ3BHLHFFQUFxRSwwREFBMEQ7O0FBRS9IOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxhQUFhOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9DQUFvQztBQUNuRDtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxnREFBZ0Q7O0FBRWhHOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxnREFBZ0Q7O0FBRWhHOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0NBQW9DO0FBQ25ELGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVMsMEpBQTBKLHdDQUF3QztBQUMxTixlQUFlLE9BQU8sK0lBQStJLDRDQUE0QztBQUNqTjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxpQ0FBaUM7O0FBRTNFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHVCQUF1Qjs7QUFFakU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0I7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7QUFDekQsa0NBQWtDLGVBQWU7O0FBRWpEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxhQUFhO0FBQzVCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0IsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTs7QUFFdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixRQUFROztBQUV2Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsZ0RBQWdEO0FBQy9ELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsZ0RBQWdEO0FBQy9EO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCO0FBQ3ZELDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxxQkFBcUI7QUFDdkQsbUNBQW1DLHVCQUF1Qjs7QUFFMUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxrQkFBa0I7QUFDdkQsa0NBQWtDLGVBQWU7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCO0FBQ3ZELGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGVBQWU7O0FBRWpEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxrQkFBa0I7QUFDdkQsa0NBQWtDLGVBQWU7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQ0FBZ0M7QUFDdkQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJhc2VDYW1lcmEgPSByZXF1aXJlKCcuLi8uLi9jYW1lcmFzLzJkL0Jhc2VDYW1lcmEnKTtcclxudmFyIENhbWVyYUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL2NhbWVyYXMvMmQvZXZlbnRzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vY29yZS9ldmVudHMnKTtcclxudmFyIElzU2l6ZVBvd2VyT2ZUd28gPSByZXF1aXJlKCcuLi8uLi9tYXRoL3BvdzIvSXNTaXplUG93ZXJPZlR3bycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFNjYWxlRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vc2NhbGUvZXZlbnRzJyk7XHJcbnZhciBTcGxpY2VPbmUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheS9TcGxpY2VPbmUnKTtcclxudmFyIFRleHR1cmVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi90ZXh0dXJlcy9ldmVudHMnKTtcclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vVXRpbHMnKTtcclxudmFyIFdlYkdMU25hcHNob3QgPSByZXF1aXJlKCcuLi9zbmFwc2hvdC9XZWJHTFNuYXBzaG90Jyk7XHJcblxyXG4vLyAgRGVmYXVsdCBQaXBlbGluZXNcclxudmFyIEJpdG1hcE1hc2tQaXBlbGluZSA9IHJlcXVpcmUoJy4vcGlwZWxpbmVzL0JpdG1hcE1hc2tQaXBlbGluZScpO1xyXG52YXIgRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lID0gcmVxdWlyZSgnLi9waXBlbGluZXMvRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lJyk7XHJcbnZhciBUZXh0dXJlVGludFBpcGVsaW5lID0gcmVxdWlyZSgnLi9waXBlbGluZXMvVGV4dHVyZVRpbnRQaXBlbGluZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBXZWJHTENvbnRleHRDYWxsYmFja1xyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIFRoZSBXZWJHTCBSZW5kZXJlciB3aGljaCBvd25zIHRoZSBjb250ZXh0LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFdlYkdMUmVuZGVyZXIgaXMgYSBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRoZVxyXG4gKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQgc3RhdGUgY2xlYW4uIFRoZSBtYWluIGlkZWEgb2YgdGhlIFdlYkdMUmVuZGVyZXIgaXMgdG8ga2VlcCB0cmFjayBvZlxyXG4gKiBhbnkgY29udGV4dCBjaGFuZ2UgdGhhdCBoYXBwZW5zIGZvciBXZWJHTCByZW5kZXJpbmcgaW5zaWRlIG9mIFBoYXNlci4gVGhpcyBtZWFuc1xyXG4gKiBpZiByYXcgd2ViZ2wgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb3V0c2lkZSB0aGUgV2ViR0xSZW5kZXJlciBvZiB0aGUgUGhhc2VyIFdlYkdMXHJcbiAqIHJlbmRlcmluZyBlY29zeXN0ZW0gdGhleSBtaWdodCBwb2xsdXRlIHRoZSBjdXJyZW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dCBzdGF0ZSBwcm9kdWNpbmdcclxuICogdW5leHBlY3RlZCBiZWhhdmlvci4gSXQncyByZWNvbW1lbmRlZCB0aGF0IFdlYkdMIGludGVyYWN0aW9uIGlzIGRvbmUgdGhyb3VnaFxyXG4gKiBXZWJHTFJlbmRlcmVyIGFuZC9vciBXZWJHTFBpcGVsaW5lLlxyXG4gKlxyXG4gKiBAY2xhc3MgV2ViR0xSZW5kZXJlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIFRoZSBHYW1lIGluc3RhbmNlIHdoaWNoIG93bnMgdGhpcyBXZWJHTCBSZW5kZXJlci5cclxuICovXHJcbnZhciBXZWJHTFJlbmRlcmVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIgKGdhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdhbWVDb25maWcgPSBnYW1lLmNvbmZpZztcclxuXHJcbiAgICAgICAgdmFyIGNvbnRleHRDcmVhdGlvbkNvbmZpZyA9IHtcclxuICAgICAgICAgICAgYWxwaGE6IGdhbWVDb25maWcudHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICAgIGRlc3luY2hyb25pemVkOiBnYW1lQ29uZmlnLmRlc3luY2hyb25pemVkLFxyXG4gICAgICAgICAgICBkZXB0aDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFudGlhbGlhczogZ2FtZUNvbmZpZy5hbnRpYWxpYXNHTCxcclxuICAgICAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiBnYW1lQ29uZmlnLnByZW11bHRpcGxpZWRBbHBoYSxcclxuICAgICAgICAgICAgc3RlbmNpbDogdHJ1ZSxcclxuICAgICAgICAgICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogZ2FtZUNvbmZpZy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LFxyXG4gICAgICAgICAgICBwb3dlclByZWZlcmVuY2U6IGdhbWVDb25maWcucG93ZXJQcmVmZXJlbmNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGxvY2FsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb2YgdGhpcyBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NvbmZpZ1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiBnYW1lQ29uZmlnLmNsZWFyQmVmb3JlUmVuZGVyLFxyXG4gICAgICAgICAgICBhbnRpYWxpYXM6IGdhbWVDb25maWcuYW50aWFsaWFzLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGdhbWVDb25maWcuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICBjb250ZXh0Q3JlYXRpb246IGNvbnRleHRDcmVhdGlvbkNvbmZpZyxcclxuICAgICAgICAgICAgcmVzb2x1dGlvbjogZ2FtZUNvbmZpZy5yZXNvbHV0aW9uLFxyXG4gICAgICAgICAgICByb3VuZFBpeGVsczogZ2FtZUNvbmZpZy5yb3VuZFBpeGVscyxcclxuICAgICAgICAgICAgbWF4VGV4dHVyZXM6IGdhbWVDb25maWcubWF4VGV4dHVyZXMsXHJcbiAgICAgICAgICAgIG1heFRleHR1cmVTaXplOiBnYW1lQ29uZmlnLm1heFRleHR1cmVTaXplLFxyXG4gICAgICAgICAgICBiYXRjaFNpemU6IGdhbWVDb25maWcuYmF0Y2hTaXplLFxyXG4gICAgICAgICAgICBtYXhMaWdodHM6IGdhbWVDb25maWcubWF4TGlnaHRzLFxyXG4gICAgICAgICAgICBtaXBtYXBGaWx0ZXI6IGdhbWVDb25maWcubWlwbWFwRmlsdGVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEdhbWUgaW5zdGFuY2Ugd2hpY2ggb3ducyB0aGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNvbnN0YW50IHdoaWNoIGFsbG93cyB0aGUgcmVuZGVyZXIgdG8gYmUgZWFzaWx5IGlkZW50aWZpZWQgYXMgYSBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBDT05TVC5XRUJHTDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYmVpbmcgcmVuZGVyZWQgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyBwb3B1bGF0ZWQgaW4gdGhlIG9uUmVzaXplIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYmVpbmcgcmVuZGVyZWQgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyBwb3B1bGF0ZWQgaW4gdGhlIG9uUmVzaXplIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYW52YXMgd2hpY2ggdGhpcyBXZWJHTCBSZW5kZXJlciBkcmF3cyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGdhbWUuY2FudmFzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgYXJyYXkgaW5jbHVkZXMgdGhlIGRlZmF1bHQgYmxlbmQgbW9kZXMgYXMgd2VsbCBhcyBhbnkgY3VzdG9tIGJsZW5kIG1vZGVzIGFkZGVkIHRocm91Z2gge0BsaW5rICNhZGRCbGVuZE1vZGV9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjYmxlbmRNb2Rlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxlbmRNb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBLZWVwcyB0cmFjayBvZiBhbnkgV2ViR0xUZXh0dXJlIGNyZWF0ZWQgd2l0aCB0aGUgY3VycmVudCBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI25hdGl2ZVRleHR1cmVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYXRpdmVUZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAgaWYgdGhlIFdlYkdMIGNvbnRleHQgb2YgdGhlIHJlbmRlcmVyIGlzIGxvc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjb250ZXh0TG9zdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0TG9zdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG9iamVjdCB3aWxsIHN0b3JlIGFsbCBwaXBlbGluZXMgY3JlYXRlZCB0aHJvdWdoIGFkZFBpcGVsaW5lXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNwaXBlbGluZXNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpcGVsaW5lcyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldGFpbHMgYWJvdXQgdGhlIGN1cnJlbnRseSBzY2hlZHVsZWQgc25hcHNob3QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgYSBub24tbnVsbCBgY2FsbGJhY2tgIGlzIHNldCBpbiB0aGlzIG9iamVjdCwgYSBzbmFwc2hvdCBvZiB0aGUgY2FudmFzIHdpbGwgYmUgdGFrZW4gYWZ0ZXIgdGhlIGN1cnJlbnQgZnJhbWUgaXMgZnVsbHkgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzbmFwc2hvdFN0YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5SZW5kZXJlci5TbmFwc2hvdC5TbmFwc2hvdFN0YXRlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc25hcHNob3RTdGF0ZSA9IHtcclxuICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgIGhlaWdodDogMSxcclxuICAgICAgICAgICAgZ2V0UGl4ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXHJcbiAgICAgICAgICAgIGVuY29kZXI6IDAuOTIsXHJcbiAgICAgICAgICAgIGlzRnJhbWVidWZmZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBidWZmZXJXaWR0aDogMCxcclxuICAgICAgICAgICAgYnVmZmVySGVpZ2h0OiAwXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gSW50ZXJuYWwgUmVuZGVyZXIgU3RhdGUgKFRleHR1cmVzLCBGcmFtZWJ1ZmZlcnMsIFBpcGVsaW5lcywgQnVmZmVycywgZXRjKVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWNoZWQgdmFsdWUgZm9yIHRoZSBsYXN0IHRleHR1cmUgdW5pdCB0aGF0IHdhcyB1c2VkXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjdXJyZW50QWN0aXZlVGV4dHVyZVVuaXRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUZXh0dXJlVW5pdCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIHRoZSBsYXN0IHRleHR1cmUgaGFuZGxlcyB0aGF0IHdlcmUgYm91bmQgdG8gdGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY3VycmVudFRleHR1cmVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmVzID0gbmV3IEFycmF5KDE2KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ3VycmVudCBmcmFtZWJ1ZmZlciBpbiB1c2VcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRGcmFtZWJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTEZyYW1lYnVmZmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1cnJlbnQgV2ViR0xQaXBlbGluZSBpbiB1c2VcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRQaXBlbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGlwZWxpbmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXJyZW50IFdlYkdMUHJvZ3JhbSBpbiB1c2VcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRQcm9ncmFtXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUHJvZ3JhbX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1cnJlbnQgV2ViR0xCdWZmZXIgKFZlcnRleCBidWZmZXIpIGluIHVzZVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY3VycmVudFZlcnRleEJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTEJ1ZmZlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VmVydGV4QnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ3VycmVudCBXZWJHTEJ1ZmZlciAoSW5kZXggYnVmZmVyKSBpbiB1c2VcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRJbmRleEJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTEJ1ZmZlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXhCdWZmZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXJyZW50IGJsZW5kIG1vZGUgaW4gdXNlXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjdXJyZW50QmxlbmRNb2RlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gSW5maW5pdHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGhlIHNjaXNzb3Igc3RhdGUgaXMgZW5hYmxlZCBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRTY2lzc29yRW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2Npc3NvckVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RvcmVzIHRoZSBjdXJyZW50IHNjaXNzb3IgZGF0YVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY3VycmVudFNjaXNzb3JcclxuICAgICAgICAgKiBAdHlwZSB7VWludDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2Npc3NvciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YWNrIG9mIHNjaXNzb3IgZGF0YVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2Npc3NvclN0YWNrXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQzMkFycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2Npc3NvclN0YWNrID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoYW5kbGVyIHRvIGludm9rZSB3aGVuIHRoZSBjb250ZXh0IGlzIGxvc3QuXHJcbiAgICAgICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNoYW5nZWQgYW5kIGlzIHNldCBpbiB0aGUgYm9vdCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjb250ZXh0TG9zdEhhbmRsZXJcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dExvc3RIYW5kbGVyID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhhbmRsZXIgdG8gaW52b2tlIHdoZW4gdGhlIGNvbnRleHQgaXMgcmVzdG9yZWQuXHJcbiAgICAgICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNoYW5nZWQgYW5kIGlzIHNldCBpbiB0aGUgYm9vdCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjb250ZXh0UmVzdG9yZWRIYW5kbGVyXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHRSZXN0b3JlZEhhbmRsZXIgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdW5kZXJseWluZyBXZWJHTCBjb250ZXh0IG9mIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2dsXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpbmRpY2F0ZSB3aGljaCBXZWJHTCBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXJcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3N1cHBvcnRlZEV4dGVuc2lvbnNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFeHRlbnNpb25zIGxvYWRlZCBpbnRvIHRoZSBjdXJyZW50IGNvbnRleHRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2V4dGVuc2lvbnNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHt9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25zID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0b3JlcyB0aGUgY3VycmVudCBXZWJHTCBjb21wb25lbnQgZm9ybWF0cyBmb3IgZnVydGhlciB1c2VcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2dsRm9ybWF0c1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2xGb3JtYXRzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0b3JlcyB0aGUgc3VwcG9ydGVkIFdlYkdMIHRleHR1cmUgY29tcHJlc3Npb24gZm9ybWF0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NvbXByZXNzaW9uXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24gPSB7XHJcbiAgICAgICAgICAgIEVUQzE6IGZhbHNlLFxyXG4gICAgICAgICAgICBQVlJUQzogZmFsc2UsXHJcbiAgICAgICAgICAgIFMzVEM6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FjaGVkIGRyYXdpbmcgYnVmZmVyIGhlaWdodCB0byByZWR1Y2UgZ2wgY2FsbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNkcmF3aW5nQnVmZmVySGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmF3aW5nQnVmZmVySGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBibGFuayAzMngzMiB0cmFuc3BhcmVudCB0ZXh0dXJlLCBhcyB1c2VkIGJ5IHRoZSBHcmFwaGljcyBzeXN0ZW0gd2hlcmUgbmVlZGVkLlxyXG4gICAgICAgICAqIFRoaXMgaXMgc2V0IGluIHRoZSBgYm9vdGAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjYmxhbmtUZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGFua1RleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGRlZmF1bHQgQ2FtZXJhIHVzZWQgaW4gY2FsbHMgd2hlbiBubyBvdGhlciBjYW1lcmEgaGFzIGJlZW4gcHJvdmlkZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNkZWZhdWx0Q2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q2FtZXJhID0gbmV3IEJhc2VDYW1lcmEoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNfdGVtcE1hdHJpeDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgxID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjX3RlbXBNYXRyaXgyXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4MiA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCwgcmUtdXNlZCBpbnRlcm5hbGx5IGR1cmluZyBiYXRjaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI190ZW1wTWF0cml4M1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDMgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNfdGVtcE1hdHJpeDRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXg0ID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIG1hc2tzIGN1cnJlbnRseSBzdGFja2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjbWFza0NvdW50XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFza0NvdW50ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1hc2sgc3RhY2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNtYXNrU3RhY2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFza1N0YWNrID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHByb3BlcnR5IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50bHkgc2V0IG1hc2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjdXJyZW50TWFza1xyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1hc2sgPSB7IG1hc2s6IG51bGwsIGNhbWVyYTogbnVsbCB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0aGF0IHRyYWNrcyB0aGUgY3VycmVudGx5IHNldCBjYW1lcmEgbWFzay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2N1cnJlbnRDYW1lcmFNYXNrXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTWFzayA9IHsgbWFzazogbnVsbCwgY2FtZXJhOiBudWxsIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGdsIGZ1bmN0aW9uIG1hcHBpbmcgZm9yIHVuaWZvcm0gbG9vay11cC5cclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L3VuaWZvcm1cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNnbEZ1bmNNYXBcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsRnVuY01hcCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBgdHlwZWAgb2YgdGhlIEdhbWUgT2JqZWN0IGJlaW5nIGN1cnJlbnRseSByZW5kZXJlZC5cclxuICAgICAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGFkdmFuY2VkIHJlbmRlciBmdW5jdGlvbnMgZm9yIGJhdGNoaW5nIGxvb2stYWhlYWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY3VycmVudFR5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1cnJlbnRUeXBlID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoZSBgdHlwZWAgb2YgdGhlIEdhbWUgT2JqZWN0IGJlaW5nIGN1cnJlbnRseSByZW5kZXJlZCBkaWZmZXJlbnQgdGhhbiB0aGVcclxuICAgICAgICAgKiB0eXBlIG9mIHRoZSBvYmplY3QgYmVmb3JlIGl0IGluIHRoZSBkaXNwbGF5IGxpc3Q/IEkuZS4gaXQncyBhICduZXcnIHR5cGUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjbmV3VHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5ld1R5cGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRG9lcyB0aGUgYHR5cGVgIG9mIHRoZSBuZXh0IEdhbWUgT2JqZWN0IGluIHRoZSBkaXNwbGF5IGxpc3QgbWF0Y2ggdGhhdFxyXG4gICAgICAgICAqIG9mIHRoZSBvYmplY3QgYmVpbmcgY3VycmVudGx5IHJlbmRlcmVkP1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI25leHRUeXBlTWF0Y2hcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZXh0VHlwZU1hdGNoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtaXBtYXAgbWFnRmlsdGVyIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB0ZXh0dXJlcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBhcyBhIHN0cmluZyBpbiB0aGUgZ2FtZSBjb25maWcsIGkuZS46XHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogYHJlbmRlcmVyOiB7IG1pcG1hcEZpbHRlcjogJ05FQVJFU1RfTUlQTUFQX0xJTkVBUicgfWBcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgNiBvcHRpb25zIGZvciBXZWJHTDEgYXJlLCBpbiBvcmRlciBmcm9tIGxlYXN0IHRvIG1vc3QgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBORUFSRVNUIChmb3IgcGl4ZWwgYXJ0KVxyXG4gICAgICAgICAqIExJTkVBUiAodGhlIGRlZmF1bHQpXHJcbiAgICAgICAgICogTkVBUkVTVF9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAqIExJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAqIE5FQVJFU1RfTUlQTUFQX0xJTkVBUlxyXG4gICAgICAgICAqIExJTkVBUl9NSVBNQVBfTElORUFSXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogTWlwbWFwcyBvbmx5IHdvcmsgd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBmdWxseSBwb3dlci1vZi10d28gaW4gc2l6ZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSBodHRwczovL3dlYmdsZnVuZGFtZW50YWxzLm9yZy93ZWJnbC9sZXNzb25zL3dlYmdsLTNkLXRleHR1cmVzLmh0bWxcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNtaXBtYXBGaWx0ZXJcclxuICAgICAgICAgKiBAdHlwZSB7R0xlbnVtfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pcG1hcEZpbHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCh0aGlzLmNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgYW5kIGluaXRpYWxpemVzIGFsbCBpbnRlcm5hbCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2luaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSByZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdsO1xyXG4gICAgICAgIHZhciBnYW1lID0gdGhpcy5nYW1lO1xyXG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IGNvbmZpZy5iYWNrZ3JvdW5kQ29sb3I7XHJcblxyXG4gICAgICAgIC8vICBEaWQgdGhleSBwcm92aWRlIHRoZWlyIG93biBjb250ZXh0P1xyXG4gICAgICAgIGlmIChnYW1lLmNvbmZpZy5jb250ZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wgPSBnYW1lLmNvbmZpZy5jb250ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGNvbmZpZy5jb250ZXh0Q3JlYXRpb24pIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb25maWcuY29udGV4dENyZWF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZ2wgfHwgZ2wuaXNDb250ZXh0TG9zdCgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TG9zdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYkdMIHVuc3VwcG9ydGVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdsID0gZ2w7XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dExvc3RIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuY29udGV4dExvc3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZ2FtZS5ldmVudHMuZW1pdChHYW1lRXZlbnRzLkNPTlRFWFRfTE9TVCwgX3RoaXMpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRleHRSZXN0b3JlZEhhbmRsZXIgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuY29udGV4dExvc3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmluaXQoX3RoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmdhbWUuZXZlbnRzLmVtaXQoR2FtZUV2ZW50cy5DT05URVhUX1JFU1RPUkVELCBfdGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmNvbnRleHRMb3N0SGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuY29udGV4dFJlc3RvcmVkSGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyAgU2V0IGl0IGJhY2sgaW50byB0aGUgR2FtZSwgc28gZGV2ZWxvcGVycyBjYW4gYWNjZXNzIGl0IGZyb20gdGhlcmUgdG9vXHJcbiAgICAgICAgZ2FtZS5jb250ZXh0ID0gZ2w7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDI3OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXMucHVzaCh7IGZ1bmM6IFsgZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBIF0sIGVxdWF0aW9uOiBnbC5GVU5DX0FERCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBBRERcclxuICAgICAgICB0aGlzLmJsZW5kTW9kZXNbMV0uZnVuYyA9IFsgZ2wuT05FLCBnbC5EU1RfQUxQSEEgXTtcclxuXHJcbiAgICAgICAgLy8gIE1VTFRJUExZXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzWzJdLmZ1bmMgPSBbIGdsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSBdO1xyXG5cclxuICAgICAgICAvLyAgU0NSRUVOXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzWzNdLmZ1bmMgPSBbIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19DT0xPUiBdO1xyXG5cclxuICAgICAgICAvLyAgRVJBU0VcclxuICAgICAgICB0aGlzLmJsZW5kTW9kZXNbMTddID0geyBmdW5jOiBbIGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEgXSwgZXF1YXRpb246IGdsLkZVTkNfUkVWRVJTRV9TVUJUUkFDVCB9O1xyXG5cclxuICAgICAgICB0aGlzLmdsRm9ybWF0c1swXSA9IGdsLkJZVEU7XHJcbiAgICAgICAgdGhpcy5nbEZvcm1hdHNbMV0gPSBnbC5TSE9SVDtcclxuICAgICAgICB0aGlzLmdsRm9ybWF0c1syXSA9IGdsLlVOU0lHTkVEX0JZVEU7XHJcbiAgICAgICAgdGhpcy5nbEZvcm1hdHNbM10gPSBnbC5VTlNJR05FRF9TSE9SVDtcclxuICAgICAgICB0aGlzLmdsRm9ybWF0c1s0XSA9IGdsLkZMT0FUO1xyXG5cclxuICAgICAgICAvLyAgU2V0IHRoZSBnbCBmdW5jdGlvbiBtYXBcclxuICAgICAgICB0aGlzLmdsRnVuY01hcCA9IHtcclxuXHJcbiAgICAgICAgICAgIG1hdDI6IHsgZnVuYzogZ2wudW5pZm9ybU1hdHJpeDJmdiwgbGVuZ3RoOiAxLCBtYXRyaXg6IHRydWUgfSxcclxuICAgICAgICAgICAgbWF0MzogeyBmdW5jOiBnbC51bmlmb3JtTWF0cml4M2Z2LCBsZW5ndGg6IDEsIG1hdHJpeDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICBtYXQ0OiB7IGZ1bmM6IGdsLnVuaWZvcm1NYXRyaXg0ZnYsIGxlbmd0aDogMSwgbWF0cml4OiB0cnVlIH0sXHJcblxyXG4gICAgICAgICAgICAnMWYnOiB7IGZ1bmM6IGdsLnVuaWZvcm0xZiwgbGVuZ3RoOiAxIH0sXHJcbiAgICAgICAgICAgICcxZnYnOiB7IGZ1bmM6IGdsLnVuaWZvcm0xZnYsIGxlbmd0aDogMSB9LFxyXG4gICAgICAgICAgICAnMWknOiB7IGZ1bmM6IGdsLnVuaWZvcm0xaSwgbGVuZ3RoOiAxIH0sXHJcbiAgICAgICAgICAgICcxaXYnOiB7IGZ1bmM6IGdsLnVuaWZvcm0xaXYsIGxlbmd0aDogMSB9LFxyXG5cclxuICAgICAgICAgICAgJzJmJzogeyBmdW5jOiBnbC51bmlmb3JtMmYsIGxlbmd0aDogMiB9LFxyXG4gICAgICAgICAgICAnMmZ2JzogeyBmdW5jOiBnbC51bmlmb3JtMmZ2LCBsZW5ndGg6IDEgfSxcclxuICAgICAgICAgICAgJzJpJzogeyBmdW5jOiBnbC51bmlmb3JtMmksIGxlbmd0aDogMiB9LFxyXG4gICAgICAgICAgICAnMml2JzogeyBmdW5jOiBnbC51bmlmb3JtMml2LCBsZW5ndGg6IDEgfSxcclxuXHJcbiAgICAgICAgICAgICczZic6IHsgZnVuYzogZ2wudW5pZm9ybTNmLCBsZW5ndGg6IDMgfSxcclxuICAgICAgICAgICAgJzNmdic6IHsgZnVuYzogZ2wudW5pZm9ybTNmdiwgbGVuZ3RoOiAxIH0sXHJcbiAgICAgICAgICAgICczaSc6IHsgZnVuYzogZ2wudW5pZm9ybTNpLCBsZW5ndGg6IDMgfSxcclxuICAgICAgICAgICAgJzNpdic6IHsgZnVuYzogZ2wudW5pZm9ybTNpdiwgbGVuZ3RoOiAxIH0sXHJcblxyXG4gICAgICAgICAgICAnNGYnOiB7IGZ1bmM6IGdsLnVuaWZvcm00ZiwgbGVuZ3RoOiA0IH0sXHJcbiAgICAgICAgICAgICc0ZnYnOiB7IGZ1bmM6IGdsLnVuaWZvcm00ZnYsIGxlbmd0aDogMSB9LFxyXG4gICAgICAgICAgICAnNGknOiB7IGZ1bmM6IGdsLnVuaWZvcm00aSwgbGVuZ3RoOiA0IH0sXHJcbiAgICAgICAgICAgICc0aXYnOiB7IGZ1bmM6IGdsLnVuaWZvcm00aXYsIGxlbmd0aDogMSB9XHJcblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIExvYWQgc3VwcG9ydGVkIGV4dGVuc2lvbnNcclxuICAgICAgICB2YXIgZXh0cyA9IGdsLmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcubWF4VGV4dHVyZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcubWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcubWF4VGV4dHVyZVNpemUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcubWF4VGV4dHVyZVNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfU0laRSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZXh0U3RyaW5nID0gJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV8nO1xyXG4gICAgICAgIHZhciB3a0V4dFN0cmluZyA9ICdXRUJLSVRfJyArIGV4dFN0cmluZztcclxuXHJcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbi5FVEMxID0gZ2wuZ2V0RXh0ZW5zaW9uKGV4dFN0cmluZyArICdldGMxJykgfHwgZ2wuZ2V0RXh0ZW5zaW9uKHdrRXh0U3RyaW5nICsgJ2V0YzEnKTtcclxuICAgICAgICB0aGlzLmNvbXByZXNzaW9uLlBWUlRDID0gZ2wuZ2V0RXh0ZW5zaW9uKGV4dFN0cmluZyArICdwdnJ0YycpIHx8IGdsLmdldEV4dGVuc2lvbih3a0V4dFN0cmluZyArICdwdnJ0YycpO1xyXG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24uUzNUQyA9IGdsLmdldEV4dGVuc2lvbihleHRTdHJpbmcgKyAnczN0YycpIHx8IGdsLmdldEV4dGVuc2lvbih3a0V4dFN0cmluZyArICdzM3RjJyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IGV4dHM7XHJcblxyXG4gICAgICAgIC8vICBTZXR1cCBpbml0aWFsIFdlYkdMIHN0YXRlXHJcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XHJcblxyXG4gICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XHJcblxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvci5yZWRHTCwgY2xlYXJDb2xvci5ncmVlbkdMLCBjbGVhckNvbG9yLmJsdWVHTCwgY2xlYXJDb2xvci5hbHBoYUdMKTtcclxuXHJcbiAgICAgICAgLy8gIE1pcG1hcHNcclxuICAgICAgICB0aGlzLm1pcG1hcEZpbHRlciA9IGdsW2NvbmZpZy5taXBtYXBGaWx0ZXJdO1xyXG5cclxuICAgICAgICAvLyBJbml0aWFsaXplIGFsbCB0ZXh0dXJlcyB0byBudWxsXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY3VycmVudFRleHR1cmVzLmxlbmd0aDsgKytpbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRleHR1cmVzW2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDbGVhciBwcmV2aW91cyBwaXBlbGluZXMgYW5kIHJlbG9hZCBkZWZhdWx0IG9uZXNcclxuICAgICAgICB0aGlzLnBpcGVsaW5lcyA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLmFkZFBpcGVsaW5lKCdUZXh0dXJlVGludFBpcGVsaW5lJywgbmV3IFRleHR1cmVUaW50UGlwZWxpbmUoeyBnYW1lOiBnYW1lLCByZW5kZXJlcjogdGhpcyB9KSk7XHJcbiAgICAgICAgdGhpcy5hZGRQaXBlbGluZSgnQml0bWFwTWFza1BpcGVsaW5lJywgbmV3IEJpdG1hcE1hc2tQaXBlbGluZSh7IGdhbWU6IGdhbWUsIHJlbmRlcmVyOiB0aGlzIH0pKTtcclxuICAgICAgICB0aGlzLmFkZFBpcGVsaW5lKCdMaWdodDJEJywgbmV3IEZvcndhcmREaWZmdXNlTGlnaHRQaXBlbGluZSh7IGdhbWU6IGdhbWUsIHJlbmRlcmVyOiB0aGlzLCBtYXhMaWdodHM6IGNvbmZpZy5tYXhMaWdodHMgfSkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJsZW5kTW9kZShDT05TVC5CbGVuZE1vZGVzLk5PUk1BTCk7XHJcblxyXG4gICAgICAgIGdhbWUudGV4dHVyZXMub25jZShUZXh0dXJlRXZlbnRzLlJFQURZLCB0aGlzLmJvb3QsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBib290IGhhbmRsZXIuIENhbGxzICdib290JyBvbiBlYWNoIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBwaXBlbGluZU5hbWUgaW4gdGhpcy5waXBlbGluZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lc1twaXBlbGluZU5hbWVdLmJvb3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBibGFuayA9IHRoaXMuZ2FtZS50ZXh0dXJlcy5nZXRGcmFtZSgnX19ERUZBVUxUJyk7XHJcblxyXG4gICAgICAgIHRoaXMucGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUuY3VycmVudEZyYW1lID0gYmxhbms7XHJcblxyXG4gICAgICAgIHRoaXMuYmxhbmtUZXh0dXJlID0gYmxhbms7XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XHJcblxyXG4gICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBpcGVsaW5lKHRoaXMucGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuc2NhbGUub24oU2NhbGVFdmVudHMuUkVTSVpFLCB0aGlzLm9uUmVzaXplLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIGJhc2VTaXplID0gdGhpcy5nYW1lLnNjYWxlLmJhc2VTaXplO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZShiYXNlU2l6ZS53aWR0aCwgYmFzZVNpemUuaGVpZ2h0LCB0aGlzLmdhbWUuc2NhbGUucmVzb2x1dGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGhhbmRsZXIgdGhhdCBtYW5hZ2VzIHRoZSBgcmVzaXplYCBldmVudCBkaXNwYXRjaGVkIGJ5IHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjb25SZXNpemVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TdHJ1Y3RzLlNpemV9IGdhbWVTaXplIC0gVGhlIGRlZmF1bHQgR2FtZSBTaXplIG9iamVjdC4gVGhpcyBpcyB0aGUgdW4tbW9kaWZpZWQgZ2FtZSBkaW1lbnNpb25zLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBiYXNlU2l6ZSAtIFRoZSBiYXNlIFNpemUgb2JqZWN0LiBUaGUgZ2FtZSBkaW1lbnNpb25zIG11bHRpcGxpZWQgYnkgdGhlIHJlc29sdXRpb24uIFRoZSBjYW52YXMgd2lkdGggLyBoZWlnaHQgdmFsdWVzIG1hdGNoIHRoaXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TdHJ1Y3RzLlNpemV9IGRpc3BsYXlTaXplIC0gVGhlIGRpc3BsYXkgU2l6ZSBvYmplY3QuIFRoZSBzaXplIG9mIHRoZSBjYW52YXMgc3R5bGUgd2lkdGggLyBoZWlnaHQgYXR0cmlidXRlcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmVzb2x1dGlvbl0gLSBUaGUgU2NhbGUgTWFuYWdlciByZXNvbHV0aW9uIHNldHRpbmcuXHJcbiAgICAgKi9cclxuICAgIG9uUmVzaXplOiBmdW5jdGlvbiAoZ2FtZVNpemUsIGJhc2VTaXplLCBkaXNwbGF5U2l6ZSwgcmVzb2x1dGlvbilcclxuICAgIHtcclxuICAgICAgICAvLyAgSGFzIHRoZSB1bmRlcmx5aW5nIGNhbnZhcyBzaXplIGNoYW5nZWQ/XHJcbiAgICAgICAgaWYgKGJhc2VTaXplLndpZHRoICE9PSB0aGlzLndpZHRoIHx8IGJhc2VTaXplLmhlaWdodCAhPT0gdGhpcy5oZWlnaHQgfHwgcmVzb2x1dGlvbiAhPT0gdGhpcy5yZXNvbHV0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNpemUoYmFzZVNpemUud2lkdGgsIGJhc2VTaXplLmhlaWdodCwgcmVzb2x1dGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZXMgdGhlIGRyYXdpbmcgYnVmZmVyIHRvIG1hdGNoIHRoYXQgcmVxdWlyZWQgYnkgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNyZXNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Jlc29sdXRpb25dIC0gVGhlIG5ldyByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcGlwZWxpbmVzID0gdGhpcy5waXBlbGluZXM7XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICBnbC52aWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSBhbGwgcmVnaXN0ZXJlZCBwaXBlbGluZXNcclxuICAgICAgICBmb3IgKHZhciBwaXBlbGluZU5hbWUgaW4gcGlwZWxpbmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGlwZWxpbmVzW3BpcGVsaW5lTmFtZV0ucmVzaXplKHdpZHRoLCBoZWlnaHQsIHJlc29sdXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kcmF3aW5nQnVmZmVySGVpZ2h0ID0gZ2wuZHJhd2luZ0J1ZmZlckhlaWdodDtcclxuXHJcbiAgICAgICAgZ2wuc2Npc3NvcigwLCAoZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCAtIGhlaWdodCksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmRlZmF1bHRDYW1lcmEuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGEgV2ViR0wgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjaGFzRXh0ZW5zaW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0ZW5zaW9uTmFtZSAtIE5hbWUgb2YgdGhlIFdlYkdMIGV4dGVuc2lvblxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGhhc0V4dGVuc2lvbjogZnVuY3Rpb24gKGV4dGVuc2lvbk5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucyA/IHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucy5pbmRleE9mKGV4dGVuc2lvbk5hbWUpIDogZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZHMgYSBXZWJHTCBleHRlbnNpb25cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2dldEV4dGVuc2lvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4dGVuc2lvbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRvIGxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBXZWJHTCBleHRlbnNpb24gaWYgdGhlIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgZ2V0RXh0ZW5zaW9uOiBmdW5jdGlvbiAoZXh0ZW5zaW9uTmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRXh0ZW5zaW9uKGV4dGVuc2lvbk5hbWUpKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGlmICghKGV4dGVuc2lvbk5hbWUgaW4gdGhpcy5leHRlbnNpb25zKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uc1tleHRlbnNpb25OYW1lXSA9IHRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKGV4dGVuc2lvbk5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uc1tleHRlbnNpb25OYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbHVzaGVzIHRoZSBjdXJyZW50IHBpcGVsaW5lIGlmIHRoZSBwaXBlbGluZSBpcyBib3VuZFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZmx1c2hcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBmbHVzaDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGlwZWxpbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQaXBlbGluZS5mbHVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBwaXBlbGluZSBpcyBwcmVzZW50IGluIHRoZSBjdXJyZW50IFdlYkdMUmVuZGVyZXJcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2hhc1BpcGVsaW5lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGlwZWxpbmVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZ2l2ZW4gcGlwZWxpbmUgaXMgbG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzUGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZU5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChwaXBlbGluZU5hbWUgaW4gdGhpcy5waXBlbGluZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBpcGVsaW5lIGJ5IG5hbWUgaWYgdGhlIHBpcGVsaW5lIGV4aXN0c1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZ2V0UGlwZWxpbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwaXBlbGluZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmV9IFRoZSBwaXBlbGluZSBpbnN0YW5jZSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZU5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmhhc1BpcGVsaW5lKHBpcGVsaW5lTmFtZSkpID8gdGhpcy5waXBlbGluZXNbcGlwZWxpbmVOYW1lXSA6IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHBpcGVsaW5lIGJ5IG5hbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNyZW1vdmVQaXBlbGluZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBpcGVsaW5lTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSB0byBiZSByZW1vdmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZU5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGlwZWxpbmVzW3BpcGVsaW5lTmFtZV07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBwaXBlbGluZSBpbnN0YW5jZSBpbnRvIHRoZSBjb2xsZWN0aW9uIG9mIHBpcGVsaW5lc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjYWRkUGlwZWxpbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwaXBlbGluZU5hbWUgLSBBIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IGZvciB0aGUgcGlwZWxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lfSBwaXBlbGluZUluc3RhbmNlIC0gQSBwaXBlbGluZSBpbnN0YW5jZSB3aGljaCBtdXN0IGV4dGVuZCBXZWJHTFBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lfSBUaGUgcGlwZWxpbmUgaW5zdGFuY2UgdGhhdCB3YXMgcGFzc2VkLlxyXG4gICAgICovXHJcbiAgICBhZGRQaXBlbGluZTogZnVuY3Rpb24gKHBpcGVsaW5lTmFtZSwgcGlwZWxpbmVJbnN0YW5jZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGlwZWxpbmUocGlwZWxpbmVOYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmVzW3BpcGVsaW5lTmFtZV0gPSBwaXBlbGluZUluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpcGVsaW5lIGV4aXN0czogJyArIHBpcGVsaW5lTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwaXBlbGluZUluc3RhbmNlLm5hbWUgPSBwaXBlbGluZU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucGlwZWxpbmVzW3BpcGVsaW5lTmFtZV0ucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmNvbmZpZy5yZXNvbHV0aW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lSW5zdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaGVzIGEgbmV3IHNjaXNzb3Igc3RhdGUuIFRoaXMgaXMgdXNlZCB0byBzZXQgbmVzdGVkIHNjaXNzb3Igc3RhdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcHVzaFNjaXNzb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIHNjaXNzb3IuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHJhd2luZ0J1ZmZlckhlaWdodF0gLSBPcHRpb25hbCBkcmF3aW5nQnVmZmVySGVpZ2h0IG92ZXJyaWRlIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJbXX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgc2Npc3NvciB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIHB1c2hTY2lzc29yOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHJhd2luZ0J1ZmZlckhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHJhd2luZ0J1ZmZlckhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGRyYXdpbmdCdWZmZXJIZWlnaHQgPSB0aGlzLmRyYXdpbmdCdWZmZXJIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIHNjaXNzb3JTdGFjayA9IHRoaXMuc2Npc3NvclN0YWNrO1xyXG5cclxuICAgICAgICB2YXIgc2Npc3NvciA9IFsgeCwgeSwgd2lkdGgsIGhlaWdodCBdO1xyXG5cclxuICAgICAgICBzY2lzc29yU3RhY2sucHVzaChzY2lzc29yKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRyYXdpbmdCdWZmZXJIZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTY2lzc29yID0gc2Npc3NvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNjaXNzb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBzY2lzc29yIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0U2Npc3NvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIHNjaXNzb3IuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzY2lzc29yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHJhd2luZ0J1ZmZlckhlaWdodF0gLSBPcHRpb25hbCBkcmF3aW5nQnVmZmVySGVpZ2h0IG92ZXJyaWRlIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBzZXRTY2lzc29yOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHJhd2luZ0J1ZmZlckhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHJhd2luZ0J1ZmZlckhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGRyYXdpbmdCdWZmZXJIZWlnaHQgPSB0aGlzLmRyYXdpbmdCdWZmZXJIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTY2lzc29yO1xyXG5cclxuICAgICAgICB2YXIgc2V0U2Npc3NvciA9ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHNldFNjaXNzb3IpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3ggPSBjdXJyZW50WzBdO1xyXG4gICAgICAgICAgICB2YXIgY3kgPSBjdXJyZW50WzFdO1xyXG4gICAgICAgICAgICB2YXIgY3cgPSBjdXJyZW50WzJdO1xyXG4gICAgICAgICAgICB2YXIgY2ggPSBjdXJyZW50WzNdO1xyXG5cclxuICAgICAgICAgICAgc2V0U2Npc3NvciA9IChjeCAhPT0geCB8fCBjeSAhPT0geSB8fCBjdyAhPT0gd2lkdGggfHwgY2ggIT09IGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2V0U2Npc3NvcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJHTFJlbmRlcmluZ0NvbnRleHQvc2Npc3NvclxyXG4gICAgICAgICAgICBnbC5zY2lzc29yKHgsIChkcmF3aW5nQnVmZmVySGVpZ2h0IC0geSAtIGhlaWdodCksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3BzIHRoZSBsYXN0IHNjaXNzb3Igc3RhdGUgYW5kIHNldHMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNwb3BTY2lzc29yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcG9wU2Npc3NvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgc2Npc3NvclN0YWNrID0gdGhpcy5zY2lzc29yU3RhY2s7XHJcblxyXG4gICAgICAgIC8vICBSZW1vdmUgdGhlIGN1cnJlbnQgc2Npc3NvclxyXG4gICAgICAgIHNjaXNzb3JTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgLy8gIFJlc2V0IHRoZSBwcmV2aW91cyBzY2lzc29yXHJcbiAgICAgICAgdmFyIHNjaXNzb3IgPSBzY2lzc29yU3RhY2tbc2Npc3NvclN0YWNrLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAoc2Npc3NvcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2Npc3NvcihzY2lzc29yWzBdLCBzY2lzc29yWzFdLCBzY2lzc29yWzJdLCBzY2lzc29yWzNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFNjaXNzb3IgPSBzY2lzc29yO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIGEgV2ViR0xQaXBlbGluZSBhbmQgc2V0cyBpdCBhcyB0aGUgY3VycmVudCBwaXBlbGluZSB0byBiZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0UGlwZWxpbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmV9IHBpcGVsaW5lSW5zdGFuY2UgLSBUaGUgcGlwZWxpbmUgaW5zdGFuY2UgdG8gYmUgYWN0aXZhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gW2dhbWVPYmplY3RdIC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgaW52b2tlZCB0aGlzIHBpcGVsaW5lLCBpZiBhbnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmV9IFRoZSBwaXBlbGluZSB0aGF0IHdhcyBhY3RpdmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHNldFBpcGVsaW5lOiBmdW5jdGlvbiAocGlwZWxpbmVJbnN0YW5jZSwgZ2FtZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGlwZWxpbmUgIT09IHBpcGVsaW5lSW5zdGFuY2UgfHxcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGlwZWxpbmUudmVydGV4QnVmZmVyICE9PSB0aGlzLmN1cnJlbnRWZXJ0ZXhCdWZmZXIgfHxcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGlwZWxpbmUucHJvZ3JhbSAhPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGlwZWxpbmUgPSBwaXBlbGluZUluc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQaXBlbGluZS5iaW5kKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRQaXBlbGluZS5vbkJpbmQoZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQaXBlbGluZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGVyZSBhbiBhY3RpdmUgc3RlbmNpbCBtYXNrP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjaGFzQWN0aXZlU3RlbmNpbE1hc2tcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBzdGVuY2lsIG1hc2ssIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBoYXNBY3RpdmVTdGVuY2lsTWFzazogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWFzayA9IHRoaXMuY3VycmVudE1hc2subWFzaztcclxuICAgICAgICB2YXIgY2FtTWFzayA9IHRoaXMuY3VycmVudENhbWVyYU1hc2subWFzaztcclxuXHJcbiAgICAgICAgcmV0dXJuICgobWFzayAmJiBtYXNrLmlzU3RlbmNpbCkgfHwgKGNhbU1hc2sgJiYgY2FtTWFzay5pc1N0ZW5jaWwpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgdGhpcyB0byByZXNldCB0aGUgZ2wgY29udGV4dCB0byB0aGUgc3RhdGUgdGhhdCBQaGFzZXIgcmVxdWlyZXMgdG8gY29udGludWUgcmVuZGVyaW5nLlxyXG4gICAgICogQ2FsbGluZyB0aGlzIHdpbGw6XHJcbiAgICAgKiBcclxuICAgICAqICogRGlzYWJsZSBgREVQVEhfVEVTVGAsIGBDVUxMX0ZBQ0VgIGFuZCBgU1RFTkNJTF9URVNUYC5cclxuICAgICAqICogQ2xlYXIgdGhlIGRlcHRoIGJ1ZmZlciBhbmQgc3RlbmNpbCBidWZmZXJzLlxyXG4gICAgICogKiBSZXNldCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgICAqICogUmVzZXQgdGhlIGJsZW5kIG1vZGUuXHJcbiAgICAgKiAqIEJpbmQgYSBibGFuayB0ZXh0dXJlIGFzIHRoZSBhY3RpdmUgdGV4dHVyZSBvbiB0ZXh0dXJlIHVuaXQgemVyby5cclxuICAgICAqICogUmViaW5kcyB0aGUgZ2l2ZW4gcGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBzaG91bGQgY2FsbCB0aGlzIGhhdmluZyBwcmV2aW91c2x5IGNhbGxlZCBgY2xlYXJQaXBlbGluZWAgYW5kIHRoZW4gd2lzaGluZyB0byByZXR1cm5cclxuICAgICAqIGNvbnRyb2wgdG8gUGhhc2VyIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcmViaW5kUGlwZWxpbmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX0gcGlwZWxpbmVJbnN0YW5jZSAtIFRoZSBwaXBlbGluZSBpbnN0YW5jZSB0byBiZSBhY3RpdmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHJlYmluZFBpcGVsaW5lOiBmdW5jdGlvbiAocGlwZWxpbmVJbnN0YW5jZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQWN0aXZlU3RlbmNpbE1hc2soKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgdGhlcmUgd2Fzbid0IGEgc3RlbmNpbCBtYXNrIHNldCBiZWZvcmUgdGhpcyBjYWxsLCB3ZSBjYW4gZGlzYWJsZSBpdCBzYWZlbHlcclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUIHwgZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCbGVuZE1vZGUoMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMuYmxhbmtUZXh0dXJlLmdsVGV4dHVyZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVRleHR1cmVVbml0ID0gMDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlc1swXSA9IHRoaXMuYmxhbmtUZXh0dXJlLmdsVGV4dHVyZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGlwZWxpbmUgPSBwaXBlbGluZUluc3RhbmNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBpcGVsaW5lLmJpbmQoKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQaXBlbGluZS5vbkJpbmQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbHVzaGVzIHRoZSBjdXJyZW50IFdlYkdMUGlwZWxpbmUgYmVpbmcgdXNlZCBhbmQgdGhlbiBjbGVhcnMgaXQsIGFsb25nIHdpdGggdGhlXHJcbiAgICAgKiB0aGUgY3VycmVudCBzaGFkZXIgcHJvZ3JhbSBhbmQgdmVydGV4IGJ1ZmZlci4gVGhlbiByZXNldHMgdGhlIGJsZW5kIG1vZGUgdG8gTk9STUFMLlxyXG4gICAgICogQ2FsbCB0aGlzIGJlZm9yZSBqdW1waW5nIHRvIHlvdXIgb3duIGdsIGNvbnRleHQgaGFuZGxlciwgYW5kIHRoZW4gY2FsbCBgcmViaW5kUGlwZWxpbmVgIHdoZW5cclxuICAgICAqIHlvdSB3aXNoIHRvIHJldHVybiBjb250cm9sIHRvIFBoYXNlciBhZ2Fpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NsZWFyUGlwZWxpbmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgY2xlYXJQaXBlbGluZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsdXNoKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFBpcGVsaW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWZXJ0ZXhCdWZmZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4QnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRCbGVuZE1vZGUoMCwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmxlbmQgbW9kZSB0byB0aGUgdmFsdWUgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIGN1cnJlbnQgYmxlbmQgbW9kZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGdpdmVuLCB0aGUgcGlwZWxpbmUgaXMgZmx1c2hlZCBhbmQgdGhlIG5ld1xyXG4gICAgICogYmxlbmQgbW9kZSBpcyBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0QmxlbmRNb2RlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJsZW5kTW9kZUlkIC0gVGhlIGJsZW5kIG1vZGUgdG8gYmUgc2V0LiBDYW4gYmUgYSBgQmxlbmRNb2Rlc2AgY29uc3Qgb3IgYW4gaW50ZWdlciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIEZvcmNlIHRoZSBibGVuZCBtb2RlIHRvIGJlIHNldCwgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudGx5IHNldCBibGVuZCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYmxlbmQgbW9kZSB3YXMgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGNhbGwsIGZvcmNpbmcgYSBmbHVzaCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHNldEJsZW5kTW9kZTogZnVuY3Rpb24gKGJsZW5kTW9kZUlkLCBmb3JjZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIGJsZW5kTW9kZSA9IHRoaXMuYmxlbmRNb2Rlc1tibGVuZE1vZGVJZF07XHJcblxyXG4gICAgICAgIGlmIChmb3JjZSB8fCAoYmxlbmRNb2RlSWQgIT09IENPTlNULkJsZW5kTW9kZXMuU0tJUF9DSEVDSyAmJiB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgIT09IGJsZW5kTW9kZUlkKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XHJcbiAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb24oYmxlbmRNb2RlLmVxdWF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChibGVuZE1vZGUuZnVuYy5sZW5ndGggPiAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShibGVuZE1vZGUuZnVuY1swXSwgYmxlbmRNb2RlLmZ1bmNbMV0sIGJsZW5kTW9kZS5mdW5jWzJdLCBibGVuZE1vZGUuZnVuY1szXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoYmxlbmRNb2RlLmZ1bmNbMF0sIGJsZW5kTW9kZS5mdW5jWzFdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gYmxlbmRNb2RlSWQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGN1c3RvbSBibGVuZCBtb2RlIGZvciB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xfQVBJL0NvbnN0YW50cyNCbGVuZGluZ19tb2Rlc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjYWRkQmxlbmRNb2RlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0dMZW51bVtdfSBmdW5jIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgV2ViR0wgZnVuY3Rpb25zIHRvIHVzZSBmb3IgdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGJsZW5kaW5nIGZhY3RvcnMsIHJlc3BlY3RpdmVseS4gU2VlIHRoZSBwb3NzaWJsZSBjb25zdGFudHMgZm9yIHtAbGluayBXZWJHTFJlbmRlcmluZ0NvbnRleHQjYmxlbmRGdW5jKCl9LlxyXG4gICAgICogQHBhcmFtIHtHTGVudW19IGVxdWF0aW9uIC0gVGhlIGVxdWF0aW9uIHRvIHVzZSBmb3IgY29tYmluaW5nIHRoZSBSR0IgYW5kIGFscGhhIGNvbXBvbmVudHMgb2YgYSBuZXcgcGl4ZWwgd2l0aCBhIHJlbmRlcmVkIG9uZS4gU2VlIHRoZSBwb3NzaWJsZSBjb25zdGFudHMgZm9yIHtAbGluayBXZWJHTFJlbmRlcmluZ0NvbnRleHQjYmxlbmRFcXVhdGlvbigpfS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgaW5kZXggb2YgdGhlIG5ldyBibGVuZCBtb2RlLCB1c2VkIGZvciByZWZlcmVuY2luZyBpdCBpbiB0aGUgZnV0dXJlLlxyXG4gICAgICovXHJcbiAgICBhZGRCbGVuZE1vZGU6IGZ1bmN0aW9uIChmdW5jLCBlcXVhdGlvbilcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmJsZW5kTW9kZXMucHVzaCh7IGZ1bmM6IGZ1bmMsIGVxdWF0aW9uOiBlcXVhdGlvbiB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGluZGV4IC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIGN1c3RvbSBibGVuZCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjdXBkYXRlQmxlbmRNb2RlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBjdXN0b20gYmxlbmQgbW9kZS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgYmxlbmQgbW9kZS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGVxdWF0aW9uIC0gVGhlIGVxdWF0aW9uIHRvIHVzZSBmb3IgdGhlIGJsZW5kIG1vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCbGVuZE1vZGU6IGZ1bmN0aW9uIChpbmRleCwgZnVuYywgZXF1YXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxlbmRNb2Rlc1tpbmRleF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbaW5kZXhdLmZ1bmMgPSBmdW5jO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVxdWF0aW9uKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbaW5kZXhdLmVxdWF0aW9uID0gZXF1YXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjdXN0b20gYmxlbmQgbW9kZSBmcm9tIHRoZSByZW5kZXJlci5cclxuICAgICAqIEFueSBHYW1lIE9iamVjdHMgc3RpbGwgdXNpbmcgdGhpcyBibGVuZCBtb2RlIHdpbGwgZXJyb3IsIHNvIGJlIHN1cmUgdG8gY2xlYXIgdGhlbSBmaXJzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3JlbW92ZUJsZW5kTW9kZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY3VzdG9tIGJsZW5kIG1vZGUgdG8gYmUgcmVtb3ZlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUJsZW5kTW9kZTogZnVuY3Rpb24gKGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpbmRleCA+IDE3ICYmIHRoaXMuYmxlbmRNb2Rlc1tpbmRleF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHR1cmUgZm9yIHRleHR1cmUgdW5pdCB6ZXJvIHRvIGJlIGEgYmxhbmsgdGV4dHVyZS5cclxuICAgICAqIFRoaXMgb25seSBoYXBwZW5zIGlmIHRoZXJlIGlzbid0IGEgdGV4dHVyZSBhbHJlYWR5IGluIHVzZSBieSB0ZXh0dXJlIHVuaXQgemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3NldEJsYW5rVGV4dHVyZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSBhIGJsYW5rIHRleHR1cmUgc2V0LCByZWdhcmRsZXNzIG9mIHdoYXQncyBhbHJlYWR5IGJvdW5kP1xyXG4gICAgICovXHJcbiAgICBzZXRCbGFua1RleHR1cmU6IGZ1bmN0aW9uIChmb3JjZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZSB8fCB0aGlzLmN1cnJlbnRBY3RpdmVUZXh0dXJlVW5pdCAhPT0gMCB8fCAhdGhpcy5jdXJyZW50VGV4dHVyZXNbMF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUyRCh0aGlzLmJsYW5rVGV4dHVyZS5nbFRleHR1cmUsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyBhIHRleHR1cmUgYXQgYSB0ZXh0dXJlIHVuaXQuIElmIGEgdGV4dHVyZSBpcyBhbHJlYWR5XHJcbiAgICAgKiBib3VuZCB0byB0aGF0IHVuaXQgaXQgd2lsbCBmb3JjZSBhIGZsdXNoIG9uIHRoZSBjdXJyZW50IHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0VGV4dHVyZTJEXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSBXZWJHTCB0ZXh0dXJlIHRoYXQgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRleHR1cmVVbml0IC0gVGhlIHRleHR1cmUgdW5pdCB0byB3aGljaCB0aGUgdGV4dHVyZSB3aWxsIGJlIGJvdW5kLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmx1c2g9dHJ1ZV0gLSBXaWxsIHRoZSBjdXJyZW50IHBpcGVsaW5lIGJlIGZsdXNoZWQgaWYgdGhpcyBpcyBhIG5ldyB0ZXh0dXJlLCBvciBub3Q/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0dXJlMkQ6IGZ1bmN0aW9uICh0ZXh0dXJlLCB0ZXh0dXJlVW5pdCwgZmx1c2gpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZsdXNoID09PSB1bmRlZmluZWQpIHsgZmx1c2ggPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0dXJlICE9PSB0aGlzLmN1cnJlbnRUZXh0dXJlc1t0ZXh0dXJlVW5pdF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZmx1c2gpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZVRleHR1cmVVbml0ICE9PSB0ZXh0dXJlVW5pdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIHRleHR1cmVVbml0KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmVVbml0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRleHR1cmVzW3RleHR1cmVVbml0XSA9IHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyBhIGZyYW1lYnVmZmVyLiBJZiB0aGVyZSB3YXMgYW5vdGhlciBmcmFtZWJ1ZmZlciBhbHJlYWR5IGJvdW5kIGl0IHdpbGwgZm9yY2UgYSBwaXBlbGluZSBmbHVzaC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3NldEZyYW1lYnVmZmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMRnJhbWVidWZmZXJ9IGZyYW1lYnVmZmVyIC0gVGhlIGZyYW1lYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVTY2lzc29yPWZhbHNlXSAtIElmIGEgZnJhbWVidWZmZXIgaXMgZ2l2ZW4sIHNldCB0aGUgZ2wgc2Npc3NvciB0byBtYXRjaCB0aGUgZnJhbWUgYnVmZmVyIHNpemU/IE9yLCBpZiBgbnVsbGAgZ2l2ZW4sIHBvcCB0aGUgc2Npc3NvciBmcm9tIHRoZSBzdGFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lYnVmZmVyOiBmdW5jdGlvbiAoZnJhbWVidWZmZXIsIHVwZGF0ZVNjaXNzb3IpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVwZGF0ZVNjaXNzb3IgPT09IHVuZGVmaW5lZCkgeyB1cGRhdGVTY2lzc29yID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZWJ1ZmZlciAhPT0gdGhpcy5jdXJyZW50RnJhbWVidWZmZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXIgJiYgZnJhbWVidWZmZXIucmVuZGVyVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBmcmFtZWJ1ZmZlci5yZW5kZXJUZXh0dXJlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gZnJhbWVidWZmZXIucmVuZGVyVGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsdXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodXBkYXRlU2Npc3NvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd2luZ0J1ZmZlckhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoU2Npc3NvcigwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdpbmdCdWZmZXJIZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTY2lzc29yKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyBhIHByb2dyYW0uIElmIHRoZXJlIHdhcyBhbm90aGVyIHByb2dyYW0gYWxyZWFkeSBib3VuZCBpdCB3aWxsIGZvcmNlIGEgcGlwZWxpbmUgZmx1c2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRQcm9ncmFtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSBwcm9ncmFtIHRoYXQgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQcm9ncmFtOiBmdW5jdGlvbiAocHJvZ3JhbSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBpZiAocHJvZ3JhbSAhPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kcyBhIHZlcnRleCBidWZmZXIuIElmIHRoZXJlIGlzIGEgdmVydGV4IGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGl0J2xsIGZvcmNlIGEgcGlwZWxpbmUgZmx1c2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRWZXJ0ZXhCdWZmZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xCdWZmZXJ9IHZlcnRleEJ1ZmZlciAtIFRoZSBidWZmZXIgdGhhdCBuZWVkcyB0byBiZSBib3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFZlcnRleEJ1ZmZlcjogZnVuY3Rpb24gKHZlcnRleEJ1ZmZlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBpZiAodmVydGV4QnVmZmVyICE9PSB0aGlzLmN1cnJlbnRWZXJ0ZXhCdWZmZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZsdXNoKCk7XHJcblxyXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnRleEJ1ZmZlciA9IHZlcnRleEJ1ZmZlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kcyBhIGluZGV4IGJ1ZmZlci4gSWYgdGhlcmUgaXMgYSBpbmRleCBidWZmZXIgYWxyZWFkeSBib3VuZCBpdCdsbCBmb3JjZSBhIHBpcGVsaW5lIGZsdXNoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0SW5kZXhCdWZmZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xCdWZmZXJ9IGluZGV4QnVmZmVyIC0gVGhlIGJ1ZmZlciB0aGUgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJbmRleEJ1ZmZlcjogZnVuY3Rpb24gKGluZGV4QnVmZmVyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIGlmIChpbmRleEJ1ZmZlciAhPT0gdGhpcy5jdXJyZW50SW5kZXhCdWZmZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZsdXNoKCk7XHJcblxyXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEJ1ZmZlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIHRleHR1cmUgZnJvbSBhbiBpbWFnZSBzb3VyY2UuIElmIHRoZSBzb3VyY2UgaXMgbm90IHZhbGlkIGl0IGNyZWF0ZXMgYW4gZW1wdHkgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NyZWF0ZVRleHR1cmVGcm9tU291cmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gVGhlIHNvdXJjZSBvZiB0aGUgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHNjYWxlTW9kZSAtIFRoZSBzY2FsZSBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIHRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1dlYkdMVGV4dHVyZX0gVGhlIFdlYkdMIFRleHR1cmUgdGhhdCB3YXMgY3JlYXRlZCwgb3IgYG51bGxgIGlmIGl0IGNvdWxkbid0IGJlIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRleHR1cmVGcm9tU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDtcclxuICAgICAgICB2YXIgbWFnRmlsdGVyID0gZ2wuTkVBUkVTVDtcclxuICAgICAgICB2YXIgd3JhcCA9IGdsLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICB3aWR0aCA9IHNvdXJjZSA/IHNvdXJjZS53aWR0aCA6IHdpZHRoO1xyXG4gICAgICAgIGhlaWdodCA9IHNvdXJjZSA/IHNvdXJjZS5oZWlnaHQgOiBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBwb3cgPSBJc1NpemVQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAocG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd3JhcCA9IGdsLlJFUEVBVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzY2FsZU1vZGUgPT09IENPTlNULlNjYWxlTW9kZXMuTElORUFSICYmIHRoaXMuY29uZmlnLmFudGlhbGlhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1pbkZpbHRlciA9IChwb3cpID8gdGhpcy5taXBtYXBGaWx0ZXIgOiBnbC5MSU5FQVI7XHJcbiAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLkxJTkVBUjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc291cmNlICYmIHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGhlaWdodCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlMkQoMCwgbWluRmlsdGVyLCBtYWdGaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlMkQoMCwgbWluRmlsdGVyLCBtYWdGaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIHNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHdyYXBwZXIgZm9yIGNyZWF0aW5nIGEgV2ViR0xUZXh0dXJlLiBJZiBubyBwaXhlbCBkYXRhIGlzIHBhc3NlZCBpdCB3aWxsIGNyZWF0ZSBhbiBlbXB0eSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY3JlYXRlVGV4dHVyZTJEXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1pcExldmVsIC0gTWlwIGxldmVsIG9mIHRoZSB0ZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtaW5GaWx0ZXIgLSBGaWx0ZXJpbmcgb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1hZ0ZpbHRlciAtIEZpbHRlcmluZyBvZiB0aGUgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd3JhcFQgLSBXcmFwcGluZyBtb2RlIG9mIHRoZSB0ZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB3cmFwUyAtIFdyYXBwaW5nIG1vZGUgb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGZvcm1hdCAtIFdoaWNoIGZvcm1hdCBkb2VzIHRoZSB0ZXh0dXJlIHVzZS5cclxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcGl4ZWxzIC0gcGl4ZWwgZGF0YS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBXaWR0aCBvZiB0aGUgdGV4dHVyZSBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIEhlaWdodCBvZiB0aGUgdGV4dHVyZSBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwbWE9dHJ1ZV0gLSBEb2VzIHRoZSB0ZXh0dXJlIGhhdmUgcHJlbXVsdGlwbGllZCBhbHBoYT9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlU2l6ZT1mYWxzZV0gLSBJZiBgdHJ1ZWAgaXQgd2lsbCB1c2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLCByZWdhcmRsZXNzIG9mIHRoZSBwaXhlbHMgZGltZW5zaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gU2V0cyB0aGUgYFVOUEFDS19GTElQX1lfV0VCR0xgIGZsYWcgdGhlIFdlYkdMIFRleHR1cmUgdXNlcyBkdXJpbmcgdXBsb2FkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1dlYkdMVGV4dHVyZX0gVGhlIFdlYkdMVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVUZXh0dXJlMkQ6IGZ1bmN0aW9uIChtaXBMZXZlbCwgbWluRmlsdGVyLCBtYWdGaWx0ZXIsIHdyYXBULCB3cmFwUywgZm9ybWF0LCBwaXhlbHMsIHdpZHRoLCBoZWlnaHQsIHBtYSwgZm9yY2VTaXplLCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBwbWEgPSAocG1hID09PSB1bmRlZmluZWQgfHwgcG1hID09PSBudWxsKSA/IHRydWUgOiBwbWE7XHJcbiAgICAgICAgaWYgKGZvcmNlU2l6ZSA9PT0gdW5kZWZpbmVkKSB7IGZvcmNlU2l6ZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGZsaXBZID09PSB1bmRlZmluZWQpIHsgZmxpcFkgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuXHJcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIG1pbkZpbHRlcik7XHJcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIG1hZ0ZpbHRlcik7XHJcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgd3JhcFMpO1xyXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXBUKTtcclxuXHJcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBwbWEpO1xyXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsIGZsaXBZKTtcclxuXHJcbiAgICAgICAgaWYgKHBpeGVscyA9PT0gbnVsbCB8fCBwaXhlbHMgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgbWlwTGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFmb3JjZVNpemUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gcGl4ZWxzLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gcGl4ZWxzLmhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCBtaXBMZXZlbCwgZm9ybWF0LCBmb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSXNTaXplUG93ZXJPZlR3byh3aWR0aCwgaGVpZ2h0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQobnVsbCwgMCk7XHJcblxyXG4gICAgICAgIHRleHR1cmUuaXNBbHBoYVByZW11bHRpcGxpZWQgPSBwbWE7XHJcbiAgICAgICAgdGV4dHVyZS5pc1JlbmRlclRleHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMubmF0aXZlVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV3JhcHBlciBmb3IgY3JlYXRpbmcgV2ViR0xGcmFtZWJ1ZmZlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NyZWF0ZUZyYW1lYnVmZmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gV2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBIZWlnaHQgaW4gcGl4ZWxzIG9mIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtXZWJHTFRleHR1cmV9IHJlbmRlclRleHR1cmUgLSBUaGUgY29sb3IgdGV4dHVyZSB0byB3aGVyZSB0aGUgY29sb3IgcGl4ZWxzIGFyZSB3cml0dGVuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFkZERlcHRoU3RlbmNpbEJ1ZmZlciAtIEluZGljYXRlcyBpZiB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlciBzdXBwb3J0IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnNcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtXZWJHTEZyYW1lYnVmZmVyfSBSYXcgV2ViR0xGcmFtZWJ1ZmZlclxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcmFtZWJ1ZmZlcjogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHJlbmRlclRleHR1cmUsIGFkZERlcHRoU3RlbmNpbEJ1ZmZlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBmcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XHJcbiAgICAgICAgdmFyIGNvbXBsZXRlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgICAgIGlmIChhZGREZXB0aFN0ZW5jaWxCdWZmZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBkZXB0aFN0ZW5jaWxCdWZmZXIpO1xyXG4gICAgICAgICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgZGVwdGhTdGVuY2lsQnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlclRleHR1cmUuaXNSZW5kZXJUZXh0dXJlID0gdHJ1ZTtcclxuICAgICAgICByZW5kZXJUZXh0dXJlLmlzQWxwaGFQcmVtdWx0aXBsaWVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgcmVuZGVyVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIGNvbXBsZXRlID0gZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUik7XHJcblxyXG4gICAgICAgIGlmIChjb21wbGV0ZSAhPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JzID0ge1xyXG4gICAgICAgICAgICAgICAgMzYwNTQ6ICdJbmNvbXBsZXRlIEF0dGFjaG1lbnQnLFxyXG4gICAgICAgICAgICAgICAgMzYwNTU6ICdNaXNzaW5nIEF0dGFjaG1lbnQnLFxyXG4gICAgICAgICAgICAgICAgMzYwNTc6ICdJbmNvbXBsZXRlIERpbWVuc2lvbnMnLFxyXG4gICAgICAgICAgICAgICAgMzYwNjE6ICdGcmFtZWJ1ZmZlciBVbnN1cHBvcnRlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRnJhbWVidWZmZXIgaW5jb21wbGV0ZS4gRnJhbWVidWZmZXIgc3RhdHVzOiAnICsgZXJyb3JzW2NvbXBsZXRlXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmcmFtZWJ1ZmZlci5yZW5kZXJUZXh0dXJlID0gcmVuZGVyVGV4dHVyZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRGcmFtZWJ1ZmZlcihudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyYXBwZXIgZm9yIGNyZWF0aW5nIGEgV2ViR0xQcm9ncmFtXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjcmVhdGVQcm9ncmFtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmVydGV4U2hhZGVyIC0gU291cmNlIHRvIHRoZSB2ZXJ0ZXggc2hhZGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTaGFkZXIgLSBTb3VyY2UgdG8gdGhlIGZyYWdtZW50IHNoYWRlclxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0gUmF3IFdlYkdMUHJvZ3JhbVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbiAodmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xyXG4gICAgICAgIHZhciB2cyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTtcclxuICAgICAgICB2YXIgZnMgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcclxuXHJcbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKHZzLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIGdsLnNoYWRlclNvdXJjZShmcywgZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodnMpO1xyXG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMpO1xyXG5cclxuICAgICAgICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcih2cywgZ2wuQ09NUElMRV9TVEFUVVMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY29tcGlsZSBWZXJ0ZXggU2hhZGVyOlxcbicgKyBnbC5nZXRTaGFkZXJJbmZvTG9nKHZzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzLCBnbC5DT01QSUxFX1NUQVRVUykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjb21waWxlIEZyYWdtZW50IFNoYWRlcjpcXG4nICsgZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZzKTtcclxuICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnMpO1xyXG4gICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbGluayBwcm9ncmFtOlxcbicgKyBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcGVyIGZvciBjcmVhdGluZyBhIHZlcnRleCBidWZmZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjcmVhdGVWZXJ0ZXhCdWZmZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGluaXRpYWxEYXRhT3JTaXplIC0gSXQncyBlaXRoZXIgQXJyYXlCdWZmZXIgb3IgYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSB2Ym9cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gYnVmZmVyVXNhZ2UgLSBIb3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7V2ViR0xCdWZmZXJ9IFJhdyB2ZXJ0ZXggYnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVZlcnRleEJ1ZmZlcjogZnVuY3Rpb24gKGluaXRpYWxEYXRhT3JTaXplLCBidWZmZXJVc2FnZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRWZXJ0ZXhCdWZmZXIodmVydGV4QnVmZmVyKTtcclxuXHJcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGluaXRpYWxEYXRhT3JTaXplLCBidWZmZXJVc2FnZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VmVydGV4QnVmZmVyKG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gdmVydGV4QnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyYXBwZXIgZm9yIGNyZWF0aW5nIGEgdmVydGV4IGJ1ZmZlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NyZWF0ZUluZGV4QnVmZmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBpbml0aWFsRGF0YU9yU2l6ZSAtIEVpdGhlciBBcnJheUJ1ZmZlciBvciBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHNpemUgb2YgdGhlIHZiby5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gYnVmZmVyVXNhZ2UgLSBIb3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1dlYkdMQnVmZmVyfSBSYXcgaW5kZXggYnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUluZGV4QnVmZmVyOiBmdW5jdGlvbiAoaW5pdGlhbERhdGFPclNpemUsIGJ1ZmZlclVzYWdlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIGluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXIpO1xyXG5cclxuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbml0aWFsRGF0YU9yU2l6ZSwgYnVmZmVyVXNhZ2UpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEluZGV4QnVmZmVyKG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gaW5kZXhCdWZmZXI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gdGV4dHVyZSBmcm9tIHRoZSBuYXRpdmVUZXh0dXJlcyBhcnJheSBhbmQgdGhlbiBkZWxldGVzIGl0IGZyb20gdGhlIEdQVS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2RlbGV0ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xUZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIFdlYkdMIFRleHR1cmUgdG8gYmUgZGVsZXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZVRleHR1cmU6IGZ1bmN0aW9uICh0ZXh0dXJlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMubmF0aXZlVGV4dHVyZXMuaW5kZXhPZih0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNwbGljZU9uZSh0aGlzLm5hdGl2ZVRleHR1cmVzLCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUZXh0dXJlc1swXSA9PT0gdGV4dHVyZSAmJiAhdGhpcy5nYW1lLnBlbmRpbmdEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIHRleHR1cmUgd2UganVzdCBkZWxldGVkIGlzIGluIHVzZSwgc28gYmluZCBhIGJsYW5rIHRleHR1cmVcclxuICAgICAgICAgICAgdGhpcy5zZXRCbGFua1RleHR1cmUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIGEgV2ViR0xGcmFtZWJ1ZmZlciBmcm9tIHRoZSBHTCBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2RlbGV0ZUZyYW1lYnVmZmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMRnJhbWVidWZmZXJ9IGZyYW1lYnVmZmVyIC0gVGhlIEZyYW1lYnVmZmVyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBkZWxldGVGcmFtZWJ1ZmZlcjogZnVuY3Rpb24gKGZyYW1lYnVmZmVyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2wuZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIGEgV2ViR0xQcm9ncmFtIGZyb20gdGhlIEdMIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZGVsZXRlUHJvZ3JhbVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgc2hhZGVyIHByb2dyYW0gdG8gYmUgZGVsZXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZVByb2dyYW06IGZ1bmN0aW9uIChwcm9ncmFtKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBhIFdlYkdMQnVmZmVyIGZyb20gdGhlIEdMIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZGVsZXRlQnVmZmVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMQnVmZmVyfSB2ZXJ0ZXhCdWZmZXIgLSBUaGUgV2ViR0xCdWZmZXIgdG8gYmUgZGVsZXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZUJ1ZmZlcjogZnVuY3Rpb24gKGJ1ZmZlcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcihidWZmZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9scyB0aGUgcHJlLXJlbmRlciBvcGVyYXRpb25zIGZvciB0aGUgZ2l2ZW4gY2FtZXJhLlxyXG4gICAgICogSGFuZGxlcyBhbnkgY2xpcHBpbmcgbmVlZGVkIGJ5IHRoZSBjYW1lcmEgYW5kIHJlbmRlcnMgdGhlIGJhY2tncm91bmQgY29sb3IgaWYgYSBjb2xvciBpcyB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcHJlUmVuZGVyQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRvIHByZS1yZW5kZXIuXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlckNhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY3ggPSBjYW1lcmEuX2N4O1xyXG4gICAgICAgIHZhciBjeSA9IGNhbWVyYS5fY3k7XHJcbiAgICAgICAgdmFyIGN3ID0gY2FtZXJhLl9jdztcclxuICAgICAgICB2YXIgY2ggPSBjYW1lcmEuX2NoO1xyXG5cclxuICAgICAgICB2YXIgVGV4dHVyZVRpbnRQaXBlbGluZSA9IHRoaXMucGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmU7XHJcblxyXG4gICAgICAgIHZhciBjb2xvciA9IGNhbWVyYS5iYWNrZ3JvdW5kQ29sb3I7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wdXNoU2Npc3NvcihjeCwgY3ksIGN3LCAtY2gpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRGcmFtZWJ1ZmZlcihjYW1lcmEuZnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgIFRleHR1cmVUaW50UGlwZWxpbmUucHJvak9ydGhvKGN4LCBjdyArIGN4LCBjeSwgY2ggKyBjeSwgLTEwMDAsIDEwMDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbWVyYS5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNYXNrLm1hc2sgPSBjYW1lcmEubWFzaztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1hc2suY2FtZXJhID0gY2FtZXJhLl9tYXNrQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYS5tYXNrLnByZVJlbmRlcldlYkdMKHRoaXMsIGNhbWVyYSwgY2FtZXJhLl9tYXNrQ2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhR0wgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlVGludFBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICBjeCwgY3ksIGN3ICsgY3gsIGNoICsgY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuZ2V0VGludEZyb21GbG9hdHMoY29sb3IucmVkR0wsIGNvbG9yLmdyZWVuR0wsIGNvbG9yLmJsdWVHTCwgMSksXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3IuYWxwaGFHTFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FtZXJhLmVtaXQoQ2FtZXJhRXZlbnRzLlBSRV9SRU5ERVIsIGNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaFNjaXNzb3IoY3gsIGN5LCBjdywgY2gpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbWVyYS5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNYXNrLm1hc2sgPSBjYW1lcmEubWFzaztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1hc2suY2FtZXJhID0gY2FtZXJhLl9tYXNrQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYS5tYXNrLnByZVJlbmRlcldlYkdMKHRoaXMsIGNhbWVyYSwgY2FtZXJhLl9tYXNrQ2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhR0wgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlVGludFBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICBjeCwgY3ksIGN3ICwgY2gsXHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuZ2V0VGludEZyb21GbG9hdHMoY29sb3IucmVkR0wsIGNvbG9yLmdyZWVuR0wsIGNvbG9yLmJsdWVHTCwgMSksXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3IuYWxwaGFHTFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q3VycmVudFN0ZW5jaWxNYXNrOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwcmV2ID0gbnVsbDtcclxuICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLm1hc2tTdGFjaztcclxuICAgICAgICB2YXIgY2FtZXJhTWFzayA9IHRoaXMuY3VycmVudENhbWVyYU1hc2s7XHJcblxyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJldiA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYW1lcmFNYXNrLm1hc2sgJiYgY2FtZXJhTWFzay5tYXNrLmlzU3RlbmNpbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByZXYgPSBjYW1lcmFNYXNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByZXY7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgdGhlIHBvc3QtcmVuZGVyIG9wZXJhdGlvbnMgZm9yIHRoZSBnaXZlbiBjYW1lcmEuXHJcbiAgICAgKiBSZW5kZXJzIHRoZSBmb3JlZ3JvdW5kIGNhbWVyYSBlZmZlY3RzIGxpa2UgZmxhc2ggYW5kIGZhZGluZy4gSXQgcmVzZXRzIHRoZSBjdXJyZW50IHNjaXNzb3Igc3RhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNwb3N0UmVuZGVyQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRvIHBvc3QtcmVuZGVyLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBUZXh0dXJlVGludFBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZsYXNoRWZmZWN0LnBvc3RSZW5kZXJXZWJHTChUZXh0dXJlVGludFBpcGVsaW5lLCBVdGlscy5nZXRUaW50RnJvbUZsb2F0cyk7XHJcbiAgICAgICAgY2FtZXJhLmZhZGVFZmZlY3QucG9zdFJlbmRlcldlYkdMKFRleHR1cmVUaW50UGlwZWxpbmUsIFV0aWxzLmdldFRpbnRGcm9tRmxvYXRzKTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucG9wU2Npc3NvcigpO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFRleHR1cmVUaW50UGlwZWxpbmUuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RnJhbWVidWZmZXIobnVsbCk7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuZW1pdChDYW1lcmFFdmVudHMuUE9TVF9SRU5ERVIsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICBUZXh0dXJlVGludFBpcGVsaW5lLnByb2pPcnRobygwLCBUZXh0dXJlVGludFBpcGVsaW5lLndpZHRoLCBUZXh0dXJlVGludFBpcGVsaW5lLmhlaWdodCwgMCwgLTEwMDAuMCwgMTAwMC4wKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnZXRUaW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGE7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSAoY2FtZXJhLnBpcGVsaW5lKSA/IGNhbWVyYS5waXBlbGluZSA6IFRleHR1cmVUaW50UGlwZWxpbmU7XHJcblxyXG4gICAgICAgICAgICBwaXBlbGluZS5iYXRjaFRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZ2xUZXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLndpZHRoLCBjYW1lcmEuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLngsIGNhbWVyYS55LFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLndpZHRoLCBjYW1lcmEuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnpvb20sIGNhbWVyYS56b29tLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZsaXBYLCAhY2FtZXJhLmZsaXBZLFxyXG4gICAgICAgICAgICAgICAgMSwgMSxcclxuICAgICAgICAgICAgICAgIDAsIDAsXHJcbiAgICAgICAgICAgICAgICAwLCAwLCBjYW1lcmEud2lkdGgsIGNhbWVyYS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBnZXRUaW50KGNhbWVyYS5fdGludFRMLCBjYW1lcmEuX2FscGhhVEwpLFxyXG4gICAgICAgICAgICAgICAgZ2V0VGludChjYW1lcmEuX3RpbnRUUiwgY2FtZXJhLl9hbHBoYVRSKSxcclxuICAgICAgICAgICAgICAgIGdldFRpbnQoY2FtZXJhLl90aW50QkwsIGNhbWVyYS5fYWxwaGFCTCksXHJcbiAgICAgICAgICAgICAgICBnZXRUaW50KGNhbWVyYS5fdGludEJSLCBjYW1lcmEuX2FscGhhQlIpLFxyXG4gICAgICAgICAgICAgICAgKGNhbWVyYS5faXNUaW50ZWQgJiYgY2FtZXJhLnRpbnRGaWxsKSxcclxuICAgICAgICAgICAgICAgIDAsIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDYW1lcmEsXHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyAgRm9yY2UgY2xlYXIgdGhlIGN1cnJlbnQgdGV4dHVyZSBzbyB0aGF0IGl0ZW1zIG5leHQgaW4gdGhlIGJhdGNoIChsaWtlIEdyYXBoaWNzKSBkb24ndCB0cnkgYW5kIHVzZSBpdFxyXG4gICAgICAgICAgICB0aGlzLnNldEJsYW5rVGV4dHVyZSh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEubWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1hc2subWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEubWFzay5wb3N0UmVuZGVyV2ViR0wodGhpcywgY2FtZXJhLl9tYXNrQ2FtZXJhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBjdXJyZW50IHZlcnRleCBidWZmZXIgYW5kIHVwZGF0ZXMgcGlwZWxpbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcHJlUmVuZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcHJlUmVuZGVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHRMb3N0KSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwaXBlbGluZXMgPSB0aGlzLnBpcGVsaW5lcztcclxuXHJcbiAgICAgICAgLy8gIE1ha2Ugc3VyZSB3ZSBhcmUgYm91bmQgdG8gdGhlIG1haW4gZnJhbWUgYnVmZmVyXHJcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyQmVmb3JlUmVuZGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNvbmZpZy5iYWNrZ3JvdW5kQ29sb3I7XHJcblxyXG4gICAgICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3IucmVkR0wsIGNsZWFyQ29sb3IuZ3JlZW5HTCwgY2xlYXJDb2xvci5ibHVlR0wsIGNsZWFyQ29sb3IuYWxwaGFHTCk7XHJcblxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNURU5DSUxfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBpcGVsaW5lcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lc1trZXldLm9uUHJlUmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVE9ETyAtIEZpbmQgYSB3YXkgdG8gc3RvcCBuZWVkaW5nIHRvIGNyZWF0ZSB0aGVzZSBhcnJheXMgZXZlcnkgZnJhbWVcclxuICAgICAgICAvLyAgYW5kIGVxdWFsbHkgbm90IG5lZWQgYSBodWdlIGFycmF5IGJ1ZmZlciBjcmVhdGVkIHRvIGhvbGQgdGhlbVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTY2lzc29yID0gWyAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCBdO1xyXG4gICAgICAgIHRoaXMuc2Npc3NvclN0YWNrID0gWyB0aGlzLmN1cnJlbnRTY2lzc29yIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWUuc2NlbmUuY3VzdG9tVmlld3BvcnRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wuc2Npc3NvcigwLCAodGhpcy5kcmF3aW5nQnVmZmVySGVpZ2h0IC0gdGhpcy5oZWlnaHQpLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRNYXNrLm1hc2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1hc2subWFzayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYXNrU3RhY2subGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQaXBlbGluZSh0aGlzLnBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29yZSByZW5kZXIgc3RlcCBmb3IgYSBTY2VuZSBDYW1lcmEuXHJcbiAgICAgKiBcclxuICAgICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGdpdmVuIEdhbWUgT2JqZWN0J3MgYXJyYXkgYW5kIHJlbmRlcnMgdGhlbSB3aXRoIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBgQ2FtZXJhTWFuYWdlci5yZW5kZXJgIG1ldGhvZC4gVGhlIENhbWVyYSBNYW5hZ2VyIGluc3RhbmNlIGJlbG9uZ3MgdG8gYSBTY2VuZSwgYW5kIGlzIGludm9rZWRcclxuICAgICAqIGJ5IHRoZSBTY2VuZSBTeXN0ZW1zLnJlbmRlciBtZXRob2QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgaWYgYENhbWVyYS52aXNpYmxlYCBpcyBgZmFsc2VgLCBvciBgQ2FtZXJhLmFscGhhYCBpcyB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcmVuZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gcmVuZGVyLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGRyZW4gLSBUaGUgR2FtZSBPYmplY3QncyB3aXRoaW4gdGhlIFNjZW5lIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gVGhlIGludGVycG9sYXRpb24gcGVyY2VudGFnZSB0byBhcHBseS4gQ3VycmVudGx5IHVuLXVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgU2NlbmUgQ2FtZXJhIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChzY2VuZSwgY2hpbGRyZW4sIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dExvc3QpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIHZhciBsaXN0ID0gY2hpbGRyZW4ubGlzdDtcclxuICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGxpc3QubGVuZ3RoO1xyXG4gICAgICAgIHZhciBwaXBlbGluZXMgPSB0aGlzLnBpcGVsaW5lcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBpcGVsaW5lcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lc1trZXldLm9uUmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gICBBcHBseSBzY2lzc29yIGZvciBjYW0gcmVnaW9uICsgcmVuZGVyIGJhY2tncm91bmQgY29sb3IsIGlmIG5vdCB0cmFuc3BhcmVudFxyXG4gICAgICAgIHRoaXMucHJlUmVuZGVyQ2FtZXJhKGNhbWVyYSk7XHJcblxyXG4gICAgICAgIC8vICBOb3RoaW5nIHRvIHJlbmRlciwgc28gYmFpbCBvdXRcclxuICAgICAgICBpZiAoY2hpbGRDb3VudCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QmxlbmRNb2RlKENPTlNULkJsZW5kTW9kZXMuTk9STUFMKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBBcHBsaWVzIGNhbWVyYSBlZmZlY3RzIGFuZCBwb3BzIHRoZSBzY2lzc29yLCBpZiBzZXRcclxuICAgICAgICAgICAgdGhpcy5wb3N0UmVuZGVyQ2FtZXJhKGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzZXQgdGhlIGN1cnJlbnQgdHlwZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFR5cGUgPSAnJztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRNYXNrO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNoaWxkLndpbGxSZW5kZXIoY2FtZXJhKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5ibGVuZE1vZGUgIT09IHRoaXMuY3VycmVudEJsZW5kTW9kZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCbGVuZE1vZGUoY2hpbGQuYmxlbmRNb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hc2sgPSBjaGlsZC5tYXNrO1xyXG5cclxuICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuY3VycmVudE1hc2s7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VycmVudC5tYXNrICYmIGN1cnJlbnQubWFzayAhPT0gbWFzaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFJlbmRlciBvdXQgdGhlIHByZXZpb3VzbHkgc2V0IG1hc2tcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQubWFzay5wb3N0UmVuZGVyV2ViR0wodGhpcywgY3VycmVudC5jYW1lcmEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWFzayAmJiBjdXJyZW50Lm1hc2sgIT09IG1hc2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG1hc2sucHJlUmVuZGVyV2ViR0wodGhpcywgY2hpbGQsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gY2hpbGQudHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlICE9PSB0aGlzLmN1cnJlbnRUeXBlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld1R5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubmV4dFR5cGVNYXRjaCA9IChpIDwgY2hpbGRDb3VudCAtIDEpID8gKGxpc3RbaSArIDFdLnR5cGUgPT09IHRoaXMuY3VycmVudFR5cGUpIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBjaGlsZC5yZW5kZXJXZWJHTCh0aGlzLCBjaGlsZCwgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5ld1R5cGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRNYXNrO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudC5tYXNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFJlbmRlciBvdXQgdGhlIHByZXZpb3VzbHkgc2V0IG1hc2ssIGlmIGl0IHdhcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBkaXNwbGF5IGxpc3RcclxuICAgICAgICAgICAgY3VycmVudC5tYXNrLnBvc3RSZW5kZXJXZWJHTCh0aGlzLCBjdXJyZW50LmNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldEJsZW5kTW9kZShDT05TVC5CbGVuZE1vZGVzLk5PUk1BTCk7XHJcblxyXG4gICAgICAgIC8vICBBcHBsaWVzIGNhbWVyYSBlZmZlY3RzIGFuZCBwb3BzIHRoZSBzY2lzc29yLCBpZiBzZXRcclxuICAgICAgICB0aGlzLnBvc3RSZW5kZXJDYW1lcmEoY2FtZXJhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcG9zdC1yZW5kZXIgc3RlcCBoYXBwZW5zIGFmdGVyIGFsbCBDYW1lcmFzIGluIGFsbCBTY2VuZXMgaGF2ZSBiZWVuIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjcG9zdFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dExvc3QpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIHRoaXMuZmx1c2goKTtcclxuXHJcbiAgICAgICAgLy8gVW5iaW5kIGN1c3RvbSBmcmFtZWJ1ZmZlciBoZXJlXHJcblxyXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc25hcHNob3RTdGF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgV2ViR0xTbmFwc2hvdCh0aGlzLmNhbnZhcywgc3RhdGUpO1xyXG5cclxuICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBpcGVsaW5lcyA9IHRoaXMucGlwZWxpbmVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGlwZWxpbmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGlwZWxpbmVzW2tleV0ub25Qb3N0UmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjaGVkdWxlcyBhIHNuYXBzaG90IG9mIHRoZSBlbnRpcmUgZ2FtZSB2aWV3cG9ydCB0byBiZSB0YWtlbiBhZnRlciB0aGUgY3VycmVudCBmcmFtZSBpcyByZW5kZXJlZC5cclxuICAgICAqIFxyXG4gICAgICogVG8gY2FwdHVyZSBhIHNwZWNpZmljIGFyZWEgc2VlIHRoZSBgc25hcHNob3RBcmVhYCBtZXRob2QuIFRvIGNhcHR1cmUgYSBzcGVjaWZpYyBwaXhlbCwgc2VlIGBzbmFwc2hvdFBpeGVsYC5cclxuICAgICAqIFxyXG4gICAgICogT25seSBvbmUgc25hcHNob3QgY2FuIGJlIGFjdGl2ZSBfcGVyIGZyYW1lXy4gSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxsZWQgYHNuYXBzaG90UGl4ZWxgLCBmb3IgZXhhbXBsZSwgdGhlblxyXG4gICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBTbmFwc2hvdHMgd29yayBieSB1c2luZyB0aGUgV2ViR0wgYHJlYWRQaXhlbHNgIGZlYXR1cmUgdG8gZ3JhYiBldmVyeSBwaXhlbCBmcm9tIHRoZSBmcmFtZSBidWZmZXIgaW50byBhbiBBcnJheUJ1ZmZlclZpZXcuXHJcbiAgICAgKiBJdCB0aGVuIHBhcnNlcyB0aGlzLCBjb3B5aW5nIHRoZSBjb250ZW50cyB0byBhIHRlbXBvcmFyeSBDYW52YXMgYW5kIGZpbmFsbHkgY3JlYXRpbmcgYW4gSW1hZ2Ugb2JqZWN0IGZyb20gaXQsXHJcbiAgICAgKiB3aGljaCBpcyB0aGUgaW1hZ2UgcmV0dXJuZWQgdG8gdGhlIGNhbGxiYWNrIHByb3ZpZGVkLiBBbGwgaW4gYWxsLCB0aGlzIGlzIGEgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSBhbmQgYmxvY2tpbmcgcHJvY2VzcyxcclxuICAgICAqIHdoaWNoIGdldHMgbW9yZSBleHBlbnNpdmUgdGhlIGxhcmdlciB0aGUgY2FudmFzIHNpemUgZ2V0cywgc28gcGxlYXNlIGJlIGNhcmVmdWwgaG93IHlvdSBlbXBsb3kgdGhpcyBpbiB5b3VyIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzbmFwc2hvdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdDogZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCBlbmNvZGVyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdEFyZWEoMCwgMCwgdGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsIHRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCwgY2FsbGJhY2ssIHR5cGUsIGVuY29kZXJPcHRpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2hlZHVsZXMgYSBzbmFwc2hvdCBvZiB0aGUgZ2l2ZW4gYXJlYSBvZiB0aGUgZ2FtZSB2aWV3cG9ydCB0byBiZSB0YWtlbiBhZnRlciB0aGUgY3VycmVudCBmcmFtZSBpcyByZW5kZXJlZC5cclxuICAgICAqIFxyXG4gICAgICogVG8gY2FwdHVyZSB0aGUgd2hvbGUgZ2FtZSB2aWV3cG9ydCBzZWUgdGhlIGBzbmFwc2hvdGAgbWV0aG9kLiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgcGl4ZWwsIHNlZSBgc25hcHNob3RQaXhlbGAuXHJcbiAgICAgKiBcclxuICAgICAqIE9ubHkgb25lIHNuYXBzaG90IGNhbiBiZSBhY3RpdmUgX3BlciBmcmFtZV8uIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsbGVkIGBzbmFwc2hvdFBpeGVsYCwgZm9yIGV4YW1wbGUsIHRoZW5cclxuICAgICAqIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBvdmVycmlkZSBpdC5cclxuICAgICAqIFxyXG4gICAgICogU25hcHNob3RzIHdvcmsgYnkgdXNpbmcgdGhlIFdlYkdMIGByZWFkUGl4ZWxzYCBmZWF0dXJlIHRvIGdyYWIgZXZlcnkgcGl4ZWwgZnJvbSB0aGUgZnJhbWUgYnVmZmVyIGludG8gYW4gQXJyYXlCdWZmZXJWaWV3LlxyXG4gICAgICogSXQgdGhlbiBwYXJzZXMgdGhpcywgY29weWluZyB0aGUgY29udGVudHMgdG8gYSB0ZW1wb3JhcnkgQ2FudmFzIGFuZCBmaW5hbGx5IGNyZWF0aW5nIGFuIEltYWdlIG9iamVjdCBmcm9tIGl0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlIGltYWdlIHJldHVybmVkIHRvIHRoZSBjYWxsYmFjayBwcm92aWRlZC4gQWxsIGluIGFsbCwgdGhpcyBpcyBhIGNvbXB1dGF0aW9uYWxseSBleHBlbnNpdmUgYW5kIGJsb2NraW5nIHByb2Nlc3MsXHJcbiAgICAgKiB3aGljaCBnZXRzIG1vcmUgZXhwZW5zaXZlIHRoZSBsYXJnZXIgdGhlIGNhbnZhcyBzaXplIGdldHMsIHNvIHBsZWFzZSBiZSBjYXJlZnVsIGhvdyB5b3UgZW1wbG95IHRoaXMgaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc25hcHNob3RBcmVhXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGdyYWIgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEgdG8gZ3JhYi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBncmFiLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdEFyZWE6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaywgdHlwZSwgZW5jb2Rlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zbmFwc2hvdFN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHN0YXRlLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHN0YXRlLmVuY29kZXIgPSBlbmNvZGVyT3B0aW9ucztcclxuICAgICAgICBzdGF0ZS5nZXRQaXhlbCA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXRlLnggPSB4O1xyXG4gICAgICAgIHN0YXRlLnkgPSB5O1xyXG4gICAgICAgIHN0YXRlLndpZHRoID0gTWF0aC5taW4od2lkdGgsIHRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoKTtcclxuICAgICAgICBzdGF0ZS5oZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIHRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjaGVkdWxlcyBhIHNuYXBzaG90IG9mIHRoZSBnaXZlbiBwaXhlbCBmcm9tIHRoZSBnYW1lIHZpZXdwb3J0IHRvIGJlIHRha2VuIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lIGlzIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBjYXB0dXJlIHRoZSB3aG9sZSBnYW1lIHZpZXdwb3J0IHNlZSB0aGUgYHNuYXBzaG90YCBtZXRob2QuIFRvIGNhcHR1cmUgYSBzcGVjaWZpYyBhcmVhLCBzZWUgYHNuYXBzaG90QXJlYWAuXHJcbiAgICAgKiBcclxuICAgICAqIE9ubHkgb25lIHNuYXBzaG90IGNhbiBiZSBhY3RpdmUgX3BlciBmcmFtZV8uIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsbGVkIGBzbmFwc2hvdEFyZWFgLCBmb3IgZXhhbXBsZSwgdGhlblxyXG4gICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBVbmxpa2UgdGhlIG90aGVyIHR3byBzbmFwc2hvdCBtZXRob2RzLCB0aGlzIG9uZSB3aWxsIHJldHVybiBhIGBDb2xvcmAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGRhdGEgZm9yXHJcbiAgICAgKiB0aGUgcmVxdWVzdGVkIHBpeGVsLiBJdCBkb2Vzbid0IG5lZWQgdG8gY3JlYXRlIGFuIGludGVybmFsIENhbnZhcyBvciBJbWFnZSBvYmplY3QsIHNvIGlzIGEgbG90IGZhc3RlciB0byBleGVjdXRlLFxyXG4gICAgICogdXNpbmcgbGVzcyBtZW1vcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzbmFwc2hvdFBpeGVsXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gZ2V0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gZ2V0LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBwaXhlbCBkYXRhIGlzIGV4dHJhY3RlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdFBpeGVsOiBmdW5jdGlvbiAoeCwgeSwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdEFyZWEoeCwgeSwgMSwgMSwgY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLnNuYXBzaG90U3RhdGUuZ2V0UGl4ZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBnaXZlbiBhcmVhIG9mIHRoZSBnaXZlbiBmcmFtZSBidWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFVubGlrZSB0aGUgb3RoZXIgc25hcHNob3QgbWV0aG9kcywgdGhpcyBvbmUgaXMgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5IGFuZCBkb2Vzbid0IHdhaXQgZm9yIHRoZSBuZXh0IHJlbmRlci5cclxuICAgICAqIFxyXG4gICAgICogU25hcHNob3RzIHdvcmsgYnkgdXNpbmcgdGhlIFdlYkdMIGByZWFkUGl4ZWxzYCBmZWF0dXJlIHRvIGdyYWIgZXZlcnkgcGl4ZWwgZnJvbSB0aGUgZnJhbWUgYnVmZmVyIGludG8gYW4gQXJyYXlCdWZmZXJWaWV3LlxyXG4gICAgICogSXQgdGhlbiBwYXJzZXMgdGhpcywgY29weWluZyB0aGUgY29udGVudHMgdG8gYSB0ZW1wb3JhcnkgQ2FudmFzIGFuZCBmaW5hbGx5IGNyZWF0aW5nIGFuIEltYWdlIG9iamVjdCBmcm9tIGl0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlIGltYWdlIHJldHVybmVkIHRvIHRoZSBjYWxsYmFjayBwcm92aWRlZC4gQWxsIGluIGFsbCwgdGhpcyBpcyBhIGNvbXB1dGF0aW9uYWxseSBleHBlbnNpdmUgYW5kIGJsb2NraW5nIHByb2Nlc3MsXHJcbiAgICAgKiB3aGljaCBnZXRzIG1vcmUgZXhwZW5zaXZlIHRoZSBsYXJnZXIgdGhlIGNhbnZhcyBzaXplIGdldHMsIHNvIHBsZWFzZSBiZSBjYXJlZnVsIGhvdyB5b3UgZW1wbG95IHRoaXMgaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc25hcHNob3RGcmFtZWJ1ZmZlclxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xGcmFtZWJ1ZmZlcn0gZnJhbWVidWZmZXIgLSBUaGUgZnJhbWVidWZmZXIgdG8gZ3JhYiBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBidWZmZXJXaWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZnJhbWVidWZmZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJ1ZmZlckhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGZyYW1lYnVmZmVyLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZ2V0UGl4ZWw9ZmFsc2VdIC0gR3JhYiBhIHNpbmdsZSBwaXhlbCBhcyBhIENvbG9yIG9iamVjdCwgb3IgYW4gYXJlYSBhcyBhbiBJbWFnZSBvYmplY3Q/XHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt4PTBdIC0gVGhlIHggY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt5PTBdIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1idWZmZXJXaWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEgdG8gZ3JhYi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1idWZmZXJIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBncmFiLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdEZyYW1lYnVmZmVyOiBmdW5jdGlvbiAoZnJhbWVidWZmZXIsIGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQsIGNhbGxiYWNrLCBnZXRQaXhlbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZW5jb2Rlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGdldFBpeGVsID09PSB1bmRlZmluZWQpIHsgZ2V0UGl4ZWwgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBidWZmZXJXaWR0aDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSBidWZmZXJIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRGcmFtZWJ1ZmZlciA9IHRoaXMuY3VycmVudEZyYW1lYnVmZmVyO1xyXG5cclxuICAgICAgICB0aGlzLnNuYXBzaG90QXJlYSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaywgdHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNuYXBzaG90U3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlLmdldFBpeGVsID0gZ2V0UGl4ZWw7XHJcblxyXG4gICAgICAgIHN0YXRlLmlzRnJhbWVidWZmZXIgPSB0cnVlO1xyXG4gICAgICAgIHN0YXRlLmJ1ZmZlcldpZHRoID0gYnVmZmVyV2lkdGg7XHJcbiAgICAgICAgc3RhdGUuYnVmZmVySGVpZ2h0ID0gYnVmZmVySGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnNldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgV2ViR0xTbmFwc2hvdCh0aGlzLmNhbnZhcywgc3RhdGUpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEZyYW1lYnVmZmVyKGN1cnJlbnRGcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgICAgIHN0YXRlLmNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICBzdGF0ZS5pc0ZyYW1lYnVmZmVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgV2ViR0wgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gQ2FudmFzIEVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBgZHN0VGV4dHVyZWAgcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGUgV2ViR0wgVGV4dHVyZSBpcyB1cGRhdGVkLCByYXRoZXIgdGhhbiBjcmVhdGVkIGZyZXNoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjY2FudmFzVG9UZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gc3JjQ2FudmFzIC0gVGhlIENhbnZhcyB0byBjcmVhdGUgdGhlIFdlYkdMIFRleHR1cmUgZnJvbVxyXG4gICAgICogQHBhcmFtIHtXZWJHTFRleHR1cmV9IFtkc3RUZXh0dXJlXSAtIFRoZSBkZXN0aW5hdGlvbiBXZWJHTCBUZXh0dXJlIHRvIHNldC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vUmVwZWF0PWZhbHNlXSAtIFNob3VsZCB0aGlzIGNhbnZhcyBiZSBhbGxvd2VkIHRvIHNldCBgUkVQRUFUYCAoc3VjaCBhcyBmb3IgVGV4dCBvYmplY3RzPylcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZsaXBZPWZhbHNlXSAtIFNob3VsZCB0aGUgV2ViR0wgVGV4dHVyZSBzZXQgYFVOUEFDS19NVUxUSVBMWV9GTElQX1lgP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkLCBvciB1cGRhdGVkLCBXZWJHTCBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICBjYW52YXNUb1RleHR1cmU6IGZ1bmN0aW9uIChzcmNDYW52YXMsIGRzdFRleHR1cmUsIG5vUmVwZWF0LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAobm9SZXBlYXQgPT09IHVuZGVmaW5lZCkgeyBub1JlcGVhdCA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGZsaXBZID09PSB1bmRlZmluZWQpIHsgZmxpcFkgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoIWRzdFRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDYW52YXNUZXh0dXJlKHNyY0NhbnZhcywgbm9SZXBlYXQsIGZsaXBZKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2FudmFzVGV4dHVyZShzcmNDYW52YXMsIGRzdFRleHR1cmUsIGZsaXBZKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXZWJHTCBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBDYW52YXMgRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2NyZWF0ZUNhbnZhc1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gc3JjQ2FudmFzIC0gVGhlIENhbnZhcyB0byBjcmVhdGUgdGhlIFdlYkdMIFRleHR1cmUgZnJvbVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbm9SZXBlYXQ9ZmFsc2VdIC0gU2hvdWxkIHRoaXMgY2FudmFzIGJlIGFsbG93ZWQgdG8gc2V0IGBSRVBFQVRgIChzdWNoIGFzIGZvciBUZXh0IG9iamVjdHM/KVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gU2hvdWxkIHRoZSBXZWJHTCBUZXh0dXJlIHNldCBgVU5QQUNLX01VTFRJUExZX0ZMSVBfWWA/XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1dlYkdMVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgV2ViR0wgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ2FudmFzVGV4dHVyZTogZnVuY3Rpb24gKHNyY0NhbnZhcywgbm9SZXBlYXQsIGZsaXBZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChub1JlcGVhdCA9PT0gdW5kZWZpbmVkKSB7IG5vUmVwZWF0ID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoZmxpcFkgPT09IHVuZGVmaW5lZCkgeyBmbGlwWSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIG1pbkZpbHRlciA9IGdsLk5FQVJFU1Q7XHJcbiAgICAgICAgdmFyIG1hZ0ZpbHRlciA9IGdsLk5FQVJFU1Q7XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IHNyY0NhbnZhcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gc3JjQ2FudmFzLmhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHdyYXBwaW5nID0gZ2wuQ0xBTVBfVE9fRURHRTtcclxuXHJcbiAgICAgICAgdmFyIHBvdyA9IElzU2l6ZVBvd2VyT2ZUd28od2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICghbm9SZXBlYXQgJiYgcG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd3JhcHBpbmcgPSBnbC5SRVBFQVQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW50aWFsaWFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWluRmlsdGVyID0gKHBvdykgPyB0aGlzLm1pcG1hcEZpbHRlciA6IGdsLkxJTkVBUjtcclxuICAgICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTElORUFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dHVyZTJEKDAsIG1pbkZpbHRlciwgbWFnRmlsdGVyLCB3cmFwcGluZywgd3JhcHBpbmcsIGdsLlJHQkEsIHNyY0NhbnZhcywgd2lkdGgsIGhlaWdodCwgdHJ1ZSwgZmFsc2UsIGZsaXBZKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGEgV2ViR0wgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gQ2FudmFzIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciN1cGRhdGVDYW52YXNUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IHNyY0NhbnZhcyAtIFRoZSBDYW52YXMgdG8gdXBkYXRlIHRoZSBXZWJHTCBUZXh0dXJlIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gZHN0VGV4dHVyZSAtIFRoZSBkZXN0aW5hdGlvbiBXZWJHTCBUZXh0dXJlIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZsaXBZPWZhbHNlXSAtIFNob3VsZCB0aGUgV2ViR0wgVGV4dHVyZSBzZXQgYFVOUEFDS19NVUxUSVBMWV9GTElQX1lgP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFRleHR1cmV9IFRoZSB1cGRhdGVkIFdlYkdMIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNhbnZhc1RleHR1cmU6IGZ1bmN0aW9uIChzcmNDYW52YXMsIGRzdFRleHR1cmUsIGZsaXBZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmbGlwWSA9PT0gdW5kZWZpbmVkKSB7IGZsaXBZID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gc3JjQ2FudmFzLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBzcmNDYW52YXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUyRChkc3RUZXh0dXJlLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsIGZsaXBZKTtcclxuXHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgc3JjQ2FudmFzKTtcclxuICAgIFxyXG4gICAgICAgICAgICBkc3RUZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIGRzdFRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dHVyZTJEKG51bGwsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRzdFRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXZWJHTCBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBIVE1MIFZpZGVvIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNjcmVhdGVWaWRlb1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MVmlkZW9FbGVtZW50fSBzcmNWaWRlbyAtIFRoZSBWaWRlbyB0byBjcmVhdGUgdGhlIFdlYkdMIFRleHR1cmUgZnJvbVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbm9SZXBlYXQ9ZmFsc2VdIC0gU2hvdWxkIHRoaXMgY2FudmFzIGJlIGFsbG93ZWQgdG8gc2V0IGBSRVBFQVRgP1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gU2hvdWxkIHRoZSBXZWJHTCBUZXh0dXJlIHNldCBgVU5QQUNLX01VTFRJUExZX0ZMSVBfWWA/XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1dlYkdMVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgV2ViR0wgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlVmlkZW9UZXh0dXJlOiBmdW5jdGlvbiAoc3JjVmlkZW8sIG5vUmVwZWF0LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAobm9SZXBlYXQgPT09IHVuZGVmaW5lZCkgeyBub1JlcGVhdCA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGZsaXBZID09PSB1bmRlZmluZWQpIHsgZmxpcFkgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBtaW5GaWx0ZXIgPSBnbC5ORUFSRVNUO1xyXG4gICAgICAgIHZhciBtYWdGaWx0ZXIgPSBnbC5ORUFSRVNUO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSBzcmNWaWRlby52aWRlb1dpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBzcmNWaWRlby52aWRlb0hlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHdyYXBwaW5nID0gZ2wuQ0xBTVBfVE9fRURHRTtcclxuXHJcbiAgICAgICAgdmFyIHBvdyA9IElzU2l6ZVBvd2VyT2ZUd28od2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICghbm9SZXBlYXQgJiYgcG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd3JhcHBpbmcgPSBnbC5SRVBFQVQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW50aWFsaWFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWluRmlsdGVyID0gKHBvdykgPyB0aGlzLm1pcG1hcEZpbHRlciA6IGdsLkxJTkVBUjtcclxuICAgICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTElORUFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dHVyZTJEKDAsIG1pbkZpbHRlciwgbWFnRmlsdGVyLCB3cmFwcGluZywgd3JhcHBpbmcsIGdsLlJHQkEsIHNyY1ZpZGVvLCB3aWR0aCwgaGVpZ2h0LCB0cnVlLCB0cnVlLCBmbGlwWSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhIFdlYkdMIFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIEhUTUwgVmlkZW8gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3VwZGF0ZVZpZGVvVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxWaWRlb0VsZW1lbnR9IHNyY1ZpZGVvIC0gVGhlIFZpZGVvIHRvIHVwZGF0ZSB0aGUgV2ViR0wgVGV4dHVyZSB3aXRoLlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFRleHR1cmV9IGRzdFRleHR1cmUgLSBUaGUgZGVzdGluYXRpb24gV2ViR0wgVGV4dHVyZSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmbGlwWT1mYWxzZV0gLSBTaG91bGQgdGhlIFdlYkdMIFRleHR1cmUgc2V0IGBVTlBBQ0tfTVVMVElQTFlfRkxJUF9ZYD9cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7V2ViR0xUZXh0dXJlfSBUaGUgdXBkYXRlZCBXZWJHTCBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVWaWRlb1RleHR1cmU6IGZ1bmN0aW9uIChzcmNWaWRlbywgZHN0VGV4dHVyZSwgZmxpcFkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZsaXBZID09PSB1bmRlZmluZWQpIHsgZmxpcFkgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSBzcmNWaWRlby52aWRlb1dpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBzcmNWaWRlby52aWRlb0hlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQoZHN0VGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCBmbGlwWSk7XHJcblxyXG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHNyY1ZpZGVvKTtcclxuXHJcbiAgICAgICAgICAgIGRzdFRleHR1cmUud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgZHN0VGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUyRChudWxsLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkc3RUZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1pbmlmaWNhdGlvbiBhbmQgbWFnbmlmaWNhdGlvbiBmaWx0ZXIgZm9yIGEgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3NldFRleHR1cmVGaWx0ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHNldCB0aGUgZmlsdGVyIGZvci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gZmlsdGVyIC0gVGhlIGZpbHRlciB0byBzZXQuIDAgZm9yIGxpbmVhciBmaWx0ZXJpbmcsIDEgZm9yIG5lYXJlc3QgbmVpZ2hib3IgKGJsb2NreSkgZmlsdGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0wgUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRleHR1cmVGaWx0ZXI6IGZ1bmN0aW9uICh0ZXh0dXJlLCBmaWx0ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgZ2xGaWx0ZXIgPSBbIGdsLkxJTkVBUiwgZ2wuTkVBUkVTVCBdW2ZpbHRlcl07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2xGaWx0ZXIpO1xyXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbEZpbHRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZTJEKG51bGwsIDApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRGbG9hdDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xQcm9ncmFtfSBwcm9ncmFtIC0gVGhlIHRhcmdldCBXZWJHTFByb2dyYW0gZnJvbSB3aGljaCB0aGUgdW5pZm9ybSBsb2NhdGlvbiB3aWxsIGJlIGxvb2tlZC11cC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQxOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0RmxvYXQyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQyOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTJmKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0RmxvYXQzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGbG9hdDM6IGZ1bmN0aW9uIChwcm9ncmFtLCBuYW1lLCB4LCB5LCB6KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgdGhpcy5nbC51bmlmb3JtM2YodGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksIHgsIHksIHopO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHVuaWZvcm0gb2YgYSBXZWJHTFByb2dyYW1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3NldEZsb2F0NFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgdGFyZ2V0IFdlYkdMUHJvZ3JhbSBmcm9tIHdoaWNoIHRoZSB1bmlmb3JtIGxvY2F0aW9uIHdpbGwgYmUgbG9va2VkLXVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFggY29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFogY29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdyAtIFcgY29tcG9uZW50XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQ0OiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeCwgeSwgeiwgdylcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRGbG9hdDF2XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgdGFyZ2V0IFdlYkdMUHJvZ3JhbSBmcm9tIHdoaWNoIHRoZSB1bmlmb3JtIGxvY2F0aW9uIHdpbGwgYmUgbG9va2VkLXVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgdW5pZm9ybSB2YXJpYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGbG9hdDF2OiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgYXJyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgdGhpcy5nbC51bmlmb3JtMWZ2KHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCBhcnIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHVuaWZvcm0gdmFyaWFibGUgaW4gdGhlIGdpdmVuIFdlYkdMUHJvZ3JhbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI3NldEZsb2F0MnZcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnIgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSB1bmlmb3JtIHZhcmlhYmxlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0wgUmVuZGVyZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsb2F0MnY6IGZ1bmN0aW9uIChwcm9ncmFtLCBuYW1lLCBhcnIpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnVuaWZvcm0yZnYodGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksIGFycik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgdW5pZm9ybSB2YXJpYWJsZSBpbiB0aGUgZ2l2ZW4gV2ViR0xQcm9ncmFtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0RmxvYXQzdlxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xQcm9ncmFtfSBwcm9ncmFtIC0gVGhlIHRhcmdldCBXZWJHTFByb2dyYW0gZnJvbSB3aGljaCB0aGUgdW5pZm9ybSBsb2NhdGlvbiB3aWxsIGJlIGxvb2tlZC11cC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gdG8gbG9vay11cCBhbmQgbW9kaWZ5LlxyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFyciAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIHVuaWZvcm0gdmFyaWFibGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxvYXQzdjogZnVuY3Rpb24gKHByb2dyYW0sIG5hbWUsIGFycilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTNmdih0aGlzLmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSwgYXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRGbG9hdDR2XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgdGFyZ2V0IFdlYkdMUHJvZ3JhbSBmcm9tIHdoaWNoIHRoZSB1bmlmb3JtIGxvY2F0aW9uIHdpbGwgYmUgbG9va2VkLXVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgdW5pZm9ybSB2YXJpYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcblxyXG4gICAgc2V0RmxvYXQ0djogZnVuY3Rpb24gKHByb2dyYW0sIG5hbWUsIGFycilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTRmdih0aGlzLmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSwgYXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRJbnQxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJbnQxOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTFpKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRJbnQyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSBuZXcgWCBjb21wb25lbnRcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSBuZXcgWSBjb21wb25lbnRcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJbnQyOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTJpKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRJbnQzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSBuZXcgWCBjb21wb25lbnRcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSBuZXcgWSBjb21wb25lbnRcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geiAtIFRoZSBuZXcgWiBjb21wb25lbnRcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJbnQzOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFByb2dyYW0ocHJvZ3JhbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2wudW5pZm9ybTNpKHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB4LCB5LCB6KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRJbnQ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFggY29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBZIGNvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB6IC0gWiBjb21wb25lbnRcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdyAtIFcgY29tcG9uZW50XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW50NDogZnVuY3Rpb24gKHByb2dyYW0sIG5hbWUsIHgsIHksIHosIHcpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnVuaWZvcm00aSh0aGlzLmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSwgeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgMngyIG1hdHJpeCB1bmlmb3JtIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBXZWJHTFByb2dyYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciNzZXRNYXRyaXgyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbSAtIFRoZSB0YXJnZXQgV2ViR0xQcm9ncmFtIGZyb20gd2hpY2ggdGhlIHVuaWZvcm0gbG9jYXRpb24gd2lsbCBiZSBsb29rZWQtdXAuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2stdXAgYW5kIG1vZGlmeS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhbnNwb3NlIC0gVGhlIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeC4gTXVzdCBiZSBmYWxzZS5cclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBtYXRyaXggLSBUaGUgbmV3IG1hdHJpeCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNYXRyaXgyOiBmdW5jdGlvbiAocHJvZ3JhbSwgbmFtZSwgdHJhbnNwb3NlLCBtYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksIHRyYW5zcG9zZSwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0TWF0cml4M1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgdGFyZ2V0IFdlYkdMUHJvZ3JhbSBmcm9tIHdoaWNoIHRoZSB1bmlmb3JtIGxvY2F0aW9uIHdpbGwgYmUgbG9va2VkLXVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBtYXRyaXggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWF0cml4MzogZnVuY3Rpb24gKHByb2dyYW0sIG5hbWUsIHRyYW5zcG9zZSwgbWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB0cmFuc3Bvc2UsIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdW5pZm9ybSBvZiBhIFdlYkdMUHJvZ3JhbVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjc2V0TWF0cml4NFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFByb2dyYW19IHByb2dyYW0gLSBUaGUgdGFyZ2V0IFdlYkdMUHJvZ3JhbSBmcm9tIHdoaWNoIHRoZSB1bmlmb3JtIGxvY2F0aW9uIHdpbGwgYmUgbG9va2VkLXVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rLXVwIGFuZCBtb2RpZnkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSAtIElzIHRoZSBtYXRyaXggdHJhbnNwb3NlZFxyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IG1hdHJpeCAtIE1hdHJpeCBkYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWF0cml4NDogZnVuY3Rpb24gKHByb2dyYW0sIG5hbWUsIHRyYW5zcG9zZSwgbWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLCB0cmFuc3Bvc2UsIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRleHR1cmUgdW5pdHMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIGZyYWdtZW50IHNoYWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2dldE1heFRleHR1cmVzXHJcbiAgICAgKiBAc2luY2UgMy44LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGV4dHVyZXMgV2ViR0wgc3VwcG9ydHMuXHJcbiAgICAgKi9cclxuICAgIGdldE1heFRleHR1cmVzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tYXhUZXh0dXJlcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHRleHR1cmUgc2l6ZSAoZWl0aGVyIHdpZHRoIG9yIGhlaWdodCkgdGhhdCBjYW4gYmUgY3JlYXRlZC5cclxuICAgICAqIE5vdGUgdGhhdCBWUkFNIG1heSBub3QgYWxsb3cgYSB0ZXh0dXJlIG9mIGFueSBnaXZlbiBzaXplLCBpdCBqdXN0IGV4cHJlc3Nlc1xyXG4gICAgICogaGFyZHdhcmUgLyBkcml2ZXIgc3VwcG9ydCBmb3IgYSBnaXZlbiBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIjZ2V0TWF4VGV4dHVyZVNpemVcclxuICAgICAqIEBzaW5jZSAzLjguMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB0ZXh0dXJlIHNpemUuXHJcbiAgICAgKi9cclxuICAgIGdldE1heFRleHR1cmVTaXplOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tYXhUZXh0dXJlU2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoaXMgV2ViR0xSZW5kZXJlciwgY2xlYW5pbmcgdXAgYWxsIHJlbGF0ZWQgcmVzb3VyY2VzIHN1Y2ggYXMgcGlwZWxpbmVzLCBuYXRpdmUgdGV4dHVyZXMsIGV0Yy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBDbGVhci11cCBhbnl0aGluZyB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIDopXHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5uYXRpdmVUZXh0dXJlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLm5hdGl2ZVRleHR1cmVzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmF0aXZlVGV4dHVyZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMucGlwZWxpbmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5waXBlbGluZXNba2V5XS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5waXBlbGluZXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENhbWVyYS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudE1hc2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1hc2sgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5jb250ZXh0TG9zdEhhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuY29udGV4dFJlc3RvcmVkSGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ2wgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5tYXNrU3RhY2sgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0TG9zdCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHt9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer.WebGL\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Utils: __webpack_require__(/*! ./Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\"),\r\n    WebGLPipeline: __webpack_require__(/*! ./WebGLPipeline */ \"./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js\"),\r\n    WebGLRenderer: __webpack_require__(/*! ./WebGLRenderer */ \"./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js\"),\r\n    Pipelines: __webpack_require__(/*! ./pipelines */ \"./node_modules/phaser/src/renderer/webgl/pipelines/index.js\"),\r\n\r\n    // Constants\r\n    BYTE: 0,\r\n    SHORT: 1,\r\n    UNSIGNED_BYTE: 2,\r\n    UNSIGNED_SHORT: 3,\r\n    FLOAT: 4\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9pbmRleC5qcz9lNGM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLGtFQUFTO0FBQzVCLG1CQUFtQixtQkFBTyxDQUFDLGtGQUFpQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBaUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLGdGQUFhOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlJlbmRlcmVyLldlYkdMXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgVXRpbHM6IHJlcXVpcmUoJy4vVXRpbHMnKSxcclxuICAgIFdlYkdMUGlwZWxpbmU6IHJlcXVpcmUoJy4vV2ViR0xQaXBlbGluZScpLFxyXG4gICAgV2ViR0xSZW5kZXJlcjogcmVxdWlyZSgnLi9XZWJHTFJlbmRlcmVyJyksXHJcbiAgICBQaXBlbGluZXM6IHJlcXVpcmUoJy4vcGlwZWxpbmVzJyksXHJcblxyXG4gICAgLy8gQ29uc3RhbnRzXHJcbiAgICBCWVRFOiAwLFxyXG4gICAgU0hPUlQ6IDEsXHJcbiAgICBVTlNJR05FRF9CWVRFOiAyLFxyXG4gICAgVU5TSUdORURfU0hPUlQ6IDMsXHJcbiAgICBGTE9BVDogNFxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/pipelines/BitmapMaskPipeline.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/pipelines/BitmapMaskPipeline.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ShaderSourceFS = __webpack_require__(/*! ../shaders/BitmapMask-frag.js */ \"./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-frag.js\");\r\nvar ShaderSourceVS = __webpack_require__(/*! ../shaders/BitmapMask-vert.js */ \"./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-vert.js\");\r\nvar WebGLPipeline = __webpack_require__(/*! ../WebGLPipeline */ \"./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js\");\r\n\r\n/**\r\n * @classdesc\r\n * BitmapMaskPipeline handles all bitmap masking rendering in WebGL. It works by using \r\n * sampling two texture on the fragment shader and using the fragment's alpha to clip the region.\r\n * The config properties are:\r\n * - game: Current game instance.\r\n * - renderer: Current WebGL renderer.\r\n * - topology: This indicates how the primitives are rendered. The default value is GL_TRIANGLES.\r\n *              Here is the full list of rendering primitives (https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants).\r\n * - vertShader: Source for vertex shader as a string.\r\n * - fragShader: Source for fragment shader as a string.\r\n * - vertexCapacity: The amount of vertices that shall be allocated\r\n * - vertexSize: The size of a single vertex in bytes.\r\n *\r\n * @class BitmapMaskPipeline\r\n * @extends Phaser.Renderer.WebGL.WebGLPipeline\r\n * @memberof Phaser.Renderer.WebGL.Pipelines\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - Used for overriding shader an pipeline properties if extending this pipeline.\r\n */\r\nvar BitmapMaskPipeline = new Class({\r\n\r\n    Extends: WebGLPipeline,\r\n    \r\n    initialize:\r\n\r\n    function BitmapMaskPipeline (config)\r\n    {\r\n        WebGLPipeline.call(this, {\r\n            game: config.game,\r\n            renderer: config.renderer,\r\n            gl: config.renderer.gl,\r\n            topology: (config.topology ? config.topology : config.renderer.gl.TRIANGLES),\r\n            vertShader: (config.vertShader ? config.vertShader : ShaderSourceVS),\r\n            fragShader: (config.fragShader ? config.fragShader : ShaderSourceFS),\r\n            vertexCapacity: (config.vertexCapacity ? config.vertexCapacity : 3),\r\n\r\n            vertexSize: (config.vertexSize ? config.vertexSize :\r\n                Float32Array.BYTES_PER_ELEMENT * 2),\r\n\r\n            vertices: new Float32Array([\r\n                -1, +1, -1, -7, +7, +1\r\n            ]).buffer,\r\n\r\n            attributes: [\r\n                {\r\n                    name: 'inPosition',\r\n                    size: 2,\r\n                    type: config.renderer.gl.FLOAT,\r\n                    normalized: false,\r\n                    offset: 0\r\n                }\r\n            ]\r\n        });\r\n\r\n        /**\r\n         * Float32 view of the array buffer containing the pipeline's vertices.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#vertexViewF32\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexViewF32 = new Float32Array(this.vertexData);\r\n\r\n        /**\r\n         * Size of the batch.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#maxQuads\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.maxQuads = 1;\r\n\r\n        /**\r\n         * Dirty flag to check if resolution properties need to be updated on the \r\n         * masking shader.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#resolutionDirty\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.resolutionDirty = true;\r\n    },\r\n\r\n    /**\r\n     * Called every time the pipeline needs to be used.\r\n     * It binds all necessary resources.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#onBind\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onBind: function ()\r\n    {\r\n        WebGLPipeline.prototype.onBind.call(this);\r\n\r\n        var renderer = this.renderer;\r\n        var program = this.program;\r\n        \r\n        if (this.resolutionDirty)\r\n        {\r\n            renderer.setFloat2(program, 'uResolution', this.width, this.height);\r\n            renderer.setInt1(program, 'uMainSampler', 0);\r\n            renderer.setInt1(program, 'uMaskSampler', 1);\r\n            this.resolutionDirty = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * [description]\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#resize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - [description]\r\n     * @param {number} height - [description]\r\n     * @param {number} resolution - [description]\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    resize: function (width, height, resolution)\r\n    {\r\n        WebGLPipeline.prototype.resize.call(this, width, height, resolution);\r\n        this.resolutionDirty = true;\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Binds necessary resources and renders the mask to a separated framebuffer.\r\n     * The framebuffer for the masked object is also bound for further use.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#beginMask\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} mask - GameObject used as mask.\r\n     * @param {Phaser.GameObjects.GameObject} maskedObject - GameObject masked by the mask GameObject.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - [description]\r\n     */\r\n    beginMask: function (mask, maskedObject, camera)\r\n    {\r\n        var renderer = this.renderer;\r\n        var gl = this.gl;\r\n\r\n        //  The renderable Game Object that is being used for the bitmap mask\r\n        var bitmapMask = mask.bitmapMask;\r\n\r\n        if (bitmapMask && gl)\r\n        {\r\n            renderer.flush();\r\n\r\n            mask.prevFramebuffer = renderer.currentFramebuffer;\r\n\r\n            renderer.setFramebuffer(mask.mainFramebuffer);\r\n\r\n            gl.disable(gl.STENCIL_TEST);\r\n\r\n            gl.clearColor(0, 0, 0, 0);\r\n\r\n            gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n            if (renderer.currentCameraMask.mask !== mask)\r\n            {\r\n                renderer.currentMask.mask = mask;\r\n                renderer.currentMask.camera = camera;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The masked game objects framebuffer is unbound and its texture \r\n     * is bound together with the mask texture and the mask shader and \r\n     * a draw call with a single quad is processed. Here is where the\r\n     * masking effect is applied.  \r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.BitmapMaskPipeline#endMask\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} mask - GameObject used as a mask.\r\n     */\r\n    endMask: function (mask, camera)\r\n    {\r\n        var gl = this.gl;\r\n        var renderer = this.renderer;\r\n\r\n        //  The renderable Game Object that is being used for the bitmap mask\r\n        var bitmapMask = mask.bitmapMask;\r\n\r\n        if (bitmapMask && gl)\r\n        {\r\n            renderer.flush();\r\n\r\n            //  First we draw the mask to the mask fb\r\n            renderer.setFramebuffer(mask.maskFramebuffer);\r\n\r\n            gl.clearColor(0, 0, 0, 0);\r\n            gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n            renderer.setBlendMode(0, true);\r\n\r\n            bitmapMask.renderWebGL(renderer, bitmapMask, 0, camera);\r\n\r\n            renderer.flush();\r\n\r\n            renderer.setFramebuffer(mask.prevFramebuffer);\r\n\r\n            //  Is there a stencil further up the stack?\r\n            var prev = renderer.getCurrentStencilMask();\r\n\r\n            if (prev)\r\n            {\r\n                gl.enable(gl.STENCIL_TEST);\r\n\r\n                prev.mask.applyStencil(renderer, prev.camera, true);\r\n            }\r\n            else\r\n            {\r\n                renderer.currentMask.mask = null;\r\n            }\r\n\r\n            //  Bind bitmap mask pipeline and draw\r\n            renderer.setPipeline(this);\r\n\r\n            gl.activeTexture(gl.TEXTURE1);\r\n            gl.bindTexture(gl.TEXTURE_2D, mask.maskTexture);\r\n\r\n            gl.activeTexture(gl.TEXTURE0);\r\n            gl.bindTexture(gl.TEXTURE_2D, mask.mainTexture);\r\n\r\n            gl.uniform1i(gl.getUniformLocation(this.program, 'uInvertMaskAlpha'), mask.invertAlpha);\r\n\r\n            //  Finally, draw a triangle filling the whole screen\r\n            gl.drawArrays(this.topology, 0, 3);\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BitmapMaskPipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvQml0bWFwTWFza1BpcGVsaW5lLmpzP2FmMDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQywwR0FBK0I7QUFDNUQscUJBQXFCLG1CQUFPLENBQUMsMEdBQStCO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvd2ViZ2wvcGlwZWxpbmVzL0JpdG1hcE1hc2tQaXBlbGluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFNoYWRlclNvdXJjZUZTID0gcmVxdWlyZSgnLi4vc2hhZGVycy9CaXRtYXBNYXNrLWZyYWcuanMnKTtcclxudmFyIFNoYWRlclNvdXJjZVZTID0gcmVxdWlyZSgnLi4vc2hhZGVycy9CaXRtYXBNYXNrLXZlcnQuanMnKTtcclxudmFyIFdlYkdMUGlwZWxpbmUgPSByZXF1aXJlKCcuLi9XZWJHTFBpcGVsaW5lJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBCaXRtYXBNYXNrUGlwZWxpbmUgaGFuZGxlcyBhbGwgYml0bWFwIG1hc2tpbmcgcmVuZGVyaW5nIGluIFdlYkdMLiBJdCB3b3JrcyBieSB1c2luZyBcclxuICogc2FtcGxpbmcgdHdvIHRleHR1cmUgb24gdGhlIGZyYWdtZW50IHNoYWRlciBhbmQgdXNpbmcgdGhlIGZyYWdtZW50J3MgYWxwaGEgdG8gY2xpcCB0aGUgcmVnaW9uLlxyXG4gKiBUaGUgY29uZmlnIHByb3BlcnRpZXMgYXJlOlxyXG4gKiAtIGdhbWU6IEN1cnJlbnQgZ2FtZSBpbnN0YW5jZS5cclxuICogLSByZW5kZXJlcjogQ3VycmVudCBXZWJHTCByZW5kZXJlci5cclxuICogLSB0b3BvbG9neTogVGhpcyBpbmRpY2F0ZXMgaG93IHRoZSBwcmltaXRpdmVzIGFyZSByZW5kZXJlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgR0xfVFJJQU5HTEVTLlxyXG4gKiAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZnVsbCBsaXN0IG9mIHJlbmRlcmluZyBwcmltaXRpdmVzIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xfQVBJL0NvbnN0YW50cykuXHJcbiAqIC0gdmVydFNoYWRlcjogU291cmNlIGZvciB2ZXJ0ZXggc2hhZGVyIGFzIGEgc3RyaW5nLlxyXG4gKiAtIGZyYWdTaGFkZXI6IFNvdXJjZSBmb3IgZnJhZ21lbnQgc2hhZGVyIGFzIGEgc3RyaW5nLlxyXG4gKiAtIHZlcnRleENhcGFjaXR5OiBUaGUgYW1vdW50IG9mIHZlcnRpY2VzIHRoYXQgc2hhbGwgYmUgYWxsb2NhdGVkXHJcbiAqIC0gdmVydGV4U2l6ZTogVGhlIHNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQml0bWFwTWFza1BpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFVzZWQgZm9yIG92ZXJyaWRpbmcgc2hhZGVyIGFuIHBpcGVsaW5lIHByb3BlcnRpZXMgaWYgZXh0ZW5kaW5nIHRoaXMgcGlwZWxpbmUuXHJcbiAqL1xyXG52YXIgQml0bWFwTWFza1BpcGVsaW5lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBXZWJHTFBpcGVsaW5lLFxyXG4gICAgXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJpdG1hcE1hc2tQaXBlbGluZSAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIFdlYkdMUGlwZWxpbmUuY2FsbCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGdhbWU6IGNvbmZpZy5nYW1lLFxyXG4gICAgICAgICAgICByZW5kZXJlcjogY29uZmlnLnJlbmRlcmVyLFxyXG4gICAgICAgICAgICBnbDogY29uZmlnLnJlbmRlcmVyLmdsLFxyXG4gICAgICAgICAgICB0b3BvbG9neTogKGNvbmZpZy50b3BvbG9neSA/IGNvbmZpZy50b3BvbG9neSA6IGNvbmZpZy5yZW5kZXJlci5nbC5UUklBTkdMRVMpLFxyXG4gICAgICAgICAgICB2ZXJ0U2hhZGVyOiAoY29uZmlnLnZlcnRTaGFkZXIgPyBjb25maWcudmVydFNoYWRlciA6IFNoYWRlclNvdXJjZVZTKSxcclxuICAgICAgICAgICAgZnJhZ1NoYWRlcjogKGNvbmZpZy5mcmFnU2hhZGVyID8gY29uZmlnLmZyYWdTaGFkZXIgOiBTaGFkZXJTb3VyY2VGUyksXHJcbiAgICAgICAgICAgIHZlcnRleENhcGFjaXR5OiAoY29uZmlnLnZlcnRleENhcGFjaXR5ID8gY29uZmlnLnZlcnRleENhcGFjaXR5IDogMyksXHJcblxyXG4gICAgICAgICAgICB2ZXJ0ZXhTaXplOiAoY29uZmlnLnZlcnRleFNpemUgPyBjb25maWcudmVydGV4U2l6ZSA6XHJcbiAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAyKSxcclxuXHJcbiAgICAgICAgICAgIHZlcnRpY2VzOiBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgICAgIC0xLCArMSwgLTEsIC03LCArNywgKzFcclxuICAgICAgICAgICAgXSkuYnVmZmVyLFxyXG5cclxuICAgICAgICAgICAgYXR0cmlidXRlczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpblBvc2l0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbmZpZy5yZW5kZXJlci5nbC5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGbG9hdDMyIHZpZXcgb2YgdGhlIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIHRoZSBwaXBlbGluZSdzIHZlcnRpY2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5CaXRtYXBNYXNrUGlwZWxpbmUjdmVydGV4Vmlld0YzMlxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhWaWV3RjMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTaXplIG9mIHRoZSBiYXRjaC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuQml0bWFwTWFza1BpcGVsaW5lI21heFF1YWRzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhRdWFkcyA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERpcnR5IGZsYWcgdG8gY2hlY2sgaWYgcmVzb2x1dGlvbiBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgdXBkYXRlZCBvbiB0aGUgXHJcbiAgICAgICAgICogbWFza2luZyBzaGFkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLkJpdG1hcE1hc2tQaXBlbGluZSNyZXNvbHV0aW9uRGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uRGlydHkgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBwaXBlbGluZSBuZWVkcyB0byBiZSB1c2VkLlxyXG4gICAgICogSXQgYmluZHMgYWxsIG5lY2Vzc2FyeSByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLkJpdG1hcE1hc2tQaXBlbGluZSNvbkJpbmRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb25CaW5kOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIFdlYkdMUGlwZWxpbmUucHJvdG90eXBlLm9uQmluZC5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnJlc29sdXRpb25EaXJ0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEZsb2F0Mihwcm9ncmFtLCAndVJlc29sdXRpb24nLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEludDEocHJvZ3JhbSwgJ3VNYWluU2FtcGxlcicsIDApO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRJbnQxKHByb2dyYW0sICd1TWFza1NhbXBsZXInLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHV0aW9uRGlydHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuQml0bWFwTWFza1BpcGVsaW5lI3Jlc2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZXNvbHV0aW9uIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgcmVzb2x1dGlvbilcclxuICAgIHtcclxuICAgICAgICBXZWJHTFBpcGVsaW5lLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0LCByZXNvbHV0aW9uKTtcclxuICAgICAgICB0aGlzLnJlc29sdXRpb25EaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZHMgbmVjZXNzYXJ5IHJlc291cmNlcyBhbmQgcmVuZGVycyB0aGUgbWFzayB0byBhIHNlcGFyYXRlZCBmcmFtZWJ1ZmZlci5cclxuICAgICAqIFRoZSBmcmFtZWJ1ZmZlciBmb3IgdGhlIG1hc2tlZCBvYmplY3QgaXMgYWxzbyBib3VuZCBmb3IgZnVydGhlciB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLkJpdG1hcE1hc2tQaXBlbGluZSNiZWdpbk1hc2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBHYW1lT2JqZWN0IHVzZWQgYXMgbWFzay5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2tlZE9iamVjdCAtIEdhbWVPYmplY3QgbWFza2VkIGJ5IHRoZSBtYXNrIEdhbWVPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGJlZ2luTWFzazogZnVuY3Rpb24gKG1hc2ssIG1hc2tlZE9iamVjdCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgdXNlZCBmb3IgdGhlIGJpdG1hcCBtYXNrXHJcbiAgICAgICAgdmFyIGJpdG1hcE1hc2sgPSBtYXNrLmJpdG1hcE1hc2s7XHJcblxyXG4gICAgICAgIGlmIChiaXRtYXBNYXNrICYmIGdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIG1hc2sucHJldkZyYW1lYnVmZmVyID0gcmVuZGVyZXIuY3VycmVudEZyYW1lYnVmZmVyO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0RnJhbWVidWZmZXIobWFzay5tYWluRnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG5cclxuICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLmN1cnJlbnRDYW1lcmFNYXNrLm1hc2sgIT09IG1hc2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLmN1cnJlbnRNYXNrLm1hc2sgPSBtYXNrO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudE1hc2suY2FtZXJhID0gY2FtZXJhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXNrZWQgZ2FtZSBvYmplY3RzIGZyYW1lYnVmZmVyIGlzIHVuYm91bmQgYW5kIGl0cyB0ZXh0dXJlIFxyXG4gICAgICogaXMgYm91bmQgdG9nZXRoZXIgd2l0aCB0aGUgbWFzayB0ZXh0dXJlIGFuZCB0aGUgbWFzayBzaGFkZXIgYW5kIFxyXG4gICAgICogYSBkcmF3IGNhbGwgd2l0aCBhIHNpbmdsZSBxdWFkIGlzIHByb2Nlc3NlZC4gSGVyZSBpcyB3aGVyZSB0aGVcclxuICAgICAqIG1hc2tpbmcgZWZmZWN0IGlzIGFwcGxpZWQuICBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuQml0bWFwTWFza1BpcGVsaW5lI2VuZE1hc2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBHYW1lT2JqZWN0IHVzZWQgYXMgYSBtYXNrLlxyXG4gICAgICovXHJcbiAgICBlbmRNYXNrOiBmdW5jdGlvbiAobWFzaywgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLy8gIFRoZSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgdXNlZCBmb3IgdGhlIGJpdG1hcCBtYXNrXHJcbiAgICAgICAgdmFyIGJpdG1hcE1hc2sgPSBtYXNrLmJpdG1hcE1hc2s7XHJcblxyXG4gICAgICAgIGlmIChiaXRtYXBNYXNrICYmIGdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBGaXJzdCB3ZSBkcmF3IHRoZSBtYXNrIHRvIHRoZSBtYXNrIGZiXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG1hc2subWFza0ZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QmxlbmRNb2RlKDAsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgYml0bWFwTWFzay5yZW5kZXJXZWJHTChyZW5kZXJlciwgYml0bWFwTWFzaywgMCwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmZsdXNoKCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcihtYXNrLnByZXZGcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgICAgICAgICAvLyAgSXMgdGhlcmUgYSBzdGVuY2lsIGZ1cnRoZXIgdXAgdGhlIHN0YWNrP1xyXG4gICAgICAgICAgICB2YXIgcHJldiA9IHJlbmRlcmVyLmdldEN1cnJlbnRTdGVuY2lsTWFzaygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHByZXYpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG5cclxuICAgICAgICAgICAgICAgIHByZXYubWFzay5hcHBseVN0ZW5jaWwocmVuZGVyZXIsIHByZXYuY2FtZXJhLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLmN1cnJlbnRNYXNrLm1hc2sgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgQmluZCBiaXRtYXAgbWFzayBwaXBlbGluZSBhbmQgZHJhd1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTEpO1xyXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBtYXNrLm1hc2tUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xyXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBtYXNrLm1haW5UZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCAndUludmVydE1hc2tBbHBoYScpLCBtYXNrLmludmVydEFscGhhKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBGaW5hbGx5LCBkcmF3IGEgdHJpYW5nbGUgZmlsbGluZyB0aGUgd2hvbGUgc2NyZWVuXHJcbiAgICAgICAgICAgIGdsLmRyYXdBcnJheXModGhpcy50b3BvbG9neSwgMCwgMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcE1hc2tQaXBlbGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/pipelines/BitmapMaskPipeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js ***!
  \*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ShaderSourceFS = __webpack_require__(/*! ../shaders/ForwardDiffuse-frag.js */ \"./node_modules/phaser/src/renderer/webgl/shaders/ForwardDiffuse-frag.js\");\r\nvar TextureTintPipeline = __webpack_require__(/*! ./TextureTintPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js\");\r\n\r\nvar LIGHT_COUNT = 10;\r\n\r\n/**\r\n * @classdesc\r\n * ForwardDiffuseLightPipeline implements a forward rendering approach for 2D lights.\r\n * This pipeline extends TextureTintPipeline so it implements all it's rendering functions\r\n * and batching system.\r\n *\r\n * @class ForwardDiffuseLightPipeline\r\n * @extends Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline\r\n * @memberof Phaser.Renderer.WebGL.Pipelines\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration of the pipeline, same as the {@link Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline}. The fragment shader will be replaced with the lighting shader.\r\n */\r\nvar ForwardDiffuseLightPipeline = new Class({\r\n\r\n    Extends: TextureTintPipeline,\r\n\r\n    initialize:\r\n\r\n    function ForwardDiffuseLightPipeline (config)\r\n    {\r\n        LIGHT_COUNT = config.maxLights;\r\n\r\n        config.fragShader = ShaderSourceFS.replace('%LIGHT_COUNT%', LIGHT_COUNT.toString());\r\n\r\n        TextureTintPipeline.call(this, config);\r\n\r\n        /**\r\n         * Default normal map texture to use.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#defaultNormalMap\r\n         * @type {Phaser.Texture.Frame}\r\n         * @private\r\n         * @since 3.11.0\r\n         */\r\n        this.defaultNormalMap;\r\n\r\n        /**\r\n         * Inverse rotation matrix for normal map rotations.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#inverseRotationMatrix\r\n         * @type {Float32Array}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this.inverseRotationMatrix = new Float32Array([\r\n            1, 0, 0,\r\n            0, 1, 0,\r\n            0, 0, 1\r\n        ]);\r\n    },\r\n\r\n    /**\r\n     * Called when the Game has fully booted and the Renderer has finished setting up.\r\n     * \r\n     * By this stage all Game level systems are now in place and you can perform any final\r\n     * tasks that the pipeline may need that relied on game systems such as the Texture Manager.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#boot\r\n     * @override\r\n     * @since 3.11.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.defaultNormalMap = this.game.textures.getFrame('__DEFAULT');\r\n    },\r\n\r\n    /**\r\n     * This function binds its base class resources and this lights 2D resources.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#onBind\r\n     * @override\r\n     * @since 3.0.0\r\n     * \r\n     * @param {Phaser.GameObjects.GameObject} [gameObject] - The Game Object that invoked this pipeline, if any.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onBind: function (gameObject)\r\n    {\r\n        TextureTintPipeline.prototype.onBind.call(this);\r\n\r\n        var renderer = this.renderer;\r\n        var program = this.program;\r\n\r\n        this.mvpUpdate();\r\n\r\n        renderer.setInt1(program, 'uNormSampler', 1);\r\n        renderer.setFloat2(program, 'uResolution', this.width, this.height);\r\n\r\n        if (gameObject)\r\n        {\r\n            this.setNormalMap(gameObject);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This function sets all the needed resources for each camera pass.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#onRender\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene being rendered.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Scene Camera being rendered with.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onRender: function (scene, camera)\r\n    {\r\n        this.active = false;\r\n\r\n        var lightManager = scene.sys.lights;\r\n\r\n        if (!lightManager || lightManager.lights.length <= 0 || !lightManager.active)\r\n        {\r\n            //  Passthru\r\n            return this;\r\n        }\r\n\r\n        var lights = lightManager.cull(camera);\r\n        var lightCount = Math.min(lights.length, LIGHT_COUNT);\r\n\r\n        if (lightCount === 0)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.active = true;\r\n\r\n        var renderer = this.renderer;\r\n        var program = this.program;\r\n        var cameraMatrix = camera.matrix;\r\n        var point = {x: 0, y: 0};\r\n        var height = renderer.height;\r\n        var index;\r\n\r\n        for (index = 0; index < LIGHT_COUNT; ++index)\r\n        {\r\n            //  Reset lights\r\n            renderer.setFloat1(program, 'uLights[' + index + '].radius', 0);\r\n        }\r\n\r\n        renderer.setFloat4(program, 'uCamera', camera.x, camera.y, camera.rotation, camera.zoom);\r\n        renderer.setFloat3(program, 'uAmbientLightColor', lightManager.ambientColor.r, lightManager.ambientColor.g, lightManager.ambientColor.b);\r\n\r\n        for (index = 0; index < lightCount; ++index)\r\n        {\r\n            var light = lights[index];\r\n            var lightName = 'uLights[' + index + '].';\r\n\r\n            cameraMatrix.transformPoint(light.x, light.y, point);\r\n\r\n            renderer.setFloat2(program, lightName + 'position', point.x - (camera.scrollX * light.scrollFactorX * camera.zoom), height - (point.y - (camera.scrollY * light.scrollFactorY) * camera.zoom));\r\n            renderer.setFloat3(program, lightName + 'color', light.r, light.g, light.b);\r\n            renderer.setFloat1(program, lightName + 'intensity', light.intensity);\r\n            renderer.setFloat1(program, lightName + 'radius', light.radius);\r\n        }\r\n\r\n        this.currentNormalMapRotation = null;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Generic function for batching a textured quad\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#batchTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Source GameObject\r\n     * @param {WebGLTexture} texture - Raw WebGLTexture associated with the quad\r\n     * @param {integer} textureWidth - Real texture width\r\n     * @param {integer} textureHeight - Real texture height\r\n     * @param {number} srcX - X coordinate of the quad\r\n     * @param {number} srcY - Y coordinate of the quad\r\n     * @param {number} srcWidth - Width of the quad\r\n     * @param {number} srcHeight - Height of the quad\r\n     * @param {number} scaleX - X component of scale\r\n     * @param {number} scaleY - Y component of scale\r\n     * @param {number} rotation - Rotation of the quad\r\n     * @param {boolean} flipX - Indicates if the quad is horizontally flipped\r\n     * @param {boolean} flipY - Indicates if the quad is vertically flipped\r\n     * @param {number} scrollFactorX - By which factor is the quad affected by the camera horizontal scroll\r\n     * @param {number} scrollFactorY - By which factor is the quad effected by the camera vertical scroll\r\n     * @param {number} displayOriginX - Horizontal origin in pixels\r\n     * @param {number} displayOriginY - Vertical origin in pixels\r\n     * @param {number} frameX - X coordinate of the texture frame\r\n     * @param {number} frameY - Y coordinate of the texture frame\r\n     * @param {number} frameWidth - Width of the texture frame\r\n     * @param {number} frameHeight - Height of the texture frame\r\n     * @param {integer} tintTL - Tint for top left\r\n     * @param {integer} tintTR - Tint for top right\r\n     * @param {integer} tintBL - Tint for bottom left\r\n     * @param {integer} tintBR - Tint for bottom right\r\n     * @param {number} tintEffect - The tint effect (0 for additive, 1 for replacement)\r\n     * @param {number} uOffset - Horizontal offset on texture coordinate\r\n     * @param {number} vOffset - Vertical offset on texture coordinate\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - Current used camera\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentTransformMatrix - Parent container\r\n     */\r\n    batchTexture: function (\r\n        gameObject,\r\n        texture,\r\n        textureWidth, textureHeight,\r\n        srcX, srcY,\r\n        srcWidth, srcHeight,\r\n        scaleX, scaleY,\r\n        rotation,\r\n        flipX, flipY,\r\n        scrollFactorX, scrollFactorY,\r\n        displayOriginX, displayOriginY,\r\n        frameX, frameY, frameWidth, frameHeight,\r\n        tintTL, tintTR, tintBL, tintBR, tintEffect,\r\n        uOffset, vOffset,\r\n        camera,\r\n        parentTransformMatrix)\r\n    {\r\n        if (!this.active)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.renderer.setPipeline(this);\r\n\r\n        var normalTexture;\r\n\r\n        if (gameObject.displayTexture)\r\n        {\r\n            normalTexture = gameObject.displayTexture.dataSource[gameObject.displayFrame.sourceIndex];\r\n        }\r\n        else if (gameObject.texture)\r\n        {\r\n            normalTexture = gameObject.texture.dataSource[gameObject.frame.sourceIndex];\r\n        }\r\n        else if (gameObject.tileset)\r\n        {\r\n            if (Array.isArray(gameObject.tileset))\r\n            {\r\n                normalTexture = gameObject.tileset[0].image.dataSource[0];\r\n            }\r\n            else\r\n            {\r\n                normalTexture = gameObject.tileset.image.dataSource[0];\r\n            }\r\n        }\r\n\r\n        if (!normalTexture)\r\n        {\r\n            console.warn('Normal map missing or invalid');\r\n            return;\r\n        }\r\n\r\n        this.setTexture2D(normalTexture.glTexture, 1);\r\n        this.setNormalMapRotation(rotation);\r\n\r\n        var camMatrix = this._tempMatrix1;\r\n        var spriteMatrix = this._tempMatrix2;\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        var u0 = (frameX / textureWidth) + uOffset;\r\n        var v0 = (frameY / textureHeight) + vOffset;\r\n        var u1 = (frameX + frameWidth) / textureWidth + uOffset;\r\n        var v1 = (frameY + frameHeight) / textureHeight + vOffset;\r\n\r\n        var width = srcWidth;\r\n        var height = srcHeight;\r\n\r\n        // var x = -displayOriginX + frameX;\r\n        // var y = -displayOriginY + frameY;\r\n\r\n        var x = -displayOriginX;\r\n        var y = -displayOriginY;\r\n\r\n        if (gameObject.isCropped)\r\n        {\r\n            var crop = gameObject._crop;\r\n\r\n            width = crop.width;\r\n            height = crop.height;\r\n\r\n            srcWidth = crop.width;\r\n            srcHeight = crop.height;\r\n\r\n            frameX = crop.x;\r\n            frameY = crop.y;\r\n\r\n            var ox = frameX;\r\n            var oy = frameY;\r\n\r\n            if (flipX)\r\n            {\r\n                ox = (frameWidth - crop.x - crop.width);\r\n            }\r\n    \r\n            if (flipY && !texture.isRenderTexture)\r\n            {\r\n                oy = (frameHeight - crop.y - crop.height);\r\n            }\r\n\r\n            u0 = (ox / textureWidth) + uOffset;\r\n            v0 = (oy / textureHeight) + vOffset;\r\n            u1 = (ox + crop.width) / textureWidth + uOffset;\r\n            v1 = (oy + crop.height) / textureHeight + vOffset;\r\n\r\n            x = -displayOriginX + frameX;\r\n            y = -displayOriginY + frameY;\r\n        }\r\n\r\n        //  Invert the flipY if this is a RenderTexture\r\n        flipY = flipY ^ (texture.isRenderTexture ? 1 : 0);\r\n\r\n        if (flipX)\r\n        {\r\n            width *= -1;\r\n            x += srcWidth;\r\n        }\r\n\r\n        if (flipY)\r\n        {\r\n            height *= -1;\r\n            y += srcHeight;\r\n        }\r\n\r\n        //  Do we need this? (doubt it)\r\n        // if (camera.roundPixels)\r\n        // {\r\n        //     x |= 0;\r\n        //     y |= 0;\r\n        // }\r\n\r\n        var xw = x + width;\r\n        var yh = y + height;\r\n\r\n        spriteMatrix.applyITRS(srcX, srcY, rotation, scaleX, scaleY);\r\n\r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        if (parentTransformMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentTransformMatrix, -camera.scrollX * scrollFactorX, -camera.scrollY * scrollFactorY);\r\n\r\n            //  Undo the camera scroll\r\n            spriteMatrix.e = srcX;\r\n            spriteMatrix.f = srcY;\r\n\r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n        else\r\n        {\r\n            spriteMatrix.e -= camera.scrollX * scrollFactorX;\r\n            spriteMatrix.f -= camera.scrollY * scrollFactorY;\r\n    \r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(x, yh);\r\n        var ty1 = calcMatrix.getY(x, yh);\r\n\r\n        var tx2 = calcMatrix.getX(xw, yh);\r\n        var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n        var tx3 = calcMatrix.getX(xw, y);\r\n        var ty3 = calcMatrix.getY(xw, y);\r\n\r\n        if (camera.roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        this.setTexture2D(texture, 0);\r\n\r\n        this.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n    },\r\n\r\n    /**\r\n     * Sets the Game Objects normal map as the active texture.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#setNormalMap\r\n     * @since 3.11.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to update.\r\n     */\r\n    setNormalMap: function (gameObject)\r\n    {\r\n        if (!this.active || !gameObject)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var normalTexture;\r\n\r\n        if (gameObject.texture)\r\n        {\r\n            normalTexture = gameObject.texture.dataSource[gameObject.frame.sourceIndex];\r\n        }\r\n\r\n        if (!normalTexture)\r\n        {\r\n            normalTexture = this.defaultNormalMap;\r\n        }\r\n\r\n        this.setTexture2D(normalTexture.glTexture, 1);\r\n\r\n        this.renderer.setPipeline(gameObject.defaultPipeline);\r\n    },\r\n\r\n    /**\r\n     * Rotates the normal map vectors inversely by the given angle.\r\n     * Only works in 2D space.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#setNormalMapRotation\r\n     * @since 3.16.0\r\n     * \r\n     * @param {number} rotation - The angle of rotation in radians.\r\n     */\r\n    setNormalMapRotation: function (rotation)\r\n    {\r\n        if (rotation !== this.currentNormalMapRotation || this.batches.length === 0)\r\n        {\r\n            if (this.batches.length > 0)\r\n            {\r\n                this.flush();\r\n            }\r\n\r\n            var inverseRotationMatrix = this.inverseRotationMatrix;\r\n\r\n            if (rotation)\r\n            {\r\n                var rot = -rotation;\r\n                var c = Math.cos(rot);\r\n                var s = Math.sin(rot);\r\n\r\n                inverseRotationMatrix[1] = s;\r\n                inverseRotationMatrix[3] = -s;\r\n                inverseRotationMatrix[0] = inverseRotationMatrix[4] = c;\r\n            }\r\n            else\r\n            {\r\n                inverseRotationMatrix[0] = inverseRotationMatrix[4] = 1;\r\n                inverseRotationMatrix[1] = inverseRotationMatrix[3] = 0;\r\n            }\r\n\r\n            this.renderer.setMatrix3(this.program, 'uInverseRotationMatrix', false, inverseRotationMatrix);\r\n\r\n            this.currentNormalMapRotation = rotation;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a Sprite Game Object, or any object that extends it, which has a normal texture and adds it to the batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.ForwardDiffuseLightPipeline#batchSprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Sprite} sprite - The texture-based Game Object to add to the batch.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to use for the rendering transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentTransformMatrix - The transform matrix of the parent container, if set.\r\n     */\r\n    batchSprite: function (sprite, camera, parentTransformMatrix)\r\n    {\r\n        if (!this.active)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var normalTexture = sprite.texture.dataSource[sprite.frame.sourceIndex];\r\n\r\n        if (normalTexture)\r\n        {\r\n            this.renderer.setPipeline(this);\r\n\r\n            this.setTexture2D(normalTexture.glTexture, 1);\r\n            this.setNormalMapRotation(sprite.rotation);\r\n\r\n            TextureTintPipeline.prototype.batchSprite.call(this, sprite, camera, parentTransformMatrix);\r\n        }\r\n    }\r\n\r\n});\r\n\r\nForwardDiffuseLightPipeline.LIGHT_COUNT = LIGHT_COUNT;\r\n\r\nmodule.exports = ForwardDiffuseLightPipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lLmpzPzkyN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxrSEFBbUM7QUFDaEUsMEJBQTBCLG1CQUFPLENBQUMsd0dBQXVCOztBQUV6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU8sMERBQTBELDBEQUEwRDtBQUN0STtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhDQUE4QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QyxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhDQUE4QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3dlYmdsL3BpcGVsaW5lcy9Gb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBGZWxpcGUgQWxmb25zbyA8QGJpdG5lbmZlcj5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTaGFkZXJTb3VyY2VGUyA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvRm9yd2FyZERpZmZ1c2UtZnJhZy5qcycpO1xyXG52YXIgVGV4dHVyZVRpbnRQaXBlbGluZSA9IHJlcXVpcmUoJy4vVGV4dHVyZVRpbnRQaXBlbGluZScpO1xyXG5cclxudmFyIExJR0hUX0NPVU5UID0gMTA7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBGb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmUgaW1wbGVtZW50cyBhIGZvcndhcmQgcmVuZGVyaW5nIGFwcHJvYWNoIGZvciAyRCBsaWdodHMuXHJcbiAqIFRoaXMgcGlwZWxpbmUgZXh0ZW5kcyBUZXh0dXJlVGludFBpcGVsaW5lIHNvIGl0IGltcGxlbWVudHMgYWxsIGl0J3MgcmVuZGVyaW5nIGZ1bmN0aW9uc1xyXG4gKiBhbmQgYmF0Y2hpbmcgc3lzdGVtLlxyXG4gKlxyXG4gKiBAY2xhc3MgRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxpbmUsIHNhbWUgYXMgdGhlIHtAbGluayBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmV9LiBUaGUgZnJhZ21lbnQgc2hhZGVyIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbGlnaHRpbmcgc2hhZGVyLlxyXG4gKi9cclxudmFyIEZvcndhcmREaWZmdXNlTGlnaHRQaXBlbGluZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogVGV4dHVyZVRpbnRQaXBlbGluZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZvcndhcmREaWZmdXNlTGlnaHRQaXBlbGluZSAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIExJR0hUX0NPVU5UID0gY29uZmlnLm1heExpZ2h0cztcclxuXHJcbiAgICAgICAgY29uZmlnLmZyYWdTaGFkZXIgPSBTaGFkZXJTb3VyY2VGUy5yZXBsYWNlKCclTElHSFRfQ09VTlQlJywgTElHSFRfQ09VTlQudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgIFRleHR1cmVUaW50UGlwZWxpbmUuY2FsbCh0aGlzLCBjb25maWcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0IG5vcm1hbCBtYXAgdGV4dHVyZSB0byB1c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLkZvcndhcmREaWZmdXNlTGlnaHRQaXBlbGluZSNkZWZhdWx0Tm9ybWFsTWFwXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlLkZyYW1lfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdE5vcm1hbE1hcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW52ZXJzZSByb3RhdGlvbiBtYXRyaXggZm9yIG5vcm1hbCBtYXAgcm90YXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Gb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmUjaW52ZXJzZVJvdGF0aW9uTWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmludmVyc2VSb3RhdGlvbk1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLCAwLFxyXG4gICAgICAgICAgICAwLCAxLCAwLFxyXG4gICAgICAgICAgICAwLCAwLCAxXHJcbiAgICAgICAgXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIEdhbWUgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdGhlIFJlbmRlcmVyIGhhcyBmaW5pc2hlZCBzZXR0aW5nIHVwLlxyXG4gICAgICogXHJcbiAgICAgKiBCeSB0aGlzIHN0YWdlIGFsbCBHYW1lIGxldmVsIHN5c3RlbXMgYXJlIG5vdyBpbiBwbGFjZSBhbmQgeW91IGNhbiBwZXJmb3JtIGFueSBmaW5hbFxyXG4gICAgICogdGFza3MgdGhhdCB0aGUgcGlwZWxpbmUgbWF5IG5lZWQgdGhhdCByZWxpZWQgb24gZ2FtZSBzeXN0ZW1zIHN1Y2ggYXMgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lI2Jvb3RcclxuICAgICAqIEBvdmVycmlkZVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdE5vcm1hbE1hcCA9IHRoaXMuZ2FtZS50ZXh0dXJlcy5nZXRGcmFtZSgnX19ERUZBVUxUJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBiaW5kcyBpdHMgYmFzZSBjbGFzcyByZXNvdXJjZXMgYW5kIHRoaXMgbGlnaHRzIDJEIHJlc291cmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lI29uQmluZFxyXG4gICAgICogQG92ZXJyaWRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gW2dhbWVPYmplY3RdIC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgaW52b2tlZCB0aGlzIHBpcGVsaW5lLCBpZiBhbnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvbkJpbmQ6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIFRleHR1cmVUaW50UGlwZWxpbmUucHJvdG90eXBlLm9uQmluZC5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG5cclxuICAgICAgICB0aGlzLm12cFVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZW5kZXJlci5zZXRJbnQxKHByb2dyYW0sICd1Tm9ybVNhbXBsZXInLCAxKTtcclxuICAgICAgICByZW5kZXJlci5zZXRGbG9hdDIocHJvZ3JhbSwgJ3VSZXNvbHV0aW9uJywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9ybWFsTWFwKGdhbWVPYmplY3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcyBmb3IgZWFjaCBjYW1lcmEgcGFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lI29uUmVuZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgU2NlbmUgQ2FtZXJhIGJlaW5nIHJlbmRlcmVkIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvblJlbmRlcjogZnVuY3Rpb24gKHNjZW5lLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIGxpZ2h0TWFuYWdlciA9IHNjZW5lLnN5cy5saWdodHM7XHJcblxyXG4gICAgICAgIGlmICghbGlnaHRNYW5hZ2VyIHx8IGxpZ2h0TWFuYWdlci5saWdodHMubGVuZ3RoIDw9IDAgfHwgIWxpZ2h0TWFuYWdlci5hY3RpdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUGFzc3RocnVcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlnaHRzID0gbGlnaHRNYW5hZ2VyLmN1bGwoY2FtZXJhKTtcclxuICAgICAgICB2YXIgbGlnaHRDb3VudCA9IE1hdGgubWluKGxpZ2h0cy5sZW5ndGgsIExJR0hUX0NPVU5UKTtcclxuXHJcbiAgICAgICAgaWYgKGxpZ2h0Q291bnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMucHJvZ3JhbTtcclxuICAgICAgICB2YXIgY2FtZXJhTWF0cml4ID0gY2FtZXJhLm1hdHJpeDtcclxuICAgICAgICB2YXIgcG9pbnQgPSB7eDogMCwgeTogMH07XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmhlaWdodDtcclxuICAgICAgICB2YXIgaW5kZXg7XHJcblxyXG4gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IExJR0hUX0NPVU5UOyArK2luZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFJlc2V0IGxpZ2h0c1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGbG9hdDEocHJvZ3JhbSwgJ3VMaWdodHNbJyArIGluZGV4ICsgJ10ucmFkaXVzJywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5zZXRGbG9hdDQocHJvZ3JhbSwgJ3VDYW1lcmEnLCBjYW1lcmEueCwgY2FtZXJhLnksIGNhbWVyYS5yb3RhdGlvbiwgY2FtZXJhLnpvb20pO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldEZsb2F0Myhwcm9ncmFtLCAndUFtYmllbnRMaWdodENvbG9yJywgbGlnaHRNYW5hZ2VyLmFtYmllbnRDb2xvci5yLCBsaWdodE1hbmFnZXIuYW1iaWVudENvbG9yLmcsIGxpZ2h0TWFuYWdlci5hbWJpZW50Q29sb3IuYik7XHJcblxyXG4gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxpZ2h0Q291bnQ7ICsraW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgbGlnaHROYW1lID0gJ3VMaWdodHNbJyArIGluZGV4ICsgJ10uJztcclxuXHJcbiAgICAgICAgICAgIGNhbWVyYU1hdHJpeC50cmFuc2Zvcm1Qb2ludChsaWdodC54LCBsaWdodC55LCBwb2ludCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGbG9hdDIocHJvZ3JhbSwgbGlnaHROYW1lICsgJ3Bvc2l0aW9uJywgcG9pbnQueCAtIChjYW1lcmEuc2Nyb2xsWCAqIGxpZ2h0LnNjcm9sbEZhY3RvclggKiBjYW1lcmEuem9vbSksIGhlaWdodCAtIChwb2ludC55IC0gKGNhbWVyYS5zY3JvbGxZICogbGlnaHQuc2Nyb2xsRmFjdG9yWSkgKiBjYW1lcmEuem9vbSkpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGbG9hdDMocHJvZ3JhbSwgbGlnaHROYW1lICsgJ2NvbG9yJywgbGlnaHQuciwgbGlnaHQuZywgbGlnaHQuYik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEZsb2F0MShwcm9ncmFtLCBsaWdodE5hbWUgKyAnaW50ZW5zaXR5JywgbGlnaHQuaW50ZW5zaXR5KTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0RmxvYXQxKHByb2dyYW0sIGxpZ2h0TmFtZSArICdyYWRpdXMnLCBsaWdodC5yYWRpdXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9ybWFsTWFwUm90YXRpb24gPSBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmljIGZ1bmN0aW9uIGZvciBiYXRjaGluZyBhIHRleHR1cmVkIHF1YWRcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lI2JhdGNoVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFNvdXJjZSBHYW1lT2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIFJhdyBXZWJHTFRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWFkXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRleHR1cmVXaWR0aCAtIFJlYWwgdGV4dHVyZSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0ZXh0dXJlSGVpZ2h0IC0gUmVhbCB0ZXh0dXJlIGhlaWdodFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY1ggLSBYIGNvb3JkaW5hdGUgb2YgdGhlIHF1YWRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNZIC0gWSBjb29yZGluYXRlIG9mIHRoZSBxdWFkXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjV2lkdGggLSBXaWR0aCBvZiB0aGUgcXVhZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0hlaWdodCAtIEhlaWdodCBvZiB0aGUgcXVhZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWCAtIFggY29tcG9uZW50IG9mIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZIC0gWSBjb21wb25lbnQgb2Ygc2NhbGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvbiAtIFJvdGF0aW9uIG9mIHRoZSBxdWFkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZsaXBYIC0gSW5kaWNhdGVzIGlmIHRoZSBxdWFkIGlzIGhvcml6b250YWxseSBmbGlwcGVkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZsaXBZIC0gSW5kaWNhdGVzIGlmIHRoZSBxdWFkIGlzIHZlcnRpY2FsbHkgZmxpcHBlZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbEZhY3RvclggLSBCeSB3aGljaCBmYWN0b3IgaXMgdGhlIHF1YWQgYWZmZWN0ZWQgYnkgdGhlIGNhbWVyYSBob3Jpem9udGFsIHNjcm9sbFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbEZhY3RvclkgLSBCeSB3aGljaCBmYWN0b3IgaXMgdGhlIHF1YWQgZWZmZWN0ZWQgYnkgdGhlIGNhbWVyYSB2ZXJ0aWNhbCBzY3JvbGxcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXNwbGF5T3JpZ2luWCAtIEhvcml6b250YWwgb3JpZ2luIGluIHBpeGVsc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3BsYXlPcmlnaW5ZIC0gVmVydGljYWwgb3JpZ2luIGluIHBpeGVsc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lWCAtIFggY29vcmRpbmF0ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lWSAtIFkgY29vcmRpbmF0ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lV2lkdGggLSBXaWR0aCBvZiB0aGUgdGV4dHVyZSBmcmFtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lSGVpZ2h0IC0gSGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbnRUTCAtIFRpbnQgZm9yIHRvcCBsZWZ0XHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbnRUUiAtIFRpbnQgZm9yIHRvcCByaWdodFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW50QkwgLSBUaW50IGZvciBib3R0b20gbGVmdFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW50QlIgLSBUaW50IGZvciBib3R0b20gcmlnaHRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50RWZmZWN0IC0gVGhlIHRpbnQgZWZmZWN0ICgwIGZvciBhZGRpdGl2ZSwgMSBmb3IgcmVwbGFjZW1lbnQpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdU9mZnNldCAtIEhvcml6b250YWwgb2Zmc2V0IG9uIHRleHR1cmUgY29vcmRpbmF0ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZPZmZzZXQgLSBWZXJ0aWNhbCBvZmZzZXQgb24gdGV4dHVyZSBjb29yZGluYXRlXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBDdXJyZW50IHVzZWQgY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50VHJhbnNmb3JtTWF0cml4IC0gUGFyZW50IGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBiYXRjaFRleHR1cmU6IGZ1bmN0aW9uIChcclxuICAgICAgICBnYW1lT2JqZWN0LFxyXG4gICAgICAgIHRleHR1cmUsXHJcbiAgICAgICAgdGV4dHVyZVdpZHRoLCB0ZXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgIHNyY1gsIHNyY1ksXHJcbiAgICAgICAgc3JjV2lkdGgsIHNyY0hlaWdodCxcclxuICAgICAgICBzY2FsZVgsIHNjYWxlWSxcclxuICAgICAgICByb3RhdGlvbixcclxuICAgICAgICBmbGlwWCwgZmxpcFksXHJcbiAgICAgICAgc2Nyb2xsRmFjdG9yWCwgc2Nyb2xsRmFjdG9yWSxcclxuICAgICAgICBkaXNwbGF5T3JpZ2luWCwgZGlzcGxheU9yaWdpblksXHJcbiAgICAgICAgZnJhbWVYLCBmcmFtZVksIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LFxyXG4gICAgICAgIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCxcclxuICAgICAgICB1T2Zmc2V0LCB2T2Zmc2V0LFxyXG4gICAgICAgIGNhbWVyYSxcclxuICAgICAgICBwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UGlwZWxpbmUodGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBub3JtYWxUZXh0dXJlO1xyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdC5kaXNwbGF5VGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5vcm1hbFRleHR1cmUgPSBnYW1lT2JqZWN0LmRpc3BsYXlUZXh0dXJlLmRhdGFTb3VyY2VbZ2FtZU9iamVjdC5kaXNwbGF5RnJhbWUuc291cmNlSW5kZXhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChnYW1lT2JqZWN0LnRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBub3JtYWxUZXh0dXJlID0gZ2FtZU9iamVjdC50ZXh0dXJlLmRhdGFTb3VyY2VbZ2FtZU9iamVjdC5mcmFtZS5zb3VyY2VJbmRleF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGdhbWVPYmplY3QudGlsZXNldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdhbWVPYmplY3QudGlsZXNldCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFRleHR1cmUgPSBnYW1lT2JqZWN0LnRpbGVzZXRbMF0uaW1hZ2UuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFRleHR1cmUgPSBnYW1lT2JqZWN0LnRpbGVzZXQuaW1hZ2UuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFub3JtYWxUZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb3JtYWwgbWFwIG1pc3Npbmcgb3IgaW52YWxpZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUyRChub3JtYWxUZXh0dXJlLmdsVGV4dHVyZSwgMSk7XHJcbiAgICAgICAgdGhpcy5zZXROb3JtYWxNYXBSb3RhdGlvbihyb3RhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjYW1NYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MTtcclxuICAgICAgICB2YXIgc3ByaXRlTWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDI7XHJcbiAgICAgICAgdmFyIGNhbGNNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICAgICAgdmFyIHUwID0gKGZyYW1lWCAvIHRleHR1cmVXaWR0aCkgKyB1T2Zmc2V0O1xyXG4gICAgICAgIHZhciB2MCA9IChmcmFtZVkgLyB0ZXh0dXJlSGVpZ2h0KSArIHZPZmZzZXQ7XHJcbiAgICAgICAgdmFyIHUxID0gKGZyYW1lWCArIGZyYW1lV2lkdGgpIC8gdGV4dHVyZVdpZHRoICsgdU9mZnNldDtcclxuICAgICAgICB2YXIgdjEgPSAoZnJhbWVZICsgZnJhbWVIZWlnaHQpIC8gdGV4dHVyZUhlaWdodCArIHZPZmZzZXQ7XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IHNyY1dpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBzcmNIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIHZhciB4ID0gLWRpc3BsYXlPcmlnaW5YICsgZnJhbWVYO1xyXG4gICAgICAgIC8vIHZhciB5ID0gLWRpc3BsYXlPcmlnaW5ZICsgZnJhbWVZO1xyXG5cclxuICAgICAgICB2YXIgeCA9IC1kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgeSA9IC1kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QuaXNDcm9wcGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNyb3AgPSBnYW1lT2JqZWN0Ll9jcm9wO1xyXG5cclxuICAgICAgICAgICAgd2lkdGggPSBjcm9wLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBjcm9wLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHNyY1dpZHRoID0gY3JvcC53aWR0aDtcclxuICAgICAgICAgICAgc3JjSGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBmcmFtZVggPSBjcm9wLng7XHJcbiAgICAgICAgICAgIGZyYW1lWSA9IGNyb3AueTtcclxuXHJcbiAgICAgICAgICAgIHZhciBveCA9IGZyYW1lWDtcclxuICAgICAgICAgICAgdmFyIG95ID0gZnJhbWVZO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZsaXBYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBveCA9IChmcmFtZVdpZHRoIC0gY3JvcC54IC0gY3JvcC53aWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoZmxpcFkgJiYgIXRleHR1cmUuaXNSZW5kZXJUZXh0dXJlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBveSA9IChmcmFtZUhlaWdodCAtIGNyb3AueSAtIGNyb3AuaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdTAgPSAob3ggLyB0ZXh0dXJlV2lkdGgpICsgdU9mZnNldDtcclxuICAgICAgICAgICAgdjAgPSAob3kgLyB0ZXh0dXJlSGVpZ2h0KSArIHZPZmZzZXQ7XHJcbiAgICAgICAgICAgIHUxID0gKG94ICsgY3JvcC53aWR0aCkgLyB0ZXh0dXJlV2lkdGggKyB1T2Zmc2V0O1xyXG4gICAgICAgICAgICB2MSA9IChveSArIGNyb3AuaGVpZ2h0KSAvIHRleHR1cmVIZWlnaHQgKyB2T2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgeCA9IC1kaXNwbGF5T3JpZ2luWCArIGZyYW1lWDtcclxuICAgICAgICAgICAgeSA9IC1kaXNwbGF5T3JpZ2luWSArIGZyYW1lWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBJbnZlcnQgdGhlIGZsaXBZIGlmIHRoaXMgaXMgYSBSZW5kZXJUZXh0dXJlXHJcbiAgICAgICAgZmxpcFkgPSBmbGlwWSBeICh0ZXh0dXJlLmlzUmVuZGVyVGV4dHVyZSA/IDEgOiAwKTtcclxuXHJcbiAgICAgICAgaWYgKGZsaXBYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2lkdGggKj0gLTE7XHJcbiAgICAgICAgICAgIHggKz0gc3JjV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmxpcFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBoZWlnaHQgKj0gLTE7XHJcbiAgICAgICAgICAgIHkgKz0gc3JjSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIERvIHdlIG5lZWQgdGhpcz8gKGRvdWJ0IGl0KVxyXG4gICAgICAgIC8vIGlmIChjYW1lcmEucm91bmRQaXhlbHMpXHJcbiAgICAgICAgLy8ge1xyXG4gICAgICAgIC8vICAgICB4IHw9IDA7XHJcbiAgICAgICAgLy8gICAgIHkgfD0gMDtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcclxuICAgICAgICB2YXIgeWggPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgICAgICBzcHJpdGVNYXRyaXguYXBwbHlJVFJTKHNyY1gsIHNyY1ksIHJvdGF0aW9uLCBzY2FsZVgsIHNjYWxlWSk7XHJcblxyXG4gICAgICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudFRyYW5zZm9ybU1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50VHJhbnNmb3JtTWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3JjWDtcclxuICAgICAgICAgICAgc3ByaXRlTWF0cml4LmYgPSBzcmNZO1xyXG5cclxuICAgICAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNjcm9sbEZhY3Rvclk7XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeHcsIHloKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBjYWxjTWF0cml4LmdldFkoeHcsIHkpO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhLnJvdW5kUGl4ZWxzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHgwID0gTWF0aC5yb3VuZCh0eDApO1xyXG4gICAgICAgICAgICB0eTAgPSBNYXRoLnJvdW5kKHR5MCk7XHJcblxyXG4gICAgICAgICAgICB0eDEgPSBNYXRoLnJvdW5kKHR4MSk7XHJcbiAgICAgICAgICAgIHR5MSA9IE1hdGgucm91bmQodHkxKTtcclxuXHJcbiAgICAgICAgICAgIHR4MiA9IE1hdGgucm91bmQodHgyKTtcclxuICAgICAgICAgICAgdHkyID0gTWF0aC5yb3VuZCh0eTIpO1xyXG5cclxuICAgICAgICAgICAgdHgzID0gTWF0aC5yb3VuZCh0eDMpO1xyXG4gICAgICAgICAgICB0eTMgPSBNYXRoLnJvdW5kKHR5Myk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXRjaFF1YWQodHgwLCB0eTAsIHR4MSwgdHkxLCB0eDIsIHR5MiwgdHgzLCB0eTMsIHUwLCB2MCwgdTEsIHYxLCB0aW50VEwsIHRpbnRUUiwgdGludEJMLCB0aW50QlIsIHRpbnRFZmZlY3QsIHRleHR1cmUsIDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEdhbWUgT2JqZWN0cyBub3JtYWwgbWFwIGFzIHRoZSBhY3RpdmUgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lI3NldE5vcm1hbE1hcFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gdXBkYXRlLlxyXG4gICAgICovXHJcbiAgICBzZXROb3JtYWxNYXA6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUgfHwgIWdhbWVPYmplY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbm9ybWFsVGV4dHVyZTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QudGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5vcm1hbFRleHR1cmUgPSBnYW1lT2JqZWN0LnRleHR1cmUuZGF0YVNvdXJjZVtnYW1lT2JqZWN0LmZyYW1lLnNvdXJjZUluZGV4XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFsVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5vcm1hbFRleHR1cmUgPSB0aGlzLmRlZmF1bHROb3JtYWxNYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUyRChub3JtYWxUZXh0dXJlLmdsVGV4dHVyZSwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UGlwZWxpbmUoZ2FtZU9iamVjdC5kZWZhdWx0UGlwZWxpbmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgdGhlIG5vcm1hbCBtYXAgdmVjdG9ycyBpbnZlcnNlbHkgYnkgdGhlIGdpdmVuIGFuZ2xlLlxyXG4gICAgICogT25seSB3b3JrcyBpbiAyRCBzcGFjZS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLkZvcndhcmREaWZmdXNlTGlnaHRQaXBlbGluZSNzZXROb3JtYWxNYXBSb3RhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb24gLSBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFucy5cclxuICAgICAqL1xyXG4gICAgc2V0Tm9ybWFsTWFwUm90YXRpb246IGZ1bmN0aW9uIChyb3RhdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAocm90YXRpb24gIT09IHRoaXMuY3VycmVudE5vcm1hbE1hcFJvdGF0aW9uIHx8IHRoaXMuYmF0Y2hlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iYXRjaGVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGludmVyc2VSb3RhdGlvbk1hdHJpeCA9IHRoaXMuaW52ZXJzZVJvdGF0aW9uTWF0cml4O1xyXG5cclxuICAgICAgICAgICAgaWYgKHJvdGF0aW9uKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm90ID0gLXJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyb3QpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihyb3QpO1xyXG5cclxuICAgICAgICAgICAgICAgIGludmVyc2VSb3RhdGlvbk1hdHJpeFsxXSA9IHM7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnNlUm90YXRpb25NYXRyaXhbM10gPSAtcztcclxuICAgICAgICAgICAgICAgIGludmVyc2VSb3RhdGlvbk1hdHJpeFswXSA9IGludmVyc2VSb3RhdGlvbk1hdHJpeFs0XSA9IGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnNlUm90YXRpb25NYXRyaXhbMF0gPSBpbnZlcnNlUm90YXRpb25NYXRyaXhbNF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgaW52ZXJzZVJvdGF0aW9uTWF0cml4WzFdID0gaW52ZXJzZVJvdGF0aW9uTWF0cml4WzNdID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRNYXRyaXgzKHRoaXMucHJvZ3JhbSwgJ3VJbnZlcnNlUm90YXRpb25NYXRyaXgnLCBmYWxzZSwgaW52ZXJzZVJvdGF0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE5vcm1hbE1hcFJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgU3ByaXRlIEdhbWUgT2JqZWN0LCBvciBhbnkgb2JqZWN0IHRoYXQgZXh0ZW5kcyBpdCwgd2hpY2ggaGFzIGEgbm9ybWFsIHRleHR1cmUgYW5kIGFkZHMgaXQgdG8gdGhlIGJhdGNoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Gb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmUjYmF0Y2hTcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gc3ByaXRlIC0gVGhlIHRleHR1cmUtYmFzZWQgR2FtZSBPYmplY3QgdG8gYWRkIHRvIHRoZSBiYXRjaC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gdXNlIGZvciB0aGUgcmVuZGVyaW5nIHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRUcmFuc2Zvcm1NYXRyaXggLSBUaGUgdHJhbnNmb3JtIG1hdHJpeCBvZiB0aGUgcGFyZW50IGNvbnRhaW5lciwgaWYgc2V0LlxyXG4gICAgICovXHJcbiAgICBiYXRjaFNwcml0ZTogZnVuY3Rpb24gKHNwcml0ZSwgY2FtZXJhLCBwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBub3JtYWxUZXh0dXJlID0gc3ByaXRlLnRleHR1cmUuZGF0YVNvdXJjZVtzcHJpdGUuZnJhbWUuc291cmNlSW5kZXhdO1xyXG5cclxuICAgICAgICBpZiAobm9ybWFsVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UGlwZWxpbmUodGhpcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUyRChub3JtYWxUZXh0dXJlLmdsVGV4dHVyZSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9ybWFsTWFwUm90YXRpb24oc3ByaXRlLnJvdGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIFRleHR1cmVUaW50UGlwZWxpbmUucHJvdG90eXBlLmJhdGNoU3ByaXRlLmNhbGwodGhpcywgc3ByaXRlLCBjYW1lcmEsIHBhcmVudFRyYW5zZm9ybU1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5Gb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmUuTElHSFRfQ09VTlQgPSBMSUdIVF9DT1VOVDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Felipe Alfonso <@bitnenfer>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ModelViewProjection = __webpack_require__(/*! ./components/ModelViewProjection */ \"./node_modules/phaser/src/renderer/webgl/pipelines/components/ModelViewProjection.js\");\r\nvar ShaderSourceFS = __webpack_require__(/*! ../shaders/TextureTint-frag.js */ \"./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-frag.js\");\r\nvar ShaderSourceVS = __webpack_require__(/*! ../shaders/TextureTint-vert.js */ \"./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-vert.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar Utils = __webpack_require__(/*! ../Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\nvar WebGLPipeline = __webpack_require__(/*! ../WebGLPipeline */ \"./node_modules/phaser/src/renderer/webgl/WebGLPipeline.js\");\r\n\r\n/**\r\n * @classdesc\r\n * TextureTintPipeline implements the rendering infrastructure\r\n * for displaying textured objects\r\n * The config properties are:\r\n * - game: Current game instance.\r\n * - renderer: Current WebGL renderer.\r\n * - topology: This indicates how the primitives are rendered. The default value is GL_TRIANGLES.\r\n *              Here is the full list of rendering primitives (https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants).\r\n * - vertShader: Source for vertex shader as a string.\r\n * - fragShader: Source for fragment shader as a string.\r\n * - vertexCapacity: The amount of vertices that shall be allocated\r\n * - vertexSize: The size of a single vertex in bytes.\r\n *\r\n * @class TextureTintPipeline\r\n * @extends Phaser.Renderer.WebGL.WebGLPipeline\r\n * @memberof Phaser.Renderer.WebGL.Pipelines\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration options for this Texture Tint Pipeline, as described above.\r\n */\r\nvar TextureTintPipeline = new Class({\r\n\r\n    Extends: WebGLPipeline,\r\n\r\n    Mixins: [\r\n        ModelViewProjection\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function TextureTintPipeline (config)\r\n    {\r\n        var rendererConfig = config.renderer.config;\r\n\r\n        //  Vertex Size = attribute size added together (2 + 2 + 1 + 4)\r\n\r\n        WebGLPipeline.call(this, {\r\n            game: config.game,\r\n            renderer: config.renderer,\r\n            gl: config.renderer.gl,\r\n            topology: GetFastValue(config, 'topology', config.renderer.gl.TRIANGLES),\r\n            vertShader: GetFastValue(config, 'vertShader', ShaderSourceVS),\r\n            fragShader: GetFastValue(config, 'fragShader', ShaderSourceFS),\r\n            vertexCapacity: GetFastValue(config, 'vertexCapacity', 6 * rendererConfig.batchSize),\r\n            vertexSize: GetFastValue(config, 'vertexSize', Float32Array.BYTES_PER_ELEMENT * 5 + Uint8Array.BYTES_PER_ELEMENT * 4),\r\n            attributes: [\r\n                {\r\n                    name: 'inPosition',\r\n                    size: 2,\r\n                    type: config.renderer.gl.FLOAT,\r\n                    normalized: false,\r\n                    offset: 0\r\n                },\r\n                {\r\n                    name: 'inTexCoord',\r\n                    size: 2,\r\n                    type: config.renderer.gl.FLOAT,\r\n                    normalized: false,\r\n                    offset: Float32Array.BYTES_PER_ELEMENT * 2\r\n                },\r\n                {\r\n                    name: 'inTintEffect',\r\n                    size: 1,\r\n                    type: config.renderer.gl.FLOAT,\r\n                    normalized: false,\r\n                    offset: Float32Array.BYTES_PER_ELEMENT * 4\r\n                },\r\n                {\r\n                    name: 'inTint',\r\n                    size: 4,\r\n                    type: config.renderer.gl.UNSIGNED_BYTE,\r\n                    normalized: true,\r\n                    offset: Float32Array.BYTES_PER_ELEMENT * 5\r\n                }\r\n            ]\r\n        });\r\n\r\n        /**\r\n         * Float32 view of the array buffer containing the pipeline's vertices.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#vertexViewF32\r\n         * @type {Float32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexViewF32 = new Float32Array(this.vertexData);\r\n\r\n        /**\r\n         * Uint32 view of the array buffer containing the pipeline's vertices.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#vertexViewU32\r\n         * @type {Uint32Array}\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexViewU32 = new Uint32Array(this.vertexData);\r\n\r\n        /**\r\n         * Size of the batch.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#maxQuads\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.maxQuads = rendererConfig.batchSize;\r\n\r\n        /**\r\n         * Collection of batch information\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batches\r\n         * @type {array}\r\n         * @since 3.1.0\r\n         */\r\n        this.batches = [];\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#_tempMatrix1\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.11.0\r\n         */\r\n        this._tempMatrix1 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#_tempMatrix2\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.11.0\r\n         */\r\n        this._tempMatrix2 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#_tempMatrix3\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.11.0\r\n         */\r\n        this._tempMatrix3 = new TransformMatrix();\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#_tempMatrix4\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.11.0\r\n         */\r\n        this._tempMatrix4 = new TransformMatrix();\r\n\r\n        /**\r\n         * Used internally to draw stroked triangles.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#tempTriangle\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.tempTriangle = [\r\n            { x: 0, y: 0, width: 0 },\r\n            { x: 0, y: 0, width: 0 },\r\n            { x: 0, y: 0, width: 0 },\r\n            { x: 0, y: 0, width: 0 }\r\n        ];\r\n\r\n        /**\r\n         * The tint effect to be applied by the shader in the next geometry draw:\r\n         * \r\n         * 0 = texture multiplied by color\r\n         * 1 = solid color + texture alpha\r\n         * 2 = solid color, no texture\r\n         * 3 = solid texture, no color\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#tintEffect\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.tintEffect = 2;\r\n\r\n        /**\r\n         * Cached stroke tint.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#strokeTint\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.strokeTint = { TL: 0, TR: 0, BL: 0, BR: 0 };\r\n\r\n        /**\r\n         * Cached fill tint.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#fillTint\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.fillTint = { TL: 0, TR: 0, BL: 0, BR: 0 };\r\n\r\n        /**\r\n         * Internal texture frame reference.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#currentFrame\r\n         * @type {Phaser.Textures.Frame}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.currentFrame = { u0: 0, v0: 0, u1: 1, v1: 1 };\r\n\r\n        /**\r\n         * Internal path quad cache.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#firstQuad\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.firstQuad = [ 0, 0, 0, 0, 0 ];\r\n\r\n        /**\r\n         * Internal path quad cache.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#prevQuad\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.prevQuad = [ 0, 0, 0, 0, 0 ];\r\n\r\n        /**\r\n         * Used internally for triangulating a polygon.\r\n         *\r\n         * @name Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#polygonCache\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this.polygonCache = [];\r\n\r\n        this.mvpInit();\r\n    },\r\n\r\n    /**\r\n     * Called every time the pipeline needs to be used.\r\n     * It binds all necessary resources.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#onBind\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    onBind: function ()\r\n    {\r\n        WebGLPipeline.prototype.onBind.call(this);\r\n\r\n        this.mvpUpdate();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resizes this pipeline and updates the projection.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#resize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} width - The new width.\r\n     * @param {number} height - The new height.\r\n     * @param {number} resolution - The resolution.\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    resize: function (width, height, resolution)\r\n    {\r\n        WebGLPipeline.prototype.resize.call(this, width, height, resolution);\r\n\r\n        this.projOrtho(0, this.width, this.height, 0, -1000.0, 1000.0);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Assigns a texture to the current batch. If a different texture is already set it creates a new batch object.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#setTexture2D\r\n     * @since 3.1.0\r\n     *\r\n     * @param {WebGLTexture} [texture] - WebGLTexture that will be assigned to the current batch. If not given uses blankTexture.\r\n     * @param {integer} [unit=0] - Texture unit to which the texture needs to be bound.\r\n     *\r\n     * @return {Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline} This pipeline instance.\r\n     */\r\n    setTexture2D: function (texture, unit)\r\n    {\r\n        if (texture === undefined) { texture = this.renderer.blankTexture.glTexture; }\r\n        if (unit === undefined) { unit = 0; }\r\n\r\n        if (this.requireTextureBatch(texture, unit))\r\n        {\r\n            this.pushBatch(texture, unit);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if the current batch has the same texture and texture unit, or if we need to create a new batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#requireTextureBatch\r\n     * @since 3.16.0\r\n     *\r\n     * @param {WebGLTexture} texture - WebGLTexture that will be assigned to the current batch. If not given uses blankTexture.\r\n     * @param {integer} unit - Texture unit to which the texture needs to be bound.\r\n     *\r\n     * @return {boolean} `true` if the pipeline needs to create a new batch, otherwise `false`.\r\n     */\r\n    requireTextureBatch: function (texture, unit)\r\n    {\r\n        var batches = this.batches;\r\n        var batchLength = batches.length;\r\n\r\n        if (batchLength > 0)\r\n        {\r\n            //  If Texture Unit specified, we get the texture from the textures array, otherwise we use the texture property\r\n            var currentTexture = (unit > 0) ? batches[batchLength - 1].textures[unit - 1] : batches[batchLength - 1].texture;\r\n\r\n            return !(currentTexture === texture);\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Creates a new batch object and pushes it to a batch array.\r\n     * The batch object contains information relevant to the current \r\n     * vertex batch like the offset in the vertex buffer, vertex count and \r\n     * the textures used by that batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#pushBatch\r\n     * @since 3.1.0\r\n     * \r\n     * @param {WebGLTexture} texture - Optional WebGLTexture that will be assigned to the created batch.\r\n     * @param {integer} unit - Texture unit to which the texture needs to be bound.\r\n     */\r\n    pushBatch: function (texture, unit)\r\n    {\r\n        if (unit === 0)\r\n        {\r\n            this.batches.push({\r\n                first: this.vertexCount,\r\n                texture: texture,\r\n                textures: []\r\n            });\r\n        }\r\n        else\r\n        {\r\n            var textures = [];\r\n\r\n            textures[unit - 1] = texture;\r\n\r\n            this.batches.push({\r\n                first: this.vertexCount,\r\n                texture: null,\r\n                textures: textures\r\n            });\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Uploads the vertex data and emits a draw call for the current batch of vertices.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#flush\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This WebGLPipeline instance.\r\n     */\r\n    flush: function ()\r\n    {\r\n        if (this.flushLocked)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.flushLocked = true;\r\n\r\n        var gl = this.gl;\r\n        var vertexCount = this.vertexCount;\r\n        var topology = this.topology;\r\n        var vertexSize = this.vertexSize;\r\n        var renderer = this.renderer;\r\n\r\n        var batches = this.batches;\r\n        var batchCount = batches.length;\r\n        var batchVertexCount = 0;\r\n        var batch = null;\r\n        var batchNext;\r\n        var textureIndex;\r\n        var nTexture;\r\n\r\n        if (batchCount === 0 || vertexCount === 0)\r\n        {\r\n            this.flushLocked = false;\r\n\r\n            return this;\r\n        }\r\n\r\n        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bytes.subarray(0, vertexCount * vertexSize));\r\n\r\n        //  Process the TEXTURE BATCHES\r\n\r\n        for (var index = 0; index < batchCount - 1; index++)\r\n        {\r\n            batch = batches[index];\r\n            batchNext = batches[index + 1];\r\n\r\n            //  Multi-texture check (for non-zero texture units)\r\n            if (batch.textures.length > 0)\r\n            {\r\n                for (textureIndex = 0; textureIndex < batch.textures.length; ++textureIndex)\r\n                {\r\n                    nTexture = batch.textures[textureIndex];\r\n\r\n                    if (nTexture)\r\n                    {\r\n                        renderer.setTexture2D(nTexture, 1 + textureIndex, false);\r\n                    }\r\n                }\r\n\r\n                gl.activeTexture(gl.TEXTURE0);\r\n            }\r\n\r\n            batchVertexCount = batchNext.first - batch.first;\r\n\r\n            //  Bail out if texture property is null (i.e. if a texture unit > 0)\r\n            if (batch.texture === null || batchVertexCount <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            renderer.setTexture2D(batch.texture, 0, false);\r\n\r\n            gl.drawArrays(topology, batch.first, batchVertexCount);\r\n        }\r\n\r\n        // Left over data\r\n        batch = batches[batchCount - 1];\r\n\r\n        //  Multi-texture check (for non-zero texture units)\r\n\r\n        if (batch.textures.length > 0)\r\n        {\r\n            for (textureIndex = 0; textureIndex < batch.textures.length; ++textureIndex)\r\n            {\r\n                nTexture = batch.textures[textureIndex];\r\n\r\n                if (nTexture)\r\n                {\r\n                    renderer.setTexture2D(nTexture, 1 + textureIndex, false);\r\n                }\r\n            }\r\n\r\n            gl.activeTexture(gl.TEXTURE0);\r\n        }\r\n\r\n        batchVertexCount = vertexCount - batch.first;\r\n\r\n        if (batch.texture && batchVertexCount > 0)\r\n        {\r\n            renderer.setTexture2D(batch.texture, 0, false);\r\n\r\n            gl.drawArrays(topology, batch.first, batchVertexCount);\r\n        }\r\n\r\n        this.vertexCount = 0;\r\n\r\n        batches.length = 0;\r\n\r\n        this.flushLocked = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a Sprite Game Object, or any object that extends it, and adds it to the batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchSprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.GameObjects.Image|Phaser.GameObjects.Sprite)} sprite - The texture based Game Object to add to the batch.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to use for the rendering transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [parentTransformMatrix] - The transform matrix of the parent container, if set.\r\n     */\r\n    batchSprite: function (sprite, camera, parentTransformMatrix)\r\n    {\r\n        //  Will cause a flush if there are batchSize entries already\r\n        this.renderer.setPipeline(this);\r\n\r\n        var camMatrix = this._tempMatrix1;\r\n        var spriteMatrix = this._tempMatrix2;\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        var frame = sprite.frame;\r\n        var texture = frame.glTexture;\r\n\r\n        var u0 = frame.u0;\r\n        var v0 = frame.v0;\r\n        var u1 = frame.u1;\r\n        var v1 = frame.v1;\r\n        var frameX = frame.x;\r\n        var frameY = frame.y;\r\n        var frameWidth = frame.cutWidth;\r\n        var frameHeight = frame.cutHeight;\r\n        var customPivot = frame.customPivot;\r\n\r\n        var displayOriginX = sprite.displayOriginX;\r\n        var displayOriginY = sprite.displayOriginY;\r\n\r\n        var x = -displayOriginX + frameX;\r\n        var y = -displayOriginY + frameY;\r\n\r\n        if (sprite.isCropped)\r\n        {\r\n            var crop = sprite._crop;\r\n\r\n            if (crop.flipX !== sprite.flipX || crop.flipY !== sprite.flipY)\r\n            {\r\n                frame.updateCropUVs(crop, sprite.flipX, sprite.flipY);\r\n            }\r\n\r\n            u0 = crop.u0;\r\n            v0 = crop.v0;\r\n            u1 = crop.u1;\r\n            v1 = crop.v1;\r\n\r\n            frameWidth = crop.width;\r\n            frameHeight = crop.height;\r\n\r\n            frameX = crop.x;\r\n            frameY = crop.y;\r\n\r\n            x = -displayOriginX + frameX;\r\n            y = -displayOriginY + frameY;\r\n        }\r\n\r\n        var flipX = 1;\r\n        var flipY = 1;\r\n\r\n        if (sprite.flipX)\r\n        {\r\n            if (!customPivot)\r\n            {\r\n                x += (-frame.realWidth + (displayOriginX * 2));\r\n            }\r\n\r\n            flipX = -1;\r\n        }\r\n\r\n        //  Auto-invert the flipY if this is coming from a GLTexture\r\n        if (sprite.flipY || (frame.source.isGLTexture && !texture.flipY))\r\n        {\r\n            if (!customPivot)\r\n            {\r\n                y += (-frame.realHeight + (displayOriginY * 2));\r\n            }\r\n\r\n            flipY = -1;\r\n        }\r\n\r\n        spriteMatrix.applyITRS(sprite.x, sprite.y, sprite.rotation, sprite.scaleX * flipX, sprite.scaleY * flipY);\r\n\r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        if (parentTransformMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentTransformMatrix, -camera.scrollX * sprite.scrollFactorX, -camera.scrollY * sprite.scrollFactorY);\r\n\r\n            //  Undo the camera scroll\r\n            spriteMatrix.e = sprite.x;\r\n            spriteMatrix.f = sprite.y;\r\n\r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n        else\r\n        {\r\n            spriteMatrix.e -= camera.scrollX * sprite.scrollFactorX;\r\n            spriteMatrix.f -= camera.scrollY * sprite.scrollFactorY;\r\n    \r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n\r\n        var xw = x + frameWidth;\r\n        var yh = y + frameHeight;\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(x, yh);\r\n        var ty1 = calcMatrix.getY(x, yh);\r\n\r\n        var tx2 = calcMatrix.getX(xw, yh);\r\n        var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n        var tx3 = calcMatrix.getX(xw, y);\r\n        var ty3 = calcMatrix.getY(xw, y);\r\n\r\n        var tintTL = Utils.getTintAppendFloatAlpha(sprite._tintTL, camera.alpha * sprite._alphaTL);\r\n        var tintTR = Utils.getTintAppendFloatAlpha(sprite._tintTR, camera.alpha * sprite._alphaTR);\r\n        var tintBL = Utils.getTintAppendFloatAlpha(sprite._tintBL, camera.alpha * sprite._alphaBL);\r\n        var tintBR = Utils.getTintAppendFloatAlpha(sprite._tintBR, camera.alpha * sprite._alphaBR);\r\n\r\n        if (camera.roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        this.setTexture2D(texture, 0);\r\n\r\n        var tintEffect = (sprite._isTinted && sprite.tintFill);\r\n\r\n        this.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n    },\r\n\r\n    /**\r\n     * Adds the vertices data into the batch and flushes if full.\r\n     * \r\n     * Assumes 6 vertices in the following arrangement:\r\n     * \r\n     * ```\r\n     * 0----3\r\n     * |\\  B|\r\n     * | \\  |\r\n     * |  \\ |\r\n     * | A \\|\r\n     * |    \\\r\n     * 1----2\r\n     * ```\r\n     * \r\n     * Where tx0/ty0 = 0, tx1/ty1 = 1, tx2/ty2 = 2 and tx3/ty3 = 3\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchQuad\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x0 - The top-left x position.\r\n     * @param {number} y0 - The top-left y position.\r\n     * @param {number} x1 - The bottom-left x position.\r\n     * @param {number} y1 - The bottom-left y position.\r\n     * @param {number} x2 - The bottom-right x position.\r\n     * @param {number} y2 - The bottom-right y position.\r\n     * @param {number} x3 - The top-right x position.\r\n     * @param {number} y3 - The top-right y position.\r\n     * @param {number} u0 - UV u0 value.\r\n     * @param {number} v0 - UV v0 value.\r\n     * @param {number} u1 - UV u1 value.\r\n     * @param {number} v1 - UV v1 value.\r\n     * @param {number} tintTL - The top-left tint color value.\r\n     * @param {number} tintTR - The top-right tint color value.\r\n     * @param {number} tintBL - The bottom-left tint color value.\r\n     * @param {number} tintBR - The bottom-right tint color value.\r\n     * @param {(number|boolean)} tintEffect - The tint effect for the shader to use.\r\n     * @param {WebGLTexture} [texture] - WebGLTexture that will be assigned to the current batch if a flush occurs.\r\n     * @param {integer} [unit=0] - Texture unit to which the texture needs to be bound.\r\n     * \r\n     * @return {boolean} `true` if this method caused the batch to flush, otherwise `false`.\r\n     */\r\n    batchQuad: function (x0, y0, x1, y1, x2, y2, x3, y3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, unit)\r\n    {\r\n        var hasFlushed = false;\r\n\r\n        if (this.vertexCount + 6 > this.vertexCapacity)\r\n        {\r\n            this.flush();\r\n\r\n            hasFlushed = true;\r\n\r\n            this.setTexture2D(texture, unit);\r\n        }\r\n\r\n        var vertexViewF32 = this.vertexViewF32;\r\n        var vertexViewU32 = this.vertexViewU32;\r\n\r\n        var vertexOffset = (this.vertexCount * this.vertexComponentCount) - 1;\r\n            \r\n        vertexViewF32[++vertexOffset] = x0;\r\n        vertexViewF32[++vertexOffset] = y0;\r\n        vertexViewF32[++vertexOffset] = u0;\r\n        vertexViewF32[++vertexOffset] = v0;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintTL;\r\n\r\n        vertexViewF32[++vertexOffset] = x1;\r\n        vertexViewF32[++vertexOffset] = y1;\r\n        vertexViewF32[++vertexOffset] = u0;\r\n        vertexViewF32[++vertexOffset] = v1;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintBL;\r\n\r\n        vertexViewF32[++vertexOffset] = x2;\r\n        vertexViewF32[++vertexOffset] = y2;\r\n        vertexViewF32[++vertexOffset] = u1;\r\n        vertexViewF32[++vertexOffset] = v1;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintBR;\r\n\r\n        vertexViewF32[++vertexOffset] = x0;\r\n        vertexViewF32[++vertexOffset] = y0;\r\n        vertexViewF32[++vertexOffset] = u0;\r\n        vertexViewF32[++vertexOffset] = v0;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintTL;\r\n\r\n        vertexViewF32[++vertexOffset] = x2;\r\n        vertexViewF32[++vertexOffset] = y2;\r\n        vertexViewF32[++vertexOffset] = u1;\r\n        vertexViewF32[++vertexOffset] = v1;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintBR;\r\n\r\n        vertexViewF32[++vertexOffset] = x3;\r\n        vertexViewF32[++vertexOffset] = y3;\r\n        vertexViewF32[++vertexOffset] = u1;\r\n        vertexViewF32[++vertexOffset] = v0;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintTR;\r\n\r\n        this.vertexCount += 6;\r\n\r\n        return hasFlushed;\r\n    },\r\n\r\n    /**\r\n     * Adds the vertices data into the batch and flushes if full.\r\n     * \r\n     * Assumes 3 vertices in the following arrangement:\r\n     * \r\n     * ```\r\n     * 0\r\n     * |\\\r\n     * | \\\r\n     * |  \\\r\n     * |   \\\r\n     * |    \\\r\n     * 1-----2\r\n     * ```\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchTri\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x1 - The bottom-left x position.\r\n     * @param {number} y1 - The bottom-left y position.\r\n     * @param {number} x2 - The bottom-right x position.\r\n     * @param {number} y2 - The bottom-right y position.\r\n     * @param {number} x3 - The top-right x position.\r\n     * @param {number} y3 - The top-right y position.\r\n     * @param {number} u0 - UV u0 value.\r\n     * @param {number} v0 - UV v0 value.\r\n     * @param {number} u1 - UV u1 value.\r\n     * @param {number} v1 - UV v1 value.\r\n     * @param {number} tintTL - The top-left tint color value.\r\n     * @param {number} tintTR - The top-right tint color value.\r\n     * @param {number} tintBL - The bottom-left tint color value.\r\n     * @param {(number|boolean)} tintEffect - The tint effect for the shader to use.\r\n     * @param {WebGLTexture} [texture] - WebGLTexture that will be assigned to the current batch if a flush occurs.\r\n     * @param {integer} [unit=0] - Texture unit to which the texture needs to be bound.\r\n     * \r\n     * @return {boolean} `true` if this method caused the batch to flush, otherwise `false`.\r\n     */\r\n    batchTri: function (x1, y1, x2, y2, x3, y3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintEffect, texture, unit)\r\n    {\r\n        var hasFlushed = false;\r\n\r\n        if (this.vertexCount + 3 > this.vertexCapacity)\r\n        {\r\n            this.flush();\r\n\r\n            this.setTexture2D(texture, unit);\r\n\r\n            hasFlushed = true;\r\n        }\r\n\r\n        var vertexViewF32 = this.vertexViewF32;\r\n        var vertexViewU32 = this.vertexViewU32;\r\n\r\n        var vertexOffset = (this.vertexCount * this.vertexComponentCount) - 1;\r\n\r\n        vertexViewF32[++vertexOffset] = x1;\r\n        vertexViewF32[++vertexOffset] = y1;\r\n        vertexViewF32[++vertexOffset] = u0;\r\n        vertexViewF32[++vertexOffset] = v0;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintTL;\r\n\r\n        vertexViewF32[++vertexOffset] = x2;\r\n        vertexViewF32[++vertexOffset] = y2;\r\n        vertexViewF32[++vertexOffset] = u0;\r\n        vertexViewF32[++vertexOffset] = v1;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintTR;\r\n\r\n        vertexViewF32[++vertexOffset] = x3;\r\n        vertexViewF32[++vertexOffset] = y3;\r\n        vertexViewF32[++vertexOffset] = u1;\r\n        vertexViewF32[++vertexOffset] = v1;\r\n        vertexViewF32[++vertexOffset] = tintEffect;\r\n        vertexViewU32[++vertexOffset] = tintBL;\r\n\r\n        this.vertexCount += 3;\r\n\r\n        return hasFlushed;\r\n    },\r\n\r\n    /**\r\n     * Generic function for batching a textured quad using argument values instead of a Game Object.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - Source GameObject.\r\n     * @param {WebGLTexture} texture - Raw WebGLTexture associated with the quad.\r\n     * @param {integer} textureWidth - Real texture width.\r\n     * @param {integer} textureHeight - Real texture height.\r\n     * @param {number} srcX - X coordinate of the quad.\r\n     * @param {number} srcY - Y coordinate of the quad.\r\n     * @param {number} srcWidth - Width of the quad.\r\n     * @param {number} srcHeight - Height of the quad.\r\n     * @param {number} scaleX - X component of scale.\r\n     * @param {number} scaleY - Y component of scale.\r\n     * @param {number} rotation - Rotation of the quad.\r\n     * @param {boolean} flipX - Indicates if the quad is horizontally flipped.\r\n     * @param {boolean} flipY - Indicates if the quad is vertically flipped.\r\n     * @param {number} scrollFactorX - By which factor is the quad affected by the camera horizontal scroll.\r\n     * @param {number} scrollFactorY - By which factor is the quad effected by the camera vertical scroll.\r\n     * @param {number} displayOriginX - Horizontal origin in pixels.\r\n     * @param {number} displayOriginY - Vertical origin in pixels.\r\n     * @param {number} frameX - X coordinate of the texture frame.\r\n     * @param {number} frameY - Y coordinate of the texture frame.\r\n     * @param {number} frameWidth - Width of the texture frame.\r\n     * @param {number} frameHeight - Height of the texture frame.\r\n     * @param {integer} tintTL - Tint for top left.\r\n     * @param {integer} tintTR - Tint for top right.\r\n     * @param {integer} tintBL - Tint for bottom left.\r\n     * @param {integer} tintBR - Tint for bottom right.\r\n     * @param {number} tintEffect - The tint effect.\r\n     * @param {number} uOffset - Horizontal offset on texture coordinate.\r\n     * @param {number} vOffset - Vertical offset on texture coordinate.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - Current used camera.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentTransformMatrix - Parent container.\r\n     * @param {boolean} [skipFlip=false] - Skip the renderTexture check.\r\n     */\r\n    batchTexture: function (\r\n        gameObject,\r\n        texture,\r\n        textureWidth, textureHeight,\r\n        srcX, srcY,\r\n        srcWidth, srcHeight,\r\n        scaleX, scaleY,\r\n        rotation,\r\n        flipX, flipY,\r\n        scrollFactorX, scrollFactorY,\r\n        displayOriginX, displayOriginY,\r\n        frameX, frameY, frameWidth, frameHeight,\r\n        tintTL, tintTR, tintBL, tintBR, tintEffect,\r\n        uOffset, vOffset,\r\n        camera,\r\n        parentTransformMatrix,\r\n        skipFlip)\r\n    {\r\n        this.renderer.setPipeline(this, gameObject);\r\n\r\n        var camMatrix = this._tempMatrix1;\r\n        var spriteMatrix = this._tempMatrix2;\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        var u0 = (frameX / textureWidth) + uOffset;\r\n        var v0 = (frameY / textureHeight) + vOffset;\r\n        var u1 = (frameX + frameWidth) / textureWidth + uOffset;\r\n        var v1 = (frameY + frameHeight) / textureHeight + vOffset;\r\n\r\n        var width = srcWidth;\r\n        var height = srcHeight;\r\n\r\n        var x = -displayOriginX;\r\n        var y = -displayOriginY;\r\n\r\n        if (gameObject.isCropped)\r\n        {\r\n            var crop = gameObject._crop;\r\n\r\n            width = crop.width;\r\n            height = crop.height;\r\n\r\n            srcWidth = crop.width;\r\n            srcHeight = crop.height;\r\n\r\n            frameX = crop.x;\r\n            frameY = crop.y;\r\n\r\n            var ox = frameX;\r\n            var oy = frameY;\r\n\r\n            if (flipX)\r\n            {\r\n                ox = (frameWidth - crop.x - crop.width);\r\n            }\r\n    \r\n            if (flipY && !texture.isRenderTexture)\r\n            {\r\n                oy = (frameHeight - crop.y - crop.height);\r\n            }\r\n\r\n            u0 = (ox / textureWidth) + uOffset;\r\n            v0 = (oy / textureHeight) + vOffset;\r\n            u1 = (ox + crop.width) / textureWidth + uOffset;\r\n            v1 = (oy + crop.height) / textureHeight + vOffset;\r\n\r\n            x = -displayOriginX + frameX;\r\n            y = -displayOriginY + frameY;\r\n        }\r\n\r\n        //  Invert the flipY if this is a RenderTexture\r\n        flipY = flipY ^ (!skipFlip && texture.isRenderTexture ? 1 : 0);\r\n\r\n        if (flipX)\r\n        {\r\n            width *= -1;\r\n            x += srcWidth;\r\n        }\r\n\r\n        if (flipY)\r\n        {\r\n            height *= -1;\r\n            y += srcHeight;\r\n        }\r\n\r\n        var xw = x + width;\r\n        var yh = y + height;\r\n\r\n        spriteMatrix.applyITRS(srcX, srcY, rotation, scaleX, scaleY);\r\n\r\n        camMatrix.copyFrom(camera.matrix);\r\n\r\n        if (parentTransformMatrix)\r\n        {\r\n            //  Multiply the camera by the parent matrix\r\n            camMatrix.multiplyWithOffset(parentTransformMatrix, -camera.scrollX * scrollFactorX, -camera.scrollY * scrollFactorY);\r\n\r\n            //  Undo the camera scroll\r\n            spriteMatrix.e = srcX;\r\n            spriteMatrix.f = srcY;\r\n\r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n        else\r\n        {\r\n            spriteMatrix.e -= camera.scrollX * scrollFactorX;\r\n            spriteMatrix.f -= camera.scrollY * scrollFactorY;\r\n    \r\n            //  Multiply by the Sprite matrix, store result in calcMatrix\r\n            camMatrix.multiply(spriteMatrix, calcMatrix);\r\n        }\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(x, yh);\r\n        var ty1 = calcMatrix.getY(x, yh);\r\n\r\n        var tx2 = calcMatrix.getX(xw, yh);\r\n        var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n        var tx3 = calcMatrix.getX(xw, y);\r\n        var ty3 = calcMatrix.getY(xw, y);\r\n\r\n        if (camera.roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        this.setTexture2D(texture, 0);\r\n\r\n        this.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n    },\r\n\r\n    /**\r\n     * Adds a Texture Frame into the batch for rendering.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchTextureFrame\r\n     * @since 3.12.0\r\n     *\r\n     * @param {Phaser.Textures.Frame} frame - The Texture Frame to be rendered.\r\n     * @param {number} x - The horizontal position to render the texture at.\r\n     * @param {number} y - The vertical position to render the texture at.\r\n     * @param {number} tint - The tint color.\r\n     * @param {number} alpha - The alpha value.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} transformMatrix - The Transform Matrix to use for the texture.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} [parentTransformMatrix] - A parent Transform Matrix.\r\n     */\r\n    batchTextureFrame: function (\r\n        frame,\r\n        x, y,\r\n        tint, alpha,\r\n        transformMatrix,\r\n        parentTransformMatrix\r\n    )\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        var spriteMatrix = this._tempMatrix1.copyFrom(transformMatrix);\r\n        var calcMatrix = this._tempMatrix2;\r\n\r\n        var xw = x + frame.width;\r\n        var yh = y + frame.height;\r\n\r\n        if (parentTransformMatrix)\r\n        {\r\n            spriteMatrix.multiply(parentTransformMatrix, calcMatrix);\r\n        }\r\n        else\r\n        {\r\n            calcMatrix = spriteMatrix;\r\n        }\r\n\r\n        var tx0 = calcMatrix.getX(x, y);\r\n        var ty0 = calcMatrix.getY(x, y);\r\n\r\n        var tx1 = calcMatrix.getX(x, yh);\r\n        var ty1 = calcMatrix.getY(x, yh);\r\n\r\n        var tx2 = calcMatrix.getX(xw, yh);\r\n        var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n        var tx3 = calcMatrix.getX(xw, y);\r\n        var ty3 = calcMatrix.getY(xw, y);\r\n\r\n        this.setTexture2D(frame.glTexture, 0);\r\n\r\n        tint = Utils.getTintAppendFloatAlpha(tint, alpha);\r\n\r\n        this.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, frame.u0, frame.v0, frame.u1, frame.v1, tint, tint, tint, tint, 0, frame.glTexture, 0);\r\n    },\r\n\r\n    /**\r\n     * Pushes a filled rectangle into the vertex batch.\r\n     * Rectangle has no transform values and isn't transformed into the local space.\r\n     * Used for directly batching untransformed rectangles, such as Camera background colors.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#drawFillRect\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x - Horizontal top left coordinate of the rectangle.\r\n     * @param {number} y - Vertical top left coordinate of the rectangle.\r\n     * @param {number} width - Width of the rectangle.\r\n     * @param {number} height - Height of the rectangle.\r\n     * @param {number} color - Color of the rectangle to draw.\r\n     * @param {number} alpha - Alpha value of the rectangle to draw.\r\n     */\r\n    drawFillRect: function (x, y, width, height, color, alpha)\r\n    {\r\n        var xw = x + width;\r\n        var yh = y + height;\r\n\r\n        this.setTexture2D();\r\n\r\n        var tint = Utils.getTintAppendFloatAlphaAndSwap(color, alpha);\r\n\r\n        this.batchQuad(x, y, x, yh, xw, yh, xw, y, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n    },\r\n\r\n    /**\r\n     * Pushes a filled rectangle into the vertex batch.\r\n     * Rectangle factors in the given transform matrices before adding to the batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchFillRect\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x - Horizontal top left coordinate of the rectangle.\r\n     * @param {number} y - Vertical top left coordinate of the rectangle.\r\n     * @param {number} width - Width of the rectangle.\r\n     * @param {number} height - Height of the rectangle.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} currentMatrix - The current transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - The parent transform.\r\n     */\r\n    batchFillRect: function (x, y, width, height, currentMatrix, parentMatrix)\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        //  Multiply and store result in calcMatrix, only if the parentMatrix is set, otherwise we'll use whatever values are already in the calcMatrix\r\n        if (parentMatrix)\r\n        {\r\n            parentMatrix.multiply(currentMatrix, calcMatrix);\r\n        }\r\n        \r\n        var xw = x + width;\r\n        var yh = y + height;\r\n\r\n        var x0 = calcMatrix.getX(x, y);\r\n        var y0 = calcMatrix.getY(x, y);\r\n\r\n        var x1 = calcMatrix.getX(x, yh);\r\n        var y1 = calcMatrix.getY(x, yh);\r\n\r\n        var x2 = calcMatrix.getX(xw, yh);\r\n        var y2 = calcMatrix.getY(xw, yh);\r\n\r\n        var x3 = calcMatrix.getX(xw, y);\r\n        var y3 = calcMatrix.getY(xw, y);\r\n\r\n        var frame = this.currentFrame;\r\n\r\n        var u0 = frame.u0;\r\n        var v0 = frame.v0;\r\n        var u1 = frame.u1;\r\n        var v1 = frame.v1;\r\n\r\n        this.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, u0, v0, u1, v1, this.fillTint.TL, this.fillTint.TR, this.fillTint.BL, this.fillTint.BR, this.tintEffect);\r\n    },\r\n\r\n    /**\r\n     * Pushes a filled triangle into the vertex batch.\r\n     * Triangle factors in the given transform matrices before adding to the batch.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchFillTriangle\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x0 - Point 0 x coordinate.\r\n     * @param {number} y0 - Point 0 y coordinate.\r\n     * @param {number} x1 - Point 1 x coordinate.\r\n     * @param {number} y1 - Point 1 y coordinate.\r\n     * @param {number} x2 - Point 2 x coordinate.\r\n     * @param {number} y2 - Point 2 y coordinate.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} currentMatrix - The current transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - The parent transform.\r\n     */\r\n    batchFillTriangle: function (x0, y0, x1, y1, x2, y2, currentMatrix, parentMatrix)\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        //  Multiply and store result in calcMatrix, only if the parentMatrix is set, otherwise we'll use whatever values are already in the calcMatrix\r\n        if (parentMatrix)\r\n        {\r\n            parentMatrix.multiply(currentMatrix, calcMatrix);\r\n        }\r\n        \r\n        var tx0 = calcMatrix.getX(x0, y0);\r\n        var ty0 = calcMatrix.getY(x0, y0);\r\n\r\n        var tx1 = calcMatrix.getX(x1, y1);\r\n        var ty1 = calcMatrix.getY(x1, y1);\r\n\r\n        var tx2 = calcMatrix.getX(x2, y2);\r\n        var ty2 = calcMatrix.getY(x2, y2);\r\n\r\n        var frame = this.currentFrame;\r\n\r\n        var u0 = frame.u0;\r\n        var v0 = frame.v0;\r\n        var u1 = frame.u1;\r\n        var v1 = frame.v1;\r\n\r\n        this.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, u0, v0, u1, v1, this.fillTint.TL, this.fillTint.TR, this.fillTint.BL, this.tintEffect);\r\n    },\r\n\r\n    /**\r\n     * Pushes a stroked triangle into the vertex batch.\r\n     * Triangle factors in the given transform matrices before adding to the batch.\r\n     * The triangle is created from 3 lines and drawn using the `batchStrokePath` method.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchStrokeTriangle\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} x0 - Point 0 x coordinate.\r\n     * @param {number} y0 - Point 0 y coordinate.\r\n     * @param {number} x1 - Point 1 x coordinate.\r\n     * @param {number} y1 - Point 1 y coordinate.\r\n     * @param {number} x2 - Point 2 x coordinate.\r\n     * @param {number} y2 - Point 2 y coordinate.\r\n     * @param {number} lineWidth - The width of the line in pixels.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} currentMatrix - The current transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - The parent transform.\r\n     */\r\n    batchStrokeTriangle: function (x0, y0, x1, y1, x2, y2, lineWidth, currentMatrix, parentMatrix)\r\n    {\r\n        var tempTriangle = this.tempTriangle;\r\n\r\n        tempTriangle[0].x = x0;\r\n        tempTriangle[0].y = y0;\r\n        tempTriangle[0].width = lineWidth;\r\n\r\n        tempTriangle[1].x = x1;\r\n        tempTriangle[1].y = y1;\r\n        tempTriangle[1].width = lineWidth;\r\n\r\n        tempTriangle[2].x = x2;\r\n        tempTriangle[2].y = y2;\r\n        tempTriangle[2].width = lineWidth;\r\n\r\n        tempTriangle[3].x = x0;\r\n        tempTriangle[3].y = y0;\r\n        tempTriangle[3].width = lineWidth;\r\n\r\n        this.batchStrokePath(tempTriangle, lineWidth, false, currentMatrix, parentMatrix);\r\n    },\r\n\r\n    /**\r\n     * Adds the given path to the vertex batch for rendering.\r\n     * \r\n     * It works by taking the array of path data and then passing it through Earcut, which\r\n     * creates a list of polygons. Each polygon is then added to the batch.\r\n     * \r\n     * The path is always automatically closed because it's filled.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchFillPath\r\n     * @since 3.12.0\r\n     *\r\n     * @param {array} path - Collection of points that represent the path.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} currentMatrix - The current transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - The parent transform.\r\n     */\r\n    batchFillPath: function (path, currentMatrix, parentMatrix)\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        //  Multiply and store result in calcMatrix, only if the parentMatrix is set, otherwise we'll use whatever values are already in the calcMatrix\r\n        if (parentMatrix)\r\n        {\r\n            parentMatrix.multiply(currentMatrix, calcMatrix);\r\n        }\r\n\r\n        var length = path.length;\r\n        var polygonCache = this.polygonCache;\r\n        var polygonIndexArray;\r\n        var point;\r\n\r\n        var tintTL = this.fillTint.TL;\r\n        var tintTR = this.fillTint.TR;\r\n        var tintBL = this.fillTint.BL;\r\n        var tintEffect = this.tintEffect;\r\n\r\n        for (var pathIndex = 0; pathIndex < length; ++pathIndex)\r\n        {\r\n            point = path[pathIndex];\r\n            polygonCache.push(point.x, point.y);\r\n        }\r\n\r\n        polygonIndexArray = Earcut(polygonCache);\r\n        length = polygonIndexArray.length;\r\n\r\n        var frame = this.currentFrame;\r\n\r\n        for (var index = 0; index < length; index += 3)\r\n        {\r\n            var p0 = polygonIndexArray[index + 0] * 2;\r\n            var p1 = polygonIndexArray[index + 1] * 2;\r\n            var p2 = polygonIndexArray[index + 2] * 2;\r\n\r\n            var x0 = polygonCache[p0 + 0];\r\n            var y0 = polygonCache[p0 + 1];\r\n            var x1 = polygonCache[p1 + 0];\r\n            var y1 = polygonCache[p1 + 1];\r\n            var x2 = polygonCache[p2 + 0];\r\n            var y2 = polygonCache[p2 + 1];\r\n\r\n            var tx0 = calcMatrix.getX(x0, y0);\r\n            var ty0 = calcMatrix.getY(x0, y0);\r\n    \r\n            var tx1 = calcMatrix.getX(x1, y1);\r\n            var ty1 = calcMatrix.getY(x1, y1);\r\n    \r\n            var tx2 = calcMatrix.getX(x2, y2);\r\n            var ty2 = calcMatrix.getY(x2, y2);\r\n\r\n            var u0 = frame.u0;\r\n            var v0 = frame.v0;\r\n            var u1 = frame.u1;\r\n            var v1 = frame.v1;\r\n        \r\n            this.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintEffect);\r\n        }\r\n\r\n        polygonCache.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Adds the given path to the vertex batch for rendering.\r\n     * \r\n     * It works by taking the array of path data and calling `batchLine` for each section\r\n     * of the path.\r\n     * \r\n     * The path is optionally closed at the end.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchStrokePath\r\n     * @since 3.12.0\r\n     *\r\n     * @param {array} path - Collection of points that represent the path.\r\n     * @param {number} lineWidth - The width of the line segments in pixels.\r\n     * @param {boolean} pathOpen - Indicates if the path should be closed or left open.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} currentMatrix - The current transform.\r\n     * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - The parent transform.\r\n     */\r\n    batchStrokePath: function (path, lineWidth, pathOpen, currentMatrix, parentMatrix)\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        //  Reset the closePath booleans\r\n        this.prevQuad[4] = 0;\r\n        this.firstQuad[4] = 0;\r\n\r\n        var pathLength = path.length - 1;\r\n\r\n        for (var pathIndex = 0; pathIndex < pathLength; pathIndex++)\r\n        {\r\n            var point0 = path[pathIndex];\r\n            var point1 = path[pathIndex + 1];\r\n\r\n            this.batchLine(\r\n                point0.x,\r\n                point0.y,\r\n                point1.x,\r\n                point1.y,\r\n                point0.width / 2,\r\n                point1.width / 2,\r\n                lineWidth,\r\n                pathIndex,\r\n                !pathOpen && (pathIndex === pathLength - 1),\r\n                currentMatrix,\r\n                parentMatrix\r\n            );\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a quad and adds it to the vertex batch based on the given line values.\r\n     *\r\n     * @method Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline#batchLine\r\n     * @since 3.12.0\r\n     *\r\n     * @param {number} ax - X coordinate to the start of the line\r\n     * @param {number} ay - Y coordinate to the start of the line\r\n     * @param {number} bx - X coordinate to the end of the line\r\n     * @param {number} by - Y coordinate to the end of the line\r\n     * @param {number} aLineWidth - Width of the start of the line\r\n     * @param {number} bLineWidth - Width of the end of the line\r\n     * @param {Float32Array} currentMatrix - Parent matrix, generally used by containers\r\n     */\r\n    batchLine: function (ax, ay, bx, by, aLineWidth, bLineWidth, lineWidth, index, closePath, currentMatrix, parentMatrix)\r\n    {\r\n        this.renderer.setPipeline(this);\r\n\r\n        var calcMatrix = this._tempMatrix3;\r\n\r\n        //  Multiply and store result in calcMatrix, only if the parentMatrix is set, otherwise we'll use whatever values are already in the calcMatrix\r\n        if (parentMatrix)\r\n        {\r\n            parentMatrix.multiply(currentMatrix, calcMatrix);\r\n        }\r\n\r\n        var dx = bx - ax;\r\n        var dy = by - ay;\r\n\r\n        var len = Math.sqrt(dx * dx + dy * dy);\r\n        var al0 = aLineWidth * (by - ay) / len;\r\n        var al1 = aLineWidth * (ax - bx) / len;\r\n        var bl0 = bLineWidth * (by - ay) / len;\r\n        var bl1 = bLineWidth * (ax - bx) / len;\r\n\r\n        var lx0 = bx - bl0;\r\n        var ly0 = by - bl1;\r\n        var lx1 = ax - al0;\r\n        var ly1 = ay - al1;\r\n        var lx2 = bx + bl0;\r\n        var ly2 = by + bl1;\r\n        var lx3 = ax + al0;\r\n        var ly3 = ay + al1;\r\n\r\n        //  tx0 = bottom right\r\n        var brX = calcMatrix.getX(lx0, ly0);\r\n        var brY = calcMatrix.getY(lx0, ly0);\r\n\r\n        //  tx1 = bottom left\r\n        var blX = calcMatrix.getX(lx1, ly1);\r\n        var blY = calcMatrix.getY(lx1, ly1);\r\n\r\n        //  tx2 = top right\r\n        var trX = calcMatrix.getX(lx2, ly2);\r\n        var trY = calcMatrix.getY(lx2, ly2);\r\n\r\n        //  tx3 = top left\r\n        var tlX = calcMatrix.getX(lx3, ly3);\r\n        var tlY = calcMatrix.getY(lx3, ly3);\r\n\r\n        var tint = this.strokeTint;\r\n        var tintEffect = this.tintEffect;\r\n\r\n        var tintTL = tint.TL;\r\n        var tintTR = tint.TR;\r\n        var tintBL = tint.BL;\r\n        var tintBR = tint.BR;\r\n\r\n        var frame = this.currentFrame;\r\n\r\n        var u0 = frame.u0;\r\n        var v0 = frame.v0;\r\n        var u1 = frame.u1;\r\n        var v1 = frame.v1;\r\n\r\n        //  TL, BL, BR, TR\r\n        this.batchQuad(tlX, tlY, blX, blY, brX, brY, trX, trY, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect);\r\n\r\n        if (lineWidth <= 2)\r\n        {\r\n            //  No point doing a linejoin if the line isn't thick enough\r\n            return;\r\n        }\r\n\r\n        var prev = this.prevQuad;\r\n        var first = this.firstQuad;\r\n\r\n        if (index > 0 && prev[4])\r\n        {\r\n            this.batchQuad(tlX, tlY, blX, blY, prev[0], prev[1], prev[2], prev[3], u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect);\r\n        }\r\n        else\r\n        {\r\n            first[0] = tlX;\r\n            first[1] = tlY;\r\n            first[2] = blX;\r\n            first[3] = blY;\r\n            first[4] = 1;\r\n        }\r\n\r\n        if (closePath && first[4])\r\n        {\r\n            //  Add a join for the final path segment\r\n            this.batchQuad(brX, brY, trX, trY, first[0], first[1], first[2], first[3], u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect);\r\n        }\r\n        else\r\n        {\r\n            //  Store it\r\n\r\n            prev[0] = brX;\r\n            prev[1] = brY;\r\n            prev[2] = trX;\r\n            prev[3] = trY;\r\n            prev[4] = 1;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TextureTintPipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvVGV4dHVyZVRpbnRQaXBlbGluZS5qcz82YTMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNGQUE4QjtBQUNuRCxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBb0M7QUFDL0QsMEJBQTBCLG1CQUFPLENBQUMsOEhBQWtDO0FBQ3BFLHFCQUFxQixtQkFBTyxDQUFDLDRHQUFnQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyw0R0FBZ0M7QUFDN0Qsc0JBQXNCLG1CQUFPLENBQUMsNEhBQWlEO0FBQy9FLFlBQVksbUJBQU8sQ0FBQyxtRUFBVTtBQUM5QixvQkFBb0IsbUJBQU8sQ0FBQyxtRkFBa0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvREFBb0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGdEQUFnRDtBQUNwRixpQ0FBaUMsVUFBVTs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDJCQUEyQix3QkFBd0I7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxzQ0FBc0M7QUFDNUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxzQ0FBc0M7QUFDeEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscURBQXFEO0FBQ3BFLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsOENBQThDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLGFBQWE7QUFDNUIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhDQUE4QztBQUM3RCxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw4Q0FBOEM7QUFDN0QsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOENBQThDO0FBQzdELGVBQWUsOENBQThDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOENBQThDO0FBQzdELGVBQWUsOENBQThDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw4Q0FBOEM7QUFDN0QsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsOENBQThDO0FBQzdELGVBQWUsOENBQThDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLG9CQUFvQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLDhDQUE4QztBQUM3RCxlQUFlLDhDQUE4QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsK0JBQStCLHdCQUF3QjtBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3dlYmdsL3BpcGVsaW5lcy9UZXh0dXJlVGludFBpcGVsaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRWFyY3V0ID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL0VhcmN1dCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgTW9kZWxWaWV3UHJvamVjdGlvbiA9IHJlcXVpcmUoJy4vY29tcG9uZW50cy9Nb2RlbFZpZXdQcm9qZWN0aW9uJyk7XHJcbnZhciBTaGFkZXJTb3VyY2VGUyA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVRpbnQtZnJhZy5qcycpO1xyXG52YXIgU2hhZGVyU291cmNlVlMgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVUaW50LXZlcnQuanMnKTtcclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uLy4uLy4uL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XHJcbnZhciBXZWJHTFBpcGVsaW5lID0gcmVxdWlyZSgnLi4vV2ViR0xQaXBlbGluZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGV4dHVyZVRpbnRQaXBlbGluZSBpbXBsZW1lbnRzIHRoZSByZW5kZXJpbmcgaW5mcmFzdHJ1Y3R1cmVcclxuICogZm9yIGRpc3BsYXlpbmcgdGV4dHVyZWQgb2JqZWN0c1xyXG4gKiBUaGUgY29uZmlnIHByb3BlcnRpZXMgYXJlOlxyXG4gKiAtIGdhbWU6IEN1cnJlbnQgZ2FtZSBpbnN0YW5jZS5cclxuICogLSByZW5kZXJlcjogQ3VycmVudCBXZWJHTCByZW5kZXJlci5cclxuICogLSB0b3BvbG9neTogVGhpcyBpbmRpY2F0ZXMgaG93IHRoZSBwcmltaXRpdmVzIGFyZSByZW5kZXJlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgR0xfVFJJQU5HTEVTLlxyXG4gKiAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZnVsbCBsaXN0IG9mIHJlbmRlcmluZyBwcmltaXRpdmVzIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xfQVBJL0NvbnN0YW50cykuXHJcbiAqIC0gdmVydFNoYWRlcjogU291cmNlIGZvciB2ZXJ0ZXggc2hhZGVyIGFzIGEgc3RyaW5nLlxyXG4gKiAtIGZyYWdTaGFkZXI6IFNvdXJjZSBmb3IgZnJhZ21lbnQgc2hhZGVyIGFzIGEgc3RyaW5nLlxyXG4gKiAtIHZlcnRleENhcGFjaXR5OiBUaGUgYW1vdW50IG9mIHZlcnRpY2VzIHRoYXQgc2hhbGwgYmUgYWxsb2NhdGVkXHJcbiAqIC0gdmVydGV4U2l6ZTogVGhlIHNpemUgb2YgYSBzaW5nbGUgdmVydGV4IGluIGJ5dGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGV4dHVyZVRpbnRQaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFRleHR1cmUgVGludCBQaXBlbGluZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxyXG4gKi9cclxudmFyIFRleHR1cmVUaW50UGlwZWxpbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFdlYkdMUGlwZWxpbmUsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgTW9kZWxWaWV3UHJvamVjdGlvblxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRleHR1cmVUaW50UGlwZWxpbmUgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXJDb25maWcgPSBjb25maWcucmVuZGVyZXIuY29uZmlnO1xyXG5cclxuICAgICAgICAvLyAgVmVydGV4IFNpemUgPSBhdHRyaWJ1dGUgc2l6ZSBhZGRlZCB0b2dldGhlciAoMiArIDIgKyAxICsgNClcclxuXHJcbiAgICAgICAgV2ViR0xQaXBlbGluZS5jYWxsKHRoaXMsIHtcclxuICAgICAgICAgICAgZ2FtZTogY29uZmlnLmdhbWUsXHJcbiAgICAgICAgICAgIHJlbmRlcmVyOiBjb25maWcucmVuZGVyZXIsXHJcbiAgICAgICAgICAgIGdsOiBjb25maWcucmVuZGVyZXIuZ2wsXHJcbiAgICAgICAgICAgIHRvcG9sb2d5OiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndG9wb2xvZ3knLCBjb25maWcucmVuZGVyZXIuZ2wuVFJJQU5HTEVTKSxcclxuICAgICAgICAgICAgdmVydFNoYWRlcjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3ZlcnRTaGFkZXInLCBTaGFkZXJTb3VyY2VWUyksXHJcbiAgICAgICAgICAgIGZyYWdTaGFkZXI6IEdldEZhc3RWYWx1ZShjb25maWcsICdmcmFnU2hhZGVyJywgU2hhZGVyU291cmNlRlMpLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhDYXBhY2l0eTogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3ZlcnRleENhcGFjaXR5JywgNiAqIHJlbmRlcmVyQ29uZmlnLmJhdGNoU2l6ZSksXHJcbiAgICAgICAgICAgIHZlcnRleFNpemU6IEdldEZhc3RWYWx1ZShjb25maWcsICd2ZXJ0ZXhTaXplJywgRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSArIFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0KSxcclxuICAgICAgICAgICAgYXR0cmlidXRlczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpblBvc2l0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbmZpZy5yZW5kZXJlci5nbC5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2luVGV4Q29vcmQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY29uZmlnLnJlbmRlcmVyLmdsLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5UaW50RWZmZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbmZpZy5yZW5kZXJlci5nbC5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2luVGludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogNCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb25maWcucmVuZGVyZXIuZ2wuVU5TSUdORURfQllURSxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZsb2F0MzIgdmlldyBvZiB0aGUgYXJyYXkgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBpcGVsaW5lJ3MgdmVydGljZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjdmVydGV4Vmlld0YzMlxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhWaWV3RjMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVaW50MzIgdmlldyBvZiB0aGUgYXJyYXkgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBpcGVsaW5lJ3MgdmVydGljZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjdmVydGV4Vmlld1UzMlxyXG4gICAgICAgICAqIEB0eXBlIHtVaW50MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleFZpZXdVMzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0ZXhEYXRhKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2l6ZSBvZiB0aGUgYmF0Y2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjbWF4UXVhZHNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFF1YWRzID0gcmVuZGVyZXJDb25maWcuYmF0Y2hTaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb2xsZWN0aW9uIG9mIGJhdGNoIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjYmF0Y2hlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhdGNoZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCwgcmUtdXNlZCBpbnRlcm5hbGx5IGR1cmluZyBiYXRjaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNfdGVtcE1hdHJpeDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgxID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI190ZW1wTWF0cml4MlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDIgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjX3RlbXBNYXRyaXgzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4MyA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCwgcmUtdXNlZCBpbnRlcm5hbGx5IGR1cmluZyBiYXRjaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNfdGVtcE1hdHJpeDRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXg0ID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGludGVybmFsbHkgdG8gZHJhdyBzdHJva2VkIHRyaWFuZ2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSN0ZW1wVHJpYW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZW1wVHJpYW5nbGUgPSBbXHJcbiAgICAgICAgICAgIHsgeDogMCwgeTogMCwgd2lkdGg6IDAgfSxcclxuICAgICAgICAgICAgeyB4OiAwLCB5OiAwLCB3aWR0aDogMCB9LFxyXG4gICAgICAgICAgICB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwIH0sXHJcbiAgICAgICAgICAgIHsgeDogMCwgeTogMCwgd2lkdGg6IDAgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW50IGVmZmVjdCB0byBiZSBhcHBsaWVkIGJ5IHRoZSBzaGFkZXIgaW4gdGhlIG5leHQgZ2VvbWV0cnkgZHJhdzpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiAwID0gdGV4dHVyZSBtdWx0aXBsaWVkIGJ5IGNvbG9yXHJcbiAgICAgICAgICogMSA9IHNvbGlkIGNvbG9yICsgdGV4dHVyZSBhbHBoYVxyXG4gICAgICAgICAqIDIgPSBzb2xpZCBjb2xvciwgbm8gdGV4dHVyZVxyXG4gICAgICAgICAqIDMgPSBzb2xpZCB0ZXh0dXJlLCBubyBjb2xvclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI3RpbnRFZmZlY3RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludEVmZmVjdCA9IDI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhY2hlZCBzdHJva2UgdGludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNzdHJva2VUaW50XHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0cm9rZVRpbnQgPSB7IFRMOiAwLCBUUjogMCwgQkw6IDAsIEJSOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhY2hlZCBmaWxsIHRpbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjZmlsbFRpbnRcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbFRpbnQgPSB7IFRMOiAwLCBUUjogMCwgQkw6IDAsIEJSOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRleHR1cmUgZnJhbWUgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI2N1cnJlbnRGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSB7IHUwOiAwLCB2MDogMCwgdTE6IDEsIHYxOiAxIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHBhdGggcXVhZCBjYWNoZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNmaXJzdFF1YWRcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maXJzdFF1YWQgPSBbIDAsIDAsIDAsIDAsIDAgXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcGF0aCBxdWFkIGNhY2hlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI3ByZXZRdWFkXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldlF1YWQgPSBbIDAsIDAsIDAsIDAsIDAgXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXNlZCBpbnRlcm5hbGx5IGZvciB0cmlhbmd1bGF0aW5nIGEgcG9seWdvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNwb2x5Z29uQ2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2x5Z29uQ2FjaGUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tdnBJbml0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHBpcGVsaW5lIG5lZWRzIHRvIGJlIHVzZWQuXHJcbiAgICAgKiBJdCBiaW5kcyBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNvbkJpbmRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgV2ViR0xQaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb25CaW5kOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIFdlYkdMUGlwZWxpbmUucHJvdG90eXBlLm9uQmluZC5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm12cFVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNpemVzIHRoaXMgcGlwZWxpbmUgYW5kIHVwZGF0ZXMgdGhlIHByb2plY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjcmVzaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgbmV3IHdpZHRoLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBuZXcgaGVpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc29sdXRpb24gLSBUaGUgcmVzb2x1dGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFdlYkdMUGlwZWxpbmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgV2ViR0xQaXBlbGluZS5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgd2lkdGgsIGhlaWdodCwgcmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMucHJvak9ydGhvKDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCAtMTAwMC4wLCAxMDAwLjApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3NpZ25zIGEgdGV4dHVyZSB0byB0aGUgY3VycmVudCBiYXRjaC4gSWYgYSBkaWZmZXJlbnQgdGV4dHVyZSBpcyBhbHJlYWR5IHNldCBpdCBjcmVhdGVzIGEgbmV3IGJhdGNoIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNzZXRUZXh0dXJlMkRcclxuICAgICAqIEBzaW5jZSAzLjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2ViR0xUZXh0dXJlfSBbdGV4dHVyZV0gLSBXZWJHTFRleHR1cmUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IGJhdGNoLiBJZiBub3QgZ2l2ZW4gdXNlcyBibGFua1RleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt1bml0PTBdIC0gVGV4dHVyZSB1bml0IHRvIHdoaWNoIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIGJvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZX0gVGhpcyBwaXBlbGluZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTJEOiBmdW5jdGlvbiAodGV4dHVyZSwgdW5pdClcclxuICAgIHtcclxuICAgICAgICBpZiAodGV4dHVyZSA9PT0gdW5kZWZpbmVkKSB7IHRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLmJsYW5rVGV4dHVyZS5nbFRleHR1cmU7IH1cclxuICAgICAgICBpZiAodW5pdCA9PT0gdW5kZWZpbmVkKSB7IHVuaXQgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVUZXh0dXJlQmF0Y2godGV4dHVyZSwgdW5pdCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2hCYXRjaCh0ZXh0dXJlLCB1bml0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBiYXRjaCBoYXMgdGhlIHNhbWUgdGV4dHVyZSBhbmQgdGV4dHVyZSB1bml0LCBvciBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXRjaC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNyZXF1aXJlVGV4dHVyZUJhdGNoXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFRleHR1cmV9IHRleHR1cmUgLSBXZWJHTFRleHR1cmUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IGJhdGNoLiBJZiBub3QgZ2l2ZW4gdXNlcyBibGFua1RleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHVuaXQgLSBUZXh0dXJlIHVuaXQgdG8gd2hpY2ggdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwaXBlbGluZSBuZWVkcyB0byBjcmVhdGUgYSBuZXcgYmF0Y2gsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICByZXF1aXJlVGV4dHVyZUJhdGNoOiBmdW5jdGlvbiAodGV4dHVyZSwgdW5pdClcclxuICAgIHtcclxuICAgICAgICB2YXIgYmF0Y2hlcyA9IHRoaXMuYmF0Y2hlcztcclxuICAgICAgICB2YXIgYmF0Y2hMZW5ndGggPSBiYXRjaGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGJhdGNoTGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBUZXh0dXJlIFVuaXQgc3BlY2lmaWVkLCB3ZSBnZXQgdGhlIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZXMgYXJyYXksIG90aGVyd2lzZSB3ZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHlcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlID0gKHVuaXQgPiAwKSA/IGJhdGNoZXNbYmF0Y2hMZW5ndGggLSAxXS50ZXh0dXJlc1t1bml0IC0gMV0gOiBiYXRjaGVzW2JhdGNoTGVuZ3RoIC0gMV0udGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAhKGN1cnJlbnRUZXh0dXJlID09PSB0ZXh0dXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgYmF0Y2ggb2JqZWN0IGFuZCBwdXNoZXMgaXQgdG8gYSBiYXRjaCBhcnJheS5cclxuICAgICAqIFRoZSBiYXRjaCBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgXHJcbiAgICAgKiB2ZXJ0ZXggYmF0Y2ggbGlrZSB0aGUgb2Zmc2V0IGluIHRoZSB2ZXJ0ZXggYnVmZmVyLCB2ZXJ0ZXggY291bnQgYW5kIFxyXG4gICAgICogdGhlIHRleHR1cmVzIHVzZWQgYnkgdGhhdCBiYXRjaC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNwdXNoQmF0Y2hcclxuICAgICAqIEBzaW5jZSAzLjEuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIE9wdGlvbmFsIFdlYkdMVGV4dHVyZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGNyZWF0ZWQgYmF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHVuaXQgLSBUZXh0dXJlIHVuaXQgdG8gd2hpY2ggdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKi9cclxuICAgIHB1c2hCYXRjaDogZnVuY3Rpb24gKHRleHR1cmUsIHVuaXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVuaXQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJhdGNoZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBmaXJzdDogdGhpcy52ZXJ0ZXhDb3VudCxcclxuICAgICAgICAgICAgICAgIHRleHR1cmU6IHRleHR1cmUsXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogW11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGV4dHVyZXNbdW5pdCAtIDFdID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpcnN0OiB0aGlzLnZlcnRleENvdW50LFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzOiB0ZXh0dXJlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBsb2FkcyB0aGUgdmVydGV4IGRhdGEgYW5kIGVtaXRzIGEgZHJhdyBjYWxsIGZvciB0aGUgY3VycmVudCBiYXRjaCBvZiB2ZXJ0aWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNmbHVzaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBXZWJHTFBpcGVsaW5lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmbHVzaDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mbHVzaExvY2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mbHVzaExvY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgdG9wb2xvZ3kgPSB0aGlzLnRvcG9sb2d5O1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaXplID0gdGhpcy52ZXJ0ZXhTaXplO1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIHZhciBiYXRjaGVzID0gdGhpcy5iYXRjaGVzO1xyXG4gICAgICAgIHZhciBiYXRjaENvdW50ID0gYmF0Y2hlcy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGJhdGNoVmVydGV4Q291bnQgPSAwO1xyXG4gICAgICAgIHZhciBiYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdmFyIGJhdGNoTmV4dDtcclxuICAgICAgICB2YXIgdGV4dHVyZUluZGV4O1xyXG4gICAgICAgIHZhciBuVGV4dHVyZTtcclxuXHJcbiAgICAgICAgaWYgKGJhdGNoQ291bnQgPT09IDAgfHwgdmVydGV4Q291bnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZsdXNoTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmJ5dGVzLnN1YmFycmF5KDAsIHZlcnRleENvdW50ICogdmVydGV4U2l6ZSkpO1xyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgVEVYVFVSRSBCQVRDSEVTXHJcblxyXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBiYXRjaENvdW50IC0gMTsgaW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJhdGNoID0gYmF0Y2hlc1tpbmRleF07XHJcbiAgICAgICAgICAgIGJhdGNoTmV4dCA9IGJhdGNoZXNbaW5kZXggKyAxXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBNdWx0aS10ZXh0dXJlIGNoZWNrIChmb3Igbm9uLXplcm8gdGV4dHVyZSB1bml0cylcclxuICAgICAgICAgICAgaWYgKGJhdGNoLnRleHR1cmVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAodGV4dHVyZUluZGV4ID0gMDsgdGV4dHVyZUluZGV4IDwgYmF0Y2gudGV4dHVyZXMubGVuZ3RoOyArK3RleHR1cmVJbmRleClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuVGV4dHVyZSA9IGJhdGNoLnRleHR1cmVzW3RleHR1cmVJbmRleF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuVGV4dHVyZSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmUyRChuVGV4dHVyZSwgMSArIHRleHR1cmVJbmRleCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYmF0Y2hWZXJ0ZXhDb3VudCA9IGJhdGNoTmV4dC5maXJzdCAtIGJhdGNoLmZpcnN0O1xyXG5cclxuICAgICAgICAgICAgLy8gIEJhaWwgb3V0IGlmIHRleHR1cmUgcHJvcGVydHkgaXMgbnVsbCAoaS5lLiBpZiBhIHRleHR1cmUgdW5pdCA+IDApXHJcbiAgICAgICAgICAgIGlmIChiYXRjaC50ZXh0dXJlID09PSBudWxsIHx8IGJhdGNoVmVydGV4Q291bnQgPD0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmUyRChiYXRjaC50ZXh0dXJlLCAwLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBnbC5kcmF3QXJyYXlzKHRvcG9sb2d5LCBiYXRjaC5maXJzdCwgYmF0Y2hWZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMZWZ0IG92ZXIgZGF0YVxyXG4gICAgICAgIGJhdGNoID0gYmF0Y2hlc1tiYXRjaENvdW50IC0gMV07XHJcblxyXG4gICAgICAgIC8vICBNdWx0aS10ZXh0dXJlIGNoZWNrIChmb3Igbm9uLXplcm8gdGV4dHVyZSB1bml0cylcclxuXHJcbiAgICAgICAgaWYgKGJhdGNoLnRleHR1cmVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IGJhdGNoLnRleHR1cmVzLmxlbmd0aDsgKyt0ZXh0dXJlSW5kZXgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5UZXh0dXJlID0gYmF0Y2gudGV4dHVyZXNbdGV4dHVyZUluZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoblRleHR1cmUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVyZTJEKG5UZXh0dXJlLCAxICsgdGV4dHVyZUluZGV4LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYmF0Y2hWZXJ0ZXhDb3VudCA9IHZlcnRleENvdW50IC0gYmF0Y2guZmlyc3Q7XHJcblxyXG4gICAgICAgIGlmIChiYXRjaC50ZXh0dXJlICYmIGJhdGNoVmVydGV4Q291bnQgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVyZTJEKGJhdGNoLnRleHR1cmUsIDAsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmRyYXdBcnJheXModG9wb2xvZ3ksIGJhdGNoLmZpcnN0LCBiYXRjaFZlcnRleENvdW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4Q291bnQgPSAwO1xyXG5cclxuICAgICAgICBiYXRjaGVzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZmx1c2hMb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBTcHJpdGUgR2FtZSBPYmplY3QsIG9yIGFueSBvYmplY3QgdGhhdCBleHRlbmRzIGl0LCBhbmQgYWRkcyBpdCB0byB0aGUgYmF0Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjYmF0Y2hTcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZXxQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlKX0gc3ByaXRlIC0gVGhlIHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3QgdG8gYWRkIHRvIHRoZSBiYXRjaC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gdXNlIGZvciB0aGUgcmVuZGVyaW5nIHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBbcGFyZW50VHJhbnNmb3JtTWF0cml4XSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4IG9mIHRoZSBwYXJlbnQgY29udGFpbmVyLCBpZiBzZXQuXHJcbiAgICAgKi9cclxuICAgIGJhdGNoU3ByaXRlOiBmdW5jdGlvbiAoc3ByaXRlLCBjYW1lcmEsIHBhcmVudFRyYW5zZm9ybU1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgV2lsbCBjYXVzZSBhIGZsdXNoIGlmIHRoZXJlIGFyZSBiYXRjaFNpemUgZW50cmllcyBhbHJlYWR5XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIGNhbU1hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgxO1xyXG4gICAgICAgIHZhciBzcHJpdGVNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MjtcclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSBzcHJpdGUuZnJhbWU7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBmcmFtZS5nbFRleHR1cmU7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHZhciB2MCA9IGZyYW1lLnYwO1xyXG4gICAgICAgIHZhciB1MSA9IGZyYW1lLnUxO1xyXG4gICAgICAgIHZhciB2MSA9IGZyYW1lLnYxO1xyXG4gICAgICAgIHZhciBmcmFtZVggPSBmcmFtZS54O1xyXG4gICAgICAgIHZhciBmcmFtZVkgPSBmcmFtZS55O1xyXG4gICAgICAgIHZhciBmcmFtZVdpZHRoID0gZnJhbWUuY3V0V2lkdGg7XHJcbiAgICAgICAgdmFyIGZyYW1lSGVpZ2h0ID0gZnJhbWUuY3V0SGVpZ2h0O1xyXG4gICAgICAgIHZhciBjdXN0b21QaXZvdCA9IGZyYW1lLmN1c3RvbVBpdm90O1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheU9yaWdpblggPSBzcHJpdGUuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgdmFyIGRpc3BsYXlPcmlnaW5ZID0gc3ByaXRlLmRpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgeCA9IC1kaXNwbGF5T3JpZ2luWCArIGZyYW1lWDtcclxuICAgICAgICB2YXIgeSA9IC1kaXNwbGF5T3JpZ2luWSArIGZyYW1lWTtcclxuXHJcbiAgICAgICAgaWYgKHNwcml0ZS5pc0Nyb3BwZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3JvcCA9IHNwcml0ZS5fY3JvcDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcm9wLmZsaXBYICE9PSBzcHJpdGUuZmxpcFggfHwgY3JvcC5mbGlwWSAhPT0gc3ByaXRlLmZsaXBZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZS51cGRhdGVDcm9wVVZzKGNyb3AsIHNwcml0ZS5mbGlwWCwgc3ByaXRlLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdTAgPSBjcm9wLnUwO1xyXG4gICAgICAgICAgICB2MCA9IGNyb3AudjA7XHJcbiAgICAgICAgICAgIHUxID0gY3JvcC51MTtcclxuICAgICAgICAgICAgdjEgPSBjcm9wLnYxO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVXaWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgIGZyYW1lSGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBmcmFtZVggPSBjcm9wLng7XHJcbiAgICAgICAgICAgIGZyYW1lWSA9IGNyb3AueTtcclxuXHJcbiAgICAgICAgICAgIHggPSAtZGlzcGxheU9yaWdpblggKyBmcmFtZVg7XHJcbiAgICAgICAgICAgIHkgPSAtZGlzcGxheU9yaWdpblkgKyBmcmFtZVk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmxpcFggPSAxO1xyXG4gICAgICAgIHZhciBmbGlwWSA9IDE7XHJcblxyXG4gICAgICAgIGlmIChzcHJpdGUuZmxpcFgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVBpdm90KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB4ICs9ICgtZnJhbWUucmVhbFdpZHRoICsgKGRpc3BsYXlPcmlnaW5YICogMikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmbGlwWCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEF1dG8taW52ZXJ0IHRoZSBmbGlwWSBpZiB0aGlzIGlzIGNvbWluZyBmcm9tIGEgR0xUZXh0dXJlXHJcbiAgICAgICAgaWYgKHNwcml0ZS5mbGlwWSB8fCAoZnJhbWUuc291cmNlLmlzR0xUZXh0dXJlICYmICF0ZXh0dXJlLmZsaXBZKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghY3VzdG9tUGl2b3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHkgKz0gKC1mcmFtZS5yZWFsSGVpZ2h0ICsgKGRpc3BsYXlPcmlnaW5ZICogMikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmbGlwWSA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmFwcGx5SVRSUyhzcHJpdGUueCwgc3ByaXRlLnksIHNwcml0ZS5yb3RhdGlvbiwgc3ByaXRlLnNjYWxlWCAqIGZsaXBYLCBzcHJpdGUuc2NhbGVZICogZmxpcFkpO1xyXG5cclxuICAgICAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudFRyYW5zZm9ybU1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3ByaXRlLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNwcml0ZS5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3ByaXRlLng7XHJcbiAgICAgICAgICAgIHNwcml0ZU1hdHJpeC5mID0gc3ByaXRlLnk7XHJcblxyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNwcml0ZS5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNwcml0ZS5zY3JvbGxGYWN0b3JZO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeHcgPSB4ICsgZnJhbWVXaWR0aDtcclxuICAgICAgICB2YXIgeWggPSB5ICsgZnJhbWVIZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeHcsIHloKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBjYWxjTWF0cml4LmdldFkoeHcsIHkpO1xyXG5cclxuICAgICAgICB2YXIgdGludFRMID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGEoc3ByaXRlLl90aW50VEwsIGNhbWVyYS5hbHBoYSAqIHNwcml0ZS5fYWxwaGFUTCk7XHJcbiAgICAgICAgdmFyIHRpbnRUUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNwcml0ZS5fdGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcHJpdGUuX2FscGhhVFIpO1xyXG4gICAgICAgIHZhciB0aW50QkwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcHJpdGUuX3RpbnRCTCwgY2FtZXJhLmFscGhhICogc3ByaXRlLl9hbHBoYUJMKTtcclxuICAgICAgICB2YXIgdGludEJSID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGEoc3ByaXRlLl90aW50QlIsIGNhbWVyYS5hbHBoYSAqIHNwcml0ZS5fYWxwaGFCUik7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICB2YXIgdGludEVmZmVjdCA9IChzcHJpdGUuX2lzVGludGVkICYmIHNwcml0ZS50aW50RmlsbCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmF0Y2hRdWFkKHR4MCwgdHkwLCB0eDEsIHR5MSwgdHgyLCB0eTIsIHR4MywgdHkzLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEJSLCB0aW50RWZmZWN0LCB0ZXh0dXJlLCAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSB2ZXJ0aWNlcyBkYXRhIGludG8gdGhlIGJhdGNoIGFuZCBmbHVzaGVzIGlmIGZ1bGwuXHJcbiAgICAgKiBcclxuICAgICAqIEFzc3VtZXMgNiB2ZXJ0aWNlcyBpbiB0aGUgZm9sbG93aW5nIGFycmFuZ2VtZW50OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBcclxuICAgICAqIDAtLS0tM1xyXG4gICAgICogfFxcICBCfFxyXG4gICAgICogfCBcXCAgfFxyXG4gICAgICogfCAgXFwgfFxyXG4gICAgICogfCBBIFxcfFxyXG4gICAgICogfCAgICBcXFxyXG4gICAgICogMS0tLS0yXHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogV2hlcmUgdHgwL3R5MCA9IDAsIHR4MS90eTEgPSAxLCB0eDIvdHkyID0gMiBhbmQgdHgzL3R5MyA9IDNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNiYXRjaFF1YWRcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSBUaGUgdG9wLWxlZnQgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MCAtIFRoZSB0b3AtbGVmdCB5IHBvc2l0aW9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIGJvdHRvbS1sZWZ0IHggcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTEgLSBUaGUgYm90dG9tLWxlZnQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFRoZSBib3R0b20tcmlnaHQgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSBib3R0b20tcmlnaHQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MyAtIFRoZSB0b3AtcmlnaHQgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MyAtIFRoZSB0b3AtcmlnaHQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1MCAtIFVWIHUwIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHYwIC0gVVYgdjAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdTEgLSBVViB1MSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2MSAtIFVWIHYxIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbnRUTCAtIFRoZSB0b3AtbGVmdCB0aW50IGNvbG9yIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbnRUUiAtIFRoZSB0b3AtcmlnaHQgdGludCBjb2xvciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50QkwgLSBUaGUgYm90dG9tLWxlZnQgdGludCBjb2xvciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50QlIgLSBUaGUgYm90dG9tLXJpZ2h0IHRpbnQgY29sb3IgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8Ym9vbGVhbil9IHRpbnRFZmZlY3QgLSBUaGUgdGludCBlZmZlY3QgZm9yIHRoZSBzaGFkZXIgdG8gdXNlLlxyXG4gICAgICogQHBhcmFtIHtXZWJHTFRleHR1cmV9IFt0ZXh0dXJlXSAtIFdlYkdMVGV4dHVyZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgYmF0Y2ggaWYgYSBmbHVzaCBvY2N1cnMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt1bml0PTBdIC0gVGV4dHVyZSB1bml0IHRvIHdoaWNoIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIGJvdW5kLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBtZXRob2QgY2F1c2VkIHRoZSBiYXRjaCB0byBmbHVzaCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGJhdGNoUXVhZDogZnVuY3Rpb24gKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdTAsIHYwLCB1MSwgdjEsIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCwgdGV4dHVyZSwgdW5pdClcclxuICAgIHtcclxuICAgICAgICB2YXIgaGFzRmx1c2hlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0ZXhDb3VudCArIDYgPiB0aGlzLnZlcnRleENhcGFjaXR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgaGFzRmx1c2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUyRCh0ZXh0dXJlLCB1bml0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhWaWV3RjMyID0gdGhpcy52ZXJ0ZXhWaWV3RjMyO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhWaWV3VTMyID0gdGhpcy52ZXJ0ZXhWaWV3VTMyO1xyXG5cclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gKHRoaXMudmVydGV4Q291bnQgKiB0aGlzLnZlcnRleENvbXBvbmVudENvdW50KSAtIDE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geDA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB5MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHUwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdjA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50RWZmZWN0O1xyXG4gICAgICAgIHZlcnRleFZpZXdVMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludFRMO1xyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHgxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB1MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHYxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludEVmZmVjdDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3VTMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRCTDtcclxuXHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB4MjtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHkyO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB2MTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRFZmZlY3Q7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50QlI7XHJcblxyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geDA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB5MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHUwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdjA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50RWZmZWN0O1xyXG4gICAgICAgIHZlcnRleFZpZXdVMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludFRMO1xyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHgyO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geTI7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB1MTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHYxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludEVmZmVjdDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3VTMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRCUjtcclxuXHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB4MztcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHkzO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB2MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRFZmZlY3Q7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50VFI7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4Q291bnQgKz0gNjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhc0ZsdXNoZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgdmVydGljZXMgZGF0YSBpbnRvIHRoZSBiYXRjaCBhbmQgZmx1c2hlcyBpZiBmdWxsLlxyXG4gICAgICogXHJcbiAgICAgKiBBc3N1bWVzIDMgdmVydGljZXMgaW4gdGhlIGZvbGxvd2luZyBhcnJhbmdlbWVudDpcclxuICAgICAqIFxyXG4gICAgICogYGBgXHJcbiAgICAgKiAwXHJcbiAgICAgKiB8XFxcclxuICAgICAqIHwgXFxcclxuICAgICAqIHwgIFxcXHJcbiAgICAgKiB8ICAgXFxcclxuICAgICAqIHwgICAgXFxcclxuICAgICAqIDEtLS0tLTJcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI2JhdGNoVHJpXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIGJvdHRvbS1sZWZ0IHggcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTEgLSBUaGUgYm90dG9tLWxlZnQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFRoZSBib3R0b20tcmlnaHQgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSBib3R0b20tcmlnaHQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MyAtIFRoZSB0b3AtcmlnaHQgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MyAtIFRoZSB0b3AtcmlnaHQgeSBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1MCAtIFVWIHUwIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHYwIC0gVVYgdjAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdTEgLSBVViB1MSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2MSAtIFVWIHYxIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbnRUTCAtIFRoZSB0b3AtbGVmdCB0aW50IGNvbG9yIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbnRUUiAtIFRoZSB0b3AtcmlnaHQgdGludCBjb2xvciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50QkwgLSBUaGUgYm90dG9tLWxlZnQgdGludCBjb2xvciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxib29sZWFuKX0gdGludEVmZmVjdCAtIFRoZSB0aW50IGVmZmVjdCBmb3IgdGhlIHNoYWRlciB0byB1c2UuXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gW3RleHR1cmVdIC0gV2ViR0xUZXh0dXJlIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgY3VycmVudCBiYXRjaCBpZiBhIGZsdXNoIG9jY3Vycy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3VuaXQ9MF0gLSBUZXh0dXJlIHVuaXQgdG8gd2hpY2ggdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgYm91bmQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIG1ldGhvZCBjYXVzZWQgdGhlIGJhdGNoIHRvIGZsdXNoLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUcmk6IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEVmZmVjdCwgdGV4dHVyZSwgdW5pdClcclxuICAgIHtcclxuICAgICAgICB2YXIgaGFzRmx1c2hlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0ZXhDb3VudCArIDMgPiB0aGlzLnZlcnRleENhcGFjaXR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQodGV4dHVyZSwgdW5pdCk7XHJcblxyXG4gICAgICAgICAgICBoYXNGbHVzaGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhWaWV3RjMyID0gdGhpcy52ZXJ0ZXhWaWV3RjMyO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhWaWV3VTMyID0gdGhpcy52ZXJ0ZXhWaWV3VTMyO1xyXG5cclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gKHRoaXMudmVydGV4Q291bnQgKiB0aGlzLnZlcnRleENvbXBvbmVudENvdW50KSAtIDE7XHJcblxyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geDE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB5MTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHUwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdjA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50RWZmZWN0O1xyXG4gICAgICAgIHZlcnRleFZpZXdVMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludFRMO1xyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHgyO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0geTI7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB1MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHYxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdGludEVmZmVjdDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3VTMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRUUjtcclxuXHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB4MztcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHkzO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB2MTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRFZmZlY3Q7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZlcnRleE9mZnNldF0gPSB0aW50Qkw7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4Q291bnQgKz0gMztcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhc0ZsdXNoZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJpYyBmdW5jdGlvbiBmb3IgYmF0Y2hpbmcgYSB0ZXh0dXJlZCBxdWFkIHVzaW5nIGFyZ3VtZW50IHZhbHVlcyBpbnN0ZWFkIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjYmF0Y2hUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gU291cmNlIEdhbWVPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIFJhdyBXZWJHTFRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWFkLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0ZXh0dXJlV2lkdGggLSBSZWFsIHRleHR1cmUgd2lkdGguXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRleHR1cmVIZWlnaHQgLSBSZWFsIHRleHR1cmUgaGVpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY1ggLSBYIGNvb3JkaW5hdGUgb2YgdGhlIHF1YWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjWSAtIFkgY29vcmRpbmF0ZSBvZiB0aGUgcXVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNXaWR0aCAtIFdpZHRoIG9mIHRoZSBxdWFkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0hlaWdodCAtIEhlaWdodCBvZiB0aGUgcXVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBYIGNvbXBvbmVudCBvZiBzY2FsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVkgLSBZIGNvbXBvbmVudCBvZiBzY2FsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvbiAtIFJvdGF0aW9uIG9mIHRoZSBxdWFkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGlwWCAtIEluZGljYXRlcyBpZiB0aGUgcXVhZCBpcyBob3Jpem9udGFsbHkgZmxpcHBlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmxpcFkgLSBJbmRpY2F0ZXMgaWYgdGhlIHF1YWQgaXMgdmVydGljYWxseSBmbGlwcGVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbEZhY3RvclggLSBCeSB3aGljaCBmYWN0b3IgaXMgdGhlIHF1YWQgYWZmZWN0ZWQgYnkgdGhlIGNhbWVyYSBob3Jpem9udGFsIHNjcm9sbC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxGYWN0b3JZIC0gQnkgd2hpY2ggZmFjdG9yIGlzIHRoZSBxdWFkIGVmZmVjdGVkIGJ5IHRoZSBjYW1lcmEgdmVydGljYWwgc2Nyb2xsLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3BsYXlPcmlnaW5YIC0gSG9yaXpvbnRhbCBvcmlnaW4gaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3BsYXlPcmlnaW5ZIC0gVmVydGljYWwgb3JpZ2luIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVggLSBYIGNvb3JkaW5hdGUgb2YgdGhlIHRleHR1cmUgZnJhbWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVZIC0gWSBjb29yZGluYXRlIG9mIHRoZSB0ZXh0dXJlIGZyYW1lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lV2lkdGggLSBXaWR0aCBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZUhlaWdodCAtIEhlaWdodCBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGludFRMIC0gVGludCBmb3IgdG9wIGxlZnQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbnRUUiAtIFRpbnQgZm9yIHRvcCByaWdodC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGludEJMIC0gVGludCBmb3IgYm90dG9tIGxlZnQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbnRCUiAtIFRpbnQgZm9yIGJvdHRvbSByaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50RWZmZWN0IC0gVGhlIHRpbnQgZWZmZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVPZmZzZXQgLSBIb3Jpem9udGFsIG9mZnNldCBvbiB0ZXh0dXJlIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdk9mZnNldCAtIFZlcnRpY2FsIG9mZnNldCBvbiB0ZXh0dXJlIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBDdXJyZW50IHVzZWQgY2FtZXJhLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudFRyYW5zZm9ybU1hdHJpeCAtIFBhcmVudCBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwRmxpcD1mYWxzZV0gLSBTa2lwIHRoZSByZW5kZXJUZXh0dXJlIGNoZWNrLlxyXG4gICAgICovXHJcbiAgICBiYXRjaFRleHR1cmU6IGZ1bmN0aW9uIChcclxuICAgICAgICBnYW1lT2JqZWN0LFxyXG4gICAgICAgIHRleHR1cmUsXHJcbiAgICAgICAgdGV4dHVyZVdpZHRoLCB0ZXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgIHNyY1gsIHNyY1ksXHJcbiAgICAgICAgc3JjV2lkdGgsIHNyY0hlaWdodCxcclxuICAgICAgICBzY2FsZVgsIHNjYWxlWSxcclxuICAgICAgICByb3RhdGlvbixcclxuICAgICAgICBmbGlwWCwgZmxpcFksXHJcbiAgICAgICAgc2Nyb2xsRmFjdG9yWCwgc2Nyb2xsRmFjdG9yWSxcclxuICAgICAgICBkaXNwbGF5T3JpZ2luWCwgZGlzcGxheU9yaWdpblksXHJcbiAgICAgICAgZnJhbWVYLCBmcmFtZVksIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LFxyXG4gICAgICAgIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCxcclxuICAgICAgICB1T2Zmc2V0LCB2T2Zmc2V0LFxyXG4gICAgICAgIGNhbWVyYSxcclxuICAgICAgICBwYXJlbnRUcmFuc2Zvcm1NYXRyaXgsXHJcbiAgICAgICAgc2tpcEZsaXApXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzLCBnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgdmFyIGNhbU1hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgxO1xyXG4gICAgICAgIHZhciBzcHJpdGVNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MjtcclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgICAgICB2YXIgdTAgPSAoZnJhbWVYIC8gdGV4dHVyZVdpZHRoKSArIHVPZmZzZXQ7XHJcbiAgICAgICAgdmFyIHYwID0gKGZyYW1lWSAvIHRleHR1cmVIZWlnaHQpICsgdk9mZnNldDtcclxuICAgICAgICB2YXIgdTEgPSAoZnJhbWVYICsgZnJhbWVXaWR0aCkgLyB0ZXh0dXJlV2lkdGggKyB1T2Zmc2V0O1xyXG4gICAgICAgIHZhciB2MSA9IChmcmFtZVkgKyBmcmFtZUhlaWdodCkgLyB0ZXh0dXJlSGVpZ2h0ICsgdk9mZnNldDtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gc3JjV2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHNyY0hlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHggPSAtZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgdmFyIHkgPSAtZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIGlmIChnYW1lT2JqZWN0LmlzQ3JvcHBlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjcm9wID0gZ2FtZU9iamVjdC5fY3JvcDtcclxuXHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcC53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBzcmNXaWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgIHNyY0hlaWdodCA9IGNyb3AuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgZnJhbWVYID0gY3JvcC54O1xyXG4gICAgICAgICAgICBmcmFtZVkgPSBjcm9wLnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgb3ggPSBmcmFtZVg7XHJcbiAgICAgICAgICAgIHZhciBveSA9IGZyYW1lWTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmbGlwWClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3ggPSAoZnJhbWVXaWR0aCAtIGNyb3AueCAtIGNyb3Aud2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKGZsaXBZICYmICF0ZXh0dXJlLmlzUmVuZGVyVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3kgPSAoZnJhbWVIZWlnaHQgLSBjcm9wLnkgLSBjcm9wLmhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHUwID0gKG94IC8gdGV4dHVyZVdpZHRoKSArIHVPZmZzZXQ7XHJcbiAgICAgICAgICAgIHYwID0gKG95IC8gdGV4dHVyZUhlaWdodCkgKyB2T2Zmc2V0O1xyXG4gICAgICAgICAgICB1MSA9IChveCArIGNyb3Aud2lkdGgpIC8gdGV4dHVyZVdpZHRoICsgdU9mZnNldDtcclxuICAgICAgICAgICAgdjEgPSAob3kgKyBjcm9wLmhlaWdodCkgLyB0ZXh0dXJlSGVpZ2h0ICsgdk9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIHggPSAtZGlzcGxheU9yaWdpblggKyBmcmFtZVg7XHJcbiAgICAgICAgICAgIHkgPSAtZGlzcGxheU9yaWdpblkgKyBmcmFtZVk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSW52ZXJ0IHRoZSBmbGlwWSBpZiB0aGlzIGlzIGEgUmVuZGVyVGV4dHVyZVxyXG4gICAgICAgIGZsaXBZID0gZmxpcFkgXiAoIXNraXBGbGlwICYmIHRleHR1cmUuaXNSZW5kZXJUZXh0dXJlID8gMSA6IDApO1xyXG5cclxuICAgICAgICBpZiAoZmxpcFgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCAqPSAtMTtcclxuICAgICAgICAgICAgeCArPSBzcmNXaWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmbGlwWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlaWdodCAqPSAtMTtcclxuICAgICAgICAgICAgeSArPSBzcmNIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeHcgPSB4ICsgd2lkdGg7XHJcbiAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcclxuXHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmFwcGx5SVRSUyhzcmNYLCBzcmNZLCByb3RhdGlvbiwgc2NhbGVYLCBzY2FsZVkpO1xyXG5cclxuICAgICAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudFRyYW5zZm9ybU1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXguZSA9IHNyY1g7XHJcbiAgICAgICAgICAgIHNwcml0ZU1hdHJpeC5mID0gc3JjWTtcclxuXHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNwcml0ZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzY3JvbGxGYWN0b3JZO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdHgwID0gY2FsY01hdHJpeC5nZXRYKHgsIHkpO1xyXG4gICAgICAgIHZhciB0eTAgPSBjYWxjTWF0cml4LmdldFkoeCwgeSk7XHJcblxyXG4gICAgICAgIHZhciB0eDEgPSBjYWxjTWF0cml4LmdldFgoeCwgeWgpO1xyXG4gICAgICAgIHZhciB0eTEgPSBjYWxjTWF0cml4LmdldFkoeCwgeWgpO1xyXG5cclxuICAgICAgICB2YXIgdHgyID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MiA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeWgpO1xyXG5cclxuICAgICAgICB2YXIgdHgzID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5KTtcclxuICAgICAgICB2YXIgdHkzID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5KTtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYS5yb3VuZFBpeGVscylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR4MCA9IE1hdGgucm91bmQodHgwKTtcclxuICAgICAgICAgICAgdHkwID0gTWF0aC5yb3VuZCh0eTApO1xyXG5cclxuICAgICAgICAgICAgdHgxID0gTWF0aC5yb3VuZCh0eDEpO1xyXG4gICAgICAgICAgICB0eTEgPSBNYXRoLnJvdW5kKHR5MSk7XHJcblxyXG4gICAgICAgICAgICB0eDIgPSBNYXRoLnJvdW5kKHR4Mik7XHJcbiAgICAgICAgICAgIHR5MiA9IE1hdGgucm91bmQodHkyKTtcclxuXHJcbiAgICAgICAgICAgIHR4MyA9IE1hdGgucm91bmQodHgzKTtcclxuICAgICAgICAgICAgdHkzID0gTWF0aC5yb3VuZCh0eTMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmF0Y2hRdWFkKHR4MCwgdHkwLCB0eDEsIHR5MSwgdHgyLCB0eTIsIHR4MywgdHkzLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEJSLCB0aW50RWZmZWN0LCB0ZXh0dXJlLCAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgVGV4dHVyZSBGcmFtZSBpbnRvIHRoZSBiYXRjaCBmb3IgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI2JhdGNoVGV4dHVyZUZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IGZyYW1lIC0gVGhlIFRleHR1cmUgRnJhbWUgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHRvIHJlbmRlciB0aGUgdGV4dHVyZSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHJlbmRlciB0aGUgdGV4dHVyZSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW50IC0gVGhlIHRpbnQgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGEgLSBUaGUgYWxwaGEgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gdHJhbnNmb3JtTWF0cml4IC0gVGhlIFRyYW5zZm9ybSBNYXRyaXggdG8gdXNlIGZvciB0aGUgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBbcGFyZW50VHJhbnNmb3JtTWF0cml4XSAtIEEgcGFyZW50IFRyYW5zZm9ybSBNYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGJhdGNoVGV4dHVyZUZyYW1lOiBmdW5jdGlvbiAoXHJcbiAgICAgICAgZnJhbWUsXHJcbiAgICAgICAgeCwgeSxcclxuICAgICAgICB0aW50LCBhbHBoYSxcclxuICAgICAgICB0cmFuc2Zvcm1NYXRyaXgsXHJcbiAgICAgICAgcGFyZW50VHJhbnNmb3JtTWF0cml4XHJcbiAgICApXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIHNwcml0ZU1hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgxLmNvcHlGcm9tKHRyYW5zZm9ybU1hdHJpeCk7XHJcbiAgICAgICAgdmFyIGNhbGNNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MjtcclxuXHJcbiAgICAgICAgdmFyIHh3ID0geCArIGZyYW1lLndpZHRoO1xyXG4gICAgICAgIHZhciB5aCA9IHkgKyBmcmFtZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnRUcmFuc2Zvcm1NYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcHJpdGVNYXRyaXgubXVsdGlwbHkocGFyZW50VHJhbnNmb3JtTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FsY01hdHJpeCA9IHNwcml0ZU1hdHJpeDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeHcsIHloKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBjYWxjTWF0cml4LmdldFkoeHcsIHkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUyRChmcmFtZS5nbFRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICB0aW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGEodGludCwgYWxwaGEpO1xyXG5cclxuICAgICAgICB0aGlzLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgZnJhbWUudTAsIGZyYW1lLnYwLCBmcmFtZS51MSwgZnJhbWUudjEsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnQsIDAsIGZyYW1lLmdsVGV4dHVyZSwgMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaGVzIGEgZmlsbGVkIHJlY3RhbmdsZSBpbnRvIHRoZSB2ZXJ0ZXggYmF0Y2guXHJcbiAgICAgKiBSZWN0YW5nbGUgaGFzIG5vIHRyYW5zZm9ybSB2YWx1ZXMgYW5kIGlzbid0IHRyYW5zZm9ybWVkIGludG8gdGhlIGxvY2FsIHNwYWNlLlxyXG4gICAgICogVXNlZCBmb3IgZGlyZWN0bHkgYmF0Y2hpbmcgdW50cmFuc2Zvcm1lZCByZWN0YW5nbGVzLCBzdWNoIGFzIENhbWVyYSBiYWNrZ3JvdW5kIGNvbG9ycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNkcmF3RmlsbFJlY3RcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIEhvcml6b250YWwgdG9wIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBWZXJ0aWNhbCB0b3AgbGVmdCBjb29yZGluYXRlIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBXaWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIEhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yIC0gQ29sb3Igb2YgdGhlIHJlY3RhbmdsZSB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIC0gQWxwaGEgdmFsdWUgb2YgdGhlIHJlY3RhbmdsZSB0byBkcmF3LlxyXG4gICAgICovXHJcbiAgICBkcmF3RmlsbFJlY3Q6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHh3ID0geCArIHdpZHRoO1xyXG4gICAgICAgIHZhciB5aCA9IHkgKyBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHZhciB0aW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKGNvbG9yLCBhbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMuYmF0Y2hRdWFkKHgsIHksIHgsIHloLCB4dywgeWgsIHh3LCB5LCAwLCAwLCAxLCAxLCB0aW50LCB0aW50LCB0aW50LCB0aW50LCAyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoZXMgYSBmaWxsZWQgcmVjdGFuZ2xlIGludG8gdGhlIHZlcnRleCBiYXRjaC5cclxuICAgICAqIFJlY3RhbmdsZSBmYWN0b3JzIGluIHRoZSBnaXZlbiB0cmFuc2Zvcm0gbWF0cmljZXMgYmVmb3JlIGFkZGluZyB0byB0aGUgYmF0Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjYmF0Y2hGaWxsUmVjdFxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gSG9yaXpvbnRhbCB0b3AgbGVmdCBjb29yZGluYXRlIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFZlcnRpY2FsIHRvcCBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gY3VycmVudE1hdHJpeCAtIFRoZSBjdXJyZW50IHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGUgcGFyZW50IHRyYW5zZm9ybS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hGaWxsUmVjdDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRNYXRyaXgsIHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFBpcGVsaW5lKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYW5kIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4LCBvbmx5IGlmIHRoZSBwYXJlbnRNYXRyaXggaXMgc2V0LCBvdGhlcndpc2Ugd2UnbGwgdXNlIHdoYXRldmVyIHZhbHVlcyBhcmUgYWxyZWFkeSBpbiB0aGUgY2FsY01hdHJpeFxyXG4gICAgICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXgubXVsdGlwbHkoY3VycmVudE1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcclxuICAgICAgICB2YXIgeWggPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgeDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHkwID0gY2FsY01hdHJpeC5nZXRZKHgsIHkpO1xyXG5cclxuICAgICAgICB2YXIgeDEgPSBjYWxjTWF0cml4LmdldFgoeCwgeWgpO1xyXG4gICAgICAgIHZhciB5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB4MiA9IGNhbGNNYXRyaXguZ2V0WCh4dywgeWgpO1xyXG4gICAgICAgIHZhciB5MiA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeWgpO1xyXG5cclxuICAgICAgICB2YXIgeDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB5MyA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeSk7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xyXG5cclxuICAgICAgICB2YXIgdTAgPSBmcmFtZS51MDtcclxuICAgICAgICB2YXIgdjAgPSBmcmFtZS52MDtcclxuICAgICAgICB2YXIgdTEgPSBmcmFtZS51MTtcclxuICAgICAgICB2YXIgdjEgPSBmcmFtZS52MTtcclxuXHJcbiAgICAgICAgdGhpcy5iYXRjaFF1YWQoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB1MCwgdjAsIHUxLCB2MSwgdGhpcy5maWxsVGludC5UTCwgdGhpcy5maWxsVGludC5UUiwgdGhpcy5maWxsVGludC5CTCwgdGhpcy5maWxsVGludC5CUiwgdGhpcy50aW50RWZmZWN0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoZXMgYSBmaWxsZWQgdHJpYW5nbGUgaW50byB0aGUgdmVydGV4IGJhdGNoLlxyXG4gICAgICogVHJpYW5nbGUgZmFjdG9ycyBpbiB0aGUgZ2l2ZW4gdHJhbnNmb3JtIG1hdHJpY2VzIGJlZm9yZSBhZGRpbmcgdG8gdGhlIGJhdGNoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI2JhdGNoRmlsbFRyaWFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgwIC0gUG9pbnQgMCB4IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTAgLSBQb2ludCAwIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIFBvaW50IDEgeCBjb29yZGluYXRlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gUG9pbnQgMSB5IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSBQb2ludCAyIHggY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFBvaW50IDIgeSBjb29yZGluYXRlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IGN1cnJlbnRNYXRyaXggLSBUaGUgY3VycmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhlIHBhcmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKi9cclxuICAgIGJhdGNoRmlsbFRyaWFuZ2xlOiBmdW5jdGlvbiAoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgY3VycmVudE1hdHJpeCwgcGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UGlwZWxpbmUodGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBjYWxjTWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBhbmQgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXgsIG9ubHkgaWYgdGhlIHBhcmVudE1hdHJpeCBpcyBzZXQsIG90aGVyd2lzZSB3ZSdsbCB1c2Ugd2hhdGV2ZXIgdmFsdWVzIGFyZSBhbHJlYWR5IGluIHRoZSBjYWxjTWF0cml4XHJcbiAgICAgICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC5tdWx0aXBseShjdXJyZW50TWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHR4MCA9IGNhbGNNYXRyaXguZ2V0WCh4MCwgeTApO1xyXG4gICAgICAgIHZhciB0eTAgPSBjYWxjTWF0cml4LmdldFkoeDAsIHkwKTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4MSwgeTEpO1xyXG4gICAgICAgIHZhciB0eTEgPSBjYWxjTWF0cml4LmdldFkoeDEsIHkxKTtcclxuXHJcbiAgICAgICAgdmFyIHR4MiA9IGNhbGNNYXRyaXguZ2V0WCh4MiwgeTIpO1xyXG4gICAgICAgIHZhciB0eTIgPSBjYWxjTWF0cml4LmdldFkoeDIsIHkyKTtcclxuXHJcbiAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHZhciB2MCA9IGZyYW1lLnYwO1xyXG4gICAgICAgIHZhciB1MSA9IGZyYW1lLnUxO1xyXG4gICAgICAgIHZhciB2MSA9IGZyYW1lLnYxO1xyXG5cclxuICAgICAgICB0aGlzLmJhdGNoVHJpKHR4MCwgdHkwLCB0eDEsIHR5MSwgdHgyLCB0eTIsIHUwLCB2MCwgdTEsIHYxLCB0aGlzLmZpbGxUaW50LlRMLCB0aGlzLmZpbGxUaW50LlRSLCB0aGlzLmZpbGxUaW50LkJMLCB0aGlzLnRpbnRFZmZlY3QpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1c2hlcyBhIHN0cm9rZWQgdHJpYW5nbGUgaW50byB0aGUgdmVydGV4IGJhdGNoLlxyXG4gICAgICogVHJpYW5nbGUgZmFjdG9ycyBpbiB0aGUgZ2l2ZW4gdHJhbnNmb3JtIG1hdHJpY2VzIGJlZm9yZSBhZGRpbmcgdG8gdGhlIGJhdGNoLlxyXG4gICAgICogVGhlIHRyaWFuZ2xlIGlzIGNyZWF0ZWQgZnJvbSAzIGxpbmVzIGFuZCBkcmF3biB1c2luZyB0aGUgYGJhdGNoU3Ryb2tlUGF0aGAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5UZXh0dXJlVGludFBpcGVsaW5lI2JhdGNoU3Ryb2tlVHJpYW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSBQb2ludCAwIHggY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MCAtIFBvaW50IDAgeSBjb29yZGluYXRlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gUG9pbnQgMSB4IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTEgLSBQb2ludCAxIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIFBvaW50IDIgeCBjb29yZGluYXRlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkyIC0gUG9pbnQgMiB5IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBsaW5lIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBjdXJyZW50TWF0cml4IC0gVGhlIGN1cnJlbnQgdHJhbnNmb3JtLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoZSBwYXJlbnQgdHJhbnNmb3JtLlxyXG4gICAgICovXHJcbiAgICBiYXRjaFN0cm9rZVRyaWFuZ2xlOiBmdW5jdGlvbiAoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgbGluZVdpZHRoLCBjdXJyZW50TWF0cml4LCBwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRlbXBUcmlhbmdsZSA9IHRoaXMudGVtcFRyaWFuZ2xlO1xyXG5cclxuICAgICAgICB0ZW1wVHJpYW5nbGVbMF0ueCA9IHgwO1xyXG4gICAgICAgIHRlbXBUcmlhbmdsZVswXS55ID0geTA7XHJcbiAgICAgICAgdGVtcFRyaWFuZ2xlWzBdLndpZHRoID0gbGluZVdpZHRoO1xyXG5cclxuICAgICAgICB0ZW1wVHJpYW5nbGVbMV0ueCA9IHgxO1xyXG4gICAgICAgIHRlbXBUcmlhbmdsZVsxXS55ID0geTE7XHJcbiAgICAgICAgdGVtcFRyaWFuZ2xlWzFdLndpZHRoID0gbGluZVdpZHRoO1xyXG5cclxuICAgICAgICB0ZW1wVHJpYW5nbGVbMl0ueCA9IHgyO1xyXG4gICAgICAgIHRlbXBUcmlhbmdsZVsyXS55ID0geTI7XHJcbiAgICAgICAgdGVtcFRyaWFuZ2xlWzJdLndpZHRoID0gbGluZVdpZHRoO1xyXG5cclxuICAgICAgICB0ZW1wVHJpYW5nbGVbM10ueCA9IHgwO1xyXG4gICAgICAgIHRlbXBUcmlhbmdsZVszXS55ID0geTA7XHJcbiAgICAgICAgdGVtcFRyaWFuZ2xlWzNdLndpZHRoID0gbGluZVdpZHRoO1xyXG5cclxuICAgICAgICB0aGlzLmJhdGNoU3Ryb2tlUGF0aCh0ZW1wVHJpYW5nbGUsIGxpbmVXaWR0aCwgZmFsc2UsIGN1cnJlbnRNYXRyaXgsIHBhcmVudE1hdHJpeCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgdmVydGV4IGJhdGNoIGZvciByZW5kZXJpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IHdvcmtzIGJ5IHRha2luZyB0aGUgYXJyYXkgb2YgcGF0aCBkYXRhIGFuZCB0aGVuIHBhc3NpbmcgaXQgdGhyb3VnaCBFYXJjdXQsIHdoaWNoXHJcbiAgICAgKiBjcmVhdGVzIGEgbGlzdCBvZiBwb2x5Z29ucy4gRWFjaCBwb2x5Z29uIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGJhdGNoLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcGF0aCBpcyBhbHdheXMgYXV0b21hdGljYWxseSBjbG9zZWQgYmVjYXVzZSBpdCdzIGZpbGxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNiYXRjaEZpbGxQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gcGF0aCAtIENvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgcmVwcmVzZW50IHRoZSBwYXRoLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IGN1cnJlbnRNYXRyaXggLSBUaGUgY3VycmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhlIHBhcmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKi9cclxuICAgIGJhdGNoRmlsbFBhdGg6IGZ1bmN0aW9uIChwYXRoLCBjdXJyZW50TWF0cml4LCBwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIGNhbGNNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGFuZCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeCwgb25seSBpZiB0aGUgcGFyZW50TWF0cml4IGlzIHNldCwgb3RoZXJ3aXNlIHdlJ2xsIHVzZSB3aGF0ZXZlciB2YWx1ZXMgYXJlIGFscmVhZHkgaW4gdGhlIGNhbGNNYXRyaXhcclxuICAgICAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGFyZW50TWF0cml4Lm11bHRpcGx5KGN1cnJlbnRNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xyXG4gICAgICAgIHZhciBwb2x5Z29uQ2FjaGUgPSB0aGlzLnBvbHlnb25DYWNoZTtcclxuICAgICAgICB2YXIgcG9seWdvbkluZGV4QXJyYXk7XHJcbiAgICAgICAgdmFyIHBvaW50O1xyXG5cclxuICAgICAgICB2YXIgdGludFRMID0gdGhpcy5maWxsVGludC5UTDtcclxuICAgICAgICB2YXIgdGludFRSID0gdGhpcy5maWxsVGludC5UUjtcclxuICAgICAgICB2YXIgdGludEJMID0gdGhpcy5maWxsVGludC5CTDtcclxuICAgICAgICB2YXIgdGludEVmZmVjdCA9IHRoaXMudGludEVmZmVjdDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgcGF0aEluZGV4ID0gMDsgcGF0aEluZGV4IDwgbGVuZ3RoOyArK3BhdGhJbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50ID0gcGF0aFtwYXRoSW5kZXhdO1xyXG4gICAgICAgICAgICBwb2x5Z29uQ2FjaGUucHVzaChwb2ludC54LCBwb2ludC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBvbHlnb25JbmRleEFycmF5ID0gRWFyY3V0KHBvbHlnb25DYWNoZSk7XHJcbiAgICAgICAgbGVuZ3RoID0gcG9seWdvbkluZGV4QXJyYXkubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwMCA9IHBvbHlnb25JbmRleEFycmF5W2luZGV4ICsgMF0gKiAyO1xyXG4gICAgICAgICAgICB2YXIgcDEgPSBwb2x5Z29uSW5kZXhBcnJheVtpbmRleCArIDFdICogMjtcclxuICAgICAgICAgICAgdmFyIHAyID0gcG9seWdvbkluZGV4QXJyYXlbaW5kZXggKyAyXSAqIDI7XHJcblxyXG4gICAgICAgICAgICB2YXIgeDAgPSBwb2x5Z29uQ2FjaGVbcDAgKyAwXTtcclxuICAgICAgICAgICAgdmFyIHkwID0gcG9seWdvbkNhY2hlW3AwICsgMV07XHJcbiAgICAgICAgICAgIHZhciB4MSA9IHBvbHlnb25DYWNoZVtwMSArIDBdO1xyXG4gICAgICAgICAgICB2YXIgeTEgPSBwb2x5Z29uQ2FjaGVbcDEgKyAxXTtcclxuICAgICAgICAgICAgdmFyIHgyID0gcG9seWdvbkNhY2hlW3AyICsgMF07XHJcbiAgICAgICAgICAgIHZhciB5MiA9IHBvbHlnb25DYWNoZVtwMiArIDFdO1xyXG5cclxuICAgICAgICAgICAgdmFyIHR4MCA9IGNhbGNNYXRyaXguZ2V0WCh4MCwgeTApO1xyXG4gICAgICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgwLCB5MCk7XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4MSwgeTEpO1xyXG4gICAgICAgICAgICB2YXIgdHkxID0gY2FsY01hdHJpeC5nZXRZKHgxLCB5MSk7XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIHR4MiA9IGNhbGNNYXRyaXguZ2V0WCh4MiwgeTIpO1xyXG4gICAgICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHgyLCB5Mik7XHJcblxyXG4gICAgICAgICAgICB2YXIgdTAgPSBmcmFtZS51MDtcclxuICAgICAgICAgICAgdmFyIHYwID0gZnJhbWUudjA7XHJcbiAgICAgICAgICAgIHZhciB1MSA9IGZyYW1lLnUxO1xyXG4gICAgICAgICAgICB2YXIgdjEgPSBmcmFtZS52MTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5iYXRjaFRyaSh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEVmZmVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwb2x5Z29uQ2FjaGUubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiBwYXRoIHRvIHRoZSB2ZXJ0ZXggYmF0Y2ggZm9yIHJlbmRlcmluZy5cclxuICAgICAqIFxyXG4gICAgICogSXQgd29ya3MgYnkgdGFraW5nIHRoZSBhcnJheSBvZiBwYXRoIGRhdGEgYW5kIGNhbGxpbmcgYGJhdGNoTGluZWAgZm9yIGVhY2ggc2VjdGlvblxyXG4gICAgICogb2YgdGhlIHBhdGguXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBwYXRoIGlzIG9wdGlvbmFsbHkgY2xvc2VkIGF0IHRoZSBlbmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmUjYmF0Y2hTdHJva2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gcGF0aCAtIENvbGxlY3Rpb24gb2YgcG9pbnRzIHRoYXQgcmVwcmVzZW50IHRoZSBwYXRoLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVXaWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgbGluZSBzZWdtZW50cyBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhdGhPcGVuIC0gSW5kaWNhdGVzIGlmIHRoZSBwYXRoIHNob3VsZCBiZSBjbG9zZWQgb3IgbGVmdCBvcGVuLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IGN1cnJlbnRNYXRyaXggLSBUaGUgY3VycmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhlIHBhcmVudCB0cmFuc2Zvcm0uXHJcbiAgICAgKi9cclxuICAgIGJhdGNoU3Ryb2tlUGF0aDogZnVuY3Rpb24gKHBhdGgsIGxpbmVXaWR0aCwgcGF0aE9wZW4sIGN1cnJlbnRNYXRyaXgsIHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFBpcGVsaW5lKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgUmVzZXQgdGhlIGNsb3NlUGF0aCBib29sZWFuc1xyXG4gICAgICAgIHRoaXMucHJldlF1YWRbNF0gPSAwO1xyXG4gICAgICAgIHRoaXMuZmlyc3RRdWFkWzRdID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHBhdGhMZW5ndGggPSBwYXRoLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHBhdGhJbmRleCA9IDA7IHBhdGhJbmRleCA8IHBhdGhMZW5ndGg7IHBhdGhJbmRleCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBvaW50MCA9IHBhdGhbcGF0aEluZGV4XTtcclxuICAgICAgICAgICAgdmFyIHBvaW50MSA9IHBhdGhbcGF0aEluZGV4ICsgMV07XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJhdGNoTGluZShcclxuICAgICAgICAgICAgICAgIHBvaW50MC54LFxyXG4gICAgICAgICAgICAgICAgcG9pbnQwLnksXHJcbiAgICAgICAgICAgICAgICBwb2ludDEueCxcclxuICAgICAgICAgICAgICAgIHBvaW50MS55LFxyXG4gICAgICAgICAgICAgICAgcG9pbnQwLndpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgIHBvaW50MS53aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGgsXHJcbiAgICAgICAgICAgICAgICBwYXRoSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAhcGF0aE9wZW4gJiYgKHBhdGhJbmRleCA9PT0gcGF0aExlbmd0aCAtIDEpLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudE1hdHJpeCxcclxuICAgICAgICAgICAgICAgIHBhcmVudE1hdHJpeFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgcXVhZCBhbmQgYWRkcyBpdCB0byB0aGUgdmVydGV4IGJhdGNoIGJhc2VkIG9uIHRoZSBnaXZlbiBsaW5lIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZSNiYXRjaExpbmVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXggLSBYIGNvb3JkaW5hdGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXkgLSBZIGNvb3JkaW5hdGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYnggLSBYIGNvb3JkaW5hdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJ5IC0gWSBjb29yZGluYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhTGluZVdpZHRoIC0gV2lkdGggb2YgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYkxpbmVXaWR0aCAtIFdpZHRoIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmVcclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBjdXJyZW50TWF0cml4IC0gUGFyZW50IG1hdHJpeCwgZ2VuZXJhbGx5IHVzZWQgYnkgY29udGFpbmVyc1xyXG4gICAgICovXHJcbiAgICBiYXRjaExpbmU6IGZ1bmN0aW9uIChheCwgYXksIGJ4LCBieSwgYUxpbmVXaWR0aCwgYkxpbmVXaWR0aCwgbGluZVdpZHRoLCBpbmRleCwgY2xvc2VQYXRoLCBjdXJyZW50TWF0cml4LCBwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXBlbGluZSh0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIGNhbGNNYXRyaXggPSB0aGlzLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGFuZCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeCwgb25seSBpZiB0aGUgcGFyZW50TWF0cml4IGlzIHNldCwgb3RoZXJ3aXNlIHdlJ2xsIHVzZSB3aGF0ZXZlciB2YWx1ZXMgYXJlIGFscmVhZHkgaW4gdGhlIGNhbGNNYXRyaXhcclxuICAgICAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGFyZW50TWF0cml4Lm11bHRpcGx5KGN1cnJlbnRNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGR4ID0gYnggLSBheDtcclxuICAgICAgICB2YXIgZHkgPSBieSAtIGF5O1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuICAgICAgICB2YXIgYWwwID0gYUxpbmVXaWR0aCAqIChieSAtIGF5KSAvIGxlbjtcclxuICAgICAgICB2YXIgYWwxID0gYUxpbmVXaWR0aCAqIChheCAtIGJ4KSAvIGxlbjtcclxuICAgICAgICB2YXIgYmwwID0gYkxpbmVXaWR0aCAqIChieSAtIGF5KSAvIGxlbjtcclxuICAgICAgICB2YXIgYmwxID0gYkxpbmVXaWR0aCAqIChheCAtIGJ4KSAvIGxlbjtcclxuXHJcbiAgICAgICAgdmFyIGx4MCA9IGJ4IC0gYmwwO1xyXG4gICAgICAgIHZhciBseTAgPSBieSAtIGJsMTtcclxuICAgICAgICB2YXIgbHgxID0gYXggLSBhbDA7XHJcbiAgICAgICAgdmFyIGx5MSA9IGF5IC0gYWwxO1xyXG4gICAgICAgIHZhciBseDIgPSBieCArIGJsMDtcclxuICAgICAgICB2YXIgbHkyID0gYnkgKyBibDE7XHJcbiAgICAgICAgdmFyIGx4MyA9IGF4ICsgYWwwO1xyXG4gICAgICAgIHZhciBseTMgPSBheSArIGFsMTtcclxuXHJcbiAgICAgICAgLy8gIHR4MCA9IGJvdHRvbSByaWdodFxyXG4gICAgICAgIHZhciBiclggPSBjYWxjTWF0cml4LmdldFgobHgwLCBseTApO1xyXG4gICAgICAgIHZhciBiclkgPSBjYWxjTWF0cml4LmdldFkobHgwLCBseTApO1xyXG5cclxuICAgICAgICAvLyAgdHgxID0gYm90dG9tIGxlZnRcclxuICAgICAgICB2YXIgYmxYID0gY2FsY01hdHJpeC5nZXRYKGx4MSwgbHkxKTtcclxuICAgICAgICB2YXIgYmxZID0gY2FsY01hdHJpeC5nZXRZKGx4MSwgbHkxKTtcclxuXHJcbiAgICAgICAgLy8gIHR4MiA9IHRvcCByaWdodFxyXG4gICAgICAgIHZhciB0clggPSBjYWxjTWF0cml4LmdldFgobHgyLCBseTIpO1xyXG4gICAgICAgIHZhciB0clkgPSBjYWxjTWF0cml4LmdldFkobHgyLCBseTIpO1xyXG5cclxuICAgICAgICAvLyAgdHgzID0gdG9wIGxlZnRcclxuICAgICAgICB2YXIgdGxYID0gY2FsY01hdHJpeC5nZXRYKGx4MywgbHkzKTtcclxuICAgICAgICB2YXIgdGxZID0gY2FsY01hdHJpeC5nZXRZKGx4MywgbHkzKTtcclxuXHJcbiAgICAgICAgdmFyIHRpbnQgPSB0aGlzLnN0cm9rZVRpbnQ7XHJcbiAgICAgICAgdmFyIHRpbnRFZmZlY3QgPSB0aGlzLnRpbnRFZmZlY3Q7XHJcblxyXG4gICAgICAgIHZhciB0aW50VEwgPSB0aW50LlRMO1xyXG4gICAgICAgIHZhciB0aW50VFIgPSB0aW50LlRSO1xyXG4gICAgICAgIHZhciB0aW50QkwgPSB0aW50LkJMO1xyXG4gICAgICAgIHZhciB0aW50QlIgPSB0aW50LkJSO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgdmFyIHUwID0gZnJhbWUudTA7XHJcbiAgICAgICAgdmFyIHYwID0gZnJhbWUudjA7XHJcbiAgICAgICAgdmFyIHUxID0gZnJhbWUudTE7XHJcbiAgICAgICAgdmFyIHYxID0gZnJhbWUudjE7XHJcblxyXG4gICAgICAgIC8vICBUTCwgQkwsIEJSLCBUUlxyXG4gICAgICAgIHRoaXMuYmF0Y2hRdWFkKHRsWCwgdGxZLCBibFgsIGJsWSwgYnJYLCBiclksIHRyWCwgdHJZLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEJSLCB0aW50RWZmZWN0KTtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA8PSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5vIHBvaW50IGRvaW5nIGEgbGluZWpvaW4gaWYgdGhlIGxpbmUgaXNuJ3QgdGhpY2sgZW5vdWdoXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2UXVhZDtcclxuICAgICAgICB2YXIgZmlyc3QgPSB0aGlzLmZpcnN0UXVhZDtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCAmJiBwcmV2WzRdKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5iYXRjaFF1YWQodGxYLCB0bFksIGJsWCwgYmxZLCBwcmV2WzBdLCBwcmV2WzFdLCBwcmV2WzJdLCBwcmV2WzNdLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEJSLCB0aW50RWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZmlyc3RbMF0gPSB0bFg7XHJcbiAgICAgICAgICAgIGZpcnN0WzFdID0gdGxZO1xyXG4gICAgICAgICAgICBmaXJzdFsyXSA9IGJsWDtcclxuICAgICAgICAgICAgZmlyc3RbM10gPSBibFk7XHJcbiAgICAgICAgICAgIGZpcnN0WzRdID0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjbG9zZVBhdGggJiYgZmlyc3RbNF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQWRkIGEgam9pbiBmb3IgdGhlIGZpbmFsIHBhdGggc2VnbWVudFxyXG4gICAgICAgICAgICB0aGlzLmJhdGNoUXVhZChiclgsIGJyWSwgdHJYLCB0clksIGZpcnN0WzBdLCBmaXJzdFsxXSwgZmlyc3RbMl0sIGZpcnN0WzNdLCB1MCwgdjAsIHUxLCB2MSwgdGludFRMLCB0aW50VFIsIHRpbnRCTCwgdGludEJSLCB0aW50RWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFN0b3JlIGl0XHJcblxyXG4gICAgICAgICAgICBwcmV2WzBdID0gYnJYO1xyXG4gICAgICAgICAgICBwcmV2WzFdID0gYnJZO1xyXG4gICAgICAgICAgICBwcmV2WzJdID0gdHJYO1xyXG4gICAgICAgICAgICBwcmV2WzNdID0gdHJZO1xyXG4gICAgICAgICAgICBwcmV2WzRdID0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVRpbnRQaXBlbGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/pipelines/components/ModelViewProjection.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/pipelines/components/ModelViewProjection.js ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Implements a model view projection matrices.\r\n * Pipelines can implement this for doing 2D and 3D rendering.\r\n *\r\n * @namespace Phaser.Renderer.WebGL.Pipelines.ModelViewProjection\r\n * @since 3.0.0\r\n */\r\nvar ModelViewProjection = {\r\n\r\n    /**\r\n     * Dirty flag for checking if model matrix needs to be updated on GPU.\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelMatrixDirty\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    modelMatrixDirty: false,\r\n\r\n    /**\r\n     * Dirty flag for checking if view matrix needs to be updated on GPU.\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewMatrixDirty\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    viewMatrixDirty: false,\r\n\r\n    /**\r\n     * Dirty flag for checking if projection matrix needs to be updated on GPU.\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#projectionMatrixDirty\r\n     * @type {boolean}\r\n     * @since 3.0.0\r\n     */\r\n    projectionMatrixDirty: false,\r\n\r\n    /**\r\n     * Model matrix\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelMatrix\r\n     * @type {?Float32Array}\r\n     * @since 3.0.0\r\n     */\r\n    modelMatrix: null,\r\n\r\n    /**\r\n     * View matrix\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewMatrix\r\n     * @type {?Float32Array}\r\n     * @since 3.0.0\r\n     */\r\n    viewMatrix: null,\r\n\r\n    /**\r\n     * Projection matrix\r\n     * \r\n     * @name Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#projectionMatrix\r\n     * @type {?Float32Array}\r\n     * @since 3.0.0\r\n     */\r\n    projectionMatrix: null,\r\n\r\n    /**\r\n     * Initializes MVP matrices with an identity matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#mvpInit\r\n     * @since 3.0.0\r\n     */\r\n    mvpInit: function ()\r\n    {\r\n        this.modelMatrixDirty = true;\r\n        this.viewMatrixDirty = true;\r\n        this.projectionMatrixDirty = true;\r\n        \r\n        this.modelMatrix = new Float32Array([\r\n            1, 0, 0, 0,\r\n            0, 1, 0, 0,\r\n            0, 0, 1, 0,\r\n            0, 0, 0, 1\r\n        ]);\r\n        \r\n        this.viewMatrix = new Float32Array([\r\n            1, 0, 0, 0,\r\n            0, 1, 0, 0,\r\n            0, 0, 1, 0,\r\n            0, 0, 0, 1\r\n        ]);\r\n        \r\n        this.projectionMatrix = new Float32Array([\r\n            1, 0, 0, 0,\r\n            0, 1, 0, 0,\r\n            0, 0, 1, 0,\r\n            0, 0, 0, 1\r\n        ]);\r\n        \r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If dirty flags are set then the matrices are uploaded to the GPU.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#mvpUpdate\r\n     * @since 3.0.0\r\n     */\r\n    mvpUpdate: function ()\r\n    {\r\n        var program = this.program;\r\n\r\n        if (this.modelMatrixDirty)\r\n        {\r\n            this.renderer.setMatrix4(program, 'uModelMatrix', false, this.modelMatrix);\r\n            this.modelMatrixDirty = false;\r\n        }\r\n        \r\n        if (this.viewMatrixDirty)\r\n        {\r\n            this.renderer.setMatrix4(program, 'uViewMatrix', false, this.viewMatrix);\r\n            this.viewMatrixDirty = false;\r\n        }\r\n\r\n        if (this.projectionMatrixDirty)\r\n        {\r\n            this.renderer.setMatrix4(program, 'uProjectionMatrix', false, this.projectionMatrix);\r\n            this.projectionMatrixDirty = false;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Loads an identity matrix to the model matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelIdentity\r\n     * @since 3.0.0\r\n     */\r\n    modelIdentity: function ()\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n        \r\n        modelMatrix[0] = 1;\r\n        modelMatrix[1] = 0;\r\n        modelMatrix[2] = 0;\r\n        modelMatrix[3] = 0;\r\n        modelMatrix[4] = 0;\r\n        modelMatrix[5] = 1;\r\n        modelMatrix[6] = 0;\r\n        modelMatrix[7] = 0;\r\n        modelMatrix[8] = 0;\r\n        modelMatrix[9] = 0;\r\n        modelMatrix[10] = 1;\r\n        modelMatrix[11] = 0;\r\n        modelMatrix[12] = 0;\r\n        modelMatrix[13] = 0;\r\n        modelMatrix[14] = 0;\r\n        modelMatrix[15] = 1;\r\n\r\n        this.modelMatrixDirty = true;\r\n        \r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scale model matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    modelScale: function (x, y, z)\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n\r\n        modelMatrix[0] = modelMatrix[0] * x;\r\n        modelMatrix[1] = modelMatrix[1] * x;\r\n        modelMatrix[2] = modelMatrix[2] * x;\r\n        modelMatrix[3] = modelMatrix[3] * x;\r\n        modelMatrix[4] = modelMatrix[4] * y;\r\n        modelMatrix[5] = modelMatrix[5] * y;\r\n        modelMatrix[6] = modelMatrix[6] * y;\r\n        modelMatrix[7] = modelMatrix[7] * y;\r\n        modelMatrix[8] = modelMatrix[8] * z;\r\n        modelMatrix[9] = modelMatrix[9] * z;\r\n        modelMatrix[10] = modelMatrix[10] * z;\r\n        modelMatrix[11] = modelMatrix[11] * z;\r\n    \r\n        this.modelMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Translate model matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelTranslate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    modelTranslate: function (x, y, z)\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n\r\n        modelMatrix[12] = modelMatrix[0] * x + modelMatrix[4] * y + modelMatrix[8] * z + modelMatrix[12];\r\n        modelMatrix[13] = modelMatrix[1] * x + modelMatrix[5] * y + modelMatrix[9] * z + modelMatrix[13];\r\n        modelMatrix[14] = modelMatrix[2] * x + modelMatrix[6] * y + modelMatrix[10] * z + modelMatrix[14];\r\n        modelMatrix[15] = modelMatrix[3] * x + modelMatrix[7] * y + modelMatrix[11] * z + modelMatrix[15];\r\n\r\n        this.modelMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotates the model matrix in the X axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelRotateX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    modelRotateX: function (radians)\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a10 = modelMatrix[4];\r\n        var a11 = modelMatrix[5];\r\n        var a12 = modelMatrix[6];\r\n        var a13 = modelMatrix[7];\r\n        var a20 = modelMatrix[8];\r\n        var a21 = modelMatrix[9];\r\n        var a22 = modelMatrix[10];\r\n        var a23 = modelMatrix[11];\r\n\r\n        modelMatrix[4] = a10 * c + a20 * s;\r\n        modelMatrix[5] = a11 * c + a21 * s;\r\n        modelMatrix[6] = a12 * c + a22 * s;\r\n        modelMatrix[7] = a13 * c + a23 * s;\r\n        modelMatrix[8] = a20 * c - a10 * s;\r\n        modelMatrix[9] = a21 * c - a11 * s;\r\n        modelMatrix[10] = a22 * c - a12 * s;\r\n        modelMatrix[11] = a23 * c - a13 * s;\r\n\r\n        this.modelMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rotates the model matrix in the Y axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelRotateY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    modelRotateY: function (radians)\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a00 = modelMatrix[0];\r\n        var a01 = modelMatrix[1];\r\n        var a02 = modelMatrix[2];\r\n        var a03 = modelMatrix[3];\r\n        var a20 = modelMatrix[8];\r\n        var a21 = modelMatrix[9];\r\n        var a22 = modelMatrix[10];\r\n        var a23 = modelMatrix[11];\r\n\r\n        modelMatrix[0] = a00 * c - a20 * s;\r\n        modelMatrix[1] = a01 * c - a21 * s;\r\n        modelMatrix[2] = a02 * c - a22 * s;\r\n        modelMatrix[3] = a03 * c - a23 * s;\r\n        modelMatrix[8] = a00 * s + a20 * c;\r\n        modelMatrix[9] = a01 * s + a21 * c;\r\n        modelMatrix[10] = a02 * s + a22 * c;\r\n        modelMatrix[11] = a03 * s + a23 * c;\r\n\r\n        this.modelMatrixDirty = true;\r\n        \r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Rotates the model matrix in the Z axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#modelRotateZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    modelRotateZ: function (radians)\r\n    {\r\n        var modelMatrix = this.modelMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a00 = modelMatrix[0];\r\n        var a01 = modelMatrix[1];\r\n        var a02 = modelMatrix[2];\r\n        var a03 = modelMatrix[3];\r\n        var a10 = modelMatrix[4];\r\n        var a11 = modelMatrix[5];\r\n        var a12 = modelMatrix[6];\r\n        var a13 = modelMatrix[7];\r\n\r\n        modelMatrix[0] = a00 * c + a10 * s;\r\n        modelMatrix[1] = a01 * c + a11 * s;\r\n        modelMatrix[2] = a02 * c + a12 * s;\r\n        modelMatrix[3] = a03 * c + a13 * s;\r\n        modelMatrix[4] = a10 * c - a00 * s;\r\n        modelMatrix[5] = a11 * c - a01 * s;\r\n        modelMatrix[6] = a12 * c - a02 * s;\r\n        modelMatrix[7] = a13 * c - a03 * s;\r\n\r\n        this.modelMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Loads identity matrix into the view matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewIdentity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewIdentity: function ()\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n        \r\n        viewMatrix[0] = 1;\r\n        viewMatrix[1] = 0;\r\n        viewMatrix[2] = 0;\r\n        viewMatrix[3] = 0;\r\n        viewMatrix[4] = 0;\r\n        viewMatrix[5] = 1;\r\n        viewMatrix[6] = 0;\r\n        viewMatrix[7] = 0;\r\n        viewMatrix[8] = 0;\r\n        viewMatrix[9] = 0;\r\n        viewMatrix[10] = 1;\r\n        viewMatrix[11] = 0;\r\n        viewMatrix[12] = 0;\r\n        viewMatrix[13] = 0;\r\n        viewMatrix[14] = 0;\r\n        viewMatrix[15] = 1;\r\n\r\n        this.viewMatrixDirty = true;\r\n        \r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Scales view matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewScale: function (x, y, z)\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n\r\n        viewMatrix[0] = viewMatrix[0] * x;\r\n        viewMatrix[1] = viewMatrix[1] * x;\r\n        viewMatrix[2] = viewMatrix[2] * x;\r\n        viewMatrix[3] = viewMatrix[3] * x;\r\n        viewMatrix[4] = viewMatrix[4] * y;\r\n        viewMatrix[5] = viewMatrix[5] * y;\r\n        viewMatrix[6] = viewMatrix[6] * y;\r\n        viewMatrix[7] = viewMatrix[7] * y;\r\n        viewMatrix[8] = viewMatrix[8] * z;\r\n        viewMatrix[9] = viewMatrix[9] * z;\r\n        viewMatrix[10] = viewMatrix[10] * z;\r\n        viewMatrix[11] = viewMatrix[11] * z;\r\n    \r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Translates view matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewTranslate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x component.\r\n     * @param {number} y - The y component.\r\n     * @param {number} z - The z component.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewTranslate: function (x, y, z)\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n\r\n        viewMatrix[12] = viewMatrix[0] * x + viewMatrix[4] * y + viewMatrix[8] * z + viewMatrix[12];\r\n        viewMatrix[13] = viewMatrix[1] * x + viewMatrix[5] * y + viewMatrix[9] * z + viewMatrix[13];\r\n        viewMatrix[14] = viewMatrix[2] * x + viewMatrix[6] * y + viewMatrix[10] * z + viewMatrix[14];\r\n        viewMatrix[15] = viewMatrix[3] * x + viewMatrix[7] * y + viewMatrix[11] * z + viewMatrix[15];\r\n\r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Rotates view matrix in the X axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewRotateX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewRotateX: function (radians)\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a10 = viewMatrix[4];\r\n        var a11 = viewMatrix[5];\r\n        var a12 = viewMatrix[6];\r\n        var a13 = viewMatrix[7];\r\n        var a20 = viewMatrix[8];\r\n        var a21 = viewMatrix[9];\r\n        var a22 = viewMatrix[10];\r\n        var a23 = viewMatrix[11];\r\n\r\n        viewMatrix[4] = a10 * c + a20 * s;\r\n        viewMatrix[5] = a11 * c + a21 * s;\r\n        viewMatrix[6] = a12 * c + a22 * s;\r\n        viewMatrix[7] = a13 * c + a23 * s;\r\n        viewMatrix[8] = a20 * c - a10 * s;\r\n        viewMatrix[9] = a21 * c - a11 * s;\r\n        viewMatrix[10] = a22 * c - a12 * s;\r\n        viewMatrix[11] = a23 * c - a13 * s;\r\n\r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Rotates view matrix in the Y axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewRotateY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewRotateY: function (radians)\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a00 = viewMatrix[0];\r\n        var a01 = viewMatrix[1];\r\n        var a02 = viewMatrix[2];\r\n        var a03 = viewMatrix[3];\r\n        var a20 = viewMatrix[8];\r\n        var a21 = viewMatrix[9];\r\n        var a22 = viewMatrix[10];\r\n        var a23 = viewMatrix[11];\r\n\r\n        viewMatrix[0] = a00 * c - a20 * s;\r\n        viewMatrix[1] = a01 * c - a21 * s;\r\n        viewMatrix[2] = a02 * c - a22 * s;\r\n        viewMatrix[3] = a03 * c - a23 * s;\r\n        viewMatrix[8] = a00 * s + a20 * c;\r\n        viewMatrix[9] = a01 * s + a21 * c;\r\n        viewMatrix[10] = a02 * s + a22 * c;\r\n        viewMatrix[11] = a03 * s + a23 * c;\r\n\r\n        this.viewMatrixDirty = true;\r\n        \r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Rotates view matrix in the Z axis.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewRotateZ\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} radians - The amount to rotate by.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewRotateZ: function (radians)\r\n    {\r\n        var viewMatrix = this.viewMatrix;\r\n        var s = Math.sin(radians);\r\n        var c = Math.cos(radians);\r\n        var a00 = viewMatrix[0];\r\n        var a01 = viewMatrix[1];\r\n        var a02 = viewMatrix[2];\r\n        var a03 = viewMatrix[3];\r\n        var a10 = viewMatrix[4];\r\n        var a11 = viewMatrix[5];\r\n        var a12 = viewMatrix[6];\r\n        var a13 = viewMatrix[7];\r\n\r\n        viewMatrix[0] = a00 * c + a10 * s;\r\n        viewMatrix[1] = a01 * c + a11 * s;\r\n        viewMatrix[2] = a02 * c + a12 * s;\r\n        viewMatrix[3] = a03 * c + a13 * s;\r\n        viewMatrix[4] = a10 * c - a00 * s;\r\n        viewMatrix[5] = a11 * c - a01 * s;\r\n        viewMatrix[6] = a12 * c - a02 * s;\r\n        viewMatrix[7] = a13 * c - a03 * s;\r\n\r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Loads a 2D view matrix (3x2 matrix) into a 4x4 view matrix \r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewLoad2D\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Float32Array} matrix2D - The Matrix2D.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewLoad2D: function (matrix2D)\r\n    {\r\n        var vm = this.viewMatrix;\r\n\r\n        vm[0] = matrix2D[0];\r\n        vm[1] = matrix2D[1];\r\n        vm[2] = 0.0;\r\n        vm[3] = 0.0;\r\n        vm[4] = matrix2D[2];\r\n        vm[5] = matrix2D[3];\r\n        vm[6] = 0.0;\r\n        vm[7] = 0.0;\r\n        vm[8] = matrix2D[4];\r\n        vm[9] = matrix2D[5];\r\n        vm[10] = 1.0;\r\n        vm[11] = 0.0;\r\n        vm[12] = 0.0;\r\n        vm[13] = 0.0;\r\n        vm[14] = 0.0;\r\n        vm[15] = 1.0;\r\n\r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n\r\n    /**\r\n     * Copies a 4x4 matrix into the view matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#viewLoad\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Float32Array} matrix - The Matrix2D.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    viewLoad: function (matrix)\r\n    {\r\n        var vm = this.viewMatrix;\r\n\r\n        vm[0] = matrix[0];\r\n        vm[1] = matrix[1];\r\n        vm[2] = matrix[2];\r\n        vm[3] = matrix[3];\r\n        vm[4] = matrix[4];\r\n        vm[5] = matrix[5];\r\n        vm[6] = matrix[6];\r\n        vm[7] = matrix[7];\r\n        vm[8] = matrix[8];\r\n        vm[9] = matrix[9];\r\n        vm[10] = matrix[10];\r\n        vm[11] = matrix[11];\r\n        vm[12] = matrix[12];\r\n        vm[13] = matrix[13];\r\n        vm[14] = matrix[14];\r\n        vm[15] = matrix[15];\r\n\r\n        this.viewMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Loads identity matrix into the projection matrix.\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#projIdentity\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    projIdentity: function ()\r\n    {\r\n        var projectionMatrix = this.projectionMatrix;\r\n        \r\n        projectionMatrix[0] = 1;\r\n        projectionMatrix[1] = 0;\r\n        projectionMatrix[2] = 0;\r\n        projectionMatrix[3] = 0;\r\n        projectionMatrix[4] = 0;\r\n        projectionMatrix[5] = 1;\r\n        projectionMatrix[6] = 0;\r\n        projectionMatrix[7] = 0;\r\n        projectionMatrix[8] = 0;\r\n        projectionMatrix[9] = 0;\r\n        projectionMatrix[10] = 1;\r\n        projectionMatrix[11] = 0;\r\n        projectionMatrix[12] = 0;\r\n        projectionMatrix[13] = 0;\r\n        projectionMatrix[14] = 0;\r\n        projectionMatrix[15] = 1;\r\n\r\n        this.projectionMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets up an orthographic projection matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#projOrtho\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} left - The left value.\r\n     * @param {number} right - The right value.\r\n     * @param {number} bottom - The bottom value.\r\n     * @param {number} top - The top value.\r\n     * @param {number} near - The near value.\r\n     * @param {number} far - The far value.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    projOrtho: function (left, right, bottom, top, near, far)\r\n    {\r\n        var projectionMatrix = this.projectionMatrix;\r\n        var leftRight = 1.0 / (left - right);\r\n        var bottomTop = 1.0 / (bottom - top);\r\n        var nearFar = 1.0 / (near - far);\r\n\r\n        projectionMatrix[0] = -2.0 * leftRight;\r\n        projectionMatrix[1] = 0.0;\r\n        projectionMatrix[2] = 0.0;\r\n        projectionMatrix[3] = 0.0;\r\n        projectionMatrix[4] = 0.0;\r\n        projectionMatrix[5] = -2.0 * bottomTop;\r\n        projectionMatrix[6] = 0.0;\r\n        projectionMatrix[7] = 0.0;\r\n        projectionMatrix[8] = 0.0;\r\n        projectionMatrix[9] = 0.0;\r\n        projectionMatrix[10] = 2.0 * nearFar;\r\n        projectionMatrix[11] = 0.0;\r\n        projectionMatrix[12] = (left + right) * leftRight;\r\n        projectionMatrix[13] = (top + bottom) * bottomTop;\r\n        projectionMatrix[14] = (far + near) * nearFar;\r\n        projectionMatrix[15] = 1.0;\r\n\r\n        this.projectionMatrixDirty = true;\r\n\r\n        return this;\r\n    },\r\n    \r\n    /**\r\n     * Sets up a perspective projection matrix\r\n     * \r\n     * @method Phaser.Renderer.WebGL.Pipelines.ModelViewProjection#projPersp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} fovY - The fov value.\r\n     * @param {number} aspectRatio - The aspectRatio value.\r\n     * @param {number} near - The near value.\r\n     * @param {number} far - The far value.\r\n     *\r\n     * @return {this} This Model View Projection.\r\n     */\r\n    projPersp: function (fovY, aspectRatio, near, far)\r\n    {\r\n        var projectionMatrix = this.projectionMatrix;\r\n        var fov = 1.0 / Math.tan(fovY / 2.0);\r\n        var nearFar = 1.0 / (near - far);\r\n        \r\n        projectionMatrix[0] = fov / aspectRatio;\r\n        projectionMatrix[1] = 0.0;\r\n        projectionMatrix[2] = 0.0;\r\n        projectionMatrix[3] = 0.0;\r\n        projectionMatrix[4] = 0.0;\r\n        projectionMatrix[5] = fov;\r\n        projectionMatrix[6] = 0.0;\r\n        projectionMatrix[7] = 0.0;\r\n        projectionMatrix[8] = 0.0;\r\n        projectionMatrix[9] = 0.0;\r\n        projectionMatrix[10] = (far + near) * nearFar;\r\n        projectionMatrix[11] = -1.0;\r\n        projectionMatrix[12] = 0.0;\r\n        projectionMatrix[13] = 0.0;\r\n        projectionMatrix[14] = (2.0 * far * near) * nearFar;\r\n        projectionMatrix[15] = 0.0;\r\n        \r\n        this.projectionMatrixDirty = true;\r\n\r\n        return this;\r\n    }\r\n};\r\n\r\nmodule.exports = ModelViewProjection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvY29tcG9uZW50cy9Nb2RlbFZpZXdQcm9qZWN0aW9uLmpzPzg3MTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvd2ViZ2wvcGlwZWxpbmVzL2NvbXBvbmVudHMvTW9kZWxWaWV3UHJvamVjdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudHMgYSBtb2RlbCB2aWV3IHByb2plY3Rpb24gbWF0cmljZXMuXHJcbiAqIFBpcGVsaW5lcyBjYW4gaW1wbGVtZW50IHRoaXMgZm9yIGRvaW5nIDJEIGFuZCAzRCByZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIE1vZGVsVmlld1Byb2plY3Rpb24gPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGZvciBjaGVja2luZyBpZiBtb2RlbCBtYXRyaXggbmVlZHMgdG8gYmUgdXBkYXRlZCBvbiBHUFUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNtb2RlbE1hdHJpeERpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBtb2RlbE1hdHJpeERpcnR5OiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgZm9yIGNoZWNraW5nIGlmIHZpZXcgbWF0cml4IG5lZWRzIHRvIGJlIHVwZGF0ZWQgb24gR1BVLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLk1vZGVsVmlld1Byb2plY3Rpb24jdmlld01hdHJpeERpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2aWV3TWF0cml4RGlydHk6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBmb3IgY2hlY2tpbmcgaWYgcHJvamVjdGlvbiBtYXRyaXggbmVlZHMgdG8gYmUgdXBkYXRlZCBvbiBHUFUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNwcm9qZWN0aW9uTWF0cml4RGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Rpb25NYXRyaXhEaXJ0eTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlbCBtYXRyaXhcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI21vZGVsTWF0cml4XHJcbiAgICAgKiBAdHlwZSB7P0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBtb2RlbE1hdHJpeDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZpZXcgbWF0cml4XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiN2aWV3TWF0cml4XHJcbiAgICAgKiBAdHlwZSB7P0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2aWV3TWF0cml4OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI3Byb2plY3Rpb25NYXRyaXhcclxuICAgICAqIEB0eXBlIHs/RmxvYXQzMkFycmF5fVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Rpb25NYXRyaXg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBNVlAgbWF0cmljZXMgd2l0aCBhbiBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLk1vZGVsVmlld1Byb2plY3Rpb24jbXZwSW5pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG12cEluaXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tb2RlbE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpZXdNYXRyaXhEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4RGlydHkgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubW9kZWxNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgMSwgMCwgMCwgMCxcclxuICAgICAgICAgICAgMCwgMSwgMCwgMCxcclxuICAgICAgICAgICAgMCwgMCwgMSwgMCxcclxuICAgICAgICAgICAgMCwgMCwgMCwgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudmlld01hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLCAwLCAwLFxyXG4gICAgICAgICAgICAwLCAxLCAwLCAwLFxyXG4gICAgICAgICAgICAwLCAwLCAxLCAwLFxyXG4gICAgICAgICAgICAwLCAwLCAwLCAxXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgICAgICAgIDEsIDAsIDAsIDAsXHJcbiAgICAgICAgICAgIDAsIDEsIDAsIDAsXHJcbiAgICAgICAgICAgIDAsIDAsIDEsIDAsXHJcbiAgICAgICAgICAgIDAsIDAsIDAsIDFcclxuICAgICAgICBdKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBkaXJ0eSBmbGFncyBhcmUgc2V0IHRoZW4gdGhlIG1hdHJpY2VzIGFyZSB1cGxvYWRlZCB0byB0aGUgR1BVLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNtdnBVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBtdnBVcGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLnByb2dyYW07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsTWF0cml4RGlydHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldE1hdHJpeDQocHJvZ3JhbSwgJ3VNb2RlbE1hdHJpeCcsIGZhbHNlLCB0aGlzLm1vZGVsTWF0cml4KTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbE1hdHJpeERpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdNYXRyaXhEaXJ0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0TWF0cml4NChwcm9ncmFtLCAndVZpZXdNYXRyaXgnLCBmYWxzZSwgdGhpcy52aWV3TWF0cml4KTtcclxuICAgICAgICAgICAgdGhpcy52aWV3TWF0cml4RGlydHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb2plY3Rpb25NYXRyaXhEaXJ0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0TWF0cml4NChwcm9ncmFtLCAndVByb2plY3Rpb25NYXRyaXgnLCBmYWxzZSwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4RGlydHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWRzIGFuIGlkZW50aXR5IG1hdHJpeCB0byB0aGUgbW9kZWwgbWF0cml4XHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI21vZGVsSWRlbnRpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBtb2RlbElkZW50aXR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeCA9IHRoaXMubW9kZWxNYXRyaXg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMF0gPSAxO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzFdID0gMDtcclxuICAgICAgICBtb2RlbE1hdHJpeFsyXSA9IDA7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbM10gPSAwO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzRdID0gMDtcclxuICAgICAgICBtb2RlbE1hdHJpeFs1XSA9IDE7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbNl0gPSAwO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzddID0gMDtcclxuICAgICAgICBtb2RlbE1hdHJpeFs4XSA9IDA7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbOV0gPSAwO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzEwXSA9IDE7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTFdID0gMDtcclxuICAgICAgICBtb2RlbE1hdHJpeFsxMl0gPSAwO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzEzXSA9IDA7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTRdID0gMDtcclxuICAgICAgICBtb2RlbE1hdHJpeFsxNV0gPSAxO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGVsTWF0cml4RGlydHkgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIG1vZGVsIG1hdHJpeFxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNtb2RlbFNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBNb2RlbCBWaWV3IFByb2plY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZGVsU2NhbGU6IGZ1bmN0aW9uICh4LCB5LCB6KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeCA9IHRoaXMubW9kZWxNYXRyaXg7XHJcblxyXG4gICAgICAgIG1vZGVsTWF0cml4WzBdID0gbW9kZWxNYXRyaXhbMF0gKiB4O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzFdID0gbW9kZWxNYXRyaXhbMV0gKiB4O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzJdID0gbW9kZWxNYXRyaXhbMl0gKiB4O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzNdID0gbW9kZWxNYXRyaXhbM10gKiB4O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzRdID0gbW9kZWxNYXRyaXhbNF0gKiB5O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzVdID0gbW9kZWxNYXRyaXhbNV0gKiB5O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzZdID0gbW9kZWxNYXRyaXhbNl0gKiB5O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzddID0gbW9kZWxNYXRyaXhbN10gKiB5O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzhdID0gbW9kZWxNYXRyaXhbOF0gKiB6O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzldID0gbW9kZWxNYXRyaXhbOV0gKiB6O1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzEwXSA9IG1vZGVsTWF0cml4WzEwXSAqIHo7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTFdID0gbW9kZWxNYXRyaXhbMTFdICogejtcclxuICAgIFxyXG4gICAgICAgIHRoaXMubW9kZWxNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBtb2RlbCBtYXRyaXhcclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLk1vZGVsVmlld1Byb2plY3Rpb24jbW9kZWxUcmFuc2xhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSB6IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIE1vZGVsIFZpZXcgUHJvamVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kZWxUcmFuc2xhdGU6IGZ1bmN0aW9uICh4LCB5LCB6KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeCA9IHRoaXMubW9kZWxNYXRyaXg7XHJcblxyXG4gICAgICAgIG1vZGVsTWF0cml4WzEyXSA9IG1vZGVsTWF0cml4WzBdICogeCArIG1vZGVsTWF0cml4WzRdICogeSArIG1vZGVsTWF0cml4WzhdICogeiArIG1vZGVsTWF0cml4WzEyXTtcclxuICAgICAgICBtb2RlbE1hdHJpeFsxM10gPSBtb2RlbE1hdHJpeFsxXSAqIHggKyBtb2RlbE1hdHJpeFs1XSAqIHkgKyBtb2RlbE1hdHJpeFs5XSAqIHogKyBtb2RlbE1hdHJpeFsxM107XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTRdID0gbW9kZWxNYXRyaXhbMl0gKiB4ICsgbW9kZWxNYXRyaXhbNl0gKiB5ICsgbW9kZWxNYXRyaXhbMTBdICogeiArIG1vZGVsTWF0cml4WzE0XTtcclxuICAgICAgICBtb2RlbE1hdHJpeFsxNV0gPSBtb2RlbE1hdHJpeFszXSAqIHggKyBtb2RlbE1hdHJpeFs3XSAqIHkgKyBtb2RlbE1hdHJpeFsxMV0gKiB6ICsgbW9kZWxNYXRyaXhbMTVdO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGVsTWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGVzIHRoZSBtb2RlbCBtYXRyaXggaW4gdGhlIFggYXhpcy5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLk1vZGVsVmlld1Byb2plY3Rpb24jbW9kZWxSb3RhdGVYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFRoZSBhbW91bnQgdG8gcm90YXRlIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBtb2RlbFJvdGF0ZVg6IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeCA9IHRoaXMubW9kZWxNYXRyaXg7XHJcbiAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihyYWRpYW5zKTtcclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHJhZGlhbnMpO1xyXG4gICAgICAgIHZhciBhMTAgPSBtb2RlbE1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgYTExID0gbW9kZWxNYXRyaXhbNV07XHJcbiAgICAgICAgdmFyIGExMiA9IG1vZGVsTWF0cml4WzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSBtb2RlbE1hdHJpeFs3XTtcclxuICAgICAgICB2YXIgYTIwID0gbW9kZWxNYXRyaXhbOF07XHJcbiAgICAgICAgdmFyIGEyMSA9IG1vZGVsTWF0cml4WzldO1xyXG4gICAgICAgIHZhciBhMjIgPSBtb2RlbE1hdHJpeFsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IG1vZGVsTWF0cml4WzExXTtcclxuXHJcbiAgICAgICAgbW9kZWxNYXRyaXhbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgICAgICBtb2RlbE1hdHJpeFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgICAgICBtb2RlbE1hdHJpeFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWxNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgdGhlIG1vZGVsIG1hdHJpeCBpbiB0aGUgWSBheGlzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNtb2RlbFJvdGF0ZVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gVGhlIGFtb3VudCB0byByb3RhdGUgYnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBNb2RlbCBWaWV3IFByb2plY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZGVsUm90YXRlWTogZnVuY3Rpb24gKHJhZGlhbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1vZGVsTWF0cml4ID0gdGhpcy5tb2RlbE1hdHJpeDtcclxuICAgICAgICB2YXIgcyA9IE1hdGguc2luKHJhZGlhbnMpO1xyXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MocmFkaWFucyk7XHJcbiAgICAgICAgdmFyIGEwMCA9IG1vZGVsTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBhMDEgPSBtb2RlbE1hdHJpeFsxXTtcclxuICAgICAgICB2YXIgYTAyID0gbW9kZWxNYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGEwMyA9IG1vZGVsTWF0cml4WzNdO1xyXG4gICAgICAgIHZhciBhMjAgPSBtb2RlbE1hdHJpeFs4XTtcclxuICAgICAgICB2YXIgYTIxID0gbW9kZWxNYXRyaXhbOV07XHJcbiAgICAgICAgdmFyIGEyMiA9IG1vZGVsTWF0cml4WzEwXTtcclxuICAgICAgICB2YXIgYTIzID0gbW9kZWxNYXRyaXhbMTFdO1xyXG5cclxuICAgICAgICBtb2RlbE1hdHJpeFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgICAgICBtb2RlbE1hdHJpeFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzhdID0gYTAwICogcyArIGEyMCAqIGM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgICAgICBtb2RlbE1hdHJpeFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcclxuICAgICAgICBtb2RlbE1hdHJpeFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB0aGUgbW9kZWwgbWF0cml4IGluIHRoZSBaIGF4aXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI21vZGVsUm90YXRlWlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBUaGUgYW1vdW50IHRvIHJvdGF0ZSBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIE1vZGVsIFZpZXcgUHJvamVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kZWxSb3RhdGVaOiBmdW5jdGlvbiAocmFkaWFucylcclxuICAgIHtcclxuICAgICAgICB2YXIgbW9kZWxNYXRyaXggPSB0aGlzLm1vZGVsTWF0cml4O1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkaWFucyk7XHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyYWRpYW5zKTtcclxuICAgICAgICB2YXIgYTAwID0gbW9kZWxNYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGEwMSA9IG1vZGVsTWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBhMDIgPSBtb2RlbE1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgYTAzID0gbW9kZWxNYXRyaXhbM107XHJcbiAgICAgICAgdmFyIGExMCA9IG1vZGVsTWF0cml4WzRdO1xyXG4gICAgICAgIHZhciBhMTEgPSBtb2RlbE1hdHJpeFs1XTtcclxuICAgICAgICB2YXIgYTEyID0gbW9kZWxNYXRyaXhbNl07XHJcbiAgICAgICAgdmFyIGExMyA9IG1vZGVsTWF0cml4WzddO1xyXG5cclxuICAgICAgICBtb2RlbE1hdHJpeFswXSA9IGEwMCAqIGMgKyBhMTAgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzFdID0gYTAxICogYyArIGExMSAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbMl0gPSBhMDIgKiBjICsgYTEyICogcztcclxuICAgICAgICBtb2RlbE1hdHJpeFszXSA9IGEwMyAqIGMgKyBhMTMgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XHJcbiAgICAgICAgbW9kZWxNYXRyaXhbNV0gPSBhMTEgKiBjIC0gYTAxICogcztcclxuICAgICAgICBtb2RlbE1hdHJpeFs2XSA9IGExMiAqIGMgLSBhMDIgKiBzO1xyXG4gICAgICAgIG1vZGVsTWF0cml4WzddID0gYTEzICogYyAtIGEwMyAqIHM7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWxNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWRzIGlkZW50aXR5IG1hdHJpeCBpbnRvIHRoZSB2aWV3IG1hdHJpeFxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiN2aWV3SWRlbnRpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICB2aWV3SWRlbnRpdHk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZXdNYXRyaXggPSB0aGlzLnZpZXdNYXRyaXg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmlld01hdHJpeFswXSA9IDE7XHJcbiAgICAgICAgdmlld01hdHJpeFsxXSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFsyXSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFszXSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFs0XSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFs1XSA9IDE7XHJcbiAgICAgICAgdmlld01hdHJpeFs2XSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFs3XSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFs4XSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFs5XSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFsxMF0gPSAxO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTFdID0gMDtcclxuICAgICAgICB2aWV3TWF0cml4WzEyXSA9IDA7XHJcbiAgICAgICAgdmlld01hdHJpeFsxM10gPSAwO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTRdID0gMDtcclxuICAgICAgICB2aWV3TWF0cml4WzE1XSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMudmlld01hdHJpeERpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogU2NhbGVzIHZpZXcgbWF0cml4XHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI3ZpZXdTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIHogY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICB2aWV3U2NhbGU6IGZ1bmN0aW9uICh4LCB5LCB6KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWV3TWF0cml4ID0gdGhpcy52aWV3TWF0cml4O1xyXG5cclxuICAgICAgICB2aWV3TWF0cml4WzBdID0gdmlld01hdHJpeFswXSAqIHg7XHJcbiAgICAgICAgdmlld01hdHJpeFsxXSA9IHZpZXdNYXRyaXhbMV0gKiB4O1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMl0gPSB2aWV3TWF0cml4WzJdICogeDtcclxuICAgICAgICB2aWV3TWF0cml4WzNdID0gdmlld01hdHJpeFszXSAqIHg7XHJcbiAgICAgICAgdmlld01hdHJpeFs0XSA9IHZpZXdNYXRyaXhbNF0gKiB5O1xyXG4gICAgICAgIHZpZXdNYXRyaXhbNV0gPSB2aWV3TWF0cml4WzVdICogeTtcclxuICAgICAgICB2aWV3TWF0cml4WzZdID0gdmlld01hdHJpeFs2XSAqIHk7XHJcbiAgICAgICAgdmlld01hdHJpeFs3XSA9IHZpZXdNYXRyaXhbN10gKiB5O1xyXG4gICAgICAgIHZpZXdNYXRyaXhbOF0gPSB2aWV3TWF0cml4WzhdICogejtcclxuICAgICAgICB2aWV3TWF0cml4WzldID0gdmlld01hdHJpeFs5XSAqIHo7XHJcbiAgICAgICAgdmlld01hdHJpeFsxMF0gPSB2aWV3TWF0cml4WzEwXSAqIHo7XHJcbiAgICAgICAgdmlld01hdHJpeFsxMV0gPSB2aWV3TWF0cml4WzExXSAqIHo7XHJcbiAgICBcclxuICAgICAgICB0aGlzLnZpZXdNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZXMgdmlldyBtYXRyaXhcclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLk1vZGVsVmlld1Byb2plY3Rpb24jdmlld1RyYW5zbGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIHogY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICB2aWV3VHJhbnNsYXRlOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlld01hdHJpeCA9IHRoaXMudmlld01hdHJpeDtcclxuXHJcbiAgICAgICAgdmlld01hdHJpeFsxMl0gPSB2aWV3TWF0cml4WzBdICogeCArIHZpZXdNYXRyaXhbNF0gKiB5ICsgdmlld01hdHJpeFs4XSAqIHogKyB2aWV3TWF0cml4WzEyXTtcclxuICAgICAgICB2aWV3TWF0cml4WzEzXSA9IHZpZXdNYXRyaXhbMV0gKiB4ICsgdmlld01hdHJpeFs1XSAqIHkgKyB2aWV3TWF0cml4WzldICogeiArIHZpZXdNYXRyaXhbMTNdO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTRdID0gdmlld01hdHJpeFsyXSAqIHggKyB2aWV3TWF0cml4WzZdICogeSArIHZpZXdNYXRyaXhbMTBdICogeiArIHZpZXdNYXRyaXhbMTRdO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTVdID0gdmlld01hdHJpeFszXSAqIHggKyB2aWV3TWF0cml4WzddICogeSArIHZpZXdNYXRyaXhbMTFdICogeiArIHZpZXdNYXRyaXhbMTVdO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGVzIHZpZXcgbWF0cml4IGluIHRoZSBYIGF4aXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI3ZpZXdSb3RhdGVYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFRoZSBhbW91bnQgdG8gcm90YXRlIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICB2aWV3Um90YXRlWDogZnVuY3Rpb24gKHJhZGlhbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZXdNYXRyaXggPSB0aGlzLnZpZXdNYXRyaXg7XHJcbiAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihyYWRpYW5zKTtcclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHJhZGlhbnMpO1xyXG4gICAgICAgIHZhciBhMTAgPSB2aWV3TWF0cml4WzRdO1xyXG4gICAgICAgIHZhciBhMTEgPSB2aWV3TWF0cml4WzVdO1xyXG4gICAgICAgIHZhciBhMTIgPSB2aWV3TWF0cml4WzZdO1xyXG4gICAgICAgIHZhciBhMTMgPSB2aWV3TWF0cml4WzddO1xyXG4gICAgICAgIHZhciBhMjAgPSB2aWV3TWF0cml4WzhdO1xyXG4gICAgICAgIHZhciBhMjEgPSB2aWV3TWF0cml4WzldO1xyXG4gICAgICAgIHZhciBhMjIgPSB2aWV3TWF0cml4WzEwXTtcclxuICAgICAgICB2YXIgYTIzID0gdmlld01hdHJpeFsxMV07XHJcblxyXG4gICAgICAgIHZpZXdNYXRyaXhbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgICAgICB2aWV3TWF0cml4WzVdID0gYTExICogYyArIGEyMSAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgICAgICB2aWV3TWF0cml4WzhdID0gYTIwICogYyAtIGExMCAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFsxMV0gPSBhMjMgKiBjIC0gYTEzICogcztcclxuXHJcbiAgICAgICAgdGhpcy52aWV3TWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB2aWV3IG1hdHJpeCBpbiB0aGUgWSBheGlzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiN2aWV3Um90YXRlWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBUaGUgYW1vdW50IHRvIHJvdGF0ZSBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIE1vZGVsIFZpZXcgUHJvamVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgdmlld1JvdGF0ZVk6IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWV3TWF0cml4ID0gdGhpcy52aWV3TWF0cml4O1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkaWFucyk7XHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyYWRpYW5zKTtcclxuICAgICAgICB2YXIgYTAwID0gdmlld01hdHJpeFswXTtcclxuICAgICAgICB2YXIgYTAxID0gdmlld01hdHJpeFsxXTtcclxuICAgICAgICB2YXIgYTAyID0gdmlld01hdHJpeFsyXTtcclxuICAgICAgICB2YXIgYTAzID0gdmlld01hdHJpeFszXTtcclxuICAgICAgICB2YXIgYTIwID0gdmlld01hdHJpeFs4XTtcclxuICAgICAgICB2YXIgYTIxID0gdmlld01hdHJpeFs5XTtcclxuICAgICAgICB2YXIgYTIyID0gdmlld01hdHJpeFsxMF07XHJcbiAgICAgICAgdmFyIGEyMyA9IHZpZXdNYXRyaXhbMTFdO1xyXG5cclxuICAgICAgICB2aWV3TWF0cml4WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFsxXSA9IGEwMSAqIGMgLSBhMjEgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgICAgICB2aWV3TWF0cml4WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFs4XSA9IGEwMCAqIHMgKyBhMjAgKiBjO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgICAgICB2aWV3TWF0cml4WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMTFdID0gYTAzICogcyArIGEyMyAqIGM7XHJcblxyXG4gICAgICAgIHRoaXMudmlld01hdHJpeERpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB2aWV3IG1hdHJpeCBpbiB0aGUgWiBheGlzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiN2aWV3Um90YXRlWlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBUaGUgYW1vdW50IHRvIHJvdGF0ZSBieS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIE1vZGVsIFZpZXcgUHJvamVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgdmlld1JvdGF0ZVo6IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWV3TWF0cml4ID0gdGhpcy52aWV3TWF0cml4O1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4ocmFkaWFucyk7XHJcbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyhyYWRpYW5zKTtcclxuICAgICAgICB2YXIgYTAwID0gdmlld01hdHJpeFswXTtcclxuICAgICAgICB2YXIgYTAxID0gdmlld01hdHJpeFsxXTtcclxuICAgICAgICB2YXIgYTAyID0gdmlld01hdHJpeFsyXTtcclxuICAgICAgICB2YXIgYTAzID0gdmlld01hdHJpeFszXTtcclxuICAgICAgICB2YXIgYTEwID0gdmlld01hdHJpeFs0XTtcclxuICAgICAgICB2YXIgYTExID0gdmlld01hdHJpeFs1XTtcclxuICAgICAgICB2YXIgYTEyID0gdmlld01hdHJpeFs2XTtcclxuICAgICAgICB2YXIgYTEzID0gdmlld01hdHJpeFs3XTtcclxuXHJcbiAgICAgICAgdmlld01hdHJpeFswXSA9IGEwMCAqIGMgKyBhMTAgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbMV0gPSBhMDEgKiBjICsgYTExICogcztcclxuICAgICAgICB2aWV3TWF0cml4WzJdID0gYTAyICogYyArIGExMiAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFszXSA9IGEwMyAqIGMgKyBhMTMgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcclxuICAgICAgICB2aWV3TWF0cml4WzVdID0gYTExICogYyAtIGEwMSAqIHM7XHJcbiAgICAgICAgdmlld01hdHJpeFs2XSA9IGExMiAqIGMgLSBhMDIgKiBzO1xyXG4gICAgICAgIHZpZXdNYXRyaXhbN10gPSBhMTMgKiBjIC0gYTAzICogcztcclxuXHJcbiAgICAgICAgdGhpcy52aWV3TWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyBhIDJEIHZpZXcgbWF0cml4ICgzeDIgbWF0cml4KSBpbnRvIGEgNHg0IHZpZXcgbWF0cml4IFxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiN2aWV3TG9hZDJEXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gbWF0cml4MkQgLSBUaGUgTWF0cml4MkQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBNb2RlbCBWaWV3IFByb2plY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHZpZXdMb2FkMkQ6IGZ1bmN0aW9uIChtYXRyaXgyRClcclxuICAgIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzLnZpZXdNYXRyaXg7XHJcblxyXG4gICAgICAgIHZtWzBdID0gbWF0cml4MkRbMF07XHJcbiAgICAgICAgdm1bMV0gPSBtYXRyaXgyRFsxXTtcclxuICAgICAgICB2bVsyXSA9IDAuMDtcclxuICAgICAgICB2bVszXSA9IDAuMDtcclxuICAgICAgICB2bVs0XSA9IG1hdHJpeDJEWzJdO1xyXG4gICAgICAgIHZtWzVdID0gbWF0cml4MkRbM107XHJcbiAgICAgICAgdm1bNl0gPSAwLjA7XHJcbiAgICAgICAgdm1bN10gPSAwLjA7XHJcbiAgICAgICAgdm1bOF0gPSBtYXRyaXgyRFs0XTtcclxuICAgICAgICB2bVs5XSA9IG1hdHJpeDJEWzVdO1xyXG4gICAgICAgIHZtWzEwXSA9IDEuMDtcclxuICAgICAgICB2bVsxMV0gPSAwLjA7XHJcbiAgICAgICAgdm1bMTJdID0gMC4wO1xyXG4gICAgICAgIHZtWzEzXSA9IDAuMDtcclxuICAgICAgICB2bVsxNF0gPSAwLjA7XHJcbiAgICAgICAgdm1bMTVdID0gMS4wO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgYSA0eDQgbWF0cml4IGludG8gdGhlIHZpZXcgbWF0cml4XHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI3ZpZXdMb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gbWF0cml4IC0gVGhlIE1hdHJpeDJELlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICB2aWV3TG9hZDogZnVuY3Rpb24gKG1hdHJpeClcclxuICAgIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzLnZpZXdNYXRyaXg7XHJcblxyXG4gICAgICAgIHZtWzBdID0gbWF0cml4WzBdO1xyXG4gICAgICAgIHZtWzFdID0gbWF0cml4WzFdO1xyXG4gICAgICAgIHZtWzJdID0gbWF0cml4WzJdO1xyXG4gICAgICAgIHZtWzNdID0gbWF0cml4WzNdO1xyXG4gICAgICAgIHZtWzRdID0gbWF0cml4WzRdO1xyXG4gICAgICAgIHZtWzVdID0gbWF0cml4WzVdO1xyXG4gICAgICAgIHZtWzZdID0gbWF0cml4WzZdO1xyXG4gICAgICAgIHZtWzddID0gbWF0cml4WzddO1xyXG4gICAgICAgIHZtWzhdID0gbWF0cml4WzhdO1xyXG4gICAgICAgIHZtWzldID0gbWF0cml4WzldO1xyXG4gICAgICAgIHZtWzEwXSA9IG1hdHJpeFsxMF07XHJcbiAgICAgICAgdm1bMTFdID0gbWF0cml4WzExXTtcclxuICAgICAgICB2bVsxMl0gPSBtYXRyaXhbMTJdO1xyXG4gICAgICAgIHZtWzEzXSA9IG1hdHJpeFsxM107XHJcbiAgICAgICAgdm1bMTRdID0gbWF0cml4WzE0XTtcclxuICAgICAgICB2bVsxNV0gPSBtYXRyaXhbMTVdO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyBpZGVudGl0eSBtYXRyaXggaW50byB0aGUgcHJvamVjdGlvbiBtYXRyaXguXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlJlbmRlcmVyLldlYkdMLlBpcGVsaW5lcy5Nb2RlbFZpZXdQcm9qZWN0aW9uI3Byb2pJZGVudGl0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBNb2RlbCBWaWV3IFByb2plY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHByb2pJZGVudGl0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuICAgICAgICBcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzBdID0gMTtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzFdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzJdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzNdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzRdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzVdID0gMTtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzZdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzddID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzhdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzldID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzEwXSA9IDE7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxMV0gPSAwO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTJdID0gMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzEzXSA9IDA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxNF0gPSAwO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTVdID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHVwIGFuIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNwcm9qT3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgLSBUaGUgcmlnaHQgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIC0gVGhlIGJvdHRvbSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgLSBUaGUgbmVhciB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgLSBUaGUgZmFyIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTW9kZWwgVmlldyBQcm9qZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwcm9qT3J0aG86IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcilcclxuICAgIHtcclxuICAgICAgICB2YXIgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuICAgICAgICB2YXIgbGVmdFJpZ2h0ID0gMS4wIC8gKGxlZnQgLSByaWdodCk7XHJcbiAgICAgICAgdmFyIGJvdHRvbVRvcCA9IDEuMCAvIChib3R0b20gLSB0b3ApO1xyXG4gICAgICAgIHZhciBuZWFyRmFyID0gMS4wIC8gKG5lYXIgLSBmYXIpO1xyXG5cclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzBdID0gLTIuMCAqIGxlZnRSaWdodDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzFdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMl0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFszXSA9IDAuMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzRdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbNV0gPSAtMi4wICogYm90dG9tVG9wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbNl0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFs3XSA9IDAuMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzhdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbOV0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxMF0gPSAyLjAgKiBuZWFyRmFyO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTFdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTJdID0gKGxlZnQgKyByaWdodCkgKiBsZWZ0UmlnaHQ7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJvdHRvbVRvcDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5lYXJGYXI7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxNV0gPSAxLjA7XHJcblxyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdXAgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuTW9kZWxWaWV3UHJvamVjdGlvbiNwcm9qUGVyc3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmb3ZZIC0gVGhlIGZvdiB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3RSYXRpbyAtIFRoZSBhc3BlY3RSYXRpbyB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIC0gVGhlIG5lYXIgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZmFyIC0gVGhlIGZhciB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIE1vZGVsIFZpZXcgUHJvamVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJvalBlcnNwOiBmdW5jdGlvbiAoZm92WSwgYXNwZWN0UmF0aW8sIG5lYXIsIGZhcilcclxuICAgIHtcclxuICAgICAgICB2YXIgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuICAgICAgICB2YXIgZm92ID0gMS4wIC8gTWF0aC50YW4oZm92WSAvIDIuMCk7XHJcbiAgICAgICAgdmFyIG5lYXJGYXIgPSAxLjAgLyAobmVhciAtIGZhcik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFswXSA9IGZvdiAvIGFzcGVjdFJhdGlvO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMV0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsyXSA9IDAuMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzNdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbNF0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFs1XSA9IGZvdjtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzZdID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbN10gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFs4XSA9IDAuMDtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzldID0gMC4wO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTBdID0gKGZhciArIG5lYXIpICogbmVhckZhcjtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4WzExXSA9IC0xLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxMl0gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxM10gPSAwLjA7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeFsxNF0gPSAoMi4wICogZmFyICogbmVhcikgKiBuZWFyRmFyO1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhbMTVdID0gMC4wO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vZGVsVmlld1Byb2plY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/pipelines/components/ModelViewProjection.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/pipelines/index.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/pipelines/index.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Renderer.WebGL.Pipelines\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BitmapMaskPipeline: __webpack_require__(/*! ./BitmapMaskPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/BitmapMaskPipeline.js\"),\r\n    ForwardDiffuseLightPipeline: __webpack_require__(/*! ./ForwardDiffuseLightPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js\"),\r\n    TextureTintPipeline: __webpack_require__(/*! ./TextureTintPipeline */ \"./node_modules/phaser/src/renderer/webgl/pipelines/TextureTintPipeline.js\"),\r\n    ModelViewProjection: __webpack_require__(/*! ./components/ModelViewProjection */ \"./node_modules/phaser/src/renderer/webgl/pipelines/components/ModelViewProjection.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvaW5kZXguanM/ZWEyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLHNHQUFzQjtBQUN0RCxpQ0FBaUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDeEUseUJBQXlCLG1CQUFPLENBQUMsd0dBQXVCO0FBQ3hELHlCQUF5QixtQkFBTyxDQUFDLDhIQUFrQzs7QUFFbkUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9waXBlbGluZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBCaXRtYXBNYXNrUGlwZWxpbmU6IHJlcXVpcmUoJy4vQml0bWFwTWFza1BpcGVsaW5lJyksXHJcbiAgICBGb3J3YXJkRGlmZnVzZUxpZ2h0UGlwZWxpbmU6IHJlcXVpcmUoJy4vRm9yd2FyZERpZmZ1c2VMaWdodFBpcGVsaW5lJyksXHJcbiAgICBUZXh0dXJlVGludFBpcGVsaW5lOiByZXF1aXJlKCcuL1RleHR1cmVUaW50UGlwZWxpbmUnKSxcclxuICAgIE1vZGVsVmlld1Byb2plY3Rpb246IHJlcXVpcmUoJy4vY29tcG9uZW50cy9Nb2RlbFZpZXdQcm9qZWN0aW9uJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/pipelines/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-frag.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-frag.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = [\n    '#define SHADER_NAME PHASER_BITMAP_MASK_FS',\n    '',\n    'precision mediump float;',\n    '',\n    'uniform vec2 uResolution;',\n    'uniform sampler2D uMainSampler;',\n    'uniform sampler2D uMaskSampler;',\n    'uniform bool uInvertMaskAlpha;',\n    '',\n    'void main()',\n    '{',\n    '    vec2 uv = gl_FragCoord.xy / uResolution;',\n    '    vec4 mainColor = texture2D(uMainSampler, uv);',\n    '    vec4 maskColor = texture2D(uMaskSampler, uv);',\n    '    float alpha = mainColor.a;',\n    '',\n    '    if (!uInvertMaskAlpha)',\n    '    {',\n    '        alpha *= (maskColor.a);',\n    '    }',\n    '    else',\n    '    {',\n    '        alpha *= (1.0 - maskColor.a);',\n    '    }',\n    '',\n    '    gl_FragColor = vec4(mainColor.rgb * alpha, alpha);',\n    '}',\n    ''\n].join('\\n');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL0JpdG1hcE1hc2stZnJhZy5qcz9iMmYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLDhCQUE4QjtBQUM5QixvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsTUFBTTtBQUNOLGlEQUFpRDtBQUNqRCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsVUFBVTtBQUNWLG9DQUFvQztBQUNwQyxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1YsMENBQTBDO0FBQzFDLFVBQVU7QUFDVjtBQUNBLDJEQUEyRDtBQUMzRCxNQUFNO0FBQ047QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3dlYmdsL3NoYWRlcnMvQml0bWFwTWFzay1mcmFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBbXG4gICAgJyNkZWZpbmUgU0hBREVSX05BTUUgUEhBU0VSX0JJVE1BUF9NQVNLX0ZTJyxcbiAgICAnJyxcbiAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcbiAgICAnJyxcbiAgICAndW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVNYWluU2FtcGxlcjsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1TWFza1NhbXBsZXI7JyxcbiAgICAndW5pZm9ybSBib29sIHVJbnZlcnRNYXNrQWxwaGE7JyxcbiAgICAnJyxcbiAgICAndm9pZCBtYWluKCknLFxuICAgICd7JyxcbiAgICAnICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB1UmVzb2x1dGlvbjsnLFxuICAgICcgICAgdmVjNCBtYWluQ29sb3IgPSB0ZXh0dXJlMkQodU1haW5TYW1wbGVyLCB1dik7JyxcbiAgICAnICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHVNYXNrU2FtcGxlciwgdXYpOycsXG4gICAgJyAgICBmbG9hdCBhbHBoYSA9IG1haW5Db2xvci5hOycsXG4gICAgJycsXG4gICAgJyAgICBpZiAoIXVJbnZlcnRNYXNrQWxwaGEpJyxcbiAgICAnICAgIHsnLFxuICAgICcgICAgICAgIGFscGhhICo9IChtYXNrQ29sb3IuYSk7JyxcbiAgICAnICAgIH0nLFxuICAgICcgICAgZWxzZScsXG4gICAgJyAgICB7JyxcbiAgICAnICAgICAgICBhbHBoYSAqPSAoMS4wIC0gbWFza0NvbG9yLmEpOycsXG4gICAgJyAgICB9JyxcbiAgICAnJyxcbiAgICAnICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWFpbkNvbG9yLnJnYiAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAnfScsXG4gICAgJydcbl0uam9pbignXFxuJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-frag.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-vert.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-vert.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = [\n    '#define SHADER_NAME PHASER_BITMAP_MASK_VS',\n    '',\n    'precision mediump float;',\n    '',\n    'attribute vec2 inPosition;',\n    '',\n    'void main()',\n    '{',\n    '    gl_Position = vec4(inPosition, 0.0, 1.0);',\n    '}',\n    ''\n].join('\\n');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL0JpdG1hcE1hc2stdmVydC5qcz9iYjk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsTUFBTTtBQUNOLGtEQUFrRDtBQUNsRCxNQUFNO0FBQ047QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3dlYmdsL3NoYWRlcnMvQml0bWFwTWFzay12ZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBbXG4gICAgJyNkZWZpbmUgU0hBREVSX05BTUUgUEhBU0VSX0JJVE1BUF9NQVNLX1ZTJyxcbiAgICAnJyxcbiAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcbiAgICAnJyxcbiAgICAnYXR0cmlidXRlIHZlYzIgaW5Qb3NpdGlvbjsnLFxuICAgICcnLFxuICAgICd2b2lkIG1haW4oKScsXG4gICAgJ3snLFxuICAgICcgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGluUG9zaXRpb24sIDAuMCwgMS4wKTsnLFxuICAgICd9JyxcbiAgICAnJ1xuXS5qb2luKCdcXG4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/shaders/BitmapMask-vert.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/shaders/ForwardDiffuse-frag.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/shaders/ForwardDiffuse-frag.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = [\r\n    '#define SHADER_NAME PHASER_FORWARD_DIFFUSE_FS',\r\n    '',\r\n    'precision mediump float;',\r\n    '',\r\n    'struct Light',\r\n    '{',\r\n    '    vec2 position;',\r\n    '    vec3 color;',\r\n    '    float intensity;',\r\n    '    float radius;',\r\n    '};',\r\n    '',\r\n    'const int kMaxLights = %LIGHT_COUNT%;',\r\n    '',\r\n    'uniform vec4 uCamera; /* x, y, rotation, zoom */',\r\n    'uniform vec2 uResolution;',\r\n    'uniform sampler2D uMainSampler;',\r\n    'uniform sampler2D uNormSampler;',\r\n    'uniform vec3 uAmbientLightColor;',\r\n    'uniform Light uLights[kMaxLights];',\r\n    'uniform mat3 uInverseRotationMatrix;',\r\n    '',\r\n    'varying vec2 outTexCoord;',\r\n    'varying vec4 outTint;',\r\n    '',\r\n    'void main()',\r\n    '{',\r\n    '    vec3 finalColor = vec3(0.0, 0.0, 0.0);',\r\n    '    vec4 color = texture2D(uMainSampler, outTexCoord) * vec4(outTint.rgb * outTint.a, outTint.a);',\r\n    '    vec3 normalMap = texture2D(uNormSampler, outTexCoord).rgb;',\r\n    '    vec3 normal = normalize(uInverseRotationMatrix * vec3(normalMap * 2.0 - 1.0));',\r\n    '    vec2 res = vec2(min(uResolution.x, uResolution.y)) * uCamera.w;',\r\n    '',\r\n    '    for (int index = 0; index < kMaxLights; ++index)',\r\n    '    {',\r\n    '        Light light = uLights[index];',\r\n    '        vec3 lightDir = vec3((light.position.xy / res) - (gl_FragCoord.xy / res), 0.1);',\r\n    '        vec3 lightNormal = normalize(lightDir);',\r\n    '        float distToSurf = length(lightDir) * uCamera.w;',\r\n    '        float diffuseFactor = max(dot(normal, lightNormal), 0.0);',\r\n    '        float radius = (light.radius / res.x * uCamera.w) * uCamera.w;',\r\n    '        float attenuation = clamp(1.0 - distToSurf * distToSurf / (radius * radius), 0.0, 1.0);',\r\n    '        vec3 diffuse = light.color * diffuseFactor;',\r\n    '        finalColor += (attenuation * diffuse) * light.intensity;',\r\n    '    }',\r\n    '',\r\n    '    vec4 colorOutput = vec4(uAmbientLightColor + finalColor, 1.0);',\r\n    '    gl_FragColor = color * vec4(colorOutput.rgb * colorOutput.a, colorOutput.a);',\r\n    '',\r\n    '}',\r\n    ''\r\n].join('\\n');\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL0ZvcndhcmREaWZmdXNlLWZyYWcuanM/MjY4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE1BQU07QUFDTix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEIsT0FBTztBQUNQO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0EsMEJBQTBCO0FBQzFCLDhCQUE4QjtBQUM5QixvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLHFDQUFxQztBQUNyQyx1Q0FBdUM7QUFDdkMseUNBQXlDO0FBQ3pDO0FBQ0EsOEJBQThCO0FBQzlCLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsTUFBTTtBQUNOLCtDQUErQztBQUMvQyxzR0FBc0c7QUFDdEcsbUVBQW1FO0FBQ25FLHVGQUF1RjtBQUN2Rix3RUFBd0U7QUFDeEU7QUFDQSw0QkFBNEIsb0JBQW9CO0FBQ2hELFVBQVU7QUFDViwwQ0FBMEM7QUFDMUMsNEZBQTRGO0FBQzVGLG9EQUFvRDtBQUNwRCw2REFBNkQ7QUFDN0Qsc0VBQXNFO0FBQ3RFLDJFQUEyRTtBQUMzRSxvR0FBb0c7QUFDcEcsd0RBQXdEO0FBQ3hELHFFQUFxRTtBQUNyRSxVQUFVO0FBQ1Y7QUFDQSx1RUFBdUU7QUFDdkUscUZBQXFGO0FBQ3JGO0FBQ0EsTUFBTTtBQUNOO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL0ZvcndhcmREaWZmdXNlLWZyYWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFtcclxuICAgICcjZGVmaW5lIFNIQURFUl9OQU1FIFBIQVNFUl9GT1JXQVJEX0RJRkZVU0VfRlMnLFxyXG4gICAgJycsXHJcbiAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcclxuICAgICcnLFxyXG4gICAgJ3N0cnVjdCBMaWdodCcsXHJcbiAgICAneycsXHJcbiAgICAnICAgIHZlYzIgcG9zaXRpb247JyxcclxuICAgICcgICAgdmVjMyBjb2xvcjsnLFxyXG4gICAgJyAgICBmbG9hdCBpbnRlbnNpdHk7JyxcclxuICAgICcgICAgZmxvYXQgcmFkaXVzOycsXHJcbiAgICAnfTsnLFxyXG4gICAgJycsXHJcbiAgICAnY29uc3QgaW50IGtNYXhMaWdodHMgPSAlTElHSFRfQ09VTlQlOycsXHJcbiAgICAnJyxcclxuICAgICd1bmlmb3JtIHZlYzQgdUNhbWVyYTsgLyogeCwgeSwgcm90YXRpb24sIHpvb20gKi8nLFxyXG4gICAgJ3VuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsnLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVNYWluU2FtcGxlcjsnLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVOb3JtU2FtcGxlcjsnLFxyXG4gICAgJ3VuaWZvcm0gdmVjMyB1QW1iaWVudExpZ2h0Q29sb3I7JyxcclxuICAgICd1bmlmb3JtIExpZ2h0IHVMaWdodHNba01heExpZ2h0c107JyxcclxuICAgICd1bmlmb3JtIG1hdDMgdUludmVyc2VSb3RhdGlvbk1hdHJpeDsnLFxyXG4gICAgJycsXHJcbiAgICAndmFyeWluZyB2ZWMyIG91dFRleENvb3JkOycsXHJcbiAgICAndmFyeWluZyB2ZWM0IG91dFRpbnQ7JyxcclxuICAgICcnLFxyXG4gICAgJ3ZvaWQgbWFpbigpJyxcclxuICAgICd7JyxcclxuICAgICcgICAgdmVjMyBmaW5hbENvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTsnLFxyXG4gICAgJyAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVNYWluU2FtcGxlciwgb3V0VGV4Q29vcmQpICogdmVjNChvdXRUaW50LnJnYiAqIG91dFRpbnQuYSwgb3V0VGludC5hKTsnLFxyXG4gICAgJyAgICB2ZWMzIG5vcm1hbE1hcCA9IHRleHR1cmUyRCh1Tm9ybVNhbXBsZXIsIG91dFRleENvb3JkKS5yZ2I7JyxcclxuICAgICcgICAgdmVjMyBub3JtYWwgPSBub3JtYWxpemUodUludmVyc2VSb3RhdGlvbk1hdHJpeCAqIHZlYzMobm9ybWFsTWFwICogMi4wIC0gMS4wKSk7JyxcclxuICAgICcgICAgdmVjMiByZXMgPSB2ZWMyKG1pbih1UmVzb2x1dGlvbi54LCB1UmVzb2x1dGlvbi55KSkgKiB1Q2FtZXJhLnc7JyxcclxuICAgICcnLFxyXG4gICAgJyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwga01heExpZ2h0czsgKytpbmRleCknLFxyXG4gICAgJyAgICB7JyxcclxuICAgICcgICAgICAgIExpZ2h0IGxpZ2h0ID0gdUxpZ2h0c1tpbmRleF07JyxcclxuICAgICcgICAgICAgIHZlYzMgbGlnaHREaXIgPSB2ZWMzKChsaWdodC5wb3NpdGlvbi54eSAvIHJlcykgLSAoZ2xfRnJhZ0Nvb3JkLnh5IC8gcmVzKSwgMC4xKTsnLFxyXG4gICAgJyAgICAgICAgdmVjMyBsaWdodE5vcm1hbCA9IG5vcm1hbGl6ZShsaWdodERpcik7JyxcclxuICAgICcgICAgICAgIGZsb2F0IGRpc3RUb1N1cmYgPSBsZW5ndGgobGlnaHREaXIpICogdUNhbWVyYS53OycsXHJcbiAgICAnICAgICAgICBmbG9hdCBkaWZmdXNlRmFjdG9yID0gbWF4KGRvdChub3JtYWwsIGxpZ2h0Tm9ybWFsKSwgMC4wKTsnLFxyXG4gICAgJyAgICAgICAgZmxvYXQgcmFkaXVzID0gKGxpZ2h0LnJhZGl1cyAvIHJlcy54ICogdUNhbWVyYS53KSAqIHVDYW1lcmEudzsnLFxyXG4gICAgJyAgICAgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAgLSBkaXN0VG9TdXJmICogZGlzdFRvU3VyZiAvIChyYWRpdXMgKiByYWRpdXMpLCAwLjAsIDEuMCk7JyxcclxuICAgICcgICAgICAgIHZlYzMgZGlmZnVzZSA9IGxpZ2h0LmNvbG9yICogZGlmZnVzZUZhY3RvcjsnLFxyXG4gICAgJyAgICAgICAgZmluYWxDb2xvciArPSAoYXR0ZW51YXRpb24gKiBkaWZmdXNlKSAqIGxpZ2h0LmludGVuc2l0eTsnLFxyXG4gICAgJyAgICB9JyxcclxuICAgICcnLFxyXG4gICAgJyAgICB2ZWM0IGNvbG9yT3V0cHV0ID0gdmVjNCh1QW1iaWVudExpZ2h0Q29sb3IgKyBmaW5hbENvbG9yLCAxLjApOycsXHJcbiAgICAnICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogdmVjNChjb2xvck91dHB1dC5yZ2IgKiBjb2xvck91dHB1dC5hLCBjb2xvck91dHB1dC5hKTsnLFxyXG4gICAgJycsXHJcbiAgICAnfScsXHJcbiAgICAnJ1xyXG5dLmpvaW4oJ1xcbicpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/shaders/ForwardDiffuse-frag.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-frag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-frag.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = [\n    '#define SHADER_NAME PHASER_TEXTURE_TINT_FS',\n    '',\n    'precision mediump float;',\n    '',\n    'uniform sampler2D uMainSampler;',\n    '',\n    'varying vec2 outTexCoord;',\n    'varying float outTintEffect;',\n    'varying vec4 outTint;',\n    '',\n    'void main()',\n    '{',\n    '    vec4 texture = texture2D(uMainSampler, outTexCoord);',\n    '    vec4 texel = vec4(outTint.rgb * outTint.a, outTint.a);',\n    '    vec4 color = texture;',\n    '',\n    '    if (outTintEffect == 0.0)',\n    '    {',\n    '        //  Multiply texture tint',\n    '        color = texture * texel;',\n    '    }',\n    '    else if (outTintEffect == 1.0)',\n    '    {',\n    '        //  Solid color + texture alpha',\n    '        color.rgb = mix(texture.rgb, outTint.rgb * outTint.a, texture.a);',\n    '        color.a = texture.a * texel.a;',\n    '    }',\n    '    else if (outTintEffect == 2.0)',\n    '    {',\n    '        //  Solid color, no texture',\n    '        color = texel;',\n    '    }',\n    '',\n    '    gl_FragColor = color;',\n    '}',\n    ''\n].join('\\n');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL1RleHR1cmVUaW50LWZyYWcuanM/MGQ2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSw4QkFBOEI7QUFDOUIsaUNBQWlDO0FBQ2pDLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsTUFBTTtBQUNOLDZEQUE2RDtBQUM3RCwrREFBK0Q7QUFDL0QsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxxQ0FBcUM7QUFDckMsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsOEVBQThFO0FBQzlFLDJDQUEyQztBQUMzQyxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSwyQkFBMkI7QUFDM0IsVUFBVTtBQUNWO0FBQ0EsOEJBQThCO0FBQzlCLE1BQU07QUFDTjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvcmVuZGVyZXIvd2ViZ2wvc2hhZGVycy9UZXh0dXJlVGludC1mcmFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBbXG4gICAgJyNkZWZpbmUgU0hBREVSX05BTUUgUEhBU0VSX1RFWFRVUkVfVElOVF9GUycsXG4gICAgJycsXG4gICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG4gICAgJycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVNYWluU2FtcGxlcjsnLFxuICAgICcnLFxuICAgICd2YXJ5aW5nIHZlYzIgb3V0VGV4Q29vcmQ7JyxcbiAgICAndmFyeWluZyBmbG9hdCBvdXRUaW50RWZmZWN0OycsXG4gICAgJ3ZhcnlpbmcgdmVjNCBvdXRUaW50OycsXG4gICAgJycsXG4gICAgJ3ZvaWQgbWFpbigpJyxcbiAgICAneycsXG4gICAgJyAgICB2ZWM0IHRleHR1cmUgPSB0ZXh0dXJlMkQodU1haW5TYW1wbGVyLCBvdXRUZXhDb29yZCk7JyxcbiAgICAnICAgIHZlYzQgdGV4ZWwgPSB2ZWM0KG91dFRpbnQucmdiICogb3V0VGludC5hLCBvdXRUaW50LmEpOycsXG4gICAgJyAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTsnLFxuICAgICcnLFxuICAgICcgICAgaWYgKG91dFRpbnRFZmZlY3QgPT0gMC4wKScsXG4gICAgJyAgICB7JyxcbiAgICAnICAgICAgICAvLyAgTXVsdGlwbHkgdGV4dHVyZSB0aW50JyxcbiAgICAnICAgICAgICBjb2xvciA9IHRleHR1cmUgKiB0ZXhlbDsnLFxuICAgICcgICAgfScsXG4gICAgJyAgICBlbHNlIGlmIChvdXRUaW50RWZmZWN0ID09IDEuMCknLFxuICAgICcgICAgeycsXG4gICAgJyAgICAgICAgLy8gIFNvbGlkIGNvbG9yICsgdGV4dHVyZSBhbHBoYScsXG4gICAgJyAgICAgICAgY29sb3IucmdiID0gbWl4KHRleHR1cmUucmdiLCBvdXRUaW50LnJnYiAqIG91dFRpbnQuYSwgdGV4dHVyZS5hKTsnLFxuICAgICcgICAgICAgIGNvbG9yLmEgPSB0ZXh0dXJlLmEgKiB0ZXhlbC5hOycsXG4gICAgJyAgICB9JyxcbiAgICAnICAgIGVsc2UgaWYgKG91dFRpbnRFZmZlY3QgPT0gMi4wKScsXG4gICAgJyAgICB7JyxcbiAgICAnICAgICAgICAvLyAgU29saWQgY29sb3IsIG5vIHRleHR1cmUnLFxuICAgICcgICAgICAgIGNvbG9yID0gdGV4ZWw7JyxcbiAgICAnICAgIH0nLFxuICAgICcnLFxuICAgICcgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAnfScsXG4gICAgJydcbl0uam9pbignXFxuJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-frag.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-vert.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-vert.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = [\n    '#define SHADER_NAME PHASER_TEXTURE_TINT_VS',\n    '',\n    'precision mediump float;',\n    '',\n    'uniform mat4 uProjectionMatrix;',\n    'uniform mat4 uViewMatrix;',\n    'uniform mat4 uModelMatrix;',\n    '',\n    'attribute vec2 inPosition;',\n    'attribute vec2 inTexCoord;',\n    'attribute float inTintEffect;',\n    'attribute vec4 inTint;',\n    '',\n    'varying vec2 outTexCoord;',\n    'varying float outTintEffect;',\n    'varying vec4 outTint;',\n    '',\n    'void main ()',\n    '{',\n    '    gl_Position = uProjectionMatrix * uViewMatrix * uModelMatrix * vec4(inPosition, 1.0, 1.0);',\n    '',\n    '    outTexCoord = inTexCoord;',\n    '    outTint = inTint;',\n    '    outTintEffect = inTintEffect;',\n    '}',\n    '',\n    ''\n].join('\\n');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9yZW5kZXJlci93ZWJnbC9zaGFkZXJzL1RleHR1cmVUaW50LXZlcnQuanM/MzgxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxvQ0FBb0M7QUFDcEMsOEJBQThCO0FBQzlCLCtCQUErQjtBQUMvQjtBQUNBLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0Isa0NBQWtDO0FBQ2xDLDJCQUEyQjtBQUMzQjtBQUNBLDhCQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxNQUFNO0FBQ04sbUdBQW1HO0FBQ25HO0FBQ0Esa0NBQWtDO0FBQ2xDLDBCQUEwQjtBQUMxQixzQ0FBc0M7QUFDdEMsTUFBTTtBQUNOO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3JlbmRlcmVyL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVRpbnQtdmVydC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gW1xuICAgICcjZGVmaW5lIFNIQURFUl9OQU1FIFBIQVNFUl9URVhUVVJFX1RJTlRfVlMnLFxuICAgICcnLFxuICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuICAgICcnLFxuICAgICd1bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7JyxcbiAgICAndW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4OycsXG4gICAgJ3VuaWZvcm0gbWF0NCB1TW9kZWxNYXRyaXg7JyxcbiAgICAnJyxcbiAgICAnYXR0cmlidXRlIHZlYzIgaW5Qb3NpdGlvbjsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBpblRleENvb3JkOycsXG4gICAgJ2F0dHJpYnV0ZSBmbG9hdCBpblRpbnRFZmZlY3Q7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgaW5UaW50OycsXG4gICAgJycsXG4gICAgJ3ZhcnlpbmcgdmVjMiBvdXRUZXhDb29yZDsnLFxuICAgICd2YXJ5aW5nIGZsb2F0IG91dFRpbnRFZmZlY3Q7JyxcbiAgICAndmFyeWluZyB2ZWM0IG91dFRpbnQ7JyxcbiAgICAnJyxcbiAgICAndm9pZCBtYWluICgpJyxcbiAgICAneycsXG4gICAgJyAgICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdVZpZXdNYXRyaXggKiB1TW9kZWxNYXRyaXggKiB2ZWM0KGluUG9zaXRpb24sIDEuMCwgMS4wKTsnLFxuICAgICcnLFxuICAgICcgICAgb3V0VGV4Q29vcmQgPSBpblRleENvb3JkOycsXG4gICAgJyAgICBvdXRUaW50ID0gaW5UaW50OycsXG4gICAgJyAgICBvdXRUaW50RWZmZWN0ID0gaW5UaW50RWZmZWN0OycsXG4gICAgJ30nLFxuICAgICcnLFxuICAgICcnXG5dLmpvaW4oJ1xcbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/renderer/webgl/shaders/TextureTint-vert.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/ScaleManager.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/scale/ScaleManager.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scale/const/index.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scale/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetInnerHeight = __webpack_require__(/*! ../dom/GetInnerHeight */ \"./node_modules/phaser/src/dom/GetInnerHeight.js\");\r\nvar GetTarget = __webpack_require__(/*! ../dom/GetTarget */ \"./node_modules/phaser/src/dom/GetTarget.js\");\r\nvar GetScreenOrientation = __webpack_require__(/*! ../dom/GetScreenOrientation */ \"./node_modules/phaser/src/dom/GetScreenOrientation.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Size = __webpack_require__(/*! ../structs/Size */ \"./node_modules/phaser/src/structs/Size.js\");\r\nvar SnapFloor = __webpack_require__(/*! ../math/snap/SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Scale Manager handles the scaling, resizing and alignment of the game canvas.\r\n * \r\n * The way scaling is handled is by setting the game canvas to a fixed size, which is defined in the\r\n * game configuration. You also define the parent container in the game config. If no parent is given,\r\n * it will default to using the document body. The Scale Manager will then look at the available space\r\n * within the _parent_ and scale the canvas accordingly. Scaling is handled by setting the canvas CSS\r\n * width and height properties, leaving the width and height of the canvas element itself untouched.\r\n * Scaling is therefore achieved by keeping the core canvas the same size and 'stretching'\r\n * it via its CSS properties. This gives the same result and speed as using the `transform-scale` CSS\r\n * property, without the need for browser prefix handling.\r\n * \r\n * The calculations for the scale are heavily influenced by the bounding parent size, which is the computed\r\n * dimensions of the canvas's parent. The CSS rules of the parent element play an important role in the\r\n * operation of the Scale Manager. For example, if the parent has no defined width or height, then actions\r\n * like auto-centering will fail to achieve the required result. The Scale Manager works in tandem with the\r\n * CSS you set-up on the page hosting your game, rather than taking control of it.\r\n * \r\n * #### Parent and Display canvas containment guidelines:\r\n *\r\n * - Style the Parent element (of the game canvas) to control the Parent size and thus the games size and layout.\r\n *\r\n * - The Parent element's CSS styles should _effectively_ apply maximum (and minimum) bounding behavior.\r\n *\r\n * - The Parent element should _not_ apply a padding as this is not accounted for.\r\n *   If a padding is required apply it to the Parent's parent or apply a margin to the Parent.\r\n *   If you need to add a border, margin or any other CSS around your game container, then use a parent element and\r\n *   apply the CSS to this instead, otherwise you'll be constantly resizing the shape of the game container.\r\n *\r\n * - The Display canvas layout CSS styles (i.e. margins, size) should not be altered / specified as\r\n *   they may be updated by the Scale Manager.\r\n *\r\n * #### Scale Modes\r\n * \r\n * The way the scaling is handled is determined by the `scaleMode` property. The default is `NONE`,\r\n * which prevents Phaser from scaling or touching the canvas, or its parent, at all. In this mode, you are\r\n * responsible for all scaling. The other scaling modes afford you automatic scaling.\r\n * \r\n * If you wish to scale your game so that it always fits into the available space within the parent, you\r\n * should use the scale mode `FIT`. Look at the documentation for other scale modes to see what options are\r\n * available. Here is a basic config showing how to set this scale mode:\r\n * \r\n * ```javascript\r\n * scale: {\r\n *     parent: 'yourgamediv',\r\n *     mode: Phaser.Scale.FIT,\r\n *     width: 800,\r\n *     height: 600\r\n * }\r\n * ```\r\n * \r\n * Place the `scale` config object within your game config.\r\n * \r\n * If you wish for the canvas to be resized directly, so that the canvas itself fills the available space\r\n * (i.e. it isn't scaled, it's resized) then use the `RESIZE` scale mode. This will give you a 1:1 mapping\r\n * of canvas pixels to game size. In this mode CSS isn't used to scale the canvas, it's literally adjusted\r\n * to fill all available space within the parent. You should be extremely careful about the size of the\r\n * canvas you're creating when doing this, as the larger the area, the more work the GPU has to do and it's\r\n * very easy to hit fill-rate limits quickly.\r\n * \r\n * For complex, custom-scaling requirements, you should probably consider using the `RESIZE` scale mode,\r\n * with your own limitations in place re: canvas dimensions and managing the scaling with the game scenes\r\n * yourself. For the vast majority of games, however, the `FIT` mode is likely to be the most used.\r\n * \r\n * Please appreciate that the Scale Manager cannot perform miracles. All it does is scale your game canvas\r\n * as best it can, based on what it can infer from its surrounding area. There are all kinds of environments\r\n * where it's up to you to guide and help the canvas position itself, especially when built into rendering\r\n * frameworks like React and Vue. If your page requires meta tags to prevent user scaling gestures, or such\r\n * like, then it's up to you to ensure they are present in the html.\r\n * \r\n * #### Centering\r\n * \r\n * You can also have the game canvas automatically centered. Again, this relies heavily on the parent being\r\n * properly configured and styled, as the centering offsets are based entirely on the available space\r\n * within the parent element. Centering is disabled by default, or can be applied horizontally, vertically,\r\n * or both. Here's an example:\r\n * \r\n * ```javascript\r\n * scale: {\r\n *     parent: 'yourgamediv',\r\n *     autoCenter: Phaser.Scale.CENTER_BOTH,\r\n *     width: 800,\r\n *     height: 600\r\n * }\r\n * ```\r\n * \r\n * #### Fullscreen API\r\n * \r\n * If the browser supports it, you can send your game into fullscreen mode. In this mode, the game will fill\r\n * the entire display, removing all browser UI and anything else present on the screen. It will remain in this\r\n * mode until your game either disables it, or until the user tabs out or presses ESCape if on desktop. It's a\r\n * great way to achieve a desktop-game like experience from the browser, but it does require a modern browser\r\n * to handle it. Some mobile browsers also support this.\r\n *\r\n * @class ScaleManager\r\n * @memberof Phaser.Scale\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance.\r\n */\r\nvar ScaleManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function ScaleManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the Phaser.Game instance.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#game\r\n         * @type {Phaser.Game}\r\n         * @readonly\r\n         * @since 3.15.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * A reference to the HTML Canvas Element that Phaser uses to render the game.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.16.0\r\n         */\r\n        this.canvas;\r\n\r\n        /**\r\n         * The DOM bounds of the canvas element.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#canvasBounds\r\n         * @type {Phaser.Geom.Rectangle}\r\n         * @since 3.16.0\r\n         */\r\n        this.canvasBounds = new Rectangle();\r\n\r\n        /**\r\n         * The parent object of the Canvas. Often a div, or the browser window, or nothing in non-browser environments.\r\n         * \r\n         * This is set in the Game Config as the `parent` property. If undefined (or just not present), it will default\r\n         * to use the document body. If specifically set to `null` Phaser will ignore all parent operations.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#parent\r\n         * @type {?any}\r\n         * @since 3.16.0\r\n         */\r\n        this.parent = null;\r\n\r\n        /**\r\n         * Is the parent element the browser window?\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#parentIsWindow\r\n         * @type {boolean}\r\n         * @since 3.16.0\r\n         */\r\n        this.parentIsWindow = false;\r\n\r\n        /**\r\n         * The Parent Size component.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#parentSize\r\n         * @type {Phaser.Structs.Size}\r\n         * @since 3.16.0\r\n         */\r\n        this.parentSize = new Size();\r\n\r\n        /**\r\n         * The Game Size component.\r\n         * \r\n         * The un-modified game size, as requested in the game config (the raw width / height),\r\n         * as used for world bounds, cameras, etc\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#gameSize\r\n         * @type {Phaser.Structs.Size}\r\n         * @since 3.16.0\r\n         */\r\n        this.gameSize = new Size();\r\n\r\n        /**\r\n         * The Base Size component.\r\n         * \r\n         * The modified game size, which is the gameSize * resolution, used to set the canvas width and height\r\n         * (but not the CSS style)\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#baseSize\r\n         * @type {Phaser.Structs.Size}\r\n         * @since 3.16.0\r\n         */\r\n        this.baseSize = new Size();\r\n\r\n        /**\r\n         * The Display Size component.\r\n         * \r\n         * The size used for the canvas style, factoring in the scale mode, parent and other values.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#displaySize\r\n         * @type {Phaser.Structs.Size}\r\n         * @since 3.16.0\r\n         */\r\n        this.displaySize = new Size();\r\n\r\n        /**\r\n         * The game scale mode.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#scaleMode\r\n         * @type {Phaser.Scale.ScaleModeType}\r\n         * @since 3.16.0\r\n         */\r\n        this.scaleMode = CONST.SCALE_MODE.NONE;\r\n\r\n        /**\r\n         * The canvas resolution.\r\n         * \r\n         * This is hard-coded to a value of 1 in the 3.16 release of Phaser and will be enabled at a later date.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#resolution\r\n         * @type {number}\r\n         * @since 3.16.0\r\n         */\r\n        this.resolution = 1;\r\n\r\n        /**\r\n         * The game zoom factor.\r\n         * \r\n         * This value allows you to multiply your games base size by the given zoom factor.\r\n         * This is then used when calculating the display size, even in `NONE` situations.\r\n         * If you don't want Phaser to touch the canvas style at all, this value should be 1.\r\n         * \r\n         * Can also be set to `MAX_ZOOM` in which case the zoom value will be derived based\r\n         * on the game size and available space within the parent.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#zoom\r\n         * @type {number}\r\n         * @since 3.16.0\r\n         */\r\n        this.zoom = 1;\r\n\r\n        /**\r\n         * Internal flag set when the game zoom factor is modified.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#_resetZoom\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this._resetZoom = false;\r\n\r\n        /**\r\n         * The scale factor between the baseSize and the canvasBounds.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#displayScale\r\n         * @type {Phaser.Math.Vector2}\r\n         * @since 3.16.0\r\n         */\r\n        this.displayScale = new Vector2(1, 1);\r\n\r\n        /**\r\n         * If set, the canvas sizes will be automatically passed through Math.floor.\r\n         * This results in rounded pixel display values, which is important for performance on legacy\r\n         * and low powered devices, but at the cost of not achieving a 'perfect' fit in some browser windows.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#autoRound\r\n         * @type {boolean}\r\n         * @since 3.16.0\r\n         */\r\n        this.autoRound = false;\r\n\r\n        /**\r\n         * Automatically center the canvas within the parent? The different centering modes are:\r\n         * \r\n         * 1. No centering.\r\n         * 2. Center both horizontally and vertically.\r\n         * 3. Center horizontally.\r\n         * 4. Center vertically.\r\n         * \r\n         * Please be aware that in order to center the game canvas, you must have specified a parent\r\n         * that has a size set, or the canvas parent is the document.body.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#autoCenter\r\n         * @type {Phaser.Scale.CenterType}\r\n         * @since 3.16.0\r\n         */\r\n        this.autoCenter = CONST.CENTER.NO_CENTER;\r\n\r\n        /**\r\n         * The current device orientation.\r\n         * \r\n         * Orientation events are dispatched via the Device Orientation API, typically only on mobile browsers.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#orientation\r\n         * @type {Phaser.Scale.OrientationType}\r\n         * @since 3.16.0\r\n         */\r\n        this.orientation = CONST.ORIENTATION.LANDSCAPE;\r\n\r\n        /**\r\n         * A reference to the Device.Fullscreen object.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#fullscreen\r\n         * @type {Phaser.Device.Fullscreen}\r\n         * @since 3.16.0\r\n         */\r\n        this.fullscreen;\r\n\r\n        /**\r\n         * The DOM Element which is sent into fullscreen mode.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#fullscreenTarget\r\n         * @type {?any}\r\n         * @since 3.16.0\r\n         */\r\n        this.fullscreenTarget = null;\r\n\r\n        /**\r\n         * Did Phaser create the fullscreen target div, or was it provided in the game config?\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#_createdFullscreenTarget\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._createdFullscreenTarget = false;\r\n\r\n        /**\r\n         * Internal var that keeps track of the user, or the browser, requesting fullscreen changes.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#_requestedFullscreenChange\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.16.2\r\n         */\r\n        this._requestedFullscreenChange = false;\r\n\r\n        /**\r\n         * The dirty state of the Scale Manager.\r\n         * Set if there is a change between the parent size and the current size.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#dirty\r\n         * @type {boolean}\r\n         * @since 3.16.0\r\n         */\r\n        this.dirty = false;\r\n\r\n        /**\r\n         * How many milliseconds should elapse before checking if the browser size has changed?\r\n         * \r\n         * Most modern browsers dispatch a 'resize' event, which the Scale Manager will listen for.\r\n         * However, older browsers fail to do this, or do it consistently, so we fall back to a\r\n         * more traditional 'size check' based on a time interval. You can control how often it is\r\n         * checked here.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#resizeInterval\r\n         * @type {integer}\r\n         * @since 3.16.0\r\n         */\r\n        this.resizeInterval = 500;\r\n\r\n        /**\r\n         * Internal size interval tracker.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#_lastCheck\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._lastCheck = 0;\r\n\r\n        /**\r\n         * Internal flag to check orientation state.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#_checkOrientation\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._checkOrientation = false;\r\n\r\n        /**\r\n         * Internal object containing our defined event listeners.\r\n         *\r\n         * @name Phaser.Scale.ScaleManager#listeners\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this.listeners = {\r\n\r\n            orientationChange: NOOP,\r\n            windowResize: NOOP,\r\n            fullScreenChange: NOOP,\r\n            fullScreenError: NOOP\r\n\r\n        };\r\n    },\r\n\r\n    /**\r\n     * Called _before_ the canvas object is created and added to the DOM.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#preBoot\r\n     * @protected\r\n     * @listens Phaser.Core.Events#BOOT\r\n     * @since 3.16.0\r\n     */\r\n    preBoot: function ()\r\n    {\r\n        //  Parse the config to get the scaling values we need\r\n        this.parseConfig(this.game.config);\r\n\r\n        this.game.events.once('boot', this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Boot handler is called by Phaser.Game when it first starts up.\r\n     * The renderer is available by now and the canvas has been added to the DOM.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#boot\r\n     * @protected\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        var game = this.game;\r\n\r\n        this.canvas = game.canvas;\r\n\r\n        this.fullscreen = game.device.fullscreen;\r\n\r\n        if (this.scaleMode !== CONST.SCALE_MODE.RESIZE)\r\n        {\r\n            this.displaySize.setAspectMode(this.scaleMode);\r\n        }\r\n\r\n        if (this.scaleMode === CONST.SCALE_MODE.NONE)\r\n        {\r\n            this.resize(this.width, this.height);\r\n        }\r\n        else\r\n        {\r\n            this.getParentBounds();\r\n\r\n            //  Only set the parent bounds if the parent has an actual size\r\n            if (this.parentSize.width > 0 && this.parentSize.height > 0)\r\n            {\r\n                this.displaySize.setParent(this.parentSize);\r\n            }\r\n\r\n            this.refresh();\r\n        }\r\n\r\n        game.events.on(GameEvents.PRE_STEP, this.step, this);\r\n\r\n        this.startListeners();\r\n    },\r\n\r\n    /**\r\n     * Parses the game configuration to set-up the scale defaults.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#parseConfig\r\n     * @protected\r\n     * @since 3.16.0\r\n     * \r\n     * @param {Phaser.Types.Core.GameConfig} config - The Game configuration object.\r\n     */\r\n    parseConfig: function (config)\r\n    {\r\n        //  Get the parent element, if any\r\n        this.getParent(config);\r\n        \r\n        //  Get the size of the parent element\r\n        //  This can often set a height of zero (especially for un-styled divs)\r\n        this.getParentBounds();\r\n\r\n        var width = config.width;\r\n        var height = config.height;\r\n        var scaleMode = config.scaleMode;\r\n        var resolution = config.resolution;\r\n        var zoom = config.zoom;\r\n        var autoRound = config.autoRound;\r\n\r\n        //  If width = '100%', or similar value\r\n        if (typeof width === 'string')\r\n        {\r\n            //  If we have a parent with a height, we'll work it out from that\r\n            var parentWidth = this.parentSize.width;\r\n\r\n            if (parentWidth === 0)\r\n            {\r\n                parentWidth = window.innerWidth;\r\n            }\r\n\r\n            var parentScaleX = parseInt(width, 10) / 100;\r\n\r\n            width = Math.floor(parentWidth * parentScaleX);\r\n        }\r\n\r\n        //  If height = '100%', or similar value\r\n        if (typeof height === 'string')\r\n        {\r\n            //  If we have a parent with a height, we'll work it out from that\r\n            var parentHeight = this.parentSize.height;\r\n\r\n            if (parentHeight === 0)\r\n            {\r\n                parentHeight = window.innerHeight;\r\n            }\r\n\r\n            var parentScaleY = parseInt(height, 10) / 100;\r\n\r\n            height = Math.floor(parentHeight * parentScaleY);\r\n        }\r\n\r\n        //  This is fixed at 1 on purpose.\r\n        //  Changing it will break all user input.\r\n        //  Wait for another release to solve this issue.\r\n        this.resolution = 1;\r\n\r\n        this.scaleMode = scaleMode;\r\n\r\n        this.autoRound = autoRound;\r\n\r\n        this.autoCenter = config.autoCenter;\r\n\r\n        this.resizeInterval = config.resizeInterval;\r\n\r\n        if (autoRound)\r\n        {\r\n            width = Math.floor(width);\r\n            height = Math.floor(height);\r\n        }\r\n\r\n        //  The un-modified game size, as requested in the game config (the raw width / height) as used for world bounds, etc\r\n        this.gameSize.setSize(width, height);\r\n\r\n        if (zoom === CONST.ZOOM.MAX_ZOOM)\r\n        {\r\n            zoom = this.getMaxZoom();\r\n        }\r\n\r\n        this.zoom = zoom;\r\n\r\n        if (zoom !== 1)\r\n        {\r\n            this._resetZoom = true;\r\n        }\r\n\r\n        //  The modified game size, which is the w/h * resolution\r\n        this.baseSize.setSize(width * resolution, height * resolution);\r\n\r\n        if (autoRound)\r\n        {\r\n            this.baseSize.width = Math.floor(this.baseSize.width);\r\n            this.baseSize.height = Math.floor(this.baseSize.height);\r\n        }\r\n\r\n        if (config.minWidth > 0)\r\n        {\r\n            this.displaySize.setMin(config.minWidth * zoom, config.minHeight * zoom);\r\n        }\r\n\r\n        if (config.maxWidth > 0)\r\n        {\r\n            this.displaySize.setMax(config.maxWidth * zoom, config.maxHeight * zoom);\r\n        }\r\n\r\n        //  The size used for the canvas style, factoring in the scale mode and parent and zoom value\r\n        //  We just use the w/h here as this is what sets the aspect ratio (which doesn't then change)\r\n        this.displaySize.setSize(width, height);\r\n\r\n        this.orientation = GetScreenOrientation(width, height);\r\n    },\r\n\r\n    /**\r\n     * Determines the parent element of the game canvas, if any, based on the game configuration.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#getParent\r\n     * @since 3.16.0\r\n     * \r\n     * @param {Phaser.Types.Core.GameConfig} config - The Game configuration object.\r\n     */\r\n    getParent: function (config)\r\n    {\r\n        var parent = config.parent;\r\n\r\n        if (parent === null)\r\n        {\r\n            //  User is responsible for managing the parent\r\n            return;\r\n        }\r\n\r\n        this.parent = GetTarget(parent);\r\n        this.parentIsWindow = (this.parent === document.body);\r\n\r\n        if (config.expandParent && config.scaleMode !== CONST.SCALE_MODE.NONE)\r\n        {\r\n            var DOMRect = this.parent.getBoundingClientRect();\r\n\r\n            if (this.parentIsWindow || DOMRect.height === 0)\r\n            {\r\n                document.documentElement.style.height = '100%';\r\n                document.body.style.height = '100%';\r\n\r\n                DOMRect = this.parent.getBoundingClientRect();\r\n\r\n                //  The parent STILL has no height, clearly no CSS\r\n                //  has been set on it even though we fixed the body :(\r\n                if (!this.parentIsWindow && DOMRect.height === 0)\r\n                {\r\n                    this.parent.style.overflow = 'hidden';\r\n                    this.parent.style.width = '100%';\r\n                    this.parent.style.height = '100%';\r\n                }\r\n            }\r\n        }\r\n\r\n        //  And now get the fullscreenTarget\r\n        if (config.fullscreenTarget && !this.fullscreenTarget)\r\n        {\r\n            this.fullscreenTarget = GetTarget(config.fullscreenTarget);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calculates the size of the parent bounds and updates the `parentSize` component, if the canvas has a dom parent.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#getParentBounds\r\n     * @since 3.16.0\r\n     * \r\n     * @return {boolean} `true` if the parent bounds have changed size, otherwise `false`.\r\n     */\r\n    getParentBounds: function ()\r\n    {\r\n        if (!this.parent)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var parentSize = this.parentSize;\r\n\r\n        // Ref. http://msdn.microsoft.com/en-us/library/hh781509(v=vs.85).aspx for getBoundingClientRect\r\n\r\n        var DOMRect = this.parent.getBoundingClientRect();\r\n\r\n        if (this.parentIsWindow && this.game.device.os.iOS)\r\n        {\r\n            DOMRect.height = GetInnerHeight(true);\r\n        }\r\n\r\n        var resolution = this.resolution;\r\n        var newWidth = DOMRect.width * resolution;\r\n        var newHeight = DOMRect.height * resolution;\r\n\r\n        if (parentSize.width !== newWidth || parentSize.height !== newHeight)\r\n        {\r\n            parentSize.setSize(newWidth, newHeight);\r\n\r\n            return true;\r\n        }\r\n        else\r\n        {\r\n            return false;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Attempts to lock the orientation of the web browser using the Screen Orientation API.\r\n     * \r\n     * This API is only available on modern mobile browsers.\r\n     * See https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation for details.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#lockOrientation\r\n     * @since 3.16.0\r\n     * \r\n     * @param {string} orientation - The orientation you'd like to lock the browser in. Should be an API string such as 'landscape', 'landscape-primary', 'portrait', etc.\r\n     * \r\n     * @return {boolean} `true` if the orientation was successfully locked, otherwise `false`.\r\n     */\r\n    lockOrientation: function (orientation)\r\n    {\r\n        var lock = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation;\r\n\r\n        if (lock)\r\n        {\r\n            return lock(orientation);\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * This method will set the size of the Parent Size component, which is used in scaling\r\n     * and centering calculations. You only need to call this method if you have explicitly\r\n     * disabled the use of a parent in your game config, but still wish to take advantage of\r\n     * other Scale Manager features.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#setParentSize\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {number} width - The new width of the parent.\r\n     * @param {number} height - The new height of the parent.\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    setParentSize: function (width, height)\r\n    {\r\n        this.parentSize.setSize(width, height);\r\n\r\n        return this.refresh();\r\n    },\r\n\r\n    /**\r\n     * This method will set a new size for your game.\r\n     * \r\n     * It should only be used if you're looking to change the base size of your game and are using\r\n     * one of the Scale Manager scaling modes, i.e. `FIT`. If you're using `NONE` and wish to\r\n     * change the game and canvas size directly, then please use the `resize` method instead.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#setGameSize\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {number} width - The new width of the game.\r\n     * @param {number} height - The new height of the game.\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    setGameSize: function (width, height)\r\n    {\r\n        var autoRound = this.autoRound;\r\n        var resolution = this.resolution;\r\n\r\n        if (autoRound)\r\n        {\r\n            width = Math.floor(width);\r\n            height = Math.floor(height);\r\n        }\r\n\r\n        var previousWidth = this.width;\r\n        var previousHeight = this.height;\r\n\r\n        //  The un-modified game size, as requested in the game config (the raw width / height) as used for world bounds, etc\r\n        this.gameSize.resize(width, height);\r\n\r\n        //  The modified game size, which is the w/h * resolution\r\n        this.baseSize.resize(width * resolution, height * resolution);\r\n\r\n        if (autoRound)\r\n        {\r\n            this.baseSize.width = Math.floor(this.baseSize.width);\r\n            this.baseSize.height = Math.floor(this.baseSize.height);\r\n        }\r\n\r\n        //  The size used for the canvas style, factoring in the scale mode and parent and zoom value\r\n        //  We just use the w/h here as this is what sets the aspect ratio (which doesn't then change)\r\n        this.displaySize.setSize(width, height);\r\n\r\n        this.canvas.width = this.baseSize.width;\r\n        this.canvas.height = this.baseSize.height;\r\n\r\n        return this.refresh(previousWidth, previousHeight);\r\n    },\r\n\r\n    /**\r\n     * Call this to modify the size of the Phaser canvas element directly.\r\n     * You should only use this if you are using the `NONE` scale mode,\r\n     * it will update all internal components completely.\r\n     * \r\n     * If all you want to do is change the size of the parent, see the `setParentSize` method.\r\n     * \r\n     * If all you want is to change the base size of the game, but still have the Scale Manager\r\n     * manage all the scaling (i.e. you're **not** using `NONE`), then see the `setGameSize` method.\r\n     * \r\n     * This method will set the `gameSize`, `baseSize` and `displaySize` components to the given\r\n     * dimensions. It will then resize the canvas width and height to the values given, by\r\n     * directly setting the properties. Finally, if you have set the Scale Manager zoom value\r\n     * to anything other than 1 (the default), it will set the canvas CSS width and height to\r\n     * be the given size multiplied by the zoom factor (the canvas pixel size remains untouched).\r\n     * \r\n     * If you have enabled `autoCenter`, it is then passed to the `updateCenter` method and\r\n     * the margins are set, allowing the canvas to be centered based on its parent element\r\n     * alone. Finally, the `displayScale` is adjusted and the RESIZE event dispatched.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#resize\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {number} width - The new width of the game.\r\n     * @param {number} height - The new height of the game.\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    resize: function (width, height)\r\n    {\r\n        var zoom = this.zoom;\r\n        var resolution = this.resolution;\r\n        var autoRound = this.autoRound;\r\n\r\n        if (autoRound)\r\n        {\r\n            width = Math.floor(width);\r\n            height = Math.floor(height);\r\n        }\r\n\r\n        var previousWidth = this.width;\r\n        var previousHeight = this.height;\r\n\r\n        //  The un-modified game size, as requested in the game config (the raw width / height) as used for world bounds, etc\r\n        this.gameSize.resize(width, height);\r\n\r\n        //  The modified game size, which is the w/h * resolution\r\n        this.baseSize.resize(width * resolution, height * resolution);\r\n\r\n        if (autoRound)\r\n        {\r\n            this.baseSize.width = Math.floor(this.baseSize.width);\r\n            this.baseSize.height = Math.floor(this.baseSize.height);\r\n        }\r\n\r\n        //  The size used for the canvas style, factoring in the scale mode and parent and zoom value\r\n        //  We just use the w/h here as this is what sets the aspect ratio (which doesn't then change)\r\n        this.displaySize.setSize((width * zoom) * resolution, (height * zoom) * resolution);\r\n\r\n        this.canvas.width = this.baseSize.width;\r\n        this.canvas.height = this.baseSize.height;\r\n\r\n        var style = this.canvas.style;\r\n\r\n        var styleWidth = width * zoom;\r\n        var styleHeight = height * zoom;\r\n\r\n        if (autoRound)\r\n        {\r\n            styleWidth = Math.floor(styleWidth);\r\n            styleHeight = Math.floor(styleHeight);\r\n        }\r\n\r\n        if (styleWidth !== width || styleHeight !== height)\r\n        {\r\n            style.width = styleWidth + 'px';\r\n            style.height = styleHeight + 'px';\r\n        }\r\n\r\n        return this.refresh(previousWidth, previousHeight);\r\n    },\r\n\r\n    /**\r\n     * Sets the zoom value of the Scale Manager.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#setZoom\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {integer} value - The new zoom value of the game.\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    setZoom: function (value)\r\n    {\r\n        this.zoom = value;\r\n        this._resetZoom = true;\r\n\r\n        return this.refresh();\r\n    },\r\n\r\n    /**\r\n     * Sets the zoom to be the maximum possible based on the _current_ parent size.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#setMaxZoom\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    setMaxZoom: function ()\r\n    {\r\n        this.zoom = this.getMaxZoom();\r\n        this._resetZoom = true;\r\n\r\n        return this.refresh();\r\n    },\r\n\r\n    /**\r\n     * Refreshes the internal scale values, bounds sizes and orientation checks.\r\n     * \r\n     * Once finished, dispatches the resize event.\r\n     * \r\n     * This is called automatically by the Scale Manager when the browser window size changes,\r\n     * as long as it is using a Scale Mode other than 'NONE'.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#refresh\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {number} [previousWidth] - The previous width of the game. Only set if the gameSize has changed.\r\n     * @param {number} [previousHeight] - The previous height of the game. Only set if the gameSize has changed.\r\n     * \r\n     * @return {this} The Scale Manager instance.\r\n     */\r\n    refresh: function (previousWidth, previousHeight)\r\n    {\r\n        if (previousWidth === undefined) { previousWidth = this.width; }\r\n        if (previousHeight === undefined) { previousHeight = this.height; }\r\n\r\n        this.updateScale();\r\n        this.updateBounds();\r\n        this.updateOrientation();\r\n\r\n        this.displayScale.set(this.baseSize.width / this.canvasBounds.width, this.baseSize.height / this.canvasBounds.height);\r\n\r\n        var domContainer = this.game.domContainer;\r\n\r\n        if (domContainer)\r\n        {\r\n            this.baseSize.setCSS(domContainer);\r\n\r\n            var canvasStyle = this.canvas.style;\r\n            var domStyle = domContainer.style;\r\n\r\n            domStyle.transform = 'scale(' + this.displaySize.width / this.baseSize.width + ',' + this.displaySize.height / this.baseSize.height + ')';\r\n\r\n            domStyle.marginLeft = canvasStyle.marginLeft;\r\n            domStyle.marginTop = canvasStyle.marginTop;\r\n        }\r\n\r\n        this.emit(Events.RESIZE, this.gameSize, this.baseSize, this.displaySize, this.resolution, previousWidth, previousHeight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that checks the current screen orientation, only if the internal check flag is set.\r\n     * \r\n     * If the orientation has changed it updates the orientation property and then dispatches the orientation change event.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#updateOrientation\r\n     * @fires Phaser.Scale.Events#ORIENTATION_CHANGE\r\n     * @since 3.16.0\r\n     */\r\n    updateOrientation: function ()\r\n    {\r\n        if (this._checkOrientation)\r\n        {\r\n            this._checkOrientation = false;\r\n\r\n            var newOrientation = GetScreenOrientation(this.width, this.height);\r\n\r\n            if (newOrientation !== this.orientation)\r\n            {\r\n                this.orientation = newOrientation;\r\n    \r\n                this.emit(Events.ORIENTATION_CHANGE, newOrientation);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that manages updating the size components based on the scale mode.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#updateScale\r\n     * @since 3.16.0\r\n     */\r\n    updateScale: function ()\r\n    {\r\n        var style = this.canvas.style;\r\n\r\n        var width = this.gameSize.width;\r\n        var height = this.gameSize.height;\r\n\r\n        var styleWidth;\r\n        var styleHeight;\r\n\r\n        var zoom = this.zoom;\r\n        var autoRound = this.autoRound;\r\n        var resolution = 1;\r\n\r\n        if (this.scaleMode === CONST.SCALE_MODE.NONE)\r\n        {\r\n            //  No scale\r\n            this.displaySize.setSize((width * zoom) * resolution, (height * zoom) * resolution);\r\n\r\n            styleWidth = this.displaySize.width / resolution;\r\n            styleHeight = this.displaySize.height / resolution;\r\n\r\n            if (autoRound)\r\n            {\r\n                styleWidth = Math.floor(styleWidth);\r\n                styleHeight = Math.floor(styleHeight);\r\n            }\r\n\r\n            if (this._resetZoom)\r\n            {\r\n                style.width = styleWidth + 'px';\r\n                style.height = styleHeight + 'px';\r\n\r\n                this._resetZoom = false;\r\n            }\r\n        }\r\n        else if (this.scaleMode === CONST.SCALE_MODE.RESIZE)\r\n        {\r\n            //  Resize to match parent\r\n\r\n            //  This will constrain using min/max\r\n            this.displaySize.setSize(this.parentSize.width, this.parentSize.height);\r\n\r\n            this.gameSize.setSize(this.displaySize.width, this.displaySize.height);\r\n\r\n            this.baseSize.setSize(this.displaySize.width * resolution, this.displaySize.height * resolution);\r\n\r\n            styleWidth = this.displaySize.width / resolution;\r\n            styleHeight = this.displaySize.height / resolution;\r\n\r\n            if (autoRound)\r\n            {\r\n                styleWidth = Math.floor(styleWidth);\r\n                styleHeight = Math.floor(styleHeight);\r\n            }\r\n\r\n            this.canvas.width = styleWidth;\r\n            this.canvas.height = styleHeight;\r\n        }\r\n        else\r\n        {\r\n            //  All other scale modes\r\n            this.displaySize.setSize(this.parentSize.width, this.parentSize.height);\r\n\r\n            styleWidth = this.displaySize.width / resolution;\r\n            styleHeight = this.displaySize.height / resolution;\r\n\r\n            if (autoRound)\r\n            {\r\n                styleWidth = Math.floor(styleWidth);\r\n                styleHeight = Math.floor(styleHeight);\r\n            }\r\n\r\n            style.width = styleWidth + 'px';\r\n            style.height = styleHeight + 'px';\r\n        }\r\n\r\n        //  Update the parentSize in case the canvas / style change modified it\r\n        this.getParentBounds();\r\n\r\n        //  Finally, update the centering\r\n        this.updateCenter();\r\n    },\r\n\r\n    /**\r\n     * Calculates and returns the largest possible zoom factor, based on the current\r\n     * parent and game sizes. If the parent has no dimensions (i.e. an unstyled div),\r\n     * or is smaller than the un-zoomed game, then this will return a value of 1 (no zoom)\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#getMaxZoom\r\n     * @since 3.16.0\r\n     * \r\n     * @return {integer} The maximum possible zoom factor. At a minimum this value is always at least 1.\r\n     */\r\n    getMaxZoom: function ()\r\n    {\r\n        var zoomH = SnapFloor(this.parentSize.width, this.gameSize.width, 0, true);\r\n        var zoomV = SnapFloor(this.parentSize.height, this.gameSize.height, 0, true);\r\n    \r\n        return Math.max(Math.min(zoomH, zoomV), 1);\r\n    },\r\n\r\n    /**\r\n     * Calculates and updates the canvas CSS style in order to center it within the\r\n     * bounds of its parent. If you have explicitly set parent to be `null` in your\r\n     * game config then this method will likely give incorrect results unless you have called the\r\n     * `setParentSize` method first.\r\n     * \r\n     * It works by modifying the canvas CSS `marginLeft` and `marginTop` properties.\r\n     * \r\n     * If they have already been set by your own style sheet, or code, this will overwrite them.\r\n     * \r\n     * To prevent the Scale Manager from centering the canvas, either do not set the\r\n     * `autoCenter` property in your game config, or make sure it is set to `NO_CENTER`.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#updateCenter\r\n     * @since 3.16.0\r\n     */\r\n    updateCenter: function ()\r\n    {\r\n        var autoCenter = this.autoCenter;\r\n\r\n        if (autoCenter === CONST.CENTER.NO_CENTER)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var canvas = this.canvas;\r\n\r\n        var style = canvas.style;\r\n\r\n        var bounds = canvas.getBoundingClientRect();\r\n\r\n        // var width = parseInt(canvas.style.width, 10) || canvas.width;\r\n        // var height = parseInt(canvas.style.height, 10) || canvas.height;\r\n\r\n        var width = bounds.width;\r\n        var height = bounds.height;\r\n\r\n        var offsetX = Math.floor((this.parentSize.width - width) / 2);\r\n        var offsetY = Math.floor((this.parentSize.height - height) / 2);\r\n\r\n        if (autoCenter === CONST.CENTER.CENTER_HORIZONTALLY)\r\n        {\r\n            offsetY = 0;\r\n        }\r\n        else if (autoCenter === CONST.CENTER.CENTER_VERTICALLY)\r\n        {\r\n            offsetX = 0;\r\n        }\r\n\r\n        style.marginLeft = offsetX + 'px';\r\n        style.marginTop = offsetY + 'px';\r\n    },\r\n\r\n    /**\r\n     * Updates the `canvasBounds` rectangle to match the bounding client rectangle of the\r\n     * canvas element being used to track input events.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#updateBounds\r\n     * @since 3.16.0\r\n     */\r\n    updateBounds: function ()\r\n    {\r\n        var bounds = this.canvasBounds;\r\n        var clientRect = this.canvas.getBoundingClientRect();\r\n\r\n        bounds.x = clientRect.left + (window.pageXOffset || 0) - (document.documentElement.clientLeft || 0);\r\n        bounds.y = clientRect.top + (window.pageYOffset || 0) - (document.documentElement.clientTop || 0);\r\n        bounds.width = clientRect.width;\r\n        bounds.height = clientRect.height;\r\n    },\r\n\r\n    /**\r\n     * Transforms the pageX value into the scaled coordinate space of the Scale Manager.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#transformX\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} pageX - The DOM pageX value.\r\n     *\r\n     * @return {number} The translated value.\r\n     */\r\n    transformX: function (pageX)\r\n    {\r\n        return (pageX - this.canvasBounds.left) * this.displayScale.x;\r\n    },\r\n\r\n    /**\r\n     * Transforms the pageY value into the scaled coordinate space of the Scale Manager.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#transformY\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} pageY - The DOM pageY value.\r\n     *\r\n     * @return {number} The translated value.\r\n     */\r\n    transformY: function (pageY)\r\n    {\r\n        return (pageY - this.canvasBounds.top) * this.displayScale.y;\r\n    },\r\n\r\n    /**\r\n     * Sends a request to the browser to ask it to go in to full screen mode, using the {@link https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API Fullscreen API}.\r\n     * \r\n     * If the browser does not support this, a `FULLSCREEN_UNSUPPORTED` event will be emitted.\r\n     * \r\n     * This method _must_ be called from a user-input gesture, such as `pointerup`. You cannot launch\r\n     * games fullscreen without this, as most browsers block it. Games within an iframe will also be blocked\r\n     * from fullscreen unless the iframe has the `allowfullscreen` attribute.\r\n     * \r\n     * On touch devices, such as Android and iOS Safari, you should always use `pointerup` and NOT `pointerdown`,\r\n     * otherwise the request will fail unless the document in which your game is embedded has already received\r\n     * some form of touch input, which you cannot guarantee. Activating fullscreen via `pointerup` circumvents\r\n     * this issue.\r\n     * \r\n     * Performing an action that navigates to another page, or opens another tab, will automatically cancel\r\n     * fullscreen mode, as will the user pressing the ESC key. To cancel fullscreen mode directly from your game,\r\n     * i.e. by clicking an icon, call the `stopFullscreen` method.\r\n     * \r\n     * A browser can only send one DOM element into fullscreen. You can control which element this is by\r\n     * setting the `fullscreenTarget` property in your game config, or changing the property in the Scale Manager.\r\n     * Note that the game canvas _must_ be a child of the target. If you do not give a target, Phaser will\r\n     * automatically create a blank `<div>` element and move the canvas into it, before going fullscreen.\r\n     * When it leaves fullscreen, the div will be removed.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#startFullscreen\r\n     * @fires Phaser.Scale.Events#ENTER_FULLSCREEN\r\n     * @fires Phaser.Scale.Events#FULLSCREEN_FAILED\r\n     * @fires Phaser.Scale.Events#FULLSCREEN_UNSUPPORTED\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {object} [fullscreenOptions] - The FullscreenOptions dictionary is used to provide configuration options when entering full screen.\r\n     */\r\n    startFullscreen: function (fullscreenOptions)\r\n    {\r\n        if (fullscreenOptions === undefined) { fullscreenOptions = { navigationUI: 'hide' }; }\r\n\r\n        var fullscreen = this.fullscreen;\r\n\r\n        if (!fullscreen.available)\r\n        {\r\n            this.emit(Events.FULLSCREEN_UNSUPPORTED);\r\n\r\n            return;\r\n        }\r\n\r\n        if (!fullscreen.active)\r\n        {\r\n            var fsTarget = this.getFullscreenTarget();\r\n\r\n            this._requestedFullscreenChange = true;\r\n\r\n            var fsPromise;\r\n            \r\n            if (fullscreen.keyboard)\r\n            {\r\n                fsPromise = fsTarget[fullscreen.request](Element.ALLOW_KEYBOARD_INPUT);\r\n            }\r\n            else\r\n            {\r\n                fsPromise = fsTarget[fullscreen.request](fullscreenOptions);\r\n            }\r\n\r\n            if (fsPromise)\r\n            {\r\n                fsPromise.then(this.fullscreenSuccessHandler.bind(this)).catch(this.fullscreenErrorHandler.bind(this));\r\n            }\r\n            else if (fullscreen.active)\r\n            {\r\n                this.fullscreenSuccessHandler();\r\n            }\r\n            else\r\n            {\r\n                this.fullscreenErrorHandler();\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The browser has successfully entered fullscreen mode.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#fullscreenSuccessHandler\r\n     * @private\r\n     * @fires Phaser.Scale.Events#ENTER_FULLSCREEN\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.17.0\r\n     */\r\n    fullscreenSuccessHandler: function ()\r\n    {\r\n        this.getParentBounds();\r\n\r\n        this.refresh();\r\n\r\n        this.emit(Events.ENTER_FULLSCREEN);\r\n    },\r\n\r\n    /**\r\n     * The browser failed to enter fullscreen mode.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#fullscreenErrorHandler\r\n     * @private\r\n     * @fires Phaser.Scale.Events#FULLSCREEN_FAILED\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.17.0\r\n     * \r\n     * @param {any} error - The DOM error event.\r\n     */\r\n    fullscreenErrorHandler: function (error)\r\n    {\r\n        this.removeFullscreenTarget();\r\n\r\n        this.emit(Events.FULLSCREEN_FAILED, error);\r\n    },\r\n\r\n    /**\r\n     * An internal method that gets the target element that is used when entering fullscreen mode.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#getFullscreenTarget\r\n     * @since 3.16.0\r\n     * \r\n     * @return {object} The fullscreen target element.\r\n     */\r\n    getFullscreenTarget: function ()\r\n    {\r\n        if (!this.fullscreenTarget)\r\n        {\r\n            var fsTarget = document.createElement('div');\r\n\r\n            fsTarget.style.margin = '0';\r\n            fsTarget.style.padding = '0';\r\n            fsTarget.style.width = '100%';\r\n            fsTarget.style.height = '100%';\r\n\r\n            this.fullscreenTarget = fsTarget;\r\n\r\n            this._createdFullscreenTarget = true;\r\n        }\r\n\r\n        if (this._createdFullscreenTarget)\r\n        {\r\n            var canvasParent = this.canvas.parentNode;\r\n\r\n            canvasParent.insertBefore(this.fullscreenTarget, this.canvas);\r\n\r\n            this.fullscreenTarget.appendChild(this.canvas);\r\n        }\r\n\r\n        return this.fullscreenTarget;\r\n    },\r\n\r\n    /**\r\n     * Removes the fullscreen target that was added to the DOM.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#removeFullscreenTarget\r\n     * @since 3.17.0\r\n     */\r\n    removeFullscreenTarget: function ()\r\n    {\r\n        if (this._createdFullscreenTarget)\r\n        {\r\n            var fsTarget = this.fullscreenTarget;\r\n\r\n            if (fsTarget && fsTarget.parentNode)\r\n            {\r\n                var parent = fsTarget.parentNode;\r\n\r\n                parent.insertBefore(this.canvas, fsTarget);\r\n\r\n                parent.removeChild(fsTarget);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calling this method will cancel fullscreen mode, if the browser has entered it.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#stopFullscreen\r\n     * @fires Phaser.Scale.Events#LEAVE_FULLSCREEN\r\n     * @fires Phaser.Scale.Events#FULLSCREEN_UNSUPPORTED\r\n     * @since 3.16.0\r\n     */\r\n    stopFullscreen: function ()\r\n    {\r\n        var fullscreen = this.fullscreen;\r\n\r\n        if (!fullscreen.available)\r\n        {\r\n            this.emit(Events.FULLSCREEN_UNSUPPORTED);\r\n\r\n            return false;\r\n        }\r\n\r\n        if (fullscreen.active)\r\n        {\r\n            this._requestedFullscreenChange = true;\r\n\r\n            document[fullscreen.cancel]();\r\n        }\r\n\r\n        this.removeFullscreenTarget();\r\n\r\n        //  Get the parent size again as it will have changed\r\n        this.getParentBounds();\r\n\r\n        this.emit(Events.LEAVE_FULLSCREEN);\r\n\r\n        this.refresh();\r\n    },\r\n\r\n    /**\r\n     * Toggles the fullscreen mode. If already in fullscreen, calling this will cancel it.\r\n     * If not in fullscreen, this will request the browser to enter fullscreen mode.\r\n     * \r\n     * If the browser does not support this, a `FULLSCREEN_UNSUPPORTED` event will be emitted.\r\n     * \r\n     * This method _must_ be called from a user-input gesture, such as `pointerdown`. You cannot launch\r\n     * games fullscreen without this, as most browsers block it. Games within an iframe will also be blocked\r\n     * from fullscreen unless the iframe has the `allowfullscreen` attribute.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#toggleFullscreen\r\n     * @fires Phaser.Scale.Events#ENTER_FULLSCREEN\r\n     * @fires Phaser.Scale.Events#LEAVE_FULLSCREEN\r\n     * @fires Phaser.Scale.Events#FULLSCREEN_UNSUPPORTED\r\n     * @fires Phaser.Scale.Events#RESIZE\r\n     * @since 3.16.0\r\n     * \r\n     * @param {object} [fullscreenOptions] - The FullscreenOptions dictionary is used to provide configuration options when entering full screen.\r\n     */\r\n    toggleFullscreen: function (fullscreenOptions)\r\n    {\r\n        if (this.fullscreen.active)\r\n        {\r\n            this.stopFullscreen();\r\n        }\r\n        else\r\n        {\r\n            this.startFullscreen(fullscreenOptions);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * An internal method that starts the different DOM event listeners running.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#startListeners\r\n     * @since 3.16.0\r\n     */\r\n    startListeners: function ()\r\n    {\r\n        var _this = this;\r\n        var listeners = this.listeners;\r\n\r\n        listeners.orientationChange = function ()\r\n        {\r\n            _this._checkOrientation = true;\r\n            _this.dirty = true;\r\n        };\r\n\r\n        listeners.windowResize = function ()\r\n        {\r\n            _this.dirty = true;\r\n        };\r\n\r\n        //  Only dispatched on mobile devices\r\n        window.addEventListener('orientationchange', listeners.orientationChange, false);\r\n\r\n        window.addEventListener('resize', listeners.windowResize, false);\r\n\r\n        if (this.fullscreen.available)\r\n        {\r\n            listeners.fullScreenChange = function (event)\r\n            {\r\n                return _this.onFullScreenChange(event);\r\n            };\r\n\r\n            listeners.fullScreenError = function (event)\r\n            {\r\n                return _this.onFullScreenError(event);\r\n            };\r\n\r\n            var vendors = [ 'webkit', 'moz', '' ];\r\n\r\n            vendors.forEach(function (prefix)\r\n            {\r\n                document.addEventListener(prefix + 'fullscreenchange', listeners.fullScreenChange, false);\r\n                document.addEventListener(prefix + 'fullscreenerror', listeners.fullScreenError, false);\r\n            });\r\n\r\n            //  MS Specific\r\n            document.addEventListener('MSFullscreenChange', listeners.fullScreenChange, false);\r\n            document.addEventListener('MSFullscreenError', listeners.fullScreenError, false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Triggered when a fullscreenchange event is dispatched by the DOM.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#onFullScreenChange\r\n     * @since 3.16.0\r\n     */\r\n    onFullScreenChange: function ()\r\n    {\r\n        //  They pressed ESC while in fullscreen mode\r\n        if (!this._requestedFullscreenChange)\r\n        {\r\n            this.stopFullscreen();\r\n        }\r\n\r\n        this._requestedFullscreenChange = false;\r\n    },\r\n\r\n    /**\r\n     * Triggered when a fullscreenerror event is dispatched by the DOM.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#onFullScreenError\r\n     * @since 3.16.0\r\n     */\r\n    onFullScreenError: function ()\r\n    {\r\n        this.removeFullscreenTarget();\r\n    },\r\n\r\n    /**\r\n     * Internal method, called automatically by the game step.\r\n     * Monitors the elapsed time and resize interval to see if a parent bounds check needs to take place.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#step\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} time - The time value from the most recent Game step. Typically a high-resolution timer value, or Date.now().\r\n     * @param {number} delta - The delta value since the last frame. This is smoothed to avoid delta spikes by the TimeStep class.\r\n     */\r\n    step: function (time, delta)\r\n    {\r\n        if (!this.parent)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this._lastCheck += delta;\r\n\r\n        if (this.dirty || this._lastCheck > this.resizeInterval)\r\n        {\r\n            //  Returns true if the parent bounds have changed size\r\n            if (this.getParentBounds())\r\n            {\r\n                this.refresh();\r\n            }\r\n\r\n            this.dirty = false;\r\n            this._lastCheck = 0;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Stops all DOM event listeners.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#stopListeners\r\n     * @since 3.16.0\r\n     */\r\n    stopListeners: function ()\r\n    {\r\n        var listeners = this.listeners;\r\n\r\n        window.removeEventListener('orientationchange', listeners.orientationChange, false);\r\n        window.removeEventListener('resize', listeners.windowResize, false);\r\n\r\n        var vendors = [ 'webkit', 'moz', '' ];\r\n\r\n        vendors.forEach(function (prefix)\r\n        {\r\n            document.removeEventListener(prefix + 'fullscreenchange', listeners.fullScreenChange, false);\r\n            document.removeEventListener(prefix + 'fullscreenerror', listeners.fullScreenError, false);\r\n        });\r\n\r\n        //  MS Specific\r\n        document.removeEventListener('MSFullscreenChange', listeners.fullScreenChange, false);\r\n        document.removeEventListener('MSFullscreenError', listeners.fullScreenError, false);\r\n    },\r\n\r\n    /**\r\n     * Destroys this Scale Manager, releasing all references to external resources.\r\n     * Once destroyed, the Scale Manager cannot be used again.\r\n     *\r\n     * @method Phaser.Scale.ScaleManager#destroy\r\n     * @since 3.16.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.stopListeners();\r\n\r\n        this.game = null;\r\n        this.canvas = null;\r\n        this.canvasBounds = null;\r\n        this.parent = null;\r\n        this.fullscreenTarget = null;\r\n\r\n        this.parentSize.destroy();\r\n        this.gameSize.destroy();\r\n        this.baseSize.destroy();\r\n        this.displaySize.destroy();\r\n    },\r\n\r\n    /**\r\n     * Is the browser currently in fullscreen mode or not?\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#isFullscreen\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isFullscreen: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.fullscreen.active;\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * The game width.\r\n     * \r\n     * This is typically the size given in the game configuration.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#width\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    width: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gameSize.width;\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * The game height.\r\n     * \r\n     * This is typically the size given in the game configuration.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#height\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    height: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.gameSize.height;\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * Is the device in a portrait orientation as reported by the Orientation API?\r\n     * This value is usually only available on mobile devices.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#isPortrait\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isPortrait: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.orientation === CONST.ORIENTATION.PORTRAIT);\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * Is the device in a landscape orientation as reported by the Orientation API?\r\n     * This value is usually only available on mobile devices.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#isLandscape\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isLandscape: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.orientation === CONST.ORIENTATION.LANDSCAPE);\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * Are the game dimensions portrait? (i.e. taller than they are wide)\r\n     * \r\n     * This is different to the device itself being in a portrait orientation.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#isGamePortrait\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isGamePortrait: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.height > this.width);\r\n        }\r\n    \r\n    },\r\n\r\n    /**\r\n     * Are the game dimensions landscape? (i.e. wider than they are tall)\r\n     * \r\n     * This is different to the device itself being in a landscape orientation.\r\n     *\r\n     * @name Phaser.Scale.ScaleManager#isGameLandscape\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.16.0\r\n     */\r\n    isGameLandscape: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.width > this.height);\r\n        }\r\n    \r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ScaleManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9TY2FsZU1hbmFnZXIuanM/NjY3NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLCtEQUFTO0FBQzdCLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxxQkFBcUIsbUJBQU8sQ0FBQyw4RUFBdUI7QUFDcEQsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWtCO0FBQzFDLDJCQUEyQixtQkFBTyxDQUFDLDBGQUE2QjtBQUNoRSxXQUFXLG1CQUFPLENBQUMsOERBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsMEZBQTZCO0FBQ3JELFdBQVcsbUJBQU8sQ0FBQyxrRUFBaUI7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyw0QkFBNEI7QUFDdEUsMkNBQTJDLDhCQUE4Qjs7QUFFekU7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EseUZBQXlGLHFGQUFxRjtBQUM5SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0Isd0JBQXdCOztBQUU1Rjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvU2NhbGVNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBHZXRJbm5lckhlaWdodCA9IHJlcXVpcmUoJy4uL2RvbS9HZXRJbm5lckhlaWdodCcpO1xyXG52YXIgR2V0VGFyZ2V0ID0gcmVxdWlyZSgnLi4vZG9tL0dldFRhcmdldCcpO1xyXG52YXIgR2V0U2NyZWVuT3JpZW50YXRpb24gPSByZXF1aXJlKCcuLi9kb20vR2V0U2NyZWVuT3JpZW50YXRpb24nKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi91dGlscy9OT09QJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFNpemUgPSByZXF1aXJlKCcuLi9zdHJ1Y3RzL1NpemUnKTtcclxudmFyIFNuYXBGbG9vciA9IHJlcXVpcmUoJy4uL21hdGgvc25hcC9TbmFwRmxvb3InKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBTY2FsZSBNYW5hZ2VyIGhhbmRsZXMgdGhlIHNjYWxpbmcsIHJlc2l6aW5nIGFuZCBhbGlnbm1lbnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBcclxuICogVGhlIHdheSBzY2FsaW5nIGlzIGhhbmRsZWQgaXMgYnkgc2V0dGluZyB0aGUgZ2FtZSBjYW52YXMgdG8gYSBmaXhlZCBzaXplLCB3aGljaCBpcyBkZWZpbmVkIGluIHRoZVxyXG4gKiBnYW1lIGNvbmZpZ3VyYXRpb24uIFlvdSBhbHNvIGRlZmluZSB0aGUgcGFyZW50IGNvbnRhaW5lciBpbiB0aGUgZ2FtZSBjb25maWcuIElmIG5vIHBhcmVudCBpcyBnaXZlbixcclxuICogaXQgd2lsbCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBkb2N1bWVudCBib2R5LiBUaGUgU2NhbGUgTWFuYWdlciB3aWxsIHRoZW4gbG9vayBhdCB0aGUgYXZhaWxhYmxlIHNwYWNlXHJcbiAqIHdpdGhpbiB0aGUgX3BhcmVudF8gYW5kIHNjYWxlIHRoZSBjYW52YXMgYWNjb3JkaW5nbHkuIFNjYWxpbmcgaXMgaGFuZGxlZCBieSBzZXR0aW5nIHRoZSBjYW52YXMgQ1NTXHJcbiAqIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcywgbGVhdmluZyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgaXRzZWxmIHVudG91Y2hlZC5cclxuICogU2NhbGluZyBpcyB0aGVyZWZvcmUgYWNoaWV2ZWQgYnkga2VlcGluZyB0aGUgY29yZSBjYW52YXMgdGhlIHNhbWUgc2l6ZSBhbmQgJ3N0cmV0Y2hpbmcnXHJcbiAqIGl0IHZpYSBpdHMgQ1NTIHByb3BlcnRpZXMuIFRoaXMgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGFuZCBzcGVlZCBhcyB1c2luZyB0aGUgYHRyYW5zZm9ybS1zY2FsZWAgQ1NTXHJcbiAqIHByb3BlcnR5LCB3aXRob3V0IHRoZSBuZWVkIGZvciBicm93c2VyIHByZWZpeCBoYW5kbGluZy5cclxuICogXHJcbiAqIFRoZSBjYWxjdWxhdGlvbnMgZm9yIHRoZSBzY2FsZSBhcmUgaGVhdmlseSBpbmZsdWVuY2VkIGJ5IHRoZSBib3VuZGluZyBwYXJlbnQgc2l6ZSwgd2hpY2ggaXMgdGhlIGNvbXB1dGVkXHJcbiAqIGRpbWVuc2lvbnMgb2YgdGhlIGNhbnZhcydzIHBhcmVudC4gVGhlIENTUyBydWxlcyBvZiB0aGUgcGFyZW50IGVsZW1lbnQgcGxheSBhbiBpbXBvcnRhbnQgcm9sZSBpbiB0aGVcclxuICogb3BlcmF0aW9uIG9mIHRoZSBTY2FsZSBNYW5hZ2VyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhcmVudCBoYXMgbm8gZGVmaW5lZCB3aWR0aCBvciBoZWlnaHQsIHRoZW4gYWN0aW9uc1xyXG4gKiBsaWtlIGF1dG8tY2VudGVyaW5nIHdpbGwgZmFpbCB0byBhY2hpZXZlIHRoZSByZXF1aXJlZCByZXN1bHQuIFRoZSBTY2FsZSBNYW5hZ2VyIHdvcmtzIGluIHRhbmRlbSB3aXRoIHRoZVxyXG4gKiBDU1MgeW91IHNldC11cCBvbiB0aGUgcGFnZSBob3N0aW5nIHlvdXIgZ2FtZSwgcmF0aGVyIHRoYW4gdGFraW5nIGNvbnRyb2wgb2YgaXQuXHJcbiAqIFxyXG4gKiAjIyMjIFBhcmVudCBhbmQgRGlzcGxheSBjYW52YXMgY29udGFpbm1lbnQgZ3VpZGVsaW5lczpcclxuICpcclxuICogLSBTdHlsZSB0aGUgUGFyZW50IGVsZW1lbnQgKG9mIHRoZSBnYW1lIGNhbnZhcykgdG8gY29udHJvbCB0aGUgUGFyZW50IHNpemUgYW5kIHRodXMgdGhlIGdhbWVzIHNpemUgYW5kIGxheW91dC5cclxuICpcclxuICogLSBUaGUgUGFyZW50IGVsZW1lbnQncyBDU1Mgc3R5bGVzIHNob3VsZCBfZWZmZWN0aXZlbHlfIGFwcGx5IG1heGltdW0gKGFuZCBtaW5pbXVtKSBib3VuZGluZyBiZWhhdmlvci5cclxuICpcclxuICogLSBUaGUgUGFyZW50IGVsZW1lbnQgc2hvdWxkIF9ub3RfIGFwcGx5IGEgcGFkZGluZyBhcyB0aGlzIGlzIG5vdCBhY2NvdW50ZWQgZm9yLlxyXG4gKiAgIElmIGEgcGFkZGluZyBpcyByZXF1aXJlZCBhcHBseSBpdCB0byB0aGUgUGFyZW50J3MgcGFyZW50IG9yIGFwcGx5IGEgbWFyZ2luIHRvIHRoZSBQYXJlbnQuXHJcbiAqICAgSWYgeW91IG5lZWQgdG8gYWRkIGEgYm9yZGVyLCBtYXJnaW4gb3IgYW55IG90aGVyIENTUyBhcm91bmQgeW91ciBnYW1lIGNvbnRhaW5lciwgdGhlbiB1c2UgYSBwYXJlbnQgZWxlbWVudCBhbmRcclxuICogICBhcHBseSB0aGUgQ1NTIHRvIHRoaXMgaW5zdGVhZCwgb3RoZXJ3aXNlIHlvdSdsbCBiZSBjb25zdGFudGx5IHJlc2l6aW5nIHRoZSBzaGFwZSBvZiB0aGUgZ2FtZSBjb250YWluZXIuXHJcbiAqXHJcbiAqIC0gVGhlIERpc3BsYXkgY2FudmFzIGxheW91dCBDU1Mgc3R5bGVzIChpLmUuIG1hcmdpbnMsIHNpemUpIHNob3VsZCBub3QgYmUgYWx0ZXJlZCAvIHNwZWNpZmllZCBhc1xyXG4gKiAgIHRoZXkgbWF5IGJlIHVwZGF0ZWQgYnkgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAqXHJcbiAqICMjIyMgU2NhbGUgTW9kZXNcclxuICogXHJcbiAqIFRoZSB3YXkgdGhlIHNjYWxpbmcgaXMgaGFuZGxlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgc2NhbGVNb2RlYCBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgaXMgYE5PTkVgLFxyXG4gKiB3aGljaCBwcmV2ZW50cyBQaGFzZXIgZnJvbSBzY2FsaW5nIG9yIHRvdWNoaW5nIHRoZSBjYW52YXMsIG9yIGl0cyBwYXJlbnQsIGF0IGFsbC4gSW4gdGhpcyBtb2RlLCB5b3UgYXJlXHJcbiAqIHJlc3BvbnNpYmxlIGZvciBhbGwgc2NhbGluZy4gVGhlIG90aGVyIHNjYWxpbmcgbW9kZXMgYWZmb3JkIHlvdSBhdXRvbWF0aWMgc2NhbGluZy5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIHRvIHNjYWxlIHlvdXIgZ2FtZSBzbyB0aGF0IGl0IGFsd2F5cyBmaXRzIGludG8gdGhlIGF2YWlsYWJsZSBzcGFjZSB3aXRoaW4gdGhlIHBhcmVudCwgeW91XHJcbiAqIHNob3VsZCB1c2UgdGhlIHNjYWxlIG1vZGUgYEZJVGAuIExvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gZm9yIG90aGVyIHNjYWxlIG1vZGVzIHRvIHNlZSB3aGF0IG9wdGlvbnMgYXJlXHJcbiAqIGF2YWlsYWJsZS4gSGVyZSBpcyBhIGJhc2ljIGNvbmZpZyBzaG93aW5nIGhvdyB0byBzZXQgdGhpcyBzY2FsZSBtb2RlOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBzY2FsZToge1xyXG4gKiAgICAgcGFyZW50OiAneW91cmdhbWVkaXYnLFxyXG4gKiAgICAgbW9kZTogUGhhc2VyLlNjYWxlLkZJVCxcclxuICogICAgIHdpZHRoOiA4MDAsXHJcbiAqICAgICBoZWlnaHQ6IDYwMFxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogUGxhY2UgdGhlIGBzY2FsZWAgY29uZmlnIG9iamVjdCB3aXRoaW4geW91ciBnYW1lIGNvbmZpZy5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIGZvciB0aGUgY2FudmFzIHRvIGJlIHJlc2l6ZWQgZGlyZWN0bHksIHNvIHRoYXQgdGhlIGNhbnZhcyBpdHNlbGYgZmlsbHMgdGhlIGF2YWlsYWJsZSBzcGFjZVxyXG4gKiAoaS5lLiBpdCBpc24ndCBzY2FsZWQsIGl0J3MgcmVzaXplZCkgdGhlbiB1c2UgdGhlIGBSRVNJWkVgIHNjYWxlIG1vZGUuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIDE6MSBtYXBwaW5nXHJcbiAqIG9mIGNhbnZhcyBwaXhlbHMgdG8gZ2FtZSBzaXplLiBJbiB0aGlzIG1vZGUgQ1NTIGlzbid0IHVzZWQgdG8gc2NhbGUgdGhlIGNhbnZhcywgaXQncyBsaXRlcmFsbHkgYWRqdXN0ZWRcclxuICogdG8gZmlsbCBhbGwgYXZhaWxhYmxlIHNwYWNlIHdpdGhpbiB0aGUgcGFyZW50LiBZb3Ugc2hvdWxkIGJlIGV4dHJlbWVseSBjYXJlZnVsIGFib3V0IHRoZSBzaXplIG9mIHRoZVxyXG4gKiBjYW52YXMgeW91J3JlIGNyZWF0aW5nIHdoZW4gZG9pbmcgdGhpcywgYXMgdGhlIGxhcmdlciB0aGUgYXJlYSwgdGhlIG1vcmUgd29yayB0aGUgR1BVIGhhcyB0byBkbyBhbmQgaXQnc1xyXG4gKiB2ZXJ5IGVhc3kgdG8gaGl0IGZpbGwtcmF0ZSBsaW1pdHMgcXVpY2tseS5cclxuICogXHJcbiAqIEZvciBjb21wbGV4LCBjdXN0b20tc2NhbGluZyByZXF1aXJlbWVudHMsIHlvdSBzaG91bGQgcHJvYmFibHkgY29uc2lkZXIgdXNpbmcgdGhlIGBSRVNJWkVgIHNjYWxlIG1vZGUsXHJcbiAqIHdpdGggeW91ciBvd24gbGltaXRhdGlvbnMgaW4gcGxhY2UgcmU6IGNhbnZhcyBkaW1lbnNpb25zIGFuZCBtYW5hZ2luZyB0aGUgc2NhbGluZyB3aXRoIHRoZSBnYW1lIHNjZW5lc1xyXG4gKiB5b3Vyc2VsZi4gRm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIGdhbWVzLCBob3dldmVyLCB0aGUgYEZJVGAgbW9kZSBpcyBsaWtlbHkgdG8gYmUgdGhlIG1vc3QgdXNlZC5cclxuICogXHJcbiAqIFBsZWFzZSBhcHByZWNpYXRlIHRoYXQgdGhlIFNjYWxlIE1hbmFnZXIgY2Fubm90IHBlcmZvcm0gbWlyYWNsZXMuIEFsbCBpdCBkb2VzIGlzIHNjYWxlIHlvdXIgZ2FtZSBjYW52YXNcclxuICogYXMgYmVzdCBpdCBjYW4sIGJhc2VkIG9uIHdoYXQgaXQgY2FuIGluZmVyIGZyb20gaXRzIHN1cnJvdW5kaW5nIGFyZWEuIFRoZXJlIGFyZSBhbGwga2luZHMgb2YgZW52aXJvbm1lbnRzXHJcbiAqIHdoZXJlIGl0J3MgdXAgdG8geW91IHRvIGd1aWRlIGFuZCBoZWxwIHRoZSBjYW52YXMgcG9zaXRpb24gaXRzZWxmLCBlc3BlY2lhbGx5IHdoZW4gYnVpbHQgaW50byByZW5kZXJpbmdcclxuICogZnJhbWV3b3JrcyBsaWtlIFJlYWN0IGFuZCBWdWUuIElmIHlvdXIgcGFnZSByZXF1aXJlcyBtZXRhIHRhZ3MgdG8gcHJldmVudCB1c2VyIHNjYWxpbmcgZ2VzdHVyZXMsIG9yIHN1Y2hcclxuICogbGlrZSwgdGhlbiBpdCdzIHVwIHRvIHlvdSB0byBlbnN1cmUgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgaHRtbC5cclxuICogXHJcbiAqICMjIyMgQ2VudGVyaW5nXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gaGF2ZSB0aGUgZ2FtZSBjYW52YXMgYXV0b21hdGljYWxseSBjZW50ZXJlZC4gQWdhaW4sIHRoaXMgcmVsaWVzIGhlYXZpbHkgb24gdGhlIHBhcmVudCBiZWluZ1xyXG4gKiBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBzdHlsZWQsIGFzIHRoZSBjZW50ZXJpbmcgb2Zmc2V0cyBhcmUgYmFzZWQgZW50aXJlbHkgb24gdGhlIGF2YWlsYWJsZSBzcGFjZVxyXG4gKiB3aXRoaW4gdGhlIHBhcmVudCBlbGVtZW50LiBDZW50ZXJpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgb3IgY2FuIGJlIGFwcGxpZWQgaG9yaXpvbnRhbGx5LCB2ZXJ0aWNhbGx5LFxyXG4gKiBvciBib3RoLiBIZXJlJ3MgYW4gZXhhbXBsZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogc2NhbGU6IHtcclxuICogICAgIHBhcmVudDogJ3lvdXJnYW1lZGl2JyxcclxuICogICAgIGF1dG9DZW50ZXI6IFBoYXNlci5TY2FsZS5DRU5URVJfQk9USCxcclxuICogICAgIHdpZHRoOiA4MDAsXHJcbiAqICAgICBoZWlnaHQ6IDYwMFxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogIyMjIyBGdWxsc2NyZWVuIEFQSVxyXG4gKiBcclxuICogSWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgaXQsIHlvdSBjYW4gc2VuZCB5b3VyIGdhbWUgaW50byBmdWxsc2NyZWVuIG1vZGUuIEluIHRoaXMgbW9kZSwgdGhlIGdhbWUgd2lsbCBmaWxsXHJcbiAqIHRoZSBlbnRpcmUgZGlzcGxheSwgcmVtb3ZpbmcgYWxsIGJyb3dzZXIgVUkgYW5kIGFueXRoaW5nIGVsc2UgcHJlc2VudCBvbiB0aGUgc2NyZWVuLiBJdCB3aWxsIHJlbWFpbiBpbiB0aGlzXHJcbiAqIG1vZGUgdW50aWwgeW91ciBnYW1lIGVpdGhlciBkaXNhYmxlcyBpdCwgb3IgdW50aWwgdGhlIHVzZXIgdGFicyBvdXQgb3IgcHJlc3NlcyBFU0NhcGUgaWYgb24gZGVza3RvcC4gSXQncyBhXHJcbiAqIGdyZWF0IHdheSB0byBhY2hpZXZlIGEgZGVza3RvcC1nYW1lIGxpa2UgZXhwZXJpZW5jZSBmcm9tIHRoZSBicm93c2VyLCBidXQgaXQgZG9lcyByZXF1aXJlIGEgbW9kZXJuIGJyb3dzZXJcclxuICogdG8gaGFuZGxlIGl0LiBTb21lIG1vYmlsZSBicm93c2VycyBhbHNvIHN1cHBvcnQgdGhpcy5cclxuICpcclxuICogQGNsYXNzIFNjYWxlTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlNjYWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgU2NhbGVNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTY2FsZU1hbmFnZXIgKGdhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEhUTUwgQ2FudmFzIEVsZW1lbnQgdGhhdCBQaGFzZXIgdXNlcyB0byByZW5kZXIgdGhlIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBET00gYm91bmRzIG9mIHRoZSBjYW52YXMgZWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjY2FudmFzQm91bmRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HZW9tLlJlY3RhbmdsZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXNCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBDYW52YXMuIE9mdGVuIGEgZGl2LCBvciB0aGUgYnJvd3NlciB3aW5kb3csIG9yIG5vdGhpbmcgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgaXMgc2V0IGluIHRoZSBHYW1lIENvbmZpZyBhcyB0aGUgYHBhcmVudGAgcHJvcGVydHkuIElmIHVuZGVmaW5lZCAob3IganVzdCBub3QgcHJlc2VudCksIGl0IHdpbGwgZGVmYXVsdFxyXG4gICAgICAgICAqIHRvIHVzZSB0aGUgZG9jdW1lbnQgYm9keS4gSWYgc3BlY2lmaWNhbGx5IHNldCB0byBgbnVsbGAgUGhhc2VyIHdpbGwgaWdub3JlIGFsbCBwYXJlbnQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUgez9hbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIHBhcmVudCBlbGVtZW50IHRoZSBicm93c2VyIHdpbmRvdz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjcGFyZW50SXNXaW5kb3dcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXJlbnRJc1dpbmRvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgUGFyZW50IFNpemUgY29tcG9uZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNwYXJlbnRTaXplXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNpemV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50U2l6ZSA9IG5ldyBTaXplKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIFNpemUgY29tcG9uZW50LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSB1bi1tb2RpZmllZCBnYW1lIHNpemUsIGFzIHJlcXVlc3RlZCBpbiB0aGUgZ2FtZSBjb25maWcgKHRoZSByYXcgd2lkdGggLyBoZWlnaHQpLFxyXG4gICAgICAgICAqIGFzIHVzZWQgZm9yIHdvcmxkIGJvdW5kcywgY2FtZXJhcywgZXRjXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2dhbWVTaXplXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNpemV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZVNpemUgPSBuZXcgU2l6ZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQmFzZSBTaXplIGNvbXBvbmVudC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgbW9kaWZpZWQgZ2FtZSBzaXplLCB3aGljaCBpcyB0aGUgZ2FtZVNpemUgKiByZXNvbHV0aW9uLCB1c2VkIHRvIHNldCB0aGUgY2FudmFzIHdpZHRoIGFuZCBoZWlnaHRcclxuICAgICAgICAgKiAoYnV0IG5vdCB0aGUgQ1NTIHN0eWxlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNiYXNlU2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TaXplfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VTaXplID0gbmV3IFNpemUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIERpc3BsYXkgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIHNpemUgdXNlZCBmb3IgdGhlIGNhbnZhcyBzdHlsZSwgZmFjdG9yaW5nIGluIHRoZSBzY2FsZSBtb2RlLCBwYXJlbnQgYW5kIG90aGVyIHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZGlzcGxheVNpemVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZSA9IG5ldyBTaXplKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBnYW1lIHNjYWxlIG1vZGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3NjYWxlTW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NhbGUuU2NhbGVNb2RlVHlwZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZU1vZGUgPSBDT05TVC5TQ0FMRV9NT0RFLk5PTkU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYW52YXMgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIGlzIGhhcmQtY29kZWQgdG8gYSB2YWx1ZSBvZiAxIGluIHRoZSAzLjE2IHJlbGVhc2Ugb2YgUGhhc2VyIGFuZCB3aWxsIGJlIGVuYWJsZWQgYXQgYSBsYXRlciBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNyZXNvbHV0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdhbWUgem9vbSBmYWN0b3IuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBhbGxvd3MgeW91IHRvIG11bHRpcGx5IHlvdXIgZ2FtZXMgYmFzZSBzaXplIGJ5IHRoZSBnaXZlbiB6b29tIGZhY3Rvci5cclxuICAgICAgICAgKiBUaGlzIGlzIHRoZW4gdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBkaXNwbGF5IHNpemUsIGV2ZW4gaW4gYE5PTkVgIHNpdHVhdGlvbnMuXHJcbiAgICAgICAgICogSWYgeW91IGRvbid0IHdhbnQgUGhhc2VyIHRvIHRvdWNoIHRoZSBjYW52YXMgc3R5bGUgYXQgYWxsLCB0aGlzIHZhbHVlIHNob3VsZCBiZSAxLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIENhbiBhbHNvIGJlIHNldCB0byBgTUFYX1pPT01gIGluIHdoaWNoIGNhc2UgdGhlIHpvb20gdmFsdWUgd2lsbCBiZSBkZXJpdmVkIGJhc2VkXHJcbiAgICAgICAgICogb24gdGhlIGdhbWUgc2l6ZSBhbmQgYXZhaWxhYmxlIHNwYWNlIHdpdGhpbiB0aGUgcGFyZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciN6b29tXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZmxhZyBzZXQgd2hlbiB0aGUgZ2FtZSB6b29tIGZhY3RvciBpcyBtb2RpZmllZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjX3Jlc2V0Wm9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZXNldFpvb20gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlU2l6ZSBhbmQgdGhlIGNhbnZhc0JvdW5kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZGlzcGxheVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHNldCwgdGhlIGNhbnZhcyBzaXplcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcGFzc2VkIHRocm91Z2ggTWF0aC5mbG9vci5cclxuICAgICAgICAgKiBUaGlzIHJlc3VsdHMgaW4gcm91bmRlZCBwaXhlbCBkaXNwbGF5IHZhbHVlcywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBvbiBsZWdhY3lcclxuICAgICAgICAgKiBhbmQgbG93IHBvd2VyZWQgZGV2aWNlcywgYnV0IGF0IHRoZSBjb3N0IG9mIG5vdCBhY2hpZXZpbmcgYSAncGVyZmVjdCcgZml0IGluIHNvbWUgYnJvd3NlciB3aW5kb3dzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNhdXRvUm91bmRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hdXRvUm91bmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBjZW50ZXIgdGhlIGNhbnZhcyB3aXRoaW4gdGhlIHBhcmVudD8gVGhlIGRpZmZlcmVudCBjZW50ZXJpbmcgbW9kZXMgYXJlOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIDEuIE5vIGNlbnRlcmluZy5cclxuICAgICAgICAgKiAyLiBDZW50ZXIgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuXHJcbiAgICAgICAgICogMy4gQ2VudGVyIGhvcml6b250YWxseS5cclxuICAgICAgICAgKiA0LiBDZW50ZXIgdmVydGljYWxseS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGdhbWUgY2FudmFzLCB5b3UgbXVzdCBoYXZlIHNwZWNpZmllZCBhIHBhcmVudFxyXG4gICAgICAgICAqIHRoYXQgaGFzIGEgc2l6ZSBzZXQsIG9yIHRoZSBjYW52YXMgcGFyZW50IGlzIHRoZSBkb2N1bWVudC5ib2R5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNhdXRvQ2VudGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2FsZS5DZW50ZXJUeXBlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF1dG9DZW50ZXIgPSBDT05TVC5DRU5URVIuTk9fQ0VOVEVSO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBkZXZpY2Ugb3JpZW50YXRpb24uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogT3JpZW50YXRpb24gZXZlbnRzIGFyZSBkaXNwYXRjaGVkIHZpYSB0aGUgRGV2aWNlIE9yaWVudGF0aW9uIEFQSSwgdHlwaWNhbGx5IG9ubHkgb24gbW9iaWxlIGJyb3dzZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNvcmllbnRhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NhbGUuT3JpZW50YXRpb25UeXBlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gQ09OU1QuT1JJRU5UQVRJT04uTEFORFNDQVBFO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgRGV2aWNlLkZ1bGxzY3JlZW4gb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNmdWxsc2NyZWVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5EZXZpY2UuRnVsbHNjcmVlbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRE9NIEVsZW1lbnQgd2hpY2ggaXMgc2VudCBpbnRvIGZ1bGxzY3JlZW4gbW9kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZnVsbHNjcmVlblRhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHs/YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZ1bGxzY3JlZW5UYXJnZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEaWQgUGhhc2VyIGNyZWF0ZSB0aGUgZnVsbHNjcmVlbiB0YXJnZXQgZGl2LCBvciB3YXMgaXQgcHJvdmlkZWQgaW4gdGhlIGdhbWUgY29uZmlnP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNfY3JlYXRlZEZ1bGxzY3JlZW5UYXJnZXRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jcmVhdGVkRnVsbHNjcmVlblRhcmdldCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB2YXIgdGhhdCBrZWVwcyB0cmFjayBvZiB0aGUgdXNlciwgb3IgdGhlIGJyb3dzZXIsIHJlcXVlc3RpbmcgZnVsbHNjcmVlbiBjaGFuZ2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNfcmVxdWVzdGVkRnVsbHNjcmVlbkNoYW5nZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RlZEZ1bGxzY3JlZW5DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqIFNldCBpZiB0aGVyZSBpcyBhIGNoYW5nZSBiZXR3ZWVuIHRoZSBwYXJlbnQgc2l6ZSBhbmQgdGhlIGN1cnJlbnQgc2l6ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb3cgbWFueSBtaWxsaXNlY29uZHMgc2hvdWxkIGVsYXBzZSBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIGJyb3dzZXIgc2l6ZSBoYXMgY2hhbmdlZD9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBNb3N0IG1vZGVybiBicm93c2VycyBkaXNwYXRjaCBhICdyZXNpemUnIGV2ZW50LCB3aGljaCB0aGUgU2NhbGUgTWFuYWdlciB3aWxsIGxpc3RlbiBmb3IuXHJcbiAgICAgICAgICogSG93ZXZlciwgb2xkZXIgYnJvd3NlcnMgZmFpbCB0byBkbyB0aGlzLCBvciBkbyBpdCBjb25zaXN0ZW50bHksIHNvIHdlIGZhbGwgYmFjayB0byBhXHJcbiAgICAgICAgICogbW9yZSB0cmFkaXRpb25hbCAnc2l6ZSBjaGVjaycgYmFzZWQgb24gYSB0aW1lIGludGVydmFsLiBZb3UgY2FuIGNvbnRyb2wgaG93IG9mdGVuIGl0IGlzXHJcbiAgICAgICAgICogY2hlY2tlZCBoZXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNyZXNpemVJbnRlcnZhbFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc2l6ZUludGVydmFsID0gNTAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBzaXplIGludGVydmFsIHRyYWNrZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI19sYXN0Q2hlY2tcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9sYXN0Q2hlY2sgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBmbGFnIHRvIGNoZWNrIG9yaWVudGF0aW9uIHN0YXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNfY2hlY2tPcmllbnRhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIGRlZmluZWQgZXZlbnQgbGlzdGVuZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNsaXN0ZW5lcnNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0ge1xyXG5cclxuICAgICAgICAgICAgb3JpZW50YXRpb25DaGFuZ2U6IE5PT1AsXHJcbiAgICAgICAgICAgIHdpbmRvd1Jlc2l6ZTogTk9PUCxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbkNoYW5nZTogTk9PUCxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbkVycm9yOiBOT09QXHJcblxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIF9iZWZvcmVfIHRoZSBjYW52YXMgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBET00uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3ByZUJvb3RcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5Db3JlLkV2ZW50cyNCT09UXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHByZUJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFBhcnNlIHRoZSBjb25maWcgdG8gZ2V0IHRoZSBzY2FsaW5nIHZhbHVlcyB3ZSBuZWVkXHJcbiAgICAgICAgdGhpcy5wYXJzZUNvbmZpZyh0aGlzLmdhbWUuY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lLmV2ZW50cy5vbmNlKCdib290JywgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQm9vdCBoYW5kbGVyIGlzIGNhbGxlZCBieSBQaGFzZXIuR2FtZSB3aGVuIGl0IGZpcnN0IHN0YXJ0cyB1cC5cclxuICAgICAqIFRoZSByZW5kZXJlciBpcyBhdmFpbGFibGUgYnkgbm93IGFuZCB0aGUgY2FudmFzIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBET00uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI1JFU0laRVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnYW1lID0gdGhpcy5nYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGdhbWUuY2FudmFzO1xyXG5cclxuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4gPSBnYW1lLmRldmljZS5mdWxsc2NyZWVuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2FsZU1vZGUgIT09IENPTlNULlNDQUxFX01PREUuUkVTSVpFKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRBc3BlY3RNb2RlKHRoaXMuc2NhbGVNb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERS5OT05FKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdldFBhcmVudEJvdW5kcygpO1xyXG5cclxuICAgICAgICAgICAgLy8gIE9ubHkgc2V0IHRoZSBwYXJlbnQgYm91bmRzIGlmIHRoZSBwYXJlbnQgaGFzIGFuIGFjdHVhbCBzaXplXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFNpemUud2lkdGggPiAwICYmIHRoaXMucGFyZW50U2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlTaXplLnNldFBhcmVudCh0aGlzLnBhcmVudFNpemUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdhbWUuZXZlbnRzLm9uKEdhbWVFdmVudHMuUFJFX1NURVAsIHRoaXMuc3RlcCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiB0byBzZXQtdXAgdGhlIHNjYWxlIGRlZmF1bHRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNwYXJzZUNvbmZpZ1xyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Db3JlLkdhbWVDb25maWd9IGNvbmZpZyAtIFRoZSBHYW1lIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwYXJzZUNvbmZpZzogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvLyAgR2V0IHRoZSBwYXJlbnQgZWxlbWVudCwgaWYgYW55XHJcbiAgICAgICAgdGhpcy5nZXRQYXJlbnQoY29uZmlnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyAgR2V0IHRoZSBzaXplIG9mIHRoZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICAgIC8vICBUaGlzIGNhbiBvZnRlbiBzZXQgYSBoZWlnaHQgb2YgemVybyAoZXNwZWNpYWxseSBmb3IgdW4tc3R5bGVkIGRpdnMpXHJcbiAgICAgICAgdGhpcy5nZXRQYXJlbnRCb3VuZHMoKTtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gY29uZmlnLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcuaGVpZ2h0O1xyXG4gICAgICAgIHZhciBzY2FsZU1vZGUgPSBjb25maWcuc2NhbGVNb2RlO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gY29uZmlnLnJlc29sdXRpb247XHJcbiAgICAgICAgdmFyIHpvb20gPSBjb25maWcuem9vbTtcclxuICAgICAgICB2YXIgYXV0b1JvdW5kID0gY29uZmlnLmF1dG9Sb3VuZDtcclxuXHJcbiAgICAgICAgLy8gIElmIHdpZHRoID0gJzEwMCUnLCBvciBzaW1pbGFyIHZhbHVlXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgd2UgaGF2ZSBhIHBhcmVudCB3aXRoIGEgaGVpZ2h0LCB3ZSdsbCB3b3JrIGl0IG91dCBmcm9tIHRoYXRcclxuICAgICAgICAgICAgdmFyIHBhcmVudFdpZHRoID0gdGhpcy5wYXJlbnRTaXplLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmVudFdpZHRoID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyZW50U2NhbGVYID0gcGFyc2VJbnQod2lkdGgsIDEwKSAvIDEwMDtcclxuXHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcihwYXJlbnRXaWR0aCAqIHBhcmVudFNjYWxlWCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgaGVpZ2h0ID0gJzEwMCUnLCBvciBzaW1pbGFyIHZhbHVlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBoZWlnaHQgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIHdlIGhhdmUgYSBwYXJlbnQgd2l0aCBhIGhlaWdodCwgd2UnbGwgd29yayBpdCBvdXQgZnJvbSB0aGF0XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRIZWlnaHQgPSB0aGlzLnBhcmVudFNpemUuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmVudEhlaWdodCA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyZW50U2NhbGVZID0gcGFyc2VJbnQoaGVpZ2h0LCAxMCkgLyAxMDA7XHJcblxyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKHBhcmVudEhlaWdodCAqIHBhcmVudFNjYWxlWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhpcyBpcyBmaXhlZCBhdCAxIG9uIHB1cnBvc2UuXHJcbiAgICAgICAgLy8gIENoYW5naW5nIGl0IHdpbGwgYnJlYWsgYWxsIHVzZXIgaW5wdXQuXHJcbiAgICAgICAgLy8gIFdhaXQgZm9yIGFub3RoZXIgcmVsZWFzZSB0byBzb2x2ZSB0aGlzIGlzc3VlLlxyXG4gICAgICAgIHRoaXMucmVzb2x1dGlvbiA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGVNb2RlID0gc2NhbGVNb2RlO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9Sb3VuZCA9IGF1dG9Sb3VuZDtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvQ2VudGVyID0gY29uZmlnLmF1dG9DZW50ZXI7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplSW50ZXJ2YWwgPSBjb25maWcucmVzaXplSW50ZXJ2YWw7XHJcblxyXG4gICAgICAgIGlmIChhdXRvUm91bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhlIHVuLW1vZGlmaWVkIGdhbWUgc2l6ZSwgYXMgcmVxdWVzdGVkIGluIHRoZSBnYW1lIGNvbmZpZyAodGhlIHJhdyB3aWR0aCAvIGhlaWdodCkgYXMgdXNlZCBmb3Igd29ybGQgYm91bmRzLCBldGNcclxuICAgICAgICB0aGlzLmdhbWVTaXplLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh6b29tID09PSBDT05TVC5aT09NLk1BWF9aT09NKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgem9vbSA9IHRoaXMuZ2V0TWF4Wm9vbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcclxuXHJcbiAgICAgICAgaWYgKHpvb20gIT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldFpvb20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFRoZSBtb2RpZmllZCBnYW1lIHNpemUsIHdoaWNoIGlzIHRoZSB3L2ggKiByZXNvbHV0aW9uXHJcbiAgICAgICAgdGhpcy5iYXNlU2l6ZS5zZXRTaXplKHdpZHRoICogcmVzb2x1dGlvbiwgaGVpZ2h0ICogcmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgIGlmIChhdXRvUm91bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VTaXplLndpZHRoID0gTWF0aC5mbG9vcih0aGlzLmJhc2VTaXplLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU2l6ZS5oZWlnaHQgPSBNYXRoLmZsb29yKHRoaXMuYmFzZVNpemUuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcubWluV2lkdGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRNaW4oY29uZmlnLm1pbldpZHRoICogem9vbSwgY29uZmlnLm1pbkhlaWdodCAqIHpvb20pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5tYXhXaWR0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTaXplLnNldE1heChjb25maWcubWF4V2lkdGggKiB6b29tLCBjb25maWcubWF4SGVpZ2h0ICogem9vbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhlIHNpemUgdXNlZCBmb3IgdGhlIGNhbnZhcyBzdHlsZSwgZmFjdG9yaW5nIGluIHRoZSBzY2FsZSBtb2RlIGFuZCBwYXJlbnQgYW5kIHpvb20gdmFsdWVcclxuICAgICAgICAvLyAgV2UganVzdCB1c2UgdGhlIHcvaCBoZXJlIGFzIHRoaXMgaXMgd2hhdCBzZXRzIHRoZSBhc3BlY3QgcmF0aW8gKHdoaWNoIGRvZXNuJ3QgdGhlbiBjaGFuZ2UpXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gR2V0U2NyZWVuT3JpZW50YXRpb24od2lkdGgsIGhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIGdhbWUgY2FudmFzLCBpZiBhbnksIGJhc2VkIG9uIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2dldFBhcmVudFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Db3JlLkdhbWVDb25maWd9IGNvbmZpZyAtIFRoZSBHYW1lIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IGNvbmZpZy5wYXJlbnQ7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnQgPT09IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVXNlciBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBhcmVudFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhcmVudCA9IEdldFRhcmdldChwYXJlbnQpO1xyXG4gICAgICAgIHRoaXMucGFyZW50SXNXaW5kb3cgPSAodGhpcy5wYXJlbnQgPT09IGRvY3VtZW50LmJvZHkpO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmV4cGFuZFBhcmVudCAmJiBjb25maWcuc2NhbGVNb2RlICE9PSBDT05TVC5TQ0FMRV9NT0RFLk5PTkUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgRE9NUmVjdCA9IHRoaXMucGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50SXNXaW5kb3cgfHwgRE9NUmVjdC5oZWlnaHQgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuXHJcbiAgICAgICAgICAgICAgICBET01SZWN0ID0gdGhpcy5wYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZSBwYXJlbnQgU1RJTEwgaGFzIG5vIGhlaWdodCwgY2xlYXJseSBubyBDU1NcclxuICAgICAgICAgICAgICAgIC8vICBoYXMgYmVlbiBzZXQgb24gaXQgZXZlbiB0aG91Z2ggd2UgZml4ZWQgdGhlIGJvZHkgOihcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnRJc1dpbmRvdyAmJiBET01SZWN0LmhlaWdodCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFuZCBub3cgZ2V0IHRoZSBmdWxsc2NyZWVuVGFyZ2V0XHJcbiAgICAgICAgaWYgKGNvbmZpZy5mdWxsc2NyZWVuVGFyZ2V0ICYmICF0aGlzLmZ1bGxzY3JlZW5UYXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxzY3JlZW5UYXJnZXQgPSBHZXRUYXJnZXQoY29uZmlnLmZ1bGxzY3JlZW5UYXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBzaXplIG9mIHRoZSBwYXJlbnQgYm91bmRzIGFuZCB1cGRhdGVzIHRoZSBgcGFyZW50U2l6ZWAgY29tcG9uZW50LCBpZiB0aGUgY2FudmFzIGhhcyBhIGRvbSBwYXJlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2dldFBhcmVudEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBhcmVudCBib3VuZHMgaGF2ZSBjaGFuZ2VkIHNpemUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBnZXRQYXJlbnRCb3VuZHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJlbnRTaXplID0gdGhpcy5wYXJlbnRTaXplO1xyXG5cclxuICAgICAgICAvLyBSZWYuIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9oaDc4MTUwOSh2PXZzLjg1KS5hc3B4IGZvciBnZXRCb3VuZGluZ0NsaWVudFJlY3RcclxuXHJcbiAgICAgICAgdmFyIERPTVJlY3QgPSB0aGlzLnBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNXaW5kb3cgJiYgdGhpcy5nYW1lLmRldmljZS5vcy5pT1MpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBET01SZWN0LmhlaWdodCA9IEdldElubmVySGVpZ2h0KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gRE9NUmVjdC53aWR0aCAqIHJlc29sdXRpb247XHJcbiAgICAgICAgdmFyIG5ld0hlaWdodCA9IERPTVJlY3QuaGVpZ2h0ICogcmVzb2x1dGlvbjtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudFNpemUud2lkdGggIT09IG5ld1dpZHRoIHx8IHBhcmVudFNpemUuaGVpZ2h0ICE9PSBuZXdIZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJlbnRTaXplLnNldFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0cyB0byBsb2NrIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgd2ViIGJyb3dzZXIgdXNpbmcgdGhlIFNjcmVlbiBPcmllbnRhdGlvbiBBUEkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgQVBJIGlzIG9ubHkgYXZhaWxhYmxlIG9uIG1vZGVybiBtb2JpbGUgYnJvd3NlcnMuXHJcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NjcmVlbi9sb2NrT3JpZW50YXRpb24gZm9yIGRldGFpbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2xvY2tPcmllbnRhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3JpZW50YXRpb24gLSBUaGUgb3JpZW50YXRpb24geW91J2QgbGlrZSB0byBsb2NrIHRoZSBicm93c2VyIGluLiBTaG91bGQgYmUgYW4gQVBJIHN0cmluZyBzdWNoIGFzICdsYW5kc2NhcGUnLCAnbGFuZHNjYXBlLXByaW1hcnknLCAncG9ydHJhaXQnLCBldGMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb3JpZW50YXRpb24gd2FzIHN1Y2Nlc3NmdWxseSBsb2NrZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBsb2NrT3JpZW50YXRpb246IGZ1bmN0aW9uIChvcmllbnRhdGlvbilcclxuICAgIHtcclxuICAgICAgICB2YXIgbG9jayA9IHNjcmVlbi5sb2NrT3JpZW50YXRpb24gfHwgc2NyZWVuLm1vekxvY2tPcmllbnRhdGlvbiB8fCBzY3JlZW4ubXNMb2NrT3JpZW50YXRpb247XHJcblxyXG4gICAgICAgIGlmIChsb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2sob3JpZW50YXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgc2V0IHRoZSBzaXplIG9mIHRoZSBQYXJlbnQgU2l6ZSBjb21wb25lbnQsIHdoaWNoIGlzIHVzZWQgaW4gc2NhbGluZ1xyXG4gICAgICogYW5kIGNlbnRlcmluZyBjYWxjdWxhdGlvbnMuIFlvdSBvbmx5IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBpZiB5b3UgaGF2ZSBleHBsaWNpdGx5XHJcbiAgICAgKiBkaXNhYmxlZCB0aGUgdXNlIG9mIGEgcGFyZW50IGluIHlvdXIgZ2FtZSBjb25maWcsIGJ1dCBzdGlsbCB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mXHJcbiAgICAgKiBvdGhlciBTY2FsZSBNYW5hZ2VyIGZlYXR1cmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNzZXRQYXJlbnRTaXplXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgcGFyZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBwYXJlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoZSBTY2FsZSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQYXJlbnRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhcmVudFNpemUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgc2V0IGEgbmV3IHNpemUgZm9yIHlvdXIgZ2FtZS5cclxuICAgICAqIFxyXG4gICAgICogSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UncmUgbG9va2luZyB0byBjaGFuZ2UgdGhlIGJhc2Ugc2l6ZSBvZiB5b3VyIGdhbWUgYW5kIGFyZSB1c2luZ1xyXG4gICAgICogb25lIG9mIHRoZSBTY2FsZSBNYW5hZ2VyIHNjYWxpbmcgbW9kZXMsIGkuZS4gYEZJVGAuIElmIHlvdSdyZSB1c2luZyBgTk9ORWAgYW5kIHdpc2ggdG9cclxuICAgICAqIGNoYW5nZSB0aGUgZ2FtZSBhbmQgY2FudmFzIHNpemUgZGlyZWN0bHksIHRoZW4gcGxlYXNlIHVzZSB0aGUgYHJlc2l6ZWAgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3NldEdhbWVTaXplXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgZ2FtZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgZ2FtZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhlIFNjYWxlIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEdhbWVTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXV0b1JvdW5kID0gdGhpcy5hdXRvUm91bmQ7XHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIGlmIChhdXRvUm91bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcHJldmlvdXNXaWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgdmFyIHByZXZpb3VzSGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vICBUaGUgdW4tbW9kaWZpZWQgZ2FtZSBzaXplLCBhcyByZXF1ZXN0ZWQgaW4gdGhlIGdhbWUgY29uZmlnICh0aGUgcmF3IHdpZHRoIC8gaGVpZ2h0KSBhcyB1c2VkIGZvciB3b3JsZCBib3VuZHMsIGV0Y1xyXG4gICAgICAgIHRoaXMuZ2FtZVNpemUucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyAgVGhlIG1vZGlmaWVkIGdhbWUgc2l6ZSwgd2hpY2ggaXMgdGhlIHcvaCAqIHJlc29sdXRpb25cclxuICAgICAgICB0aGlzLmJhc2VTaXplLnJlc2l6ZSh3aWR0aCAqIHJlc29sdXRpb24sIGhlaWdodCAqIHJlc29sdXRpb24pO1xyXG5cclxuICAgICAgICBpZiAoYXV0b1JvdW5kKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU2l6ZS53aWR0aCA9IE1hdGguZmxvb3IodGhpcy5iYXNlU2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVNpemUuaGVpZ2h0ID0gTWF0aC5mbG9vcih0aGlzLmJhc2VTaXplLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhlIHNpemUgdXNlZCBmb3IgdGhlIGNhbnZhcyBzdHlsZSwgZmFjdG9yaW5nIGluIHRoZSBzY2FsZSBtb2RlIGFuZCBwYXJlbnQgYW5kIHpvb20gdmFsdWVcclxuICAgICAgICAvLyAgV2UganVzdCB1c2UgdGhlIHcvaCBoZXJlIGFzIHRoaXMgaXMgd2hhdCBzZXRzIHRoZSBhc3BlY3QgcmF0aW8gKHdoaWNoIGRvZXNuJ3QgdGhlbiBjaGFuZ2UpXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuYmFzZVNpemUud2lkdGg7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5iYXNlU2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2gocHJldmlvdXNXaWR0aCwgcHJldmlvdXNIZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdGhpcyB0byBtb2RpZnkgdGhlIHNpemUgb2YgdGhlIFBoYXNlciBjYW52YXMgZWxlbWVudCBkaXJlY3RseS5cclxuICAgICAqIFlvdSBzaG91bGQgb25seSB1c2UgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBgTk9ORWAgc2NhbGUgbW9kZSxcclxuICAgICAqIGl0IHdpbGwgdXBkYXRlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGNvbXBsZXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIElmIGFsbCB5b3Ugd2FudCB0byBkbyBpcyBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIHBhcmVudCwgc2VlIHRoZSBgc2V0UGFyZW50U2l6ZWAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBhbGwgeW91IHdhbnQgaXMgdG8gY2hhbmdlIHRoZSBiYXNlIHNpemUgb2YgdGhlIGdhbWUsIGJ1dCBzdGlsbCBoYXZlIHRoZSBTY2FsZSBNYW5hZ2VyXHJcbiAgICAgKiBtYW5hZ2UgYWxsIHRoZSBzY2FsaW5nIChpLmUuIHlvdSdyZSAqKm5vdCoqIHVzaW5nIGBOT05FYCksIHRoZW4gc2VlIHRoZSBgc2V0R2FtZVNpemVgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGBnYW1lU2l6ZWAsIGBiYXNlU2l6ZWAgYW5kIGBkaXNwbGF5U2l6ZWAgY29tcG9uZW50cyB0byB0aGUgZ2l2ZW5cclxuICAgICAqIGRpbWVuc2lvbnMuIEl0IHdpbGwgdGhlbiByZXNpemUgdGhlIGNhbnZhcyB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSB2YWx1ZXMgZ2l2ZW4sIGJ5XHJcbiAgICAgKiBkaXJlY3RseSBzZXR0aW5nIHRoZSBwcm9wZXJ0aWVzLiBGaW5hbGx5LCBpZiB5b3UgaGF2ZSBzZXQgdGhlIFNjYWxlIE1hbmFnZXIgem9vbSB2YWx1ZVxyXG4gICAgICogdG8gYW55dGhpbmcgb3RoZXIgdGhhbiAxICh0aGUgZGVmYXVsdCksIGl0IHdpbGwgc2V0IHRoZSBjYW52YXMgQ1NTIHdpZHRoIGFuZCBoZWlnaHQgdG9cclxuICAgICAqIGJlIHRoZSBnaXZlbiBzaXplIG11bHRpcGxpZWQgYnkgdGhlIHpvb20gZmFjdG9yICh0aGUgY2FudmFzIHBpeGVsIHNpemUgcmVtYWlucyB1bnRvdWNoZWQpLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBlbmFibGVkIGBhdXRvQ2VudGVyYCwgaXQgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGB1cGRhdGVDZW50ZXJgIG1ldGhvZCBhbmRcclxuICAgICAqIHRoZSBtYXJnaW5zIGFyZSBzZXQsIGFsbG93aW5nIHRoZSBjYW52YXMgdG8gYmUgY2VudGVyZWQgYmFzZWQgb24gaXRzIHBhcmVudCBlbGVtZW50XHJcbiAgICAgKiBhbG9uZS4gRmluYWxseSwgdGhlIGBkaXNwbGF5U2NhbGVgIGlzIGFkanVzdGVkIGFuZCB0aGUgUkVTSVpFIGV2ZW50IGRpc3BhdGNoZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3Jlc2l6ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjUkVTSVpFXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIGdhbWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIG5ldyBoZWlnaHQgb2YgdGhlIGdhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoZSBTY2FsZSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB6b29tID0gdGhpcy56b29tO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xyXG4gICAgICAgIHZhciBhdXRvUm91bmQgPSB0aGlzLmF1dG9Sb3VuZDtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9Sb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2aW91c1dpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgcHJldmlvdXNIZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSB1bi1tb2RpZmllZCBnYW1lIHNpemUsIGFzIHJlcXVlc3RlZCBpbiB0aGUgZ2FtZSBjb25maWcgKHRoZSByYXcgd2lkdGggLyBoZWlnaHQpIGFzIHVzZWQgZm9yIHdvcmxkIGJvdW5kcywgZXRjXHJcbiAgICAgICAgdGhpcy5nYW1lU2l6ZS5yZXNpemUod2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgbW9kaWZpZWQgZ2FtZSBzaXplLCB3aGljaCBpcyB0aGUgdy9oICogcmVzb2x1dGlvblxyXG4gICAgICAgIHRoaXMuYmFzZVNpemUucmVzaXplKHdpZHRoICogcmVzb2x1dGlvbiwgaGVpZ2h0ICogcmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgIGlmIChhdXRvUm91bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VTaXplLndpZHRoID0gTWF0aC5mbG9vcih0aGlzLmJhc2VTaXplLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU2l6ZS5oZWlnaHQgPSBNYXRoLmZsb29yKHRoaXMuYmFzZVNpemUuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGUgc2l6ZSB1c2VkIGZvciB0aGUgY2FudmFzIHN0eWxlLCBmYWN0b3JpbmcgaW4gdGhlIHNjYWxlIG1vZGUgYW5kIHBhcmVudCBhbmQgem9vbSB2YWx1ZVxyXG4gICAgICAgIC8vICBXZSBqdXN0IHVzZSB0aGUgdy9oIGhlcmUgYXMgdGhpcyBpcyB3aGF0IHNldHMgdGhlIGFzcGVjdCByYXRpbyAod2hpY2ggZG9lc24ndCB0aGVuIGNoYW5nZSlcclxuICAgICAgICB0aGlzLmRpc3BsYXlTaXplLnNldFNpemUoKHdpZHRoICogem9vbSkgKiByZXNvbHV0aW9uLCAoaGVpZ2h0ICogem9vbSkgKiByZXNvbHV0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmJhc2VTaXplLndpZHRoO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuYmFzZVNpemUuaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmNhbnZhcy5zdHlsZTtcclxuXHJcbiAgICAgICAgdmFyIHN0eWxlV2lkdGggPSB3aWR0aCAqIHpvb207XHJcbiAgICAgICAgdmFyIHN0eWxlSGVpZ2h0ID0gaGVpZ2h0ICogem9vbTtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9Sb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0eWxlV2lkdGggPSBNYXRoLmZsb29yKHN0eWxlV2lkdGgpO1xyXG4gICAgICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGguZmxvb3Ioc3R5bGVIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0eWxlV2lkdGggIT09IHdpZHRoIHx8IHN0eWxlSGVpZ2h0ICE9PSBoZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlV2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBzdHlsZUhlaWdodCArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoKHByZXZpb3VzV2lkdGgsIHByZXZpb3VzSGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB6b29tIHZhbHVlIG9mIHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNzZXRab29tXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSBuZXcgem9vbSB2YWx1ZSBvZiB0aGUgZ2FtZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhlIFNjYWxlIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFpvb206IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnpvb20gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9yZXNldFpvb20gPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgem9vbSB0byBiZSB0aGUgbWF4aW11bSBwb3NzaWJsZSBiYXNlZCBvbiB0aGUgX2N1cnJlbnRfIHBhcmVudCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNzZXRNYXhab29tXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhlIFNjYWxlIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE1heFpvb206IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy56b29tID0gdGhpcy5nZXRNYXhab29tKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRab29tID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZnJlc2hlcyB0aGUgaW50ZXJuYWwgc2NhbGUgdmFsdWVzLCBib3VuZHMgc2l6ZXMgYW5kIG9yaWVudGF0aW9uIGNoZWNrcy5cclxuICAgICAqIFxyXG4gICAgICogT25jZSBmaW5pc2hlZCwgZGlzcGF0Y2hlcyB0aGUgcmVzaXplIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2FsZSBNYW5hZ2VyIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93IHNpemUgY2hhbmdlcyxcclxuICAgICAqIGFzIGxvbmcgYXMgaXQgaXMgdXNpbmcgYSBTY2FsZSBNb2RlIG90aGVyIHRoYW4gJ05PTkUnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNyZWZyZXNoXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmV2aW91c1dpZHRoXSAtIFRoZSBwcmV2aW91cyB3aWR0aCBvZiB0aGUgZ2FtZS4gT25seSBzZXQgaWYgdGhlIGdhbWVTaXplIGhhcyBjaGFuZ2VkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmV2aW91c0hlaWdodF0gLSBUaGUgcHJldmlvdXMgaGVpZ2h0IG9mIHRoZSBnYW1lLiBPbmx5IHNldCBpZiB0aGUgZ2FtZVNpemUgaGFzIGNoYW5nZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoZSBTY2FsZSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZWZyZXNoOiBmdW5jdGlvbiAocHJldmlvdXNXaWR0aCwgcHJldmlvdXNIZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzV2lkdGggPT09IHVuZGVmaW5lZCkgeyBwcmV2aW91c1dpZHRoID0gdGhpcy53aWR0aDsgfVxyXG4gICAgICAgIGlmIChwcmV2aW91c0hlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHByZXZpb3VzSGVpZ2h0ID0gdGhpcy5oZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTY2FsZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPcmllbnRhdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlTY2FsZS5zZXQodGhpcy5iYXNlU2l6ZS53aWR0aCAvIHRoaXMuY2FudmFzQm91bmRzLndpZHRoLCB0aGlzLmJhc2VTaXplLmhlaWdodCAvIHRoaXMuY2FudmFzQm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBkb21Db250YWluZXIgPSB0aGlzLmdhbWUuZG9tQ29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoZG9tQ29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU2l6ZS5zZXRDU1MoZG9tQ29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW52YXNTdHlsZSA9IHRoaXMuY2FudmFzLnN0eWxlO1xyXG4gICAgICAgICAgICB2YXIgZG9tU3R5bGUgPSBkb21Db250YWluZXIuc3R5bGU7XHJcblxyXG4gICAgICAgICAgICBkb21TdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHRoaXMuZGlzcGxheVNpemUud2lkdGggLyB0aGlzLmJhc2VTaXplLndpZHRoICsgJywnICsgdGhpcy5kaXNwbGF5U2l6ZS5oZWlnaHQgLyB0aGlzLmJhc2VTaXplLmhlaWdodCArICcpJztcclxuXHJcbiAgICAgICAgICAgIGRvbVN0eWxlLm1hcmdpbkxlZnQgPSBjYW52YXNTdHlsZS5tYXJnaW5MZWZ0O1xyXG4gICAgICAgICAgICBkb21TdHlsZS5tYXJnaW5Ub3AgPSBjYW52YXNTdHlsZS5tYXJnaW5Ub3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFU0laRSwgdGhpcy5nYW1lU2l6ZSwgdGhpcy5iYXNlU2l6ZSwgdGhpcy5kaXNwbGF5U2l6ZSwgdGhpcy5yZXNvbHV0aW9uLCBwcmV2aW91c1dpZHRoLCBwcmV2aW91c0hlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGNoZWNrcyB0aGUgY3VycmVudCBzY3JlZW4gb3JpZW50YXRpb24sIG9ubHkgaWYgdGhlIGludGVybmFsIGNoZWNrIGZsYWcgaXMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgb3JpZW50YXRpb24gaGFzIGNoYW5nZWQgaXQgdXBkYXRlcyB0aGUgb3JpZW50YXRpb24gcHJvcGVydHkgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgb3JpZW50YXRpb24gY2hhbmdlIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciN1cGRhdGVPcmllbnRhdGlvblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjT1JJRU5UQVRJT05fQ0hBTkdFXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU9yaWVudGF0aW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9jaGVja09yaWVudGF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tPcmllbnRhdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5ld09yaWVudGF0aW9uID0gR2V0U2NyZWVuT3JpZW50YXRpb24odGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5ld09yaWVudGF0aW9uICE9PSB0aGlzLm9yaWVudGF0aW9uKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gbmV3T3JpZW50YXRpb247XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuT1JJRU5UQVRJT05fQ0hBTkdFLCBuZXdPcmllbnRhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgbWFuYWdlcyB1cGRhdGluZyB0aGUgc2l6ZSBjb21wb25lbnRzIGJhc2VkIG9uIHRoZSBzY2FsZSBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciN1cGRhdGVTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVTY2FsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmNhbnZhcy5zdHlsZTtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nYW1lU2l6ZS53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nYW1lU2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBzdHlsZVdpZHRoO1xyXG4gICAgICAgIHZhciBzdHlsZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb207XHJcbiAgICAgICAgdmFyIGF1dG9Sb3VuZCA9IHRoaXMuYXV0b1JvdW5kO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFLk5PTkUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTm8gc2NhbGVcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRTaXplKCh3aWR0aCAqIHpvb20pICogcmVzb2x1dGlvbiwgKGhlaWdodCAqIHpvb20pICogcmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgICAgICBzdHlsZVdpZHRoID0gdGhpcy5kaXNwbGF5U2l6ZS53aWR0aCAvIHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHN0eWxlSGVpZ2h0ID0gdGhpcy5kaXNwbGF5U2l6ZS5oZWlnaHQgLyByZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGF1dG9Sb3VuZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGguZmxvb3Ioc3R5bGVXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGguZmxvb3Ioc3R5bGVIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVzZXRab29tKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlV2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gc3R5bGVIZWlnaHQgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0Wm9vbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFLlJFU0laRSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZXNpemUgdG8gbWF0Y2ggcGFyZW50XHJcblxyXG4gICAgICAgICAgICAvLyAgVGhpcyB3aWxsIGNvbnN0cmFpbiB1c2luZyBtaW4vbWF4XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVNpemUuc2V0U2l6ZSh0aGlzLnBhcmVudFNpemUud2lkdGgsIHRoaXMucGFyZW50U2l6ZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nYW1lU2l6ZS5zZXRTaXplKHRoaXMuZGlzcGxheVNpemUud2lkdGgsIHRoaXMuZGlzcGxheVNpemUuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVNpemUuc2V0U2l6ZSh0aGlzLmRpc3BsYXlTaXplLndpZHRoICogcmVzb2x1dGlvbiwgdGhpcy5kaXNwbGF5U2l6ZS5oZWlnaHQgKiByZXNvbHV0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIHN0eWxlV2lkdGggPSB0aGlzLmRpc3BsYXlTaXplLndpZHRoIC8gcmVzb2x1dGlvbjtcclxuICAgICAgICAgICAgc3R5bGVIZWlnaHQgPSB0aGlzLmRpc3BsYXlTaXplLmhlaWdodCAvIHJlc29sdXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoYXV0b1JvdW5kKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVdpZHRoID0gTWF0aC5mbG9vcihzdHlsZVdpZHRoKTtcclxuICAgICAgICAgICAgICAgIHN0eWxlSGVpZ2h0ID0gTWF0aC5mbG9vcihzdHlsZUhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gc3R5bGVXaWR0aDtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gc3R5bGVIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBBbGwgb3RoZXIgc2NhbGUgbW9kZXNcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2l6ZS5zZXRTaXplKHRoaXMucGFyZW50U2l6ZS53aWR0aCwgdGhpcy5wYXJlbnRTaXplLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBzdHlsZVdpZHRoID0gdGhpcy5kaXNwbGF5U2l6ZS53aWR0aCAvIHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHN0eWxlSGVpZ2h0ID0gdGhpcy5kaXNwbGF5U2l6ZS5oZWlnaHQgLyByZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGF1dG9Sb3VuZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGguZmxvb3Ioc3R5bGVXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGguZmxvb3Ioc3R5bGVIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlV2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBzdHlsZUhlaWdodCArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVXBkYXRlIHRoZSBwYXJlbnRTaXplIGluIGNhc2UgdGhlIGNhbnZhcyAvIHN0eWxlIGNoYW5nZSBtb2RpZmllZCBpdFxyXG4gICAgICAgIHRoaXMuZ2V0UGFyZW50Qm91bmRzKCk7XHJcblxyXG4gICAgICAgIC8vICBGaW5hbGx5LCB1cGRhdGUgdGhlIGNlbnRlcmluZ1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2VudGVyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSB6b29tIGZhY3RvciwgYmFzZWQgb24gdGhlIGN1cnJlbnRcclxuICAgICAqIHBhcmVudCBhbmQgZ2FtZSBzaXplcy4gSWYgdGhlIHBhcmVudCBoYXMgbm8gZGltZW5zaW9ucyAoaS5lLiBhbiB1bnN0eWxlZCBkaXYpLFxyXG4gICAgICogb3IgaXMgc21hbGxlciB0aGFuIHRoZSB1bi16b29tZWQgZ2FtZSwgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIGEgdmFsdWUgb2YgMSAobm8gem9vbSlcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZ2V0TWF4Wm9vbVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbWF4aW11bSBwb3NzaWJsZSB6b29tIGZhY3Rvci4gQXQgYSBtaW5pbXVtIHRoaXMgdmFsdWUgaXMgYWx3YXlzIGF0IGxlYXN0IDEuXHJcbiAgICAgKi9cclxuICAgIGdldE1heFpvb206IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHpvb21IID0gU25hcEZsb29yKHRoaXMucGFyZW50U2l6ZS53aWR0aCwgdGhpcy5nYW1lU2l6ZS53aWR0aCwgMCwgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIHpvb21WID0gU25hcEZsb29yKHRoaXMucGFyZW50U2l6ZS5oZWlnaHQsIHRoaXMuZ2FtZVNpemUuaGVpZ2h0LCAwLCB0cnVlKTtcclxuICAgIFxyXG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbih6b29tSCwgem9vbVYpLCAxKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGFuZCB1cGRhdGVzIHRoZSBjYW52YXMgQ1NTIHN0eWxlIGluIG9yZGVyIHRvIGNlbnRlciBpdCB3aXRoaW4gdGhlXHJcbiAgICAgKiBib3VuZHMgb2YgaXRzIHBhcmVudC4gSWYgeW91IGhhdmUgZXhwbGljaXRseSBzZXQgcGFyZW50IHRvIGJlIGBudWxsYCBpbiB5b3VyXHJcbiAgICAgKiBnYW1lIGNvbmZpZyB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgbGlrZWx5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgdW5sZXNzIHlvdSBoYXZlIGNhbGxlZCB0aGVcclxuICAgICAqIGBzZXRQYXJlbnRTaXplYCBtZXRob2QgZmlyc3QuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IHdvcmtzIGJ5IG1vZGlmeWluZyB0aGUgY2FudmFzIENTUyBgbWFyZ2luTGVmdGAgYW5kIGBtYXJnaW5Ub3BgIHByb3BlcnRpZXMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGJ5IHlvdXIgb3duIHN0eWxlIHNoZWV0LCBvciBjb2RlLCB0aGlzIHdpbGwgb3ZlcndyaXRlIHRoZW0uXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHByZXZlbnQgdGhlIFNjYWxlIE1hbmFnZXIgZnJvbSBjZW50ZXJpbmcgdGhlIGNhbnZhcywgZWl0aGVyIGRvIG5vdCBzZXQgdGhlXHJcbiAgICAgKiBgYXV0b0NlbnRlcmAgcHJvcGVydHkgaW4geW91ciBnYW1lIGNvbmZpZywgb3IgbWFrZSBzdXJlIGl0IGlzIHNldCB0byBgTk9fQ0VOVEVSYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjdXBkYXRlQ2VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNlbnRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXV0b0NlbnRlciA9IHRoaXMuYXV0b0NlbnRlcjtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9DZW50ZXIgPT09IENPTlNULkNFTlRFUi5OT19DRU5URVIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcblxyXG4gICAgICAgIHZhciBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gdmFyIHdpZHRoID0gcGFyc2VJbnQoY2FudmFzLnN0eWxlLndpZHRoLCAxMCkgfHwgY2FudmFzLndpZHRoO1xyXG4gICAgICAgIC8vIHZhciBoZWlnaHQgPSBwYXJzZUludChjYW52YXMuc3R5bGUuaGVpZ2h0LCAxMCkgfHwgY2FudmFzLmhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gYm91bmRzLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgb2Zmc2V0WCA9IE1hdGguZmxvb3IoKHRoaXMucGFyZW50U2l6ZS53aWR0aCAtIHdpZHRoKSAvIDIpO1xyXG4gICAgICAgIHZhciBvZmZzZXRZID0gTWF0aC5mbG9vcigodGhpcy5wYXJlbnRTaXplLmhlaWdodCAtIGhlaWdodCkgLyAyKTtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9DZW50ZXIgPT09IENPTlNULkNFTlRFUi5DRU5URVJfSE9SSVpPTlRBTExZKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2Zmc2V0WSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGF1dG9DZW50ZXIgPT09IENPTlNULkNFTlRFUi5DRU5URVJfVkVSVElDQUxMWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9mZnNldFggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3R5bGUubWFyZ2luTGVmdCA9IG9mZnNldFggKyAncHgnO1xyXG4gICAgICAgIHN0eWxlLm1hcmdpblRvcCA9IG9mZnNldFkgKyAncHgnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGBjYW52YXNCb3VuZHNgIHJlY3RhbmdsZSB0byBtYXRjaCB0aGUgYm91bmRpbmcgY2xpZW50IHJlY3RhbmdsZSBvZiB0aGVcclxuICAgICAqIGNhbnZhcyBlbGVtZW50IGJlaW5nIHVzZWQgdG8gdHJhY2sgaW5wdXQgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciN1cGRhdGVCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQm91bmRzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLmNhbnZhc0JvdW5kcztcclxuICAgICAgICB2YXIgY2xpZW50UmVjdCA9IHRoaXMuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBib3VuZHMueCA9IGNsaWVudFJlY3QubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgMCkgLSAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnQgfHwgMCk7XHJcbiAgICAgICAgYm91bmRzLnkgPSBjbGllbnRSZWN0LnRvcCArICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgMCkgLSAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcCB8fCAwKTtcclxuICAgICAgICBib3VuZHMud2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xyXG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm1zIHRoZSBwYWdlWCB2YWx1ZSBpbnRvIHRoZSBzY2FsZWQgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgU2NhbGUgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjdHJhbnNmb3JtWFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlWCAtIFRoZSBET00gcGFnZVggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHJhbnNsYXRlZCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtWDogZnVuY3Rpb24gKHBhZ2VYKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAocGFnZVggLSB0aGlzLmNhbnZhc0JvdW5kcy5sZWZ0KSAqIHRoaXMuZGlzcGxheVNjYWxlLng7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtcyB0aGUgcGFnZVkgdmFsdWUgaW50byB0aGUgc2NhbGVkIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3RyYW5zZm9ybVlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVkgLSBUaGUgRE9NIHBhZ2VZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRyYW5zbGF0ZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVk6IGZ1bmN0aW9uIChwYWdlWSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHBhZ2VZIC0gdGhpcy5jYW52YXNCb3VuZHMudG9wKSAqIHRoaXMuZGlzcGxheVNjYWxlLnk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBicm93c2VyIHRvIGFzayBpdCB0byBnbyBpbiB0byBmdWxsIHNjcmVlbiBtb2RlLCB1c2luZyB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GdWxsc2NyZWVuX0FQSSBGdWxsc2NyZWVuIEFQSX0uXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhpcywgYSBgRlVMTFNDUkVFTl9VTlNVUFBPUlRFRGAgZXZlbnQgd2lsbCBiZSBlbWl0dGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBfbXVzdF8gYmUgY2FsbGVkIGZyb20gYSB1c2VyLWlucHV0IGdlc3R1cmUsIHN1Y2ggYXMgYHBvaW50ZXJ1cGAuIFlvdSBjYW5ub3QgbGF1bmNoXHJcbiAgICAgKiBnYW1lcyBmdWxsc2NyZWVuIHdpdGhvdXQgdGhpcywgYXMgbW9zdCBicm93c2VycyBibG9jayBpdC4gR2FtZXMgd2l0aGluIGFuIGlmcmFtZSB3aWxsIGFsc28gYmUgYmxvY2tlZFxyXG4gICAgICogZnJvbSBmdWxsc2NyZWVuIHVubGVzcyB0aGUgaWZyYW1lIGhhcyB0aGUgYGFsbG93ZnVsbHNjcmVlbmAgYXR0cmlidXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBPbiB0b3VjaCBkZXZpY2VzLCBzdWNoIGFzIEFuZHJvaWQgYW5kIGlPUyBTYWZhcmksIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBgcG9pbnRlcnVwYCBhbmQgTk9UIGBwb2ludGVyZG93bmAsXHJcbiAgICAgKiBvdGhlcndpc2UgdGhlIHJlcXVlc3Qgd2lsbCBmYWlsIHVubGVzcyB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggeW91ciBnYW1lIGlzIGVtYmVkZGVkIGhhcyBhbHJlYWR5IHJlY2VpdmVkXHJcbiAgICAgKiBzb21lIGZvcm0gb2YgdG91Y2ggaW5wdXQsIHdoaWNoIHlvdSBjYW5ub3QgZ3VhcmFudGVlLiBBY3RpdmF0aW5nIGZ1bGxzY3JlZW4gdmlhIGBwb2ludGVydXBgIGNpcmN1bXZlbnRzXHJcbiAgICAgKiB0aGlzIGlzc3VlLlxyXG4gICAgICogXHJcbiAgICAgKiBQZXJmb3JtaW5nIGFuIGFjdGlvbiB0aGF0IG5hdmlnYXRlcyB0byBhbm90aGVyIHBhZ2UsIG9yIG9wZW5zIGFub3RoZXIgdGFiLCB3aWxsIGF1dG9tYXRpY2FsbHkgY2FuY2VsXHJcbiAgICAgKiBmdWxsc2NyZWVuIG1vZGUsIGFzIHdpbGwgdGhlIHVzZXIgcHJlc3NpbmcgdGhlIEVTQyBrZXkuIFRvIGNhbmNlbCBmdWxsc2NyZWVuIG1vZGUgZGlyZWN0bHkgZnJvbSB5b3VyIGdhbWUsXHJcbiAgICAgKiBpLmUuIGJ5IGNsaWNraW5nIGFuIGljb24sIGNhbGwgdGhlIGBzdG9wRnVsbHNjcmVlbmAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBBIGJyb3dzZXIgY2FuIG9ubHkgc2VuZCBvbmUgRE9NIGVsZW1lbnQgaW50byBmdWxsc2NyZWVuLiBZb3UgY2FuIGNvbnRyb2wgd2hpY2ggZWxlbWVudCB0aGlzIGlzIGJ5XHJcbiAgICAgKiBzZXR0aW5nIHRoZSBgZnVsbHNjcmVlblRhcmdldGAgcHJvcGVydHkgaW4geW91ciBnYW1lIGNvbmZpZywgb3IgY2hhbmdpbmcgdGhlIHByb3BlcnR5IGluIHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICogTm90ZSB0aGF0IHRoZSBnYW1lIGNhbnZhcyBfbXVzdF8gYmUgYSBjaGlsZCBvZiB0aGUgdGFyZ2V0LiBJZiB5b3UgZG8gbm90IGdpdmUgYSB0YXJnZXQsIFBoYXNlciB3aWxsXHJcbiAgICAgKiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIGJsYW5rIGA8ZGl2PmAgZWxlbWVudCBhbmQgbW92ZSB0aGUgY2FudmFzIGludG8gaXQsIGJlZm9yZSBnb2luZyBmdWxsc2NyZWVuLlxyXG4gICAgICogV2hlbiBpdCBsZWF2ZXMgZnVsbHNjcmVlbiwgdGhlIGRpdiB3aWxsIGJlIHJlbW92ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3N0YXJ0RnVsbHNjcmVlblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjRU5URVJfRlVMTFNDUkVFTlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjRlVMTFNDUkVFTl9GQUlMRURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI0ZVTExTQ1JFRU5fVU5TVVBQT1JURURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI1JFU0laRVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2Z1bGxzY3JlZW5PcHRpb25zXSAtIFRoZSBGdWxsc2NyZWVuT3B0aW9ucyBkaWN0aW9uYXJ5IGlzIHVzZWQgdG8gcHJvdmlkZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2hlbiBlbnRlcmluZyBmdWxsIHNjcmVlbi5cclxuICAgICAqL1xyXG4gICAgc3RhcnRGdWxsc2NyZWVuOiBmdW5jdGlvbiAoZnVsbHNjcmVlbk9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZ1bGxzY3JlZW5PcHRpb25zID09PSB1bmRlZmluZWQpIHsgZnVsbHNjcmVlbk9wdGlvbnMgPSB7IG5hdmlnYXRpb25VSTogJ2hpZGUnIH07IH1cclxuXHJcbiAgICAgICAgdmFyIGZ1bGxzY3JlZW4gPSB0aGlzLmZ1bGxzY3JlZW47XHJcblxyXG4gICAgICAgIGlmICghZnVsbHNjcmVlbi5hdmFpbGFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZVTExTQ1JFRU5fVU5TVVBQT1JURUQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFmdWxsc2NyZWVuLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmc1RhcmdldCA9IHRoaXMuZ2V0RnVsbHNjcmVlblRhcmdldCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdGVkRnVsbHNjcmVlbkNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnNQcm9taXNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGZ1bGxzY3JlZW4ua2V5Ym9hcmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZzUHJvbWlzZSA9IGZzVGFyZ2V0W2Z1bGxzY3JlZW4ucmVxdWVzdF0oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmc1Byb21pc2UgPSBmc1RhcmdldFtmdWxsc2NyZWVuLnJlcXVlc3RdKGZ1bGxzY3JlZW5PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZzUHJvbWlzZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnNQcm9taXNlLnRoZW4odGhpcy5mdWxsc2NyZWVuU3VjY2Vzc0hhbmRsZXIuYmluZCh0aGlzKSkuY2F0Y2godGhpcy5mdWxsc2NyZWVuRXJyb3JIYW5kbGVyLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZ1bGxzY3JlZW4uYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxzY3JlZW5TdWNjZXNzSGFuZGxlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsc2NyZWVuRXJyb3JIYW5kbGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJyb3dzZXIgaGFzIHN1Y2Nlc3NmdWxseSBlbnRlcmVkIGZ1bGxzY3JlZW4gbW9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjZnVsbHNjcmVlblN1Y2Nlc3NIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjRU5URVJfRlVMTFNDUkVFTlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjUkVTSVpFXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIGZ1bGxzY3JlZW5TdWNjZXNzSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdldFBhcmVudEJvdW5kcygpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5FTlRFUl9GVUxMU0NSRUVOKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYnJvd3NlciBmYWlsZWQgdG8gZW50ZXIgZnVsbHNjcmVlbiBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNmdWxsc2NyZWVuRXJyb3JIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2FsZS5FdmVudHMjRlVMTFNDUkVFTl9GQUlMRURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI1JFU0laRVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXJyb3IgLSBUaGUgRE9NIGVycm9yIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBmdWxsc2NyZWVuRXJyb3JIYW5kbGVyOiBmdW5jdGlvbiAoZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGdWxsc2NyZWVuVGFyZ2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuRlVMTFNDUkVFTl9GQUlMRUQsIGVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBnZXRzIHRoZSB0YXJnZXQgZWxlbWVudCB0aGF0IGlzIHVzZWQgd2hlbiBlbnRlcmluZyBmdWxsc2NyZWVuIG1vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2dldEZ1bGxzY3JlZW5UYXJnZXRcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgZnVsbHNjcmVlbiB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgZ2V0RnVsbHNjcmVlblRhcmdldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZnVsbHNjcmVlblRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmc1RhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICAgICAgICAgICAgZnNUYXJnZXQuc3R5bGUubWFyZ2luID0gJzAnO1xyXG4gICAgICAgICAgICBmc1RhcmdldC5zdHlsZS5wYWRkaW5nID0gJzAnO1xyXG4gICAgICAgICAgICBmc1RhcmdldC5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgZnNUYXJnZXQuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mdWxsc2NyZWVuVGFyZ2V0ID0gZnNUYXJnZXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkRnVsbHNjcmVlblRhcmdldCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fY3JlYXRlZEZ1bGxzY3JlZW5UYXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FudmFzUGFyZW50ID0gdGhpcy5jYW52YXMucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGNhbnZhc1BhcmVudC5pbnNlcnRCZWZvcmUodGhpcy5mdWxsc2NyZWVuVGFyZ2V0LCB0aGlzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZ1bGxzY3JlZW5UYXJnZXQuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVsbHNjcmVlblRhcmdldDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBmdWxsc2NyZWVuIHRhcmdldCB0aGF0IHdhcyBhZGRlZCB0byB0aGUgRE9NLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNyZW1vdmVGdWxsc2NyZWVuVGFyZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUZ1bGxzY3JlZW5UYXJnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NyZWF0ZWRGdWxsc2NyZWVuVGFyZ2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZzVGFyZ2V0ID0gdGhpcy5mdWxsc2NyZWVuVGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzVGFyZ2V0ICYmIGZzVGFyZ2V0LnBhcmVudE5vZGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBmc1RhcmdldC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy5jYW52YXMsIGZzVGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZnNUYXJnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBjYW5jZWwgZnVsbHNjcmVlbiBtb2RlLCBpZiB0aGUgYnJvd3NlciBoYXMgZW50ZXJlZCBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjc3RvcEZ1bGxzY3JlZW5cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI0xFQVZFX0ZVTExTQ1JFRU5cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NhbGUuRXZlbnRzI0ZVTExTQ1JFRU5fVU5TVVBQT1JURURcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgc3RvcEZ1bGxzY3JlZW46IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZ1bGxzY3JlZW4gPSB0aGlzLmZ1bGxzY3JlZW47XHJcblxyXG4gICAgICAgIGlmICghZnVsbHNjcmVlbi5hdmFpbGFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZVTExTQ1JFRU5fVU5TVVBQT1JURUQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZ1bGxzY3JlZW4uYWN0aXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdGVkRnVsbHNjcmVlbkNoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudFtmdWxsc2NyZWVuLmNhbmNlbF0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnVsbHNjcmVlblRhcmdldCgpO1xyXG5cclxuICAgICAgICAvLyAgR2V0IHRoZSBwYXJlbnQgc2l6ZSBhZ2FpbiBhcyBpdCB3aWxsIGhhdmUgY2hhbmdlZFxyXG4gICAgICAgIHRoaXMuZ2V0UGFyZW50Qm91bmRzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuTEVBVkVfRlVMTFNDUkVFTik7XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZXMgdGhlIGZ1bGxzY3JlZW4gbW9kZS4gSWYgYWxyZWFkeSBpbiBmdWxsc2NyZWVuLCBjYWxsaW5nIHRoaXMgd2lsbCBjYW5jZWwgaXQuXHJcbiAgICAgKiBJZiBub3QgaW4gZnVsbHNjcmVlbiwgdGhpcyB3aWxsIHJlcXVlc3QgdGhlIGJyb3dzZXIgdG8gZW50ZXIgZnVsbHNjcmVlbiBtb2RlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMsIGEgYEZVTExTQ1JFRU5fVU5TVVBQT1JURURgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgX211c3RfIGJlIGNhbGxlZCBmcm9tIGEgdXNlci1pbnB1dCBnZXN0dXJlLCBzdWNoIGFzIGBwb2ludGVyZG93bmAuIFlvdSBjYW5ub3QgbGF1bmNoXHJcbiAgICAgKiBnYW1lcyBmdWxsc2NyZWVuIHdpdGhvdXQgdGhpcywgYXMgbW9zdCBicm93c2VycyBibG9jayBpdC4gR2FtZXMgd2l0aGluIGFuIGlmcmFtZSB3aWxsIGFsc28gYmUgYmxvY2tlZFxyXG4gICAgICogZnJvbSBmdWxsc2NyZWVuIHVubGVzcyB0aGUgaWZyYW1lIGhhcyB0aGUgYGFsbG93ZnVsbHNjcmVlbmAgYXR0cmlidXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciN0b2dnbGVGdWxsc2NyZWVuXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNFTlRFUl9GVUxMU0NSRUVOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNMRUFWRV9GVUxMU0NSRUVOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNGVUxMU0NSRUVOX1VOU1VQUE9SVEVEXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtmdWxsc2NyZWVuT3B0aW9uc10gLSBUaGUgRnVsbHNjcmVlbk9wdGlvbnMgZGljdGlvbmFyeSBpcyB1c2VkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoZW4gZW50ZXJpbmcgZnVsbCBzY3JlZW4uXHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZUZ1bGxzY3JlZW46IGZ1bmN0aW9uIChmdWxsc2NyZWVuT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mdWxsc2NyZWVuLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydEZ1bGxzY3JlZW4oZnVsbHNjcmVlbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBzdGFydHMgdGhlIGRpZmZlcmVudCBET00gZXZlbnQgbGlzdGVuZXJzIHJ1bm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI3N0YXJ0TGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0TGlzdGVuZXJzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xyXG5cclxuICAgICAgICBsaXN0ZW5lcnMub3JpZW50YXRpb25DaGFuZ2UgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuX2NoZWNrT3JpZW50YXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICBfdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGlzdGVuZXJzLndpbmRvd1Jlc2l6ZSA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gIE9ubHkgZGlzcGF0Y2hlZCBvbiBtb2JpbGUgZGV2aWNlc1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIGxpc3RlbmVycy5vcmllbnRhdGlvbkNoYW5nZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbGlzdGVuZXJzLndpbmRvd1Jlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mdWxsc2NyZWVuLmF2YWlsYWJsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVycy5mdWxsU2NyZWVuQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMub25GdWxsU2NyZWVuQ2hhbmdlKGV2ZW50KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxpc3RlbmVycy5mdWxsU2NyZWVuRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5vbkZ1bGxTY3JlZW5FcnJvcihldmVudCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgdmVuZG9ycyA9IFsgJ3dlYmtpdCcsICdtb3onLCAnJyBdO1xyXG5cclxuICAgICAgICAgICAgdmVuZG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIocHJlZml4ICsgJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBsaXN0ZW5lcnMuZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihwcmVmaXggKyAnZnVsbHNjcmVlbmVycm9yJywgbGlzdGVuZXJzLmZ1bGxTY3JlZW5FcnJvciwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vICBNUyBTcGVjaWZpY1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdNU0Z1bGxzY3JlZW5DaGFuZ2UnLCBsaXN0ZW5lcnMuZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdNU0Z1bGxzY3JlZW5FcnJvcicsIGxpc3RlbmVycy5mdWxsU2NyZWVuRXJyb3IsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBmdWxsc2NyZWVuY2hhbmdlIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIERPTS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjb25GdWxsU2NyZWVuQ2hhbmdlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIG9uRnVsbFNjcmVlbkNoYW5nZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAgVGhleSBwcmVzc2VkIEVTQyB3aGlsZSBpbiBmdWxsc2NyZWVuIG1vZGVcclxuICAgICAgICBpZiAoIXRoaXMuX3JlcXVlc3RlZEZ1bGxzY3JlZW5DaGFuZ2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRGdWxsc2NyZWVuQ2hhbmdlID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBmdWxsc2NyZWVuZXJyb3IgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgRE9NLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNvbkZ1bGxTY3JlZW5FcnJvclxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBvbkZ1bGxTY3JlZW5FcnJvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZ1bGxzY3JlZW5UYXJnZXQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QsIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnYW1lIHN0ZXAuXHJcbiAgICAgKiBNb25pdG9ycyB0aGUgZWxhcHNlZCB0aW1lIGFuZCByZXNpemUgaW50ZXJ2YWwgdG8gc2VlIGlmIGEgcGFyZW50IGJvdW5kcyBjaGVjayBuZWVkcyB0byB0YWtlIHBsYWNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNzdGVwXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgdGltZSB2YWx1ZSBmcm9tIHRoZSBtb3N0IHJlY2VudCBHYW1lIHN0ZXAuIFR5cGljYWxseSBhIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciB2YWx1ZSwgb3IgRGF0ZS5ub3coKS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB2YWx1ZSBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBzbW9vdGhlZCB0byBhdm9pZCBkZWx0YSBzcGlrZXMgYnkgdGhlIFRpbWVTdGVwIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBzdGVwOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xhc3RDaGVjayArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgdGhpcy5fbGFzdENoZWNrID4gdGhpcy5yZXNpemVJbnRlcnZhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcmVudCBib3VuZHMgaGF2ZSBjaGFuZ2VkIHNpemVcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UGFyZW50Qm91bmRzKCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3RDaGVjayA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGFsbCBET00gZXZlbnQgbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNzdG9wTGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xyXG5cclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBsaXN0ZW5lcnMub3JpZW50YXRpb25DaGFuZ2UsIGZhbHNlKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbGlzdGVuZXJzLndpbmRvd1Jlc2l6ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICB2YXIgdmVuZG9ycyA9IFsgJ3dlYmtpdCcsICdtb3onLCAnJyBdO1xyXG5cclxuICAgICAgICB2ZW5kb3JzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIocHJlZml4ICsgJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBsaXN0ZW5lcnMuZnVsbFNjcmVlbkNoYW5nZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHByZWZpeCArICdmdWxsc2NyZWVuZXJyb3InLCBsaXN0ZW5lcnMuZnVsbFNjcmVlbkVycm9yLCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vICBNUyBTcGVjaWZpY1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ01TRnVsbHNjcmVlbkNoYW5nZScsIGxpc3RlbmVycy5mdWxsU2NyZWVuQ2hhbmdlLCBmYWxzZSk7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignTVNGdWxsc2NyZWVuRXJyb3InLCBsaXN0ZW5lcnMuZnVsbFNjcmVlbkVycm9yLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBTY2FsZSBNYW5hZ2VyLCByZWxlYXNpbmcgYWxsIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzLlxyXG4gICAgICogT25jZSBkZXN0cm95ZWQsIHRoZSBTY2FsZSBNYW5hZ2VyIGNhbm5vdCBiZSB1c2VkIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzQm91bmRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuVGFyZ2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRTaXplLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmdhbWVTaXplLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmJhc2VTaXplLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlTaXplLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgYnJvd3NlciBjdXJyZW50bHkgaW4gZnVsbHNjcmVlbiBtb2RlIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2lzRnVsbHNjcmVlblxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgaXNGdWxsc2NyZWVuOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZ1bGxzY3JlZW4uYWN0aXZlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBnYW1lIHdpZHRoLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB0aGUgc2l6ZSBnaXZlbiBpbiB0aGUgZ2FtZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjd2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2FtZVNpemUud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhbWUgaGVpZ2h0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB0aGUgc2l6ZSBnaXZlbiBpbiB0aGUgZ2FtZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXIjaGVpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nYW1lU2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhlIGRldmljZSBpbiBhIHBvcnRyYWl0IG9yaWVudGF0aW9uIGFzIHJlcG9ydGVkIGJ5IHRoZSBPcmllbnRhdGlvbiBBUEk/XHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzdWFsbHkgb25seSBhdmFpbGFibGUgb24gbW9iaWxlIGRldmljZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNpc1BvcnRyYWl0XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBpc1BvcnRyYWl0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5vcmllbnRhdGlvbiA9PT0gQ09OU1QuT1JJRU5UQVRJT04uUE9SVFJBSVQpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoZSBkZXZpY2UgaW4gYSBsYW5kc2NhcGUgb3JpZW50YXRpb24gYXMgcmVwb3J0ZWQgYnkgdGhlIE9yaWVudGF0aW9uIEFQST9cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXN1YWxseSBvbmx5IGF2YWlsYWJsZSBvbiBtb2JpbGUgZGV2aWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2lzTGFuZHNjYXBlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBpc0xhbmRzY2FwZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMub3JpZW50YXRpb24gPT09IENPTlNULk9SSUVOVEFUSU9OLkxBTkRTQ0FQRSk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJlIHRoZSBnYW1lIGRpbWVuc2lvbnMgcG9ydHJhaXQ/IChpLmUuIHRhbGxlciB0aGFuIHRoZXkgYXJlIHdpZGUpXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgZGlmZmVyZW50IHRvIHRoZSBkZXZpY2UgaXRzZWxmIGJlaW5nIGluIGEgcG9ydHJhaXQgb3JpZW50YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlciNpc0dhbWVQb3J0cmFpdFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgaXNHYW1lUG9ydHJhaXQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmhlaWdodCA+IHRoaXMud2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyZSB0aGUgZ2FtZSBkaW1lbnNpb25zIGxhbmRzY2FwZT8gKGkuZS4gd2lkZXIgdGhhbiB0aGV5IGFyZSB0YWxsKVxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGRpZmZlcmVudCB0byB0aGUgZGV2aWNlIGl0c2VsZiBiZWluZyBpbiBhIGxhbmRzY2FwZSBvcmllbnRhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyI2lzR2FtZUxhbmRzY2FwZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgaXNHYW1lTGFuZHNjYXBlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy53aWR0aCA+IHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2FsZU1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/ScaleManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/const/CENTER_CONST.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/scale/const/CENTER_CONST.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for centering the game canvas.\r\n * \r\n * @namespace Phaser.Scale.Center\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for centering the game canvas.\r\n * \r\n * To find out what each mode does please see [Phaser.Scale.Center]{@link Phaser.Scale.Center}.\r\n * \r\n * @typedef {Phaser.Scale.Center} Phaser.Scale.CenterType\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * The game canvas is not centered within the parent by Phaser.\r\n     * You can still center it yourself via CSS.\r\n     * \r\n     * @name Phaser.Scale.Center.NO_CENTER\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    NO_CENTER: 0,\r\n\r\n    /**\r\n     * The game canvas is centered both horizontally and vertically within the parent.\r\n     * To do this, the parent has to have a bounds that can be calculated and not be empty.\r\n     * \r\n     * Centering is achieved by setting the margin left and top properties of the\r\n     * game canvas, and does not factor in any other CSS styles you may have applied.\r\n     * \r\n     * @name Phaser.Scale.Center.CENTER_BOTH\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    CENTER_BOTH: 1,\r\n\r\n    /**\r\n     * The game canvas is centered horizontally within the parent.\r\n     * To do this, the parent has to have a bounds that can be calculated and not be empty.\r\n     * \r\n     * Centering is achieved by setting the margin left and top properties of the\r\n     * game canvas, and does not factor in any other CSS styles you may have applied.\r\n     * \r\n     * @name Phaser.Scale.Center.CENTER_HORIZONTALLY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    CENTER_HORIZONTALLY: 2,\r\n\r\n    /**\r\n     * The game canvas is centered both vertically within the parent.\r\n     * To do this, the parent has to have a bounds that can be calculated and not be empty.\r\n     * \r\n     * Centering is achieved by setting the margin left and top properties of the\r\n     * game canvas, and does not factor in any other CSS styles you may have applied.\r\n     * \r\n     * @name Phaser.Scale.Center.CENTER_VERTICALLY\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    CENTER_VERTICALLY: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9jb25zdC9DRU5URVJfQ09OU1QuanM/Mzg0MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLDBCQUEwQjtBQUM5RjtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvY29uc3QvQ0VOVEVSX0NPTlNULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUGhhc2VyIFNjYWxlIE1hbmFnZXIgY29uc3RhbnRzIGZvciBjZW50ZXJpbmcgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU2NhbGUuQ2VudGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU2NhbGVcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTWFuYWdlciBjb25zdGFudHMgZm9yIGNlbnRlcmluZyB0aGUgZ2FtZSBjYW52YXMuXHJcbiAqIFxyXG4gKiBUbyBmaW5kIG91dCB3aGF0IGVhY2ggbW9kZSBkb2VzIHBsZWFzZSBzZWUgW1BoYXNlci5TY2FsZS5DZW50ZXJde0BsaW5rIFBoYXNlci5TY2FsZS5DZW50ZXJ9LlxyXG4gKiBcclxuICogQHR5cGVkZWYge1BoYXNlci5TY2FsZS5DZW50ZXJ9IFBoYXNlci5TY2FsZS5DZW50ZXJUeXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU2NhbGVcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhbWUgY2FudmFzIGlzIG5vdCBjZW50ZXJlZCB3aXRoaW4gdGhlIHBhcmVudCBieSBQaGFzZXIuXHJcbiAgICAgKiBZb3UgY2FuIHN0aWxsIGNlbnRlciBpdCB5b3Vyc2VsZiB2aWEgQ1NTLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuQ2VudGVyLk5PX0NFTlRFUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgTk9fQ0VOVEVSOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhbWUgY2FudmFzIGlzIGNlbnRlcmVkIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IHdpdGhpbiB0aGUgcGFyZW50LlxyXG4gICAgICogVG8gZG8gdGhpcywgdGhlIHBhcmVudCBoYXMgdG8gaGF2ZSBhIGJvdW5kcyB0aGF0IGNhbiBiZSBjYWxjdWxhdGVkIGFuZCBub3QgYmUgZW1wdHkuXHJcbiAgICAgKiBcclxuICAgICAqIENlbnRlcmluZyBpcyBhY2hpZXZlZCBieSBzZXR0aW5nIHRoZSBtYXJnaW4gbGVmdCBhbmQgdG9wIHByb3BlcnRpZXMgb2YgdGhlXHJcbiAgICAgKiBnYW1lIGNhbnZhcywgYW5kIGRvZXMgbm90IGZhY3RvciBpbiBhbnkgb3RoZXIgQ1NTIHN0eWxlcyB5b3UgbWF5IGhhdmUgYXBwbGllZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLkNlbnRlci5DRU5URVJfQk9USFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgQ0VOVEVSX0JPVEg6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ2FtZSBjYW52YXMgaXMgY2VudGVyZWQgaG9yaXpvbnRhbGx5IHdpdGhpbiB0aGUgcGFyZW50LlxyXG4gICAgICogVG8gZG8gdGhpcywgdGhlIHBhcmVudCBoYXMgdG8gaGF2ZSBhIGJvdW5kcyB0aGF0IGNhbiBiZSBjYWxjdWxhdGVkIGFuZCBub3QgYmUgZW1wdHkuXHJcbiAgICAgKiBcclxuICAgICAqIENlbnRlcmluZyBpcyBhY2hpZXZlZCBieSBzZXR0aW5nIHRoZSBtYXJnaW4gbGVmdCBhbmQgdG9wIHByb3BlcnRpZXMgb2YgdGhlXHJcbiAgICAgKiBnYW1lIGNhbnZhcywgYW5kIGRvZXMgbm90IGZhY3RvciBpbiBhbnkgb3RoZXIgQ1NTIHN0eWxlcyB5b3UgbWF5IGhhdmUgYXBwbGllZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLkNlbnRlci5DRU5URVJfSE9SSVpPTlRBTExZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBDRU5URVJfSE9SSVpPTlRBTExZOiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhbWUgY2FudmFzIGlzIGNlbnRlcmVkIGJvdGggdmVydGljYWxseSB3aXRoaW4gdGhlIHBhcmVudC5cclxuICAgICAqIFRvIGRvIHRoaXMsIHRoZSBwYXJlbnQgaGFzIHRvIGhhdmUgYSBib3VuZHMgdGhhdCBjYW4gYmUgY2FsY3VsYXRlZCBhbmQgbm90IGJlIGVtcHR5LlxyXG4gICAgICogXHJcbiAgICAgKiBDZW50ZXJpbmcgaXMgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGUgbWFyZ2luIGxlZnQgYW5kIHRvcCBwcm9wZXJ0aWVzIG9mIHRoZVxyXG4gICAgICogZ2FtZSBjYW52YXMsIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IG90aGVyIENTUyBzdHlsZXMgeW91IG1heSBoYXZlIGFwcGxpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5DZW50ZXIuQ0VOVEVSX1ZFUlRJQ0FMTFlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIENFTlRFUl9WRVJUSUNBTExZOiAzXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/const/CENTER_CONST.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/const/ORIENTATION_CONST.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/scale/const/ORIENTATION_CONST.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for orientation.\r\n * \r\n * @namespace Phaser.Scale.Orientation\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for orientation.\r\n * \r\n * To find out what each mode does please see [Phaser.Scale.Orientation]{@link Phaser.Scale.Orientation}.\r\n * \r\n * @typedef {Phaser.Scale.Orientation} Phaser.Scale.OrientationType\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * A landscape orientation.\r\n     * \r\n     * @name Phaser.Scale.Orientation.LANDSCAPE\r\n     * @type {string}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    LANDSCAPE: 'landscape-primary',\r\n\r\n    /**\r\n     * A portrait orientation.\r\n     * \r\n     * @name Phaser.Scale.Orientation.PORTRAIT\r\n     * @type {string}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    PORTRAIT: 'portrait-primary'\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9jb25zdC9PUklFTlRBVElPTl9DT05TVC5qcz8zZDM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUUsK0JBQStCO0FBQ3hHO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvY29uc3QvT1JJRU5UQVRJT05fQ09OU1QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTWFuYWdlciBjb25zdGFudHMgZm9yIG9yaWVudGF0aW9uLlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU2NhbGUuT3JpZW50YXRpb25cclxuICogQG1lbWJlcm9mIFBoYXNlci5TY2FsZVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBoYXNlciBTY2FsZSBNYW5hZ2VyIGNvbnN0YW50cyBmb3Igb3JpZW50YXRpb24uXHJcbiAqIFxyXG4gKiBUbyBmaW5kIG91dCB3aGF0IGVhY2ggbW9kZSBkb2VzIHBsZWFzZSBzZWUgW1BoYXNlci5TY2FsZS5PcmllbnRhdGlvbl17QGxpbmsgUGhhc2VyLlNjYWxlLk9yaWVudGF0aW9ufS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtQaGFzZXIuU2NhbGUuT3JpZW50YXRpb259IFBoYXNlci5TY2FsZS5PcmllbnRhdGlvblR5cGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5TY2FsZVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGxhbmRzY2FwZSBvcmllbnRhdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLk9yaWVudGF0aW9uLkxBTkRTQ0FQRVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBMQU5EU0NBUEU6ICdsYW5kc2NhcGUtcHJpbWFyeScsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHBvcnRyYWl0IG9yaWVudGF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuT3JpZW50YXRpb24uUE9SVFJBSVRcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgUE9SVFJBSVQ6ICdwb3J0cmFpdC1wcmltYXJ5J1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/const/ORIENTATION_CONST.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/const/SCALE_MODE_CONST.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/scale/const/SCALE_MODE_CONST.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for the different scale modes available.\r\n * \r\n * @namespace Phaser.Scale.ScaleModes\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for the different scale modes available.\r\n * \r\n * To find out what each mode does please see [Phaser.Scale.ScaleModes]{@link Phaser.Scale.ScaleModes}.\r\n * \r\n * @typedef {Phaser.Scale.ScaleModes} Phaser.Scale.ScaleModeType\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * No scaling happens at all. The canvas is set to the size given in the game config and Phaser doesn't change it\r\n     * again from that point on. If you change the canvas size, either via CSS, or directly via code, then you need\r\n     * to call the Scale Managers `resize` method to give the new dimensions, or input events will stop working.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.NONE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    NONE: 0,\r\n\r\n    /**\r\n     * The height is automatically adjusted based on the width.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.WIDTH_CONTROLS_HEIGHT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    WIDTH_CONTROLS_HEIGHT: 1,\r\n\r\n    /**\r\n     * The width is automatically adjusted based on the height.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.HEIGHT_CONTROLS_WIDTH\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    HEIGHT_CONTROLS_WIDTH: 2,\r\n\r\n    /**\r\n     * The width and height are automatically adjusted to fit inside the given target area,\r\n     * while keeping the aspect ratio. Depending on the aspect ratio there may be some space\r\n     * inside the area which is not covered.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.FIT\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    FIT: 3,\r\n\r\n    /**\r\n     * The width and height are automatically adjusted to make the size cover the entire target\r\n     * area while keeping the aspect ratio. This may extend further out than the target size.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.ENVELOP\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    ENVELOP: 4,\r\n\r\n    /**\r\n     * The Canvas is resized to fit all available _parent_ space, regardless of aspect ratio.\r\n     * \r\n     * @name Phaser.Scale.ScaleModes.RESIZE\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    RESIZE: 5\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9jb25zdC9TQ0FMRV9NT0RFX0NPTlNULmpzPzc5ZmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSw4QkFBOEI7QUFDdEc7QUFDQSxhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvY29uc3QvU0NBTEVfTU9ERV9DT05TVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBoYXNlciBTY2FsZSBNYW5hZ2VyIGNvbnN0YW50cyBmb3IgdGhlIGRpZmZlcmVudCBzY2FsZSBtb2RlcyBhdmFpbGFibGUuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5TY2FsZS5TY2FsZU1vZGVzXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU2NhbGVcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTWFuYWdlciBjb25zdGFudHMgZm9yIHRoZSBkaWZmZXJlbnQgc2NhbGUgbW9kZXMgYXZhaWxhYmxlLlxyXG4gKiBcclxuICogVG8gZmluZCBvdXQgd2hhdCBlYWNoIG1vZGUgZG9lcyBwbGVhc2Ugc2VlIFtQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlc117QGxpbmsgUGhhc2VyLlNjYWxlLlNjYWxlTW9kZXN9LlxyXG4gKiBcclxuICogQHR5cGVkZWYge1BoYXNlci5TY2FsZS5TY2FsZU1vZGVzfSBQaGFzZXIuU2NhbGUuU2NhbGVNb2RlVHlwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlNjYWxlXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vIHNjYWxpbmcgaGFwcGVucyBhdCBhbGwuIFRoZSBjYW52YXMgaXMgc2V0IHRvIHRoZSBzaXplIGdpdmVuIGluIHRoZSBnYW1lIGNvbmZpZyBhbmQgUGhhc2VyIGRvZXNuJ3QgY2hhbmdlIGl0XHJcbiAgICAgKiBhZ2FpbiBmcm9tIHRoYXQgcG9pbnQgb24uIElmIHlvdSBjaGFuZ2UgdGhlIGNhbnZhcyBzaXplLCBlaXRoZXIgdmlhIENTUywgb3IgZGlyZWN0bHkgdmlhIGNvZGUsIHRoZW4geW91IG5lZWRcclxuICAgICAqIHRvIGNhbGwgdGhlIFNjYWxlIE1hbmFnZXJzIGByZXNpemVgIG1ldGhvZCB0byBnaXZlIHRoZSBuZXcgZGltZW5zaW9ucywgb3IgaW5wdXQgZXZlbnRzIHdpbGwgc3RvcCB3b3JraW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5OT05FXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBOT05FOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGJhc2VkIG9uIHRoZSB3aWR0aC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlNjYWxlTW9kZXMuV0lEVEhfQ09OVFJPTFNfSEVJR0hUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBXSURUSF9DT05UUk9MU19IRUlHSFQ6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2lkdGggaXMgYXV0b21hdGljYWxseSBhZGp1c3RlZCBiYXNlZCBvbiB0aGUgaGVpZ2h0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5IRUlHSFRfQ09OVFJPTFNfV0lEVEhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIEhFSUdIVF9DT05UUk9MU19XSURUSDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIHRvIGZpdCBpbnNpZGUgdGhlIGdpdmVuIHRhcmdldCBhcmVhLFxyXG4gICAgICogd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLiBEZXBlbmRpbmcgb24gdGhlIGFzcGVjdCByYXRpbyB0aGVyZSBtYXkgYmUgc29tZSBzcGFjZVxyXG4gICAgICogaW5zaWRlIHRoZSBhcmVhIHdoaWNoIGlzIG5vdCBjb3ZlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5GSVRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIEZJVDogMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIHRvIG1ha2UgdGhlIHNpemUgY292ZXIgdGhlIGVudGlyZSB0YXJnZXRcclxuICAgICAqIGFyZWEgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLiBUaGlzIG1heSBleHRlbmQgZnVydGhlciBvdXQgdGhhbiB0aGUgdGFyZ2V0IHNpemUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5TY2FsZU1vZGVzLkVOVkVMT1BcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIEVOVkVMT1A6IDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ2FudmFzIGlzIHJlc2l6ZWQgdG8gZml0IGFsbCBhdmFpbGFibGUgX3BhcmVudF8gc3BhY2UsIHJlZ2FyZGxlc3Mgb2YgYXNwZWN0IHJhdGlvLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5SRVNJWkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIFJFU0laRTogNVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/const/SCALE_MODE_CONST.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/const/ZOOM_CONST.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/scale/const/ZOOM_CONST.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for zoom modes.\r\n * \r\n * @namespace Phaser.Scale.Zoom\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\n/**\r\n * Phaser Scale Manager constants for zoom modes.\r\n * \r\n * To find out what each mode does please see [Phaser.Scale.Zoom]{@link Phaser.Scale.Zoom}.\r\n * \r\n * @typedef {Phaser.Scale.Zoom} Phaser.Scale.ZoomType\r\n * @memberof Phaser.Scale\r\n * @since 3.16.0\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * The game canvas will not be zoomed by Phaser.\r\n     * \r\n     * @name Phaser.Scale.Zoom.NO_ZOOM\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    NO_ZOOM: 1,\r\n\r\n    /**\r\n     * The game canvas will be 2x zoomed by Phaser.\r\n     * \r\n     * @name Phaser.Scale.Zoom.ZOOM_2X\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    ZOOM_2X: 2,\r\n\r\n    /**\r\n     * The game canvas will be 4x zoomed by Phaser.\r\n     * \r\n     * @name Phaser.Scale.Zoom.ZOOM_4X\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    ZOOM_4X: 4,\r\n\r\n    /**\r\n     * Calculate the zoom value based on the maximum multiplied game size that will\r\n     * fit into the parent, or browser window if no parent is set.\r\n     * \r\n     * @name Phaser.Scale.Zoom.MAX_ZOOM\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.16.0\r\n     */\r\n    MAX_ZOOM: -1\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9jb25zdC9aT09NX0NPTlNULmpzPzQ2NDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSx3QkFBd0I7QUFDMUY7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjYWxlL2NvbnN0L1pPT01fQ09OU1QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTWFuYWdlciBjb25zdGFudHMgZm9yIHpvb20gbW9kZXMuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5TY2FsZS5ab29tXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU2NhbGVcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgU2NhbGUgTWFuYWdlciBjb25zdGFudHMgZm9yIHpvb20gbW9kZXMuXHJcbiAqIFxyXG4gKiBUbyBmaW5kIG91dCB3aGF0IGVhY2ggbW9kZSBkb2VzIHBsZWFzZSBzZWUgW1BoYXNlci5TY2FsZS5ab29tXXtAbGluayBQaGFzZXIuU2NhbGUuWm9vbX0uXHJcbiAqIFxyXG4gKiBAdHlwZWRlZiB7UGhhc2VyLlNjYWxlLlpvb219IFBoYXNlci5TY2FsZS5ab29tVHlwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlNjYWxlXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBnYW1lIGNhbnZhcyB3aWxsIG5vdCBiZSB6b29tZWQgYnkgUGhhc2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuWm9vbS5OT19aT09NXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBOT19aT09NOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhbWUgY2FudmFzIHdpbGwgYmUgMnggem9vbWVkIGJ5IFBoYXNlci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjYWxlLlpvb20uWk9PTV8yWFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgWk9PTV8yWDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBnYW1lIGNhbnZhcyB3aWxsIGJlIDR4IHpvb21lZCBieSBQaGFzZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2FsZS5ab29tLlpPT01fNFhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIFpPT01fNFg6IDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHpvb20gdmFsdWUgYmFzZWQgb24gdGhlIG1heGltdW0gbXVsdGlwbGllZCBnYW1lIHNpemUgdGhhdCB3aWxsXHJcbiAgICAgKiBmaXQgaW50byB0aGUgcGFyZW50LCBvciBicm93c2VyIHdpbmRvdyBpZiBubyBwYXJlbnQgaXMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NhbGUuWm9vbS5NQVhfWk9PTVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgTUFYX1pPT006IC0xXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/const/ZOOM_CONST.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/const/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/scale/const/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = {\r\n\r\n    CENTER: __webpack_require__(/*! ./CENTER_CONST */ \"./node_modules/phaser/src/scale/const/CENTER_CONST.js\"),\r\n    ORIENTATION: __webpack_require__(/*! ./ORIENTATION_CONST */ \"./node_modules/phaser/src/scale/const/ORIENTATION_CONST.js\"),\r\n    SCALE_MODE: __webpack_require__(/*! ./SCALE_MODE_CONST */ \"./node_modules/phaser/src/scale/const/SCALE_MODE_CONST.js\"),\r\n    ZOOM: __webpack_require__(/*! ./ZOOM_CONST */ \"./node_modules/phaser/src/scale/const/ZOOM_CONST.js\")\r\n\r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9jb25zdC9pbmRleC5qcz81MzJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsNkVBQWdCO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUFxQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBb0I7QUFDNUMsVUFBVSxtQkFBTyxDQUFDLHlFQUFjOztBQUVoQzs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjYWxlL2NvbnN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSB7XHJcblxyXG4gICAgQ0VOVEVSOiByZXF1aXJlKCcuL0NFTlRFUl9DT05TVCcpLFxyXG4gICAgT1JJRU5UQVRJT046IHJlcXVpcmUoJy4vT1JJRU5UQVRJT05fQ09OU1QnKSxcclxuICAgIFNDQUxFX01PREU6IHJlcXVpcmUoJy4vU0NBTEVfTU9ERV9DT05TVCcpLFxyXG4gICAgWk9PTTogcmVxdWlyZSgnLi9aT09NX0NPTlNUJylcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/const/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/ENTER_FULLSCREEN_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/ENTER_FULLSCREEN_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager has successfully entered fullscreen mode.\r\n *\r\n * @event Phaser.Scale.Events#ENTER_FULLSCREEN\r\n * @since 3.16.1\r\n */\r\nmodule.exports = 'enterfullscreen';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvRU5URVJfRlVMTFNDUkVFTl9FVkVOVC5qcz85MmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjYWxlL2V2ZW50cy9FTlRFUl9GVUxMU0NSRUVOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjYWxlIE1hbmFnZXIgaGFzIHN1Y2Nlc3NmdWxseSBlbnRlcmVkIGZ1bGxzY3JlZW4gbW9kZS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5TY2FsZS5FdmVudHMjRU5URVJfRlVMTFNDUkVFTlxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdlbnRlcmZ1bGxzY3JlZW4nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/ENTER_FULLSCREEN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/FULLSCREEN_FAILED_EVENT.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/FULLSCREEN_FAILED_EVENT.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager tried to enter fullscreen mode but failed.\r\n *\r\n * @event Phaser.Scale.Events#FULLSCREEN_FAILED\r\n * @since 3.17.0\r\n */\r\nmodule.exports = 'fullscreenfailed';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvRlVMTFNDUkVFTl9GQUlMRURfRVZFTlQuanM/MWEwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvRlVMTFNDUkVFTl9GQUlMRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NhbGUgTWFuYWdlciB0cmllZCB0byBlbnRlciBmdWxsc2NyZWVuIG1vZGUgYnV0IGZhaWxlZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5TY2FsZS5FdmVudHMjRlVMTFNDUkVFTl9GQUlMRURcclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZnVsbHNjcmVlbmZhaWxlZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/FULLSCREEN_FAILED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/FULLSCREEN_UNSUPPORTED_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/FULLSCREEN_UNSUPPORTED_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager tried to enter fullscreen mode, but it is unsupported by the browser.\r\n *\r\n * @event Phaser.Scale.Events#FULLSCREEN_UNSUPPORTED\r\n * @since 3.16.1\r\n */\r\nmodule.exports = 'fullscreenunsupported';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvRlVMTFNDUkVFTl9VTlNVUFBPUlRFRF9FVkVOVC5qcz8wMDJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjYWxlL2V2ZW50cy9GVUxMU0NSRUVOX1VOU1VQUE9SVEVEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjYWxlIE1hbmFnZXIgdHJpZWQgdG8gZW50ZXIgZnVsbHNjcmVlbiBtb2RlLCBidXQgaXQgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU2NhbGUuRXZlbnRzI0ZVTExTQ1JFRU5fVU5TVVBQT1JURURcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZnVsbHNjcmVlbnVuc3VwcG9ydGVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/FULLSCREEN_UNSUPPORTED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/LEAVE_FULLSCREEN_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/LEAVE_FULLSCREEN_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager was in fullscreen mode, but has since left, either directly via game code,\r\n * or via a user gestured, such as pressing the ESC key.\r\n *\r\n * @event Phaser.Scale.Events#LEAVE_FULLSCREEN\r\n * @since 3.16.1\r\n */\r\nmodule.exports = 'leavefullscreen';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvTEVBVkVfRlVMTFNDUkVFTl9FVkVOVC5qcz9iNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvZXZlbnRzL0xFQVZFX0ZVTExTQ1JFRU5fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NhbGUgTWFuYWdlciB3YXMgaW4gZnVsbHNjcmVlbiBtb2RlLCBidXQgaGFzIHNpbmNlIGxlZnQsIGVpdGhlciBkaXJlY3RseSB2aWEgZ2FtZSBjb2RlLFxyXG4gKiBvciB2aWEgYSB1c2VyIGdlc3R1cmVkLCBzdWNoIGFzIHByZXNzaW5nIHRoZSBFU0Mga2V5LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjYWxlLkV2ZW50cyNMRUFWRV9GVUxMU0NSRUVOXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2xlYXZlZnVsbHNjcmVlbic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/LEAVE_FULLSCREEN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/ORIENTATION_CHANGE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/ORIENTATION_CHANGE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager Orientation Change Event.\r\n *\r\n * @event Phaser.Scale.Events#ORIENTATION_CHANGE\r\n * @since 3.16.1\r\n * \r\n * @param {string} orientation - \r\n */\r\nmodule.exports = 'orientationchange';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvT1JJRU5UQVRJT05fQ0hBTkdFX0VWRU5ULmpzPzhhYWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvZXZlbnRzL09SSUVOVEFUSU9OX0NIQU5HRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2FsZSBNYW5hZ2VyIE9yaWVudGF0aW9uIENoYW5nZSBFdmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5TY2FsZS5FdmVudHMjT1JJRU5UQVRJT05fQ0hBTkdFXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmllbnRhdGlvbiAtIFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnb3JpZW50YXRpb25jaGFuZ2UnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/ORIENTATION_CHANGE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/RESIZE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/RESIZE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scale Manager Resize Event.\r\n * \r\n * This event is dispatched whenever the Scale Manager detects a resize event from the browser.\r\n * It sends three parameters to the callback, each of them being Size components. You can read\r\n * the `width`, `height`, `aspectRatio` and other properties of these components to help with\r\n * scaling your own game content.\r\n *\r\n * @event Phaser.Scale.Events#RESIZE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Structs.Size} gameSize - A reference to the Game Size component. This is the un-scaled size of your game canvas.\r\n * @param {Phaser.Structs.Size} baseSize - A reference to the Base Size component. This is the game size multiplied by resolution.\r\n * @param {Phaser.Structs.Size} displaySize - A reference to the Display Size component. This is the scaled canvas size, after applying zoom and scale mode.\r\n * @param {number} resolution - The current resolution. Defaults to 1 at the moment.\r\n * @param {number} previousWidth - If the `gameSize` has changed, this value contains its previous width, otherwise it contains the current width.\r\n * @param {number} previousHeight - If the `gameSize` has changed, this value contains its previous height, otherwise it contains the current height.\r\n */\r\nmodule.exports = 'resize';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvUkVTSVpFX0VWRU5ULmpzPzk5NGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NhbGUvZXZlbnRzL1JFU0laRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2FsZSBNYW5hZ2VyIFJlc2l6ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuZXZlciB0aGUgU2NhbGUgTWFuYWdlciBkZXRlY3RzIGEgcmVzaXplIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIuXHJcbiAqIEl0IHNlbmRzIHRocmVlIHBhcmFtZXRlcnMgdG8gdGhlIGNhbGxiYWNrLCBlYWNoIG9mIHRoZW0gYmVpbmcgU2l6ZSBjb21wb25lbnRzLiBZb3UgY2FuIHJlYWRcclxuICogdGhlIGB3aWR0aGAsIGBoZWlnaHRgLCBgYXNwZWN0UmF0aW9gIGFuZCBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZXNlIGNvbXBvbmVudHMgdG8gaGVscCB3aXRoXHJcbiAqIHNjYWxpbmcgeW91ciBvd24gZ2FtZSBjb250ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjYWxlLkV2ZW50cyNSRVNJWkVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBnYW1lU2l6ZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIFNpemUgY29tcG9uZW50LiBUaGlzIGlzIHRoZSB1bi1zY2FsZWQgc2l6ZSBvZiB5b3VyIGdhbWUgY2FudmFzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TdHJ1Y3RzLlNpemV9IGJhc2VTaXplIC0gQSByZWZlcmVuY2UgdG8gdGhlIEJhc2UgU2l6ZSBjb21wb25lbnQuIFRoaXMgaXMgdGhlIGdhbWUgc2l6ZSBtdWx0aXBsaWVkIGJ5IHJlc29sdXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX0gZGlzcGxheVNpemUgLSBBIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBTaXplIGNvbXBvbmVudC4gVGhpcyBpcyB0aGUgc2NhbGVkIGNhbnZhcyBzaXplLCBhZnRlciBhcHBseWluZyB6b29tIGFuZCBzY2FsZSBtb2RlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmVzb2x1dGlvbiAtIFRoZSBjdXJyZW50IHJlc29sdXRpb24uIERlZmF1bHRzIHRvIDEgYXQgdGhlIG1vbWVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHByZXZpb3VzV2lkdGggLSBJZiB0aGUgYGdhbWVTaXplYCBoYXMgY2hhbmdlZCwgdGhpcyB2YWx1ZSBjb250YWlucyBpdHMgcHJldmlvdXMgd2lkdGgsIG90aGVyd2lzZSBpdCBjb250YWlucyB0aGUgY3VycmVudCB3aWR0aC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHByZXZpb3VzSGVpZ2h0IC0gSWYgdGhlIGBnYW1lU2l6ZWAgaGFzIGNoYW5nZWQsIHRoaXMgdmFsdWUgY29udGFpbnMgaXRzIHByZXZpb3VzIGhlaWdodCwgb3RoZXJ3aXNlIGl0IGNvbnRhaW5zIHRoZSBjdXJyZW50IGhlaWdodC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc2l6ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/RESIZE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/events/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/scale/events/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Scale.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ENTER_FULLSCREEN: __webpack_require__(/*! ./ENTER_FULLSCREEN_EVENT */ \"./node_modules/phaser/src/scale/events/ENTER_FULLSCREEN_EVENT.js\"),\r\n    FULLSCREEN_FAILED: __webpack_require__(/*! ./FULLSCREEN_FAILED_EVENT */ \"./node_modules/phaser/src/scale/events/FULLSCREEN_FAILED_EVENT.js\"),\r\n    FULLSCREEN_UNSUPPORTED: __webpack_require__(/*! ./FULLSCREEN_UNSUPPORTED_EVENT */ \"./node_modules/phaser/src/scale/events/FULLSCREEN_UNSUPPORTED_EVENT.js\"),\r\n    LEAVE_FULLSCREEN: __webpack_require__(/*! ./LEAVE_FULLSCREEN_EVENT */ \"./node_modules/phaser/src/scale/events/LEAVE_FULLSCREEN_EVENT.js\"),\r\n    ORIENTATION_CHANGE: __webpack_require__(/*! ./ORIENTATION_CHANGE_EVENT */ \"./node_modules/phaser/src/scale/events/ORIENTATION_CHANGE_EVENT.js\"),\r\n    RESIZE: __webpack_require__(/*! ./RESIZE_EVENT */ \"./node_modules/phaser/src/scale/events/RESIZE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvaW5kZXguanM/YTE2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLGtHQUEwQjtBQUN4RCx1QkFBdUIsbUJBQU8sQ0FBQyxvR0FBMkI7QUFDMUQsNEJBQTRCLG1CQUFPLENBQUMsOEdBQWdDO0FBQ3BFLHNCQUFzQixtQkFBTyxDQUFDLGtHQUEwQjtBQUN4RCx3QkFBd0IsbUJBQU8sQ0FBQyxzR0FBNEI7QUFDNUQsWUFBWSxtQkFBTyxDQUFDLDhFQUFnQjs7QUFFcEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9ldmVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5TY2FsZS5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBFTlRFUl9GVUxMU0NSRUVOOiByZXF1aXJlKCcuL0VOVEVSX0ZVTExTQ1JFRU5fRVZFTlQnKSxcclxuICAgIEZVTExTQ1JFRU5fRkFJTEVEOiByZXF1aXJlKCcuL0ZVTExTQ1JFRU5fRkFJTEVEX0VWRU5UJyksXHJcbiAgICBGVUxMU0NSRUVOX1VOU1VQUE9SVEVEOiByZXF1aXJlKCcuL0ZVTExTQ1JFRU5fVU5TVVBQT1JURURfRVZFTlQnKSxcclxuICAgIExFQVZFX0ZVTExTQ1JFRU46IHJlcXVpcmUoJy4vTEVBVkVfRlVMTFNDUkVFTl9FVkVOVCcpLFxyXG4gICAgT1JJRU5UQVRJT05fQ0hBTkdFOiByZXF1aXJlKCcuL09SSUVOVEFUSU9OX0NIQU5HRV9FVkVOVCcpLFxyXG4gICAgUkVTSVpFOiByZXF1aXJlKCcuL1JFU0laRV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scale/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/scale/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scale/const/index.js\");\r\n\r\n/**\r\n * @namespace Phaser.Scale\r\n * \r\n * @borrows Phaser.Scale.Center.NO_CENTER as NO_CENTER\r\n * @borrows Phaser.Scale.Center.CENTER_BOTH as CENTER_BOTH\r\n * @borrows Phaser.Scale.Center.CENTER_HORIZONTALLY as CENTER_HORIZONTALLY\r\n * @borrows Phaser.Scale.Center.CENTER_VERTICALLY as CENTER_VERTICALLY\r\n * \r\n * @borrows Phaser.Scale.Orientation.LANDSCAPE as LANDSCAPE\r\n * @borrows Phaser.Scale.Orientation.PORTRAIT as PORTRAIT\r\n * \r\n * @borrows Phaser.Scale.ScaleModes.NONE as NONE\r\n * @borrows Phaser.Scale.ScaleModes.WIDTH_CONTROLS_HEIGHT as WIDTH_CONTROLS_HEIGHT\r\n * @borrows Phaser.Scale.ScaleModes.HEIGHT_CONTROLS_WIDTH as HEIGHT_CONTROLS_WIDTH\r\n * @borrows Phaser.Scale.ScaleModes.FIT as FIT\r\n * @borrows Phaser.Scale.ScaleModes.ENVELOP as ENVELOP\r\n * @borrows Phaser.Scale.ScaleModes.RESIZE as RESIZE\r\n * \r\n * @borrows Phaser.Scale.Zoom.NO_ZOOM as NO_ZOOM\r\n * @borrows Phaser.Scale.Zoom.ZOOM_2X as ZOOM_2X\r\n * @borrows Phaser.Scale.Zoom.ZOOM_4X as ZOOM_4X\r\n * @borrows Phaser.Scale.Zoom.MAX_ZOOM as MAX_ZOOM\r\n */\r\n\r\nvar Scale = {\r\n\r\n    Center: __webpack_require__(/*! ./const/CENTER_CONST */ \"./node_modules/phaser/src/scale/const/CENTER_CONST.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scale/events/index.js\"),\r\n    Orientation: __webpack_require__(/*! ./const/ORIENTATION_CONST */ \"./node_modules/phaser/src/scale/const/ORIENTATION_CONST.js\"),\r\n    ScaleManager: __webpack_require__(/*! ./ScaleManager */ \"./node_modules/phaser/src/scale/ScaleManager.js\"),\r\n    ScaleModes: __webpack_require__(/*! ./const/SCALE_MODE_CONST */ \"./node_modules/phaser/src/scale/const/SCALE_MODE_CONST.js\"),\r\n    Zoom: __webpack_require__(/*! ./const/ZOOM_CONST */ \"./node_modules/phaser/src/scale/const/ZOOM_CONST.js\")\r\n\r\n};\r\n\r\nScale = Extend(false, Scale, CONST.CENTER);\r\nScale = Extend(false, Scale, CONST.ORIENTATION);\r\nScale = Extend(false, Scale, CONST.SCALE_MODE);\r\nScale = Extend(false, Scale, CONST.ZOOM);\r\n\r\nmodule.exports = Scale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2FsZS9pbmRleC5qcz81MGFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQywrREFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUZBQXNCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxpRUFBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBMkI7QUFDcEQsa0JBQWtCLG1CQUFPLENBQUMsdUVBQWdCO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLDJGQUEwQjtBQUNsRCxVQUFVLG1CQUFPLENBQUMsK0VBQW9COztBQUV0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjYWxlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU2NhbGVcclxuICogXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5DZW50ZXIuTk9fQ0VOVEVSIGFzIE5PX0NFTlRFUlxyXG4gKiBAYm9ycm93cyBQaGFzZXIuU2NhbGUuQ2VudGVyLkNFTlRFUl9CT1RIIGFzIENFTlRFUl9CT1RIXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5DZW50ZXIuQ0VOVEVSX0hPUklaT05UQUxMWSBhcyBDRU5URVJfSE9SSVpPTlRBTExZXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5DZW50ZXIuQ0VOVEVSX1ZFUlRJQ0FMTFkgYXMgQ0VOVEVSX1ZFUlRJQ0FMTFlcclxuICogXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5PcmllbnRhdGlvbi5MQU5EU0NBUEUgYXMgTEFORFNDQVBFXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5PcmllbnRhdGlvbi5QT1JUUkFJVCBhcyBQT1JUUkFJVFxyXG4gKiBcclxuICogQGJvcnJvd3MgUGhhc2VyLlNjYWxlLlNjYWxlTW9kZXMuTk9ORSBhcyBOT05FXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5TY2FsZU1vZGVzLldJRFRIX0NPTlRST0xTX0hFSUdIVCBhcyBXSURUSF9DT05UUk9MU19IRUlHSFRcclxuICogQGJvcnJvd3MgUGhhc2VyLlNjYWxlLlNjYWxlTW9kZXMuSEVJR0hUX0NPTlRST0xTX1dJRFRIIGFzIEhFSUdIVF9DT05UUk9MU19XSURUSFxyXG4gKiBAYm9ycm93cyBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5GSVQgYXMgRklUXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5TY2FsZU1vZGVzLkVOVkVMT1AgYXMgRU5WRUxPUFxyXG4gKiBAYm9ycm93cyBQaGFzZXIuU2NhbGUuU2NhbGVNb2Rlcy5SRVNJWkUgYXMgUkVTSVpFXHJcbiAqIFxyXG4gKiBAYm9ycm93cyBQaGFzZXIuU2NhbGUuWm9vbS5OT19aT09NIGFzIE5PX1pPT01cclxuICogQGJvcnJvd3MgUGhhc2VyLlNjYWxlLlpvb20uWk9PTV8yWCBhcyBaT09NXzJYXHJcbiAqIEBib3Jyb3dzIFBoYXNlci5TY2FsZS5ab29tLlpPT01fNFggYXMgWk9PTV80WFxyXG4gKiBAYm9ycm93cyBQaGFzZXIuU2NhbGUuWm9vbS5NQVhfWk9PTSBhcyBNQVhfWk9PTVxyXG4gKi9cclxuXHJcbnZhciBTY2FsZSA9IHtcclxuXHJcbiAgICBDZW50ZXI6IHJlcXVpcmUoJy4vY29uc3QvQ0VOVEVSX0NPTlNUJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgICBPcmllbnRhdGlvbjogcmVxdWlyZSgnLi9jb25zdC9PUklFTlRBVElPTl9DT05TVCcpLFxyXG4gICAgU2NhbGVNYW5hZ2VyOiByZXF1aXJlKCcuL1NjYWxlTWFuYWdlcicpLFxyXG4gICAgU2NhbGVNb2RlczogcmVxdWlyZSgnLi9jb25zdC9TQ0FMRV9NT0RFX0NPTlNUJyksXHJcbiAgICBab29tOiByZXF1aXJlKCcuL2NvbnN0L1pPT01fQ09OU1QnKVxyXG5cclxufTtcclxuXHJcblNjYWxlID0gRXh0ZW5kKGZhbHNlLCBTY2FsZSwgQ09OU1QuQ0VOVEVSKTtcclxuU2NhbGUgPSBFeHRlbmQoZmFsc2UsIFNjYWxlLCBDT05TVC5PUklFTlRBVElPTik7XHJcblNjYWxlID0gRXh0ZW5kKGZhbHNlLCBTY2FsZSwgQ09OU1QuU0NBTEVfTU9ERSk7XHJcblNjYWxlID0gRXh0ZW5kKGZhbHNlLCBTY2FsZSwgQ09OU1QuWk9PTSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scale/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/GetPhysicsPlugins.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/scene/GetPhysicsPlugins.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar UppercaseFirst = __webpack_require__(/*! ../utils/string/UppercaseFirst */ \"./node_modules/phaser/src/utils/string/UppercaseFirst.js\");\r\n\r\n/**\r\n * Builds an array of which physics plugins should be activated for the given Scene.\r\n *\r\n * @function Phaser.Scenes.GetPhysicsPlugins\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scenes.Systems} sys - The scene system to get the physics systems of.\r\n *\r\n * @return {array} An array of Physics systems to start for this Scene.\r\n */\r\nvar GetPhysicsPlugins = function (sys)\r\n{\r\n    var defaultSystem = sys.game.config.defaultPhysicsSystem;\r\n    var sceneSystems = GetFastValue(sys.settings, 'physics', false);\r\n\r\n    if (!defaultSystem && !sceneSystems)\r\n    {\r\n        //  No default physics system or systems in this scene\r\n        return;\r\n    }\r\n\r\n    //  Let's build the systems array\r\n    var output = [];\r\n\r\n    if (defaultSystem)\r\n    {\r\n        output.push(UppercaseFirst(defaultSystem + 'Physics'));\r\n    }\r\n\r\n    if (sceneSystems)\r\n    {\r\n        for (var key in sceneSystems)\r\n        {\r\n            key = UppercaseFirst(key.concat('Physics'));\r\n\r\n            if (output.indexOf(key) === -1)\r\n            {\r\n                output.push(key);\r\n            }\r\n        }\r\n    }\r\n\r\n    //  An array of Physics systems to start for this Scene\r\n    return output;\r\n};\r\n\r\nmodule.exports = GetPhysicsPlugins;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9HZXRQaHlzaWNzUGx1Z2lucy5qcz8zZWRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDekQscUJBQXFCLG1CQUFPLENBQUMsZ0dBQWdDOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9HZXRQaHlzaWNzUGx1Z2lucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFVwcGVyY2FzZUZpcnN0ID0gcmVxdWlyZSgnLi4vdXRpbHMvc3RyaW5nL1VwcGVyY2FzZUZpcnN0Jyk7XHJcblxyXG4vKipcclxuICogQnVpbGRzIGFuIGFycmF5IG9mIHdoaWNoIHBoeXNpY3MgcGx1Z2lucyBzaG91bGQgYmUgYWN0aXZhdGVkIGZvciB0aGUgZ2l2ZW4gU2NlbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuU2NlbmVzLkdldFBoeXNpY3NQbHVnaW5zXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gVGhlIHNjZW5lIHN5c3RlbSB0byBnZXQgdGhlIHBoeXNpY3Mgc3lzdGVtcyBvZi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIFBoeXNpY3Mgc3lzdGVtcyB0byBzdGFydCBmb3IgdGhpcyBTY2VuZS5cclxuICovXHJcbnZhciBHZXRQaHlzaWNzUGx1Z2lucyA9IGZ1bmN0aW9uIChzeXMpXHJcbntcclxuICAgIHZhciBkZWZhdWx0U3lzdGVtID0gc3lzLmdhbWUuY29uZmlnLmRlZmF1bHRQaHlzaWNzU3lzdGVtO1xyXG4gICAgdmFyIHNjZW5lU3lzdGVtcyA9IEdldEZhc3RWYWx1ZShzeXMuc2V0dGluZ3MsICdwaHlzaWNzJywgZmFsc2UpO1xyXG5cclxuICAgIGlmICghZGVmYXVsdFN5c3RlbSAmJiAhc2NlbmVTeXN0ZW1zKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBObyBkZWZhdWx0IHBoeXNpY3Mgc3lzdGVtIG9yIHN5c3RlbXMgaW4gdGhpcyBzY2VuZVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTGV0J3MgYnVpbGQgdGhlIHN5c3RlbXMgYXJyYXlcclxuICAgIHZhciBvdXRwdXQgPSBbXTtcclxuXHJcbiAgICBpZiAoZGVmYXVsdFN5c3RlbSlcclxuICAgIHtcclxuICAgICAgICBvdXRwdXQucHVzaChVcHBlcmNhc2VGaXJzdChkZWZhdWx0U3lzdGVtICsgJ1BoeXNpY3MnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNjZW5lU3lzdGVtcylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2NlbmVTeXN0ZW1zKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gVXBwZXJjYXNlRmlyc3Qoa2V5LmNvbmNhdCgnUGh5c2ljcycpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvdXRwdXQuaW5kZXhPZihrZXkpID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgQW4gYXJyYXkgb2YgUGh5c2ljcyBzeXN0ZW1zIHRvIHN0YXJ0IGZvciB0aGlzIFNjZW5lXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQaHlzaWNzUGx1Z2lucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/GetPhysicsPlugins.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/GetScenePlugins.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/scene/GetScenePlugins.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Builds an array of which plugins (not including physics plugins) should be activated for the given Scene.\r\n *\r\n * @function Phaser.Scenes.GetScenePlugins\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scenes.Systems} sys - The Scene Systems object to check for plugins.\r\n *\r\n * @return {array} An array of all plugins which should be activated, either the default ones or the ones configured in the Scene Systems object.\r\n */\r\nvar GetScenePlugins = function (sys)\r\n{\r\n    var defaultPlugins = sys.plugins.getDefaultScenePlugins();\r\n\r\n    var scenePlugins = GetFastValue(sys.settings, 'plugins', false);\r\n\r\n    //  Scene Plugins always override Default Plugins\r\n    if (Array.isArray(scenePlugins))\r\n    {\r\n        return scenePlugins;\r\n    }\r\n    else if (defaultPlugins)\r\n    {\r\n        return defaultPlugins;\r\n    }\r\n    else\r\n    {\r\n        //  No default plugins or plugins in this scene\r\n        return [];\r\n    }\r\n};\r\n\r\nmodule.exports = GetScenePlugins;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9HZXRTY2VuZVBsdWdpbnMuanM/Y2FhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9HZXRTY2VuZVBsdWdpbnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQnVpbGRzIGFuIGFycmF5IG9mIHdoaWNoIHBsdWdpbnMgKG5vdCBpbmNsdWRpbmcgcGh5c2ljcyBwbHVnaW5zKSBzaG91bGQgYmUgYWN0aXZhdGVkIGZvciB0aGUgZ2l2ZW4gU2NlbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuU2NlbmVzLkdldFNjZW5lUGx1Z2luc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIFRoZSBTY2VuZSBTeXN0ZW1zIG9iamVjdCB0byBjaGVjayBmb3IgcGx1Z2lucy5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIGFsbCBwbHVnaW5zIHdoaWNoIHNob3VsZCBiZSBhY3RpdmF0ZWQsIGVpdGhlciB0aGUgZGVmYXVsdCBvbmVzIG9yIHRoZSBvbmVzIGNvbmZpZ3VyZWQgaW4gdGhlIFNjZW5lIFN5c3RlbXMgb2JqZWN0LlxyXG4gKi9cclxudmFyIEdldFNjZW5lUGx1Z2lucyA9IGZ1bmN0aW9uIChzeXMpXHJcbntcclxuICAgIHZhciBkZWZhdWx0UGx1Z2lucyA9IHN5cy5wbHVnaW5zLmdldERlZmF1bHRTY2VuZVBsdWdpbnMoKTtcclxuXHJcbiAgICB2YXIgc2NlbmVQbHVnaW5zID0gR2V0RmFzdFZhbHVlKHN5cy5zZXR0aW5ncywgJ3BsdWdpbnMnLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIFNjZW5lIFBsdWdpbnMgYWx3YXlzIG92ZXJyaWRlIERlZmF1bHQgUGx1Z2luc1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NlbmVQbHVnaW5zKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc2NlbmVQbHVnaW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZGVmYXVsdFBsdWdpbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQbHVnaW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIC8vICBObyBkZWZhdWx0IHBsdWdpbnMgb3IgcGx1Z2lucyBpbiB0aGlzIHNjZW5lXHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRTY2VuZVBsdWdpbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/GetScenePlugins.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/InjectionMap.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/scene/InjectionMap.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  These properties get injected into the Scene and map to local systems\r\n//  The map value is the property that is injected into the Scene, the key is the Scene.Systems reference.\r\n//  These defaults can be modified via the Scene config object\r\n//          var config = {\r\n//            map: {\r\n//                add: 'makeStuff',\r\n//                load: 'loader'\r\n//            }\r\n//        };\r\n\r\nvar InjectionMap = {\r\n\r\n    game: 'game',\r\n\r\n    anims: 'anims',\r\n    cache: 'cache',\r\n    plugins: 'plugins',\r\n    registry: 'registry',\r\n    scale: 'scale',\r\n    sound: 'sound',\r\n    textures: 'textures',\r\n\r\n    events: 'events',\r\n    cameras: 'cameras',\r\n    add: 'add',\r\n    make: 'make',\r\n    scenePlugin: 'scene',\r\n    displayList: 'children',\r\n    lights: 'lights',\r\n\r\n    data: 'data',\r\n    input: 'input',\r\n    load: 'load',\r\n    time: 'time',\r\n    tweens: 'tweens',\r\n\r\n    arcadePhysics: 'physics',\r\n    impactPhysics: 'impact',\r\n    matterPhysics: 'matter'\r\n\r\n};\r\n\r\nif (typeof PLUGIN_CAMERA3D)\r\n{\r\n    InjectionMap.cameras3d = 'cameras3d';\r\n}\r\n\r\nif (typeof PLUGIN_FBINSTANT)\r\n{\r\n    InjectionMap.facebook = 'facebook';\r\n}\r\n\r\nmodule.exports = InjectionMap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9JbmplY3Rpb25NYXAuanM/YTZiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvSW5qZWN0aW9uTWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgVGhlc2UgcHJvcGVydGllcyBnZXQgaW5qZWN0ZWQgaW50byB0aGUgU2NlbmUgYW5kIG1hcCB0byBsb2NhbCBzeXN0ZW1zXHJcbi8vICBUaGUgbWFwIHZhbHVlIGlzIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIGluamVjdGVkIGludG8gdGhlIFNjZW5lLCB0aGUga2V5IGlzIHRoZSBTY2VuZS5TeXN0ZW1zIHJlZmVyZW5jZS5cclxuLy8gIFRoZXNlIGRlZmF1bHRzIGNhbiBiZSBtb2RpZmllZCB2aWEgdGhlIFNjZW5lIGNvbmZpZyBvYmplY3RcclxuLy8gICAgICAgICAgdmFyIGNvbmZpZyA9IHtcclxuLy8gICAgICAgICAgICBtYXA6IHtcclxuLy8gICAgICAgICAgICAgICAgYWRkOiAnbWFrZVN0dWZmJyxcclxuLy8gICAgICAgICAgICAgICAgbG9hZDogJ2xvYWRlcidcclxuLy8gICAgICAgICAgICB9XHJcbi8vICAgICAgICB9O1xyXG5cclxudmFyIEluamVjdGlvbk1hcCA9IHtcclxuXHJcbiAgICBnYW1lOiAnZ2FtZScsXHJcblxyXG4gICAgYW5pbXM6ICdhbmltcycsXHJcbiAgICBjYWNoZTogJ2NhY2hlJyxcclxuICAgIHBsdWdpbnM6ICdwbHVnaW5zJyxcclxuICAgIHJlZ2lzdHJ5OiAncmVnaXN0cnknLFxyXG4gICAgc2NhbGU6ICdzY2FsZScsXHJcbiAgICBzb3VuZDogJ3NvdW5kJyxcclxuICAgIHRleHR1cmVzOiAndGV4dHVyZXMnLFxyXG5cclxuICAgIGV2ZW50czogJ2V2ZW50cycsXHJcbiAgICBjYW1lcmFzOiAnY2FtZXJhcycsXHJcbiAgICBhZGQ6ICdhZGQnLFxyXG4gICAgbWFrZTogJ21ha2UnLFxyXG4gICAgc2NlbmVQbHVnaW46ICdzY2VuZScsXHJcbiAgICBkaXNwbGF5TGlzdDogJ2NoaWxkcmVuJyxcclxuICAgIGxpZ2h0czogJ2xpZ2h0cycsXHJcblxyXG4gICAgZGF0YTogJ2RhdGEnLFxyXG4gICAgaW5wdXQ6ICdpbnB1dCcsXHJcbiAgICBsb2FkOiAnbG9hZCcsXHJcbiAgICB0aW1lOiAndGltZScsXHJcbiAgICB0d2VlbnM6ICd0d2VlbnMnLFxyXG5cclxuICAgIGFyY2FkZVBoeXNpY3M6ICdwaHlzaWNzJyxcclxuICAgIGltcGFjdFBoeXNpY3M6ICdpbXBhY3QnLFxyXG4gICAgbWF0dGVyUGh5c2ljczogJ21hdHRlcidcclxuXHJcbn07XHJcblxyXG5pZiAodHlwZW9mIFBMVUdJTl9DQU1FUkEzRClcclxue1xyXG4gICAgSW5qZWN0aW9uTWFwLmNhbWVyYXMzZCA9ICdjYW1lcmFzM2QnO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFBMVUdJTl9GQklOU1RBTlQpXHJcbntcclxuICAgIEluamVjdGlvbk1hcC5mYWNlYm9vayA9ICdmYWNlYm9vayc7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5qZWN0aW9uTWFwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/InjectionMap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/Scene.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/scene/Scene.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Systems = __webpack_require__(/*! ./Systems */ \"./node_modules/phaser/src/scene/Systems.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A base Phaser.Scene class which can be extended for your own use.\r\n *\r\n * You can also define the optional methods {@link Phaser.Types.Scenes.SceneInitCallback init()}, {@link Phaser.Types.Scenes.ScenePreloadCallback preload()}, and {@link Phaser.Types.Scenes.SceneCreateCallback create()}.\r\n *\r\n * @class Scene\r\n * @memberof Phaser\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Scenes.SettingsConfig)} config - Scene specific configuration settings.\r\n */\r\nvar Scene = new Class({\r\n\r\n    initialize:\r\n\r\n    function Scene (config)\r\n    {\r\n        /**\r\n         * The Scene Systems. You must never overwrite this property, or all hell will break lose.\r\n         *\r\n         * @name Phaser.Scene#sys\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.sys = new Systems(this, config);\r\n\r\n        /**\r\n         * A reference to the Phaser.Game instance.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game;\r\n\r\n        /**\r\n         * A reference to the global Animation Manager.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#anims\r\n         * @type {Phaser.Animations.AnimationManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.anims;\r\n\r\n        /**\r\n         * A reference to the global Cache.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#cache\r\n         * @type {Phaser.Cache.CacheManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cache;\r\n\r\n        /**\r\n         * A reference to the game level Data Manager.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#registry\r\n         * @type {Phaser.Data.DataManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.registry;\r\n\r\n        /**\r\n         * A reference to the Sound Manager.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#sound\r\n         * @type {Phaser.Sound.BaseSoundManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.sound;\r\n\r\n        /**\r\n         * A reference to the Texture Manager.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#textures\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.textures;\r\n\r\n        /**\r\n         * A scene level Event Emitter.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events;\r\n\r\n        /**\r\n         * A scene level Camera System.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#cameras\r\n         * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cameras;\r\n\r\n        /**\r\n         * A scene level Game Object Factory.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#add\r\n         * @type {Phaser.GameObjects.GameObjectFactory}\r\n         * @since 3.0.0\r\n         */\r\n        this.add;\r\n\r\n        /**\r\n         * A scene level Game Object Creator.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#make\r\n         * @type {Phaser.GameObjects.GameObjectCreator}\r\n         * @since 3.0.0\r\n         */\r\n        this.make;\r\n\r\n        /**\r\n         * A reference to the Scene Manager Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#scene\r\n         * @type {Phaser.Scenes.ScenePlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene;\r\n\r\n        /**\r\n         * A scene level Game Object Display List.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#children\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @since 3.0.0\r\n         */\r\n        this.children;\r\n\r\n        /**\r\n         * A scene level Lights Manager Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#lights\r\n         * @type {Phaser.GameObjects.LightsManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.lights;\r\n\r\n        /**\r\n         * A scene level Data Manager Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#data\r\n         * @type {Phaser.Data.DataManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.data;\r\n\r\n        /**\r\n         * A scene level Input Manager Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#input\r\n         * @type {Phaser.Input.InputPlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.input;\r\n\r\n        /**\r\n         * A scene level Loader Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#load\r\n         * @type {Phaser.Loader.LoaderPlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.load;\r\n\r\n        /**\r\n         * A scene level Time and Clock Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#time\r\n         * @type {Phaser.Time.Clock}\r\n         * @since 3.0.0\r\n         */\r\n        this.time;\r\n\r\n        /**\r\n         * A scene level Tween Manager Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map and the plugin is installed.\r\n         *\r\n         * @name Phaser.Scene#tweens\r\n         * @type {Phaser.Tweens.TweenManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.tweens;\r\n\r\n        /**\r\n         * A scene level Arcade Physics Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map, the plugin is installed and configured.\r\n         *\r\n         * @name Phaser.Scene#physics\r\n         * @type {Phaser.Physics.Arcade.ArcadePhysics}\r\n         * @since 3.0.0\r\n         */\r\n        this.physics;\r\n\r\n        /**\r\n         * A scene level Impact Physics Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map, the plugin is installed and configured.\r\n         *\r\n         * @name Phaser.Scene#impact\r\n         * @type {Phaser.Physics.Impact.ImpactPhysics}\r\n         * @since 3.0.0\r\n         */\r\n        this.impact;\r\n\r\n        /**\r\n         * A scene level Matter Physics Plugin.\r\n         * This property will only be available if defined in the Scene Injection Map, the plugin is installed and configured.\r\n         *\r\n         * @name Phaser.Scene#matter\r\n         * @type {Phaser.Physics.Matter.MatterPhysics}\r\n         * @since 3.0.0\r\n         */\r\n        this.matter;\r\n\r\n        if (typeof PLUGIN_FBINSTANT)\r\n        {\r\n            /**\r\n             * A scene level Facebook Instant Games Plugin.\r\n             * This property will only be available if defined in the Scene Injection Map, the plugin is installed and configured.\r\n             *\r\n             * @name Phaser.Scene#facebook\r\n             * @type {Phaser.FacebookInstantGamesPlugin}\r\n             * @since 3.12.0\r\n             */\r\n            this.facebook;\r\n        }\r\n\r\n        /**\r\n         * A reference to the global Scale Manager.\r\n         * This property will only be available if defined in the Scene Injection Map.\r\n         *\r\n         * @name Phaser.Scene#scale\r\n         * @type {Phaser.Scale.ScaleManager}\r\n         * @since 3.16.2\r\n         */\r\n        this.scale;\r\n\r\n        /**\r\n         * A reference to the Plugin Manager.\r\n         *\r\n         * The Plugin Manager is a global system that allows plugins to register themselves with it, and can then install\r\n         * those plugins into Scenes as required.\r\n         *\r\n         * @name Phaser.Scene#plugins\r\n         * @type {Phaser.Plugins.PluginManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.plugins;\r\n    },\r\n\r\n    /**\r\n     * Should be overridden by your own Scenes.\r\n     * This method is called once per game step while the scene is running.\r\n     *\r\n     * @method Phaser.Scene#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function ()\r\n    {\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Scene;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TY2VuZS5qcz83NTk0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyw2REFBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsbURBQW1ELEdBQUcseURBQXlELE9BQU8sdURBQXVEO0FBQzFOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDO0FBQ3ZEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvU2NlbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTeXN0ZW1zID0gcmVxdWlyZSgnLi9TeXN0ZW1zJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIGJhc2UgUGhhc2VyLlNjZW5lIGNsYXNzIHdoaWNoIGNhbiBiZSBleHRlbmRlZCBmb3IgeW91ciBvd24gdXNlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGFsc28gZGVmaW5lIHRoZSBvcHRpb25hbCBtZXRob2RzIHtAbGluayBQaGFzZXIuVHlwZXMuU2NlbmVzLlNjZW5lSW5pdENhbGxiYWNrIGluaXQoKX0sIHtAbGluayBQaGFzZXIuVHlwZXMuU2NlbmVzLlNjZW5lUHJlbG9hZENhbGxiYWNrIHByZWxvYWQoKX0sIGFuZCB7QGxpbmsgUGhhc2VyLlR5cGVzLlNjZW5lcy5TY2VuZUNyZWF0ZUNhbGxiYWNrIGNyZWF0ZSgpfS5cclxuICpcclxuICogQGNsYXNzIFNjZW5lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLlNjZW5lcy5TZXR0aW5nc0NvbmZpZyl9IGNvbmZpZyAtIFNjZW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgU2NlbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU2NlbmUgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgU3lzdGVtcy4gWW91IG11c3QgbmV2ZXIgb3ZlcndyaXRlIHRoaXMgcHJvcGVydHksIG9yIGFsbCBoZWxsIHdpbGwgYnJlYWsgbG9zZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNzeXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzID0gbmV3IFN5c3RlbXModGhpcywgY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2FuaW1zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmltcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBDYWNoZS5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNjYWNoZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FjaGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnYW1lIGxldmVsIERhdGEgTWFuYWdlci5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNyZWdpc3RyeVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlZ2lzdHJ5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgTWFuYWdlci5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcCBhbmQgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmUjc291bmRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VuZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSN0ZXh0dXJlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBFdmVudCBFbWl0dGVyLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBDYW1lcmEgU3lzdGVtLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2NhbWVyYXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBHYW1lIE9iamVjdCBGYWN0b3J5LlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2FkZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgc2NlbmUgbGV2ZWwgR2FtZSBPYmplY3QgQ3JlYXRvci5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNtYWtlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1ha2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBNYW5hZ2VyIFBsdWdpbi5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgc2NlbmUgbGV2ZWwgR2FtZSBPYmplY3QgRGlzcGxheSBMaXN0LlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNoaWxkcmVuO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHNjZW5lIGxldmVsIExpZ2h0cyBNYW5hZ2VyIFBsdWdpbi5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgZGVmaW5lZCBpbiB0aGUgU2NlbmUgSW5qZWN0aW9uIE1hcCBhbmQgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmUjbGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlnaHRzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHNjZW5lIGxldmVsIERhdGEgTWFuYWdlciBQbHVnaW4uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIGRlZmluZWQgaW4gdGhlIFNjZW5lIEluamVjdGlvbiBNYXAgYW5kIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHNjZW5lIGxldmVsIElucHV0IE1hbmFnZXIgUGx1Z2luLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwIGFuZCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNpbnB1dFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBMb2FkZXIgUGx1Z2luLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwIGFuZCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNsb2FkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBUaW1lIGFuZCBDbG9jayBQbHVnaW4uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIGRlZmluZWQgaW4gdGhlIFNjZW5lIEluamVjdGlvbiBNYXAgYW5kIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI3RpbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbWUuQ2xvY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHNjZW5lIGxldmVsIFR3ZWVuIE1hbmFnZXIgUGx1Z2luLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwIGFuZCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSN0d2VlbnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50d2VlbnM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgc2NlbmUgbGV2ZWwgQXJjYWRlIFBoeXNpY3MgUGx1Z2luLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZSNwaHlzaWNzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QaHlzaWNzLkFyY2FkZS5BcmNhZGVQaHlzaWNzfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBJbXBhY3QgUGh5c2ljcyBQbHVnaW4uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIGRlZmluZWQgaW4gdGhlIFNjZW5lIEluamVjdGlvbiBNYXAsIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2ltcGFjdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5JbXBhY3QuSW1wYWN0UGh5c2ljc31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltcGFjdDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzY2VuZSBsZXZlbCBNYXR0ZXIgUGh5c2ljcyBQbHVnaW4uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIGRlZmluZWQgaW4gdGhlIFNjZW5lIEluamVjdGlvbiBNYXAsIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI21hdHRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuUGh5c2ljcy5NYXR0ZXIuTWF0dGVyUGh5c2ljc31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hdHRlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBQTFVHSU5fRkJJTlNUQU5UKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEEgc2NlbmUgbGV2ZWwgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4uXHJcbiAgICAgICAgICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBkZWZpbmVkIGluIHRoZSBTY2VuZSBJbmplY3Rpb24gTWFwLCB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI2ZhY2Vib29rXHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW59XHJcbiAgICAgICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMuZmFjZWJvb2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIGRlZmluZWQgaW4gdGhlIFNjZW5lIEluamVjdGlvbiBNYXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmUjc2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjYWxlLlNjYWxlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBsdWdpbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFBsdWdpbiBNYW5hZ2VyIGlzIGEgZ2xvYmFsIHN5c3RlbSB0aGF0IGFsbG93cyBwbHVnaW5zIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCBpdCwgYW5kIGNhbiB0aGVuIGluc3RhbGxcclxuICAgICAgICAgKiB0aG9zZSBwbHVnaW5zIGludG8gU2NlbmVzIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lI3BsdWdpbnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsdWdpbnM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgeW91ciBvd24gU2NlbmVzLlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgcGVyIGdhbWUgc3RlcCB3aGlsZSB0aGUgc2NlbmUgaXMgcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2NlbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/Scene.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/SceneManager.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/scene/SceneManager.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scene/const.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar LoaderEvents = __webpack_require__(/*! ../loader/events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar Scene = __webpack_require__(/*! ./Scene */ \"./node_modules/phaser/src/scene/Scene.js\");\r\nvar Systems = __webpack_require__(/*! ./Systems */ \"./node_modules/phaser/src/scene/Systems.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Scene Manager.\r\n *\r\n * The Scene Manager is a Game level system, responsible for creating, processing and updating all of the\r\n * Scenes in a Game instance.\r\n *\r\n *\r\n * @class SceneManager\r\n * @memberof Phaser.Scenes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance this Scene Manager belongs to.\r\n * @param {object} sceneConfig - Scene specific configuration settings.\r\n */\r\nvar SceneManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function SceneManager (game, sceneConfig)\r\n    {\r\n        /**\r\n         * The Game that this SceneManager belongs to.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * An object that maps the keys to the scene so we can quickly get a scene from a key without iteration.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#keys\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.keys = {};\r\n\r\n        /**\r\n         * The array in which all of the scenes are kept.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#scenes\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.scenes = [];\r\n\r\n        /**\r\n         * Scenes pending to be added are stored in here until the manager has time to add it.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#_pending\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._pending = [];\r\n\r\n        /**\r\n         * An array of scenes waiting to be started once the game has booted.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#_start\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._start = [];\r\n\r\n        /**\r\n         * An operations queue, because we don't manipulate the scenes array during processing.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#_queue\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._queue = [];\r\n\r\n        /**\r\n         * Boot time data to merge.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#_data\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.4.0\r\n         */\r\n        this._data = {};\r\n\r\n        /**\r\n         * Is the Scene Manager actively processing the Scenes list?\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#isProcessing\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isProcessing = false;\r\n\r\n        /**\r\n         * Has the Scene Manager properly started?\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#isBooted\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.4.0\r\n         */\r\n        this.isBooted = false;\r\n\r\n        /**\r\n         * Do any of the Cameras in any of the Scenes require a custom viewport?\r\n         * If not we can skip scissor tests.\r\n         *\r\n         * @name Phaser.Scenes.SceneManager#customViewports\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.12.0\r\n         */\r\n        this.customViewports = 0;\r\n\r\n        if (sceneConfig)\r\n        {\r\n            if (!Array.isArray(sceneConfig))\r\n            {\r\n                sceneConfig = [ sceneConfig ];\r\n            }\r\n\r\n            for (var i = 0; i < sceneConfig.length; i++)\r\n            {\r\n                //  The i === 0 part just autostarts the first Scene given (unless it says otherwise in its config)\r\n                this._pending.push({\r\n                    key: 'default',\r\n                    scene: sceneConfig[i],\r\n                    autoStart: (i === 0),\r\n                    data: {}\r\n                });\r\n            }\r\n        }\r\n\r\n        game.events.once(GameEvents.READY, this.bootQueue, this);\r\n    },\r\n\r\n    /**\r\n     * Internal first-time Scene boot handler.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#bootQueue\r\n     * @private\r\n     * @since 3.2.0\r\n     */\r\n    bootQueue: function ()\r\n    {\r\n        if (this.isBooted)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var i;\r\n        var entry;\r\n        var key;\r\n        var sceneConfig;\r\n\r\n        for (i = 0; i < this._pending.length; i++)\r\n        {\r\n            entry = this._pending[i];\r\n\r\n            key = entry.key;\r\n            sceneConfig = entry.scene;\r\n\r\n            var newScene;\r\n\r\n            if (sceneConfig instanceof Scene)\r\n            {\r\n                newScene = this.createSceneFromInstance(key, sceneConfig);\r\n            }\r\n            else if (typeof sceneConfig === 'object')\r\n            {\r\n                newScene = this.createSceneFromObject(key, sceneConfig);\r\n            }\r\n            else if (typeof sceneConfig === 'function')\r\n            {\r\n                newScene = this.createSceneFromFunction(key, sceneConfig);\r\n            }\r\n\r\n            //  Replace key in case the scene changed it\r\n            key = newScene.sys.settings.key;\r\n\r\n            this.keys[key] = newScene;\r\n\r\n            this.scenes.push(newScene);\r\n\r\n            //  Any data to inject?\r\n            if (this._data[key])\r\n            {\r\n                newScene.sys.settings.data = this._data[key].data;\r\n\r\n                if (this._data[key].autoStart)\r\n                {\r\n                    entry.autoStart = true;\r\n                }\r\n            }\r\n\r\n            if (entry.autoStart || newScene.sys.settings.active)\r\n            {\r\n                this._start.push(key);\r\n            }\r\n        }\r\n\r\n        //  Clear the pending lists\r\n        this._pending.length = 0;\r\n\r\n        this._data = {};\r\n\r\n        this.isBooted = true;\r\n\r\n        //  _start might have been populated by the above\r\n        for (i = 0; i < this._start.length; i++)\r\n        {\r\n            entry = this._start[i];\r\n\r\n            this.start(entry);\r\n        }\r\n\r\n        this._start.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Process the Scene operations queue.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#processQueue\r\n     * @since 3.0.0\r\n     */\r\n    processQueue: function ()\r\n    {\r\n        var pendingLength = this._pending.length;\r\n        var queueLength = this._queue.length;\r\n\r\n        if (pendingLength === 0 && queueLength === 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var i;\r\n        var entry;\r\n\r\n        if (pendingLength)\r\n        {\r\n            for (i = 0; i < pendingLength; i++)\r\n            {\r\n                entry = this._pending[i];\r\n\r\n                this.add(entry.key, entry.scene, entry.autoStart, entry.data);\r\n            }\r\n\r\n            //  _start might have been populated by this.add\r\n            for (i = 0; i < this._start.length; i++)\r\n            {\r\n                entry = this._start[i];\r\n\r\n                this.start(entry);\r\n            }\r\n\r\n            //  Clear the pending lists\r\n            this._start.length = 0;\r\n            this._pending.length = 0;\r\n\r\n            return;\r\n        }\r\n\r\n        for (i = 0; i < this._queue.length; i++)\r\n        {\r\n            entry = this._queue[i];\r\n\r\n            this[entry.op](entry.keyA, entry.keyB);\r\n        }\r\n\r\n        this._queue.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Adds a new Scene into the SceneManager.\r\n     * You must give each Scene a unique key by which you'll identify it.\r\n     *\r\n     * The `sceneConfig` can be:\r\n     *\r\n     * * A `Phaser.Scene` object, or an object that extends it.\r\n     * * A plain JavaScript object\r\n     * * A JavaScript ES6 Class that extends `Phaser.Scene`\r\n     * * A JavaScript ES5 prototype based Class\r\n     * * A JavaScript function\r\n     *\r\n     * If a function is given then a new Scene will be created by calling it.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - A unique key used to reference the Scene, i.e. `MainMenu` or `Level1`.\r\n     * @param {(Phaser.Scene|Phaser.Types.Scenes.SettingsConfig|Phaser.Types.Scenes.CreateSceneFromObjectConfig|function)} sceneConfig - The config for the Scene\r\n     * @param {boolean} [autoStart=false] - If `true` the Scene will be started immediately after being added.\r\n     * @param {object} [data] - Optional data object. This will be set as Scene.settings.data and passed to `Scene.init`.\r\n     *\r\n     * @return {?Phaser.Scene} The added Scene, if it was added immediately, otherwise `null`.\r\n     */\r\n    add: function (key, sceneConfig, autoStart, data)\r\n    {\r\n        if (autoStart === undefined) { autoStart = false; }\r\n        if (data === undefined) { data = {}; }\r\n\r\n        //  If processing or not booted then put scene into a holding pattern\r\n        if (this.isProcessing || !this.isBooted)\r\n        {\r\n            this._pending.push({\r\n                key: key,\r\n                scene: sceneConfig,\r\n                autoStart: autoStart,\r\n                data: data\r\n            });\r\n\r\n            if (!this.isBooted)\r\n            {\r\n                this._data[key] = { data: data };\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        key = this.getKey(key, sceneConfig);\r\n\r\n        var newScene;\r\n\r\n        if (sceneConfig instanceof Scene)\r\n        {\r\n            newScene = this.createSceneFromInstance(key, sceneConfig);\r\n        }\r\n        else if (typeof sceneConfig === 'object')\r\n        {\r\n            sceneConfig.key = key;\r\n\r\n            newScene = this.createSceneFromObject(key, sceneConfig);\r\n        }\r\n        else if (typeof sceneConfig === 'function')\r\n        {\r\n            newScene = this.createSceneFromFunction(key, sceneConfig);\r\n        }\r\n\r\n        //  Any data to inject?\r\n        newScene.sys.settings.data = data;\r\n\r\n        //  Replace key in case the scene changed it\r\n        key = newScene.sys.settings.key;\r\n\r\n        this.keys[key] = newScene;\r\n\r\n        this.scenes.push(newScene);\r\n\r\n        if (autoStart || newScene.sys.settings.active)\r\n        {\r\n            if (this._pending.length)\r\n            {\r\n                this._start.push(key);\r\n            }\r\n            else\r\n            {\r\n                this.start(key);\r\n            }\r\n        }\r\n\r\n        return newScene;\r\n    },\r\n\r\n    /**\r\n     * Removes a Scene from the SceneManager.\r\n     *\r\n     * The Scene is removed from the local scenes array, it's key is cleared from the keys\r\n     * cache and Scene.Systems.destroy is then called on it.\r\n     *\r\n     * If the SceneManager is processing the Scenes when this method is called it will\r\n     * queue the operation for the next update sequence.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#remove\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} key - A unique key used to reference the Scene, i.e. `MainMenu` or `Level1`.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    remove: function (key)\r\n    {\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'remove', keyA: key, keyB: null });\r\n        }\r\n        else\r\n        {\r\n            var sceneToRemove = this.getScene(key);\r\n\r\n            if (!sceneToRemove || sceneToRemove.sys.isTransitioning())\r\n            {\r\n                return this;\r\n            }\r\n\r\n            var index = this.scenes.indexOf(sceneToRemove);\r\n            var sceneKey = sceneToRemove.sys.settings.key;\r\n\r\n            if (index > -1)\r\n            {\r\n                delete this.keys[sceneKey];\r\n                this.scenes.splice(index, 1);\r\n\r\n                if (this._start.indexOf(sceneKey) > -1)\r\n                {\r\n                    index = this._start.indexOf(sceneKey);\r\n                    this._start.splice(index, 1);\r\n                }\r\n\r\n                sceneToRemove.sys.destroy();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Boot the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#bootScene\r\n     * @private\r\n     * @fires Phaser.Scenes.Events#TRANSITION_INIT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene to boot.\r\n     */\r\n    bootScene: function (scene)\r\n    {\r\n        var sys = scene.sys;\r\n        var settings = sys.settings;\r\n\r\n        if (scene.init)\r\n        {\r\n            scene.init.call(scene, settings.data);\r\n\r\n            settings.status = CONST.INIT;\r\n\r\n            if (settings.isTransition)\r\n            {\r\n                sys.events.emit(Events.TRANSITION_INIT, settings.transitionFrom, settings.transitionDuration);\r\n            }\r\n        }\r\n\r\n        var loader;\r\n\r\n        if (sys.load)\r\n        {\r\n            loader = sys.load;\r\n\r\n            loader.reset();\r\n        }\r\n\r\n        if (loader && scene.preload)\r\n        {\r\n            scene.preload.call(scene);\r\n\r\n            //  Is the loader empty?\r\n            if (loader.list.size === 0)\r\n            {\r\n                this.create(scene);\r\n            }\r\n            else\r\n            {\r\n                settings.status = CONST.LOADING;\r\n\r\n                //  Start the loader going as we have something in the queue\r\n                loader.once(LoaderEvents.COMPLETE, this.loadComplete, this);\r\n\r\n                loader.start();\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  No preload? Then there was nothing to load either\r\n            this.create(scene);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Handles load completion for a Scene's Loader.\r\n     *\r\n     * Starts the Scene that the Loader belongs to.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#loadComplete\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Loader.LoaderPlugin} loader - The loader that has completed loading.\r\n     */\r\n    loadComplete: function (loader)\r\n    {\r\n        var scene = loader.scene;\r\n\r\n        //  TODO - Remove. This should *not* be handled here\r\n        //  Try to unlock HTML5 sounds every time any loader completes\r\n        if (this.game.sound && this.game.sound.onBlurPausedSounds)\r\n        {\r\n            this.game.sound.unlock();\r\n        }\r\n\r\n        this.create(scene);\r\n    },\r\n\r\n    /**\r\n     * Handle payload completion for a Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#payloadComplete\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Loader.LoaderPlugin} loader - The loader that has completed loading its Scene's payload.\r\n     */\r\n    payloadComplete: function (loader)\r\n    {\r\n        this.bootScene(loader.scene);\r\n    },\r\n\r\n    /**\r\n     * Updates the Scenes.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - Time elapsed.\r\n     * @param {number} delta - Delta time from the last update.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        this.processQueue();\r\n\r\n        this.isProcessing = true;\r\n\r\n        //  Loop through the active scenes in reverse order\r\n        for (var i = this.scenes.length - 1; i >= 0; i--)\r\n        {\r\n            var sys = this.scenes[i].sys;\r\n\r\n            if (sys.settings.status > CONST.START && sys.settings.status <= CONST.RUNNING)\r\n            {\r\n                sys.step(time, delta);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Renders the Scenes.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#render\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The renderer to use.\r\n     */\r\n    render: function (renderer)\r\n    {\r\n        //  Loop through the scenes in forward order\r\n        for (var i = 0; i < this.scenes.length; i++)\r\n        {\r\n            var sys = this.scenes[i].sys;\r\n\r\n            if (sys.settings.visible && sys.settings.status >= CONST.LOADING && sys.settings.status < CONST.SLEEPING)\r\n            {\r\n                sys.render(renderer);\r\n            }\r\n        }\r\n\r\n        this.isProcessing = false;\r\n    },\r\n\r\n    /**\r\n     * Calls the given Scene's {@link Phaser.Scene#create} method and updates its status.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#create\r\n     * @private\r\n     * @fires Phaser.Scenes.Events#CREATE\r\n     * @fires Phaser.Scenes.Events#TRANSITION_INIT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Scene} scene - The Scene to create.\r\n     */\r\n    create: function (scene)\r\n    {\r\n        var sys = scene.sys;\r\n        var settings = sys.settings;\r\n\r\n        if (scene.create)\r\n        {\r\n            settings.status = CONST.CREATING;\r\n\r\n            scene.create.call(scene, settings.data);\r\n\r\n            if (settings.status === CONST.DESTROYED)\r\n            {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (settings.isTransition)\r\n        {\r\n            sys.events.emit(Events.TRANSITION_START, settings.transitionFrom, settings.transitionDuration);\r\n        }\r\n\r\n        //  If the Scene has an update function we'll set it now, otherwise it'll remain as NOOP\r\n        if (scene.update)\r\n        {\r\n            sys.sceneUpdate = scene.update;\r\n        }\r\n\r\n        settings.status = CONST.RUNNING;\r\n\r\n        sys.events.emit(Events.CREATE, scene);\r\n    },\r\n\r\n    /**\r\n     * Creates and initializes a Scene from a function.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#createSceneFromFunction\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the Scene.\r\n     * @param {function} scene - The function to create the Scene from.\r\n     *\r\n     * @return {Phaser.Scene} The created Scene.\r\n     */\r\n    createSceneFromFunction: function (key, scene)\r\n    {\r\n        var newScene = new scene();\r\n\r\n        if (newScene instanceof Scene)\r\n        {\r\n            var configKey = newScene.sys.settings.key;\r\n\r\n            if (configKey !== '')\r\n            {\r\n                key = configKey;\r\n            }\r\n\r\n            if (this.keys.hasOwnProperty(key))\r\n            {\r\n                throw new Error('Cannot add a Scene with duplicate key: ' + key);\r\n            }\r\n\r\n            return this.createSceneFromInstance(key, newScene);\r\n        }\r\n        else\r\n        {\r\n            newScene.sys = new Systems(newScene);\r\n\r\n            newScene.sys.settings.key = key;\r\n\r\n            newScene.sys.init(this.game);\r\n\r\n            return newScene;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates and initializes a Scene instance.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#createSceneFromInstance\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the Scene.\r\n     * @param {Phaser.Scene} newScene - The Scene instance.\r\n     *\r\n     * @return {Phaser.Scene} The created Scene.\r\n     */\r\n    createSceneFromInstance: function (key, newScene)\r\n    {\r\n        var configKey = newScene.sys.settings.key;\r\n\r\n        if (configKey !== '')\r\n        {\r\n            key = configKey;\r\n        }\r\n        else\r\n        {\r\n            newScene.sys.settings.key = key;\r\n        }\r\n\r\n        newScene.sys.init(this.game);\r\n\r\n        return newScene;\r\n    },\r\n\r\n    /**\r\n     * Creates and initializes a Scene from an Object definition.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#createSceneFromObject\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key of the Scene.\r\n     * @param {(string|Phaser.Types.Scenes.SettingsConfig|Phaser.Types.Scenes.CreateSceneFromObjectConfig)} sceneConfig - The Scene config.\r\n     *\r\n     * @return {Phaser.Scene} The created Scene.\r\n     */\r\n    createSceneFromObject: function (key, sceneConfig)\r\n    {\r\n        var newScene = new Scene(sceneConfig);\r\n\r\n        var configKey = newScene.sys.settings.key;\r\n\r\n        if (configKey !== '')\r\n        {\r\n            key = configKey;\r\n        }\r\n        else\r\n        {\r\n            newScene.sys.settings.key = key;\r\n        }\r\n\r\n        newScene.sys.init(this.game);\r\n\r\n        //  Extract callbacks\r\n\r\n        var defaults = [ 'init', 'preload', 'create', 'update', 'render' ];\r\n\r\n        for (var i = 0; i < defaults.length; i++)\r\n        {\r\n            var sceneCallback = GetValue(sceneConfig, defaults[i], null);\r\n\r\n            if (sceneCallback)\r\n            {\r\n                newScene[defaults[i]] = sceneCallback;\r\n            }\r\n        }\r\n\r\n        //  Now let's move across any other functions or properties that may exist in the extend object:\r\n\r\n        /*\r\n        scene: {\r\n            preload: preload,\r\n            create: create,\r\n            extend: {\r\n                hello: 1,\r\n                test: 'atari',\r\n                addImage: addImage\r\n            }\r\n        }\r\n        */\r\n\r\n        if (sceneConfig.hasOwnProperty('extend'))\r\n        {\r\n            for (var propertyKey in sceneConfig.extend)\r\n            {\r\n                if (!sceneConfig.extend.hasOwnProperty(propertyKey))\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                var value = sceneConfig.extend[propertyKey];\r\n\r\n                if (propertyKey === 'data' && newScene.hasOwnProperty('data') && typeof value === 'object')\r\n                {\r\n                    //  Populate the DataManager\r\n                    newScene.data.merge(value);\r\n                }\r\n                else if (propertyKey !== 'sys')\r\n                {\r\n                    newScene[propertyKey] = value;\r\n                }\r\n            }\r\n        }\r\n\r\n        return newScene;\r\n    },\r\n\r\n    /**\r\n     * Retrieves the key of a Scene from a Scene config.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#getKey\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key to check in the Scene config.\r\n     * @param {(Phaser.Scene|Phaser.Types.Scenes.SettingsConfig|function)} sceneConfig - The Scene config.\r\n     *\r\n     * @return {string} The Scene key.\r\n     */\r\n    getKey: function (key, sceneConfig)\r\n    {\r\n        if (!key) { key = 'default'; }\r\n\r\n        if (typeof sceneConfig === 'function')\r\n        {\r\n            return key;\r\n        }\r\n        else if (sceneConfig instanceof Scene)\r\n        {\r\n            key = sceneConfig.sys.settings.key;\r\n        }\r\n        else if (typeof sceneConfig === 'object' && sceneConfig.hasOwnProperty('key'))\r\n        {\r\n            key = sceneConfig.key;\r\n        }\r\n\r\n        //  By this point it's either 'default' or extracted from the Scene\r\n\r\n        if (this.keys.hasOwnProperty(key))\r\n        {\r\n            throw new Error('Cannot add a Scene with duplicate key: ' + key);\r\n        }\r\n        else\r\n        {\r\n            return key;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all the current Scenes being managed by this Scene Manager.\r\n     *\r\n     * You can filter the output by the active state of the Scene and choose to have\r\n     * the array returned in normal or reversed order.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#getScenes\r\n     * @since 3.16.0\r\n     *\r\n     * @param {boolean} [isActive=true] - Only include Scene's that are currently active?\r\n     * @param {boolean} [inReverse=false] - Return the array of Scenes in reverse?\r\n     *\r\n     * @return {Phaser.Scene[]} An array containing all of the Scenes in the Scene Manager.\r\n     */\r\n    getScenes: function (isActive, inReverse)\r\n    {\r\n        if (isActive === undefined) { isActive = true; }\r\n        if (inReverse === undefined) { inReverse = false; }\r\n\r\n        var out = [];\r\n        var scenes = this.scenes;\r\n\r\n        for (var i = 0; i < scenes.length; i++)\r\n        {\r\n            var scene = scenes[i];\r\n\r\n            if (scene && (!isActive || (isActive && scene.sys.isActive())))\r\n            {\r\n                out.push(scene);\r\n            }\r\n        }\r\n\r\n        return (inReverse) ? out.reverse() : out;\r\n    },\r\n\r\n    /**\r\n     * Retrieves a Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#getScene\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string|Phaser.Scene} key - The Scene to retrieve.\r\n     *\r\n     * @return {?Phaser.Scene} The Scene.\r\n     */\r\n    getScene: function (key)\r\n    {\r\n        if (typeof key === 'string')\r\n        {\r\n            if (this.keys[key])\r\n            {\r\n                return this.keys[key];\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (var i = 0; i < this.scenes.length; i++)\r\n            {\r\n                if (key === this.scenes[i])\r\n                {\r\n                    return key;\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Determines whether a Scene is running.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#isActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is running.\r\n     */\r\n    isActive: function (key)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            return scene.sys.isActive();\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Determines whether a Scene is paused.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#isPaused\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} key - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is paused.\r\n     */\r\n    isPaused: function (key)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            return scene.sys.isPaused();\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Determines whether a Scene is visible.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#isVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is visible.\r\n     */\r\n    isVisible: function (key)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            return scene.sys.isVisible();\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Determines whether a Scene is sleeping.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#isSleeping\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is sleeping.\r\n     */\r\n    isSleeping: function (key)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            return scene.sys.isSleeping();\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Pauses the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to pause.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted by its pause event.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    pause: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            scene.sys.pause(data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to resume.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted by its resume event.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    resume: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            scene.sys.resume(data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Puts the given Scene to sleep.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#sleep\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to put to sleep.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted by its sleep event.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    sleep: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene && !scene.sys.isTransitioning())\r\n        {\r\n            scene.sys.sleep(data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Awakens the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#wake\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to wake up.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted by its wake event.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    wake: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            scene.sys.wake(data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Runs the given Scene.\r\n     *\r\n     * If the given Scene is paused, it will resume it. If sleeping, it will wake it.\r\n     * If not running at all, it will be started.\r\n     *\r\n     * Use this if you wish to open a modal Scene by calling `pause` on the current\r\n     * Scene, then `run` on the modal Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#run\r\n     * @since 3.10.0\r\n     *\r\n     * @param {string} key - The Scene to run.\r\n     * @param {object} [data] - A data object that will be passed to the Scene on start, wake, or resume.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This Scene Manager.\r\n     */\r\n    run: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (!scene)\r\n        {\r\n            for (var i = 0; i < this._pending.length; i++)\r\n            {\r\n                if (this._pending[i].key === key)\r\n                {\r\n                    this.queueOp('start', key, data);\r\n                    break;\r\n                }\r\n            }\r\n            return this;\r\n        }\r\n\r\n        if (scene.sys.isSleeping())\r\n        {\r\n            //  Sleeping?\r\n            scene.sys.wake(data);\r\n        }\r\n        else if (scene.sys.isPaused())\r\n        {\r\n            //  Paused?\r\n            scene.sys.resume(data);\r\n        }\r\n        else\r\n        {\r\n            //  Not actually running?\r\n            this.start(key, data);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Starts the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#start\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to start.\r\n     * @param {object} [data] - Optional data object to pass to Scene.Settings and Scene.init.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    start: function (key, data)\r\n    {\r\n        //  If the Scene Manager is not running, then put the Scene into a holding pattern\r\n        if (!this.isBooted)\r\n        {\r\n            this._data[key] = {\r\n                autoStart: true,\r\n                data: data\r\n            };\r\n\r\n            return this;\r\n        }\r\n\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            //  If the Scene is already running (perhaps they called start from a launched sub-Scene?)\r\n            //  then we close it down before starting it again.\r\n            if (scene.sys.isActive() || scene.sys.isPaused())\r\n            {\r\n                scene.sys.shutdown();\r\n\r\n                scene.sys.start(data);\r\n            }\r\n            else\r\n            {\r\n                scene.sys.start(data);\r\n\r\n                var loader;\r\n\r\n                if (scene.sys.load)\r\n                {\r\n                    loader = scene.sys.load;\r\n                }\r\n\r\n                //  Files payload?\r\n                if (loader && scene.sys.settings.hasOwnProperty('pack'))\r\n                {\r\n                    loader.reset();\r\n\r\n                    if (loader.addPack({ payload: scene.sys.settings.pack }))\r\n                    {\r\n                        scene.sys.settings.status = CONST.LOADING;\r\n\r\n                        loader.once(LoaderEvents.COMPLETE, this.payloadComplete, this);\r\n\r\n                        loader.start();\r\n\r\n                        return this;\r\n                    }\r\n                }\r\n            }\r\n\r\n            this.bootScene(scene);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to stop.\r\n     * @param {object} [data] - Optional data object to pass to Scene.shutdown.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    stop: function (key, data)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        if (scene && !scene.sys.isTransitioning())\r\n        {\r\n            scene.sys.shutdown(data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sleeps one one Scene and starts the other.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#switch\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} from - The Scene to sleep.\r\n     * @param {string} to - The Scene to start.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    switch: function (from, to)\r\n    {\r\n        var sceneA = this.getScene(from);\r\n        var sceneB = this.getScene(to);\r\n\r\n        if (sceneA && sceneB && sceneA !== sceneB)\r\n        {\r\n            this.sleep(from);\r\n\r\n            if (this.isSleeping(to))\r\n            {\r\n                this.wake(to);\r\n            }\r\n            else\r\n            {\r\n                this.start(to);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieves a Scene by numeric index.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#getAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The index of the Scene to retrieve.\r\n     *\r\n     * @return {(Phaser.Scene|undefined)} The Scene.\r\n     */\r\n    getAt: function (index)\r\n    {\r\n        return this.scenes[index];\r\n    },\r\n\r\n    /**\r\n     * Retrieves the numeric index of a Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#getIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} key - The key of the Scene.\r\n     *\r\n     * @return {integer} The index of the Scene.\r\n     */\r\n    getIndex: function (key)\r\n    {\r\n        var scene = this.getScene(key);\r\n\r\n        return this.scenes.indexOf(scene);\r\n    },\r\n\r\n    /**\r\n     * Brings a Scene to the top of the Scenes list.\r\n     *\r\n     * This means it will render above all other Scenes.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#bringToTop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} key - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    bringToTop: function (key)\r\n    {\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'bringToTop', keyA: key, keyB: null });\r\n        }\r\n        else\r\n        {\r\n            var index = this.getIndex(key);\r\n\r\n            if (index !== -1 && index < this.scenes.length)\r\n            {\r\n                var scene = this.getScene(key);\r\n\r\n                this.scenes.splice(index, 1);\r\n                this.scenes.push(scene);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sends a Scene to the back of the Scenes list.\r\n     *\r\n     * This means it will render below all other Scenes.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#sendToBack\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} key - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    sendToBack: function (key)\r\n    {\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'sendToBack', keyA: key, keyB: null });\r\n        }\r\n        else\r\n        {\r\n            var index = this.getIndex(key);\r\n\r\n            if (index !== -1 && index > 0)\r\n            {\r\n                var scene = this.getScene(key);\r\n\r\n                this.scenes.splice(index, 1);\r\n                this.scenes.unshift(scene);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene down one position in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#moveDown\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} key - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    moveDown: function (key)\r\n    {\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'moveDown', keyA: key, keyB: null });\r\n        }\r\n        else\r\n        {\r\n            var indexA = this.getIndex(key);\r\n\r\n            if (indexA > 0)\r\n            {\r\n                var indexB = indexA - 1;\r\n                var sceneA = this.getScene(key);\r\n                var sceneB = this.getAt(indexB);\r\n\r\n                this.scenes[indexA] = sceneB;\r\n                this.scenes[indexB] = sceneA;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene up one position in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#moveUp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} key - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    moveUp: function (key)\r\n    {\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'moveUp', keyA: key, keyB: null });\r\n        }\r\n        else\r\n        {\r\n            var indexA = this.getIndex(key);\r\n\r\n            if (indexA < this.scenes.length - 1)\r\n            {\r\n                var indexB = indexA + 1;\r\n                var sceneA = this.getScene(key);\r\n                var sceneB = this.getAt(indexB);\r\n\r\n                this.scenes[indexA] = sceneB;\r\n                this.scenes[indexB] = sceneA;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene so it is immediately above another Scene in the Scenes list.\r\n     *\r\n     * This means it will render over the top of the other Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#moveAbove\r\n     * @since 3.2.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} keyA - The Scene that Scene B will be moved above.\r\n     * @param {(string|Phaser.Scene)} keyB - The Scene to be moved.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    moveAbove: function (keyA, keyB)\r\n    {\r\n        if (keyA === keyB)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'moveAbove', keyA: keyA, keyB: keyB });\r\n        }\r\n        else\r\n        {\r\n            var indexA = this.getIndex(keyA);\r\n            var indexB = this.getIndex(keyB);\r\n\r\n            if (indexA !== -1 && indexB !== -1)\r\n            {\r\n                var tempScene = this.getAt(indexB);\r\n\r\n                //  Remove\r\n                this.scenes.splice(indexB, 1);\r\n\r\n                //  Add in new location\r\n                this.scenes.splice(indexA + 1, 0, tempScene);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene so it is immediately below another Scene in the Scenes list.\r\n     *\r\n     * This means it will render behind the other Scene.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#moveBelow\r\n     * @since 3.2.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} keyA - The Scene that Scene B will be moved above.\r\n     * @param {(string|Phaser.Scene)} keyB - The Scene to be moved.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    moveBelow: function (keyA, keyB)\r\n    {\r\n        if (keyA === keyB)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'moveBelow', keyA: keyA, keyB: keyB });\r\n        }\r\n        else\r\n        {\r\n            var indexA = this.getIndex(keyA);\r\n            var indexB = this.getIndex(keyB);\r\n\r\n            if (indexA !== -1 && indexB !== -1)\r\n            {\r\n                var tempScene = this.getAt(indexB);\r\n\r\n                //  Remove\r\n                this.scenes.splice(indexB, 1);\r\n\r\n                if (indexA === 0)\r\n                {\r\n                    this.scenes.unshift(tempScene);\r\n                }\r\n                else\r\n                {\r\n                    //  Add in new location\r\n                    this.scenes.splice(indexA, 0, tempScene);\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Queue a Scene operation for the next update.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#queueOp\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} op - The operation to perform.\r\n     * @param {(string|Phaser.Scene)} keyA - Scene A.\r\n     * @param {(any|string|Phaser.Scene)} [keyB] - Scene B, or a data object.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    queueOp: function (op, keyA, keyB)\r\n    {\r\n        this._queue.push({ op: op, keyA: keyA, keyB: keyB });\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Swaps the positions of two Scenes in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#swapPosition\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} keyA - The first Scene to swap.\r\n     * @param {(string|Phaser.Scene)} keyB - The second Scene to swap.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    swapPosition: function (keyA, keyB)\r\n    {\r\n        if (keyA === keyB)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (this.isProcessing)\r\n        {\r\n            this._queue.push({ op: 'swapPosition', keyA: keyA, keyB: keyB });\r\n        }\r\n        else\r\n        {\r\n            var indexA = this.getIndex(keyA);\r\n            var indexB = this.getIndex(keyB);\r\n\r\n            if (indexA !== indexB && indexA !== -1 && indexB !== -1)\r\n            {\r\n                var tempScene = this.getAt(indexA);\r\n\r\n                this.scenes[indexA] = this.scenes[indexB];\r\n                this.scenes[indexB] = tempScene;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Dumps debug information about each Scene to the developer console.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#dump\r\n     * @since 3.2.0\r\n     */\r\n    dump: function ()\r\n    {\r\n        var out = [];\r\n        var map = [ 'pending', 'init', 'start', 'loading', 'creating', 'running', 'paused', 'sleeping', 'shutdown', 'destroyed' ];\r\n\r\n        for (var i = 0; i < this.scenes.length; i++)\r\n        {\r\n            var sys = this.scenes[i].sys;\r\n\r\n            var key = (sys.settings.visible && (sys.settings.status === CONST.RUNNING || sys.settings.status === CONST.PAUSED)) ? '[*] ' : '[-] ';\r\n            key += sys.settings.key + ' (' + map[sys.settings.status] + ')';\r\n\r\n            out.push(key);\r\n        }\r\n\r\n        console.log(out.join('\\n'));\r\n    },\r\n\r\n    /**\r\n     * Destroy the SceneManager and all of its Scene's systems.\r\n     *\r\n     * @method Phaser.Scenes.SceneManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        for (var i = 0; i < this.scenes.length; i++)\r\n        {\r\n            var sys = this.scenes[i].sys;\r\n\r\n            sys.destroy();\r\n        }\r\n\r\n        this.update = NOOP;\r\n\r\n        this.scenes = [];\r\n\r\n        this._pending = [];\r\n        this._start = [];\r\n        this._queue = [];\r\n\r\n        this.game = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = SceneManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TY2VuZU1hbmFnZXIuanM/Y2VjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLGlFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsb0ZBQTBCO0FBQ2pELG1CQUFtQixtQkFBTyxDQUFDLDBFQUFrQjtBQUM3QyxXQUFXLG1CQUFPLENBQUMsOERBQWU7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLHlEQUFTO0FBQzdCLGNBQWMsbUJBQU8sQ0FBQyw2REFBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLHdCQUF3QjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHdCQUF3QjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSwyR0FBMkc7QUFDMUgsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixjQUFjO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7QUFDekQsaUNBQWlDLFdBQVc7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixzQ0FBc0M7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRFQUE0RTtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGdDQUFnQywwQkFBMEI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDRGQUE0RjtBQUMzRztBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMkRBQTJEO0FBQzFFO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsZUFBZTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsaUJBQWlCO0FBQ3RELHNDQUFzQyxtQkFBbUI7O0FBRXpEO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHdCQUF3QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLDBCQUEwQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLG1DQUFtQztBQUMzRTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwwQ0FBMEM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMENBQTBDO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsd0NBQXdDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHNDQUFzQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsMENBQTBDO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QiwwQ0FBMEM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLDBCQUEwQjtBQUN6QztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlDQUFpQzs7QUFFM0Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLDZDQUE2QztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TY2VuZU1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vY29yZS9ldmVudHMnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBMb2FkZXJFdmVudHMgPSByZXF1aXJlKCcuLi9sb2FkZXIvZXZlbnRzJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgU2NlbmUgPSByZXF1aXJlKCcuL1NjZW5lJyk7XHJcbnZhciBTeXN0ZW1zID0gcmVxdWlyZSgnLi9TeXN0ZW1zJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgU2NlbmUgTWFuYWdlci5cclxuICpcclxuICogVGhlIFNjZW5lIE1hbmFnZXIgaXMgYSBHYW1lIGxldmVsIHN5c3RlbSwgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nLCBwcm9jZXNzaW5nIGFuZCB1cGRhdGluZyBhbGwgb2YgdGhlXHJcbiAqIFNjZW5lcyBpbiBhIEdhbWUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqXHJcbiAqIEBjbGFzcyBTY2VuZU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5TY2VuZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIFBoYXNlci5HYW1lIGluc3RhbmNlIHRoaXMgU2NlbmUgTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gc2NlbmVDb25maWcgLSBTY2VuZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxyXG4gKi9cclxudmFyIFNjZW5lTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTY2VuZU1hbmFnZXIgKGdhbWUsIHNjZW5lQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIHRoYXQgdGhpcyBTY2VuZU1hbmFnZXIgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUga2V5cyB0byB0aGUgc2NlbmUgc28gd2UgY2FuIHF1aWNrbHkgZ2V0IGEgc2NlbmUgZnJvbSBhIGtleSB3aXRob3V0IGl0ZXJhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2tleXNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5cyA9IHt9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYXJyYXkgaW4gd2hpY2ggYWxsIG9mIHRoZSBzY2VuZXMgYXJlIGtlcHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNzY2VuZXNcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmVzIHBlbmRpbmcgdG8gYmUgYWRkZWQgYXJlIHN0b3JlZCBpbiBoZXJlIHVudGlsIHRoZSBtYW5hZ2VyIGhhcyB0aW1lIHRvIGFkZCBpdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI19wZW5kaW5nXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBzY2VuZXMgd2FpdGluZyB0byBiZSBzdGFydGVkIG9uY2UgdGhlIGdhbWUgaGFzIGJvb3RlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI19zdGFydFxyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9wZXJhdGlvbnMgcXVldWUsIGJlY2F1c2Ugd2UgZG9uJ3QgbWFuaXB1bGF0ZSB0aGUgc2NlbmVzIGFycmF5IGR1cmluZyBwcm9jZXNzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjX3F1ZXVlXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQm9vdCB0aW1lIGRhdGEgdG8gbWVyZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNfZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoZSBTY2VuZSBNYW5hZ2VyIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIFNjZW5lcyBsaXN0P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjaXNQcm9jZXNzaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYXMgdGhlIFNjZW5lIE1hbmFnZXIgcHJvcGVybHkgc3RhcnRlZD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2lzQm9vdGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzQm9vdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvIGFueSBvZiB0aGUgQ2FtZXJhcyBpbiBhbnkgb2YgdGhlIFNjZW5lcyByZXF1aXJlIGEgY3VzdG9tIHZpZXdwb3J0P1xyXG4gICAgICAgICAqIElmIG5vdCB3ZSBjYW4gc2tpcCBzY2lzc29yIHRlc3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjY3VzdG9tVmlld3BvcnRzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVmlld3BvcnRzID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lQ29uZmlnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjZW5lQ29uZmlnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2NlbmVDb25maWcgPSBbIHNjZW5lQ29uZmlnIF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmVDb25maWcubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGUgaSA9PT0gMCBwYXJ0IGp1c3QgYXV0b3N0YXJ0cyB0aGUgZmlyc3QgU2NlbmUgZ2l2ZW4gKHVubGVzcyBpdCBzYXlzIG90aGVyd2lzZSBpbiBpdHMgY29uZmlnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogc2NlbmVDb25maWdbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b1N0YXJ0OiAoaSA9PT0gMCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge31cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnYW1lLmV2ZW50cy5vbmNlKEdhbWVFdmVudHMuUkVBRFksIHRoaXMuYm9vdFF1ZXVlLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBmaXJzdC10aW1lIFNjZW5lIGJvb3QgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2Jvb3RRdWV1ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICovXHJcbiAgICBib290UXVldWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNCb290ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZW50cnk7XHJcbiAgICAgICAgdmFyIGtleTtcclxuICAgICAgICB2YXIgc2NlbmVDb25maWc7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9wZW5kaW5nLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW50cnkgPSB0aGlzLl9wZW5kaW5nW2ldO1xyXG5cclxuICAgICAgICAgICAga2V5ID0gZW50cnkua2V5O1xyXG4gICAgICAgICAgICBzY2VuZUNvbmZpZyA9IGVudHJ5LnNjZW5lO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5ld1NjZW5lO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNjZW5lQ29uZmlnIGluc3RhbmNlb2YgU2NlbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5ld1NjZW5lID0gdGhpcy5jcmVhdGVTY2VuZUZyb21JbnN0YW5jZShrZXksIHNjZW5lQ29uZmlnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2NlbmVDb25maWcgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXdTY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmVGcm9tT2JqZWN0KGtleSwgc2NlbmVDb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2VuZUNvbmZpZyA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV3U2NlbmUgPSB0aGlzLmNyZWF0ZVNjZW5lRnJvbUZ1bmN0aW9uKGtleSwgc2NlbmVDb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgUmVwbGFjZSBrZXkgaW4gY2FzZSB0aGUgc2NlbmUgY2hhbmdlZCBpdFxyXG4gICAgICAgICAgICBrZXkgPSBuZXdTY2VuZS5zeXMuc2V0dGluZ3Mua2V5O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBuZXdTY2VuZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVzLnB1c2gobmV3U2NlbmUpO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFueSBkYXRhIHRvIGluamVjdD9cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFba2V5XSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV3U2NlbmUuc3lzLnNldHRpbmdzLmRhdGEgPSB0aGlzLl9kYXRhW2tleV0uZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGF0YVtrZXldLmF1dG9TdGFydClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5hdXRvU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkuYXV0b1N0YXJ0IHx8IG5ld1NjZW5lLnN5cy5zZXR0aW5ncy5hY3RpdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIENsZWFyIHRoZSBwZW5kaW5nIGxpc3RzXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuaXNCb290ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyAgX3N0YXJ0IG1pZ2h0IGhhdmUgYmVlbiBwb3B1bGF0ZWQgYnkgdGhlIGFib3ZlXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX3N0YXJ0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW50cnkgPSB0aGlzLl9zdGFydFtpXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnQoZW50cnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RhcnQubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzIHRoZSBTY2VuZSBvcGVyYXRpb25zIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjcHJvY2Vzc1F1ZXVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc1F1ZXVlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwZW5kaW5nTGVuZ3RoID0gdGhpcy5fcGVuZGluZy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIHF1ZXVlTGVuZ3RoID0gdGhpcy5fcXVldWUubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAocGVuZGluZ0xlbmd0aCA9PT0gMCAmJiBxdWV1ZUxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBlbnRyeTtcclxuXHJcbiAgICAgICAgaWYgKHBlbmRpbmdMZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0xlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuX3BlbmRpbmdbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoZW50cnkua2V5LCBlbnRyeS5zY2VuZSwgZW50cnkuYXV0b1N0YXJ0LCBlbnRyeS5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIF9zdGFydCBtaWdodCBoYXZlIGJlZW4gcG9wdWxhdGVkIGJ5IHRoaXMuYWRkXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9zdGFydC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW50cnkgPSB0aGlzLl9zdGFydFtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIENsZWFyIHRoZSBwZW5kaW5nIGxpc3RzXHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Lmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5fcXVldWVbaV07XHJcblxyXG4gICAgICAgICAgICB0aGlzW2VudHJ5Lm9wXShlbnRyeS5rZXlBLCBlbnRyeS5rZXlCKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3F1ZXVlLmxlbmd0aCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG5ldyBTY2VuZSBpbnRvIHRoZSBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKiBZb3UgbXVzdCBnaXZlIGVhY2ggU2NlbmUgYSB1bmlxdWUga2V5IGJ5IHdoaWNoIHlvdSdsbCBpZGVudGlmeSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYHNjZW5lQ29uZmlnYCBjYW4gYmU6XHJcbiAgICAgKlxyXG4gICAgICogKiBBIGBQaGFzZXIuU2NlbmVgIG9iamVjdCwgb3IgYW4gb2JqZWN0IHRoYXQgZXh0ZW5kcyBpdC5cclxuICAgICAqICogQSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxyXG4gICAgICogKiBBIEphdmFTY3JpcHQgRVM2IENsYXNzIHRoYXQgZXh0ZW5kcyBgUGhhc2VyLlNjZW5lYFxyXG4gICAgICogKiBBIEphdmFTY3JpcHQgRVM1IHByb3RvdHlwZSBiYXNlZCBDbGFzc1xyXG4gICAgICogKiBBIEphdmFTY3JpcHQgZnVuY3Rpb25cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIGZ1bmN0aW9uIGlzIGdpdmVuIHRoZW4gYSBuZXcgU2NlbmUgd2lsbCBiZSBjcmVhdGVkIGJ5IGNhbGxpbmcgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBIHVuaXF1ZSBrZXkgdXNlZCB0byByZWZlcmVuY2UgdGhlIFNjZW5lLCBpLmUuIGBNYWluTWVudWAgb3IgYExldmVsMWAuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuU2NlbmV8UGhhc2VyLlR5cGVzLlNjZW5lcy5TZXR0aW5nc0NvbmZpZ3xQaGFzZXIuVHlwZXMuU2NlbmVzLkNyZWF0ZVNjZW5lRnJvbU9iamVjdENvbmZpZ3xmdW5jdGlvbil9IHNjZW5lQ29uZmlnIC0gVGhlIGNvbmZpZyBmb3IgdGhlIFNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvU3RhcnQ9ZmFsc2VdIC0gSWYgYHRydWVgIHRoZSBTY2VuZSB3aWxsIGJlIHN0YXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgYWRkZWQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gT3B0aW9uYWwgZGF0YSBvYmplY3QuIFRoaXMgd2lsbCBiZSBzZXQgYXMgU2NlbmUuc2V0dGluZ3MuZGF0YSBhbmQgcGFzc2VkIHRvIGBTY2VuZS5pbml0YC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlNjZW5lfSBUaGUgYWRkZWQgU2NlbmUsIGlmIGl0IHdhcyBhZGRlZCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoa2V5LCBzY2VuZUNvbmZpZywgYXV0b1N0YXJ0LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhdXRvU3RhcnQgPT09IHVuZGVmaW5lZCkgeyBhdXRvU3RhcnQgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHsgZGF0YSA9IHt9OyB9XHJcblxyXG4gICAgICAgIC8vICBJZiBwcm9jZXNzaW5nIG9yIG5vdCBib290ZWQgdGhlbiBwdXQgc2NlbmUgaW50byBhIGhvbGRpbmcgcGF0dGVyblxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZyB8fCAhdGhpcy5pc0Jvb3RlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgICAgIHNjZW5lOiBzY2VuZUNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGF1dG9TdGFydDogYXV0b1N0YXJ0LFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0Jvb3RlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVtrZXldID0geyBkYXRhOiBkYXRhIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5nZXRLZXkoa2V5LCBzY2VuZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIHZhciBuZXdTY2VuZTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lQ29uZmlnIGluc3RhbmNlb2YgU2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuZXdTY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmVGcm9tSW5zdGFuY2Uoa2V5LCBzY2VuZUNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2VuZUNvbmZpZyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZUNvbmZpZy5rZXkgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBuZXdTY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmVGcm9tT2JqZWN0KGtleSwgc2NlbmVDb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2NlbmVDb25maWcgPT09ICdmdW5jdGlvbicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuZXdTY2VuZSA9IHRoaXMuY3JlYXRlU2NlbmVGcm9tRnVuY3Rpb24oa2V5LCBzY2VuZUNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQW55IGRhdGEgdG8gaW5qZWN0P1xyXG4gICAgICAgIG5ld1NjZW5lLnN5cy5zZXR0aW5ncy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgLy8gIFJlcGxhY2Uga2V5IGluIGNhc2UgdGhlIHNjZW5lIGNoYW5nZWQgaXRcclxuICAgICAgICBrZXkgPSBuZXdTY2VuZS5zeXMuc2V0dGluZ3Mua2V5O1xyXG5cclxuICAgICAgICB0aGlzLmtleXNba2V5XSA9IG5ld1NjZW5lO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lcy5wdXNoKG5ld1NjZW5lKTtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9TdGFydCB8fCBuZXdTY2VuZS5zeXMuc2V0dGluZ3MuYWN0aXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdTY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgU2NlbmUgZnJvbSB0aGUgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBTY2VuZSBpcyByZW1vdmVkIGZyb20gdGhlIGxvY2FsIHNjZW5lcyBhcnJheSwgaXQncyBrZXkgaXMgY2xlYXJlZCBmcm9tIHRoZSBrZXlzXHJcbiAgICAgKiBjYWNoZSBhbmQgU2NlbmUuU3lzdGVtcy5kZXN0cm95IGlzIHRoZW4gY2FsbGVkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBTY2VuZU1hbmFnZXIgaXMgcHJvY2Vzc2luZyB0aGUgU2NlbmVzIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIGl0IHdpbGxcclxuICAgICAqIHF1ZXVlIHRoZSBvcGVyYXRpb24gZm9yIHRoZSBuZXh0IHVwZGF0ZSBzZXF1ZW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI3JlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEEgdW5pcXVlIGtleSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgU2NlbmUsIGkuZS4gYE1haW5NZW51YCBvciBgTGV2ZWwxYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHsgb3A6ICdyZW1vdmUnLCBrZXlBOiBrZXksIGtleUI6IG51bGwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZVRvUmVtb3ZlID0gdGhpcy5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzY2VuZVRvUmVtb3ZlIHx8IHNjZW5lVG9SZW1vdmUuc3lzLmlzVHJhbnNpdGlvbmluZygpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5zY2VuZXMuaW5kZXhPZihzY2VuZVRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgdmFyIHNjZW5lS2V5ID0gc2NlbmVUb1JlbW92ZS5zeXMuc2V0dGluZ3Mua2V5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmtleXNbc2NlbmVLZXldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhcnQuaW5kZXhPZihzY2VuZUtleSkgPiAtMSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuX3N0YXJ0LmluZGV4T2Yoc2NlbmVLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc2NlbmVUb1JlbW92ZS5zeXMuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb290IHRoZSBnaXZlbiBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2Jvb3RTY2VuZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX0lOSVRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byBib290LlxyXG4gICAgICovXHJcbiAgICBib290U2NlbmU6IGZ1bmN0aW9uIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc3lzID0gc2NlbmUuc3lzO1xyXG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lLmluaXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5pbml0LmNhbGwoc2NlbmUsIHNldHRpbmdzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgc2V0dGluZ3Muc3RhdHVzID0gQ09OU1QuSU5JVDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5pc1RyYW5zaXRpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN5cy5ldmVudHMuZW1pdChFdmVudHMuVFJBTlNJVElPTl9JTklULCBzZXR0aW5ncy50cmFuc2l0aW9uRnJvbSwgc2V0dGluZ3MudHJhbnNpdGlvbkR1cmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxvYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKHN5cy5sb2FkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGVyID0gc3lzLmxvYWQ7XHJcblxyXG4gICAgICAgICAgICBsb2FkZXIucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsb2FkZXIgJiYgc2NlbmUucHJlbG9hZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjZW5lLnByZWxvYWQuY2FsbChzY2VuZSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgSXMgdGhlIGxvYWRlciBlbXB0eT9cclxuICAgICAgICAgICAgaWYgKGxvYWRlci5saXN0LnNpemUgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHNjZW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLnN0YXR1cyA9IENPTlNULkxPQURJTkc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFN0YXJ0IHRoZSBsb2FkZXIgZ29pbmcgYXMgd2UgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHF1ZXVlXHJcbiAgICAgICAgICAgICAgICBsb2FkZXIub25jZShMb2FkZXJFdmVudHMuQ09NUExFVEUsIHRoaXMubG9hZENvbXBsZXRlLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2FkZXIuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTm8gcHJlbG9hZD8gVGhlbiB0aGVyZSB3YXMgbm90aGluZyB0byBsb2FkIGVpdGhlclxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZShzY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgbG9hZCBjb21wbGV0aW9uIGZvciBhIFNjZW5lJ3MgTG9hZGVyLlxyXG4gICAgICpcclxuICAgICAqIFN0YXJ0cyB0aGUgU2NlbmUgdGhhdCB0aGUgTG9hZGVyIGJlbG9uZ3MgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNsb2FkQ29tcGxldGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBUaGUgbG9hZGVyIHRoYXQgaGFzIGNvbXBsZXRlZCBsb2FkaW5nLlxyXG4gICAgICovXHJcbiAgICBsb2FkQ29tcGxldGU6IGZ1bmN0aW9uIChsb2FkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gbG9hZGVyLnNjZW5lO1xyXG5cclxuICAgICAgICAvLyAgVE9ETyAtIFJlbW92ZS4gVGhpcyBzaG91bGQgKm5vdCogYmUgaGFuZGxlZCBoZXJlXHJcbiAgICAgICAgLy8gIFRyeSB0byB1bmxvY2sgSFRNTDUgc291bmRzIGV2ZXJ5IHRpbWUgYW55IGxvYWRlciBjb21wbGV0ZXNcclxuICAgICAgICBpZiAodGhpcy5nYW1lLnNvdW5kICYmIHRoaXMuZ2FtZS5zb3VuZC5vbkJsdXJQYXVzZWRTb3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWUuc291bmQudW5sb2NrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZShzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIHBheWxvYWQgY29tcGxldGlvbiBmb3IgYSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI3BheWxvYWRDb21wbGV0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIFRoZSBsb2FkZXIgdGhhdCBoYXMgY29tcGxldGVkIGxvYWRpbmcgaXRzIFNjZW5lJ3MgcGF5bG9hZC5cclxuICAgICAqL1xyXG4gICAgcGF5bG9hZENvbXBsZXRlOiBmdW5jdGlvbiAobG9hZGVyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYm9vdFNjZW5lKGxvYWRlci5zY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgU2NlbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRpbWUgZWxhcHNlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIERlbHRhIHRpbWUgZnJvbSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gIExvb3AgdGhyb3VnaCB0aGUgYWN0aXZlIHNjZW5lcyBpbiByZXZlcnNlIG9yZGVyXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc2NlbmVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHN5cyA9IHRoaXMuc2NlbmVzW2ldLnN5cztcclxuXHJcbiAgICAgICAgICAgIGlmIChzeXMuc2V0dGluZ3Muc3RhdHVzID4gQ09OU1QuU1RBUlQgJiYgc3lzLnNldHRpbmdzLnN0YXR1cyA8PSBDT05TVC5SVU5OSU5HKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzeXMuc3RlcCh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVycyB0aGUgU2NlbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjcmVuZGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX0gcmVuZGVyZXIgLSBUaGUgcmVuZGVyZXIgdG8gdXNlLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgIHtcclxuICAgICAgICAvLyAgTG9vcCB0aHJvdWdoIHRoZSBzY2VuZXMgaW4gZm9yd2FyZCBvcmRlclxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgc3lzID0gdGhpcy5zY2VuZXNbaV0uc3lzO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN5cy5zZXR0aW5ncy52aXNpYmxlICYmIHN5cy5zZXR0aW5ncy5zdGF0dXMgPj0gQ09OU1QuTE9BRElORyAmJiBzeXMuc2V0dGluZ3Muc3RhdHVzIDwgQ09OU1QuU0xFRVBJTkcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN5cy5yZW5kZXIocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxzIHRoZSBnaXZlbiBTY2VuZSdzIHtAbGluayBQaGFzZXIuU2NlbmUjY3JlYXRlfSBtZXRob2QgYW5kIHVwZGF0ZXMgaXRzIHN0YXR1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2NyZWF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNDUkVBVEVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX0lOSVRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byBjcmVhdGUuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzeXMgPSBzY2VuZS5zeXM7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gc3lzLnNldHRpbmdzO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUuY3JlYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2V0dGluZ3Muc3RhdHVzID0gQ09OU1QuQ1JFQVRJTkc7XHJcblxyXG4gICAgICAgICAgICBzY2VuZS5jcmVhdGUuY2FsbChzY2VuZSwgc2V0dGluZ3MuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3Muc3RhdHVzID09PSBDT05TVC5ERVNUUk9ZRUQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLmlzVHJhbnNpdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN5cy5ldmVudHMuZW1pdChFdmVudHMuVFJBTlNJVElPTl9TVEFSVCwgc2V0dGluZ3MudHJhbnNpdGlvbkZyb20sIHNldHRpbmdzLnRyYW5zaXRpb25EdXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgdGhlIFNjZW5lIGhhcyBhbiB1cGRhdGUgZnVuY3Rpb24gd2UnbGwgc2V0IGl0IG5vdywgb3RoZXJ3aXNlIGl0J2xsIHJlbWFpbiBhcyBOT09QXHJcbiAgICAgICAgaWYgKHNjZW5lLnVwZGF0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN5cy5zY2VuZVVwZGF0ZSA9IHNjZW5lLnVwZGF0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldHRpbmdzLnN0YXR1cyA9IENPTlNULlJVTk5JTkc7XHJcblxyXG4gICAgICAgIHN5cy5ldmVudHMuZW1pdChFdmVudHMuQ1JFQVRFLCBzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBTY2VuZSBmcm9tIGEgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNjcmVhdGVTY2VuZUZyb21GdW5jdGlvblxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBTY2VuZS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHNjZW5lIC0gVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgU2NlbmUgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmV9IFRoZSBjcmVhdGVkIFNjZW5lLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVTY2VuZUZyb21GdW5jdGlvbjogZnVuY3Rpb24gKGtleSwgc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5ld1NjZW5lID0gbmV3IHNjZW5lKCk7XHJcblxyXG4gICAgICAgIGlmIChuZXdTY2VuZSBpbnN0YW5jZW9mIFNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZ0tleSA9IG5ld1NjZW5lLnN5cy5zZXR0aW5ncy5rZXk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnS2V5ICE9PSAnJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gY29uZmlnS2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBhIFNjZW5lIHdpdGggZHVwbGljYXRlIGtleTogJyArIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNjZW5lRnJvbUluc3RhbmNlKGtleSwgbmV3U2NlbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuZXdTY2VuZS5zeXMgPSBuZXcgU3lzdGVtcyhuZXdTY2VuZSk7XHJcblxyXG4gICAgICAgICAgICBuZXdTY2VuZS5zeXMuc2V0dGluZ3Mua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAgICAgbmV3U2NlbmUuc3lzLmluaXQodGhpcy5nYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTY2VuZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBTY2VuZSBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2NyZWF0ZVNjZW5lRnJvbUluc3RhbmNlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IG5ld1NjZW5lIC0gVGhlIFNjZW5lIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZX0gVGhlIGNyZWF0ZWQgU2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNjZW5lRnJvbUluc3RhbmNlOiBmdW5jdGlvbiAoa2V5LCBuZXdTY2VuZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY29uZmlnS2V5ID0gbmV3U2NlbmUuc3lzLnNldHRpbmdzLmtleTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZ0tleSAhPT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXkgPSBjb25maWdLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5ld1NjZW5lLnN5cy5zZXR0aW5ncy5rZXkgPSBrZXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXdTY2VuZS5zeXMuaW5pdCh0aGlzLmdhbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3U2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBTY2VuZSBmcm9tIGFuIE9iamVjdCBkZWZpbml0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjY3JlYXRlU2NlbmVGcm9tT2JqZWN0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFNjZW5lLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NDb25maWd8UGhhc2VyLlR5cGVzLlNjZW5lcy5DcmVhdGVTY2VuZUZyb21PYmplY3RDb25maWcpfSBzY2VuZUNvbmZpZyAtIFRoZSBTY2VuZSBjb25maWcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lfSBUaGUgY3JlYXRlZCBTY2VuZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2NlbmVGcm9tT2JqZWN0OiBmdW5jdGlvbiAoa2V5LCBzY2VuZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgbmV3U2NlbmUgPSBuZXcgU2NlbmUoc2NlbmVDb25maWcpO1xyXG5cclxuICAgICAgICB2YXIgY29uZmlnS2V5ID0gbmV3U2NlbmUuc3lzLnNldHRpbmdzLmtleTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZ0tleSAhPT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXkgPSBjb25maWdLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5ld1NjZW5lLnN5cy5zZXR0aW5ncy5rZXkgPSBrZXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXdTY2VuZS5zeXMuaW5pdCh0aGlzLmdhbWUpO1xyXG5cclxuICAgICAgICAvLyAgRXh0cmFjdCBjYWxsYmFja3NcclxuXHJcbiAgICAgICAgdmFyIGRlZmF1bHRzID0gWyAnaW5pdCcsICdwcmVsb2FkJywgJ2NyZWF0ZScsICd1cGRhdGUnLCAncmVuZGVyJyBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNjZW5lQ2FsbGJhY2sgPSBHZXRWYWx1ZShzY2VuZUNvbmZpZywgZGVmYXVsdHNbaV0sIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNjZW5lQ2FsbGJhY2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5ld1NjZW5lW2RlZmF1bHRzW2ldXSA9IHNjZW5lQ2FsbGJhY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBOb3cgbGV0J3MgbW92ZSBhY3Jvc3MgYW55IG90aGVyIGZ1bmN0aW9ucyBvciBwcm9wZXJ0aWVzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBleHRlbmQgb2JqZWN0OlxyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgIHNjZW5lOiB7XHJcbiAgICAgICAgICAgIHByZWxvYWQ6IHByZWxvYWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogY3JlYXRlLFxyXG4gICAgICAgICAgICBleHRlbmQ6IHtcclxuICAgICAgICAgICAgICAgIGhlbGxvOiAxLFxyXG4gICAgICAgICAgICAgICAgdGVzdDogJ2F0YXJpJyxcclxuICAgICAgICAgICAgICAgIGFkZEltYWdlOiBhZGRJbWFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmIChzY2VuZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5kJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eUtleSBpbiBzY2VuZUNvbmZpZy5leHRlbmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICghc2NlbmVDb25maWcuZXh0ZW5kLmhhc093blByb3BlcnR5KHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzY2VuZUNvbmZpZy5leHRlbmRbcHJvcGVydHlLZXldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gJ2RhdGEnICYmIG5ld1NjZW5lLmhhc093blByb3BlcnR5KCdkYXRhJykgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgUG9wdWxhdGUgdGhlIERhdGFNYW5hZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2NlbmUuZGF0YS5tZXJnZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUtleSAhPT0gJ3N5cycpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2NlbmVbcHJvcGVydHlLZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdTY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBvZiBhIFNjZW5lIGZyb20gYSBTY2VuZSBjb25maWcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNnZXRLZXlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBjaGVjayBpbiB0aGUgU2NlbmUgY29uZmlnLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlNjZW5lfFBoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NDb25maWd8ZnVuY3Rpb24pfSBzY2VuZUNvbmZpZyAtIFRoZSBTY2VuZSBjb25maWcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgU2NlbmUga2V5LlxyXG4gICAgICovXHJcbiAgICBnZXRLZXk6IGZ1bmN0aW9uIChrZXksIHNjZW5lQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICgha2V5KSB7IGtleSA9ICdkZWZhdWx0JzsgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHNjZW5lQ29uZmlnID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NlbmVDb25maWcgaW5zdGFuY2VvZiBTY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IHNjZW5lQ29uZmlnLnN5cy5zZXR0aW5ncy5rZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2VuZUNvbmZpZyA9PT0gJ29iamVjdCcgJiYgc2NlbmVDb25maWcuaGFzT3duUHJvcGVydHkoJ2tleScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gc2NlbmVDb25maWcua2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ5IHRoaXMgcG9pbnQgaXQncyBlaXRoZXIgJ2RlZmF1bHQnIG9yIGV4dHJhY3RlZCBmcm9tIHRoZSBTY2VuZVxyXG5cclxuICAgICAgICBpZiAodGhpcy5rZXlzLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgYSBTY2VuZSB3aXRoIGR1cGxpY2F0ZSBrZXk6ICcgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgY3VycmVudCBTY2VuZXMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIFNjZW5lIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBmaWx0ZXIgdGhlIG91dHB1dCBieSB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBTY2VuZSBhbmQgY2hvb3NlIHRvIGhhdmVcclxuICAgICAqIHRoZSBhcnJheSByZXR1cm5lZCBpbiBub3JtYWwgb3IgcmV2ZXJzZWQgb3JkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNnZXRTY2VuZXNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0FjdGl2ZT10cnVlXSAtIE9ubHkgaW5jbHVkZSBTY2VuZSdzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmU/XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpblJldmVyc2U9ZmFsc2VdIC0gUmV0dXJuIHRoZSBhcnJheSBvZiBTY2VuZXMgaW4gcmV2ZXJzZT9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVbXX0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIFNjZW5lcyBpbiB0aGUgU2NlbmUgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgZ2V0U2NlbmVzOiBmdW5jdGlvbiAoaXNBY3RpdmUsIGluUmV2ZXJzZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaXNBY3RpdmUgPT09IHVuZGVmaW5lZCkgeyBpc0FjdGl2ZSA9IHRydWU7IH1cclxuICAgICAgICBpZiAoaW5SZXZlcnNlID09PSB1bmRlZmluZWQpIHsgaW5SZXZlcnNlID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIG91dCA9IFtdO1xyXG4gICAgICAgIHZhciBzY2VuZXMgPSB0aGlzLnNjZW5lcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgc2NlbmUgPSBzY2VuZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NlbmUgJiYgKCFpc0FjdGl2ZSB8fCAoaXNBY3RpdmUgJiYgc2NlbmUuc3lzLmlzQWN0aXZlKCkpKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2goc2NlbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGluUmV2ZXJzZSkgPyBvdXQucmV2ZXJzZSgpIDogb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjZ2V0U2NlbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfFBoYXNlci5TY2VuZX0ga2V5IC0gVGhlIFNjZW5lIHRvIHJldHJpZXZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuU2NlbmV9IFRoZSBTY2VuZS5cclxuICAgICAqL1xyXG4gICAgZ2V0U2NlbmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMua2V5c1trZXldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5rZXlzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5zY2VuZXNbaV0pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgU2NlbmUgaXMgcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2lzQWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFNjZW5lIGlzIHJ1bm5pbmcuXHJcbiAgICAgKi9cclxuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNjZW5lLnN5cy5pc0FjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgU2NlbmUgaXMgcGF1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjaXNQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFNjZW5lIGlzIHBhdXNlZC5cclxuICAgICAqL1xyXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NlbmUuc3lzLmlzUGF1c2VkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBTY2VuZSBpcyB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjaXNWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFNjZW5lIGlzIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIGlzVmlzaWJsZTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGtleSk7XHJcblxyXG4gICAgICAgIGlmIChzY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2VuZS5zeXMuaXNWaXNpYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBTY2VuZSBpcyBzbGVlcGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2lzU2xlZXBpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgU2NlbmUgdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgU2NlbmUgaXMgc2xlZXBpbmcuXHJcbiAgICAgKi9cclxuICAgIGlzU2xlZXBpbmc6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NlbmUuc3lzLmlzU2xlZXBpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhdXNlcyB0aGUgZ2l2ZW4gU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBTY2VuZSB0byBwYXVzZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBbiBvcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBhbmQgZW1pdHRlZCBieSBpdHMgcGF1c2UgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9IFRoaXMgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKGtleSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGtleSk7XHJcblxyXG4gICAgICAgIGlmIChzY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5wYXVzZShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgdGhlIGdpdmVuIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIHJlc3VtZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBbiBvcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBhbmQgZW1pdHRlZCBieSBpdHMgcmVzdW1lIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfSBUaGlzIFNjZW5lTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2NlbmUuc3lzLnJlc3VtZShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgdGhlIGdpdmVuIFNjZW5lIHRvIHNsZWVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjc2xlZXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgU2NlbmUgdG8gcHV0IHRvIHNsZWVwLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIFNjZW5lIGFuZCBlbWl0dGVkIGJ5IGl0cyBzbGVlcCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNsZWVwOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lICYmICFzY2VuZS5zeXMuaXNUcmFuc2l0aW9uaW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMuc2xlZXAoZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBd2FrZW5zIHRoZSBnaXZlbiBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI3dha2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgU2NlbmUgdG8gd2FrZSB1cC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBbiBvcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBhbmQgZW1pdHRlZCBieSBpdHMgd2FrZSBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHdha2U6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMud2FrZShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJ1bnMgdGhlIGdpdmVuIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBnaXZlbiBTY2VuZSBpcyBwYXVzZWQsIGl0IHdpbGwgcmVzdW1lIGl0LiBJZiBzbGVlcGluZywgaXQgd2lsbCB3YWtlIGl0LlxyXG4gICAgICogSWYgbm90IHJ1bm5pbmcgYXQgYWxsLCBpdCB3aWxsIGJlIHN0YXJ0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogVXNlIHRoaXMgaWYgeW91IHdpc2ggdG8gb3BlbiBhIG1vZGFsIFNjZW5lIGJ5IGNhbGxpbmcgYHBhdXNlYCBvbiB0aGUgY3VycmVudFxyXG4gICAgICogU2NlbmUsIHRoZW4gYHJ1bmAgb24gdGhlIG1vZGFsIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjcnVuXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBTY2VuZSB0byBydW4uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gQSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBvbiBzdGFydCwgd2FrZSwgb3IgcmVzdW1lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfSBUaGlzIFNjZW5lIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHJ1bjogZnVuY3Rpb24gKGtleSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGtleSk7XHJcblxyXG4gICAgICAgIGlmICghc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3BlbmRpbmcubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nW2ldLmtleSA9PT0ga2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWVPcCgnc3RhcnQnLCBrZXksIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNjZW5lLnN5cy5pc1NsZWVwaW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgU2xlZXBpbmc/XHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy53YWtlKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2VuZS5zeXMuaXNQYXVzZWQoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBQYXVzZWQ/XHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5yZXN1bWUoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBOb3QgYWN0dWFsbHkgcnVubmluZz9cclxuICAgICAgICAgICAgdGhpcy5zdGFydChrZXksIGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgdGhlIGdpdmVuIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgU2NlbmUgdG8gc3RhcnQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gT3B0aW9uYWwgZGF0YSBvYmplY3QgdG8gcGFzcyB0byBTY2VuZS5TZXR0aW5ncyBhbmQgU2NlbmUuaW5pdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBJZiB0aGUgU2NlbmUgTWFuYWdlciBpcyBub3QgcnVubmluZywgdGhlbiBwdXQgdGhlIFNjZW5lIGludG8gYSBob2xkaW5nIHBhdHRlcm5cclxuICAgICAgICBpZiAoIXRoaXMuaXNCb290ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvU3RhcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIHRoZSBTY2VuZSBpcyBhbHJlYWR5IHJ1bm5pbmcgKHBlcmhhcHMgdGhleSBjYWxsZWQgc3RhcnQgZnJvbSBhIGxhdW5jaGVkIHN1Yi1TY2VuZT8pXHJcbiAgICAgICAgICAgIC8vICB0aGVuIHdlIGNsb3NlIGl0IGRvd24gYmVmb3JlIHN0YXJ0aW5nIGl0IGFnYWluLlxyXG4gICAgICAgICAgICBpZiAoc2NlbmUuc3lzLmlzQWN0aXZlKCkgfHwgc2NlbmUuc3lzLmlzUGF1c2VkKCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnN5cy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNjZW5lLnN5cy5zdGFydChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnN5cy5zdGFydChkYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbG9hZGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZS5zeXMubG9hZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBzY2VuZS5zeXMubG9hZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgRmlsZXMgcGF5bG9hZD9cclxuICAgICAgICAgICAgICAgIGlmIChsb2FkZXIgJiYgc2NlbmUuc3lzLnNldHRpbmdzLmhhc093blByb3BlcnR5KCdwYWNrJykpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZXIuYWRkUGFjayh7IHBheWxvYWQ6IHNjZW5lLnN5cy5zZXR0aW5ncy5wYWNrIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmUuc3lzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULkxPQURJTkc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIub25jZShMb2FkZXJFdmVudHMuQ09NUExFVEUsIHRoaXMucGF5bG9hZENvbXBsZXRlLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdGFydCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJvb3RTY2VuZShzY2VuZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgZ2l2ZW4gU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNzdG9wXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIHN0b3AuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gT3B0aW9uYWwgZGF0YSBvYmplY3QgdG8gcGFzcyB0byBTY2VuZS5zaHV0ZG93bi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUgJiYgIXNjZW5lLnN5cy5pc1RyYW5zaXRpb25pbmcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5zaHV0ZG93bihkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNsZWVwcyBvbmUgb25lIFNjZW5lIGFuZCBzdGFydHMgdGhlIG90aGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjc3dpdGNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnJvbSAtIFRoZSBTY2VuZSB0byBzbGVlcC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0byAtIFRoZSBTY2VuZSB0byBzdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN3aXRjaDogZnVuY3Rpb24gKGZyb20sIHRvKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZUEgPSB0aGlzLmdldFNjZW5lKGZyb20pO1xyXG4gICAgICAgIHZhciBzY2VuZUIgPSB0aGlzLmdldFNjZW5lKHRvKTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lQSAmJiBzY2VuZUIgJiYgc2NlbmVBICE9PSBzY2VuZUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNsZWVwKGZyb20pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTbGVlcGluZyh0bykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FrZSh0byk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KHRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGEgU2NlbmUgYnkgbnVtZXJpYyBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI2dldEF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBTY2VuZSB0byByZXRyaWV2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLlNjZW5lfHVuZGVmaW5lZCl9IFRoZSBTY2VuZS5cclxuICAgICAqL1xyXG4gICAgZ2V0QXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZXNbaW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjZ2V0SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgaW5kZXggb2YgdGhlIFNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleDogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lcy5pbmRleE9mKHNjZW5lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCcmluZ3MgYSBTY2VuZSB0byB0aGUgdG9wIG9mIHRoZSBTY2VuZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1lYW5zIGl0IHdpbGwgcmVuZGVyIGFib3ZlIGFsbCBvdGhlciBTY2VuZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNicmluZ1RvVG9wXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlNjZW5lKX0ga2V5IC0gVGhlIFNjZW5lIHRvIG1vdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9IFRoaXMgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBicmluZ1RvVG9wOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBvcDogJ2JyaW5nVG9Ub3AnLCBrZXlBOiBrZXksIGtleUI6IG51bGwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoa2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggPCB0aGlzLnNjZW5lcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXMucHVzaChzY2VuZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGEgU2NlbmUgdG8gdGhlIGJhY2sgb2YgdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWVhbnMgaXQgd2lsbCByZW5kZXIgYmVsb3cgYWxsIG90aGVyIFNjZW5lcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI3NlbmRUb0JhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBrZXkgLSBUaGUgU2NlbmUgdG8gbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNlbmRUb0JhY2s6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUucHVzaCh7IG9wOiAnc2VuZFRvQmFjaycsIGtleUE6IGtleSwga2V5QjogbnVsbCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRJbmRleChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiBpbmRleCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXMudW5zaGlmdChzY2VuZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgU2NlbmUgZG93biBvbmUgcG9zaXRpb24gaW4gdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjbW92ZURvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBrZXkgLSBUaGUgU2NlbmUgdG8gbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIG1vdmVEb3duOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBvcDogJ21vdmVEb3duJywga2V5QToga2V5LCBrZXlCOiBudWxsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXhBID0gdGhpcy5nZXRJbmRleChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4QSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleEIgPSBpbmRleEEgLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjZW5lQSA9IHRoaXMuZ2V0U2NlbmUoa2V5KTtcclxuICAgICAgICAgICAgICAgIHZhciBzY2VuZUIgPSB0aGlzLmdldEF0KGluZGV4Qik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXNbaW5kZXhBXSA9IHNjZW5lQjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVzW2luZGV4Ql0gPSBzY2VuZUE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgU2NlbmUgdXAgb25lIHBvc2l0aW9uIGluIHRoZSBTY2VuZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI21vdmVVcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5TY2VuZSl9IGtleSAtIFRoZSBTY2VuZSB0byBtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfSBUaGlzIFNjZW5lTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgbW92ZVVwOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBvcDogJ21vdmVVcCcsIGtleUE6IGtleSwga2V5QjogbnVsbCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4QSA9IHRoaXMuZ2V0SW5kZXgoa2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleEEgPCB0aGlzLnNjZW5lcy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXhCID0gaW5kZXhBICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBzY2VuZUEgPSB0aGlzLmdldFNjZW5lKGtleSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVCID0gdGhpcy5nZXRBdChpbmRleEIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVzW2luZGV4QV0gPSBzY2VuZUI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lc1tpbmRleEJdID0gc2NlbmVBO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyBhIFNjZW5lIHNvIGl0IGlzIGltbWVkaWF0ZWx5IGFib3ZlIGFub3RoZXIgU2NlbmUgaW4gdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWVhbnMgaXQgd2lsbCByZW5kZXIgb3ZlciB0aGUgdG9wIG9mIHRoZSBvdGhlciBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI21vdmVBYm92ZVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5TY2VuZSl9IGtleUEgLSBUaGUgU2NlbmUgdGhhdCBTY2VuZSBCIHdpbGwgYmUgbW92ZWQgYWJvdmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlNjZW5lKX0ga2V5QiAtIFRoZSBTY2VuZSB0byBiZSBtb3ZlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIG1vdmVBYm92ZTogZnVuY3Rpb24gKGtleUEsIGtleUIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleUEgPT09IGtleUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBvcDogJ21vdmVBYm92ZScsIGtleUE6IGtleUEsIGtleUI6IGtleUIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleEEgPSB0aGlzLmdldEluZGV4KGtleUEpO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXhCID0gdGhpcy5nZXRJbmRleChrZXlCKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleEEgIT09IC0xICYmIGluZGV4QiAhPT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZW1wU2NlbmUgPSB0aGlzLmdldEF0KGluZGV4Qik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXMuc3BsaWNlKGluZGV4QiwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEFkZCBpbiBuZXcgbG9jYXRpb25cclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVzLnNwbGljZShpbmRleEEgKyAxLCAwLCB0ZW1wU2NlbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyBhIFNjZW5lIHNvIGl0IGlzIGltbWVkaWF0ZWx5IGJlbG93IGFub3RoZXIgU2NlbmUgaW4gdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWVhbnMgaXQgd2lsbCByZW5kZXIgYmVoaW5kIHRoZSBvdGhlciBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyI21vdmVCZWxvd1xyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5TY2VuZSl9IGtleUEgLSBUaGUgU2NlbmUgdGhhdCBTY2VuZSBCIHdpbGwgYmUgbW92ZWQgYWJvdmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlNjZW5lKX0ga2V5QiAtIFRoZSBTY2VuZSB0byBiZSBtb3ZlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIG1vdmVCZWxvdzogZnVuY3Rpb24gKGtleUEsIGtleUIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleUEgPT09IGtleUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBvcDogJ21vdmVCZWxvdycsIGtleUE6IGtleUEsIGtleUI6IGtleUIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleEEgPSB0aGlzLmdldEluZGV4KGtleUEpO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXhCID0gdGhpcy5nZXRJbmRleChrZXlCKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpbmRleEEgIT09IC0xICYmIGluZGV4QiAhPT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZW1wU2NlbmUgPSB0aGlzLmdldEF0KGluZGV4Qik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXMuc3BsaWNlKGluZGV4QiwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4QSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lcy51bnNoaWZ0KHRlbXBTY2VuZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIEFkZCBpbiBuZXcgbG9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lcy5zcGxpY2UoaW5kZXhBLCAwLCB0ZW1wU2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWV1ZSBhIFNjZW5lIG9wZXJhdGlvbiBmb3IgdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjcXVldWVPcFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcCAtIFRoZSBvcGVyYXRpb24gdG8gcGVyZm9ybS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBrZXlBIC0gU2NlbmUgQS5cclxuICAgICAqIEBwYXJhbSB7KGFueXxzdHJpbmd8UGhhc2VyLlNjZW5lKX0gW2tleUJdIC0gU2NlbmUgQiwgb3IgYSBkYXRhIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlcn0gVGhpcyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHF1ZXVlT3A6IGZ1bmN0aW9uIChvcCwga2V5QSwga2V5QilcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHsgb3A6IG9wLCBrZXlBOiBrZXlBLCBrZXlCOiBrZXlCIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTd2FwcyB0aGUgcG9zaXRpb25zIG9mIHR3byBTY2VuZXMgaW4gdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjc3dhcFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlNjZW5lKX0ga2V5QSAtIFRoZSBmaXJzdCBTY2VuZSB0byBzd2FwLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5TY2VuZSl9IGtleUIgLSBUaGUgc2Vjb25kIFNjZW5lIHRvIHN3YXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9IFRoaXMgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzd2FwUG9zaXRpb246IGZ1bmN0aW9uIChrZXlBLCBrZXlCKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXlBID09PSBrZXlCKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHsgb3A6ICdzd2FwUG9zaXRpb24nLCBrZXlBOiBrZXlBLCBrZXlCOiBrZXlCIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXhBID0gdGhpcy5nZXRJbmRleChrZXlBKTtcclxuICAgICAgICAgICAgdmFyIGluZGV4QiA9IHRoaXMuZ2V0SW5kZXgoa2V5Qik7XHJcblxyXG4gICAgICAgICAgICBpZiAoaW5kZXhBICE9PSBpbmRleEIgJiYgaW5kZXhBICE9PSAtMSAmJiBpbmRleEIgIT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcFNjZW5lID0gdGhpcy5nZXRBdChpbmRleEEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVzW2luZGV4QV0gPSB0aGlzLnNjZW5lc1tpbmRleEJdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZXNbaW5kZXhCXSA9IHRlbXBTY2VuZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHVtcHMgZGVidWcgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBTY2VuZSB0byB0aGUgZGV2ZWxvcGVyIGNvbnNvbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lTWFuYWdlciNkdW1wXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqL1xyXG4gICAgZHVtcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcbiAgICAgICAgdmFyIG1hcCA9IFsgJ3BlbmRpbmcnLCAnaW5pdCcsICdzdGFydCcsICdsb2FkaW5nJywgJ2NyZWF0aW5nJywgJ3J1bm5pbmcnLCAncGF1c2VkJywgJ3NsZWVwaW5nJywgJ3NodXRkb3duJywgJ2Rlc3Ryb3llZCcgXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzeXMgPSB0aGlzLnNjZW5lc1tpXS5zeXM7XHJcblxyXG4gICAgICAgICAgICB2YXIga2V5ID0gKHN5cy5zZXR0aW5ncy52aXNpYmxlICYmIChzeXMuc2V0dGluZ3Muc3RhdHVzID09PSBDT05TVC5SVU5OSU5HIHx8IHN5cy5zZXR0aW5ncy5zdGF0dXMgPT09IENPTlNULlBBVVNFRCkpID8gJ1sqXSAnIDogJ1stXSAnO1xyXG4gICAgICAgICAgICBrZXkgKz0gc3lzLnNldHRpbmdzLmtleSArICcgKCcgKyBtYXBbc3lzLnNldHRpbmdzLnN0YXR1c10gKyAnKSc7XHJcblxyXG4gICAgICAgICAgICBvdXQucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cob3V0LmpvaW4oJ1xcbicpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoZSBTY2VuZU1hbmFnZXIgYW5kIGFsbCBvZiBpdHMgU2NlbmUncyBzeXN0ZW1zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzeXMgPSB0aGlzLnNjZW5lc1tpXS5zeXM7XHJcblxyXG4gICAgICAgICAgICBzeXMuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUgPSBOT09QO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9wZW5kaW5nID0gW107XHJcbiAgICAgICAgdGhpcy5fc3RhcnQgPSBbXTtcclxuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjZW5lTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/SceneManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/ScenePlugin.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/scene/ScenePlugin.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A proxy class to the Global Scene Manager.\r\n *\r\n * @class ScenePlugin\r\n * @memberof Phaser.Scenes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this ScenePlugin belongs to.\r\n */\r\nvar ScenePlugin = new Class({\r\n\r\n    initialize:\r\n\r\n    function ScenePlugin (scene)\r\n    {\r\n        /**\r\n         * The Scene that this ScenePlugin belongs to.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Scene Systems instance of the Scene that this ScenePlugin belongs to.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * The settings of the Scene this ScenePlugin belongs to.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#settings\r\n         * @type {Phaser.Types.Scenes.SettingsObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.settings = scene.sys.settings;\r\n\r\n        /**\r\n         * The key of the Scene this ScenePlugin belongs to.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#key\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.key = scene.sys.settings.key;\r\n\r\n        /**\r\n         * The Game's SceneManager.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#manager\r\n         * @type {Phaser.Scenes.SceneManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = scene.sys.game.scene;\r\n\r\n        /**\r\n         * If this Scene is currently transitioning to another, this holds\r\n         * the current percentage of the transition progress, between 0 and 1.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#transitionProgress\r\n         * @type {number}\r\n         * @since 3.5.0\r\n         */\r\n        this.transitionProgress = 0;\r\n\r\n        /**\r\n         * Transition elapsed timer.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_elapsed\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._elapsed = 0;\r\n\r\n        /**\r\n         * Transition elapsed timer.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_target\r\n         * @type {?Phaser.Scenes.Scene}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._target = null;\r\n\r\n        /**\r\n         * Transition duration.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_duration\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._duration = 0;\r\n\r\n        /**\r\n         * Transition callback.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_onUpdate\r\n         * @type {function}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdate;\r\n\r\n        /**\r\n         * Transition callback scope.\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_onUpdateScope\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._onUpdateScope;\r\n\r\n        /**\r\n         * Will this Scene sleep (true) after the transition, or stop (false)\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_willSleep\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._willSleep = false;\r\n\r\n        /**\r\n         * Will this Scene be removed from the Scene Manager after the transition completes?\r\n         *\r\n         * @name Phaser.Scenes.ScenePlugin#_willRemove\r\n         * @type {boolean}\r\n         * @private\r\n         * @since 3.5.0\r\n         */\r\n        this._willRemove = false;\r\n\r\n        scene.sys.events.once(Events.BOOT, this.boot, this);\r\n        scene.sys.events.on(Events.START, this.pluginStart, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#boot\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once(Events.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#pluginStart\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    pluginStart: function ()\r\n    {\r\n        this._target = null;\r\n\r\n        this.systems.events.once(Events.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Shutdown this Scene and run the given one.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#start\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to start.\r\n     * @param {object} [data] - The Scene data.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    start: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('stop', this.key);\r\n        this.manager.queueOp('start', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Restarts this Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#restart\r\n     * @since 3.4.0\r\n     *\r\n     * @param {object} [data] - The Scene data.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    restart: function (data)\r\n    {\r\n        var key = this.key;\r\n\r\n        this.manager.queueOp('stop', key);\r\n        this.manager.queueOp('start', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * This will start a transition from the current Scene to the target Scene given.\r\n     *\r\n     * The transition will last for the duration specified in milliseconds.\r\n     *\r\n     * You can have the target Scene moved above or below this one in the display list.\r\n     *\r\n     * You can specify an update callback. This callback will be invoked _every frame_ for the duration\r\n     * of the transition.\r\n     *\r\n     * This Scene can either be sent to sleep at the end of the transition, or stopped. The default is to stop.\r\n     *\r\n     * There are also 5 transition related events: This scene will emit the event `transitionout` when\r\n     * the transition begins, which is typically the frame after calling this method.\r\n     *\r\n     * The target Scene will emit the event `transitioninit` when that Scene's `init` method is called.\r\n     * It will then emit the event `transitionstart` when its `create` method is called.\r\n     * If the Scene was sleeping and has been woken up, it will emit the event `transitionwake` instead of these two,\r\n     * as the Scenes `init` and `create` methods are not invoked when a Scene wakes up.\r\n     *\r\n     * When the duration of the transition has elapsed it will emit the event `transitioncomplete`.\r\n     * These events are cleared of all listeners when the Scene shuts down, but not if it is sent to sleep.\r\n     *\r\n     * It's important to understand that the duration of the transition begins the moment you call this method.\r\n     * If the Scene you are transitioning to includes delayed processes, such as waiting for files to load, the\r\n     * time still counts down even while that is happening. If the game itself pauses, or something else causes\r\n     * this Scenes update loop to stop, then the transition will also pause for that duration. There are\r\n     * checks in place to prevent you accidentally stopping a transitioning Scene but if you've got code to\r\n     * override this understand that until the target Scene completes it might never be unlocked for input events.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#transition\r\n     * @fires Phaser.Scenes.Events#TRANSITION_OUT\r\n     * @since 3.5.0\r\n     *\r\n     * @param {Phaser.Types.Scenes.SceneTransitionConfig} config - The transition configuration object.\r\n     *\r\n     * @return {boolean} `true` is the transition was started, otherwise `false`.\r\n     */\r\n    transition: function (config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        var key = GetFastValue(config, 'target', false);\r\n\r\n        var target = this.manager.getScene(key);\r\n\r\n        if (!key || !this.checkValidTransition(target))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var duration = GetFastValue(config, 'duration', 1000);\r\n\r\n        this._elapsed = 0;\r\n        this._target = target;\r\n        this._duration = duration;\r\n        this._willSleep = GetFastValue(config, 'sleep', false);\r\n        this._willRemove = GetFastValue(config, 'remove', false);\r\n\r\n        var callback = GetFastValue(config, 'onUpdate', null);\r\n\r\n        if (callback)\r\n        {\r\n            this._onUpdate = callback;\r\n            this._onUpdateScope = GetFastValue(config, 'onUpdateScope', this.scene);\r\n        }\r\n\r\n        var allowInput = GetFastValue(config, 'allowInput', false);\r\n\r\n        this.settings.transitionAllowInput = allowInput;\r\n\r\n        var targetSettings = target.sys.settings;\r\n\r\n        targetSettings.isTransition = true;\r\n        targetSettings.transitionFrom = this.scene;\r\n        targetSettings.transitionDuration = duration;\r\n        targetSettings.transitionAllowInput = allowInput;\r\n\r\n        if (GetFastValue(config, 'moveAbove', false))\r\n        {\r\n            this.manager.moveAbove(this.key, key);\r\n        }\r\n        else if (GetFastValue(config, 'moveBelow', false))\r\n        {\r\n            this.manager.moveBelow(this.key, key);\r\n        }\r\n\r\n        if (target.sys.isSleeping())\r\n        {\r\n            target.sys.wake();\r\n        }\r\n        else\r\n        {\r\n            this.manager.start(key, GetFastValue(config, 'data'));\r\n        }\r\n\r\n        this.systems.events.emit(Events.TRANSITION_OUT, target, duration);\r\n\r\n        this.systems.events.on(Events.UPDATE, this.step, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if this Scene can transition to the target Scene or not.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#checkValidTransition\r\n     * @private\r\n     * @since 3.5.0\r\n     *\r\n     * @param {Phaser.Scene} target - The Scene to test against.\r\n     *\r\n     * @return {boolean} `true` if this Scene can transition, otherwise `false`.\r\n     */\r\n    checkValidTransition: function (target)\r\n    {\r\n        //  Not a valid target if it doesn't exist, isn't active or is already transitioning in or out\r\n        if (!target || target.sys.isActive() || target.sys.isTransitioning() || target === this.scene || this.systems.isTransitioning())\r\n        {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * A single game step. This is only called if the parent Scene is transitioning\r\n     * out to another Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#step\r\n     * @private\r\n     * @since 3.5.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    step: function (time, delta)\r\n    {\r\n        this._elapsed += delta;\r\n\r\n        this.transitionProgress = Clamp(this._elapsed / this._duration, 0, 1);\r\n\r\n        if (this._onUpdate)\r\n        {\r\n            this._onUpdate.call(this._onUpdateScope, this.transitionProgress);\r\n        }\r\n\r\n        if (this._elapsed >= this._duration)\r\n        {\r\n            this.transitionComplete();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Called by `step` when the transition out of this scene to another is over.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#transitionComplete\r\n     * @private\r\n     * @fires Phaser.Scenes.Events#TRANSITION_COMPLETE\r\n     * @since 3.5.0\r\n     */\r\n    transitionComplete: function ()\r\n    {\r\n        var targetSys = this._target.sys;\r\n        var targetSettings = this._target.sys.settings;\r\n\r\n        //  Stop the step\r\n        this.systems.events.off(Events.UPDATE, this.step, this);\r\n\r\n        //  Notify target scene\r\n        targetSys.events.emit(Events.TRANSITION_COMPLETE, this.scene);\r\n\r\n        //  Clear target scene settings\r\n        targetSettings.isTransition = false;\r\n        targetSettings.transitionFrom = null;\r\n\r\n        //  Clear local settings\r\n        this._duration = 0;\r\n        this._target = null;\r\n        this._onUpdate = null;\r\n        this._onUpdateScope = null;\r\n\r\n        //  Now everything is clear we can handle what happens to this Scene\r\n        if (this._willRemove)\r\n        {\r\n            this.manager.remove(this.key);\r\n        }\r\n        else if (this._willSleep)\r\n        {\r\n            this.systems.sleep();\r\n        }\r\n        else\r\n        {\r\n            this.manager.stop(this.key);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Add the Scene into the Scene Manager and start it if 'autoStart' is true or the Scene config 'active' property is set.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene key.\r\n     * @param {(Phaser.Scene|Phaser.Types.Scenes.SettingsConfig|Phaser.Types.Scenes.CreateSceneFromObjectConfig|function)} sceneConfig - The config for the Scene.\r\n     * @param {boolean} autoStart - Whether to start the Scene after it's added.\r\n     * @param {object} [data] - Optional data object. This will be set as Scene.settings.data and passed to `Scene.init`.\r\n     *\r\n     * @return {Phaser.Scene} An instance of the Scene that was added to the Scene Manager.\r\n     */\r\n    add: function (key, sceneConfig, autoStart, data)\r\n    {\r\n        return this.manager.add(key, sceneConfig, autoStart, data);\r\n    },\r\n\r\n    /**\r\n     * Launch the given Scene and run it in parallel with this one.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#launch\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to launch.\r\n     * @param {object} [data] - The Scene data.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    launch: function (key, data)\r\n    {\r\n        if (key && key !== this.key)\r\n        {\r\n            this.manager.queueOp('start', key, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Runs the given Scene, but does not change the state of this Scene.\r\n     *\r\n     * If the given Scene is paused, it will resume it. If sleeping, it will wake it.\r\n     * If not running at all, it will be started.\r\n     *\r\n     * Use this if you wish to open a modal Scene by calling `pause` on the current\r\n     * Scene, then `run` on the modal Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#run\r\n     * @since 3.10.0\r\n     *\r\n     * @param {string} key - The Scene to run.\r\n     * @param {object} [data] - A data object that will be passed to the Scene and emitted in its ready, wake, or resume events.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    run: function (key, data)\r\n    {\r\n        if (key && key !== this.key)\r\n        {\r\n            this.manager.queueOp('run', key, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Pause the Scene - this stops the update step from happening but it still renders.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to pause.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted in its pause event.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    pause: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('pause', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resume the Scene - starts the update loop again.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to resume.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted in its resume event.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    resume: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('resume', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Makes the Scene sleep (no update, no render) but doesn't shutdown.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#sleep\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to put to sleep.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted in its sleep event.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    sleep: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('sleep', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Makes the Scene wake-up (starts update and render)\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#wake\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to wake up.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted in its wake event.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    wake: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('wake', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Makes this Scene sleep then starts the Scene given.\r\n     * \r\n     * No checks are made to see if an instance of the given Scene is already running.\r\n     * Because Scenes in Phaser are non-exclusive, you are allowed to run multiple\r\n     * instances of them _at the same time_. This means, calling this function\r\n     * may launch another instance of the requested Scene if it's already running.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#switch\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to start.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    switch: function (key)\r\n    {\r\n        if (key !== this.key)\r\n        {\r\n            this.manager.queueOp('switch', this.key, key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shutdown the Scene, clearing display list, timers, etc.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to stop.\r\n     * @param {any} [data] - Optional data object to pass to Scene.Systems.shutdown.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    stop: function (key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.queueOp('stop', key, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the active state of the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#setActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - If `true` the Scene will be resumed. If `false` it will be paused.\r\n     * @param {string} [key] - The Scene to set the active state of.\r\n     * @param {object} [data] - An optional data object that will be passed to the Scene and emitted with its events.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    setActive: function (value, key, data)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        var scene = this.manager.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            scene.sys.setActive(value, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the visible state of the given Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#setVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - The visible value.\r\n     * @param {string} [key] - The Scene to set the visible state for.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    setVisible: function (value, key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        var scene = this.manager.getScene(key);\r\n\r\n        if (scene)\r\n        {\r\n            scene.sys.setVisible(value);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Scene is sleeping or not?\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#isSleeping\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is sleeping.\r\n     */\r\n    isSleeping: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        return this.manager.isSleeping(key);\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Scene is running or not?\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#isActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is running.\r\n     */\r\n    isActive: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        return this.manager.isActive(key);\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Scene is paused or not?\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#isPaused\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} [key] - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is paused.\r\n     */\r\n    isPaused: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        return this.manager.isPaused(key);\r\n    },\r\n\r\n    /**\r\n     * Checks if the given Scene is visible or not?\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#isVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to check.\r\n     *\r\n     * @return {boolean} Whether the Scene is visible.\r\n     */\r\n    isVisible: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        return this.manager.isVisible(key);\r\n    },\r\n\r\n    /**\r\n     * Swaps the position of two scenes in the Scenes list.\r\n     *\r\n     * This controls the order in which they are rendered and updated.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#swapPosition\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} keyA - The first Scene to swap.\r\n     * @param {string} [keyB] - The second Scene to swap. If none is given it defaults to this Scene.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    swapPosition: function (keyA, keyB)\r\n    {\r\n        if (keyB === undefined) { keyB = this.key; }\r\n\r\n        if (keyA !== keyB)\r\n        {\r\n            this.manager.swapPosition(keyA, keyB);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Swaps the position of two scenes in the Scenes list, so that Scene B is directly above Scene A.\r\n     *\r\n     * This controls the order in which they are rendered and updated.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#moveAbove\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} keyA - The Scene that Scene B will be moved to be above.\r\n     * @param {string} [keyB] - The Scene to be moved. If none is given it defaults to this Scene.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    moveAbove: function (keyA, keyB)\r\n    {\r\n        if (keyB === undefined) { keyB = this.key; }\r\n\r\n        if (keyA !== keyB)\r\n        {\r\n            this.manager.moveAbove(keyA, keyB);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Swaps the position of two scenes in the Scenes list, so that Scene B is directly below Scene A.\r\n     *\r\n     * This controls the order in which they are rendered and updated.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#moveBelow\r\n     * @since 3.2.0\r\n     *\r\n     * @param {string} keyA - The Scene that Scene B will be moved to be below.\r\n     * @param {string} [keyB] - The Scene to be moved. If none is given it defaults to this Scene.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    moveBelow: function (keyA, keyB)\r\n    {\r\n        if (keyB === undefined) { keyB = this.key; }\r\n\r\n        if (keyA !== keyB)\r\n        {\r\n            this.manager.moveBelow(keyA, keyB);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a Scene from the SceneManager.\r\n     *\r\n     * The Scene is removed from the local scenes array, it's key is cleared from the keys\r\n     * cache and Scene.Systems.destroy is then called on it.\r\n     *\r\n     * If the SceneManager is processing the Scenes when this method is called it wil\r\n     * queue the operation for the next update sequence.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#remove\r\n     * @since 3.2.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} [key] - The Scene to be removed.\r\n     *\r\n     * @return {Phaser.Scenes.SceneManager} This SceneManager.\r\n     */\r\n    remove: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.remove(key);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene up one position in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#moveUp\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    moveUp: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.moveUp(key);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Moves a Scene down one position in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#moveDown\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    moveDown: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.moveDown(key);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Brings a Scene to the top of the Scenes list.\r\n     *\r\n     * This means it will render above all other Scenes.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#bringToTop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    bringToTop: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.bringToTop(key);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sends a Scene to the back of the Scenes list.\r\n     *\r\n     * This means it will render below all other Scenes.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#sendToBack\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [key] - The Scene to move.\r\n     *\r\n     * @return {Phaser.Scenes.ScenePlugin} This ScenePlugin object.\r\n     */\r\n    sendToBack: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        this.manager.sendToBack(key);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Retrieve a Scene.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The Scene to retrieve.\r\n     *\r\n     * @return {Phaser.Scene} The Scene.\r\n     */\r\n    get: function (key)\r\n    {\r\n        return this.manager.getScene(key);\r\n    },\r\n\r\n    /**\r\n     * Retrieves the numeric index of a Scene in the Scenes list.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#getIndex\r\n     * @since 3.7.0\r\n     *\r\n     * @param {(string|Phaser.Scene)} [key] - The Scene to get the index of.\r\n     *\r\n     * @return {integer} The index of the Scene.\r\n     */\r\n    getIndex: function (key)\r\n    {\r\n        if (key === undefined) { key = this.key; }\r\n\r\n        return this.manager.getIndex(key);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(Events.SHUTDOWN, this.shutdown, this);\r\n        eventEmitter.off(Events.POST_UPDATE, this.step, this);\r\n        eventEmitter.off(Events.TRANSITION_OUT);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Scenes.ScenePlugin#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(Events.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n        this.settings = null;\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('ScenePlugin', ScenePlugin, 'scenePlugin');\r\n\r\nmodule.exports = ScenePlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TY2VuZVBsdWdpbi5qcz8xZTRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsOERBQWU7QUFDbkMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxhQUFhLG1CQUFPLENBQUMsaUVBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMkdBQTJHO0FBQzFILGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjs7QUFFaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjs7QUFFaEQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxpQkFBaUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGlCQUFpQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7O0FBRWhEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TY2VuZVBsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBwcm94eSBjbGFzcyB0byB0aGUgR2xvYmFsIFNjZW5lIE1hbmFnZXIuXHJcbiAqXHJcbiAqIEBjbGFzcyBTY2VuZVBsdWdpblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlNjZW5lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0aGF0IHRoaXMgU2NlbmVQbHVnaW4gYmVsb25ncyB0by5cclxuICovXHJcbnZhciBTY2VuZVBsdWdpbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTY2VuZVBsdWdpbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRoYXQgdGhpcyBTY2VuZVBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgU3lzdGVtcyBpbnN0YW5jZSBvZiB0aGUgU2NlbmUgdGhhdCB0aGlzIFNjZW5lUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNldHRpbmdzIG9mIHRoZSBTY2VuZSB0aGlzIFNjZW5lUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNjZW5lLnN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBvZiB0aGUgU2NlbmUgdGhpcyBTY2VuZVBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNrZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0gc2NlbmUuc3lzLnNldHRpbmdzLmtleTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEdhbWUncyBTY2VuZU1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gc2NlbmUuc3lzLmdhbWUuc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgU2NlbmUgaXMgY3VycmVudGx5IHRyYW5zaXRpb25pbmcgdG8gYW5vdGhlciwgdGhpcyBob2xkc1xyXG4gICAgICAgICAqIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugb2YgdGhlIHRyYW5zaXRpb24gcHJvZ3Jlc3MsIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jdHJhbnNpdGlvblByb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRyYW5zaXRpb25Qcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRyYW5zaXRpb24gZWxhcHNlZCB0aW1lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUcmFuc2l0aW9uIGVsYXBzZWQgdGltZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI190YXJnZXRcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5TY2VuZXMuU2NlbmV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUcmFuc2l0aW9uIGR1cmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNfZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2R1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVHJhbnNpdGlvbiBjYWxsYmFjay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRyYW5zaXRpb24gY2FsbGJhY2sgc2NvcGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI19vblVwZGF0ZVNjb3BlXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpbGwgdGhpcyBTY2VuZSBzbGVlcCAodHJ1ZSkgYWZ0ZXIgdGhlIHRyYW5zaXRpb24sIG9yIHN0b3AgKGZhbHNlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNfd2lsbFNsZWVwXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl93aWxsU2xlZXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lsbCB0aGlzIFNjZW5lIGJlIHJlbW92ZWQgZnJvbSB0aGUgU2NlbmUgTWFuYWdlciBhZnRlciB0aGUgdHJhbnNpdGlvbiBjb21wbGV0ZXM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI193aWxsUmVtb3ZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl93aWxsUmVtb3ZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKEV2ZW50cy5TVEFSVCwgdGhpcy5wbHVnaW5TdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNwbHVnaW5TdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBwbHVnaW5TdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHV0ZG93biB0aGlzIFNjZW5lIGFuZCBydW4gdGhlIGdpdmVuIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byBzdGFydC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBUaGUgU2NlbmUgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5xdWV1ZU9wKCdzdG9wJywgdGhpcy5rZXkpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5xdWV1ZU9wKCdzdGFydCcsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RhcnRzIHRoaXMgU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3Jlc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBUaGUgU2NlbmUgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVzdGFydDogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMua2V5O1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucXVldWVPcCgnc3RvcCcsIGtleSk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnF1ZXVlT3AoJ3N0YXJ0Jywga2V5LCBkYXRhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyB3aWxsIHN0YXJ0IGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBjdXJyZW50IFNjZW5lIHRvIHRoZSB0YXJnZXQgU2NlbmUgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHRyYW5zaXRpb24gd2lsbCBsYXN0IGZvciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGhhdmUgdGhlIHRhcmdldCBTY2VuZSBtb3ZlZCBhYm92ZSBvciBiZWxvdyB0aGlzIG9uZSBpbiB0aGUgZGlzcGxheSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gc3BlY2lmeSBhbiB1cGRhdGUgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIF9ldmVyeSBmcmFtZV8gZm9yIHRoZSBkdXJhdGlvblxyXG4gICAgICogb2YgdGhlIHRyYW5zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBTY2VuZSBjYW4gZWl0aGVyIGJlIHNlbnQgdG8gc2xlZXAgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbiwgb3Igc3RvcHBlZC4gVGhlIGRlZmF1bHQgaXMgdG8gc3RvcC5cclxuICAgICAqXHJcbiAgICAgKiBUaGVyZSBhcmUgYWxzbyA1IHRyYW5zaXRpb24gcmVsYXRlZCBldmVudHM6IFRoaXMgc2NlbmUgd2lsbCBlbWl0IHRoZSBldmVudCBgdHJhbnNpdGlvbm91dGAgd2hlblxyXG4gICAgICogdGhlIHRyYW5zaXRpb24gYmVnaW5zLCB3aGljaCBpcyB0eXBpY2FsbHkgdGhlIGZyYW1lIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHRhcmdldCBTY2VuZSB3aWxsIGVtaXQgdGhlIGV2ZW50IGB0cmFuc2l0aW9uaW5pdGAgd2hlbiB0aGF0IFNjZW5lJ3MgYGluaXRgIG1ldGhvZCBpcyBjYWxsZWQuXHJcbiAgICAgKiBJdCB3aWxsIHRoZW4gZW1pdCB0aGUgZXZlbnQgYHRyYW5zaXRpb25zdGFydGAgd2hlbiBpdHMgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZC5cclxuICAgICAqIElmIHRoZSBTY2VuZSB3YXMgc2xlZXBpbmcgYW5kIGhhcyBiZWVuIHdva2VuIHVwLCBpdCB3aWxsIGVtaXQgdGhlIGV2ZW50IGB0cmFuc2l0aW9ud2FrZWAgaW5zdGVhZCBvZiB0aGVzZSB0d28sXHJcbiAgICAgKiBhcyB0aGUgU2NlbmVzIGBpbml0YCBhbmQgYGNyZWF0ZWAgbWV0aG9kcyBhcmUgbm90IGludm9rZWQgd2hlbiBhIFNjZW5lIHdha2VzIHVwLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGhhcyBlbGFwc2VkIGl0IHdpbGwgZW1pdCB0aGUgZXZlbnQgYHRyYW5zaXRpb25jb21wbGV0ZWAuXHJcbiAgICAgKiBUaGVzZSBldmVudHMgYXJlIGNsZWFyZWQgb2YgYWxsIGxpc3RlbmVycyB3aGVuIHRoZSBTY2VuZSBzaHV0cyBkb3duLCBidXQgbm90IGlmIGl0IGlzIHNlbnQgdG8gc2xlZXAuXHJcbiAgICAgKlxyXG4gICAgICogSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBiZWdpbnMgdGhlIG1vbWVudCB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqIElmIHRoZSBTY2VuZSB5b3UgYXJlIHRyYW5zaXRpb25pbmcgdG8gaW5jbHVkZXMgZGVsYXllZCBwcm9jZXNzZXMsIHN1Y2ggYXMgd2FpdGluZyBmb3IgZmlsZXMgdG8gbG9hZCwgdGhlXHJcbiAgICAgKiB0aW1lIHN0aWxsIGNvdW50cyBkb3duIGV2ZW4gd2hpbGUgdGhhdCBpcyBoYXBwZW5pbmcuIElmIHRoZSBnYW1lIGl0c2VsZiBwYXVzZXMsIG9yIHNvbWV0aGluZyBlbHNlIGNhdXNlc1xyXG4gICAgICogdGhpcyBTY2VuZXMgdXBkYXRlIGxvb3AgdG8gc3RvcCwgdGhlbiB0aGUgdHJhbnNpdGlvbiB3aWxsIGFsc28gcGF1c2UgZm9yIHRoYXQgZHVyYXRpb24uIFRoZXJlIGFyZVxyXG4gICAgICogY2hlY2tzIGluIHBsYWNlIHRvIHByZXZlbnQgeW91IGFjY2lkZW50YWxseSBzdG9wcGluZyBhIHRyYW5zaXRpb25pbmcgU2NlbmUgYnV0IGlmIHlvdSd2ZSBnb3QgY29kZSB0b1xyXG4gICAgICogb3ZlcnJpZGUgdGhpcyB1bmRlcnN0YW5kIHRoYXQgdW50aWwgdGhlIHRhcmdldCBTY2VuZSBjb21wbGV0ZXMgaXQgbWlnaHQgbmV2ZXIgYmUgdW5sb2NrZWQgZm9yIGlucHV0IGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jdHJhbnNpdGlvblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI1RSQU5TSVRJT05fT1VUXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5TY2VuZXMuU2NlbmVUcmFuc2l0aW9uQ29uZmlnfSBjb25maWcgLSBUaGUgdHJhbnNpdGlvbiBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaXMgdGhlIHRyYW5zaXRpb24gd2FzIHN0YXJ0ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2l0aW9uOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgICAgICB2YXIga2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RhcmdldCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMubWFuYWdlci5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIWtleSB8fCAhdGhpcy5jaGVja1ZhbGlkVHJhbnNpdGlvbih0YXJnZXQpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2R1cmF0aW9uJywgMTAwMCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcclxuICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMuX3dpbGxTbGVlcCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzbGVlcCcsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLl93aWxsUmVtb3ZlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3JlbW92ZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ29uVXBkYXRlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChjYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlID0gY2FsbGJhY2s7XHJcbiAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnb25VcGRhdGVTY29wZScsIHRoaXMuc2NlbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYWxsb3dJbnB1dCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy50cmFuc2l0aW9uQWxsb3dJbnB1dCA9IGFsbG93SW5wdXQ7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRTZXR0aW5ncyA9IHRhcmdldC5zeXMuc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIHRhcmdldFNldHRpbmdzLmlzVHJhbnNpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGFyZ2V0U2V0dGluZ3MudHJhbnNpdGlvbkZyb20gPSB0aGlzLnNjZW5lO1xyXG4gICAgICAgIHRhcmdldFNldHRpbmdzLnRyYW5zaXRpb25EdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRhcmdldFNldHRpbmdzLnRyYW5zaXRpb25BbGxvd0lucHV0ID0gYWxsb3dJbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKEdldEZhc3RWYWx1ZShjb25maWcsICdtb3ZlQWJvdmUnLCBmYWxzZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIubW92ZUFib3ZlKHRoaXMua2V5LCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChHZXRGYXN0VmFsdWUoY29uZmlnLCAnbW92ZUJlbG93JywgZmFsc2UpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLm1vdmVCZWxvdyh0aGlzLmtleSwga2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXQuc3lzLmlzU2xlZXBpbmcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhcmdldC5zeXMud2FrZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIuc3RhcnQoa2V5LCBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGF0YScpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMuZW1pdChFdmVudHMuVFJBTlNJVElPTl9PVVQsIHRhcmdldCwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uKEV2ZW50cy5VUERBVEUsIHRoaXMuc3RlcCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhpcyBTY2VuZSBjYW4gdHJhbnNpdGlvbiB0byB0aGUgdGFyZ2V0IFNjZW5lIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jY2hlY2tWYWxpZFRyYW5zaXRpb25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gdGFyZ2V0IC0gVGhlIFNjZW5lIHRvIHRlc3QgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBTY2VuZSBjYW4gdHJhbnNpdGlvbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNoZWNrVmFsaWRUcmFuc2l0aW9uOiBmdW5jdGlvbiAodGFyZ2V0KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBOb3QgYSB2YWxpZCB0YXJnZXQgaWYgaXQgZG9lc24ndCBleGlzdCwgaXNuJ3QgYWN0aXZlIG9yIGlzIGFscmVhZHkgdHJhbnNpdGlvbmluZyBpbiBvciBvdXRcclxuICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQuc3lzLmlzQWN0aXZlKCkgfHwgdGFyZ2V0LnN5cy5pc1RyYW5zaXRpb25pbmcoKSB8fCB0YXJnZXQgPT09IHRoaXMuc2NlbmUgfHwgdGhpcy5zeXN0ZW1zLmlzVHJhbnNpdGlvbmluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzaW5nbGUgZ2FtZSBzdGVwLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGlmIHRoZSBwYXJlbnQgU2NlbmUgaXMgdHJhbnNpdGlvbmluZ1xyXG4gICAgICogb3V0IHRvIGFub3RoZXIgU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3N0ZXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgKz0gZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNpdGlvblByb2dyZXNzID0gQ2xhbXAodGhpcy5fZWxhcHNlZCAvIHRoaXMuX2R1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLnRyYW5zaXRpb25Qcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA+PSB0aGlzLl9kdXJhdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBgc3RlcGAgd2hlbiB0aGUgdHJhbnNpdGlvbiBvdXQgb2YgdGhpcyBzY2VuZSB0byBhbm90aGVyIGlzIG92ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3RyYW5zaXRpb25Db21wbGV0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgdHJhbnNpdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0YXJnZXRTeXMgPSB0aGlzLl90YXJnZXQuc3lzO1xyXG4gICAgICAgIHZhciB0YXJnZXRTZXR0aW5ncyA9IHRoaXMuX3RhcmdldC5zeXMuc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIC8vICBTdG9wIHRoZSBzdGVwXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoRXZlbnRzLlVQREFURSwgdGhpcy5zdGVwLCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGlmeSB0YXJnZXQgc2NlbmVcclxuICAgICAgICB0YXJnZXRTeXMuZXZlbnRzLmVtaXQoRXZlbnRzLlRSQU5TSVRJT05fQ09NUExFVEUsIHRoaXMuc2NlbmUpO1xyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgdGFyZ2V0IHNjZW5lIHNldHRpbmdzXHJcbiAgICAgICAgdGFyZ2V0U2V0dGluZ3MuaXNUcmFuc2l0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGFyZ2V0U2V0dGluZ3MudHJhbnNpdGlvbkZyb20gPSBudWxsO1xyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgbG9jYWwgc2V0dGluZ3NcclxuICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vICBOb3cgZXZlcnl0aGluZyBpcyBjbGVhciB3ZSBjYW4gaGFuZGxlIHdoYXQgaGFwcGVucyB0byB0aGlzIFNjZW5lXHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbGxSZW1vdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlKHRoaXMua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fd2lsbFNsZWVwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1zLnNsZWVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5zdG9wKHRoaXMua2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHRoZSBTY2VuZSBpbnRvIHRoZSBTY2VuZSBNYW5hZ2VyIGFuZCBzdGFydCBpdCBpZiAnYXV0b1N0YXJ0JyBpcyB0cnVlIG9yIHRoZSBTY2VuZSBjb25maWcgJ2FjdGl2ZScgcHJvcGVydHkgaXMgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgU2NlbmUga2V5LlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlNjZW5lfFBoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NDb25maWd8UGhhc2VyLlR5cGVzLlNjZW5lcy5DcmVhdGVTY2VuZUZyb21PYmplY3RDb25maWd8ZnVuY3Rpb24pfSBzY2VuZUNvbmZpZyAtIFRoZSBjb25maWcgZm9yIHRoZSBTY2VuZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0b1N0YXJ0IC0gV2hldGhlciB0byBzdGFydCB0aGUgU2NlbmUgYWZ0ZXIgaXQncyBhZGRlZC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBPcHRpb25hbCBkYXRhIG9iamVjdC4gVGhpcyB3aWxsIGJlIHNldCBhcyBTY2VuZS5zZXR0aW5ncy5kYXRhIGFuZCBwYXNzZWQgdG8gYFNjZW5lLmluaXRgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZX0gQW4gaW5zdGFuY2Ugb2YgdGhlIFNjZW5lIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBTY2VuZSBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIHNjZW5lQ29uZmlnLCBhdXRvU3RhcnQsIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5hZGQoa2V5LCBzY2VuZUNvbmZpZywgYXV0b1N0YXJ0LCBkYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYXVuY2ggdGhlIGdpdmVuIFNjZW5lIGFuZCBydW4gaXQgaW4gcGFyYWxsZWwgd2l0aCB0aGlzIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jbGF1bmNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIGxhdW5jaC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBUaGUgU2NlbmUgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgbGF1bmNoOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgJiYga2V5ICE9PSB0aGlzLmtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5xdWV1ZU9wKCdzdGFydCcsIGtleSwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSdW5zIHRoZSBnaXZlbiBTY2VuZSwgYnV0IGRvZXMgbm90IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhpcyBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gU2NlbmUgaXMgcGF1c2VkLCBpdCB3aWxsIHJlc3VtZSBpdC4gSWYgc2xlZXBpbmcsIGl0IHdpbGwgd2FrZSBpdC5cclxuICAgICAqIElmIG5vdCBydW5uaW5nIGF0IGFsbCwgaXQgd2lsbCBiZSBzdGFydGVkLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB0aGlzIGlmIHlvdSB3aXNoIHRvIG9wZW4gYSBtb2RhbCBTY2VuZSBieSBjYWxsaW5nIGBwYXVzZWAgb24gdGhlIGN1cnJlbnRcclxuICAgICAqIFNjZW5lLCB0aGVuIGBydW5gIG9uIHRoZSBtb2RhbCBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jcnVuXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBTY2VuZSB0byBydW4uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gQSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBhbmQgZW1pdHRlZCBpbiBpdHMgcmVhZHksIHdha2UsIG9yIHJlc3VtZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbn0gVGhpcyBTY2VuZVBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJ1bjogZnVuY3Rpb24gKGtleSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ICYmIGtleSAhPT0gdGhpcy5rZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIucXVldWVPcCgncnVuJywga2V5LCBkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhdXNlIHRoZSBTY2VuZSAtIHRoaXMgc3RvcHMgdGhlIHVwZGF0ZSBzdGVwIGZyb20gaGFwcGVuaW5nIGJ1dCBpdCBzdGlsbCByZW5kZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIFNjZW5lIHRvIHBhdXNlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIFNjZW5lIGFuZCBlbWl0dGVkIGluIGl0cyBwYXVzZSBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5xdWV1ZU9wKCdwYXVzZScsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgU2NlbmUgLSBzdGFydHMgdGhlIHVwZGF0ZSBsb29wIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byByZXN1bWUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2RhdGFdIC0gQW4gb3B0aW9uYWwgZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgU2NlbmUgYW5kIGVtaXR0ZWQgaW4gaXRzIHJlc3VtZSBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucXVldWVPcCgncmVzdW1lJywga2V5LCBkYXRhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFrZXMgdGhlIFNjZW5lIHNsZWVwIChubyB1cGRhdGUsIG5vIHJlbmRlcikgYnV0IGRvZXNuJ3Qgc2h1dGRvd24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3NsZWVwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gcHV0IHRvIHNsZWVwLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIFNjZW5lIGFuZCBlbWl0dGVkIGluIGl0cyBzbGVlcCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2xlZXA6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5xdWV1ZU9wKCdzbGVlcCcsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ha2VzIHRoZSBTY2VuZSB3YWtlLXVwIChzdGFydHMgdXBkYXRlIGFuZCByZW5kZXIpXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3dha2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byB3YWtlIHVwLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIFNjZW5lIGFuZCBlbWl0dGVkIGluIGl0cyB3YWtlIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW59IFRoaXMgU2NlbmVQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB3YWtlOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucXVldWVPcCgnd2FrZScsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ha2VzIHRoaXMgU2NlbmUgc2xlZXAgdGhlbiBzdGFydHMgdGhlIFNjZW5lIGdpdmVuLlxyXG4gICAgICogXHJcbiAgICAgKiBObyBjaGVja3MgYXJlIG1hZGUgdG8gc2VlIGlmIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBTY2VuZSBpcyBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBCZWNhdXNlIFNjZW5lcyBpbiBQaGFzZXIgYXJlIG5vbi1leGNsdXNpdmUsIHlvdSBhcmUgYWxsb3dlZCB0byBydW4gbXVsdGlwbGVcclxuICAgICAqIGluc3RhbmNlcyBvZiB0aGVtIF9hdCB0aGUgc2FtZSB0aW1lXy4gVGhpcyBtZWFucywgY2FsbGluZyB0aGlzIGZ1bmN0aW9uXHJcbiAgICAgKiBtYXkgbGF1bmNoIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIHJlcXVlc3RlZCBTY2VuZSBpZiBpdCdzIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jc3dpdGNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIHN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW59IFRoaXMgU2NlbmVQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzd2l0Y2g6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gdGhpcy5rZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIucXVldWVPcCgnc3dpdGNoJywgdGhpcy5rZXksIGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHV0ZG93biB0aGUgU2NlbmUsIGNsZWFyaW5nIGRpc3BsYXkgbGlzdCwgdGltZXJzLCBldGMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byBzdG9wLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtkYXRhXSAtIE9wdGlvbmFsIGRhdGEgb2JqZWN0IHRvIHBhc3MgdG8gU2NlbmUuU3lzdGVtcy5zaHV0ZG93bi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKGtleSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHsga2V5ID0gdGhpcy5rZXk7IH1cclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnF1ZXVlT3AoJ3N0b3AnLCBrZXksIGRhdGEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGdpdmVuIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNzZXRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBJZiBgdHJ1ZWAgdGhlIFNjZW5lIHdpbGwgYmUgcmVzdW1lZC4gSWYgYGZhbHNlYCBpdCB3aWxsIGJlIHBhdXNlZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byBzZXQgdGhlIGFjdGl2ZSBzdGF0ZSBvZi5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBbiBvcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBTY2VuZSBhbmQgZW1pdHRlZCB3aXRoIGl0cyBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbn0gVGhpcyBTY2VuZVBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjdGl2ZTogZnVuY3Rpb24gKHZhbHVlLCBrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMubWFuYWdlci5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMuc2V0QWN0aXZlKHZhbHVlLCBkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIGdpdmVuIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNzZXRWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gVGhlIHZpc2libGUgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gc2V0IHRoZSB2aXNpYmxlIHN0YXRlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VmlzaWJsZTogZnVuY3Rpb24gKHZhbHVlLCBrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMubWFuYWdlci5nZXRTY2VuZShrZXkpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMuc2V0VmlzaWJsZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIFNjZW5lIGlzIHNsZWVwaW5nIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jaXNTbGVlcGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIFNjZW5lIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFNjZW5lIGlzIHNsZWVwaW5nLlxyXG4gICAgICovXHJcbiAgICBpc1NsZWVwaW5nOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmlzU2xlZXBpbmcoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIFNjZW5lIGlzIHJ1bm5pbmcgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNpc0FjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIFNjZW5lIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFNjZW5lIGlzIHJ1bm5pbmcuXHJcbiAgICAgKi9cclxuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmlzQWN0aXZlKGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBTY2VuZSBpcyBwYXVzZWQgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNpc1BhdXNlZFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBTY2VuZSB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBTY2VuZSBpcyBwYXVzZWQuXHJcbiAgICAgKi9cclxuICAgIGlzUGF1c2VkOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmlzUGF1c2VkKGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBTY2VuZSBpcyB2aXNpYmxlIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jaXNWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgU2NlbmUgaXMgdmlzaWJsZS5cclxuICAgICAqL1xyXG4gICAgaXNWaXNpYmxlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmlzVmlzaWJsZShrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiB0d28gc2NlbmVzIGluIHRoZSBTY2VuZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGNvbnRyb2xzIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZW5kZXJlZCBhbmQgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jc3dhcFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5QSAtIFRoZSBmaXJzdCBTY2VuZSB0byBzd2FwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXlCXSAtIFRoZSBzZWNvbmQgU2NlbmUgdG8gc3dhcC4gSWYgbm9uZSBpcyBnaXZlbiBpdCBkZWZhdWx0cyB0byB0aGlzIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW59IFRoaXMgU2NlbmVQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzd2FwUG9zaXRpb246IGZ1bmN0aW9uIChrZXlBLCBrZXlCKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXlCID09PSB1bmRlZmluZWQpIHsga2V5QiA9IHRoaXMua2V5OyB9XHJcblxyXG4gICAgICAgIGlmIChrZXlBICE9PSBrZXlCKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLnN3YXBQb3NpdGlvbihrZXlBLCBrZXlCKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiB0d28gc2NlbmVzIGluIHRoZSBTY2VuZXMgbGlzdCwgc28gdGhhdCBTY2VuZSBCIGlzIGRpcmVjdGx5IGFib3ZlIFNjZW5lIEEuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBjb250cm9scyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgcmVuZGVyZWQgYW5kIHVwZGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2luI21vdmVBYm92ZVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleUEgLSBUaGUgU2NlbmUgdGhhdCBTY2VuZSBCIHdpbGwgYmUgbW92ZWQgdG8gYmUgYWJvdmUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleUJdIC0gVGhlIFNjZW5lIHRvIGJlIG1vdmVkLiBJZiBub25lIGlzIGdpdmVuIGl0IGRlZmF1bHRzIHRvIHRoaXMgU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbn0gVGhpcyBTY2VuZVBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVBYm92ZTogZnVuY3Rpb24gKGtleUEsIGtleUIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleUIgPT09IHVuZGVmaW5lZCkgeyBrZXlCID0gdGhpcy5rZXk7IH1cclxuXHJcbiAgICAgICAgaWYgKGtleUEgIT09IGtleUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIubW92ZUFib3ZlKGtleUEsIGtleUIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIHR3byBzY2VuZXMgaW4gdGhlIFNjZW5lcyBsaXN0LCBzbyB0aGF0IFNjZW5lIEIgaXMgZGlyZWN0bHkgYmVsb3cgU2NlbmUgQS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGNvbnRyb2xzIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZW5kZXJlZCBhbmQgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jbW92ZUJlbG93XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5QSAtIFRoZSBTY2VuZSB0aGF0IFNjZW5lIEIgd2lsbCBiZSBtb3ZlZCB0byBiZSBiZWxvdy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5Ql0gLSBUaGUgU2NlbmUgdG8gYmUgbW92ZWQuIElmIG5vbmUgaXMgZ2l2ZW4gaXQgZGVmYXVsdHMgdG8gdGhpcyBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgbW92ZUJlbG93OiBmdW5jdGlvbiAoa2V5QSwga2V5QilcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5QiA9PT0gdW5kZWZpbmVkKSB7IGtleUIgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5QSAhPT0ga2V5QilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5tb3ZlQmVsb3coa2V5QSwga2V5Qik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgU2NlbmUgZnJvbSB0aGUgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBTY2VuZSBpcyByZW1vdmVkIGZyb20gdGhlIGxvY2FsIHNjZW5lcyBhcnJheSwgaXQncyBrZXkgaXMgY2xlYXJlZCBmcm9tIHRoZSBrZXlzXHJcbiAgICAgKiBjYWNoZSBhbmQgU2NlbmUuU3lzdGVtcy5kZXN0cm95IGlzIHRoZW4gY2FsbGVkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBTY2VuZU1hbmFnZXIgaXMgcHJvY2Vzc2luZyB0aGUgU2NlbmVzIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIGl0IHdpbFxyXG4gICAgICogcXVldWUgdGhlIG9wZXJhdGlvbiBmb3IgdGhlIG5leHQgdXBkYXRlIHNlcXVlbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBba2V5XSAtIFRoZSBTY2VuZSB0byBiZSByZW1vdmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfSBUaGlzIFNjZW5lTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgU2NlbmUgdXAgb25lIHBvc2l0aW9uIGluIHRoZSBTY2VuZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jbW92ZVVwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgbW92ZVVwOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIubW92ZVVwKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgU2NlbmUgZG93biBvbmUgcG9zaXRpb24gaW4gdGhlIFNjZW5lcyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNtb3ZlRG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIFNjZW5lIHRvIG1vdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbn0gVGhpcyBTY2VuZVBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVEb3duOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIubW92ZURvd24oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJpbmdzIGEgU2NlbmUgdG8gdGhlIHRvcCBvZiB0aGUgU2NlbmVzIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZWFucyBpdCB3aWxsIHJlbmRlciBhYm92ZSBhbGwgb3RoZXIgU2NlbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNicmluZ1RvVG9wXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYnJpbmdUb1RvcDogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHsga2V5ID0gdGhpcy5rZXk7IH1cclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmJyaW5nVG9Ub3Aoa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgYSBTY2VuZSB0byB0aGUgYmFjayBvZiB0aGUgU2NlbmVzIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZWFucyBpdCB3aWxsIHJlbmRlciBiZWxvdyBhbGwgb3RoZXIgU2NlbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNzZW5kVG9CYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUgU2NlbmUgdG8gbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufSBUaGlzIFNjZW5lUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2VuZFRvQmFjazogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHsga2V5ID0gdGhpcy5rZXk7IH1cclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnNlbmRUb0JhY2soa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmUgYSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFNjZW5lIHRvIHJldHJpZXZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZX0gVGhlIFNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5nZXRTY2VuZShrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIFNjZW5lIGluIHRoZSBTY2VuZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jZ2V0SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuU2NlbmUpfSBba2V5XSAtIFRoZSBTY2VuZSB0byBnZXQgdGhlIGluZGV4IG9mLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBpbmRleCBvZiB0aGUgU2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGdldEluZGV4OiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyBrZXkgPSB0aGlzLmtleTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmdldEluZGV4KGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU2NlbmVQbHVnaW4jc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKEV2ZW50cy5QT1NUX1VQREFURSwgdGhpcy5zdGVwLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKEV2ZW50cy5UUkFOU0lUSU9OX09VVCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TY2VuZVBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5ldmVudHMub2ZmKEV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ1NjZW5lUGx1Z2luJywgU2NlbmVQbHVnaW4sICdzY2VuZVBsdWdpbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2VuZVBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/ScenePlugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/Settings.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/scene/Settings.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scene/const.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Merge = __webpack_require__(/*! ../utils/object/Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\");\r\nvar InjectionMap = __webpack_require__(/*! ./InjectionMap */ \"./node_modules/phaser/src/scene/InjectionMap.js\");\r\n\r\n/**\r\n * @namespace Phaser.Scenes.Settings\r\n */\r\n\r\nvar Settings = {\r\n\r\n    /**\r\n     * Takes a Scene configuration object and returns a fully formed System Settings object.\r\n     *\r\n     * @function Phaser.Scenes.Settings.create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Scenes.SettingsConfig)} config - The Scene configuration object used to create this Scene Settings.\r\n     *\r\n     * @return {Phaser.Types.Scenes.SettingsObject} The Scene Settings object created as a result of the config and default settings.\r\n     */\r\n    create: function (config)\r\n    {\r\n        if (typeof config === 'string')\r\n        {\r\n            config = { key: config };\r\n        }\r\n        else if (config === undefined)\r\n        {\r\n            //  Pass the 'hasOwnProperty' checks\r\n            config = {};\r\n        }\r\n\r\n        return {\r\n\r\n            status: CONST.PENDING,\r\n\r\n            key: GetValue(config, 'key', ''),\r\n            active: GetValue(config, 'active', false),\r\n            visible: GetValue(config, 'visible', true),\r\n\r\n            isBooted: false,\r\n\r\n            isTransition: false,\r\n            transitionFrom: null,\r\n            transitionDuration: 0,\r\n            transitionAllowInput: true,\r\n\r\n            //  Loader payload array\r\n\r\n            data: {},\r\n\r\n            pack: GetValue(config, 'pack', false),\r\n\r\n            //  Cameras\r\n\r\n            cameras: GetValue(config, 'cameras', null),\r\n\r\n            //  Scene Property Injection Map\r\n\r\n            map: GetValue(config, 'map', Merge(InjectionMap, GetValue(config, 'mapAdd', {}))),\r\n\r\n            //  Physics\r\n\r\n            physics: GetValue(config, 'physics', {}),\r\n\r\n            //  Loader\r\n\r\n            loader: GetValue(config, 'loader', {}),\r\n\r\n            //  Plugins\r\n\r\n            plugins: GetValue(config, 'plugins', false),\r\n\r\n            //  Input\r\n\r\n            input: GetValue(config, 'input', {})\r\n\r\n        };\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = Settings;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TZXR0aW5ncy5qcz9jYjczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxZQUFZLG1CQUFPLENBQUMsOEVBQXVCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFnQjs7QUFFM0M7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNENBQTRDO0FBQzNEO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9COztBQUVwQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwwRkFBMEY7O0FBRTFGOztBQUVBLG1EQUFtRDs7QUFFbkQ7O0FBRUEsaURBQWlEOztBQUVqRDs7QUFFQTs7QUFFQTs7QUFFQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIE1lcmdlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L01lcmdlJyk7XHJcbnZhciBJbmplY3Rpb25NYXAgPSByZXF1aXJlKCcuL0luamVjdGlvbk1hcCcpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlNjZW5lcy5TZXR0aW5nc1xyXG4gKi9cclxuXHJcbnZhciBTZXR0aW5ncyA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgU2NlbmUgY29uZmlndXJhdGlvbiBvYmplY3QgYW5kIHJldHVybnMgYSBmdWxseSBmb3JtZWQgU3lzdGVtIFNldHRpbmdzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLlNjZW5lcy5TZXR0aW5ncy5jcmVhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuU2NlbmVzLlNldHRpbmdzQ29uZmlnKX0gY29uZmlnIC0gVGhlIFNjZW5lIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgU2NlbmUgU2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLlNjZW5lcy5TZXR0aW5nc09iamVjdH0gVGhlIFNjZW5lIFNldHRpbmdzIG9iamVjdCBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBjb25maWcgYW5kIGRlZmF1bHQgc2V0dGluZ3MuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7IGtleTogY29uZmlnIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFBhc3MgdGhlICdoYXNPd25Qcm9wZXJ0eScgY2hlY2tzXHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgICAgIHN0YXR1czogQ09OU1QuUEVORElORyxcclxuXHJcbiAgICAgICAgICAgIGtleTogR2V0VmFsdWUoY29uZmlnLCAna2V5JywgJycpLFxyXG4gICAgICAgICAgICBhY3RpdmU6IEdldFZhbHVlKGNvbmZpZywgJ2FjdGl2ZScsIGZhbHNlKSxcclxuICAgICAgICAgICAgdmlzaWJsZTogR2V0VmFsdWUoY29uZmlnLCAndmlzaWJsZScsIHRydWUpLFxyXG5cclxuICAgICAgICAgICAgaXNCb290ZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgaXNUcmFuc2l0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbkZyb206IG51bGwsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogMCxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbkFsbG93SW5wdXQ6IHRydWUsXHJcblxyXG4gICAgICAgICAgICAvLyAgTG9hZGVyIHBheWxvYWQgYXJyYXlcclxuXHJcbiAgICAgICAgICAgIGRhdGE6IHt9LFxyXG5cclxuICAgICAgICAgICAgcGFjazogR2V0VmFsdWUoY29uZmlnLCAncGFjaycsIGZhbHNlKSxcclxuXHJcbiAgICAgICAgICAgIC8vICBDYW1lcmFzXHJcblxyXG4gICAgICAgICAgICBjYW1lcmFzOiBHZXRWYWx1ZShjb25maWcsICdjYW1lcmFzJywgbnVsbCksXHJcblxyXG4gICAgICAgICAgICAvLyAgU2NlbmUgUHJvcGVydHkgSW5qZWN0aW9uIE1hcFxyXG5cclxuICAgICAgICAgICAgbWFwOiBHZXRWYWx1ZShjb25maWcsICdtYXAnLCBNZXJnZShJbmplY3Rpb25NYXAsIEdldFZhbHVlKGNvbmZpZywgJ21hcEFkZCcsIHt9KSkpLFxyXG5cclxuICAgICAgICAgICAgLy8gIFBoeXNpY3NcclxuXHJcbiAgICAgICAgICAgIHBoeXNpY3M6IEdldFZhbHVlKGNvbmZpZywgJ3BoeXNpY3MnLCB7fSksXHJcblxyXG4gICAgICAgICAgICAvLyAgTG9hZGVyXHJcblxyXG4gICAgICAgICAgICBsb2FkZXI6IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlcicsIHt9KSxcclxuXHJcbiAgICAgICAgICAgIC8vICBQbHVnaW5zXHJcblxyXG4gICAgICAgICAgICBwbHVnaW5zOiBHZXRWYWx1ZShjb25maWcsICdwbHVnaW5zJywgZmFsc2UpLFxyXG5cclxuICAgICAgICAgICAgLy8gIElucHV0XHJcblxyXG4gICAgICAgICAgICBpbnB1dDogR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQnLCB7fSlcclxuXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldHRpbmdzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/Settings.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/Systems.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/scene/Systems.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scene/const.js\");\r\nvar DefaultPlugins = __webpack_require__(/*! ../plugins/DefaultPlugins */ \"./node_modules/phaser/src/plugins/DefaultPlugins.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar GetPhysicsPlugins = __webpack_require__(/*! ./GetPhysicsPlugins */ \"./node_modules/phaser/src/scene/GetPhysicsPlugins.js\");\r\nvar GetScenePlugins = __webpack_require__(/*! ./GetScenePlugins */ \"./node_modules/phaser/src/scene/GetScenePlugins.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar Settings = __webpack_require__(/*! ./Settings */ \"./node_modules/phaser/src/scene/Settings.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Scene Systems class.\r\n *\r\n * This class is available from within a Scene under the property `sys`.\r\n * It is responsible for managing all of the plugins a Scene has running, including the display list, and\r\n * handling the update step and renderer. It also contains references to global systems belonging to Game.\r\n *\r\n * @class Systems\r\n * @memberof Phaser.Scenes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that owns this Systems instance.\r\n * @param {(string|Phaser.Types.Scenes.SettingsConfig)} config - Scene specific configuration settings.\r\n */\r\nvar Systems = new Class({\r\n\r\n    initialize:\r\n\r\n    function Systems (scene, config)\r\n    {\r\n        /**\r\n         * A reference to the Scene that these Systems belong to.\r\n         *\r\n         * @name Phaser.Scenes.Systems#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * A reference to the Phaser Game instance.\r\n         *\r\n         * @name Phaser.Scenes.Systems#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game;\r\n\r\n        /**\r\n         * A reference to either the Canvas or WebGL Renderer that this Game is using.\r\n         *\r\n         * @name Phaser.Scenes.Systems#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.17.0\r\n         */\r\n        this.renderer;\r\n\r\n        if (typeof PLUGIN_FBINSTANT)\r\n        {\r\n            /**\r\n             * The Facebook Instant Games Plugin.\r\n             *\r\n             * @name Phaser.Scenes.Systems#facebook\r\n             * @type {Phaser.FacebookInstantGamesPlugin}\r\n             * @since 3.12.0\r\n             */\r\n            this.facebook;\r\n        }\r\n\r\n        /**\r\n         * The Scene Configuration object, as passed in when creating the Scene.\r\n         *\r\n         * @name Phaser.Scenes.Systems#config\r\n         * @type {(string|Phaser.Types.Scenes.SettingsConfig)}\r\n         * @since 3.0.0\r\n         */\r\n        this.config = config;\r\n\r\n        /**\r\n         * The Scene Settings. This is the parsed output based on the Scene configuration.\r\n         *\r\n         * @name Phaser.Scenes.Systems#settings\r\n         * @type {Phaser.Types.Scenes.SettingsObject}\r\n         * @since 3.0.0\r\n         */\r\n        this.settings = Settings.create(config);\r\n\r\n        /**\r\n         * A handy reference to the Scene canvas / context.\r\n         *\r\n         * @name Phaser.Scenes.Systems#canvas\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.0.0\r\n         */\r\n        this.canvas;\r\n\r\n        /**\r\n         * A reference to the Canvas Rendering Context being used by the renderer.\r\n         *\r\n         * @name Phaser.Scenes.Systems#context\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.0.0\r\n         */\r\n        this.context;\r\n\r\n        //  Global Systems - these are single-instance global managers that belong to Game\r\n\r\n        /**\r\n         * A reference to the global Animations Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.anims` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#anims\r\n         * @type {Phaser.Animations.AnimationManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.anims;\r\n\r\n        /**\r\n         * A reference to the global Cache. The Cache stores all files bought in to Phaser via\r\n         * the Loader, with the exception of images. Images are stored in the Texture Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.cache` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#cache\r\n         * @type {Phaser.Cache.CacheManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cache;\r\n\r\n        /**\r\n         * A reference to the global Plugins Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.plugins` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#plugins\r\n         * @type {Phaser.Plugins.PluginManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.plugins;\r\n\r\n        /**\r\n         * A reference to the global registry. This is a game-wide instance of the Data Manager, allowing\r\n         * you to exchange data between Scenes via a universal and shared point.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.registry` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#registry\r\n         * @type {Phaser.Data.DataManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.registry;\r\n\r\n        /**\r\n         * A reference to the global Scale Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.scale` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#scale\r\n         * @type {Phaser.Scale.ScaleManager}\r\n         * @since 3.15.0\r\n         */\r\n        this.scale;\r\n\r\n        /**\r\n         * A reference to the global Sound Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.sound` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#sound\r\n         * @type {(Phaser.Sound.NoAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager|Phaser.Sound.WebAudioSoundManager)}\r\n         * @since 3.0.0\r\n         */\r\n        this.sound;\r\n\r\n        /**\r\n         * A reference to the global Texture Manager.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.textures` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#textures\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.textures;\r\n\r\n        //  Core Plugins - these are non-optional Scene plugins, needed by lots of the other systems\r\n\r\n        /**\r\n         * A reference to the Scene's Game Object Factory.\r\n         * \r\n         * Use this to quickly and easily create new Game Object's.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.add` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#add\r\n         * @type {Phaser.GameObjects.GameObjectFactory}\r\n         * @since 3.0.0\r\n         */\r\n        this.add;\r\n\r\n        /**\r\n         * A reference to the Scene's Camera Manager.\r\n         * \r\n         * Use this to manipulate and create Cameras for this specific Scene.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.cameras` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#cameras\r\n         * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.cameras;\r\n\r\n        /**\r\n         * A reference to the Scene's Display List.\r\n         * \r\n         * Use this to organize the children contained in the display list.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.children` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#displayList\r\n         * @type {Phaser.GameObjects.DisplayList}\r\n         * @since 3.0.0\r\n         */\r\n        this.displayList;\r\n\r\n        /**\r\n         * A reference to the Scene's Event Manager.\r\n         * \r\n         * Use this to listen for Scene specific events, such as `pause` and `shutdown`.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.events` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#events\r\n         * @type {Phaser.Events.EventEmitter}\r\n         * @since 3.0.0\r\n         */\r\n        this.events;\r\n\r\n        /**\r\n         * A reference to the Scene's Game Object Creator.\r\n         * \r\n         * Use this to quickly and easily create new Game Object's. The difference between this and the\r\n         * Game Object Factory, is that the Creator just creates and returns Game Object instances, it\r\n         * doesn't then add them to the Display List or Update List.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.make` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#make\r\n         * @type {Phaser.GameObjects.GameObjectCreator}\r\n         * @since 3.0.0\r\n         */\r\n        this.make;\r\n\r\n        /**\r\n         * A reference to the Scene Manager Plugin.\r\n         * \r\n         * Use this to manipulate both this and other Scene's in your game, for example to launch a parallel Scene,\r\n         * or pause or resume a Scene, or switch from this Scene to another.\r\n         * \r\n         * In the default set-up you can access this from within a Scene via the `this.scene` property.\r\n         *\r\n         * @name Phaser.Scenes.Systems#scenePlugin\r\n         * @type {Phaser.Scenes.ScenePlugin}\r\n         * @since 3.0.0\r\n         */\r\n        this.scenePlugin;\r\n\r\n        /**\r\n         * A reference to the Scene's Update List.\r\n         * \r\n         * Use this to organize the children contained in the update list.\r\n         * \r\n         * The Update List is responsible for managing children that need their `preUpdate` methods called,\r\n         * in order to process so internal components, such as Sprites with Animations.\r\n         * \r\n         * In the default set-up there is no reference to this from within the Scene itself.\r\n         *\r\n         * @name Phaser.Scenes.Systems#updateList\r\n         * @type {Phaser.GameObjects.UpdateList}\r\n         * @since 3.0.0\r\n         */\r\n        this.updateList;\r\n\r\n        /**\r\n         * The Scene Update function.\r\n         *\r\n         * This starts out as NOOP during init, preload and create, and at the end of create\r\n         * it swaps to be whatever the Scene.update function is.\r\n         *\r\n         * @name Phaser.Scenes.Systems#sceneUpdate\r\n         * @type {function}\r\n         * @private\r\n         * @since 3.10.0\r\n         */\r\n        this.sceneUpdate = NOOP;\r\n    },\r\n\r\n    /**\r\n     * This method is called only once by the Scene Manager when the Scene is instantiated.\r\n     * It is responsible for setting up all of the Scene plugins and references.\r\n     * It should never be called directly.\r\n     *\r\n     * @method Phaser.Scenes.Systems#init\r\n     * @protected\r\n     * @fires Phaser.Scenes.Events#BOOT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Game} game - A reference to the Phaser Game instance.\r\n     */\r\n    init: function (game)\r\n    {\r\n        this.settings.status = CONST.INIT;\r\n\r\n        //  This will get replaced by the SceneManager with the actual update function, if it exists, once create is over.\r\n        this.sceneUpdate = NOOP;\r\n\r\n        this.game = game;\r\n        this.renderer = game.renderer;\r\n\r\n        this.canvas = game.canvas;\r\n        this.context = game.context;\r\n\r\n        var pluginManager = game.plugins;\r\n\r\n        this.plugins = pluginManager;\r\n\r\n        pluginManager.addToScene(this, DefaultPlugins.Global, [ DefaultPlugins.CoreScene, GetScenePlugins(this), GetPhysicsPlugins(this) ]);\r\n\r\n        this.events.emit(Events.BOOT, this);\r\n\r\n        this.settings.isBooted = true;\r\n    },\r\n\r\n    /**\r\n     * Called by a plugin, it tells the System to install the plugin locally.\r\n     *\r\n     * @method Phaser.Scenes.Systems#install\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} plugin - An array of plugins to install into this Scene.\r\n     */\r\n    install: function (plugin)\r\n    {\r\n        if (!Array.isArray(plugin))\r\n        {\r\n            plugin = [ plugin ];\r\n        }\r\n\r\n        this.plugins.installLocal(this, plugin);\r\n    },\r\n\r\n    /**\r\n     * A single game step. Called automatically by the Scene Manager as a result of a Request Animation\r\n     * Frame or Set Timeout call to the main Game instance.\r\n     *\r\n     * @method Phaser.Scenes.Systems#step\r\n     * @fires Phaser.Scenes.Events#PRE_UPDATE\r\n     * @fires Phaser.Scenes.Events#_UPDATE\r\n     * @fires Phaser.Scenes.Events#POST_UPDATE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The time value from the most recent Game step. Typically a high-resolution timer value, or Date.now().\r\n     * @param {number} delta - The delta value since the last frame. This is smoothed to avoid delta spikes by the TimeStep class.\r\n     */\r\n    step: function (time, delta)\r\n    {\r\n        this.events.emit(Events.PRE_UPDATE, time, delta);\r\n\r\n        this.events.emit(Events.UPDATE, time, delta);\r\n\r\n        this.sceneUpdate.call(this.scene, time, delta);\r\n\r\n        this.events.emit(Events.POST_UPDATE, time, delta);\r\n    },\r\n\r\n    /**\r\n     * Called automatically by the Scene Manager.\r\n     * Instructs the Scene to render itself via its Camera Manager to the renderer given.\r\n     *\r\n     * @method Phaser.Scenes.Systems#render\r\n     * @fires Phaser.Scenes.Events#RENDER\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The renderer that invoked the render call.\r\n     */\r\n    render: function (renderer)\r\n    {\r\n        var displayList = this.displayList;\r\n\r\n        displayList.depthSort();\r\n\r\n        this.cameras.render(renderer, displayList);\r\n\r\n        this.events.emit(Events.RENDER, renderer);\r\n    },\r\n\r\n    /**\r\n     * Force a sort of the display list on the next render.\r\n     *\r\n     * @method Phaser.Scenes.Systems#queueDepthSort\r\n     * @since 3.0.0\r\n     */\r\n    queueDepthSort: function ()\r\n    {\r\n        this.displayList.queueDepthSort();\r\n    },\r\n\r\n    /**\r\n     * Immediately sorts the display list if the flag is set.\r\n     *\r\n     * @method Phaser.Scenes.Systems#depthSort\r\n     * @since 3.0.0\r\n     */\r\n    depthSort: function ()\r\n    {\r\n        this.displayList.depthSort();\r\n    },\r\n\r\n    /**\r\n     * Pause this Scene.\r\n     * A paused Scene still renders, it just doesn't run ANY of its update handlers or systems.\r\n     *\r\n     * @method Phaser.Scenes.Systems#pause\r\n     * @fires Phaser.Scenes.Events#PAUSE\r\n     * @since 3.0.0\r\n     * \r\n     * @param {object} [data] - A data object that will be passed in the 'pause' event.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    pause: function (data)\r\n    {\r\n        if (this.settings.active)\r\n        {\r\n            this.settings.status = CONST.PAUSED;\r\n\r\n            this.settings.active = false;\r\n\r\n            this.events.emit(Events.PAUSE, this, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resume this Scene from a paused state.\r\n     *\r\n     * @method Phaser.Scenes.Systems#resume\r\n     * @fires Phaser.Scenes.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} [data] - A data object that will be passed in the 'resume' event.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    resume: function (data)\r\n    {\r\n        if (!this.settings.active)\r\n        {\r\n            this.settings.status = CONST.RUNNING;\r\n\r\n            this.settings.active = true;\r\n\r\n            this.events.emit(Events.RESUME, this, data);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Send this Scene to sleep.\r\n     *\r\n     * A sleeping Scene doesn't run it's update step or render anything, but it also isn't shut down\r\n     * or have any of its systems or children removed, meaning it can be re-activated at any point and\r\n     * will carry on from where it left off. It also keeps everything in memory and events and callbacks\r\n     * from other Scenes may still invoke changes within it, so be careful what is left active.\r\n     *\r\n     * @method Phaser.Scenes.Systems#sleep\r\n     * @fires Phaser.Scenes.Events#SLEEP\r\n     * @since 3.0.0\r\n     * \r\n     * @param {object} [data] - A data object that will be passed in the 'sleep' event.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    sleep: function (data)\r\n    {\r\n        this.settings.status = CONST.SLEEPING;\r\n\r\n        this.settings.active = false;\r\n        this.settings.visible = false;\r\n\r\n        this.events.emit(Events.SLEEP, this, data);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Wake-up this Scene if it was previously asleep.\r\n     *\r\n     * @method Phaser.Scenes.Systems#wake\r\n     * @fires Phaser.Scenes.Events#WAKE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} [data] - A data object that will be passed in the 'wake' event.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    wake: function (data)\r\n    {\r\n        var settings = this.settings;\r\n\r\n        settings.status = CONST.RUNNING;\r\n\r\n        settings.active = true;\r\n        settings.visible = true;\r\n\r\n        this.events.emit(Events.WAKE, this, data);\r\n\r\n        if (settings.isTransition)\r\n        {\r\n            this.events.emit(Events.TRANSITION_WAKE, settings.transitionFrom, settings.transitionDuration);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Is this Scene sleeping?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isSleeping\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is asleep, otherwise `false`.\r\n     */\r\n    isSleeping: function ()\r\n    {\r\n        return (this.settings.status === CONST.SLEEPING);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene running?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isActive\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is running, otherwise `false`.\r\n     */\r\n    isActive: function ()\r\n    {\r\n        return (this.settings.status === CONST.RUNNING);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene paused?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isPaused\r\n     * @since 3.13.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is paused, otherwise `false`.\r\n     */\r\n    isPaused: function ()\r\n    {\r\n        return (this.settings.status === CONST.PAUSED);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene currently transitioning out to, or in from another Scene?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isTransitioning\r\n     * @since 3.5.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is currently transitioning, otherwise `false`.\r\n     */\r\n    isTransitioning: function ()\r\n    {\r\n        return (this.settings.isTransition || this.scenePlugin._target !== null);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene currently transitioning out from itself to another Scene?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isTransitionOut\r\n     * @since 3.5.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is in transition to another Scene, otherwise `false`.\r\n     */\r\n    isTransitionOut: function ()\r\n    {\r\n        return (this.scenePlugin._target !== null && this.scenePlugin._duration > 0);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene currently transitioning in from another Scene?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isTransitionIn\r\n     * @since 3.5.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is transitioning in from another Scene, otherwise `false`.\r\n     */\r\n    isTransitionIn: function ()\r\n    {\r\n        return (this.settings.isTransition);\r\n    },\r\n\r\n    /**\r\n     * Is this Scene visible and rendering?\r\n     *\r\n     * @method Phaser.Scenes.Systems#isVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if this Scene is visible, otherwise `false`.\r\n     */\r\n    isVisible: function ()\r\n    {\r\n        return this.settings.visible;\r\n    },\r\n\r\n    /**\r\n     * Sets the visible state of this Scene.\r\n     * An invisible Scene will not render, but will still process updates.\r\n     *\r\n     * @method Phaser.Scenes.Systems#setVisible\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - `true` to render this Scene, otherwise `false`.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    setVisible: function (value)\r\n    {\r\n        this.settings.visible = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set the active state of this Scene.\r\n     * \r\n     * An active Scene will run its core update loop.\r\n     *\r\n     * @method Phaser.Scenes.Systems#setActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} value - If `true` the Scene will be resumed, if previously paused. If `false` it will be paused.\r\n     * @param {object} [data] - A data object that will be passed in the 'resume' or 'pause' events.\r\n     *\r\n     * @return {Phaser.Scenes.Systems} This Systems object.\r\n     */\r\n    setActive: function (value, data)\r\n    {\r\n        if (value)\r\n        {\r\n            return this.resume(data);\r\n        }\r\n        else\r\n        {\r\n            return this.pause(data);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Start this Scene running and rendering.\r\n     * Called automatically by the SceneManager.\r\n     *\r\n     * @method Phaser.Scenes.Systems#start\r\n     * @fires Phaser.Scenes.Events#START\r\n     * @fires Phaser.Scenes.Events#READY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} data - Optional data object that may have been passed to this Scene from another.\r\n     */\r\n    start: function (data)\r\n    {\r\n        if (data)\r\n        {\r\n            this.settings.data = data;\r\n        }\r\n\r\n        this.settings.status = CONST.START;\r\n\r\n        this.settings.active = true;\r\n        this.settings.visible = true;\r\n\r\n        //  For plugins to listen out for\r\n        this.events.emit(Events.START, this);\r\n\r\n        //  For user-land code to listen out for\r\n        this.events.emit(Events.READY, this, data);\r\n    },\r\n\r\n    /**\r\n     * Shutdown this Scene and send a shutdown event to all of its systems.\r\n     * A Scene that has been shutdown will not run its update loop or render, but it does\r\n     * not destroy any of its plugins or references. It is put into hibernation for later use.\r\n     * If you don't ever plan to use this Scene again, then it should be destroyed instead\r\n     * to free-up resources.\r\n     *\r\n     * @method Phaser.Scenes.Systems#shutdown\r\n     * @fires Phaser.Scenes.Events#SHUTDOWN\r\n     * @since 3.0.0\r\n     * \r\n     * @param {object} [data] - A data object that will be passed in the 'shutdown' event.\r\n     */\r\n    shutdown: function (data)\r\n    {\r\n        this.events.off(Events.TRANSITION_INIT);\r\n        this.events.off(Events.TRANSITION_START);\r\n        this.events.off(Events.TRANSITION_COMPLETE);\r\n        this.events.off(Events.TRANSITION_OUT);\r\n\r\n        this.settings.status = CONST.SHUTDOWN;\r\n\r\n        this.settings.active = false;\r\n        this.settings.visible = false;\r\n\r\n        this.events.emit(Events.SHUTDOWN, this, data);\r\n    },\r\n\r\n    /**\r\n     * Destroy this Scene and send a destroy event all of its systems.\r\n     * A destroyed Scene cannot be restarted.\r\n     * You should not call this directly, instead use `SceneManager.remove`.\r\n     *\r\n     * @method Phaser.Scenes.Systems#destroy\r\n     * @private\r\n     * @fires Phaser.Scenes.Events#DESTROY\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.settings.status = CONST.DESTROYED;\r\n\r\n        this.settings.active = false;\r\n        this.settings.visible = false;\r\n\r\n        this.events.emit(Events.DESTROY, this);\r\n\r\n        this.events.removeAllListeners();\r\n\r\n        var props = [ 'scene', 'game', 'anims', 'cache', 'plugins', 'registry', 'sound', 'textures', 'add', 'camera', 'displayList', 'events', 'make', 'scenePlugin', 'updateList' ];\r\n\r\n        for (var i = 0; i < props.length; i++)\r\n        {\r\n            this[props[i]] = null;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Systems;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9TeXN0ZW1zLmpzPzkzMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLHlEQUFTO0FBQzdCLHFCQUFxQixtQkFBTyxDQUFDLHNGQUEyQjtBQUN4RCxhQUFhLG1CQUFPLENBQUMsaUVBQVU7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3JELHNCQUFzQixtQkFBTyxDQUFDLDZFQUFtQjtBQUNqRCxXQUFXLG1CQUFPLENBQUMsOERBQWU7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLCtEQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLDRDQUE0QztBQUN2RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL1N5c3RlbXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIERlZmF1bHRQbHVnaW5zID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9EZWZhdWx0UGx1Z2lucycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdldFBoeXNpY3NQbHVnaW5zID0gcmVxdWlyZSgnLi9HZXRQaHlzaWNzUGx1Z2lucycpO1xyXG52YXIgR2V0U2NlbmVQbHVnaW5zID0gcmVxdWlyZSgnLi9HZXRTY2VuZVBsdWdpbnMnKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi91dGlscy9OT09QJyk7XHJcbnZhciBTZXR0aW5ncyA9IHJlcXVpcmUoJy4vU2V0dGluZ3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzLlxyXG4gKlxyXG4gKiBUaGlzIGNsYXNzIGlzIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBhIFNjZW5lIHVuZGVyIHRoZSBwcm9wZXJ0eSBgc3lzYC5cclxuICogSXQgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFsbCBvZiB0aGUgcGx1Z2lucyBhIFNjZW5lIGhhcyBydW5uaW5nLCBpbmNsdWRpbmcgdGhlIGRpc3BsYXkgbGlzdCwgYW5kXHJcbiAqIGhhbmRsaW5nIHRoZSB1cGRhdGUgc3RlcCBhbmQgcmVuZGVyZXIuIEl0IGFsc28gY29udGFpbnMgcmVmZXJlbmNlcyB0byBnbG9iYWwgc3lzdGVtcyBiZWxvbmdpbmcgdG8gR2FtZS5cclxuICpcclxuICogQGNsYXNzIFN5c3RlbXNcclxuICogQG1lbWJlcm9mIFBoYXNlci5TY2VuZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgU3lzdGVtcyBpbnN0YW5jZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NDb25maWcpfSBjb25maWcgLSBTY2VuZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxyXG4gKi9cclxudmFyIFN5c3RlbXMgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU3lzdGVtcyAoc2NlbmUsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCB0aGVzZSBTeXN0ZW1zIGJlbG9uZyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhpcyBHYW1lIGlzIHVzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUgeyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBQTFVHSU5fRkJJTlNUQU5UKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFRoZSBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbi5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2ZhY2Vib29rXHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW59XHJcbiAgICAgICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMuZmFjZWJvb2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgQ29uZmlndXJhdGlvbiBvYmplY3QsIGFzIHBhc3NlZCBpbiB3aGVuIGNyZWF0aW5nIHRoZSBTY2VuZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNjb25maWdcclxuICAgICAgICAgKiBAdHlwZSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuU2NlbmVzLlNldHRpbmdzQ29uZmlnKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIFNldHRpbmdzLiBUaGlzIGlzIHRoZSBwYXJzZWQgb3V0cHV0IGJhc2VkIG9uIHRoZSBTY2VuZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IFNldHRpbmdzLmNyZWF0ZShjb25maWcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGhhbmR5IHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgY2FudmFzIC8gY29udGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNjYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQgYmVpbmcgdXNlZCBieSB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0O1xyXG5cclxuICAgICAgICAvLyAgR2xvYmFsIFN5c3RlbXMgLSB0aGVzZSBhcmUgc2luZ2xlLWluc3RhbmNlIGdsb2JhbCBtYW5hZ2VycyB0aGF0IGJlbG9uZyB0byBHYW1lXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgQW5pbWF0aW9ucyBNYW5hZ2VyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEluIHRoZSBkZWZhdWx0IHNldC11cCB5b3UgY2FuIGFjY2VzcyB0aGlzIGZyb20gd2l0aGluIGEgU2NlbmUgdmlhIHRoZSBgdGhpcy5hbmltc2AgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjYW5pbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuaW1zO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIENhY2hlLiBUaGUgQ2FjaGUgc3RvcmVzIGFsbCBmaWxlcyBib3VnaHQgaW4gdG8gUGhhc2VyIHZpYVxyXG4gICAgICAgICAqIHRoZSBMb2FkZXIsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBpbWFnZXMuIEltYWdlcyBhcmUgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLmNhY2hlYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNjYWNoZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FjaGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgUGx1Z2lucyBNYW5hZ2VyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEluIHRoZSBkZWZhdWx0IHNldC11cCB5b3UgY2FuIGFjY2VzcyB0aGlzIGZyb20gd2l0aGluIGEgU2NlbmUgdmlhIHRoZSBgdGhpcy5wbHVnaW5zYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNwbHVnaW5zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5QbHVnaW5zLlBsdWdpbk1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5LiBUaGlzIGlzIGEgZ2FtZS13aWRlIGluc3RhbmNlIG9mIHRoZSBEYXRhIE1hbmFnZXIsIGFsbG93aW5nXHJcbiAgICAgICAgICogeW91IHRvIGV4Y2hhbmdlIGRhdGEgYmV0d2VlbiBTY2VuZXMgdmlhIGEgdW5pdmVyc2FsIGFuZCBzaGFyZWQgcG9pbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLnJlZ2lzdHJ5YCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNyZWdpc3RyeVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlZ2lzdHJ5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLnNjYWxlYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjYWxlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIFNvdW5kIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLnNvdW5kYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzb3VuZFxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlNvdW5kLk5vQXVkaW9Tb3VuZE1hbmFnZXJ8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXJ8UGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvdW5kO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJbiB0aGUgZGVmYXVsdCBzZXQtdXAgeW91IGNhbiBhY2Nlc3MgdGhpcyBmcm9tIHdpdGhpbiBhIFNjZW5lIHZpYSB0aGUgYHRoaXMudGV4dHVyZXNgIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3RleHR1cmVzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmVzO1xyXG5cclxuICAgICAgICAvLyAgQ29yZSBQbHVnaW5zIC0gdGhlc2UgYXJlIG5vbi1vcHRpb25hbCBTY2VuZSBwbHVnaW5zLCBuZWVkZWQgYnkgbG90cyBvZiB0aGUgb3RoZXIgc3lzdGVtc1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUncyBHYW1lIE9iamVjdCBGYWN0b3J5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIHF1aWNrbHkgYW5kIGVhc2lseSBjcmVhdGUgbmV3IEdhbWUgT2JqZWN0J3MuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLmFkZGAgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjYWRkXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFkZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVXNlIHRoaXMgdG8gbWFuaXB1bGF0ZSBhbmQgY3JlYXRlIENhbWVyYXMgZm9yIHRoaXMgc3BlY2lmaWMgU2NlbmUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLmNhbWVyYXNgIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2NhbWVyYXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgRGlzcGxheSBMaXN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIG9yZ2FuaXplIHRoZSBjaGlsZHJlbiBjb250YWluZWQgaW4gdGhlIGRpc3BsYXkgbGlzdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJbiB0aGUgZGVmYXVsdCBzZXQtdXAgeW91IGNhbiBhY2Nlc3MgdGhpcyBmcm9tIHdpdGhpbiBhIFNjZW5lIHZpYSB0aGUgYHRoaXMuY2hpbGRyZW5gIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUncyBFdmVudCBNYW5hZ2VyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIGxpc3RlbiBmb3IgU2NlbmUgc3BlY2lmaWMgZXZlbnRzLCBzdWNoIGFzIGBwYXVzZWAgYW5kIGBzaHV0ZG93bmAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLmV2ZW50c2AgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnRzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUncyBHYW1lIE9iamVjdCBDcmVhdG9yLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIHF1aWNrbHkgYW5kIGVhc2lseSBjcmVhdGUgbmV3IEdhbWUgT2JqZWN0J3MuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgdGhlXHJcbiAgICAgICAgICogR2FtZSBPYmplY3QgRmFjdG9yeSwgaXMgdGhhdCB0aGUgQ3JlYXRvciBqdXN0IGNyZWF0ZXMgYW5kIHJldHVybnMgR2FtZSBPYmplY3QgaW5zdGFuY2VzLCBpdFxyXG4gICAgICAgICAqIGRvZXNuJ3QgdGhlbiBhZGQgdGhlbSB0byB0aGUgRGlzcGxheSBMaXN0IG9yIFVwZGF0ZSBMaXN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEluIHRoZSBkZWZhdWx0IHNldC11cCB5b3UgY2FuIGFjY2VzcyB0aGlzIGZyb20gd2l0aGluIGEgU2NlbmUgdmlhIHRoZSBgdGhpcy5tYWtlYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNtYWtlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1ha2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBNYW5hZ2VyIFBsdWdpbi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBVc2UgdGhpcyB0byBtYW5pcHVsYXRlIGJvdGggdGhpcyBhbmQgb3RoZXIgU2NlbmUncyBpbiB5b3VyIGdhbWUsIGZvciBleGFtcGxlIHRvIGxhdW5jaCBhIHBhcmFsbGVsIFNjZW5lLFxyXG4gICAgICAgICAqIG9yIHBhdXNlIG9yIHJlc3VtZSBhIFNjZW5lLCBvciBzd2l0Y2ggZnJvbSB0aGlzIFNjZW5lIHRvIGFub3RoZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSW4gdGhlIGRlZmF1bHQgc2V0LXVwIHlvdSBjYW4gYWNjZXNzIHRoaXMgZnJvbSB3aXRoaW4gYSBTY2VuZSB2aWEgdGhlIGB0aGlzLnNjZW5lYCBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzY2VuZVBsdWdpblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlNjZW5lUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVQbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSdzIFVwZGF0ZSBMaXN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIG9yZ2FuaXplIHRoZSBjaGlsZHJlbiBjb250YWluZWQgaW4gdGhlIHVwZGF0ZSBsaXN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBVcGRhdGUgTGlzdCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgY2hpbGRyZW4gdGhhdCBuZWVkIHRoZWlyIGBwcmVVcGRhdGVgIG1ldGhvZHMgY2FsbGVkLFxyXG4gICAgICAgICAqIGluIG9yZGVyIHRvIHByb2Nlc3Mgc28gaW50ZXJuYWwgY29tcG9uZW50cywgc3VjaCBhcyBTcHJpdGVzIHdpdGggQW5pbWF0aW9ucy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJbiB0aGUgZGVmYXVsdCBzZXQtdXAgdGhlcmUgaXMgbm8gcmVmZXJlbmNlIHRvIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lIGl0c2VsZi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU3lzdGVtcyN1cGRhdGVMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIFVwZGF0ZSBmdW5jdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgc3RhcnRzIG91dCBhcyBOT09QIGR1cmluZyBpbml0LCBwcmVsb2FkIGFuZCBjcmVhdGUsIGFuZCBhdCB0aGUgZW5kIG9mIGNyZWF0ZVxyXG4gICAgICAgICAqIGl0IHN3YXBzIHRvIGJlIHdoYXRldmVyIHRoZSBTY2VuZS51cGRhdGUgZnVuY3Rpb24gaXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjc2NlbmVVcGRhdGVcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZVVwZGF0ZSA9IE5PT1A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgb25jZSBieSB0aGUgU2NlbmUgTWFuYWdlciB3aGVuIHRoZSBTY2VuZSBpcyBpbnN0YW50aWF0ZWQuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBhbGwgb2YgdGhlIFNjZW5lIHBsdWdpbnMgYW5kIHJlZmVyZW5jZXMuXHJcbiAgICAgKiBJdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2luaXRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNCT09UXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULklOSVQ7XHJcblxyXG4gICAgICAgIC8vICBUaGlzIHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IHRoZSBTY2VuZU1hbmFnZXIgd2l0aCB0aGUgYWN0dWFsIHVwZGF0ZSBmdW5jdGlvbiwgaWYgaXQgZXhpc3RzLCBvbmNlIGNyZWF0ZSBpcyBvdmVyLlxyXG4gICAgICAgIHRoaXMuc2NlbmVVcGRhdGUgPSBOT09QO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBnYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGdhbWUuY2FudmFzO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGdhbWUuY29udGV4dDtcclxuXHJcbiAgICAgICAgdmFyIHBsdWdpbk1hbmFnZXIgPSBnYW1lLnBsdWdpbnM7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHBsdWdpbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIHBsdWdpbk1hbmFnZXIuYWRkVG9TY2VuZSh0aGlzLCBEZWZhdWx0UGx1Z2lucy5HbG9iYWwsIFsgRGVmYXVsdFBsdWdpbnMuQ29yZVNjZW5lLCBHZXRTY2VuZVBsdWdpbnModGhpcyksIEdldFBoeXNpY3NQbHVnaW5zKHRoaXMpIF0pO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5CT09ULCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5pc0Jvb3RlZCA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IGEgcGx1Z2luLCBpdCB0ZWxscyB0aGUgU3lzdGVtIHRvIGluc3RhbGwgdGhlIHBsdWdpbiBsb2NhbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2luc3RhbGxcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBwbHVnaW4gLSBBbiBhcnJheSBvZiBwbHVnaW5zIHRvIGluc3RhbGwgaW50byB0aGlzIFNjZW5lLlxyXG4gICAgICovXHJcbiAgICBpbnN0YWxsOiBmdW5jdGlvbiAocGx1Z2luKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwbHVnaW4pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGx1Z2luID0gWyBwbHVnaW4gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5pbnN0YWxsTG9jYWwodGhpcywgcGx1Z2luKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHNpbmdsZSBnYW1lIHN0ZXAuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSBNYW5hZ2VyIGFzIGEgcmVzdWx0IG9mIGEgUmVxdWVzdCBBbmltYXRpb25cclxuICAgICAqIEZyYW1lIG9yIFNldCBUaW1lb3V0IGNhbGwgdG8gdGhlIG1haW4gR2FtZSBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzdGVwXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjZW5lcy5FdmVudHMjUFJFX1VQREFURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI19VUERBVEVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNQT1NUX1VQREFURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgdGltZSB2YWx1ZSBmcm9tIHRoZSBtb3N0IHJlY2VudCBHYW1lIHN0ZXAuIFR5cGljYWxseSBhIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciB2YWx1ZSwgb3IgRGF0ZS5ub3coKS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB2YWx1ZSBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBzbW9vdGhlZCB0byBhdm9pZCBkZWx0YSBzcGlrZXMgYnkgdGhlIFRpbWVTdGVwIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBzdGVwOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUFJFX1VQREFURSwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5VUERBVEUsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZVVwZGF0ZS5jYWxsKHRoaXMuc2NlbmUsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUE9TVF9VUERBVEUsIHRpbWUsIGRlbHRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgTWFuYWdlci5cclxuICAgICAqIEluc3RydWN0cyB0aGUgU2NlbmUgdG8gcmVuZGVyIGl0c2VsZiB2aWEgaXRzIENhbWVyYSBNYW5hZ2VyIHRvIHRoZSByZW5kZXJlciBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNyZW5kZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNSRU5ERVJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpfSByZW5kZXJlciAtIFRoZSByZW5kZXJlciB0aGF0IGludm9rZWQgdGhlIHJlbmRlciBjYWxsLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZGlzcGxheUxpc3QgPSB0aGlzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICBkaXNwbGF5TGlzdC5kZXB0aFNvcnQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzLnJlbmRlcihyZW5kZXJlciwgZGlzcGxheUxpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRU5ERVIsIHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JjZSBhIHNvcnQgb2YgdGhlIGRpc3BsYXkgbGlzdCBvbiB0aGUgbmV4dCByZW5kZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjcXVldWVEZXB0aFNvcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBxdWV1ZURlcHRoU29ydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0LnF1ZXVlRGVwdGhTb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1tZWRpYXRlbHkgc29ydHMgdGhlIGRpc3BsYXkgbGlzdCBpZiB0aGUgZmxhZyBpcyBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjZGVwdGhTb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVwdGhTb3J0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QuZGVwdGhTb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgdGhpcyBTY2VuZS5cclxuICAgICAqIEEgcGF1c2VkIFNjZW5lIHN0aWxsIHJlbmRlcnMsIGl0IGp1c3QgZG9lc24ndCBydW4gQU5ZIG9mIGl0cyB1cGRhdGUgaGFuZGxlcnMgb3Igc3lzdGVtcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNwYXVzZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI1BBVVNFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEEgZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiB0aGUgJ3BhdXNlJyBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IFRoaXMgU3lzdGVtcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hY3RpdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULlBBVVNFRDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5QQVVTRSwgdGhpcywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWUgdGhpcyBTY2VuZSBmcm9tIGEgcGF1c2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3Jlc3VtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI1JFU1VNRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEEgZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiB0aGUgJ3Jlc3VtZScgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfSBUaGlzIFN5c3RlbXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5hY3RpdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULlJVTk5JTkc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRVNVTUUsIHRoaXMsIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCB0aGlzIFNjZW5lIHRvIHNsZWVwLlxyXG4gICAgICpcclxuICAgICAqIEEgc2xlZXBpbmcgU2NlbmUgZG9lc24ndCBydW4gaXQncyB1cGRhdGUgc3RlcCBvciByZW5kZXIgYW55dGhpbmcsIGJ1dCBpdCBhbHNvIGlzbid0IHNodXQgZG93blxyXG4gICAgICogb3IgaGF2ZSBhbnkgb2YgaXRzIHN5c3RlbXMgb3IgY2hpbGRyZW4gcmVtb3ZlZCwgbWVhbmluZyBpdCBjYW4gYmUgcmUtYWN0aXZhdGVkIGF0IGFueSBwb2ludCBhbmRcclxuICAgICAqIHdpbGwgY2Fycnkgb24gZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4gSXQgYWxzbyBrZWVwcyBldmVyeXRoaW5nIGluIG1lbW9yeSBhbmQgZXZlbnRzIGFuZCBjYWxsYmFja3NcclxuICAgICAqIGZyb20gb3RoZXIgU2NlbmVzIG1heSBzdGlsbCBpbnZva2UgY2hhbmdlcyB3aXRoaW4gaXQsIHNvIGJlIGNhcmVmdWwgd2hhdCBpcyBsZWZ0IGFjdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzbGVlcFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI1NMRUVQXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEEgZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiB0aGUgJ3NsZWVwJyBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IFRoaXMgU3lzdGVtcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNsZWVwOiBmdW5jdGlvbiAoZGF0YSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULlNMRUVQSU5HO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5TTEVFUCwgdGhpcywgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdha2UtdXAgdGhpcyBTY2VuZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhc2xlZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjd2FrZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5TY2VuZXMuRXZlbnRzI1dBS0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gdGhlICd3YWtlJyBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IFRoaXMgU3lzdGVtcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHdha2U6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIHNldHRpbmdzLnN0YXR1cyA9IENPTlNULlJVTk5JTkc7XHJcblxyXG4gICAgICAgIHNldHRpbmdzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgc2V0dGluZ3MudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLldBS0UsIHRoaXMsIGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuaXNUcmFuc2l0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuVFJBTlNJVElPTl9XQUtFLCBzZXR0aW5ncy50cmFuc2l0aW9uRnJvbSwgc2V0dGluZ3MudHJhbnNpdGlvbkR1cmF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgU2NlbmUgc2xlZXBpbmc/XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjaXNTbGVlcGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoaXMgU2NlbmUgaXMgYXNsZWVwLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNTbGVlcGluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2V0dGluZ3Muc3RhdHVzID09PSBDT05TVC5TTEVFUElORyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhpcyBTY2VuZSBydW5uaW5nP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2lzQWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBTY2VuZSBpcyBydW5uaW5nLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNldHRpbmdzLnN0YXR1cyA9PT0gQ09OU1QuUlVOTklORyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhpcyBTY2VuZSBwYXVzZWQ/XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjaXNQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBTY2VuZSBpcyBwYXVzZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBpc1BhdXNlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2V0dGluZ3Muc3RhdHVzID09PSBDT05TVC5QQVVTRUQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgU2NlbmUgY3VycmVudGx5IHRyYW5zaXRpb25pbmcgb3V0IHRvLCBvciBpbiBmcm9tIGFub3RoZXIgU2NlbmU/XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjaXNUcmFuc2l0aW9uaW5nXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBTY2VuZSBpcyBjdXJyZW50bHkgdHJhbnNpdGlvbmluZywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzVHJhbnNpdGlvbmluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2V0dGluZ3MuaXNUcmFuc2l0aW9uIHx8IHRoaXMuc2NlbmVQbHVnaW4uX3RhcmdldCAhPT0gbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhpcyBTY2VuZSBjdXJyZW50bHkgdHJhbnNpdGlvbmluZyBvdXQgZnJvbSBpdHNlbGYgdG8gYW5vdGhlciBTY2VuZT9cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNpc1RyYW5zaXRpb25PdXRcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIFNjZW5lIGlzIGluIHRyYW5zaXRpb24gdG8gYW5vdGhlciBTY2VuZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzVHJhbnNpdGlvbk91dDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NlbmVQbHVnaW4uX3RhcmdldCAhPT0gbnVsbCAmJiB0aGlzLnNjZW5lUGx1Z2luLl9kdXJhdGlvbiA+IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgU2NlbmUgY3VycmVudGx5IHRyYW5zaXRpb25pbmcgaW4gZnJvbSBhbm90aGVyIFNjZW5lP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2lzVHJhbnNpdGlvbkluXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBTY2VuZSBpcyB0cmFuc2l0aW9uaW5nIGluIGZyb20gYW5vdGhlciBTY2VuZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzVHJhbnNpdGlvbkluOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zZXR0aW5ncy5pc1RyYW5zaXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgU2NlbmUgdmlzaWJsZSBhbmQgcmVuZGVyaW5nP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI2lzVmlzaWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoaXMgU2NlbmUgaXMgdmlzaWJsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzVmlzaWJsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52aXNpYmxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhpcyBTY2VuZS5cclxuICAgICAqIEFuIGludmlzaWJsZSBTY2VuZSB3aWxsIG5vdCByZW5kZXIsIGJ1dCB3aWxsIHN0aWxsIHByb2Nlc3MgdXBkYXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TY2VuZXMuU3lzdGVtcyNzZXRWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gYHRydWVgIHRvIHJlbmRlciB0aGlzIFNjZW5lLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IFRoaXMgU3lzdGVtcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnZpc2libGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhpcyBTY2VuZS5cclxuICAgICAqIFxyXG4gICAgICogQW4gYWN0aXZlIFNjZW5lIHdpbGwgcnVuIGl0cyBjb3JlIHVwZGF0ZSBsb29wLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3NldEFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIElmIGB0cnVlYCB0aGUgU2NlbmUgd2lsbCBiZSByZXN1bWVkLCBpZiBwcmV2aW91c2x5IHBhdXNlZC4gSWYgYGZhbHNlYCBpdCB3aWxsIGJlIHBhdXNlZC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gdGhlICdyZXN1bWUnIG9yICdwYXVzZScgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gVGhpcyBTeXN0ZW1zIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlOiBmdW5jdGlvbiAodmFsdWUsIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdW1lKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXVzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhpcyBTY2VuZSBydW5uaW5nIGFuZCByZW5kZXJpbmcuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmVNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNjZW5lcy5TeXN0ZW1zI3N0YXJ0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNjZW5lcy5FdmVudHMjU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNSRUFEWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBPcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IG1heSBoYXZlIGJlZW4gcGFzc2VkIHRvIHRoaXMgU2NlbmUgZnJvbSBhbm90aGVyLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGF0dXMgPSBDT05TVC5TVEFSVDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vICBGb3IgcGx1Z2lucyB0byBsaXN0ZW4gb3V0IGZvclxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLlNUQVJULCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIEZvciB1c2VyLWxhbmQgY29kZSB0byBsaXN0ZW4gb3V0IGZvclxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLlJFQURZLCB0aGlzLCBkYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHV0ZG93biB0aGlzIFNjZW5lIGFuZCBzZW5kIGEgc2h1dGRvd24gZXZlbnQgdG8gYWxsIG9mIGl0cyBzeXN0ZW1zLlxyXG4gICAgICogQSBTY2VuZSB0aGF0IGhhcyBiZWVuIHNodXRkb3duIHdpbGwgbm90IHJ1biBpdHMgdXBkYXRlIGxvb3Agb3IgcmVuZGVyLCBidXQgaXQgZG9lc1xyXG4gICAgICogbm90IGRlc3Ryb3kgYW55IG9mIGl0cyBwbHVnaW5zIG9yIHJlZmVyZW5jZXMuIEl0IGlzIHB1dCBpbnRvIGhpYmVybmF0aW9uIGZvciBsYXRlciB1c2UuXHJcbiAgICAgKiBJZiB5b3UgZG9uJ3QgZXZlciBwbGFuIHRvIHVzZSB0aGlzIFNjZW5lIGFnYWluLCB0aGVuIGl0IHNob3VsZCBiZSBkZXN0cm95ZWQgaW5zdGVhZFxyXG4gICAgICogdG8gZnJlZS11cCByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjc2h1dGRvd25cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNTSFVURE9XTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZGF0YV0gLSBBIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gdGhlICdzaHV0ZG93bicgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoZGF0YSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlRSQU5TSVRJT05fSU5JVCk7XHJcbiAgICAgICAgdGhpcy5ldmVudHMub2ZmKEV2ZW50cy5UUkFOU0lUSU9OX1NUQVJUKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlRSQU5TSVRJT05fQ09NUExFVEUpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLm9mZihFdmVudHMuVFJBTlNJVElPTl9PVVQpO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULlNIVVRET1dOO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5TSFVURE9XTiwgdGhpcywgZGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSB0aGlzIFNjZW5lIGFuZCBzZW5kIGEgZGVzdHJveSBldmVudCBhbGwgb2YgaXRzIHN5c3RlbXMuXHJcbiAgICAgKiBBIGRlc3Ryb3llZCBTY2VuZSBjYW5ub3QgYmUgcmVzdGFydGVkLlxyXG4gICAgICogWW91IHNob3VsZCBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkIHVzZSBgU2NlbmVNYW5hZ2VyLnJlbW92ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU2NlbmVzLlN5c3RlbXMjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU2NlbmVzLkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnN0YXR1cyA9IENPTlNULkRFU1RST1lFRDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuREVTVFJPWSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB2YXIgcHJvcHMgPSBbICdzY2VuZScsICdnYW1lJywgJ2FuaW1zJywgJ2NhY2hlJywgJ3BsdWdpbnMnLCAncmVnaXN0cnknLCAnc291bmQnLCAndGV4dHVyZXMnLCAnYWRkJywgJ2NhbWVyYScsICdkaXNwbGF5TGlzdCcsICdldmVudHMnLCAnbWFrZScsICdzY2VuZVBsdWdpbicsICd1cGRhdGVMaXN0JyBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpc1twcm9wc1tpXV0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTeXN0ZW1zO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/Systems.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/const.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/scene/const.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Scene consts.\r\n * \r\n * @ignore\r\n */\r\n\r\nvar CONST = {\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.PENDING\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PENDING: 0,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.INIT\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    INIT: 1,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.START\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    START: 2,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.LOADING\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOADING: 3,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.CREATING\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CREATING: 4,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.RUNNING\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    RUNNING: 5,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.PAUSED\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PAUSED: 6,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.SLEEPING\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SLEEPING: 7,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.SHUTDOWN\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    SHUTDOWN: 8,\r\n\r\n    /**\r\n     * Scene state.\r\n     * \r\n     * @name Phaser.Scenes.DESTROYED\r\n     * @readonly\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    DESTROYED: 9\r\n\r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9jb25zdC5qcz9kMGZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTY2VuZSBjb25zdHMuXHJcbiAqIFxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuUEVORElOR1xyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQRU5ESU5HOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuSU5JVFxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBJTklUOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuU1RBUlRcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU1RBUlQ6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2VuZSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5MT0FESU5HXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURJTkc6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2VuZSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5DUkVBVElOR1xyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDUkVBVElORzogNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlJVTk5JTkdcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUlVOTklORzogNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlBBVVNFRFxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQVVTRUQ6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2VuZSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNjZW5lcy5TTEVFUElOR1xyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTTEVFUElORzogNyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU2NlbmVzLlNIVVRET1dOXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNIVVRET1dOOiA4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5TY2VuZXMuREVTVFJPWUVEXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERFU1RST1lFRDogOVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/BOOT_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/BOOT_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Boot Event.\r\n * \r\n * This event is dispatched by a Scene during the Scene Systems boot process. Primarily used by Scene Plugins.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('boot', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#BOOT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvQk9PVF9FVkVOVC5qcz8zYTE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvQk9PVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBTeXN0ZW1zIEJvb3QgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIFNjZW5lIFN5c3RlbXMgYm9vdCBwcm9jZXNzLiBQcmltYXJpbHkgdXNlZCBieSBTY2VuZSBQbHVnaW5zLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZyBgdGhpcy5zY2VuZS5ldmVudHMub24oJ2Jvb3QnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogQGV2ZW50IFBoYXNlci5TY2VuZXMuRXZlbnRzI0JPT1RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3Mgb2YgdGhlIFNjZW5lIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYm9vdCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/BOOT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/CREATE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/CREATE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Create Event.\r\n * \r\n * This event is dispatched by a Scene after it has been created by the Scene Manager.\r\n * \r\n * If a Scene has a `create` method then this event is emitted _after_ that has run.\r\n * \r\n * If there is a transition, this event will be fired after the `TRANSITION_START` event.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('create', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#CREATE\r\n * @since 3.17.0\r\n * \r\n * @param {Phaser.Scene} scene - A reference to the Scene that emitted this event.\r\n */\r\nmodule.exports = 'create';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvQ1JFQVRFX0VWRU5ULmpzPzkxNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9DUkVBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgQ3JlYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU2NlbmUgYWZ0ZXIgaXQgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgU2NlbmUgTWFuYWdlci5cclxuICogXHJcbiAqIElmIGEgU2NlbmUgaGFzIGEgYGNyZWF0ZWAgbWV0aG9kIHRoZW4gdGhpcyBldmVudCBpcyBlbWl0dGVkIF9hZnRlcl8gdGhhdCBoYXMgcnVuLlxyXG4gKiBcclxuICogSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uLCB0aGlzIGV2ZW50IHdpbGwgYmUgZmlyZWQgYWZ0ZXIgdGhlIGBUUkFOU0lUSU9OX1NUQVJUYCBldmVudC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCdjcmVhdGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogQGV2ZW50IFBoYXNlci5TY2VuZXMuRXZlbnRzI0NSRUFURVxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjcmVhdGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/CREATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/DESTROY_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/DESTROY_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Destroy Event.\r\n * \r\n * This event is dispatched by a Scene during the Scene Systems destroy process.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('destroy', listener)`.\r\n * \r\n * You should destroy any resources that may be in use by your Scene in this event handler.\r\n * \r\n * @event Phaser.Scenes.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz83MmZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL0RFU1RST1lfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBEZXN0cm95IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU2NlbmUgZHVyaW5nIHRoZSBTY2VuZSBTeXN0ZW1zIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCdkZXN0cm95JywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgZGVzdHJveSBhbnkgcmVzb3VyY2VzIHRoYXQgbWF5IGJlIGluIHVzZSBieSB5b3VyIFNjZW5lIGluIHRoaXMgZXZlbnQgaGFuZGxlci5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzIG9mIHRoZSBTY2VuZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Rlc3Ryb3knO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/PAUSE_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/PAUSE_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Pause Event.\r\n * \r\n * This event is dispatched by a Scene when it is paused, either directly via the `pause` method, or as an\r\n * action from another Scene.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('pause', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#PAUSE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was paused.\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUEFVU0VfRVZFTlQuanM/Y2IzZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUEFVU0VfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBQYXVzZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNjZW5lIHdoZW4gaXQgaXMgcGF1c2VkLCBlaXRoZXIgZGlyZWN0bHkgdmlhIHRoZSBgcGF1c2VgIG1ldGhvZCwgb3IgYXMgYW5cclxuICogYWN0aW9uIGZyb20gYW5vdGhlciBTY2VuZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCdwYXVzZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjUEFVU0VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3Mgb2YgdGhlIFNjZW5lIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge2FueX0gW2RhdGFdIC0gQW4gb3B0aW9uYWwgZGF0YSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgU2NlbmUgd2hlbiBpdCB3YXMgcGF1c2VkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncGF1c2UnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/POST_UPDATE_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/POST_UPDATE_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Post Update Event.\r\n * \r\n * This event is dispatched by a Scene during the main game loop step.\r\n * \r\n * The event flow for a single step of a Scene is as follows:\r\n * \r\n * 1. [PRE_UPDATE]{@linkcode Phaser.Scenes.Events#event:PRE_UPDATE}\r\n * 2. [UPDATE]{@linkcode Phaser.Scenes.Events#event:UPDATE}\r\n * 3. The `Scene.update` method is called, if it exists\r\n * 4. [POST_UPDATE]{@linkcode Phaser.Scenes.Events#event:POST_UPDATE}\r\n * 5. [RENDER]{@linkcode Phaser.Scenes.Events#event:RENDER}\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('postupdate', listener)`.\r\n * \r\n * A Scene will only run its step if it is active.\r\n * \r\n * @event Phaser.Scenes.Events#POST_UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'postupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUE9TVF9VUERBVEVfRVZFTlQuanM/ZWQ4YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsZUFBZTtBQUNmO0FBQ0Esb0JBQW9CO0FBQ3BCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL1BPU1RfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjZW5lIFN5c3RlbXMgUG9zdCBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIG1haW4gZ2FtZSBsb29wIHN0ZXAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgZmxvdyBmb3IgYSBzaW5nbGUgc3RlcCBvZiBhIFNjZW5lIGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbUFJFX1VQREFURV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlBSRV9VUERBVEV9XHJcbiAqIDIuIFtVUERBVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpVUERBVEV9XHJcbiAqIDMuIFRoZSBgU2NlbmUudXBkYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBpZiBpdCBleGlzdHNcclxuICogNC4gW1BPU1RfVVBEQVRFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6UE9TVF9VUERBVEV9XHJcbiAqIDUuIFtSRU5ERVJde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpSRU5ERVJ9XHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigncG9zdHVwZGF0ZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFNjZW5lIHdpbGwgb25seSBydW4gaXRzIHN0ZXAgaWYgaXQgaXMgYWN0aXZlLlxyXG4gKiBcclxuICogQGV2ZW50IFBoYXNlci5TY2VuZXMuRXZlbnRzI1BPU1RfVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzIG9mIHRoZSBTY2VuZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Bvc3R1cGRhdGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/POST_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/PRE_UPDATE_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/PRE_UPDATE_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Pre Update Event.\r\n * \r\n * This event is dispatched by a Scene during the main game loop step.\r\n * \r\n * The event flow for a single step of a Scene is as follows:\r\n * \r\n * 1. [PRE_UPDATE]{@linkcode Phaser.Scenes.Events#event:PRE_UPDATE}\r\n * 2. [UPDATE]{@linkcode Phaser.Scenes.Events#event:UPDATE}\r\n * 3. The `Scene.update` method is called, if it exists\r\n * 4. [POST_UPDATE]{@linkcode Phaser.Scenes.Events#event:POST_UPDATE}\r\n * 5. [RENDER]{@linkcode Phaser.Scenes.Events#event:RENDER}\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('preupdate', listener)`.\r\n * \r\n * A Scene will only run its step if it is active.\r\n * \r\n * @event Phaser.Scenes.Events#PRE_UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'preupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUFJFX1VQREFURV9FVkVOVC5qcz8yNGM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixlQUFlO0FBQ2Y7QUFDQSxvQkFBb0I7QUFDcEIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUFJFX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBTeXN0ZW1zIFByZSBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIG1haW4gZ2FtZSBsb29wIHN0ZXAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgZmxvdyBmb3IgYSBzaW5nbGUgc3RlcCBvZiBhIFNjZW5lIGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbUFJFX1VQREFURV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlBSRV9VUERBVEV9XHJcbiAqIDIuIFtVUERBVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpVUERBVEV9XHJcbiAqIDMuIFRoZSBgU2NlbmUudXBkYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBpZiBpdCBleGlzdHNcclxuICogNC4gW1BPU1RfVVBEQVRFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6UE9TVF9VUERBVEV9XHJcbiAqIDUuIFtSRU5ERVJde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpSRU5ERVJ9XHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigncHJldXBkYXRlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEEgU2NlbmUgd2lsbCBvbmx5IHJ1biBpdHMgc3RlcCBpZiBpdCBpcyBhY3RpdmUuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjUFJFX1VQREFURVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfSBzeXMgLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgU3lzdGVtcyBjbGFzcyBvZiB0aGUgU2NlbmUgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwcmV1cGRhdGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/PRE_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/READY_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/READY_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Ready Event.\r\n * \r\n * This event is dispatched by a Scene during the Scene Systems start process.\r\n * By this point in the process the Scene is now fully active and rendering.\r\n * This event is meant for your game code to use, as all plugins have responded to the earlier 'start' event.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('ready', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#READY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was started.\r\n */\r\nmodule.exports = 'ready';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUkVBRFlfRVZFTlQuanM/ZTdlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxJQUFJO0FBQ2Y7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9SRUFEWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBTeXN0ZW1zIFJlYWR5IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU2NlbmUgZHVyaW5nIHRoZSBTY2VuZSBTeXN0ZW1zIHN0YXJ0IHByb2Nlc3MuXHJcbiAqIEJ5IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MgdGhlIFNjZW5lIGlzIG5vdyBmdWxseSBhY3RpdmUgYW5kIHJlbmRlcmluZy5cclxuICogVGhpcyBldmVudCBpcyBtZWFudCBmb3IgeW91ciBnYW1lIGNvZGUgdG8gdXNlLCBhcyBhbGwgcGx1Z2lucyBoYXZlIHJlc3BvbmRlZCB0byB0aGUgZWFybGllciAnc3RhcnQnIGV2ZW50LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZyBgdGhpcy5zY2VuZS5ldmVudHMub24oJ3JlYWR5JywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNSRUFEWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfSBzeXMgLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgU3lzdGVtcyBjbGFzcyBvZiB0aGUgU2NlbmUgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7YW55fSBbZGF0YV0gLSBBbiBvcHRpb25hbCBkYXRhIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBTY2VuZSB3aGVuIGl0IHdhcyBzdGFydGVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVhZHknO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/READY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/RENDER_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/RENDER_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Render Event.\r\n * \r\n * This event is dispatched by a Scene during the main game loop step.\r\n * \r\n * The event flow for a single step of a Scene is as follows:\r\n * \r\n * 1. [PRE_UPDATE]{@linkcode Phaser.Scenes.Events#event:PRE_UPDATE}\r\n * 2. [UPDATE]{@linkcode Phaser.Scenes.Events#event:UPDATE}\r\n * 3. The `Scene.update` method is called, if it exists\r\n * 4. [POST_UPDATE]{@linkcode Phaser.Scenes.Events#event:POST_UPDATE}\r\n * 5. [RENDER]{@linkcode Phaser.Scenes.Events#event:RENDER}\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('render', listener)`.\r\n * \r\n * A Scene will only render if it is visible and active.\r\n * By the time this event is dispatched, the Scene will have already been rendered.\r\n * \r\n * @event Phaser.Scenes.Events#RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The renderer that rendered the Scene.\r\n */\r\nmodule.exports = 'render';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUkVOREVSX0VWRU5ULmpzPzAxNjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLGVBQWU7QUFDZjtBQUNBLG9CQUFvQjtBQUNwQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBNEU7QUFDdkY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9SRU5ERVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBSZW5kZXIgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIG1haW4gZ2FtZSBsb29wIHN0ZXAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgZmxvdyBmb3IgYSBzaW5nbGUgc3RlcCBvZiBhIFNjZW5lIGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbUFJFX1VQREFURV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlBSRV9VUERBVEV9XHJcbiAqIDIuIFtVUERBVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpVUERBVEV9XHJcbiAqIDMuIFRoZSBgU2NlbmUudXBkYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBpZiBpdCBleGlzdHNcclxuICogNC4gW1BPU1RfVVBEQVRFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6UE9TVF9VUERBVEV9XHJcbiAqIDUuIFtSRU5ERVJde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpSRU5ERVJ9XHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigncmVuZGVyJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEEgU2NlbmUgd2lsbCBvbmx5IHJlbmRlciBpZiBpdCBpcyB2aXNpYmxlIGFuZCBhY3RpdmUuXHJcbiAqIEJ5IHRoZSB0aW1lIHRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCwgdGhlIFNjZW5lIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gcmVuZGVyZWQuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjUkVOREVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIHJlbmRlcmVyIHRoYXQgcmVuZGVyZWQgdGhlIFNjZW5lLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVuZGVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/RENDER_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/RESUME_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/RESUME_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Resume Event.\r\n * \r\n * This event is dispatched by a Scene when it is resumed from a paused state, either directly via the `resume` method,\r\n * or as an action from another Scene.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('resume', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#RESUME\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was resumed.\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvUkVTVU1FX0VWRU5ULmpzPzMyOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLElBQUk7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL1JFU1VNRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBTeXN0ZW1zIFJlc3VtZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNjZW5lIHdoZW4gaXQgaXMgcmVzdW1lZCBmcm9tIGEgcGF1c2VkIHN0YXRlLCBlaXRoZXIgZGlyZWN0bHkgdmlhIHRoZSBgcmVzdW1lYCBtZXRob2QsXHJcbiAqIG9yIGFzIGFuIGFjdGlvbiBmcm9tIGFub3RoZXIgU2NlbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigncmVzdW1lJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNSRVNVTUVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3Mgb2YgdGhlIFNjZW5lIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge2FueX0gW2RhdGFdIC0gQW4gb3B0aW9uYWwgZGF0YSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgU2NlbmUgd2hlbiBpdCB3YXMgcmVzdW1lZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/SHUTDOWN_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/SHUTDOWN_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Shutdown Event.\r\n * \r\n * This event is dispatched by a Scene during the Scene Systems shutdown process.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('shutdown', listener)`.\r\n * \r\n * You should free-up any resources that may be in use by your Scene in this event handler, on the understanding\r\n * that the Scene may, at any time, become active again. A shutdown Scene is not 'destroyed', it's simply not\r\n * currently active. Use the [DESTROY]{@linkcode Phaser.Scenes.Events#event:DESTROY} event to completely clear resources.\r\n * \r\n * @event Phaser.Scenes.Events#SHUTDOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was shutdown.\r\n */\r\nmodule.exports = 'shutdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvU0hVVERPV05fRVZFTlQuanM/ZmNlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDZDQUE2QztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvU0hVVERPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBTaHV0ZG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNjZW5lIGR1cmluZyB0aGUgU2NlbmUgU3lzdGVtcyBzaHV0ZG93biBwcm9jZXNzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZyBgdGhpcy5zY2VuZS5ldmVudHMub24oJ3NodXRkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgZnJlZS11cCBhbnkgcmVzb3VyY2VzIHRoYXQgbWF5IGJlIGluIHVzZSBieSB5b3VyIFNjZW5lIGluIHRoaXMgZXZlbnQgaGFuZGxlciwgb24gdGhlIHVuZGVyc3RhbmRpbmdcclxuICogdGhhdCB0aGUgU2NlbmUgbWF5LCBhdCBhbnkgdGltZSwgYmVjb21lIGFjdGl2ZSBhZ2Fpbi4gQSBzaHV0ZG93biBTY2VuZSBpcyBub3QgJ2Rlc3Ryb3llZCcsIGl0J3Mgc2ltcGx5IG5vdFxyXG4gKiBjdXJyZW50bHkgYWN0aXZlLiBVc2UgdGhlIFtERVNUUk9ZXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6REVTVFJPWX0gZXZlbnQgdG8gY29tcGxldGVseSBjbGVhciByZXNvdXJjZXMuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjU0hVVERPV05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3Mgb2YgdGhlIFNjZW5lIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge2FueX0gW2RhdGFdIC0gQW4gb3B0aW9uYWwgZGF0YSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgU2NlbmUgd2hlbiBpdCB3YXMgc2h1dGRvd24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzaHV0ZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/SHUTDOWN_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/SLEEP_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/SLEEP_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Sleep Event.\r\n * \r\n * This event is dispatched by a Scene when it is sent to sleep, either directly via the `sleep` method,\r\n * or as an action from another Scene.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('sleep', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#SLEEP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was sent to sleep.\r\n */\r\nmodule.exports = 'sleep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvU0xFRVBfRVZFTlQuanM/ZGRjZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvU0xFRVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBTbGVlcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNjZW5lIHdoZW4gaXQgaXMgc2VudCB0byBzbGVlcCwgZWl0aGVyIGRpcmVjdGx5IHZpYSB0aGUgYHNsZWVwYCBtZXRob2QsXHJcbiAqIG9yIGFzIGFuIGFjdGlvbiBmcm9tIGFub3RoZXIgU2NlbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbignc2xlZXAnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogQGV2ZW50IFBoYXNlci5TY2VuZXMuRXZlbnRzI1NMRUVQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzIG9mIHRoZSBTY2VuZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHthbnl9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIFNjZW5lIHdoZW4gaXQgd2FzIHNlbnQgdG8gc2xlZXAuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzbGVlcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/SLEEP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/START_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/START_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Start Event.\r\n * \r\n * This event is dispatched by a Scene during the Scene Systems start process. Primarily used by Scene Plugins.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('start', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvU1RBUlRfRVZFTlQuanM/MGE2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjZW5lIFN5c3RlbXMgU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIFNjZW5lIFN5c3RlbXMgc3RhcnQgcHJvY2Vzcy4gUHJpbWFyaWx5IHVzZWQgYnkgU2NlbmUgUGx1Z2lucy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCdzdGFydCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjU1RBUlRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZXMuU3lzdGVtc30gc3lzIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3Mgb2YgdGhlIFNjZW5lIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/TRANSITION_COMPLETE_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/TRANSITION_COMPLETE_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Transition Complete Event.\r\n * \r\n * This event is dispatched by the Target Scene of a transition.\r\n * \r\n * It happens when the transition process has completed. This occurs when the duration timer equals or exceeds the duration\r\n * of the transition.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('transitioncomplete', listener)`.\r\n * \r\n * The Scene Transition event flow is as follows:\r\n * \r\n * 1. [TRANSITION_OUT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_OUT} - the Scene that started the transition will emit this event.\r\n * 2. [TRANSITION_INIT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_INIT} - the Target Scene will emit this event if it has an `init` method.\r\n * 3. [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} - the Target Scene will emit this event after its `create` method is called, OR ...\r\n * 4. [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} - the Target Scene will emit this event if it was asleep and has been woken-up to be transitioned to.\r\n * 5. [TRANSITION_COMPLETE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_COMPLETE} - the Target Scene will emit this event when the transition finishes.\r\n * \r\n * @event Phaser.Scenes.Events#TRANSITION_COMPLETE\r\n * @since 3.5.0\r\n * \r\n * @param {Phaser.Scene} scene -The Scene on which the transitioned completed.\r\n */\r\nmodule.exports = 'transitioncomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9DT01QTEVURV9FVkVOVC5qcz83ZGVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0RBQW9EO0FBQzNFLHdCQUF3QixxREFBcUQ7QUFDN0UseUJBQXlCLHNEQUFzRDtBQUMvRSx3QkFBd0IscURBQXFEO0FBQzdFLDRCQUE0Qix5REFBeUQ7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9UUkFOU0lUSU9OX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjZW5lIFRyYW5zaXRpb24gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIFRhcmdldCBTY2VuZSBvZiBhIHRyYW5zaXRpb24uXHJcbiAqIFxyXG4gKiBJdCBoYXBwZW5zIHdoZW4gdGhlIHRyYW5zaXRpb24gcHJvY2VzcyBoYXMgY29tcGxldGVkLiBUaGlzIG9jY3VycyB3aGVuIHRoZSBkdXJhdGlvbiB0aW1lciBlcXVhbHMgb3IgZXhjZWVkcyB0aGUgZHVyYXRpb25cclxuICogb2YgdGhlIHRyYW5zaXRpb24uXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigndHJhbnNpdGlvbmNvbXBsZXRlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBTY2VuZSBUcmFuc2l0aW9uIGV2ZW50IGZsb3cgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtUUkFOU0lUSU9OX09VVF17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fT1VUfSAtIHRoZSBTY2VuZSB0aGF0IHN0YXJ0ZWQgdGhlIHRyYW5zaXRpb24gd2lsbCBlbWl0IHRoaXMgZXZlbnQuXHJcbiAqIDIuIFtUUkFOU0lUSU9OX0lOSVRde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX0lOSVR9IC0gdGhlIFRhcmdldCBTY2VuZSB3aWxsIGVtaXQgdGhpcyBldmVudCBpZiBpdCBoYXMgYW4gYGluaXRgIG1ldGhvZC5cclxuICogMy4gW1RSQU5TSVRJT05fU1RBUlRde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX1NUQVJUfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgYWZ0ZXIgaXRzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQsIE9SIC4uLlxyXG4gKiA0LiBbVFJBTlNJVElPTl9XQUtFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9XQUtFfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaWYgaXQgd2FzIGFzbGVlcCBhbmQgaGFzIGJlZW4gd29rZW4tdXAgdG8gYmUgdHJhbnNpdGlvbmVkIHRvLlxyXG4gKiA1LiBbVFJBTlNJVElPTl9DT01QTEVURV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fQ09NUExFVEV9IC0gdGhlIFRhcmdldCBTY2VuZSB3aWxsIGVtaXQgdGhpcyBldmVudCB3aGVuIHRoZSB0cmFuc2l0aW9uIGZpbmlzaGVzLlxyXG4gKiBcclxuICogQGV2ZW50IFBoYXNlci5TY2VuZXMuRXZlbnRzI1RSQU5TSVRJT05fQ09NUExFVEVcclxuICogQHNpbmNlIDMuNS4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLVRoZSBTY2VuZSBvbiB3aGljaCB0aGUgdHJhbnNpdGlvbmVkIGNvbXBsZXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3RyYW5zaXRpb25jb21wbGV0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/TRANSITION_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/TRANSITION_INIT_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/TRANSITION_INIT_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Transition Init Event.\r\n * \r\n * This event is dispatched by the Target Scene of a transition.\r\n * \r\n * It happens immediately after the `Scene.init` method is called. If the Scene does not have an `init` method,\r\n * this event is not dispatched.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('transitioninit', listener)`.\r\n * \r\n * The Scene Transition event flow is as follows:\r\n * \r\n * 1. [TRANSITION_OUT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_OUT} - the Scene that started the transition will emit this event.\r\n * 2. [TRANSITION_INIT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_INIT} - the Target Scene will emit this event if it has an `init` method.\r\n * 3. [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} - the Target Scene will emit this event after its `create` method is called, OR ...\r\n * 4. [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} - the Target Scene will emit this event if it was asleep and has been woken-up to be transitioned to.\r\n * 5. [TRANSITION_COMPLETE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_COMPLETE} - the Target Scene will emit this event when the transition finishes.\r\n * \r\n * @event Phaser.Scenes.Events#TRANSITION_INIT\r\n * @since 3.5.0\r\n * \r\n * @param {Phaser.Scene} from - A reference to the Scene that is being transitioned from.\r\n * @param {number} duration - The duration of the transition in ms.\r\n */\r\nmodule.exports = 'transitioninit';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9JTklUX0VWRU5ULmpzPzJiMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixvREFBb0Q7QUFDM0Usd0JBQXdCLHFEQUFxRDtBQUM3RSx5QkFBeUIsc0RBQXNEO0FBQy9FLHdCQUF3QixxREFBcUQ7QUFDN0UsNEJBQTRCLHlEQUF5RDtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9UUkFOU0lUSU9OX0lOSVRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgVHJhbnNpdGlvbiBJbml0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBUYXJnZXQgU2NlbmUgb2YgYSB0cmFuc2l0aW9uLlxyXG4gKiBcclxuICogSXQgaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYFNjZW5lLmluaXRgIG1ldGhvZCBpcyBjYWxsZWQuIElmIHRoZSBTY2VuZSBkb2VzIG5vdCBoYXZlIGFuIGBpbml0YCBtZXRob2QsXHJcbiAqIHRoaXMgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigndHJhbnNpdGlvbmluaXQnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogVGhlIFNjZW5lIFRyYW5zaXRpb24gZXZlbnQgZmxvdyBpcyBhcyBmb2xsb3dzOlxyXG4gKiBcclxuICogMS4gW1RSQU5TSVRJT05fT1VUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9PVVR9IC0gdGhlIFNjZW5lIHRoYXQgc3RhcnRlZCB0aGUgdHJhbnNpdGlvbiB3aWxsIGVtaXQgdGhpcyBldmVudC5cclxuICogMi4gW1RSQU5TSVRJT05fSU5JVF17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fSU5JVH0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGlmIGl0IGhhcyBhbiBgaW5pdGAgbWV0aG9kLlxyXG4gKiAzLiBbVFJBTlNJVElPTl9TVEFSVF17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fU1RBUlR9IC0gdGhlIFRhcmdldCBTY2VuZSB3aWxsIGVtaXQgdGhpcyBldmVudCBhZnRlciBpdHMgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCwgT1IgLi4uXHJcbiAqIDQuIFtUUkFOU0lUSU9OX1dBS0Vde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX1dBS0V9IC0gdGhlIFRhcmdldCBTY2VuZSB3aWxsIGVtaXQgdGhpcyBldmVudCBpZiBpdCB3YXMgYXNsZWVwIGFuZCBoYXMgYmVlbiB3b2tlbi11cCB0byBiZSB0cmFuc2l0aW9uZWQgdG8uXHJcbiAqIDUuIFtUUkFOU0lUSU9OX0NPTVBMRVRFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9DT01QTEVURX0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IHdoZW4gdGhlIHRyYW5zaXRpb24gZmluaXNoZXMuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjVFJBTlNJVElPTl9JTklUXHJcbiAqIEBzaW5jZSAzLjUuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IGZyb20gLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBpcyBiZWluZyB0cmFuc2l0aW9uZWQgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGluIG1zLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndHJhbnNpdGlvbmluaXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/TRANSITION_INIT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/TRANSITION_OUT_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/TRANSITION_OUT_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Transition Out Event.\r\n * \r\n * This event is dispatched by a Scene when it initiates a transition to another Scene.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('transitionout', listener)`.\r\n * \r\n * The Scene Transition event flow is as follows:\r\n * \r\n * 1. [TRANSITION_OUT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_OUT} - the Scene that started the transition will emit this event.\r\n * 2. [TRANSITION_INIT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_INIT} - the Target Scene will emit this event if it has an `init` method.\r\n * 3. [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} - the Target Scene will emit this event after its `create` method is called, OR ...\r\n * 4. [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} - the Target Scene will emit this event if it was asleep and has been woken-up to be transitioned to.\r\n * 5. [TRANSITION_COMPLETE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_COMPLETE} - the Target Scene will emit this event when the transition finishes.\r\n * \r\n * @event Phaser.Scenes.Events#TRANSITION_OUT\r\n * @since 3.5.0\r\n * \r\n * @param {Phaser.Scene} target - A reference to the Scene that is being transitioned to.\r\n * @param {number} duration - The duration of the transition in ms.\r\n */\r\nmodule.exports = 'transitionout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9PVVRfRVZFTlQuanM/Y2Q1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9EQUFvRDtBQUMzRSx3QkFBd0IscURBQXFEO0FBQzdFLHlCQUF5QixzREFBc0Q7QUFDL0Usd0JBQXdCLHFEQUFxRDtBQUM3RSw0QkFBNEIseURBQXlEO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL1RSQU5TSVRJT05fT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjZW5lIFRyYW5zaXRpb24gT3V0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU2NlbmUgd2hlbiBpdCBpbml0aWF0ZXMgYSB0cmFuc2l0aW9uIHRvIGFub3RoZXIgU2NlbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigndHJhbnNpdGlvbm91dCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgU2NlbmUgVHJhbnNpdGlvbiBldmVudCBmbG93IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbVFJBTlNJVElPTl9PVVRde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX09VVH0gLSB0aGUgU2NlbmUgdGhhdCBzdGFydGVkIHRoZSB0cmFuc2l0aW9uIHdpbGwgZW1pdCB0aGlzIGV2ZW50LlxyXG4gKiAyLiBbVFJBTlNJVElPTl9JTklUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9JTklUfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaWYgaXQgaGFzIGFuIGBpbml0YCBtZXRob2QuXHJcbiAqIDMuIFtUUkFOU0lUSU9OX1NUQVJUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9TVEFSVH0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGFmdGVyIGl0cyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBPUiAuLi5cclxuICogNC4gW1RSQU5TSVRJT05fV0FLRV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fV0FLRX0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGlmIGl0IHdhcyBhc2xlZXAgYW5kIGhhcyBiZWVuIHdva2VuLXVwIHRvIGJlIHRyYW5zaXRpb25lZCB0by5cclxuICogNS4gW1RSQU5TSVRJT05fQ09NUExFVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX0NPTVBMRVRFfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgd2hlbiB0aGUgdHJhbnNpdGlvbiBmaW5pc2hlcy5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX09VVFxyXG4gKiBAc2luY2UgMy41LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSB0YXJnZXQgLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBpcyBiZWluZyB0cmFuc2l0aW9uZWQgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBpbiBtcy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3RyYW5zaXRpb25vdXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/TRANSITION_OUT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/TRANSITION_START_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/TRANSITION_START_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Transition Start Event.\r\n * \r\n * This event is dispatched by the Target Scene of a transition, only if that Scene was not asleep.\r\n * \r\n * It happens immediately after the `Scene.create` method is called. If the Scene does not have a `create` method,\r\n * this event is dispatched anyway.\r\n * \r\n * If the Target Scene was sleeping then the [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} event is\r\n * dispatched instead of this event.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('transitionstart', listener)`.\r\n * \r\n * The Scene Transition event flow is as follows:\r\n * \r\n * 1. [TRANSITION_OUT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_OUT} - the Scene that started the transition will emit this event.\r\n * 2. [TRANSITION_INIT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_INIT} - the Target Scene will emit this event if it has an `init` method.\r\n * 3. [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} - the Target Scene will emit this event after its `create` method is called, OR ...\r\n * 4. [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} - the Target Scene will emit this event if it was asleep and has been woken-up to be transitioned to.\r\n * 5. [TRANSITION_COMPLETE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_COMPLETE} - the Target Scene will emit this event when the transition finishes.\r\n * \r\n * @event Phaser.Scenes.Events#TRANSITION_START\r\n * @since 3.5.0\r\n * \r\n * @param {Phaser.Scene} from - A reference to the Scene that is being transitioned from.\r\n * @param {number} duration - The duration of the transition in ms.\r\n */\r\nmodule.exports = 'transitionstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9TVEFSVF9FVkVOVC5qcz8xNTg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELHFEQUFxRDtBQUNwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0RBQW9EO0FBQzNFLHdCQUF3QixxREFBcUQ7QUFDN0UseUJBQXlCLHNEQUFzRDtBQUMvRSx3QkFBd0IscURBQXFEO0FBQzdFLDRCQUE0Qix5REFBeUQ7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9TVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBUcmFuc2l0aW9uIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBUYXJnZXQgU2NlbmUgb2YgYSB0cmFuc2l0aW9uLCBvbmx5IGlmIHRoYXQgU2NlbmUgd2FzIG5vdCBhc2xlZXAuXHJcbiAqIFxyXG4gKiBJdCBoYXBwZW5zIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBgU2NlbmUuY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkLiBJZiB0aGUgU2NlbmUgZG9lcyBub3QgaGF2ZSBhIGBjcmVhdGVgIG1ldGhvZCxcclxuICogdGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGFueXdheS5cclxuICogXHJcbiAqIElmIHRoZSBUYXJnZXQgU2NlbmUgd2FzIHNsZWVwaW5nIHRoZW4gdGhlIFtUUkFOU0lUSU9OX1dBS0Vde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX1dBS0V9IGV2ZW50IGlzXHJcbiAqIGRpc3BhdGNoZWQgaW5zdGVhZCBvZiB0aGlzIGV2ZW50LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZyBgdGhpcy5zY2VuZS5ldmVudHMub24oJ3RyYW5zaXRpb25zdGFydCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgU2NlbmUgVHJhbnNpdGlvbiBldmVudCBmbG93IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbVFJBTlNJVElPTl9PVVRde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX09VVH0gLSB0aGUgU2NlbmUgdGhhdCBzdGFydGVkIHRoZSB0cmFuc2l0aW9uIHdpbGwgZW1pdCB0aGlzIGV2ZW50LlxyXG4gKiAyLiBbVFJBTlNJVElPTl9JTklUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9JTklUfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaWYgaXQgaGFzIGFuIGBpbml0YCBtZXRob2QuXHJcbiAqIDMuIFtUUkFOU0lUSU9OX1NUQVJUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9TVEFSVH0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGFmdGVyIGl0cyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBPUiAuLi5cclxuICogNC4gW1RSQU5TSVRJT05fV0FLRV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fV0FLRX0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGlmIGl0IHdhcyBhc2xlZXAgYW5kIGhhcyBiZWVuIHdva2VuLXVwIHRvIGJlIHRyYW5zaXRpb25lZCB0by5cclxuICogNS4gW1RSQU5TSVRJT05fQ09NUExFVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX0NPTVBMRVRFfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgd2hlbiB0aGUgdHJhbnNpdGlvbiBmaW5pc2hlcy5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjUuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IGZyb20gLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBpcyBiZWluZyB0cmFuc2l0aW9uZWQgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGluIG1zLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndHJhbnNpdGlvbnN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/TRANSITION_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/TRANSITION_WAKE_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/TRANSITION_WAKE_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Transition Wake Event.\r\n * \r\n * This event is dispatched by the Target Scene of a transition, only if that Scene was asleep before\r\n * the transition began. If the Scene was not asleep the [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} event is dispatched instead.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('transitionwake', listener)`.\r\n * \r\n * The Scene Transition event flow is as follows:\r\n * \r\n * 1. [TRANSITION_OUT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_OUT} - the Scene that started the transition will emit this event.\r\n * 2. [TRANSITION_INIT]{@linkcode Phaser.Scenes.Events#event:TRANSITION_INIT} - the Target Scene will emit this event if it has an `init` method.\r\n * 3. [TRANSITION_START]{@linkcode Phaser.Scenes.Events#event:TRANSITION_START} - the Target Scene will emit this event after its `create` method is called, OR ...\r\n * 4. [TRANSITION_WAKE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_WAKE} - the Target Scene will emit this event if it was asleep and has been woken-up to be transitioned to.\r\n * 5. [TRANSITION_COMPLETE]{@linkcode Phaser.Scenes.Events#event:TRANSITION_COMPLETE} - the Target Scene will emit this event when the transition finishes.\r\n * \r\n * @event Phaser.Scenes.Events#TRANSITION_WAKE\r\n * @since 3.5.0\r\n * \r\n * @param {Phaser.Scene} from - A reference to the Scene that is being transitioned from.\r\n * @param {number} duration - The duration of the transition in ms.\r\n */\r\nmodule.exports = 'transitionwake';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVFJBTlNJVElPTl9XQUtFX0VWRU5ULmpzPzdjYzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFLHNEQUFzRDtBQUNsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9EQUFvRDtBQUMzRSx3QkFBd0IscURBQXFEO0FBQzdFLHlCQUF5QixzREFBc0Q7QUFDL0Usd0JBQXdCLHFEQUFxRDtBQUM3RSw0QkFBNEIseURBQXlEO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc2NlbmUvZXZlbnRzL1RSQU5TSVRJT05fV0FLRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTY2VuZSBUcmFuc2l0aW9uIFdha2UgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIFRhcmdldCBTY2VuZSBvZiBhIHRyYW5zaXRpb24sIG9ubHkgaWYgdGhhdCBTY2VuZSB3YXMgYXNsZWVwIGJlZm9yZVxyXG4gKiB0aGUgdHJhbnNpdGlvbiBiZWdhbi4gSWYgdGhlIFNjZW5lIHdhcyBub3QgYXNsZWVwIHRoZSBbVFJBTlNJVElPTl9TVEFSVF17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fU1RBUlR9IGV2ZW50IGlzIGRpc3BhdGNoZWQgaW5zdGVhZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCd0cmFuc2l0aW9ud2FrZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgU2NlbmUgVHJhbnNpdGlvbiBldmVudCBmbG93IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbVFJBTlNJVElPTl9PVVRde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX09VVH0gLSB0aGUgU2NlbmUgdGhhdCBzdGFydGVkIHRoZSB0cmFuc2l0aW9uIHdpbGwgZW1pdCB0aGlzIGV2ZW50LlxyXG4gKiAyLiBbVFJBTlNJVElPTl9JTklUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9JTklUfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaWYgaXQgaGFzIGFuIGBpbml0YCBtZXRob2QuXHJcbiAqIDMuIFtUUkFOU0lUSU9OX1NUQVJUXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6VFJBTlNJVElPTl9TVEFSVH0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGFmdGVyIGl0cyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBPUiAuLi5cclxuICogNC4gW1RSQU5TSVRJT05fV0FLRV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlRSQU5TSVRJT05fV0FLRX0gLSB0aGUgVGFyZ2V0IFNjZW5lIHdpbGwgZW1pdCB0aGlzIGV2ZW50IGlmIGl0IHdhcyBhc2xlZXAgYW5kIGhhcyBiZWVuIHdva2VuLXVwIHRvIGJlIHRyYW5zaXRpb25lZCB0by5cclxuICogNS4gW1RSQU5TSVRJT05fQ09NUExFVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpUUkFOU0lUSU9OX0NPTVBMRVRFfSAtIHRoZSBUYXJnZXQgU2NlbmUgd2lsbCBlbWl0IHRoaXMgZXZlbnQgd2hlbiB0aGUgdHJhbnNpdGlvbiBmaW5pc2hlcy5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNUUkFOU0lUSU9OX1dBS0VcclxuICogQHNpbmNlIDMuNS4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gZnJvbSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IGlzIGJlaW5nIHRyYW5zaXRpb25lZCBmcm9tLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24gaW4gbXMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICd0cmFuc2l0aW9ud2FrZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/TRANSITION_WAKE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/UPDATE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/UPDATE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Update Event.\r\n * \r\n * This event is dispatched by a Scene during the main game loop step.\r\n * \r\n * The event flow for a single step of a Scene is as follows:\r\n * \r\n * 1. [PRE_UPDATE]{@linkcode Phaser.Scenes.Events#event:PRE_UPDATE}\r\n * 2. [UPDATE]{@linkcode Phaser.Scenes.Events#event:UPDATE}\r\n * 3. The `Scene.update` method is called, if it exists\r\n * 4. [POST_UPDATE]{@linkcode Phaser.Scenes.Events#event:POST_UPDATE}\r\n * 5. [RENDER]{@linkcode Phaser.Scenes.Events#event:RENDER}\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('update', listener)`.\r\n * \r\n * A Scene will only run its step if it is active.\r\n * \r\n * @event Phaser.Scenes.Events#UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvVVBEQVRFX0VWRU5ULmpzP2E0NTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLGVBQWU7QUFDZjtBQUNBLG9CQUFvQjtBQUNwQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9VUERBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU2NlbmUgU3lzdGVtcyBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTY2VuZSBkdXJpbmcgdGhlIG1haW4gZ2FtZSBsb29wIHN0ZXAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgZmxvdyBmb3IgYSBzaW5nbGUgc3RlcCBvZiBhIFNjZW5lIGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbUFJFX1VQREFURV17QGxpbmtjb2RlIFBoYXNlci5TY2VuZXMuRXZlbnRzI2V2ZW50OlBSRV9VUERBVEV9XHJcbiAqIDIuIFtVUERBVEVde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpVUERBVEV9XHJcbiAqIDMuIFRoZSBgU2NlbmUudXBkYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBpZiBpdCBleGlzdHNcclxuICogNC4gW1BPU1RfVVBEQVRFXXtAbGlua2NvZGUgUGhhc2VyLlNjZW5lcy5FdmVudHMjZXZlbnQ6UE9TVF9VUERBVEV9XHJcbiAqIDUuIFtSRU5ERVJde0BsaW5rY29kZSBQaGFzZXIuU2NlbmVzLkV2ZW50cyNldmVudDpSRU5ERVJ9XHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nIGB0aGlzLnNjZW5lLmV2ZW50cy5vbigndXBkYXRlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEEgU2NlbmUgd2lsbCBvbmx5IHJ1biBpdHMgc3RlcCBpZiBpdCBpcyBhY3RpdmUuXHJcbiAqIFxyXG4gKiBAZXZlbnQgUGhhc2VyLlNjZW5lcy5FdmVudHMjVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzIG9mIHRoZSBTY2VuZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/WAKE_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/WAKE_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Scene Systems Wake Event.\r\n * \r\n * This event is dispatched by a Scene when it is woken from sleep, either directly via the `wake` method,\r\n * or as an action from another Scene.\r\n * \r\n * Listen to it from a Scene using `this.scene.events.on('wake', listener)`.\r\n * \r\n * @event Phaser.Scenes.Events#WAKE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scenes.Systems} sys - A reference to the Scene Systems class of the Scene that emitted this event.\r\n * @param {any} [data] - An optional data object that was passed to this Scene when it was woken up.\r\n */\r\nmodule.exports = 'wake';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvV0FLRV9FVkVOVC5qcz82MjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxJQUFJO0FBQ2Y7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2V2ZW50cy9XQUtFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNjZW5lIFN5c3RlbXMgV2FrZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNjZW5lIHdoZW4gaXQgaXMgd29rZW4gZnJvbSBzbGVlcCwgZWl0aGVyIGRpcmVjdGx5IHZpYSB0aGUgYHdha2VgIG1ldGhvZCxcclxuICogb3IgYXMgYW4gYWN0aW9uIGZyb20gYW5vdGhlciBTY2VuZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmcgYHRoaXMuc2NlbmUuZXZlbnRzLm9uKCd3YWtlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEBldmVudCBQaGFzZXIuU2NlbmVzLkV2ZW50cyNXQUtFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9IHN5cyAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIGNsYXNzIG9mIHRoZSBTY2VuZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHthbnl9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIFNjZW5lIHdoZW4gaXQgd2FzIHdva2VuIHVwLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnd2FrZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/WAKE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/events/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/scene/events/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Scenes.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    BOOT: __webpack_require__(/*! ./BOOT_EVENT */ \"./node_modules/phaser/src/scene/events/BOOT_EVENT.js\"),\r\n    CREATE: __webpack_require__(/*! ./CREATE_EVENT */ \"./node_modules/phaser/src/scene/events/CREATE_EVENT.js\"),\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/scene/events/DESTROY_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/scene/events/PAUSE_EVENT.js\"),\r\n    POST_UPDATE: __webpack_require__(/*! ./POST_UPDATE_EVENT */ \"./node_modules/phaser/src/scene/events/POST_UPDATE_EVENT.js\"),\r\n    PRE_UPDATE: __webpack_require__(/*! ./PRE_UPDATE_EVENT */ \"./node_modules/phaser/src/scene/events/PRE_UPDATE_EVENT.js\"),\r\n    READY: __webpack_require__(/*! ./READY_EVENT */ \"./node_modules/phaser/src/scene/events/READY_EVENT.js\"),\r\n    RENDER: __webpack_require__(/*! ./RENDER_EVENT */ \"./node_modules/phaser/src/scene/events/RENDER_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/scene/events/RESUME_EVENT.js\"),\r\n    SHUTDOWN: __webpack_require__(/*! ./SHUTDOWN_EVENT */ \"./node_modules/phaser/src/scene/events/SHUTDOWN_EVENT.js\"),\r\n    SLEEP: __webpack_require__(/*! ./SLEEP_EVENT */ \"./node_modules/phaser/src/scene/events/SLEEP_EVENT.js\"),\r\n    START: __webpack_require__(/*! ./START_EVENT */ \"./node_modules/phaser/src/scene/events/START_EVENT.js\"),\r\n    TRANSITION_COMPLETE: __webpack_require__(/*! ./TRANSITION_COMPLETE_EVENT */ \"./node_modules/phaser/src/scene/events/TRANSITION_COMPLETE_EVENT.js\"),\r\n    TRANSITION_INIT: __webpack_require__(/*! ./TRANSITION_INIT_EVENT */ \"./node_modules/phaser/src/scene/events/TRANSITION_INIT_EVENT.js\"),\r\n    TRANSITION_OUT: __webpack_require__(/*! ./TRANSITION_OUT_EVENT */ \"./node_modules/phaser/src/scene/events/TRANSITION_OUT_EVENT.js\"),\r\n    TRANSITION_START: __webpack_require__(/*! ./TRANSITION_START_EVENT */ \"./node_modules/phaser/src/scene/events/TRANSITION_START_EVENT.js\"),\r\n    TRANSITION_WAKE: __webpack_require__(/*! ./TRANSITION_WAKE_EVENT */ \"./node_modules/phaser/src/scene/events/TRANSITION_WAKE_EVENT.js\"),\r\n    UPDATE: __webpack_require__(/*! ./UPDATE_EVENT */ \"./node_modules/phaser/src/scene/events/UPDATE_EVENT.js\"),\r\n    WAKE: __webpack_require__(/*! ./WAKE_EVENT */ \"./node_modules/phaser/src/scene/events/WAKE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvaW5kZXguanM/M2RiOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxZQUFZLG1CQUFPLENBQUMsOEVBQWdCO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxnRkFBaUI7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLDRFQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLHdGQUFxQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsV0FBVyxtQkFBTyxDQUFDLDRFQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyw4RUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDhFQUFnQjtBQUNwQyxjQUFjLG1CQUFPLENBQUMsa0ZBQWtCO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQyw0RUFBZTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsNEVBQWU7QUFDbEMseUJBQXlCLG1CQUFPLENBQUMsd0dBQTZCO0FBQzlELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBd0I7QUFDcEQsc0JBQXNCLG1CQUFPLENBQUMsa0dBQTBCO0FBQ3hELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsOEVBQWdCO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQywwRUFBYzs7QUFFaEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9ldmVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5TY2VuZXMuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQk9PVDogcmVxdWlyZSgnLi9CT09UX0VWRU5UJyksXHJcbiAgICBDUkVBVEU6IHJlcXVpcmUoJy4vQ1JFQVRFX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIFBBVVNFOiByZXF1aXJlKCcuL1BBVVNFX0VWRU5UJyksXHJcbiAgICBQT1NUX1VQREFURTogcmVxdWlyZSgnLi9QT1NUX1VQREFURV9FVkVOVCcpLFxyXG4gICAgUFJFX1VQREFURTogcmVxdWlyZSgnLi9QUkVfVVBEQVRFX0VWRU5UJyksXHJcbiAgICBSRUFEWTogcmVxdWlyZSgnLi9SRUFEWV9FVkVOVCcpLFxyXG4gICAgUkVOREVSOiByZXF1aXJlKCcuL1JFTkRFUl9FVkVOVCcpLFxyXG4gICAgUkVTVU1FOiByZXF1aXJlKCcuL1JFU1VNRV9FVkVOVCcpLFxyXG4gICAgU0hVVERPV046IHJlcXVpcmUoJy4vU0hVVERPV05fRVZFTlQnKSxcclxuICAgIFNMRUVQOiByZXF1aXJlKCcuL1NMRUVQX0VWRU5UJyksXHJcbiAgICBTVEFSVDogcmVxdWlyZSgnLi9TVEFSVF9FVkVOVCcpLFxyXG4gICAgVFJBTlNJVElPTl9DT01QTEVURTogcmVxdWlyZSgnLi9UUkFOU0lUSU9OX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBUUkFOU0lUSU9OX0lOSVQ6IHJlcXVpcmUoJy4vVFJBTlNJVElPTl9JTklUX0VWRU5UJyksXHJcbiAgICBUUkFOU0lUSU9OX09VVDogcmVxdWlyZSgnLi9UUkFOU0lUSU9OX09VVF9FVkVOVCcpLFxyXG4gICAgVFJBTlNJVElPTl9TVEFSVDogcmVxdWlyZSgnLi9UUkFOU0lUSU9OX1NUQVJUX0VWRU5UJyksXHJcbiAgICBUUkFOU0lUSU9OX1dBS0U6IHJlcXVpcmUoJy4vVFJBTlNJVElPTl9XQUtFX0VWRU5UJyksXHJcbiAgICBVUERBVEU6IHJlcXVpcmUoJy4vVVBEQVRFX0VWRU5UJyksXHJcbiAgICBXQUtFOiByZXF1aXJlKCcuL1dBS0VfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/scene/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/scene/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/scene/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Scenes\r\n */\r\n\r\nvar Scene = {\r\n\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/scene/events/index.js\"),\r\n    SceneManager: __webpack_require__(/*! ./SceneManager */ \"./node_modules/phaser/src/scene/SceneManager.js\"),\r\n    ScenePlugin: __webpack_require__(/*! ./ScenePlugin */ \"./node_modules/phaser/src/scene/ScenePlugin.js\"),\r\n    Settings: __webpack_require__(/*! ./Settings */ \"./node_modules/phaser/src/scene/Settings.js\"),\r\n    Systems: __webpack_require__(/*! ./Systems */ \"./node_modules/phaser/src/scene/Systems.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nScene = Extend(false, Scene, CONST);\r\n\r\nmodule.exports = Scene;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zY2VuZS9pbmRleC5qcz9hMjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBVTtBQUM5QixrQkFBa0IsbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMscUVBQWU7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLCtEQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyw2REFBVzs7QUFFaEM7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NjZW5lL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU2NlbmVzXHJcbiAqL1xyXG5cclxudmFyIFNjZW5lID0ge1xyXG5cclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKSxcclxuICAgIFNjZW5lTWFuYWdlcjogcmVxdWlyZSgnLi9TY2VuZU1hbmFnZXInKSxcclxuICAgIFNjZW5lUGx1Z2luOiByZXF1aXJlKCcuL1NjZW5lUGx1Z2luJyksXHJcbiAgICBTZXR0aW5nczogcmVxdWlyZSgnLi9TZXR0aW5ncycpLFxyXG4gICAgU3lzdGVtczogcmVxdWlyZSgnLi9TeXN0ZW1zJylcclxuXHJcbn07XHJcblxyXG4vLyAgIE1lcmdlIGluIHRoZSBjb25zdHNcclxuU2NlbmUgPSBFeHRlbmQoZmFsc2UsIFNjZW5lLCBDT05TVCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjZW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/scene/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/BaseSound.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/sound/BaseSound.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Class containing all the shared state and behavior of a sound object, independent of the implementation.\r\n *\r\n * @class BaseSound\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Sound.BaseSoundManager} manager - Reference to the current sound manager instance.\r\n * @param {string} key - Asset key for the sound.\r\n * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n */\r\nvar BaseSound = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function BaseSound (manager, key, config)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * Local reference to the sound manager.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#manager\r\n         * @type {Phaser.Sound.BaseSoundManager}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * Asset key for the sound.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#key\r\n         * @type {string}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.key = key;\r\n\r\n        /**\r\n         * Flag indicating if sound is currently playing.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#isPlaying\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isPlaying = false;\r\n\r\n        /**\r\n         * Flag indicating if sound is currently paused.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#isPaused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isPaused = false;\r\n\r\n        /**\r\n         * A property that holds the value of sound's actual playback rate,\r\n         * after its rate and detune values has been combined with global\r\n         * rate and detune values.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#totalRate\r\n         * @type {number}\r\n         * @default 1\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.totalRate = 1;\r\n\r\n        /**\r\n         * A value representing the duration, in seconds.\r\n         * It could be total sound duration or a marker duration.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#duration\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = this.duration || 0;\r\n\r\n        /**\r\n         * The total duration of the sound in seconds.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#totalDuration\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.totalDuration = this.totalDuration || 0;\r\n\r\n        /**\r\n         * A config object used to store default sound settings' values.\r\n         * Default values will be set by properties' setters.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#config\r\n         * @type {Phaser.Types.Sound.SoundConfig}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.config = {\r\n\r\n            mute: false,\r\n            volume: 1,\r\n            rate: 1,\r\n            detune: 0,\r\n            seek: 0,\r\n            loop: false,\r\n            delay: 0\r\n\r\n        };\r\n\r\n        /**\r\n         * Reference to the currently used config.\r\n         * It could be default config or marker config.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#currentConfig\r\n         * @type {Phaser.Types.Sound.SoundConfig}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.currentConfig = this.config;\r\n\r\n        this.config = Extend(this.config, config);\r\n\r\n        /**\r\n         * Object containing markers definitions.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#markers\r\n         * @type {Object.<string, Phaser.Types.Sound.SoundMarker>}\r\n         * @default {}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.markers = {};\r\n\r\n        /**\r\n         * Currently playing marker.\r\n         * 'null' if whole sound is playing.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#currentMarker\r\n         * @type {Phaser.Types.Sound.SoundMarker}\r\n         * @default null\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.currentMarker = null;\r\n\r\n        /**\r\n         * Flag indicating if destroy method was called on this sound.\r\n         *\r\n         * @name Phaser.Sound.BaseSound#pendingRemove\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.pendingRemove = false;\r\n    },\r\n\r\n    /**\r\n     * Adds a marker into the current sound. A marker is represented by name, start time, duration, and optionally config object.\r\n     * This allows you to bundle multiple sounds together into a single audio file and use markers to jump between them for playback.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#addMarker\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Sound.SoundMarker} marker - Marker object.\r\n     *\r\n     * @return {boolean} Whether the marker was added successfully.\r\n     */\r\n    addMarker: function (marker)\r\n    {\r\n        if (!marker || !marker.name || typeof marker.name !== 'string')\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (this.markers[marker.name])\r\n        {\r\n            // eslint-disable-next-line no-console\r\n            console.error('addMarker ' + marker.name + ' already exists in Sound');\r\n\r\n            return false;\r\n        }\r\n\r\n        marker = Extend(true, {\r\n            name: '',\r\n            start: 0,\r\n            duration: this.totalDuration - (marker.start || 0),\r\n            config: {\r\n                mute: false,\r\n                volume: 1,\r\n                rate: 1,\r\n                detune: 0,\r\n                seek: 0,\r\n                loop: false,\r\n                delay: 0\r\n            }\r\n        }, marker);\r\n\r\n        this.markers[marker.name] = marker;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Updates previously added marker.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#updateMarker\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Sound.SoundMarker} marker - Marker object with updated values.\r\n     *\r\n     * @return {boolean} Whether the marker was updated successfully.\r\n     */\r\n    updateMarker: function (marker)\r\n    {\r\n        if (!marker || !marker.name || typeof marker.name !== 'string')\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!this.markers[marker.name])\r\n        {\r\n            // eslint-disable-next-line no-console\r\n            console.warn('Audio Marker: ' + marker.name + ' missing in Sound: ' + this.key);\r\n\r\n            return false;\r\n        }\r\n\r\n        this.markers[marker.name] = Extend(true, this.markers[marker.name], marker);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Removes a marker from the sound.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#removeMarker\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} markerName - The name of the marker to remove.\r\n     *\r\n     * @return {?Phaser.Types.Sound.SoundMarker} Removed marker object or 'null' if there was no marker with provided name.\r\n     */\r\n    removeMarker: function (markerName)\r\n    {\r\n        var marker = this.markers[markerName];\r\n\r\n        if (!marker)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        this.markers[markerName] = null;\r\n\r\n        return marker;\r\n    },\r\n\r\n    /**\r\n     * Play this sound, or a marked section of it.\r\n     * It always plays the sound from the start. If you want to start playback from a specific time\r\n     * you can set 'seek' setting of the config object, provided to this call, to that value.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#play\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Sound.SoundConfig)} [markerName=''] - If you want to play a marker then provide the marker name here. Alternatively, this parameter can be a SoundConfig object.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - Optional sound config object to be applied to this marker or entire sound if no marker name is provided. It gets memorized for future plays of current section of the sound.\r\n     *\r\n     * @return {boolean} Whether the sound started playing successfully.\r\n     */\r\n    play: function (markerName, config)\r\n    {\r\n        if (markerName === undefined) { markerName = ''; }\r\n\r\n        if (typeof markerName === 'object')\r\n        {\r\n            config = markerName;\r\n            markerName = '';\r\n        }\r\n\r\n        if (typeof markerName !== 'string')\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!markerName)\r\n        {\r\n            this.currentMarker = null;\r\n            this.currentConfig = this.config;\r\n            this.duration = this.totalDuration;\r\n        }\r\n        else\r\n        {\r\n            if (!this.markers[markerName])\r\n            {\r\n                // eslint-disable-next-line no-console\r\n                console.warn('Marker: ' + markerName + ' missing in Sound: ' + this.key);\r\n\r\n                return false;\r\n            }\r\n\r\n            this.currentMarker = this.markers[markerName];\r\n            this.currentConfig = this.currentMarker.config;\r\n            this.duration = this.currentMarker.duration;\r\n        }\r\n\r\n        this.resetConfig();\r\n\r\n        this.currentConfig = Extend(this.currentConfig, config);\r\n\r\n        this.isPlaying = true;\r\n        this.isPaused = false;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Pauses the sound.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was paused successfully.\r\n     */\r\n    pause: function ()\r\n    {\r\n        if (this.isPaused || !this.isPlaying)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        this.isPlaying = false;\r\n        this.isPaused = true;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Resumes the sound.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was resumed successfully.\r\n     */\r\n    resume: function ()\r\n    {\r\n        if (!this.isPaused || this.isPlaying)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        this.isPlaying = true;\r\n        this.isPaused = false;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Stop playing this sound.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was stopped successfully.\r\n     */\r\n    stop: function ()\r\n    {\r\n        if (!this.isPaused && !this.isPlaying)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        this.isPlaying = false;\r\n        this.isPaused = false;\r\n\r\n        this.resetConfig();\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Method used internally for applying config values to some of the sound properties.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#applyConfig\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    applyConfig: function ()\r\n    {\r\n        this.mute = this.currentConfig.mute;\r\n        this.volume = this.currentConfig.volume;\r\n        this.rate = this.currentConfig.rate;\r\n        this.detune = this.currentConfig.detune;\r\n        this.loop = this.currentConfig.loop;\r\n    },\r\n\r\n    /**\r\n     * Method used internally for resetting values of some of the config properties.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#resetConfig\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    resetConfig: function ()\r\n    {\r\n        this.currentConfig.seek = 0;\r\n        this.currentConfig.delay = 0;\r\n    },\r\n\r\n    /**\r\n     * Update method called automatically by sound manager on every game step.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#update\r\n     * @override\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    update: NOOP,\r\n\r\n    /**\r\n     * Method used internally to calculate total playback rate of the sound.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#calculateRate\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    calculateRate: function ()\r\n    {\r\n        var cent = 1.0005777895065548; // Math.pow(2, 1/1200);\r\n        var totalDetune = this.currentConfig.detune + this.manager.detune;\r\n        var detuneRate = Math.pow(cent, totalDetune);\r\n\r\n        this.totalRate = this.currentConfig.rate * this.manager.rate * detuneRate;\r\n    },\r\n\r\n    /**\r\n     * Destroys this sound and all associated events and marks it for removal from the sound manager.\r\n     *\r\n     * @method Phaser.Sound.BaseSound#destroy\r\n     * @fires Phaser.Sound.Events#DESTROY\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        if (this.pendingRemove)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.emit(Events.DESTROY, this);\r\n        this.pendingRemove = true;\r\n        this.manager = null;\r\n        this.key = '';\r\n        this.removeAllListeners();\r\n        this.isPlaying = false;\r\n        this.isPaused = false;\r\n        this.config = null;\r\n        this.currentConfig = null;\r\n        this.markers = null;\r\n        this.currentMarker = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BaseSound;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9CYXNlU291bmQuanM/ZjBhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxpRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyw4REFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvQmFzZVNvdW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgUGF2bGUgR29sb3Nrb2tvdmljIDxwZ29sb3Nrb2tvdmljQGdtYWlsLmNvbT4gKGh0dHA6Ly9wcnVuZWdhbWVzLmNvbSlcclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIENsYXNzIGNvbnRhaW5pbmcgYWxsIHRoZSBzaGFyZWQgc3RhdGUgYW5kIGJlaGF2aW9yIG9mIGEgc291bmQgb2JqZWN0LCBpbmRlcGVuZGVudCBvZiB0aGUgaW1wbGVtZW50YXRpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBCYXNlU291bmRcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5Tb3VuZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXJ9IG1hbmFnZXIgLSBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc291bmQgbWFuYWdlciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEFzc2V0IGtleSBmb3IgdGhlIHNvdW5kLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Tb3VuZC5Tb3VuZENvbmZpZ30gW2NvbmZpZ10gLSBBbiBvcHRpb25hbCBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzb3VuZCBzZXR0aW5ncy5cclxuICovXHJcbnZhciBCYXNlU291bmQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJhc2VTb3VuZCAobWFuYWdlciwga2V5LCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvY2FsIHJlZmVyZW5jZSB0byB0aGUgc291bmQgbWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5CYXNlU291bmQjbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFzc2V0IGtleSBmb3IgdGhlIHNvdW5kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNrZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGbGFnIGluZGljYXRpbmcgaWYgc291bmQgaXMgY3VycmVudGx5IHBsYXlpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2lzUGxheWluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHNvdW5kIGlzIGN1cnJlbnRseSBwYXVzZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2lzUGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcHJvcGVydHkgdGhhdCBob2xkcyB0aGUgdmFsdWUgb2Ygc291bmQncyBhY3R1YWwgcGxheWJhY2sgcmF0ZSxcclxuICAgICAgICAgKiBhZnRlciBpdHMgcmF0ZSBhbmQgZGV0dW5lIHZhbHVlcyBoYXMgYmVlbiBjb21iaW5lZCB3aXRoIGdsb2JhbFxyXG4gICAgICAgICAqIHJhdGUgYW5kIGRldHVuZSB2YWx1ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3RvdGFsUmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG90YWxSYXRlID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uLCBpbiBzZWNvbmRzLlxyXG4gICAgICAgICAqIEl0IGNvdWxkIGJlIHRvdGFsIHNvdW5kIGR1cmF0aW9uIG9yIGEgbWFya2VyIGR1cmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24gfHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSBzb3VuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCN0b3RhbER1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRHVyYXRpb24gPSB0aGlzLnRvdGFsRHVyYXRpb24gfHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBjb25maWcgb2JqZWN0IHVzZWQgdG8gc3RvcmUgZGVmYXVsdCBzb3VuZCBzZXR0aW5ncycgdmFsdWVzLlxyXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWVzIHdpbGwgYmUgc2V0IGJ5IHByb3BlcnRpZXMnIHNldHRlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2NvbmZpZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcclxuXHJcbiAgICAgICAgICAgIG11dGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2b2x1bWU6IDEsXHJcbiAgICAgICAgICAgIHJhdGU6IDEsXHJcbiAgICAgICAgICAgIGRldHVuZTogMCxcclxuICAgICAgICAgICAgc2VlazogMCxcclxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXHJcbiAgICAgICAgICAgIGRlbGF5OiAwXHJcblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IHVzZWQgY29uZmlnLlxyXG4gICAgICAgICAqIEl0IGNvdWxkIGJlIGRlZmF1bHQgY29uZmlnIG9yIG1hcmtlciBjb25maWcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2N1cnJlbnRDb25maWdcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnID0gRXh0ZW5kKHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPYmplY3QgY29udGFpbmluZyBtYXJrZXJzIGRlZmluaXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNtYXJrZXJzXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBQaGFzZXIuVHlwZXMuU291bmQuU291bmRNYXJrZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHt9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXJrZXJzID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1cnJlbnRseSBwbGF5aW5nIG1hcmtlci5cclxuICAgICAgICAgKiAnbnVsbCcgaWYgd2hvbGUgc291bmQgaXMgcGxheWluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5CYXNlU291bmQjY3VycmVudE1hcmtlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRNYXJrZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1hcmtlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZsYWcgaW5kaWNhdGluZyBpZiBkZXN0cm95IG1ldGhvZCB3YXMgY2FsbGVkIG9uIHRoaXMgc291bmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3BlbmRpbmdSZW1vdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVtb3ZlID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG1hcmtlciBpbnRvIHRoZSBjdXJyZW50IHNvdW5kLiBBIG1hcmtlciBpcyByZXByZXNlbnRlZCBieSBuYW1lLCBzdGFydCB0aW1lLCBkdXJhdGlvbiwgYW5kIG9wdGlvbmFsbHkgY29uZmlnIG9iamVjdC5cclxuICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0byBidW5kbGUgbXVsdGlwbGUgc291bmRzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgYXVkaW8gZmlsZSBhbmQgdXNlIG1hcmtlcnMgdG8ganVtcCBiZXR3ZWVuIHRoZW0gZm9yIHBsYXliYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNhZGRNYXJrZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kTWFya2VyfSBtYXJrZXIgLSBNYXJrZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG1hcmtlciB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBhZGRNYXJrZXI6IGZ1bmN0aW9uIChtYXJrZXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFtYXJrZXIgfHwgIW1hcmtlci5uYW1lIHx8IHR5cGVvZiBtYXJrZXIubmFtZSAhPT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tYXJrZXJzW21hcmtlci5uYW1lXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FkZE1hcmtlciAnICsgbWFya2VyLm5hbWUgKyAnIGFscmVhZHkgZXhpc3RzIGluIFNvdW5kJyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXJrZXIgPSBFeHRlbmQodHJ1ZSwge1xyXG4gICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgc3RhcnQ6IDAsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLnRvdGFsRHVyYXRpb24gLSAobWFya2VyLnN0YXJ0IHx8IDApLFxyXG4gICAgICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgICAgICAgIG11dGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdm9sdW1lOiAxLFxyXG4gICAgICAgICAgICAgICAgcmF0ZTogMSxcclxuICAgICAgICAgICAgICAgIGRldHVuZTogMCxcclxuICAgICAgICAgICAgICAgIHNlZWs6IDAsXHJcbiAgICAgICAgICAgICAgICBsb29wOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlbGF5OiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBtYXJrZXIpO1xyXG5cclxuICAgICAgICB0aGlzLm1hcmtlcnNbbWFya2VyLm5hbWVdID0gbWFya2VyO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHByZXZpb3VzbHkgYWRkZWQgbWFya2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCN1cGRhdGVNYXJrZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kTWFya2VyfSBtYXJrZXIgLSBNYXJrZXIgb2JqZWN0IHdpdGggdXBkYXRlZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbWFya2VyIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlTWFya2VyOiBmdW5jdGlvbiAobWFya2VyKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghbWFya2VyIHx8ICFtYXJrZXIubmFtZSB8fCB0eXBlb2YgbWFya2VyLm5hbWUgIT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1hcmtlcnNbbWFya2VyLm5hbWVdKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdBdWRpbyBNYXJrZXI6ICcgKyBtYXJrZXIubmFtZSArICcgbWlzc2luZyBpbiBTb3VuZDogJyArIHRoaXMua2V5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFya2Vyc1ttYXJrZXIubmFtZV0gPSBFeHRlbmQodHJ1ZSwgdGhpcy5tYXJrZXJzW21hcmtlci5uYW1lXSwgbWFya2VyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIG1hcmtlciBmcm9tIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmQjcmVtb3ZlTWFya2VyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya2VyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBtYXJrZXIgdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVHlwZXMuU291bmQuU291bmRNYXJrZXJ9IFJlbW92ZWQgbWFya2VyIG9iamVjdCBvciAnbnVsbCcgaWYgdGhlcmUgd2FzIG5vIG1hcmtlciB3aXRoIHByb3ZpZGVkIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU1hcmtlcjogZnVuY3Rpb24gKG1hcmtlck5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vyc1ttYXJrZXJOYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKCFtYXJrZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFya2Vyc1ttYXJrZXJOYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiBtYXJrZXI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxheSB0aGlzIHNvdW5kLCBvciBhIG1hcmtlZCBzZWN0aW9uIG9mIGl0LlxyXG4gICAgICogSXQgYWx3YXlzIHBsYXlzIHRoZSBzb3VuZCBmcm9tIHRoZSBzdGFydC4gSWYgeW91IHdhbnQgdG8gc3RhcnQgcGxheWJhY2sgZnJvbSBhIHNwZWNpZmljIHRpbWVcclxuICAgICAqIHlvdSBjYW4gc2V0ICdzZWVrJyBzZXR0aW5nIG9mIHRoZSBjb25maWcgb2JqZWN0LCBwcm92aWRlZCB0byB0aGlzIGNhbGwsIHRvIHRoYXQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3BsYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWcpfSBbbWFya2VyTmFtZT0nJ10gLSBJZiB5b3Ugd2FudCB0byBwbGF5IGEgbWFya2VyIHRoZW4gcHJvdmlkZSB0aGUgbWFya2VyIG5hbWUgaGVyZS4gQWx0ZXJuYXRpdmVseSwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgU291bmRDb25maWcgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWd9IFtjb25maWddIC0gT3B0aW9uYWwgc291bmQgY29uZmlnIG9iamVjdCB0byBiZSBhcHBsaWVkIHRvIHRoaXMgbWFya2VyIG9yIGVudGlyZSBzb3VuZCBpZiBubyBtYXJrZXIgbmFtZSBpcyBwcm92aWRlZC4gSXQgZ2V0cyBtZW1vcml6ZWQgZm9yIGZ1dHVyZSBwbGF5cyBvZiBjdXJyZW50IHNlY3Rpb24gb2YgdGhlIHNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHN0YXJ0ZWQgcGxheWluZyBzdWNjZXNzZnVsbHkuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChtYXJrZXJOYW1lLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1hcmtlck5hbWUgPT09IHVuZGVmaW5lZCkgeyBtYXJrZXJOYW1lID0gJyc7IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXJrZXJOYW1lID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IG1hcmtlck5hbWU7XHJcbiAgICAgICAgICAgIG1hcmtlck5hbWUgPSAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbWFya2VyTmFtZSAhPT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW1hcmtlck5hbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNYXJrZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHRoaXMudG90YWxEdXJhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm1hcmtlcnNbbWFya2VyTmFtZV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01hcmtlcjogJyArIG1hcmtlck5hbWUgKyAnIG1pc3NpbmcgaW4gU291bmQ6ICcgKyB0aGlzLmtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNYXJrZXIgPSB0aGlzLm1hcmtlcnNbbWFya2VyTmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZyA9IHRoaXMuY3VycmVudE1hcmtlci5jb25maWc7XHJcbiAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLmN1cnJlbnRNYXJrZXIuZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0Q29uZmlnKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZyA9IEV4dGVuZCh0aGlzLmN1cnJlbnRDb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhdXNlcyB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3BhdXNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCB3YXMgcGF1c2VkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQYXVzZWQgfHwgIXRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3Jlc3VtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc291bmQgd2FzIHJlc3VtZWQgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGF1c2VkIHx8IHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBwbGF5aW5nIHRoaXMgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kI3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyBzdG9wcGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNQYXVzZWQgJiYgIXRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRDb25maWcoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgYXBwbHlpbmcgY29uZmlnIHZhbHVlcyB0byBzb21lIG9mIHRoZSBzb3VuZCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNhcHBseUNvbmZpZ1xyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFwcGx5Q29uZmlnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubXV0ZSA9IHRoaXMuY3VycmVudENvbmZpZy5tdXRlO1xyXG4gICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5jdXJyZW50Q29uZmlnLnZvbHVtZTtcclxuICAgICAgICB0aGlzLnJhdGUgPSB0aGlzLmN1cnJlbnRDb25maWcucmF0ZTtcclxuICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuY3VycmVudENvbmZpZy5kZXR1bmU7XHJcbiAgICAgICAgdGhpcy5sb29wID0gdGhpcy5jdXJyZW50Q29uZmlnLmxvb3A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgcmVzZXR0aW5nIHZhbHVlcyBvZiBzb21lIG9mIHRoZSBjb25maWcgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmQjcmVzZXRDb25maWdcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXNldENvbmZpZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcuc2VlayA9IDA7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLmRlbGF5ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWV0aG9kIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHNvdW5kIG1hbmFnZXIgb24gZXZlcnkgZ2FtZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCN1cGRhdGVcclxuICAgICAqIEBvdmVycmlkZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBOT09QLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSB0byBjYWxjdWxhdGUgdG90YWwgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2NhbGN1bGF0ZVJhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVSYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjZW50ID0gMS4wMDA1Nzc3ODk1MDY1NTQ4OyAvLyBNYXRoLnBvdygyLCAxLzEyMDApO1xyXG4gICAgICAgIHZhciB0b3RhbERldHVuZSA9IHRoaXMuY3VycmVudENvbmZpZy5kZXR1bmUgKyB0aGlzLm1hbmFnZXIuZGV0dW5lO1xyXG4gICAgICAgIHZhciBkZXR1bmVSYXRlID0gTWF0aC5wb3coY2VudCwgdG90YWxEZXR1bmUpO1xyXG5cclxuICAgICAgICB0aGlzLnRvdGFsUmF0ZSA9IHRoaXMuY3VycmVudENvbmZpZy5yYXRlICogdGhpcy5tYW5hZ2VyLnJhdGUgKiBkZXR1bmVSYXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgc291bmQgYW5kIGFsbCBhc3NvY2lhdGVkIGV2ZW50cyBhbmQgbWFya3MgaXQgZm9yIHJlbW92YWwgZnJvbSB0aGUgc291bmQgbWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmQjZGVzdHJveVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1JlbW92ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuREVTVFJPWSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMua2V5ID0gJyc7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hcmtlcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1hcmtlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZVNvdW5kO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/BaseSound.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/BaseSoundManager.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/sound/BaseSoundManager.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Clone = __webpack_require__(/*! ../utils/object/Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The sound manager is responsible for playing back audio via Web Audio API or HTML Audio tag as fallback.\r\n * The audio file type and the encoding of those files are extremely important.\r\n *\r\n * Not all browsers can play all audio formats.\r\n *\r\n * There is a good guide to what's supported [here](https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Cross-browser_audio_basics#Audio_Codec_Support).\r\n *\r\n * @class BaseSoundManager\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - Reference to the current game instance.\r\n */\r\nvar BaseSoundManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function BaseSoundManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * Local reference to game.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#game\r\n         * @type {Phaser.Game}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * Local reference to the JSON Cache, as used by Audio Sprites.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#jsonCache\r\n         * @type {Phaser.Cache.BaseCache}\r\n         * @readonly\r\n         * @since 3.7.0\r\n         */\r\n        this.jsonCache = game.cache.json;\r\n\r\n        /**\r\n         * An array containing all added sounds.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#sounds\r\n         * @type {Phaser.Sound.BaseSound[]}\r\n         * @default []\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.sounds = [];\r\n\r\n        /**\r\n         * Global mute setting.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#mute\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.mute = false;\r\n\r\n        /**\r\n         * Global volume setting.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#volume\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.volume = 1;\r\n\r\n        /**\r\n         * Flag indicating if sounds should be paused when game looses focus,\r\n         * for instance when user switches to another tab/program/app.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#pauseOnBlur\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.pauseOnBlur = true;\r\n\r\n        /**\r\n         * Property that actually holds the value of global playback rate.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#_rate\r\n         * @type {number}\r\n         * @private\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this._rate = 1;\r\n\r\n        /**\r\n         * Property that actually holds the value of global detune.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#_detune\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._detune = 0;\r\n\r\n        /**\r\n         * Mobile devices require sounds to be triggered from an explicit user action,\r\n         * such as a tap, before any sound can be loaded/played on a web page.\r\n         * Set to true if the audio system is currently locked awaiting user interaction.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#locked\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.locked = this.locked || false;\r\n\r\n        /**\r\n         * Flag used internally for handling when the audio system\r\n         * has been unlocked, if there ever was a need for it.\r\n         *\r\n         * @name Phaser.Sound.BaseSoundManager#unlocked\r\n         * @type {boolean}\r\n         * @default false\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.unlocked = false;\r\n\r\n        game.events.on(GameEvents.BLUR, function ()\r\n        {\r\n            if (this.pauseOnBlur)\r\n            {\r\n                this.onBlur();\r\n            }\r\n        }, this);\r\n\r\n        game.events.on(GameEvents.FOCUS, function ()\r\n        {\r\n            if (this.pauseOnBlur)\r\n            {\r\n                this.onFocus();\r\n            }\r\n        }, this);\r\n\r\n        game.events.on(GameEvents.PRE_STEP, this.update, this);\r\n        game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * Adds a new sound into the sound manager.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#add\r\n     * @override\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n     *\r\n     * @return {Phaser.Sound.BaseSound} The new sound instance.\r\n     */\r\n    add: NOOP,\r\n\r\n    /**\r\n     * Adds a new audio sprite sound into the sound manager.\r\n     * Audio Sprites are a combination of audio files and a JSON configuration.\r\n     * The JSON follows the format of that created by https://github.com/tonistiigi/audiosprite\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#addAudioSprite\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n     *\r\n     * @return {(Phaser.Sound.HTML5AudioSound|Phaser.Sound.WebAudioSound)} The new audio sprite sound instance.\r\n     */\r\n    addAudioSprite: function (key, config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        var sound = this.add(key, config);\r\n\r\n        sound.spritemap = this.jsonCache.get(key).spritemap;\r\n\r\n        for (var markerName in sound.spritemap)\r\n        {\r\n            if (!sound.spritemap.hasOwnProperty(markerName))\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var markerConfig = Clone(config);\r\n\r\n            var marker = sound.spritemap[markerName];\r\n\r\n            markerConfig.loop = (marker.hasOwnProperty('loop')) ? marker.loop : false;\r\n\r\n            sound.addMarker({\r\n                name: markerName,\r\n                start: marker.start,\r\n                duration: marker.end - marker.start,\r\n                config: markerConfig\r\n            });\r\n        }\r\n\r\n        return sound;\r\n    },\r\n\r\n    /**\r\n     * Enables playing sound on the fly without the need to keep a reference to it.\r\n     * Sound will auto destroy once its playback ends.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#play\r\n     * @listens Phaser.Sound.Events#COMPLETE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {(Phaser.Types.Sound.SoundConfig|Phaser.Types.Sound.SoundMarker)} [extra] - An optional additional object containing settings to be applied to the sound. It could be either config or marker object.\r\n     *\r\n     * @return {boolean} Whether the sound started playing successfully.\r\n     */\r\n    play: function (key, extra)\r\n    {\r\n        var sound = this.add(key);\r\n\r\n        sound.once(Events.COMPLETE, sound.destroy, sound);\r\n\r\n        if (extra)\r\n        {\r\n            if (extra.name)\r\n            {\r\n                sound.addMarker(extra);\r\n\r\n                return sound.play(extra.name);\r\n            }\r\n            else\r\n            {\r\n                return sound.play(extra);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            return sound.play();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Enables playing audio sprite sound on the fly without the need to keep a reference to it.\r\n     * Sound will auto destroy once its playback ends.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#playAudioSprite\r\n     * @listens Phaser.Sound.Events#COMPLETE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {string} spriteName - The name of the sound sprite to play.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n     *\r\n     * @return {boolean} Whether the audio sprite sound started playing successfully.\r\n     */\r\n    playAudioSprite: function (key, spriteName, config)\r\n    {\r\n        var sound = this.addAudioSprite(key);\r\n\r\n        sound.once(Events.COMPLETE, sound.destroy, sound);\r\n\r\n        return sound.play(spriteName, config);\r\n    },\r\n\r\n    /**\r\n     * Removes a sound from the sound manager.\r\n     * The removed sound is destroyed before removal.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Sound.BaseSound} sound - The sound object to remove.\r\n     *\r\n     * @return {boolean} True if the sound was removed successfully, otherwise false.\r\n     */\r\n    remove: function (sound)\r\n    {\r\n        var index = this.sounds.indexOf(sound);\r\n\r\n        if (index !== -1)\r\n        {\r\n            sound.destroy();\r\n\r\n            this.sounds.splice(index, 1);\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Removes all sounds from the sound manager that have an asset key matching the given value.\r\n     * The removed sounds are destroyed before removal.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#removeByKey\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The key to match when removing sound objects.\r\n     *\r\n     * @return {number} The number of matching sound objects that were removed.\r\n     */\r\n    removeByKey: function (key)\r\n    {\r\n        var removed = 0;\r\n\r\n        for (var i = this.sounds.length - 1; i >= 0; i--)\r\n        {\r\n            var sound = this.sounds[i];\r\n\r\n            if (sound.key === key)\r\n            {\r\n                sound.destroy();\r\n\r\n                this.sounds.splice(i, 1);\r\n\r\n                removed++;\r\n            }\r\n        }\r\n\r\n        return removed;\r\n    },\r\n\r\n    /**\r\n     * Pauses all the sounds in the game.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#pauseAll\r\n     * @fires Phaser.Sound.Events#PAUSE_ALL\r\n     * @since 3.0.0\r\n     */\r\n    pauseAll: function ()\r\n    {\r\n        this.forEachActiveSound(function (sound)\r\n        {\r\n            sound.pause();\r\n        });\r\n\r\n        this.emit(Events.PAUSE_ALL, this);\r\n    },\r\n\r\n    /**\r\n     * Resumes all the sounds in the game.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#resumeAll\r\n     * @fires Phaser.Sound.Events#RESUME_ALL\r\n     * @since 3.0.0\r\n     */\r\n    resumeAll: function ()\r\n    {\r\n        this.forEachActiveSound(function (sound)\r\n        {\r\n            sound.resume();\r\n        });\r\n\r\n        this.emit(Events.RESUME_ALL, this);\r\n    },\r\n\r\n    /**\r\n     * Stops all the sounds in the game.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#stopAll\r\n     * @fires Phaser.Sound.Events#STOP_ALL\r\n     * @since 3.0.0\r\n     */\r\n    stopAll: function ()\r\n    {\r\n        this.forEachActiveSound(function (sound)\r\n        {\r\n            sound.stop();\r\n        });\r\n\r\n        this.emit(Events.STOP_ALL, this);\r\n    },\r\n\r\n    /**\r\n     * Method used internally for unlocking audio playback on devices that\r\n     * require user interaction before any sound can be played on a web page.\r\n     *\r\n     * Read more about how this issue is handled here in [this article](https://medium.com/@pgoloskokovic/unlocking-web-audio-the-smarter-way-8858218c0e09).\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#unlock\r\n     * @override\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    unlock: NOOP,\r\n\r\n    /**\r\n     * Method used internally for pausing sound manager if\r\n     * Phaser.Sound.BaseSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#onBlur\r\n     * @override\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onBlur: NOOP,\r\n\r\n    /**\r\n     * Method used internally for resuming sound manager if\r\n     * Phaser.Sound.BaseSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#onFocus\r\n     * @override\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onFocus: NOOP,\r\n\r\n    /**\r\n     * Update method called on every game step.\r\n     * Removes destroyed sounds and updates every active sound in the game.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#update\r\n     * @protected\r\n     * @fires Phaser.Sound.Events#UNLOCKED\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        if (this.unlocked)\r\n        {\r\n            this.unlocked = false;\r\n            this.locked = false;\r\n\r\n            this.emit(Events.UNLOCKED, this);\r\n        }\r\n\r\n        for (var i = this.sounds.length - 1; i >= 0; i--)\r\n        {\r\n            if (this.sounds[i].pendingRemove)\r\n            {\r\n                this.sounds.splice(i, 1);\r\n            }\r\n        }\r\n\r\n        this.sounds.forEach(function (sound)\r\n        {\r\n            sound.update(time, delta);\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Destroys all the sounds in the game and all associated events.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllListeners();\r\n\r\n        this.forEachActiveSound(function (sound)\r\n        {\r\n            sound.destroy();\r\n        });\r\n\r\n        this.sounds.length = 0;\r\n        this.sounds = null;\r\n\r\n        this.game = null;\r\n    },\r\n\r\n    /**\r\n     * Method used internally for iterating only over active sounds and skipping sounds that are marked for removal.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#forEachActiveSound\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Sound.EachActiveSoundCallback} callback - Callback function. (manager: Phaser.Sound.BaseSoundManager, sound: Phaser.Sound.BaseSound, index: number, sounds: Phaser.Manager.BaseSound[]) => void\r\n     * @param {*} [scope] - Callback context.\r\n     */\r\n    forEachActiveSound: function (callback, scope)\r\n    {\r\n        var _this = this;\r\n\r\n        this.sounds.forEach(function (sound, index)\r\n        {\r\n            if (sound && !sound.pendingRemove)\r\n            {\r\n                callback.call(scope || _this, sound, index, _this.sounds);\r\n            }\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Sets the global playback rate at which all the sounds will be played.\r\n     *\r\n     * For example, a value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audios playback speed.\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#setRate\r\n     * @fires Phaser.Sound.Events#GLOBAL_RATE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - Global playback rate at which all the sounds will be played.\r\n     *\r\n     * @return {Phaser.Sound.BaseSoundManager} This Sound Manager.\r\n     */\r\n    setRate: function (value)\r\n    {\r\n        this.rate = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Global playback rate at which all the sounds will be played.\r\n     * Value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audio's playback speed.\r\n     *\r\n     * @name Phaser.Sound.BaseSoundManager#rate\r\n     * @type {number}\r\n     * @default 1\r\n     * @since 3.0.0\r\n     */\r\n    rate: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._rate;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._rate = value;\r\n\r\n            this.forEachActiveSound(function (sound)\r\n            {\r\n                sound.calculateRate();\r\n            });\r\n\r\n            this.emit(Events.GLOBAL_RATE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the global detuning of all sounds in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @method Phaser.Sound.BaseSoundManager#setDetune\r\n     * @fires Phaser.Sound.Events#GLOBAL_DETUNE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @return {Phaser.Sound.BaseSoundManager} This Sound Manager.\r\n     */\r\n    setDetune: function (value)\r\n    {\r\n        this.detune = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Global detuning of all sounds in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @name Phaser.Sound.BaseSoundManager#detune\r\n     * @type {number}\r\n     * @default 0\r\n     * @since 3.0.0\r\n     */\r\n    detune: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._detune;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._detune = value;\r\n\r\n            this.forEachActiveSound(function (sound)\r\n            {\r\n                sound.calculateRate();\r\n            });\r\n\r\n            this.emit(Events.GLOBAL_DETUNE, this, value);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = BaseSoundManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9CYXNlU291bmRNYW5hZ2VyLmpzPzdiOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsOEVBQXVCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxpRUFBVTtBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDekMsV0FBVyxtQkFBTyxDQUFDLDhEQUFlOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLCtCQUErQjtBQUM5QztBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0EsZ0JBQWdCLDBEQUEwRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxnRUFBZ0U7QUFDL0U7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQ0FBMkM7QUFDMUQsZUFBZSxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvQmFzZVNvdW5kTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ2xvbmUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvQ2xvbmUnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vY29yZS9ldmVudHMnKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi91dGlscy9OT09QJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgc291bmQgbWFuYWdlciBpcyByZXNwb25zaWJsZSBmb3IgcGxheWluZyBiYWNrIGF1ZGlvIHZpYSBXZWIgQXVkaW8gQVBJIG9yIEhUTUwgQXVkaW8gdGFnIGFzIGZhbGxiYWNrLlxyXG4gKiBUaGUgYXVkaW8gZmlsZSB0eXBlIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhvc2UgZmlsZXMgYXJlIGV4dHJlbWVseSBpbXBvcnRhbnQuXHJcbiAqXHJcbiAqIE5vdCBhbGwgYnJvd3NlcnMgY2FuIHBsYXkgYWxsIGF1ZGlvIGZvcm1hdHMuXHJcbiAqXHJcbiAqIFRoZXJlIGlzIGEgZ29vZCBndWlkZSB0byB3aGF0J3Mgc3VwcG9ydGVkIFtoZXJlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9BcHBzL0Z1bmRhbWVudGFscy9BdWRpb19hbmRfdmlkZW9fZGVsaXZlcnkvQ3Jvc3MtYnJvd3Nlcl9hdWRpb19iYXNpY3MjQXVkaW9fQ29kZWNfU3VwcG9ydCkuXHJcbiAqXHJcbiAqIEBjbGFzcyBCYXNlU291bmRNYW5hZ2VyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU291bmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgQmFzZVNvdW5kTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZVNvdW5kTWFuYWdlciAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTG9jYWwgcmVmZXJlbmNlIHRvIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGdhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvY2FsIHJlZmVyZW5jZSB0byB0aGUgSlNPTiBDYWNoZSwgYXMgdXNlZCBieSBBdWRpbyBTcHJpdGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjanNvbkNhY2hlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5qc29uQ2FjaGUgPSBnYW1lLmNhY2hlLmpzb247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGFkZGVkIHNvdW5kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3NvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kW119XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291bmRzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdsb2JhbCBtdXRlIHNldHRpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNtdXRlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIHZvbHVtZSBzZXR0aW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjdm9sdW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52b2x1bWUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGbGFnIGluZGljYXRpbmcgaWYgc291bmRzIHNob3VsZCBiZSBwYXVzZWQgd2hlbiBnYW1lIGxvb3NlcyBmb2N1cyxcclxuICAgICAgICAgKiBmb3IgaW5zdGFuY2Ugd2hlbiB1c2VyIHN3aXRjaGVzIHRvIGFub3RoZXIgdGFiL3Byb2dyYW0vYXBwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjcGF1c2VPbkJsdXJcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXVzZU9uQmx1ciA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3BlcnR5IHRoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIHZhbHVlIG9mIGdsb2JhbCBwbGF5YmFjayByYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjX3JhdGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JhdGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcm9wZXJ0eSB0aGF0IGFjdHVhbGx5IGhvbGRzIHRoZSB2YWx1ZSBvZiBnbG9iYWwgZGV0dW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjX2RldHVuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZGV0dW5lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTW9iaWxlIGRldmljZXMgcmVxdWlyZSBzb3VuZHMgdG8gYmUgdHJpZ2dlcmVkIGZyb20gYW4gZXhwbGljaXQgdXNlciBhY3Rpb24sXHJcbiAgICAgICAgICogc3VjaCBhcyBhIHRhcCwgYmVmb3JlIGFueSBzb3VuZCBjYW4gYmUgbG9hZGVkL3BsYXllZCBvbiBhIHdlYiBwYWdlLlxyXG4gICAgICAgICAqIFNldCB0byB0cnVlIGlmIHRoZSBhdWRpbyBzeXN0ZW0gaXMgY3VycmVudGx5IGxvY2tlZCBhd2FpdGluZyB1c2VyIGludGVyYWN0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjbG9ja2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NrZWQgPSB0aGlzLmxvY2tlZCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmxhZyB1c2VkIGludGVybmFsbHkgZm9yIGhhbmRsaW5nIHdoZW4gdGhlIGF1ZGlvIHN5c3RlbVxyXG4gICAgICAgICAqIGhhcyBiZWVuIHVubG9ja2VkLCBpZiB0aGVyZSBldmVyIHdhcyBhIG5lZWQgZm9yIGl0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjdW5sb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51bmxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBnYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLkJMVVIsIGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXVzZU9uQmx1cilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJsdXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBnYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLkZPQ1VTLCBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGF1c2VPbkJsdXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGdhbWUuZXZlbnRzLm9uKEdhbWVFdmVudHMuUFJFX1NURVAsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBnYW1lLmV2ZW50cy5vbmNlKEdhbWVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IHNvdW5kIGludG8gdGhlIHNvdW5kIG1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNhZGRcclxuICAgICAqIEBvdmVycmlkZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEFzc2V0IGtleSBmb3IgdGhlIHNvdW5kLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWd9IFtjb25maWddIC0gQW4gb3B0aW9uYWwgY29uZmlnIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgc291bmQgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNvdW5kLkJhc2VTb3VuZH0gVGhlIG5ldyBzb3VuZCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYWRkOiBOT09QLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG5ldyBhdWRpbyBzcHJpdGUgc291bmQgaW50byB0aGUgc291bmQgbWFuYWdlci5cclxuICAgICAqIEF1ZGlvIFNwcml0ZXMgYXJlIGEgY29tYmluYXRpb24gb2YgYXVkaW8gZmlsZXMgYW5kIGEgSlNPTiBjb25maWd1cmF0aW9uLlxyXG4gICAgICogVGhlIEpTT04gZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoYXQgY3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vdG9uaXN0aWlnaS9hdWRpb3Nwcml0ZVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjYWRkQXVkaW9TcHJpdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBc3NldCBrZXkgZm9yIHRoZSBzb3VuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfSBbY29uZmlnXSAtIEFuIG9wdGlvbmFsIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNvdW5kIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kfFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kKX0gVGhlIG5ldyBhdWRpbyBzcHJpdGUgc291bmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGFkZEF1ZGlvU3ByaXRlOiBmdW5jdGlvbiAoa2V5LCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgICAgIHZhciBzb3VuZCA9IHRoaXMuYWRkKGtleSwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgc291bmQuc3ByaXRlbWFwID0gdGhpcy5qc29uQ2FjaGUuZ2V0KGtleSkuc3ByaXRlbWFwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBtYXJrZXJOYW1lIGluIHNvdW5kLnNwcml0ZW1hcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghc291bmQuc3ByaXRlbWFwLmhhc093blByb3BlcnR5KG1hcmtlck5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hcmtlckNvbmZpZyA9IENsb25lKGNvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFya2VyID0gc291bmQuc3ByaXRlbWFwW21hcmtlck5hbWVdO1xyXG5cclxuICAgICAgICAgICAgbWFya2VyQ29uZmlnLmxvb3AgPSAobWFya2VyLmhhc093blByb3BlcnR5KCdsb29wJykpID8gbWFya2VyLmxvb3AgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHNvdW5kLmFkZE1hcmtlcih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXJrZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IG1hcmtlci5zdGFydCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBtYXJrZXIuZW5kIC0gbWFya2VyLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgY29uZmlnOiBtYXJrZXJDb25maWdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc291bmQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlcyBwbGF5aW5nIHNvdW5kIG9uIHRoZSBmbHkgd2l0aG91dCB0aGUgbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0LlxyXG4gICAgICogU291bmQgd2lsbCBhdXRvIGRlc3Ryb3kgb25jZSBpdHMgcGxheWJhY2sgZW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3BsYXlcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5Tb3VuZC5FdmVudHMjQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBc3NldCBrZXkgZm9yIHRoZSBzb3VuZC5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5Tb3VuZC5Tb3VuZENvbmZpZ3xQaGFzZXIuVHlwZXMuU291bmQuU291bmRNYXJrZXIpfSBbZXh0cmFdIC0gQW4gb3B0aW9uYWwgYWRkaXRpb25hbCBvYmplY3QgY29udGFpbmluZyBzZXR0aW5ncyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzb3VuZC4gSXQgY291bGQgYmUgZWl0aGVyIGNvbmZpZyBvciBtYXJrZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHN0YXJ0ZWQgcGxheWluZyBzdWNjZXNzZnVsbHkuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChrZXksIGV4dHJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzb3VuZCA9IHRoaXMuYWRkKGtleSk7XHJcblxyXG4gICAgICAgIHNvdW5kLm9uY2UoRXZlbnRzLkNPTVBMRVRFLCBzb3VuZC5kZXN0cm95LCBzb3VuZCk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChleHRyYS5uYW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzb3VuZC5hZGRNYXJrZXIoZXh0cmEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VuZC5wbGF5KGV4dHJhLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdW5kLnBsYXkoZXh0cmEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgcGxheWluZyBhdWRpbyBzcHJpdGUgc291bmQgb24gdGhlIGZseSB3aXRob3V0IHRoZSBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuXHJcbiAgICAgKiBTb3VuZCB3aWxsIGF1dG8gZGVzdHJveSBvbmNlIGl0cyBwbGF5YmFjayBlbmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjcGxheUF1ZGlvU3ByaXRlXHJcbiAgICAgKiBAbGlzdGVucyBQaGFzZXIuU291bmQuRXZlbnRzI0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gQXNzZXQga2V5IGZvciB0aGUgc291bmQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ByaXRlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzb3VuZCBzcHJpdGUgdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfSBbY29uZmlnXSAtIEFuIG9wdGlvbmFsIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNvdW5kIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGF1ZGlvIHNwcml0ZSBzb3VuZCBzdGFydGVkIHBsYXlpbmcgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBwbGF5QXVkaW9TcHJpdGU6IGZ1bmN0aW9uIChrZXksIHNwcml0ZU5hbWUsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc291bmQgPSB0aGlzLmFkZEF1ZGlvU3ByaXRlKGtleSk7XHJcblxyXG4gICAgICAgIHNvdW5kLm9uY2UoRXZlbnRzLkNPTVBMRVRFLCBzb3VuZC5kZXN0cm95LCBzb3VuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzb3VuZC5wbGF5KHNwcml0ZU5hbWUsIGNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHNvdW5kIGZyb20gdGhlIHNvdW5kIG1hbmFnZXIuXHJcbiAgICAgKiBUaGUgcmVtb3ZlZCBzb3VuZCBpcyBkZXN0cm95ZWQgYmVmb3JlIHJlbW92YWwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNvdW5kLkJhc2VTb3VuZH0gc291bmQgLSBUaGUgc291bmQgb2JqZWN0IHRvIHJlbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzb3VuZCB3YXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoc291bmQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5zb3VuZHMuaW5kZXhPZihzb3VuZCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzb3VuZC5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdW5kcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgc291bmRzIGZyb20gdGhlIHNvdW5kIG1hbmFnZXIgdGhhdCBoYXZlIGFuIGFzc2V0IGtleSBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKiBUaGUgcmVtb3ZlZCBzb3VuZHMgYXJlIGRlc3Ryb3llZCBiZWZvcmUgcmVtb3ZhbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3JlbW92ZUJ5S2V5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBtYXRjaCB3aGVuIHJlbW92aW5nIHNvdW5kIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1hdGNoaW5nIHNvdW5kIG9iamVjdHMgdGhhdCB3ZXJlIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUJ5S2V5OiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW1vdmVkID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc291bmRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNvdW5kID0gdGhpcy5zb3VuZHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoc291bmQua2V5ID09PSBrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kcy5zcGxpY2UoaSwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZXMgYWxsIHRoZSBzb3VuZHMgaW4gdGhlIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNwYXVzZUFsbFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjUEFVU0VfQUxMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcGF1c2VBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mb3JFYWNoQWN0aXZlU291bmQoZnVuY3Rpb24gKHNvdW5kKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc291bmQucGF1c2UoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5QQVVTRV9BTEwsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgYWxsIHRoZSBzb3VuZHMgaW4gdGhlIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNyZXN1bWVBbGxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1JFU1VNRV9BTExcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXN1bWVBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mb3JFYWNoQWN0aXZlU291bmQoZnVuY3Rpb24gKHNvdW5kKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc291bmQucmVzdW1lKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVTVU1FX0FMTCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgYWxsIHRoZSBzb3VuZHMgaW4gdGhlIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNzdG9wQWxsXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNTVE9QX0FMTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mb3JFYWNoQWN0aXZlU291bmQoZnVuY3Rpb24gKHNvdW5kKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc291bmQuc3RvcCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlNUT1BfQUxMLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdXNlZCBpbnRlcm5hbGx5IGZvciB1bmxvY2tpbmcgYXVkaW8gcGxheWJhY2sgb24gZGV2aWNlcyB0aGF0XHJcbiAgICAgKiByZXF1aXJlIHVzZXIgaW50ZXJhY3Rpb24gYmVmb3JlIGFueSBzb3VuZCBjYW4gYmUgcGxheWVkIG9uIGEgd2ViIHBhZ2UuXHJcbiAgICAgKlxyXG4gICAgICogUmVhZCBtb3JlIGFib3V0IGhvdyB0aGlzIGlzc3VlIGlzIGhhbmRsZWQgaGVyZSBpbiBbdGhpcyBhcnRpY2xlXShodHRwczovL21lZGl1bS5jb20vQHBnb2xvc2tva292aWMvdW5sb2NraW5nLXdlYi1hdWRpby10aGUtc21hcnRlci13YXktODg1ODIxOGMwZTA5KS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3VubG9ja1xyXG4gICAgICogQG92ZXJyaWRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdW5sb2NrOiBOT09QLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgcGF1c2luZyBzb3VuZCBtYW5hZ2VyIGlmXHJcbiAgICAgKiBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNwYXVzZU9uQmx1ciBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI29uQmx1clxyXG4gICAgICogQG92ZXJyaWRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25CbHVyOiBOT09QLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgcmVzdW1pbmcgc291bmQgbWFuYWdlciBpZlxyXG4gICAgICogUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjcGF1c2VPbkJsdXIgaXMgc2V0IHRvIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNvbkZvY3VzXHJcbiAgICAgKiBAb3ZlcnJpZGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkZvY3VzOiBOT09QLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1ldGhvZCBjYWxsZWQgb24gZXZlcnkgZ2FtZSBzdGVwLlxyXG4gICAgICogUmVtb3ZlcyBkZXN0cm95ZWQgc291bmRzIGFuZCB1cGRhdGVzIGV2ZXJ5IGFjdGl2ZSBzb3VuZCBpbiB0aGUgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3VwZGF0ZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjVU5MT0NLRURcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnVubG9ja2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51bmxvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5VTkxPQ0tFRCwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zb3VuZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3VuZHNbaV0ucGVuZGluZ1JlbW92ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VuZHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdW5kLnVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgYWxsIHRoZSBzb3VuZHMgaW4gdGhlIGdhbWUgYW5kIGFsbCBhc3NvY2lhdGVkIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9yRWFjaEFjdGl2ZVNvdW5kKGZ1bmN0aW9uIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdW5kLmRlc3Ryb3koKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3VuZHMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLnNvdW5kcyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgaXRlcmF0aW5nIG9ubHkgb3ZlciBhY3RpdmUgc291bmRzIGFuZCBza2lwcGluZyBzb3VuZHMgdGhhdCBhcmUgbWFya2VkIGZvciByZW1vdmFsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXIjZm9yRWFjaEFjdGl2ZVNvdW5kXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuU291bmQuRWFjaEFjdGl2ZVNvdW5kQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uIChtYW5hZ2VyOiBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciwgc291bmQ6IFBoYXNlci5Tb3VuZC5CYXNlU291bmQsIGluZGV4OiBudW1iZXIsIHNvdW5kczogUGhhc2VyLk1hbmFnZXIuQmFzZVNvdW5kW10pID0+IHZvaWRcclxuICAgICAqIEBwYXJhbSB7Kn0gW3Njb3BlXSAtIENhbGxiYWNrIGNvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIGZvckVhY2hBY3RpdmVTb3VuZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBzY29wZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VuZCwgaW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc291bmQgJiYgIXNvdW5kLnBlbmRpbmdSZW1vdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUgfHwgX3RoaXMsIHNvdW5kLCBpbmRleCwgX3RoaXMuc291bmRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGdsb2JhbCBwbGF5YmFjayByYXRlIGF0IHdoaWNoIGFsbCB0aGUgc291bmRzIHdpbGwgYmUgcGxheWVkLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlLCBhIHZhbHVlIG9mIDEuMCBwbGF5cyB0aGUgYXVkaW8gYXQgZnVsbCBzcGVlZCwgMC41IHBsYXlzIHRoZSBhdWRpbyBhdCBoYWxmIHNwZWVkXHJcbiAgICAgKiBhbmQgMi4wIGRvdWJsZXMgdGhlIGF1ZGlvcyBwbGF5YmFjayBzcGVlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3NldFJhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0dMT0JBTF9SQVRFXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBHbG9iYWwgcGxheWJhY2sgcmF0ZSBhdCB3aGljaCBhbGwgdGhlIHNvdW5kcyB3aWxsIGJlIHBsYXllZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn0gVGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXRSYXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yYXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdsb2JhbCBwbGF5YmFjayByYXRlIGF0IHdoaWNoIGFsbCB0aGUgc291bmRzIHdpbGwgYmUgcGxheWVkLlxyXG4gICAgICogVmFsdWUgb2YgMS4wIHBsYXlzIHRoZSBhdWRpbyBhdCBmdWxsIHNwZWVkLCAwLjUgcGxheXMgdGhlIGF1ZGlvIGF0IGhhbGYgc3BlZWRcclxuICAgICAqIGFuZCAyLjAgZG91YmxlcyB0aGUgYXVkaW8ncyBwbGF5YmFjayBzcGVlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNyYXRlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJhdGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JhdGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hBY3RpdmVTb3VuZChmdW5jdGlvbiAoc291bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLmNhbGN1bGF0ZVJhdGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdMT0JBTF9SQVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBnbG9iYWwgZGV0dW5pbmcgb2YgYWxsIHNvdW5kcyBpbiBbY2VudHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRfJTI4bXVzaWMlMjkpLlxyXG4gICAgICogVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyI3NldERldHVuZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX0RFVFVORVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn0gVGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXREZXR1bmU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRldHVuZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHbG9iYWwgZGV0dW5pbmcgb2YgYWxsIHNvdW5kcyBpbiBbY2VudHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRfJTI4bXVzaWMlMjkpLlxyXG4gICAgICogVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNkZXR1bmVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGV0dW5lOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXR1bmU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kZXR1bmUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZm9yRWFjaEFjdGl2ZVNvdW5kKGZ1bmN0aW9uIChzb3VuZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc291bmQuY2FsY3VsYXRlUmF0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0xPQkFMX0RFVFVORSwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZVNvdW5kTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/BaseSoundManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/SoundManagerCreator.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/sound/SoundManagerCreator.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HTML5AudioSoundManager = __webpack_require__(/*! ./html5/HTML5AudioSoundManager */ \"./node_modules/phaser/src/sound/html5/HTML5AudioSoundManager.js\");\r\nvar NoAudioSoundManager = __webpack_require__(/*! ./noaudio/NoAudioSoundManager */ \"./node_modules/phaser/src/sound/noaudio/NoAudioSoundManager.js\");\r\nvar WebAudioSoundManager = __webpack_require__(/*! ./webaudio/WebAudioSoundManager */ \"./node_modules/phaser/src/sound/webaudio/WebAudioSoundManager.js\");\r\n\r\n/**\r\n * Creates a Web Audio, HTML5 Audio or No Audio Sound Manager based on config and device settings.\r\n *\r\n * Be aware of https://developers.google.com/web/updates/2017/09/autoplay-policy-changes\r\n *\r\n * @function Phaser.Sound.SoundManagerCreator\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - Reference to the current game instance.\r\n */\r\nvar SoundManagerCreator = {\r\n\r\n    create: function (game)\r\n    {\r\n        var audioConfig = game.config.audio;\r\n        var deviceAudio = game.device.audio;\r\n\r\n        if ((audioConfig && audioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n        {\r\n            return new NoAudioSoundManager(game);\r\n        }\r\n\r\n        if (deviceAudio.webAudio && !(audioConfig && audioConfig.disableWebAudio))\r\n        {\r\n            return new WebAudioSoundManager(game);\r\n        }\r\n\r\n        return new HTML5AudioSoundManager(game);\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = SoundManagerCreator;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXJDcmVhdG9yLmpzPzk5NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsdUdBQWdDO0FBQ3JFLDBCQUEwQixtQkFBTyxDQUFDLHFHQUErQjtBQUNqRSwyQkFBMkIsbUJBQU8sQ0FBQyx5R0FBaUM7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvU291bmRNYW5hZ2VyQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSFRNTDVBdWRpb1NvdW5kTWFuYWdlciA9IHJlcXVpcmUoJy4vaHRtbDUvSFRNTDVBdWRpb1NvdW5kTWFuYWdlcicpO1xyXG52YXIgTm9BdWRpb1NvdW5kTWFuYWdlciA9IHJlcXVpcmUoJy4vbm9hdWRpby9Ob0F1ZGlvU291bmRNYW5hZ2VyJyk7XHJcbnZhciBXZWJBdWRpb1NvdW5kTWFuYWdlciA9IHJlcXVpcmUoJy4vd2ViYXVkaW8vV2ViQXVkaW9Tb3VuZE1hbmFnZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgV2ViIEF1ZGlvLCBIVE1MNSBBdWRpbyBvciBObyBBdWRpbyBTb3VuZCBNYW5hZ2VyIGJhc2VkIG9uIGNvbmZpZyBhbmQgZGV2aWNlIHNldHRpbmdzLlxyXG4gKlxyXG4gKiBCZSBhd2FyZSBvZiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvdXBkYXRlcy8yMDE3LzA5L2F1dG9wbGF5LXBvbGljeS1jaGFuZ2VzXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuU291bmQuU291bmRNYW5hZ2VyQ3JlYXRvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnYW1lIGluc3RhbmNlLlxyXG4gKi9cclxudmFyIFNvdW5kTWFuYWdlckNyZWF0b3IgPSB7XHJcblxyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgYXVkaW9Db25maWcgPSBnYW1lLmNvbmZpZy5hdWRpbztcclxuICAgICAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICAgICAgaWYgKChhdWRpb0NvbmZpZyAmJiBhdWRpb0NvbmZpZy5ub0F1ZGlvKSB8fCAoIWRldmljZUF1ZGlvLndlYkF1ZGlvICYmICFkZXZpY2VBdWRpby5hdWRpb0RhdGEpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb0F1ZGlvU291bmRNYW5hZ2VyKGdhbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRldmljZUF1ZGlvLndlYkF1ZGlvICYmICEoYXVkaW9Db25maWcgJiYgYXVkaW9Db25maWcuZGlzYWJsZVdlYkF1ZGlvKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXVkaW9Tb3VuZE1hbmFnZXIoZ2FtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIoZ2FtZSk7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTb3VuZE1hbmFnZXJDcmVhdG9yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/SoundManagerCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/COMPLETE_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/COMPLETE_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Complete Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they complete playback.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('complete', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('complete', listener);\r\n * music.play();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvQ09NUExFVEVfRVZFTlQuanM/YTNlZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBEQUEwRDtBQUNyRTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvZXZlbnRzL0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhleSBjb21wbGV0ZSBwbGF5YmFjay5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU291bmQgaW5zdGFuY2UgdXNpbmcgYFNvdW5kLm9uKCdjb21wbGV0ZScsIGxpc3RlbmVyKWAsIGkuZS46XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBtdXNpYyA9IHRoaXMuc291bmQuYWRkKCdrZXknKTtcclxuICogbXVzaWMub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNDT01QTEVURVxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZHxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kKX0gc291bmQgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/DECODED_ALL_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/DECODED_ALL_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Audio Data Decoded All Event.\r\n * \r\n * This event is dispatched by the Web Audio Sound Manager as a result of calling the `decodeAudio` method,\r\n * once all files passed to the method have been decoded (or errored).\r\n * \r\n * Use `Phaser.Sound.Events#DECODED` to listen for single sounds being decoded, and `DECODED_ALL` to\r\n * listen for them all completing.\r\n * \r\n * Listen to it from the Sound Manager in a Scene using `this.sound.on('decodedall', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * this.sound.once('decodedall', handler);\r\n * this.sound.decodeAudio([ audioFiles ]);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#DECODED_ALL\r\n * @since 3.18.0\r\n */\r\nmodule.exports = 'decodedall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvREVDT0RFRF9BTExfRVZFTlQuanM/YWQ3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9ERUNPREVEX0FMTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBdWRpbyBEYXRhIERlY29kZWQgQWxsIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBXZWIgQXVkaW8gU291bmQgTWFuYWdlciBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBgZGVjb2RlQXVkaW9gIG1ldGhvZCxcclxuICogb25jZSBhbGwgZmlsZXMgcGFzc2VkIHRvIHRoZSBtZXRob2QgaGF2ZSBiZWVuIGRlY29kZWQgKG9yIGVycm9yZWQpLlxyXG4gKiBcclxuICogVXNlIGBQaGFzZXIuU291bmQuRXZlbnRzI0RFQ09ERURgIHRvIGxpc3RlbiBmb3Igc2luZ2xlIHNvdW5kcyBiZWluZyBkZWNvZGVkLCBhbmQgYERFQ09ERURfQUxMYCB0b1xyXG4gKiBsaXN0ZW4gZm9yIHRoZW0gYWxsIGNvbXBsZXRpbmcuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSB0aGUgU291bmQgTWFuYWdlciBpbiBhIFNjZW5lIHVzaW5nIGB0aGlzLnNvdW5kLm9uKCdkZWNvZGVkYWxsJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5zb3VuZC5vbmNlKCdkZWNvZGVkYWxsJywgaGFuZGxlcik7XHJcbiAqIHRoaXMuc291bmQuZGVjb2RlQXVkaW8oWyBhdWRpb0ZpbGVzIF0pO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjREVDT0RFRF9BTExcclxuICogQHNpbmNlIDMuMTguMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZGVjb2RlZGFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/DECODED_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/DECODED_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/DECODED_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Audio Data Decoded Event.\r\n * \r\n * This event is dispatched by the Web Audio Sound Manager as a result of calling the `decodeAudio` method.\r\n * \r\n * Listen to it from the Sound Manager in a Scene using `this.sound.on('decoded', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * this.sound.on('decoded', handler);\r\n * this.sound.decodeAudio(key, audioData);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#DECODED\r\n * @since 3.18.0\r\n * \r\n * @param {string} key - The key of the audio file that was decoded and added to the audio cache.\r\n */\r\nmodule.exports = 'decoded';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvREVDT0RFRF9FVkVOVC5qcz9lY2ZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9ERUNPREVEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEF1ZGlvIERhdGEgRGVjb2RlZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgV2ViIEF1ZGlvIFNvdW5kIE1hbmFnZXIgYXMgYSByZXN1bHQgb2YgY2FsbGluZyB0aGUgYGRlY29kZUF1ZGlvYCBtZXRob2QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSB0aGUgU291bmQgTWFuYWdlciBpbiBhIFNjZW5lIHVzaW5nIGB0aGlzLnNvdW5kLm9uKCdkZWNvZGVkJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5zb3VuZC5vbignZGVjb2RlZCcsIGhhbmRsZXIpO1xyXG4gKiB0aGlzLnNvdW5kLmRlY29kZUF1ZGlvKGtleSwgYXVkaW9EYXRhKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU291bmQuRXZlbnRzI0RFQ09ERURcclxuICogQHNpbmNlIDMuMTguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGF1ZGlvIGZpbGUgdGhhdCB3YXMgZGVjb2RlZCBhbmQgYWRkZWQgdG8gdGhlIGF1ZGlvIGNhY2hlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZGVjb2RlZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/DECODED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/DESTROY_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/DESTROY_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Destroy Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are destroyed, either\r\n * directly or via a Sound Manager.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('destroy', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('destroy', listener);\r\n * music.destroy();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz9lNjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckU7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIERlc3Ryb3kgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYm90aCBXZWIgQXVkaW8gYW5kIEhUTUw1IEF1ZGlvIFNvdW5kIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBkZXN0cm95ZWQsIGVpdGhlclxyXG4gKiBkaXJlY3RseSBvciB2aWEgYSBTb3VuZCBNYW5hZ2VyLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTb3VuZCBpbnN0YW5jZSB1c2luZyBgU291bmQub24oJ2Rlc3Ryb3knLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdkZXN0cm95JywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5kZXN0cm95KCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXN0cm95JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/DESTROY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/DETUNE_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/DETUNE_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Detune Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when their detune value changes.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('detune', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('detune', listener);\r\n * music.play();\r\n * music.setDetune(200);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#DETUNE\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {number} detune - The new detune value of the Sound.\r\n */\r\nmodule.exports = 'detune';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvREVUVU5FX0VWRU5ULmpzPzhmNTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBEQUEwRDtBQUNyRSxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9ERVRVTkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU291bmQgRGV0dW5lIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhlaXIgZGV0dW5lIHZhbHVlIGNoYW5nZXMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNvdW5kIGluc3RhbmNlIHVzaW5nIGBTb3VuZC5vbignZGV0dW5lJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIG11c2ljID0gdGhpcy5zb3VuZC5hZGQoJ2tleScpO1xyXG4gKiBtdXNpYy5vbignZGV0dW5lJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIG11c2ljLnNldERldHVuZSgyMDApO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjREVUVU5FXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXR1bmUgLSBUaGUgbmV3IGRldHVuZSB2YWx1ZSBvZiB0aGUgU291bmQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXR1bmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/DETUNE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/GLOBAL_DETUNE_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/GLOBAL_DETUNE_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Manager Global Detune Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched when the `detune` property of the Sound Manager is changed, which globally\r\n * adjusts the detuning of all active sounds.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('rate', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#GLOBAL_DETUNE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n * @param {number} detune - The updated detune value.\r\n */\r\nmodule.exports = 'detune';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX0RFVFVORV9FVkVOVC5qcz9jOGJmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9HTE9CQUxfREVUVU5FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIE1hbmFnZXIgR2xvYmFsIERldHVuZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgQmFzZSBTb3VuZCBNYW5hZ2VyLCBvciBtb3JlIHR5cGljYWxseSwgYW4gaW5zdGFuY2Ugb2YgdGhlIFdlYiBBdWRpbyBTb3VuZCBNYW5hZ2VyLFxyXG4gKiBvciB0aGUgSFRNTDUgQXVkaW8gTWFuYWdlci4gSXQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBgZGV0dW5lYCBwcm9wZXJ0eSBvZiB0aGUgU291bmQgTWFuYWdlciBpcyBjaGFuZ2VkLCB3aGljaCBnbG9iYWxseVxyXG4gKiBhZGp1c3RzIHRoZSBkZXR1bmluZyBvZiBhbGwgYWN0aXZlIHNvdW5kcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCdyYXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX0RFVFVORVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXJ9IHNvdW5kTWFuYWdlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBzb3VuZCBtYW5hZ2VyIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXR1bmUgLSBUaGUgdXBkYXRlZCBkZXR1bmUgdmFsdWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXR1bmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/GLOBAL_DETUNE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/GLOBAL_MUTE_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/GLOBAL_MUTE_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Manager Global Mute Event.\r\n * \r\n * This event is dispatched by the Sound Manager when its `mute` property is changed, either directly\r\n * or via the `setMute` method. This changes the mute state of all active sounds.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('mute', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#GLOBAL_MUTE\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager)} soundManager - A reference to the Sound Manager that emitted the event.\r\n * @param {boolean} mute - The mute value. `true` if the Sound Manager is now muted, otherwise `false`.\r\n */\r\nmodule.exports = 'mute';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX01VVEVfRVZFTlQuanM/YWI0NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0VBQXdFO0FBQ25GLFdBQVcsUUFBUTtBQUNuQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvZXZlbnRzL0dMT0JBTF9NVVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIE1hbmFnZXIgR2xvYmFsIE11dGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIFNvdW5kIE1hbmFnZXIgd2hlbiBpdHMgYG11dGVgIHByb3BlcnR5IGlzIGNoYW5nZWQsIGVpdGhlciBkaXJlY3RseVxyXG4gKiBvciB2aWEgdGhlIGBzZXRNdXRlYCBtZXRob2QuIFRoaXMgY2hhbmdlcyB0aGUgbXV0ZSBzdGF0ZSBvZiBhbGwgYWN0aXZlIHNvdW5kcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCdtdXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX01VVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXJ8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIpfSBzb3VuZE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgTWFuYWdlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG11dGUgLSBUaGUgbXV0ZSB2YWx1ZS4gYHRydWVgIGlmIHRoZSBTb3VuZCBNYW5hZ2VyIGlzIG5vdyBtdXRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdtdXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/GLOBAL_MUTE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/GLOBAL_RATE_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/GLOBAL_RATE_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Manager Global Rate Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched when the `rate` property of the Sound Manager is changed, which globally\r\n * adjusts the playback rate of all active sounds.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('rate', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#GLOBAL_RATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n * @param {number} rate - The updated rate value.\r\n */\r\nmodule.exports = 'rate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX1JBVEVfRVZFTlQuanM/NGM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX1JBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU291bmQgTWFuYWdlciBHbG9iYWwgUmF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgQmFzZSBTb3VuZCBNYW5hZ2VyLCBvciBtb3JlIHR5cGljYWxseSwgYW4gaW5zdGFuY2Ugb2YgdGhlIFdlYiBBdWRpbyBTb3VuZCBNYW5hZ2VyLFxyXG4gKiBvciB0aGUgSFRNTDUgQXVkaW8gTWFuYWdlci4gSXQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBgcmF0ZWAgcHJvcGVydHkgb2YgdGhlIFNvdW5kIE1hbmFnZXIgaXMgY2hhbmdlZCwgd2hpY2ggZ2xvYmFsbHlcclxuICogYWRqdXN0cyB0aGUgcGxheWJhY2sgcmF0ZSBvZiBhbGwgYWN0aXZlIHNvdW5kcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCdyYXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX1JBVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyfSBzb3VuZE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgc291bmQgbWFuYWdlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmF0ZSAtIFRoZSB1cGRhdGVkIHJhdGUgdmFsdWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/GLOBAL_RATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/GLOBAL_VOLUME_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/GLOBAL_VOLUME_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Manager Global Volume Event.\r\n * \r\n * This event is dispatched by the Sound Manager when its `volume` property is changed, either directly\r\n * or via the `setVolume` method. This changes the volume of all active sounds.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('volume', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#GLOBAL_VOLUME\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager)} soundManager - A reference to the sound manager that emitted the event.\r\n * @param {number} volume - The new global volume of the Sound Manager.\r\n */\r\nmodule.exports = 'volume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX1ZPTFVNRV9FVkVOVC5qcz9iNzliIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3RUFBd0U7QUFDbkYsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvR0xPQkFMX1ZPTFVNRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBNYW5hZ2VyIEdsb2JhbCBWb2x1bWUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIFNvdW5kIE1hbmFnZXIgd2hlbiBpdHMgYHZvbHVtZWAgcHJvcGVydHkgaXMgY2hhbmdlZCwgZWl0aGVyIGRpcmVjdGx5XHJcbiAqIG9yIHZpYSB0aGUgYHNldFZvbHVtZWAgbWV0aG9kLiBUaGlzIGNoYW5nZXMgdGhlIHZvbHVtZSBvZiBhbGwgYWN0aXZlIHNvdW5kcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCd2b2x1bWUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNHTE9CQUxfVk9MVU1FXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyfFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyKX0gc291bmRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIHNvdW5kIG1hbmFnZXIgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSAtIFRoZSBuZXcgZ2xvYmFsIHZvbHVtZSBvZiB0aGUgU291bmQgTWFuYWdlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ZvbHVtZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/GLOBAL_VOLUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/LOOPED_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/LOOPED_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Looped Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they loop during playback.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('looped', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('looped', listener);\r\n * music.setLoop(true);\r\n * music.play();\r\n * ```\r\n * \r\n * This is not to be confused with the [LOOP]{@linkcode Phaser.Sound.Events#event:LOOP} event, which only emits when the loop state of a Sound is changed.\r\n *\r\n * @event Phaser.Sound.Events#LOOPED\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'looped';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvTE9PUEVEX0VWRU5ULmpzPzVlOWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMseUNBQXlDO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckU7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9MT09QRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU291bmQgTG9vcGVkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhleSBsb29wIGR1cmluZyBwbGF5YmFjay5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU291bmQgaW5zdGFuY2UgdXNpbmcgYFNvdW5kLm9uKCdsb29wZWQnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdsb29wZWQnLCBsaXN0ZW5lcik7XHJcbiAqIG11c2ljLnNldExvb3AodHJ1ZSk7XHJcbiAqIG11c2ljLnBsYXkoKTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBUaGlzIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBbTE9PUF17QGxpbmtjb2RlIFBoYXNlci5Tb3VuZC5FdmVudHMjZXZlbnQ6TE9PUH0gZXZlbnQsIHdoaWNoIG9ubHkgZW1pdHMgd2hlbiB0aGUgbG9vcCBzdGF0ZSBvZiBhIFNvdW5kIGlzIGNoYW5nZWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU291bmQuRXZlbnRzI0xPT1BFRFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kfFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQpfSBzb3VuZCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTb3VuZCB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnbG9vcGVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/LOOPED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/LOOP_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/LOOP_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Loop Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when their loop state is changed.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('loop', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('loop', listener);\r\n * music.setLoop(true);\r\n * ```\r\n * \r\n * This is not to be confused with the [LOOPED]{@linkcode Phaser.Sound.Events#event:LOOPED} event, which emits each time a Sound loops during playback.\r\n *\r\n * @event Phaser.Sound.Events#LOOP\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {boolean} loop - The new loop value. `true` if the Sound will loop, otherwise `false`.\r\n */\r\nmodule.exports = 'loop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvTE9PUF9FVkVOVC5qcz80YjIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCwyQ0FBMkM7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBEQUEwRDtBQUNyRSxXQUFXLFFBQVE7QUFDbkI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9MT09QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIExvb3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYm90aCBXZWIgQXVkaW8gYW5kIEhUTUw1IEF1ZGlvIFNvdW5kIG9iamVjdHMgd2hlbiB0aGVpciBsb29wIHN0YXRlIGlzIGNoYW5nZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNvdW5kIGluc3RhbmNlIHVzaW5nIGBTb3VuZC5vbignbG9vcCcsIGxpc3RlbmVyKWAsIGkuZS46XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBtdXNpYyA9IHRoaXMuc291bmQuYWRkKCdrZXknKTtcclxuICogbXVzaWMub24oJ2xvb3AnLCBsaXN0ZW5lcik7XHJcbiAqIG11c2ljLnNldExvb3AodHJ1ZSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogVGhpcyBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgW0xPT1BFRF17QGxpbmtjb2RlIFBoYXNlci5Tb3VuZC5FdmVudHMjZXZlbnQ6TE9PUEVEfSBldmVudCwgd2hpY2ggZW1pdHMgZWFjaCB0aW1lIGEgU291bmQgbG9vcHMgZHVyaW5nIHBsYXliYWNrLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNMT09QXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9vcCAtIFRoZSBuZXcgbG9vcCB2YWx1ZS4gYHRydWVgIGlmIHRoZSBTb3VuZCB3aWxsIGxvb3AsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnbG9vcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/LOOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/MUTE_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/MUTE_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Mute Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when their mute state changes.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('mute', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('mute', listener);\r\n * music.play();\r\n * music.setMute(true);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#MUTE\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {boolean} mute - The mute value. `true` if the Sound is now muted, otherwise `false`.\r\n */\r\nmodule.exports = 'mute';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvTVVURV9FVkVOVC5qcz8xMThmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckUsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvTVVURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBNdXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhlaXIgbXV0ZSBzdGF0ZSBjaGFuZ2VzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTb3VuZCBpbnN0YW5jZSB1c2luZyBgU291bmQub24oJ211dGUnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdtdXRlJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIG11c2ljLnNldE11dGUodHJ1ZSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNNVVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbXV0ZSAtIFRoZSBtdXRlIHZhbHVlLiBgdHJ1ZWAgaWYgdGhlIFNvdW5kIGlzIG5vdyBtdXRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdtdXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/MUTE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/PAUSE_ALL_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/PAUSE_ALL_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pause All Sounds Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched when the `pauseAll` method is invoked and after all current Sounds\r\n * have been paused.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('pauseall', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#PAUSE_ALL\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n */\r\nmodule.exports = 'pauseall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUEFVU0VfQUxMX0VWRU5ULmpzPzliMTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUEFVU0VfQUxMX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBhdXNlIEFsbCBTb3VuZHMgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEJhc2UgU291bmQgTWFuYWdlciwgb3IgbW9yZSB0eXBpY2FsbHksIGFuIGluc3RhbmNlIG9mIHRoZSBXZWIgQXVkaW8gU291bmQgTWFuYWdlcixcclxuICogb3IgdGhlIEhUTUw1IEF1ZGlvIE1hbmFnZXIuIEl0IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgYHBhdXNlQWxsYCBtZXRob2QgaXMgaW52b2tlZCBhbmQgYWZ0ZXIgYWxsIGN1cnJlbnQgU291bmRzXHJcbiAqIGhhdmUgYmVlbiBwYXVzZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5zb3VuZC5vbigncGF1c2VhbGwnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNQQVVTRV9BTExcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyfSBzb3VuZE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgc291bmQgbWFuYWdlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncGF1c2VhbGwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/PAUSE_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/PAUSE_EVENT.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/PAUSE_EVENT.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Pause Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are paused.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('pause', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('pause', listener);\r\n * music.play();\r\n * music.pause();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#PAUSE\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUEFVU0VfRVZFTlQuanM/NjRjMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMERBQTBEO0FBQ3JFO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUEFVU0VfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU291bmQgUGF1c2UgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYm90aCBXZWIgQXVkaW8gYW5kIEhUTUw1IEF1ZGlvIFNvdW5kIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBwYXVzZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNvdW5kIGluc3RhbmNlIHVzaW5nIGBTb3VuZC5vbigncGF1c2UnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdwYXVzZScsIGxpc3RlbmVyKTtcclxuICogbXVzaWMucGxheSgpO1xyXG4gKiBtdXNpYy5wYXVzZSgpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjUEFVU0VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZHxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kKX0gc291bmQgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/PLAY_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/PLAY_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Play Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are played.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('play', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('play', listener);\r\n * music.play();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#PLAY\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'play';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUExBWV9FVkVOVC5qcz9lZjcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMERBQTBEO0FBQ3JFO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUExBWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBQbGF5IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhleSBhcmUgcGxheWVkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTb3VuZCBpbnN0YW5jZSB1c2luZyBgU291bmQub24oJ3BsYXknLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdwbGF5JywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNQTEFZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwbGF5JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/PLAY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/RATE_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/RATE_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Rate Change Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when their rate changes.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('rate', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('rate', listener);\r\n * music.play();\r\n * music.setRate(0.5);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#RATE\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {number} rate - The new rate of the Sound.\r\n */\r\nmodule.exports = 'rate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUkFURV9FVkVOVC5qcz80ZDBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckUsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUkFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBSYXRlIENoYW5nZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBib3RoIFdlYiBBdWRpbyBhbmQgSFRNTDUgQXVkaW8gU291bmQgb2JqZWN0cyB3aGVuIHRoZWlyIHJhdGUgY2hhbmdlcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU291bmQgaW5zdGFuY2UgdXNpbmcgYFNvdW5kLm9uKCdyYXRlJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIG11c2ljID0gdGhpcy5zb3VuZC5hZGQoJ2tleScpO1xyXG4gKiBtdXNpYy5vbigncmF0ZScsIGxpc3RlbmVyKTtcclxuICogbXVzaWMucGxheSgpO1xyXG4gKiBtdXNpYy5zZXRSYXRlKDAuNSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNSQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYXRlIC0gVGhlIG5ldyByYXRlIG9mIHRoZSBTb3VuZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3JhdGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/RATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/RESUME_ALL_EVENT.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/RESUME_ALL_EVENT.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Resume All Sounds Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched when the `resumeAll` method is invoked and after all current Sounds\r\n * have been resumed.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('resumeall', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#RESUME_ALL\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n */\r\nmodule.exports = 'resumeall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUkVTVU1FX0FMTF9FVkVOVC5qcz9mN2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvZXZlbnRzL1JFU1VNRV9BTExfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUmVzdW1lIEFsbCBTb3VuZHMgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEJhc2UgU291bmQgTWFuYWdlciwgb3IgbW9yZSB0eXBpY2FsbHksIGFuIGluc3RhbmNlIG9mIHRoZSBXZWIgQXVkaW8gU291bmQgTWFuYWdlcixcclxuICogb3IgdGhlIEhUTUw1IEF1ZGlvIE1hbmFnZXIuIEl0IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgYHJlc3VtZUFsbGAgbWV0aG9kIGlzIGludm9rZWQgYW5kIGFmdGVyIGFsbCBjdXJyZW50IFNvdW5kc1xyXG4gKiBoYXZlIGJlZW4gcmVzdW1lZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCdyZXN1bWVhbGwnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNSRVNVTUVfQUxMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn0gc291bmRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIHNvdW5kIG1hbmFnZXIgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZWFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/RESUME_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/RESUME_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/RESUME_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Resume Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are resumed from a paused state.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('resume', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('resume', listener);\r\n * music.play();\r\n * music.pause();\r\n * music.resume();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#RESUME\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUkVTVU1FX0VWRU5ULmpzPzI0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMERBQTBEO0FBQ3JFO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIFJlc3VtZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBib3RoIFdlYiBBdWRpbyBhbmQgSFRNTDUgQXVkaW8gU291bmQgb2JqZWN0cyB3aGVuIHRoZXkgYXJlIHJlc3VtZWQgZnJvbSBhIHBhdXNlZCBzdGF0ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU291bmQgaW5zdGFuY2UgdXNpbmcgYFNvdW5kLm9uKCdyZXN1bWUnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdyZXN1bWUnLCBsaXN0ZW5lcik7XHJcbiAqIG11c2ljLnBsYXkoKTtcclxuICogbXVzaWMucGF1c2UoKTtcclxuICogbXVzaWMucmVzdW1lKCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNSRVNVTUVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZHxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kKX0gc291bmQgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/SEEK_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/SEEK_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Seek Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are seeked to a new position.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('seek', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('seek', listener);\r\n * music.play();\r\n * music.setSeek(5000);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#SEEK\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {number} detune - The new detune value of the Sound.\r\n */\r\nmodule.exports = 'seek';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvU0VFS19FVkVOVC5qcz8yNGJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckUsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvU0VFS19FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBTZWVrIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhleSBhcmUgc2Vla2VkIHRvIGEgbmV3IHBvc2l0aW9uLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTb3VuZCBpbnN0YW5jZSB1c2luZyBgU291bmQub24oJ3NlZWsnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdzZWVrJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIG11c2ljLnNldFNlZWsoNTAwMCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlNvdW5kLkV2ZW50cyNTRUVLXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXR1bmUgLSBUaGUgbmV3IGRldHVuZSB2YWx1ZSBvZiB0aGUgU291bmQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzZWVrJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/SEEK_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/STOP_ALL_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/STOP_ALL_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Stop All Sounds Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched when the `stopAll` method is invoked and after all current Sounds\r\n * have been stopped.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('stopall', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#STOP_ALL\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n */\r\nmodule.exports = 'stopall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvU1RPUF9BTExfRVZFTlQuanM/NmJhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9TVE9QX0FMTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTdG9wIEFsbCBTb3VuZHMgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEJhc2UgU291bmQgTWFuYWdlciwgb3IgbW9yZSB0eXBpY2FsbHksIGFuIGluc3RhbmNlIG9mIHRoZSBXZWIgQXVkaW8gU291bmQgTWFuYWdlcixcclxuICogb3IgdGhlIEhUTUw1IEF1ZGlvIE1hbmFnZXIuIEl0IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgYHN0b3BBbGxgIG1ldGhvZCBpcyBpbnZva2VkIGFuZCBhZnRlciBhbGwgY3VycmVudCBTb3VuZHNcclxuICogaGF2ZSBiZWVuIHN0b3BwZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5zb3VuZC5vbignc3RvcGFsbCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU291bmQuRXZlbnRzI1NUT1BfQUxMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn0gc291bmRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIHNvdW5kIG1hbmFnZXIgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0b3BhbGwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/STOP_ALL_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/STOP_EVENT.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/STOP_EVENT.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Stop Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when they are stopped.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('stop', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('stop', listener);\r\n * music.play();\r\n * music.stop();\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#STOP\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n */\r\nmodule.exports = 'stop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvU1RPUF9FVkVOVC5qcz8yNWJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBMEQ7QUFDckU7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9TVE9QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNvdW5kIFN0b3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYm90aCBXZWIgQXVkaW8gYW5kIEhUTUw1IEF1ZGlvIFNvdW5kIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBzdG9wcGVkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTb3VuZCBpbnN0YW5jZSB1c2luZyBgU291bmQub24oJ3N0b3AnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbXVzaWMgPSB0aGlzLnNvdW5kLmFkZCgna2V5Jyk7XHJcbiAqIG11c2ljLm9uKCdzdG9wJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIG11c2ljLnN0b3AoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU291bmQuRXZlbnRzI1NUT1BcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZHxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kKX0gc291bmQgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0b3AnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/STOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/UNLOCKED_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/UNLOCKED_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Manager Unlocked Event.\r\n * \r\n * This event is dispatched by the Base Sound Manager, or more typically, an instance of the Web Audio Sound Manager,\r\n * or the HTML5 Audio Manager. It is dispatched during the update loop when the Sound Manager becomes unlocked. For\r\n * Web Audio this is on the first user gesture on the page.\r\n * \r\n * Listen to it from a Scene using: `this.sound.on('unlocked', listener)`.\r\n *\r\n * @event Phaser.Sound.Events#UNLOCKED\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Sound.BaseSoundManager} soundManager - A reference to the sound manager that emitted the event.\r\n */\r\nmodule.exports = 'unlocked';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvVU5MT0NLRURfRVZFTlQuanM/NzA4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9VTkxPQ0tFRF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTb3VuZCBNYW5hZ2VyIFVubG9ja2VkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBCYXNlIFNvdW5kIE1hbmFnZXIsIG9yIG1vcmUgdHlwaWNhbGx5LCBhbiBpbnN0YW5jZSBvZiB0aGUgV2ViIEF1ZGlvIFNvdW5kIE1hbmFnZXIsXHJcbiAqIG9yIHRoZSBIVE1MNSBBdWRpbyBNYW5hZ2VyLiBJdCBpcyBkaXNwYXRjaGVkIGR1cmluZyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgU291bmQgTWFuYWdlciBiZWNvbWVzIHVubG9ja2VkLiBGb3JcclxuICogV2ViIEF1ZGlvIHRoaXMgaXMgb24gdGhlIGZpcnN0IHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnNvdW5kLm9uKCd1bmxvY2tlZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU291bmQuRXZlbnRzI1VOTE9DS0VEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlcn0gc291bmRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIHNvdW5kIG1hbmFnZXIgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VubG9ja2VkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/UNLOCKED_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/VOLUME_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/VOLUME_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sound Volume Event.\r\n * \r\n * This event is dispatched by both Web Audio and HTML5 Audio Sound objects when their volume changes.\r\n * \r\n * Listen to it from a Sound instance using `Sound.on('volume', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var music = this.sound.add('key');\r\n * music.on('volume', listener);\r\n * music.play();\r\n * music.setVolume(0.5);\r\n * ```\r\n *\r\n * @event Phaser.Sound.Events#VOLUME\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSound|Phaser.Sound.HTML5AudioSound)} sound - A reference to the Sound that emitted the event.\r\n * @param {number} volume - The new volume of the Sound.\r\n */\r\nmodule.exports = 'volume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvVk9MVU1FX0VWRU5ULmpzPzMwZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBEQUEwRDtBQUNyRSxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9WT0xVTUVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgU291bmQgVm9sdW1lIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGJvdGggV2ViIEF1ZGlvIGFuZCBIVE1MNSBBdWRpbyBTb3VuZCBvYmplY3RzIHdoZW4gdGhlaXIgdm9sdW1lIGNoYW5nZXMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNvdW5kIGluc3RhbmNlIHVzaW5nIGBTb3VuZC5vbigndm9sdW1lJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIG11c2ljID0gdGhpcy5zb3VuZC5hZGQoJ2tleScpO1xyXG4gKiBtdXNpYy5vbigndm9sdW1lJywgbGlzdGVuZXIpO1xyXG4gKiBtdXNpYy5wbGF5KCk7XHJcbiAqIG11c2ljLnNldFZvbHVtZSgwLjUpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Tb3VuZC5FdmVudHMjVk9MVU1FXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCl9IHNvdW5kIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNvdW5kIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgLSBUaGUgbmV3IHZvbHVtZSBvZiB0aGUgU291bmQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICd2b2x1bWUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/VOLUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/events/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/sound/events/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Sound.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    COMPLETE: __webpack_require__(/*! ./COMPLETE_EVENT */ \"./node_modules/phaser/src/sound/events/COMPLETE_EVENT.js\"),\r\n    DECODED: __webpack_require__(/*! ./DECODED_EVENT */ \"./node_modules/phaser/src/sound/events/DECODED_EVENT.js\"),\r\n    DECODED_ALL: __webpack_require__(/*! ./DECODED_ALL_EVENT */ \"./node_modules/phaser/src/sound/events/DECODED_ALL_EVENT.js\"),\r\n    DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/sound/events/DESTROY_EVENT.js\"),\r\n    DETUNE: __webpack_require__(/*! ./DETUNE_EVENT */ \"./node_modules/phaser/src/sound/events/DETUNE_EVENT.js\"),\r\n    GLOBAL_DETUNE: __webpack_require__(/*! ./GLOBAL_DETUNE_EVENT */ \"./node_modules/phaser/src/sound/events/GLOBAL_DETUNE_EVENT.js\"),\r\n    GLOBAL_MUTE: __webpack_require__(/*! ./GLOBAL_MUTE_EVENT */ \"./node_modules/phaser/src/sound/events/GLOBAL_MUTE_EVENT.js\"),\r\n    GLOBAL_RATE: __webpack_require__(/*! ./GLOBAL_RATE_EVENT */ \"./node_modules/phaser/src/sound/events/GLOBAL_RATE_EVENT.js\"),\r\n    GLOBAL_VOLUME: __webpack_require__(/*! ./GLOBAL_VOLUME_EVENT */ \"./node_modules/phaser/src/sound/events/GLOBAL_VOLUME_EVENT.js\"),\r\n    LOOP: __webpack_require__(/*! ./LOOP_EVENT */ \"./node_modules/phaser/src/sound/events/LOOP_EVENT.js\"),\r\n    LOOPED: __webpack_require__(/*! ./LOOPED_EVENT */ \"./node_modules/phaser/src/sound/events/LOOPED_EVENT.js\"),\r\n    MUTE: __webpack_require__(/*! ./MUTE_EVENT */ \"./node_modules/phaser/src/sound/events/MUTE_EVENT.js\"),\r\n    PAUSE_ALL: __webpack_require__(/*! ./PAUSE_ALL_EVENT */ \"./node_modules/phaser/src/sound/events/PAUSE_ALL_EVENT.js\"),\r\n    PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/sound/events/PAUSE_EVENT.js\"),\r\n    PLAY: __webpack_require__(/*! ./PLAY_EVENT */ \"./node_modules/phaser/src/sound/events/PLAY_EVENT.js\"),\r\n    RATE: __webpack_require__(/*! ./RATE_EVENT */ \"./node_modules/phaser/src/sound/events/RATE_EVENT.js\"),\r\n    RESUME_ALL: __webpack_require__(/*! ./RESUME_ALL_EVENT */ \"./node_modules/phaser/src/sound/events/RESUME_ALL_EVENT.js\"),\r\n    RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/sound/events/RESUME_EVENT.js\"),\r\n    SEEK: __webpack_require__(/*! ./SEEK_EVENT */ \"./node_modules/phaser/src/sound/events/SEEK_EVENT.js\"),\r\n    STOP_ALL: __webpack_require__(/*! ./STOP_ALL_EVENT */ \"./node_modules/phaser/src/sound/events/STOP_ALL_EVENT.js\"),\r\n    STOP: __webpack_require__(/*! ./STOP_EVENT */ \"./node_modules/phaser/src/sound/events/STOP_EVENT.js\"),\r\n    UNLOCKED: __webpack_require__(/*! ./UNLOCKED_EVENT */ \"./node_modules/phaser/src/sound/events/UNLOCKED_EVENT.js\"),\r\n    VOLUME: __webpack_require__(/*! ./VOLUME_EVENT */ \"./node_modules/phaser/src/sound/events/VOLUME_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ldmVudHMvaW5kZXguanM/MDgwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLGdGQUFpQjtBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBcUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLGdGQUFpQjtBQUN0QyxZQUFZLG1CQUFPLENBQUMsOEVBQWdCO0FBQ3BDLG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBcUI7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsd0ZBQXFCO0FBQzlDLG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCxVQUFVLG1CQUFPLENBQUMsMEVBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLDhFQUFnQjtBQUNwQyxVQUFVLG1CQUFPLENBQUMsMEVBQWM7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLG9GQUFtQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsNEVBQWU7QUFDbEMsVUFBVSxtQkFBTyxDQUFDLDBFQUFjO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsWUFBWSxtQkFBTyxDQUFDLDhFQUFnQjtBQUNwQyxVQUFVLG1CQUFPLENBQUMsMEVBQWM7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLGtGQUFrQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsMEVBQWM7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLGtGQUFrQjtBQUN4QyxZQUFZLG1CQUFPLENBQUMsOEVBQWdCOztBQUVwQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlNvdW5kLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENPTVBMRVRFOiByZXF1aXJlKCcuL0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBERUNPREVEOiByZXF1aXJlKCcuL0RFQ09ERURfRVZFTlQnKSxcclxuICAgIERFQ09ERURfQUxMOiByZXF1aXJlKCcuL0RFQ09ERURfQUxMX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIERFVFVORTogcmVxdWlyZSgnLi9ERVRVTkVfRVZFTlQnKSxcclxuICAgIEdMT0JBTF9ERVRVTkU6IHJlcXVpcmUoJy4vR0xPQkFMX0RFVFVORV9FVkVOVCcpLFxyXG4gICAgR0xPQkFMX01VVEU6IHJlcXVpcmUoJy4vR0xPQkFMX01VVEVfRVZFTlQnKSxcclxuICAgIEdMT0JBTF9SQVRFOiByZXF1aXJlKCcuL0dMT0JBTF9SQVRFX0VWRU5UJyksXHJcbiAgICBHTE9CQUxfVk9MVU1FOiByZXF1aXJlKCcuL0dMT0JBTF9WT0xVTUVfRVZFTlQnKSxcclxuICAgIExPT1A6IHJlcXVpcmUoJy4vTE9PUF9FVkVOVCcpLFxyXG4gICAgTE9PUEVEOiByZXF1aXJlKCcuL0xPT1BFRF9FVkVOVCcpLFxyXG4gICAgTVVURTogcmVxdWlyZSgnLi9NVVRFX0VWRU5UJyksXHJcbiAgICBQQVVTRV9BTEw6IHJlcXVpcmUoJy4vUEFVU0VfQUxMX0VWRU5UJyksXHJcbiAgICBQQVVTRTogcmVxdWlyZSgnLi9QQVVTRV9FVkVOVCcpLFxyXG4gICAgUExBWTogcmVxdWlyZSgnLi9QTEFZX0VWRU5UJyksXHJcbiAgICBSQVRFOiByZXF1aXJlKCcuL1JBVEVfRVZFTlQnKSxcclxuICAgIFJFU1VNRV9BTEw6IHJlcXVpcmUoJy4vUkVTVU1FX0FMTF9FVkVOVCcpLFxyXG4gICAgUkVTVU1FOiByZXF1aXJlKCcuL1JFU1VNRV9FVkVOVCcpLFxyXG4gICAgU0VFSzogcmVxdWlyZSgnLi9TRUVLX0VWRU5UJyksXHJcbiAgICBTVE9QX0FMTDogcmVxdWlyZSgnLi9TVE9QX0FMTF9FVkVOVCcpLFxyXG4gICAgU1RPUDogcmVxdWlyZSgnLi9TVE9QX0VWRU5UJyksXHJcbiAgICBVTkxPQ0tFRDogcmVxdWlyZSgnLi9VTkxPQ0tFRF9FVkVOVCcpLFxyXG4gICAgVk9MVU1FOiByZXF1aXJlKCcuL1ZPTFVNRV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/html5/HTML5AudioSound.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/html5/HTML5AudioSound.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseSound = __webpack_require__(/*! ../BaseSound */ \"./node_modules/phaser/src/sound/BaseSound.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * HTML5 Audio implementation of the sound.\r\n *\r\n * @class HTML5AudioSound\r\n * @extends Phaser.Sound.BaseSound\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Sound.HTML5AudioSoundManager} manager - Reference to the current sound manager instance.\r\n * @param {string} key - Asset key for the sound.\r\n * @param {Phaser.Types.Sound.SoundConfig} [config={}] - An optional config object containing default sound settings.\r\n */\r\nvar HTML5AudioSound = new Class({\r\n\r\n    Extends: BaseSound,\r\n\r\n    initialize:\r\n\r\n    function HTML5AudioSound (manager, key, config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        /**\r\n         * An array containing all HTML5 Audio tags that could be used for individual\r\n         * sound's playback. Number of instances depends on the config value passed\r\n         * to the Loader#audio method call, default is 1.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSound#tags\r\n         * @type {HTMLAudioElement[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.tags = manager.game.cache.audio.get(key);\r\n\r\n        if (!this.tags)\r\n        {\r\n            // eslint-disable-next-line no-console\r\n            console.warn('Audio cache entry missing: ' + key);\r\n            return;\r\n        }\r\n\r\n        /**\r\n         * Reference to an HTML5 Audio tag used for playing sound.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSound#audio\r\n         * @type {HTMLAudioElement}\r\n         * @private\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.audio = null;\r\n\r\n        /**\r\n         * Timestamp as generated by the Request Animation Frame or SetTimeout\r\n         * representing the time at which the delayed sound playback should start.\r\n         * Set to 0 if sound playback is not delayed.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSound#startTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.startTime = 0;\r\n\r\n        /**\r\n         * Audio tag's playback position recorded on previous\r\n         * update method call. Set to 0 if sound is not playing.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSound#previousTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.previousTime = 0;\r\n\r\n        this.duration = this.tags[0].duration;\r\n\r\n        this.totalDuration = this.tags[0].duration;\r\n\r\n        BaseSound.call(this, manager, key, config);\r\n    },\r\n\r\n    /**\r\n     * Play this sound, or a marked section of it.\r\n     * It always plays the sound from the start. If you want to start playback from a specific time\r\n     * you can set 'seek' setting of the config object, provided to this call, to that value.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#play\r\n     * @fires Phaser.Sound.Events#PLAY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Sound.SoundConfig)} [markerName=''] - If you want to play a marker then provide the marker name here. Alternatively, this parameter can be a SoundConfig object.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - Optional sound config object to be applied to this marker or entire sound if no marker name is provided. It gets memorized for future plays of current section of the sound.\r\n     *\r\n     * @return {boolean} Whether the sound started playing successfully.\r\n     */\r\n    play: function (markerName, config)\r\n    {\r\n        if (this.manager.isLocked(this, 'play', [ markerName, config ]))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.play.call(this, markerName, config))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = true, isPaused = false \\/\\/\\/\r\n        if (!this.pickAndPlayAudioTag())\r\n        {\r\n            return false;\r\n        }\r\n\r\n        this.emit(Events.PLAY, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Pauses the sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#pause\r\n     * @fires Phaser.Sound.Events#PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was paused successfully.\r\n     */\r\n    pause: function ()\r\n    {\r\n        if (this.manager.isLocked(this, 'pause'))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (this.startTime > 0)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.pause.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = false, isPaused = true \\/\\/\\/\r\n        this.currentConfig.seek = this.audio.currentTime - (this.currentMarker ? this.currentMarker.start : 0);\r\n\r\n        this.stopAndReleaseAudioTag();\r\n\r\n        this.emit(Events.PAUSE, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Resumes the sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#resume\r\n     * @fires Phaser.Sound.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was resumed successfully.\r\n     */\r\n    resume: function ()\r\n    {\r\n        if (this.manager.isLocked(this, 'resume'))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (this.startTime > 0)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.resume.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = true, isPaused = false \\/\\/\\/\r\n        if (!this.pickAndPlayAudioTag())\r\n        {\r\n            return false;\r\n        }\r\n\r\n        this.emit(Events.RESUME, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Stop playing this sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#stop\r\n     * @fires Phaser.Sound.Events#STOP\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was stopped successfully.\r\n     */\r\n    stop: function ()\r\n    {\r\n        if (this.manager.isLocked(this, 'stop'))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.stop.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = false, isPaused = false \\/\\/\\/\r\n        this.stopAndReleaseAudioTag();\r\n\r\n        this.emit(Events.STOP, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Used internally to do what the name says.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#pickAndPlayAudioTag\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was assigned an audio tag successfully.\r\n     */\r\n    pickAndPlayAudioTag: function ()\r\n    {\r\n        if (!this.pickAudioTag())\r\n        {\r\n            this.reset();\r\n            return false;\r\n        }\r\n\r\n        var seek = this.currentConfig.seek;\r\n        var delay = this.currentConfig.delay;\r\n        var offset = (this.currentMarker ? this.currentMarker.start : 0) + seek;\r\n\r\n        this.previousTime = offset;\r\n        this.audio.currentTime = offset;\r\n        this.applyConfig();\r\n\r\n        if (delay === 0)\r\n        {\r\n            this.startTime = 0;\r\n\r\n            if (this.audio.paused)\r\n            {\r\n                this.playCatchPromise();\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.startTime = window.performance.now() + delay * 1000;\r\n\r\n            if (!this.audio.paused)\r\n            {\r\n                this.audio.pause();\r\n            }\r\n        }\r\n\r\n        this.resetConfig();\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * This method performs the audio tag pooling logic. It first looks for\r\n     * unused audio tag to assign to this sound object. If there are no unused\r\n     * audio tags, based on HTML5AudioSoundManager#override property value, it\r\n     * looks for sound with most advanced playback and hijacks its audio tag or\r\n     * does nothing.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#pickAudioTag\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was assigned an audio tag successfully.\r\n     */\r\n    pickAudioTag: function ()\r\n    {\r\n        if (this.audio)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        for (var i = 0; i < this.tags.length; i++)\r\n        {\r\n            var audio = this.tags[i];\r\n\r\n            if (audio.dataset.used === 'false')\r\n            {\r\n                audio.dataset.used = 'true';\r\n                this.audio = audio;\r\n                return true;\r\n            }\r\n        }\r\n\r\n        if (!this.manager.override)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        var otherSounds = [];\r\n\r\n        this.manager.forEachActiveSound(function (sound)\r\n        {\r\n            if (sound.key === this.key && sound.audio)\r\n            {\r\n                otherSounds.push(sound);\r\n            }\r\n        }, this);\r\n\r\n        otherSounds.sort(function (a1, a2)\r\n        {\r\n            if (a1.loop === a2.loop)\r\n            {\r\n                // sort by progress\r\n                return (a2.seek / a2.duration) - (a1.seek / a1.duration);\r\n            }\r\n            return a1.loop ? 1 : -1;\r\n        });\r\n\r\n        var selectedSound = otherSounds[0];\r\n\r\n        this.audio = selectedSound.audio;\r\n\r\n        selectedSound.reset();\r\n        selectedSound.audio = null;\r\n        selectedSound.startTime = 0;\r\n        selectedSound.previousTime = 0;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Method used for playing audio tag and catching possible exceptions\r\n     * thrown from rejected Promise returned from play method call.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#playCatchPromise\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    playCatchPromise: function ()\r\n    {\r\n        var playPromise = this.audio.play();\r\n\r\n        if (playPromise)\r\n        {\r\n            // eslint-disable-next-line no-unused-vars\r\n            playPromise.catch(function (reason)\r\n            {\r\n                console.warn(reason);\r\n            });\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Used internally to do what the name says.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#stopAndReleaseAudioTag\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    stopAndReleaseAudioTag: function ()\r\n    {\r\n        this.audio.pause();\r\n        this.audio.dataset.used = 'false';\r\n        this.audio = null;\r\n        this.startTime = 0;\r\n        this.previousTime = 0;\r\n    },\r\n\r\n    /**\r\n     * Method used internally to reset sound state, usually when stopping sound\r\n     * or when hijacking audio tag from another sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#reset\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    reset: function ()\r\n    {\r\n        BaseSound.prototype.stop.call(this);\r\n    },\r\n\r\n    /**\r\n     * Method used internally by sound manager for pausing sound if\r\n     * Phaser.Sound.HTML5AudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#onBlur\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    onBlur: function ()\r\n    {\r\n        this.isPlaying = false;\r\n        this.isPaused = true;\r\n\r\n        this.currentConfig.seek = this.audio.currentTime - (this.currentMarker ? this.currentMarker.start : 0);\r\n\r\n        this.currentConfig.delay = Math.max(0, (this.startTime - window.performance.now()) / 1000);\r\n\r\n        this.stopAndReleaseAudioTag();\r\n    },\r\n\r\n    /**\r\n     * Method used internally by sound manager for resuming sound if\r\n     * Phaser.Sound.HTML5AudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#onFocus\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    onFocus: function ()\r\n    {\r\n        this.isPlaying = true;\r\n        this.isPaused = false;\r\n        this.pickAndPlayAudioTag();\r\n    },\r\n\r\n    /**\r\n     * Update method called automatically by sound manager on every game step.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#update\r\n     * @fires Phaser.Sound.Events#COMPLETE\r\n     * @fires Phaser.Sound.Events#LOOPED\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    // eslint-disable-next-line no-unused-vars\r\n    update: function (time, delta)\r\n    {\r\n        if (!this.isPlaying)\r\n        {\r\n            return;\r\n        }\r\n\r\n        // handling delayed playback\r\n        if (this.startTime > 0)\r\n        {\r\n            if (this.startTime < time - this.manager.audioPlayDelay)\r\n            {\r\n                this.audio.currentTime += Math.max(0, time - this.startTime) / 1000;\r\n                this.startTime = 0;\r\n                this.previousTime = this.audio.currentTime;\r\n                this.playCatchPromise();\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        // handle looping and ending\r\n        var startTime = this.currentMarker ? this.currentMarker.start : 0;\r\n        var endTime = startTime + this.duration;\r\n        var currentTime = this.audio.currentTime;\r\n\r\n        if (this.currentConfig.loop)\r\n        {\r\n            if (currentTime >= endTime - this.manager.loopEndOffset)\r\n            {\r\n                this.audio.currentTime = startTime + Math.max(0, currentTime - endTime);\r\n                currentTime = this.audio.currentTime;\r\n            }\r\n            else if (currentTime < startTime)\r\n            {\r\n                this.audio.currentTime += startTime;\r\n                currentTime = this.audio.currentTime;\r\n            }\r\n\r\n            if (currentTime < this.previousTime)\r\n            {\r\n                this.emit(Events.LOOPED, this);\r\n            }\r\n        }\r\n        else if (currentTime >= endTime)\r\n        {\r\n            this.reset();\r\n\r\n            this.stopAndReleaseAudioTag();\r\n\r\n            this.emit(Events.COMPLETE, this);\r\n\r\n            return;\r\n        }\r\n\r\n        this.previousTime = currentTime;\r\n    },\r\n\r\n    /**\r\n     * Calls Phaser.Sound.BaseSound#destroy method\r\n     * and cleans up all HTML5 Audio related stuff.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        BaseSound.prototype.destroy.call(this);\r\n\r\n        this.tags = null;\r\n\r\n        if (this.audio)\r\n        {\r\n            this.stopAndReleaseAudioTag();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally to determine mute setting of the sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#updateMute\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    updateMute: function ()\r\n    {\r\n        if (this.audio)\r\n        {\r\n            this.audio.muted = this.currentConfig.mute || this.manager.mute;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally to calculate total volume of the sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#updateVolume\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    updateVolume: function ()\r\n    {\r\n        if (this.audio)\r\n        {\r\n            this.audio.volume = this.currentConfig.volume * this.manager.volume;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally to calculate total playback rate of the sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#calculateRate\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    calculateRate: function ()\r\n    {\r\n        BaseSound.prototype.calculateRate.call(this);\r\n\r\n        if (this.audio)\r\n        {\r\n            this.audio.playbackRate = this.totalRate;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Boolean indicating whether the sound is muted or not.\r\n     * Gets or sets the muted state of this sound.\r\n     * \r\n     * @name Phaser.Sound.HTML5AudioSound#mute\r\n     * @type {boolean}\r\n     * @default false\r\n     * @fires Phaser.Sound.Events#MUTE\r\n     * @since 3.0.0\r\n     */\r\n    mute: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.mute;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.mute = value;\r\n\r\n            if (this.manager.isLocked(this, 'mute', value))\r\n            {\r\n                return;\r\n            }\r\n\r\n            this.updateMute();\r\n\r\n            this.emit(Events.MUTE, this, value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the muted state of this Sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setMute\r\n     * @fires Phaser.Sound.Events#MUTE\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} value - `true` to mute this sound, `false` to unmute it.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound instance.\r\n     */\r\n    setMute: function (value)\r\n    {\r\n        this.mute = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets or sets the volume of this sound, a value between 0 (silence) and 1 (full volume).\r\n     * \r\n     * @name Phaser.Sound.HTML5AudioSound#volume\r\n     * @type {number}\r\n     * @default 1\r\n     * @fires Phaser.Sound.Events#VOLUME\r\n     * @since 3.0.0\r\n     */\r\n    volume: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.volume;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.volume = value;\r\n\r\n            if (this.manager.isLocked(this, 'volume', value))\r\n            {\r\n                return;\r\n            }\r\n\r\n            this.updateVolume();\r\n\r\n            this.emit(Events.VOLUME, this, value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the volume of this Sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setVolume\r\n     * @fires Phaser.Sound.Events#VOLUME\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - The volume of the sound.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound instance.\r\n     */\r\n    setVolume: function (value)\r\n    {\r\n        this.volume = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Rate at which this Sound will be played.\r\n     * Value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audios playback speed.\r\n     *\r\n     * @name Phaser.Sound.HTML5AudioSound#rate\r\n     * @type {number}\r\n     * @default 1\r\n     * @fires Phaser.Sound.Events#RATE\r\n     * @since 3.0.0\r\n     */\r\n    rate: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.rate;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.rate = value;\r\n\r\n            if (this.manager.isLocked(this, Events.RATE, value))\r\n            {\r\n                return;\r\n            }\r\n            else\r\n            {\r\n                this.calculateRate();\r\n\r\n                this.emit(Events.RATE, this, value);\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the playback rate of this Sound.\r\n     * \r\n     * For example, a value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audios playback speed.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setRate\r\n     * @fires Phaser.Sound.Events#RATE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The playback rate at of this Sound.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound.\r\n     */\r\n    setRate: function (value)\r\n    {\r\n        this.rate = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The detune value of this Sound, given in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @name Phaser.Sound.HTML5AudioSound#detune\r\n     * @type {number}\r\n     * @default 0\r\n     * @fires Phaser.Sound.Events#DETUNE\r\n     * @since 3.0.0\r\n     */\r\n    detune: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.detune;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.detune = value;\r\n\r\n            if (this.manager.isLocked(this, Events.DETUNE, value))\r\n            {\r\n                return;\r\n            }\r\n            else\r\n            {\r\n                this.calculateRate();\r\n\r\n                this.emit(Events.DETUNE, this, value);\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the detune value of this Sound, given in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setDetune\r\n     * @fires Phaser.Sound.Events#DETUNE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound.\r\n     */\r\n    setDetune: function (value)\r\n    {\r\n        this.detune = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Property representing the position of playback for this sound, in seconds.\r\n     * Setting it to a specific value moves current playback to that position.\r\n     * The value given is clamped to the range 0 to current marker duration.\r\n     * Setting seek of a stopped sound has no effect.\r\n     * \r\n     * @name Phaser.Sound.HTML5AudioSound#seek\r\n     * @type {number}\r\n     * @fires Phaser.Sound.Events#SEEK\r\n     * @since 3.0.0\r\n     */\r\n    seek: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.isPlaying)\r\n            {\r\n                return this.audio.currentTime - (this.currentMarker ? this.currentMarker.start : 0);\r\n            }\r\n            else if (this.isPaused)\r\n            {\r\n                return this.currentConfig.seek;\r\n            }\r\n            else\r\n            {\r\n                return 0;\r\n            }\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.manager.isLocked(this, 'seek', value))\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (this.startTime > 0)\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (this.isPlaying || this.isPaused)\r\n            {\r\n                value = Math.min(Math.max(0, value), this.duration);\r\n\r\n                if (this.isPlaying)\r\n                {\r\n                    this.previousTime = value;\r\n                    this.audio.currentTime = value;\r\n                }\r\n                else if (this.isPaused)\r\n                {\r\n                    this.currentConfig.seek = value;\r\n                }\r\n\r\n                this.emit(Events.SEEK, this, value);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Seeks to a specific point in this sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setSeek\r\n     * @fires Phaser.Sound.Events#SEEK\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - The point in the sound to seek to.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound instance.\r\n     */\r\n    setSeek: function (value)\r\n    {\r\n        this.seek = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Flag indicating whether or not the sound or current sound marker will loop.\r\n     * \r\n     * @name Phaser.Sound.HTML5AudioSound#loop\r\n     * @type {boolean}\r\n     * @default false\r\n     * @fires Phaser.Sound.Events#LOOP\r\n     * @since 3.0.0\r\n     */\r\n    loop: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.loop;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.loop = value;\r\n\r\n            if (this.manager.isLocked(this, 'loop', value))\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (this.audio)\r\n            {\r\n                this.audio.loop = value;\r\n            }\r\n\r\n            this.emit(Events.LOOP, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the loop state of this Sound.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSound#setLoop\r\n     * @fires Phaser.Sound.Events#LOOP\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} value - `true` to loop this sound, `false` to not loop it.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} This Sound instance.\r\n     */\r\n    setLoop: function (value)\r\n    {\r\n        this.loop = value;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = HTML5AudioSound;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9odG1sNS9IVE1MNUF1ZGlvU291bmQuanM/MWJkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBYztBQUN0QyxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLE9BQU87QUFDbEIsV0FBVywrQkFBK0IsV0FBVztBQUNyRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2h0bWw1L0hUTUw1QXVkaW9Tb3VuZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZVNvdW5kID0gcmVxdWlyZSgnLi4vQmFzZVNvdW5kJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEhUTUw1IEF1ZGlvIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzb3VuZC5cclxuICpcclxuICogQGNsYXNzIEhUTUw1QXVkaW9Tb3VuZFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuU291bmQuQmFzZVNvdW5kXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU291bmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyfSBtYW5hZ2VyIC0gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHNvdW5kIG1hbmFnZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBc3NldCBrZXkgZm9yIHRoZSBzb3VuZC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWd9IFtjb25maWc9e31dIC0gQW4gb3B0aW9uYWwgY29uZmlnIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgc291bmQgc2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgSFRNTDVBdWRpb1NvdW5kID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCYXNlU291bmQsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBIVE1MNUF1ZGlvU291bmQgKG1hbmFnZXIsIGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGFsbCBIVE1MNSBBdWRpbyB0YWdzIHRoYXQgY291bGQgYmUgdXNlZCBmb3IgaW5kaXZpZHVhbFxyXG4gICAgICAgICAqIHNvdW5kJ3MgcGxheWJhY2suIE51bWJlciBvZiBpbnN0YW5jZXMgZGVwZW5kcyBvbiB0aGUgY29uZmlnIHZhbHVlIHBhc3NlZFxyXG4gICAgICAgICAqIHRvIHRoZSBMb2FkZXIjYXVkaW8gbWV0aG9kIGNhbGwsIGRlZmF1bHQgaXMgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjdGFnc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQXVkaW9FbGVtZW50W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhZ3MgPSBtYW5hZ2VyLmdhbWUuY2FjaGUuYXVkaW8uZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50YWdzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdBdWRpbyBjYWNoZSBlbnRyeSBtaXNzaW5nOiAnICsga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVmZXJlbmNlIHRvIGFuIEhUTUw1IEF1ZGlvIHRhZyB1c2VkIGZvciBwbGF5aW5nIHNvdW5kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNhdWRpb1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQXVkaW9FbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXVkaW8gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0XHJcbiAgICAgICAgICogcmVwcmVzZW50aW5nIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBkZWxheWVkIHNvdW5kIHBsYXliYWNrIHNob3VsZCBzdGFydC5cclxuICAgICAgICAgKiBTZXQgdG8gMCBpZiBzb3VuZCBwbGF5YmFjayBpcyBub3QgZGVsYXllZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjc3RhcnRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEF1ZGlvIHRhZydzIHBsYXliYWNrIHBvc2l0aW9uIHJlY29yZGVkIG9uIHByZXZpb3VzXHJcbiAgICAgICAgICogdXBkYXRlIG1ldGhvZCBjYWxsLiBTZXQgdG8gMCBpZiBzb3VuZCBpcyBub3QgcGxheWluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjcHJldmlvdXNUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByZXZpb3VzVGltZSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLnRhZ3NbMF0uZHVyYXRpb247XHJcblxyXG4gICAgICAgIHRoaXMudG90YWxEdXJhdGlvbiA9IHRoaXMudGFnc1swXS5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgQmFzZVNvdW5kLmNhbGwodGhpcywgbWFuYWdlciwga2V5LCBjb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXkgdGhpcyBzb3VuZCwgb3IgYSBtYXJrZWQgc2VjdGlvbiBvZiBpdC5cclxuICAgICAqIEl0IGFsd2F5cyBwbGF5cyB0aGUgc291bmQgZnJvbSB0aGUgc3RhcnQuIElmIHlvdSB3YW50IHRvIHN0YXJ0IHBsYXliYWNrIGZyb20gYSBzcGVjaWZpYyB0aW1lXHJcbiAgICAgKiB5b3UgY2FuIHNldCAnc2Vlaycgc2V0dGluZyBvZiB0aGUgY29uZmlnIG9iamVjdCwgcHJvdmlkZWQgdG8gdGhpcyBjYWxsLCB0byB0aGF0IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNwbGF5XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNQTEFZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnKX0gW21hcmtlck5hbWU9JyddIC0gSWYgeW91IHdhbnQgdG8gcGxheSBhIG1hcmtlciB0aGVuIHByb3ZpZGUgdGhlIG1hcmtlciBuYW1lIGhlcmUuIEFsdGVybmF0aXZlbHksIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIFNvdW5kQ29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfSBbY29uZmlnXSAtIE9wdGlvbmFsIHNvdW5kIGNvbmZpZyBvYmplY3QgdG8gYmUgYXBwbGllZCB0byB0aGlzIG1hcmtlciBvciBlbnRpcmUgc291bmQgaWYgbm8gbWFya2VyIG5hbWUgaXMgcHJvdmlkZWQuIEl0IGdldHMgbWVtb3JpemVkIGZvciBmdXR1cmUgcGxheXMgb2YgY3VycmVudCBzZWN0aW9uIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCBzdGFydGVkIHBsYXlpbmcgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBwbGF5OiBmdW5jdGlvbiAobWFya2VyTmFtZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm1hbmFnZXIuaXNMb2NrZWQodGhpcywgJ3BsYXknLCBbIG1hcmtlck5hbWUsIGNvbmZpZyBdKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQmFzZVNvdW5kLnByb3RvdHlwZS5wbGF5LmNhbGwodGhpcywgbWFya2VyTmFtZSwgY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBcXC9cXC9cXC8gaXNQbGF5aW5nID0gdHJ1ZSwgaXNQYXVzZWQgPSBmYWxzZSBcXC9cXC9cXC9cclxuICAgICAgICBpZiAoIXRoaXMucGlja0FuZFBsYXlBdWRpb1RhZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5QTEFZLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjcGF1c2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1BBVVNFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCB3YXMgcGF1c2VkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5pc0xvY2tlZCh0aGlzLCAncGF1c2UnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0VGltZSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUJhc2VTb3VuZC5wcm90b3R5cGUucGF1c2UuY2FsbCh0aGlzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBcXC9cXC9cXC8gaXNQbGF5aW5nID0gZmFsc2UsIGlzUGF1c2VkID0gdHJ1ZSBcXC9cXC9cXC9cclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcuc2VlayA9IHRoaXMuYXVkaW8uY3VycmVudFRpbWUgLSAodGhpcy5jdXJyZW50TWFya2VyID8gdGhpcy5jdXJyZW50TWFya2VyLnN0YXJ0IDogMCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RvcEFuZFJlbGVhc2VBdWRpb1RhZygpO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBBVVNFLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3Jlc3VtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjUkVTVU1FXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCB3YXMgcmVzdW1lZCBzdWNjZXNzZnVsbHkuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmlzTG9ja2VkKHRoaXMsICdyZXN1bWUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0VGltZSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUJhc2VTb3VuZC5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgXFwvXFwvXFwvIGlzUGxheWluZyA9IHRydWUsIGlzUGF1c2VkID0gZmFsc2UgXFwvXFwvXFwvXHJcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tBbmRQbGF5QXVkaW9UYWcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVTVU1FLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBwbGF5aW5nIHRoaXMgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1NUT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyBzdG9wcGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmlzTG9ja2VkKHRoaXMsICdzdG9wJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUJhc2VTb3VuZC5wcm90b3R5cGUuc3RvcC5jYWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFxcL1xcL1xcLyBpc1BsYXlpbmcgPSBmYWxzZSwgaXNQYXVzZWQgPSBmYWxzZSBcXC9cXC9cXC9cclxuICAgICAgICB0aGlzLnN0b3BBbmRSZWxlYXNlQXVkaW9UYWcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5TVE9QLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5IHRvIGRvIHdoYXQgdGhlIG5hbWUgc2F5cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjcGlja0FuZFBsYXlBdWRpb1RhZ1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyBhc3NpZ25lZCBhbiBhdWRpbyB0YWcgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBwaWNrQW5kUGxheUF1ZGlvVGFnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5waWNrQXVkaW9UYWcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNlZWsgPSB0aGlzLmN1cnJlbnRDb25maWcuc2VlaztcclxuICAgICAgICB2YXIgZGVsYXkgPSB0aGlzLmN1cnJlbnRDb25maWcuZGVsYXk7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLmN1cnJlbnRNYXJrZXIgPyB0aGlzLmN1cnJlbnRNYXJrZXIuc3RhcnQgOiAwKSArIHNlZWs7XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlvdXNUaW1lID0gb2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgPSBvZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbmZpZygpO1xyXG5cclxuICAgICAgICBpZiAoZGVsYXkgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdWRpby5wYXVzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheUNhdGNoUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpICsgZGVsYXkgKiAxMDAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF1ZGlvLnBhdXNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpby5wYXVzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2V0Q29uZmlnKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBhdWRpbyB0YWcgcG9vbGluZyBsb2dpYy4gSXQgZmlyc3QgbG9va3MgZm9yXHJcbiAgICAgKiB1bnVzZWQgYXVkaW8gdGFnIHRvIGFzc2lnbiB0byB0aGlzIHNvdW5kIG9iamVjdC4gSWYgdGhlcmUgYXJlIG5vIHVudXNlZFxyXG4gICAgICogYXVkaW8gdGFncywgYmFzZWQgb24gSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNvdmVycmlkZSBwcm9wZXJ0eSB2YWx1ZSwgaXRcclxuICAgICAqIGxvb2tzIGZvciBzb3VuZCB3aXRoIG1vc3QgYWR2YW5jZWQgcGxheWJhY2sgYW5kIGhpamFja3MgaXRzIGF1ZGlvIHRhZyBvclxyXG4gICAgICogZG9lcyBub3RoaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNwaWNrQXVkaW9UYWdcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCB3YXMgYXNzaWduZWQgYW4gYXVkaW8gdGFnIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgcGlja0F1ZGlvVGFnOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmF1ZGlvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGFncy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhdWRpbyA9IHRoaXMudGFnc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhdWRpby5kYXRhc2V0LnVzZWQgPT09ICdmYWxzZScpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvLmRhdGFzZXQudXNlZCA9ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW8gPSBhdWRpbztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWFuYWdlci5vdmVycmlkZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvdGhlclNvdW5kcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIuZm9yRWFjaEFjdGl2ZVNvdW5kKGZ1bmN0aW9uIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzb3VuZC5rZXkgPT09IHRoaXMua2V5ICYmIHNvdW5kLmF1ZGlvKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdGhlclNvdW5kcy5wdXNoKHNvdW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBvdGhlclNvdW5kcy5zb3J0KGZ1bmN0aW9uIChhMSwgYTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYTEubG9vcCA9PT0gYTIubG9vcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gc29ydCBieSBwcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChhMi5zZWVrIC8gYTIuZHVyYXRpb24pIC0gKGExLnNlZWsgLyBhMS5kdXJhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGExLmxvb3AgPyAxIDogLTE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFNvdW5kID0gb3RoZXJTb3VuZHNbMF07XHJcblxyXG4gICAgICAgIHRoaXMuYXVkaW8gPSBzZWxlY3RlZFNvdW5kLmF1ZGlvO1xyXG5cclxuICAgICAgICBzZWxlY3RlZFNvdW5kLnJlc2V0KCk7XHJcbiAgICAgICAgc2VsZWN0ZWRTb3VuZC5hdWRpbyA9IG51bGw7XHJcbiAgICAgICAgc2VsZWN0ZWRTb3VuZC5zdGFydFRpbWUgPSAwO1xyXG4gICAgICAgIHNlbGVjdGVkU291bmQucHJldmlvdXNUaW1lID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgZm9yIHBsYXlpbmcgYXVkaW8gdGFnIGFuZCBjYXRjaGluZyBwb3NzaWJsZSBleGNlcHRpb25zXHJcbiAgICAgKiB0aHJvd24gZnJvbSByZWplY3RlZCBQcm9taXNlIHJldHVybmVkIGZyb20gcGxheSBtZXRob2QgY2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjcGxheUNhdGNoUHJvbWlzZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwbGF5Q2F0Y2hQcm9taXNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwbGF5UHJvbWlzZSA9IHRoaXMuYXVkaW8ucGxheSgpO1xyXG5cclxuICAgICAgICBpZiAocGxheVByb21pc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgICAgICAgICAgcGxheVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHJlYXNvbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIGludGVybmFsbHkgdG8gZG8gd2hhdCB0aGUgbmFtZSBzYXlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNzdG9wQW5kUmVsZWFzZUF1ZGlvVGFnXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbmRSZWxlYXNlQXVkaW9UYWc6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hdWRpby5wYXVzZSgpO1xyXG4gICAgICAgIHRoaXMuYXVkaW8uZGF0YXNldC51c2VkID0gJ2ZhbHNlJztcclxuICAgICAgICB0aGlzLmF1ZGlvID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c1RpbWUgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB1c2VkIGludGVybmFsbHkgdG8gcmVzZXQgc291bmQgc3RhdGUsIHVzdWFsbHkgd2hlbiBzdG9wcGluZyBzb3VuZFxyXG4gICAgICogb3Igd2hlbiBoaWphY2tpbmcgYXVkaW8gdGFnIGZyb20gYW5vdGhlciBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjcmVzZXRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQmFzZVNvdW5kLnByb3RvdHlwZS5zdG9wLmNhbGwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBieSBzb3VuZCBtYW5hZ2VyIGZvciBwYXVzaW5nIHNvdW5kIGlmXHJcbiAgICAgKiBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNwYXVzZU9uQmx1ciBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI29uQmx1clxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkJsdXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLnNlZWsgPSB0aGlzLmF1ZGlvLmN1cnJlbnRUaW1lIC0gKHRoaXMuY3VycmVudE1hcmtlciA/IHRoaXMuY3VycmVudE1hcmtlci5zdGFydCA6IDApO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcuZGVsYXkgPSBNYXRoLm1heCgwLCAodGhpcy5zdGFydFRpbWUgLSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpIC8gMTAwMCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RvcEFuZFJlbGVhc2VBdWRpb1RhZygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB1c2VkIGludGVybmFsbHkgYnkgc291bmQgbWFuYWdlciBmb3IgcmVzdW1pbmcgc291bmQgaWZcclxuICAgICAqIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI3BhdXNlT25CbHVyIGlzIHNldCB0byB0cnVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNvbkZvY3VzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uRm9jdXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBpY2tBbmRQbGF5QXVkaW9UYWcoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWV0aG9kIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHNvdW5kIG1hbmFnZXIgb24gZXZlcnkgZ2FtZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCN1cGRhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0NPTVBMRVRFXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNMT09QRURcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGxheWluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhhbmRsaW5nIGRlbGF5ZWQgcGxheWJhY2tcclxuICAgICAgICBpZiAodGhpcy5zdGFydFRpbWUgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRUaW1lIDwgdGltZSAtIHRoaXMubWFuYWdlci5hdWRpb1BsYXlEZWxheSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpby5jdXJyZW50VGltZSArPSBNYXRoLm1heCgwLCB0aW1lIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNUaW1lID0gdGhpcy5hdWRpby5jdXJyZW50VGltZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheUNhdGNoUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoYW5kbGUgbG9vcGluZyBhbmQgZW5kaW5nXHJcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuY3VycmVudE1hcmtlciA/IHRoaXMuY3VycmVudE1hcmtlci5zdGFydCA6IDA7XHJcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBzdGFydFRpbWUgKyB0aGlzLmR1cmF0aW9uO1xyXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IHRoaXMuYXVkaW8uY3VycmVudFRpbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubG9vcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+PSBlbmRUaW1lIC0gdGhpcy5tYW5hZ2VyLmxvb3BFbmRPZmZzZXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgPSBzdGFydFRpbWUgKyBNYXRoLm1heCgwLCBjdXJyZW50VGltZSAtIGVuZFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSB0aGlzLmF1ZGlvLmN1cnJlbnRUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRUaW1lIDwgc3RhcnRUaW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvLmN1cnJlbnRUaW1lICs9IHN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gdGhpcy5hdWRpby5jdXJyZW50VGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgdGhpcy5wcmV2aW91c1RpbWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuTE9PUEVELCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjdXJyZW50VGltZSA+PSBlbmRUaW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdG9wQW5kUmVsZWFzZUF1ZGlvVGFnKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTVBMRVRFLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlvdXNUaW1lID0gY3VycmVudFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbHMgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZCNkZXN0cm95IG1ldGhvZFxyXG4gICAgICogYW5kIGNsZWFucyB1cCBhbGwgSFRNTDUgQXVkaW8gcmVsYXRlZCBzdHVmZi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQmFzZVNvdW5kLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMudGFncyA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1ZGlvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wQW5kUmVsZWFzZUF1ZGlvVGFnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB1c2VkIGludGVybmFsbHkgdG8gZGV0ZXJtaW5lIG11dGUgc2V0dGluZyBvZiB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3VwZGF0ZU11dGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlTXV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5hdWRpbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW8ubXV0ZWQgPSB0aGlzLmN1cnJlbnRDb25maWcubXV0ZSB8fCB0aGlzLm1hbmFnZXIubXV0ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSB0byBjYWxjdWxhdGUgdG90YWwgdm9sdW1lIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjdXBkYXRlVm9sdW1lXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZvbHVtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5hdWRpbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW8udm9sdW1lID0gdGhpcy5jdXJyZW50Q29uZmlnLnZvbHVtZSAqIHRoaXMubWFuYWdlci52b2x1bWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB1c2VkIGludGVybmFsbHkgdG8gY2FsY3VsYXRlIHRvdGFsIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNjYWxjdWxhdGVSYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlUmF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBCYXNlU291bmQucHJvdG90eXBlLmNhbGN1bGF0ZVJhdGUuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvLnBsYXliYWNrUmF0ZSA9IHRoaXMudG90YWxSYXRlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291bmQgaXMgbXV0ZWQgb3Igbm90LlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBtdXRlZCBzdGF0ZSBvZiB0aGlzIHNvdW5kLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI211dGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI01VVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBtdXRlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcubXV0ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5tdXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmlzTG9ja2VkKHRoaXMsICdtdXRlJywgdmFsdWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTXV0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5NVVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG11dGVkIHN0YXRlIG9mIHRoaXMgU291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3NldE11dGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI01VVEVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBgdHJ1ZWAgdG8gbXV0ZSB0aGlzIHNvdW5kLCBgZmFsc2VgIHRvIHVubXV0ZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kfSBUaGlzIFNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNdXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tdXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdm9sdW1lIG9mIHRoaXMgc291bmQsIGEgdmFsdWUgYmV0d2VlbiAwIChzaWxlbmNlKSBhbmQgMSAoZnVsbCB2b2x1bWUpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3ZvbHVtZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1ZPTFVNRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZvbHVtZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29uZmlnLnZvbHVtZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy52b2x1bWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hbmFnZXIuaXNMb2NrZWQodGhpcywgJ3ZvbHVtZScsIHZhbHVlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZvbHVtZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WT0xVTUUsIHRoaXMsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdm9sdW1lIG9mIHRoaXMgU291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3NldFZvbHVtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjVk9MVU1FXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdm9sdW1lIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kfSBUaGlzIFNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRWb2x1bWU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSYXRlIGF0IHdoaWNoIHRoaXMgU291bmQgd2lsbCBiZSBwbGF5ZWQuXHJcbiAgICAgKiBWYWx1ZSBvZiAxLjAgcGxheXMgdGhlIGF1ZGlvIGF0IGZ1bGwgc3BlZWQsIDAuNSBwbGF5cyB0aGUgYXVkaW8gYXQgaGFsZiBzcGVlZFxyXG4gICAgICogYW5kIDIuMCBkb3VibGVzIHRoZSBhdWRpb3MgcGxheWJhY2sgc3BlZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNyYXRlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjUkFURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJhdGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZy5yYXRlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLnJhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hbmFnZXIuaXNMb2NrZWQodGhpcywgRXZlbnRzLlJBVEUsIHZhbHVlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSYXRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5SQVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBsYXliYWNrIHJhdGUgb2YgdGhpcyBTb3VuZC5cclxuICAgICAqIFxyXG4gICAgICogRm9yIGV4YW1wbGUsIGEgdmFsdWUgb2YgMS4wIHBsYXlzIHRoZSBhdWRpbyBhdCBmdWxsIHNwZWVkLCAwLjUgcGxheXMgdGhlIGF1ZGlvIGF0IGhhbGYgc3BlZWRcclxuICAgICAqIGFuZCAyLjAgZG91YmxlcyB0aGUgYXVkaW9zIHBsYXliYWNrIHNwZWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNzZXRSYXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNSQVRFXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgcGxheWJhY2sgcmF0ZSBhdCBvZiB0aGlzIFNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmR9IFRoaXMgU291bmQuXHJcbiAgICAgKi9cclxuICAgIHNldFJhdGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRldHVuZSB2YWx1ZSBvZiB0aGlzIFNvdW5kLCBnaXZlbiBpbiBbY2VudHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRfJTI4bXVzaWMlMjkpLlxyXG4gICAgICogVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI2RldHVuZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0RFVFVORVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRldHVuZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29uZmlnLmRldHVuZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5kZXR1bmUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hbmFnZXIuaXNMb2NrZWQodGhpcywgRXZlbnRzLkRFVFVORSwgdmFsdWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFVFVORSwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZXR1bmUgdmFsdWUgb2YgdGhpcyBTb3VuZCwgZ2l2ZW4gaW4gW2NlbnRzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50XyUyOG11c2ljJTI5KS5cclxuICAgICAqIFRoZSByYW5nZSBvZiB0aGUgdmFsdWUgaXMgLTEyMDAgdG8gMTIwMCwgYnV0IHdlIHJlY29tbWVuZCBzZXR0aW5nIGl0IHRvIFs1MF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvNTBfQ2VudCkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3NldERldHVuZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjREVUVU5FXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgcmFuZ2Ugb2YgdGhlIHZhbHVlIGlzIC0xMjAwIHRvIDEyMDAsIGJ1dCB3ZSByZWNvbW1lbmQgc2V0dGluZyBpdCB0byBbNTBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLzUwX0NlbnQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmR9IFRoaXMgU291bmQuXHJcbiAgICAgKi9cclxuICAgIHNldERldHVuZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGV0dW5lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgcGxheWJhY2sgZm9yIHRoaXMgc291bmQsIGluIHNlY29uZHMuXHJcbiAgICAgKiBTZXR0aW5nIGl0IHRvIGEgc3BlY2lmaWMgdmFsdWUgbW92ZXMgY3VycmVudCBwbGF5YmFjayB0byB0aGF0IHBvc2l0aW9uLlxyXG4gICAgICogVGhlIHZhbHVlIGdpdmVuIGlzIGNsYW1wZWQgdG8gdGhlIHJhbmdlIDAgdG8gY3VycmVudCBtYXJrZXIgZHVyYXRpb24uXHJcbiAgICAgKiBTZXR0aW5nIHNlZWsgb2YgYSBzdG9wcGVkIHNvdW5kIGhhcyBubyBlZmZlY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQjc2Vla1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1NFRUtcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzZWVrOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgLSAodGhpcy5jdXJyZW50TWFya2VyID8gdGhpcy5jdXJyZW50TWFya2VyLnN0YXJ0IDogMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc1BhdXNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZy5zZWVrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hbmFnZXIuaXNMb2NrZWQodGhpcywgJ3NlZWsnLCB2YWx1ZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRUaW1lID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcgfHwgdGhpcy5pc1BhdXNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heCgwLCB2YWx1ZSksIHRoaXMuZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzVGltZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNQYXVzZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLnNlZWsgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlNFRUssIHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWVrcyB0byBhIHNwZWNpZmljIHBvaW50IGluIHRoaXMgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3NldFNlZWtcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1NFRUtcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBwb2ludCBpbiB0aGUgc291bmQgdG8gc2VlayB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kfSBUaGlzIFNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTZWVrOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZWVrID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgc291bmQgb3IgY3VycmVudCBzb3VuZCBtYXJrZXIgd2lsbCBsb29wLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI2xvb3BcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsb29wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcubG9vcDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5sb29wID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmlzTG9ja2VkKHRoaXMsICdsb29wJywgdmFsdWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF1ZGlvKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvLmxvb3AgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5MT09QLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsb29wIHN0YXRlIG9mIHRoaXMgU291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kI3NldExvb3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBgdHJ1ZWAgdG8gbG9vcCB0aGlzIHNvdW5kLCBgZmFsc2VgIHRvIG5vdCBsb29wIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmR9IFRoaXMgU291bmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldExvb3A6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvb3AgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFRNTDVBdWRpb1NvdW5kO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/html5/HTML5AudioSound.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/html5/HTML5AudioSoundManager.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/sound/html5/HTML5AudioSoundManager.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseSoundManager = __webpack_require__(/*! ../BaseSoundManager */ \"./node_modules/phaser/src/sound/BaseSoundManager.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar HTML5AudioSound = __webpack_require__(/*! ./HTML5AudioSound */ \"./node_modules/phaser/src/sound/html5/HTML5AudioSound.js\");\r\n\r\n/**\r\n * HTML5 Audio implementation of the Sound Manager.\r\n * \r\n * Note: To play multiple instances of the same HTML5 Audio sound, you need to provide an `instances` value when\r\n * loading the sound with the Loader:\r\n * \r\n * ```javascript\r\n * this.load.audio('explosion', 'explosion.mp3', {\r\n *     instances: 2\r\n * });\r\n * ```\r\n *\r\n * @class HTML5AudioSoundManager\r\n * @extends Phaser.Sound.BaseSoundManager\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - Reference to the current game instance.\r\n */\r\nvar HTML5AudioSoundManager = new Class({\r\n\r\n    Extends: BaseSoundManager,\r\n\r\n    initialize:\r\n\r\n    function HTML5AudioSoundManager (game)\r\n    {\r\n        /**\r\n         * Flag indicating whether if there are no idle instances of HTML5 Audio tag,\r\n         * for any particular sound, if one of the used tags should be hijacked and used\r\n         * for succeeding playback or if succeeding Phaser.Sound.HTML5AudioSound#play\r\n         * call should be ignored.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#override\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.override = true;\r\n\r\n        /**\r\n         * Value representing time difference, in seconds, between calling\r\n         * play method on an audio tag and when it actually starts playing.\r\n         * It is used to achieve more accurate delayed sound playback.\r\n         *\r\n         * You might need to tweak this value to get the desired results\r\n         * since audio play delay varies depending on the browser/platform.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#audioPlayDelay\r\n         * @type {number}\r\n         * @default 0.1\r\n         * @since 3.0.0\r\n         */\r\n        this.audioPlayDelay = 0.1;\r\n\r\n        /**\r\n         * A value by which we should offset the loop end marker of the\r\n         * looping sound to compensate for lag, caused by changing audio\r\n         * tag playback position, in order to achieve gapless looping.\r\n         *\r\n         * You might need to tweak this value to get the desired results\r\n         * since loop lag varies depending on the browser/platform.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#loopEndOffset\r\n         * @type {number}\r\n         * @default 0.05\r\n         * @since 3.0.0\r\n         */\r\n        this.loopEndOffset = 0.05;\r\n\r\n        /**\r\n         * An array for keeping track of all the sounds\r\n         * that were paused when game lost focus.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#onBlurPausedSounds\r\n         * @type {Phaser.Sound.HTML5AudioSound[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.onBlurPausedSounds = [];\r\n\r\n        this.locked = 'ontouchstart' in window;\r\n\r\n        /**\r\n         * A queue of all actions performed on sound objects while audio was locked.\r\n         * Once the audio gets unlocked, after an explicit user interaction,\r\n         * all actions will be performed in chronological order.\r\n         * Array of object types: { sound: Phaser.Sound.HTML5AudioSound, name: string, value?: * }\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#lockedActionsQueue\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.lockedActionsQueue = this.locked ? [] : null;\r\n\r\n        /**\r\n         * Property that actually holds the value of global mute\r\n         * for HTML5 Audio sound manager implementation.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#_mute\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this._mute = false;\r\n\r\n        /**\r\n         * Property that actually holds the value of global volume\r\n         * for HTML5 Audio sound manager implementation.\r\n         *\r\n         * @name Phaser.Sound.HTML5AudioSoundManager#_volume\r\n         * @type {boolean}\r\n         * @private\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this._volume = 1;\r\n\r\n        BaseSoundManager.call(this, game);\r\n    },\r\n\r\n    /**\r\n     * Adds a new sound into the sound manager.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSound} The new sound instance.\r\n     */\r\n    add: function (key, config)\r\n    {\r\n        var sound = new HTML5AudioSound(this, key, config);\r\n\r\n        this.sounds.push(sound);\r\n\r\n        return sound;\r\n    },\r\n\r\n    /**\r\n     * Unlocks HTML5 Audio loading and playback on mobile\r\n     * devices on the initial explicit user interaction.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#unlock\r\n     * @since 3.0.0\r\n     */\r\n    unlock: function ()\r\n    {\r\n        this.locked = false;\r\n\r\n        var _this = this;\r\n\r\n        this.game.cache.audio.entries.each(function (key, tags)\r\n        {\r\n            for (var i = 0; i < tags.length; i++)\r\n            {\r\n                if (tags[i].dataset.locked === 'true')\r\n                {\r\n                    _this.locked = true;\r\n\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        });\r\n\r\n        if (!this.locked)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var moved = false;\r\n\r\n        var detectMove = function ()\r\n        {\r\n            moved = true;\r\n        };\r\n\r\n        var unlock = function ()\r\n        {\r\n            if (moved)\r\n            {\r\n                moved = false;\r\n                return;\r\n            }\r\n\r\n            document.body.removeEventListener('touchmove', detectMove);\r\n            document.body.removeEventListener('touchend', unlock);\r\n\r\n            var lockedTags = [];\r\n\r\n            _this.game.cache.audio.entries.each(function (key, tags)\r\n            {\r\n                for (var i = 0; i < tags.length; i++)\r\n                {\r\n                    var tag = tags[i];\r\n\r\n                    if (tag.dataset.locked === 'true')\r\n                    {\r\n                        lockedTags.push(tag);\r\n                    }\r\n                }\r\n\r\n                return true;\r\n            });\r\n\r\n            if (lockedTags.length === 0)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var lastTag = lockedTags[lockedTags.length - 1];\r\n\r\n            lastTag.oncanplaythrough = function ()\r\n            {\r\n                lastTag.oncanplaythrough = null;\r\n\r\n                lockedTags.forEach(function (tag)\r\n                {\r\n                    tag.dataset.locked = 'false';\r\n                });\r\n\r\n                _this.unlocked = true;\r\n            };\r\n\r\n            lockedTags.forEach(function (tag)\r\n            {\r\n                tag.load();\r\n            });\r\n        };\r\n\r\n        this.once(Events.UNLOCKED, function ()\r\n        {\r\n            this.forEachActiveSound(function (sound)\r\n            {\r\n                if (sound.currentMarker === null && sound.duration === 0)\r\n                {\r\n                    sound.duration = sound.tags[0].duration;\r\n                }\r\n\r\n                sound.totalDuration = sound.tags[0].duration;\r\n            });\r\n\r\n            while (this.lockedActionsQueue.length)\r\n            {\r\n                var lockedAction = this.lockedActionsQueue.shift();\r\n\r\n                if (lockedAction.sound[lockedAction.prop].apply)\r\n                {\r\n                    lockedAction.sound[lockedAction.prop].apply(lockedAction.sound, lockedAction.value || []);\r\n                }\r\n                else\r\n                {\r\n                    lockedAction.sound[lockedAction.prop] = lockedAction.value;\r\n                }\r\n            }\r\n\r\n        }, this);\r\n\r\n        document.body.addEventListener('touchmove', detectMove, false);\r\n        document.body.addEventListener('touchend', unlock, false);\r\n    },\r\n\r\n    /**\r\n     * Method used internally for pausing sound manager if\r\n     * Phaser.Sound.HTML5AudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#onBlur\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onBlur: function ()\r\n    {\r\n        this.forEachActiveSound(function (sound)\r\n        {\r\n            if (sound.isPlaying)\r\n            {\r\n                this.onBlurPausedSounds.push(sound);\r\n                sound.onBlur();\r\n            }\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Method used internally for resuming sound manager if\r\n     * Phaser.Sound.HTML5AudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#onFocus\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onFocus: function ()\r\n    {\r\n        this.onBlurPausedSounds.forEach(function (sound)\r\n        {\r\n            sound.onFocus();\r\n        });\r\n\r\n        this.onBlurPausedSounds.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Calls Phaser.Sound.BaseSoundManager#destroy method\r\n     * and cleans up all HTML5 Audio related stuff.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        BaseSoundManager.prototype.destroy.call(this);\r\n\r\n        this.onBlurPausedSounds.length = 0;\r\n        this.onBlurPausedSounds = null;\r\n    },\r\n\r\n    /**\r\n     * Method used internally by Phaser.Sound.HTML5AudioSound class methods and property setters\r\n     * to check if sound manager is locked and then either perform action immediately or queue it\r\n     * to be performed once the sound manager gets unlocked.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#isLocked\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Sound.HTML5AudioSound} sound - Sound object on which to perform queued action.\r\n     * @param {string} prop - Name of the method to be called or property to be assigned a value to.\r\n     * @param {*} [value] - An optional parameter that either holds an array of arguments to be passed to the method call or value to be set to the property.\r\n     *\r\n     * @return {boolean} Whether the sound manager is locked.\r\n     */\r\n    isLocked: function (sound, prop, value)\r\n    {\r\n        if (sound.tags[0].dataset.locked === 'true')\r\n        {\r\n            this.lockedActionsQueue.push({\r\n                sound: sound,\r\n                prop: prop,\r\n                value: value\r\n            });\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Sets the muted state of all this Sound Manager.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#setMute\r\n     * @fires Phaser.Sound.Events#GLOBAL_MUTE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {boolean} value - `true` to mute all sounds, `false` to unmute them.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSoundManager} This Sound Manager.\r\n     */\r\n    setMute: function (value)\r\n    {\r\n        this.mute = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * @name Phaser.Sound.HTML5AudioSoundManager#mute\r\n     * @type {boolean}\r\n     * @fires Phaser.Sound.Events#GLOBAL_MUTE\r\n     * @since 3.0.0\r\n     */\r\n    mute: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._mute;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._mute = value;\r\n\r\n            this.forEachActiveSound(function (sound)\r\n            {\r\n                sound.updateMute();\r\n            });\r\n\r\n            this.emit(Events.GLOBAL_MUTE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the volume of this Sound Manager.\r\n     *\r\n     * @method Phaser.Sound.HTML5AudioSoundManager#setVolume\r\n     * @fires Phaser.Sound.Events#GLOBAL_VOLUME\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The global volume of this Sound Manager.\r\n     *\r\n     * @return {Phaser.Sound.HTML5AudioSoundManager} This Sound Manager.\r\n     */\r\n    setVolume: function (value)\r\n    {\r\n        this.volume = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * @name Phaser.Sound.HTML5AudioSoundManager#volume\r\n     * @type {number}\r\n     * @fires Phaser.Sound.Events#GLOBAL_VOLUME\r\n     * @since 3.0.0\r\n     */\r\n    volume: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._volume;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this._volume = value;\r\n\r\n            this.forEachActiveSound(function (sound)\r\n            {\r\n                sound.updateVolume();\r\n            });\r\n\r\n            this.emit(Events.GLOBAL_VOLUME, this, value);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = HTML5AudioSoundManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9odG1sNS9IVE1MNUF1ZGlvU291bmRNYW5hZ2VyLmpzP2IxYjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQXFCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLGtFQUFXO0FBQ2hDLHNCQUFzQixtQkFBTyxDQUFDLG1GQUFtQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixpQkFBaUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL2h0bWw1L0hUTUw1QXVkaW9Tb3VuZE1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBQYXZsZSBHb2xvc2tva292aWMgPHBnb2xvc2tva292aWNAZ21haWwuY29tPiAoaHR0cDovL3BydW5lZ2FtZXMuY29tKVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJhc2VTb3VuZE1hbmFnZXIgPSByZXF1aXJlKCcuLi9CYXNlU291bmRNYW5hZ2VyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEhUTUw1QXVkaW9Tb3VuZCA9IHJlcXVpcmUoJy4vSFRNTDVBdWRpb1NvdW5kJyk7XHJcblxyXG4vKipcclxuICogSFRNTDUgQXVkaW8gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNvdW5kIE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBOb3RlOiBUbyBwbGF5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBIVE1MNSBBdWRpbyBzb3VuZCwgeW91IG5lZWQgdG8gcHJvdmlkZSBhbiBgaW5zdGFuY2VzYCB2YWx1ZSB3aGVuXHJcbiAqIGxvYWRpbmcgdGhlIHNvdW5kIHdpdGggdGhlIExvYWRlcjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF1ZGlvKCdleHBsb3Npb24nLCAnZXhwbG9zaW9uLm1wMycsIHtcclxuICogICAgIGluc3RhbmNlczogMlxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBjbGFzcyBIVE1MNUF1ZGlvU291bmRNYW5hZ2VyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU291bmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgSFRNTDVBdWRpb1NvdW5kTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQmFzZVNvdW5kTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIgKGdhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgaWYgdGhlcmUgYXJlIG5vIGlkbGUgaW5zdGFuY2VzIG9mIEhUTUw1IEF1ZGlvIHRhZyxcclxuICAgICAgICAgKiBmb3IgYW55IHBhcnRpY3VsYXIgc291bmQsIGlmIG9uZSBvZiB0aGUgdXNlZCB0YWdzIHNob3VsZCBiZSBoaWphY2tlZCBhbmQgdXNlZFxyXG4gICAgICAgICAqIGZvciBzdWNjZWVkaW5nIHBsYXliYWNrIG9yIGlmIHN1Y2NlZWRpbmcgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZCNwbGF5XHJcbiAgICAgICAgICogY2FsbCBzaG91bGQgYmUgaWdub3JlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI292ZXJyaWRlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3ZlcnJpZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWYWx1ZSByZXByZXNlbnRpbmcgdGltZSBkaWZmZXJlbmNlLCBpbiBzZWNvbmRzLCBiZXR3ZWVuIGNhbGxpbmdcclxuICAgICAgICAgKiBwbGF5IG1ldGhvZCBvbiBhbiBhdWRpbyB0YWcgYW5kIHdoZW4gaXQgYWN0dWFsbHkgc3RhcnRzIHBsYXlpbmcuXHJcbiAgICAgICAgICogSXQgaXMgdXNlZCB0byBhY2hpZXZlIG1vcmUgYWNjdXJhdGUgZGVsYXllZCBzb3VuZCBwbGF5YmFjay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFlvdSBtaWdodCBuZWVkIHRvIHR3ZWFrIHRoaXMgdmFsdWUgdG8gZ2V0IHRoZSBkZXNpcmVkIHJlc3VsdHNcclxuICAgICAgICAgKiBzaW5jZSBhdWRpbyBwbGF5IGRlbGF5IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGJyb3dzZXIvcGxhdGZvcm0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNhdWRpb1BsYXlEZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC4xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hdWRpb1BsYXlEZWxheSA9IDAuMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB2YWx1ZSBieSB3aGljaCB3ZSBzaG91bGQgb2Zmc2V0IHRoZSBsb29wIGVuZCBtYXJrZXIgb2YgdGhlXHJcbiAgICAgICAgICogbG9vcGluZyBzb3VuZCB0byBjb21wZW5zYXRlIGZvciBsYWcsIGNhdXNlZCBieSBjaGFuZ2luZyBhdWRpb1xyXG4gICAgICAgICAqIHRhZyBwbGF5YmFjayBwb3NpdGlvbiwgaW4gb3JkZXIgdG8gYWNoaWV2ZSBnYXBsZXNzIGxvb3BpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBZb3UgbWlnaHQgbmVlZCB0byB0d2VhayB0aGlzIHZhbHVlIHRvIGdldCB0aGUgZGVzaXJlZCByZXN1bHRzXHJcbiAgICAgICAgICogc2luY2UgbG9vcCBsYWcgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgYnJvd3Nlci9wbGF0Zm9ybS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI2xvb3BFbmRPZmZzZXRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvb3BFbmRPZmZzZXQgPSAwLjA1O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBmb3Iga2VlcGluZyB0cmFjayBvZiBhbGwgdGhlIHNvdW5kc1xyXG4gICAgICAgICAqIHRoYXQgd2VyZSBwYXVzZWQgd2hlbiBnYW1lIGxvc3QgZm9jdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNvbkJsdXJQYXVzZWRTb3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZFtdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uQmx1clBhdXNlZFNvdW5kcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxvY2tlZCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBxdWV1ZSBvZiBhbGwgYWN0aW9ucyBwZXJmb3JtZWQgb24gc291bmQgb2JqZWN0cyB3aGlsZSBhdWRpbyB3YXMgbG9ja2VkLlxyXG4gICAgICAgICAqIE9uY2UgdGhlIGF1ZGlvIGdldHMgdW5sb2NrZWQsIGFmdGVyIGFuIGV4cGxpY2l0IHVzZXIgaW50ZXJhY3Rpb24sXHJcbiAgICAgICAgICogYWxsIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgaW4gY2hyb25vbG9naWNhbCBvcmRlci5cclxuICAgICAgICAgKiBBcnJheSBvZiBvYmplY3QgdHlwZXM6IHsgc291bmQ6IFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmQsIG5hbWU6IHN0cmluZywgdmFsdWU/OiAqIH1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI2xvY2tlZEFjdGlvbnNRdWV1ZVxyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9ja2VkQWN0aW9uc1F1ZXVlID0gdGhpcy5sb2NrZWQgPyBbXSA6IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3BlcnR5IHRoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIHZhbHVlIG9mIGdsb2JhbCBtdXRlXHJcbiAgICAgICAgICogZm9yIEhUTUw1IEF1ZGlvIHNvdW5kIG1hbmFnZXIgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNfbXV0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9tdXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3BlcnR5IHRoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIHZhbHVlIG9mIGdsb2JhbCB2b2x1bWVcclxuICAgICAgICAgKiBmb3IgSFRNTDUgQXVkaW8gc291bmQgbWFuYWdlciBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI192b2x1bWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92b2x1bWUgPSAxO1xyXG5cclxuICAgICAgICBCYXNlU291bmRNYW5hZ2VyLmNhbGwodGhpcywgZ2FtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG5ldyBzb3VuZCBpbnRvIHRoZSBzb3VuZCBtYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gQXNzZXQga2V5IGZvciB0aGUgc291bmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Tb3VuZC5Tb3VuZENvbmZpZ30gW2NvbmZpZ10gLSBBbiBvcHRpb25hbCBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzb3VuZCBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kfSBUaGUgbmV3IHNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc291bmQgPSBuZXcgSFRNTDVBdWRpb1NvdW5kKHRoaXMsIGtleSwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3VuZHMucHVzaChzb3VuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzb3VuZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmxvY2tzIEhUTUw1IEF1ZGlvIGxvYWRpbmcgYW5kIHBsYXliYWNrIG9uIG1vYmlsZVxyXG4gICAgICogZGV2aWNlcyBvbiB0aGUgaW5pdGlhbCBleHBsaWNpdCB1c2VyIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjdW5sb2NrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdW5sb2NrOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5jYWNoZS5hdWRpby5lbnRyaWVzLmVhY2goZnVuY3Rpb24gKGtleSwgdGFncylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhZ3NbaV0uZGF0YXNldC5sb2NrZWQgPT09ICd0cnVlJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubG9ja2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1vdmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHZhciBkZXRlY3RNb3ZlID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgdW5sb2NrID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChtb3ZlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbW92ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBkZXRlY3RNb3ZlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHVubG9jayk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbG9ja2VkVGFncyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZ2FtZS5jYWNoZS5hdWRpby5lbnRyaWVzLmVhY2goZnVuY3Rpb24gKGtleSwgdGFncylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0YWdzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnLmRhdGFzZXQubG9ja2VkID09PSAndHJ1ZScpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRUYWdzLnB1c2godGFnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxvY2tlZFRhZ3MubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBsYXN0VGFnID0gbG9ja2VkVGFnc1tsb2NrZWRUYWdzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgbGFzdFRhZy5vbmNhbnBsYXl0aHJvdWdoID0gZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFzdFRhZy5vbmNhbnBsYXl0aHJvdWdoID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2NrZWRUYWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWcuZGF0YXNldC5sb2NrZWQgPSAnZmFsc2UnO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMudW5sb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbG9ja2VkVGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZy5sb2FkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25jZShFdmVudHMuVU5MT0NLRUQsIGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hBY3RpdmVTb3VuZChmdW5jdGlvbiAoc291bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzb3VuZC5jdXJyZW50TWFya2VyID09PSBudWxsICYmIHNvdW5kLmR1cmF0aW9uID09PSAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmR1cmF0aW9uID0gc291bmQudGFnc1swXS5kdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzb3VuZC50b3RhbER1cmF0aW9uID0gc291bmQudGFnc1swXS5kdXJhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5sb2NrZWRBY3Rpb25zUXVldWUubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9ja2VkQWN0aW9uID0gdGhpcy5sb2NrZWRBY3Rpb25zUXVldWUuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobG9ja2VkQWN0aW9uLnNvdW5kW2xvY2tlZEFjdGlvbi5wcm9wXS5hcHBseSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NrZWRBY3Rpb24uc291bmRbbG9ja2VkQWN0aW9uLnByb3BdLmFwcGx5KGxvY2tlZEFjdGlvbi5zb3VuZCwgbG9ja2VkQWN0aW9uLnZhbHVlIHx8IFtdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NrZWRBY3Rpb24uc291bmRbbG9ja2VkQWN0aW9uLnByb3BdID0gbG9ja2VkQWN0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGRldGVjdE1vdmUsIGZhbHNlKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdW5sb2NrLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgcGF1c2luZyBzb3VuZCBtYW5hZ2VyIGlmXHJcbiAgICAgKiBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNwYXVzZU9uQmx1ciBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI29uQmx1clxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uQmx1cjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZvckVhY2hBY3RpdmVTb3VuZChmdW5jdGlvbiAoc291bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc291bmQuaXNQbGF5aW5nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQmx1clBhdXNlZFNvdW5kcy5wdXNoKHNvdW5kKTtcclxuICAgICAgICAgICAgICAgIHNvdW5kLm9uQmx1cigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgcmVzdW1pbmcgc291bmQgbWFuYWdlciBpZlxyXG4gICAgICogUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjcGF1c2VPbkJsdXIgaXMgc2V0IHRvIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlciNvbkZvY3VzXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25Gb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm9uQmx1clBhdXNlZFNvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdW5kLm9uRm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkJsdXJQYXVzZWRTb3VuZHMubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxscyBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNkZXN0cm95IG1ldGhvZFxyXG4gICAgICogYW5kIGNsZWFucyB1cCBhbGwgSFRNTDUgQXVkaW8gcmVsYXRlZCBzdHVmZi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIEJhc2VTb3VuZE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkJsdXJQYXVzZWRTb3VuZHMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLm9uQmx1clBhdXNlZFNvdW5kcyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBieSBQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kIGNsYXNzIG1ldGhvZHMgYW5kIHByb3BlcnR5IHNldHRlcnNcclxuICAgICAqIHRvIGNoZWNrIGlmIHNvdW5kIG1hbmFnZXIgaXMgbG9ja2VkIGFuZCB0aGVuIGVpdGhlciBwZXJmb3JtIGFjdGlvbiBpbW1lZGlhdGVseSBvciBxdWV1ZSBpdFxyXG4gICAgICogdG8gYmUgcGVyZm9ybWVkIG9uY2UgdGhlIHNvdW5kIG1hbmFnZXIgZ2V0cyB1bmxvY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyI2lzTG9ja2VkXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmR9IHNvdW5kIC0gU291bmQgb2JqZWN0IG9uIHdoaWNoIHRvIHBlcmZvcm0gcXVldWVkIGFjdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIC0gTmFtZSBvZiB0aGUgbWV0aG9kIHRvIGJlIGNhbGxlZCBvciBwcm9wZXJ0eSB0byBiZSBhc3NpZ25lZCBhIHZhbHVlIHRvLlxyXG4gICAgICogQHBhcmFtIHsqfSBbdmFsdWVdIC0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZWl0aGVyIGhvbGRzIGFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIG1ldGhvZCBjYWxsIG9yIHZhbHVlIHRvIGJlIHNldCB0byB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc291bmQgbWFuYWdlciBpcyBsb2NrZWQuXHJcbiAgICAgKi9cclxuICAgIGlzTG9ja2VkOiBmdW5jdGlvbiAoc291bmQsIHByb3AsIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzb3VuZC50YWdzWzBdLmRhdGFzZXQubG9ja2VkID09PSAndHJ1ZScpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tlZEFjdGlvbnNRdWV1ZS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHNvdW5kOiBzb3VuZCxcclxuICAgICAgICAgICAgICAgIHByb3A6IHByb3AsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtdXRlZCBzdGF0ZSBvZiBhbGwgdGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjc2V0TXV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX01VVEVcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBgdHJ1ZWAgdG8gbXV0ZSBhbGwgc291bmRzLCBgZmFsc2VgIHRvIHVubXV0ZSB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5IVE1MNUF1ZGlvU291bmRNYW5hZ2VyfSBUaGlzIFNvdW5kIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNldE11dGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm11dGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjbXV0ZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNHTE9CQUxfTVVURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG11dGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX211dGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9tdXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hBY3RpdmVTb3VuZChmdW5jdGlvbiAoc291bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnVwZGF0ZU11dGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdMT0JBTF9NVVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2b2x1bWUgb2YgdGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjc2V0Vm9sdW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNHTE9CQUxfVk9MVU1FXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgZ2xvYmFsIHZvbHVtZSBvZiB0aGlzIFNvdW5kIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXJ9IFRoaXMgU291bmQgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgc2V0Vm9sdW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52b2x1bWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIjdm9sdW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX1ZPTFVNRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZvbHVtZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hBY3RpdmVTb3VuZChmdW5jdGlvbiAoc291bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnVwZGF0ZVZvbHVtZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0xPQkFMX1ZPTFVNRSwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFRNTDVBdWRpb1NvdW5kTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/html5/HTML5AudioSoundManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/sound/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Sound\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    SoundManagerCreator: __webpack_require__(/*! ./SoundManagerCreator */ \"./node_modules/phaser/src/sound/SoundManagerCreator.js\"),\r\n\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/sound/events/index.js\"),\r\n\r\n    BaseSound: __webpack_require__(/*! ./BaseSound */ \"./node_modules/phaser/src/sound/BaseSound.js\"),\r\n    BaseSoundManager: __webpack_require__(/*! ./BaseSoundManager */ \"./node_modules/phaser/src/sound/BaseSoundManager.js\"),\r\n\r\n    WebAudioSound: __webpack_require__(/*! ./webaudio/WebAudioSound */ \"./node_modules/phaser/src/sound/webaudio/WebAudioSound.js\"),\r\n    WebAudioSoundManager: __webpack_require__(/*! ./webaudio/WebAudioSoundManager */ \"./node_modules/phaser/src/sound/webaudio/WebAudioSoundManager.js\"),\r\n\r\n    HTML5AudioSound: __webpack_require__(/*! ./html5/HTML5AudioSound */ \"./node_modules/phaser/src/sound/html5/HTML5AudioSound.js\"),\r\n    HTML5AudioSoundManager: __webpack_require__(/*! ./html5/HTML5AudioSoundManager */ \"./node_modules/phaser/src/sound/html5/HTML5AudioSoundManager.js\"),\r\n\r\n    NoAudioSound: __webpack_require__(/*! ./noaudio/NoAudioSound */ \"./node_modules/phaser/src/sound/noaudio/NoAudioSound.js\"),\r\n    NoAudioSoundManager: __webpack_require__(/*! ./noaudio/NoAudioSoundManager */ \"./node_modules/phaser/src/sound/noaudio/NoAudioSoundManager.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9pbmRleC5qcz9iMWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxxRkFBdUI7O0FBRXhELFlBQVksbUJBQU8sQ0FBQyxpRUFBVTs7QUFFOUIsZUFBZSxtQkFBTyxDQUFDLGlFQUFhO0FBQ3BDLHNCQUFzQixtQkFBTyxDQUFDLCtFQUFvQjs7QUFFbEQsbUJBQW1CLG1CQUFPLENBQUMsMkZBQTBCO0FBQ3JELDBCQUEwQixtQkFBTyxDQUFDLHlHQUFpQzs7QUFFbkUscUJBQXFCLG1CQUFPLENBQUMseUZBQXlCO0FBQ3RELDRCQUE0QixtQkFBTyxDQUFDLHVHQUFnQzs7QUFFcEUsa0JBQWtCLG1CQUFPLENBQUMsdUZBQXdCO0FBQ2xELHlCQUF5QixtQkFBTyxDQUFDLHFHQUErQjs7QUFFaEUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU291bmRcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBTb3VuZE1hbmFnZXJDcmVhdG9yOiByZXF1aXJlKCcuL1NvdW5kTWFuYWdlckNyZWF0b3InKSxcclxuXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcblxyXG4gICAgQmFzZVNvdW5kOiByZXF1aXJlKCcuL0Jhc2VTb3VuZCcpLFxyXG4gICAgQmFzZVNvdW5kTWFuYWdlcjogcmVxdWlyZSgnLi9CYXNlU291bmRNYW5hZ2VyJyksXHJcblxyXG4gICAgV2ViQXVkaW9Tb3VuZDogcmVxdWlyZSgnLi93ZWJhdWRpby9XZWJBdWRpb1NvdW5kJyksXHJcbiAgICBXZWJBdWRpb1NvdW5kTWFuYWdlcjogcmVxdWlyZSgnLi93ZWJhdWRpby9XZWJBdWRpb1NvdW5kTWFuYWdlcicpLFxyXG5cclxuICAgIEhUTUw1QXVkaW9Tb3VuZDogcmVxdWlyZSgnLi9odG1sNS9IVE1MNUF1ZGlvU291bmQnKSxcclxuICAgIEhUTUw1QXVkaW9Tb3VuZE1hbmFnZXI6IHJlcXVpcmUoJy4vaHRtbDUvSFRNTDVBdWRpb1NvdW5kTWFuYWdlcicpLFxyXG5cclxuICAgIE5vQXVkaW9Tb3VuZDogcmVxdWlyZSgnLi9ub2F1ZGlvL05vQXVkaW9Tb3VuZCcpLFxyXG4gICAgTm9BdWRpb1NvdW5kTWFuYWdlcjogcmVxdWlyZSgnLi9ub2F1ZGlvL05vQXVkaW9Tb3VuZE1hbmFnZXInKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/noaudio/NoAudioSound.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/sound/noaudio/NoAudioSound.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseSound = __webpack_require__(/*! ../BaseSound */ \"./node_modules/phaser/src/sound/BaseSound.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @classdesc\r\n * No audio implementation of the sound. It is used if audio has been\r\n * disabled in the game config or the device doesn't support any audio.\r\n *\r\n * It represents a graceful degradation of sound logic that provides\r\n * minimal functionality and prevents Phaser projects that use audio from\r\n * breaking on devices that don't support any audio playback technologies.\r\n *\r\n * @class NoAudioSound\r\n * @extends Phaser.Sound.BaseSound\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Sound.NoAudioSoundManager} manager - Reference to the current sound manager instance.\r\n * @param {string} key - Asset key for the sound.\r\n * @param {Phaser.Types.Sound.SoundConfig} [config={}] - An optional config object containing default sound settings.\r\n */\r\nvar NoAudioSound = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function NoAudioSound (manager, key, config)\r\n    {\r\n        if (config === void 0) { config = {}; }\r\n\r\n        EventEmitter.call(this);\r\n\r\n        this.manager = manager;\r\n        this.key = key;\r\n        this.isPlaying = false;\r\n        this.isPaused = false;\r\n        this.totalRate = 1;\r\n        this.duration = 0;\r\n        this.totalDuration = 0;\r\n\r\n        this.config = Extend({\r\n            mute: false,\r\n            volume: 1,\r\n            rate: 1,\r\n            detune: 0,\r\n            seek: 0,\r\n            loop: false,\r\n            delay: 0\r\n        }, config);\r\n\r\n        this.currentConfig = this.config;\r\n        this.mute = false;\r\n        this.volume = 1;\r\n        this.rate = 1;\r\n        this.detune = 0;\r\n        this.seek = 0;\r\n        this.loop = false;\r\n        this.markers = {};\r\n        this.currentMarker = null;\r\n        this.pendingRemove = false;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    addMarker: function (marker)\r\n    {\r\n        return false;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    updateMarker: function (marker)\r\n    {\r\n        return false;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    removeMarker: function (markerName)\r\n    {\r\n        return null;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    play: function (markerName, config)\r\n    {\r\n        return false;\r\n    },\r\n\r\n    pause: function ()\r\n    {\r\n        return false;\r\n    },\r\n\r\n    resume: function ()\r\n    {\r\n        return false;\r\n    },\r\n\r\n    stop: function ()\r\n    {\r\n        return false;\r\n    },\r\n\r\n    destroy: function ()\r\n    {\r\n        this.manager.remove(this);\r\n\r\n        BaseSound.prototype.destroy.call(this);\r\n    }\r\n});\r\n\r\nmodule.exports = NoAudioSound;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ub2F1ZGlvL05vQXVkaW9Tb3VuZC5qcz8xZDM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFjO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLG1GQUEyQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsK0JBQStCLFdBQVc7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc291bmQvbm9hdWRpby9Ob0F1ZGlvU291bmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBQYXZsZSBHb2xvc2tva292aWMgPHBnb2xvc2tva292aWNAZ21haWwuY29tPiAoaHR0cDovL3BydW5lZ2FtZXMuY29tKVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJhc2VTb3VuZCA9IHJlcXVpcmUoJy4uL0Jhc2VTb3VuZCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogTm8gYXVkaW8gaW1wbGVtZW50YXRpb24gb2YgdGhlIHNvdW5kLiBJdCBpcyB1c2VkIGlmIGF1ZGlvIGhhcyBiZWVuXHJcbiAqIGRpc2FibGVkIGluIHRoZSBnYW1lIGNvbmZpZyBvciB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgYXVkaW8uXHJcbiAqXHJcbiAqIEl0IHJlcHJlc2VudHMgYSBncmFjZWZ1bCBkZWdyYWRhdGlvbiBvZiBzb3VuZCBsb2dpYyB0aGF0IHByb3ZpZGVzXHJcbiAqIG1pbmltYWwgZnVuY3Rpb25hbGl0eSBhbmQgcHJldmVudHMgUGhhc2VyIHByb2plY3RzIHRoYXQgdXNlIGF1ZGlvIGZyb21cclxuICogYnJlYWtpbmcgb24gZGV2aWNlcyB0aGF0IGRvbid0IHN1cHBvcnQgYW55IGF1ZGlvIHBsYXliYWNrIHRlY2hub2xvZ2llcy5cclxuICpcclxuICogQGNsYXNzIE5vQXVkaW9Tb3VuZFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuU291bmQuQmFzZVNvdW5kXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU291bmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Tb3VuZC5Ob0F1ZGlvU291bmRNYW5hZ2VyfSBtYW5hZ2VyIC0gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHNvdW5kIG1hbmFnZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBc3NldCBrZXkgZm9yIHRoZSBzb3VuZC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuU291bmQuU291bmRDb25maWd9IFtjb25maWc9e31dIC0gQW4gb3B0aW9uYWwgY29uZmlnIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgc291bmQgc2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgTm9BdWRpb1NvdW5kID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBOb0F1ZGlvU291bmQgKG1hbmFnZXIsIGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcclxuICAgICAgICB0aGlzLmtleSA9IGtleTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvdGFsUmF0ZSA9IDE7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbER1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBFeHRlbmQoe1xyXG4gICAgICAgICAgICBtdXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgdm9sdW1lOiAxLFxyXG4gICAgICAgICAgICByYXRlOiAxLFxyXG4gICAgICAgICAgICBkZXR1bmU6IDAsXHJcbiAgICAgICAgICAgIHNlZWs6IDAsXHJcbiAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICBkZWxheTogMFxyXG4gICAgICAgIH0sIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHRoaXMubXV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudm9sdW1lID0gMTtcclxuICAgICAgICB0aGlzLnJhdGUgPSAxO1xyXG4gICAgICAgIHRoaXMuZGV0dW5lID0gMDtcclxuICAgICAgICB0aGlzLnNlZWsgPSAwO1xyXG4gICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWFya2VycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1hcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVtb3ZlID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgYWRkTWFya2VyOiBmdW5jdGlvbiAobWFya2VyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICB1cGRhdGVNYXJrZXI6IGZ1bmN0aW9uIChtYXJrZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHJlbW92ZU1hcmtlcjogZnVuY3Rpb24gKG1hcmtlck5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcGxheTogZnVuY3Rpb24gKG1hcmtlck5hbWUsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3RvcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICAgICAgQmFzZVNvdW5kLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOb0F1ZGlvU291bmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/noaudio/NoAudioSound.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/noaudio/NoAudioSoundManager.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/sound/noaudio/NoAudioSoundManager.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseSoundManager = __webpack_require__(/*! ../BaseSoundManager */ \"./node_modules/phaser/src/sound/BaseSoundManager.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar NoAudioSound = __webpack_require__(/*! ./NoAudioSound */ \"./node_modules/phaser/src/sound/noaudio/NoAudioSound.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * No audio implementation of the sound manager. It is used if audio has been\r\n * disabled in the game config or the device doesn't support any audio.\r\n *\r\n * It represents a graceful degradation of sound manager logic that provides\r\n * minimal functionality and prevents Phaser projects that use audio from\r\n * breaking on devices that don't support any audio playback technologies.\r\n *\r\n * @class NoAudioSoundManager\r\n * @extends Phaser.Sound.BaseSoundManager\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - Reference to the current game instance.\r\n */\r\nvar NoAudioSoundManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function NoAudioSoundManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        this.game = game;\r\n        this.sounds = [];\r\n        this.mute = false;\r\n        this.volume = 1;\r\n        this.rate = 1;\r\n        this.detune = 0;\r\n        this.pauseOnBlur = true;\r\n        this.locked = false;\r\n    },\r\n\r\n    add: function (key, config)\r\n    {\r\n        var sound = new NoAudioSound(this, key, config);\r\n\r\n        this.sounds.push(sound);\r\n\r\n        return sound;\r\n    },\r\n\r\n    addAudioSprite: function (key, config)\r\n    {\r\n        var sound = this.add(key, config);\r\n\r\n        sound.spritemap = {};\r\n\r\n        return sound;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    play: function (key, extra)\r\n    {\r\n        return false;\r\n    },\r\n\r\n    // eslint-disable-next-line no-unused-vars\r\n    playAudioSprite: function (key, spriteName, config)\r\n    {\r\n        return false;\r\n    },\r\n\r\n    remove: function (sound)\r\n    {\r\n        return BaseSoundManager.prototype.remove.call(this, sound);\r\n    },\r\n\r\n    removeByKey: function (key)\r\n    {\r\n        return BaseSoundManager.prototype.removeByKey.call(this, key);\r\n    },\r\n\r\n    pauseAll: NOOP,\r\n    resumeAll: NOOP,\r\n    stopAll: NOOP,\r\n    update: NOOP,\r\n    setRate: NOOP,\r\n    setDetune: NOOP,\r\n    setMute: NOOP,\r\n    setVolume: NOOP,\r\n\r\n    forEachActiveSound: function (callbackfn, scope)\r\n    {\r\n        BaseSoundManager.prototype.forEachActiveSound.call(this, callbackfn, scope);\r\n    },\r\n\r\n    destroy: function ()\r\n    {\r\n        BaseSoundManager.prototype.destroy.call(this);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = NoAudioSoundManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC9ub2F1ZGlvL05vQXVkaW9Tb3VuZE1hbmFnZXIuanM/ZGU3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxtQkFBbUIsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLGlFQUFrQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL25vYXVkaW8vTm9BdWRpb1NvdW5kTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZVNvdW5kTWFuYWdlciA9IHJlcXVpcmUoJy4uL0Jhc2VTb3VuZE1hbmFnZXInKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIE5vQXVkaW9Tb3VuZCA9IHJlcXVpcmUoJy4vTm9BdWRpb1NvdW5kJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogTm8gYXVkaW8gaW1wbGVtZW50YXRpb24gb2YgdGhlIHNvdW5kIG1hbmFnZXIuIEl0IGlzIHVzZWQgaWYgYXVkaW8gaGFzIGJlZW5cclxuICogZGlzYWJsZWQgaW4gdGhlIGdhbWUgY29uZmlnIG9yIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGFueSBhdWRpby5cclxuICpcclxuICogSXQgcmVwcmVzZW50cyBhIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9mIHNvdW5kIG1hbmFnZXIgbG9naWMgdGhhdCBwcm92aWRlc1xyXG4gKiBtaW5pbWFsIGZ1bmN0aW9uYWxpdHkgYW5kIHByZXZlbnRzIFBoYXNlciBwcm9qZWN0cyB0aGF0IHVzZSBhdWRpbyBmcm9tXHJcbiAqIGJyZWFraW5nIG9uIGRldmljZXMgdGhhdCBkb24ndCBzdXBwb3J0IGFueSBhdWRpbyBwbGF5YmFjayB0ZWNobm9sb2dpZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBOb0F1ZGlvU291bmRNYW5hZ2VyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Tb3VuZC5CYXNlU291bmRNYW5hZ2VyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU291bmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgTm9BdWRpb1NvdW5kTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTm9BdWRpb1NvdW5kTWFuYWdlciAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuICAgICAgICB0aGlzLnNvdW5kcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubXV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudm9sdW1lID0gMTtcclxuICAgICAgICB0aGlzLnJhdGUgPSAxO1xyXG4gICAgICAgIHRoaXMuZGV0dW5lID0gMDtcclxuICAgICAgICB0aGlzLnBhdXNlT25CbHVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc291bmQgPSBuZXcgTm9BdWRpb1NvdW5kKHRoaXMsIGtleSwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3VuZHMucHVzaChzb3VuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzb3VuZDtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkQXVkaW9TcHJpdGU6IGZ1bmN0aW9uIChrZXksIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc291bmQgPSB0aGlzLmFkZChrZXksIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIHNvdW5kLnNwcml0ZW1hcCA9IHt9O1xyXG5cclxuICAgICAgICByZXR1cm4gc291bmQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcGxheTogZnVuY3Rpb24gKGtleSwgZXh0cmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHBsYXlBdWRpb1Nwcml0ZTogZnVuY3Rpb24gKGtleSwgc3ByaXRlTmFtZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoc291bmQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEJhc2VTb3VuZE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsIHNvdW5kKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlQnlLZXk6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEJhc2VTb3VuZE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJ5S2V5LmNhbGwodGhpcywga2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgcGF1c2VBbGw6IE5PT1AsXHJcbiAgICByZXN1bWVBbGw6IE5PT1AsXHJcbiAgICBzdG9wQWxsOiBOT09QLFxyXG4gICAgdXBkYXRlOiBOT09QLFxyXG4gICAgc2V0UmF0ZTogTk9PUCxcclxuICAgIHNldERldHVuZTogTk9PUCxcclxuICAgIHNldE11dGU6IE5PT1AsXHJcbiAgICBzZXRWb2x1bWU6IE5PT1AsXHJcblxyXG4gICAgZm9yRWFjaEFjdGl2ZVNvdW5kOiBmdW5jdGlvbiAoY2FsbGJhY2tmbiwgc2NvcGUpXHJcbiAgICB7XHJcbiAgICAgICAgQmFzZVNvdW5kTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaEFjdGl2ZVNvdW5kLmNhbGwodGhpcywgY2FsbGJhY2tmbiwgc2NvcGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIEJhc2VTb3VuZE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOb0F1ZGlvU291bmRNYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/noaudio/NoAudioSoundManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/webaudio/WebAudioSound.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/sound/webaudio/WebAudioSound.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseSound = __webpack_require__(/*! ../BaseSound */ \"./node_modules/phaser/src/sound/BaseSound.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Web Audio API implementation of the sound.\r\n *\r\n * @class WebAudioSound\r\n * @extends Phaser.Sound.BaseSound\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Sound.WebAudioSoundManager} manager - Reference to the current sound manager instance.\r\n * @param {string} key - Asset key for the sound.\r\n * @param {Phaser.Types.Sound.SoundConfig} [config={}] - An optional config object containing default sound settings.\r\n */\r\nvar WebAudioSound = new Class({\r\n\r\n    Extends: BaseSound,\r\n\r\n    initialize:\r\n\r\n    function WebAudioSound (manager, key, config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        /**\r\n         * Audio buffer containing decoded data of the audio asset to be played.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#audioBuffer\r\n         * @type {AudioBuffer}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.audioBuffer = manager.game.cache.audio.get(key);\r\n\r\n        if (!this.audioBuffer)\r\n        {\r\n            // eslint-disable-next-line no-console\r\n            console.warn('Audio cache entry missing: ' + key);\r\n            return;\r\n        }\r\n\r\n        /**\r\n         * A reference to an audio source node used for playing back audio from\r\n         * audio data stored in Phaser.Sound.WebAudioSound#audioBuffer.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#source\r\n         * @type {AudioBufferSourceNode}\r\n         * @private\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.source = null;\r\n\r\n        /**\r\n         * A reference to a second audio source used for gapless looped playback.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#loopSource\r\n         * @type {AudioBufferSourceNode}\r\n         * @private\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.loopSource = null;\r\n\r\n        /**\r\n         * Gain node responsible for controlling this sound's muting.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#muteNode\r\n         * @type {GainNode}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.muteNode = manager.context.createGain();\r\n\r\n        /**\r\n         * Gain node responsible for controlling this sound's volume.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#volumeNode\r\n         * @type {GainNode}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.volumeNode = manager.context.createGain();\r\n\r\n        /**\r\n         * The time at which the sound should have started playback from the beginning.\r\n         * Based on BaseAudioContext.currentTime value.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#playTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.playTime = 0;\r\n\r\n        /**\r\n         * The time at which the sound source should have actually started playback.\r\n         * Based on BaseAudioContext.currentTime value.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#startTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.startTime = 0;\r\n\r\n        /**\r\n         * The time at which the sound loop source should actually start playback.\r\n         * Based on BaseAudioContext.currentTime value.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#loopTime\r\n         * @type {number}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loopTime = 0;\r\n\r\n        /**\r\n         * An array where we keep track of all rate updates during playback.\r\n         * Array of object types: { time: number, rate: number }\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#rateUpdates\r\n         * @type {array}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.rateUpdates = [];\r\n\r\n        /**\r\n         * Used for keeping track when sound source playback has ended\r\n         * so its state can be updated accordingly.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#hasEnded\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.hasEnded = false;\r\n\r\n        /**\r\n         * Used for keeping track when sound source has looped\r\n         * so its state can be updated accordingly.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSound#hasLooped\r\n         * @type {boolean}\r\n         * @private\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.hasLooped = false;\r\n\r\n        this.muteNode.connect(this.volumeNode);\r\n\r\n        this.volumeNode.connect(manager.destination);\r\n\r\n        this.duration = this.audioBuffer.duration;\r\n\r\n        this.totalDuration = this.audioBuffer.duration;\r\n\r\n        BaseSound.call(this, manager, key, config);\r\n    },\r\n\r\n    /**\r\n     * Play this sound, or a marked section of it.\r\n     * \r\n     * It always plays the sound from the start. If you want to start playback from a specific time\r\n     * you can set 'seek' setting of the config object, provided to this call, to that value.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#play\r\n     * @fires Phaser.Sound.Events#PLAY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Types.Sound.SoundConfig)} [markerName=''] - If you want to play a marker then provide the marker name here. Alternatively, this parameter can be a SoundConfig object.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - Optional sound config object to be applied to this marker or entire sound if no marker name is provided. It gets memorized for future plays of current section of the sound.\r\n     *\r\n     * @return {boolean} Whether the sound started playing successfully.\r\n     */\r\n    play: function (markerName, config)\r\n    {\r\n        if (!BaseSound.prototype.play.call(this, markerName, config))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = true, isPaused = false \\/\\/\\/\r\n        this.stopAndRemoveBufferSource();\r\n        this.createAndStartBufferSource();\r\n\r\n        this.emit(Events.PLAY, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Pauses the sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#pause\r\n     * @fires Phaser.Sound.Events#PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was paused successfully.\r\n     */\r\n    pause: function ()\r\n    {\r\n        if (this.manager.context.currentTime < this.startTime)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.pause.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = false, isPaused = true \\/\\/\\/\r\n        this.currentConfig.seek = this.getCurrentTime(); // Equivalent to setting paused time\r\n        this.stopAndRemoveBufferSource();\r\n\r\n        this.emit(Events.PAUSE, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Resumes the sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#resume\r\n     * @fires Phaser.Sound.Events#RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was resumed successfully.\r\n     */\r\n    resume: function ()\r\n    {\r\n        if (this.manager.context.currentTime < this.startTime)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (!BaseSound.prototype.resume.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = true, isPaused = false \\/\\/\\/\r\n        this.createAndStartBufferSource();\r\n\r\n        this.emit(Events.RESUME, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Stop playing this sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#stop\r\n     * @fires Phaser.Sound.Events#STOP\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Whether the sound was stopped successfully.\r\n     */\r\n    stop: function ()\r\n    {\r\n        if (!BaseSound.prototype.stop.call(this))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        //  \\/\\/\\/ isPlaying = false, isPaused = false \\/\\/\\/\r\n        this.stopAndRemoveBufferSource();\r\n\r\n        this.emit(Events.STOP, this);\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Used internally.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#createAndStartBufferSource\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    createAndStartBufferSource: function ()\r\n    {\r\n        var seek = this.currentConfig.seek;\r\n        var delay = this.currentConfig.delay;\r\n        var when = this.manager.context.currentTime + delay;\r\n        var offset = (this.currentMarker ? this.currentMarker.start : 0) + seek;\r\n        var duration = this.duration - seek;\r\n\r\n        this.playTime = when - seek;\r\n        this.startTime = when;\r\n        this.source = this.createBufferSource();\r\n\r\n        this.applyConfig();\r\n\r\n        this.source.start(Math.max(0, when), Math.max(0, offset), Math.max(0, duration));\r\n\r\n        this.resetConfig();\r\n    },\r\n\r\n    /**\r\n     * Used internally.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#createAndStartLoopBufferSource\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    createAndStartLoopBufferSource: function ()\r\n    {\r\n        var when = this.getLoopTime();\r\n        var offset = this.currentMarker ? this.currentMarker.start : 0;\r\n        var duration = this.duration;\r\n\r\n        this.loopTime = when;\r\n        this.loopSource = this.createBufferSource();\r\n        this.loopSource.playbackRate.setValueAtTime(this.totalRate, 0);\r\n        this.loopSource.start(Math.max(0, when), Math.max(0, offset), Math.max(0, duration));\r\n    },\r\n\r\n    /**\r\n     * Used internally.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#createBufferSource\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @return {AudioBufferSourceNode}\r\n     */\r\n    createBufferSource: function ()\r\n    {\r\n        var _this = this;\r\n        var source = this.manager.context.createBufferSource();\r\n\r\n        source.buffer = this.audioBuffer;\r\n\r\n        source.connect(this.muteNode);\r\n\r\n        source.onended = function (ev)\r\n        {\r\n            if (ev.target === _this.source)\r\n            {\r\n                // sound ended\r\n                if (_this.currentConfig.loop)\r\n                {\r\n                    _this.hasLooped = true;\r\n                }\r\n                else\r\n                {\r\n                    _this.hasEnded = true;\r\n                }\r\n            }\r\n\r\n            // else was stopped\r\n        };\r\n\r\n        return source;\r\n    },\r\n\r\n    /**\r\n     * Used internally.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#stopAndRemoveBufferSource\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    stopAndRemoveBufferSource: function ()\r\n    {\r\n        if (this.source)\r\n        {\r\n            this.source.stop();\r\n            this.source.disconnect();\r\n            this.source = null;\r\n        }\r\n\r\n        this.playTime = 0;\r\n        this.startTime = 0;\r\n\r\n        this.stopAndRemoveLoopBufferSource();\r\n    },\r\n\r\n    /**\r\n     * Used internally.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#stopAndRemoveLoopBufferSource\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    stopAndRemoveLoopBufferSource: function ()\r\n    {\r\n        if (this.loopSource)\r\n        {\r\n            this.loopSource.stop();\r\n            this.loopSource.disconnect();\r\n            this.loopSource = null;\r\n        }\r\n\r\n        this.loopTime = 0;\r\n    },\r\n\r\n    /**\r\n     * Method used internally for applying config values to some of the sound properties.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#applyConfig\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    applyConfig: function ()\r\n    {\r\n        this.rateUpdates.length = 0;\r\n\r\n        this.rateUpdates.push({\r\n            time: 0,\r\n            rate: 1\r\n        });\r\n\r\n        BaseSound.prototype.applyConfig.call(this);\r\n    },\r\n\r\n    /**\r\n     * Update method called automatically by sound manager on every game step.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#update\r\n     * @fires Phaser.Sound.Events#COMPLETE\r\n     * @fires Phaser.Sound.Events#LOOPED\r\n     * @protected\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n     * @param {number} delta - The delta time elapsed since the last frame.\r\n     */\r\n    // eslint-disable-next-line no-unused-vars\r\n    update: function (time, delta)\r\n    {\r\n        if (this.hasEnded)\r\n        {\r\n            this.hasEnded = false;\r\n\r\n            BaseSound.prototype.stop.call(this);\r\n\r\n            this.stopAndRemoveBufferSource();\r\n\r\n            this.emit(Events.COMPLETE, this);\r\n        }\r\n        else if (this.hasLooped)\r\n        {\r\n            this.hasLooped = false;\r\n            this.source = this.loopSource;\r\n            this.loopSource = null;\r\n            this.playTime = this.startTime = this.loopTime;\r\n            this.rateUpdates.length = 0;\r\n\r\n            this.rateUpdates.push({\r\n                time: 0,\r\n                rate: this.totalRate\r\n            });\r\n\r\n            this.createAndStartLoopBufferSource();\r\n\r\n            this.emit(Events.LOOPED, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calls Phaser.Sound.BaseSound#destroy method\r\n     * and cleans up all Web Audio API related stuff.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        BaseSound.prototype.destroy.call(this);\r\n\r\n        this.audioBuffer = null;\r\n        this.stopAndRemoveBufferSource();\r\n        this.muteNode.disconnect();\r\n        this.muteNode = null;\r\n        this.volumeNode.disconnect();\r\n        this.volumeNode = null;\r\n        this.rateUpdates.length = 0;\r\n        this.rateUpdates = null;\r\n    },\r\n\r\n    /**\r\n     * Method used internally to calculate total playback rate of the sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#calculateRate\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    calculateRate: function ()\r\n    {\r\n        BaseSound.prototype.calculateRate.call(this);\r\n\r\n        var now = this.manager.context.currentTime;\r\n\r\n        if (this.source && typeof this.totalRate === 'number')\r\n        {\r\n            this.source.playbackRate.setValueAtTime(this.totalRate, now);\r\n        }\r\n\r\n        if (this.isPlaying)\r\n        {\r\n            this.rateUpdates.push({\r\n                time: Math.max(this.startTime, now) - this.playTime,\r\n                rate: this.totalRate\r\n            });\r\n\r\n            if (this.loopSource)\r\n            {\r\n                this.stopAndRemoveLoopBufferSource();\r\n                this.createAndStartLoopBufferSource();\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally for calculating current playback time of a playing sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#getCurrentTime\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    getCurrentTime: function ()\r\n    {\r\n        var currentTime = 0;\r\n\r\n        for (var i = 0; i < this.rateUpdates.length; i++)\r\n        {\r\n            var nextTime = 0;\r\n\r\n            if (i < this.rateUpdates.length - 1)\r\n            {\r\n                nextTime = this.rateUpdates[i + 1].time;\r\n            }\r\n            else\r\n            {\r\n                nextTime = this.manager.context.currentTime - this.playTime;\r\n            }\r\n\r\n            currentTime += (nextTime - this.rateUpdates[i].time) * this.rateUpdates[i].rate;\r\n        }\r\n\r\n        return currentTime;\r\n    },\r\n\r\n    /**\r\n     * Method used internally for calculating the time\r\n     * at witch the loop source should start playing.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#getLoopTime\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    getLoopTime: function ()\r\n    {\r\n        var lastRateUpdateCurrentTime = 0;\r\n\r\n        for (var i = 0; i < this.rateUpdates.length - 1; i++)\r\n        {\r\n            lastRateUpdateCurrentTime += (this.rateUpdates[i + 1].time - this.rateUpdates[i].time) * this.rateUpdates[i].rate;\r\n        }\r\n\r\n        var lastRateUpdate = this.rateUpdates[this.rateUpdates.length - 1];\r\n\r\n        return this.playTime + lastRateUpdate.time + (this.duration - lastRateUpdateCurrentTime) / lastRateUpdate.rate;\r\n    },\r\n\r\n    /**\r\n     * Rate at which this Sound will be played.\r\n     * Value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audios playback speed.\r\n     *\r\n     * @name Phaser.Sound.WebAudioSound#rate\r\n     * @type {number}\r\n     * @default 1\r\n     * @fires Phaser.Sound.Events#RATE\r\n     * @since 3.0.0\r\n     */\r\n    rate: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.rate;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.rate = value;\r\n\r\n            this.calculateRate();\r\n\r\n            this.emit(Events.RATE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the playback rate of this Sound.\r\n     * \r\n     * For example, a value of 1.0 plays the audio at full speed, 0.5 plays the audio at half speed\r\n     * and 2.0 doubles the audios playback speed.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setRate\r\n     * @fires Phaser.Sound.Events#RATE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The playback rate at of this Sound.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound.\r\n     */\r\n    setRate: function (value)\r\n    {\r\n        this.rate = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The detune value of this Sound, given in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @name Phaser.Sound.WebAudioSound#detune\r\n     * @type {number}\r\n     * @default 0\r\n     * @fires Phaser.Sound.Events#DETUNE\r\n     * @since 3.0.0\r\n     */\r\n    detune: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.detune;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.detune = value;\r\n\r\n            this.calculateRate();\r\n\r\n            this.emit(Events.DETUNE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the detune value of this Sound, given in [cents](https://en.wikipedia.org/wiki/Cent_%28music%29).\r\n     * The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setDetune\r\n     * @fires Phaser.Sound.Events#DETUNE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The range of the value is -1200 to 1200, but we recommend setting it to [50](https://en.wikipedia.org/wiki/50_Cent).\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound.\r\n     */\r\n    setDetune: function (value)\r\n    {\r\n        this.detune = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Boolean indicating whether the sound is muted or not.\r\n     * Gets or sets the muted state of this sound.\r\n     * \r\n     * @name Phaser.Sound.WebAudioSound#mute\r\n     * @type {boolean}\r\n     * @default false\r\n     * @fires Phaser.Sound.Events#MUTE\r\n     * @since 3.0.0\r\n     */\r\n    mute: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.muteNode.gain.value === 0);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.mute = value;\r\n            this.muteNode.gain.setValueAtTime(value ? 0 : 1, 0);\r\n\r\n            this.emit(Events.MUTE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the muted state of this Sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setMute\r\n     * @fires Phaser.Sound.Events#MUTE\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} value - `true` to mute this sound, `false` to unmute it.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound instance.\r\n     */\r\n    setMute: function (value)\r\n    {\r\n        this.mute = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets or sets the volume of this sound, a value between 0 (silence) and 1 (full volume).\r\n     * \r\n     * @name Phaser.Sound.WebAudioSound#volume\r\n     * @type {number}\r\n     * @default 1\r\n     * @fires Phaser.Sound.Events#VOLUME\r\n     * @since 3.0.0\r\n     */\r\n    volume: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.volumeNode.gain.value;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.volume = value;\r\n            this.volumeNode.gain.setValueAtTime(value, 0);\r\n\r\n            this.emit(Events.VOLUME, this, value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the volume of this Sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setVolume\r\n     * @fires Phaser.Sound.Events#VOLUME\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - The volume of the sound.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound instance.\r\n     */\r\n    setVolume: function (value)\r\n    {\r\n        this.volume = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Property representing the position of playback for this sound, in seconds.\r\n     * Setting it to a specific value moves current playback to that position.\r\n     * The value given is clamped to the range 0 to current marker duration.\r\n     * Setting seek of a stopped sound has no effect.\r\n     * \r\n     * @name Phaser.Sound.WebAudioSound#seek\r\n     * @type {number}\r\n     * @fires Phaser.Sound.Events#SEEK\r\n     * @since 3.0.0\r\n     */\r\n    seek: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.isPlaying)\r\n            {\r\n                if (this.manager.context.currentTime < this.startTime)\r\n                {\r\n                    return this.startTime - this.playTime;\r\n                }\r\n\r\n                return this.getCurrentTime();\r\n            }\r\n            else if (this.isPaused)\r\n            {\r\n                return this.currentConfig.seek;\r\n            }\r\n            else\r\n            {\r\n                return 0;\r\n            }\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (this.manager.context.currentTime < this.startTime)\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (this.isPlaying || this.isPaused)\r\n            {\r\n                value = Math.min(Math.max(0, value), this.duration);\r\n\r\n                this.currentConfig.seek = value;\r\n\r\n                if (this.isPlaying)\r\n                {\r\n                    this.stopAndRemoveBufferSource();\r\n                    this.createAndStartBufferSource();\r\n                }\r\n\r\n                this.emit(Events.SEEK, this, value);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Seeks to a specific point in this sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setSeek\r\n     * @fires Phaser.Sound.Events#SEEK\r\n     * @since 3.4.0\r\n     *\r\n     * @param {number} value - The point in the sound to seek to.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound instance.\r\n     */\r\n    setSeek: function (value)\r\n    {\r\n        this.seek = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Flag indicating whether or not the sound or current sound marker will loop.\r\n     * \r\n     * @name Phaser.Sound.WebAudioSound#loop\r\n     * @type {boolean}\r\n     * @default false\r\n     * @fires Phaser.Sound.Events#LOOP\r\n     * @since 3.0.0\r\n     */\r\n    loop: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.currentConfig.loop;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.currentConfig.loop = value;\r\n\r\n            if (this.isPlaying)\r\n            {\r\n                this.stopAndRemoveLoopBufferSource();\r\n\r\n                if (value)\r\n                {\r\n                    this.createAndStartLoopBufferSource();\r\n                }\r\n            }\r\n\r\n            this.emit(Events.LOOP, this, value);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the loop state of this Sound.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSound#setLoop\r\n     * @fires Phaser.Sound.Events#LOOP\r\n     * @since 3.4.0\r\n     *\r\n     * @param {boolean} value - `true` to loop this sound, `false` to not loop it.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} This Sound instance.\r\n     */\r\n    setLoop: function (value)\r\n    {\r\n        this.loop = value;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = WebAudioSound;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC93ZWJhdWRpby9XZWJBdWRpb1NvdW5kLmpzPzhiMzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWM7QUFDdEMsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxhQUFhLG1CQUFPLENBQUMsa0VBQVc7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQ0FBa0M7QUFDN0MsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsK0JBQStCLFdBQVc7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0NBQXdDO0FBQ3ZELGVBQWUsK0JBQStCO0FBQzlDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdEO0FBQ3hEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsNkJBQTZCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBaUM7QUFDeEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3NvdW5kL3dlYmF1ZGlvL1dlYkF1ZGlvU291bmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBQYXZsZSBHb2xvc2tva292aWMgPHBnb2xvc2tva292aWNAZ21haWwuY29tPiAoaHR0cDovL3BydW5lZ2FtZXMuY29tKVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJhc2VTb3VuZCA9IHJlcXVpcmUoJy4uL0Jhc2VTb3VuZCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBXZWIgQXVkaW8gQVBJIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzb3VuZC5cclxuICpcclxuICogQGNsYXNzIFdlYkF1ZGlvU291bmRcclxuICogQGV4dGVuZHMgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlNvdW5kXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXJ9IG1hbmFnZXIgLSBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc291bmQgbWFuYWdlciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEFzc2V0IGtleSBmb3IgdGhlIHNvdW5kLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Tb3VuZC5Tb3VuZENvbmZpZ30gW2NvbmZpZz17fV0gLSBBbiBvcHRpb25hbCBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzb3VuZCBzZXR0aW5ncy5cclxuICovXHJcbnZhciBXZWJBdWRpb1NvdW5kID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCYXNlU291bmQsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBXZWJBdWRpb1NvdW5kIChtYW5hZ2VyLCBrZXksIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXVkaW8gYnVmZmVyIGNvbnRhaW5pbmcgZGVjb2RlZCBkYXRhIG9mIHRoZSBhdWRpbyBhc3NldCB0byBiZSBwbGF5ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNhdWRpb0J1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtBdWRpb0J1ZmZlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXVkaW9CdWZmZXIgPSBtYW5hZ2VyLmdhbWUuY2FjaGUuYXVkaW8uZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdWRpb0J1ZmZlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXVkaW8gY2FjaGUgZW50cnkgbWlzc2luZzogJyArIGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGFuIGF1ZGlvIHNvdXJjZSBub2RlIHVzZWQgZm9yIHBsYXlpbmcgYmFjayBhdWRpbyBmcm9tXHJcbiAgICAgICAgICogYXVkaW8gZGF0YSBzdG9yZWQgaW4gUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjYXVkaW9CdWZmZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gYSBzZWNvbmQgYXVkaW8gc291cmNlIHVzZWQgZm9yIGdhcGxlc3MgbG9vcGVkIHBsYXliYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjbG9vcFNvdXJjZVxyXG4gICAgICAgICAqIEB0eXBlIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb29wU291cmNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2FpbiBub2RlIHJlc3BvbnNpYmxlIGZvciBjb250cm9sbGluZyB0aGlzIHNvdW5kJ3MgbXV0aW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjbXV0ZU5vZGVcclxuICAgICAgICAgKiBAdHlwZSB7R2Fpbk5vZGV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGVOb2RlID0gbWFuYWdlci5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2FpbiBub2RlIHJlc3BvbnNpYmxlIGZvciBjb250cm9sbGluZyB0aGlzIHNvdW5kJ3Mgdm9sdW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjdm9sdW1lTm9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtHYWluTm9kZX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudm9sdW1lTm9kZSA9IG1hbmFnZXIuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzb3VuZCBzaG91bGQgaGF2ZSBzdGFydGVkIHBsYXliYWNrIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgICAgICAgKiBCYXNlZCBvbiBCYXNlQXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjcGxheVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxheVRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgc291bmQgc291cmNlIHNob3VsZCBoYXZlIGFjdHVhbGx5IHN0YXJ0ZWQgcGxheWJhY2suXHJcbiAgICAgICAgICogQmFzZWQgb24gQmFzZUF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3N0YXJ0VGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgc291bmQgbG9vcCBzb3VyY2Ugc2hvdWxkIGFjdHVhbGx5IHN0YXJ0IHBsYXliYWNrLlxyXG4gICAgICAgICAqIEJhc2VkIG9uIEJhc2VBdWRpb0NvbnRleHQuY3VycmVudFRpbWUgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNsb29wVGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb29wVGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IHdoZXJlIHdlIGtlZXAgdHJhY2sgb2YgYWxsIHJhdGUgdXBkYXRlcyBkdXJpbmcgcGxheWJhY2suXHJcbiAgICAgICAgICogQXJyYXkgb2Ygb2JqZWN0IHR5cGVzOiB7IHRpbWU6IG51bWJlciwgcmF0ZTogbnVtYmVyIH1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3JhdGVVcGRhdGVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJhdGVVcGRhdGVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgd2hlbiBzb3VuZCBzb3VyY2UgcGxheWJhY2sgaGFzIGVuZGVkXHJcbiAgICAgICAgICogc28gaXRzIHN0YXRlIGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjaGFzRW5kZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNFbmRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGZvciBrZWVwaW5nIHRyYWNrIHdoZW4gc291bmQgc291cmNlIGhhcyBsb29wZWRcclxuICAgICAgICAgKiBzbyBpdHMgc3RhdGUgY2FuIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNoYXNMb29wZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNMb29wZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tdXRlTm9kZS5jb25uZWN0KHRoaXMudm9sdW1lTm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMudm9sdW1lTm9kZS5jb25uZWN0KG1hbmFnZXIuZGVzdGluYXRpb24pO1xyXG5cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gdGhpcy5hdWRpb0J1ZmZlci5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgdGhpcy50b3RhbER1cmF0aW9uID0gdGhpcy5hdWRpb0J1ZmZlci5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgQmFzZVNvdW5kLmNhbGwodGhpcywgbWFuYWdlciwga2V5LCBjb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXkgdGhpcyBzb3VuZCwgb3IgYSBtYXJrZWQgc2VjdGlvbiBvZiBpdC5cclxuICAgICAqIFxyXG4gICAgICogSXQgYWx3YXlzIHBsYXlzIHRoZSBzb3VuZCBmcm9tIHRoZSBzdGFydC4gSWYgeW91IHdhbnQgdG8gc3RhcnQgcGxheWJhY2sgZnJvbSBhIHNwZWNpZmljIHRpbWVcclxuICAgICAqIHlvdSBjYW4gc2V0ICdzZWVrJyBzZXR0aW5nIG9mIHRoZSBjb25maWcgb2JqZWN0LCBwcm92aWRlZCB0byB0aGlzIGNhbGwsIHRvIHRoYXQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNwbGF5XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNQTEFZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnKX0gW21hcmtlck5hbWU9JyddIC0gSWYgeW91IHdhbnQgdG8gcGxheSBhIG1hcmtlciB0aGVuIHByb3ZpZGUgdGhlIG1hcmtlciBuYW1lIGhlcmUuIEFsdGVybmF0aXZlbHksIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIFNvdW5kQ29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfSBbY29uZmlnXSAtIE9wdGlvbmFsIHNvdW5kIGNvbmZpZyBvYmplY3QgdG8gYmUgYXBwbGllZCB0byB0aGlzIG1hcmtlciBvciBlbnRpcmUgc291bmQgaWYgbm8gbWFya2VyIG5hbWUgaXMgcHJvdmlkZWQuIEl0IGdldHMgbWVtb3JpemVkIGZvciBmdXR1cmUgcGxheXMgb2YgY3VycmVudCBzZWN0aW9uIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VuZCBzdGFydGVkIHBsYXlpbmcgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBwbGF5OiBmdW5jdGlvbiAobWFya2VyTmFtZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghQmFzZVNvdW5kLnByb3RvdHlwZS5wbGF5LmNhbGwodGhpcywgbWFya2VyTmFtZSwgY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBcXC9cXC9cXC8gaXNQbGF5aW5nID0gdHJ1ZSwgaXNQYXVzZWQgPSBmYWxzZSBcXC9cXC9cXC9cclxuICAgICAgICB0aGlzLnN0b3BBbmRSZW1vdmVCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUFuZFN0YXJ0QnVmZmVyU291cmNlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUExBWSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhdXNlcyB0aGUgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNwYXVzZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjUEFVU0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyBwYXVzZWQgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmNvbnRleHQuY3VycmVudFRpbWUgPCB0aGlzLnN0YXJ0VGltZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQmFzZVNvdW5kLnByb3RvdHlwZS5wYXVzZS5jYWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFxcL1xcL1xcLyBpc1BsYXlpbmcgPSBmYWxzZSwgaXNQYXVzZWQgPSB0cnVlIFxcL1xcL1xcL1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5zZWVrID0gdGhpcy5nZXRDdXJyZW50VGltZSgpOyAvLyBFcXVpdmFsZW50IHRvIHNldHRpbmcgcGF1c2VkIHRpbWVcclxuICAgICAgICB0aGlzLnN0b3BBbmRSZW1vdmVCdWZmZXJTb3VyY2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5QQVVTRSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgdGhlIHNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjcmVzdW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNSRVNVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyByZXN1bWVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm1hbmFnZXIuY29udGV4dC5jdXJyZW50VGltZSA8IHRoaXMuc3RhcnRUaW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFCYXNlU291bmQucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFxcL1xcL1xcLyBpc1BsYXlpbmcgPSB0cnVlLCBpc1BhdXNlZCA9IGZhbHNlIFxcL1xcL1xcL1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQW5kU3RhcnRCdWZmZXJTb3VyY2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5SRVNVTUUsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIHBsYXlpbmcgdGhpcyBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1NUT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdW5kIHdhcyBzdG9wcGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIUJhc2VTb3VuZC5wcm90b3R5cGUuc3RvcC5jYWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFxcL1xcL1xcLyBpc1BsYXlpbmcgPSBmYWxzZSwgaXNQYXVzZWQgPSBmYWxzZSBcXC9cXC9cXC9cclxuICAgICAgICB0aGlzLnN0b3BBbmRSZW1vdmVCdWZmZXJTb3VyY2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5TVE9QLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjY3JlYXRlQW5kU3RhcnRCdWZmZXJTb3VyY2VcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY3JlYXRlQW5kU3RhcnRCdWZmZXJTb3VyY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNlZWsgPSB0aGlzLmN1cnJlbnRDb25maWcuc2VlaztcclxuICAgICAgICB2YXIgZGVsYXkgPSB0aGlzLmN1cnJlbnRDb25maWcuZGVsYXk7XHJcbiAgICAgICAgdmFyIHdoZW4gPSB0aGlzLm1hbmFnZXIuY29udGV4dC5jdXJyZW50VGltZSArIGRlbGF5O1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy5jdXJyZW50TWFya2VyID8gdGhpcy5jdXJyZW50TWFya2VyLnN0YXJ0IDogMCkgKyBzZWVrO1xyXG4gICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24gLSBzZWVrO1xyXG5cclxuICAgICAgICB0aGlzLnBsYXlUaW1lID0gd2hlbiAtIHNlZWs7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB3aGVuO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUNvbmZpZygpO1xyXG5cclxuICAgICAgICB0aGlzLnNvdXJjZS5zdGFydChNYXRoLm1heCgwLCB3aGVuKSwgTWF0aC5tYXgoMCwgb2Zmc2V0KSwgTWF0aC5tYXgoMCwgZHVyYXRpb24pKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldENvbmZpZygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI2NyZWF0ZUFuZFN0YXJ0TG9vcEJ1ZmZlclNvdXJjZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVBbmRTdGFydExvb3BCdWZmZXJTb3VyY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdoZW4gPSB0aGlzLmdldExvb3BUaW1lKCk7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuY3VycmVudE1hcmtlciA/IHRoaXMuY3VycmVudE1hcmtlci5zdGFydCA6IDA7XHJcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgdGhpcy5sb29wVGltZSA9IHdoZW47XHJcbiAgICAgICAgdGhpcy5sb29wU291cmNlID0gdGhpcy5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLmxvb3BTb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHRoaXMudG90YWxSYXRlLCAwKTtcclxuICAgICAgICB0aGlzLmxvb3BTb3VyY2Uuc3RhcnQoTWF0aC5tYXgoMCwgd2hlbiksIE1hdGgubWF4KDAsIG9mZnNldCksIE1hdGgubWF4KDAsIGR1cmF0aW9uKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjY3JlYXRlQnVmZmVyU291cmNlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCdWZmZXJTb3VyY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5tYW5hZ2VyLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcblxyXG4gICAgICAgIHNvdXJjZS5idWZmZXIgPSB0aGlzLmF1ZGlvQnVmZmVyO1xyXG5cclxuICAgICAgICBzb3VyY2UuY29ubmVjdCh0aGlzLm11dGVOb2RlKTtcclxuXHJcbiAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoZXYpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZXYudGFyZ2V0ID09PSBfdGhpcy5zb3VyY2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIHNvdW5kIGVuZGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudENvbmZpZy5sb29wKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmhhc0xvb3BlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaGFzRW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBlbHNlIHdhcyBzdG9wcGVkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIGludGVybmFsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNzdG9wQW5kUmVtb3ZlQnVmZmVyU291cmNlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbmRSZW1vdmVCdWZmZXJTb3VyY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc291cmNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGxheVRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zdG9wQW5kUmVtb3ZlTG9vcEJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3N0b3BBbmRSZW1vdmVMb29wQnVmZmVyU291cmNlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbmRSZW1vdmVMb29wQnVmZmVyU291cmNlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmxvb3BTb3VyY2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvb3BTb3VyY2Uuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmxvb3BTb3VyY2UuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmxvb3BTb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb29wVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHVzZWQgaW50ZXJuYWxseSBmb3IgYXBwbHlpbmcgY29uZmlnIHZhbHVlcyB0byBzb21lIG9mIHRoZSBzb3VuZCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjYXBwbHlDb25maWdcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBhcHBseUNvbmZpZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJhdGVVcGRhdGVzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucmF0ZVVwZGF0ZXMucHVzaCh7XHJcbiAgICAgICAgICAgIHRpbWU6IDAsXHJcbiAgICAgICAgICAgIHJhdGU6IDFcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgQmFzZVNvdW5kLnByb3RvdHlwZS5hcHBseUNvbmZpZy5jYWxsKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBtZXRob2QgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgc291bmQgbWFuYWdlciBvbiBldmVyeSBnYW1lIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCN1cGRhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0NPTVBMRVRFXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNMT09QRURcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRW5kZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0VuZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBCYXNlU291bmQucHJvdG90eXBlLnN0b3AuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcEFuZFJlbW92ZUJ1ZmZlclNvdXJjZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5DT01QTEVURSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaGFzTG9vcGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNMb29wZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLmxvb3BTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcFNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVRpbWUgPSB0aGlzLnN0YXJ0VGltZSA9IHRoaXMubG9vcFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMucmF0ZVVwZGF0ZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmF0ZVVwZGF0ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aW1lOiAwLFxyXG4gICAgICAgICAgICAgICAgcmF0ZTogdGhpcy50b3RhbFJhdGVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFuZFN0YXJ0TG9vcEJ1ZmZlclNvdXJjZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5MT09QRUQsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxscyBQaGFzZXIuU291bmQuQmFzZVNvdW5kI2Rlc3Ryb3kgbWV0aG9kXHJcbiAgICAgKiBhbmQgY2xlYW5zIHVwIGFsbCBXZWIgQXVkaW8gQVBJIHJlbGF0ZWQgc3R1ZmYuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBCYXNlU291bmQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdWRpb0J1ZmZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdG9wQW5kUmVtb3ZlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5tdXRlTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5tdXRlTm9kZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52b2x1bWVOb2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLnZvbHVtZU5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmF0ZVVwZGF0ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLnJhdGVVcGRhdGVzID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdXNlZCBpbnRlcm5hbGx5IHRvIGNhbGN1bGF0ZSB0b3RhbCBwbGF5YmFjayByYXRlIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI2NhbGN1bGF0ZVJhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVSYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIEJhc2VTb3VuZC5wcm90b3R5cGUuY2FsY3VsYXRlUmF0ZS5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgbm93ID0gdGhpcy5tYW5hZ2VyLmNvbnRleHQuY3VycmVudFRpbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0eXBlb2YgdGhpcy50b3RhbFJhdGUgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHRoaXMudG90YWxSYXRlLCBub3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yYXRlVXBkYXRlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpbWU6IE1hdGgubWF4KHRoaXMuc3RhcnRUaW1lLCBub3cpIC0gdGhpcy5wbGF5VGltZSxcclxuICAgICAgICAgICAgICAgIHJhdGU6IHRoaXMudG90YWxSYXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9vcFNvdXJjZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQW5kUmVtb3ZlTG9vcEJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbmRTdGFydExvb3BCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdXNlZCBpbnRlcm5hbGx5IGZvciBjYWxjdWxhdGluZyBjdXJyZW50IHBsYXliYWNrIHRpbWUgb2YgYSBwbGF5aW5nIHNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjZ2V0Q3VycmVudFRpbWVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZ2V0Q3VycmVudFRpbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhdGVVcGRhdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG5leHRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpIDwgdGhpcy5yYXRlVXBkYXRlcy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0VGltZSA9IHRoaXMucmF0ZVVwZGF0ZXNbaSArIDFdLnRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0VGltZSA9IHRoaXMubWFuYWdlci5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5wbGF5VGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VycmVudFRpbWUgKz0gKG5leHRUaW1lIC0gdGhpcy5yYXRlVXBkYXRlc1tpXS50aW1lKSAqIHRoaXMucmF0ZVVwZGF0ZXNbaV0ucmF0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VGltZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdXNlZCBpbnRlcm5hbGx5IGZvciBjYWxjdWxhdGluZyB0aGUgdGltZVxyXG4gICAgICogYXQgd2l0Y2ggdGhlIGxvb3Agc291cmNlIHNob3VsZCBzdGFydCBwbGF5aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjZ2V0TG9vcFRpbWVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZ2V0TG9vcFRpbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxhc3RSYXRlVXBkYXRlQ3VycmVudFRpbWUgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmF0ZVVwZGF0ZXMubGVuZ3RoIC0gMTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGFzdFJhdGVVcGRhdGVDdXJyZW50VGltZSArPSAodGhpcy5yYXRlVXBkYXRlc1tpICsgMV0udGltZSAtIHRoaXMucmF0ZVVwZGF0ZXNbaV0udGltZSkgKiB0aGlzLnJhdGVVcGRhdGVzW2ldLnJhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGFzdFJhdGVVcGRhdGUgPSB0aGlzLnJhdGVVcGRhdGVzW3RoaXMucmF0ZVVwZGF0ZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXlUaW1lICsgbGFzdFJhdGVVcGRhdGUudGltZSArICh0aGlzLmR1cmF0aW9uIC0gbGFzdFJhdGVVcGRhdGVDdXJyZW50VGltZSkgLyBsYXN0UmF0ZVVwZGF0ZS5yYXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJhdGUgYXQgd2hpY2ggdGhpcyBTb3VuZCB3aWxsIGJlIHBsYXllZC5cclxuICAgICAqIFZhbHVlIG9mIDEuMCBwbGF5cyB0aGUgYXVkaW8gYXQgZnVsbCBzcGVlZCwgMC41IHBsYXlzIHRoZSBhdWRpbyBhdCBoYWxmIHNwZWVkXHJcbiAgICAgKiBhbmQgMi4wIGRvdWJsZXMgdGhlIGF1ZGlvcyBwbGF5YmFjayBzcGVlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNyYXRlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjUkFURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJhdGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZy5yYXRlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLnJhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUmF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5SQVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwbGF5YmFjayByYXRlIG9mIHRoaXMgU291bmQuXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBleGFtcGxlLCBhIHZhbHVlIG9mIDEuMCBwbGF5cyB0aGUgYXVkaW8gYXQgZnVsbCBzcGVlZCwgMC41IHBsYXlzIHRoZSBhdWRpbyBhdCBoYWxmIHNwZWVkXHJcbiAgICAgKiBhbmQgMi4wIGRvdWJsZXMgdGhlIGF1ZGlvcyBwbGF5YmFjayBzcGVlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3NldFJhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1JBVEVcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBwbGF5YmFjayByYXRlIGF0IG9mIHRoaXMgU291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR9IFRoaXMgU291bmQuXHJcbiAgICAgKi9cclxuICAgIHNldFJhdGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRldHVuZSB2YWx1ZSBvZiB0aGlzIFNvdW5kLCBnaXZlbiBpbiBbY2VudHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRfJTI4bXVzaWMlMjkpLlxyXG4gICAgICogVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNkZXR1bmVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNERVRVTkVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXR1bmU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZy5kZXR1bmU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcuZGV0dW5lID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJhdGUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuREVUVU5FLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZXR1bmUgdmFsdWUgb2YgdGhpcyBTb3VuZCwgZ2l2ZW4gaW4gW2NlbnRzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50XyUyOG11c2ljJTI5KS5cclxuICAgICAqIFRoZSByYW5nZSBvZiB0aGUgdmFsdWUgaXMgLTEyMDAgdG8gMTIwMCwgYnV0IHdlIHJlY29tbWVuZCBzZXR0aW5nIGl0IHRvIFs1MF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvNTBfQ2VudCkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNzZXREZXR1bmVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0RFVFVORVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJhbmdlIG9mIHRoZSB2YWx1ZSBpcyAtMTIwMCB0byAxMjAwLCBidXQgd2UgcmVjb21tZW5kIHNldHRpbmcgaXQgdG8gWzUwXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS81MF9DZW50KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZH0gVGhpcyBTb3VuZC5cclxuICAgICAqL1xyXG4gICAgc2V0RGV0dW5lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kZXR1bmUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvdW5kIGlzIG11dGVkIG9yIG5vdC5cclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbXV0ZWQgc3RhdGUgb2YgdGhpcyBzb3VuZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjbXV0ZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjTVVURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG11dGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm11dGVOb2RlLmdhaW4udmFsdWUgPT09IDApO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm11dGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5tdXRlTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHZhbHVlID8gMCA6IDEsIDApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5NVVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtdXRlZCBzdGF0ZSBvZiB0aGlzIFNvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjc2V0TXV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjTVVURVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIGB0cnVlYCB0byBtdXRlIHRoaXMgc291bmQsIGBmYWxzZWAgdG8gdW5tdXRlIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kfSBUaGlzIFNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNdXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tdXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdm9sdW1lIG9mIHRoaXMgc291bmQsIGEgdmFsdWUgYmV0d2VlbiAwIChzaWxlbmNlKSBhbmQgMSAoZnVsbCB2b2x1bWUpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCN2b2x1bWVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNWT0xVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2b2x1bWU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lTm9kZS5nYWluLnZhbHVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLnZvbHVtZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnZvbHVtZU5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZPTFVNRSwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2b2x1bWUgb2YgdGhpcyBTb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3NldFZvbHVtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjVk9MVU1FXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdm9sdW1lIG9mIHRoZSBzb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZH0gVGhpcyBTb3VuZCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Vm9sdW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52b2x1bWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiBwbGF5YmFjayBmb3IgdGhpcyBzb3VuZCwgaW4gc2Vjb25kcy5cclxuICAgICAqIFNldHRpbmcgaXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBtb3ZlcyBjdXJyZW50IHBsYXliYWNrIHRvIHRoYXQgcG9zaXRpb24uXHJcbiAgICAgKiBUaGUgdmFsdWUgZ2l2ZW4gaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgMCB0byBjdXJyZW50IG1hcmtlciBkdXJhdGlvbi5cclxuICAgICAqIFNldHRpbmcgc2VlayBvZiBhIHN0b3BwZWQgc291bmQgaGFzIG5vIGVmZmVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmQjc2Vla1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI1NFRUtcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzZWVrOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFuYWdlci5jb250ZXh0LmN1cnJlbnRUaW1lIDwgdGhpcy5zdGFydFRpbWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lIC0gdGhpcy5wbGF5VGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VGltZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNQYXVzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcuc2VlaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYW5hZ2VyLmNvbnRleHQuY3VycmVudFRpbWUgPCB0aGlzLnN0YXJ0VGltZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcgfHwgdGhpcy5pc1BhdXNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heCgwLCB2YWx1ZSksIHRoaXMuZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5zZWVrID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFuZFJlbW92ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQW5kU3RhcnRCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlNFRUssIHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWVrcyB0byBhIHNwZWNpZmljIHBvaW50IGluIHRoaXMgc291bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZCNzZXRTZWVrXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlNvdW5kLkV2ZW50cyNTRUVLXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgcG9pbnQgaW4gdGhlIHNvdW5kIHRvIHNlZWsgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmR9IFRoaXMgU291bmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNlZWs6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNlZWsgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBzb3VuZCBvciBjdXJyZW50IHNvdW5kIG1hcmtlciB3aWxsIGxvb3AuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI2xvb3BcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsb29wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcubG9vcDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5sb29wID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFuZFJlbW92ZUxvb3BCdWZmZXJTb3VyY2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbmRTdGFydExvb3BCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5MT09QLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGxvb3Agc3RhdGUgb2YgdGhpcyBTb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kI3NldExvb3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBgdHJ1ZWAgdG8gbG9vcCB0aGlzIHNvdW5kLCBgZmFsc2VgIHRvIG5vdCBsb29wIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kfSBUaGlzIFNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRMb29wOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5sb29wID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdlYkF1ZGlvU291bmQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/webaudio/WebAudioSound.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/sound/webaudio/WebAudioSoundManager.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/sound/webaudio/WebAudioSoundManager.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @author       Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Base64ToArrayBuffer = __webpack_require__(/*! ../../utils/base64/Base64ToArrayBuffer */ \"./node_modules/phaser/src/utils/base64/Base64ToArrayBuffer.js\");\r\nvar BaseSoundManager = __webpack_require__(/*! ../BaseSoundManager */ \"./node_modules/phaser/src/sound/BaseSoundManager.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar WebAudioSound = __webpack_require__(/*! ./WebAudioSound */ \"./node_modules/phaser/src/sound/webaudio/WebAudioSound.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Web Audio API implementation of the sound manager.\r\n *\r\n * @class WebAudioSoundManager\r\n * @extends Phaser.Sound.BaseSoundManager\r\n * @memberof Phaser.Sound\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - Reference to the current game instance.\r\n */\r\nvar WebAudioSoundManager = new Class({\r\n\r\n    Extends: BaseSoundManager,\r\n\r\n    initialize:\r\n\r\n    function WebAudioSoundManager (game)\r\n    {\r\n        /**\r\n         * The AudioContext being used for playback.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSoundManager#context\r\n         * @type {AudioContext}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.context = this.createAudioContext(game);\r\n\r\n        /**\r\n         * Gain node responsible for controlling global muting.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSoundManager#masterMuteNode\r\n         * @type {GainNode}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.masterMuteNode = this.context.createGain();\r\n\r\n        /**\r\n         * Gain node responsible for controlling global volume.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSoundManager#masterVolumeNode\r\n         * @type {GainNode}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.masterVolumeNode = this.context.createGain();\r\n\r\n        this.masterMuteNode.connect(this.masterVolumeNode);\r\n\r\n        this.masterVolumeNode.connect(this.context.destination);\r\n\r\n        /**\r\n         * Destination node for connecting individual sounds to.\r\n         *\r\n         * @name Phaser.Sound.WebAudioSoundManager#destination\r\n         * @type {AudioNode}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.destination = this.masterMuteNode;\r\n\r\n        this.locked = this.context.state === 'suspended' && ('ontouchstart' in window || 'onclick' in window);\r\n\r\n        BaseSoundManager.call(this, game);\r\n\r\n        if (this.locked)\r\n        {\r\n            this.unlock();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method responsible for instantiating and returning AudioContext instance.\r\n     * If an instance of an AudioContext class was provided through the game config,\r\n     * that instance will be returned instead. This can come in handy if you are reloading\r\n     * a Phaser game on a page that never properly refreshes (such as in an SPA project)\r\n     * and you want to reuse already instantiated AudioContext.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#createAudioContext\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Game} game - Reference to the current game instance.\r\n     *\r\n     * @return {AudioContext} The AudioContext instance to be used for playback.\r\n     */\r\n    createAudioContext: function (game)\r\n    {\r\n        var audioConfig = game.config.audio;\r\n\r\n        if (audioConfig && audioConfig.context)\r\n        {\r\n            audioConfig.context.resume();\r\n\r\n            return audioConfig.context;\r\n        }\r\n\r\n        return new AudioContext();\r\n    },\r\n\r\n    /**\r\n     * This method takes a new AudioContext reference and then sets\r\n     * this Sound Manager to use that context for all playback.\r\n     * \r\n     * As part of this call it also disconnects the master mute and volume\r\n     * nodes and then re-creates them on the new given context.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#setAudioContext\r\n     * @since 3.21.0\r\n     *\r\n     * @param {AudioContext} context - Reference to an already created AudioContext instance.\r\n     *\r\n     * @return {this} The WebAudioSoundManager instance.\r\n     */\r\n    setAudioContext: function (context)\r\n    {\r\n        if (this.context)\r\n        {\r\n            this.context.close();\r\n        }\r\n\r\n        if (this.masterMuteNode)\r\n        {\r\n            this.masterMuteNode.disconnect();\r\n        }\r\n\r\n        if (this.masterVolumeNode)\r\n        {\r\n            this.masterVolumeNode.disconnect();\r\n        }\r\n\r\n        this.context = context;\r\n\r\n        this.masterMuteNode = context.createGain();\r\n        this.masterVolumeNode = context.createGain();\r\n\r\n        this.masterMuteNode.connect(this.masterVolumeNode);\r\n        this.masterVolumeNode.connect(context.destination);\r\n\r\n        this.destination = this.masterMuteNode;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a new sound into the sound manager.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - Asset key for the sound.\r\n     * @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSound} The new sound instance.\r\n     */\r\n    add: function (key, config)\r\n    {\r\n        var sound = new WebAudioSound(this, key, config);\r\n\r\n        this.sounds.push(sound);\r\n\r\n        return sound;\r\n    },\r\n\r\n    /**\r\n     * Decode audio data into a format ready for playback via Web Audio.\r\n     * \r\n     * The audio data can be a base64 encoded string, an audio media-type data uri, or an ArrayBuffer instance.\r\n     * \r\n     * The `audioKey` is the key that will be used to save the decoded audio to the audio cache.\r\n     * \r\n     * Instead of passing a single entry you can instead pass an array of `Phaser.Types.Sound.DecodeAudioConfig`\r\n     * objects as the first and only argument.\r\n     * \r\n     * Decoding is an async process, so be sure to listen for the events to know when decoding has completed.\r\n     * \r\n     * Once the audio has decoded it can be added to the Sound Manager or played via its key.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#decodeAudio\r\n     * @fires Phaser.Sound.Events#DECODED\r\n     * @fires Phaser.Sound.Events#DECODED_ALL\r\n     * @since 3.18.0\r\n     *\r\n     * @param {(Phaser.Types.Sound.DecodeAudioConfig[]|string)} [audioKey] - The string-based key to be used to reference the decoded audio in the audio cache, or an array of audio config objects.\r\n     * @param {(ArrayBuffer|string)} [audioData] - The audio data, either a base64 encoded string, an audio media-type data uri, or an ArrayBuffer instance.\r\n     */\r\n    decodeAudio: function (audioKey, audioData)\r\n    {\r\n        var audioFiles;\r\n\r\n        if (!Array.isArray(audioKey))\r\n        {\r\n            audioFiles = [ { key: audioKey, data: audioData } ];\r\n        }\r\n        else\r\n        {\r\n            audioFiles = audioKey;\r\n        }\r\n\r\n        var cache = this.game.cache.audio;\r\n        var remaining = audioFiles.length;\r\n\r\n        for (var i = 0; i < audioFiles.length; i++)\r\n        {\r\n            var entry = audioFiles[i];\r\n\r\n            var key = entry.key;\r\n            var data = entry.data;\r\n\r\n            if (typeof data === 'string')\r\n            {\r\n                data = Base64ToArrayBuffer(data);\r\n            }\r\n\r\n            var success = function (key, audioBuffer)\r\n            {\r\n                cache.add(key, audioBuffer);\r\n    \r\n                this.emit(Events.DECODED, key);\r\n\r\n                remaining--;\r\n\r\n                if (remaining === 0)\r\n                {\r\n                    this.emit(Events.DECODED_ALL);\r\n                }\r\n            }.bind(this, key);\r\n    \r\n            var failure = function (key, error)\r\n            {\r\n                //  eslint-disable-next-line no-console\r\n                console.error('Error decoding audio: ' + key + ' - ', error ? error.message : '');\r\n\r\n                remaining--;\r\n\r\n                if (remaining === 0)\r\n                {\r\n                    this.emit(Events.DECODED_ALL);\r\n                }\r\n            }.bind(this, key);\r\n\r\n            this.context.decodeAudioData(data, success, failure);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Unlocks Web Audio API on the initial input event.\r\n     *\r\n     * Read more about how this issue is handled here in [this article](https://medium.com/@pgoloskokovic/unlocking-web-audio-the-smarter-way-8858218c0e09).\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#unlock\r\n     * @since 3.0.0\r\n     */\r\n    unlock: function ()\r\n    {\r\n        var _this = this;\r\n\r\n        var body = document.body;\r\n\r\n        var unlockHandler = function unlockHandler ()\r\n        {\r\n            if (_this.context)\r\n            {\r\n                _this.context.resume().then(function ()\r\n                {\r\n                    body.removeEventListener('touchstart', unlockHandler);\r\n                    body.removeEventListener('touchend', unlockHandler);\r\n                    body.removeEventListener('click', unlockHandler);\r\n                    body.removeEventListener('keydown', unlockHandler);\r\n    \r\n                    _this.unlocked = true;\r\n                }, function ()\r\n                {\r\n                    body.removeEventListener('touchstart', unlockHandler);\r\n                    body.removeEventListener('touchend', unlockHandler);\r\n                    body.removeEventListener('click', unlockHandler);\r\n                    body.removeEventListener('keydown', unlockHandler);\r\n                });\r\n            }\r\n        };\r\n\r\n        if (body)\r\n        {\r\n            body.addEventListener('touchstart', unlockHandler, false);\r\n            body.addEventListener('touchend', unlockHandler, false);\r\n            body.addEventListener('click', unlockHandler, false);\r\n            body.addEventListener('keydown', unlockHandler, false);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally for pausing sound manager if\r\n     * Phaser.Sound.WebAudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#onBlur\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onBlur: function ()\r\n    {\r\n        if (!this.locked)\r\n        {\r\n            this.context.suspend();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Method used internally for resuming sound manager if\r\n     * Phaser.Sound.WebAudioSoundManager#pauseOnBlur is set to true.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#onFocus\r\n     * @protected\r\n     * @since 3.0.0\r\n     */\r\n    onFocus: function ()\r\n    {\r\n        if (!this.locked)\r\n        {\r\n            this.context.resume();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Calls Phaser.Sound.BaseSoundManager#destroy method\r\n     * and cleans up all Web Audio API related stuff.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.destination = null;\r\n        this.masterVolumeNode.disconnect();\r\n        this.masterVolumeNode = null;\r\n        this.masterMuteNode.disconnect();\r\n        this.masterMuteNode = null;\r\n\r\n        if (this.game.config.audio && this.game.config.audio.context)\r\n        {\r\n            this.context.suspend();\r\n        }\r\n        else\r\n        {\r\n            var _this = this;\r\n\r\n            this.context.close().then(function ()\r\n            {\r\n                _this.context = null;\r\n            });\r\n        }\r\n\r\n        BaseSoundManager.prototype.destroy.call(this);\r\n    },\r\n\r\n    /**\r\n     * Sets the muted state of all this Sound Manager.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#setMute\r\n     * @fires Phaser.Sound.Events#GLOBAL_MUTE\r\n     * @since 3.3.0\r\n     *\r\n     * @param {boolean} value - `true` to mute all sounds, `false` to unmute them.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSoundManager} This Sound Manager.\r\n     */\r\n    setMute: function (value)\r\n    {\r\n        this.mute = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * @name Phaser.Sound.WebAudioSoundManager#mute\r\n     * @type {boolean}\r\n     * @fires Phaser.Sound.Events#GLOBAL_MUTE\r\n     * @since 3.0.0\r\n     */\r\n    mute: {\r\n\r\n        get: function ()\r\n        {\r\n            return (this.masterMuteNode.gain.value === 0);\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.masterMuteNode.gain.setValueAtTime(value ? 0 : 1, 0);\r\n\r\n            this.emit(Events.GLOBAL_MUTE, this, value);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Sets the volume of this Sound Manager.\r\n     *\r\n     * @method Phaser.Sound.WebAudioSoundManager#setVolume\r\n     * @fires Phaser.Sound.Events#GLOBAL_VOLUME\r\n     * @since 3.3.0\r\n     *\r\n     * @param {number} value - The global volume of this Sound Manager.\r\n     *\r\n     * @return {Phaser.Sound.WebAudioSoundManager} This Sound Manager.\r\n     */\r\n    setVolume: function (value)\r\n    {\r\n        this.volume = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * @name Phaser.Sound.WebAudioSoundManager#volume\r\n     * @type {number}\r\n     * @fires Phaser.Sound.Events#GLOBAL_VOLUME\r\n     * @since 3.0.0\r\n     */\r\n    volume: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.masterVolumeNode.gain.value;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.masterVolumeNode.gain.setValueAtTime(value, 0);\r\n\r\n            this.emit(Events.GLOBAL_VOLUME, this, value);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = WebAudioSoundManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC93ZWJhdWRpby9XZWJBdWRpb1NvdW5kTWFuYWdlci5qcz9kYmQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLDBCQUEwQixtQkFBTyxDQUFDLDZHQUF3QztBQUMxRSx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxhQUFhLG1CQUFPLENBQUMsa0VBQVc7QUFDaEMsb0JBQW9CLG1CQUFPLENBQUMsa0ZBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLHFCQUFxQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCLGlDQUFpQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zb3VuZC93ZWJhdWRpby9XZWJBdWRpb1NvdW5kTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIFBhdmxlIEdvbG9za29rb3ZpYyA8cGdvbG9za29rb3ZpY0BnbWFpbC5jb20+IChodHRwOi8vcHJ1bmVnYW1lcy5jb20pXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZTY0VG9BcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2Jhc2U2NC9CYXNlNjRUb0FycmF5QnVmZmVyJyk7XHJcbnZhciBCYXNlU291bmRNYW5hZ2VyID0gcmVxdWlyZSgnLi4vQmFzZVNvdW5kTWFuYWdlcicpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBXZWJBdWRpb1NvdW5kID0gcmVxdWlyZSgnLi9XZWJBdWRpb1NvdW5kJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBXZWIgQXVkaW8gQVBJIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzb3VuZCBtYW5hZ2VyLlxyXG4gKlxyXG4gKiBAY2xhc3MgV2ViQXVkaW9Tb3VuZE1hbmFnZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLlNvdW5kLkJhc2VTb3VuZE1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5Tb3VuZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2FtZSBpbnN0YW5jZS5cclxuICovXHJcbnZhciBXZWJBdWRpb1NvdW5kTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQmFzZVNvdW5kTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFdlYkF1ZGlvU291bmRNYW5hZ2VyIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBBdWRpb0NvbnRleHQgYmVpbmcgdXNlZCBmb3IgcGxheWJhY2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNyZWF0ZUF1ZGlvQ29udGV4dChnYW1lKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2FpbiBub2RlIHJlc3BvbnNpYmxlIGZvciBjb250cm9sbGluZyBnbG9iYWwgbXV0aW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyI21hc3Rlck11dGVOb2RlXHJcbiAgICAgICAgICogQHR5cGUge0dhaW5Ob2RlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXN0ZXJNdXRlTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdhaW4gbm9kZSByZXNwb25zaWJsZSBmb3IgY29udHJvbGxpbmcgZ2xvYmFsIHZvbHVtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNtYXN0ZXJWb2x1bWVOb2RlXHJcbiAgICAgICAgICogQHR5cGUge0dhaW5Ob2RlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXN0ZXJWb2x1bWVOb2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXN0ZXJNdXRlTm9kZS5jb25uZWN0KHRoaXMubWFzdGVyVm9sdW1lTm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMubWFzdGVyVm9sdW1lTm9kZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlc3RpbmF0aW9uIG5vZGUgZm9yIGNvbm5lY3RpbmcgaW5kaXZpZHVhbCBzb3VuZHMgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjZGVzdGluYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7QXVkaW9Ob2RlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IHRoaXMubWFzdGVyTXV0ZU5vZGU7XHJcblxyXG4gICAgICAgIHRoaXMubG9ja2VkID0gdGhpcy5jb250ZXh0LnN0YXRlID09PSAnc3VzcGVuZGVkJyAmJiAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICdvbmNsaWNrJyBpbiB3aW5kb3cpO1xyXG5cclxuICAgICAgICBCYXNlU291bmRNYW5hZ2VyLmNhbGwodGhpcywgZ2FtZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvY2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudW5sb2NrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgaW5zdGFudGlhdGluZyBhbmQgcmV0dXJuaW5nIEF1ZGlvQ29udGV4dCBpbnN0YW5jZS5cclxuICAgICAqIElmIGFuIGluc3RhbmNlIG9mIGFuIEF1ZGlvQ29udGV4dCBjbGFzcyB3YXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgZ2FtZSBjb25maWcsXHJcbiAgICAgKiB0aGF0IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZC4gVGhpcyBjYW4gY29tZSBpbiBoYW5keSBpZiB5b3UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICogYSBQaGFzZXIgZ2FtZSBvbiBhIHBhZ2UgdGhhdCBuZXZlciBwcm9wZXJseSByZWZyZXNoZXMgKHN1Y2ggYXMgaW4gYW4gU1BBIHByb2plY3QpXHJcbiAgICAgKiBhbmQgeW91IHdhbnQgdG8gcmV1c2UgYWxyZWFkeSBpbnN0YW50aWF0ZWQgQXVkaW9Db250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyI2NyZWF0ZUF1ZGlvQ29udGV4dFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2FtZSBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtBdWRpb0NvbnRleHR9IFRoZSBBdWRpb0NvbnRleHQgaW5zdGFuY2UgdG8gYmUgdXNlZCBmb3IgcGxheWJhY2suXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUF1ZGlvQ29udGV4dDogZnVuY3Rpb24gKGdhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0NvbmZpZyAmJiBhdWRpb0NvbmZpZy5jb250ZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXVkaW9Db25maWcuY29udGV4dC5yZXN1bWUoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBhdWRpb0NvbmZpZy5jb250ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBBdWRpb0NvbnRleHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIG5ldyBBdWRpb0NvbnRleHQgcmVmZXJlbmNlIGFuZCB0aGVuIHNldHNcclxuICAgICAqIHRoaXMgU291bmQgTWFuYWdlciB0byB1c2UgdGhhdCBjb250ZXh0IGZvciBhbGwgcGxheWJhY2suXHJcbiAgICAgKiBcclxuICAgICAqIEFzIHBhcnQgb2YgdGhpcyBjYWxsIGl0IGFsc28gZGlzY29ubmVjdHMgdGhlIG1hc3RlciBtdXRlIGFuZCB2b2x1bWVcclxuICAgICAqIG5vZGVzIGFuZCB0aGVuIHJlLWNyZWF0ZXMgdGhlbSBvbiB0aGUgbmV3IGdpdmVuIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjc2V0QXVkaW9Db250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGNvbnRleHQgLSBSZWZlcmVuY2UgdG8gYW4gYWxyZWFkeSBjcmVhdGVkIEF1ZGlvQ29udGV4dCBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGUgV2ViQXVkaW9Tb3VuZE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEF1ZGlvQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWFzdGVyTXV0ZU5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hc3Rlck11dGVOb2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1hc3RlclZvbHVtZU5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hc3RlclZvbHVtZU5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5tYXN0ZXJNdXRlTm9kZSA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMubWFzdGVyVm9sdW1lTm9kZSA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG5cclxuICAgICAgICB0aGlzLm1hc3Rlck11dGVOb2RlLmNvbm5lY3QodGhpcy5tYXN0ZXJWb2x1bWVOb2RlKTtcclxuICAgICAgICB0aGlzLm1hc3RlclZvbHVtZU5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IHRoaXMubWFzdGVyTXV0ZU5vZGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgc291bmQgaW50byB0aGUgc291bmQgbWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBc3NldCBrZXkgZm9yIHRoZSBzb3VuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlNvdW5kLlNvdW5kQ29uZmlnfSBbY29uZmlnXSAtIEFuIG9wdGlvbmFsIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNvdW5kIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kfSBUaGUgbmV3IHNvdW5kIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc291bmQgPSBuZXcgV2ViQXVkaW9Tb3VuZCh0aGlzLCBrZXksIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuc291bmRzLnB1c2goc291bmQpO1xyXG5cclxuICAgICAgICByZXR1cm4gc291bmQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb2RlIGF1ZGlvIGRhdGEgaW50byBhIGZvcm1hdCByZWFkeSBmb3IgcGxheWJhY2sgdmlhIFdlYiBBdWRpby5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGF1ZGlvIGRhdGEgY2FuIGJlIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLCBhbiBhdWRpbyBtZWRpYS10eXBlIGRhdGEgdXJpLCBvciBhbiBBcnJheUJ1ZmZlciBpbnN0YW5jZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGBhdWRpb0tleWAgaXMgdGhlIGtleSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzYXZlIHRoZSBkZWNvZGVkIGF1ZGlvIHRvIHRoZSBhdWRpbyBjYWNoZS5cclxuICAgICAqIFxyXG4gICAgICogSW5zdGVhZCBvZiBwYXNzaW5nIGEgc2luZ2xlIGVudHJ5IHlvdSBjYW4gaW5zdGVhZCBwYXNzIGFuIGFycmF5IG9mIGBQaGFzZXIuVHlwZXMuU291bmQuRGVjb2RlQXVkaW9Db25maWdgXHJcbiAgICAgKiBvYmplY3RzIGFzIHRoZSBmaXJzdCBhbmQgb25seSBhcmd1bWVudC5cclxuICAgICAqIFxyXG4gICAgICogRGVjb2RpbmcgaXMgYW4gYXN5bmMgcHJvY2Vzcywgc28gYmUgc3VyZSB0byBsaXN0ZW4gZm9yIHRoZSBldmVudHMgdG8ga25vdyB3aGVuIGRlY29kaW5nIGhhcyBjb21wbGV0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIE9uY2UgdGhlIGF1ZGlvIGhhcyBkZWNvZGVkIGl0IGNhbiBiZSBhZGRlZCB0byB0aGUgU291bmQgTWFuYWdlciBvciBwbGF5ZWQgdmlhIGl0cyBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjZGVjb2RlQXVkaW9cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0RFQ09ERURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0RFQ09ERURfQUxMXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLlNvdW5kLkRlY29kZUF1ZGlvQ29uZmlnW118c3RyaW5nKX0gW2F1ZGlvS2V5XSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IHRvIGJlIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkZWNvZGVkIGF1ZGlvIGluIHRoZSBhdWRpbyBjYWNoZSwgb3IgYW4gYXJyYXkgb2YgYXVkaW8gY29uZmlnIG9iamVjdHMuXHJcbiAgICAgKiBAcGFyYW0geyhBcnJheUJ1ZmZlcnxzdHJpbmcpfSBbYXVkaW9EYXRhXSAtIFRoZSBhdWRpbyBkYXRhLCBlaXRoZXIgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcsIGFuIGF1ZGlvIG1lZGlhLXR5cGUgZGF0YSB1cmksIG9yIGFuIEFycmF5QnVmZmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBkZWNvZGVBdWRpbzogZnVuY3Rpb24gKGF1ZGlvS2V5LCBhdWRpb0RhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGF1ZGlvRmlsZXM7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhdWRpb0tleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdWRpb0ZpbGVzID0gWyB7IGtleTogYXVkaW9LZXksIGRhdGE6IGF1ZGlvRGF0YSB9IF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGF1ZGlvRmlsZXMgPSBhdWRpb0tleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2FtZS5jYWNoZS5hdWRpbztcclxuICAgICAgICB2YXIgcmVtYWluaW5nID0gYXVkaW9GaWxlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXVkaW9GaWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGF1ZGlvRmlsZXNbaV07XHJcblxyXG4gICAgICAgICAgICB2YXIga2V5ID0gZW50cnkua2V5O1xyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IGVudHJ5LmRhdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gQmFzZTY0VG9BcnJheUJ1ZmZlcihkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmdW5jdGlvbiAoa2V5LCBhdWRpb0J1ZmZlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUuYWRkKGtleSwgYXVkaW9CdWZmZXIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFQ09ERUQsIGtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVtYWluaW5nLS07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFQ09ERURfQUxMKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMsIGtleSk7XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIGZhaWx1cmUgPSBmdW5jdGlvbiAoa2V5LCBlcnJvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWNvZGluZyBhdWRpbzogJyArIGtleSArICcgLSAnLCBlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVtYWluaW5nLS07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFQ09ERURfQUxMKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMsIGtleSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGRhdGEsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmxvY2tzIFdlYiBBdWRpbyBBUEkgb24gdGhlIGluaXRpYWwgaW5wdXQgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogUmVhZCBtb3JlIGFib3V0IGhvdyB0aGlzIGlzc3VlIGlzIGhhbmRsZWQgaGVyZSBpbiBbdGhpcyBhcnRpY2xlXShodHRwczovL21lZGl1bS5jb20vQHBnb2xvc2tva292aWMvdW5sb2NraW5nLXdlYi1hdWRpby10aGUtc21hcnRlci13YXktODg1ODIxOGMwZTA5KS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciN1bmxvY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1bmxvY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xyXG5cclxuICAgICAgICB2YXIgdW5sb2NrSGFuZGxlciA9IGZ1bmN0aW9uIHVubG9ja0hhbmRsZXIgKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5jb250ZXh0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB1bmxvY2tIYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdW5sb2NrSGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHVubG9ja0hhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHVubG9ja0hhbmRsZXIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudW5sb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB1bmxvY2tIYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdW5sb2NrSGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHVubG9ja0hhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHVubG9ja0hhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoYm9keSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHVubG9ja0hhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHVubG9ja0hhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHVubG9ja0hhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdW5sb2NrSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdXNlZCBpbnRlcm5hbGx5IGZvciBwYXVzaW5nIHNvdW5kIG1hbmFnZXIgaWZcclxuICAgICAqIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNwYXVzZU9uQmx1ciBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNvbkJsdXJcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkJsdXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvY2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdXNwZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB1c2VkIGludGVybmFsbHkgZm9yIHJlc3VtaW5nIHNvdW5kIG1hbmFnZXIgaWZcclxuICAgICAqIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNwYXVzZU9uQmx1ciBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNvbkZvY3VzXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25Gb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMubG9ja2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc3VtZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxscyBQaGFzZXIuU291bmQuQmFzZVNvdW5kTWFuYWdlciNkZXN0cm95IG1ldGhvZFxyXG4gICAgICogYW5kIGNsZWFucyB1cCBhbGwgV2ViIEF1ZGlvIEFQSSByZWxhdGVkIHN0dWZmLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFzdGVyVm9sdW1lTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5tYXN0ZXJWb2x1bWVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hc3Rlck11dGVOb2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLm1hc3Rlck11dGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2FtZS5jb25maWcuYXVkaW8gJiYgdGhpcy5nYW1lLmNvbmZpZy5hdWRpby5jb250ZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN1c3BlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuY29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQmFzZVNvdW5kTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG11dGVkIHN0YXRlIG9mIGFsbCB0aGlzIFNvdW5kIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjc2V0TXV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX01VVEVcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBgdHJ1ZWAgdG8gbXV0ZSBhbGwgc291bmRzLCBgZmFsc2VgIHRvIHVubXV0ZSB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlcn0gVGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXRNdXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tdXRlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIFBoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlciNtdXRlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuU291bmQuRXZlbnRzI0dMT0JBTF9NVVRFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbXV0ZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMubWFzdGVyTXV0ZU5vZGUuZ2Fpbi52YWx1ZSA9PT0gMCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hc3Rlck11dGVOb2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUodmFsdWUgPyAwIDogMSwgMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdMT0JBTF9NVVRFLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2b2x1bWUgb2YgdGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlNvdW5kLldlYkF1ZGlvU291bmRNYW5hZ2VyI3NldFZvbHVtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX1ZPTFVNRVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGdsb2JhbCB2b2x1bWUgb2YgdGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Tb3VuZC5XZWJBdWRpb1NvdW5kTWFuYWdlcn0gVGhpcyBTb3VuZCBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXRWb2x1bWU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIjdm9sdW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Tb3VuZC5FdmVudHMjR0xPQkFMX1ZPTFVNRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZvbHVtZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJWb2x1bWVOb2RlLmdhaW4udmFsdWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hc3RlclZvbHVtZU5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdMT0JBTF9WT0xVTUUsIHRoaXMsIHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdlYkF1ZGlvU291bmRNYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/sound/webaudio/WebAudioSoundManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/List.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/structs/List.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayUtils = __webpack_require__(/*! ../utils/array */ \"./node_modules/phaser/src/utils/array/index.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar StableSort = __webpack_require__(/*! ../utils/array/StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\");\r\n\r\n/**\r\n * @callback EachListCallback<I>\r\n *\r\n * @param {I} item - The item which is currently being processed.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * List is a generic implementation of an ordered list which contains utility methods for retrieving, manipulating, and iterating items.\r\n *\r\n * @class List\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n *\r\n * @param {*} parent - The parent of this list.\r\n */\r\nvar List = new Class({\r\n\r\n    initialize:\r\n\r\n    function List (parent)\r\n    {\r\n        /**\r\n         * The parent of this list.\r\n         *\r\n         * @name Phaser.Structs.List#parent\r\n         * @type {*}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = parent;\r\n\r\n        /**\r\n         * The objects that belong to this collection.\r\n         *\r\n         * @genericUse {T[]} - [$type]\r\n         *\r\n         * @name Phaser.Structs.List#list\r\n         * @type {Array.<*>}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.list = [];\r\n\r\n        /**\r\n         * The index of the current element.\r\n         * \r\n         * This is used internally when iterating through the list with the {@link #first}, {@link #last}, {@link #get}, and {@link #previous} properties.\r\n         *\r\n         * @name Phaser.Structs.List#position\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.position = 0;\r\n\r\n        /**\r\n         * A callback that is invoked every time a child is added to this list.\r\n         *\r\n         * @name Phaser.Structs.List#addCallback\r\n         * @type {function}\r\n         * @since 3.4.0\r\n         */\r\n        this.addCallback = NOOP;\r\n\r\n        /**\r\n         * A callback that is invoked every time a child is removed from this list.\r\n         *\r\n         * @name Phaser.Structs.List#removeCallback\r\n         * @type {function}\r\n         * @since 3.4.0\r\n         */\r\n        this.removeCallback = NOOP;\r\n\r\n        /**\r\n         * The property key to sort by.\r\n         *\r\n         * @name Phaser.Structs.List#_sortKey\r\n         * @type {string}\r\n         * @since 3.4.0\r\n         */\r\n        this._sortKey = '';\r\n    },\r\n\r\n    /**\r\n     * Adds the given item to the end of the list. Each item must be unique.\r\n     *\r\n     * @method Phaser.Structs.List#add\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*|Array.<*>} child - The item, or array of items, to add to the list.\r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.addCallback if this child is added successfully.\r\n     *\r\n     * @return {*} The list's underlying array.\r\n     */\r\n    add: function (child, skipCallback)\r\n    {\r\n        if (skipCallback)\r\n        {\r\n            return ArrayUtils.Add(this.list, child);\r\n        }\r\n        else\r\n        {\r\n            return ArrayUtils.Add(this.list, child, 0, this.addCallback, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds an item to list, starting at a specified index. Each item must be unique within the list.\r\n     *\r\n     * @method Phaser.Structs.List#addAt\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item, or array of items, to add to the list.\r\n     * @param {integer} [index=0] - The index in the list at which the element(s) will be inserted.\r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.addCallback if this child is added successfully.\r\n     *\r\n     * @return {*} The List's underlying array.\r\n     */\r\n    addAt: function (child, index, skipCallback)\r\n    {\r\n        if (skipCallback)\r\n        {\r\n            return ArrayUtils.AddAt(this.list, child, index);\r\n        }\r\n        else\r\n        {\r\n            return ArrayUtils.AddAt(this.list, child, index, 0, this.addCallback, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Retrieves the item at a given position inside the List.\r\n     *\r\n     * @method Phaser.Structs.List#getAt\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [$return]\r\n     *\r\n     * @param {integer} index - The index of the item.\r\n     *\r\n     * @return {*} The retrieved item, or `undefined` if it's outside the List's bounds.\r\n     */\r\n    getAt: function (index)\r\n    {\r\n        return this.list[index];\r\n    },\r\n\r\n    /**\r\n     * Locates an item within the List and returns its index.\r\n     *\r\n     * @method Phaser.Structs.List#getIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child]\r\n     *\r\n     * @param {*} child - The item to locate.\r\n     *\r\n     * @return {integer} The index of the item within the List, or -1 if it's not in the List.\r\n     */\r\n    getIndex: function (child)\r\n    {\r\n        //  Return -1 if given child isn't a child of this display list\r\n        return this.list.indexOf(child);\r\n    },\r\n\r\n    /**\r\n     * Sort the contents of this List so the items are in order based on the given property.\r\n     * For example, `sort('alpha')` would sort the List contents based on the value of their `alpha` property.\r\n     *\r\n     * @method Phaser.Structs.List#sort\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T[]} - [children,$return]\r\n     *\r\n     * @param {string} property - The property to lexically sort by.\r\n     * @param {function} [handler] - Provide your own custom handler function. Will receive 2 children which it should compare and return a boolean.\r\n     *\r\n     * @return {Phaser.Structs.List} This List object.\r\n     */\r\n    sort: function (property, handler)\r\n    {\r\n        if (!property)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        if (handler === undefined)\r\n        {\r\n            handler = function (childA, childB)\r\n            {\r\n                return childA[property] - childB[property];\r\n            };\r\n        }\r\n\r\n        StableSort.inplace(this.list, handler);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Searches for the first instance of a child with its `name`\r\n     * property matching the given argument. Should more than one child have\r\n     * the same name only the first is returned.\r\n     *\r\n     * @method Phaser.Structs.List#getByName\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T | null} - [$return]\r\n     *\r\n     * @param {string} name - The name to search for.\r\n     *\r\n     * @return {?*} The first child with a matching name, or null if none were found.\r\n     */\r\n    getByName: function (name)\r\n    {\r\n        return ArrayUtils.GetFirst(this.list, 'name', name);\r\n    },\r\n\r\n    /**\r\n     * Returns a random child from the group.\r\n     *\r\n     * @method Phaser.Structs.List#getRandom\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T | null} - [$return]\r\n     *\r\n     * @param {integer} [startIndex=0] - Offset from the front of the group (lowest child).\r\n     * @param {integer} [length=(to top)] - Restriction on the number of values you want to randomly select from.\r\n     *\r\n     * @return {?*} A random child of this Group.\r\n     */\r\n    getRandom: function (startIndex, length)\r\n    {\r\n        return ArrayUtils.GetRandom(this.list, startIndex, length);\r\n    },\r\n\r\n    /**\r\n     * Returns the first element in a given part of the List which matches a specific criterion.\r\n     *\r\n     * @method Phaser.Structs.List#getFirst\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T | null} - [$return]\r\n     *\r\n     * @param {string} property - The name of the property to test or a falsey value to have no criterion.\r\n     * @param {*} value - The value to test the `property` against, or `undefined` to allow any value and only check for existence.\r\n     * @param {number} [startIndex=0] - The position in the List to start the search at.\r\n     * @param {number} [endIndex] - The position in the List to optionally stop the search at. It won't be checked.\r\n     *\r\n     * @return {?*} The first item which matches the given criterion, or `null` if no such item exists.\r\n     */\r\n    getFirst: function (property, value, startIndex, endIndex)\r\n    {\r\n        return ArrayUtils.GetFirst(this.list, property, value, startIndex, endIndex);\r\n    },\r\n\r\n    /**\r\n     * Returns all children in this List.\r\n     *\r\n     * You can optionally specify a matching criteria using the `property` and `value` arguments.\r\n     *\r\n     * For example: `getAll('parent')` would return only children that have a property called `parent`.\r\n     *\r\n     * You can also specify a value to compare the property to:\r\n     * \r\n     * `getAll('visible', true)` would return only children that have their visible property set to `true`.\r\n     *\r\n     * Optionally you can specify a start and end index. For example if this List had 100 children,\r\n     * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n     * the first 50 children in the List.\r\n     *\r\n     * @method Phaser.Structs.List#getAll\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     * @genericUse {T[]} - [$return]\r\n     *\r\n     * @param {string} [property] - An optional property to test against the value argument.\r\n     * @param {*} [value] - If property is set then Child.property must strictly equal this value to be included in the results.\r\n     * @param {integer} [startIndex] - The first child index to start the search from.\r\n     * @param {integer} [endIndex] - The last child index to search up until.\r\n     *\r\n     * @return {Array.<*>} All items of the List which match the given criterion, if any.\r\n     */\r\n    getAll: function (property, value, startIndex, endIndex)\r\n    {\r\n        return ArrayUtils.GetAll(this.list, property, value, startIndex, endIndex);\r\n    },\r\n\r\n    /**\r\n     * Returns the total number of items in the List which have a property matching the given value.\r\n     *\r\n     * @method Phaser.Structs.List#count\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     *\r\n     * @param {string} property - The property to test on each item.\r\n     * @param {*} value - The value to test the property against.\r\n     *\r\n     * @return {integer} The total number of matching elements.\r\n     */\r\n    count: function (property, value)\r\n    {\r\n        return ArrayUtils.CountAllMatching(this.list, property, value);\r\n    },\r\n\r\n    /**\r\n     * Swaps the positions of two items in the list.\r\n     *\r\n     * @method Phaser.Structs.List#swap\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child1,child2]\r\n     *\r\n     * @param {*} child1 - The first item to swap.\r\n     * @param {*} child2 - The second item to swap.\r\n     */\r\n    swap: function (child1, child2)\r\n    {\r\n        ArrayUtils.Swap(this.list, child1, child2);\r\n    },\r\n\r\n    /**\r\n     * Moves an item in the List to a new position.\r\n     *\r\n     * @method Phaser.Structs.List#moveTo\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item to move.\r\n     * @param {integer} index - Moves an item in the List to a new position.\r\n     *\r\n     * @return {*} The item that was moved.\r\n     */\r\n    moveTo: function (child, index)\r\n    {\r\n        return ArrayUtils.MoveTo(this.list, child, index);\r\n    },\r\n\r\n    /**\r\n     * Removes one or many items from the List.\r\n     *\r\n     * @method Phaser.Structs.List#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item, or array of items, to remove.\r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.removeCallback.\r\n     *\r\n     * @return {*} The item, or array of items, which were successfully removed from the List.\r\n     */\r\n    remove: function (child, skipCallback)\r\n    {\r\n        if (skipCallback)\r\n        {\r\n            return ArrayUtils.Remove(this.list, child);\r\n        }\r\n        else\r\n        {\r\n            return ArrayUtils.Remove(this.list, child, this.removeCallback, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes the item at the given position in the List.\r\n     *\r\n     * @method Phaser.Structs.List#removeAt\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [$return]\r\n     *\r\n     * @param {integer} index - The position to remove the item from.\r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.removeCallback.\r\n     *\r\n     * @return {*} The item that was removed.\r\n     */\r\n    removeAt: function (index, skipCallback)\r\n    {\r\n        if (skipCallback)\r\n        {\r\n            return ArrayUtils.RemoveAt(this.list, index);\r\n        }\r\n        else\r\n        {\r\n            return ArrayUtils.RemoveAt(this.list, index, this.removeCallback, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes the items within the given range in the List.\r\n     *\r\n     * @method Phaser.Structs.List#removeBetween\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T[]} - [$return]\r\n     *\r\n     * @param {integer} [startIndex=0] - The index to start removing from.\r\n     * @param {integer} [endIndex] - The position to stop removing at. The item at this position won't be removed.\r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.removeCallback.\r\n     *\r\n     * @return {Array.<*>} An array of the items which were removed.\r\n     */\r\n    removeBetween: function (startIndex, endIndex, skipCallback)\r\n    {\r\n        if (skipCallback)\r\n        {\r\n            return ArrayUtils.RemoveBetween(this.list, startIndex, endIndex);\r\n        }\r\n        else\r\n        {\r\n            return ArrayUtils.RemoveBetween(this.list, startIndex, endIndex, this.removeCallback, this);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes all the items.\r\n     *\r\n     * @method Phaser.Structs.List#removeAll\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.List.<T>} - [$return]\r\n     * \r\n     * @param {boolean} [skipCallback=false] - Skip calling the List.removeCallback.\r\n     *\r\n     * @return {Phaser.Structs.List} This List object.\r\n     */\r\n    removeAll: function (skipCallback)\r\n    {\r\n        var i = this.list.length;\r\n\r\n        while (i--)\r\n        {\r\n            this.remove(this.list[i], skipCallback);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Brings the given child to the top of this List.\r\n     *\r\n     * @method Phaser.Structs.List#bringToTop\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item to bring to the top of the List.\r\n     *\r\n     * @return {*} The item which was moved.\r\n     */\r\n    bringToTop: function (child)\r\n    {\r\n        return ArrayUtils.BringToTop(this.list, child);\r\n    },\r\n\r\n    /**\r\n     * Sends the given child to the bottom of this List.\r\n     *\r\n     * @method Phaser.Structs.List#sendToBack\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item to send to the back of the list.\r\n     *\r\n     * @return {*} The item which was moved.\r\n     */\r\n    sendToBack: function (child)\r\n    {\r\n        return ArrayUtils.SendToBack(this.list, child);\r\n    },\r\n\r\n    /**\r\n     * Moves the given child up one place in this group unless it's already at the top.\r\n     *\r\n     * @method Phaser.Structs.List#moveUp\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item to move up.\r\n     *\r\n     * @return {*} The item which was moved.\r\n     */\r\n    moveUp: function (child)\r\n    {\r\n        ArrayUtils.MoveUp(this.list, child);\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * Moves the given child down one place in this group unless it's already at the bottom.\r\n     *\r\n     * @method Phaser.Structs.List#moveDown\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child,$return]\r\n     *\r\n     * @param {*} child - The item to move down.\r\n     *\r\n     * @return {*} The item which was moved.\r\n     */\r\n    moveDown: function (child)\r\n    {\r\n        ArrayUtils.MoveDown(this.list, child);\r\n\r\n        return child;\r\n    },\r\n\r\n    /**\r\n     * Reverses the order of all children in this List.\r\n     *\r\n     * @method Phaser.Structs.List#reverse\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.List.<T>} - [$return]\r\n     *\r\n     * @return {Phaser.Structs.List} This List object.\r\n     */\r\n    reverse: function ()\r\n    {\r\n        this.list.reverse();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuffles the items in the list.\r\n     *\r\n     * @method Phaser.Structs.List#shuffle\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.List.<T>} - [$return]\r\n     *\r\n     * @return {Phaser.Structs.List} This List object.\r\n     */\r\n    shuffle: function ()\r\n    {\r\n        ArrayUtils.Shuffle(this.list);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Replaces a child of this List with the given newChild. The newChild cannot be a member of this List.\r\n     *\r\n     * @method Phaser.Structs.List#replace\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [oldChild,newChild,$return]\r\n     *\r\n     * @param {*} oldChild - The child in this List that will be replaced.\r\n     * @param {*} newChild - The child to be inserted into this List.\r\n     *\r\n     * @return {*} Returns the oldChild that was replaced within this group.\r\n     */\r\n    replace: function (oldChild, newChild)\r\n    {\r\n        return ArrayUtils.Replace(this.list, oldChild, newChild);\r\n    },\r\n\r\n    /**\r\n     * Checks if an item exists within the List.\r\n     *\r\n     * @method Phaser.Structs.List#exists\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [child]\r\n     *\r\n     * @param {*} child - The item to check for the existence of.\r\n     *\r\n     * @return {boolean} `true` if the item is found in the list, otherwise `false`.\r\n     */\r\n    exists: function (child)\r\n    {\r\n        return (this.list.indexOf(child) > -1);\r\n    },\r\n\r\n    /**\r\n     * Sets the property `key` to the given value on all members of this List.\r\n     *\r\n     * @method Phaser.Structs.List#setAll\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     *\r\n     * @param {string} property - The name of the property to set.\r\n     * @param {*} value - The value to set the property to.\r\n     * @param {integer} [startIndex] - The first child index to start the search from.\r\n     * @param {integer} [endIndex] - The last child index to search up until.\r\n     */\r\n    setAll: function (property, value, startIndex, endIndex)\r\n    {\r\n        ArrayUtils.SetAll(this.list, property, value, startIndex, endIndex);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes all children to the given callback.\r\n     *\r\n     * @method Phaser.Structs.List#each\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {EachListCallback.<T>} - [callback]\r\n     *\r\n     * @param {EachListCallback} callback - The function to call.\r\n     * @param {*} [context] - Value to use as `this` when executing callback.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     */\r\n    each: function (callback, context)\r\n    {\r\n        var args = [ null ];\r\n\r\n        for (var i = 2; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (i = 0; i < this.list.length; i++)\r\n        {\r\n            args[0] = this.list[i];\r\n\r\n            callback.apply(context, args);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Clears the List and recreates its internal array.\r\n     *\r\n     * @method Phaser.Structs.List#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.removeAll();\r\n\r\n        this.list = [];\r\n    },\r\n\r\n    /**\r\n     * Destroys this List.\r\n     *\r\n     * @method Phaser.Structs.List#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAll();\r\n\r\n        this.parent = null;\r\n        this.addCallback = null;\r\n        this.removeCallback = null;\r\n    },\r\n\r\n    /**\r\n     * The number of items inside the List.\r\n     *\r\n     * @name Phaser.Structs.List#length\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    length: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.list.length;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The first item in the List or `null` for an empty List.\r\n     *\r\n     * @name Phaser.Structs.List#first\r\n     * @genericUse {T} - [$type]\r\n     * @type {*}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    first: {\r\n\r\n        get: function ()\r\n        {\r\n            this.position = 0;\r\n\r\n            if (this.list.length > 0)\r\n            {\r\n                return this.list[0];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The last item in the List, or `null` for an empty List.\r\n     *\r\n     * @name Phaser.Structs.List#last\r\n     * @genericUse {T} - [$type]\r\n     * @type {*}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    last: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.list.length > 0)\r\n            {\r\n                this.position = this.list.length - 1;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The next item in the List, or `null` if the entire List has been traversed.\r\n     * \r\n     * This property can be read successively after reading {@link #first} or manually setting the {@link #position} to iterate the List.\r\n     *\r\n     * @name Phaser.Structs.List#next\r\n     * @genericUse {T} - [$type]\r\n     * @type {*}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    next: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.position < this.list.length)\r\n            {\r\n                this.position++;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The previous item in the List, or `null` if the entire List has been traversed.\r\n     * \r\n     * This property can be read successively after reading {@link #last} or manually setting the {@link #position} to iterate the List backwards.\r\n     *\r\n     * @name Phaser.Structs.List#previous\r\n     * @genericUse {T} - [$type]\r\n     * @type {*}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    previous: {\r\n\r\n        get: function ()\r\n        {\r\n            if (this.position > 0)\r\n            {\r\n                this.position--;\r\n\r\n                return this.list[this.position];\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = List;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL0xpc3QuanM/YmI5YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3pDLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDhEQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLHNGQUEyQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsV0FBVyxLQUFLO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLElBQUk7QUFDNUI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsYUFBYSxHQUFHLFlBQVksR0FBRyxXQUFXLE9BQU8sZ0JBQWdCO0FBQzlJO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0EsZUFBZSxZQUFZO0FBQzNCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUk7QUFDeEI7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEdBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixHQUFHO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixHQUFHO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixvQkFBb0IsSUFBSTtBQUN4QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEI7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEI7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEI7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUk7QUFDeEI7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHdCQUF3QjtBQUM1QztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsRUFBRTtBQUNqQixlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxhQUFhLDBCQUEwQixnQkFBZ0I7QUFDcEg7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELFlBQVksMEJBQTBCLGdCQUFnQjtBQUNuSDtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3N0cnVjdHMvTGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFycmF5VXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFN0YWJsZVNvcnQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9TdGFibGVTb3J0Jyk7XHJcblxyXG4vKipcclxuICogQGNhbGxiYWNrIEVhY2hMaXN0Q2FsbGJhY2s8ST5cclxuICpcclxuICogQHBhcmFtIHtJfSBpdGVtIC0gVGhlIGl0ZW0gd2hpY2ggaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cclxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIExpc3QgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGFuIG9yZGVyZWQgbGlzdCB3aGljaCBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIHJldHJpZXZpbmcsIG1hbmlwdWxhdGluZywgYW5kIGl0ZXJhdGluZyBpdGVtcy5cclxuICpcclxuICogQGNsYXNzIExpc3RcclxuICogQG1lbWJlcm9mIFBoYXNlci5TdHJ1Y3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMgVFxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHBhcmVudCAtIFRoZSBwYXJlbnQgb2YgdGhpcyBsaXN0LlxyXG4gKi9cclxudmFyIExpc3QgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGlzdCAocGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJlbnQgb2YgdGhpcyBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuTGlzdCNwYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7Kn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG9iamVjdHMgdGhhdCBiZWxvbmcgdG8gdGhpcyBjb2xsZWN0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGdlbmVyaWNVc2Uge1RbXX0gLSBbJHR5cGVdXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5MaXN0I2xpc3RcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPCo+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBlbGVtZW50LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUge0BsaW5rICNmaXJzdH0sIHtAbGluayAjbGFzdH0sIHtAbGluayAjZ2V0fSwgYW5kIHtAbGluayAjcHJldmlvdXN9IHByb3BlcnRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5MaXN0I3Bvc2l0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCBldmVyeSB0aW1lIGEgY2hpbGQgaXMgYWRkZWQgdG8gdGhpcyBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuTGlzdCNhZGRDYWxsYmFja1xyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFkZENhbGxiYWNrID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGludm9rZWQgZXZlcnkgdGltZSBhIGNoaWxkIGlzIHJlbW92ZWQgZnJvbSB0aGlzIGxpc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5MaXN0I3JlbW92ZUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2FsbGJhY2sgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkga2V5IHRvIHNvcnQgYnkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5MaXN0I19zb3J0S2V5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zb3J0S2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gaXRlbSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBFYWNoIGl0ZW0gbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I2FkZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2NoaWxkLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfEFycmF5LjwqPn0gY2hpbGQgLSBUaGUgaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIHRvIGFkZCB0byB0aGUgbGlzdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBDYWxsYmFjaz1mYWxzZV0gLSBTa2lwIGNhbGxpbmcgdGhlIExpc3QuYWRkQ2FsbGJhY2sgaWYgdGhpcyBjaGlsZCBpcyBhZGRlZCBzdWNjZXNzZnVsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIGxpc3QncyB1bmRlcmx5aW5nIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjaGlsZCwgc2tpcENhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChza2lwQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5BZGQodGhpcy5saXN0LCBjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLkFkZCh0aGlzLmxpc3QsIGNoaWxkLCAwLCB0aGlzLmFkZENhbGxiYWNrLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBpdGVtIHRvIGxpc3QsIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBFYWNoIGl0ZW0gbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNhZGRBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2NoaWxkLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBjaGlsZCAtIFRoZSBpdGVtLCBvciBhcnJheSBvZiBpdGVtcywgdG8gYWRkIHRvIHRoZSBsaXN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBUaGUgaW5kZXggaW4gdGhlIGxpc3QgYXQgd2hpY2ggdGhlIGVsZW1lbnQocykgd2lsbCBiZSBpbnNlcnRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBDYWxsYmFjaz1mYWxzZV0gLSBTa2lwIGNhbGxpbmcgdGhlIExpc3QuYWRkQ2FsbGJhY2sgaWYgdGhpcyBjaGlsZCBpcyBhZGRlZCBzdWNjZXNzZnVsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIExpc3QncyB1bmRlcmx5aW5nIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBhZGRBdDogZnVuY3Rpb24gKGNoaWxkLCBpbmRleCwgc2tpcENhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChza2lwQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5BZGRBdCh0aGlzLmxpc3QsIGNoaWxkLCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLkFkZEF0KHRoaXMubGlzdCwgY2hpbGQsIGluZGV4LCAwLCB0aGlzLmFkZENhbGxiYWNrLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gcG9zaXRpb24gaW5zaWRlIHRoZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNnZXRBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgcmV0cmlldmVkIGl0ZW0sIG9yIGB1bmRlZmluZWRgIGlmIGl0J3Mgb3V0c2lkZSB0aGUgTGlzdCdzIGJvdW5kcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0W2luZGV4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2NhdGVzIGFuIGl0ZW0gd2l0aGluIHRoZSBMaXN0IGFuZCByZXR1cm5zIGl0cyBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjZ2V0SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFtjaGlsZF1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGNoaWxkIC0gVGhlIGl0ZW0gdG8gbG9jYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoaW4gdGhlIExpc3QsIG9yIC0xIGlmIGl0J3Mgbm90IGluIHRoZSBMaXN0LlxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBSZXR1cm4gLTEgaWYgZ2l2ZW4gY2hpbGQgaXNuJ3QgYSBjaGlsZCBvZiB0aGlzIGRpc3BsYXkgbGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QuaW5kZXhPZihjaGlsZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU29ydCB0aGUgY29udGVudHMgb2YgdGhpcyBMaXN0IHNvIHRoZSBpdGVtcyBhcmUgaW4gb3JkZXIgYmFzZWQgb24gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gICAgICogRm9yIGV4YW1wbGUsIGBzb3J0KCdhbHBoYScpYCB3b3VsZCBzb3J0IHRoZSBMaXN0IGNvbnRlbnRzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGVpciBgYWxwaGFgIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNzb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VFtdfSAtIFtjaGlsZHJlbiwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBsZXhpY2FsbHkgc29ydCBieS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtoYW5kbGVyXSAtIFByb3ZpZGUgeW91ciBvd24gY3VzdG9tIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgcmVjZWl2ZSAyIGNoaWxkcmVuIHdoaWNoIGl0IHNob3VsZCBjb21wYXJlIGFuZCByZXR1cm4gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLkxpc3R9IFRoaXMgTGlzdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNvcnQ6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgaGFuZGxlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uIChjaGlsZEEsIGNoaWxkQilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkQVtwcm9wZXJ0eV0gLSBjaGlsZEJbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgU3RhYmxlU29ydC5pbnBsYWNlKHRoaXMubGlzdCwgaGFuZGxlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaGVzIGZvciB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYSBjaGlsZCB3aXRoIGl0cyBgbmFtZWBcclxuICAgICAqIHByb3BlcnR5IG1hdGNoaW5nIHRoZSBnaXZlbiBhcmd1bWVudC4gU2hvdWxkIG1vcmUgdGhhbiBvbmUgY2hpbGQgaGF2ZVxyXG4gICAgICogdGhlIHNhbWUgbmFtZSBvbmx5IHRoZSBmaXJzdCBpcyByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjZ2V0QnlOYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VCB8IG51bGx9IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez8qfSBUaGUgZmlyc3QgY2hpbGQgd2l0aCBhIG1hdGNoaW5nIG5hbWUsIG9yIG51bGwgaWYgbm9uZSB3ZXJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEZpcnN0KHRoaXMubGlzdCwgJ25hbWUnLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIGNoaWxkIGZyb20gdGhlIGdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNnZXRSYW5kb21cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUIHwgbnVsbH0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4PTBdIC0gT2Zmc2V0IGZyb20gdGhlIGZyb250IG9mIHRoZSBncm91cCAobG93ZXN0IGNoaWxkKS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2xlbmd0aD0odG8gdG9wKV0gLSBSZXN0cmljdGlvbiBvbiB0aGUgbnVtYmVyIG9mIHZhbHVlcyB5b3Ugd2FudCB0byByYW5kb21seSBzZWxlY3QgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/Kn0gQSByYW5kb20gY2hpbGQgb2YgdGhpcyBHcm91cC5cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZG9tOiBmdW5jdGlvbiAoc3RhcnRJbmRleCwgbGVuZ3RoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldFJhbmRvbSh0aGlzLmxpc3QsIHN0YXJ0SW5kZXgsIGxlbmd0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIGdpdmVuIHBhcnQgb2YgdGhlIExpc3Qgd2hpY2ggbWF0Y2hlcyBhIHNwZWNpZmljIGNyaXRlcmlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjZ2V0Rmlyc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUIHwgbnVsbH0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gdGVzdCBvciBhIGZhbHNleSB2YWx1ZSB0byBoYXZlIG5vIGNyaXRlcmlvbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdCB0aGUgYHByb3BlcnR5YCBhZ2FpbnN0LCBvciBgdW5kZWZpbmVkYCB0byBhbGxvdyBhbnkgdmFsdWUgYW5kIG9ubHkgY2hlY2sgZm9yIGV4aXN0ZW5jZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRJbmRleD0wXSAtIFRoZSBwb3NpdGlvbiBpbiB0aGUgTGlzdCB0byBzdGFydCB0aGUgc2VhcmNoIGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmRJbmRleF0gLSBUaGUgcG9zaXRpb24gaW4gdGhlIExpc3QgdG8gb3B0aW9uYWxseSBzdG9wIHRoZSBzZWFyY2ggYXQuIEl0IHdvbid0IGJlIGNoZWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Pyp9IFRoZSBmaXJzdCBpdGVtIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlvbiwgb3IgYG51bGxgIGlmIG5vIHN1Y2ggaXRlbSBleGlzdHMuXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5HZXRGaXJzdCh0aGlzLmxpc3QsIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGNoaWxkcmVuIGluIHRoaXMgTGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIG1hdGNoaW5nIGNyaXRlcmlhIHVzaW5nIHRoZSBgcHJvcGVydHlgIGFuZCBgdmFsdWVgIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgZXhhbXBsZTogYGdldEFsbCgncGFyZW50JylgIHdvdWxkIHJldHVybiBvbmx5IGNoaWxkcmVuIHRoYXQgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBgcGFyZW50YC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHZhbHVlIHRvIGNvbXBhcmUgdGhlIHByb3BlcnR5IHRvOlxyXG4gICAgICogXHJcbiAgICAgKiBgZ2V0QWxsKCd2aXNpYmxlJywgdHJ1ZSlgIHdvdWxkIHJldHVybiBvbmx5IGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGVpciB2aXNpYmxlIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogT3B0aW9uYWxseSB5b3UgY2FuIHNwZWNpZnkgYSBzdGFydCBhbmQgZW5kIGluZGV4LiBGb3IgZXhhbXBsZSBpZiB0aGlzIExpc3QgaGFkIDEwMCBjaGlsZHJlbixcclxuICAgICAqIGFuZCB5b3Ugc2V0IGBzdGFydEluZGV4YCB0byAwIGFuZCBgZW5kSW5kZXhgIHRvIDUwLCBpdCB3b3VsZCByZXR1cm4gbWF0Y2hlcyBmcm9tIG9ubHlcclxuICAgICAqIHRoZSBmaXJzdCA1MCBjaGlsZHJlbiBpbiB0aGUgTGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjZ2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbdmFsdWVdXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VFtdfSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcGVydHldIC0gQW4gb3B0aW9uYWwgcHJvcGVydHkgdG8gdGVzdCBhZ2FpbnN0IHRoZSB2YWx1ZSBhcmd1bWVudC5cclxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSAtIElmIHByb3BlcnR5IGlzIHNldCB0aGVuIENoaWxkLnByb3BlcnR5IG11c3Qgc3RyaWN0bHkgZXF1YWwgdGhpcyB2YWx1ZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0cy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0SW5kZXhdIC0gVGhlIGZpcnN0IGNoaWxkIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBsYXN0IGNoaWxkIGluZGV4IHRvIHNlYXJjaCB1cCB1bnRpbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48Kj59IEFsbCBpdGVtcyBvZiB0aGUgTGlzdCB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaW9uLCBpZiBhbnkuXHJcbiAgICAgKi9cclxuICAgIGdldEFsbDogZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuR2V0QWxsKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBMaXN0IHdoaWNoIGhhdmUgYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I2NvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbdmFsdWVdXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHRlc3Qgb24gZWFjaCBpdGVtLlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0IHRoZSBwcm9wZXJ0eSBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hpbmcgZWxlbWVudHMuXHJcbiAgICAgKi9cclxuICAgIGNvdW50OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkNvdW50QWxsTWF0Y2hpbmcodGhpcy5saXN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN3YXBzIHRoZSBwb3NpdGlvbnMgb2YgdHdvIGl0ZW1zIGluIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNzd2FwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbY2hpbGQxLGNoaWxkMl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGNoaWxkMSAtIFRoZSBmaXJzdCBpdGVtIHRvIHN3YXAuXHJcbiAgICAgKiBAcGFyYW0geyp9IGNoaWxkMiAtIFRoZSBzZWNvbmQgaXRlbSB0byBzd2FwLlxyXG4gICAgICovXHJcbiAgICBzd2FwOiBmdW5jdGlvbiAoY2hpbGQxLCBjaGlsZDIpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5Td2FwKHRoaXMubGlzdCwgY2hpbGQxLCBjaGlsZDIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGFuIGl0ZW0gaW4gdGhlIExpc3QgdG8gYSBuZXcgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2NoaWxkLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBjaGlsZCAtIFRoZSBpdGVtIHRvIG1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gTW92ZXMgYW4gaXRlbSBpbiB0aGUgTGlzdCB0byBhIG5ldyBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgaXRlbSB0aGF0IHdhcyBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgbW92ZVRvOiBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLk1vdmVUbyh0aGlzLmxpc3QsIGNoaWxkLCBpbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBvbmUgb3IgbWFueSBpdGVtcyBmcm9tIHRoZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFtjaGlsZCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gY2hpbGQgLSBUaGUgaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIHRvIHJlbW92ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBDYWxsYmFjaz1mYWxzZV0gLSBTa2lwIGNhbGxpbmcgdGhlIExpc3QucmVtb3ZlQ2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIGl0ZW0sIG9yIGFycmF5IG9mIGl0ZW1zLCB3aGljaCB3ZXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIExpc3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKGNoaWxkLCBza2lwQ2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNraXBDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlbW92ZSh0aGlzLmxpc3QsIGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuUmVtb3ZlKHRoaXMubGlzdCwgY2hpbGQsIHRoaXMucmVtb3ZlQ2FsbGJhY2ssIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgTGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjcmVtb3ZlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgcG9zaXRpb24gdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwQ2FsbGJhY2s9ZmFsc2VdIC0gU2tpcCBjYWxsaW5nIHRoZSBMaXN0LnJlbW92ZUNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0OiBmdW5jdGlvbiAoaW5kZXgsIHNraXBDYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoc2tpcENhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuUmVtb3ZlQXQodGhpcy5saXN0LCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlbW92ZUF0KHRoaXMubGlzdCwgaW5kZXgsIHRoaXMucmVtb3ZlQ2FsbGJhY2ssIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBpdGVtcyB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlIGluIHRoZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNyZW1vdmVCZXR3ZWVuXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VFtdfSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0SW5kZXg9MF0gLSBUaGUgaW5kZXggdG8gc3RhcnQgcmVtb3ZpbmcgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBwb3NpdGlvbiB0byBzdG9wIHJlbW92aW5nIGF0LiBUaGUgaXRlbSBhdCB0aGlzIHBvc2l0aW9uIHdvbid0IGJlIHJlbW92ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwQ2FsbGJhY2s9ZmFsc2VdIC0gU2tpcCBjYWxsaW5nIHRoZSBMaXN0LnJlbW92ZUNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjwqPn0gQW4gYXJyYXkgb2YgdGhlIGl0ZW1zIHdoaWNoIHdlcmUgcmVtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQmV0d2VlbjogZnVuY3Rpb24gKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBza2lwQ2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNraXBDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlbW92ZUJldHdlZW4odGhpcy5saXN0LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlbW92ZUJldHdlZW4odGhpcy5saXN0LCBzdGFydEluZGV4LCBlbmRJbmRleCwgdGhpcy5yZW1vdmVDYWxsYmFjaywgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBpdGVtcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjcmVtb3ZlQWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuTGlzdC48VD59IC0gWyRyZXR1cm5dXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBDYWxsYmFjaz1mYWxzZV0gLSBTa2lwIGNhbGxpbmcgdGhlIExpc3QucmVtb3ZlQ2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuTGlzdH0gVGhpcyBMaXN0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoc2tpcENhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5saXN0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRoaXMubGlzdFtpXSwgc2tpcENhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJyaW5ncyB0aGUgZ2l2ZW4gY2hpbGQgdG8gdGhlIHRvcCBvZiB0aGlzIExpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I2JyaW5nVG9Ub3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFtjaGlsZCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gY2hpbGQgLSBUaGUgaXRlbSB0byBicmluZyB0byB0aGUgdG9wIG9mIHRoZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHdoaWNoIHdhcyBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgYnJpbmdUb1RvcDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkJyaW5nVG9Ub3AodGhpcy5saXN0LCBjaGlsZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIGdpdmVuIGNoaWxkIHRvIHRoZSBib3R0b20gb2YgdGhpcyBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNzZW5kVG9CYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbY2hpbGQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGNoaWxkIC0gVGhlIGl0ZW0gdG8gc2VuZCB0byB0aGUgYmFjayBvZiB0aGUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgaXRlbSB3aGljaCB3YXMgbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHNlbmRUb0JhY2s6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5TZW5kVG9CYWNrKHRoaXMubGlzdCwgY2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSBnaXZlbiBjaGlsZCB1cCBvbmUgcGxhY2UgaW4gdGhpcyBncm91cCB1bmxlc3MgaXQncyBhbHJlYWR5IGF0IHRoZSB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I21vdmVVcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2NoaWxkLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBjaGlsZCAtIFRoZSBpdGVtIHRvIG1vdmUgdXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIGl0ZW0gd2hpY2ggd2FzIG1vdmVkLlxyXG4gICAgICovXHJcbiAgICBtb3ZlVXA6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLk1vdmVVcCh0aGlzLmxpc3QsIGNoaWxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSBnaXZlbiBjaGlsZCBkb3duIG9uZSBwbGFjZSBpbiB0aGlzIGdyb3VwIHVubGVzcyBpdCdzIGFscmVhZHkgYXQgdGhlIGJvdHRvbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjbW92ZURvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFtjaGlsZCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gY2hpbGQgLSBUaGUgaXRlbSB0byBtb3ZlIGRvd24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIGl0ZW0gd2hpY2ggd2FzIG1vdmVkLlxyXG4gICAgICovXHJcbiAgICBtb3ZlRG93bjogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuTW92ZURvd24odGhpcy5saXN0LCBjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlcyB0aGUgb3JkZXIgb2YgYWxsIGNoaWxkcmVuIGluIHRoaXMgTGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLkxpc3QjcmV2ZXJzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLkxpc3QuPFQ+fSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLkxpc3R9IFRoaXMgTGlzdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJldmVyc2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5saXN0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1ZmZsZXMgdGhlIGl0ZW1zIGluIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNzaHVmZmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuTGlzdC48VD59IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuTGlzdH0gVGhpcyBMaXN0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLlNodWZmbGUodGhpcy5saXN0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgYSBjaGlsZCBvZiB0aGlzIExpc3Qgd2l0aCB0aGUgZ2l2ZW4gbmV3Q2hpbGQuIFRoZSBuZXdDaGlsZCBjYW5ub3QgYmUgYSBtZW1iZXIgb2YgdGhpcyBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNyZXBsYWNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbb2xkQ2hpbGQsbmV3Q2hpbGQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IG9sZENoaWxkIC0gVGhlIGNoaWxkIGluIHRoaXMgTGlzdCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXHJcbiAgICAgKiBAcGFyYW0geyp9IG5ld0NoaWxkIC0gVGhlIGNoaWxkIHRvIGJlIGluc2VydGVkIGludG8gdGhpcyBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIG9sZENoaWxkIHRoYXQgd2FzIHJlcGxhY2VkIHdpdGhpbiB0aGlzIGdyb3VwLlxyXG4gICAgICovXHJcbiAgICByZXBsYWNlOiBmdW5jdGlvbiAob2xkQ2hpbGQsIG5ld0NoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlcGxhY2UodGhpcy5saXN0LCBvbGRDaGlsZCwgbmV3Q2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbiBpdGVtIGV4aXN0cyB3aXRoaW4gdGhlIExpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I2V4aXN0c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2NoaWxkXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gY2hpbGQgLSBUaGUgaXRlbSB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGl0ZW0gaXMgZm91bmQgaW4gdGhlIGxpc3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBleGlzdHM6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlzdC5pbmRleE9mKGNoaWxkKSA+IC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwcm9wZXJ0eSBga2V5YCB0byB0aGUgZ2l2ZW4gdmFsdWUgb24gYWxsIG1lbWJlcnMgb2YgdGhpcyBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNzZXRBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFt2YWx1ZV1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleF0gLSBUaGUgZmlyc3QgY2hpbGQgaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXhdIC0gVGhlIGxhc3QgY2hpbGQgaW5kZXggdG8gc2VhcmNoIHVwIHVudGlsLlxyXG4gICAgICovXHJcbiAgICBzZXRBbGw6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuU2V0QWxsKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3NlcyBhbGwgY2hpbGRyZW4gdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNlYWNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7RWFjaExpc3RDYWxsYmFjay48VD59IC0gW2NhbGxiYWNrXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWFjaExpc3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBjYWxsYmFjay5cclxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBjaGlsZC5cclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gWyBudWxsIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5saXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMubGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIExpc3QgYW5kIHJlY3JlYXRlcyBpdHMgaW50ZXJuYWwgYXJyYXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5MaXN0I3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTGlzdCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hZGRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDYWxsYmFjayA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG51bWJlciBvZiBpdGVtcyBpbnNpZGUgdGhlIExpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuTGlzdCNsZW5ndGhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIExpc3Qgb3IgYG51bGxgIGZvciBhbiBlbXB0eSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLkxpc3QjZmlyc3RcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFskdHlwZV1cclxuICAgICAqIEB0eXBlIHsqfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZmlyc3Q6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxhc3QgaXRlbSBpbiB0aGUgTGlzdCwgb3IgYG51bGxgIGZvciBhbiBlbXB0eSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLkxpc3QjbGFzdFxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gWyR0eXBlXVxyXG4gICAgICogQHR5cGUgeyp9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsYXN0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMubGlzdC5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RbdGhpcy5wb3NpdGlvbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5leHQgaXRlbSBpbiB0aGUgTGlzdCwgb3IgYG51bGxgIGlmIHRoZSBlbnRpcmUgTGlzdCBoYXMgYmVlbiB0cmF2ZXJzZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHJlYWQgc3VjY2Vzc2l2ZWx5IGFmdGVyIHJlYWRpbmcge0BsaW5rICNmaXJzdH0gb3IgbWFudWFsbHkgc2V0dGluZyB0aGUge0BsaW5rICNwb3NpdGlvbn0gdG8gaXRlcmF0ZSB0aGUgTGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5MaXN0I25leHRcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFskdHlwZV1cclxuICAgICAqIEB0eXBlIHsqfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbmV4dDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA8IHRoaXMubGlzdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24rKztcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0W3RoaXMucG9zaXRpb25dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBMaXN0LCBvciBgbnVsbGAgaWYgdGhlIGVudGlyZSBMaXN0IGhhcyBiZWVuIHRyYXZlcnNlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgcmVhZCBzdWNjZXNzaXZlbHkgYWZ0ZXIgcmVhZGluZyB7QGxpbmsgI2xhc3R9IG9yIG1hbnVhbGx5IHNldHRpbmcgdGhlIHtAbGluayAjcG9zaXRpb259IHRvIGl0ZXJhdGUgdGhlIExpc3QgYmFja3dhcmRzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLkxpc3QjcHJldmlvdXNcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFskdHlwZV1cclxuICAgICAqIEB0eXBlIHsqfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcHJldmlvdXM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLS07XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFt0aGlzLnBvc2l0aW9uXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaXN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/List.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/Map.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/structs/Map.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @callback EachMapCallback<E>\r\n *\r\n * @param {string} key - The key of the Map entry.\r\n * @param {E} entry - The value of the Map entry.\r\n *\r\n * @return {?boolean} The callback result.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The keys of a Map can be arbitrary values.\r\n * \r\n * ```javascript\r\n * var map = new Map([\r\n *    [ 1, 'one' ],\r\n *    [ 2, 'two' ],\r\n *    [ 3, 'three' ]\r\n * ]);\r\n * ```\r\n *\r\n * @class Map\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @generic K\r\n * @generic V\r\n * @genericUse {V[]} - [elements]\r\n *\r\n * @param {Array.<*>} elements - An optional array of key-value pairs to populate this Map with.\r\n */\r\nvar Map = new Class({\r\n\r\n    initialize:\r\n\r\n    function Map (elements)\r\n    {\r\n        /**\r\n         * The entries in this Map.\r\n         *\r\n         * @genericUse {Object.<string, V>} - [$type]\r\n         *\r\n         * @name Phaser.Structs.Map#entries\r\n         * @type {Object.<string, *>}\r\n         * @default {}\r\n         * @since 3.0.0\r\n         */\r\n        this.entries = {};\r\n\r\n        /**\r\n         * The number of key / value pairs in this Map.\r\n         *\r\n         * @name Phaser.Structs.Map#size\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.size = 0;\r\n\r\n        if (Array.isArray(elements))\r\n        {\r\n            for (var i = 0; i < elements.length; i++)\r\n            {\r\n                this.set(elements[i][0], elements[i][1]);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds an element with a specified `key` and `value` to this Map.\r\n     * If the `key` already exists, the value will be replaced.\r\n     *\r\n     * @method Phaser.Structs.Map#set\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {K} - [key]\r\n     * @genericUse {V} - [value]\r\n     * @genericUse {Phaser.Structs.Map.<K, V>} - [$return]\r\n     *\r\n     * @param {string} key - The key of the element to be added to this Map.\r\n     * @param {*} value - The value of the element to be added to this Map.\r\n     *\r\n     * @return {Phaser.Structs.Map} This Map object.\r\n     */\r\n    set: function (key, value)\r\n    {\r\n        if (!this.has(key))\r\n        {\r\n            this.size++;\r\n        }\r\n\r\n        this.entries[key] = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the value associated to the `key`, or `undefined` if there is none.\r\n     *\r\n     * @method Phaser.Structs.Map#get\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {K} - [key]\r\n     * @genericUse {V} - [$return]\r\n     *\r\n     * @param {string} key - The key of the element to return from the `Map` object.\r\n     *\r\n     * @return {*} The element associated with the specified key or `undefined` if the key can't be found in this Map object.\r\n     */\r\n    get: function (key)\r\n    {\r\n        if (this.has(key))\r\n        {\r\n            return this.entries[key];\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an `Array` of all the values stored in this Map.\r\n     *\r\n     * @method Phaser.Structs.Map#getArray\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {V[]} - [$return]\r\n     *\r\n     * @return {Array.<*>} An array of the values stored in this Map.\r\n     */\r\n    getArray: function ()\r\n    {\r\n        var output = [];\r\n        var entries = this.entries;\r\n\r\n        for (var key in entries)\r\n        {\r\n            output.push(entries[key]);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Returns a boolean indicating whether an element with the specified key exists or not.\r\n     *\r\n     * @method Phaser.Structs.Map#has\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {K} - [key]\r\n     *\r\n     * @param {string} key - The key of the element to test for presence of in this Map.\r\n     *\r\n     * @return {boolean} Returns `true` if an element with the specified key exists in this Map, otherwise `false`.\r\n     */\r\n    has: function (key)\r\n    {\r\n        return (this.entries.hasOwnProperty(key));\r\n    },\r\n\r\n    /**\r\n     * Delete the specified element from this Map.\r\n     *\r\n     * @method Phaser.Structs.Map#delete\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {K} - [key]\r\n     * @genericUse {Phaser.Structs.Map.<K, V>} - [$return]\r\n     *\r\n     * @param {string} key - The key of the element to delete from this Map.\r\n     *\r\n     * @return {Phaser.Structs.Map} This Map object.\r\n     */\r\n    delete: function (key)\r\n    {\r\n        if (this.has(key))\r\n        {\r\n            delete this.entries[key];\r\n            this.size--;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Delete all entries from this Map.\r\n     *\r\n     * @method Phaser.Structs.Map#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Map.<K, V>} - [$return]\r\n     *\r\n     * @return {Phaser.Structs.Map} This Map object.\r\n     */\r\n    clear: function ()\r\n    {\r\n        Object.keys(this.entries).forEach(function (prop)\r\n        {\r\n            delete this.entries[prop];\r\n\r\n        }, this);\r\n\r\n        this.size = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns all entries keys in this Map.\r\n     *\r\n     * @method Phaser.Structs.Map#keys\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {K[]} - [$return]\r\n     *\r\n     * @return {string[]} Array containing entries' keys.\r\n     */\r\n    keys: function ()\r\n    {\r\n        return Object.keys(this.entries);\r\n    },\r\n\r\n    /**\r\n     * Returns an `Array` of all entries.\r\n     *\r\n     * @method Phaser.Structs.Map#values\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {V[]} - [$return]\r\n     *\r\n     * @return {Array.<*>} An `Array` of entries.\r\n     */\r\n    values: function ()\r\n    {\r\n        var output = [];\r\n        var entries = this.entries;\r\n\r\n        for (var key in entries)\r\n        {\r\n            output.push(entries[key]);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Dumps the contents of this Map to the console via `console.group`.\r\n     *\r\n     * @method Phaser.Structs.Map#dump\r\n     * @since 3.0.0\r\n     */\r\n    dump: function ()\r\n    {\r\n        var entries = this.entries;\r\n\r\n        // eslint-disable-next-line no-console\r\n        console.group('Map');\r\n\r\n        for (var key in entries)\r\n        {\r\n            console.log(key, entries[key]);\r\n        }\r\n\r\n        // eslint-disable-next-line no-console\r\n        console.groupEnd();\r\n    },\r\n\r\n    /**\r\n     * Passes all entries in this Map to the given callback.\r\n     *\r\n     * @method Phaser.Structs.Map#each\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {EachMapCallback.<V>} - [callback]\r\n     * @genericUse {Phaser.Structs.Map.<K, V>} - [$return]\r\n     *\r\n     * @param {EachMapCallback} callback - The callback which will receive the keys and entries held in this Map.\r\n     *\r\n     * @return {Phaser.Structs.Map} This Map object.\r\n     */\r\n    each: function (callback)\r\n    {\r\n        var entries = this.entries;\r\n\r\n        for (var key in entries)\r\n        {\r\n            if (callback(key, entries[key]) === false)\r\n            {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns `true` if the value exists within this Map. Otherwise, returns `false`.\r\n     *\r\n     * @method Phaser.Structs.Map#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {V} - [value]\r\n     *\r\n     * @param {*} value - The value to search for.\r\n     *\r\n     * @return {boolean} `true` if the value is found, otherwise `false`.\r\n     */\r\n    contains: function (value)\r\n    {\r\n        var entries = this.entries;\r\n\r\n        for (var key in entries)\r\n        {\r\n            if (entries[key] === value)\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Merges all new keys from the given Map into this one.\r\n     * If it encounters a key that already exists it will be skipped unless override is set to `true`.\r\n     *\r\n     * @method Phaser.Structs.Map#merge\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Map.<K, V>} - [map,$return]\r\n     *\r\n     * @param {Phaser.Structs.Map} map - The Map to merge in to this Map.\r\n     * @param {boolean} [override=false] - Set to `true` to replace values in this Map with those from the source map, or `false` to skip them.\r\n     *\r\n     * @return {Phaser.Structs.Map} This Map object.\r\n     */\r\n    merge: function (map, override)\r\n    {\r\n        if (override === undefined) { override = false; }\r\n\r\n        var local = this.entries;\r\n        var source = map.entries;\r\n\r\n        for (var key in source)\r\n        {\r\n            if (local.hasOwnProperty(key) && override)\r\n            {\r\n                local[key] = source[key];\r\n            }\r\n            else\r\n            {\r\n                this.set(key, source[key]);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Map;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL01hcC5qcz84MDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLFNBQVM7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEIsb0JBQW9CLEVBQUU7QUFDdEIsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTOztBQUVUOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEMsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEI7QUFDQSxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc3RydWN0cy9NYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcblxyXG4vKipcclxuICogQGNhbGxiYWNrIEVhY2hNYXBDYWxsYmFjazxFPlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgTWFwIGVudHJ5LlxyXG4gKiBAcGFyYW0ge0V9IGVudHJ5IC0gVGhlIHZhbHVlIG9mIHRoZSBNYXAgZW50cnkuXHJcbiAqXHJcbiAqIEByZXR1cm4gez9ib29sZWFufSBUaGUgY2FsbGJhY2sgcmVzdWx0LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBrZXlzIG9mIGEgTWFwIGNhbiBiZSBhcmJpdHJhcnkgdmFsdWVzLlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgbWFwID0gbmV3IE1hcChbXHJcbiAqICAgIFsgMSwgJ29uZScgXSxcclxuICogICAgWyAyLCAndHdvJyBdLFxyXG4gKiAgICBbIDMsICd0aHJlZScgXVxyXG4gKiBdKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBjbGFzcyBNYXBcclxuICogQG1lbWJlcm9mIFBoYXNlci5TdHJ1Y3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMgS1xyXG4gKiBAZ2VuZXJpYyBWXHJcbiAqIEBnZW5lcmljVXNlIHtWW119IC0gW2VsZW1lbnRzXVxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5LjwqPn0gZWxlbWVudHMgLSBBbiBvcHRpb25hbCBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gcG9wdWxhdGUgdGhpcyBNYXAgd2l0aC5cclxuICovXHJcbnZhciBNYXAgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTWFwIChlbGVtZW50cylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZW50cmllcyBpbiB0aGlzIE1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBnZW5lcmljVXNlIHtPYmplY3QuPHN0cmluZywgVj59IC0gWyR0eXBlXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuTWFwI2VudHJpZXNcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsICo+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHt9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyaWVzID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2Yga2V5IC8gdmFsdWUgcGFpcnMgaW4gdGhpcyBNYXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5NYXAjc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2l6ZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGVsZW1lbnRzW2ldWzBdLCBlbGVtZW50c1tpXVsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgYGtleWAgYW5kIGB2YWx1ZWAgdG8gdGhpcyBNYXAuXHJcbiAgICAgKiBJZiB0aGUgYGtleWAgYWxyZWFkeSBleGlzdHMsIHRoZSB2YWx1ZSB3aWxsIGJlIHJlcGxhY2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTWFwI3NldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge0t9IC0gW2tleV1cclxuICAgICAqIEBnZW5lcmljVXNlIHtWfSAtIFt2YWx1ZV1cclxuICAgICAqIEBnZW5lcmljVXNlIHtQaGFzZXIuU3RydWN0cy5NYXAuPEssIFY+fSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoaXMgTWFwLlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGlzIE1hcC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU3RydWN0cy5NYXB9IFRoaXMgTWFwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNpemUrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW50cmllc1trZXldID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGBrZXlgLCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBub25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuTWFwI2dldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge0t9IC0gW2tleV1cclxuICAgICAqIEBnZW5lcmljVXNlIHtWfSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybiBmcm9tIHRoZSBgTWFwYCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IG9yIGB1bmRlZmluZWRgIGlmIHRoZSBrZXkgY2FuJ3QgYmUgZm91bmQgaW4gdGhpcyBNYXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzKGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYEFycmF5YCBvZiBhbGwgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5NYXAjZ2V0QXJyYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtWW119IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBbiBhcnJheSBvZiB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGlzIE1hcC5cclxuICAgICAqL1xyXG4gICAgZ2V0QXJyYXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xyXG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZW50cmllcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGVudHJpZXNba2V5XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZXhpc3RzIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtLfSAtIFtrZXldXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGVsZW1lbnQgdG8gdGVzdCBmb3IgcHJlc2VuY2Ugb2YgaW4gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGV4aXN0cyBpbiB0aGlzIE1hcCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZW50cmllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgdGhlIHNwZWNpZmllZCBlbGVtZW50IGZyb20gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5NYXAjZGVsZXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7S30gLSBba2V5XVxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLk1hcC48SywgVj59IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuTWFwfSBUaGlzIE1hcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNba2V5XTtcclxuICAgICAgICAgICAgdGhpcy5zaXplLS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgYWxsIGVudHJpZXMgZnJvbSB0aGlzIE1hcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCNjbGVhclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLk1hcC48SywgVj59IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuTWFwfSBUaGlzIE1hcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZW50cmllcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNbcHJvcF07XHJcblxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNpemUgPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsbCBlbnRyaWVzIGtleXMgaW4gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5NYXAja2V5c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge0tbXX0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgY29udGFpbmluZyBlbnRyaWVzJyBrZXlzLlxyXG4gICAgICovXHJcbiAgICBrZXlzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmVudHJpZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYEFycmF5YCBvZiBhbGwgZW50cmllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCN2YWx1ZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtWW119IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBbiBgQXJyYXlgIG9mIGVudHJpZXMuXHJcbiAgICAgKi9cclxuICAgIHZhbHVlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBlbnRyaWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goZW50cmllc1trZXldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHVtcHMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgTWFwIHRvIHRoZSBjb25zb2xlIHZpYSBgY29uc29sZS5ncm91cGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5NYXAjZHVtcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGR1bXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5ncm91cCgnTWFwJyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBlbnRyaWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coa2V5LCBlbnRyaWVzW2tleV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBlbnRyaWVzIGluIHRoaXMgTWFwIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCNlYWNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7RWFjaE1hcENhbGxiYWNrLjxWPn0gLSBbY2FsbGJhY2tdXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuTWFwLjxLLCBWPn0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VhY2hNYXBDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSBrZXlzIGFuZCBlbnRyaWVzIGhlbGQgaW4gdGhpcyBNYXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuTWFwfSBUaGlzIE1hcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGVhY2g6IGZ1bmN0aW9uIChjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGVudHJpZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soa2V5LCBlbnRyaWVzW2tleV0pID09PSBmYWxzZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBleGlzdHMgd2l0aGluIHRoaXMgTWFwLiBPdGhlcndpc2UsIHJldHVybnMgYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1Z9IC0gW3ZhbHVlXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGZvdW5kLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGVudHJpZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZW50cmllc1trZXldID09PSB2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXJnZXMgYWxsIG5ldyBrZXlzIGZyb20gdGhlIGdpdmVuIE1hcCBpbnRvIHRoaXMgb25lLlxyXG4gICAgICogSWYgaXQgZW5jb3VudGVycyBhIGtleSB0aGF0IGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgc2tpcHBlZCB1bmxlc3Mgb3ZlcnJpZGUgaXMgc2V0IHRvIGB0cnVlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLk1hcCNtZXJnZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLk1hcC48SywgVj59IC0gW21hcCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuTWFwfSBtYXAgLSBUaGUgTWFwIHRvIG1lcmdlIGluIHRvIHRoaXMgTWFwLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3ZlcnJpZGU9ZmFsc2VdIC0gU2V0IHRvIGB0cnVlYCB0byByZXBsYWNlIHZhbHVlcyBpbiB0aGlzIE1hcCB3aXRoIHRob3NlIGZyb20gdGhlIHNvdXJjZSBtYXAsIG9yIGBmYWxzZWAgdG8gc2tpcCB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLk1hcH0gVGhpcyBNYXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKG1hcCwgb3ZlcnJpZGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlID09PSB1bmRlZmluZWQpIHsgb3ZlcnJpZGUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLmVudHJpZXM7XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IG1hcC5lbnRyaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGxvY2FsLmhhc093blByb3BlcnR5KGtleSkgJiYgb3ZlcnJpZGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsW2tleV0gPSBzb3VyY2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgc291cmNlW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/Map.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/ProcessQueue.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/structs/ProcessQueue.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/structs/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Process Queue maintains three internal lists.\r\n * \r\n * The `pending` list is a selection of items which are due to be made 'active' in the next update.\r\n * The `active` list is a selection of items which are considered active and should be updated.\r\n * The `destroy` list is a selection of items that were active and are awaiting being destroyed in the next update.\r\n *\r\n * When new items are added to a Process Queue they are put in the pending list, rather than being added\r\n * immediately the active list. Equally, items that are removed are put into the destroy list, rather than\r\n * being destroyed immediately. This allows the Process Queue to carefully process each item at a specific, fixed\r\n * time, rather than at the time of the request from the API.\r\n *\r\n * @class ProcessQueue\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n */\r\nvar ProcessQueue = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function ProcessQueue ()\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The `pending` list is a selection of items which are due to be made 'active' in the next update.\r\n         *\r\n         * @genericUse {T[]} - [$type]\r\n         *\r\n         * @name Phaser.Structs.ProcessQueue#_pending\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._pending = [];\r\n\r\n        /**\r\n         * The `active` list is a selection of items which are considered active and should be updated.\r\n         *\r\n         * @genericUse {T[]} - [$type]\r\n         *\r\n         * @name Phaser.Structs.ProcessQueue#_active\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._active = [];\r\n\r\n        /**\r\n         * The `destroy` list is a selection of items that were active and are awaiting being destroyed in the next update.\r\n         *\r\n         * @genericUse {T[]} - [$type]\r\n         *\r\n         * @name Phaser.Structs.ProcessQueue#_destroy\r\n         * @type {Array.<*>}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._destroy = [];\r\n\r\n        /**\r\n         * The total number of items awaiting processing.\r\n         *\r\n         * @name Phaser.Structs.ProcessQueue#_toProcess\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._toProcess = 0;\r\n    },\r\n\r\n    /**\r\n     * Adds a new item to the Process Queue.\r\n     * \r\n     * The item is added to the pending list and made active in the next update.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#add\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [item]\r\n     * @genericUse {Phaser.Structs.ProcessQueue.<T>} - [$return]\r\n     *\r\n     * @param {*} item - The item to add to the queue.\r\n     *\r\n     * @return {*} The item that was added.\r\n     */\r\n    add: function (item)\r\n    {\r\n        this._pending.push(item);\r\n\r\n        this._toProcess++;\r\n\r\n        return item;\r\n    },\r\n\r\n    /**\r\n     * Removes an item from the Process Queue.\r\n     * \r\n     * The item is added to the pending destroy and fully removed in the next update.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [item]\r\n     * @genericUse {Phaser.Structs.ProcessQueue.<T>} - [$return]\r\n     *\r\n     * @param {*} item - The item to be removed from the queue.\r\n     *\r\n     * @return {*} The item that was removed.\r\n     */\r\n    remove: function (item)\r\n    {\r\n        this._destroy.push(item);\r\n\r\n        this._toProcess++;\r\n\r\n        return item;\r\n    },\r\n\r\n    /**\r\n     * Removes all active items from this Process Queue.\r\n     * \r\n     * All the items are marked as 'pending destroy' and fully removed in the next update.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#removeAll\r\n     * @since 3.20.0\r\n     *\r\n     * @return {this} This Process Queue object.\r\n     */\r\n    removeAll: function ()\r\n    {\r\n        var list = this._active;\r\n        var destroy = this._destroy;\r\n        var i = list.length;\r\n\r\n        while (i--)\r\n        {\r\n            destroy.push(list[i]);\r\n\r\n            this._toProcess++;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Update this queue. First it will process any items awaiting destruction, and remove them.\r\n     * \r\n     * Then it will check to see if there are any items pending insertion, and move them to an\r\n     * active state. Finally, it will return a list of active items for further processing.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#update\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T[]} - [$return]\r\n     *\r\n     * @return {Array.<*>} A list of active items.\r\n     */\r\n    update: function ()\r\n    {\r\n        if (this._toProcess === 0)\r\n        {\r\n            //  Quick bail\r\n            return this._active;\r\n        }\r\n\r\n        var list = this._destroy;\r\n        var active = this._active;\r\n        var i;\r\n        var item;\r\n\r\n        //  Clear the 'destroy' list\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            item = list[i];\r\n\r\n            //  Remove from the 'active' array\r\n            var idx = active.indexOf(item);\r\n\r\n            if (idx !== -1)\r\n            {\r\n                active.splice(idx, 1);\r\n\r\n                this.emit(Events.REMOVE, item);\r\n            }\r\n        }\r\n\r\n        list.length = 0;\r\n\r\n        //  Process the pending addition list\r\n        //  This stops callbacks and out of sync events from populating the active array mid-way during an update\r\n\r\n        list = this._pending;\r\n\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            item = list[i];\r\n\r\n            this._active.push(item);\r\n\r\n            this.emit(Events.ADD, item);\r\n        }\r\n\r\n        list.length = 0;\r\n\r\n        this._toProcess = 0;\r\n\r\n        //  The owner of this queue can now safely do whatever it needs to with the active list\r\n        return this._active;\r\n    },\r\n\r\n    /**\r\n     * Returns the current list of active items.\r\n     * \r\n     * This method returns a reference to the active list array, not a copy of it.\r\n     * Therefore, be careful to not modify this array outside of the ProcessQueue.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#getActive\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T[]} - [$return]\r\n     *\r\n     * @return {Array.<*>} A list of active items.\r\n     */\r\n    getActive: function ()\r\n    {\r\n        return this._active;\r\n    },\r\n\r\n    /**\r\n     * The number of entries in the active list.\r\n     *\r\n     * @name Phaser.Structs.ProcessQueue#length\r\n     * @type {integer}\r\n     * @readonly\r\n     * @since 3.20.0\r\n     */\r\n    length: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._active.length;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Immediately destroys this process queue, clearing all of its internal arrays and resetting the process totals.\r\n     *\r\n     * @method Phaser.Structs.ProcessQueue#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this._toProcess = 0;\r\n\r\n        this._pending = [];\r\n        this._active = [];\r\n        this._destroy = [];\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ProcessQueue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL1Byb2Nlc3NRdWV1ZS5qcz8xNzQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxtRUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSTtBQUM1QjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLElBQUk7QUFDNUI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFJO0FBQ3hCO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc3RydWN0cy9Qcm9jZXNzUXVldWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQcm9jZXNzIFF1ZXVlIG1haW50YWlucyB0aHJlZSBpbnRlcm5hbCBsaXN0cy5cclxuICogXHJcbiAqIFRoZSBgcGVuZGluZ2AgbGlzdCBpcyBhIHNlbGVjdGlvbiBvZiBpdGVtcyB3aGljaCBhcmUgZHVlIHRvIGJlIG1hZGUgJ2FjdGl2ZScgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gKiBUaGUgYGFjdGl2ZWAgbGlzdCBpcyBhIHNlbGVjdGlvbiBvZiBpdGVtcyB3aGljaCBhcmUgY29uc2lkZXJlZCBhY3RpdmUgYW5kIHNob3VsZCBiZSB1cGRhdGVkLlxyXG4gKiBUaGUgYGRlc3Ryb3lgIGxpc3QgaXMgYSBzZWxlY3Rpb24gb2YgaXRlbXMgdGhhdCB3ZXJlIGFjdGl2ZSBhbmQgYXJlIGF3YWl0aW5nIGJlaW5nIGRlc3Ryb3llZCBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAqXHJcbiAqIFdoZW4gbmV3IGl0ZW1zIGFyZSBhZGRlZCB0byBhIFByb2Nlc3MgUXVldWUgdGhleSBhcmUgcHV0IGluIHRoZSBwZW5kaW5nIGxpc3QsIHJhdGhlciB0aGFuIGJlaW5nIGFkZGVkXHJcbiAqIGltbWVkaWF0ZWx5IHRoZSBhY3RpdmUgbGlzdC4gRXF1YWxseSwgaXRlbXMgdGhhdCBhcmUgcmVtb3ZlZCBhcmUgcHV0IGludG8gdGhlIGRlc3Ryb3kgbGlzdCwgcmF0aGVyIHRoYW5cclxuICogYmVpbmcgZGVzdHJveWVkIGltbWVkaWF0ZWx5LiBUaGlzIGFsbG93cyB0aGUgUHJvY2VzcyBRdWV1ZSB0byBjYXJlZnVsbHkgcHJvY2VzcyBlYWNoIGl0ZW0gYXQgYSBzcGVjaWZpYywgZml4ZWRcclxuICogdGltZSwgcmF0aGVyIHRoYW4gYXQgdGhlIHRpbWUgb2YgdGhlIHJlcXVlc3QgZnJvbSB0aGUgQVBJLlxyXG4gKlxyXG4gKiBAY2xhc3MgUHJvY2Vzc1F1ZXVlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU3RydWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICovXHJcbnZhciBQcm9jZXNzUXVldWUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFByb2Nlc3NRdWV1ZSAoKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYHBlbmRpbmdgIGxpc3QgaXMgYSBzZWxlY3Rpb24gb2YgaXRlbXMgd2hpY2ggYXJlIGR1ZSB0byBiZSBtYWRlICdhY3RpdmUnIGluIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBnZW5lcmljVXNlIHtUW119IC0gWyR0eXBlXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuUHJvY2Vzc1F1ZXVlI19wZW5kaW5nXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjwqPn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYGFjdGl2ZWAgbGlzdCBpcyBhIHNlbGVjdGlvbiBvZiBpdGVtcyB3aGljaCBhcmUgY29uc2lkZXJlZCBhY3RpdmUgYW5kIHNob3VsZCBiZSB1cGRhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGdlbmVyaWNVc2Uge1RbXX0gLSBbJHR5cGVdXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5Qcm9jZXNzUXVldWUjX2FjdGl2ZVxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Kj59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYGRlc3Ryb3lgIGxpc3QgaXMgYSBzZWxlY3Rpb24gb2YgaXRlbXMgdGhhdCB3ZXJlIGFjdGl2ZSBhbmQgYXJlIGF3YWl0aW5nIGJlaW5nIGRlc3Ryb3llZCBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAZ2VuZXJpY1VzZSB7VFtdfSAtIFskdHlwZV1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZSNfZGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Kj59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBhd2FpdGluZyBwcm9jZXNzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuUHJvY2Vzc1F1ZXVlI190b1Byb2Nlc3NcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90b1Byb2Nlc3MgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgaXRlbSB0byB0aGUgUHJvY2VzcyBRdWV1ZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIHBlbmRpbmcgbGlzdCBhbmQgbWFkZSBhY3RpdmUgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuUHJvY2Vzc1F1ZXVlI2FkZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW2l0ZW1dXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuUHJvY2Vzc1F1ZXVlLjxUPn0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0byBhZGQgdG8gdGhlIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIGFkZGVkLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChpdGVtKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmcucHVzaChpdGVtKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdG9Qcm9jZXNzKys7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBQcm9jZXNzIFF1ZXVlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgaXRlbSBpcyBhZGRlZCB0byB0aGUgcGVuZGluZyBkZXN0cm95IGFuZCBmdWxseSByZW1vdmVkIGluIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZSNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFtpdGVtXVxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZS48VD59IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgaXRlbSB0aGF0IHdhcyByZW1vdmVkLlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChpdGVtKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kucHVzaChpdGVtKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdG9Qcm9jZXNzKys7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGFjdGl2ZSBpdGVtcyBmcm9tIHRoaXMgUHJvY2VzcyBRdWV1ZS5cclxuICAgICAqIFxyXG4gICAgICogQWxsIHRoZSBpdGVtcyBhcmUgbWFya2VkIGFzICdwZW5kaW5nIGRlc3Ryb3knIGFuZCBmdWxseSByZW1vdmVkIGluIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZSNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFByb2Nlc3MgUXVldWUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSB0aGlzLl9kZXN0cm95O1xyXG4gICAgICAgIHZhciBpID0gbGlzdC5sZW5ndGg7XHJcblxyXG4gICAgICAgIHdoaWxlIChpLS0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZXN0cm95LnB1c2gobGlzdFtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90b1Byb2Nlc3MrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGlzIHF1ZXVlLiBGaXJzdCBpdCB3aWxsIHByb2Nlc3MgYW55IGl0ZW1zIGF3YWl0aW5nIGRlc3RydWN0aW9uLCBhbmQgcmVtb3ZlIHRoZW0uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZW4gaXQgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpdGVtcyBwZW5kaW5nIGluc2VydGlvbiwgYW5kIG1vdmUgdGhlbSB0byBhblxyXG4gICAgICogYWN0aXZlIHN0YXRlLiBGaW5hbGx5LCBpdCB3aWxsIHJldHVybiBhIGxpc3Qgb2YgYWN0aXZlIGl0ZW1zIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5Qcm9jZXNzUXVldWUjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VFtdfSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjwqPn0gQSBsaXN0IG9mIGFjdGl2ZSBpdGVtcy5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl90b1Byb2Nlc3MgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9kZXN0cm95O1xyXG4gICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGl0ZW07XHJcblxyXG4gICAgICAgIC8vICBDbGVhciB0aGUgJ2Rlc3Ryb3knIGxpc3RcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIFJlbW92ZSBmcm9tIHRoZSAnYWN0aXZlJyBhcnJheVxyXG4gICAgICAgICAgICB2YXIgaWR4ID0gYWN0aXZlLmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaWR4ICE9PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlLnNwbGljZShpZHgsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVNT1ZFLCBpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGlzdC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgcGVuZGluZyBhZGRpdGlvbiBsaXN0XHJcbiAgICAgICAgLy8gIFRoaXMgc3RvcHMgY2FsbGJhY2tzIGFuZCBvdXQgb2Ygc3luYyBldmVudHMgZnJvbSBwb3B1bGF0aW5nIHRoZSBhY3RpdmUgYXJyYXkgbWlkLXdheSBkdXJpbmcgYW4gdXBkYXRlXHJcblxyXG4gICAgICAgIGxpc3QgPSB0aGlzLl9wZW5kaW5nO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlLnB1c2goaXRlbSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0Lmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX3RvUHJvY2VzcyA9IDA7XHJcblxyXG4gICAgICAgIC8vICBUaGUgb3duZXIgb2YgdGhpcyBxdWV1ZSBjYW4gbm93IHNhZmVseSBkbyB3aGF0ZXZlciBpdCBuZWVkcyB0byB3aXRoIHRoZSBhY3RpdmUgbGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBsaXN0IG9mIGFjdGl2ZSBpdGVtcy5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYWN0aXZlIGxpc3QgYXJyYXksIG5vdCBhIGNvcHkgb2YgaXQuXHJcbiAgICAgKiBUaGVyZWZvcmUsIGJlIGNhcmVmdWwgdG8gbm90IG1vZGlmeSB0aGlzIGFycmF5IG91dHNpZGUgb2YgdGhlIFByb2Nlc3NRdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZSNnZXRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUW119IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBIGxpc3Qgb2YgYWN0aXZlIGl0ZW1zLlxyXG4gICAgICovXHJcbiAgICBnZXRBY3RpdmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGFjdGl2ZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlByb2Nlc3NRdWV1ZSNsZW5ndGhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltbWVkaWF0ZWx5IGRlc3Ryb3lzIHRoaXMgcHJvY2VzcyBxdWV1ZSwgY2xlYXJpbmcgYWxsIG9mIGl0cyBpbnRlcm5hbCBhcnJheXMgYW5kIHJlc2V0dGluZyB0aGUgcHJvY2VzcyB0b3RhbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5Qcm9jZXNzUXVldWUjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdG9Qcm9jZXNzID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQcm9jZXNzUXVldWU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/ProcessQueue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/RTree.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/structs/RTree.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Vladimir Agafonkin\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar quickselect = __webpack_require__(/*! ../utils/array/QuickSelect */ \"./node_modules/phaser/src/utils/array/QuickSelect.js\");\r\n\r\n/**\r\n * @classdesc\r\n * RBush is a high-performance JavaScript library for 2D spatial indexing of points and rectangles.\r\n * It's based on an optimized R-tree data structure with bulk insertion support.\r\n *\r\n * Spatial index is a special data structure for points and rectangles that allows you to perform queries like\r\n * \"all items within this bounding box\" very efficiently (e.g. hundreds of times faster than looping over all items).\r\n *\r\n * This version of RBush uses a fixed min/max accessor structure of `[ '.left', '.top', '.right', '.bottom' ]`.\r\n * This is to avoid the eval like function creation that the original library used, which caused CSP policy violations.\r\n * \r\n * rbush is forked from https://github.com/mourner/rbush by Vladimir Agafonkin\r\n *\r\n * @class RTree\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\n\r\nfunction rbush (maxEntries)\r\n{\r\n    var format = [ '.left', '.top', '.right', '.bottom' ];\r\n\r\n    if (!(this instanceof rbush)) return new rbush(maxEntries, format);\r\n\r\n    // max entries in a node is 9 by default; min node fill is 40% for best performance\r\n    this._maxEntries = Math.max(4, maxEntries || 9);\r\n    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\r\n\r\n    this.clear();\r\n}\r\n\r\nrbush.prototype = {\r\n\r\n    all: function ()\r\n    {\r\n        return this._all(this.data, []);\r\n    },\r\n\r\n    search: function (bbox)\r\n    {\r\n        var node = this.data,\r\n            result = [],\r\n            toBBox = this.toBBox;\r\n\r\n        if (!intersects(bbox, node)) return result;\r\n\r\n        var nodesToSearch = [],\r\n            i, len, child, childBBox;\r\n\r\n        while (node) {\r\n            for (i = 0, len = node.children.length; i < len; i++) {\r\n\r\n                child = node.children[i];\r\n                childBBox = node.leaf ? toBBox(child) : child;\r\n\r\n                if (intersects(bbox, childBBox)) {\r\n                    if (node.leaf) result.push(child);\r\n                    else if (contains(bbox, childBBox)) this._all(child, result);\r\n                    else nodesToSearch.push(child);\r\n                }\r\n            }\r\n            node = nodesToSearch.pop();\r\n        }\r\n\r\n        return result;\r\n    },\r\n\r\n    collides: function (bbox)\r\n    {\r\n        var node = this.data,\r\n            toBBox = this.toBBox;\r\n\r\n        if (!intersects(bbox, node)) return false;\r\n\r\n        var nodesToSearch = [],\r\n            i, len, child, childBBox;\r\n\r\n        while (node) {\r\n            for (i = 0, len = node.children.length; i < len; i++) {\r\n\r\n                child = node.children[i];\r\n                childBBox = node.leaf ? toBBox(child) : child;\r\n\r\n                if (intersects(bbox, childBBox)) {\r\n                    if (node.leaf || contains(bbox, childBBox)) return true;\r\n                    nodesToSearch.push(child);\r\n                }\r\n            }\r\n            node = nodesToSearch.pop();\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    load: function (data)\r\n    {\r\n        if (!(data && data.length)) return this;\r\n\r\n        if (data.length < this._minEntries) {\r\n            for (var i = 0, len = data.length; i < len; i++) {\r\n                this.insert(data[i]);\r\n            }\r\n            return this;\r\n        }\r\n\r\n        // recursively build the tree with the given data from scratch using OMT algorithm\r\n        var node = this._build(data.slice(), 0, data.length - 1, 0);\r\n\r\n        if (!this.data.children.length) {\r\n            // save as is if tree is empty\r\n            this.data = node;\r\n\r\n        } else if (this.data.height === node.height) {\r\n            // split root if trees have the same height\r\n            this._splitRoot(this.data, node);\r\n\r\n        } else {\r\n            if (this.data.height < node.height) {\r\n                // swap trees if inserted one is bigger\r\n                var tmpNode = this.data;\r\n                this.data = node;\r\n                node = tmpNode;\r\n            }\r\n\r\n            // insert the small tree into the large tree at appropriate level\r\n            this._insert(node, this.data.height - node.height - 1, true);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    insert: function (item)\r\n    {\r\n        if (item) this._insert(item, this.data.height - 1);\r\n        return this;\r\n    },\r\n\r\n    clear: function ()\r\n    {\r\n        this.data = createNode([]);\r\n        return this;\r\n    },\r\n\r\n    remove: function (item, equalsFn)\r\n    {\r\n        if (!item) return this;\r\n\r\n        var node = this.data,\r\n            bbox = this.toBBox(item),\r\n            path = [],\r\n            indexes = [],\r\n            i, parent, index, goingUp;\r\n\r\n        // depth-first iterative tree traversal\r\n        while (node || path.length) {\r\n\r\n            if (!node) { // go up\r\n                node = path.pop();\r\n                parent = path[path.length - 1];\r\n                i = indexes.pop();\r\n                goingUp = true;\r\n            }\r\n\r\n            if (node.leaf) { // check current node\r\n                index = findItem(item, node.children, equalsFn);\r\n\r\n                if (index !== -1) {\r\n                    // item found, remove the item and condense tree upwards\r\n                    node.children.splice(index, 1);\r\n                    path.push(node);\r\n                    this._condense(path);\r\n                    return this;\r\n                }\r\n            }\r\n\r\n            if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\r\n                path.push(node);\r\n                indexes.push(i);\r\n                i = 0;\r\n                parent = node;\r\n                node = node.children[0];\r\n\r\n            } else if (parent) { // go right\r\n                i++;\r\n                node = parent.children[i];\r\n                goingUp = false;\r\n\r\n            } else node = null; // nothing found\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    toBBox: function (item) { return item; },\r\n\r\n    compareMinX: compareNodeMinX,\r\n    compareMinY: compareNodeMinY,\r\n\r\n    toJSON: function () { return this.data; },\r\n\r\n    fromJSON: function (data)\r\n    {\r\n        this.data = data;\r\n        return this;\r\n    },\r\n\r\n    _all: function (node, result)\r\n    {\r\n        var nodesToSearch = [];\r\n        while (node) {\r\n            if (node.leaf) result.push.apply(result, node.children);\r\n            else nodesToSearch.push.apply(nodesToSearch, node.children);\r\n\r\n            node = nodesToSearch.pop();\r\n        }\r\n        return result;\r\n    },\r\n\r\n    _build: function (items, left, right, height)\r\n    {\r\n        var N = right - left + 1,\r\n            M = this._maxEntries,\r\n            node;\r\n\r\n        if (N <= M) {\r\n            // reached leaf level; return leaf\r\n            node = createNode(items.slice(left, right + 1));\r\n            calcBBox(node, this.toBBox);\r\n            return node;\r\n        }\r\n\r\n        if (!height) {\r\n            // target height of the bulk-loaded tree\r\n            height = Math.ceil(Math.log(N) / Math.log(M));\r\n\r\n            // target number of root entries to maximize storage utilization\r\n            M = Math.ceil(N / Math.pow(M, height - 1));\r\n        }\r\n\r\n        node = createNode([]);\r\n        node.leaf = false;\r\n        node.height = height;\r\n\r\n        // split the items into M mostly square tiles\r\n\r\n        var N2 = Math.ceil(N / M),\r\n            N1 = N2 * Math.ceil(Math.sqrt(M)),\r\n            i, j, right2, right3;\r\n\r\n        multiSelect(items, left, right, N1, this.compareMinX);\r\n\r\n        for (i = left; i <= right; i += N1) {\r\n\r\n            right2 = Math.min(i + N1 - 1, right);\r\n\r\n            multiSelect(items, i, right2, N2, this.compareMinY);\r\n\r\n            for (j = i; j <= right2; j += N2) {\r\n\r\n                right3 = Math.min(j + N2 - 1, right2);\r\n\r\n                // pack each entry recursively\r\n                node.children.push(this._build(items, j, right3, height - 1));\r\n            }\r\n        }\r\n\r\n        calcBBox(node, this.toBBox);\r\n\r\n        return node;\r\n    },\r\n\r\n    _chooseSubtree: function (bbox, node, level, path)\r\n    {\r\n        var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\r\n\r\n        while (true) {\r\n            path.push(node);\r\n\r\n            if (node.leaf || path.length - 1 === level) break;\r\n\r\n            minArea = minEnlargement = Infinity;\r\n\r\n            for (i = 0, len = node.children.length; i < len; i++) {\r\n                child = node.children[i];\r\n                area = bboxArea(child);\r\n                enlargement = enlargedArea(bbox, child) - area;\r\n\r\n                // choose entry with the least area enlargement\r\n                if (enlargement < minEnlargement) {\r\n                    minEnlargement = enlargement;\r\n                    minArea = area < minArea ? area : minArea;\r\n                    targetNode = child;\r\n\r\n                } else if (enlargement === minEnlargement) {\r\n                    // otherwise choose one with the smallest area\r\n                    if (area < minArea) {\r\n                        minArea = area;\r\n                        targetNode = child;\r\n                    }\r\n                }\r\n            }\r\n\r\n            node = targetNode || node.children[0];\r\n        }\r\n\r\n        return node;\r\n    },\r\n\r\n    _insert: function (item, level, isNode)\r\n    {\r\n        var toBBox = this.toBBox,\r\n            bbox = isNode ? item : toBBox(item),\r\n            insertPath = [];\r\n\r\n        // find the best node for accommodating the item, saving all nodes along the path too\r\n        var node = this._chooseSubtree(bbox, this.data, level, insertPath);\r\n\r\n        // put the item into the node\r\n        node.children.push(item);\r\n        extend(node, bbox);\r\n\r\n        // split on node overflow; propagate upwards if necessary\r\n        while (level >= 0) {\r\n            if (insertPath[level].children.length > this._maxEntries) {\r\n                this._split(insertPath, level);\r\n                level--;\r\n            } else break;\r\n        }\r\n\r\n        // adjust bboxes along the insertion path\r\n        this._adjustParentBBoxes(bbox, insertPath, level);\r\n    },\r\n\r\n    // split overflowed node into two\r\n    _split: function (insertPath, level)\r\n    {\r\n        var node = insertPath[level],\r\n            M = node.children.length,\r\n            m = this._minEntries;\r\n\r\n        this._chooseSplitAxis(node, m, M);\r\n\r\n        var splitIndex = this._chooseSplitIndex(node, m, M);\r\n\r\n        var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\r\n        newNode.height = node.height;\r\n        newNode.leaf = node.leaf;\r\n\r\n        calcBBox(node, this.toBBox);\r\n        calcBBox(newNode, this.toBBox);\r\n\r\n        if (level) insertPath[level - 1].children.push(newNode);\r\n        else this._splitRoot(node, newNode);\r\n    },\r\n\r\n    _splitRoot: function (node, newNode)\r\n    {\r\n        // split root node\r\n        this.data = createNode([node, newNode]);\r\n        this.data.height = node.height + 1;\r\n        this.data.leaf = false;\r\n        calcBBox(this.data, this.toBBox);\r\n    },\r\n\r\n    _chooseSplitIndex: function (node, m, M)\r\n    {\r\n        var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\r\n\r\n        minOverlap = minArea = Infinity;\r\n\r\n        for (i = m; i <= M - m; i++) {\r\n            bbox1 = distBBox(node, 0, i, this.toBBox);\r\n            bbox2 = distBBox(node, i, M, this.toBBox);\r\n\r\n            overlap = intersectionArea(bbox1, bbox2);\r\n            area = bboxArea(bbox1) + bboxArea(bbox2);\r\n\r\n            // choose distribution with minimum overlap\r\n            if (overlap < minOverlap) {\r\n                minOverlap = overlap;\r\n                index = i;\r\n\r\n                minArea = area < minArea ? area : minArea;\r\n\r\n            } else if (overlap === minOverlap) {\r\n                // otherwise choose distribution with minimum area\r\n                if (area < minArea) {\r\n                    minArea = area;\r\n                    index = i;\r\n                }\r\n            }\r\n        }\r\n\r\n        return index;\r\n    },\r\n\r\n    // sorts node children by the best axis for split\r\n    _chooseSplitAxis: function (node, m, M)\r\n    {\r\n        var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\r\n            compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\r\n            xMargin = this._allDistMargin(node, m, M, compareMinX),\r\n            yMargin = this._allDistMargin(node, m, M, compareMinY);\r\n\r\n        // if total distributions margin value is minimal for x, sort by minX,\r\n        // otherwise it's already sorted by minY\r\n        if (xMargin < yMargin) node.children.sort(compareMinX);\r\n    },\r\n\r\n    // total margin of all possible split distributions where each node is at least m full\r\n    _allDistMargin: function (node, m, M, compare)\r\n    {\r\n        node.children.sort(compare);\r\n\r\n        var toBBox = this.toBBox,\r\n            leftBBox = distBBox(node, 0, m, toBBox),\r\n            rightBBox = distBBox(node, M - m, M, toBBox),\r\n            margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\r\n            i, child;\r\n\r\n        for (i = m; i < M - m; i++) {\r\n            child = node.children[i];\r\n            extend(leftBBox, node.leaf ? toBBox(child) : child);\r\n            margin += bboxMargin(leftBBox);\r\n        }\r\n\r\n        for (i = M - m - 1; i >= m; i--) {\r\n            child = node.children[i];\r\n            extend(rightBBox, node.leaf ? toBBox(child) : child);\r\n            margin += bboxMargin(rightBBox);\r\n        }\r\n\r\n        return margin;\r\n    },\r\n\r\n    _adjustParentBBoxes: function (bbox, path, level)\r\n    {\r\n        // adjust bboxes along the given tree path\r\n        for (var i = level; i >= 0; i--) {\r\n            extend(path[i], bbox);\r\n        }\r\n    },\r\n\r\n    _condense: function (path)\r\n    {\r\n        // go through the path, removing empty nodes and updating bboxes\r\n        for (var i = path.length - 1, siblings; i >= 0; i--) {\r\n            if (path[i].children.length === 0) {\r\n                if (i > 0) {\r\n                    siblings = path[i - 1].children;\r\n                    siblings.splice(siblings.indexOf(path[i]), 1);\r\n\r\n                } else this.clear();\r\n\r\n            } else calcBBox(path[i], this.toBBox);\r\n        }\r\n    },\r\n\r\n    compareMinX: function (a, b)\r\n    {\r\n        return a.left - b.left;\r\n    },\r\n\r\n    compareMinY: function (a, b)\r\n    {\r\n        return a.top - b.top;\r\n    },\r\n\r\n    toBBox: function (a)\r\n    {\r\n        return {\r\n            minX: a.left,\r\n            minY: a.top,\r\n            maxX: a.right,\r\n            maxY: a.bottom\r\n        };\r\n    }\r\n};\r\n\r\nfunction findItem (item, items, equalsFn)\r\n{\r\n    if (!equalsFn) return items.indexOf(item);\r\n\r\n    for (var i = 0; i < items.length; i++) {\r\n        if (equalsFn(item, items[i])) return i;\r\n    }\r\n    return -1;\r\n}\r\n\r\n// calculate node's bbox from bboxes of its children\r\nfunction calcBBox (node, toBBox)\r\n{\r\n    distBBox(node, 0, node.children.length, toBBox, node);\r\n}\r\n\r\n// min bounding rectangle of node children from k to p-1\r\nfunction distBBox (node, k, p, toBBox, destNode)\r\n{\r\n    if (!destNode) destNode = createNode(null);\r\n    destNode.minX = Infinity;\r\n    destNode.minY = Infinity;\r\n    destNode.maxX = -Infinity;\r\n    destNode.maxY = -Infinity;\r\n\r\n    for (var i = k, child; i < p; i++) {\r\n        child = node.children[i];\r\n        extend(destNode, node.leaf ? toBBox(child) : child);\r\n    }\r\n\r\n    return destNode;\r\n}\r\n\r\nfunction extend (a, b)\r\n{\r\n    a.minX = Math.min(a.minX, b.minX);\r\n    a.minY = Math.min(a.minY, b.minY);\r\n    a.maxX = Math.max(a.maxX, b.maxX);\r\n    a.maxY = Math.max(a.maxY, b.maxY);\r\n    return a;\r\n}\r\n\r\nfunction compareNodeMinX (a, b) { return a.minX - b.minX; }\r\nfunction compareNodeMinY (a, b) { return a.minY - b.minY; }\r\n\r\nfunction bboxArea (a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\r\nfunction bboxMargin (a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\r\n\r\nfunction enlargedArea (a, b)\r\n{\r\n    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\r\n           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\r\n}\r\n\r\nfunction intersectionArea (a, b)\r\n{\r\n    var minX = Math.max(a.minX, b.minX),\r\n        minY = Math.max(a.minY, b.minY),\r\n        maxX = Math.min(a.maxX, b.maxX),\r\n        maxY = Math.min(a.maxY, b.maxY);\r\n\r\n    return Math.max(0, maxX - minX) *\r\n           Math.max(0, maxY - minY);\r\n}\r\n\r\nfunction contains (a, b)\r\n{\r\n    return a.minX <= b.minX &&\r\n           a.minY <= b.minY &&\r\n           b.maxX <= a.maxX &&\r\n           b.maxY <= a.maxY;\r\n}\r\n\r\nfunction intersects (a, b)\r\n{\r\n    return b.minX <= a.maxX &&\r\n           b.minY <= a.maxY &&\r\n           b.maxX >= a.minX &&\r\n           b.maxY >= a.minY;\r\n}\r\n\r\nfunction createNode (children)\r\n{\r\n    return {\r\n        children: children,\r\n        height: 1,\r\n        leaf: true,\r\n        minX: Infinity,\r\n        minY: Infinity,\r\n        maxX: -Infinity,\r\n        maxY: -Infinity\r\n    };\r\n}\r\n\r\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\r\n// combines selection algorithm with binary divide & conquer approach\r\n\r\nfunction multiSelect (arr, left, right, n, compare)\r\n{\r\n    var stack = [left, right],\r\n        mid;\r\n\r\n    while (stack.length)\r\n    {\r\n        right = stack.pop();\r\n        left = stack.pop();\r\n\r\n        if (right - left <= n) continue;\r\n\r\n        mid = left + Math.ceil((right - left) / n / 2) * n;\r\n        quickselect(arr, mid, left, right, compare);\r\n\r\n        stack.push(left, mid, mid, right);\r\n    }\r\n}\r\n\r\nmodule.exports = rbush;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL1JUcmVlLmpzP2Y1MTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsd0ZBQTRCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQsU0FBUzs7QUFFNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQW1ELFNBQVM7O0FBRTVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxTQUFTO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxtQkFBbUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBLGFBQWEsa0JBQWtCO0FBQy9COztBQUVBO0FBQ0EsS0FBSzs7QUFFTCw2QkFBNkIsYUFBYSxFQUFFOztBQUU1QztBQUNBOztBQUVBLHlCQUF5QixrQkFBa0IsRUFBRTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixZQUFZOztBQUVsQzs7QUFFQTs7QUFFQSx1QkFBdUIsYUFBYTs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1EQUFtRCxTQUFTO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLFFBQVE7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjs7QUFFakIsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixPQUFPO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLHdCQUF3QjtBQUN6RCxpQ0FBaUMsd0JBQXdCOztBQUV6RCx1QkFBdUIsOENBQThDO0FBQ3JFLHlCQUF5Qiw4Q0FBOEM7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3N0cnVjdHMvUlRyZWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBWbGFkaW1pciBBZ2Fmb25raW5cclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBxdWlja3NlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2FycmF5L1F1aWNrU2VsZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBSQnVzaCBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciAyRCBzcGF0aWFsIGluZGV4aW5nIG9mIHBvaW50cyBhbmQgcmVjdGFuZ2xlcy5cclxuICogSXQncyBiYXNlZCBvbiBhbiBvcHRpbWl6ZWQgUi10cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggYnVsayBpbnNlcnRpb24gc3VwcG9ydC5cclxuICpcclxuICogU3BhdGlhbCBpbmRleCBpcyBhIHNwZWNpYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBvaW50cyBhbmQgcmVjdGFuZ2xlcyB0aGF0IGFsbG93cyB5b3UgdG8gcGVyZm9ybSBxdWVyaWVzIGxpa2VcclxuICogXCJhbGwgaXRlbXMgd2l0aGluIHRoaXMgYm91bmRpbmcgYm94XCIgdmVyeSBlZmZpY2llbnRseSAoZS5nLiBodW5kcmVkcyBvZiB0aW1lcyBmYXN0ZXIgdGhhbiBsb29waW5nIG92ZXIgYWxsIGl0ZW1zKS5cclxuICpcclxuICogVGhpcyB2ZXJzaW9uIG9mIFJCdXNoIHVzZXMgYSBmaXhlZCBtaW4vbWF4IGFjY2Vzc29yIHN0cnVjdHVyZSBvZiBgWyAnLmxlZnQnLCAnLnRvcCcsICcucmlnaHQnLCAnLmJvdHRvbScgXWAuXHJcbiAqIFRoaXMgaXMgdG8gYXZvaWQgdGhlIGV2YWwgbGlrZSBmdW5jdGlvbiBjcmVhdGlvbiB0aGF0IHRoZSBvcmlnaW5hbCBsaWJyYXJ5IHVzZWQsIHdoaWNoIGNhdXNlZCBDU1AgcG9saWN5IHZpb2xhdGlvbnMuXHJcbiAqIFxyXG4gKiByYnVzaCBpcyBmb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbW91cm5lci9yYnVzaCBieSBWbGFkaW1pciBBZ2Fmb25raW5cclxuICpcclxuICogQGNsYXNzIFJUcmVlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuU3RydWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gcmJ1c2ggKG1heEVudHJpZXMpXHJcbntcclxuICAgIHZhciBmb3JtYXQgPSBbICcubGVmdCcsICcudG9wJywgJy5yaWdodCcsICcuYm90dG9tJyBdO1xyXG5cclxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiByYnVzaCkpIHJldHVybiBuZXcgcmJ1c2gobWF4RW50cmllcywgZm9ybWF0KTtcclxuXHJcbiAgICAvLyBtYXggZW50cmllcyBpbiBhIG5vZGUgaXMgOSBieSBkZWZhdWx0OyBtaW4gbm9kZSBmaWxsIGlzIDQwJSBmb3IgYmVzdCBwZXJmb3JtYW5jZVxyXG4gICAgdGhpcy5fbWF4RW50cmllcyA9IE1hdGgubWF4KDQsIG1heEVudHJpZXMgfHwgOSk7XHJcbiAgICB0aGlzLl9taW5FbnRyaWVzID0gTWF0aC5tYXgoMiwgTWF0aC5jZWlsKHRoaXMuX21heEVudHJpZXMgKiAwLjQpKTtcclxuXHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbn1cclxuXHJcbnJidXNoLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBhbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbCh0aGlzLmRhdGEsIFtdKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2VhcmNoOiBmdW5jdGlvbiAoYmJveClcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZSA9IHRoaXMuZGF0YSxcclxuICAgICAgICAgICAgcmVzdWx0ID0gW10sXHJcbiAgICAgICAgICAgIHRvQkJveCA9IHRoaXMudG9CQm94O1xyXG5cclxuICAgICAgICBpZiAoIWludGVyc2VjdHMoYmJveCwgbm9kZSkpIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgIHZhciBub2Rlc1RvU2VhcmNoID0gW10sXHJcbiAgICAgICAgICAgIGksIGxlbiwgY2hpbGQsIGNoaWxkQkJveDtcclxuXHJcbiAgICAgICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgIGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGNoaWxkQkJveCA9IG5vZGUubGVhZiA/IHRvQkJveChjaGlsZCkgOiBjaGlsZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0cyhiYm94LCBjaGlsZEJCb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVhZikgcmVzdWx0LnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5zKGJib3gsIGNoaWxkQkJveCkpIHRoaXMuX2FsbChjaGlsZCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG5vZGVzVG9TZWFyY2gucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZSA9IG5vZGVzVG9TZWFyY2gucG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBjb2xsaWRlczogZnVuY3Rpb24gKGJib3gpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIHRvQkJveCA9IHRoaXMudG9CQm94O1xyXG5cclxuICAgICAgICBpZiAoIWludGVyc2VjdHMoYmJveCwgbm9kZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIG5vZGVzVG9TZWFyY2ggPSBbXSxcclxuICAgICAgICAgICAgaSwgbGVuLCBjaGlsZCwgY2hpbGRCQm94O1xyXG5cclxuICAgICAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRCQm94ID0gbm9kZS5sZWFmID8gdG9CQm94KGNoaWxkKSA6IGNoaWxkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3RzKGJib3gsIGNoaWxkQkJveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWFmIHx8IGNvbnRhaW5zKGJib3gsIGNoaWxkQkJveCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzVG9TZWFyY2gucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZSA9IG5vZGVzVG9TZWFyY2gucG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghKGRhdGEgJiYgZGF0YS5sZW5ndGgpKSByZXR1cm4gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgdGhpcy5fbWluRW50cmllcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQoZGF0YVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZWN1cnNpdmVseSBidWlsZCB0aGUgdHJlZSB3aXRoIHRoZSBnaXZlbiBkYXRhIGZyb20gc2NyYXRjaCB1c2luZyBPTVQgYWxnb3JpdGhtXHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9idWlsZChkYXRhLnNsaWNlKCksIDAsIGRhdGEubGVuZ3RoIC0gMSwgMCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBzYXZlIGFzIGlzIGlmIHRyZWUgaXMgZW1wdHlcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbm9kZTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuaGVpZ2h0ID09PSBub2RlLmhlaWdodCkge1xyXG4gICAgICAgICAgICAvLyBzcGxpdCByb290IGlmIHRyZWVzIGhhdmUgdGhlIHNhbWUgaGVpZ2h0XHJcbiAgICAgICAgICAgIHRoaXMuX3NwbGl0Um9vdCh0aGlzLmRhdGEsIG5vZGUpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmhlaWdodCA8IG5vZGUuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzd2FwIHRyZWVzIGlmIGluc2VydGVkIG9uZSBpcyBiaWdnZXJcclxuICAgICAgICAgICAgICAgIHZhciB0bXBOb2RlID0gdGhpcy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0bXBOb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpbnNlcnQgdGhlIHNtYWxsIHRyZWUgaW50byB0aGUgbGFyZ2UgdHJlZSBhdCBhcHByb3ByaWF0ZSBsZXZlbFxyXG4gICAgICAgICAgICB0aGlzLl9pbnNlcnQobm9kZSwgdGhpcy5kYXRhLmhlaWdodCAtIG5vZGUuaGVpZ2h0IC0gMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgaW5zZXJ0OiBmdW5jdGlvbiAoaXRlbSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaXRlbSkgdGhpcy5faW5zZXJ0KGl0ZW0sIHRoaXMuZGF0YS5oZWlnaHQgLSAxKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gY3JlYXRlTm9kZShbXSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKGl0ZW0sIGVxdWFsc0ZuKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBiYm94ID0gdGhpcy50b0JCb3goaXRlbSksXHJcbiAgICAgICAgICAgIHBhdGggPSBbXSxcclxuICAgICAgICAgICAgaW5kZXhlcyA9IFtdLFxyXG4gICAgICAgICAgICBpLCBwYXJlbnQsIGluZGV4LCBnb2luZ1VwO1xyXG5cclxuICAgICAgICAvLyBkZXB0aC1maXJzdCBpdGVyYXRpdmUgdHJlZSB0cmF2ZXJzYWxcclxuICAgICAgICB3aGlsZSAobm9kZSB8fCBwYXRoLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlKSB7IC8vIGdvIHVwXHJcbiAgICAgICAgICAgICAgICBub2RlID0gcGF0aC5wb3AoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGkgPSBpbmRleGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgZ29pbmdVcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmxlYWYpIHsgLy8gY2hlY2sgY3VycmVudCBub2RlXHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZpbmRJdGVtKGl0ZW0sIG5vZGUuY2hpbGRyZW4sIGVxdWFsc0ZuKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXRlbSBmb3VuZCwgcmVtb3ZlIHRoZSBpdGVtIGFuZCBjb25kZW5zZSB0cmVlIHVwd2FyZHNcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRlbnNlKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdvaW5nVXAgJiYgIW5vZGUubGVhZiAmJiBjb250YWlucyhub2RlLCBiYm94KSkgeyAvLyBnbyBkb3duXHJcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleGVzLnB1c2goaSk7XHJcbiAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlblswXTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50KSB7IC8vIGdvIHJpZ2h0XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gcGFyZW50LmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgZ29pbmdVcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIG5vZGUgPSBudWxsOyAvLyBub3RoaW5nIGZvdW5kXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9CQm94OiBmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbTsgfSxcclxuXHJcbiAgICBjb21wYXJlTWluWDogY29tcGFyZU5vZGVNaW5YLFxyXG4gICAgY29tcGFyZU1pblk6IGNvbXBhcmVOb2RlTWluWSxcclxuXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZGF0YTsgfSxcclxuXHJcbiAgICBmcm9tSlNPTjogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgX2FsbDogZnVuY3Rpb24gKG5vZGUsIHJlc3VsdClcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZXNUb1NlYXJjaCA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLmxlYWYpIHJlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCwgbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIGVsc2Ugbm9kZXNUb1NlYXJjaC5wdXNoLmFwcGx5KG5vZGVzVG9TZWFyY2gsIG5vZGUuY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICAgICAgbm9kZSA9IG5vZGVzVG9TZWFyY2gucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIF9idWlsZDogZnVuY3Rpb24gKGl0ZW1zLCBsZWZ0LCByaWdodCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBOID0gcmlnaHQgLSBsZWZ0ICsgMSxcclxuICAgICAgICAgICAgTSA9IHRoaXMuX21heEVudHJpZXMsXHJcbiAgICAgICAgICAgIG5vZGU7XHJcblxyXG4gICAgICAgIGlmIChOIDw9IE0pIHtcclxuICAgICAgICAgICAgLy8gcmVhY2hlZCBsZWFmIGxldmVsOyByZXR1cm4gbGVhZlxyXG4gICAgICAgICAgICBub2RlID0gY3JlYXRlTm9kZShpdGVtcy5zbGljZShsZWZ0LCByaWdodCArIDEpKTtcclxuICAgICAgICAgICAgY2FsY0JCb3gobm9kZSwgdGhpcy50b0JCb3gpO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBoZWlnaHQgb2YgdGhlIGJ1bGstbG9hZGVkIHRyZWVcclxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKE1hdGgubG9nKE4pIC8gTWF0aC5sb2coTSkpO1xyXG5cclxuICAgICAgICAgICAgLy8gdGFyZ2V0IG51bWJlciBvZiByb290IGVudHJpZXMgdG8gbWF4aW1pemUgc3RvcmFnZSB1dGlsaXphdGlvblxyXG4gICAgICAgICAgICBNID0gTWF0aC5jZWlsKE4gLyBNYXRoLnBvdyhNLCBoZWlnaHQgLSAxKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBub2RlID0gY3JlYXRlTm9kZShbXSk7XHJcbiAgICAgICAgbm9kZS5sZWFmID0gZmFsc2U7XHJcbiAgICAgICAgbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIHNwbGl0IHRoZSBpdGVtcyBpbnRvIE0gbW9zdGx5IHNxdWFyZSB0aWxlc1xyXG5cclxuICAgICAgICB2YXIgTjIgPSBNYXRoLmNlaWwoTiAvIE0pLFxyXG4gICAgICAgICAgICBOMSA9IE4yICogTWF0aC5jZWlsKE1hdGguc3FydChNKSksXHJcbiAgICAgICAgICAgIGksIGosIHJpZ2h0MiwgcmlnaHQzO1xyXG5cclxuICAgICAgICBtdWx0aVNlbGVjdChpdGVtcywgbGVmdCwgcmlnaHQsIE4xLCB0aGlzLmNvbXBhcmVNaW5YKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbGVmdDsgaSA8PSByaWdodDsgaSArPSBOMSkge1xyXG5cclxuICAgICAgICAgICAgcmlnaHQyID0gTWF0aC5taW4oaSArIE4xIC0gMSwgcmlnaHQpO1xyXG5cclxuICAgICAgICAgICAgbXVsdGlTZWxlY3QoaXRlbXMsIGksIHJpZ2h0MiwgTjIsIHRoaXMuY29tcGFyZU1pblkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChqID0gaTsgaiA8PSByaWdodDI7IGogKz0gTjIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByaWdodDMgPSBNYXRoLm1pbihqICsgTjIgLSAxLCByaWdodDIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHBhY2sgZWFjaCBlbnRyeSByZWN1cnNpdmVseVxyXG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5wdXNoKHRoaXMuX2J1aWxkKGl0ZW1zLCBqLCByaWdodDMsIGhlaWdodCAtIDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FsY0JCb3gobm9kZSwgdGhpcy50b0JCb3gpO1xyXG5cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2Nob29zZVN1YnRyZWU6IGZ1bmN0aW9uIChiYm94LCBub2RlLCBsZXZlbCwgcGF0aClcclxuICAgIHtcclxuICAgICAgICB2YXIgaSwgbGVuLCBjaGlsZCwgdGFyZ2V0Tm9kZSwgYXJlYSwgZW5sYXJnZW1lbnQsIG1pbkFyZWEsIG1pbkVubGFyZ2VtZW50O1xyXG5cclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBwYXRoLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5sZWFmIHx8IHBhdGgubGVuZ3RoIC0gMSA9PT0gbGV2ZWwpIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgbWluQXJlYSA9IG1pbkVubGFyZ2VtZW50ID0gSW5maW5pdHk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBhcmVhID0gYmJveEFyZWEoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgZW5sYXJnZW1lbnQgPSBlbmxhcmdlZEFyZWEoYmJveCwgY2hpbGQpIC0gYXJlYTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjaG9vc2UgZW50cnkgd2l0aCB0aGUgbGVhc3QgYXJlYSBlbmxhcmdlbWVudFxyXG4gICAgICAgICAgICAgICAgaWYgKGVubGFyZ2VtZW50IDwgbWluRW5sYXJnZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtaW5FbmxhcmdlbWVudCA9IGVubGFyZ2VtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbkFyZWEgPSBhcmVhIDwgbWluQXJlYSA/IGFyZWEgOiBtaW5BcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBjaGlsZDtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVubGFyZ2VtZW50ID09PSBtaW5FbmxhcmdlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBjaG9vc2Ugb25lIHdpdGggdGhlIHNtYWxsZXN0IGFyZWFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJlYSA8IG1pbkFyZWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluQXJlYSA9IGFyZWE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5vZGUgPSB0YXJnZXROb2RlIHx8IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc2VydDogZnVuY3Rpb24gKGl0ZW0sIGxldmVsLCBpc05vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRvQkJveCA9IHRoaXMudG9CQm94LFxyXG4gICAgICAgICAgICBiYm94ID0gaXNOb2RlID8gaXRlbSA6IHRvQkJveChpdGVtKSxcclxuICAgICAgICAgICAgaW5zZXJ0UGF0aCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBmaW5kIHRoZSBiZXN0IG5vZGUgZm9yIGFjY29tbW9kYXRpbmcgdGhlIGl0ZW0sIHNhdmluZyBhbGwgbm9kZXMgYWxvbmcgdGhlIHBhdGggdG9vXHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9jaG9vc2VTdWJ0cmVlKGJib3gsIHRoaXMuZGF0YSwgbGV2ZWwsIGluc2VydFBhdGgpO1xyXG5cclxuICAgICAgICAvLyBwdXQgdGhlIGl0ZW0gaW50byB0aGUgbm9kZVxyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChpdGVtKTtcclxuICAgICAgICBleHRlbmQobm9kZSwgYmJveCk7XHJcblxyXG4gICAgICAgIC8vIHNwbGl0IG9uIG5vZGUgb3ZlcmZsb3c7IHByb3BhZ2F0ZSB1cHdhcmRzIGlmIG5lY2Vzc2FyeVxyXG4gICAgICAgIHdoaWxlIChsZXZlbCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnNlcnRQYXRoW2xldmVsXS5jaGlsZHJlbi5sZW5ndGggPiB0aGlzLl9tYXhFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGxpdChpbnNlcnRQYXRoLCBsZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBsZXZlbC0tO1xyXG4gICAgICAgICAgICB9IGVsc2UgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgYmJveGVzIGFsb25nIHRoZSBpbnNlcnRpb24gcGF0aFxyXG4gICAgICAgIHRoaXMuX2FkanVzdFBhcmVudEJCb3hlcyhiYm94LCBpbnNlcnRQYXRoLCBsZXZlbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIHNwbGl0IG92ZXJmbG93ZWQgbm9kZSBpbnRvIHR3b1xyXG4gICAgX3NwbGl0OiBmdW5jdGlvbiAoaW5zZXJ0UGF0aCwgbGV2ZWwpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSBpbnNlcnRQYXRoW2xldmVsXSxcclxuICAgICAgICAgICAgTSA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICBtID0gdGhpcy5fbWluRW50cmllcztcclxuXHJcbiAgICAgICAgdGhpcy5fY2hvb3NlU3BsaXRBeGlzKG5vZGUsIG0sIE0pO1xyXG5cclxuICAgICAgICB2YXIgc3BsaXRJbmRleCA9IHRoaXMuX2Nob29zZVNwbGl0SW5kZXgobm9kZSwgbSwgTSk7XHJcblxyXG4gICAgICAgIHZhciBuZXdOb2RlID0gY3JlYXRlTm9kZShub2RlLmNoaWxkcmVuLnNwbGljZShzcGxpdEluZGV4LCBub2RlLmNoaWxkcmVuLmxlbmd0aCAtIHNwbGl0SW5kZXgpKTtcclxuICAgICAgICBuZXdOb2RlLmhlaWdodCA9IG5vZGUuaGVpZ2h0O1xyXG4gICAgICAgIG5ld05vZGUubGVhZiA9IG5vZGUubGVhZjtcclxuXHJcbiAgICAgICAgY2FsY0JCb3gobm9kZSwgdGhpcy50b0JCb3gpO1xyXG4gICAgICAgIGNhbGNCQm94KG5ld05vZGUsIHRoaXMudG9CQm94KTtcclxuXHJcbiAgICAgICAgaWYgKGxldmVsKSBpbnNlcnRQYXRoW2xldmVsIC0gMV0uY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgICAgICBlbHNlIHRoaXMuX3NwbGl0Um9vdChub2RlLCBuZXdOb2RlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NwbGl0Um9vdDogZnVuY3Rpb24gKG5vZGUsIG5ld05vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gc3BsaXQgcm9vdCBub2RlXHJcbiAgICAgICAgdGhpcy5kYXRhID0gY3JlYXRlTm9kZShbbm9kZSwgbmV3Tm9kZV0pO1xyXG4gICAgICAgIHRoaXMuZGF0YS5oZWlnaHQgPSBub2RlLmhlaWdodCArIDE7XHJcbiAgICAgICAgdGhpcy5kYXRhLmxlYWYgPSBmYWxzZTtcclxuICAgICAgICBjYWxjQkJveCh0aGlzLmRhdGEsIHRoaXMudG9CQm94KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2Nob29zZVNwbGl0SW5kZXg6IGZ1bmN0aW9uIChub2RlLCBtLCBNKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpLCBiYm94MSwgYmJveDIsIG92ZXJsYXAsIGFyZWEsIG1pbk92ZXJsYXAsIG1pbkFyZWEsIGluZGV4O1xyXG5cclxuICAgICAgICBtaW5PdmVybGFwID0gbWluQXJlYSA9IEluZmluaXR5O1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBtOyBpIDw9IE0gLSBtOyBpKyspIHtcclxuICAgICAgICAgICAgYmJveDEgPSBkaXN0QkJveChub2RlLCAwLCBpLCB0aGlzLnRvQkJveCk7XHJcbiAgICAgICAgICAgIGJib3gyID0gZGlzdEJCb3gobm9kZSwgaSwgTSwgdGhpcy50b0JCb3gpO1xyXG5cclxuICAgICAgICAgICAgb3ZlcmxhcCA9IGludGVyc2VjdGlvbkFyZWEoYmJveDEsIGJib3gyKTtcclxuICAgICAgICAgICAgYXJlYSA9IGJib3hBcmVhKGJib3gxKSArIGJib3hBcmVhKGJib3gyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNob29zZSBkaXN0cmlidXRpb24gd2l0aCBtaW5pbXVtIG92ZXJsYXBcclxuICAgICAgICAgICAgaWYgKG92ZXJsYXAgPCBtaW5PdmVybGFwKSB7XHJcbiAgICAgICAgICAgICAgICBtaW5PdmVybGFwID0gb3ZlcmxhcDtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuXHJcbiAgICAgICAgICAgICAgICBtaW5BcmVhID0gYXJlYSA8IG1pbkFyZWEgPyBhcmVhIDogbWluQXJlYTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcmxhcCA9PT0gbWluT3ZlcmxhcCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGNob29zZSBkaXN0cmlidXRpb24gd2l0aCBtaW5pbXVtIGFyZWFcclxuICAgICAgICAgICAgICAgIGlmIChhcmVhIDwgbWluQXJlYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbkFyZWEgPSBhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBzb3J0cyBub2RlIGNoaWxkcmVuIGJ5IHRoZSBiZXN0IGF4aXMgZm9yIHNwbGl0XHJcbiAgICBfY2hvb3NlU3BsaXRBeGlzOiBmdW5jdGlvbiAobm9kZSwgbSwgTSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY29tcGFyZU1pblggPSBub2RlLmxlYWYgPyB0aGlzLmNvbXBhcmVNaW5YIDogY29tcGFyZU5vZGVNaW5YLFxyXG4gICAgICAgICAgICBjb21wYXJlTWluWSA9IG5vZGUubGVhZiA/IHRoaXMuY29tcGFyZU1pblkgOiBjb21wYXJlTm9kZU1pblksXHJcbiAgICAgICAgICAgIHhNYXJnaW4gPSB0aGlzLl9hbGxEaXN0TWFyZ2luKG5vZGUsIG0sIE0sIGNvbXBhcmVNaW5YKSxcclxuICAgICAgICAgICAgeU1hcmdpbiA9IHRoaXMuX2FsbERpc3RNYXJnaW4obm9kZSwgbSwgTSwgY29tcGFyZU1pblkpO1xyXG5cclxuICAgICAgICAvLyBpZiB0b3RhbCBkaXN0cmlidXRpb25zIG1hcmdpbiB2YWx1ZSBpcyBtaW5pbWFsIGZvciB4LCBzb3J0IGJ5IG1pblgsXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGl0J3MgYWxyZWFkeSBzb3J0ZWQgYnkgbWluWVxyXG4gICAgICAgIGlmICh4TWFyZ2luIDwgeU1hcmdpbikgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmVNaW5YKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gdG90YWwgbWFyZ2luIG9mIGFsbCBwb3NzaWJsZSBzcGxpdCBkaXN0cmlidXRpb25zIHdoZXJlIGVhY2ggbm9kZSBpcyBhdCBsZWFzdCBtIGZ1bGxcclxuICAgIF9hbGxEaXN0TWFyZ2luOiBmdW5jdGlvbiAobm9kZSwgbSwgTSwgY29tcGFyZSlcclxuICAgIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuLnNvcnQoY29tcGFyZSk7XHJcblxyXG4gICAgICAgIHZhciB0b0JCb3ggPSB0aGlzLnRvQkJveCxcclxuICAgICAgICAgICAgbGVmdEJCb3ggPSBkaXN0QkJveChub2RlLCAwLCBtLCB0b0JCb3gpLFxyXG4gICAgICAgICAgICByaWdodEJCb3ggPSBkaXN0QkJveChub2RlLCBNIC0gbSwgTSwgdG9CQm94KSxcclxuICAgICAgICAgICAgbWFyZ2luID0gYmJveE1hcmdpbihsZWZ0QkJveCkgKyBiYm94TWFyZ2luKHJpZ2h0QkJveCksXHJcbiAgICAgICAgICAgIGksIGNoaWxkO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBtOyBpIDwgTSAtIG07IGkrKykge1xyXG4gICAgICAgICAgICBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGV4dGVuZChsZWZ0QkJveCwgbm9kZS5sZWFmID8gdG9CQm94KGNoaWxkKSA6IGNoaWxkKTtcclxuICAgICAgICAgICAgbWFyZ2luICs9IGJib3hNYXJnaW4obGVmdEJCb3gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gTSAtIG0gLSAxOyBpID49IG07IGktLSkge1xyXG4gICAgICAgICAgICBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGV4dGVuZChyaWdodEJCb3gsIG5vZGUubGVhZiA/IHRvQkJveChjaGlsZCkgOiBjaGlsZCk7XHJcbiAgICAgICAgICAgIG1hcmdpbiArPSBiYm94TWFyZ2luKHJpZ2h0QkJveCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFyZ2luO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRqdXN0UGFyZW50QkJveGVzOiBmdW5jdGlvbiAoYmJveCwgcGF0aCwgbGV2ZWwpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gYWRqdXN0IGJib3hlcyBhbG9uZyB0aGUgZ2l2ZW4gdHJlZSBwYXRoXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGxldmVsOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBleHRlbmQocGF0aFtpXSwgYmJveCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfY29uZGVuc2U6IGZ1bmN0aW9uIChwYXRoKVxyXG4gICAge1xyXG4gICAgICAgIC8vIGdvIHRocm91Z2ggdGhlIHBhdGgsIHJlbW92aW5nIGVtcHR5IG5vZGVzIGFuZCB1cGRhdGluZyBiYm94ZXNcclxuICAgICAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxLCBzaWJsaW5nczsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKHBhdGhbaV0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncyA9IHBhdGhbaSAtIDFdLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLnNwbGljZShzaWJsaW5ncy5pbmRleE9mKHBhdGhbaV0pLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGNhbGNCQm94KHBhdGhbaV0sIHRoaXMudG9CQm94KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNvbXBhcmVNaW5YOiBmdW5jdGlvbiAoYSwgYilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gYS5sZWZ0IC0gYi5sZWZ0O1xyXG4gICAgfSxcclxuXHJcbiAgICBjb21wYXJlTWluWTogZnVuY3Rpb24gKGEsIGIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGEudG9wIC0gYi50b3A7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQkJveDogZnVuY3Rpb24gKGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbWluWDogYS5sZWZ0LFxyXG4gICAgICAgICAgICBtaW5ZOiBhLnRvcCxcclxuICAgICAgICAgICAgbWF4WDogYS5yaWdodCxcclxuICAgICAgICAgICAgbWF4WTogYS5ib3R0b21cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmluZEl0ZW0gKGl0ZW0sIGl0ZW1zLCBlcXVhbHNGbilcclxue1xyXG4gICAgaWYgKCFlcXVhbHNGbikgcmV0dXJuIGl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChlcXVhbHNGbihpdGVtLCBpdGVtc1tpXSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcblxyXG4vLyBjYWxjdWxhdGUgbm9kZSdzIGJib3ggZnJvbSBiYm94ZXMgb2YgaXRzIGNoaWxkcmVuXHJcbmZ1bmN0aW9uIGNhbGNCQm94IChub2RlLCB0b0JCb3gpXHJcbntcclxuICAgIGRpc3RCQm94KG5vZGUsIDAsIG5vZGUuY2hpbGRyZW4ubGVuZ3RoLCB0b0JCb3gsIG5vZGUpO1xyXG59XHJcblxyXG4vLyBtaW4gYm91bmRpbmcgcmVjdGFuZ2xlIG9mIG5vZGUgY2hpbGRyZW4gZnJvbSBrIHRvIHAtMVxyXG5mdW5jdGlvbiBkaXN0QkJveCAobm9kZSwgaywgcCwgdG9CQm94LCBkZXN0Tm9kZSlcclxue1xyXG4gICAgaWYgKCFkZXN0Tm9kZSkgZGVzdE5vZGUgPSBjcmVhdGVOb2RlKG51bGwpO1xyXG4gICAgZGVzdE5vZGUubWluWCA9IEluZmluaXR5O1xyXG4gICAgZGVzdE5vZGUubWluWSA9IEluZmluaXR5O1xyXG4gICAgZGVzdE5vZGUubWF4WCA9IC1JbmZpbml0eTtcclxuICAgIGRlc3ROb2RlLm1heFkgPSAtSW5maW5pdHk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IGssIGNoaWxkOyBpIDwgcDsgaSsrKSB7XHJcbiAgICAgICAgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGV4dGVuZChkZXN0Tm9kZSwgbm9kZS5sZWFmID8gdG9CQm94KGNoaWxkKSA6IGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVzdE5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dGVuZCAoYSwgYilcclxue1xyXG4gICAgYS5taW5YID0gTWF0aC5taW4oYS5taW5YLCBiLm1pblgpO1xyXG4gICAgYS5taW5ZID0gTWF0aC5taW4oYS5taW5ZLCBiLm1pblkpO1xyXG4gICAgYS5tYXhYID0gTWF0aC5tYXgoYS5tYXhYLCBiLm1heFgpO1xyXG4gICAgYS5tYXhZID0gTWF0aC5tYXgoYS5tYXhZLCBiLm1heFkpO1xyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVOb2RlTWluWCAoYSwgYikgeyByZXR1cm4gYS5taW5YIC0gYi5taW5YOyB9XHJcbmZ1bmN0aW9uIGNvbXBhcmVOb2RlTWluWSAoYSwgYikgeyByZXR1cm4gYS5taW5ZIC0gYi5taW5ZOyB9XHJcblxyXG5mdW5jdGlvbiBiYm94QXJlYSAoYSkgeyByZXR1cm4gKGEubWF4WCAtIGEubWluWCkgKiAoYS5tYXhZIC0gYS5taW5ZKTsgfVxyXG5mdW5jdGlvbiBiYm94TWFyZ2luIChhKSB7IHJldHVybiAoYS5tYXhYIC0gYS5taW5YKSArIChhLm1heFkgLSBhLm1pblkpOyB9XHJcblxyXG5mdW5jdGlvbiBlbmxhcmdlZEFyZWEgKGEsIGIpXHJcbntcclxuICAgIHJldHVybiAoTWF0aC5tYXgoYi5tYXhYLCBhLm1heFgpIC0gTWF0aC5taW4oYi5taW5YLCBhLm1pblgpKSAqXHJcbiAgICAgICAgICAgKE1hdGgubWF4KGIubWF4WSwgYS5tYXhZKSAtIE1hdGgubWluKGIubWluWSwgYS5taW5ZKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludGVyc2VjdGlvbkFyZWEgKGEsIGIpXHJcbntcclxuICAgIHZhciBtaW5YID0gTWF0aC5tYXgoYS5taW5YLCBiLm1pblgpLFxyXG4gICAgICAgIG1pblkgPSBNYXRoLm1heChhLm1pblksIGIubWluWSksXHJcbiAgICAgICAgbWF4WCA9IE1hdGgubWluKGEubWF4WCwgYi5tYXhYKSxcclxuICAgICAgICBtYXhZID0gTWF0aC5taW4oYS5tYXhZLCBiLm1heFkpO1xyXG5cclxuICAgIHJldHVybiBNYXRoLm1heCgwLCBtYXhYIC0gbWluWCkgKlxyXG4gICAgICAgICAgIE1hdGgubWF4KDAsIG1heFkgLSBtaW5ZKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnMgKGEsIGIpXHJcbntcclxuICAgIHJldHVybiBhLm1pblggPD0gYi5taW5YICYmXHJcbiAgICAgICAgICAgYS5taW5ZIDw9IGIubWluWSAmJlxyXG4gICAgICAgICAgIGIubWF4WCA8PSBhLm1heFggJiZcclxuICAgICAgICAgICBiLm1heFkgPD0gYS5tYXhZO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnNlY3RzIChhLCBiKVxyXG57XHJcbiAgICByZXR1cm4gYi5taW5YIDw9IGEubWF4WCAmJlxyXG4gICAgICAgICAgIGIubWluWSA8PSBhLm1heFkgJiZcclxuICAgICAgICAgICBiLm1heFggPj0gYS5taW5YICYmXHJcbiAgICAgICAgICAgYi5tYXhZID49IGEubWluWTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTm9kZSAoY2hpbGRyZW4pXHJcbntcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgIGhlaWdodDogMSxcclxuICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgIG1pblg6IEluZmluaXR5LFxyXG4gICAgICAgIG1pblk6IEluZmluaXR5LFxyXG4gICAgICAgIG1heFg6IC1JbmZpbml0eSxcclxuICAgICAgICBtYXhZOiAtSW5maW5pdHlcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIHNvcnQgYW4gYXJyYXkgc28gdGhhdCBpdGVtcyBjb21lIGluIGdyb3VwcyBvZiBuIHVuc29ydGVkIGl0ZW1zLCB3aXRoIGdyb3VwcyBzb3J0ZWQgYmV0d2VlbiBlYWNoIG90aGVyO1xyXG4vLyBjb21iaW5lcyBzZWxlY3Rpb24gYWxnb3JpdGhtIHdpdGggYmluYXJ5IGRpdmlkZSAmIGNvbnF1ZXIgYXBwcm9hY2hcclxuXHJcbmZ1bmN0aW9uIG11bHRpU2VsZWN0IChhcnIsIGxlZnQsIHJpZ2h0LCBuLCBjb21wYXJlKVxyXG57XHJcbiAgICB2YXIgc3RhY2sgPSBbbGVmdCwgcmlnaHRdLFxyXG4gICAgICAgIG1pZDtcclxuXHJcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKVxyXG4gICAge1xyXG4gICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7XHJcbiAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG4pIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBtaWQgPSBsZWZ0ICsgTWF0aC5jZWlsKChyaWdodCAtIGxlZnQpIC8gbiAvIDIpICogbjtcclxuICAgICAgICBxdWlja3NlbGVjdChhcnIsIG1pZCwgbGVmdCwgcmlnaHQsIGNvbXBhcmUpO1xyXG5cclxuICAgICAgICBzdGFjay5wdXNoKGxlZnQsIG1pZCwgbWlkLCByaWdodCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gcmJ1c2g7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/RTree.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/Set.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/structs/Set.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @callback EachSetCallback<E>\r\n *\r\n * @param {E} entry - The Set entry.\r\n * @param {number} index - The index of the entry within the Set.\r\n *\r\n * @return {?boolean} The callback result.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * A Set is a collection of unique elements.\r\n *\r\n * @class Set\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[]} - [elements]\r\n *\r\n * @param {Array.<*>} [elements] - An optional array of elements to insert into this Set.\r\n */\r\nvar Set = new Class({\r\n\r\n    initialize:\r\n\r\n    function Set (elements)\r\n    {\r\n        /**\r\n         * The entries of this Set. Stored internally as an array.\r\n         *\r\n         * @genericUse {T[]} - [$type]\r\n         *\r\n         * @name Phaser.Structs.Set#entries\r\n         * @type {Array.<*>}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.entries = [];\r\n\r\n        if (Array.isArray(elements))\r\n        {\r\n            for (var i = 0; i < elements.length; i++)\r\n            {\r\n                this.set(elements[i]);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Inserts the provided value into this Set. If the value is already contained in this Set this method will have no effect.\r\n     *\r\n     * @method Phaser.Structs.Set#set\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @param {*} value - The value to insert into this Set.\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    set: function (value)\r\n    {\r\n        if (this.entries.indexOf(value) === -1)\r\n        {\r\n            this.entries.push(value);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Get an element of this Set which has a property of the specified name, if that property is equal to the specified value.\r\n     * If no elements of this Set satisfy the condition then this method will return `null`.\r\n     *\r\n     * @method Phaser.Structs.Set#get\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value,$return]\r\n     *\r\n     * @param {string} property - The property name to check on the elements of this Set.\r\n     * @param {*} value - The value to check for.\r\n     *\r\n     * @return {*} The first element of this Set that meets the required condition, or `null` if this Set contains no elements that meet the condition.\r\n     */\r\n    get: function (property, value)\r\n    {\r\n        for (var i = 0; i < this.entries.length; i++)\r\n        {\r\n            var entry = this.entries[i];\r\n\r\n            if (entry[property] === value)\r\n            {\r\n                return entry;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an array containing all the values in this Set.\r\n     *\r\n     * @method Phaser.Structs.Set#getArray\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T[]} - [$return]\r\n     *\r\n     * @return {Array.<*>} An array containing all the values in this Set.\r\n     */\r\n    getArray: function ()\r\n    {\r\n        return this.entries.slice(0);\r\n    },\r\n\r\n    /**\r\n     * Removes the given value from this Set if this Set contains that value.\r\n     *\r\n     * @method Phaser.Structs.Set#delete\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @param {*} value - The value to remove from the Set.\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    delete: function (value)\r\n    {\r\n        var index = this.entries.indexOf(value);\r\n\r\n        if (index > -1)\r\n        {\r\n            this.entries.splice(index, 1);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Dumps the contents of this Set to the console via `console.group`.\r\n     *\r\n     * @method Phaser.Structs.Set#dump\r\n     * @since 3.0.0\r\n     */\r\n    dump: function ()\r\n    {\r\n        // eslint-disable-next-line no-console\r\n        console.group('Set');\r\n\r\n        for (var i = 0; i < this.entries.length; i++)\r\n        {\r\n            var entry = this.entries[i];\r\n            console.log(entry);\r\n        }\r\n\r\n        // eslint-disable-next-line no-console\r\n        console.groupEnd();\r\n    },\r\n\r\n    /**\r\n     * Passes each value in this Set to the given callback.\r\n     * Use this function when you know this Set will be modified during the iteration, otherwise use `iterate`.\r\n     *\r\n     * @method Phaser.Structs.Set#each\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {EachSetCallback.<T>} - [callback]\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @param {EachSetCallback} callback - The callback to be invoked and passed each value this Set contains.\r\n     * @param {*} [callbackScope] - The scope of the callback.\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    each: function (callback, callbackScope)\r\n    {\r\n        var i;\r\n        var temp = this.entries.slice();\r\n        var len = temp.length;\r\n\r\n        if (callbackScope)\r\n        {\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                if (callback.call(callbackScope, temp[i], i) === false)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                if (callback(temp[i], i) === false)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes each value in this Set to the given callback.\r\n     * For when you absolutely know this Set won't be modified during the iteration.\r\n     *\r\n     * @method Phaser.Structs.Set#iterate\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {EachSetCallback.<T>} - [callback]\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @param {EachSetCallback} callback - The callback to be invoked and passed each value this Set contains.\r\n     * @param {*} [callbackScope] - The scope of the callback.\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    iterate: function (callback, callbackScope)\r\n    {\r\n        var i;\r\n        var len = this.entries.length;\r\n\r\n        if (callbackScope)\r\n        {\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                if (callback.call(callbackScope, this.entries[i], i) === false)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (i = 0; i < len; i++)\r\n            {\r\n                if (callback(this.entries[i], i) === false)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Goes through each entry in this Set and invokes the given function on them, passing in the arguments.\r\n     *\r\n     * @method Phaser.Structs.Set#iterateLocal\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @param {string} callbackKey - The key of the function to be invoked on each Set entry.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    iterateLocal: function (callbackKey)\r\n    {\r\n        var i;\r\n        var args = [];\r\n\r\n        for (i = 1; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        var len = this.entries.length;\r\n\r\n        for (i = 0; i < len; i++)\r\n        {\r\n            var entry = this.entries[i];\r\n\r\n            entry[callbackKey].apply(entry, args);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clears this Set so that it no longer contains any values.\r\n     *\r\n     * @method Phaser.Structs.Set#clear\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [$return]\r\n     *\r\n     * @return {Phaser.Structs.Set} This Set object.\r\n     */\r\n    clear: function ()\r\n    {\r\n        this.entries.length = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns `true` if this Set contains the given value, otherwise returns `false`.\r\n     *\r\n     * @method Phaser.Structs.Set#contains\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {T} - [value]\r\n     *\r\n     * @param {*} value - The value to check for in this Set.\r\n     *\r\n     * @return {boolean} `true` if the given value was found in this Set, otherwise `false`.\r\n     */\r\n    contains: function (value)\r\n    {\r\n        return (this.entries.indexOf(value) > -1);\r\n    },\r\n\r\n    /**\r\n     * Returns a new Set containing all values that are either in this Set or in the Set provided as an argument.\r\n     *\r\n     * @method Phaser.Structs.Set#union\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [set,$return]\r\n     *\r\n     * @param {Phaser.Structs.Set} set - The Set to perform the union with.\r\n     *\r\n     * @return {Phaser.Structs.Set} A new Set containing all the values in this Set and the Set provided as an argument.\r\n     */\r\n    union: function (set)\r\n    {\r\n        var newSet = new Set();\r\n\r\n        set.entries.forEach(function (value)\r\n        {\r\n            newSet.set(value);\r\n        });\r\n\r\n        this.entries.forEach(function (value)\r\n        {\r\n            newSet.set(value);\r\n        });\r\n\r\n        return newSet;\r\n    },\r\n\r\n    /**\r\n     * Returns a new Set that contains only the values which are in this Set and that are also in the given Set.\r\n     *\r\n     * @method Phaser.Structs.Set#intersect\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [set,$return]\r\n     *\r\n     * @param {Phaser.Structs.Set} set - The Set to intersect this set with.\r\n     *\r\n     * @return {Phaser.Structs.Set} The result of the intersection, as a new Set.\r\n     */\r\n    intersect: function (set)\r\n    {\r\n        var newSet = new Set();\r\n\r\n        this.entries.forEach(function (value)\r\n        {\r\n            if (set.contains(value))\r\n            {\r\n                newSet.set(value);\r\n            }\r\n        });\r\n\r\n        return newSet;\r\n    },\r\n\r\n    /**\r\n     * Returns a new Set containing all the values in this Set which are *not* also in the given Set.\r\n     *\r\n     * @method Phaser.Structs.Set#difference\r\n     * @since 3.0.0\r\n     *\r\n     * @genericUse {Phaser.Structs.Set.<T>} - [set,$return]\r\n     *\r\n     * @param {Phaser.Structs.Set} set - The Set to perform the difference with.\r\n     *\r\n     * @return {Phaser.Structs.Set} A new Set containing all the values in this Set that are not also in the Set provided as an argument to this method.\r\n     */\r\n    difference: function (set)\r\n    {\r\n        var newSet = new Set();\r\n\r\n        this.entries.forEach(function (value)\r\n        {\r\n            if (!set.contains(value))\r\n            {\r\n                newSet.set(value);\r\n            }\r\n        });\r\n\r\n        return newSet;\r\n    },\r\n\r\n    /**\r\n     * The size of this Set. This is the number of entries within it.\r\n     * Changing the size will truncate the Set if the given value is smaller than the current size.\r\n     * Increasing the size larger than the current size has no effect.\r\n     *\r\n     * @name Phaser.Structs.Set#size\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    size: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.entries.length;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            if (value < this.entries.length)\r\n            {\r\n                return this.entries.length = value;\r\n            }\r\n            else\r\n            {\r\n                return this.entries.length;\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Set;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL1NldC5qcz85M2Q4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFNBQVM7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSTtBQUM1QjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QixvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUk7QUFDeEI7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEIsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QyxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUU7QUFDdEI7QUFDQSxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc3RydWN0cy9TZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcblxyXG4vKipcclxuICogQGNhbGxiYWNrIEVhY2hTZXRDYWxsYmFjazxFPlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V9IGVudHJ5IC0gVGhlIFNldCBlbnRyeS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBlbnRyeSB3aXRoaW4gdGhlIFNldC5cclxuICpcclxuICogQHJldHVybiB7P2Jvb2xlYW59IFRoZSBjYWxsYmFjayByZXN1bHQuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBTZXQgaXMgYSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBlbGVtZW50cy5cclxuICpcclxuICogQGNsYXNzIFNldFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlN0cnVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyBUXHJcbiAqIEBnZW5lcmljVXNlIHtUW119IC0gW2VsZW1lbnRzXVxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5LjwqPn0gW2VsZW1lbnRzXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIGVsZW1lbnRzIHRvIGluc2VydCBpbnRvIHRoaXMgU2V0LlxyXG4gKi9cclxudmFyIFNldCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTZXQgKGVsZW1lbnRzKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBlbnRyaWVzIG9mIHRoaXMgU2V0LiBTdG9yZWQgaW50ZXJuYWxseSBhcyBhbiBhcnJheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBnZW5lcmljVXNlIHtUW119IC0gWyR0eXBlXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2V0I2VudHJpZXNcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPCo+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGVsZW1lbnRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIHRoZSBwcm92aWRlZCB2YWx1ZSBpbnRvIHRoaXMgU2V0LiBJZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gdGhpcyBTZXQgdGhpcyBtZXRob2Qgd2lsbCBoYXZlIG5vIGVmZmVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNldCNzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFt2YWx1ZV1cclxuICAgICAqIEBnZW5lcmljVXNlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFQ+fSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gaW5zZXJ0IGludG8gdGhpcyBTZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlN0cnVjdHMuU2V0fSBUaGlzIFNldCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFuIGVsZW1lbnQgb2YgdGhpcyBTZXQgd2hpY2ggaGFzIGEgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCBuYW1lLCBpZiB0aGF0IHByb3BlcnR5IGlzIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuXHJcbiAgICAgKiBJZiBubyBlbGVtZW50cyBvZiB0aGlzIFNldCBzYXRpc2Z5IHRoZSBjb25kaXRpb24gdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBgbnVsbGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7VH0gLSBbdmFsdWUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVjayBvbiB0aGUgZWxlbWVudHMgb2YgdGhpcyBTZXQuXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIFNldCB0aGF0IG1lZXRzIHRoZSByZXF1aXJlZCBjb25kaXRpb24sIG9yIGBudWxsYCBpZiB0aGlzIFNldCBjb250YWlucyBubyBlbGVtZW50cyB0aGF0IG1lZXQgdGhlIGNvbmRpdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbnRyaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5W3Byb3BlcnR5XSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSB2YWx1ZXMgaW4gdGhpcyBTZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjZ2V0QXJyYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUW119IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGluIHRoaXMgU2V0LlxyXG4gICAgICovXHJcbiAgICBnZXRBcnJheTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLnNsaWNlKDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhpcyBTZXQgaWYgdGhpcyBTZXQgY29udGFpbnMgdGhhdCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNldCNkZWxldGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtUfSAtIFt2YWx1ZV1cclxuICAgICAqIEBnZW5lcmljVXNlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFQ+fSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmVtb3ZlIGZyb20gdGhlIFNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU3RydWN0cy5TZXR9IFRoaXMgU2V0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZGVsZXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5lbnRyaWVzLmluZGV4T2YodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHVtcHMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgU2V0IHRvIHRoZSBjb25zb2xlIHZpYSBgY29uc29sZS5ncm91cGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjZHVtcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGR1bXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmdyb3VwKCdTZXQnKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVudHJpZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVudHJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3NlcyBlYWNoIHZhbHVlIGluIHRoaXMgU2V0IHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91IGtub3cgdGhpcyBTZXQgd2lsbCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiwgb3RoZXJ3aXNlIHVzZSBgaXRlcmF0ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge0VhY2hTZXRDYWxsYmFjay48VD59IC0gW2NhbGxiYWNrXVxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLlNldC48VD59IC0gWyRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFYWNoU2V0Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYW5kIHBhc3NlZCBlYWNoIHZhbHVlIHRoaXMgU2V0IGNvbnRhaW5zLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY2FsbGJhY2tTY29wZV0gLSBUaGUgc2NvcGUgb2YgdGhlIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLlNldH0gVGhpcyBTZXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxiYWNrU2NvcGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmVudHJpZXMuc2xpY2UoKTtcclxuICAgICAgICB2YXIgbGVuID0gdGVtcC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChjYWxsYmFja1Njb3BlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjYWxsYmFja1Njb3BlLCB0ZW1wW2ldLCBpKSA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sodGVtcFtpXSwgaSkgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXNzZXMgZWFjaCB2YWx1ZSBpbiB0aGlzIFNldCB0byB0aGUgZ2l2ZW4gY2FsbGJhY2suXHJcbiAgICAgKiBGb3Igd2hlbiB5b3UgYWJzb2x1dGVseSBrbm93IHRoaXMgU2V0IHdvbid0IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2V0I2l0ZXJhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtFYWNoU2V0Q2FsbGJhY2suPFQ+fSAtIFtjYWxsYmFja11cclxuICAgICAqIEBnZW5lcmljVXNlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFQ+fSAtIFskcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWFjaFNldENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFuZCBwYXNzZWQgZWFjaCB2YWx1ZSB0aGlzIFNldCBjb250YWlucy5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NhbGxiYWNrU2NvcGVdIC0gVGhlIHNjb3BlIG9mIHRoZSBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU3RydWN0cy5TZXR9IFRoaXMgU2V0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgaXRlcmF0ZTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsYmFja1Njb3BlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2tTY29wZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwoY2FsbGJhY2tTY29wZSwgdGhpcy5lbnRyaWVzW2ldLCBpKSA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2ldLCBpKSA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdvZXMgdGhyb3VnaCBlYWNoIGVudHJ5IGluIHRoaXMgU2V0IGFuZCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbiBvbiB0aGVtLCBwYXNzaW5nIGluIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjaXRlcmF0ZUxvY2FsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuU2V0LjxUPn0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2FsbGJhY2tLZXkgLSBUaGUga2V5IG9mIHRoZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIG9uIGVhY2ggU2V0IGVudHJ5LlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLlNldH0gVGhpcyBTZXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBpdGVyYXRlTG9jYWw6IGZ1bmN0aW9uIChjYWxsYmFja0tleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgZW50cnlbY2FsbGJhY2tLZXldLmFwcGx5KGVudHJ5LCBhcmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGlzIFNldCBzbyB0aGF0IGl0IG5vIGxvbmdlciBjb250YWlucyBhbnkgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2V0I2NsZWFyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpY1VzZSB7UGhhc2VyLlN0cnVjdHMuU2V0LjxUPn0gLSBbJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU3RydWN0cy5TZXR9IFRoaXMgU2V0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgU2V0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNldCNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1R9IC0gW3ZhbHVlXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2sgZm9yIGluIHRoaXMgU2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZ2l2ZW4gdmFsdWUgd2FzIGZvdW5kIGluIHRoaXMgU2V0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZW50cmllcy5pbmRleE9mKHZhbHVlKSA+IC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFNldCBjb250YWluaW5nIGFsbCB2YWx1ZXMgdGhhdCBhcmUgZWl0aGVyIGluIHRoaXMgU2V0IG9yIGluIHRoZSBTZXQgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjdW5pb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljVXNlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFQ+fSAtIFtzZXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TdHJ1Y3RzLlNldH0gc2V0IC0gVGhlIFNldCB0byBwZXJmb3JtIHRoZSB1bmlvbiB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLlNldH0gQSBuZXcgU2V0IGNvbnRhaW5pbmcgYWxsIHRoZSB2YWx1ZXMgaW4gdGhpcyBTZXQgYW5kIHRoZSBTZXQgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHVuaW9uOiBmdW5jdGlvbiAoc2V0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBuZXdTZXQgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNldC5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmV3U2V0LnNldCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5ld1NldC5zZXQodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3U2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBuZXcgU2V0IHRoYXQgY29udGFpbnMgb25seSB0aGUgdmFsdWVzIHdoaWNoIGFyZSBpbiB0aGlzIFNldCBhbmQgdGhhdCBhcmUgYWxzbyBpbiB0aGUgZ2l2ZW4gU2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2V0I2ludGVyc2VjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLlNldC48VD59IC0gW3NldCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2V0fSBzZXQgLSBUaGUgU2V0IHRvIGludGVyc2VjdCB0aGlzIHNldCB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLlNldH0gVGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJzZWN0aW9uLCBhcyBhIG5ldyBTZXQuXHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdDogZnVuY3Rpb24gKHNldClcclxuICAgIHtcclxuICAgICAgICB2YXIgbmV3U2V0ID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHZhbHVlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV3U2V0LnNldCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld1NldDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFNldCBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGluIHRoaXMgU2V0IHdoaWNoIGFyZSAqbm90KiBhbHNvIGluIHRoZSBnaXZlbiBTZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TZXQjZGlmZmVyZW5jZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWNVc2Uge1BoYXNlci5TdHJ1Y3RzLlNldC48VD59IC0gW3NldCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2V0fSBzZXQgLSBUaGUgU2V0IHRvIHBlcmZvcm0gdGhlIGRpZmZlcmVuY2Ugd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuU3RydWN0cy5TZXR9IEEgbmV3IFNldCBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGluIHRoaXMgU2V0IHRoYXQgYXJlIG5vdCBhbHNvIGluIHRoZSBTZXQgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uIChzZXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5ld1NldCA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFzZXQuY29udGFpbnModmFsdWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXdTZXQuc2V0KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3U2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzaXplIG9mIHRoaXMgU2V0LiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aXRoaW4gaXQuXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgc2l6ZSB3aWxsIHRydW5jYXRlIHRoZSBTZXQgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLlxyXG4gICAgICogSW5jcmVhc2luZyB0aGUgc2l6ZSBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBzaXplIGhhcyBubyBlZmZlY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2V0I3NpemVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNpemU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCB0aGlzLmVudHJpZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/Set.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/Size.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/structs/Size.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar SnapFloor = __webpack_require__(/*! ../math/snap/SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Size component allows you to set `width` and `height` properties and define the relationship between them.\r\n * \r\n * The component can automatically maintain the aspect ratios between the two values, and clamp them\r\n * to a defined min-max range. You can also control the dominant axis. When dimensions are given to the Size component\r\n * that would cause it to exceed its min-max range, the dimensions are adjusted based on the dominant axis.\r\n *\r\n * @class Size\r\n * @memberof Phaser.Structs\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {number} [width=0] - The width of the Size component.\r\n * @param {number} [height=width] - The height of the Size component. If not given, it will use the `width`.\r\n * @param {integer} [aspectMode=0] - The aspect mode of the Size component. Defaults to 0, no mode.\r\n * @param {any} [parent=null] - The parent of this Size component. Can be any object with public `width` and `height` properties. Dimensions are clamped to keep them within the parent bounds where possible.\r\n */\r\nvar Size = new Class({\r\n\r\n    initialize:\r\n\r\n    function Size (width, height, aspectMode, parent)\r\n    {\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = width; }\r\n        if (aspectMode === undefined) { aspectMode = 0; }\r\n        if (parent === undefined) { parent = null; }\r\n\r\n        /**\r\n         * Internal width value.\r\n         *\r\n         * @name Phaser.Structs.Size#_width\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._width = width;\r\n\r\n        /**\r\n         * Internal height value.\r\n         *\r\n         * @name Phaser.Structs.Size#_height\r\n         * @type {number}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._height = height;\r\n\r\n        /**\r\n         * Internal parent reference.\r\n         *\r\n         * @name Phaser.Structs.Size#_parent\r\n         * @type {any}\r\n         * @private\r\n         * @since 3.16.0\r\n         */\r\n        this._parent = parent;\r\n\r\n        /**\r\n         * The aspect mode this Size component will use when calculating its dimensions.\r\n         * This property is read-only. To change it use the `setAspectMode` method.\r\n         *\r\n         * @name Phaser.Structs.Size#aspectMode\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.aspectMode = aspectMode;\r\n\r\n        /**\r\n         * The proportional relationship between the width and height.\r\n         * \r\n         * This property is read-only and is updated automatically when either the `width` or `height` properties are changed,\r\n         * depending on the aspect mode.\r\n         *\r\n         * @name Phaser.Structs.Size#aspectRatio\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.aspectRatio = (height === 0) ? 1 : width / height;\r\n\r\n        /**\r\n         * The minimum allowed width.\r\n         * Cannot be less than zero.\r\n         * This value is read-only. To change it see the `setMin` method.\r\n         *\r\n         * @name Phaser.Structs.Size#minWidth\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.minWidth = 0;\r\n\r\n        /**\r\n         * The minimum allowed height.\r\n         * Cannot be less than zero.\r\n         * This value is read-only. To change it see the `setMin` method.\r\n         *\r\n         * @name Phaser.Structs.Size#minHeight\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.minHeight = 0;\r\n\r\n        /**\r\n         * The maximum allowed width.\r\n         * This value is read-only. To change it see the `setMax` method.\r\n         *\r\n         * @name Phaser.Structs.Size#maxWidth\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.maxWidth = Number.MAX_VALUE;\r\n\r\n        /**\r\n         * The maximum allowed height.\r\n         * This value is read-only. To change it see the `setMax` method.\r\n         *\r\n         * @name Phaser.Structs.Size#maxHeight\r\n         * @type {number}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.maxHeight = Number.MAX_VALUE;\r\n\r\n        /**\r\n         * A Vector2 containing the horizontal and vertical snap values, which the width and height are snapped to during resizing.\r\n         * \r\n         * By default this is disabled.\r\n         * \r\n         * This property is read-only. To change it see the `setSnap` method.\r\n         *\r\n         * @name Phaser.Structs.Size#snapTo\r\n         * @type {Phaser.Math.Vector2}\r\n         * @readonly\r\n         * @since 3.16.0\r\n         */\r\n        this.snapTo = new Vector2();\r\n    },\r\n\r\n    /**\r\n     * Sets the aspect mode of this Size component.\r\n     * \r\n     * The aspect mode controls what happens when you modify the `width` or `height` properties, or call `setSize`.\r\n     * \r\n     * It can be a number from 0 to 4, or a Size constant:\r\n     * \r\n     * 0. NONE = Do not make the size fit the aspect ratio. Change the ratio when the size changes.\r\n     * 1. WIDTH_CONTROLS_HEIGHT = The height is automatically adjusted based on the width.\r\n     * 2. HEIGHT_CONTROLS_WIDTH = The width is automatically adjusted based on the height.\r\n     * 3. FIT = The width and height are automatically adjusted to fit inside the given target area, while keeping the aspect ratio. Depending on the aspect ratio there may be some space inside the area which is not covered.\r\n     * 4. ENVELOP = The width and height are automatically adjusted to make the size cover the entire target area while keeping the aspect ratio. This may extend further out than the target size.\r\n     * \r\n     * Calling this method automatically recalculates the `width` and the `height`, if required.\r\n     * \r\n     * @method Phaser.Structs.Size#setAspectMode\r\n     * @since 3.16.0\r\n     *\r\n     * @param {integer} [value=0] - The aspect mode value.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setAspectMode: function (value)\r\n    {\r\n        if (value === undefined) { value = 0; }\r\n\r\n        this.aspectMode = value;\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * By setting a Snap To value when this Size component is modified its dimensions will automatically\r\n     * by snapped to the nearest grid slice, using floor. For example, if you have snap value of 16,\r\n     * and the width changes to 68, then it will snap down to 64 (the closest multiple of 16 when floored)\r\n     * \r\n     * Note that snapping takes place before adjustments by the parent, or the min / max settings. If these\r\n     * values are not multiples of the given snap values, then this can result in un-snapped dimensions.\r\n     * \r\n     * Call this method with no arguments to reset the snap values.\r\n     * \r\n     * Calling this method automatically recalculates the `width` and the `height`, if required.\r\n     * \r\n     * @method Phaser.Structs.Size#setSnap\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [snapWidth=0] - The amount to snap the width to. If you don't want to snap the width, pass a value of zero.\r\n     * @param {number} [snapHeight=snapWidth] - The amount to snap the height to. If not provided it will use the `snapWidth` value. If you don't want to snap the height, pass a value of zero.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setSnap: function (snapWidth, snapHeight)\r\n    {\r\n        if (snapWidth === undefined) { snapWidth = 0; }\r\n        if (snapHeight === undefined) { snapHeight = snapWidth; }\r\n\r\n        this.snapTo.set(snapWidth, snapHeight);\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * Sets, or clears, the parent of this Size component.\r\n     * \r\n     * To clear the parent call this method with no arguments.\r\n     * \r\n     * The parent influences the maximum extents to which this Size component can expand,\r\n     * based on the aspect mode:\r\n     * \r\n     * NONE - The parent clamps both the width and height.\r\n     * WIDTH_CONTROLS_HEIGHT - The parent clamps just the width.\r\n     * HEIGHT_CONTROLS_WIDTH - The parent clamps just the height.\r\n     * FIT - The parent clamps whichever axis is required to ensure the size fits within it.\r\n     * ENVELOP - The parent is used to ensure the size fully envelops the parent.\r\n     * \r\n     * Calling this method automatically calls `setSize`.\r\n     *\r\n     * @method Phaser.Structs.Size#setParent\r\n     * @since 3.16.0\r\n     *\r\n     * @param {any} [parent] - Sets the parent of this Size component. Don't provide a value to clear an existing parent.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setParent: function (parent)\r\n    {\r\n        this._parent = parent;\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * Set the minimum width and height values this Size component will allow.\r\n     * \r\n     * The minimum values can never be below zero, or greater than the maximum values.\r\n     * \r\n     * Setting this will automatically adjust both the `width` and `height` properties to ensure they are within range.\r\n     * \r\n     * Note that based on the aspect mode, and if this Size component has a parent set or not, the minimums set here\r\n     * _can_ be exceed in some situations.\r\n     *\r\n     * @method Phaser.Structs.Size#setMin\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=0] - The minimum allowed width of the Size component.\r\n     * @param {number} [height=width] - The minimum allowed height of the Size component. If not given, it will use the `width`.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setMin: function (width, height)\r\n    {\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.minWidth = Clamp(width, 0, this.maxWidth);\r\n        this.minHeight = Clamp(height, 0, this.maxHeight);\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * Set the maximum width and height values this Size component will allow.\r\n     * \r\n     * Setting this will automatically adjust both the `width` and `height` properties to ensure they are within range.\r\n     * \r\n     * Note that based on the aspect mode, and if this Size component has a parent set or not, the maximums set here\r\n     * _can_ be exceed in some situations.\r\n     *\r\n     * @method Phaser.Structs.Size#setMax\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=Number.MAX_VALUE] - The maximum allowed width of the Size component.\r\n     * @param {number} [height=width] - The maximum allowed height of the Size component. If not given, it will use the `width`.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setMax: function (width, height)\r\n    {\r\n        if (width === undefined) { width = Number.MAX_VALUE; }\r\n        if (height === undefined) { height = width; }\r\n\r\n        this.maxWidth = Clamp(width, this.minWidth, Number.MAX_VALUE);\r\n        this.maxHeight = Clamp(height, this.minHeight, Number.MAX_VALUE);\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * Sets the width and height of this Size component based on the aspect mode.\r\n     * \r\n     * If the aspect mode is 'none' then calling this method will change the aspect ratio, otherwise the current\r\n     * aspect ratio is honored across all other modes.\r\n     * \r\n     * If snapTo values have been set then the given width and height are snapped first, prior to any further\r\n     * adjustment via min/max values, or a parent.\r\n     * \r\n     * If minimum and/or maximum dimensions have been specified, the values given to this method will be clamped into\r\n     * that range prior to adjustment, but may still exceed them depending on the aspect mode.\r\n     * \r\n     * If this Size component has a parent set, and the aspect mode is `fit` or `envelop`, then the given sizes will\r\n     * be clamped to the range specified by the parent.\r\n     *\r\n     * @method Phaser.Structs.Size#setSize\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=0] - The new width of the Size component.\r\n     * @param {number} [height=width] - The new height of the Size component. If not given, it will use the `width`.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = width; }\r\n    \r\n        switch (this.aspectMode)\r\n        {\r\n            case Size.NONE:\r\n                this._width = this.getNewWidth(SnapFloor(width, this.snapTo.x));\r\n                this._height = this.getNewHeight(SnapFloor(height, this.snapTo.y));\r\n                this.aspectRatio = (this._height === 0) ? 1 : this._width / this._height;\r\n                break;\r\n\r\n            case Size.WIDTH_CONTROLS_HEIGHT:\r\n                this._width = this.getNewWidth(SnapFloor(width, this.snapTo.x));\r\n                this._height = this.getNewHeight(this._width * (1 / this.aspectRatio), false);\r\n                break;\r\n\r\n            case Size.HEIGHT_CONTROLS_WIDTH:\r\n                this._height = this.getNewHeight(SnapFloor(height, this.snapTo.y));\r\n                this._width = this.getNewWidth(this._height * this.aspectRatio, false);\r\n                break;\r\n\r\n            case Size.FIT:\r\n                this.constrain(width, height, true);\r\n                break;\r\n\r\n            case Size.ENVELOP:\r\n                this.constrain(width, height, false);\r\n                break;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a new aspect ratio, overriding what was there previously.\r\n     * \r\n     * It then calls `setSize` immediately using the current dimensions.\r\n     *\r\n     * @method Phaser.Structs.Size#setAspectRatio\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} ratio - The new aspect ratio.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setAspectRatio: function (ratio)\r\n    {\r\n        this.aspectRatio = ratio;\r\n\r\n        return this.setSize(this._width, this._height);\r\n    },\r\n\r\n    /**\r\n     * Sets a new width and height for this Size component and updates the aspect ratio based on them.\r\n     * \r\n     * It _doesn't_ change the `aspectMode` and still factors in size limits such as the min max and parent bounds.\r\n     *\r\n     * @method Phaser.Structs.Size#resize\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} width - The new width of the Size component.\r\n     * @param {number} [height=width] - The new height of the Size component. If not given, it will use the `width`.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    resize: function (width, height)\r\n    {\r\n        this._width = this.getNewWidth(SnapFloor(width, this.snapTo.x));\r\n        this._height = this.getNewHeight(SnapFloor(height, this.snapTo.y));\r\n        this.aspectRatio = (this._height === 0) ? 1 : this._width / this._height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Takes a new width and passes it through the min/max clamp and then checks it doesn't exceed the parent width.\r\n     *\r\n     * @method Phaser.Structs.Size#getNewWidth\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} value - The value to clamp and check.\r\n     * @param {boolean} [checkParent=true] - Check the given value against the parent, if set.\r\n     *\r\n     * @return {number} The modified width value.\r\n     */\r\n    getNewWidth: function (value, checkParent)\r\n    {\r\n        if (checkParent === undefined) { checkParent = true; }\r\n        \r\n        value = Clamp(value, this.minWidth, this.maxWidth);\r\n\r\n        if (checkParent && this._parent && value > this._parent.width)\r\n        {\r\n            value = Math.max(this.minWidth, this._parent.width);\r\n        }\r\n\r\n        return value;\r\n    },\r\n\r\n    /**\r\n     * Takes a new height and passes it through the min/max clamp and then checks it doesn't exceed the parent height.\r\n     *\r\n     * @method Phaser.Structs.Size#getNewHeight\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} value - The value to clamp and check.\r\n     * @param {boolean} [checkParent=true] - Check the given value against the parent, if set.\r\n     *\r\n     * @return {number} The modified height value.\r\n     */\r\n    getNewHeight: function (value, checkParent)\r\n    {\r\n        if (checkParent === undefined) { checkParent = true; }\r\n\r\n        value = Clamp(value, this.minHeight, this.maxHeight);\r\n\r\n        if (checkParent && this._parent && value > this._parent.height)\r\n        {\r\n            value = Math.max(this.minHeight, this._parent.height);\r\n        }\r\n\r\n        return value;\r\n    },\r\n\r\n    /**\r\n     * The current `width` and `height` are adjusted to fit inside the given dimensions, while keeping the aspect ratio.\r\n     * \r\n     * If `fit` is true there may be some space inside the target area which is not covered if its aspect ratio differs.\r\n     * If `fit` is false the size may extend further out than the target area if the aspect ratios differ.\r\n     * \r\n     * If this Size component has a parent set, then the width and height passed to this method will be clamped so\r\n     * it cannot exceed that of the parent.\r\n     *\r\n     * @method Phaser.Structs.Size#constrain\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=0] - The new width of the Size component.\r\n     * @param {number} [height] - The new height of the Size component. If not given, it will use the width value.\r\n     * @param {boolean} [fit=true] - Perform a `fit` (true) constraint, or an `envelop` (false) constraint.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    constrain: function (width, height, fit)\r\n    {\r\n        if (width === undefined) { width = 0; }\r\n        if (height === undefined) { height = width; }\r\n        if (fit === undefined) { fit = true; }\r\n\r\n        width = this.getNewWidth(width);\r\n        height = this.getNewHeight(height);\r\n\r\n        var snap = this.snapTo;\r\n        var newRatio = (height === 0) ? 1 : width / height;\r\n\r\n        if ((fit && this.aspectRatio > newRatio) || (!fit && this.aspectRatio < newRatio))\r\n        {\r\n            //  We need to change the height to fit the width\r\n\r\n            width = SnapFloor(width, snap.x);\r\n\r\n            height = width / this.aspectRatio;\r\n\r\n            if (snap.y > 0)\r\n            {\r\n                height = SnapFloor(height, snap.y);\r\n\r\n                //  Reduce the width accordingly\r\n                width = height * this.aspectRatio;\r\n            }\r\n        }\r\n        else if ((fit && this.aspectRatio < newRatio) || (!fit && this.aspectRatio > newRatio))\r\n        {\r\n            //  We need to change the width to fit the height\r\n\r\n            height = SnapFloor(height, snap.y);\r\n\r\n            width = height * this.aspectRatio;\r\n\r\n            if (snap.x > 0)\r\n            {\r\n                width = SnapFloor(width, snap.x);\r\n\r\n                //  Reduce the height accordingly\r\n                height = width * (1 / this.aspectRatio);\r\n            }\r\n        }\r\n\r\n        this._width = width;\r\n        this._height = height;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The current `width` and `height` are adjusted to fit inside the given dimensions, while keeping the aspect ratio.\r\n     * \r\n     * There may be some space inside the target area which is not covered if its aspect ratio differs.\r\n     * \r\n     * If this Size component has a parent set, then the width and height passed to this method will be clamped so\r\n     * it cannot exceed that of the parent.\r\n     *\r\n     * @method Phaser.Structs.Size#fitTo\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=0] - The new width of the Size component.\r\n     * @param {number} [height] - The new height of the Size component. If not given, it will use the width value.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    fitTo: function (width, height)\r\n    {\r\n        return this.constrain(width, height, true);\r\n    },\r\n\r\n    /**\r\n     * The current `width` and `height` are adjusted so that they fully envelope the given dimensions, while keeping the aspect ratio.\r\n     * \r\n     * The size may extend further out than the target area if the aspect ratios differ.\r\n     * \r\n     * If this Size component has a parent set, then the values are clamped so that it never exceeds the parent\r\n     * on the longest axis.\r\n     *\r\n     * @method Phaser.Structs.Size#envelop\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} [width=0] - The new width of the Size component.\r\n     * @param {number} [height] - The new height of the Size component. If not given, it will use the width value.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    envelop: function (width, height)\r\n    {\r\n        return this.constrain(width, height, false);\r\n    },\r\n\r\n    /**\r\n     * Sets the width of this Size component.\r\n     * \r\n     * Depending on the aspect mode, changing the width may also update the height and aspect ratio.\r\n     *\r\n     * @method Phaser.Structs.Size#setWidth\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} width - The new width of the Size component.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setWidth: function (value)\r\n    {\r\n        return this.setSize(value, this._height);\r\n    },\r\n\r\n    /**\r\n     * Sets the height of this Size component.\r\n     * \r\n     * Depending on the aspect mode, changing the height may also update the width and aspect ratio.\r\n     *\r\n     * @method Phaser.Structs.Size#setHeight\r\n     * @since 3.16.0\r\n     *\r\n     * @param {number} height - The new height of the Size component.\r\n     *\r\n     * @return {this} This Size component instance.\r\n     */\r\n    setHeight: function (value)\r\n    {\r\n        return this.setSize(this._width, value);\r\n    },\r\n\r\n    /**\r\n     * Returns a string representation of this Size component.\r\n     *\r\n     * @method Phaser.Structs.Size#toString\r\n     * @since 3.16.0\r\n     *\r\n     * @return {string} A string representation of this Size component.\r\n     */\r\n    toString: function ()\r\n    {\r\n        return '[{ Size (width=' + this._width + ' height=' + this._height + ' aspectRatio=' + this.aspectRatio + ' aspectMode=' + this.aspectMode + ') }]';\r\n    },\r\n\r\n    /**\r\n     * Sets the values of this Size component to the `element.style.width` and `height`\r\n     * properties of the given DOM Element. The properties are set as `px` values.\r\n     *\r\n     * @method Phaser.Structs.Size#setCSS\r\n     * @since 3.17.0\r\n     *\r\n     * @param {HTMLElement} element - The DOM Element to set the CSS style on.\r\n     */\r\n    setCSS: function (element)\r\n    {\r\n        if (element && element.style)\r\n        {\r\n            element.style.width = this._width + 'px';\r\n            element.style.height = this._height + 'px';\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Copies the aspect mode, aspect ratio, width and height from this Size component\r\n     * to the given Size component. Note that the parent, if set, is not copied across.\r\n     *\r\n     * @method Phaser.Structs.Size#copy\r\n     * @since 3.16.0\r\n     * \r\n     * @param {Phaser.Structs.Size} destination - The Size component to copy the values to.\r\n     *\r\n     * @return {Phaser.Structs.Size} The updated destination Size component.\r\n     */\r\n    copy: function (destination)\r\n    {\r\n        destination.setAspectMode(this.aspectMode);\r\n\r\n        destination.aspectRatio = this.aspectRatio;\r\n\r\n        return destination.setSize(this.width, this.height);\r\n    },\r\n\r\n    /**\r\n     * Destroys this Size component.\r\n     * \r\n     * This clears the local properties and any parent object, if set.\r\n     * \r\n     * A destroyed Size component cannot be re-used.\r\n     *\r\n     * @method Phaser.Structs.Size#destroy\r\n     * @since 3.16.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this._parent = null;\r\n        this.snapTo = null;\r\n    },\r\n\r\n    /**\r\n     * The width of this Size component.\r\n     * \r\n     * This value is clamped to the range specified by `minWidth` and `maxWidth`, if enabled.\r\n     * \r\n     * A width can never be less than zero.\r\n     * \r\n     * Changing this value will automatically update the `height` if the aspect ratio lock is enabled.\r\n     * You can also use the `setWidth` and `getWidth` methods.\r\n     *\r\n     * @name Phaser.Structs.Size#width\r\n     * @type {number}\r\n     * @since 3.16.0\r\n     */\r\n    width: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._width;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.setSize(value, this._height);\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The height of this Size component.\r\n     * \r\n     * This value is clamped to the range specified by `minHeight` and `maxHeight`, if enabled.\r\n     * \r\n     * A height can never be less than zero.\r\n     * \r\n     * Changing this value will automatically update the `width` if the aspect ratio lock is enabled.\r\n     * You can also use the `setHeight` and `getHeight` methods.\r\n     *\r\n     * @name Phaser.Structs.Size#height\r\n     * @type {number}\r\n     * @since 3.16.0\r\n     */\r\n    height: {\r\n\r\n        get: function ()\r\n        {\r\n            return this._height;\r\n        },\r\n\r\n        set: function (value)\r\n        {\r\n            this.setSize(this._width, value);\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\n/**\r\n * Do not make the size fit the aspect ratio. Change the ratio when the size changes.\r\n * \r\n * @name Phaser.Structs.Size.NONE\r\n * @constant\r\n * @type {integer}\r\n * @since 3.16.0\r\n */\r\nSize.NONE = 0;\r\n\r\n/**\r\n * The height is automatically adjusted based on the width.\r\n * \r\n * @name Phaser.Structs.Size.WIDTH_CONTROLS_HEIGHT\r\n * @constant\r\n * @type {integer}\r\n * @since 3.16.0\r\n */\r\nSize.WIDTH_CONTROLS_HEIGHT = 1;\r\n\r\n/**\r\n * The width is automatically adjusted based on the height.\r\n * \r\n * @name Phaser.Structs.Size.HEIGHT_CONTROLS_WIDTH\r\n * @constant\r\n * @type {integer}\r\n * @since 3.16.0\r\n */\r\nSize.HEIGHT_CONTROLS_WIDTH = 2;\r\n\r\n/**\r\n * The width and height are automatically adjusted to fit inside the given target area, while keeping the aspect ratio. Depending on the aspect ratio there may be some space inside the area which is not covered.\r\n * \r\n * @name Phaser.Structs.Size.FIT\r\n * @constant\r\n * @type {integer}\r\n * @since 3.16.0\r\n */\r\nSize.FIT = 3;\r\n\r\n/**\r\n * The width and height are automatically adjusted to make the size cover the entire target area while keeping the aspect ratio. This may extend further out than the target size.\r\n * \r\n * @name Phaser.Structs.Size.ENVELOP\r\n * @constant\r\n * @type {integer}\r\n * @since 3.16.0\r\n */\r\nSize.ENVELOP = 4;\r\n\r\nmodule.exports = Size;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL1NpemUuanM/ZGRkNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDhEQUFlO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxJQUFJO0FBQ2Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLGdCQUFnQjtBQUNuRCx1Q0FBdUMsZ0JBQWdCO0FBQ3ZELG1DQUFtQyxlQUFlOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlO0FBQ3JELHVDQUF1Qyx3QkFBd0I7O0FBRS9EOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3QyxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywwQkFBMEI7QUFDNUQsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXO0FBQzdDLG1DQUFtQyxnQkFBZ0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxvQkFBb0I7O0FBRTVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLG9CQUFvQjs7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLGdCQUFnQjtBQUNuRCxnQ0FBZ0MsWUFBWTs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUlBQXVJO0FBQ3pKLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL1NpemUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4uL21hdGgvQ2xhbXAnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFNuYXBGbG9vciA9IHJlcXVpcmUoJy4uL21hdGgvc25hcC9TbmFwRmxvb3InKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBTaXplIGNvbXBvbmVudCBhbGxvd3MgeW91IHRvIHNldCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFuZCBkZWZpbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uXHJcbiAqIFxyXG4gKiBUaGUgY29tcG9uZW50IGNhbiBhdXRvbWF0aWNhbGx5IG1haW50YWluIHRoZSBhc3BlY3QgcmF0aW9zIGJldHdlZW4gdGhlIHR3byB2YWx1ZXMsIGFuZCBjbGFtcCB0aGVtXHJcbiAqIHRvIGEgZGVmaW5lZCBtaW4tbWF4IHJhbmdlLiBZb3UgY2FuIGFsc28gY29udHJvbCB0aGUgZG9taW5hbnQgYXhpcy4gV2hlbiBkaW1lbnNpb25zIGFyZSBnaXZlbiB0byB0aGUgU2l6ZSBjb21wb25lbnRcclxuICogdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBleGNlZWQgaXRzIG1pbi1tYXggcmFuZ2UsIHRoZSBkaW1lbnNpb25zIGFyZSBhZGp1c3RlZCBiYXNlZCBvbiB0aGUgZG9taW5hbnQgYXhpcy5cclxuICpcclxuICogQGNsYXNzIFNpemVcclxuICogQG1lbWJlcm9mIFBoYXNlci5TdHJ1Y3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MF0gLSBUaGUgd2lkdGggb2YgdGhlIFNpemUgY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBTaXplIGNvbXBvbmVudC4gSWYgbm90IGdpdmVuLCBpdCB3aWxsIHVzZSB0aGUgYHdpZHRoYC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbYXNwZWN0TW9kZT0wXSAtIFRoZSBhc3BlY3QgbW9kZSBvZiB0aGUgU2l6ZSBjb21wb25lbnQuIERlZmF1bHRzIHRvIDAsIG5vIG1vZGUuXHJcbiAqIEBwYXJhbSB7YW55fSBbcGFyZW50PW51bGxdIC0gVGhlIHBhcmVudCBvZiB0aGlzIFNpemUgY29tcG9uZW50LiBDYW4gYmUgYW55IG9iamVjdCB3aXRoIHB1YmxpYyBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzLiBEaW1lbnNpb25zIGFyZSBjbGFtcGVkIHRvIGtlZXAgdGhlbSB3aXRoaW4gdGhlIHBhcmVudCBib3VuZHMgd2hlcmUgcG9zc2libGUuXHJcbiAqL1xyXG52YXIgU2l6ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTaXplICh3aWR0aCwgaGVpZ2h0LCBhc3BlY3RNb2RlLCBwYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcbiAgICAgICAgaWYgKGFzcGVjdE1vZGUgPT09IHVuZGVmaW5lZCkgeyBhc3BlY3RNb2RlID0gMDsgfVxyXG4gICAgICAgIGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkgeyBwYXJlbnQgPSBudWxsOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHdpZHRoIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2l6ZSNfd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGhlaWdodCB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUjX2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwYXJlbnQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2l6ZSNfcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhc3BlY3QgbW9kZSB0aGlzIFNpemUgY29tcG9uZW50IHdpbGwgdXNlIHdoZW4gY2FsY3VsYXRpbmcgaXRzIGRpbWVuc2lvbnMuXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZWFkLW9ubHkuIFRvIGNoYW5nZSBpdCB1c2UgdGhlIGBzZXRBc3BlY3RNb2RlYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplI2FzcGVjdE1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hc3BlY3RNb2RlID0gYXNwZWN0TW9kZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByb3BvcnRpb25hbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgd2lkdGggYW5kIGhlaWdodC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHJlYWQtb25seSBhbmQgaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZWl0aGVyIHRoZSBgd2lkdGhgIG9yIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGNoYW5nZWQsXHJcbiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBhc3BlY3QgbW9kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUjYXNwZWN0UmF0aW9cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFzcGVjdFJhdGlvID0gKGhlaWdodCA9PT0gMCkgPyAxIDogd2lkdGggLyBoZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtaW5pbXVtIGFsbG93ZWQgd2lkdGguXHJcbiAgICAgICAgICogQ2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgcmVhZC1vbmx5LiBUbyBjaGFuZ2UgaXQgc2VlIHRoZSBgc2V0TWluYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplI21pbldpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taW5XaWR0aCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtaW5pbXVtIGFsbG93ZWQgaGVpZ2h0LlxyXG4gICAgICAgICAqIENhbm5vdCBiZSBsZXNzIHRoYW4gemVyby5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHJlYWQtb25seS4gVG8gY2hhbmdlIGl0IHNlZSB0aGUgYHNldE1pbmAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2l6ZSNtaW5IZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgd2lkdGguXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyByZWFkLW9ubHkuIFRvIGNoYW5nZSBpdCBzZWUgdGhlIGBzZXRNYXhgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUjbWF4V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFdpZHRoID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gYWxsb3dlZCBoZWlnaHQuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyByZWFkLW9ubHkuIFRvIGNoYW5nZSBpdCBzZWUgdGhlIGBzZXRNYXhgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUjbWF4SGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFZlY3RvcjIgY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc25hcCB2YWx1ZXMsIHdoaWNoIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBzbmFwcGVkIHRvIGR1cmluZyByZXNpemluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IHRoaXMgaXMgZGlzYWJsZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZWFkLW9ubHkuIFRvIGNoYW5nZSBpdCBzZWUgdGhlIGBzZXRTbmFwYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplI3NuYXBUb1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNuYXBUbyA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYXNwZWN0IG1vZGUgb2YgdGhpcyBTaXplIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGFzcGVjdCBtb2RlIGNvbnRyb2xzIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBtb2RpZnkgdGhlIGB3aWR0aGAgb3IgYGhlaWdodGAgcHJvcGVydGllcywgb3IgY2FsbCBgc2V0U2l6ZWAuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGNhbiBiZSBhIG51bWJlciBmcm9tIDAgdG8gNCwgb3IgYSBTaXplIGNvbnN0YW50OlxyXG4gICAgICogXHJcbiAgICAgKiAwLiBOT05FID0gRG8gbm90IG1ha2UgdGhlIHNpemUgZml0IHRoZSBhc3BlY3QgcmF0aW8uIENoYW5nZSB0aGUgcmF0aW8gd2hlbiB0aGUgc2l6ZSBjaGFuZ2VzLlxyXG4gICAgICogMS4gV0lEVEhfQ09OVFJPTFNfSEVJR0hUID0gVGhlIGhlaWdodCBpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGJhc2VkIG9uIHRoZSB3aWR0aC5cclxuICAgICAqIDIuIEhFSUdIVF9DT05UUk9MU19XSURUSCA9IFRoZSB3aWR0aCBpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGJhc2VkIG9uIHRoZSBoZWlnaHQuXHJcbiAgICAgKiAzLiBGSVQgPSBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYXV0b21hdGljYWxseSBhZGp1c3RlZCB0byBmaXQgaW5zaWRlIHRoZSBnaXZlbiB0YXJnZXQgYXJlYSwgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLiBEZXBlbmRpbmcgb24gdGhlIGFzcGVjdCByYXRpbyB0aGVyZSBtYXkgYmUgc29tZSBzcGFjZSBpbnNpZGUgdGhlIGFyZWEgd2hpY2ggaXMgbm90IGNvdmVyZWQuXHJcbiAgICAgKiA0LiBFTlZFTE9QID0gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgc2l6ZSBjb3ZlciB0aGUgZW50aXJlIHRhcmdldCBhcmVhIHdoaWxlIGtlZXBpbmcgdGhlIGFzcGVjdCByYXRpby4gVGhpcyBtYXkgZXh0ZW5kIGZ1cnRoZXIgb3V0IHRoYW4gdGhlIHRhcmdldCBzaXplLlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgcmVjYWxjdWxhdGVzIHRoZSBgd2lkdGhgIGFuZCB0aGUgYGhlaWdodGAsIGlmIHJlcXVpcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjc2V0QXNwZWN0TW9kZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3ZhbHVlPTBdIC0gVGhlIGFzcGVjdCBtb2RlIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2l6ZSBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEFzcGVjdE1vZGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5hc3BlY3RNb2RlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFNpemUodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnkgc2V0dGluZyBhIFNuYXAgVG8gdmFsdWUgd2hlbiB0aGlzIFNpemUgY29tcG9uZW50IGlzIG1vZGlmaWVkIGl0cyBkaW1lbnNpb25zIHdpbGwgYXV0b21hdGljYWxseVxyXG4gICAgICogYnkgc25hcHBlZCB0byB0aGUgbmVhcmVzdCBncmlkIHNsaWNlLCB1c2luZyBmbG9vci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHNuYXAgdmFsdWUgb2YgMTYsXHJcbiAgICAgKiBhbmQgdGhlIHdpZHRoIGNoYW5nZXMgdG8gNjgsIHRoZW4gaXQgd2lsbCBzbmFwIGRvd24gdG8gNjQgKHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mIDE2IHdoZW4gZmxvb3JlZClcclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IHNuYXBwaW5nIHRha2VzIHBsYWNlIGJlZm9yZSBhZGp1c3RtZW50cyBieSB0aGUgcGFyZW50LCBvciB0aGUgbWluIC8gbWF4IHNldHRpbmdzLiBJZiB0aGVzZVxyXG4gICAgICogdmFsdWVzIGFyZSBub3QgbXVsdGlwbGVzIG9mIHRoZSBnaXZlbiBzbmFwIHZhbHVlcywgdGhlbiB0aGlzIGNhbiByZXN1bHQgaW4gdW4tc25hcHBlZCBkaW1lbnNpb25zLlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIHRvIHJlc2V0IHRoZSBzbmFwIHZhbHVlcy5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBhdXRvbWF0aWNhbGx5IHJlY2FsY3VsYXRlcyB0aGUgYHdpZHRoYCBhbmQgdGhlIGBoZWlnaHRgLCBpZiByZXF1aXJlZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TaXplI3NldFNuYXBcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NuYXBXaWR0aD0wXSAtIFRoZSBhbW91bnQgdG8gc25hcCB0aGUgd2lkdGggdG8uIElmIHlvdSBkb24ndCB3YW50IHRvIHNuYXAgdGhlIHdpZHRoLCBwYXNzIGEgdmFsdWUgb2YgemVyby5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc25hcEhlaWdodD1zbmFwV2lkdGhdIC0gVGhlIGFtb3VudCB0byBzbmFwIHRoZSBoZWlnaHQgdG8uIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIHVzZSB0aGUgYHNuYXBXaWR0aGAgdmFsdWUuIElmIHlvdSBkb24ndCB3YW50IHRvIHNuYXAgdGhlIGhlaWdodCwgcGFzcyBhIHZhbHVlIG9mIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaXplIGNvbXBvbmVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U25hcDogZnVuY3Rpb24gKHNuYXBXaWR0aCwgc25hcEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoc25hcFdpZHRoID09PSB1bmRlZmluZWQpIHsgc25hcFdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmIChzbmFwSGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgc25hcEhlaWdodCA9IHNuYXBXaWR0aDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNuYXBUby5zZXQoc25hcFdpZHRoLCBzbmFwSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzLCBvciBjbGVhcnMsIHRoZSBwYXJlbnQgb2YgdGhpcyBTaXplIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogVG8gY2xlYXIgdGhlIHBhcmVudCBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcGFyZW50IGluZmx1ZW5jZXMgdGhlIG1heGltdW0gZXh0ZW50cyB0byB3aGljaCB0aGlzIFNpemUgY29tcG9uZW50IGNhbiBleHBhbmQsXHJcbiAgICAgKiBiYXNlZCBvbiB0aGUgYXNwZWN0IG1vZGU6XHJcbiAgICAgKiBcclxuICAgICAqIE5PTkUgLSBUaGUgcGFyZW50IGNsYW1wcyBib3RoIHRoZSB3aWR0aCBhbmQgaGVpZ2h0LlxyXG4gICAgICogV0lEVEhfQ09OVFJPTFNfSEVJR0hUIC0gVGhlIHBhcmVudCBjbGFtcHMganVzdCB0aGUgd2lkdGguXHJcbiAgICAgKiBIRUlHSFRfQ09OVFJPTFNfV0lEVEggLSBUaGUgcGFyZW50IGNsYW1wcyBqdXN0IHRoZSBoZWlnaHQuXHJcbiAgICAgKiBGSVQgLSBUaGUgcGFyZW50IGNsYW1wcyB3aGljaGV2ZXIgYXhpcyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIHNpemUgZml0cyB3aXRoaW4gaXQuXHJcbiAgICAgKiBFTlZFTE9QIC0gVGhlIHBhcmVudCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgc2l6ZSBmdWxseSBlbnZlbG9wcyB0aGUgcGFyZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY2FsbHMgYHNldFNpemVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSNzZXRQYXJlbnRcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW3BhcmVudF0gLSBTZXRzIHRoZSBwYXJlbnQgb2YgdGhpcyBTaXplIGNvbXBvbmVudC4gRG9uJ3QgcHJvdmlkZSBhIHZhbHVlIHRvIGNsZWFyIGFuIGV4aXN0aW5nIHBhcmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNpemUgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQYXJlbnQ6IGZ1bmN0aW9uIChwYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaXplKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB0aGlzIFNpemUgY29tcG9uZW50IHdpbGwgYWxsb3cuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlcyBjYW4gbmV2ZXIgYmUgYmVsb3cgemVybywgb3IgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlcy5cclxuICAgICAqIFxyXG4gICAgICogU2V0dGluZyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBhZGp1c3QgYm90aCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyB0byBlbnN1cmUgdGhleSBhcmUgd2l0aGluIHJhbmdlLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgYmFzZWQgb24gdGhlIGFzcGVjdCBtb2RlLCBhbmQgaWYgdGhpcyBTaXplIGNvbXBvbmVudCBoYXMgYSBwYXJlbnQgc2V0IG9yIG5vdCwgdGhlIG1pbmltdW1zIHNldCBoZXJlXHJcbiAgICAgKiBfY2FuXyBiZSBleGNlZWQgaW4gc29tZSBzaXR1YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSNzZXRNaW5cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB3aWR0aCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgbWluaW11bSBhbGxvd2VkIGhlaWdodCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuIElmIG5vdCBnaXZlbiwgaXQgd2lsbCB1c2UgdGhlIGB3aWR0aGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaXplIGNvbXBvbmVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWluOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDA7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5taW5XaWR0aCA9IENsYW1wKHdpZHRoLCAwLCB0aGlzLm1heFdpZHRoKTtcclxuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IENsYW1wKGhlaWdodCwgMCwgdGhpcy5tYXhIZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaXplKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbWF4aW11bSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB0aGlzIFNpemUgY29tcG9uZW50IHdpbGwgYWxsb3cuXHJcbiAgICAgKiBcclxuICAgICAqIFNldHRpbmcgdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IGJvdGggdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgdG8gZW5zdXJlIHRoZXkgYXJlIHdpdGhpbiByYW5nZS5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGJhc2VkIG9uIHRoZSBhc3BlY3QgbW9kZSwgYW5kIGlmIHRoaXMgU2l6ZSBjb21wb25lbnQgaGFzIGEgcGFyZW50IHNldCBvciBub3QsIHRoZSBtYXhpbXVtcyBzZXQgaGVyZVxyXG4gICAgICogX2Nhbl8gYmUgZXhjZWVkIGluIHNvbWUgc2l0dWF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjc2V0TWF4XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD1OdW1iZXIuTUFYX1ZBTFVFXSAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgd2lkdGggb2YgdGhlIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9d2lkdGhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCBoZWlnaHQgb2YgdGhlIFNpemUgY29tcG9uZW50LiBJZiBub3QgZ2l2ZW4sIGl0IHdpbGwgdXNlIHRoZSBgd2lkdGhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2l6ZSBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE1heDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBOdW1iZXIuTUFYX1ZBTFVFOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcblxyXG4gICAgICAgIHRoaXMubWF4V2lkdGggPSBDbGFtcCh3aWR0aCwgdGhpcy5taW5XaWR0aCwgTnVtYmVyLk1BWF9WQUxVRSk7XHJcbiAgICAgICAgdGhpcy5tYXhIZWlnaHQgPSBDbGFtcChoZWlnaHQsIHRoaXMubWluSGVpZ2h0LCBOdW1iZXIuTUFYX1ZBTFVFKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoaXMgU2l6ZSBjb21wb25lbnQgYmFzZWQgb24gdGhlIGFzcGVjdCBtb2RlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYXNwZWN0IG1vZGUgaXMgJ25vbmUnIHRoZW4gY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGNoYW5nZSB0aGUgYXNwZWN0IHJhdGlvLCBvdGhlcndpc2UgdGhlIGN1cnJlbnRcclxuICAgICAqIGFzcGVjdCByYXRpbyBpcyBob25vcmVkIGFjcm9zcyBhbGwgb3RoZXIgbW9kZXMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHNuYXBUbyB2YWx1ZXMgaGF2ZSBiZWVuIHNldCB0aGVuIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBzbmFwcGVkIGZpcnN0LCBwcmlvciB0byBhbnkgZnVydGhlclxyXG4gICAgICogYWRqdXN0bWVudCB2aWEgbWluL21heCB2YWx1ZXMsIG9yIGEgcGFyZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBtaW5pbXVtIGFuZC9vciBtYXhpbXVtIGRpbWVuc2lvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZCwgdGhlIHZhbHVlcyBnaXZlbiB0byB0aGlzIG1ldGhvZCB3aWxsIGJlIGNsYW1wZWQgaW50b1xyXG4gICAgICogdGhhdCByYW5nZSBwcmlvciB0byBhZGp1c3RtZW50LCBidXQgbWF5IHN0aWxsIGV4Y2VlZCB0aGVtIGRlcGVuZGluZyBvbiB0aGUgYXNwZWN0IG1vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgU2l6ZSBjb21wb25lbnQgaGFzIGEgcGFyZW50IHNldCwgYW5kIHRoZSBhc3BlY3QgbW9kZSBpcyBgZml0YCBvciBgZW52ZWxvcGAsIHRoZW4gdGhlIGdpdmVuIHNpemVzIHdpbGxcclxuICAgICAqIGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSB0aGUgcGFyZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0wXSAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9d2lkdGhdIC0gVGhlIG5ldyBoZWlnaHQgb2YgdGhlIFNpemUgY29tcG9uZW50LiBJZiBub3QgZ2l2ZW4sIGl0IHdpbGwgdXNlIHRoZSBgd2lkdGhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2l6ZSBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG4gICAgXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFzcGVjdE1vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYXNlIFNpemUuTk9ORTpcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy5nZXROZXdXaWR0aChTbmFwRmxvb3Iod2lkdGgsIHRoaXMuc25hcFRvLngpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuZ2V0TmV3SGVpZ2h0KFNuYXBGbG9vcihoZWlnaHQsIHRoaXMuc25hcFRvLnkpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNwZWN0UmF0aW8gPSAodGhpcy5faGVpZ2h0ID09PSAwKSA/IDEgOiB0aGlzLl93aWR0aCAvIHRoaXMuX2hlaWdodDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBTaXplLldJRFRIX0NPTlRST0xTX0hFSUdIVDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy5nZXROZXdXaWR0aChTbmFwRmxvb3Iod2lkdGgsIHRoaXMuc25hcFRvLngpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHRoaXMuZ2V0TmV3SGVpZ2h0KHRoaXMuX3dpZHRoICogKDEgLyB0aGlzLmFzcGVjdFJhdGlvKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNpemUuSEVJR0hUX0NPTlRST0xTX1dJRFRIOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5nZXROZXdIZWlnaHQoU25hcEZsb29yKGhlaWdodCwgdGhpcy5zbmFwVG8ueSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB0aGlzLmdldE5ld1dpZHRoKHRoaXMuX2hlaWdodCAqIHRoaXMuYXNwZWN0UmF0aW8sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBTaXplLkZJVDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWluKHdpZHRoLCBoZWlnaHQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNpemUuRU5WRUxPUDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWluKHdpZHRoLCBoZWlnaHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIG5ldyBhc3BlY3QgcmF0aW8sIG92ZXJyaWRpbmcgd2hhdCB3YXMgdGhlcmUgcHJldmlvdXNseS5cclxuICAgICAqIFxyXG4gICAgICogSXQgdGhlbiBjYWxscyBgc2V0U2l6ZWAgaW1tZWRpYXRlbHkgdXNpbmcgdGhlIGN1cnJlbnQgZGltZW5zaW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjc2V0QXNwZWN0UmF0aW9cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmF0aW8gLSBUaGUgbmV3IGFzcGVjdCByYXRpby5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNpemUgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRBc3BlY3RSYXRpbzogZnVuY3Rpb24gKHJhdGlvKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYXNwZWN0UmF0aW8gPSByYXRpbztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IHdpZHRoIGFuZCBoZWlnaHQgZm9yIHRoaXMgU2l6ZSBjb21wb25lbnQgYW5kIHVwZGF0ZXMgdGhlIGFzcGVjdCByYXRpbyBiYXNlZCBvbiB0aGVtLlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBfZG9lc24ndF8gY2hhbmdlIHRoZSBgYXNwZWN0TW9kZWAgYW5kIHN0aWxsIGZhY3RvcnMgaW4gc2l6ZSBsaW1pdHMgc3VjaCBhcyB0aGUgbWluIG1heCBhbmQgcGFyZW50IGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjcmVzaXplXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuIElmIG5vdCBnaXZlbiwgaXQgd2lsbCB1c2UgdGhlIGB3aWR0aGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaXplIGNvbXBvbmVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl93aWR0aCA9IHRoaXMuZ2V0TmV3V2lkdGgoU25hcEZsb29yKHdpZHRoLCB0aGlzLnNuYXBUby54KSk7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5nZXROZXdIZWlnaHQoU25hcEZsb29yKGhlaWdodCwgdGhpcy5zbmFwVG8ueSkpO1xyXG4gICAgICAgIHRoaXMuYXNwZWN0UmF0aW8gPSAodGhpcy5faGVpZ2h0ID09PSAwKSA/IDEgOiB0aGlzLl93aWR0aCAvIHRoaXMuX2hlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBuZXcgd2lkdGggYW5kIHBhc3NlcyBpdCB0aHJvdWdoIHRoZSBtaW4vbWF4IGNsYW1wIGFuZCB0aGVuIGNoZWNrcyBpdCBkb2Vzbid0IGV4Y2VlZCB0aGUgcGFyZW50IHdpZHRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSNnZXROZXdXaWR0aFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjbGFtcCBhbmQgY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja1BhcmVudD10cnVlXSAtIENoZWNrIHRoZSBnaXZlbiB2YWx1ZSBhZ2FpbnN0IHRoZSBwYXJlbnQsIGlmIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtb2RpZmllZCB3aWR0aCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TmV3V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSwgY2hlY2tQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNoZWNrUGFyZW50ID09PSB1bmRlZmluZWQpIHsgY2hlY2tQYXJlbnQgPSB0cnVlOyB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFsdWUgPSBDbGFtcCh2YWx1ZSwgdGhpcy5taW5XaWR0aCwgdGhpcy5tYXhXaWR0aCk7XHJcblxyXG4gICAgICAgIGlmIChjaGVja1BhcmVudCAmJiB0aGlzLl9wYXJlbnQgJiYgdmFsdWUgPiB0aGlzLl9wYXJlbnQud2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGgubWF4KHRoaXMubWluV2lkdGgsIHRoaXMuX3BhcmVudC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBuZXcgaGVpZ2h0IGFuZCBwYXNzZXMgaXQgdGhyb3VnaCB0aGUgbWluL21heCBjbGFtcCBhbmQgdGhlbiBjaGVja3MgaXQgZG9lc24ndCBleGNlZWQgdGhlIHBhcmVudCBoZWlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TaXplI2dldE5ld0hlaWdodFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjbGFtcCBhbmQgY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja1BhcmVudD10cnVlXSAtIENoZWNrIHRoZSBnaXZlbiB2YWx1ZSBhZ2FpbnN0IHRoZSBwYXJlbnQsIGlmIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtb2RpZmllZCBoZWlnaHQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGdldE5ld0hlaWdodDogZnVuY3Rpb24gKHZhbHVlLCBjaGVja1BhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoY2hlY2tQYXJlbnQgPT09IHVuZGVmaW5lZCkgeyBjaGVja1BhcmVudCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFsdWUgPSBDbGFtcCh2YWx1ZSwgdGhpcy5taW5IZWlnaHQsIHRoaXMubWF4SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGNoZWNrUGFyZW50ICYmIHRoaXMuX3BhcmVudCAmJiB2YWx1ZSA+IHRoaXMuX3BhcmVudC5oZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGgubWF4KHRoaXMubWluSGVpZ2h0LCB0aGlzLl9wYXJlbnQuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgYWRqdXN0ZWQgdG8gZml0IGluc2lkZSB0aGUgZ2l2ZW4gZGltZW5zaW9ucywgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBgZml0YCBpcyB0cnVlIHRoZXJlIG1heSBiZSBzb21lIHNwYWNlIGluc2lkZSB0aGUgdGFyZ2V0IGFyZWEgd2hpY2ggaXMgbm90IGNvdmVyZWQgaWYgaXRzIGFzcGVjdCByYXRpbyBkaWZmZXJzLlxyXG4gICAgICogSWYgYGZpdGAgaXMgZmFsc2UgdGhlIHNpemUgbWF5IGV4dGVuZCBmdXJ0aGVyIG91dCB0aGFuIHRoZSB0YXJnZXQgYXJlYSBpZiB0aGUgYXNwZWN0IHJhdGlvcyBkaWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgU2l6ZSBjb21wb25lbnQgaGFzIGEgcGFyZW50IHNldCwgdGhlbiB0aGUgd2lkdGggYW5kIGhlaWdodCBwYXNzZWQgdG8gdGhpcyBtZXRob2Qgd2lsbCBiZSBjbGFtcGVkIHNvXHJcbiAgICAgKiBpdCBjYW5ub3QgZXhjZWVkIHRoYXQgb2YgdGhlIHBhcmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjY29uc3RyYWluXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0wXSAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRdIC0gVGhlIG5ldyBoZWlnaHQgb2YgdGhlIFNpemUgY29tcG9uZW50LiBJZiBub3QgZ2l2ZW4sIGl0IHdpbGwgdXNlIHRoZSB3aWR0aCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpdD10cnVlXSAtIFBlcmZvcm0gYSBgZml0YCAodHJ1ZSkgY29uc3RyYWludCwgb3IgYW4gYGVudmVsb3BgIChmYWxzZSkgY29uc3RyYWludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNpemUgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJhaW46IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBmaXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcbiAgICAgICAgaWYgKGZpdCA9PT0gdW5kZWZpbmVkKSB7IGZpdCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgd2lkdGggPSB0aGlzLmdldE5ld1dpZHRoKHdpZHRoKTtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLmdldE5ld0hlaWdodChoZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgc25hcCA9IHRoaXMuc25hcFRvO1xyXG4gICAgICAgIHZhciBuZXdSYXRpbyA9IChoZWlnaHQgPT09IDApID8gMSA6IHdpZHRoIC8gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoKGZpdCAmJiB0aGlzLmFzcGVjdFJhdGlvID4gbmV3UmF0aW8pIHx8ICghZml0ICYmIHRoaXMuYXNwZWN0UmF0aW8gPCBuZXdSYXRpbykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIGhlaWdodCB0byBmaXQgdGhlIHdpZHRoXHJcblxyXG4gICAgICAgICAgICB3aWR0aCA9IFNuYXBGbG9vcih3aWR0aCwgc25hcC54KTtcclxuXHJcbiAgICAgICAgICAgIGhlaWdodCA9IHdpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbztcclxuXHJcbiAgICAgICAgICAgIGlmIChzbmFwLnkgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBTbmFwRmxvb3IoaGVpZ2h0LCBzbmFwLnkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBSZWR1Y2UgdGhlIHdpZHRoIGFjY29yZGluZ2x5XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAqIHRoaXMuYXNwZWN0UmF0aW87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKGZpdCAmJiB0aGlzLmFzcGVjdFJhdGlvIDwgbmV3UmF0aW8pIHx8ICghZml0ICYmIHRoaXMuYXNwZWN0UmF0aW8gPiBuZXdSYXRpbykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIHdpZHRoIHRvIGZpdCB0aGUgaGVpZ2h0XHJcblxyXG4gICAgICAgICAgICBoZWlnaHQgPSBTbmFwRmxvb3IoaGVpZ2h0LCBzbmFwLnkpO1xyXG5cclxuICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXAueCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gU25hcEZsb29yKHdpZHRoLCBzbmFwLngpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBSZWR1Y2UgdGhlIGhlaWdodCBhY2NvcmRpbmdseVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gd2lkdGggKiAoMSAvIHRoaXMuYXNwZWN0UmF0aW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIGFkanVzdGVkIHRvIGZpdCBpbnNpZGUgdGhlIGdpdmVuIGRpbWVuc2lvbnMsIHdoaWxlIGtlZXBpbmcgdGhlIGFzcGVjdCByYXRpby5cclxuICAgICAqIFxyXG4gICAgICogVGhlcmUgbWF5IGJlIHNvbWUgc3BhY2UgaW5zaWRlIHRoZSB0YXJnZXQgYXJlYSB3aGljaCBpcyBub3QgY292ZXJlZCBpZiBpdHMgYXNwZWN0IHJhdGlvIGRpZmZlcnMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgU2l6ZSBjb21wb25lbnQgaGFzIGEgcGFyZW50IHNldCwgdGhlbiB0aGUgd2lkdGggYW5kIGhlaWdodCBwYXNzZWQgdG8gdGhpcyBtZXRob2Qgd2lsbCBiZSBjbGFtcGVkIHNvXHJcbiAgICAgKiBpdCBjYW5ub3QgZXhjZWVkIHRoYXQgb2YgdGhlIHBhcmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjZml0VG9cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuIElmIG5vdCBnaXZlbiwgaXQgd2lsbCB1c2UgdGhlIHdpZHRoIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2l6ZSBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZpdFRvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW4od2lkdGgsIGhlaWdodCwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIGFkanVzdGVkIHNvIHRoYXQgdGhleSBmdWxseSBlbnZlbG9wZSB0aGUgZ2l2ZW4gZGltZW5zaW9ucywgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc2l6ZSBtYXkgZXh0ZW5kIGZ1cnRoZXIgb3V0IHRoYW4gdGhlIHRhcmdldCBhcmVhIGlmIHRoZSBhc3BlY3QgcmF0aW9zIGRpZmZlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhpcyBTaXplIGNvbXBvbmVudCBoYXMgYSBwYXJlbnQgc2V0LCB0aGVuIHRoZSB2YWx1ZXMgYXJlIGNsYW1wZWQgc28gdGhhdCBpdCBuZXZlciBleGNlZWRzIHRoZSBwYXJlbnRcclxuICAgICAqIG9uIHRoZSBsb25nZXN0IGF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TaXplI2VudmVsb3BcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuIElmIG5vdCBnaXZlbiwgaXQgd2lsbCB1c2UgdGhlIHdpZHRoIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2l6ZSBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGVudmVsb3A6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbih3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGggb2YgdGhpcyBTaXplIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogRGVwZW5kaW5nIG9uIHRoZSBhc3BlY3QgbW9kZSwgY2hhbmdpbmcgdGhlIHdpZHRoIG1heSBhbHNvIHVwZGF0ZSB0aGUgaGVpZ2h0IGFuZCBhc3BlY3QgcmF0aW8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TaXplI3NldFdpZHRoXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgU2l6ZSBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaXplIGNvbXBvbmVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaXplKHZhbHVlLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGlzIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIGFzcGVjdCBtb2RlLCBjaGFuZ2luZyB0aGUgaGVpZ2h0IG1heSBhbHNvIHVwZGF0ZSB0aGUgd2lkdGggYW5kIGFzcGVjdCByYXRpby5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjc2V0SGVpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBTaXplIGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNpemUgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRIZWlnaHQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTaXplKHRoaXMuX3dpZHRoLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFNpemUgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSN0b1N0cmluZ1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBTaXplIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICdbeyBTaXplICh3aWR0aD0nICsgdGhpcy5fd2lkdGggKyAnIGhlaWdodD0nICsgdGhpcy5faGVpZ2h0ICsgJyBhc3BlY3RSYXRpbz0nICsgdGhpcy5hc3BlY3RSYXRpbyArICcgYXNwZWN0TW9kZT0nICsgdGhpcy5hc3BlY3RNb2RlICsgJykgfV0nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGlzIFNpemUgY29tcG9uZW50IHRvIHRoZSBgZWxlbWVudC5zdHlsZS53aWR0aGAgYW5kIGBoZWlnaHRgXHJcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBET00gRWxlbWVudC4gVGhlIHByb3BlcnRpZXMgYXJlIHNldCBhcyBgcHhgIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5TdHJ1Y3RzLlNpemUjc2V0Q1NTXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gRWxlbWVudCB0byBzZXQgdGhlIENTUyBzdHlsZSBvbi5cclxuICAgICAqL1xyXG4gICAgc2V0Q1NTOiBmdW5jdGlvbiAoZWxlbWVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnN0eWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuX3dpZHRoICsgJ3B4JztcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLl9oZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIGFzcGVjdCBtb2RlLCBhc3BlY3QgcmF0aW8sIHdpZHRoIGFuZCBoZWlnaHQgZnJvbSB0aGlzIFNpemUgY29tcG9uZW50XHJcbiAgICAgKiB0byB0aGUgZ2l2ZW4gU2l6ZSBjb21wb25lbnQuIE5vdGUgdGhhdCB0aGUgcGFyZW50LCBpZiBzZXQsIGlzIG5vdCBjb3BpZWQgYWNyb3NzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlN0cnVjdHMuU2l6ZSNjb3B5XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX0gZGVzdGluYXRpb24gLSBUaGUgU2l6ZSBjb21wb25lbnQgdG8gY29weSB0aGUgdmFsdWVzIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5TdHJ1Y3RzLlNpemV9IFRoZSB1cGRhdGVkIGRlc3RpbmF0aW9uIFNpemUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoZGVzdGluYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgZGVzdGluYXRpb24uc2V0QXNwZWN0TW9kZSh0aGlzLmFzcGVjdE1vZGUpO1xyXG5cclxuICAgICAgICBkZXN0aW5hdGlvbi5hc3BlY3RSYXRpbyA9IHRoaXMuYXNwZWN0UmF0aW87XHJcblxyXG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbi5zZXRTaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGNsZWFycyB0aGUgbG9jYWwgcHJvcGVydGllcyBhbmQgYW55IHBhcmVudCBvYmplY3QsIGlmIHNldC5cclxuICAgICAqIFxyXG4gICAgICogQSBkZXN0cm95ZWQgU2l6ZSBjb21wb25lbnQgY2Fubm90IGJlIHJlLXVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuU3RydWN0cy5TaXplI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc25hcFRvID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhpcyBTaXplIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB2YWx1ZSBpcyBjbGFtcGVkIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgYG1pbldpZHRoYCBhbmQgYG1heFdpZHRoYCwgaWYgZW5hYmxlZC5cclxuICAgICAqIFxyXG4gICAgICogQSB3aWR0aCBjYW4gbmV2ZXIgYmUgbGVzcyB0aGFuIHplcm8uXHJcbiAgICAgKiBcclxuICAgICAqIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgYGhlaWdodGAgaWYgdGhlIGFzcGVjdCByYXRpbyBsb2NrIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBgc2V0V2lkdGhgIGFuZCBgZ2V0V2lkdGhgIG1ldGhvZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2l6ZSN3aWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplKHZhbHVlLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGlzIFNpemUgY29tcG9uZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNsYW1wZWQgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBgbWluSGVpZ2h0YCBhbmQgYG1heEhlaWdodGAsIGlmIGVuYWJsZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEEgaGVpZ2h0IGNhbiBuZXZlciBiZSBsZXNzIHRoYW4gemVyby5cclxuICAgICAqIFxyXG4gICAgICogQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBgd2lkdGhgIGlmIHRoZSBhc3BlY3QgcmF0aW8gbG9jayBpcyBlbmFibGVkLlxyXG4gICAgICogWW91IGNhbiBhbHNvIHVzZSB0aGUgYHNldEhlaWdodGAgYW5kIGBnZXRIZWlnaHRgIG1ldGhvZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlN0cnVjdHMuU2l6ZSNoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplKHRoaXMuX3dpZHRoLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIERvIG5vdCBtYWtlIHRoZSBzaXplIGZpdCB0aGUgYXNwZWN0IHJhdGlvLiBDaGFuZ2UgdGhlIHJhdGlvIHdoZW4gdGhlIHNpemUgY2hhbmdlcy5cclxuICogXHJcbiAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUuTk9ORVxyXG4gKiBAY29uc3RhbnRcclxuICogQHR5cGUge2ludGVnZXJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblNpemUuTk9ORSA9IDA7XHJcblxyXG4vKipcclxuICogVGhlIGhlaWdodCBpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGJhc2VkIG9uIHRoZSB3aWR0aC5cclxuICogXHJcbiAqIEBuYW1lIFBoYXNlci5TdHJ1Y3RzLlNpemUuV0lEVEhfQ09OVFJPTFNfSEVJR0hUXHJcbiAqIEBjb25zdGFudFxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKi9cclxuU2l6ZS5XSURUSF9DT05UUk9MU19IRUlHSFQgPSAxO1xyXG5cclxuLyoqXHJcbiAqIFRoZSB3aWR0aCBpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGJhc2VkIG9uIHRoZSBoZWlnaHQuXHJcbiAqIFxyXG4gKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplLkhFSUdIVF9DT05UUk9MU19XSURUSFxyXG4gKiBAY29uc3RhbnRcclxuICogQHR5cGUge2ludGVnZXJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblNpemUuSEVJR0hUX0NPTlRST0xTX1dJRFRIID0gMjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYXV0b21hdGljYWxseSBhZGp1c3RlZCB0byBmaXQgaW5zaWRlIHRoZSBnaXZlbiB0YXJnZXQgYXJlYSwgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLiBEZXBlbmRpbmcgb24gdGhlIGFzcGVjdCByYXRpbyB0aGVyZSBtYXkgYmUgc29tZSBzcGFjZSBpbnNpZGUgdGhlIGFyZWEgd2hpY2ggaXMgbm90IGNvdmVyZWQuXHJcbiAqIFxyXG4gKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplLkZJVFxyXG4gKiBAY29uc3RhbnRcclxuICogQHR5cGUge2ludGVnZXJ9XHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICovXHJcblNpemUuRklUID0gMztcclxuXHJcbi8qKlxyXG4gKiBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYXV0b21hdGljYWxseSBhZGp1c3RlZCB0byBtYWtlIHRoZSBzaXplIGNvdmVyIHRoZSBlbnRpcmUgdGFyZ2V0IGFyZWEgd2hpbGUga2VlcGluZyB0aGUgYXNwZWN0IHJhdGlvLiBUaGlzIG1heSBleHRlbmQgZnVydGhlciBvdXQgdGhhbiB0aGUgdGFyZ2V0IHNpemUuXHJcbiAqIFxyXG4gKiBAbmFtZSBQaGFzZXIuU3RydWN0cy5TaXplLkVOVkVMT1BcclxuICogQGNvbnN0YW50XHJcbiAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqL1xyXG5TaXplLkVOVkVMT1AgPSA0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaXplO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/Size.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/events/PROCESS_QUEUE_ADD_EVENT.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/structs/events/PROCESS_QUEUE_ADD_EVENT.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Process Queue Add Event.\r\n * \r\n * This event is dispatched by a Process Queue when a new item is successfully moved to its active list.\r\n * \r\n * You will most commonly see this used by a Scene's Update List when a new Game Object has been added.\r\n * \r\n * In that instance, listen to this event from within a Scene using: `this.sys.updateList.on('add', listener)`.\r\n *\r\n * @event Phaser.Structs.Events#PROCESS_QUEUE_ADD\r\n * @since 3.20.0\r\n * \r\n * @param {*} item - The item that was added to the Process Queue.\r\n */\r\nmodule.exports = 'add';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2V2ZW50cy9QUk9DRVNTX1FVRVVFX0FERF9FVkVOVC5qcz84N2YzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc3RydWN0cy9ldmVudHMvUFJPQ0VTU19RVUVVRV9BRERfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUHJvY2VzcyBRdWV1ZSBBZGQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBQcm9jZXNzIFF1ZXVlIHdoZW4gYSBuZXcgaXRlbSBpcyBzdWNjZXNzZnVsbHkgbW92ZWQgdG8gaXRzIGFjdGl2ZSBsaXN0LlxyXG4gKiBcclxuICogWW91IHdpbGwgbW9zdCBjb21tb25seSBzZWUgdGhpcyB1c2VkIGJ5IGEgU2NlbmUncyBVcGRhdGUgTGlzdCB3aGVuIGEgbmV3IEdhbWUgT2JqZWN0IGhhcyBiZWVuIGFkZGVkLlxyXG4gKiBcclxuICogSW4gdGhhdCBpbnN0YW5jZSwgbGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuc3lzLnVwZGF0ZUxpc3Qub24oJ2FkZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuU3RydWN0cy5FdmVudHMjUFJPQ0VTU19RVUVVRV9BRERcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsqfSBpdGVtIC0gVGhlIGl0ZW0gdGhhdCB3YXMgYWRkZWQgdG8gdGhlIFByb2Nlc3MgUXVldWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhZGQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/events/PROCESS_QUEUE_ADD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/events/PROCESS_QUEUE_REMOVE_EVENT.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/structs/events/PROCESS_QUEUE_REMOVE_EVENT.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Process Queue Remove Event.\r\n * \r\n * This event is dispatched by a Process Queue when a new item is successfully removed from its active list.\r\n * \r\n * You will most commonly see this used by a Scene's Update List when a Game Object has been removed.\r\n * \r\n * In that instance, listen to this event from within a Scene using: `this.sys.updateList.on('remove', listener)`.\r\n *\r\n * @event Phaser.Structs.Events#PROCESS_QUEUE_REMOVE\r\n * @since 3.20.0\r\n * \r\n * @param {*} item - The item that was removed from the Process Queue.\r\n */\r\nmodule.exports = 'remove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2V2ZW50cy9QUk9DRVNTX1FVRVVFX1JFTU9WRV9FVkVOVC5qcz80NmIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvc3RydWN0cy9ldmVudHMvUFJPQ0VTU19RVUVVRV9SRU1PVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUHJvY2VzcyBRdWV1ZSBSZW1vdmUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBQcm9jZXNzIFF1ZXVlIHdoZW4gYSBuZXcgaXRlbSBpcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIGl0cyBhY3RpdmUgbGlzdC5cclxuICogXHJcbiAqIFlvdSB3aWxsIG1vc3QgY29tbW9ubHkgc2VlIHRoaXMgdXNlZCBieSBhIFNjZW5lJ3MgVXBkYXRlIExpc3Qgd2hlbiBhIEdhbWUgT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuXHJcbiAqIFxyXG4gKiBJbiB0aGF0IGluc3RhbmNlLCBsaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5zeXMudXBkYXRlTGlzdC5vbigncmVtb3ZlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5TdHJ1Y3RzLkV2ZW50cyNQUk9DRVNTX1FVRVVFX1JFTU9WRVxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIFByb2Nlc3MgUXVldWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZW1vdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/events/PROCESS_QUEUE_REMOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/events/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/structs/events/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Structs.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    PROCESS_QUEUE_ADD: __webpack_require__(/*! ./PROCESS_QUEUE_ADD_EVENT */ \"./node_modules/phaser/src/structs/events/PROCESS_QUEUE_ADD_EVENT.js\"),\r\n    PROCESS_QUEUE_REMOVE: __webpack_require__(/*! ./PROCESS_QUEUE_REMOVE_EVENT */ \"./node_modules/phaser/src/structs/events/PROCESS_QUEUE_REMOVE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2V2ZW50cy9pbmRleC5qcz85NDcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsc0dBQTJCO0FBQzFELDBCQUEwQixtQkFBTyxDQUFDLDRHQUE4Qjs7QUFFaEUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlN0cnVjdHMuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgUFJPQ0VTU19RVUVVRV9BREQ6IHJlcXVpcmUoJy4vUFJPQ0VTU19RVUVVRV9BRERfRVZFTlQnKSxcclxuICAgIFBST0NFU1NfUVVFVUVfUkVNT1ZFOiByZXF1aXJlKCcuL1BST0NFU1NfUVVFVUVfUkVNT1ZFX0VWRU5UJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/structs/index.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/structs/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Structs\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    List: __webpack_require__(/*! ./List */ \"./node_modules/phaser/src/structs/List.js\"),\r\n    Map: __webpack_require__(/*! ./Map */ \"./node_modules/phaser/src/structs/Map.js\"),\r\n    ProcessQueue: __webpack_require__(/*! ./ProcessQueue */ \"./node_modules/phaser/src/structs/ProcessQueue.js\"),\r\n    RTree: __webpack_require__(/*! ./RTree */ \"./node_modules/phaser/src/structs/RTree.js\"),\r\n    Set: __webpack_require__(/*! ./Set */ \"./node_modules/phaser/src/structs/Set.js\"),\r\n    Size: __webpack_require__(/*! ./Size */ \"./node_modules/phaser/src/structs/Size.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2luZGV4LmpzPzM0ZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMseURBQVE7QUFDMUIsU0FBUyxtQkFBTyxDQUFDLHVEQUFPO0FBQ3hCLGtCQUFrQixtQkFBTyxDQUFDLHlFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsMkRBQVM7QUFDNUIsU0FBUyxtQkFBTyxDQUFDLHVEQUFPO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyx5REFBUTs7QUFFMUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9zdHJ1Y3RzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuU3RydWN0c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIExpc3Q6IHJlcXVpcmUoJy4vTGlzdCcpLFxyXG4gICAgTWFwOiByZXF1aXJlKCcuL01hcCcpLFxyXG4gICAgUHJvY2Vzc1F1ZXVlOiByZXF1aXJlKCcuL1Byb2Nlc3NRdWV1ZScpLFxyXG4gICAgUlRyZWU6IHJlcXVpcmUoJy4vUlRyZWUnKSxcclxuICAgIFNldDogcmVxdWlyZSgnLi9TZXQnKSxcclxuICAgIFNpemU6IHJlcXVpcmUoJy4vU2l6ZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/structs/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/CanvasTexture.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/textures/CanvasTexture.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Color = __webpack_require__(/*! ../display/color/Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar IsSizePowerOfTwo = __webpack_require__(/*! ../math/pow2/IsSizePowerOfTwo */ \"./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js\");\r\nvar Texture = __webpack_require__(/*! ./Texture */ \"./node_modules/phaser/src/textures/Texture.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Canvas Texture is a special kind of Texture that is backed by an HTML Canvas Element as its source.\r\n *\r\n * You can use the properties of this texture to draw to the canvas element directly, using all of the standard\r\n * canvas operations available in the browser. Any Game Object can be given this texture and will render with it.\r\n *\r\n * Note: When running under WebGL the Canvas Texture needs to re-generate its base WebGLTexture and reupload it to\r\n * the GPU every time you modify it, otherwise the changes you make to this texture will not be visible. To do this\r\n * you should call `CanvasTexture.refresh()` once you are finished with your changes to the canvas. Try and keep\r\n * this to a minimum, especially on large canvas sizes, or you may inadvertently thrash the GPU by constantly uploading\r\n * texture data to it. This restriction does not apply if using the Canvas Renderer.\r\n * \r\n * It starts with only one frame that covers the whole of the canvas. You can add further frames, that specify\r\n * sections of the canvas using the `add` method.\r\n * \r\n * Should you need to resize the canvas use the `setSize` method so that it accurately updates all of the underlying\r\n * texture data as well. Forgetting to do this (i.e. by changing the canvas size directly from your code) could cause\r\n * graphical errors.\r\n *\r\n * @class CanvasTexture\r\n * @extends Phaser.Textures.Texture\r\n * @memberof Phaser.Textures\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Textures.TextureManager} manager - A reference to the Texture Manager this Texture belongs to.\r\n * @param {string} key - The unique string-based key of this Texture.\r\n * @param {HTMLCanvasElement} source - The canvas element that is used as the base of this texture.\r\n * @param {integer} width - The width of the canvas.\r\n * @param {integer} height - The height of the canvas.\r\n */\r\nvar CanvasTexture = new Class({\r\n\r\n    Extends: Texture,\r\n\r\n    initialize:\r\n\r\n    function CanvasTexture (manager, key, source, width, height)\r\n    {\r\n        Texture.call(this, manager, key, source, width, height);\r\n\r\n        this.add('__BASE', 0, 0, 0, width, height);\r\n\r\n        /**\r\n         * A reference to the Texture Source of this Canvas.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#_source\r\n         * @type {Phaser.Textures.TextureSource}\r\n         * @private\r\n         * @since 3.7.0\r\n         */\r\n        this._source = this.frames['__BASE'].source;\r\n\r\n        /**\r\n         * The source Canvas Element.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#canvas\r\n         * @readonly\r\n         * @type {HTMLCanvasElement}\r\n         * @since 3.7.0\r\n         */\r\n        this.canvas = this._source.image;\r\n\r\n        /**\r\n         * The 2D Canvas Rendering Context.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#context\r\n         * @readonly\r\n         * @type {CanvasRenderingContext2D}\r\n         * @since 3.7.0\r\n         */\r\n        this.context = this.canvas.getContext('2d');\r\n\r\n        /**\r\n         * The width of the Canvas.\r\n         * This property is read-only, if you wish to change it use the `setSize` method.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#width\r\n         * @readonly\r\n         * @type {integer}\r\n         * @since 3.7.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the Canvas.\r\n         * This property is read-only, if you wish to change it use the `setSize` method.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#height\r\n         * @readonly\r\n         * @type {integer}\r\n         * @since 3.7.0\r\n         */\r\n        this.height = height;\r\n\r\n        /**\r\n         * The context image data.\r\n         * Use the `update` method to populate this when the canvas changes.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#imageData\r\n         * @type {ImageData}\r\n         * @since 3.13.0\r\n         */\r\n        this.imageData = this.context.getImageData(0, 0, width, height);\r\n\r\n        /**\r\n         * A Uint8ClampedArray view into the `buffer`.\r\n         * Use the `update` method to populate this when the canvas changes.\r\n         * Note that this is unavailable in some browsers, such as Epic Browser, due to their security restrictions.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#data\r\n         * @type {Uint8ClampedArray}\r\n         * @since 3.13.0\r\n         */\r\n        this.data = null;\r\n\r\n        if (this.imageData)\r\n        {\r\n            this.data = this.imageData.data;\r\n        }\r\n\r\n        /**\r\n         * An Uint32Array view into the `buffer`.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#pixels\r\n         * @type {Uint32Array}\r\n         * @since 3.13.0\r\n         */\r\n        this.pixels = null;\r\n\r\n        /**\r\n         * An ArrayBuffer the same size as the context ImageData.\r\n         *\r\n         * @name Phaser.Textures.CanvasTexture#buffer\r\n         * @type {ArrayBuffer}\r\n         * @since 3.13.0\r\n         */\r\n        this.buffer;\r\n\r\n        if (this.data)\r\n        {\r\n            if (this.imageData.data.buffer)\r\n            {\r\n                this.buffer = this.imageData.data.buffer;\r\n                this.pixels = new Uint32Array(this.buffer);\r\n            }\r\n            else if (window.ArrayBuffer)\r\n            {\r\n                this.buffer = new ArrayBuffer(this.imageData.data.length);\r\n                this.pixels = new Uint32Array(this.buffer);\r\n            }\r\n            else\r\n            {\r\n                this.pixels = this.imageData.data;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * This re-creates the `imageData` from the current context.\r\n     * It then re-builds the ArrayBuffer, the `data` Uint8ClampedArray reference and the `pixels` Int32Array.\r\n     *\r\n     * Warning: This is a very expensive operation, so use it sparingly.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#update\r\n     * @since 3.13.0\r\n     *\r\n     * @return {Phaser.Textures.CanvasTexture} This CanvasTexture.\r\n     */\r\n    update: function ()\r\n    {\r\n        this.imageData = this.context.getImageData(0, 0, this.width, this.height);\r\n\r\n        this.data = this.imageData.data;\r\n\r\n        if (this.imageData.data.buffer)\r\n        {\r\n            this.buffer = this.imageData.data.buffer;\r\n            this.pixels = new Uint32Array(this.buffer);\r\n        }\r\n        else if (window.ArrayBuffer)\r\n        {\r\n            this.buffer = new ArrayBuffer(this.imageData.data.length);\r\n            this.pixels = new Uint32Array(this.buffer);\r\n        }\r\n        else\r\n        {\r\n            this.pixels = this.imageData.data;\r\n        }\r\n\r\n        if (this.manager.game.config.renderType === CONST.WEBGL)\r\n        {\r\n            this.refresh();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draws the given Image or Canvas element to this CanvasTexture, then updates the internal\r\n     * ImageData buffer and arrays.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#draw\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} x - The x coordinate to draw the source at.\r\n     * @param {integer} y - The y coordinate to draw the source at.\r\n     * @param {(HTMLImageElement|HTMLCanvasElement)} source - The element to draw to this canvas.\r\n     * \r\n     * @return {Phaser.Textures.CanvasTexture} This CanvasTexture.\r\n     */\r\n    draw: function (x, y, source)\r\n    {\r\n        this.context.drawImage(source, x, y);\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * Draws the given texture frame to this CanvasTexture, then updates the internal\r\n     * ImageData buffer and arrays.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#drawFrame\r\n     * @since 3.16.0\r\n     * \r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string-based name, or integer based index, of the Frame to get from the Texture.\r\n     * @param {integer} [x=0] - The x coordinate to draw the source at.\r\n     * @param {integer} [y=0] - The y coordinate to draw the source at.\r\n     * \r\n     * @return {Phaser.Textures.CanvasTexture} This CanvasTexture.\r\n     */\r\n    drawFrame: function (key, frame, x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        var textureFrame = this.manager.getFrame(key, frame);\r\n\r\n        if (textureFrame)\r\n        {\r\n            var cd = textureFrame.canvasData;\r\n\r\n            var width = textureFrame.cutWidth;\r\n            var height = textureFrame.cutHeight;\r\n            var res = textureFrame.source.resolution;\r\n\r\n            this.context.drawImage(\r\n                textureFrame.source.image,\r\n                cd.x, cd.y,\r\n                width,\r\n                height,\r\n                x, y,\r\n                width / res,\r\n                height / res\r\n            );\r\n\r\n            return this.update();\r\n        }\r\n        else\r\n        {\r\n            return this;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets a pixel in the CanvasTexture to the given color and alpha values.\r\n     *\r\n     * This is an expensive operation to run in large quantities, so use sparingly.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#setPixel\r\n     * @since 3.16.0\r\n     * \r\n     * @param {integer} x - The x coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} y - The y coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} red - The red color value. A number between 0 and 255.\r\n     * @param {integer} green - The green color value. A number between 0 and 255.\r\n     * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n     * @param {integer} [alpha=255] - The alpha value. A number between 0 and 255.\r\n     * \r\n     * @return {this} This CanvasTexture.\r\n     */\r\n    setPixel: function (x, y, red, green, blue, alpha)\r\n    {\r\n        if (alpha === undefined) { alpha = 255; }\r\n\r\n        x = Math.abs(Math.floor(x));\r\n        y = Math.abs(Math.floor(y));\r\n\r\n        var index = this.getIndex(x, y);\r\n\r\n        if (index > -1)\r\n        {\r\n            var imageData = this.context.getImageData(x, y, 1, 1);\r\n\r\n            imageData.data[0] = red;\r\n            imageData.data[1] = green;\r\n            imageData.data[2] = blue;\r\n            imageData.data[3] = alpha;\r\n\r\n            this.context.putImageData(imageData, x, y);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Puts the ImageData into the context of this CanvasTexture at the given coordinates.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#putData\r\n     * @since 3.16.0\r\n     * \r\n     * @param {ImageData} imageData - The ImageData to put at the given location.\r\n     * @param {integer} x - The x coordinate to put the imageData. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} y - The y coordinate to put the imageData. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} [dirtyX=0] - Horizontal position (x coordinate) of the top-left corner from which the image data will be extracted.\r\n     * @param {integer} [dirtyY=0] - Vertical position (x coordinate) of the top-left corner from which the image data will be extracted.\r\n     * @param {integer} [dirtyWidth] - Width of the rectangle to be painted. Defaults to the width of the image data.\r\n     * @param {integer} [dirtyHeight] - Height of the rectangle to be painted. Defaults to the height of the image data.\r\n     * \r\n     * @return {this} This CanvasTexture.\r\n     */\r\n    putData: function (imageData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight)\r\n    {\r\n        if (dirtyX === undefined) { dirtyX = 0; }\r\n        if (dirtyY === undefined) { dirtyY = 0; }\r\n        if (dirtyWidth === undefined) { dirtyWidth = imageData.width; }\r\n        if (dirtyHeight === undefined) { dirtyHeight = imageData.height; }\r\n\r\n        this.context.putImageData(imageData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets an ImageData region from this CanvasTexture from the position and size specified.\r\n     * You can write this back using `CanvasTexture.putData`, or manipulate it.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getData\r\n     * @since 3.16.0\r\n     * \r\n     * @param {integer} x - The x coordinate of the top-left of the area to get the ImageData from. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} y - The y coordinate of the top-left of the area to get the ImageData from. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} width - The width of the rectangle from which the ImageData will be extracted. Positive values are to the right, and negative to the left.\r\n     * @param {integer} height - The height of the rectangle from which the ImageData will be extracted. Positive values are down, and negative are up.\r\n     * \r\n     * @return {ImageData} The ImageData extracted from this CanvasTexture.\r\n     */\r\n    getData: function (x, y, width, height)\r\n    {\r\n        x = Clamp(Math.floor(x), 0, this.width - 1);\r\n        y = Clamp(Math.floor(y), 0, this.height - 1);\r\n        width = Clamp(width, 1, this.width - x);\r\n        height = Clamp(height, 1, this.height - y);\r\n\r\n        var imageData = this.context.getImageData(x, y, width, height);\r\n\r\n        return imageData;\r\n    },\r\n\r\n    /**\r\n     * Get the color of a specific pixel from this texture and store it in a Color object.\r\n     * \r\n     * If you have drawn anything to this CanvasTexture since it was created you must call `CanvasTexture.update` to refresh the array buffer,\r\n     * otherwise this may return out of date color values, or worse - throw a run-time error as it tries to access an array element that doesn't exist.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getPixel\r\n     * @since 3.13.0\r\n     * \r\n     * @param {integer} x - The x coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} y - The y coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {Phaser.Display.Color} [out] - A Color object to store the pixel values in. If not provided a new Color object will be created.\r\n     * \r\n     * @return {Phaser.Display.Color} An object with the red, green, blue and alpha values set in the r, g, b and a properties.\r\n     */\r\n    getPixel: function (x, y, out)\r\n    {\r\n        if (!out)\r\n        {\r\n            out = new Color();\r\n        }\r\n\r\n        var index = this.getIndex(x, y);\r\n\r\n        if (index > -1)\r\n        {\r\n            var data = this.data;\r\n\r\n            var r = data[index + 0];\r\n            var g = data[index + 1];\r\n            var b = data[index + 2];\r\n            var a = data[index + 3];\r\n\r\n            out.setTo(r, g, b, a);\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Returns an array containing all of the pixels in the given region.\r\n     *\r\n     * If the requested region extends outside the bounds of this CanvasTexture,\r\n     * the region is truncated to fit.\r\n     * \r\n     * If you have drawn anything to this CanvasTexture since it was created you must call `CanvasTexture.update` to refresh the array buffer,\r\n     * otherwise this may return out of date color values, or worse - throw a run-time error as it tries to access an array element that doesn't exist.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getPixels\r\n     * @since 3.16.0\r\n     * \r\n     * @param {integer} [x=0] - The x coordinate of the top-left of the region. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} [y=0] - The y coordinate of the top-left of the region. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} [width] - The width of the region to get. Must be an integer. Defaults to the canvas width if not given.\r\n     * @param {integer} [height] - The height of the region to get. Must be an integer. If not given will be set to the `width`.\r\n     * \r\n     * @return {Phaser.Types.Textures.PixelConfig[]} An array of Pixel objects.\r\n     */\r\n    getPixels: function (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.width; }\r\n        if (height === undefined) { height = width; }\r\n\r\n        x = Math.abs(Math.round(x));\r\n        y = Math.abs(Math.round(y));\r\n\r\n        var left = Clamp(x, 0, this.width);\r\n        var right = Clamp(x + width, 0, this.width);\r\n        var top = Clamp(y, 0, this.height);\r\n        var bottom = Clamp(y + height, 0, this.height);\r\n\r\n        var pixel = new Color();\r\n\r\n        var out = [];\r\n\r\n        for (var py = top; py < bottom; py++)\r\n        {\r\n            var row = [];\r\n\r\n            for (var px = left; px < right; px++)\r\n            {\r\n                pixel = this.getPixel(px, py, pixel);\r\n\r\n                row.push({ x: px, y: py, color: pixel.color, alpha: pixel.alphaGL });\r\n            }\r\n\r\n            out.push(row);\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Returns the Image Data index for the given pixel in this CanvasTexture.\r\n     *\r\n     * The index can be used to read directly from the `this.data` array.\r\n     *\r\n     * The index points to the red value in the array. The subsequent 3 indexes\r\n     * point to green, blue and alpha respectively.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getIndex\r\n     * @since 3.16.0\r\n     * \r\n     * @param {integer} x - The x coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * @param {integer} y - The y coordinate of the pixel to get. Must lay within the dimensions of this CanvasTexture and be an integer.\r\n     * \r\n     * @return {integer} \r\n     */\r\n    getIndex: function (x, y)\r\n    {\r\n        x = Math.abs(Math.round(x));\r\n        y = Math.abs(Math.round(y));\r\n\r\n        if (x < this.width && y < this.height)\r\n        {\r\n            return (x + y * this.width) * 4;\r\n        }\r\n        else\r\n        {\r\n            return -1;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * This should be called manually if you are running under WebGL.\r\n     * It will refresh the WebGLTexture from the Canvas source. Only call this if you know that the\r\n     * canvas has changed, as there is a significant GPU texture allocation cost involved in doing so.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#refresh\r\n     * @since 3.7.0\r\n     *\r\n     * @return {Phaser.Textures.CanvasTexture} This CanvasTexture.\r\n     */\r\n    refresh: function ()\r\n    {\r\n        this._source.update();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the Canvas Element.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getCanvas\r\n     * @since 3.7.0\r\n     *\r\n     * @return {HTMLCanvasElement} The Canvas DOM element this texture is using.\r\n     */\r\n    getCanvas: function ()\r\n    {\r\n        return this.canvas;\r\n    },\r\n\r\n    /**\r\n     * Gets the 2D Canvas Rendering Context.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#getContext\r\n     * @since 3.7.0\r\n     *\r\n     * @return {CanvasRenderingContext2D} The Canvas Rendering Context this texture is using.\r\n     */\r\n    getContext: function ()\r\n    {\r\n        return this.context;\r\n    },\r\n\r\n    /**\r\n     * Clears the given region of this Canvas Texture, resetting it back to transparent.\r\n     * If no region is given, the whole Canvas Texture is cleared.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#clear\r\n     * @since 3.7.0\r\n     * \r\n     * @param {integer} [x=0] - The x coordinate of the top-left of the region to clear.\r\n     * @param {integer} [y=0] - The y coordinate of the top-left of the region to clear.\r\n     * @param {integer} [width] - The width of the region.\r\n     * @param {integer} [height] - The height of the region.\r\n     *\r\n     * @return {Phaser.Textures.CanvasTexture} The Canvas Texture.\r\n     */\r\n    clear: function (x, y, width, height)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.width; }\r\n        if (height === undefined) { height = this.height; }\r\n\r\n        this.context.clearRect(x, y, width, height);\r\n\r\n        return this.update();\r\n    },\r\n\r\n    /**\r\n     * Changes the size of this Canvas Texture.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#setSize\r\n     * @since 3.7.0\r\n     *\r\n     * @param {integer} width - The new width of the Canvas.\r\n     * @param {integer} [height] - The new height of the Canvas. If not given it will use the width as the height.\r\n     *\r\n     * @return {Phaser.Textures.CanvasTexture} The Canvas Texture.\r\n     */\r\n    setSize: function (width, height)\r\n    {\r\n        if (height === undefined) { height = width; }\r\n\r\n        if (width !== this.width || height !== this.height)\r\n        {\r\n            //  Update the Canvas\r\n            this.canvas.width = width;\r\n            this.canvas.height = height;\r\n\r\n            //  Update the Texture Source\r\n            this._source.width = width;\r\n            this._source.height = height;\r\n            this._source.isPowerOf2 = IsSizePowerOfTwo(width, height);\r\n\r\n            //  Update the Frame\r\n            this.frames['__BASE'].setSize(width, height, 0, 0);\r\n\r\n            this.refresh();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Texture and releases references to its sources and frames.\r\n     *\r\n     * @method Phaser.Textures.CanvasTexture#destroy\r\n     * @since 3.16.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        Texture.prototype.destroy.call(this);\r\n\r\n        this._source = null;\r\n        this.canvas = null;\r\n        this.context = null;\r\n        this.imageData = null;\r\n        this.data = null;\r\n        this.pixels = null;\r\n        this.buffer = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = CanvasTexture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9DYW52YXNUZXh0dXJlLmpzPzVhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDhEQUFlO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxnRkFBd0I7QUFDNUMsWUFBWSxtQkFBTyxDQUFDLG9EQUFVO0FBQzlCLHVCQUF1QixtQkFBTyxDQUFDLDhGQUErQjtBQUM5RCxjQUFjLG1CQUFPLENBQUMsZ0VBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUscUNBQXFDO0FBQ3BEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGFBQWE7O0FBRS9DO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxZQUFZO0FBQy9DLG1DQUFtQyxZQUFZO0FBQy9DLHVDQUF1Qyw4QkFBOEI7QUFDckUsd0NBQXdDLGdDQUFnQzs7QUFFeEU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxvQkFBb0I7QUFDdEQsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwwQkFBMEIsYUFBYTtBQUN2QztBQUNBOztBQUVBLCtCQUErQixZQUFZO0FBQzNDO0FBQ0E7O0FBRUEsMEJBQTBCLHlEQUF5RDtBQUNuRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0Msb0JBQW9CO0FBQ3RELG1DQUFtQyxzQkFBc0I7O0FBRXpEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL0NhbnZhc1RleHR1cmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4uL21hdGgvQ2xhbXAnKTtcclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jb2xvci9Db2xvcicpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgSXNTaXplUG93ZXJPZlR3byA9IHJlcXVpcmUoJy4uL21hdGgvcG93Mi9Jc1NpemVQb3dlck9mVHdvJyk7XHJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbnZhcyBUZXh0dXJlIGlzIGEgc3BlY2lhbCBraW5kIG9mIFRleHR1cmUgdGhhdCBpcyBiYWNrZWQgYnkgYW4gSFRNTCBDYW52YXMgRWxlbWVudCBhcyBpdHMgc291cmNlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHRleHR1cmUgdG8gZHJhdyB0byB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHksIHVzaW5nIGFsbCBvZiB0aGUgc3RhbmRhcmRcclxuICogY2FudmFzIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyLiBBbnkgR2FtZSBPYmplY3QgY2FuIGJlIGdpdmVuIHRoaXMgdGV4dHVyZSBhbmQgd2lsbCByZW5kZXIgd2l0aCBpdC5cclxuICpcclxuICogTm90ZTogV2hlbiBydW5uaW5nIHVuZGVyIFdlYkdMIHRoZSBDYW52YXMgVGV4dHVyZSBuZWVkcyB0byByZS1nZW5lcmF0ZSBpdHMgYmFzZSBXZWJHTFRleHR1cmUgYW5kIHJldXBsb2FkIGl0IHRvXHJcbiAqIHRoZSBHUFUgZXZlcnkgdGltZSB5b3UgbW9kaWZ5IGl0LCBvdGhlcndpc2UgdGhlIGNoYW5nZXMgeW91IG1ha2UgdG8gdGhpcyB0ZXh0dXJlIHdpbGwgbm90IGJlIHZpc2libGUuIFRvIGRvIHRoaXNcclxuICogeW91IHNob3VsZCBjYWxsIGBDYW52YXNUZXh0dXJlLnJlZnJlc2goKWAgb25jZSB5b3UgYXJlIGZpbmlzaGVkIHdpdGggeW91ciBjaGFuZ2VzIHRvIHRoZSBjYW52YXMuIFRyeSBhbmQga2VlcFxyXG4gKiB0aGlzIHRvIGEgbWluaW11bSwgZXNwZWNpYWxseSBvbiBsYXJnZSBjYW52YXMgc2l6ZXMsIG9yIHlvdSBtYXkgaW5hZHZlcnRlbnRseSB0aHJhc2ggdGhlIEdQVSBieSBjb25zdGFudGx5IHVwbG9hZGluZ1xyXG4gKiB0ZXh0dXJlIGRhdGEgdG8gaXQuIFRoaXMgcmVzdHJpY3Rpb24gZG9lcyBub3QgYXBwbHkgaWYgdXNpbmcgdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICogXHJcbiAqIEl0IHN0YXJ0cyB3aXRoIG9ubHkgb25lIGZyYW1lIHRoYXQgY292ZXJzIHRoZSB3aG9sZSBvZiB0aGUgY2FudmFzLiBZb3UgY2FuIGFkZCBmdXJ0aGVyIGZyYW1lcywgdGhhdCBzcGVjaWZ5XHJcbiAqIHNlY3Rpb25zIG9mIHRoZSBjYW52YXMgdXNpbmcgdGhlIGBhZGRgIG1ldGhvZC5cclxuICogXHJcbiAqIFNob3VsZCB5b3UgbmVlZCB0byByZXNpemUgdGhlIGNhbnZhcyB1c2UgdGhlIGBzZXRTaXplYCBtZXRob2Qgc28gdGhhdCBpdCBhY2N1cmF0ZWx5IHVwZGF0ZXMgYWxsIG9mIHRoZSB1bmRlcmx5aW5nXHJcbiAqIHRleHR1cmUgZGF0YSBhcyB3ZWxsLiBGb3JnZXR0aW5nIHRvIGRvIHRoaXMgKGkuZS4gYnkgY2hhbmdpbmcgdGhlIGNhbnZhcyBzaXplIGRpcmVjdGx5IGZyb20geW91ciBjb2RlKSBjb3VsZCBjYXVzZVxyXG4gKiBncmFwaGljYWwgZXJyb3JzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ2FudmFzVGV4dHVyZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9IG1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyIHRoaXMgVGV4dHVyZSBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoaXMgVGV4dHVyZS5cclxuICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gc291cmNlIC0gVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgaXMgdXNlZCBhcyB0aGUgYmFzZSBvZiB0aGlzIHRleHR1cmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMuXHJcbiAqL1xyXG52YXIgQ2FudmFzVGV4dHVyZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogVGV4dHVyZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENhbnZhc1RleHR1cmUgKG1hbmFnZXIsIGtleSwgc291cmNlLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIFRleHR1cmUuY2FsbCh0aGlzLCBtYW5hZ2VyLCBrZXksIHNvdXJjZSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkKCdfX0JBU0UnLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmUgU291cmNlIG9mIHRoaXMgQ2FudmFzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjX3NvdXJjZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuZnJhbWVzWydfX0JBU0UnXS5zb3VyY2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzb3VyY2UgQ2FudmFzIEVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNjYW52YXNcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSB0aGlzLl9zb3VyY2UuaW1hZ2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSAyRCBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNjb250ZXh0XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHR5cGUge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHJlYWQtb25seSwgaWYgeW91IHdpc2ggdG8gY2hhbmdlIGl0IHVzZSB0aGUgYHNldFNpemVgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI3dpZHRoXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDYW52YXMuXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZWFkLW9ubHksIGlmIHlvdSB3aXNoIHRvIGNoYW5nZSBpdCB1c2UgdGhlIGBzZXRTaXplYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNoZWlnaHRcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbnRleHQgaW1hZ2UgZGF0YS5cclxuICAgICAgICAgKiBVc2UgdGhlIGB1cGRhdGVgIG1ldGhvZCB0byBwb3B1bGF0ZSB0aGlzIHdoZW4gdGhlIGNhbnZhcyBjaGFuZ2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjaW1hZ2VEYXRhXHJcbiAgICAgICAgICogQHR5cGUge0ltYWdlRGF0YX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbWFnZURhdGEgPSB0aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFVpbnQ4Q2xhbXBlZEFycmF5IHZpZXcgaW50byB0aGUgYGJ1ZmZlcmAuXHJcbiAgICAgICAgICogVXNlIHRoZSBgdXBkYXRlYCBtZXRob2QgdG8gcG9wdWxhdGUgdGhpcyB3aGVuIHRoZSBjYW52YXMgY2hhbmdlcy5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyB1bmF2YWlsYWJsZSBpbiBzb21lIGJyb3dzZXJzLCBzdWNoIGFzIEVwaWMgQnJvd3NlciwgZHVlIHRvIHRoZWlyIHNlY3VyaXR5IHJlc3RyaWN0aW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7VWludDhDbGFtcGVkQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmltYWdlRGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuaW1hZ2VEYXRhLmRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBVaW50MzJBcnJheSB2aWV3IGludG8gdGhlIGBidWZmZXJgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjcGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQzMkFycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpeGVscyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIEFycmF5QnVmZmVyIHRoZSBzYW1lIHNpemUgYXMgdGhlIGNvbnRleHQgSW1hZ2VEYXRhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjYnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5QnVmZmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1ZmZlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRGF0YS5kYXRhLmJ1ZmZlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmltYWdlRGF0YS5kYXRhLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIHRoaXMucGl4ZWxzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh3aW5kb3cuQXJyYXlCdWZmZXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuaW1hZ2VEYXRhLmRhdGEubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGl4ZWxzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGl4ZWxzID0gdGhpcy5pbWFnZURhdGEuZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHJlLWNyZWF0ZXMgdGhlIGBpbWFnZURhdGFgIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dC5cclxuICAgICAqIEl0IHRoZW4gcmUtYnVpbGRzIHRoZSBBcnJheUJ1ZmZlciwgdGhlIGBkYXRhYCBVaW50OENsYW1wZWRBcnJheSByZWZlcmVuY2UgYW5kIHRoZSBgcGl4ZWxzYCBJbnQzMkFycmF5LlxyXG4gICAgICpcclxuICAgICAqIFdhcm5pbmc6IFRoaXMgaXMgYSB2ZXJ5IGV4cGVuc2l2ZSBvcGVyYXRpb24sIHNvIHVzZSBpdCBzcGFyaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZX0gVGhpcyBDYW52YXNUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pbWFnZURhdGEgPSB0aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5pbWFnZURhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VEYXRhLmRhdGEuYnVmZmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmltYWdlRGF0YS5kYXRhLmJ1ZmZlcjtcclxuICAgICAgICAgICAgdGhpcy5waXhlbHMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5idWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuQXJyYXlCdWZmZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLmltYWdlRGF0YS5kYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5waXhlbHMgPSB0aGlzLmltYWdlRGF0YS5kYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5nYW1lLmNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5XRUJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIGdpdmVuIEltYWdlIG9yIENhbnZhcyBlbGVtZW50IHRvIHRoaXMgQ2FudmFzVGV4dHVyZSwgdGhlbiB1cGRhdGVzIHRoZSBpbnRlcm5hbFxyXG4gICAgICogSW1hZ2VEYXRhIGJ1ZmZlciBhbmQgYXJyYXlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjZHJhd1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGRyYXcgdGhlIHNvdXJjZSBhdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZHJhdyB0aGUgc291cmNlIGF0LlxyXG4gICAgICogQHBhcmFtIHsoSFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudCl9IHNvdXJjZSAtIFRoZSBlbGVtZW50IHRvIGRyYXcgdG8gdGhpcyBjYW52YXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBUaGlzIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIGRyYXc6IGZ1bmN0aW9uICh4LCB5LCBzb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmRyYXdJbWFnZShzb3VyY2UsIHgsIHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGUgZ2l2ZW4gdGV4dHVyZSBmcmFtZSB0byB0aGlzIENhbnZhc1RleHR1cmUsIHRoZW4gdXBkYXRlcyB0aGUgaW50ZXJuYWxcclxuICAgICAqIEltYWdlRGF0YSBidWZmZXIgYW5kIGFycmF5cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI2RyYXdGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIHN0cmluZy1iYXNlZCBuYW1lLCBvciBpbnRlZ2VyIGJhc2VkIGluZGV4LCBvZiB0aGUgRnJhbWUgdG8gZ2V0IGZyb20gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt4PTBdIC0gVGhlIHggY29vcmRpbmF0ZSB0byBkcmF3IHRoZSBzb3VyY2UgYXQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt5PTBdIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBkcmF3IHRoZSBzb3VyY2UgYXQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBUaGlzIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIGRyYXdGcmFtZTogZnVuY3Rpb24gKGtleSwgZnJhbWUsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMubWFuYWdlci5nZXRGcmFtZShrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHR1cmVGcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjZCA9IHRleHR1cmVGcmFtZS5jYW52YXNEYXRhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGV4dHVyZUZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGV4dHVyZUZyYW1lLmN1dEhlaWdodDtcclxuICAgICAgICAgICAgdmFyIHJlcyA9IHRleHR1cmVGcmFtZS5zb3VyY2UucmVzb2x1dGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlRnJhbWUuc291cmNlLmltYWdlLFxyXG4gICAgICAgICAgICAgICAgY2QueCwgY2QueSxcclxuICAgICAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgeCwgeSxcclxuICAgICAgICAgICAgICAgIHdpZHRoIC8gcmVzLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0IC8gcmVzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBwaXhlbCBpbiB0aGUgQ2FudmFzVGV4dHVyZSB0byB0aGUgZ2l2ZW4gY29sb3IgYW5kIGFscGhhIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gdG8gcnVuIGluIGxhcmdlIHF1YW50aXRpZXMsIHNvIHVzZSBzcGFyaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNzZXRQaXhlbFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byBnZXQuIE11c3QgbGF5IHdpdGhpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGlzIENhbnZhc1RleHR1cmUgYW5kIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byBnZXQuIE11c3QgbGF5IHdpdGhpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGlzIENhbnZhc1RleHR1cmUgYW5kIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthbHBoYT0yNTVdIC0gVGhlIGFscGhhIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW52YXNUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICBzZXRQaXhlbDogZnVuY3Rpb24gKHgsIHksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMjU1OyB9XHJcblxyXG4gICAgICAgIHggPSBNYXRoLmFicyhNYXRoLmZsb29yKHgpKTtcclxuICAgICAgICB5ID0gTWF0aC5hYnMoTWF0aC5mbG9vcih5KSk7XHJcblxyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGltYWdlRGF0YSA9IHRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgeSwgMSwgMSk7XHJcblxyXG4gICAgICAgICAgICBpbWFnZURhdGEuZGF0YVswXSA9IHJlZDtcclxuICAgICAgICAgICAgaW1hZ2VEYXRhLmRhdGFbMV0gPSBncmVlbjtcclxuICAgICAgICAgICAgaW1hZ2VEYXRhLmRhdGFbMl0gPSBibHVlO1xyXG4gICAgICAgICAgICBpbWFnZURhdGEuZGF0YVszXSA9IGFscGhhO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIHgsIHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyB0aGUgSW1hZ2VEYXRhIGludG8gdGhlIGNvbnRleHQgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI3B1dERhdGFcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbWFnZURhdGF9IGltYWdlRGF0YSAtIFRoZSBJbWFnZURhdGEgdG8gcHV0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gcHV0IHRoZSBpbWFnZURhdGEuIE11c3QgbGF5IHdpdGhpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGlzIENhbnZhc1RleHR1cmUgYW5kIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIHB1dCB0aGUgaW1hZ2VEYXRhLiBNdXN0IGxheSB3aXRoaW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGFuZCBiZSBhbiBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlydHlYPTBdIC0gSG9yaXpvbnRhbCBwb3NpdGlvbiAoeCBjb29yZGluYXRlKSBvZiB0aGUgdG9wLWxlZnQgY29ybmVyIGZyb20gd2hpY2ggdGhlIGltYWdlIGRhdGEgd2lsbCBiZSBleHRyYWN0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJ0eVk9MF0gLSBWZXJ0aWNhbCBwb3NpdGlvbiAoeCBjb29yZGluYXRlKSBvZiB0aGUgdG9wLWxlZnQgY29ybmVyIGZyb20gd2hpY2ggdGhlIGltYWdlIGRhdGEgd2lsbCBiZSBleHRyYWN0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJ0eVdpZHRoXSAtIFdpZHRoIG9mIHRoZSByZWN0YW5nbGUgdG8gYmUgcGFpbnRlZC4gRGVmYXVsdHMgdG8gdGhlIHdpZHRoIG9mIHRoZSBpbWFnZSBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlydHlIZWlnaHRdIC0gSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUgdG8gYmUgcGFpbnRlZC4gRGVmYXVsdHMgdG8gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW52YXNUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICBwdXREYXRhOiBmdW5jdGlvbiAoaW1hZ2VEYXRhLCB4LCB5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpcnR5WCA9PT0gdW5kZWZpbmVkKSB7IGRpcnR5WCA9IDA7IH1cclxuICAgICAgICBpZiAoZGlydHlZID09PSB1bmRlZmluZWQpIHsgZGlydHlZID0gMDsgfVxyXG4gICAgICAgIGlmIChkaXJ0eVdpZHRoID09PSB1bmRlZmluZWQpIHsgZGlydHlXaWR0aCA9IGltYWdlRGF0YS53aWR0aDsgfVxyXG4gICAgICAgIGlmIChkaXJ0eUhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGRpcnR5SGVpZ2h0ID0gaW1hZ2VEYXRhLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgeCwgeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbiBJbWFnZURhdGEgcmVnaW9uIGZyb20gdGhpcyBDYW52YXNUZXh0dXJlIGZyb20gdGhlIHBvc2l0aW9uIGFuZCBzaXplIHNwZWNpZmllZC5cclxuICAgICAqIFlvdSBjYW4gd3JpdGUgdGhpcyBiYWNrIHVzaW5nIGBDYW52YXNUZXh0dXJlLnB1dERhdGFgLCBvciBtYW5pcHVsYXRlIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjZ2V0RGF0YVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYSB0byBnZXQgdGhlIEltYWdlRGF0YSBmcm9tLiBNdXN0IGxheSB3aXRoaW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGFuZCBiZSBhbiBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIGFyZWEgdG8gZ2V0IHRoZSBJbWFnZURhdGEgZnJvbS4gTXVzdCBsYXkgd2l0aGluIHRoZSBkaW1lbnNpb25zIG9mIHRoaXMgQ2FudmFzVGV4dHVyZSBhbmQgYmUgYW4gaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZSBmcm9tIHdoaWNoIHRoZSBJbWFnZURhdGEgd2lsbCBiZSBleHRyYWN0ZWQuIFBvc2l0aXZlIHZhbHVlcyBhcmUgdG8gdGhlIHJpZ2h0LCBhbmQgbmVnYXRpdmUgdG8gdGhlIGxlZnQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZSBmcm9tIHdoaWNoIHRoZSBJbWFnZURhdGEgd2lsbCBiZSBleHRyYWN0ZWQuIFBvc2l0aXZlIHZhbHVlcyBhcmUgZG93biwgYW5kIG5lZ2F0aXZlIGFyZSB1cC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7SW1hZ2VEYXRhfSBUaGUgSW1hZ2VEYXRhIGV4dHJhY3RlZCBmcm9tIHRoaXMgQ2FudmFzVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgeCA9IENsYW1wKE1hdGguZmxvb3IoeCksIDAsIHRoaXMud2lkdGggLSAxKTtcclxuICAgICAgICB5ID0gQ2xhbXAoTWF0aC5mbG9vcih5KSwgMCwgdGhpcy5oZWlnaHQgLSAxKTtcclxuICAgICAgICB3aWR0aCA9IENsYW1wKHdpZHRoLCAxLCB0aGlzLndpZHRoIC0geCk7XHJcbiAgICAgICAgaGVpZ2h0ID0gQ2xhbXAoaGVpZ2h0LCAxLCB0aGlzLmhlaWdodCAtIHkpO1xyXG5cclxuICAgICAgICB2YXIgaW1hZ2VEYXRhID0gdGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGltYWdlRGF0YTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIGNvbG9yIG9mIGEgc3BlY2lmaWMgcGl4ZWwgZnJvbSB0aGlzIHRleHR1cmUgYW5kIHN0b3JlIGl0IGluIGEgQ29sb3Igb2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBkcmF3biBhbnl0aGluZyB0byB0aGlzIENhbnZhc1RleHR1cmUgc2luY2UgaXQgd2FzIGNyZWF0ZWQgeW91IG11c3QgY2FsbCBgQ2FudmFzVGV4dHVyZS51cGRhdGVgIHRvIHJlZnJlc2ggdGhlIGFycmF5IGJ1ZmZlcixcclxuICAgICAqIG90aGVyd2lzZSB0aGlzIG1heSByZXR1cm4gb3V0IG9mIGRhdGUgY29sb3IgdmFsdWVzLCBvciB3b3JzZSAtIHRocm93IGEgcnVuLXRpbWUgZXJyb3IgYXMgaXQgdHJpZXMgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQgdGhhdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjZ2V0UGl4ZWxcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gZ2V0LiBNdXN0IGxheSB3aXRoaW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGFuZCBiZSBhbiBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gZ2V0LiBNdXN0IGxheSB3aXRoaW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGFuZCBiZSBhbiBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gW291dF0gLSBBIENvbG9yIG9iamVjdCB0byBzdG9yZSB0aGUgcGl4ZWwgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgQ29sb3Igb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IEFuIG9iamVjdCB3aXRoIHRoZSByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSB2YWx1ZXMgc2V0IGluIHRoZSByLCBnLCBiIGFuZCBhIHByb3BlcnRpZXMuXHJcbiAgICAgKi9cclxuICAgIGdldFBpeGVsOiBmdW5jdGlvbiAoeCwgeSwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IENvbG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldEluZGV4KHgsIHkpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHIgPSBkYXRhW2luZGV4ICsgMF07XHJcbiAgICAgICAgICAgIHZhciBnID0gZGF0YVtpbmRleCArIDFdO1xyXG4gICAgICAgICAgICB2YXIgYiA9IGRhdGFbaW5kZXggKyAyXTtcclxuICAgICAgICAgICAgdmFyIGEgPSBkYXRhW2luZGV4ICsgM107XHJcblxyXG4gICAgICAgICAgICBvdXQuc2V0VG8ociwgZywgYiwgYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIHBpeGVscyBpbiB0aGUgZ2l2ZW4gcmVnaW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSByZXF1ZXN0ZWQgcmVnaW9uIGV4dGVuZHMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoaXMgQ2FudmFzVGV4dHVyZSxcclxuICAgICAqIHRoZSByZWdpb24gaXMgdHJ1bmNhdGVkIHRvIGZpdC5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGhhdmUgZHJhd24gYW55dGhpbmcgdG8gdGhpcyBDYW52YXNUZXh0dXJlIHNpbmNlIGl0IHdhcyBjcmVhdGVkIHlvdSBtdXN0IGNhbGwgYENhbnZhc1RleHR1cmUudXBkYXRlYCB0byByZWZyZXNoIHRoZSBhcnJheSBidWZmZXIsXHJcbiAgICAgKiBvdGhlcndpc2UgdGhpcyBtYXkgcmV0dXJuIG91dCBvZiBkYXRlIGNvbG9yIHZhbHVlcywgb3Igd29yc2UgLSB0aHJvdyBhIHJ1bi10aW1lIGVycm9yIGFzIGl0IHRyaWVzIHRvIGFjY2VzcyBhbiBhcnJheSBlbGVtZW50IHRoYXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI2dldFBpeGVsc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt4PTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlZ2lvbi4gTXVzdCBsYXkgd2l0aGluIHRoZSBkaW1lbnNpb25zIG9mIHRoaXMgQ2FudmFzVGV4dHVyZSBhbmQgYmUgYW4gaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3k9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVnaW9uLiBNdXN0IGxheSB3aXRoaW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhpcyBDYW52YXNUZXh0dXJlIGFuZCBiZSBhbiBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSByZWdpb24gdG8gZ2V0LiBNdXN0IGJlIGFuIGludGVnZXIuIERlZmF1bHRzIHRvIHRoZSBjYW52YXMgd2lkdGggaWYgbm90IGdpdmVuLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byBnZXQuIE11c3QgYmUgYW4gaW50ZWdlci4gSWYgbm90IGdpdmVuIHdpbGwgYmUgc2V0IHRvIHRoZSBgd2lkdGhgLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuVGV4dHVyZXMuUGl4ZWxDb25maWdbXX0gQW4gYXJyYXkgb2YgUGl4ZWwgb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0UGl4ZWxzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gdGhpcy53aWR0aDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG5cclxuICAgICAgICB4ID0gTWF0aC5hYnMoTWF0aC5yb3VuZCh4KSk7XHJcbiAgICAgICAgeSA9IE1hdGguYWJzKE1hdGgucm91bmQoeSkpO1xyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IENsYW1wKHgsIDAsIHRoaXMud2lkdGgpO1xyXG4gICAgICAgIHZhciByaWdodCA9IENsYW1wKHggKyB3aWR0aCwgMCwgdGhpcy53aWR0aCk7XHJcbiAgICAgICAgdmFyIHRvcCA9IENsYW1wKHksIDAsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB2YXIgYm90dG9tID0gQ2xhbXAoeSArIGhlaWdodCwgMCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgQ29sb3IoKTtcclxuXHJcbiAgICAgICAgdmFyIG91dCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBweSA9IHRvcDsgcHkgPCBib3R0b207IHB5KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcm93ID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBweCA9IGxlZnQ7IHB4IDwgcmlnaHQ7IHB4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBpeGVsID0gdGhpcy5nZXRQaXhlbChweCwgcHksIHBpeGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICByb3cucHVzaCh7IHg6IHB4LCB5OiBweSwgY29sb3I6IHBpeGVsLmNvbG9yLCBhbHBoYTogcGl4ZWwuYWxwaGFHTCB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2gocm93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgSW1hZ2UgRGF0YSBpbmRleCBmb3IgdGhlIGdpdmVuIHBpeGVsIGluIHRoaXMgQ2FudmFzVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgaW5kZXggY2FuIGJlIHVzZWQgdG8gcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBgdGhpcy5kYXRhYCBhcnJheS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgaW5kZXggcG9pbnRzIHRvIHRoZSByZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBUaGUgc3Vic2VxdWVudCAzIGluZGV4ZXNcclxuICAgICAqIHBvaW50IHRvIGdyZWVuLCBibHVlIGFuZCBhbHBoYSByZXNwZWN0aXZlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNnZXRJbmRleFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byBnZXQuIE11c3QgbGF5IHdpdGhpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGlzIENhbnZhc1RleHR1cmUgYW5kIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byBnZXQuIE11c3QgbGF5IHdpdGhpbiB0aGUgZGltZW5zaW9ucyBvZiB0aGlzIENhbnZhc1RleHR1cmUgYW5kIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgeCA9IE1hdGguYWJzKE1hdGgucm91bmQoeCkpO1xyXG4gICAgICAgIHkgPSBNYXRoLmFicyhNYXRoLnJvdW5kKHkpKTtcclxuXHJcbiAgICAgICAgaWYgKHggPCB0aGlzLndpZHRoICYmIHkgPCB0aGlzLmhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAoeCArIHkgKiB0aGlzLndpZHRoKSAqIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG1hbnVhbGx5IGlmIHlvdSBhcmUgcnVubmluZyB1bmRlciBXZWJHTC5cclxuICAgICAqIEl0IHdpbGwgcmVmcmVzaCB0aGUgV2ViR0xUZXh0dXJlIGZyb20gdGhlIENhbnZhcyBzb3VyY2UuIE9ubHkgY2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlXHJcbiAgICAgKiBjYW52YXMgaGFzIGNoYW5nZWQsIGFzIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgR1BVIHRleHR1cmUgYWxsb2NhdGlvbiBjb3N0IGludm9sdmVkIGluIGRvaW5nIHNvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjcmVmcmVzaFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9IFRoaXMgQ2FudmFzVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgcmVmcmVzaDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIENhbnZhcyBFbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjZ2V0Q2FudmFzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIENhbnZhcyBET00gZWxlbWVudCB0aGlzIHRleHR1cmUgaXMgdXNpbmcuXHJcbiAgICAgKi9cclxuICAgIGdldENhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgMkQgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjZ2V0Q29udGV4dFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBUaGUgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0IHRoaXMgdGV4dHVyZSBpcyB1c2luZy5cclxuICAgICAqL1xyXG4gICAgZ2V0Q29udGV4dDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgZ2l2ZW4gcmVnaW9uIG9mIHRoaXMgQ2FudmFzIFRleHR1cmUsIHJlc2V0dGluZyBpdCBiYWNrIHRvIHRyYW5zcGFyZW50LlxyXG4gICAgICogSWYgbm8gcmVnaW9uIGlzIGdpdmVuLCB0aGUgd2hvbGUgQ2FudmFzIFRleHR1cmUgaXMgY2xlYXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlI2NsZWFyXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWdpb24gdG8gY2xlYXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt5PTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlZ2lvbiB0byBjbGVhci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgcmVnaW9uLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlZ2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZX0gVGhlIENhbnZhcyBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGlzIENhbnZhcyBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmUjc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgQ2FudmFzLiBJZiBub3QgZ2l2ZW4gaXQgd2lsbCB1c2UgdGhlIHdpZHRoIGFzIHRoZSBoZWlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9IFRoZSBDYW52YXMgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcblxyXG4gICAgICAgIGlmICh3aWR0aCAhPT0gdGhpcy53aWR0aCB8fCBoZWlnaHQgIT09IHRoaXMuaGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFVwZGF0ZSB0aGUgQ2FudmFzXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIC8vICBVcGRhdGUgdGhlIFRleHR1cmUgU291cmNlXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2UuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2UuaXNQb3dlck9mMiA9IElzU2l6ZVBvd2VyT2ZUd28od2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgVXBkYXRlIHRoZSBGcmFtZVxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lc1snX19CQVNFJ10uc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCAwLCAwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBUZXh0dXJlIGFuZCByZWxlYXNlcyByZWZlcmVuY2VzIHRvIGl0cyBzb3VyY2VzIGFuZCBmcmFtZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VEYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGl4ZWxzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGV4dHVyZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/CanvasTexture.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/Frame.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/textures/Frame.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Frame is a section of a Texture.\r\n *\r\n * @class Frame\r\n * @memberof Phaser.Textures\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture this Frame is a part of.\r\n * @param {(integer|string)} name - The name of this Frame. The name is unique within the Texture.\r\n * @param {integer} sourceIndex - The index of the TextureSource that this Frame is a part of.\r\n * @param {number} x - The x coordinate of the top-left of this Frame.\r\n * @param {number} y - The y coordinate of the top-left of this Frame.\r\n * @param {number} width - The width of this Frame.\r\n * @param {number} height - The height of this Frame.\r\n */\r\nvar Frame = new Class({\r\n\r\n    initialize:\r\n\r\n    function Frame (texture, name, sourceIndex, x, y, width, height)\r\n    {\r\n        /**\r\n         * The Texture this Frame is a part of.\r\n         *\r\n         * @name Phaser.Textures.Frame#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @since 3.0.0\r\n         */\r\n        this.texture = texture;\r\n\r\n        /**\r\n         * The name of this Frame.\r\n         * The name is unique within the Texture.\r\n         *\r\n         * @name Phaser.Textures.Frame#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = name;\r\n\r\n        /**\r\n         * The TextureSource this Frame is part of.\r\n         *\r\n         * @name Phaser.Textures.Frame#source\r\n         * @type {Phaser.Textures.TextureSource}\r\n         * @since 3.0.0\r\n         */\r\n        this.source = texture.source[sourceIndex];\r\n\r\n        /**\r\n         * The index of the TextureSource in the Texture sources array.\r\n         *\r\n         * @name Phaser.Textures.Frame#sourceIndex\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.sourceIndex = sourceIndex;\r\n\r\n        /**\r\n         * A reference to the Texture Source WebGL Texture that this Frame is using.\r\n         *\r\n         * @name Phaser.Textures.Frame#glTexture\r\n         * @type {?WebGLTexture}\r\n         * @default null\r\n         * @since 3.11.0\r\n         */\r\n        this.glTexture = this.source.glTexture;\r\n\r\n        /**\r\n         * X position within the source image to cut from.\r\n         *\r\n         * @name Phaser.Textures.Frame#cutX\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.cutX;\r\n\r\n        /**\r\n         * Y position within the source image to cut from.\r\n         *\r\n         * @name Phaser.Textures.Frame#cutY\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.cutY;\r\n\r\n        /**\r\n         * The width of the area in the source image to cut.\r\n         *\r\n         * @name Phaser.Textures.Frame#cutWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.cutWidth;\r\n\r\n        /**\r\n         * The height of the area in the source image to cut.\r\n         *\r\n         * @name Phaser.Textures.Frame#cutHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.cutHeight;\r\n\r\n        /**\r\n         * The X rendering offset of this Frame, taking trim into account.\r\n         *\r\n         * @name Phaser.Textures.Frame#x\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.x = 0;\r\n\r\n        /**\r\n         * The Y rendering offset of this Frame, taking trim into account.\r\n         *\r\n         * @name Phaser.Textures.Frame#y\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.y = 0;\r\n\r\n        /**\r\n         * The rendering width of this Frame, taking trim into account.\r\n         *\r\n         * @name Phaser.Textures.Frame#width\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.width;\r\n\r\n        /**\r\n         * The rendering height of this Frame, taking trim into account.\r\n         *\r\n         * @name Phaser.Textures.Frame#height\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.height;\r\n\r\n        /**\r\n         * Half the width, floored.\r\n         * Precalculated for the renderer.\r\n         *\r\n         * @name Phaser.Textures.Frame#halfWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfWidth;\r\n\r\n        /**\r\n         * Half the height, floored.\r\n         * Precalculated for the renderer.\r\n         *\r\n         * @name Phaser.Textures.Frame#halfHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.halfHeight;\r\n\r\n        /**\r\n         * The x center of this frame, floored.\r\n         *\r\n         * @name Phaser.Textures.Frame#centerX\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.centerX;\r\n\r\n        /**\r\n         * The y center of this frame, floored.\r\n         *\r\n         * @name Phaser.Textures.Frame#centerY\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.centerY;\r\n\r\n        /**\r\n         * The horizontal pivot point of this Frame.\r\n         *\r\n         * @name Phaser.Textures.Frame#pivotX\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.pivotX = 0;\r\n\r\n        /**\r\n         * The vertical pivot point of this Frame.\r\n         *\r\n         * @name Phaser.Textures.Frame#pivotY\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.pivotY = 0;\r\n\r\n        /**\r\n         * Does this Frame have a custom pivot point?\r\n         *\r\n         * @name Phaser.Textures.Frame#customPivot\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.customPivot = false;\r\n\r\n        /**\r\n         * **CURRENTLY UNSUPPORTED**\r\n         *\r\n         * Is this frame is rotated or not in the Texture?\r\n         * Rotation allows you to use rotated frames in texture atlas packing.\r\n         * It has nothing to do with Sprite rotation.\r\n         *\r\n         * @name Phaser.Textures.Frame#rotated\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.rotated = false;\r\n\r\n        /**\r\n         * Over-rides the Renderer setting.\r\n         * -1 = use Renderer Setting\r\n         * 0 = No rounding\r\n         * 1 = Round\r\n         *\r\n         * @name Phaser.Textures.Frame#autoRound\r\n         * @type {integer}\r\n         * @default -1\r\n         * @since 3.0.0\r\n         */\r\n        this.autoRound = -1;\r\n\r\n        /**\r\n         * Any Frame specific custom data can be stored here.\r\n         *\r\n         * @name Phaser.Textures.Frame#customData\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.customData = {};\r\n\r\n        /**\r\n         * WebGL UV u0 value.\r\n         *\r\n         * @name Phaser.Textures.Frame#u0\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.u0 = 0;\r\n\r\n        /**\r\n         * WebGL UV v0 value.\r\n         *\r\n         * @name Phaser.Textures.Frame#v0\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.v0 = 0;\r\n\r\n        /**\r\n         * WebGL UV u1 value.\r\n         *\r\n         * @name Phaser.Textures.Frame#u1\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.u1 = 0;\r\n\r\n        /**\r\n         * WebGL UV v1 value.\r\n         *\r\n         * @name Phaser.Textures.Frame#v1\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.11.0\r\n         */\r\n        this.v1 = 0;\r\n\r\n        /**\r\n         * The un-modified source frame, trim and UV data.\r\n         *\r\n         * @name Phaser.Textures.Frame#data\r\n         * @type {object}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.data = {\r\n            cut: {\r\n                x: 0,\r\n                y: 0,\r\n                w: 0,\r\n                h: 0,\r\n                r: 0,\r\n                b: 0\r\n            },\r\n            trim: false,\r\n            sourceSize: {\r\n                w: 0,\r\n                h: 0\r\n            },\r\n            spriteSourceSize: {\r\n                x: 0,\r\n                y: 0,\r\n                w: 0,\r\n                h: 0,\r\n                r: 0,\r\n                b: 0\r\n            },\r\n            radius: 0,\r\n            drawImage: {\r\n                x: 0,\r\n                y: 0,\r\n                width: 0,\r\n                height: 0\r\n            }\r\n        };\r\n\r\n        this.setSize(width, height, x, y);\r\n    },\r\n\r\n    /**\r\n     * Sets the width, height, x and y of this Frame.\r\n     * \r\n     * This is called automatically by the constructor\r\n     * and should rarely be changed on-the-fly.\r\n     *\r\n     * @method Phaser.Textures.Frame#setSize\r\n     * @since 3.7.0\r\n     *\r\n     * @param {integer} width - The width of the frame before being trimmed.\r\n     * @param {integer} height - The height of the frame before being trimmed.\r\n     * @param {integer} [x=0] - The x coordinate of the top-left of this Frame.\r\n     * @param {integer} [y=0] - The y coordinate of the top-left of this Frame.\r\n     *\r\n     * @return {Phaser.Textures.Frame} This Frame object.\r\n     */\r\n    setSize: function (width, height, x, y)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n\r\n        this.cutX = x;\r\n        this.cutY = y;\r\n        this.cutWidth = width;\r\n        this.cutHeight = height;\r\n\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        this.halfWidth = Math.floor(width * 0.5);\r\n        this.halfHeight = Math.floor(height * 0.5);\r\n\r\n        this.centerX = Math.floor(width / 2);\r\n        this.centerY = Math.floor(height / 2);\r\n\r\n        var data = this.data;\r\n        var cut = data.cut;\r\n\r\n        cut.x = x;\r\n        cut.y = y;\r\n        cut.w = width;\r\n        cut.h = height;\r\n        cut.r = x + width;\r\n        cut.b = y + height;\r\n\r\n        data.sourceSize.w = width;\r\n        data.sourceSize.h = height;\r\n\r\n        data.spriteSourceSize.w = width;\r\n        data.spriteSourceSize.h = height;\r\n\r\n        data.radius = 0.5 * Math.sqrt(width * width + height * height);\r\n\r\n        var drawImage = data.drawImage;\r\n\r\n        drawImage.x = x;\r\n        drawImage.y = y;\r\n        drawImage.width = width;\r\n        drawImage.height = height;\r\n\r\n        return this.updateUVs();\r\n    },\r\n\r\n    /**\r\n     * If the frame was trimmed when added to the Texture Atlas, this records the trim and source data.\r\n     *\r\n     * @method Phaser.Textures.Frame#setTrim\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} actualWidth - The width of the frame before being trimmed.\r\n     * @param {number} actualHeight - The height of the frame before being trimmed.\r\n     * @param {number} destX - The destination X position of the trimmed frame for display.\r\n     * @param {number} destY - The destination Y position of the trimmed frame for display.\r\n     * @param {number} destWidth - The destination width of the trimmed frame for display.\r\n     * @param {number} destHeight - The destination height of the trimmed frame for display.\r\n     *\r\n     * @return {Phaser.Textures.Frame} This Frame object.\r\n     */\r\n    setTrim: function (actualWidth, actualHeight, destX, destY, destWidth, destHeight)\r\n    {\r\n        var data = this.data;\r\n        var ss = data.spriteSourceSize;\r\n\r\n        //  Store actual values\r\n\r\n        data.trim = true;\r\n\r\n        data.sourceSize.w = actualWidth;\r\n        data.sourceSize.h = actualHeight;\r\n\r\n        ss.x = destX;\r\n        ss.y = destY;\r\n        ss.w = destWidth;\r\n        ss.h = destHeight;\r\n        ss.r = destX + destWidth;\r\n        ss.b = destY + destHeight;\r\n\r\n        //  Adjust properties\r\n        this.x = destX;\r\n        this.y = destY;\r\n\r\n        this.width = destWidth;\r\n        this.height = destHeight;\r\n\r\n        this.halfWidth = destWidth * 0.5;\r\n        this.halfHeight = destHeight * 0.5;\r\n\r\n        this.centerX = Math.floor(destWidth / 2);\r\n        this.centerY = Math.floor(destHeight / 2);\r\n\r\n        return this.updateUVs();\r\n    },\r\n\r\n    /**\r\n     * Takes a crop data object and, based on the rectangular region given, calculates the\r\n     * required UV coordinates in order to crop this Frame for WebGL and Canvas rendering.\r\n     * \r\n     * This is called directly by the Game Object Texture Components `setCrop` method.\r\n     * Please use that method to crop a Game Object.\r\n     *\r\n     * @method Phaser.Textures.Frame#setCropUVs\r\n     * @since 3.11.0\r\n     * \r\n     * @param {object} crop - The crop data object. This is the `GameObject._crop` property.\r\n     * @param {number} x - The x coordinate to start the crop from. Cannot be negative or exceed the Frame width.\r\n     * @param {number} y - The y coordinate to start the crop from. Cannot be negative or exceed the Frame height.\r\n     * @param {number} width - The width of the crop rectangle. Cannot exceed the Frame width.\r\n     * @param {number} height - The height of the crop rectangle. Cannot exceed the Frame height.\r\n     * @param {boolean} flipX - Does the parent Game Object have flipX set?\r\n     * @param {boolean} flipY - Does the parent Game Object have flipY set?\r\n     *\r\n     * @return {object} The updated crop data object.\r\n     */\r\n    setCropUVs: function (crop, x, y, width, height, flipX, flipY)\r\n    {\r\n        //  Clamp the input values\r\n\r\n        var cx = this.cutX;\r\n        var cy = this.cutY;\r\n        var cw = this.cutWidth;\r\n        var ch = this.cutHeight;\r\n        var rw = this.realWidth;\r\n        var rh = this.realHeight;\r\n\r\n        x = Clamp(x, 0, rw);\r\n        y = Clamp(y, 0, rh);\r\n\r\n        width = Clamp(width, 0, rw - x);\r\n        height = Clamp(height, 0, rh - y);\r\n\r\n        var ox = cx + x;\r\n        var oy = cy + y;\r\n        var ow = width;\r\n        var oh = height;\r\n\r\n        var data = this.data;\r\n\r\n        if (data.trim)\r\n        {\r\n            var ss = data.spriteSourceSize;\r\n\r\n            //  Need to check for intersection between the cut area and the crop area\r\n            //  If there is none, we set UV to be empty, otherwise set it to be the intersection area\r\n\r\n            width = Clamp(width, 0, cw - x);\r\n            height = Clamp(height, 0, ch - y);\r\n    \r\n            var cropRight = x + width;\r\n            var cropBottom = y + height;\r\n\r\n            var intersects = !(ss.r < x || ss.b < y || ss.x > cropRight || ss.y > cropBottom);\r\n\r\n            if (intersects)\r\n            {\r\n                var ix = Math.max(ss.x, x);\r\n                var iy = Math.max(ss.y, y);\r\n                var iw = Math.min(ss.r, cropRight) - ix;\r\n                var ih = Math.min(ss.b, cropBottom) - iy;\r\n\r\n                ow = iw;\r\n                oh = ih;\r\n    \r\n                if (flipX)\r\n                {\r\n                    ox = cx + (cw - (ix - ss.x) - iw);\r\n                }\r\n                else\r\n                {\r\n                    ox = cx + (ix - ss.x);\r\n                }\r\n        \r\n                if (flipY)\r\n                {\r\n                    oy = cy + (ch - (iy - ss.y) - ih);\r\n                }\r\n                else\r\n                {\r\n                    oy = cy + (iy - ss.y);\r\n                }\r\n\r\n                x = ix;\r\n                y = iy;\r\n\r\n                width = iw;\r\n                height = ih;\r\n            }\r\n            else\r\n            {\r\n                ox = 0;\r\n                oy = 0;\r\n                ow = 0;\r\n                oh = 0;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            if (flipX)\r\n            {\r\n                ox = cx + (cw - x - width);\r\n            }\r\n    \r\n            if (flipY)\r\n            {\r\n                oy = cy + (ch - y - height);\r\n            }\r\n        }\r\n\r\n        var tw = this.source.width;\r\n        var th = this.source.height;\r\n\r\n        //  Map the given coordinates into UV space, clamping to the 0-1 range.\r\n\r\n        crop.u0 = Math.max(0, ox / tw);\r\n        crop.v0 = Math.max(0, oy / th);\r\n        crop.u1 = Math.min(1, (ox + ow) / tw);\r\n        crop.v1 = Math.min(1, (oy + oh) / th);\r\n\r\n        crop.x = x;\r\n        crop.y = y;\r\n\r\n        crop.cx = ox;\r\n        crop.cy = oy;\r\n        crop.cw = ow;\r\n        crop.ch = oh;\r\n\r\n        crop.width = width;\r\n        crop.height = height;\r\n\r\n        crop.flipX = flipX;\r\n        crop.flipY = flipY;\r\n\r\n        return crop;\r\n    },\r\n\r\n    /**\r\n     * Takes a crop data object and recalculates the UVs based on the dimensions inside the crop object.\r\n     * Called automatically by `setFrame`.\r\n     *\r\n     * @method Phaser.Textures.Frame#updateCropUVs\r\n     * @since 3.11.0\r\n     * \r\n     * @param {object} crop - The crop data object. This is the `GameObject._crop` property.\r\n     * @param {boolean} flipX - Does the parent Game Object have flipX set?\r\n     * @param {boolean} flipY - Does the parent Game Object have flipY set?\r\n     *\r\n     * @return {object} The updated crop data object.\r\n     */\r\n    updateCropUVs: function (crop, flipX, flipY)\r\n    {\r\n        return this.setCropUVs(crop, crop.x, crop.y, crop.width, crop.height, flipX, flipY);\r\n    },\r\n\r\n    /**\r\n     * Updates the internal WebGL UV cache and the drawImage cache.\r\n     *\r\n     * @method Phaser.Textures.Frame#updateUVs\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Textures.Frame} This Frame object.\r\n     */\r\n    updateUVs: function ()\r\n    {\r\n        var cx = this.cutX;\r\n        var cy = this.cutY;\r\n        var cw = this.cutWidth;\r\n        var ch = this.cutHeight;\r\n\r\n        //  Canvas data\r\n\r\n        var cd = this.data.drawImage;\r\n\r\n        cd.width = cw;\r\n        cd.height = ch;\r\n\r\n        //  WebGL data\r\n\r\n        var tw = this.source.width;\r\n        var th = this.source.height;\r\n\r\n        this.u0 = cx / tw;\r\n        this.v0 = cy / th;\r\n\r\n        this.u1 = (cx + cw) / tw;\r\n        this.v1 = (cy + ch) / th;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the internal WebGL UV cache.\r\n     *\r\n     * @method Phaser.Textures.Frame#updateUVsInverted\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Textures.Frame} This Frame object.\r\n     */\r\n    updateUVsInverted: function ()\r\n    {\r\n        var tw = this.source.width;\r\n        var th = this.source.height;\r\n\r\n        this.u0 = (this.cutX + this.cutHeight) / tw;\r\n        this.v0 = this.cutY / th;\r\n\r\n        this.u1 = this.cutX / tw;\r\n        this.v1 = (this.cutY + this.cutWidth) / th;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Clones this Frame into a new Frame object.\r\n     *\r\n     * @method Phaser.Textures.Frame#clone\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Textures.Frame} A clone of this Frame.\r\n     */\r\n    clone: function ()\r\n    {\r\n        var clone = new Frame(this.texture, this.name, this.sourceIndex);\r\n\r\n        clone.cutX = this.cutX;\r\n        clone.cutY = this.cutY;\r\n        clone.cutWidth = this.cutWidth;\r\n        clone.cutHeight = this.cutHeight;\r\n\r\n        clone.x = this.x;\r\n        clone.y = this.y;\r\n\r\n        clone.width = this.width;\r\n        clone.height = this.height;\r\n\r\n        clone.halfWidth = this.halfWidth;\r\n        clone.halfHeight = this.halfHeight;\r\n\r\n        clone.centerX = this.centerX;\r\n        clone.centerY = this.centerY;\r\n\r\n        clone.rotated = this.rotated;\r\n\r\n        clone.data = Extend(true, clone.data, this.data);\r\n\r\n        clone.updateUVs();\r\n\r\n        return clone;\r\n    },\r\n\r\n    /**\r\n     * Destroys this Frame by nulling its reference to the parent Texture and and data objects.\r\n     *\r\n     * @method Phaser.Textures.Frame#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.source = null;\r\n        this.texture = null;\r\n        this.glTexture = null;\r\n        this.customData = null;\r\n        this.data = null;\r\n    },\r\n\r\n    /**\r\n     * The width of the Frame in its un-trimmed, un-padded state, as prepared in the art package,\r\n     * before being packed.\r\n     *\r\n     * @name Phaser.Textures.Frame#realWidth\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    realWidth: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.data.sourceSize.w;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The height of the Frame in its un-trimmed, un-padded state, as prepared in the art package,\r\n     * before being packed.\r\n     *\r\n     * @name Phaser.Textures.Frame#realHeight\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    realHeight: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.data.sourceSize.h;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The radius of the Frame (derived from sqrt(w * w + h * h) / 2)\r\n     *\r\n     * @name Phaser.Textures.Frame#radius\r\n     * @type {number}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    radius: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.data.radius;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * Is the Frame trimmed or not?\r\n     *\r\n     * @name Phaser.Textures.Frame#trimmed\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    trimmed: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.data.trim;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The Canvas drawImage data object.\r\n     *\r\n     * @name Phaser.Textures.Frame#canvasData\r\n     * @type {object}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    canvasData: {\r\n\r\n        get: function ()\r\n        {\r\n            return this.data.drawImage;\r\n        }\r\n\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Frame;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9GcmFtZS5qcz80MDNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyw4REFBZTtBQUNuQyxhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9GcmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBGcmFtZSBpcyBhIHNlY3Rpb24gb2YgYSBUZXh0dXJlLlxyXG4gKlxyXG4gKiBAY2xhc3MgRnJhbWVcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0aGlzIEZyYW1lIGlzIGEgcGFydCBvZi5cclxuICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhpcyBGcmFtZS4gVGhlIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzb3VyY2VJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZSB0aGF0IHRoaXMgRnJhbWUgaXMgYSBwYXJ0IG9mLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoaXMgRnJhbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhpcyBGcmFtZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoaXMgRnJhbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgRnJhbWUuXHJcbiAqL1xyXG52YXIgRnJhbWUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRnJhbWUgKHRleHR1cmUsIG5hbWUsIHNvdXJjZUluZGV4LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUZXh0dXJlIHRoaXMgRnJhbWUgaXMgYSBwYXJ0IG9mLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3RleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhpcyBGcmFtZS5cclxuICAgICAgICAgKiBUaGUgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUZXh0dXJlU291cmNlIHRoaXMgRnJhbWUgaXMgcGFydCBvZi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2V9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0ZXh0dXJlLnNvdXJjZVtzb3VyY2VJbmRleF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZSBpbiB0aGUgVGV4dHVyZSBzb3VyY2VzIGFycmF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3NvdXJjZUluZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbmRleCA9IHNvdXJjZUluZGV4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBTb3VyY2UgV2ViR0wgVGV4dHVyZSB0aGF0IHRoaXMgRnJhbWUgaXMgdXNpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjZ2xUZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHRoaXMuc291cmNlLmdsVGV4dHVyZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogWCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSBpbWFnZSB0byBjdXQgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNjdXRYXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXRYO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBZIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIGltYWdlIHRvIGN1dCBmcm9tLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2N1dFlcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1dFk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYXJlYSBpbiB0aGUgc291cmNlIGltYWdlIHRvIGN1dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNjdXRXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3V0V2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgaW4gdGhlIHNvdXJjZSBpbWFnZSB0byBjdXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjY3V0SGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBYIHJlbmRlcmluZyBvZmZzZXQgb2YgdGhpcyBGcmFtZSwgdGFraW5nIHRyaW0gaW50byBhY2NvdW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3hcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFkgcmVuZGVyaW5nIG9mZnNldCBvZiB0aGlzIEZyYW1lLCB0YWtpbmcgdHJpbSBpbnRvIGFjY291bnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyaW5nIHdpZHRoIG9mIHRoaXMgRnJhbWUsIHRha2luZyB0cmltIGludG8gYWNjb3VudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByZW5kZXJpbmcgaGVpZ2h0IG9mIHRoaXMgRnJhbWUsIHRha2luZyB0cmltIGludG8gYWNjb3VudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGFsZiB0aGUgd2lkdGgsIGZsb29yZWQuXHJcbiAgICAgICAgICogUHJlY2FsY3VsYXRlZCBmb3IgdGhlIHJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2hhbGZXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGFsZldpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYWxmIHRoZSBoZWlnaHQsIGZsb29yZWQuXHJcbiAgICAgICAgICogUHJlY2FsY3VsYXRlZCBmb3IgdGhlIHJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2hhbGZIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbGZIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNlbnRlciBvZiB0aGlzIGZyYW1lLCBmbG9vcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2NlbnRlclhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNlbnRlclg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNlbnRlciBvZiB0aGlzIGZyYW1lLCBmbG9vcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2NlbnRlcllcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNlbnRlclk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIHBpdm90IHBvaW50IG9mIHRoaXMgRnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjcGl2b3RYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5waXZvdFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgcGl2b3QgcG9pbnQgb2YgdGhpcyBGcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNwaXZvdFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpdm90WSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhpcyBGcmFtZSBoYXZlIGEgY3VzdG9tIHBpdm90IHBvaW50P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2N1c3RvbVBpdm90XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1c3RvbVBpdm90ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqICoqQ1VSUkVOVExZIFVOU1VQUE9SVEVEKipcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElzIHRoaXMgZnJhbWUgaXMgcm90YXRlZCBvciBub3QgaW4gdGhlIFRleHR1cmU/XHJcbiAgICAgICAgICogUm90YXRpb24gYWxsb3dzIHlvdSB0byB1c2Ugcm90YXRlZCBmcmFtZXMgaW4gdGV4dHVyZSBhdGxhcyBwYWNraW5nLlxyXG4gICAgICAgICAqIEl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggU3ByaXRlIHJvdGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3JvdGF0ZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm90YXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPdmVyLXJpZGVzIHRoZSBSZW5kZXJlciBzZXR0aW5nLlxyXG4gICAgICAgICAqIC0xID0gdXNlIFJlbmRlcmVyIFNldHRpbmdcclxuICAgICAgICAgKiAwID0gTm8gcm91bmRpbmdcclxuICAgICAgICAgKiAxID0gUm91bmRcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNhdXRvUm91bmRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b1JvdW5kID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFueSBGcmFtZSBzcGVjaWZpYyBjdXN0b20gZGF0YSBjYW4gYmUgc3RvcmVkIGhlcmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjY3VzdG9tRGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21EYXRhID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlYkdMIFVWIHUwIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3UwXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudTAgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZWJHTCBVViB2MCB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSN2MFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnYwID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2ViR0wgVVYgdTEgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjdTFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51MSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlYkdMIFVWIHYxIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3YxXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudjEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdW4tbW9kaWZpZWQgc291cmNlIGZyYW1lLCB0cmltIGFuZCBVViBkYXRhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0ge1xyXG4gICAgICAgICAgICBjdXQ6IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgdzogMCxcclxuICAgICAgICAgICAgICAgIGg6IDAsXHJcbiAgICAgICAgICAgICAgICByOiAwLFxyXG4gICAgICAgICAgICAgICAgYjogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmltOiBmYWxzZSxcclxuICAgICAgICAgICAgc291cmNlU2l6ZToge1xyXG4gICAgICAgICAgICAgICAgdzogMCxcclxuICAgICAgICAgICAgICAgIGg6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3ByaXRlU291cmNlU2l6ZToge1xyXG4gICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3OiAwLFxyXG4gICAgICAgICAgICAgICAgaDogMCxcclxuICAgICAgICAgICAgICAgIHI6IDAsXHJcbiAgICAgICAgICAgICAgICBiOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJhZGl1czogMCxcclxuICAgICAgICAgICAgZHJhd0ltYWdlOiB7XHJcbiAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldFNpemUod2lkdGgsIGhlaWdodCwgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGgsIGhlaWdodCwgeCBhbmQgeSBvZiB0aGlzIEZyYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgICogYW5kIHNob3VsZCByYXJlbHkgYmUgY2hhbmdlZCBvbi10aGUtZmx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZyYW1lIGJlZm9yZSBiZWluZyB0cmltbWVkLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBmcmFtZSBiZWZvcmUgYmVpbmcgdHJpbW1lZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3g9MF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGlzIEZyYW1lLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeT0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoaXMgRnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBUaGlzIEZyYW1lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jdXRYID0geDtcclxuICAgICAgICB0aGlzLmN1dFkgPSB5O1xyXG4gICAgICAgIHRoaXMuY3V0V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmN1dEhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLmhhbGZXaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiAwLjUpO1xyXG4gICAgICAgIHRoaXMuaGFsZkhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogMC41KTtcclxuXHJcbiAgICAgICAgdGhpcy5jZW50ZXJYID0gTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMuY2VudGVyWSA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICAgIHZhciBjdXQgPSBkYXRhLmN1dDtcclxuXHJcbiAgICAgICAgY3V0LnggPSB4O1xyXG4gICAgICAgIGN1dC55ID0geTtcclxuICAgICAgICBjdXQudyA9IHdpZHRoO1xyXG4gICAgICAgIGN1dC5oID0gaGVpZ2h0O1xyXG4gICAgICAgIGN1dC5yID0geCArIHdpZHRoO1xyXG4gICAgICAgIGN1dC5iID0geSArIGhlaWdodDtcclxuXHJcbiAgICAgICAgZGF0YS5zb3VyY2VTaXplLncgPSB3aWR0aDtcclxuICAgICAgICBkYXRhLnNvdXJjZVNpemUuaCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgZGF0YS5zcHJpdGVTb3VyY2VTaXplLncgPSB3aWR0aDtcclxuICAgICAgICBkYXRhLnNwcml0ZVNvdXJjZVNpemUuaCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgZGF0YS5yYWRpdXMgPSAwLjUgKiBNYXRoLnNxcnQod2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBkcmF3SW1hZ2UgPSBkYXRhLmRyYXdJbWFnZTtcclxuXHJcbiAgICAgICAgZHJhd0ltYWdlLnggPSB4O1xyXG4gICAgICAgIGRyYXdJbWFnZS55ID0geTtcclxuICAgICAgICBkcmF3SW1hZ2Uud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBkcmF3SW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVVVnMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgZnJhbWUgd2FzIHRyaW1tZWQgd2hlbiBhZGRlZCB0byB0aGUgVGV4dHVyZSBBdGxhcywgdGhpcyByZWNvcmRzIHRoZSB0cmltIGFuZCBzb3VyY2UgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNzZXRUcmltXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWN0dWFsV2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZyYW1lIGJlZm9yZSBiZWluZyB0cmltbWVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFjdHVhbEhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGZyYW1lIGJlZm9yZSBiZWluZyB0cmltbWVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlc3RYIC0gVGhlIGRlc3RpbmF0aW9uIFggcG9zaXRpb24gb2YgdGhlIHRyaW1tZWQgZnJhbWUgZm9yIGRpc3BsYXkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVzdFkgLSBUaGUgZGVzdGluYXRpb24gWSBwb3NpdGlvbiBvZiB0aGUgdHJpbW1lZCBmcmFtZSBmb3IgZGlzcGxheS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXN0V2lkdGggLSBUaGUgZGVzdGluYXRpb24gd2lkdGggb2YgdGhlIHRyaW1tZWQgZnJhbWUgZm9yIGRpc3BsYXkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVzdEhlaWdodCAtIFRoZSBkZXN0aW5hdGlvbiBoZWlnaHQgb2YgdGhlIHRyaW1tZWQgZnJhbWUgZm9yIGRpc3BsYXkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBUaGlzIEZyYW1lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VHJpbTogZnVuY3Rpb24gKGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQsIGRlc3RYLCBkZXN0WSwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICAgIHZhciBzcyA9IGRhdGEuc3ByaXRlU291cmNlU2l6ZTtcclxuXHJcbiAgICAgICAgLy8gIFN0b3JlIGFjdHVhbCB2YWx1ZXNcclxuXHJcbiAgICAgICAgZGF0YS50cmltID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZGF0YS5zb3VyY2VTaXplLncgPSBhY3R1YWxXaWR0aDtcclxuICAgICAgICBkYXRhLnNvdXJjZVNpemUuaCA9IGFjdHVhbEhlaWdodDtcclxuXHJcbiAgICAgICAgc3MueCA9IGRlc3RYO1xyXG4gICAgICAgIHNzLnkgPSBkZXN0WTtcclxuICAgICAgICBzcy53ID0gZGVzdFdpZHRoO1xyXG4gICAgICAgIHNzLmggPSBkZXN0SGVpZ2h0O1xyXG4gICAgICAgIHNzLnIgPSBkZXN0WCArIGRlc3RXaWR0aDtcclxuICAgICAgICBzcy5iID0gZGVzdFkgKyBkZXN0SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyAgQWRqdXN0IHByb3BlcnRpZXNcclxuICAgICAgICB0aGlzLnggPSBkZXN0WDtcclxuICAgICAgICB0aGlzLnkgPSBkZXN0WTtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IGRlc3RXaWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGRlc3RIZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuaGFsZldpZHRoID0gZGVzdFdpZHRoICogMC41O1xyXG4gICAgICAgIHRoaXMuaGFsZkhlaWdodCA9IGRlc3RIZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgIHRoaXMuY2VudGVyWCA9IE1hdGguZmxvb3IoZGVzdFdpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5jZW50ZXJZID0gTWF0aC5mbG9vcihkZXN0SGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVVWcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgY3JvcCBkYXRhIG9iamVjdCBhbmQsIGJhc2VkIG9uIHRoZSByZWN0YW5ndWxhciByZWdpb24gZ2l2ZW4sIGNhbGN1bGF0ZXMgdGhlXHJcbiAgICAgKiByZXF1aXJlZCBVViBjb29yZGluYXRlcyBpbiBvcmRlciB0byBjcm9wIHRoaXMgRnJhbWUgZm9yIFdlYkdMIGFuZCBDYW52YXMgcmVuZGVyaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgR2FtZSBPYmplY3QgVGV4dHVyZSBDb21wb25lbnRzIGBzZXRDcm9wYCBtZXRob2QuXHJcbiAgICAgKiBQbGVhc2UgdXNlIHRoYXQgbWV0aG9kIHRvIGNyb3AgYSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNzZXRDcm9wVVZzXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjcm9wIC0gVGhlIGNyb3AgZGF0YSBvYmplY3QuIFRoaXMgaXMgdGhlIGBHYW1lT2JqZWN0Ll9jcm9wYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLiBDYW5ub3QgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBGcmFtZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLiBDYW5ub3QgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBGcmFtZSBoZWlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AgcmVjdGFuZ2xlLiBDYW5ub3QgZXhjZWVkIHRoZSBGcmFtZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBjcm9wIHJlY3RhbmdsZS4gQ2Fubm90IGV4Y2VlZCB0aGUgRnJhbWUgaGVpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGlwWCAtIERvZXMgdGhlIHBhcmVudCBHYW1lIE9iamVjdCBoYXZlIGZsaXBYIHNldD9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmxpcFkgLSBEb2VzIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QgaGF2ZSBmbGlwWSBzZXQ/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgdXBkYXRlZCBjcm9wIGRhdGEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDcm9wVVZzOiBmdW5jdGlvbiAoY3JvcCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmxpcFgsIGZsaXBZKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBDbGFtcCB0aGUgaW5wdXQgdmFsdWVzXHJcblxyXG4gICAgICAgIHZhciBjeCA9IHRoaXMuY3V0WDtcclxuICAgICAgICB2YXIgY3kgPSB0aGlzLmN1dFk7XHJcbiAgICAgICAgdmFyIGN3ID0gdGhpcy5jdXRXaWR0aDtcclxuICAgICAgICB2YXIgY2ggPSB0aGlzLmN1dEhlaWdodDtcclxuICAgICAgICB2YXIgcncgPSB0aGlzLnJlYWxXaWR0aDtcclxuICAgICAgICB2YXIgcmggPSB0aGlzLnJlYWxIZWlnaHQ7XHJcblxyXG4gICAgICAgIHggPSBDbGFtcCh4LCAwLCBydyk7XHJcbiAgICAgICAgeSA9IENsYW1wKHksIDAsIHJoKTtcclxuXHJcbiAgICAgICAgd2lkdGggPSBDbGFtcCh3aWR0aCwgMCwgcncgLSB4KTtcclxuICAgICAgICBoZWlnaHQgPSBDbGFtcChoZWlnaHQsIDAsIHJoIC0geSk7XHJcblxyXG4gICAgICAgIHZhciBveCA9IGN4ICsgeDtcclxuICAgICAgICB2YXIgb3kgPSBjeSArIHk7XHJcbiAgICAgICAgdmFyIG93ID0gd2lkdGg7XHJcbiAgICAgICAgdmFyIG9oID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEudHJpbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzcyA9IGRhdGEuc3ByaXRlU291cmNlU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBOZWVkIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgY3V0IGFyZWEgYW5kIHRoZSBjcm9wIGFyZWFcclxuICAgICAgICAgICAgLy8gIElmIHRoZXJlIGlzIG5vbmUsIHdlIHNldCBVViB0byBiZSBlbXB0eSwgb3RoZXJ3aXNlIHNldCBpdCB0byBiZSB0aGUgaW50ZXJzZWN0aW9uIGFyZWFcclxuXHJcbiAgICAgICAgICAgIHdpZHRoID0gQ2xhbXAod2lkdGgsIDAsIGN3IC0geCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IENsYW1wKGhlaWdodCwgMCwgY2ggLSB5KTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgY3JvcFJpZ2h0ID0geCArIHdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgY3JvcEJvdHRvbSA9IHkgKyBoZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgaW50ZXJzZWN0cyA9ICEoc3MuciA8IHggfHwgc3MuYiA8IHkgfHwgc3MueCA+IGNyb3BSaWdodCB8fCBzcy55ID4gY3JvcEJvdHRvbSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl4ID0gTWF0aC5tYXgoc3MueCwgeCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXkgPSBNYXRoLm1heChzcy55LCB5KTtcclxuICAgICAgICAgICAgICAgIHZhciBpdyA9IE1hdGgubWluKHNzLnIsIGNyb3BSaWdodCkgLSBpeDtcclxuICAgICAgICAgICAgICAgIHZhciBpaCA9IE1hdGgubWluKHNzLmIsIGNyb3BCb3R0b20pIC0gaXk7XHJcblxyXG4gICAgICAgICAgICAgICAgb3cgPSBpdztcclxuICAgICAgICAgICAgICAgIG9oID0gaWg7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChmbGlwWClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBveCA9IGN4ICsgKGN3IC0gKGl4IC0gc3MueCkgLSBpdyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3ggPSBjeCArIChpeCAtIHNzLngpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGZsaXBZKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG95ID0gY3kgKyAoY2ggLSAoaXkgLSBzcy55KSAtIGloKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBveSA9IGN5ICsgKGl5IC0gc3MueSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeCA9IGl4O1xyXG4gICAgICAgICAgICAgICAgeSA9IGl5O1xyXG5cclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXc7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG94ID0gMDtcclxuICAgICAgICAgICAgICAgIG95ID0gMDtcclxuICAgICAgICAgICAgICAgIG93ID0gMDtcclxuICAgICAgICAgICAgICAgIG9oID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZmxpcFgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG94ID0gY3ggKyAoY3cgLSB4IC0gd2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKGZsaXBZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBveSA9IGN5ICsgKGNoIC0geSAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0dyA9IHRoaXMuc291cmNlLndpZHRoO1xyXG4gICAgICAgIHZhciB0aCA9IHRoaXMuc291cmNlLmhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIE1hcCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgaW50byBVViBzcGFjZSwgY2xhbXBpbmcgdG8gdGhlIDAtMSByYW5nZS5cclxuXHJcbiAgICAgICAgY3JvcC51MCA9IE1hdGgubWF4KDAsIG94IC8gdHcpO1xyXG4gICAgICAgIGNyb3AudjAgPSBNYXRoLm1heCgwLCBveSAvIHRoKTtcclxuICAgICAgICBjcm9wLnUxID0gTWF0aC5taW4oMSwgKG94ICsgb3cpIC8gdHcpO1xyXG4gICAgICAgIGNyb3AudjEgPSBNYXRoLm1pbigxLCAob3kgKyBvaCkgLyB0aCk7XHJcblxyXG4gICAgICAgIGNyb3AueCA9IHg7XHJcbiAgICAgICAgY3JvcC55ID0geTtcclxuXHJcbiAgICAgICAgY3JvcC5jeCA9IG94O1xyXG4gICAgICAgIGNyb3AuY3kgPSBveTtcclxuICAgICAgICBjcm9wLmN3ID0gb3c7XHJcbiAgICAgICAgY3JvcC5jaCA9IG9oO1xyXG5cclxuICAgICAgICBjcm9wLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGNyb3AuZmxpcFggPSBmbGlwWDtcclxuICAgICAgICBjcm9wLmZsaXBZID0gZmxpcFk7XHJcblxyXG4gICAgICAgIHJldHVybiBjcm9wO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgY3JvcCBkYXRhIG9iamVjdCBhbmQgcmVjYWxjdWxhdGVzIHRoZSBVVnMgYmFzZWQgb24gdGhlIGRpbWVuc2lvbnMgaW5zaWRlIHRoZSBjcm9wIG9iamVjdC5cclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGBzZXRGcmFtZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjdXBkYXRlQ3JvcFVWc1xyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY3JvcCAtIFRoZSBjcm9wIGRhdGEgb2JqZWN0LiBUaGlzIGlzIHRoZSBgR2FtZU9iamVjdC5fY3JvcGAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZsaXBYIC0gRG9lcyB0aGUgcGFyZW50IEdhbWUgT2JqZWN0IGhhdmUgZmxpcFggc2V0P1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmbGlwWSAtIERvZXMgdGhlIHBhcmVudCBHYW1lIE9iamVjdCBoYXZlIGZsaXBZIHNldD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSB1cGRhdGVkIGNyb3AgZGF0YSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNyb3BVVnM6IGZ1bmN0aW9uIChjcm9wLCBmbGlwWCwgZmxpcFkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q3JvcFVWcyhjcm9wLCBjcm9wLngsIGNyb3AueSwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQsIGZsaXBYLCBmbGlwWSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUgYW5kIHRoZSBkcmF3SW1hZ2UgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjdXBkYXRlVVZzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IFRoaXMgRnJhbWUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVVVnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN4ID0gdGhpcy5jdXRYO1xyXG4gICAgICAgIHZhciBjeSA9IHRoaXMuY3V0WTtcclxuICAgICAgICB2YXIgY3cgPSB0aGlzLmN1dFdpZHRoO1xyXG4gICAgICAgIHZhciBjaCA9IHRoaXMuY3V0SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyAgQ2FudmFzIGRhdGFcclxuXHJcbiAgICAgICAgdmFyIGNkID0gdGhpcy5kYXRhLmRyYXdJbWFnZTtcclxuXHJcbiAgICAgICAgY2Qud2lkdGggPSBjdztcclxuICAgICAgICBjZC5oZWlnaHQgPSBjaDtcclxuXHJcbiAgICAgICAgLy8gIFdlYkdMIGRhdGFcclxuXHJcbiAgICAgICAgdmFyIHR3ID0gdGhpcy5zb3VyY2Uud2lkdGg7XHJcbiAgICAgICAgdmFyIHRoID0gdGhpcy5zb3VyY2UuaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnUwID0gY3ggLyB0dztcclxuICAgICAgICB0aGlzLnYwID0gY3kgLyB0aDtcclxuXHJcbiAgICAgICAgdGhpcy51MSA9IChjeCArIGN3KSAvIHR3O1xyXG4gICAgICAgIHRoaXMudjEgPSAoY3kgKyBjaCkgLyB0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjdXBkYXRlVVZzSW52ZXJ0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gVGhpcyBGcmFtZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVVWc0ludmVydGVkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0dyA9IHRoaXMuc291cmNlLndpZHRoO1xyXG4gICAgICAgIHZhciB0aCA9IHRoaXMuc291cmNlLmhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy51MCA9ICh0aGlzLmN1dFggKyB0aGlzLmN1dEhlaWdodCkgLyB0dztcclxuICAgICAgICB0aGlzLnYwID0gdGhpcy5jdXRZIC8gdGg7XHJcblxyXG4gICAgICAgIHRoaXMudTEgPSB0aGlzLmN1dFggLyB0dztcclxuICAgICAgICB0aGlzLnYxID0gKHRoaXMuY3V0WSArIHRoaXMuY3V0V2lkdGgpIC8gdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lcyB0aGlzIEZyYW1lIGludG8gYSBuZXcgRnJhbWUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLkZyYW1lI2Nsb25lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IEEgY2xvbmUgb2YgdGhpcyBGcmFtZS5cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNsb25lID0gbmV3IEZyYW1lKHRoaXMudGV4dHVyZSwgdGhpcy5uYW1lLCB0aGlzLnNvdXJjZUluZGV4KTtcclxuXHJcbiAgICAgICAgY2xvbmUuY3V0WCA9IHRoaXMuY3V0WDtcclxuICAgICAgICBjbG9uZS5jdXRZID0gdGhpcy5jdXRZO1xyXG4gICAgICAgIGNsb25lLmN1dFdpZHRoID0gdGhpcy5jdXRXaWR0aDtcclxuICAgICAgICBjbG9uZS5jdXRIZWlnaHQgPSB0aGlzLmN1dEhlaWdodDtcclxuXHJcbiAgICAgICAgY2xvbmUueCA9IHRoaXMueDtcclxuICAgICAgICBjbG9uZS55ID0gdGhpcy55O1xyXG5cclxuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGNsb25lLmhhbGZXaWR0aCA9IHRoaXMuaGFsZldpZHRoO1xyXG4gICAgICAgIGNsb25lLmhhbGZIZWlnaHQgPSB0aGlzLmhhbGZIZWlnaHQ7XHJcblxyXG4gICAgICAgIGNsb25lLmNlbnRlclggPSB0aGlzLmNlbnRlclg7XHJcbiAgICAgICAgY2xvbmUuY2VudGVyWSA9IHRoaXMuY2VudGVyWTtcclxuXHJcbiAgICAgICAgY2xvbmUucm90YXRlZCA9IHRoaXMucm90YXRlZDtcclxuXHJcbiAgICAgICAgY2xvbmUuZGF0YSA9IEV4dGVuZCh0cnVlLCBjbG9uZS5kYXRhLCB0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICBjbG9uZS51cGRhdGVVVnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgRnJhbWUgYnkgbnVsbGluZyBpdHMgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgVGV4dHVyZSBhbmQgYW5kIGRhdGEgb2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXN0b21EYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgRnJhbWUgaW4gaXRzIHVuLXRyaW1tZWQsIHVuLXBhZGRlZCBzdGF0ZSwgYXMgcHJlcGFyZWQgaW4gdGhlIGFydCBwYWNrYWdlLFxyXG4gICAgICogYmVmb3JlIGJlaW5nIHBhY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjcmVhbFdpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVhbFdpZHRoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuc291cmNlU2l6ZS53O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgRnJhbWUgaW4gaXRzIHVuLXRyaW1tZWQsIHVuLXBhZGRlZCBzdGF0ZSwgYXMgcHJlcGFyZWQgaW4gdGhlIGFydCBwYWNrYWdlLFxyXG4gICAgICogYmVmb3JlIGJlaW5nIHBhY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjcmVhbEhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlYWxIZWlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zb3VyY2VTaXplLmg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBGcmFtZSAoZGVyaXZlZCBmcm9tIHNxcnQodyAqIHcgKyBoICogaCkgLyAyKVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GcmFtZSNyYWRpdXNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5yYWRpdXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgRnJhbWUgdHJpbW1lZCBvciBub3Q/XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZyYW1lI3RyaW1tZWRcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdHJpbW1lZDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRyaW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ2FudmFzIGRyYXdJbWFnZSBkYXRhIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuRnJhbWUjY2FudmFzRGF0YVxyXG4gICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNhbnZhc0RhdGE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kcmF3SW1hZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/Frame.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/Texture.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/textures/Texture.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Frame = __webpack_require__(/*! ./Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\nvar TextureSource = __webpack_require__(/*! ./TextureSource */ \"./node_modules/phaser/src/textures/TextureSource.js\");\r\n\r\nvar TEXTURE_MISSING_ERROR = 'Texture.frame missing: ';\r\n\r\n/**\r\n * @classdesc\r\n * A Texture consists of a source, usually an Image from the Cache, and a collection of Frames.\r\n * The Frames represent the different areas of the Texture. For example a texture atlas\r\n * may have many Frames, one for each element within the atlas. Where-as a single image would have\r\n * just one frame, that encompasses the whole image.\r\n * \r\n * Every Texture, no matter where it comes from, always has at least 1 frame called the `__BASE` frame.\r\n * This frame represents the entirety of the source image.\r\n *\r\n * Textures are managed by the global TextureManager. This is a singleton class that is\r\n * responsible for creating and delivering Textures and their corresponding Frames to Game Objects.\r\n *\r\n * Sprites and other Game Objects get the texture data they need from the TextureManager.\r\n *\r\n * @class Texture\r\n * @memberof Phaser.Textures\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.TextureManager} manager - A reference to the Texture Manager this Texture belongs to.\r\n * @param {string} key - The unique string-based key of this Texture.\r\n * @param {(HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[])} source - An array of sources that are used to create the texture. Usually Images, but can also be a Canvas.\r\n * @param {number} [width] - The width of the Texture. This is optional and automatically derived from the source images.\r\n * @param {number} [height] - The height of the Texture. This is optional and automatically derived from the source images.\r\n */\r\nvar Texture = new Class({\r\n\r\n    initialize:\r\n\r\n    function Texture (manager, key, source, width, height)\r\n    {\r\n        if (!Array.isArray(source))\r\n        {\r\n            source = [ source ];\r\n        }\r\n\r\n        /**\r\n         * A reference to the Texture Manager this Texture belongs to.\r\n         *\r\n         * @name Phaser.Textures.Texture#manager\r\n         * @type {Phaser.Textures.TextureManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * The unique string-based key of this Texture.\r\n         *\r\n         * @name Phaser.Textures.Texture#key\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.key = key;\r\n\r\n        /**\r\n         * An array of TextureSource instances.\r\n         * These are unique to this Texture and contain the actual Image (or Canvas) data.\r\n         *\r\n         * @name Phaser.Textures.Texture#source\r\n         * @type {Phaser.Textures.TextureSource[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.source = [];\r\n\r\n        /**\r\n         * An array of TextureSource data instances.\r\n         * Used to store additional data images, such as normal maps or specular maps.\r\n         *\r\n         * @name Phaser.Textures.Texture#dataSource\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.dataSource = [];\r\n\r\n        /**\r\n         * A key-value object pair associating the unique Frame keys with the Frames objects.\r\n         *\r\n         * @name Phaser.Textures.Texture#frames\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.frames = {};\r\n\r\n        /**\r\n         * Any additional data that was set in the source JSON (if any),\r\n         * or any extra data you'd like to store relating to this texture\r\n         *\r\n         * @name Phaser.Textures.Texture#customData\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.customData = {};\r\n\r\n        /**\r\n         * The name of the first frame of the Texture.\r\n         *\r\n         * @name Phaser.Textures.Texture#firstFrame\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.firstFrame = '__BASE';\r\n\r\n        /**\r\n         * The total number of Frames in this Texture, including the `__BASE` frame.\r\n         * \r\n         * A Texture will always contain at least 1 frame because every Texture contains a `__BASE` frame by default,\r\n         * in addition to any extra frames that have been added to it, such as when parsing a Sprite Sheet or Texture Atlas.\r\n         *\r\n         * @name Phaser.Textures.Texture#frameTotal\r\n         * @type {integer}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.frameTotal = 0;\r\n\r\n        //  Load the Sources\r\n        for (var i = 0; i < source.length; i++)\r\n        {\r\n            this.source.push(new TextureSource(this, source[i], width, height));\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds a new Frame to this Texture.\r\n     *\r\n     * A Frame is a rectangular region of a TextureSource with a unique index or string-based key.\r\n     * \r\n     * The name given must be unique within this Texture. If it already exists, this method will return `null`.\r\n     *\r\n     * @method Phaser.Textures.Texture#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|string)} name - The name of this Frame. The name is unique within the Texture.\r\n     * @param {integer} sourceIndex - The index of the TextureSource that this Frame is a part of.\r\n     * @param {number} x - The x coordinate of the top-left of this Frame.\r\n     * @param {number} y - The y coordinate of the top-left of this Frame.\r\n     * @param {number} width - The width of this Frame.\r\n     * @param {number} height - The height of this Frame.\r\n     *\r\n     * @return {?Phaser.Textures.Frame} The Frame that was added to this Texture, or `null` if the given name already exists.\r\n     */\r\n    add: function (name, sourceIndex, x, y, width, height)\r\n    {\r\n        if (this.has(name))\r\n        {\r\n            return null;\r\n        }\r\n\r\n        var frame = new Frame(this, name, sourceIndex, x, y, width, height);\r\n\r\n        this.frames[name] = frame;\r\n\r\n        //  Set the first frame of the Texture (other than __BASE)\r\n        //  This is used to ensure we don't spam the display with entire\r\n        //  atlases of sprite sheets, but instead just the first frame of them\r\n        //  should the dev incorrectly specify the frame index\r\n        if (this.firstFrame === '__BASE')\r\n        {\r\n            this.firstFrame = name;\r\n        }\r\n\r\n        this.frameTotal++;\r\n\r\n        return frame;\r\n    },\r\n\r\n    /**\r\n     * Removes the given Frame from this Texture. The Frame is destroyed immediately.\r\n     * \r\n     * Any Game Objects using this Frame should stop using it _before_ you remove it,\r\n     * as it does not happen automatically.\r\n     *\r\n     * @method Phaser.Textures.Texture#remove\r\n     * @since 3.19.0\r\n     *\r\n     * @param {string} name - The key of the Frame to remove.\r\n     *\r\n     * @return {boolean} True if a Frame with the matching key was removed from this Texture.\r\n     */\r\n    remove: function (name)\r\n    {\r\n        if (this.has(name))\r\n        {\r\n            var frame = this.get(name);\r\n\r\n            frame.destroy();\r\n\r\n            delete this.frames[name];\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Checks to see if a Frame matching the given key exists within this Texture.\r\n     *\r\n     * @method Phaser.Textures.Texture#has\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The key of the Frame to check for.\r\n     *\r\n     * @return {boolean} True if a Frame with the matching key exists in this Texture.\r\n     */\r\n    has: function (name)\r\n    {\r\n        return (this.frames[name]);\r\n    },\r\n\r\n    /**\r\n     * Gets a Frame from this Texture based on either the key or the index of the Frame.\r\n     *\r\n     * In a Texture Atlas Frames are typically referenced by a key.\r\n     * In a Sprite Sheet Frames are referenced by an index.\r\n     * Passing no value for the name returns the base texture.\r\n     *\r\n     * @method Phaser.Textures.Texture#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} [name] - The string-based name, or integer based index, of the Frame to get from this Texture.\r\n     *\r\n     * @return {Phaser.Textures.Frame} The Texture Frame.\r\n     */\r\n    get: function (name)\r\n    {\r\n        //  null, undefined, empty string, zero\r\n        if (!name)\r\n        {\r\n            name = this.firstFrame;\r\n        }\r\n\r\n        var frame = this.frames[name];\r\n\r\n        if (!frame)\r\n        {\r\n            console.warn(TEXTURE_MISSING_ERROR + name);\r\n\r\n            frame = this.frames[this.firstFrame];\r\n        }\r\n\r\n        return frame;\r\n    },\r\n\r\n    /**\r\n     * Takes the given TextureSource and returns the index of it within this Texture.\r\n     * If it's not in this Texture, it returns -1.\r\n     * Unless this Texture has multiple TextureSources, such as with a multi-atlas, this\r\n     * method will always return zero or -1.\r\n     *\r\n     * @method Phaser.Textures.Texture#getTextureSourceIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.TextureSource} source - The TextureSource to check.\r\n     *\r\n     * @return {integer} The index of the TextureSource within this Texture, or -1 if not in this Texture.\r\n     */\r\n    getTextureSourceIndex: function (source)\r\n    {\r\n        for (var i = 0; i < this.source.length; i++)\r\n        {\r\n            if (this.source[i] === source)\r\n            {\r\n                return i;\r\n            }\r\n        }\r\n\r\n        return -1;\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all the Frames in the given TextureSource.\r\n     *\r\n     * @method Phaser.Textures.Texture#getFramesFromTextureSource\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} sourceIndex - The index of the TextureSource to get the Frames from.\r\n     * @param {boolean} [includeBase=false] - Include the `__BASE` Frame in the output array?\r\n     *\r\n     * @return {Phaser.Textures.Frame[]} An array of Texture Frames.\r\n     */\r\n    getFramesFromTextureSource: function (sourceIndex, includeBase)\r\n    {\r\n        if (includeBase === undefined) { includeBase = false; }\r\n\r\n        var out = [];\r\n\r\n        for (var frameName in this.frames)\r\n        {\r\n            if (frameName === '__BASE' && !includeBase)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var frame = this.frames[frameName];\r\n\r\n            if (frame.sourceIndex === sourceIndex)\r\n            {\r\n                out.push(frame);\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Returns an array with all of the names of the Frames in this Texture.\r\n     *\r\n     * Useful if you want to randomly assign a Frame to a Game Object, as you can\r\n     * pick a random element from the returned array.\r\n     *\r\n     * @method Phaser.Textures.Texture#getFrameNames\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [includeBase=false] - Include the `__BASE` Frame in the output array?\r\n     *\r\n     * @return {string[]} An array of all Frame names in this Texture.\r\n     */\r\n    getFrameNames: function (includeBase)\r\n    {\r\n        if (includeBase === undefined) { includeBase = false; }\r\n\r\n        var out = Object.keys(this.frames);\r\n\r\n        if (!includeBase)\r\n        {\r\n            var idx = out.indexOf('__BASE');\r\n\r\n            if (idx !== -1)\r\n            {\r\n                out.splice(idx, 1);\r\n            }\r\n        }\r\n\r\n        return out;\r\n    },\r\n\r\n    /**\r\n     * Given a Frame name, return the source image it uses to render with.\r\n     *\r\n     * This will return the actual DOM Image or Canvas element.\r\n     *\r\n     * @method Phaser.Textures.Texture#getSourceImage\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer)} [name] - The string-based name, or integer based index, of the Frame to get from this Texture.\r\n     *\r\n     * @return {(HTMLImageElement|HTMLCanvasElement|Phaser.GameObjects.RenderTexture)} The DOM Image, Canvas Element or Render Texture.\r\n     */\r\n    getSourceImage: function (name)\r\n    {\r\n        if (name === undefined || name === null || this.frameTotal === 1)\r\n        {\r\n            name = '__BASE';\r\n        }\r\n\r\n        var frame = this.frames[name];\r\n\r\n        if (frame)\r\n        {\r\n            return frame.source.image;\r\n        }\r\n        else\r\n        {\r\n            console.warn(TEXTURE_MISSING_ERROR + name);\r\n\r\n            return this.frames['__BASE'].source.image;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Given a Frame name, return the data source image it uses to render with.\r\n     * You can use this to get the normal map for an image for example.\r\n     *\r\n     * This will return the actual DOM Image.\r\n     *\r\n     * @method Phaser.Textures.Texture#getDataSourceImage\r\n     * @since 3.7.0\r\n     *\r\n     * @param {(string|integer)} [name] - The string-based name, or integer based index, of the Frame to get from this Texture.\r\n     *\r\n     * @return {(HTMLImageElement|HTMLCanvasElement)} The DOM Image or Canvas Element.\r\n     */\r\n    getDataSourceImage: function (name)\r\n    {\r\n        if (name === undefined || name === null || this.frameTotal === 1)\r\n        {\r\n            name = '__BASE';\r\n        }\r\n\r\n        var frame = this.frames[name];\r\n        var idx;\r\n\r\n        if (!frame)\r\n        {\r\n            console.warn(TEXTURE_MISSING_ERROR + name);\r\n\r\n            idx = this.frames['__BASE'].sourceIndex;\r\n        }\r\n        else\r\n        {\r\n            idx = frame.sourceIndex;\r\n        }\r\n\r\n        return this.dataSource[idx].image;\r\n    },\r\n\r\n    /**\r\n     * Adds a data source image to this Texture.\r\n     *\r\n     * An example of a data source image would be a normal map, where all of the Frames for this Texture\r\n     * equally apply to the normal map.\r\n     *\r\n     * @method Phaser.Textures.Texture#setDataSource\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[])} data - The source image.\r\n     */\r\n    setDataSource: function (data)\r\n    {\r\n        if (!Array.isArray(data))\r\n        {\r\n            data = [ data ];\r\n        }\r\n        \r\n        for (var i = 0; i < data.length; i++)\r\n        {\r\n            var source = this.source[i];\r\n\r\n            this.dataSource.push(new TextureSource(this, data[i], source.width, source.height));\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the Filter Mode for this Texture.\r\n     *\r\n     * The mode can be either Linear, the default, or Nearest.\r\n     *\r\n     * For pixel-art you should use Nearest.\r\n     *\r\n     * The mode applies to the entire Texture, not just a specific Frame of it.\r\n     *\r\n     * @method Phaser.Textures.Texture#setFilter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.FilterMode} filterMode - The Filter Mode.\r\n     */\r\n    setFilter: function (filterMode)\r\n    {\r\n        var i;\r\n\r\n        for (i = 0; i < this.source.length; i++)\r\n        {\r\n            this.source[i].setFilter(filterMode);\r\n        }\r\n\r\n        for (i = 0; i < this.dataSource.length; i++)\r\n        {\r\n            this.dataSource[i].setFilter(filterMode);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Texture and releases references to its sources and frames.\r\n     *\r\n     * @method Phaser.Textures.Texture#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        var i;\r\n\r\n        for (i = 0; i < this.source.length; i++)\r\n        {\r\n            this.source[i].destroy();\r\n        }\r\n\r\n        for (i = 0; i < this.dataSource.length; i++)\r\n        {\r\n            this.dataSource[i].destroy();\r\n        }\r\n\r\n        for (var frameName in this.frames)\r\n        {\r\n            var frame = this.frames[frameName];\r\n\r\n            frame.destroy();\r\n        }\r\n\r\n        this.source = [];\r\n        this.dataSource = [];\r\n        this.frames = {};\r\n\r\n        this.manager.removeKey(this.key);\r\n\r\n        this.manager = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Texture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9UZXh0dXJlLmpzP2I3ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDREQUFTO0FBQzdCLG9CQUFvQixtQkFBTyxDQUFDLDRFQUFpQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0JBQStCO0FBQzFDLFdBQVcsT0FBTztBQUNsQixXQUFXLDRFQUE0RTtBQUN2RixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQjs7QUFFN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxxQkFBcUI7O0FBRTdEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isc0VBQXNFO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsNEJBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiw0QkFBNEI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9UZXh0dXJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRnJhbWUgPSByZXF1aXJlKCcuL0ZyYW1lJyk7XHJcbnZhciBUZXh0dXJlU291cmNlID0gcmVxdWlyZSgnLi9UZXh0dXJlU291cmNlJyk7XHJcblxyXG52YXIgVEVYVFVSRV9NSVNTSU5HX0VSUk9SID0gJ1RleHR1cmUuZnJhbWUgbWlzc2luZzogJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGV4dHVyZSBjb25zaXN0cyBvZiBhIHNvdXJjZSwgdXN1YWxseSBhbiBJbWFnZSBmcm9tIHRoZSBDYWNoZSwgYW5kIGEgY29sbGVjdGlvbiBvZiBGcmFtZXMuXHJcbiAqIFRoZSBGcmFtZXMgcmVwcmVzZW50IHRoZSBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIFRleHR1cmUuIEZvciBleGFtcGxlIGEgdGV4dHVyZSBhdGxhc1xyXG4gKiBtYXkgaGF2ZSBtYW55IEZyYW1lcywgb25lIGZvciBlYWNoIGVsZW1lbnQgd2l0aGluIHRoZSBhdGxhcy4gV2hlcmUtYXMgYSBzaW5nbGUgaW1hZ2Ugd291bGQgaGF2ZVxyXG4gKiBqdXN0IG9uZSBmcmFtZSwgdGhhdCBlbmNvbXBhc3NlcyB0aGUgd2hvbGUgaW1hZ2UuXHJcbiAqIFxyXG4gKiBFdmVyeSBUZXh0dXJlLCBubyBtYXR0ZXIgd2hlcmUgaXQgY29tZXMgZnJvbSwgYWx3YXlzIGhhcyBhdCBsZWFzdCAxIGZyYW1lIGNhbGxlZCB0aGUgYF9fQkFTRWAgZnJhbWUuXHJcbiAqIFRoaXMgZnJhbWUgcmVwcmVzZW50cyB0aGUgZW50aXJldHkgb2YgdGhlIHNvdXJjZSBpbWFnZS5cclxuICpcclxuICogVGV4dHVyZXMgYXJlIG1hbmFnZWQgYnkgdGhlIGdsb2JhbCBUZXh0dXJlTWFuYWdlci4gVGhpcyBpcyBhIHNpbmdsZXRvbiBjbGFzcyB0aGF0IGlzXHJcbiAqIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgZGVsaXZlcmluZyBUZXh0dXJlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBGcmFtZXMgdG8gR2FtZSBPYmplY3RzLlxyXG4gKlxyXG4gKiBTcHJpdGVzIGFuZCBvdGhlciBHYW1lIE9iamVjdHMgZ2V0IHRoZSB0ZXh0dXJlIGRhdGEgdGhleSBuZWVkIGZyb20gdGhlIFRleHR1cmVNYW5hZ2VyLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGV4dHVyZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9IG1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyIHRoaXMgVGV4dHVyZSBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoaXMgVGV4dHVyZS5cclxuICogQHBhcmFtIHsoSFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50W118SFRNTENhbnZhc0VsZW1lbnRbXSl9IHNvdXJjZSAtIEFuIGFycmF5IG9mIHNvdXJjZXMgdGhhdCBhcmUgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuIFVzdWFsbHkgSW1hZ2VzLCBidXQgY2FuIGFsc28gYmUgYSBDYW52YXMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBUZXh0dXJlLiBUaGlzIGlzIG9wdGlvbmFsIGFuZCBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIGltYWdlcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZS4gVGhpcyBpcyBvcHRpb25hbCBhbmQgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBpbWFnZXMuXHJcbiAqL1xyXG52YXIgVGV4dHVyZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUZXh0dXJlIChtYW5hZ2VyLCBrZXksIHNvdXJjZSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc291cmNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdXJjZSA9IFsgc291cmNlIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyIHRoaXMgVGV4dHVyZSBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmUjbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoaXMgVGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFRleHR1cmVTb3VyY2UgaW5zdGFuY2VzLlxyXG4gICAgICAgICAqIFRoZXNlIGFyZSB1bmlxdWUgdG8gdGhpcyBUZXh0dXJlIGFuZCBjb250YWluIHRoZSBhY3R1YWwgSW1hZ2UgKG9yIENhbnZhcykgZGF0YS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI3NvdXJjZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFRleHR1cmVTb3VyY2UgZGF0YSBpbnN0YW5jZXMuXHJcbiAgICAgICAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGRhdGEgaW1hZ2VzLCBzdWNoIGFzIG5vcm1hbCBtYXBzIG9yIHNwZWN1bGFyIG1hcHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNkYXRhU291cmNlXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGtleS12YWx1ZSBvYmplY3QgcGFpciBhc3NvY2lhdGluZyB0aGUgdW5pcXVlIEZyYW1lIGtleXMgd2l0aCB0aGUgRnJhbWVzIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNmcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVzID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFueSBhZGRpdGlvbmFsIGRhdGEgdGhhdCB3YXMgc2V0IGluIHRoZSBzb3VyY2UgSlNPTiAoaWYgYW55KSxcclxuICAgICAgICAgKiBvciBhbnkgZXh0cmEgZGF0YSB5b3UnZCBsaWtlIHRvIHN0b3JlIHJlbGF0aW5nIHRvIHRoaXMgdGV4dHVyZVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmUjY3VzdG9tRGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21EYXRhID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBmaXJzdCBmcmFtZSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2ZpcnN0RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlyc3RGcmFtZSA9ICdfX0JBU0UnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIEZyYW1lcyBpbiB0aGlzIFRleHR1cmUsIGluY2x1ZGluZyB0aGUgYF9fQkFTRWAgZnJhbWUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQSBUZXh0dXJlIHdpbGwgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3QgMSBmcmFtZSBiZWNhdXNlIGV2ZXJ5IFRleHR1cmUgY29udGFpbnMgYSBgX19CQVNFYCBmcmFtZSBieSBkZWZhdWx0LFxyXG4gICAgICAgICAqIGluIGFkZGl0aW9uIHRvIGFueSBleHRyYSBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gaXQsIHN1Y2ggYXMgd2hlbiBwYXJzaW5nIGEgU3ByaXRlIFNoZWV0IG9yIFRleHR1cmUgQXRsYXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNmcmFtZVRvdGFsXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVUb3RhbCA9IDA7XHJcblxyXG4gICAgICAgIC8vICBMb2FkIHRoZSBTb3VyY2VzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKG5ldyBUZXh0dXJlU291cmNlKHRoaXMsIHNvdXJjZVtpXSwgd2lkdGgsIGhlaWdodCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IEZyYW1lIHRvIHRoaXMgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBBIEZyYW1lIGlzIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIGEgVGV4dHVyZVNvdXJjZSB3aXRoIGEgdW5pcXVlIGluZGV4IG9yIHN0cmluZy1iYXNlZCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBuYW1lIGdpdmVuIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGlzIFRleHR1cmUuIElmIGl0IGFscmVhZHkgZXhpc3RzLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBgbnVsbGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8c3RyaW5nKX0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoaXMgRnJhbWUuIFRoZSBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHNvdXJjZUluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBUZXh0dXJlU291cmNlIHRoYXQgdGhpcyBGcmFtZSBpcyBhIHBhcnQgb2YuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoaXMgRnJhbWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoaXMgRnJhbWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhpcyBGcmFtZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgRnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gVGhlIEZyYW1lIHRoYXQgd2FzIGFkZGVkIHRvIHRoaXMgVGV4dHVyZSwgb3IgYG51bGxgIGlmIHRoZSBnaXZlbiBuYW1lIGFscmVhZHkgZXhpc3RzLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2VJbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZSA9IG5ldyBGcmFtZSh0aGlzLCBuYW1lLCBzb3VyY2VJbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzW25hbWVdID0gZnJhbWU7XHJcblxyXG4gICAgICAgIC8vICBTZXQgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBUZXh0dXJlIChvdGhlciB0aGFuIF9fQkFTRSlcclxuICAgICAgICAvLyAgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBzcGFtIHRoZSBkaXNwbGF5IHdpdGggZW50aXJlXHJcbiAgICAgICAgLy8gIGF0bGFzZXMgb2Ygc3ByaXRlIHNoZWV0cywgYnV0IGluc3RlYWQganVzdCB0aGUgZmlyc3QgZnJhbWUgb2YgdGhlbVxyXG4gICAgICAgIC8vICBzaG91bGQgdGhlIGRldiBpbmNvcnJlY3RseSBzcGVjaWZ5IHRoZSBmcmFtZSBpbmRleFxyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0RnJhbWUgPT09ICdfX0JBU0UnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdEZyYW1lID0gbmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVUb3RhbCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gZnJhbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gRnJhbWUgZnJvbSB0aGlzIFRleHR1cmUuIFRoZSBGcmFtZSBpcyBkZXN0cm95ZWQgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIEFueSBHYW1lIE9iamVjdHMgdXNpbmcgdGhpcyBGcmFtZSBzaG91bGQgc3RvcCB1c2luZyBpdCBfYmVmb3JlXyB5b3UgcmVtb3ZlIGl0LFxyXG4gICAgICogYXMgaXQgZG9lcyBub3QgaGFwcGVuIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNyZW1vdmVcclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBrZXkgb2YgdGhlIEZyYW1lIHRvIHJlbW92ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgRnJhbWUgd2l0aCB0aGUgbWF0Y2hpbmcga2V5IHdhcyByZW1vdmVkIGZyb20gdGhpcyBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuZ2V0KG5hbWUpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWUuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhbWVzW25hbWVdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhIEZyYW1lIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkgZXhpc3RzIHdpdGhpbiB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIGtleSBvZiB0aGUgRnJhbWUgdG8gY2hlY2sgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBGcmFtZSB3aXRoIHRoZSBtYXRjaGluZyBrZXkgZXhpc3RzIGluIHRoaXMgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZnJhbWVzW25hbWVdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgRnJhbWUgZnJvbSB0aGlzIFRleHR1cmUgYmFzZWQgb24gZWl0aGVyIHRoZSBrZXkgb3IgdGhlIGluZGV4IG9mIHRoZSBGcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBJbiBhIFRleHR1cmUgQXRsYXMgRnJhbWVzIGFyZSB0eXBpY2FsbHkgcmVmZXJlbmNlZCBieSBhIGtleS5cclxuICAgICAqIEluIGEgU3ByaXRlIFNoZWV0IEZyYW1lcyBhcmUgcmVmZXJlbmNlZCBieSBhbiBpbmRleC5cclxuICAgICAqIFBhc3Npbmcgbm8gdmFsdWUgZm9yIHRoZSBuYW1lIHJldHVybnMgdGhlIGJhc2UgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbbmFtZV0gLSBUaGUgc3RyaW5nLWJhc2VkIG5hbWUsIG9yIGludGVnZXIgYmFzZWQgaW5kZXgsIG9mIHRoZSBGcmFtZSB0byBnZXQgZnJvbSB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBUaGUgVGV4dHVyZSBGcmFtZS5cclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgbnVsbCwgdW5kZWZpbmVkLCBlbXB0eSBzdHJpbmcsIHplcm9cclxuICAgICAgICBpZiAoIW5hbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lID0gdGhpcy5maXJzdEZyYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5mcmFtZXNbbmFtZV07XHJcblxyXG4gICAgICAgIGlmICghZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oVEVYVFVSRV9NSVNTSU5HX0VSUk9SICsgbmFtZSk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZSA9IHRoaXMuZnJhbWVzW3RoaXMuZmlyc3RGcmFtZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZnJhbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgdGhlIGdpdmVuIFRleHR1cmVTb3VyY2UgYW5kIHJldHVybnMgdGhlIGluZGV4IG9mIGl0IHdpdGhpbiB0aGlzIFRleHR1cmUuXHJcbiAgICAgKiBJZiBpdCdzIG5vdCBpbiB0aGlzIFRleHR1cmUsIGl0IHJldHVybnMgLTEuXHJcbiAgICAgKiBVbmxlc3MgdGhpcyBUZXh0dXJlIGhhcyBtdWx0aXBsZSBUZXh0dXJlU291cmNlcywgc3VjaCBhcyB3aXRoIGEgbXVsdGktYXRsYXMsIHRoaXNcclxuICAgICAqIG1ldGhvZCB3aWxsIGFsd2F5cyByZXR1cm4gemVybyBvciAtMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldFRleHR1cmVTb3VyY2VJbmRleFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZX0gc291cmNlIC0gVGhlIFRleHR1cmVTb3VyY2UgdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGluZGV4IG9mIHRoZSBUZXh0dXJlU291cmNlIHdpdGhpbiB0aGlzIFRleHR1cmUsIG9yIC0xIGlmIG5vdCBpbiB0aGlzIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVTb3VyY2VJbmRleDogZnVuY3Rpb24gKHNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc291cmNlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW2ldID09PSBzb3VyY2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIEZyYW1lcyBpbiB0aGUgZ2l2ZW4gVGV4dHVyZVNvdXJjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldEZyYW1lc0Zyb21UZXh0dXJlU291cmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHNvdXJjZUluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBUZXh0dXJlU291cmNlIHRvIGdldCB0aGUgRnJhbWVzIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlQmFzZT1mYWxzZV0gLSBJbmNsdWRlIHRoZSBgX19CQVNFYCBGcmFtZSBpbiB0aGUgb3V0cHV0IGFycmF5P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5GcmFtZVtdfSBBbiBhcnJheSBvZiBUZXh0dXJlIEZyYW1lcy5cclxuICAgICAqL1xyXG4gICAgZ2V0RnJhbWVzRnJvbVRleHR1cmVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2VJbmRleCwgaW5jbHVkZUJhc2UpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVCYXNlID09PSB1bmRlZmluZWQpIHsgaW5jbHVkZUJhc2UgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGZyYW1lTmFtZSBpbiB0aGlzLmZyYW1lcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChmcmFtZU5hbWUgPT09ICdfX0JBU0UnICYmICFpbmNsdWRlQmFzZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuZnJhbWVzW2ZyYW1lTmFtZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZnJhbWUuc291cmNlSW5kZXggPT09IHNvdXJjZUluZGV4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChmcmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCBvZiB0aGUgbmFtZXMgb2YgdGhlIEZyYW1lcyBpbiB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIHJhbmRvbWx5IGFzc2lnbiBhIEZyYW1lIHRvIGEgR2FtZSBPYmplY3QsIGFzIHlvdSBjYW5cclxuICAgICAqIHBpY2sgYSByYW5kb20gZWxlbWVudCBmcm9tIHRoZSByZXR1cm5lZCBhcnJheS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldEZyYW1lTmFtZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVCYXNlPWZhbHNlXSAtIEluY2x1ZGUgdGhlIGBfX0JBU0VgIEZyYW1lIGluIHRoZSBvdXRwdXQgYXJyYXk/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIGFsbCBGcmFtZSBuYW1lcyBpbiB0aGlzIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIGdldEZyYW1lTmFtZXM6IGZ1bmN0aW9uIChpbmNsdWRlQmFzZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaW5jbHVkZUJhc2UgPT09IHVuZGVmaW5lZCkgeyBpbmNsdWRlQmFzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBvdXQgPSBPYmplY3Qua2V5cyh0aGlzLmZyYW1lcyk7XHJcblxyXG4gICAgICAgIGlmICghaW5jbHVkZUJhc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ19fQkFTRScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIEZyYW1lIG5hbWUsIHJldHVybiB0aGUgc291cmNlIGltYWdlIGl0IHVzZXMgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIHJldHVybiB0aGUgYWN0dWFsIERPTSBJbWFnZSBvciBDYW52YXMgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldFNvdXJjZUltYWdlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtuYW1lXSAtIFRoZSBzdHJpbmctYmFzZWQgbmFtZSwgb3IgaW50ZWdlciBiYXNlZCBpbmRleCwgb2YgdGhlIEZyYW1lIHRvIGdldCBmcm9tIHRoaXMgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoSFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudHxQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSl9IFRoZSBET00gSW1hZ2UsIENhbnZhcyBFbGVtZW50IG9yIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICBnZXRTb3VyY2VJbWFnZTogZnVuY3Rpb24gKG5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSBudWxsIHx8IHRoaXMuZnJhbWVUb3RhbCA9PT0gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWUgPSAnX19CQVNFJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZSA9IHRoaXMuZnJhbWVzW25hbWVdO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZnJhbWUuc291cmNlLmltYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oVEVYVFVSRV9NSVNTSU5HX0VSUk9SICsgbmFtZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFtZXNbJ19fQkFTRSddLnNvdXJjZS5pbWFnZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBGcmFtZSBuYW1lLCByZXR1cm4gdGhlIGRhdGEgc291cmNlIGltYWdlIGl0IHVzZXMgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIGdldCB0aGUgbm9ybWFsIG1hcCBmb3IgYW4gaW1hZ2UgZm9yIGV4YW1wbGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIHJldHVybiB0aGUgYWN0dWFsIERPTSBJbWFnZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI2dldERhdGFTb3VyY2VJbWFnZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbbmFtZV0gLSBUaGUgc3RyaW5nLWJhc2VkIG5hbWUsIG9yIGludGVnZXIgYmFzZWQgaW5kZXgsIG9mIHRoZSBGcmFtZSB0byBnZXQgZnJvbSB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KEhUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnQpfSBUaGUgRE9NIEltYWdlIG9yIENhbnZhcyBFbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBnZXREYXRhU291cmNlSW1hZ2U6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PT0gbnVsbCB8fCB0aGlzLmZyYW1lVG90YWwgPT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lID0gJ19fQkFTRSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmZyYW1lc1tuYW1lXTtcclxuICAgICAgICB2YXIgaWR4O1xyXG5cclxuICAgICAgICBpZiAoIWZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFRFWFRVUkVfTUlTU0lOR19FUlJPUiArIG5hbWUpO1xyXG5cclxuICAgICAgICAgICAgaWR4ID0gdGhpcy5mcmFtZXNbJ19fQkFTRSddLnNvdXJjZUluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZHggPSBmcmFtZS5zb3VyY2VJbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2VbaWR4XS5pbWFnZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgZGF0YSBzb3VyY2UgaW1hZ2UgdG8gdGhpcyBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEFuIGV4YW1wbGUgb2YgYSBkYXRhIHNvdXJjZSBpbWFnZSB3b3VsZCBiZSBhIG5vcm1hbCBtYXAsIHdoZXJlIGFsbCBvZiB0aGUgRnJhbWVzIGZvciB0aGlzIFRleHR1cmVcclxuICAgICAqIGVxdWFsbHkgYXBwbHkgdG8gdGhlIG5vcm1hbCBtYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSNzZXREYXRhU291cmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnRbXXxIVE1MQ2FudmFzRWxlbWVudFtdKX0gZGF0YSAtIFRoZSBzb3VyY2UgaW1hZ2UuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFTb3VyY2U6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBbIGRhdGEgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuc291cmNlW2ldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLnB1c2gobmV3IFRleHR1cmVTb3VyY2UodGhpcywgZGF0YVtpXSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEZpbHRlciBNb2RlIGZvciB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZGUgY2FuIGJlIGVpdGhlciBMaW5lYXIsIHRoZSBkZWZhdWx0LCBvciBOZWFyZXN0LlxyXG4gICAgICpcclxuICAgICAqIEZvciBwaXhlbC1hcnQgeW91IHNob3VsZCB1c2UgTmVhcmVzdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9kZSBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgVGV4dHVyZSwgbm90IGp1c3QgYSBzcGVjaWZpYyBGcmFtZSBvZiBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlI3NldEZpbHRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuRmlsdGVyTW9kZX0gZmlsdGVyTW9kZSAtIFRoZSBGaWx0ZXIgTW9kZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyTW9kZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc291cmNlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VbaV0uc2V0RmlsdGVyKGZpbHRlck1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVtpXS5zZXRGaWx0ZXIoZmlsdGVyTW9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgVGV4dHVyZSBhbmQgcmVsZWFzZXMgcmVmZXJlbmNlcyB0byBpdHMgc291cmNlcyBhbmQgZnJhbWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmUjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNvdXJjZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgZnJhbWVOYW1lIGluIHRoaXMuZnJhbWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5mcmFtZXNbZnJhbWVOYW1lXTtcclxuXHJcbiAgICAgICAgICAgIGZyYW1lLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc291cmNlID0gW107XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgdGhpcy5mcmFtZXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnJlbW92ZUtleSh0aGlzLmtleSk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/Texture.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/TextureManager.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/textures/TextureManager.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar CanvasTexture = __webpack_require__(/*! ./CanvasTexture */ \"./node_modules/phaser/src/textures/CanvasTexture.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Color = __webpack_require__(/*! ../display/color/Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/textures/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GenerateTexture = __webpack_require__(/*! ../create/GenerateTexture */ \"./node_modules/phaser/src/create/GenerateTexture.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Parser = __webpack_require__(/*! ./parsers */ \"./node_modules/phaser/src/textures/parsers/index.js\");\r\nvar Texture = __webpack_require__(/*! ./Texture */ \"./node_modules/phaser/src/textures/Texture.js\");\r\n\r\n/**\r\n * @callback EachTextureCallback\r\n *\r\n * @param {Phaser.Textures.Texture} texture - Each texture in Texture Manager.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * Textures are managed by the global TextureManager. This is a singleton class that is\r\n * responsible for creating and delivering Textures and their corresponding Frames to Game Objects.\r\n *\r\n * Sprites and other Game Objects get the texture data they need from the TextureManager.\r\n *\r\n * Access it via `scene.textures`.\r\n *\r\n * @class TextureManager\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Textures\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance this Texture Manager belongs to.\r\n */\r\nvar TextureManager = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function TextureManager (game)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Game that this TextureManager belongs to.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#game\r\n         * @type {Phaser.Game}\r\n         * @since 3.0.0\r\n         */\r\n        this.game = game;\r\n\r\n        /**\r\n         * The name of this manager.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = 'TextureManager';\r\n\r\n        /**\r\n         * An object that has all of textures that Texture Manager creates.\r\n         * Textures are assigned to keys so we can access to any texture that this object has directly by key value without iteration.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#list\r\n         * @type {object}\r\n         * @default {}\r\n         * @since 3.0.0\r\n         */\r\n        this.list = {};\r\n\r\n        /**\r\n         * The temporary canvas element to save an pixel data of an arbitrary texture in getPixel() and getPixelAlpha() method.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#_tempCanvas\r\n         * @type {HTMLCanvasElement}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempCanvas = CanvasPool.create2D(this, 1, 1);\r\n\r\n        /**\r\n         * The context of the temporary canvas element made to save an pixel data in getPixel() and getPixelAlpha() method.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#_tempContext\r\n         * @type {CanvasRenderingContext2D}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._tempContext = this._tempCanvas.getContext('2d');\r\n\r\n        /**\r\n         * An counting value used for emitting 'ready' event after all of managers in game is loaded.\r\n         *\r\n         * @name Phaser.Textures.TextureManager#_pending\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._pending = 0;\r\n\r\n        game.events.once(GameEvents.BOOT, this.boot, this);\r\n    },\r\n\r\n    /**\r\n     * The Boot Handler called by Phaser.Game when it first starts up.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#boot\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    boot: function ()\r\n    {\r\n        this._pending = 2;\r\n\r\n        this.on(Events.LOAD, this.updatePending, this);\r\n        this.on(Events.ERROR, this.updatePending, this);\r\n\r\n        this.addBase64('__DEFAULT', this.game.config.defaultImage);\r\n        this.addBase64('__MISSING', this.game.config.missingImage);\r\n\r\n        this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * After 'onload' or 'onerror' invoked twice, emit 'ready' event.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#updatePending\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    updatePending: function ()\r\n    {\r\n        this._pending--;\r\n\r\n        if (this._pending === 0)\r\n        {\r\n            this.off(Events.LOAD);\r\n            this.off(Events.ERROR);\r\n\r\n            this.emit(Events.READY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Checks the given texture key and throws a console.warn if the key is already in use, then returns false.\r\n     * If you wish to avoid the console.warn then use `TextureManager.exists` instead.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#checkKey\r\n     * @since 3.7.0\r\n     *\r\n     * @param {string} key - The texture key to check.\r\n     *\r\n     * @return {boolean} `true` if it's safe to use the texture key, otherwise `false`.\r\n     */\r\n    checkKey: function (key)\r\n    {\r\n        if (this.exists(key))\r\n        {\r\n            // eslint-disable-next-line no-console\r\n            console.error('Texture key already in use: ' + key);\r\n\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Removes a Texture from the Texture Manager and destroys it. This will immediately\r\n     * clear all references to it from the Texture Manager, and if it has one, destroy its\r\n     * WebGLTexture. This will emit a `removetexture` event.\r\n     *\r\n     * Note: If you have any Game Objects still using this texture they will start throwing\r\n     * errors the next time they try to render. Make sure that removing the texture is the final\r\n     * step when clearing down to avoid this.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#remove\r\n     * @fires Phaser.Textures.Events#REMOVE\r\n     * @since 3.7.0\r\n     *\r\n     * @param {(string|Phaser.Textures.Texture)} key - The key of the Texture to remove, or a reference to it.\r\n     *\r\n     * @return {Phaser.Textures.TextureManager} The Texture Manager.\r\n     */\r\n    remove: function (key)\r\n    {\r\n        if (typeof key === 'string')\r\n        {\r\n            if (this.exists(key))\r\n            {\r\n                key = this.get(key);\r\n            }\r\n            else\r\n            {\r\n                console.warn('No texture found matching key: ' + key);\r\n                return this;\r\n            }\r\n        }\r\n\r\n        //  By this point key should be a Texture, if not, the following fails anyway\r\n        if (this.list.hasOwnProperty(key.key))\r\n        {\r\n            key.destroy();\r\n\r\n            this.emit(Events.REMOVE, key.key);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes a key from the Texture Manager but does not destroy the Texture that was using the key.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#removeKey\r\n     * @since 3.17.0\r\n     *\r\n     * @param {string} key - The key to remove from the texture list.\r\n     *\r\n     * @return {Phaser.Textures.TextureManager} The Texture Manager.\r\n     */\r\n    removeKey: function (key)\r\n    {\r\n        if (this.list.hasOwnProperty(key))\r\n        {\r\n            delete this.list[key];\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds a new Texture to the Texture Manager created from the given Base64 encoded data.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addBase64\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @fires Phaser.Textures.Events#ERROR\r\n     * @fires Phaser.Textures.Events#LOAD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {*} data - The Base64 encoded data.\r\n     * \r\n     * @return {this} This Texture Manager instance.\r\n     */\r\n    addBase64: function (key, data)\r\n    {\r\n        if (this.checkKey(key))\r\n        {\r\n            var _this = this;\r\n\r\n            var image = new Image();\r\n\r\n            image.onerror = function ()\r\n            {\r\n                _this.emit(Events.ERROR, key);\r\n            };\r\n\r\n            image.onload = function ()\r\n            {\r\n                var texture = _this.create(key, image);\r\n\r\n                Parser.Image(texture, 0);\r\n\r\n                _this.emit(Events.ADD, key, texture);\r\n\r\n                _this.emit(Events.LOAD, key, texture);\r\n            };\r\n\r\n            image.src = data;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets an existing texture frame and converts it into a base64 encoded image and returns the base64 data.\r\n     * \r\n     * You can also provide the image type and encoder options.\r\n     * \r\n     * This will only work with bitmap based texture frames, such as those created from Texture Atlases.\r\n     * It will not work with GL Texture objects, such as Shaders, or Render Textures. For those please\r\n     * see the WebGL Snapshot function instead.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#getBase64\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string-based name, or integer based index, of the Frame to get from the Texture.\r\n     * @param {string} [type='image/png'] - [description]\r\n     * @param {number} [encoderOptions=0.92] - [description]\r\n     * \r\n     * @return {string} The base64 encoded data, or an empty string if the texture frame could not be found.\r\n     */\r\n    getBase64: function (key, frame, type, encoderOptions)\r\n    {\r\n        if (type === undefined) { type = 'image/png'; }\r\n        if (encoderOptions === undefined) { encoderOptions = 0.92; }\r\n\r\n        var data = '';\r\n\r\n        var textureFrame = this.getFrame(key, frame);\r\n\r\n        if (textureFrame && (textureFrame.source.isRenderTexture || textureFrame.source.isGLTexture))\r\n        {\r\n            console.warn('Cannot getBase64 from WebGL Texture');\r\n        }\r\n        else if (textureFrame)\r\n        {\r\n            var cd = textureFrame.canvasData;\r\n\r\n            var canvas = CanvasPool.create2D(this, cd.width, cd.height);\r\n            var ctx = canvas.getContext('2d');\r\n\r\n            ctx.drawImage(\r\n                textureFrame.source.image,\r\n                cd.x,\r\n                cd.y,\r\n                cd.width,\r\n                cd.height,\r\n                0,\r\n                0,\r\n                cd.width,\r\n                cd.height\r\n            );\r\n\r\n            data = canvas.toDataURL(type, encoderOptions);\r\n\r\n            CanvasPool.remove(canvas);\r\n        }\r\n\r\n        return data;\r\n    },\r\n\r\n    /**\r\n     * Adds a new Texture to the Texture Manager created from the given Image element.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addImage\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {HTMLImageElement|HTMLCanvasElement} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addImage: function (key, source, dataSource)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n\r\n            Parser.Image(texture, 0);\r\n\r\n            if (dataSource)\r\n            {\r\n                texture.setDataSource(dataSource);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n        \r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Takes a WebGL Texture and creates a Phaser Texture from it, which is added to the Texture Manager using the given key.\r\n     * \r\n     * This allows you to then use the Texture as a normal texture for texture based Game Objects like Sprites.\r\n     * \r\n     * This is a WebGL only feature.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addGLTexture\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.19.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {WebGLTexture} glTexture - The source Render Texture.\r\n     * @param {number} width - The new width of the Texture.\r\n     * @param {number} height - The new height of the Texture.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addGLTexture: function (key, glTexture, width, height)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, glTexture, width, height);\r\n\r\n            texture.add('__BASE', 0, 0, 0, width, height);\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n        \r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Render Texture to the Texture Manager using the given key.\r\n     * This allows you to then use the Render Texture as a normal texture for texture based Game Objects like Sprites.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addRenderTexture\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {Phaser.GameObjects.RenderTexture} renderTexture - The source Render Texture.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addRenderTexture: function (key, renderTexture)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, renderTexture);\r\n\r\n            texture.add('__BASE', 0, 0, 0, renderTexture.width, renderTexture.height);\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n        \r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Texture using the given config values.\r\n     * Generated textures consist of a Canvas element to which the texture data is drawn.\r\n     * See the Phaser.Create function for the more direct way to create textures.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#generate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {object} config - The configuration object needed to generate the texture.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    generate: function (key, config)\r\n    {\r\n        if (this.checkKey(key))\r\n        {\r\n            var canvas = CanvasPool.create(this, 1, 1);\r\n\r\n            config.canvas = canvas;\r\n\r\n            GenerateTexture(config);\r\n\r\n            return this.addCanvas(key, canvas);\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a new Texture using a blank Canvas element of the size given.\r\n     *\r\n     * Canvas elements are automatically pooled and calling this method will\r\n     * extract a free canvas from the CanvasPool, or create one if none are available.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#createCanvas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {integer} [width=256] - The width of the Canvas element.\r\n     * @param {integer} [height=256] - The height of the Canvas element.\r\n     *\r\n     * @return {?Phaser.Textures.CanvasTexture} The Canvas Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    createCanvas: function (key, width, height)\r\n    {\r\n        if (width === undefined) { width = 256; }\r\n        if (height === undefined) { height = 256; }\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            var canvas = CanvasPool.create(this, width, height, CONST.CANVAS, true);\r\n\r\n            return this.addCanvas(key, canvas);\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Creates a new Canvas Texture object from an existing Canvas element\r\n     * and adds it to this Texture Manager, unless `skipCache` is true.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addCanvas\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLCanvasElement} source - The Canvas element to form the base of the new Texture.\r\n     * @param {boolean} [skipCache=false] - Skip adding this Texture into the Cache?\r\n     *\r\n     * @return {?Phaser.Textures.CanvasTexture} The Canvas Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addCanvas: function (key, source, skipCache)\r\n    {\r\n        if (skipCache === undefined) { skipCache = false; }\r\n\r\n        var texture = null;\r\n\r\n        if (skipCache)\r\n        {\r\n            texture = new CanvasTexture(this, key, source, source.width, source.height);\r\n        }\r\n        else if (this.checkKey(key))\r\n        {\r\n            texture = new CanvasTexture(this, key, source, source.width, source.height);\r\n\r\n            this.list[key] = texture;\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a new Texture Atlas to this Texture Manager.\r\n     * It can accept either JSON Array or JSON Hash formats, as exported by Texture Packer and similar software.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addAtlas\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {object} data - The Texture Atlas data.\r\n     * @param {HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[]} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addAtlas: function (key, source, data, dataSource)\r\n    {\r\n        //  New Texture Packer format?\r\n        if (Array.isArray(data.textures) || Array.isArray(data.frames))\r\n        {\r\n            return this.addAtlasJSONArray(key, source, data, dataSource);\r\n        }\r\n        else\r\n        {\r\n            return this.addAtlasJSONHash(key, source, data, dataSource);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Adds a Texture Atlas to this Texture Manager.\r\n     * The frame data of the atlas must be stored in an Array within the JSON.\r\n     * This is known as a JSON Array in software such as Texture Packer.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addAtlasJSONArray\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(HTMLImageElement|HTMLImageElement[])} source - The source Image element/s.\r\n     * @param {(object|object[])} data - The Texture Atlas data/s.\r\n     * @param {HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[]} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addAtlasJSONArray: function (key, source, data, dataSource)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n\r\n            //  Multi-Atlas?\r\n            if (Array.isArray(data))\r\n            {\r\n                var singleAtlasFile = (data.length === 1); // multi-pack with one atlas file for all images\r\n\r\n                //  !! Assumes the textures are in the same order in the source array as in the json data !!\r\n                for (var i = 0; i < texture.source.length; i++)\r\n                {\r\n                    var atlasData = singleAtlasFile ? data[0] : data[i];\r\n\r\n                    Parser.JSONArray(texture, i, atlasData);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Parser.JSONArray(texture, 0, data);\r\n            }\r\n\r\n            if (dataSource)\r\n            {\r\n                texture.setDataSource(dataSource);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Texture Atlas to this Texture Manager.\r\n     * The frame data of the atlas must be stored in an Object within the JSON.\r\n     * This is known as a JSON Hash in software such as Texture Packer.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addAtlasJSONHash\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {object} data - The Texture Atlas data.\r\n     * @param {HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[]} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addAtlasJSONHash: function (key, source, data, dataSource)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n\r\n            if (Array.isArray(data))\r\n            {\r\n                for (var i = 0; i < data.length; i++)\r\n                {\r\n                    Parser.JSONHash(texture, i, data[i]);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Parser.JSONHash(texture, 0, data);\r\n            }\r\n\r\n            if (dataSource)\r\n            {\r\n                texture.setDataSource(dataSource);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Texture Atlas to this Texture Manager, where the atlas data is given\r\n     * in the XML format.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addAtlasXML\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.7.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {object} data - The Texture Atlas XML data.\r\n     * @param {HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[]} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addAtlasXML: function (key, source, data, dataSource)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n            \r\n            Parser.AtlasXML(texture, 0, data);\r\n\r\n            if (dataSource)\r\n            {\r\n                texture.setDataSource(dataSource);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Unity Texture Atlas to this Texture Manager.\r\n     * The data must be in the form of a Unity YAML file.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addUnityAtlas\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {object} data - The Texture Atlas data.\r\n     * @param {HTMLImageElement|HTMLCanvasElement|HTMLImageElement[]|HTMLCanvasElement[]} [dataSource] - An optional data Image element.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addUnityAtlas: function (key, source, data, dataSource)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n\r\n            Parser.UnityYAML(texture, 0, data);\r\n\r\n            if (dataSource)\r\n            {\r\n                texture.setDataSource(dataSource);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Sprite Sheet to this Texture Manager.\r\n     *\r\n     * In Phaser terminology a Sprite Sheet is a texture containing different frames, but each frame is the exact\r\n     * same size and cannot be trimmed or rotated.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addSpriteSheet\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {Phaser.Types.Textures.SpriteSheetConfig} config - The configuration object for this Sprite Sheet.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addSpriteSheet: function (key, source, config)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = this.create(key, source);\r\n\r\n            var width = texture.source[0].width;\r\n            var height = texture.source[0].height;\r\n\r\n            Parser.SpriteSheet(texture, 0, 0, 0, width, height, config);\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Adds a Sprite Sheet to this Texture Manager, where the Sprite Sheet exists as a Frame within a Texture Atlas.\r\n     *\r\n     * In Phaser terminology a Sprite Sheet is a texture containing different frames, but each frame is the exact\r\n     * same size and cannot be trimmed or rotated.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#addSpriteSheetFromAtlas\r\n     * @fires Phaser.Textures.Events#ADD\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {Phaser.Types.Textures.SpriteSheetFromAtlasConfig} config - The configuration object for this Sprite Sheet.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    addSpriteSheetFromAtlas: function (key, config)\r\n    {\r\n        if (!this.checkKey(key))\r\n        {\r\n            return null;\r\n        }\r\n\r\n        var atlasKey = GetValue(config, 'atlas', null);\r\n        var atlasFrame = GetValue(config, 'frame', null);\r\n\r\n        if (!atlasKey || !atlasFrame)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var atlas = this.get(atlasKey);\r\n        var sheet = atlas.get(atlasFrame);\r\n\r\n        if (sheet)\r\n        {\r\n            var texture = this.create(key, sheet.source.image);\r\n\r\n            if (sheet.trimmed)\r\n            {\r\n                //  If trimmed we need to help the parser adjust\r\n                Parser.SpriteSheetFromAtlas(texture, sheet, config);\r\n            }\r\n            else\r\n            {\r\n                Parser.SpriteSheet(texture, 0, sheet.cutX, sheet.cutY, sheet.cutWidth, sheet.cutHeight, config);\r\n            }\r\n\r\n            this.emit(Events.ADD, key, texture);\r\n\r\n            return texture;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a new Texture using the given source and dimensions.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {HTMLImageElement} source - The source Image element.\r\n     * @param {integer} width - The width of the Texture.\r\n     * @param {integer} height - The height of the Texture.\r\n     *\r\n     * @return {?Phaser.Textures.Texture} The Texture that was created, or `null` if the key is already in use.\r\n     */\r\n    create: function (key, source, width, height)\r\n    {\r\n        var texture = null;\r\n\r\n        if (this.checkKey(key))\r\n        {\r\n            texture = new Texture(this, key, source, width, height);\r\n\r\n            this.list[key] = texture;\r\n        }\r\n\r\n        return texture;\r\n    },\r\n\r\n    /**\r\n     * Checks the given key to see if a Texture using it exists within this Texture Manager.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#exists\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     *\r\n     * @return {boolean} Returns `true` if a Texture matching the given key exists in this Texture Manager.\r\n     */\r\n    exists: function (key)\r\n    {\r\n        return (this.list.hasOwnProperty(key));\r\n    },\r\n\r\n    /**\r\n     * Returns a Texture from the Texture Manager that matches the given key.\r\n     * \r\n     * If the key is `undefined` it will return the `__DEFAULT` Texture.\r\n     * \r\n     * If the key is an instance of a Texture, it will return the key directly.\r\n     * \r\n     * Finally. if the key is given, but not found and not a Texture instance, it will return the `__MISSING` Texture.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#get\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|Phaser.Textures.Texture)} key - The unique string-based key of the Texture, or a Texture instance.\r\n     *\r\n     * @return {Phaser.Textures.Texture} The Texture that was created.\r\n     */\r\n    get: function (key)\r\n    {\r\n        if (key === undefined) { key = '__DEFAULT'; }\r\n\r\n        if (this.list[key])\r\n        {\r\n            return this.list[key];\r\n        }\r\n        else if (key instanceof Texture)\r\n        {\r\n            return key;\r\n        }\r\n        else\r\n        {\r\n            return this.list['__MISSING'];\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a Texture key and Frame name and returns a clone of that Frame if found.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#cloneFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} frame - The string or index of the Frame to be cloned.\r\n     *\r\n     * @return {Phaser.Textures.Frame} A Clone of the given Frame.\r\n     */\r\n    cloneFrame: function (key, frame)\r\n    {\r\n        if (this.list[key])\r\n        {\r\n            return this.list[key].get(frame).clone();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Takes a Texture key and Frame name and returns a reference to that Frame, if found.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#getFrame\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string-based name, or integer based index, of the Frame to get from the Texture.\r\n     *\r\n     * @return {Phaser.Textures.Frame} A Texture Frame object.\r\n     */\r\n    getFrame: function (key, frame)\r\n    {\r\n        if (this.list[key])\r\n        {\r\n            return this.list[key].get(frame);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an array with all of the keys of all Textures in this Texture Manager.\r\n     * The output array will exclude the `__DEFAULT` and `__MISSING` keys.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#getTextureKeys\r\n     * @since 3.0.0\r\n     *\r\n     * @return {string[]} An array containing all of the Texture keys stored in this Texture Manager.\r\n     */\r\n    getTextureKeys: function ()\r\n    {\r\n        var output = [];\r\n\r\n        for (var key in this.list)\r\n        {\r\n            if (key !== '__DEFAULT' && key !== '__MISSING')\r\n            {\r\n                output.push(key);\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Given a Texture and an `x` and `y` coordinate this method will return a new\r\n     * Color object that has been populated with the color and alpha values of the pixel\r\n     * at that location in the Texture.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#getPixel\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} x - The x coordinate of the pixel within the Texture.\r\n     * @param {integer} y - The y coordinate of the pixel within the Texture.\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string or index of the Frame.\r\n     *\r\n     * @return {?Phaser.Display.Color} A Color object populated with the color values of the requested pixel,\r\n     * or `null` if the coordinates were out of bounds.\r\n     */\r\n    getPixel: function (x, y, key, frame)\r\n    {\r\n        var textureFrame = this.getFrame(key, frame);\r\n\r\n        if (textureFrame)\r\n        {\r\n            //  Adjust for trim (if not trimmed x and y are just zero)\r\n            x -= textureFrame.x;\r\n            y -= textureFrame.y;\r\n\r\n            var data = textureFrame.data.cut;\r\n\r\n            x += data.x;\r\n            y += data.y;\r\n\r\n            if (x >= data.x && x < data.r && y >= data.y && y < data.b)\r\n            {\r\n                var ctx = this._tempContext;\r\n\r\n                ctx.clearRect(0, 0, 1, 1);\r\n                ctx.drawImage(textureFrame.source.image, x, y, 1, 1, 0, 0, 1, 1);\r\n\r\n                var rgb = ctx.getImageData(0, 0, 1, 1);\r\n\r\n                return new Color(rgb.data[0], rgb.data[1], rgb.data[2], rgb.data[3]);\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Given a Texture and an `x` and `y` coordinate this method will return a value between 0 and 255\r\n     * corresponding to the alpha value of the pixel at that location in the Texture. If the coordinate\r\n     * is out of bounds it will return null.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#getPixelAlpha\r\n     * @since 3.10.0\r\n     *\r\n     * @param {integer} x - The x coordinate of the pixel within the Texture.\r\n     * @param {integer} y - The y coordinate of the pixel within the Texture.\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string or index of the Frame.\r\n     *\r\n     * @return {integer} A value between 0 and 255, or `null` if the coordinates were out of bounds.\r\n     */\r\n    getPixelAlpha: function (x, y, key, frame)\r\n    {\r\n        var textureFrame = this.getFrame(key, frame);\r\n\r\n        if (textureFrame)\r\n        {\r\n            //  Adjust for trim (if not trimmed x and y are just zero)\r\n            x -= textureFrame.x;\r\n            y -= textureFrame.y;\r\n\r\n            var data = textureFrame.data.cut;\r\n\r\n            x += data.x;\r\n            y += data.y;\r\n\r\n            if (x >= data.x && x < data.r && y >= data.y && y < data.b)\r\n            {\r\n                var ctx = this._tempContext;\r\n\r\n                ctx.clearRect(0, 0, 1, 1);\r\n                ctx.drawImage(textureFrame.source.image, x, y, 1, 1, 0, 0, 1, 1);\r\n    \r\n                var rgb = ctx.getImageData(0, 0, 1, 1);\r\n    \r\n                return rgb.data[3];\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Sets the given Game Objects `texture` and `frame` properties so that it uses\r\n     * the Texture and Frame specified in the `key` and `frame` arguments to this method.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#setTexture\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the texture would be set on.\r\n     * @param {string} key - The unique string-based key of the Texture.\r\n     * @param {(string|integer)} [frame] - The string or index of the Frame.\r\n     *\r\n     * @return {Phaser.GameObjects.GameObject} The Game Object the texture was set on.\r\n     */\r\n    setTexture: function (gameObject, key, frame)\r\n    {\r\n        if (this.list[key])\r\n        {\r\n            gameObject.texture = this.list[key];\r\n            gameObject.frame = gameObject.texture.get(frame);\r\n        }\r\n\r\n        return gameObject;\r\n    },\r\n\r\n    /**\r\n     * Changes the key being used by a Texture to the new key provided.\r\n     * \r\n     * The old key is removed, allowing it to be re-used.\r\n     * \r\n     * Game Objects are linked to Textures by a reference to the Texture object, so\r\n     * all existing references will be retained.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#renameTexture\r\n     * @since 3.12.0\r\n     *\r\n     * @param {string} currentKey - The current string-based key of the Texture you wish to rename.\r\n     * @param {string} newKey - The new unique string-based key to use for the Texture.\r\n     *\r\n     * @return {boolean} `true` if the Texture key was successfully renamed, otherwise `false`.\r\n     */\r\n    renameTexture: function (currentKey, newKey)\r\n    {\r\n        var texture = this.get(currentKey);\r\n\r\n        if (texture && currentKey !== newKey)\r\n        {\r\n            texture.key = newKey;\r\n\r\n            this.list[newKey] = texture;\r\n\r\n            delete this.list[currentKey];\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Passes all Textures to the given callback.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#each\r\n     * @since 3.0.0\r\n     *\r\n     * @param {EachTextureCallback} callback - The callback function to be sent the Textures.\r\n     * @param {object} scope - The value to use as `this` when executing the callback.\r\n     * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n     */\r\n    each: function (callback, scope)\r\n    {\r\n        var args = [ null ];\r\n\r\n        for (var i = 1; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (var texture in this.list)\r\n        {\r\n            args[0] = this.list[texture];\r\n\r\n            callback.apply(scope, args);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys the Texture Manager and all Textures stored within it.\r\n     *\r\n     * @method Phaser.Textures.TextureManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        for (var texture in this.list)\r\n        {\r\n            this.list[texture].destroy();\r\n        }\r\n\r\n        this.list = {};\r\n\r\n        this.game = null;\r\n\r\n        CanvasPool.remove(this._tempCanvas);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TextureManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9UZXh0dXJlTWFuYWdlci5qcz80ZmE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDdkQsb0JBQW9CLG1CQUFPLENBQUMsNEVBQWlCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLGdGQUF3QjtBQUM1QyxZQUFZLG1CQUFPLENBQUMsb0RBQVU7QUFDOUIsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLG9FQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDekQsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxhQUFhLG1CQUFPLENBQUMsc0VBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLGdFQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLEtBQUs7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsb0JBQW9CO0FBQ3JELDJDQUEyQyx1QkFBdUI7O0FBRWxFOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQyxtQ0FBbUMsY0FBYzs7QUFFakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsbUJBQW1COztBQUV6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLE9BQU87QUFDdEIsZUFBZSwwRUFBMEU7QUFDekY7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsc0NBQXNDO0FBQ3JELGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsMEVBQTBFO0FBQ3pGO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBLCtCQUErQiwyQkFBMkI7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMEVBQTBFO0FBQ3pGO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixpQkFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTztBQUN0QixlQUFlLDBFQUEwRTtBQUN6RjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMEVBQTBFO0FBQ3pGO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaURBQWlEO0FBQ2hFO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLG1CQUFtQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9UZXh0dXJlTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDYW52YXNUZXh0dXJlID0gcmVxdWlyZSgnLi9DYW52YXNUZXh0dXJlJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb2xvciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvY29sb3IvQ29sb3InKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vY29yZS9ldmVudHMnKTtcclxudmFyIEdlbmVyYXRlVGV4dHVyZSA9IHJlcXVpcmUoJy4uL2NyZWF0ZS9HZW5lcmF0ZVRleHR1cmUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBQYXJzZXIgPSByZXF1aXJlKCcuL3BhcnNlcnMnKTtcclxudmFyIFRleHR1cmUgPSByZXF1aXJlKCcuL1RleHR1cmUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgRWFjaFRleHR1cmVDYWxsYmFja1xyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSB0ZXh0dXJlIC0gRWFjaCB0ZXh0dXJlIGluIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRleHR1cmVzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBnbG9iYWwgVGV4dHVyZU1hbmFnZXIuIFRoaXMgaXMgYSBzaW5nbGV0b24gY2xhc3MgdGhhdCBpc1xyXG4gKiByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYW5kIGRlbGl2ZXJpbmcgVGV4dHVyZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgRnJhbWVzIHRvIEdhbWUgT2JqZWN0cy5cclxuICpcclxuICogU3ByaXRlcyBhbmQgb3RoZXIgR2FtZSBPYmplY3RzIGdldCB0aGUgdGV4dHVyZSBkYXRhIHRoZXkgbmVlZCBmcm9tIHRoZSBUZXh0dXJlTWFuYWdlci5cclxuICpcclxuICogQWNjZXNzIGl0IHZpYSBgc2NlbmUudGV4dHVyZXNgLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGV4dHVyZU1hbmFnZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBUaGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UgdGhpcyBUZXh0dXJlIE1hbmFnZXIgYmVsb25ncyB0by5cclxuICovXHJcbnZhciBUZXh0dXJlTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVGV4dHVyZU1hbmFnZXIgKGdhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIHRoYXQgdGhpcyBUZXh0dXJlTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhpcyBtYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdUZXh0dXJlTWFuYWdlcic7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCB0aGF0IGhhcyBhbGwgb2YgdGV4dHVyZXMgdGhhdCBUZXh0dXJlIE1hbmFnZXIgY3JlYXRlcy5cclxuICAgICAgICAgKiBUZXh0dXJlcyBhcmUgYXNzaWduZWQgdG8ga2V5cyBzbyB3ZSBjYW4gYWNjZXNzIHRvIGFueSB0ZXh0dXJlIHRoYXQgdGhpcyBvYmplY3QgaGFzIGRpcmVjdGx5IGJ5IGtleSB2YWx1ZSB3aXRob3V0IGl0ZXJhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNsaXN0XHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAZGVmYXVsdCB7fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlzdCA9IHt9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGVtcG9yYXJ5IGNhbnZhcyBlbGVtZW50IHRvIHNhdmUgYW4gcGl4ZWwgZGF0YSBvZiBhbiBhcmJpdHJhcnkgdGV4dHVyZSBpbiBnZXRQaXhlbCgpIGFuZCBnZXRQaXhlbEFscGhhKCkgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI190ZW1wQ2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcENhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlMkQodGhpcywgMSwgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb250ZXh0IG9mIHRoZSB0ZW1wb3JhcnkgY2FudmFzIGVsZW1lbnQgbWFkZSB0byBzYXZlIGFuIHBpeGVsIGRhdGEgaW4gZ2V0UGl4ZWwoKSBhbmQgZ2V0UGl4ZWxBbHBoYSgpIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNfdGVtcENvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcENvbnRleHQgPSB0aGlzLl90ZW1wQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGNvdW50aW5nIHZhbHVlIHVzZWQgZm9yIGVtaXR0aW5nICdyZWFkeScgZXZlbnQgYWZ0ZXIgYWxsIG9mIG1hbmFnZXJzIGluIGdhbWUgaXMgbG9hZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI19wZW5kaW5nXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IDA7XHJcblxyXG4gICAgICAgIGdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBCb290IEhhbmRsZXIgY2FsbGVkIGJ5IFBoYXNlci5HYW1lIHdoZW4gaXQgZmlyc3Qgc3RhcnRzIHVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nID0gMjtcclxuXHJcbiAgICAgICAgdGhpcy5vbihFdmVudHMuTE9BRCwgdGhpcy51cGRhdGVQZW5kaW5nLCB0aGlzKTtcclxuICAgICAgICB0aGlzLm9uKEV2ZW50cy5FUlJPUiwgdGhpcy51cGRhdGVQZW5kaW5nLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRCYXNlNjQoJ19fREVGQVVMVCcsIHRoaXMuZ2FtZS5jb25maWcuZGVmYXVsdEltYWdlKTtcclxuICAgICAgICB0aGlzLmFkZEJhc2U2NCgnX19NSVNTSU5HJywgdGhpcy5nYW1lLmNvbmZpZy5taXNzaW5nSW1hZ2UpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmdGVyICdvbmxvYWQnIG9yICdvbmVycm9yJyBpbnZva2VkIHR3aWNlLCBlbWl0ICdyZWFkeScgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjdXBkYXRlUGVuZGluZ1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQZW5kaW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmctLTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm9mZihFdmVudHMuTE9BRCk7XHJcbiAgICAgICAgICAgIHRoaXMub2ZmKEV2ZW50cy5FUlJPUik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFQURZKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRoZSBnaXZlbiB0ZXh0dXJlIGtleSBhbmQgdGhyb3dzIGEgY29uc29sZS53YXJuIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UsIHRoZW4gcmV0dXJucyBmYWxzZS5cclxuICAgICAqIElmIHlvdSB3aXNoIHRvIGF2b2lkIHRoZSBjb25zb2xlLndhcm4gdGhlbiB1c2UgYFRleHR1cmVNYW5hZ2VyLmV4aXN0c2AgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNjaGVja0tleVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB0ZXh0dXJlIGtleSB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBzYWZlIHRvIHVzZSB0aGUgdGV4dHVyZSBrZXksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjaGVja0tleTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5leGlzdHMoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RleHR1cmUga2V5IGFscmVhZHkgaW4gdXNlOiAnICsga2V5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBUZXh0dXJlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBhbmQgZGVzdHJveXMgaXQuIFRoaXMgd2lsbCBpbW1lZGlhdGVseVxyXG4gICAgICogY2xlYXIgYWxsIHJlZmVyZW5jZXMgdG8gaXQgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBhbmQgaWYgaXQgaGFzIG9uZSwgZGVzdHJveSBpdHNcclxuICAgICAqIFdlYkdMVGV4dHVyZS4gVGhpcyB3aWxsIGVtaXQgYSBgcmVtb3ZldGV4dHVyZWAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogSWYgeW91IGhhdmUgYW55IEdhbWUgT2JqZWN0cyBzdGlsbCB1c2luZyB0aGlzIHRleHR1cmUgdGhleSB3aWxsIHN0YXJ0IHRocm93aW5nXHJcbiAgICAgKiBlcnJvcnMgdGhlIG5leHQgdGltZSB0aGV5IHRyeSB0byByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHJlbW92aW5nIHRoZSB0ZXh0dXJlIGlzIHRoZSBmaW5hbFxyXG4gICAgICogc3RlcCB3aGVuIGNsZWFyaW5nIGRvd24gdG8gYXZvaWQgdGhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNyZW1vdmVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI1JFTU9WRVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlKX0ga2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0byByZW1vdmUsIG9yIGEgcmVmZXJlbmNlIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlcn0gVGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXN0cyhrZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmdldChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyB0ZXh0dXJlIGZvdW5kIG1hdGNoaW5nIGtleTogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ5IHRoaXMgcG9pbnQga2V5IHNob3VsZCBiZSBhIFRleHR1cmUsIGlmIG5vdCwgdGhlIGZvbGxvd2luZyBmYWlscyBhbnl3YXlcclxuICAgICAgICBpZiAodGhpcy5saXN0Lmhhc093blByb3BlcnR5KGtleS5rZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5LmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVNT1ZFLCBrZXkua2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBrZXkgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGJ1dCBkb2VzIG5vdCBkZXN0cm95IHRoZSBUZXh0dXJlIHRoYXQgd2FzIHVzaW5nIHRoZSBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjcmVtb3ZlS2V5XHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIHRleHR1cmUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9IFRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUtleTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0Lmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5saXN0W2tleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IFRleHR1cmUgdG8gdGhlIFRleHR1cmUgTWFuYWdlciBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIEJhc2U2NCBlbmNvZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjYWRkQmFzZTY0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNBRERcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0VSUk9SXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNMT0FEXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIC0gVGhlIEJhc2U2NCBlbmNvZGVkIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGV4dHVyZSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBhZGRCYXNlNjQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KEV2ZW50cy5FUlJPUiwga2V5KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gX3RoaXMuY3JlYXRlKGtleSwgaW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIFBhcnNlci5JbWFnZSh0ZXh0dXJlLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdChFdmVudHMuTE9BRCwga2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlLnNyYyA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGV4aXN0aW5nIHRleHR1cmUgZnJhbWUgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBiYXNlNjQgZW5jb2RlZCBpbWFnZSBhbmQgcmV0dXJucyB0aGUgYmFzZTY0IGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIHRoZSBpbWFnZSB0eXBlIGFuZCBlbmNvZGVyIG9wdGlvbnMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCBiaXRtYXAgYmFzZWQgdGV4dHVyZSBmcmFtZXMsIHN1Y2ggYXMgdGhvc2UgY3JlYXRlZCBmcm9tIFRleHR1cmUgQXRsYXNlcy5cclxuICAgICAqIEl0IHdpbGwgbm90IHdvcmsgd2l0aCBHTCBUZXh0dXJlIG9iamVjdHMsIHN1Y2ggYXMgU2hhZGVycywgb3IgUmVuZGVyIFRleHR1cmVzLiBGb3IgdGhvc2UgcGxlYXNlXHJcbiAgICAgKiBzZWUgdGhlIFdlYkdMIFNuYXBzaG90IGZ1bmN0aW9uIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjZ2V0QmFzZTY0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBzdHJpbmctYmFzZWQgbmFtZSwgb3IgaW50ZWdlciBiYXNlZCBpbmRleCwgb2YgdGhlIEZyYW1lIHRvIGdldCBmcm9tIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5jb2Rlck9wdGlvbnM9MC45Ml0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdGV4dHVyZSBmcmFtZSBjb3VsZCBub3QgYmUgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldEJhc2U2NDogZnVuY3Rpb24gKGtleSwgZnJhbWUsIHR5cGUsIGVuY29kZXJPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHsgdHlwZSA9ICdpbWFnZS9wbmcnOyB9XHJcbiAgICAgICAgaWYgKGVuY29kZXJPcHRpb25zID09PSB1bmRlZmluZWQpIHsgZW5jb2Rlck9wdGlvbnMgPSAwLjkyOyB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhID0gJyc7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlRnJhbWUgPSB0aGlzLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZUZyYW1lICYmICh0ZXh0dXJlRnJhbWUuc291cmNlLmlzUmVuZGVyVGV4dHVyZSB8fCB0ZXh0dXJlRnJhbWUuc291cmNlLmlzR0xUZXh0dXJlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IGdldEJhc2U2NCBmcm9tIFdlYkdMIFRleHR1cmUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNkID0gdGV4dHVyZUZyYW1lLmNhbnZhc0RhdGE7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUyRCh0aGlzLCBjZC53aWR0aCwgY2QuaGVpZ2h0KTtcclxuICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShcclxuICAgICAgICAgICAgICAgIHRleHR1cmVGcmFtZS5zb3VyY2UuaW1hZ2UsXHJcbiAgICAgICAgICAgICAgICBjZC54LFxyXG4gICAgICAgICAgICAgICAgY2QueSxcclxuICAgICAgICAgICAgICAgIGNkLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgY2QuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICBjZC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGNkLmhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwodHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgQ2FudmFzUG9vbC5yZW1vdmUoY2FudmFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgVGV4dHVyZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gSW1hZ2UgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNhZGRJbWFnZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5UZXh0dXJlcy5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fSBzb3VyY2UgLSBUaGUgc291cmNlIEltYWdlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR9IFtkYXRhU291cmNlXSAtIEFuIG9wdGlvbmFsIGRhdGEgSW1hZ2UgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdXNlLlxyXG4gICAgICovXHJcbiAgICBhZGRJbWFnZTogZnVuY3Rpb24gKGtleSwgc291cmNlLCBkYXRhU291cmNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNyZWF0ZShrZXksIHNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICBQYXJzZXIuSW1hZ2UodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YVNvdXJjZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zZXREYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwga2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBXZWJHTCBUZXh0dXJlIGFuZCBjcmVhdGVzIGEgUGhhc2VyIFRleHR1cmUgZnJvbSBpdCwgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIFRleHR1cmUgTWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gdGhlbiB1c2UgdGhlIFRleHR1cmUgYXMgYSBub3JtYWwgdGV4dHVyZSBmb3IgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdHMgbGlrZSBTcHJpdGVzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGEgV2ViR0wgb25seSBmZWF0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2FkZEdMVGV4dHVyZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5UZXh0dXJlcy5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7V2ViR0xUZXh0dXJlfSBnbFRleHR1cmUgLSBUaGUgc291cmNlIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG5ldyB3aWR0aCBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdXNlLlxyXG4gICAgICovXHJcbiAgICBhZGRHTFRleHR1cmU6IGZ1bmN0aW9uIChrZXksIGdsVGV4dHVyZSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrS2V5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGUoa2V5LCBnbFRleHR1cmUsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGV4dHVyZS5hZGQoJ19fQkFTRScsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBSZW5kZXIgVGV4dHVyZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyIHVzaW5nIHRoZSBnaXZlbiBrZXkuXHJcbiAgICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gdGhlbiB1c2UgdGhlIFJlbmRlciBUZXh0dXJlIGFzIGEgbm9ybWFsIHRleHR1cmUgZm9yIHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3RzIGxpa2UgU3ByaXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNhZGRSZW5kZXJUZXh0dXJlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNBRERcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZX0gcmVuZGVyVGV4dHVyZSAtIFRoZSBzb3VyY2UgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgYWRkUmVuZGVyVGV4dHVyZTogZnVuY3Rpb24gKGtleSwgcmVuZGVyVGV4dHVyZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrS2V5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGUoa2V5LCByZW5kZXJUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCAwLCAwLCAwLCByZW5kZXJUZXh0dXJlLndpZHRoLCByZW5kZXJUZXh0dXJlLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwga2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUZXh0dXJlIHVzaW5nIHRoZSBnaXZlbiBjb25maWcgdmFsdWVzLlxyXG4gICAgICogR2VuZXJhdGVkIHRleHR1cmVzIGNvbnNpc3Qgb2YgYSBDYW52YXMgZWxlbWVudCB0byB3aGljaCB0aGUgdGV4dHVyZSBkYXRhIGlzIGRyYXduLlxyXG4gICAgICogU2VlIHRoZSBQaGFzZXIuQ3JlYXRlIGZ1bmN0aW9uIGZvciB0aGUgbW9yZSBkaXJlY3Qgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNnZW5lcmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgdGhhdCB3YXMgY3JlYXRlZCwgb3IgYG51bGxgIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAoa2V5LCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzLCAxLCAxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5jYW52YXMgPSBjYW52YXM7XHJcblxyXG4gICAgICAgICAgICBHZW5lcmF0ZVRleHR1cmUoY29uZmlnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZENhbnZhcyhrZXksIGNhbnZhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFRleHR1cmUgdXNpbmcgYSBibGFuayBDYW52YXMgZWxlbWVudCBvZiB0aGUgc2l6ZSBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBDYW52YXMgZWxlbWVudHMgYXJlIGF1dG9tYXRpY2FsbHkgcG9vbGVkIGFuZCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGxcclxuICAgICAqIGV4dHJhY3QgYSBmcmVlIGNhbnZhcyBmcm9tIHRoZSBDYW52YXNQb29sLCBvciBjcmVhdGUgb25lIGlmIG5vbmUgYXJlIGF2YWlsYWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNjcmVhdGVDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD0yNTZdIC0gVGhlIHdpZHRoIG9mIHRoZSBDYW52YXMgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0yNTZdIC0gVGhlIGhlaWdodCBvZiB0aGUgQ2FudmFzIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBUaGUgQ2FudmFzIFRleHR1cmUgdGhhdCB3YXMgY3JlYXRlZCwgb3IgYG51bGxgIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNhbnZhczogZnVuY3Rpb24gKGtleSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDI1NjsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAyNTY7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBDT05TVC5DQU5WQVMsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2FudmFzKGtleSwgY2FudmFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FudmFzIFRleHR1cmUgb2JqZWN0IGZyb20gYW4gZXhpc3RpbmcgQ2FudmFzIGVsZW1lbnRcclxuICAgICAqIGFuZCBhZGRzIGl0IHRvIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLCB1bmxlc3MgYHNraXBDYWNoZWAgaXMgdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNhZGRDYW52YXNcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0FERFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IHNvdXJjZSAtIFRoZSBDYW52YXMgZWxlbWVudCB0byBmb3JtIHRoZSBiYXNlIG9mIHRoZSBuZXcgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBDYWNoZT1mYWxzZV0gLSBTa2lwIGFkZGluZyB0aGlzIFRleHR1cmUgaW50byB0aGUgQ2FjaGU/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBUaGUgQ2FudmFzIFRleHR1cmUgdGhhdCB3YXMgY3JlYXRlZCwgb3IgYG51bGxgIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGFkZENhbnZhczogZnVuY3Rpb24gKGtleSwgc291cmNlLCBza2lwQ2FjaGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNraXBDYWNoZSA9PT0gdW5kZWZpbmVkKSB7IHNraXBDYWNoZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHNraXBDYWNoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgQ2FudmFzVGV4dHVyZSh0aGlzLCBrZXksIHNvdXJjZSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jaGVja0tleShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBDYW52YXNUZXh0dXJlKHRoaXMsIGtleSwgc291cmNlLCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5saXN0W2tleV0gPSB0ZXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IFRleHR1cmUgQXRsYXMgdG8gdGhpcyBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBJdCBjYW4gYWNjZXB0IGVpdGhlciBKU09OIEFycmF5IG9yIEpTT04gSGFzaCBmb3JtYXRzLCBhcyBleHBvcnRlZCBieSBUZXh0dXJlIFBhY2tlciBhbmQgc2ltaWxhciBzb2Z0d2FyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNhZGRBdGxhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudH0gc291cmNlIC0gVGhlIHNvdXJjZSBJbWFnZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBUaGUgVGV4dHVyZSBBdGxhcyBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnRbXXxIVE1MQ2FudmFzRWxlbWVudFtdfSBbZGF0YVNvdXJjZV0gLSBBbiBvcHRpb25hbCBkYXRhIEltYWdlIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgYWRkQXRsYXM6IGZ1bmN0aW9uIChrZXksIHNvdXJjZSwgZGF0YSwgZGF0YVNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTmV3IFRleHR1cmUgUGFja2VyIGZvcm1hdD9cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRleHR1cmVzKSB8fCBBcnJheS5pc0FycmF5KGRhdGEuZnJhbWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZEF0bGFzSlNPTkFycmF5KGtleSwgc291cmNlLCBkYXRhLCBkYXRhU291cmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQXRsYXNKU09OSGFzaChrZXksIHNvdXJjZSwgZGF0YSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBUZXh0dXJlIEF0bGFzIHRvIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogVGhlIGZyYW1lIGRhdGEgb2YgdGhlIGF0bGFzIG11c3QgYmUgc3RvcmVkIGluIGFuIEFycmF5IHdpdGhpbiB0aGUgSlNPTi5cclxuICAgICAqIFRoaXMgaXMga25vd24gYXMgYSBKU09OIEFycmF5IGluIHNvZnR3YXJlIHN1Y2ggYXMgVGV4dHVyZSBQYWNrZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjYWRkQXRsYXNKU09OQXJyYXlcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0FERFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7KEhUTUxJbWFnZUVsZW1lbnR8SFRNTEltYWdlRWxlbWVudFtdKX0gc291cmNlIC0gVGhlIHNvdXJjZSBJbWFnZSBlbGVtZW50L3MuXHJcbiAgICAgKiBAcGFyYW0geyhvYmplY3R8b2JqZWN0W10pfSBkYXRhIC0gVGhlIFRleHR1cmUgQXRsYXMgZGF0YS9zLlxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnRbXXxIVE1MQ2FudmFzRWxlbWVudFtdfSBbZGF0YVNvdXJjZV0gLSBBbiBvcHRpb25hbCBkYXRhIEltYWdlIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgYWRkQXRsYXNKU09OQXJyYXk6IGZ1bmN0aW9uIChrZXksIHNvdXJjZSwgZGF0YSwgZGF0YVNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrS2V5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGUoa2V5LCBzb3VyY2UpO1xyXG5cclxuICAgICAgICAgICAgLy8gIE11bHRpLUF0bGFzP1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpbmdsZUF0bGFzRmlsZSA9IChkYXRhLmxlbmd0aCA9PT0gMSk7IC8vIG11bHRpLXBhY2sgd2l0aCBvbmUgYXRsYXMgZmlsZSBmb3IgYWxsIGltYWdlc1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICAhISBBc3N1bWVzIHRoZSB0ZXh0dXJlcyBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgaW4gdGhlIHNvdXJjZSBhcnJheSBhcyBpbiB0aGUganNvbiBkYXRhICEhXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmUuc291cmNlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdGxhc0RhdGEgPSBzaW5nbGVBdGxhc0ZpbGUgPyBkYXRhWzBdIDogZGF0YVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgUGFyc2VyLkpTT05BcnJheSh0ZXh0dXJlLCBpLCBhdGxhc0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyc2VyLkpTT05BcnJheSh0ZXh0dXJlLCAwLCBkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc2V0RGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgVGV4dHVyZSBBdGxhcyB0byB0aGlzIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFRoZSBmcmFtZSBkYXRhIG9mIHRoZSBhdGxhcyBtdXN0IGJlIHN0b3JlZCBpbiBhbiBPYmplY3Qgd2l0aGluIHRoZSBKU09OLlxyXG4gICAgICogVGhpcyBpcyBrbm93biBhcyBhIEpTT04gSGFzaCBpbiBzb2Z0d2FyZSBzdWNoIGFzIFRleHR1cmUgUGFja2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2FkZEF0bGFzSlNPTkhhc2hcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0FERFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudH0gc291cmNlIC0gVGhlIHNvdXJjZSBJbWFnZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBUaGUgVGV4dHVyZSBBdGxhcyBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnRbXXxIVE1MQ2FudmFzRWxlbWVudFtdfSBbZGF0YVNvdXJjZV0gLSBBbiBvcHRpb25hbCBkYXRhIEltYWdlIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgYWRkQXRsYXNKU09OSGFzaDogZnVuY3Rpb24gKGtleSwgc291cmNlLCBkYXRhLCBkYXRhU291cmNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNyZWF0ZShrZXksIHNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcnNlci5KU09OSGFzaCh0ZXh0dXJlLCBpLCBkYXRhW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcnNlci5KU09OSGFzaCh0ZXh0dXJlLCAwLCBkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc2V0RGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgVGV4dHVyZSBBdGxhcyB0byB0aGlzIFRleHR1cmUgTWFuYWdlciwgd2hlcmUgdGhlIGF0bGFzIGRhdGEgaXMgZ2l2ZW5cclxuICAgICAqIGluIHRoZSBYTUwgZm9ybWF0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2FkZEF0bGFzWE1MXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNBRERcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR9IHNvdXJjZSAtIFRoZSBzb3VyY2UgSW1hZ2UgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gVGhlIFRleHR1cmUgQXRsYXMgWE1MIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudFtdfEhUTUxDYW52YXNFbGVtZW50W119IFtkYXRhU291cmNlXSAtIEFuIG9wdGlvbmFsIGRhdGEgSW1hZ2UgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdXNlLlxyXG4gICAgICovXHJcbiAgICBhZGRBdGxhc1hNTDogZnVuY3Rpb24gKGtleSwgc291cmNlLCBkYXRhLCBkYXRhU291cmNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNyZWF0ZShrZXksIHNvdXJjZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBQYXJzZXIuQXRsYXNYTUwodGV4dHVyZSwgMCwgZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YVNvdXJjZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zZXREYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwga2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBVbml0eSBUZXh0dXJlIEF0bGFzIHRvIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogVGhlIGRhdGEgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIFVuaXR5IFlBTUwgZmlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNhZGRVbml0eUF0bGFzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNBRERcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR9IHNvdXJjZSAtIFRoZSBzb3VyY2UgSW1hZ2UgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gVGhlIFRleHR1cmUgQXRsYXMgZGF0YS5cclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50W118SFRNTENhbnZhc0VsZW1lbnRbXX0gW2RhdGFTb3VyY2VdIC0gQW4gb3B0aW9uYWwgZGF0YSBJbWFnZSBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgdGhhdCB3YXMgY3JlYXRlZCwgb3IgYG51bGxgIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGFkZFVuaXR5QXRsYXM6IGZ1bmN0aW9uIChrZXksIHNvdXJjZSwgZGF0YSwgZGF0YVNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrS2V5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jcmVhdGUoa2V5LCBzb3VyY2UpO1xyXG5cclxuICAgICAgICAgICAgUGFyc2VyLlVuaXR5WUFNTCh0ZXh0dXJlLCAwLCBkYXRhKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhU291cmNlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQURELCBrZXksIHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIFNwcml0ZSBTaGVldCB0byB0aGlzIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBJbiBQaGFzZXIgdGVybWlub2xvZ3kgYSBTcHJpdGUgU2hlZXQgaXMgYSB0ZXh0dXJlIGNvbnRhaW5pbmcgZGlmZmVyZW50IGZyYW1lcywgYnV0IGVhY2ggZnJhbWUgaXMgdGhlIGV4YWN0XHJcbiAgICAgKiBzYW1lIHNpemUgYW5kIGNhbm5vdCBiZSB0cmltbWVkIG9yIHJvdGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjYWRkU3ByaXRlU2hlZXRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0FERFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudH0gc291cmNlIC0gVGhlIHNvdXJjZSBJbWFnZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGV4dHVyZXMuU3ByaXRlU2hlZXRDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhpcyBTcHJpdGUgU2hlZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgYWRkU3ByaXRlU2hlZXQ6IGZ1bmN0aW9uIChrZXksIHNvdXJjZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tLZXkoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNyZWF0ZShrZXksIHNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0ZXh0dXJlLnNvdXJjZVswXS53aWR0aDtcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRleHR1cmUuc291cmNlWzBdLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIFBhcnNlci5TcHJpdGVTaGVldCh0ZXh0dXJlLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBjb25maWcpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BREQsIGtleSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgU3ByaXRlIFNoZWV0IHRvIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLCB3aGVyZSB0aGUgU3ByaXRlIFNoZWV0IGV4aXN0cyBhcyBhIEZyYW1lIHdpdGhpbiBhIFRleHR1cmUgQXRsYXMuXHJcbiAgICAgKlxyXG4gICAgICogSW4gUGhhc2VyIHRlcm1pbm9sb2d5IGEgU3ByaXRlIFNoZWV0IGlzIGEgdGV4dHVyZSBjb250YWluaW5nIGRpZmZlcmVudCBmcmFtZXMsIGJ1dCBlYWNoIGZyYW1lIGlzIHRoZSBleGFjdFxyXG4gICAgICogc2FtZSBzaXplIGFuZCBjYW5ub3QgYmUgdHJpbW1lZCBvciByb3RhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2FkZFNwcml0ZVNoZWV0RnJvbUF0bGFzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNBRERcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UZXh0dXJlcy5TcHJpdGVTaGVldEZyb21BdGxhc0NvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGlzIFNwcml0ZSBTaGVldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdXNlLlxyXG4gICAgICovXHJcbiAgICBhZGRTcHJpdGVTaGVldEZyb21BdGxhczogZnVuY3Rpb24gKGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0tleShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXRsYXNLZXkgPSBHZXRWYWx1ZShjb25maWcsICdhdGxhcycsIG51bGwpO1xyXG4gICAgICAgIHZhciBhdGxhc0ZyYW1lID0gR2V0VmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFhdGxhc0tleSB8fCAhYXRsYXNGcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdGxhcyA9IHRoaXMuZ2V0KGF0bGFzS2V5KTtcclxuICAgICAgICB2YXIgc2hlZXQgPSBhdGxhcy5nZXQoYXRsYXNGcmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChzaGVldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5jcmVhdGUoa2V5LCBzaGVldC5zb3VyY2UuaW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNoZWV0LnRyaW1tZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBJZiB0cmltbWVkIHdlIG5lZWQgdG8gaGVscCB0aGUgcGFyc2VyIGFkanVzdFxyXG4gICAgICAgICAgICAgICAgUGFyc2VyLlNwcml0ZVNoZWV0RnJvbUF0bGFzKHRleHR1cmUsIHNoZWV0LCBjb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyc2VyLlNwcml0ZVNoZWV0KHRleHR1cmUsIDAsIHNoZWV0LmN1dFgsIHNoZWV0LmN1dFksIHNoZWV0LmN1dFdpZHRoLCBzaGVldC5jdXRIZWlnaHQsIGNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQURELCBrZXksIHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgVGV4dHVyZSB1c2luZyB0aGUgZ2l2ZW4gc291cmNlIGFuZCBkaW1lbnNpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudH0gc291cmNlIC0gVGhlIHNvdXJjZSBJbWFnZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdXNlLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChrZXksIHNvdXJjZSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrS2V5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUodGhpcywga2V5LCBzb3VyY2UsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5saXN0W2tleV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRoZSBnaXZlbiBrZXkgdG8gc2VlIGlmIGEgVGV4dHVyZSB1c2luZyBpdCBleGlzdHMgd2l0aGluIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2V4aXN0c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIFRleHR1cmUgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleSBleGlzdHMgaW4gdGhpcyBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0czogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgVGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBrZXkgaXMgYHVuZGVmaW5lZGAgaXQgd2lsbCByZXR1cm4gdGhlIGBfX0RFRkFVTFRgIFRleHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBrZXkgaXMgYW4gaW5zdGFuY2Ugb2YgYSBUZXh0dXJlLCBpdCB3aWxsIHJldHVybiB0aGUga2V5IGRpcmVjdGx5LlxyXG4gICAgICogXHJcbiAgICAgKiBGaW5hbGx5LiBpZiB0aGUga2V5IGlzIGdpdmVuLCBidXQgbm90IGZvdW5kIGFuZCBub3QgYSBUZXh0dXJlIGluc3RhbmNlLCBpdCB3aWxsIHJldHVybiB0aGUgYF9fTUlTU0lOR2AgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNnZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZSl9IGtleSAtIFRoZSB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZSwgb3IgYSBUZXh0dXJlIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9ICdfX0RFRkFVTFQnOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxpc3Rba2V5XSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5IGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RbJ19fTUlTU0lORyddO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIFRleHR1cmUga2V5IGFuZCBGcmFtZSBuYW1lIGFuZCByZXR1cm5zIGEgY2xvbmUgb2YgdGhhdCBGcmFtZSBpZiBmb3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNjbG9uZUZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBmcmFtZSAtIFRoZSBzdHJpbmcgb3IgaW5kZXggb2YgdGhlIEZyYW1lIHRvIGJlIGNsb25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IEEgQ2xvbmUgb2YgdGhlIGdpdmVuIEZyYW1lLlxyXG4gICAgICovXHJcbiAgICBjbG9uZUZyYW1lOiBmdW5jdGlvbiAoa2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0W2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0W2tleV0uZ2V0KGZyYW1lKS5jbG9uZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIFRleHR1cmUga2V5IGFuZCBGcmFtZSBuYW1lIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoYXQgRnJhbWUsIGlmIGZvdW5kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2dldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIHN0cmluZy1iYXNlZCBuYW1lLCBvciBpbnRlZ2VyIGJhc2VkIGluZGV4LCBvZiB0aGUgRnJhbWUgdG8gZ2V0IGZyb20gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBBIFRleHR1cmUgRnJhbWUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZTogZnVuY3Rpb24gKGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdFtrZXldKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFtrZXldLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgb2YgdGhlIGtleXMgb2YgYWxsIFRleHR1cmVzIGluIHRoaXMgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogVGhlIG91dHB1dCBhcnJheSB3aWxsIGV4Y2x1ZGUgdGhlIGBfX0RFRkFVTFRgIGFuZCBgX19NSVNTSU5HYCBrZXlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2dldFRleHR1cmVLZXlzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIFRleHR1cmUga2V5cyBzdG9yZWQgaW4gdGhpcyBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVLZXlzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdfX0RFRkFVTFQnICYmIGtleSAhPT0gJ19fTUlTU0lORycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBUZXh0dXJlIGFuZCBhbiBgeGAgYW5kIGB5YCBjb29yZGluYXRlIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgbmV3XHJcbiAgICAgKiBDb2xvciBvYmplY3QgdGhhdCBoYXMgYmVlbiBwb3B1bGF0ZWQgd2l0aCB0aGUgY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiB0aGUgcGl4ZWxcclxuICAgICAqIGF0IHRoYXQgbG9jYXRpb24gaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjZ2V0UGl4ZWxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgc3RyaW5nIG9yIGluZGV4IG9mIHRoZSBGcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLkRpc3BsYXkuQ29sb3J9IEEgQ29sb3Igb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb2xvciB2YWx1ZXMgb2YgdGhlIHJlcXVlc3RlZCBwaXhlbCxcclxuICAgICAqIG9yIGBudWxsYCBpZiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBvdXQgb2YgYm91bmRzLlxyXG4gICAgICovXHJcbiAgICBnZXRQaXhlbDogZnVuY3Rpb24gKHgsIHksIGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMuZ2V0RnJhbWUoa2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0dXJlRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQWRqdXN0IGZvciB0cmltIChpZiBub3QgdHJpbW1lZCB4IGFuZCB5IGFyZSBqdXN0IHplcm8pXHJcbiAgICAgICAgICAgIHggLT0gdGV4dHVyZUZyYW1lLng7XHJcbiAgICAgICAgICAgIHkgLT0gdGV4dHVyZUZyYW1lLnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRleHR1cmVGcmFtZS5kYXRhLmN1dDtcclxuXHJcbiAgICAgICAgICAgIHggKz0gZGF0YS54O1xyXG4gICAgICAgICAgICB5ICs9IGRhdGEueTtcclxuXHJcbiAgICAgICAgICAgIGlmICh4ID49IGRhdGEueCAmJiB4IDwgZGF0YS5yICYmIHkgPj0gZGF0YS55ICYmIHkgPCBkYXRhLmIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLl90ZW1wQ29udGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0ZXh0dXJlRnJhbWUuc291cmNlLmltYWdlLCB4LCB5LCAxLCAxLCAwLCAwLCAxLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmdiID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKHJnYi5kYXRhWzBdLCByZ2IuZGF0YVsxXSwgcmdiLmRhdGFbMl0sIHJnYi5kYXRhWzNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBUZXh0dXJlIGFuZCBhbiBgeGAgYW5kIGB5YCBjb29yZGluYXRlIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTVcclxuICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBwaXhlbCBhdCB0aGF0IGxvY2F0aW9uIGluIHRoZSBUZXh0dXJlLiBJZiB0aGUgY29vcmRpbmF0ZVxyXG4gICAgICogaXMgb3V0IG9mIGJvdW5kcyBpdCB3aWxsIHJldHVybiBudWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2dldFBpeGVsQWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIHN0cmluZyBvciBpbmRleCBvZiB0aGUgRnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NSwgb3IgYG51bGxgIGlmIHRoZSBjb29yZGluYXRlcyB3ZXJlIG91dCBvZiBib3VuZHMuXHJcbiAgICAgKi9cclxuICAgIGdldFBpeGVsQWxwaGE6IGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlRnJhbWUgPSB0aGlzLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFkanVzdCBmb3IgdHJpbSAoaWYgbm90IHRyaW1tZWQgeCBhbmQgeSBhcmUganVzdCB6ZXJvKVxyXG4gICAgICAgICAgICB4IC09IHRleHR1cmVGcmFtZS54O1xyXG4gICAgICAgICAgICB5IC09IHRleHR1cmVGcmFtZS55O1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB0ZXh0dXJlRnJhbWUuZGF0YS5jdXQ7XHJcblxyXG4gICAgICAgICAgICB4ICs9IGRhdGEueDtcclxuICAgICAgICAgICAgeSArPSBkYXRhLnk7XHJcblxyXG4gICAgICAgICAgICBpZiAoeCA+PSBkYXRhLnggJiYgeCA8IGRhdGEuciAmJiB5ID49IGRhdGEueSAmJiB5IDwgZGF0YS5iKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5fdGVtcENvbnRleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAxLCAxKTtcclxuICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodGV4dHVyZUZyYW1lLnNvdXJjZS5pbWFnZSwgeCwgeSwgMSwgMSwgMCwgMCwgMSwgMSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHZhciByZ2IgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiLmRhdGFbM107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGdpdmVuIEdhbWUgT2JqZWN0cyBgdGV4dHVyZWAgYW5kIGBmcmFtZWAgcHJvcGVydGllcyBzbyB0aGF0IGl0IHVzZXNcclxuICAgICAqIHRoZSBUZXh0dXJlIGFuZCBGcmFtZSBzcGVjaWZpZWQgaW4gdGhlIGBrZXlgIGFuZCBgZnJhbWVgIGFyZ3VtZW50cyB0byB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSB0ZXh0dXJlIHdvdWxkIGJlIHNldCBvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgc3RyaW5nIG9yIGluZGV4IG9mIHRoZSBGcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoZSB0ZXh0dXJlIHdhcyBzZXQgb24uXHJcbiAgICAgKi9cclxuICAgIHNldFRleHR1cmU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3Rba2V5XSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QudGV4dHVyZSA9IHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmZyYW1lID0gZ2FtZU9iamVjdC50ZXh0dXJlLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBrZXkgYmVpbmcgdXNlZCBieSBhIFRleHR1cmUgdG8gdGhlIG5ldyBrZXkgcHJvdmlkZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBvbGQga2V5IGlzIHJlbW92ZWQsIGFsbG93aW5nIGl0IHRvIGJlIHJlLXVzZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEdhbWUgT2JqZWN0cyBhcmUgbGlua2VkIHRvIFRleHR1cmVzIGJ5IGEgcmVmZXJlbmNlIHRvIHRoZSBUZXh0dXJlIG9iamVjdCwgc29cclxuICAgICAqIGFsbCBleGlzdGluZyByZWZlcmVuY2VzIHdpbGwgYmUgcmV0YWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXIjcmVuYW1lVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50S2V5IC0gVGhlIGN1cnJlbnQgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgVGV4dHVyZSB5b3Ugd2lzaCB0byByZW5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3S2V5IC0gVGhlIG5ldyB1bmlxdWUgc3RyaW5nLWJhc2VkIGtleSB0byB1c2UgZm9yIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgVGV4dHVyZSBrZXkgd2FzIHN1Y2Nlc3NmdWxseSByZW5hbWVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcmVuYW1lVGV4dHVyZTogZnVuY3Rpb24gKGN1cnJlbnRLZXksIG5ld0tleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0KGN1cnJlbnRLZXkpO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZSAmJiBjdXJyZW50S2V5ICE9PSBuZXdLZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmtleSA9IG5ld0tleTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubGlzdFtuZXdLZXldID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RbY3VycmVudEtleV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXNzZXMgYWxsIFRleHR1cmVzIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlciNlYWNoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VhY2hUZXh0dXJlQ2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHNlbnQgdGhlIFRleHR1cmVzLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHNjb3BlIC0gVGhlIHZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgdGhlIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAoY2FsbGJhY2ssIHNjb3BlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gWyBudWxsIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciB0ZXh0dXJlIGluIHRoaXMubGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLmxpc3RbdGV4dHVyZV07XHJcblxyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShzY29wZSwgYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoZSBUZXh0dXJlIE1hbmFnZXIgYW5kIGFsbCBUZXh0dXJlcyBzdG9yZWQgd2l0aGluIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIHRleHR1cmUgaW4gdGhpcy5saXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0W3RleHR1cmVdLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGlzdCA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG5cclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLl90ZW1wQ2FudmFzKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/TextureManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/TextureSource.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/textures/TextureSource.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar IsSizePowerOfTwo = __webpack_require__(/*! ../math/pow2/IsSizePowerOfTwo */ \"./node_modules/phaser/src/math/pow2/IsSizePowerOfTwo.js\");\r\nvar ScaleModes = __webpack_require__(/*! ../renderer/ScaleModes */ \"./node_modules/phaser/src/renderer/ScaleModes.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Texture Source is the encapsulation of the actual source data for a Texture.\r\n * \r\n * This is typically an Image Element, loaded from the file system or network, a Canvas Element or a Video Element.\r\n *\r\n * A Texture can contain multiple Texture Sources, which only happens when a multi-atlas is loaded.\r\n *\r\n * @class TextureSource\r\n * @memberof Phaser.Textures\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture this TextureSource belongs to.\r\n * @param {(HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Phaser.GameObjects.RenderTexture|WebGLTexture)} source - The source image data.\r\n * @param {integer} [width] - Optional width of the source image. If not given it's derived from the source itself.\r\n * @param {integer} [height] - Optional height of the source image. If not given it's derived from the source itself.\r\n * @param {boolean} [flipY=false] - Sets the `UNPACK_FLIP_Y_WEBGL` flag the WebGL Texture uses during upload.\r\n */\r\nvar TextureSource = new Class({\r\n\r\n    initialize:\r\n\r\n    function TextureSource (texture, source, width, height, flipY)\r\n    {\r\n        if (flipY === undefined) { flipY = false; }\r\n\r\n        var game = texture.manager.game;\r\n\r\n        /**\r\n         * The Texture this TextureSource belongs to.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @since 3.7.0\r\n         */\r\n        this.renderer = game.renderer;\r\n\r\n        /**\r\n         * The Texture this TextureSource belongs to.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#texture\r\n         * @type {Phaser.Textures.Texture}\r\n         * @since 3.0.0\r\n         */\r\n        this.texture = texture;\r\n\r\n        /**\r\n         * The source of the image data.\r\n         * \r\n         * This is either an Image Element, a Canvas Element, a Video Element, a RenderTexture or a WebGLTexture.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#source\r\n         * @type {(HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Phaser.GameObjects.RenderTexture|WebGLTexture)}\r\n         * @since 3.12.0\r\n         */\r\n        this.source = source;\r\n\r\n        /**\r\n         * The image data.\r\n         * \r\n         * This is either an Image element, Canvas element or a Video Element.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#image\r\n         * @type {(HTMLImageElement|HTMLCanvasElement|HTMLVideoElement)}\r\n         * @since 3.0.0\r\n         */\r\n        this.image = source;\r\n\r\n        /**\r\n         * Currently un-used.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#compressionAlgorithm\r\n         * @type {integer}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.compressionAlgorithm = null;\r\n\r\n        /**\r\n         * The resolution of the source image.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#resolution\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.resolution = 1;\r\n\r\n        /**\r\n         * The width of the source image. If not specified in the constructor it will check\r\n         * the `naturalWidth` and then `width` properties of the source image.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#width\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width || source.naturalWidth || source.videoWidth || source.width || 0;\r\n\r\n        /**\r\n         * The height of the source image. If not specified in the constructor it will check\r\n         * the `naturalHeight` and then `height` properties of the source image.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#height\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height || source.naturalHeight || source.videoHeight || source.height || 0;\r\n\r\n        /**\r\n         * The Scale Mode the image will use when rendering.\r\n         * Either Linear or Nearest.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#scaleMode\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.scaleMode = ScaleModes.DEFAULT;\r\n\r\n        /**\r\n         * Is the source image a Canvas Element?\r\n         *\r\n         * @name Phaser.Textures.TextureSource#isCanvas\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.isCanvas = (source instanceof HTMLCanvasElement);\r\n\r\n        /**\r\n         * Is the source image a Video Element?\r\n         *\r\n         * @name Phaser.Textures.TextureSource#isVideo\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.isVideo = (window.hasOwnProperty('HTMLVideoElement') && source instanceof HTMLVideoElement);\r\n\r\n        /**\r\n         * Is the source image a Render Texture?\r\n         *\r\n         * @name Phaser.Textures.TextureSource#isRenderTexture\r\n         * @type {boolean}\r\n         * @since 3.12.0\r\n         */\r\n        this.isRenderTexture = (source.type === 'RenderTexture');\r\n\r\n        /**\r\n         * Is the source image a WebGLTexture?\r\n         *\r\n         * @name Phaser.Textures.TextureSource#isGLTexture\r\n         * @type {boolean}\r\n         * @since 3.19.0\r\n         */\r\n        this.isGLTexture = (window.hasOwnProperty('WebGLTexture') && source instanceof WebGLTexture);\r\n\r\n        /**\r\n         * Are the source image dimensions a power of two?\r\n         *\r\n         * @name Phaser.Textures.TextureSource#isPowerOf2\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.isPowerOf2 = IsSizePowerOfTwo(this.width, this.height);\r\n\r\n        /**\r\n         * The WebGL Texture of the source image. If this TextureSource is driven from a WebGLTexture\r\n         * already, then this is a reference to that WebGLTexture.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#glTexture\r\n         * @type {?WebGLTexture}\r\n         * @default null\r\n         * @since 3.0.0\r\n         */\r\n        this.glTexture = null;\r\n\r\n        /**\r\n         * Sets the `UNPACK_FLIP_Y_WEBGL` flag the WebGL Texture uses during upload.\r\n         *\r\n         * @name Phaser.Textures.TextureSource#flipY\r\n         * @type {boolean}\r\n         * @since 3.20.0\r\n         */\r\n        this.flipY = flipY;\r\n\r\n        this.init(game);\r\n    },\r\n\r\n    /**\r\n     * Creates a WebGL Texture, if required, and sets the Texture filter mode.\r\n     *\r\n     * @method Phaser.Textures.TextureSource#init\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Game} game - A reference to the Phaser Game instance.\r\n     */\r\n    init: function (game)\r\n    {\r\n        if (this.renderer)\r\n        {\r\n            if (this.renderer.gl)\r\n            {\r\n                if (this.isCanvas)\r\n                {\r\n                    this.glTexture = this.renderer.createCanvasTexture(this.image, false, this.flipY);\r\n                }\r\n                else if (this.isVideo)\r\n                {\r\n                    this.glTexture = this.renderer.createVideoTexture(this.image, false, this.flipY);\r\n                }\r\n                else if (this.isRenderTexture)\r\n                {\r\n                    this.image = this.source.canvas;\r\n                 \r\n                    this.glTexture = this.renderer.createTextureFromSource(null, this.width, this.height, this.scaleMode);\r\n                }\r\n                else if (this.isGLTexture)\r\n                {\r\n                    this.glTexture = this.source;\r\n                }\r\n                else\r\n                {\r\n                    this.glTexture = this.renderer.createTextureFromSource(this.image, this.width, this.height, this.scaleMode);\r\n                }\r\n            }\r\n            else if (this.isRenderTexture)\r\n            {\r\n                this.image = this.source.canvas;\r\n            }\r\n        }\r\n\r\n        if (!game.config.antialias)\r\n        {\r\n            this.setFilter(1);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the Filter Mode for this Texture.\r\n     *\r\n     * The mode can be either Linear, the default, or Nearest.\r\n     *\r\n     * For pixel-art you should use Nearest.\r\n     *\r\n     * @method Phaser.Textures.TextureSource#setFilter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.FilterMode} filterMode - The Filter Mode.\r\n     */\r\n    setFilter: function (filterMode)\r\n    {\r\n        if (this.renderer.gl)\r\n        {\r\n            this.renderer.setTextureFilter(this.glTexture, filterMode);\r\n        }\r\n\r\n        this.scaleMode = filterMode;\r\n    },\r\n\r\n    /**\r\n     * Sets the `UNPACK_FLIP_Y_WEBGL` flag for the WebGL Texture during texture upload.\r\n     *\r\n     * @method Phaser.Textures.TextureSource#setFlipY\r\n     * @since 3.20.0\r\n     *\r\n     * @param {boolean} [value=true] - Should the WebGL Texture be flipped on the Y axis on texture upload or not?\r\n     */\r\n    setFlipY: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.flipY = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * If this TextureSource is backed by a Canvas and is running under WebGL,\r\n     * it updates the WebGLTexture using the canvas data.\r\n     *\r\n     * @method Phaser.Textures.TextureSource#update\r\n     * @since 3.7.0\r\n     */\r\n    update: function ()\r\n    {\r\n        var gl = this.renderer.gl;\r\n\r\n        if (gl && this.isCanvas)\r\n        {\r\n            this.glTexture = this.renderer.updateCanvasTexture(this.image, this.glTexture, this.flipY);\r\n        }\r\n        else if (gl && this.isVideo)\r\n        {\r\n            this.glTexture = this.renderer.updateVideoTexture(this.image, this.glTexture, this.flipY);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys this Texture Source and nulls the references.\r\n     *\r\n     * @method Phaser.Textures.TextureSource#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        if (this.glTexture)\r\n        {\r\n            this.renderer.deleteTexture(this.glTexture);\r\n        }\r\n\r\n        if (this.isCanvas)\r\n        {\r\n            CanvasPool.remove(this.image);\r\n        }\r\n\r\n        this.renderer = null;\r\n        this.texture = null;\r\n        this.source = null;\r\n        this.image = null;\r\n        this.glTexture = null;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TextureSource;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9UZXh0dXJlU291cmNlLmpzPzgwZmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN2RCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLHVCQUF1QixtQkFBTyxDQUFDLDhGQUErQjtBQUM5RCxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBd0I7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxvR0FBb0c7QUFDL0csV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLGVBQWU7O0FBRWpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL1RleHR1cmVTb3VyY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgSXNTaXplUG93ZXJPZlR3byA9IHJlcXVpcmUoJy4uL21hdGgvcG93Mi9Jc1NpemVQb3dlck9mVHdvJyk7XHJcbnZhciBTY2FsZU1vZGVzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvU2NhbGVNb2RlcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBUZXh0dXJlIFNvdXJjZSBpcyB0aGUgZW5jYXBzdWxhdGlvbiBvZiB0aGUgYWN0dWFsIHNvdXJjZSBkYXRhIGZvciBhIFRleHR1cmUuXHJcbiAqIFxyXG4gKiBUaGlzIGlzIHR5cGljYWxseSBhbiBJbWFnZSBFbGVtZW50LCBsb2FkZWQgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gb3IgbmV0d29yaywgYSBDYW52YXMgRWxlbWVudCBvciBhIFZpZGVvIEVsZW1lbnQuXHJcbiAqXHJcbiAqIEEgVGV4dHVyZSBjYW4gY29udGFpbiBtdWx0aXBsZSBUZXh0dXJlIFNvdXJjZXMsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIGEgbXVsdGktYXRsYXMgaXMgbG9hZGVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGV4dHVyZVNvdXJjZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSBUZXh0dXJlIHRoaXMgVGV4dHVyZVNvdXJjZSBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0geyhIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8UGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmV8V2ViR0xUZXh0dXJlKX0gc291cmNlIC0gVGhlIHNvdXJjZSBpbWFnZSBkYXRhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aF0gLSBPcHRpb25hbCB3aWR0aCBvZiB0aGUgc291cmNlIGltYWdlLiBJZiBub3QgZ2l2ZW4gaXQncyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBPcHRpb25hbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZS4gSWYgbm90IGdpdmVuIGl0J3MgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmbGlwWT1mYWxzZV0gLSBTZXRzIHRoZSBgVU5QQUNLX0ZMSVBfWV9XRUJHTGAgZmxhZyB0aGUgV2ViR0wgVGV4dHVyZSB1c2VzIGR1cmluZyB1cGxvYWQuXHJcbiAqL1xyXG52YXIgVGV4dHVyZVNvdXJjZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUZXh0dXJlU291cmNlICh0ZXh0dXJlLCBzb3VyY2UsIHdpZHRoLCBoZWlnaHQsIGZsaXBZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmbGlwWSA9PT0gdW5kZWZpbmVkKSB7IGZsaXBZID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGdhbWUgPSB0ZXh0dXJlLm1hbmFnZXIuZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRleHR1cmUgdGhpcyBUZXh0dXJlU291cmNlIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IGdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUZXh0dXJlIHRoaXMgVGV4dHVyZVNvdXJjZSBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2UjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc291cmNlIG9mIHRoZSBpbWFnZSBkYXRhLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgaXMgZWl0aGVyIGFuIEltYWdlIEVsZW1lbnQsIGEgQ2FudmFzIEVsZW1lbnQsIGEgVmlkZW8gRWxlbWVudCwgYSBSZW5kZXJUZXh0dXJlIG9yIGEgV2ViR0xUZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2Ujc291cmNlXHJcbiAgICAgICAgICogQHR5cGUgeyhIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8UGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmV8V2ViR0xUZXh0dXJlKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbWFnZSBkYXRhLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgaXMgZWl0aGVyIGFuIEltYWdlIGVsZW1lbnQsIENhbnZhcyBlbGVtZW50IG9yIGEgVmlkZW8gRWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI2ltYWdlXHJcbiAgICAgICAgICogQHR5cGUgeyhIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnQpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBzb3VyY2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1cnJlbnRseSB1bi11c2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2UjY29tcHJlc3Npb25BbGdvcml0aG1cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbkFsZ29yaXRobSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBzb3VyY2UgaW1hZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNyZXNvbHV0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBzb3VyY2UgaW1hZ2UuIElmIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGl0IHdpbGwgY2hlY2tcclxuICAgICAgICAgKiB0aGUgYG5hdHVyYWxXaWR0aGAgYW5kIHRoZW4gYHdpZHRoYCBwcm9wZXJ0aWVzIG9mIHRoZSBzb3VyY2UgaW1hZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCBzb3VyY2UubmF0dXJhbFdpZHRoIHx8IHNvdXJjZS52aWRlb1dpZHRoIHx8IHNvdXJjZS53aWR0aCB8fCAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgaW1hZ2UuIElmIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGl0IHdpbGwgY2hlY2tcclxuICAgICAgICAgKiB0aGUgYG5hdHVyYWxIZWlnaHRgIGFuZCB0aGVuIGBoZWlnaHRgIHByb3BlcnRpZXMgb2YgdGhlIHNvdXJjZSBpbWFnZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IHNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHNvdXJjZS52aWRlb0hlaWdodCB8fCBzb3VyY2UuaGVpZ2h0IHx8IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2FsZSBNb2RlIHRoZSBpbWFnZSB3aWxsIHVzZSB3aGVuIHJlbmRlcmluZy5cclxuICAgICAgICAgKiBFaXRoZXIgTGluZWFyIG9yIE5lYXJlc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNzY2FsZU1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVNb2RlID0gU2NhbGVNb2Rlcy5ERUZBVUxUO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgc291cmNlIGltYWdlIGEgQ2FudmFzIEVsZW1lbnQ/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNpc0NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNDYW52YXMgPSAoc291cmNlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgc291cmNlIGltYWdlIGEgVmlkZW8gRWxlbWVudD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI2lzVmlkZW9cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1ZpZGVvID0gKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnSFRNTFZpZGVvRWxlbWVudCcpICYmIHNvdXJjZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgc291cmNlIGltYWdlIGEgUmVuZGVyIFRleHR1cmU/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNpc1JlbmRlclRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1JlbmRlclRleHR1cmUgPSAoc291cmNlLnR5cGUgPT09ICdSZW5kZXJUZXh0dXJlJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoZSBzb3VyY2UgaW1hZ2UgYSBXZWJHTFRleHR1cmU/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZSNpc0dMVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzR0xUZXh0dXJlID0gKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV2ViR0xUZXh0dXJlJykgJiYgc291cmNlIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXJlIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucyBhIHBvd2VyIG9mIHR3bz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI2lzUG93ZXJPZjJcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUG93ZXJPZjIgPSBJc1NpemVQb3dlck9mVHdvKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIFRleHR1cmUgb2YgdGhlIHNvdXJjZSBpbWFnZS4gSWYgdGhpcyBUZXh0dXJlU291cmNlIGlzIGRyaXZlbiBmcm9tIGEgV2ViR0xUZXh0dXJlXHJcbiAgICAgICAgICogYWxyZWFkeSwgdGhlbiB0aGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoYXQgV2ViR0xUZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2UjZ2xUZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2V0cyB0aGUgYFVOUEFDS19GTElQX1lfV0VCR0xgIGZsYWcgdGhlIFdlYkdMIFRleHR1cmUgdXNlcyBkdXJpbmcgdXBsb2FkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2UjZmxpcFlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IGZsaXBZO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoZ2FtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFdlYkdMIFRleHR1cmUsIGlmIHJlcXVpcmVkLCBhbmQgc2V0cyB0aGUgVGV4dHVyZSBmaWx0ZXIgbW9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI2luaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FudmFzKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVDYW52YXNUZXh0dXJlKHRoaXMuaW1hZ2UsIGZhbHNlLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNWaWRlbylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVmlkZW9UZXh0dXJlKHRoaXMuaW1hZ2UsIGZhbHNlLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNSZW5kZXJUZXh0dXJlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSB0aGlzLnNvdXJjZS5jYW52YXM7XHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHR1cmVGcm9tU291cmNlKG51bGwsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzR0xUZXh0dXJlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gdGhpcy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHR1cmVGcm9tU291cmNlKHRoaXMuaW1hZ2UsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLnNjYWxlTW9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc1JlbmRlclRleHR1cmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSB0aGlzLnNvdXJjZS5jYW52YXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZ2FtZS5jb25maWcuYW50aWFsaWFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXIoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEZpbHRlciBNb2RlIGZvciB0aGlzIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZGUgY2FuIGJlIGVpdGhlciBMaW5lYXIsIHRoZSBkZWZhdWx0LCBvciBOZWFyZXN0LlxyXG4gICAgICpcclxuICAgICAqIEZvciBwaXhlbC1hcnQgeW91IHNob3VsZCB1c2UgTmVhcmVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI3NldEZpbHRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuRmlsdGVyTW9kZX0gZmlsdGVyTW9kZSAtIFRoZSBGaWx0ZXIgTW9kZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyTW9kZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlci5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0VGV4dHVyZUZpbHRlcih0aGlzLmdsVGV4dHVyZSwgZmlsdGVyTW9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjYWxlTW9kZSA9IGZpbHRlck1vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYFVOUEFDS19GTElQX1lfV0VCR0xgIGZsYWcgZm9yIHRoZSBXZWJHTCBUZXh0dXJlIGR1cmluZyB0ZXh0dXJlIHVwbG9hZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI3NldEZsaXBZXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBTaG91bGQgdGhlIFdlYkdMIFRleHR1cmUgYmUgZmxpcHBlZCBvbiB0aGUgWSBheGlzIG9uIHRleHR1cmUgdXBsb2FkIG9yIG5vdD9cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGlzIFRleHR1cmVTb3VyY2UgaXMgYmFja2VkIGJ5IGEgQ2FudmFzIGFuZCBpcyBydW5uaW5nIHVuZGVyIFdlYkdMLFxyXG4gICAgICogaXQgdXBkYXRlcyB0aGUgV2ViR0xUZXh0dXJlIHVzaW5nIHRoZSBjYW52YXMgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlU291cmNlI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBpZiAoZ2wgJiYgdGhpcy5pc0NhbnZhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gdGhpcy5yZW5kZXJlci51cGRhdGVDYW52YXNUZXh0dXJlKHRoaXMuaW1hZ2UsIHRoaXMuZ2xUZXh0dXJlLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZ2wgJiYgdGhpcy5pc1ZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLnVwZGF0ZVZpZGVvVGV4dHVyZSh0aGlzLmltYWdlLCB0aGlzLmdsVGV4dHVyZSwgdGhpcy5mbGlwWSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgVGV4dHVyZSBTb3VyY2UgYW5kIG51bGxzIHRoZSByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRleHR1cmVzLlRleHR1cmVTb3VyY2UjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xUZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMuZ2xUZXh0dXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQ2FudmFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQ2FudmFzUG9vbC5yZW1vdmUodGhpcy5pbWFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmltYWdlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVNvdXJjZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/TextureSource.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/const.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/textures/const.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Filter Types.\r\n *\r\n * @namespace Phaser.Textures.FilterMode\r\n * @memberof Phaser.Textures\r\n * @since 3.0.0\r\n */\r\nvar CONST = {\r\n\r\n    /**\r\n     * Linear filter type.\r\n     * \r\n     * @name Phaser.Textures.FilterMode.LINEAR\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    LINEAR: 0,\r\n\r\n    /**\r\n     * Nearest neighbor filter type.\r\n     * \r\n     * @name Phaser.Textures.FilterMode.NEAREST\r\n     * @type {integer}\r\n     * @const\r\n     * @since 3.0.0\r\n     */\r\n    NEAREST: 1\r\n    \r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9jb25zdC5qcz83M2IwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXIgVHlwZXMuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlRleHR1cmVzLkZpbHRlck1vZGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBDT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBmaWx0ZXIgdHlwZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkZpbHRlck1vZGUuTElORUFSXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExJTkVBUjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lYXJlc3QgbmVpZ2hib3IgZmlsdGVyIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5UZXh0dXJlcy5GaWx0ZXJNb2RlLk5FQVJFU1RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTkVBUkVTVDogMVxyXG4gICAgXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/ADD_EVENT.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/ADD_EVENT.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Texture Add Event.\r\n * \r\n * This event is dispatched by the Texture Manager when a texture is added to it.\r\n * \r\n * Listen to this event from within a Scene using: `this.textures.on('addtexture', listener)`.\r\n *\r\n * @event Phaser.Textures.Events#ADD\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Texture that was added to the Texture Manager.\r\n * @param {Phaser.Textures.Texture} texture - A reference to the Texture that was added to the Texture Manager.\r\n */\r\nmodule.exports = 'addtexture';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvQUREX0VWRU5ULmpzPzI4NTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvQUREX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRleHR1cmUgQWRkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBUZXh0dXJlIE1hbmFnZXIgd2hlbiBhIHRleHR1cmUgaXMgYWRkZWQgdG8gaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy50ZXh0dXJlcy5vbignYWRkdGV4dHVyZScsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVGV4dHVyZXMuRXZlbnRzI0FERFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYWRkdGV4dHVyZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/ADD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/ERROR_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/ERROR_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Texture Load Error Event.\r\n * \r\n * This event is dispatched by the Texture Manager when a texture it requested to load failed.\r\n * This only happens when base64 encoded textures fail. All other texture types are loaded via the Loader Plugin.\r\n * \r\n * Listen to this event from within a Scene using: `this.textures.on('onerror', listener)`.\r\n *\r\n * @event Phaser.Textures.Events#ERROR\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Texture that failed to load into the Texture Manager.\r\n */\r\nmodule.exports = 'onerror';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvRVJST1JfRVZFTlQuanM/M2QwYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvZXZlbnRzL0VSUk9SX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRleHR1cmUgTG9hZCBFcnJvciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgVGV4dHVyZSBNYW5hZ2VyIHdoZW4gYSB0ZXh0dXJlIGl0IHJlcXVlc3RlZCB0byBsb2FkIGZhaWxlZC5cclxuICogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBiYXNlNjQgZW5jb2RlZCB0ZXh0dXJlcyBmYWlsLiBBbGwgb3RoZXIgdGV4dHVyZSB0eXBlcyBhcmUgbG9hZGVkIHZpYSB0aGUgTG9hZGVyIFBsdWdpbi5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLnRleHR1cmVzLm9uKCdvbmVycm9yJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5UZXh0dXJlcy5FdmVudHMjRVJST1JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGF0IGZhaWxlZCB0byBsb2FkIGludG8gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ29uZXJyb3InO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/ERROR_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/LOAD_EVENT.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/LOAD_EVENT.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Texture Load Event.\r\n * \r\n * This event is dispatched by the Texture Manager when a texture has finished loading on it.\r\n * This only happens for base64 encoded textures. All other texture types are loaded via the Loader Plugin.\r\n * \r\n * Listen to this event from within a Scene using: `this.textures.on('onload', listener)`.\r\n * \r\n * This event is dispatched after the [ADD]{@linkcode Phaser.Textures.Events#event:ADD} event.\r\n *\r\n * @event Phaser.Textures.Events#LOAD\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Texture that was loaded by the Texture Manager.\r\n * @param {Phaser.Textures.Texture} texture - A reference to the Texture that was loaded by the Texture Manager.\r\n */\r\nmodule.exports = 'onload';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvTE9BRF9FVkVOVC5qcz9hYzE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDJDQUEyQztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLHdCQUF3QjtBQUNuQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvZXZlbnRzL0xPQURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVGV4dHVyZSBMb2FkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBUZXh0dXJlIE1hbmFnZXIgd2hlbiBhIHRleHR1cmUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgb24gaXQuXHJcbiAqIFRoaXMgb25seSBoYXBwZW5zIGZvciBiYXNlNjQgZW5jb2RlZCB0ZXh0dXJlcy4gQWxsIG90aGVyIHRleHR1cmUgdHlwZXMgYXJlIGxvYWRlZCB2aWEgdGhlIExvYWRlciBQbHVnaW4uXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy50ZXh0dXJlcy5vbignb25sb2FkJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgW0FERF17QGxpbmtjb2RlIFBoYXNlci5UZXh0dXJlcy5FdmVudHMjZXZlbnQ6QUREfSBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5UZXh0dXJlcy5FdmVudHMjTE9BRFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSB0ZXh0dXJlIC0gQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmUgdGhhdCB3YXMgbG9hZGVkIGJ5IHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdvbmxvYWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/LOAD_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/READY_EVENT.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/READY_EVENT.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This internal event signifies that the Texture Manager is now ready and the Game can continue booting.\r\n * \r\n * When a Phaser Game instance is booting for the first time, the Texture Manager has to wait on a couple of non-blocking\r\n * async events before it's fully ready to carry on. When those complete the Texture Manager emits this event via the Game\r\n * instance, which tells the Game to carry on booting.\r\n *\r\n * @event Phaser.Textures.Events#READY\r\n * @since 3.16.1\r\n */\r\nmodule.exports = 'ready';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvUkVBRFlfRVZFTlQuanM/OGVjMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL2V2ZW50cy9SRUFEWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgc2lnbmlmaWVzIHRoYXQgdGhlIFRleHR1cmUgTWFuYWdlciBpcyBub3cgcmVhZHkgYW5kIHRoZSBHYW1lIGNhbiBjb250aW51ZSBib290aW5nLlxyXG4gKiBcclxuICogV2hlbiBhIFBoYXNlciBHYW1lIGluc3RhbmNlIGlzIGJvb3RpbmcgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUgVGV4dHVyZSBNYW5hZ2VyIGhhcyB0byB3YWl0IG9uIGEgY291cGxlIG9mIG5vbi1ibG9ja2luZ1xyXG4gKiBhc3luYyBldmVudHMgYmVmb3JlIGl0J3MgZnVsbHkgcmVhZHkgdG8gY2Fycnkgb24uIFdoZW4gdGhvc2UgY29tcGxldGUgdGhlIFRleHR1cmUgTWFuYWdlciBlbWl0cyB0aGlzIGV2ZW50IHZpYSB0aGUgR2FtZVxyXG4gKiBpbnN0YW5jZSwgd2hpY2ggdGVsbHMgdGhlIEdhbWUgdG8gY2Fycnkgb24gYm9vdGluZy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5UZXh0dXJlcy5FdmVudHMjUkVBRFlcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVhZHknO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/READY_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/REMOVE_EVENT.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/REMOVE_EVENT.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Texture Remove Event.\r\n * \r\n * This event is dispatched by the Texture Manager when a texture is removed from it.\r\n * \r\n * Listen to this event from within a Scene using: `this.textures.on('removetexture', listener)`.\r\n * \r\n * If you have any Game Objects still using the removed texture, they will start throwing\r\n * errors the next time they try to render. Be sure to clear all use of the texture in this event handler.\r\n *\r\n * @event Phaser.Textures.Events#REMOVE\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Texture that was removed from the Texture Manager.\r\n */\r\nmodule.exports = 'removetexture';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvUkVNT1ZFX0VWRU5ULmpzP2I1YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvUkVNT1ZFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRleHR1cmUgUmVtb3ZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBUZXh0dXJlIE1hbmFnZXIgd2hlbiBhIHRleHR1cmUgaXMgcmVtb3ZlZCBmcm9tIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMudGV4dHVyZXMub24oJ3JlbW92ZXRleHR1cmUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogSWYgeW91IGhhdmUgYW55IEdhbWUgT2JqZWN0cyBzdGlsbCB1c2luZyB0aGUgcmVtb3ZlZCB0ZXh0dXJlLCB0aGV5IHdpbGwgc3RhcnQgdGhyb3dpbmdcclxuICogZXJyb3JzIHRoZSBuZXh0IHRpbWUgdGhleSB0cnkgdG8gcmVuZGVyLiBCZSBzdXJlIHRvIGNsZWFyIGFsbCB1c2Ugb2YgdGhlIHRleHR1cmUgaW4gdGhpcyBldmVudCBoYW5kbGVyLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlRleHR1cmVzLkV2ZW50cyNSRU1PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3JlbW92ZXRleHR1cmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/REMOVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/events/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/textures/events/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Textures.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ADD: __webpack_require__(/*! ./ADD_EVENT */ \"./node_modules/phaser/src/textures/events/ADD_EVENT.js\"),\r\n    ERROR: __webpack_require__(/*! ./ERROR_EVENT */ \"./node_modules/phaser/src/textures/events/ERROR_EVENT.js\"),\r\n    LOAD: __webpack_require__(/*! ./LOAD_EVENT */ \"./node_modules/phaser/src/textures/events/LOAD_EVENT.js\"),\r\n    READY: __webpack_require__(/*! ./READY_EVENT */ \"./node_modules/phaser/src/textures/events/READY_EVENT.js\"),\r\n    REMOVE: __webpack_require__(/*! ./REMOVE_EVENT */ \"./node_modules/phaser/src/textures/events/REMOVE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9ldmVudHMvaW5kZXguanM/ZjE5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsbUJBQU8sQ0FBQywyRUFBYTtBQUM5QixXQUFXLG1CQUFPLENBQUMsK0VBQWU7QUFDbEMsVUFBVSxtQkFBTyxDQUFDLDZFQUFjO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQywrRUFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsaUZBQWdCOztBQUVwQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlRleHR1cmVzLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFERDogcmVxdWlyZSgnLi9BRERfRVZFTlQnKSxcclxuICAgIEVSUk9SOiByZXF1aXJlKCcuL0VSUk9SX0VWRU5UJyksXHJcbiAgICBMT0FEOiByZXF1aXJlKCcuL0xPQURfRVZFTlQnKSxcclxuICAgIFJFQURZOiByZXF1aXJlKCcuL1JFQURZX0VWRU5UJyksXHJcbiAgICBSRU1PVkU6IHJlcXVpcmUoJy4vUkVNT1ZFX0VWRU5UJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/index.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/textures/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar FilterMode = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/textures/const.js\");\r\n\r\n/**\r\n * @namespace Phaser.Textures\r\n */\r\n\r\n/**\r\n * Linear filter type.\r\n * \r\n * @name Phaser.Textures.LINEAR\r\n * @type {integer}\r\n * @const\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * Nearest Neighbor filter type.\r\n * \r\n * @name Phaser.Textures.NEAREST\r\n * @type {integer}\r\n * @const\r\n * @since 3.0.0\r\n */\r\n\r\nvar Textures = {\r\n\r\n    CanvasTexture: __webpack_require__(/*! ./CanvasTexture */ \"./node_modules/phaser/src/textures/CanvasTexture.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/textures/events/index.js\"),\r\n    FilterMode: FilterMode,\r\n    Frame: __webpack_require__(/*! ./Frame */ \"./node_modules/phaser/src/textures/Frame.js\"),\r\n    Parsers: __webpack_require__(/*! ./parsers */ \"./node_modules/phaser/src/textures/parsers/index.js\"),\r\n    Texture: __webpack_require__(/*! ./Texture */ \"./node_modules/phaser/src/textures/Texture.js\"),\r\n    TextureManager: __webpack_require__(/*! ./TextureManager */ \"./node_modules/phaser/src/textures/TextureManager.js\"),\r\n    TextureSource: __webpack_require__(/*! ./TextureSource */ \"./node_modules/phaser/src/textures/TextureSource.js\")\r\n\r\n};\r\n\r\nTextures = Extend(false, Textures, FilterMode);\r\n\r\nmodule.exports = Textures;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9pbmRleC5qcz9hZjBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQzdDLGlCQUFpQixtQkFBTyxDQUFDLDREQUFTOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyw0RUFBaUI7QUFDNUMsWUFBWSxtQkFBTyxDQUFDLG9FQUFVO0FBQzlCO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLDREQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxzRUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsZ0VBQVc7QUFDaEMsb0JBQW9CLG1CQUFPLENBQUMsOEVBQWtCO0FBQzlDLG1CQUFtQixtQkFBTyxDQUFDLDRFQUFpQjs7QUFFNUM7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxudmFyIEZpbHRlck1vZGUgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGV4dHVyZXNcclxuICovXHJcblxyXG4vKipcclxuICogTGluZWFyIGZpbHRlciB0eXBlLlxyXG4gKiBcclxuICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLkxJTkVBUlxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQGNvbnN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBOZWFyZXN0IE5laWdoYm9yIGZpbHRlciB0eXBlLlxyXG4gKiBcclxuICogQG5hbWUgUGhhc2VyLlRleHR1cmVzLk5FQVJFU1RcclxuICogQHR5cGUge2ludGVnZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgVGV4dHVyZXMgPSB7XHJcblxyXG4gICAgQ2FudmFzVGV4dHVyZTogcmVxdWlyZSgnLi9DYW52YXNUZXh0dXJlJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgICBGaWx0ZXJNb2RlOiBGaWx0ZXJNb2RlLFxyXG4gICAgRnJhbWU6IHJlcXVpcmUoJy4vRnJhbWUnKSxcclxuICAgIFBhcnNlcnM6IHJlcXVpcmUoJy4vcGFyc2VycycpLFxyXG4gICAgVGV4dHVyZTogcmVxdWlyZSgnLi9UZXh0dXJlJyksXHJcbiAgICBUZXh0dXJlTWFuYWdlcjogcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxyXG4gICAgVGV4dHVyZVNvdXJjZTogcmVxdWlyZSgnLi9UZXh0dXJlU291cmNlJylcclxuXHJcbn07XHJcblxyXG5UZXh0dXJlcyA9IEV4dGVuZChmYWxzZSwgVGV4dHVyZXMsIEZpbHRlck1vZGUpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/AtlasXML.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/AtlasXML.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Parses an XML Texture Atlas object and adds all the Frames into a Texture.\r\n *\r\n * @function Phaser.Textures.Parsers.AtlasXML\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n * @param {*} xml - The XML data.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar AtlasXML = function (texture, sourceIndex, xml)\r\n{\r\n    //  Malformed?\r\n    if (!xml.getElementsByTagName('TextureAtlas'))\r\n    {\r\n        console.warn('Invalid Texture Atlas XML given');\r\n        return;\r\n    }\r\n\r\n    //  Add in a __BASE entry (for the entire atlas)\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    //  By this stage frames is a fully parsed array\r\n    var frames = xml.getElementsByTagName('SubTexture');\r\n\r\n    var newFrame;\r\n\r\n    for (var i = 0; i < frames.length; i++)\r\n    {\r\n        var frame = frames[i].attributes;\r\n\r\n        var name = frame.name.value;\r\n        var x = parseInt(frame.x.value, 10);\r\n        var y = parseInt(frame.y.value, 10);\r\n        var width = parseInt(frame.width.value, 10);\r\n        var height = parseInt(frame.height.value, 10);\r\n\r\n        //  The frame values are the exact coordinates to cut the frame out of the atlas from\r\n        newFrame = texture.add(name, sourceIndex, x, y, width, height);\r\n\r\n        //  These are the original (non-trimmed) sprite values\r\n        if (frame.frameX)\r\n        {\r\n            var frameX = Math.abs(parseInt(frame.frameX.value, 10));\r\n            var frameY = Math.abs(parseInt(frame.frameY.value, 10));\r\n            var frameWidth = parseInt(frame.frameWidth.value, 10);\r\n            var frameHeight = parseInt(frame.frameHeight.value, 10);\r\n\r\n            newFrame.setTrim(\r\n                width,\r\n                height,\r\n                frameX,\r\n                frameY,\r\n                frameWidth,\r\n                frameHeight\r\n            );\r\n        }\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = AtlasXML;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL0F0bGFzWE1MLmpzPzNkM2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL3BhcnNlcnMvQXRsYXNYTUwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYW4gWE1MIFRleHR1cmUgQXRsYXMgb2JqZWN0IGFuZCBhZGRzIGFsbCB0aGUgRnJhbWVzIGludG8gYSBUZXh0dXJlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRleHR1cmVzLlBhcnNlcnMuQXRsYXNYTUxcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlcy5QYXJzZXJzXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIFRleHR1cmUgdG8gYWRkIHRoZSBGcmFtZXMgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc291cmNlSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIFRleHR1cmVTb3VyY2UuXHJcbiAqIEBwYXJhbSB7Kn0geG1sIC0gVGhlIFhNTCBkYXRhLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgbW9kaWZpZWQgYnkgdGhpcyBwYXJzZXIuXHJcbiAqL1xyXG52YXIgQXRsYXNYTUwgPSBmdW5jdGlvbiAodGV4dHVyZSwgc291cmNlSW5kZXgsIHhtbClcclxue1xyXG4gICAgLy8gIE1hbGZvcm1lZD9cclxuICAgIGlmICgheG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdUZXh0dXJlQXRsYXMnKSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgVGV4dHVyZSBBdGxhcyBYTUwgZ2l2ZW4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEFkZCBpbiBhIF9fQkFTRSBlbnRyeSAoZm9yIHRoZSBlbnRpcmUgYXRsYXMpXHJcbiAgICB2YXIgc291cmNlID0gdGV4dHVyZS5zb3VyY2Vbc291cmNlSW5kZXhdO1xyXG5cclxuICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCBzb3VyY2VJbmRleCwgMCwgMCwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxuXHJcbiAgICAvLyAgQnkgdGhpcyBzdGFnZSBmcmFtZXMgaXMgYSBmdWxseSBwYXJzZWQgYXJyYXlcclxuICAgIHZhciBmcmFtZXMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1N1YlRleHR1cmUnKTtcclxuXHJcbiAgICB2YXIgbmV3RnJhbWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gZnJhbWVzW2ldLmF0dHJpYnV0ZXM7XHJcblxyXG4gICAgICAgIHZhciBuYW1lID0gZnJhbWUubmFtZS52YWx1ZTtcclxuICAgICAgICB2YXIgeCA9IHBhcnNlSW50KGZyYW1lLngudmFsdWUsIDEwKTtcclxuICAgICAgICB2YXIgeSA9IHBhcnNlSW50KGZyYW1lLnkudmFsdWUsIDEwKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludChmcmFtZS53aWR0aC52YWx1ZSwgMTApO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBwYXJzZUludChmcmFtZS5oZWlnaHQudmFsdWUsIDEwKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBmcmFtZSB2YWx1ZXMgYXJlIHRoZSBleGFjdCBjb29yZGluYXRlcyB0byBjdXQgdGhlIGZyYW1lIG91dCBvZiB0aGUgYXRsYXMgZnJvbVxyXG4gICAgICAgIG5ld0ZyYW1lID0gdGV4dHVyZS5hZGQobmFtZSwgc291cmNlSW5kZXgsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyAgVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCAobm9uLXRyaW1tZWQpIHNwcml0ZSB2YWx1ZXNcclxuICAgICAgICBpZiAoZnJhbWUuZnJhbWVYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZyYW1lWCA9IE1hdGguYWJzKHBhcnNlSW50KGZyYW1lLmZyYW1lWC52YWx1ZSwgMTApKTtcclxuICAgICAgICAgICAgdmFyIGZyYW1lWSA9IE1hdGguYWJzKHBhcnNlSW50KGZyYW1lLmZyYW1lWS52YWx1ZSwgMTApKTtcclxuICAgICAgICAgICAgdmFyIGZyYW1lV2lkdGggPSBwYXJzZUludChmcmFtZS5mcmFtZVdpZHRoLnZhbHVlLCAxMCk7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZUhlaWdodCA9IHBhcnNlSW50KGZyYW1lLmZyYW1lSGVpZ2h0LnZhbHVlLCAxMCk7XHJcblxyXG4gICAgICAgICAgICBuZXdGcmFtZS5zZXRUcmltKFxyXG4gICAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmcmFtZVgsXHJcbiAgICAgICAgICAgICAgICBmcmFtZVksXHJcbiAgICAgICAgICAgICAgICBmcmFtZVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgZnJhbWVIZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEF0bGFzWE1MO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/AtlasXML.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/Canvas.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/Canvas.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds a Canvas Element to a Texture.\r\n *\r\n * @function Phaser.Textures.Parsers.Canvas\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar Canvas = function (texture, sourceIndex)\r\n{\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = Canvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL0NhbnZhcy5qcz8zMmY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RleHR1cmVzL3BhcnNlcnMvQ2FudmFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQWRkcyBhIENhbnZhcyBFbGVtZW50IHRvIGEgVGV4dHVyZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UZXh0dXJlcy5QYXJzZXJzLkNhbnZhc1xyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0byBhZGQgdGhlIEZyYW1lcyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzb3VyY2VJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIG1vZGlmaWVkIGJ5IHRoaXMgcGFyc2VyLlxyXG4gKi9cclxudmFyIENhbnZhcyA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBzb3VyY2VJbmRleClcclxue1xyXG4gICAgdmFyIHNvdXJjZSA9IHRleHR1cmUuc291cmNlW3NvdXJjZUluZGV4XTtcclxuXHJcbiAgICB0ZXh0dXJlLmFkZCgnX19CQVNFJywgc291cmNlSW5kZXgsIDAsIDAsIHNvdXJjZS53aWR0aCwgc291cmNlLmhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/Canvas.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/Image.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/Image.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds an Image Element to a Texture.\r\n *\r\n * @function Phaser.Textures.Parsers.Image\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar Image = function (texture, sourceIndex)\r\n{\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = Image;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL0ltYWdlLmpzPzEyNzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvcGFyc2Vycy9JbWFnZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gSW1hZ2UgRWxlbWVudCB0byBhIFRleHR1cmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGV4dHVyZXMuUGFyc2Vycy5JbWFnZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0byBhZGQgdGhlIEZyYW1lcyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzb3VyY2VJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIG1vZGlmaWVkIGJ5IHRoaXMgcGFyc2VyLlxyXG4gKi9cclxudmFyIEltYWdlID0gZnVuY3Rpb24gKHRleHR1cmUsIHNvdXJjZUluZGV4KVxyXG57XHJcbiAgICB2YXIgc291cmNlID0gdGV4dHVyZS5zb3VyY2Vbc291cmNlSW5kZXhdO1xyXG5cclxuICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCBzb3VyY2VJbmRleCwgMCwgMCwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW1hZ2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/Image.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/JSONArray.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/JSONArray.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clone = __webpack_require__(/*! ../../utils/object/Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\n\r\n/**\r\n * Parses a Texture Atlas JSON Array and adds the Frames to the Texture.\r\n * JSON format expected to match that defined by Texture Packer, with the frames property containing an array of Frames.\r\n *\r\n * @function Phaser.Textures.Parsers.JSONArray\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n * @param {object} json - The JSON data.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar JSONArray = function (texture, sourceIndex, json)\r\n{\r\n    //  Malformed?\r\n    if (!json['frames'] && !json['textures'])\r\n    {\r\n        console.warn('Invalid Texture Atlas JSON Array');\r\n        return;\r\n    }\r\n\r\n    //  Add in a __BASE entry (for the entire atlas)\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    //  By this stage frames is a fully parsed array\r\n    var frames = (Array.isArray(json.textures)) ? json.textures[sourceIndex].frames : json.frames;\r\n\r\n    var newFrame;\r\n\r\n    for (var i = 0; i < frames.length; i++)\r\n    {\r\n        var src = frames[i];\r\n\r\n        //  The frame values are the exact coordinates to cut the frame out of the atlas from\r\n        newFrame = texture.add(src.filename, sourceIndex, src.frame.x, src.frame.y, src.frame.w, src.frame.h);\r\n\r\n        //  These are the original (non-trimmed) sprite values\r\n        if (src.trimmed)\r\n        {\r\n            newFrame.setTrim(\r\n                src.sourceSize.w,\r\n                src.sourceSize.h,\r\n                src.spriteSourceSize.x,\r\n                src.spriteSourceSize.y,\r\n                src.spriteSourceSize.w,\r\n                src.spriteSourceSize.h\r\n            );\r\n        }\r\n\r\n        if (src.rotated)\r\n        {\r\n            newFrame.rotated = true;\r\n            newFrame.updateUVsInverted();\r\n        }\r\n\r\n        if (src.anchor)\r\n        {\r\n            newFrame.customPivot = true;\r\n            newFrame.pivotX = src.anchor.x;\r\n            newFrame.pivotY = src.anchor.y;\r\n        }\r\n\r\n        //  Copy over any extra data\r\n        newFrame.customData = Clone(src);\r\n    }\r\n\r\n    //  Copy over any additional data that was in the JSON to Texture.customData\r\n    for (var dataKey in json)\r\n    {\r\n        if (dataKey === 'frames')\r\n        {\r\n            continue;\r\n        }\r\n\r\n        if (Array.isArray(json[dataKey]))\r\n        {\r\n            texture.customData[dataKey] = json[dataKey].slice(0);\r\n        }\r\n        else\r\n        {\r\n            texture.customData[dataKey] = json[dataKey];\r\n        }\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = JSONArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL0pTT05BcnJheS5qcz83NDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsaUZBQTBCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvcGFyc2Vycy9KU09OQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbG9uZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9DbG9uZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFRleHR1cmUgQXRsYXMgSlNPTiBBcnJheSBhbmQgYWRkcyB0aGUgRnJhbWVzIHRvIHRoZSBUZXh0dXJlLlxyXG4gKiBKU09OIGZvcm1hdCBleHBlY3RlZCB0byBtYXRjaCB0aGF0IGRlZmluZWQgYnkgVGV4dHVyZSBQYWNrZXIsIHdpdGggdGhlIGZyYW1lcyBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGFycmF5IG9mIEZyYW1lcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UZXh0dXJlcy5QYXJzZXJzLkpTT05BcnJheVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0byBhZGQgdGhlIEZyYW1lcyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzb3VyY2VJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZS5cclxuICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBUaGUgSlNPTiBkYXRhLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgbW9kaWZpZWQgYnkgdGhpcyBwYXJzZXIuXHJcbiAqL1xyXG52YXIgSlNPTkFycmF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIHNvdXJjZUluZGV4LCBqc29uKVxyXG57XHJcbiAgICAvLyAgTWFsZm9ybWVkP1xyXG4gICAgaWYgKCFqc29uWydmcmFtZXMnXSAmJiAhanNvblsndGV4dHVyZXMnXSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgVGV4dHVyZSBBdGxhcyBKU09OIEFycmF5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBBZGQgaW4gYSBfX0JBU0UgZW50cnkgKGZvciB0aGUgZW50aXJlIGF0bGFzKVxyXG4gICAgdmFyIHNvdXJjZSA9IHRleHR1cmUuc291cmNlW3NvdXJjZUluZGV4XTtcclxuXHJcbiAgICB0ZXh0dXJlLmFkZCgnX19CQVNFJywgc291cmNlSW5kZXgsIDAsIDAsIHNvdXJjZS53aWR0aCwgc291cmNlLmhlaWdodCk7XHJcblxyXG4gICAgLy8gIEJ5IHRoaXMgc3RhZ2UgZnJhbWVzIGlzIGEgZnVsbHkgcGFyc2VkIGFycmF5XHJcbiAgICB2YXIgZnJhbWVzID0gKEFycmF5LmlzQXJyYXkoanNvbi50ZXh0dXJlcykpID8ganNvbi50ZXh0dXJlc1tzb3VyY2VJbmRleF0uZnJhbWVzIDoganNvbi5mcmFtZXM7XHJcblxyXG4gICAgdmFyIG5ld0ZyYW1lO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzcmMgPSBmcmFtZXNbaV07XHJcblxyXG4gICAgICAgIC8vICBUaGUgZnJhbWUgdmFsdWVzIGFyZSB0aGUgZXhhY3QgY29vcmRpbmF0ZXMgdG8gY3V0IHRoZSBmcmFtZSBvdXQgb2YgdGhlIGF0bGFzIGZyb21cclxuICAgICAgICBuZXdGcmFtZSA9IHRleHR1cmUuYWRkKHNyYy5maWxlbmFtZSwgc291cmNlSW5kZXgsIHNyYy5mcmFtZS54LCBzcmMuZnJhbWUueSwgc3JjLmZyYW1lLncsIHNyYy5mcmFtZS5oKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZXNlIGFyZSB0aGUgb3JpZ2luYWwgKG5vbi10cmltbWVkKSBzcHJpdGUgdmFsdWVzXHJcbiAgICAgICAgaWYgKHNyYy50cmltbWVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmV3RnJhbWUuc2V0VHJpbShcclxuICAgICAgICAgICAgICAgIHNyYy5zb3VyY2VTaXplLncsXHJcbiAgICAgICAgICAgICAgICBzcmMuc291cmNlU2l6ZS5oLFxyXG4gICAgICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUueCxcclxuICAgICAgICAgICAgICAgIHNyYy5zcHJpdGVTb3VyY2VTaXplLnksXHJcbiAgICAgICAgICAgICAgICBzcmMuc3ByaXRlU291cmNlU2l6ZS53LFxyXG4gICAgICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUuaFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNyYy5yb3RhdGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmV3RnJhbWUucm90YXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIG5ld0ZyYW1lLnVwZGF0ZVVWc0ludmVydGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmFuY2hvcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5ld0ZyYW1lLmN1c3RvbVBpdm90ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbmV3RnJhbWUucGl2b3RYID0gc3JjLmFuY2hvci54O1xyXG4gICAgICAgICAgICBuZXdGcmFtZS5waXZvdFkgPSBzcmMuYW5jaG9yLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ29weSBvdmVyIGFueSBleHRyYSBkYXRhXHJcbiAgICAgICAgbmV3RnJhbWUuY3VzdG9tRGF0YSA9IENsb25lKHNyYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIENvcHkgb3ZlciBhbnkgYWRkaXRpb25hbCBkYXRhIHRoYXQgd2FzIGluIHRoZSBKU09OIHRvIFRleHR1cmUuY3VzdG9tRGF0YVxyXG4gICAgZm9yICh2YXIgZGF0YUtleSBpbiBqc29uKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkYXRhS2V5ID09PSAnZnJhbWVzJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbltkYXRhS2V5XSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmN1c3RvbURhdGFbZGF0YUtleV0gPSBqc29uW2RhdGFLZXldLnNsaWNlKDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmN1c3RvbURhdGFbZGF0YUtleV0gPSBqc29uW2RhdGFLZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSlNPTkFycmF5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/JSONArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/JSONHash.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/JSONHash.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clone = __webpack_require__(/*! ../../utils/object/Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\n\r\n/**\r\n * Parses a Texture Atlas JSON Hash and adds the Frames to the Texture.\r\n * JSON format expected to match that defined by Texture Packer, with the frames property containing an object of Frames.\r\n *\r\n * @function Phaser.Textures.Parsers.JSONHash\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n * @param {object} json - The JSON data.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar JSONHash = function (texture, sourceIndex, json)\r\n{\r\n    //  Malformed?\r\n    if (!json['frames'])\r\n    {\r\n        console.warn('Invalid Texture Atlas JSON Hash given, missing \\'frames\\' Object');\r\n        return;\r\n    }\r\n\r\n    //  Add in a __BASE entry (for the entire atlas)\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    //  By this stage frames is a fully parsed Object\r\n    var frames = json['frames'];\r\n    var newFrame;\r\n\r\n    for (var key in frames)\r\n    {\r\n        var src = frames[key];\r\n\r\n        //  The frame values are the exact coordinates to cut the frame out of the atlas from\r\n        newFrame = texture.add(key, sourceIndex, src.frame.x, src.frame.y, src.frame.w, src.frame.h);\r\n\r\n        //  These are the original (non-trimmed) sprite values\r\n        if (src.trimmed)\r\n        {\r\n            newFrame.setTrim(\r\n                src.sourceSize.w,\r\n                src.sourceSize.h,\r\n                src.spriteSourceSize.x,\r\n                src.spriteSourceSize.y,\r\n                src.spriteSourceSize.w,\r\n                src.spriteSourceSize.h\r\n            );\r\n        }\r\n\r\n        if (src.rotated)\r\n        {\r\n            newFrame.rotated = true;\r\n            newFrame.updateUVsInverted();\r\n        }\r\n\r\n        //  Copy over any extra data\r\n        newFrame.customData = Clone(src);\r\n    }\r\n\r\n    //  Copy over any additional data that was in the JSON to Texture.customData\r\n    for (var dataKey in json)\r\n    {\r\n        if (dataKey === 'frames')\r\n        {\r\n            continue;\r\n        }\r\n\r\n        if (Array.isArray(json[dataKey]))\r\n        {\r\n            texture.customData[dataKey] = json[dataKey].slice(0);\r\n        }\r\n        else\r\n        {\r\n            texture.customData[dataKey] = json[dataKey];\r\n        }\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = JSONHash;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL0pTT05IYXNoLmpzP2ZmMjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvcGFyc2Vycy9KU09OSGFzaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsb25lID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0Nsb25lJyk7XHJcblxyXG4vKipcclxuICogUGFyc2VzIGEgVGV4dHVyZSBBdGxhcyBKU09OIEhhc2ggYW5kIGFkZHMgdGhlIEZyYW1lcyB0byB0aGUgVGV4dHVyZS5cclxuICogSlNPTiBmb3JtYXQgZXhwZWN0ZWQgdG8gbWF0Y2ggdGhhdCBkZWZpbmVkIGJ5IFRleHR1cmUgUGFja2VyLCB3aXRoIHRoZSBmcmFtZXMgcHJvcGVydHkgY29udGFpbmluZyBhbiBvYmplY3Qgb2YgRnJhbWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRleHR1cmVzLlBhcnNlcnMuSlNPTkhhc2hcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlcy5QYXJzZXJzXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIFRleHR1cmUgdG8gYWRkIHRoZSBGcmFtZXMgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc291cmNlSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIFRleHR1cmVTb3VyY2UuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIEpTT04gZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIG1vZGlmaWVkIGJ5IHRoaXMgcGFyc2VyLlxyXG4gKi9cclxudmFyIEpTT05IYXNoID0gZnVuY3Rpb24gKHRleHR1cmUsIHNvdXJjZUluZGV4LCBqc29uKVxyXG57XHJcbiAgICAvLyAgTWFsZm9ybWVkP1xyXG4gICAgaWYgKCFqc29uWydmcmFtZXMnXSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgVGV4dHVyZSBBdGxhcyBKU09OIEhhc2ggZ2l2ZW4sIG1pc3NpbmcgXFwnZnJhbWVzXFwnIE9iamVjdCcpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQWRkIGluIGEgX19CQVNFIGVudHJ5IChmb3IgdGhlIGVudGlyZSBhdGxhcylcclxuICAgIHZhciBzb3VyY2UgPSB0ZXh0dXJlLnNvdXJjZVtzb3VyY2VJbmRleF07XHJcblxyXG4gICAgdGV4dHVyZS5hZGQoJ19fQkFTRScsIHNvdXJjZUluZGV4LCAwLCAwLCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG5cclxuICAgIC8vICBCeSB0aGlzIHN0YWdlIGZyYW1lcyBpcyBhIGZ1bGx5IHBhcnNlZCBPYmplY3RcclxuICAgIHZhciBmcmFtZXMgPSBqc29uWydmcmFtZXMnXTtcclxuICAgIHZhciBuZXdGcmFtZTtcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJhbWVzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzcmMgPSBmcmFtZXNba2V5XTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBmcmFtZSB2YWx1ZXMgYXJlIHRoZSBleGFjdCBjb29yZGluYXRlcyB0byBjdXQgdGhlIGZyYW1lIG91dCBvZiB0aGUgYXRsYXMgZnJvbVxyXG4gICAgICAgIG5ld0ZyYW1lID0gdGV4dHVyZS5hZGQoa2V5LCBzb3VyY2VJbmRleCwgc3JjLmZyYW1lLngsIHNyYy5mcmFtZS55LCBzcmMuZnJhbWUudywgc3JjLmZyYW1lLmgpO1xyXG5cclxuICAgICAgICAvLyAgVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCAobm9uLXRyaW1tZWQpIHNwcml0ZSB2YWx1ZXNcclxuICAgICAgICBpZiAoc3JjLnRyaW1tZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuZXdGcmFtZS5zZXRUcmltKFxyXG4gICAgICAgICAgICAgICAgc3JjLnNvdXJjZVNpemUudyxcclxuICAgICAgICAgICAgICAgIHNyYy5zb3VyY2VTaXplLmgsXHJcbiAgICAgICAgICAgICAgICBzcmMuc3ByaXRlU291cmNlU2l6ZS54LFxyXG4gICAgICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUueSxcclxuICAgICAgICAgICAgICAgIHNyYy5zcHJpdGVTb3VyY2VTaXplLncsXHJcbiAgICAgICAgICAgICAgICBzcmMuc3ByaXRlU291cmNlU2l6ZS5oXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLnJvdGF0ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuZXdGcmFtZS5yb3RhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgbmV3RnJhbWUudXBkYXRlVVZzSW52ZXJ0ZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBDb3B5IG92ZXIgYW55IGV4dHJhIGRhdGFcclxuICAgICAgICBuZXdGcmFtZS5jdXN0b21EYXRhID0gQ2xvbmUoc3JjKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQ29weSBvdmVyIGFueSBhZGRpdGlvbmFsIGRhdGEgdGhhdCB3YXMgaW4gdGhlIEpTT04gdG8gVGV4dHVyZS5jdXN0b21EYXRhXHJcbiAgICBmb3IgKHZhciBkYXRhS2V5IGluIGpzb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRhdGFLZXkgPT09ICdmcmFtZXMnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uW2RhdGFLZXldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuY3VzdG9tRGF0YVtkYXRhS2V5XSA9IGpzb25bZGF0YUtleV0uc2xpY2UoMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuY3VzdG9tRGF0YVtkYXRhS2V5XSA9IGpzb25bZGF0YUtleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBKU09OSGFzaDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/JSONHash.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/SpriteSheet.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/SpriteSheet.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Parses a Sprite Sheet and adds the Frames to the Texture.\r\n * \r\n * In Phaser terminology a Sprite Sheet is a texture containing different frames, but each frame is the exact\r\n * same size and cannot be trimmed or rotated.\r\n *\r\n * @function Phaser.Textures.Parsers.SpriteSheet\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n * @param {integer} x - [description]\r\n * @param {integer} y - [description]\r\n * @param {integer} width - [description]\r\n * @param {integer} height - [description]\r\n * @param {object} config - An object describing how to parse the Sprite Sheet.\r\n * @param {number} config.frameWidth - Width in pixels of a single frame in the sprite sheet.\r\n * @param {number} [config.frameHeight] - Height in pixels of a single frame in the sprite sheet. Defaults to frameWidth if not provided.\r\n * @param {number} [config.startFrame=0] - [description]\r\n * @param {number} [config.endFrame=-1] - [description]\r\n * @param {number} [config.margin=0] - If the frames have been drawn with a margin, specify the amount here.\r\n * @param {number} [config.spacing=0] - If the frames have been drawn with spacing between them, specify the amount here.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar SpriteSheet = function (texture, sourceIndex, x, y, width, height, config)\r\n{\r\n    var frameWidth = GetFastValue(config, 'frameWidth', null);\r\n    var frameHeight = GetFastValue(config, 'frameHeight', frameWidth);\r\n\r\n    //  If missing we can't proceed\r\n    if (frameWidth === null)\r\n    {\r\n        throw new Error('TextureManager.SpriteSheet: Invalid frameWidth given.');\r\n    }\r\n\r\n    //  Add in a __BASE entry (for the entire atlas)\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    var startFrame = GetFastValue(config, 'startFrame', 0);\r\n    var endFrame = GetFastValue(config, 'endFrame', -1);\r\n    var margin = GetFastValue(config, 'margin', 0);\r\n    var spacing = GetFastValue(config, 'spacing', 0);\r\n\r\n    var row = Math.floor((width - margin + spacing) / (frameWidth + spacing));\r\n    var column = Math.floor((height - margin + spacing) / (frameHeight + spacing));\r\n    var total = row * column;\r\n\r\n    if (total === 0)\r\n    {\r\n        console.warn('SpriteSheet frame dimensions will result in zero frames.');\r\n    }\r\n\r\n    if (startFrame > total || startFrame < -total)\r\n    {\r\n        startFrame = 0;\r\n    }\r\n\r\n    if (startFrame < 0)\r\n    {\r\n        //  Allow negative skipframes.\r\n        startFrame = total + startFrame;\r\n    }\r\n\r\n    if (endFrame !== -1)\r\n    {\r\n        total = startFrame + (endFrame + 1);\r\n    }\r\n\r\n    var fx = margin;\r\n    var fy = margin;\r\n    var ax = 0;\r\n    var ay = 0;\r\n\r\n    for (var i = 0; i < total; i++)\r\n    {\r\n        ax = 0;\r\n        ay = 0;\r\n\r\n        var w = fx + frameWidth;\r\n        var h = fy + frameHeight;\r\n\r\n        if (w > width)\r\n        {\r\n            ax = w - width;\r\n        }\r\n\r\n        if (h > height)\r\n        {\r\n            ay = h - height;\r\n        }\r\n\r\n        texture.add(i, sourceIndex, x + fx, y + fy, frameWidth - ax, frameHeight - ay);\r\n\r\n        fx += frameWidth + spacing;\r\n\r\n        if (fx + frameWidth > width)\r\n        {\r\n            fx = margin;\r\n            fy += frameHeight + spacing;\r\n        }\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = SpriteSheet;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL1Nwcml0ZVNoZWV0LmpzPzgzNjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL1Nwcml0ZVNoZWV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFNwcml0ZSBTaGVldCBhbmQgYWRkcyB0aGUgRnJhbWVzIHRvIHRoZSBUZXh0dXJlLlxyXG4gKiBcclxuICogSW4gUGhhc2VyIHRlcm1pbm9sb2d5IGEgU3ByaXRlIFNoZWV0IGlzIGEgdGV4dHVyZSBjb250YWluaW5nIGRpZmZlcmVudCBmcmFtZXMsIGJ1dCBlYWNoIGZyYW1lIGlzIHRoZSBleGFjdFxyXG4gKiBzYW1lIHNpemUgYW5kIGNhbm5vdCBiZSB0cmltbWVkIG9yIHJvdGF0ZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGV4dHVyZXMuUGFyc2Vycy5TcHJpdGVTaGVldFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0byBhZGQgdGhlIEZyYW1lcyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzb3VyY2VJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgVGV4dHVyZVNvdXJjZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gQW4gb2JqZWN0IGRlc2NyaWJpbmcgaG93IHRvIHBhcnNlIHRoZSBTcHJpdGUgU2hlZXQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25maWcuZnJhbWVXaWR0aCAtIFdpZHRoIGluIHBpeGVscyBvZiBhIHNpbmdsZSBmcmFtZSBpbiB0aGUgc3ByaXRlIHNoZWV0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5mcmFtZUhlaWdodF0gLSBIZWlnaHQgaW4gcGl4ZWxzIG9mIGEgc2luZ2xlIGZyYW1lIGluIHRoZSBzcHJpdGUgc2hlZXQuIERlZmF1bHRzIHRvIGZyYW1lV2lkdGggaWYgbm90IHByb3ZpZGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zdGFydEZyYW1lPTBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5lbmRGcmFtZT0tMV0gLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLm1hcmdpbj0wXSAtIElmIHRoZSBmcmFtZXMgaGF2ZSBiZWVuIGRyYXduIHdpdGggYSBtYXJnaW4sIHNwZWNpZnkgdGhlIGFtb3VudCBoZXJlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zcGFjaW5nPTBdIC0gSWYgdGhlIGZyYW1lcyBoYXZlIGJlZW4gZHJhd24gd2l0aCBzcGFjaW5nIGJldHdlZW4gdGhlbSwgc3BlY2lmeSB0aGUgYW1vdW50IGhlcmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSBtb2RpZmllZCBieSB0aGlzIHBhcnNlci5cclxuICovXHJcbnZhciBTcHJpdGVTaGVldCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBzb3VyY2VJbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29uZmlnKVxyXG57XHJcbiAgICB2YXIgZnJhbWVXaWR0aCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdmcmFtZVdpZHRoJywgbnVsbCk7XHJcbiAgICB2YXIgZnJhbWVIZWlnaHQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZnJhbWVIZWlnaHQnLCBmcmFtZVdpZHRoKTtcclxuXHJcbiAgICAvLyAgSWYgbWlzc2luZyB3ZSBjYW4ndCBwcm9jZWVkXHJcbiAgICBpZiAoZnJhbWVXaWR0aCA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHR1cmVNYW5hZ2VyLlNwcml0ZVNoZWV0OiBJbnZhbGlkIGZyYW1lV2lkdGggZ2l2ZW4uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEFkZCBpbiBhIF9fQkFTRSBlbnRyeSAoZm9yIHRoZSBlbnRpcmUgYXRsYXMpXHJcbiAgICB2YXIgc291cmNlID0gdGV4dHVyZS5zb3VyY2Vbc291cmNlSW5kZXhdO1xyXG5cclxuICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCBzb3VyY2VJbmRleCwgMCwgMCwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgc3RhcnRGcmFtZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzdGFydEZyYW1lJywgMCk7XHJcbiAgICB2YXIgZW5kRnJhbWUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZW5kRnJhbWUnLCAtMSk7XHJcbiAgICB2YXIgbWFyZ2luID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ21hcmdpbicsIDApO1xyXG4gICAgdmFyIHNwYWNpbmcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3BhY2luZycsIDApO1xyXG5cclxuICAgIHZhciByb3cgPSBNYXRoLmZsb29yKCh3aWR0aCAtIG1hcmdpbiArIHNwYWNpbmcpIC8gKGZyYW1lV2lkdGggKyBzcGFjaW5nKSk7XHJcbiAgICB2YXIgY29sdW1uID0gTWF0aC5mbG9vcigoaGVpZ2h0IC0gbWFyZ2luICsgc3BhY2luZykgLyAoZnJhbWVIZWlnaHQgKyBzcGFjaW5nKSk7XHJcbiAgICB2YXIgdG90YWwgPSByb3cgKiBjb2x1bW47XHJcblxyXG4gICAgaWYgKHRvdGFsID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU3ByaXRlU2hlZXQgZnJhbWUgZGltZW5zaW9ucyB3aWxsIHJlc3VsdCBpbiB6ZXJvIGZyYW1lcy4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhcnRGcmFtZSA+IHRvdGFsIHx8IHN0YXJ0RnJhbWUgPCAtdG90YWwpXHJcbiAgICB7XHJcbiAgICAgICAgc3RhcnRGcmFtZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXJ0RnJhbWUgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBBbGxvdyBuZWdhdGl2ZSBza2lwZnJhbWVzLlxyXG4gICAgICAgIHN0YXJ0RnJhbWUgPSB0b3RhbCArIHN0YXJ0RnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuZEZyYW1lICE9PSAtMSlcclxuICAgIHtcclxuICAgICAgICB0b3RhbCA9IHN0YXJ0RnJhbWUgKyAoZW5kRnJhbWUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnggPSBtYXJnaW47XHJcbiAgICB2YXIgZnkgPSBtYXJnaW47XHJcbiAgICB2YXIgYXggPSAwO1xyXG4gICAgdmFyIGF5ID0gMDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgYXggPSAwO1xyXG4gICAgICAgIGF5ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHcgPSBmeCArIGZyYW1lV2lkdGg7XHJcbiAgICAgICAgdmFyIGggPSBmeSArIGZyYW1lSGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodyA+IHdpZHRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXggPSB3IC0gd2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaCA+IGhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGF5ID0gaCAtIGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRleHR1cmUuYWRkKGksIHNvdXJjZUluZGV4LCB4ICsgZngsIHkgKyBmeSwgZnJhbWVXaWR0aCAtIGF4LCBmcmFtZUhlaWdodCAtIGF5KTtcclxuXHJcbiAgICAgICAgZnggKz0gZnJhbWVXaWR0aCArIHNwYWNpbmc7XHJcblxyXG4gICAgICAgIGlmIChmeCArIGZyYW1lV2lkdGggPiB3aWR0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZ4ID0gbWFyZ2luO1xyXG4gICAgICAgICAgICBmeSArPSBmcmFtZUhlaWdodCArIHNwYWNpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVTaGVldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/SpriteSheet.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/SpriteSheetFromAtlas.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/SpriteSheetFromAtlas.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Parses a Sprite Sheet and adds the Frames to the Texture, where the Sprite Sheet is stored as a frame within an Atlas.\r\n *\r\n * In Phaser terminology a Sprite Sheet is a texture containing different frames, but each frame is the exact\r\n * same size and cannot be trimmed or rotated.\r\n *\r\n * @function Phaser.Textures.Parsers.SpriteSheetFromAtlas\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {Phaser.Textures.Frame} frame - The Frame that contains the Sprite Sheet.\r\n * @param {object} config - An object describing how to parse the Sprite Sheet.\r\n * @param {number} config.frameWidth - Width in pixels of a single frame in the sprite sheet.\r\n * @param {number} [config.frameHeight] - Height in pixels of a single frame in the sprite sheet. Defaults to frameWidth if not provided.\r\n * @param {number} [config.startFrame=0] - Index of the start frame in the sprite sheet\r\n * @param {number} [config.endFrame=-1] - Index of the end frame in the sprite sheet. -1 mean all the rest of the frames\r\n * @param {number} [config.margin=0] - If the frames have been drawn with a margin, specify the amount here.\r\n * @param {number} [config.spacing=0] - If the frames have been drawn with spacing between them, specify the amount here.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar SpriteSheetFromAtlas = function (texture, frame, config)\r\n{\r\n    var frameWidth = GetFastValue(config, 'frameWidth', null);\r\n    var frameHeight = GetFastValue(config, 'frameHeight', frameWidth);\r\n\r\n    //  If missing we can't proceed\r\n    if (!frameWidth)\r\n    {\r\n        throw new Error('TextureManager.SpriteSheetFromAtlas: Invalid frameWidth given.');\r\n    }\r\n\r\n    //  Add in a __BASE entry (for the entire atlas frame)\r\n    var source = texture.source[0];\r\n    texture.add('__BASE', 0, 0, 0, source.width, source.height);\r\n\r\n    var startFrame = GetFastValue(config, 'startFrame', 0);\r\n    var endFrame = GetFastValue(config, 'endFrame', -1);\r\n    var margin = GetFastValue(config, 'margin', 0);\r\n    var spacing = GetFastValue(config, 'spacing', 0);\r\n\r\n    var x = frame.cutX;\r\n    var y = frame.cutY;\r\n\r\n    var cutWidth = frame.cutWidth;\r\n    var cutHeight = frame.cutHeight;\r\n    var sheetWidth = frame.realWidth;\r\n    var sheetHeight = frame.realHeight;\r\n\r\n    var row = Math.floor((sheetWidth - margin + spacing) / (frameWidth + spacing));\r\n    var column = Math.floor((sheetHeight - margin + spacing) / (frameHeight + spacing));\r\n    var total = row * column;\r\n\r\n    //  trim offsets\r\n\r\n    var leftPad = frame.x;\r\n    var leftWidth = frameWidth - leftPad;\r\n\r\n    var rightWidth = frameWidth - ((sheetWidth - cutWidth) - leftPad);\r\n\r\n    var topPad = frame.y;\r\n    var topHeight = frameHeight - topPad;\r\n\r\n    var bottomHeight = frameHeight - ((sheetHeight - cutHeight) - topPad);\r\n\r\n    if (startFrame > total || startFrame < -total)\r\n    {\r\n        startFrame = 0;\r\n    }\r\n\r\n    if (startFrame < 0)\r\n    {\r\n        //  Allow negative skipframes.\r\n        startFrame = total + startFrame;\r\n    }\r\n\r\n    if (endFrame !== -1)\r\n    {\r\n        total = startFrame + (endFrame + 1);\r\n    }\r\n\r\n    var sheetFrame;\r\n    var frameX = margin;\r\n    var frameY = margin;\r\n    var frameIndex = 0;\r\n    var sourceIndex = frame.sourceIndex;\r\n\r\n    for (var sheetY = 0; sheetY < column; sheetY++)\r\n    {\r\n        var topRow = (sheetY === 0);\r\n        var bottomRow = (sheetY === column - 1);\r\n\r\n        for (var sheetX = 0; sheetX < row; sheetX++)\r\n        {\r\n            var leftRow = (sheetX === 0);\r\n            var rightRow = (sheetX === row - 1);\r\n\r\n            sheetFrame = texture.add(frameIndex, sourceIndex, x + frameX, y + frameY, frameWidth, frameHeight);\r\n\r\n            if (leftRow || topRow || rightRow || bottomRow)\r\n            {\r\n                var destX = (leftRow) ? leftPad : 0;\r\n                var destY = (topRow) ? topPad : 0;\r\n\r\n                var trimWidth = 0;\r\n                var trimHeight = 0;\r\n\r\n                if (leftRow)\r\n                {\r\n                    trimWidth += (frameWidth - leftWidth);\r\n                }\r\n\r\n                if (rightRow)\r\n                {\r\n                    trimWidth += (frameWidth - rightWidth);\r\n                }\r\n\r\n                if (topRow)\r\n                {\r\n                    trimHeight += (frameHeight - topHeight);\r\n                }\r\n\r\n                if (bottomRow)\r\n                {\r\n                    trimHeight += (frameHeight - bottomHeight);\r\n                }\r\n\r\n                var destWidth = frameWidth - trimWidth;\r\n                var destHeight = frameHeight - trimHeight;\r\n\r\n                sheetFrame.cutWidth = destWidth;\r\n                sheetFrame.cutHeight = destHeight;\r\n\r\n                sheetFrame.setTrim(frameWidth, frameHeight, destX, destY, destWidth, destHeight);\r\n            }\r\n\r\n            frameX += spacing;\r\n\r\n            if (leftRow)\r\n            {\r\n                frameX += leftWidth;\r\n            }\r\n            else if (rightRow)\r\n            {\r\n                frameX += rightWidth;\r\n            }\r\n            else\r\n            {\r\n                frameX += frameWidth;\r\n            }\r\n\r\n            frameIndex++;\r\n        }\r\n\r\n        frameX = margin;\r\n        frameY += spacing;\r\n\r\n        if (topRow)\r\n        {\r\n            frameY += topHeight;\r\n        }\r\n        else if (bottomRow)\r\n        {\r\n            frameY += bottomHeight;\r\n        }\r\n        else\r\n        {\r\n            frameY += frameHeight;\r\n        }\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = SpriteSheetFromAtlas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL1Nwcml0ZVNoZWV0RnJvbUF0bGFzLmpzPzE5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL1Nwcml0ZVNoZWV0RnJvbUF0bGFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFNwcml0ZSBTaGVldCBhbmQgYWRkcyB0aGUgRnJhbWVzIHRvIHRoZSBUZXh0dXJlLCB3aGVyZSB0aGUgU3ByaXRlIFNoZWV0IGlzIHN0b3JlZCBhcyBhIGZyYW1lIHdpdGhpbiBhbiBBdGxhcy5cclxuICpcclxuICogSW4gUGhhc2VyIHRlcm1pbm9sb2d5IGEgU3ByaXRlIFNoZWV0IGlzIGEgdGV4dHVyZSBjb250YWluaW5nIGRpZmZlcmVudCBmcmFtZXMsIGJ1dCBlYWNoIGZyYW1lIGlzIHRoZSBleGFjdFxyXG4gKiBzYW1lIHNpemUgYW5kIGNhbm5vdCBiZSB0cmltbWVkIG9yIHJvdGF0ZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGV4dHVyZXMuUGFyc2Vycy5TcHJpdGVTaGVldEZyb21BdGxhc1xyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgVGV4dHVyZSB0byBhZGQgdGhlIEZyYW1lcyB0by5cclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IGZyYW1lIC0gVGhlIEZyYW1lIHRoYXQgY29udGFpbnMgdGhlIFNwcml0ZSBTaGVldC5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIEFuIG9iamVjdCBkZXNjcmliaW5nIGhvdyB0byBwYXJzZSB0aGUgU3ByaXRlIFNoZWV0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gY29uZmlnLmZyYW1lV2lkdGggLSBXaWR0aCBpbiBwaXhlbHMgb2YgYSBzaW5nbGUgZnJhbWUgaW4gdGhlIHNwcml0ZSBzaGVldC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuZnJhbWVIZWlnaHRdIC0gSGVpZ2h0IGluIHBpeGVscyBvZiBhIHNpbmdsZSBmcmFtZSBpbiB0aGUgc3ByaXRlIHNoZWV0LiBEZWZhdWx0cyB0byBmcmFtZVdpZHRoIGlmIG5vdCBwcm92aWRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc3RhcnRGcmFtZT0wXSAtIEluZGV4IG9mIHRoZSBzdGFydCBmcmFtZSBpbiB0aGUgc3ByaXRlIHNoZWV0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLmVuZEZyYW1lPS0xXSAtIEluZGV4IG9mIHRoZSBlbmQgZnJhbWUgaW4gdGhlIHNwcml0ZSBzaGVldC4gLTEgbWVhbiBhbGwgdGhlIHJlc3Qgb2YgdGhlIGZyYW1lc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5tYXJnaW49MF0gLSBJZiB0aGUgZnJhbWVzIGhhdmUgYmVlbiBkcmF3biB3aXRoIGEgbWFyZ2luLCBzcGVjaWZ5IHRoZSBhbW91bnQgaGVyZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc3BhY2luZz0wXSAtIElmIHRoZSBmcmFtZXMgaGF2ZSBiZWVuIGRyYXduIHdpdGggc3BhY2luZyBiZXR3ZWVuIHRoZW0sIHNwZWNpZnkgdGhlIGFtb3VudCBoZXJlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgbW9kaWZpZWQgYnkgdGhpcyBwYXJzZXIuXHJcbiAqL1xyXG52YXIgU3ByaXRlU2hlZXRGcm9tQXRsYXMgPSBmdW5jdGlvbiAodGV4dHVyZSwgZnJhbWUsIGNvbmZpZylcclxue1xyXG4gICAgdmFyIGZyYW1lV2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZnJhbWVXaWR0aCcsIG51bGwpO1xyXG4gICAgdmFyIGZyYW1lSGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZyYW1lSGVpZ2h0JywgZnJhbWVXaWR0aCk7XHJcblxyXG4gICAgLy8gIElmIG1pc3Npbmcgd2UgY2FuJ3QgcHJvY2VlZFxyXG4gICAgaWYgKCFmcmFtZVdpZHRoKVxyXG4gICAge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZU1hbmFnZXIuU3ByaXRlU2hlZXRGcm9tQXRsYXM6IEludmFsaWQgZnJhbWVXaWR0aCBnaXZlbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQWRkIGluIGEgX19CQVNFIGVudHJ5IChmb3IgdGhlIGVudGlyZSBhdGxhcyBmcmFtZSlcclxuICAgIHZhciBzb3VyY2UgPSB0ZXh0dXJlLnNvdXJjZVswXTtcclxuICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCAwLCAwLCAwLCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG5cclxuICAgIHZhciBzdGFydEZyYW1lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3N0YXJ0RnJhbWUnLCAwKTtcclxuICAgIHZhciBlbmRGcmFtZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdlbmRGcmFtZScsIC0xKTtcclxuICAgIHZhciBtYXJnaW4gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWFyZ2luJywgMCk7XHJcbiAgICB2YXIgc3BhY2luZyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzcGFjaW5nJywgMCk7XHJcblxyXG4gICAgdmFyIHggPSBmcmFtZS5jdXRYO1xyXG4gICAgdmFyIHkgPSBmcmFtZS5jdXRZO1xyXG5cclxuICAgIHZhciBjdXRXaWR0aCA9IGZyYW1lLmN1dFdpZHRoO1xyXG4gICAgdmFyIGN1dEhlaWdodCA9IGZyYW1lLmN1dEhlaWdodDtcclxuICAgIHZhciBzaGVldFdpZHRoID0gZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgdmFyIHNoZWV0SGVpZ2h0ID0gZnJhbWUucmVhbEhlaWdodDtcclxuXHJcbiAgICB2YXIgcm93ID0gTWF0aC5mbG9vcigoc2hlZXRXaWR0aCAtIG1hcmdpbiArIHNwYWNpbmcpIC8gKGZyYW1lV2lkdGggKyBzcGFjaW5nKSk7XHJcbiAgICB2YXIgY29sdW1uID0gTWF0aC5mbG9vcigoc2hlZXRIZWlnaHQgLSBtYXJnaW4gKyBzcGFjaW5nKSAvIChmcmFtZUhlaWdodCArIHNwYWNpbmcpKTtcclxuICAgIHZhciB0b3RhbCA9IHJvdyAqIGNvbHVtbjtcclxuXHJcbiAgICAvLyAgdHJpbSBvZmZzZXRzXHJcblxyXG4gICAgdmFyIGxlZnRQYWQgPSBmcmFtZS54O1xyXG4gICAgdmFyIGxlZnRXaWR0aCA9IGZyYW1lV2lkdGggLSBsZWZ0UGFkO1xyXG5cclxuICAgIHZhciByaWdodFdpZHRoID0gZnJhbWVXaWR0aCAtICgoc2hlZXRXaWR0aCAtIGN1dFdpZHRoKSAtIGxlZnRQYWQpO1xyXG5cclxuICAgIHZhciB0b3BQYWQgPSBmcmFtZS55O1xyXG4gICAgdmFyIHRvcEhlaWdodCA9IGZyYW1lSGVpZ2h0IC0gdG9wUGFkO1xyXG5cclxuICAgIHZhciBib3R0b21IZWlnaHQgPSBmcmFtZUhlaWdodCAtICgoc2hlZXRIZWlnaHQgLSBjdXRIZWlnaHQpIC0gdG9wUGFkKTtcclxuXHJcbiAgICBpZiAoc3RhcnRGcmFtZSA+IHRvdGFsIHx8IHN0YXJ0RnJhbWUgPCAtdG90YWwpXHJcbiAgICB7XHJcbiAgICAgICAgc3RhcnRGcmFtZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXJ0RnJhbWUgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBBbGxvdyBuZWdhdGl2ZSBza2lwZnJhbWVzLlxyXG4gICAgICAgIHN0YXJ0RnJhbWUgPSB0b3RhbCArIHN0YXJ0RnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuZEZyYW1lICE9PSAtMSlcclxuICAgIHtcclxuICAgICAgICB0b3RhbCA9IHN0YXJ0RnJhbWUgKyAoZW5kRnJhbWUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2hlZXRGcmFtZTtcclxuICAgIHZhciBmcmFtZVggPSBtYXJnaW47XHJcbiAgICB2YXIgZnJhbWVZID0gbWFyZ2luO1xyXG4gICAgdmFyIGZyYW1lSW5kZXggPSAwO1xyXG4gICAgdmFyIHNvdXJjZUluZGV4ID0gZnJhbWUuc291cmNlSW5kZXg7XHJcblxyXG4gICAgZm9yICh2YXIgc2hlZXRZID0gMDsgc2hlZXRZIDwgY29sdW1uOyBzaGVldFkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdG9wUm93ID0gKHNoZWV0WSA9PT0gMCk7XHJcbiAgICAgICAgdmFyIGJvdHRvbVJvdyA9IChzaGVldFkgPT09IGNvbHVtbiAtIDEpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBzaGVldFggPSAwOyBzaGVldFggPCByb3c7IHNoZWV0WCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxlZnRSb3cgPSAoc2hlZXRYID09PSAwKTtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0Um93ID0gKHNoZWV0WCA9PT0gcm93IC0gMSk7XHJcblxyXG4gICAgICAgICAgICBzaGVldEZyYW1lID0gdGV4dHVyZS5hZGQoZnJhbWVJbmRleCwgc291cmNlSW5kZXgsIHggKyBmcmFtZVgsIHkgKyBmcmFtZVksIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsZWZ0Um93IHx8IHRvcFJvdyB8fCByaWdodFJvdyB8fCBib3R0b21Sb3cpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZXN0WCA9IChsZWZ0Um93KSA/IGxlZnRQYWQgOiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlc3RZID0gKHRvcFJvdykgPyB0b3BQYWQgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB0cmltV2lkdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaW1IZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsZWZ0Um93KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaW1XaWR0aCArPSAoZnJhbWVXaWR0aCAtIGxlZnRXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJpZ2h0Um93KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaW1XaWR0aCArPSAoZnJhbWVXaWR0aCAtIHJpZ2h0V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0b3BSb3cpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpbUhlaWdodCArPSAoZnJhbWVIZWlnaHQgLSB0b3BIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib3R0b21Sb3cpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpbUhlaWdodCArPSAoZnJhbWVIZWlnaHQgLSBib3R0b21IZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBkZXN0V2lkdGggPSBmcmFtZVdpZHRoIC0gdHJpbVdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlc3RIZWlnaHQgPSBmcmFtZUhlaWdodCAtIHRyaW1IZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgc2hlZXRGcmFtZS5jdXRXaWR0aCA9IGRlc3RXaWR0aDtcclxuICAgICAgICAgICAgICAgIHNoZWV0RnJhbWUuY3V0SGVpZ2h0ID0gZGVzdEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVldEZyYW1lLnNldFRyaW0oZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIGRlc3RYLCBkZXN0WSwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnJhbWVYICs9IHNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBpZiAobGVmdFJvdylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWVYICs9IGxlZnRXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyaWdodFJvdylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWVYICs9IHJpZ2h0V2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZVggKz0gZnJhbWVXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnJhbWVJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJhbWVYID0gbWFyZ2luO1xyXG4gICAgICAgIGZyYW1lWSArPSBzcGFjaW5nO1xyXG5cclxuICAgICAgICBpZiAodG9wUm93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWVZICs9IHRvcEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm90dG9tUm93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWVZICs9IGJvdHRvbUhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWVZICs9IGZyYW1lSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlU2hlZXRGcm9tQXRsYXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/SpriteSheetFromAtlas.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/UnityYAML.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/UnityYAML.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar imageHeight = 0;\r\n\r\n/**\r\n * @function addFrame\r\n * @private\r\n * @since 3.0.0\r\n */\r\nvar addFrame = function (texture, sourceIndex, name, frame)\r\n{\r\n    //  The frame values are the exact coordinates to cut the frame out of the atlas from\r\n\r\n    var y = imageHeight - frame.y - frame.height;\r\n\r\n    texture.add(name, sourceIndex, frame.x, y, frame.width, frame.height);\r\n\r\n    //  These are the original (non-trimmed) sprite values\r\n    /*\r\n    if (src.trimmed)\r\n    {\r\n        newFrame.setTrim(\r\n            src.sourceSize.w,\r\n            src.sourceSize.h,\r\n            src.spriteSourceSize.x,\r\n            src.spriteSourceSize.y,\r\n            src.spriteSourceSize.w,\r\n            src.spriteSourceSize.h\r\n        );\r\n    }\r\n    */\r\n};\r\n\r\n/**\r\n * Parses a Unity YAML File and creates Frames in the Texture.\r\n * For more details about Sprite Meta Data see https://docs.unity3d.com/ScriptReference/SpriteMetaData.html\r\n *\r\n * @function Phaser.Textures.Parsers.UnityYAML\r\n * @memberof Phaser.Textures.Parsers\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Texture} texture - The Texture to add the Frames to.\r\n * @param {integer} sourceIndex - The index of the TextureSource.\r\n * @param {object} yaml - The YAML data.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture modified by this parser.\r\n */\r\nvar UnityYAML = function (texture, sourceIndex, yaml)\r\n{\r\n    //  Add in a __BASE entry (for the entire atlas)\r\n    var source = texture.source[sourceIndex];\r\n\r\n    texture.add('__BASE', sourceIndex, 0, 0, source.width, source.height);\r\n\r\n    imageHeight = source.height;\r\n\r\n    var data = yaml.split('\\n');\r\n\r\n    var lineRegExp = /^[ ]*(- )*(\\w+)+[: ]+(.*)/;\r\n\r\n    var prevSprite = '';\r\n    var currentSprite = '';\r\n    var rect = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n    // var pivot = { x: 0, y: 0 };\r\n    // var border = { x: 0, y: 0, z: 0, w: 0 };\r\n\r\n    for (var i = 0; i < data.length; i++)\r\n    {\r\n        var results = data[i].match(lineRegExp);\r\n\r\n        if (!results)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var isList = (results[1] === '- ');\r\n        var key = results[2];\r\n        var value = results[3];\r\n\r\n        if (isList)\r\n        {\r\n            if (currentSprite !== prevSprite)\r\n            {\r\n                addFrame(texture, sourceIndex, currentSprite, rect);\r\n\r\n                prevSprite = currentSprite;\r\n            }\r\n\r\n            rect = { x: 0, y: 0, width: 0, height: 0 };\r\n        }\r\n\r\n        if (key === 'name')\r\n        {\r\n            //  Start new list\r\n            currentSprite = value;\r\n            continue;\r\n        }\r\n\r\n        switch (key)\r\n        {\r\n            case 'x':\r\n            case 'y':\r\n            case 'width':\r\n            case 'height':\r\n                rect[key] = parseInt(value, 10);\r\n                break;\r\n\r\n            // case 'pivot':\r\n            //     pivot = eval('var obj = ' + value);\r\n            //     break;\r\n\r\n            // case 'border':\r\n            //     border = eval('var obj = ' + value);\r\n            //     break;\r\n        }\r\n    }\r\n\r\n    if (currentSprite !== prevSprite)\r\n    {\r\n        addFrame(texture, sourceIndex, currentSprite, rect);\r\n    }\r\n\r\n    return texture;\r\n};\r\n\r\nmodule.exports = UnityYAML;\r\n\r\n/*\r\nExample data:\r\n\r\nTextureImporter:\r\n  spritePivot: {x: .5, y: .5}\r\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\r\n  spritePixelsToUnits: 100\r\n  spriteSheet:\r\n    sprites:\r\n    - name: asteroids_0\r\n      rect:\r\n        serializedVersion: 2\r\n        x: 5\r\n        y: 328\r\n        width: 65\r\n        height: 82\r\n      alignment: 0\r\n      pivot: {x: 0, y: 0}\r\n      border: {x: 0, y: 0, z: 0, w: 0}\r\n    - name: asteroids_1\r\n      rect:\r\n        serializedVersion: 2\r\n        x: 80\r\n        y: 322\r\n        width: 53\r\n        height: 88\r\n      alignment: 0\r\n      pivot: {x: 0, y: 0}\r\n      border: {x: 0, y: 0, z: 0, w: 0}\r\n  spritePackingTag: Asteroids\r\n*/\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL1VuaXR5WUFNTC5qcz9iYzJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQixvQkFBb0I7QUFDcEIscUJBQXFCOztBQUVyQixtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGVBQWU7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvcGFyc2Vycy9Vbml0eVlBTUwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBpbWFnZUhlaWdodCA9IDA7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uIGFkZEZyYW1lXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIGFkZEZyYW1lID0gZnVuY3Rpb24gKHRleHR1cmUsIHNvdXJjZUluZGV4LCBuYW1lLCBmcmFtZSlcclxue1xyXG4gICAgLy8gIFRoZSBmcmFtZSB2YWx1ZXMgYXJlIHRoZSBleGFjdCBjb29yZGluYXRlcyB0byBjdXQgdGhlIGZyYW1lIG91dCBvZiB0aGUgYXRsYXMgZnJvbVxyXG5cclxuICAgIHZhciB5ID0gaW1hZ2VIZWlnaHQgLSBmcmFtZS55IC0gZnJhbWUuaGVpZ2h0O1xyXG5cclxuICAgIHRleHR1cmUuYWRkKG5hbWUsIHNvdXJjZUluZGV4LCBmcmFtZS54LCB5LCBmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0KTtcclxuXHJcbiAgICAvLyAgVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCAobm9uLXRyaW1tZWQpIHNwcml0ZSB2YWx1ZXNcclxuICAgIC8qXHJcbiAgICBpZiAoc3JjLnRyaW1tZWQpXHJcbiAgICB7XHJcbiAgICAgICAgbmV3RnJhbWUuc2V0VHJpbShcclxuICAgICAgICAgICAgc3JjLnNvdXJjZVNpemUudyxcclxuICAgICAgICAgICAgc3JjLnNvdXJjZVNpemUuaCxcclxuICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUueCxcclxuICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUueSxcclxuICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUudyxcclxuICAgICAgICAgICAgc3JjLnNwcml0ZVNvdXJjZVNpemUuaFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICAqL1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFVuaXR5IFlBTUwgRmlsZSBhbmQgY3JlYXRlcyBGcmFtZXMgaW4gdGhlIFRleHR1cmUuXHJcbiAqIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgU3ByaXRlIE1ldGEgRGF0YSBzZWUgaHR0cHM6Ly9kb2NzLnVuaXR5M2QuY29tL1NjcmlwdFJlZmVyZW5jZS9TcHJpdGVNZXRhRGF0YS5odG1sXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGV4dHVyZXMuUGFyc2Vycy5Vbml0eVlBTUxcclxuICogQG1lbWJlcm9mIFBoYXNlci5UZXh0dXJlcy5QYXJzZXJzXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIFRleHR1cmUgdG8gYWRkIHRoZSBGcmFtZXMgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc291cmNlSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIFRleHR1cmVTb3VyY2UuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSB5YW1sIC0gVGhlIFlBTUwgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IFRoZSBUZXh0dXJlIG1vZGlmaWVkIGJ5IHRoaXMgcGFyc2VyLlxyXG4gKi9cclxudmFyIFVuaXR5WUFNTCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBzb3VyY2VJbmRleCwgeWFtbClcclxue1xyXG4gICAgLy8gIEFkZCBpbiBhIF9fQkFTRSBlbnRyeSAoZm9yIHRoZSBlbnRpcmUgYXRsYXMpXHJcbiAgICB2YXIgc291cmNlID0gdGV4dHVyZS5zb3VyY2Vbc291cmNlSW5kZXhdO1xyXG5cclxuICAgIHRleHR1cmUuYWRkKCdfX0JBU0UnLCBzb3VyY2VJbmRleCwgMCwgMCwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxuXHJcbiAgICBpbWFnZUhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIGRhdGEgPSB5YW1sLnNwbGl0KCdcXG4nKTtcclxuXHJcbiAgICB2YXIgbGluZVJlZ0V4cCA9IC9eWyBdKigtICkqKFxcdyspK1s6IF0rKC4qKS87XHJcblxyXG4gICAgdmFyIHByZXZTcHJpdGUgPSAnJztcclxuICAgIHZhciBjdXJyZW50U3ByaXRlID0gJyc7XHJcbiAgICB2YXIgcmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIC8vIHZhciBwaXZvdCA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgLy8gdmFyIGJvcmRlciA9IHsgeDogMCwgeTogMCwgejogMCwgdzogMCB9O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IGRhdGFbaV0ubWF0Y2gobGluZVJlZ0V4cCk7XHJcblxyXG4gICAgICAgIGlmICghcmVzdWx0cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlzTGlzdCA9IChyZXN1bHRzWzFdID09PSAnLSAnKTtcclxuICAgICAgICB2YXIga2V5ID0gcmVzdWx0c1syXTtcclxuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHRzWzNdO1xyXG5cclxuICAgICAgICBpZiAoaXNMaXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcHJpdGUgIT09IHByZXZTcHJpdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkZEZyYW1lKHRleHR1cmUsIHNvdXJjZUluZGV4LCBjdXJyZW50U3ByaXRlLCByZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBwcmV2U3ByaXRlID0gY3VycmVudFNwcml0ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gJ25hbWUnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFN0YXJ0IG5ldyBsaXN0XHJcbiAgICAgICAgICAgIGN1cnJlbnRTcHJpdGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3gnOlxyXG4gICAgICAgICAgICBjYXNlICd5JzpcclxuICAgICAgICAgICAgY2FzZSAnd2lkdGgnOlxyXG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxyXG4gICAgICAgICAgICAgICAgcmVjdFtrZXldID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gY2FzZSAncGl2b3QnOlxyXG4gICAgICAgICAgICAvLyAgICAgcGl2b3QgPSBldmFsKCd2YXIgb2JqID0gJyArIHZhbHVlKTtcclxuICAgICAgICAgICAgLy8gICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gY2FzZSAnYm9yZGVyJzpcclxuICAgICAgICAgICAgLy8gICAgIGJvcmRlciA9IGV2YWwoJ3ZhciBvYmogPSAnICsgdmFsdWUpO1xyXG4gICAgICAgICAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50U3ByaXRlICE9PSBwcmV2U3ByaXRlKVxyXG4gICAge1xyXG4gICAgICAgIGFkZEZyYW1lKHRleHR1cmUsIHNvdXJjZUluZGV4LCBjdXJyZW50U3ByaXRlLCByZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVW5pdHlZQU1MO1xyXG5cclxuLypcclxuRXhhbXBsZSBkYXRhOlxyXG5cclxuVGV4dHVyZUltcG9ydGVyOlxyXG4gIHNwcml0ZVBpdm90OiB7eDogLjUsIHk6IC41fVxyXG4gIHNwcml0ZUJvcmRlcjoge3g6IDAsIHk6IDAsIHo6IDAsIHc6IDB9XHJcbiAgc3ByaXRlUGl4ZWxzVG9Vbml0czogMTAwXHJcbiAgc3ByaXRlU2hlZXQ6XHJcbiAgICBzcHJpdGVzOlxyXG4gICAgLSBuYW1lOiBhc3Rlcm9pZHNfMFxyXG4gICAgICByZWN0OlxyXG4gICAgICAgIHNlcmlhbGl6ZWRWZXJzaW9uOiAyXHJcbiAgICAgICAgeDogNVxyXG4gICAgICAgIHk6IDMyOFxyXG4gICAgICAgIHdpZHRoOiA2NVxyXG4gICAgICAgIGhlaWdodDogODJcclxuICAgICAgYWxpZ25tZW50OiAwXHJcbiAgICAgIHBpdm90OiB7eDogMCwgeTogMH1cclxuICAgICAgYm9yZGVyOiB7eDogMCwgeTogMCwgejogMCwgdzogMH1cclxuICAgIC0gbmFtZTogYXN0ZXJvaWRzXzFcclxuICAgICAgcmVjdDpcclxuICAgICAgICBzZXJpYWxpemVkVmVyc2lvbjogMlxyXG4gICAgICAgIHg6IDgwXHJcbiAgICAgICAgeTogMzIyXHJcbiAgICAgICAgd2lkdGg6IDUzXHJcbiAgICAgICAgaGVpZ2h0OiA4OFxyXG4gICAgICBhbGlnbm1lbnQ6IDBcclxuICAgICAgcGl2b3Q6IHt4OiAwLCB5OiAwfVxyXG4gICAgICBib3JkZXI6IHt4OiAwLCB5OiAwLCB6OiAwLCB3OiAwfVxyXG4gIHNwcml0ZVBhY2tpbmdUYWc6IEFzdGVyb2lkc1xyXG4qL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/UnityYAML.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/textures/parsers/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/textures/parsers/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Textures.Parsers\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    AtlasXML: __webpack_require__(/*! ./AtlasXML */ \"./node_modules/phaser/src/textures/parsers/AtlasXML.js\"),\r\n    Canvas: __webpack_require__(/*! ./Canvas */ \"./node_modules/phaser/src/textures/parsers/Canvas.js\"),\r\n    Image: __webpack_require__(/*! ./Image */ \"./node_modules/phaser/src/textures/parsers/Image.js\"),\r\n    JSONArray: __webpack_require__(/*! ./JSONArray */ \"./node_modules/phaser/src/textures/parsers/JSONArray.js\"),\r\n    JSONHash: __webpack_require__(/*! ./JSONHash */ \"./node_modules/phaser/src/textures/parsers/JSONHash.js\"),\r\n    SpriteSheet: __webpack_require__(/*! ./SpriteSheet */ \"./node_modules/phaser/src/textures/parsers/SpriteSheet.js\"),\r\n    SpriteSheetFromAtlas: __webpack_require__(/*! ./SpriteSheetFromAtlas */ \"./node_modules/phaser/src/textures/parsers/SpriteSheetFromAtlas.js\"),\r\n    UnityYAML: __webpack_require__(/*! ./UnityYAML */ \"./node_modules/phaser/src/textures/parsers/UnityYAML.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90ZXh0dXJlcy9wYXJzZXJzL2luZGV4LmpzPzU5YjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsMEVBQVk7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLHNFQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxvRUFBUztBQUM1QixlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMsY0FBYyxtQkFBTyxDQUFDLDBFQUFZO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLDBCQUEwQixtQkFBTyxDQUFDLGtHQUF3QjtBQUMxRCxlQUFlLG1CQUFPLENBQUMsNEVBQWE7O0FBRXBDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGV4dHVyZXMvcGFyc2Vycy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlRleHR1cmVzLlBhcnNlcnNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBdGxhc1hNTDogcmVxdWlyZSgnLi9BdGxhc1hNTCcpLFxyXG4gICAgQ2FudmFzOiByZXF1aXJlKCcuL0NhbnZhcycpLFxyXG4gICAgSW1hZ2U6IHJlcXVpcmUoJy4vSW1hZ2UnKSxcclxuICAgIEpTT05BcnJheTogcmVxdWlyZSgnLi9KU09OQXJyYXknKSxcclxuICAgIEpTT05IYXNoOiByZXF1aXJlKCcuL0pTT05IYXNoJyksXHJcbiAgICBTcHJpdGVTaGVldDogcmVxdWlyZSgnLi9TcHJpdGVTaGVldCcpLFxyXG4gICAgU3ByaXRlU2hlZXRGcm9tQXRsYXM6IHJlcXVpcmUoJy4vU3ByaXRlU2hlZXRGcm9tQXRsYXMnKSxcclxuICAgIFVuaXR5WUFNTDogcmVxdWlyZSgnLi9Vbml0eVlBTUwnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/textures/parsers/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/Formats.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/Formats.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps.Formats\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    /**\r\n     * CSV Map Type\r\n     * \r\n     * @name Phaser.Tilemaps.Formats.CSV\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    CSV: 0,\r\n\r\n    /**\r\n     * Tiled JSON Map Type\r\n     * \r\n     * @name Phaser.Tilemaps.Formats.TILED_JSON\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    TILED_JSON: 1,\r\n\r\n    /**\r\n     * 2D Array Map Type\r\n     * \r\n     * @name Phaser.Tilemaps.Formats.ARRAY_2D\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    ARRAY_2D: 2,\r\n\r\n    /**\r\n     * Weltmeister (Impact.js) Map Type\r\n     * \r\n     * @name Phaser.Tilemaps.Formats.WELTMEISTER\r\n     * @type {number}\r\n     * @since 3.0.0\r\n     */\r\n    WELTMEISTER: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9Gb3JtYXRzLmpzP2ZlOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9Gb3JtYXRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGlsZW1hcHMuRm9ybWF0c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NWIE1hcCBUeXBlXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5Gb3JtYXRzLkNTVlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDU1Y6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaWxlZCBKU09OIE1hcCBUeXBlXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5Gb3JtYXRzLlRJTEVEX0pTT05cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVElMRURfSlNPTjogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIDJEIEFycmF5IE1hcCBUeXBlXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5Gb3JtYXRzLkFSUkFZXzJEXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEFSUkFZXzJEOiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2VsdG1laXN0ZXIgKEltcGFjdC5qcykgTWFwIFR5cGVcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkZvcm1hdHMuV0VMVE1FSVNURVJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgV0VMVE1FSVNURVI6IDNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/Formats.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/ImageCollection.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/ImageCollection.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Image Collection is a special Tile Set containing multiple images, with no slicing into each image.\r\n *\r\n * Image Collections are normally created automatically when Tiled data is loaded.\r\n *\r\n * @class ImageCollection\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n * \r\n * @param {string} name - The name of the image collection in the map data.\r\n * @param {integer} firstgid - The first image index this image collection contains.\r\n * @param {integer} [width=32] - Width of widest image (in pixels).\r\n * @param {integer} [height=32] - Height of tallest image (in pixels).\r\n * @param {integer} [margin=0] - The margin around all images in the collection (in pixels).\r\n * @param {integer} [spacing=0] - The spacing between each image in the collection (in pixels).\r\n * @param {object} [properties={}] - Custom Image Collection properties.\r\n */\r\nvar ImageCollection = new Class({\r\n\r\n    initialize:\r\n\r\n    function ImageCollection (name, firstgid, width, height, margin, spacing, properties)\r\n    {\r\n        if (width === undefined || width <= 0) { width = 32; }\r\n        if (height === undefined || height <= 0) { height = 32; }\r\n        if (margin === undefined) { margin = 0; }\r\n        if (spacing === undefined) { spacing = 0; }\r\n\r\n        /**\r\n         * The name of the Image Collection.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n        */\r\n        this.name = name;\r\n\r\n        /**\r\n         * The Tiled firstgid value.\r\n         * This is the starting index of the first image index this Image Collection contains.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#firstgid\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.firstgid = firstgid | 0;\r\n\r\n        /**\r\n         * The width of the widest image (in pixels).\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#imageWidth\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.imageWidth = width | 0;\r\n\r\n        /**\r\n         * The height of the tallest image (in pixels).\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#imageHeight\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.imageHeight = height | 0;\r\n\r\n        /**\r\n         * The margin around the images in the collection (in pixels).\r\n         * Use `setSpacing` to change.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#imageMarge\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.imageMargin = margin | 0;\r\n\r\n        /**\r\n         * The spacing between each image in the collection (in pixels).\r\n         * Use `setSpacing` to change.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#imageSpacing\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.imageSpacing = spacing | 0;\r\n\r\n        /**\r\n         * Image Collection-specific properties that are typically defined in the Tiled editor.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#properties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = properties || {};\r\n\r\n        /**\r\n         * The cached images that are a part of this collection.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#images\r\n         * @type {array}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.images = [];\r\n\r\n        /**\r\n         * The total number of images in the image collection.\r\n         * \r\n         * @name Phaser.Tilemaps.ImageCollection#total\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.total = 0;\r\n    },\r\n\r\n    /**\r\n     * Returns true if and only if this image collection contains the given image index.\r\n     *\r\n     * @method Phaser.Tilemaps.ImageCollection#containsImageIndex\r\n     * @since 3.0.0\r\n     * \r\n     * @param {integer} imageIndex - The image index to search for.\r\n     * \r\n     * @return {boolean} True if this Image Collection contains the given index.\r\n     */\r\n    containsImageIndex: function (imageIndex)\r\n    {\r\n        return (imageIndex >= this.firstgid && imageIndex < (this.firstgid + this.total));\r\n    },\r\n\r\n    /**\r\n     * Add an image to this Image Collection.\r\n     *\r\n     * @method Phaser.Tilemaps.ImageCollection#addImage\r\n     * @since 3.0.0\r\n     * \r\n     * @param {integer} gid - The gid of the image in the Image Collection.\r\n     * @param {string} image - The the key of the image in the Image Collection and in the cache.\r\n     *\r\n     * @return {Phaser.Tilemaps.ImageCollection} This ImageCollection object.\r\n     */\r\n    addImage: function (gid, image)\r\n    {\r\n        this.images.push({ gid: gid, image: image });\r\n        this.total++;\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ImageCollection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9JbWFnZUNvbGxlY3Rpb24uanM/ZmNlOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTyxlQUFlO0FBQ2pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRCxZQUFZO0FBQzVELGtEQUFrRCxhQUFhO0FBQy9ELG1DQUFtQyxZQUFZO0FBQy9DLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix5QkFBeUI7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvSW1hZ2VDb2xsZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gSW1hZ2UgQ29sbGVjdGlvbiBpcyBhIHNwZWNpYWwgVGlsZSBTZXQgY29udGFpbmluZyBtdWx0aXBsZSBpbWFnZXMsIHdpdGggbm8gc2xpY2luZyBpbnRvIGVhY2ggaW1hZ2UuXHJcbiAqXHJcbiAqIEltYWdlIENvbGxlY3Rpb25zIGFyZSBub3JtYWxseSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBUaWxlZCBkYXRhIGlzIGxvYWRlZC5cclxuICpcclxuICogQGNsYXNzIEltYWdlQ29sbGVjdGlvblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRpbGVtYXBzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGltYWdlIGNvbGxlY3Rpb24gaW4gdGhlIG1hcCBkYXRhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGZpcnN0Z2lkIC0gVGhlIGZpcnN0IGltYWdlIGluZGV4IHRoaXMgaW1hZ2UgY29sbGVjdGlvbiBjb250YWlucy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MzJdIC0gV2lkdGggb2Ygd2lkZXN0IGltYWdlIChpbiBwaXhlbHMpLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9MzJdIC0gSGVpZ2h0IG9mIHRhbGxlc3QgaW1hZ2UgKGluIHBpeGVscykuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW21hcmdpbj0wXSAtIFRoZSBtYXJnaW4gYXJvdW5kIGFsbCBpbWFnZXMgaW4gdGhlIGNvbGxlY3Rpb24gKGluIHBpeGVscykuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3NwYWNpbmc9MF0gLSBUaGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggaW1hZ2UgaW4gdGhlIGNvbGxlY3Rpb24gKGluIHBpeGVscykuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcGVydGllcz17fV0gLSBDdXN0b20gSW1hZ2UgQ29sbGVjdGlvbiBwcm9wZXJ0aWVzLlxyXG4gKi9cclxudmFyIEltYWdlQ29sbGVjdGlvbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBJbWFnZUNvbGxlY3Rpb24gKG5hbWUsIGZpcnN0Z2lkLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHNwYWNpbmcsIHByb3BlcnRpZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQgfHwgd2lkdGggPD0gMCkgeyB3aWR0aCA9IDMyOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA8PSAwKSB7IGhlaWdodCA9IDMyOyB9XHJcbiAgICAgICAgaWYgKG1hcmdpbiA9PT0gdW5kZWZpbmVkKSB7IG1hcmdpbiA9IDA7IH1cclxuICAgICAgICBpZiAoc3BhY2luZyA9PT0gdW5kZWZpbmVkKSB7IHNwYWNpbmcgPSAwOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBJbWFnZSBDb2xsZWN0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGlsZWQgZmlyc3RnaWQgdmFsdWUuXHJcbiAgICAgICAgICogVGhpcyBpcyB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGZpcnN0IGltYWdlIGluZGV4IHRoaXMgSW1hZ2UgQ29sbGVjdGlvbiBjb250YWlucy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuSW1hZ2VDb2xsZWN0aW9uI2ZpcnN0Z2lkXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maXJzdGdpZCA9IGZpcnN0Z2lkIHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgaW1hZ2UgKGluIHBpeGVscykuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkltYWdlQ29sbGVjdGlvbiNpbWFnZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbWFnZVdpZHRoID0gd2lkdGggfCAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0YWxsZXN0IGltYWdlIChpbiBwaXhlbHMpLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jaW1hZ2VIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlSGVpZ2h0ID0gaGVpZ2h0IHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1hcmdpbiBhcm91bmQgdGhlIGltYWdlcyBpbiB0aGUgY29sbGVjdGlvbiAoaW4gcGl4ZWxzKS5cclxuICAgICAgICAgKiBVc2UgYHNldFNwYWNpbmdgIHRvIGNoYW5nZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuSW1hZ2VDb2xsZWN0aW9uI2ltYWdlTWFyZ2VcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlTWFyZ2luID0gbWFyZ2luIHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwYWNpbmcgYmV0d2VlbiBlYWNoIGltYWdlIGluIHRoZSBjb2xsZWN0aW9uIChpbiBwaXhlbHMpLlxyXG4gICAgICAgICAqIFVzZSBgc2V0U3BhY2luZ2AgdG8gY2hhbmdlLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jaW1hZ2VTcGFjaW5nXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbWFnZVNwYWNpbmcgPSBzcGFjaW5nIHwgMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW1hZ2UgQ29sbGVjdGlvbi1zcGVjaWZpYyBwcm9wZXJ0aWVzIHRoYXQgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIHRoZSBUaWxlZCBlZGl0b3IuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkltYWdlQ29sbGVjdGlvbiNwcm9wZXJ0aWVzXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FjaGVkIGltYWdlcyB0aGF0IGFyZSBhIHBhcnQgb2YgdGhpcyBjb2xsZWN0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jaW1hZ2VzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBpbWFnZSBjb2xsZWN0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jdG90YWxcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBpbWFnZSBjb2xsZWN0aW9uIGNvbnRhaW5zIHRoZSBnaXZlbiBpbWFnZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jY29udGFpbnNJbWFnZUluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbWFnZUluZGV4IC0gVGhlIGltYWdlIGluZGV4IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBJbWFnZSBDb2xsZWN0aW9uIGNvbnRhaW5zIHRoZSBnaXZlbiBpbmRleC5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnNJbWFnZUluZGV4OiBmdW5jdGlvbiAoaW1hZ2VJbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKGltYWdlSW5kZXggPj0gdGhpcy5maXJzdGdpZCAmJiBpbWFnZUluZGV4IDwgKHRoaXMuZmlyc3RnaWQgKyB0aGlzLnRvdGFsKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGFuIGltYWdlIHRvIHRoaXMgSW1hZ2UgQ29sbGVjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb24jYWRkSW1hZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGdpZCAtIFRoZSBnaWQgb2YgdGhlIGltYWdlIGluIHRoZSBJbWFnZSBDb2xsZWN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGltYWdlIC0gVGhlIHRoZSBrZXkgb2YgdGhlIGltYWdlIGluIHRoZSBJbWFnZSBDb2xsZWN0aW9uIGFuZCBpbiB0aGUgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkltYWdlQ29sbGVjdGlvbn0gVGhpcyBJbWFnZUNvbGxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGRJbWFnZTogZnVuY3Rpb24gKGdpZCwgaW1hZ2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pbWFnZXMucHVzaCh7IGdpZDogZ2lkLCBpbWFnZTogaW1hZ2UgfSk7XHJcbiAgICAgICAgdGhpcy50b3RhbCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZUNvbGxlY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/ImageCollection.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/ParseToTilemap.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/ParseToTilemap.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ./Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar MapData = __webpack_require__(/*! ./mapdata/MapData */ \"./node_modules/phaser/src/tilemaps/mapdata/MapData.js\");\r\nvar Parse = __webpack_require__(/*! ./parsers/Parse */ \"./node_modules/phaser/src/tilemaps/parsers/Parse.js\");\r\nvar Tilemap = __webpack_require__(/*! ./Tilemap */ \"./node_modules/phaser/src/tilemaps/Tilemap.js\");\r\n\r\n/**\r\n * Create a Tilemap from the given key or data. If neither is given, make a blank Tilemap. When\r\n * loading from CSV or a 2D array, you should specify the tileWidth & tileHeight. When parsing from\r\n * a map from Tiled, the tileWidth, tileHeight, width & height will be pulled from the map data. For\r\n * an empty map, you should specify tileWidth, tileHeight, width & height.\r\n *\r\n * @function Phaser.Tilemaps.ParseToTilemap\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Scene} scene - The Scene to which this Tilemap belongs.\r\n * @param {string} [key] - The key in the Phaser cache that corresponds to the loaded tilemap data.\r\n * @param {integer} [tileWidth=32] - The width of a tile in pixels.\r\n * @param {integer} [tileHeight=32] - The height of a tile in pixels.\r\n * @param {integer} [width=10] - The width of the map in tiles.\r\n * @param {integer} [height=10] - The height of the map in tiles.\r\n * @param {integer[][]} [data] - Instead of loading from the cache, you can also load directly from\r\n * a 2D array of tile indexes.\r\n * @param {boolean} [insertNull=false] - Controls how empty tiles, tiles with an index of -1, in the\r\n * map data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n * \r\n * @return {Phaser.Tilemaps.Tilemap}\r\n */\r\nvar ParseToTilemap = function (scene, key, tileWidth, tileHeight, width, height, data, insertNull)\r\n{\r\n    if (tileWidth === undefined) { tileWidth = 32; }\r\n    if (tileHeight === undefined) { tileHeight = 32; }\r\n    if (width === undefined) { width = 10; }\r\n    if (height === undefined) { height = 10; }\r\n    if (insertNull === undefined) { insertNull = false; }\r\n\r\n    var mapData = null;\r\n\r\n    if (Array.isArray(data))\r\n    {\r\n        var name = key !== undefined ? key : 'map';\r\n        mapData = Parse(name, Formats.ARRAY_2D, data, tileWidth, tileHeight, insertNull);\r\n    }\r\n    else if (key !== undefined)\r\n    {\r\n        var tilemapData = scene.cache.tilemap.get(key);\r\n\r\n        if (!tilemapData)\r\n        {\r\n            console.warn('No map data found for key ' + key);\r\n        }\r\n        else\r\n        {\r\n            mapData = Parse(key, tilemapData.format, tilemapData.data, tileWidth, tileHeight, insertNull);\r\n        }\r\n    }\r\n\r\n    if (mapData === null)\r\n    {\r\n        mapData = new MapData({\r\n            tileWidth: tileWidth,\r\n            tileHeight: tileHeight,\r\n            width: width,\r\n            height: height\r\n        });\r\n    }\r\n\r\n    return new Tilemap(scene, mapData);\r\n};\r\n\r\nmodule.exports = ParseToTilemap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9QYXJzZVRvVGlsZW1hcC5qcz9hNmIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsZ0VBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLGdGQUFtQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsNEVBQWlCO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxnRUFBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZ0JBQWdCO0FBQ2xELG1DQUFtQyxpQkFBaUI7QUFDcEQsOEJBQThCLFlBQVk7QUFDMUMsK0JBQStCLGFBQWE7QUFDNUMsbUNBQW1DLG9CQUFvQjs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL1BhcnNlVG9UaWxlbWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRm9ybWF0cyA9IHJlcXVpcmUoJy4vRm9ybWF0cycpO1xyXG52YXIgTWFwRGF0YSA9IHJlcXVpcmUoJy4vbWFwZGF0YS9NYXBEYXRhJyk7XHJcbnZhciBQYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2Vycy9QYXJzZScpO1xyXG52YXIgVGlsZW1hcCA9IHJlcXVpcmUoJy4vVGlsZW1hcCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIFRpbGVtYXAgZnJvbSB0aGUgZ2l2ZW4ga2V5IG9yIGRhdGEuIElmIG5laXRoZXIgaXMgZ2l2ZW4sIG1ha2UgYSBibGFuayBUaWxlbWFwLiBXaGVuXHJcbiAqIGxvYWRpbmcgZnJvbSBDU1Ygb3IgYSAyRCBhcnJheSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZSB0aWxlV2lkdGggJiB0aWxlSGVpZ2h0LiBXaGVuIHBhcnNpbmcgZnJvbVxyXG4gKiBhIG1hcCBmcm9tIFRpbGVkLCB0aGUgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB3aWR0aCAmIGhlaWdodCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBtYXAgZGF0YS4gRm9yXHJcbiAqIGFuIGVtcHR5IG1hcCwgeW91IHNob3VsZCBzcGVjaWZ5IHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgd2lkdGggJiBoZWlnaHQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2VUb1RpbGVtYXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBUaWxlbWFwIGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBrZXkgaW4gdGhlIFBoYXNlciBjYWNoZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBsb2FkZWQgdGlsZW1hcCBkYXRhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlV2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIGEgdGlsZSBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVIZWlnaHQ9MzJdIC0gVGhlIGhlaWdodCBvZiBhIHRpbGUgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD0xMF0gLSBUaGUgd2lkdGggb2YgdGhlIG1hcCBpbiB0aWxlcy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTEwXSAtIFRoZSBoZWlnaHQgb2YgdGhlIG1hcCBpbiB0aWxlcy5cclxuICogQHBhcmFtIHtpbnRlZ2VyW11bXX0gW2RhdGFdIC0gSW5zdGVhZCBvZiBsb2FkaW5nIGZyb20gdGhlIGNhY2hlLCB5b3UgY2FuIGFsc28gbG9hZCBkaXJlY3RseSBmcm9tXHJcbiAqIGEgMkQgYXJyYXkgb2YgdGlsZSBpbmRleGVzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbnNlcnROdWxsPWZhbHNlXSAtIENvbnRyb2xzIGhvdyBlbXB0eSB0aWxlcywgdGlsZXMgd2l0aCBhbiBpbmRleCBvZiAtMSwgaW4gdGhlXHJcbiAqIG1hcCBkYXRhIGFyZSBoYW5kbGVkLiBJZiBgdHJ1ZWAsIGVtcHR5IGxvY2F0aW9ucyB3aWxsIGdldCBhIHZhbHVlIG9mIGBudWxsYC4gSWYgYGZhbHNlYCwgZW1wdHlcclxuICogbG9jYXRpb24gd2lsbCBnZXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLiBJZiB5b3UndmUgYSBsYXJnZSBzcGFyc2VseSBwb3B1bGF0ZWQgbWFwIGFuZFxyXG4gKiB0aGUgdGlsZSBkYXRhIGRvZXNuJ3QgbmVlZCB0byBjaGFuZ2UgdGhlbiBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gYHRydWVgIHdpbGwgaGVscCB3aXRoIG1lbW9yeVxyXG4gKiBjb25zdW1wdGlvbi4gSG93ZXZlciBpZiB5b3VyIG1hcCBpcyBzbWFsbCBvciB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIHRpbGVzIGR5bmFtaWNhbGx5LCB0aGVuIGxlYXZlXHJcbiAqIHRoZSBkZWZhdWx0IHZhbHVlIHNldC5cclxuICogXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfVxyXG4gKi9cclxudmFyIFBhcnNlVG9UaWxlbWFwID0gZnVuY3Rpb24gKHNjZW5lLCBrZXksIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZGF0YSwgaW5zZXJ0TnVsbClcclxue1xyXG4gICAgaWYgKHRpbGVXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHRpbGVXaWR0aCA9IDMyOyB9XHJcbiAgICBpZiAodGlsZUhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHRpbGVIZWlnaHQgPSAzMjsgfVxyXG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMDsgfVxyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDEwOyB9XHJcbiAgICBpZiAoaW5zZXJ0TnVsbCA9PT0gdW5kZWZpbmVkKSB7IGluc2VydE51bGwgPSBmYWxzZTsgfVxyXG5cclxuICAgIHZhciBtYXBEYXRhID0gbnVsbDtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGtleSAhPT0gdW5kZWZpbmVkID8ga2V5IDogJ21hcCc7XHJcbiAgICAgICAgbWFwRGF0YSA9IFBhcnNlKG5hbWUsIEZvcm1hdHMuQVJSQVlfMkQsIGRhdGEsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgaW5zZXJ0TnVsbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChrZXkgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZW1hcERhdGEgPSBzY2VuZS5jYWNoZS50aWxlbWFwLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIXRpbGVtYXBEYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBtYXAgZGF0YSBmb3VuZCBmb3Iga2V5ICcgKyBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtYXBEYXRhID0gUGFyc2Uoa2V5LCB0aWxlbWFwRGF0YS5mb3JtYXQsIHRpbGVtYXBEYXRhLmRhdGEsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgaW5zZXJ0TnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXBEYXRhID09PSBudWxsKVxyXG4gICAge1xyXG4gICAgICAgIG1hcERhdGEgPSBuZXcgTWFwRGF0YSh7XHJcbiAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdpZHRoLFxyXG4gICAgICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlSGVpZ2h0LFxyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBUaWxlbWFwKHNjZW5lLCBtYXBEYXRhKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VUb1RpbGVtYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/ParseToTilemap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/Tile.js":
/*!**************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/Tile.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle */ \"./node_modules/phaser/src/geom/rectangle/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Tile is a representation of a single tile within the Tilemap. This is a lightweight data\r\n * representation, so its position information is stored without factoring in scroll, layer\r\n * scale or layer position.\r\n *\r\n * @class Tile\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Tilemaps.LayerData} layer - The LayerData object in the Tilemap that this tile belongs to.\r\n * @param {integer} index - The unique index of this tile within the map.\r\n * @param {integer} x - The x coordinate of this tile in tile coordinates.\r\n * @param {integer} y - The y coordinate of this tile in tile coordinates.\r\n * @param {integer} width - Width of the tile in pixels.\r\n * @param {integer} height - Height of the tile in pixels.\r\n * @param {integer} baseWidth - The base width a tile in the map (in pixels). Tiled maps support\r\n * multiple tileset sizes within one map, but they are still placed at intervals of the base\r\n * tile width.\r\n * @param {integer} baseHeight - The base height of the tile in pixels (in pixels). Tiled maps\r\n * support multiple tileset sizes within one map, but they are still placed at intervals of the\r\n * base tile height.\r\n */\r\nvar Tile = new Class({\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.Flip,\r\n        Components.Visible\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function Tile (layer, index, x, y, width, height, baseWidth, baseHeight)\r\n    {\r\n        /**\r\n         * The LayerData in the Tilemap data that this tile belongs to.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#layer\r\n         * @type {Phaser.Tilemaps.LayerData}\r\n         * @since 3.0.0\r\n         */\r\n        this.layer = layer;\r\n\r\n        /**\r\n         * The index of this tile within the map data corresponding to the tileset, or -1 if this\r\n         * represents a blank tile.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#index\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.index = index;\r\n\r\n        /**\r\n         * The x map coordinate of this tile in tile units.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#x\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.x = x;\r\n\r\n        /**\r\n         * The y map coordinate of this tile in tile units.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#y\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.y = y;\r\n\r\n        /**\r\n         * The width of the tile in pixels.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#width\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = width;\r\n\r\n        /**\r\n         * The height of the tile in pixels.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#height\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = height;\r\n\r\n        /**\r\n         * The map's base width of a tile in pixels. Tiled maps support multiple tileset sizes\r\n         * within one map, but they are still placed at intervals of the base tile size.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#baseWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.baseWidth = (baseWidth !== undefined) ? baseWidth : width;\r\n\r\n        /**\r\n         * The map's base height of a tile in pixels. Tiled maps support multiple tileset sizes\r\n         * within one map, but they are still placed at intervals of the base tile size.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#baseHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.baseHeight = (baseHeight !== undefined) ? baseHeight : height;\r\n\r\n        /**\r\n         * The x coordinate of the top left of this tile in pixels. This is relative to the top left\r\n         * of the layer this tile is being rendered within. This property does NOT factor in camera\r\n         * scroll, layer scale or layer position.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#pixelX\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.pixelX = 0;\r\n\r\n        /**\r\n         * The y coordinate of the top left of this tile in pixels. This is relative to the top left\r\n         * of the layer this tile is being rendered within. This property does NOT factor in camera\r\n         * scroll, layer scale or layer position.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#pixelY\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.pixelY = 0;\r\n\r\n        this.updatePixelXY();\r\n\r\n        /**\r\n         * Tile specific properties. These usually come from Tiled.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#properties\r\n         * @type {any}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = {};\r\n\r\n        /**\r\n         * The rotation angle of this tile.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#rotation\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.rotation = 0;\r\n\r\n        /**\r\n         * Whether the tile should collide with any object on the left side.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collideLeft\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideLeft = false;\r\n\r\n        /**\r\n         * Whether the tile should collide with any object on the right side.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collideRight\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideRight = false;\r\n\r\n        /**\r\n         * Whether the tile should collide with any object on the top side.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collideUp\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideUp = false;\r\n\r\n        /**\r\n         * Whether the tile should collide with any object on the bottom side.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collideDown\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideDown = false;\r\n\r\n        /**\r\n         * Whether the tile's left edge is interesting for collisions.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#faceLeft\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.faceLeft = false;\r\n\r\n        /**\r\n         * Whether the tile's right edge is interesting for collisions.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#faceRight\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.faceRight = false;\r\n\r\n        /**\r\n         * Whether the tile's top edge is interesting for collisions.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#faceTop\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.faceTop = false;\r\n\r\n        /**\r\n         * Whether the tile's bottom edge is interesting for collisions.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#faceBottom\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.faceBottom = false;\r\n\r\n        /**\r\n         * Tile collision callback.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collisionCallback\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.collisionCallback = null;\r\n\r\n        /**\r\n         * The context in which the collision callback will be called.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#collisionCallbackContext\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.collisionCallbackContext = this;\r\n\r\n        /**\r\n         * The tint to apply to this tile. Note: tint is currently a single color value instead of\r\n         * the 4 corner tint component on other GameObjects.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#tint\r\n         * @type {number}\r\n         * @default\r\n         * @since 3.0.0\r\n         */\r\n        this.tint = 0xffffff;\r\n\r\n        /**\r\n         * An empty object where physics-engine specific information (e.g. bodies) may be stored.\r\n         *\r\n         * @name Phaser.Tilemaps.Tile#physics\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.physics = {};\r\n    },\r\n\r\n    /**\r\n     * Check if the given x and y world coordinates are within this Tile. This does not factor in\r\n     * camera scroll, layer scale or layer position.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#containsPoint\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x coordinate to test.\r\n     * @param {number} y - The y coordinate to test.\r\n     *\r\n     * @return {boolean} True if the coordinates are within this Tile, otherwise false.\r\n     */\r\n    containsPoint: function (x, y)\r\n    {\r\n        return !(x < this.pixelX || y < this.pixelY || x > this.right || y > this.bottom);\r\n    },\r\n\r\n    /**\r\n     * Copies the tile data & properties from the given tile to this tile. This copies everything\r\n     * except for position and interesting faces.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tilemaps.Tile} tile - The tile to copy from.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    copy: function (tile)\r\n    {\r\n        this.index = tile.index;\r\n        this.alpha = tile.alpha;\r\n        this.properties = tile.properties;\r\n        this.visible = tile.visible;\r\n        this.setFlip(tile.flipX, tile.flipY);\r\n        this.tint = tile.tint;\r\n        this.rotation = tile.rotation;\r\n        this.collideUp = tile.collideUp;\r\n        this.collideDown = tile.collideDown;\r\n        this.collideLeft = tile.collideLeft;\r\n        this.collideRight = tile.collideRight;\r\n        this.collisionCallback = tile.collisionCallback;\r\n        this.collisionCallbackContext = tile.collisionCallbackContext;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The collision group for this Tile, defined within the Tileset. This returns a reference to\r\n     * the collision group stored within the Tileset, so any modification of the returned object\r\n     * will impact all tiles that have the same index as this tile.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @return {?object} tileset\r\n     */\r\n    getCollisionGroup: function ()\r\n    {\r\n        return this.tileset ? this.tileset.getTileCollisionGroup(this.index) : null;\r\n    },\r\n\r\n    /**\r\n     * The tile data for this Tile, defined within the Tileset. This typically contains Tiled\r\n     * collision data, tile animations and terrain information. This returns a reference to the tile\r\n     * data stored within the Tileset, so any modification of the returned object will impact all\r\n     * tiles that have the same index as this tile.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getTileData\r\n     * @since 3.0.0\r\n     *\r\n     * @return {?object} tileset\r\n     */\r\n    getTileData: function ()\r\n    {\r\n        return this.tileset ? this.tileset.getTileData(this.index) : null;\r\n    },\r\n\r\n    /**\r\n     * Gets the world X position of the left side of the tile, factoring in the layers position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getLeft\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getLeft: function (camera)\r\n    {\r\n        var tilemapLayer = this.tilemapLayer;\r\n\r\n        return (tilemapLayer) ? tilemapLayer.tileToWorldX(this.x, camera) : this.x * this.baseWidth;\r\n    },\r\n\r\n    /**\r\n     * Gets the world X position of the right side of the tile, factoring in the layer's position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getRight\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getRight: function (camera)\r\n    {\r\n        var tilemapLayer = this.tilemapLayer;\r\n\r\n        return (tilemapLayer) ? this.getLeft(camera) + this.width * tilemapLayer.scaleX : this.getLeft(camera) + this.width;\r\n    },\r\n\r\n    /**\r\n     * Gets the world Y position of the top side of the tile, factoring in the layer's position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getTop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getTop: function (camera)\r\n    {\r\n        var tilemapLayer = this.tilemapLayer;\r\n\r\n        // Tiled places tiles on a grid of baseWidth x baseHeight. The origin for a tile in grid\r\n        // units is the bottom left, so the y coordinate needs to be adjusted by the difference\r\n        // between the base size and this tile's size.\r\n        return tilemapLayer\r\n            ? tilemapLayer.tileToWorldY(this.y, camera) - (this.height - this.baseHeight) * tilemapLayer.scaleY\r\n            : this.y * this.baseHeight - (this.height - this.baseHeight);\r\n    },\r\n\r\n    /**\r\n     * Gets the world Y position of the bottom side of the tile, factoring in the layer's position,\r\n     * scale and scroll.\r\n\r\n     * @method Phaser.Tilemaps.Tile#getBottom\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getBottom: function (camera)\r\n    {\r\n        var tilemapLayer = this.tilemapLayer;\r\n        return tilemapLayer\r\n            ? this.getTop(camera) + this.height * tilemapLayer.scaleY\r\n            : this.getTop(camera) + this.height;\r\n    },\r\n\r\n\r\n    /**\r\n     * Gets the world rectangle bounding box for the tile, factoring in the layers position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getBounds\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     * @param {object} [output] - [description]\r\n     *\r\n     * @return {(Phaser.Geom.Rectangle|object)}\r\n     */\r\n    getBounds: function (camera, output)\r\n    {\r\n        if (output === undefined) { output = new Rectangle(); }\r\n\r\n        output.x = this.getLeft();\r\n        output.y = this.getTop();\r\n        output.width = this.getRight() - output.x;\r\n        output.height = this.getBottom() - output.y;\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Gets the world X position of the center of the tile, factoring in the layer's position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getCenterX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getCenterX: function (camera)\r\n    {\r\n        return (this.getLeft(camera) + this.getRight(camera)) / 2;\r\n    },\r\n\r\n    /**\r\n     * Gets the world Y position of the center of the tile, factoring in the layer's position,\r\n     * scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#getCenterY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to use to perform the check.\r\n     *\r\n     * @return {number}\r\n     */\r\n    getCenterY: function (camera)\r\n    {\r\n        return (this.getTop(camera) + this.getBottom(camera)) / 2;\r\n    },\r\n\r\n    /**\r\n     * Clean up memory.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.collisionCallback = undefined;\r\n        this.collisionCallbackContext = undefined;\r\n        this.properties = undefined;\r\n    },\r\n\r\n    /**\r\n     * Check for intersection with this tile. This does not factor in camera scroll, layer scale or\r\n     * layer position.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#intersects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} x - The x axis in pixels.\r\n     * @param {number} y - The y axis in pixels.\r\n     * @param {number} right - The right point.\r\n     * @param {number} bottom - The bottom point.\r\n     *\r\n     * @return {boolean}\r\n     */\r\n    intersects: function (x, y, right, bottom)\r\n    {\r\n        return !(\r\n            right <= this.pixelX || bottom <= this.pixelY ||\r\n            x >= this.right || y >= this.bottom\r\n        );\r\n    },\r\n\r\n    /**\r\n     * Checks if the tile is interesting.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#isInteresting\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} collides - If true, will consider the tile interesting if it collides on any side.\r\n     * @param {boolean} faces - If true, will consider the tile interesting if it has an interesting face.\r\n     *\r\n     * @return {boolean} True if the Tile is interesting, otherwise false.\r\n     */\r\n    isInteresting: function (collides, faces)\r\n    {\r\n        if (collides && faces) { return (this.canCollide || this.hasInterestingFace); }\r\n        else if (collides) { return this.collides; }\r\n        else if (faces) { return this.hasInterestingFace; }\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Reset collision status flags.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#resetCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate interesting faces for this tile and its neighbors.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    resetCollision: function (recalculateFaces)\r\n    {\r\n        if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n        this.collideLeft = false;\r\n        this.collideRight = false;\r\n        this.collideUp = false;\r\n        this.collideDown = false;\r\n\r\n        this.faceTop = false;\r\n        this.faceBottom = false;\r\n        this.faceLeft = false;\r\n        this.faceRight = false;\r\n\r\n        if (recalculateFaces)\r\n        {\r\n            var tilemapLayer = this.tilemapLayer;\r\n\r\n            if (tilemapLayer)\r\n            {\r\n                this.tilemapLayer.calculateFacesAt(this.x, this.y);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Reset faces.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#resetFaces\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    resetFaces: function ()\r\n    {\r\n        this.faceTop = false;\r\n        this.faceBottom = false;\r\n        this.faceLeft = false;\r\n        this.faceRight = false;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the collision flags for each side of this tile and updates the interesting faces list.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#setCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} left - Indicating collide with any object on the left.\r\n     * @param {boolean} [right] - Indicating collide with any object on the right.\r\n     * @param {boolean} [up] - Indicating collide with any object on the top.\r\n     * @param {boolean} [down] - Indicating collide with any object on the bottom.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate interesting faces\r\n     * for this tile and its neighbors.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    setCollision: function (left, right, up, down, recalculateFaces)\r\n    {\r\n        if (right === undefined) { right = left; }\r\n        if (up === undefined) { up = left; }\r\n        if (down === undefined) { down = left; }\r\n        if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n        this.collideLeft = left;\r\n        this.collideRight = right;\r\n        this.collideUp = up;\r\n        this.collideDown = down;\r\n\r\n        this.faceLeft = left;\r\n        this.faceRight = right;\r\n        this.faceTop = up;\r\n        this.faceBottom = down;\r\n\r\n        if (recalculateFaces)\r\n        {\r\n            var tilemapLayer = this.tilemapLayer;\r\n\r\n            if (tilemapLayer)\r\n            {\r\n                this.tilemapLayer.calculateFacesAt(this.x, this.y);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Set a callback to be called when this tile is hit by an object. The callback must true for\r\n     * collision processing to take place.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#setCollisionCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - Callback function.\r\n     * @param {object} context - Callback will be called within this context.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    setCollisionCallback: function (callback, context)\r\n    {\r\n        if (callback === null)\r\n        {\r\n            this.collisionCallback = undefined;\r\n            this.collisionCallbackContext = undefined;\r\n        }\r\n        else\r\n        {\r\n            this.collisionCallback = callback;\r\n            this.collisionCallbackContext = context;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the size of the tile and updates its pixelX and pixelY.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#setSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileWidth - The width of the tile in pixels.\r\n     * @param {integer} tileHeight - The height of the tile in pixels.\r\n     * @param {integer} baseWidth - The base width a tile in the map (in pixels).\r\n     * @param {integer} baseHeight - The base height of the tile in pixels (in pixels).\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    setSize: function (tileWidth, tileHeight, baseWidth, baseHeight)\r\n    {\r\n        if (tileWidth !== undefined) { this.width = tileWidth; }\r\n        if (tileHeight !== undefined) { this.height = tileHeight; }\r\n        if (baseWidth !== undefined) { this.baseWidth = baseWidth; }\r\n        if (baseHeight !== undefined) { this.baseHeight = baseHeight; }\r\n\r\n        this.updatePixelXY();\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Used internally. Updates the tile's world XY position based on the current tile size.\r\n     *\r\n     * @method Phaser.Tilemaps.Tile#updatePixelXY\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} This Tile object.\r\n     */\r\n    updatePixelXY: function ()\r\n    {\r\n        // Tiled places tiles on a grid of baseWidth x baseHeight. The origin for a tile is the\r\n        // bottom left, while the Phaser renderer assumes the origin is the top left. The y\r\n        // coordinate needs to be adjusted by the difference.\r\n        this.pixelX = this.x * this.baseWidth;\r\n        this.pixelY = this.y * this.baseHeight;\r\n\r\n        // this.pixelY = this.y * this.baseHeight - (this.height - this.baseHeight);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * True if this tile can collide on any of its faces or has a collision callback set.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#canCollide\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    canCollide: {\r\n        get: function ()\r\n        {\r\n            return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown || this.collisionCallback);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * True if this tile can collide on any of its faces.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#collides\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    collides: {\r\n        get: function ()\r\n        {\r\n            return (this.collideLeft || this.collideRight || this.collideUp || this.collideDown);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * True if this tile has any interesting faces.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#hasInterestingFace\r\n     * @type {boolean}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    hasInterestingFace: {\r\n        get: function ()\r\n        {\r\n            return (this.faceTop || this.faceBottom || this.faceLeft || this.faceRight);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The tileset that contains this Tile. This is null if accessed from a LayerData instance\r\n     * before the tile is placed in a StaticTilemapLayer or DynamicTilemapLayer, or if the tile has\r\n     * an index that doesn't correspond to any of the map's tilesets.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#tileset\r\n     * @type {?Phaser.Tilemaps.Tileset}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    tileset: {\r\n\r\n        get: function ()\r\n        {\r\n            var tilemapLayer = this.layer.tilemapLayer;\r\n\r\n            if (tilemapLayer)\r\n            {\r\n                var tileset = tilemapLayer.gidMap[this.index];\r\n\r\n                if (tileset)\r\n                {\r\n                    return tileset;\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n    },\r\n\r\n    /**\r\n     * The tilemap layer that contains this Tile. This will only return null if accessed from a\r\n     * LayerData instance before the tile is placed within a StaticTilemapLayer or\r\n     * DynamicTilemapLayer.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#tilemapLayer\r\n     * @type {?Phaser.Tilemaps.StaticTilemapLayer|Phaser.Tilemaps.DynamicTilemapLayer}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    tilemapLayer: {\r\n        get: function ()\r\n        {\r\n            return this.layer.tilemapLayer;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The tilemap that contains this Tile. This will only return null if accessed from a LayerData\r\n     * instance before the tile is placed within a StaticTilemapLayer or DynamicTilemapLayer.\r\n     *\r\n     * @name Phaser.Tilemaps.Tile#tilemap\r\n     * @type {?Phaser.Tilemaps.Tilemap}\r\n     * @readonly\r\n     * @since 3.0.0\r\n     */\r\n    tilemap: {\r\n        get: function ()\r\n        {\r\n            var tilemapLayer = this.tilemapLayer;\r\n            return tilemapLayer ? tilemapLayer.tilemap : null;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Tile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlLmpzP2NkMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQTJCO0FBQ3BELGdCQUFnQixtQkFBTyxDQUFDLDRFQUFtQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDBCQUEwQjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFEQUFxRDtBQUNyRiw0QkFBNEIsc0JBQXNCO0FBQ2xELHlCQUF5QixnQ0FBZ0M7QUFDekQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHlCQUF5Qjs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7QUFDaEQsK0JBQStCLFdBQVc7QUFDMUMsaUNBQWlDLGFBQWE7QUFDOUMsNkNBQTZDLHlCQUF5Qjs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHdCQUF3QjtBQUM5RCx1Q0FBdUMsMEJBQTBCO0FBQ2pFLHNDQUFzQyw0QkFBNEI7QUFDbEUsdUNBQXVDLDhCQUE4Qjs7QUFFckU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL1RpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGlsZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHRpbGUgd2l0aGluIHRoZSBUaWxlbWFwLiBUaGlzIGlzIGEgbGlnaHR3ZWlnaHQgZGF0YVxyXG4gKiByZXByZXNlbnRhdGlvbiwgc28gaXRzIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIHN0b3JlZCB3aXRob3V0IGZhY3RvcmluZyBpbiBzY3JvbGwsIGxheWVyXHJcbiAqIHNjYWxlIG9yIGxheWVyIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRpbGVtYXBzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgTGF5ZXJEYXRhIG9iamVjdCBpbiB0aGUgVGlsZW1hcCB0aGF0IHRoaXMgdGlsZSBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIHVuaXF1ZSBpbmRleCBvZiB0aGlzIHRpbGUgd2l0aGluIHRoZSBtYXAuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyB0aWxlIGluIHRpbGUgY29vcmRpbmF0ZXMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhpcyB0aWxlIGluIHRpbGUgY29vcmRpbmF0ZXMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBXaWR0aCBvZiB0aGUgdGlsZSBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gSGVpZ2h0IG9mIHRoZSB0aWxlIGluIHBpeGVscy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBiYXNlV2lkdGggLSBUaGUgYmFzZSB3aWR0aCBhIHRpbGUgaW4gdGhlIG1hcCAoaW4gcGl4ZWxzKS4gVGlsZWQgbWFwcyBzdXBwb3J0XHJcbiAqIG11bHRpcGxlIHRpbGVzZXQgc2l6ZXMgd2l0aGluIG9uZSBtYXAsIGJ1dCB0aGV5IGFyZSBzdGlsbCBwbGFjZWQgYXQgaW50ZXJ2YWxzIG9mIHRoZSBiYXNlXHJcbiAqIHRpbGUgd2lkdGguXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gYmFzZUhlaWdodCAtIFRoZSBiYXNlIGhlaWdodCBvZiB0aGUgdGlsZSBpbiBwaXhlbHMgKGluIHBpeGVscykuIFRpbGVkIG1hcHNcclxuICogc3VwcG9ydCBtdWx0aXBsZSB0aWxlc2V0IHNpemVzIHdpdGhpbiBvbmUgbWFwLCBidXQgdGhleSBhcmUgc3RpbGwgcGxhY2VkIGF0IGludGVydmFscyBvZiB0aGVcclxuICogYmFzZSB0aWxlIGhlaWdodC5cclxuICovXHJcbnZhciBUaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGVcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlIChsYXllciwgaW5kZXgsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJhc2VXaWR0aCwgYmFzZUhlaWdodClcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTGF5ZXJEYXRhIGluIHRoZSBUaWxlbWFwIGRhdGEgdGhhdCB0aGlzIHRpbGUgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2xheWVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXllciA9IGxheWVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyB0aWxlIHdpdGhpbiB0aGUgbWFwIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGUgdGlsZXNldCwgb3IgLTEgaWYgdGhpc1xyXG4gICAgICAgICAqIHJlcHJlc2VudHMgYSBibGFuayB0aWxlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjaW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IG1hcCBjb29yZGluYXRlIG9mIHRoaXMgdGlsZSBpbiB0aWxlIHVuaXRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjeFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IG1hcCBjb29yZGluYXRlIG9mIHRoaXMgdGlsZSBpbiB0aWxlIHVuaXRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgdGlsZSBpbiBwaXhlbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGlsZSBpbiBwaXhlbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1hcCdzIGJhc2Ugd2lkdGggb2YgYSB0aWxlIGluIHBpeGVscy4gVGlsZWQgbWFwcyBzdXBwb3J0IG11bHRpcGxlIHRpbGVzZXQgc2l6ZXNcclxuICAgICAgICAgKiB3aXRoaW4gb25lIG1hcCwgYnV0IHRoZXkgYXJlIHN0aWxsIHBsYWNlZCBhdCBpbnRlcnZhbHMgb2YgdGhlIGJhc2UgdGlsZSBzaXplLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjYmFzZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYXNlV2lkdGggPSAoYmFzZVdpZHRoICE9PSB1bmRlZmluZWQpID8gYmFzZVdpZHRoIDogd2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXAncyBiYXNlIGhlaWdodCBvZiBhIHRpbGUgaW4gcGl4ZWxzLiBUaWxlZCBtYXBzIHN1cHBvcnQgbXVsdGlwbGUgdGlsZXNldCBzaXplc1xyXG4gICAgICAgICAqIHdpdGhpbiBvbmUgbWFwLCBidXQgdGhleSBhcmUgc3RpbGwgcGxhY2VkIGF0IGludGVydmFscyBvZiB0aGUgYmFzZSB0aWxlIHNpemUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNiYXNlSGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYXNlSGVpZ2h0ID0gKGJhc2VIZWlnaHQgIT09IHVuZGVmaW5lZCkgPyBiYXNlSGVpZ2h0IDogaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBvZiB0aGlzIHRpbGUgaW4gcGl4ZWxzLiBUaGlzIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGVmdFxyXG4gICAgICAgICAqIG9mIHRoZSBsYXllciB0aGlzIHRpbGUgaXMgYmVpbmcgcmVuZGVyZWQgd2l0aGluLiBUaGlzIHByb3BlcnR5IGRvZXMgTk9UIGZhY3RvciBpbiBjYW1lcmFcclxuICAgICAgICAgKiBzY3JvbGwsIGxheWVyIHNjYWxlIG9yIGxheWVyIHBvc2l0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjcGl4ZWxYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpeGVsWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IG9mIHRoaXMgdGlsZSBpbiBwaXhlbHMuIFRoaXMgaXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0XHJcbiAgICAgICAgICogb2YgdGhlIGxheWVyIHRoaXMgdGlsZSBpcyBiZWluZyByZW5kZXJlZCB3aXRoaW4uIFRoaXMgcHJvcGVydHkgZG9lcyBOT1QgZmFjdG9yIGluIGNhbWVyYVxyXG4gICAgICAgICAqIHNjcm9sbCwgbGF5ZXIgc2NhbGUgb3IgbGF5ZXIgcG9zaXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNwaXhlbFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGl4ZWxZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQaXhlbFhZKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbGUgc3BlY2lmaWMgcHJvcGVydGllcy4gVGhlc2UgdXN1YWxseSBjb21lIGZyb20gVGlsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNwcm9wZXJ0aWVzXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHJvdGF0aW9uIGFuZ2xlIG9mIHRoaXMgdGlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI3JvdGF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgdGlsZSBzaG91bGQgY29sbGlkZSB3aXRoIGFueSBvYmplY3Qgb24gdGhlIGxlZnQgc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NvbGxpZGVMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlTGVmdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSB0aWxlIHNob3VsZCBjb2xsaWRlIHdpdGggYW55IG9iamVjdCBvbiB0aGUgcmlnaHQgc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NvbGxpZGVSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29sbGlkZVJpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRpbGUgc2hvdWxkIGNvbGxpZGUgd2l0aCBhbnkgb2JqZWN0IG9uIHRoZSB0b3Agc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NvbGxpZGVVcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29sbGlkZVVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRpbGUgc2hvdWxkIGNvbGxpZGUgd2l0aCBhbnkgb2JqZWN0IG9uIHRoZSBib3R0b20gc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NvbGxpZGVEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSB0aWxlJ3MgbGVmdCBlZGdlIGlzIGludGVyZXN0aW5nIGZvciBjb2xsaXNpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjZmFjZUxlZnRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZhY2VMZWZ0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRpbGUncyByaWdodCBlZGdlIGlzIGludGVyZXN0aW5nIGZvciBjb2xsaXNpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjZmFjZVJpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWNlUmlnaHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgdGlsZSdzIHRvcCBlZGdlIGlzIGludGVyZXN0aW5nIGZvciBjb2xsaXNpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjZmFjZVRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmFjZVRvcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSB0aWxlJ3MgYm90dG9tIGVkZ2UgaXMgaW50ZXJlc3RpbmcgZm9yIGNvbGxpc2lvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNmYWNlQm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWNlQm90dG9tID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbGUgY29sbGlzaW9uIGNhbGxiYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjY29sbGlzaW9uQ2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb25DYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjb2xsaXNpb24gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSNjb2xsaXNpb25DYWxsYmFja0NvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ2FsbGJhY2tDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbnQgdG8gYXBwbHkgdG8gdGhpcyB0aWxlLiBOb3RlOiB0aW50IGlzIGN1cnJlbnRseSBhIHNpbmdsZSBjb2xvciB2YWx1ZSBpbnN0ZWFkIG9mXHJcbiAgICAgICAgICogdGhlIDQgY29ybmVyIHRpbnQgY29tcG9uZW50IG9uIG90aGVyIEdhbWVPYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjdGludFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbnQgPSAweGZmZmZmZjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gZW1wdHkgb2JqZWN0IHdoZXJlIHBoeXNpY3MtZW5naW5lIHNwZWNpZmljIGluZm9ybWF0aW9uIChlLmcuIGJvZGllcykgbWF5IGJlIHN0b3JlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI3BoeXNpY3NcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcyA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiB4IGFuZCB5IHdvcmxkIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBUaWxlLiBUaGlzIGRvZXMgbm90IGZhY3RvciBpblxyXG4gICAgICogY2FtZXJhIHNjcm9sbCwgbGF5ZXIgc2NhbGUgb3IgbGF5ZXIgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNjb250YWluc1BvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gdGVzdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byB0ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBUaWxlLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAhKHggPCB0aGlzLnBpeGVsWCB8fCB5IDwgdGhpcy5waXhlbFkgfHwgeCA+IHRoaXMucmlnaHQgfHwgeSA+IHRoaXMuYm90dG9tKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIHRpbGUgZGF0YSAmIHByb3BlcnRpZXMgZnJvbSB0aGUgZ2l2ZW4gdGlsZSB0byB0aGlzIHRpbGUuIFRoaXMgY29waWVzIGV2ZXJ5dGhpbmdcclxuICAgICAqIGV4Y2VwdCBmb3IgcG9zaXRpb24gYW5kIGludGVyZXN0aW5nIGZhY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gdGlsZSAtIFRoZSB0aWxlIHRvIGNvcHkgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gVGhpcyBUaWxlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHRpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IHRpbGUuaW5kZXg7XHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IHRpbGUuYWxwaGE7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGlsZS5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRpbGUudmlzaWJsZTtcclxuICAgICAgICB0aGlzLnNldEZsaXAodGlsZS5mbGlwWCwgdGlsZS5mbGlwWSk7XHJcbiAgICAgICAgdGhpcy50aW50ID0gdGlsZS50aW50O1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSB0aWxlLnJvdGF0aW9uO1xyXG4gICAgICAgIHRoaXMuY29sbGlkZVVwID0gdGlsZS5jb2xsaWRlVXA7XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlRG93biA9IHRpbGUuY29sbGlkZURvd247XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlTGVmdCA9IHRpbGUuY29sbGlkZUxlZnQ7XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlUmlnaHQgPSB0aWxlLmNvbGxpZGVSaWdodDtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNhbGxiYWNrID0gdGlsZS5jb2xsaXNpb25DYWxsYmFjaztcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNhbGxiYWNrQ29udGV4dCA9IHRpbGUuY29sbGlzaW9uQ2FsbGJhY2tDb250ZXh0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sbGlzaW9uIGdyb3VwIGZvciB0aGlzIFRpbGUsIGRlZmluZWQgd2l0aGluIHRoZSBUaWxlc2V0LiBUaGlzIHJldHVybnMgYSByZWZlcmVuY2UgdG9cclxuICAgICAqIHRoZSBjb2xsaXNpb24gZ3JvdXAgc3RvcmVkIHdpdGhpbiB0aGUgVGlsZXNldCwgc28gYW55IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0XHJcbiAgICAgKiB3aWxsIGltcGFjdCBhbGwgdGlsZXMgdGhhdCBoYXZlIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgdGlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI2dldENvbGxpc2lvbkdyb3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/b2JqZWN0fSB0aWxlc2V0XHJcbiAgICAgKi9cclxuICAgIGdldENvbGxpc2lvbkdyb3VwOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRpbGVzZXQgPyB0aGlzLnRpbGVzZXQuZ2V0VGlsZUNvbGxpc2lvbkdyb3VwKHRoaXMuaW5kZXgpIDogbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGlsZSBkYXRhIGZvciB0aGlzIFRpbGUsIGRlZmluZWQgd2l0aGluIHRoZSBUaWxlc2V0LiBUaGlzIHR5cGljYWxseSBjb250YWlucyBUaWxlZFxyXG4gICAgICogY29sbGlzaW9uIGRhdGEsIHRpbGUgYW5pbWF0aW9ucyBhbmQgdGVycmFpbiBpbmZvcm1hdGlvbi4gVGhpcyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSB0aWxlXHJcbiAgICAgKiBkYXRhIHN0b3JlZCB3aXRoaW4gdGhlIFRpbGVzZXQsIHNvIGFueSBtb2RpZmljYXRpb24gb2YgdGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGltcGFjdCBhbGxcclxuICAgICAqIHRpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBpbmRleCBhcyB0aGlzIHRpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNnZXRUaWxlRGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P29iamVjdH0gdGlsZXNldFxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50aWxlc2V0ID8gdGhpcy50aWxlc2V0LmdldFRpbGVEYXRhKHRoaXMuaW5kZXgpIDogbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3b3JsZCBYIHBvc2l0aW9uIG9mIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRpbGUsIGZhY3RvcmluZyBpbiB0aGUgbGF5ZXJzIHBvc2l0aW9uLFxyXG4gICAgICogc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI2dldExlZnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2UgdG8gcGVyZm9ybSB0aGUgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRMZWZ0OiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0aWxlbWFwTGF5ZXIgPSB0aGlzLnRpbGVtYXBMYXllcjtcclxuXHJcbiAgICAgICAgcmV0dXJuICh0aWxlbWFwTGF5ZXIpID8gdGlsZW1hcExheWVyLnRpbGVUb1dvcmxkWCh0aGlzLngsIGNhbWVyYSkgOiB0aGlzLnggKiB0aGlzLmJhc2VXaWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3b3JsZCBYIHBvc2l0aW9uIG9mIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0aWxlLCBmYWN0b3JpbmcgaW4gdGhlIGxheWVyJ3MgcG9zaXRpb24sXHJcbiAgICAgKiBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjZ2V0UmlnaHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2UgdG8gcGVyZm9ybSB0aGUgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRSaWdodDogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZW1hcExheWVyID0gdGhpcy50aWxlbWFwTGF5ZXI7XHJcblxyXG4gICAgICAgIHJldHVybiAodGlsZW1hcExheWVyKSA/IHRoaXMuZ2V0TGVmdChjYW1lcmEpICsgdGhpcy53aWR0aCAqIHRpbGVtYXBMYXllci5zY2FsZVggOiB0aGlzLmdldExlZnQoY2FtZXJhKSArIHRoaXMud2lkdGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd29ybGQgWSBwb3NpdGlvbiBvZiB0aGUgdG9wIHNpZGUgb2YgdGhlIHRpbGUsIGZhY3RvcmluZyBpbiB0aGUgbGF5ZXIncyBwb3NpdGlvbixcclxuICAgICAqIHNjYWxlIGFuZCBzY3JvbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNnZXRUb3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2UgdG8gcGVyZm9ybSB0aGUgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRUb3A6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRpbGVtYXBMYXllciA9IHRoaXMudGlsZW1hcExheWVyO1xyXG5cclxuICAgICAgICAvLyBUaWxlZCBwbGFjZXMgdGlsZXMgb24gYSBncmlkIG9mIGJhc2VXaWR0aCB4IGJhc2VIZWlnaHQuIFRoZSBvcmlnaW4gZm9yIGEgdGlsZSBpbiBncmlkXHJcbiAgICAgICAgLy8gdW5pdHMgaXMgdGhlIGJvdHRvbSBsZWZ0LCBzbyB0aGUgeSBjb29yZGluYXRlIG5lZWRzIHRvIGJlIGFkanVzdGVkIGJ5IHRoZSBkaWZmZXJlbmNlXHJcbiAgICAgICAgLy8gYmV0d2VlbiB0aGUgYmFzZSBzaXplIGFuZCB0aGlzIHRpbGUncyBzaXplLlxyXG4gICAgICAgIHJldHVybiB0aWxlbWFwTGF5ZXJcclxuICAgICAgICAgICAgPyB0aWxlbWFwTGF5ZXIudGlsZVRvV29ybGRZKHRoaXMueSwgY2FtZXJhKSAtICh0aGlzLmhlaWdodCAtIHRoaXMuYmFzZUhlaWdodCkgKiB0aWxlbWFwTGF5ZXIuc2NhbGVZXHJcbiAgICAgICAgICAgIDogdGhpcy55ICogdGhpcy5iYXNlSGVpZ2h0IC0gKHRoaXMuaGVpZ2h0IC0gdGhpcy5iYXNlSGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3b3JsZCBZIHBvc2l0aW9uIG9mIHRoZSBib3R0b20gc2lkZSBvZiB0aGUgdGlsZSwgZmFjdG9yaW5nIGluIHRoZSBsYXllcidzIHBvc2l0aW9uLFxyXG4gICAgICogc2NhbGUgYW5kIHNjcm9sbC5cclxuXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI2dldEJvdHRvbVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB0byBwZXJmb3JtIHRoZSBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEJvdHRvbTogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZW1hcExheWVyID0gdGhpcy50aWxlbWFwTGF5ZXI7XHJcbiAgICAgICAgcmV0dXJuIHRpbGVtYXBMYXllclxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VG9wKGNhbWVyYSkgKyB0aGlzLmhlaWdodCAqIHRpbGVtYXBMYXllci5zY2FsZVlcclxuICAgICAgICAgICAgOiB0aGlzLmdldFRvcChjYW1lcmEpICsgdGhpcy5oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdvcmxkIHJlY3RhbmdsZSBib3VuZGluZyBib3ggZm9yIHRoZSB0aWxlLCBmYWN0b3JpbmcgaW4gdGhlIGxheWVycyBwb3NpdGlvbixcclxuICAgICAqIHNjYWxlIGFuZCBzY3JvbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNnZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2UgdG8gcGVyZm9ybSB0aGUgY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW291dHB1dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfVxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChjYW1lcmEsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgICAgIG91dHB1dC54ID0gdGhpcy5nZXRMZWZ0KCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSB0aGlzLmdldFRvcCgpO1xyXG4gICAgICAgIG91dHB1dC53aWR0aCA9IHRoaXMuZ2V0UmlnaHQoKSAtIG91dHB1dC54O1xyXG4gICAgICAgIG91dHB1dC5oZWlnaHQgPSB0aGlzLmdldEJvdHRvbSgpIC0gb3V0cHV0Lnk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd29ybGQgWCBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSB0aWxlLCBmYWN0b3JpbmcgaW4gdGhlIGxheWVyJ3MgcG9zaXRpb24sXHJcbiAgICAgKiBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjZ2V0Q2VudGVyWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB0byBwZXJmb3JtIHRoZSBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlclg6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldExlZnQoY2FtZXJhKSArIHRoaXMuZ2V0UmlnaHQoY2FtZXJhKSkgLyAyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdvcmxkIFkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgdGlsZSwgZmFjdG9yaW5nIGluIHRoZSBsYXllcidzIHBvc2l0aW9uLFxyXG4gICAgICogc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI2dldENlbnRlcllcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2UgdG8gcGVyZm9ybSB0aGUgY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRDZW50ZXJZOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5nZXRUb3AoY2FtZXJhKSArIHRoaXMuZ2V0Qm90dG9tKGNhbWVyYSkpIC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhbiB1cCBtZW1vcnkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNhbGxiYWNrID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhpcyB0aWxlLiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiBjYW1lcmEgc2Nyb2xsLCBsYXllciBzY2FsZSBvclxyXG4gICAgICogbGF5ZXIgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNpbnRlcnNlY3RzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGF4aXMgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBheGlzIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCAtIFRoZSByaWdodCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gLSBUaGUgYm90dG9tIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdHM6IGZ1bmN0aW9uICh4LCB5LCByaWdodCwgYm90dG9tKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgICByaWdodCA8PSB0aGlzLnBpeGVsWCB8fCBib3R0b20gPD0gdGhpcy5waXhlbFkgfHxcclxuICAgICAgICAgICAgeCA+PSB0aGlzLnJpZ2h0IHx8IHkgPj0gdGhpcy5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgdGlsZSBpcyBpbnRlcmVzdGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI2lzSW50ZXJlc3RpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29sbGlkZXMgLSBJZiB0cnVlLCB3aWxsIGNvbnNpZGVyIHRoZSB0aWxlIGludGVyZXN0aW5nIGlmIGl0IGNvbGxpZGVzIG9uIGFueSBzaWRlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmYWNlcyAtIElmIHRydWUsIHdpbGwgY29uc2lkZXIgdGhlIHRpbGUgaW50ZXJlc3RpbmcgaWYgaXQgaGFzIGFuIGludGVyZXN0aW5nIGZhY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgVGlsZSBpcyBpbnRlcmVzdGluZywgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBpc0ludGVyZXN0aW5nOiBmdW5jdGlvbiAoY29sbGlkZXMsIGZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb2xsaWRlcyAmJiBmYWNlcykgeyByZXR1cm4gKHRoaXMuY2FuQ29sbGlkZSB8fCB0aGlzLmhhc0ludGVyZXN0aW5nRmFjZSk7IH1cclxuICAgICAgICBlbHNlIGlmIChjb2xsaWRlcykgeyByZXR1cm4gdGhpcy5jb2xsaWRlczsgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZhY2VzKSB7IHJldHVybiB0aGlzLmhhc0ludGVyZXN0aW5nRmFjZTsgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCBjb2xsaXNpb24gc3RhdHVzIGZsYWdzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjcmVzZXRDb2xsaXNpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSBpbnRlcmVzdGluZyBmYWNlcyBmb3IgdGhpcyB0aWxlIGFuZCBpdHMgbmVpZ2hib3JzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBUaGlzIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldENvbGxpc2lvbjogZnVuY3Rpb24gKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgPT09IHVuZGVmaW5lZCkgeyByZWNhbGN1bGF0ZUZhY2VzID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbGxpZGVMZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbGxpZGVVcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29sbGlkZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5mYWNlVG9wID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mYWNlQm90dG9tID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mYWNlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmFjZVJpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRpbGVtYXBMYXllciA9IHRoaXMudGlsZW1hcExheWVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRpbGVtYXBMYXllcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aWxlbWFwTGF5ZXIuY2FsY3VsYXRlRmFjZXNBdCh0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IGZhY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjcmVzZXRGYWNlc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoaXMgVGlsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RmFjZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mYWNlVG9wID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mYWNlQm90dG9tID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mYWNlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmFjZVJpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbGxpc2lvbiBmbGFncyBmb3IgZWFjaCBzaWRlIG9mIHRoaXMgdGlsZSBhbmQgdXBkYXRlcyB0aGUgaW50ZXJlc3RpbmcgZmFjZXMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlI3NldENvbGxpc2lvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBsZWZ0IC0gSW5kaWNhdGluZyBjb2xsaWRlIHdpdGggYW55IG9iamVjdCBvbiB0aGUgbGVmdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JpZ2h0XSAtIEluZGljYXRpbmcgY29sbGlkZSB3aXRoIGFueSBvYmplY3Qgb24gdGhlIHJpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBdIC0gSW5kaWNhdGluZyBjb2xsaWRlIHdpdGggYW55IG9iamVjdCBvbiB0aGUgdG9wLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZG93bl0gLSBJbmRpY2F0aW5nIGNvbGxpZGUgd2l0aCBhbnkgb2JqZWN0IG9uIHRoZSBib3R0b20uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcmVjYWxjdWxhdGUgaW50ZXJlc3RpbmcgZmFjZXNcclxuICAgICAqIGZvciB0aGlzIHRpbGUgYW5kIGl0cyBuZWlnaGJvcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoaXMgVGlsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCB1cCwgZG93biwgcmVjYWxjdWxhdGVGYWNlcylcclxuICAgIHtcclxuICAgICAgICBpZiAocmlnaHQgPT09IHVuZGVmaW5lZCkgeyByaWdodCA9IGxlZnQ7IH1cclxuICAgICAgICBpZiAodXAgPT09IHVuZGVmaW5lZCkgeyB1cCA9IGxlZnQ7IH1cclxuICAgICAgICBpZiAoZG93biA9PT0gdW5kZWZpbmVkKSB7IGRvd24gPSBsZWZ0OyB9XHJcbiAgICAgICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgPT09IHVuZGVmaW5lZCkgeyByZWNhbGN1bGF0ZUZhY2VzID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbGxpZGVMZWZ0ID0gbGVmdDtcclxuICAgICAgICB0aGlzLmNvbGxpZGVSaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIHRoaXMuY29sbGlkZVVwID0gdXA7XHJcbiAgICAgICAgdGhpcy5jb2xsaWRlRG93biA9IGRvd247XHJcblxyXG4gICAgICAgIHRoaXMuZmFjZUxlZnQgPSBsZWZ0O1xyXG4gICAgICAgIHRoaXMuZmFjZVJpZ2h0ID0gcmlnaHQ7XHJcbiAgICAgICAgdGhpcy5mYWNlVG9wID0gdXA7XHJcbiAgICAgICAgdGhpcy5mYWNlQm90dG9tID0gZG93bjtcclxuXHJcbiAgICAgICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZW1hcExheWVyID0gdGhpcy50aWxlbWFwTGF5ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGlsZW1hcExheWVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbGVtYXBMYXllci5jYWxjdWxhdGVGYWNlc0F0KHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhpcyB0aWxlIGlzIGhpdCBieSBhbiBvYmplY3QuIFRoZSBjYWxsYmFjayBtdXN0IHRydWUgZm9yXHJcbiAgICAgKiBjb2xsaXNpb24gcHJvY2Vzc2luZyB0byB0YWtlIHBsYWNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjc2V0Q29sbGlzaW9uQ2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCAtIENhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoaXMgVGlsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25DYWxsYmFjayA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25DYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uQ2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25DYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgdGlsZSBhbmQgdXBkYXRlcyBpdHMgcGl4ZWxYIGFuZCBwaXhlbFkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdGlsZSBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gYmFzZVdpZHRoIC0gVGhlIGJhc2Ugd2lkdGggYSB0aWxlIGluIHRoZSBtYXAgKGluIHBpeGVscykuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJhc2VIZWlnaHQgLSBUaGUgYmFzZSBoZWlnaHQgb2YgdGhlIHRpbGUgaW4gcGl4ZWxzIChpbiBwaXhlbHMpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBUaGlzIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAodGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBiYXNlV2lkdGgsIGJhc2VIZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVXaWR0aCAhPT0gdW5kZWZpbmVkKSB7IHRoaXMud2lkdGggPSB0aWxlV2lkdGg7IH1cclxuICAgICAgICBpZiAodGlsZUhlaWdodCAhPT0gdW5kZWZpbmVkKSB7IHRoaXMuaGVpZ2h0ID0gdGlsZUhlaWdodDsgfVxyXG4gICAgICAgIGlmIChiYXNlV2lkdGggIT09IHVuZGVmaW5lZCkgeyB0aGlzLmJhc2VXaWR0aCA9IGJhc2VXaWR0aDsgfVxyXG4gICAgICAgIGlmIChiYXNlSGVpZ2h0ICE9PSB1bmRlZmluZWQpIHsgdGhpcy5iYXNlSGVpZ2h0ID0gYmFzZUhlaWdodDsgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBpeGVsWFkoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5LiBVcGRhdGVzIHRoZSB0aWxlJ3Mgd29ybGQgWFkgcG9zaXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGlsZSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGUjdXBkYXRlUGl4ZWxYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoaXMgVGlsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBpeGVsWFk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gVGlsZWQgcGxhY2VzIHRpbGVzIG9uIGEgZ3JpZCBvZiBiYXNlV2lkdGggeCBiYXNlSGVpZ2h0LiBUaGUgb3JpZ2luIGZvciBhIHRpbGUgaXMgdGhlXHJcbiAgICAgICAgLy8gYm90dG9tIGxlZnQsIHdoaWxlIHRoZSBQaGFzZXIgcmVuZGVyZXIgYXNzdW1lcyB0aGUgb3JpZ2luIGlzIHRoZSB0b3AgbGVmdC4gVGhlIHlcclxuICAgICAgICAvLyBjb29yZGluYXRlIG5lZWRzIHRvIGJlIGFkanVzdGVkIGJ5IHRoZSBkaWZmZXJlbmNlLlxyXG4gICAgICAgIHRoaXMucGl4ZWxYID0gdGhpcy54ICogdGhpcy5iYXNlV2lkdGg7XHJcbiAgICAgICAgdGhpcy5waXhlbFkgPSB0aGlzLnkgKiB0aGlzLmJhc2VIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIHRoaXMucGl4ZWxZID0gdGhpcy55ICogdGhpcy5iYXNlSGVpZ2h0IC0gKHRoaXMuaGVpZ2h0IC0gdGhpcy5iYXNlSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1ZSBpZiB0aGlzIHRpbGUgY2FuIGNvbGxpZGUgb24gYW55IG9mIGl0cyBmYWNlcyBvciBoYXMgYSBjb2xsaXNpb24gY2FsbGJhY2sgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NhbkNvbGxpZGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2FuQ29sbGlkZToge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5jb2xsaWRlTGVmdCB8fCB0aGlzLmNvbGxpZGVSaWdodCB8fCB0aGlzLmNvbGxpZGVVcCB8fCB0aGlzLmNvbGxpZGVEb3duIHx8IHRoaXMuY29sbGlzaW9uQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnVlIGlmIHRoaXMgdGlsZSBjYW4gY29sbGlkZSBvbiBhbnkgb2YgaXRzIGZhY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2NvbGxpZGVzXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNvbGxpZGVzOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNvbGxpZGVMZWZ0IHx8IHRoaXMuY29sbGlkZVJpZ2h0IHx8IHRoaXMuY29sbGlkZVVwIHx8IHRoaXMuY29sbGlkZURvd24pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnVlIGlmIHRoaXMgdGlsZSBoYXMgYW55IGludGVyZXN0aW5nIGZhY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlI2hhc0ludGVyZXN0aW5nRmFjZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBoYXNJbnRlcmVzdGluZ0ZhY2U6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuZmFjZVRvcCB8fCB0aGlzLmZhY2VCb3R0b20gfHwgdGhpcy5mYWNlTGVmdCB8fCB0aGlzLmZhY2VSaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aWxlc2V0IHRoYXQgY29udGFpbnMgdGhpcyBUaWxlLiBUaGlzIGlzIG51bGwgaWYgYWNjZXNzZWQgZnJvbSBhIExheWVyRGF0YSBpbnN0YW5jZVxyXG4gICAgICogYmVmb3JlIHRoZSB0aWxlIGlzIHBsYWNlZCBpbiBhIFN0YXRpY1RpbGVtYXBMYXllciBvciBEeW5hbWljVGlsZW1hcExheWVyLCBvciBpZiB0aGUgdGlsZSBoYXNcclxuICAgICAqIGFuIGluZGV4IHRoYXQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBvZiB0aGUgbWFwJ3MgdGlsZXNldHMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjdGlsZXNldFxyXG4gICAgICogQHR5cGUgez9QaGFzZXIuVGlsZW1hcHMuVGlsZXNldH1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbGVzZXQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRpbGVtYXBMYXllciA9IHRoaXMubGF5ZXIudGlsZW1hcExheWVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRpbGVtYXBMYXllcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbGVzZXQgPSB0aWxlbWFwTGF5ZXIuZ2lkTWFwW3RoaXMuaW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aWxlc2V0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWxlc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aWxlbWFwIGxheWVyIHRoYXQgY29udGFpbnMgdGhpcyBUaWxlLiBUaGlzIHdpbGwgb25seSByZXR1cm4gbnVsbCBpZiBhY2Nlc3NlZCBmcm9tIGFcclxuICAgICAqIExheWVyRGF0YSBpbnN0YW5jZSBiZWZvcmUgdGhlIHRpbGUgaXMgcGxhY2VkIHdpdGhpbiBhIFN0YXRpY1RpbGVtYXBMYXllciBvclxyXG4gICAgICogRHluYW1pY1RpbGVtYXBMYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZSN0aWxlbWFwTGF5ZXJcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbGVtYXBMYXllcjoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxheWVyLnRpbGVtYXBMYXllcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpbGVtYXAgdGhhdCBjb250YWlucyB0aGlzIFRpbGUuIFRoaXMgd2lsbCBvbmx5IHJldHVybiBudWxsIGlmIGFjY2Vzc2VkIGZyb20gYSBMYXllckRhdGFcclxuICAgICAqIGluc3RhbmNlIGJlZm9yZSB0aGUgdGlsZSBpcyBwbGFjZWQgd2l0aGluIGEgU3RhdGljVGlsZW1hcExheWVyIG9yIER5bmFtaWNUaWxlbWFwTGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGUjdGlsZW1hcFxyXG4gICAgICogQHR5cGUgez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbGVtYXA6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZW1hcExheWVyID0gdGhpcy50aWxlbWFwTGF5ZXI7XHJcbiAgICAgICAgICAgIHJldHVybiB0aWxlbWFwTGF5ZXIgPyB0aWxlbWFwTGF5ZXIudGlsZW1hcCA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/Tile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/Tilemap.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/Tilemap.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar DynamicTilemapLayer = __webpack_require__(/*! ./dynamiclayer/DynamicTilemapLayer */ \"./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayer.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar Formats = __webpack_require__(/*! ./Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar LayerData = __webpack_require__(/*! ./mapdata/LayerData */ \"./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\");\r\nvar Rotate = __webpack_require__(/*! ../math/Rotate */ \"./node_modules/phaser/src/math/Rotate.js\");\r\nvar SpliceOne = __webpack_require__(/*! ../utils/array/SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\");\r\nvar StaticTilemapLayer = __webpack_require__(/*! ./staticlayer/StaticTilemapLayer */ \"./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayer.js\");\r\nvar Tile = __webpack_require__(/*! ./Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\nvar TilemapComponents = __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/tilemaps/components/index.js\");\r\nvar Tileset = __webpack_require__(/*! ./Tileset */ \"./node_modules/phaser/src/tilemaps/Tileset.js\");\r\n\r\n/**\r\n * @callback TilemapFilterCallback\r\n *\r\n * @param {Phaser.GameObjects.GameObject} value - An object found in the filtered area.\r\n * @param {number} index - The index of the object within the array.\r\n * @param {Phaser.GameObjects.GameObject[]} array - An array of all the objects found.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The object.\r\n */\r\n\r\n/**\r\n * @callback TilemapFindCallback\r\n *\r\n * @param {Phaser.GameObjects.GameObject} value - An object found.\r\n * @param {number} index - The index of the object within the array.\r\n * @param {Phaser.GameObjects.GameObject[]} array - An array of all the objects found.\r\n *\r\n * @return {boolean} `true` if the callback should be invoked, otherwise `false`.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * A Tilemap is a container for Tilemap data. This isn't a display object, rather, it holds data\r\n * about the map and allows you to add tilesets and tilemap layers to it. A map can have one or\r\n * more tilemap layers (StaticTilemapLayer or DynamicTilemapLayer), which are the display\r\n * objects that actually render tiles.\r\n *\r\n * The Tilemap data be parsed from a Tiled JSON file, a CSV file or a 2D array. Tiled is a free\r\n * software package specifically for creating tile maps, and is available from:\r\n * http://www.mapeditor.org\r\n *\r\n * A Tilemap has handy methods for getting & manipulating the tiles within a layer. You can only\r\n * use the methods that change tiles (e.g. removeTileAt) on a DynamicTilemapLayer.\r\n *\r\n * Note that all Tilemaps use a base tile size to calculate dimensions from, but that a\r\n * StaticTilemapLayer or DynamicTilemapLayer may have its own unique tile size that overrides\r\n * it.\r\n *\r\n * As of Phaser 3.21.0, if your tilemap includes layer groups (a feature of Tiled 1.2.0+) these\r\n * will be traversed and the following properties will affect children:\r\n * - opacity (blended with parent) and visibility (parent overrides child)\r\n * - Vertical and horizontal offset\r\n * The grouping hierarchy is not preserved and all layers will be flattened into a single array.\r\n * Group layers are parsed during Tilemap construction but are discarded after parsing so dynamic\r\n * layers will NOT continue to be affected by a parent.\r\n *\r\n * To avoid duplicate layer names, a layer that is a child of a group layer will have its parent\r\n * group name prepended with a '/'.  For example, consider a group called 'ParentGroup' with a\r\n * child called 'Layer 1'. In the Tilemap object, 'Layer 1' will have the name\r\n * 'ParentGroup/Layer 1'.\r\n *\r\n * @class Tilemap\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Tilemap belongs.\r\n * @param {Phaser.Tilemaps.MapData} mapData - A MapData instance containing Tilemap data.\r\n */\r\nvar Tilemap = new Class({\r\n\r\n    initialize:\r\n\r\n    function Tilemap (scene, mapData)\r\n    {\r\n        /**\r\n         * @name Phaser.Tilemaps.Tilemap#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The base width of a tile in pixels. Note that individual layers may have a different tile\r\n         * width.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#tileWidth\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileWidth = mapData.tileWidth;\r\n\r\n        /**\r\n         * The base height of a tile in pixels. Note that individual layers may have a different\r\n         * tile height.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#tileHeight\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileHeight = mapData.tileHeight;\r\n\r\n        /**\r\n         * The width of the map (in tiles).\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = mapData.width;\r\n\r\n        /**\r\n         * The height of the map (in tiles).\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = mapData.height;\r\n\r\n        /**\r\n         * The orientation of the map data (as specified in Tiled), usually 'orthogonal'.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#orientation\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.orientation = mapData.orientation;\r\n\r\n        /**\r\n         * The render (draw) order of the map data (as specified in Tiled), usually 'right-down'.\r\n         *\r\n         * The draw orders are:\r\n         *\r\n         * right-down\r\n         * left-down\r\n         * right-up\r\n         * left-up\r\n         *\r\n         * This can be changed via the `setRenderOrder` method.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#renderOrder\r\n         * @type {string}\r\n         * @since 3.12.0\r\n         */\r\n        this.renderOrder = mapData.renderOrder;\r\n\r\n        /**\r\n         * The format of the map data.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#format\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.format = mapData.format;\r\n\r\n        /**\r\n         * The version of the map data (as specified in Tiled, usually 1).\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#version\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.version = mapData.version;\r\n\r\n        /**\r\n         * Map specific properties as specified in Tiled.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#properties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = mapData.properties;\r\n\r\n        /**\r\n         * The width of the map in pixels based on width * tileWidth.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#widthInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.widthInPixels = mapData.widthInPixels;\r\n\r\n        /**\r\n         * The height of the map in pixels based on height * tileHeight.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#heightInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.heightInPixels = mapData.heightInPixels;\r\n\r\n        /**\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#imageCollections\r\n         * @type {Phaser.Tilemaps.ImageCollection[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.imageCollections = mapData.imageCollections;\r\n\r\n        /**\r\n         * An array of Tiled Image Layers.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#images\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.images = mapData.images;\r\n\r\n        /**\r\n         * An array of Tilemap layer data.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#layers\r\n         * @type {Phaser.Tilemaps.LayerData[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.layers = mapData.layers;\r\n\r\n        /**\r\n         * An array of Tilesets used in the map.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#tilesets\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilesets = mapData.tilesets;\r\n\r\n        /**\r\n         * An array of ObjectLayer instances parsed from Tiled object layers.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#objects\r\n         * @type {Phaser.Tilemaps.ObjectLayer[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.objects = mapData.objects;\r\n\r\n        /**\r\n         * The index of the currently selected LayerData object.\r\n         *\r\n         * @name Phaser.Tilemaps.Tilemap#currentLayerIndex\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.currentLayerIndex = 0;\r\n    },\r\n\r\n    /**\r\n     * Sets the rendering (draw) order of the tiles in this map.\r\n     *\r\n     * The default is 'right-down', meaning it will order the tiles starting from the top-left,\r\n     * drawing to the right and then moving down to the next row.\r\n     *\r\n     * The draw orders are:\r\n     *\r\n     * 0 = right-down\r\n     * 1 = left-down\r\n     * 2 = right-up\r\n     * 3 = left-up\r\n     *\r\n     * Setting the render order does not change the tiles or how they are stored in the layer,\r\n     * it purely impacts the order in which they are rendered.\r\n     *\r\n     * You can provide either an integer (0 to 3), or the string version of the order.\r\n     *\r\n     * Calling this method _after_ creating Static or Dynamic Tilemap Layers will **not** automatically\r\n     * update them to use the new render order. If you call this method after creating layers, use their\r\n     * own `setRenderOrder` methods to change them as needed.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setRenderOrder\r\n     * @since 3.12.0\r\n     *\r\n     * @param {(integer|string)} renderOrder - The render (draw) order value. Either an integer between 0 and 3, or a string: 'right-down', 'left-down', 'right-up' or 'left-up'.\r\n     *\r\n     * @return {this} This Tilemap object.\r\n     */\r\n    setRenderOrder: function (renderOrder)\r\n    {\r\n        var orders = [ 'right-down', 'left-down', 'right-up', 'left-up' ];\r\n\r\n        if (typeof renderOrder === 'number')\r\n        {\r\n            renderOrder = orders[renderOrder];\r\n        }\r\n\r\n        if (orders.indexOf(renderOrder) > -1)\r\n        {\r\n            this.renderOrder = renderOrder;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Adds an image to the map to be used as a tileset. A single map may use multiple tilesets.\r\n     * Note that the tileset name can be found in the JSON file exported from Tiled, or in the Tiled\r\n     * editor.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#addTilesetImage\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} tilesetName - The name of the tileset as specified in the map data.\r\n     * @param {string} [key] - The key of the Phaser.Cache image used for this tileset. If\r\n     * `undefined` or `null` it will look for an image with a key matching the tilesetName parameter.\r\n     * @param {integer} [tileWidth] - The width of the tile (in pixels) in the Tileset Image. If not\r\n     * given it will default to the map's tileWidth value, or the tileWidth specified in the Tiled\r\n     * JSON file.\r\n     * @param {integer} [tileHeight] - The height of the tiles (in pixels) in the Tileset Image. If\r\n     * not given it will default to the map's tileHeight value, or the tileHeight specified in the\r\n     * Tiled JSON file.\r\n     * @param {integer} [tileMargin] - The margin around the tiles in the sheet (in pixels). If not\r\n     * specified, it will default to 0 or the value specified in the Tiled JSON file.\r\n     * @param {integer} [tileSpacing] - The spacing between each the tile in the sheet (in pixels).\r\n     * If not specified, it will default to 0 or the value specified in the Tiled JSON file.\r\n     * @param {integer} [gid=0] - If adding multiple tilesets to a blank map, specify the starting\r\n     * GID this set will use here.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tileset} Returns the Tileset object that was created or updated, or null if it\r\n     * failed.\r\n     */\r\n    addTilesetImage: function (tilesetName, key, tileWidth, tileHeight, tileMargin, tileSpacing, gid)\r\n    {\r\n        if (tilesetName === undefined) { return null; }\r\n        if (key === undefined || key === null) { key = tilesetName; }\r\n\r\n        if (!this.scene.sys.textures.exists(key))\r\n        {\r\n            console.warn('Invalid Tileset Image: ' + key);\r\n            return null;\r\n        }\r\n\r\n        var texture = this.scene.sys.textures.get(key);\r\n\r\n        var index = this.getTilesetIndex(tilesetName);\r\n\r\n        if (index === null && this.format === Formats.TILED_JSON)\r\n        {\r\n            console.warn('No data found for Tileset: ' + tilesetName);\r\n            return null;\r\n        }\r\n\r\n        var tileset = this.tilesets[index];\r\n\r\n        if (tileset)\r\n        {\r\n            tileset.setTileSize(tileWidth, tileHeight);\r\n            tileset.setSpacing(tileMargin, tileSpacing);\r\n            tileset.setImage(texture);\r\n\r\n            return tileset;\r\n        }\r\n\r\n        if (tileWidth === undefined) { tileWidth = this.tileWidth; }\r\n        if (tileHeight === undefined) { tileHeight = this.tileHeight; }\r\n        if (tileMargin === undefined) { tileMargin = 0; }\r\n        if (tileSpacing === undefined) { tileSpacing = 0; }\r\n        if (gid === undefined) { gid = 0; }\r\n\r\n        tileset = new Tileset(tilesetName, gid, tileWidth, tileHeight, tileMargin, tileSpacing);\r\n\r\n        tileset.setImage(texture);\r\n\r\n        this.tilesets.push(tileset);\r\n\r\n        return tileset;\r\n    },\r\n\r\n    /**\r\n     * Turns the DynamicTilemapLayer associated with the given layer into a StaticTilemapLayer. If\r\n     * no layer specified, the map's current layer is used. This is useful if you want to manipulate\r\n     * a map at the start of a scene, but then make it non-manipulable and optimize it for speed.\r\n     * Note: the DynamicTilemapLayer passed in is destroyed, so make sure to store the value\r\n     * returned from this method if you want to manipulate the new StaticTilemapLayer.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#convertLayerToStatic\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer)} [layer] - The name of the layer from Tiled, the\r\n     * index of the layer in the map, or a DynamicTilemapLayer.\r\n     *\r\n     * @return {?Phaser.Tilemaps.StaticTilemapLayer} Returns the new layer that was created, or null if it\r\n     * failed.\r\n     */\r\n    convertLayerToStatic: function (layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        var dynamicLayer = layer.tilemapLayer;\r\n\r\n        if (!dynamicLayer || !(dynamicLayer instanceof DynamicTilemapLayer))\r\n        {\r\n            return null;\r\n        }\r\n\r\n        var staticLayer = new StaticTilemapLayer(\r\n            dynamicLayer.scene,\r\n            dynamicLayer.tilemap,\r\n            dynamicLayer.layerIndex,\r\n            dynamicLayer.tileset,\r\n            dynamicLayer.x,\r\n            dynamicLayer.y\r\n        );\r\n\r\n        this.scene.sys.displayList.add(staticLayer);\r\n\r\n        dynamicLayer.destroy();\r\n\r\n        return staticLayer;\r\n    },\r\n\r\n    /**\r\n     * Copies the tiles in the source rectangular area to a new destination (all specified in tile\r\n     * coordinates) within the layer. This copies all tile properties & recalculates collision\r\n     * information in the destination region.\r\n     *\r\n     * If no layer specified, the map's current layer is used. This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} srcTileX - The x coordinate of the area to copy from, in tiles, not pixels.\r\n     * @param {integer} srcTileY - The y coordinate of the area to copy from, in tiles, not pixels.\r\n     * @param {integer} width - The width of the area to copy, in tiles, not pixels.\r\n     * @param {integer} height - The height of the area to copy, in tiles, not pixels.\r\n     * @param {integer} destTileX - The x coordinate of the area to copy to, in tiles, not pixels.\r\n     * @param {integer} destTileY - The y coordinate of the area to copy to, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    copy: function (srcTileX, srcTileY, width, height, destTileX, destTileY, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'copy')) { return this; }\r\n\r\n        if (layer !== null)\r\n        {\r\n            TilemapComponents.Copy(\r\n                srcTileX, srcTileY,\r\n                width, height,\r\n                destTileX, destTileY,\r\n                recalculateFaces, layer\r\n            );\r\n\r\n            return this;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Creates a new and empty DynamicTilemapLayer. The currently selected layer in the map is set to this new layer.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#createBlankDynamicLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of this layer. Must be unique within the map.\r\n     * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n     * @param {number} [x=0] - The world x position where the top left of this layer will be placed.\r\n     * @param {number} [y=0] - The world y position where the top left of this layer will be placed.\r\n     * @param {integer} [width] - The width of the layer in tiles. If not specified, it will default to the map's width.\r\n     * @param {integer} [height] - The height of the layer in tiles. If not specified, it will default to the map's height.\r\n     * @param {integer} [tileWidth] - The width of the tiles the layer uses for calculations. If not specified, it will default to the map's tileWidth.\r\n     * @param {integer} [tileHeight] - The height of the tiles the layer uses for calculations. If not specified, it will default to the map's tileHeight.\r\n     *\r\n     * @return {?Phaser.Tilemaps.DynamicTilemapLayer} Returns the new layer that was created, or `null` if it failed.\r\n     */\r\n    createBlankDynamicLayer: function (name, tileset, x, y, width, height, tileWidth, tileHeight)\r\n    {\r\n        if (x === undefined) { x = 0; }\r\n        if (y === undefined) { y = 0; }\r\n        if (width === undefined) { width = this.width; }\r\n        if (height === undefined) { height = this.height; }\r\n        if (tileWidth === undefined) { tileWidth = this.tileWidth; }\r\n        if (tileHeight === undefined) { tileHeight = this.tileHeight; }\r\n\r\n        var index = this.getLayerIndex(name);\r\n\r\n        if (index !== null)\r\n        {\r\n            console.warn('Invalid Tilemap Layer ID: ' + name);\r\n            return null;\r\n        }\r\n\r\n        var layerData = new LayerData({\r\n            name: name,\r\n            tileWidth: tileWidth,\r\n            tileHeight: tileHeight,\r\n            width: width,\r\n            height: height\r\n        });\r\n\r\n        var row;\r\n\r\n        for (var tileY = 0; tileY < height; tileY++)\r\n        {\r\n            row = [];\r\n\r\n            for (var tileX = 0; tileX < width; tileX++)\r\n            {\r\n                row.push(new Tile(layerData, -1, tileX, tileY, tileWidth, tileHeight, this.tileWidth, this.tileHeight));\r\n            }\r\n\r\n            layerData.data.push(row);\r\n        }\r\n\r\n        this.layers.push(layerData);\r\n\r\n        this.currentLayerIndex = this.layers.length - 1;\r\n\r\n        var dynamicLayer = new DynamicTilemapLayer(this.scene, this, this.currentLayerIndex, tileset, x, y);\r\n\r\n        dynamicLayer.setRenderOrder(this.renderOrder);\r\n\r\n        this.scene.sys.displayList.add(dynamicLayer);\r\n\r\n        return dynamicLayer;\r\n    },\r\n\r\n    /**\r\n     * Creates a new DynamicTilemapLayer that renders the LayerData associated with the given\r\n     * `layerID`. The currently selected layer in the map is set to this new layer.\r\n     *\r\n     * The `layerID` is important. If you've created your map in Tiled then you can get this by\r\n     * looking in Tiled and looking at the layer name. Or you can open the JSON file it exports and\r\n     * look at the layers[].name value. Either way it must match.\r\n     *\r\n     * Unlike a static layer, a dynamic layer can be modified. See DynamicTilemapLayer for more\r\n     * information.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#createDynamicLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|string)} layerID - The layer array index value, or if a string is given, the layer name from Tiled.\r\n     * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n     * @param {number} [x=0] - The x position to place the layer in the world. If not specified, it will default to the layer offset from Tiled or 0.\r\n     * @param {number} [y=0] - The y position to place the layer in the world. If not specified, it will default to the layer offset from Tiled or 0.\r\n     *\r\n     * @return {?Phaser.Tilemaps.DynamicTilemapLayer} Returns the new layer was created, or null if it failed.\r\n     */\r\n    createDynamicLayer: function (layerID, tileset, x, y)\r\n    {\r\n        var index = this.getLayerIndex(layerID);\r\n\r\n        if (index === null)\r\n        {\r\n            console.warn('Invalid Tilemap Layer ID: ' + layerID);\r\n\r\n            if (typeof layerID === 'string')\r\n            {\r\n                console.warn('Valid tilelayer names:\\n\\t' + this.getTileLayerNames().join(',\\n\\t'));\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        var layerData = this.layers[index];\r\n\r\n        // Check for an associated static or dynamic tilemap layer\r\n        if (layerData.tilemapLayer)\r\n        {\r\n            console.warn('Tilemap Layer ID already exists:' + layerID);\r\n            return null;\r\n        }\r\n\r\n        this.currentLayerIndex = index;\r\n\r\n        //  Default the x/y position to match Tiled layer offset, if it exists.\r\n\r\n        if (x === undefined)\r\n        {\r\n            x = layerData.x;\r\n        }\r\n\r\n        if (y === undefined)\r\n        {\r\n            y = layerData.y;\r\n        }\r\n\r\n        var layer = new DynamicTilemapLayer(this.scene, this, index, tileset, x, y);\r\n\r\n        layer.setRenderOrder(this.renderOrder);\r\n\r\n        this.scene.sys.displayList.add(layer);\r\n\r\n        return layer;\r\n    },\r\n\r\n    /**\r\n     * Creates a Sprite for every object matching the given gid in the map data. All properties from\r\n     * the map data objectgroup are copied into the `spriteConfig`, so you can use this as an easy\r\n     * way to configure Sprite properties from within the map editor. For example giving an object a\r\n     * property of alpha: 0.5 in the map editor will duplicate that when the Sprite is created.\r\n     *\r\n     * Custom object properties not sharing names with the Sprite's own properties are copied to the\r\n     * Sprite's {@link Phaser.GameObjects.Sprite#data data store}.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#createFromObjects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of the object layer (from Tiled) to create Sprites from.\r\n     * @param {(integer|string)} id - Either the id (object), gid (tile object) or name (object or\r\n     * tile object) from Tiled. Ids are unique in Tiled, but a gid is shared by all tile objects\r\n     * with the same graphic. The same name can be used on multiple objects.\r\n     * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} spriteConfig - The config object to pass into the Sprite creator (i.e.\r\n     * scene.make.sprite).\r\n     * @param {Phaser.Scene} [scene=the scene the map is within] - The Scene to create the Sprites within.\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite[]} An array of the Sprites that were created.\r\n     */\r\n    createFromObjects: function (name, id, spriteConfig, scene)\r\n    {\r\n        if (spriteConfig === undefined) { spriteConfig = {}; }\r\n        if (scene === undefined) { scene = this.scene; }\r\n\r\n        var objectLayer = this.getObjectLayer(name);\r\n\r\n        if (!objectLayer)\r\n        {\r\n            console.warn('Cannot create from object. Invalid objectgroup name given: ' + name);\r\n\r\n            if (typeof layerID === 'string')\r\n            {\r\n                console.warn('Valid objectgroup names:\\n\\t' + this.getObjectLayerNames().join(',\\n\\t'));\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        var objects = objectLayer.objects;\r\n        var sprites = [];\r\n\r\n        for (var i = 0; i < objects.length; i++)\r\n        {\r\n            var found = false;\r\n            var obj = objects[i];\r\n\r\n            if (obj.gid !== undefined && typeof id === 'number' && obj.gid === id ||\r\n                obj.id !== undefined && typeof id === 'number' && obj.id === id ||\r\n                obj.name !== undefined && typeof id === 'string' && obj.name === id)\r\n            {\r\n                found = true;\r\n            }\r\n\r\n            if (found)\r\n            {\r\n                var config = Extend({}, spriteConfig, obj.properties);\r\n\r\n                config.x = obj.x;\r\n                config.y = obj.y;\r\n\r\n                var sprite = scene.make.sprite(config);\r\n\r\n                sprite.name = obj.name;\r\n\r\n                if (obj.width) { sprite.displayWidth = obj.width; }\r\n                if (obj.height) { sprite.displayHeight = obj.height; }\r\n\r\n                // Origin is (0, 1) in Tiled, so find the offset that matches the Sprite's origin.\r\n                var offset = {\r\n                    x: sprite.originX * sprite.displayWidth,\r\n                    y: (sprite.originY - 1) * sprite.displayHeight\r\n                };\r\n\r\n                // If the object is rotated, then the origin offset also needs to be rotated.\r\n                if (obj.rotation)\r\n                {\r\n                    var angle = DegToRad(obj.rotation);\r\n                    Rotate(offset, angle);\r\n                    sprite.rotation = angle;\r\n                }\r\n\r\n                sprite.x += offset.x;\r\n                sprite.y += offset.y;\r\n\r\n                if (obj.flippedHorizontal !== undefined || obj.flippedVertical !== undefined)\r\n                {\r\n                    sprite.setFlip(obj.flippedHorizontal, obj.flippedVertical);\r\n                }\r\n\r\n                if (!obj.visible) { sprite.visible = false; }\r\n\r\n                for (var key in obj.properties)\r\n                {\r\n                    if (sprite.hasOwnProperty(key))\r\n                    {\r\n                        continue;\r\n                    }\r\n\r\n                    sprite.setData(key, obj.properties[key]);\r\n                }\r\n\r\n                sprites.push(sprite);\r\n            }\r\n        }\r\n\r\n        return sprites;\r\n    },\r\n\r\n    /**\r\n     * Creates a Sprite for every object matching the given tile indexes in the layer. You can\r\n     * optionally specify if each tile will be replaced with a new tile after the Sprite has been\r\n     * created. This is useful if you want to lay down special tiles in a level that are converted to\r\n     * Sprites, but want to replace the tile itself with a floor tile or similar once converted.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#createFromTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - The tile index, or array of indexes, to create Sprites from.\r\n     * @param {(integer|array)} replacements - The tile index, or array of indexes, to change a converted\r\n     * tile to. Set to `null` to leave the tiles unchanged. If an array is given, it is assumed to be a\r\n     * one-to-one mapping with the indexes array.\r\n     * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} spriteConfig - The config object to pass into the Sprite creator (i.e. scene.make.sprite).\r\n     * @param {Phaser.Scene} [scene=scene the map is within] - The Scene to create the Sprites within.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.GameObjects.Sprite[]} Returns an array of Tiles, or null if the layer given was invalid.\r\n     */\r\n    createFromTiles: function (indexes, replacements, spriteConfig, scene, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.CreateFromTiles(indexes, replacements, spriteConfig, scene, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Creates a new StaticTilemapLayer that renders the LayerData associated with the given\r\n     * `layerID`. The currently selected layer in the map is set to this new layer.\r\n     *\r\n     * The `layerID` is important. If you've created your map in Tiled then you can get this by\r\n     * looking in Tiled and looking at the layer name. Or you can open the JSON file it exports and\r\n     * look at the layers[].name value. Either way it must match.\r\n     *\r\n     * It's important to remember that a static layer cannot be modified. See StaticTilemapLayer for\r\n     * more information.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#createStaticLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|string)} layerID - The layer array index value, or if a string is given, the layer name from Tiled.\r\n     * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n     * @param {number} [x=0] - The x position to place the layer in the world. If not specified, it will default to the layer offset from Tiled or 0.\r\n     * @param {number} [y=0] - The y position to place the layer in the world. If not specified, it will default to the layer offset from Tiled or 0.\r\n     *\r\n     * @return {?Phaser.Tilemaps.StaticTilemapLayer} Returns the new layer was created, or null if it failed.\r\n     */\r\n    createStaticLayer: function (layerID, tileset, x, y)\r\n    {\r\n        var index = this.getLayerIndex(layerID);\r\n\r\n        if (index === null)\r\n        {\r\n            console.warn('Invalid Tilemap Layer ID: ' + layerID);\r\n            if (typeof layerID === 'string')\r\n            {\r\n                console.warn('Valid tilelayer names:\\n\\t' + this.getTileLayerNames().join(',\\n\\t'));\r\n            }\r\n            return null;\r\n        }\r\n\r\n        var layerData = this.layers[index];\r\n\r\n        //  Check for an associated static or dynamic tilemap layer\r\n        if (layerData.tilemapLayer)\r\n        {\r\n            console.warn('Tilemap Layer ID already exists:' + layerID);\r\n            return null;\r\n        }\r\n\r\n        this.currentLayerIndex = index;\r\n\r\n        //  Default the x/y position to match Tiled layer offset, if it exists.\r\n        if (x === undefined && this.layers[index].x) { x = this.layers[index].x; }\r\n        if (y === undefined && this.layers[index].y) { y = this.layers[index].y; }\r\n\r\n        var layer = new StaticTilemapLayer(this.scene, this, index, tileset, x, y);\r\n\r\n        layer.setRenderOrder(this.renderOrder);\r\n\r\n        this.scene.sys.displayList.add(layer);\r\n\r\n        return layer;\r\n    },\r\n\r\n    /**\r\n     * Removes all layer data from this Tilemap and nulls the scene reference. This will destroy any\r\n     * StaticTilemapLayers or DynamicTilemapLayers that have been linked to LayerData.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.removeAllLayers();\r\n        this.tilesets.length = 0;\r\n        this.objects.length = 0;\r\n        this.scene = undefined;\r\n    },\r\n\r\n    /**\r\n     * Sets the tiles in the given rectangular area (in tile coordinates) of the layer with the\r\n     * specified index. Tiles will be set to collide if the given index is a colliding index.\r\n     * Collision information in the region will be recalculated.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#fill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The tile index to fill the area with.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    fill: function (index, tileX, tileY, width, height, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        if (this._isStaticCall(layer, 'fill')) { return this; }\r\n\r\n        TilemapComponents.Fill(index, tileX, tileY, width, height, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * For each object in the given object layer, run the given filter callback function. Any\r\n     * objects that pass the filter test (i.e. where the callback returns true) will returned as a\r\n     * new array. Similar to Array.prototype.Filter in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#filterObjects\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Tilemaps.ObjectLayer|string)} objectLayer - The name of an object layer (from Tiled) or an ObjectLayer instance.\r\n     * @param {TilemapFilterCallback} callback - The callback. Each object in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject[]} An array of object that match the search, or null if the objectLayer given was invalid.\r\n     */\r\n    filterObjects: function (objectLayer, callback, context)\r\n    {\r\n        if (typeof objectLayer === 'string')\r\n        {\r\n            var name = objectLayer;\r\n\r\n            objectLayer = this.getObjectLayer(objectLayer);\r\n\r\n            if (!objectLayer)\r\n            {\r\n                console.warn('No object layer found with the name: ' + name);\r\n                return null;\r\n            }\r\n        }\r\n\r\n        return objectLayer.objects.filter(callback, context);\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * filter callback function. Any tiles that pass the filter test (i.e. where the callback returns\r\n     * true) will returned as a new array. Similar to Array.prototype.Filter in vanilla JS.\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#filterTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n     * callback as the first and only parameter. The callback should return true for tiles that pass the\r\n     * filter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile[]} Returns an array of Tiles, or null if the layer given was invalid.\r\n     */\r\n    filterTiles: function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.FilterTiles(callback, context, tileX, tileY, width, height, filteringOptions, layer);\r\n    },\r\n\r\n    /**\r\n     * Searches the entire map layer for the first tile matching the given index, then returns that Tile\r\n     * object. If no match is found, it returns null. The search starts from the top-left tile and\r\n     * continues horizontally until it hits the end of the row, then it drops down to the next column.\r\n     * If the reverse boolean is true, it scans starting from the bottom-right corner traveling up to\r\n     * the top-left.\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#findByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The tile index value to search for.\r\n     * @param {integer} [skip=0] - The number of times to skip a matching tile before returning.\r\n     * @param {boolean} [reverse=false] - If true it will scan the layer in reverse, starting at the bottom-right. Otherwise it scans from the top-left.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tiles, or null if the layer given was invalid.\r\n     */\r\n    findByIndex: function (findIndex, skip, reverse, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.FindByIndex(findIndex, skip, reverse, layer);\r\n    },\r\n\r\n    /**\r\n     * Find the first object in the given object layer that satisfies the provided testing function.\r\n     * I.e. finds the first object for which `callback` returns true. Similar to\r\n     * Array.prototype.find in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#findObject\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Tilemaps.ObjectLayer|string)} objectLayer - The name of an object layer (from Tiled) or an ObjectLayer instance.\r\n     * @param {TilemapFindCallback} callback - The callback. Each object in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     *\r\n     * @return {?Phaser.GameObjects.GameObject} An object that matches the search, or null if no object found.\r\n     */\r\n    findObject: function (objectLayer, callback, context)\r\n    {\r\n        if (typeof objectLayer === 'string')\r\n        {\r\n            var name = objectLayer;\r\n\r\n            objectLayer = this.getObjectLayer(objectLayer);\r\n\r\n            if (!objectLayer)\r\n            {\r\n                console.warn('No object layer found with the name: ' + name);\r\n                return null;\r\n            }\r\n        }\r\n\r\n        return objectLayer.objects.find(callback, context) || null;\r\n    },\r\n\r\n    /**\r\n     * Find the first tile in the given rectangular area (in tile coordinates) of the layer that\r\n     * satisfies the provided testing function. I.e. finds the first tile for which `callback` returns\r\n     * true. Similar to Array.prototype.find in vanilla JS.\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#findTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {FindTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The Tile layer to run the search on. If not provided will use the current layer.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tiles, or null if the layer given was invalid.\r\n     */\r\n    findTile: function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.FindTile(callback, context, tileX, tileY, width, height, filteringOptions, layer);\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * callback. Similar to Array.prototype.forEach in vanilla JS.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#forEachTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {EachTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The Tile layer to run the search on. If not provided will use the current layer.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    forEachTile: function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.ForEachTile(callback, context, tileX, tileY, width, height, filteringOptions, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the image layer index based on its name.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getImageIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of the image to get.\r\n     *\r\n     * @return {integer} The index of the image in this tilemap, or null if not found.\r\n     */\r\n    getImageIndex: function (name)\r\n    {\r\n        return this.getIndex(this.images, name);\r\n    },\r\n\r\n    /**\r\n     * Return a list of all valid imagelayer names loaded in this Tilemap.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getImageLayerNames\r\n     * @since 3.21.0\r\n     *\r\n     * @return {string[]} Array of valid imagelayer names / IDs loaded into this Tilemap.\r\n     */\r\n    getImageLayerNames: function ()\r\n    {\r\n        if (!this.images || !Array.isArray(this.images))\r\n        {\r\n            return [];\r\n        }\r\n\r\n        return this.images.map(function (image)\r\n        {\r\n            return image.name;\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Internally used. Returns the index of the object in one of the Tilemaps arrays whose name\r\n     * property matches the given `name`.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {array} location - The Tilemap array to search.\r\n     * @param {string} name - The name of the array element to get.\r\n     *\r\n     * @return {number} The index of the element in the array, or null if not found.\r\n     */\r\n    getIndex: function (location, name)\r\n    {\r\n        for (var i = 0; i < location.length; i++)\r\n        {\r\n            if (location[i].name === name)\r\n            {\r\n                return i;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * Gets the LayerData from this.layers that is associated with `layer`, or null if an invalid\r\n     * `layer` is given.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The name of the\r\n     * layer from Tiled, the index of the layer in the map, a DynamicTilemapLayer or a\r\n     * StaticTilemapLayer. If not given will default to the maps current layer index.\r\n     *\r\n     * @return {Phaser.Tilemaps.LayerData} The corresponding LayerData within this.layers.\r\n     */\r\n    getLayer: function (layer)\r\n    {\r\n        var index = this.getLayerIndex(layer);\r\n\r\n        return (index !== null) ? this.layers[index] : null;\r\n    },\r\n\r\n    /**\r\n     * Gets the ObjectLayer from this.objects that has the given `name`, or null if no ObjectLayer\r\n     * is found with that name.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getObjectLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} [name] - The name of the object layer from Tiled.\r\n     *\r\n     * @return {?Phaser.Tilemaps.ObjectLayer} The corresponding ObjectLayer within this.objects or null.\r\n     */\r\n    getObjectLayer: function (name)\r\n    {\r\n        var index = this.getIndex(this.objects, name);\r\n\r\n        return (index !== null) ? this.objects[index] : null;\r\n    },\r\n\r\n    /**\r\n     * Return a list of all valid objectgroup names loaded in this Tilemap.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getObjectLayerNames\r\n     * @since 3.21.0\r\n     *\r\n     * @return {string[]} Array of valid objectgroup names / IDs loaded into this Tilemap.\r\n     */\r\n    getObjectLayerNames: function ()\r\n    {\r\n        if (!this.objects || !Array.isArray(this.objects))\r\n        {\r\n            return [];\r\n        }\r\n\r\n        return this.objects.map(function (object)\r\n        {\r\n            return object.name;\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Gets the LayerData index of the given `layer` within this.layers, or null if an invalid\r\n     * `layer` is given.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getLayerIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The name of the\r\n     * layer from Tiled, the index of the layer in the map, a DynamicTilemapLayer or a\r\n     * StaticTilemapLayer. If not given will default to the map's current layer index.\r\n     *\r\n     * @return {integer} The LayerData index within this.layers.\r\n     */\r\n    getLayerIndex: function (layer)\r\n    {\r\n        if (layer === undefined)\r\n        {\r\n            return this.currentLayerIndex;\r\n        }\r\n        else if (typeof layer === 'string')\r\n        {\r\n            return this.getLayerIndexByName(layer);\r\n        }\r\n        else if (typeof layer === 'number' && layer < this.layers.length)\r\n        {\r\n            return layer;\r\n        }\r\n        else if (layer instanceof StaticTilemapLayer || layer instanceof DynamicTilemapLayer)\r\n        {\r\n            return layer.layerIndex;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Gets the index of the LayerData within this.layers that has the given `name`, or null if an\r\n     * invalid `name` is given.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getLayerIndexByName\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of the layer to get.\r\n     *\r\n     * @return {integer} The LayerData index within this.layers.\r\n     */\r\n    getLayerIndexByName: function (name)\r\n    {\r\n        return this.getIndex(this.layers, name);\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given tile coordinates from the given layer.\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - X position to get the tile from (given in tile units, not pixels).\r\n     * @param {integer} tileY - Y position to get the tile from (given in tile units, not pixels).\r\n     * @param {boolean} [nonNull=false] - If true getTile won't return null for empty tiles, but a Tile object with an index of -1.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tile, or null if the layer given was invalid.\r\n     */\r\n    getTileAt: function (tileX, tileY, nonNull, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.GetTileAt(tileX, tileY, nonNull, layer);\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given world coordinates from the given layer.\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - X position to get the tile from (given in pixels)\r\n     * @param {number} worldY - Y position to get the tile from (given in pixels)\r\n     * @param {boolean} [nonNull=false] - If true, function won't return null for empty tiles, but a Tile object with an index of -1.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tile, or null if the layer given was invalid.\r\n     */\r\n    getTileAtWorldXY: function (worldX, worldY, nonNull, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.GetTileAtWorldXY(worldX, worldY, nonNull, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Return a list of all valid tilelayer names loaded in this Tilemap.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTileLayerNames\r\n     * @since 3.21.0\r\n     *\r\n     * @return {[string]} Array of valid tilelayer names / IDs loaded into this Tilemap.\r\n     */\r\n    getTileLayerNames: function ()\r\n    {\r\n        if (!this.layers || !Array.isArray(this.layers))\r\n        {\r\n            return [];\r\n        }\r\n\r\n        return this.layers.map(function (layer)\r\n        {\r\n            return layer.name;\r\n        });\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in tile coordinates) of the layer.\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTilesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile[]} Returns an array of Tiles, or null if the layer given was invalid.\r\n     */\r\n    getTilesWithin: function (tileX, tileY, width, height, filteringOptions, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.GetTilesWithin(tileX, tileY, width, height, filteringOptions, layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles that overlap with the given shape in the given layer. The shape must be a Circle,\r\n     * Line, Rectangle or Triangle. The shape should be in world coordinates.\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTilesWithinShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Geom.Circle|Phaser.Geom.Line|Phaser.Geom.Rectangle|Phaser.Geom.Triangle)} shape - A shape in world (pixel) coordinates\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile[]} Returns an array of Tiles, or null if the layer given was invalid.\r\n     */\r\n    getTilesWithinShape: function (shape, filteringOptions, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.GetTilesWithinShape(shape, filteringOptions, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in world coordinates) of the layer.\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTilesWithinWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The world x coordinate for the top-left of the area.\r\n     * @param {number} worldY - The world y coordinate for the top-left of the area.\r\n     * @param {number} width - The width of the area.\r\n     * @param {number} height - The height of the area.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile[]} Returns an array of Tiles, or null if the layer given was invalid.\r\n     */\r\n    getTilesWithinWorldXY: function (worldX, worldY, width, height, filteringOptions, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.GetTilesWithinWorldXY(worldX, worldY, width, height, filteringOptions, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the Tileset that has the given `name`, or null if an invalid `name` is given.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTileset\r\n     * @since 3.14.0\r\n     *\r\n     * @param {string} name - The name of the Tileset to get.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tileset} The Tileset, or `null` if no matching named tileset was found.\r\n     */\r\n    getTileset: function (name)\r\n    {\r\n        var index = this.getIndex(this.tilesets, name);\r\n\r\n        return (index !== null) ? this.tilesets[index] : null;\r\n    },\r\n\r\n    /**\r\n     * Gets the index of the Tileset within this.tilesets that has the given `name`, or null if an\r\n     * invalid `name` is given.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#getTilesetIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} name - The name of the Tileset to get.\r\n     *\r\n     * @return {integer} The Tileset index within this.tilesets.\r\n     */\r\n    getTilesetIndex: function (name)\r\n    {\r\n        return this.getIndex(this.tilesets, name);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in tile coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#hasTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?boolean} Returns a boolean, or null if the layer given was invalid.\r\n     */\r\n    hasTileAt: function (tileX, tileY, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.HasTileAt(tileX, tileY, layer);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in world coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#hasTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?boolean} Returns a boolean, or null if the layer given was invalid.\r\n     */\r\n    hasTileAtWorldXY: function (worldX, worldY, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.HasTileAtWorldXY(worldX, worldY, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * The LayerData object that is currently selected in the map. You can set this property using\r\n     * any type supported by setLayer.\r\n     *\r\n     * @name Phaser.Tilemaps.Tilemap#layer\r\n     * @type {Phaser.Tilemaps.LayerData}\r\n     * @since 3.0.0\r\n     */\r\n    layer: {\r\n        get: function ()\r\n        {\r\n            return this.layers[this.currentLayerIndex];\r\n        },\r\n\r\n        set: function (layer)\r\n        {\r\n            this.setLayer(layer);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Puts a tile at the given tile coordinates in the specified layer. You can pass in either an index\r\n     * or a Tile object. If you pass in a Tile, all attributes will be copied over to the specified\r\n     * location. If you pass in an index, only the index at the specified location will be changed.\r\n     * Collision information will be recalculated at the specified location.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#putTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tile, or null if the layer given was invalid or the coordinates were out of bounds.\r\n     */\r\n    putTileAt: function (tile, tileX, tileY, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'putTileAt')) { return null; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.PutTileAt(tile, tileX, tileY, recalculateFaces, layer);\r\n    },\r\n\r\n    /**\r\n     * Puts a tile at the given world coordinates (pixels) in the specified layer. You can pass in either\r\n     * an index or a Tile object. If you pass in a Tile, all attributes will be copied over to the\r\n     * specified location. If you pass in an index, only the index at the specified location will be\r\n     * changed. Collision information will be recalculated at the specified location.\r\n     *\r\n     * If no layer specified, the maps current layer is used. This\r\n     * cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#putTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tile, or null if the layer given was invalid.\r\n     */\r\n    putTileAtWorldXY: function (tile, worldX, worldY, recalculateFaces, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'putTileAtWorldXY')) { return null; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.PutTileAtWorldXY(tile, worldX, worldY, recalculateFaces, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Puts an array of tiles or a 2D array of tiles at the given tile coordinates in the specified\r\n     * layer. The array can be composed of either tile indexes or Tile objects. If you pass in a Tile,\r\n     * all attributes will be copied over to the specified location. If you pass in an index, only the\r\n     * index at the specified location will be changed. Collision information will be recalculated\r\n     * within the region tiles were changed.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#putTilesAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer[]|integer[][]|Phaser.Tilemaps.Tile[]|Phaser.Tilemaps.Tile[][])} tile - A row (array) or grid (2D array) of Tiles or tile indexes to place.\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    putTilesAt: function (tilesArray, tileX, tileY, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'putTilesAt')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.PutTilesAt(tilesArray, tileX, tileY, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n     * specified layer. Each tile will receive a new index. If an array of indexes is passed in, then\r\n     * those will be used for randomly assigning new tile indexes. If an array is not provided, the\r\n     * indexes found within the region (excluding -1) will be used for randomly assigning new tile\r\n     * indexes. This method only modifies tile indexes and does not change collision information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#randomize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {integer[]} [indexes] - An array of indexes to randomly draw from during randomization.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    randomize: function (tileX, tileY, width, height, indexes, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'randomize')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.Randomize(tileX, tileY, width, height, indexes, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces at the given tile coordinates of the specified layer. Interesting\r\n     * faces are used internally for optimizing collisions against tiles. This method is mostly used\r\n     * internally to optimize recalculating faces when only one tile has been changed.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#calculateFacesAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    calculateFacesAt: function (tileX, tileY, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.CalculateFacesAt(tileX, tileY, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces within the rectangular area specified (in tile coordinates) of the\r\n     * layer. Interesting faces are used internally for optimizing collisions against tiles. This method\r\n     * is mostly used internally.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#calculateFacesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    calculateFacesWithin: function (tileX, tileY, width, height, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.CalculateFacesWithin(tileX, tileY, width, height, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the given TilemapLayer from this Tilemap without destroying it.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#removeLayer\r\n     * @since 3.17.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to be removed.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    removeLayer: function (layer)\r\n    {\r\n        var index = this.getLayerIndex(layer);\r\n\r\n        if (index !== null)\r\n        {\r\n            SpliceOne(this.layers, index);\r\n            for (var i = index; i < this.layers.length; i++)\r\n            {\r\n                if (this.layers[i].tilemapLayer)\r\n                {\r\n                    this.layers[i].tilemapLayer.layerIndex--;\r\n                }\r\n            }\r\n\r\n            if (this.currentLayerIndex === index)\r\n            {\r\n                this.currentLayerIndex = 0;\r\n            }\r\n\r\n            return this;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Destroys the given TilemapLayer and removes it from this Tilemap.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#destroyLayer\r\n     * @since 3.17.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to be destroyed.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Returns this, or null if the layer given was invalid.\r\n     */\r\n    destroyLayer: function (layer)\r\n    {\r\n        var index = this.getLayerIndex(layer);\r\n\r\n        if (index !== null)\r\n        {\r\n            layer = this.layers[index];\r\n\r\n            layer.destroy();\r\n\r\n            SpliceOne(this.layers, index);\r\n\r\n            if (this.currentLayerIndex === index)\r\n            {\r\n                this.currentLayerIndex = 0;\r\n            }\r\n\r\n            return this;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes all layers from this Tilemap and destroys any associated StaticTilemapLayers or\r\n     * DynamicTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#removeAllLayers\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tilemaps.Tilemap} This Tilemap object.\r\n     */\r\n    removeAllLayers: function ()\r\n    {\r\n        var layers = this.layers;\r\n\r\n        // Destroy any StaticTilemapLayers or DynamicTilemapLayers that are stored in LayerData\r\n        for (var i = 0; i < layers.length; i++)\r\n        {\r\n            if (layers[i].tilemapLayer)\r\n            {\r\n                layers[i].tilemapLayer.destroy(false);\r\n            }\r\n        }\r\n\r\n        layers.length = 0;\r\n\r\n        this.currentLayerIndex = 0;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the given Tile, or an array of Tiles, from the layer to which they belong,\r\n     * and optionally recalculates the collision information.\r\n     *\r\n     * This cannot be applied to Tiles that belong to Static Tilemap Layers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#removeTile\r\n     * @since 3.17.0\r\n     *\r\n     * @param {(Phaser.Tilemaps.Tile|Phaser.Tilemaps.Tile[])} tiles - The Tile to remove, or an array of Tiles.\r\n     * @param {integer} [replaceIndex=-1] - After removing the Tile, insert a brand new Tile into its location with the given index. Leave as -1 to just remove the tile.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} Returns an array of Tiles that were removed.\r\n     */\r\n    removeTile: function (tiles, replaceIndex, recalculateFaces)\r\n    {\r\n        if (replaceIndex === undefined) { replaceIndex = -1; }\r\n        if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n        var removed = [];\r\n\r\n        if (!Array.isArray(tiles))\r\n        {\r\n            tiles = [ tiles ];\r\n        }\r\n\r\n        for (var i = 0; i < tiles.length; i++)\r\n        {\r\n            var tile = tiles[i];\r\n\r\n            removed.push(this.removeTileAt(tile.x, tile.y, true, recalculateFaces, tile.tilemapLayer));\r\n\r\n            if (replaceIndex > -1)\r\n            {\r\n                this.putTileAt(replaceIndex, tile.x, tile.y, recalculateFaces, tile.tilemapLayer);\r\n            }\r\n        }\r\n\r\n        return removed;\r\n    },\r\n\r\n    /**\r\n     * Removes the tile at the given tile coordinates in the specified layer and updates the layer's\r\n     * collision information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#removeTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns the Tile that was removed, or null if the layer given was invalid.\r\n     */\r\n    removeTileAt: function (tileX, tileY, replaceWithNull, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'removeTileAt')) { return null; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.RemoveTileAt(tileX, tileY, replaceWithNull, recalculateFaces, layer);\r\n    },\r\n\r\n    /**\r\n     * Removes the tile at the given world coordinates in the specified layer and updates the layer's\r\n     * collision information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#removeTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile} Returns a Tile, or null if the layer given was invalid.\r\n     */\r\n    removeTileAtWorldXY: function (worldX, worldY, replaceWithNull, recalculateFaces, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'removeTileAtWorldXY')) { return null; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.RemoveTileAtWorldXY(worldX, worldY, replaceWithNull, recalculateFaces, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Draws a debug representation of the layer to the given Graphics. This is helpful when you want to\r\n     * get a quick idea of which of your tiles are colliding and which have interesting faces. The tiles\r\n     * are drawn starting at (0, 0) in the Graphics, allowing you to place the debug representation\r\n     * wherever you want on the screen.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#renderDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The target Graphics object to draw upon.\r\n     * @param {Phaser.Types.Tilemaps.StyleConfig} styleConfig - An object specifying the colors to use for the debug drawing.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    renderDebug: function (graphics, styleConfig, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.RenderDebug(graphics, styleConfig, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Draws a debug representation of all layers within this Tilemap to the given Graphics object.\r\n     *\r\n     * This is helpful when you want to get a quick idea of which of your tiles are colliding and which\r\n     * have interesting faces. The tiles are drawn starting at (0, 0) in the Graphics, allowing you to\r\n     * place the debug representation wherever you want on the screen.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#renderDebugFull\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The target Graphics object to draw upon.\r\n     * @param {Phaser.Types.Tilemaps.StyleConfig} styleConfig - An object specifying the colors to use for the debug drawing.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    renderDebugFull: function (graphics, styleConfig)\r\n    {\r\n        var layers = this.layers;\r\n\r\n        // Destroy any StaticTilemapLayers or DynamicTilemapLayers that are stored in LayerData\r\n        for (var i = 0; i < layers.length; i++)\r\n        {\r\n            TilemapComponents.RenderDebug(graphics, styleConfig, layers[i]);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n     * `findIndex` and updates their index to match `newIndex`. This only modifies the index and does\r\n     * not change collision information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#replaceByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} findIndex - The index of the tile to search for.\r\n     * @param {integer} newIndex - The index of the tile to replace it with.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    replaceByIndex: function (findIndex, newIndex, tileX, tileY, width, height, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'replaceByIndex')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.ReplaceByIndex(findIndex, newIndex, tileX, tileY, width, height, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the given tile or tiles within a layer by index. You can pass in either a\r\n     * single numeric index or an array of indexes: [2, 3, 15, 20]. The `collides` parameter controls if\r\n     * collision will be enabled (true) or disabled (false).\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     * @param {boolean} [updateLayer=true] - If true, updates the current tiles on the layer. Set to false if no tiles have been placed for significant performance boost.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollision: function (indexes, collides, recalculateFaces, layer, updateLayer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetCollision(indexes, collides, recalculateFaces, layer, updateLayer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on a range of tiles in a layer whose index is between the specified `start` and\r\n     * `stop` (inclusive). Calling this with a start value of 10 and a stop value of 14 would set\r\n     * collision for tiles 10, 11, 12, 13 and 14. The `collides` parameter controls if collision will be\r\n     * enabled (true) or disabled (false).\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setCollisionBetween\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} start - The first index of the tile to be set for collision.\r\n     * @param {integer} stop - The last index of the tile to be set for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollisionBetween: function (start, stop, collides, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetCollisionBetween(start, stop, collides, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking tile properties. If a tile has a property\r\n     * that matches the given properties object, its collision flag will be set. The `collides`\r\n     * parameter controls if collision will be enabled (true) or disabled (false). Passing in\r\n     * `{ collides: true }` would update the collision flag on any tiles with a \"collides\" property that\r\n     * has a value of true. Any tile that doesn't have \"collides\" set to true will be ignored. You can\r\n     * also use an array of values, e.g. `{ types: [\"stone\", \"lava\", \"sand\" ] }`. If a tile has a\r\n     * \"types\" property that matches any of those values, its collision flag will be updated.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setCollisionByProperty\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} properties - An object with tile properties and corresponding values that should be checked.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollisionByProperty: function (properties, collides, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetCollisionByProperty(properties, collides, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on all tiles in the given layer, except for tiles that have an index specified in\r\n     * the given array. The `collides` parameter controls if collision will be enabled (true) or\r\n     * disabled (false).\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setCollisionByExclusion\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer[]} indexes - An array of the tile indexes to not be counted for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollisionByExclusion: function (indexes, collides, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetCollisionByExclusion(indexes, collides, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking each tile's collision group data\r\n     * (typically defined in Tiled within the tileset collision editor). If any objects are found within\r\n     * a tile's collision group, the tile's colliding information will be set. The `collides` parameter\r\n     * controls if collision will be enabled (true) or disabled (false).\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setCollisionFromCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollisionFromCollisionGroup: function (collides, recalculateFaces, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetCollisionFromCollisionGroup(collides, recalculateFaces, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a global collision callback for the given tile index within the layer. This will affect all\r\n     * tiles on this layer that have the same index. If a callback is already set for the tile index it\r\n     * will be replaced. Set the callback to null to remove it. If you want to set a callback for a tile\r\n     * at a specific location on the map then see setTileLocationCallback.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setTileIndexCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes to have a collision callback set for.\r\n     * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} callbackContext - The context under which the callback is called.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setTileIndexCallback: function (indexes, callback, callbackContext, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetTileIndexCallback(indexes, callback, callbackContext, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a collision callback for the given rectangular area (in tile coordinates) within the layer.\r\n     * If a callback is already set for the tile index it will be replaced. Set the callback to null to\r\n     * remove it.\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setTileLocationCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} tileY - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} width - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} height - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} [callbackContext] - The context under which the callback is called.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setTileLocationCallback: function (tileX, tileY, width, height, callback, callbackContext, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SetTileLocationCallback(tileX, tileY, width, height, callback, callbackContext, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the current layer to the LayerData associated with `layer`.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setLayer\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The name of the\r\n     * layer from Tiled, the index of the layer in the map, a DynamicTilemapLayer or a\r\n     * StaticTilemapLayer. If not given will default to the map's current layer index.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tilemap} This Tilemap object.\r\n     */\r\n    setLayer: function (layer)\r\n    {\r\n        var index = this.getLayerIndex(layer);\r\n\r\n        if (index !== null)\r\n        {\r\n            this.currentLayerIndex = index;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the base tile size for the map. Note: this does not necessarily match the tileWidth and\r\n     * tileHeight for all layers. This also updates the base size on all tiles across all layers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setBaseTileSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileWidth - The width of the tiles the map uses for calculations.\r\n     * @param {integer} tileHeight - The height of the tiles the map uses for calculations.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tilemap} This Tilemap object.\r\n     */\r\n    setBaseTileSize: function (tileWidth, tileHeight)\r\n    {\r\n        this.tileWidth = tileWidth;\r\n        this.tileHeight = tileHeight;\r\n        this.widthInPixels = this.width * tileWidth;\r\n        this.heightInPixels = this.height * tileHeight;\r\n\r\n        // Update the base tile size on all layers & tiles\r\n        for (var i = 0; i < this.layers.length; i++)\r\n        {\r\n            this.layers[i].baseTileWidth = tileWidth;\r\n            this.layers[i].baseTileHeight = tileHeight;\r\n\r\n            var mapData = this.layers[i].data;\r\n            var mapWidth = this.layers[i].width;\r\n            var mapHeight = this.layers[i].height;\r\n\r\n            for (var row = 0; row < mapHeight; row++)\r\n            {\r\n                for (var col = 0; col < mapWidth; col++)\r\n                {\r\n                    var tile = mapData[row][col];\r\n\r\n                    if (tile !== null)\r\n                    {\r\n                        tile.setSize(undefined, undefined, tileWidth, tileHeight);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the tile size for a specific `layer`. Note: this does not necessarily match the map's\r\n     * tileWidth and tileHeight for all layers. This will set the tile size for the layer and any\r\n     * tiles the layer has.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#setLayerTileSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileWidth - The width of the tiles (in pixels) in the layer.\r\n     * @param {integer} tileHeight - The height of the tiles (in pixels) in the layer.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The name of the\r\n     * layer from Tiled, the index of the layer in the map, a DynamicTilemapLayer or a\r\n     * StaticTilemapLayer. If not given will default to the map's current layer index.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tilemap} This Tilemap object.\r\n     */\r\n    setLayerTileSize: function (tileWidth, tileHeight, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return this; }\r\n\r\n        layer.tileWidth = tileWidth;\r\n        layer.tileHeight = tileHeight;\r\n\r\n        var mapData = layer.data;\r\n        var mapWidth = layer.width;\r\n        var mapHeight = layer.height;\r\n\r\n        for (var row = 0; row < mapHeight; row++)\r\n        {\r\n            for (var col = 0; col < mapWidth; col++)\r\n            {\r\n                var tile = mapData[row][col];\r\n\r\n                if (tile !== null)\r\n                {\r\n                    tile.setSize(tileWidth, tileHeight);\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuffles the tiles in a rectangular region (specified in tile coordinates) within the given\r\n     * layer. It will only randomize the tiles in that area, so if they're all the same nothing will\r\n     * appear to have changed! This method only modifies tile indexes and does not change collision\r\n     * information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#shuffle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    shuffle: function (tileX, tileY, width, height, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'shuffle')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.Shuffle(tileX, tileY, width, height, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n     * `indexA` and swaps then with `indexB`. This only modifies the index and does not change collision\r\n     * information.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     * This cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#swapByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileA - First tile index.\r\n     * @param {integer} tileB - Second tile index.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    swapByIndex: function (indexA, indexB, tileX, tileY, width, height, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'swapByIndex')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.SwapByIndex(indexA, indexB, tileX, tileY, width, height, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Converts from tile X coordinates (tile units) to world X coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#tileToWorldX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?number} Returns a number, or null if the layer given was invalid.\r\n     */\r\n    tileToWorldX: function (tileX, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.TileToWorldX(tileX, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile Y coordinates (tile units) to world Y coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#tileToWorldY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer\r\n     * to use. If not given the current layer is used.\r\n     *\r\n     * @return {?number} Returns a number, or null if the layer given was invalid.\r\n     */\r\n    tileToWorldY: function (tileX, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.TileToWorldY(tileX, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile XY coordinates (tile units) to world XY coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#tileToWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Math.Vector2} Returns a point, or null if the layer given was invalid.\r\n     */\r\n    tileToWorldXY: function (tileX, tileY, point, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.TileToWorldXY(tileX, tileY, point, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n     * specified layer. Each tile will receive a new index. New indexes are drawn from the given\r\n     * weightedIndexes array. An example weighted array:\r\n     *\r\n     * [\r\n     *  { index: 6, weight: 4 },    // Probability of index 6 is 4 / 8\r\n     *  { index: 7, weight: 2 },    // Probability of index 7 would be 2 / 8\r\n     *  { index: 8, weight: 1.5 },  // Probability of index 8 would be 1.5 / 8\r\n     *  { index: 26, weight: 0.5 }  // Probability of index 27 would be 0.5 / 8\r\n     * ]\r\n     *\r\n     * The probability of any index being choose is (the index's weight) / (sum of all weights). This\r\n     * method only modifies tile indexes and does not change collision information.\r\n     *\r\n     * If no layer specified, the map's current layer is used. This\r\n     * cannot be applied to StaticTilemapLayers.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#weightedRandomize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {object[]} [weightedIndexes] - An array of objects to randomly draw from during\r\n     * randomization. They should be in the form: { index: 0, weight: 4 } or\r\n     * { index: [0, 1], weight: 4 } if you wish to draw from multiple tile indexes.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    weightedRandomize: function (tileX, tileY, width, height, weightedIndexes, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (this._isStaticCall(layer, 'weightedRandomize')) { return this; }\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        TilemapComponents.WeightedRandomize(tileX, tileY, width, height, weightedIndexes, layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Converts from world X coordinates (pixels) to tile X coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#worldToTileX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer\r\n     * to use. If not given the current layer is used.\r\n     *\r\n     * @return {?number} Returns a number, or null if the layer given was invalid.\r\n     */\r\n    worldToTileX: function (worldX, snapToFloor, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.WorldToTileX(worldX, snapToFloor, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world Y coordinates (pixels) to tile Y coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#worldToTileY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?number} Returns a number, or null if the layer given was invalid.\r\n     */\r\n    worldToTileY: function (worldY, snapToFloor, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.WorldToTileY(worldY, snapToFloor, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world XY coordinates (pixels) to tile XY coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * If no layer specified, the maps current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#worldToTileXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n     * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     * @param {(string|integer|Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)} [layer] - The tile layer to use. If not given the current layer is used.\r\n     *\r\n     * @return {?Phaser.Math.Vector2} Returns a point, or null if the layer given was invalid.\r\n     */\r\n    worldToTileXY: function (worldX, worldY, snapToFloor, point, camera, layer)\r\n    {\r\n        layer = this.getLayer(layer);\r\n\r\n        if (layer === null) { return null; }\r\n\r\n        return TilemapComponents.WorldToTileXY(worldX, worldY, snapToFloor, point, camera, layer);\r\n    },\r\n\r\n    /**\r\n     * Used internally to check if a layer is static and prints out a warning.\r\n     *\r\n     * @method Phaser.Tilemaps.Tilemap#_isStaticCall\r\n     * @private\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean}\r\n     */\r\n    _isStaticCall: function (layer, functionName)\r\n    {\r\n        if (layer.tilemapLayer instanceof StaticTilemapLayer)\r\n        {\r\n            console.warn(functionName + ': You cannot change the tiles in a static tilemap layer');\r\n            return true;\r\n        }\r\n        else\r\n        {\r\n            return false;\r\n        }\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Tilemap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlbWFwLmpzP2M0NDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLG9FQUFrQjtBQUN6QywwQkFBMEIsbUJBQU8sQ0FBQyxrSEFBb0M7QUFDdEUsYUFBYSxtQkFBTyxDQUFDLGdGQUF3QjtBQUM3QyxjQUFjLG1CQUFPLENBQUMsZ0VBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsb0ZBQXFCO0FBQzdDLGFBQWEsbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsb0ZBQTBCO0FBQ2xELHlCQUF5QixtQkFBTyxDQUFDLDhHQUFrQztBQUNuRSxXQUFXLG1CQUFPLENBQUMsMERBQVE7QUFDM0Isd0JBQXdCLG1CQUFPLENBQUMsNEVBQWM7QUFDOUMsY0FBYyxtQkFBTyxDQUFDLGdFQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSxZQUFZLFFBQVE7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsYUFBYTtBQUNyRCxnREFBZ0QsbUJBQW1COztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNDQUFzQyw0QkFBNEI7QUFDbEUsdUNBQXVDLDhCQUE4QjtBQUNyRSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZELHdDQUF3QyxpQkFBaUI7QUFDekQsZ0NBQWdDLFNBQVM7O0FBRXpDOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscURBQXFEO0FBQ3BFO0FBQ0E7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsYUFBYTs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9FQUFvRTtBQUNuRixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsa0NBQWtDLG9CQUFvQjtBQUN0RCxtQ0FBbUMsc0JBQXNCO0FBQ3pELHNDQUFzQyw0QkFBNEI7QUFDbEUsdUNBQXVDLDhCQUE4Qjs7QUFFckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTs7QUFFQSwrQkFBK0IsZUFBZTtBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsb0VBQW9FO0FBQ25GLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IscUNBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0RBQWdEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG1CQUFtQjtBQUM1RCxrQ0FBa0Msb0JBQW9COztBQUV0RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBOztBQUVBOztBQUVBOztBQUVBLGdDQUFnQyxpQ0FBaUM7QUFDakUsaUNBQWlDLG1DQUFtQzs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyx3QkFBd0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVELGVBQWUsYUFBYTtBQUM1QixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxvRUFBb0U7QUFDbkYsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHNEQUFzRCwwQkFBMEI7QUFDaEYsc0RBQXNELDBCQUEwQjs7QUFFaEY7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQyxnREFBZ0QsYUFBYTs7QUFFN0Q7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQztBQUNwRCxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHVDQUF1QztBQUN0RCxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQztBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDO0FBQ3BELGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHVDQUF1QztBQUN0RCxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdGQUF3RjtBQUN2RztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlGQUFpRjtBQUNoRyxlQUFlLHVDQUF1QztBQUN0RCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLHVDQUF1QztBQUN0RCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRCxhQUFhOztBQUVsRSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBNEQsYUFBYTs7QUFFekUsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0VBQXdFO0FBQ3ZGLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBc0QsYUFBYTs7QUFFbkUsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFVBQVU7QUFDekIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRCxhQUFhOztBQUVsRSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix3QkFBd0I7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0QsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG1CQUFtQjtBQUM1RCw2Q0FBNkMseUJBQXlCOztBQUV0RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdEQUF3RCxhQUFhOztBQUVyRSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrREFBK0QsYUFBYTs7QUFFNUUsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxrQ0FBa0M7QUFDakQsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLGtDQUFrQztBQUNqRCxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQsYUFBYTs7QUFFdkUsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkcsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlCQUFpQjtBQUMxQjtBQUNBLDJDQUEyQyxvQ0FBb0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsaUJBQWlCO0FBQzlDO0FBQ0EsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdGQUF3RjtBQUN2RztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsaUJBQWlCO0FBQzFDO0FBQ0EsNkJBQTZCLGdCQUFnQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQsYUFBYTs7QUFFaEUsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVEQUF1RCxhQUFhOztBQUVwRSw2QkFBNkIsYUFBYTs7QUFFMUM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQztBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGFBQWE7O0FBRTFDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHlCQUF5QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QixtREFBbUQsc0JBQXNCO0FBQ3pFLFFBQVEsMkJBQTJCO0FBQ25DLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQsYUFBYTs7QUFFMUUsNkJBQTZCLGFBQWE7O0FBRTFDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsd0ZBQXdGO0FBQ3ZHO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSx3RkFBd0Y7QUFDdkc7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixhQUFhOztBQUUxQztBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL1RpbGVtYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEZWdUb1JhZCA9IHJlcXVpcmUoJy4uL21hdGgvRGVnVG9SYWQnKTtcclxudmFyIER5bmFtaWNUaWxlbWFwTGF5ZXIgPSByZXF1aXJlKCcuL2R5bmFtaWNsYXllci9EeW5hbWljVGlsZW1hcExheWVyJyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcbnZhciBGb3JtYXRzID0gcmVxdWlyZSgnLi9Gb3JtYXRzJyk7XHJcbnZhciBMYXllckRhdGEgPSByZXF1aXJlKCcuL21hcGRhdGEvTGF5ZXJEYXRhJyk7XHJcbnZhciBSb3RhdGUgPSByZXF1aXJlKCcuLi9tYXRoL1JvdGF0ZScpO1xyXG52YXIgU3BsaWNlT25lID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvU3BsaWNlT25lJyk7XHJcbnZhciBTdGF0aWNUaWxlbWFwTGF5ZXIgPSByZXF1aXJlKCcuL3N0YXRpY2xheWVyL1N0YXRpY1RpbGVtYXBMYXllcicpO1xyXG52YXIgVGlsZSA9IHJlcXVpcmUoJy4vVGlsZScpO1xyXG52YXIgVGlsZW1hcENvbXBvbmVudHMgPSByZXF1aXJlKCcuL2NvbXBvbmVudHMnKTtcclxudmFyIFRpbGVzZXQgPSByZXF1aXJlKCcuL1RpbGVzZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgVGlsZW1hcEZpbHRlckNhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHZhbHVlIC0gQW4gb2JqZWN0IGZvdW5kIGluIHRoZSBmaWx0ZXJlZCBhcmVhLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIG9iamVjdCB3aXRoaW4gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGFycmF5IC0gQW4gYXJyYXkgb2YgYWxsIHRoZSBvYmplY3RzIGZvdW5kLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIG9iamVjdC5cclxuICovXHJcblxyXG4vKipcclxuICogQGNhbGxiYWNrIFRpbGVtYXBGaW5kQ2FsbGJhY2tcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gdmFsdWUgLSBBbiBvYmplY3QgZm91bmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IHdpdGhpbiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gYXJyYXkgLSBBbiBhcnJheSBvZiBhbGwgdGhlIG9iamVjdHMgZm91bmQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGlsZW1hcCBpcyBhIGNvbnRhaW5lciBmb3IgVGlsZW1hcCBkYXRhLiBUaGlzIGlzbid0IGEgZGlzcGxheSBvYmplY3QsIHJhdGhlciwgaXQgaG9sZHMgZGF0YVxyXG4gKiBhYm91dCB0aGUgbWFwIGFuZCBhbGxvd3MgeW91IHRvIGFkZCB0aWxlc2V0cyBhbmQgdGlsZW1hcCBsYXllcnMgdG8gaXQuIEEgbWFwIGNhbiBoYXZlIG9uZSBvclxyXG4gKiBtb3JlIHRpbGVtYXAgbGF5ZXJzIChTdGF0aWNUaWxlbWFwTGF5ZXIgb3IgRHluYW1pY1RpbGVtYXBMYXllciksIHdoaWNoIGFyZSB0aGUgZGlzcGxheVxyXG4gKiBvYmplY3RzIHRoYXQgYWN0dWFsbHkgcmVuZGVyIHRpbGVzLlxyXG4gKlxyXG4gKiBUaGUgVGlsZW1hcCBkYXRhIGJlIHBhcnNlZCBmcm9tIGEgVGlsZWQgSlNPTiBmaWxlLCBhIENTViBmaWxlIG9yIGEgMkQgYXJyYXkuIFRpbGVkIGlzIGEgZnJlZVxyXG4gKiBzb2Z0d2FyZSBwYWNrYWdlIHNwZWNpZmljYWxseSBmb3IgY3JlYXRpbmcgdGlsZSBtYXBzLCBhbmQgaXMgYXZhaWxhYmxlIGZyb206XHJcbiAqIGh0dHA6Ly93d3cubWFwZWRpdG9yLm9yZ1xyXG4gKlxyXG4gKiBBIFRpbGVtYXAgaGFzIGhhbmR5IG1ldGhvZHMgZm9yIGdldHRpbmcgJiBtYW5pcHVsYXRpbmcgdGhlIHRpbGVzIHdpdGhpbiBhIGxheWVyLiBZb3UgY2FuIG9ubHlcclxuICogdXNlIHRoZSBtZXRob2RzIHRoYXQgY2hhbmdlIHRpbGVzIChlLmcuIHJlbW92ZVRpbGVBdCkgb24gYSBEeW5hbWljVGlsZW1hcExheWVyLlxyXG4gKlxyXG4gKiBOb3RlIHRoYXQgYWxsIFRpbGVtYXBzIHVzZSBhIGJhc2UgdGlsZSBzaXplIHRvIGNhbGN1bGF0ZSBkaW1lbnNpb25zIGZyb20sIGJ1dCB0aGF0IGFcclxuICogU3RhdGljVGlsZW1hcExheWVyIG9yIER5bmFtaWNUaWxlbWFwTGF5ZXIgbWF5IGhhdmUgaXRzIG93biB1bmlxdWUgdGlsZSBzaXplIHRoYXQgb3ZlcnJpZGVzXHJcbiAqIGl0LlxyXG4gKlxyXG4gKiBBcyBvZiBQaGFzZXIgMy4yMS4wLCBpZiB5b3VyIHRpbGVtYXAgaW5jbHVkZXMgbGF5ZXIgZ3JvdXBzIChhIGZlYXR1cmUgb2YgVGlsZWQgMS4yLjArKSB0aGVzZVxyXG4gKiB3aWxsIGJlIHRyYXZlcnNlZCBhbmQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdpbGwgYWZmZWN0IGNoaWxkcmVuOlxyXG4gKiAtIG9wYWNpdHkgKGJsZW5kZWQgd2l0aCBwYXJlbnQpIGFuZCB2aXNpYmlsaXR5IChwYXJlbnQgb3ZlcnJpZGVzIGNoaWxkKVxyXG4gKiAtIFZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG9mZnNldFxyXG4gKiBUaGUgZ3JvdXBpbmcgaGllcmFyY2h5IGlzIG5vdCBwcmVzZXJ2ZWQgYW5kIGFsbCBsYXllcnMgd2lsbCBiZSBmbGF0dGVuZWQgaW50byBhIHNpbmdsZSBhcnJheS5cclxuICogR3JvdXAgbGF5ZXJzIGFyZSBwYXJzZWQgZHVyaW5nIFRpbGVtYXAgY29uc3RydWN0aW9uIGJ1dCBhcmUgZGlzY2FyZGVkIGFmdGVyIHBhcnNpbmcgc28gZHluYW1pY1xyXG4gKiBsYXllcnMgd2lsbCBOT1QgY29udGludWUgdG8gYmUgYWZmZWN0ZWQgYnkgYSBwYXJlbnQuXHJcbiAqXHJcbiAqIFRvIGF2b2lkIGR1cGxpY2F0ZSBsYXllciBuYW1lcywgYSBsYXllciB0aGF0IGlzIGEgY2hpbGQgb2YgYSBncm91cCBsYXllciB3aWxsIGhhdmUgaXRzIHBhcmVudFxyXG4gKiBncm91cCBuYW1lIHByZXBlbmRlZCB3aXRoIGEgJy8nLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZ3JvdXAgY2FsbGVkICdQYXJlbnRHcm91cCcgd2l0aCBhXHJcbiAqIGNoaWxkIGNhbGxlZCAnTGF5ZXIgMScuIEluIHRoZSBUaWxlbWFwIG9iamVjdCwgJ0xheWVyIDEnIHdpbGwgaGF2ZSB0aGUgbmFtZVxyXG4gKiAnUGFyZW50R3JvdXAvTGF5ZXIgMScuXHJcbiAqXHJcbiAqIEBjbGFzcyBUaWxlbWFwXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVGlsZW1hcHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBUaWxlbWFwIGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLk1hcERhdGF9IG1hcERhdGEgLSBBIE1hcERhdGEgaW5zdGFuY2UgY29udGFpbmluZyBUaWxlbWFwIGRhdGEuXHJcbiAqL1xyXG52YXIgVGlsZW1hcCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlbWFwIChzY2VuZSwgbWFwRGF0YSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYmFzZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLiBOb3RlIHRoYXQgaW5kaXZpZHVhbCBsYXllcnMgbWF5IGhhdmUgYSBkaWZmZXJlbnQgdGlsZVxyXG4gICAgICAgICAqIHdpZHRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjdGlsZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlV2lkdGggPSBtYXBEYXRhLnRpbGVXaWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJhc2UgaGVpZ2h0IG9mIGEgdGlsZSBpbiBwaXhlbHMuIE5vdGUgdGhhdCBpbmRpdmlkdWFsIGxheWVycyBtYXkgaGF2ZSBhIGRpZmZlcmVudFxyXG4gICAgICAgICAqIHRpbGUgaGVpZ2h0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjdGlsZUhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZUhlaWdodCA9IG1hcERhdGEudGlsZUhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBtYXAgKGluIHRpbGVzKS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gbWFwRGF0YS53aWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgbWFwIChpbiB0aWxlcykuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbWFwRGF0YS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbWFwIGRhdGEgKGFzIHNwZWNpZmllZCBpbiBUaWxlZCksIHVzdWFsbHkgJ29ydGhvZ29uYWwnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjb3JpZW50YXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3JpZW50YXRpb24gPSBtYXBEYXRhLm9yaWVudGF0aW9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyIChkcmF3KSBvcmRlciBvZiB0aGUgbWFwIGRhdGEgKGFzIHNwZWNpZmllZCBpbiBUaWxlZCksIHVzdWFsbHkgJ3JpZ2h0LWRvd24nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRyYXcgb3JkZXJzIGFyZTpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIHJpZ2h0LWRvd25cclxuICAgICAgICAgKiBsZWZ0LWRvd25cclxuICAgICAgICAgKiByaWdodC11cFxyXG4gICAgICAgICAqIGxlZnQtdXBcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgY2FuIGJlIGNoYW5nZWQgdmlhIHRoZSBgc2V0UmVuZGVyT3JkZXJgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3JlbmRlck9yZGVyXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJPcmRlciA9IG1hcERhdGEucmVuZGVyT3JkZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIG1hcCBkYXRhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZm9ybWF0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvcm1hdCA9IG1hcERhdGEuZm9ybWF0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgbWFwIGRhdGEgKGFzIHNwZWNpZmllZCBpbiBUaWxlZCwgdXN1YWxseSAxKS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3ZlcnNpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG1hcERhdGEudmVyc2lvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWFwIHNwZWNpZmljIHByb3BlcnRpZXMgYXMgc3BlY2lmaWVkIGluIFRpbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjcHJvcGVydGllc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gbWFwRGF0YS5wcm9wZXJ0aWVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG1hcCBpbiBwaXhlbHMgYmFzZWQgb24gd2lkdGggKiB0aWxlV2lkdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCN3aWR0aEluUGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoSW5QaXhlbHMgPSBtYXBEYXRhLndpZHRoSW5QaXhlbHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG1hcCBpbiBwaXhlbHMgYmFzZWQgb24gaGVpZ2h0ICogdGlsZUhlaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2hlaWdodEluUGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodEluUGl4ZWxzID0gbWFwRGF0YS5oZWlnaHRJblBpeGVscztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNpbWFnZUNvbGxlY3Rpb25zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5JbWFnZUNvbGxlY3Rpb25bXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlQ29sbGVjdGlvbnMgPSBtYXBEYXRhLmltYWdlQ29sbGVjdGlvbnM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFRpbGVkIEltYWdlIExheWVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2ltYWdlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlcyA9IG1hcERhdGEuaW1hZ2VzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBUaWxlbWFwIGxheWVyIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNsYXllcnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGF5ZXJzID0gbWFwRGF0YS5sYXllcnM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFRpbGVzZXRzIHVzZWQgaW4gdGhlIG1hcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3RpbGVzZXRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5UaWxlc2V0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlc2V0cyA9IG1hcERhdGEudGlsZXNldHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIE9iamVjdExheWVyIGluc3RhbmNlcyBwYXJzZWQgZnJvbSBUaWxlZCBvYmplY3QgbGF5ZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjb2JqZWN0c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXJbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9iamVjdHMgPSBtYXBEYXRhLm9iamVjdHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIExheWVyRGF0YSBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjdXJyZW50TGF5ZXJJbmRleFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudExheWVySW5kZXggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJlbmRlcmluZyAoZHJhdykgb3JkZXIgb2YgdGhlIHRpbGVzIGluIHRoaXMgbWFwLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkZWZhdWx0IGlzICdyaWdodC1kb3duJywgbWVhbmluZyBpdCB3aWxsIG9yZGVyIHRoZSB0aWxlcyBzdGFydGluZyBmcm9tIHRoZSB0b3AtbGVmdCxcclxuICAgICAqIGRyYXdpbmcgdG8gdGhlIHJpZ2h0IGFuZCB0aGVuIG1vdmluZyBkb3duIHRvIHRoZSBuZXh0IHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZHJhdyBvcmRlcnMgYXJlOlxyXG4gICAgICpcclxuICAgICAqIDAgPSByaWdodC1kb3duXHJcbiAgICAgKiAxID0gbGVmdC1kb3duXHJcbiAgICAgKiAyID0gcmlnaHQtdXBcclxuICAgICAqIDMgPSBsZWZ0LXVwXHJcbiAgICAgKlxyXG4gICAgICogU2V0dGluZyB0aGUgcmVuZGVyIG9yZGVyIGRvZXMgbm90IGNoYW5nZSB0aGUgdGlsZXMgb3IgaG93IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgbGF5ZXIsXHJcbiAgICAgKiBpdCBwdXJlbHkgaW1wYWN0cyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgcmVuZGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBwcm92aWRlIGVpdGhlciBhbiBpbnRlZ2VyICgwIHRvIDMpLCBvciB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIG9yZGVyLlxyXG4gICAgICpcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgX2FmdGVyXyBjcmVhdGluZyBTdGF0aWMgb3IgRHluYW1pYyBUaWxlbWFwIExheWVycyB3aWxsICoqbm90KiogYXV0b21hdGljYWxseVxyXG4gICAgICogdXBkYXRlIHRoZW0gdG8gdXNlIHRoZSBuZXcgcmVuZGVyIG9yZGVyLiBJZiB5b3UgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciBjcmVhdGluZyBsYXllcnMsIHVzZSB0aGVpclxyXG4gICAgICogb3duIGBzZXRSZW5kZXJPcmRlcmAgbWV0aG9kcyB0byBjaGFuZ2UgdGhlbSBhcyBuZWVkZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNzZXRSZW5kZXJPcmRlclxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8c3RyaW5nKX0gcmVuZGVyT3JkZXIgLSBUaGUgcmVuZGVyIChkcmF3KSBvcmRlciB2YWx1ZS4gRWl0aGVyIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAzLCBvciBhIHN0cmluZzogJ3JpZ2h0LWRvd24nLCAnbGVmdC1kb3duJywgJ3JpZ2h0LXVwJyBvciAnbGVmdC11cCcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlbWFwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmVuZGVyT3JkZXI6IGZ1bmN0aW9uIChyZW5kZXJPcmRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgb3JkZXJzID0gWyAncmlnaHQtZG93bicsICdsZWZ0LWRvd24nLCAncmlnaHQtdXAnLCAnbGVmdC11cCcgXTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiByZW5kZXJPcmRlciA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJPcmRlciA9IG9yZGVyc1tyZW5kZXJPcmRlcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3JkZXJzLmluZGV4T2YocmVuZGVyT3JkZXIpID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlck9yZGVyID0gcmVuZGVyT3JkZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGltYWdlIHRvIHRoZSBtYXAgdG8gYmUgdXNlZCBhcyBhIHRpbGVzZXQuIEEgc2luZ2xlIG1hcCBtYXkgdXNlIG11bHRpcGxlIHRpbGVzZXRzLlxyXG4gICAgICogTm90ZSB0aGF0IHRoZSB0aWxlc2V0IG5hbWUgY2FuIGJlIGZvdW5kIGluIHRoZSBKU09OIGZpbGUgZXhwb3J0ZWQgZnJvbSBUaWxlZCwgb3IgaW4gdGhlIFRpbGVkXHJcbiAgICAgKiBlZGl0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNhZGRUaWxlc2V0SW1hZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aWxlc2V0TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0aWxlc2V0IGFzIHNwZWNpZmllZCBpbiB0aGUgbWFwIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUga2V5IG9mIHRoZSBQaGFzZXIuQ2FjaGUgaW1hZ2UgdXNlZCBmb3IgdGhpcyB0aWxlc2V0LiBJZlxyXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHdpbGwgbG9vayBmb3IgYW4gaW1hZ2Ugd2l0aCBhIGtleSBtYXRjaGluZyB0aGUgdGlsZXNldE5hbWUgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVdpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgdGlsZSAoaW4gcGl4ZWxzKSBpbiB0aGUgVGlsZXNldCBJbWFnZS4gSWYgbm90XHJcbiAgICAgKiBnaXZlbiBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIG1hcCdzIHRpbGVXaWR0aCB2YWx1ZSwgb3IgdGhlIHRpbGVXaWR0aCBzcGVjaWZpZWQgaW4gdGhlIFRpbGVkXHJcbiAgICAgKiBKU09OIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlSGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGVzIChpbiBwaXhlbHMpIGluIHRoZSBUaWxlc2V0IEltYWdlLiBJZlxyXG4gICAgICogbm90IGdpdmVuIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgbWFwJ3MgdGlsZUhlaWdodCB2YWx1ZSwgb3IgdGhlIHRpbGVIZWlnaHQgc3BlY2lmaWVkIGluIHRoZVxyXG4gICAgICogVGlsZWQgSlNPTiBmaWxlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZU1hcmdpbl0gLSBUaGUgbWFyZ2luIGFyb3VuZCB0aGUgdGlsZXMgaW4gdGhlIHNoZWV0IChpbiBwaXhlbHMpLiBJZiBub3RcclxuICAgICAqIHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIDAgb3IgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiB0aGUgVGlsZWQgSlNPTiBmaWxlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVNwYWNpbmddIC0gVGhlIHNwYWNpbmcgYmV0d2VlbiBlYWNoIHRoZSB0aWxlIGluIHRoZSBzaGVldCAoaW4gcGl4ZWxzKS5cclxuICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0byAwIG9yIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIFRpbGVkIEpTT04gZmlsZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2dpZD0wXSAtIElmIGFkZGluZyBtdWx0aXBsZSB0aWxlc2V0cyB0byBhIGJsYW5rIG1hcCwgc3BlY2lmeSB0aGUgc3RhcnRpbmdcclxuICAgICAqIEdJRCB0aGlzIHNldCB3aWxsIHVzZSBoZXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZXNldH0gUmV0dXJucyB0aGUgVGlsZXNldCBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZCBvciB1cGRhdGVkLCBvciBudWxsIGlmIGl0XHJcbiAgICAgKiBmYWlsZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZFRpbGVzZXRJbWFnZTogZnVuY3Rpb24gKHRpbGVzZXROYW1lLCBrZXksIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgdGlsZU1hcmdpbiwgdGlsZVNwYWNpbmcsIGdpZClcclxuICAgIHtcclxuICAgICAgICBpZiAodGlsZXNldE5hbWUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHsga2V5ID0gdGlsZXNldE5hbWU7IH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNjZW5lLnN5cy50ZXh0dXJlcy5leGlzdHMoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBUaWxlc2V0IEltYWdlOiAnICsga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldChrZXkpO1xyXG5cclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldFRpbGVzZXRJbmRleCh0aWxlc2V0TmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gbnVsbCAmJiB0aGlzLmZvcm1hdCA9PT0gRm9ybWF0cy5USUxFRF9KU09OKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBkYXRhIGZvdW5kIGZvciBUaWxlc2V0OiAnICsgdGlsZXNldE5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aWxlc2V0ID0gdGhpcy50aWxlc2V0c1tpbmRleF07XHJcblxyXG4gICAgICAgIGlmICh0aWxlc2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGlsZXNldC5zZXRUaWxlU2l6ZSh0aWxlV2lkdGgsIHRpbGVIZWlnaHQpO1xyXG4gICAgICAgICAgICB0aWxlc2V0LnNldFNwYWNpbmcodGlsZU1hcmdpbiwgdGlsZVNwYWNpbmcpO1xyXG4gICAgICAgICAgICB0aWxlc2V0LnNldEltYWdlKHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRpbGVzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGlsZVdpZHRoID09PSB1bmRlZmluZWQpIHsgdGlsZVdpZHRoID0gdGhpcy50aWxlV2lkdGg7IH1cclxuICAgICAgICBpZiAodGlsZUhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHRpbGVIZWlnaHQgPSB0aGlzLnRpbGVIZWlnaHQ7IH1cclxuICAgICAgICBpZiAodGlsZU1hcmdpbiA9PT0gdW5kZWZpbmVkKSB7IHRpbGVNYXJnaW4gPSAwOyB9XHJcbiAgICAgICAgaWYgKHRpbGVTcGFjaW5nID09PSB1bmRlZmluZWQpIHsgdGlsZVNwYWNpbmcgPSAwOyB9XHJcbiAgICAgICAgaWYgKGdpZCA9PT0gdW5kZWZpbmVkKSB7IGdpZCA9IDA7IH1cclxuXHJcbiAgICAgICAgdGlsZXNldCA9IG5ldyBUaWxlc2V0KHRpbGVzZXROYW1lLCBnaWQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgdGlsZU1hcmdpbiwgdGlsZVNwYWNpbmcpO1xyXG5cclxuICAgICAgICB0aWxlc2V0LnNldEltYWdlKHRleHR1cmUpO1xyXG5cclxuICAgICAgICB0aGlzLnRpbGVzZXRzLnB1c2godGlsZXNldCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aWxlc2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR1cm5zIHRoZSBEeW5hbWljVGlsZW1hcExheWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIgaW50byBhIFN0YXRpY1RpbGVtYXBMYXllci4gSWZcclxuICAgICAqIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbWFuaXB1bGF0ZVxyXG4gICAgICogYSBtYXAgYXQgdGhlIHN0YXJ0IG9mIGEgc2NlbmUsIGJ1dCB0aGVuIG1ha2UgaXQgbm9uLW1hbmlwdWxhYmxlIGFuZCBvcHRpbWl6ZSBpdCBmb3Igc3BlZWQuXHJcbiAgICAgKiBOb3RlOiB0aGUgRHluYW1pY1RpbGVtYXBMYXllciBwYXNzZWQgaW4gaXMgZGVzdHJveWVkLCBzbyBtYWtlIHN1cmUgdG8gc3RvcmUgdGhlIHZhbHVlXHJcbiAgICAgKiByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIGlmIHlvdSB3YW50IHRvIG1hbmlwdWxhdGUgdGhlIG5ldyBTdGF0aWNUaWxlbWFwTGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjb252ZXJ0TGF5ZXJUb1N0YXRpY1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIGZyb20gVGlsZWQsIHRoZVxyXG4gICAgICogaW5kZXggb2YgdGhlIGxheWVyIGluIHRoZSBtYXAsIG9yIGEgRHluYW1pY1RpbGVtYXBMYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gUmV0dXJucyB0aGUgbmV3IGxheWVyIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIG51bGwgaWYgaXRcclxuICAgICAqIGZhaWxlZC5cclxuICAgICAqL1xyXG4gICAgY29udmVydExheWVyVG9TdGF0aWM6IGZ1bmN0aW9uIChsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgdmFyIGR5bmFtaWNMYXllciA9IGxheWVyLnRpbGVtYXBMYXllcjtcclxuXHJcbiAgICAgICAgaWYgKCFkeW5hbWljTGF5ZXIgfHwgIShkeW5hbWljTGF5ZXIgaW5zdGFuY2VvZiBEeW5hbWljVGlsZW1hcExheWVyKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRpY0xheWVyID0gbmV3IFN0YXRpY1RpbGVtYXBMYXllcihcclxuICAgICAgICAgICAgZHluYW1pY0xheWVyLnNjZW5lLFxyXG4gICAgICAgICAgICBkeW5hbWljTGF5ZXIudGlsZW1hcCxcclxuICAgICAgICAgICAgZHluYW1pY0xheWVyLmxheWVySW5kZXgsXHJcbiAgICAgICAgICAgIGR5bmFtaWNMYXllci50aWxlc2V0LFxyXG4gICAgICAgICAgICBkeW5hbWljTGF5ZXIueCxcclxuICAgICAgICAgICAgZHluYW1pY0xheWVyLnlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5hZGQoc3RhdGljTGF5ZXIpO1xyXG5cclxuICAgICAgICBkeW5hbWljTGF5ZXIuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdGljTGF5ZXI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB0aWxlcyBpbiB0aGUgc291cmNlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gYSBuZXcgZGVzdGluYXRpb24gKGFsbCBzcGVjaWZpZWQgaW4gdGlsZVxyXG4gICAgICogY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGUgbGF5ZXIuIFRoaXMgY29waWVzIGFsbCB0aWxlIHByb3BlcnRpZXMgJiByZWNhbGN1bGF0ZXMgY29sbGlzaW9uXHJcbiAgICAgKiBpbmZvcm1hdGlvbiBpbiB0aGUgZGVzdGluYXRpb24gcmVnaW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC4gVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBTdGF0aWNUaWxlbWFwTGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzcmNUaWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGFyZWEgdG8gY29weSBmcm9tLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3JjVGlsZVkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgZnJvbSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIGNvcHksIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIHRvIGNvcHksIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkZXN0VGlsZVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgdG8sIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkZXN0VGlsZVkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgdG8sIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJucyB0aGlzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHNyY1RpbGVYLCBzcmNUaWxlWSwgd2lkdGgsIGhlaWdodCwgZGVzdFRpbGVYLCBkZXN0VGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1N0YXRpY0NhbGwobGF5ZXIsICdjb3B5JykpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgICAgICAgaWYgKGxheWVyICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuQ29weShcclxuICAgICAgICAgICAgICAgIHNyY1RpbGVYLCBzcmNUaWxlWSxcclxuICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkZXN0VGlsZVgsIGRlc3RUaWxlWSxcclxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgYW5kIGVtcHR5IER5bmFtaWNUaWxlbWFwTGF5ZXIuIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbGF5ZXIgaW4gdGhlIG1hcCBpcyBzZXQgdG8gdGhpcyBuZXcgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjcmVhdGVCbGFua0R5bmFtaWNMYXllclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGlzIGxheWVyLiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG1hcC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgd29ybGQgeCBwb3NpdGlvbiB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhpcyBsYXllciB3aWxsIGJlIHBsYWNlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB3b3JsZCB5IHBvc2l0aW9uIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGlzIGxheWVyIHdpbGwgYmUgcGxhY2VkLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBsYXllciBpbiB0aWxlcy4gSWYgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBtYXAncyB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBsYXllciBpbiB0aWxlcy4gSWYgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBtYXAncyBoZWlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlV2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSB0aWxlcyB0aGUgbGF5ZXIgdXNlcyBmb3IgY2FsY3VsYXRpb25zLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIG1hcCdzIHRpbGVXaWR0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgdGlsZXMgdGhlIGxheWVyIHVzZXMgZm9yIGNhbGN1bGF0aW9ucy4gSWYgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBtYXAncyB0aWxlSGVpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcn0gUmV0dXJucyB0aGUgbmV3IGxheWVyIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIGBudWxsYCBpZiBpdCBmYWlsZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUJsYW5rRHluYW1pY0xheWVyOiBmdW5jdGlvbiAobmFtZSwgdGlsZXNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSB0aGlzLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHRoaXMuaGVpZ2h0OyB9XHJcbiAgICAgICAgaWYgKHRpbGVXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHRpbGVXaWR0aCA9IHRoaXMudGlsZVdpZHRoOyB9XHJcbiAgICAgICAgaWYgKHRpbGVIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyB0aWxlSGVpZ2h0ID0gdGhpcy50aWxlSGVpZ2h0OyB9XHJcblxyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0TGF5ZXJJbmRleChuYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIFRpbGVtYXAgTGF5ZXIgSUQ6ICcgKyBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGF5ZXJEYXRhID0gbmV3IExheWVyRGF0YSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdpZHRoLFxyXG4gICAgICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlSGVpZ2h0LFxyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciByb3c7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHRpbGVZID0gMDsgdGlsZVkgPCBoZWlnaHQ7IHRpbGVZKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByb3cgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIHRpbGVYID0gMDsgdGlsZVggPCB3aWR0aDsgdGlsZVgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcm93LnB1c2gobmV3IFRpbGUobGF5ZXJEYXRhLCAtMSwgdGlsZVgsIHRpbGVZLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIHRoaXMudGlsZVdpZHRoLCB0aGlzLnRpbGVIZWlnaHQpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGF5ZXJEYXRhLmRhdGEucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXllcnMucHVzaChsYXllckRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRMYXllckluZGV4ID0gdGhpcy5sYXllcnMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgdmFyIGR5bmFtaWNMYXllciA9IG5ldyBEeW5hbWljVGlsZW1hcExheWVyKHRoaXMuc2NlbmUsIHRoaXMsIHRoaXMuY3VycmVudExheWVySW5kZXgsIHRpbGVzZXQsIHgsIHkpO1xyXG5cclxuICAgICAgICBkeW5hbWljTGF5ZXIuc2V0UmVuZGVyT3JkZXIodGhpcy5yZW5kZXJPcmRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmFkZChkeW5hbWljTGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gZHluYW1pY0xheWVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgRHluYW1pY1RpbGVtYXBMYXllciB0aGF0IHJlbmRlcnMgdGhlIExheWVyRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuXHJcbiAgICAgKiBgbGF5ZXJJRGAuIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbGF5ZXIgaW4gdGhlIG1hcCBpcyBzZXQgdG8gdGhpcyBuZXcgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGBsYXllcklEYCBpcyBpbXBvcnRhbnQuIElmIHlvdSd2ZSBjcmVhdGVkIHlvdXIgbWFwIGluIFRpbGVkIHRoZW4geW91IGNhbiBnZXQgdGhpcyBieVxyXG4gICAgICogbG9va2luZyBpbiBUaWxlZCBhbmQgbG9va2luZyBhdCB0aGUgbGF5ZXIgbmFtZS4gT3IgeW91IGNhbiBvcGVuIHRoZSBKU09OIGZpbGUgaXQgZXhwb3J0cyBhbmRcclxuICAgICAqIGxvb2sgYXQgdGhlIGxheWVyc1tdLm5hbWUgdmFsdWUuIEVpdGhlciB3YXkgaXQgbXVzdCBtYXRjaC5cclxuICAgICAqXHJcbiAgICAgKiBVbmxpa2UgYSBzdGF0aWMgbGF5ZXIsIGEgZHluYW1pYyBsYXllciBjYW4gYmUgbW9kaWZpZWQuIFNlZSBEeW5hbWljVGlsZW1hcExheWVyIGZvciBtb3JlXHJcbiAgICAgKiBpbmZvcm1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2NyZWF0ZUR5bmFtaWNMYXllclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSBsYXllcklEIC0gVGhlIGxheWVyIGFycmF5IGluZGV4IHZhbHVlLCBvciBpZiBhIHN0cmluZyBpcyBnaXZlbiwgdGhlIGxheWVyIG5hbWUgZnJvbSBUaWxlZC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBwbGFjZSB0aGUgbGF5ZXIgaW4gdGhlIHdvcmxkLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxheWVyIG9mZnNldCBmcm9tIFRpbGVkIG9yIDAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiB0byBwbGFjZSB0aGUgbGF5ZXIgaW4gdGhlIHdvcmxkLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxheWVyIG9mZnNldCBmcm9tIFRpbGVkIG9yIDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBSZXR1cm5zIHRoZSBuZXcgbGF5ZXIgd2FzIGNyZWF0ZWQsIG9yIG51bGwgaWYgaXQgZmFpbGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVEeW5hbWljTGF5ZXI6IGZ1bmN0aW9uIChsYXllcklELCB0aWxlc2V0LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0TGF5ZXJJbmRleChsYXllcklEKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIFRpbGVtYXAgTGF5ZXIgSUQ6ICcgKyBsYXllcklEKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGF5ZXJJRCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVmFsaWQgdGlsZWxheWVyIG5hbWVzOlxcblxcdCcgKyB0aGlzLmdldFRpbGVMYXllck5hbWVzKCkuam9pbignLFxcblxcdCcpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGF5ZXJEYXRhID0gdGhpcy5sYXllcnNbaW5kZXhdO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgYW4gYXNzb2NpYXRlZCBzdGF0aWMgb3IgZHluYW1pYyB0aWxlbWFwIGxheWVyXHJcbiAgICAgICAgaWYgKGxheWVyRGF0YS50aWxlbWFwTGF5ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RpbGVtYXAgTGF5ZXIgSUQgYWxyZWFkeSBleGlzdHM6JyArIGxheWVySUQpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudExheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAgICAgLy8gIERlZmF1bHQgdGhlIHgveSBwb3NpdGlvbiB0byBtYXRjaCBUaWxlZCBsYXllciBvZmZzZXQsIGlmIGl0IGV4aXN0cy5cclxuXHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHggPSBsYXllckRhdGEueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB5ID0gbGF5ZXJEYXRhLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGF5ZXIgPSBuZXcgRHluYW1pY1RpbGVtYXBMYXllcih0aGlzLnNjZW5lLCB0aGlzLCBpbmRleCwgdGlsZXNldCwgeCwgeSk7XHJcblxyXG4gICAgICAgIGxheWVyLnNldFJlbmRlck9yZGVyKHRoaXMucmVuZGVyT3JkZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5hZGQobGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGF5ZXI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFNwcml0ZSBmb3IgZXZlcnkgb2JqZWN0IG1hdGNoaW5nIHRoZSBnaXZlbiBnaWQgaW4gdGhlIG1hcCBkYXRhLiBBbGwgcHJvcGVydGllcyBmcm9tXHJcbiAgICAgKiB0aGUgbWFwIGRhdGEgb2JqZWN0Z3JvdXAgYXJlIGNvcGllZCBpbnRvIHRoZSBgc3ByaXRlQ29uZmlnYCwgc28geW91IGNhbiB1c2UgdGhpcyBhcyBhbiBlYXN5XHJcbiAgICAgKiB3YXkgdG8gY29uZmlndXJlIFNwcml0ZSBwcm9wZXJ0aWVzIGZyb20gd2l0aGluIHRoZSBtYXAgZWRpdG9yLiBGb3IgZXhhbXBsZSBnaXZpbmcgYW4gb2JqZWN0IGFcclxuICAgICAqIHByb3BlcnR5IG9mIGFscGhhOiAwLjUgaW4gdGhlIG1hcCBlZGl0b3Igd2lsbCBkdXBsaWNhdGUgdGhhdCB3aGVuIHRoZSBTcHJpdGUgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBDdXN0b20gb2JqZWN0IHByb3BlcnRpZXMgbm90IHNoYXJpbmcgbmFtZXMgd2l0aCB0aGUgU3ByaXRlJ3Mgb3duIHByb3BlcnRpZXMgYXJlIGNvcGllZCB0byB0aGVcclxuICAgICAqIFNwcml0ZSdzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI2RhdGEgZGF0YSBzdG9yZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjcmVhdGVGcm9tT2JqZWN0c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IGxheWVyIChmcm9tIFRpbGVkKSB0byBjcmVhdGUgU3ByaXRlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSBpZCAtIEVpdGhlciB0aGUgaWQgKG9iamVjdCksIGdpZCAodGlsZSBvYmplY3QpIG9yIG5hbWUgKG9iamVjdCBvclxyXG4gICAgICogdGlsZSBvYmplY3QpIGZyb20gVGlsZWQuIElkcyBhcmUgdW5pcXVlIGluIFRpbGVkLCBidXQgYSBnaWQgaXMgc2hhcmVkIGJ5IGFsbCB0aWxlIG9iamVjdHNcclxuICAgICAqIHdpdGggdGhlIHNhbWUgZ3JhcGhpYy4gVGhlIHNhbWUgbmFtZSBjYW4gYmUgdXNlZCBvbiBtdWx0aXBsZSBvYmplY3RzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuU3ByaXRlLlNwcml0ZUNvbmZpZ30gc3ByaXRlQ29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gcGFzcyBpbnRvIHRoZSBTcHJpdGUgY3JlYXRvciAoaS5lLlxyXG4gICAgICogc2NlbmUubWFrZS5zcHJpdGUpLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IFtzY2VuZT10aGUgc2NlbmUgdGhlIG1hcCBpcyB3aXRoaW5dIC0gVGhlIFNjZW5lIHRvIGNyZWF0ZSB0aGUgU3ByaXRlcyB3aXRoaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVtdfSBBbiBhcnJheSBvZiB0aGUgU3ByaXRlcyB0aGF0IHdlcmUgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRnJvbU9iamVjdHM6IGZ1bmN0aW9uIChuYW1lLCBpZCwgc3ByaXRlQ29uZmlnLCBzY2VuZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlQ29uZmlnID09PSB1bmRlZmluZWQpIHsgc3ByaXRlQ29uZmlnID0ge307IH1cclxuICAgICAgICBpZiAoc2NlbmUgPT09IHVuZGVmaW5lZCkgeyBzY2VuZSA9IHRoaXMuc2NlbmU7IH1cclxuXHJcbiAgICAgICAgdmFyIG9iamVjdExheWVyID0gdGhpcy5nZXRPYmplY3RMYXllcihuYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKCFvYmplY3RMYXllcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IGNyZWF0ZSBmcm9tIG9iamVjdC4gSW52YWxpZCBvYmplY3Rncm91cCBuYW1lIGdpdmVuOiAnICsgbmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxheWVySUQgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1ZhbGlkIG9iamVjdGdyb3VwIG5hbWVzOlxcblxcdCcgKyB0aGlzLmdldE9iamVjdExheWVyTmFtZXMoKS5qb2luKCcsXFxuXFx0JykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvYmplY3RzID0gb2JqZWN0TGF5ZXIub2JqZWN0cztcclxuICAgICAgICB2YXIgc3ByaXRlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IG9iamVjdHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAob2JqLmdpZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCA9PT0gJ251bWJlcicgJiYgb2JqLmdpZCA9PT0gaWQgfHxcclxuICAgICAgICAgICAgICAgIG9iai5pZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCA9PT0gJ251bWJlcicgJiYgb2JqLmlkID09PSBpZCB8fFxyXG4gICAgICAgICAgICAgICAgb2JqLm5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIG9iai5uYW1lID09PSBpZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSBFeHRlbmQoe30sIHNwcml0ZUNvbmZpZywgb2JqLnByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZy54ID0gb2JqLng7XHJcbiAgICAgICAgICAgICAgICBjb25maWcueSA9IG9iai55O1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBzcHJpdGUgPSBzY2VuZS5tYWtlLnNwcml0ZShjb25maWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNwcml0ZS5uYW1lID0gb2JqLm5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai53aWR0aCkgeyBzcHJpdGUuZGlzcGxheVdpZHRoID0gb2JqLndpZHRoOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhlaWdodCkgeyBzcHJpdGUuZGlzcGxheUhlaWdodCA9IG9iai5oZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBPcmlnaW4gaXMgKDAsIDEpIGluIFRpbGVkLCBzbyBmaW5kIHRoZSBvZmZzZXQgdGhhdCBtYXRjaGVzIHRoZSBTcHJpdGUncyBvcmlnaW4uXHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IHNwcml0ZS5vcmlnaW5YICogc3ByaXRlLmRpc3BsYXlXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiAoc3ByaXRlLm9yaWdpblkgLSAxKSAqIHNwcml0ZS5kaXNwbGF5SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaXMgcm90YXRlZCwgdGhlbiB0aGUgb3JpZ2luIG9mZnNldCBhbHNvIG5lZWRzIHRvIGJlIHJvdGF0ZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnJvdGF0aW9uKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbmdsZSA9IERlZ1RvUmFkKG9iai5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgUm90YXRlKG9mZnNldCwgYW5nbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNwcml0ZS5yb3RhdGlvbiA9IGFuZ2xlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNwcml0ZS54ICs9IG9mZnNldC54O1xyXG4gICAgICAgICAgICAgICAgc3ByaXRlLnkgKz0gb2Zmc2V0Lnk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5mbGlwcGVkSG9yaXpvbnRhbCAhPT0gdW5kZWZpbmVkIHx8IG9iai5mbGlwcGVkVmVydGljYWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcHJpdGUuc2V0RmxpcChvYmouZmxpcHBlZEhvcml6b250YWwsIG9iai5mbGlwcGVkVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghb2JqLnZpc2libGUpIHsgc3ByaXRlLnZpc2libGUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmoucHJvcGVydGllcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ByaXRlLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNwcml0ZS5zZXREYXRhKGtleSwgb2JqLnByb3BlcnRpZXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3ByaXRlcy5wdXNoKHNwcml0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBTcHJpdGUgZm9yIGV2ZXJ5IG9iamVjdCBtYXRjaGluZyB0aGUgZ2l2ZW4gdGlsZSBpbmRleGVzIGluIHRoZSBsYXllci4gWW91IGNhblxyXG4gICAgICogb3B0aW9uYWxseSBzcGVjaWZ5IGlmIGVhY2ggdGlsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBuZXcgdGlsZSBhZnRlciB0aGUgU3ByaXRlIGhhcyBiZWVuXHJcbiAgICAgKiBjcmVhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBsYXkgZG93biBzcGVjaWFsIHRpbGVzIGluIGEgbGV2ZWwgdGhhdCBhcmUgY29udmVydGVkIHRvXHJcbiAgICAgKiBTcHJpdGVzLCBidXQgd2FudCB0byByZXBsYWNlIHRoZSB0aWxlIGl0c2VsZiB3aXRoIGEgZmxvb3IgdGlsZSBvciBzaW1pbGFyIG9uY2UgY29udmVydGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjY3JlYXRlRnJvbVRpbGVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfGFycmF5KX0gaW5kZXhlcyAtIFRoZSB0aWxlIGluZGV4LCBvciBhcnJheSBvZiBpbmRleGVzLCB0byBjcmVhdGUgU3ByaXRlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxhcnJheSl9IHJlcGxhY2VtZW50cyAtIFRoZSB0aWxlIGluZGV4LCBvciBhcnJheSBvZiBpbmRleGVzLCB0byBjaGFuZ2UgYSBjb252ZXJ0ZWRcclxuICAgICAqIHRpbGUgdG8uIFNldCB0byBgbnVsbGAgdG8gbGVhdmUgdGhlIHRpbGVzIHVuY2hhbmdlZC4gSWYgYW4gYXJyYXkgaXMgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYVxyXG4gICAgICogb25lLXRvLW9uZSBtYXBwaW5nIHdpdGggdGhlIGluZGV4ZXMgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5TcHJpdGUuU3ByaXRlQ29uZmlnfSBzcHJpdGVDb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBwYXNzIGludG8gdGhlIFNwcml0ZSBjcmVhdG9yIChpLmUuIHNjZW5lLm1ha2Uuc3ByaXRlKS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBbc2NlbmU9c2NlbmUgdGhlIG1hcCBpcyB3aXRoaW5dIC0gVGhlIFNjZW5lIHRvIGNyZWF0ZSB0aGUgU3ByaXRlcyB3aXRoaW4uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlW119IFJldHVybnMgYW4gYXJyYXkgb2YgVGlsZXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tVGlsZXM6IGZ1bmN0aW9uIChpbmRleGVzLCByZXBsYWNlbWVudHMsIHNwcml0ZUNvbmZpZywgc2NlbmUsIGNhbWVyYSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5DcmVhdGVGcm9tVGlsZXMoaW5kZXhlcywgcmVwbGFjZW1lbnRzLCBzcHJpdGVDb25maWcsIHNjZW5lLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFN0YXRpY1RpbGVtYXBMYXllciB0aGF0IHJlbmRlcnMgdGhlIExheWVyRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuXHJcbiAgICAgKiBgbGF5ZXJJRGAuIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbGF5ZXIgaW4gdGhlIG1hcCBpcyBzZXQgdG8gdGhpcyBuZXcgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGBsYXllcklEYCBpcyBpbXBvcnRhbnQuIElmIHlvdSd2ZSBjcmVhdGVkIHlvdXIgbWFwIGluIFRpbGVkIHRoZW4geW91IGNhbiBnZXQgdGhpcyBieVxyXG4gICAgICogbG9va2luZyBpbiBUaWxlZCBhbmQgbG9va2luZyBhdCB0aGUgbGF5ZXIgbmFtZS4gT3IgeW91IGNhbiBvcGVuIHRoZSBKU09OIGZpbGUgaXQgZXhwb3J0cyBhbmRcclxuICAgICAqIGxvb2sgYXQgdGhlIGxheWVyc1tdLm5hbWUgdmFsdWUuIEVpdGhlciB3YXkgaXQgbXVzdCBtYXRjaC5cclxuICAgICAqXHJcbiAgICAgKiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGEgc3RhdGljIGxheWVyIGNhbm5vdCBiZSBtb2RpZmllZC4gU2VlIFN0YXRpY1RpbGVtYXBMYXllciBmb3JcclxuICAgICAqIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjcmVhdGVTdGF0aWNMYXllclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSBsYXllcklEIC0gVGhlIGxheWVyIGFycmF5IGluZGV4IHZhbHVlLCBvciBpZiBhIHN0cmluZyBpcyBnaXZlbiwgdGhlIGxheWVyIG5hbWUgZnJvbSBUaWxlZC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBwbGFjZSB0aGUgbGF5ZXIgaW4gdGhlIHdvcmxkLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxheWVyIG9mZnNldCBmcm9tIFRpbGVkIG9yIDAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiB0byBwbGFjZSB0aGUgbGF5ZXIgaW4gdGhlIHdvcmxkLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxheWVyIG9mZnNldCBmcm9tIFRpbGVkIG9yIDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXJ9IFJldHVybnMgdGhlIG5ldyBsYXllciB3YXMgY3JlYXRlZCwgb3IgbnVsbCBpZiBpdCBmYWlsZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVN0YXRpY0xheWVyOiBmdW5jdGlvbiAobGF5ZXJJRCwgdGlsZXNldCwgeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldExheWVySW5kZXgobGF5ZXJJRCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBUaWxlbWFwIExheWVyIElEOiAnICsgbGF5ZXJJRCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGF5ZXJJRCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVmFsaWQgdGlsZWxheWVyIG5hbWVzOlxcblxcdCcgKyB0aGlzLmdldFRpbGVMYXllck5hbWVzKCkuam9pbignLFxcblxcdCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsYXllckRhdGEgPSB0aGlzLmxheWVyc1tpbmRleF07XHJcblxyXG4gICAgICAgIC8vICBDaGVjayBmb3IgYW4gYXNzb2NpYXRlZCBzdGF0aWMgb3IgZHluYW1pYyB0aWxlbWFwIGxheWVyXHJcbiAgICAgICAgaWYgKGxheWVyRGF0YS50aWxlbWFwTGF5ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RpbGVtYXAgTGF5ZXIgSUQgYWxyZWFkeSBleGlzdHM6JyArIGxheWVySUQpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudExheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAgICAgLy8gIERlZmF1bHQgdGhlIHgveSBwb3NpdGlvbiB0byBtYXRjaCBUaWxlZCBsYXllciBvZmZzZXQsIGlmIGl0IGV4aXN0cy5cclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkICYmIHRoaXMubGF5ZXJzW2luZGV4XS54KSB7IHggPSB0aGlzLmxheWVyc1tpbmRleF0ueDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQgJiYgdGhpcy5sYXllcnNbaW5kZXhdLnkpIHsgeSA9IHRoaXMubGF5ZXJzW2luZGV4XS55OyB9XHJcblxyXG4gICAgICAgIHZhciBsYXllciA9IG5ldyBTdGF0aWNUaWxlbWFwTGF5ZXIodGhpcy5zY2VuZSwgdGhpcywgaW5kZXgsIHRpbGVzZXQsIHgsIHkpO1xyXG5cclxuICAgICAgICBsYXllci5zZXRSZW5kZXJPcmRlcih0aGlzLnJlbmRlck9yZGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZGlzcGxheUxpc3QuYWRkKGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxheWVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGxheWVyIGRhdGEgZnJvbSB0aGlzIFRpbGVtYXAgYW5kIG51bGxzIHRoZSBzY2VuZSByZWZlcmVuY2UuIFRoaXMgd2lsbCBkZXN0cm95IGFueVxyXG4gICAgICogU3RhdGljVGlsZW1hcExheWVycyBvciBEeW5hbWljVGlsZW1hcExheWVycyB0aGF0IGhhdmUgYmVlbiBsaW5rZWQgdG8gTGF5ZXJEYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMYXllcnMoKTtcclxuICAgICAgICB0aGlzLnRpbGVzZXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5vYmplY3RzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0aWxlcyBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyIHdpdGggdGhlXHJcbiAgICAgKiBzcGVjaWZpZWQgaW5kZXguIFRpbGVzIHdpbGwgYmUgc2V0IHRvIGNvbGxpZGUgaWYgdGhlIGdpdmVuIGluZGV4IGlzIGEgY29sbGlkaW5nIGluZGV4LlxyXG4gICAgICogQ29sbGlzaW9uIGluZm9ybWF0aW9uIGluIHRoZSByZWdpb24gd2lsbCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwJ3MgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICogVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBTdGF0aWNUaWxlbWFwTGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSB0aWxlIGluZGV4IHRvIGZpbGwgdGhlIGFyZWEgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm5zIHRoaXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBmaWxsOiBmdW5jdGlvbiAoaW5kZXgsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1N0YXRpY0NhbGwobGF5ZXIsICdmaWxsJykpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuRmlsbChpbmRleCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBlYWNoIG9iamVjdCBpbiB0aGUgZ2l2ZW4gb2JqZWN0IGxheWVyLCBydW4gdGhlIGdpdmVuIGZpbHRlciBjYWxsYmFjayBmdW5jdGlvbi4gQW55XHJcbiAgICAgKiBvYmplY3RzIHRoYXQgcGFzcyB0aGUgZmlsdGVyIHRlc3QgKGkuZS4gd2hlcmUgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSkgd2lsbCByZXR1cm5lZCBhcyBhXHJcbiAgICAgKiBuZXcgYXJyYXkuIFNpbWlsYXIgdG8gQXJyYXkucHJvdG90eXBlLkZpbHRlciBpbiB2YW5pbGxhIEpTLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZmlsdGVyT2JqZWN0c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlRpbGVtYXBzLk9iamVjdExheWVyfHN0cmluZyl9IG9iamVjdExheWVyIC0gVGhlIG5hbWUgb2YgYW4gb2JqZWN0IGxheWVyIChmcm9tIFRpbGVkKSBvciBhbiBPYmplY3RMYXllciBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7VGlsZW1hcEZpbHRlckNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCBvYmplY3QgaW4gdGhlIGdpdmVuIGFyZWEgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjayBhcyB0aGUgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgcnVuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBBbiBhcnJheSBvZiBvYmplY3QgdGhhdCBtYXRjaCB0aGUgc2VhcmNoLCBvciBudWxsIGlmIHRoZSBvYmplY3RMYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZmlsdGVyT2JqZWN0czogZnVuY3Rpb24gKG9iamVjdExheWVyLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdExheWVyID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gb2JqZWN0TGF5ZXI7XHJcblxyXG4gICAgICAgICAgICBvYmplY3RMYXllciA9IHRoaXMuZ2V0T2JqZWN0TGF5ZXIob2JqZWN0TGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvYmplY3RMYXllcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBvYmplY3QgbGF5ZXIgZm91bmQgd2l0aCB0aGUgbmFtZTogJyArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3RMYXllci5vYmplY3RzLmZpbHRlcihjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9yIGVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyLCBydW4gdGhlIGdpdmVuXHJcbiAgICAgKiBmaWx0ZXIgY2FsbGJhY2sgZnVuY3Rpb24uIEFueSB0aWxlcyB0aGF0IHBhc3MgdGhlIGZpbHRlciB0ZXN0IChpLmUuIHdoZXJlIHRoZSBjYWxsYmFjayByZXR1cm5zXHJcbiAgICAgKiB0cnVlKSB3aWxsIHJldHVybmVkIGFzIGEgbmV3IGFycmF5LiBTaW1pbGFyIHRvIEFycmF5LnByb3RvdHlwZS5GaWx0ZXIgaW4gdmFuaWxsYSBKUy5cclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2ZpbHRlclRpbGVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCB0aWxlIGluIHRoZSBnaXZlbiBhcmVhIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXNcclxuICAgICAqIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRydWUgZm9yIHRpbGVzIHRoYXQgcGFzcyB0aGVcclxuICAgICAqIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIHJ1bi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gUmV0dXJucyBhbiBhcnJheSBvZiBUaWxlcywgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIGZpbHRlclRpbGVzOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5GaWx0ZXJUaWxlcyhjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VhcmNoZXMgdGhlIGVudGlyZSBtYXAgbGF5ZXIgZm9yIHRoZSBmaXJzdCB0aWxlIG1hdGNoaW5nIHRoZSBnaXZlbiBpbmRleCwgdGhlbiByZXR1cm5zIHRoYXQgVGlsZVxyXG4gICAgICogb2JqZWN0LiBJZiBubyBtYXRjaCBpcyBmb3VuZCwgaXQgcmV0dXJucyBudWxsLiBUaGUgc2VhcmNoIHN0YXJ0cyBmcm9tIHRoZSB0b3AtbGVmdCB0aWxlIGFuZFxyXG4gICAgICogY29udGludWVzIGhvcml6b250YWxseSB1bnRpbCBpdCBoaXRzIHRoZSBlbmQgb2YgdGhlIHJvdywgdGhlbiBpdCBkcm9wcyBkb3duIHRvIHRoZSBuZXh0IGNvbHVtbi5cclxuICAgICAqIElmIHRoZSByZXZlcnNlIGJvb2xlYW4gaXMgdHJ1ZSwgaXQgc2NhbnMgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciB0cmF2ZWxpbmcgdXAgdG9cclxuICAgICAqIHRoZSB0b3AtbGVmdC5cclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2ZpbmRCeUluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIHRpbGUgaW5kZXggdmFsdWUgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3NraXA9MF0gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHNraXAgYSBtYXRjaGluZyB0aWxlIGJlZm9yZSByZXR1cm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXZlcnNlPWZhbHNlXSAtIElmIHRydWUgaXQgd2lsbCBzY2FuIHRoZSBsYXllciBpbiByZXZlcnNlLCBzdGFydGluZyBhdCB0aGUgYm90dG9tLXJpZ2h0LiBPdGhlcndpc2UgaXQgc2NhbnMgZnJvbSB0aGUgdG9wLWxlZnQuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlfSBSZXR1cm5zIGEgVGlsZXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBmaW5kQnlJbmRleDogZnVuY3Rpb24gKGZpbmRJbmRleCwgc2tpcCwgcmV2ZXJzZSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5GaW5kQnlJbmRleChmaW5kSW5kZXgsIHNraXAsIHJldmVyc2UsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHRoZSBmaXJzdCBvYmplY3QgaW4gdGhlIGdpdmVuIG9iamVjdCBsYXllciB0aGF0IHNhdGlzZmllcyB0aGUgcHJvdmlkZWQgdGVzdGluZyBmdW5jdGlvbi5cclxuICAgICAqIEkuZS4gZmluZHMgdGhlIGZpcnN0IG9iamVjdCBmb3Igd2hpY2ggYGNhbGxiYWNrYCByZXR1cm5zIHRydWUuIFNpbWlsYXIgdG9cclxuICAgICAqIEFycmF5LnByb3RvdHlwZS5maW5kIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNmaW5kT2JqZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXJ8c3RyaW5nKX0gb2JqZWN0TGF5ZXIgLSBUaGUgbmFtZSBvZiBhbiBvYmplY3QgbGF5ZXIgKGZyb20gVGlsZWQpIG9yIGFuIE9iamVjdExheWVyIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtUaWxlbWFwRmluZENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCBvYmplY3QgaW4gdGhlIGdpdmVuIGFyZWEgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjayBhcyB0aGUgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgcnVuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gQW4gb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgc2VhcmNoLCBvciBudWxsIGlmIG5vIG9iamVjdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZmluZE9iamVjdDogZnVuY3Rpb24gKG9iamVjdExheWVyLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdExheWVyID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gb2JqZWN0TGF5ZXI7XHJcblxyXG4gICAgICAgICAgICBvYmplY3RMYXllciA9IHRoaXMuZ2V0T2JqZWN0TGF5ZXIob2JqZWN0TGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvYmplY3RMYXllcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBvYmplY3QgbGF5ZXIgZm91bmQgd2l0aCB0aGUgbmFtZTogJyArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3RMYXllci5vYmplY3RzLmZpbmQoY2FsbGJhY2ssIGNvbnRleHQpIHx8IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCB0aGUgZmlyc3QgdGlsZSBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyIHRoYXRcclxuICAgICAqIHNhdGlzZmllcyB0aGUgcHJvdmlkZWQgdGVzdGluZyBmdW5jdGlvbi4gSS5lLiBmaW5kcyB0aGUgZmlyc3QgdGlsZSBmb3Igd2hpY2ggYGNhbGxiYWNrYCByZXR1cm5zXHJcbiAgICAgKiB0cnVlLiBTaW1pbGFyIHRvIEFycmF5LnByb3RvdHlwZS5maW5kIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2ZpbmRUaWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0ZpbmRUaWxlQ2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLiBFYWNoIHRpbGUgaW4gdGhlIGdpdmVuIGFyZWEgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjayBhcyB0aGUgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgcnVuLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIHNlYXJjaC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIHNlYXJjaC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuRmlsdGVyaW5nT3B0aW9uc30gW2ZpbHRlcmluZ09wdGlvbnNdIC0gT3B0aW9uYWwgZmlsdGVycyB0byBhcHBseSB3aGVuIGdldHRpbmcgdGhlIHRpbGVzLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgVGlsZSBsYXllciB0byBydW4gdGhlIHNlYXJjaCBvbi4gSWYgbm90IHByb3ZpZGVkIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxheWVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZX0gUmV0dXJucyBhIFRpbGVzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZmluZFRpbGU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkZpbmRUaWxlKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3IgZWFjaCB0aWxlIGluIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIsIHJ1biB0aGUgZ2l2ZW5cclxuICAgICAqIGNhbGxiYWNrLiBTaW1pbGFyIHRvIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwJ3MgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZm9yRWFjaFRpbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWFjaFRpbGVDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBydW4uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gc2VhcmNoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gc2VhcmNoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSBUaWxlIGxheWVyIHRvIHJ1biB0aGUgc2VhcmNoIG9uLiBJZiBub3QgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm5zIHRoaXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBmb3JFYWNoVGlsZTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5Gb3JFYWNoVGlsZShjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGltYWdlIGxheWVyIGluZGV4IGJhc2VkIG9uIGl0cyBuYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0SW1hZ2VJbmRleFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gZ2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBpbmRleCBvZiB0aGUgaW1hZ2UgaW4gdGhpcyB0aWxlbWFwLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0SW1hZ2VJbmRleDogZnVuY3Rpb24gKG5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW5kZXgodGhpcy5pbWFnZXMsIG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIHZhbGlkIGltYWdlbGF5ZXIgbmFtZXMgbG9hZGVkIGluIHRoaXMgVGlsZW1hcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2dldEltYWdlTGF5ZXJOYW1lc1xyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiB2YWxpZCBpbWFnZWxheWVyIG5hbWVzIC8gSURzIGxvYWRlZCBpbnRvIHRoaXMgVGlsZW1hcC5cclxuICAgICAqL1xyXG4gICAgZ2V0SW1hZ2VMYXllck5hbWVzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pbWFnZXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5pbWFnZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2UubmFtZTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbGx5IHVzZWQuIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBvYmplY3QgaW4gb25lIG9mIHRoZSBUaWxlbWFwcyBhcnJheXMgd2hvc2UgbmFtZVxyXG4gICAgICogcHJvcGVydHkgbWF0Y2hlcyB0aGUgZ2l2ZW4gYG5hbWVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGxvY2F0aW9uIC0gVGhlIFRpbGVtYXAgYXJyYXkgdG8gc2VhcmNoLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYXJyYXkgZWxlbWVudCB0byBnZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5LCBvciBudWxsIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0SW5kZXg6IGZ1bmN0aW9uIChsb2NhdGlvbiwgbmFtZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2F0aW9uLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uW2ldLm5hbWUgPT09IG5hbWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBMYXllckRhdGEgZnJvbSB0aGlzLmxheWVycyB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBgbGF5ZXJgLCBvciBudWxsIGlmIGFuIGludmFsaWRcclxuICAgICAqIGBsYXllcmAgaXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRMYXllclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgbmFtZSBvZiB0aGVcclxuICAgICAqIGxheWVyIGZyb20gVGlsZWQsIHRoZSBpbmRleCBvZiB0aGUgbGF5ZXIgaW4gdGhlIG1hcCwgYSBEeW5hbWljVGlsZW1hcExheWVyIG9yIGFcclxuICAgICAqIFN0YXRpY1RpbGVtYXBMYXllci4gSWYgbm90IGdpdmVuIHdpbGwgZGVmYXVsdCB0byB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IFRoZSBjb3JyZXNwb25kaW5nIExheWVyRGF0YSB3aXRoaW4gdGhpcy5sYXllcnMuXHJcbiAgICAgKi9cclxuICAgIGdldExheWVyOiBmdW5jdGlvbiAobGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRMYXllckluZGV4KGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChpbmRleCAhPT0gbnVsbCkgPyB0aGlzLmxheWVyc1tpbmRleF0gOiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIE9iamVjdExheWVyIGZyb20gdGhpcy5vYmplY3RzIHRoYXQgaGFzIHRoZSBnaXZlbiBgbmFtZWAsIG9yIG51bGwgaWYgbm8gT2JqZWN0TGF5ZXJcclxuICAgICAqIGlzIGZvdW5kIHdpdGggdGhhdCBuYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0T2JqZWN0TGF5ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gLSBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IGxheWVyIGZyb20gVGlsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5PYmplY3RMYXllcn0gVGhlIGNvcnJlc3BvbmRpbmcgT2JqZWN0TGF5ZXIgd2l0aGluIHRoaXMub2JqZWN0cyBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRPYmplY3RMYXllcjogZnVuY3Rpb24gKG5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRJbmRleCh0aGlzLm9iamVjdHMsIG5hbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gKGluZGV4ICE9PSBudWxsKSA/IHRoaXMub2JqZWN0c1tpbmRleF0gOiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIHZhbGlkIG9iamVjdGdyb3VwIG5hbWVzIGxvYWRlZCBpbiB0aGlzIFRpbGVtYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRPYmplY3RMYXllck5hbWVzXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IEFycmF5IG9mIHZhbGlkIG9iamVjdGdyb3VwIG5hbWVzIC8gSURzIGxvYWRlZCBpbnRvIHRoaXMgVGlsZW1hcC5cclxuICAgICAqL1xyXG4gICAgZ2V0T2JqZWN0TGF5ZXJOYW1lczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMub2JqZWN0cyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLm9iamVjdHMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5tYXAoZnVuY3Rpb24gKG9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBMYXllckRhdGEgaW5kZXggb2YgdGhlIGdpdmVuIGBsYXllcmAgd2l0aGluIHRoaXMubGF5ZXJzLCBvciBudWxsIGlmIGFuIGludmFsaWRcclxuICAgICAqIGBsYXllcmAgaXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRMYXllckluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSBuYW1lIG9mIHRoZVxyXG4gICAgICogbGF5ZXIgZnJvbSBUaWxlZCwgdGhlIGluZGV4IG9mIHRoZSBsYXllciBpbiB0aGUgbWFwLCBhIER5bmFtaWNUaWxlbWFwTGF5ZXIgb3IgYVxyXG4gICAgICogU3RhdGljVGlsZW1hcExheWVyLiBJZiBub3QgZ2l2ZW4gd2lsbCBkZWZhdWx0IHRvIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBMYXllckRhdGEgaW5kZXggd2l0aGluIHRoaXMubGF5ZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRMYXllckluZGV4OiBmdW5jdGlvbiAobGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5ZXJJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxheWVyID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExheWVySW5kZXhCeU5hbWUobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbGF5ZXIgPT09ICdudW1iZXInICYmIGxheWVyIDwgdGhpcy5sYXllcnMubGVuZ3RoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxheWVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFN0YXRpY1RpbGVtYXBMYXllciB8fCBsYXllciBpbnN0YW5jZW9mIER5bmFtaWNUaWxlbWFwTGF5ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXIubGF5ZXJJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBMYXllckRhdGEgd2l0aGluIHRoaXMubGF5ZXJzIHRoYXQgaGFzIHRoZSBnaXZlbiBgbmFtZWAsIG9yIG51bGwgaWYgYW5cclxuICAgICAqIGludmFsaWQgYG5hbWVgIGlzIGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0TGF5ZXJJbmRleEJ5TmFtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gZ2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBMYXllckRhdGEgaW5kZXggd2l0aGluIHRoaXMubGF5ZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRMYXllckluZGV4QnlOYW1lOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleCh0aGlzLmxheWVycywgbmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZ2l2ZW4gbGF5ZXIuXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRUaWxlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBYIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiB0aWxlIHVuaXRzLCBub3QgcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBZIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiB0aWxlIHVuaXRzLCBub3QgcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSBnZXRUaWxlIHdvbid0IHJldHVybiBudWxsIGZvciBlbXB0eSB0aWxlcywgYnV0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFJldHVybnMgYSBUaWxlLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZUF0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCBub25OdWxsLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVBdCh0aWxlWCwgdGlsZVksIG5vbk51bGwsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gd29ybGQgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZ2l2ZW4gbGF5ZXIuXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRUaWxlQXRXb3JsZFhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gWCBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSAoZ2l2ZW4gaW4gcGl4ZWxzKVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFkgcG9zaXRpb24gdG8gZ2V0IHRoZSB0aWxlIGZyb20gKGdpdmVuIGluIHBpeGVscylcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSwgZnVuY3Rpb24gd29uJ3QgcmV0dXJuIG51bGwgZm9yIGVtcHR5IHRpbGVzLCBidXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFJldHVybnMgYSBUaWxlLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCBub25OdWxsLCBjYW1lcmEsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuR2V0VGlsZUF0V29ybGRYWSh3b3JsZFgsIHdvcmxkWSwgbm9uTnVsbCwgY2FtZXJhLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgdmFsaWQgdGlsZWxheWVyIG5hbWVzIGxvYWRlZCBpbiB0aGlzIFRpbGVtYXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNnZXRUaWxlTGF5ZXJOYW1lc1xyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1tzdHJpbmddfSBBcnJheSBvZiB2YWxpZCB0aWxlbGF5ZXIgbmFtZXMgLyBJRHMgbG9hZGVkIGludG8gdGhpcyBUaWxlbWFwLlxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlTGF5ZXJOYW1lczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMubGF5ZXJzIHx8ICFBcnJheS5pc0FycmF5KHRoaXMubGF5ZXJzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVycy5tYXAoZnVuY3Rpb24gKGxheWVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxheWVyLm5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllci5cclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0VGlsZXNXaXRoaW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlW119IFJldHVybnMgYW4gYXJyYXkgb2YgVGlsZXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlc1dpdGhpbjogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5HZXRUaWxlc1dpdGhpbih0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0aWxlcyB0aGF0IG92ZXJsYXAgd2l0aCB0aGUgZ2l2ZW4gc2hhcGUgaW4gdGhlIGdpdmVuIGxheWVyLiBUaGUgc2hhcGUgbXVzdCBiZSBhIENpcmNsZSxcclxuICAgICAqIExpbmUsIFJlY3RhbmdsZSBvciBUcmlhbmdsZS4gVGhlIHNoYXBlIHNob3VsZCBiZSBpbiB3b3JsZCBjb29yZGluYXRlcy5cclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0VGlsZXNXaXRoaW5TaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uQ2lyY2xlfFBoYXNlci5HZW9tLkxpbmV8UGhhc2VyLkdlb20uUmVjdGFuZ2xlfFBoYXNlci5HZW9tLlRyaWFuZ2xlKX0gc2hhcGUgLSBBIHNoYXBlIGluIHdvcmxkIChwaXhlbCkgY29vcmRpbmF0ZXNcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBmYWN0b3JpbmcgaW4gd2hpY2ggdGlsZXMgdG8gcmV0dXJuLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBSZXR1cm5zIGFuIGFycmF5IG9mIFRpbGVzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZXNXaXRoaW5TaGFwZTogZnVuY3Rpb24gKHNoYXBlLCBmaWx0ZXJpbmdPcHRpb25zLCBjYW1lcmEsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuR2V0VGlsZXNXaXRoaW5TaGFwZShzaGFwZSwgZmlsdGVyaW5nT3B0aW9ucywgY2FtZXJhLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHdvcmxkIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIuXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2dldFRpbGVzV2l0aGluV29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB3b3JsZCB4IGNvb3JkaW5hdGUgZm9yIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgd29ybGQgeSBjb29yZGluYXRlIGZvciB0aGUgdG9wLWxlZnQgb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBmYWN0b3JpbmcgaW4gd2hpY2ggdGlsZXMgdG8gcmV0dXJuLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBSZXR1cm5zIGFuIGFycmF5IG9mIFRpbGVzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZXNXaXRoaW5Xb3JsZFhZOiBmdW5jdGlvbiAod29ybGRYLCB3b3JsZFksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGNhbWVyYSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5HZXRUaWxlc1dpdGhpbldvcmxkWFkod29ybGRYLCB3b3JsZFksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIFRpbGVzZXQgdGhhdCBoYXMgdGhlIGdpdmVuIGBuYW1lYCwgb3IgbnVsbCBpZiBhbiBpbnZhbGlkIGBuYW1lYCBpcyBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2dldFRpbGVzZXRcclxuICAgICAqIEBzaW5jZSAzLjE0LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBUaWxlc2V0IHRvIGdldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVzZXR9IFRoZSBUaWxlc2V0LCBvciBgbnVsbGAgaWYgbm8gbWF0Y2hpbmcgbmFtZWQgdGlsZXNldCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVzZXQ6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5kZXgodGhpcy50aWxlc2V0cywgbmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoaW5kZXggIT09IG51bGwpID8gdGhpcy50aWxlc2V0c1tpbmRleF0gOiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBUaWxlc2V0IHdpdGhpbiB0aGlzLnRpbGVzZXRzIHRoYXQgaGFzIHRoZSBnaXZlbiBgbmFtZWAsIG9yIG51bGwgaWYgYW5cclxuICAgICAqIGludmFsaWQgYG5hbWVgIGlzIGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjZ2V0VGlsZXNldEluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBUaWxlc2V0IHRvIGdldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgVGlsZXNldCBpbmRleCB3aXRoaW4gdGhpcy50aWxlc2V0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZXNldEluZGV4OiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleCh0aGlzLnRpbGVzZXRzLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSB0aWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbiAoaW4gdGlsZSBjb29yZGluYXRlcykgaW4gdGhlIGdpdmVuIGxheWVyLiBSZXR1cm5zXHJcbiAgICAgKiBmYWxzZSBpZiB0aGVyZSBpcyBubyB0aWxlIG9yIGlmIHRoZSB0aWxlIGF0IHRoYXQgbG9jYXRpb24gaGFzIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2hhc1RpbGVBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9ib29sZWFufSBSZXR1cm5zIGEgYm9vbGVhbiwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIGhhc1RpbGVBdDogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5IYXNUaWxlQXQodGlsZVgsIHRpbGVZLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gKGluIHdvcmxkIGNvb3JkaW5hdGVzKSBpbiB0aGUgZ2l2ZW4gbGF5ZXIuIFJldHVybnNcclxuICAgICAqIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHRpbGUgb3IgaWYgdGhlIHRpbGUgYXQgdGhhdCBsb2NhdGlvbiBoYXMgYW4gaW5kZXggb2YgLTEuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNoYXNUaWxlQXRXb3JsZFhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBmYWN0b3JpbmcgaW4gd2hpY2ggdGlsZXMgdG8gcmV0dXJuLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9ib29sZWFufSBSZXR1cm5zIGEgYm9vbGVhbiwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIGhhc1RpbGVBdFdvcmxkWFk6IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgY2FtZXJhLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkhhc1RpbGVBdFdvcmxkWFkod29ybGRYLCB3b3JsZFksIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMYXllckRhdGEgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkIGluIHRoZSBtYXAuIFlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdXNpbmdcclxuICAgICAqIGFueSB0eXBlIHN1cHBvcnRlZCBieSBzZXRMYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNsYXllclxyXG4gICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGF5ZXI6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXllcnNbdGhpcy5jdXJyZW50TGF5ZXJJbmRleF07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobGF5ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldExheWVyKGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyBhIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZCBsYXllci4gWW91IGNhbiBwYXNzIGluIGVpdGhlciBhbiBpbmRleFxyXG4gICAgICogb3IgYSBUaWxlIG9iamVjdC4gSWYgeW91IHBhc3MgaW4gYSBUaWxlLCBhbGwgYXR0cmlidXRlcyB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGUgaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlIGNoYW5nZWQuXHJcbiAgICAgKiBDb2xsaXNpb24gaW5mb3JtYXRpb24gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIFN0YXRpY1RpbGVtYXBMYXllcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNwdXRUaWxlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLlRpbGUpfSB0aWxlIC0gVGhlIGluZGV4IG9mIHRoaXMgdGlsZSB0byBzZXQgb3IgYSBUaWxlIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgeCBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBgdHJ1ZWAgaWYgdGhlIGZhY2VzIGRhdGEgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFJldHVybnMgYSBUaWxlLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZCBvciB0aGUgY29vcmRpbmF0ZXMgd2VyZSBvdXQgb2YgYm91bmRzLlxyXG4gICAgICovXHJcbiAgICBwdXRUaWxlQXQ6IGZ1bmN0aW9uICh0aWxlLCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1N0YXRpY0NhbGwobGF5ZXIsICdwdXRUaWxlQXQnKSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLlB1dFRpbGVBdCh0aWxlLCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gd29ybGQgY29vcmRpbmF0ZXMgKHBpeGVscykgaW4gdGhlIHNwZWNpZmllZCBsYXllci4gWW91IGNhbiBwYXNzIGluIGVpdGhlclxyXG4gICAgICogYW4gaW5kZXggb3IgYSBUaWxlIG9iamVjdC4gSWYgeW91IHBhc3MgaW4gYSBUaWxlLCBhbGwgYXR0cmlidXRlcyB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZVxyXG4gICAgICogc3BlY2lmaWVkIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGUgaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlXHJcbiAgICAgKiBjaGFuZ2VkLiBDb2xsaXNpb24gaW5mb3JtYXRpb24gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC4gVGhpc1xyXG4gICAgICogY2Fubm90IGJlIGFwcGxpZWQgdG8gU3RhdGljVGlsZW1hcExheWVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3B1dFRpbGVBdFdvcmxkWFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLlRpbGUpfSB0aWxlIC0gVGhlIGluZGV4IG9mIHRoaXMgdGlsZSB0byBzZXQgb3IgYSBUaWxlIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgeCBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFJldHVybnMgYSBUaWxlLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcHV0VGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHRpbGUsIHdvcmxkWCwgd29ybGRZLCByZWNhbGN1bGF0ZUZhY2VzLCBjYW1lcmEsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1N0YXRpY0NhbGwobGF5ZXIsICdwdXRUaWxlQXRXb3JsZFhZJykpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5QdXRUaWxlQXRXb3JsZFhZKHRpbGUsIHdvcmxkWCwgd29ybGRZLCByZWNhbGN1bGF0ZUZhY2VzLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXRzIGFuIGFycmF5IG9mIHRpbGVzIG9yIGEgMkQgYXJyYXkgb2YgdGlsZXMgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZFxyXG4gICAgICogbGF5ZXIuIFRoZSBhcnJheSBjYW4gYmUgY29tcG9zZWQgb2YgZWl0aGVyIHRpbGUgaW5kZXhlcyBvciBUaWxlIG9iamVjdHMuIElmIHlvdSBwYXNzIGluIGEgVGlsZSxcclxuICAgICAqIGFsbCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29waWVkIG92ZXIgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gSWYgeW91IHBhc3MgaW4gYW4gaW5kZXgsIG9ubHkgdGhlXHJcbiAgICAgKiBpbmRleCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpbGwgYmUgY2hhbmdlZC4gQ29sbGlzaW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVjYWxjdWxhdGVkXHJcbiAgICAgKiB3aXRoaW4gdGhlIHJlZ2lvbiB0aWxlcyB3ZXJlIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIFN0YXRpY1RpbGVtYXBMYXllcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNwdXRUaWxlc0F0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyW118aW50ZWdlcltdW118UGhhc2VyLlRpbGVtYXBzLlRpbGVbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZVtdW10pfSB0aWxlIC0gQSByb3cgKGFycmF5KSBvciBncmlkICgyRCBhcnJheSkgb2YgVGlsZXMgb3IgdGlsZSBpbmRleGVzIHRvIHBsYWNlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJucyB0aGlzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcHV0VGlsZXNBdDogZnVuY3Rpb24gKHRpbGVzQXJyYXksIHRpbGVYLCB0aWxlWSwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU3RhdGljQ2FsbChsYXllciwgJ3B1dFRpbGVzQXQnKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuUHV0VGlsZXNBdCh0aWxlc0FycmF5LCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmFuZG9taXplcyB0aGUgaW5kZXhlcyBvZiBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB0aWxlcyAoaW4gdGlsZSBjb29yZGluYXRlcykgd2l0aGluIHRoZVxyXG4gICAgICogc3BlY2lmaWVkIGxheWVyLiBFYWNoIHRpbGUgd2lsbCByZWNlaXZlIGEgbmV3IGluZGV4LiBJZiBhbiBhcnJheSBvZiBpbmRleGVzIGlzIHBhc3NlZCBpbiwgdGhlblxyXG4gICAgICogdGhvc2Ugd2lsbCBiZSB1c2VkIGZvciByYW5kb21seSBhc3NpZ25pbmcgbmV3IHRpbGUgaW5kZXhlcy4gSWYgYW4gYXJyYXkgaXMgbm90IHByb3ZpZGVkLCB0aGVcclxuICAgICAqIGluZGV4ZXMgZm91bmQgd2l0aGluIHRoZSByZWdpb24gKGV4Y2x1ZGluZyAtMSkgd2lsbCBiZSB1c2VkIGZvciByYW5kb21seSBhc3NpZ25pbmcgbmV3IHRpbGVcclxuICAgICAqIGluZGV4ZXMuIFRoaXMgbWV0aG9kIG9ubHkgbW9kaWZpZXMgdGlsZSBpbmRleGVzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICogVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBTdGF0aWNUaWxlbWFwTGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjcmFuZG9taXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyW119IFtpbmRleGVzXSAtIEFuIGFycmF5IG9mIGluZGV4ZXMgdG8gcmFuZG9tbHkgZHJhdyBmcm9tIGR1cmluZyByYW5kb21pemF0aW9uLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJucyB0aGlzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcmFuZG9taXplOiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBpbmRleGVzLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTdGF0aWNDYWxsKGxheWVyLCAncmFuZG9taXplJykpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlJhbmRvbWl6ZSh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGluZGV4ZXMsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLiBJbnRlcmVzdGluZ1xyXG4gICAgICogZmFjZXMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3Igb3B0aW1pemluZyBjb2xsaXNpb25zIGFnYWluc3QgdGlsZXMuIFRoaXMgbWV0aG9kIGlzIG1vc3RseSB1c2VkXHJcbiAgICAgKiBpbnRlcm5hbGx5IHRvIG9wdGltaXplIHJlY2FsY3VsYXRpbmcgZmFjZXMgd2hlbiBvbmx5IG9uZSB0aWxlIGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNjYWxjdWxhdGVGYWNlc0F0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm5zIHRoaXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVGYWNlc0F0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuQ2FsY3VsYXRlRmFjZXNBdCh0aWxlWCwgdGlsZVksIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyB3aXRoaW4gdGhlIHJlY3Rhbmd1bGFyIGFyZWEgc3BlY2lmaWVkIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGVcclxuICAgICAqIGxheWVyLiBJbnRlcmVzdGluZyBmYWNlcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBvcHRpbWl6aW5nIGNvbGxpc2lvbnMgYWdhaW5zdCB0aWxlcy4gVGhpcyBtZXRob2RcclxuICAgICAqIGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwJ3MgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjY2FsY3VsYXRlRmFjZXNXaXRoaW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm5zIHRoaXMsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVGYWNlc1dpdGhpbjogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkNhbGN1bGF0ZUZhY2VzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBUaWxlbWFwTGF5ZXIgZnJvbSB0aGlzIFRpbGVtYXAgd2l0aG91dCBkZXN0cm95aW5nIGl0LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3JlbW92ZUxheWVyXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byBiZSByZW1vdmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJucyB0aGlzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcilcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldExheWVySW5kZXgobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTcGxpY2VPbmUodGhpcy5sYXllcnMsIGluZGV4KTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgdGhpcy5sYXllcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxheWVyc1tpXS50aWxlbWFwTGF5ZXIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnNbaV0udGlsZW1hcExheWVyLmxheWVySW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudExheWVySW5kZXggPT09IGluZGV4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYXllckluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGUgZ2l2ZW4gVGlsZW1hcExheWVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhpcyBUaWxlbWFwLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI2Rlc3Ryb3lMYXllclxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gYmUgZGVzdHJveWVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJucyB0aGlzLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveUxheWVyOiBmdW5jdGlvbiAobGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRMYXllckluZGV4KGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGF5ZXIgPSB0aGlzLmxheWVyc1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBsYXllci5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICBTcGxpY2VPbmUodGhpcy5sYXllcnMsIGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMYXllckluZGV4ID09PSBpbmRleClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgbGF5ZXJzIGZyb20gdGhpcyBUaWxlbWFwIGFuZCBkZXN0cm95cyBhbnkgYXNzb2NpYXRlZCBTdGF0aWNUaWxlbWFwTGF5ZXJzIG9yXHJcbiAgICAgKiBEeW5hbWljVGlsZW1hcExheWVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3JlbW92ZUFsbExheWVyc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFRoaXMgVGlsZW1hcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbExheWVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbGF5ZXJzID0gdGhpcy5sYXllcnM7XHJcblxyXG4gICAgICAgIC8vIERlc3Ryb3kgYW55IFN0YXRpY1RpbGVtYXBMYXllcnMgb3IgRHluYW1pY1RpbGVtYXBMYXllcnMgdGhhdCBhcmUgc3RvcmVkIGluIExheWVyRGF0YVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGxheWVyc1tpXS50aWxlbWFwTGF5ZXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxheWVyc1tpXS50aWxlbWFwTGF5ZXIuZGVzdHJveShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxheWVycy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRMYXllckluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gVGlsZSwgb3IgYW4gYXJyYXkgb2YgVGlsZXMsIGZyb20gdGhlIGxheWVyIHRvIHdoaWNoIHRoZXkgYmVsb25nLFxyXG4gICAgICogYW5kIG9wdGlvbmFsbHkgcmVjYWxjdWxhdGVzIHRoZSBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBUaWxlcyB0aGF0IGJlbG9uZyB0byBTdGF0aWMgVGlsZW1hcCBMYXllcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNyZW1vdmVUaWxlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlRpbGVtYXBzLlRpbGV8UGhhc2VyLlRpbGVtYXBzLlRpbGVbXSl9IHRpbGVzIC0gVGhlIFRpbGUgdG8gcmVtb3ZlLCBvciBhbiBhcnJheSBvZiBUaWxlcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3JlcGxhY2VJbmRleD0tMV0gLSBBZnRlciByZW1vdmluZyB0aGUgVGlsZSwgaW5zZXJ0IGEgYnJhbmQgbmV3IFRpbGUgaW50byBpdHMgbG9jYXRpb24gd2l0aCB0aGUgZ2l2ZW4gaW5kZXguIExlYXZlIGFzIC0xIHRvIGp1c3QgcmVtb3ZlIHRoZSB0aWxlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IFJldHVybnMgYW4gYXJyYXkgb2YgVGlsZXMgdGhhdCB3ZXJlIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVRpbGU6IGZ1bmN0aW9uICh0aWxlcywgcmVwbGFjZUluZGV4LCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyZXBsYWNlSW5kZXggPT09IHVuZGVmaW5lZCkgeyByZXBsYWNlSW5kZXggPSAtMTsgfVxyXG4gICAgICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpbGVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpbGVzID0gWyB0aWxlcyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlID0gdGlsZXNbaV07XHJcblxyXG4gICAgICAgICAgICByZW1vdmVkLnB1c2godGhpcy5yZW1vdmVUaWxlQXQodGlsZS54LCB0aWxlLnksIHRydWUsIHJlY2FsY3VsYXRlRmFjZXMsIHRpbGUudGlsZW1hcExheWVyKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVwbGFjZUluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHV0VGlsZUF0KHJlcGxhY2VJbmRleCwgdGlsZS54LCB0aWxlLnksIHJlY2FsY3VsYXRlRmFjZXMsIHRpbGUudGlsZW1hcExheWVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgdGlsZSBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGFuZCB1cGRhdGVzIHRoZSBsYXllcidzXHJcbiAgICAgKiBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIFN0YXRpY1RpbGVtYXBMYXllcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNyZW1vdmVUaWxlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgeCBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcGxhY2VXaXRoTnVsbD10cnVlXSAtIElmIHRydWUsIHRoaXMgd2lsbCByZXBsYWNlIHRoZSB0aWxlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gd2l0aCBudWxsIGluc3RlYWQgb2YgYSBUaWxlIHdpdGggYW4gaW5kZXggb2YgLTEuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlfSBSZXR1cm5zIHRoZSBUaWxlIHRoYXQgd2FzIHJlbW92ZWQsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUaWxlQXQ6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHJlcGxhY2VXaXRoTnVsbCwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU3RhdGljQ2FsbChsYXllciwgJ3JlbW92ZVRpbGVBdCcpKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuUmVtb3ZlVGlsZUF0KHRpbGVYLCB0aWxlWSwgcmVwbGFjZVdpdGhOdWxsLCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgdGlsZSBhdCB0aGUgZ2l2ZW4gd29ybGQgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZCBsYXllciBhbmQgdXBkYXRlcyB0aGUgbGF5ZXInc1xyXG4gICAgICogY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICogVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBTdGF0aWNUaWxlbWFwTGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjcmVtb3ZlVGlsZUF0V29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXBsYWNlV2l0aE51bGw9dHJ1ZV0gLSBJZiB0cnVlLCB0aGlzIHdpbGwgcmVwbGFjZSB0aGUgdGlsZSBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpdGggbnVsbCBpbnN0ZWFkIG9mIGEgVGlsZSB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFJldHVybnMgYSBUaWxlLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlVGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCByZXBsYWNlV2l0aE51bGwsIHJlY2FsY3VsYXRlRmFjZXMsIGNhbWVyYSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU3RhdGljQ2FsbChsYXllciwgJ3JlbW92ZVRpbGVBdFdvcmxkWFknKSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLlJlbW92ZVRpbGVBdFdvcmxkWFkod29ybGRYLCB3b3JsZFksIHJlcGxhY2VXaXRoTnVsbCwgcmVjYWxjdWxhdGVGYWNlcywgY2FtZXJhLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgYSBkZWJ1ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGF5ZXIgdG8gdGhlIGdpdmVuIEdyYXBoaWNzLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiB5b3Ugd2FudCB0b1xyXG4gICAgICogZ2V0IGEgcXVpY2sgaWRlYSBvZiB3aGljaCBvZiB5b3VyIHRpbGVzIGFyZSBjb2xsaWRpbmcgYW5kIHdoaWNoIGhhdmUgaW50ZXJlc3RpbmcgZmFjZXMuIFRoZSB0aWxlc1xyXG4gICAgICogYXJlIGRyYXduIHN0YXJ0aW5nIGF0ICgwLCAwKSBpbiB0aGUgR3JhcGhpY3MsIGFsbG93aW5nIHlvdSB0byBwbGFjZSB0aGUgZGVidWcgcmVwcmVzZW50YXRpb25cclxuICAgICAqIHdoZXJldmVyIHlvdSB3YW50IG9uIHRoZSBzY3JlZW4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNyZW5kZXJEZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gVGhlIHRhcmdldCBHcmFwaGljcyBvYmplY3QgdG8gZHJhdyB1cG9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuU3R5bGVDb25maWd9IHN0eWxlQ29uZmlnIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGNvbG9ycyB0byB1c2UgZm9yIHRoZSBkZWJ1ZyBkcmF3aW5nLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJuIHRoaXMgVGlsZW1hcCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKGdyYXBoaWNzLCBzdHlsZUNvbmZpZywgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlJlbmRlckRlYnVnKGdyYXBoaWNzLCBzdHlsZUNvbmZpZywgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyBhIGRlYnVnIHJlcHJlc2VudGF0aW9uIG9mIGFsbCBsYXllcnMgd2l0aGluIHRoaXMgVGlsZW1hcCB0byB0aGUgZ2l2ZW4gR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaXMgaGVscGZ1bCB3aGVuIHlvdSB3YW50IHRvIGdldCBhIHF1aWNrIGlkZWEgb2Ygd2hpY2ggb2YgeW91ciB0aWxlcyBhcmUgY29sbGlkaW5nIGFuZCB3aGljaFxyXG4gICAgICogaGF2ZSBpbnRlcmVzdGluZyBmYWNlcy4gVGhlIHRpbGVzIGFyZSBkcmF3biBzdGFydGluZyBhdCAoMCwgMCkgaW4gdGhlIEdyYXBoaWNzLCBhbGxvd2luZyB5b3UgdG9cclxuICAgICAqIHBsYWNlIHRoZSBkZWJ1ZyByZXByZXNlbnRhdGlvbiB3aGVyZXZlciB5b3Ugd2FudCBvbiB0aGUgc2NyZWVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjcmVuZGVyRGVidWdGdWxsXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gVGhlIHRhcmdldCBHcmFwaGljcyBvYmplY3QgdG8gZHJhdyB1cG9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuU3R5bGVDb25maWd9IHN0eWxlQ29uZmlnIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGNvbG9ycyB0byB1c2UgZm9yIHRoZSBkZWJ1ZyBkcmF3aW5nLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJuIHRoaXMgVGlsZW1hcCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1Z0Z1bGw6IGZ1bmN0aW9uIChncmFwaGljcywgc3R5bGVDb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxheWVycyA9IHRoaXMubGF5ZXJzO1xyXG5cclxuICAgICAgICAvLyBEZXN0cm95IGFueSBTdGF0aWNUaWxlbWFwTGF5ZXJzIG9yIER5bmFtaWNUaWxlbWFwTGF5ZXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBMYXllckRhdGFcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlJlbmRlckRlYnVnKGdyYXBoaWNzLCBzdHlsZUNvbmZpZywgbGF5ZXJzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChnaXZlbiBpbiB0aWxlIGNvb3JkaW5hdGVzKSBmb3IgdGlsZXMgd2l0aCBhbiBpbmRleCBtYXRjaGluZ1xyXG4gICAgICogYGZpbmRJbmRleGAgYW5kIHVwZGF0ZXMgdGhlaXIgaW5kZXggdG8gbWF0Y2ggYG5ld0luZGV4YC4gVGhpcyBvbmx5IG1vZGlmaWVzIHRoZSBpbmRleCBhbmQgZG9lc1xyXG4gICAgICogbm90IGNoYW5nZSBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIFN0YXRpY1RpbGVtYXBMYXllcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNyZXBsYWNlQnlJbmRleFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBmaW5kSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHRpbGUgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbmV3SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHRpbGUgdG8gcmVwbGFjZSBpdCB3aXRoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFJldHVybiB0aGlzIFRpbGVtYXAgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcmVwbGFjZUJ5SW5kZXg6IGZ1bmN0aW9uIChmaW5kSW5kZXgsIG5ld0luZGV4LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1N0YXRpY0NhbGwobGF5ZXIsICdyZXBsYWNlQnlJbmRleCcpKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5SZXBsYWNlQnlJbmRleChmaW5kSW5kZXgsIG5ld0luZGV4LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gdGhlIGdpdmVuIHRpbGUgb3IgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgaW5kZXguIFlvdSBjYW4gcGFzcyBpbiBlaXRoZXIgYVxyXG4gICAgICogc2luZ2xlIG51bWVyaWMgaW5kZXggb3IgYW4gYXJyYXkgb2YgaW5kZXhlczogWzIsIDMsIDE1LCAyMF0uIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlciBjb250cm9scyBpZlxyXG4gICAgICogY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNzZXRDb2xsaXNpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gRWl0aGVyIGEgc2luZ2xlIHRpbGUgaW5kZXgsIG9yIGFuIGFycmF5IG9mIHRpbGUgaW5kZXhlcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVMYXllcj10cnVlXSAtIElmIHRydWUsIHVwZGF0ZXMgdGhlIGN1cnJlbnQgdGlsZXMgb24gdGhlIGxheWVyLiBTZXQgdG8gZmFsc2UgaWYgbm8gdGlsZXMgaGF2ZSBiZWVuIHBsYWNlZCBmb3Igc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm4gdGhpcyBUaWxlbWFwIG9iamVjdCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbjogZnVuY3Rpb24gKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllciwgdXBkYXRlTGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlNldENvbGxpc2lvbihpbmRleGVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIsIHVwZGF0ZUxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gYSByYW5nZSBvZiB0aWxlcyBpbiBhIGxheWVyIHdob3NlIGluZGV4IGlzIGJldHdlZW4gdGhlIHNwZWNpZmllZCBgc3RhcnRgIGFuZFxyXG4gICAgICogYHN0b3BgIChpbmNsdXNpdmUpLiBDYWxsaW5nIHRoaXMgd2l0aCBhIHN0YXJ0IHZhbHVlIG9mIDEwIGFuZCBhIHN0b3AgdmFsdWUgb2YgMTQgd291bGQgc2V0XHJcbiAgICAgKiBjb2xsaXNpb24gZm9yIHRpbGVzIDEwLCAxMSwgMTIsIDEzIGFuZCAxNC4gVGhlIGBjb2xsaWRlc2AgcGFyYW1ldGVyIGNvbnRyb2xzIGlmIGNvbGxpc2lvbiB3aWxsIGJlXHJcbiAgICAgKiBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3NldENvbGxpc2lvbkJldHdlZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnQgLSBUaGUgZmlyc3QgaW5kZXggb2YgdGhlIHRpbGUgdG8gYmUgc2V0IGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHN0b3AgLSBUaGUgbGFzdCBpbmRleCBvZiB0aGUgdGlsZSB0byBiZSBzZXQgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm4gdGhpcyBUaWxlbWFwIG9iamVjdCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkJldHdlZW46IGZ1bmN0aW9uIChzdGFydCwgc3RvcCwgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRDb2xsaXNpb25CZXR3ZWVuKHN0YXJ0LCBzdG9wLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbGxpc2lvbiBvbiB0aGUgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgY2hlY2tpbmcgdGlsZSBwcm9wZXJ0aWVzLiBJZiBhIHRpbGUgaGFzIGEgcHJvcGVydHlcclxuICAgICAqIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyBvYmplY3QsIGl0cyBjb2xsaXNpb24gZmxhZyB3aWxsIGJlIHNldC4gVGhlIGBjb2xsaWRlc2BcclxuICAgICAqIHBhcmFtZXRlciBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZSBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLiBQYXNzaW5nIGluXHJcbiAgICAgKiBgeyBjb2xsaWRlczogdHJ1ZSB9YCB3b3VsZCB1cGRhdGUgdGhlIGNvbGxpc2lvbiBmbGFnIG9uIGFueSB0aWxlcyB3aXRoIGEgXCJjb2xsaWRlc1wiIHByb3BlcnR5IHRoYXRcclxuICAgICAqIGhhcyBhIHZhbHVlIG9mIHRydWUuIEFueSB0aWxlIHRoYXQgZG9lc24ndCBoYXZlIFwiY29sbGlkZXNcIiBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGlnbm9yZWQuIFlvdSBjYW5cclxuICAgICAqIGFsc28gdXNlIGFuIGFycmF5IG9mIHZhbHVlcywgZS5nLiBgeyB0eXBlczogW1wic3RvbmVcIiwgXCJsYXZhXCIsIFwic2FuZFwiIF0gfWAuIElmIGEgdGlsZSBoYXMgYVxyXG4gICAgICogXCJ0eXBlc1wiIHByb3BlcnR5IHRoYXQgbWF0Y2hlcyBhbnkgb2YgdGhvc2UgdmFsdWVzLCBpdHMgY29sbGlzaW9uIGZsYWcgd2lsbCBiZSB1cGRhdGVkLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3NldENvbGxpc2lvbkJ5UHJvcGVydHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzIC0gQW4gb2JqZWN0IHdpdGggdGlsZSBwcm9wZXJ0aWVzIGFuZCBjb3JyZXNwb25kaW5nIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBJZiB0cnVlIGl0IHdpbGwgZW5hYmxlIGNvbGxpc2lvbi4gSWYgZmFsc2UgaXQgd2lsbCBjbGVhciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcmVjYWxjdWxhdGUgdGhlIHRpbGUgZmFjZXMgYWZ0ZXIgdGhlIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFJldHVybiB0aGlzIFRpbGVtYXAgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlzaW9uQnlQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnRpZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uQnlQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbGxpc2lvbiBvbiBhbGwgdGlsZXMgaW4gdGhlIGdpdmVuIGxheWVyLCBleGNlcHQgZm9yIHRpbGVzIHRoYXQgaGF2ZSBhbiBpbmRleCBzcGVjaWZpZWQgaW5cclxuICAgICAqIHRoZSBnaXZlbiBhcnJheS4gVGhlIGBjb2xsaWRlc2AgcGFyYW1ldGVyIGNvbnRyb2xzIGlmIGNvbGxpc2lvbiB3aWxsIGJlIGVuYWJsZWQgKHRydWUpIG9yXHJcbiAgICAgKiBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3NldENvbGxpc2lvbkJ5RXhjbHVzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJbXX0gaW5kZXhlcyAtIEFuIGFycmF5IG9mIHRoZSB0aWxlIGluZGV4ZXMgdG8gbm90IGJlIGNvdW50ZWQgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm4gdGhpcyBUaWxlbWFwIG9iamVjdCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkJ5RXhjbHVzaW9uOiBmdW5jdGlvbiAoaW5kZXhlcywgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRDb2xsaXNpb25CeUV4Y2x1c2lvbihpbmRleGVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbGxpc2lvbiBvbiB0aGUgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgY2hlY2tpbmcgZWFjaCB0aWxlJ3MgY29sbGlzaW9uIGdyb3VwIGRhdGFcclxuICAgICAqICh0eXBpY2FsbHkgZGVmaW5lZCBpbiBUaWxlZCB3aXRoaW4gdGhlIHRpbGVzZXQgY29sbGlzaW9uIGVkaXRvcikuIElmIGFueSBvYmplY3RzIGFyZSBmb3VuZCB3aXRoaW5cclxuICAgICAqIGEgdGlsZSdzIGNvbGxpc2lvbiBncm91cCwgdGhlIHRpbGUncyBjb2xsaWRpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSBzZXQuIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlclxyXG4gICAgICogY29udHJvbHMgaWYgY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNzZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm4gdGhpcyBUaWxlbWFwIG9iamVjdCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cDogZnVuY3Rpb24gKGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uRnJvbUNvbGxpc2lvbkdyb3VwKGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCBsYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBnbG9iYWwgY29sbGlzaW9uIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdGlsZSBpbmRleCB3aXRoaW4gdGhlIGxheWVyLiBUaGlzIHdpbGwgYWZmZWN0IGFsbFxyXG4gICAgICogdGlsZXMgb24gdGhpcyBsYXllciB0aGF0IGhhdmUgdGhlIHNhbWUgaW5kZXguIElmIGEgY2FsbGJhY2sgaXMgYWxyZWFkeSBzZXQgZm9yIHRoZSB0aWxlIGluZGV4IGl0XHJcbiAgICAgKiB3aWxsIGJlIHJlcGxhY2VkLiBTZXQgdGhlIGNhbGxiYWNrIHRvIG51bGwgdG8gcmVtb3ZlIGl0LiBJZiB5b3Ugd2FudCB0byBzZXQgYSBjYWxsYmFjayBmb3IgYSB0aWxlXHJcbiAgICAgKiBhdCBhIHNwZWNpZmljIGxvY2F0aW9uIG9uIHRoZSBtYXAgdGhlbiBzZWUgc2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwJ3MgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjc2V0VGlsZUluZGV4Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gRWl0aGVyIGEgc2luZ2xlIHRpbGUgaW5kZXgsIG9yIGFuIGFycmF5IG9mIHRpbGUgaW5kZXhlcyB0byBoYXZlIGEgY29sbGlzaW9uIGNhbGxiYWNrIHNldCBmb3IuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSB0aWxlIGlzIGNvbGxpZGVkIHdpdGguXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY2FsbGJhY2tDb250ZXh0IC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFJldHVybiB0aGlzIFRpbGVtYXAgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZUluZGV4Q2FsbGJhY2s6IGZ1bmN0aW9uIChpbmRleGVzLCBjYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0VGlsZUluZGV4Q2FsbGJhY2soaW5kZXhlcywgY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgbGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgY29sbGlzaW9uIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgd2l0aGluIHRoZSBsYXllci5cclxuICAgICAqIElmIGEgY2FsbGJhY2sgaXMgYWxyZWFkeSBzZXQgZm9yIHRoZSB0aWxlIGluZGV4IGl0IHdpbGwgYmUgcmVwbGFjZWQuIFNldCB0aGUgY2FsbGJhY2sgdG8gbnVsbCB0b1xyXG4gICAgICogcmVtb3ZlIGl0LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3NldFRpbGVMb2NhdGlvbkNhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdGlsZSBpcyBjb2xsaWRlZCB3aXRoLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjYWxsYmFja0NvbnRleHRdIC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFJldHVybiB0aGlzIFRpbGVtYXAgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2s6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRUaWxlTG9jYXRpb25DYWxsYmFjayh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBsYXllciB0byB0aGUgTGF5ZXJEYXRhIGFzc29jaWF0ZWQgd2l0aCBgbGF5ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjc2V0TGF5ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIG5hbWUgb2YgdGhlXHJcbiAgICAgKiBsYXllciBmcm9tIFRpbGVkLCB0aGUgaW5kZXggb2YgdGhlIGxheWVyIGluIHRoZSBtYXAsIGEgRHluYW1pY1RpbGVtYXBMYXllciBvciBhXHJcbiAgICAgKiBTdGF0aWNUaWxlbWFwTGF5ZXIuIElmIG5vdCBnaXZlbiB3aWxsIGRlZmF1bHQgdG8gdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFRoaXMgVGlsZW1hcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldExheWVyOiBmdW5jdGlvbiAobGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRMYXllckluZGV4KGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGF5ZXJJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmFzZSB0aWxlIHNpemUgZm9yIHRoZSBtYXAuIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWF0Y2ggdGhlIHRpbGVXaWR0aCBhbmRcclxuICAgICAqIHRpbGVIZWlnaHQgZm9yIGFsbCBsYXllcnMuIFRoaXMgYWxzbyB1cGRhdGVzIHRoZSBiYXNlIHNpemUgb24gYWxsIHRpbGVzIGFjcm9zcyBhbGwgbGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjc2V0QmFzZVRpbGVTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdGlsZXMgdGhlIG1hcCB1c2VzIGZvciBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxlcyB0aGUgbWFwIHVzZXMgZm9yIGNhbGN1bGF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gVGhpcyBUaWxlbWFwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0QmFzZVRpbGVTaXplOiBmdW5jdGlvbiAodGlsZVdpZHRoLCB0aWxlSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGlsZVdpZHRoID0gdGlsZVdpZHRoO1xyXG4gICAgICAgIHRoaXMudGlsZUhlaWdodCA9IHRpbGVIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy53aWR0aEluUGl4ZWxzID0gdGhpcy53aWR0aCAqIHRpbGVXaWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodEluUGl4ZWxzID0gdGhpcy5oZWlnaHQgKiB0aWxlSGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJhc2UgdGlsZSBzaXplIG9uIGFsbCBsYXllcnMgJiB0aWxlc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXllcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxheWVyc1tpXS5iYXNlVGlsZVdpZHRoID0gdGlsZVdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLmxheWVyc1tpXS5iYXNlVGlsZUhlaWdodCA9IHRpbGVIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFwRGF0YSA9IHRoaXMubGF5ZXJzW2ldLmRhdGE7XHJcbiAgICAgICAgICAgIHZhciBtYXBXaWR0aCA9IHRoaXMubGF5ZXJzW2ldLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgbWFwSGVpZ2h0ID0gdGhpcy5sYXllcnNbaV0uaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbWFwSGVpZ2h0OyByb3crKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbWFwV2lkdGg7IGNvbCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aWxlID0gbWFwRGF0YVtyb3ddW2NvbF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWxlICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5zZXRTaXplKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGlsZSBzaXplIGZvciBhIHNwZWNpZmljIGBsYXllcmAuIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWF0Y2ggdGhlIG1hcCdzXHJcbiAgICAgKiB0aWxlV2lkdGggYW5kIHRpbGVIZWlnaHQgZm9yIGFsbCBsYXllcnMuIFRoaXMgd2lsbCBzZXQgdGhlIHRpbGUgc2l6ZSBmb3IgdGhlIGxheWVyIGFuZCBhbnlcclxuICAgICAqIHRpbGVzIHRoZSBsYXllciBoYXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCNzZXRMYXllclRpbGVTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdGlsZXMgKGluIHBpeGVscykgaW4gdGhlIGxheWVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlSGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdGlsZXMgKGluIHBpeGVscykgaW4gdGhlIGxheWVyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgbmFtZSBvZiB0aGVcclxuICAgICAqIGxheWVyIGZyb20gVGlsZWQsIHRoZSBpbmRleCBvZiB0aGUgbGF5ZXIgaW4gdGhlIG1hcCwgYSBEeW5hbWljVGlsZW1hcExheWVyIG9yIGFcclxuICAgICAqIFN0YXRpY1RpbGVtYXBMYXllci4gSWYgbm90IGdpdmVuIHdpbGwgZGVmYXVsdCB0byB0aGUgbWFwJ3MgY3VycmVudCBsYXllciBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gVGhpcyBUaWxlbWFwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TGF5ZXJUaWxlU2l6ZTogZnVuY3Rpb24gKHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gICAgICAgIGxheWVyLnRpbGVXaWR0aCA9IHRpbGVXaWR0aDtcclxuICAgICAgICBsYXllci50aWxlSGVpZ2h0ID0gdGlsZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIG1hcERhdGEgPSBsYXllci5kYXRhO1xyXG4gICAgICAgIHZhciBtYXBXaWR0aCA9IGxheWVyLndpZHRoO1xyXG4gICAgICAgIHZhciBtYXBIZWlnaHQgPSBsYXllci5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG1hcEhlaWdodDsgcm93KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBtYXBXaWR0aDsgY29sKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB0aWxlID0gbWFwRGF0YVtyb3ddW2NvbF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRpbGUgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5zZXRTaXplKHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNodWZmbGVzIHRoZSB0aWxlcyBpbiBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiAoc3BlY2lmaWVkIGluIHRpbGUgY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGUgZ2l2ZW5cclxuICAgICAqIGxheWVyLiBJdCB3aWxsIG9ubHkgcmFuZG9taXplIHRoZSB0aWxlcyBpbiB0aGF0IGFyZWEsIHNvIGlmIHRoZXkncmUgYWxsIHRoZSBzYW1lIG5vdGhpbmcgd2lsbFxyXG4gICAgICogYXBwZWFyIHRvIGhhdmUgY2hhbmdlZCEgVGhpcyBtZXRob2Qgb25seSBtb2RpZmllcyB0aWxlIGluZGV4ZXMgYW5kIGRvZXMgbm90IGNoYW5nZSBjb2xsaXNpb25cclxuICAgICAqIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICogVGhpcyBjYW5ub3QgYmUgYXBwbGllZCB0byBTdGF0aWNUaWxlbWFwTGF5ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjc2h1ZmZsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IFJldHVybiB0aGlzIFRpbGVtYXAgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU3RhdGljQ2FsbChsYXllciwgJ3NodWZmbGUnKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2h1ZmZsZSh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGdpdmVuIGluIHRpbGUgY29vcmRpbmF0ZXMpIGZvciB0aWxlcyB3aXRoIGFuIGluZGV4IG1hdGNoaW5nXHJcbiAgICAgKiBgaW5kZXhBYCBhbmQgc3dhcHMgdGhlbiB3aXRoIGBpbmRleEJgLiBUaGlzIG9ubHkgbW9kaWZpZXMgdGhlIGluZGV4IGFuZCBkb2VzIG5vdCBjaGFuZ2UgY29sbGlzaW9uXHJcbiAgICAgKiBpbmZvcm1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqIFRoaXMgY2Fubm90IGJlIGFwcGxpZWQgdG8gU3RhdGljVGlsZW1hcExheWVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3N3YXBCeUluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVBIC0gRmlyc3QgdGlsZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUIgLSBTZWNvbmQgdGlsZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfSBSZXR1cm4gdGhpcyBUaWxlbWFwIG9iamVjdCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHN3YXBCeUluZGV4OiBmdW5jdGlvbiAoaW5kZXhBLCBpbmRleEIsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU3RhdGljQ2FsbChsYXllciwgJ3N3YXBCeUluZGV4JykpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlN3YXBCeUluZGV4KGluZGV4QSwgaW5kZXhCLCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFggY29vcmRpbmF0ZXMgKHRpbGUgdW5pdHMpIHRvIHdvcmxkIFggY29vcmRpbmF0ZXMgKHBpeGVscyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3RpbGVUb1dvcmxkWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIpfSBbbGF5ZXJdIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBSZXR1cm5zIGEgbnVtYmVyLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgdGlsZVRvV29ybGRYOiBmdW5jdGlvbiAodGlsZVgsIGNhbWVyYSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5UaWxlVG9Xb3JsZFgodGlsZVgsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIGZyb20gdGlsZSBZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBZIGNvb3JkaW5hdGVzIChwaXhlbHMpLCBmYWN0b3JpbmcgaW4gdGhlXHJcbiAgICAgKiBsYXllcnMgcG9zaXRpb24sIHNjYWxlIGFuZCBzY3JvbGwuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbGF5ZXIgc3BlY2lmaWVkLCB0aGUgbWFwcyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcCN0aWxlVG9Xb3JsZFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyXHJcbiAgICAgKiB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9udW1iZXJ9IFJldHVybnMgYSBudW1iZXIsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICB0aWxlVG9Xb3JsZFk6IGZ1bmN0aW9uICh0aWxlWCwgY2FtZXJhLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLlRpbGVUb1dvcmxkWSh0aWxlWCwgY2FtZXJhLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFhZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBYWSBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLiBUaGlzIHdpbGwgcmV0dXJuIGEgbmV3IFZlY3RvcjIgb2JqZWN0IG9yIHVwZGF0ZSB0aGUgZ2l2ZW5cclxuICAgICAqIGBwb2ludGAgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjdGlsZVRvV29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlY3RvcjIgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5NYXRoLlZlY3RvcjJ9IFJldHVybnMgYSBwb2ludCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHRpbGVUb1dvcmxkWFk6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHBvaW50LCBjYW1lcmEsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuVGlsZVRvV29ybGRYWSh0aWxlWCwgdGlsZVksIHBvaW50LCBjYW1lcmEsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSYW5kb21pemVzIHRoZSBpbmRleGVzIG9mIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHRpbGVzIChpbiB0aWxlIGNvb3JkaW5hdGVzKSB3aXRoaW4gdGhlXHJcbiAgICAgKiBzcGVjaWZpZWQgbGF5ZXIuIEVhY2ggdGlsZSB3aWxsIHJlY2VpdmUgYSBuZXcgaW5kZXguIE5ldyBpbmRleGVzIGFyZSBkcmF3biBmcm9tIHRoZSBnaXZlblxyXG4gICAgICogd2VpZ2h0ZWRJbmRleGVzIGFycmF5LiBBbiBleGFtcGxlIHdlaWdodGVkIGFycmF5OlxyXG4gICAgICpcclxuICAgICAqIFtcclxuICAgICAqICB7IGluZGV4OiA2LCB3ZWlnaHQ6IDQgfSwgICAgLy8gUHJvYmFiaWxpdHkgb2YgaW5kZXggNiBpcyA0IC8gOFxyXG4gICAgICogIHsgaW5kZXg6IDcsIHdlaWdodDogMiB9LCAgICAvLyBQcm9iYWJpbGl0eSBvZiBpbmRleCA3IHdvdWxkIGJlIDIgLyA4XHJcbiAgICAgKiAgeyBpbmRleDogOCwgd2VpZ2h0OiAxLjUgfSwgIC8vIFByb2JhYmlsaXR5IG9mIGluZGV4IDggd291bGQgYmUgMS41IC8gOFxyXG4gICAgICogIHsgaW5kZXg6IDI2LCB3ZWlnaHQ6IDAuNSB9ICAvLyBQcm9iYWJpbGl0eSBvZiBpbmRleCAyNyB3b3VsZCBiZSAwLjUgLyA4XHJcbiAgICAgKiBdXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb2JhYmlsaXR5IG9mIGFueSBpbmRleCBiZWluZyBjaG9vc2UgaXMgKHRoZSBpbmRleCdzIHdlaWdodCkgLyAoc3VtIG9mIGFsbCB3ZWlnaHRzKS4gVGhpc1xyXG4gICAgICogbWV0aG9kIG9ubHkgbW9kaWZpZXMgdGlsZSBpbmRleGVzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcCdzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC4gVGhpc1xyXG4gICAgICogY2Fubm90IGJlIGFwcGxpZWQgdG8gU3RhdGljVGlsZW1hcExheWVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3dlaWdodGVkUmFuZG9taXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3RbXX0gW3dlaWdodGVkSW5kZXhlc10gLSBBbiBhcnJheSBvZiBvYmplY3RzIHRvIHJhbmRvbWx5IGRyYXcgZnJvbSBkdXJpbmdcclxuICAgICAqIHJhbmRvbWl6YXRpb24uIFRoZXkgc2hvdWxkIGJlIGluIHRoZSBmb3JtOiB7IGluZGV4OiAwLCB3ZWlnaHQ6IDQgfSBvclxyXG4gICAgICogeyBpbmRleDogWzAsIDFdLCB3ZWlnaHQ6IDQgfSBpZiB5b3Ugd2lzaCB0byBkcmF3IGZyb20gbXVsdGlwbGUgdGlsZSBpbmRleGVzLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllciB0byB1c2UuIElmIG5vdCBnaXZlbiB0aGUgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJuIHRoaXMgVGlsZW1hcCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICB3ZWlnaHRlZFJhbmRvbWl6ZTogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgd2VpZ2h0ZWRJbmRleGVzLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTdGF0aWNDYWxsKGxheWVyLCAnd2VpZ2h0ZWRSYW5kb21pemUnKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuV2VpZ2h0ZWRSYW5kb21pemUodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCB3ZWlnaHRlZEluZGV4ZXMsIGxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB3b3JsZCBYIGNvb3JkaW5hdGVzIChwaXhlbHMpIHRvIHRpbGUgWCBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXBzIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlbWFwI3dvcmxkVG9UaWxlWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0Zsb29yPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcm91bmQgdGhlIHRpbGUgY29vcmRpbmF0ZSBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9IFtsYXllcl0gLSBUaGUgdGlsZSBsYXllclxyXG4gICAgICogdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBSZXR1cm5zIGEgbnVtYmVyLCBvciBudWxsIGlmIHRoZSBsYXllciBnaXZlbiB3YXMgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgd29ybGRUb1RpbGVYOiBmdW5jdGlvbiAod29ybGRYLCBzbmFwVG9GbG9vciwgY2FtZXJhLCBsYXllcilcclxuICAgIHtcclxuICAgICAgICBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXIpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXIgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLldvcmxkVG9UaWxlWCh3b3JsZFgsIHNuYXBUb0Zsb29yLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHdvcmxkIFkgY29vcmRpbmF0ZXMgKHBpeGVscykgdG8gdGlsZSBZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjd29ybGRUb1RpbGVZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBiZSBjb252ZXJ0ZWQsIGluIHBpeGVscywgbm90IHRpbGVzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvRmxvb3I9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByb3VuZCB0aGUgdGlsZSBjb29yZGluYXRlIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P251bWJlcn0gUmV0dXJucyBhIG51bWJlciwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHdvcmxkVG9UaWxlWTogZnVuY3Rpb24gKHdvcmxkWSwgc25hcFRvRmxvb3IsIGNhbWVyYSwgbGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVyKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVyID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5Xb3JsZFRvVGlsZVkod29ybGRZLCBzbmFwVG9GbG9vciwgY2FtZXJhLCBsYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB3b3JsZCBYWSBjb29yZGluYXRlcyAocGl4ZWxzKSB0byB0aWxlIFhZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLiBUaGlzIHdpbGwgcmV0dXJuIGEgbmV3IFZlY3RvcjIgb2JqZWN0IG9yIHVwZGF0ZSB0aGUgZ2l2ZW5cclxuICAgICAqIGBwb2ludGAgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGxheWVyIHNwZWNpZmllZCwgdGhlIG1hcHMgY3VycmVudCBsYXllciBpcyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjd29ybGRUb1RpbGVYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGJlIGNvbnZlcnRlZCwgaW4gcGl4ZWxzLCBub3QgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9GbG9vcj10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJvdW5kIHRoZSB0aWxlIGNvb3JkaW5hdGUgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlY3RvcjIgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcnxQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyKX0gW2xheWVyXSAtIFRoZSB0aWxlIGxheWVyIHRvIHVzZS4gSWYgbm90IGdpdmVuIHRoZSBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5NYXRoLlZlY3RvcjJ9IFJldHVybnMgYSBwb2ludCwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHdvcmxkVG9UaWxlWFk6IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgc25hcFRvRmxvb3IsIHBvaW50LCBjYW1lcmEsIGxheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcik7XHJcblxyXG4gICAgICAgIGlmIChsYXllciA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuV29ybGRUb1RpbGVYWSh3b3JsZFgsIHdvcmxkWSwgc25hcFRvRmxvb3IsIHBvaW50LCBjYW1lcmEsIGxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIGludGVybmFsbHkgdG8gY2hlY2sgaWYgYSBsYXllciBpcyBzdGF0aWMgYW5kIHByaW50cyBvdXQgYSB3YXJuaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVtYXAjX2lzU3RhdGljQ2FsbFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIF9pc1N0YXRpY0NhbGw6IGZ1bmN0aW9uIChsYXllciwgZnVuY3Rpb25OYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChsYXllci50aWxlbWFwTGF5ZXIgaW5zdGFuY2VvZiBTdGF0aWNUaWxlbWFwTGF5ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZnVuY3Rpb25OYW1lICsgJzogWW91IGNhbm5vdCBjaGFuZ2UgdGhlIHRpbGVzIGluIGEgc3RhdGljIHRpbGVtYXAgbGF5ZXInKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGlsZW1hcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/Tilemap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/TilemapCreator.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/TilemapCreator.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../gameobjects/GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar ParseToTilemap = __webpack_require__(/*! ./ParseToTilemap */ \"./node_modules/phaser/src/tilemaps/ParseToTilemap.js\");\r\n\r\n/**\r\n * Creates a Tilemap from the given key or data, or creates a blank Tilemap if no key/data provided.\r\n * When loading from CSV or a 2D array, you should specify the tileWidth & tileHeight. When parsing\r\n * from a map from Tiled, the tileWidth, tileHeight, width & height will be pulled from the map\r\n * data. For an empty map, you should specify tileWidth, tileHeight, width & height.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#tilemap\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Types.Tilemaps.TilemapConfig} [config] - The config options for the Tilemap.\r\n * \r\n * @return {Phaser.Tilemaps.Tilemap}\r\n */\r\nGameObjectCreator.register('tilemap', function (config)\r\n{\r\n    // Defaults are applied in ParseToTilemap\r\n    var c = (config !== undefined) ? config : {};\r\n\r\n    return ParseToTilemap(\r\n        this.scene,\r\n        c.key,\r\n        c.tileWidth,\r\n        c.tileHeight,\r\n        c.width,\r\n        c.height,\r\n        c.data,\r\n        c.insertNull\r\n    );\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlbWFwQ3JlYXRvci5qcz9iOWRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxvR0FBa0M7QUFDbEUscUJBQXFCLG1CQUFPLENBQUMsOEVBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQztBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL1RpbGVtYXBDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgUGFyc2VUb1RpbGVtYXAgPSByZXF1aXJlKCcuL1BhcnNlVG9UaWxlbWFwJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIFRpbGVtYXAgZnJvbSB0aGUgZ2l2ZW4ga2V5IG9yIGRhdGEsIG9yIGNyZWF0ZXMgYSBibGFuayBUaWxlbWFwIGlmIG5vIGtleS9kYXRhIHByb3ZpZGVkLlxyXG4gKiBXaGVuIGxvYWRpbmcgZnJvbSBDU1Ygb3IgYSAyRCBhcnJheSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZSB0aWxlV2lkdGggJiB0aWxlSGVpZ2h0LiBXaGVuIHBhcnNpbmdcclxuICogZnJvbSBhIG1hcCBmcm9tIFRpbGVkLCB0aGUgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB3aWR0aCAmIGhlaWdodCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBtYXBcclxuICogZGF0YS4gRm9yIGFuIGVtcHR5IG1hcCwgeW91IHNob3VsZCBzcGVjaWZ5IHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgd2lkdGggJiBoZWlnaHQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3RpbGVtYXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5UaWxlbWFwQ29uZmlnfSBbY29uZmlnXSAtIFRoZSBjb25maWcgb3B0aW9ucyBmb3IgdGhlIFRpbGVtYXAuXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH1cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd0aWxlbWFwJywgZnVuY3Rpb24gKGNvbmZpZylcclxue1xyXG4gICAgLy8gRGVmYXVsdHMgYXJlIGFwcGxpZWQgaW4gUGFyc2VUb1RpbGVtYXBcclxuICAgIHZhciBjID0gKGNvbmZpZyAhPT0gdW5kZWZpbmVkKSA/IGNvbmZpZyA6IHt9O1xyXG5cclxuICAgIHJldHVybiBQYXJzZVRvVGlsZW1hcChcclxuICAgICAgICB0aGlzLnNjZW5lLFxyXG4gICAgICAgIGMua2V5LFxyXG4gICAgICAgIGMudGlsZVdpZHRoLFxyXG4gICAgICAgIGMudGlsZUhlaWdodCxcclxuICAgICAgICBjLndpZHRoLFxyXG4gICAgICAgIGMuaGVpZ2h0LFxyXG4gICAgICAgIGMuZGF0YSxcclxuICAgICAgICBjLmluc2VydE51bGxcclxuICAgICk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/TilemapCreator.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/TilemapFactory.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/TilemapFactory.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar ParseToTilemap = __webpack_require__(/*! ./ParseToTilemap */ \"./node_modules/phaser/src/tilemaps/ParseToTilemap.js\");\r\n\r\n/**\r\n * Creates a Tilemap from the given key or data, or creates a blank Tilemap if no key/data provided.\r\n * When loading from CSV or a 2D array, you should specify the tileWidth & tileHeight. When parsing\r\n * from a map from Tiled, the tileWidth, tileHeight, width & height will be pulled from the map\r\n * data. For an empty map, you should specify tileWidth, tileHeight, width & height.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#tilemap\r\n * @since 3.0.0\r\n *\r\n * @param {string} [key] - The key in the Phaser cache that corresponds to the loaded tilemap data.\r\n * @param {integer} [tileWidth=32] - The width of a tile in pixels. Pass in `null` to leave as the\r\n * default.\r\n * @param {integer} [tileHeight=32] - The height of a tile in pixels. Pass in `null` to leave as the\r\n * default.\r\n * @param {integer} [width=10] - The width of the map in tiles. Pass in `null` to leave as the\r\n * default.\r\n * @param {integer} [height=10] - The height of the map in tiles. Pass in `null` to leave as the\r\n * default.\r\n * @param {integer[][]} [data] - Instead of loading from the cache, you can also load directly from\r\n * a 2D array of tile indexes. Pass in `null` for no data.\r\n * @param {boolean} [insertNull=false] - Controls how empty tiles, tiles with an index of -1, in the\r\n * map data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n * \r\n * @return {Phaser.Tilemaps.Tilemap}\r\n */\r\nGameObjectFactory.register('tilemap', function (key, tileWidth, tileHeight, width, height, data, insertNull)\r\n{\r\n    // Allow users to specify null to indicate that they want the default value, since null is\r\n    // shorter & more legible than undefined. Convert null to undefined to allow ParseToTilemap\r\n    // defaults to take effect.\r\n\r\n    if (key === null) { key = undefined; }\r\n    if (tileWidth === null) { tileWidth = undefined; }\r\n    if (tileHeight === null) { tileHeight = undefined; }\r\n    if (width === null) { width = undefined; }\r\n    if (height === null) { height = undefined; }\r\n\r\n    return ParseToTilemap(this.scene, key, tileWidth, tileHeight, width, height, data, insertNull);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlbWFwRmFjdG9yeS5qcz8zNWMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxvR0FBa0M7QUFDbEUscUJBQXFCLG1CQUFPLENBQUMsOEVBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4Qyw2QkFBNkIsdUJBQXVCO0FBQ3BELDhCQUE4Qix3QkFBd0I7QUFDdEQseUJBQXlCLG1CQUFtQjtBQUM1QywwQkFBMEIsb0JBQW9COztBQUU5QztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlbWFwRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIFBhcnNlVG9UaWxlbWFwID0gcmVxdWlyZSgnLi9QYXJzZVRvVGlsZW1hcCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBUaWxlbWFwIGZyb20gdGhlIGdpdmVuIGtleSBvciBkYXRhLCBvciBjcmVhdGVzIGEgYmxhbmsgVGlsZW1hcCBpZiBubyBrZXkvZGF0YSBwcm92aWRlZC5cclxuICogV2hlbiBsb2FkaW5nIGZyb20gQ1NWIG9yIGEgMkQgYXJyYXksIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUgdGlsZVdpZHRoICYgdGlsZUhlaWdodC4gV2hlbiBwYXJzaW5nXHJcbiAqIGZyb20gYSBtYXAgZnJvbSBUaWxlZCwgdGhlIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgd2lkdGggJiBoZWlnaHQgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgbWFwXHJcbiAqIGRhdGEuIEZvciBhbiBlbXB0eSBtYXAsIHlvdSBzaG91bGQgc3BlY2lmeSB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIHdpZHRoICYgaGVpZ2h0LlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSN0aWxlbWFwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUga2V5IGluIHRoZSBQaGFzZXIgY2FjaGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbG9hZGVkIHRpbGVtYXAgZGF0YS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVdpZHRoPTMyXSAtIFRoZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLiBQYXNzIGluIGBudWxsYCB0byBsZWF2ZSBhcyB0aGVcclxuICogZGVmYXVsdC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZUhlaWdodD0zMl0gLSBUaGUgaGVpZ2h0IG9mIGEgdGlsZSBpbiBwaXhlbHMuIFBhc3MgaW4gYG51bGxgIHRvIGxlYXZlIGFzIHRoZVxyXG4gKiBkZWZhdWx0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD0xMF0gLSBUaGUgd2lkdGggb2YgdGhlIG1hcCBpbiB0aWxlcy4gUGFzcyBpbiBgbnVsbGAgdG8gbGVhdmUgYXMgdGhlXHJcbiAqIGRlZmF1bHQuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xMF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBtYXAgaW4gdGlsZXMuIFBhc3MgaW4gYG51bGxgIHRvIGxlYXZlIGFzIHRoZVxyXG4gKiBkZWZhdWx0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJbXVtdfSBbZGF0YV0gLSBJbnN0ZWFkIG9mIGxvYWRpbmcgZnJvbSB0aGUgY2FjaGUsIHlvdSBjYW4gYWxzbyBsb2FkIGRpcmVjdGx5IGZyb21cclxuICogYSAyRCBhcnJheSBvZiB0aWxlIGluZGV4ZXMuIFBhc3MgaW4gYG51bGxgIGZvciBubyBkYXRhLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbnNlcnROdWxsPWZhbHNlXSAtIENvbnRyb2xzIGhvdyBlbXB0eSB0aWxlcywgdGlsZXMgd2l0aCBhbiBpbmRleCBvZiAtMSwgaW4gdGhlXHJcbiAqIG1hcCBkYXRhIGFyZSBoYW5kbGVkLiBJZiBgdHJ1ZWAsIGVtcHR5IGxvY2F0aW9ucyB3aWxsIGdldCBhIHZhbHVlIG9mIGBudWxsYC4gSWYgYGZhbHNlYCwgZW1wdHlcclxuICogbG9jYXRpb24gd2lsbCBnZXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLiBJZiB5b3UndmUgYSBsYXJnZSBzcGFyc2VseSBwb3B1bGF0ZWQgbWFwIGFuZFxyXG4gKiB0aGUgdGlsZSBkYXRhIGRvZXNuJ3QgbmVlZCB0byBjaGFuZ2UgdGhlbiBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gYHRydWVgIHdpbGwgaGVscCB3aXRoIG1lbW9yeVxyXG4gKiBjb25zdW1wdGlvbi4gSG93ZXZlciBpZiB5b3VyIG1hcCBpcyBzbWFsbCBvciB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIHRpbGVzIGR5bmFtaWNhbGx5LCB0aGVuIGxlYXZlXHJcbiAqIHRoZSBkZWZhdWx0IHZhbHVlIHNldC5cclxuICogXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlbWFwfVxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3RpbGVtYXAnLCBmdW5jdGlvbiAoa2V5LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGRhdGEsIGluc2VydE51bGwpXHJcbntcclxuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNwZWNpZnkgbnVsbCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgd2FudCB0aGUgZGVmYXVsdCB2YWx1ZSwgc2luY2UgbnVsbCBpc1xyXG4gICAgLy8gc2hvcnRlciAmIG1vcmUgbGVnaWJsZSB0aGFuIHVuZGVmaW5lZC4gQ29udmVydCBudWxsIHRvIHVuZGVmaW5lZCB0byBhbGxvdyBQYXJzZVRvVGlsZW1hcFxyXG4gICAgLy8gZGVmYXVsdHMgdG8gdGFrZSBlZmZlY3QuXHJcblxyXG4gICAgaWYgKGtleSA9PT0gbnVsbCkgeyBrZXkgPSB1bmRlZmluZWQ7IH1cclxuICAgIGlmICh0aWxlV2lkdGggPT09IG51bGwpIHsgdGlsZVdpZHRoID0gdW5kZWZpbmVkOyB9XHJcbiAgICBpZiAodGlsZUhlaWdodCA9PT0gbnVsbCkgeyB0aWxlSGVpZ2h0ID0gdW5kZWZpbmVkOyB9XHJcbiAgICBpZiAod2lkdGggPT09IG51bGwpIHsgd2lkdGggPSB1bmRlZmluZWQ7IH1cclxuICAgIGlmIChoZWlnaHQgPT09IG51bGwpIHsgaGVpZ2h0ID0gdW5kZWZpbmVkOyB9XHJcblxyXG4gICAgcmV0dXJuIFBhcnNlVG9UaWxlbWFwKHRoaXMuc2NlbmUsIGtleSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCBpbnNlcnROdWxsKTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/TilemapFactory.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/Tileset.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/Tileset.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Tileset is a combination of an image containing the tiles and a container for data about\r\n * each tile.\r\n *\r\n * @class Tileset\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tileset in the map data.\r\n * @param {integer} firstgid - The first tile index this tileset contains.\r\n * @param {integer} [tileWidth=32] - Width of each tile (in pixels).\r\n * @param {integer} [tileHeight=32] - Height of each tile (in pixels).\r\n * @param {integer} [tileMargin=0] - The margin around all tiles in the sheet (in pixels).\r\n * @param {integer} [tileSpacing=0] - The spacing between each tile in the sheet (in pixels).\r\n * @param {object} [tileProperties={}] - Custom properties defined per tile in the Tileset.\r\n * These typically are custom properties created in Tiled when editing a tileset.\r\n * @param {object} [tileData={}] - Data stored per tile. These typically are created in Tiled\r\n * when editing a tileset, e.g. from Tiled's tile collision editor or terrain editor.\r\n */\r\nvar Tileset = new Class({\r\n\r\n    initialize:\r\n\r\n    function Tileset (name, firstgid, tileWidth, tileHeight, tileMargin, tileSpacing, tileProperties, tileData)\r\n    {\r\n        if (tileWidth === undefined || tileWidth <= 0) { tileWidth = 32; }\r\n        if (tileHeight === undefined || tileHeight <= 0) { tileHeight = 32; }\r\n        if (tileMargin === undefined) { tileMargin = 0; }\r\n        if (tileSpacing === undefined) { tileSpacing = 0; }\r\n        if (tileProperties === undefined) { tileProperties = {}; }\r\n        if (tileData === undefined) { tileData = {}; }\r\n\r\n        /**\r\n         * The name of the Tileset.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = name;\r\n\r\n        /**\r\n         * The starting index of the first tile index this Tileset contains.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#firstgid\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.firstgid = firstgid;\r\n\r\n        /**\r\n         * The width of each tile (in pixels). Use setTileSize to change.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileWidth\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.tileWidth = tileWidth;\r\n\r\n        /**\r\n         * The height of each tile (in pixels). Use setTileSize to change.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileHeight\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.tileHeight = tileHeight;\r\n\r\n        /**\r\n         * The margin around the tiles in the sheet (in pixels). Use `setSpacing` to change.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileMargin\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.tileMargin = tileMargin;\r\n\r\n        /**\r\n         * The spacing between each the tile in the sheet (in pixels). Use `setSpacing` to change.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileSpacing\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.tileSpacing = tileSpacing;\r\n\r\n        /**\r\n         * Tileset-specific properties per tile that are typically defined in the Tiled editor in the\r\n         * Tileset editor.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileProperties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileProperties = tileProperties;\r\n\r\n        /**\r\n         * Tileset-specific data per tile that are typically defined in the Tiled editor, e.g. within\r\n         * the Tileset collision editor. This is where collision objects and terrain are stored.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#tileData\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileData = tileData;\r\n\r\n        /**\r\n         * The cached image that contains the individual tiles. Use setImage to set.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#image\r\n         * @type {?Phaser.Textures.Texture}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.image = null;\r\n\r\n        /**\r\n         * The gl texture used by the WebGL renderer.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#glTexture\r\n         * @type {?WebGLTexture}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.glTexture = null;\r\n\r\n        /**\r\n         * The number of tile rows in the the tileset.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#rows\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.rows = 0;\r\n\r\n        /**\r\n         * The number of tile columns in the tileset.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#columns\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.columns = 0;\r\n\r\n        /**\r\n         * The total number of tiles in the tileset.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#total\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.total = 0;\r\n\r\n        /**\r\n         * The look-up table to specific tile image texture coordinates (UV in pixels). Each element\r\n         * contains the coordinates for a tile in an object of the form {x, y}.\r\n         *\r\n         * @name Phaser.Tilemaps.Tileset#texCoordinates\r\n         * @type {object[]}\r\n         * @readonly\r\n         * @since 3.0.0\r\n        */\r\n        this.texCoordinates = [];\r\n    },\r\n\r\n    /**\r\n     * Get a tiles properties that are stored in the Tileset. Returns null if tile index is not\r\n     * contained in this Tileset. This is typically defined in Tiled under the Tileset editor.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#getTileProperties\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileIndex - The unique id of the tile across all tilesets in the map.\r\n     *\r\n     * @return {?(object|undefined)}\r\n     */\r\n    getTileProperties: function (tileIndex)\r\n    {\r\n        if (!this.containsTileIndex(tileIndex)) { return null; }\r\n\r\n        return this.tileProperties[tileIndex - this.firstgid];\r\n    },\r\n\r\n    /**\r\n     * Get a tile's data that is stored in the Tileset. Returns null if tile index is not contained\r\n     * in this Tileset. This is typically defined in Tiled and will contain both Tileset collision\r\n     * info and terrain mapping.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#getTileData\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileIndex - The unique id of the tile across all tilesets in the map.\r\n     *\r\n     * @return {?object|undefined}\r\n     */\r\n    getTileData: function (tileIndex)\r\n    {\r\n        if (!this.containsTileIndex(tileIndex)) { return null; }\r\n\r\n        return this.tileData[tileIndex - this.firstgid];\r\n    },\r\n\r\n    /**\r\n     * Get a tile's collision group that is stored in the Tileset. Returns null if tile index is not\r\n     * contained in this Tileset. This is typically defined within Tiled's tileset collision editor.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#getTileCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileIndex - The unique id of the tile across all tilesets in the map.\r\n     *\r\n     * @return {?object}\r\n     */\r\n    getTileCollisionGroup: function (tileIndex)\r\n    {\r\n        var data = this.getTileData(tileIndex);\r\n\r\n        return (data && data.objectgroup) ? data.objectgroup : null;\r\n    },\r\n\r\n    /**\r\n     * Returns true if and only if this Tileset contains the given tile index.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#containsTileIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileIndex - The unique id of the tile across all tilesets in the map.\r\n     *\r\n     * @return {boolean}\r\n     */\r\n    containsTileIndex: function (tileIndex)\r\n    {\r\n        return (\r\n            tileIndex >= this.firstgid &&\r\n            tileIndex < (this.firstgid + this.total)\r\n        );\r\n    },\r\n\r\n    /**\r\n     * Returns the texture coordinates (UV in pixels) in the Tileset image for the given tile index.\r\n     * Returns null if tile index is not contained in this Tileset.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#getTileTextureCoordinates\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileIndex - The unique id of the tile across all tilesets in the map.\r\n     *\r\n     * @return {?object} Object in the form { x, y } representing the top-left UV coordinate\r\n     * within the Tileset image.\r\n     */\r\n    getTileTextureCoordinates: function (tileIndex)\r\n    {\r\n        if (!this.containsTileIndex(tileIndex)) { return null; }\r\n\r\n        return this.texCoordinates[tileIndex - this.firstgid];\r\n    },\r\n\r\n    /**\r\n     * Sets the image associated with this Tileset and updates the tile data (rows, columns, etc.).\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#setImage\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Textures.Texture} texture - The image that contains the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tileset} This Tileset object.\r\n     */\r\n    setImage: function (texture)\r\n    {\r\n        this.image = texture;\r\n\r\n        this.glTexture = texture.get().source.glTexture;\r\n\r\n        this.updateTileData(this.image.source[0].width, this.image.source[0].height);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the tile width & height and updates the tile data (rows, columns, etc.).\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#setTileSize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileWidth] - The width of a tile in pixels.\r\n     * @param {integer} [tileHeight] - The height of a tile in pixels.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tileset} This Tileset object.\r\n     */\r\n    setTileSize: function (tileWidth, tileHeight)\r\n    {\r\n        if (tileWidth !== undefined) { this.tileWidth = tileWidth; }\r\n        if (tileHeight !== undefined) { this.tileHeight = tileHeight; }\r\n\r\n        if (this.image)\r\n        {\r\n            this.updateTileData(this.image.source[0].width, this.image.source[0].height);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets the tile margin & spacing and updates the tile data (rows, columns, etc.).\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#setSpacing\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [margin] - The margin around the tiles in the sheet (in pixels).\r\n     * @param {integer} [spacing] - The spacing between the tiles in the sheet (in pixels).\r\n     *\r\n     * @return {Phaser.Tilemaps.Tileset} This Tileset object.\r\n     */\r\n    setSpacing: function (margin, spacing)\r\n    {\r\n        if (margin !== undefined) { this.tileMargin = margin; }\r\n        if (spacing !== undefined) { this.tileSpacing = spacing; }\r\n\r\n        if (this.image)\r\n        {\r\n            this.updateTileData(this.image.source[0].width, this.image.source[0].height);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates tile texture coordinates and tileset data.\r\n     *\r\n     * @method Phaser.Tilemaps.Tileset#updateTileData\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} imageWidth - The (expected) width of the image to slice.\r\n     * @param {integer} imageHeight - The (expected) height of the image to slice.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tileset} This Tileset object.\r\n     */\r\n    updateTileData: function (imageWidth, imageHeight)\r\n    {\r\n        var rowCount = (imageHeight - this.tileMargin * 2 + this.tileSpacing) / (this.tileHeight + this.tileSpacing);\r\n        var colCount = (imageWidth - this.tileMargin * 2 + this.tileSpacing) / (this.tileWidth + this.tileSpacing);\r\n\r\n        if (rowCount % 1 !== 0 || colCount % 1 !== 0)\r\n        {\r\n            console.warn('Image tile area not tile size multiple in: ' + this.name);\r\n        }\r\n\r\n        // In Tiled a tileset image that is not an even multiple of the tile dimensions is truncated\r\n        // - hence the floor when calculating the rows/columns.\r\n        rowCount = Math.floor(rowCount);\r\n        colCount = Math.floor(colCount);\r\n\r\n        this.rows = rowCount;\r\n        this.columns = colCount;\r\n\r\n        // In Tiled, \"empty\" spaces in a tileset count as tiles and hence count towards the gid\r\n        this.total = rowCount * colCount;\r\n\r\n        this.texCoordinates.length = 0;\r\n\r\n        var tx = this.tileMargin;\r\n        var ty = this.tileMargin;\r\n\r\n        for (var y = 0; y < this.rows; y++)\r\n        {\r\n            for (var x = 0; x < this.columns; x++)\r\n            {\r\n                this.texCoordinates.push({ x: tx, y: ty });\r\n                tx += this.tileWidth + this.tileSpacing;\r\n            }\r\n\r\n            tx = this.tileMargin;\r\n            ty += this.tileHeight + this.tileSpacing;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = Tileset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9UaWxlc2V0LmpzPzg5NjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPLG1CQUFtQjtBQUNyQztBQUNBLFdBQVcsT0FBTyxhQUFhO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdELGdCQUFnQjtBQUN4RSwwREFBMEQsaUJBQWlCO0FBQzNFLHVDQUF1QyxnQkFBZ0I7QUFDdkQsd0NBQXdDLGlCQUFpQjtBQUN6RCwyQ0FBMkMscUJBQXFCO0FBQ2hFLHFDQUFxQyxlQUFlOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5RUFBeUUsS0FBSztBQUM5RTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsYUFBYTs7QUFFOUQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGFBQWE7O0FBRTlEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixRQUFRLHFCQUFxQixPQUFPO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGFBQWE7O0FBRTlEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUF3QjtBQUN2QztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw0QkFBNEI7QUFDbEUsdUNBQXVDLDhCQUE4Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywwQkFBMEI7QUFDN0Qsb0NBQW9DLDRCQUE0Qjs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQSwyQkFBMkIsa0JBQWtCO0FBQzdDO0FBQ0EsMENBQTBDLGVBQWU7QUFDekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvVGlsZXNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGlsZXNldCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIHRpbGVzIGFuZCBhIGNvbnRhaW5lciBmb3IgZGF0YSBhYm91dFxyXG4gKiBlYWNoIHRpbGUuXHJcbiAqXHJcbiAqIEBjbGFzcyBUaWxlc2V0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVGlsZW1hcHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0aWxlc2V0IGluIHRoZSBtYXAgZGF0YS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBmaXJzdGdpZCAtIFRoZSBmaXJzdCB0aWxlIGluZGV4IHRoaXMgdGlsZXNldCBjb250YWlucy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVdpZHRoPTMyXSAtIFdpZHRoIG9mIGVhY2ggdGlsZSAoaW4gcGl4ZWxzKS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZUhlaWdodD0zMl0gLSBIZWlnaHQgb2YgZWFjaCB0aWxlIChpbiBwaXhlbHMpLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlTWFyZ2luPTBdIC0gVGhlIG1hcmdpbiBhcm91bmQgYWxsIHRpbGVzIGluIHRoZSBzaGVldCAoaW4gcGl4ZWxzKS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVNwYWNpbmc9MF0gLSBUaGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggdGlsZSBpbiB0aGUgc2hlZXQgKGluIHBpeGVscykuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbdGlsZVByb3BlcnRpZXM9e31dIC0gQ3VzdG9tIHByb3BlcnRpZXMgZGVmaW5lZCBwZXIgdGlsZSBpbiB0aGUgVGlsZXNldC5cclxuICogVGhlc2UgdHlwaWNhbGx5IGFyZSBjdXN0b20gcHJvcGVydGllcyBjcmVhdGVkIGluIFRpbGVkIHdoZW4gZWRpdGluZyBhIHRpbGVzZXQuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbdGlsZURhdGE9e31dIC0gRGF0YSBzdG9yZWQgcGVyIHRpbGUuIFRoZXNlIHR5cGljYWxseSBhcmUgY3JlYXRlZCBpbiBUaWxlZFxyXG4gKiB3aGVuIGVkaXRpbmcgYSB0aWxlc2V0LCBlLmcuIGZyb20gVGlsZWQncyB0aWxlIGNvbGxpc2lvbiBlZGl0b3Igb3IgdGVycmFpbiBlZGl0b3IuXHJcbiAqL1xyXG52YXIgVGlsZXNldCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlc2V0IChuYW1lLCBmaXJzdGdpZCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB0aWxlTWFyZ2luLCB0aWxlU3BhY2luZywgdGlsZVByb3BlcnRpZXMsIHRpbGVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aWxlV2lkdGggPT09IHVuZGVmaW5lZCB8fCB0aWxlV2lkdGggPD0gMCkgeyB0aWxlV2lkdGggPSAzMjsgfVxyXG4gICAgICAgIGlmICh0aWxlSGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgdGlsZUhlaWdodCA8PSAwKSB7IHRpbGVIZWlnaHQgPSAzMjsgfVxyXG4gICAgICAgIGlmICh0aWxlTWFyZ2luID09PSB1bmRlZmluZWQpIHsgdGlsZU1hcmdpbiA9IDA7IH1cclxuICAgICAgICBpZiAodGlsZVNwYWNpbmcgPT09IHVuZGVmaW5lZCkgeyB0aWxlU3BhY2luZyA9IDA7IH1cclxuICAgICAgICBpZiAodGlsZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyB0aWxlUHJvcGVydGllcyA9IHt9OyB9XHJcbiAgICAgICAgaWYgKHRpbGVEYXRhID09PSB1bmRlZmluZWQpIHsgdGlsZURhdGEgPSB7fTsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgVGlsZXNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgZmlyc3QgdGlsZSBpbmRleCB0aGlzIFRpbGVzZXQgY29udGFpbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNmaXJzdGdpZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlyc3RnaWQgPSBmaXJzdGdpZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIGVhY2ggdGlsZSAoaW4gcGl4ZWxzKS4gVXNlIHNldFRpbGVTaXplIHRvIGNoYW5nZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZVdpZHRoID0gdGlsZVdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIGVhY2ggdGlsZSAoaW4gcGl4ZWxzKS4gVXNlIHNldFRpbGVTaXplIHRvIGNoYW5nZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVIZWlnaHQgPSB0aWxlSGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWFyZ2luIGFyb3VuZCB0aGUgdGlsZXMgaW4gdGhlIHNoZWV0IChpbiBwaXhlbHMpLiBVc2UgYHNldFNwYWNpbmdgIHRvIGNoYW5nZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVNYXJnaW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVNYXJnaW4gPSB0aWxlTWFyZ2luO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggdGhlIHRpbGUgaW4gdGhlIHNoZWV0IChpbiBwaXhlbHMpLiBVc2UgYHNldFNwYWNpbmdgIHRvIGNoYW5nZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVTcGFjaW5nXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlU3BhY2luZyA9IHRpbGVTcGFjaW5nO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaWxlc2V0LXNwZWNpZmljIHByb3BlcnRpZXMgcGVyIHRpbGUgdGhhdCBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gdGhlIFRpbGVkIGVkaXRvciBpbiB0aGVcclxuICAgICAgICAgKiBUaWxlc2V0IGVkaXRvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVQcm9wZXJ0aWVzXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVQcm9wZXJ0aWVzID0gdGlsZVByb3BlcnRpZXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbGVzZXQtc3BlY2lmaWMgZGF0YSBwZXIgdGlsZSB0aGF0IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiB0aGUgVGlsZWQgZWRpdG9yLCBlLmcuIHdpdGhpblxyXG4gICAgICAgICAqIHRoZSBUaWxlc2V0IGNvbGxpc2lvbiBlZGl0b3IuIFRoaXMgaXMgd2hlcmUgY29sbGlzaW9uIG9iamVjdHMgYW5kIHRlcnJhaW4gYXJlIHN0b3JlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RpbGVEYXRhXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVEYXRhID0gdGlsZURhdGE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWNoZWQgaW1hZ2UgdGhhdCBjb250YWlucyB0aGUgaW5kaXZpZHVhbCB0aWxlcy4gVXNlIHNldEltYWdlIHRvIHNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I2ltYWdlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdsIHRleHR1cmUgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNnbFRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7P1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHRpbGUgcm93cyBpbiB0aGUgdGhlIHRpbGVzZXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNyb3dzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3dzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiB0aWxlIGNvbHVtbnMgaW4gdGhlIHRpbGVzZXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNjb2x1bW5zXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB0aWxlcyBpbiB0aGUgdGlsZXNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RvdGFsXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsb29rLXVwIHRhYmxlIHRvIHNwZWNpZmljIHRpbGUgaW1hZ2UgdGV4dHVyZSBjb29yZGluYXRlcyAoVVYgaW4gcGl4ZWxzKS4gRWFjaCBlbGVtZW50XHJcbiAgICAgICAgICogY29udGFpbnMgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHRpbGUgaW4gYW4gb2JqZWN0IG9mIHRoZSBmb3JtIHt4LCB5fS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I3RleENvb3JkaW5hdGVzXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdFtdfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXhDb29yZGluYXRlcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHRpbGVzIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RvcmVkIGluIHRoZSBUaWxlc2V0LiBSZXR1cm5zIG51bGwgaWYgdGlsZSBpbmRleCBpcyBub3RcclxuICAgICAqIGNvbnRhaW5lZCBpbiB0aGlzIFRpbGVzZXQuIFRoaXMgaXMgdHlwaWNhbGx5IGRlZmluZWQgaW4gVGlsZWQgdW5kZXIgdGhlIFRpbGVzZXQgZWRpdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVzZXQjZ2V0VGlsZVByb3BlcnRpZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUluZGV4IC0gVGhlIHVuaXF1ZSBpZCBvZiB0aGUgdGlsZSBhY3Jvc3MgYWxsIHRpbGVzZXRzIGluIHRoZSBtYXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7PyhvYmplY3R8dW5kZWZpbmVkKX1cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZVByb3BlcnRpZXM6IGZ1bmN0aW9uICh0aWxlSW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zVGlsZUluZGV4KHRpbGVJbmRleCkpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZVByb3BlcnRpZXNbdGlsZUluZGV4IC0gdGhpcy5maXJzdGdpZF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgdGlsZSdzIGRhdGEgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIFRpbGVzZXQuIFJldHVybnMgbnVsbCBpZiB0aWxlIGluZGV4IGlzIG5vdCBjb250YWluZWRcclxuICAgICAqIGluIHRoaXMgVGlsZXNldC4gVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBpbiBUaWxlZCBhbmQgd2lsbCBjb250YWluIGJvdGggVGlsZXNldCBjb2xsaXNpb25cclxuICAgICAqIGluZm8gYW5kIHRlcnJhaW4gbWFwcGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I2dldFRpbGVEYXRhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVJbmRleCAtIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHRpbGUgYWNyb3NzIGFsbCB0aWxlc2V0cyBpbiB0aGUgbWFwLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9vYmplY3R8dW5kZWZpbmVkfVxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlRGF0YTogZnVuY3Rpb24gKHRpbGVJbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGFpbnNUaWxlSW5kZXgodGlsZUluZGV4KSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50aWxlRGF0YVt0aWxlSW5kZXggLSB0aGlzLmZpcnN0Z2lkXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSB0aWxlJ3MgY29sbGlzaW9uIGdyb3VwIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBUaWxlc2V0LiBSZXR1cm5zIG51bGwgaWYgdGlsZSBpbmRleCBpcyBub3RcclxuICAgICAqIGNvbnRhaW5lZCBpbiB0aGlzIFRpbGVzZXQuIFRoaXMgaXMgdHlwaWNhbGx5IGRlZmluZWQgd2l0aGluIFRpbGVkJ3MgdGlsZXNldCBjb2xsaXNpb24gZWRpdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVzZXQjZ2V0VGlsZUNvbGxpc2lvbkdyb3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVJbmRleCAtIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHRpbGUgYWNyb3NzIGFsbCB0aWxlc2V0cyBpbiB0aGUgbWFwLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9vYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVDb2xsaXNpb25Hcm91cDogZnVuY3Rpb24gKHRpbGVJbmRleClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VGlsZURhdGEodGlsZUluZGV4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChkYXRhICYmIGRhdGEub2JqZWN0Z3JvdXApID8gZGF0YS5vYmplY3Rncm91cCA6IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgVGlsZXNldCBjb250YWlucyB0aGUgZ2l2ZW4gdGlsZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0I2NvbnRhaW5zVGlsZUluZGV4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVJbmRleCAtIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHRpbGUgYWNyb3NzIGFsbCB0aWxlc2V0cyBpbiB0aGUgbWFwLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zVGlsZUluZGV4OiBmdW5jdGlvbiAodGlsZUluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRpbGVJbmRleCA+PSB0aGlzLmZpcnN0Z2lkICYmXHJcbiAgICAgICAgICAgIHRpbGVJbmRleCA8ICh0aGlzLmZpcnN0Z2lkICsgdGhpcy50b3RhbClcclxuICAgICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgKFVWIGluIHBpeGVscykgaW4gdGhlIFRpbGVzZXQgaW1hZ2UgZm9yIHRoZSBnaXZlbiB0aWxlIGluZGV4LlxyXG4gICAgICogUmV0dXJucyBudWxsIGlmIHRpbGUgaW5kZXggaXMgbm90IGNvbnRhaW5lZCBpbiB0aGlzIFRpbGVzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNnZXRUaWxlVGV4dHVyZUNvb3JkaW5hdGVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVJbmRleCAtIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHRpbGUgYWNyb3NzIGFsbCB0aWxlc2V0cyBpbiB0aGUgbWFwLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9vYmplY3R9IE9iamVjdCBpbiB0aGUgZm9ybSB7IHgsIHkgfSByZXByZXNlbnRpbmcgdGhlIHRvcC1sZWZ0IFVWIGNvb3JkaW5hdGVcclxuICAgICAqIHdpdGhpbiB0aGUgVGlsZXNldCBpbWFnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZVRleHR1cmVDb29yZGluYXRlczogZnVuY3Rpb24gKHRpbGVJbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGFpbnNUaWxlSW5kZXgodGlsZUluZGV4KSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50ZXhDb29yZGluYXRlc1t0aWxlSW5kZXggLSB0aGlzLmZpcnN0Z2lkXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBUaWxlc2V0IGFuZCB1cGRhdGVzIHRoZSB0aWxlIGRhdGEgKHJvd3MsIGNvbHVtbnMsIGV0Yy4pLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlRpbGVzZXQjc2V0SW1hZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgaW1hZ2UgdGhhdCBjb250YWlucyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVzZXR9IFRoaXMgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEltYWdlOiBmdW5jdGlvbiAodGV4dHVyZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmltYWdlID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgdGhpcy5nbFRleHR1cmUgPSB0ZXh0dXJlLmdldCgpLnNvdXJjZS5nbFRleHR1cmU7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlVGlsZURhdGEodGhpcy5pbWFnZS5zb3VyY2VbMF0ud2lkdGgsIHRoaXMuaW1hZ2Uuc291cmNlWzBdLmhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRpbGUgd2lkdGggJiBoZWlnaHQgYW5kIHVwZGF0ZXMgdGhlIHRpbGUgZGF0YSAocm93cywgY29sdW1ucywgZXRjLikuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNzZXRUaWxlU2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVdpZHRoXSAtIFRoZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZUhlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIGEgdGlsZSBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVzZXR9IFRoaXMgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbGVTaXplOiBmdW5jdGlvbiAodGlsZVdpZHRoLCB0aWxlSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aWxlV2lkdGggIT09IHVuZGVmaW5lZCkgeyB0aGlzLnRpbGVXaWR0aCA9IHRpbGVXaWR0aDsgfVxyXG4gICAgICAgIGlmICh0aWxlSGVpZ2h0ICE9PSB1bmRlZmluZWQpIHsgdGhpcy50aWxlSGVpZ2h0ID0gdGlsZUhlaWdodDsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbWFnZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGlsZURhdGEodGhpcy5pbWFnZS5zb3VyY2VbMF0ud2lkdGgsIHRoaXMuaW1hZ2Uuc291cmNlWzBdLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0aWxlIG1hcmdpbiAmIHNwYWNpbmcgYW5kIHVwZGF0ZXMgdGhlIHRpbGUgZGF0YSAocm93cywgY29sdW1ucywgZXRjLikuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCNzZXRTcGFjaW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttYXJnaW5dIC0gVGhlIG1hcmdpbiBhcm91bmQgdGhlIHRpbGVzIGluIHRoZSBzaGVldCAoaW4gcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3NwYWNpbmddIC0gVGhlIHNwYWNpbmcgYmV0d2VlbiB0aGUgdGlsZXMgaW4gdGhlIHNoZWV0IChpbiBwaXhlbHMpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlc2V0fSBUaGlzIFRpbGVzZXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTcGFjaW5nOiBmdW5jdGlvbiAobWFyZ2luLCBzcGFjaW5nKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChtYXJnaW4gIT09IHVuZGVmaW5lZCkgeyB0aGlzLnRpbGVNYXJnaW4gPSBtYXJnaW47IH1cclxuICAgICAgICBpZiAoc3BhY2luZyAhPT0gdW5kZWZpbmVkKSB7IHRoaXMudGlsZVNwYWNpbmcgPSBzcGFjaW5nOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUaWxlRGF0YSh0aGlzLmltYWdlLnNvdXJjZVswXS53aWR0aCwgdGhpcy5pbWFnZS5zb3VyY2VbMF0uaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGlsZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFuZCB0aWxlc2V0IGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuVGlsZXNldCN1cGRhdGVUaWxlRGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbWFnZVdpZHRoIC0gVGhlIChleHBlY3RlZCkgd2lkdGggb2YgdGhlIGltYWdlIHRvIHNsaWNlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbWFnZUhlaWdodCAtIFRoZSAoZXhwZWN0ZWQpIGhlaWdodCBvZiB0aGUgaW1hZ2UgdG8gc2xpY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVzZXR9IFRoaXMgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpbGVEYXRhOiBmdW5jdGlvbiAoaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJvd0NvdW50ID0gKGltYWdlSGVpZ2h0IC0gdGhpcy50aWxlTWFyZ2luICogMiArIHRoaXMudGlsZVNwYWNpbmcpIC8gKHRoaXMudGlsZUhlaWdodCArIHRoaXMudGlsZVNwYWNpbmcpO1xyXG4gICAgICAgIHZhciBjb2xDb3VudCA9IChpbWFnZVdpZHRoIC0gdGhpcy50aWxlTWFyZ2luICogMiArIHRoaXMudGlsZVNwYWNpbmcpIC8gKHRoaXMudGlsZVdpZHRoICsgdGhpcy50aWxlU3BhY2luZyk7XHJcblxyXG4gICAgICAgIGlmIChyb3dDb3VudCAlIDEgIT09IDAgfHwgY29sQ291bnQgJSAxICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbWFnZSB0aWxlIGFyZWEgbm90IHRpbGUgc2l6ZSBtdWx0aXBsZSBpbjogJyArIHRoaXMubmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBUaWxlZCBhIHRpbGVzZXQgaW1hZ2UgdGhhdCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgdGlsZSBkaW1lbnNpb25zIGlzIHRydW5jYXRlZFxyXG4gICAgICAgIC8vIC0gaGVuY2UgdGhlIGZsb29yIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHJvd3MvY29sdW1ucy5cclxuICAgICAgICByb3dDb3VudCA9IE1hdGguZmxvb3Iocm93Q291bnQpO1xyXG4gICAgICAgIGNvbENvdW50ID0gTWF0aC5mbG9vcihjb2xDb3VudCk7XHJcblxyXG4gICAgICAgIHRoaXMucm93cyA9IHJvd0NvdW50O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbENvdW50O1xyXG5cclxuICAgICAgICAvLyBJbiBUaWxlZCwgXCJlbXB0eVwiIHNwYWNlcyBpbiBhIHRpbGVzZXQgY291bnQgYXMgdGlsZXMgYW5kIGhlbmNlIGNvdW50IHRvd2FyZHMgdGhlIGdpZFxyXG4gICAgICAgIHRoaXMudG90YWwgPSByb3dDb3VudCAqIGNvbENvdW50O1xyXG5cclxuICAgICAgICB0aGlzLnRleENvb3JkaW5hdGVzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHZhciB0eCA9IHRoaXMudGlsZU1hcmdpbjtcclxuICAgICAgICB2YXIgdHkgPSB0aGlzLnRpbGVNYXJnaW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGhpcy5yb3dzOyB5KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHRoaXMuY29sdW1uczsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleENvb3JkaW5hdGVzLnB1c2goeyB4OiB0eCwgeTogdHkgfSk7XHJcbiAgICAgICAgICAgICAgICB0eCArPSB0aGlzLnRpbGVXaWR0aCArIHRoaXMudGlsZVNwYWNpbmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHR4ID0gdGhpcy50aWxlTWFyZ2luO1xyXG4gICAgICAgICAgICB0eSArPSB0aGlzLnRpbGVIZWlnaHQgKyB0aGlzLnRpbGVTcGFjaW5nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGlsZXNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/Tileset.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTileAt = __webpack_require__(/*! ./GetTileAt */ \"./node_modules/phaser/src/tilemaps/components/GetTileAt.js\");\r\n\r\n/**\r\n * Calculates interesting faces at the given tile coordinates of the specified layer. Interesting\r\n * faces are used internally for optimizing collisions against tiles. This method is mostly used\r\n * internally to optimize recalculating faces when only one tile has been changed.\r\n *\r\n * @function Phaser.Tilemaps.Components.CalculateFacesAt\r\n * @private\r\n * @since 3.0.0\r\n * \r\n * @param {integer} tileX - The x coordinate.\r\n * @param {integer} tileY - The y coordinate.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar CalculateFacesAt = function (tileX, tileY, layer)\r\n{\r\n    var tile = GetTileAt(tileX, tileY, true, layer);\r\n    var above = GetTileAt(tileX, tileY - 1, true, layer);\r\n    var below = GetTileAt(tileX, tileY + 1, true, layer);\r\n    var left = GetTileAt(tileX - 1, tileY, true, layer);\r\n    var right = GetTileAt(tileX + 1, tileY, true, layer);\r\n    var tileCollides = tile && tile.collides;\r\n\r\n    // Assume the changed tile has all interesting edges\r\n    if (tileCollides)\r\n    {\r\n        tile.faceTop = true;\r\n        tile.faceBottom = true;\r\n        tile.faceLeft = true;\r\n        tile.faceRight = true;\r\n    }\r\n\r\n    // Reset edges that are shared between tile and its neighbors\r\n    if (above && above.collides)\r\n    {\r\n        if (tileCollides) { tile.faceTop = false; }\r\n        above.faceBottom = !tileCollides;\r\n    }\r\n\r\n    if (below && below.collides)\r\n    {\r\n        if (tileCollides) { tile.faceBottom = false; }\r\n        below.faceTop = !tileCollides;\r\n    }\r\n\r\n    if (left && left.collides)\r\n    {\r\n        if (tileCollides) { tile.faceLeft = false; }\r\n        left.faceRight = !tileCollides;\r\n    }\r\n\r\n    if (right && right.collides)\r\n    {\r\n        if (tileCollides) { tile.faceRight = false; }\r\n        right.faceLeft = !tileCollides;\r\n    }\r\n\r\n    if (tile && !tile.collides) { tile.resetFaces(); }\r\n\r\n    return tile;\r\n};\r\n\r\nmodule.exports = CalculateFacesAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NhbGN1bGF0ZUZhY2VzQXQuanM/MjUxZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHNCQUFzQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLHdCQUF3QjtBQUNuRDtBQUNBOztBQUVBLGlDQUFpQyxtQkFBbUI7O0FBRXBEO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NhbGN1bGF0ZUZhY2VzQXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlQXQgPSByZXF1aXJlKCcuL0dldFRpbGVBdCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgaW50ZXJlc3RpbmcgZmFjZXMgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBsYXllci4gSW50ZXJlc3RpbmdcclxuICogZmFjZXMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3Igb3B0aW1pemluZyBjb2xsaXNpb25zIGFnYWluc3QgdGlsZXMuIFRoaXMgbWV0aG9kIGlzIG1vc3RseSB1c2VkXHJcbiAqIGludGVybmFsbHkgdG8gb3B0aW1pemUgcmVjYWxjdWxhdGluZyBmYWNlcyB3aGVuIG9ubHkgb25lIHRpbGUgaGFzIGJlZW4gY2hhbmdlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkNhbGN1bGF0ZUZhY2VzQXRcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICovXHJcbnZhciBDYWxjdWxhdGVGYWNlc0F0ID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlID0gR2V0VGlsZUF0KHRpbGVYLCB0aWxlWSwgdHJ1ZSwgbGF5ZXIpO1xyXG4gICAgdmFyIGFib3ZlID0gR2V0VGlsZUF0KHRpbGVYLCB0aWxlWSAtIDEsIHRydWUsIGxheWVyKTtcclxuICAgIHZhciBiZWxvdyA9IEdldFRpbGVBdCh0aWxlWCwgdGlsZVkgKyAxLCB0cnVlLCBsYXllcik7XHJcbiAgICB2YXIgbGVmdCA9IEdldFRpbGVBdCh0aWxlWCAtIDEsIHRpbGVZLCB0cnVlLCBsYXllcik7XHJcbiAgICB2YXIgcmlnaHQgPSBHZXRUaWxlQXQodGlsZVggKyAxLCB0aWxlWSwgdHJ1ZSwgbGF5ZXIpO1xyXG4gICAgdmFyIHRpbGVDb2xsaWRlcyA9IHRpbGUgJiYgdGlsZS5jb2xsaWRlcztcclxuXHJcbiAgICAvLyBBc3N1bWUgdGhlIGNoYW5nZWQgdGlsZSBoYXMgYWxsIGludGVyZXN0aW5nIGVkZ2VzXHJcbiAgICBpZiAodGlsZUNvbGxpZGVzKVxyXG4gICAge1xyXG4gICAgICAgIHRpbGUuZmFjZVRvcCA9IHRydWU7XHJcbiAgICAgICAgdGlsZS5mYWNlQm90dG9tID0gdHJ1ZTtcclxuICAgICAgICB0aWxlLmZhY2VMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICB0aWxlLmZhY2VSaWdodCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgZWRnZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGlsZSBhbmQgaXRzIG5laWdoYm9yc1xyXG4gICAgaWYgKGFib3ZlICYmIGFib3ZlLmNvbGxpZGVzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aWxlQ29sbGlkZXMpIHsgdGlsZS5mYWNlVG9wID0gZmFsc2U7IH1cclxuICAgICAgICBhYm92ZS5mYWNlQm90dG9tID0gIXRpbGVDb2xsaWRlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmVsb3cgJiYgYmVsb3cuY29sbGlkZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVDb2xsaWRlcykgeyB0aWxlLmZhY2VCb3R0b20gPSBmYWxzZTsgfVxyXG4gICAgICAgIGJlbG93LmZhY2VUb3AgPSAhdGlsZUNvbGxpZGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZWZ0ICYmIGxlZnQuY29sbGlkZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVDb2xsaWRlcykgeyB0aWxlLmZhY2VMZWZ0ID0gZmFsc2U7IH1cclxuICAgICAgICBsZWZ0LmZhY2VSaWdodCA9ICF0aWxlQ29sbGlkZXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJpZ2h0ICYmIHJpZ2h0LmNvbGxpZGVzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aWxlQ29sbGlkZXMpIHsgdGlsZS5mYWNlUmlnaHQgPSBmYWxzZTsgfVxyXG4gICAgICAgIHJpZ2h0LmZhY2VMZWZ0ID0gIXRpbGVDb2xsaWRlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGlsZSAmJiAhdGlsZS5jb2xsaWRlcykgeyB0aWxlLnJlc2V0RmFjZXMoKTsgfVxyXG5cclxuICAgIHJldHVybiB0aWxlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYWxjdWxhdGVGYWNlc0F0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTileAt = __webpack_require__(/*! ./GetTileAt */ \"./node_modules/phaser/src/tilemaps/components/GetTileAt.js\");\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * Calculates interesting faces within the rectangular area specified (in tile coordinates) of the\r\n * layer. Interesting faces are used internally for optimizing collisions against tiles. This method\r\n * is mostly used internally.\r\n *\r\n * @function Phaser.Tilemaps.Components.CalculateFacesWithin\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} tileY - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} width - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} height - How many tiles tall from the `tileY` index the area will be.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar CalculateFacesWithin = function (tileX, tileY, width, height, layer)\r\n{\r\n    var above = null;\r\n    var below = null;\r\n    var left = null;\r\n    var right = null;\r\n\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        var tile = tiles[i];\r\n\r\n        if (tile)\r\n        {\r\n            if (tile.collides)\r\n            {\r\n                above = GetTileAt(tile.x, tile.y - 1, true, layer);\r\n                below = GetTileAt(tile.x, tile.y + 1, true, layer);\r\n                left = GetTileAt(tile.x - 1, tile.y, true, layer);\r\n                right = GetTileAt(tile.x + 1, tile.y, true, layer);\r\n\r\n                tile.faceTop = (above && above.collides) ? false : true;\r\n                tile.faceBottom = (below && below.collides) ? false : true;\r\n                tile.faceLeft = (left && left.collides) ? false : true;\r\n                tile.faceRight = (right && right.collides) ? false : true;\r\n            }\r\n            else\r\n            {\r\n                tile.resetFaces();\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = CalculateFacesWithin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NhbGN1bGF0ZUZhY2VzV2l0aGluLmpzPzQ4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLCtFQUFhO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvQ2FsY3VsYXRlRmFjZXNXaXRoaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlQXQgPSByZXF1aXJlKCcuL0dldFRpbGVBdCcpO1xyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyB3aXRoaW4gdGhlIHJlY3Rhbmd1bGFyIGFyZWEgc3BlY2lmaWVkIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGVcclxuICogbGF5ZXIuIEludGVyZXN0aW5nIGZhY2VzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIG9wdGltaXppbmcgY29sbGlzaW9ucyBhZ2FpbnN0IHRpbGVzLiBUaGlzIG1ldGhvZFxyXG4gKiBpcyBtb3N0bHkgdXNlZCBpbnRlcm5hbGx5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuQ2FsY3VsYXRlRmFjZXNXaXRoaW5cclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICovXHJcbnZhciBDYWxjdWxhdGVGYWNlc1dpdGhpbiA9IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgYWJvdmUgPSBudWxsO1xyXG4gICAgdmFyIGJlbG93ID0gbnVsbDtcclxuICAgIHZhciBsZWZ0ID0gbnVsbDtcclxuICAgIHZhciByaWdodCA9IG51bGw7XHJcblxyXG4gICAgdmFyIHRpbGVzID0gR2V0VGlsZXNXaXRoaW4odGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCBsYXllcik7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZSA9IHRpbGVzW2ldO1xyXG5cclxuICAgICAgICBpZiAodGlsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aWxlLmNvbGxpZGVzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm92ZSA9IEdldFRpbGVBdCh0aWxlLngsIHRpbGUueSAtIDEsIHRydWUsIGxheWVyKTtcclxuICAgICAgICAgICAgICAgIGJlbG93ID0gR2V0VGlsZUF0KHRpbGUueCwgdGlsZS55ICsgMSwgdHJ1ZSwgbGF5ZXIpO1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IEdldFRpbGVBdCh0aWxlLnggLSAxLCB0aWxlLnksIHRydWUsIGxheWVyKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0ID0gR2V0VGlsZUF0KHRpbGUueCArIDEsIHRpbGUueSwgdHJ1ZSwgbGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRpbGUuZmFjZVRvcCA9IChhYm92ZSAmJiBhYm92ZS5jb2xsaWRlcykgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aWxlLmZhY2VCb3R0b20gPSAoYmVsb3cgJiYgYmVsb3cuY29sbGlkZXMpID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGlsZS5mYWNlTGVmdCA9IChsZWZ0ICYmIGxlZnQuY29sbGlkZXMpID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGlsZS5mYWNlUmlnaHQgPSAocmlnaHQgJiYgcmlnaHQuY29sbGlkZXMpID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGlsZS5yZXNldEZhY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbGN1bGF0ZUZhY2VzV2l0aGluO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/Copy.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/Copy.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\n\r\n/**\r\n * Copies the tiles in the source rectangular area to a new destination (all specified in tile\r\n * coordinates) within the layer. This copies all tile properties & recalculates collision\r\n * information in the destination region.\r\n *\r\n * @function Phaser.Tilemaps.Components.Copy\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} srcTileX - The x coordinate of the area to copy from, in tiles, not pixels.\r\n * @param {integer} srcTileY - The y coordinate of the area to copy from, in tiles, not pixels.\r\n * @param {integer} width - The width of the area to copy, in tiles, not pixels.\r\n * @param {integer} height - The height of the area to copy, in tiles, not pixels.\r\n * @param {integer} destTileX - The x coordinate of the area to copy to, in tiles, not pixels.\r\n * @param {integer} destTileY - The y coordinate of the area to copy to, in tiles, not pixels.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar Copy = function (srcTileX, srcTileY, width, height, destTileX, destTileY, recalculateFaces, layer)\r\n{\r\n    if (srcTileX < 0) { srcTileX = 0; }\r\n    if (srcTileY < 0) { srcTileY = 0; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    var srcTiles = GetTilesWithin(srcTileX, srcTileY, width, height, null, layer);\r\n\r\n    var offsetX = destTileX - srcTileX;\r\n    var offsetY = destTileY - srcTileY;\r\n\r\n    for (var i = 0; i < srcTiles.length; i++)\r\n    {\r\n        var tileX = srcTiles[i].x + offsetX;\r\n        var tileY = srcTiles[i].y + offsetY;\r\n        if (tileX >= 0 && tileX < layer.width && tileY >= 0 && tileY < layer.height)\r\n        {\r\n            if (layer.data[tileY][tileX])\r\n            {\r\n                layer.data[tileY][tileX].copy(srcTiles[i]);\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        // Recalculate the faces within the destination area and neighboring tiles\r\n        CalculateFacesWithin(destTileX - 1, destTileY - 1, width + 2, height + 2, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = Copy;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NvcHkuanM/M2I0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMseUZBQWtCO0FBQy9DLDJCQUEyQixtQkFBTyxDQUFDLHFHQUF3Qjs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixjQUFjO0FBQ3JDLHVCQUF1QixjQUFjO0FBQ3JDLHlDQUF5Qyx5QkFBeUI7O0FBRWxFOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvQ29weS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFRpbGVzV2l0aGluID0gcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpbicpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNXaXRoaW4gPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogQ29waWVzIHRoZSB0aWxlcyBpbiB0aGUgc291cmNlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gYSBuZXcgZGVzdGluYXRpb24gKGFsbCBzcGVjaWZpZWQgaW4gdGlsZVxyXG4gKiBjb29yZGluYXRlcykgd2l0aGluIHRoZSBsYXllci4gVGhpcyBjb3BpZXMgYWxsIHRpbGUgcHJvcGVydGllcyAmIHJlY2FsY3VsYXRlcyBjb2xsaXNpb25cclxuICogaW5mb3JtYXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkNvcHlcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc3JjVGlsZVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgZnJvbSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc3JjVGlsZVkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgZnJvbSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEgdG8gY29weSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYXJlYSB0byBjb3B5LCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkZXN0VGlsZVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgdG8sIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGRlc3RUaWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGFyZWEgdG8gY29weSB0bywgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBgdHJ1ZWAgaWYgdGhlIGZhY2VzIGRhdGEgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIENvcHkgPSBmdW5jdGlvbiAoc3JjVGlsZVgsIHNyY1RpbGVZLCB3aWR0aCwgaGVpZ2h0LCBkZXN0VGlsZVgsIGRlc3RUaWxlWSwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpXHJcbntcclxuICAgIGlmIChzcmNUaWxlWCA8IDApIHsgc3JjVGlsZVggPSAwOyB9XHJcbiAgICBpZiAoc3JjVGlsZVkgPCAwKSB7IHNyY1RpbGVZID0gMDsgfVxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgPT09IHVuZGVmaW5lZCkgeyByZWNhbGN1bGF0ZUZhY2VzID0gdHJ1ZTsgfVxyXG5cclxuICAgIHZhciBzcmNUaWxlcyA9IEdldFRpbGVzV2l0aGluKHNyY1RpbGVYLCBzcmNUaWxlWSwgd2lkdGgsIGhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIHZhciBvZmZzZXRYID0gZGVzdFRpbGVYIC0gc3JjVGlsZVg7XHJcbiAgICB2YXIgb2Zmc2V0WSA9IGRlc3RUaWxlWSAtIHNyY1RpbGVZO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjVGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRpbGVYID0gc3JjVGlsZXNbaV0ueCArIG9mZnNldFg7XHJcbiAgICAgICAgdmFyIHRpbGVZID0gc3JjVGlsZXNbaV0ueSArIG9mZnNldFk7XHJcbiAgICAgICAgaWYgKHRpbGVYID49IDAgJiYgdGlsZVggPCBsYXllci53aWR0aCAmJiB0aWxlWSA+PSAwICYmIHRpbGVZIDwgbGF5ZXIuaGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdLmNvcHkoc3JjVGlsZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBmYWNlcyB3aXRoaW4gdGhlIGRlc3RpbmF0aW9uIGFyZWEgYW5kIG5laWdoYm9yaW5nIHRpbGVzXHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNXaXRoaW4oZGVzdFRpbGVYIC0gMSwgZGVzdFRpbGVZIC0gMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyLCBsYXllcik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/Copy.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/CreateFromTiles.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/CreateFromTiles.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TileToWorldX = __webpack_require__(/*! ./TileToWorldX */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldX.js\");\r\nvar TileToWorldY = __webpack_require__(/*! ./TileToWorldY */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldY.js\");\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar ReplaceByIndex = __webpack_require__(/*! ./ReplaceByIndex */ \"./node_modules/phaser/src/tilemaps/components/ReplaceByIndex.js\");\r\n\r\n/**\r\n * Creates a Sprite for every object matching the given tile indexes in the layer. You can\r\n * optionally specify if each tile will be replaced with a new tile after the Sprite has been\r\n * created. This is useful if you want to lay down special tiles in a level that are converted to\r\n * Sprites, but want to replace the tile itself with a floor tile or similar once converted.\r\n *\r\n * @function Phaser.Tilemaps.Components.CreateFromTiles\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer|array)} indexes - The tile index, or array of indexes, to create Sprites from.\r\n * @param {(integer|array)} replacements - The tile index, or array of indexes, to change a converted tile to. Set to `null` to leave the tiles unchanged. If an array is given, it is assumed to be a one-to-one mapping with the indexes array.\r\n * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} spriteConfig - The config object to pass into the Sprite creator (i.e. scene.make.sprite).\r\n * @param {Phaser.Scene} [scene=scene the map is within] - The Scene to create the Sprites within.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when determining the world XY\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.GameObjects.Sprite[]} An array of the Sprites that were created.\r\n */\r\nvar CreateFromTiles = function (indexes, replacements, spriteConfig, scene, camera, layer)\r\n{\r\n    if (spriteConfig === undefined) { spriteConfig = {}; }\r\n\r\n    if (!Array.isArray(indexes)) { indexes = [ indexes ]; }\r\n\r\n    var tilemapLayer = layer.tilemapLayer;\r\n    if (scene === undefined) { scene = tilemapLayer.scene; }\r\n    if (camera === undefined) { camera = scene.cameras.main; }\r\n\r\n    var tiles = GetTilesWithin(0, 0, layer.width, layer.height, null, layer);\r\n    var sprites = [];\r\n    var i;\r\n\r\n    for (i = 0; i < tiles.length; i++)\r\n    {\r\n        var tile = tiles[i];\r\n\r\n        if (indexes.indexOf(tile.index) !== -1)\r\n        {\r\n            spriteConfig.x = TileToWorldX(tile.x, camera, layer);\r\n            spriteConfig.y = TileToWorldY(tile.y, camera, layer);\r\n\r\n            var sprite = scene.make.sprite(spriteConfig);\r\n            sprites.push(sprite);\r\n        }\r\n    }\r\n\r\n    if (typeof replacements === 'number')\r\n    {\r\n        //  Assume 1 replacement for all types of tile given\r\n        for (i = 0; i < indexes.length; i++)\r\n        {\r\n            ReplaceByIndex(indexes[i], replacements, 0, 0, layer.width, layer.height, layer);\r\n        }\r\n    }\r\n    else if (Array.isArray(replacements))\r\n    {\r\n        //  Assume 1 to 1 mapping with indexes array\r\n        for (i = 0; i < indexes.length; i++)\r\n        {\r\n            ReplaceByIndex(indexes[i], replacements[i], 0, 0, layer.width, layer.height, layer);\r\n        }\r\n    }\r\n\r\n    return sprites;\r\n};\r\n\r\nmodule.exports = CreateFromTiles;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NyZWF0ZUZyb21UaWxlcy5qcz9iMTA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDM0MsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyw2Q0FBNkM7QUFDeEQsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG1CQUFtQjs7QUFFeEQsa0NBQWtDLHVCQUF1Qjs7QUFFekQ7QUFDQSw4QkFBOEIsNEJBQTRCO0FBQzFELCtCQUErQiw2QkFBNkI7O0FBRTVEO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0NyZWF0ZUZyb21UaWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRpbGVUb1dvcmxkWCA9IHJlcXVpcmUoJy4vVGlsZVRvV29ybGRYJyk7XHJcbnZhciBUaWxlVG9Xb3JsZFkgPSByZXF1aXJlKCcuL1RpbGVUb1dvcmxkWScpO1xyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcbnZhciBSZXBsYWNlQnlJbmRleCA9IHJlcXVpcmUoJy4vUmVwbGFjZUJ5SW5kZXgnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgU3ByaXRlIGZvciBldmVyeSBvYmplY3QgbWF0Y2hpbmcgdGhlIGdpdmVuIHRpbGUgaW5kZXhlcyBpbiB0aGUgbGF5ZXIuIFlvdSBjYW5cclxuICogb3B0aW9uYWxseSBzcGVjaWZ5IGlmIGVhY2ggdGlsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBuZXcgdGlsZSBhZnRlciB0aGUgU3ByaXRlIGhhcyBiZWVuXHJcbiAqIGNyZWF0ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGxheSBkb3duIHNwZWNpYWwgdGlsZXMgaW4gYSBsZXZlbCB0aGF0IGFyZSBjb252ZXJ0ZWQgdG9cclxuICogU3ByaXRlcywgYnV0IHdhbnQgdG8gcmVwbGFjZSB0aGUgdGlsZSBpdHNlbGYgd2l0aCBhIGZsb29yIHRpbGUgb3Igc2ltaWxhciBvbmNlIGNvbnZlcnRlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkNyZWF0ZUZyb21UaWxlc1xyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoaW50ZWdlcnxhcnJheSl9IGluZGV4ZXMgLSBUaGUgdGlsZSBpbmRleCwgb3IgYXJyYXkgb2YgaW5kZXhlcywgdG8gY3JlYXRlIFNwcml0ZXMgZnJvbS5cclxuICogQHBhcmFtIHsoaW50ZWdlcnxhcnJheSl9IHJlcGxhY2VtZW50cyAtIFRoZSB0aWxlIGluZGV4LCBvciBhcnJheSBvZiBpbmRleGVzLCB0byBjaGFuZ2UgYSBjb252ZXJ0ZWQgdGlsZSB0by4gU2V0IHRvIGBudWxsYCB0byBsZWF2ZSB0aGUgdGlsZXMgdW5jaGFuZ2VkLiBJZiBhbiBhcnJheSBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIG9uZS10by1vbmUgbWFwcGluZyB3aXRoIHRoZSBpbmRleGVzIGFycmF5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5TcHJpdGUuU3ByaXRlQ29uZmlnfSBzcHJpdGVDb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBwYXNzIGludG8gdGhlIFNwcml0ZSBjcmVhdG9yIChpLmUuIHNjZW5lLm1ha2Uuc3ByaXRlKS5cclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IFtzY2VuZT1zY2VuZSB0aGUgbWFwIGlzIHdpdGhpbl0gLSBUaGUgU2NlbmUgdG8gY3JlYXRlIHRoZSBTcHJpdGVzIHdpdGhpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGRldGVybWluaW5nIHRoZSB3b3JsZCBYWVxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGVbXX0gQW4gYXJyYXkgb2YgdGhlIFNwcml0ZXMgdGhhdCB3ZXJlIGNyZWF0ZWQuXHJcbiAqL1xyXG52YXIgQ3JlYXRlRnJvbVRpbGVzID0gZnVuY3Rpb24gKGluZGV4ZXMsIHJlcGxhY2VtZW50cywgc3ByaXRlQ29uZmlnLCBzY2VuZSwgY2FtZXJhLCBsYXllcilcclxue1xyXG4gICAgaWYgKHNwcml0ZUNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZUNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluZGV4ZXMpKSB7IGluZGV4ZXMgPSBbIGluZGV4ZXMgXTsgfVxyXG5cclxuICAgIHZhciB0aWxlbWFwTGF5ZXIgPSBsYXllci50aWxlbWFwTGF5ZXI7XHJcbiAgICBpZiAoc2NlbmUgPT09IHVuZGVmaW5lZCkgeyBzY2VuZSA9IHRpbGVtYXBMYXllci5zY2VuZTsgfVxyXG4gICAgaWYgKGNhbWVyYSA9PT0gdW5kZWZpbmVkKSB7IGNhbWVyYSA9IHNjZW5lLmNhbWVyYXMubWFpbjsgfVxyXG5cclxuICAgIHZhciB0aWxlcyA9IEdldFRpbGVzV2l0aGluKDAsIDAsIGxheWVyLndpZHRoLCBsYXllci5oZWlnaHQsIG51bGwsIGxheWVyKTtcclxuICAgIHZhciBzcHJpdGVzID0gW107XHJcbiAgICB2YXIgaTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRpbGUgPSB0aWxlc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ZXMuaW5kZXhPZih0aWxlLmluZGV4KSAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcHJpdGVDb25maWcueCA9IFRpbGVUb1dvcmxkWCh0aWxlLngsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgICAgICAgICBzcHJpdGVDb25maWcueSA9IFRpbGVUb1dvcmxkWSh0aWxlLnksIGNhbWVyYSwgbGF5ZXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNwcml0ZSA9IHNjZW5lLm1ha2Uuc3ByaXRlKHNwcml0ZUNvbmZpZyk7XHJcbiAgICAgICAgICAgIHNwcml0ZXMucHVzaChzcHJpdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50cyA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEFzc3VtZSAxIHJlcGxhY2VtZW50IGZvciBhbGwgdHlwZXMgb2YgdGlsZSBnaXZlblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgUmVwbGFjZUJ5SW5kZXgoaW5kZXhlc1tpXSwgcmVwbGFjZW1lbnRzLCAwLCAwLCBsYXllci53aWR0aCwgbGF5ZXIuaGVpZ2h0LCBsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudHMpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBBc3N1bWUgMSB0byAxIG1hcHBpbmcgd2l0aCBpbmRleGVzIGFycmF5XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGluZGV4ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSZXBsYWNlQnlJbmRleChpbmRleGVzW2ldLCByZXBsYWNlbWVudHNbaV0sIDAsIDAsIGxheWVyLndpZHRoLCBsYXllci5oZWlnaHQsIGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUZyb21UaWxlcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/CreateFromTiles.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/CullTiles.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/CullTiles.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SnapFloor = __webpack_require__(/*! ../../math/snap/SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\");\r\nvar SnapCeil = __webpack_require__(/*! ../../math/snap/SnapCeil */ \"./node_modules/phaser/src/math/snap/SnapCeil.js\");\r\n\r\n/**\r\n * Returns the tiles in the given layer that are within the camera's viewport. This is used internally.\r\n *\r\n * @function Phaser.Tilemaps.Components.CullTiles\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to run the cull check against.\r\n * @param {array} [outputArray] - An optional array to store the Tile objects within.\r\n *\r\n * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n */\r\nvar CullTiles = function (layer, camera, outputArray, renderOrder)\r\n{\r\n    if (outputArray === undefined) { outputArray = []; }\r\n    if (renderOrder === undefined) { renderOrder = 0; }\r\n\r\n    outputArray.length = 0;\r\n\r\n    var tilemap = layer.tilemapLayer.tilemap;\r\n    var tilemapLayer = layer.tilemapLayer;\r\n\r\n    var mapData = layer.data;\r\n    var mapWidth = layer.width;\r\n    var mapHeight = layer.height;\r\n\r\n    //  We need to use the tile sizes defined for the map as a whole, not the layer,\r\n    //  in order to calculate the bounds correctly. As different sized tiles may be\r\n    //  placed on the grid and we cannot trust layer.baseTileWidth to give us the true size.\r\n    var tileW = Math.floor(tilemap.tileWidth * tilemapLayer.scaleX);\r\n    var tileH = Math.floor(tilemap.tileHeight * tilemapLayer.scaleY);\r\n\r\n    var drawLeft = 0;\r\n    var drawRight = mapWidth;\r\n    var drawTop = 0;\r\n    var drawBottom = mapHeight;\r\n\r\n    if (!tilemapLayer.skipCull && tilemapLayer.scrollFactorX === 1 && tilemapLayer.scrollFactorY === 1)\r\n    {\r\n        //  Camera world view bounds, snapped for scaled tile size\r\n        //  Cull Padding values are given in tiles, not pixels\r\n\r\n        var boundsLeft = SnapFloor(camera.worldView.x - tilemapLayer.x, tileW, 0, true) - tilemapLayer.cullPaddingX;\r\n        var boundsRight = SnapCeil(camera.worldView.right - tilemapLayer.x, tileW, 0, true) + tilemapLayer.cullPaddingX;\r\n        var boundsTop = SnapFloor(camera.worldView.y - tilemapLayer.y, tileH, 0, true) - tilemapLayer.cullPaddingY;\r\n        var boundsBottom = SnapCeil(camera.worldView.bottom - tilemapLayer.y, tileH, 0, true) + tilemapLayer.cullPaddingY;\r\n\r\n        drawLeft = Math.max(0, boundsLeft);\r\n        drawRight = Math.min(mapWidth, boundsRight);\r\n        drawTop = Math.max(0, boundsTop);\r\n        drawBottom = Math.min(mapHeight, boundsBottom);\r\n    }\r\n\r\n    var x;\r\n    var y;\r\n    var tile;\r\n\r\n    if (renderOrder === 0)\r\n    {\r\n        //  right-down\r\n\r\n        for (y = drawTop; y < drawBottom; y++)\r\n        {\r\n            for (x = drawLeft; mapData[y] && x < drawRight; x++)\r\n            {\r\n                tile = mapData[y][x];\r\n\r\n                if (!tile || tile.index === -1 || !tile.visible || tile.alpha === 0)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                outputArray.push(tile);\r\n            }\r\n        }\r\n    }\r\n    else if (renderOrder === 1)\r\n    {\r\n        //  left-down\r\n\r\n        for (y = drawTop; y < drawBottom; y++)\r\n        {\r\n            for (x = drawRight; mapData[y] && x >= drawLeft; x--)\r\n            {\r\n                tile = mapData[y][x];\r\n\r\n                if (!tile || tile.index === -1 || !tile.visible || tile.alpha === 0)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                outputArray.push(tile);\r\n            }\r\n        }\r\n    }\r\n    else if (renderOrder === 2)\r\n    {\r\n        //  right-up\r\n\r\n        for (y = drawBottom; y >= drawTop; y--)\r\n        {\r\n            for (x = drawLeft; mapData[y] && x < drawRight; x++)\r\n            {\r\n                tile = mapData[y][x];\r\n\r\n                if (!tile || tile.index === -1 || !tile.visible || tile.alpha === 0)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                outputArray.push(tile);\r\n            }\r\n        }\r\n    }\r\n    else if (renderOrder === 3)\r\n    {\r\n        //  left-up\r\n\r\n        for (y = drawBottom; y >= drawTop; y--)\r\n        {\r\n            for (x = drawRight; mapData[y] && x >= drawLeft; x--)\r\n            {\r\n                tile = mapData[y][x];\r\n\r\n                if (!tile || tile.index === -1 || !tile.visible || tile.alpha === 0)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                outputArray.push(tile);\r\n            }\r\n        }\r\n    }\r\n\r\n    tilemapLayer.tilesDrawn = outputArray.length;\r\n    tilemapLayer.tilesTotal = mapWidth * mapHeight;\r\n\r\n    return outputArray;\r\n};\r\n\r\nmodule.exports = CullTiles;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0N1bGxUaWxlcy5qcz9jY2NkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDbkQsZUFBZSxtQkFBTyxDQUFDLGlGQUEwQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msa0JBQWtCO0FBQ3RELG9DQUFvQyxpQkFBaUI7O0FBRXJEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQSw4QkFBOEIsNkJBQTZCO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBLCtCQUErQiw2QkFBNkI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBLDhCQUE4Qiw2QkFBNkI7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBLCtCQUErQiw2QkFBNkI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0N1bGxUaWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNuYXBGbG9vciA9IHJlcXVpcmUoJy4uLy4uL21hdGgvc25hcC9TbmFwRmxvb3InKTtcclxudmFyIFNuYXBDZWlsID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9zbmFwL1NuYXBDZWlsJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIGxheWVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgY2FtZXJhJ3Mgdmlld3BvcnQuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuQ3VsbFRpbGVzXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmFdIC0gVGhlIENhbWVyYSB0byBydW4gdGhlIGN1bGwgY2hlY2sgYWdhaW5zdC5cclxuICogQHBhcmFtIHthcnJheX0gW291dHB1dEFycmF5XSAtIEFuIG9wdGlvbmFsIGFycmF5IHRvIHN0b3JlIHRoZSBUaWxlIG9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAqL1xyXG52YXIgQ3VsbFRpbGVzID0gZnVuY3Rpb24gKGxheWVyLCBjYW1lcmEsIG91dHB1dEFycmF5LCByZW5kZXJPcmRlcilcclxue1xyXG4gICAgaWYgKG91dHB1dEFycmF5ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0QXJyYXkgPSBbXTsgfVxyXG4gICAgaWYgKHJlbmRlck9yZGVyID09PSB1bmRlZmluZWQpIHsgcmVuZGVyT3JkZXIgPSAwOyB9XHJcblxyXG4gICAgb3V0cHV0QXJyYXkubGVuZ3RoID0gMDtcclxuXHJcbiAgICB2YXIgdGlsZW1hcCA9IGxheWVyLnRpbGVtYXBMYXllci50aWxlbWFwO1xyXG4gICAgdmFyIHRpbGVtYXBMYXllciA9IGxheWVyLnRpbGVtYXBMYXllcjtcclxuXHJcbiAgICB2YXIgbWFwRGF0YSA9IGxheWVyLmRhdGE7XHJcbiAgICB2YXIgbWFwV2lkdGggPSBsYXllci53aWR0aDtcclxuICAgIHZhciBtYXBIZWlnaHQgPSBsYXllci5oZWlnaHQ7XHJcblxyXG4gICAgLy8gIFdlIG5lZWQgdG8gdXNlIHRoZSB0aWxlIHNpemVzIGRlZmluZWQgZm9yIHRoZSBtYXAgYXMgYSB3aG9sZSwgbm90IHRoZSBsYXllcixcclxuICAgIC8vICBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIGJvdW5kcyBjb3JyZWN0bHkuIEFzIGRpZmZlcmVudCBzaXplZCB0aWxlcyBtYXkgYmVcclxuICAgIC8vICBwbGFjZWQgb24gdGhlIGdyaWQgYW5kIHdlIGNhbm5vdCB0cnVzdCBsYXllci5iYXNlVGlsZVdpZHRoIHRvIGdpdmUgdXMgdGhlIHRydWUgc2l6ZS5cclxuICAgIHZhciB0aWxlVyA9IE1hdGguZmxvb3IodGlsZW1hcC50aWxlV2lkdGggKiB0aWxlbWFwTGF5ZXIuc2NhbGVYKTtcclxuICAgIHZhciB0aWxlSCA9IE1hdGguZmxvb3IodGlsZW1hcC50aWxlSGVpZ2h0ICogdGlsZW1hcExheWVyLnNjYWxlWSk7XHJcblxyXG4gICAgdmFyIGRyYXdMZWZ0ID0gMDtcclxuICAgIHZhciBkcmF3UmlnaHQgPSBtYXBXaWR0aDtcclxuICAgIHZhciBkcmF3VG9wID0gMDtcclxuICAgIHZhciBkcmF3Qm90dG9tID0gbWFwSGVpZ2h0O1xyXG5cclxuICAgIGlmICghdGlsZW1hcExheWVyLnNraXBDdWxsICYmIHRpbGVtYXBMYXllci5zY3JvbGxGYWN0b3JYID09PSAxICYmIHRpbGVtYXBMYXllci5zY3JvbGxGYWN0b3JZID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBDYW1lcmEgd29ybGQgdmlldyBib3VuZHMsIHNuYXBwZWQgZm9yIHNjYWxlZCB0aWxlIHNpemVcclxuICAgICAgICAvLyAgQ3VsbCBQYWRkaW5nIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gdGlsZXMsIG5vdCBwaXhlbHNcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kc0xlZnQgPSBTbmFwRmxvb3IoY2FtZXJhLndvcmxkVmlldy54IC0gdGlsZW1hcExheWVyLngsIHRpbGVXLCAwLCB0cnVlKSAtIHRpbGVtYXBMYXllci5jdWxsUGFkZGluZ1g7XHJcbiAgICAgICAgdmFyIGJvdW5kc1JpZ2h0ID0gU25hcENlaWwoY2FtZXJhLndvcmxkVmlldy5yaWdodCAtIHRpbGVtYXBMYXllci54LCB0aWxlVywgMCwgdHJ1ZSkgKyB0aWxlbWFwTGF5ZXIuY3VsbFBhZGRpbmdYO1xyXG4gICAgICAgIHZhciBib3VuZHNUb3AgPSBTbmFwRmxvb3IoY2FtZXJhLndvcmxkVmlldy55IC0gdGlsZW1hcExheWVyLnksIHRpbGVILCAwLCB0cnVlKSAtIHRpbGVtYXBMYXllci5jdWxsUGFkZGluZ1k7XHJcbiAgICAgICAgdmFyIGJvdW5kc0JvdHRvbSA9IFNuYXBDZWlsKGNhbWVyYS53b3JsZFZpZXcuYm90dG9tIC0gdGlsZW1hcExheWVyLnksIHRpbGVILCAwLCB0cnVlKSArIHRpbGVtYXBMYXllci5jdWxsUGFkZGluZ1k7XHJcblxyXG4gICAgICAgIGRyYXdMZWZ0ID0gTWF0aC5tYXgoMCwgYm91bmRzTGVmdCk7XHJcbiAgICAgICAgZHJhd1JpZ2h0ID0gTWF0aC5taW4obWFwV2lkdGgsIGJvdW5kc1JpZ2h0KTtcclxuICAgICAgICBkcmF3VG9wID0gTWF0aC5tYXgoMCwgYm91bmRzVG9wKTtcclxuICAgICAgICBkcmF3Qm90dG9tID0gTWF0aC5taW4obWFwSGVpZ2h0LCBib3VuZHNCb3R0b20pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB4O1xyXG4gICAgdmFyIHk7XHJcbiAgICB2YXIgdGlsZTtcclxuXHJcbiAgICBpZiAocmVuZGVyT3JkZXIgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHJpZ2h0LWRvd25cclxuXHJcbiAgICAgICAgZm9yICh5ID0gZHJhd1RvcDsgeSA8IGRyYXdCb3R0b207IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoeCA9IGRyYXdMZWZ0OyBtYXBEYXRhW3ldICYmIHggPCBkcmF3UmlnaHQ7IHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGlsZSA9IG1hcERhdGFbeV1beF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlIHx8IHRpbGUuaW5kZXggPT09IC0xIHx8ICF0aWxlLnZpc2libGUgfHwgdGlsZS5hbHBoYSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHRpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVuZGVyT3JkZXIgPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIGxlZnQtZG93blxyXG5cclxuICAgICAgICBmb3IgKHkgPSBkcmF3VG9wOyB5IDwgZHJhd0JvdHRvbTsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh4ID0gZHJhd1JpZ2h0OyBtYXBEYXRhW3ldICYmIHggPj0gZHJhd0xlZnQ7IHgtLSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGlsZSA9IG1hcERhdGFbeV1beF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlIHx8IHRpbGUuaW5kZXggPT09IC0xIHx8ICF0aWxlLnZpc2libGUgfHwgdGlsZS5hbHBoYSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHRpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVuZGVyT3JkZXIgPT09IDIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHJpZ2h0LXVwXHJcblxyXG4gICAgICAgIGZvciAoeSA9IGRyYXdCb3R0b207IHkgPj0gZHJhd1RvcDsgeS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh4ID0gZHJhd0xlZnQ7IG1hcERhdGFbeV0gJiYgeCA8IGRyYXdSaWdodDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aWxlID0gbWFwRGF0YVt5XVt4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5pbmRleCA9PT0gLTEgfHwgIXRpbGUudmlzaWJsZSB8fCB0aWxlLmFscGhhID09PSAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2godGlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZW5kZXJPcmRlciA9PT0gMylcclxuICAgIHtcclxuICAgICAgICAvLyAgbGVmdC11cFxyXG5cclxuICAgICAgICBmb3IgKHkgPSBkcmF3Qm90dG9tOyB5ID49IGRyYXdUb3A7IHktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoeCA9IGRyYXdSaWdodDsgbWFwRGF0YVt5XSAmJiB4ID49IGRyYXdMZWZ0OyB4LS0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpbGUgPSBtYXBEYXRhW3ldW3hdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGlsZSB8fCB0aWxlLmluZGV4ID09PSAtMSB8fCAhdGlsZS52aXNpYmxlIHx8IHRpbGUuYWxwaGEgPT09IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaCh0aWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aWxlbWFwTGF5ZXIudGlsZXNEcmF3biA9IG91dHB1dEFycmF5Lmxlbmd0aDtcclxuICAgIHRpbGVtYXBMYXllci50aWxlc1RvdGFsID0gbWFwV2lkdGggKiBtYXBIZWlnaHQ7XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dEFycmF5O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdWxsVGlsZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/CullTiles.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/Fill.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/Fill.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\n\r\n/**\r\n * Sets the tiles in the given rectangular area (in tile coordinates) of the layer with the\r\n * specified index. Tiles will be set to collide if the given index is a colliding index.\r\n * Collision information in the region will be recalculated.\r\n *\r\n * @function Phaser.Tilemaps.Components.Fill\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The tile index to fill the area with.\r\n * @param {integer} tileX - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} tileY - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} width - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} height - How many tiles tall from the `tileY` index the area will be.\r\n * @param {boolean} recalculateFaces - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The tile layer to use. If not given the current layer is used.\r\n */\r\nvar Fill = function (index, tileX, tileY, width, height, recalculateFaces, layer)\r\n{\r\n    var doesIndexCollide = (layer.collideIndexes.indexOf(index) !== -1);\r\n\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        tiles[i].index = index;\r\n\r\n        SetTileCollision(tiles[i], doesIndexCollide);\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        // Recalculate the faces within the area and neighboring tiles\r\n        CalculateFacesWithin(tileX - 1, tileY - 1, width + 2, height + 2, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = Fill;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZpbGwuanM/OTc3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMseUZBQWtCO0FBQy9DLDJCQUEyQixtQkFBTyxDQUFDLHFHQUF3QjtBQUMzRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvRmlsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFRpbGVzV2l0aGluID0gcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpbicpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNXaXRoaW4gPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzV2l0aGluJyk7XHJcbnZhciBTZXRUaWxlQ29sbGlzaW9uID0gcmVxdWlyZSgnLi9TZXRUaWxlQ29sbGlzaW9uJyk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciB3aXRoIHRoZVxyXG4gKiBzcGVjaWZpZWQgaW5kZXguIFRpbGVzIHdpbGwgYmUgc2V0IHRvIGNvbGxpZGUgaWYgdGhlIGdpdmVuIGluZGV4IGlzIGEgY29sbGlkaW5nIGluZGV4LlxyXG4gKiBDb2xsaXNpb24gaW5mb3JtYXRpb24gaW4gdGhlIHJlZ2lvbiB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkZpbGxcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgdGlsZSBpbmRleCB0byBmaWxsIHRoZSBhcmVhIHdpdGguXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjYWxjdWxhdGVGYWNlcyAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIHRpbGUgbGF5ZXIgdG8gdXNlLiBJZiBub3QgZ2l2ZW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdXNlZC5cclxuICovXHJcbnZhciBGaWxsID0gZnVuY3Rpb24gKGluZGV4LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgZG9lc0luZGV4Q29sbGlkZSA9IChsYXllci5jb2xsaWRlSW5kZXhlcy5pbmRleE9mKGluZGV4KSAhPT0gLTEpO1xyXG5cclxuICAgIHZhciB0aWxlcyA9IEdldFRpbGVzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdGlsZXNbaV0uaW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAgICAgU2V0VGlsZUNvbGxpc2lvbih0aWxlc1tpXSwgZG9lc0luZGV4Q29sbGlkZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGZhY2VzIHdpdGhpbiB0aGUgYXJlYSBhbmQgbmVpZ2hib3JpbmcgdGlsZXNcclxuICAgICAgICBDYWxjdWxhdGVGYWNlc1dpdGhpbih0aWxlWCAtIDEsIHRpbGVZIC0gMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyLCBsYXllcik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/Fill.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/FilterTiles.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/FilterTiles.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n * filter callback function. Any tiles that pass the filter test (i.e. where the callback returns\r\n * true) will returned as a new array. Similar to Array.prototype.Filter in vanilla JS.\r\n *\r\n * @function Phaser.Tilemaps.Components.FilterTiles\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n * callback as the first and only parameter. The callback should return true for tiles that pass the\r\n * filter.\r\n * @param {object} [context] - The context under which the callback should be run.\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {object} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n * @param {boolean} [filteringOptions.isNotEmpty=false] - If true, only return tiles that don't have -1 for an index.\r\n * @param {boolean} [filteringOptions.isColliding=false] - If true, only return tiles that collide on at least one side.\r\n * @param {boolean} [filteringOptions.hasInterestingFace=false] - If true, only return tiles that have at least one interesting face.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Tilemaps.Tile[]} The filtered array of Tiles.\r\n */\r\nvar FilterTiles = function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, filteringOptions, layer);\r\n\r\n    return tiles.filter(callback, context);\r\n};\r\n\r\nmodule.exports = FilterTiles;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZpbHRlclRpbGVzLmpzPzA2ZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZpbHRlclRpbGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogRm9yIGVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyLCBydW4gdGhlIGdpdmVuXHJcbiAqIGZpbHRlciBjYWxsYmFjayBmdW5jdGlvbi4gQW55IHRpbGVzIHRoYXQgcGFzcyB0aGUgZmlsdGVyIHRlc3QgKGkuZS4gd2hlcmUgdGhlIGNhbGxiYWNrIHJldHVybnNcclxuICogdHJ1ZSkgd2lsbCByZXR1cm5lZCBhcyBhIG5ldyBhcnJheS4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuRmlsdGVyIGluIHZhbmlsbGEgSlMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5GaWx0ZXJUaWxlc1xyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzXHJcbiAqIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRydWUgZm9yIHRpbGVzIHRoYXQgcGFzcyB0aGVcclxuICogZmlsdGVyLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBydW4uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBmaWx0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIGZpbHRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbZmlsdGVyaW5nT3B0aW9ucy5pc05vdEVtcHR5PWZhbHNlXSAtIElmIHRydWUsIG9ubHkgcmV0dXJuIHRpbGVzIHRoYXQgZG9uJ3QgaGF2ZSAtMSBmb3IgYW4gaW5kZXguXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpbHRlcmluZ09wdGlvbnMuaXNDb2xsaWRpbmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgb25seSByZXR1cm4gdGlsZXMgdGhhdCBjb2xsaWRlIG9uIGF0IGxlYXN0IG9uZSBzaWRlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmaWx0ZXJpbmdPcHRpb25zLmhhc0ludGVyZXN0aW5nRmFjZT1mYWxzZV0gLSBJZiB0cnVlLCBvbmx5IHJldHVybiB0aWxlcyB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIGludGVyZXN0aW5nIGZhY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IFRoZSBmaWx0ZXJlZCBhcnJheSBvZiBUaWxlcy5cclxuICovXHJcbnZhciBGaWx0ZXJUaWxlcyA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcilcclxue1xyXG4gICAgdmFyIHRpbGVzID0gR2V0VGlsZXNXaXRoaW4odGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcik7XHJcblxyXG4gICAgcmV0dXJuIHRpbGVzLmZpbHRlcihjYWxsYmFjaywgY29udGV4dCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlclRpbGVzO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/FilterTiles.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/FindByIndex.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/FindByIndex.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Searches the entire map layer for the first tile matching the given index, then returns that Tile\r\n * object. If no match is found, it returns null. The search starts from the top-left tile and\r\n * continues horizontally until it hits the end of the row, then it drops down to the next column.\r\n * If the reverse boolean is true, it scans starting from the bottom-right corner traveling up to\r\n * the top-left.\r\n *\r\n * @function Phaser.Tilemaps.Components.FindByIndex\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The tile index value to search for.\r\n * @param {integer} [skip=0] - The number of times to skip a matching tile before returning.\r\n * @param {boolean} [reverse=false] - If true it will scan the layer in reverse, starting at the\r\n * bottom-right. Otherwise it scans from the top-left.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {?Phaser.Tilemaps.Tile} The first (or n skipped) tile with the matching index.\r\n */\r\nvar FindByIndex = function (findIndex, skip, reverse, layer)\r\n{\r\n    if (skip === undefined) { skip = 0; }\r\n    if (reverse === undefined) { reverse = false; }\r\n\r\n    var count = 0;\r\n    var tx;\r\n    var ty;\r\n    var tile;\r\n\r\n    if (reverse)\r\n    {\r\n        for (ty = layer.height - 1; ty >= 0; ty--)\r\n        {\r\n            for (tx = layer.width - 1; tx >= 0; tx--)\r\n            {\r\n                tile = layer.data[ty][tx];\r\n                if (tile && tile.index === findIndex)\r\n                {\r\n                    if (count === skip)\r\n                    {\r\n                        return tile;\r\n                    }\r\n                    else\r\n                    {\r\n                        count += 1;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        for (ty = 0; ty < layer.height; ty++)\r\n        {\r\n            for (tx = 0; tx < layer.width; tx++)\r\n            {\r\n                tile = layer.data[ty][tx];\r\n                if (tile && tile.index === findIndex)\r\n                {\r\n                    if (count === skip)\r\n                    {\r\n                        return tile;\r\n                    }\r\n                    else\r\n                    {\r\n                        count += 1;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\nmodule.exports = FindByIndex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZpbmRCeUluZGV4LmpzP2M3NDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFVBQVU7QUFDdkMsZ0NBQWdDLGlCQUFpQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0Esc0NBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvRmluZEJ5SW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZWFyY2hlcyB0aGUgZW50aXJlIG1hcCBsYXllciBmb3IgdGhlIGZpcnN0IHRpbGUgbWF0Y2hpbmcgdGhlIGdpdmVuIGluZGV4LCB0aGVuIHJldHVybnMgdGhhdCBUaWxlXHJcbiAqIG9iamVjdC4gSWYgbm8gbWF0Y2ggaXMgZm91bmQsIGl0IHJldHVybnMgbnVsbC4gVGhlIHNlYXJjaCBzdGFydHMgZnJvbSB0aGUgdG9wLWxlZnQgdGlsZSBhbmRcclxuICogY29udGludWVzIGhvcml6b250YWxseSB1bnRpbCBpdCBoaXRzIHRoZSBlbmQgb2YgdGhlIHJvdywgdGhlbiBpdCBkcm9wcyBkb3duIHRvIHRoZSBuZXh0IGNvbHVtbi5cclxuICogSWYgdGhlIHJldmVyc2UgYm9vbGVhbiBpcyB0cnVlLCBpdCBzY2FucyBzdGFydGluZyBmcm9tIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIHRyYXZlbGluZyB1cCB0b1xyXG4gKiB0aGUgdG9wLWxlZnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5GaW5kQnlJbmRleFxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSB0aWxlIGluZGV4IHZhbHVlIHRvIHNlYXJjaCBmb3IuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3NraXA9MF0gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHNraXAgYSBtYXRjaGluZyB0aWxlIGJlZm9yZSByZXR1cm5pbmcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdIC0gSWYgdHJ1ZSBpdCB3aWxsIHNjYW4gdGhlIGxheWVyIGluIHJldmVyc2UsIHN0YXJ0aW5nIGF0IHRoZVxyXG4gKiBib3R0b20tcmlnaHQuIE90aGVyd2lzZSBpdCBzY2FucyBmcm9tIHRoZSB0b3AtbGVmdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoZSBmaXJzdCAob3IgbiBza2lwcGVkKSB0aWxlIHdpdGggdGhlIG1hdGNoaW5nIGluZGV4LlxyXG4gKi9cclxudmFyIEZpbmRCeUluZGV4ID0gZnVuY3Rpb24gKGZpbmRJbmRleCwgc2tpcCwgcmV2ZXJzZSwgbGF5ZXIpXHJcbntcclxuICAgIGlmIChza2lwID09PSB1bmRlZmluZWQpIHsgc2tpcCA9IDA7IH1cclxuICAgIGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpIHsgcmV2ZXJzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgdmFyIGNvdW50ID0gMDtcclxuICAgIHZhciB0eDtcclxuICAgIHZhciB0eTtcclxuICAgIHZhciB0aWxlO1xyXG5cclxuICAgIGlmIChyZXZlcnNlKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodHkgPSBsYXllci5oZWlnaHQgLSAxOyB0eSA+PSAwOyB0eS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh0eCA9IGxheWVyLndpZHRoIC0gMTsgdHggPj0gMDsgdHgtLSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGlsZSA9IGxheWVyLmRhdGFbdHldW3R4XTtcclxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaW5kZXggPT09IGZpbmRJbmRleClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHNraXApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlsZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh0eSA9IDA7IHR5IDwgbGF5ZXIuaGVpZ2h0OyB0eSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh0eCA9IDA7IHR4IDwgbGF5ZXIud2lkdGg7IHR4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpbGUgPSBsYXllci5kYXRhW3R5XVt0eF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGlsZSAmJiB0aWxlLmluZGV4ID09PSBmaW5kSW5kZXgpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBza2lwKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaW5kQnlJbmRleDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/FindByIndex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/FindTile.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/FindTile.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * @callback FindTileCallback\r\n *\r\n * @param {Phaser.Tilemaps.Tile} value - The Tile.\r\n * @param {integer} index - The index of the tile.\r\n * @param {Phaser.Tilemaps.Tile[]} array - An array of Tile objects.\r\n *\r\n * @return {boolean} Return `true` if the callback should run, otherwise `false`.\r\n */\r\n\r\n/**\r\n * Find the first tile in the given rectangular area (in tile coordinates) of the layer that\r\n * satisfies the provided testing function. I.e. finds the first tile for which `callback` returns\r\n * true. Similar to Array.prototype.find in vanilla JS.\r\n *\r\n * @function Phaser.Tilemaps.Components.FindTile\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {FindTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n * @param {object} [context] - The context under which the callback should be run.\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {object} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n * @param {boolean} [filteringOptions.isNotEmpty=false] - If true, only return tiles that don't have -1 for an index.\r\n * @param {boolean} [filteringOptions.isColliding=false] - If true, only return tiles that collide on at least one side.\r\n * @param {boolean} [filteringOptions.hasInterestingFace=false] - If true, only return tiles that have at least one interesting face.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {?Phaser.Tilemaps.Tile} A Tile that matches the search, or null if no Tile found\r\n */\r\nvar FindTile = function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, filteringOptions, layer);\r\n    return tiles.find(callback, context) || null;\r\n};\r\n\r\nmodule.exports = FindTile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZpbmRUaWxlLmpzPzFmMmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsdUJBQXVCO0FBQ2xDO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9GaW5kVGlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFRpbGVzV2l0aGluID0gcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpbicpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBGaW5kVGlsZUNhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHZhbHVlIC0gVGhlIFRpbGUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHRpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gYXJyYXkgLSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybiBgdHJ1ZWAgaWYgdGhlIGNhbGxiYWNrIHNob3VsZCBydW4sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaW5kIHRoZSBmaXJzdCB0aWxlIGluIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIgdGhhdFxyXG4gKiBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIHRlc3RpbmcgZnVuY3Rpb24uIEkuZS4gZmluZHMgdGhlIGZpcnN0IHRpbGUgZm9yIHdoaWNoIGBjYWxsYmFja2AgcmV0dXJuc1xyXG4gKiB0cnVlLiBTaW1pbGFyIHRvIEFycmF5LnByb3RvdHlwZS5maW5kIGluIHZhbmlsbGEgSlMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5GaW5kVGlsZVxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtGaW5kVGlsZUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCB0aWxlIGluIHRoZSBnaXZlbiBhcmVhIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgY2FsbGJhY2sgYXMgdGhlIGZpcnN0IGFuZCBvbmx5IHBhcmFtZXRlci5cclxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgcnVuLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBmaWx0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpbHRlcmluZ09wdGlvbnMuaXNOb3RFbXB0eT1mYWxzZV0gLSBJZiB0cnVlLCBvbmx5IHJldHVybiB0aWxlcyB0aGF0IGRvbid0IGhhdmUgLTEgZm9yIGFuIGluZGV4LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmaWx0ZXJpbmdPcHRpb25zLmlzQ29sbGlkaW5nPWZhbHNlXSAtIElmIHRydWUsIG9ubHkgcmV0dXJuIHRpbGVzIHRoYXQgY29sbGlkZSBvbiBhdCBsZWFzdCBvbmUgc2lkZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbZmlsdGVyaW5nT3B0aW9ucy5oYXNJbnRlcmVzdGluZ0ZhY2U9ZmFsc2VdIC0gSWYgdHJ1ZSwgb25seSByZXR1cm4gdGlsZXMgdGhhdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnRlcmVzdGluZyBmYWNlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqXHJcbiAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZX0gQSBUaWxlIHRoYXQgbWF0Y2hlcyB0aGUgc2VhcmNoLCBvciBudWxsIGlmIG5vIFRpbGUgZm91bmRcclxuICovXHJcbnZhciBGaW5kVGlsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcilcclxue1xyXG4gICAgdmFyIHRpbGVzID0gR2V0VGlsZXNXaXRoaW4odGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBsYXllcik7XHJcbiAgICByZXR1cm4gdGlsZXMuZmluZChjYWxsYmFjaywgY29udGV4dCkgfHwgbnVsbDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmluZFRpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/FindTile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/ForEachTile.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/ForEachTile.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * @callback EachTileCallback\r\n *\r\n * @param {Phaser.Tilemaps.Tile} value - The Tile.\r\n * @param {integer} index - The index of the tile.\r\n * @param {Phaser.Tilemaps.Tile[]} array - An array of Tile objects.\r\n */\r\n\r\n/**\r\n * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n * callback. Similar to Array.prototype.forEach in vanilla JS.\r\n *\r\n * @function Phaser.Tilemaps.Components.ForEachTile\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {EachTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n * @param {object} [context] - The context under which the callback should be run.\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {object} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n * @param {boolean} [filteringOptions.isNotEmpty=false] - If true, only return tiles that don't have -1 for an index.\r\n * @param {boolean} [filteringOptions.isColliding=false] - If true, only return tiles that collide on at least one side.\r\n * @param {boolean} [filteringOptions.hasInterestingFace=false] - If true, only return tiles that have at least one interesting face.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar ForEachTile = function (callback, context, tileX, tileY, width, height, filteringOptions, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, filteringOptions, layer);\r\n\r\n    tiles.forEach(callback, context);\r\n};\r\n\r\nmodule.exports = ForEachTile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0ZvckVhY2hUaWxlLmpzP2VkNzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsdUJBQXVCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9Gb3JFYWNoVGlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFRpbGVzV2l0aGluID0gcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpbicpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBFYWNoVGlsZUNhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHZhbHVlIC0gVGhlIFRpbGUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHRpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gYXJyYXkgLSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEZvciBlYWNoIHRpbGUgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciwgcnVuIHRoZSBnaXZlblxyXG4gKiBjYWxsYmFjay4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCBpbiB2YW5pbGxhIEpTLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuRm9yRWFjaFRpbGVcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWFjaFRpbGVDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIHJ1bi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIGZpbHRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2ZpbHRlcmluZ09wdGlvbnNdIC0gT3B0aW9uYWwgZmlsdGVycyB0byBhcHBseSB3aGVuIGdldHRpbmcgdGhlIHRpbGVzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmaWx0ZXJpbmdPcHRpb25zLmlzTm90RW1wdHk9ZmFsc2VdIC0gSWYgdHJ1ZSwgb25seSByZXR1cm4gdGlsZXMgdGhhdCBkb24ndCBoYXZlIC0xIGZvciBhbiBpbmRleC5cclxuICogQHBhcmFtIHtib29sZWFufSBbZmlsdGVyaW5nT3B0aW9ucy5pc0NvbGxpZGluZz1mYWxzZV0gLSBJZiB0cnVlLCBvbmx5IHJldHVybiB0aWxlcyB0aGF0IGNvbGxpZGUgb24gYXQgbGVhc3Qgb25lIHNpZGUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpbHRlcmluZ09wdGlvbnMuaGFzSW50ZXJlc3RpbmdGYWNlPWZhbHNlXSAtIElmIHRydWUsIG9ubHkgcmV0dXJuIHRpbGVzIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgaW50ZXJlc3RpbmcgZmFjZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIEZvckVhY2hUaWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgdGlsZXMgPSBHZXRUaWxlc1dpdGhpbih0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKTtcclxuXHJcbiAgICB0aWxlcy5mb3JFYWNoKGNhbGxiYWNrLCBjb250ZXh0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRm9yRWFjaFRpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/ForEachTile.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/GetTileAt.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/GetTileAt.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar IsInLayerBounds = __webpack_require__(/*! ./IsInLayerBounds */ \"./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\");\r\n\r\n/**\r\n * Gets a tile at the given tile coordinates from the given layer.\r\n *\r\n * @function Phaser.Tilemaps.Components.GetTileAt\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - X position to get the tile from (given in tile units, not pixels).\r\n * @param {integer} tileY - Y position to get the tile from (given in tile units, not pixels).\r\n * @param {boolean} [nonNull=false] - If true getTile won't return null for empty tiles, but a Tile object with an index of -1.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates\r\n * were invalid.\r\n */\r\nvar GetTileAt = function (tileX, tileY, nonNull, layer)\r\n{\r\n    if (nonNull === undefined) { nonNull = false; }\r\n\r\n    if (IsInLayerBounds(tileX, tileY, layer))\r\n    {\r\n        var tile = layer.data[tileY][tileX] || null;\r\n        if (tile === null)\r\n        {\r\n            return null;\r\n        }\r\n        else if (tile.index === -1)\r\n        {\r\n            return nonNull ? tile : null;\r\n        }\r\n        else\r\n        {\r\n            return tile;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n};\r\n\r\nmodule.exports = GetTileAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVBdC5qcz8xZWU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywyRkFBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxpQkFBaUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvR2V0VGlsZUF0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSXNJbkxheWVyQm91bmRzID0gcmVxdWlyZSgnLi9Jc0luTGF5ZXJCb3VuZHMnKTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBsYXllci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkdldFRpbGVBdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFggcG9zaXRpb24gdG8gZ2V0IHRoZSB0aWxlIGZyb20gKGdpdmVuIGluIHRpbGUgdW5pdHMsIG5vdCBwaXhlbHMpLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gWSBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSAoZ2l2ZW4gaW4gdGlsZSB1bml0cywgbm90IHBpeGVscykuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSBnZXRUaWxlIHdvbid0IHJldHVybiBudWxsIGZvciBlbXB0eSB0aWxlcywgYnV0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBcclxuICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoZSB0aWxlIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBvciBudWxsIGlmIG5vIHRpbGUgd2FzIGZvdW5kIG9yIHRoZSBjb29yZGluYXRlc1xyXG4gKiB3ZXJlIGludmFsaWQuXHJcbiAqL1xyXG52YXIgR2V0VGlsZUF0ID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgbm9uTnVsbCwgbGF5ZXIpXHJcbntcclxuICAgIGlmIChub25OdWxsID09PSB1bmRlZmluZWQpIHsgbm9uTnVsbCA9IGZhbHNlOyB9XHJcblxyXG4gICAgaWYgKElzSW5MYXllckJvdW5kcyh0aWxlWCwgdGlsZVksIGxheWVyKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZSA9IGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXSB8fCBudWxsO1xyXG4gICAgICAgIGlmICh0aWxlID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRpbGUuaW5kZXggPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vbk51bGwgPyB0aWxlIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRpbGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUaWxlQXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/GetTileAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/GetTileAtWorldXY.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/GetTileAtWorldXY.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTileAt = __webpack_require__(/*! ./GetTileAt */ \"./node_modules/phaser/src/tilemaps/components/GetTileAt.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\n/**\r\n * Gets a tile at the given world coordinates from the given layer.\r\n *\r\n * @function Phaser.Tilemaps.Components.GetTileAtWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - X position to get the tile from (given in pixels)\r\n * @param {number} worldY - Y position to get the tile from (given in pixels)\r\n * @param {boolean} [nonNull=false] - If true, function won't return null for empty tiles, but a Tile object with an index of -1.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates\r\n * were invalid.\r\n */\r\nvar GetTileAtWorldXY = function (worldX, worldY, nonNull, camera, layer)\r\n{\r\n    var tileX = WorldToTileX(worldX, true, camera, layer);\r\n    var tileY = WorldToTileY(worldY, true, camera, layer);\r\n\r\n    return GetTileAt(tileX, tileY, nonNull, layer);\r\n};\r\n\r\nmodule.exports = GetTileAtWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVBdFdvcmxkWFkuanM/ZTU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWE7QUFDckMsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9HZXRUaWxlQXRXb3JsZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZUF0ID0gcmVxdWlyZSgnLi9HZXRUaWxlQXQnKTtcclxudmFyIFdvcmxkVG9UaWxlWCA9IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYJyk7XHJcbnZhciBXb3JsZFRvVGlsZVkgPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpO1xyXG5cclxuLyoqXHJcbiAqIEdldHMgYSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBsYXllci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkdldFRpbGVBdFdvcmxkWFlcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBYIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiBwaXhlbHMpXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBZIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiBwaXhlbHMpXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSwgZnVuY3Rpb24gd29uJ3QgcmV0dXJuIG51bGwgZm9yIGVtcHR5IHRpbGVzLCBidXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gVGhlIHRpbGUgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIG9yIG51bGwgaWYgbm8gdGlsZSB3YXMgZm91bmQgb3IgdGhlIGNvb3JkaW5hdGVzXHJcbiAqIHdlcmUgaW52YWxpZC5cclxuICovXHJcbnZhciBHZXRUaWxlQXRXb3JsZFhZID0gZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCBub25OdWxsLCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgdGlsZVggPSBXb3JsZFRvVGlsZVgod29ybGRYLCB0cnVlLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIHZhciB0aWxlWSA9IFdvcmxkVG9UaWxlWSh3b3JsZFksIHRydWUsIGNhbWVyYSwgbGF5ZXIpO1xyXG5cclxuICAgIHJldHVybiBHZXRUaWxlQXQodGlsZVgsIHRpbGVZLCBub25OdWxsLCBsYXllcik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFRpbGVBdFdvcmxkWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/GetTileAtWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Gets the tiles in the given rectangular area (in tile coordinates) of the layer.\r\n *\r\n * @function Phaser.Tilemaps.Components.GetTilesWithin\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} tileY - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} width - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} height - How many tiles tall from the `tileY` index the area will be.\r\n * @param {Phaser.Types.Tilemaps.GetTilesWithinFilteringOptions} GetTilesWithinFilteringOptions - Optional filters to apply when getting the tiles.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Tilemaps.Tile[]} Array of Tile objects.\r\n */\r\nvar GetTilesWithin = function (tileX, tileY, width, height, filteringOptions, layer)\r\n{\r\n    if (tileX === undefined) { tileX = 0; }\r\n    if (tileY === undefined) { tileY = 0; }\r\n    if (width === undefined) { width = layer.width; }\r\n    if (height === undefined) { height = layer.height; }\r\n\r\n    var isNotEmpty = GetFastValue(filteringOptions, 'isNotEmpty', false);\r\n    var isColliding = GetFastValue(filteringOptions, 'isColliding', false);\r\n    var hasInterestingFace = GetFastValue(filteringOptions, 'hasInterestingFace', false);\r\n\r\n    // Clip x, y to top left of map, while shrinking width/height to match.\r\n    if (tileX < 0)\r\n    {\r\n        width += tileX;\r\n        tileX = 0;\r\n    }\r\n    if (tileY < 0)\r\n    {\r\n        height += tileY;\r\n        tileY = 0;\r\n    }\r\n\r\n    // Clip width and height to bottom right of map.\r\n    if (tileX + width > layer.width)\r\n    {\r\n        width = Math.max(layer.width - tileX, 0);\r\n    }\r\n    if (tileY + height > layer.height)\r\n    {\r\n        height = Math.max(layer.height - tileY, 0);\r\n    }\r\n\r\n    var results = [];\r\n\r\n    for (var ty = tileY; ty < tileY + height; ty++)\r\n    {\r\n        for (var tx = tileX; tx < tileX + width; tx++)\r\n        {\r\n            var tile = layer.data[ty][tx];\r\n            if (tile !== null)\r\n            {\r\n                if (isNotEmpty && tile.index === -1) { continue; }\r\n                if (isColliding && !tile.collides) { continue; }\r\n                if (hasInterestingFace && !tile.hasInterestingFace) { continue; }\r\n                results.push(tile);\r\n            }\r\n        }\r\n    }\r\n\r\n    return results;\r\n};\r\n\r\nmodule.exports = GetTilesWithin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVzV2l0aGluLmpzP2RlYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVztBQUN6Qyw4QkFBOEIsV0FBVztBQUN6Qyw4QkFBOEIscUJBQXFCO0FBQ25ELCtCQUErQix1QkFBdUI7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0EsNEJBQTRCLG9CQUFvQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxVQUFVO0FBQ2hFLG9EQUFvRCxVQUFVO0FBQzlELHFFQUFxRSxVQUFVO0FBQy9FO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVzV2l0aGluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHRpbGVzIGluIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5HZXRUaWxlc1dpdGhpblxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuR2V0VGlsZXNXaXRoaW5GaWx0ZXJpbmdPcHRpb25zfSBHZXRUaWxlc1dpdGhpbkZpbHRlcmluZ09wdGlvbnMgLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICovXHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAodGlsZVggPT09IHVuZGVmaW5lZCkgeyB0aWxlWCA9IDA7IH1cclxuICAgIGlmICh0aWxlWSA9PT0gdW5kZWZpbmVkKSB7IHRpbGVZID0gMDsgfVxyXG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBsYXllci53aWR0aDsgfVxyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IGxheWVyLmhlaWdodDsgfVxyXG5cclxuICAgIHZhciBpc05vdEVtcHR5ID0gR2V0RmFzdFZhbHVlKGZpbHRlcmluZ09wdGlvbnMsICdpc05vdEVtcHR5JywgZmFsc2UpO1xyXG4gICAgdmFyIGlzQ29sbGlkaW5nID0gR2V0RmFzdFZhbHVlKGZpbHRlcmluZ09wdGlvbnMsICdpc0NvbGxpZGluZycsIGZhbHNlKTtcclxuICAgIHZhciBoYXNJbnRlcmVzdGluZ0ZhY2UgPSBHZXRGYXN0VmFsdWUoZmlsdGVyaW5nT3B0aW9ucywgJ2hhc0ludGVyZXN0aW5nRmFjZScsIGZhbHNlKTtcclxuXHJcbiAgICAvLyBDbGlwIHgsIHkgdG8gdG9wIGxlZnQgb2YgbWFwLCB3aGlsZSBzaHJpbmtpbmcgd2lkdGgvaGVpZ2h0IHRvIG1hdGNoLlxyXG4gICAgaWYgKHRpbGVYIDwgMClcclxuICAgIHtcclxuICAgICAgICB3aWR0aCArPSB0aWxlWDtcclxuICAgICAgICB0aWxlWCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAodGlsZVkgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIGhlaWdodCArPSB0aWxlWTtcclxuICAgICAgICB0aWxlWSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xpcCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGJvdHRvbSByaWdodCBvZiBtYXAuXHJcbiAgICBpZiAodGlsZVggKyB3aWR0aCA+IGxheWVyLndpZHRoKVxyXG4gICAge1xyXG4gICAgICAgIHdpZHRoID0gTWF0aC5tYXgobGF5ZXIud2lkdGggLSB0aWxlWCwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGlsZVkgKyBoZWlnaHQgPiBsYXllci5oZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgobGF5ZXIuaGVpZ2h0IC0gdGlsZVksIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZXN1bHRzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgdHkgPSB0aWxlWTsgdHkgPCB0aWxlWSArIGhlaWdodDsgdHkrKylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciB0eCA9IHRpbGVYOyB0eCA8IHRpbGVYICsgd2lkdGg7IHR4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZSA9IGxheWVyLmRhdGFbdHldW3R4XTtcclxuICAgICAgICAgICAgaWYgKHRpbGUgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc05vdEVtcHR5ICYmIHRpbGUuaW5kZXggPT09IC0xKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNDb2xsaWRpbmcgJiYgIXRpbGUuY29sbGlkZXMpIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmVzdGluZ0ZhY2UgJiYgIXRpbGUuaGFzSW50ZXJlc3RpbmdGYWNlKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFRpbGVzV2l0aGluO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/GetTilesWithinShape.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/GetTilesWithinShape.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Geom = __webpack_require__(/*! ../../geom/ */ \"./node_modules/phaser/src/geom/index.js\");\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar Intersects = __webpack_require__(/*! ../../geom/intersects/ */ \"./node_modules/phaser/src/geom/intersects/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar TileToWorldX = __webpack_require__(/*! ./TileToWorldX */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldX.js\");\r\nvar TileToWorldY = __webpack_require__(/*! ./TileToWorldY */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldY.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\nvar TriangleToRectangle = function (triangle, rect)\r\n{\r\n    return Intersects.RectangleToTriangle(rect, triangle);\r\n};\r\n\r\n// Note: Could possibly be optimized by copying the shape and shifting it into tilemapLayer\r\n// coordinates instead of shifting the tiles.\r\n\r\n/**\r\n * Gets the tiles that overlap with the given shape in the given layer. The shape must be a Circle,\r\n * Line, Rectangle or Triangle. The shape should be in world coordinates.\r\n *\r\n * @function Phaser.Tilemaps.Components.GetTilesWithinShape\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Circle|Phaser.Geom.Line|Phaser.Geom.Rectangle|Phaser.Geom.Triangle)} shape - A shape in world (pixel) coordinates\r\n * @param {object} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n * @param {boolean} [filteringOptions.isNotEmpty=false] - If true, only return tiles that don't have -1 for an index.\r\n * @param {boolean} [filteringOptions.isColliding=false] - If true, only return tiles that collide on at least one side.\r\n * @param {boolean} [filteringOptions.hasInterestingFace=false] - If true, only return tiles that have at least one interesting face.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.Tilemaps.Tile[]} Array of Tile objects.\r\n */\r\nvar GetTilesWithinShape = function (shape, filteringOptions, camera, layer)\r\n{\r\n    if (shape === undefined) { return []; }\r\n\r\n    // intersectTest is a function with parameters: shape, rect\r\n    var intersectTest = NOOP;\r\n    if (shape instanceof Geom.Circle) { intersectTest = Intersects.CircleToRectangle; }\r\n    else if (shape instanceof Geom.Rectangle) { intersectTest = Intersects.RectangleToRectangle; }\r\n    else if (shape instanceof Geom.Triangle) { intersectTest = TriangleToRectangle; }\r\n    else if (shape instanceof Geom.Line) { intersectTest = Intersects.LineToRectangle; }\r\n\r\n    // Top left corner of the shapes's bounding box, rounded down to include partial tiles\r\n    var xStart = WorldToTileX(shape.left, true, camera, layer);\r\n    var yStart = WorldToTileY(shape.top, true, camera, layer);\r\n\r\n    // Bottom right corner of the shapes's bounding box, rounded up to include partial tiles\r\n    var xEnd = Math.ceil(WorldToTileX(shape.right, false, camera, layer));\r\n    var yEnd = Math.ceil(WorldToTileY(shape.bottom, false, camera, layer));\r\n\r\n    // Tiles within bounding rectangle of shape. Bounds are forced to be at least 1 x 1 tile in size\r\n    // to grab tiles for shapes that don't have a height or width (e.g. a horizontal line).\r\n    var width = Math.max(xEnd - xStart, 1);\r\n    var height = Math.max(yEnd - yStart, 1);\r\n    var tiles = GetTilesWithin(xStart, yStart, width, height, filteringOptions, layer);\r\n\r\n    var tileWidth = layer.tileWidth;\r\n    var tileHeight = layer.tileHeight;\r\n    if (layer.tilemapLayer)\r\n    {\r\n        tileWidth *= layer.tilemapLayer.scaleX;\r\n        tileHeight *= layer.tilemapLayer.scaleY;\r\n    }\r\n\r\n    var results = [];\r\n    var tileRect = new Geom.Rectangle(0, 0, tileWidth, tileHeight);\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        var tile = tiles[i];\r\n        tileRect.x = TileToWorldX(tile.x, camera, layer);\r\n        tileRect.y = TileToWorldY(tile.y, camera, layer);\r\n        if (intersectTest(shape, tileRect))\r\n        {\r\n            results.push(tile);\r\n        }\r\n    }\r\n\r\n    return results;\r\n};\r\n\r\nmodule.exports = GetTilesWithinShape;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVzV2l0aGluU2hhcGUuanM/ZmM2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDREQUFhO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBd0I7QUFDakQsV0FBVyxtQkFBTyxDQUFDLGlFQUFrQjtBQUNyQyxtQkFBbUIsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDM0MsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjtBQUMzQyxtQkFBbUIsbUJBQU8sQ0FBQyxxRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUZBQWlGO0FBQzVGLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXOztBQUV6QztBQUNBO0FBQ0EsdUNBQXVDLDhDQUE4QztBQUNyRiwrQ0FBK0MsaURBQWlEO0FBQ2hHLDhDQUE4QyxxQ0FBcUM7QUFDbkYsMENBQTBDLDRDQUE0Qzs7QUFFdEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9HZXRUaWxlc1dpdGhpblNoYXBlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2VvbSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vJyk7XHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW4nKTtcclxudmFyIEludGVyc2VjdHMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL2ludGVyc2VjdHMvJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgVGlsZVRvV29ybGRYID0gcmVxdWlyZSgnLi9UaWxlVG9Xb3JsZFgnKTtcclxudmFyIFRpbGVUb1dvcmxkWSA9IHJlcXVpcmUoJy4vVGlsZVRvV29ybGRZJyk7XHJcbnZhciBXb3JsZFRvVGlsZVggPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWCcpO1xyXG52YXIgV29ybGRUb1RpbGVZID0gcmVxdWlyZSgnLi9Xb3JsZFRvVGlsZVknKTtcclxuXHJcbnZhciBUcmlhbmdsZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCByZWN0KVxyXG57XHJcbiAgICByZXR1cm4gSW50ZXJzZWN0cy5SZWN0YW5nbGVUb1RyaWFuZ2xlKHJlY3QsIHRyaWFuZ2xlKTtcclxufTtcclxuXHJcbi8vIE5vdGU6IENvdWxkIHBvc3NpYmx5IGJlIG9wdGltaXplZCBieSBjb3B5aW5nIHRoZSBzaGFwZSBhbmQgc2hpZnRpbmcgaXQgaW50byB0aWxlbWFwTGF5ZXJcclxuLy8gY29vcmRpbmF0ZXMgaW5zdGVhZCBvZiBzaGlmdGluZyB0aGUgdGlsZXMuXHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgdGlsZXMgdGhhdCBvdmVybGFwIHdpdGggdGhlIGdpdmVuIHNoYXBlIGluIHRoZSBnaXZlbiBsYXllci4gVGhlIHNoYXBlIG11c3QgYmUgYSBDaXJjbGUsXHJcbiAqIExpbmUsIFJlY3RhbmdsZSBvciBUcmlhbmdsZS4gVGhlIHNoYXBlIHNob3VsZCBiZSBpbiB3b3JsZCBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLkdldFRpbGVzV2l0aGluU2hhcGVcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLkNpcmNsZXxQaGFzZXIuR2VvbS5MaW5lfFBoYXNlci5HZW9tLlJlY3RhbmdsZXxQaGFzZXIuR2VvbS5UcmlhbmdsZSl9IHNoYXBlIC0gQSBzaGFwZSBpbiB3b3JsZCAocGl4ZWwpIGNvb3JkaW5hdGVzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpbHRlcmluZ09wdGlvbnMuaXNOb3RFbXB0eT1mYWxzZV0gLSBJZiB0cnVlLCBvbmx5IHJldHVybiB0aWxlcyB0aGF0IGRvbid0IGhhdmUgLTEgZm9yIGFuIGluZGV4LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmaWx0ZXJpbmdPcHRpb25zLmlzQ29sbGlkaW5nPWZhbHNlXSAtIElmIHRydWUsIG9ubHkgcmV0dXJuIHRpbGVzIHRoYXQgY29sbGlkZSBvbiBhdCBsZWFzdCBvbmUgc2lkZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbZmlsdGVyaW5nT3B0aW9ucy5oYXNJbnRlcmVzdGluZ0ZhY2U9ZmFsc2VdIC0gSWYgdHJ1ZSwgb25seSByZXR1cm4gdGlsZXMgdGhhdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnRlcmVzdGluZyBmYWNlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICovXHJcbnZhciBHZXRUaWxlc1dpdGhpblNoYXBlID0gZnVuY3Rpb24gKHNoYXBlLCBmaWx0ZXJpbmdPcHRpb25zLCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoc2hhcGUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cclxuXHJcbiAgICAvLyBpbnRlcnNlY3RUZXN0IGlzIGEgZnVuY3Rpb24gd2l0aCBwYXJhbWV0ZXJzOiBzaGFwZSwgcmVjdFxyXG4gICAgdmFyIGludGVyc2VjdFRlc3QgPSBOT09QO1xyXG4gICAgaWYgKHNoYXBlIGluc3RhbmNlb2YgR2VvbS5DaXJjbGUpIHsgaW50ZXJzZWN0VGVzdCA9IEludGVyc2VjdHMuQ2lyY2xlVG9SZWN0YW5nbGU7IH1cclxuICAgIGVsc2UgaWYgKHNoYXBlIGluc3RhbmNlb2YgR2VvbS5SZWN0YW5nbGUpIHsgaW50ZXJzZWN0VGVzdCA9IEludGVyc2VjdHMuUmVjdGFuZ2xlVG9SZWN0YW5nbGU7IH1cclxuICAgIGVsc2UgaWYgKHNoYXBlIGluc3RhbmNlb2YgR2VvbS5UcmlhbmdsZSkgeyBpbnRlcnNlY3RUZXN0ID0gVHJpYW5nbGVUb1JlY3RhbmdsZTsgfVxyXG4gICAgZWxzZSBpZiAoc2hhcGUgaW5zdGFuY2VvZiBHZW9tLkxpbmUpIHsgaW50ZXJzZWN0VGVzdCA9IEludGVyc2VjdHMuTGluZVRvUmVjdGFuZ2xlOyB9XHJcblxyXG4gICAgLy8gVG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzaGFwZXMncyBib3VuZGluZyBib3gsIHJvdW5kZWQgZG93biB0byBpbmNsdWRlIHBhcnRpYWwgdGlsZXNcclxuICAgIHZhciB4U3RhcnQgPSBXb3JsZFRvVGlsZVgoc2hhcGUubGVmdCwgdHJ1ZSwgY2FtZXJhLCBsYXllcik7XHJcbiAgICB2YXIgeVN0YXJ0ID0gV29ybGRUb1RpbGVZKHNoYXBlLnRvcCwgdHJ1ZSwgY2FtZXJhLCBsYXllcik7XHJcblxyXG4gICAgLy8gQm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2hhcGVzJ3MgYm91bmRpbmcgYm94LCByb3VuZGVkIHVwIHRvIGluY2x1ZGUgcGFydGlhbCB0aWxlc1xyXG4gICAgdmFyIHhFbmQgPSBNYXRoLmNlaWwoV29ybGRUb1RpbGVYKHNoYXBlLnJpZ2h0LCBmYWxzZSwgY2FtZXJhLCBsYXllcikpO1xyXG4gICAgdmFyIHlFbmQgPSBNYXRoLmNlaWwoV29ybGRUb1RpbGVZKHNoYXBlLmJvdHRvbSwgZmFsc2UsIGNhbWVyYSwgbGF5ZXIpKTtcclxuXHJcbiAgICAvLyBUaWxlcyB3aXRoaW4gYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHNoYXBlLiBCb3VuZHMgYXJlIGZvcmNlZCB0byBiZSBhdCBsZWFzdCAxIHggMSB0aWxlIGluIHNpemVcclxuICAgIC8vIHRvIGdyYWIgdGlsZXMgZm9yIHNoYXBlcyB0aGF0IGRvbid0IGhhdmUgYSBoZWlnaHQgb3Igd2lkdGggKGUuZy4gYSBob3Jpem9udGFsIGxpbmUpLlxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5tYXgoeEVuZCAtIHhTdGFydCwgMSk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoeUVuZCAtIHlTdGFydCwgMSk7XHJcbiAgICB2YXIgdGlsZXMgPSBHZXRUaWxlc1dpdGhpbih4U3RhcnQsIHlTdGFydCwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgbGF5ZXIpO1xyXG5cclxuICAgIHZhciB0aWxlV2lkdGggPSBsYXllci50aWxlV2lkdGg7XHJcbiAgICB2YXIgdGlsZUhlaWdodCA9IGxheWVyLnRpbGVIZWlnaHQ7XHJcbiAgICBpZiAobGF5ZXIudGlsZW1hcExheWVyKVxyXG4gICAge1xyXG4gICAgICAgIHRpbGVXaWR0aCAqPSBsYXllci50aWxlbWFwTGF5ZXIuc2NhbGVYO1xyXG4gICAgICAgIHRpbGVIZWlnaHQgKj0gbGF5ZXIudGlsZW1hcExheWVyLnNjYWxlWTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgdmFyIHRpbGVSZWN0ID0gbmV3IEdlb20uUmVjdGFuZ2xlKDAsIDAsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0aWxlID0gdGlsZXNbaV07XHJcbiAgICAgICAgdGlsZVJlY3QueCA9IFRpbGVUb1dvcmxkWCh0aWxlLngsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgICAgIHRpbGVSZWN0LnkgPSBUaWxlVG9Xb3JsZFkodGlsZS55LCBjYW1lcmEsIGxheWVyKTtcclxuICAgICAgICBpZiAoaW50ZXJzZWN0VGVzdChzaGFwZSwgdGlsZVJlY3QpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRpbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VGlsZXNXaXRoaW5TaGFwZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/GetTilesWithinShape.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/GetTilesWithinWorldXY.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/GetTilesWithinWorldXY.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\n/**\r\n * Gets the tiles in the given rectangular area (in world coordinates) of the layer.\r\n *\r\n * @function Phaser.Tilemaps.Components.GetTilesWithinWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - The world x coordinate for the top-left of the area.\r\n * @param {number} worldY - The world y coordinate for the top-left of the area.\r\n * @param {number} width - The width of the area.\r\n * @param {number} height - The height of the area.\r\n * @param {object} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n * @param {boolean} [filteringOptions.isNotEmpty=false] - If true, only return tiles that don't have -1 for an index.\r\n * @param {boolean} [filteringOptions.isColliding=false] - If true, only return tiles that collide on at least one side.\r\n * @param {boolean} [filteringOptions.hasInterestingFace=false] - If true, only return tiles that have at least one interesting face.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Tilemaps.Tile[]} Array of Tile objects.\r\n */\r\nvar GetTilesWithinWorldXY = function (worldX, worldY, width, height, filteringOptions, camera, layer)\r\n{\r\n    // Top left corner of the rect, rounded down to include partial tiles\r\n    var xStart = WorldToTileX(worldX, true, camera, layer);\r\n    var yStart = WorldToTileY(worldY, true, camera, layer);\r\n\r\n    // Bottom right corner of the rect, rounded up to include partial tiles\r\n    var xEnd = Math.ceil(WorldToTileX(worldX + width, false, camera, layer));\r\n    var yEnd = Math.ceil(WorldToTileY(worldY + height, false, camera, layer));\r\n\r\n    return GetTilesWithin(xStart, yStart, xEnd - xStart, yEnd - yStart, filteringOptions, layer);\r\n};\r\n\r\nmodule.exports = GetTilesWithinWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0dldFRpbGVzV2l0aGluV29ybGRYWS5qcz9jYzRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBa0I7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9HZXRUaWxlc1dpdGhpbldvcmxkWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW4nKTtcclxudmFyIFdvcmxkVG9UaWxlWCA9IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYJyk7XHJcbnZhciBXb3JsZFRvVGlsZVkgPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpO1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHRpbGVzIGluIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB3b3JsZCBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuR2V0VGlsZXNXaXRoaW5Xb3JsZFhZXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIHdvcmxkIHggY29vcmRpbmF0ZSBmb3IgdGhlIHRvcC1sZWZ0IG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHdvcmxkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIHRvcC1sZWZ0IG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGFyZWEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2ZpbHRlcmluZ09wdGlvbnNdIC0gT3B0aW9uYWwgZmlsdGVycyB0byBhcHBseSB3aGVuIGdldHRpbmcgdGhlIHRpbGVzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmaWx0ZXJpbmdPcHRpb25zLmlzTm90RW1wdHk9ZmFsc2VdIC0gSWYgdHJ1ZSwgb25seSByZXR1cm4gdGlsZXMgdGhhdCBkb24ndCBoYXZlIC0xIGZvciBhbiBpbmRleC5cclxuICogQHBhcmFtIHtib29sZWFufSBbZmlsdGVyaW5nT3B0aW9ucy5pc0NvbGxpZGluZz1mYWxzZV0gLSBJZiB0cnVlLCBvbmx5IHJldHVybiB0aWxlcyB0aGF0IGNvbGxpZGUgb24gYXQgbGVhc3Qgb25lIHNpZGUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZpbHRlcmluZ09wdGlvbnMuaGFzSW50ZXJlc3RpbmdGYWNlPWZhbHNlXSAtIElmIHRydWUsIG9ubHkgcmV0dXJuIHRpbGVzIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgaW50ZXJlc3RpbmcgZmFjZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGZhY3RvcmluZyBpbiB3aGljaCB0aWxlcyB0byByZXR1cm4uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICovXHJcbnZhciBHZXRUaWxlc1dpdGhpbldvcmxkWFkgPSBmdW5jdGlvbiAod29ybGRYLCB3b3JsZFksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIGNhbWVyYSwgbGF5ZXIpXHJcbntcclxuICAgIC8vIFRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdCwgcm91bmRlZCBkb3duIHRvIGluY2x1ZGUgcGFydGlhbCB0aWxlc1xyXG4gICAgdmFyIHhTdGFydCA9IFdvcmxkVG9UaWxlWCh3b3JsZFgsIHRydWUsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgdmFyIHlTdGFydCA9IFdvcmxkVG9UaWxlWSh3b3JsZFksIHRydWUsIGNhbWVyYSwgbGF5ZXIpO1xyXG5cclxuICAgIC8vIEJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIHJlY3QsIHJvdW5kZWQgdXAgdG8gaW5jbHVkZSBwYXJ0aWFsIHRpbGVzXHJcbiAgICB2YXIgeEVuZCA9IE1hdGguY2VpbChXb3JsZFRvVGlsZVgod29ybGRYICsgd2lkdGgsIGZhbHNlLCBjYW1lcmEsIGxheWVyKSk7XHJcbiAgICB2YXIgeUVuZCA9IE1hdGguY2VpbChXb3JsZFRvVGlsZVkod29ybGRZICsgaGVpZ2h0LCBmYWxzZSwgY2FtZXJhLCBsYXllcikpO1xyXG5cclxuICAgIHJldHVybiBHZXRUaWxlc1dpdGhpbih4U3RhcnQsIHlTdGFydCwgeEVuZCAtIHhTdGFydCwgeUVuZCAtIHlTdGFydCwgZmlsdGVyaW5nT3B0aW9ucywgbGF5ZXIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUaWxlc1dpdGhpbldvcmxkWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/GetTilesWithinWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/HasTileAt.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/HasTileAt.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar IsInLayerBounds = __webpack_require__(/*! ./IsInLayerBounds */ \"./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\");\r\n\r\n/**\r\n * Checks if there is a tile at the given location (in tile coordinates) in the given layer. Returns\r\n * false if there is no tile or if the tile at that location has an index of -1.\r\n *\r\n * @function Phaser.Tilemaps.Components.HasTileAt\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - X position to get the tile from (given in tile units, not pixels).\r\n * @param {integer} tileY - Y position to get the tile from (given in tile units, not pixels).\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {?boolean} Returns a boolean, or null if the layer given was invalid.\r\n */\r\nvar HasTileAt = function (tileX, tileY, layer)\r\n{\r\n    if (IsInLayerBounds(tileX, tileY, layer))\r\n    {\r\n        var tile = layer.data[tileY][tileX];\r\n        return (tile !== null && tile.index > -1);\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = HasTileAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0hhc1RpbGVBdC5qcz80NDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywyRkFBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvSGFzVGlsZUF0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSXNJbkxheWVyQm91bmRzID0gcmVxdWlyZSgnLi9Jc0luTGF5ZXJCb3VuZHMnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSB0aWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbiAoaW4gdGlsZSBjb29yZGluYXRlcykgaW4gdGhlIGdpdmVuIGxheWVyLiBSZXR1cm5zXHJcbiAqIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHRpbGUgb3IgaWYgdGhlIHRpbGUgYXQgdGhhdCBsb2NhdGlvbiBoYXMgYW4gaW5kZXggb2YgLTEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5IYXNUaWxlQXRcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBYIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiB0aWxlIHVuaXRzLCBub3QgcGl4ZWxzKS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFkgcG9zaXRpb24gdG8gZ2V0IHRoZSB0aWxlIGZyb20gKGdpdmVuIGluIHRpbGUgdW5pdHMsIG5vdCBwaXhlbHMpLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHs/Ym9vbGVhbn0gUmV0dXJucyBhIGJvb2xlYW4sIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gKi9cclxudmFyIEhhc1RpbGVBdCA9IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIGxheWVyKVxyXG57XHJcbiAgICBpZiAoSXNJbkxheWVyQm91bmRzKHRpbGVYLCB0aWxlWSwgbGF5ZXIpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0aWxlID0gbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdO1xyXG4gICAgICAgIHJldHVybiAodGlsZSAhPT0gbnVsbCAmJiB0aWxlLmluZGV4ID4gLTEpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhhc1RpbGVBdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/HasTileAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/HasTileAtWorldXY.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/HasTileAtWorldXY.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HasTileAt = __webpack_require__(/*! ./HasTileAt */ \"./node_modules/phaser/src/tilemaps/components/HasTileAt.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\n/**\r\n * Checks if there is a tile at the given location (in world coordinates) in the given layer. Returns\r\n * false if there is no tile or if the tile at that location has an index of -1.\r\n *\r\n * @function Phaser.Tilemaps.Components.HasTileAtWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - The X coordinate of the world position.\r\n * @param {number} worldY - The Y coordinate of the world position.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {?boolean} Returns a boolean, or null if the layer given was invalid.\r\n */\r\nvar HasTileAtWorldXY = function (worldX, worldY, camera, layer)\r\n{\r\n    var tileX = WorldToTileX(worldX, true, camera, layer);\r\n    var tileY = WorldToTileY(worldY, true, camera, layer);\r\n\r\n    return HasTileAt(tileX, tileY, layer);\r\n};\r\n\r\nmodule.exports = HasTileAtWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0hhc1RpbGVBdFdvcmxkWFkuanM/NDIxZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWE7QUFDckMsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9IYXNUaWxlQXRXb3JsZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSGFzVGlsZUF0ID0gcmVxdWlyZSgnLi9IYXNUaWxlQXQnKTtcclxudmFyIFdvcmxkVG9UaWxlWCA9IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYJyk7XHJcbnZhciBXb3JsZFRvVGlsZVkgPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIHRpbGUgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIChpbiB3b3JsZCBjb29yZGluYXRlcykgaW4gdGhlIGdpdmVuIGxheWVyLiBSZXR1cm5zXHJcbiAqIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHRpbGUgb3IgaWYgdGhlIHRpbGUgYXQgdGhhdCBsb2NhdGlvbiBoYXMgYW4gaW5kZXggb2YgLTEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5IYXNUaWxlQXRXb3JsZFhZXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgd29ybGQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB3b3JsZCBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGZhY3RvcmluZyBpbiB3aGljaCB0aWxlcyB0byByZXR1cm4uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4gez9ib29sZWFufSBSZXR1cm5zIGEgYm9vbGVhbiwgb3IgbnVsbCBpZiB0aGUgbGF5ZXIgZ2l2ZW4gd2FzIGludmFsaWQuXHJcbiAqL1xyXG52YXIgSGFzVGlsZUF0V29ybGRYWSA9IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgY2FtZXJhLCBsYXllcilcclxue1xyXG4gICAgdmFyIHRpbGVYID0gV29ybGRUb1RpbGVYKHdvcmxkWCwgdHJ1ZSwgY2FtZXJhLCBsYXllcik7XHJcbiAgICB2YXIgdGlsZVkgPSBXb3JsZFRvVGlsZVkod29ybGRZLCB0cnVlLCBjYW1lcmEsIGxheWVyKTtcclxuXHJcbiAgICByZXR1cm4gSGFzVGlsZUF0KHRpbGVYLCB0aWxlWSwgbGF5ZXIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIYXNUaWxlQXRXb3JsZFhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/HasTileAtWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if the given tile coordinates are within the bounds of the layer.\r\n *\r\n * @function Phaser.Tilemaps.Components.IsInLayerBounds\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {boolean} `true` if the tile coordinates are within the bounds of the layer, otherwise `false`.\r\n */\r\nvar IsInLayerBounds = function (tileX, tileY, layer)\r\n{\r\n    return (tileX >= 0 && tileX < layer.width && tileY >= 0 && tileY < layer.height);\r\n};\r\n\r\nmodule.exports = IsInLayerBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL0lzSW5MYXllckJvdW5kcy5qcz9kZGE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvSXNJbkxheWVyQm91bmRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB0aWxlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5Jc0luTGF5ZXJCb3VuZHNcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgeCBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHRpbGUgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBsYXllciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgSXNJbkxheWVyQm91bmRzID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgbGF5ZXIpXHJcbntcclxuICAgIHJldHVybiAodGlsZVggPj0gMCAmJiB0aWxlWCA8IGxheWVyLndpZHRoICYmIHRpbGVZID49IDAgJiYgdGlsZVkgPCBsYXllci5oZWlnaHQpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc0luTGF5ZXJCb3VuZHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/PutTileAt.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/PutTileAt.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Tile = __webpack_require__(/*! ../Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\nvar IsInLayerBounds = __webpack_require__(/*! ./IsInLayerBounds */ \"./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\");\r\nvar CalculateFacesAt = __webpack_require__(/*! ./CalculateFacesAt */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js\");\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\n\r\n/**\r\n * Puts a tile at the given tile coordinates in the specified layer. You can pass in either an index\r\n * or a Tile object. If you pass in a Tile, all attributes will be copied over to the specified\r\n * location. If you pass in an index, only the index at the specified location will be changed.\r\n * Collision information will be recalculated at the specified location.\r\n *\r\n * @function Phaser.Tilemaps.Components.PutTileAt\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.Tilemaps.Tile} The Tile object that was created or added to this map.\r\n */\r\nvar PutTileAt = function (tile, tileX, tileY, recalculateFaces, layer)\r\n{\r\n    if (!IsInLayerBounds(tileX, tileY, layer)) { return null; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    var oldTile = layer.data[tileY][tileX];\r\n    var oldTileCollides = oldTile && oldTile.collides;\r\n\r\n    if (tile instanceof Tile)\r\n    {\r\n        if (layer.data[tileY][tileX] === null)\r\n        {\r\n            layer.data[tileY][tileX] = new Tile(layer, tile.index, tileX, tileY, tile.width, tile.height);\r\n        }\r\n        layer.data[tileY][tileX].copy(tile);\r\n    }\r\n    else\r\n    {\r\n        var index = tile;\r\n        if (layer.data[tileY][tileX] === null)\r\n        {\r\n            layer.data[tileY][tileX] = new Tile(layer, index, tileX, tileY, layer.tileWidth, layer.tileHeight);\r\n        }\r\n        else\r\n        {\r\n            layer.data[tileY][tileX].index = index;\r\n        }\r\n    }\r\n\r\n    // Updating colliding flag on the new tile\r\n    var newTile = layer.data[tileY][tileX];\r\n    var collides = layer.collideIndexes.indexOf(newTile.index) !== -1;\r\n    SetTileCollision(newTile, collides);\r\n\r\n    // Recalculate faces only if the colliding flag at (tileX, tileY) has changed\r\n    if (recalculateFaces && (oldTileCollides !== newTile.collides))\r\n    {\r\n        CalculateFacesAt(tileX, tileY, layer);\r\n    }\r\n\r\n    return newTile;\r\n};\r\n\r\nmodule.exports = PutTileAt;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1B1dFRpbGVBdC5qcz83YmNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMkRBQVM7QUFDNUIsc0JBQXNCLG1CQUFPLENBQUMsMkZBQW1CO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLDZGQUFvQjtBQUNuRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RCx5Q0FBeUMseUJBQXlCOztBQUVsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9QdXRUaWxlQXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBUaWxlID0gcmVxdWlyZSgnLi4vVGlsZScpO1xyXG52YXIgSXNJbkxheWVyQm91bmRzID0gcmVxdWlyZSgnLi9Jc0luTGF5ZXJCb3VuZHMnKTtcclxudmFyIENhbGN1bGF0ZUZhY2VzQXQgPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzQXQnKTtcclxudmFyIFNldFRpbGVDb2xsaXNpb24gPSByZXF1aXJlKCcuL1NldFRpbGVDb2xsaXNpb24nKTtcclxuXHJcbi8qKlxyXG4gKiBQdXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyLiBZb3UgY2FuIHBhc3MgaW4gZWl0aGVyIGFuIGluZGV4XHJcbiAqIG9yIGEgVGlsZSBvYmplY3QuIElmIHlvdSBwYXNzIGluIGEgVGlsZSwgYWxsIGF0dHJpYnV0ZXMgd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGUgc3BlY2lmaWVkXHJcbiAqIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGUgaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlIGNoYW5nZWQuXHJcbiAqIENvbGxpc2lvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuUHV0VGlsZUF0XHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhpbnRlZ2VyfFBoYXNlci5UaWxlbWFwcy5UaWxlKX0gdGlsZSAtIFRoZSBpbmRleCBvZiB0aGlzIHRpbGUgdG8gc2V0IG9yIGEgVGlsZSBvYmplY3QuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgeCBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoZSBUaWxlIG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkIG9yIGFkZGVkIHRvIHRoaXMgbWFwLlxyXG4gKi9cclxudmFyIFB1dFRpbGVBdCA9IGZ1bmN0aW9uICh0aWxlLCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoIUlzSW5MYXllckJvdW5kcyh0aWxlWCwgdGlsZVksIGxheWVyKSkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgPT09IHVuZGVmaW5lZCkgeyByZWNhbGN1bGF0ZUZhY2VzID0gdHJ1ZTsgfVxyXG5cclxuICAgIHZhciBvbGRUaWxlID0gbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdO1xyXG4gICAgdmFyIG9sZFRpbGVDb2xsaWRlcyA9IG9sZFRpbGUgJiYgb2xkVGlsZS5jb2xsaWRlcztcclxuXHJcbiAgICBpZiAodGlsZSBpbnN0YW5jZW9mIFRpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXSA9PT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXSA9IG5ldyBUaWxlKGxheWVyLCB0aWxlLmluZGV4LCB0aWxlWCwgdGlsZVksIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdLmNvcHkodGlsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGlsZTtcclxuICAgICAgICBpZiAobGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdID0gbmV3IFRpbGUobGF5ZXIsIGluZGV4LCB0aWxlWCwgdGlsZVksIGxheWVyLnRpbGVXaWR0aCwgbGF5ZXIudGlsZUhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXS5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGluZyBjb2xsaWRpbmcgZmxhZyBvbiB0aGUgbmV3IHRpbGVcclxuICAgIHZhciBuZXdUaWxlID0gbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdO1xyXG4gICAgdmFyIGNvbGxpZGVzID0gbGF5ZXIuY29sbGlkZUluZGV4ZXMuaW5kZXhPZihuZXdUaWxlLmluZGV4KSAhPT0gLTE7XHJcbiAgICBTZXRUaWxlQ29sbGlzaW9uKG5ld1RpbGUsIGNvbGxpZGVzKTtcclxuXHJcbiAgICAvLyBSZWNhbGN1bGF0ZSBmYWNlcyBvbmx5IGlmIHRoZSBjb2xsaWRpbmcgZmxhZyBhdCAodGlsZVgsIHRpbGVZKSBoYXMgY2hhbmdlZFxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgJiYgKG9sZFRpbGVDb2xsaWRlcyAhPT0gbmV3VGlsZS5jb2xsaWRlcykpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNBdCh0aWxlWCwgdGlsZVksIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3VGlsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHV0VGlsZUF0O1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/PutTileAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/PutTileAtWorldXY.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/PutTileAtWorldXY.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PutTileAt = __webpack_require__(/*! ./PutTileAt */ \"./node_modules/phaser/src/tilemaps/components/PutTileAt.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\n/**\r\n * Puts a tile at the given world coordinates (pixels) in the specified layer. You can pass in either\r\n * an index or a Tile object. If you pass in a Tile, all attributes will be copied over to the\r\n * specified location. If you pass in an index, only the index at the specified location will be\r\n * changed. Collision information will be recalculated at the specified location.\r\n *\r\n * @function Phaser.Tilemaps.Components.PutTileAtWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n * @param {number} worldX - The x coordinate, in pixels.\r\n * @param {number} worldY - The y coordinate, in pixels.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.Tilemaps.Tile} The Tile object that was created or added to this map.\r\n */\r\nvar PutTileAtWorldXY = function (tile, worldX, worldY, recalculateFaces, camera, layer)\r\n{\r\n    var tileX = WorldToTileX(worldX, true, camera, layer);\r\n    var tileY = WorldToTileY(worldY, true, camera, layer);\r\n    return PutTileAt(tile, tileX, tileY, recalculateFaces, layer);\r\n};\r\n\r\nmodule.exports = PutTileAtWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1B1dFRpbGVBdFdvcmxkWFkuanM/MGNkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWE7QUFDckMsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9QdXRUaWxlQXRXb3JsZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHV0VGlsZUF0ID0gcmVxdWlyZSgnLi9QdXRUaWxlQXQnKTtcclxudmFyIFdvcmxkVG9UaWxlWCA9IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYJyk7XHJcbnZhciBXb3JsZFRvVGlsZVkgPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpO1xyXG5cclxuLyoqXHJcbiAqIFB1dHMgYSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyAocGl4ZWxzKSBpbiB0aGUgc3BlY2lmaWVkIGxheWVyLiBZb3UgY2FuIHBhc3MgaW4gZWl0aGVyXHJcbiAqIGFuIGluZGV4IG9yIGEgVGlsZSBvYmplY3QuIElmIHlvdSBwYXNzIGluIGEgVGlsZSwgYWxsIGF0dHJpYnV0ZXMgd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGVcclxuICogc3BlY2lmaWVkIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGUgaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlXHJcbiAqIGNoYW5nZWQuIENvbGxpc2lvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuUHV0VGlsZUF0V29ybGRYWVxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoaW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuVGlsZSl9IHRpbGUgLSBUaGUgaW5kZXggb2YgdGhpcyB0aWxlIHRvIHNldCBvciBhIFRpbGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IFRoZSBUaWxlIG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkIG9yIGFkZGVkIHRvIHRoaXMgbWFwLlxyXG4gKi9cclxudmFyIFB1dFRpbGVBdFdvcmxkWFkgPSBmdW5jdGlvbiAodGlsZSwgd29ybGRYLCB3b3JsZFksIHJlY2FsY3VsYXRlRmFjZXMsIGNhbWVyYSwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlWCA9IFdvcmxkVG9UaWxlWCh3b3JsZFgsIHRydWUsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgdmFyIHRpbGVZID0gV29ybGRUb1RpbGVZKHdvcmxkWSwgdHJ1ZSwgY2FtZXJhLCBsYXllcik7XHJcbiAgICByZXR1cm4gUHV0VGlsZUF0KHRpbGUsIHRpbGVYLCB0aWxlWSwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQdXRUaWxlQXRXb3JsZFhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/PutTileAtWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/PutTilesAt.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/PutTilesAt.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar PutTileAt = __webpack_require__(/*! ./PutTileAt */ \"./node_modules/phaser/src/tilemaps/components/PutTileAt.js\");\r\n\r\n/**\r\n * Puts an array of tiles or a 2D array of tiles at the given tile coordinates in the specified\r\n * layer. The array can be composed of either tile indexes or Tile objects. If you pass in a Tile,\r\n * all attributes will be copied over to the specified location. If you pass in an index, only the\r\n * index at the specified location will be changed. Collision information will be recalculated\r\n * within the region tiles were changed.\r\n *\r\n * @function Phaser.Tilemaps.Components.PutTilesAt\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer[]|integer[][]|Phaser.Tilemaps.Tile[]|Phaser.Tilemaps.Tile[][])} tile - A row (array) or grid (2D array) of Tiles or tile indexes to place.\r\n * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar PutTilesAt = function (tilesArray, tileX, tileY, recalculateFaces, layer)\r\n{\r\n    if (!Array.isArray(tilesArray)) { return null; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    // Force the input array to be a 2D array\r\n    if (!Array.isArray(tilesArray[0]))\r\n    {\r\n        tilesArray = [ tilesArray ];\r\n    }\r\n\r\n    var height = tilesArray.length;\r\n    var width = tilesArray[0].length;\r\n\r\n    for (var ty = 0; ty < height; ty++)\r\n    {\r\n        for (var tx = 0; tx < width; tx++)\r\n        {\r\n            var tile = tilesArray[ty][tx];\r\n            PutTileAt(tile, tileX + tx, tileY + ty, false, layer);\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        // Recalculate the faces within the destination area and neighboring tiles\r\n        CalculateFacesWithin(tileX - 1, tileY - 1, width + 2, height + 2, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = PutTilesAt;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1B1dFRpbGVzQXQuanM/YjQxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsMkJBQTJCLG1CQUFPLENBQUMscUdBQXdCO0FBQzNELGdCQUFnQixtQkFBTyxDQUFDLCtFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3RUFBd0U7QUFDbkYsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGFBQWE7QUFDbEQseUNBQXlDLHlCQUF5Qjs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixhQUFhO0FBQ2pDO0FBQ0Esd0JBQXdCLFlBQVk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1B1dFRpbGVzQXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYWxjdWxhdGVGYWNlc1dpdGhpbiA9IHJlcXVpcmUoJy4vQ2FsY3VsYXRlRmFjZXNXaXRoaW4nKTtcclxudmFyIFB1dFRpbGVBdCA9IHJlcXVpcmUoJy4vUHV0VGlsZUF0Jyk7XHJcblxyXG4vKipcclxuICogUHV0cyBhbiBhcnJheSBvZiB0aWxlcyBvciBhIDJEIGFycmF5IG9mIHRpbGVzIGF0IHRoZSBnaXZlbiB0aWxlIGNvb3JkaW5hdGVzIGluIHRoZSBzcGVjaWZpZWRcclxuICogbGF5ZXIuIFRoZSBhcnJheSBjYW4gYmUgY29tcG9zZWQgb2YgZWl0aGVyIHRpbGUgaW5kZXhlcyBvciBUaWxlIG9iamVjdHMuIElmIHlvdSBwYXNzIGluIGEgVGlsZSxcclxuICogYWxsIGF0dHJpYnV0ZXMgd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGVcclxuICogaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlIGNoYW5nZWQuIENvbGxpc2lvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY2FsY3VsYXRlZFxyXG4gKiB3aXRoaW4gdGhlIHJlZ2lvbiB0aWxlcyB3ZXJlIGNoYW5nZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5QdXRUaWxlc0F0XHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhpbnRlZ2VyW118aW50ZWdlcltdW118UGhhc2VyLlRpbGVtYXBzLlRpbGVbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZVtdW10pfSB0aWxlIC0gQSByb3cgKGFycmF5KSBvciBncmlkICgyRCBhcnJheSkgb2YgVGlsZXMgb3IgdGlsZSBpbmRleGVzIHRvIHBsYWNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgUHV0VGlsZXNBdCA9IGZ1bmN0aW9uICh0aWxlc0FycmF5LCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGlsZXNBcnJheSkpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuXHJcbiAgICAvLyBGb3JjZSB0aGUgaW5wdXQgYXJyYXkgdG8gYmUgYSAyRCBhcnJheVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRpbGVzQXJyYXlbMF0pKVxyXG4gICAge1xyXG4gICAgICAgIHRpbGVzQXJyYXkgPSBbIHRpbGVzQXJyYXkgXTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaGVpZ2h0ID0gdGlsZXNBcnJheS5sZW5ndGg7XHJcbiAgICB2YXIgd2lkdGggPSB0aWxlc0FycmF5WzBdLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKHZhciB0eSA9IDA7IHR5IDwgaGVpZ2h0OyB0eSsrKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIHR4ID0gMDsgdHggPCB3aWR0aDsgdHgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlID0gdGlsZXNBcnJheVt0eV1bdHhdO1xyXG4gICAgICAgICAgICBQdXRUaWxlQXQodGlsZSwgdGlsZVggKyB0eCwgdGlsZVkgKyB0eSwgZmFsc2UsIGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGZhY2VzIHdpdGhpbiB0aGUgZGVzdGluYXRpb24gYXJlYSBhbmQgbmVpZ2hib3JpbmcgdGlsZXNcclxuICAgICAgICBDYWxjdWxhdGVGYWNlc1dpdGhpbih0aWxlWCAtIDEsIHRpbGVZIC0gMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyLCBsYXllcik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFB1dFRpbGVzQXQ7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/PutTilesAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/Randomize.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/Randomize.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar GetRandom = __webpack_require__(/*! ../../utils/array/GetRandom */ \"./node_modules/phaser/src/utils/array/GetRandom.js\");\r\n\r\n/**\r\n * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n * specified layer. Each tile will receive a new index. If an array of indexes is passed in, then\r\n * those will be used for randomly assigning new tile indexes. If an array is not provided, the\r\n * indexes found within the region (excluding -1) will be used for randomly assigning new tile\r\n * indexes. This method only modifies tile indexes and does not change collision information.\r\n *\r\n * @function Phaser.Tilemaps.Components.Randomize\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {integer[]} [indexes] - An array of indexes to randomly draw from during randomization.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar Randomize = function (tileX, tileY, width, height, indexes, layer)\r\n{\r\n    var i;\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    // If no indices are given, then find all the unique indexes within the specified region\r\n    if (indexes === undefined)\r\n    {\r\n        indexes = [];\r\n        for (i = 0; i < tiles.length; i++)\r\n        {\r\n            if (indexes.indexOf(tiles[i].index) === -1)\r\n            {\r\n                indexes.push(tiles[i].index);\r\n            }\r\n        }\r\n    }\r\n\r\n    for (i = 0; i < tiles.length; i++)\r\n    {\r\n        tiles[i].index = GetRandom(indexes);\r\n    }\r\n};\r\n\r\nmodule.exports = Randomize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JhbmRvbWl6ZS5qcz82M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBa0I7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsdUZBQTZCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvUmFuZG9taXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcbnZhciBHZXRSYW5kb20gPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheS9HZXRSYW5kb20nKTtcclxuXHJcbi8qKlxyXG4gKiBSYW5kb21pemVzIHRoZSBpbmRleGVzIG9mIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHRpbGVzIChpbiB0aWxlIGNvb3JkaW5hdGVzKSB3aXRoaW4gdGhlXHJcbiAqIHNwZWNpZmllZCBsYXllci4gRWFjaCB0aWxlIHdpbGwgcmVjZWl2ZSBhIG5ldyBpbmRleC4gSWYgYW4gYXJyYXkgb2YgaW5kZXhlcyBpcyBwYXNzZWQgaW4sIHRoZW5cclxuICogdGhvc2Ugd2lsbCBiZSB1c2VkIGZvciByYW5kb21seSBhc3NpZ25pbmcgbmV3IHRpbGUgaW5kZXhlcy4gSWYgYW4gYXJyYXkgaXMgbm90IHByb3ZpZGVkLCB0aGVcclxuICogaW5kZXhlcyBmb3VuZCB3aXRoaW4gdGhlIHJlZ2lvbiAoZXhjbHVkaW5nIC0xKSB3aWxsIGJlIHVzZWQgZm9yIHJhbmRvbWx5IGFzc2lnbmluZyBuZXcgdGlsZVxyXG4gKiBpbmRleGVzLiBUaGlzIG1ldGhvZCBvbmx5IG1vZGlmaWVzIHRpbGUgaW5kZXhlcyBhbmQgZG9lcyBub3QgY2hhbmdlIGNvbGxpc2lvbiBpbmZvcm1hdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlJhbmRvbWl6ZVxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyW119IFtpbmRleGVzXSAtIEFuIGFycmF5IG9mIGluZGV4ZXMgdG8gcmFuZG9tbHkgZHJhdyBmcm9tIGR1cmluZyByYW5kb21pemF0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgUmFuZG9taXplID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgaW5kZXhlcywgbGF5ZXIpXHJcbntcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHRpbGVzID0gR2V0VGlsZXNXaXRoaW4odGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCBsYXllcik7XHJcblxyXG4gICAgLy8gSWYgbm8gaW5kaWNlcyBhcmUgZ2l2ZW4sIHRoZW4gZmluZCBhbGwgdGhlIHVuaXF1ZSBpbmRleGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvblxyXG4gICAgaWYgKGluZGV4ZXMgPT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBpbmRleGVzID0gW107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ZXMuaW5kZXhPZih0aWxlc1tpXS5pbmRleCkgPT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbmRleGVzLnB1c2godGlsZXNbaV0uaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB0aWxlc1tpXS5pbmRleCA9IEdldFJhbmRvbShpbmRleGVzKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9taXplO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/Randomize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/RemoveTileAt.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/RemoveTileAt.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Tile = __webpack_require__(/*! ../Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\nvar IsInLayerBounds = __webpack_require__(/*! ./IsInLayerBounds */ \"./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\");\r\nvar CalculateFacesAt = __webpack_require__(/*! ./CalculateFacesAt */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js\");\r\n\r\n/**\r\n * Removes the tile at the given tile coordinates in the specified layer and updates the layer's\r\n * collision information.\r\n *\r\n * @function Phaser.Tilemaps.Components.RemoveTileAt\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The x coordinate.\r\n * @param {integer} tileY - The y coordinate.\r\n * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.Tilemaps.Tile} The Tile object that was removed.\r\n */\r\nvar RemoveTileAt = function (tileX, tileY, replaceWithNull, recalculateFaces, layer)\r\n{\r\n    if (replaceWithNull === undefined) { replaceWithNull = false; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    if (!IsInLayerBounds(tileX, tileY, layer))\r\n    {\r\n        return null;\r\n    }\r\n\r\n    var tile = layer.data[tileY][tileX];\r\n\r\n    if (!tile)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        layer.data[tileY][tileX] = (replaceWithNull) ? null : new Tile(layer, -1, tileX, tileY, tile.width, tile.height);\r\n    }\r\n\r\n    //  Recalculate faces only if the removed tile was a colliding tile\r\n    if (recalculateFaces && tile && tile.collides)\r\n    {\r\n        CalculateFacesAt(tileX, tileY, layer);\r\n    }\r\n\r\n    return tile;\r\n};\r\n\r\nmodule.exports = RemoveTileAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JlbW92ZVRpbGVBdC5qcz8yZDIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMkRBQVM7QUFDNUIsc0JBQXNCLG1CQUFPLENBQUMsMkZBQW1CO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLDZGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyx5QkFBeUI7QUFDakUseUNBQXlDLHlCQUF5Qjs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JlbW92ZVRpbGVBdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRpbGUgPSByZXF1aXJlKCcuLi9UaWxlJyk7XHJcbnZhciBJc0luTGF5ZXJCb3VuZHMgPSByZXF1aXJlKCcuL0lzSW5MYXllckJvdW5kcycpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNBdCA9IHJlcXVpcmUoJy4vQ2FsY3VsYXRlRmFjZXNBdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgdGhlIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZCBsYXllciBhbmQgdXBkYXRlcyB0aGUgbGF5ZXInc1xyXG4gKiBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5SZW1vdmVUaWxlQXRcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBUaGUgeCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmVwbGFjZVdpdGhOdWxsPXRydWVdIC0gSWYgdHJ1ZSwgdGhpcyB3aWxsIHJlcGxhY2UgdGhlIHRpbGUgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aXRoIG51bGwgaW5zdGVhZCBvZiBhIFRpbGUgd2l0aCBhbiBpbmRleCBvZiAtMS5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBUaGUgVGlsZSBvYmplY3QgdGhhdCB3YXMgcmVtb3ZlZC5cclxuICovXHJcbnZhciBSZW1vdmVUaWxlQXQgPSBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCByZXBsYWNlV2l0aE51bGwsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAocmVwbGFjZVdpdGhOdWxsID09PSB1bmRlZmluZWQpIHsgcmVwbGFjZVdpdGhOdWxsID0gZmFsc2U7IH1cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuXHJcbiAgICBpZiAoIUlzSW5MYXllckJvdW5kcyh0aWxlWCwgdGlsZVksIGxheWVyKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGlsZSA9IGxheWVyLmRhdGFbdGlsZVldW3RpbGVYXTtcclxuXHJcbiAgICBpZiAoIXRpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXIuZGF0YVt0aWxlWV1bdGlsZVhdID0gKHJlcGxhY2VXaXRoTnVsbCkgPyBudWxsIDogbmV3IFRpbGUobGF5ZXIsIC0xLCB0aWxlWCwgdGlsZVksIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgUmVjYWxjdWxhdGUgZmFjZXMgb25seSBpZiB0aGUgcmVtb3ZlZCB0aWxlIHdhcyBhIGNvbGxpZGluZyB0aWxlXHJcbiAgICBpZiAocmVjYWxjdWxhdGVGYWNlcyAmJiB0aWxlICYmIHRpbGUuY29sbGlkZXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNBdCh0aWxlWCwgdGlsZVksIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGlsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVtb3ZlVGlsZUF0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/RemoveTileAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/RemoveTileAtWorldXY.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/RemoveTileAtWorldXY.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RemoveTileAt = __webpack_require__(/*! ./RemoveTileAt */ \"./node_modules/phaser/src/tilemaps/components/RemoveTileAt.js\");\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\n\r\n/**\r\n * Removes the tile at the given world coordinates in the specified layer and updates the layer's\r\n * collision information.\r\n *\r\n * @function Phaser.Tilemaps.Components.RemoveTileAtWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - The x coordinate, in pixels.\r\n * @param {number} worldY - The y coordinate, in pixels.\r\n * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n *\r\n * @return {Phaser.Tilemaps.Tile} The Tile object that was removed.\r\n */\r\nvar RemoveTileAtWorldXY = function (worldX, worldY, replaceWithNull, recalculateFaces, camera, layer)\r\n{\r\n    var tileX = WorldToTileX(worldX, true, camera, layer);\r\n    var tileY = WorldToTileY(worldY, true, camera, layer);\r\n    return RemoveTileAt(tileX, tileY, replaceWithNull, recalculateFaces, layer);\r\n};\r\n\r\nmodule.exports = RemoveTileAtWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JlbW92ZVRpbGVBdFdvcmxkWFkuanM/ZDM5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjtBQUMzQyxtQkFBbUIsbUJBQU8sQ0FBQyxxRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvUmVtb3ZlVGlsZUF0V29ybGRYWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlbW92ZVRpbGVBdCA9IHJlcXVpcmUoJy4vUmVtb3ZlVGlsZUF0Jyk7XHJcbnZhciBXb3JsZFRvVGlsZVggPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWCcpO1xyXG52YXIgV29ybGRUb1RpbGVZID0gcmVxdWlyZSgnLi9Xb3JsZFRvVGlsZVknKTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIHRoZSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGFuZCB1cGRhdGVzIHRoZSBsYXllcidzXHJcbiAqIGNvbGxpc2lvbiBpbmZvcm1hdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlJlbW92ZVRpbGVBdFdvcmxkWFlcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgeCBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcGxhY2VXaXRoTnVsbD10cnVlXSAtIElmIHRydWUsIHRoaXMgd2lsbCByZXBsYWNlIHRoZSB0aWxlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gd2l0aCBudWxsIGluc3RlYWQgb2YgYSBUaWxlIHdpdGggYW4gaW5kZXggb2YgLTEuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBgdHJ1ZWAgaWYgdGhlIGZhY2VzIGRhdGEgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gVGhlIFRpbGUgb2JqZWN0IHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAqL1xyXG52YXIgUmVtb3ZlVGlsZUF0V29ybGRYWSA9IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgcmVwbGFjZVdpdGhOdWxsLCByZWNhbGN1bGF0ZUZhY2VzLCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgdGlsZVggPSBXb3JsZFRvVGlsZVgod29ybGRYLCB0cnVlLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIHZhciB0aWxlWSA9IFdvcmxkVG9UaWxlWSh3b3JsZFksIHRydWUsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgcmV0dXJuIFJlbW92ZVRpbGVBdCh0aWxlWCwgdGlsZVksIHJlcGxhY2VXaXRoTnVsbCwgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZW1vdmVUaWxlQXRXb3JsZFhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/RemoveTileAtWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/RenderDebug.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/RenderDebug.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar Color = __webpack_require__(/*! ../../display/color */ \"./node_modules/phaser/src/display/color/index.js\");\r\n\r\nvar defaultTileColor = new Color(105, 210, 231, 150);\r\nvar defaultCollidingTileColor = new Color(243, 134, 48, 200);\r\nvar defaultFaceColor = new Color(40, 39, 37, 150);\r\n\r\n/**\r\n * Draws a debug representation of the layer to the given Graphics. This is helpful when you want to\r\n * get a quick idea of which of your tiles are colliding and which have interesting faces. The tiles\r\n * are drawn starting at (0, 0) in the Graphics, allowing you to place the debug representation\r\n * wherever you want on the screen.\r\n *\r\n * @function Phaser.Tilemaps.Components.RenderDebug\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - The target Graphics object to draw upon.\r\n * @param {object} styleConfig - An object specifying the colors to use for the debug drawing.\r\n * @param {?Phaser.Display.Color} [styleConfig.tileColor=blue] - Color to use for drawing a filled rectangle at\r\n * non-colliding tile locations. If set to null, non-colliding tiles will not be drawn.\r\n * @param {?Phaser.Display.Color} [styleConfig.collidingTileColor=orange] - Color to use for drawing a filled\r\n * rectangle at colliding tile locations. If set to null, colliding tiles will not be drawn.\r\n * @param {?Phaser.Display.Color} [styleConfig.faceColor=grey] - Color to use for drawing a line at interesting\r\n * tile faces. If set to null, interesting tile faces will not be drawn.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar RenderDebug = function (graphics, styleConfig, layer)\r\n{\r\n    if (styleConfig === undefined) { styleConfig = {}; }\r\n\r\n    // Default colors without needlessly creating Color objects\r\n    var tileColor = (styleConfig.tileColor !== undefined) ? styleConfig.tileColor : defaultTileColor;\r\n    var collidingTileColor = (styleConfig.collidingTileColor !== undefined) ? styleConfig.collidingTileColor : defaultCollidingTileColor;\r\n    var faceColor = (styleConfig.faceColor !== undefined) ? styleConfig.faceColor : defaultFaceColor;\r\n\r\n    var tiles = GetTilesWithin(0, 0, layer.width, layer.height, null, layer);\r\n\r\n    graphics.translateCanvas(layer.tilemapLayer.x, layer.tilemapLayer.y);\r\n    graphics.scaleCanvas(layer.tilemapLayer.scaleX, layer.tilemapLayer.scaleY);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        var tile = tiles[i];\r\n\r\n        var tw = tile.width;\r\n        var th = tile.height;\r\n        var x = tile.pixelX;\r\n        var y = tile.pixelY;\r\n\r\n        var color = tile.collides ? collidingTileColor : tileColor;\r\n\r\n        if (color !== null)\r\n        {\r\n            graphics.fillStyle(color.color, color.alpha / 255);\r\n            graphics.fillRect(x, y, tw, th);\r\n        }\r\n\r\n        // Inset the face line to prevent neighboring tile's lines from overlapping\r\n        x += 1;\r\n        y += 1;\r\n        tw -= 2;\r\n        th -= 2;\r\n\r\n        if (faceColor !== null)\r\n        {\r\n            graphics.lineStyle(1, faceColor.color, faceColor.alpha / 255);\r\n\r\n            if (tile.faceTop) { graphics.lineBetween(x, y, x + tw, y); }\r\n            if (tile.faceRight) { graphics.lineBetween(x + tw, y, x + tw, y + th); }\r\n            if (tile.faceBottom) { graphics.lineBetween(x, y + th, x + tw, y + th); }\r\n            if (tile.faceLeft) { graphics.lineBetween(x, y, x, y + th); }\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = RenderDebug;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JlbmRlckRlYnVnLmpzPzc5NGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjtBQUMvQyxZQUFZLG1CQUFPLENBQUMsNkVBQXFCOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGtCQUFrQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsdUNBQXVDO0FBQ3RFLGlDQUFpQyxpREFBaUQ7QUFDbEYsa0NBQWtDLGlEQUFpRDtBQUNuRixnQ0FBZ0MsdUNBQXVDO0FBQ3ZFO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvUmVuZGVyRGVidWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW4nKTtcclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jb2xvcicpO1xyXG5cclxudmFyIGRlZmF1bHRUaWxlQ29sb3IgPSBuZXcgQ29sb3IoMTA1LCAyMTAsIDIzMSwgMTUwKTtcclxudmFyIGRlZmF1bHRDb2xsaWRpbmdUaWxlQ29sb3IgPSBuZXcgQ29sb3IoMjQzLCAxMzQsIDQ4LCAyMDApO1xyXG52YXIgZGVmYXVsdEZhY2VDb2xvciA9IG5ldyBDb2xvcig0MCwgMzksIDM3LCAxNTApO1xyXG5cclxuLyoqXHJcbiAqIERyYXdzIGEgZGVidWcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxheWVyIHRvIHRoZSBnaXZlbiBHcmFwaGljcy4gVGhpcyBpcyBoZWxwZnVsIHdoZW4geW91IHdhbnQgdG9cclxuICogZ2V0IGEgcXVpY2sgaWRlYSBvZiB3aGljaCBvZiB5b3VyIHRpbGVzIGFyZSBjb2xsaWRpbmcgYW5kIHdoaWNoIGhhdmUgaW50ZXJlc3RpbmcgZmFjZXMuIFRoZSB0aWxlc1xyXG4gKiBhcmUgZHJhd24gc3RhcnRpbmcgYXQgKDAsIDApIGluIHRoZSBHcmFwaGljcywgYWxsb3dpbmcgeW91IHRvIHBsYWNlIHRoZSBkZWJ1ZyByZXByZXNlbnRhdGlvblxyXG4gKiB3aGVyZXZlciB5b3Ugd2FudCBvbiB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuUmVuZGVyRGVidWdcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBncmFwaGljcyAtIFRoZSB0YXJnZXQgR3JhcGhpY3Mgb2JqZWN0IHRvIGRyYXcgdXBvbi5cclxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlQ29uZmlnIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGNvbG9ycyB0byB1c2UgZm9yIHRoZSBkZWJ1ZyBkcmF3aW5nLlxyXG4gKiBAcGFyYW0gez9QaGFzZXIuRGlzcGxheS5Db2xvcn0gW3N0eWxlQ29uZmlnLnRpbGVDb2xvcj1ibHVlXSAtIENvbG9yIHRvIHVzZSBmb3IgZHJhd2luZyBhIGZpbGxlZCByZWN0YW5nbGUgYXRcclxuICogbm9uLWNvbGxpZGluZyB0aWxlIGxvY2F0aW9ucy4gSWYgc2V0IHRvIG51bGwsIG5vbi1jb2xsaWRpbmcgdGlsZXMgd2lsbCBub3QgYmUgZHJhd24uXHJcbiAqIEBwYXJhbSB7P1BoYXNlci5EaXNwbGF5LkNvbG9yfSBbc3R5bGVDb25maWcuY29sbGlkaW5nVGlsZUNvbG9yPW9yYW5nZV0gLSBDb2xvciB0byB1c2UgZm9yIGRyYXdpbmcgYSBmaWxsZWRcclxuICogcmVjdGFuZ2xlIGF0IGNvbGxpZGluZyB0aWxlIGxvY2F0aW9ucy4gSWYgc2V0IHRvIG51bGwsIGNvbGxpZGluZyB0aWxlcyB3aWxsIG5vdCBiZSBkcmF3bi5cclxuICogQHBhcmFtIHs/UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFtzdHlsZUNvbmZpZy5mYWNlQ29sb3I9Z3JleV0gLSBDb2xvciB0byB1c2UgZm9yIGRyYXdpbmcgYSBsaW5lIGF0IGludGVyZXN0aW5nXHJcbiAqIHRpbGUgZmFjZXMuIElmIHNldCB0byBudWxsLCBpbnRlcmVzdGluZyB0aWxlIGZhY2VzIHdpbGwgbm90IGJlIGRyYXduLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgUmVuZGVyRGVidWcgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHN0eWxlQ29uZmlnLCBsYXllcilcclxue1xyXG4gICAgaWYgKHN0eWxlQ29uZmlnID09PSB1bmRlZmluZWQpIHsgc3R5bGVDb25maWcgPSB7fTsgfVxyXG5cclxuICAgIC8vIERlZmF1bHQgY29sb3JzIHdpdGhvdXQgbmVlZGxlc3NseSBjcmVhdGluZyBDb2xvciBvYmplY3RzXHJcbiAgICB2YXIgdGlsZUNvbG9yID0gKHN0eWxlQ29uZmlnLnRpbGVDb2xvciAhPT0gdW5kZWZpbmVkKSA/IHN0eWxlQ29uZmlnLnRpbGVDb2xvciA6IGRlZmF1bHRUaWxlQ29sb3I7XHJcbiAgICB2YXIgY29sbGlkaW5nVGlsZUNvbG9yID0gKHN0eWxlQ29uZmlnLmNvbGxpZGluZ1RpbGVDb2xvciAhPT0gdW5kZWZpbmVkKSA/IHN0eWxlQ29uZmlnLmNvbGxpZGluZ1RpbGVDb2xvciA6IGRlZmF1bHRDb2xsaWRpbmdUaWxlQ29sb3I7XHJcbiAgICB2YXIgZmFjZUNvbG9yID0gKHN0eWxlQ29uZmlnLmZhY2VDb2xvciAhPT0gdW5kZWZpbmVkKSA/IHN0eWxlQ29uZmlnLmZhY2VDb2xvciA6IGRlZmF1bHRGYWNlQ29sb3I7XHJcblxyXG4gICAgdmFyIHRpbGVzID0gR2V0VGlsZXNXaXRoaW4oMCwgMCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIGdyYXBoaWNzLnRyYW5zbGF0ZUNhbnZhcyhsYXllci50aWxlbWFwTGF5ZXIueCwgbGF5ZXIudGlsZW1hcExheWVyLnkpO1xyXG4gICAgZ3JhcGhpY3Muc2NhbGVDYW52YXMobGF5ZXIudGlsZW1hcExheWVyLnNjYWxlWCwgbGF5ZXIudGlsZW1hcExheWVyLnNjYWxlWSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZSA9IHRpbGVzW2ldO1xyXG5cclxuICAgICAgICB2YXIgdHcgPSB0aWxlLndpZHRoO1xyXG4gICAgICAgIHZhciB0aCA9IHRpbGUuaGVpZ2h0O1xyXG4gICAgICAgIHZhciB4ID0gdGlsZS5waXhlbFg7XHJcbiAgICAgICAgdmFyIHkgPSB0aWxlLnBpeGVsWTtcclxuXHJcbiAgICAgICAgdmFyIGNvbG9yID0gdGlsZS5jb2xsaWRlcyA/IGNvbGxpZGluZ1RpbGVDb2xvciA6IHRpbGVDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKGNvbG9yICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbFN0eWxlKGNvbG9yLmNvbG9yLCBjb2xvci5hbHBoYSAvIDI1NSk7XHJcbiAgICAgICAgICAgIGdyYXBoaWNzLmZpbGxSZWN0KHgsIHksIHR3LCB0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbnNldCB0aGUgZmFjZSBsaW5lIHRvIHByZXZlbnQgbmVpZ2hib3JpbmcgdGlsZSdzIGxpbmVzIGZyb20gb3ZlcmxhcHBpbmdcclxuICAgICAgICB4ICs9IDE7XHJcbiAgICAgICAgeSArPSAxO1xyXG4gICAgICAgIHR3IC09IDI7XHJcbiAgICAgICAgdGggLT0gMjtcclxuXHJcbiAgICAgICAgaWYgKGZhY2VDb2xvciAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdyYXBoaWNzLmxpbmVTdHlsZSgxLCBmYWNlQ29sb3IuY29sb3IsIGZhY2VDb2xvci5hbHBoYSAvIDI1NSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGlsZS5mYWNlVG9wKSB7IGdyYXBoaWNzLmxpbmVCZXR3ZWVuKHgsIHksIHggKyB0dywgeSk7IH1cclxuICAgICAgICAgICAgaWYgKHRpbGUuZmFjZVJpZ2h0KSB7IGdyYXBoaWNzLmxpbmVCZXR3ZWVuKHggKyB0dywgeSwgeCArIHR3LCB5ICsgdGgpOyB9XHJcbiAgICAgICAgICAgIGlmICh0aWxlLmZhY2VCb3R0b20pIHsgZ3JhcGhpY3MubGluZUJldHdlZW4oeCwgeSArIHRoLCB4ICsgdHcsIHkgKyB0aCk7IH1cclxuICAgICAgICAgICAgaWYgKHRpbGUuZmFjZUxlZnQpIHsgZ3JhcGhpY3MubGluZUJldHdlZW4oeCwgeSwgeCwgeSArIHRoKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyRGVidWc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/RenderDebug.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/ReplaceByIndex.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/ReplaceByIndex.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n * `findIndex` and updates their index to match `newIndex`. This only modifies the index and does\r\n * not change collision information.\r\n *\r\n * @function Phaser.Tilemaps.Components.ReplaceByIndex\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} findIndex - The index of the tile to search for.\r\n * @param {integer} newIndex - The index of the tile to replace it with.\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar ReplaceByIndex = function (findIndex, newIndex, tileX, tileY, width, height, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        if (tiles[i] && tiles[i].index === findIndex)\r\n        {\r\n            tiles[i].index = newIndex;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = ReplaceByIndex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1JlcGxhY2VCeUluZGV4LmpzPzI3MzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvUmVwbGFjZUJ5SW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW4nKTtcclxuXHJcbi8qKlxyXG4gKiBTY2FucyB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoZ2l2ZW4gaW4gdGlsZSBjb29yZGluYXRlcykgZm9yIHRpbGVzIHdpdGggYW4gaW5kZXggbWF0Y2hpbmdcclxuICogYGZpbmRJbmRleGAgYW5kIHVwZGF0ZXMgdGhlaXIgaW5kZXggdG8gbWF0Y2ggYG5ld0luZGV4YC4gVGhpcyBvbmx5IG1vZGlmaWVzIHRoZSBpbmRleCBhbmQgZG9lc1xyXG4gKiBub3QgY2hhbmdlIGNvbGxpc2lvbiBpbmZvcm1hdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlJlcGxhY2VCeUluZGV4XHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGZpbmRJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgdGlsZSB0byBzZWFyY2ggZm9yLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IG5ld0luZGV4IC0gVGhlIGluZGV4IG9mIHRoZSB0aWxlIHRvIHJlcGxhY2UgaXQgd2l0aC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIFJlcGxhY2VCeUluZGV4ID0gZnVuY3Rpb24gKGZpbmRJbmRleCwgbmV3SW5kZXgsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlcyA9IEdldFRpbGVzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVzW2ldICYmIHRpbGVzW2ldLmluZGV4ID09PSBmaW5kSW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aWxlc1tpXS5pbmRleCA9IG5ld0luZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVwbGFjZUJ5SW5kZXg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/ReplaceByIndex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetCollision.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetCollision.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar SetLayerCollisionIndex = __webpack_require__(/*! ./SetLayerCollisionIndex */ \"./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js\");\r\n\r\n/**\r\n * Sets collision on the given tile or tiles within a layer by index. You can pass in either a\r\n * single numeric index or an array of indexes: [2, 3, 15, 20]. The `collides` parameter controls if\r\n * collision will be enabled (true) or disabled (false).\r\n *\r\n * @function Phaser.Tilemaps.Components.SetCollision\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes.\r\n * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * @param {boolean} updateLayer - If true, updates the current tiles on the layer. Set to\r\n * false if no tiles have been placed for significant performance boost.\r\n */\r\nvar SetCollision = function (indexes, collides, recalculateFaces, layer, updateLayer)\r\n{\r\n    if (collides === undefined) { collides = true; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n    if (!Array.isArray(indexes)) { indexes = [ indexes ]; }\r\n    if (updateLayer === undefined) { updateLayer = true; }\r\n\r\n    // Update the array of colliding indexes\r\n    for (var i = 0; i < indexes.length; i++)\r\n    {\r\n        SetLayerCollisionIndex(indexes[i], collides, layer);\r\n    }\r\n    \r\n    // Update the tiles\r\n    if (updateLayer)\r\n    {\r\n        for (var ty = 0; ty < layer.height; ty++)\r\n        {\r\n            for (var tx = 0; tx < layer.width; tx++)\r\n            {\r\n                var tile = layer.data[ty][tx];\r\n\r\n                if (tile && indexes.indexOf(tile.index) !== -1)\r\n                {\r\n                    SetTileCollision(tile, collides);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        CalculateFacesWithin(0, 0, layer.width, layer.height, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = SetCollision;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbi5qcz80ZjQxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBb0I7QUFDbkQsMkJBQTJCLG1CQUFPLENBQUMscUdBQXdCO0FBQzNELDZCQUE2QixtQkFBTyxDQUFDLHlHQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCO0FBQ2xELHlDQUF5Qyx5QkFBeUI7QUFDbEUsa0NBQWtDLHVCQUF1QjtBQUN6RCxvQ0FBb0Msb0JBQW9COztBQUV4RDtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvU2V0Q29sbGlzaW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2V0VGlsZUNvbGxpc2lvbiA9IHJlcXVpcmUoJy4vU2V0VGlsZUNvbGxpc2lvbicpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNXaXRoaW4gPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzV2l0aGluJyk7XHJcbnZhciBTZXRMYXllckNvbGxpc2lvbkluZGV4ID0gcmVxdWlyZSgnLi9TZXRMYXllckNvbGxpc2lvbkluZGV4Jyk7XHJcblxyXG4vKipcclxuICogU2V0cyBjb2xsaXNpb24gb24gdGhlIGdpdmVuIHRpbGUgb3IgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgaW5kZXguIFlvdSBjYW4gcGFzcyBpbiBlaXRoZXIgYVxyXG4gKiBzaW5nbGUgbnVtZXJpYyBpbmRleCBvciBhbiBhcnJheSBvZiBpbmRleGVzOiBbMiwgMywgMTUsIDIwXS4gVGhlIGBjb2xsaWRlc2AgcGFyYW1ldGVyIGNvbnRyb2xzIGlmXHJcbiAqIGNvbGxpc2lvbiB3aWxsIGJlIGVuYWJsZWQgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5TZXRDb2xsaXNpb25cclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gRWl0aGVyIGEgc2luZ2xlIHRpbGUgaW5kZXgsIG9yIGFuIGFycmF5IG9mIHRpbGUgaW5kZXhlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBJZiB0cnVlIGl0IHdpbGwgZW5hYmxlIGNvbGxpc2lvbi4gSWYgZmFsc2UgaXQgd2lsbCBjbGVhciBjb2xsaXNpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlTGF5ZXIgLSBJZiB0cnVlLCB1cGRhdGVzIHRoZSBjdXJyZW50IHRpbGVzIG9uIHRoZSBsYXllci4gU2V0IHRvXHJcbiAqIGZhbHNlIGlmIG5vIHRpbGVzIGhhdmUgYmVlbiBwbGFjZWQgZm9yIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0LlxyXG4gKi9cclxudmFyIFNldENvbGxpc2lvbiA9IGZ1bmN0aW9uIChpbmRleGVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIsIHVwZGF0ZUxheWVyKVxyXG57XHJcbiAgICBpZiAoY29sbGlkZXMgPT09IHVuZGVmaW5lZCkgeyBjb2xsaWRlcyA9IHRydWU7IH1cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShpbmRleGVzKSkgeyBpbmRleGVzID0gWyBpbmRleGVzIF07IH1cclxuICAgIGlmICh1cGRhdGVMYXllciA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZUxheWVyID0gdHJ1ZTsgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgYXJyYXkgb2YgY29sbGlkaW5nIGluZGV4ZXNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXhlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBTZXRMYXllckNvbGxpc2lvbkluZGV4KGluZGV4ZXNbaV0sIGNvbGxpZGVzLCBsYXllcik7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFVwZGF0ZSB0aGUgdGlsZXNcclxuICAgIGlmICh1cGRhdGVMYXllcilcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciB0eSA9IDA7IHR5IDwgbGF5ZXIuaGVpZ2h0OyB0eSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgdHggPSAwOyB0eCA8IGxheWVyLndpZHRoOyB0eCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGxheWVyLmRhdGFbdHldW3R4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGlsZSAmJiBpbmRleGVzLmluZGV4T2YodGlsZS5pbmRleCkgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFNldFRpbGVDb2xsaXNpb24odGlsZSwgY29sbGlkZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIENhbGN1bGF0ZUZhY2VzV2l0aGluKDAsIDAsIGxheWVyLndpZHRoLCBsYXllci5oZWlnaHQsIGxheWVyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0Q29sbGlzaW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetCollision.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetCollisionBetween.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetCollisionBetween.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar SetLayerCollisionIndex = __webpack_require__(/*! ./SetLayerCollisionIndex */ \"./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js\");\r\n\r\n/**\r\n * Sets collision on a range of tiles in a layer whose index is between the specified `start` and\r\n * `stop` (inclusive). Calling this with a start value of 10 and a stop value of 14 would set\r\n * collision for tiles 10, 11, 12, 13 and 14. The `collides` parameter controls if collision will be\r\n * enabled (true) or disabled (false).\r\n *\r\n * @function Phaser.Tilemaps.Components.SetCollisionBetween\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} start - The first index of the tile to be set for collision.\r\n * @param {integer} stop - The last index of the tile to be set for collision.\r\n * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * @param {boolean} [updateLayer=true] - If true, updates the current tiles on the layer. Set to\r\n * false if no tiles have been placed for significant performance boost.\r\n */\r\nvar SetCollisionBetween = function (start, stop, collides, recalculateFaces, layer, updateLayer)\r\n{\r\n    if (collides === undefined) { collides = true; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n    if (updateLayer === undefined) { updateLayer = true; }\r\n\r\n    if (start > stop) { return; }\r\n\r\n    // Update the array of colliding indexes\r\n    for (var index = start; index <= stop; index++)\r\n    {\r\n        SetLayerCollisionIndex(index, collides, layer);\r\n    }\r\n\r\n    // Update the tiles\r\n    if (updateLayer)\r\n    {\r\n        for (var ty = 0; ty < layer.height; ty++)\r\n        {\r\n            for (var tx = 0; tx < layer.width; tx++)\r\n            {\r\n                var tile = layer.data[ty][tx];\r\n              \r\n                if (tile)\r\n                {\r\n                    if (tile.index >= start && tile.index <= stop)\r\n                    {\r\n                        SetTileCollision(tile, collides);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        CalculateFacesWithin(0, 0, layer.width, layer.height, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = SetCollisionBetween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbkJldHdlZW4uanM/YzA4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsNkZBQW9CO0FBQ25ELDJCQUEyQixtQkFBTyxDQUFDLHFHQUF3QjtBQUMzRCw2QkFBNkIsbUJBQU8sQ0FBQyx5R0FBMEI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMEJBQTBCO0FBQ3JDLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxpQkFBaUI7QUFDbEQseUNBQXlDLHlCQUF5QjtBQUNsRSxvQ0FBb0Msb0JBQW9COztBQUV4RCx1QkFBdUIsUUFBUTs7QUFFL0I7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBLDRCQUE0QixrQkFBa0I7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9TZXRDb2xsaXNpb25CZXR3ZWVuLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2V0VGlsZUNvbGxpc2lvbiA9IHJlcXVpcmUoJy4vU2V0VGlsZUNvbGxpc2lvbicpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNXaXRoaW4gPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzV2l0aGluJyk7XHJcbnZhciBTZXRMYXllckNvbGxpc2lvbkluZGV4ID0gcmVxdWlyZSgnLi9TZXRMYXllckNvbGxpc2lvbkluZGV4Jyk7XHJcblxyXG4vKipcclxuICogU2V0cyBjb2xsaXNpb24gb24gYSByYW5nZSBvZiB0aWxlcyBpbiBhIGxheWVyIHdob3NlIGluZGV4IGlzIGJldHdlZW4gdGhlIHNwZWNpZmllZCBgc3RhcnRgIGFuZFxyXG4gKiBgc3RvcGAgKGluY2x1c2l2ZSkuIENhbGxpbmcgdGhpcyB3aXRoIGEgc3RhcnQgdmFsdWUgb2YgMTAgYW5kIGEgc3RvcCB2YWx1ZSBvZiAxNCB3b3VsZCBzZXRcclxuICogY29sbGlzaW9uIGZvciB0aWxlcyAxMCwgMTEsIDEyLCAxMyBhbmQgMTQuIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlciBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZVxyXG4gKiBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuU2V0Q29sbGlzaW9uQmV0d2VlblxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzdGFydCAtIFRoZSBmaXJzdCBpbmRleCBvZiB0aGUgdGlsZSB0byBiZSBzZXQgZm9yIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzdG9wIC0gVGhlIGxhc3QgaW5kZXggb2YgdGhlIHRpbGUgdG8gYmUgc2V0IGZvciBjb2xsaXNpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcmVjYWxjdWxhdGUgdGhlIHRpbGUgZmFjZXMgYWZ0ZXIgdGhlIHVwZGF0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVMYXllcj10cnVlXSAtIElmIHRydWUsIHVwZGF0ZXMgdGhlIGN1cnJlbnQgdGlsZXMgb24gdGhlIGxheWVyLiBTZXQgdG9cclxuICogZmFsc2UgaWYgbm8gdGlsZXMgaGF2ZSBiZWVuIHBsYWNlZCBmb3Igc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QuXHJcbiAqL1xyXG52YXIgU2V0Q29sbGlzaW9uQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydCwgc3RvcCwgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyLCB1cGRhdGVMYXllcilcclxue1xyXG4gICAgaWYgKGNvbGxpZGVzID09PSB1bmRlZmluZWQpIHsgY29sbGlkZXMgPSB0cnVlOyB9XHJcbiAgICBpZiAocmVjYWxjdWxhdGVGYWNlcyA9PT0gdW5kZWZpbmVkKSB7IHJlY2FsY3VsYXRlRmFjZXMgPSB0cnVlOyB9XHJcbiAgICBpZiAodXBkYXRlTGF5ZXIgPT09IHVuZGVmaW5lZCkgeyB1cGRhdGVMYXllciA9IHRydWU7IH1cclxuXHJcbiAgICBpZiAoc3RhcnQgPiBzdG9wKSB7IHJldHVybjsgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgYXJyYXkgb2YgY29sbGlkaW5nIGluZGV4ZXNcclxuICAgIGZvciAodmFyIGluZGV4ID0gc3RhcnQ7IGluZGV4IDw9IHN0b3A7IGluZGV4KyspXHJcbiAgICB7XHJcbiAgICAgICAgU2V0TGF5ZXJDb2xsaXNpb25JbmRleChpbmRleCwgY29sbGlkZXMsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIHRpbGVzXHJcbiAgICBpZiAodXBkYXRlTGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgdHkgPSAwOyB0eSA8IGxheWVyLmhlaWdodDsgdHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHR4ID0gMDsgdHggPCBsYXllci53aWR0aDsgdHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBsYXllci5kYXRhW3R5XVt0eF07XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodGlsZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5pbmRleCA+PSBzdGFydCAmJiB0aWxlLmluZGV4IDw9IHN0b3ApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRUaWxlQ29sbGlzaW9uKHRpbGUsIGNvbGxpZGVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNXaXRoaW4oMCwgMCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbGF5ZXIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRDb2xsaXNpb25CZXR3ZWVuO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetCollisionBetween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetCollisionByExclusion.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetCollisionByExclusion.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar SetLayerCollisionIndex = __webpack_require__(/*! ./SetLayerCollisionIndex */ \"./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js\");\r\n\r\n/**\r\n * Sets collision on all tiles in the given layer, except for tiles that have an index specified in\r\n * the given array. The `collides` parameter controls if collision will be enabled (true) or\r\n * disabled (false).\r\n *\r\n * @function Phaser.Tilemaps.Components.SetCollisionByExclusion\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer[]} indexes - An array of the tile indexes to not be counted for collision.\r\n * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetCollisionByExclusion = function (indexes, collides, recalculateFaces, layer)\r\n{\r\n    if (collides === undefined) { collides = true; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n    if (!Array.isArray(indexes)) { indexes = [ indexes ]; }\r\n\r\n    // Note: this only updates layer.collideIndexes for tile indexes found currently in the layer\r\n    for (var ty = 0; ty < layer.height; ty++)\r\n    {\r\n        for (var tx = 0; tx < layer.width; tx++)\r\n        {\r\n            var tile = layer.data[ty][tx];\r\n            if (tile && indexes.indexOf(tile.index) === -1)\r\n            {\r\n                SetTileCollision(tile, collides);\r\n                SetLayerCollisionIndex(tile.index, collides, layer);\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        CalculateFacesWithin(0, 0, layer.width, layer.height, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = SetCollisionByExclusion;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbkJ5RXhjbHVzaW9uLmpzP2Q3N2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLDZGQUFvQjtBQUNuRCwyQkFBMkIsbUJBQU8sQ0FBQyxxR0FBd0I7QUFDM0QsNkJBQTZCLG1CQUFPLENBQUMseUdBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCO0FBQ2xELHlDQUF5Qyx5QkFBeUI7QUFDbEUsa0NBQWtDLHVCQUF1Qjs7QUFFekQ7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvU2V0Q29sbGlzaW9uQnlFeGNsdXNpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTZXRUaWxlQ29sbGlzaW9uID0gcmVxdWlyZSgnLi9TZXRUaWxlQ29sbGlzaW9uJyk7XHJcbnZhciBDYWxjdWxhdGVGYWNlc1dpdGhpbiA9IHJlcXVpcmUoJy4vQ2FsY3VsYXRlRmFjZXNXaXRoaW4nKTtcclxudmFyIFNldExheWVyQ29sbGlzaW9uSW5kZXggPSByZXF1aXJlKCcuL1NldExheWVyQ29sbGlzaW9uSW5kZXgnKTtcclxuXHJcbi8qKlxyXG4gKiBTZXRzIGNvbGxpc2lvbiBvbiBhbGwgdGlsZXMgaW4gdGhlIGdpdmVuIGxheWVyLCBleGNlcHQgZm9yIHRpbGVzIHRoYXQgaGF2ZSBhbiBpbmRleCBzcGVjaWZpZWQgaW5cclxuICogdGhlIGdpdmVuIGFycmF5LiBUaGUgYGNvbGxpZGVzYCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3JcclxuICogZGlzYWJsZWQgKGZhbHNlKS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlNldENvbGxpc2lvbkJ5RXhjbHVzaW9uXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJbXX0gaW5kZXhlcyAtIEFuIGFycmF5IG9mIHRoZSB0aWxlIGluZGV4ZXMgdG8gbm90IGJlIGNvdW50ZWQgZm9yIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBJZiB0cnVlIGl0IHdpbGwgZW5hYmxlIGNvbGxpc2lvbi4gSWYgZmFsc2UgaXQgd2lsbCBjbGVhciBjb2xsaXNpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgU2V0Q29sbGlzaW9uQnlFeGNsdXNpb24gPSBmdW5jdGlvbiAoaW5kZXhlcywgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoY29sbGlkZXMgPT09IHVuZGVmaW5lZCkgeyBjb2xsaWRlcyA9IHRydWU7IH1cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShpbmRleGVzKSkgeyBpbmRleGVzID0gWyBpbmRleGVzIF07IH1cclxuXHJcbiAgICAvLyBOb3RlOiB0aGlzIG9ubHkgdXBkYXRlcyBsYXllci5jb2xsaWRlSW5kZXhlcyBmb3IgdGlsZSBpbmRleGVzIGZvdW5kIGN1cnJlbnRseSBpbiB0aGUgbGF5ZXJcclxuICAgIGZvciAodmFyIHR5ID0gMDsgdHkgPCBsYXllci5oZWlnaHQ7IHR5KyspXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgdHggPSAwOyB0eCA8IGxheWVyLndpZHRoOyB0eCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRpbGUgPSBsYXllci5kYXRhW3R5XVt0eF07XHJcbiAgICAgICAgICAgIGlmICh0aWxlICYmIGluZGV4ZXMuaW5kZXhPZih0aWxlLmluZGV4KSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFNldFRpbGVDb2xsaXNpb24odGlsZSwgY29sbGlkZXMpO1xyXG4gICAgICAgICAgICAgICAgU2V0TGF5ZXJDb2xsaXNpb25JbmRleCh0aWxlLmluZGV4LCBjb2xsaWRlcywgbGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIENhbGN1bGF0ZUZhY2VzV2l0aGluKDAsIDAsIGxheWVyLndpZHRoLCBsYXllci5oZWlnaHQsIGxheWVyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0Q29sbGlzaW9uQnlFeGNsdXNpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetCollisionByExclusion.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetCollisionByProperty.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetCollisionByProperty.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\nvar HasValue = __webpack_require__(/*! ../../utils/object/HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\n\r\n/**\r\n * Sets collision on the tiles within a layer by checking tile properties. If a tile has a property\r\n * that matches the given properties object, its collision flag will be set. The `collides`\r\n * parameter controls if collision will be enabled (true) or disabled (false). Passing in\r\n * `{ collides: true }` would update the collision flag on any tiles with a \"collides\" property that\r\n * has a value of true. Any tile that doesn't have \"collides\" set to true will be ignored. You can\r\n * also use an array of values, e.g. `{ types: [\"stone\", \"lava\", \"sand\" ] }`. If a tile has a\r\n * \"types\" property that matches any of those values, its collision flag will be updated.\r\n *\r\n * @function Phaser.Tilemaps.Components.SetCollisionByProperty\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {object} properties - An object with tile properties and corresponding values that should be checked.\r\n * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetCollisionByProperty = function (properties, collides, recalculateFaces, layer)\r\n{\r\n    if (collides === undefined) { collides = true; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    for (var ty = 0; ty < layer.height; ty++)\r\n    {\r\n        for (var tx = 0; tx < layer.width; tx++)\r\n        {\r\n            var tile = layer.data[ty][tx];\r\n\r\n            if (!tile) { continue; }\r\n\r\n            for (var property in properties)\r\n            {\r\n                if (!HasValue(tile.properties, property)) { continue; }\r\n\r\n                var values = properties[property];\r\n                if (!Array.isArray(values))\r\n                {\r\n                    values = [ values ];\r\n                }\r\n\r\n                for (var i = 0; i < values.length; i++)\r\n                {\r\n                    if (tile.properties[property] === values[i])\r\n                    {\r\n                        SetTileCollision(tile, collides);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        CalculateFacesWithin(0, 0, layer.width, layer.height, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = SetCollisionByProperty;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbkJ5UHJvcGVydHkuanM/ZWE5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsNkZBQW9CO0FBQ25ELDJCQUEyQixtQkFBTyxDQUFDLHFHQUF3QjtBQUMzRCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssaUJBQWlCO0FBQ3RCO0FBQ0EsdUNBQXVDLG9DQUFvQztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCO0FBQ2xELHlDQUF5Qyx5QkFBeUI7O0FBRWxFLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7O0FBRUEsd0JBQXdCLFVBQVU7O0FBRWxDO0FBQ0E7QUFDQSwyREFBMkQsVUFBVTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsbUJBQW1CO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9TZXRDb2xsaXNpb25CeVByb3BlcnR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2V0VGlsZUNvbGxpc2lvbiA9IHJlcXVpcmUoJy4vU2V0VGlsZUNvbGxpc2lvbicpO1xyXG52YXIgQ2FsY3VsYXRlRmFjZXNXaXRoaW4gPSByZXF1aXJlKCcuL0NhbGN1bGF0ZUZhY2VzV2l0aGluJyk7XHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9IYXNWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFNldHMgY29sbGlzaW9uIG9uIHRoZSB0aWxlcyB3aXRoaW4gYSBsYXllciBieSBjaGVja2luZyB0aWxlIHByb3BlcnRpZXMuIElmIGEgdGlsZSBoYXMgYSBwcm9wZXJ0eVxyXG4gKiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHByb3BlcnRpZXMgb2JqZWN0LCBpdHMgY29sbGlzaW9uIGZsYWcgd2lsbCBiZSBzZXQuIFRoZSBgY29sbGlkZXNgXHJcbiAqIHBhcmFtZXRlciBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZSBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLiBQYXNzaW5nIGluXHJcbiAqIGB7IGNvbGxpZGVzOiB0cnVlIH1gIHdvdWxkIHVwZGF0ZSB0aGUgY29sbGlzaW9uIGZsYWcgb24gYW55IHRpbGVzIHdpdGggYSBcImNvbGxpZGVzXCIgcHJvcGVydHkgdGhhdFxyXG4gKiBoYXMgYSB2YWx1ZSBvZiB0cnVlLiBBbnkgdGlsZSB0aGF0IGRvZXNuJ3QgaGF2ZSBcImNvbGxpZGVzXCIgc2V0IHRvIHRydWUgd2lsbCBiZSBpZ25vcmVkLiBZb3UgY2FuXHJcbiAqIGFsc28gdXNlIGFuIGFycmF5IG9mIHZhbHVlcywgZS5nLiBgeyB0eXBlczogW1wic3RvbmVcIiwgXCJsYXZhXCIsIFwic2FuZFwiIF0gfWAuIElmIGEgdGlsZSBoYXMgYVxyXG4gKiBcInR5cGVzXCIgcHJvcGVydHkgdGhhdCBtYXRjaGVzIGFueSBvZiB0aG9zZSB2YWx1ZXMsIGl0cyBjb2xsaXNpb24gZmxhZyB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5TZXRDb2xsaXNpb25CeVByb3BlcnR5XHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllcyAtIEFuIG9iamVjdCB3aXRoIHRpbGUgcHJvcGVydGllcyBhbmQgY29ycmVzcG9uZGluZyB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBJZiB0cnVlIGl0IHdpbGwgZW5hYmxlIGNvbGxpc2lvbi4gSWYgZmFsc2UgaXQgd2lsbCBjbGVhciBjb2xsaXNpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgU2V0Q29sbGlzaW9uQnlQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgbGF5ZXIpXHJcbntcclxuICAgIGlmIChjb2xsaWRlcyA9PT0gdW5kZWZpbmVkKSB7IGNvbGxpZGVzID0gdHJ1ZTsgfVxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMgPT09IHVuZGVmaW5lZCkgeyByZWNhbGN1bGF0ZUZhY2VzID0gdHJ1ZTsgfVxyXG5cclxuICAgIGZvciAodmFyIHR5ID0gMDsgdHkgPCBsYXllci5oZWlnaHQ7IHR5KyspXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgdHggPSAwOyB0eCA8IGxheWVyLndpZHRoOyB0eCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRpbGUgPSBsYXllci5kYXRhW3R5XVt0eF07XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRpbGUpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICghSGFzVmFsdWUodGlsZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gcHJvcGVydGllc1twcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbIHZhbHVlcyBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLnByb3BlcnRpZXNbcHJvcGVydHldID09PSB2YWx1ZXNbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRUaWxlQ29sbGlzaW9uKHRpbGUsIGNvbGxpZGVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNXaXRoaW4oMCwgMCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbGF5ZXIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRDb2xsaXNpb25CeVByb3BlcnR5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetCollisionByProperty.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetCollisionFromCollisionGroup.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetCollisionFromCollisionGroup.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTileCollision = __webpack_require__(/*! ./SetTileCollision */ \"./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\");\r\nvar CalculateFacesWithin = __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\");\r\n\r\n/**\r\n * Sets collision on the tiles within a layer by checking each tile's collision group data\r\n * (typically defined in Tiled within the tileset collision editor). If any objects are found within\r\n * a tile's collision group, the tile's colliding information will be set. The `collides` parameter\r\n * controls if collision will be enabled (true) or disabled (false).\r\n *\r\n * @function Phaser.Tilemaps.Components.SetCollisionFromCollisionGroup\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetCollisionFromCollisionGroup = function (collides, recalculateFaces, layer)\r\n{\r\n    if (collides === undefined) { collides = true; }\r\n    if (recalculateFaces === undefined) { recalculateFaces = true; }\r\n\r\n    for (var ty = 0; ty < layer.height; ty++)\r\n    {\r\n        for (var tx = 0; tx < layer.width; tx++)\r\n        {\r\n            var tile = layer.data[ty][tx];\r\n\r\n            if (!tile) { continue; }\r\n\r\n            var collisionGroup = tile.getCollisionGroup();\r\n\r\n            // It's possible in Tiled to have a collision group without any shapes, e.g. create a\r\n            // shape and then delete the shape.\r\n            if (collisionGroup && collisionGroup.objects && collisionGroup.objects.length > 0)\r\n            {\r\n                SetTileCollision(tile, collides);\r\n            }\r\n        }\r\n    }\r\n\r\n    if (recalculateFaces)\r\n    {\r\n        CalculateFacesWithin(0, 0, layer.width, layer.height, layer);\r\n    }\r\n};\r\n\r\nmodule.exports = SetCollisionFromCollisionGroup;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cC5qcz82NTQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBb0I7QUFDbkQsMkJBQTJCLG1CQUFPLENBQUMscUdBQXdCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGlCQUFpQjtBQUNsRCx5Q0FBeUMseUJBQXlCOztBQUVsRSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBOztBQUVBLHdCQUF3QixVQUFVOztBQUVsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNldFRpbGVDb2xsaXNpb24gPSByZXF1aXJlKCcuL1NldFRpbGVDb2xsaXNpb24nKTtcclxudmFyIENhbGN1bGF0ZUZhY2VzV2l0aGluID0gcmVxdWlyZSgnLi9DYWxjdWxhdGVGYWNlc1dpdGhpbicpO1xyXG5cclxuLyoqXHJcbiAqIFNldHMgY29sbGlzaW9uIG9uIHRoZSB0aWxlcyB3aXRoaW4gYSBsYXllciBieSBjaGVja2luZyBlYWNoIHRpbGUncyBjb2xsaXNpb24gZ3JvdXAgZGF0YVxyXG4gKiAodHlwaWNhbGx5IGRlZmluZWQgaW4gVGlsZWQgd2l0aGluIHRoZSB0aWxlc2V0IGNvbGxpc2lvbiBlZGl0b3IpLiBJZiBhbnkgb2JqZWN0cyBhcmUgZm91bmQgd2l0aGluXHJcbiAqIGEgdGlsZSdzIGNvbGxpc2lvbiBncm91cCwgdGhlIHRpbGUncyBjb2xsaWRpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSBzZXQuIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlclxyXG4gKiBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZSBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuU2V0Q29sbGlzaW9uRnJvbUNvbGxpc2lvbkdyb3VwXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyIGNvbGxpc2lvbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICovXHJcbnZhciBTZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXAgPSBmdW5jdGlvbiAoY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoY29sbGlkZXMgPT09IHVuZGVmaW5lZCkgeyBjb2xsaWRlcyA9IHRydWU7IH1cclxuICAgIGlmIChyZWNhbGN1bGF0ZUZhY2VzID09PSB1bmRlZmluZWQpIHsgcmVjYWxjdWxhdGVGYWNlcyA9IHRydWU7IH1cclxuXHJcbiAgICBmb3IgKHZhciB0eSA9IDA7IHR5IDwgbGF5ZXIuaGVpZ2h0OyB0eSsrKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIHR4ID0gMDsgdHggPCBsYXllci53aWR0aDsgdHgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlID0gbGF5ZXIuZGF0YVt0eV1bdHhdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aWxlKSB7IGNvbnRpbnVlOyB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY29sbGlzaW9uR3JvdXAgPSB0aWxlLmdldENvbGxpc2lvbkdyb3VwKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGluIFRpbGVkIHRvIGhhdmUgYSBjb2xsaXNpb24gZ3JvdXAgd2l0aG91dCBhbnkgc2hhcGVzLCBlLmcuIGNyZWF0ZSBhXHJcbiAgICAgICAgICAgIC8vIHNoYXBlIGFuZCB0aGVuIGRlbGV0ZSB0aGUgc2hhcGUuXHJcbiAgICAgICAgICAgIGlmIChjb2xsaXNpb25Hcm91cCAmJiBjb2xsaXNpb25Hcm91cC5vYmplY3RzICYmIGNvbGxpc2lvbkdyb3VwLm9iamVjdHMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgU2V0VGlsZUNvbGxpc2lvbih0aWxlLCBjb2xsaWRlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FsY3VsYXRlRmFjZXNXaXRoaW4oMCwgMCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbGF5ZXIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetCollisionFromCollisionGroup.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Internally used method to keep track of the tile indexes that collide within a layer. This\r\n * updates LayerData.collideIndexes to either contain or not contain the given `tileIndex`.\r\n *\r\n * @function Phaser.Tilemaps.Components.SetLayerCollisionIndex\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileIndex - The tile index to set the collision boolean for.\r\n * @param {boolean} [collides=true] - Should the tile index collide or not?\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetLayerCollisionIndex = function (tileIndex, collides, layer)\r\n{\r\n    var loc = layer.collideIndexes.indexOf(tileIndex);\r\n\r\n    if (collides && loc === -1)\r\n    {\r\n        layer.collideIndexes.push(tileIndex);\r\n    }\r\n    else if (!collides && loc !== -1)\r\n    {\r\n        layer.collideIndexes.splice(loc, 1);\r\n    }\r\n};\r\n\r\nmodule.exports = SetLayerCollisionIndex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldExheWVyQ29sbGlzaW9uSW5kZXguanM/ZTRlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9TZXRMYXllckNvbGxpc2lvbkluZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogSW50ZXJuYWxseSB1c2VkIG1ldGhvZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB0aWxlIGluZGV4ZXMgdGhhdCBjb2xsaWRlIHdpdGhpbiBhIGxheWVyLiBUaGlzXHJcbiAqIHVwZGF0ZXMgTGF5ZXJEYXRhLmNvbGxpZGVJbmRleGVzIHRvIGVpdGhlciBjb250YWluIG9yIG5vdCBjb250YWluIHRoZSBnaXZlbiBgdGlsZUluZGV4YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlNldExheWVyQ29sbGlzaW9uSW5kZXhcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUluZGV4IC0gVGhlIHRpbGUgaW5kZXggdG8gc2V0IHRoZSBjb2xsaXNpb24gYm9vbGVhbiBmb3IuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gU2hvdWxkIHRoZSB0aWxlIGluZGV4IGNvbGxpZGUgb3Igbm90P1xyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgU2V0TGF5ZXJDb2xsaXNpb25JbmRleCA9IGZ1bmN0aW9uICh0aWxlSW5kZXgsIGNvbGxpZGVzLCBsYXllcilcclxue1xyXG4gICAgdmFyIGxvYyA9IGxheWVyLmNvbGxpZGVJbmRleGVzLmluZGV4T2YodGlsZUluZGV4KTtcclxuXHJcbiAgICBpZiAoY29sbGlkZXMgJiYgbG9jID09PSAtMSlcclxuICAgIHtcclxuICAgICAgICBsYXllci5jb2xsaWRlSW5kZXhlcy5wdXNoKHRpbGVJbmRleCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghY29sbGlkZXMgJiYgbG9jICE9PSAtMSlcclxuICAgIHtcclxuICAgICAgICBsYXllci5jb2xsaWRlSW5kZXhlcy5zcGxpY2UobG9jLCAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0TGF5ZXJDb2xsaXNpb25JbmRleDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetLayerCollisionIndex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetTileCollision.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetTileCollision.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Internally used method to set the colliding state of a tile. This does not recalculate\r\n * interesting faces.\r\n *\r\n * @function Phaser.Tilemaps.Components.SetTileCollision\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tilemaps.Tile} tile - The Tile to set the collision on.\r\n * @param {boolean} [collides=true] - Should the tile index collide or not?\r\n */\r\nvar SetTileCollision = function (tile, collides)\r\n{\r\n    if (collides)\r\n    {\r\n        tile.setCollision(true, true, true, true, false);\r\n    }\r\n    else\r\n    {\r\n        tile.resetCollision(false);\r\n    }\r\n};\r\n\r\nmodule.exports = SetTileCollision;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldFRpbGVDb2xsaXNpb24uanM/NzQ0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldFRpbGVDb2xsaXNpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJbnRlcm5hbGx5IHVzZWQgbWV0aG9kIHRvIHNldCB0aGUgY29sbGlkaW5nIHN0YXRlIG9mIGEgdGlsZS4gVGhpcyBkb2VzIG5vdCByZWNhbGN1bGF0ZVxyXG4gKiBpbnRlcmVzdGluZyBmYWNlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlNldFRpbGVDb2xsaXNpb25cclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IHRpbGUgLSBUaGUgVGlsZSB0byBzZXQgdGhlIGNvbGxpc2lvbiBvbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBTaG91bGQgdGhlIHRpbGUgaW5kZXggY29sbGlkZSBvciBub3Q/XHJcbiAqL1xyXG52YXIgU2V0VGlsZUNvbGxpc2lvbiA9IGZ1bmN0aW9uICh0aWxlLCBjb2xsaWRlcylcclxue1xyXG4gICAgaWYgKGNvbGxpZGVzKVxyXG4gICAge1xyXG4gICAgICAgIHRpbGUuc2V0Q29sbGlzaW9uKHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aWxlLnJlc2V0Q29sbGlzaW9uKGZhbHNlKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VGlsZUNvbGxpc2lvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetTileCollision.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetTileIndexCallback.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetTileIndexCallback.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets a global collision callback for the given tile index within the layer. This will affect all\r\n * tiles on this layer that have the same index. If a callback is already set for the tile index it\r\n * will be replaced. Set the callback to null to remove it. If you want to set a callback for a tile\r\n * at a specific location on the map then see setTileLocationCallback.\r\n *\r\n * @function Phaser.Tilemaps.Components.SetTileIndexCallback\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes to have a collision callback set for.\r\n * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n * @param {object} callbackContext - The context under which the callback is called.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetTileIndexCallback = function (indexes, callback, callbackContext, layer)\r\n{\r\n    if (typeof indexes === 'number')\r\n    {\r\n        layer.callbacks[indexes] = (callback !== null)\r\n            ? { callback: callback, callbackContext: callbackContext }\r\n            : undefined;\r\n    }\r\n    else\r\n    {\r\n        for (var i = 0, len = indexes.length; i < len; i++)\r\n        {\r\n            layer.callbacks[indexes[i]] = (callback !== null)\r\n                ? { callback: callback, callbackContext: callbackContext }\r\n                : undefined;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = SetTileIndexCallback;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldFRpbGVJbmRleENhbGxiYWNrLmpzPzU0OGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9TZXRUaWxlSW5kZXhDYWxsYmFjay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBnbG9iYWwgY29sbGlzaW9uIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdGlsZSBpbmRleCB3aXRoaW4gdGhlIGxheWVyLiBUaGlzIHdpbGwgYWZmZWN0IGFsbFxyXG4gKiB0aWxlcyBvbiB0aGlzIGxheWVyIHRoYXQgaGF2ZSB0aGUgc2FtZSBpbmRleC4gSWYgYSBjYWxsYmFjayBpcyBhbHJlYWR5IHNldCBmb3IgdGhlIHRpbGUgaW5kZXggaXRcclxuICogd2lsbCBiZSByZXBsYWNlZC4gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHRvIHJlbW92ZSBpdC4gSWYgeW91IHdhbnQgdG8gc2V0IGEgY2FsbGJhY2sgZm9yIGEgdGlsZVxyXG4gKiBhdCBhIHNwZWNpZmljIGxvY2F0aW9uIG9uIHRoZSBtYXAgdGhlbiBzZWUgc2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2suXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5TZXRUaWxlSW5kZXhDYWxsYmFja1xyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoaW50ZWdlcnxhcnJheSl9IGluZGV4ZXMgLSBFaXRoZXIgYSBzaW5nbGUgdGlsZSBpbmRleCwgb3IgYW4gYXJyYXkgb2YgdGlsZSBpbmRleGVzIHRvIGhhdmUgYSBjb2xsaXNpb24gY2FsbGJhY2sgc2V0IGZvci5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdGlsZSBpcyBjb2xsaWRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY2FsbGJhY2tDb250ZXh0IC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIFNldFRpbGVJbmRleENhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4ZXMsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIGxheWVyKVxyXG57XHJcbiAgICBpZiAodHlwZW9mIGluZGV4ZXMgPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyLmNhbGxiYWNrc1tpbmRleGVzXSA9IChjYWxsYmFjayAhPT0gbnVsbClcclxuICAgICAgICAgICAgPyB7IGNhbGxiYWNrOiBjYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0OiBjYWxsYmFja0NvbnRleHQgfVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW5kZXhlcy5sZW5ndGg7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxheWVyLmNhbGxiYWNrc1tpbmRleGVzW2ldXSA9IChjYWxsYmFjayAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgID8geyBjYWxsYmFjazogY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dDogY2FsbGJhY2tDb250ZXh0IH1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VGlsZUluZGV4Q2FsbGJhY2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetTileIndexCallback.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SetTileLocationCallback.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SetTileLocationCallback.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * Sets a collision callback for the given rectangular area (in tile coordinates) within the layer.\r\n * If a callback is already set for the tile index it will be replaced. Set the callback to null to\r\n * remove it.\r\n *\r\n * @function Phaser.Tilemaps.Components.SetTileLocationCallback\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n * @param {object} callbackContext - The context under which the callback is called.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SetTileLocationCallback = function (tileX, tileY, width, height, callback, callbackContext, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        tiles[i].setCollisionCallback(callback, callbackContext);\r\n    }\r\n\r\n};\r\n\r\nmodule.exports = SetTileLocationCallback;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldFRpbGVMb2NhdGlvbkNhbGxiYWNrLmpzPzNkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NldFRpbGVMb2NhdGlvbkNhbGxiYWNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogU2V0cyBhIGNvbGxpc2lvbiBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGUgbGF5ZXIuXHJcbiAqIElmIGEgY2FsbGJhY2sgaXMgYWxyZWFkeSBzZXQgZm9yIHRoZSB0aWxlIGluZGV4IGl0IHdpbGwgYmUgcmVwbGFjZWQuIFNldCB0aGUgY2FsbGJhY2sgdG8gbnVsbCB0b1xyXG4gKiByZW1vdmUgaXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5TZXRUaWxlTG9jYXRpb25DYWxsYmFja1xyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdGlsZSBpcyBjb2xsaWRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY2FsbGJhY2tDb250ZXh0IC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIFNldFRpbGVMb2NhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlcyA9IEdldFRpbGVzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdGlsZXNbaV0uc2V0Q29sbGlzaW9uQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCk7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRUaWxlTG9jYXRpb25DYWxsYmFjaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SetTileLocationCallback.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/Shuffle.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/Shuffle.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\nvar ShuffleArray = __webpack_require__(/*! ../../utils/array/Shuffle */ \"./node_modules/phaser/src/utils/array/Shuffle.js\");\r\n\r\n/**\r\n * Shuffles the tiles in a rectangular region (specified in tile coordinates) within the given\r\n * layer. It will only randomize the tiles in that area, so if they're all the same nothing will\r\n * appear to have changed! This method only modifies tile indexes and does not change collision\r\n * information.\r\n *\r\n * @function Phaser.Tilemaps.Components.Shuffle\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar Shuffle = function (tileX, tileY, width, height, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    var indexes = tiles.map(function (tile) { return tile.index; });\r\n    ShuffleArray(indexes);\r\n\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        tiles[i].index = indexes[i];\r\n    }\r\n};\r\n\r\nmodule.exports = Shuffle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NodWZmbGUuanM/YTEzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMseUZBQWtCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG1GQUEyQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLG1CQUFtQixFQUFFO0FBQ2xFOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1NodWZmbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRUaWxlc1dpdGhpbiA9IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW4nKTtcclxudmFyIFNodWZmbGVBcnJheSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2FycmF5L1NodWZmbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBTaHVmZmxlcyB0aGUgdGlsZXMgaW4gYSByZWN0YW5ndWxhciByZWdpb24gKHNwZWNpZmllZCBpbiB0aWxlIGNvb3JkaW5hdGVzKSB3aXRoaW4gdGhlIGdpdmVuXHJcbiAqIGxheWVyLiBJdCB3aWxsIG9ubHkgcmFuZG9taXplIHRoZSB0aWxlcyBpbiB0aGF0IGFyZWEsIHNvIGlmIHRoZXkncmUgYWxsIHRoZSBzYW1lIG5vdGhpbmcgd2lsbFxyXG4gKiBhcHBlYXIgdG8gaGF2ZSBjaGFuZ2VkISBUaGlzIG1ldGhvZCBvbmx5IG1vZGlmaWVzIHRpbGUgaW5kZXhlcyBhbmQgZG9lcyBub3QgY2hhbmdlIGNvbGxpc2lvblxyXG4gKiBpbmZvcm1hdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLlNodWZmbGVcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICovXHJcbnZhciBTaHVmZmxlID0gZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlcyA9IEdldFRpbGVzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgbnVsbCwgbGF5ZXIpO1xyXG5cclxuICAgIHZhciBpbmRleGVzID0gdGlsZXMubWFwKGZ1bmN0aW9uICh0aWxlKSB7IHJldHVybiB0aWxlLmluZGV4OyB9KTtcclxuICAgIFNodWZmbGVBcnJheShpbmRleGVzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHRpbGVzW2ldLmluZGV4ID0gaW5kZXhlc1tpXTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2h1ZmZsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/Shuffle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/SwapByIndex.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/SwapByIndex.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n * `indexA` and swaps then with `indexB`. This only modifies the index and does not change collision\r\n * information.\r\n *\r\n * @function Phaser.Tilemaps.Components.SwapByIndex\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileA - First tile index.\r\n * @param {integer} tileB - Second tile index.\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar SwapByIndex = function (indexA, indexB, tileX, tileY, width, height, layer)\r\n{\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n    for (var i = 0; i < tiles.length; i++)\r\n    {\r\n        if (tiles[i])\r\n        {\r\n            if (tiles[i].index === indexA)\r\n            {\r\n                tiles[i].index = indexB;\r\n            }\r\n            else if (tiles[i].index === indexB)\r\n            {\r\n                tiles[i].index = indexA;\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = SwapByIndex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1N3YXBCeUluZGV4LmpzPzFmMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1N3YXBCeUluZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogU2NhbnMgdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGdpdmVuIGluIHRpbGUgY29vcmRpbmF0ZXMpIGZvciB0aWxlcyB3aXRoIGFuIGluZGV4IG1hdGNoaW5nXHJcbiAqIGBpbmRleEFgIGFuZCBzd2FwcyB0aGVuIHdpdGggYGluZGV4QmAuIFRoaXMgb25seSBtb2RpZmllcyB0aGUgaW5kZXggYW5kIGRvZXMgbm90IGNoYW5nZSBjb2xsaXNpb25cclxuICogaW5mb3JtYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5Td2FwQnlJbmRleFxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlQSAtIEZpcnN0IHRpbGUgaW5kZXguXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUIgLSBTZWNvbmQgdGlsZSBpbmRleC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKi9cclxudmFyIFN3YXBCeUluZGV4ID0gZnVuY3Rpb24gKGluZGV4QSwgaW5kZXhCLCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGxheWVyKVxyXG57XHJcbiAgICB2YXIgdGlsZXMgPSBHZXRUaWxlc1dpdGhpbih0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIG51bGwsIGxheWVyKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRpbGVzW2ldKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRpbGVzW2ldLmluZGV4ID09PSBpbmRleEEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpbGVzW2ldLmluZGV4ID0gaW5kZXhCO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbGVzW2ldLmluZGV4ID09PSBpbmRleEIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpbGVzW2ldLmluZGV4ID0gaW5kZXhBO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTd2FwQnlJbmRleDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/SwapByIndex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/TileToWorldX.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/TileToWorldX.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts from tile X coordinates (tile units) to world X coordinates (pixels), factoring in the\r\n * layer's position, scale and scroll.\r\n *\r\n * @function Phaser.Tilemaps.Components.TileToWorldX\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {number}\r\n */\r\nvar TileToWorldX = function (tileX, camera, layer)\r\n{\r\n    var tileWidth = layer.baseTileWidth;\r\n    var tilemapLayer = layer.tilemapLayer;\r\n    var layerWorldX = 0;\r\n\r\n    if (tilemapLayer)\r\n    {\r\n        if (camera === undefined) { camera = tilemapLayer.scene.cameras.main; }\r\n\r\n        layerWorldX = tilemapLayer.x + camera.scrollX * (1 - tilemapLayer.scrollFactorX);\r\n\r\n        tileWidth *= tilemapLayer.scaleX;\r\n    }\r\n\r\n    return layerWorldX + tileX * tileWidth;\r\n};\r\n\r\nmodule.exports = TileToWorldX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1RpbGVUb1dvcmxkWC5qcz8xYWNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLDBDQUEwQzs7QUFFN0U7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9UaWxlVG9Xb3JsZFguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBmcm9tIHRpbGUgWCBjb29yZGluYXRlcyAodGlsZSB1bml0cykgdG8gd29ybGQgWCBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gKiBsYXllcidzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuVGlsZVRvV29ybGRYXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbnZhciBUaWxlVG9Xb3JsZFggPSBmdW5jdGlvbiAodGlsZVgsIGNhbWVyYSwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlV2lkdGggPSBsYXllci5iYXNlVGlsZVdpZHRoO1xyXG4gICAgdmFyIHRpbGVtYXBMYXllciA9IGxheWVyLnRpbGVtYXBMYXllcjtcclxuICAgIHZhciBsYXllcldvcmxkWCA9IDA7XHJcblxyXG4gICAgaWYgKHRpbGVtYXBMYXllcilcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FtZXJhID09PSB1bmRlZmluZWQpIHsgY2FtZXJhID0gdGlsZW1hcExheWVyLnNjZW5lLmNhbWVyYXMubWFpbjsgfVxyXG5cclxuICAgICAgICBsYXllcldvcmxkWCA9IHRpbGVtYXBMYXllci54ICsgY2FtZXJhLnNjcm9sbFggKiAoMSAtIHRpbGVtYXBMYXllci5zY3JvbGxGYWN0b3JYKTtcclxuXHJcbiAgICAgICAgdGlsZVdpZHRoICo9IHRpbGVtYXBMYXllci5zY2FsZVg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyV29ybGRYICsgdGlsZVggKiB0aWxlV2lkdGg7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVUb1dvcmxkWDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/TileToWorldX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/TileToWorldXY.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/TileToWorldXY.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TileToWorldX = __webpack_require__(/*! ./TileToWorldX */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldX.js\");\r\nvar TileToWorldY = __webpack_require__(/*! ./TileToWorldY */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldY.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Converts from tile XY coordinates (tile units) to world XY coordinates (pixels), factoring in the\r\n * layer's position, scale and scroll. This will return a new Vector2 object or update the given\r\n * `point` object.\r\n *\r\n * @function Phaser.Tilemaps.Components.TileToWorldXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Math.Vector2} The XY location in world coordinates.\r\n */\r\nvar TileToWorldXY = function (tileX, tileY, point, camera, layer)\r\n{\r\n    if (point === undefined) { point = new Vector2(0, 0); }\r\n\r\n    point.x = TileToWorldX(tileX, camera, layer);\r\n    point.y = TileToWorldY(tileY, camera, layer);\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = TileToWorldXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1RpbGVUb1dvcmxkWFkuanM/YTcxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDJCQUEyQjs7QUFFekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9UaWxlVG9Xb3JsZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGlsZVRvV29ybGRYID0gcmVxdWlyZSgnLi9UaWxlVG9Xb3JsZFgnKTtcclxudmFyIFRpbGVUb1dvcmxkWSA9IHJlcXVpcmUoJy4vVGlsZVRvV29ybGRZJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgZnJvbSB0aWxlIFhZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBYWSBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gKiBsYXllcidzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLiBUaGlzIHdpbGwgcmV0dXJuIGEgbmV3IFZlY3RvcjIgb2JqZWN0IG9yIHVwZGF0ZSB0aGUgZ2l2ZW5cclxuICogYHBvaW50YCBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50cy5UaWxlVG9Xb3JsZFhZXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlY3RvcjIgaXMgY3JlYXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBcclxuICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIFhZIGxvY2F0aW9uIGluIHdvcmxkIGNvb3JkaW5hdGVzLlxyXG4gKi9cclxudmFyIFRpbGVUb1dvcmxkWFkgPSBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCBwb2ludCwgY2FtZXJhLCBsYXllcilcclxue1xyXG4gICAgaWYgKHBvaW50ID09PSB1bmRlZmluZWQpIHsgcG9pbnQgPSBuZXcgVmVjdG9yMigwLCAwKTsgfVxyXG5cclxuICAgIHBvaW50LnggPSBUaWxlVG9Xb3JsZFgodGlsZVgsIGNhbWVyYSwgbGF5ZXIpO1xyXG4gICAgcG9pbnQueSA9IFRpbGVUb1dvcmxkWSh0aWxlWSwgY2FtZXJhLCBsYXllcik7XHJcblxyXG4gICAgcmV0dXJuIHBvaW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlVG9Xb3JsZFhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/TileToWorldXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/TileToWorldY.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/TileToWorldY.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts from tile Y coordinates (tile units) to world Y coordinates (pixels), factoring in the\r\n * layer's position, scale and scroll.\r\n *\r\n * @function Phaser.Tilemaps.Components.TileToWorldY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} tileY - The x coordinate, in tiles, not pixels.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {number}\r\n */\r\nvar TileToWorldY = function (tileY, camera, layer)\r\n{\r\n    var tileHeight = layer.baseTileHeight;\r\n    var tilemapLayer = layer.tilemapLayer;\r\n    var layerWorldY = 0;\r\n\r\n    if (tilemapLayer)\r\n    {\r\n        if (camera === undefined) { camera = tilemapLayer.scene.cameras.main; }\r\n\r\n        layerWorldY = (tilemapLayer.y + camera.scrollY * (1 - tilemapLayer.scrollFactorY));\r\n\r\n        tileHeight *= tilemapLayer.scaleY;\r\n    }\r\n\r\n    return layerWorldY + tileY * tileHeight;\r\n};\r\n\r\nmodule.exports = TileToWorldY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1RpbGVUb1dvcmxkWS5qcz9kZWEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLDBDQUEwQzs7QUFFN0U7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvY29tcG9uZW50cy9UaWxlVG9Xb3JsZFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBmcm9tIHRpbGUgWSBjb29yZGluYXRlcyAodGlsZSB1bml0cykgdG8gd29ybGQgWSBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gKiBsYXllcidzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuVGlsZVRvV29ybGRZXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX0gbGF5ZXIgLSBUaGUgVGlsZW1hcCBMYXllciB0byBhY3QgdXBvbi5cclxuICogXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbnZhciBUaWxlVG9Xb3JsZFkgPSBmdW5jdGlvbiAodGlsZVksIGNhbWVyYSwgbGF5ZXIpXHJcbntcclxuICAgIHZhciB0aWxlSGVpZ2h0ID0gbGF5ZXIuYmFzZVRpbGVIZWlnaHQ7XHJcbiAgICB2YXIgdGlsZW1hcExheWVyID0gbGF5ZXIudGlsZW1hcExheWVyO1xyXG4gICAgdmFyIGxheWVyV29ybGRZID0gMDtcclxuXHJcbiAgICBpZiAodGlsZW1hcExheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjYW1lcmEgPT09IHVuZGVmaW5lZCkgeyBjYW1lcmEgPSB0aWxlbWFwTGF5ZXIuc2NlbmUuY2FtZXJhcy5tYWluOyB9XHJcblxyXG4gICAgICAgIGxheWVyV29ybGRZID0gKHRpbGVtYXBMYXllci55ICsgY2FtZXJhLnNjcm9sbFkgKiAoMSAtIHRpbGVtYXBMYXllci5zY3JvbGxGYWN0b3JZKSk7XHJcblxyXG4gICAgICAgIHRpbGVIZWlnaHQgKj0gdGlsZW1hcExheWVyLnNjYWxlWTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJXb3JsZFkgKyB0aWxlWSAqIHRpbGVIZWlnaHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbGVUb1dvcmxkWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/TileToWorldY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/WeightedRandomize.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/WeightedRandomize.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetTilesWithin = __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\");\r\n\r\n/**\r\n * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n * specified layer. Each tile will receive a new index. New indexes are drawn from the given\r\n * weightedIndexes array. An example weighted array:\r\n *\r\n * [\r\n *  { index: 6, weight: 4 },    // Probability of index 6 is 4 / 8\r\n *  { index: 7, weight: 2 },    // Probability of index 7 would be 2 / 8\r\n *  { index: 8, weight: 1.5 },  // Probability of index 8 would be 1.5 / 8\r\n *  { index: 26, weight: 0.5 }  // Probability of index 27 would be 0.5 / 8\r\n * ]\r\n *\r\n * The probability of any index being choose is (the index's weight) / (sum of all weights). This\r\n * method only modifies tile indexes and does not change collision information.\r\n *\r\n * @function Phaser.Tilemaps.Components.WeightedRandomize\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n * @param {object[]} [weightedIndexes] - An array of objects to randomly draw from during\r\n * randomization. They should be in the form: { index: 0, weight: 4 } or\r\n * { index: [0, 1], weight: 4 } if you wish to draw from multiple tile indexes.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n */\r\nvar WeightedRandomize = function (tileX, tileY, width, height, weightedIndexes, layer)\r\n{\r\n    if (weightedIndexes === undefined) { return; }\r\n\r\n    var i;\r\n    var tiles = GetTilesWithin(tileX, tileY, width, height, null, layer);\r\n\r\n    var weightTotal = 0;\r\n    for (i = 0; i < weightedIndexes.length; i++)\r\n    {\r\n        weightTotal += weightedIndexes[i].weight;\r\n    }\r\n\r\n    if (weightTotal <= 0) { return; }\r\n\r\n    for (i = 0; i < tiles.length; i++)\r\n    {\r\n        var rand = Math.random() * weightTotal;\r\n        var sum = 0;\r\n        var randomIndex = -1;\r\n        for (var j = 0; j < weightedIndexes.length; j++)\r\n        {\r\n            sum += weightedIndexes[j].weight;\r\n            if (rand <= sum)\r\n            {\r\n                var chosen = weightedIndexes[j].index;\r\n                randomIndex = Array.isArray(chosen)\r\n                    ? chosen[Math.floor(Math.random() * chosen.length)]\r\n                    : chosen;\r\n                break;\r\n            }\r\n        }\r\n\r\n        tiles[i].index = randomIndex;\r\n    }\r\n};\r\n\r\nmodule.exports = WeightedRandomize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1dlaWdodGVkUmFuZG9taXplLmpzP2QwOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLHlGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxzQkFBc0I7QUFDM0IsS0FBSyxzQkFBc0I7QUFDM0IsS0FBSyx3QkFBd0I7QUFDN0IsS0FBSyx5QkFBeUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQiwrQ0FBK0Msc0JBQXNCO0FBQ3JFLElBQUksMkJBQTJCO0FBQy9CLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFROztBQUVoRDtBQUNBOztBQUVBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixRQUFROztBQUVuQyxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw0QkFBNEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1dlaWdodGVkUmFuZG9taXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0VGlsZXNXaXRoaW4gPSByZXF1aXJlKCcuL0dldFRpbGVzV2l0aGluJyk7XHJcblxyXG4vKipcclxuICogUmFuZG9taXplcyB0aGUgaW5kZXhlcyBvZiBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB0aWxlcyAoaW4gdGlsZSBjb29yZGluYXRlcykgd2l0aGluIHRoZVxyXG4gKiBzcGVjaWZpZWQgbGF5ZXIuIEVhY2ggdGlsZSB3aWxsIHJlY2VpdmUgYSBuZXcgaW5kZXguIE5ldyBpbmRleGVzIGFyZSBkcmF3biBmcm9tIHRoZSBnaXZlblxyXG4gKiB3ZWlnaHRlZEluZGV4ZXMgYXJyYXkuIEFuIGV4YW1wbGUgd2VpZ2h0ZWQgYXJyYXk6XHJcbiAqXHJcbiAqIFtcclxuICogIHsgaW5kZXg6IDYsIHdlaWdodDogNCB9LCAgICAvLyBQcm9iYWJpbGl0eSBvZiBpbmRleCA2IGlzIDQgLyA4XHJcbiAqICB7IGluZGV4OiA3LCB3ZWlnaHQ6IDIgfSwgICAgLy8gUHJvYmFiaWxpdHkgb2YgaW5kZXggNyB3b3VsZCBiZSAyIC8gOFxyXG4gKiAgeyBpbmRleDogOCwgd2VpZ2h0OiAxLjUgfSwgIC8vIFByb2JhYmlsaXR5IG9mIGluZGV4IDggd291bGQgYmUgMS41IC8gOFxyXG4gKiAgeyBpbmRleDogMjYsIHdlaWdodDogMC41IH0gIC8vIFByb2JhYmlsaXR5IG9mIGluZGV4IDI3IHdvdWxkIGJlIDAuNSAvIDhcclxuICogXVxyXG4gKlxyXG4gKiBUaGUgcHJvYmFiaWxpdHkgb2YgYW55IGluZGV4IGJlaW5nIGNob29zZSBpcyAodGhlIGluZGV4J3Mgd2VpZ2h0KSAvIChzdW0gb2YgYWxsIHdlaWdodHMpLiBUaGlzXHJcbiAqIG1ldGhvZCBvbmx5IG1vZGlmaWVzIHRpbGUgaW5kZXhlcyBhbmQgZG9lcyBub3QgY2hhbmdlIGNvbGxpc2lvbiBpbmZvcm1hdGlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLldlaWdodGVkUmFuZG9taXplXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gKiBAcGFyYW0ge29iamVjdFtdfSBbd2VpZ2h0ZWRJbmRleGVzXSAtIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gcmFuZG9tbHkgZHJhdyBmcm9tIGR1cmluZ1xyXG4gKiByYW5kb21pemF0aW9uLiBUaGV5IHNob3VsZCBiZSBpbiB0aGUgZm9ybTogeyBpbmRleDogMCwgd2VpZ2h0OiA0IH0gb3JcclxuICogeyBpbmRleDogWzAsIDFdLCB3ZWlnaHQ6IDQgfSBpZiB5b3Ugd2lzaCB0byBkcmF3IGZyb20gbXVsdGlwbGUgdGlsZSBpbmRleGVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9IGxheWVyIC0gVGhlIFRpbGVtYXAgTGF5ZXIgdG8gYWN0IHVwb24uXHJcbiAqL1xyXG52YXIgV2VpZ2h0ZWRSYW5kb21pemUgPSBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCB3ZWlnaHRlZEluZGV4ZXMsIGxheWVyKVxyXG57XHJcbiAgICBpZiAod2VpZ2h0ZWRJbmRleGVzID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgdGlsZXMgPSBHZXRUaWxlc1dpdGhpbih0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIG51bGwsIGxheWVyKTtcclxuXHJcbiAgICB2YXIgd2VpZ2h0VG90YWwgPSAwO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodGVkSW5kZXhlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB3ZWlnaHRUb3RhbCArPSB3ZWlnaHRlZEluZGV4ZXNbaV0ud2VpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3ZWlnaHRUb3RhbCA8PSAwKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCkgKiB3ZWlnaHRUb3RhbDtcclxuICAgICAgICB2YXIgc3VtID0gMDtcclxuICAgICAgICB2YXIgcmFuZG9tSW5kZXggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdlaWdodGVkSW5kZXhlcy5sZW5ndGg7IGorKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN1bSArPSB3ZWlnaHRlZEluZGV4ZXNbal0ud2VpZ2h0O1xyXG4gICAgICAgICAgICBpZiAocmFuZCA8PSBzdW0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSB3ZWlnaHRlZEluZGV4ZXNbal0uaW5kZXg7XHJcbiAgICAgICAgICAgICAgICByYW5kb21JbmRleCA9IEFycmF5LmlzQXJyYXkoY2hvc2VuKVxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hvc2VuW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNob3Nlbi5sZW5ndGgpXVxyXG4gICAgICAgICAgICAgICAgICAgIDogY2hvc2VuO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRpbGVzW2ldLmluZGV4ID0gcmFuZG9tSW5kZXg7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdlaWdodGVkUmFuZG9taXplO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/WeightedRandomize.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/WorldToTileX.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/WorldToTileX.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts from world X coordinates (pixels) to tile X coordinates (tile units), factoring in the\r\n * layer's position, scale and scroll.\r\n *\r\n * @function Phaser.Tilemaps.Components.WorldToTileX\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {number} The X location in tile units.\r\n */\r\nvar WorldToTileX = function (worldX, snapToFloor, camera, layer)\r\n{\r\n    if (snapToFloor === undefined) { snapToFloor = true; }\r\n\r\n    var tileWidth = layer.baseTileWidth;\r\n    var tilemapLayer = layer.tilemapLayer;\r\n\r\n    if (tilemapLayer)\r\n    {\r\n        if (camera === undefined) { camera = tilemapLayer.scene.cameras.main; }\r\n\r\n        // Find the world position relative to the static or dynamic layer's top left origin,\r\n        // factoring in the camera's horizontal scroll\r\n        worldX = worldX - (tilemapLayer.x + camera.scrollX * (1 - tilemapLayer.scrollFactorX));\r\n\r\n        tileWidth *= tilemapLayer.scaleX;\r\n    }\r\n\r\n    return snapToFloor\r\n        ? Math.floor(worldX / tileWidth)\r\n        : worldX / tileWidth;\r\n};\r\n\r\nmodule.exports = WorldToTileX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1dvcmxkVG9UaWxlWC5qcz85NzY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0JBQW9COztBQUV4RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsMENBQTBDOztBQUU3RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvV29ybGRUb1RpbGVYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29udmVydHMgZnJvbSB3b3JsZCBYIGNvb3JkaW5hdGVzIChwaXhlbHMpIHRvIHRpbGUgWCBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICogbGF5ZXIncyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLldvcmxkVG9UaWxlWFxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvRmxvb3I9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByb3VuZCB0aGUgdGlsZSBjb29yZGluYXRlIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgWCBsb2NhdGlvbiBpbiB0aWxlIHVuaXRzLlxyXG4gKi9cclxudmFyIFdvcmxkVG9UaWxlWCA9IGZ1bmN0aW9uICh3b3JsZFgsIHNuYXBUb0Zsb29yLCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoc25hcFRvRmxvb3IgPT09IHVuZGVmaW5lZCkgeyBzbmFwVG9GbG9vciA9IHRydWU7IH1cclxuXHJcbiAgICB2YXIgdGlsZVdpZHRoID0gbGF5ZXIuYmFzZVRpbGVXaWR0aDtcclxuICAgIHZhciB0aWxlbWFwTGF5ZXIgPSBsYXllci50aWxlbWFwTGF5ZXI7XHJcblxyXG4gICAgaWYgKHRpbGVtYXBMYXllcilcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FtZXJhID09PSB1bmRlZmluZWQpIHsgY2FtZXJhID0gdGlsZW1hcExheWVyLnNjZW5lLmNhbWVyYXMubWFpbjsgfVxyXG5cclxuICAgICAgICAvLyBGaW5kIHRoZSB3b3JsZCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhdGljIG9yIGR5bmFtaWMgbGF5ZXIncyB0b3AgbGVmdCBvcmlnaW4sXHJcbiAgICAgICAgLy8gZmFjdG9yaW5nIGluIHRoZSBjYW1lcmEncyBob3Jpem9udGFsIHNjcm9sbFxyXG4gICAgICAgIHdvcmxkWCA9IHdvcmxkWCAtICh0aWxlbWFwTGF5ZXIueCArIGNhbWVyYS5zY3JvbGxYICogKDEgLSB0aWxlbWFwTGF5ZXIuc2Nyb2xsRmFjdG9yWCkpO1xyXG5cclxuICAgICAgICB0aWxlV2lkdGggKj0gdGlsZW1hcExheWVyLnNjYWxlWDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc25hcFRvRmxvb3JcclxuICAgICAgICA/IE1hdGguZmxvb3Iod29ybGRYIC8gdGlsZVdpZHRoKVxyXG4gICAgICAgIDogd29ybGRYIC8gdGlsZVdpZHRoO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXb3JsZFRvVGlsZVg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/WorldToTileXY.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/WorldToTileXY.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar WorldToTileX = __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\");\r\nvar WorldToTileY = __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Converts from world XY coordinates (pixels) to tile XY coordinates (tile units), factoring in the\r\n * layer's position, scale and scroll. This will return a new Vector2 object or update the given\r\n * `point` object.\r\n *\r\n * @function Phaser.Tilemaps.Components.WorldToTileXY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {Phaser.Math.Vector2} The XY location in tile units.\r\n */\r\nvar WorldToTileXY = function (worldX, worldY, snapToFloor, point, camera, layer)\r\n{\r\n    if (point === undefined) { point = new Vector2(0, 0); }\r\n\r\n    point.x = WorldToTileX(worldX, snapToFloor, camera, layer);\r\n    point.y = WorldToTileY(worldY, snapToFloor, camera, layer);\r\n\r\n    return point;\r\n};\r\n\r\nmodule.exports = WorldToTileXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1dvcmxkVG9UaWxlWFkuanM/NDIyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMscUZBQWdCO0FBQzNDLG1CQUFtQixtQkFBTyxDQUFDLHFGQUFnQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLG9CQUFvQjtBQUMvQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwyQkFBMkI7O0FBRXpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvV29ybGRUb1RpbGVYWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFdvcmxkVG9UaWxlWCA9IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYJyk7XHJcbnZhciBXb3JsZFRvVGlsZVkgPSByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGZyb20gd29ybGQgWFkgY29vcmRpbmF0ZXMgKHBpeGVscykgdG8gdGlsZSBYWSBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICogbGF5ZXIncyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC4gVGhpcyB3aWxsIHJldHVybiBhIG5ldyBWZWN0b3IyIG9iamVjdCBvciB1cGRhdGUgdGhlIGdpdmVuXHJcbiAqIGBwb2ludGAgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLkNvbXBvbmVudHMuV29ybGRUb1RpbGVYWVxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvRmxvb3I9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByb3VuZCB0aGUgdGlsZSBjb29yZGluYXRlIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlY3RvcjIgaXMgY3JlYXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBcclxuICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIFhZIGxvY2F0aW9uIGluIHRpbGUgdW5pdHMuXHJcbiAqL1xyXG52YXIgV29ybGRUb1RpbGVYWSA9IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgc25hcFRvRmxvb3IsIHBvaW50LCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICBpZiAocG9pbnQgPT09IHVuZGVmaW5lZCkgeyBwb2ludCA9IG5ldyBWZWN0b3IyKDAsIDApOyB9XHJcblxyXG4gICAgcG9pbnQueCA9IFdvcmxkVG9UaWxlWCh3b3JsZFgsIHNuYXBUb0Zsb29yLCBjYW1lcmEsIGxheWVyKTtcclxuICAgIHBvaW50LnkgPSBXb3JsZFRvVGlsZVkod29ybGRZLCBzbmFwVG9GbG9vciwgY2FtZXJhLCBsYXllcik7XHJcblxyXG4gICAgcmV0dXJuIHBvaW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXb3JsZFRvVGlsZVhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/WorldToTileXY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/WorldToTileY.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/WorldToTileY.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts from world Y coordinates (pixels) to tile Y coordinates (tile units), factoring in the\r\n * layer's position, scale and scroll.\r\n *\r\n * @function Phaser.Tilemaps.Components.WorldToTileY\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n * @param {Phaser.Tilemaps.LayerData} layer - The Tilemap Layer to act upon.\r\n * \r\n * @return {number} The Y location in tile units.\r\n */\r\nvar WorldToTileY = function (worldY, snapToFloor, camera, layer)\r\n{\r\n    if (snapToFloor === undefined) { snapToFloor = true; }\r\n\r\n    var tileHeight = layer.baseTileHeight;\r\n    var tilemapLayer = layer.tilemapLayer;\r\n\r\n    if (tilemapLayer)\r\n    {\r\n        if (camera === undefined) { camera = tilemapLayer.scene.cameras.main; }\r\n\r\n        // Find the world position relative to the static or dynamic layer's top left origin,\r\n        // factoring in the camera's vertical scroll\r\n        worldY = worldY - (tilemapLayer.y + camera.scrollY * (1 - tilemapLayer.scrollFactorY));\r\n\r\n        tileHeight *= tilemapLayer.scaleY;\r\n    }\r\n\r\n    return snapToFloor\r\n        ? Math.floor(worldY / tileHeight)\r\n        : worldY / tileHeight;\r\n};\r\n\r\nmodule.exports = WorldToTileY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL1dvcmxkVG9UaWxlWS5qcz9lMTU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0JBQW9COztBQUV4RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsMENBQTBDOztBQUU3RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2NvbXBvbmVudHMvV29ybGRUb1RpbGVZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29udmVydHMgZnJvbSB3b3JsZCBZIGNvb3JkaW5hdGVzIChwaXhlbHMpIHRvIHRpbGUgWSBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICogbGF5ZXIncyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5Db21wb25lbnRzLldvcmxkVG9UaWxlWVxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvRmxvb3I9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByb3VuZCB0aGUgdGlsZSBjb29yZGluYXRlIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICogQHBhcmFtIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhfSBsYXllciAtIFRoZSBUaWxlbWFwIExheWVyIHRvIGFjdCB1cG9uLlxyXG4gKiBcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgWSBsb2NhdGlvbiBpbiB0aWxlIHVuaXRzLlxyXG4gKi9cclxudmFyIFdvcmxkVG9UaWxlWSA9IGZ1bmN0aW9uICh3b3JsZFksIHNuYXBUb0Zsb29yLCBjYW1lcmEsIGxheWVyKVxyXG57XHJcbiAgICBpZiAoc25hcFRvRmxvb3IgPT09IHVuZGVmaW5lZCkgeyBzbmFwVG9GbG9vciA9IHRydWU7IH1cclxuXHJcbiAgICB2YXIgdGlsZUhlaWdodCA9IGxheWVyLmJhc2VUaWxlSGVpZ2h0O1xyXG4gICAgdmFyIHRpbGVtYXBMYXllciA9IGxheWVyLnRpbGVtYXBMYXllcjtcclxuXHJcbiAgICBpZiAodGlsZW1hcExheWVyKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjYW1lcmEgPT09IHVuZGVmaW5lZCkgeyBjYW1lcmEgPSB0aWxlbWFwTGF5ZXIuc2NlbmUuY2FtZXJhcy5tYWluOyB9XHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIHdvcmxkIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGF0aWMgb3IgZHluYW1pYyBsYXllcidzIHRvcCBsZWZ0IG9yaWdpbixcclxuICAgICAgICAvLyBmYWN0b3JpbmcgaW4gdGhlIGNhbWVyYSdzIHZlcnRpY2FsIHNjcm9sbFxyXG4gICAgICAgIHdvcmxkWSA9IHdvcmxkWSAtICh0aWxlbWFwTGF5ZXIueSArIGNhbWVyYS5zY3JvbGxZICogKDEgLSB0aWxlbWFwTGF5ZXIuc2Nyb2xsRmFjdG9yWSkpO1xyXG5cclxuICAgICAgICB0aWxlSGVpZ2h0ICo9IHRpbGVtYXBMYXllci5zY2FsZVk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNuYXBUb0Zsb29yXHJcbiAgICAgICAgPyBNYXRoLmZsb29yKHdvcmxkWSAvIHRpbGVIZWlnaHQpXHJcbiAgICAgICAgOiB3b3JsZFkgLyB0aWxlSGVpZ2h0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXb3JsZFRvVGlsZVk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/components/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/components/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CalculateFacesAt: __webpack_require__(/*! ./CalculateFacesAt */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesAt.js\"),\r\n    CalculateFacesWithin: __webpack_require__(/*! ./CalculateFacesWithin */ \"./node_modules/phaser/src/tilemaps/components/CalculateFacesWithin.js\"),\r\n    Copy: __webpack_require__(/*! ./Copy */ \"./node_modules/phaser/src/tilemaps/components/Copy.js\"),\r\n    CreateFromTiles: __webpack_require__(/*! ./CreateFromTiles */ \"./node_modules/phaser/src/tilemaps/components/CreateFromTiles.js\"),\r\n    CullTiles: __webpack_require__(/*! ./CullTiles */ \"./node_modules/phaser/src/tilemaps/components/CullTiles.js\"),\r\n    Fill: __webpack_require__(/*! ./Fill */ \"./node_modules/phaser/src/tilemaps/components/Fill.js\"),\r\n    FilterTiles: __webpack_require__(/*! ./FilterTiles */ \"./node_modules/phaser/src/tilemaps/components/FilterTiles.js\"),\r\n    FindByIndex: __webpack_require__(/*! ./FindByIndex */ \"./node_modules/phaser/src/tilemaps/components/FindByIndex.js\"),\r\n    FindTile: __webpack_require__(/*! ./FindTile */ \"./node_modules/phaser/src/tilemaps/components/FindTile.js\"),\r\n    ForEachTile: __webpack_require__(/*! ./ForEachTile */ \"./node_modules/phaser/src/tilemaps/components/ForEachTile.js\"),\r\n    GetTileAt: __webpack_require__(/*! ./GetTileAt */ \"./node_modules/phaser/src/tilemaps/components/GetTileAt.js\"),\r\n    GetTileAtWorldXY: __webpack_require__(/*! ./GetTileAtWorldXY */ \"./node_modules/phaser/src/tilemaps/components/GetTileAtWorldXY.js\"),\r\n    GetTilesWithin: __webpack_require__(/*! ./GetTilesWithin */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithin.js\"),\r\n    GetTilesWithinShape: __webpack_require__(/*! ./GetTilesWithinShape */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithinShape.js\"),\r\n    GetTilesWithinWorldXY: __webpack_require__(/*! ./GetTilesWithinWorldXY */ \"./node_modules/phaser/src/tilemaps/components/GetTilesWithinWorldXY.js\"),\r\n    HasTileAt: __webpack_require__(/*! ./HasTileAt */ \"./node_modules/phaser/src/tilemaps/components/HasTileAt.js\"),\r\n    HasTileAtWorldXY: __webpack_require__(/*! ./HasTileAtWorldXY */ \"./node_modules/phaser/src/tilemaps/components/HasTileAtWorldXY.js\"),\r\n    IsInLayerBounds: __webpack_require__(/*! ./IsInLayerBounds */ \"./node_modules/phaser/src/tilemaps/components/IsInLayerBounds.js\"),\r\n    PutTileAt: __webpack_require__(/*! ./PutTileAt */ \"./node_modules/phaser/src/tilemaps/components/PutTileAt.js\"),\r\n    PutTileAtWorldXY: __webpack_require__(/*! ./PutTileAtWorldXY */ \"./node_modules/phaser/src/tilemaps/components/PutTileAtWorldXY.js\"),\r\n    PutTilesAt: __webpack_require__(/*! ./PutTilesAt */ \"./node_modules/phaser/src/tilemaps/components/PutTilesAt.js\"),\r\n    Randomize: __webpack_require__(/*! ./Randomize */ \"./node_modules/phaser/src/tilemaps/components/Randomize.js\"),\r\n    RemoveTileAt: __webpack_require__(/*! ./RemoveTileAt */ \"./node_modules/phaser/src/tilemaps/components/RemoveTileAt.js\"),\r\n    RemoveTileAtWorldXY: __webpack_require__(/*! ./RemoveTileAtWorldXY */ \"./node_modules/phaser/src/tilemaps/components/RemoveTileAtWorldXY.js\"),\r\n    RenderDebug: __webpack_require__(/*! ./RenderDebug */ \"./node_modules/phaser/src/tilemaps/components/RenderDebug.js\"),\r\n    ReplaceByIndex: __webpack_require__(/*! ./ReplaceByIndex */ \"./node_modules/phaser/src/tilemaps/components/ReplaceByIndex.js\"),\r\n    SetCollision: __webpack_require__(/*! ./SetCollision */ \"./node_modules/phaser/src/tilemaps/components/SetCollision.js\"),\r\n    SetCollisionBetween: __webpack_require__(/*! ./SetCollisionBetween */ \"./node_modules/phaser/src/tilemaps/components/SetCollisionBetween.js\"),\r\n    SetCollisionByExclusion: __webpack_require__(/*! ./SetCollisionByExclusion */ \"./node_modules/phaser/src/tilemaps/components/SetCollisionByExclusion.js\"),\r\n    SetCollisionByProperty: __webpack_require__(/*! ./SetCollisionByProperty */ \"./node_modules/phaser/src/tilemaps/components/SetCollisionByProperty.js\"),\r\n    SetCollisionFromCollisionGroup: __webpack_require__(/*! ./SetCollisionFromCollisionGroup */ \"./node_modules/phaser/src/tilemaps/components/SetCollisionFromCollisionGroup.js\"),\r\n    SetTileIndexCallback: __webpack_require__(/*! ./SetTileIndexCallback */ \"./node_modules/phaser/src/tilemaps/components/SetTileIndexCallback.js\"),\r\n    SetTileLocationCallback: __webpack_require__(/*! ./SetTileLocationCallback */ \"./node_modules/phaser/src/tilemaps/components/SetTileLocationCallback.js\"),\r\n    Shuffle: __webpack_require__(/*! ./Shuffle */ \"./node_modules/phaser/src/tilemaps/components/Shuffle.js\"),\r\n    SwapByIndex: __webpack_require__(/*! ./SwapByIndex */ \"./node_modules/phaser/src/tilemaps/components/SwapByIndex.js\"),\r\n    TileToWorldX: __webpack_require__(/*! ./TileToWorldX */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldX.js\"),\r\n    TileToWorldXY: __webpack_require__(/*! ./TileToWorldXY */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldXY.js\"),\r\n    TileToWorldY: __webpack_require__(/*! ./TileToWorldY */ \"./node_modules/phaser/src/tilemaps/components/TileToWorldY.js\"),\r\n    WeightedRandomize: __webpack_require__(/*! ./WeightedRandomize */ \"./node_modules/phaser/src/tilemaps/components/WeightedRandomize.js\"),\r\n    WorldToTileX: __webpack_require__(/*! ./WorldToTileX */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileX.js\"),\r\n    WorldToTileXY: __webpack_require__(/*! ./WorldToTileXY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileXY.js\"),\r\n    WorldToTileY: __webpack_require__(/*! ./WorldToTileY */ \"./node_modules/phaser/src/tilemaps/components/WorldToTileY.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL2luZGV4LmpzPzlkOWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBb0I7QUFDbEQsMEJBQTBCLG1CQUFPLENBQUMscUdBQXdCO0FBQzFELFVBQVUsbUJBQU8sQ0FBQyxxRUFBUTtBQUMxQixxQkFBcUIsbUJBQU8sQ0FBQywyRkFBbUI7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLCtFQUFhO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyxxRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMsNkVBQVk7QUFDbEMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQWU7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLCtFQUFhO0FBQ3BDLHNCQUFzQixtQkFBTyxDQUFDLDZGQUFvQjtBQUNsRCxvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBa0I7QUFDOUMseUJBQXlCLG1CQUFPLENBQUMsbUdBQXVCO0FBQ3hELDJCQUEyQixtQkFBTyxDQUFDLHVHQUF5QjtBQUM1RCxlQUFlLG1CQUFPLENBQUMsK0VBQWE7QUFDcEMsc0JBQXNCLG1CQUFPLENBQUMsNkZBQW9CO0FBQ2xELHFCQUFxQixtQkFBTyxDQUFDLDJGQUFtQjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsK0VBQWE7QUFDcEMsc0JBQXNCLG1CQUFPLENBQUMsNkZBQW9CO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLGlGQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQywrRUFBYTtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDMUMseUJBQXlCLG1CQUFPLENBQUMsbUdBQXVCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLG1GQUFlO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLHlGQUFrQjtBQUM5QyxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDMUMseUJBQXlCLG1CQUFPLENBQUMsbUdBQXVCO0FBQ3hELDZCQUE2QixtQkFBTyxDQUFDLDJHQUEyQjtBQUNoRSw0QkFBNEIsbUJBQU8sQ0FBQyx5R0FBMEI7QUFDOUQsb0NBQW9DLG1CQUFPLENBQUMseUhBQWtDO0FBQzlFLDBCQUEwQixtQkFBTyxDQUFDLHFHQUF3QjtBQUMxRCw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBMkI7QUFDaEUsYUFBYSxtQkFBTyxDQUFDLDJFQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLG1GQUFlO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLHFGQUFnQjtBQUMxQyxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBaUI7QUFDNUMsa0JBQWtCLG1CQUFPLENBQUMscUZBQWdCO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLCtGQUFxQjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBZ0I7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsdUZBQWlCO0FBQzVDLGtCQUFrQixtQkFBTyxDQUFDLHFGQUFnQjs7QUFFMUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9jb21wb25lbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGlsZW1hcHMuQ29tcG9uZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbGN1bGF0ZUZhY2VzQXQ6IHJlcXVpcmUoJy4vQ2FsY3VsYXRlRmFjZXNBdCcpLFxyXG4gICAgQ2FsY3VsYXRlRmFjZXNXaXRoaW46IHJlcXVpcmUoJy4vQ2FsY3VsYXRlRmFjZXNXaXRoaW4nKSxcclxuICAgIENvcHk6IHJlcXVpcmUoJy4vQ29weScpLFxyXG4gICAgQ3JlYXRlRnJvbVRpbGVzOiByZXF1aXJlKCcuL0NyZWF0ZUZyb21UaWxlcycpLFxyXG4gICAgQ3VsbFRpbGVzOiByZXF1aXJlKCcuL0N1bGxUaWxlcycpLFxyXG4gICAgRmlsbDogcmVxdWlyZSgnLi9GaWxsJyksXHJcbiAgICBGaWx0ZXJUaWxlczogcmVxdWlyZSgnLi9GaWx0ZXJUaWxlcycpLFxyXG4gICAgRmluZEJ5SW5kZXg6IHJlcXVpcmUoJy4vRmluZEJ5SW5kZXgnKSxcclxuICAgIEZpbmRUaWxlOiByZXF1aXJlKCcuL0ZpbmRUaWxlJyksXHJcbiAgICBGb3JFYWNoVGlsZTogcmVxdWlyZSgnLi9Gb3JFYWNoVGlsZScpLFxyXG4gICAgR2V0VGlsZUF0OiByZXF1aXJlKCcuL0dldFRpbGVBdCcpLFxyXG4gICAgR2V0VGlsZUF0V29ybGRYWTogcmVxdWlyZSgnLi9HZXRUaWxlQXRXb3JsZFhZJyksXHJcbiAgICBHZXRUaWxlc1dpdGhpbjogcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpbicpLFxyXG4gICAgR2V0VGlsZXNXaXRoaW5TaGFwZTogcmVxdWlyZSgnLi9HZXRUaWxlc1dpdGhpblNoYXBlJyksXHJcbiAgICBHZXRUaWxlc1dpdGhpbldvcmxkWFk6IHJlcXVpcmUoJy4vR2V0VGlsZXNXaXRoaW5Xb3JsZFhZJyksXHJcbiAgICBIYXNUaWxlQXQ6IHJlcXVpcmUoJy4vSGFzVGlsZUF0JyksXHJcbiAgICBIYXNUaWxlQXRXb3JsZFhZOiByZXF1aXJlKCcuL0hhc1RpbGVBdFdvcmxkWFknKSxcclxuICAgIElzSW5MYXllckJvdW5kczogcmVxdWlyZSgnLi9Jc0luTGF5ZXJCb3VuZHMnKSxcclxuICAgIFB1dFRpbGVBdDogcmVxdWlyZSgnLi9QdXRUaWxlQXQnKSxcclxuICAgIFB1dFRpbGVBdFdvcmxkWFk6IHJlcXVpcmUoJy4vUHV0VGlsZUF0V29ybGRYWScpLFxyXG4gICAgUHV0VGlsZXNBdDogcmVxdWlyZSgnLi9QdXRUaWxlc0F0JyksXHJcbiAgICBSYW5kb21pemU6IHJlcXVpcmUoJy4vUmFuZG9taXplJyksXHJcbiAgICBSZW1vdmVUaWxlQXQ6IHJlcXVpcmUoJy4vUmVtb3ZlVGlsZUF0JyksXHJcbiAgICBSZW1vdmVUaWxlQXRXb3JsZFhZOiByZXF1aXJlKCcuL1JlbW92ZVRpbGVBdFdvcmxkWFknKSxcclxuICAgIFJlbmRlckRlYnVnOiByZXF1aXJlKCcuL1JlbmRlckRlYnVnJyksXHJcbiAgICBSZXBsYWNlQnlJbmRleDogcmVxdWlyZSgnLi9SZXBsYWNlQnlJbmRleCcpLFxyXG4gICAgU2V0Q29sbGlzaW9uOiByZXF1aXJlKCcuL1NldENvbGxpc2lvbicpLFxyXG4gICAgU2V0Q29sbGlzaW9uQmV0d2VlbjogcmVxdWlyZSgnLi9TZXRDb2xsaXNpb25CZXR3ZWVuJyksXHJcbiAgICBTZXRDb2xsaXNpb25CeUV4Y2x1c2lvbjogcmVxdWlyZSgnLi9TZXRDb2xsaXNpb25CeUV4Y2x1c2lvbicpLFxyXG4gICAgU2V0Q29sbGlzaW9uQnlQcm9wZXJ0eTogcmVxdWlyZSgnLi9TZXRDb2xsaXNpb25CeVByb3BlcnR5JyksXHJcbiAgICBTZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXA6IHJlcXVpcmUoJy4vU2V0Q29sbGlzaW9uRnJvbUNvbGxpc2lvbkdyb3VwJyksXHJcbiAgICBTZXRUaWxlSW5kZXhDYWxsYmFjazogcmVxdWlyZSgnLi9TZXRUaWxlSW5kZXhDYWxsYmFjaycpLFxyXG4gICAgU2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2s6IHJlcXVpcmUoJy4vU2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2snKSxcclxuICAgIFNodWZmbGU6IHJlcXVpcmUoJy4vU2h1ZmZsZScpLFxyXG4gICAgU3dhcEJ5SW5kZXg6IHJlcXVpcmUoJy4vU3dhcEJ5SW5kZXgnKSxcclxuICAgIFRpbGVUb1dvcmxkWDogcmVxdWlyZSgnLi9UaWxlVG9Xb3JsZFgnKSxcclxuICAgIFRpbGVUb1dvcmxkWFk6IHJlcXVpcmUoJy4vVGlsZVRvV29ybGRYWScpLFxyXG4gICAgVGlsZVRvV29ybGRZOiByZXF1aXJlKCcuL1RpbGVUb1dvcmxkWScpLFxyXG4gICAgV2VpZ2h0ZWRSYW5kb21pemU6IHJlcXVpcmUoJy4vV2VpZ2h0ZWRSYW5kb21pemUnKSxcclxuICAgIFdvcmxkVG9UaWxlWDogcmVxdWlyZSgnLi9Xb3JsZFRvVGlsZVgnKSxcclxuICAgIFdvcmxkVG9UaWxlWFk6IHJlcXVpcmUoJy4vV29ybGRUb1RpbGVYWScpLFxyXG4gICAgV29ybGRUb1RpbGVZOiByZXF1aXJlKCcuL1dvcmxkVG9UaWxlWScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/components/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayer.js":
/*!******************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayer.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DynamicTilemapLayerRender = __webpack_require__(/*! ./DynamicTilemapLayerRender */ \"./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerRender.js\");\r\nvar GameObject = __webpack_require__(/*! ../../gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar TilemapComponents = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/tilemaps/components/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Dynamic Tilemap Layer is a Game Object that renders LayerData from a Tilemap when used in combination\r\n * with one, or more, Tilesets.\r\n *\r\n * A Dynamic Tilemap Layer trades some speed for being able to apply powerful effects. Unlike a\r\n * Static Tilemap Layer, you can apply per-tile effects like tint or alpha, and you can change the\r\n * tiles in a DynamicTilemapLayer.\r\n * \r\n * Use this over a Static Tilemap Layer when you need those features.\r\n *\r\n * @class DynamicTilemapLayer\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {Phaser.Tilemaps.Tilemap} tilemap - The Tilemap this layer is a part of.\r\n * @param {integer} layerIndex - The index of the LayerData associated with this layer.\r\n * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n * @param {number} [x=0] - The world x position where the top left of this layer will be placed.\r\n * @param {number} [y=0] - The world y position where the top left of this layer will be placed.\r\n */\r\nvar DynamicTilemapLayer = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Components.ScrollFactor,\r\n        DynamicTilemapLayerRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function DynamicTilemapLayer (scene, tilemap, layerIndex, tileset, x, y)\r\n    {\r\n        GameObject.call(this, scene, 'DynamicTilemapLayer');\r\n\r\n        /**\r\n         * Used internally by physics system to perform fast type checks.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#isTilemap\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isTilemap = true;\r\n\r\n        /**\r\n         * The Tilemap that this layer is a part of.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#tilemap\r\n         * @type {Phaser.Tilemaps.Tilemap}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilemap = tilemap;\r\n\r\n        /**\r\n         * The index of the LayerData associated with this layer.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#layerIndex\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.layerIndex = layerIndex;\r\n\r\n        /**\r\n         * The LayerData associated with this layer. LayerData can only be associated with one\r\n         * tilemap layer.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#layer\r\n         * @type {Phaser.Tilemaps.LayerData}\r\n         * @since 3.0.0\r\n         */\r\n        this.layer = tilemap.layers[layerIndex];\r\n\r\n        // Link the LayerData with this static tilemap layer\r\n        this.layer.tilemapLayer = this;\r\n\r\n        /**\r\n         * The Tileset/s associated with this layer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array of Tileset objects, previously it was a single reference.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#tileset\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileset = [];\r\n\r\n        /**\r\n         * Used internally with the canvas render. This holds the tiles that are visible within the\r\n         * camera.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#culledTiles\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.culledTiles = [];\r\n\r\n        /**\r\n         * You can control if the Cameras should cull tiles before rendering them or not.\r\n         * By default the camera will try to cull the tiles in this layer, to avoid over-drawing to the renderer.\r\n         *\r\n         * However, there are some instances when you may wish to disable this, and toggling this flag allows\r\n         * you to do so. Also see `setSkipCull` for a chainable method that does the same thing.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#skipCull\r\n         * @type {boolean}\r\n         * @since 3.11.0\r\n         */\r\n        this.skipCull = false;\r\n\r\n        /**\r\n         * The total number of tiles drawn by the renderer in the last frame.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#tilesDrawn\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.tilesDrawn = 0;\r\n\r\n        /**\r\n         * The total number of tiles in this layer. Updated every frame.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#tilesTotal\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.11.0\r\n         */\r\n        this.tilesTotal = this.layer.width * this.layer.height;\r\n\r\n        /**\r\n         * The amount of extra tiles to add into the cull rectangle when calculating its horizontal size.\r\n         *\r\n         * See the method `setCullPadding` for more details.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#cullPaddingX\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.11.0\r\n         */\r\n        this.cullPaddingX = 1;\r\n\r\n        /**\r\n         * The amount of extra tiles to add into the cull rectangle when calculating its vertical size.\r\n         *\r\n         * See the method `setCullPadding` for more details.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#cullPaddingY\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.11.0\r\n         */\r\n        this.cullPaddingY = 1;\r\n\r\n        /**\r\n         * The callback that is invoked when the tiles are culled.\r\n         *\r\n         * By default it will call `TilemapComponents.CullTiles` but you can override this to call any function you like.\r\n         *\r\n         * It will be sent 3 arguments:\r\n         *\r\n         * 1. The Phaser.Tilemaps.LayerData object for this Layer\r\n         * 2. The Camera that is culling the layer. You can check its `dirty` property to see if it has changed since the last cull.\r\n         * 3. A reference to the `culledTiles` array, which should be used to store the tiles you want rendered.\r\n         *\r\n         * See the `TilemapComponents.CullTiles` source code for details on implementing your own culling system.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#cullCallback\r\n         * @type {function}\r\n         * @since 3.11.0\r\n         */\r\n        this.cullCallback = TilemapComponents.CullTiles;\r\n\r\n        /**\r\n         * The rendering (draw) order of the tiles in this layer.\r\n         * \r\n         * The default is 0 which is 'right-down', meaning it will draw the tiles starting from the top-left,\r\n         * drawing to the right and then moving down to the next row.\r\n         * \r\n         * The draw orders are:\r\n         * \r\n         * 0 = right-down\r\n         * 1 = left-down\r\n         * 2 = right-up\r\n         * 3 = left-up\r\n         * \r\n         * This can be changed via the `setRenderOrder` method.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#_renderOrder\r\n         * @type {integer}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._renderOrder = 0;\r\n\r\n        /**\r\n         * An array holding the mapping between the tile indexes and the tileset they belong to.\r\n         *\r\n         * @name Phaser.Tilemaps.DynamicTilemapLayer#gidMap\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.14.0\r\n         */\r\n        this.gidMap = [];\r\n\r\n        this.setTilesets(tileset);\r\n        this.setAlpha(this.layer.alpha);\r\n        this.setPosition(x, y);\r\n        this.setOrigin();\r\n        this.setSize(tilemap.tileWidth * this.layer.width, tilemap.tileHeight * this.layer.height);\r\n\r\n        this.initPipeline('TextureTintPipeline');\r\n    },\r\n\r\n    /**\r\n     * Populates the internal `tileset` array with the Tileset references this Layer requires for rendering.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setTilesets\r\n     * @private\r\n     * @since 3.14.0\r\n     * \r\n     * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n     */\r\n    setTilesets: function (tilesets)\r\n    {\r\n        var gidMap = [];\r\n        var setList = [];\r\n        var map = this.tilemap;\r\n\r\n        if (!Array.isArray(tilesets))\r\n        {\r\n            tilesets = [ tilesets ];\r\n        }\r\n\r\n        for (var i = 0; i < tilesets.length; i++)\r\n        {\r\n            var tileset = tilesets[i];\r\n\r\n            if (typeof tileset === 'string')\r\n            {\r\n                tileset = map.getTileset(tileset);\r\n            }\r\n\r\n            if (tileset)\r\n            {\r\n                setList.push(tileset);\r\n\r\n                var s = tileset.firstgid;\r\n\r\n                for (var t = 0; t < tileset.total; t++)\r\n                {\r\n                    gidMap[s + t] = tileset;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.gidMap = gidMap;\r\n        this.tileset = setList;\r\n    },\r\n\r\n    /**\r\n     * Sets the rendering (draw) order of the tiles in this layer.\r\n     * \r\n     * The default is 'right-down', meaning it will order the tiles starting from the top-left,\r\n     * drawing to the right and then moving down to the next row.\r\n     * \r\n     * The draw orders are:\r\n     * \r\n     * 0 = right-down\r\n     * 1 = left-down\r\n     * 2 = right-up\r\n     * 3 = left-up\r\n     * \r\n     * Setting the render order does not change the tiles or how they are stored in the layer,\r\n     * it purely impacts the order in which they are rendered.\r\n     * \r\n     * You can provide either an integer (0 to 3), or the string version of the order.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setRenderOrder\r\n     * @since 3.12.0\r\n     *\r\n     * @param {(integer|string)} renderOrder - The render (draw) order value. Either an integer between 0 and 3, or a string: 'right-down', 'left-down', 'right-up' or 'left-up'.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setRenderOrder: function (renderOrder)\r\n    {\r\n        var orders = [ 'right-down', 'left-down', 'right-up', 'left-up' ];\r\n\r\n        if (typeof renderOrder === 'string')\r\n        {\r\n            renderOrder = orders.indexOf(renderOrder);\r\n        }\r\n\r\n        if (renderOrder >= 0 && renderOrder < 4)\r\n        {\r\n            this._renderOrder = renderOrder;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces at the given tile coordinates of the specified layer. Interesting\r\n     * faces are used internally for optimizing collisions against tiles. This method is mostly used\r\n     * internally to optimize recalculating faces when only one tile has been changed.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#calculateFacesAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate.\r\n     * @param {integer} tileY - The y coordinate.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    calculateFacesAt: function (tileX, tileY)\r\n    {\r\n        TilemapComponents.CalculateFacesAt(tileX, tileY, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces within the rectangular area specified (in tile coordinates) of the\r\n     * layer. Interesting faces are used internally for optimizing collisions against tiles. This method\r\n     * is mostly used internally.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#calculateFacesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    calculateFacesWithin: function (tileX, tileY, width, height)\r\n    {\r\n        TilemapComponents.CalculateFacesWithin(tileX, tileY, width, height, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a Sprite for every object matching the given tile indexes in the layer. You can\r\n     * optionally specify if each tile will be replaced with a new tile after the Sprite has been\r\n     * created. This is useful if you want to lay down special tiles in a level that are converted to\r\n     * Sprites, but want to replace the tile itself with a floor tile or similar once converted.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#createFromTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - The tile index, or array of indexes, to create Sprites from.\r\n     * @param {(integer|array)} replacements - The tile index, or array of indexes, to change a converted\r\n     * tile to. Set to `null` to leave the tiles unchanged. If an array is given, it is assumed to be a\r\n     * one-to-one mapping with the indexes array.\r\n     * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} spriteConfig - The config object to pass into the Sprite creator (i.e.\r\n     * scene.make.sprite).\r\n     * @param {Phaser.Scene} [scene=scene the map is within] - The Scene to create the Sprites within.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when determining the world XY\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite[]} An array of the Sprites that were created.\r\n     */\r\n    createFromTiles: function (indexes, replacements, spriteConfig, scene, camera)\r\n    {\r\n        return TilemapComponents.CreateFromTiles(indexes, replacements, spriteConfig, scene, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Returns the tiles in the given layer that are within the cameras viewport.\r\n     * This is used internally.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#cull\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to run the cull check against.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    cull: function (camera)\r\n    {\r\n        return this.cullCallback(this.layer, camera, this.culledTiles, this._renderOrder);\r\n    },\r\n\r\n    /**\r\n     * Copies the tiles in the source rectangular area to a new destination (all specified in tile\r\n     * coordinates) within the layer. This copies all tile properties & recalculates collision\r\n     * information in the destination region.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#copy\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} srcTileX - The x coordinate of the area to copy from, in tiles, not pixels.\r\n     * @param {integer} srcTileY - The y coordinate of the area to copy from, in tiles, not pixels.\r\n     * @param {integer} width - The width of the area to copy, in tiles, not pixels.\r\n     * @param {integer} height - The height of the area to copy, in tiles, not pixels.\r\n     * @param {integer} destTileX - The x coordinate of the area to copy to, in tiles, not pixels.\r\n     * @param {integer} destTileY - The y coordinate of the area to copy to, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    copy: function (srcTileX, srcTileY, width, height, destTileX, destTileY, recalculateFaces)\r\n    {\r\n        TilemapComponents.Copy(srcTileX, srcTileY, width, height, destTileX, destTileY, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Destroys this DynamicTilemapLayer and removes its link to the associated LayerData.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#destroy\r\n     * @since 3.0.0\r\n     * \r\n     * @param {boolean} [removeFromTilemap=true] - Remove this layer from the parent Tilemap?\r\n     */\r\n    destroy: function (removeFromTilemap)\r\n    {\r\n        if (removeFromTilemap === undefined) { removeFromTilemap = true; }\r\n\r\n        if (!this.tilemap)\r\n        {\r\n            //  Abort, we've already been destroyed\r\n            return;\r\n        }\r\n\r\n        //  Uninstall this layer only if it is still installed on the LayerData object\r\n        if (this.layer.tilemapLayer === this)\r\n        {\r\n            this.layer.tilemapLayer = undefined;\r\n        }\r\n\r\n        if (removeFromTilemap)\r\n        {\r\n            this.tilemap.removeLayer(this);\r\n        }\r\n\r\n        this.tilemap = undefined;\r\n        this.layer = undefined;\r\n        this.culledTiles.length = 0;\r\n        this.cullCallback = null;\r\n\r\n        this.gidMap = [];\r\n        this.tileset = [];\r\n\r\n        GameObject.prototype.destroy.call(this);\r\n    },\r\n\r\n    /**\r\n     * Sets the tiles in the given rectangular area (in tile coordinates) of the layer with the\r\n     * specified index. Tiles will be set to collide if the given index is a colliding index.\r\n     * Collision information in the region will be recalculated.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#fill\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The tile index to fill the area with.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    fill: function (index, tileX, tileY, width, height, recalculateFaces)\r\n    {\r\n        TilemapComponents.Fill(index, tileX, tileY, width, height, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * filter callback function. Any tiles that pass the filter test (i.e. where the callback returns\r\n     * true) will returned as a new array. Similar to Array.prototype.Filter in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#filterTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n     * callback as the first and only parameter. The callback should return true for tiles that pass the\r\n     * filter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    filterTiles: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.FilterTiles(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Searches the entire map layer for the first tile matching the given index, then returns that Tile\r\n     * object. If no match is found, it returns null. The search starts from the top-left tile and\r\n     * continues horizontally until it hits the end of the row, then it drops down to the next column.\r\n     * If the reverse boolean is true, it scans starting from the bottom-right corner traveling up to\r\n     * the top-left.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#findByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The tile index value to search for.\r\n     * @param {integer} [skip=0] - The number of times to skip a matching tile before returning.\r\n     * @param {boolean} [reverse=false] - If true it will scan the layer in reverse, starting at the\r\n     * bottom-right. Otherwise it scans from the top-left.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    findByIndex: function (findIndex, skip, reverse)\r\n    {\r\n        return TilemapComponents.FindByIndex(findIndex, skip, reverse, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Find the first tile in the given rectangular area (in tile coordinates) of the layer that\r\n     * satisfies the provided testing function. I.e. finds the first tile for which `callback` returns\r\n     * true. Similar to Array.prototype.find in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#findTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {FindTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile}\r\n     */\r\n    findTile: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.FindTile(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * callback. Similar to Array.prototype.forEach in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#forEachTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {EachTileCallback} callback - The callback. Each tile in the given area will be passed to this callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area to search.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    forEachTile: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        TilemapComponents.ForEachTile(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given tile coordinates from the given layer.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#getTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - X position to get the tile from (given in tile units, not pixels).\r\n     * @param {integer} tileY - Y position to get the tile from (given in tile units, not pixels).\r\n     * @param {boolean} [nonNull=false] - If true getTile won't return null for empty tiles, but a Tile object with an index of -1.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates were invalid.\r\n     */\r\n    getTileAt: function (tileX, tileY, nonNull)\r\n    {\r\n        return TilemapComponents.GetTileAt(tileX, tileY, nonNull, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given world coordinates from the given layer.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#getTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - X position to get the tile from (given in pixels)\r\n     * @param {number} worldY - Y position to get the tile from (given in pixels)\r\n     * @param {boolean} [nonNull=false] - If true, function won't return null for empty tiles, but a Tile object with an index of -1.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates\r\n     * were invalid.\r\n     */\r\n    getTileAtWorldXY: function (worldX, worldY, nonNull, camera)\r\n    {\r\n        return TilemapComponents.GetTileAtWorldXY(worldX, worldY, nonNull, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in tile coordinates) of the layer.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#getTilesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithin: function (tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.GetTilesWithin(tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles that overlap with the given shape in the given layer. The shape must be a Circle,\r\n     * Line, Rectangle or Triangle. The shape should be in world coordinates.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#getTilesWithinShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Geom.Circle|Phaser.Geom.Line|Phaser.Geom.Rectangle|Phaser.Geom.Triangle)} shape - A shape in world (pixel) coordinates\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithinShape: function (shape, filteringOptions, camera)\r\n    {\r\n        return TilemapComponents.GetTilesWithinShape(shape, filteringOptions, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in world coordinates) of the layer.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#getTilesWithinWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The world x coordinate for the top-left of the area.\r\n     * @param {number} worldY - The world y coordinate for the top-left of the area.\r\n     * @param {number} width - The width of the area.\r\n     * @param {number} height - The height of the area.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithinWorldXY: function (worldX, worldY, width, height, filteringOptions, camera)\r\n    {\r\n        return TilemapComponents.GetTilesWithinWorldXY(worldX, worldY, width, height, filteringOptions, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in tile coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#hasTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     *\r\n     * @return {boolean} `true` if a tile was found at the given location, otherwise `false`.\r\n     */\r\n    hasTileAt: function (tileX, tileY)\r\n    {\r\n        return TilemapComponents.HasTileAt(tileX, tileY, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in world coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#hasTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     *\r\n     * @return {boolean} `true` if a tile was found at the given location, otherwise `false`.\r\n     */\r\n    hasTileAtWorldXY: function (worldX, worldY, camera)\r\n    {\r\n        return TilemapComponents.HasTileAtWorldXY(worldX, worldY, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Puts a tile at the given tile coordinates in the specified layer. You can pass in either an index\r\n     * or a Tile object. If you pass in a Tile, all attributes will be copied over to the specified\r\n     * location. If you pass in an index, only the index at the specified location will be changed.\r\n     * Collision information will be recalculated at the specified location.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#putTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    putTileAt: function (tile, tileX, tileY, recalculateFaces)\r\n    {\r\n        return TilemapComponents.PutTileAt(tile, tileX, tileY, recalculateFaces, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Puts a tile at the given world coordinates (pixels) in the specified layer. You can pass in either\r\n     * an index or a Tile object. If you pass in a Tile, all attributes will be copied over to the\r\n     * specified location. If you pass in an index, only the index at the specified location will be\r\n     * changed. Collision information will be recalculated at the specified location.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#putTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|Phaser.Tilemaps.Tile)} tile - The index of this tile to set or a Tile object.\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    putTileAtWorldXY: function (tile, worldX, worldY, recalculateFaces, camera)\r\n    {\r\n        return TilemapComponents.PutTileAtWorldXY(tile, worldX, worldY, recalculateFaces, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Puts an array of tiles or a 2D array of tiles at the given tile coordinates in the specified\r\n     * layer. The array can be composed of either tile indexes or Tile objects. If you pass in a Tile,\r\n     * all attributes will be copied over to the specified location. If you pass in an index, only the\r\n     * index at the specified location will be changed. Collision information will be recalculated\r\n     * within the region tiles were changed.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#putTilesAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer[]|integer[][]|Phaser.Tilemaps.Tile[]|Phaser.Tilemaps.Tile[][])} tile - A row (array) or grid (2D array) of Tiles or tile indexes to place.\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    putTilesAt: function (tilesArray, tileX, tileY, recalculateFaces)\r\n    {\r\n        TilemapComponents.PutTilesAt(tilesArray, tileX, tileY, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n     * specified layer. Each tile will receive a new index. If an array of indexes is passed in, then\r\n     * those will be used for randomly assigning new tile indexes. If an array is not provided, the\r\n     * indexes found within the region (excluding -1) will be used for randomly assigning new tile\r\n     * indexes. This method only modifies tile indexes and does not change collision information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#randomize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {integer[]} [indexes] - An array of indexes to randomly draw from during randomization.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    randomize: function (tileX, tileY, width, height, indexes)\r\n    {\r\n        TilemapComponents.Randomize(tileX, tileY, width, height, indexes, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Removes the tile at the given tile coordinates in the specified layer and updates the layer's\r\n     * collision information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#removeTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    removeTileAt: function (tileX, tileY, replaceWithNull, recalculateFaces)\r\n    {\r\n        return TilemapComponents.RemoveTileAt(tileX, tileY, replaceWithNull, recalculateFaces, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Removes the tile at the given world coordinates in the specified layer and updates the layer's\r\n     * collision information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#removeTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate, in pixels.\r\n     * @param {number} worldY - The y coordinate, in pixels.\r\n     * @param {boolean} [replaceWithNull=true] - If true, this will replace the tile at the specified location with null instead of a Tile with an index of -1.\r\n     * @param {boolean} [recalculateFaces=true] - `true` if the faces data should be recalculated.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    removeTileAtWorldXY: function (worldX, worldY, replaceWithNull, recalculateFaces, camera)\r\n    {\r\n        return TilemapComponents.RemoveTileAtWorldXY(worldX, worldY, replaceWithNull, recalculateFaces, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Draws a debug representation of the layer to the given Graphics. This is helpful when you want to\r\n     * get a quick idea of which of your tiles are colliding and which have interesting faces. The tiles\r\n     * are drawn starting at (0, 0) in the Graphics, allowing you to place the debug representation\r\n     * wherever you want on the screen.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#renderDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The target Graphics object to draw upon.\r\n     * @param {Phaser.Types.Tilemaps.StyleConfig} styleConfig - An object specifying the colors to use for the debug drawing.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    renderDebug: function (graphics, styleConfig)\r\n    {\r\n        TilemapComponents.RenderDebug(graphics, styleConfig, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n     * `findIndex` and updates their index to match `newIndex`. This only modifies the index and does\r\n     * not change collision information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#replaceByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} findIndex - The index of the tile to search for.\r\n     * @param {integer} newIndex - The index of the tile to replace it with.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    replaceByIndex: function (findIndex, newIndex, tileX, tileY, width, height)\r\n    {\r\n        TilemapComponents.ReplaceByIndex(findIndex, newIndex, tileX, tileY, width, height, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * You can control if the Cameras should cull tiles before rendering them or not.\r\n     * By default the camera will try to cull the tiles in this layer, to avoid over-drawing to the renderer.\r\n     *\r\n     * However, there are some instances when you may wish to disable this.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setSkipCull\r\n     * @since 3.11.0\r\n     *\r\n     * @param {boolean} [value=true] - Set to `true` to stop culling tiles. Set to `false` to enable culling again.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setSkipCull: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.skipCull = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * When a Camera culls the tiles in this layer it does so using its view into the world, building up a\r\n     * rectangle inside which the tiles must exist or they will be culled. Sometimes you may need to expand the size\r\n     * of this 'cull rectangle', especially if you plan on rotating the Camera viewing the layer. Do so\r\n     * by providing the padding values. The values given are in tiles, not pixels. So if the tile width was 32px\r\n     * and you set `paddingX` to be 4, it would add 32px x 4 to the cull rectangle (adjusted for scale)\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCullPadding\r\n     * @since 3.11.0\r\n     *\r\n     * @param {integer} [paddingX=1] - The amount of extra horizontal tiles to add to the cull check padding.\r\n     * @param {integer} [paddingY=1] - The amount of extra vertical tiles to add to the cull check padding.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setCullPadding: function (paddingX, paddingY)\r\n    {\r\n        if (paddingX === undefined) { paddingX = 1; }\r\n        if (paddingY === undefined) { paddingY = 1; }\r\n\r\n        this.cullPaddingX = paddingX;\r\n        this.cullPaddingY = paddingY;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the given tile or tiles within a layer by index. You can pass in either a\r\n     * single numeric index or an array of indexes: [2, 3, 15, 20]. The `collides` parameter controls if\r\n     * collision will be enabled (true) or disabled (false).\r\n     *\r\n     * If no layer specified, the map's current layer is used.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     * @param {boolean} [updateLayer=true] - If true, updates the current tiles on the layer. Set to\r\n     * false if no tiles have been placed for significant performance boost.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tilemap} Return this Tilemap object, or null if the layer given was invalid.\r\n     */\r\n    setCollision: function (indexes, collides, recalculateFaces, updateLayer)\r\n    {\r\n        TilemapComponents.SetCollision(indexes, collides, recalculateFaces, this.layer, updateLayer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on a range of tiles in a layer whose index is between the specified `start` and\r\n     * `stop` (inclusive). Calling this with a start value of 10 and a stop value of 14 would set\r\n     * collision for tiles 10, 11, 12, 13 and 14. The `collides` parameter controls if collision will be\r\n     * enabled (true) or disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCollisionBetween\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} start - The first index of the tile to be set for collision.\r\n     * @param {integer} stop - The last index of the tile to be set for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionBetween: function (start, stop, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionBetween(start, stop, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking tile properties. If a tile has a property\r\n     * that matches the given properties object, its collision flag will be set. The `collides`\r\n     * parameter controls if collision will be enabled (true) or disabled (false). Passing in\r\n     * `{ collides: true }` would update the collision flag on any tiles with a \"collides\" property that\r\n     * has a value of true. Any tile that doesn't have \"collides\" set to true will be ignored. You can\r\n     * also use an array of values, e.g. `{ types: [\"stone\", \"lava\", \"sand\" ] }`. If a tile has a\r\n     * \"types\" property that matches any of those values, its collision flag will be updated.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCollisionByProperty\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} properties - An object with tile properties and corresponding values that should be checked.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionByProperty: function (properties, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionByProperty(properties, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on all tiles in the given layer, except for tiles that have an index specified in\r\n     * the given array. The `collides` parameter controls if collision will be enabled (true) or\r\n     * disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCollisionByExclusion\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer[]} indexes - An array of the tile indexes to not be counted for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionByExclusion: function (indexes, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionByExclusion(indexes, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking each tiles collision group data\r\n     * (typically defined in Tiled within the tileset collision editor). If any objects are found within\r\n     * a tiles collision group, the tile's colliding information will be set. The `collides` parameter\r\n     * controls if collision will be enabled (true) or disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setCollisionFromCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the update.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionFromCollisionGroup: function (collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionFromCollisionGroup(collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a global collision callback for the given tile index within the layer. This will affect all\r\n     * tiles on this layer that have the same index. If a callback is already set for the tile index it\r\n     * will be replaced. Set the callback to null to remove it. If you want to set a callback for a tile\r\n     * at a specific location on the map then see setTileLocationCallback.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setTileIndexCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|integer[])} indexes - Either a single tile index, or an array of tile indexes to have a collision callback set for.\r\n     * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} callbackContext - The context under which the callback is called.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setTileIndexCallback: function (indexes, callback, callbackContext)\r\n    {\r\n        TilemapComponents.SetTileIndexCallback(indexes, callback, callbackContext, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a collision callback for the given rectangular area (in tile coordinates) within the layer.\r\n     * If a callback is already set for the tile index it will be replaced. Set the callback to null to\r\n     * remove it.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#setTileLocationCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {function} [callback] - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} [callbackContext] - The context under which the callback is called.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setTileLocationCallback: function (tileX, tileY, width, height, callback, callbackContext)\r\n    {\r\n        TilemapComponents.SetTileLocationCallback(tileX, tileY, width, height, callback, callbackContext, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Shuffles the tiles in a rectangular region (specified in tile coordinates) within the given\r\n     * layer. It will only randomize the tiles in that area, so if they're all the same nothing will\r\n     * appear to have changed! This method only modifies tile indexes and does not change collision\r\n     * information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#shuffle\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    shuffle: function (tileX, tileY, width, height)\r\n    {\r\n        TilemapComponents.Shuffle(tileX, tileY, width, height, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Scans the given rectangular area (given in tile coordinates) for tiles with an index matching\r\n     * `indexA` and swaps then with `indexB`. This only modifies the index and does not change collision\r\n     * information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#swapByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileA - First tile index.\r\n     * @param {integer} tileB - Second tile index.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    swapByIndex: function (indexA, indexB, tileX, tileY, width, height)\r\n    {\r\n        TilemapComponents.SwapByIndex(indexA, indexB, tileX, tileY, width, height, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Converts from tile X coordinates (tile units) to world X coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#tileToWorldX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {number}\r\n     */\r\n    tileToWorldX: function (tileX, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldX(tileX, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile Y coordinates (tile units) to world Y coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#tileToWorldY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {number}\r\n     */\r\n    tileToWorldY: function (tileY, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldY(tileY, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile XY coordinates (tile units) to world XY coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#tileToWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate, in tiles, not pixels.\r\n     * @param {integer} tileY - The y coordinate, in tiles, not pixels.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Math.Vector2}\r\n     */\r\n    tileToWorldXY: function (tileX, tileY, point, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldXY(tileX, tileY, point, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Randomizes the indexes of a rectangular region of tiles (in tile coordinates) within the\r\n     * specified layer. Each tile will receive a new index. New indexes are drawn from the given\r\n     * weightedIndexes array. An example weighted array:\r\n     *\r\n     * [\r\n     *  { index: 6, weight: 4 },    // Probability of index 6 is 4 / 8\r\n     *  { index: 7, weight: 2 },    // Probability of index 7 would be 2 / 8\r\n     *  { index: 8, weight: 1.5 },  // Probability of index 8 would be 1.5 / 8\r\n     *  { index: 26, weight: 0.5 }  // Probability of index 27 would be 0.5 / 8\r\n     * ]\r\n     *\r\n     * The probability of any index being choose is (the index's weight) / (sum of all weights). This\r\n     * method only modifies tile indexes and does not change collision information.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#weightedRandomize\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {object[]} [weightedIndexes] - An array of objects to randomly draw from during\r\n     * randomization. They should be in the form: { index: 0, weight: 4 } or\r\n     * { index: [0, 1], weight: 4 } if you wish to draw from multiple tile indexes.\r\n     *\r\n     * @return {Phaser.Tilemaps.DynamicTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    weightedRandomize: function (tileX, tileY, width, height, weightedIndexes)\r\n    {\r\n        TilemapComponents.WeightedRandomize(tileX, tileY, width, height, weightedIndexes, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Converts from world X coordinates (pixels) to tile X coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#worldToTileX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {number}\r\n     */\r\n    worldToTileX: function (worldX, snapToFloor, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileX(worldX, snapToFloor, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world Y coordinates (pixels) to tile Y coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#worldToTileY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {number}\r\n     */\r\n    worldToTileY: function (worldY, snapToFloor, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileY(worldY, snapToFloor, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world XY coordinates (pixels) to tile XY coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * @method Phaser.Tilemaps.DynamicTilemapLayer#worldToTileXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The x coordinate to be converted, in pixels, not tiles.\r\n     * @param {number} worldY - The y coordinate to be converted, in pixels, not tiles.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the nearest integer.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Math.Vector2}\r\n     */\r\n    worldToTileXY: function (worldX, worldY, snapToFloor, point, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileXY(worldX, worldY, snapToFloor, point, camera, this.layer);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = DynamicTilemapLayer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9keW5hbWljbGF5ZXIvRHluYW1pY1RpbGVtYXBMYXllci5qcz9lNmY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLCtGQUE4QjtBQUN2RCxnQ0FBZ0MsbUJBQU8sQ0FBQyxpSEFBNkI7QUFDckUsaUJBQWlCLG1CQUFPLENBQUMseUZBQThCO0FBQ3ZELHdCQUF3QixtQkFBTyxDQUFDLDZFQUFlOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQixXQUFXLG9FQUFvRTtBQUMvRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0VBQW9FO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0EsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsMEJBQTBCOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3REO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx1Q0FBdUM7QUFDdEQ7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSx1Q0FBdUM7QUFDdEQ7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUZBQWlGO0FBQ2hHLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtCQUErQjtBQUM5QyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdFQUF3RTtBQUN2RixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsVUFBVTtBQUN6QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLGtDQUFrQztBQUNqRDtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGNBQWM7QUFDbkQscUNBQXFDLGNBQWM7O0FBRW5EO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpQkFBaUI7QUFDMUI7QUFDQSwyQ0FBMkMsb0NBQW9DO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isb0NBQW9DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyx5QkFBeUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFNBQVM7QUFDeEIsbURBQW1ELHNCQUFzQjtBQUN6RSxRQUFRLDJCQUEyQjtBQUNuQztBQUNBLGdCQUFnQixvQ0FBb0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvZHluYW1pY2xheWVyL0R5bmFtaWNUaWxlbWFwTGF5ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgRHluYW1pY1RpbGVtYXBMYXllclJlbmRlciA9IHJlcXVpcmUoJy4vRHluYW1pY1RpbGVtYXBMYXllclJlbmRlcicpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL0dhbWVPYmplY3QnKTtcclxudmFyIFRpbGVtYXBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBEeW5hbWljIFRpbGVtYXAgTGF5ZXIgaXMgYSBHYW1lIE9iamVjdCB0aGF0IHJlbmRlcnMgTGF5ZXJEYXRhIGZyb20gYSBUaWxlbWFwIHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvblxyXG4gKiB3aXRoIG9uZSwgb3IgbW9yZSwgVGlsZXNldHMuXHJcbiAqXHJcbiAqIEEgRHluYW1pYyBUaWxlbWFwIExheWVyIHRyYWRlcyBzb21lIHNwZWVkIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHBvd2VyZnVsIGVmZmVjdHMuIFVubGlrZSBhXHJcbiAqIFN0YXRpYyBUaWxlbWFwIExheWVyLCB5b3UgY2FuIGFwcGx5IHBlci10aWxlIGVmZmVjdHMgbGlrZSB0aW50IG9yIGFscGhhLCBhbmQgeW91IGNhbiBjaGFuZ2UgdGhlXHJcbiAqIHRpbGVzIGluIGEgRHluYW1pY1RpbGVtYXBMYXllci5cclxuICogXHJcbiAqIFVzZSB0aGlzIG92ZXIgYSBTdGF0aWMgVGlsZW1hcCBMYXllciB3aGVuIHlvdSBuZWVkIHRob3NlIGZlYXR1cmVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRHluYW1pY1RpbGVtYXBMYXllclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRpbGVtYXBzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IHRpbGVtYXAgLSBUaGUgVGlsZW1hcCB0aGlzIGxheWVyIGlzIGEgcGFydCBvZi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBsYXllckluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBMYXllckRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB3b3JsZCB4IHBvc2l0aW9uIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGlzIGxheWVyIHdpbGwgYmUgcGxhY2VkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgd29ybGQgeSBwb3NpdGlvbiB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhpcyBsYXllciB3aWxsIGJlIHBsYWNlZC5cclxuICovXHJcbnZhciBEeW5hbWljVGlsZW1hcExheWVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5Db21wdXRlZFNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgRHluYW1pY1RpbGVtYXBMYXllclJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIER5bmFtaWNUaWxlbWFwTGF5ZXIgKHNjZW5lLCB0aWxlbWFwLCBsYXllckluZGV4LCB0aWxlc2V0LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ0R5bmFtaWNUaWxlbWFwTGF5ZXInKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHBoeXNpY3Mgc3lzdGVtIHRvIHBlcmZvcm0gZmFzdCB0eXBlIGNoZWNrcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI2lzVGlsZW1hcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNUaWxlbWFwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRpbGVtYXAgdGhhdCB0aGlzIGxheWVyIGlzIGEgcGFydCBvZi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3RpbGVtYXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlbWFwID0gdGlsZW1hcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluZGV4IG9mIHRoZSBMYXllckRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNsYXllckluZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXllckluZGV4ID0gbGF5ZXJJbmRleDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIExheWVyRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gTGF5ZXJEYXRhIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmVcclxuICAgICAgICAgKiB0aWxlbWFwIGxheWVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjbGF5ZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxheWVyID0gdGlsZW1hcC5sYXllcnNbbGF5ZXJJbmRleF07XHJcblxyXG4gICAgICAgIC8vIExpbmsgdGhlIExheWVyRGF0YSB3aXRoIHRoaXMgc3RhdGljIHRpbGVtYXAgbGF5ZXJcclxuICAgICAgICB0aGlzLmxheWVyLnRpbGVtYXBMYXllciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUaWxlc2V0L3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQXMgb2YgUGhhc2VyIDMuMTQgdGhpcyBwcm9wZXJ0eSBpcyBub3cgYW4gYXJyYXkgb2YgVGlsZXNldCBvYmplY3RzLCBwcmV2aW91c2x5IGl0IHdhcyBhIHNpbmdsZSByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN0aWxlc2V0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5UaWxlc2V0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlc2V0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSB3aXRoIHRoZSBjYW52YXMgcmVuZGVyLiBUaGlzIGhvbGRzIHRoZSB0aWxlcyB0aGF0IGFyZSB2aXNpYmxlIHdpdGhpbiB0aGVcclxuICAgICAgICAgKiBjYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjdWxsZWRUaWxlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1bGxlZFRpbGVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFlvdSBjYW4gY29udHJvbCBpZiB0aGUgQ2FtZXJhcyBzaG91bGQgY3VsbCB0aWxlcyBiZWZvcmUgcmVuZGVyaW5nIHRoZW0gb3Igbm90LlxyXG4gICAgICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSB3aWxsIHRyeSB0byBjdWxsIHRoZSB0aWxlcyBpbiB0aGlzIGxheWVyLCB0byBhdm9pZCBvdmVyLWRyYXdpbmcgdG8gdGhlIHJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgaW5zdGFuY2VzIHdoZW4geW91IG1heSB3aXNoIHRvIGRpc2FibGUgdGhpcywgYW5kIHRvZ2dsaW5nIHRoaXMgZmxhZyBhbGxvd3NcclxuICAgICAgICAgKiB5b3UgdG8gZG8gc28uIEFsc28gc2VlIGBzZXRTa2lwQ3VsbGAgZm9yIGEgY2hhaW5hYmxlIG1ldGhvZCB0aGF0IGRvZXMgdGhlIHNhbWUgdGhpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNza2lwQ3VsbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNraXBDdWxsID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgdGlsZXMgZHJhd24gYnkgdGhlIHJlbmRlcmVyIGluIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjdGlsZXNEcmF3blxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVzRHJhd24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRpbGVzIGluIHRoaXMgbGF5ZXIuIFVwZGF0ZWQgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN0aWxlc1RvdGFsXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZXNUb3RhbCA9IHRoaXMubGF5ZXIud2lkdGggKiB0aGlzLmxheWVyLmhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFtb3VudCBvZiBleHRyYSB0aWxlcyB0byBhZGQgaW50byB0aGUgY3VsbCByZWN0YW5nbGUgd2hlbiBjYWxjdWxhdGluZyBpdHMgaG9yaXpvbnRhbCBzaXplLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU2VlIHRoZSBtZXRob2QgYHNldEN1bGxQYWRkaW5nYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjY3VsbFBhZGRpbmdYXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1bGxQYWRkaW5nWCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgZXh0cmEgdGlsZXMgdG8gYWRkIGludG8gdGhlIGN1bGwgcmVjdGFuZ2xlIHdoZW4gY2FsY3VsYXRpbmcgaXRzIHZlcnRpY2FsIHNpemUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgdGhlIG1ldGhvZCBgc2V0Q3VsbFBhZGRpbmdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjdWxsUGFkZGluZ1lcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VsbFBhZGRpbmdZID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSB0aWxlcyBhcmUgY3VsbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCBpdCB3aWxsIGNhbGwgYFRpbGVtYXBDb21wb25lbnRzLkN1bGxUaWxlc2AgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBjYWxsIGFueSBmdW5jdGlvbiB5b3UgbGlrZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEl0IHdpbGwgYmUgc2VudCAzIGFyZ3VtZW50czpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIDEuIFRoZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhIG9iamVjdCBmb3IgdGhpcyBMYXllclxyXG4gICAgICAgICAqIDIuIFRoZSBDYW1lcmEgdGhhdCBpcyBjdWxsaW5nIHRoZSBsYXllci4gWW91IGNhbiBjaGVjayBpdHMgYGRpcnR5YCBwcm9wZXJ0eSB0byBzZWUgaWYgaXQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY3VsbC5cclxuICAgICAgICAgKiAzLiBBIHJlZmVyZW5jZSB0byB0aGUgYGN1bGxlZFRpbGVzYCBhcnJheSwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gc3RvcmUgdGhlIHRpbGVzIHlvdSB3YW50IHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU2VlIHRoZSBgVGlsZW1hcENvbXBvbmVudHMuQ3VsbFRpbGVzYCBzb3VyY2UgY29kZSBmb3IgZGV0YWlscyBvbiBpbXBsZW1lbnRpbmcgeW91ciBvd24gY3VsbGluZyBzeXN0ZW0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjdWxsQ2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VsbENhbGxiYWNrID0gVGlsZW1hcENvbXBvbmVudHMuQ3VsbFRpbGVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyaW5nIChkcmF3KSBvcmRlciBvZiB0aGUgdGlsZXMgaW4gdGhpcyBsYXllci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBpcyAwIHdoaWNoIGlzICdyaWdodC1kb3duJywgbWVhbmluZyBpdCB3aWxsIGRyYXcgdGhlIHRpbGVzIHN0YXJ0aW5nIGZyb20gdGhlIHRvcC1sZWZ0LFxyXG4gICAgICAgICAqIGRyYXdpbmcgdG8gdGhlIHJpZ2h0IGFuZCB0aGVuIG1vdmluZyBkb3duIHRvIHRoZSBuZXh0IHJvdy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgZHJhdyBvcmRlcnMgYXJlOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIDAgPSByaWdodC1kb3duXHJcbiAgICAgICAgICogMSA9IGxlZnQtZG93blxyXG4gICAgICAgICAqIDIgPSByaWdodC11cFxyXG4gICAgICAgICAqIDMgPSBsZWZ0LXVwXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIGBzZXRSZW5kZXJPcmRlcmAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjX3JlbmRlck9yZGVyXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlbmRlck9yZGVyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgaG9sZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSB0aWxlIGluZGV4ZXMgYW5kIHRoZSB0aWxlc2V0IHRoZXkgYmVsb25nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjZ2lkTWFwXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5UaWxlc2V0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2lkTWFwID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGlsZXNldHModGlsZXNldCk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmxheWVyLmFscGhhKTtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuc2V0T3JpZ2luKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHRpbGVtYXAudGlsZVdpZHRoICogdGhpcy5sYXllci53aWR0aCwgdGlsZW1hcC50aWxlSGVpZ2h0ICogdGhpcy5sYXllci5oZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgnVGV4dHVyZVRpbnRQaXBlbGluZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvcHVsYXRlcyB0aGUgaW50ZXJuYWwgYHRpbGVzZXRgIGFycmF5IHdpdGggdGhlIFRpbGVzZXQgcmVmZXJlbmNlcyB0aGlzIExheWVyIHJlcXVpcmVzIGZvciByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNzZXRUaWxlc2V0c1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE0LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdfFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0fFBoYXNlci5UaWxlbWFwcy5UaWxlc2V0W10pfSB0aWxlc2V0IC0gVGhlIHRpbGVzZXQsIG9yIGFuIGFycmF5IG9mIHRpbGVzZXRzLCB1c2VkIHRvIHJlbmRlciB0aGlzIGxheWVyLiBDYW4gYmUgYSBzdHJpbmcgb3IgYSBUaWxlc2V0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZXNldHM6IGZ1bmN0aW9uICh0aWxlc2V0cylcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2lkTWFwID0gW107XHJcbiAgICAgICAgdmFyIHNldExpc3QgPSBbXTtcclxuICAgICAgICB2YXIgbWFwID0gdGhpcy50aWxlbWFwO1xyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGlsZXNldHMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGlsZXNldHMgPSBbIHRpbGVzZXRzIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbGVzZXRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRpbGVzZXQgPSB0aWxlc2V0c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGlsZXNldCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpbGVzZXQgPSBtYXAuZ2V0VGlsZXNldCh0aWxlc2V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRpbGVzZXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNldExpc3QucHVzaCh0aWxlc2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcyA9IHRpbGVzZXQuZmlyc3RnaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0aWxlc2V0LnRvdGFsOyB0KyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2lkTWFwW3MgKyB0XSA9IHRpbGVzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2lkTWFwID0gZ2lkTWFwO1xyXG4gICAgICAgIHRoaXMudGlsZXNldCA9IHNldExpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmVuZGVyaW5nIChkcmF3KSBvcmRlciBvZiB0aGUgdGlsZXMgaW4gdGhpcyBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRlZmF1bHQgaXMgJ3JpZ2h0LWRvd24nLCBtZWFuaW5nIGl0IHdpbGwgb3JkZXIgdGhlIHRpbGVzIHN0YXJ0aW5nIGZyb20gdGhlIHRvcC1sZWZ0LFxyXG4gICAgICogZHJhd2luZyB0byB0aGUgcmlnaHQgYW5kIHRoZW4gbW92aW5nIGRvd24gdG8gdGhlIG5leHQgcm93LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZHJhdyBvcmRlcnMgYXJlOlxyXG4gICAgICogXHJcbiAgICAgKiAwID0gcmlnaHQtZG93blxyXG4gICAgICogMSA9IGxlZnQtZG93blxyXG4gICAgICogMiA9IHJpZ2h0LXVwXHJcbiAgICAgKiAzID0gbGVmdC11cFxyXG4gICAgICogXHJcbiAgICAgKiBTZXR0aW5nIHRoZSByZW5kZXIgb3JkZXIgZG9lcyBub3QgY2hhbmdlIHRoZSB0aWxlcyBvciBob3cgdGhleSBhcmUgc3RvcmVkIGluIHRoZSBsYXllcixcclxuICAgICAqIGl0IHB1cmVseSBpbXBhY3RzIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZW5kZXJlZC5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwcm92aWRlIGVpdGhlciBhbiBpbnRlZ2VyICgwIHRvIDMpLCBvciB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIG9yZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjc2V0UmVuZGVyT3JkZXJcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfHN0cmluZyl9IHJlbmRlck9yZGVyIC0gVGhlIHJlbmRlciAoZHJhdykgb3JkZXIgdmFsdWUuIEVpdGhlciBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMywgb3IgYSBzdHJpbmc6ICdyaWdodC1kb3duJywgJ2xlZnQtZG93bicsICdyaWdodC11cCcgb3IgJ2xlZnQtdXAnLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFJlbmRlck9yZGVyOiBmdW5jdGlvbiAocmVuZGVyT3JkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9yZGVycyA9IFsgJ3JpZ2h0LWRvd24nLCAnbGVmdC1kb3duJywgJ3JpZ2h0LXVwJywgJ2xlZnQtdXAnIF07XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcmVuZGVyT3JkZXIgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyT3JkZXIgPSBvcmRlcnMuaW5kZXhPZihyZW5kZXJPcmRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVuZGVyT3JkZXIgPj0gMCAmJiByZW5kZXJPcmRlciA8IDQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPcmRlciA9IHJlbmRlck9yZGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLiBJbnRlcmVzdGluZ1xyXG4gICAgICogZmFjZXMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3Igb3B0aW1pemluZyBjb2xsaXNpb25zIGFnYWluc3QgdGlsZXMuIFRoaXMgbWV0aG9kIGlzIG1vc3RseSB1c2VkXHJcbiAgICAgKiBpbnRlcm5hbGx5IHRvIG9wdGltaXplIHJlY2FsY3VsYXRpbmcgZmFjZXMgd2hlbiBvbmx5IG9uZSB0aWxlIGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjYWxjdWxhdGVGYWNlc0F0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVGYWNlc0F0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkNhbGN1bGF0ZUZhY2VzQXQodGlsZVgsIHRpbGVZLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyB3aXRoaW4gdGhlIHJlY3Rhbmd1bGFyIGFyZWEgc3BlY2lmaWVkIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGVcclxuICAgICAqIGxheWVyLiBJbnRlcmVzdGluZyBmYWNlcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBvcHRpbWl6aW5nIGNvbGxpc2lvbnMgYWdhaW5zdCB0aWxlcy4gVGhpcyBtZXRob2RcclxuICAgICAqIGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjYWxjdWxhdGVGYWNlc1dpdGhpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlRmFjZXNXaXRoaW46IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuQ2FsY3VsYXRlRmFjZXNXaXRoaW4odGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFNwcml0ZSBmb3IgZXZlcnkgb2JqZWN0IG1hdGNoaW5nIHRoZSBnaXZlbiB0aWxlIGluZGV4ZXMgaW4gdGhlIGxheWVyLiBZb3UgY2FuXHJcbiAgICAgKiBvcHRpb25hbGx5IHNwZWNpZnkgaWYgZWFjaCB0aWxlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG5ldyB0aWxlIGFmdGVyIHRoZSBTcHJpdGUgaGFzIGJlZW5cclxuICAgICAqIGNyZWF0ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGxheSBkb3duIHNwZWNpYWwgdGlsZXMgaW4gYSBsZXZlbCB0aGF0IGFyZSBjb252ZXJ0ZWQgdG9cclxuICAgICAqIFNwcml0ZXMsIGJ1dCB3YW50IHRvIHJlcGxhY2UgdGhlIHRpbGUgaXRzZWxmIHdpdGggYSBmbG9vciB0aWxlIG9yIHNpbWlsYXIgb25jZSBjb252ZXJ0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNjcmVhdGVGcm9tVGlsZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gVGhlIHRpbGUgaW5kZXgsIG9yIGFycmF5IG9mIGluZGV4ZXMsIHRvIGNyZWF0ZSBTcHJpdGVzIGZyb20uXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfGFycmF5KX0gcmVwbGFjZW1lbnRzIC0gVGhlIHRpbGUgaW5kZXgsIG9yIGFycmF5IG9mIGluZGV4ZXMsIHRvIGNoYW5nZSBhIGNvbnZlcnRlZFxyXG4gICAgICogdGlsZSB0by4gU2V0IHRvIGBudWxsYCB0byBsZWF2ZSB0aGUgdGlsZXMgdW5jaGFuZ2VkLiBJZiBhbiBhcnJheSBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBhXHJcbiAgICAgKiBvbmUtdG8tb25lIG1hcHBpbmcgd2l0aCB0aGUgaW5kZXhlcyBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlNwcml0ZS5TcHJpdGVDb25maWd9IHNwcml0ZUNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIHBhc3MgaW50byB0aGUgU3ByaXRlIGNyZWF0b3IgKGkuZS5cclxuICAgICAqIHNjZW5lLm1ha2Uuc3ByaXRlKS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBbc2NlbmU9c2NlbmUgdGhlIG1hcCBpcyB3aXRoaW5dIC0gVGhlIFNjZW5lIHRvIGNyZWF0ZSB0aGUgU3ByaXRlcyB3aXRoaW4uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHdvcmxkIFhZXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVtdfSBBbiBhcnJheSBvZiB0aGUgU3ByaXRlcyB0aGF0IHdlcmUgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRnJvbVRpbGVzOiBmdW5jdGlvbiAoaW5kZXhlcywgcmVwbGFjZW1lbnRzLCBzcHJpdGVDb25maWcsIHNjZW5lLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkNyZWF0ZUZyb21UaWxlcyhpbmRleGVzLCByZXBsYWNlbWVudHMsIHNwcml0ZUNvbmZpZywgc2NlbmUsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIGxheWVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgY2FtZXJhcyB2aWV3cG9ydC5cclxuICAgICAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjY3VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHJ1biB0aGUgY3VsbCBjaGVjayBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFuIGFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgY3VsbDogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdWxsQ2FsbGJhY2sodGhpcy5sYXllciwgY2FtZXJhLCB0aGlzLmN1bGxlZFRpbGVzLCB0aGlzLl9yZW5kZXJPcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB0aWxlcyBpbiB0aGUgc291cmNlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gYSBuZXcgZGVzdGluYXRpb24gKGFsbCBzcGVjaWZpZWQgaW4gdGlsZVxyXG4gICAgICogY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGUgbGF5ZXIuIFRoaXMgY29waWVzIGFsbCB0aWxlIHByb3BlcnRpZXMgJiByZWNhbGN1bGF0ZXMgY29sbGlzaW9uXHJcbiAgICAgKiBpbmZvcm1hdGlvbiBpbiB0aGUgZGVzdGluYXRpb24gcmVnaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjY29weVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzcmNUaWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGFyZWEgdG8gY29weSBmcm9tLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3JjVGlsZVkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgZnJvbSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIGNvcHksIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIHRvIGNvcHksIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkZXN0VGlsZVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgdG8sIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkZXN0VGlsZVkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBhcmVhIHRvIGNvcHkgdG8sIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoc3JjVGlsZVgsIHNyY1RpbGVZLCB3aWR0aCwgaGVpZ2h0LCBkZXN0VGlsZVgsIGRlc3RUaWxlWSwgcmVjYWxjdWxhdGVGYWNlcylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5Db3B5KHNyY1RpbGVYLCBzcmNUaWxlWSwgd2lkdGgsIGhlaWdodCwgZGVzdFRpbGVYLCBkZXN0VGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIER5bmFtaWNUaWxlbWFwTGF5ZXIgYW5kIHJlbW92ZXMgaXRzIGxpbmsgdG8gdGhlIGFzc29jaWF0ZWQgTGF5ZXJEYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZUZyb21UaWxlbWFwPXRydWVdIC0gUmVtb3ZlIHRoaXMgbGF5ZXIgZnJvbSB0aGUgcGFyZW50IFRpbGVtYXA/XHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChyZW1vdmVGcm9tVGlsZW1hcClcclxuICAgIHtcclxuICAgICAgICBpZiAocmVtb3ZlRnJvbVRpbGVtYXAgPT09IHVuZGVmaW5lZCkgeyByZW1vdmVGcm9tVGlsZW1hcCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnRpbGVtYXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQWJvcnQsIHdlJ3ZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWRcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFVuaW5zdGFsbCB0aGlzIGxheWVyIG9ubHkgaWYgaXQgaXMgc3RpbGwgaW5zdGFsbGVkIG9uIHRoZSBMYXllckRhdGEgb2JqZWN0XHJcbiAgICAgICAgaWYgKHRoaXMubGF5ZXIudGlsZW1hcExheWVyID09PSB0aGlzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sYXllci50aWxlbWFwTGF5ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlRnJvbVRpbGVtYXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRpbGVtYXAucmVtb3ZlTGF5ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRpbGVtYXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5sYXllciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmN1bGxlZFRpbGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5jdWxsQ2FsbGJhY2sgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmdpZE1hcCA9IFtdO1xyXG4gICAgICAgIHRoaXMudGlsZXNldCA9IFtdO1xyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciB3aXRoIHRoZVxyXG4gICAgICogc3BlY2lmaWVkIGluZGV4LiBUaWxlcyB3aWxsIGJlIHNldCB0byBjb2xsaWRlIGlmIHRoZSBnaXZlbiBpbmRleCBpcyBhIGNvbGxpZGluZyBpbmRleC5cclxuICAgICAqIENvbGxpc2lvbiBpbmZvcm1hdGlvbiBpbiB0aGUgcmVnaW9uIHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjZmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSB0aWxlIGluZGV4IHRvIGZpbGwgdGhlIGFyZWEgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGw6IGZ1bmN0aW9uIChpbmRleCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkZpbGwoaW5kZXgsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgcmVjYWxjdWxhdGVGYWNlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBlYWNoIHRpbGUgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciwgcnVuIHRoZSBnaXZlblxyXG4gICAgICogZmlsdGVyIGNhbGxiYWNrIGZ1bmN0aW9uLiBBbnkgdGlsZXMgdGhhdCBwYXNzIHRoZSBmaWx0ZXIgdGVzdCAoaS5lLiB3aGVyZSB0aGUgY2FsbGJhY2sgcmV0dXJuc1xyXG4gICAgICogdHJ1ZSkgd2lsbCByZXR1cm5lZCBhcyBhIG5ldyBhcnJheS4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuRmlsdGVyIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNmaWx0ZXJUaWxlc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzXHJcbiAgICAgKiBjYWxsYmFjayBhcyB0aGUgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiB0cnVlIGZvciB0aWxlcyB0aGF0IHBhc3MgdGhlXHJcbiAgICAgKiBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBydW4uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gQW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBmaWx0ZXJUaWxlczogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkZpbHRlclRpbGVzKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaGVzIHRoZSBlbnRpcmUgbWFwIGxheWVyIGZvciB0aGUgZmlyc3QgdGlsZSBtYXRjaGluZyB0aGUgZ2l2ZW4gaW5kZXgsIHRoZW4gcmV0dXJucyB0aGF0IFRpbGVcclxuICAgICAqIG9iamVjdC4gSWYgbm8gbWF0Y2ggaXMgZm91bmQsIGl0IHJldHVybnMgbnVsbC4gVGhlIHNlYXJjaCBzdGFydHMgZnJvbSB0aGUgdG9wLWxlZnQgdGlsZSBhbmRcclxuICAgICAqIGNvbnRpbnVlcyBob3Jpem9udGFsbHkgdW50aWwgaXQgaGl0cyB0aGUgZW5kIG9mIHRoZSByb3csIHRoZW4gaXQgZHJvcHMgZG93biB0byB0aGUgbmV4dCBjb2x1bW4uXHJcbiAgICAgKiBJZiB0aGUgcmV2ZXJzZSBib29sZWFuIGlzIHRydWUsIGl0IHNjYW5zIHN0YXJ0aW5nIGZyb20gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgdHJhdmVsaW5nIHVwIHRvXHJcbiAgICAgKiB0aGUgdG9wLWxlZnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNmaW5kQnlJbmRleFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSB0aWxlIGluZGV4IHZhbHVlIHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtza2lwPTBdIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBza2lwIGEgbWF0Y2hpbmcgdGlsZSBiZWZvcmUgcmV0dXJuaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gLSBJZiB0cnVlIGl0IHdpbGwgc2NhbiB0aGUgbGF5ZXIgaW4gcmV2ZXJzZSwgc3RhcnRpbmcgYXQgdGhlXHJcbiAgICAgKiBib3R0b20tcmlnaHQuIE90aGVyd2lzZSBpdCBzY2FucyBmcm9tIHRoZSB0b3AtbGVmdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gQSBUaWxlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZmluZEJ5SW5kZXg6IGZ1bmN0aW9uIChmaW5kSW5kZXgsIHNraXAsIHJldmVyc2UpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkZpbmRCeUluZGV4KGZpbmRJbmRleCwgc2tpcCwgcmV2ZXJzZSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCB0aGUgZmlyc3QgdGlsZSBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyIHRoYXRcclxuICAgICAqIHNhdGlzZmllcyB0aGUgcHJvdmlkZWQgdGVzdGluZyBmdW5jdGlvbi4gSS5lLiBmaW5kcyB0aGUgZmlyc3QgdGlsZSBmb3Igd2hpY2ggYGNhbGxiYWNrYCByZXR1cm5zXHJcbiAgICAgKiB0cnVlLiBTaW1pbGFyIHRvIEFycmF5LnByb3RvdHlwZS5maW5kIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNmaW5kVGlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGaW5kVGlsZUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCB0aWxlIGluIHRoZSBnaXZlbiBhcmVhIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgY2FsbGJhY2sgYXMgdGhlIGZpcnN0IGFuZCBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIHJ1bi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBzZWFyY2guXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBzZWFyY2guXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLlRpbGVtYXBzLlRpbGV9XHJcbiAgICAgKi9cclxuICAgIGZpbmRUaWxlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuRmluZFRpbGUoY2FsbGJhY2ssIGNvbnRleHQsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9yIGVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoaW4gdGlsZSBjb29yZGluYXRlcykgb2YgdGhlIGxheWVyLCBydW4gdGhlIGdpdmVuXHJcbiAgICAgKiBjYWxsYmFjay4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCBpbiB2YW5pbGxhIEpTLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjZm9yRWFjaFRpbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWFjaFRpbGVDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBydW4uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gc2VhcmNoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gc2VhcmNoLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZvckVhY2hUaWxlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5Gb3JFYWNoVGlsZShjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZ2l2ZW4gbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNnZXRUaWxlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBYIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiB0aWxlIHVuaXRzLCBub3QgcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBZIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiB0aWxlIHVuaXRzLCBub3QgcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSBnZXRUaWxlIHdvbid0IHJldHVybiBudWxsIGZvciBlbXB0eSB0aWxlcywgYnV0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gVGhlIHRpbGUgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIG9yIG51bGwgaWYgbm8gdGlsZSB3YXMgZm91bmQgb3IgdGhlIGNvb3JkaW5hdGVzIHdlcmUgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZUF0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCBub25OdWxsKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5HZXRUaWxlQXQodGlsZVgsIHRpbGVZLCBub25OdWxsLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gd29ybGQgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZ2l2ZW4gbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNnZXRUaWxlQXRXb3JsZFhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gWCBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSAoZ2l2ZW4gaW4gcGl4ZWxzKVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFkgcG9zaXRpb24gdG8gZ2V0IHRoZSB0aWxlIGZyb20gKGdpdmVuIGluIHBpeGVscylcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25vbk51bGw9ZmFsc2VdIC0gSWYgdHJ1ZSwgZnVuY3Rpb24gd29uJ3QgcmV0dXJuIG51bGwgZm9yIGVtcHR5IHRpbGVzLCBidXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZX0gVGhlIHRpbGUgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIG9yIG51bGwgaWYgbm8gdGlsZSB3YXMgZm91bmQgb3IgdGhlIGNvb3JkaW5hdGVzXHJcbiAgICAgKiB3ZXJlIGludmFsaWQuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVBdFdvcmxkWFk6IGZ1bmN0aW9uICh3b3JsZFgsIHdvcmxkWSwgbm9uTnVsbCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5HZXRUaWxlQXRXb3JsZFhZKHdvcmxkWCwgd29ybGRZLCBub25OdWxsLCBjYW1lcmEsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRpbGVzIGluIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNnZXRUaWxlc1dpdGhpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVzV2l0aGluOiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5HZXRUaWxlc1dpdGhpbih0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRpbGVzIHRoYXQgb3ZlcmxhcCB3aXRoIHRoZSBnaXZlbiBzaGFwZSBpbiB0aGUgZ2l2ZW4gbGF5ZXIuIFRoZSBzaGFwZSBtdXN0IGJlIGEgQ2lyY2xlLFxyXG4gICAgICogTGluZSwgUmVjdGFuZ2xlIG9yIFRyaWFuZ2xlLiBUaGUgc2hhcGUgc2hvdWxkIGJlIGluIHdvcmxkIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjZ2V0VGlsZXNXaXRoaW5TaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uQ2lyY2xlfFBoYXNlci5HZW9tLkxpbmV8UGhhc2VyLkdlb20uUmVjdGFuZ2xlfFBoYXNlci5HZW9tLlRyaWFuZ2xlKX0gc2hhcGUgLSBBIHNoYXBlIGluIHdvcmxkIChwaXhlbCkgY29vcmRpbmF0ZXNcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBmYWN0b3JpbmcgaW4gd2hpY2ggdGlsZXMgdG8gcmV0dXJuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFuIGFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZXNXaXRoaW5TaGFwZTogZnVuY3Rpb24gKHNoYXBlLCBmaWx0ZXJpbmdPcHRpb25zLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVzV2l0aGluU2hhcGUoc2hhcGUsIGZpbHRlcmluZ09wdGlvbnMsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHdvcmxkIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNnZXRUaWxlc1dpdGhpbldvcmxkWFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgd29ybGQgeCBjb29yZGluYXRlIGZvciB0aGUgdG9wLWxlZnQgb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHdvcmxkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIHRvcC1sZWZ0IG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gZmFjdG9yaW5nIGluIHdoaWNoIHRpbGVzIHRvIHJldHVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVzV2l0aGluV29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVzV2l0aGluV29ybGRYWSh3b3JsZFgsIHdvcmxkWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSB0aWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbiAoaW4gdGlsZSBjb29yZGluYXRlcykgaW4gdGhlIGdpdmVuIGxheWVyLiBSZXR1cm5zXHJcbiAgICAgKiBmYWxzZSBpZiB0aGVyZSBpcyBubyB0aWxlIG9yIGlmIHRoZSB0aWxlIGF0IHRoYXQgbG9jYXRpb24gaGFzIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjaGFzVGlsZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGEgdGlsZSB3YXMgZm91bmQgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzVGlsZUF0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5IYXNUaWxlQXQodGlsZVgsIHRpbGVZLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSB0aWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbiAoaW4gd29ybGQgY29vcmRpbmF0ZXMpIGluIHRoZSBnaXZlbiBsYXllci4gUmV0dXJuc1xyXG4gICAgICogZmFsc2UgaWYgdGhlcmUgaXMgbm8gdGlsZSBvciBpZiB0aGUgdGlsZSBhdCB0aGF0IGxvY2F0aW9uIGhhcyBhbiBpbmRleCBvZiAtMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI2hhc1RpbGVBdFdvcmxkWFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgeCBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGZhY3RvcmluZyBpbiB3aGljaCB0aWxlcyB0byByZXR1cm4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGEgdGlsZSB3YXMgZm91bmQgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzVGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkhhc1RpbGVBdFdvcmxkWFkod29ybGRYLCB3b3JsZFksIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyBhIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZCBsYXllci4gWW91IGNhbiBwYXNzIGluIGVpdGhlciBhbiBpbmRleFxyXG4gICAgICogb3IgYSBUaWxlIG9iamVjdC4gSWYgeW91IHBhc3MgaW4gYSBUaWxlLCBhbGwgYXR0cmlidXRlcyB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIGxvY2F0aW9uLiBJZiB5b3UgcGFzcyBpbiBhbiBpbmRleCwgb25seSB0aGUgaW5kZXggYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiB3aWxsIGJlIGNoYW5nZWQuXHJcbiAgICAgKiBDb2xsaXNpb24gaW5mb3JtYXRpb24gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3B1dFRpbGVBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuVGlsZSl9IHRpbGUgLSBUaGUgaW5kZXggb2YgdGhpcyB0aWxlIHRvIHNldCBvciBhIFRpbGUgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBBIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdXRUaWxlQXQ6IGZ1bmN0aW9uICh0aWxlLCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLlB1dFRpbGVBdCh0aWxlLCB0aWxlWCwgdGlsZVksIHJlY2FsY3VsYXRlRmFjZXMsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgYSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyAocGl4ZWxzKSBpbiB0aGUgc3BlY2lmaWVkIGxheWVyLiBZb3UgY2FuIHBhc3MgaW4gZWl0aGVyXHJcbiAgICAgKiBhbiBpbmRleCBvciBhIFRpbGUgb2JqZWN0LiBJZiB5b3UgcGFzcyBpbiBhIFRpbGUsIGFsbCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29waWVkIG92ZXIgdG8gdGhlXHJcbiAgICAgKiBzcGVjaWZpZWQgbG9jYXRpb24uIElmIHlvdSBwYXNzIGluIGFuIGluZGV4LCBvbmx5IHRoZSBpbmRleCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpbGwgYmVcclxuICAgICAqIGNoYW5nZWQuIENvbGxpc2lvbiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjcHV0VGlsZUF0V29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxQaGFzZXIuVGlsZW1hcHMuVGlsZSl9IHRpbGUgLSBUaGUgaW5kZXggb2YgdGhpcyB0aWxlIHRvIHNldCBvciBhIFRpbGUgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBBIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdXRUaWxlQXRXb3JsZFhZOiBmdW5jdGlvbiAodGlsZSwgd29ybGRYLCB3b3JsZFksIHJlY2FsY3VsYXRlRmFjZXMsIGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuUHV0VGlsZUF0V29ybGRYWSh0aWxlLCB3b3JsZFgsIHdvcmxkWSwgcmVjYWxjdWxhdGVGYWNlcywgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXRzIGFuIGFycmF5IG9mIHRpbGVzIG9yIGEgMkQgYXJyYXkgb2YgdGlsZXMgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZFxyXG4gICAgICogbGF5ZXIuIFRoZSBhcnJheSBjYW4gYmUgY29tcG9zZWQgb2YgZWl0aGVyIHRpbGUgaW5kZXhlcyBvciBUaWxlIG9iamVjdHMuIElmIHlvdSBwYXNzIGluIGEgVGlsZSxcclxuICAgICAqIGFsbCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29waWVkIG92ZXIgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gSWYgeW91IHBhc3MgaW4gYW4gaW5kZXgsIG9ubHkgdGhlXHJcbiAgICAgKiBpbmRleCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpbGwgYmUgY2hhbmdlZC4gQ29sbGlzaW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVjYWxjdWxhdGVkXHJcbiAgICAgKiB3aXRoaW4gdGhlIHJlZ2lvbiB0aWxlcyB3ZXJlIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNwdXRUaWxlc0F0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyW118aW50ZWdlcltdW118UGhhc2VyLlRpbGVtYXBzLlRpbGVbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZVtdW10pfSB0aWxlIC0gQSByb3cgKGFycmF5KSBvciBncmlkICgyRCBhcnJheSkgb2YgVGlsZXMgb3IgdGlsZSBpbmRleGVzIHRvIHBsYWNlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdXRUaWxlc0F0OiBmdW5jdGlvbiAodGlsZXNBcnJheSwgdGlsZVgsIHRpbGVZLCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlB1dFRpbGVzQXQodGlsZXNBcnJheSwgdGlsZVgsIHRpbGVZLCByZWNhbGN1bGF0ZUZhY2VzLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmFuZG9taXplcyB0aGUgaW5kZXhlcyBvZiBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB0aWxlcyAoaW4gdGlsZSBjb29yZGluYXRlcykgd2l0aGluIHRoZVxyXG4gICAgICogc3BlY2lmaWVkIGxheWVyLiBFYWNoIHRpbGUgd2lsbCByZWNlaXZlIGEgbmV3IGluZGV4LiBJZiBhbiBhcnJheSBvZiBpbmRleGVzIGlzIHBhc3NlZCBpbiwgdGhlblxyXG4gICAgICogdGhvc2Ugd2lsbCBiZSB1c2VkIGZvciByYW5kb21seSBhc3NpZ25pbmcgbmV3IHRpbGUgaW5kZXhlcy4gSWYgYW4gYXJyYXkgaXMgbm90IHByb3ZpZGVkLCB0aGVcclxuICAgICAqIGluZGV4ZXMgZm91bmQgd2l0aGluIHRoZSByZWdpb24gKGV4Y2x1ZGluZyAtMSkgd2lsbCBiZSB1c2VkIGZvciByYW5kb21seSBhc3NpZ25pbmcgbmV3IHRpbGVcclxuICAgICAqIGluZGV4ZXMuIFRoaXMgbWV0aG9kIG9ubHkgbW9kaWZpZXMgdGlsZSBpbmRleGVzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjcmFuZG9taXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyW119IFtpbmRleGVzXSAtIEFuIGFycmF5IG9mIGluZGV4ZXMgdG8gcmFuZG9tbHkgZHJhdyBmcm9tIGR1cmluZyByYW5kb21pemF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByYW5kb21pemU6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGluZGV4ZXMpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuUmFuZG9taXplKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgaW5kZXhlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHRpbGUgYXQgdGhlIGdpdmVuIHRpbGUgY29vcmRpbmF0ZXMgaW4gdGhlIHNwZWNpZmllZCBsYXllciBhbmQgdXBkYXRlcyB0aGUgbGF5ZXInc1xyXG4gICAgICogY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjcmVtb3ZlVGlsZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHkgY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXBsYWNlV2l0aE51bGw9dHJ1ZV0gLSBJZiB0cnVlLCB0aGlzIHdpbGwgcmVwbGFjZSB0aGUgdGlsZSBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpdGggbnVsbCBpbnN0ZWFkIG9mIGEgVGlsZSB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIGB0cnVlYCBpZiB0aGUgZmFjZXMgZGF0YSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBBIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUaWxlQXQ6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHJlcGxhY2VXaXRoTnVsbCwgcmVjYWxjdWxhdGVGYWNlcylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuUmVtb3ZlVGlsZUF0KHRpbGVYLCB0aWxlWSwgcmVwbGFjZVdpdGhOdWxsLCByZWNhbGN1bGF0ZUZhY2VzLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGFuZCB1cGRhdGVzIHRoZSBsYXllcidzXHJcbiAgICAgKiBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNyZW1vdmVUaWxlQXRXb3JsZFhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcGxhY2VXaXRoTnVsbD10cnVlXSAtIElmIHRydWUsIHRoaXMgd2lsbCByZXBsYWNlIHRoZSB0aWxlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gd2l0aCBudWxsIGluc3RlYWQgb2YgYSBUaWxlIHdpdGggYW4gaW5kZXggb2YgLTEuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gYHRydWVgIGlmIHRoZSBmYWNlcyBkYXRhIHNob3VsZCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBBIFRpbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUaWxlQXRXb3JsZFhZOiBmdW5jdGlvbiAod29ybGRYLCB3b3JsZFksIHJlcGxhY2VXaXRoTnVsbCwgcmVjYWxjdWxhdGVGYWNlcywgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5SZW1vdmVUaWxlQXRXb3JsZFhZKHdvcmxkWCwgd29ybGRZLCByZXBsYWNlV2l0aE51bGwsIHJlY2FsY3VsYXRlRmFjZXMsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgYSBkZWJ1ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGF5ZXIgdG8gdGhlIGdpdmVuIEdyYXBoaWNzLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiB5b3Ugd2FudCB0b1xyXG4gICAgICogZ2V0IGEgcXVpY2sgaWRlYSBvZiB3aGljaCBvZiB5b3VyIHRpbGVzIGFyZSBjb2xsaWRpbmcgYW5kIHdoaWNoIGhhdmUgaW50ZXJlc3RpbmcgZmFjZXMuIFRoZSB0aWxlc1xyXG4gICAgICogYXJlIGRyYXduIHN0YXJ0aW5nIGF0ICgwLCAwKSBpbiB0aGUgR3JhcGhpY3MsIGFsbG93aW5nIHlvdSB0byBwbGFjZSB0aGUgZGVidWcgcmVwcmVzZW50YXRpb25cclxuICAgICAqIHdoZXJldmVyIHlvdSB3YW50IG9uIHRoZSBzY3JlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNyZW5kZXJEZWJ1Z1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gVGhlIHRhcmdldCBHcmFwaGljcyBvYmplY3QgdG8gZHJhdyB1cG9uLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuU3R5bGVDb25maWd9IHN0eWxlQ29uZmlnIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGNvbG9ycyB0byB1c2UgZm9yIHRoZSBkZWJ1ZyBkcmF3aW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKGdyYXBoaWNzLCBzdHlsZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5SZW5kZXJEZWJ1ZyhncmFwaGljcywgc3R5bGVDb25maWcsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoZ2l2ZW4gaW4gdGlsZSBjb29yZGluYXRlcykgZm9yIHRpbGVzIHdpdGggYW4gaW5kZXggbWF0Y2hpbmdcclxuICAgICAqIGBmaW5kSW5kZXhgIGFuZCB1cGRhdGVzIHRoZWlyIGluZGV4IHRvIG1hdGNoIGBuZXdJbmRleGAuIFRoaXMgb25seSBtb2RpZmllcyB0aGUgaW5kZXggYW5kIGRvZXNcclxuICAgICAqIG5vdCBjaGFuZ2UgY29sbGlzaW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjcmVwbGFjZUJ5SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gZmluZEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSB0aWxlIHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG5ld0luZGV4IC0gVGhlIGluZGV4IG9mIHRoZSB0aWxlIHRvIHJlcGxhY2UgaXQgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlcGxhY2VCeUluZGV4OiBmdW5jdGlvbiAoZmluZEluZGV4LCBuZXdJbmRleCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlJlcGxhY2VCeUluZGV4KGZpbmRJbmRleCwgbmV3SW5kZXgsIHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFlvdSBjYW4gY29udHJvbCBpZiB0aGUgQ2FtZXJhcyBzaG91bGQgY3VsbCB0aWxlcyBiZWZvcmUgcmVuZGVyaW5nIHRoZW0gb3Igbm90LlxyXG4gICAgICogQnkgZGVmYXVsdCB0aGUgY2FtZXJhIHdpbGwgdHJ5IHRvIGN1bGwgdGhlIHRpbGVzIGluIHRoaXMgbGF5ZXIsIHRvIGF2b2lkIG92ZXItZHJhd2luZyB0byB0aGUgcmVuZGVyZXIuXHJcbiAgICAgKlxyXG4gICAgICogSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgaW5zdGFuY2VzIHdoZW4geW91IG1heSB3aXNoIHRvIGRpc2FibGUgdGhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3NldFNraXBDdWxsXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBTZXQgdG8gYHRydWVgIHRvIHN0b3AgY3VsbGluZyB0aWxlcy4gU2V0IHRvIGBmYWxzZWAgdG8gZW5hYmxlIGN1bGxpbmcgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2tpcEN1bGw6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5za2lwQ3VsbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIGEgQ2FtZXJhIGN1bGxzIHRoZSB0aWxlcyBpbiB0aGlzIGxheWVyIGl0IGRvZXMgc28gdXNpbmcgaXRzIHZpZXcgaW50byB0aGUgd29ybGQsIGJ1aWxkaW5nIHVwIGFcclxuICAgICAqIHJlY3RhbmdsZSBpbnNpZGUgd2hpY2ggdGhlIHRpbGVzIG11c3QgZXhpc3Qgb3IgdGhleSB3aWxsIGJlIGN1bGxlZC4gU29tZXRpbWVzIHlvdSBtYXkgbmVlZCB0byBleHBhbmQgdGhlIHNpemVcclxuICAgICAqIG9mIHRoaXMgJ2N1bGwgcmVjdGFuZ2xlJywgZXNwZWNpYWxseSBpZiB5b3UgcGxhbiBvbiByb3RhdGluZyB0aGUgQ2FtZXJhIHZpZXdpbmcgdGhlIGxheWVyLiBEbyBzb1xyXG4gICAgICogYnkgcHJvdmlkaW5nIHRoZSBwYWRkaW5nIHZhbHVlcy4gVGhlIHZhbHVlcyBnaXZlbiBhcmUgaW4gdGlsZXMsIG5vdCBwaXhlbHMuIFNvIGlmIHRoZSB0aWxlIHdpZHRoIHdhcyAzMnB4XHJcbiAgICAgKiBhbmQgeW91IHNldCBgcGFkZGluZ1hgIHRvIGJlIDQsIGl0IHdvdWxkIGFkZCAzMnB4IHggNCB0byB0aGUgY3VsbCByZWN0YW5nbGUgKGFkanVzdGVkIGZvciBzY2FsZSlcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3NldEN1bGxQYWRkaW5nXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcGFkZGluZ1g9MV0gLSBUaGUgYW1vdW50IG9mIGV4dHJhIGhvcml6b250YWwgdGlsZXMgdG8gYWRkIHRvIHRoZSBjdWxsIGNoZWNrIHBhZGRpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtwYWRkaW5nWT0xXSAtIFRoZSBhbW91bnQgb2YgZXh0cmEgdmVydGljYWwgdGlsZXMgdG8gYWRkIHRvIHRoZSBjdWxsIGNoZWNrIHBhZGRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q3VsbFBhZGRpbmc6IGZ1bmN0aW9uIChwYWRkaW5nWCwgcGFkZGluZ1kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBhZGRpbmdYID09PSB1bmRlZmluZWQpIHsgcGFkZGluZ1ggPSAxOyB9XHJcbiAgICAgICAgaWYgKHBhZGRpbmdZID09PSB1bmRlZmluZWQpIHsgcGFkZGluZ1kgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VsbFBhZGRpbmdYID0gcGFkZGluZ1g7XHJcbiAgICAgICAgdGhpcy5jdWxsUGFkZGluZ1kgPSBwYWRkaW5nWTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gdGhlIGdpdmVuIHRpbGUgb3IgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgaW5kZXguIFlvdSBjYW4gcGFzcyBpbiBlaXRoZXIgYVxyXG4gICAgICogc2luZ2xlIG51bWVyaWMgaW5kZXggb3IgYW4gYXJyYXkgb2YgaW5kZXhlczogWzIsIDMsIDE1LCAyMF0uIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlciBjb250cm9scyBpZlxyXG4gICAgICogY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBsYXllciBzcGVjaWZpZWQsIHRoZSBtYXAncyBjdXJyZW50IGxheWVyIGlzIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNzZXRDb2xsaXNpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gRWl0aGVyIGEgc2luZ2xlIHRpbGUgaW5kZXgsIG9yIGFuIGFycmF5IG9mIHRpbGUgaW5kZXhlcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVMYXllcj10cnVlXSAtIElmIHRydWUsIHVwZGF0ZXMgdGhlIGN1cnJlbnQgdGlsZXMgb24gdGhlIGxheWVyLiBTZXQgdG9cclxuICAgICAqIGZhbHNlIGlmIG5vIHRpbGVzIGhhdmUgYmVlbiBwbGFjZWQgZm9yIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuVGlsZW1hcH0gUmV0dXJuIHRoaXMgVGlsZW1hcCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIGxheWVyIGdpdmVuIHdhcyBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb246IGZ1bmN0aW9uIChpbmRleGVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgdXBkYXRlTGF5ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCB0aGlzLmxheWVyLCB1cGRhdGVMYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgY29sbGlzaW9uIG9uIGEgcmFuZ2Ugb2YgdGlsZXMgaW4gYSBsYXllciB3aG9zZSBpbmRleCBpcyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgYHN0YXJ0YCBhbmRcclxuICAgICAqIGBzdG9wYCAoaW5jbHVzaXZlKS4gQ2FsbGluZyB0aGlzIHdpdGggYSBzdGFydCB2YWx1ZSBvZiAxMCBhbmQgYSBzdG9wIHZhbHVlIG9mIDE0IHdvdWxkIHNldFxyXG4gICAgICogY29sbGlzaW9uIGZvciB0aWxlcyAxMCwgMTEsIDEyLCAxMyBhbmQgMTQuIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlciBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZVxyXG4gICAgICogZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3NldENvbGxpc2lvbkJldHdlZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnQgLSBUaGUgZmlyc3QgaW5kZXggb2YgdGhlIHRpbGUgdG8gYmUgc2V0IGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHN0b3AgLSBUaGUgbGFzdCBpbmRleCBvZiB0aGUgdGlsZSB0byBiZSBzZXQgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXIgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZSB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkJldHdlZW46IGZ1bmN0aW9uIChzdGFydCwgc3RvcCwgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uQmV0d2VlbihzdGFydCwgc3RvcCwgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbGxpc2lvbiBvbiB0aGUgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgY2hlY2tpbmcgdGlsZSBwcm9wZXJ0aWVzLiBJZiBhIHRpbGUgaGFzIGEgcHJvcGVydHlcclxuICAgICAqIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyBvYmplY3QsIGl0cyBjb2xsaXNpb24gZmxhZyB3aWxsIGJlIHNldC4gVGhlIGBjb2xsaWRlc2BcclxuICAgICAqIHBhcmFtZXRlciBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZSBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLiBQYXNzaW5nIGluXHJcbiAgICAgKiBgeyBjb2xsaWRlczogdHJ1ZSB9YCB3b3VsZCB1cGRhdGUgdGhlIGNvbGxpc2lvbiBmbGFnIG9uIGFueSB0aWxlcyB3aXRoIGEgXCJjb2xsaWRlc1wiIHByb3BlcnR5IHRoYXRcclxuICAgICAqIGhhcyBhIHZhbHVlIG9mIHRydWUuIEFueSB0aWxlIHRoYXQgZG9lc24ndCBoYXZlIFwiY29sbGlkZXNcIiBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGlnbm9yZWQuIFlvdSBjYW5cclxuICAgICAqIGFsc28gdXNlIGFuIGFycmF5IG9mIHZhbHVlcywgZS5nLiBgeyB0eXBlczogW1wic3RvbmVcIiwgXCJsYXZhXCIsIFwic2FuZFwiIF0gfWAuIElmIGEgdGlsZSBoYXMgYVxyXG4gICAgICogXCJ0eXBlc1wiIHByb3BlcnR5IHRoYXQgbWF0Y2hlcyBhbnkgb2YgdGhvc2UgdmFsdWVzLCBpdHMgY29sbGlzaW9uIGZsYWcgd2lsbCBiZSB1cGRhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjc2V0Q29sbGlzaW9uQnlQcm9wZXJ0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHByb3BlcnRpZXMgLSBBbiBvYmplY3Qgd2l0aCB0aWxlIHByb3BlcnRpZXMgYW5kIGNvcnJlc3BvbmRpbmcgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25CeVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydGllcywgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uQnlQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgY29sbGlzaW9uIG9uIGFsbCB0aWxlcyBpbiB0aGUgZ2l2ZW4gbGF5ZXIsIGV4Y2VwdCBmb3IgdGlsZXMgdGhhdCBoYXZlIGFuIGluZGV4IHNwZWNpZmllZCBpblxyXG4gICAgICogdGhlIGdpdmVuIGFycmF5LiBUaGUgYGNvbGxpZGVzYCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3JcclxuICAgICAqIGRpc2FibGVkIChmYWxzZSkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNzZXRDb2xsaXNpb25CeUV4Y2x1c2lvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyW119IGluZGV4ZXMgLSBBbiBhcnJheSBvZiB0aGUgdGlsZSBpbmRleGVzIHRvIG5vdCBiZSBjb3VudGVkIGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25CeUV4Y2x1c2lvbjogZnVuY3Rpb24gKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlNldENvbGxpc2lvbkJ5RXhjbHVzaW9uKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gdGhlIHRpbGVzIHdpdGhpbiBhIGxheWVyIGJ5IGNoZWNraW5nIGVhY2ggdGlsZXMgY29sbGlzaW9uIGdyb3VwIGRhdGFcclxuICAgICAqICh0eXBpY2FsbHkgZGVmaW5lZCBpbiBUaWxlZCB3aXRoaW4gdGhlIHRpbGVzZXQgY29sbGlzaW9uIGVkaXRvcikuIElmIGFueSBvYmplY3RzIGFyZSBmb3VuZCB3aXRoaW5cclxuICAgICAqIGEgdGlsZXMgY29sbGlzaW9uIGdyb3VwLCB0aGUgdGlsZSdzIGNvbGxpZGluZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHNldC4gVGhlIGBjb2xsaWRlc2AgcGFyYW1ldGVyXHJcbiAgICAgKiBjb250cm9scyBpZiBjb2xsaXNpb24gd2lsbCBiZSBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjc2V0Q29sbGlzaW9uRnJvbUNvbGxpc2lvbkdyb3VwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGUgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXA6IGZ1bmN0aW9uIChjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRDb2xsaXNpb25Gcm9tQ29sbGlzaW9uR3JvdXAoY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgZ2xvYmFsIGNvbGxpc2lvbiBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHRpbGUgaW5kZXggd2l0aGluIHRoZSBsYXllci4gVGhpcyB3aWxsIGFmZmVjdCBhbGxcclxuICAgICAqIHRpbGVzIG9uIHRoaXMgbGF5ZXIgdGhhdCBoYXZlIHRoZSBzYW1lIGluZGV4LiBJZiBhIGNhbGxiYWNrIGlzIGFscmVhZHkgc2V0IGZvciB0aGUgdGlsZSBpbmRleCBpdFxyXG4gICAgICogd2lsbCBiZSByZXBsYWNlZC4gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHRvIHJlbW92ZSBpdC4gSWYgeW91IHdhbnQgdG8gc2V0IGEgY2FsbGJhY2sgZm9yIGEgdGlsZVxyXG4gICAgICogYXQgYSBzcGVjaWZpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIHRoZW4gc2VlIHNldFRpbGVMb2NhdGlvbkNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjc2V0VGlsZUluZGV4Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8aW50ZWdlcltdKX0gaW5kZXhlcyAtIEVpdGhlciBhIHNpbmdsZSB0aWxlIGluZGV4LCBvciBhbiBhcnJheSBvZiB0aWxlIGluZGV4ZXMgdG8gaGF2ZSBhIGNvbGxpc2lvbiBjYWxsYmFjayBzZXQgZm9yLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdGlsZSBpcyBjb2xsaWRlZCB3aXRoLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNhbGxiYWNrQ29udGV4dCAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbGVJbmRleENhbGxiYWNrOiBmdW5jdGlvbiAoaW5kZXhlcywgY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRUaWxlSW5kZXhDYWxsYmFjayhpbmRleGVzLCBjYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGNvbGxpc2lvbiBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGUgbGF5ZXIuXHJcbiAgICAgKiBJZiBhIGNhbGxiYWNrIGlzIGFscmVhZHkgc2V0IGZvciB0aGUgdGlsZSBpbmRleCBpdCB3aWxsIGJlIHJlcGxhY2VkLiBTZXQgdGhlIGNhbGxiYWNrIHRvIG51bGwgdG9cclxuICAgICAqIHJlbW92ZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3NldFRpbGVMb2NhdGlvbkNhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSAtIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSB0aWxlIGlzIGNvbGxpZGVkIHdpdGguXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrQ29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUaWxlTG9jYXRpb25DYWxsYmFjazogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dClcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRUaWxlTG9jYXRpb25DYWxsYmFjayh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHVmZmxlcyB0aGUgdGlsZXMgaW4gYSByZWN0YW5ndWxhciByZWdpb24gKHNwZWNpZmllZCBpbiB0aWxlIGNvb3JkaW5hdGVzKSB3aXRoaW4gdGhlIGdpdmVuXHJcbiAgICAgKiBsYXllci4gSXQgd2lsbCBvbmx5IHJhbmRvbWl6ZSB0aGUgdGlsZXMgaW4gdGhhdCBhcmVhLCBzbyBpZiB0aGV5J3JlIGFsbCB0aGUgc2FtZSBub3RoaW5nIHdpbGxcclxuICAgICAqIGFwcGVhciB0byBoYXZlIGNoYW5nZWQhIFRoaXMgbWV0aG9kIG9ubHkgbW9kaWZpZXMgdGlsZSBpbmRleGVzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgY29sbGlzaW9uXHJcbiAgICAgKiBpbmZvcm1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3NodWZmbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnQgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNodWZmbGU6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2h1ZmZsZSh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSAoZ2l2ZW4gaW4gdGlsZSBjb29yZGluYXRlcykgZm9yIHRpbGVzIHdpdGggYW4gaW5kZXggbWF0Y2hpbmdcclxuICAgICAqIGBpbmRleEFgIGFuZCBzd2FwcyB0aGVuIHdpdGggYGluZGV4QmAuIFRoaXMgb25seSBtb2RpZmllcyB0aGUgaW5kZXggYW5kIGRvZXMgbm90IGNoYW5nZSBjb2xsaXNpb25cclxuICAgICAqIGluZm9ybWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjc3dhcEJ5SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUEgLSBGaXJzdCB0aWxlIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlQiAtIFNlY29uZCB0aWxlIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3dhcEJ5SW5kZXg6IGZ1bmN0aW9uIChpbmRleEEsIGluZGV4QiwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlN3YXBCeUluZGV4KGluZGV4QSwgaW5kZXhCLCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHRpbGUgWCBjb29yZGluYXRlcyAodGlsZSB1bml0cykgdG8gd29ybGQgWCBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjdGlsZVRvV29ybGRYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIHggY29vcmRpbmF0ZSwgaW4gdGlsZXMsIG5vdCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGlsZVRvV29ybGRYOiBmdW5jdGlvbiAodGlsZVgsIGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuVGlsZVRvV29ybGRYKHRpbGVYLCBjYW1lcmEsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIGZyb20gdGlsZSBZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBZIGNvb3JkaW5hdGVzIChwaXhlbHMpLCBmYWN0b3JpbmcgaW4gdGhlXHJcbiAgICAgKiBsYXllcnMgcG9zaXRpb24sIHNjYWxlIGFuZCBzY3JvbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN0aWxlVG9Xb3JsZFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgeSBjb29yZGluYXRlLCBpbiB0aWxlcywgbm90IHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aWxlVG9Xb3JsZFk6IGZ1bmN0aW9uICh0aWxlWSwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5UaWxlVG9Xb3JsZFkodGlsZVksIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFhZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBYWSBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLiBUaGlzIHdpbGwgcmV0dXJuIGEgbmV3IFZlY3RvcjIgb2JqZWN0IG9yIHVwZGF0ZSB0aGUgZ2l2ZW5cclxuICAgICAqIGBwb2ludGAgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjdGlsZVRvV29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB5IGNvb3JkaW5hdGUsIGluIHRpbGVzLCBub3QgcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlY3RvcjIgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGlsZVRvV29ybGRYWTogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSwgcG9pbnQsIGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuVGlsZVRvV29ybGRYWSh0aWxlWCwgdGlsZVksIHBvaW50LCBjYW1lcmEsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJhbmRvbWl6ZXMgdGhlIGluZGV4ZXMgb2YgYSByZWN0YW5ndWxhciByZWdpb24gb2YgdGlsZXMgKGluIHRpbGUgY29vcmRpbmF0ZXMpIHdpdGhpbiB0aGVcclxuICAgICAqIHNwZWNpZmllZCBsYXllci4gRWFjaCB0aWxlIHdpbGwgcmVjZWl2ZSBhIG5ldyBpbmRleC4gTmV3IGluZGV4ZXMgYXJlIGRyYXduIGZyb20gdGhlIGdpdmVuXHJcbiAgICAgKiB3ZWlnaHRlZEluZGV4ZXMgYXJyYXkuIEFuIGV4YW1wbGUgd2VpZ2h0ZWQgYXJyYXk6XHJcbiAgICAgKlxyXG4gICAgICogW1xyXG4gICAgICogIHsgaW5kZXg6IDYsIHdlaWdodDogNCB9LCAgICAvLyBQcm9iYWJpbGl0eSBvZiBpbmRleCA2IGlzIDQgLyA4XHJcbiAgICAgKiAgeyBpbmRleDogNywgd2VpZ2h0OiAyIH0sICAgIC8vIFByb2JhYmlsaXR5IG9mIGluZGV4IDcgd291bGQgYmUgMiAvIDhcclxuICAgICAqICB7IGluZGV4OiA4LCB3ZWlnaHQ6IDEuNSB9LCAgLy8gUHJvYmFiaWxpdHkgb2YgaW5kZXggOCB3b3VsZCBiZSAxLjUgLyA4XHJcbiAgICAgKiAgeyBpbmRleDogMjYsIHdlaWdodDogMC41IH0gIC8vIFByb2JhYmlsaXR5IG9mIGluZGV4IDI3IHdvdWxkIGJlIDAuNSAvIDhcclxuICAgICAqIF1cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvYmFiaWxpdHkgb2YgYW55IGluZGV4IGJlaW5nIGNob29zZSBpcyAodGhlIGluZGV4J3Mgd2VpZ2h0KSAvIChzdW0gb2YgYWxsIHdlaWdodHMpLiBUaGlzXHJcbiAgICAgKiBtZXRob2Qgb25seSBtb2RpZmllcyB0aWxlIGluZGV4ZXMgYW5kIGRvZXMgbm90IGNoYW5nZSBjb2xsaXNpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN3ZWlnaHRlZFJhbmRvbWl6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wIG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aD1tYXggd2lkdGggYmFzZWQgb24gdGlsZVhdIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHQ9bWF4IGhlaWdodCBiYXNlZCBvbiB0aWxlWV0gLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0W119IFt3ZWlnaHRlZEluZGV4ZXNdIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB0byByYW5kb21seSBkcmF3IGZyb20gZHVyaW5nXHJcbiAgICAgKiByYW5kb21pemF0aW9uLiBUaGV5IHNob3VsZCBiZSBpbiB0aGUgZm9ybTogeyBpbmRleDogMCwgd2VpZ2h0OiA0IH0gb3JcclxuICAgICAqIHsgaW5kZXg6IFswLCAxXSwgd2VpZ2h0OiA0IH0gaWYgeW91IHdpc2ggdG8gZHJhdyBmcm9tIG11bHRpcGxlIHRpbGUgaW5kZXhlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgd2VpZ2h0ZWRSYW5kb21pemU6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIHdlaWdodGVkSW5kZXhlcylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5XZWlnaHRlZFJhbmRvbWl6ZSh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIHdlaWdodGVkSW5kZXhlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIGZyb20gd29ybGQgWCBjb29yZGluYXRlcyAocGl4ZWxzKSB0byB0aWxlIFggY29vcmRpbmF0ZXMgKHRpbGUgdW5pdHMpLCBmYWN0b3JpbmcgaW4gdGhlXHJcbiAgICAgKiBsYXllcnMgcG9zaXRpb24sIHNjYWxlIGFuZCBzY3JvbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN3b3JsZFRvVGlsZVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgeCBjb29yZGluYXRlIHRvIGJlIGNvbnZlcnRlZCwgaW4gcGl4ZWxzLCBub3QgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9GbG9vcj10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJvdW5kIHRoZSB0aWxlIGNvb3JkaW5hdGUgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdvcmxkVG9UaWxlWDogZnVuY3Rpb24gKHdvcmxkWCwgc25hcFRvRmxvb3IsIGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuV29ybGRUb1RpbGVYKHdvcmxkWCwgc25hcFRvRmxvb3IsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB3b3JsZCBZIGNvb3JkaW5hdGVzIChwaXhlbHMpIHRvIHRpbGUgWSBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyI3dvcmxkVG9UaWxlWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0Zsb29yPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcm91bmQgdGhlIHRpbGUgY29vcmRpbmF0ZSBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd29ybGRUb1RpbGVZOiBmdW5jdGlvbiAod29ybGRZLCBzbmFwVG9GbG9vciwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5Xb3JsZFRvVGlsZVkod29ybGRZLCBzbmFwVG9GbG9vciwgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHdvcmxkIFhZIGNvb3JkaW5hdGVzIChwaXhlbHMpIHRvIHRpbGUgWFkgY29vcmRpbmF0ZXMgKHRpbGUgdW5pdHMpLCBmYWN0b3JpbmcgaW4gdGhlXHJcbiAgICAgKiBsYXllcnMgcG9zaXRpb24sIHNjYWxlIGFuZCBzY3JvbGwuIFRoaXMgd2lsbCByZXR1cm4gYSBuZXcgVmVjdG9yMiBvYmplY3Qgb3IgdXBkYXRlIHRoZSBnaXZlblxyXG4gICAgICogYHBvaW50YCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciN3b3JsZFRvVGlsZVhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRYIC0gVGhlIHggY29vcmRpbmF0ZSB0byBiZSBjb252ZXJ0ZWQsIGluIHBpeGVscywgbm90IHRpbGVzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gYmUgY29udmVydGVkLCBpbiBwaXhlbHMsIG5vdCB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0Zsb29yPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcm91bmQgdGhlIHRpbGUgY29vcmRpbmF0ZSBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtwb2ludF0gLSBBIFZlY3RvcjIgdG8gc3RvcmUgdGhlIGNvb3JkaW5hdGVzIGluLiBJZiBub3QgZ2l2ZW4gYSBuZXcgVmVjdG9yMiBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRvVGlsZVhZOiBmdW5jdGlvbiAod29ybGRYLCB3b3JsZFksIHNuYXBUb0Zsb29yLCBwb2ludCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5Xb3JsZFRvVGlsZVhZKHdvcmxkWCwgd29ybGRZLCBzbmFwVG9GbG9vciwgcG9pbnQsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRHluYW1pY1RpbGVtYXBMYXllcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerCanvasRenderer.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerCanvasRenderer.js ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.Tilemaps.DynamicTilemapLayer#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.Tilemaps.DynamicTilemapLayer} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DynamicTilemapLayerCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    src.cull(camera);\r\n\r\n    var renderTiles = src.culledTiles;\r\n    var tileCount = renderTiles.length;\r\n\r\n    if (tileCount === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var camMatrix = renderer._tempMatrix1;\r\n    var layerMatrix = renderer._tempMatrix2;\r\n    var calcMatrix = renderer._tempMatrix3;\r\n\r\n    layerMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    var ctx = renderer.currentContext;\r\n    var gidMap = src.gidMap;\r\n\r\n    ctx.save();\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        layerMatrix.e = src.x;\r\n        layerMatrix.f = src.y;\r\n\r\n        //  Multiply by the Sprite matrix, store result in calcMatrix\r\n        camMatrix.multiply(layerMatrix, calcMatrix);\r\n\r\n        calcMatrix.copyToContext(ctx);\r\n    }\r\n    else\r\n    {\r\n        layerMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        layerMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        layerMatrix.copyToContext(ctx);\r\n    }\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (!renderer.antialias || src.scaleX > 1 || src.scaleY > 1)\r\n    {\r\n        ctx.imageSmoothingEnabled = false;\r\n    }\r\n\r\n    for (var i = 0; i < tileCount; i++)\r\n    {\r\n        var tile = renderTiles[i];\r\n\r\n        var tileset = gidMap[tile.index];\r\n\r\n        if (!tileset)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var image = tileset.image.getSourceImage();\r\n        var tileTexCoords = tileset.getTileTextureCoordinates(tile.index);\r\n\r\n        if (tileTexCoords)\r\n        {\r\n            var halfWidth = tile.width / 2;\r\n            var halfHeight = tile.height / 2;\r\n    \r\n            ctx.save();\r\n\r\n            ctx.translate(tile.pixelX + halfWidth, tile.pixelY + halfHeight);\r\n    \r\n            if (tile.rotation !== 0)\r\n            {\r\n                ctx.rotate(tile.rotation);\r\n            }\r\n    \r\n            if (tile.flipX || tile.flipY)\r\n            {\r\n                ctx.scale((tile.flipX) ? -1 : 1, (tile.flipY) ? -1 : 1);\r\n            }\r\n    \r\n            ctx.globalAlpha = alpha * tile.alpha;\r\n    \r\n            ctx.drawImage(\r\n                image,\r\n                tileTexCoords.x, tileTexCoords.y,\r\n                tile.width, tile.height,\r\n                -halfWidth, -halfHeight,\r\n                tile.width, tile.height\r\n            );\r\n    \r\n            ctx.restore();\r\n        }\r\n    }\r\n\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = DynamicTilemapLayerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9keW5hbWljbGF5ZXIvRHluYW1pY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyLmpzPzE4ZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixlQUFlO0FBQ2xDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2R5bmFtaWNsYXllci9EeW5hbWljVGlsZW1hcExheWVyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuRHluYW1pY1RpbGVtYXBMYXllciNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRHluYW1pY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgc3JjLmN1bGwoY2FtZXJhKTtcclxuXHJcbiAgICB2YXIgcmVuZGVyVGlsZXMgPSBzcmMuY3VsbGVkVGlsZXM7XHJcbiAgICB2YXIgdGlsZUNvdW50ID0gcmVuZGVyVGlsZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmICh0aWxlQ291bnQgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgbGF5ZXJNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBsYXllck1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcbiAgICB2YXIgZ2lkTWFwID0gc3JjLmdpZE1hcDtcclxuXHJcbiAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBsYXllck1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgbGF5ZXJNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KGxheWVyTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICAgICAgY2FsY01hdHJpeC5jb3B5VG9Db250ZXh0KGN0eCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbGF5ZXJNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIGxheWVyTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgbGF5ZXJNYXRyaXguY29weVRvQ29udGV4dChjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoIXJlbmRlcmVyLmFudGlhbGlhcyB8fCBzcmMuc2NhbGVYID4gMSB8fCBzcmMuc2NhbGVZID4gMSlcclxuICAgIHtcclxuICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlQ291bnQ7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdGlsZSA9IHJlbmRlclRpbGVzW2ldO1xyXG5cclxuICAgICAgICB2YXIgdGlsZXNldCA9IGdpZE1hcFt0aWxlLmluZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKCF0aWxlc2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW1hZ2UgPSB0aWxlc2V0LmltYWdlLmdldFNvdXJjZUltYWdlKCk7XHJcbiAgICAgICAgdmFyIHRpbGVUZXhDb29yZHMgPSB0aWxlc2V0LmdldFRpbGVUZXh0dXJlQ29vcmRpbmF0ZXModGlsZS5pbmRleCk7XHJcblxyXG4gICAgICAgIGlmICh0aWxlVGV4Q29vcmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZXaWR0aCA9IHRpbGUud2lkdGggLyAyO1xyXG4gICAgICAgICAgICB2YXIgaGFsZkhlaWdodCA9IHRpbGUuaGVpZ2h0IC8gMjtcclxuICAgIFxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aWxlLnBpeGVsWCArIGhhbGZXaWR0aCwgdGlsZS5waXhlbFkgKyBoYWxmSGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAodGlsZS5yb3RhdGlvbiAhPT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3R4LnJvdGF0ZSh0aWxlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICh0aWxlLmZsaXBYIHx8IHRpbGUuZmxpcFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5zY2FsZSgodGlsZS5mbGlwWCkgPyAtMSA6IDEsICh0aWxlLmZsaXBZKSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBhbHBoYSAqIHRpbGUuYWxwaGE7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShcclxuICAgICAgICAgICAgICAgIGltYWdlLFxyXG4gICAgICAgICAgICAgICAgdGlsZVRleENvb3Jkcy54LCB0aWxlVGV4Q29vcmRzLnksXHJcbiAgICAgICAgICAgICAgICB0aWxlLndpZHRoLCB0aWxlLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIC1oYWxmV2lkdGgsIC1oYWxmSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgdGlsZS53aWR0aCwgdGlsZS5oZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgIFxyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljVGlsZW1hcExheWVyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerRender.js":
/*!************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerRender.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./DynamicTilemapLayerWebGLRenderer */ \"./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./DynamicTilemapLayerCanvasRenderer */ \"./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9keW5hbWljbGF5ZXIvRHluYW1pY1RpbGVtYXBMYXllclJlbmRlci5qcz8wM2Q2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsK0hBQW9DO0FBQzlEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpSUFBcUM7QUFDaEU7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2R5bmFtaWNsYXllci9EeW5hbWljVGlsZW1hcExheWVyUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vRHluYW1pY1RpbGVtYXBMYXllcldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRHluYW1pY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIHJlbmRlcldlYkdMOiByZW5kZXJXZWJHTCxcclxuICAgIHJlbmRlckNhbnZhczogcmVuZGVyQ2FudmFzXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerWebGLRenderer.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerWebGLRenderer.js ***!
  \*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.Tilemaps.DynamicTilemapLayer#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.Tilemaps.DynamicTilemapLayer} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar DynamicTilemapLayerWebGLRenderer = function (renderer, src, interpolationPercentage, camera)\r\n{\r\n    src.cull(camera);\r\n\r\n    var renderTiles = src.culledTiles;\r\n    var tileCount = renderTiles.length;\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (tileCount === 0 || alpha <= 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var gidMap = src.gidMap;\r\n    var pipeline = src.pipeline;\r\n\r\n    var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n    var scrollFactorX = src.scrollFactorX;\r\n    var scrollFactorY = src.scrollFactorY;\r\n\r\n    var x = src.x;\r\n    var y = src.y;\r\n\r\n    var sx = src.scaleX;\r\n    var sy = src.scaleY;\r\n\r\n    var tilesets = src.tileset;\r\n\r\n    //  Loop through each tileset in this layer, drawing just the tiles that are in that set each time\r\n    //  Doing it this way around allows us to batch tiles using the same tileset\r\n    for (var c = 0; c < tilesets.length; c++)\r\n    {\r\n        var currentSet = tilesets[c];\r\n        var texture = currentSet.glTexture;\r\n\r\n        for (var i = 0; i < tileCount; i++)\r\n        {\r\n            var tile = renderTiles[i];\r\n\r\n            var tileset = gidMap[tile.index];\r\n\r\n            if (tileset !== currentSet)\r\n            {\r\n                //  Skip tiles that aren't in this set\r\n                continue;\r\n            }\r\n       \r\n            var tileTexCoords = tileset.getTileTextureCoordinates(tile.index);\r\n\r\n            if (tileTexCoords === null)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var frameWidth = tile.width;\r\n            var frameHeight = tile.height;\r\n\r\n            var frameX = tileTexCoords.x;\r\n            var frameY = tileTexCoords.y;\r\n\r\n            var tw = tile.width * 0.5;\r\n            var th = tile.height * 0.5;\r\n\r\n            var tint = getTint(tile.tint, alpha * tile.alpha);\r\n\r\n            pipeline.batchTexture(\r\n                src,\r\n                texture,\r\n                texture.width, texture.height,\r\n                x + ((tw + tile.pixelX) * sx), y + ((th + tile.pixelY) * sy),\r\n                tile.width, tile.height,\r\n                sx, sy,\r\n                tile.rotation,\r\n                tile.flipX, tile.flipY,\r\n                scrollFactorX, scrollFactorY,\r\n                tw, th,\r\n                frameX, frameY, frameWidth, frameHeight,\r\n                tint, tint, tint, tint, false,\r\n                0, 0,\r\n                camera,\r\n                null,\r\n                true\r\n            );\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = DynamicTilemapLayerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9keW5hbWljbGF5ZXIvRHluYW1pY1RpbGVtYXBMYXllcldlYkdMUmVuZGVyZXIuanM/ZTI4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZUFBZTtBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvZHluYW1pY2xheWVyL0R5bmFtaWNUaWxlbWFwTGF5ZXJXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXIjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5EeW5hbWljVGlsZW1hcExheWVyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgRHluYW1pY1RpbGVtYXBMYXllcldlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSlcclxue1xyXG4gICAgc3JjLmN1bGwoY2FtZXJhKTtcclxuXHJcbiAgICB2YXIgcmVuZGVyVGlsZXMgPSBzcmMuY3VsbGVkVGlsZXM7XHJcbiAgICB2YXIgdGlsZUNvdW50ID0gcmVuZGVyVGlsZXMubGVuZ3RoO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmICh0aWxlQ291bnQgPT09IDAgfHwgYWxwaGEgPD0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGdpZE1hcCA9IHNyYy5naWRNYXA7XHJcbiAgICB2YXIgcGlwZWxpbmUgPSBzcmMucGlwZWxpbmU7XHJcblxyXG4gICAgdmFyIGdldFRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYTtcclxuXHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIHNjcm9sbEZhY3RvclkgPSBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICB2YXIgeCA9IHNyYy54O1xyXG4gICAgdmFyIHkgPSBzcmMueTtcclxuXHJcbiAgICB2YXIgc3ggPSBzcmMuc2NhbGVYO1xyXG4gICAgdmFyIHN5ID0gc3JjLnNjYWxlWTtcclxuXHJcbiAgICB2YXIgdGlsZXNldHMgPSBzcmMudGlsZXNldDtcclxuXHJcbiAgICAvLyAgTG9vcCB0aHJvdWdoIGVhY2ggdGlsZXNldCBpbiB0aGlzIGxheWVyLCBkcmF3aW5nIGp1c3QgdGhlIHRpbGVzIHRoYXQgYXJlIGluIHRoYXQgc2V0IGVhY2ggdGltZVxyXG4gICAgLy8gIERvaW5nIGl0IHRoaXMgd2F5IGFyb3VuZCBhbGxvd3MgdXMgdG8gYmF0Y2ggdGlsZXMgdXNpbmcgdGhlIHNhbWUgdGlsZXNldFxyXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aWxlc2V0cy5sZW5ndGg7IGMrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudFNldCA9IHRpbGVzZXRzW2NdO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gY3VycmVudFNldC5nbFRleHR1cmU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZUNvdW50OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZSA9IHJlbmRlclRpbGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRpbGVzZXQgPSBnaWRNYXBbdGlsZS5pbmRleF07XHJcblxyXG4gICAgICAgICAgICBpZiAodGlsZXNldCAhPT0gY3VycmVudFNldClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFNraXAgdGlsZXMgdGhhdCBhcmVuJ3QgaW4gdGhpcyBzZXRcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICAgICAgdmFyIHRpbGVUZXhDb29yZHMgPSB0aWxlc2V0LmdldFRpbGVUZXh0dXJlQ29vcmRpbmF0ZXModGlsZS5pbmRleCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGlsZVRleENvb3JkcyA9PT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZVdpZHRoID0gdGlsZS53aWR0aDtcclxuICAgICAgICAgICAgdmFyIGZyYW1lSGVpZ2h0ID0gdGlsZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWVYID0gdGlsZVRleENvb3Jkcy54O1xyXG4gICAgICAgICAgICB2YXIgZnJhbWVZID0gdGlsZVRleENvb3Jkcy55O1xyXG5cclxuICAgICAgICAgICAgdmFyIHR3ID0gdGlsZS53aWR0aCAqIDAuNTtcclxuICAgICAgICAgICAgdmFyIHRoID0gdGlsZS5oZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGludCA9IGdldFRpbnQodGlsZS50aW50LCBhbHBoYSAqIHRpbGUuYWxwaGEpO1xyXG5cclxuICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgc3JjLFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSxcclxuICAgICAgICAgICAgICAgIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgeCArICgodHcgKyB0aWxlLnBpeGVsWCkgKiBzeCksIHkgKyAoKHRoICsgdGlsZS5waXhlbFkpICogc3kpLFxyXG4gICAgICAgICAgICAgICAgdGlsZS53aWR0aCwgdGlsZS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBzeCwgc3ksXHJcbiAgICAgICAgICAgICAgICB0aWxlLnJvdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGlsZS5mbGlwWCwgdGlsZS5mbGlwWSxcclxuICAgICAgICAgICAgICAgIHNjcm9sbEZhY3RvclgsIHNjcm9sbEZhY3RvclksXHJcbiAgICAgICAgICAgICAgICB0dywgdGgsXHJcbiAgICAgICAgICAgICAgICBmcmFtZVgsIGZyYW1lWSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB0aW50LCB0aW50LCB0aW50LCB0aW50LCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIDAsIDAsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRHluYW1pY1RpbGVtYXBMYXllcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayerWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/index.js":
/*!***************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Components: __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/tilemaps/components/index.js\"),\r\n    Parsers: __webpack_require__(/*! ./parsers */ \"./node_modules/phaser/src/tilemaps/parsers/index.js\"),\r\n\r\n    Formats: __webpack_require__(/*! ./Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\"),\r\n    ImageCollection: __webpack_require__(/*! ./ImageCollection */ \"./node_modules/phaser/src/tilemaps/ImageCollection.js\"),\r\n    ParseToTilemap: __webpack_require__(/*! ./ParseToTilemap */ \"./node_modules/phaser/src/tilemaps/ParseToTilemap.js\"),\r\n    Tile: __webpack_require__(/*! ./Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\"),\r\n    Tilemap: __webpack_require__(/*! ./Tilemap */ \"./node_modules/phaser/src/tilemaps/Tilemap.js\"),\r\n    TilemapCreator: __webpack_require__(/*! ./TilemapCreator */ \"./node_modules/phaser/src/tilemaps/TilemapCreator.js\"),\r\n    TilemapFactory: __webpack_require__(/*! ./TilemapFactory */ \"./node_modules/phaser/src/tilemaps/TilemapFactory.js\"),\r\n    Tileset: __webpack_require__(/*! ./Tileset */ \"./node_modules/phaser/src/tilemaps/Tileset.js\"),\r\n\r\n    LayerData: __webpack_require__(/*! ./mapdata/LayerData */ \"./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\"),\r\n    MapData: __webpack_require__(/*! ./mapdata/MapData */ \"./node_modules/phaser/src/tilemaps/mapdata/MapData.js\"),\r\n    ObjectLayer: __webpack_require__(/*! ./mapdata/ObjectLayer */ \"./node_modules/phaser/src/tilemaps/mapdata/ObjectLayer.js\"),\r\n\r\n    DynamicTilemapLayer: __webpack_require__(/*! ./dynamiclayer/DynamicTilemapLayer */ \"./node_modules/phaser/src/tilemaps/dynamiclayer/DynamicTilemapLayer.js\"),\r\n    StaticTilemapLayer: __webpack_require__(/*! ./staticlayer/StaticTilemapLayer */ \"./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayer.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9pbmRleC5qcz9jZDE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHNFQUFXOztBQUVoQyxhQUFhLG1CQUFPLENBQUMsZ0VBQVc7QUFDaEMscUJBQXFCLG1CQUFPLENBQUMsZ0ZBQW1CO0FBQ2hELG9CQUFvQixtQkFBTyxDQUFDLDhFQUFrQjtBQUM5QyxVQUFVLG1CQUFPLENBQUMsMERBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLGdFQUFXO0FBQ2hDLG9CQUFvQixtQkFBTyxDQUFDLDhFQUFrQjtBQUM5QyxvQkFBb0IsbUJBQU8sQ0FBQyw4RUFBa0I7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLGdFQUFXOztBQUVoQyxlQUFlLG1CQUFPLENBQUMsb0ZBQXFCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQyxnRkFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsd0ZBQXVCOztBQUVoRCx5QkFBeUIsbUJBQU8sQ0FBQyxrSEFBb0M7QUFDckUsd0JBQXdCLG1CQUFPLENBQUMsOEdBQWtDOztBQUVsRSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGlsZW1hcHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBDb21wb25lbnRzOiByZXF1aXJlKCcuL2NvbXBvbmVudHMnKSxcclxuICAgIFBhcnNlcnM6IHJlcXVpcmUoJy4vcGFyc2VycycpLFxyXG5cclxuICAgIEZvcm1hdHM6IHJlcXVpcmUoJy4vRm9ybWF0cycpLFxyXG4gICAgSW1hZ2VDb2xsZWN0aW9uOiByZXF1aXJlKCcuL0ltYWdlQ29sbGVjdGlvbicpLFxyXG4gICAgUGFyc2VUb1RpbGVtYXA6IHJlcXVpcmUoJy4vUGFyc2VUb1RpbGVtYXAnKSxcclxuICAgIFRpbGU6IHJlcXVpcmUoJy4vVGlsZScpLFxyXG4gICAgVGlsZW1hcDogcmVxdWlyZSgnLi9UaWxlbWFwJyksXHJcbiAgICBUaWxlbWFwQ3JlYXRvcjogcmVxdWlyZSgnLi9UaWxlbWFwQ3JlYXRvcicpLFxyXG4gICAgVGlsZW1hcEZhY3Rvcnk6IHJlcXVpcmUoJy4vVGlsZW1hcEZhY3RvcnknKSxcclxuICAgIFRpbGVzZXQ6IHJlcXVpcmUoJy4vVGlsZXNldCcpLFxyXG5cclxuICAgIExheWVyRGF0YTogcmVxdWlyZSgnLi9tYXBkYXRhL0xheWVyRGF0YScpLFxyXG4gICAgTWFwRGF0YTogcmVxdWlyZSgnLi9tYXBkYXRhL01hcERhdGEnKSxcclxuICAgIE9iamVjdExheWVyOiByZXF1aXJlKCcuL21hcGRhdGEvT2JqZWN0TGF5ZXInKSxcclxuXHJcbiAgICBEeW5hbWljVGlsZW1hcExheWVyOiByZXF1aXJlKCcuL2R5bmFtaWNsYXllci9EeW5hbWljVGlsZW1hcExheWVyJyksXHJcbiAgICBTdGF0aWNUaWxlbWFwTGF5ZXI6IHJlcXVpcmUoJy4vc3RhdGljbGF5ZXIvU3RhdGljVGlsZW1hcExheWVyJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/mapdata/LayerData.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/mapdata/LayerData.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A class for representing data about about a layer in a map. Maps are parsed from CSV, Tiled,\r\n * etc. into this format. Tilemap, StaticTilemapLayer and DynamicTilemapLayer have a reference\r\n * to this data and use it to look up and perform operations on tiles.\r\n *\r\n * @class LayerData\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} [config] - [description]\r\n */\r\nvar LayerData = new Class({\r\n\r\n    initialize:\r\n\r\n    function LayerData (config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        /**\r\n         * The name of the layer, if specified in Tiled.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = GetFastValue(config, 'name', 'layer');\r\n\r\n        /**\r\n         * The x offset of where to draw from the top left\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#x\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.x = GetFastValue(config, 'x', 0);\r\n\r\n        /**\r\n         * The y offset of where to draw from the top left\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#y\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.y = GetFastValue(config, 'y', 0);\r\n\r\n        /**\r\n         * The width in tile of the layer.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = GetFastValue(config, 'width', 0);\r\n\r\n        /**\r\n         * The height in tiles of the layer.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = GetFastValue(config, 'height', 0);\r\n\r\n        /**\r\n         * The pixel width of the tiles.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#tileWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileWidth = GetFastValue(config, 'tileWidth', 0);\r\n\r\n        /**\r\n         * The pixel height of the tiles.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#tileHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileHeight = GetFastValue(config, 'tileHeight', 0);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#baseTileWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.baseTileWidth = GetFastValue(config, 'baseTileWidth', this.tileWidth);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#baseTileHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.baseTileHeight = GetFastValue(config, 'baseTileHeight', this.tileHeight);\r\n\r\n        /**\r\n         * The width in pixels of the entire layer.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#widthInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.widthInPixels = GetFastValue(config, 'widthInPixels', this.width * this.baseTileWidth);\r\n\r\n        /**\r\n         * The height in pixels of the entire layer.\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#heightInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.heightInPixels = GetFastValue(config, 'heightInPixels', this.height * this.baseTileHeight);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#alpha\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.alpha = GetFastValue(config, 'alpha', 1);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#visible\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.visible = GetFastValue(config, 'visible', true);\r\n\r\n        /**\r\n         * Layer specific properties (can be specified in Tiled)\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#properties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = GetFastValue(config, 'properties', {});\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#indexes\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.indexes = GetFastValue(config, 'indexes', []);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#collideIndexes\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.collideIndexes = GetFastValue(config, 'collideIndexes', []);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#callbacks\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbacks = GetFastValue(config, 'callbacks', []);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#bodies\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.bodies = GetFastValue(config, 'bodies', []);\r\n\r\n        /**\r\n         * An array of the tile indexes\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#data\r\n         * @type {(number[])}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = GetFastValue(config, 'data', []);\r\n\r\n        /**\r\n         * [description]\r\n         *\r\n         * @name Phaser.Tilemaps.LayerData#tilemapLayer\r\n         * @type {(Phaser.Tilemaps.DynamicTilemapLayer|Phaser.Tilemaps.StaticTilemapLayer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilemapLayer = GetFastValue(config, 'tilemapLayer', null);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = LayerData;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9tYXBkYXRhL0xheWVyRGF0YS5qcz9mOGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL21hcGRhdGEvTGF5ZXJEYXRhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIGRhdGEgYWJvdXQgYWJvdXQgYSBsYXllciBpbiBhIG1hcC4gTWFwcyBhcmUgcGFyc2VkIGZyb20gQ1NWLCBUaWxlZCxcclxuICogZXRjLiBpbnRvIHRoaXMgZm9ybWF0LiBUaWxlbWFwLCBTdGF0aWNUaWxlbWFwTGF5ZXIgYW5kIER5bmFtaWNUaWxlbWFwTGF5ZXIgaGF2ZSBhIHJlZmVyZW5jZVxyXG4gKiB0byB0aGlzIGRhdGEgYW5kIHVzZSBpdCB0byBsb29rIHVwIGFuZCBwZXJmb3JtIG9wZXJhdGlvbnMgb24gdGlsZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBMYXllckRhdGFcclxuICogQG1lbWJlcm9mIFBoYXNlci5UaWxlbWFwc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlnXSAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBMYXllckRhdGEgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGF5ZXJEYXRhIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBsYXllciwgaWYgc3BlY2lmaWVkIGluIFRpbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5hbWUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbmFtZScsICdsYXllcicpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBvZmZzZXQgb2Ygd2hlcmUgdG8gZHJhdyBmcm9tIHRoZSB0b3AgbGVmdFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneCcsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBvZmZzZXQgb2Ygd2hlcmUgdG8gZHJhdyBmcm9tIHRoZSB0b3AgbGVmdFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggaW4gdGlsZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoZWlnaHQgaW4gdGlsZXMgb2YgdGhlIGxheWVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGl4ZWwgd2lkdGggb2YgdGhlIHRpbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSN0aWxlV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZVdpZHRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RpbGVXaWR0aCcsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGl4ZWwgaGVpZ2h0IG9mIHRoZSB0aWxlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjdGlsZUhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlSGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RpbGVIZWlnaHQnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSNiYXNlVGlsZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VUaWxlV2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYmFzZVRpbGVXaWR0aCcsIHRoaXMudGlsZVdpZHRoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSNiYXNlVGlsZUhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYXNlVGlsZUhlaWdodCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdiYXNlVGlsZUhlaWdodCcsIHRoaXMudGlsZUhlaWdodCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIGVudGlyZSBsYXllci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjd2lkdGhJblBpeGVsc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aEluUGl4ZWxzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3dpZHRoSW5QaXhlbHMnLCB0aGlzLndpZHRoICogdGhpcy5iYXNlVGlsZVdpZHRoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBpbiBwaXhlbHMgb2YgdGhlIGVudGlyZSBsYXllci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjaGVpZ2h0SW5QaXhlbHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0SW5QaXhlbHMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnaGVpZ2h0SW5QaXhlbHMnLCB0aGlzLmhlaWdodCAqIHRoaXMuYmFzZVRpbGVIZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI2FscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FscGhhJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjdmlzaWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICd2aXNpYmxlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExheWVyIHNwZWNpZmljIHByb3BlcnRpZXMgKGNhbiBiZSBzcGVjaWZpZWQgaW4gVGlsZWQpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI3Byb3BlcnRpZXNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwcm9wZXJ0aWVzJywge30pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI2luZGV4ZXNcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmRleGVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2luZGV4ZXMnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjY29sbGlkZUluZGV4ZXNcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlSW5kZXhlcyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjb2xsaWRlSW5kZXhlcycsIFtdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLkxheWVyRGF0YSNjYWxsYmFja3NcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY2FsbGJhY2tzJywgW10pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI2JvZGllc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJvZGllcyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdib2RpZXMnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIHRoZSB0aWxlIGluZGV4ZXNcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEjZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHsobnVtYmVyW10pfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdkYXRhJywgW10pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhI3RpbGVtYXBMYXllclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlRpbGVtYXBzLkR5bmFtaWNUaWxlbWFwTGF5ZXJ8UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlbWFwTGF5ZXIgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGlsZW1hcExheWVyJywgbnVsbCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGF5ZXJEYXRhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/mapdata/MapData.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/mapdata/MapData.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A class for representing data about a map. Maps are parsed from CSV, Tiled, etc. into this\r\n * format. A Tilemap object get a copy of this data and then unpacks the needed properties into\r\n * itself.\r\n *\r\n * @class MapData\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tilemaps.MapDataConfig} [config] - The Map configuration object.\r\n */\r\nvar MapData = new Class({\r\n\r\n    initialize:\r\n\r\n    function MapData (config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        /**\r\n         * The key in the Phaser cache that corresponds to the loaded tilemap data.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = GetFastValue(config, 'name', 'map');\r\n\r\n        /**\r\n         * The width of the entire tilemap.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#width\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.width = GetFastValue(config, 'width', 0);\r\n\r\n        /**\r\n         * The height of the entire tilemap.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#height\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.height = GetFastValue(config, 'height', 0);\r\n\r\n        /**\r\n         * If the map is infinite or not.\r\n         *\r\n         * @name Phaser.Tilemaps.MapData#infinite\r\n         * @type {boolean}\r\n         * @since 3.17.0\r\n         */\r\n        this.infinite = GetFastValue(config, 'infinite', false);\r\n\r\n        /**\r\n         * The width of the tiles.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#tileWidth\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileWidth = GetFastValue(config, 'tileWidth', 0);\r\n\r\n        /**\r\n         * The height of the tiles.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#tileHeight\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileHeight = GetFastValue(config, 'tileHeight', 0);\r\n\r\n        /**\r\n         * The width in pixels of the entire tilemap.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#widthInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.widthInPixels = GetFastValue(config, 'widthInPixels', this.width * this.tileWidth);\r\n\r\n        /**\r\n         * The height in pixels of the entire tilemap.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#heightInPixels\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.heightInPixels = GetFastValue(config, 'heightInPixels', this.height * this.tileHeight);\r\n\r\n        /**\r\n         * [description]\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#format\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.format = GetFastValue(config, 'format', null);\r\n\r\n        /**\r\n         * The orientation of the map data (i.e. orthogonal, isometric, hexagonal), default 'orthogonal'.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#orientation\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.orientation = GetFastValue(config, 'orientation', 'orthogonal');\r\n\r\n        /**\r\n         * Determines the draw order of tilemap. Default is right-down\r\n         * \r\n         * 0, or 'right-down'\r\n         * 1, or 'left-down'\r\n         * 2, or 'right-up'\r\n         * 3, or 'left-up'\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#renderOrder\r\n         * @type {string}\r\n         * @since 3.12.0\r\n         */\r\n        this.renderOrder = GetFastValue(config, 'renderOrder', 'right-down');\r\n\r\n        /**\r\n         * The version of the map data (as specified in Tiled).\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#version\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.version = GetFastValue(config, 'version', '1');\r\n\r\n        /**\r\n         * Map specific properties (can be specified in Tiled)\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#properties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = GetFastValue(config, 'properties', {});\r\n\r\n        /**\r\n         * An array with all the layers configured to the MapData.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#layers\r\n         * @type {(Phaser.Tilemaps.LayerData[]|Phaser.Tilemaps.ObjectLayer)}\r\n         * @since 3.0.0\r\n         */\r\n        this.layers = GetFastValue(config, 'layers', []);\r\n\r\n        /**\r\n         * An array of Tiled Image Layers.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#images\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.images = GetFastValue(config, 'images', []);\r\n\r\n        /**\r\n         * An object of Tiled Object Layers.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#objects\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.objects = GetFastValue(config, 'objects', {});\r\n\r\n        /**\r\n          * An object of collision data. Must be created as physics object or will return undefined.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#collision\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.collision = GetFastValue(config, 'collision', {});\r\n\r\n        /**\r\n         * An array of Tilesets.\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#tilesets\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilesets = GetFastValue(config, 'tilesets', []);\r\n\r\n        /**\r\n         * The collection of images the map uses(specified in Tiled)\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#imageCollections\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.imageCollections = GetFastValue(config, 'imageCollections', []);\r\n\r\n        /**\r\n         * [description]\r\n         * \r\n         * @name Phaser.Tilemaps.MapData#tiles\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.tiles = GetFastValue(config, 'tiles', []);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = MapData;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9tYXBkYXRhL01hcERhdGEuanM/ZDkzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHlEQUF5RDs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvbWFwZGF0YS9NYXBEYXRhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIGRhdGEgYWJvdXQgYSBtYXAuIE1hcHMgYXJlIHBhcnNlZCBmcm9tIENTViwgVGlsZWQsIGV0Yy4gaW50byB0aGlzXHJcbiAqIGZvcm1hdC4gQSBUaWxlbWFwIG9iamVjdCBnZXQgYSBjb3B5IG9mIHRoaXMgZGF0YSBhbmQgdGhlbiB1bnBhY2tzIHRoZSBuZWVkZWQgcHJvcGVydGllcyBpbnRvXHJcbiAqIGl0c2VsZi5cclxuICpcclxuICogQGNsYXNzIE1hcERhdGFcclxuICogQG1lbWJlcm9mIFBoYXNlci5UaWxlbWFwc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLk1hcERhdGFDb25maWd9IFtjb25maWddIC0gVGhlIE1hcCBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICovXHJcbnZhciBNYXBEYXRhID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1hcERhdGEgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBpbiB0aGUgUGhhc2VyIGNhY2hlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxvYWRlZCB0aWxlbWFwIGRhdGEuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25hbWUnLCAnbWFwJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgZW50aXJlIHRpbGVtYXAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnd2lkdGgnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgZW50aXJlIHRpbGVtYXAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdoZWlnaHQnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIG1hcCBpcyBpbmZpbml0ZSBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTWFwRGF0YSNpbmZpbml0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZmluaXRlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2luZmluaXRlJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHRpbGVzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI3RpbGVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlV2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGlsZVdpZHRoJywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGVzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI3RpbGVIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZUhlaWdodCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd0aWxlSGVpZ2h0JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIGVudGlyZSB0aWxlbWFwLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI3dpZHRoSW5QaXhlbHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGhJblBpeGVscyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd3aWR0aEluUGl4ZWxzJywgdGhpcy53aWR0aCAqIHRoaXMudGlsZVdpZHRoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBpbiBwaXhlbHMgb2YgdGhlIGVudGlyZSB0aWxlbWFwLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI2hlaWdodEluUGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodEluUGl4ZWxzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hlaWdodEluUGl4ZWxzJywgdGhpcy5oZWlnaHQgKiB0aGlzLnRpbGVIZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjZm9ybWF0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZm9ybWF0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbWFwIGRhdGEgKGkuZS4gb3J0aG9nb25hbCwgaXNvbWV0cmljLCBoZXhhZ29uYWwpLCBkZWZhdWx0ICdvcnRob2dvbmFsJy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTWFwRGF0YSNvcmllbnRhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IEdldEZhc3RWYWx1ZShjb25maWcsICdvcmllbnRhdGlvbicsICdvcnRob2dvbmFsJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldGVybWluZXMgdGhlIGRyYXcgb3JkZXIgb2YgdGlsZW1hcC4gRGVmYXVsdCBpcyByaWdodC1kb3duXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogMCwgb3IgJ3JpZ2h0LWRvd24nXHJcbiAgICAgICAgICogMSwgb3IgJ2xlZnQtZG93bidcclxuICAgICAgICAgKiAyLCBvciAncmlnaHQtdXAnXHJcbiAgICAgICAgICogMywgb3IgJ2xlZnQtdXAnXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjcmVuZGVyT3JkZXJcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbmRlck9yZGVyID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3JlbmRlck9yZGVyJywgJ3JpZ2h0LWRvd24nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnNpb24gb2YgdGhlIG1hcCBkYXRhIChhcyBzcGVjaWZpZWQgaW4gVGlsZWQpLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI3ZlcnNpb25cclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IEdldEZhc3RWYWx1ZShjb25maWcsICd2ZXJzaW9uJywgJzEnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWFwIHNwZWNpZmljIHByb3BlcnRpZXMgKGNhbiBiZSBzcGVjaWZpZWQgaW4gVGlsZWQpXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk1hcERhdGEjcHJvcGVydGllc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Byb3BlcnRpZXMnLCB7fSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IHdpdGggYWxsIHRoZSBsYXllcnMgY29uZmlndXJlZCB0byB0aGUgTWFwRGF0YS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTWFwRGF0YSNsYXllcnNcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGFbXXxQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGF5ZXJzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2xheWVycycsIFtdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgVGlsZWQgSW1hZ2UgTGF5ZXJzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI2ltYWdlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmltYWdlcyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdpbWFnZXMnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBvZiBUaWxlZCBPYmplY3QgTGF5ZXJzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI29iamVjdHNcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JqZWN0cyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdvYmplY3RzJywge30pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgICogQW4gb2JqZWN0IG9mIGNvbGxpc2lvbiBkYXRhLiBNdXN0IGJlIGNyZWF0ZWQgYXMgcGh5c2ljcyBvYmplY3Qgb3Igd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI2NvbGxpc2lvblxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY29sbGlzaW9uJywge30pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBUaWxlc2V0cy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTWFwRGF0YSN0aWxlc2V0c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZXNldHMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGlsZXNldHMnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGltYWdlcyB0aGUgbWFwIHVzZXMoc3BlY2lmaWVkIGluIFRpbGVkKVxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5NYXBEYXRhI2ltYWdlQ29sbGVjdGlvbnNcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbWFnZUNvbGxlY3Rpb25zID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ltYWdlQ29sbGVjdGlvbnMnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuTWFwRGF0YSN0aWxlc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RpbGVzJywgW10pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hcERhdGE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/mapdata/MapData.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/mapdata/ObjectLayer.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/mapdata/ObjectLayer.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A class for representing a Tiled object layer in a map. This mirrors the structure of a Tiled\r\n * object layer, except:\r\n *  - \"x\" & \"y\" properties are ignored since these cannot be changed in Tiled.\r\n *  - \"offsetx\" & \"offsety\" are applied to the individual object coordinates directly, so they\r\n *    are ignored as well.\r\n *  - \"draworder\" is ignored.\r\n *\r\n * @class ObjectLayer\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tilemaps.ObjectLayerConfig} [config] - The data for the layer from the Tiled JSON object.\r\n */\r\nvar ObjectLayer = new Class({\r\n\r\n    initialize:\r\n\r\n    function ObjectLayer (config)\r\n    {\r\n        if (config === undefined) { config = {}; }\r\n\r\n        /**\r\n         * The name of the Object Layer.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#name\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.name = GetFastValue(config, 'name', 'object layer');\r\n\r\n        /**\r\n         * The opacity of the layer, between 0 and 1.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#opacity\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.opacity = GetFastValue(config, 'opacity', 1);\r\n\r\n        /**\r\n         * The custom properties defined on the Object Layer, keyed by their name.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#properties\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.properties = GetFastValue(config, 'properties', {});\r\n\r\n        /**\r\n         * The type of each custom property defined on the Object Layer, keyed by its name.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#propertyTypes\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.propertyTypes = GetFastValue(config, 'propertytypes', {});\r\n\r\n        /**\r\n         * The type of the layer, which should be `objectgroup`.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#type\r\n         * @type {string}\r\n         * @since 3.0.0\r\n         */\r\n        this.type = GetFastValue(config, 'type', 'objectgroup');\r\n\r\n        /**\r\n         * Whether the layer is shown (`true`) or hidden (`false`).\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#visible\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.visible = GetFastValue(config, 'visible', true);\r\n\r\n        /**\r\n         * An array of all objects on this Object Layer.\r\n         *\r\n         * Each Tiled object corresponds to a JavaScript object in this array. It has an `id` (unique),\r\n         * `name` (as assigned in Tiled), `type` (as assigned in Tiled), `rotation` (in clockwise degrees),\r\n         * `properties` (if any), `visible` state (`true` if visible, `false` otherwise),\r\n         * `x` and `y` coordinates (in pixels, relative to the tilemap), and a `width` and `height` (in pixels).\r\n         *\r\n         * An object tile has a `gid` property (GID of the represented tile), a `flippedHorizontal` property,\r\n         * a `flippedVertical` property, and `flippedAntiDiagonal` property.\r\n         * The {@link http://docs.mapeditor.org/en/latest/reference/tmx-map-format/|Tiled documentation} contains\r\n         * information on flipping and rotation.\r\n         *\r\n         * Polylines have a `polyline` property, which is an array of objects corresponding to points,\r\n         * where each point has an `x` property and a `y` property. Polygons have an identically structured\r\n         * array in their `polygon` property. Text objects have a `text` property with the text's properties.\r\n         *\r\n         * Rectangles and ellipses have a `rectangle` or `ellipse` property set to `true`.\r\n         *\r\n         * @name Phaser.Tilemaps.ObjectLayer#objects\r\n         * @type {Phaser.Types.Tilemaps.TiledObject[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.objects = GetFastValue(config, 'objects', []);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = ObjectLayer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9tYXBkYXRhL09iamVjdExheWVyLmpzPzMzZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3RkFBd0Y7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9tYXBkYXRhL09iamVjdExheWVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIGEgVGlsZWQgb2JqZWN0IGxheWVyIGluIGEgbWFwLiBUaGlzIG1pcnJvcnMgdGhlIHN0cnVjdHVyZSBvZiBhIFRpbGVkXHJcbiAqIG9iamVjdCBsYXllciwgZXhjZXB0OlxyXG4gKiAgLSBcInhcIiAmIFwieVwiIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQgc2luY2UgdGhlc2UgY2Fubm90IGJlIGNoYW5nZWQgaW4gVGlsZWQuXHJcbiAqICAtIFwib2Zmc2V0eFwiICYgXCJvZmZzZXR5XCIgYXJlIGFwcGxpZWQgdG8gdGhlIGluZGl2aWR1YWwgb2JqZWN0IGNvb3JkaW5hdGVzIGRpcmVjdGx5LCBzbyB0aGV5XHJcbiAqICAgIGFyZSBpZ25vcmVkIGFzIHdlbGwuXHJcbiAqICAtIFwiZHJhd29yZGVyXCIgaXMgaWdub3JlZC5cclxuICpcclxuICogQGNsYXNzIE9iamVjdExheWVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVGlsZW1hcHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5PYmplY3RMYXllckNvbmZpZ30gW2NvbmZpZ10gLSBUaGUgZGF0YSBmb3IgdGhlIGxheWVyIGZyb20gdGhlIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKi9cclxudmFyIE9iamVjdExheWVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE9iamVjdExheWVyIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBPYmplY3QgTGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25hbWUnLCAnb2JqZWN0IGxheWVyJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBsYXllciwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLk9iamVjdExheWVyI29wYWNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3BhY2l0eSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdvcGFjaXR5JywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXN0b20gcHJvcGVydGllcyBkZWZpbmVkIG9uIHRoZSBPYmplY3QgTGF5ZXIsIGtleWVkIGJ5IHRoZWlyIG5hbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIjcHJvcGVydGllc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Byb3BlcnRpZXMnLCB7fSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0eXBlIG9mIGVhY2ggY3VzdG9tIHByb3BlcnR5IGRlZmluZWQgb24gdGhlIE9iamVjdCBMYXllciwga2V5ZWQgYnkgaXRzIG5hbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIjcHJvcGVydHlUeXBlc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Byb3BlcnR5dHlwZXMnLCB7fSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0eXBlIG9mIHRoZSBsYXllciwgd2hpY2ggc2hvdWxkIGJlIGBvYmplY3Rncm91cGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50eXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3R5cGUnLCAnb2JqZWN0Z3JvdXAnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgbGF5ZXIgaXMgc2hvd24gKGB0cnVlYCkgb3IgaGlkZGVuIChgZmFsc2VgKS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5PYmplY3RMYXllciN2aXNpYmxlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Zpc2libGUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgYWxsIG9iamVjdHMgb24gdGhpcyBPYmplY3QgTGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFYWNoIFRpbGVkIG9iamVjdCBjb3JyZXNwb25kcyB0byBhIEphdmFTY3JpcHQgb2JqZWN0IGluIHRoaXMgYXJyYXkuIEl0IGhhcyBhbiBgaWRgICh1bmlxdWUpLFxyXG4gICAgICAgICAqIGBuYW1lYCAoYXMgYXNzaWduZWQgaW4gVGlsZWQpLCBgdHlwZWAgKGFzIGFzc2lnbmVkIGluIFRpbGVkKSwgYHJvdGF0aW9uYCAoaW4gY2xvY2t3aXNlIGRlZ3JlZXMpLFxyXG4gICAgICAgICAqIGBwcm9wZXJ0aWVzYCAoaWYgYW55KSwgYHZpc2libGVgIHN0YXRlIChgdHJ1ZWAgaWYgdmlzaWJsZSwgYGZhbHNlYCBvdGhlcndpc2UpLFxyXG4gICAgICAgICAqIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIChpbiBwaXhlbHMsIHJlbGF0aXZlIHRvIHRoZSB0aWxlbWFwKSwgYW5kIGEgYHdpZHRoYCBhbmQgYGhlaWdodGAgKGluIHBpeGVscykuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBbiBvYmplY3QgdGlsZSBoYXMgYSBgZ2lkYCBwcm9wZXJ0eSAoR0lEIG9mIHRoZSByZXByZXNlbnRlZCB0aWxlKSwgYSBgZmxpcHBlZEhvcml6b250YWxgIHByb3BlcnR5LFxyXG4gICAgICAgICAqIGEgYGZsaXBwZWRWZXJ0aWNhbGAgcHJvcGVydHksIGFuZCBgZmxpcHBlZEFudGlEaWFnb25hbGAgcHJvcGVydHkuXHJcbiAgICAgICAgICogVGhlIHtAbGluayBodHRwOi8vZG9jcy5tYXBlZGl0b3Iub3JnL2VuL2xhdGVzdC9yZWZlcmVuY2UvdG14LW1hcC1mb3JtYXQvfFRpbGVkIGRvY3VtZW50YXRpb259IGNvbnRhaW5zXHJcbiAgICAgICAgICogaW5mb3JtYXRpb24gb24gZmxpcHBpbmcgYW5kIHJvdGF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogUG9seWxpbmVzIGhhdmUgYSBgcG9seWxpbmVgIHByb3BlcnR5LCB3aGljaCBpcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gcG9pbnRzLFxyXG4gICAgICAgICAqIHdoZXJlIGVhY2ggcG9pbnQgaGFzIGFuIGB4YCBwcm9wZXJ0eSBhbmQgYSBgeWAgcHJvcGVydHkuIFBvbHlnb25zIGhhdmUgYW4gaWRlbnRpY2FsbHkgc3RydWN0dXJlZFxyXG4gICAgICAgICAqIGFycmF5IGluIHRoZWlyIGBwb2x5Z29uYCBwcm9wZXJ0eS4gVGV4dCBvYmplY3RzIGhhdmUgYSBgdGV4dGAgcHJvcGVydHkgd2l0aCB0aGUgdGV4dCdzIHByb3BlcnRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBSZWN0YW5nbGVzIGFuZCBlbGxpcHNlcyBoYXZlIGEgYHJlY3RhbmdsZWAgb3IgYGVsbGlwc2VgIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuT2JqZWN0TGF5ZXIjb2JqZWN0c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuVGlsZWRPYmplY3RbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9iamVjdHMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnb2JqZWN0cycsIFtdKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RMYXllcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/mapdata/ObjectLayer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/Parse.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/Parse.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ../Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar Parse2DArray = __webpack_require__(/*! ./Parse2DArray */ \"./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js\");\r\nvar ParseCSV = __webpack_require__(/*! ./ParseCSV */ \"./node_modules/phaser/src/tilemaps/parsers/ParseCSV.js\");\r\nvar ParseJSONTiled = __webpack_require__(/*! ./tiled/ParseJSONTiled */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseJSONTiled.js\");\r\nvar ParseWeltmeister = __webpack_require__(/*! ./impact/ParseWeltmeister */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseWeltmeister.js\");\r\n\r\n/**\r\n * Parses raw data of a given Tilemap format into a new MapData object. If no recognized data format\r\n * is found, returns `null`. When loading from CSV or a 2D array, you should specify the tileWidth &\r\n * tileHeight. When parsing from a map from Tiled, the tileWidth & tileHeight will be pulled from\r\n * the map data.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Parse\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tilemap, used to set the name on the MapData.\r\n * @param {integer} mapFormat - See ../Formats.js.\r\n * @param {(integer[][]|string|object)} data - 2D array, CSV string or Tiled JSON object.\r\n * @param {integer} tileWidth - The width of a tile in pixels. Required for 2D array and CSV, but\r\n * ignored for Tiled JSON.\r\n * @param {integer} tileHeight - The height of a tile in pixels. Required for 2D array and CSV, but\r\n * ignored for Tiled JSON.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n *\r\n * @return {Phaser.Tilemaps.MapData} The created `MapData` object.\r\n */\r\nvar Parse = function (name, mapFormat, data, tileWidth, tileHeight, insertNull)\r\n{\r\n    var newMap;\r\n\r\n    switch (mapFormat)\r\n    {\r\n        case (Formats.ARRAY_2D):\r\n            newMap = Parse2DArray(name, data, tileWidth, tileHeight, insertNull);\r\n            break;\r\n        case (Formats.CSV):\r\n            newMap = ParseCSV(name, data, tileWidth, tileHeight, insertNull);\r\n            break;\r\n        case (Formats.TILED_JSON):\r\n            newMap = ParseJSONTiled(name, data, insertNull);\r\n            break;\r\n        case (Formats.WELTMEISTER):\r\n            newMap = ParseWeltmeister(name, data, insertNull);\r\n            break;\r\n        default:\r\n            console.warn('Unrecognized tilemap data format: ' + mapFormat);\r\n            newMap = null;\r\n    }\r\n\r\n    return newMap;\r\n};\r\n\r\nmodule.exports = Parse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL1BhcnNlLmpzP2U0MGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLDBFQUFZO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLGtHQUF3QjtBQUNyRCx1QkFBdUIsbUJBQU8sQ0FBQyx3R0FBMkI7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy9QYXJzZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZvcm1hdHMgPSByZXF1aXJlKCcuLi9Gb3JtYXRzJyk7XHJcbnZhciBQYXJzZTJEQXJyYXkgPSByZXF1aXJlKCcuL1BhcnNlMkRBcnJheScpO1xyXG52YXIgUGFyc2VDU1YgPSByZXF1aXJlKCcuL1BhcnNlQ1NWJyk7XHJcbnZhciBQYXJzZUpTT05UaWxlZCA9IHJlcXVpcmUoJy4vdGlsZWQvUGFyc2VKU09OVGlsZWQnKTtcclxudmFyIFBhcnNlV2VsdG1laXN0ZXIgPSByZXF1aXJlKCcuL2ltcGFjdC9QYXJzZVdlbHRtZWlzdGVyJyk7XHJcblxyXG4vKipcclxuICogUGFyc2VzIHJhdyBkYXRhIG9mIGEgZ2l2ZW4gVGlsZW1hcCBmb3JtYXQgaW50byBhIG5ldyBNYXBEYXRhIG9iamVjdC4gSWYgbm8gcmVjb2duaXplZCBkYXRhIGZvcm1hdFxyXG4gKiBpcyBmb3VuZCwgcmV0dXJucyBgbnVsbGAuIFdoZW4gbG9hZGluZyBmcm9tIENTViBvciBhIDJEIGFycmF5LCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlIHRpbGVXaWR0aCAmXHJcbiAqIHRpbGVIZWlnaHQuIFdoZW4gcGFyc2luZyBmcm9tIGEgbWFwIGZyb20gVGlsZWQsIHRoZSB0aWxlV2lkdGggJiB0aWxlSGVpZ2h0IHdpbGwgYmUgcHVsbGVkIGZyb21cclxuICogdGhlIG1hcCBkYXRhLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuUGFyc2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRpbGVtYXAsIHVzZWQgdG8gc2V0IHRoZSBuYW1lIG9uIHRoZSBNYXBEYXRhLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IG1hcEZvcm1hdCAtIFNlZSAuLi9Gb3JtYXRzLmpzLlxyXG4gKiBAcGFyYW0geyhpbnRlZ2VyW11bXXxzdHJpbmd8b2JqZWN0KX0gZGF0YSAtIDJEIGFycmF5LCBDU1Ygc3RyaW5nIG9yIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLiBSZXF1aXJlZCBmb3IgMkQgYXJyYXkgYW5kIENTViwgYnV0XHJcbiAqIGlnbm9yZWQgZm9yIFRpbGVkIEpTT04uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZUhlaWdodCAtIFRoZSBoZWlnaHQgb2YgYSB0aWxlIGluIHBpeGVscy4gUmVxdWlyZWQgZm9yIDJEIGFycmF5IGFuZCBDU1YsIGJ1dFxyXG4gKiBpZ25vcmVkIGZvciBUaWxlZCBKU09OLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluc2VydE51bGwgLSBDb250cm9scyBob3cgZW1wdHkgdGlsZXMsIHRpbGVzIHdpdGggYW4gaW5kZXggb2YgLTEsIGluIHRoZSBtYXBcclxuICogZGF0YSBhcmUgaGFuZGxlZC4gSWYgYHRydWVgLCBlbXB0eSBsb2NhdGlvbnMgd2lsbCBnZXQgYSB2YWx1ZSBvZiBgbnVsbGAuIElmIGBmYWxzZWAsIGVtcHR5XHJcbiAqIGxvY2F0aW9uIHdpbGwgZ2V0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS4gSWYgeW91J3ZlIGEgbGFyZ2Ugc3BhcnNlbHkgcG9wdWxhdGVkIG1hcCBhbmRcclxuICogdGhlIHRpbGUgZGF0YSBkb2Vzbid0IG5lZWQgdG8gY2hhbmdlIHRoZW4gc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCB3aWxsIGhlbHAgd2l0aCBtZW1vcnlcclxuICogY29uc3VtcHRpb24uIEhvd2V2ZXIgaWYgeW91ciBtYXAgaXMgc21hbGwgb3IgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSB0aWxlcyBkeW5hbWljYWxseSwgdGhlbiBsZWF2ZVxyXG4gKiB0aGUgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5NYXBEYXRhfSBUaGUgY3JlYXRlZCBgTWFwRGF0YWAgb2JqZWN0LlxyXG4gKi9cclxudmFyIFBhcnNlID0gZnVuY3Rpb24gKG5hbWUsIG1hcEZvcm1hdCwgZGF0YSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBpbnNlcnROdWxsKVxyXG57XHJcbiAgICB2YXIgbmV3TWFwO1xyXG5cclxuICAgIHN3aXRjaCAobWFwRm9ybWF0KVxyXG4gICAge1xyXG4gICAgICAgIGNhc2UgKEZvcm1hdHMuQVJSQVlfMkQpOlxyXG4gICAgICAgICAgICBuZXdNYXAgPSBQYXJzZTJEQXJyYXkobmFtZSwgZGF0YSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBpbnNlcnROdWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAoRm9ybWF0cy5DU1YpOlxyXG4gICAgICAgICAgICBuZXdNYXAgPSBQYXJzZUNTVihuYW1lLCBkYXRhLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIGluc2VydE51bGwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIChGb3JtYXRzLlRJTEVEX0pTT04pOlxyXG4gICAgICAgICAgICBuZXdNYXAgPSBQYXJzZUpTT05UaWxlZChuYW1lLCBkYXRhLCBpbnNlcnROdWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAoRm9ybWF0cy5XRUxUTUVJU1RFUik6XHJcbiAgICAgICAgICAgIG5ld01hcCA9IFBhcnNlV2VsdG1laXN0ZXIobmFtZSwgZGF0YSwgaW5zZXJ0TnVsbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5yZWNvZ25pemVkIHRpbGVtYXAgZGF0YSBmb3JtYXQ6ICcgKyBtYXBGb3JtYXQpO1xyXG4gICAgICAgICAgICBuZXdNYXAgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdNYXA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/Parse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ../Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar LayerData = __webpack_require__(/*! ../mapdata/LayerData */ \"./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\");\r\nvar MapData = __webpack_require__(/*! ../mapdata/MapData */ \"./node_modules/phaser/src/tilemaps/mapdata/MapData.js\");\r\nvar Tile = __webpack_require__(/*! ../Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\n\r\n/**\r\n * Parses a 2D array of tile indexes into a new MapData object with a single layer.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Parse2DArray\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tilemap, used to set the name on the MapData.\r\n * @param {integer[][]} data - 2D array, CSV string or Tiled JSON object.\r\n * @param {integer} tileWidth - The width of a tile in pixels.\r\n * @param {integer} tileHeight - The height of a tile in pixels.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n *\r\n * @return {Phaser.Tilemaps.MapData} [description]\r\n */\r\nvar Parse2DArray = function (name, data, tileWidth, tileHeight, insertNull)\r\n{\r\n    var layerData = new LayerData({\r\n        tileWidth: tileWidth,\r\n        tileHeight: tileHeight\r\n    });\r\n\r\n    var mapData = new MapData({\r\n        name: name,\r\n        tileWidth: tileWidth,\r\n        tileHeight: tileHeight,\r\n        format: Formats.ARRAY_2D,\r\n        layers: [ layerData ]\r\n    });\r\n\r\n    var tiles = [];\r\n    var height = data.length;\r\n    var width = 0;\r\n\r\n    for (var y = 0; y < data.length; y++)\r\n    {\r\n        tiles[y] = [];\r\n        var row = data[y];\r\n\r\n        for (var x = 0; x < row.length; x++)\r\n        {\r\n            var tileIndex = parseInt(row[x], 10);\r\n\r\n            if (isNaN(tileIndex) || tileIndex === -1)\r\n            {\r\n                tiles[y][x] = insertNull\r\n                    ? null\r\n                    : new Tile(layerData, -1, x, y, tileWidth, tileHeight);\r\n            }\r\n            else\r\n            {\r\n                tiles[y][x] = new Tile(layerData, tileIndex, x, y, tileWidth, tileHeight);\r\n            }\r\n        }\r\n\r\n        if (width === 0)\r\n        {\r\n            width = row.length;\r\n        }\r\n    }\r\n\r\n    mapData.width = layerData.width = width;\r\n    mapData.height = layerData.height = height;\r\n    mapData.widthInPixels = layerData.widthInPixels = width * tileWidth;\r\n    mapData.heightInPixels = layerData.heightInPixels = height * tileHeight;\r\n    layerData.data = tiles;\r\n\r\n    return mapData;\r\n};\r\n\r\nmodule.exports = Parse2DArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL1BhcnNlMkRBcnJheS5qcz8wMzZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsaUVBQVk7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXNCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBb0I7QUFDMUMsV0FBVyxtQkFBTyxDQUFDLDJEQUFTOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL1BhcnNlMkRBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZvcm1hdHMgPSByZXF1aXJlKCcuLi9Gb3JtYXRzJyk7XHJcbnZhciBMYXllckRhdGEgPSByZXF1aXJlKCcuLi9tYXBkYXRhL0xheWVyRGF0YScpO1xyXG52YXIgTWFwRGF0YSA9IHJlcXVpcmUoJy4uL21hcGRhdGEvTWFwRGF0YScpO1xyXG52YXIgVGlsZSA9IHJlcXVpcmUoJy4uL1RpbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYSAyRCBhcnJheSBvZiB0aWxlIGluZGV4ZXMgaW50byBhIG5ldyBNYXBEYXRhIG9iamVjdCB3aXRoIGEgc2luZ2xlIGxheWVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuUGFyc2UyREFycmF5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0aWxlbWFwLCB1c2VkIHRvIHNldCB0aGUgbmFtZSBvbiB0aGUgTWFwRGF0YS5cclxuICogQHBhcmFtIHtpbnRlZ2VyW11bXX0gZGF0YSAtIDJEIGFycmF5LCBDU1Ygc3RyaW5nIG9yIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIGEgdGlsZSBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5zZXJ0TnVsbCAtIENvbnRyb2xzIGhvdyBlbXB0eSB0aWxlcywgdGlsZXMgd2l0aCBhbiBpbmRleCBvZiAtMSwgaW4gdGhlIG1hcFxyXG4gKiBkYXRhIGFyZSBoYW5kbGVkLiBJZiBgdHJ1ZWAsIGVtcHR5IGxvY2F0aW9ucyB3aWxsIGdldCBhIHZhbHVlIG9mIGBudWxsYC4gSWYgYGZhbHNlYCwgZW1wdHlcclxuICogbG9jYXRpb24gd2lsbCBnZXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLiBJZiB5b3UndmUgYSBsYXJnZSBzcGFyc2VseSBwb3B1bGF0ZWQgbWFwIGFuZFxyXG4gKiB0aGUgdGlsZSBkYXRhIGRvZXNuJ3QgbmVlZCB0byBjaGFuZ2UgdGhlbiBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gYHRydWVgIHdpbGwgaGVscCB3aXRoIG1lbW9yeVxyXG4gKiBjb25zdW1wdGlvbi4gSG93ZXZlciBpZiB5b3VyIG1hcCBpcyBzbWFsbCBvciB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIHRpbGVzIGR5bmFtaWNhbGx5LCB0aGVuIGxlYXZlXHJcbiAqIHRoZSBkZWZhdWx0IHZhbHVlIHNldC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLk1hcERhdGF9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQYXJzZTJEQXJyYXkgPSBmdW5jdGlvbiAobmFtZSwgZGF0YSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBpbnNlcnROdWxsKVxyXG57XHJcbiAgICB2YXIgbGF5ZXJEYXRhID0gbmV3IExheWVyRGF0YSh7XHJcbiAgICAgICAgdGlsZVdpZHRoOiB0aWxlV2lkdGgsXHJcbiAgICAgICAgdGlsZUhlaWdodDogdGlsZUhlaWdodFxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIG1hcERhdGEgPSBuZXcgTWFwRGF0YSh7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICB0aWxlV2lkdGg6IHRpbGVXaWR0aCxcclxuICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlSGVpZ2h0LFxyXG4gICAgICAgIGZvcm1hdDogRm9ybWF0cy5BUlJBWV8yRCxcclxuICAgICAgICBsYXllcnM6IFsgbGF5ZXJEYXRhIF1cclxuICAgIH0pO1xyXG5cclxuICAgIHZhciB0aWxlcyA9IFtdO1xyXG4gICAgdmFyIGhlaWdodCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgdmFyIHdpZHRoID0gMDtcclxuXHJcbiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGRhdGEubGVuZ3RoOyB5KyspXHJcbiAgICB7XHJcbiAgICAgICAgdGlsZXNbeV0gPSBbXTtcclxuICAgICAgICB2YXIgcm93ID0gZGF0YVt5XTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCByb3cubGVuZ3RoOyB4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZUluZGV4ID0gcGFyc2VJbnQocm93W3hdLCAxMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNOYU4odGlsZUluZGV4KSB8fCB0aWxlSW5kZXggPT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aWxlc1t5XVt4XSA9IGluc2VydE51bGxcclxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBUaWxlKGxheWVyRGF0YSwgLTEsIHgsIHksIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aWxlc1t5XVt4XSA9IG5ldyBUaWxlKGxheWVyRGF0YSwgdGlsZUluZGV4LCB4LCB5LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2lkdGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHJvdy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1hcERhdGEud2lkdGggPSBsYXllckRhdGEud2lkdGggPSB3aWR0aDtcclxuICAgIG1hcERhdGEuaGVpZ2h0ID0gbGF5ZXJEYXRhLmhlaWdodCA9IGhlaWdodDtcclxuICAgIG1hcERhdGEud2lkdGhJblBpeGVscyA9IGxheWVyRGF0YS53aWR0aEluUGl4ZWxzID0gd2lkdGggKiB0aWxlV2lkdGg7XHJcbiAgICBtYXBEYXRhLmhlaWdodEluUGl4ZWxzID0gbGF5ZXJEYXRhLmhlaWdodEluUGl4ZWxzID0gaGVpZ2h0ICogdGlsZUhlaWdodDtcclxuICAgIGxheWVyRGF0YS5kYXRhID0gdGlsZXM7XHJcblxyXG4gICAgcmV0dXJuIG1hcERhdGE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlMkRBcnJheTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/ParseCSV.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/ParseCSV.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ../Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar Parse2DArray = __webpack_require__(/*! ./Parse2DArray */ \"./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js\");\r\n\r\n/**\r\n * Parses a CSV string of tile indexes into a new MapData object with a single layer.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.ParseCSV\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tilemap, used to set the name on the MapData.\r\n * @param {string} data - CSV string of tile indexes.\r\n * @param {integer} tileWidth - The width of a tile in pixels.\r\n * @param {integer} tileHeight - The height of a tile in pixels.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n *\r\n * @return {Phaser.Tilemaps.MapData} The resulting MapData object.\r\n */\r\nvar ParseCSV = function (name, data, tileWidth, tileHeight, insertNull)\r\n{\r\n    var array2D = data\r\n        .trim()\r\n        .split('\\n')\r\n        .map(function (row) { return row.split(','); });\r\n\r\n    var map = Parse2DArray(name, array2D, tileWidth, tileHeight, insertNull);\r\n    map.format = Formats.CSV;\r\n\r\n    return map;\r\n};\r\n\r\nmodule.exports = ParseCSV;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL1BhcnNlQ1NWLmpzP2RmYWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHVCQUF1QixFQUFFOztBQUV0RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL1BhcnNlQ1NWLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRm9ybWF0cyA9IHJlcXVpcmUoJy4uL0Zvcm1hdHMnKTtcclxudmFyIFBhcnNlMkRBcnJheSA9IHJlcXVpcmUoJy4vUGFyc2UyREFycmF5Jyk7XHJcblxyXG4vKipcclxuICogUGFyc2VzIGEgQ1NWIHN0cmluZyBvZiB0aWxlIGluZGV4ZXMgaW50byBhIG5ldyBNYXBEYXRhIG9iamVjdCB3aXRoIGEgc2luZ2xlIGxheWVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuUGFyc2VDU1ZcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRpbGVtYXAsIHVzZWQgdG8gc2V0IHRoZSBuYW1lIG9uIHRoZSBNYXBEYXRhLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIENTViBzdHJpbmcgb2YgdGlsZSBpbmRleGVzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVXaWR0aCAtIFRoZSB3aWR0aCBvZiBhIHRpbGUgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIGEgdGlsZSBpbiBwaXhlbHMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5zZXJ0TnVsbCAtIENvbnRyb2xzIGhvdyBlbXB0eSB0aWxlcywgdGlsZXMgd2l0aCBhbiBpbmRleCBvZiAtMSwgaW4gdGhlIG1hcFxyXG4gKiBkYXRhIGFyZSBoYW5kbGVkLiBJZiBgdHJ1ZWAsIGVtcHR5IGxvY2F0aW9ucyB3aWxsIGdldCBhIHZhbHVlIG9mIGBudWxsYC4gSWYgYGZhbHNlYCwgZW1wdHlcclxuICogbG9jYXRpb24gd2lsbCBnZXQgYSBUaWxlIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLiBJZiB5b3UndmUgYSBsYXJnZSBzcGFyc2VseSBwb3B1bGF0ZWQgbWFwIGFuZFxyXG4gKiB0aGUgdGlsZSBkYXRhIGRvZXNuJ3QgbmVlZCB0byBjaGFuZ2UgdGhlbiBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gYHRydWVgIHdpbGwgaGVscCB3aXRoIG1lbW9yeVxyXG4gKiBjb25zdW1wdGlvbi4gSG93ZXZlciBpZiB5b3VyIG1hcCBpcyBzbWFsbCBvciB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIHRpbGVzIGR5bmFtaWNhbGx5LCB0aGVuIGxlYXZlXHJcbiAqIHRoZSBkZWZhdWx0IHZhbHVlIHNldC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLk1hcERhdGF9IFRoZSByZXN1bHRpbmcgTWFwRGF0YSBvYmplY3QuXHJcbiAqL1xyXG52YXIgUGFyc2VDU1YgPSBmdW5jdGlvbiAobmFtZSwgZGF0YSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBpbnNlcnROdWxsKVxyXG57XHJcbiAgICB2YXIgYXJyYXkyRCA9IGRhdGFcclxuICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHJvdykgeyByZXR1cm4gcm93LnNwbGl0KCcsJyk7IH0pO1xyXG5cclxuICAgIHZhciBtYXAgPSBQYXJzZTJEQXJyYXkobmFtZSwgYXJyYXkyRCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBpbnNlcnROdWxsKTtcclxuICAgIG1hcC5mb3JtYXQgPSBGb3JtYXRzLkNTVjtcclxuXHJcbiAgICByZXR1cm4gbWFwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUNTVjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/ParseCSV.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/impact/ParseTileLayers.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/impact/ParseTileLayers.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LayerData = __webpack_require__(/*! ../../mapdata/LayerData */ \"./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\");\r\nvar Tile = __webpack_require__(/*! ../../Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Impact.ParseTileLayers\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - [description]\r\n * @param {boolean} insertNull - [description]\r\n *\r\n * @return {array} [description]\r\n */\r\nvar ParseTileLayers = function (json, insertNull)\r\n{\r\n    var tileLayers = [];\r\n\r\n    for (var i = 0; i < json.layer.length; i++)\r\n    {\r\n        var layer = json.layer[i];\r\n\r\n        var layerData = new LayerData({\r\n            name: layer.name,\r\n            width: layer.width,\r\n            height: layer.height,\r\n            tileWidth: layer.tilesize,\r\n            tileHeight: layer.tilesize,\r\n            visible: layer.visible === 1\r\n        });\r\n\r\n        var row = [];\r\n        var tileGrid = [];\r\n\r\n        //  Loop through the data field in the JSON. This is a 2D array containing the tile indexes,\r\n        //  one after the other. The indexes are relative to the tileset that contains the tile.\r\n        for (var y = 0; y < layer.data.length; y++)\r\n        {\r\n            for (var x = 0; x < layer.data[y].length; x++)\r\n            {\r\n                // In Weltmeister, 0 = no tile, but the Tilemap API expects -1 = no tile.\r\n                var index = layer.data[y][x] - 1;\r\n\r\n                var tile;\r\n\r\n                if (index > -1)\r\n                {\r\n                    tile = new Tile(layerData, index, x, y, layer.tilesize, layer.tilesize);\r\n                }\r\n                else\r\n                {\r\n                    tile = insertNull\r\n                        ? null\r\n                        : new Tile(layerData, -1, x, y, layer.tilesize, layer.tilesize);\r\n                }\r\n\r\n                row.push(tile);\r\n            }\r\n\r\n            tileGrid.push(row);\r\n            row = [];\r\n        }\r\n\r\n        layerData.data = tileGrid;\r\n\r\n        tileLayers.push(layerData);\r\n    }\r\n\r\n    return tileLayers;\r\n};\r\n\r\nmodule.exports = ParseTileLayers;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2ltcGFjdC9QYXJzZVRpbGVMYXllcnMuanM/YWM0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsd0ZBQXlCO0FBQ2pELFdBQVcsbUJBQU8sQ0FBQyw4REFBWTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsdUJBQXVCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQSwyQkFBMkIsMEJBQTBCO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2ltcGFjdC9QYXJzZVRpbGVMYXllcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMYXllckRhdGEgPSByZXF1aXJlKCcuLi8uLi9tYXBkYXRhL0xheWVyRGF0YScpO1xyXG52YXIgVGlsZSA9IHJlcXVpcmUoJy4uLy4uL1RpbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5JbXBhY3QuUGFyc2VUaWxlTGF5ZXJzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtib29sZWFufSBpbnNlcnROdWxsIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFBhcnNlVGlsZUxheWVycyA9IGZ1bmN0aW9uIChqc29uLCBpbnNlcnROdWxsKVxyXG57XHJcbiAgICB2YXIgdGlsZUxheWVycyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5sYXllci5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbGF5ZXIgPSBqc29uLmxheWVyW2ldO1xyXG5cclxuICAgICAgICB2YXIgbGF5ZXJEYXRhID0gbmV3IExheWVyRGF0YSh7XHJcbiAgICAgICAgICAgIG5hbWU6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBsYXllci53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBsYXllci5oZWlnaHQsXHJcbiAgICAgICAgICAgIHRpbGVXaWR0aDogbGF5ZXIudGlsZXNpemUsXHJcbiAgICAgICAgICAgIHRpbGVIZWlnaHQ6IGxheWVyLnRpbGVzaXplLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiBsYXllci52aXNpYmxlID09PSAxXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciByb3cgPSBbXTtcclxuICAgICAgICB2YXIgdGlsZUdyaWQgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gIExvb3AgdGhyb3VnaCB0aGUgZGF0YSBmaWVsZCBpbiB0aGUgSlNPTi4gVGhpcyBpcyBhIDJEIGFycmF5IGNvbnRhaW5pbmcgdGhlIHRpbGUgaW5kZXhlcyxcclxuICAgICAgICAvLyAgb25lIGFmdGVyIHRoZSBvdGhlci4gVGhlIGluZGV4ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0aWxlc2V0IHRoYXQgY29udGFpbnMgdGhlIHRpbGUuXHJcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBsYXllci5kYXRhLmxlbmd0aDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBsYXllci5kYXRhW3ldLmxlbmd0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBXZWx0bWVpc3RlciwgMCA9IG5vIHRpbGUsIGJ1dCB0aGUgVGlsZW1hcCBBUEkgZXhwZWN0cyAtMSA9IG5vIHRpbGUuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBsYXllci5kYXRhW3ldW3hdIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWxlID0gbmV3IFRpbGUobGF5ZXJEYXRhLCBpbmRleCwgeCwgeSwgbGF5ZXIudGlsZXNpemUsIGxheWVyLnRpbGVzaXplKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWxlID0gaW5zZXJ0TnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgVGlsZShsYXllckRhdGEsIC0xLCB4LCB5LCBsYXllci50aWxlc2l6ZSwgbGF5ZXIudGlsZXNpemUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKHRpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aWxlR3JpZC5wdXNoKHJvdyk7XHJcbiAgICAgICAgICAgIHJvdyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGF5ZXJEYXRhLmRhdGEgPSB0aWxlR3JpZDtcclxuXHJcbiAgICAgICAgdGlsZUxheWVycy5wdXNoKGxheWVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRpbGVMYXllcnM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlVGlsZUxheWVycztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/impact/ParseTileLayers.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/impact/ParseTilesets.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/impact/ParseTilesets.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Tileset = __webpack_require__(/*! ../../Tileset */ \"./node_modules/phaser/src/tilemaps/Tileset.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Impact.ParseTilesets\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - [description]\r\n *\r\n * @return {array} [description]\r\n */\r\nvar ParseTilesets = function (json)\r\n{\r\n    var tilesets = [];\r\n    var tilesetsNames = [];\r\n\r\n    for (var i = 0; i < json.layer.length; i++)\r\n    {\r\n        var layer = json.layer[i];\r\n\r\n        // A relative filepath to the source image (within Weltmeister) is used for the name\r\n        var tilesetName = layer.tilesetName;\r\n\r\n        // Only add unique tilesets that have a valid name. Collision layers will have a blank name.\r\n        if (tilesetName !== '' && tilesetsNames.indexOf(tilesetName) === -1)\r\n        {\r\n            tilesetsNames.push(tilesetName);\r\n\r\n            // Tiles are stored with an ID relative to the tileset, rather than a globally unique ID\r\n            // across all tilesets. Also, tilesets in Weltmeister have no margin or padding.\r\n            tilesets.push(new Tileset(tilesetName, 0, layer.tilesize, layer.tilesize, 0, 0));\r\n        }\r\n    }\r\n\r\n    return tilesets;\r\n};\r\n\r\nmodule.exports = ParseTilesets;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2ltcGFjdC9QYXJzZVRpbGVzZXRzLmpzP2VlZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxvRUFBZTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy9pbXBhY3QvUGFyc2VUaWxlc2V0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRpbGVzZXQgPSByZXF1aXJlKCcuLi8uLi9UaWxlc2V0Jyk7XHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuSW1wYWN0LlBhcnNlVGlsZXNldHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFBhcnNlVGlsZXNldHMgPSBmdW5jdGlvbiAoanNvbilcclxue1xyXG4gICAgdmFyIHRpbGVzZXRzID0gW107XHJcbiAgICB2YXIgdGlsZXNldHNOYW1lcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5sYXllci5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbGF5ZXIgPSBqc29uLmxheWVyW2ldO1xyXG5cclxuICAgICAgICAvLyBBIHJlbGF0aXZlIGZpbGVwYXRoIHRvIHRoZSBzb3VyY2UgaW1hZ2UgKHdpdGhpbiBXZWx0bWVpc3RlcikgaXMgdXNlZCBmb3IgdGhlIG5hbWVcclxuICAgICAgICB2YXIgdGlsZXNldE5hbWUgPSBsYXllci50aWxlc2V0TmFtZTtcclxuXHJcbiAgICAgICAgLy8gT25seSBhZGQgdW5pcXVlIHRpbGVzZXRzIHRoYXQgaGF2ZSBhIHZhbGlkIG5hbWUuIENvbGxpc2lvbiBsYXllcnMgd2lsbCBoYXZlIGEgYmxhbmsgbmFtZS5cclxuICAgICAgICBpZiAodGlsZXNldE5hbWUgIT09ICcnICYmIHRpbGVzZXRzTmFtZXMuaW5kZXhPZih0aWxlc2V0TmFtZSkgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGlsZXNldHNOYW1lcy5wdXNoKHRpbGVzZXROYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRpbGVzIGFyZSBzdG9yZWQgd2l0aCBhbiBJRCByZWxhdGl2ZSB0byB0aGUgdGlsZXNldCwgcmF0aGVyIHRoYW4gYSBnbG9iYWxseSB1bmlxdWUgSURcclxuICAgICAgICAgICAgLy8gYWNyb3NzIGFsbCB0aWxlc2V0cy4gQWxzbywgdGlsZXNldHMgaW4gV2VsdG1laXN0ZXIgaGF2ZSBubyBtYXJnaW4gb3IgcGFkZGluZy5cclxuICAgICAgICAgICAgdGlsZXNldHMucHVzaChuZXcgVGlsZXNldCh0aWxlc2V0TmFtZSwgMCwgbGF5ZXIudGlsZXNpemUsIGxheWVyLnRpbGVzaXplLCAwLCAwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aWxlc2V0cztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VUaWxlc2V0cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/impact/ParseTilesets.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/impact/ParseWeltmeister.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/impact/ParseWeltmeister.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ../../Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar MapData = __webpack_require__(/*! ../../mapdata/MapData */ \"./node_modules/phaser/src/tilemaps/mapdata/MapData.js\");\r\nvar ParseTileLayers = __webpack_require__(/*! ./ParseTileLayers */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseTileLayers.js\");\r\nvar ParseTilesets = __webpack_require__(/*! ./ParseTilesets */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseTilesets.js\");\r\n\r\n/**\r\n * Parses a Weltmeister JSON object into a new MapData object.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Impact.ParseWeltmeister\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tilemap, used to set the name on the MapData.\r\n * @param {object} json - The Weltmeister JSON object.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n *\r\n * @return {?object} [description]\r\n */\r\nvar ParseWeltmeister = function (name, json, insertNull)\r\n{\r\n    if (json.layer.length === 0)\r\n    {\r\n        console.warn('No layers found in the Weltmeister map: ' + name);\r\n        return null;\r\n    }\r\n\r\n    var width = 0;\r\n    var height = 0;\r\n\r\n    for (var i = 0; i < json.layer.length; i++)\r\n    {\r\n        if (json.layer[i].width > width) { width = json.layer[i].width; }\r\n        if (json.layer[i].height > height) { height = json.layer[i].height; }\r\n    }\r\n\r\n    var mapData = new MapData({\r\n        width: width,\r\n        height: height,\r\n        name: name,\r\n        tileWidth: json.layer[0].tilesize,\r\n        tileHeight: json.layer[0].tilesize,\r\n        format: Formats.WELTMEISTER\r\n    });\r\n\r\n    mapData.layers = ParseTileLayers(json, insertNull);\r\n    mapData.tilesets = ParseTilesets(json);\r\n\r\n    return mapData;\r\n};\r\n\r\nmodule.exports = ParseWeltmeister;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2ltcGFjdC9QYXJzZVdlbHRtZWlzdGVyLmpzP2NlZDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxvRUFBZTtBQUNyQyxjQUFjLG1CQUFPLENBQUMsb0ZBQXVCO0FBQzdDLHNCQUFzQixtQkFBTyxDQUFDLCtGQUFtQjtBQUNqRCxvQkFBb0IsbUJBQU8sQ0FBQywyRkFBaUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBLDBDQUEwQyw2QkFBNkI7QUFDdkUsNENBQTRDLCtCQUErQjtBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy9pbXBhY3QvUGFyc2VXZWx0bWVpc3Rlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZvcm1hdHMgPSByZXF1aXJlKCcuLi8uLi9Gb3JtYXRzJyk7XHJcbnZhciBNYXBEYXRhID0gcmVxdWlyZSgnLi4vLi4vbWFwZGF0YS9NYXBEYXRhJyk7XHJcbnZhciBQYXJzZVRpbGVMYXllcnMgPSByZXF1aXJlKCcuL1BhcnNlVGlsZUxheWVycycpO1xyXG52YXIgUGFyc2VUaWxlc2V0cyA9IHJlcXVpcmUoJy4vUGFyc2VUaWxlc2V0cycpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFdlbHRtZWlzdGVyIEpTT04gb2JqZWN0IGludG8gYSBuZXcgTWFwRGF0YSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5JbXBhY3QuUGFyc2VXZWx0bWVpc3RlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGlsZW1hcCwgdXNlZCB0byBzZXQgdGhlIG5hbWUgb24gdGhlIE1hcERhdGEuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIFdlbHRtZWlzdGVyIEpTT04gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluc2VydE51bGwgLSBDb250cm9scyBob3cgZW1wdHkgdGlsZXMsIHRpbGVzIHdpdGggYW4gaW5kZXggb2YgLTEsIGluIHRoZSBtYXBcclxuICogZGF0YSBhcmUgaGFuZGxlZC4gSWYgYHRydWVgLCBlbXB0eSBsb2NhdGlvbnMgd2lsbCBnZXQgYSB2YWx1ZSBvZiBgbnVsbGAuIElmIGBmYWxzZWAsIGVtcHR5XHJcbiAqIGxvY2F0aW9uIHdpbGwgZ2V0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS4gSWYgeW91J3ZlIGEgbGFyZ2Ugc3BhcnNlbHkgcG9wdWxhdGVkIG1hcCBhbmRcclxuICogdGhlIHRpbGUgZGF0YSBkb2Vzbid0IG5lZWQgdG8gY2hhbmdlIHRoZW4gc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCB3aWxsIGhlbHAgd2l0aCBtZW1vcnlcclxuICogY29uc3VtcHRpb24uIEhvd2V2ZXIgaWYgeW91ciBtYXAgaXMgc21hbGwgb3IgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSB0aWxlcyBkeW5hbWljYWxseSwgdGhlbiBsZWF2ZVxyXG4gKiB0aGUgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4gez9vYmplY3R9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQYXJzZVdlbHRtZWlzdGVyID0gZnVuY3Rpb24gKG5hbWUsIGpzb24sIGluc2VydE51bGwpXHJcbntcclxuICAgIGlmIChqc29uLmxheWVyLmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIGxheWVycyBmb3VuZCBpbiB0aGUgV2VsdG1laXN0ZXIgbWFwOiAnICsgbmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHdpZHRoID0gMDtcclxuICAgIHZhciBoZWlnaHQgPSAwO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5sYXllci5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpZiAoanNvbi5sYXllcltpXS53aWR0aCA+IHdpZHRoKSB7IHdpZHRoID0ganNvbi5sYXllcltpXS53aWR0aDsgfVxyXG4gICAgICAgIGlmIChqc29uLmxheWVyW2ldLmhlaWdodCA+IGhlaWdodCkgeyBoZWlnaHQgPSBqc29uLmxheWVyW2ldLmhlaWdodDsgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBtYXBEYXRhID0gbmV3IE1hcERhdGEoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIHRpbGVXaWR0aDoganNvbi5sYXllclswXS50aWxlc2l6ZSxcclxuICAgICAgICB0aWxlSGVpZ2h0OiBqc29uLmxheWVyWzBdLnRpbGVzaXplLFxyXG4gICAgICAgIGZvcm1hdDogRm9ybWF0cy5XRUxUTUVJU1RFUlxyXG4gICAgfSk7XHJcblxyXG4gICAgbWFwRGF0YS5sYXllcnMgPSBQYXJzZVRpbGVMYXllcnMoanNvbiwgaW5zZXJ0TnVsbCk7XHJcbiAgICBtYXBEYXRhLnRpbGVzZXRzID0gUGFyc2VUaWxlc2V0cyhqc29uKTtcclxuXHJcbiAgICByZXR1cm4gbWFwRGF0YTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VXZWx0bWVpc3RlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/impact/ParseWeltmeister.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/impact/index.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/impact/index.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps.Parsers.Impact\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ParseTileLayers: __webpack_require__(/*! ./ParseTileLayers */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseTileLayers.js\"),\r\n    ParseTilesets: __webpack_require__(/*! ./ParseTilesets */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseTilesets.js\"),\r\n    ParseWeltmeister: __webpack_require__(/*! ./ParseWeltmeister */ \"./node_modules/phaser/src/tilemaps/parsers/impact/ParseWeltmeister.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2ltcGFjdC9pbmRleC5qcz9kN2FmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsK0ZBQW1CO0FBQ2hELG1CQUFtQixtQkFBTyxDQUFDLDJGQUFpQjtBQUM1QyxzQkFBc0IsbUJBQU8sQ0FBQyxpR0FBb0I7O0FBRWxEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy9pbXBhY3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5UaWxlbWFwcy5QYXJzZXJzLkltcGFjdFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFBhcnNlVGlsZUxheWVyczogcmVxdWlyZSgnLi9QYXJzZVRpbGVMYXllcnMnKSxcclxuICAgIFBhcnNlVGlsZXNldHM6IHJlcXVpcmUoJy4vUGFyc2VUaWxlc2V0cycpLFxyXG4gICAgUGFyc2VXZWx0bWVpc3RlcjogcmVxdWlyZSgnLi9QYXJzZVdlbHRtZWlzdGVyJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/impact/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps.Parsers\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Parse: __webpack_require__(/*! ./Parse */ \"./node_modules/phaser/src/tilemaps/parsers/Parse.js\"),\r\n    Parse2DArray: __webpack_require__(/*! ./Parse2DArray */ \"./node_modules/phaser/src/tilemaps/parsers/Parse2DArray.js\"),\r\n    ParseCSV: __webpack_require__(/*! ./ParseCSV */ \"./node_modules/phaser/src/tilemaps/parsers/ParseCSV.js\"),\r\n\r\n    Impact: __webpack_require__(/*! ./impact/ */ \"./node_modules/phaser/src/tilemaps/parsers/impact/index.js\"),\r\n    Tiled: __webpack_require__(/*! ./tiled/ */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2luZGV4LmpzP2Y5NjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsb0VBQVM7QUFDNUIsa0JBQWtCLG1CQUFPLENBQUMsa0ZBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTs7QUFFbEMsWUFBWSxtQkFBTyxDQUFDLDZFQUFXO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQywyRUFBVTs7QUFFN0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vyc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFBhcnNlOiByZXF1aXJlKCcuL1BhcnNlJyksXHJcbiAgICBQYXJzZTJEQXJyYXk6IHJlcXVpcmUoJy4vUGFyc2UyREFycmF5JyksXHJcbiAgICBQYXJzZUNTVjogcmVxdWlyZSgnLi9QYXJzZUNTVicpLFxyXG5cclxuICAgIEltcGFjdDogcmVxdWlyZSgnLi9pbXBhY3QvJyksXHJcbiAgICBUaWxlZDogcmVxdWlyZSgnLi90aWxlZC8nKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/AssignTileProperties.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/AssignTileProperties.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extend = __webpack_require__(/*! ../../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * Copy properties from tileset to tiles.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.AssignTileProperties\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tilemaps.MapData} mapData - [description]\r\n */\r\nvar AssignTileProperties = function (mapData)\r\n{\r\n    var layerData;\r\n    var tile;\r\n    var sid;\r\n    var set;\r\n    var row;\r\n\r\n    // go through each of the map data layers\r\n    for (var i = 0; i < mapData.layers.length; i++)\r\n    {\r\n        layerData = mapData.layers[i];\r\n\r\n        set = null;\r\n\r\n        // rows of tiles\r\n        for (var j = 0; j < layerData.data.length; j++)\r\n        {\r\n            row = layerData.data[j];\r\n\r\n            // individual tiles\r\n            for (var k = 0; k < row.length; k++)\r\n            {\r\n                tile = row[k];\r\n\r\n                if (tile === null || tile.index < 0)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                // find the relevant tileset\r\n                sid = mapData.tiles[tile.index][2];\r\n                set = mapData.tilesets[sid];\r\n\r\n                // Ensure that a tile's size matches its tileset\r\n                tile.width = set.tileWidth;\r\n                tile.height = set.tileHeight;\r\n\r\n                // if that tile type has any properties, add them to the tile object\r\n                if (set.tileProperties && set.tileProperties[tile.index - set.firstgid])\r\n                {\r\n                    tile.properties = Extend(\r\n                        tile.properties, set.tileProperties[tile.index - set.firstgid]\r\n                    );\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = AssignTileProperties;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL0Fzc2lnblRpbGVQcm9wZXJ0aWVzLmpzP2U3N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxzRkFBOEI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsZ0JBQWdCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9Bc3NpZ25UaWxlUHJvcGVydGllcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHByb3BlcnRpZXMgZnJvbSB0aWxlc2V0IHRvIHRpbGVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuVGlsZWQuQXNzaWduVGlsZVByb3BlcnRpZXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLk1hcERhdGF9IG1hcERhdGEgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQXNzaWduVGlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAobWFwRGF0YSlcclxue1xyXG4gICAgdmFyIGxheWVyRGF0YTtcclxuICAgIHZhciB0aWxlO1xyXG4gICAgdmFyIHNpZDtcclxuICAgIHZhciBzZXQ7XHJcbiAgICB2YXIgcm93O1xyXG5cclxuICAgIC8vIGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgbWFwIGRhdGEgbGF5ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcERhdGEubGF5ZXJzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGxheWVyRGF0YSA9IG1hcERhdGEubGF5ZXJzW2ldO1xyXG5cclxuICAgICAgICBzZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyByb3dzIG9mIHRpbGVzXHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsYXllckRhdGEuZGF0YS5sZW5ndGg7IGorKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJvdyA9IGxheWVyRGF0YS5kYXRhW2pdO1xyXG5cclxuICAgICAgICAgICAgLy8gaW5kaXZpZHVhbCB0aWxlc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJvdy5sZW5ndGg7IGsrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGlsZSA9IHJvd1trXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGlsZSA9PT0gbnVsbCB8fCB0aWxlLmluZGV4IDwgMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSByZWxldmFudCB0aWxlc2V0XHJcbiAgICAgICAgICAgICAgICBzaWQgPSBtYXBEYXRhLnRpbGVzW3RpbGUuaW5kZXhdWzJdO1xyXG4gICAgICAgICAgICAgICAgc2V0ID0gbWFwRGF0YS50aWxlc2V0c1tzaWRdO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGEgdGlsZSdzIHNpemUgbWF0Y2hlcyBpdHMgdGlsZXNldFxyXG4gICAgICAgICAgICAgICAgdGlsZS53aWR0aCA9IHNldC50aWxlV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aWxlLmhlaWdodCA9IHNldC50aWxlSGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoYXQgdGlsZSB0eXBlIGhhcyBhbnkgcHJvcGVydGllcywgYWRkIHRoZW0gdG8gdGhlIHRpbGUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAoc2V0LnRpbGVQcm9wZXJ0aWVzICYmIHNldC50aWxlUHJvcGVydGllc1t0aWxlLmluZGV4IC0gc2V0LmZpcnN0Z2lkXSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWxlLnByb3BlcnRpZXMgPSBFeHRlbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucHJvcGVydGllcywgc2V0LnRpbGVQcm9wZXJ0aWVzW3RpbGUuaW5kZXggLSBzZXQuZmlyc3RnaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXNzaWduVGlsZVByb3BlcnRpZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/AssignTileProperties.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/Base64Decode.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/Base64Decode.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Decode base-64 encoded data, for example as exported by Tiled.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.Base64Decode\r\n * @since 3.0.0\r\n *\r\n * @param {object} data - Base-64 encoded data to decode.\r\n *\r\n * @return {array} Array containing the decoded bytes.\r\n */\r\nvar Base64Decode = function (data)\r\n{\r\n    var binaryString = window.atob(data);\r\n    var len = binaryString.length;\r\n    var bytes = new Array(len / 4);\r\n\r\n    // Interpret binaryString as an array of bytes representing little-endian encoded uint32 values.\r\n    for (var i = 0; i < len; i += 4)\r\n    {\r\n        bytes[i / 4] = (\r\n            binaryString.charCodeAt(i) |\r\n            binaryString.charCodeAt(i + 1) << 8 |\r\n            binaryString.charCodeAt(i + 2) << 16 |\r\n            binaryString.charCodeAt(i + 3) << 24\r\n        ) >>> 0;\r\n    }\r\n\r\n    return bytes;\r\n};\r\n\r\nmodule.exports = Base64Decode;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL0Jhc2U2NERlY29kZS5qcz9kOWZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9CYXNlNjREZWNvZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZWNvZGUgYmFzZS02NCBlbmNvZGVkIGRhdGEsIGZvciBleGFtcGxlIGFzIGV4cG9ydGVkIGJ5IFRpbGVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuVGlsZWQuQmFzZTY0RGVjb2RlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEJhc2UtNjQgZW5jb2RlZCBkYXRhIHRvIGRlY29kZS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFycmF5IGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgYnl0ZXMuXHJcbiAqL1xyXG52YXIgQmFzZTY0RGVjb2RlID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHZhciBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihkYXRhKTtcclxuICAgIHZhciBsZW4gPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xyXG4gICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xyXG5cclxuICAgIC8vIEludGVycHJldCBiaW5hcnlTdHJpbmcgYXMgYW4gYXJyYXkgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIGxpdHRsZS1lbmRpYW4gZW5jb2RlZCB1aW50MzIgdmFsdWVzLlxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNClcclxuICAgIHtcclxuICAgICAgICBieXRlc1tpIC8gNF0gPSAoXHJcbiAgICAgICAgICAgIGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpIHxcclxuICAgICAgICAgICAgYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpIDw8IDggfFxyXG4gICAgICAgICAgICBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpICsgMikgPDwgMTYgfFxyXG4gICAgICAgICAgICBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpICsgMykgPDwgMjRcclxuICAgICAgICApID4+PiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBieXRlcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZTY0RGVjb2RlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/Base64Decode.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/BuildTilesetIndex.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/BuildTilesetIndex.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Master list of tiles -> x, y, index in tileset.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.BuildTilesetIndex\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tilemaps.MapData} mapData - [description]\r\n *\r\n * @return {array} [description]\r\n */\r\nvar BuildTilesetIndex = function (mapData)\r\n{\r\n    var tiles = [];\r\n\r\n    for (var i = 0; i < mapData.tilesets.length; i++)\r\n    {\r\n        var set = mapData.tilesets[i];\r\n\r\n        var x = set.tileMargin;\r\n        var y = set.tileMargin;\r\n\r\n        var count = 0;\r\n        var countX = 0;\r\n        var countY = 0;\r\n\r\n        for (var t = set.firstgid; t < set.firstgid + set.total; t++)\r\n        {\r\n            //  Can add extra properties here as needed\r\n            tiles[t] = [ x, y, i ];\r\n\r\n            x += set.tileWidth + set.tileSpacing;\r\n\r\n            count++;\r\n\r\n            if (count === set.total)\r\n            {\r\n                break;\r\n            }\r\n\r\n            countX++;\r\n\r\n            if (countX === set.columns)\r\n            {\r\n                x = set.tileMargin;\r\n                y += set.tileHeight + set.tileSpacing;\r\n\r\n                countX = 0;\r\n                countY++;\r\n\r\n                if (countY === set.rows)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return tiles;\r\n};\r\n\r\nmodule.exports = BuildTilesetIndex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL0J1aWxkVGlsZXNldEluZGV4LmpzPzQwMDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiw2QkFBNkI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsOEJBQThCO0FBQ2hFO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL0J1aWxkVGlsZXNldEluZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTWFzdGVyIGxpc3Qgb2YgdGlsZXMgLT4geCwgeSwgaW5kZXggaW4gdGlsZXNldC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5QYXJzZXJzLlRpbGVkLkJ1aWxkVGlsZXNldEluZGV4XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5NYXBEYXRhfSBtYXBEYXRhIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEJ1aWxkVGlsZXNldEluZGV4ID0gZnVuY3Rpb24gKG1hcERhdGEpXHJcbntcclxuICAgIHZhciB0aWxlcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwRGF0YS50aWxlc2V0cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgc2V0ID0gbWFwRGF0YS50aWxlc2V0c1tpXTtcclxuXHJcbiAgICAgICAgdmFyIHggPSBzZXQudGlsZU1hcmdpbjtcclxuICAgICAgICB2YXIgeSA9IHNldC50aWxlTWFyZ2luO1xyXG5cclxuICAgICAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgICAgIHZhciBjb3VudFggPSAwO1xyXG4gICAgICAgIHZhciBjb3VudFkgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB0ID0gc2V0LmZpcnN0Z2lkOyB0IDwgc2V0LmZpcnN0Z2lkICsgc2V0LnRvdGFsOyB0KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2FuIGFkZCBleHRyYSBwcm9wZXJ0aWVzIGhlcmUgYXMgbmVlZGVkXHJcbiAgICAgICAgICAgIHRpbGVzW3RdID0gWyB4LCB5LCBpIF07XHJcblxyXG4gICAgICAgICAgICB4ICs9IHNldC50aWxlV2lkdGggKyBzZXQudGlsZVNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSBzZXQudG90YWwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3VudFgrKztcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3VudFggPT09IHNldC5jb2x1bW5zKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB4ID0gc2V0LnRpbGVNYXJnaW47XHJcbiAgICAgICAgICAgICAgICB5ICs9IHNldC50aWxlSGVpZ2h0ICsgc2V0LnRpbGVTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvdW50WCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb3VudFkrKztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnRZID09PSBzZXQucm93cylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGlsZXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkVGlsZXNldEluZGV4O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/BuildTilesetIndex.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Seth Berrier <berriers@uwstout.edu>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * Parse a Tiled group layer and create a state object for inheriting.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.CreateGroupLayer\r\n * @since 3.21.0\r\n *\r\n * @param {object} json - The Tiled JSON object.\r\n * @param {object} [currentl] - The current group layer from the Tiled JSON file.\r\n * @param {object} [parentstate] - The state of the parent group (if any).\r\n *\r\n * @return {object} A group state object with proper values for updating children layers.\r\n */\r\nvar CreateGroupLayer = function (json, groupl, parentstate)\r\n{\r\n    if (!groupl)\r\n    {\r\n        // Return a default group state object\r\n        return {\r\n            i: 0, // Current layer array iterator\r\n            layers: json.layers, // Current array of layers\r\n\r\n            // Values inherited from parent group\r\n            name: '',\r\n            opacity: 1,\r\n            visible: true,\r\n            x: 0,\r\n            y: 0\r\n        };\r\n    }\r\n\r\n    // Compute group layer x, y\r\n    var layerX = groupl.x + GetFastValue(groupl, 'startx', 0) * json.tilewidth + GetFastValue(groupl, 'offsetx', 0);\r\n    var layerY = groupl.y + GetFastValue(groupl, 'starty', 0) * json.tileheight + GetFastValue(groupl, 'offsety', 0);\r\n\r\n    // Compute next state inherited from group\r\n    return {\r\n        i: 0,\r\n        layers: groupl.layers,\r\n        name: parentstate.name + groupl.name + '/',\r\n        opacity: parentstate.opacity * groupl.opacity,\r\n        visible: parentstate.visible && groupl.visible,\r\n        x: parentstate.x + layerX,\r\n        y: parentstate.y + layerY\r\n    };\r\n};\r\n\r\nmodule.exports = CreateGroupLayer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL0NyZWF0ZUdyb3VwTGF5ZXIuanM/M2ZlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsa0dBQW9DOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3RpbGVtYXBzL3BhcnNlcnMvdGlsZWQvQ3JlYXRlR3JvdXBMYXllci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFNldGggQmVycmllciA8YmVycmllcnNAdXdzdG91dC5lZHU+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGEgVGlsZWQgZ3JvdXAgbGF5ZXIgYW5kIGNyZWF0ZSBhIHN0YXRlIG9iamVjdCBmb3IgaW5oZXJpdGluZy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5QYXJzZXJzLlRpbGVkLkNyZWF0ZUdyb3VwTGF5ZXJcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIFRoZSBUaWxlZCBKU09OIG9iamVjdC5cclxuICogQHBhcmFtIHtvYmplY3R9IFtjdXJyZW50bF0gLSBUaGUgY3VycmVudCBncm91cCBsYXllciBmcm9tIHRoZSBUaWxlZCBKU09OIGZpbGUuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyZW50c3RhdGVdIC0gVGhlIHN0YXRlIG9mIHRoZSBwYXJlbnQgZ3JvdXAgKGlmIGFueSkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gQSBncm91cCBzdGF0ZSBvYmplY3Qgd2l0aCBwcm9wZXIgdmFsdWVzIGZvciB1cGRhdGluZyBjaGlsZHJlbiBsYXllcnMuXHJcbiAqL1xyXG52YXIgQ3JlYXRlR3JvdXBMYXllciA9IGZ1bmN0aW9uIChqc29uLCBncm91cGwsIHBhcmVudHN0YXRlKVxyXG57XHJcbiAgICBpZiAoIWdyb3VwbClcclxuICAgIHtcclxuICAgICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IGdyb3VwIHN0YXRlIG9iamVjdFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGk6IDAsIC8vIEN1cnJlbnQgbGF5ZXIgYXJyYXkgaXRlcmF0b3JcclxuICAgICAgICAgICAgbGF5ZXJzOiBqc29uLmxheWVycywgLy8gQ3VycmVudCBhcnJheSBvZiBsYXllcnNcclxuXHJcbiAgICAgICAgICAgIC8vIFZhbHVlcyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgZ3JvdXBcclxuICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXB1dGUgZ3JvdXAgbGF5ZXIgeCwgeVxyXG4gICAgdmFyIGxheWVyWCA9IGdyb3VwbC54ICsgR2V0RmFzdFZhbHVlKGdyb3VwbCwgJ3N0YXJ0eCcsIDApICoganNvbi50aWxld2lkdGggKyBHZXRGYXN0VmFsdWUoZ3JvdXBsLCAnb2Zmc2V0eCcsIDApO1xyXG4gICAgdmFyIGxheWVyWSA9IGdyb3VwbC55ICsgR2V0RmFzdFZhbHVlKGdyb3VwbCwgJ3N0YXJ0eScsIDApICoganNvbi50aWxlaGVpZ2h0ICsgR2V0RmFzdFZhbHVlKGdyb3VwbCwgJ29mZnNldHknLCAwKTtcclxuXHJcbiAgICAvLyBDb21wdXRlIG5leHQgc3RhdGUgaW5oZXJpdGVkIGZyb20gZ3JvdXBcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaTogMCxcclxuICAgICAgICBsYXllcnM6IGdyb3VwbC5sYXllcnMsXHJcbiAgICAgICAgbmFtZTogcGFyZW50c3RhdGUubmFtZSArIGdyb3VwbC5uYW1lICsgJy8nLFxyXG4gICAgICAgIG9wYWNpdHk6IHBhcmVudHN0YXRlLm9wYWNpdHkgKiBncm91cGwub3BhY2l0eSxcclxuICAgICAgICB2aXNpYmxlOiBwYXJlbnRzdGF0ZS52aXNpYmxlICYmIGdyb3VwbC52aXNpYmxlLFxyXG4gICAgICAgIHg6IHBhcmVudHN0YXRlLnggKyBsYXllclgsXHJcbiAgICAgICAgeTogcGFyZW50c3RhdGUueSArIGxheWVyWVxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlR3JvdXBMYXllcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FLIPPED_HORIZONTAL = 0x80000000;\r\nvar FLIPPED_VERTICAL = 0x40000000;\r\nvar FLIPPED_ANTI_DIAGONAL = 0x20000000; // Top-right is swapped with bottom-left corners\r\n\r\n/**\r\n * See Tiled documentation on tile flipping:\r\n * http://docs.mapeditor.org/en/latest/reference/tmx-map-format/\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseGID\r\n * @since 3.0.0\r\n *\r\n * @param {number} gid - [description]\r\n *\r\n * @return {object} [description]\r\n */\r\nvar ParseGID = function (gid)\r\n{\r\n    var flippedHorizontal = Boolean(gid & FLIPPED_HORIZONTAL);\r\n    var flippedVertical = Boolean(gid & FLIPPED_VERTICAL);\r\n    var flippedAntiDiagonal = Boolean(gid & FLIPPED_ANTI_DIAGONAL);\r\n    gid = gid & ~(FLIPPED_HORIZONTAL | FLIPPED_VERTICAL | FLIPPED_ANTI_DIAGONAL);\r\n\r\n    // Parse the flip flags into something Phaser can use\r\n    var rotation = 0;\r\n    var flipped = false;\r\n\r\n    if (flippedHorizontal && flippedVertical && flippedAntiDiagonal)\r\n    {\r\n        rotation = Math.PI / 2;\r\n        flipped = true;\r\n    }\r\n    else if (flippedHorizontal && flippedVertical && !flippedAntiDiagonal)\r\n    {\r\n        rotation = Math.PI;\r\n        flipped = false;\r\n    }\r\n    else if (flippedHorizontal && !flippedVertical && flippedAntiDiagonal)\r\n    {\r\n        rotation = Math.PI / 2;\r\n        flipped = false;\r\n    }\r\n    else if (flippedHorizontal && !flippedVertical && !flippedAntiDiagonal)\r\n    {\r\n        rotation = 0;\r\n        flipped = true;\r\n    }\r\n    else if (!flippedHorizontal && flippedVertical && flippedAntiDiagonal)\r\n    {\r\n        rotation = 3 * Math.PI / 2;\r\n        flipped = false;\r\n    }\r\n    else if (!flippedHorizontal && flippedVertical && !flippedAntiDiagonal)\r\n    {\r\n        rotation = Math.PI;\r\n        flipped = true;\r\n    }\r\n    else if (!flippedHorizontal && !flippedVertical && flippedAntiDiagonal)\r\n    {\r\n        rotation = 3 * Math.PI / 2;\r\n        flipped = true;\r\n    }\r\n    else if (!flippedHorizontal && !flippedVertical && !flippedAntiDiagonal)\r\n    {\r\n        rotation = 0;\r\n        flipped = false;\r\n    }\r\n\r\n    return {\r\n        gid: gid,\r\n        flippedHorizontal: flippedHorizontal,\r\n        flippedVertical: flippedVertical,\r\n        flippedAntiDiagonal: flippedAntiDiagonal,\r\n        rotation: rotation,\r\n        flipped: flipped\r\n    };\r\n};\r\n\r\nmodule.exports = ParseGID;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlR0lELmpzPzY1NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlR0lELmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRkxJUFBFRF9IT1JJWk9OVEFMID0gMHg4MDAwMDAwMDtcclxudmFyIEZMSVBQRURfVkVSVElDQUwgPSAweDQwMDAwMDAwO1xyXG52YXIgRkxJUFBFRF9BTlRJX0RJQUdPTkFMID0gMHgyMDAwMDAwMDsgLy8gVG9wLXJpZ2h0IGlzIHN3YXBwZWQgd2l0aCBib3R0b20tbGVmdCBjb3JuZXJzXHJcblxyXG4vKipcclxuICogU2VlIFRpbGVkIGRvY3VtZW50YXRpb24gb24gdGlsZSBmbGlwcGluZzpcclxuICogaHR0cDovL2RvY3MubWFwZWRpdG9yLm9yZy9lbi9sYXRlc3QvcmVmZXJlbmNlL3RteC1tYXAtZm9ybWF0L1xyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlRpbGVtYXBzLlBhcnNlcnMuVGlsZWQuUGFyc2VHSURcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBnaWQgLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFBhcnNlR0lEID0gZnVuY3Rpb24gKGdpZClcclxue1xyXG4gICAgdmFyIGZsaXBwZWRIb3Jpem9udGFsID0gQm9vbGVhbihnaWQgJiBGTElQUEVEX0hPUklaT05UQUwpO1xyXG4gICAgdmFyIGZsaXBwZWRWZXJ0aWNhbCA9IEJvb2xlYW4oZ2lkICYgRkxJUFBFRF9WRVJUSUNBTCk7XHJcbiAgICB2YXIgZmxpcHBlZEFudGlEaWFnb25hbCA9IEJvb2xlYW4oZ2lkICYgRkxJUFBFRF9BTlRJX0RJQUdPTkFMKTtcclxuICAgIGdpZCA9IGdpZCAmIH4oRkxJUFBFRF9IT1JJWk9OVEFMIHwgRkxJUFBFRF9WRVJUSUNBTCB8IEZMSVBQRURfQU5USV9ESUFHT05BTCk7XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIGZsaXAgZmxhZ3MgaW50byBzb21ldGhpbmcgUGhhc2VyIGNhbiB1c2VcclxuICAgIHZhciByb3RhdGlvbiA9IDA7XHJcbiAgICB2YXIgZmxpcHBlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChmbGlwcGVkSG9yaXpvbnRhbCAmJiBmbGlwcGVkVmVydGljYWwgJiYgZmxpcHBlZEFudGlEaWFnb25hbClcclxuICAgIHtcclxuICAgICAgICByb3RhdGlvbiA9IE1hdGguUEkgLyAyO1xyXG4gICAgICAgIGZsaXBwZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmxpcHBlZEhvcml6b250YWwgJiYgZmxpcHBlZFZlcnRpY2FsICYmICFmbGlwcGVkQW50aURpYWdvbmFsKVxyXG4gICAge1xyXG4gICAgICAgIHJvdGF0aW9uID0gTWF0aC5QSTtcclxuICAgICAgICBmbGlwcGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmbGlwcGVkSG9yaXpvbnRhbCAmJiAhZmxpcHBlZFZlcnRpY2FsICYmIGZsaXBwZWRBbnRpRGlhZ29uYWwpXHJcbiAgICB7XHJcbiAgICAgICAgcm90YXRpb24gPSBNYXRoLlBJIC8gMjtcclxuICAgICAgICBmbGlwcGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmbGlwcGVkSG9yaXpvbnRhbCAmJiAhZmxpcHBlZFZlcnRpY2FsICYmICFmbGlwcGVkQW50aURpYWdvbmFsKVxyXG4gICAge1xyXG4gICAgICAgIHJvdGF0aW9uID0gMDtcclxuICAgICAgICBmbGlwcGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFmbGlwcGVkSG9yaXpvbnRhbCAmJiBmbGlwcGVkVmVydGljYWwgJiYgZmxpcHBlZEFudGlEaWFnb25hbClcclxuICAgIHtcclxuICAgICAgICByb3RhdGlvbiA9IDMgKiBNYXRoLlBJIC8gMjtcclxuICAgICAgICBmbGlwcGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghZmxpcHBlZEhvcml6b250YWwgJiYgZmxpcHBlZFZlcnRpY2FsICYmICFmbGlwcGVkQW50aURpYWdvbmFsKVxyXG4gICAge1xyXG4gICAgICAgIHJvdGF0aW9uID0gTWF0aC5QSTtcclxuICAgICAgICBmbGlwcGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFmbGlwcGVkSG9yaXpvbnRhbCAmJiAhZmxpcHBlZFZlcnRpY2FsICYmIGZsaXBwZWRBbnRpRGlhZ29uYWwpXHJcbiAgICB7XHJcbiAgICAgICAgcm90YXRpb24gPSAzICogTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgZmxpcHBlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghZmxpcHBlZEhvcml6b250YWwgJiYgIWZsaXBwZWRWZXJ0aWNhbCAmJiAhZmxpcHBlZEFudGlEaWFnb25hbClcclxuICAgIHtcclxuICAgICAgICByb3RhdGlvbiA9IDA7XHJcbiAgICAgICAgZmxpcHBlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2lkOiBnaWQsXHJcbiAgICAgICAgZmxpcHBlZEhvcml6b250YWw6IGZsaXBwZWRIb3Jpem9udGFsLFxyXG4gICAgICAgIGZsaXBwZWRWZXJ0aWNhbDogZmxpcHBlZFZlcnRpY2FsLFxyXG4gICAgICAgIGZsaXBwZWRBbnRpRGlhZ29uYWw6IGZsaXBwZWRBbnRpRGlhZ29uYWwsXHJcbiAgICAgICAgcm90YXRpb246IHJvdGF0aW9uLFxyXG4gICAgICAgIGZsaXBwZWQ6IGZsaXBwZWRcclxuICAgIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlR0lEO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseImageLayers.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseImageLayers.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar CreateGroupLayer = __webpack_require__(/*! ./CreateGroupLayer */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js\");\r\n\r\n/**\r\n * Parses a Tiled JSON object into an array of objects with details about the image layers.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseImageLayers\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - The Tiled JSON object.\r\n *\r\n * @return {array} Array of objects that include critical info about the map's image layers\r\n */\r\nvar ParseImageLayers = function (json)\r\n{\r\n    var images = [];\r\n\r\n    // State inherited from a parent group\r\n    var groupStack = [];\r\n    var curGroupState = CreateGroupLayer(json);\r\n\r\n    while (curGroupState.i < curGroupState.layers.length || groupStack.length > 0)\r\n    {\r\n        if (curGroupState.i >= curGroupState.layers.length)\r\n        {\r\n            // Ensure recursion stack is not empty first\r\n            if (groupStack.length < 1)\r\n            {\r\n                console.warn(\r\n                    'TilemapParser.parseTiledJSON - Invalid layer group hierarchy'\r\n                );\r\n                break;\r\n            }\r\n\r\n            // Return to previous recursive state\r\n            curGroupState = groupStack.pop();\r\n            continue;\r\n        }\r\n\r\n        // Get current layer and advance iterator\r\n        var curi = curGroupState.layers[curGroupState.i];\r\n        curGroupState.i++;\r\n\r\n        if (curi.type !== 'imagelayer')\r\n        {\r\n            if (curi.type === 'group')\r\n            {\r\n                // Compute next state inherited from group\r\n                var nextGroupState = CreateGroupLayer(json, curi, curGroupState);\r\n\r\n                // Preserve current state before recursing\r\n                groupStack.push(curGroupState);\r\n                curGroupState = nextGroupState;\r\n            }\r\n\r\n            // Skip this layer OR 'recurse' (iterative style) into the group\r\n            continue;\r\n        }\r\n\r\n        var layerOffsetX = GetFastValue(curi, 'offsetx', 0) + GetFastValue(curi, 'startx', 0);\r\n        var layerOffsetY = GetFastValue(curi, 'offsety', 0) + GetFastValue(curi, 'starty', 0);\r\n        images.push({\r\n            name: (curGroupState.name + curi.name),\r\n            image: curi.image,\r\n            x: (curGroupState.x + layerOffsetX + curi.x),\r\n            y: (curGroupState.y + layerOffsetY + curi.y),\r\n            alpha: (curGroupState.opacity * curi.opacity),\r\n            visible: (curGroupState.visible && curi.visible),\r\n            properties: GetFastValue(curi, 'properties', {})\r\n        });\r\n    }\r\n\r\n    return images;\r\n};\r\n\r\nmodule.exports = ParseImageLayers;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlSW1hZ2VMYXllcnMuanM/MWNmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsa0dBQW9DO0FBQy9ELHVCQUF1QixtQkFBTyxDQUFDLGdHQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNELFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9QYXJzZUltYWdlTGF5ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgQ3JlYXRlR3JvdXBMYXllciA9IHJlcXVpcmUoJy4vQ3JlYXRlR3JvdXBMYXllcicpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFRpbGVkIEpTT04gb2JqZWN0IGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGRldGFpbHMgYWJvdXQgdGhlIGltYWdlIGxheWVycy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5UaWxlbWFwcy5QYXJzZXJzLlRpbGVkLlBhcnNlSW1hZ2VMYXllcnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gQXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGluY2x1ZGUgY3JpdGljYWwgaW5mbyBhYm91dCB0aGUgbWFwJ3MgaW1hZ2UgbGF5ZXJzXHJcbiAqL1xyXG52YXIgUGFyc2VJbWFnZUxheWVycyA9IGZ1bmN0aW9uIChqc29uKVxyXG57XHJcbiAgICB2YXIgaW1hZ2VzID0gW107XHJcblxyXG4gICAgLy8gU3RhdGUgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgZ3JvdXBcclxuICAgIHZhciBncm91cFN0YWNrID0gW107XHJcbiAgICB2YXIgY3VyR3JvdXBTdGF0ZSA9IENyZWF0ZUdyb3VwTGF5ZXIoanNvbik7XHJcblxyXG4gICAgd2hpbGUgKGN1ckdyb3VwU3RhdGUuaSA8IGN1ckdyb3VwU3RhdGUubGF5ZXJzLmxlbmd0aCB8fCBncm91cFN0YWNrLmxlbmd0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGN1ckdyb3VwU3RhdGUuaSA+PSBjdXJHcm91cFN0YXRlLmxheWVycy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBFbnN1cmUgcmVjdXJzaW9uIHN0YWNrIGlzIG5vdCBlbXB0eSBmaXJzdFxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBTdGFjay5sZW5ndGggPCAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgJ1RpbGVtYXBQYXJzZXIucGFyc2VUaWxlZEpTT04gLSBJbnZhbGlkIGxheWVyIGdyb3VwIGhpZXJhcmNoeSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIHRvIHByZXZpb3VzIHJlY3Vyc2l2ZSBzdGF0ZVxyXG4gICAgICAgICAgICBjdXJHcm91cFN0YXRlID0gZ3JvdXBTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBHZXQgY3VycmVudCBsYXllciBhbmQgYWR2YW5jZSBpdGVyYXRvclxyXG4gICAgICAgIHZhciBjdXJpID0gY3VyR3JvdXBTdGF0ZS5sYXllcnNbY3VyR3JvdXBTdGF0ZS5pXTtcclxuICAgICAgICBjdXJHcm91cFN0YXRlLmkrKztcclxuXHJcbiAgICAgICAgaWYgKGN1cmkudHlwZSAhPT0gJ2ltYWdlbGF5ZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGN1cmkudHlwZSA9PT0gJ2dyb3VwJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IHN0YXRlIGluaGVyaXRlZCBmcm9tIGdyb3VwXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dEdyb3VwU3RhdGUgPSBDcmVhdGVHcm91cExheWVyKGpzb24sIGN1cmksIGN1ckdyb3VwU3RhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgc3RhdGUgYmVmb3JlIHJlY3Vyc2luZ1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKGN1ckdyb3VwU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgY3VyR3JvdXBTdGF0ZSA9IG5leHRHcm91cFN0YXRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lwIHRoaXMgbGF5ZXIgT1IgJ3JlY3Vyc2UnIChpdGVyYXRpdmUgc3R5bGUpIGludG8gdGhlIGdyb3VwXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxheWVyT2Zmc2V0WCA9IEdldEZhc3RWYWx1ZShjdXJpLCAnb2Zmc2V0eCcsIDApICsgR2V0RmFzdFZhbHVlKGN1cmksICdzdGFydHgnLCAwKTtcclxuICAgICAgICB2YXIgbGF5ZXJPZmZzZXRZID0gR2V0RmFzdFZhbHVlKGN1cmksICdvZmZzZXR5JywgMCkgKyBHZXRGYXN0VmFsdWUoY3VyaSwgJ3N0YXJ0eScsIDApO1xyXG4gICAgICAgIGltYWdlcy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogKGN1ckdyb3VwU3RhdGUubmFtZSArIGN1cmkubmFtZSksXHJcbiAgICAgICAgICAgIGltYWdlOiBjdXJpLmltYWdlLFxyXG4gICAgICAgICAgICB4OiAoY3VyR3JvdXBTdGF0ZS54ICsgbGF5ZXJPZmZzZXRYICsgY3VyaS54KSxcclxuICAgICAgICAgICAgeTogKGN1ckdyb3VwU3RhdGUueSArIGxheWVyT2Zmc2V0WSArIGN1cmkueSksXHJcbiAgICAgICAgICAgIGFscGhhOiAoY3VyR3JvdXBTdGF0ZS5vcGFjaXR5ICogY3VyaS5vcGFjaXR5KSxcclxuICAgICAgICAgICAgdmlzaWJsZTogKGN1ckdyb3VwU3RhdGUudmlzaWJsZSAmJiBjdXJpLnZpc2libGUpLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBHZXRGYXN0VmFsdWUoY3VyaSwgJ3Byb3BlcnRpZXMnLCB7fSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW1hZ2VzO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUltYWdlTGF5ZXJzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseImageLayers.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseJSONTiled.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseJSONTiled.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Formats = __webpack_require__(/*! ../../Formats */ \"./node_modules/phaser/src/tilemaps/Formats.js\");\r\nvar MapData = __webpack_require__(/*! ../../mapdata/MapData */ \"./node_modules/phaser/src/tilemaps/mapdata/MapData.js\");\r\nvar ParseTileLayers = __webpack_require__(/*! ./ParseTileLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTileLayers.js\");\r\nvar ParseImageLayers = __webpack_require__(/*! ./ParseImageLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseImageLayers.js\");\r\nvar ParseTilesets = __webpack_require__(/*! ./ParseTilesets */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTilesets.js\");\r\nvar ParseObjectLayers = __webpack_require__(/*! ./ParseObjectLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObjectLayers.js\");\r\nvar BuildTilesetIndex = __webpack_require__(/*! ./BuildTilesetIndex */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/BuildTilesetIndex.js\");\r\nvar AssignTileProperties = __webpack_require__(/*! ./AssignTileProperties */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/AssignTileProperties.js\");\r\n\r\n/**\r\n * Parses a Tiled JSON object into a new MapData object.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseJSONTiled\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the tilemap, used to set the name on the MapData.\r\n * @param {object} json - The Tiled JSON object.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled. If `true`, empty locations will get a value of `null`. If `false`, empty\r\n * location will get a Tile object with an index of -1. If you've a large sparsely populated map and\r\n * the tile data doesn't need to change then setting this value to `true` will help with memory\r\n * consumption. However if your map is small or you need to update the tiles dynamically, then leave\r\n * the default value set.\r\n *\r\n * @return {?Phaser.Tilemaps.MapData} The created MapData object, or `null` if the data can't be parsed.\r\n */\r\nvar ParseJSONTiled = function (name, json, insertNull)\r\n{\r\n    if (json.orientation !== 'orthogonal')\r\n    {\r\n        console.warn('Only orthogonal map types are supported in this version of Phaser');\r\n        return null;\r\n    }\r\n\r\n    //  Map data will consist of: layers, objects, images, tilesets, sizes\r\n    var mapData = new MapData({\r\n        width: json.width,\r\n        height: json.height,\r\n        name: name,\r\n        tileWidth: json.tilewidth,\r\n        tileHeight: json.tileheight,\r\n        orientation: json.orientation,\r\n        format: Formats.TILED_JSON,\r\n        version: json.version,\r\n        properties: json.properties,\r\n        renderOrder: json.renderorder,\r\n        infinite: json.infinite\r\n    });\r\n\r\n    mapData.layers = ParseTileLayers(json, insertNull);\r\n    mapData.images = ParseImageLayers(json);\r\n\r\n    var sets = ParseTilesets(json);\r\n    mapData.tilesets = sets.tilesets;\r\n    mapData.imageCollections = sets.imageCollections;\r\n\r\n    mapData.objects = ParseObjectLayers(json);\r\n\r\n    mapData.tiles = BuildTilesetIndex(mapData);\r\n\r\n    AssignTileProperties(mapData);\r\n\r\n    return mapData;\r\n};\r\n\r\nmodule.exports = ParseJSONTiled;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlSlNPTlRpbGVkLmpzPzZjZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxvRUFBZTtBQUNyQyxjQUFjLG1CQUFPLENBQUMsb0ZBQXVCO0FBQzdDLHNCQUFzQixtQkFBTyxDQUFDLDhGQUFtQjtBQUNqRCx1QkFBdUIsbUJBQU8sQ0FBQyxnR0FBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsMEZBQWlCO0FBQzdDLHdCQUF3QixtQkFBTyxDQUFDLGtHQUFxQjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQyxrR0FBcUI7QUFDckQsMkJBQTJCLG1CQUFPLENBQUMsd0dBQXdCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHlCQUF5QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9QYXJzZUpTT05UaWxlZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZvcm1hdHMgPSByZXF1aXJlKCcuLi8uLi9Gb3JtYXRzJyk7XHJcbnZhciBNYXBEYXRhID0gcmVxdWlyZSgnLi4vLi4vbWFwZGF0YS9NYXBEYXRhJyk7XHJcbnZhciBQYXJzZVRpbGVMYXllcnMgPSByZXF1aXJlKCcuL1BhcnNlVGlsZUxheWVycycpO1xyXG52YXIgUGFyc2VJbWFnZUxheWVycyA9IHJlcXVpcmUoJy4vUGFyc2VJbWFnZUxheWVycycpO1xyXG52YXIgUGFyc2VUaWxlc2V0cyA9IHJlcXVpcmUoJy4vUGFyc2VUaWxlc2V0cycpO1xyXG52YXIgUGFyc2VPYmplY3RMYXllcnMgPSByZXF1aXJlKCcuL1BhcnNlT2JqZWN0TGF5ZXJzJyk7XHJcbnZhciBCdWlsZFRpbGVzZXRJbmRleCA9IHJlcXVpcmUoJy4vQnVpbGRUaWxlc2V0SW5kZXgnKTtcclxudmFyIEFzc2lnblRpbGVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9Bc3NpZ25UaWxlUHJvcGVydGllcycpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFRpbGVkIEpTT04gb2JqZWN0IGludG8gYSBuZXcgTWFwRGF0YSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZUpTT05UaWxlZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGlsZW1hcCwgdXNlZCB0byBzZXQgdGhlIG5hbWUgb24gdGhlIE1hcERhdGEuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluc2VydE51bGwgLSBDb250cm9scyBob3cgZW1wdHkgdGlsZXMsIHRpbGVzIHdpdGggYW4gaW5kZXggb2YgLTEsIGluIHRoZSBtYXBcclxuICogZGF0YSBhcmUgaGFuZGxlZC4gSWYgYHRydWVgLCBlbXB0eSBsb2NhdGlvbnMgd2lsbCBnZXQgYSB2YWx1ZSBvZiBgbnVsbGAuIElmIGBmYWxzZWAsIGVtcHR5XHJcbiAqIGxvY2F0aW9uIHdpbGwgZ2V0IGEgVGlsZSBvYmplY3Qgd2l0aCBhbiBpbmRleCBvZiAtMS4gSWYgeW91J3ZlIGEgbGFyZ2Ugc3BhcnNlbHkgcG9wdWxhdGVkIG1hcCBhbmRcclxuICogdGhlIHRpbGUgZGF0YSBkb2Vzbid0IG5lZWQgdG8gY2hhbmdlIHRoZW4gc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCB3aWxsIGhlbHAgd2l0aCBtZW1vcnlcclxuICogY29uc3VtcHRpb24uIEhvd2V2ZXIgaWYgeW91ciBtYXAgaXMgc21hbGwgb3IgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSB0aWxlcyBkeW5hbWljYWxseSwgdGhlbiBsZWF2ZVxyXG4gKiB0aGUgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4gez9QaGFzZXIuVGlsZW1hcHMuTWFwRGF0YX0gVGhlIGNyZWF0ZWQgTWFwRGF0YSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZGF0YSBjYW4ndCBiZSBwYXJzZWQuXHJcbiAqL1xyXG52YXIgUGFyc2VKU09OVGlsZWQgPSBmdW5jdGlvbiAobmFtZSwganNvbiwgaW5zZXJ0TnVsbClcclxue1xyXG4gICAgaWYgKGpzb24ub3JpZW50YXRpb24gIT09ICdvcnRob2dvbmFsJylcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ09ubHkgb3J0aG9nb25hbCBtYXAgdHlwZXMgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgUGhhc2VyJyk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIE1hcCBkYXRhIHdpbGwgY29uc2lzdCBvZjogbGF5ZXJzLCBvYmplY3RzLCBpbWFnZXMsIHRpbGVzZXRzLCBzaXplc1xyXG4gICAgdmFyIG1hcERhdGEgPSBuZXcgTWFwRGF0YSh7XHJcbiAgICAgICAgd2lkdGg6IGpzb24ud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBqc29uLmhlaWdodCxcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIHRpbGVXaWR0aDoganNvbi50aWxld2lkdGgsXHJcbiAgICAgICAgdGlsZUhlaWdodDoganNvbi50aWxlaGVpZ2h0LFxyXG4gICAgICAgIG9yaWVudGF0aW9uOiBqc29uLm9yaWVudGF0aW9uLFxyXG4gICAgICAgIGZvcm1hdDogRm9ybWF0cy5USUxFRF9KU09OLFxyXG4gICAgICAgIHZlcnNpb246IGpzb24udmVyc2lvbixcclxuICAgICAgICBwcm9wZXJ0aWVzOiBqc29uLnByb3BlcnRpZXMsXHJcbiAgICAgICAgcmVuZGVyT3JkZXI6IGpzb24ucmVuZGVyb3JkZXIsXHJcbiAgICAgICAgaW5maW5pdGU6IGpzb24uaW5maW5pdGVcclxuICAgIH0pO1xyXG5cclxuICAgIG1hcERhdGEubGF5ZXJzID0gUGFyc2VUaWxlTGF5ZXJzKGpzb24sIGluc2VydE51bGwpO1xyXG4gICAgbWFwRGF0YS5pbWFnZXMgPSBQYXJzZUltYWdlTGF5ZXJzKGpzb24pO1xyXG5cclxuICAgIHZhciBzZXRzID0gUGFyc2VUaWxlc2V0cyhqc29uKTtcclxuICAgIG1hcERhdGEudGlsZXNldHMgPSBzZXRzLnRpbGVzZXRzO1xyXG4gICAgbWFwRGF0YS5pbWFnZUNvbGxlY3Rpb25zID0gc2V0cy5pbWFnZUNvbGxlY3Rpb25zO1xyXG5cclxuICAgIG1hcERhdGEub2JqZWN0cyA9IFBhcnNlT2JqZWN0TGF5ZXJzKGpzb24pO1xyXG5cclxuICAgIG1hcERhdGEudGlsZXMgPSBCdWlsZFRpbGVzZXRJbmRleChtYXBEYXRhKTtcclxuXHJcbiAgICBBc3NpZ25UaWxlUHJvcGVydGllcyhtYXBEYXRhKTtcclxuXHJcbiAgICByZXR1cm4gbWFwRGF0YTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VKU09OVGlsZWQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseJSONTiled.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Pick = __webpack_require__(/*! ../../../utils/object/Pick */ \"./node_modules/phaser/src/utils/object/Pick.js\");\r\nvar ParseGID = __webpack_require__(/*! ./ParseGID */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js\");\r\n\r\nvar copyPoints = function (p) { return { x: p.x, y: p.y }; };\r\n\r\nvar commonObjectProps = [ 'id', 'name', 'type', 'rotation', 'properties', 'visible', 'x', 'y', 'width', 'height' ];\r\n\r\n/**\r\n * Convert a Tiled object to an internal parsed object normalising and copying properties over, while applying optional x and y offsets. The parsed object will always have the properties `id`, `name`, `type`, `rotation`, `properties`, `visible`, `x`, `y`, `width` and `height`. Other properties will be added according to the object type (such as text, polyline, gid etc.)\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseObject\r\n * @since 3.0.0\r\n *\r\n * @param {object} tiledObject - Tiled object to convert to an internal parsed object normalising and copying properties over.\r\n * @param {number} [offsetX=0] - Optional additional offset to apply to the object's x property. Defaults to 0.\r\n * @param {number} [offsetY=0] - Optional additional offset to apply to the object's y property. Defaults to 0.\r\n *\r\n * @return {object} The parsed object containing properties read from the Tiled object according to it's type with x and y values updated according to the given offsets.\r\n */\r\nvar ParseObject = function (tiledObject, offsetX, offsetY)\r\n{\r\n    if (offsetX === undefined) { offsetX = 0; }\r\n    if (offsetY === undefined) { offsetY = 0; }\r\n\r\n    var parsedObject = Pick(tiledObject, commonObjectProps);\r\n\r\n    parsedObject.x += offsetX;\r\n    parsedObject.y += offsetY;\r\n\r\n    if (tiledObject.gid)\r\n    {\r\n        //  Object tiles\r\n        var gidInfo = ParseGID(tiledObject.gid);\r\n        parsedObject.gid = gidInfo.gid;\r\n        parsedObject.flippedHorizontal = gidInfo.flippedHorizontal;\r\n        parsedObject.flippedVertical = gidInfo.flippedVertical;\r\n        parsedObject.flippedAntiDiagonal = gidInfo.flippedAntiDiagonal;\r\n    }\r\n    else if (tiledObject.polyline)\r\n    {\r\n        parsedObject.polyline = tiledObject.polyline.map(copyPoints);\r\n    }\r\n    else if (tiledObject.polygon)\r\n    {\r\n        parsedObject.polygon = tiledObject.polygon.map(copyPoints);\r\n    }\r\n    else if (tiledObject.ellipse)\r\n    {\r\n        parsedObject.ellipse = tiledObject.ellipse;\r\n        parsedObject.width = tiledObject.width;\r\n        parsedObject.height = tiledObject.height;\r\n    }\r\n    else if (tiledObject.text)\r\n    {\r\n        parsedObject.width = tiledObject.width;\r\n        parsedObject.height = tiledObject.height;\r\n        parsedObject.text = tiledObject.text;\r\n    }\r\n    else\r\n    {\r\n        // Otherwise, assume it is a rectangle\r\n        parsedObject.rectangle = true;\r\n        parsedObject.width = tiledObject.width;\r\n        parsedObject.height = tiledObject.height;\r\n    }\r\n\r\n    return parsedObject;\r\n};\r\n\r\nmodule.exports = ParseObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlT2JqZWN0LmpzP2Y4MWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRkFBNEI7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLGdGQUFZOztBQUVuQywrQkFBK0IsU0FBUyxrQkFBa0I7O0FBRTFEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9QYXJzZU9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBpY2sgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvUGljaycpO1xyXG52YXIgUGFyc2VHSUQgPSByZXF1aXJlKCcuL1BhcnNlR0lEJyk7XHJcblxyXG52YXIgY29weVBvaW50cyA9IGZ1bmN0aW9uIChwKSB7IHJldHVybiB7IHg6IHAueCwgeTogcC55IH07IH07XHJcblxyXG52YXIgY29tbW9uT2JqZWN0UHJvcHMgPSBbICdpZCcsICduYW1lJywgJ3R5cGUnLCAncm90YXRpb24nLCAncHJvcGVydGllcycsICd2aXNpYmxlJywgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF07XHJcblxyXG4vKipcclxuICogQ29udmVydCBhIFRpbGVkIG9iamVjdCB0byBhbiBpbnRlcm5hbCBwYXJzZWQgb2JqZWN0IG5vcm1hbGlzaW5nIGFuZCBjb3B5aW5nIHByb3BlcnRpZXMgb3Zlciwgd2hpbGUgYXBwbHlpbmcgb3B0aW9uYWwgeCBhbmQgeSBvZmZzZXRzLiBUaGUgcGFyc2VkIG9iamVjdCB3aWxsIGFsd2F5cyBoYXZlIHRoZSBwcm9wZXJ0aWVzIGBpZGAsIGBuYW1lYCwgYHR5cGVgLCBgcm90YXRpb25gLCBgcHJvcGVydGllc2AsIGB2aXNpYmxlYCwgYHhgLCBgeWAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgLiBPdGhlciBwcm9wZXJ0aWVzIHdpbGwgYmUgYWRkZWQgYWNjb3JkaW5nIHRvIHRoZSBvYmplY3QgdHlwZSAoc3VjaCBhcyB0ZXh0LCBwb2x5bGluZSwgZ2lkIGV0Yy4pXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZU9iamVjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHRpbGVkT2JqZWN0IC0gVGlsZWQgb2JqZWN0IHRvIGNvbnZlcnQgdG8gYW4gaW50ZXJuYWwgcGFyc2VkIG9iamVjdCBub3JtYWxpc2luZyBhbmQgY29weWluZyBwcm9wZXJ0aWVzIG92ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBvYmplY3QncyB4IHByb3BlcnR5LiBEZWZhdWx0cyB0byAwLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCBhZGRpdGlvbmFsIG9mZnNldCB0byBhcHBseSB0byB0aGUgb2JqZWN0J3MgeSBwcm9wZXJ0eS4gRGVmYXVsdHMgdG8gMC5cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgcmVhZCBmcm9tIHRoZSBUaWxlZCBvYmplY3QgYWNjb3JkaW5nIHRvIGl0J3MgdHlwZSB3aXRoIHggYW5kIHkgdmFsdWVzIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvZmZzZXRzLlxyXG4gKi9cclxudmFyIFBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKHRpbGVkT2JqZWN0LCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgdmFyIHBhcnNlZE9iamVjdCA9IFBpY2sodGlsZWRPYmplY3QsIGNvbW1vbk9iamVjdFByb3BzKTtcclxuXHJcbiAgICBwYXJzZWRPYmplY3QueCArPSBvZmZzZXRYO1xyXG4gICAgcGFyc2VkT2JqZWN0LnkgKz0gb2Zmc2V0WTtcclxuXHJcbiAgICBpZiAodGlsZWRPYmplY3QuZ2lkKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBPYmplY3QgdGlsZXNcclxuICAgICAgICB2YXIgZ2lkSW5mbyA9IFBhcnNlR0lEKHRpbGVkT2JqZWN0LmdpZCk7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LmdpZCA9IGdpZEluZm8uZ2lkO1xyXG4gICAgICAgIHBhcnNlZE9iamVjdC5mbGlwcGVkSG9yaXpvbnRhbCA9IGdpZEluZm8uZmxpcHBlZEhvcml6b250YWw7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LmZsaXBwZWRWZXJ0aWNhbCA9IGdpZEluZm8uZmxpcHBlZFZlcnRpY2FsO1xyXG4gICAgICAgIHBhcnNlZE9iamVjdC5mbGlwcGVkQW50aURpYWdvbmFsID0gZ2lkSW5mby5mbGlwcGVkQW50aURpYWdvbmFsO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGlsZWRPYmplY3QucG9seWxpbmUpXHJcbiAgICB7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LnBvbHlsaW5lID0gdGlsZWRPYmplY3QucG9seWxpbmUubWFwKGNvcHlQb2ludHMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGlsZWRPYmplY3QucG9seWdvbilcclxuICAgIHtcclxuICAgICAgICBwYXJzZWRPYmplY3QucG9seWdvbiA9IHRpbGVkT2JqZWN0LnBvbHlnb24ubWFwKGNvcHlQb2ludHMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGlsZWRPYmplY3QuZWxsaXBzZSlcclxuICAgIHtcclxuICAgICAgICBwYXJzZWRPYmplY3QuZWxsaXBzZSA9IHRpbGVkT2JqZWN0LmVsbGlwc2U7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LndpZHRoID0gdGlsZWRPYmplY3Qud2lkdGg7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LmhlaWdodCA9IHRpbGVkT2JqZWN0LmhlaWdodDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRpbGVkT2JqZWN0LnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LndpZHRoID0gdGlsZWRPYmplY3Qud2lkdGg7XHJcbiAgICAgICAgcGFyc2VkT2JqZWN0LmhlaWdodCA9IHRpbGVkT2JqZWN0LmhlaWdodDtcclxuICAgICAgICBwYXJzZWRPYmplY3QudGV4dCA9IHRpbGVkT2JqZWN0LnRleHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaXQgaXMgYSByZWN0YW5nbGVcclxuICAgICAgICBwYXJzZWRPYmplY3QucmVjdGFuZ2xlID0gdHJ1ZTtcclxuICAgICAgICBwYXJzZWRPYmplY3Qud2lkdGggPSB0aWxlZE9iamVjdC53aWR0aDtcclxuICAgICAgICBwYXJzZWRPYmplY3QuaGVpZ2h0ID0gdGlsZWRPYmplY3QuaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJzZWRPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObjectLayers.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObjectLayers.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ParseObject = __webpack_require__(/*! ./ParseObject */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js\");\r\nvar ObjectLayer = __webpack_require__(/*! ../../mapdata/ObjectLayer */ \"./node_modules/phaser/src/tilemaps/mapdata/ObjectLayer.js\");\r\nvar CreateGroupLayer = __webpack_require__(/*! ./CreateGroupLayer */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js\");\r\n\r\n/**\r\n * Parses a Tiled JSON object into an array of ObjectLayer objects.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseObjectLayers\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - The Tiled JSON object.\r\n *\r\n * @return {array} An array of all object layers in the tilemap as `ObjectLayer`s.\r\n */\r\nvar ParseObjectLayers = function (json)\r\n{\r\n    var objectLayers = [];\r\n\r\n    // State inherited from a parent group\r\n    var groupStack = [];\r\n    var curGroupState = CreateGroupLayer(json);\r\n\r\n    while (curGroupState.i < curGroupState.layers.length || groupStack.length > 0)\r\n    {\r\n        if (curGroupState.i >= curGroupState.layers.length)\r\n        {\r\n            // Ensure recursion stack is not empty first\r\n            if (groupStack.length < 1)\r\n            {\r\n                console.warn(\r\n                    'TilemapParser.parseTiledJSON - Invalid layer group hierarchy'\r\n                );\r\n                break;\r\n            }\r\n\r\n            // Return to previous recursive state\r\n            curGroupState = groupStack.pop();\r\n            continue;\r\n        }\r\n\r\n        // Get current layer and advance iterator\r\n        var curo = curGroupState.layers[curGroupState.i];\r\n        curGroupState.i++;\r\n\r\n        // Modify inherited properties\r\n        curo.opacity *= curGroupState.opacity;\r\n        curo.visible = curGroupState.visible && curo.visible;\r\n\r\n        if (curo.type !== 'objectgroup')\r\n        {\r\n            if (curo.type === 'group')\r\n            {\r\n                // Compute next state inherited from group\r\n                var nextGroupState = CreateGroupLayer(json, curo, curGroupState);\r\n\r\n                // Preserve current state before recursing\r\n                groupStack.push(curGroupState);\r\n                curGroupState = nextGroupState;\r\n            }\r\n\r\n            // Skip this layer OR 'recurse' (iterative style) into the group\r\n            continue;\r\n        }\r\n\r\n        curo.name = curGroupState.name + curo.name;\r\n        var offsetX = curGroupState.x + GetFastValue(curo, 'startx', 0) + GetFastValue(curo, 'offsetx', 0);\r\n        var offsetY = curGroupState.y + GetFastValue(curo, 'starty', 0) + GetFastValue(curo, 'offsety', 0);\r\n\r\n        var objects = [];\r\n        for (var j = 0; j < curo.objects.length; j++)\r\n        {\r\n            var parsedObject = ParseObject(curo.objects[j], offsetX, offsetY);\r\n\r\n            objects.push(parsedObject);\r\n        }\r\n\r\n        var objectLayer = new ObjectLayer(curo);\r\n        objectLayer.objects = objects;\r\n\r\n        objectLayers.push(objectLayer);\r\n    }\r\n\r\n    return objectLayers;\r\n};\r\n\r\nmodule.exports = ParseObjectLayers;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlT2JqZWN0TGF5ZXJzLmpzPzk2NTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLGtHQUFvQztBQUMvRCxrQkFBa0IsbUJBQU8sQ0FBQyxzRkFBZTtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyw0RkFBMkI7QUFDckQsdUJBQXVCLG1CQUFPLENBQUMsZ0dBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlT2JqZWN0TGF5ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgUGFyc2VPYmplY3QgPSByZXF1aXJlKCcuL1BhcnNlT2JqZWN0Jyk7XHJcbnZhciBPYmplY3RMYXllciA9IHJlcXVpcmUoJy4uLy4uL21hcGRhdGEvT2JqZWN0TGF5ZXInKTtcclxudmFyIENyZWF0ZUdyb3VwTGF5ZXIgPSByZXF1aXJlKCcuL0NyZWF0ZUdyb3VwTGF5ZXInKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYSBUaWxlZCBKU09OIG9iamVjdCBpbnRvIGFuIGFycmF5IG9mIE9iamVjdExheWVyIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZU9iamVjdExheWVyc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBUaGUgVGlsZWQgSlNPTiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSBvZiBhbGwgb2JqZWN0IGxheWVycyBpbiB0aGUgdGlsZW1hcCBhcyBgT2JqZWN0TGF5ZXJgcy5cclxuICovXHJcbnZhciBQYXJzZU9iamVjdExheWVycyA9IGZ1bmN0aW9uIChqc29uKVxyXG57XHJcbiAgICB2YXIgb2JqZWN0TGF5ZXJzID0gW107XHJcblxyXG4gICAgLy8gU3RhdGUgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgZ3JvdXBcclxuICAgIHZhciBncm91cFN0YWNrID0gW107XHJcbiAgICB2YXIgY3VyR3JvdXBTdGF0ZSA9IENyZWF0ZUdyb3VwTGF5ZXIoanNvbik7XHJcblxyXG4gICAgd2hpbGUgKGN1ckdyb3VwU3RhdGUuaSA8IGN1ckdyb3VwU3RhdGUubGF5ZXJzLmxlbmd0aCB8fCBncm91cFN0YWNrLmxlbmd0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGN1ckdyb3VwU3RhdGUuaSA+PSBjdXJHcm91cFN0YXRlLmxheWVycy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBFbnN1cmUgcmVjdXJzaW9uIHN0YWNrIGlzIG5vdCBlbXB0eSBmaXJzdFxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBTdGFjay5sZW5ndGggPCAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgJ1RpbGVtYXBQYXJzZXIucGFyc2VUaWxlZEpTT04gLSBJbnZhbGlkIGxheWVyIGdyb3VwIGhpZXJhcmNoeSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIHRvIHByZXZpb3VzIHJlY3Vyc2l2ZSBzdGF0ZVxyXG4gICAgICAgICAgICBjdXJHcm91cFN0YXRlID0gZ3JvdXBTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBHZXQgY3VycmVudCBsYXllciBhbmQgYWR2YW5jZSBpdGVyYXRvclxyXG4gICAgICAgIHZhciBjdXJvID0gY3VyR3JvdXBTdGF0ZS5sYXllcnNbY3VyR3JvdXBTdGF0ZS5pXTtcclxuICAgICAgICBjdXJHcm91cFN0YXRlLmkrKztcclxuXHJcbiAgICAgICAgLy8gTW9kaWZ5IGluaGVyaXRlZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgY3Vyby5vcGFjaXR5ICo9IGN1ckdyb3VwU3RhdGUub3BhY2l0eTtcclxuICAgICAgICBjdXJvLnZpc2libGUgPSBjdXJHcm91cFN0YXRlLnZpc2libGUgJiYgY3Vyby52aXNpYmxlO1xyXG5cclxuICAgICAgICBpZiAoY3Vyby50eXBlICE9PSAnb2JqZWN0Z3JvdXAnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGN1cm8udHlwZSA9PT0gJ2dyb3VwJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IHN0YXRlIGluaGVyaXRlZCBmcm9tIGdyb3VwXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dEdyb3VwU3RhdGUgPSBDcmVhdGVHcm91cExheWVyKGpzb24sIGN1cm8sIGN1ckdyb3VwU3RhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgc3RhdGUgYmVmb3JlIHJlY3Vyc2luZ1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKGN1ckdyb3VwU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgY3VyR3JvdXBTdGF0ZSA9IG5leHRHcm91cFN0YXRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lwIHRoaXMgbGF5ZXIgT1IgJ3JlY3Vyc2UnIChpdGVyYXRpdmUgc3R5bGUpIGludG8gdGhlIGdyb3VwXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3Vyby5uYW1lID0gY3VyR3JvdXBTdGF0ZS5uYW1lICsgY3Vyby5uYW1lO1xyXG4gICAgICAgIHZhciBvZmZzZXRYID0gY3VyR3JvdXBTdGF0ZS54ICsgR2V0RmFzdFZhbHVlKGN1cm8sICdzdGFydHgnLCAwKSArIEdldEZhc3RWYWx1ZShjdXJvLCAnb2Zmc2V0eCcsIDApO1xyXG4gICAgICAgIHZhciBvZmZzZXRZID0gY3VyR3JvdXBTdGF0ZS55ICsgR2V0RmFzdFZhbHVlKGN1cm8sICdzdGFydHknLCAwKSArIEdldEZhc3RWYWx1ZShjdXJvLCAnb2Zmc2V0eScsIDApO1xyXG5cclxuICAgICAgICB2YXIgb2JqZWN0cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3Vyby5vYmplY3RzLmxlbmd0aDsgaisrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnNlZE9iamVjdCA9IFBhcnNlT2JqZWN0KGN1cm8ub2JqZWN0c1tqXSwgb2Zmc2V0WCwgb2Zmc2V0WSk7XHJcblxyXG4gICAgICAgICAgICBvYmplY3RzLnB1c2gocGFyc2VkT2JqZWN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvYmplY3RMYXllciA9IG5ldyBPYmplY3RMYXllcihjdXJvKTtcclxuICAgICAgICBvYmplY3RMYXllci5vYmplY3RzID0gb2JqZWN0cztcclxuXHJcbiAgICAgICAgb2JqZWN0TGF5ZXJzLnB1c2gob2JqZWN0TGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3RMYXllcnM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlT2JqZWN0TGF5ZXJzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObjectLayers.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTileLayers.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTileLayers.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Base64Decode = __webpack_require__(/*! ./Base64Decode */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/Base64Decode.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar LayerData = __webpack_require__(/*! ../../mapdata/LayerData */ \"./node_modules/phaser/src/tilemaps/mapdata/LayerData.js\");\r\nvar ParseGID = __webpack_require__(/*! ./ParseGID */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js\");\r\nvar Tile = __webpack_require__(/*! ../../Tile */ \"./node_modules/phaser/src/tilemaps/Tile.js\");\r\nvar CreateGroupLayer = __webpack_require__(/*! ./CreateGroupLayer */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/CreateGroupLayer.js\");\r\n\r\n/**\r\n * Parses all tilemap layers in a Tiled JSON object into new LayerData objects.\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseTileLayers\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - The Tiled JSON object.\r\n * @param {boolean} insertNull - Controls how empty tiles, tiles with an index of -1, in the map\r\n * data are handled (see {@link Phaser.Tilemaps.Parsers.Tiled.ParseJSONTiled}).\r\n *\r\n * @return {Phaser.Tilemaps.LayerData[]} - An array of LayerData objects, one for each entry in\r\n * json.layers with the type 'tilelayer'.\r\n */\r\nvar ParseTileLayers = function (json, insertNull)\r\n{\r\n    var infiniteMap = GetFastValue(json, 'infinite', false);\r\n    var tileLayers = [];\r\n\r\n    // State inherited from a parent group\r\n    var groupStack = [];\r\n    var curGroupState = CreateGroupLayer(json);\r\n\r\n    while (curGroupState.i < curGroupState.layers.length || groupStack.length > 0)\r\n    {\r\n        if (curGroupState.i >= curGroupState.layers.length)\r\n        {\r\n            // Ensure recursion stack is not empty first\r\n            if (groupStack.length < 1)\r\n            {\r\n                console.warn(\r\n                    'TilemapParser.parseTiledJSON - Invalid layer group hierarchy'\r\n                );\r\n                break;\r\n            }\r\n\r\n            // Return to previous recursive state\r\n            curGroupState = groupStack.pop();\r\n            continue;\r\n        }\r\n\r\n        var curl = curGroupState.layers[curGroupState.i];\r\n        curGroupState.i++;\r\n\r\n        if (curl.type !== 'tilelayer')\r\n        {\r\n            if (curl.type === 'group')\r\n            {\r\n                // Compute next state inherited from group\r\n                var nextGroupState = CreateGroupLayer(json, curl, curGroupState);\r\n\r\n                // Preserve current state before recursing\r\n                groupStack.push(curGroupState);\r\n                curGroupState = nextGroupState;\r\n            }\r\n\r\n            // Skip this layer OR 'recurse' (iterative style) into the group\r\n            continue;\r\n        }\r\n\r\n        // Base64 decode data if necessary. NOTE: uncompressed base64 only.\r\n        if (curl.compression)\r\n        {\r\n            console.warn(\r\n                'TilemapParser.parseTiledJSON - Layer compression is unsupported, skipping layer \\''\r\n                + curl.name + '\\''\r\n            );\r\n            continue;\r\n        }\r\n        else if (curl.encoding && curl.encoding === 'base64')\r\n        {\r\n            // Chunks for an infinite map\r\n            if (curl.chunks)\r\n            {\r\n                for (var i = 0; i < curl.chunks.length; i++)\r\n                {\r\n                    curl.chunks[i].data = Base64Decode(curl.chunks[i].data);\r\n                }\r\n            }\r\n\r\n            // Non-infinite map data\r\n            if (curl.data)\r\n            {\r\n                curl.data = Base64Decode(curl.data);\r\n            }\r\n\r\n            delete curl.encoding; // Allow the same map to be parsed multiple times\r\n        }\r\n\r\n        //  This is an array containing the tile indexes, one after the other. -1 = no tile,\r\n        //  everything else = the tile index (starting at 1 for Tiled, 0 for CSV) If the map\r\n        //  contains multiple tilesets then the indexes are relative to that which the set starts\r\n        //  from. Need to set which tileset in the cache = which tileset in the JSON, if you do this\r\n        //  manually it means you can use the same map data but a new tileset.\r\n\r\n        var layerData;\r\n        var gidInfo;\r\n        var tile;\r\n        var blankTile;\r\n\r\n        var output = [];\r\n        var x = 0;\r\n\r\n        if (infiniteMap)\r\n        {\r\n            var layerOffsetX = (GetFastValue(curl, 'startx', 0) + curl.x);\r\n            var layerOffsetY = (GetFastValue(curl, 'starty', 0) + curl.y);\r\n            layerData = new LayerData({\r\n                name: (curGroupState.name + curl.name),\r\n                x: (curGroupState.x + GetFastValue(curl, 'offsetx', 0) + layerOffsetX * json.tilewidth),\r\n                y: (curGroupState.y + GetFastValue(curl, 'offsety', 0) + layerOffsetY * json.tileheight),\r\n                width: curl.width,\r\n                height: curl.height,\r\n                tileWidth: json.tilewidth,\r\n                tileHeight: json.tileheight,\r\n                alpha: (curGroupState.opacity * curl.opacity),\r\n                visible: (curGroupState.visible && curl.visible),\r\n                properties: GetFastValue(curl, 'properties', {})\r\n            });\r\n\r\n            for (var c = 0; c < curl.height; c++)\r\n            {\r\n                output.push([ null ]);\r\n\r\n                for (var j = 0; j < curl.width; j++)\r\n                {\r\n                    output[c][j] = null;\r\n                }\r\n            }\r\n\r\n            for (c = 0, len = curl.chunks.length; c < len; c++)\r\n            {\r\n                var chunk = curl.chunks[c];\r\n\r\n                var offsetX = (chunk.x - layerOffsetX);\r\n                var offsetY = (chunk.y - layerOffsetY);\r\n\r\n                var y = 0;\r\n\r\n                for (var t = 0, len2 = chunk.data.length; t < len2; t++)\r\n                {\r\n                    var newOffsetX = x + offsetX;\r\n                    var newOffsetY = y + offsetY;\r\n\r\n                    gidInfo = ParseGID(chunk.data[t]);\r\n\r\n                    //  index, x, y, width, height\r\n                    if (gidInfo.gid > 0)\r\n                    {\r\n                        tile = new Tile(layerData, gidInfo.gid, newOffsetX, newOffsetY, json.tilewidth,\r\n                            json.tileheight);\r\n\r\n                        // Turning Tiled's FlippedHorizontal, FlippedVertical and FlippedAntiDiagonal\r\n                        // propeties into flipX, flipY and rotation\r\n                        tile.rotation = gidInfo.rotation;\r\n                        tile.flipX = gidInfo.flipped;\r\n\r\n                        output[newOffsetY][newOffsetX] = tile;\r\n                    }\r\n                    else\r\n                    {\r\n                        blankTile = insertNull\r\n                            ? null\r\n                            : new Tile(layerData, -1, newOffsetX, newOffsetY, json.tilewidth, json.tileheight);\r\n\r\n                        output[newOffsetY][newOffsetX] = blankTile;\r\n                    }\r\n\r\n                    x++;\r\n\r\n                    if (x === chunk.width)\r\n                    {\r\n                        y++;\r\n                        x = 0;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            layerData = new LayerData({\r\n                name: (curGroupState.name + curl.name),\r\n                x: (curGroupState.x + GetFastValue(curl, 'offsetx', 0) + curl.x),\r\n                y: (curGroupState.y + GetFastValue(curl, 'offsety', 0) + curl.y),\r\n                width: curl.width,\r\n                height: curl.height,\r\n                tileWidth: json.tilewidth,\r\n                tileHeight: json.tileheight,\r\n                alpha: (curGroupState.opacity * curl.opacity),\r\n                visible: (curGroupState.visible && curl.visible),\r\n                properties: GetFastValue(curl, 'properties', {})\r\n            });\r\n\r\n            var row = [];\r\n\r\n            //  Loop through the data field in the JSON.\r\n            for (var k = 0, len = curl.data.length; k < len; k++)\r\n            {\r\n                gidInfo = ParseGID(curl.data[k]);\r\n\r\n                //  index, x, y, width, height\r\n                if (gidInfo.gid > 0)\r\n                {\r\n                    tile = new Tile(layerData, gidInfo.gid, x, output.length, json.tilewidth,\r\n                        json.tileheight);\r\n\r\n                    // Turning Tiled's FlippedHorizontal, FlippedVertical and FlippedAntiDiagonal\r\n                    // propeties into flipX, flipY and rotation\r\n                    tile.rotation = gidInfo.rotation;\r\n                    tile.flipX = gidInfo.flipped;\r\n\r\n                    row.push(tile);\r\n                }\r\n                else\r\n                {\r\n                    blankTile = insertNull\r\n                        ? null\r\n                        : new Tile(layerData, -1, x, output.length, json.tilewidth, json.tileheight);\r\n                    row.push(blankTile);\r\n                }\r\n\r\n                x++;\r\n\r\n                if (x === curl.width)\r\n                {\r\n                    output.push(row);\r\n                    x = 0;\r\n                    row = [];\r\n                }\r\n            }\r\n        }\r\n\r\n        layerData.data = output;\r\n        tileLayers.push(layerData);\r\n    }\r\n\r\n    return tileLayers;\r\n};\r\n\r\nmodule.exports = ParseTileLayers;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlVGlsZUxheWVycy5qcz8wYmU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDM0MsbUJBQW1CLG1CQUFPLENBQUMsa0dBQW9DO0FBQy9ELGdCQUFnQixtQkFBTyxDQUFDLHdGQUF5QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsZ0ZBQVk7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLDhEQUFZO0FBQy9CLHVCQUF1QixtQkFBTyxDQUFDLGdHQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQiwwQkFBMEIsbURBQW1EO0FBQzdFO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isd0JBQXdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9ELGFBQWE7O0FBRWIsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBOztBQUVBLCtCQUErQixnQkFBZ0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELFNBQVM7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHlEQUF5RCxVQUFVO0FBQ25FO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRCxhQUFhOztBQUViOztBQUVBO0FBQ0EsbURBQW1ELFNBQVM7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9QYXJzZVRpbGVMYXllcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCYXNlNjREZWNvZGUgPSByZXF1aXJlKCcuL0Jhc2U2NERlY29kZScpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgTGF5ZXJEYXRhID0gcmVxdWlyZSgnLi4vLi4vbWFwZGF0YS9MYXllckRhdGEnKTtcclxudmFyIFBhcnNlR0lEID0gcmVxdWlyZSgnLi9QYXJzZUdJRCcpO1xyXG52YXIgVGlsZSA9IHJlcXVpcmUoJy4uLy4uL1RpbGUnKTtcclxudmFyIENyZWF0ZUdyb3VwTGF5ZXIgPSByZXF1aXJlKCcuL0NyZWF0ZUdyb3VwTGF5ZXInKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYWxsIHRpbGVtYXAgbGF5ZXJzIGluIGEgVGlsZWQgSlNPTiBvYmplY3QgaW50byBuZXcgTGF5ZXJEYXRhIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZVRpbGVMYXllcnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gVGhlIFRpbGVkIEpTT04gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluc2VydE51bGwgLSBDb250cm9scyBob3cgZW1wdHkgdGlsZXMsIHRpbGVzIHdpdGggYW4gaW5kZXggb2YgLTEsIGluIHRoZSBtYXBcclxuICogZGF0YSBhcmUgaGFuZGxlZCAoc2VlIHtAbGluayBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZUpTT05UaWxlZH0pLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuTGF5ZXJEYXRhW119IC0gQW4gYXJyYXkgb2YgTGF5ZXJEYXRhIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBlbnRyeSBpblxyXG4gKiBqc29uLmxheWVycyB3aXRoIHRoZSB0eXBlICd0aWxlbGF5ZXInLlxyXG4gKi9cclxudmFyIFBhcnNlVGlsZUxheWVycyA9IGZ1bmN0aW9uIChqc29uLCBpbnNlcnROdWxsKVxyXG57XHJcbiAgICB2YXIgaW5maW5pdGVNYXAgPSBHZXRGYXN0VmFsdWUoanNvbiwgJ2luZmluaXRlJywgZmFsc2UpO1xyXG4gICAgdmFyIHRpbGVMYXllcnMgPSBbXTtcclxuXHJcbiAgICAvLyBTdGF0ZSBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCBncm91cFxyXG4gICAgdmFyIGdyb3VwU3RhY2sgPSBbXTtcclxuICAgIHZhciBjdXJHcm91cFN0YXRlID0gQ3JlYXRlR3JvdXBMYXllcihqc29uKTtcclxuXHJcbiAgICB3aGlsZSAoY3VyR3JvdXBTdGF0ZS5pIDwgY3VyR3JvdXBTdGF0ZS5sYXllcnMubGVuZ3RoIHx8IGdyb3VwU3RhY2subGVuZ3RoID4gMClcclxuICAgIHtcclxuICAgICAgICBpZiAoY3VyR3JvdXBTdGF0ZS5pID49IGN1ckdyb3VwU3RhdGUubGF5ZXJzLmxlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIEVuc3VyZSByZWN1cnNpb24gc3RhY2sgaXMgbm90IGVtcHR5IGZpcnN0XHJcbiAgICAgICAgICAgIGlmIChncm91cFN0YWNrLmxlbmd0aCA8IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgICAgICAgICAnVGlsZW1hcFBhcnNlci5wYXJzZVRpbGVkSlNPTiAtIEludmFsaWQgbGF5ZXIgZ3JvdXAgaGllcmFyY2h5J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdG8gcHJldmlvdXMgcmVjdXJzaXZlIHN0YXRlXHJcbiAgICAgICAgICAgIGN1ckdyb3VwU3RhdGUgPSBncm91cFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJsID0gY3VyR3JvdXBTdGF0ZS5sYXllcnNbY3VyR3JvdXBTdGF0ZS5pXTtcclxuICAgICAgICBjdXJHcm91cFN0YXRlLmkrKztcclxuXHJcbiAgICAgICAgaWYgKGN1cmwudHlwZSAhPT0gJ3RpbGVsYXllcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3VybC50eXBlID09PSAnZ3JvdXAnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgc3RhdGUgaW5oZXJpdGVkIGZyb20gZ3JvdXBcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0R3JvdXBTdGF0ZSA9IENyZWF0ZUdyb3VwTGF5ZXIoanNvbiwgY3VybCwgY3VyR3JvdXBTdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBzdGF0ZSBiZWZvcmUgcmVjdXJzaW5nXHJcbiAgICAgICAgICAgICAgICBncm91cFN0YWNrLnB1c2goY3VyR3JvdXBTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBjdXJHcm91cFN0YXRlID0gbmV4dEdyb3VwU3RhdGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraXAgdGhpcyBsYXllciBPUiAncmVjdXJzZScgKGl0ZXJhdGl2ZSBzdHlsZSkgaW50byB0aGUgZ3JvdXBcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCYXNlNjQgZGVjb2RlIGRhdGEgaWYgbmVjZXNzYXJ5LiBOT1RFOiB1bmNvbXByZXNzZWQgYmFzZTY0IG9ubHkuXHJcbiAgICAgICAgaWYgKGN1cmwuY29tcHJlc3Npb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICAnVGlsZW1hcFBhcnNlci5wYXJzZVRpbGVkSlNPTiAtIExheWVyIGNvbXByZXNzaW9uIGlzIHVuc3VwcG9ydGVkLCBza2lwcGluZyBsYXllciBcXCcnXHJcbiAgICAgICAgICAgICAgICArIGN1cmwubmFtZSArICdcXCcnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjdXJsLmVuY29kaW5nICYmIGN1cmwuZW5jb2RpbmcgPT09ICdiYXNlNjQnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gQ2h1bmtzIGZvciBhbiBpbmZpbml0ZSBtYXBcclxuICAgICAgICAgICAgaWYgKGN1cmwuY2h1bmtzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cmwuY2h1bmtzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cmwuY2h1bmtzW2ldLmRhdGEgPSBCYXNlNjREZWNvZGUoY3VybC5jaHVua3NbaV0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE5vbi1pbmZpbml0ZSBtYXAgZGF0YVxyXG4gICAgICAgICAgICBpZiAoY3VybC5kYXRhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjdXJsLmRhdGEgPSBCYXNlNjREZWNvZGUoY3VybC5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVsZXRlIGN1cmwuZW5jb2Rpbmc7IC8vIEFsbG93IHRoZSBzYW1lIG1hcCB0byBiZSBwYXJzZWQgbXVsdGlwbGUgdGltZXNcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHRpbGUgaW5kZXhlcywgb25lIGFmdGVyIHRoZSBvdGhlci4gLTEgPSBubyB0aWxlLFxyXG4gICAgICAgIC8vICBldmVyeXRoaW5nIGVsc2UgPSB0aGUgdGlsZSBpbmRleCAoc3RhcnRpbmcgYXQgMSBmb3IgVGlsZWQsIDAgZm9yIENTVikgSWYgdGhlIG1hcFxyXG4gICAgICAgIC8vICBjb250YWlucyBtdWx0aXBsZSB0aWxlc2V0cyB0aGVuIHRoZSBpbmRleGVzIGFyZSByZWxhdGl2ZSB0byB0aGF0IHdoaWNoIHRoZSBzZXQgc3RhcnRzXHJcbiAgICAgICAgLy8gIGZyb20uIE5lZWQgdG8gc2V0IHdoaWNoIHRpbGVzZXQgaW4gdGhlIGNhY2hlID0gd2hpY2ggdGlsZXNldCBpbiB0aGUgSlNPTiwgaWYgeW91IGRvIHRoaXNcclxuICAgICAgICAvLyAgbWFudWFsbHkgaXQgbWVhbnMgeW91IGNhbiB1c2UgdGhlIHNhbWUgbWFwIGRhdGEgYnV0IGEgbmV3IHRpbGVzZXQuXHJcblxyXG4gICAgICAgIHZhciBsYXllckRhdGE7XHJcbiAgICAgICAgdmFyIGdpZEluZm87XHJcbiAgICAgICAgdmFyIHRpbGU7XHJcbiAgICAgICAgdmFyIGJsYW5rVGlsZTtcclxuXHJcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xyXG4gICAgICAgIHZhciB4ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGluZmluaXRlTWFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxheWVyT2Zmc2V0WCA9IChHZXRGYXN0VmFsdWUoY3VybCwgJ3N0YXJ0eCcsIDApICsgY3VybC54KTtcclxuICAgICAgICAgICAgdmFyIGxheWVyT2Zmc2V0WSA9IChHZXRGYXN0VmFsdWUoY3VybCwgJ3N0YXJ0eScsIDApICsgY3VybC55KTtcclxuICAgICAgICAgICAgbGF5ZXJEYXRhID0gbmV3IExheWVyRGF0YSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAoY3VyR3JvdXBTdGF0ZS5uYW1lICsgY3VybC5uYW1lKSxcclxuICAgICAgICAgICAgICAgIHg6IChjdXJHcm91cFN0YXRlLnggKyBHZXRGYXN0VmFsdWUoY3VybCwgJ29mZnNldHgnLCAwKSArIGxheWVyT2Zmc2V0WCAqIGpzb24udGlsZXdpZHRoKSxcclxuICAgICAgICAgICAgICAgIHk6IChjdXJHcm91cFN0YXRlLnkgKyBHZXRGYXN0VmFsdWUoY3VybCwgJ29mZnNldHknLCAwKSArIGxheWVyT2Zmc2V0WSAqIGpzb24udGlsZWhlaWdodCksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogY3VybC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogY3VybC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB0aWxlV2lkdGg6IGpzb24udGlsZXdpZHRoLFxyXG4gICAgICAgICAgICAgICAgdGlsZUhlaWdodDoganNvbi50aWxlaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgYWxwaGE6IChjdXJHcm91cFN0YXRlLm9wYWNpdHkgKiBjdXJsLm9wYWNpdHkpLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogKGN1ckdyb3VwU3RhdGUudmlzaWJsZSAmJiBjdXJsLnZpc2libGUpLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogR2V0RmFzdFZhbHVlKGN1cmwsICdwcm9wZXJ0aWVzJywge30pXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjdXJsLmhlaWdodDsgYysrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChbIG51bGwgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJsLndpZHRoOyBqKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2NdW2pdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChjID0gMCwgbGVuID0gY3VybC5jaHVua3MubGVuZ3RoOyBjIDwgbGVuOyBjKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGN1cmwuY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXRYID0gKGNodW5rLnggLSBsYXllck9mZnNldFgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldFkgPSAoY2h1bmsueSAtIGxheWVyT2Zmc2V0WSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwLCBsZW4yID0gY2h1bmsuZGF0YS5sZW5ndGg7IHQgPCBsZW4yOyB0KyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09mZnNldFggPSB4ICsgb2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3T2Zmc2V0WSA9IHkgKyBvZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBnaWRJbmZvID0gUGFyc2VHSUQoY2h1bmsuZGF0YVt0XSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vICBpbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnaWRJbmZvLmdpZCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlID0gbmV3IFRpbGUobGF5ZXJEYXRhLCBnaWRJbmZvLmdpZCwgbmV3T2Zmc2V0WCwgbmV3T2Zmc2V0WSwganNvbi50aWxld2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpbGVoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybmluZyBUaWxlZCdzIEZsaXBwZWRIb3Jpem9udGFsLCBGbGlwcGVkVmVydGljYWwgYW5kIEZsaXBwZWRBbnRpRGlhZ29uYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGV0aWVzIGludG8gZmxpcFgsIGZsaXBZIGFuZCByb3RhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnJvdGF0aW9uID0gZ2lkSW5mby5yb3RhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5mbGlwWCA9IGdpZEluZm8uZmxpcHBlZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXdPZmZzZXRZXVtuZXdPZmZzZXRYXSA9IHRpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rVGlsZSA9IGluc2VydE51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgVGlsZShsYXllckRhdGEsIC0xLCBuZXdPZmZzZXRYLCBuZXdPZmZzZXRZLCBqc29uLnRpbGV3aWR0aCwganNvbi50aWxlaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXdPZmZzZXRZXVtuZXdPZmZzZXRYXSA9IGJsYW5rVGlsZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHgrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHggPT09IGNodW5rLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGF5ZXJEYXRhID0gbmV3IExheWVyRGF0YSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAoY3VyR3JvdXBTdGF0ZS5uYW1lICsgY3VybC5uYW1lKSxcclxuICAgICAgICAgICAgICAgIHg6IChjdXJHcm91cFN0YXRlLnggKyBHZXRGYXN0VmFsdWUoY3VybCwgJ29mZnNldHgnLCAwKSArIGN1cmwueCksXHJcbiAgICAgICAgICAgICAgICB5OiAoY3VyR3JvdXBTdGF0ZS55ICsgR2V0RmFzdFZhbHVlKGN1cmwsICdvZmZzZXR5JywgMCkgKyBjdXJsLnkpLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGN1cmwud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGN1cmwuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgdGlsZVdpZHRoOiBqc29uLnRpbGV3aWR0aCxcclxuICAgICAgICAgICAgICAgIHRpbGVIZWlnaHQ6IGpzb24udGlsZWhlaWdodCxcclxuICAgICAgICAgICAgICAgIGFscGhhOiAoY3VyR3JvdXBTdGF0ZS5vcGFjaXR5ICogY3VybC5vcGFjaXR5KSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6IChjdXJHcm91cFN0YXRlLnZpc2libGUgJiYgY3VybC52aXNpYmxlKSxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IEdldEZhc3RWYWx1ZShjdXJsLCAncHJvcGVydGllcycsIHt9KVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb3cgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBMb29wIHRocm91Z2ggdGhlIGRhdGEgZmllbGQgaW4gdGhlIEpTT04uXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBsZW4gPSBjdXJsLmRhdGEubGVuZ3RoOyBrIDwgbGVuOyBrKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdpZEluZm8gPSBQYXJzZUdJRChjdXJsLmRhdGFba10pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBpbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgaWYgKGdpZEluZm8uZ2lkID4gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWxlID0gbmV3IFRpbGUobGF5ZXJEYXRhLCBnaWRJbmZvLmdpZCwgeCwgb3V0cHV0Lmxlbmd0aCwganNvbi50aWxld2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGlsZWhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFR1cm5pbmcgVGlsZWQncyBGbGlwcGVkSG9yaXpvbnRhbCwgRmxpcHBlZFZlcnRpY2FsIGFuZCBGbGlwcGVkQW50aURpYWdvbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGV0aWVzIGludG8gZmxpcFgsIGZsaXBZIGFuZCByb3RhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRpbGUucm90YXRpb24gPSBnaWRJbmZvLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbGUuZmxpcFggPSBnaWRJbmZvLmZsaXBwZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKHRpbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsYW5rVGlsZSA9IGluc2VydE51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IFRpbGUobGF5ZXJEYXRhLCAtMSwgeCwgb3V0cHV0Lmxlbmd0aCwganNvbi50aWxld2lkdGgsIGpzb24udGlsZWhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnB1c2goYmxhbmtUaWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB4Kys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHggPT09IGN1cmwud2lkdGgpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gocm93KTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGF5ZXJEYXRhLmRhdGEgPSBvdXRwdXQ7XHJcbiAgICAgICAgdGlsZUxheWVycy5wdXNoKGxheWVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRpbGVMYXllcnM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlVGlsZUxheWVycztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTileLayers.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTilesets.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTilesets.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Tileset = __webpack_require__(/*! ../../Tileset */ \"./node_modules/phaser/src/tilemaps/Tileset.js\");\r\nvar ImageCollection = __webpack_require__(/*! ../../ImageCollection */ \"./node_modules/phaser/src/tilemaps/ImageCollection.js\");\r\nvar ParseObject = __webpack_require__(/*! ./ParseObject */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js\");\r\n\r\n/**\r\n * Tilesets and Image Collections\r\n *\r\n * @function Phaser.Tilemaps.Parsers.Tiled.ParseTilesets\r\n * @since 3.0.0\r\n *\r\n * @param {object} json - [description]\r\n *\r\n * @return {object} [description]\r\n */\r\nvar ParseTilesets = function (json)\r\n{\r\n    var tilesets = [];\r\n    var imageCollections = [];\r\n    var lastSet = null;\r\n    var stringID;\r\n\r\n    for (var i = 0; i < json.tilesets.length; i++)\r\n    {\r\n        //  name, firstgid, width, height, margin, spacing, properties\r\n        var set = json.tilesets[i];\r\n\r\n        if (set.source)\r\n        {\r\n            console.warn('Phaser can\\'t load external tilesets. Use the Embed Tileset button and then export the map again.');\r\n        }\r\n        else if (set.image)\r\n        {\r\n            var newSet = new Tileset(set.name, set.firstgid, set.tilewidth, set.tileheight, set.margin, set.spacing);\r\n\r\n            if (json.version > 1)\r\n            {\r\n                // Tiled 1.2+\r\n\r\n                if (Array.isArray(set.tiles))\r\n                {\r\n                    var tiles = {};\r\n                    var props = {};\r\n\r\n                    for (var t = 0; t < set.tiles.length; t++)\r\n                    {\r\n                        var tile = set.tiles[t];\r\n\r\n                        //  Convert tileproperties\r\n                        if (tile.properties)\r\n                        {\r\n                            var newPropData = {};\r\n\r\n                            tile.properties.forEach(function (propData)\r\n                            {\r\n                                newPropData[propData['name']] = propData['value'];\r\n                            });\r\n\r\n                            props[tile.id] = newPropData;\r\n                        }\r\n\r\n                        //  Convert objectgroup\r\n                        if (tile.objectgroup)\r\n                        {\r\n                            tiles[tile.id] = { objectgroup: tile.objectgroup };\r\n\r\n                            if (tile.objectgroup.objects)\r\n                            {\r\n                                var parsedObjects2 = tile.objectgroup.objects.map(\r\n                                    function (obj) { return ParseObject(obj); }\r\n                                );\r\n\r\n                                tiles[tile.id].objectgroup.objects = parsedObjects2;\r\n                            }\r\n                        }\r\n\r\n                        // Copy animation data\r\n                        if (tile.animation)\r\n                        {\r\n                            if (tiles.hasOwnProperty(tile.id))\r\n                            {\r\n                                tiles[tile.id].animation = tile.animation;\r\n                            }\r\n                            else\r\n                            {\r\n                                tiles[tile.id] = { animation: tile.animation };\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    newSet.tileData = tiles;\r\n                    newSet.tileProperties = props;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // Tiled 1\r\n\r\n                // Properties stored per-tile in object with string indexes starting at \"0\"\r\n                if (set.tileproperties)\r\n                {\r\n                    newSet.tileProperties = set.tileproperties;\r\n                }\r\n\r\n                // Object & terrain shapes stored per-tile in object with string indexes starting at \"0\"\r\n                if (set.tiles)\r\n                {\r\n                    newSet.tileData = set.tiles;\r\n\r\n                    // Parse the objects into Phaser format to match handling of other Tiled objects\r\n                    for (stringID in newSet.tileData)\r\n                    {\r\n                        var objectGroup = newSet.tileData[stringID].objectgroup;\r\n                        if (objectGroup && objectGroup.objects)\r\n                        {\r\n                            var parsedObjects1 = objectGroup.objects.map(\r\n                                function (obj) { return ParseObject(obj); }\r\n                            );\r\n                            newSet.tileData[stringID].objectgroup.objects = parsedObjects1;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            // For a normal sliced tileset the row/count/size information is computed when updated.\r\n            // This is done (again) after the image is set.\r\n            newSet.updateTileData(set.imagewidth, set.imageheight);\r\n\r\n            tilesets.push(newSet);\r\n        }\r\n        else\r\n        {\r\n            var newCollection = new ImageCollection(set.name, set.firstgid, set.tilewidth,\r\n                set.tileheight, set.margin, set.spacing, set.properties);\r\n\r\n            for (stringID in set.tiles)\r\n            {\r\n                var image = set.tiles[stringID].image;\r\n                var gid = set.firstgid + parseInt(stringID, 10);\r\n                newCollection.addImage(gid, image);\r\n            }\r\n\r\n            imageCollections.push(newCollection);\r\n        }\r\n\r\n        //  We've got a new Tileset, so set the lastgid into the previous one\r\n        if (lastSet)\r\n        {\r\n            lastSet.lastgid = set.firstgid - 1;\r\n        }\r\n\r\n        lastSet = set;\r\n    }\r\n\r\n    return { tilesets: tilesets, imageCollections: imageCollections };\r\n};\r\n\r\nmodule.exports = ParseTilesets;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL1BhcnNlVGlsZXNldHMuanM/YWY0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFlO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLG9GQUF1QjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQyxzRkFBZTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsc0JBQXNCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHlCQUF5QjtBQUM3RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHlCQUF5QjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvcGFyc2Vycy90aWxlZC9QYXJzZVRpbGVzZXRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGlsZXNldCA9IHJlcXVpcmUoJy4uLy4uL1RpbGVzZXQnKTtcclxudmFyIEltYWdlQ29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uLy4uL0ltYWdlQ29sbGVjdGlvbicpO1xyXG52YXIgUGFyc2VPYmplY3QgPSByZXF1aXJlKCcuL1BhcnNlT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogVGlsZXNldHMgYW5kIEltYWdlIENvbGxlY3Rpb25zXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZC5QYXJzZVRpbGVzZXRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUGFyc2VUaWxlc2V0cyA9IGZ1bmN0aW9uIChqc29uKVxyXG57XHJcbiAgICB2YXIgdGlsZXNldHMgPSBbXTtcclxuICAgIHZhciBpbWFnZUNvbGxlY3Rpb25zID0gW107XHJcbiAgICB2YXIgbGFzdFNldCA9IG51bGw7XHJcbiAgICB2YXIgc3RyaW5nSUQ7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLnRpbGVzZXRzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBuYW1lLCBmaXJzdGdpZCwgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzcGFjaW5nLCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdmFyIHNldCA9IGpzb24udGlsZXNldHNbaV07XHJcblxyXG4gICAgICAgIGlmIChzZXQuc291cmNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaGFzZXIgY2FuXFwndCBsb2FkIGV4dGVybmFsIHRpbGVzZXRzLiBVc2UgdGhlIEVtYmVkIFRpbGVzZXQgYnV0dG9uIGFuZCB0aGVuIGV4cG9ydCB0aGUgbWFwIGFnYWluLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZXQuaW1hZ2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbmV3U2V0ID0gbmV3IFRpbGVzZXQoc2V0Lm5hbWUsIHNldC5maXJzdGdpZCwgc2V0LnRpbGV3aWR0aCwgc2V0LnRpbGVoZWlnaHQsIHNldC5tYXJnaW4sIHNldC5zcGFjaW5nKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChqc29uLnZlcnNpb24gPiAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaWxlZCAxLjIrXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2V0LnRpbGVzKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCBzZXQudGlsZXMubGVuZ3RoOyB0KyspXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IHNldC50aWxlc1t0XTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBDb252ZXJ0IHRpbGVwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLnByb3BlcnRpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQcm9wRGF0YSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wRGF0YVtwcm9wRGF0YVsnbmFtZSddXSA9IHByb3BEYXRhWyd2YWx1ZSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNbdGlsZS5pZF0gPSBuZXdQcm9wRGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIENvbnZlcnQgb2JqZWN0Z3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUub2JqZWN0Z3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUuaWRdID0geyBvYmplY3Rncm91cDogdGlsZS5vYmplY3Rncm91cCB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLm9iamVjdGdyb3VwLm9iamVjdHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZE9iamVjdHMyID0gdGlsZS5vYmplY3Rncm91cC5vYmplY3RzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gUGFyc2VPYmplY3Qob2JqKTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUuaWRdLm9iamVjdGdyb3VwLm9iamVjdHMgPSBwYXJzZWRPYmplY3RzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBhbmltYXRpb24gZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5hbmltYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aWxlcy5oYXNPd25Qcm9wZXJ0eSh0aWxlLmlkKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlc1t0aWxlLmlkXS5hbmltYXRpb24gPSB0aWxlLmFuaW1hdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlc1t0aWxlLmlkXSA9IHsgYW5pbWF0aW9uOiB0aWxlLmFuaW1hdGlvbiB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBuZXdTZXQudGlsZURhdGEgPSB0aWxlcztcclxuICAgICAgICAgICAgICAgICAgICBuZXdTZXQudGlsZVByb3BlcnRpZXMgPSBwcm9wcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIFRpbGVkIDFcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0aWVzIHN0b3JlZCBwZXItdGlsZSBpbiBvYmplY3Qgd2l0aCBzdHJpbmcgaW5kZXhlcyBzdGFydGluZyBhdCBcIjBcIlxyXG4gICAgICAgICAgICAgICAgaWYgKHNldC50aWxlcHJvcGVydGllcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTZXQudGlsZVByb3BlcnRpZXMgPSBzZXQudGlsZXByb3BlcnRpZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT2JqZWN0ICYgdGVycmFpbiBzaGFwZXMgc3RvcmVkIHBlci10aWxlIGluIG9iamVjdCB3aXRoIHN0cmluZyBpbmRleGVzIHN0YXJ0aW5nIGF0IFwiMFwiXHJcbiAgICAgICAgICAgICAgICBpZiAoc2V0LnRpbGVzKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1NldC50aWxlRGF0YSA9IHNldC50aWxlcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIG9iamVjdHMgaW50byBQaGFzZXIgZm9ybWF0IHRvIG1hdGNoIGhhbmRsaW5nIG9mIG90aGVyIFRpbGVkIG9iamVjdHNcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHN0cmluZ0lEIGluIG5ld1NldC50aWxlRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3RHcm91cCA9IG5ld1NldC50aWxlRGF0YVtzdHJpbmdJRF0ub2JqZWN0Z3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RHcm91cCAmJiBvYmplY3RHcm91cC5vYmplY3RzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkT2JqZWN0czEgPSBvYmplY3RHcm91cC5vYmplY3RzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBQYXJzZU9iamVjdChvYmopOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LnRpbGVEYXRhW3N0cmluZ0lEXS5vYmplY3Rncm91cC5vYmplY3RzID0gcGFyc2VkT2JqZWN0czE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEZvciBhIG5vcm1hbCBzbGljZWQgdGlsZXNldCB0aGUgcm93L2NvdW50L3NpemUgaW5mb3JtYXRpb24gaXMgY29tcHV0ZWQgd2hlbiB1cGRhdGVkLlxyXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUgKGFnYWluKSBhZnRlciB0aGUgaW1hZ2UgaXMgc2V0LlxyXG4gICAgICAgICAgICBuZXdTZXQudXBkYXRlVGlsZURhdGEoc2V0LmltYWdld2lkdGgsIHNldC5pbWFnZWhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aWxlc2V0cy5wdXNoKG5ld1NldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBuZXdDb2xsZWN0aW9uID0gbmV3IEltYWdlQ29sbGVjdGlvbihzZXQubmFtZSwgc2V0LmZpcnN0Z2lkLCBzZXQudGlsZXdpZHRoLFxyXG4gICAgICAgICAgICAgICAgc2V0LnRpbGVoZWlnaHQsIHNldC5tYXJnaW4sIHNldC5zcGFjaW5nLCBzZXQucHJvcGVydGllcyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHN0cmluZ0lEIGluIHNldC50aWxlcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gc2V0LnRpbGVzW3N0cmluZ0lEXS5pbWFnZTtcclxuICAgICAgICAgICAgICAgIHZhciBnaWQgPSBzZXQuZmlyc3RnaWQgKyBwYXJzZUludChzdHJpbmdJRCwgMTApO1xyXG4gICAgICAgICAgICAgICAgbmV3Q29sbGVjdGlvbi5hZGRJbWFnZShnaWQsIGltYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaW1hZ2VDb2xsZWN0aW9ucy5wdXNoKG5ld0NvbGxlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFdlJ3ZlIGdvdCBhIG5ldyBUaWxlc2V0LCBzbyBzZXQgdGhlIGxhc3RnaWQgaW50byB0aGUgcHJldmlvdXMgb25lXHJcbiAgICAgICAgaWYgKGxhc3RTZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsYXN0U2V0Lmxhc3RnaWQgPSBzZXQuZmlyc3RnaWQgLSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGFzdFNldCA9IHNldDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyB0aWxlc2V0czogdGlsZXNldHMsIGltYWdlQ29sbGVjdGlvbnM6IGltYWdlQ29sbGVjdGlvbnMgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VUaWxlc2V0cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTilesets.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/parsers/tiled/index.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/parsers/tiled/index.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tilemaps.Parsers.Tiled\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    AssignTileProperties: __webpack_require__(/*! ./AssignTileProperties */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/AssignTileProperties.js\"),\r\n    Base64Decode: __webpack_require__(/*! ./Base64Decode */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/Base64Decode.js\"),\r\n    BuildTilesetIndex: __webpack_require__(/*! ./BuildTilesetIndex */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/BuildTilesetIndex.js\"),\r\n    ParseGID: __webpack_require__(/*! ./ParseGID */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseGID.js\"),\r\n    ParseImageLayers: __webpack_require__(/*! ./ParseImageLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseImageLayers.js\"),\r\n    ParseJSONTiled: __webpack_require__(/*! ./ParseJSONTiled */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseJSONTiled.js\"),\r\n    ParseObject: __webpack_require__(/*! ./ParseObject */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObject.js\"),\r\n    ParseObjectLayers: __webpack_require__(/*! ./ParseObjectLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseObjectLayers.js\"),\r\n    ParseTileLayers: __webpack_require__(/*! ./ParseTileLayers */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTileLayers.js\"),\r\n    ParseTilesets: __webpack_require__(/*! ./ParseTilesets */ \"./node_modules/phaser/src/tilemaps/parsers/tiled/ParseTilesets.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL2luZGV4LmpzPzFhYjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEIsbUJBQU8sQ0FBQyx3R0FBd0I7QUFDMUQsa0JBQWtCLG1CQUFPLENBQUMsd0ZBQWdCO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLGtHQUFxQjtBQUNwRCxjQUFjLG1CQUFPLENBQUMsZ0ZBQVk7QUFDbEMsc0JBQXNCLG1CQUFPLENBQUMsZ0dBQW9CO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLDRGQUFrQjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxrR0FBcUI7QUFDcEQscUJBQXFCLG1CQUFPLENBQUMsOEZBQW1CO0FBQ2hELG1CQUFtQixtQkFBTyxDQUFDLDBGQUFpQjs7QUFFNUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9wYXJzZXJzL3RpbGVkL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVGlsZW1hcHMuUGFyc2Vycy5UaWxlZFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFzc2lnblRpbGVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL0Fzc2lnblRpbGVQcm9wZXJ0aWVzJyksXHJcbiAgICBCYXNlNjREZWNvZGU6IHJlcXVpcmUoJy4vQmFzZTY0RGVjb2RlJyksXHJcbiAgICBCdWlsZFRpbGVzZXRJbmRleDogcmVxdWlyZSgnLi9CdWlsZFRpbGVzZXRJbmRleCcpLFxyXG4gICAgUGFyc2VHSUQ6IHJlcXVpcmUoJy4vUGFyc2VHSUQnKSxcclxuICAgIFBhcnNlSW1hZ2VMYXllcnM6IHJlcXVpcmUoJy4vUGFyc2VJbWFnZUxheWVycycpLFxyXG4gICAgUGFyc2VKU09OVGlsZWQ6IHJlcXVpcmUoJy4vUGFyc2VKU09OVGlsZWQnKSxcclxuICAgIFBhcnNlT2JqZWN0OiByZXF1aXJlKCcuL1BhcnNlT2JqZWN0JyksXHJcbiAgICBQYXJzZU9iamVjdExheWVyczogcmVxdWlyZSgnLi9QYXJzZU9iamVjdExheWVycycpLFxyXG4gICAgUGFyc2VUaWxlTGF5ZXJzOiByZXF1aXJlKCcuL1BhcnNlVGlsZUxheWVycycpLFxyXG4gICAgUGFyc2VUaWxlc2V0czogcmVxdWlyZSgnLi9QYXJzZVRpbGVzZXRzJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/parsers/tiled/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayer.js":
/*!****************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayer.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar StaticTilemapLayerRender = __webpack_require__(/*! ./StaticTilemapLayerRender */ \"./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerRender.js\");\r\nvar TilemapComponents = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/tilemaps/components/index.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Static Tilemap Layer is a Game Object that renders LayerData from a Tilemap when used in combination\r\n * with one, or more, Tilesets.\r\n *\r\n * A Static Tilemap Layer is optimized for rendering speed over flexibility. You cannot apply per-tile\r\n * effects like tint or alpha, or change the tiles or tilesets the layer uses.\r\n * \r\n * Use a Static Tilemap Layer instead of a Dynamic Tilemap Layer when you don't need tile manipulation features.\r\n *\r\n * @class StaticTilemapLayer\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.Tilemaps\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {Phaser.Tilemaps.Tilemap} tilemap - The Tilemap this layer is a part of.\r\n * @param {integer} layerIndex - The index of the LayerData associated with this layer.\r\n * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n * @param {number} [x=0] - The world x position where the top left of this layer will be placed.\r\n * @param {number} [y=0] - The world y position where the top left of this layer will be placed.\r\n */\r\nvar StaticTilemapLayer = new Class({\r\n\r\n    Extends: GameObject,\r\n\r\n    Mixins: [\r\n        Components.Alpha,\r\n        Components.BlendMode,\r\n        Components.ComputedSize,\r\n        Components.Depth,\r\n        Components.Flip,\r\n        Components.GetBounds,\r\n        Components.Origin,\r\n        Components.Pipeline,\r\n        Components.Transform,\r\n        Components.Visible,\r\n        Components.ScrollFactor,\r\n        StaticTilemapLayerRender\r\n    ],\r\n\r\n    initialize:\r\n\r\n    function StaticTilemapLayer (scene, tilemap, layerIndex, tileset, x, y)\r\n    {\r\n        GameObject.call(this, scene, 'StaticTilemapLayer');\r\n\r\n        /**\r\n         * Used internally by physics system to perform fast type checks.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#isTilemap\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.isTilemap = true;\r\n\r\n        /**\r\n         * The Tilemap that this layer is a part of.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#tilemap\r\n         * @type {Phaser.Tilemaps.Tilemap}\r\n         * @since 3.0.0\r\n         */\r\n        this.tilemap = tilemap;\r\n\r\n        /**\r\n         * The index of the LayerData associated with this layer.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#layerIndex\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.layerIndex = layerIndex;\r\n\r\n        /**\r\n         * The LayerData associated with this layer. LayerData can only be associated with one\r\n         * tilemap layer.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#layer\r\n         * @type {Phaser.Tilemaps.LayerData}\r\n         * @since 3.0.0\r\n         */\r\n        this.layer = tilemap.layers[layerIndex];\r\n\r\n        // Link the LayerData with this static tilemap layer\r\n        this.layer.tilemapLayer = this;\r\n\r\n        /**\r\n         * The Tileset/s associated with this layer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array of Tileset objects, previously it was a single reference.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#tileset\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.tileset = [];\r\n\r\n        /**\r\n         * Used internally by the Canvas renderer.\r\n         * This holds the tiles that are visible within the camera in the last frame.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#culledTiles\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.culledTiles = [];\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * You can control if the Cameras should cull tiles before rendering them or not.\r\n         * By default the camera will try to cull the tiles in this layer, to avoid over-drawing to the renderer.\r\n         *\r\n         * However, there are some instances when you may wish to disable this, and toggling this flag allows\r\n         * you to do so. Also see `setSkipCull` for a chainable method that does the same thing.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#skipCull\r\n         * @type {boolean}\r\n         * @since 3.12.0\r\n         */\r\n        this.skipCull = false;\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * The total number of tiles drawn by the renderer in the last frame.\r\n         * \r\n         * This only works when rending with Canvas.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#tilesDrawn\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.12.0\r\n         */\r\n        this.tilesDrawn = 0;\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * The total number of tiles in this layer. Updated every frame.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#tilesTotal\r\n         * @type {integer}\r\n         * @readonly\r\n         * @since 3.12.0\r\n         */\r\n        this.tilesTotal = this.layer.width * this.layer.height;\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * The amount of extra tiles to add into the cull rectangle when calculating its horizontal size.\r\n         *\r\n         * See the method `setCullPadding` for more details.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#cullPaddingX\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.12.0\r\n         */\r\n        this.cullPaddingX = 1;\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * The amount of extra tiles to add into the cull rectangle when calculating its vertical size.\r\n         *\r\n         * See the method `setCullPadding` for more details.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#cullPaddingY\r\n         * @type {integer}\r\n         * @default 1\r\n         * @since 3.12.0\r\n         */\r\n        this.cullPaddingY = 1;\r\n\r\n        /**\r\n         * Canvas only.\r\n         * \r\n         * The callback that is invoked when the tiles are culled.\r\n         *\r\n         * By default it will call `TilemapComponents.CullTiles` but you can override this to call any function you like.\r\n         *\r\n         * It will be sent 3 arguments:\r\n         *\r\n         * 1. The Phaser.Tilemaps.LayerData object for this Layer\r\n         * 2. The Camera that is culling the layer. You can check its `dirty` property to see if it has changed since the last cull.\r\n         * 3. A reference to the `culledTiles` array, which should be used to store the tiles you want rendered.\r\n         *\r\n         * See the `TilemapComponents.CullTiles` source code for details on implementing your own culling system.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#cullCallback\r\n         * @type {function}\r\n         * @since 3.12.0\r\n         */\r\n        this.cullCallback = TilemapComponents.CullTiles;\r\n\r\n        /**\r\n         * A reference to the renderer.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#renderer\r\n         * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.renderer = scene.sys.game.renderer;\r\n\r\n        /**\r\n         * An array of vertex buffer objects, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single instance.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#vertexBuffer\r\n         * @type {WebGLBuffer[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexBuffer = [];\r\n\r\n        /**\r\n         * An array of ArrayBuffer objects, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single instance.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#bufferData\r\n         * @type {ArrayBuffer[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.bufferData = [];\r\n\r\n        /**\r\n         * An array of Float32 Array objects, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single instance.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#vertexViewF32\r\n         * @type {Float32Array[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexViewF32 = [];\r\n\r\n        /**\r\n         * An array of Uint32 Array objects, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single instance.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#vertexViewU32\r\n         * @type {Uint32Array[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexViewU32 = [];\r\n\r\n        /**\r\n         * An array of booleans, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single boolean.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#dirty\r\n         * @type {boolean[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.dirty = [];\r\n\r\n        /**\r\n         * An array of integers, used by the WebGL renderer.\r\n         * \r\n         * As of Phaser 3.14 this property is now an array, where each element maps to a Tileset instance. Previously it was a single integer.\r\n         * \r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#vertexCount\r\n         * @type {integer[]}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this.vertexCount = [];\r\n\r\n        /**\r\n         * The rendering (draw) order of the tiles in this layer.\r\n         * \r\n         * The default is 0 which is 'right-down', meaning it will draw the tiles starting from the top-left,\r\n         * drawing to the right and then moving down to the next row.\r\n         * \r\n         * The draw orders are:\r\n         * \r\n         * 0 = right-down\r\n         * 1 = left-down\r\n         * 2 = right-up\r\n         * 3 = left-up\r\n         * \r\n         * This can be changed via the `setRenderOrder` method.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#_renderOrder\r\n         * @type {integer}\r\n         * @default 0\r\n         * @private\r\n         * @since 3.12.0\r\n         */\r\n        this._renderOrder = 0;\r\n\r\n        /**\r\n         * A temporary Transform Matrix, re-used internally during batching.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#_tempMatrix\r\n         * @private\r\n         * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n         * @since 3.14.0\r\n         */\r\n        this._tempMatrix = new TransformMatrix();\r\n\r\n        /**\r\n         * An array holding the mapping between the tile indexes and the tileset they belong to.\r\n         *\r\n         * @name Phaser.Tilemaps.StaticTilemapLayer#gidMap\r\n         * @type {Phaser.Tilemaps.Tileset[]}\r\n         * @since 3.14.0\r\n         */\r\n        this.gidMap = [];\r\n\r\n        this.setTilesets(tileset);\r\n        this.setAlpha(this.layer.alpha);\r\n        this.setPosition(x, y);\r\n        this.setOrigin();\r\n        this.setSize(tilemap.tileWidth * this.layer.width, tilemap.tileHeight * this.layer.height);\r\n\r\n        this.updateVBOData();\r\n\r\n        this.initPipeline('TextureTintPipeline');\r\n\r\n        scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function ()\r\n        {\r\n            this.updateVBOData();\r\n        }, this);\r\n    },\r\n\r\n    /**\r\n     * Populates the internal `tileset` array with the Tileset references this Layer requires for rendering.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setTilesets\r\n     * @private\r\n     * @since 3.14.0\r\n     * \r\n     * @param {(string|string[]|Phaser.Tilemaps.Tileset|Phaser.Tilemaps.Tileset[])} tileset - The tileset, or an array of tilesets, used to render this layer. Can be a string or a Tileset object.\r\n     */\r\n    setTilesets: function (tilesets)\r\n    {\r\n        var gidMap = [];\r\n        var setList = [];\r\n        var map = this.tilemap;\r\n\r\n        if (!Array.isArray(tilesets))\r\n        {\r\n            tilesets = [ tilesets ];\r\n        }\r\n\r\n        for (var i = 0; i < tilesets.length; i++)\r\n        {\r\n            var tileset = tilesets[i];\r\n\r\n            if (typeof tileset === 'string')\r\n            {\r\n                tileset = map.getTileset(tileset);\r\n            }\r\n\r\n            if (tileset)\r\n            {\r\n                setList.push(tileset);\r\n\r\n                var s = tileset.firstgid;\r\n\r\n                for (var t = 0; t < tileset.total; t++)\r\n                {\r\n                    gidMap[s + t] = tileset;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.gidMap = gidMap;\r\n        this.tileset = setList;\r\n    },\r\n\r\n    /**\r\n     * Prepares the VBO data arrays for population by the `upload` method.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#updateVBOData\r\n     * @private\r\n     * @since 3.14.0\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    updateVBOData: function ()\r\n    {\r\n        for (var i = 0; i < this.tileset.length; i++)\r\n        {\r\n            this.dirty[i] = true;\r\n            this.vertexCount[i] = 0;\r\n            this.vertexBuffer[i] = null;\r\n            this.bufferData[i] = null;\r\n            this.vertexViewF32[i] = null;\r\n            this.vertexViewU32[i] = null;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Upload the tile data to a VBO.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#upload\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera to render to.\r\n     * @param {integer} tilesetIndex - The tileset index.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    upload: function (camera, tilesetIndex)\r\n    {\r\n        var renderer = this.renderer;\r\n        var gl = renderer.gl;\r\n\r\n        var pipeline = renderer.pipelines.TextureTintPipeline;\r\n\r\n        if (this.dirty[tilesetIndex])\r\n        {\r\n            var tileset = this.tileset[tilesetIndex];\r\n            var mapWidth = this.layer.width;\r\n            var mapHeight = this.layer.height;\r\n            var width = tileset.image.source[0].width;\r\n            var height = tileset.image.source[0].height;\r\n            var mapData = this.layer.data;\r\n            var tile;\r\n            var row;\r\n            var col;\r\n            var renderOrder = this._renderOrder;\r\n            var minTileIndex = tileset.firstgid;\r\n            var maxTileIndex = tileset.firstgid + tileset.total;\r\n    \r\n            var vertexBuffer = this.vertexBuffer[tilesetIndex];\r\n            var bufferData = this.bufferData[tilesetIndex];\r\n            var vOffset = -1;\r\n            var bufferSize = (mapWidth * mapHeight) * pipeline.vertexSize * 6;\r\n\r\n            this.vertexCount[tilesetIndex] = 0;\r\n    \r\n            if (bufferData === null)\r\n            {\r\n                bufferData = new ArrayBuffer(bufferSize);\r\n\r\n                this.bufferData[tilesetIndex] = bufferData;\r\n\r\n                this.vertexViewF32[tilesetIndex] = new Float32Array(bufferData);\r\n                this.vertexViewU32[tilesetIndex] = new Uint32Array(bufferData);\r\n            }\r\n    \r\n            if (renderOrder === 0)\r\n            {\r\n                //  right-down\r\n        \r\n                for (row = 0; row < mapHeight; row++)\r\n                {\r\n                    for (col = 0; col < mapWidth; col++)\r\n                    {\r\n                        tile = mapData[row][col];\r\n        \r\n                        if (!tile || tile.index < minTileIndex || tile.index > maxTileIndex || !tile.visible)\r\n                        {\r\n                            continue;\r\n                        }\r\n    \r\n                        vOffset = this.batchTile(vOffset, tile, tileset, width, height, camera, tilesetIndex);\r\n                    }\r\n                }\r\n            }\r\n            else if (renderOrder === 1)\r\n            {\r\n                //  left-down\r\n        \r\n                for (row = 0; row < mapHeight; row++)\r\n                {\r\n                    for (col = mapWidth - 1; col >= 0; col--)\r\n                    {\r\n                        tile = mapData[row][col];\r\n        \r\n                        if (!tile || tile.index < minTileIndex || tile.index > maxTileIndex || !tile.visible)\r\n                        {\r\n                            continue;\r\n                        }\r\n    \r\n                        vOffset = this.batchTile(vOffset, tile, tileset, width, height, camera, tilesetIndex);\r\n                    }\r\n                }\r\n            }\r\n            else if (renderOrder === 2)\r\n            {\r\n                //  right-up\r\n        \r\n                for (row = mapHeight - 1; row >= 0; row--)\r\n                {\r\n                    for (col = 0; col < mapWidth; col++)\r\n                    {\r\n                        tile = mapData[row][col];\r\n        \r\n                        if (!tile || tile.index < minTileIndex || tile.index > maxTileIndex || !tile.visible)\r\n                        {\r\n                            continue;\r\n                        }\r\n    \r\n                        vOffset = this.batchTile(vOffset, tile, tileset, width, height, camera, tilesetIndex);\r\n                    }\r\n                }\r\n            }\r\n            else if (renderOrder === 3)\r\n            {\r\n                //  left-up\r\n        \r\n                for (row = mapHeight - 1; row >= 0; row--)\r\n                {\r\n                    for (col = mapWidth - 1; col >= 0; col--)\r\n                    {\r\n                        tile = mapData[row][col];\r\n        \r\n                        if (!tile || tile.index < minTileIndex || tile.index > maxTileIndex || !tile.visible)\r\n                        {\r\n                            continue;\r\n                        }\r\n    \r\n                        vOffset = this.batchTile(vOffset, tile, tileset, width, height, camera, tilesetIndex);\r\n                    }\r\n                }\r\n            }\r\n        \r\n            this.dirty[tilesetIndex] = false;\r\n    \r\n            if (vertexBuffer === null)\r\n            {\r\n                vertexBuffer = renderer.createVertexBuffer(bufferData, gl.STATIC_DRAW);\r\n    \r\n                this.vertexBuffer[tilesetIndex] = vertexBuffer;\r\n            }\r\n            else\r\n            {\r\n                renderer.setVertexBuffer(vertexBuffer);\r\n    \r\n                gl.bufferSubData(gl.ARRAY_BUFFER, 0, bufferData);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Add a single tile into the batch.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#batchTile\r\n     * @private\r\n     * @since 3.12.0\r\n     *\r\n     * @param {integer} vOffset - The vertex offset.\r\n     * @param {any} tile - The tile being rendered.\r\n     * @param {any} tileset - The tileset being used for rendering.\r\n     * @param {integer} width - The width of the tileset image in pixels.\r\n     * @param {integer} height - The height of the tileset image in pixels.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the layer is being rendered with.\r\n     * @param {integer} tilesetIndex - The tileset index.\r\n     *\r\n     * @return {integer} The new vOffset value.\r\n     */\r\n    batchTile: function (vOffset, tile, tileset, width, height, camera, tilesetIndex)\r\n    {\r\n        var texCoords = tileset.getTileTextureCoordinates(tile.index);\r\n\r\n        if (!texCoords)\r\n        {\r\n            return vOffset;\r\n        }\r\n\r\n        var tileWidth = tileset.tileWidth;\r\n        var tileHeight = tileset.tileHeight;\r\n\r\n        var halfTileWidth = tileWidth / 2;\r\n        var halfTileHeight = tileHeight / 2;\r\n\r\n        var u0 = texCoords.x / width;\r\n        var v0 = texCoords.y / height;\r\n        var u1 = (texCoords.x + tileWidth) / width;\r\n        var v1 = (texCoords.y + tileHeight) / height;\r\n\r\n        var matrix = this._tempMatrix;\r\n\r\n        var x = -halfTileWidth;\r\n        var y = -halfTileHeight;\r\n\r\n        if (tile.flipX)\r\n        {\r\n            tileWidth *= -1;\r\n            x += tileset.tileWidth;\r\n        }\r\n\r\n        if (tile.flipY)\r\n        {\r\n            tileHeight *= -1;\r\n            y += tileset.tileHeight;\r\n        }\r\n\r\n        var xw = x + tileWidth;\r\n        var yh = y + tileHeight;\r\n\r\n        matrix.applyITRS(halfTileWidth + tile.pixelX, halfTileHeight + tile.pixelY, tile.rotation, 1, 1);\r\n\r\n        var tint = Utils.getTintAppendFloatAlpha(0xffffff, camera.alpha * this.alpha * tile.alpha);\r\n\r\n        var tx0 = matrix.getX(x, y);\r\n        var ty0 = matrix.getY(x, y);\r\n\r\n        var tx1 = matrix.getX(x, yh);\r\n        var ty1 = matrix.getY(x, yh);\r\n\r\n        var tx2 = matrix.getX(xw, yh);\r\n        var ty2 = matrix.getY(xw, yh);\r\n\r\n        var tx3 = matrix.getX(xw, y);\r\n        var ty3 = matrix.getY(xw, y);\r\n\r\n        if (camera.roundPixels)\r\n        {\r\n            tx0 = Math.round(tx0);\r\n            ty0 = Math.round(ty0);\r\n\r\n            tx1 = Math.round(tx1);\r\n            ty1 = Math.round(ty1);\r\n\r\n            tx2 = Math.round(tx2);\r\n            ty2 = Math.round(ty2);\r\n\r\n            tx3 = Math.round(tx3);\r\n            ty3 = Math.round(ty3);\r\n        }\r\n\r\n        var vertexViewF32 = this.vertexViewF32[tilesetIndex];\r\n        var vertexViewU32 = this.vertexViewU32[tilesetIndex];\r\n\r\n        vertexViewF32[++vOffset] = tx0;\r\n        vertexViewF32[++vOffset] = ty0;\r\n        vertexViewF32[++vOffset] = u0;\r\n        vertexViewF32[++vOffset] = v0;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        vertexViewF32[++vOffset] = tx1;\r\n        vertexViewF32[++vOffset] = ty1;\r\n        vertexViewF32[++vOffset] = u0;\r\n        vertexViewF32[++vOffset] = v1;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        vertexViewF32[++vOffset] = tx2;\r\n        vertexViewF32[++vOffset] = ty2;\r\n        vertexViewF32[++vOffset] = u1;\r\n        vertexViewF32[++vOffset] = v1;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        vertexViewF32[++vOffset] = tx0;\r\n        vertexViewF32[++vOffset] = ty0;\r\n        vertexViewF32[++vOffset] = u0;\r\n        vertexViewF32[++vOffset] = v0;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        vertexViewF32[++vOffset] = tx2;\r\n        vertexViewF32[++vOffset] = ty2;\r\n        vertexViewF32[++vOffset] = u1;\r\n        vertexViewF32[++vOffset] = v1;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        vertexViewF32[++vOffset] = tx3;\r\n        vertexViewF32[++vOffset] = ty3;\r\n        vertexViewF32[++vOffset] = u1;\r\n        vertexViewF32[++vOffset] = v0;\r\n        vertexViewF32[++vOffset] = 0;\r\n        vertexViewU32[++vOffset] = tint;\r\n\r\n        this.vertexCount[tilesetIndex] += 6;\r\n\r\n        return vOffset;\r\n    },\r\n\r\n    /**\r\n     * Sets the rendering (draw) order of the tiles in this layer.\r\n     * \r\n     * The default is 'right-down', meaning it will order the tiles starting from the top-left,\r\n     * drawing to the right and then moving down to the next row.\r\n     * \r\n     * The draw orders are:\r\n     * \r\n     * 0 = right-down\r\n     * 1 = left-down\r\n     * 2 = right-up\r\n     * 3 = left-up\r\n     * \r\n     * Setting the render order does not change the tiles or how they are stored in the layer,\r\n     * it purely impacts the order in which they are rendered.\r\n     * \r\n     * You can provide either an integer (0 to 3), or the string version of the order.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setRenderOrder\r\n     * @since 3.12.0\r\n     *\r\n     * @param {(integer|string)} renderOrder - The render (draw) order value. Either an integer between 0 and 3, or a string: 'right-down', 'left-down', 'right-up' or 'left-up'.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setRenderOrder: function (renderOrder)\r\n    {\r\n        var orders = [ 'right-down', 'left-down', 'right-up', 'left-up' ];\r\n\r\n        if (typeof renderOrder === 'string')\r\n        {\r\n            renderOrder = orders.indexOf(renderOrder);\r\n        }\r\n\r\n        if (renderOrder >= 0 && renderOrder < 4)\r\n        {\r\n            this._renderOrder = renderOrder;\r\n\r\n            for (var i = 0; i < this.tileset.length; i++)\r\n            {\r\n                this.dirty[i] = true;\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces at the given tile coordinates of the specified layer. Interesting\r\n     * faces are used internally for optimizing collisions against tiles. This method is mostly used\r\n     * internally to optimize recalculating faces when only one tile has been changed.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#calculateFacesAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The x coordinate.\r\n     * @param {integer} tileY - The y coordinate.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    calculateFacesAt: function (tileX, tileY)\r\n    {\r\n        TilemapComponents.CalculateFacesAt(tileX, tileY, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Calculates interesting faces within the rectangular area specified (in tile coordinates) of the\r\n     * layer. Interesting faces are used internally for optimizing collisions against tiles. This method\r\n     * is mostly used internally.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#calculateFacesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The top most tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    calculateFacesWithin: function (tileX, tileY, width, height)\r\n    {\r\n        TilemapComponents.CalculateFacesWithin(tileX, tileY, width, height, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Creates a Sprite for every object matching the given tile indexes in the layer. You can\r\n     * optionally specify if each tile will be replaced with a new tile after the Sprite has been\r\n     * created. This is useful if you want to lay down special tiles in a level that are converted to\r\n     * Sprites, but want to replace the tile itself with a floor tile or similar once converted.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#createFromTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - The tile index, or array of indexes, to create Sprites from.\r\n     * @param {(integer|array)} replacements - The tile index, or array of indexes, to change a converted\r\n     * tile to. Set to `null` to leave the tiles unchanged. If an array is given, it is assumed to be a\r\n     * one-to-one mapping with the indexes array.\r\n     * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} spriteConfig - The config object to pass into the Sprite creator (i.e.\r\n     * scene.make.sprite).\r\n     * @param {Phaser.Scene} [scene=scene the map is within] - The Scene to create the Sprites within.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when determining the world XY\r\n     *\r\n     * @return {Phaser.GameObjects.Sprite[]} An array of the Sprites that were created.\r\n     */\r\n    createFromTiles: function (indexes, replacements, spriteConfig, scene, camera)\r\n    {\r\n        return TilemapComponents.CreateFromTiles(indexes, replacements, spriteConfig, scene, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Returns the tiles in the given layer that are within the cameras viewport.\r\n     * This is used internally.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#cull\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera] - The Camera to run the cull check against.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    cull: function (camera)\r\n    {\r\n        return this.cullCallback(this.layer, camera, this.culledTiles);\r\n    },\r\n\r\n    /**\r\n     * Canvas only.\r\n     * \r\n     * You can control if the Cameras should cull tiles before rendering them or not.\r\n     * By default the camera will try to cull the tiles in this layer, to avoid over-drawing to the renderer.\r\n     *\r\n     * However, there are some instances when you may wish to disable this.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setSkipCull\r\n     * @since 3.12.0\r\n     *\r\n     * @param {boolean} [value=true] - Set to `true` to stop culling tiles. Set to `false` to enable culling again.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setSkipCull: function (value)\r\n    {\r\n        if (value === undefined) { value = true; }\r\n\r\n        this.skipCull = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Canvas only.\r\n     * \r\n     * When a Camera culls the tiles in this layer it does so using its view into the world, building up a\r\n     * rectangle inside which the tiles must exist or they will be culled. Sometimes you may need to expand the size\r\n     * of this 'cull rectangle', especially if you plan on rotating the Camera viewing the layer. Do so\r\n     * by providing the padding values. The values given are in tiles, not pixels. So if the tile width was 32px\r\n     * and you set `paddingX` to be 4, it would add 32px x 4 to the cull rectangle (adjusted for scale)\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCullPadding\r\n     * @since 3.12.0\r\n     *\r\n     * @param {integer} [paddingX=1] - The amount of extra horizontal tiles to add to the cull check padding.\r\n     * @param {integer} [paddingY=1] - The amount of extra vertical tiles to add to the cull check padding.\r\n     *\r\n     * @return {this} This Tilemap Layer object.\r\n     */\r\n    setCullPadding: function (paddingX, paddingY)\r\n    {\r\n        if (paddingX === undefined) { paddingX = 1; }\r\n        if (paddingY === undefined) { paddingY = 1; }\r\n\r\n        this.cullPaddingX = paddingX;\r\n        this.cullPaddingY = paddingY;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Searches the entire map layer for the first tile matching the given index, then returns that Tile\r\n     * object. If no match is found, it returns null. The search starts from the top-left tile and\r\n     * continues horizontally until it hits the end of the row, then it drops down to the next column.\r\n     * If the reverse boolean is true, it scans starting from the bottom-right corner traveling up to\r\n     * the top-left.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#findByIndex\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} index - The tile index value to search for.\r\n     * @param {integer} [skip=0] - The number of times to skip a matching tile before returning.\r\n     * @param {boolean} [reverse=false] - If true it will scan the layer in reverse, starting at the\r\n     * bottom-right. Otherwise it scans from the top-left.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} A Tile object.\r\n     */\r\n    findByIndex: function (findIndex, skip, reverse)\r\n    {\r\n        return TilemapComponents.FindByIndex(findIndex, skip, reverse, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Find the first tile in the given rectangular area (in tile coordinates) of the layer that\r\n     * satisfies the provided testing function. I.e. finds the first tile for which `callback` returns\r\n     * true. Similar to Array.prototype.find in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#findTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n     * callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The left most tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [tileY=0] - The topmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {?Phaser.Tilemaps.Tile}\r\n     */\r\n    findTile: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.FindTile(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * filter callback function. Any tiles that pass the filter test (i.e. where the callback returns\r\n     * true) will returned as a new array. Similar to Array.prototype.Filter in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#filterTiles\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n     * callback as the first and only parameter. The callback should return true for tiles that pass the\r\n     * filter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The leftmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [tileY=0] - The topmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    filterTiles: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.FilterTiles(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * For each tile in the given rectangular area (in tile coordinates) of the layer, run the given\r\n     * callback. Similar to Array.prototype.forEach in vanilla JS.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#forEachTile\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The callback. Each tile in the given area will be passed to this\r\n     * callback as the first and only parameter.\r\n     * @param {object} [context] - The context under which the callback should be run.\r\n     * @param {integer} [tileX=0] - The leftmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [tileY=0] - The topmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    forEachTile: function (callback, context, tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        TilemapComponents.ForEachTile(callback, context, tileX, tileY, width, height, filteringOptions, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given tile coordinates from the given layer.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#getTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - X position to get the tile from (given in tile units, not pixels).\r\n     * @param {integer} tileY - Y position to get the tile from (given in tile units, not pixels).\r\n     * @param {boolean} [nonNull=false] - If true getTile won't return null for empty tiles, but a Tile\r\n     * object with an index of -1.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates were invalid.\r\n     */\r\n    getTileAt: function (tileX, tileY, nonNull)\r\n    {\r\n        return TilemapComponents.GetTileAt(tileX, tileY, nonNull, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets a tile at the given world coordinates from the given layer.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#getTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - X position to get the tile from (given in pixels)\r\n     * @param {number} worldY - Y position to get the tile from (given in pixels)\r\n     * @param {boolean} [nonNull=false] - If true, function won't return null for empty tiles, but a Tile\r\n     * object with an index of -1.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile} The tile at the given coordinates or null if no tile was found or the coordinates\r\n     * were invalid.\r\n     */\r\n    getTileAtWorldXY: function (worldX, worldY, nonNull, camera)\r\n    {\r\n        return TilemapComponents.GetTileAtWorldXY(worldX, worldY, nonNull, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in tile coordinates) of the layer.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#getTilesWithin\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} [tileX=0] - The leftmost tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [tileY=0] - The topmost tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} [width=max width based on tileX] - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} [height=max height based on tileY] - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithin: function (tileX, tileY, width, height, filteringOptions)\r\n    {\r\n        return TilemapComponents.GetTilesWithin(tileX, tileY, width, height, filteringOptions, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles in the given rectangular area (in world coordinates) of the layer.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#getTilesWithinWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The leftmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {number} worldY - The topmost tile index (in tile coordinates) to use as the origin of the area to filter.\r\n     * @param {number} width - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {number} height - How many tiles high from the `tileY` index the area will be.\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when factoring in which tiles to return.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithinWorldXY: function (worldX, worldY, width, height, filteringOptions, camera)\r\n    {\r\n        return TilemapComponents.GetTilesWithinWorldXY(worldX, worldY, width, height, filteringOptions, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Gets the tiles that overlap with the given shape in the given layer. The shape must be a Circle,\r\n     * Line, Rectangle or Triangle. The shape should be in world coordinates.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#getTilesWithinShape\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Geom.Circle|Phaser.Geom.Line|Phaser.Geom.Rectangle|Phaser.Geom.Triangle)} shape - A shape in world (pixel) coordinates\r\n     * @param {Phaser.Types.Tilemaps.FilteringOptions} [filteringOptions] - Optional filters to apply when getting the tiles.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Tilemaps.Tile[]} An array of Tile objects.\r\n     */\r\n    getTilesWithinShape: function (shape, filteringOptions, camera)\r\n    {\r\n        return TilemapComponents.GetTilesWithinShape(shape, filteringOptions, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in tile coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#hasTileAt\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - X position to get the tile from in tile coordinates.\r\n     * @param {integer} tileY - Y position to get the tile from in tile coordinates.\r\n     *\r\n     * @return {boolean}\r\n     */\r\n    hasTileAt: function (tileX, tileY)\r\n    {\r\n        return TilemapComponents.HasTileAt(tileX, tileY, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Checks if there is a tile at the given location (in world coordinates) in the given layer. Returns\r\n     * false if there is no tile or if the tile at that location has an index of -1.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#hasTileAtWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The X coordinate of the world position.\r\n     * @param {number} worldY - The Y coordinate of the world position.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {boolean}\r\n     */\r\n    hasTileAtWorldXY: function (worldX, worldY, camera)\r\n    {\r\n        return TilemapComponents.HasTileAtWorldXY(worldX, worldY, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Draws a debug representation of the layer to the given Graphics. This is helpful when you want to\r\n     * get a quick idea of which of your tiles are colliding and which have interesting faces. The tiles\r\n     * are drawn starting at (0, 0) in the Graphics, allowing you to place the debug representation\r\n     * wherever you want on the screen.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#renderDebug\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.GameObjects.Graphics} graphics - The target Graphics object to draw upon.\r\n     * @param {Phaser.Types.Tilemaps.StyleConfig} styleConfig - An object specifying the colors to use for the debug drawing.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    renderDebug: function (graphics, styleConfig)\r\n    {\r\n        TilemapComponents.RenderDebug(graphics, styleConfig, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the given tile or tiles within a layer by index. You can pass in either a\r\n     * single numeric index or an array of indexes: [2, 3, 15, 20]. The `collides` parameter controls if\r\n     * collision will be enabled (true) or disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCollision\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear\r\n     * collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the\r\n     * update.\r\n     * @param {boolean} [updateLayer=true] - If true, updates the current tiles on the layer. Set to\r\n     * false if no tiles have been placed for significant performance boost.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollision: function (indexes, collides, recalculateFaces, updateLayer)\r\n    {\r\n        TilemapComponents.SetCollision(indexes, collides, recalculateFaces, this.layer, updateLayer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on a range of tiles in a layer whose index is between the specified `start` and\r\n     * `stop` (inclusive). Calling this with a start value of 10 and a stop value of 14 would set\r\n     * collision for tiles 10, 11, 12, 13 and 14. The `collides` parameter controls if collision will be\r\n     * enabled (true) or disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCollisionBetween\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} start - The first index of the tile to be set for collision.\r\n     * @param {integer} stop - The last index of the tile to be set for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear\r\n     * collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the\r\n     * update.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionBetween: function (start, stop, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionBetween(start, stop, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking tile properties. If a tile has a property\r\n     * that matches the given properties object, its collision flag will be set. The `collides`\r\n     * parameter controls if collision will be enabled (true) or disabled (false). Passing in\r\n     * `{ collides: true }` would update the collision flag on any tiles with a \"collides\" property that\r\n     * has a value of true. Any tile that doesn't have \"collides\" set to true will be ignored. You can\r\n     * also use an array of values, e.g. `{ types: [\"stone\", \"lava\", \"sand\" ] }`. If a tile has a\r\n     * \"types\" property that matches any of those values, its collision flag will be updated.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCollisionByProperty\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} properties - An object with tile properties and corresponding values that should\r\n     * be checked.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear\r\n     * collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the\r\n     * update.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionByProperty: function (properties, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionByProperty(properties, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on all tiles in the given layer, except for tiles that have an index specified in\r\n     * the given array. The `collides` parameter controls if collision will be enabled (true) or\r\n     * disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCollisionByExclusion\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer[]} indexes - An array of the tile indexes to not be counted for collision.\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear\r\n     * collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the\r\n     * update.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionByExclusion: function (indexes, collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionByExclusion(indexes, collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a global collision callback for the given tile index within the layer. This will affect all\r\n     * tiles on this layer that have the same index. If a callback is already set for the tile index it\r\n     * will be replaced. Set the callback to null to remove it. If you want to set a callback for a tile\r\n     * at a specific location on the map then see setTileLocationCallback.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setTileIndexCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(integer|array)} indexes - Either a single tile index, or an array of tile indexes to have a\r\n     * collision callback set for.\r\n     * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} callbackContext - The context under which the callback is called.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setTileIndexCallback: function (indexes, callback, callbackContext)\r\n    {\r\n        TilemapComponents.SetTileIndexCallback(indexes, callback, callbackContext, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets collision on the tiles within a layer by checking each tiles collision group data\r\n     * (typically defined in Tiled within the tileset collision editor). If any objects are found within\r\n     * a tiles collision group, the tile's colliding information will be set. The `collides` parameter\r\n     * controls if collision will be enabled (true) or disabled (false).\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setCollisionFromCollisionGroup\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [collides=true] - If true it will enable collision. If false it will clear\r\n     * collision.\r\n     * @param {boolean} [recalculateFaces=true] - Whether or not to recalculate the tile faces after the\r\n     * update.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setCollisionFromCollisionGroup: function (collides, recalculateFaces)\r\n    {\r\n        TilemapComponents.SetCollisionFromCollisionGroup(collides, recalculateFaces, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a collision callback for the given rectangular area (in tile coordinates) within the layer.\r\n     * If a callback is already set for the tile index it will be replaced. Set the callback to null to\r\n     * remove it.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#setTileLocationCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The leftmost tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} tileY - The topmost tile index (in tile coordinates) to use as the origin of the area.\r\n     * @param {integer} width - How many tiles wide from the `tileX` index the area will be.\r\n     * @param {integer} height - How many tiles tall from the `tileY` index the area will be.\r\n     * @param {function} callback - The callback that will be invoked when the tile is collided with.\r\n     * @param {object} [callbackContext] - The context under which the callback is called.\r\n     *\r\n     * @return {Phaser.Tilemaps.StaticTilemapLayer} This Tilemap Layer object.\r\n     */\r\n    setTileLocationCallback: function (tileX, tileY, width, height, callback, callbackContext)\r\n    {\r\n        TilemapComponents.SetTileLocationCallback(tileX, tileY, width, height, callback, callbackContext, this.layer);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Converts from tile X coordinates (tile units) to world X coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#tileToWorldX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The X coordinate, in tile coordinates.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the world values from the tile index.\r\n     *\r\n     * @return {number}\r\n     */\r\n    tileToWorldX: function (tileX, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldX(tileX, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile Y coordinates (tile units) to world Y coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#tileToWorldY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileY - The Y coordinate, in tile coordinates.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the world values from the tile index.\r\n     *\r\n     * @return {number}\r\n     */\r\n    tileToWorldY: function (tileY, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldY(tileY, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from tile XY coordinates (tile units) to world XY coordinates (pixels), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#tileToWorldXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {integer} tileX - The X coordinate, in tile coordinates.\r\n     * @param {integer} tileY - The Y coordinate, in tile coordinates.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given, a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the world values from the tile index.\r\n     *\r\n     * @return {Phaser.Math.Vector2}\r\n     */\r\n    tileToWorldXY: function (tileX, tileY, point, camera)\r\n    {\r\n        return TilemapComponents.TileToWorldXY(tileX, tileY, point, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world X coordinates (pixels) to tile X coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#worldToTileX\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The X coordinate, in world pixels.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the\r\n     * nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.]\r\n     *\r\n     * @return {number}\r\n     */\r\n    worldToTileX: function (worldX, snapToFloor, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileX(worldX, snapToFloor, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world Y coordinates (pixels) to tile Y coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#worldToTileY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldY - The Y coordinate, in world pixels.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the\r\n     * nearest integer.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {number}\r\n     */\r\n    worldToTileY: function (worldY, snapToFloor, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileY(worldY, snapToFloor, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Converts from world XY coordinates (pixels) to tile XY coordinates (tile units), factoring in the\r\n     * layers position, scale and scroll. This will return a new Vector2 object or update the given\r\n     * `point` object.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#worldToTileXY\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} worldX - The X coordinate, in world pixels.\r\n     * @param {number} worldY - The Y coordinate, in world pixels.\r\n     * @param {boolean} [snapToFloor=true] - Whether or not to round the tile coordinate down to the\r\n     * nearest integer.\r\n     * @param {Phaser.Math.Vector2} [point] - A Vector2 to store the coordinates in. If not given, a new Vector2 is created.\r\n     * @param {Phaser.Cameras.Scene2D.Camera} [camera=main camera] - The Camera to use when calculating the tile index from the world values.\r\n     *\r\n     * @return {Phaser.Math.Vector2}\r\n     */\r\n    worldToTileXY: function (worldX, worldY, snapToFloor, point, camera)\r\n    {\r\n        return TilemapComponents.WorldToTileXY(worldX, worldY, snapToFloor, point, camera, this.layer);\r\n    },\r\n\r\n    /**\r\n     * Destroys this StaticTilemapLayer and removes its link to the associated LayerData.\r\n     *\r\n     * @method Phaser.Tilemaps.StaticTilemapLayer#destroy\r\n     * @since 3.0.0\r\n     * \r\n     * @param {boolean} [removeFromTilemap=true] - Remove this layer from the parent Tilemap?\r\n     */\r\n    destroy: function (removeFromTilemap)\r\n    {\r\n        if (removeFromTilemap === undefined) { removeFromTilemap = true; }\r\n\r\n        if (!this.tilemap)\r\n        {\r\n            //  Abort, we've already been destroyed\r\n            return;\r\n        }\r\n\r\n        //  Uninstall this layer only if it is still installed on the LayerData object\r\n        if (this.layer.tilemapLayer === this)\r\n        {\r\n            this.layer.tilemapLayer = undefined;\r\n        }\r\n\r\n        if (removeFromTilemap)\r\n        {\r\n            this.tilemap.removeLayer(this);\r\n        }\r\n\r\n        this.tilemap = undefined;\r\n        this.layer = undefined;\r\n        this.culledTiles.length = 0;\r\n        this.cullCallback = null;\r\n\r\n        for (var i = 0; i < this.tileset.length; i++)\r\n        {\r\n            this.dirty[i] = true;\r\n            this.vertexCount[i] = 0;\r\n            this.vertexBuffer[i] = null;\r\n            this.bufferData[i] = null;\r\n            this.vertexViewF32[i] = null;\r\n            this.vertexViewU32[i] = null;\r\n        }\r\n\r\n        this.gidMap = [];\r\n        this.tileset = [];\r\n\r\n        GameObject.prototype.destroy.call(this);\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = StaticTilemapLayer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXIuanM/M2VjZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBOEI7QUFDdkQsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLHlGQUE4QjtBQUN2RCwrQkFBK0IsbUJBQU8sQ0FBQyw4R0FBNEI7QUFDbkUsd0JBQXdCLG1CQUFPLENBQUMsNkVBQWU7QUFDL0Msc0JBQXNCLG1CQUFPLENBQUMseUhBQThDO0FBQzVFLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQixXQUFXLG9FQUFvRTtBQUMvRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0VBQW9FO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGlCQUFpQjtBQUM5QztBQUNBLGlDQUFpQyxnQkFBZ0I7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsaUJBQWlCO0FBQzlDO0FBQ0EsNENBQTRDLFVBQVU7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBLGlDQUFpQyxnQkFBZ0I7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLElBQUk7QUFDbkIsZUFBZSxJQUFJO0FBQ25CLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGNBQWM7QUFDbkQscUNBQXFDLGNBQWM7O0FBRW5EO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3REO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3REO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsdUNBQXVDO0FBQ3REO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLHVDQUF1QztBQUN0RCxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpRkFBaUY7QUFDaEcsZUFBZSx1Q0FBdUM7QUFDdEQsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxrQ0FBa0M7QUFDakQ7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlCQUFpQjtBQUMxQjtBQUNBLDJDQUEyQyxvQ0FBb0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1DQUFtQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywwQkFBMEI7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdCcpO1xyXG52YXIgU3RhdGljVGlsZW1hcExheWVyUmVuZGVyID0gcmVxdWlyZSgnLi9TdGF0aWNUaWxlbWFwTGF5ZXJSZW5kZXInKTtcclxudmFyIFRpbGVtYXBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgVHJhbnNmb3JtTWF0cml4ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXgnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgU3RhdGljIFRpbGVtYXAgTGF5ZXIgaXMgYSBHYW1lIE9iamVjdCB0aGF0IHJlbmRlcnMgTGF5ZXJEYXRhIGZyb20gYSBUaWxlbWFwIHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvblxyXG4gKiB3aXRoIG9uZSwgb3IgbW9yZSwgVGlsZXNldHMuXHJcbiAqXHJcbiAqIEEgU3RhdGljIFRpbGVtYXAgTGF5ZXIgaXMgb3B0aW1pemVkIGZvciByZW5kZXJpbmcgc3BlZWQgb3ZlciBmbGV4aWJpbGl0eS4gWW91IGNhbm5vdCBhcHBseSBwZXItdGlsZVxyXG4gKiBlZmZlY3RzIGxpa2UgdGludCBvciBhbHBoYSwgb3IgY2hhbmdlIHRoZSB0aWxlcyBvciB0aWxlc2V0cyB0aGUgbGF5ZXIgdXNlcy5cclxuICogXHJcbiAqIFVzZSBhIFN0YXRpYyBUaWxlbWFwIExheWVyIGluc3RlYWQgb2YgYSBEeW5hbWljIFRpbGVtYXAgTGF5ZXIgd2hlbiB5b3UgZG9uJ3QgbmVlZCB0aWxlIG1hbmlwdWxhdGlvbiBmZWF0dXJlcy5cclxuICpcclxuICogQGNsYXNzIFN0YXRpY1RpbGVtYXBMYXllclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLlRpbGVtYXBzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9IHRpbGVtYXAgLSBUaGUgVGlsZW1hcCB0aGlzIGxheWVyIGlzIGEgcGFydCBvZi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBsYXllckluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBMYXllckRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB3b3JsZCB4IHBvc2l0aW9uIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGlzIGxheWVyIHdpbGwgYmUgcGxhY2VkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgd29ybGQgeSBwb3NpdGlvbiB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhpcyBsYXllciB3aWxsIGJlIHBsYWNlZC5cclxuICovXHJcbnZhciBTdGF0aWNUaWxlbWFwTGF5ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbXB1dGVkU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlBpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBTdGF0aWNUaWxlbWFwTGF5ZXJSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTdGF0aWNUaWxlbWFwTGF5ZXIgKHNjZW5lLCB0aWxlbWFwLCBsYXllckluZGV4LCB0aWxlc2V0LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1N0YXRpY1RpbGVtYXBMYXllcicpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGludGVybmFsbHkgYnkgcGh5c2ljcyBzeXN0ZW0gdG8gcGVyZm9ybSBmYXN0IHR5cGUgY2hlY2tzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNpc1RpbGVtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzVGlsZW1hcCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUaWxlbWFwIHRoYXQgdGhpcyBsYXllciBpcyBhIHBhcnQgb2YuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3RpbGVtYXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVtYXB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlbWFwID0gdGlsZW1hcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluZGV4IG9mIHRoZSBMYXllckRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2xheWVySW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxheWVySW5kZXggPSBsYXllckluZGV4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTGF5ZXJEYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBMYXllckRhdGEgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZVxyXG4gICAgICAgICAqIHRpbGVtYXAgbGF5ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2xheWVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5MYXllckRhdGF9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXllciA9IHRpbGVtYXAubGF5ZXJzW2xheWVySW5kZXhdO1xyXG5cclxuICAgICAgICAvLyBMaW5rIHRoZSBMYXllckRhdGEgd2l0aCB0aGlzIHN0YXRpYyB0aWxlbWFwIGxheWVyXHJcbiAgICAgICAgdGhpcy5sYXllci50aWxlbWFwTGF5ZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGlsZXNldC9zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFzIG9mIFBoYXNlciAzLjE0IHRoaXMgcHJvcGVydHkgaXMgbm93IGFuIGFycmF5IG9mIFRpbGVzZXQgb2JqZWN0cywgcHJldmlvdXNseSBpdCB3YXMgYSBzaW5nbGUgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN0aWxlc2V0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaWxlbWFwcy5UaWxlc2V0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlc2V0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gICAgICAgICAqIFRoaXMgaG9sZHMgdGhlIHRpbGVzIHRoYXQgYXJlIHZpc2libGUgd2l0aGluIHRoZSBjYW1lcmEgaW4gdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2N1bGxlZFRpbGVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VsbGVkVGlsZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIG9ubHkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogWW91IGNhbiBjb250cm9sIGlmIHRoZSBDYW1lcmFzIHNob3VsZCBjdWxsIHRpbGVzIGJlZm9yZSByZW5kZXJpbmcgdGhlbSBvciBub3QuXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGUgY2FtZXJhIHdpbGwgdHJ5IHRvIGN1bGwgdGhlIHRpbGVzIGluIHRoaXMgbGF5ZXIsIHRvIGF2b2lkIG92ZXItZHJhd2luZyB0byB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBpbnN0YW5jZXMgd2hlbiB5b3UgbWF5IHdpc2ggdG8gZGlzYWJsZSB0aGlzLCBhbmQgdG9nZ2xpbmcgdGhpcyBmbGFnIGFsbG93c1xyXG4gICAgICAgICAqIHlvdSB0byBkbyBzby4gQWxzbyBzZWUgYHNldFNraXBDdWxsYCBmb3IgYSBjaGFpbmFibGUgbWV0aG9kIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjc2tpcEN1bGxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5za2lwQ3VsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW52YXMgb25seS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRpbGVzIGRyYXduIGJ5IHRoZSByZW5kZXJlciBpbiB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIG9ubHkgd29ya3Mgd2hlbiByZW5kaW5nIHdpdGggQ2FudmFzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN0aWxlc0RyYXduXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGlsZXNEcmF3biA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyBvbmx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgdGlsZXMgaW4gdGhpcyBsYXllci4gVXBkYXRlZCBldmVyeSBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdGlsZXNUb3RhbFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbGVzVG90YWwgPSB0aGlzLmxheWVyLndpZHRoICogdGhpcy5sYXllci5oZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyBvbmx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgZXh0cmEgdGlsZXMgdG8gYWRkIGludG8gdGhlIGN1bGwgcmVjdGFuZ2xlIHdoZW4gY2FsY3VsYXRpbmcgaXRzIGhvcml6b250YWwgc2l6ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSB0aGUgbWV0aG9kIGBzZXRDdWxsUGFkZGluZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjY3VsbFBhZGRpbmdYXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1bGxQYWRkaW5nWCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyBvbmx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgZXh0cmEgdGlsZXMgdG8gYWRkIGludG8gdGhlIGN1bGwgcmVjdGFuZ2xlIHdoZW4gY2FsY3VsYXRpbmcgaXRzIHZlcnRpY2FsIHNpemUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgdGhlIG1ldGhvZCBgc2V0Q3VsbFBhZGRpbmdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2N1bGxQYWRkaW5nWVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdWxsUGFkZGluZ1kgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW52YXMgb25seS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIHRpbGVzIGFyZSBjdWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGl0IHdpbGwgY2FsbCBgVGlsZW1hcENvbXBvbmVudHMuQ3VsbFRpbGVzYCBidXQgeW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGNhbGwgYW55IGZ1bmN0aW9uIHlvdSBsaWtlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSXQgd2lsbCBiZSBzZW50IDMgYXJndW1lbnRzOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogMS4gVGhlIFBoYXNlci5UaWxlbWFwcy5MYXllckRhdGEgb2JqZWN0IGZvciB0aGlzIExheWVyXHJcbiAgICAgICAgICogMi4gVGhlIENhbWVyYSB0aGF0IGlzIGN1bGxpbmcgdGhlIGxheWVyLiBZb3UgY2FuIGNoZWNrIGl0cyBgZGlydHlgIHByb3BlcnR5IHRvIHNlZSBpZiBpdCBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjdWxsLlxyXG4gICAgICAgICAqIDMuIEEgcmVmZXJlbmNlIHRvIHRoZSBgY3VsbGVkVGlsZXNgIGFycmF5LCB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBzdG9yZSB0aGUgdGlsZXMgeW91IHdhbnQgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgdGhlIGBUaWxlbWFwQ29tcG9uZW50cy5DdWxsVGlsZXNgIHNvdXJjZSBjb2RlIGZvciBkZXRhaWxzIG9uIGltcGxlbWVudGluZyB5b3VyIG93biBjdWxsaW5nIHN5c3RlbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjY3VsbENhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1bGxDYWxsYmFjayA9IFRpbGVtYXBDb21wb25lbnRzLkN1bGxUaWxlcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHJlbmRlcmVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiB2ZXJ0ZXggYnVmZmVyIG9iamVjdHMsIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFzIG9mIFBoYXNlciAzLjE0IHRoaXMgcHJvcGVydHkgaXMgbm93IGFuIGFycmF5LCB3aGVyZSBlYWNoIGVsZW1lbnQgbWFwcyB0byBhIFRpbGVzZXQgaW5zdGFuY2UuIFByZXZpb3VzbHkgaXQgd2FzIGEgc2luZ2xlIGluc3RhbmNlLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdmVydGV4QnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMQnVmZmVyW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBBcnJheUJ1ZmZlciBvYmplY3RzLCB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBcyBvZiBQaGFzZXIgMy4xNCB0aGlzIHByb3BlcnR5IGlzIG5vdyBhbiBhcnJheSwgd2hlcmUgZWFjaCBlbGVtZW50IG1hcHMgdG8gYSBUaWxlc2V0IGluc3RhbmNlLiBQcmV2aW91c2x5IGl0IHdhcyBhIHNpbmdsZSBpbnN0YW5jZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2J1ZmZlckRhdGFcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXlCdWZmZXJbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnVmZmVyRGF0YSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBGbG9hdDMyIEFycmF5IG9iamVjdHMsIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFzIG9mIFBoYXNlciAzLjE0IHRoaXMgcHJvcGVydHkgaXMgbm93IGFuIGFycmF5LCB3aGVyZSBlYWNoIGVsZW1lbnQgbWFwcyB0byBhIFRpbGVzZXQgaW5zdGFuY2UuIFByZXZpb3VzbHkgaXQgd2FzIGEgc2luZ2xlIGluc3RhbmNlLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdmVydGV4Vmlld0YzMlxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVydGV4Vmlld0YzMiA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBVaW50MzIgQXJyYXkgb2JqZWN0cywgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQXMgb2YgUGhhc2VyIDMuMTQgdGhpcyBwcm9wZXJ0eSBpcyBub3cgYW4gYXJyYXksIHdoZXJlIGVhY2ggZWxlbWVudCBtYXBzIHRvIGEgVGlsZXNldCBpbnN0YW5jZS4gUHJldmlvdXNseSBpdCB3YXMgYSBzaW5nbGUgaW5zdGFuY2UuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN2ZXJ0ZXhWaWV3VTMyXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQzMkFycmF5W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleFZpZXdVMzIgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgYm9vbGVhbnMsIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFzIG9mIFBoYXNlciAzLjE0IHRoaXMgcHJvcGVydHkgaXMgbm93IGFuIGFycmF5LCB3aGVyZSBlYWNoIGVsZW1lbnQgbWFwcyB0byBhIFRpbGVzZXQgaW5zdGFuY2UuIFByZXZpb3VzbHkgaXQgd2FzIGEgc2luZ2xlIGJvb2xlYW4uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFuW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIGludGVnZXJzLCB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBcyBvZiBQaGFzZXIgMy4xNCB0aGlzIHByb3BlcnR5IGlzIG5vdyBhbiBhcnJheSwgd2hlcmUgZWFjaCBlbGVtZW50IG1hcHMgdG8gYSBUaWxlc2V0IGluc3RhbmNlLiBQcmV2aW91c2x5IGl0IHdhcyBhIHNpbmdsZSBpbnRlZ2VyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdmVydGV4Q291bnRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcltdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb3VudCA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyaW5nIChkcmF3KSBvcmRlciBvZiB0aGUgdGlsZXMgaW4gdGhpcyBsYXllci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBpcyAwIHdoaWNoIGlzICdyaWdodC1kb3duJywgbWVhbmluZyBpdCB3aWxsIGRyYXcgdGhlIHRpbGVzIHN0YXJ0aW5nIGZyb20gdGhlIHRvcC1sZWZ0LFxyXG4gICAgICAgICAqIGRyYXdpbmcgdG8gdGhlIHJpZ2h0IGFuZCB0aGVuIG1vdmluZyBkb3duIHRvIHRoZSBuZXh0IHJvdy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgZHJhdyBvcmRlcnMgYXJlOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIDAgPSByaWdodC1kb3duXHJcbiAgICAgICAgICogMSA9IGxlZnQtZG93blxyXG4gICAgICAgICAqIDIgPSByaWdodC11cFxyXG4gICAgICAgICAqIDMgPSBsZWZ0LXVwXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIGBzZXRSZW5kZXJPcmRlcmAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNfcmVuZGVyT3JkZXJcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyT3JkZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNfdGVtcE1hdHJpeFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgaG9sZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSB0aWxlIGluZGV4ZXMgYW5kIHRoZSB0aWxlc2V0IHRoZXkgYmVsb25nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNnaWRNYXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRpbGVtYXBzLlRpbGVzZXRbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5naWRNYXAgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUaWxlc2V0cyh0aWxlc2V0KTtcclxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMubGF5ZXIuYWxwaGEpO1xyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnNldFNpemUodGlsZW1hcC50aWxlV2lkdGggKiB0aGlzLmxheWVyLndpZHRoLCB0aWxlbWFwLnRpbGVIZWlnaHQgKiB0aGlzLmxheWVyLmhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlVkJPRGF0YSgpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgnVGV4dHVyZVRpbnRQaXBlbGluZScpO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5DT05URVhUX1JFU1RPUkVELCBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWQk9EYXRhKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wdWxhdGVzIHRoZSBpbnRlcm5hbCBgdGlsZXNldGAgYXJyYXkgd2l0aCB0aGUgVGlsZXNldCByZWZlcmVuY2VzIHRoaXMgTGF5ZXIgcmVxdWlyZXMgZm9yIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjc2V0VGlsZXNldHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXXxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldHxQaGFzZXIuVGlsZW1hcHMuVGlsZXNldFtdKX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0LCBvciBhbiBhcnJheSBvZiB0aWxlc2V0cywgdXNlZCB0byByZW5kZXIgdGhpcyBsYXllci4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgVGlsZXNldCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbGVzZXRzOiBmdW5jdGlvbiAodGlsZXNldHMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGdpZE1hcCA9IFtdO1xyXG4gICAgICAgIHZhciBzZXRMaXN0ID0gW107XHJcbiAgICAgICAgdmFyIG1hcCA9IHRoaXMudGlsZW1hcDtcclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpbGVzZXRzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpbGVzZXRzID0gWyB0aWxlc2V0cyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWxlc2V0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlc2V0ID0gdGlsZXNldHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbGVzZXQgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aWxlc2V0ID0gbWFwLmdldFRpbGVzZXQodGlsZXNldCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aWxlc2V0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZXRMaXN0LnB1c2godGlsZXNldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSB0aWxlc2V0LmZpcnN0Z2lkO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGlsZXNldC50b3RhbDsgdCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdpZE1hcFtzICsgdF0gPSB0aWxlc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdpZE1hcCA9IGdpZE1hcDtcclxuICAgICAgICB0aGlzLnRpbGVzZXQgPSBzZXRMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBhcmVzIHRoZSBWQk8gZGF0YSBhcnJheXMgZm9yIHBvcHVsYXRpb24gYnkgdGhlIGB1cGxvYWRgIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdXBkYXRlVkJPRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE0LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVWQk9EYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50aWxlc2V0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eVtpXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Q291bnRbaV0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlcltpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyRGF0YVtpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld0YzMltpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld1UzMltpXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGxvYWQgdGhlIHRpbGUgZGF0YSB0byBhIFZCTy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdXBsb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRvIHJlbmRlciB0by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZXNldEluZGV4IC0gVGhlIHRpbGVzZXQgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBsb2FkOiBmdW5jdGlvbiAoY2FtZXJhLCB0aWxlc2V0SW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdmFyIHBpcGVsaW5lID0gcmVuZGVyZXIucGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpcnR5W3RpbGVzZXRJbmRleF0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdGlsZXNldCA9IHRoaXMudGlsZXNldFt0aWxlc2V0SW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgbWFwV2lkdGggPSB0aGlzLmxheWVyLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgbWFwSGVpZ2h0ID0gdGhpcy5sYXllci5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRpbGVzZXQuaW1hZ2Uuc291cmNlWzBdLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGlsZXNldC5pbWFnZS5zb3VyY2VbMF0uaGVpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgbWFwRGF0YSA9IHRoaXMubGF5ZXIuZGF0YTtcclxuICAgICAgICAgICAgdmFyIHRpbGU7XHJcbiAgICAgICAgICAgIHZhciByb3c7XHJcbiAgICAgICAgICAgIHZhciBjb2w7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJPcmRlciA9IHRoaXMuX3JlbmRlck9yZGVyO1xyXG4gICAgICAgICAgICB2YXIgbWluVGlsZUluZGV4ID0gdGlsZXNldC5maXJzdGdpZDtcclxuICAgICAgICAgICAgdmFyIG1heFRpbGVJbmRleCA9IHRpbGVzZXQuZmlyc3RnaWQgKyB0aWxlc2V0LnRvdGFsO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLnZlcnRleEJ1ZmZlclt0aWxlc2V0SW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgYnVmZmVyRGF0YSA9IHRoaXMuYnVmZmVyRGF0YVt0aWxlc2V0SW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgdk9mZnNldCA9IC0xO1xyXG4gICAgICAgICAgICB2YXIgYnVmZmVyU2l6ZSA9IChtYXBXaWR0aCAqIG1hcEhlaWdodCkgKiBwaXBlbGluZS52ZXJ0ZXhTaXplICogNjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Q291bnRbdGlsZXNldEluZGV4XSA9IDA7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKGJ1ZmZlckRhdGEgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGEgPSBuZXcgQXJyYXlCdWZmZXIoYnVmZmVyU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJEYXRhW3RpbGVzZXRJbmRleF0gPSBidWZmZXJEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld0YzMlt0aWxlc2V0SW5kZXhdID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJEYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld1UzMlt0aWxlc2V0SW5kZXhdID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlckRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHJlbmRlck9yZGVyID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgcmlnaHQtZG93blxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBtYXBIZWlnaHQ7IHJvdysrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbWFwV2lkdGg7IGNvbCsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IG1hcERhdGFbcm93XVtjb2xdO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5pbmRleCA8IG1pblRpbGVJbmRleCB8fCB0aWxlLmluZGV4ID4gbWF4VGlsZUluZGV4IHx8ICF0aWxlLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdk9mZnNldCA9IHRoaXMuYmF0Y2hUaWxlKHZPZmZzZXQsIHRpbGUsIHRpbGVzZXQsIHdpZHRoLCBoZWlnaHQsIGNhbWVyYSwgdGlsZXNldEluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyT3JkZXIgPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBsZWZ0LWRvd25cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgbWFwSGVpZ2h0OyByb3crKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbCA9IG1hcFdpZHRoIC0gMTsgY29sID49IDA7IGNvbC0tKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IG1hcERhdGFbcm93XVtjb2xdO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5pbmRleCA8IG1pblRpbGVJbmRleCB8fCB0aWxlLmluZGV4ID4gbWF4VGlsZUluZGV4IHx8ICF0aWxlLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdk9mZnNldCA9IHRoaXMuYmF0Y2hUaWxlKHZPZmZzZXQsIHRpbGUsIHRpbGVzZXQsIHdpZHRoLCBoZWlnaHQsIGNhbWVyYSwgdGlsZXNldEluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyT3JkZXIgPT09IDIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICByaWdodC11cFxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZm9yIChyb3cgPSBtYXBIZWlnaHQgLSAxOyByb3cgPj0gMDsgcm93LS0pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBtYXBXaWR0aDsgY29sKyspXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlID0gbWFwRGF0YVtyb3ddW2NvbF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGlsZSB8fCB0aWxlLmluZGV4IDwgbWluVGlsZUluZGV4IHx8IHRpbGUuaW5kZXggPiBtYXhUaWxlSW5kZXggfHwgIXRpbGUudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2T2Zmc2V0ID0gdGhpcy5iYXRjaFRpbGUodk9mZnNldCwgdGlsZSwgdGlsZXNldCwgd2lkdGgsIGhlaWdodCwgY2FtZXJhLCB0aWxlc2V0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZW5kZXJPcmRlciA9PT0gMylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIGxlZnQtdXBcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGZvciAocm93ID0gbWFwSGVpZ2h0IC0gMTsgcm93ID49IDA7IHJvdy0tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29sID0gbWFwV2lkdGggLSAxOyBjb2wgPj0gMDsgY29sLS0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlID0gbWFwRGF0YVtyb3ddW2NvbF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGlsZSB8fCB0aWxlLmluZGV4IDwgbWluVGlsZUluZGV4IHx8IHRpbGUuaW5kZXggPiBtYXhUaWxlSW5kZXggfHwgIXRpbGUudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2T2Zmc2V0ID0gdGhpcy5iYXRjaFRpbGUodk9mZnNldCwgdGlsZSwgdGlsZXNldCwgd2lkdGgsIGhlaWdodCwgY2FtZXJhLCB0aWxlc2V0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5W3RpbGVzZXRJbmRleF0gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAodmVydGV4QnVmZmVyID09PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIgPSByZW5kZXJlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoYnVmZmVyRGF0YSwgZ2wuU1RBVElDX0RSQVcpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlclt0aWxlc2V0SW5kZXhdID0gdmVydGV4QnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0VmVydGV4QnVmZmVyKHZlcnRleEJ1ZmZlcik7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgc2luZ2xlIHRpbGUgaW50byB0aGUgYmF0Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2JhdGNoVGlsZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZPZmZzZXQgLSBUaGUgdmVydGV4IG9mZnNldC5cclxuICAgICAqIEBwYXJhbSB7YW55fSB0aWxlIC0gVGhlIHRpbGUgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdGlsZXNldCAtIFRoZSB0aWxlc2V0IGJlaW5nIHVzZWQgZm9yIHJlbmRlcmluZy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHRpbGVzZXQgaW1hZ2UgaW4gcGl4ZWxzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxlc2V0IGltYWdlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhlIGxheWVyIGlzIGJlaW5nIHJlbmRlcmVkIHdpdGguXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVzZXRJbmRleCAtIFRoZSB0aWxlc2V0IGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBuZXcgdk9mZnNldCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUaWxlOiBmdW5jdGlvbiAodk9mZnNldCwgdGlsZSwgdGlsZXNldCwgd2lkdGgsIGhlaWdodCwgY2FtZXJhLCB0aWxlc2V0SW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRleENvb3JkcyA9IHRpbGVzZXQuZ2V0VGlsZVRleHR1cmVDb29yZGluYXRlcyh0aWxlLmluZGV4KTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXhDb29yZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdk9mZnNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aWxlV2lkdGggPSB0aWxlc2V0LnRpbGVXaWR0aDtcclxuICAgICAgICB2YXIgdGlsZUhlaWdodCA9IHRpbGVzZXQudGlsZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGhhbGZUaWxlV2lkdGggPSB0aWxlV2lkdGggLyAyO1xyXG4gICAgICAgIHZhciBoYWxmVGlsZUhlaWdodCA9IHRpbGVIZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICB2YXIgdTAgPSB0ZXhDb29yZHMueCAvIHdpZHRoO1xyXG4gICAgICAgIHZhciB2MCA9IHRleENvb3Jkcy55IC8gaGVpZ2h0O1xyXG4gICAgICAgIHZhciB1MSA9ICh0ZXhDb29yZHMueCArIHRpbGVXaWR0aCkgLyB3aWR0aDtcclxuICAgICAgICB2YXIgdjEgPSAodGV4Q29vcmRzLnkgKyB0aWxlSGVpZ2h0KSAvIGhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMuX3RlbXBNYXRyaXg7XHJcblxyXG4gICAgICAgIHZhciB4ID0gLWhhbGZUaWxlV2lkdGg7XHJcbiAgICAgICAgdmFyIHkgPSAtaGFsZlRpbGVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aWxlLmZsaXBYKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGlsZVdpZHRoICo9IC0xO1xyXG4gICAgICAgICAgICB4ICs9IHRpbGVzZXQudGlsZVdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbGUuZmxpcFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aWxlSGVpZ2h0ICo9IC0xO1xyXG4gICAgICAgICAgICB5ICs9IHRpbGVzZXQudGlsZUhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB4dyA9IHggKyB0aWxlV2lkdGg7XHJcbiAgICAgICAgdmFyIHloID0geSArIHRpbGVIZWlnaHQ7XHJcblxyXG4gICAgICAgIG1hdHJpeC5hcHBseUlUUlMoaGFsZlRpbGVXaWR0aCArIHRpbGUucGl4ZWxYLCBoYWxmVGlsZUhlaWdodCArIHRpbGUucGl4ZWxZLCB0aWxlLnJvdGF0aW9uLCAxLCAxKTtcclxuXHJcbiAgICAgICAgdmFyIHRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYSgweGZmZmZmZiwgY2FtZXJhLmFscGhhICogdGhpcy5hbHBoYSAqIHRpbGUuYWxwaGEpO1xyXG5cclxuICAgICAgICB2YXIgdHgwID0gbWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IG1hdHJpeC5nZXRZKHgsIHkpO1xyXG5cclxuICAgICAgICB2YXIgdHgxID0gbWF0cml4LmdldFgoeCwgeWgpO1xyXG4gICAgICAgIHZhciB0eTEgPSBtYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBtYXRyaXguZ2V0WCh4dywgeWgpO1xyXG4gICAgICAgIHZhciB0eTIgPSBtYXRyaXguZ2V0WSh4dywgeWgpO1xyXG5cclxuICAgICAgICB2YXIgdHgzID0gbWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBtYXRyaXguZ2V0WSh4dywgeSk7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhWaWV3RjMyID0gdGhpcy52ZXJ0ZXhWaWV3RjMyW3RpbGVzZXRJbmRleF07XHJcbiAgICAgICAgdmFyIHZlcnRleFZpZXdVMzIgPSB0aGlzLnZlcnRleFZpZXdVMzJbdGlsZXNldEluZGV4XTtcclxuXHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdHgwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHR5MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB1MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB2MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSAwO1xyXG4gICAgICAgIHZlcnRleFZpZXdVMzJbKyt2T2Zmc2V0XSA9IHRpbnQ7XHJcblxyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHR4MTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB0eTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdTA7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdjE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gMDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3VTMyWysrdk9mZnNldF0gPSB0aW50O1xyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB0eDI7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdHkyO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHUxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHYxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IDA7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZPZmZzZXRdID0gdGludDtcclxuXHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdHgwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHR5MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB1MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB2MDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSAwO1xyXG4gICAgICAgIHZlcnRleFZpZXdVMzJbKyt2T2Zmc2V0XSA9IHRpbnQ7XHJcblxyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHR4MjtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB0eTI7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdTE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdjE7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gMDtcclxuICAgICAgICB2ZXJ0ZXhWaWV3VTMyWysrdk9mZnNldF0gPSB0aW50O1xyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdk9mZnNldF0gPSB0eDM7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZPZmZzZXRdID0gdHkzO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHUxO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IHYwO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2T2Zmc2V0XSA9IDA7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZPZmZzZXRdID0gdGludDtcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb3VudFt0aWxlc2V0SW5kZXhdICs9IDY7XHJcblxyXG4gICAgICAgIHJldHVybiB2T2Zmc2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJlbmRlcmluZyAoZHJhdykgb3JkZXIgb2YgdGhlIHRpbGVzIGluIHRoaXMgbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkZWZhdWx0IGlzICdyaWdodC1kb3duJywgbWVhbmluZyBpdCB3aWxsIG9yZGVyIHRoZSB0aWxlcyBzdGFydGluZyBmcm9tIHRoZSB0b3AtbGVmdCxcclxuICAgICAqIGRyYXdpbmcgdG8gdGhlIHJpZ2h0IGFuZCB0aGVuIG1vdmluZyBkb3duIHRvIHRoZSBuZXh0IHJvdy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRyYXcgb3JkZXJzIGFyZTpcclxuICAgICAqIFxyXG4gICAgICogMCA9IHJpZ2h0LWRvd25cclxuICAgICAqIDEgPSBsZWZ0LWRvd25cclxuICAgICAqIDIgPSByaWdodC11cFxyXG4gICAgICogMyA9IGxlZnQtdXBcclxuICAgICAqIFxyXG4gICAgICogU2V0dGluZyB0aGUgcmVuZGVyIG9yZGVyIGRvZXMgbm90IGNoYW5nZSB0aGUgdGlsZXMgb3IgaG93IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgbGF5ZXIsXHJcbiAgICAgKiBpdCBwdXJlbHkgaW1wYWN0cyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgcmVuZGVyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gcHJvdmlkZSBlaXRoZXIgYW4gaW50ZWdlciAoMCB0byAzKSwgb3IgdGhlIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSBvcmRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjc2V0UmVuZGVyT3JkZXJcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfHN0cmluZyl9IHJlbmRlck9yZGVyIC0gVGhlIHJlbmRlciAoZHJhdykgb3JkZXIgdmFsdWUuIEVpdGhlciBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMywgb3IgYSBzdHJpbmc6ICdyaWdodC1kb3duJywgJ2xlZnQtZG93bicsICdyaWdodC11cCcgb3IgJ2xlZnQtdXAnLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFJlbmRlck9yZGVyOiBmdW5jdGlvbiAocmVuZGVyT3JkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9yZGVycyA9IFsgJ3JpZ2h0LWRvd24nLCAnbGVmdC1kb3duJywgJ3JpZ2h0LXVwJywgJ2xlZnQtdXAnIF07XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcmVuZGVyT3JkZXIgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyT3JkZXIgPSBvcmRlcnMuaW5kZXhPZihyZW5kZXJPcmRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVuZGVyT3JkZXIgPj0gMCAmJiByZW5kZXJPcmRlciA8IDQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPcmRlciA9IHJlbmRlck9yZGVyO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRpbGVzZXQubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHlbaV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGludGVyZXN0aW5nIGZhY2VzIGF0IHRoZSBnaXZlbiB0aWxlIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIuIEludGVyZXN0aW5nXHJcbiAgICAgKiBmYWNlcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBvcHRpbWl6aW5nIGNvbGxpc2lvbnMgYWdhaW5zdCB0aWxlcy4gVGhpcyBtZXRob2QgaXMgbW9zdGx5IHVzZWRcclxuICAgICAqIGludGVybmFsbHkgdG8gb3B0aW1pemUgcmVjYWxjdWxhdGluZyBmYWNlcyB3aGVuIG9ubHkgb25lIHRpbGUgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjY2FsY3VsYXRlRmFjZXNBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWCAtIFRoZSB4IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIHkgY29vcmRpbmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVGYWNlc0F0OiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkNhbGN1bGF0ZUZhY2VzQXQodGlsZVgsIHRpbGVZLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBpbnRlcmVzdGluZyBmYWNlcyB3aXRoaW4gdGhlIHJlY3Rhbmd1bGFyIGFyZWEgc3BlY2lmaWVkIChpbiB0aWxlIGNvb3JkaW5hdGVzKSBvZiB0aGVcclxuICAgICAqIGxheWVyLiBJbnRlcmVzdGluZyBmYWNlcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBvcHRpbWl6aW5nIGNvbGxpc2lvbnMgYWdhaW5zdCB0aWxlcy4gVGhpcyBtZXRob2RcclxuICAgICAqIGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2NhbGN1bGF0ZUZhY2VzV2l0aGluXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWD0wXSAtIFRoZSBsZWZ0IG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0aWxlWT0wXSAtIFRoZSB0b3AgbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZUZhY2VzV2l0aGluOiBmdW5jdGlvbiAodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkNhbGN1bGF0ZUZhY2VzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBTcHJpdGUgZm9yIGV2ZXJ5IG9iamVjdCBtYXRjaGluZyB0aGUgZ2l2ZW4gdGlsZSBpbmRleGVzIGluIHRoZSBsYXllci4gWW91IGNhblxyXG4gICAgICogb3B0aW9uYWxseSBzcGVjaWZ5IGlmIGVhY2ggdGlsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBuZXcgdGlsZSBhZnRlciB0aGUgU3ByaXRlIGhhcyBiZWVuXHJcbiAgICAgKiBjcmVhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBsYXkgZG93biBzcGVjaWFsIHRpbGVzIGluIGEgbGV2ZWwgdGhhdCBhcmUgY29udmVydGVkIHRvXHJcbiAgICAgKiBTcHJpdGVzLCBidXQgd2FudCB0byByZXBsYWNlIHRoZSB0aWxlIGl0c2VsZiB3aXRoIGEgZmxvb3IgdGlsZSBvciBzaW1pbGFyIG9uY2UgY29udmVydGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNjcmVhdGVGcm9tVGlsZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gVGhlIHRpbGUgaW5kZXgsIG9yIGFycmF5IG9mIGluZGV4ZXMsIHRvIGNyZWF0ZSBTcHJpdGVzIGZyb20uXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfGFycmF5KX0gcmVwbGFjZW1lbnRzIC0gVGhlIHRpbGUgaW5kZXgsIG9yIGFycmF5IG9mIGluZGV4ZXMsIHRvIGNoYW5nZSBhIGNvbnZlcnRlZFxyXG4gICAgICogdGlsZSB0by4gU2V0IHRvIGBudWxsYCB0byBsZWF2ZSB0aGUgdGlsZXMgdW5jaGFuZ2VkLiBJZiBhbiBhcnJheSBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBhXHJcbiAgICAgKiBvbmUtdG8tb25lIG1hcHBpbmcgd2l0aCB0aGUgaW5kZXhlcyBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlNwcml0ZS5TcHJpdGVDb25maWd9IHNwcml0ZUNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIHBhc3MgaW50byB0aGUgU3ByaXRlIGNyZWF0b3IgKGkuZS5cclxuICAgICAqIHNjZW5lLm1ha2Uuc3ByaXRlKS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBbc2NlbmU9c2NlbmUgdGhlIG1hcCBpcyB3aXRoaW5dIC0gVGhlIFNjZW5lIHRvIGNyZWF0ZSB0aGUgU3ByaXRlcyB3aXRoaW4uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHdvcmxkIFhZXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVtdfSBBbiBhcnJheSBvZiB0aGUgU3ByaXRlcyB0aGF0IHdlcmUgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRnJvbVRpbGVzOiBmdW5jdGlvbiAoaW5kZXhlcywgcmVwbGFjZW1lbnRzLCBzcHJpdGVDb25maWcsIHNjZW5lLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkNyZWF0ZUZyb21UaWxlcyhpbmRleGVzLCByZXBsYWNlbWVudHMsIHNwcml0ZUNvbmZpZywgc2NlbmUsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIGxheWVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgY2FtZXJhcyB2aWV3cG9ydC5cclxuICAgICAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNjdWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gcnVuIHRoZSBjdWxsIGNoZWNrIGFnYWluc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gQW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBjdWxsOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1bGxDYWxsYmFjayh0aGlzLmxheWVyLCBjYW1lcmEsIHRoaXMuY3VsbGVkVGlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbnZhcyBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGNvbnRyb2wgaWYgdGhlIENhbWVyYXMgc2hvdWxkIGN1bGwgdGlsZXMgYmVmb3JlIHJlbmRlcmluZyB0aGVtIG9yIG5vdC5cclxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSB3aWxsIHRyeSB0byBjdWxsIHRoZSB0aWxlcyBpbiB0aGlzIGxheWVyLCB0byBhdm9pZCBvdmVyLWRyYXdpbmcgdG8gdGhlIHJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGluc3RhbmNlcyB3aGVuIHlvdSBtYXkgd2lzaCB0byBkaXNhYmxlIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldFNraXBDdWxsXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBTZXQgdG8gYHRydWVgIHRvIHN0b3AgY3VsbGluZyB0aWxlcy4gU2V0IHRvIGBmYWxzZWAgdG8gZW5hYmxlIGN1bGxpbmcgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2tpcEN1bGw6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5za2lwQ3VsbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYW52YXMgb25seS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiBhIENhbWVyYSBjdWxscyB0aGUgdGlsZXMgaW4gdGhpcyBsYXllciBpdCBkb2VzIHNvIHVzaW5nIGl0cyB2aWV3IGludG8gdGhlIHdvcmxkLCBidWlsZGluZyB1cCBhXHJcbiAgICAgKiByZWN0YW5nbGUgaW5zaWRlIHdoaWNoIHRoZSB0aWxlcyBtdXN0IGV4aXN0IG9yIHRoZXkgd2lsbCBiZSBjdWxsZWQuIFNvbWV0aW1lcyB5b3UgbWF5IG5lZWQgdG8gZXhwYW5kIHRoZSBzaXplXHJcbiAgICAgKiBvZiB0aGlzICdjdWxsIHJlY3RhbmdsZScsIGVzcGVjaWFsbHkgaWYgeW91IHBsYW4gb24gcm90YXRpbmcgdGhlIENhbWVyYSB2aWV3aW5nIHRoZSBsYXllci4gRG8gc29cclxuICAgICAqIGJ5IHByb3ZpZGluZyB0aGUgcGFkZGluZyB2YWx1ZXMuIFRoZSB2YWx1ZXMgZ2l2ZW4gYXJlIGluIHRpbGVzLCBub3QgcGl4ZWxzLiBTbyBpZiB0aGUgdGlsZSB3aWR0aCB3YXMgMzJweFxyXG4gICAgICogYW5kIHlvdSBzZXQgYHBhZGRpbmdYYCB0byBiZSA0LCBpdCB3b3VsZCBhZGQgMzJweCB4IDQgdG8gdGhlIGN1bGwgcmVjdGFuZ2xlIChhZGp1c3RlZCBmb3Igc2NhbGUpXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldEN1bGxQYWRkaW5nXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcGFkZGluZ1g9MV0gLSBUaGUgYW1vdW50IG9mIGV4dHJhIGhvcml6b250YWwgdGlsZXMgdG8gYWRkIHRvIHRoZSBjdWxsIGNoZWNrIHBhZGRpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtwYWRkaW5nWT0xXSAtIFRoZSBhbW91bnQgb2YgZXh0cmEgdmVydGljYWwgdGlsZXMgdG8gYWRkIHRvIHRoZSBjdWxsIGNoZWNrIHBhZGRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q3VsbFBhZGRpbmc6IGZ1bmN0aW9uIChwYWRkaW5nWCwgcGFkZGluZ1kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBhZGRpbmdYID09PSB1bmRlZmluZWQpIHsgcGFkZGluZ1ggPSAxOyB9XHJcbiAgICAgICAgaWYgKHBhZGRpbmdZID09PSB1bmRlZmluZWQpIHsgcGFkZGluZ1kgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VsbFBhZGRpbmdYID0gcGFkZGluZ1g7XHJcbiAgICAgICAgdGhpcy5jdWxsUGFkZGluZ1kgPSBwYWRkaW5nWTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VhcmNoZXMgdGhlIGVudGlyZSBtYXAgbGF5ZXIgZm9yIHRoZSBmaXJzdCB0aWxlIG1hdGNoaW5nIHRoZSBnaXZlbiBpbmRleCwgdGhlbiByZXR1cm5zIHRoYXQgVGlsZVxyXG4gICAgICogb2JqZWN0LiBJZiBubyBtYXRjaCBpcyBmb3VuZCwgaXQgcmV0dXJucyBudWxsLiBUaGUgc2VhcmNoIHN0YXJ0cyBmcm9tIHRoZSB0b3AtbGVmdCB0aWxlIGFuZFxyXG4gICAgICogY29udGludWVzIGhvcml6b250YWxseSB1bnRpbCBpdCBoaXRzIHRoZSBlbmQgb2YgdGhlIHJvdywgdGhlbiBpdCBkcm9wcyBkb3duIHRvIHRoZSBuZXh0IGNvbHVtbi5cclxuICAgICAqIElmIHRoZSByZXZlcnNlIGJvb2xlYW4gaXMgdHJ1ZSwgaXQgc2NhbnMgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciB0cmF2ZWxpbmcgdXAgdG9cclxuICAgICAqIHRoZSB0b3AtbGVmdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZmluZEJ5SW5kZXhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgdGlsZSBpbmRleCB2YWx1ZSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc2tpcD0wXSAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gc2tpcCBhIG1hdGNoaW5nIHRpbGUgYmVmb3JlIHJldHVybmluZy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdIC0gSWYgdHJ1ZSBpdCB3aWxsIHNjYW4gdGhlIGxheWVyIGluIHJldmVyc2UsIHN0YXJ0aW5nIGF0IHRoZVxyXG4gICAgICogYm90dG9tLXJpZ2h0LiBPdGhlcndpc2UgaXQgc2NhbnMgZnJvbSB0aGUgdG9wLWxlZnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGV9IEEgVGlsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbmRCeUluZGV4OiBmdW5jdGlvbiAoZmluZEluZGV4LCBza2lwLCByZXZlcnNlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5GaW5kQnlJbmRleChmaW5kSW5kZXgsIHNraXAsIHJldmVyc2UsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgdGhlIGZpcnN0IHRpbGUgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciB0aGF0XHJcbiAgICAgKiBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIHRlc3RpbmcgZnVuY3Rpb24uIEkuZS4gZmluZHMgdGhlIGZpcnN0IHRpbGUgZm9yIHdoaWNoIGBjYWxsYmFja2AgcmV0dXJuc1xyXG4gICAgICogdHJ1ZS4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuZmluZCBpbiB2YW5pbGxhIEpTLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNmaW5kVGlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suIEVhY2ggdGlsZSBpbiB0aGUgZ2l2ZW4gYXJlYSB3aWxsIGJlIHBhc3NlZCB0byB0aGlzXHJcbiAgICAgKiBjYWxsYmFjayBhcyB0aGUgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgcnVuLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVg9MF0gLSBUaGUgbGVmdCBtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5UaWxlbWFwcy5UaWxlfVxyXG4gICAgICovXHJcbiAgICBmaW5kVGlsZTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkZpbmRUaWxlKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBlYWNoIHRpbGUgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciwgcnVuIHRoZSBnaXZlblxyXG4gICAgICogZmlsdGVyIGNhbGxiYWNrIGZ1bmN0aW9uLiBBbnkgdGlsZXMgdGhhdCBwYXNzIHRoZSBmaWx0ZXIgdGVzdCAoaS5lLiB3aGVyZSB0aGUgY2FsbGJhY2sgcmV0dXJuc1xyXG4gICAgICogdHJ1ZSkgd2lsbCByZXR1cm5lZCBhcyBhIG5ldyBhcnJheS4gU2ltaWxhciB0byBBcnJheS5wcm90b3R5cGUuRmlsdGVyIGluIHZhbmlsbGEgSlMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2ZpbHRlclRpbGVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay4gRWFjaCB0aWxlIGluIHRoZSBnaXZlbiBhcmVhIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXNcclxuICAgICAqIGNhbGxiYWNrIGFzIHRoZSBmaXJzdCBhbmQgb25seSBwYXJhbWV0ZXIuIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRydWUgZm9yIHRpbGVzIHRoYXQgcGFzcyB0aGVcclxuICAgICAqIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIHJ1bi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnRtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gQW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBmaWx0ZXJUaWxlczogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkZpbHRlclRpbGVzKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvciBlYWNoIHRpbGUgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllciwgcnVuIHRoZSBnaXZlblxyXG4gICAgICogY2FsbGJhY2suIFNpbWlsYXIgdG8gQXJyYXkucHJvdG90eXBlLmZvckVhY2ggaW4gdmFuaWxsYSBKUy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZm9yRWFjaFRpbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLiBFYWNoIHRpbGUgaW4gdGhlIGdpdmVuIGFyZWEgd2lsbCBiZSBwYXNzZWQgdG8gdGhpc1xyXG4gICAgICogY2FsbGJhY2sgYXMgdGhlIGZpcnN0IGFuZCBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCB1bmRlciB3aGljaCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIHJ1bi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnRtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhIHRvIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVZPTBdIC0gVGhlIHRvcG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9bWF4IHdpZHRoIGJhc2VkIG9uIHRpbGVYXSAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PW1heCBoZWlnaHQgYmFzZWQgb24gdGlsZVldIC0gSG93IG1hbnkgdGlsZXMgdGFsbCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZm9yRWFjaFRpbGU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgdGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLkZvckVhY2hUaWxlKGNhbGxiYWNrLCBjb250ZXh0LCB0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gdGlsZSBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBsYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZ2V0VGlsZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gWCBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSAoZ2l2ZW4gaW4gdGlsZSB1bml0cywgbm90IHBpeGVscykuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gWSBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSAoZ2l2ZW4gaW4gdGlsZSB1bml0cywgbm90IHBpeGVscykuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtub25OdWxsPWZhbHNlXSAtIElmIHRydWUgZ2V0VGlsZSB3b24ndCByZXR1cm4gbnVsbCBmb3IgZW1wdHkgdGlsZXMsIGJ1dCBhIFRpbGVcclxuICAgICAqIG9iamVjdCB3aXRoIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBUaGUgdGlsZSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgb3IgbnVsbCBpZiBubyB0aWxlIHdhcyBmb3VuZCBvciB0aGUgY29vcmRpbmF0ZXMgd2VyZSBpbnZhbGlkLlxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlQXQ6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIG5vbk51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVBdCh0aWxlWCwgdGlsZVksIG5vbk51bGwsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSB0aWxlIGF0IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBsYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZ2V0VGlsZUF0V29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFggcG9zaXRpb24gdG8gZ2V0IHRoZSB0aWxlIGZyb20gKGdpdmVuIGluIHBpeGVscylcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBZIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIChnaXZlbiBpbiBwaXhlbHMpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtub25OdWxsPWZhbHNlXSAtIElmIHRydWUsIGZ1bmN0aW9uIHdvbid0IHJldHVybiBudWxsIGZvciBlbXB0eSB0aWxlcywgYnV0IGEgVGlsZVxyXG4gICAgICogb2JqZWN0IHdpdGggYW4gaW5kZXggb2YgLTEuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbGUgaW5kZXggZnJvbSB0aGUgd29ybGQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlfSBUaGUgdGlsZSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgb3IgbnVsbCBpZiBubyB0aWxlIHdhcyBmb3VuZCBvciB0aGUgY29vcmRpbmF0ZXNcclxuICAgICAqIHdlcmUgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCBub25OdWxsLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVBdFdvcmxkWFkod29ybGRYLCB3b3JsZFksIG5vbk51bGwsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHRpbGUgY29vcmRpbmF0ZXMpIG9mIHRoZSBsYXllci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZ2V0VGlsZXNXaXRoaW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RpbGVYPTBdIC0gVGhlIGxlZnRtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdGlsZVk9MF0gLSBUaGUgdG9wbW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPW1heCB3aWR0aCBiYXNlZCBvbiB0aWxlWF0gLSBIb3cgbWFueSB0aWxlcyB3aWRlIGZyb20gdGhlIGB0aWxlWGAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD1tYXggaGVpZ2h0IGJhc2VkIG9uIHRpbGVZXSAtIEhvdyBtYW55IHRpbGVzIHRhbGwgZnJvbSB0aGUgYHRpbGVZYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVGlsZW1hcHMuRmlsdGVyaW5nT3B0aW9uc30gW2ZpbHRlcmluZ09wdGlvbnNdIC0gT3B0aW9uYWwgZmlsdGVycyB0byBhcHBseSB3aGVuIGdldHRpbmcgdGhlIHRpbGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5UaWxlW119IEFuIGFycmF5IG9mIFRpbGUgb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0VGlsZXNXaXRoaW46IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGZpbHRlcmluZ09wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVzV2l0aGluKHRpbGVYLCB0aWxlWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGlsZXMgaW4gdGhlIGdpdmVuIHJlY3Rhbmd1bGFyIGFyZWEgKGluIHdvcmxkIGNvb3JkaW5hdGVzKSBvZiB0aGUgbGF5ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2dldFRpbGVzV2l0aGluV29ybGRYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSBsZWZ0bW9zdCB0aWxlIGluZGV4IChpbiB0aWxlIGNvb3JkaW5hdGVzKSB0byB1c2UgYXMgdGhlIG9yaWdpbiBvZiB0aGUgYXJlYSB0byBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ybGRZIC0gVGhlIHRvcG1vc3QgdGlsZSBpbmRleCAoaW4gdGlsZSBjb29yZGluYXRlcykgdG8gdXNlIGFzIHRoZSBvcmlnaW4gb2YgdGhlIGFyZWEgdG8gZmlsdGVyLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gSG93IG1hbnkgdGlsZXMgd2lkZSBmcm9tIHRoZSBgdGlsZVhgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gSG93IG1hbnkgdGlsZXMgaGlnaCBmcm9tIHRoZSBgdGlsZVlgIGluZGV4IHRoZSBhcmVhIHdpbGwgYmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5GaWx0ZXJpbmdPcHRpb25zfSBbZmlsdGVyaW5nT3B0aW9uc10gLSBPcHRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZ2V0dGluZyB0aGUgdGlsZXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gZmFjdG9yaW5nIGluIHdoaWNoIHRpbGVzIHRvIHJldHVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuVGlsZVtdfSBBbiBhcnJheSBvZiBUaWxlIG9iamVjdHMuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbGVzV2l0aGluV29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCB3aWR0aCwgaGVpZ2h0LCBmaWx0ZXJpbmdPcHRpb25zLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkdldFRpbGVzV2l0aGluV29ybGRYWSh3b3JsZFgsIHdvcmxkWSwgd2lkdGgsIGhlaWdodCwgZmlsdGVyaW5nT3B0aW9ucywgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0aWxlcyB0aGF0IG92ZXJsYXAgd2l0aCB0aGUgZ2l2ZW4gc2hhcGUgaW4gdGhlIGdpdmVuIGxheWVyLiBUaGUgc2hhcGUgbXVzdCBiZSBhIENpcmNsZSxcclxuICAgICAqIExpbmUsIFJlY3RhbmdsZSBvciBUcmlhbmdsZS4gVGhlIHNoYXBlIHNob3VsZCBiZSBpbiB3b3JsZCBjb29yZGluYXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjZ2V0VGlsZXNXaXRoaW5TaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uQ2lyY2xlfFBoYXNlci5HZW9tLkxpbmV8UGhhc2VyLkdlb20uUmVjdGFuZ2xlfFBoYXNlci5HZW9tLlRyaWFuZ2xlKX0gc2hhcGUgLSBBIHNoYXBlIGluIHdvcmxkIChwaXhlbCkgY29vcmRpbmF0ZXNcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbGVtYXBzLkZpbHRlcmluZ09wdGlvbnN9IFtmaWx0ZXJpbmdPcHRpb25zXSAtIE9wdGlvbmFsIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBnZXR0aW5nIHRoZSB0aWxlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlRpbGVbXX0gQW4gYXJyYXkgb2YgVGlsZSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBnZXRUaWxlc1dpdGhpblNoYXBlOiBmdW5jdGlvbiAoc2hhcGUsIGZpbHRlcmluZ09wdGlvbnMsIGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuR2V0VGlsZXNXaXRoaW5TaGFwZShzaGFwZSwgZmlsdGVyaW5nT3B0aW9ucywgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSB0aWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbiAoaW4gdGlsZSBjb29yZGluYXRlcykgaW4gdGhlIGdpdmVuIGxheWVyLiBSZXR1cm5zXHJcbiAgICAgKiBmYWxzZSBpZiB0aGVyZSBpcyBubyB0aWxlIG9yIGlmIHRoZSB0aWxlIGF0IHRoYXQgbG9jYXRpb24gaGFzIGFuIGluZGV4IG9mIC0xLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNoYXNUaWxlQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVggLSBYIHBvc2l0aW9uIHRvIGdldCB0aGUgdGlsZSBmcm9tIGluIHRpbGUgY29vcmRpbmF0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gWSBwb3NpdGlvbiB0byBnZXQgdGhlIHRpbGUgZnJvbSBpbiB0aWxlIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhc1RpbGVBdDogZnVuY3Rpb24gKHRpbGVYLCB0aWxlWSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gVGlsZW1hcENvbXBvbmVudHMuSGFzVGlsZUF0KHRpbGVYLCB0aWxlWSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgdGlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gKGluIHdvcmxkIGNvb3JkaW5hdGVzKSBpbiB0aGUgZ2l2ZW4gbGF5ZXIuIFJldHVybnNcclxuICAgICAqIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHRpbGUgb3IgaWYgdGhlIHRpbGUgYXQgdGhhdCBsb2NhdGlvbiBoYXMgYW4gaW5kZXggb2YgLTEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI2hhc1RpbGVBdFdvcmxkWFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB3b3JsZCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB3b3JsZCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzVGlsZUF0V29ybGRYWTogZnVuY3Rpb24gKHdvcmxkWCwgd29ybGRZLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLkhhc1RpbGVBdFdvcmxkWFkod29ybGRYLCB3b3JsZFksIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgYSBkZWJ1ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGF5ZXIgdG8gdGhlIGdpdmVuIEdyYXBoaWNzLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiB5b3Ugd2FudCB0b1xyXG4gICAgICogZ2V0IGEgcXVpY2sgaWRlYSBvZiB3aGljaCBvZiB5b3VyIHRpbGVzIGFyZSBjb2xsaWRpbmcgYW5kIHdoaWNoIGhhdmUgaW50ZXJlc3RpbmcgZmFjZXMuIFRoZSB0aWxlc1xyXG4gICAgICogYXJlIGRyYXduIHN0YXJ0aW5nIGF0ICgwLCAwKSBpbiB0aGUgR3JhcGhpY3MsIGFsbG93aW5nIHlvdSB0byBwbGFjZSB0aGUgZGVidWcgcmVwcmVzZW50YXRpb25cclxuICAgICAqIHdoZXJldmVyIHlvdSB3YW50IG9uIHRoZSBzY3JlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3JlbmRlckRlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3MgLSBUaGUgdGFyZ2V0IEdyYXBoaWNzIG9iamVjdCB0byBkcmF3IHVwb24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaWxlbWFwcy5TdHlsZUNvbmZpZ30gc3R5bGVDb25maWcgLSBBbiBvYmplY3Qgc3BlY2lmeWluZyB0aGUgY29sb3JzIHRvIHVzZSBmb3IgdGhlIGRlYnVnIGRyYXdpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChncmFwaGljcywgc3R5bGVDb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuUmVuZGVyRGVidWcoZ3JhcGhpY3MsIHN0eWxlQ29uZmlnLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gdGhlIGdpdmVuIHRpbGUgb3IgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgaW5kZXguIFlvdSBjYW4gcGFzcyBpbiBlaXRoZXIgYVxyXG4gICAgICogc2luZ2xlIG51bWVyaWMgaW5kZXggb3IgYW4gYXJyYXkgb2YgaW5kZXhlczogWzIsIDMsIDE1LCAyMF0uIFRoZSBgY29sbGlkZXNgIHBhcmFtZXRlciBjb250cm9scyBpZlxyXG4gICAgICogY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjc2V0Q29sbGlzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhpbnRlZ2VyfGFycmF5KX0gaW5kZXhlcyAtIEVpdGhlciBhIHNpbmdsZSB0aWxlIGluZGV4LCBvciBhbiBhcnJheSBvZiB0aWxlIGluZGV4ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyXHJcbiAgICAgKiBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcmVjYWxjdWxhdGUgdGhlIHRpbGUgZmFjZXMgYWZ0ZXIgdGhlXHJcbiAgICAgKiB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVMYXllcj10cnVlXSAtIElmIHRydWUsIHVwZGF0ZXMgdGhlIGN1cnJlbnQgdGlsZXMgb24gdGhlIGxheWVyLiBTZXQgdG9cclxuICAgICAqIGZhbHNlIGlmIG5vIHRpbGVzIGhhdmUgYmVlbiBwbGFjZWQgZm9yIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbjogZnVuY3Rpb24gKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCB1cGRhdGVMYXllcilcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRDb2xsaXNpb24oaW5kZXhlcywgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMsIHRoaXMubGF5ZXIsIHVwZGF0ZUxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb2xsaXNpb24gb24gYSByYW5nZSBvZiB0aWxlcyBpbiBhIGxheWVyIHdob3NlIGluZGV4IGlzIGJldHdlZW4gdGhlIHNwZWNpZmllZCBgc3RhcnRgIGFuZFxyXG4gICAgICogYHN0b3BgIChpbmNsdXNpdmUpLiBDYWxsaW5nIHRoaXMgd2l0aCBhIHN0YXJ0IHZhbHVlIG9mIDEwIGFuZCBhIHN0b3AgdmFsdWUgb2YgMTQgd291bGQgc2V0XHJcbiAgICAgKiBjb2xsaXNpb24gZm9yIHRpbGVzIDEwLCAxMSwgMTIsIDEzIGFuZCAxNC4gVGhlIGBjb2xsaWRlc2AgcGFyYW1ldGVyIGNvbnRyb2xzIGlmIGNvbGxpc2lvbiB3aWxsIGJlXHJcbiAgICAgKiBlbmFibGVkICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNzZXRDb2xsaXNpb25CZXR3ZWVuXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHN0YXJ0IC0gVGhlIGZpcnN0IGluZGV4IG9mIHRoZSB0aWxlIHRvIGJlIHNldCBmb3IgY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzdG9wIC0gVGhlIGxhc3QgaW5kZXggb2YgdGhlIHRpbGUgdG8gYmUgc2V0IGZvciBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2xsaWRlcz10cnVlXSAtIElmIHRydWUgaXQgd2lsbCBlbmFibGUgY29sbGlzaW9uLiBJZiBmYWxzZSBpdCB3aWxsIGNsZWFyXHJcbiAgICAgKiBjb2xsaXNpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWNhbGN1bGF0ZUZhY2VzPXRydWVdIC0gV2hldGhlciBvciBub3QgdG8gcmVjYWxjdWxhdGUgdGhlIHRpbGUgZmFjZXMgYWZ0ZXIgdGhlXHJcbiAgICAgKiB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sbGlzaW9uQmV0d2VlbjogZnVuY3Rpb24gKHN0YXJ0LCBzdG9wLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcylcclxuICAgIHtcclxuICAgICAgICBUaWxlbWFwQ29tcG9uZW50cy5TZXRDb2xsaXNpb25CZXR3ZWVuKHN0YXJ0LCBzdG9wLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgY29sbGlzaW9uIG9uIHRoZSB0aWxlcyB3aXRoaW4gYSBsYXllciBieSBjaGVja2luZyB0aWxlIHByb3BlcnRpZXMuIElmIGEgdGlsZSBoYXMgYSBwcm9wZXJ0eVxyXG4gICAgICogdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIG9iamVjdCwgaXRzIGNvbGxpc2lvbiBmbGFnIHdpbGwgYmUgc2V0LiBUaGUgYGNvbGxpZGVzYFxyXG4gICAgICogcGFyYW1ldGVyIGNvbnRyb2xzIGlmIGNvbGxpc2lvbiB3aWxsIGJlIGVuYWJsZWQgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkuIFBhc3NpbmcgaW5cclxuICAgICAqIGB7IGNvbGxpZGVzOiB0cnVlIH1gIHdvdWxkIHVwZGF0ZSB0aGUgY29sbGlzaW9uIGZsYWcgb24gYW55IHRpbGVzIHdpdGggYSBcImNvbGxpZGVzXCIgcHJvcGVydHkgdGhhdFxyXG4gICAgICogaGFzIGEgdmFsdWUgb2YgdHJ1ZS4gQW55IHRpbGUgdGhhdCBkb2Vzbid0IGhhdmUgXCJjb2xsaWRlc1wiIHNldCB0byB0cnVlIHdpbGwgYmUgaWdub3JlZC4gWW91IGNhblxyXG4gICAgICogYWxzbyB1c2UgYW4gYXJyYXkgb2YgdmFsdWVzLCBlLmcuIGB7IHR5cGVzOiBbXCJzdG9uZVwiLCBcImxhdmFcIiwgXCJzYW5kXCIgXSB9YC4gSWYgYSB0aWxlIGhhcyBhXHJcbiAgICAgKiBcInR5cGVzXCIgcHJvcGVydHkgdGhhdCBtYXRjaGVzIGFueSBvZiB0aG9zZSB2YWx1ZXMsIGl0cyBjb2xsaXNpb24gZmxhZyB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldENvbGxpc2lvbkJ5UHJvcGVydHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzIC0gQW4gb2JqZWN0IHdpdGggdGlsZSBwcm9wZXJ0aWVzIGFuZCBjb3JyZXNwb25kaW5nIHZhbHVlcyB0aGF0IHNob3VsZFxyXG4gICAgICogYmUgY2hlY2tlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXJcclxuICAgICAqIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGVcclxuICAgICAqIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25CeVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydGllcywgY29sbGlkZXMsIHJlY2FsY3VsYXRlRmFjZXMpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0Q29sbGlzaW9uQnlQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgY29sbGlzaW9uIG9uIGFsbCB0aWxlcyBpbiB0aGUgZ2l2ZW4gbGF5ZXIsIGV4Y2VwdCBmb3IgdGlsZXMgdGhhdCBoYXZlIGFuIGluZGV4IHNwZWNpZmllZCBpblxyXG4gICAgICogdGhlIGdpdmVuIGFycmF5LiBUaGUgYGNvbGxpZGVzYCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgY29sbGlzaW9uIHdpbGwgYmUgZW5hYmxlZCAodHJ1ZSkgb3JcclxuICAgICAqIGRpc2FibGVkIChmYWxzZSkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldENvbGxpc2lvbkJ5RXhjbHVzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJbXX0gaW5kZXhlcyAtIEFuIGFycmF5IG9mIHRoZSB0aWxlIGluZGV4ZXMgdG8gbm90IGJlIGNvdW50ZWQgZm9yIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbGxpZGVzPXRydWVdIC0gSWYgdHJ1ZSBpdCB3aWxsIGVuYWJsZSBjb2xsaXNpb24uIElmIGZhbHNlIGl0IHdpbGwgY2xlYXJcclxuICAgICAqIGNvbGxpc2lvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY2FsY3VsYXRlRmFjZXM9dHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byByZWNhbGN1bGF0ZSB0aGUgdGlsZSBmYWNlcyBhZnRlciB0aGVcclxuICAgICAqIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyfSBUaGlzIFRpbGVtYXAgTGF5ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsaXNpb25CeUV4Y2x1c2lvbjogZnVuY3Rpb24gKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlNldENvbGxpc2lvbkJ5RXhjbHVzaW9uKGluZGV4ZXMsIGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzLCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGdsb2JhbCBjb2xsaXNpb24gY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0aWxlIGluZGV4IHdpdGhpbiB0aGUgbGF5ZXIuIFRoaXMgd2lsbCBhZmZlY3QgYWxsXHJcbiAgICAgKiB0aWxlcyBvbiB0aGlzIGxheWVyIHRoYXQgaGF2ZSB0aGUgc2FtZSBpbmRleC4gSWYgYSBjYWxsYmFjayBpcyBhbHJlYWR5IHNldCBmb3IgdGhlIHRpbGUgaW5kZXggaXRcclxuICAgICAqIHdpbGwgYmUgcmVwbGFjZWQuIFNldCB0aGUgY2FsbGJhY2sgdG8gbnVsbCB0byByZW1vdmUgaXQuIElmIHlvdSB3YW50IHRvIHNldCBhIGNhbGxiYWNrIGZvciBhIHRpbGVcclxuICAgICAqIGF0IGEgc3BlY2lmaWMgbG9jYXRpb24gb24gdGhlIG1hcCB0aGVuIHNlZSBzZXRUaWxlTG9jYXRpb25DYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjc2V0VGlsZUluZGV4Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGludGVnZXJ8YXJyYXkpfSBpbmRleGVzIC0gRWl0aGVyIGEgc2luZ2xlIHRpbGUgaW5kZXgsIG9yIGFuIGFycmF5IG9mIHRpbGUgaW5kZXhlcyB0byBoYXZlIGFcclxuICAgICAqIGNvbGxpc2lvbiBjYWxsYmFjayBzZXQgZm9yLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdGlsZSBpcyBjb2xsaWRlZCB3aXRoLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNhbGxiYWNrQ29udGV4dCAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZUluZGV4Q2FsbGJhY2s6IGZ1bmN0aW9uIChpbmRleGVzLCBjYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlNldFRpbGVJbmRleENhbGxiYWNrKGluZGV4ZXMsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQsIHRoaXMubGF5ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbGxpc2lvbiBvbiB0aGUgdGlsZXMgd2l0aGluIGEgbGF5ZXIgYnkgY2hlY2tpbmcgZWFjaCB0aWxlcyBjb2xsaXNpb24gZ3JvdXAgZGF0YVxyXG4gICAgICogKHR5cGljYWxseSBkZWZpbmVkIGluIFRpbGVkIHdpdGhpbiB0aGUgdGlsZXNldCBjb2xsaXNpb24gZWRpdG9yKS4gSWYgYW55IG9iamVjdHMgYXJlIGZvdW5kIHdpdGhpblxyXG4gICAgICogYSB0aWxlcyBjb2xsaXNpb24gZ3JvdXAsIHRoZSB0aWxlJ3MgY29sbGlkaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgc2V0LiBUaGUgYGNvbGxpZGVzYCBwYXJhbWV0ZXJcclxuICAgICAqIGNvbnRyb2xzIGlmIGNvbGxpc2lvbiB3aWxsIGJlIGVuYWJsZWQgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29sbGlkZXM9dHJ1ZV0gLSBJZiB0cnVlIGl0IHdpbGwgZW5hYmxlIGNvbGxpc2lvbi4gSWYgZmFsc2UgaXQgd2lsbCBjbGVhclxyXG4gICAgICogY29sbGlzaW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVjYWxjdWxhdGVGYWNlcz10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJlY2FsY3VsYXRlIHRoZSB0aWxlIGZhY2VzIGFmdGVyIHRoZVxyXG4gICAgICogdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXJ9IFRoaXMgVGlsZW1hcCBMYXllciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cDogZnVuY3Rpb24gKGNvbGxpZGVzLCByZWNhbGN1bGF0ZUZhY2VzKVxyXG4gICAge1xyXG4gICAgICAgIFRpbGVtYXBDb21wb25lbnRzLlNldENvbGxpc2lvbkZyb21Db2xsaXNpb25Hcm91cChjb2xsaWRlcywgcmVjYWxjdWxhdGVGYWNlcywgdGhpcy5sYXllcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBjb2xsaXNpb24gY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiByZWN0YW5ndWxhciBhcmVhIChpbiB0aWxlIGNvb3JkaW5hdGVzKSB3aXRoaW4gdGhlIGxheWVyLlxyXG4gICAgICogSWYgYSBjYWxsYmFjayBpcyBhbHJlYWR5IHNldCBmb3IgdGhlIHRpbGUgaW5kZXggaXQgd2lsbCBiZSByZXBsYWNlZC4gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHRvXHJcbiAgICAgKiByZW1vdmUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3NldFRpbGVMb2NhdGlvbkNhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIGxlZnRtb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aWxlWSAtIFRoZSB0b3Btb3N0IHRpbGUgaW5kZXggKGluIHRpbGUgY29vcmRpbmF0ZXMpIHRvIHVzZSBhcyB0aGUgb3JpZ2luIG9mIHRoZSBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB3aWR0aCAtIEhvdyBtYW55IHRpbGVzIHdpZGUgZnJvbSB0aGUgYHRpbGVYYCBpbmRleCB0aGUgYXJlYSB3aWxsIGJlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBIb3cgbWFueSB0aWxlcyB0YWxsIGZyb20gdGhlIGB0aWxlWWAgaW5kZXggdGhlIGFyZWEgd2lsbCBiZS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHRpbGUgaXMgY29sbGlkZWQgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY2FsbGJhY2tDb250ZXh0XSAtIFRoZSBjb250ZXh0IHVuZGVyIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gVGhpcyBUaWxlbWFwIExheWVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2s6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrLCBjYWxsYmFja0NvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgVGlsZW1hcENvbXBvbmVudHMuU2V0VGlsZUxvY2F0aW9uQ2FsbGJhY2sodGlsZVgsIHRpbGVZLCB3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0LCB0aGlzLmxheWVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFggY29vcmRpbmF0ZXMgKHRpbGUgdW5pdHMpIHRvIHdvcmxkIFggY29vcmRpbmF0ZXMgKHBpeGVscyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdGlsZVRvV29ybGRYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIFggY29vcmRpbmF0ZSwgaW4gdGlsZSBjb29yZGluYXRlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgd29ybGQgdmFsdWVzIGZyb20gdGhlIHRpbGUgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aWxlVG9Xb3JsZFg6IGZ1bmN0aW9uICh0aWxlWCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5UaWxlVG9Xb3JsZFgodGlsZVgsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFkgY29vcmRpbmF0ZXMgKHRpbGUgdW5pdHMpIHRvIHdvcmxkIFkgY29vcmRpbmF0ZXMgKHBpeGVscyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjdGlsZVRvV29ybGRZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVZIC0gVGhlIFkgY29vcmRpbmF0ZSwgaW4gdGlsZSBjb29yZGluYXRlcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgd29ybGQgdmFsdWVzIGZyb20gdGhlIHRpbGUgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aWxlVG9Xb3JsZFk6IGZ1bmN0aW9uICh0aWxlWSwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5UaWxlVG9Xb3JsZFkodGlsZVksIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgZnJvbSB0aWxlIFhZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSB0byB3b3JsZCBYWSBjb29yZGluYXRlcyAocGl4ZWxzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLiBUaGlzIHdpbGwgcmV0dXJuIGEgbmV3IFZlY3RvcjIgb2JqZWN0IG9yIHVwZGF0ZSB0aGUgZ2l2ZW5cclxuICAgICAqIGBwb2ludGAgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN0aWxlVG9Xb3JsZFhZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbGVYIC0gVGhlIFggY29vcmRpbmF0ZSwgaW4gdGlsZSBjb29yZGluYXRlcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGlsZVkgLSBUaGUgWSBjb29yZGluYXRlLCBpbiB0aWxlIGNvb3JkaW5hdGVzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbcG9pbnRdIC0gQSBWZWN0b3IyIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi4gSWYgbm90IGdpdmVuLCBhIG5ldyBWZWN0b3IyIGlzIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBbY2FtZXJhPW1haW4gY2FtZXJhXSAtIFRoZSBDYW1lcmEgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHdvcmxkIHZhbHVlcyBmcm9tIHRoZSB0aWxlIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHRpbGVUb1dvcmxkWFk6IGZ1bmN0aW9uICh0aWxlWCwgdGlsZVksIHBvaW50LCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLlRpbGVUb1dvcmxkWFkodGlsZVgsIHRpbGVZLCBwb2ludCwgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHdvcmxkIFggY29vcmRpbmF0ZXMgKHBpeGVscykgdG8gdGlsZSBYIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN3b3JsZFRvVGlsZVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFggLSBUaGUgWCBjb29yZGluYXRlLCBpbiB3b3JsZCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9GbG9vcj10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJvdW5kIHRoZSB0aWxlIGNvb3JkaW5hdGUgZG93biB0byB0aGVcclxuICAgICAqIG5lYXJlc3QgaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd29ybGRUb1RpbGVYOiBmdW5jdGlvbiAod29ybGRYLCBzbmFwVG9GbG9vciwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5Xb3JsZFRvVGlsZVgod29ybGRYLCBzbmFwVG9GbG9vciwgY2FtZXJhLCB0aGlzLmxheWVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHdvcmxkIFkgY29vcmRpbmF0ZXMgKHBpeGVscykgdG8gdGlsZSBZIGNvb3JkaW5hdGVzICh0aWxlIHVuaXRzKSwgZmFjdG9yaW5nIGluIHRoZVxyXG4gICAgICogbGF5ZXJzIHBvc2l0aW9uLCBzY2FsZSBhbmQgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciN3b3JsZFRvVGlsZVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgWSBjb29yZGluYXRlLCBpbiB3b3JsZCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9GbG9vcj10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJvdW5kIHRoZSB0aWxlIGNvb3JkaW5hdGUgZG93biB0byB0aGVcclxuICAgICAqIG5lYXJlc3QgaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFtjYW1lcmE9bWFpbiBjYW1lcmFdIC0gVGhlIENhbWVyYSB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgdGlsZSBpbmRleCBmcm9tIHRoZSB3b3JsZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRvVGlsZVk6IGZ1bmN0aW9uICh3b3JsZFksIHNuYXBUb0Zsb29yLCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFRpbGVtYXBDb21wb25lbnRzLldvcmxkVG9UaWxlWSh3b3JsZFksIHNuYXBUb0Zsb29yLCBjYW1lcmEsIHRoaXMubGF5ZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIGZyb20gd29ybGQgWFkgY29vcmRpbmF0ZXMgKHBpeGVscykgdG8gdGlsZSBYWSBjb29yZGluYXRlcyAodGlsZSB1bml0cyksIGZhY3RvcmluZyBpbiB0aGVcclxuICAgICAqIGxheWVycyBwb3NpdGlvbiwgc2NhbGUgYW5kIHNjcm9sbC4gVGhpcyB3aWxsIHJldHVybiBhIG5ldyBWZWN0b3IyIG9iamVjdCBvciB1cGRhdGUgdGhlIGdpdmVuXHJcbiAgICAgKiBgcG9pbnRgIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjd29ybGRUb1RpbGVYWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmxkWCAtIFRoZSBYIGNvb3JkaW5hdGUsIGluIHdvcmxkIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JsZFkgLSBUaGUgWSBjb29yZGluYXRlLCBpbiB3b3JsZCBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9GbG9vcj10cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHJvdW5kIHRoZSB0aWxlIGNvb3JkaW5hdGUgZG93biB0byB0aGVcclxuICAgICAqIG5lYXJlc3QgaW50ZWdlci5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW3BvaW50XSAtIEEgVmVjdG9yMiB0byBzdG9yZSB0aGUgY29vcmRpbmF0ZXMgaW4uIElmIG5vdCBnaXZlbiwgYSBuZXcgVmVjdG9yMiBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gW2NhbWVyYT1tYWluIGNhbWVyYV0gLSBUaGUgQ2FtZXJhIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWxlIGluZGV4IGZyb20gdGhlIHdvcmxkIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRvVGlsZVhZOiBmdW5jdGlvbiAod29ybGRYLCB3b3JsZFksIHNuYXBUb0Zsb29yLCBwb2ludCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaWxlbWFwQ29tcG9uZW50cy5Xb3JsZFRvVGlsZVhZKHdvcmxkWCwgd29ybGRZLCBzbmFwVG9GbG9vciwgcG9pbnQsIGNhbWVyYSwgdGhpcy5sYXllcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBTdGF0aWNUaWxlbWFwTGF5ZXIgYW5kIHJlbW92ZXMgaXRzIGxpbmsgdG8gdGhlIGFzc29jaWF0ZWQgTGF5ZXJEYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllciNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVtb3ZlRnJvbVRpbGVtYXA9dHJ1ZV0gLSBSZW1vdmUgdGhpcyBsYXllciBmcm9tIHRoZSBwYXJlbnQgVGlsZW1hcD9cclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHJlbW92ZUZyb21UaWxlbWFwKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyZW1vdmVGcm9tVGlsZW1hcCA9PT0gdW5kZWZpbmVkKSB7IHJlbW92ZUZyb21UaWxlbWFwID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMudGlsZW1hcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBBYm9ydCwgd2UndmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVW5pbnN0YWxsIHRoaXMgbGF5ZXIgb25seSBpZiBpdCBpcyBzdGlsbCBpbnN0YWxsZWQgb24gdGhlIExheWVyRGF0YSBvYmplY3RcclxuICAgICAgICBpZiAodGhpcy5sYXllci50aWxlbWFwTGF5ZXIgPT09IHRoaXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxheWVyLnRpbGVtYXBMYXllciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVGcm9tVGlsZW1hcClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGlsZW1hcC5yZW1vdmVMYXllcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGlsZW1hcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3VsbGVkVGlsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmN1bGxDYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50aWxlc2V0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eVtpXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Q291bnRbaV0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlcltpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyRGF0YVtpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld0YzMltpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGV4Vmlld1UzMltpXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdpZE1hcCA9IFtdO1xyXG4gICAgICAgIHRoaXMudGlsZXNldCA9IFtdO1xyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3RhdGljVGlsZW1hcExheWVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerCanvasRenderer.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerCanvasRenderer.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.Tilemaps.StaticTilemapLayer#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.Tilemaps.StaticTilemapLayer} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar StaticTilemapLayerCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n    src.cull(camera);\r\n\r\n    var renderTiles = src.culledTiles;\r\n    var tileCount = renderTiles.length;\r\n\r\n    if (tileCount === 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var camMatrix = renderer._tempMatrix1;\r\n    var layerMatrix = renderer._tempMatrix2;\r\n    var calcMatrix = renderer._tempMatrix3;\r\n\r\n    layerMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n    camMatrix.copyFrom(camera.matrix);\r\n\r\n    var ctx = renderer.currentContext;\r\n    var gidMap = src.gidMap;\r\n\r\n    ctx.save();\r\n\r\n    if (parentMatrix)\r\n    {\r\n        //  Multiply the camera by the parent matrix\r\n        camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n        //  Undo the camera scroll\r\n        layerMatrix.e = src.x;\r\n        layerMatrix.f = src.y;\r\n\r\n        camMatrix.multiply(layerMatrix, calcMatrix);\r\n\r\n        calcMatrix.copyToContext(ctx);\r\n    }\r\n    else\r\n    {\r\n        //  Undo the camera scroll\r\n        layerMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n        layerMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n        layerMatrix.copyToContext(ctx);\r\n    }\r\n\r\n    var alpha = camera.alpha * src.alpha;\r\n\r\n    if (!renderer.antialias || src.scaleX > 1 || src.scaleY > 1)\r\n    {\r\n        ctx.imageSmoothingEnabled = false;\r\n    }\r\n\r\n    for (var i = 0; i < tileCount; i++)\r\n    {\r\n        var tile = renderTiles[i];\r\n\r\n        var tileset = gidMap[tile.index];\r\n\r\n        if (!tileset)\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var image = tileset.image.getSourceImage();\r\n        var tileTexCoords = tileset.getTileTextureCoordinates(tile.index);\r\n\r\n        if (tileTexCoords)\r\n        {\r\n            var tileWidth = tileset.tileWidth;\r\n            var tileHeight = tileset.tileHeight;\r\n            var halfWidth = tileWidth / 2;\r\n            var halfHeight = tileHeight / 2;\r\n    \r\n            ctx.save();\r\n\r\n            ctx.translate(tile.pixelX + halfWidth, tile.pixelY + halfHeight);\r\n\r\n            if (tile.rotation !== 0)\r\n            {\r\n                ctx.rotate(tile.rotation);\r\n            }\r\n    \r\n            if (tile.flipX || tile.flipY)\r\n            {\r\n                ctx.scale((tile.flipX) ? -1 : 1, (tile.flipY) ? -1 : 1);\r\n            }\r\n\r\n            ctx.globalAlpha = alpha * tile.alpha;\r\n    \r\n            ctx.drawImage(\r\n                image,\r\n                tileTexCoords.x, tileTexCoords.y,\r\n                tileWidth, tileHeight,\r\n                -halfWidth, -halfHeight,\r\n                tileWidth, tileHeight\r\n            );\r\n    \r\n            ctx.restore();\r\n        }\r\n    }\r\n\r\n    ctx.restore();\r\n};\r\n\r\nmodule.exports = StaticTilemapLayerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXJDYW52YXNSZW5kZXJlci5qcz82MTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvc3RhdGljbGF5ZXIvU3RhdGljVGlsZW1hcExheWVyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuVGlsZW1hcHMuU3RhdGljVGlsZW1hcExheWVyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRpbGVtYXBzLlN0YXRpY1RpbGVtYXBMYXllcn0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFN0YXRpY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgc3JjLmN1bGwoY2FtZXJhKTtcclxuXHJcbiAgICB2YXIgcmVuZGVyVGlsZXMgPSBzcmMuY3VsbGVkVGlsZXM7XHJcbiAgICB2YXIgdGlsZUNvdW50ID0gcmVuZGVyVGlsZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmICh0aWxlQ291bnQgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgbGF5ZXJNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBsYXllck1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcbiAgICB2YXIgZ2lkTWFwID0gc3JjLmdpZE1hcDtcclxuXHJcbiAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBsYXllck1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgbGF5ZXJNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkobGF5ZXJNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgICAgICBjYWxjTWF0cml4LmNvcHlUb0NvbnRleHQoY3R4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIGxheWVyTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBsYXllck1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcblxyXG4gICAgICAgIGxheWVyTWF0cml4LmNvcHlUb0NvbnRleHQoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJlci5hbnRpYWxpYXMgfHwgc3JjLnNjYWxlWCA+IDEgfHwgc3JjLnNjYWxlWSA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlsZUNvdW50OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRpbGUgPSByZW5kZXJUaWxlc1tpXTtcclxuXHJcbiAgICAgICAgdmFyIHRpbGVzZXQgPSBnaWRNYXBbdGlsZS5pbmRleF07XHJcblxyXG4gICAgICAgIGlmICghdGlsZXNldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGltYWdlID0gdGlsZXNldC5pbWFnZS5nZXRTb3VyY2VJbWFnZSgpO1xyXG4gICAgICAgIHZhciB0aWxlVGV4Q29vcmRzID0gdGlsZXNldC5nZXRUaWxlVGV4dHVyZUNvb3JkaW5hdGVzKHRpbGUuaW5kZXgpO1xyXG5cclxuICAgICAgICBpZiAodGlsZVRleENvb3JkcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0aWxlV2lkdGggPSB0aWxlc2V0LnRpbGVXaWR0aDtcclxuICAgICAgICAgICAgdmFyIHRpbGVIZWlnaHQgPSB0aWxlc2V0LnRpbGVIZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBoYWxmV2lkdGggPSB0aWxlV2lkdGggLyAyO1xyXG4gICAgICAgICAgICB2YXIgaGFsZkhlaWdodCA9IHRpbGVIZWlnaHQgLyAyO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcblxyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHRpbGUucGl4ZWxYICsgaGFsZldpZHRoLCB0aWxlLnBpeGVsWSArIGhhbGZIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRpbGUucm90YXRpb24gIT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUodGlsZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAodGlsZS5mbGlwWCB8fCB0aWxlLmZsaXBZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjdHguc2NhbGUoKHRpbGUuZmxpcFgpID8gLTEgOiAxLCAodGlsZS5mbGlwWSkgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBhbHBoYSAqIHRpbGUuYWxwaGE7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShcclxuICAgICAgICAgICAgICAgIGltYWdlLFxyXG4gICAgICAgICAgICAgICAgdGlsZVRleENvb3Jkcy54LCB0aWxlVGV4Q29vcmRzLnksXHJcbiAgICAgICAgICAgICAgICB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAtaGFsZldpZHRoLCAtaGFsZkhlaWdodCxcclxuICAgICAgICAgICAgICAgIHRpbGVXaWR0aCwgdGlsZUhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGN0eC5yZXN0b3JlKCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRpY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerCanvasRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerRender.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerRender.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n    renderWebGL = __webpack_require__(/*! ./StaticTilemapLayerWebGLRenderer */ \"./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n    renderCanvas = __webpack_require__(/*! ./StaticTilemapLayerCanvasRenderer */ \"./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n    renderWebGL: renderWebGL,\r\n    renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXJSZW5kZXIuanM/YTQ2MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDRIQUFtQztBQUM3RDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsOEhBQW9DO0FBQy9EOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXJSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9TdGF0aWNUaWxlbWFwTGF5ZXJXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1N0YXRpY1RpbGVtYXBMYXllckNhbnZhc1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIHJlbmRlcldlYkdMOiByZW5kZXJXZWJHTCxcclxuICAgIHJlbmRlckNhbnZhczogcmVuZGVyQ2FudmFzXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerRender.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerWebGLRenderer.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerWebGLRenderer.js ***!
  \*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * \r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n * \r\n * A Static Tilemap Layer renders immediately and does not use any batching.\r\n *\r\n * @method Phaser.Tilemaps.StaticTilemapLayer#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.Tilemaps.StaticTilemapLayer} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar StaticTilemapLayerWebGLRenderer = function (renderer, src, interpolationPercentage, camera)\r\n{\r\n    var tilesets = src.tileset;\r\n\r\n    var pipeline = src.pipeline;\r\n    var pipelineVertexBuffer = pipeline.vertexBuffer;\r\n\r\n    renderer.setPipeline(pipeline);\r\n\r\n    pipeline.modelIdentity();\r\n    pipeline.modelTranslate(src.x - (camera.scrollX * src.scrollFactorX), src.y - (camera.scrollY * src.scrollFactorY), 0);\r\n    pipeline.modelScale(src.scaleX, src.scaleY, 1);\r\n    pipeline.viewLoad2D(camera.matrix.matrix);\r\n\r\n    for (var i = 0; i < tilesets.length; i++)\r\n    {\r\n        src.upload(camera, i);\r\n\r\n        if (src.vertexCount[i] > 0)\r\n        {\r\n            if (renderer.currentPipeline && renderer.currentPipeline.vertexCount > 0)\r\n            {\r\n                renderer.flush();\r\n            }\r\n        \r\n            pipeline.vertexBuffer = src.vertexBuffer[i];\r\n        \r\n            renderer.setPipeline(pipeline);\r\n        \r\n            renderer.setTexture2D(tilesets[i].glTexture, 0);\r\n        \r\n            renderer.gl.drawArrays(pipeline.topology, 0, src.vertexCount[i]);\r\n        }\r\n    }\r\n\r\n    //  Restore the pipeline\r\n    pipeline.vertexBuffer = pipelineVertexBuffer;\r\n\r\n    pipeline.viewIdentity();\r\n    pipeline.modelIdentity();\r\n};\r\n\r\nmodule.exports = StaticTilemapLayerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aWxlbWFwcy9zdGF0aWNsYXllci9TdGF0aWNUaWxlbWFwTGF5ZXJXZWJHTFJlbmRlcmVyLmpzP2VmZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsbUNBQW1DO0FBQzlDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGlsZW1hcHMvc3RhdGljbGF5ZXIvU3RhdGljVGlsZW1hcExheWVyV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBcclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKiBcclxuICogQSBTdGF0aWMgVGlsZW1hcCBMYXllciByZW5kZXJzIGltbWVkaWF0ZWx5IGFuZCBkb2VzIG5vdCB1c2UgYW55IGJhdGNoaW5nLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXIjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UaWxlbWFwcy5TdGF0aWNUaWxlbWFwTGF5ZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBTdGF0aWNUaWxlbWFwTGF5ZXJXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEpXHJcbntcclxuICAgIHZhciB0aWxlc2V0cyA9IHNyYy50aWxlc2V0O1xyXG5cclxuICAgIHZhciBwaXBlbGluZSA9IHNyYy5waXBlbGluZTtcclxuICAgIHZhciBwaXBlbGluZVZlcnRleEJ1ZmZlciA9IHBpcGVsaW5lLnZlcnRleEJ1ZmZlcjtcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgcGlwZWxpbmUubW9kZWxJZGVudGl0eSgpO1xyXG4gICAgcGlwZWxpbmUubW9kZWxUcmFuc2xhdGUoc3JjLnggLSAoY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCksIHNyYy55IC0gKGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpLCAwKTtcclxuICAgIHBpcGVsaW5lLm1vZGVsU2NhbGUoc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSwgMSk7XHJcbiAgICBwaXBlbGluZS52aWV3TG9hZDJEKGNhbWVyYS5tYXRyaXgubWF0cml4KTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbGVzZXRzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHNyYy51cGxvYWQoY2FtZXJhLCBpKTtcclxuXHJcbiAgICAgICAgaWYgKHNyYy52ZXJ0ZXhDb3VudFtpXSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuY3VycmVudFBpcGVsaW5lICYmIHJlbmRlcmVyLmN1cnJlbnRQaXBlbGluZS52ZXJ0ZXhDb3VudCA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLmZsdXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcGlwZWxpbmUudmVydGV4QnVmZmVyID0gc3JjLnZlcnRleEJ1ZmZlcltpXTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRUZXh0dXJlMkQodGlsZXNldHNbaV0uZ2xUZXh0dXJlLCAwKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZHJhd0FycmF5cyhwaXBlbGluZS50b3BvbG9neSwgMCwgc3JjLnZlcnRleENvdW50W2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFJlc3RvcmUgdGhlIHBpcGVsaW5lXHJcbiAgICBwaXBlbGluZS52ZXJ0ZXhCdWZmZXIgPSBwaXBlbGluZVZlcnRleEJ1ZmZlcjtcclxuXHJcbiAgICBwaXBlbGluZS52aWV3SWRlbnRpdHkoKTtcclxuICAgIHBpcGVsaW5lLm1vZGVsSWRlbnRpdHkoKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3RhdGljVGlsZW1hcExheWVyV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tilemaps/staticlayer/StaticTilemapLayerWebGLRenderer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/time/Clock.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/time/Clock.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar TimerEvent = __webpack_require__(/*! ./TimerEvent */ \"./node_modules/phaser/src/time/TimerEvent.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Clock is a Scene plugin which creates and updates Timer Events for its Scene.\r\n *\r\n * @class Clock\r\n * @memberof Phaser.Time\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which owns this Clock.\r\n */\r\nvar Clock = new Class({\r\n\r\n    initialize:\r\n\r\n    function Clock (scene)\r\n    {\r\n        /**\r\n         * The Scene which owns this Clock.\r\n         *\r\n         * @name Phaser.Time.Clock#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Scene Systems object of the Scene which owns this Clock.\r\n         *\r\n         * @name Phaser.Time.Clock#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * The current time of the Clock, in milliseconds.\r\n         *\r\n         * If accessed externally, this is equivalent to the `time` parameter normally passed to a Scene's `update` method.\r\n         *\r\n         * @name Phaser.Time.Clock#now\r\n         * @type {number}\r\n         * @since 3.0.0\r\n         */\r\n        this.now = 0;\r\n\r\n        //  Scale the delta time coming into the Clock by this factor\r\n        //  which then influences anything using this Clock for calculations, like TimerEvents\r\n\r\n        /**\r\n         * The scale of the Clock's time delta.\r\n         * \r\n         * The time delta is the time elapsed between two consecutive frames and influences the speed of time for this Clock and anything which uses it, such as its Timer Events. Values higher than 1 increase the speed of time, while values smaller than 1 decrease it. A value of 0 freezes time and is effectively equivalent to pausing the Clock.\r\n         *\r\n         * @name Phaser.Time.Clock#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * Whether the Clock is paused (`true`) or active (`false`).\r\n         *\r\n         * When paused, the Clock will not update any of its Timer Events, thus freezing time.\r\n         *\r\n         * @name Phaser.Time.Clock#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        /**\r\n         * An array of all Timer Events whose delays haven't expired - these are actively updating Timer Events.\r\n         *\r\n         * @name Phaser.Time.Clock#_active\r\n         * @type {Phaser.Time.TimerEvent[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._active = [];\r\n\r\n        /**\r\n         * An array of all Timer Events which will be added to the Clock at the start of the frame.\r\n         *\r\n         * @name Phaser.Time.Clock#_pendingInsertion\r\n         * @type {Phaser.Time.TimerEvent[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._pendingInsertion = [];\r\n\r\n        /**\r\n         * An array of all Timer Events which will be removed from the Clock at the start of the frame.\r\n         *\r\n         * @name Phaser.Time.Clock#_pendingRemoval\r\n         * @type {Phaser.Time.TimerEvent[]}\r\n         * @private\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this._pendingRemoval = [];\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Time.Clock#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        //  Sync with the TimeStep\r\n        this.now = this.systems.game.loop.time;\r\n        \r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Time.Clock#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.on(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * Creates a Timer Event and adds it to the Clock at the start of the frame.\r\n     *\r\n     * @method Phaser.Time.Clock#addEvent\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Time.TimerEventConfig} config - The configuration for the Timer Event.\r\n     *\r\n     * @return {Phaser.Time.TimerEvent} The Timer Event which was created.\r\n     */\r\n    addEvent: function (config)\r\n    {\r\n        var event = new TimerEvent(config);\r\n\r\n        this._pendingInsertion.push(event);\r\n\r\n        return event;\r\n    },\r\n\r\n    /**\r\n     * Creates a Timer Event and adds it to the Clock at the start of the frame.\r\n     *\r\n     * This is a shortcut for {@link #addEvent} which can be shorter and is compatible with the syntax of the GreenSock Animation Platform (GSAP).\r\n     *\r\n     * @method Phaser.Time.Clock#delayedCall\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} delay - The delay of the function call, in milliseconds.\r\n     * @param {function} callback - The function to call after the delay expires.\r\n     * @param {Array.<*>} [args] - The arguments to call the function with.\r\n     * @param {*} [callbackScope] - The scope (`this` object) to call the function with.\r\n     *\r\n     * @return {Phaser.Time.TimerEvent} The Timer Event which was created.\r\n     */\r\n    delayedCall: function (delay, callback, args, callbackScope)\r\n    {\r\n        return this.addEvent({ delay: delay, callback: callback, args: args, callbackScope: callbackScope });\r\n    },\r\n\r\n    /**\r\n     * Clears and recreates the array of pending Timer Events.\r\n     *\r\n     * @method Phaser.Time.Clock#clearPendingEvents\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Time.Clock} This Clock object.\r\n     */\r\n    clearPendingEvents: function ()\r\n    {\r\n        this._pendingInsertion = [];\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Schedules all active Timer Events for removal at the start of the frame.\r\n     *\r\n     * @method Phaser.Time.Clock#removeAllEvents\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Time.Clock} This Clock object.\r\n     */\r\n    removeAllEvents: function ()\r\n    {\r\n        this._pendingRemoval = this._pendingRemoval.concat(this._active);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Updates the arrays of active and pending Timer Events. Called at the start of the frame.\r\n     *\r\n     * @method Phaser.Time.Clock#preUpdate\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    preUpdate: function ()\r\n    {\r\n        var toRemove = this._pendingRemoval.length;\r\n        var toInsert = this._pendingInsertion.length;\r\n\r\n        if (toRemove === 0 && toInsert === 0)\r\n        {\r\n            //  Quick bail\r\n            return;\r\n        }\r\n\r\n        var i;\r\n        var event;\r\n\r\n        //  Delete old events\r\n        for (i = 0; i < toRemove; i++)\r\n        {\r\n            event = this._pendingRemoval[i];\r\n\r\n            var index = this._active.indexOf(event);\r\n\r\n            if (index > -1)\r\n            {\r\n                this._active.splice(index, 1);\r\n            }\r\n\r\n            //  Pool them?\r\n            event.destroy();\r\n        }\r\n\r\n        for (i = 0; i < toInsert; i++)\r\n        {\r\n            event = this._pendingInsertion[i];\r\n\r\n            this._active.push(event);\r\n        }\r\n\r\n        //  Clear the lists\r\n        this._pendingRemoval.length = 0;\r\n        this._pendingInsertion.length = 0;\r\n    },\r\n\r\n    /**\r\n     * Updates the Clock's internal time and all of its Timer Events.\r\n     *\r\n     * @method Phaser.Time.Clock#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (time, delta)\r\n    {\r\n        this.now = time;\r\n\r\n        if (this.paused)\r\n        {\r\n            return;\r\n        }\r\n\r\n        delta *= this.timeScale;\r\n\r\n        for (var i = 0; i < this._active.length; i++)\r\n        {\r\n            var event = this._active[i];\r\n\r\n            if (event.paused)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            //  Use delta time to increase elapsed.\r\n            //  Avoids needing to adjust for pause / resume.\r\n            //  Automatically smoothed by TimeStep class.\r\n            //  In testing accurate to +- 1ms!\r\n            event.elapsed += delta * event.timeScale;\r\n\r\n            if (event.elapsed >= event.delay)\r\n            {\r\n                var remainder = event.elapsed - event.delay;\r\n\r\n                //  Limit it, in case it's checked in the callback\r\n                event.elapsed = event.delay;\r\n\r\n                //  Process the event\r\n                if (!event.hasDispatched && event.callback)\r\n                {\r\n                    event.hasDispatched = true;\r\n                    event.callback.apply(event.callbackScope, event.args);\r\n                }\r\n\r\n                if (event.repeatCount > 0)\r\n                {\r\n                    event.repeatCount--;\r\n\r\n                    event.elapsed = remainder;\r\n                    event.hasDispatched = false;\r\n                }\r\n                else\r\n                {\r\n                    this._pendingRemoval.push(event);\r\n                }\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Time.Clock#shutdown\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        var i;\r\n\r\n        for (i = 0; i < this._pendingInsertion.length; i++)\r\n        {\r\n            this._pendingInsertion[i].destroy();\r\n        }\r\n\r\n        for (i = 0; i < this._active.length; i++)\r\n        {\r\n            this._active[i].destroy();\r\n        }\r\n\r\n        for (i = 0; i < this._pendingRemoval.length; i++)\r\n        {\r\n            this._pendingRemoval[i].destroy();\r\n        }\r\n\r\n        this._active.length = 0;\r\n        this._pendingRemoval.length = 0;\r\n        this._pendingInsertion.length = 0;\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.off(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Time.Clock#destroy\r\n     * @private\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('Clock', Clock, 'time');\r\n\r\nmodule.exports = Clock;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aW1lL0Nsb2NrLmpzPzkxN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxrRUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixnQkFBZ0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsVUFBVTtBQUN6QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qiw2RUFBNkU7QUFDM0csS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUNBQW1DO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUNBQWlDO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGltZS9DbG9jay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFRpbWVyRXZlbnQgPSByZXF1aXJlKCcuL1RpbWVyRXZlbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBDbG9jayBpcyBhIFNjZW5lIHBsdWdpbiB3aGljaCBjcmVhdGVzIGFuZCB1cGRhdGVzIFRpbWVyIEV2ZW50cyBmb3IgaXRzIFNjZW5lLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ2xvY2tcclxuICogQG1lbWJlcm9mIFBoYXNlci5UaW1lXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHdoaWNoIG93bnMgdGhpcyBDbG9jay5cclxuICovXHJcbnZhciBDbG9jayA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDbG9jayAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHdoaWNoIG93bnMgdGhpcyBDbG9jay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLkNsb2NrI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSBTeXN0ZW1zIG9iamVjdCBvZiB0aGUgU2NlbmUgd2hpY2ggb3ducyB0aGlzIENsb2NrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuQ2xvY2sjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCB0aW1lIG9mIHRoZSBDbG9jaywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSWYgYWNjZXNzZWQgZXh0ZXJuYWxseSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBgdGltZWAgcGFyYW1ldGVyIG5vcm1hbGx5IHBhc3NlZCB0byBhIFNjZW5lJ3MgYHVwZGF0ZWAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuQ2xvY2sjbm93XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5vdyA9IDA7XHJcblxyXG4gICAgICAgIC8vICBTY2FsZSB0aGUgZGVsdGEgdGltZSBjb21pbmcgaW50byB0aGUgQ2xvY2sgYnkgdGhpcyBmYWN0b3JcclxuICAgICAgICAvLyAgd2hpY2ggdGhlbiBpbmZsdWVuY2VzIGFueXRoaW5nIHVzaW5nIHRoaXMgQ2xvY2sgZm9yIGNhbGN1bGF0aW9ucywgbGlrZSBUaW1lckV2ZW50c1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIENsb2NrJ3MgdGltZSBkZWx0YS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgdGltZSBkZWx0YSBpcyB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGZyYW1lcyBhbmQgaW5mbHVlbmNlcyB0aGUgc3BlZWQgb2YgdGltZSBmb3IgdGhpcyBDbG9jayBhbmQgYW55dGhpbmcgd2hpY2ggdXNlcyBpdCwgc3VjaCBhcyBpdHMgVGltZXIgRXZlbnRzLiBWYWx1ZXMgaGlnaGVyIHRoYW4gMSBpbmNyZWFzZSB0aGUgc3BlZWQgb2YgdGltZSwgd2hpbGUgdmFsdWVzIHNtYWxsZXIgdGhhbiAxIGRlY3JlYXNlIGl0LiBBIHZhbHVlIG9mIDAgZnJlZXplcyB0aW1lIGFuZCBpcyBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIHBhdXNpbmcgdGhlIENsb2NrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuQ2xvY2sjdGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBDbG9jayBpcyBwYXVzZWQgKGB0cnVlYCkgb3IgYWN0aXZlIChgZmFsc2VgKS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFdoZW4gcGF1c2VkLCB0aGUgQ2xvY2sgd2lsbCBub3QgdXBkYXRlIGFueSBvZiBpdHMgVGltZXIgRXZlbnRzLCB0aHVzIGZyZWV6aW5nIHRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGltZS5DbG9jayNwYXVzZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIGFsbCBUaW1lciBFdmVudHMgd2hvc2UgZGVsYXlzIGhhdmVuJ3QgZXhwaXJlZCAtIHRoZXNlIGFyZSBhY3RpdmVseSB1cGRhdGluZyBUaW1lciBFdmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGltZS5DbG9jayNfYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaW1lLlRpbWVyRXZlbnRbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIGFsbCBUaW1lciBFdmVudHMgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQ2xvY2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLkNsb2NrI19wZW5kaW5nSW5zZXJ0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaW1lLlRpbWVyRXZlbnRbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0luc2VydGlvbiA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBhbGwgVGltZXIgRXZlbnRzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBDbG9jayBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuQ2xvY2sjX3BlbmRpbmdSZW1vdmFsXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UaW1lLlRpbWVyRXZlbnRbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwgPSBbXTtcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGltZS5DbG9jayNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFN5bmMgd2l0aCB0aGUgVGltZVN0ZXBcclxuICAgICAgICB0aGlzLm5vdyA9IHRoaXMuc3lzdGVtcy5nYW1lLmxvb3AudGltZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGltZS5DbG9jayNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKFNjZW5lRXZlbnRzLlBSRV9VUERBVEUsIHRoaXMucHJlVXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBUaW1lciBFdmVudCBhbmQgYWRkcyBpdCB0byB0aGUgQ2xvY2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLkNsb2NrI2FkZEV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5UaW1lLlRpbWVyRXZlbnRDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgVGltZXIgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbWUuVGltZXJFdmVudH0gVGhlIFRpbWVyIEV2ZW50IHdoaWNoIHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBhZGRFdmVudDogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVGltZXJFdmVudChjb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLnB1c2goZXZlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFRpbWVyIEV2ZW50IGFuZCBhZGRzIGl0IHRvIHRoZSBDbG9jayBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3Ige0BsaW5rICNhZGRFdmVudH0gd2hpY2ggY2FuIGJlIHNob3J0ZXIgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgc3ludGF4IG9mIHRoZSBHcmVlblNvY2sgQW5pbWF0aW9uIFBsYXRmb3JtIChHU0FQKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLkNsb2NrI2RlbGF5ZWRDYWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBUaGUgZGVsYXkgb2YgdGhlIGZ1bmN0aW9uIGNhbGwsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIGRlbGF5IGV4cGlyZXMuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjwqPn0gW2FyZ3NdIC0gVGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY2FsbGJhY2tTY29wZV0gLSBUaGUgc2NvcGUgKGB0aGlzYCBvYmplY3QpIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbWUuVGltZXJFdmVudH0gVGhlIFRpbWVyIEV2ZW50IHdoaWNoIHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBkZWxheWVkQ2FsbDogZnVuY3Rpb24gKGRlbGF5LCBjYWxsYmFjaywgYXJncywgY2FsbGJhY2tTY29wZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRFdmVudCh7IGRlbGF5OiBkZWxheSwgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzLCBjYWxsYmFja1Njb3BlOiBjYWxsYmFja1Njb3BlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbmQgcmVjcmVhdGVzIHRoZSBhcnJheSBvZiBwZW5kaW5nIFRpbWVyIEV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLkNsb2NrI2NsZWFyUGVuZGluZ0V2ZW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbWUuQ2xvY2t9IFRoaXMgQ2xvY2sgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhclBlbmRpbmdFdmVudHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0luc2VydGlvbiA9IFtdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2hlZHVsZXMgYWxsIGFjdGl2ZSBUaW1lciBFdmVudHMgZm9yIHJlbW92YWwgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLkNsb2NrI3JlbW92ZUFsbEV2ZW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRpbWUuQ2xvY2t9IFRoaXMgQ2xvY2sgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxFdmVudHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwgPSB0aGlzLl9wZW5kaW5nUmVtb3ZhbC5jb25jYXQodGhpcy5fYWN0aXZlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYXJyYXlzIG9mIGFjdGl2ZSBhbmQgcGVuZGluZyBUaW1lciBFdmVudHMuIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbWUuQ2xvY2sjcHJlVXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0b1JlbW92ZSA9IHRoaXMuX3BlbmRpbmdSZW1vdmFsLmxlbmd0aDtcclxuICAgICAgICB2YXIgdG9JbnNlcnQgPSB0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHRvUmVtb3ZlID09PSAwICYmIHRvSW5zZXJ0ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFF1aWNrIGJhaWxcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGV2ZW50O1xyXG5cclxuICAgICAgICAvLyAgRGVsZXRlIG9sZCBldmVudHNcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9SZW1vdmU7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGV2ZW50ID0gdGhpcy5fcGVuZGluZ1JlbW92YWxbaV07XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmUuaW5kZXhPZihldmVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBQb29sIHRoZW0/XHJcbiAgICAgICAgICAgIGV2ZW50LmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b0luc2VydDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZXZlbnQgPSB0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uW2ldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlLnB1c2goZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIENsZWFyIHRoZSBsaXN0c1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZW1vdmFsLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0luc2VydGlvbi5sZW5ndGggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIENsb2NrJ3MgaW50ZXJuYWwgdGltZSBhbmQgYWxsIG9mIGl0cyBUaW1lciBFdmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGltZS5DbG9jayN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm5vdyA9IHRpbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FjdGl2ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2FjdGl2ZVtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5wYXVzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgVXNlIGRlbHRhIHRpbWUgdG8gaW5jcmVhc2UgZWxhcHNlZC5cclxuICAgICAgICAgICAgLy8gIEF2b2lkcyBuZWVkaW5nIHRvIGFkanVzdCBmb3IgcGF1c2UgLyByZXN1bWUuXHJcbiAgICAgICAgICAgIC8vICBBdXRvbWF0aWNhbGx5IHNtb290aGVkIGJ5IFRpbWVTdGVwIGNsYXNzLlxyXG4gICAgICAgICAgICAvLyAgSW4gdGVzdGluZyBhY2N1cmF0ZSB0byArLSAxbXMhXHJcbiAgICAgICAgICAgIGV2ZW50LmVsYXBzZWQgKz0gZGVsdGEgKiBldmVudC50aW1lU2NhbGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZWxhcHNlZCA+PSBldmVudC5kZWxheSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbWFpbmRlciA9IGV2ZW50LmVsYXBzZWQgLSBldmVudC5kZWxheTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgTGltaXQgaXQsIGluIGNhc2UgaXQncyBjaGVja2VkIGluIHRoZSBjYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZWxhcHNlZCA9IGV2ZW50LmRlbGF5O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBQcm9jZXNzIHRoZSBldmVudFxyXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5oYXNEaXNwYXRjaGVkICYmIGV2ZW50LmNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Lmhhc0Rpc3BhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmNhbGxiYWNrLmFwcGx5KGV2ZW50LmNhbGxiYWNrU2NvcGUsIGV2ZW50LmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5yZXBlYXRDb3VudCA+IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVwZWF0Q291bnQtLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZWxhcHNlZCA9IHJlbWFpbmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5oYXNEaXNwYXRjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwucHVzaChldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLkNsb2NrI3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fcGVuZGluZ0luc2VydGlvbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb25baV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2FjdGl2ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVtpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fcGVuZGluZ1JlbW92YWwubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nUmVtb3ZhbFtpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9hY3RpdmUubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nUmVtb3ZhbC5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb24ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy5wcmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbWUuQ2xvY2sjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdDbG9jaycsIENsb2NrLCAndGltZScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDbG9jaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/time/Clock.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/time/TimerEvent.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/time/TimerEvent.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Timer Event represents a delayed function call. It's managed by a Scene's {@link Clock} and will call its function after a set amount of time has passed. The Timer Event can optionally repeat - i.e. call its function multiple times before finishing, or loop indefinitely.\r\n *\r\n * Because it's managed by a Clock, a Timer Event is based on game time, will be affected by its Clock's time scale, and will pause if its Clock pauses.\r\n *\r\n * @class TimerEvent\r\n * @memberof Phaser.Time\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Time.TimerEventConfig} config - The configuration for the Timer Event, including its delay and callback.\r\n */\r\nvar TimerEvent = new Class({\r\n\r\n    initialize:\r\n\r\n    function TimerEvent (config)\r\n    {\r\n        /**\r\n         * The delay in ms at which this TimerEvent fires.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#delay\r\n         * @type {number}\r\n         * @default 0\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.delay = 0;\r\n\r\n        /**\r\n         * The total number of times this TimerEvent will repeat before finishing.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#repeat\r\n         * @type {number}\r\n         * @default 0\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.repeat = 0;\r\n\r\n        /**\r\n         * If repeating this contains the current repeat count.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#repeatCount\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.repeatCount = 0;\r\n\r\n        /**\r\n         * True if this TimerEvent loops, otherwise false.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#loop\r\n         * @type {boolean}\r\n         * @default false\r\n         * @readonly\r\n         * @since 3.0.0\r\n         */\r\n        this.loop = false;\r\n\r\n        /**\r\n         * The callback that will be called when the TimerEvent occurs.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#callback\r\n         * @type {function}\r\n         * @since 3.0.0\r\n         */\r\n        this.callback;\r\n\r\n        /**\r\n         * The scope in which the callback will be called.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#callbackScope\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbackScope;\r\n\r\n        /**\r\n         * Additional arguments to be passed to the callback.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#args\r\n         * @type {array}\r\n         * @since 3.0.0\r\n         */\r\n        this.args;\r\n\r\n        /**\r\n         * Scale the time causing this TimerEvent to update.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * Start this many MS into the elapsed (useful if you want a long duration with repeat, but for the first loop to fire quickly)\r\n         *\r\n         * @name Phaser.Time.TimerEvent#startAt\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.startAt = 0;\r\n\r\n        /**\r\n         * The time in milliseconds which has elapsed since the Timer Event's creation.\r\n         *\r\n         * This value is local for the Timer Event and is relative to its Clock. As such, it's influenced by the Clock's time scale and paused state, the Timer Event's initial {@link #startAt} property, and the Timer Event's {@link #timeScale} and {@link #paused} state.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#elapsed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.elapsed = 0;\r\n\r\n        /**\r\n         * Whether or not this timer is paused.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        /**\r\n         * Whether the Timer Event's function has been called.\r\n         *\r\n         * When the Timer Event fires, this property will be set to `true` before the callback function is invoked and will be reset immediately afterward if the Timer Event should repeat. The value of this property does not directly influence whether the Timer Event will be removed from its Clock, but can prevent it from firing.\r\n         *\r\n         * @name Phaser.Time.TimerEvent#hasDispatched\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.hasDispatched = false;\r\n\r\n        this.reset(config);\r\n    },\r\n\r\n    /**\r\n     * Completely reinitializes the Timer Event, regardless of its current state, according to a configuration object.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#reset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Time.TimerEventConfig} config - The new state for the Timer Event.\r\n     *\r\n     * @return {Phaser.Time.TimerEvent} This TimerEvent object.\r\n     */\r\n    reset: function (config)\r\n    {\r\n        this.delay = GetFastValue(config, 'delay', 0);\r\n\r\n        //  Can also be set to -1 for an infinite loop (same as setting loop: true)\r\n        this.repeat = GetFastValue(config, 'repeat', 0);\r\n\r\n        this.loop = GetFastValue(config, 'loop', false);\r\n\r\n        this.callback = GetFastValue(config, 'callback', undefined);\r\n\r\n        this.callbackScope = GetFastValue(config, 'callbackScope', this.callback);\r\n\r\n        this.args = GetFastValue(config, 'args', []);\r\n\r\n        this.timeScale = GetFastValue(config, 'timeScale', 1);\r\n\r\n        this.startAt = GetFastValue(config, 'startAt', 0);\r\n\r\n        this.paused = GetFastValue(config, 'paused', false);\r\n\r\n        this.elapsed = this.startAt;\r\n        this.hasDispatched = false;\r\n        this.repeatCount = (this.repeat === -1 || this.loop) ? 999999999999 : this.repeat;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the progress of the current iteration, not factoring in repeats.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#getProgress\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} A number between 0 and 1 representing the current progress.\r\n     */\r\n    getProgress: function ()\r\n    {\r\n        return (this.elapsed / this.delay);\r\n    },\r\n\r\n    /**\r\n     * Gets the progress of the timer overall, factoring in repeats.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#getOverallProgress\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The overall progress of the Timer Event, between 0 and 1.\r\n     */\r\n    getOverallProgress: function ()\r\n    {\r\n        if (this.repeat > 0)\r\n        {\r\n            var totalDuration = this.delay + (this.delay * this.repeat);\r\n            var totalElapsed = this.elapsed + (this.delay * (this.repeat - this.repeatCount));\r\n\r\n            return (totalElapsed / totalDuration);\r\n        }\r\n        else\r\n        {\r\n            return this.getProgress();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns the number of times this Timer Event will repeat before finishing.\r\n     *\r\n     * This should not be confused with the number of times the Timer Event will fire before finishing. A return value of 0 doesn't indicate that the Timer Event has finished running - it indicates that it will not repeat after the next time it fires.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#getRepeatCount\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} How many times the Timer Event will repeat.\r\n     */\r\n    getRepeatCount: function ()\r\n    {\r\n        return this.repeatCount;\r\n    },\r\n\r\n    /**\r\n     * Returns the local elapsed time for the current iteration of the Timer Event.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#getElapsed\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The local elapsed time in milliseconds.\r\n     */\r\n    getElapsed: function ()\r\n    {\r\n        return this.elapsed;\r\n    },\r\n\r\n    /**\r\n     * Returns the local elapsed time for the current iteration of the Timer Event in seconds.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#getElapsedSeconds\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The local elapsed time in seconds.\r\n     */\r\n    getElapsedSeconds: function ()\r\n    {\r\n        return this.elapsed * 0.001;\r\n    },\r\n\r\n    /**\r\n     * Forces the Timer Event to immediately expire, thus scheduling its removal in the next frame.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#remove\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [dispatchCallback=false] - If `true`, the function of the Timer Event will be called before its removal.\r\n     */\r\n    remove: function (dispatchCallback)\r\n    {\r\n        if (dispatchCallback === undefined) { dispatchCallback = false; }\r\n\r\n        this.elapsed = this.delay;\r\n\r\n        this.hasDispatched = !dispatchCallback;\r\n\r\n        this.repeatCount = 0;\r\n    },\r\n\r\n    /**\r\n     * Destroys all object references in the Timer Event, i.e. its callback, scope, and arguments.\r\n     *\r\n     * Normally, this method is only called by the Clock when it shuts down. As such, it doesn't stop the Timer Event. If called manually, the Timer Event will still be updated by the Clock, but it won't do anything when it fires.\r\n     *\r\n     * @method Phaser.Time.TimerEvent#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.callback = undefined;\r\n        this.callbackScope = undefined;\r\n        this.args = [];\r\n    }\r\n\r\n});\r\n\r\nmodule.exports = TimerEvent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aW1lL1RpbWVyRXZlbnQuanM/MzU3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyw0RkFBOEI7O0FBRXpEO0FBQ0E7QUFDQSxnRkFBZ0YsWUFBWTtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQ0FBbUM7QUFDOUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUxBQWlMLGVBQWUsa0NBQWtDLGlCQUFpQixNQUFNLGNBQWM7QUFDdlE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUNBQW1DO0FBQ2xEO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMEJBQTBCOztBQUV2RTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGltZS9UaW1lckV2ZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBUaW1lciBFdmVudCByZXByZXNlbnRzIGEgZGVsYXllZCBmdW5jdGlvbiBjYWxsLiBJdCdzIG1hbmFnZWQgYnkgYSBTY2VuZSdzIHtAbGluayBDbG9ja30gYW5kIHdpbGwgY2FsbCBpdHMgZnVuY3Rpb24gYWZ0ZXIgYSBzZXQgYW1vdW50IG9mIHRpbWUgaGFzIHBhc3NlZC4gVGhlIFRpbWVyIEV2ZW50IGNhbiBvcHRpb25hbGx5IHJlcGVhdCAtIGkuZS4gY2FsbCBpdHMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgYmVmb3JlIGZpbmlzaGluZywgb3IgbG9vcCBpbmRlZmluaXRlbHkuXHJcbiAqXHJcbiAqIEJlY2F1c2UgaXQncyBtYW5hZ2VkIGJ5IGEgQ2xvY2ssIGEgVGltZXIgRXZlbnQgaXMgYmFzZWQgb24gZ2FtZSB0aW1lLCB3aWxsIGJlIGFmZmVjdGVkIGJ5IGl0cyBDbG9jaydzIHRpbWUgc2NhbGUsIGFuZCB3aWxsIHBhdXNlIGlmIGl0cyBDbG9jayBwYXVzZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBUaW1lckV2ZW50XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVGltZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbWUuVGltZXJFdmVudENvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBUaW1lciBFdmVudCwgaW5jbHVkaW5nIGl0cyBkZWxheSBhbmQgY2FsbGJhY2suXHJcbiAqL1xyXG52YXIgVGltZXJFdmVudCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaW1lckV2ZW50IChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlbGF5IGluIG1zIGF0IHdoaWNoIHRoaXMgVGltZXJFdmVudCBmaXJlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjZGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB0aW1lcyB0aGlzIFRpbWVyRXZlbnQgd2lsbCByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjcmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXBlYXQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiByZXBlYXRpbmcgdGhpcyBjb250YWlucyB0aGUgY3VycmVudCByZXBlYXQgY291bnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGltZS5UaW1lckV2ZW50I3JlcGVhdENvdW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXBlYXRDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRydWUgaWYgdGhpcyBUaW1lckV2ZW50IGxvb3BzLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVGltZS5UaW1lckV2ZW50I2xvb3BcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBUaW1lckV2ZW50IG9jY3Vycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjY2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjaztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjY2FsbGJhY2tTY29wZVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja1Njb3BlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuVGltZXJFdmVudCNhcmdzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXJncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NhbGUgdGhlIHRpbWUgY2F1c2luZyB0aGlzIFRpbWVyRXZlbnQgdG8gdXBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuVGltZXJFdmVudCN0aW1lU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWVTY2FsZSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXJ0IHRoaXMgbWFueSBNUyBpbnRvIHRoZSBlbGFwc2VkICh1c2VmdWwgaWYgeW91IHdhbnQgYSBsb25nIGR1cmF0aW9uIHdpdGggcmVwZWF0LCBidXQgZm9yIHRoZSBmaXJzdCBsb29wIHRvIGZpcmUgcXVpY2tseSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjc3RhcnRBdFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RhcnRBdCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGljaCBoYXMgZWxhcHNlZCBzaW5jZSB0aGUgVGltZXIgRXZlbnQncyBjcmVhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbG9jYWwgZm9yIHRoZSBUaW1lciBFdmVudCBhbmQgaXMgcmVsYXRpdmUgdG8gaXRzIENsb2NrLiBBcyBzdWNoLCBpdCdzIGluZmx1ZW5jZWQgYnkgdGhlIENsb2NrJ3MgdGltZSBzY2FsZSBhbmQgcGF1c2VkIHN0YXRlLCB0aGUgVGltZXIgRXZlbnQncyBpbml0aWFsIHtAbGluayAjc3RhcnRBdH0gcHJvcGVydHksIGFuZCB0aGUgVGltZXIgRXZlbnQncyB7QGxpbmsgI3RpbWVTY2FsZX0gYW5kIHtAbGluayAjcGF1c2VkfSBzdGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjZWxhcHNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZWxhcHNlZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGltZXIgaXMgcGF1c2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlRpbWUuVGltZXJFdmVudCNwYXVzZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIFRpbWVyIEV2ZW50J3MgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogV2hlbiB0aGUgVGltZXIgRXZlbnQgZmlyZXMsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBzZXQgdG8gYHRydWVgIGJlZm9yZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2lsbCBiZSByZXNldCBpbW1lZGlhdGVseSBhZnRlcndhcmQgaWYgdGhlIFRpbWVyIEV2ZW50IHNob3VsZCByZXBlYXQuIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGRvZXMgbm90IGRpcmVjdGx5IGluZmx1ZW5jZSB3aGV0aGVyIHRoZSBUaW1lciBFdmVudCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgQ2xvY2ssIGJ1dCBjYW4gcHJldmVudCBpdCBmcm9tIGZpcmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjaGFzRGlzcGF0Y2hlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNEaXNwYXRjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoY29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wbGV0ZWx5IHJlaW5pdGlhbGl6ZXMgdGhlIFRpbWVyIEV2ZW50LCByZWdhcmRsZXNzIG9mIGl0cyBjdXJyZW50IHN0YXRlLCBhY2NvcmRpbmcgdG8gYSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlRpbWUuVGltZXJFdmVudENvbmZpZ30gY29uZmlnIC0gVGhlIG5ldyBzdGF0ZSBmb3IgdGhlIFRpbWVyIEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UaW1lLlRpbWVyRXZlbnR9IFRoaXMgVGltZXJFdmVudCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVsYXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVsYXknLCAwKTtcclxuXHJcbiAgICAgICAgLy8gIENhbiBhbHNvIGJlIHNldCB0byAtMSBmb3IgYW4gaW5maW5pdGUgbG9vcCAoc2FtZSBhcyBzZXR0aW5nIGxvb3A6IHRydWUpXHJcbiAgICAgICAgdGhpcy5yZXBlYXQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncmVwZWF0JywgMCk7XHJcblxyXG4gICAgICAgIHRoaXMubG9vcCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdsb29wJywgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrJywgdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja1Njb3BlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnLCB0aGlzLmNhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgdGhpcy5hcmdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FyZ3MnLCBbXSk7XHJcblxyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RpbWVTY2FsZScsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0QXQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3RhcnRBdCcsIDApO1xyXG5cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwYXVzZWQnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZWxhcHNlZCA9IHRoaXMuc3RhcnRBdDtcclxuICAgICAgICB0aGlzLmhhc0Rpc3BhdGNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlcGVhdENvdW50ID0gKHRoaXMucmVwZWF0ID09PSAtMSB8fCB0aGlzLmxvb3ApID8gOTk5OTk5OTk5OTk5IDogdGhpcy5yZXBlYXQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByb2dyZXNzIG9mIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiwgbm90IGZhY3RvcmluZyBpbiByZXBlYXRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlRpbWUuVGltZXJFdmVudCNnZXRQcm9ncmVzc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb2dyZXNzLlxyXG4gICAgICovXHJcbiAgICBnZXRQcm9ncmVzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZWxhcHNlZCAvIHRoaXMuZGVsYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByb2dyZXNzIG9mIHRoZSB0aW1lciBvdmVyYWxsLCBmYWN0b3JpbmcgaW4gcmVwZWF0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjZ2V0T3ZlcmFsbFByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHByb2dyZXNzIG9mIHRoZSBUaW1lciBFdmVudCwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICovXHJcbiAgICBnZXRPdmVyYWxsUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwZWF0ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbER1cmF0aW9uID0gdGhpcy5kZWxheSArICh0aGlzLmRlbGF5ICogdGhpcy5yZXBlYXQpO1xyXG4gICAgICAgICAgICB2YXIgdG90YWxFbGFwc2VkID0gdGhpcy5lbGFwc2VkICsgKHRoaXMuZGVsYXkgKiAodGhpcy5yZXBlYXQgLSB0aGlzLnJlcGVhdENvdW50KSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gKHRvdGFsRWxhcHNlZCAvIHRvdGFsRHVyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9ncmVzcygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBUaW1lciBFdmVudCB3aWxsIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIFRpbWVyIEV2ZW50IHdpbGwgZmlyZSBiZWZvcmUgZmluaXNoaW5nLiBBIHJldHVybiB2YWx1ZSBvZiAwIGRvZXNuJ3QgaW5kaWNhdGUgdGhhdCB0aGUgVGltZXIgRXZlbnQgaGFzIGZpbmlzaGVkIHJ1bm5pbmcgLSBpdCBpbmRpY2F0ZXMgdGhhdCBpdCB3aWxsIG5vdCByZXBlYXQgYWZ0ZXIgdGhlIG5leHQgdGltZSBpdCBmaXJlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjZ2V0UmVwZWF0Q291bnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gSG93IG1hbnkgdGltZXMgdGhlIFRpbWVyIEV2ZW50IHdpbGwgcmVwZWF0LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXBlYXRDb3VudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBlYXRDb3VudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCBlbGFwc2VkIHRpbWUgZm9yIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBvZiB0aGUgVGltZXIgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGltZS5UaW1lckV2ZW50I2dldEVsYXBzZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxvY2FsIGVsYXBzZWQgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGdldEVsYXBzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxhcHNlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCBlbGFwc2VkIHRpbWUgZm9yIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBvZiB0aGUgVGltZXIgRXZlbnQgaW4gc2Vjb25kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjZ2V0RWxhcHNlZFNlY29uZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxvY2FsIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXRFbGFwc2VkU2Vjb25kczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGFwc2VkICogMC4wMDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9yY2VzIHRoZSBUaW1lciBFdmVudCB0byBpbW1lZGlhdGVseSBleHBpcmUsIHRodXMgc2NoZWR1bGluZyBpdHMgcmVtb3ZhbCBpbiB0aGUgbmV4dCBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5UaW1lLlRpbWVyRXZlbnQjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwYXRjaENhbGxiYWNrPWZhbHNlXSAtIElmIGB0cnVlYCwgdGhlIGZ1bmN0aW9uIG9mIHRoZSBUaW1lciBFdmVudCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgaXRzIHJlbW92YWwuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKGRpc3BhdGNoQ2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpc3BhdGNoQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBkaXNwYXRjaENhbGxiYWNrID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdGhpcy5lbGFwc2VkID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgdGhpcy5oYXNEaXNwYXRjaGVkID0gIWRpc3BhdGNoQ2FsbGJhY2s7XHJcblxyXG4gICAgICAgIHRoaXMucmVwZWF0Q291bnQgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIGFsbCBvYmplY3QgcmVmZXJlbmNlcyBpbiB0aGUgVGltZXIgRXZlbnQsIGkuZS4gaXRzIGNhbGxiYWNrLCBzY29wZSwgYW5kIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBOb3JtYWxseSwgdGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgYnkgdGhlIENsb2NrIHdoZW4gaXQgc2h1dHMgZG93bi4gQXMgc3VjaCwgaXQgZG9lc24ndCBzdG9wIHRoZSBUaW1lciBFdmVudC4gSWYgY2FsbGVkIG1hbnVhbGx5LCB0aGUgVGltZXIgRXZlbnQgd2lsbCBzdGlsbCBiZSB1cGRhdGVkIGJ5IHRoZSBDbG9jaywgYnV0IGl0IHdvbid0IGRvIGFueXRoaW5nIHdoZW4gaXQgZmlyZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVGltZS5UaW1lckV2ZW50I2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja1Njb3BlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYXJncyA9IFtdO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVyRXZlbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/time/TimerEvent.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/time/index.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/time/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Time\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Clock: __webpack_require__(/*! ./Clock */ \"./node_modules/phaser/src/time/Clock.js\"),\r\n    TimerEvent: __webpack_require__(/*! ./TimerEvent */ \"./node_modules/phaser/src/time/TimerEvent.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90aW1lL2luZGV4LmpzP2VlM2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWM7O0FBRXRDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdGltZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlRpbWVcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBDbG9jazogcmVxdWlyZSgnLi9DbG9jaycpLFxyXG4gICAgVGltZXJFdmVudDogcmVxdWlyZSgnLi9UaW1lckV2ZW50JylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/time/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/Timeline.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/tweens/Timeline.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/tweens/events/index.js\");\r\nvar TweenBuilder = __webpack_require__(/*! ./builders/TweenBuilder */ \"./node_modules/phaser/src/tweens/builders/TweenBuilder.js\");\r\nvar TWEEN_CONST = __webpack_require__(/*! ./tween/const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Timeline combines multiple Tweens into one. Its overall behavior is otherwise similar to a single Tween.\r\n *\r\n * The Timeline updates all of its Tweens simultaneously. Its methods allow you to easily build a sequence\r\n * of Tweens (each one starting after the previous one) or run multiple Tweens at once during given parts of the Timeline.\r\n *\r\n * @class Timeline\r\n * @memberof Phaser.Tweens\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tweens.TweenManager} manager - The Tween Manager which owns this Timeline.\r\n */\r\nvar Timeline = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Timeline (manager)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * The Tween Manager which owns this Timeline.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#manager\r\n         * @type {Phaser.Tweens.TweenManager}\r\n         * @since 3.0.0\r\n         */\r\n        this.manager = manager;\r\n\r\n        /**\r\n         * A constant value which allows this Timeline to be easily identified as one.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#isTimeline\r\n         * @type {boolean}\r\n         * @default true\r\n         * @since 3.0.0\r\n         */\r\n        this.isTimeline = true;\r\n\r\n        /**\r\n         * An array of Tween objects, each containing a unique property and target being tweened.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#data\r\n         * @type {array}\r\n         * @default []\r\n         * @since 3.0.0\r\n         */\r\n        this.data = [];\r\n\r\n        /**\r\n         * The cached size of the data array.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#totalData\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalData = 0;\r\n\r\n        /**\r\n         * If true then duration, delay, etc values are all frame totals, rather than ms.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#useFrames\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.useFrames = false;\r\n\r\n        /**\r\n         * Scales the time applied to this Timeline. A value of 1 runs in real-time. A value of 0.5 runs 50% slower, and so on.\r\n         * Value isn't used when calculating total duration of the Timeline, it's a run-time delta adjustment only.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * Loop this Timeline? Can be -1 for an infinite loop, or an integer.\r\n         * When enabled it will play through ALL Tweens again (use Tween.repeat to loop a single tween)\r\n         *\r\n         * @name Phaser.Tweens.Timeline#loop\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loop = 0;\r\n\r\n        /**\r\n         * Time in ms/frames before this Timeline loops.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#loopDelay\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loopDelay = 0;\r\n\r\n        /**\r\n         * How many loops are left to run?\r\n         *\r\n         * @name Phaser.Tweens.Timeline#loopCounter\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loopCounter = 0;\r\n\r\n        /**\r\n         * Time in ms/frames before the 'onComplete' event fires. This never fires if loop = true (as it never completes)\r\n         *\r\n         * @name Phaser.Tweens.Timeline#completeDelay\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.completeDelay = 0;\r\n\r\n        /**\r\n         * Countdown timer value, as used by `loopDelay` and `completeDelay`.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#countdown\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.countdown = 0;\r\n\r\n        /**\r\n         * The current state of the Timeline.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#state\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.state = TWEEN_CONST.PENDING_ADD;\r\n\r\n        /**\r\n         * The state of the Timeline when it was paused (used by Resume)\r\n         *\r\n         * @name Phaser.Tweens.Timeline#_pausedState\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._pausedState = TWEEN_CONST.PENDING_ADD;\r\n\r\n        /**\r\n         * Does the Timeline start off paused? (if so it needs to be started with Timeline.play)\r\n         *\r\n         * @name Phaser.Tweens.Timeline#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        /**\r\n         * Elapsed time in ms/frames of this run through of the Timeline.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#elapsed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.elapsed = 0;\r\n\r\n        /**\r\n         * Total elapsed time in ms/frames of the entire Timeline, including looping.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#totalElapsed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalElapsed = 0;\r\n\r\n        /**\r\n         * Time in ms/frames for the whole Timeline to play through once, excluding loop amounts and loop delays.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#duration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * Value between 0 and 1. The amount of progress through the Timeline, _excluding loops_.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#progress\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Time in ms/frames for all Tweens in this Timeline to complete (including looping)\r\n         *\r\n         * @name Phaser.Tweens.Timeline#totalDuration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalDuration = 0;\r\n\r\n        /**\r\n         * Value between 0 and 1. The amount through the entire Timeline, including looping.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#totalProgress\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalProgress = 0;\r\n\r\n        /**\r\n         * An object containing the different Tween callback functions.\r\n         * \r\n         * You can either set these in the Tween config, or by calling the `Tween.setCallback` method.\r\n         * \r\n         * `onComplete` When the Timeline finishes playback fully or `Timeline.stop` is called. Never invoked if timeline is set to repeat infinitely.\r\n         * `onLoop` When a Timeline loops.\r\n         * `onStart` When the Timeline starts playing.\r\n         * `onUpdate` When a Timeline updates a child Tween.\r\n         * `onYoyo` When a Timeline starts a yoyo.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#callbacks\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbacks = {\r\n            onComplete: null,\r\n            onLoop: null,\r\n            onStart: null,\r\n            onUpdate: null,\r\n            onYoyo: null\r\n        };\r\n\r\n        /**\r\n         * The context in which all callbacks are invoked.\r\n         *\r\n         * @name Phaser.Tweens.Timeline#callbackScope\r\n         * @type {any}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbackScope;\r\n    },\r\n\r\n    /**\r\n     * Internal method that will emit a Timeline based Event and invoke the given callback.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#dispatchTimelineEvent\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.Event} event - The Event to be dispatched.\r\n     * @param {function} callback - The callback to be invoked. Can be `null` or `undefined` to skip invocation.\r\n     */\r\n    dispatchTimelineEvent: function (event, callback)\r\n    {\r\n        this.emit(event, this);\r\n\r\n        if (callback)\r\n        {\r\n            callback.func.apply(callback.scope, callback.params);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets the value of the time scale applied to this Timeline. A value of 1 runs in real-time.\r\n     * A value of 0.5 runs 50% slower, and so on.\r\n     * \r\n     * The value isn't used when calculating total duration of the tween, it's a run-time delta adjustment only.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#setTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The time scale value to set.\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    setTimeScale: function (value)\r\n    {\r\n        this.timeScale = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Gets the value of the time scale applied to this Timeline. A value of 1 runs in real-time.\r\n     * A value of 0.5 runs 50% slower, and so on.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#getTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The value of the time scale applied to this Timeline.\r\n     */\r\n    getTimeScale: function ()\r\n    {\r\n        return this.timeScale;\r\n    },\r\n\r\n    /**\r\n     * Check whether or not the Timeline is playing.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#isPlaying\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if this Timeline is active, otherwise `false`.\r\n     */\r\n    isPlaying: function ()\r\n    {\r\n        return (this.state === TWEEN_CONST.ACTIVE);\r\n    },\r\n\r\n    /**\r\n     * Creates a new Tween, based on the given Tween Config, and adds it to this Timeline.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(Phaser.Types.Tweens.TweenBuilderConfig|object)} config - The configuration object for the Tween.\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    add: function (config)\r\n    {\r\n        return this.queue(TweenBuilder(this, config));\r\n    },\r\n\r\n    /**\r\n     * Adds an existing Tween to this Timeline.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#queue\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to be added to this Timeline.\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    queue: function (tween)\r\n    {\r\n        if (!this.isPlaying())\r\n        {\r\n            tween.parent = this;\r\n            tween.parentIsTimeline = true;\r\n\r\n            this.data.push(tween);\r\n\r\n            this.totalData = this.data.length;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks whether a Tween has an offset value.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#hasOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to check.\r\n     *\r\n     * @return {boolean} `true` if the tween has a non-null offset.\r\n     */\r\n    hasOffset: function (tween)\r\n    {\r\n        return (tween.offset !== null);\r\n    },\r\n\r\n    /**\r\n     * Checks whether the offset value is a number or a directive that is relative to previous tweens.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#isOffsetAbsolute\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The offset value to be evaluated.\r\n     *\r\n     * @return {boolean} `true` if the result is a number, `false` if it is a directive like \" -= 1000\".\r\n     */\r\n    isOffsetAbsolute: function (value)\r\n    {\r\n        return (typeof(value) === 'number');\r\n    },\r\n\r\n    /**\r\n     * Checks if the offset is a relative value rather than an absolute one.\r\n     * If the value is just a number, this returns false.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#isOffsetRelative\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} value - The offset value to be evaluated.\r\n     *\r\n     * @return {boolean} `true` if the value is relative, i.e \" -= 1000\". If `false`, the offset is absolute.\r\n     */\r\n    isOffsetRelative: function (value)\r\n    {\r\n        var t = typeof(value);\r\n\r\n        if (t === 'string')\r\n        {\r\n            var op = value[0];\r\n\r\n            if (op === '-' || op === '+')\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Parses the relative offset value, returning a positive or negative number.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#getRelativeOffset\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} value - The relative offset, in the format of '-=500', for example. The first character determines whether it will be a positive or negative number. Spacing matters here.\r\n     * @param {number} base - The value to use as the offset.\r\n     *\r\n     * @return {number} The parsed offset value.\r\n     */\r\n    getRelativeOffset: function (value, base)\r\n    {\r\n        var op = value[0];\r\n        var num = parseFloat(value.substr(2));\r\n        var result = base;\r\n\r\n        switch (op)\r\n        {\r\n            case '+':\r\n                result += num;\r\n                break;\r\n\r\n            case '-':\r\n                result -= num;\r\n                break;\r\n        }\r\n\r\n        //  Cannot ever be < 0\r\n        return Math.max(0, result);\r\n    },\r\n\r\n    /**\r\n     * Calculates the total duration of the timeline.\r\n     * \r\n     * Computes all tween durations and returns the full duration of the timeline.\r\n     * \r\n     * The resulting number is stored in the timeline, not as a return value.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#calcDuration\r\n     * @since 3.0.0\r\n     */\r\n    calcDuration: function ()\r\n    {\r\n        var prevEnd = 0;\r\n        var totalDuration = 0;\r\n        var offsetDuration = 0;\r\n\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tween = this.data[i];\r\n\r\n            tween.init();\r\n\r\n            if (this.hasOffset(tween))\r\n            {\r\n                if (this.isOffsetAbsolute(tween.offset))\r\n                {\r\n                    //  An actual number, so it defines the start point from the beginning of the timeline\r\n                    tween.calculatedOffset = tween.offset;\r\n\r\n                    if (tween.offset === 0)\r\n                    {\r\n                        offsetDuration = 0;\r\n                    }\r\n                }\r\n                else if (this.isOffsetRelative(tween.offset))\r\n                {\r\n                    //  A relative offset (i.e. '-=1000', so starts at 'offset' ms relative to the PREVIOUS Tweens ending time)\r\n                    tween.calculatedOffset = this.getRelativeOffset(tween.offset, prevEnd);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //  Sequential\r\n                tween.calculatedOffset = offsetDuration;\r\n            }\r\n\r\n            prevEnd = tween.totalDuration + tween.calculatedOffset;\r\n\r\n            totalDuration += tween.totalDuration;\r\n            offsetDuration += tween.totalDuration;\r\n        }\r\n\r\n        //  Excludes loop values\r\n        this.duration = totalDuration;\r\n\r\n        this.loopCounter = (this.loop === -1) ? 999999999999 : this.loop;\r\n\r\n        if (this.loopCounter > 0)\r\n        {\r\n            this.totalDuration = this.duration + this.completeDelay + ((this.duration + this.loopDelay) * this.loopCounter);\r\n        }\r\n        else\r\n        {\r\n            this.totalDuration = this.duration + this.completeDelay;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Initializes the timeline, which means all Tweens get their init() called, and the total duration will be computed.\r\n     * Returns a boolean indicating whether the timeline is auto-started or not.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#init\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Timeline is started. `false` if it is paused.\r\n     */\r\n    init: function ()\r\n    {\r\n        this.calcDuration();\r\n\r\n        this.progress = 0;\r\n        this.totalProgress = 0;\r\n\r\n        if (this.paused)\r\n        {\r\n            this.state = TWEEN_CONST.PAUSED;\r\n\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            return true;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resets all of the timeline's tweens back to their initial states.\r\n     * The boolean parameter indicates whether tweens that are looping should reset as well, or not.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#resetTweens\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} resetFromLoop - If `true`, resets all looping tweens to their initial values.\r\n     */\r\n    resetTweens: function (resetFromLoop)\r\n    {\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tween = this.data[i];\r\n\r\n            tween.play(resetFromLoop);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Sets a callback for the Timeline.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#setCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} type - The internal type of callback to set.\r\n     * @param {function} callback - Timeline allows multiple tweens to be linked together to create a streaming sequence.\r\n     * @param {array} [params] - The parameters to pass to the callback.\r\n     * @param {object} [scope] - The context scope of the callback.\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    setCallback: function (type, callback, params, scope)\r\n    {\r\n        if (Timeline.TYPES.indexOf(type) !== -1)\r\n        {\r\n            this.callbacks[type] = { func: callback, scope: scope, params: params };\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passed a Tween to the Tween Manager and requests it be made active.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#makeActive\r\n     * @since 3.3.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The tween object to make active.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} The Timeline's Tween Manager reference.\r\n     */\r\n    makeActive: function (tween)\r\n    {\r\n        return this.manager.makeActive(tween);\r\n    },\r\n\r\n    /**\r\n     * Starts playing the Timeline.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#play\r\n     * @fires Phaser.Tweens.Events#TIMELINE_START\r\n     * @since 3.0.0\r\n     */\r\n    play: function ()\r\n    {\r\n        if (this.state === TWEEN_CONST.ACTIVE)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (this.paused)\r\n        {\r\n            this.paused = false;\r\n\r\n            this.manager.makeActive(this);\r\n\r\n            return;\r\n        }\r\n        else\r\n        {\r\n            this.resetTweens(false);\r\n\r\n            this.state = TWEEN_CONST.ACTIVE;\r\n        }\r\n\r\n        this.dispatchTimelineEvent(Events.TIMELINE_START, this.callbacks.onStart);\r\n    },\r\n\r\n    /**\r\n     * Updates the Timeline's `state` and fires callbacks and events.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#nextState\r\n     * @fires Phaser.Tweens.Events#TIMELINE_COMPLETE\r\n     * @fires Phaser.Tweens.Events#TIMELINE_LOOP\r\n     * @since 3.0.0\r\n     *\r\n     * @see Phaser.Tweens.Timeline#update\r\n     */\r\n    nextState: function ()\r\n    {\r\n        if (this.loopCounter > 0)\r\n        {\r\n            //  Reset the elapsed time\r\n            this.elapsed = 0;\r\n            this.progress = 0;\r\n\r\n            this.loopCounter--;\r\n\r\n            this.resetTweens(true);\r\n\r\n            if (this.loopDelay > 0)\r\n            {\r\n                this.countdown = this.loopDelay;\r\n\r\n                this.state = TWEEN_CONST.LOOP_DELAY;\r\n            }\r\n            else\r\n            {\r\n                this.state = TWEEN_CONST.ACTIVE;\r\n\r\n                this.dispatchTimelineEvent(Events.TIMELINE_LOOP, this.callbacks.onLoop);\r\n            }\r\n        }\r\n        else if (this.completeDelay > 0)\r\n        {\r\n            this.state = TWEEN_CONST.COMPLETE_DELAY;\r\n\r\n            this.countdown = this.completeDelay;\r\n        }\r\n        else\r\n        {\r\n            this.state = TWEEN_CONST.PENDING_REMOVE;\r\n\r\n            this.dispatchTimelineEvent(Events.TIMELINE_COMPLETE, this.callbacks.onComplete);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns 'true' if this Timeline has finished and should be removed from the Tween Manager.\r\n     * Otherwise, returns false.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#update\r\n     * @fires Phaser.Tweens.Events#TIMELINE_COMPLETE\r\n     * @fires Phaser.Tweens.Events#TIMELINE_UPDATE\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} timestamp - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     *\r\n     * @return {boolean} Returns `true` if this Timeline has finished and should be removed from the Tween Manager.\r\n     */\r\n    update: function (timestamp, delta)\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (this.useFrames)\r\n        {\r\n            delta = 1 * this.manager.timeScale;\r\n        }\r\n\r\n        delta *= this.timeScale;\r\n\r\n        this.elapsed += delta;\r\n        this.progress = Math.min(this.elapsed / this.duration, 1);\r\n\r\n        this.totalElapsed += delta;\r\n        this.totalProgress = Math.min(this.totalElapsed / this.totalDuration, 1);\r\n\r\n        switch (this.state)\r\n        {\r\n            case TWEEN_CONST.ACTIVE:\r\n\r\n                var stillRunning = this.totalData;\r\n\r\n                for (var i = 0; i < this.totalData; i++)\r\n                {\r\n                    var tween = this.data[i];\r\n\r\n                    if (tween.update(timestamp, delta))\r\n                    {\r\n                        stillRunning--;\r\n                    }\r\n                }\r\n\r\n                this.dispatchTimelineEvent(Events.TIMELINE_UPDATE, this.callbacks.onUpdate);\r\n\r\n                //  Anything still running? If not, we're done\r\n                if (stillRunning === 0)\r\n                {\r\n                    this.nextState();\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.LOOP_DELAY:\r\n\r\n                this.countdown -= delta;\r\n\r\n                if (this.countdown <= 0)\r\n                {\r\n                    this.state = TWEEN_CONST.ACTIVE;\r\n\r\n                    this.dispatchTimelineEvent(Events.TIMELINE_LOOP, this.callbacks.onLoop);\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.COMPLETE_DELAY:\r\n\r\n                this.countdown -= delta;\r\n\r\n                if (this.countdown <= 0)\r\n                {\r\n                    this.state = TWEEN_CONST.PENDING_REMOVE;\r\n\r\n                    this.dispatchTimelineEvent(Events.TIMELINE_COMPLETE, this.callbacks.onComplete);\r\n                }\r\n\r\n                break;\r\n        }\r\n\r\n        return (this.state === TWEEN_CONST.PENDING_REMOVE);\r\n    },\r\n\r\n    /**\r\n     * Stops the Timeline immediately, whatever stage of progress it is at and flags it for removal by the TweenManager.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#stop\r\n     * @since 3.0.0\r\n     */\r\n    stop: function ()\r\n    {\r\n        this.state = TWEEN_CONST.PENDING_REMOVE;\r\n    },\r\n\r\n    /**\r\n     * Pauses the Timeline, retaining its internal state.\r\n     * \r\n     * Calling this on a Timeline that is already paused has no effect and fires no event.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#pause\r\n     * @fires Phaser.Tweens.Events#TIMELINE_PAUSE\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    pause: function ()\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            return;\r\n        }\r\n\r\n        this.paused = true;\r\n\r\n        this._pausedState = this.state;\r\n\r\n        this.state = TWEEN_CONST.PAUSED;\r\n\r\n        this.emit(Events.TIMELINE_PAUSE, this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes a paused Timeline from where it was when it was paused.\r\n     * \r\n     * Calling this on a Timeline that isn't paused has no effect and fires no event.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#resume\r\n     * @fires Phaser.Tweens.Events#TIMELINE_RESUME\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Timeline object.\r\n     */\r\n    resume: function ()\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            this.paused = false;\r\n\r\n            this.state = this._pausedState;\r\n\r\n            this.emit(Events.TIMELINE_RESUME, this);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if any of the Tweens in this Timeline as operating on the target object.\r\n     * \r\n     * Returns `false` if no Tweens operate on the target object.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#hasTarget\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} target - The target to check all Tweens against.\r\n     *\r\n     * @return {boolean} `true` if there is at least a single Tween that operates on the target object, otherwise `false`.\r\n     */\r\n    hasTarget: function (target)\r\n    {\r\n        for (var i = 0; i < this.data.length; i++)\r\n        {\r\n            if (this.data[i].hasTarget(target))\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Stops all the Tweens in the Timeline immediately, whatever stage of progress they are at and flags\r\n     * them for removal by the TweenManager.\r\n     *\r\n     * @method Phaser.Tweens.Timeline#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        for (var i = 0; i < this.data.length; i++)\r\n        {\r\n            this.data[i].stop();\r\n        }\r\n    }\r\n\r\n});\r\n\r\nTimeline.TYPES = [ 'onStart', 'onUpdate', 'onLoop', 'onComplete', 'onYoyo' ];\r\n\r\nmodule.exports = Timeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvVGltZWxpbmUuanM/YjRmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsa0VBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsMEZBQXlCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLHNFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QyxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnREFBZ0Q7QUFDL0Q7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixlQUFlLE1BQU07QUFDckIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtCQUErQixvQkFBb0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL1RpbWVsaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIFR3ZWVuQnVpbGRlciA9IHJlcXVpcmUoJy4vYnVpbGRlcnMvVHdlZW5CdWlsZGVyJyk7XHJcbnZhciBUV0VFTl9DT05TVCA9IHJlcXVpcmUoJy4vdHdlZW4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGltZWxpbmUgY29tYmluZXMgbXVsdGlwbGUgVHdlZW5zIGludG8gb25lLiBJdHMgb3ZlcmFsbCBiZWhhdmlvciBpcyBvdGhlcndpc2Ugc2ltaWxhciB0byBhIHNpbmdsZSBUd2Vlbi5cclxuICpcclxuICogVGhlIFRpbWVsaW5lIHVwZGF0ZXMgYWxsIG9mIGl0cyBUd2VlbnMgc2ltdWx0YW5lb3VzbHkuIEl0cyBtZXRob2RzIGFsbG93IHlvdSB0byBlYXNpbHkgYnVpbGQgYSBzZXF1ZW5jZVxyXG4gKiBvZiBUd2VlbnMgKGVhY2ggb25lIHN0YXJ0aW5nIGFmdGVyIHRoZSBwcmV2aW91cyBvbmUpIG9yIHJ1biBtdWx0aXBsZSBUd2VlbnMgYXQgb25jZSBkdXJpbmcgZ2l2ZW4gcGFydHMgb2YgdGhlIFRpbWVsaW5lLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGltZWxpbmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Ud2VlbnNcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfSBtYW5hZ2VyIC0gVGhlIFR3ZWVuIE1hbmFnZXIgd2hpY2ggb3ducyB0aGlzIFRpbWVsaW5lLlxyXG4gKi9cclxudmFyIFRpbWVsaW5lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaW1lbGluZSAobWFuYWdlcilcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFR3ZWVuIE1hbmFnZXIgd2hpY2ggb3ducyB0aGlzIFRpbWVsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgY29uc3RhbnQgdmFsdWUgd2hpY2ggYWxsb3dzIHRoaXMgVGltZWxpbmUgdG8gYmUgZWFzaWx5IGlkZW50aWZpZWQgYXMgb25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNpc1RpbWVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNUaW1lbGluZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFR3ZWVuIG9iamVjdHMsIGVhY2ggY29udGFpbmluZyBhIHVuaXF1ZSBwcm9wZXJ0eSBhbmQgdGFyZ2V0IGJlaW5nIHR3ZWVuZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhY2hlZCBzaXplIG9mIHRoZSBkYXRhIGFycmF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSN0b3RhbERhdGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRGF0YSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRydWUgdGhlbiBkdXJhdGlvbiwgZGVsYXksIGV0YyB2YWx1ZXMgYXJlIGFsbCBmcmFtZSB0b3RhbHMsIHJhdGhlciB0aGFuIG1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSN1c2VGcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXNlRnJhbWVzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjYWxlcyB0aGUgdGltZSBhcHBsaWVkIHRvIHRoaXMgVGltZWxpbmUuIEEgdmFsdWUgb2YgMSBydW5zIGluIHJlYWwtdGltZS4gQSB2YWx1ZSBvZiAwLjUgcnVucyA1MCUgc2xvd2VyLCBhbmQgc28gb24uXHJcbiAgICAgICAgICogVmFsdWUgaXNuJ3QgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSBUaW1lbGluZSwgaXQncyBhIHJ1bi10aW1lIGRlbHRhIGFkanVzdG1lbnQgb25seS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjdGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMb29wIHRoaXMgVGltZWxpbmU/IENhbiBiZSAtMSBmb3IgYW4gaW5maW5pdGUgbG9vcCwgb3IgYW4gaW50ZWdlci5cclxuICAgICAgICAgKiBXaGVuIGVuYWJsZWQgaXQgd2lsbCBwbGF5IHRocm91Z2ggQUxMIFR3ZWVucyBhZ2FpbiAodXNlIFR3ZWVuLnJlcGVhdCB0byBsb29wIGEgc2luZ2xlIHR3ZWVuKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNsb29wXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb29wID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSBpbiBtcy9mcmFtZXMgYmVmb3JlIHRoaXMgVGltZWxpbmUgbG9vcHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2xvb3BEZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9vcERlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG1hbnkgbG9vcHMgYXJlIGxlZnQgdG8gcnVuP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNsb29wQ291bnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9vcENvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGluIG1zL2ZyYW1lcyBiZWZvcmUgdGhlICdvbkNvbXBsZXRlJyBldmVudCBmaXJlcy4gVGhpcyBuZXZlciBmaXJlcyBpZiBsb29wID0gdHJ1ZSAoYXMgaXQgbmV2ZXIgY29tcGxldGVzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNjb21wbGV0ZURlbGF5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZURlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ291bnRkb3duIHRpbWVyIHZhbHVlLCBhcyB1c2VkIGJ5IGBsb29wRGVsYXlgIGFuZCBgY29tcGxldGVEZWxheWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2NvdW50ZG93blxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY291bnRkb3duID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFRpbWVsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNzdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUV0VFTl9DT05TVC5QRU5ESU5HX0FERDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0YXRlIG9mIHRoZSBUaW1lbGluZSB3aGVuIGl0IHdhcyBwYXVzZWQgKHVzZWQgYnkgUmVzdW1lKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNfcGF1c2VkU3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BhdXNlZFN0YXRlID0gVFdFRU5fQ09OU1QuUEVORElOR19BREQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIFRpbWVsaW5lIHN0YXJ0IG9mZiBwYXVzZWQ/IChpZiBzbyBpdCBuZWVkcyB0byBiZSBzdGFydGVkIHdpdGggVGltZWxpbmUucGxheSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjcGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFbGFwc2VkIHRpbWUgaW4gbXMvZnJhbWVzIG9mIHRoaXMgcnVuIHRocm91Z2ggb2YgdGhlIFRpbWVsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNlbGFwc2VkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVG90YWwgZWxhcHNlZCB0aW1lIGluIG1zL2ZyYW1lcyBvZiB0aGUgZW50aXJlIFRpbWVsaW5lLCBpbmNsdWRpbmcgbG9vcGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjdG90YWxFbGFwc2VkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbEVsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGluIG1zL2ZyYW1lcyBmb3IgdGhlIHdob2xlIFRpbWVsaW5lIHRvIHBsYXkgdGhyb3VnaCBvbmNlLCBleGNsdWRpbmcgbG9vcCBhbW91bnRzIGFuZCBsb29wIGRlbGF5cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzIHRocm91Z2ggdGhlIFRpbWVsaW5lLCBfZXhjbHVkaW5nIGxvb3BzXy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjcHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSBpbiBtcy9mcmFtZXMgZm9yIGFsbCBUd2VlbnMgaW4gdGhpcyBUaW1lbGluZSB0byBjb21wbGV0ZSAoaW5jbHVkaW5nIGxvb3BpbmcpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3RvdGFsRHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEuIFRoZSBhbW91bnQgdGhyb3VnaCB0aGUgZW50aXJlIFRpbWVsaW5lLCBpbmNsdWRpbmcgbG9vcGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjdG90YWxQcm9ncmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG90YWxQcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkaWZmZXJlbnQgVHdlZW4gY2FsbGJhY2sgZnVuY3Rpb25zLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFlvdSBjYW4gZWl0aGVyIHNldCB0aGVzZSBpbiB0aGUgVHdlZW4gY29uZmlnLCBvciBieSBjYWxsaW5nIHRoZSBgVHdlZW4uc2V0Q2FsbGJhY2tgIG1ldGhvZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBgb25Db21wbGV0ZWAgV2hlbiB0aGUgVGltZWxpbmUgZmluaXNoZXMgcGxheWJhY2sgZnVsbHkgb3IgYFRpbWVsaW5lLnN0b3BgIGlzIGNhbGxlZC4gTmV2ZXIgaW52b2tlZCBpZiB0aW1lbGluZSBpcyBzZXQgdG8gcmVwZWF0IGluZmluaXRlbHkuXHJcbiAgICAgICAgICogYG9uTG9vcGAgV2hlbiBhIFRpbWVsaW5lIGxvb3BzLlxyXG4gICAgICAgICAqIGBvblN0YXJ0YCBXaGVuIHRoZSBUaW1lbGluZSBzdGFydHMgcGxheWluZy5cclxuICAgICAgICAgKiBgb25VcGRhdGVgIFdoZW4gYSBUaW1lbGluZSB1cGRhdGVzIGEgY2hpbGQgVHdlZW4uXHJcbiAgICAgICAgICogYG9uWW95b2AgV2hlbiBhIFRpbWVsaW5lIHN0YXJ0cyBhIHlveW8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2NhbGxiYWNrc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIG9uQ29tcGxldGU6IG51bGwsXHJcbiAgICAgICAgICAgIG9uTG9vcDogbnVsbCxcclxuICAgICAgICAgICAgb25TdGFydDogbnVsbCxcclxuICAgICAgICAgICAgb25VcGRhdGU6IG51bGwsXHJcbiAgICAgICAgICAgIG9uWW95bzogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb250ZXh0IGluIHdoaWNoIGFsbCBjYWxsYmFja3MgYXJlIGludm9rZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2NhbGxiYWNrU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tTY29wZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB3aWxsIGVtaXQgYSBUaW1lbGluZSBiYXNlZCBFdmVudCBhbmQgaW52b2tlIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjZGlzcGF0Y2hUaW1lbGluZUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLkV2ZW50fSBldmVudCAtIFRoZSBFdmVudCB0byBiZSBkaXNwYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGludm9jYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoVGltZWxpbmVFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVtaXQoZXZlbnQsIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5mdW5jLmFwcGx5KGNhbGxiYWNrLnNjb3BlLCBjYWxsYmFjay5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdGltZSBzY2FsZSBhcHBsaWVkIHRvIHRoaXMgVGltZWxpbmUuIEEgdmFsdWUgb2YgMSBydW5zIGluIHJlYWwtdGltZS5cclxuICAgICAqIEEgdmFsdWUgb2YgMC41IHJ1bnMgNTAlIHNsb3dlciwgYW5kIHNvIG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdmFsdWUgaXNuJ3QgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSB0d2VlbiwgaXQncyBhIHJ1bi10aW1lIGRlbHRhIGFkanVzdG1lbnQgb25seS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjc2V0VGltZVNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdGltZSBzY2FsZSB2YWx1ZSB0byBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaW1lbGluZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbWVTY2FsZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSB0aW1lIHNjYWxlIGFwcGxpZWQgdG8gdGhpcyBUaW1lbGluZS4gQSB2YWx1ZSBvZiAxIHJ1bnMgaW4gcmVhbC10aW1lLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwLjUgcnVucyA1MCUgc2xvd2VyLCBhbmQgc28gb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2dldFRpbWVTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmFsdWUgb2YgdGhlIHRpbWUgc2NhbGUgYXBwbGllZCB0byB0aGlzIFRpbWVsaW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRUaW1lU2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZVNjYWxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBUaW1lbGluZSBpcyBwbGF5aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNpc1BsYXlpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIFRpbWVsaW5lIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzUGxheWluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IFRXRUVOX0NPTlNULkFDVElWRSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUd2VlbiwgYmFzZWQgb24gdGhlIGdpdmVuIFR3ZWVuIENvbmZpZywgYW5kIGFkZHMgaXQgdG8gdGhpcyBUaW1lbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuQnVpbGRlckNvbmZpZ3xvYmplY3QpfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBUd2Vlbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRpbWVsaW5lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKFR3ZWVuQnVpbGRlcih0aGlzLCBjb25maWcpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGV4aXN0aW5nIFR3ZWVuIHRvIHRoaXMgVGltZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3F1ZXVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW59IHR3ZWVuIC0gVGhlIFR3ZWVuIHRvIGJlIGFkZGVkIHRvIHRoaXMgVGltZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaW1lbGluZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHF1ZXVlOiBmdW5jdGlvbiAodHdlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGxheWluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHdlZW4ucGFyZW50ID0gdGhpcztcclxuICAgICAgICAgICAgdHdlZW4ucGFyZW50SXNUaW1lbGluZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGEucHVzaCh0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRvdGFsRGF0YSA9IHRoaXMuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhIFR3ZWVuIGhhcyBhbiBvZmZzZXQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2hhc09mZnNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSB0d2VlbiAtIFRoZSBUd2VlbiB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3ZWVuIGhhcyBhIG5vbi1udWxsIG9mZnNldC5cclxuICAgICAqL1xyXG4gICAgaGFzT2Zmc2V0OiBmdW5jdGlvbiAodHdlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0d2Vlbi5vZmZzZXQgIT09IG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBvZmZzZXQgdmFsdWUgaXMgYSBudW1iZXIgb3IgYSBkaXJlY3RpdmUgdGhhdCBpcyByZWxhdGl2ZSB0byBwcmV2aW91cyB0d2VlbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2lzT2Zmc2V0QWJzb2x1dGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBvZmZzZXQgdmFsdWUgdG8gYmUgZXZhbHVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyLCBgZmFsc2VgIGlmIGl0IGlzIGEgZGlyZWN0aXZlIGxpa2UgXCIgLT0gMTAwMFwiLlxyXG4gICAgICovXHJcbiAgICBpc09mZnNldEFic29sdXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0eXBlb2YodmFsdWUpID09PSAnbnVtYmVyJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBvZmZzZXQgaXMgYSByZWxhdGl2ZSB2YWx1ZSByYXRoZXIgdGhhbiBhbiBhYnNvbHV0ZSBvbmUuXHJcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMganVzdCBhIG51bWJlciwgdGhpcyByZXR1cm5zIGZhbHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNpc09mZnNldFJlbGF0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgb2Zmc2V0IHZhbHVlIHRvIGJlIGV2YWx1YXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIHJlbGF0aXZlLCBpLmUgXCIgLT0gMTAwMFwiLiBJZiBgZmFsc2VgLCB0aGUgb2Zmc2V0IGlzIGFic29sdXRlLlxyXG4gICAgICovXHJcbiAgICBpc09mZnNldFJlbGF0aXZlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3AgPSB2YWx1ZVswXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcCA9PT0gJy0nIHx8IG9wID09PSAnKycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIHRoZSByZWxhdGl2ZSBvZmZzZXQgdmFsdWUsIHJldHVybmluZyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjZ2V0UmVsYXRpdmVPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSByZWxhdGl2ZSBvZmZzZXQsIGluIHRoZSBmb3JtYXQgb2YgJy09NTAwJywgZm9yIGV4YW1wbGUuIFRoZSBmaXJzdCBjaGFyYWN0ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IHdpbGwgYmUgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBudW1iZXIuIFNwYWNpbmcgbWF0dGVycyBoZXJlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJhc2UgLSBUaGUgdmFsdWUgdG8gdXNlIGFzIHRoZSBvZmZzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgcGFyc2VkIG9mZnNldCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVsYXRpdmVPZmZzZXQ6IGZ1bmN0aW9uICh2YWx1ZSwgYmFzZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgb3AgPSB2YWx1ZVswXTtcclxuICAgICAgICB2YXIgbnVtID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMikpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBiYXNlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSAnKyc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gbnVtO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAtPSBudW07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBDYW5ub3QgZXZlciBiZSA8IDBcclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgcmVzdWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgdGltZWxpbmUuXHJcbiAgICAgKiBcclxuICAgICAqIENvbXB1dGVzIGFsbCB0d2VlbiBkdXJhdGlvbnMgYW5kIHJldHVybnMgdGhlIGZ1bGwgZHVyYXRpb24gb2YgdGhlIHRpbWVsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVzdWx0aW5nIG51bWJlciBpcyBzdG9yZWQgaW4gdGhlIHRpbWVsaW5lLCBub3QgYXMgYSByZXR1cm4gdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2NhbGNEdXJhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNhbGNEdXJhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcHJldkVuZCA9IDA7XHJcbiAgICAgICAgdmFyIHRvdGFsRHVyYXRpb24gPSAwO1xyXG4gICAgICAgIHZhciBvZmZzZXREdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0d2VlbiA9IHRoaXMuZGF0YVtpXTtcclxuXHJcbiAgICAgICAgICAgIHR3ZWVuLmluaXQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc09mZnNldCh0d2VlbikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT2Zmc2V0QWJzb2x1dGUodHdlZW4ub2Zmc2V0KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgQW4gYWN0dWFsIG51bWJlciwgc28gaXQgZGVmaW5lcyB0aGUgc3RhcnQgcG9pbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aW1lbGluZVxyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuLmNhbGN1bGF0ZWRPZmZzZXQgPSB0d2Vlbi5vZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0d2Vlbi5vZmZzZXQgPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXREdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc09mZnNldFJlbGF0aXZlKHR3ZWVuLm9mZnNldCkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIEEgcmVsYXRpdmUgb2Zmc2V0IChpLmUuICctPTEwMDAnLCBzbyBzdGFydHMgYXQgJ29mZnNldCcgbXMgcmVsYXRpdmUgdG8gdGhlIFBSRVZJT1VTIFR3ZWVucyBlbmRpbmcgdGltZSlcclxuICAgICAgICAgICAgICAgICAgICB0d2Vlbi5jYWxjdWxhdGVkT2Zmc2V0ID0gdGhpcy5nZXRSZWxhdGl2ZU9mZnNldCh0d2Vlbi5vZmZzZXQsIHByZXZFbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFNlcXVlbnRpYWxcclxuICAgICAgICAgICAgICAgIHR3ZWVuLmNhbGN1bGF0ZWRPZmZzZXQgPSBvZmZzZXREdXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJldkVuZCA9IHR3ZWVuLnRvdGFsRHVyYXRpb24gKyB0d2Vlbi5jYWxjdWxhdGVkT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgdG90YWxEdXJhdGlvbiArPSB0d2Vlbi50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgICAgICBvZmZzZXREdXJhdGlvbiArPSB0d2Vlbi50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEV4Y2x1ZGVzIGxvb3AgdmFsdWVzXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgIHRoaXMubG9vcENvdW50ZXIgPSAodGhpcy5sb29wID09PSAtMSkgPyA5OTk5OTk5OTk5OTkgOiB0aGlzLmxvb3A7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvb3BDb3VudGVyID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxEdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24gKyB0aGlzLmNvbXBsZXRlRGVsYXkgKyAoKHRoaXMuZHVyYXRpb24gKyB0aGlzLmxvb3BEZWxheSkgKiB0aGlzLmxvb3BDb3VudGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbER1cmF0aW9uID0gdGhpcy5kdXJhdGlvbiArIHRoaXMuY29tcGxldGVEZWxheTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIHRpbWVsaW5lLCB3aGljaCBtZWFucyBhbGwgVHdlZW5zIGdldCB0aGVpciBpbml0KCkgY2FsbGVkLCBhbmQgdGhlIHRvdGFsIGR1cmF0aW9uIHdpbGwgYmUgY29tcHV0ZWQuXHJcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRpbWVsaW5lIGlzIGF1dG8tc3RhcnRlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI2luaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgVGltZWxpbmUgaXMgc3RhcnRlZC4gYGZhbHNlYCBpZiBpdCBpcyBwYXVzZWQuXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYWxjRHVyYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbFByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBBVVNFRDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBhbGwgb2YgdGhlIHRpbWVsaW5lJ3MgdHdlZW5zIGJhY2sgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZXMuXHJcbiAgICAgKiBUaGUgYm9vbGVhbiBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgdHdlZW5zIHRoYXQgYXJlIGxvb3Bpbmcgc2hvdWxkIHJlc2V0IGFzIHdlbGwsIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjcmVzZXRUd2VlbnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXRGcm9tTG9vcCAtIElmIGB0cnVlYCwgcmVzZXRzIGFsbCBsb29waW5nIHR3ZWVucyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgcmVzZXRUd2VlbnM6IGZ1bmN0aW9uIChyZXNldEZyb21Mb29wKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0d2VlbiA9IHRoaXMuZGF0YVtpXTtcclxuXHJcbiAgICAgICAgICAgIHR3ZWVuLnBsYXkocmVzZXRGcm9tTG9vcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBjYWxsYmFjayBmb3IgdGhlIFRpbWVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNzZXRDYWxsYmFja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgaW50ZXJuYWwgdHlwZSBvZiBjYWxsYmFjayB0byBzZXQuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRpbWVsaW5lIGFsbG93cyBtdWx0aXBsZSB0d2VlbnMgdG8gYmUgbGlua2VkIHRvZ2V0aGVyIHRvIGNyZWF0ZSBhIHN0cmVhbWluZyBzZXF1ZW5jZS5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtwYXJhbXNdIC0gVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3Njb3BlXSAtIFRoZSBjb250ZXh0IHNjb3BlIG9mIHRoZSBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRpbWVsaW5lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2FsbGJhY2s6IGZ1bmN0aW9uICh0eXBlLCBjYWxsYmFjaywgcGFyYW1zLCBzY29wZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoVGltZWxpbmUuVFlQRVMuaW5kZXhPZih0eXBlKSAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1t0eXBlXSA9IHsgZnVuYzogY2FsbGJhY2ssIHNjb3BlOiBzY29wZSwgcGFyYW1zOiBwYXJhbXMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3NlZCBhIFR3ZWVuIHRvIHRoZSBUd2VlbiBNYW5hZ2VyIGFuZCByZXF1ZXN0cyBpdCBiZSBtYWRlIGFjdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjbWFrZUFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSB0d2VlbiAtIFRoZSB0d2VlbiBvYmplY3QgdG8gbWFrZSBhY3RpdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXJ9IFRoZSBUaW1lbGluZSdzIFR3ZWVuIE1hbmFnZXIgcmVmZXJlbmNlLlxyXG4gICAgICovXHJcbiAgICBtYWtlQWN0aXZlOiBmdW5jdGlvbiAodHdlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5tYWtlQWN0aXZlKHR3ZWVuKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgcGxheWluZyB0aGUgVGltZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3BsYXlcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9TVEFSVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRXRUVOX0NPTlNULkFDVElWRSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIubWFrZUFjdGl2ZSh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFR3ZWVucyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQUNUSVZFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaFRpbWVsaW5lRXZlbnQoRXZlbnRzLlRJTUVMSU5FX1NUQVJULCB0aGlzLmNhbGxiYWNrcy5vblN0YXJ0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBUaW1lbGluZSdzIGBzdGF0ZWAgYW5kIGZpcmVzIGNhbGxiYWNrcyBhbmQgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNuZXh0U3RhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9DT01QTEVURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RJTUVMSU5FX0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSN1cGRhdGVcclxuICAgICAqL1xyXG4gICAgbmV4dFN0YXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmxvb3BDb3VudGVyID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZXNldCB0aGUgZWxhcHNlZCB0aW1lXHJcbiAgICAgICAgICAgIHRoaXMuZWxhcHNlZCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb29wQ291bnRlci0tO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXNldFR3ZWVucyh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvb3BEZWxheSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy5sb29wRGVsYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULkxPT1BfREVMQVk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQUNUSVZFO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hUaW1lbGluZUV2ZW50KEV2ZW50cy5USU1FTElORV9MT09QLCB0aGlzLmNhbGxiYWNrcy5vbkxvb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29tcGxldGVEZWxheSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQ09NUExFVEVfREVMQVk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMuY29tcGxldGVEZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFRpbWVsaW5lRXZlbnQoRXZlbnRzLlRJTUVMSU5FX0NPTVBMRVRFLCB0aGlzLmNhbGxiYWNrcy5vbkNvbXBsZXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyAndHJ1ZScgaWYgdGhpcyBUaW1lbGluZSBoYXMgZmluaXNoZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgKiBPdGhlcndpc2UsIHJldHVybnMgZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3VwZGF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RJTUVMSU5FX0NPTVBMRVRFXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlR3ZWVucy5FdmVudHMjVElNRUxJTkVfVVBEQVRFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoaXMgVGltZWxpbmUgaGFzIGZpbmlzaGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lc3RhbXAsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5QQVVTRUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy51c2VGcmFtZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWx0YSA9IDEgKiB0aGlzLm1hbmFnZXIudGltZVNjYWxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVsdGEgKj0gdGhpcy50aW1lU2NhbGU7XHJcblxyXG4gICAgICAgIHRoaXMuZWxhcHNlZCArPSBkZWx0YTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gTWF0aC5taW4odGhpcy5lbGFwc2VkIC8gdGhpcy5kdXJhdGlvbiwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMudG90YWxFbGFwc2VkICs9IGRlbHRhO1xyXG4gICAgICAgIHRoaXMudG90YWxQcm9ncmVzcyA9IE1hdGgubWluKHRoaXMudG90YWxFbGFwc2VkIC8gdGhpcy50b3RhbER1cmF0aW9uLCAxKTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5BQ1RJVkU6XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHN0aWxsUnVubmluZyA9IHRoaXMudG90YWxEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLmRhdGFbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0d2Vlbi51cGRhdGUodGltZXN0YW1wLCBkZWx0YSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlsbFJ1bm5pbmctLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFRpbWVsaW5lRXZlbnQoRXZlbnRzLlRJTUVMSU5FX1VQREFURSwgdGhpcy5jYWxsYmFja3Mub25VcGRhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBBbnl0aGluZyBzdGlsbCBydW5uaW5nPyBJZiBub3QsIHdlJ3JlIGRvbmVcclxuICAgICAgICAgICAgICAgIGlmIChzdGlsbFJ1bm5pbmcgPT09IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgVFdFRU5fQ09OU1QuTE9PUF9ERUxBWTpcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZG93biAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudGRvd24gPD0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQUNUSVZFO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVGltZWxpbmVFdmVudChFdmVudHMuVElNRUxJTkVfTE9PUCwgdGhpcy5jYWxsYmFja3Mub25Mb29wKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgVFdFRU5fQ09OU1QuQ09NUExFVEVfREVMQVk6XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudGRvd24gLT0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVGltZWxpbmVFdmVudChFdmVudHMuVElNRUxJTkVfQ09NUExFVEUsIHRoaXMuY2FsbGJhY2tzLm9uQ29tcGxldGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5QRU5ESU5HX1JFTU9WRSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIFRpbWVsaW5lIGltbWVkaWF0ZWx5LCB3aGF0ZXZlciBzdGFnZSBvZiBwcm9ncmVzcyBpdCBpcyBhdCBhbmQgZmxhZ3MgaXQgZm9yIHJlbW92YWwgYnkgdGhlIFR3ZWVuTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhdXNlcyB0aGUgVGltZWxpbmUsIHJldGFpbmluZyBpdHMgaW50ZXJuYWwgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyBvbiBhIFRpbWVsaW5lIHRoYXQgaXMgYWxyZWFkeSBwYXVzZWQgaGFzIG5vIGVmZmVjdCBhbmQgZmlyZXMgbm8gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3BhdXNlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLlR3ZWVucy5FdmVudHMjVElNRUxJTkVfUEFVU0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGltZWxpbmUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEFVU0VEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLl9wYXVzZWRTdGF0ZSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUV0VFTl9DT05TVC5QQVVTRUQ7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuVElNRUxJTkVfUEFVU0UsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVzIGEgcGF1c2VkIFRpbWVsaW5lIGZyb20gd2hlcmUgaXQgd2FzIHdoZW4gaXQgd2FzIHBhdXNlZC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG9uIGEgVGltZWxpbmUgdGhhdCBpc24ndCBwYXVzZWQgaGFzIG5vIGVmZmVjdCBhbmQgZmlyZXMgbm8gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlRpbWVsaW5lI3Jlc3VtZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RJTUVMSU5FX1JFU1VNRVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaW1lbGluZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEFVU0VEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9wYXVzZWRTdGF0ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuVElNRUxJTkVfUkVTVU1FLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbnkgb2YgdGhlIFR3ZWVucyBpbiB0aGlzIFRpbWVsaW5lIGFzIG9wZXJhdGluZyBvbiB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGlmIG5vIFR3ZWVucyBvcGVyYXRlIG9uIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5UaW1lbGluZSNoYXNUYXJnZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGNoZWNrIGFsbCBUd2VlbnMgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgYSBzaW5nbGUgVHdlZW4gdGhhdCBvcGVyYXRlcyBvbiB0aGUgdGFyZ2V0IG9iamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGhhc1RhcmdldDogZnVuY3Rpb24gKHRhcmdldClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0uaGFzVGFyZ2V0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgYWxsIHRoZSBUd2VlbnMgaW4gdGhlIFRpbWVsaW5lIGltbWVkaWF0ZWx5LCB3aGF0ZXZlciBzdGFnZSBvZiBwcm9ncmVzcyB0aGV5IGFyZSBhdCBhbmQgZmxhZ3NcclxuICAgICAqIHRoZW0gZm9yIHJlbW92YWwgYnkgdGhlIFR3ZWVuTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVGltZWxpbmUjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuVGltZWxpbmUuVFlQRVMgPSBbICdvblN0YXJ0JywgJ29uVXBkYXRlJywgJ29uTG9vcCcsICdvbkNvbXBsZXRlJywgJ29uWW95bycgXTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGltZWxpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/Timeline.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/TweenManager.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/tweens/TweenManager.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayRemove = __webpack_require__(/*! ../utils/array/Remove */ \"./node_modules/phaser/src/utils/array/Remove.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar NumberTweenBuilder = __webpack_require__(/*! ./builders/NumberTweenBuilder */ \"./node_modules/phaser/src/tweens/builders/NumberTweenBuilder.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar StaggerBuilder = __webpack_require__(/*! ./builders/StaggerBuilder */ \"./node_modules/phaser/src/tweens/builders/StaggerBuilder.js\");\r\nvar TimelineBuilder = __webpack_require__(/*! ./builders/TimelineBuilder */ \"./node_modules/phaser/src/tweens/builders/TimelineBuilder.js\");\r\nvar TWEEN_CONST = __webpack_require__(/*! ./tween/const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\nvar TweenBuilder = __webpack_require__(/*! ./builders/TweenBuilder */ \"./node_modules/phaser/src/tweens/builders/TweenBuilder.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Tween Manager is a default Scene Plugin which controls and updates Tweens and Timelines.\r\n *\r\n * @class TweenManager\r\n * @memberof Phaser.Tweens\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which owns this Tween Manager.\r\n */\r\nvar TweenManager = new Class({\r\n\r\n    initialize:\r\n\r\n    function TweenManager (scene)\r\n    {\r\n        /**\r\n         * The Scene which owns this Tween Manager.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#scene\r\n         * @type {Phaser.Scene}\r\n         * @since 3.0.0\r\n         */\r\n        this.scene = scene;\r\n\r\n        /**\r\n         * The Systems object of the Scene which owns this Tween Manager.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#systems\r\n         * @type {Phaser.Scenes.Systems}\r\n         * @since 3.0.0\r\n         */\r\n        this.systems = scene.sys;\r\n\r\n        /**\r\n         * The time scale of the Tween Manager.\r\n         *\r\n         * This value scales the time delta between two frames, thus influencing the speed of time for all Tweens owned by this Tween Manager.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * An array of Tweens and Timelines which will be added to the Tween Manager at the start of the frame.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#_add\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._add = [];\r\n\r\n        /**\r\n         * An array of Tweens and Timelines pending to be later added to the Tween Manager.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#_pending\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._pending = [];\r\n\r\n        /**\r\n         * An array of Tweens and Timelines which are still incomplete and are actively processed by the Tween Manager.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#_active\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._active = [];\r\n\r\n        /**\r\n         * An array of Tweens and Timelines which will be removed from the Tween Manager at the start of the frame.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#_destroy\r\n         * @type {array}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._destroy = [];\r\n\r\n        /**\r\n         * The number of Tweens and Timelines which need to be processed by the Tween Manager at the start of the frame.\r\n         *\r\n         * @name Phaser.Tweens.TweenManager#_toProcess\r\n         * @type {integer}\r\n         * @private\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this._toProcess = 0;\r\n\r\n        scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n        scene.sys.events.on(SceneEvents.START, this.start, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically, only once, when the Scene is first created.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#boot\r\n     * @private\r\n     * @since 3.5.1\r\n     */\r\n    boot: function ()\r\n    {\r\n        this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n    },\r\n\r\n    /**\r\n     * This method is called automatically by the Scene when it is starting up.\r\n     * It is responsible for creating local systems, properties and listening for Scene events.\r\n     * Do not invoke it directly.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#start\r\n     * @private\r\n     * @since 3.5.0\r\n     */\r\n    start: function ()\r\n    {\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.on(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.on(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n        this.timeScale = 1;\r\n    },\r\n\r\n    /**\r\n     * Create a Tween Timeline and return it, but do NOT add it to the active or pending Tween lists.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#createTimeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.TimelineBuilderConfig} [config] - The configuration object for the Timeline and its Tweens.\r\n     *\r\n     * @return {Phaser.Tweens.Timeline} The created Timeline object.\r\n     */\r\n    createTimeline: function (config)\r\n    {\r\n        return TimelineBuilder(this, config);\r\n    },\r\n\r\n    /**\r\n     * Create a Tween Timeline and add it to the active Tween list/\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#timeline\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.TimelineBuilderConfig} [config] - The configuration object for the Timeline and its Tweens.\r\n     *\r\n     * @return {Phaser.Tweens.Timeline} The created Timeline object.\r\n     */\r\n    timeline: function (config)\r\n    {\r\n        var timeline = TimelineBuilder(this, config);\r\n\r\n        if (!timeline.paused)\r\n        {\r\n            this._add.push(timeline);\r\n\r\n            this._toProcess++;\r\n        }\r\n\r\n        return timeline;\r\n    },\r\n\r\n    /**\r\n     * Create a Tween and return it, but do NOT add it to the active or pending Tween lists.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#create\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - The configuration object for the Tween.\r\n     *\r\n     * @return {Phaser.Tweens.Tween} The created Tween object.\r\n     */\r\n    create: function (config)\r\n    {\r\n        return TweenBuilder(this, config);\r\n    },\r\n\r\n    /**\r\n     * Create a Tween and add it to the active Tween list.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#add\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - The configuration object for the Tween.\r\n     *\r\n     * @return {Phaser.Tweens.Tween} The created Tween.\r\n     */\r\n    add: function (config)\r\n    {\r\n        var tween = TweenBuilder(this, config);\r\n\r\n        this._add.push(tween);\r\n\r\n        this._toProcess++;\r\n\r\n        return tween;\r\n    },\r\n\r\n    /**\r\n     * Add an existing tween into the active Tween list.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#existing\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to add.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager object.\r\n     */\r\n    existing: function (tween)\r\n    {\r\n        this._add.push(tween);\r\n\r\n        this._toProcess++;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Create a Number Tween and add it to the active Tween list.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#addCounter\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.NumberTweenBuilderConfig} config - The configuration object for the Number Tween.\r\n     *\r\n     * @return {Phaser.Tweens.Tween} The created Number Tween.\r\n     */\r\n    addCounter: function (config)\r\n    {\r\n        var tween = NumberTweenBuilder(this, config);\r\n\r\n        this._add.push(tween);\r\n\r\n        this._toProcess++;\r\n\r\n        return tween;\r\n    },\r\n\r\n    /**\r\n     * Creates a Stagger function to be used by a Tween property.\r\n     * \r\n     * The stagger function will allow you to stagger changes to the value of the property across all targets of the tween.\r\n     * \r\n     * This is only worth using if the tween has multiple targets.\r\n     * \r\n     * The following will stagger the delay by 100ms across all targets of the tween, causing them to scale down to 0.2\r\n     * over the duration specified:\r\n     * \r\n     * ```javascript\r\n     * this.tweens.add({\r\n     *     targets: [ ... ],\r\n     *     scale: 0.2,\r\n     *     ease: 'linear',\r\n     *     duration: 1000,\r\n     *     delay: this.tweens.stagger(100)\r\n     * });\r\n     * ```\r\n     * \r\n     * The following will stagger the delay by 500ms across all targets of the tween using a 10 x 6 grid, staggering\r\n     * from the center out, using a cubic ease.\r\n     * \r\n     * ```javascript\r\n     * this.tweens.add({\r\n     *     targets: [ ... ],\r\n     *     scale: 0.2,\r\n     *     ease: 'linear',\r\n     *     duration: 1000,\r\n     *     delay: this.tweens.stagger(500, { grid: [ 10, 6 ], from: 'center', ease: 'cubic.out' })\r\n     * });\r\n     * ```\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#stagger\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.StaggerConfig} config - The configuration object for the Stagger function.\r\n     *\r\n     * @return {function} The stagger function.\r\n     */\r\n    stagger: function (value, options)\r\n    {\r\n        return StaggerBuilder(value, options);\r\n    },\r\n\r\n    /**\r\n     * Updates the Tween Manager's internal lists at the start of the frame.\r\n     *\r\n     * This method will return immediately if no changes have been indicated.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#preUpdate\r\n     * @since 3.0.0\r\n     */\r\n    preUpdate: function ()\r\n    {\r\n        if (this._toProcess === 0)\r\n        {\r\n            //  Quick bail\r\n            return;\r\n        }\r\n\r\n        var list = this._destroy;\r\n        var active = this._active;\r\n        var pending = this._pending;\r\n        var i;\r\n        var tween;\r\n\r\n        //  Clear the 'destroy' list\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            tween = list[i];\r\n\r\n            //  Remove from the 'active' array\r\n            var idx = active.indexOf(tween);\r\n\r\n            if (idx === -1)\r\n            {\r\n                //  Not in the active array, is it in pending instead?\r\n                idx = pending.indexOf(tween);\r\n\r\n                if (idx > -1)\r\n                {\r\n                    tween.state = TWEEN_CONST.REMOVED;\r\n                    pending.splice(idx, 1);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                tween.state = TWEEN_CONST.REMOVED;\r\n                active.splice(idx, 1);\r\n            }\r\n        }\r\n\r\n        list.length = 0;\r\n\r\n        //  Process the addition list\r\n        //  This stops callbacks and out of sync events from populating the active array mid-way during the update\r\n\r\n        list = this._add;\r\n\r\n        for (i = 0; i < list.length; i++)\r\n        {\r\n            tween = list[i];\r\n\r\n            if (tween.state === TWEEN_CONST.PENDING_ADD)\r\n            {\r\n                //  Return true if the Tween should be started right away, otherwise false\r\n                if (tween.init())\r\n                {\r\n                    tween.play();\r\n\r\n                    this._active.push(tween);\r\n                }\r\n                else\r\n                {\r\n                    this._pending.push(tween);\r\n                }\r\n            }\r\n        }\r\n\r\n        list.length = 0;\r\n\r\n        this._toProcess = 0;\r\n    },\r\n\r\n    /**\r\n     * Updates all Tweens and Timelines of the Tween Manager.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#update\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} timestamp - The current time in milliseconds.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     */\r\n    update: function (timestamp, delta)\r\n    {\r\n        //  Process active tweens\r\n        var list = this._active;\r\n        var tween;\r\n\r\n        //  Scale the delta\r\n        delta *= this.timeScale;\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            tween = list[i];\r\n\r\n            //  If Tween.update returns 'true' then it means it has completed,\r\n            //  so move it to the destroy list\r\n            if (tween.update(timestamp, delta))\r\n            {\r\n                this._destroy.push(tween);\r\n                this._toProcess++;\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Removes the given tween from the Tween Manager, regardless of its state (pending or active).\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#remove\r\n     * @since 3.17.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to be removed.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager object.\r\n     */\r\n    remove: function (tween)\r\n    {\r\n        ArrayRemove(this._add, tween);\r\n        ArrayRemove(this._pending, tween);\r\n        ArrayRemove(this._active, tween);\r\n        ArrayRemove(this._destroy, tween);\r\n\r\n        tween.state = TWEEN_CONST.REMOVED;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Checks if a Tween or Timeline is active and adds it to the Tween Manager at the start of the frame if it isn't.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#makeActive\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to check.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager object.\r\n     */\r\n    makeActive: function (tween)\r\n    {\r\n        if (this._add.indexOf(tween) !== -1 || this._active.indexOf(tween) !== -1)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        var idx = this._pending.indexOf(tween);\r\n\r\n        if (idx !== -1)\r\n        {\r\n            this._pending.splice(idx, 1);\r\n        }\r\n\r\n        this._add.push(tween);\r\n\r\n        tween.state = TWEEN_CONST.PENDING_ADD;\r\n\r\n        this._toProcess++;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Passes all Tweens to the given callback.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#each\r\n     * @since 3.0.0\r\n     *\r\n     * @param {function} callback - The function to call.\r\n     * @param {object} [scope] - The scope (`this` object) to call the function with.\r\n     * @param {...*} [args] - The arguments to pass into the function. Its first argument will always be the Tween currently being iterated.\r\n     */\r\n    each: function (callback, scope)\r\n    {\r\n        var args = [ null ];\r\n\r\n        for (var i = 1; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (var texture in this.list)\r\n        {\r\n            args[0] = this.list[texture];\r\n\r\n            callback.apply(scope, args);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all active Tweens and Timelines in the Tween Manager.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#getAllTweens\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tweens.Tween[]} A new array containing references to all active Tweens and Timelines.\r\n     */\r\n    getAllTweens: function ()\r\n    {\r\n        var list = this._active;\r\n        var output = [];\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            output.push(list[i]);\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Returns the scale of the time delta for all Tweens and Timelines owned by this Tween Manager.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#getGlobalTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The scale of the time delta, usually 1.\r\n     */\r\n    getGlobalTimeScale: function ()\r\n    {\r\n        return this.timeScale;\r\n    },\r\n\r\n    /**\r\n     * Returns an array of all Tweens or Timelines in the Tween Manager which affect the given target or array of targets.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#getTweensOf\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(object|array)} target - The target to look for. Provide an array to look for multiple targets.\r\n     *\r\n     * @return {Phaser.Tweens.Tween[]} A new array containing all Tweens and Timelines which affect the given target(s).\r\n     */\r\n    getTweensOf: function (target)\r\n    {\r\n        var list = this._active;\r\n        var tween;\r\n        var output = [];\r\n        var i;\r\n\r\n        if (Array.isArray(target))\r\n        {\r\n            for (i = 0; i < list.length; i++)\r\n            {\r\n                tween = list[i];\r\n\r\n                for (var t = 0; t < target.length; t++)\r\n                {\r\n                    if (tween.hasTarget(target[t]))\r\n                    {\r\n                        output.push(tween);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (i = 0; i < list.length; i++)\r\n            {\r\n                tween = list[i];\r\n\r\n                if (tween.hasTarget(target))\r\n                {\r\n                    output.push(tween);\r\n                }\r\n            }\r\n        }\r\n\r\n        return output;\r\n    },\r\n\r\n    /**\r\n     * Checks if the given object is being affected by a playing Tween.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#isTweening\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} target - target Phaser.Tweens.Tween object\r\n     *\r\n     * @return {boolean} returns if target tween object is active or not\r\n     */\r\n    isTweening: function (target)\r\n    {\r\n        var list = this._active;\r\n        var tween;\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            tween = list[i];\r\n\r\n            if (tween.hasTarget(target) && tween.isPlaying())\r\n            {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Stops all Tweens in this Tween Manager. They will be removed at the start of the frame.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#killAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager.\r\n     */\r\n    killAll: function ()\r\n    {\r\n        var tweens = this.getAllTweens();\r\n\r\n        for (var i = 0; i < tweens.length; i++)\r\n        {\r\n            tweens[i].stop();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops all Tweens which affect the given target or array of targets. The Tweens will be removed from the Tween Manager at the start of the frame.\r\n     *\r\n     * @see {@link #getTweensOf}\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#killTweensOf\r\n     * @since 3.0.0\r\n     *\r\n     * @param {(object|array)} target - The target to look for. Provide an array to look for multiple targets.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager.\r\n     */\r\n    killTweensOf: function (target)\r\n    {\r\n        var tweens = this.getTweensOf(target);\r\n\r\n        for (var i = 0; i < tweens.length; i++)\r\n        {\r\n            tweens[i].stop();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Pauses all Tweens in this Tween Manager.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#pauseAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager.\r\n     */\r\n    pauseAll: function ()\r\n    {\r\n        var list = this._active;\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            list[i].pause();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Resumes all Tweens in this Tween Manager.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#resumeAll\r\n     * @since 3.0.0\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager.\r\n     */\r\n    resumeAll: function ()\r\n    {\r\n        var list = this._active;\r\n\r\n        for (var i = 0; i < list.length; i++)\r\n        {\r\n            list[i].resume();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets a new scale of the time delta for this Tween Manager.\r\n     *\r\n     * The time delta is the time elapsed between two consecutive frames and influences the speed of time for this Tween Manager and all Tweens it owns. Values higher than 1 increase the speed of time, while values smaller than 1 decrease it. A value of 0 freezes time and is effectively equivalent to pausing all Tweens.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#setGlobalTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The new scale of the time delta, where 1 is the normal speed.\r\n     *\r\n     * @return {Phaser.Tweens.TweenManager} This Tween Manager.\r\n     */\r\n    setGlobalTimeScale: function (value)\r\n    {\r\n        this.timeScale = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is shutting down.\r\n     * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#shutdown\r\n     * @since 3.0.0\r\n     */\r\n    shutdown: function ()\r\n    {\r\n        this.killAll();\r\n\r\n        this._add = [];\r\n        this._pending = [];\r\n        this._active = [];\r\n        this._destroy = [];\r\n\r\n        this._toProcess = 0;\r\n\r\n        var eventEmitter = this.systems.events;\r\n\r\n        eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n        eventEmitter.off(SceneEvents.UPDATE, this.update, this);\r\n        eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n    },\r\n\r\n    /**\r\n     * The Scene that owns this plugin is being destroyed.\r\n     * We need to shutdown and then kill off all external references.\r\n     *\r\n     * @method Phaser.Tweens.TweenManager#destroy\r\n     * @since 3.0.0\r\n     */\r\n    destroy: function ()\r\n    {\r\n        this.shutdown();\r\n\r\n        this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n        this.scene = null;\r\n        this.systems = null;\r\n    }\r\n\r\n});\r\n\r\nPluginCache.register('TweenManager', TweenManager, 'tweens');\r\n\r\nmodule.exports = TweenManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvVHdlZW5NYW5hZ2VyLmpzP2FjN2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLDhFQUF1QjtBQUNqRCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLHlCQUF5QixtQkFBTyxDQUFDLHNHQUErQjtBQUNoRSxrQkFBa0IsbUJBQU8sQ0FBQyxnRkFBd0I7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLDhGQUEyQjtBQUN4RCxzQkFBc0IsbUJBQU8sQ0FBQyxnR0FBNEI7QUFDMUQsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWU7QUFDekMsbUJBQW1CLG1CQUFPLENBQUMsMEZBQXlCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBDQUEwQztBQUN6RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMENBQTBDO0FBQ3pEO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUE4QztBQUM3RDtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMscURBQXFEO0FBQ2pHLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQ0FBa0M7QUFDakQ7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9Ud2Vlbk1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBcnJheVJlbW92ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL2FycmF5L1JlbW92ZScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgTnVtYmVyVHdlZW5CdWlsZGVyID0gcmVxdWlyZSgnLi9idWlsZGVycy9OdW1iZXJUd2VlbkJ1aWxkZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFN0YWdnZXJCdWlsZGVyID0gcmVxdWlyZSgnLi9idWlsZGVycy9TdGFnZ2VyQnVpbGRlcicpO1xyXG52YXIgVGltZWxpbmVCdWlsZGVyID0gcmVxdWlyZSgnLi9idWlsZGVycy9UaW1lbGluZUJ1aWxkZXInKTtcclxudmFyIFRXRUVOX0NPTlNUID0gcmVxdWlyZSgnLi90d2Vlbi9jb25zdCcpO1xyXG52YXIgVHdlZW5CdWlsZGVyID0gcmVxdWlyZSgnLi9idWlsZGVycy9Ud2VlbkJ1aWxkZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBUd2VlbiBNYW5hZ2VyIGlzIGEgZGVmYXVsdCBTY2VuZSBQbHVnaW4gd2hpY2ggY29udHJvbHMgYW5kIHVwZGF0ZXMgVHdlZW5zIGFuZCBUaW1lbGluZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBUd2Vlbk1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5Ud2VlbnNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgd2hpY2ggb3ducyB0aGlzIFR3ZWVuIE1hbmFnZXIuXHJcbiAqL1xyXG52YXIgVHdlZW5NYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFR3ZWVuTWFuYWdlciAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHdoaWNoIG93bnMgdGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFN5c3RlbXMgb2JqZWN0IG9mIHRoZSBTY2VuZSB3aGljaCBvd25zIHRoaXMgVHdlZW4gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgc2NhbGUgb2YgdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIHZhbHVlIHNjYWxlcyB0aGUgdGltZSBkZWx0YSBiZXR3ZWVuIHR3byBmcmFtZXMsIHRodXMgaW5mbHVlbmNpbmcgdGhlIHNwZWVkIG9mIHRpbWUgZm9yIGFsbCBUd2VlbnMgb3duZWQgYnkgdGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjdGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBUd2VlbnMgYW5kIFRpbWVsaW5lcyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBUd2VlbiBNYW5hZ2VyIGF0IHRoZSBzdGFydCBvZiB0aGUgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNfYWRkXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYWRkID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFR3ZWVucyBhbmQgVGltZWxpbmVzIHBlbmRpbmcgdG8gYmUgbGF0ZXIgYWRkZWQgdG8gdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNfcGVuZGluZ1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgVHdlZW5zIGFuZCBUaW1lbGluZXMgd2hpY2ggYXJlIHN0aWxsIGluY29tcGxldGUgYW5kIGFyZSBhY3RpdmVseSBwcm9jZXNzZWQgYnkgdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNfYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFR3ZWVucyBhbmQgVGltZWxpbmVzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUd2VlbiBNYW5hZ2VyIGF0IHRoZSBzdGFydCBvZiB0aGUgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNfZGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBUd2VlbnMgYW5kIFRpbWVsaW5lcyB3aGljaCBuZWVkIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgVHdlZW4gTWFuYWdlciBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjX3RvUHJvY2Vzc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RvUHJvY2VzcyA9IDA7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy5wcmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5VUERBVEUsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBUd2VlbiBUaW1lbGluZSBhbmQgcmV0dXJuIGl0LCBidXQgZG8gTk9UIGFkZCBpdCB0byB0aGUgYWN0aXZlIG9yIHBlbmRpbmcgVHdlZW4gbGlzdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNjcmVhdGVUaW1lbGluZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlRpbWVsaW5lQnVpbGRlckNvbmZpZ30gW2NvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBUaW1lbGluZSBhbmQgaXRzIFR3ZWVucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlRpbWVsaW5lfSBUaGUgY3JlYXRlZCBUaW1lbGluZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRpbWVsaW5lOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBUaW1lbGluZUJ1aWxkZXIodGhpcywgY29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBUd2VlbiBUaW1lbGluZSBhbmQgYWRkIGl0IHRvIHRoZSBhY3RpdmUgVHdlZW4gbGlzdC9cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI3RpbWVsaW5lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVGltZWxpbmVCdWlsZGVyQ29uZmlnfSBbY29uZmlnXSAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIFRpbWVsaW5lIGFuZCBpdHMgVHdlZW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Ud2VlbnMuVGltZWxpbmV9IFRoZSBjcmVhdGVkIFRpbWVsaW5lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdGltZWxpbmU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRpbWVsaW5lID0gVGltZWxpbmVCdWlsZGVyKHRoaXMsIGNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmICghdGltZWxpbmUucGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fYWRkLnB1c2godGltZWxpbmUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdG9Qcm9jZXNzKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGltZWxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgVHdlZW4gYW5kIHJldHVybiBpdCwgYnV0IGRvIE5PVCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBvciBwZW5kaW5nIFR3ZWVuIGxpc3RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjY3JlYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5CdWlsZGVyQ29uZmlnfG9iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gVGhlIGNyZWF0ZWQgVHdlZW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFR3ZWVuQnVpbGRlcih0aGlzLCBjb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIFR3ZWVuIGFuZCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBUd2VlbiBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5CdWlsZGVyQ29uZmlnfG9iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gVGhlIGNyZWF0ZWQgVHdlZW4uXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSBUd2VlbkJ1aWxkZXIodGhpcywgY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fYWRkLnB1c2godHdlZW4pO1xyXG5cclxuICAgICAgICB0aGlzLl90b1Byb2Nlc3MrKztcclxuXHJcbiAgICAgICAgcmV0dXJuIHR3ZWVuO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhbiBleGlzdGluZyB0d2VlbiBpbnRvIHRoZSBhY3RpdmUgVHdlZW4gbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI2V4aXN0aW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW59IHR3ZWVuIC0gVGhlIFR3ZWVuIHRvIGFkZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcn0gVGhpcyBUd2VlbiBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZXhpc3Rpbmc6IGZ1bmN0aW9uICh0d2VlbilcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9hZGQucHVzaCh0d2Vlbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RvUHJvY2VzcysrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBOdW1iZXIgVHdlZW4gYW5kIGFkZCBpdCB0byB0aGUgYWN0aXZlIFR3ZWVuIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNhZGRDb3VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuTnVtYmVyVHdlZW5CdWlsZGVyQ29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBOdW1iZXIgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gVGhlIGNyZWF0ZWQgTnVtYmVyIFR3ZWVuLlxyXG4gICAgICovXHJcbiAgICBhZGRDb3VudGVyOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbiA9IE51bWJlclR3ZWVuQnVpbGRlcih0aGlzLCBjb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9hZGQucHVzaCh0d2Vlbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RvUHJvY2VzcysrO1xyXG5cclxuICAgICAgICByZXR1cm4gdHdlZW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFN0YWdnZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBieSBhIFR3ZWVuIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc3RhZ2dlciBmdW5jdGlvbiB3aWxsIGFsbG93IHlvdSB0byBzdGFnZ2VyIGNoYW5nZXMgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhY3Jvc3MgYWxsIHRhcmdldHMgb2YgdGhlIHR3ZWVuLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgd29ydGggdXNpbmcgaWYgdGhlIHR3ZWVuIGhhcyBtdWx0aXBsZSB0YXJnZXRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgc3RhZ2dlciB0aGUgZGVsYXkgYnkgMTAwbXMgYWNyb3NzIGFsbCB0YXJnZXRzIG9mIHRoZSB0d2VlbiwgY2F1c2luZyB0aGVtIHRvIHNjYWxlIGRvd24gdG8gMC4yXHJcbiAgICAgKiBvdmVyIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQ6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMudHdlZW5zLmFkZCh7XHJcbiAgICAgKiAgICAgdGFyZ2V0czogWyAuLi4gXSxcclxuICAgICAqICAgICBzY2FsZTogMC4yLFxyXG4gICAgICogICAgIGVhc2U6ICdsaW5lYXInLFxyXG4gICAgICogICAgIGR1cmF0aW9uOiAxMDAwLFxyXG4gICAgICogICAgIGRlbGF5OiB0aGlzLnR3ZWVucy5zdGFnZ2VyKDEwMClcclxuICAgICAqIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBzdGFnZ2VyIHRoZSBkZWxheSBieSA1MDBtcyBhY3Jvc3MgYWxsIHRhcmdldHMgb2YgdGhlIHR3ZWVuIHVzaW5nIGEgMTAgeCA2IGdyaWQsIHN0YWdnZXJpbmdcclxuICAgICAqIGZyb20gdGhlIGNlbnRlciBvdXQsIHVzaW5nIGEgY3ViaWMgZWFzZS5cclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy50d2VlbnMuYWRkKHtcclxuICAgICAqICAgICB0YXJnZXRzOiBbIC4uLiBdLFxyXG4gICAgICogICAgIHNjYWxlOiAwLjIsXHJcbiAgICAgKiAgICAgZWFzZTogJ2xpbmVhcicsXHJcbiAgICAgKiAgICAgZHVyYXRpb246IDEwMDAsXHJcbiAgICAgKiAgICAgZGVsYXk6IHRoaXMudHdlZW5zLnN0YWdnZXIoNTAwLCB7IGdyaWQ6IFsgMTAsIDYgXSwgZnJvbTogJ2NlbnRlcicsIGVhc2U6ICdjdWJpYy5vdXQnIH0pXHJcbiAgICAgKiB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjc3RhZ2dlclxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlR3ZWVucy5TdGFnZ2VyQ29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBTdGFnZ2VyIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgc3RhZ2dlciBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RhZ2dlcjogZnVuY3Rpb24gKHZhbHVlLCBvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBTdGFnZ2VyQnVpbGRlcih2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgVHdlZW4gTWFuYWdlcidzIGludGVybmFsIGxpc3RzIGF0IHRoZSBzdGFydCBvZiB0aGUgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgbm8gY2hhbmdlcyBoYXZlIGJlZW4gaW5kaWNhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjcHJlVXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl90b1Byb2Nlc3MgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2Rlc3Ryb3k7XHJcbiAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcclxuICAgICAgICB2YXIgcGVuZGluZyA9IHRoaXMuX3BlbmRpbmc7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHR3ZWVuO1xyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgdGhlICdkZXN0cm95JyBsaXN0XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2VlbiA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAvLyAgUmVtb3ZlIGZyb20gdGhlICdhY3RpdmUnIGFycmF5XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBhY3RpdmUuaW5kZXhPZih0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE5vdCBpbiB0aGUgYWN0aXZlIGFycmF5LCBpcyBpdCBpbiBwZW5kaW5nIGluc3RlYWQ/XHJcbiAgICAgICAgICAgICAgICBpZHggPSBwZW5kaW5nLmluZGV4T2YodHdlZW4pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2Vlbi5zdGF0ZSA9IFRXRUVOX0NPTlNULlJFTU9WRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXRlID0gVFdFRU5fQ09OU1QuUkVNT1ZFRDtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZS5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGlzdC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgYWRkaXRpb24gbGlzdFxyXG4gICAgICAgIC8vICBUaGlzIHN0b3BzIGNhbGxiYWNrcyBhbmQgb3V0IG9mIHN5bmMgZXZlbnRzIGZyb20gcG9wdWxhdGluZyB0aGUgYWN0aXZlIGFycmF5IG1pZC13YXkgZHVyaW5nIHRoZSB1cGRhdGVcclxuXHJcbiAgICAgICAgbGlzdCA9IHRoaXMuX2FkZDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2VlbiA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW4uc3RhdGUgPT09IFRXRUVOX0NPTlNULlBFTkRJTkdfQUREKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgUmV0dXJuIHRydWUgaWYgdGhlIFR3ZWVuIHNob3VsZCBiZSBzdGFydGVkIHJpZ2h0IGF3YXksIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgaWYgKHR3ZWVuLmluaXQoKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2Vlbi5wbGF5KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS5wdXNoKHR3ZWVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nLnB1c2godHdlZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0Lmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX3RvUHJvY2VzcyA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhbGwgVHdlZW5zIGFuZCBUaW1lbGluZXMgb2YgdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RhbXAgLSBUaGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWVzdGFtcCwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFByb2Nlc3MgYWN0aXZlIHR3ZWVuc1xyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fYWN0aXZlO1xyXG4gICAgICAgIHZhciB0d2VlbjtcclxuXHJcbiAgICAgICAgLy8gIFNjYWxlIHRoZSBkZWx0YVxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2VlbiA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAvLyAgSWYgVHdlZW4udXBkYXRlIHJldHVybnMgJ3RydWUnIHRoZW4gaXQgbWVhbnMgaXQgaGFzIGNvbXBsZXRlZCxcclxuICAgICAgICAgICAgLy8gIHNvIG1vdmUgaXQgdG8gdGhlIGRlc3Ryb3kgbGlzdFxyXG4gICAgICAgICAgICBpZiAodHdlZW4udXBkYXRlKHRpbWVzdGFtcCwgZGVsdGEpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95LnB1c2godHdlZW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9Qcm9jZXNzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gdHdlZW4gZnJvbSB0aGUgVHdlZW4gTWFuYWdlciwgcmVnYXJkbGVzcyBvZiBpdHMgc3RhdGUgKHBlbmRpbmcgb3IgYWN0aXZlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI3JlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBUaGUgVHdlZW4gdG8gYmUgcmVtb3ZlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcn0gVGhpcyBUd2VlbiBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAodHdlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlSZW1vdmUodGhpcy5fYWRkLCB0d2Vlbik7XHJcbiAgICAgICAgQXJyYXlSZW1vdmUodGhpcy5fcGVuZGluZywgdHdlZW4pO1xyXG4gICAgICAgIEFycmF5UmVtb3ZlKHRoaXMuX2FjdGl2ZSwgdHdlZW4pO1xyXG4gICAgICAgIEFycmF5UmVtb3ZlKHRoaXMuX2Rlc3Ryb3ksIHR3ZWVuKTtcclxuXHJcbiAgICAgICAgdHdlZW4uc3RhdGUgPSBUV0VFTl9DT05TVC5SRU1PVkVEO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBUd2VlbiBvciBUaW1lbGluZSBpcyBhY3RpdmUgYW5kIGFkZHMgaXQgdG8gdGhlIFR3ZWVuIE1hbmFnZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFtZSBpZiBpdCBpc24ndC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI21ha2VBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBUaGUgVHdlZW4gdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXJ9IFRoaXMgVHdlZW4gTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1ha2VBY3RpdmU6IGZ1bmN0aW9uICh0d2VlbilcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5fYWRkLmluZGV4T2YodHdlZW4pICE9PSAtMSB8fCB0aGlzLl9hY3RpdmUuaW5kZXhPZih0d2VlbikgIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fcGVuZGluZy5pbmRleE9mKHR3ZWVuKTtcclxuXHJcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fYWRkLnB1c2godHdlZW4pO1xyXG5cclxuICAgICAgICB0d2Vlbi5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfQUREO1xyXG5cclxuICAgICAgICB0aGlzLl90b1Byb2Nlc3MrKztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBUd2VlbnMgdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2NvcGVdIC0gVGhlIHNjb3BlIChgdGhpc2Agb2JqZWN0KSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgaW50byB0aGUgZnVuY3Rpb24uIEl0cyBmaXJzdCBhcmd1bWVudCB3aWxsIGFsd2F5cyBiZSB0aGUgVHdlZW4gY3VycmVudGx5IGJlaW5nIGl0ZXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAoY2FsbGJhY2ssIHNjb3BlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gWyBudWxsIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciB0ZXh0dXJlIGluIHRoaXMubGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLmxpc3RbdGV4dHVyZV07XHJcblxyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShzY29wZSwgYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFjdGl2ZSBUd2VlbnMgYW5kIFRpbWVsaW5lcyBpbiB0aGUgVHdlZW4gTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI2dldEFsbFR3ZWVuc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2VlbltdfSBBIG5ldyBhcnJheSBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gYWxsIGFjdGl2ZSBUd2VlbnMgYW5kIFRpbWVsaW5lcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QWxsVHdlZW5zOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fYWN0aXZlO1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2gobGlzdFtpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNjYWxlIG9mIHRoZSB0aW1lIGRlbHRhIGZvciBhbGwgVHdlZW5zIGFuZCBUaW1lbGluZXMgb3duZWQgYnkgdGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjZ2V0R2xvYmFsVGltZVNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzY2FsZSBvZiB0aGUgdGltZSBkZWx0YSwgdXN1YWxseSAxLlxyXG4gICAgICovXHJcbiAgICBnZXRHbG9iYWxUaW1lU2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZVNjYWxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIFR3ZWVucyBvciBUaW1lbGluZXMgaW4gdGhlIFR3ZWVuIE1hbmFnZXIgd2hpY2ggYWZmZWN0IHRoZSBnaXZlbiB0YXJnZXQgb3IgYXJyYXkgb2YgdGFyZ2V0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI2dldFR3ZWVuc09mXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhvYmplY3R8YXJyYXkpfSB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGxvb2sgZm9yLiBQcm92aWRlIGFuIGFycmF5IHRvIGxvb2sgZm9yIG11bHRpcGxlIHRhcmdldHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2VlbltdfSBBIG5ldyBhcnJheSBjb250YWluaW5nIGFsbCBUd2VlbnMgYW5kIFRpbWVsaW5lcyB3aGljaCBhZmZlY3QgdGhlIGdpdmVuIHRhcmdldChzKS5cclxuICAgICAqL1xyXG4gICAgZ2V0VHdlZW5zT2Y6IGZ1bmN0aW9uICh0YXJnZXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIHR3ZWVuO1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0d2VlbiA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0YXJnZXQubGVuZ3RoOyB0KyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR3ZWVuLmhhc1RhcmdldCh0YXJnZXRbdF0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godHdlZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHdlZW4gPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0d2Vlbi5oYXNUYXJnZXQodGFyZ2V0KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCh0d2Vlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYmVpbmcgYWZmZWN0ZWQgYnkgYSBwbGF5aW5nIFR3ZWVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjaXNUd2VlbmluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCAtIHRhcmdldCBQaGFzZXIuVHdlZW5zLlR3ZWVuIG9iamVjdFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgaWYgdGFyZ2V0IHR3ZWVuIG9iamVjdCBpcyBhY3RpdmUgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIGlzVHdlZW5pbmc6IGZ1bmN0aW9uICh0YXJnZXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIHR3ZWVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2VlbiA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW4uaGFzVGFyZ2V0KHRhcmdldCkgJiYgdHdlZW4uaXNQbGF5aW5nKCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgYWxsIFR3ZWVucyBpbiB0aGlzIFR3ZWVuIE1hbmFnZXIuIFRoZXkgd2lsbCBiZSByZW1vdmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNraWxsQWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcn0gVGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBraWxsQWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbnMgPSB0aGlzLmdldEFsbFR3ZWVucygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR3ZWVucy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuc1tpXS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBhbGwgVHdlZW5zIHdoaWNoIGFmZmVjdCB0aGUgZ2l2ZW4gdGFyZ2V0IG9yIGFycmF5IG9mIHRhcmdldHMuIFRoZSBUd2VlbnMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFR3ZWVuIE1hbmFnZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIHtAbGluayAjZ2V0VHdlZW5zT2Z9XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNraWxsVHdlZW5zT2ZcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG9iamVjdHxhcnJheSl9IHRhcmdldCAtIFRoZSB0YXJnZXQgdG8gbG9vayBmb3IuIFByb3ZpZGUgYW4gYXJyYXkgdG8gbG9vayBmb3IgbXVsdGlwbGUgdGFyZ2V0cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcn0gVGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBraWxsVHdlZW5zT2Y6IGZ1bmN0aW9uICh0YXJnZXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHR3ZWVucyA9IHRoaXMuZ2V0VHdlZW5zT2YodGFyZ2V0KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0d2VlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2VlbnNbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIGFsbCBUd2VlbnMgaW4gdGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjcGF1c2VBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfSBUaGlzIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlQWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fYWN0aXZlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsaXN0W2ldLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVzIGFsbCBUd2VlbnMgaW4gdGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXIjcmVzdW1lQWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcn0gVGhpcyBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICByZXN1bWVBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxpc3RbaV0ucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IHNjYWxlIG9mIHRoZSB0aW1lIGRlbHRhIGZvciB0aGlzIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHRpbWUgZGVsdGEgaXMgdGhlIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBmcmFtZXMgYW5kIGluZmx1ZW5jZXMgdGhlIHNwZWVkIG9mIHRpbWUgZm9yIHRoaXMgVHdlZW4gTWFuYWdlciBhbmQgYWxsIFR3ZWVucyBpdCBvd25zLiBWYWx1ZXMgaGlnaGVyIHRoYW4gMSBpbmNyZWFzZSB0aGUgc3BlZWQgb2YgdGltZSwgd2hpbGUgdmFsdWVzIHNtYWxsZXIgdGhhbiAxIGRlY3JlYXNlIGl0LiBBIHZhbHVlIG9mIDAgZnJlZXplcyB0aW1lIGFuZCBpcyBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIHBhdXNpbmcgYWxsIFR3ZWVucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyI3NldEdsb2JhbFRpbWVTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG5ldyBzY2FsZSBvZiB0aGUgdGltZSBkZWx0YSwgd2hlcmUgMSBpcyB0aGUgbm9ybWFsIHNwZWVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfSBUaGlzIFR3ZWVuIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbFRpbWVTY2FsZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMua2lsbEFsbCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9hZGQgPSBbXTtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nID0gW107XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl90b1Byb2Nlc3MgPSAwO1xyXG5cclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5QUkVfVVBEQVRFLCB0aGlzLnByZVVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5VUERBVEUsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlciNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5QbHVnaW5DYWNoZS5yZWdpc3RlcignVHdlZW5NYW5hZ2VyJywgVHdlZW5NYW5hZ2VyLCAndHdlZW5zJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFR3ZWVuTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/TweenManager.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetBoolean.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetBoolean.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Retrieves the value of the given key from an object.\r\n *\r\n * @function Phaser.Tweens.Builders.GetBoolean\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The object to retrieve the value from.\r\n * @param {string} key - The key to look for in the `source` object.\r\n * @param {*} defaultValue - The default value to return if the `key` doesn't exist or if no `source` object is provided.\r\n *\r\n * @return {*} The retrieved value.\r\n */\r\nvar GetBoolean = function (source, key, defaultValue)\r\n{\r\n    if (!source)\r\n    {\r\n        return defaultValue;\r\n    }\r\n    else if (source.hasOwnProperty(key))\r\n    {\r\n        return source[key];\r\n    }\r\n    else\r\n    {\r\n        return defaultValue;\r\n    }\r\n};\r\n\r\nmodule.exports = GetBoolean;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0Qm9vbGVhbi5qcz8yYTNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0Qm9vbGVhbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGtleSBmcm9tIGFuIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuR2V0Qm9vbGVhblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFRoZSBvYmplY3QgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGxvb2sgZm9yIGluIHRoZSBgc291cmNlYCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIC0gVGhlIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBga2V5YCBkb2Vzbid0IGV4aXN0IG9yIGlmIG5vIGBzb3VyY2VgIG9iamVjdCBpcyBwcm92aWRlZC5cclxuICpcclxuICogQHJldHVybiB7Kn0gVGhlIHJldHJpZXZlZCB2YWx1ZS5cclxuICovXHJcbnZhciBHZXRCb29sZWFuID0gZnVuY3Rpb24gKHNvdXJjZSwga2V5LCBkZWZhdWx0VmFsdWUpXHJcbntcclxuICAgIGlmICghc291cmNlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc291cmNlW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qm9vbGVhbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetBoolean.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetEaseFunction.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetEaseFunction.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar EaseMap = __webpack_require__(/*! ../../math/easing/EaseMap */ \"./node_modules/phaser/src/math/easing/EaseMap.js\");\r\nvar UppercaseFirst = __webpack_require__(/*! ../../utils/string/UppercaseFirst */ \"./node_modules/phaser/src/utils/string/UppercaseFirst.js\");\r\n\r\n/**\r\n * This internal function is used to return the correct ease function for a Tween.\r\n * \r\n * It can take a variety of input, including an EaseMap based string, or a custom function.\r\n *\r\n * @function Phaser.Tweens.Builders.GetEaseFunction\r\n * @since 3.0.0\r\n *\r\n * @param {(string|function)} ease - The ease to find. This can be either a string from the EaseMap, or a custom function.\r\n * @param {number[]} [easeParams] - An optional array of ease parameters to go with the ease.\r\n *\r\n * @return {function} The ease function.\r\n */\r\nvar GetEaseFunction = function (ease, easeParams)\r\n{\r\n    //  Default ease function\r\n    var easeFunction = EaseMap.Power0;\r\n\r\n    //  Prepare ease function\r\n    if (typeof ease === 'string')\r\n    {\r\n        //  String based look-up\r\n\r\n        //  1) They specified it correctly\r\n        if (EaseMap.hasOwnProperty(ease))\r\n        {\r\n            easeFunction = EaseMap[ease];\r\n        }\r\n        else\r\n        {\r\n            //  Do some string manipulation to try and find it\r\n            var direction = '';\r\n\r\n            if (ease.indexOf('.'))\r\n            {\r\n                //  quad.in = Quad.easeIn\r\n                //  quad.out = Quad.easeOut\r\n                //  quad.inout =Quad.easeInOut\r\n\r\n                direction = ease.substr(ease.indexOf('.') + 1);\r\n\r\n                if (direction.toLowerCase() === 'in')\r\n                {\r\n                    direction = 'easeIn';\r\n                }\r\n                else if (direction.toLowerCase() === 'out')\r\n                {\r\n                    direction = 'easeOut';\r\n                }\r\n                else if (direction.toLowerCase() === 'inout')\r\n                {\r\n                    direction = 'easeInOut';\r\n                }\r\n            }\r\n\r\n            ease = UppercaseFirst(ease.substr(0, ease.indexOf('.') + 1) + direction);\r\n\r\n            if (EaseMap.hasOwnProperty(ease))\r\n            {\r\n                easeFunction = EaseMap[ease];\r\n            }\r\n        }\r\n    }\r\n    else if (typeof ease === 'function')\r\n    {\r\n        //  Custom function\r\n        easeFunction = ease;\r\n    }\r\n    else if (Array.isArray(ease) && ease.length === 4)\r\n    {\r\n        //  Bezier function (TODO)\r\n    }\r\n\r\n    //  No custom ease parameters?\r\n    if (!easeParams)\r\n    {\r\n        //  Return ease function\r\n        return easeFunction;\r\n    }\r\n\r\n    var cloneParams = easeParams.slice(0);\r\n\r\n    cloneParams.unshift(0);\r\n\r\n    //  Return ease function with custom ease parameters\r\n    return function (v)\r\n    {\r\n        cloneParams[0] = v;\r\n\r\n        return easeFunction.apply(this, cloneParams);\r\n    };\r\n};\r\n\r\nmodule.exports = GetEaseFunction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0RWFzZUZ1bmN0aW9uLmpzPzQ0YzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDakQscUJBQXFCLG1CQUFPLENBQUMsbUdBQW1DOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0RWFzZUZ1bmN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRWFzZU1hcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvZWFzaW5nL0Vhc2VNYXAnKTtcclxudmFyIFVwcGVyY2FzZUZpcnN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvc3RyaW5nL1VwcGVyY2FzZUZpcnN0Jyk7XHJcblxyXG4vKipcclxuICogVGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgY29ycmVjdCBlYXNlIGZ1bmN0aW9uIGZvciBhIFR3ZWVuLlxyXG4gKiBcclxuICogSXQgY2FuIHRha2UgYSB2YXJpZXR5IG9mIGlucHV0LCBpbmNsdWRpbmcgYW4gRWFzZU1hcCBiYXNlZCBzdHJpbmcsIG9yIGEgY3VzdG9tIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlR3ZWVucy5CdWlsZGVycy5HZXRFYXNlRnVuY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IGVhc2UgLSBUaGUgZWFzZSB0byBmaW5kLiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgZnJvbSB0aGUgRWFzZU1hcCwgb3IgYSBjdXN0b20gZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IFtlYXNlUGFyYW1zXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIGVhc2UgcGFyYW1ldGVycyB0byBnbyB3aXRoIHRoZSBlYXNlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGVhc2UgZnVuY3Rpb24uXHJcbiAqL1xyXG52YXIgR2V0RWFzZUZ1bmN0aW9uID0gZnVuY3Rpb24gKGVhc2UsIGVhc2VQYXJhbXMpXHJcbntcclxuICAgIC8vICBEZWZhdWx0IGVhc2UgZnVuY3Rpb25cclxuICAgIHZhciBlYXNlRnVuY3Rpb24gPSBFYXNlTWFwLlBvd2VyMDtcclxuXHJcbiAgICAvLyAgUHJlcGFyZSBlYXNlIGZ1bmN0aW9uXHJcbiAgICBpZiAodHlwZW9mIGVhc2UgPT09ICdzdHJpbmcnKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTdHJpbmcgYmFzZWQgbG9vay11cFxyXG5cclxuICAgICAgICAvLyAgMSkgVGhleSBzcGVjaWZpZWQgaXQgY29ycmVjdGx5XHJcbiAgICAgICAgaWYgKEVhc2VNYXAuaGFzT3duUHJvcGVydHkoZWFzZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlYXNlRnVuY3Rpb24gPSBFYXNlTWFwW2Vhc2VdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRG8gc29tZSBzdHJpbmcgbWFuaXB1bGF0aW9uIHRvIHRyeSBhbmQgZmluZCBpdFxyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoZWFzZS5pbmRleE9mKCcuJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBxdWFkLmluID0gUXVhZC5lYXNlSW5cclxuICAgICAgICAgICAgICAgIC8vICBxdWFkLm91dCA9IFF1YWQuZWFzZU91dFxyXG4gICAgICAgICAgICAgICAgLy8gIHF1YWQuaW5vdXQgPVF1YWQuZWFzZUluT3V0XHJcblxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZWFzZS5zdWJzdHIoZWFzZS5pbmRleE9mKCcuJykgKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdpbicpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2Vhc2VJbic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ291dCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2Vhc2VPdXQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdpbm91dCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2Vhc2VJbk91dCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVhc2UgPSBVcHBlcmNhc2VGaXJzdChlYXNlLnN1YnN0cigwLCBlYXNlLmluZGV4T2YoJy4nKSArIDEpICsgZGlyZWN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChFYXNlTWFwLmhhc093blByb3BlcnR5KGVhc2UpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlYXNlRnVuY3Rpb24gPSBFYXNlTWFwW2Vhc2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGVhc2UgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEN1c3RvbSBmdW5jdGlvblxyXG4gICAgICAgIGVhc2VGdW5jdGlvbiA9IGVhc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVhc2UpICYmIGVhc2UubGVuZ3RoID09PSA0KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBCZXppZXIgZnVuY3Rpb24gKFRPRE8pXHJcbiAgICB9XHJcblxyXG4gICAgLy8gIE5vIGN1c3RvbSBlYXNlIHBhcmFtZXRlcnM/XHJcbiAgICBpZiAoIWVhc2VQYXJhbXMpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJldHVybiBlYXNlIGZ1bmN0aW9uXHJcbiAgICAgICAgcmV0dXJuIGVhc2VGdW5jdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2xvbmVQYXJhbXMgPSBlYXNlUGFyYW1zLnNsaWNlKDApO1xyXG5cclxuICAgIGNsb25lUGFyYW1zLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgLy8gIFJldHVybiBlYXNlIGZ1bmN0aW9uIHdpdGggY3VzdG9tIGVhc2UgcGFyYW1ldGVyc1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2KVxyXG4gICAge1xyXG4gICAgICAgIGNsb25lUGFyYW1zWzBdID0gdjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVhc2VGdW5jdGlvbi5hcHBseSh0aGlzLCBjbG9uZVBhcmFtcyk7XHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRFYXNlRnVuY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetNewValue.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetNewValue.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Internal function used by the Tween Builder to create a function that will return\r\n * the given value from the source.\r\n *\r\n * @function Phaser.Tweens.Builders.GetNewValue\r\n * @since 3.0.0\r\n *\r\n * @param {any} source - The source object to get the value from.\r\n * @param {string} key - The property to get from the source.\r\n * @param {any} defaultValue - A default value to return should the source not have the property set.\r\n *\r\n * @return {function} A function which when called will return the property value from the source.\r\n */\r\nvar GetNewValue = function (source, key, defaultValue)\r\n{\r\n    var valueCallback;\r\n\r\n    if (source.hasOwnProperty(key))\r\n    {\r\n        var t = typeof(source[key]);\r\n\r\n        if (t === 'function')\r\n        {\r\n            valueCallback = function (target, targetKey, value, targetIndex, totalTargets, tween)\r\n            {\r\n                return source[key](target, targetKey, value, targetIndex, totalTargets, tween);\r\n            };\r\n        }\r\n        else\r\n        {\r\n            valueCallback = function ()\r\n            {\r\n                return source[key];\r\n            };\r\n        }\r\n    }\r\n    else if (typeof defaultValue === 'function')\r\n    {\r\n        valueCallback = defaultValue;\r\n    }\r\n    else\r\n    {\r\n        valueCallback = function ()\r\n        {\r\n            return defaultValue;\r\n        };\r\n    }\r\n\r\n    return valueCallback;\r\n};\r\n\r\nmodule.exports = GetNewValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0TmV3VmFsdWUuanM/MzQwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixXQUFXLE9BQU87QUFDbEIsV0FBVyxJQUFJO0FBQ2Y7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9HZXROZXdWYWx1ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIFR3ZWVuIEJ1aWxkZXIgdG8gY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVyblxyXG4gKiB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgc291cmNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlR3ZWVucy5CdWlsZGVycy5HZXROZXdWYWx1ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHthbnl9IHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGdldCB0aGUgdmFsdWUgZnJvbS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBwcm9wZXJ0eSB0byBnZXQgZnJvbSB0aGUgc291cmNlLlxyXG4gKiBAcGFyYW0ge2FueX0gZGVmYXVsdFZhbHVlIC0gQSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBzaG91bGQgdGhlIHNvdXJjZSBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gQSBmdW5jdGlvbiB3aGljaCB3aGVuIGNhbGxlZCB3aWxsIHJldHVybiB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0aGUgc291cmNlLlxyXG4gKi9cclxudmFyIEdldE5ld1ZhbHVlID0gZnVuY3Rpb24gKHNvdXJjZSwga2V5LCBkZWZhdWx0VmFsdWUpXHJcbntcclxuICAgIHZhciB2YWx1ZUNhbGxiYWNrO1xyXG5cclxuICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgdCA9IHR5cGVvZihzb3VyY2Vba2V5XSk7XHJcblxyXG4gICAgICAgIGlmICh0ID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgdmFsdWUsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHR3ZWVuKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlW2tleV0odGFyZ2V0LCB0YXJnZXRLZXksIHZhbHVlLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0d2Vlbik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgIHtcclxuICAgICAgICB2YWx1ZUNhbGxiYWNrID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZUNhbGxiYWNrO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXROZXdWYWx1ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetNewValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetProps.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetProps.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RESERVED = __webpack_require__(/*! ../tween/ReservedProps */ \"./node_modules/phaser/src/tweens/tween/ReservedProps.js\");\r\n\r\n/**\r\n * Internal function used by the Tween Builder to return an array of properties\r\n * that the Tween will be operating on. It takes a tween configuration object\r\n * and then checks that none of the `props` entries start with an underscore, or that\r\n * none of the direct properties are on the Reserved list.\r\n *\r\n * @function Phaser.Tweens.Builders.GetProps\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tweens.TweenBuilderConfig} config - The configuration object of the Tween to get the properties from.\r\n *\r\n * @return {string[]} An array of all the properties the tween will operate on.\r\n */\r\nvar GetProps = function (config)\r\n{\r\n    var key;\r\n    var keys = [];\r\n\r\n    //  First see if we have a props object\r\n\r\n    if (config.hasOwnProperty('props'))\r\n    {\r\n        for (key in config.props)\r\n        {\r\n            //  Skip any property that starts with an underscore\r\n            if (key.substr(0, 1) !== '_')\r\n            {\r\n                keys.push({ key: key, value: config.props[key] });\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        for (key in config)\r\n        {\r\n            //  Skip any property that is in the ReservedProps list or that starts with an underscore\r\n            if (RESERVED.indexOf(key) === -1 && key.substr(0, 1) !== '_')\r\n            {\r\n                keys.push({ key: key, value: config[key] });\r\n            }\r\n        }\r\n    }\r\n\r\n    return keys;\r\n};\r\n\r\nmodule.exports = GetProps;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0UHJvcHMuanM/MTA1YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVGQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1Q0FBdUM7QUFDbEQ7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixxQ0FBcUM7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsK0JBQStCO0FBQzFEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2J1aWxkZXJzL0dldFByb3BzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUkVTRVJWRUQgPSByZXF1aXJlKCcuLi90d2Vlbi9SZXNlcnZlZFByb3BzJyk7XHJcblxyXG4vKipcclxuICogSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSB0aGUgVHdlZW4gQnVpbGRlciB0byByZXR1cm4gYW4gYXJyYXkgb2YgcHJvcGVydGllc1xyXG4gKiB0aGF0IHRoZSBUd2VlbiB3aWxsIGJlIG9wZXJhdGluZyBvbi4gSXQgdGFrZXMgYSB0d2VlbiBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gKiBhbmQgdGhlbiBjaGVja3MgdGhhdCBub25lIG9mIHRoZSBgcHJvcHNgIGVudHJpZXMgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlLCBvciB0aGF0XHJcbiAqIG5vbmUgb2YgdGhlIGRpcmVjdCBwcm9wZXJ0aWVzIGFyZSBvbiB0aGUgUmVzZXJ2ZWQgbGlzdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuR2V0UHJvcHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlR3ZWVucy5Ud2VlbkJ1aWxkZXJDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBvZiB0aGUgVHdlZW4gdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzIGZyb20uXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBhbGwgdGhlIHByb3BlcnRpZXMgdGhlIHR3ZWVuIHdpbGwgb3BlcmF0ZSBvbi5cclxuICovXHJcbnZhciBHZXRQcm9wcyA9IGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHZhciBrZXk7XHJcbiAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgIC8vICBGaXJzdCBzZWUgaWYgd2UgaGF2ZSBhIHByb3BzIG9iamVjdFxyXG5cclxuICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkoJ3Byb3BzJykpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChrZXkgaW4gY29uZmlnLnByb3BzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNraXAgYW55IHByb3BlcnR5IHRoYXQgc3RhcnRzIHdpdGggYW4gdW5kZXJzY29yZVxyXG4gICAgICAgICAgICBpZiAoa2V5LnN1YnN0cigwLCAxKSAhPT0gJ18nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goeyBrZXk6IGtleSwgdmFsdWU6IGNvbmZpZy5wcm9wc1trZXldIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGZvciAoa2V5IGluIGNvbmZpZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBTa2lwIGFueSBwcm9wZXJ0eSB0aGF0IGlzIGluIHRoZSBSZXNlcnZlZFByb3BzIGxpc3Qgb3IgdGhhdCBzdGFydHMgd2l0aCBhbiB1bmRlcnNjb3JlXHJcbiAgICAgICAgICAgIGlmIChSRVNFUlZFRC5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleS5zdWJzdHIoMCwgMSkgIT09ICdfJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKHsga2V5OiBrZXksIHZhbHVlOiBjb25maWdba2V5XSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UHJvcHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetProps.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetTargets.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetTargets.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Extracts an array of targets from a Tween configuration object.\r\n *\r\n * The targets will be looked for in a `targets` property. If it's a function, its return value will be used as the result.\r\n *\r\n * @function Phaser.Tweens.Builders.GetTargets\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object to use.\r\n *\r\n * @return {array} An array of targets (may contain only one element), or `null` if no targets were specified.\r\n */\r\nvar GetTargets = function (config)\r\n{\r\n    var targets = GetValue(config, 'targets', null);\r\n\r\n    if (targets === null)\r\n    {\r\n        return targets;\r\n    }\r\n\r\n    if (typeof targets === 'function')\r\n    {\r\n        targets = targets.call();\r\n    }\r\n\r\n    if (!Array.isArray(targets))\r\n    {\r\n        targets = [ targets ];\r\n    }\r\n\r\n    return targets;\r\n};\r\n\r\nmodule.exports = GetTargets;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0VGFyZ2V0cy5qcz81OGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsdUZBQTZCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0VGFyZ2V0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgYW4gYXJyYXkgb2YgdGFyZ2V0cyBmcm9tIGEgVHdlZW4gY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIFRoZSB0YXJnZXRzIHdpbGwgYmUgbG9va2VkIGZvciBpbiBhIGB0YXJnZXRzYCBwcm9wZXJ0eS4gSWYgaXQncyBhIGZ1bmN0aW9uLCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgcmVzdWx0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlR3ZWVucy5CdWlsZGVycy5HZXRUYXJnZXRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHVzZS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIHRhcmdldHMgKG1heSBjb250YWluIG9ubHkgb25lIGVsZW1lbnQpLCBvciBgbnVsbGAgaWYgbm8gdGFyZ2V0cyB3ZXJlIHNwZWNpZmllZC5cclxuICovXHJcbnZhciBHZXRUYXJnZXRzID0gZnVuY3Rpb24gKGNvbmZpZylcclxue1xyXG4gICAgdmFyIHRhcmdldHMgPSBHZXRWYWx1ZShjb25maWcsICd0YXJnZXRzJywgbnVsbCk7XHJcblxyXG4gICAgaWYgKHRhcmdldHMgPT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRzID09PSAnZnVuY3Rpb24nKVxyXG4gICAge1xyXG4gICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmNhbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0cykpXHJcbiAgICB7XHJcbiAgICAgICAgdGFyZ2V0cyA9IFsgdGFyZ2V0cyBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YXJnZXRzO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUYXJnZXRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetTargets.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetTweens.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetTweens.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Internal function used by the Timeline Builder.\r\n * \r\n * It returns an array of all tweens in the given timeline config.\r\n *\r\n * @function Phaser.Tweens.Builders.GetTweens\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tweens.TimelineBuilderConfig} config - The configuration object for the Timeline.\r\n *\r\n * @return {Phaser.Tweens.Tween[]} An array of Tween instances that the Timeline will manage.\r\n */\r\nvar GetTweens = function (config)\r\n{\r\n    var tweens = GetValue(config, 'tweens', null);\r\n\r\n    if (tweens === null)\r\n    {\r\n        return [];\r\n    }\r\n    else if (typeof tweens === 'function')\r\n    {\r\n        tweens = tweens.call();\r\n    }\r\n\r\n    if (!Array.isArray(tweens))\r\n    {\r\n        tweens = [ tweens ];\r\n    }\r\n\r\n    return tweens;\r\n};\r\n\r\nmodule.exports = GetTweens;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0VHdlZW5zLmpzP2RiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBDQUEwQztBQUNyRDtBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9HZXRUd2VlbnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIFRpbWVsaW5lIEJ1aWxkZXIuXHJcbiAqIFxyXG4gKiBJdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0d2VlbnMgaW4gdGhlIGdpdmVuIHRpbWVsaW5lIGNvbmZpZy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuR2V0VHdlZW5zXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVGltZWxpbmVCdWlsZGVyQ29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBUaW1lbGluZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2VlbltdfSBBbiBhcnJheSBvZiBUd2VlbiBpbnN0YW5jZXMgdGhhdCB0aGUgVGltZWxpbmUgd2lsbCBtYW5hZ2UuXHJcbiAqL1xyXG52YXIgR2V0VHdlZW5zID0gZnVuY3Rpb24gKGNvbmZpZylcclxue1xyXG4gICAgdmFyIHR3ZWVucyA9IEdldFZhbHVlKGNvbmZpZywgJ3R3ZWVucycsIG51bGwpO1xyXG5cclxuICAgIGlmICh0d2VlbnMgPT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHR3ZWVucyA9PT0gJ2Z1bmN0aW9uJylcclxuICAgIHtcclxuICAgICAgICB0d2VlbnMgPSB0d2VlbnMuY2FsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0d2VlbnMpKVxyXG4gICAge1xyXG4gICAgICAgIHR3ZWVucyA9IFsgdHdlZW5zIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR3ZWVucztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VHdlZW5zO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetTweens.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/GetValueOp.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/GetValueOp.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction hasGetActive (def)\r\n{\r\n    return (!!def.getActive && typeof def.getActive === 'function');\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction hasGetStart (def)\r\n{\r\n    return (!!def.getStart && typeof def.getStart === 'function');\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction hasGetEnd (def)\r\n{\r\n    return (!!def.getEnd && typeof def.getEnd === 'function');\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction hasGetters (def)\r\n{\r\n    return hasGetStart(def) || hasGetEnd(def) || hasGetActive(def);\r\n}\r\n\r\n/**\r\n * Returns `getActive`, `getStart` and `getEnd` functions for a TweenData based on a target property and end value.\r\n * \r\n * `getActive` if not null, is invoked _immediately_ as soon as the TweenData is running, and is set on the target property.\r\n * `getEnd` is invoked once any start delays have expired and returns what the value should tween to.\r\n * `getStart` is invoked when the tween reaches the end and needs to either repeat or yoyo, it returns the value to go back to.\r\n *\r\n * If the end value is a number, it will be treated as an absolute value and the property will be tweened to it.\r\n * A string can be provided to specify a relative end value which consists of an operation\r\n * (`+=` to add to the current value, `-=` to subtract from the current value, `*=` to multiply the current\r\n * value, or `/=` to divide the current value) followed by its operand.\r\n * \r\n * A function can be provided to allow greater control over the end value; it will receive the target\r\n * object being tweened, the name of the property being tweened, and the current value of the property\r\n * as its arguments.\r\n * \r\n * If both the starting and the ending values need to be controlled, an object with `getStart` and `getEnd`\r\n * callbacks, which will receive the same arguments, can be provided instead. If an object with a `value`\r\n * property is provided, the property will be used as the effective value under the same rules described here.\r\n *\r\n * @function Phaser.Tweens.Builders.GetValueOp\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The name of the property to modify.\r\n * @param {*} propertyValue - The ending value of the property, as described above.\r\n *\r\n * @return {function} An array of functions, `getActive`, `getStart` and `getEnd`, which return the starting and the ending value of the property based on the provided value.\r\n */\r\nvar GetValueOp = function (key, propertyValue)\r\n{\r\n    var callbacks;\r\n\r\n    //  The returned value sets what the property will be at the END of the Tween (usually called at the start of the Tween)\r\n    var getEnd = function (target, key, value) { return value; };\r\n\r\n    //  The returned value sets what the property will be at the START of the Tween (usually called at the end of the Tween)\r\n    var getStart = function (target, key, value) { return value; };\r\n\r\n    //  What to set the property to the moment the TweenData is invoked\r\n    var getActive = null;\r\n\r\n    var t = typeof(propertyValue);\r\n\r\n    if (t === 'number')\r\n    {\r\n        // props: {\r\n        //     x: 400,\r\n        //     y: 300\r\n        // }\r\n\r\n        getEnd = function ()\r\n        {\r\n            return propertyValue;\r\n        };\r\n    }\r\n    else if (t === 'string')\r\n    {\r\n        // props: {\r\n        //     x: '+=400',\r\n        //     y: '-=300',\r\n        //     z: '*=2',\r\n        //     w: '/=2'\r\n        // }\r\n\r\n        var op = propertyValue[0];\r\n        var num = parseFloat(propertyValue.substr(2));\r\n\r\n        switch (op)\r\n        {\r\n            case '+':\r\n                getEnd = function (target, key, value)\r\n                {\r\n                    return value + num;\r\n                };\r\n                break;\r\n\r\n            case '-':\r\n                getEnd = function (target, key, value)\r\n                {\r\n                    return value - num;\r\n                };\r\n                break;\r\n\r\n            case '*':\r\n                getEnd = function (target, key, value)\r\n                {\r\n                    return value * num;\r\n                };\r\n                break;\r\n\r\n            case '/':\r\n                getEnd = function (target, key, value)\r\n                {\r\n                    return value / num;\r\n                };\r\n                break;\r\n\r\n            default:\r\n                getEnd = function ()\r\n                {\r\n                    return parseFloat(propertyValue);\r\n                };\r\n        }\r\n    }\r\n    else if (t === 'function')\r\n    {\r\n        //  The same as setting just the getEnd function and no getStart\r\n\r\n        // props: {\r\n        //     x: function (target, key, value, targetIndex, totalTargets, tween) { return value + 50); },\r\n        // }\r\n\r\n        getEnd = propertyValue;\r\n    }\r\n    else if (t === 'object')\r\n    {\r\n        if (hasGetters(propertyValue))\r\n        {\r\n            /*\r\n            x: {\r\n                //  Called the moment Tween is active. The returned value sets the property on the target immediately.\r\n                getActive: function (target, key, value, targetIndex, totalTargets, tween)\r\n                {\r\n                    return value;\r\n                },\r\n\r\n                //  Called at the start of the Tween. The returned value sets what the property will be at the END of the Tween.\r\n                getEnd: function (target, key, value, targetIndex, totalTargets, tween)\r\n                {\r\n                    return value;\r\n                },\r\n\r\n                //  Called at the end of the Tween. The returned value sets what the property will be at the START of the Tween.\r\n                getStart: function (target, key, value, targetIndex, totalTargets, tween)\r\n                {\r\n                    return value;\r\n                }\r\n            }\r\n            */\r\n\r\n            if (hasGetActive(propertyValue))\r\n            {\r\n                getActive = propertyValue.getActive;\r\n            }\r\n\r\n            if (hasGetEnd(propertyValue))\r\n            {\r\n                getEnd = propertyValue.getEnd;\r\n            }\r\n\r\n            if (hasGetStart(propertyValue))\r\n            {\r\n                getStart = propertyValue.getStart;\r\n            }\r\n        }\r\n        else if (propertyValue.hasOwnProperty('value'))\r\n        {\r\n            //  'value' may still be a string, function or a number\r\n            // props: {\r\n            //     x: { value: 400, ... },\r\n            //     y: { value: 300, ... }\r\n            // }\r\n\r\n            callbacks = GetValueOp(key, propertyValue.value);\r\n        }\r\n        else\r\n        {\r\n            //  'from' and 'to' may still be a string, function or a number\r\n            // props: {\r\n            //     x: { from: 400, to: 600 },\r\n            //     y: { from: 300, to: 500 }\r\n            // }\r\n\r\n            //  Same as above, but the 'start' value is set immediately on the target\r\n            // props: {\r\n            //     x: { start: 400, to: 600 },\r\n            //     y: { start: 300, to: 500 }\r\n            // }\r\n\r\n            //  'start' value is set immediately, then it goes 'from' to 'to' during the tween\r\n            // props: {\r\n            //     x: { start: 200, from: 400, to: 600 },\r\n            //     y: { start: 300, from: 300, to: 500 }\r\n            // }\r\n\r\n            var hasTo = propertyValue.hasOwnProperty('to');\r\n            var hasFrom = propertyValue.hasOwnProperty('from');\r\n            var hasStart = propertyValue.hasOwnProperty('start');\r\n\r\n            if (hasTo && (hasFrom || hasStart))\r\n            {\r\n                callbacks = GetValueOp(key, propertyValue.to);\r\n\r\n                if (hasStart)\r\n                {\r\n                    var startCallbacks = GetValueOp(key, propertyValue.start);\r\n        \r\n                    callbacks.getActive = startCallbacks.getEnd;\r\n                }\r\n        \r\n                if (hasFrom)\r\n                {\r\n                    var fromCallbacks = GetValueOp(key, propertyValue.from);\r\n        \r\n                    callbacks.getStart = fromCallbacks.getEnd;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    //  If callback not set by the else if block above then set it here and return it\r\n    if (!callbacks)\r\n    {\r\n        callbacks = {\r\n            getActive: getActive,\r\n            getEnd: getEnd,\r\n            getStart: getStart\r\n        };\r\n    }\r\n\r\n    return callbacks;\r\n};\r\n\r\nmodule.exports = GetValueOp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvR2V0VmFsdWVPcC5qcz8yMTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEU7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0QsY0FBYzs7QUFFOUQ7QUFDQSxrREFBa0QsY0FBYzs7QUFFaEU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GLG9CQUFvQixFQUFFO0FBQ3pHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekMsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUMsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGlDQUFpQztBQUN4RCx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9HZXRWYWx1ZU9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gaGFzR2V0QWN0aXZlIChkZWYpXHJcbntcclxuICAgIHJldHVybiAoISFkZWYuZ2V0QWN0aXZlICYmIHR5cGVvZiBkZWYuZ2V0QWN0aXZlID09PSAnZnVuY3Rpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIGhhc0dldFN0YXJ0IChkZWYpXHJcbntcclxuICAgIHJldHVybiAoISFkZWYuZ2V0U3RhcnQgJiYgdHlwZW9mIGRlZi5nZXRTdGFydCA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNHZXRFbmQgKGRlZilcclxue1xyXG4gICAgcmV0dXJuICghIWRlZi5nZXRFbmQgJiYgdHlwZW9mIGRlZi5nZXRFbmQgPT09ICdmdW5jdGlvbicpO1xyXG59XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gaGFzR2V0dGVycyAoZGVmKVxyXG57XHJcbiAgICByZXR1cm4gaGFzR2V0U3RhcnQoZGVmKSB8fCBoYXNHZXRFbmQoZGVmKSB8fCBoYXNHZXRBY3RpdmUoZGVmKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYGdldEFjdGl2ZWAsIGBnZXRTdGFydGAgYW5kIGBnZXRFbmRgIGZ1bmN0aW9ucyBmb3IgYSBUd2VlbkRhdGEgYmFzZWQgb24gYSB0YXJnZXQgcHJvcGVydHkgYW5kIGVuZCB2YWx1ZS5cclxuICogXHJcbiAqIGBnZXRBY3RpdmVgIGlmIG5vdCBudWxsLCBpcyBpbnZva2VkIF9pbW1lZGlhdGVseV8gYXMgc29vbiBhcyB0aGUgVHdlZW5EYXRhIGlzIHJ1bm5pbmcsIGFuZCBpcyBzZXQgb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cclxuICogYGdldEVuZGAgaXMgaW52b2tlZCBvbmNlIGFueSBzdGFydCBkZWxheXMgaGF2ZSBleHBpcmVkIGFuZCByZXR1cm5zIHdoYXQgdGhlIHZhbHVlIHNob3VsZCB0d2VlbiB0by5cclxuICogYGdldFN0YXJ0YCBpcyBpbnZva2VkIHdoZW4gdGhlIHR3ZWVuIHJlYWNoZXMgdGhlIGVuZCBhbmQgbmVlZHMgdG8gZWl0aGVyIHJlcGVhdCBvciB5b3lvLCBpdCByZXR1cm5zIHRoZSB2YWx1ZSB0byBnbyBiYWNrIHRvLlxyXG4gKlxyXG4gKiBJZiB0aGUgZW5kIHZhbHVlIGlzIGEgbnVtYmVyLCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYWJzb2x1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIHR3ZWVuZWQgdG8gaXQuXHJcbiAqIEEgc3RyaW5nIGNhbiBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGEgcmVsYXRpdmUgZW5kIHZhbHVlIHdoaWNoIGNvbnNpc3RzIG9mIGFuIG9wZXJhdGlvblxyXG4gKiAoYCs9YCB0byBhZGQgdG8gdGhlIGN1cnJlbnQgdmFsdWUsIGAtPWAgdG8gc3VidHJhY3QgZnJvbSB0aGUgY3VycmVudCB2YWx1ZSwgYCo9YCB0byBtdWx0aXBseSB0aGUgY3VycmVudFxyXG4gKiB2YWx1ZSwgb3IgYC89YCB0byBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUpIGZvbGxvd2VkIGJ5IGl0cyBvcGVyYW5kLlxyXG4gKiBcclxuICogQSBmdW5jdGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cgZ3JlYXRlciBjb250cm9sIG92ZXIgdGhlIGVuZCB2YWx1ZTsgaXQgd2lsbCByZWNlaXZlIHRoZSB0YXJnZXRcclxuICogb2JqZWN0IGJlaW5nIHR3ZWVuZWQsIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyB0d2VlbmVkLCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5XHJcbiAqIGFzIGl0cyBhcmd1bWVudHMuXHJcbiAqIFxyXG4gKiBJZiBib3RoIHRoZSBzdGFydGluZyBhbmQgdGhlIGVuZGluZyB2YWx1ZXMgbmVlZCB0byBiZSBjb250cm9sbGVkLCBhbiBvYmplY3Qgd2l0aCBgZ2V0U3RhcnRgIGFuZCBgZ2V0RW5kYFxyXG4gKiBjYWxsYmFja3MsIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgc2FtZSBhcmd1bWVudHMsIGNhbiBiZSBwcm92aWRlZCBpbnN0ZWFkLiBJZiBhbiBvYmplY3Qgd2l0aCBhIGB2YWx1ZWBcclxuICogcHJvcGVydHkgaXMgcHJvdmlkZWQsIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQgYXMgdGhlIGVmZmVjdGl2ZSB2YWx1ZSB1bmRlciB0aGUgc2FtZSBydWxlcyBkZXNjcmliZWQgaGVyZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuR2V0VmFsdWVPcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBtb2RpZnkuXHJcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydHlWYWx1ZSAtIFRoZSBlbmRpbmcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LCBhcyBkZXNjcmliZWQgYWJvdmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBBbiBhcnJheSBvZiBmdW5jdGlvbnMsIGBnZXRBY3RpdmVgLCBgZ2V0U3RhcnRgIGFuZCBgZ2V0RW5kYCwgd2hpY2ggcmV0dXJuIHRoZSBzdGFydGluZyBhbmQgdGhlIGVuZGluZyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhbHVlLlxyXG4gKi9cclxudmFyIEdldFZhbHVlT3AgPSBmdW5jdGlvbiAoa2V5LCBwcm9wZXJ0eVZhbHVlKVxyXG57XHJcbiAgICB2YXIgY2FsbGJhY2tzO1xyXG5cclxuICAgIC8vICBUaGUgcmV0dXJuZWQgdmFsdWUgc2V0cyB3aGF0IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IHRoZSBFTkQgb2YgdGhlIFR3ZWVuICh1c3VhbGx5IGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIFR3ZWVuKVxyXG4gICAgdmFyIGdldEVuZCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xyXG5cclxuICAgIC8vICBUaGUgcmV0dXJuZWQgdmFsdWUgc2V0cyB3aGF0IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IHRoZSBTVEFSVCBvZiB0aGUgVHdlZW4gKHVzdWFsbHkgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIFR3ZWVuKVxyXG4gICAgdmFyIGdldFN0YXJ0ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XHJcblxyXG4gICAgLy8gIFdoYXQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0byB0aGUgbW9tZW50IHRoZSBUd2VlbkRhdGEgaXMgaW52b2tlZFxyXG4gICAgdmFyIGdldEFjdGl2ZSA9IG51bGw7XHJcblxyXG4gICAgdmFyIHQgPSB0eXBlb2YocHJvcGVydHlWYWx1ZSk7XHJcblxyXG4gICAgaWYgKHQgPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIC8vIHByb3BzOiB7XHJcbiAgICAgICAgLy8gICAgIHg6IDQwMCxcclxuICAgICAgICAvLyAgICAgeTogMzAwXHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBnZXRFbmQgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHQgPT09ICdzdHJpbmcnKVxyXG4gICAge1xyXG4gICAgICAgIC8vIHByb3BzOiB7XHJcbiAgICAgICAgLy8gICAgIHg6ICcrPTQwMCcsXHJcbiAgICAgICAgLy8gICAgIHk6ICctPTMwMCcsXHJcbiAgICAgICAgLy8gICAgIHo6ICcqPTInLFxyXG4gICAgICAgIC8vICAgICB3OiAnLz0yJ1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgdmFyIG9wID0gcHJvcGVydHlWYWx1ZVswXTtcclxuICAgICAgICB2YXIgbnVtID0gcGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlLnN1YnN0cigyKSk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAob3ApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYXNlICcrJzpcclxuICAgICAgICAgICAgICAgIGdldEVuZCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgbnVtO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICAgICAgICBnZXRFbmQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIG51bTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJyonOlxyXG4gICAgICAgICAgICAgICAgZ2V0RW5kID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBudW07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICcvJzpcclxuICAgICAgICAgICAgICAgIGdldEVuZCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC8gbnVtO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGdldEVuZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHQgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoZSBzYW1lIGFzIHNldHRpbmcganVzdCB0aGUgZ2V0RW5kIGZ1bmN0aW9uIGFuZCBubyBnZXRTdGFydFxyXG5cclxuICAgICAgICAvLyBwcm9wczoge1xyXG4gICAgICAgIC8vICAgICB4OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0d2VlbikgeyByZXR1cm4gdmFsdWUgKyA1MCk7IH0sXHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBnZXRFbmQgPSBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodCA9PT0gJ29iamVjdCcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGhhc0dldHRlcnMocHJvcGVydHlWYWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICB4OiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgQ2FsbGVkIHRoZSBtb21lbnQgVHdlZW4gaXMgYWN0aXZlLiBUaGUgcmV0dXJuZWQgdmFsdWUgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIHRhcmdldCBpbW1lZGlhdGVseS5cclxuICAgICAgICAgICAgICAgIGdldEFjdGl2ZTogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgdGFyZ2V0SW5kZXgsIHRvdGFsVGFyZ2V0cywgdHdlZW4pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgVHdlZW4uIFRoZSByZXR1cm5lZCB2YWx1ZSBzZXRzIHdoYXQgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhlIEVORCBvZiB0aGUgVHdlZW4uXHJcbiAgICAgICAgICAgICAgICBnZXRFbmQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHR3ZWVuKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBUd2Vlbi4gVGhlIHJldHVybmVkIHZhbHVlIHNldHMgd2hhdCB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGUgU1RBUlQgb2YgdGhlIFR3ZWVuLlxyXG4gICAgICAgICAgICAgICAgZ2V0U3RhcnQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHR3ZWVuKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0dldEFjdGl2ZShwcm9wZXJ0eVZhbHVlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2V0QWN0aXZlID0gcHJvcGVydHlWYWx1ZS5nZXRBY3RpdmU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNHZXRFbmQocHJvcGVydHlWYWx1ZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdldEVuZCA9IHByb3BlcnR5VmFsdWUuZ2V0RW5kO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzR2V0U3RhcnQocHJvcGVydHlWYWx1ZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdldFN0YXJ0ID0gcHJvcGVydHlWYWx1ZS5nZXRTdGFydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gICd2YWx1ZScgbWF5IHN0aWxsIGJlIGEgc3RyaW5nLCBmdW5jdGlvbiBvciBhIG51bWJlclxyXG4gICAgICAgICAgICAvLyBwcm9wczoge1xyXG4gICAgICAgICAgICAvLyAgICAgeDogeyB2YWx1ZTogNDAwLCAuLi4gfSxcclxuICAgICAgICAgICAgLy8gICAgIHk6IHsgdmFsdWU6IDMwMCwgLi4uIH1cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzID0gR2V0VmFsdWVPcChrZXksIHByb3BlcnR5VmFsdWUudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgJ2Zyb20nIGFuZCAndG8nIG1heSBzdGlsbCBiZSBhIHN0cmluZywgZnVuY3Rpb24gb3IgYSBudW1iZXJcclxuICAgICAgICAgICAgLy8gcHJvcHM6IHtcclxuICAgICAgICAgICAgLy8gICAgIHg6IHsgZnJvbTogNDAwLCB0bzogNjAwIH0sXHJcbiAgICAgICAgICAgIC8vICAgICB5OiB7IGZyb206IDMwMCwgdG86IDUwMCB9XHJcbiAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBTYW1lIGFzIGFib3ZlLCBidXQgdGhlICdzdGFydCcgdmFsdWUgaXMgc2V0IGltbWVkaWF0ZWx5IG9uIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgLy8gcHJvcHM6IHtcclxuICAgICAgICAgICAgLy8gICAgIHg6IHsgc3RhcnQ6IDQwMCwgdG86IDYwMCB9LFxyXG4gICAgICAgICAgICAvLyAgICAgeTogeyBzdGFydDogMzAwLCB0bzogNTAwIH1cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgLy8gICdzdGFydCcgdmFsdWUgaXMgc2V0IGltbWVkaWF0ZWx5LCB0aGVuIGl0IGdvZXMgJ2Zyb20nIHRvICd0bycgZHVyaW5nIHRoZSB0d2VlblxyXG4gICAgICAgICAgICAvLyBwcm9wczoge1xyXG4gICAgICAgICAgICAvLyAgICAgeDogeyBzdGFydDogMjAwLCBmcm9tOiA0MDAsIHRvOiA2MDAgfSxcclxuICAgICAgICAgICAgLy8gICAgIHk6IHsgc3RhcnQ6IDMwMCwgZnJvbTogMzAwLCB0bzogNTAwIH1cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgdmFyIGhhc1RvID0gcHJvcGVydHlWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgndG8nKTtcclxuICAgICAgICAgICAgdmFyIGhhc0Zyb20gPSBwcm9wZXJ0eVZhbHVlLmhhc093blByb3BlcnR5KCdmcm9tJyk7XHJcbiAgICAgICAgICAgIHZhciBoYXNTdGFydCA9IHByb3BlcnR5VmFsdWUuaGFzT3duUHJvcGVydHkoJ3N0YXJ0Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzVG8gJiYgKGhhc0Zyb20gfHwgaGFzU3RhcnQpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBHZXRWYWx1ZU9wKGtleSwgcHJvcGVydHlWYWx1ZS50byk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc1N0YXJ0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydENhbGxiYWNrcyA9IEdldFZhbHVlT3Aoa2V5LCBwcm9wZXJ0eVZhbHVlLnN0YXJ0KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuZ2V0QWN0aXZlID0gc3RhcnRDYWxsYmFja3MuZ2V0RW5kO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0Zyb20pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZyb21DYWxsYmFja3MgPSBHZXRWYWx1ZU9wKGtleSwgcHJvcGVydHlWYWx1ZS5mcm9tKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuZ2V0U3RhcnQgPSBmcm9tQ2FsbGJhY2tzLmdldEVuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgSWYgY2FsbGJhY2sgbm90IHNldCBieSB0aGUgZWxzZSBpZiBibG9jayBhYm92ZSB0aGVuIHNldCBpdCBoZXJlIGFuZCByZXR1cm4gaXRcclxuICAgIGlmICghY2FsbGJhY2tzKVxyXG4gICAge1xyXG4gICAgICAgIGNhbGxiYWNrcyA9IHtcclxuICAgICAgICAgICAgZ2V0QWN0aXZlOiBnZXRBY3RpdmUsXHJcbiAgICAgICAgICAgIGdldEVuZDogZ2V0RW5kLFxyXG4gICAgICAgICAgICBnZXRTdGFydDogZ2V0U3RhcnRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYWxsYmFja3M7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFZhbHVlT3A7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/GetValueOp.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/NumberTweenBuilder.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/NumberTweenBuilder.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Defaults = __webpack_require__(/*! ../tween/Defaults */ \"./node_modules/phaser/src/tweens/tween/Defaults.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetBoolean = __webpack_require__(/*! ./GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\");\r\nvar GetEaseFunction = __webpack_require__(/*! ./GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetNewValue = __webpack_require__(/*! ./GetNewValue */ \"./node_modules/phaser/src/tweens/builders/GetNewValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar GetValueOp = __webpack_require__(/*! ./GetValueOp */ \"./node_modules/phaser/src/tweens/builders/GetValueOp.js\");\r\nvar Tween = __webpack_require__(/*! ../tween/Tween */ \"./node_modules/phaser/src/tweens/tween/Tween.js\");\r\nvar TweenData = __webpack_require__(/*! ../tween/TweenData */ \"./node_modules/phaser/src/tweens/tween/TweenData.js\");\r\n\r\n/**\r\n * Creates a new Number Tween.\r\n *\r\n * @function Phaser.Tweens.Builders.NumberTweenBuilder\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Tweens.TweenManager|Phaser.Tweens.Timeline)} parent - The owner of the new Tween.\r\n * @param {Phaser.Types.Tweens.NumberTweenBuilderConfig} config - Configuration for the new Tween.\r\n * @param {Phaser.Types.Tweens.TweenConfigDefaults} defaults - Tween configuration defaults.\r\n *\r\n * @return {Phaser.Tweens.Tween} The new tween.\r\n */\r\nvar NumberTweenBuilder = function (parent, config, defaults)\r\n{\r\n    if (defaults === undefined)\r\n    {\r\n        defaults = Defaults;\r\n    }\r\n\r\n    //  var tween = this.tweens.addCounter({\r\n    //      from: 100,\r\n    //      to: 200,\r\n    //      ... (normal tween properties)\r\n    //  })\r\n    //\r\n    //  Then use it in your game via:\r\n    //\r\n    //  tween.getValue()\r\n\r\n    var from = GetValue(config, 'from', 0);\r\n    var to = GetValue(config, 'to', 1);\r\n\r\n    var targets = [ { value: from } ];\r\n\r\n    var delay = GetNewValue(config, 'delay', defaults.delay);\r\n    var duration = GetNewValue(config, 'duration', defaults.duration);\r\n    var easeParams = GetValue(config, 'easeParams', defaults.easeParams);\r\n    var ease = GetEaseFunction(GetValue(config, 'ease', defaults.ease), easeParams);\r\n    var hold = GetNewValue(config, 'hold', defaults.hold);\r\n    var repeat = GetNewValue(config, 'repeat', defaults.repeat);\r\n    var repeatDelay = GetNewValue(config, 'repeatDelay', defaults.repeatDelay);\r\n    var yoyo = GetBoolean(config, 'yoyo', defaults.yoyo);\r\n\r\n    var data = [];\r\n\r\n    var ops = GetValueOp('value', to);\r\n\r\n    var tweenData = TweenData(\r\n        targets[0],\r\n        0,\r\n        'value',\r\n        ops.getEnd,\r\n        ops.getStart,\r\n        ops.getActive,\r\n        ease,\r\n        delay,\r\n        duration,\r\n        yoyo,\r\n        hold,\r\n        repeat,\r\n        repeatDelay,\r\n        false,\r\n        false\r\n    );\r\n\r\n    tweenData.start = from;\r\n    tweenData.current = from;\r\n    tweenData.to = to;\r\n\r\n    data.push(tweenData);\r\n\r\n    var tween = new Tween(parent, data, targets);\r\n\r\n    tween.offset = GetAdvancedValue(config, 'offset', null);\r\n    tween.completeDelay = GetAdvancedValue(config, 'completeDelay', 0);\r\n    tween.loop = Math.round(GetAdvancedValue(config, 'loop', 0));\r\n    tween.loopDelay = Math.round(GetAdvancedValue(config, 'loopDelay', 0));\r\n    tween.paused = GetBoolean(config, 'paused', false);\r\n    tween.useFrames = GetBoolean(config, 'useFrames', false);\r\n\r\n    //  Set the Callbacks\r\n    var scope = GetValue(config, 'callbackScope', tween);\r\n\r\n    //  Callback parameters: 0 = a reference to the Tween itself, 1 = the target/s of the Tween, ... your own params\r\n    var tweenArray = [ tween, null ];\r\n\r\n    var callbacks = Tween.TYPES;\r\n\r\n    for (var i = 0; i < callbacks.length; i++)\r\n    {\r\n        var type = callbacks[i];\r\n\r\n        var callback = GetValue(config, type, false);\r\n\r\n        if (callback)\r\n        {\r\n            var callbackScope = GetValue(config, type + 'Scope', scope);\r\n            var callbackParams = GetValue(config, type + 'Params', []);\r\n\r\n            //  The null is reset to be the Tween target\r\n            tween.setCallback(type, callback, tweenArray.concat(callbackParams), callbackScope);\r\n        }\r\n    }\r\n\r\n    return tween;\r\n};\r\n\r\nmodule.exports = NumberTweenBuilder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvTnVtYmVyVHdlZW5CdWlsZGVyLmpzPzExZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw2RUFBbUI7QUFDMUMsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGlCQUFpQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3ZDLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFtQjtBQUNqRCxrQkFBa0IsbUJBQU8sQ0FBQywrRUFBZTtBQUN6QyxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQW9COztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRCxXQUFXLDZDQUE2QztBQUN4RCxXQUFXLHdDQUF3QztBQUNuRDtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLGNBQWM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9OdW1iZXJUd2VlbkJ1aWxkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL3R3ZWVuL0RlZmF1bHRzJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldEJvb2xlYW4gPSByZXF1aXJlKCcuL0dldEJvb2xlYW4nKTtcclxudmFyIEdldEVhc2VGdW5jdGlvbiA9IHJlcXVpcmUoJy4vR2V0RWFzZUZ1bmN0aW9uJyk7XHJcbnZhciBHZXROZXdWYWx1ZSA9IHJlcXVpcmUoJy4vR2V0TmV3VmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZU9wID0gcmVxdWlyZSgnLi9HZXRWYWx1ZU9wJyk7XHJcbnZhciBUd2VlbiA9IHJlcXVpcmUoJy4uL3R3ZWVuL1R3ZWVuJyk7XHJcbnZhciBUd2VlbkRhdGEgPSByZXF1aXJlKCcuLi90d2Vlbi9Ud2VlbkRhdGEnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IE51bWJlciBUd2Vlbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuTnVtYmVyVHdlZW5CdWlsZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuVHdlZW5zLlR3ZWVuTWFuYWdlcnxQaGFzZXIuVHdlZW5zLlRpbWVsaW5lKX0gcGFyZW50IC0gVGhlIG93bmVyIG9mIHRoZSBuZXcgVHdlZW4uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlR3ZWVucy5OdW1iZXJUd2VlbkJ1aWxkZXJDb25maWd9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgVHdlZW4uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlR3ZWVucy5Ud2VlbkNvbmZpZ0RlZmF1bHRzfSBkZWZhdWx0cyAtIFR3ZWVuIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Ud2VlbnMuVHdlZW59IFRoZSBuZXcgdHdlZW4uXHJcbiAqL1xyXG52YXIgTnVtYmVyVHdlZW5CdWlsZGVyID0gZnVuY3Rpb24gKHBhcmVudCwgY29uZmlnLCBkZWZhdWx0cylcclxue1xyXG4gICAgaWYgKGRlZmF1bHRzID09PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgZGVmYXVsdHMgPSBEZWZhdWx0cztcclxuICAgIH1cclxuXHJcbiAgICAvLyAgdmFyIHR3ZWVuID0gdGhpcy50d2VlbnMuYWRkQ291bnRlcih7XHJcbiAgICAvLyAgICAgIGZyb206IDEwMCxcclxuICAgIC8vICAgICAgdG86IDIwMCxcclxuICAgIC8vICAgICAgLi4uIChub3JtYWwgdHdlZW4gcHJvcGVydGllcylcclxuICAgIC8vICB9KVxyXG4gICAgLy9cclxuICAgIC8vICBUaGVuIHVzZSBpdCBpbiB5b3VyIGdhbWUgdmlhOlxyXG4gICAgLy9cclxuICAgIC8vICB0d2Vlbi5nZXRWYWx1ZSgpXHJcblxyXG4gICAgdmFyIGZyb20gPSBHZXRWYWx1ZShjb25maWcsICdmcm9tJywgMCk7XHJcbiAgICB2YXIgdG8gPSBHZXRWYWx1ZShjb25maWcsICd0bycsIDEpO1xyXG5cclxuICAgIHZhciB0YXJnZXRzID0gWyB7IHZhbHVlOiBmcm9tIH0gXTtcclxuXHJcbiAgICB2YXIgZGVsYXkgPSBHZXROZXdWYWx1ZShjb25maWcsICdkZWxheScsIGRlZmF1bHRzLmRlbGF5KTtcclxuICAgIHZhciBkdXJhdGlvbiA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ2R1cmF0aW9uJywgZGVmYXVsdHMuZHVyYXRpb24pO1xyXG4gICAgdmFyIGVhc2VQYXJhbXMgPSBHZXRWYWx1ZShjb25maWcsICdlYXNlUGFyYW1zJywgZGVmYXVsdHMuZWFzZVBhcmFtcyk7XHJcbiAgICB2YXIgZWFzZSA9IEdldEVhc2VGdW5jdGlvbihHZXRWYWx1ZShjb25maWcsICdlYXNlJywgZGVmYXVsdHMuZWFzZSksIGVhc2VQYXJhbXMpO1xyXG4gICAgdmFyIGhvbGQgPSBHZXROZXdWYWx1ZShjb25maWcsICdob2xkJywgZGVmYXVsdHMuaG9sZCk7XHJcbiAgICB2YXIgcmVwZWF0ID0gR2V0TmV3VmFsdWUoY29uZmlnLCAncmVwZWF0JywgZGVmYXVsdHMucmVwZWF0KTtcclxuICAgIHZhciByZXBlYXREZWxheSA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ3JlcGVhdERlbGF5JywgZGVmYXVsdHMucmVwZWF0RGVsYXkpO1xyXG4gICAgdmFyIHlveW8gPSBHZXRCb29sZWFuKGNvbmZpZywgJ3lveW8nLCBkZWZhdWx0cy55b3lvKTtcclxuXHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG5cclxuICAgIHZhciBvcHMgPSBHZXRWYWx1ZU9wKCd2YWx1ZScsIHRvKTtcclxuXHJcbiAgICB2YXIgdHdlZW5EYXRhID0gVHdlZW5EYXRhKFxyXG4gICAgICAgIHRhcmdldHNbMF0sXHJcbiAgICAgICAgMCxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIG9wcy5nZXRFbmQsXHJcbiAgICAgICAgb3BzLmdldFN0YXJ0LFxyXG4gICAgICAgIG9wcy5nZXRBY3RpdmUsXHJcbiAgICAgICAgZWFzZSxcclxuICAgICAgICBkZWxheSxcclxuICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICB5b3lvLFxyXG4gICAgICAgIGhvbGQsXHJcbiAgICAgICAgcmVwZWF0LFxyXG4gICAgICAgIHJlcGVhdERlbGF5LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICApO1xyXG5cclxuICAgIHR3ZWVuRGF0YS5zdGFydCA9IGZyb207XHJcbiAgICB0d2VlbkRhdGEuY3VycmVudCA9IGZyb207XHJcbiAgICB0d2VlbkRhdGEudG8gPSB0bztcclxuXHJcbiAgICBkYXRhLnB1c2godHdlZW5EYXRhKTtcclxuXHJcbiAgICB2YXIgdHdlZW4gPSBuZXcgVHdlZW4ocGFyZW50LCBkYXRhLCB0YXJnZXRzKTtcclxuXHJcbiAgICB0d2Vlbi5vZmZzZXQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ29mZnNldCcsIG51bGwpO1xyXG4gICAgdHdlZW4uY29tcGxldGVEZWxheSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnY29tcGxldGVEZWxheScsIDApO1xyXG4gICAgdHdlZW4ubG9vcCA9IE1hdGgucm91bmQoR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdsb29wJywgMCkpO1xyXG4gICAgdHdlZW4ubG9vcERlbGF5ID0gTWF0aC5yb3VuZChHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2xvb3BEZWxheScsIDApKTtcclxuICAgIHR3ZWVuLnBhdXNlZCA9IEdldEJvb2xlYW4oY29uZmlnLCAncGF1c2VkJywgZmFsc2UpO1xyXG4gICAgdHdlZW4udXNlRnJhbWVzID0gR2V0Qm9vbGVhbihjb25maWcsICd1c2VGcmFtZXMnLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIFNldCB0aGUgQ2FsbGJhY2tzXHJcbiAgICB2YXIgc2NvcGUgPSBHZXRWYWx1ZShjb25maWcsICdjYWxsYmFja1Njb3BlJywgdHdlZW4pO1xyXG5cclxuICAgIC8vICBDYWxsYmFjayBwYXJhbWV0ZXJzOiAwID0gYSByZWZlcmVuY2UgdG8gdGhlIFR3ZWVuIGl0c2VsZiwgMSA9IHRoZSB0YXJnZXQvcyBvZiB0aGUgVHdlZW4sIC4uLiB5b3VyIG93biBwYXJhbXNcclxuICAgIHZhciB0d2VlbkFycmF5ID0gWyB0d2VlbiwgbnVsbCBdO1xyXG5cclxuICAgIHZhciBjYWxsYmFja3MgPSBUd2Vlbi5UWVBFUztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgdHlwZSA9IGNhbGxiYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gR2V0VmFsdWUoY29uZmlnLCB0eXBlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChjYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja1Njb3BlID0gR2V0VmFsdWUoY29uZmlnLCB0eXBlICsgJ1Njb3BlJywgc2NvcGUpO1xyXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tQYXJhbXMgPSBHZXRWYWx1ZShjb25maWcsIHR5cGUgKyAnUGFyYW1zJywgW10pO1xyXG5cclxuICAgICAgICAgICAgLy8gIFRoZSBudWxsIGlzIHJlc2V0IHRvIGJlIHRoZSBUd2VlbiB0YXJnZXRcclxuICAgICAgICAgICAgdHdlZW4uc2V0Q2FsbGJhY2sodHlwZSwgY2FsbGJhY2ssIHR3ZWVuQXJyYXkuY29uY2F0KGNhbGxiYWNrUGFyYW1zKSwgY2FsbGJhY2tTY29wZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0d2VlbjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyVHdlZW5CdWlsZGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/NumberTweenBuilder.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/StaggerBuilder.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/StaggerBuilder.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetEaseFunction = __webpack_require__(/*! ./GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Creates a Stagger function to be used by a Tween property.\r\n * \r\n * The stagger function will allow you to stagger changes to the value of the property across all targets of the tween.\r\n * \r\n * This is only worth using if the tween has multiple targets.\r\n * \r\n * The following will stagger the delay by 100ms across all targets of the tween, causing them to scale down to 0.2\r\n * over the duration specified:\r\n * \r\n * ```javascript\r\n * this.tweens.add({\r\n *     targets: [ ... ],\r\n *     scale: 0.2,\r\n *     ease: 'linear',\r\n *     duration: 1000,\r\n *     delay: this.tweens.stagger(100)\r\n * });\r\n * ```\r\n * \r\n * The following will stagger the delay by 500ms across all targets of the tween using a 10 x 6 grid, staggering\r\n * from the center out, using a cubic ease.\r\n * \r\n * ```javascript\r\n * this.tweens.add({\r\n *     targets: [ ... ],\r\n *     scale: 0.2,\r\n *     ease: 'linear',\r\n *     duration: 1000,\r\n *     delay: this.tweens.stagger(500, { grid: [ 10, 6 ], from: 'center', ease: 'cubic.out' })\r\n * });\r\n * ```\r\n *\r\n * @function Phaser.Tweens.Builders.StaggerBuilder\r\n * @since 3.19.0\r\n *\r\n * @param {(number|number[])} value - The amount to stagger by, or an array containing two elements representing the min and max values to stagger between.\r\n * @param {Phaser.Types.Tweens.StaggerConfig} [config] - A Stagger Configuration object.\r\n *\r\n * @return {function} The stagger function.\r\n */\r\nvar StaggerBuilder = function (value, options)\r\n{\r\n    if (options === undefined) { options = {}; }\r\n\r\n    var result;\r\n\r\n    var start = GetValue(options, 'start', 0);\r\n    var ease = GetValue(options, 'ease', null);\r\n    var grid = GetValue(options, 'grid', null);\r\n\r\n    var from = GetValue(options, 'from', 0);\r\n\r\n    var fromFirst = (from === 'first');\r\n    var fromCenter = (from === 'center');\r\n    var fromLast = (from === 'last');\r\n    var fromValue = (typeof(from) === 'number');\r\n\r\n    var isRange = (Array.isArray(value));\r\n    var value1 = (isRange) ? parseFloat(value[0]) : parseFloat(value);\r\n    var value2 = (isRange) ? parseFloat(value[1]) : 0;\r\n    var maxValue = Math.max(value1, value2);\r\n\r\n    if (isRange)\r\n    {\r\n        start += value1;\r\n    }\r\n\r\n    if (grid)\r\n    {\r\n        //  Pre-calc the grid to save doing it for ever tweendata update\r\n        var gridWidth = grid[0];\r\n        var gridHeight = grid[1];\r\n\r\n        var fromX = 0;\r\n        var fromY = 0;\r\n\r\n        var distanceX = 0;\r\n        var distanceY = 0;\r\n\r\n        var gridValues = [];\r\n\r\n        if (fromLast)\r\n        {\r\n            fromX = gridWidth - 1;\r\n            fromY = gridHeight - 1;\r\n        }\r\n        else if (fromValue)\r\n        {\r\n            fromX = from % gridWidth;\r\n            fromY = Math.floor(from / gridWidth);\r\n        }\r\n        else if (fromCenter)\r\n        {\r\n            fromX = (gridWidth - 1) / 2;\r\n            fromY = (gridHeight - 1) / 2;\r\n        }\r\n\r\n        var gridMax = MATH_CONST.MIN_SAFE_INTEGER;\r\n\r\n        for (var toY = 0; toY < gridHeight; toY++)\r\n        {\r\n            gridValues[toY] = [];\r\n\r\n            for (var toX = 0; toX < gridWidth; toX++)\r\n            {\r\n                distanceX = fromX - toX;\r\n                distanceY = fromY - toY;\r\n\r\n                var dist = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\r\n\r\n                if (dist > gridMax)\r\n                {\r\n                    gridMax = dist;\r\n                }\r\n\r\n                gridValues[toY][toX] = dist;\r\n            }\r\n        }\r\n    }\r\n\r\n    var easeFunction = (ease) ? GetEaseFunction(ease) : null;\r\n\r\n    if (grid)\r\n    {\r\n        result = function (target, key, value, index)\r\n        {\r\n            var gridSpace = 0;\r\n            var toX = index % gridWidth;\r\n            var toY = Math.floor(index / gridWidth);\r\n    \r\n            if (toX >= 0 && toX < gridWidth && toY >= 0 && toY < gridHeight)\r\n            {\r\n                gridSpace = gridValues[toY][toX];\r\n            }\r\n\r\n            var output;\r\n   \r\n            if (isRange)\r\n            {\r\n                var diff = (value2 - value1);\r\n    \r\n                if (easeFunction)\r\n                {\r\n                    output = ((gridSpace / gridMax) * diff) * easeFunction(gridSpace / gridMax);\r\n                }\r\n                else\r\n                {\r\n                    output = (gridSpace / gridMax) * diff;\r\n                }\r\n            }\r\n            else if (easeFunction)\r\n            {\r\n                output = (gridSpace * value1) * easeFunction(gridSpace / gridMax);\r\n            }\r\n            else\r\n            {\r\n                output = gridSpace * value1;\r\n            }\r\n\r\n            return output + start;\r\n        };\r\n    }\r\n    else\r\n    {\r\n        result = function (target, key, value, index, total)\r\n        {\r\n            //  zero offset\r\n            total--;\r\n    \r\n            var fromIndex;\r\n    \r\n            if (fromFirst)\r\n            {\r\n                fromIndex = index;\r\n            }\r\n            else if (fromCenter)\r\n            {\r\n                fromIndex = Math.abs((total / 2) - index);\r\n            }\r\n            else if (fromLast)\r\n            {\r\n                fromIndex = total - index;\r\n            }\r\n            else if (fromValue)\r\n            {\r\n                fromIndex = Math.abs(from - index);\r\n            }\r\n    \r\n            var output;\r\n        \r\n            if (isRange)\r\n            {\r\n                var spacing;\r\n\r\n                if (fromCenter)\r\n                {\r\n                    spacing = ((value2 - value1) / total) * (fromIndex * 2);\r\n                }\r\n                else\r\n                {\r\n                    spacing = ((value2 - value1) / total) * fromIndex;\r\n                }\r\n                    \r\n                if (easeFunction)\r\n                {\r\n                    output = spacing * easeFunction(fromIndex / total);\r\n                }\r\n                else\r\n                {\r\n                    output = spacing;\r\n                }\r\n            }\r\n            else if (easeFunction)\r\n            {\r\n                output = (total * maxValue) * easeFunction(fromIndex / total);\r\n            }\r\n            else\r\n            {\r\n                output = fromIndex * value1;\r\n            }\r\n    \r\n            return output + start;\r\n        };\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\nmodule.exports = StaggerBuilder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvU3RhZ2dlckJ1aWxkZXIuanM/OWQ0ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsdUZBQW1CO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsaUJBQWlCLG1CQUFPLENBQUMsaUVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MscURBQXFEO0FBQzdGLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxrQ0FBa0M7QUFDN0M7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGNBQWM7O0FBRTlDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCLGtCQUFrQjtBQUMzQztBQUNBOztBQUVBLDZCQUE2QixpQkFBaUI7QUFDOUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2J1aWxkZXJzL1N0YWdnZXJCdWlsZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RWFzZUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9HZXRFYXNlRnVuY3Rpb24nKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBTdGFnZ2VyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYnkgYSBUd2VlbiBwcm9wZXJ0eS5cclxuICogXHJcbiAqIFRoZSBzdGFnZ2VyIGZ1bmN0aW9uIHdpbGwgYWxsb3cgeW91IHRvIHN0YWdnZXIgY2hhbmdlcyB0byB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFjcm9zcyBhbGwgdGFyZ2V0cyBvZiB0aGUgdHdlZW4uXHJcbiAqIFxyXG4gKiBUaGlzIGlzIG9ubHkgd29ydGggdXNpbmcgaWYgdGhlIHR3ZWVuIGhhcyBtdWx0aXBsZSB0YXJnZXRzLlxyXG4gKiBcclxuICogVGhlIGZvbGxvd2luZyB3aWxsIHN0YWdnZXIgdGhlIGRlbGF5IGJ5IDEwMG1zIGFjcm9zcyBhbGwgdGFyZ2V0cyBvZiB0aGUgdHdlZW4sIGNhdXNpbmcgdGhlbSB0byBzY2FsZSBkb3duIHRvIDAuMlxyXG4gKiBvdmVyIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMudHdlZW5zLmFkZCh7XHJcbiAqICAgICB0YXJnZXRzOiBbIC4uLiBdLFxyXG4gKiAgICAgc2NhbGU6IDAuMixcclxuICogICAgIGVhc2U6ICdsaW5lYXInLFxyXG4gKiAgICAgZHVyYXRpb246IDEwMDAsXHJcbiAqICAgICBkZWxheTogdGhpcy50d2VlbnMuc3RhZ2dlcigxMDApXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIFRoZSBmb2xsb3dpbmcgd2lsbCBzdGFnZ2VyIHRoZSBkZWxheSBieSA1MDBtcyBhY3Jvc3MgYWxsIHRhcmdldHMgb2YgdGhlIHR3ZWVuIHVzaW5nIGEgMTAgeCA2IGdyaWQsIHN0YWdnZXJpbmdcclxuICogZnJvbSB0aGUgY2VudGVyIG91dCwgdXNpbmcgYSBjdWJpYyBlYXNlLlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLnR3ZWVucy5hZGQoe1xyXG4gKiAgICAgdGFyZ2V0czogWyAuLi4gXSxcclxuICogICAgIHNjYWxlOiAwLjIsXHJcbiAqICAgICBlYXNlOiAnbGluZWFyJyxcclxuICogICAgIGR1cmF0aW9uOiAxMDAwLFxyXG4gKiAgICAgZGVsYXk6IHRoaXMudHdlZW5zLnN0YWdnZXIoNTAwLCB7IGdyaWQ6IFsgMTAsIDYgXSwgZnJvbTogJ2NlbnRlcicsIGVhc2U6ICdjdWJpYy5vdXQnIH0pXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuU3RhZ2dlckJ1aWxkZXJcclxuICogQHNpbmNlIDMuMTkuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhudW1iZXJ8bnVtYmVyW10pfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc3RhZ2dlciBieSwgb3IgYW4gYXJyYXkgY29udGFpbmluZyB0d28gZWxlbWVudHMgcmVwcmVzZW50aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgdG8gc3RhZ2dlciBiZXR3ZWVuLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuU3RhZ2dlckNvbmZpZ30gW2NvbmZpZ10gLSBBIFN0YWdnZXIgQ29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgc3RhZ2dlciBmdW5jdGlvbi5cclxuICovXHJcbnZhciBTdGFnZ2VyQnVpbGRlciA9IGZ1bmN0aW9uICh2YWx1ZSwgb3B0aW9ucylcclxue1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBvcHRpb25zID0ge307IH1cclxuXHJcbiAgICB2YXIgcmVzdWx0O1xyXG5cclxuICAgIHZhciBzdGFydCA9IEdldFZhbHVlKG9wdGlvbnMsICdzdGFydCcsIDApO1xyXG4gICAgdmFyIGVhc2UgPSBHZXRWYWx1ZShvcHRpb25zLCAnZWFzZScsIG51bGwpO1xyXG4gICAgdmFyIGdyaWQgPSBHZXRWYWx1ZShvcHRpb25zLCAnZ3JpZCcsIG51bGwpO1xyXG5cclxuICAgIHZhciBmcm9tID0gR2V0VmFsdWUob3B0aW9ucywgJ2Zyb20nLCAwKTtcclxuXHJcbiAgICB2YXIgZnJvbUZpcnN0ID0gKGZyb20gPT09ICdmaXJzdCcpO1xyXG4gICAgdmFyIGZyb21DZW50ZXIgPSAoZnJvbSA9PT0gJ2NlbnRlcicpO1xyXG4gICAgdmFyIGZyb21MYXN0ID0gKGZyb20gPT09ICdsYXN0Jyk7XHJcbiAgICB2YXIgZnJvbVZhbHVlID0gKHR5cGVvZihmcm9tKSA9PT0gJ251bWJlcicpO1xyXG5cclxuICAgIHZhciBpc1JhbmdlID0gKEFycmF5LmlzQXJyYXkodmFsdWUpKTtcclxuICAgIHZhciB2YWx1ZTEgPSAoaXNSYW5nZSkgPyBwYXJzZUZsb2F0KHZhbHVlWzBdKSA6IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgdmFyIHZhbHVlMiA9IChpc1JhbmdlKSA/IHBhcnNlRmxvYXQodmFsdWVbMV0pIDogMDtcclxuICAgIHZhciBtYXhWYWx1ZSA9IE1hdGgubWF4KHZhbHVlMSwgdmFsdWUyKTtcclxuXHJcbiAgICBpZiAoaXNSYW5nZSlcclxuICAgIHtcclxuICAgICAgICBzdGFydCArPSB2YWx1ZTE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGdyaWQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFByZS1jYWxjIHRoZSBncmlkIHRvIHNhdmUgZG9pbmcgaXQgZm9yIGV2ZXIgdHdlZW5kYXRhIHVwZGF0ZVxyXG4gICAgICAgIHZhciBncmlkV2lkdGggPSBncmlkWzBdO1xyXG4gICAgICAgIHZhciBncmlkSGVpZ2h0ID0gZ3JpZFsxXTtcclxuXHJcbiAgICAgICAgdmFyIGZyb21YID0gMDtcclxuICAgICAgICB2YXIgZnJvbVkgPSAwO1xyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VYID0gMDtcclxuICAgICAgICB2YXIgZGlzdGFuY2VZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGdyaWRWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGZyb21MYXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJvbVggPSBncmlkV2lkdGggLSAxO1xyXG4gICAgICAgICAgICBmcm9tWSA9IGdyaWRIZWlnaHQgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmcm9tVmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmcm9tWCA9IGZyb20gJSBncmlkV2lkdGg7XHJcbiAgICAgICAgICAgIGZyb21ZID0gTWF0aC5mbG9vcihmcm9tIC8gZ3JpZFdpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZnJvbUNlbnRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyb21YID0gKGdyaWRXaWR0aCAtIDEpIC8gMjtcclxuICAgICAgICAgICAgZnJvbVkgPSAoZ3JpZEhlaWdodCAtIDEpIC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBncmlkTWF4ID0gTUFUSF9DT05TVC5NSU5fU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB0b1kgPSAwOyB0b1kgPCBncmlkSGVpZ2h0OyB0b1krKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdyaWRWYWx1ZXNbdG9ZXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgdG9YID0gMDsgdG9YIDwgZ3JpZFdpZHRoOyB0b1grKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VYID0gZnJvbVggLSB0b1g7XHJcbiAgICAgICAgICAgICAgICBkaXN0YW5jZVkgPSBmcm9tWSAtIHRvWTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChkaXN0YW5jZVggKiBkaXN0YW5jZVggKyBkaXN0YW5jZVkgKiBkaXN0YW5jZVkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gZ3JpZE1heClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkTWF4ID0gZGlzdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBncmlkVmFsdWVzW3RvWV1bdG9YXSA9IGRpc3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVhc2VGdW5jdGlvbiA9IChlYXNlKSA/IEdldEVhc2VGdW5jdGlvbihlYXNlKSA6IG51bGw7XHJcblxyXG4gICAgaWYgKGdyaWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgaW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ3JpZFNwYWNlID0gMDtcclxuICAgICAgICAgICAgdmFyIHRvWCA9IGluZGV4ICUgZ3JpZFdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgdG9ZID0gTWF0aC5mbG9vcihpbmRleCAvIGdyaWRXaWR0aCk7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHRvWCA+PSAwICYmIHRvWCA8IGdyaWRXaWR0aCAmJiB0b1kgPj0gMCAmJiB0b1kgPCBncmlkSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBncmlkU3BhY2UgPSBncmlkVmFsdWVzW3RvWV1bdG9YXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG91dHB1dDtcclxuICAgXHJcbiAgICAgICAgICAgIGlmIChpc1JhbmdlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9ICh2YWx1ZTIgLSB2YWx1ZTEpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoZWFzZUZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICgoZ3JpZFNwYWNlIC8gZ3JpZE1heCkgKiBkaWZmKSAqIGVhc2VGdW5jdGlvbihncmlkU3BhY2UgLyBncmlkTWF4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAoZ3JpZFNwYWNlIC8gZ3JpZE1heCkgKiBkaWZmO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVhc2VGdW5jdGlvbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKGdyaWRTcGFjZSAqIHZhbHVlMSkgKiBlYXNlRnVuY3Rpb24oZ3JpZFNwYWNlIC8gZ3JpZE1heCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBncmlkU3BhY2UgKiB2YWx1ZTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdGFydDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIGluZGV4LCB0b3RhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICB6ZXJvIG9mZnNldFxyXG4gICAgICAgICAgICB0b3RhbC0tO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciBmcm9tSW5kZXg7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKGZyb21GaXJzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbUNlbnRlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gTWF0aC5hYnMoKHRvdGFsIC8gMikgLSBpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbUxhc3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyb21JbmRleCA9IHRvdGFsIC0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVZhbHVlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcm9tSW5kZXggPSBNYXRoLmFicyhmcm9tIC0gaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIG91dHB1dDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGlzUmFuZ2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmcm9tQ2VudGVyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmcgPSAoKHZhbHVlMiAtIHZhbHVlMSkgLyB0b3RhbCkgKiAoZnJvbUluZGV4ICogMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZyA9ICgodmFsdWUyIC0gdmFsdWUxKSAvIHRvdGFsKSAqIGZyb21JbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChlYXNlRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3BhY2luZyAqIGVhc2VGdW5jdGlvbihmcm9tSW5kZXggLyB0b3RhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3BhY2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlYXNlRnVuY3Rpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0b3RhbCAqIG1heFZhbHVlKSAqIGVhc2VGdW5jdGlvbihmcm9tSW5kZXggLyB0b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmcm9tSW5kZXggKiB2YWx1ZTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgc3RhcnQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdGFnZ2VyQnVpbGRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/StaggerBuilder.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/TimelineBuilder.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/TimelineBuilder.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clone = __webpack_require__(/*! ../../utils/object/Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\nvar Defaults = __webpack_require__(/*! ../tween/Defaults */ \"./node_modules/phaser/src/tweens/tween/Defaults.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetBoolean = __webpack_require__(/*! ./GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\");\r\nvar GetEaseFunction = __webpack_require__(/*! ./GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetNewValue = __webpack_require__(/*! ./GetNewValue */ \"./node_modules/phaser/src/tweens/builders/GetNewValue.js\");\r\nvar GetTargets = __webpack_require__(/*! ./GetTargets */ \"./node_modules/phaser/src/tweens/builders/GetTargets.js\");\r\nvar GetTweens = __webpack_require__(/*! ./GetTweens */ \"./node_modules/phaser/src/tweens/builders/GetTweens.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Timeline = __webpack_require__(/*! ../Timeline */ \"./node_modules/phaser/src/tweens/Timeline.js\");\r\nvar TweenBuilder = __webpack_require__(/*! ./TweenBuilder */ \"./node_modules/phaser/src/tweens/builders/TweenBuilder.js\");\r\n\r\n/**\r\n * Builds a Timeline of Tweens based on a configuration object.\r\n *\r\n * @function Phaser.Tweens.Builders.TimelineBuilder\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Tweens.TweenManager} manager - The Tween Manager to which the Timeline will belong.\r\n * @param {Phaser.Types.Tweens.TimelineBuilderConfig} config - The configuration object for the Timeline.\r\n *\r\n * @return {Phaser.Tweens.Timeline} The created Timeline.\r\n */\r\nvar TimelineBuilder = function (manager, config)\r\n{\r\n    var timeline = new Timeline(manager);\r\n\r\n    var tweens = GetTweens(config);\r\n\r\n    if (tweens.length === 0)\r\n    {\r\n        timeline.paused = true;\r\n\r\n        return timeline;\r\n    }\r\n\r\n    var defaults = Clone(Defaults);\r\n\r\n    defaults.targets = GetTargets(config);\r\n\r\n    //  totalDuration: If specified each tween in the Timeline is given an equal portion of the totalDuration\r\n\r\n    var totalDuration = GetAdvancedValue(config, 'totalDuration', 0);\r\n\r\n    if (totalDuration > 0)\r\n    {\r\n        defaults.duration = Math.floor(totalDuration / tweens.length);\r\n    }\r\n    else\r\n    {\r\n        defaults.duration = GetNewValue(config, 'duration', defaults.duration);\r\n    }\r\n\r\n    defaults.delay = GetNewValue(config, 'delay', defaults.delay);\r\n    defaults.easeParams = GetValue(config, 'easeParams', defaults.easeParams);\r\n    defaults.ease = GetEaseFunction(GetValue(config, 'ease', defaults.ease), defaults.easeParams);\r\n    defaults.hold = GetNewValue(config, 'hold', defaults.hold);\r\n    defaults.repeat = GetNewValue(config, 'repeat', defaults.repeat);\r\n    defaults.repeatDelay = GetNewValue(config, 'repeatDelay', defaults.repeatDelay);\r\n    defaults.yoyo = GetBoolean(config, 'yoyo', defaults.yoyo);\r\n    defaults.flipX = GetBoolean(config, 'flipX', defaults.flipX);\r\n    defaults.flipY = GetBoolean(config, 'flipY', defaults.flipY);\r\n\r\n    //  Create the Tweens\r\n    for (var i = 0; i < tweens.length; i++)\r\n    {\r\n        timeline.queue(TweenBuilder(timeline, tweens[i], defaults));\r\n    }\r\n\r\n    timeline.completeDelay = GetAdvancedValue(config, 'completeDelay', 0);\r\n    timeline.loop = Math.round(GetAdvancedValue(config, 'loop', 0));\r\n    timeline.loopDelay = Math.round(GetAdvancedValue(config, 'loopDelay', 0));\r\n    timeline.paused = GetBoolean(config, 'paused', false);\r\n    timeline.useFrames = GetBoolean(config, 'useFrames', false);\r\n\r\n    //  Callbacks\r\n\r\n    var scope = GetValue(config, 'callbackScope', timeline);\r\n\r\n    var timelineArray = [ timeline ];\r\n\r\n    var onStart = GetValue(config, 'onStart', false);\r\n\r\n    //  The Start of the Timeline\r\n    if (onStart)\r\n    {\r\n        var onStartScope = GetValue(config, 'onStartScope', scope);\r\n        var onStartParams = GetValue(config, 'onStartParams', []);\r\n\r\n        timeline.setCallback('onStart', onStart, timelineArray.concat(onStartParams), onStartScope);\r\n    }\r\n\r\n    var onUpdate = GetValue(config, 'onUpdate', false);\r\n\r\n    //  Every time the Timeline updates (regardless which Tweens are running)\r\n    if (onUpdate)\r\n    {\r\n        var onUpdateScope = GetValue(config, 'onUpdateScope', scope);\r\n        var onUpdateParams = GetValue(config, 'onUpdateParams', []);\r\n\r\n        timeline.setCallback('onUpdate', onUpdate, timelineArray.concat(onUpdateParams), onUpdateScope);\r\n    }\r\n\r\n    var onLoop = GetValue(config, 'onLoop', false);\r\n\r\n    //  Called when the whole Timeline loops\r\n    if (onLoop)\r\n    {\r\n        var onLoopScope = GetValue(config, 'onLoopScope', scope);\r\n        var onLoopParams = GetValue(config, 'onLoopParams', []);\r\n\r\n        timeline.setCallback('onLoop', onLoop, timelineArray.concat(onLoopParams), onLoopScope);\r\n    }\r\n\r\n    var onYoyo = GetValue(config, 'onYoyo', false);\r\n\r\n    //  Called when a Timeline yoyos\r\n    if (onYoyo)\r\n    {\r\n        var onYoyoScope = GetValue(config, 'onYoyoScope', scope);\r\n        var onYoyoParams = GetValue(config, 'onYoyoParams', []);\r\n\r\n        timeline.setCallback('onYoyo', onYoyo, timelineArray.concat(null, onYoyoParams), onYoyoScope);\r\n    }\r\n\r\n    var onComplete = GetValue(config, 'onComplete', false);\r\n\r\n    //  Called when the Timeline completes, after the completeDelay, etc.\r\n    if (onComplete)\r\n    {\r\n        var onCompleteScope = GetValue(config, 'onCompleteScope', scope);\r\n        var onCompleteParams = GetValue(config, 'onCompleteParams', []);\r\n\r\n        timeline.setCallback('onComplete', onComplete, timelineArray.concat(onCompleteParams), onCompleteScope);\r\n    }\r\n\r\n    return timeline;\r\n};\r\n\r\nmodule.exports = TimelineBuilder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvVGltZWxpbmVCdWlsZGVyLmpzPzY3M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRkFBMEI7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLDZFQUFtQjtBQUMxQyx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsaUJBQWlCLG1CQUFPLENBQUMsNkVBQWM7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsdUZBQW1CO0FBQ2pELGtCQUFrQixtQkFBTyxDQUFDLCtFQUFlO0FBQ3pDLGlCQUFpQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLDJFQUFhO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLGlFQUFhO0FBQ3BDLG1CQUFtQixtQkFBTyxDQUFDLGlGQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywwQ0FBMEM7QUFDckQ7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2J1aWxkZXJzL1RpbWVsaW5lQnVpbGRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsb25lID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0Nsb25lJyk7XHJcbnZhciBEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL3R3ZWVuL0RlZmF1bHRzJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldEJvb2xlYW4gPSByZXF1aXJlKCcuL0dldEJvb2xlYW4nKTtcclxudmFyIEdldEVhc2VGdW5jdGlvbiA9IHJlcXVpcmUoJy4vR2V0RWFzZUZ1bmN0aW9uJyk7XHJcbnZhciBHZXROZXdWYWx1ZSA9IHJlcXVpcmUoJy4vR2V0TmV3VmFsdWUnKTtcclxudmFyIEdldFRhcmdldHMgPSByZXF1aXJlKCcuL0dldFRhcmdldHMnKTtcclxudmFyIEdldFR3ZWVucyA9IHJlcXVpcmUoJy4vR2V0VHdlZW5zJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgVGltZWxpbmUgPSByZXF1aXJlKCcuLi9UaW1lbGluZScpO1xyXG52YXIgVHdlZW5CdWlsZGVyID0gcmVxdWlyZSgnLi9Ud2VlbkJ1aWxkZXInKTtcclxuXHJcbi8qKlxyXG4gKiBCdWlsZHMgYSBUaW1lbGluZSBvZiBUd2VlbnMgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuQnVpbGRlcnMuVGltZWxpbmVCdWlsZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfSBtYW5hZ2VyIC0gVGhlIFR3ZWVuIE1hbmFnZXIgdG8gd2hpY2ggdGhlIFRpbWVsaW5lIHdpbGwgYmVsb25nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVGltZWxpbmVCdWlsZGVyQ29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBUaW1lbGluZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5UaW1lbGluZX0gVGhlIGNyZWF0ZWQgVGltZWxpbmUuXHJcbiAqL1xyXG52YXIgVGltZWxpbmVCdWlsZGVyID0gZnVuY3Rpb24gKG1hbmFnZXIsIGNvbmZpZylcclxue1xyXG4gICAgdmFyIHRpbWVsaW5lID0gbmV3IFRpbWVsaW5lKG1hbmFnZXIpO1xyXG5cclxuICAgIHZhciB0d2VlbnMgPSBHZXRUd2VlbnMoY29uZmlnKTtcclxuXHJcbiAgICBpZiAodHdlZW5zLmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICB0aW1lbGluZS5wYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGltZWxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRlZmF1bHRzID0gQ2xvbmUoRGVmYXVsdHMpO1xyXG5cclxuICAgIGRlZmF1bHRzLnRhcmdldHMgPSBHZXRUYXJnZXRzKGNvbmZpZyk7XHJcblxyXG4gICAgLy8gIHRvdGFsRHVyYXRpb246IElmIHNwZWNpZmllZCBlYWNoIHR3ZWVuIGluIHRoZSBUaW1lbGluZSBpcyBnaXZlbiBhbiBlcXVhbCBwb3J0aW9uIG9mIHRoZSB0b3RhbER1cmF0aW9uXHJcblxyXG4gICAgdmFyIHRvdGFsRHVyYXRpb24gPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3RvdGFsRHVyYXRpb24nLCAwKTtcclxuXHJcbiAgICBpZiAodG90YWxEdXJhdGlvbiA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgZGVmYXVsdHMuZHVyYXRpb24gPSBNYXRoLmZsb29yKHRvdGFsRHVyYXRpb24gLyB0d2VlbnMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBkZWZhdWx0cy5kdXJhdGlvbiA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ2R1cmF0aW9uJywgZGVmYXVsdHMuZHVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRzLmRlbGF5ID0gR2V0TmV3VmFsdWUoY29uZmlnLCAnZGVsYXknLCBkZWZhdWx0cy5kZWxheSk7XHJcbiAgICBkZWZhdWx0cy5lYXNlUGFyYW1zID0gR2V0VmFsdWUoY29uZmlnLCAnZWFzZVBhcmFtcycsIGRlZmF1bHRzLmVhc2VQYXJhbXMpO1xyXG4gICAgZGVmYXVsdHMuZWFzZSA9IEdldEVhc2VGdW5jdGlvbihHZXRWYWx1ZShjb25maWcsICdlYXNlJywgZGVmYXVsdHMuZWFzZSksIGRlZmF1bHRzLmVhc2VQYXJhbXMpO1xyXG4gICAgZGVmYXVsdHMuaG9sZCA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ2hvbGQnLCBkZWZhdWx0cy5ob2xkKTtcclxuICAgIGRlZmF1bHRzLnJlcGVhdCA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ3JlcGVhdCcsIGRlZmF1bHRzLnJlcGVhdCk7XHJcbiAgICBkZWZhdWx0cy5yZXBlYXREZWxheSA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ3JlcGVhdERlbGF5JywgZGVmYXVsdHMucmVwZWF0RGVsYXkpO1xyXG4gICAgZGVmYXVsdHMueW95byA9IEdldEJvb2xlYW4oY29uZmlnLCAneW95bycsIGRlZmF1bHRzLnlveW8pO1xyXG4gICAgZGVmYXVsdHMuZmxpcFggPSBHZXRCb29sZWFuKGNvbmZpZywgJ2ZsaXBYJywgZGVmYXVsdHMuZmxpcFgpO1xyXG4gICAgZGVmYXVsdHMuZmxpcFkgPSBHZXRCb29sZWFuKGNvbmZpZywgJ2ZsaXBZJywgZGVmYXVsdHMuZmxpcFkpO1xyXG5cclxuICAgIC8vICBDcmVhdGUgdGhlIFR3ZWVuc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0d2VlbnMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdGltZWxpbmUucXVldWUoVHdlZW5CdWlsZGVyKHRpbWVsaW5lLCB0d2VlbnNbaV0sIGRlZmF1bHRzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGltZWxpbmUuY29tcGxldGVEZWxheSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnY29tcGxldGVEZWxheScsIDApO1xyXG4gICAgdGltZWxpbmUubG9vcCA9IE1hdGgucm91bmQoR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdsb29wJywgMCkpO1xyXG4gICAgdGltZWxpbmUubG9vcERlbGF5ID0gTWF0aC5yb3VuZChHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2xvb3BEZWxheScsIDApKTtcclxuICAgIHRpbWVsaW5lLnBhdXNlZCA9IEdldEJvb2xlYW4oY29uZmlnLCAncGF1c2VkJywgZmFsc2UpO1xyXG4gICAgdGltZWxpbmUudXNlRnJhbWVzID0gR2V0Qm9vbGVhbihjb25maWcsICd1c2VGcmFtZXMnLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIENhbGxiYWNrc1xyXG5cclxuICAgIHZhciBzY29wZSA9IEdldFZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnLCB0aW1lbGluZSk7XHJcblxyXG4gICAgdmFyIHRpbWVsaW5lQXJyYXkgPSBbIHRpbWVsaW5lIF07XHJcblxyXG4gICAgdmFyIG9uU3RhcnQgPSBHZXRWYWx1ZShjb25maWcsICdvblN0YXJ0JywgZmFsc2UpO1xyXG5cclxuICAgIC8vICBUaGUgU3RhcnQgb2YgdGhlIFRpbWVsaW5lXHJcbiAgICBpZiAob25TdGFydClcclxuICAgIHtcclxuICAgICAgICB2YXIgb25TdGFydFNjb3BlID0gR2V0VmFsdWUoY29uZmlnLCAnb25TdGFydFNjb3BlJywgc2NvcGUpO1xyXG4gICAgICAgIHZhciBvblN0YXJ0UGFyYW1zID0gR2V0VmFsdWUoY29uZmlnLCAnb25TdGFydFBhcmFtcycsIFtdKTtcclxuXHJcbiAgICAgICAgdGltZWxpbmUuc2V0Q2FsbGJhY2soJ29uU3RhcnQnLCBvblN0YXJ0LCB0aW1lbGluZUFycmF5LmNvbmNhdChvblN0YXJ0UGFyYW1zKSwgb25TdGFydFNjb3BlKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgb25VcGRhdGUgPSBHZXRWYWx1ZShjb25maWcsICdvblVwZGF0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAvLyAgRXZlcnkgdGltZSB0aGUgVGltZWxpbmUgdXBkYXRlcyAocmVnYXJkbGVzcyB3aGljaCBUd2VlbnMgYXJlIHJ1bm5pbmcpXHJcbiAgICBpZiAob25VcGRhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9uVXBkYXRlU2NvcGUgPSBHZXRWYWx1ZShjb25maWcsICdvblVwZGF0ZVNjb3BlJywgc2NvcGUpO1xyXG4gICAgICAgIHZhciBvblVwZGF0ZVBhcmFtcyA9IEdldFZhbHVlKGNvbmZpZywgJ29uVXBkYXRlUGFyYW1zJywgW10pO1xyXG5cclxuICAgICAgICB0aW1lbGluZS5zZXRDYWxsYmFjaygnb25VcGRhdGUnLCBvblVwZGF0ZSwgdGltZWxpbmVBcnJheS5jb25jYXQob25VcGRhdGVQYXJhbXMpLCBvblVwZGF0ZVNjb3BlKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgb25Mb29wID0gR2V0VmFsdWUoY29uZmlnLCAnb25Mb29wJywgZmFsc2UpO1xyXG5cclxuICAgIC8vICBDYWxsZWQgd2hlbiB0aGUgd2hvbGUgVGltZWxpbmUgbG9vcHNcclxuICAgIGlmIChvbkxvb3ApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9uTG9vcFNjb3BlID0gR2V0VmFsdWUoY29uZmlnLCAnb25Mb29wU2NvcGUnLCBzY29wZSk7XHJcbiAgICAgICAgdmFyIG9uTG9vcFBhcmFtcyA9IEdldFZhbHVlKGNvbmZpZywgJ29uTG9vcFBhcmFtcycsIFtdKTtcclxuXHJcbiAgICAgICAgdGltZWxpbmUuc2V0Q2FsbGJhY2soJ29uTG9vcCcsIG9uTG9vcCwgdGltZWxpbmVBcnJheS5jb25jYXQob25Mb29wUGFyYW1zKSwgb25Mb29wU2NvcGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBvbllveW8gPSBHZXRWYWx1ZShjb25maWcsICdvbllveW8nLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIENhbGxlZCB3aGVuIGEgVGltZWxpbmUgeW95b3NcclxuICAgIGlmIChvbllveW8pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9uWW95b1Njb3BlID0gR2V0VmFsdWUoY29uZmlnLCAnb25Zb3lvU2NvcGUnLCBzY29wZSk7XHJcbiAgICAgICAgdmFyIG9uWW95b1BhcmFtcyA9IEdldFZhbHVlKGNvbmZpZywgJ29uWW95b1BhcmFtcycsIFtdKTtcclxuXHJcbiAgICAgICAgdGltZWxpbmUuc2V0Q2FsbGJhY2soJ29uWW95bycsIG9uWW95bywgdGltZWxpbmVBcnJheS5jb25jYXQobnVsbCwgb25Zb3lvUGFyYW1zKSwgb25Zb3lvU2NvcGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBvbkNvbXBsZXRlID0gR2V0VmFsdWUoY29uZmlnLCAnb25Db21wbGV0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAvLyAgQ2FsbGVkIHdoZW4gdGhlIFRpbWVsaW5lIGNvbXBsZXRlcywgYWZ0ZXIgdGhlIGNvbXBsZXRlRGVsYXksIGV0Yy5cclxuICAgIGlmIChvbkNvbXBsZXRlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvbkNvbXBsZXRlU2NvcGUgPSBHZXRWYWx1ZShjb25maWcsICdvbkNvbXBsZXRlU2NvcGUnLCBzY29wZSk7XHJcbiAgICAgICAgdmFyIG9uQ29tcGxldGVQYXJhbXMgPSBHZXRWYWx1ZShjb25maWcsICdvbkNvbXBsZXRlUGFyYW1zJywgW10pO1xyXG5cclxuICAgICAgICB0aW1lbGluZS5zZXRDYWxsYmFjaygnb25Db21wbGV0ZScsIG9uQ29tcGxldGUsIHRpbWVsaW5lQXJyYXkuY29uY2F0KG9uQ29tcGxldGVQYXJhbXMpLCBvbkNvbXBsZXRlU2NvcGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aW1lbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGltZWxpbmVCdWlsZGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/TimelineBuilder.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/TweenBuilder.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/TweenBuilder.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Defaults = __webpack_require__(/*! ../tween/Defaults */ \"./node_modules/phaser/src/tweens/tween/Defaults.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetBoolean = __webpack_require__(/*! ./GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\");\r\nvar GetEaseFunction = __webpack_require__(/*! ./GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetNewValue = __webpack_require__(/*! ./GetNewValue */ \"./node_modules/phaser/src/tweens/builders/GetNewValue.js\");\r\nvar GetProps = __webpack_require__(/*! ./GetProps */ \"./node_modules/phaser/src/tweens/builders/GetProps.js\");\r\nvar GetTargets = __webpack_require__(/*! ./GetTargets */ \"./node_modules/phaser/src/tweens/builders/GetTargets.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar GetValueOp = __webpack_require__(/*! ./GetValueOp */ \"./node_modules/phaser/src/tweens/builders/GetValueOp.js\");\r\nvar Tween = __webpack_require__(/*! ../tween/Tween */ \"./node_modules/phaser/src/tweens/tween/Tween.js\");\r\nvar TweenData = __webpack_require__(/*! ../tween/TweenData */ \"./node_modules/phaser/src/tweens/tween/TweenData.js\");\r\n\r\n/**\r\n * Creates a new Tween.\r\n *\r\n * @function Phaser.Tweens.Builders.TweenBuilder\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Tweens.TweenManager|Phaser.Tweens.Timeline)} parent - The owner of the new Tween.\r\n * @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - Configuration for the new Tween.\r\n * @param {Phaser.Types.Tweens.TweenConfigDefaults} defaults - Tween configuration defaults.\r\n *\r\n * @return {Phaser.Tweens.Tween} The new tween.\r\n */\r\nvar TweenBuilder = function (parent, config, defaults)\r\n{\r\n    if (defaults === undefined)\r\n    {\r\n        defaults = Defaults;\r\n    }\r\n\r\n    //  Create arrays of the Targets and the Properties\r\n    var targets = (defaults.targets) ? defaults.targets : GetTargets(config);\r\n\r\n    // var props = (defaults.props) ? defaults.props : GetProps(config);\r\n    var props = GetProps(config);\r\n\r\n    //  Default Tween values\r\n    var delay = GetNewValue(config, 'delay', defaults.delay);\r\n    var duration = GetNewValue(config, 'duration', defaults.duration);\r\n    var easeParams = GetValue(config, 'easeParams', defaults.easeParams);\r\n    var ease = GetEaseFunction(GetValue(config, 'ease', defaults.ease), easeParams);\r\n    var hold = GetNewValue(config, 'hold', defaults.hold);\r\n    var repeat = GetNewValue(config, 'repeat', defaults.repeat);\r\n    var repeatDelay = GetNewValue(config, 'repeatDelay', defaults.repeatDelay);\r\n    var yoyo = GetBoolean(config, 'yoyo', defaults.yoyo);\r\n    var flipX = GetBoolean(config, 'flipX', defaults.flipX);\r\n    var flipY = GetBoolean(config, 'flipY', defaults.flipY);\r\n\r\n    var data = [];\r\n\r\n    //  Loop through every property defined in the Tween, i.e.: props { x, y, alpha }\r\n    for (var p = 0; p < props.length; p++)\r\n    {\r\n        var key = props[p].key;\r\n        var value = props[p].value;\r\n\r\n        //  Create 1 TweenData per target, per property\r\n        for (var t = 0; t < targets.length; t++)\r\n        {\r\n            var ops = GetValueOp(key, value);\r\n\r\n            var tweenData = TweenData(\r\n                targets[t],\r\n                t,\r\n                key,\r\n                ops.getEnd,\r\n                ops.getStart,\r\n                ops.getActive,\r\n                GetEaseFunction(GetValue(value, 'ease', ease), easeParams),\r\n                GetNewValue(value, 'delay', delay),\r\n                GetNewValue(value, 'duration', duration),\r\n                GetBoolean(value, 'yoyo', yoyo),\r\n                GetNewValue(value, 'hold', hold),\r\n                GetNewValue(value, 'repeat', repeat),\r\n                GetNewValue(value, 'repeatDelay', repeatDelay),\r\n                GetBoolean(value, 'flipX', flipX),\r\n                GetBoolean(value, 'flipY', flipY)\r\n            );\r\n\r\n            data.push(tweenData);\r\n        }\r\n    }\r\n\r\n    var tween = new Tween(parent, data, targets);\r\n\r\n    tween.offset = GetAdvancedValue(config, 'offset', null);\r\n    tween.completeDelay = GetAdvancedValue(config, 'completeDelay', 0);\r\n    tween.loop = Math.round(GetAdvancedValue(config, 'loop', 0));\r\n    tween.loopDelay = Math.round(GetAdvancedValue(config, 'loopDelay', 0));\r\n    tween.paused = GetBoolean(config, 'paused', false);\r\n    tween.useFrames = GetBoolean(config, 'useFrames', false);\r\n\r\n    //  Set the Callbacks\r\n    var scope = GetValue(config, 'callbackScope', tween);\r\n\r\n    //  Callback parameters: 0 = a reference to the Tween itself, 1 = the target/s of the Tween, ... your own params\r\n    var tweenArray = [ tween, null ];\r\n\r\n    var callbacks = Tween.TYPES;\r\n\r\n    for (var i = 0; i < callbacks.length; i++)\r\n    {\r\n        var type = callbacks[i];\r\n\r\n        var callback = GetValue(config, type, false);\r\n\r\n        if (callback)\r\n        {\r\n            var callbackScope = GetValue(config, type + 'Scope', scope);\r\n            var callbackParams = GetValue(config, type + 'Params', []);\r\n\r\n            //  The null is reset to be the Tween target\r\n            tween.setCallback(type, callback, tweenArray.concat(callbackParams), callbackScope);\r\n        }\r\n    }\r\n\r\n    return tween;\r\n};\r\n\r\nmodule.exports = TweenBuilder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvVHdlZW5CdWlsZGVyLmpzPzlkNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw2RUFBbUI7QUFDMUMsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGlCQUFpQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3ZDLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFtQjtBQUNqRCxrQkFBa0IsbUJBQU8sQ0FBQywrRUFBZTtBQUN6QyxlQUFlLG1CQUFPLENBQUMseUVBQVk7QUFDbkMsaUJBQWlCLG1CQUFPLENBQUMsNkVBQWM7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYztBQUN2QyxZQUFZLG1CQUFPLENBQUMsdUVBQWdCO0FBQ3BDLGdCQUFnQixtQkFBTyxDQUFDLCtFQUFvQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvREFBb0Q7QUFDL0QsV0FBVyw4Q0FBOEM7QUFDekQsV0FBVyx3Q0FBd0M7QUFDbkQ7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1RUFBdUU7QUFDdkUsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9Ud2VlbkJ1aWxkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL3R3ZWVuL0RlZmF1bHRzJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldEJvb2xlYW4gPSByZXF1aXJlKCcuL0dldEJvb2xlYW4nKTtcclxudmFyIEdldEVhc2VGdW5jdGlvbiA9IHJlcXVpcmUoJy4vR2V0RWFzZUZ1bmN0aW9uJyk7XHJcbnZhciBHZXROZXdWYWx1ZSA9IHJlcXVpcmUoJy4vR2V0TmV3VmFsdWUnKTtcclxudmFyIEdldFByb3BzID0gcmVxdWlyZSgnLi9HZXRQcm9wcycpO1xyXG52YXIgR2V0VGFyZ2V0cyA9IHJlcXVpcmUoJy4vR2V0VGFyZ2V0cycpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIEdldFZhbHVlT3AgPSByZXF1aXJlKCcuL0dldFZhbHVlT3AnKTtcclxudmFyIFR3ZWVuID0gcmVxdWlyZSgnLi4vdHdlZW4vVHdlZW4nKTtcclxudmFyIFR3ZWVuRGF0YSA9IHJlcXVpcmUoJy4uL3R3ZWVuL1R3ZWVuRGF0YScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgVHdlZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVHdlZW5zLkJ1aWxkZXJzLlR3ZWVuQnVpbGRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXJ8UGhhc2VyLlR3ZWVucy5UaW1lbGluZSl9IHBhcmVudCAtIFRoZSBvd25lciBvZiB0aGUgbmV3IFR3ZWVuLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5CdWlsZGVyQ29uZmlnfG9iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIG5ldyBUd2Vlbi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuQ29uZmlnRGVmYXVsdHN9IGRlZmF1bHRzIC0gVHdlZW4gY29uZmlndXJhdGlvbiBkZWZhdWx0cy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gVGhlIG5ldyB0d2Vlbi5cclxuICovXHJcbnZhciBUd2VlbkJ1aWxkZXIgPSBmdW5jdGlvbiAocGFyZW50LCBjb25maWcsIGRlZmF1bHRzKVxyXG57XHJcbiAgICBpZiAoZGVmYXVsdHMgPT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBkZWZhdWx0cyA9IERlZmF1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBDcmVhdGUgYXJyYXlzIG9mIHRoZSBUYXJnZXRzIGFuZCB0aGUgUHJvcGVydGllc1xyXG4gICAgdmFyIHRhcmdldHMgPSAoZGVmYXVsdHMudGFyZ2V0cykgPyBkZWZhdWx0cy50YXJnZXRzIDogR2V0VGFyZ2V0cyhjb25maWcpO1xyXG5cclxuICAgIC8vIHZhciBwcm9wcyA9IChkZWZhdWx0cy5wcm9wcykgPyBkZWZhdWx0cy5wcm9wcyA6IEdldFByb3BzKGNvbmZpZyk7XHJcbiAgICB2YXIgcHJvcHMgPSBHZXRQcm9wcyhjb25maWcpO1xyXG5cclxuICAgIC8vICBEZWZhdWx0IFR3ZWVuIHZhbHVlc1xyXG4gICAgdmFyIGRlbGF5ID0gR2V0TmV3VmFsdWUoY29uZmlnLCAnZGVsYXknLCBkZWZhdWx0cy5kZWxheSk7XHJcbiAgICB2YXIgZHVyYXRpb24gPSBHZXROZXdWYWx1ZShjb25maWcsICdkdXJhdGlvbicsIGRlZmF1bHRzLmR1cmF0aW9uKTtcclxuICAgIHZhciBlYXNlUGFyYW1zID0gR2V0VmFsdWUoY29uZmlnLCAnZWFzZVBhcmFtcycsIGRlZmF1bHRzLmVhc2VQYXJhbXMpO1xyXG4gICAgdmFyIGVhc2UgPSBHZXRFYXNlRnVuY3Rpb24oR2V0VmFsdWUoY29uZmlnLCAnZWFzZScsIGRlZmF1bHRzLmVhc2UpLCBlYXNlUGFyYW1zKTtcclxuICAgIHZhciBob2xkID0gR2V0TmV3VmFsdWUoY29uZmlnLCAnaG9sZCcsIGRlZmF1bHRzLmhvbGQpO1xyXG4gICAgdmFyIHJlcGVhdCA9IEdldE5ld1ZhbHVlKGNvbmZpZywgJ3JlcGVhdCcsIGRlZmF1bHRzLnJlcGVhdCk7XHJcbiAgICB2YXIgcmVwZWF0RGVsYXkgPSBHZXROZXdWYWx1ZShjb25maWcsICdyZXBlYXREZWxheScsIGRlZmF1bHRzLnJlcGVhdERlbGF5KTtcclxuICAgIHZhciB5b3lvID0gR2V0Qm9vbGVhbihjb25maWcsICd5b3lvJywgZGVmYXVsdHMueW95byk7XHJcbiAgICB2YXIgZmxpcFggPSBHZXRCb29sZWFuKGNvbmZpZywgJ2ZsaXBYJywgZGVmYXVsdHMuZmxpcFgpO1xyXG4gICAgdmFyIGZsaXBZID0gR2V0Qm9vbGVhbihjb25maWcsICdmbGlwWScsIGRlZmF1bHRzLmZsaXBZKTtcclxuXHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG5cclxuICAgIC8vICBMb29wIHRocm91Z2ggZXZlcnkgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVHdlZW4sIGkuZS46IHByb3BzIHsgeCwgeSwgYWxwaGEgfVxyXG4gICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKylcclxuICAgIHtcclxuICAgICAgICB2YXIga2V5ID0gcHJvcHNbcF0ua2V5O1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BzW3BdLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyAgQ3JlYXRlIDEgVHdlZW5EYXRhIHBlciB0YXJnZXQsIHBlciBwcm9wZXJ0eVxyXG4gICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGFyZ2V0cy5sZW5ndGg7IHQrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBvcHMgPSBHZXRWYWx1ZU9wKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IFR3ZWVuRGF0YShcclxuICAgICAgICAgICAgICAgIHRhcmdldHNbdF0sXHJcbiAgICAgICAgICAgICAgICB0LFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgb3BzLmdldEVuZCxcclxuICAgICAgICAgICAgICAgIG9wcy5nZXRTdGFydCxcclxuICAgICAgICAgICAgICAgIG9wcy5nZXRBY3RpdmUsXHJcbiAgICAgICAgICAgICAgICBHZXRFYXNlRnVuY3Rpb24oR2V0VmFsdWUodmFsdWUsICdlYXNlJywgZWFzZSksIGVhc2VQYXJhbXMpLFxyXG4gICAgICAgICAgICAgICAgR2V0TmV3VmFsdWUodmFsdWUsICdkZWxheScsIGRlbGF5KSxcclxuICAgICAgICAgICAgICAgIEdldE5ld1ZhbHVlKHZhbHVlLCAnZHVyYXRpb24nLCBkdXJhdGlvbiksXHJcbiAgICAgICAgICAgICAgICBHZXRCb29sZWFuKHZhbHVlLCAneW95bycsIHlveW8pLFxyXG4gICAgICAgICAgICAgICAgR2V0TmV3VmFsdWUodmFsdWUsICdob2xkJywgaG9sZCksXHJcbiAgICAgICAgICAgICAgICBHZXROZXdWYWx1ZSh2YWx1ZSwgJ3JlcGVhdCcsIHJlcGVhdCksXHJcbiAgICAgICAgICAgICAgICBHZXROZXdWYWx1ZSh2YWx1ZSwgJ3JlcGVhdERlbGF5JywgcmVwZWF0RGVsYXkpLFxyXG4gICAgICAgICAgICAgICAgR2V0Qm9vbGVhbih2YWx1ZSwgJ2ZsaXBYJywgZmxpcFgpLFxyXG4gICAgICAgICAgICAgICAgR2V0Qm9vbGVhbih2YWx1ZSwgJ2ZsaXBZJywgZmxpcFkpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBkYXRhLnB1c2godHdlZW5EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHR3ZWVuID0gbmV3IFR3ZWVuKHBhcmVudCwgZGF0YSwgdGFyZ2V0cyk7XHJcblxyXG4gICAgdHdlZW4ub2Zmc2V0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdvZmZzZXQnLCBudWxsKTtcclxuICAgIHR3ZWVuLmNvbXBsZXRlRGVsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2NvbXBsZXRlRGVsYXknLCAwKTtcclxuICAgIHR3ZWVuLmxvb3AgPSBNYXRoLnJvdW5kKEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnbG9vcCcsIDApKTtcclxuICAgIHR3ZWVuLmxvb3BEZWxheSA9IE1hdGgucm91bmQoR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdsb29wRGVsYXknLCAwKSk7XHJcbiAgICB0d2Vlbi5wYXVzZWQgPSBHZXRCb29sZWFuKGNvbmZpZywgJ3BhdXNlZCcsIGZhbHNlKTtcclxuICAgIHR3ZWVuLnVzZUZyYW1lcyA9IEdldEJvb2xlYW4oY29uZmlnLCAndXNlRnJhbWVzJywgZmFsc2UpO1xyXG5cclxuICAgIC8vICBTZXQgdGhlIENhbGxiYWNrc1xyXG4gICAgdmFyIHNjb3BlID0gR2V0VmFsdWUoY29uZmlnLCAnY2FsbGJhY2tTY29wZScsIHR3ZWVuKTtcclxuXHJcbiAgICAvLyAgQ2FsbGJhY2sgcGFyYW1ldGVyczogMCA9IGEgcmVmZXJlbmNlIHRvIHRoZSBUd2VlbiBpdHNlbGYsIDEgPSB0aGUgdGFyZ2V0L3Mgb2YgdGhlIFR3ZWVuLCAuLi4geW91ciBvd24gcGFyYW1zXHJcbiAgICB2YXIgdHdlZW5BcnJheSA9IFsgdHdlZW4sIG51bGwgXTtcclxuXHJcbiAgICB2YXIgY2FsbGJhY2tzID0gVHdlZW4uVFlQRVM7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHR5cGUgPSBjYWxsYmFja3NbaV07XHJcblxyXG4gICAgICAgIHZhciBjYWxsYmFjayA9IEdldFZhbHVlKGNvbmZpZywgdHlwZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tTY29wZSA9IEdldFZhbHVlKGNvbmZpZywgdHlwZSArICdTY29wZScsIHNjb3BlKTtcclxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrUGFyYW1zID0gR2V0VmFsdWUoY29uZmlnLCB0eXBlICsgJ1BhcmFtcycsIFtdKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBUaGUgbnVsbCBpcyByZXNldCB0byBiZSB0aGUgVHdlZW4gdGFyZ2V0XHJcbiAgICAgICAgICAgIHR3ZWVuLnNldENhbGxiYWNrKHR5cGUsIGNhbGxiYWNrLCB0d2VlbkFycmF5LmNvbmNhdChjYWxsYmFja1BhcmFtcyksIGNhbGxiYWNrU2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHdlZW47XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFR3ZWVuQnVpbGRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/TweenBuilder.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/builders/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/tweens/builders/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tweens.Builders\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    GetBoolean: __webpack_require__(/*! ./GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\"),\r\n    GetEaseFunction: __webpack_require__(/*! ./GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\"),\r\n    GetNewValue: __webpack_require__(/*! ./GetNewValue */ \"./node_modules/phaser/src/tweens/builders/GetNewValue.js\"),\r\n    GetProps: __webpack_require__(/*! ./GetProps */ \"./node_modules/phaser/src/tweens/builders/GetProps.js\"),\r\n    GetTargets: __webpack_require__(/*! ./GetTargets */ \"./node_modules/phaser/src/tweens/builders/GetTargets.js\"),\r\n    GetTweens: __webpack_require__(/*! ./GetTweens */ \"./node_modules/phaser/src/tweens/builders/GetTweens.js\"),\r\n    GetValueOp: __webpack_require__(/*! ./GetValueOp */ \"./node_modules/phaser/src/tweens/builders/GetValueOp.js\"),\r\n    NumberTweenBuilder: __webpack_require__(/*! ./NumberTweenBuilder */ \"./node_modules/phaser/src/tweens/builders/NumberTweenBuilder.js\"),\r\n    TimelineBuilder: __webpack_require__(/*! ./TimelineBuilder */ \"./node_modules/phaser/src/tweens/builders/TimelineBuilder.js\"),\r\n    TweenBuilder: __webpack_require__(/*! ./TweenBuilder */ \"./node_modules/phaser/src/tweens/builders/TweenBuilder.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvYnVpbGRlcnMvaW5kZXguanM/OWUwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLHVGQUFtQjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQywrRUFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMseUVBQVk7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsNkVBQWM7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLDJFQUFhO0FBQ3BDLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFjO0FBQ3RDLHdCQUF3QixtQkFBTyxDQUFDLDZGQUFzQjtBQUN0RCxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsaUZBQWdCOztBQUUxQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9idWlsZGVycy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlR3ZWVucy5CdWlsZGVyc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEdldEJvb2xlYW46IHJlcXVpcmUoJy4vR2V0Qm9vbGVhbicpLFxyXG4gICAgR2V0RWFzZUZ1bmN0aW9uOiByZXF1aXJlKCcuL0dldEVhc2VGdW5jdGlvbicpLFxyXG4gICAgR2V0TmV3VmFsdWU6IHJlcXVpcmUoJy4vR2V0TmV3VmFsdWUnKSxcclxuICAgIEdldFByb3BzOiByZXF1aXJlKCcuL0dldFByb3BzJyksXHJcbiAgICBHZXRUYXJnZXRzOiByZXF1aXJlKCcuL0dldFRhcmdldHMnKSxcclxuICAgIEdldFR3ZWVuczogcmVxdWlyZSgnLi9HZXRUd2VlbnMnKSxcclxuICAgIEdldFZhbHVlT3A6IHJlcXVpcmUoJy4vR2V0VmFsdWVPcCcpLFxyXG4gICAgTnVtYmVyVHdlZW5CdWlsZGVyOiByZXF1aXJlKCcuL051bWJlclR3ZWVuQnVpbGRlcicpLFxyXG4gICAgVGltZWxpbmVCdWlsZGVyOiByZXF1aXJlKCcuL1RpbWVsaW5lQnVpbGRlcicpLFxyXG4gICAgVHdlZW5CdWlsZGVyOiByZXF1aXJlKCcuL1R3ZWVuQnVpbGRlcicpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/builders/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_COMPLETE_EVENT.js":
/*!**************************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_COMPLETE_EVENT.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Complete Event.\r\n * \r\n * This event is dispatched by a Tween Timeline when it completes playback.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('complete', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('complete', listener);\r\n * timeline.play();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX0NPTVBMRVRFX0VWRU5ULmpzPzhlZTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQy9ELElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRpbWVsaW5lIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgVHdlZW4gVGltZWxpbmUgd2hlbiBpdCBjb21wbGV0ZXMgcGxheWJhY2suXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFRpbWVsaW5lIGluc3RhbmNlIHVzaW5nIGBUaW1lbGluZS5vbignY29tcGxldGUnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdGltZWxpbmUgPSB0aGlzLnR3ZWVucy50aW1lbGluZSh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqICAgICB0d2VlbnM6IFsgeyB4OiA2MDAgfSwgeyB5OiA1MDAgfSwgeyB4OiAxMDAgfSwgeyB5OiAxMDAgfSBdXHJcbiAqIH0pO1xyXG4gKiB0aW1lbGluZS5vbignY29tcGxldGUnLCBsaXN0ZW5lcik7XHJcbiAqIHRpbWVsaW5lLnBsYXkoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5UaW1lbGluZX0gdGltZWxpbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGltZWxpbmUgaW5zdGFuY2UgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_LOOP_EVENT.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_LOOP_EVENT.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Loop Event.\r\n * \r\n * This event is dispatched by a Tween Timeline every time it loops.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('loop', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     loop: 4,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('loop', listener);\r\n * timeline.play();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_LOOP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'loop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX0xPT1BfRVZFTlQuanM/NTMzYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUMvRCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2V2ZW50cy9USU1FTElORV9MT09QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRpbWVsaW5lIExvb3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiBUaW1lbGluZSBldmVyeSB0aW1lIGl0IGxvb3BzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUaW1lbGluZSBpbnN0YW5jZSB1c2luZyBgVGltZWxpbmUub24oJ2xvb3AnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdGltZWxpbmUgPSB0aGlzLnR3ZWVucy50aW1lbGluZSh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqICAgICBsb29wOiA0LFxyXG4gKiAgICAgdHdlZW5zOiBbIHsgeDogNjAwIH0sIHsgeTogNTAwIH0sIHsgeDogMTAwIH0sIHsgeTogMTAwIH0gXVxyXG4gKiB9KTtcclxuICogdGltZWxpbmUub24oJ2xvb3AnLCBsaXN0ZW5lcik7XHJcbiAqIHRpbWVsaW5lLnBsYXkoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9MT09QXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlRpbWVsaW5lfSB0aW1lbGluZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lbGluZSBpbnN0YW5jZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnbG9vcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_LOOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_PAUSE_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_PAUSE_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Pause Event.\r\n * \r\n * This event is dispatched by a Tween Timeline when it is paused.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('pause', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('pause', listener);\r\n * // At some point later ...\r\n * timeline.pause();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_PAUSE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1BBVVNFX0VWRU5ULmpzP2VhYzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQy9ELElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9ldmVudHMvVElNRUxJTkVfUEFVU0VfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVGltZWxpbmUgUGF1c2UgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiBUaW1lbGluZSB3aGVuIGl0IGlzIHBhdXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgVGltZWxpbmUgaW5zdGFuY2UgdXNpbmcgYFRpbWVsaW5lLm9uKCdwYXVzZScsIGxpc3RlbmVyKWAsIGkuZS46XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciB0aW1lbGluZSA9IHRoaXMudHdlZW5zLnRpbWVsaW5lKHtcclxuICogICAgIHRhcmdldHM6IGltYWdlLFxyXG4gKiAgICAgZWFzZTogJ1Bvd2VyMScsXHJcbiAqICAgICBkdXJhdGlvbjogMzAwMCxcclxuICogICAgIHR3ZWVuczogWyB7IHg6IDYwMCB9LCB7IHk6IDUwMCB9LCB7IHg6IDEwMCB9LCB7IHk6IDEwMCB9IF1cclxuICogfSk7XHJcbiAqIHRpbWVsaW5lLm9uKCdwYXVzZScsIGxpc3RlbmVyKTtcclxuICogLy8gQXQgc29tZSBwb2ludCBsYXRlciAuLi5cclxuICogdGltZWxpbmUucGF1c2UoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9QQVVTRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5UaW1lbGluZX0gdGltZWxpbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGltZWxpbmUgaW5zdGFuY2UgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_PAUSE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_RESUME_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_RESUME_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Resume Event.\r\n * \r\n * This event is dispatched by a Tween Timeline when it is resumed from a paused state.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('resume', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('resume', listener);\r\n * // At some point later ...\r\n * timeline.resume();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_RESUME\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1JFU1VNRV9FVkVOVC5qcz9iZDE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUMvRCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1JFU1VNRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBUaW1lbGluZSBSZXN1bWUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiBUaW1lbGluZSB3aGVuIGl0IGlzIHJlc3VtZWQgZnJvbSBhIHBhdXNlZCBzdGF0ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgVGltZWxpbmUgaW5zdGFuY2UgdXNpbmcgYFRpbWVsaW5lLm9uKCdyZXN1bWUnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdGltZWxpbmUgPSB0aGlzLnR3ZWVucy50aW1lbGluZSh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqICAgICB0d2VlbnM6IFsgeyB4OiA2MDAgfSwgeyB5OiA1MDAgfSwgeyB4OiAxMDAgfSwgeyB5OiAxMDAgfSBdXHJcbiAqIH0pO1xyXG4gKiB0aW1lbGluZS5vbigncmVzdW1lJywgbGlzdGVuZXIpO1xyXG4gKiAvLyBBdCBzb21lIHBvaW50IGxhdGVyIC4uLlxyXG4gKiB0aW1lbGluZS5yZXN1bWUoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9SRVNVTUVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVGltZWxpbmV9IHRpbWVsaW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFRpbWVsaW5lIGluc3RhbmNlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZXN1bWUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_RESUME_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_START_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_START_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Start Event.\r\n * \r\n * This event is dispatched by a Tween Timeline when it starts.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('start', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('start', listener);\r\n * timeline.play();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1NUQVJUX0VWRU5ULmpzPzUwNTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQy9ELElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFRpbWVsaW5lIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgVHdlZW4gVGltZWxpbmUgd2hlbiBpdCBzdGFydHMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFRpbWVsaW5lIGluc3RhbmNlIHVzaW5nIGBUaW1lbGluZS5vbignc3RhcnQnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdGltZWxpbmUgPSB0aGlzLnR3ZWVucy50aW1lbGluZSh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqICAgICB0d2VlbnM6IFsgeyB4OiA2MDAgfSwgeyB5OiA1MDAgfSwgeyB4OiAxMDAgfSwgeyB5OiAxMDAgfSBdXHJcbiAqIH0pO1xyXG4gKiB0aW1lbGluZS5vbignc3RhcnQnLCBsaXN0ZW5lcik7XHJcbiAqIHRpbWVsaW5lLnBsYXkoKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUSU1FTElORV9TVEFSVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5UaW1lbGluZX0gdGltZWxpbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgVGltZWxpbmUgaW5zdGFuY2UgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TIMELINE_UPDATE_EVENT.js":
/*!************************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TIMELINE_UPDATE_EVENT.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Timeline Update Event.\r\n * \r\n * This event is dispatched by a Tween Timeline every time it updates, which can happen a lot of times per second,\r\n * so be careful about listening to this event unless you absolutely require it.\r\n * \r\n * Listen to it from a Timeline instance using `Timeline.on('update', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var timeline = this.tweens.timeline({\r\n *     targets: image,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     tweens: [ { x: 600 }, { y: 500 }, { x: 100 }, { y: 100 } ]\r\n * });\r\n * timeline.on('update', listener);\r\n * timeline.play();\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TIMELINE_UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Tweens.Timeline} timeline - A reference to the Timeline instance that emitted the event.\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1VQREFURV9FVkVOVC5qcz9mYzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQy9ELElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RJTUVMSU5FX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBUaW1lbGluZSBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiBUaW1lbGluZSBldmVyeSB0aW1lIGl0IHVwZGF0ZXMsIHdoaWNoIGNhbiBoYXBwZW4gYSBsb3Qgb2YgdGltZXMgcGVyIHNlY29uZCxcclxuICogc28gYmUgY2FyZWZ1bCBhYm91dCBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudCB1bmxlc3MgeW91IGFic29sdXRlbHkgcmVxdWlyZSBpdC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgVGltZWxpbmUgaW5zdGFuY2UgdXNpbmcgYFRpbWVsaW5lLm9uKCd1cGRhdGUnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdGltZWxpbmUgPSB0aGlzLnR3ZWVucy50aW1lbGluZSh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqICAgICB0d2VlbnM6IFsgeyB4OiA2MDAgfSwgeyB5OiA1MDAgfSwgeyB4OiAxMDAgfSwgeyB5OiAxMDAgfSBdXHJcbiAqIH0pO1xyXG4gKiB0aW1lbGluZS5vbigndXBkYXRlJywgbGlzdGVuZXIpO1xyXG4gKiB0aW1lbGluZS5wbGF5KCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlR3ZWVucy5FdmVudHMjVElNRUxJTkVfVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlRpbWVsaW5lfSB0aW1lbGluZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lbGluZSBpbnN0YW5jZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndXBkYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TIMELINE_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_ACTIVE_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_ACTIVE_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Active Event.\r\n * \r\n * This event is dispatched by a Tween when it becomes active within the Tween Manager.\r\n * \r\n * An 'active' Tween is one that is now progressing, although it may not yet be updating\r\n * any target properties, due to settings such as `delay`. If you need an event for when\r\n * the Tween starts actually updating its first property, see `TWEEN_START`.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('active', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000\r\n * });\r\n * tween.on('active', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_ACTIVE\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {any[]} targets - An array of references to the target/s the Tween is operating on.\r\n */\r\nmodule.exports = 'active';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX0FDVElWRV9FVkVOVC5qcz9hYzIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsTUFBTTtBQUNqQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2V2ZW50cy9UV0VFTl9BQ1RJVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVHdlZW4gQWN0aXZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgVHdlZW4gd2hlbiBpdCBiZWNvbWVzIGFjdGl2ZSB3aXRoaW4gdGhlIFR3ZWVuIE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBBbiAnYWN0aXZlJyBUd2VlbiBpcyBvbmUgdGhhdCBpcyBub3cgcHJvZ3Jlc3NpbmcsIGFsdGhvdWdoIGl0IG1heSBub3QgeWV0IGJlIHVwZGF0aW5nXHJcbiAqIGFueSB0YXJnZXQgcHJvcGVydGllcywgZHVlIHRvIHNldHRpbmdzIHN1Y2ggYXMgYGRlbGF5YC4gSWYgeW91IG5lZWQgYW4gZXZlbnQgZm9yIHdoZW5cclxuICogdGhlIFR3ZWVuIHN0YXJ0cyBhY3R1YWxseSB1cGRhdGluZyBpdHMgZmlyc3QgcHJvcGVydHksIHNlZSBgVFdFRU5fU1RBUlRgLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUd2VlbiBpbnN0YW5jZSB1c2luZyBgVHdlZW4ub24oJ2FjdGl2ZScsIGxpc3RlbmVyKWAsIGkuZS46XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciB0d2VlbiA9IHRoaXMudHdlZW5zLmFkZCh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIHg6IDUwMCxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDBcclxuICogfSk7XHJcbiAqIHR3ZWVuLm9uKCdhY3RpdmUnLCBsaXN0ZW5lcik7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlR3ZWVucy5FdmVudHMjVFdFRU5fQUNUSVZFXHJcbiAqIEBzaW5jZSAzLjE5LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgVHdlZW4gaW5zdGFuY2UgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICogQHBhcmFtIHthbnlbXX0gdGFyZ2V0cyAtIEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgdG8gdGhlIHRhcmdldC9zIHRoZSBUd2VlbiBpcyBvcGVyYXRpbmcgb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhY3RpdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_ACTIVE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_COMPLETE_EVENT.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_COMPLETE_EVENT.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Complete Event.\r\n * \r\n * This event is dispatched by a Tween when it completes playback entirely, factoring in repeats and loops.\r\n * \r\n * If the Tween has been set to loop or repeat infinitely, this event will not be dispatched\r\n * unless the `Tween.stop` method is called.\r\n * \r\n * If a Tween has a `completeDelay` set, this event will fire after that delay expires.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('complete', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000\r\n * });\r\n * tween.on('complete', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_COMPLETE\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {any[]} targets - An array of references to the target/s the Tween is operating on.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX0NPTVBMRVRFX0VWRU5ULmpzPzY2ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLE1BQU07QUFDakI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy9ldmVudHMvVFdFRU5fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVHdlZW4gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiB3aGVuIGl0IGNvbXBsZXRlcyBwbGF5YmFjayBlbnRpcmVseSwgZmFjdG9yaW5nIGluIHJlcGVhdHMgYW5kIGxvb3BzLlxyXG4gKiBcclxuICogSWYgdGhlIFR3ZWVuIGhhcyBiZWVuIHNldCB0byBsb29wIG9yIHJlcGVhdCBpbmZpbml0ZWx5LCB0aGlzIGV2ZW50IHdpbGwgbm90IGJlIGRpc3BhdGNoZWRcclxuICogdW5sZXNzIHRoZSBgVHdlZW4uc3RvcGAgbWV0aG9kIGlzIGNhbGxlZC5cclxuICogXHJcbiAqIElmIGEgVHdlZW4gaGFzIGEgYGNvbXBsZXRlRGVsYXlgIHNldCwgdGhpcyBldmVudCB3aWxsIGZpcmUgYWZ0ZXIgdGhhdCBkZWxheSBleHBpcmVzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUd2VlbiBpbnN0YW5jZSB1c2luZyBgVHdlZW4ub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHR3ZWVuID0gdGhpcy50d2VlbnMuYWRkKHtcclxuICogICAgIHRhcmdldHM6IGltYWdlLFxyXG4gKiAgICAgeDogNTAwLFxyXG4gKiAgICAgZWFzZTogJ1Bvd2VyMScsXHJcbiAqICAgICBkdXJhdGlvbjogMzAwMFxyXG4gKiB9KTtcclxuICogdHdlZW4ub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX0NPTVBMRVRFXHJcbiAqIEBzaW5jZSAzLjE5LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgVHdlZW4gaW5zdGFuY2UgdGhhdCBlbWl0dGVkIHRoZSBldmVudC5cclxuICogQHBhcmFtIHthbnlbXX0gdGFyZ2V0cyAtIEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgdG8gdGhlIHRhcmdldC9zIHRoZSBUd2VlbiBpcyBvcGVyYXRpbmcgb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjb21wbGV0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_COMPLETE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_LOOP_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_LOOP_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Loop Event.\r\n * \r\n * This event is dispatched by a Tween when it loops.\r\n * \r\n * This event will only be dispatched if the Tween has a loop count set.\r\n * \r\n * If a Tween has a `loopDelay` set, this event will fire after that delay expires.\r\n * \r\n * The difference between `loop` and `repeat` is that `repeat` is a property setting,\r\n * where-as `loop` applies to the entire Tween.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('loop', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     loop: 6\r\n * });\r\n * tween.on('loop', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_LOOP\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {any[]} targets - An array of references to the target/s the Tween is operating on.\r\n */\r\nmodule.exports = 'loop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX0xPT1BfRVZFTlQuanM/NDMzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsTUFBTTtBQUNqQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2V2ZW50cy9UV0VFTl9MT09QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFR3ZWVuIExvb3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiB3aGVuIGl0IGxvb3BzLlxyXG4gKiBcclxuICogVGhpcyBldmVudCB3aWxsIG9ubHkgYmUgZGlzcGF0Y2hlZCBpZiB0aGUgVHdlZW4gaGFzIGEgbG9vcCBjb3VudCBzZXQuXHJcbiAqIFxyXG4gKiBJZiBhIFR3ZWVuIGhhcyBhIGBsb29wRGVsYXlgIHNldCwgdGhpcyBldmVudCB3aWxsIGZpcmUgYWZ0ZXIgdGhhdCBkZWxheSBleHBpcmVzLlxyXG4gKiBcclxuICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgbG9vcGAgYW5kIGByZXBlYXRgIGlzIHRoYXQgYHJlcGVhdGAgaXMgYSBwcm9wZXJ0eSBzZXR0aW5nLFxyXG4gKiB3aGVyZS1hcyBgbG9vcGAgYXBwbGllcyB0byB0aGUgZW50aXJlIFR3ZWVuLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUd2VlbiBpbnN0YW5jZSB1c2luZyBgVHdlZW4ub24oJ2xvb3AnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdHdlZW4gPSB0aGlzLnR3ZWVucy5hZGQoe1xyXG4gKiAgICAgdGFyZ2V0czogaW1hZ2UsXHJcbiAqICAgICB4OiA1MDAsXHJcbiAqICAgICBlYXNlOiAnUG93ZXIxJyxcclxuICogICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gKiAgICAgbG9vcDogNlxyXG4gKiB9KTtcclxuICogdHdlZW4ub24oJ2xvb3AnLCBsaXN0ZW5lcik7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlR3ZWVucy5FdmVudHMjVFdFRU5fTE9PUFxyXG4gKiBAc2luY2UgMy4xOS4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW59IHR3ZWVuIC0gQSByZWZlcmVuY2UgdG8gdGhlIFR3ZWVuIGluc3RhbmNlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7YW55W119IHRhcmdldHMgLSBBbiBhcnJheSBvZiByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQvcyB0aGUgVHdlZW4gaXMgb3BlcmF0aW5nIG9uLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnbG9vcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_LOOP_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_REPEAT_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_REPEAT_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Repeat Event.\r\n * \r\n * This event is dispatched by a Tween when one of the properties it is tweening repeats.\r\n * \r\n * This event will only be dispatched if the Tween has a property with a repeat count set.\r\n * \r\n * If a Tween has a `repeatDelay` set, this event will fire after that delay expires.\r\n * \r\n * The difference between `loop` and `repeat` is that `repeat` is a property setting,\r\n * where-as `loop` applies to the entire Tween.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('repeat', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     repeat: 4\r\n * });\r\n * tween.on('repeat', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_REPEAT\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {string} key - The key of the property that just repeated.\r\n * @param {any} target - The target that the property just repeated on.\r\n */\r\nmodule.exports = 'repeat';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1JFUEVBVF9FVkVOVC5qcz8xNjFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1JFUEVBVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBUd2VlbiBSZXBlYXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBUd2VlbiB3aGVuIG9uZSBvZiB0aGUgcHJvcGVydGllcyBpdCBpcyB0d2VlbmluZyByZXBlYXRzLlxyXG4gKiBcclxuICogVGhpcyBldmVudCB3aWxsIG9ubHkgYmUgZGlzcGF0Y2hlZCBpZiB0aGUgVHdlZW4gaGFzIGEgcHJvcGVydHkgd2l0aCBhIHJlcGVhdCBjb3VudCBzZXQuXHJcbiAqIFxyXG4gKiBJZiBhIFR3ZWVuIGhhcyBhIGByZXBlYXREZWxheWAgc2V0LCB0aGlzIGV2ZW50IHdpbGwgZmlyZSBhZnRlciB0aGF0IGRlbGF5IGV4cGlyZXMuXHJcbiAqIFxyXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBsb29wYCBhbmQgYHJlcGVhdGAgaXMgdGhhdCBgcmVwZWF0YCBpcyBhIHByb3BlcnR5IHNldHRpbmcsXHJcbiAqIHdoZXJlLWFzIGBsb29wYCBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgVHdlZW4uXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFR3ZWVuIGluc3RhbmNlIHVzaW5nIGBUd2Vlbi5vbigncmVwZWF0JywgbGlzdGVuZXIpYCwgaS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHR3ZWVuID0gdGhpcy50d2VlbnMuYWRkKHtcclxuICogICAgIHRhcmdldHM6IGltYWdlLFxyXG4gKiAgICAgeDogNTAwLFxyXG4gKiAgICAgZWFzZTogJ1Bvd2VyMScsXHJcbiAqICAgICBkdXJhdGlvbjogMzAwMCxcclxuICogICAgIHJlcGVhdDogNFxyXG4gKiB9KTtcclxuICogdHdlZW4ub24oJ3JlcGVhdCcsIGxpc3RlbmVyKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9SRVBFQVRcclxuICogQHNpbmNlIDMuMTkuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSB0d2VlbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUd2VlbiBpbnN0YW5jZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdGhhdCBqdXN0IHJlcGVhdGVkLlxyXG4gKiBAcGFyYW0ge2FueX0gdGFyZ2V0IC0gVGhlIHRhcmdldCB0aGF0IHRoZSBwcm9wZXJ0eSBqdXN0IHJlcGVhdGVkIG9uLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVwZWF0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_REPEAT_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_START_EVENT.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_START_EVENT.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Start Event.\r\n * \r\n * This event is dispatched by a Tween when it starts tweening its first property.\r\n * \r\n * A Tween will only emit this event once, as it can only start once.\r\n * \r\n * If a Tween has a `delay` set, this event will fire after that delay expires.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('start', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000\r\n * });\r\n * tween.on('start', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_START\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {any[]} targets - An array of references to the target/s the Tween is operating on.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1NUQVJUX0VWRU5ULmpzPzRkZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFR3ZWVuIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgVHdlZW4gd2hlbiBpdCBzdGFydHMgdHdlZW5pbmcgaXRzIGZpcnN0IHByb3BlcnR5LlxyXG4gKiBcclxuICogQSBUd2VlbiB3aWxsIG9ubHkgZW1pdCB0aGlzIGV2ZW50IG9uY2UsIGFzIGl0IGNhbiBvbmx5IHN0YXJ0IG9uY2UuXHJcbiAqIFxyXG4gKiBJZiBhIFR3ZWVuIGhhcyBhIGBkZWxheWAgc2V0LCB0aGlzIGV2ZW50IHdpbGwgZmlyZSBhZnRlciB0aGF0IGRlbGF5IGV4cGlyZXMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFR3ZWVuIGluc3RhbmNlIHVzaW5nIGBUd2Vlbi5vbignc3RhcnQnLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdHdlZW4gPSB0aGlzLnR3ZWVucy5hZGQoe1xyXG4gKiAgICAgdGFyZ2V0czogaW1hZ2UsXHJcbiAqICAgICB4OiA1MDAsXHJcbiAqICAgICBlYXNlOiAnUG93ZXIxJyxcclxuICogICAgIGR1cmF0aW9uOiAzMDAwXHJcbiAqIH0pO1xyXG4gKiB0d2Vlbi5vbignc3RhcnQnLCBsaXN0ZW5lcik7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlR3ZWVucy5FdmVudHMjVFdFRU5fU1RBUlRcclxuICogQHNpbmNlIDMuMTkuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSB0d2VlbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUd2VlbiBpbnN0YW5jZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gKiBAcGFyYW0ge2FueVtdfSB0YXJnZXRzIC0gQW4gYXJyYXkgb2YgcmVmZXJlbmNlcyB0byB0aGUgdGFyZ2V0L3MgdGhlIFR3ZWVuIGlzIG9wZXJhdGluZyBvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_START_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_UPDATE_EVENT.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_UPDATE_EVENT.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Update Event.\r\n * \r\n * This event is dispatched by a Tween every time it updates _any_ of the properties it is tweening.\r\n * \r\n * A Tween that is changing 3 properties of a target will emit this event 3 times per change, once per property.\r\n * \r\n * **Note:** This is a very high frequency event and may be dispatched multiple times, every single frame.\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('update', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n * });\r\n * tween.on('update', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_UPDATE\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {string} key - The property that was updated, i.e. `x` or `scale`.\r\n * @param {any} target - The target object that was updated. Usually a Game Object, but can be of any type.\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1VQREFURV9FVkVOVC5qcz8wOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQixXQUFXLElBQUk7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2V2ZW50cy9UV0VFTl9VUERBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVHdlZW4gVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgVHdlZW4gZXZlcnkgdGltZSBpdCB1cGRhdGVzIF9hbnlfIG9mIHRoZSBwcm9wZXJ0aWVzIGl0IGlzIHR3ZWVuaW5nLlxyXG4gKiBcclxuICogQSBUd2VlbiB0aGF0IGlzIGNoYW5naW5nIDMgcHJvcGVydGllcyBvZiBhIHRhcmdldCB3aWxsIGVtaXQgdGhpcyBldmVudCAzIHRpbWVzIHBlciBjaGFuZ2UsIG9uY2UgcGVyIHByb3BlcnR5LlxyXG4gKiBcclxuICogKipOb3RlOioqIFRoaXMgaXMgYSB2ZXJ5IGhpZ2ggZnJlcXVlbmN5IGV2ZW50IGFuZCBtYXkgYmUgZGlzcGF0Y2hlZCBtdWx0aXBsZSB0aW1lcywgZXZlcnkgc2luZ2xlIGZyYW1lLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUd2VlbiBpbnN0YW5jZSB1c2luZyBgVHdlZW4ub24oJ3VwZGF0ZScsIGxpc3RlbmVyKWAsIGkuZS46XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciB0d2VlbiA9IHRoaXMudHdlZW5zLmFkZCh7XHJcbiAqICAgICB0YXJnZXRzOiBpbWFnZSxcclxuICogICAgIHg6IDUwMCxcclxuICogICAgIGVhc2U6ICdQb3dlcjEnLFxyXG4gKiAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAqIH0pO1xyXG4gKiB0d2Vlbi5vbigndXBkYXRlJywgbGlzdGVuZXIpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX1VQREFURVxyXG4gKiBAc2luY2UgMy4xOS4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW59IHR3ZWVuIC0gQSByZWZlcmVuY2UgdG8gdGhlIFR3ZWVuIGluc3RhbmNlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgdXBkYXRlZCwgaS5lLiBgeGAgb3IgYHNjYWxlYC5cclxuICogQHBhcmFtIHthbnl9IHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRoYXQgd2FzIHVwZGF0ZWQuIFVzdWFsbHkgYSBHYW1lIE9iamVjdCwgYnV0IGNhbiBiZSBvZiBhbnkgdHlwZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_UPDATE_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/TWEEN_YOYO_EVENT.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/TWEEN_YOYO_EVENT.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Tween Yoyo Event.\r\n * \r\n * This event is dispatched by a Tween whenever a property it is tweening yoyos.\r\n * \r\n * This event will only be dispatched if the Tween has a property with `yoyo` set.\r\n * \r\n * If the Tween has a `hold` value, this event is dispatched when the hold expires.\r\n * \r\n * This event is dispatched for every property, and for every target, that yoyos.\r\n * For example, if a Tween was updating 2 properties and had 10 targets, this event\r\n * would be dispatched 20 times (twice per target). So be careful how you use it!\r\n * \r\n * Listen to it from a Tween instance using `Tween.on('yoyo', listener)`, i.e.:\r\n * \r\n * ```javascript\r\n * var tween = this.tweens.add({\r\n *     targets: image,\r\n *     x: 500,\r\n *     ease: 'Power1',\r\n *     duration: 3000,\r\n *     yoyo: true\r\n * });\r\n * tween.on('yoyo', listener);\r\n * ```\r\n *\r\n * @event Phaser.Tweens.Events#TWEEN_YOYO\r\n * @since 3.19.0\r\n * \r\n * @param {Phaser.Tweens.Tween} tween - A reference to the Tween instance that emitted the event.\r\n * @param {string} key - The property that yoyo'd, i.e. `x` or `scale`.\r\n * @param {any} target - The target object that was yoyo'd. Usually a Game Object, but can be of any type.\r\n */\r\nmodule.exports = 'yoyo';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1lPWU9fRVZFTlQuanM/M2IwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL1RXRUVOX1lPWU9fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVHdlZW4gWW95byBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFR3ZWVuIHdoZW5ldmVyIGEgcHJvcGVydHkgaXQgaXMgdHdlZW5pbmcgeW95b3MuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IHdpbGwgb25seSBiZSBkaXNwYXRjaGVkIGlmIHRoZSBUd2VlbiBoYXMgYSBwcm9wZXJ0eSB3aXRoIGB5b3lvYCBzZXQuXHJcbiAqIFxyXG4gKiBJZiB0aGUgVHdlZW4gaGFzIGEgYGhvbGRgIHZhbHVlLCB0aGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgaG9sZCBleHBpcmVzLlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGZvciBldmVyeSBwcm9wZXJ0eSwgYW5kIGZvciBldmVyeSB0YXJnZXQsIHRoYXQgeW95b3MuXHJcbiAqIEZvciBleGFtcGxlLCBpZiBhIFR3ZWVuIHdhcyB1cGRhdGluZyAyIHByb3BlcnRpZXMgYW5kIGhhZCAxMCB0YXJnZXRzLCB0aGlzIGV2ZW50XHJcbiAqIHdvdWxkIGJlIGRpc3BhdGNoZWQgMjAgdGltZXMgKHR3aWNlIHBlciB0YXJnZXQpLiBTbyBiZSBjYXJlZnVsIGhvdyB5b3UgdXNlIGl0IVxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBUd2VlbiBpbnN0YW5jZSB1c2luZyBgVHdlZW4ub24oJ3lveW8nLCBsaXN0ZW5lcilgLCBpLmUuOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgdHdlZW4gPSB0aGlzLnR3ZWVucy5hZGQoe1xyXG4gKiAgICAgdGFyZ2V0czogaW1hZ2UsXHJcbiAqICAgICB4OiA1MDAsXHJcbiAqICAgICBlYXNlOiAnUG93ZXIxJyxcclxuICogICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gKiAgICAgeW95bzogdHJ1ZVxyXG4gKiB9KTtcclxuICogdHdlZW4ub24oJ3lveW8nLCBsaXN0ZW5lcik7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLlR3ZWVucy5FdmVudHMjVFdFRU5fWU9ZT1xyXG4gKiBAc2luY2UgMy4xOS4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Ud2VlbnMuVHdlZW59IHR3ZWVuIC0gQSByZWZlcmVuY2UgdG8gdGhlIFR3ZWVuIGluc3RhbmNlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdGhhdCB5b3lvJ2QsIGkuZS4gYHhgIG9yIGBzY2FsZWAuXHJcbiAqIEBwYXJhbSB7YW55fSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0aGF0IHdhcyB5b3lvJ2QuIFVzdWFsbHkgYSBHYW1lIE9iamVjdCwgYnV0IGNhbiBiZSBvZiBhbnkgdHlwZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3lveW8nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/TWEEN_YOYO_EVENT.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/events/index.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/tweens/events/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Tweens.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    TIMELINE_COMPLETE: __webpack_require__(/*! ./TIMELINE_COMPLETE_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_COMPLETE_EVENT.js\"),\r\n    TIMELINE_LOOP: __webpack_require__(/*! ./TIMELINE_LOOP_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_LOOP_EVENT.js\"),\r\n    TIMELINE_PAUSE: __webpack_require__(/*! ./TIMELINE_PAUSE_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_PAUSE_EVENT.js\"),\r\n    TIMELINE_RESUME: __webpack_require__(/*! ./TIMELINE_RESUME_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_RESUME_EVENT.js\"),\r\n    TIMELINE_START: __webpack_require__(/*! ./TIMELINE_START_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_START_EVENT.js\"),\r\n    TIMELINE_UPDATE: __webpack_require__(/*! ./TIMELINE_UPDATE_EVENT */ \"./node_modules/phaser/src/tweens/events/TIMELINE_UPDATE_EVENT.js\"),\r\n    TWEEN_ACTIVE: __webpack_require__(/*! ./TWEEN_ACTIVE_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_ACTIVE_EVENT.js\"),\r\n    TWEEN_COMPLETE: __webpack_require__(/*! ./TWEEN_COMPLETE_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_COMPLETE_EVENT.js\"),\r\n    TWEEN_LOOP: __webpack_require__(/*! ./TWEEN_LOOP_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_LOOP_EVENT.js\"),\r\n    TWEEN_REPEAT: __webpack_require__(/*! ./TWEEN_REPEAT_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_REPEAT_EVENT.js\"),\r\n    TWEEN_START: __webpack_require__(/*! ./TWEEN_START_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_START_EVENT.js\"),\r\n    TWEEN_UPDATE: __webpack_require__(/*! ./TWEEN_UPDATE_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_UPDATE_EVENT.js\"),\r\n    TWEEN_YOYO: __webpack_require__(/*! ./TWEEN_YOYO_EVENT */ \"./node_modules/phaser/src/tweens/events/TWEEN_YOYO_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvZXZlbnRzL2luZGV4LmpzP2VlZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxxR0FBMkI7QUFDMUQsbUJBQW1CLG1CQUFPLENBQUMsNkZBQXVCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLCtGQUF3QjtBQUNwRCxxQkFBcUIsbUJBQU8sQ0FBQyxpR0FBeUI7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsK0ZBQXdCO0FBQ3BELHFCQUFxQixtQkFBTyxDQUFDLGlHQUF5QjtBQUN0RCxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBc0I7QUFDaEQsb0JBQW9CLG1CQUFPLENBQUMsK0ZBQXdCO0FBQ3BELGdCQUFnQixtQkFBTyxDQUFDLHVGQUFvQjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBc0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMseUZBQXFCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLDJGQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyx1RkFBb0I7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLlR3ZWVucy5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBUSU1FTElORV9DT01QTEVURTogcmVxdWlyZSgnLi9USU1FTElORV9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgVElNRUxJTkVfTE9PUDogcmVxdWlyZSgnLi9USU1FTElORV9MT09QX0VWRU5UJyksXHJcbiAgICBUSU1FTElORV9QQVVTRTogcmVxdWlyZSgnLi9USU1FTElORV9QQVVTRV9FVkVOVCcpLFxyXG4gICAgVElNRUxJTkVfUkVTVU1FOiByZXF1aXJlKCcuL1RJTUVMSU5FX1JFU1VNRV9FVkVOVCcpLFxyXG4gICAgVElNRUxJTkVfU1RBUlQ6IHJlcXVpcmUoJy4vVElNRUxJTkVfU1RBUlRfRVZFTlQnKSxcclxuICAgIFRJTUVMSU5FX1VQREFURTogcmVxdWlyZSgnLi9USU1FTElORV9VUERBVEVfRVZFTlQnKSxcclxuICAgIFRXRUVOX0FDVElWRTogcmVxdWlyZSgnLi9UV0VFTl9BQ1RJVkVfRVZFTlQnKSxcclxuICAgIFRXRUVOX0NPTVBMRVRFOiByZXF1aXJlKCcuL1RXRUVOX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBUV0VFTl9MT09QOiByZXF1aXJlKCcuL1RXRUVOX0xPT1BfRVZFTlQnKSxcclxuICAgIFRXRUVOX1JFUEVBVDogcmVxdWlyZSgnLi9UV0VFTl9SRVBFQVRfRVZFTlQnKSxcclxuICAgIFRXRUVOX1NUQVJUOiByZXF1aXJlKCcuL1RXRUVOX1NUQVJUX0VWRU5UJyksXHJcbiAgICBUV0VFTl9VUERBVEU6IHJlcXVpcmUoJy4vVFdFRU5fVVBEQVRFX0VWRU5UJyksXHJcbiAgICBUV0VFTl9ZT1lPOiByZXF1aXJlKCcuL1RXRUVOX1lPWU9fRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/events/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/index.js":
/*!*************************************************!*\
  !*** ./node_modules/phaser/src/tweens/index.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./tween/const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Tweens\r\n */\r\n\r\nvar Tweens = {\r\n\r\n    Builders: __webpack_require__(/*! ./builders */ \"./node_modules/phaser/src/tweens/builders/index.js\"),\r\n    Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/tweens/events/index.js\"),\r\n\r\n    TweenManager: __webpack_require__(/*! ./TweenManager */ \"./node_modules/phaser/src/tweens/TweenManager.js\"),\r\n    Tween: __webpack_require__(/*! ./tween/Tween */ \"./node_modules/phaser/src/tweens/tween/Tween.js\"),\r\n    TweenData: __webpack_require__(/*! ./tween/TweenData */ \"./node_modules/phaser/src/tweens/tween/TweenData.js\"),\r\n    Timeline: __webpack_require__(/*! ./Timeline */ \"./node_modules/phaser/src/tweens/Timeline.js\")\r\n\r\n};\r\n\r\n//   Merge in the consts\r\nTweens = Extend(false, Tweens, CONST);\r\n\r\nmodule.exports = Tweens;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvaW5kZXguanM/OTUwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxnRkFBd0I7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsc0VBQVk7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLGtFQUFVOztBQUU5QixrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBZ0I7QUFDMUMsV0FBVyxtQkFBTyxDQUFDLHNFQUFlO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQyw4RUFBbUI7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLGdFQUFZOztBQUVsQzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuL3R3ZWVuL2NvbnN0Jyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVHdlZW5zXHJcbiAqL1xyXG5cclxudmFyIFR3ZWVucyA9IHtcclxuXHJcbiAgICBCdWlsZGVyczogcmVxdWlyZSgnLi9idWlsZGVycycpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG5cclxuICAgIFR3ZWVuTWFuYWdlcjogcmVxdWlyZSgnLi9Ud2Vlbk1hbmFnZXInKSxcclxuICAgIFR3ZWVuOiByZXF1aXJlKCcuL3R3ZWVuL1R3ZWVuJyksXHJcbiAgICBUd2VlbkRhdGE6IHJlcXVpcmUoJy4vdHdlZW4vVHdlZW5EYXRhJyksXHJcbiAgICBUaW1lbGluZTogcmVxdWlyZSgnLi9UaW1lbGluZScpXHJcblxyXG59O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcblR3ZWVucyA9IEV4dGVuZChmYWxzZSwgVHdlZW5zLCBDT05TVCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFR3ZWVucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/tween/Defaults.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/tweens/tween/Defaults.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.Types.Tweens.TweenConfigDefaults\r\n * @since 3.0.0\r\n * \r\n * @property {(object|object[])} targets - The object, or an array of objects, to run the tween on.\r\n * @property {number} [delay=0] - The number of milliseconds to delay before the tween will start.\r\n * @property {number} [duration=1000] - The duration of the tween in milliseconds.\r\n * @property {string} [ease='Power0'] - The easing equation to use for the tween.\r\n * @property {array} [easeParams] - Optional easing parameters.\r\n * @property {number} [hold=0] - The number of milliseconds to hold the tween for before yoyo'ing.\r\n * @property {number} [repeat=0] - The number of times to repeat the tween.\r\n * @property {number} [repeatDelay=0] - The number of milliseconds to pause before a tween will repeat.\r\n * @property {boolean} [yoyo=false] - Should the tween complete, then reverse the values incrementally to get back to the starting tween values? The reverse tweening will also take `duration` milliseconds to complete.\r\n * @property {boolean} [flipX=false] - Horizontally flip the target of the Tween when it completes (before it yoyos, if set to do so). Only works for targets that support the `flipX` property.\r\n * @property {boolean} [flipY=false] - Vertically flip the target of the Tween when it completes (before it yoyos, if set to do so). Only works for targets that support the `flipY` property.\r\n */\r\n\r\nvar TWEEN_DEFAULTS = {\r\n    targets: null,\r\n    delay: 0,\r\n    duration: 1000,\r\n    ease: 'Power0',\r\n    easeParams: null,\r\n    hold: 0,\r\n    repeat: 0,\r\n    repeatDelay: 0,\r\n    yoyo: false,\r\n    flipX: false,\r\n    flipY: false\r\n};\r\n\r\nmodule.exports = TWEEN_DEFAULTS;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vRGVmYXVsdHMuanM/ODI3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy90d2Vlbi9EZWZhdWx0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5Db25maWdEZWZhdWx0c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7KG9iamVjdHxvYmplY3RbXSl9IHRhcmdldHMgLSBUaGUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiBvYmplY3RzLCB0byBydW4gdGhlIHR3ZWVuIG9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2RlbGF5PTBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHRoZSB0d2VlbiB3aWxsIHN0YXJ0LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2R1cmF0aW9uPTEwMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSB0d2VlbiBpbiBtaWxsaXNlY29uZHMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZWFzZT0nUG93ZXIwJ10gLSBUaGUgZWFzaW5nIGVxdWF0aW9uIHRvIHVzZSBmb3IgdGhlIHR3ZWVuLlxyXG4gKiBAcHJvcGVydHkge2FycmF5fSBbZWFzZVBhcmFtc10gLSBPcHRpb25hbCBlYXNpbmcgcGFyYW1ldGVycy5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtob2xkPTBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gaG9sZCB0aGUgdHdlZW4gZm9yIGJlZm9yZSB5b3lvJ2luZy5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXBlYXQ9MF0gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgdHdlZW4uXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVwZWF0RGVsYXk9MF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZWZvcmUgYSB0d2VlbiB3aWxsIHJlcGVhdC5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbeW95bz1mYWxzZV0gLSBTaG91bGQgdGhlIHR3ZWVuIGNvbXBsZXRlLCB0aGVuIHJldmVyc2UgdGhlIHZhbHVlcyBpbmNyZW1lbnRhbGx5IHRvIGdldCBiYWNrIHRvIHRoZSBzdGFydGluZyB0d2VlbiB2YWx1ZXM/IFRoZSByZXZlcnNlIHR3ZWVuaW5nIHdpbGwgYWxzbyB0YWtlIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzIHRvIGNvbXBsZXRlLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmbGlwWD1mYWxzZV0gLSBIb3Jpem9udGFsbHkgZmxpcCB0aGUgdGFyZ2V0IG9mIHRoZSBUd2VlbiB3aGVuIGl0IGNvbXBsZXRlcyAoYmVmb3JlIGl0IHlveW9zLCBpZiBzZXQgdG8gZG8gc28pLiBPbmx5IHdvcmtzIGZvciB0YXJnZXRzIHRoYXQgc3VwcG9ydCB0aGUgYGZsaXBYYCBwcm9wZXJ0eS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gVmVydGljYWxseSBmbGlwIHRoZSB0YXJnZXQgb2YgdGhlIFR3ZWVuIHdoZW4gaXQgY29tcGxldGVzIChiZWZvcmUgaXQgeW95b3MsIGlmIHNldCB0byBkbyBzbykuIE9ubHkgd29ya3MgZm9yIHRhcmdldHMgdGhhdCBzdXBwb3J0IHRoZSBgZmxpcFlgIHByb3BlcnR5LlxyXG4gKi9cclxuXHJcbnZhciBUV0VFTl9ERUZBVUxUUyA9IHtcclxuICAgIHRhcmdldHM6IG51bGwsXHJcbiAgICBkZWxheTogMCxcclxuICAgIGR1cmF0aW9uOiAxMDAwLFxyXG4gICAgZWFzZTogJ1Bvd2VyMCcsXHJcbiAgICBlYXNlUGFyYW1zOiBudWxsLFxyXG4gICAgaG9sZDogMCxcclxuICAgIHJlcGVhdDogMCxcclxuICAgIHJlcGVhdERlbGF5OiAwLFxyXG4gICAgeW95bzogZmFsc2UsXHJcbiAgICBmbGlwWDogZmFsc2UsXHJcbiAgICBmbGlwWTogZmFsc2VcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVFdFRU5fREVGQVVMVFM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/tween/Defaults.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/tween/ReservedProps.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/tweens/tween/ReservedProps.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  RESERVED properties that a Tween config object uses\r\n\r\n//  completeDelay: The time the tween will wait before the onComplete event is dispatched once it has completed\r\n//  delay: The time the tween will wait before it first starts\r\n//  duration: The duration of the tween\r\n//  ease: The ease function used by the tween\r\n//  easeParams: The parameters to go with the ease function (if any)\r\n//  flipX: flip X the GameObject on tween end\r\n//  flipY: flip Y the GameObject on tween end//  hold: The time the tween will pause before running a yoyo\r\n//  hold: The time the tween will pause before running a yoyo\r\n//  loop: The time the tween will pause before starting either a yoyo or returning to the start for a repeat\r\n//  loopDelay: \r\n//  offset: Used when the Tween is part of a Timeline\r\n//  paused: Does the tween start in a paused state, or playing?\r\n//  props: The properties being tweened by the tween\r\n//  repeat: The number of times the tween will repeat itself (a value of 1 means the tween will play twice, as it repeated once)\r\n//  repeatDelay: The time the tween will pause for before starting a repeat. The tween holds in the start state.\r\n//  targets: The targets the tween is updating.\r\n//  useFrames: Use frames or milliseconds?\r\n//  yoyo: boolean - Does the tween reverse itself (yoyo) when it reaches the end?\r\n\r\nmodule.exports = [\r\n    'callbackScope',\r\n    'completeDelay',\r\n    'delay',\r\n    'duration',\r\n    'ease',\r\n    'easeParams',\r\n    'flipX',\r\n    'flipY',\r\n    'hold',\r\n    'loop',\r\n    'loopDelay',\r\n    'offset',\r\n    'onActive',\r\n    'onActiveParams',\r\n    'onActiveScope',\r\n    'onComplete',\r\n    'onCompleteParams',\r\n    'onCompleteScope',\r\n    'onLoop',\r\n    'onLoopParams',\r\n    'onLoopScope',\r\n    'onRepeat',\r\n    'onRepeatParams',\r\n    'onRepeatScope',\r\n    'onStart',\r\n    'onStartParams',\r\n    'onStartScope',\r\n    'onUpdate',\r\n    'onUpdateParams',\r\n    'onUpdateScope',\r\n    'onYoyo',\r\n    'onYoyoParams',\r\n    'onYoyoScope',\r\n    'paused',\r\n    'props',\r\n    'repeat',\r\n    'repeatDelay',\r\n    'targets',\r\n    'useFrames',\r\n    'yoyo'\r\n];\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vUmVzZXJ2ZWRQcm9wcy5qcz85Y2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdHdlZW5zL3R3ZWVuL1Jlc2VydmVkUHJvcHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBSRVNFUlZFRCBwcm9wZXJ0aWVzIHRoYXQgYSBUd2VlbiBjb25maWcgb2JqZWN0IHVzZXNcclxuXHJcbi8vICBjb21wbGV0ZURlbGF5OiBUaGUgdGltZSB0aGUgdHdlZW4gd2lsbCB3YWl0IGJlZm9yZSB0aGUgb25Db21wbGV0ZSBldmVudCBpcyBkaXNwYXRjaGVkIG9uY2UgaXQgaGFzIGNvbXBsZXRlZFxyXG4vLyAgZGVsYXk6IFRoZSB0aW1lIHRoZSB0d2VlbiB3aWxsIHdhaXQgYmVmb3JlIGl0IGZpcnN0IHN0YXJ0c1xyXG4vLyAgZHVyYXRpb246IFRoZSBkdXJhdGlvbiBvZiB0aGUgdHdlZW5cclxuLy8gIGVhc2U6IFRoZSBlYXNlIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIHR3ZWVuXHJcbi8vICBlYXNlUGFyYW1zOiBUaGUgcGFyYW1ldGVycyB0byBnbyB3aXRoIHRoZSBlYXNlIGZ1bmN0aW9uIChpZiBhbnkpXHJcbi8vICBmbGlwWDogZmxpcCBYIHRoZSBHYW1lT2JqZWN0IG9uIHR3ZWVuIGVuZFxyXG4vLyAgZmxpcFk6IGZsaXAgWSB0aGUgR2FtZU9iamVjdCBvbiB0d2VlbiBlbmQvLyAgaG9sZDogVGhlIHRpbWUgdGhlIHR3ZWVuIHdpbGwgcGF1c2UgYmVmb3JlIHJ1bm5pbmcgYSB5b3lvXHJcbi8vICBob2xkOiBUaGUgdGltZSB0aGUgdHdlZW4gd2lsbCBwYXVzZSBiZWZvcmUgcnVubmluZyBhIHlveW9cclxuLy8gIGxvb3A6IFRoZSB0aW1lIHRoZSB0d2VlbiB3aWxsIHBhdXNlIGJlZm9yZSBzdGFydGluZyBlaXRoZXIgYSB5b3lvIG9yIHJldHVybmluZyB0byB0aGUgc3RhcnQgZm9yIGEgcmVwZWF0XHJcbi8vICBsb29wRGVsYXk6IFxyXG4vLyAgb2Zmc2V0OiBVc2VkIHdoZW4gdGhlIFR3ZWVuIGlzIHBhcnQgb2YgYSBUaW1lbGluZVxyXG4vLyAgcGF1c2VkOiBEb2VzIHRoZSB0d2VlbiBzdGFydCBpbiBhIHBhdXNlZCBzdGF0ZSwgb3IgcGxheWluZz9cclxuLy8gIHByb3BzOiBUaGUgcHJvcGVydGllcyBiZWluZyB0d2VlbmVkIGJ5IHRoZSB0d2VlblxyXG4vLyAgcmVwZWF0OiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSB0d2VlbiB3aWxsIHJlcGVhdCBpdHNlbGYgKGEgdmFsdWUgb2YgMSBtZWFucyB0aGUgdHdlZW4gd2lsbCBwbGF5IHR3aWNlLCBhcyBpdCByZXBlYXRlZCBvbmNlKVxyXG4vLyAgcmVwZWF0RGVsYXk6IFRoZSB0aW1lIHRoZSB0d2VlbiB3aWxsIHBhdXNlIGZvciBiZWZvcmUgc3RhcnRpbmcgYSByZXBlYXQuIFRoZSB0d2VlbiBob2xkcyBpbiB0aGUgc3RhcnQgc3RhdGUuXHJcbi8vICB0YXJnZXRzOiBUaGUgdGFyZ2V0cyB0aGUgdHdlZW4gaXMgdXBkYXRpbmcuXHJcbi8vICB1c2VGcmFtZXM6IFVzZSBmcmFtZXMgb3IgbWlsbGlzZWNvbmRzP1xyXG4vLyAgeW95bzogYm9vbGVhbiAtIERvZXMgdGhlIHR3ZWVuIHJldmVyc2UgaXRzZWxmICh5b3lvKSB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZD9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gW1xyXG4gICAgJ2NhbGxiYWNrU2NvcGUnLFxyXG4gICAgJ2NvbXBsZXRlRGVsYXknLFxyXG4gICAgJ2RlbGF5JyxcclxuICAgICdkdXJhdGlvbicsXHJcbiAgICAnZWFzZScsXHJcbiAgICAnZWFzZVBhcmFtcycsXHJcbiAgICAnZmxpcFgnLFxyXG4gICAgJ2ZsaXBZJyxcclxuICAgICdob2xkJyxcclxuICAgICdsb29wJyxcclxuICAgICdsb29wRGVsYXknLFxyXG4gICAgJ29mZnNldCcsXHJcbiAgICAnb25BY3RpdmUnLFxyXG4gICAgJ29uQWN0aXZlUGFyYW1zJyxcclxuICAgICdvbkFjdGl2ZVNjb3BlJyxcclxuICAgICdvbkNvbXBsZXRlJyxcclxuICAgICdvbkNvbXBsZXRlUGFyYW1zJyxcclxuICAgICdvbkNvbXBsZXRlU2NvcGUnLFxyXG4gICAgJ29uTG9vcCcsXHJcbiAgICAnb25Mb29wUGFyYW1zJyxcclxuICAgICdvbkxvb3BTY29wZScsXHJcbiAgICAnb25SZXBlYXQnLFxyXG4gICAgJ29uUmVwZWF0UGFyYW1zJyxcclxuICAgICdvblJlcGVhdFNjb3BlJyxcclxuICAgICdvblN0YXJ0JyxcclxuICAgICdvblN0YXJ0UGFyYW1zJyxcclxuICAgICdvblN0YXJ0U2NvcGUnLFxyXG4gICAgJ29uVXBkYXRlJyxcclxuICAgICdvblVwZGF0ZVBhcmFtcycsXHJcbiAgICAnb25VcGRhdGVTY29wZScsXHJcbiAgICAnb25Zb3lvJyxcclxuICAgICdvbllveW9QYXJhbXMnLFxyXG4gICAgJ29uWW95b1Njb3BlJyxcclxuICAgICdwYXVzZWQnLFxyXG4gICAgJ3Byb3BzJyxcclxuICAgICdyZXBlYXQnLFxyXG4gICAgJ3JlcGVhdERlbGF5JyxcclxuICAgICd0YXJnZXRzJyxcclxuICAgICd1c2VGcmFtZXMnLFxyXG4gICAgJ3lveW8nXHJcbl07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/tween/ReservedProps.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/tween/Tween.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/tweens/tween/Tween.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/tweens/events/index.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../gameobjects/GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar TWEEN_CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Tween is able to manipulate the properties of one or more objects to any given value, based\r\n * on a duration and type of ease. They are rarely instantiated directly and instead should be\r\n * created via the TweenManager.\r\n *\r\n * @class Tween\r\n * @memberof Phaser.Tweens\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Tweens.TweenManager|Phaser.Tweens.Timeline)} parent - A reference to the parent of this Tween. Either the Tween Manager or a Tween Timeline instance.\r\n * @param {Phaser.Types.Tweens.TweenDataConfig[]} data - An array of TweenData objects, each containing a unique property to be tweened.\r\n * @param {array} targets - An array of targets to be tweened.\r\n */\r\nvar Tween = new Class({\r\n\r\n    Extends: EventEmitter,\r\n\r\n    initialize:\r\n\r\n    function Tween (parent, data, targets)\r\n    {\r\n        EventEmitter.call(this);\r\n\r\n        /**\r\n         * A reference to the parent of this Tween.\r\n         * Either the Tween Manager or a Tween Timeline instance.\r\n         *\r\n         * @name Phaser.Tweens.Tween#parent\r\n         * @type {(Phaser.Tweens.TweenManager|Phaser.Tweens.Timeline)}\r\n         * @since 3.0.0\r\n         */\r\n        this.parent = parent;\r\n\r\n        /**\r\n         * Is the parent of this Tween a Timeline?\r\n         *\r\n         * @name Phaser.Tweens.Tween#parentIsTimeline\r\n         * @type {boolean}\r\n         * @since 3.0.0\r\n         */\r\n        this.parentIsTimeline = parent.hasOwnProperty('isTimeline');\r\n\r\n        /**\r\n         * An array of TweenData objects, each containing a unique property and target being tweened.\r\n         *\r\n         * @name Phaser.Tweens.Tween#data\r\n         * @type {Phaser.Types.Tweens.TweenDataConfig[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.data = data;\r\n\r\n        /**\r\n         * The cached length of the data array.\r\n         *\r\n         * @name Phaser.Tweens.Tween#totalData\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.totalData = data.length;\r\n\r\n        /**\r\n         * An array of references to the target/s this Tween is operating on.\r\n         *\r\n         * @name Phaser.Tweens.Tween#targets\r\n         * @type {object[]}\r\n         * @since 3.0.0\r\n         */\r\n        this.targets = targets;\r\n\r\n        /**\r\n         * Cached target total (not necessarily the same as the data total)\r\n         *\r\n         * @name Phaser.Tweens.Tween#totalTargets\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.totalTargets = targets.length;\r\n\r\n        /**\r\n         * If `true` then duration, delay, etc values are all frame totals.\r\n         *\r\n         * @name Phaser.Tweens.Tween#useFrames\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.useFrames = false;\r\n\r\n        /**\r\n         * Scales the time applied to this Tween. A value of 1 runs in real-time. A value of 0.5 runs 50% slower, and so on.\r\n         * Value isn't used when calculating total duration of the tween, it's a run-time delta adjustment only.\r\n         *\r\n         * @name Phaser.Tweens.Tween#timeScale\r\n         * @type {number}\r\n         * @default 1\r\n         * @since 3.0.0\r\n         */\r\n        this.timeScale = 1;\r\n\r\n        /**\r\n         * Loop this tween? Can be -1 for an infinite loop, or an integer.\r\n         * When enabled it will play through ALL TweenDatas again. Use TweenData.repeat to loop a single element.\r\n         *\r\n         * @name Phaser.Tweens.Tween#loop\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loop = 0;\r\n\r\n        /**\r\n         * Time in ms/frames before the tween loops.\r\n         *\r\n         * @name Phaser.Tweens.Tween#loopDelay\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loopDelay = 0;\r\n\r\n        /**\r\n         * How many loops are left to run?\r\n         *\r\n         * @name Phaser.Tweens.Tween#loopCounter\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.loopCounter = 0;\r\n\r\n        /**\r\n         * Time in ms/frames before the 'onStart' event fires.\r\n         * This is the shortest `delay` value across all of the TweenDatas of this Tween.\r\n         *\r\n         * @name Phaser.Tweens.Tween#startDelay\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.19.0\r\n         */\r\n        this.startDelay = 0;\r\n\r\n        /**\r\n         * Has this Tween started playback yet?\r\n         * This boolean is toggled when the Tween leaves the 'delayed' state and starts running.\r\n         *\r\n         * @name Phaser.Tweens.Tween#hasStarted\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.hasStarted = false;\r\n\r\n        /**\r\n         * Is this Tween currently seeking?\r\n         * This boolean is toggled in the `Tween.seek` method.\r\n         * When a tween is seeking it will not dispatch any events or callbacks.\r\n         *\r\n         * @name Phaser.Tweens.Tween#isSeeking\r\n         * @type {boolean}\r\n         * @readonly\r\n         * @since 3.19.0\r\n         */\r\n        this.isSeeking = false;\r\n\r\n        /**\r\n         * Time in ms/frames before the 'onComplete' event fires. This never fires if loop = -1 (as it never completes)\r\n         *\r\n         * @name Phaser.Tweens.Tween#completeDelay\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.completeDelay = 0;\r\n\r\n        /**\r\n         * Countdown timer (used by timeline offset, loopDelay and completeDelay)\r\n         *\r\n         * @name Phaser.Tweens.Tween#countdown\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.countdown = 0;\r\n\r\n        /**\r\n         * Set only if this Tween is part of a Timeline.\r\n         *\r\n         * @name Phaser.Tweens.Tween#offset\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.offset = 0;\r\n\r\n        /**\r\n         * Set only if this Tween is part of a Timeline. The calculated offset amount.\r\n         *\r\n         * @name Phaser.Tweens.Tween#calculatedOffset\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.calculatedOffset = 0;\r\n\r\n        /**\r\n         * The current state of the tween\r\n         *\r\n         * @name Phaser.Tweens.Tween#state\r\n         * @type {integer}\r\n         * @since 3.0.0\r\n         */\r\n        this.state = TWEEN_CONST.PENDING_ADD;\r\n\r\n        /**\r\n         * The state of the tween when it was paused (used by Resume)\r\n         *\r\n         * @name Phaser.Tweens.Tween#_pausedState\r\n         * @type {integer}\r\n         * @private\r\n         * @since 3.0.0\r\n         */\r\n        this._pausedState = TWEEN_CONST.INIT;\r\n\r\n        /**\r\n         * Does the Tween start off paused? (if so it needs to be started with Tween.play)\r\n         *\r\n         * @name Phaser.Tweens.Tween#paused\r\n         * @type {boolean}\r\n         * @default false\r\n         * @since 3.0.0\r\n         */\r\n        this.paused = false;\r\n\r\n        /**\r\n         * Elapsed time in ms/frames of this run through the Tween.\r\n         *\r\n         * @name Phaser.Tweens.Tween#elapsed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.elapsed = 0;\r\n\r\n        /**\r\n         * Total elapsed time in ms/frames of the entire Tween, including looping.\r\n         *\r\n         * @name Phaser.Tweens.Tween#totalElapsed\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalElapsed = 0;\r\n\r\n        /**\r\n         * Time in ms/frames for the whole Tween to play through once, excluding loop amounts and loop delays.\r\n         *\r\n         * @name Phaser.Tweens.Tween#duration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.duration = 0;\r\n\r\n        /**\r\n         * Value between 0 and 1. The amount through the Tween, excluding loops.\r\n         *\r\n         * @name Phaser.Tweens.Tween#progress\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.progress = 0;\r\n\r\n        /**\r\n         * Time in ms/frames for the Tween to complete (including looping)\r\n         *\r\n         * @name Phaser.Tweens.Tween#totalDuration\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalDuration = 0;\r\n\r\n        /**\r\n         * Value between 0 and 1. The amount through the entire Tween, including looping.\r\n         *\r\n         * @name Phaser.Tweens.Tween#totalProgress\r\n         * @type {number}\r\n         * @default 0\r\n         * @since 3.0.0\r\n         */\r\n        this.totalProgress = 0;\r\n\r\n        /**\r\n         * An object containing the different Tween callback functions.\r\n         * \r\n         * You can either set these in the Tween config, or by calling the `Tween.setCallback` method.\r\n         * \r\n         * `onActive` When the Tween is moved from the pending to the active list in the Tween Manager, even if playback paused.\r\n         * `onStart` When the Tween starts playing after a delayed state. Will happen at the same time as `onActive` if it has no delay.\r\n         * `onYoyo` When a TweenData starts a yoyo. This happens _after_ the `hold` delay expires, if set.\r\n         * `onRepeat` When a TweenData repeats playback. This happens _after_ the `repeatDelay` expires, if set.\r\n         * `onComplete` When the Tween finishes playback fully or `Tween.stop` is called. Never invoked if tween is set to repeat infinitely.\r\n         * `onUpdate` When a TweenData updates a property on a source target during playback.\r\n         * `onLoop` When a Tween loops. This happens _after_ the `loopDelay` expires, if set.\r\n         *\r\n         * @name Phaser.Tweens.Tween#callbacks\r\n         * @type {object}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbacks = {\r\n            onActive: null,\r\n            onComplete: null,\r\n            onLoop: null,\r\n            onRepeat: null,\r\n            onStart: null,\r\n            onUpdate: null,\r\n            onYoyo: null\r\n        };\r\n\r\n        /**\r\n         * The context in which all callbacks are invoked.\r\n         *\r\n         * @name Phaser.Tweens.Tween#callbackScope\r\n         * @type {any}\r\n         * @since 3.0.0\r\n         */\r\n        this.callbackScope;\r\n    },\r\n\r\n    /**\t\r\n     * Returns the current value of the specified Tween Data.\r\n     *\r\n     * @method Phaser.Tweens.Tween#getValue\r\n     * @since 3.0.0\r\n     * \r\n     * @param {integer} [index=0] - The Tween Data to return the value from.\r\n     *\r\n     * @return {number} The value of the requested Tween Data.\r\n     */\t\r\n    getValue: function (index)\r\n    {\r\n        if (index === undefined) { index = 0; }\r\n\r\n        return this.data[index].current;\r\n    },\r\n\r\n    /**\r\n     * Set the scale the time applied to this Tween. A value of 1 runs in real-time. A value of 0.5 runs 50% slower, and so on.\r\n     *\r\n     * @method Phaser.Tweens.Tween#setTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} value - The scale factor for timescale.\r\n     *\r\n     * @return {this} - This Tween instance.\r\n     */\r\n    setTimeScale: function (value)\r\n    {\r\n        this.timeScale = value;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Returns the scale of the time applied to this Tween.\r\n     *\r\n     * @method Phaser.Tweens.Tween#getTimeScale\r\n     * @since 3.0.0\r\n     *\r\n     * @return {number} The timescale of this tween (between 0 and 1)\r\n     */\r\n    getTimeScale: function ()\r\n    {\r\n        return this.timeScale;\r\n    },\r\n\r\n    /**\r\n     * Checks if the Tween is currently active.\r\n     *\r\n     * @method Phaser.Tweens.Tween#isPlaying\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Tween is active, otherwise `false`.\r\n     */\r\n    isPlaying: function ()\r\n    {\r\n        return (this.state === TWEEN_CONST.ACTIVE);\r\n    },\r\n\r\n    /**\r\n     * Checks if the Tween is currently paused.\r\n     *\r\n     * @method Phaser.Tweens.Tween#isPaused\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} `true` if the Tween is paused, otherwise `false`.\r\n     */\r\n    isPaused: function ()\r\n    {\r\n        return (this.state === TWEEN_CONST.PAUSED);\r\n    },\r\n\r\n    /**\r\n     * See if this Tween is currently acting upon the given target.\r\n     *\r\n     * @method Phaser.Tweens.Tween#hasTarget\r\n     * @since 3.0.0\r\n     *\r\n     * @param {object} target - The target to check against this Tween.\r\n     *\r\n     * @return {boolean} `true` if the given target is a target of this Tween, otherwise `false`.\r\n     */\r\n    hasTarget: function (target)\r\n    {\r\n        return (this.targets.indexOf(target) !== -1);\r\n    },\r\n\r\n    /**\r\n     * Updates the 'end' value of the given property across all matching targets.\r\n     * \r\n     * Calling this does not adjust the duration of the tween, or the current progress.\r\n     * \r\n     * You can optionally tell it to set the 'start' value to be the current value (before the change).\r\n     *\r\n     * @method Phaser.Tweens.Tween#updateTo\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} key - The property to set the new value for.\r\n     * @param {*} value - The new value of the property.\r\n     * @param {boolean} [startToCurrent=false] - Should this change set the start value to be the current value?\r\n     *\r\n     * @return {this} - This Tween instance.\r\n     */\r\n    updateTo: function (key, value, startToCurrent)\r\n    {\r\n        if (startToCurrent === undefined) { startToCurrent = false; }\r\n\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tweenData = this.data[i];\r\n\r\n            if (tweenData.key === key)\r\n            {\r\n                tweenData.end = value;\r\n\r\n                if (startToCurrent)\r\n                {\r\n                    tweenData.start = tweenData.current;\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Restarts the tween from the beginning.\r\n     *\r\n     * @method Phaser.Tweens.Tween#restart\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    restart: function ()\r\n    {\r\n        //  Reset these so they're ready for the next update\r\n        this.elapsed = 0;\r\n        this.progress = 0;\r\n        this.totalElapsed = 0;\r\n        this.totalProgress = 0;\r\n\r\n        if (this.state === TWEEN_CONST.ACTIVE)\r\n        {\r\n            return this.seek(0);\r\n        }\r\n        else if (this.state === TWEEN_CONST.REMOVED)\r\n        {\r\n            this.seek(0);\r\n            this.parent.makeActive(this);\r\n\r\n            return this;\r\n        }\r\n        else if (this.state === TWEEN_CONST.PENDING_ADD)\r\n        {\r\n            return this;\r\n        }\r\n        else\r\n        {\r\n            return this.play();\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that calculates the overall duration of the Tween.\r\n     *\r\n     * @method Phaser.Tweens.Tween#calcDuration\r\n     * @since 3.0.0\r\n     */\r\n    calcDuration: function ()\r\n    {\r\n        var maxDuration = 0;\r\n        var minDelay = MATH_CONST.MAX_SAFE_INTEGER;\r\n\r\n        var data = this.data;\r\n\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tweenData = data[i];\r\n\r\n            //  Set t1 (duration + hold + yoyo)\r\n            tweenData.t1 = tweenData.duration + tweenData.hold;\r\n\r\n            if (tweenData.yoyo)\r\n            {\r\n                tweenData.t1 += tweenData.duration;\r\n            }\r\n\r\n            //  Set t2 (repeatDelay + duration + hold + yoyo)\r\n            tweenData.t2 = tweenData.t1 + tweenData.repeatDelay;\r\n\r\n            //  Total Duration\r\n            tweenData.totalDuration = tweenData.delay + tweenData.t1;\r\n\r\n            if (tweenData.repeat === -1)\r\n            {\r\n                tweenData.totalDuration += (tweenData.t2 * 999999999999);\r\n            }\r\n            else if (tweenData.repeat > 0)\r\n            {\r\n                tweenData.totalDuration += (tweenData.t2 * tweenData.repeat);\r\n            }\r\n\r\n            if (tweenData.totalDuration > maxDuration)\r\n            {\r\n                //  Get the longest TweenData from the Tween, used to calculate the Tween TD\r\n                maxDuration = tweenData.totalDuration;\r\n            }\r\n\r\n            if (tweenData.delay < minDelay)\r\n            {\r\n                minDelay = tweenData.delay;\r\n            }\r\n        }\r\n\r\n        //  Excludes loop values\r\n\r\n        //  If duration has been set to 0 then we give it a super-low value so that it always\r\n        //  renders at least 1 frame, but no more, without causing divided by zero errors elsewhere.\r\n        this.duration = Math.max(maxDuration, 0.001);\r\n\r\n        this.loopCounter = (this.loop === -1) ? 999999999999 : this.loop;\r\n\r\n        if (this.loopCounter > 0)\r\n        {\r\n            this.totalDuration = this.duration + this.completeDelay + ((this.duration + this.loopDelay) * this.loopCounter);\r\n        }\r\n        else\r\n        {\r\n            this.totalDuration = this.duration + this.completeDelay;\r\n        }\r\n\r\n        //  How long before this Tween starts playback?\r\n        this.startDelay = minDelay;\r\n    },\r\n\r\n    /**\r\n     * Called by TweenManager.preUpdate as part of its loop to check pending and active tweens.\r\n     * Should not be called directly.\r\n     *\r\n     * @method Phaser.Tweens.Tween#init\r\n     * @since 3.0.0\r\n     *\r\n     * @return {boolean} Returns `true` if this Tween should be moved from the pending list to the active list by the Tween Manager.\r\n     */\r\n    init: function ()\r\n    {\r\n        //  You can't have a paused Tween if it's part of a Timeline\r\n        if (this.paused && !this.parentIsTimeline)\r\n        {\r\n            this.state = TWEEN_CONST.PENDING_ADD;\r\n            this._pausedState = TWEEN_CONST.INIT;\r\n\r\n            return false;\r\n        }\r\n\r\n        var data = this.data;\r\n        var totalTargets = this.totalTargets;\r\n\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tweenData = data[i];\r\n            var target = tweenData.target;\r\n            var gen = tweenData.gen;\r\n            var key = tweenData.key;\r\n            var targetIndex = tweenData.index;\r\n\r\n            //  Old function signature: i, totalTargets, target\r\n            //  New function signature: target, key, value, index, total, tween\r\n\r\n            tweenData.delay = gen.delay(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.duration = Math.max(gen.duration(target, key, 0, targetIndex, totalTargets, this), 0.001);\r\n            tweenData.hold = gen.hold(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.repeat = gen.repeat(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.repeatDelay = gen.repeatDelay(target, key, 0, targetIndex, totalTargets, this);\r\n        }\r\n\r\n        this.calcDuration();\r\n\r\n        this.progress = 0;\r\n        this.totalProgress = 0;\r\n        this.elapsed = 0;\r\n        this.totalElapsed = 0;\r\n\r\n        this.state = TWEEN_CONST.INIT;\r\n\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * Internal method that makes this Tween active within the TweenManager\r\n     * and emits the onActive event and callback.\r\n     *\r\n     * @method Phaser.Tweens.Tween#makeActive\r\n     * @fires Phaser.Tweens.Events#TWEEN_ACTIVE\r\n     * @since 3.19.0\r\n     */\r\n    makeActive: function ()\r\n    {\r\n        this.parent.makeActive(this);\r\n\r\n        this.dispatchTweenEvent(Events.TWEEN_ACTIVE, this.callbacks.onActive);\r\n    },\r\n\r\n    /**\r\n     * Internal method that advances to the next state of the Tween during playback.\r\n     *\r\n     * @method Phaser.Tweens.Tween#nextState\r\n     * @fires Phaser.Tweens.Events#TWEEN_COMPLETE\r\n     * @fires Phaser.Tweens.Events#TWEEN_LOOP\r\n     * @since 3.0.0\r\n     */\r\n    nextState: function ()\r\n    {\r\n        if (this.loopCounter > 0)\r\n        {\r\n            this.elapsed = 0;\r\n            this.progress = 0;\r\n            this.loopCounter--;\r\n\r\n            this.resetTweenData(true);\r\n\r\n            if (this.loopDelay > 0)\r\n            {\r\n                this.countdown = this.loopDelay;\r\n                this.state = TWEEN_CONST.LOOP_DELAY;\r\n            }\r\n            else\r\n            {\r\n                this.state = TWEEN_CONST.ACTIVE;\r\n\r\n                this.dispatchTweenEvent(Events.TWEEN_LOOP, this.callbacks.onLoop);\r\n            }\r\n        }\r\n        else if (this.completeDelay > 0)\r\n        {\r\n            this.state = TWEEN_CONST.COMPLETE_DELAY;\r\n\r\n            this.countdown = this.completeDelay;\r\n        }\r\n        else\r\n        {\r\n            this.state = TWEEN_CONST.PENDING_REMOVE;\r\n\r\n            this.dispatchTweenEvent(Events.TWEEN_COMPLETE, this.callbacks.onComplete);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Pauses the Tween immediately. Use `resume` to continue playback.\r\n     *\r\n     * @method Phaser.Tweens.Tween#pause\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} - This Tween instance.\r\n     */\r\n    pause: function ()\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        this.paused = true;\r\n\r\n        this._pausedState = this.state;\r\n\r\n        this.state = TWEEN_CONST.PAUSED;\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Starts a Tween playing.\r\n     * \r\n     * You only need to call this method if you have configured the tween to be paused on creation.\r\n     * \r\n     * If the Tween is already playing, calling this method again will have no effect. If you wish to\r\n     * restart the Tween, use `Tween.restart` instead.\r\n     * \r\n     * Calling this method after the Tween has completed will start the Tween playing again from the start.\r\n     * This is the same as calling `Tween.seek(0)` and then `Tween.play()`.\r\n     *\r\n     * @method Phaser.Tweens.Tween#play\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} [resetFromTimeline=false] - Is this Tween being played as part of a Timeline?\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    play: function (resetFromTimeline)\r\n    {\r\n        if (resetFromTimeline === undefined) { resetFromTimeline = false; }\r\n\r\n        var state = this.state;\r\n\r\n        if (state === TWEEN_CONST.INIT && !this.parentIsTimeline)\r\n        {\r\n            this.resetTweenData(false);\r\n\r\n            this.state = TWEEN_CONST.ACTIVE;\r\n\r\n            return this;\r\n        }\r\n        else if (state === TWEEN_CONST.ACTIVE || (state === TWEEN_CONST.PENDING_ADD && this._pausedState === TWEEN_CONST.PENDING_ADD))\r\n        {\r\n            return this;\r\n        }\r\n        else if (!this.parentIsTimeline && (state === TWEEN_CONST.PENDING_REMOVE || state === TWEEN_CONST.REMOVED))\r\n        {\r\n            this.seek(0);\r\n            this.parent.makeActive(this);\r\n\r\n            return this;\r\n        }\r\n\r\n        if (this.parentIsTimeline)\r\n        {\r\n            this.resetTweenData(resetFromTimeline);\r\n\r\n            if (this.calculatedOffset === 0)\r\n            {\r\n                this.state = TWEEN_CONST.ACTIVE;\r\n            }\r\n            else\r\n            {\r\n                this.countdown = this.calculatedOffset;\r\n\r\n                this.state = TWEEN_CONST.OFFSET_DELAY;\r\n            }\r\n        }\r\n        else if (this.paused)\r\n        {\r\n            this.paused = false;\r\n\r\n            this.makeActive();\r\n        }\r\n        else\r\n        {\r\n            this.resetTweenData(resetFromTimeline);\r\n\r\n            this.state = TWEEN_CONST.ACTIVE;\r\n\r\n            this.makeActive();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that resets all of the Tween Data, including the progress and elapsed values.\r\n     *\r\n     * @method Phaser.Tweens.Tween#resetTweenData\r\n     * @since 3.0.0\r\n     *\r\n     * @param {boolean} resetFromLoop - Has this method been called as part of a loop?\r\n     */\r\n    resetTweenData: function (resetFromLoop)\r\n    {\r\n        var data = this.data;\r\n        var total = this.totalData;\r\n        var totalTargets = this.totalTargets;\r\n\r\n        for (var i = 0; i < total; i++)\r\n        {\r\n            var tweenData = data[i];\r\n\r\n            var target = tweenData.target;\r\n            var key = tweenData.key;\r\n            var targetIndex = tweenData.index;\r\n\r\n            tweenData.progress = 0;\r\n            tweenData.elapsed = 0;\r\n\r\n            tweenData.repeatCounter = (tweenData.repeat === -1) ? 999999999999 : tweenData.repeat;\r\n\r\n            if (resetFromLoop)\r\n            {\r\n                tweenData.start = tweenData.getStartValue(target, key, tweenData.start, targetIndex, totalTargets, this);\r\n\r\n                tweenData.end = tweenData.getEndValue(target, key, tweenData.end, targetIndex, totalTargets, this);\r\n\r\n                tweenData.current = tweenData.start;\r\n\r\n                tweenData.state = TWEEN_CONST.PLAYING_FORWARD;\r\n            }\r\n            else\r\n            {\r\n                tweenData.state = TWEEN_CONST.PENDING_RENDER;\r\n            }\r\n\r\n            if (tweenData.delay > 0)\r\n            {\r\n                tweenData.elapsed = tweenData.delay;\r\n\r\n                tweenData.state = TWEEN_CONST.DELAY;\r\n            }\r\n\r\n            if (tweenData.getActiveValue)\r\n            {\r\n                target[key] = tweenData.getActiveValue(tweenData.target, tweenData.key, tweenData.start);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Resumes the playback of a previously paused Tween.\r\n     *\r\n     * @method Phaser.Tweens.Tween#resume\r\n     * @since 3.0.0\r\n     *\r\n     * @return {this} - This Tween instance.\r\n     */\r\n    resume: function ()\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            this.paused = false;\r\n\r\n            this.state = this._pausedState;\r\n        }\r\n        else\r\n        {\r\n            this.play();\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Seeks to a specific point in the Tween.\r\n     * \r\n     * **Note:** You cannot seek a Tween that repeats or loops forever, or that has an unusually long total duration.\r\n     * \r\n     * The given position is a value between 0 and 1 which represents how far through the Tween to seek to.\r\n     * A value of 0.5 would seek to half-way through the Tween, where-as a value of zero would seek to the start.\r\n     * \r\n     * Note that the seek takes the entire duration of the Tween into account, including delays, loops and repeats.\r\n     * For example, a Tween that lasts for 2 seconds, but that loops 3 times, would have a total duration of 6 seconds,\r\n     * so seeking to 0.5 would seek to 3 seconds into the Tween, as that's half-way through its _entire_ duration.\r\n     * \r\n     * Seeking works by resetting the Tween to its initial values and then iterating through the Tween at `delta`\r\n     * jumps per step. The longer the Tween, the longer this can take.\r\n     *\r\n     * @method Phaser.Tweens.Tween#seek\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} toPosition - A value between 0 and 1 which represents the progress point to seek to.\r\n     * @param {number} [delta=16.6] - The size of each step when seeking through the Tween. A higher value completes faster but at a cost of less precision.\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    seek: function (toPosition, delta)\r\n    {\r\n        if (delta === undefined) { delta = 16.6; }\r\n\r\n        if (this.totalDuration >= 3600000)\r\n        {\r\n            console.warn('Tween.seek duration too long');\r\n\r\n            return this;\r\n        }\r\n\r\n        if (this.state === TWEEN_CONST.REMOVED)\r\n        {\r\n            this.makeActive();\r\n        }\r\n\r\n        this.elapsed = 0;\r\n        this.progress = 0;\r\n        this.totalElapsed = 0;\r\n        this.totalProgress = 0;\r\n\r\n        var data = this.data;\r\n        var totalTargets = this.totalTargets;\r\n\r\n        for (var i = 0; i < this.totalData; i++)\r\n        {\r\n            var tweenData = data[i];\r\n            var target = tweenData.target;\r\n            var gen = tweenData.gen;\r\n            var key = tweenData.key;\r\n            var targetIndex = tweenData.index;\r\n\r\n            tweenData.progress = 0;\r\n            tweenData.elapsed = 0;\r\n\r\n            tweenData.repeatCounter = (tweenData.repeat === -1) ? 999999999999 : tweenData.repeat;\r\n\r\n            //  Old function signature: i, totalTargets, target\r\n            //  New function signature: target, key, value, index, total, tween\r\n\r\n            tweenData.delay = gen.delay(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.duration = Math.max(gen.duration(target, key, 0, targetIndex, totalTargets, this), 0.001);\r\n            tweenData.hold = gen.hold(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.repeat = gen.repeat(target, key, 0, targetIndex, totalTargets, this);\r\n            tweenData.repeatDelay = gen.repeatDelay(target, key, 0, targetIndex, totalTargets, this);\r\n\r\n            tweenData.current = tweenData.start;\r\n            tweenData.state = TWEEN_CONST.PLAYING_FORWARD;\r\n\r\n            this.updateTweenData(this, tweenData, 0, targetIndex, totalTargets);\r\n\r\n            if (tweenData.delay > 0)\r\n            {\r\n                tweenData.elapsed = tweenData.delay;\r\n                tweenData.state = TWEEN_CONST.DELAY;\r\n            }\r\n        }\r\n\r\n        this.calcDuration();\r\n\r\n        var wasPaused = false;\r\n\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            wasPaused = true;\r\n\r\n            this.state = TWEEN_CONST.ACTIVE;\r\n        }\r\n\r\n        this.isSeeking = true;\r\n\r\n        do\r\n        {\r\n            this.update(0, delta);\r\n\r\n        } while (this.totalProgress < toPosition);\r\n\r\n        this.isSeeking = false;\r\n\r\n        if (wasPaused)\r\n        {\r\n            this.state = TWEEN_CONST.PAUSED;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Sets an event based callback to be invoked during playback.\r\n     * \r\n     * Calling this method will replace a previously set callback for the given type, if any exists.\r\n     * \r\n     * The types available are:\r\n     * \r\n     * `onActive` When the Tween is moved from the pending to the active list in the Tween Manager, even if playback paused.\r\n     * `onStart` When the Tween starts playing after a delayed state. Will happen at the same time as `onActive` if it has no delay.\r\n     * `onYoyo` When a TweenData starts a yoyo. This happens _after_ the `hold` delay expires, if set.\r\n     * `onRepeat` When a TweenData repeats playback. This happens _after_ the `repeatDelay` expires, if set.\r\n     * `onComplete` When the Tween finishes playback fully or `Tween.stop` is called. Never invoked if tween is set to repeat infinitely.\r\n     * `onUpdate` When a TweenData updates a property on a source target during playback.\r\n     * `onLoop` When a Tween loops. This happens _after_ the `loopDelay` expires, if set.\r\n     *\r\n     * @method Phaser.Tweens.Tween#setCallback\r\n     * @since 3.0.0\r\n     *\r\n     * @param {string} type - Type of the callback to set.\r\n     * @param {function} callback - The function to invoke when this callback happens.\r\n     * @param {array} [params] - An array of parameters for specified callbacks types.\r\n     * @param {any} [scope] - The context the callback will be invoked in.\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    setCallback: function (type, callback, params, scope)\r\n    {\r\n        this.callbacks[type] = { func: callback, scope: scope, params: params };\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Flags the Tween as being complete, whatever stage of progress it is at.\r\n     *\r\n     * If an onComplete callback has been defined it will automatically invoke it, unless a `delay`\r\n     * argument is provided, in which case the Tween will delay for that period of time before calling the callback.\r\n     *\r\n     * If you don't need a delay, or have an onComplete callback, then call `Tween.stop` instead.\r\n     *\r\n     * @method Phaser.Tweens.Tween#complete\r\n     * @fires Phaser.Tweens.Events#TWEEN_COMPLETE\r\n     * @since 3.2.0\r\n     *\r\n     * @param {number} [delay=0] - The time to wait before invoking the complete callback. If zero it will fire immediately.\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    complete: function (delay)\r\n    {\r\n        if (delay === undefined) { delay = 0; }\r\n\r\n        if (delay)\r\n        {\r\n            this.state = TWEEN_CONST.COMPLETE_DELAY;\r\n\r\n            this.countdown = delay;\r\n        }\r\n        else\r\n        {\r\n            this.state = TWEEN_CONST.PENDING_REMOVE;\r\n\r\n            this.dispatchTweenEvent(Events.TWEEN_COMPLETE, this.callbacks.onComplete);\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Immediately removes this Tween from the TweenManager and all of its internal arrays,\r\n     * no matter what stage it as it. Then sets the tween state to `REMOVED`.\r\n     * \r\n     * You should dispose of your reference to this tween after calling this method, to\r\n     * free it from memory.\r\n     *\r\n     * @method Phaser.Tweens.Tween#remove\r\n     * @since 3.17.0\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    remove: function ()\r\n    {\r\n        this.parent.remove(this);\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Stops the Tween immediately, whatever stage of progress it is at and flags it for removal by the TweenManager.\r\n     *\r\n     * @method Phaser.Tweens.Tween#stop\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} [resetTo] - If you want to seek the tween, provide a value between 0 and 1.\r\n     *\r\n     * @return {this} This Tween instance.\r\n     */\r\n    stop: function (resetTo)\r\n    {\r\n        if (this.state === TWEEN_CONST.ACTIVE)\r\n        {\r\n            if (resetTo !== undefined)\r\n            {\r\n                this.seek(resetTo);\r\n            }\r\n        }\r\n\r\n        if (this.state !== TWEEN_CONST.REMOVED)\r\n        {\r\n            if (this.state === TWEEN_CONST.PAUSED || this.state === TWEEN_CONST.PENDING_ADD)\r\n            {\r\n                if (this.parentIsTimeline)\r\n                {\r\n                    this.parent.manager._destroy.push(this);\r\n                    this.parent.manager._toProcess++;\r\n                }\r\n                else\r\n                {\r\n                    this.parent._destroy.push(this);\r\n                    this.parent._toProcess++;\r\n                }\r\n            }\r\n\r\n            this.removeAllListeners();\r\n\r\n            this.state = TWEEN_CONST.PENDING_REMOVE;\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * Internal method that advances the Tween based on the time values.\r\n     *\r\n     * @method Phaser.Tweens.Tween#update\r\n     * @fires Phaser.Tweens.Events#TWEEN_COMPLETE\r\n     * @fires Phaser.Tweens.Events#TWEEN_LOOP\r\n     * @fires Phaser.Tweens.Events#TWEEN_START\r\n     * @since 3.0.0\r\n     *\r\n     * @param {number} timestamp - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n     * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n     *\r\n     * @return {boolean} Returns `true` if this Tween has finished and should be removed from the Tween Manager, otherwise returns `false`.\r\n     */\r\n    update: function (timestamp, delta)\r\n    {\r\n        if (this.state === TWEEN_CONST.PAUSED)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        if (this.useFrames)\r\n        {\r\n            delta = 1 * this.parent.timeScale;\r\n        }\r\n\r\n        delta *= this.timeScale;\r\n\r\n        this.elapsed += delta;\r\n        this.progress = Math.min(this.elapsed / this.duration, 1);\r\n\r\n        this.totalElapsed += delta;\r\n        this.totalProgress = Math.min(this.totalElapsed / this.totalDuration, 1);\r\n\r\n        switch (this.state)\r\n        {\r\n            case TWEEN_CONST.ACTIVE:\r\n\r\n                if (!this.hasStarted && !this.isSeeking)\r\n                {\r\n                    this.startDelay -= delta;\r\n        \r\n                    if (this.startDelay <= 0)\r\n                    {\r\n                        this.hasStarted = true;\r\n\r\n                        this.dispatchTweenEvent(Events.TWEEN_START, this.callbacks.onStart);\r\n                    }\r\n                }\r\n\r\n                var stillRunning = false;\r\n\r\n                for (var i = 0; i < this.totalData; i++)\r\n                {\r\n                    var tweenData = this.data[i];\r\n\r\n                    if (this.updateTweenData(this, tweenData, delta))\r\n                    {\r\n                        stillRunning = true;\r\n                    }\r\n                }\r\n\r\n                //  Anything still running? If not, we're done\r\n                if (!stillRunning)\r\n                {\r\n                    this.nextState();\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.LOOP_DELAY:\r\n\r\n                this.countdown -= delta;\r\n\r\n                if (this.countdown <= 0)\r\n                {\r\n                    this.state = TWEEN_CONST.ACTIVE;\r\n\r\n                    this.dispatchTweenEvent(Events.TWEEN_LOOP, this.callbacks.onLoop);\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.OFFSET_DELAY:\r\n\r\n                this.countdown -= delta;\r\n\r\n                if (this.countdown <= 0)\r\n                {\r\n                    this.state = TWEEN_CONST.ACTIVE;\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.COMPLETE_DELAY:\r\n\r\n                this.countdown -= delta;\r\n\r\n                if (this.countdown <= 0)\r\n                {\r\n                    this.state = TWEEN_CONST.PENDING_REMOVE;\r\n\r\n                    this.dispatchTweenEvent(Events.TWEEN_COMPLETE, this.callbacks.onComplete);\r\n                }\r\n\r\n                break;\r\n        }\r\n\r\n        return (this.state === TWEEN_CONST.PENDING_REMOVE);\r\n    },\r\n\r\n    /**\r\n     * Internal method that will emit a TweenData based Event and invoke the given callback.\r\n     *\r\n     * @method Phaser.Tweens.Tween#dispatchTweenDataEvent\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.Event} event - The Event to be dispatched.\r\n     * @param {function} callback - The callback to be invoked. Can be `null` or `undefined` to skip invocation.\r\n     * @param {Phaser.Types.Tweens.TweenDataConfig} tweenData - The TweenData object that caused this event.\r\n     */\r\n    dispatchTweenDataEvent: function (event, callback, tweenData)\r\n    {\r\n        if (!this.isSeeking)\r\n        {\r\n            this.emit(event, this, tweenData.key, tweenData.target);\r\n\r\n            if (callback)\r\n            {\r\n                callback.params[1] = tweenData.target;\r\n\r\n                callback.func.apply(callback.scope, callback.params);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method that will emit a Tween based Event and invoke the given callback.\r\n     *\r\n     * @method Phaser.Tweens.Tween#dispatchTweenEvent\r\n     * @since 3.19.0\r\n     *\r\n     * @param {Phaser.Types.Tweens.Event} event - The Event to be dispatched.\r\n     * @param {function} callback - The callback to be invoked. Can be `null` or `undefined` to skip invocation.\r\n     */\r\n    dispatchTweenEvent: function (event, callback)\r\n    {\r\n        if (!this.isSeeking)\r\n        {\r\n            this.emit(event, this, this.targets);\r\n\r\n            if (callback)\r\n            {\r\n                callback.params[1] = this.targets;\r\n    \r\n                callback.func.apply(callback.scope, callback.params);\r\n            }\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Internal method used as part of the playback process that sets a tween to play in reverse.\r\n     *\r\n     * @method Phaser.Tweens.Tween#setStateFromEnd\r\n     * @fires Phaser.Tweens.Events#TWEEN_REPEAT\r\n     * @fires Phaser.Tweens.Events#TWEEN_YOYO\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to update.\r\n     * @param {Phaser.Types.Tweens.TweenDataConfig} tweenData - The TweenData property to update.\r\n     * @param {number} diff - Any extra time that needs to be accounted for in the elapsed and progress values.\r\n     *\r\n     * @return {integer} The state of this Tween.\r\n     */\r\n    setStateFromEnd: function (tween, tweenData, diff)\r\n    {\r\n        if (tweenData.yoyo)\r\n        {\r\n            //  We've hit the end of a Playing Forward TweenData and we have a yoyo\r\n\r\n            //  Account for any extra time we got from the previous frame\r\n            tweenData.elapsed = diff;\r\n            tweenData.progress = diff / tweenData.duration;\r\n\r\n            if (tweenData.flipX)\r\n            {\r\n                tweenData.target.toggleFlipX();\r\n            }\r\n\r\n            if (tweenData.flipY)\r\n            {\r\n                tweenData.target.toggleFlipY();\r\n            }\r\n\r\n            this.dispatchTweenDataEvent(Events.TWEEN_YOYO, tween.callbacks.onYoyo, tweenData);\r\n\r\n            tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.start, tweenData.index, tween.totalTargets, tween);\r\n\r\n            return TWEEN_CONST.PLAYING_BACKWARD;\r\n        }\r\n        else if (tweenData.repeatCounter > 0)\r\n        {\r\n            //  We've hit the end of a Playing Forward TweenData and we have a Repeat.\r\n            //  So we're going to go right back to the start to repeat it again.\r\n\r\n            tweenData.repeatCounter--;\r\n\r\n            //  Account for any extra time we got from the previous frame\r\n            tweenData.elapsed = diff;\r\n            tweenData.progress = diff / tweenData.duration;\r\n\r\n            if (tweenData.flipX)\r\n            {\r\n                tweenData.target.toggleFlipX();\r\n            }\r\n\r\n            if (tweenData.flipY)\r\n            {\r\n                tweenData.target.toggleFlipY();\r\n            }\r\n\r\n            tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.start, tweenData.index, tween.totalTargets, tween);\r\n\r\n            tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.start, tweenData.index, tween.totalTargets, tween);\r\n\r\n            //  Delay?\r\n            if (tweenData.repeatDelay > 0)\r\n            {\r\n                tweenData.elapsed = tweenData.repeatDelay - diff;\r\n\r\n                tweenData.current = tweenData.start;\r\n\r\n                tweenData.target[tweenData.key] = tweenData.current;\r\n\r\n                return TWEEN_CONST.REPEAT_DELAY;\r\n            }\r\n            else\r\n            {\r\n                this.dispatchTweenDataEvent(Events.TWEEN_REPEAT, tween.callbacks.onRepeat, tweenData);\r\n\r\n                return TWEEN_CONST.PLAYING_FORWARD;\r\n            }\r\n        }\r\n\r\n        return TWEEN_CONST.COMPLETE;\r\n    },\r\n\r\n    /**\r\n     * Internal method used as part of the playback process that sets a tween to play from the start.\r\n     *\r\n     * @method Phaser.Tweens.Tween#setStateFromStart\r\n     * @fires Phaser.Tweens.Events#TWEEN_REPEAT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to update.\r\n     * @param {Phaser.Types.Tweens.TweenDataConfig} tweenData - The TweenData property to update.\r\n     * @param {number} diff - Any extra time that needs to be accounted for in the elapsed and progress values.\r\n     *\r\n     * @return {integer} The state of this Tween.\r\n     */\r\n    setStateFromStart: function (tween, tweenData, diff)\r\n    {\r\n        if (tweenData.repeatCounter > 0)\r\n        {\r\n            tweenData.repeatCounter--;\r\n\r\n            //  Account for any extra time we got from the previous frame\r\n            tweenData.elapsed = diff;\r\n            tweenData.progress = diff / tweenData.duration;\r\n\r\n            if (tweenData.flipX)\r\n            {\r\n                tweenData.target.toggleFlipX();\r\n            }\r\n\r\n            if (tweenData.flipY)\r\n            {\r\n                tweenData.target.toggleFlipY();\r\n            }\r\n\r\n            tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.start, tweenData.index, tween.totalTargets, tween);\r\n\r\n            //  Delay?\r\n            if (tweenData.repeatDelay > 0)\r\n            {\r\n                tweenData.elapsed = tweenData.repeatDelay - diff;\r\n\r\n                tweenData.current = tweenData.start;\r\n\r\n                tweenData.target[tweenData.key] = tweenData.current;\r\n\r\n                return TWEEN_CONST.REPEAT_DELAY;\r\n            }\r\n            else\r\n            {\r\n                this.dispatchTweenDataEvent(Events.TWEEN_REPEAT, tween.callbacks.onRepeat, tweenData);\r\n\r\n                return TWEEN_CONST.PLAYING_FORWARD;\r\n            }\r\n        }\r\n\r\n        return TWEEN_CONST.COMPLETE;\r\n    },\r\n\r\n    /**\r\n     * Internal method that advances the TweenData based on the time value given.\r\n     *\r\n     * @method Phaser.Tweens.Tween#updateTweenData\r\n     * @fires Phaser.Tweens.Events#TWEEN_UPDATE\r\n     * @fires Phaser.Tweens.Events#TWEEN_REPEAT\r\n     * @since 3.0.0\r\n     *\r\n     * @param {Phaser.Tweens.Tween} tween - The Tween to update.\r\n     * @param {Phaser.Types.Tweens.TweenDataConfig} tweenData - The TweenData property to update.\r\n     * @param {number} delta - Either a value in ms, or 1 if Tween.useFrames is true.\r\n     *\r\n     * @return {boolean} True if the tween is not complete (e.g., playing), or false if the tween is complete.\r\n     */\r\n    updateTweenData: function (tween, tweenData, delta)\r\n    {\r\n        var target = tweenData.target;\r\n\r\n        switch (tweenData.state)\r\n        {\r\n            case TWEEN_CONST.PLAYING_FORWARD:\r\n            case TWEEN_CONST.PLAYING_BACKWARD:\r\n\r\n                if (!target)\r\n                {\r\n                    tweenData.state = TWEEN_CONST.COMPLETE;\r\n                    break;\r\n                }\r\n\r\n                var elapsed = tweenData.elapsed;\r\n                var duration = tweenData.duration;\r\n                var diff = 0;\r\n\r\n                elapsed += delta;\r\n\r\n                if (elapsed > duration)\r\n                {\r\n                    diff = elapsed - duration;\r\n                    elapsed = duration;\r\n                }\r\n\r\n                var forward = (tweenData.state === TWEEN_CONST.PLAYING_FORWARD);\r\n                var progress = elapsed / duration;\r\n\r\n                tweenData.elapsed = elapsed;\r\n                tweenData.progress = progress;\r\n\r\n                if (progress === 1)\r\n                {\r\n                    if (forward)\r\n                    {\r\n                        tweenData.current = tweenData.end;\r\n                        target[tweenData.key] = tweenData.end;\r\n\r\n                        if (tweenData.hold > 0)\r\n                        {\r\n                            tweenData.elapsed = tweenData.hold - diff;\r\n\r\n                            tweenData.state = TWEEN_CONST.HOLD_DELAY;\r\n                        }\r\n                        else\r\n                        {\r\n                            tweenData.state = this.setStateFromEnd(tween, tweenData, diff);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        tweenData.current = tweenData.start;\r\n                        target[tweenData.key] = tweenData.start;\r\n\r\n                        tweenData.state = this.setStateFromStart(tween, tweenData, diff);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    var v = (forward) ? tweenData.ease(progress) : tweenData.ease(1 - progress);\r\n\r\n                    tweenData.current = tweenData.start + ((tweenData.end - tweenData.start) * v);\r\n\r\n                    target[tweenData.key] = tweenData.current;\r\n                }\r\n\r\n                this.dispatchTweenDataEvent(Events.TWEEN_UPDATE, tween.callbacks.onUpdate, tweenData);\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.DELAY:\r\n\r\n                tweenData.elapsed -= delta;\r\n\r\n                if (tweenData.elapsed <= 0)\r\n                {\r\n                    tweenData.elapsed = Math.abs(tweenData.elapsed);\r\n\r\n                    tweenData.state = TWEEN_CONST.PENDING_RENDER;\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.REPEAT_DELAY:\r\n\r\n                tweenData.elapsed -= delta;\r\n\r\n                if (tweenData.elapsed <= 0)\r\n                {\r\n                    tweenData.elapsed = Math.abs(tweenData.elapsed);\r\n\r\n                    tweenData.state = TWEEN_CONST.PLAYING_FORWARD;\r\n\r\n                    this.dispatchTweenDataEvent(Events.TWEEN_REPEAT, tween.callbacks.onRepeat, tweenData);\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.HOLD_DELAY:\r\n\r\n                tweenData.elapsed -= delta;\r\n\r\n                if (tweenData.elapsed <= 0)\r\n                {\r\n                    tweenData.state = this.setStateFromEnd(tween, tweenData, Math.abs(tweenData.elapsed));\r\n                }\r\n\r\n                break;\r\n\r\n            case TWEEN_CONST.PENDING_RENDER:\r\n\r\n                if (target)\r\n                {\r\n                    tweenData.start = tweenData.getStartValue(target, tweenData.key, target[tweenData.key], tweenData.index, tween.totalTargets, tween);\r\n\r\n                    tweenData.end = tweenData.getEndValue(target, tweenData.key, tweenData.start, tweenData.index, tween.totalTargets, tween);\r\n\r\n                    tweenData.current = tweenData.start;\r\n\r\n                    target[tweenData.key] = tweenData.start;\r\n\r\n                    tweenData.state = TWEEN_CONST.PLAYING_FORWARD;\r\n                }\r\n                else\r\n                {\r\n                    tweenData.state = TWEEN_CONST.COMPLETE;\r\n                }\r\n\r\n                break;\r\n        }\r\n\r\n        //  Return TRUE if this TweenData still playing, otherwise return FALSE\r\n        return (tweenData.state !== TWEEN_CONST.COMPLETE);\r\n    }\r\n\r\n});\r\n\r\n//  onActive = 'active' event = When the Tween is moved from the pending to the active list in the manager, even if playback delayed\r\n//  onStart = 'start' event = When the Tween starts playing from a delayed state (will happen same time as onActive if no delay)\r\n//  onYoyo = 'yoyo' event = When the Tween starts a yoyo\r\n//  onRepeat = 'repeat' event = When a TweenData repeats playback (if any)\r\n//  onComplete = 'complete' event = When the Tween finishes all playback (can sometimes never happen if repeat -1), also when 'stop' called\r\n//  onUpdate = 'update' event = When the Tween updates a TweenData during playback (expensive!)\r\n//  onLoop = 'loop' event = Used to loop ALL TweenDatas in a Tween\r\n\r\nTween.TYPES = [\r\n    'onActive',\r\n    'onComplete',\r\n    'onLoop',\r\n    'onRepeat',\r\n    'onStart',\r\n    'onUpdate',\r\n    'onYoyo'\r\n];\r\n\r\n/**\r\n * Creates a new Tween object.\r\n *\r\n * Note: This method will only be available if Tweens have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#tween\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - The Tween configuration.\r\n *\r\n * @return {Phaser.Tweens.Tween} The Tween that was created.\r\n */\r\nGameObjectFactory.register('tween', function (config)\r\n{\r\n    return this.scene.sys.tweens.add(config);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n//  There are several properties available to use:\r\n//\r\n//  this.scene - a reference to the Scene that owns the GameObjectFactory\r\n//  this.displayList - a reference to the Display List the Scene owns\r\n//  this.updateList - a reference to the Update List the Scene owns\r\n\r\n/**\r\n * Creates a new Tween object and returns it.\r\n *\r\n * Note: This method will only be available if Tweens have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#tween\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - The Tween configuration.\r\n *\r\n * @return {Phaser.Tweens.Tween} The Tween that was created.\r\n */\r\nGameObjectCreator.register('tween', function (config)\r\n{\r\n    return this.scene.sys.tweens.create(config);\r\n});\r\n\r\n//  When registering a factory function 'this' refers to the GameObjectCreator context.\r\n\r\nmodule.exports = Tween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vVHdlZW4uanM/MDYyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsbUVBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3JFLHdCQUF3QixtQkFBTyxDQUFDLHVHQUFxQztBQUNyRSxrQkFBa0IsbUJBQU8sQ0FBQyxnRUFBUztBQUNuQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9ELFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsTUFBTTtBQUNqQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx3QkFBd0I7O0FBRW5FLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywyQkFBMkI7O0FBRXpFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsK0JBQStCLG9CQUFvQjtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QyxlQUFlLFNBQVM7QUFDeEIsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsb0NBQW9DO0FBQ25ELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLG9DQUFvQztBQUNuRCxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQ0FBb0M7QUFDbkQsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhDQUE4QztBQUN6RDtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy90d2Vlbi9Ud2Vlbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgVFdFRU5fQ09OU1QgPSByZXF1aXJlKCcuL2NvbnN0Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBUd2VlbiBpcyBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIHByb3BlcnRpZXMgb2Ygb25lIG9yIG1vcmUgb2JqZWN0cyB0byBhbnkgZ2l2ZW4gdmFsdWUsIGJhc2VkXHJcbiAqIG9uIGEgZHVyYXRpb24gYW5kIHR5cGUgb2YgZWFzZS4gVGhleSBhcmUgcmFyZWx5IGluc3RhbnRpYXRlZCBkaXJlY3RseSBhbmQgaW5zdGVhZCBzaG91bGQgYmVcclxuICogY3JlYXRlZCB2aWEgdGhlIFR3ZWVuTWFuYWdlci5cclxuICpcclxuICogQGNsYXNzIFR3ZWVuXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVHdlZW5zXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLlR3ZWVucy5Ud2Vlbk1hbmFnZXJ8UGhhc2VyLlR3ZWVucy5UaW1lbGluZSl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgb2YgdGhpcyBUd2Vlbi4gRWl0aGVyIHRoZSBUd2VlbiBNYW5hZ2VyIG9yIGEgVHdlZW4gVGltZWxpbmUgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlR3ZWVucy5Ud2VlbkRhdGFDb25maWdbXX0gZGF0YSAtIEFuIGFycmF5IG9mIFR3ZWVuRGF0YSBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgYSB1bmlxdWUgcHJvcGVydHkgdG8gYmUgdHdlZW5lZC5cclxuICogQHBhcmFtIHthcnJheX0gdGFyZ2V0cyAtIEFuIGFycmF5IG9mIHRhcmdldHMgdG8gYmUgdHdlZW5lZC5cclxuICovXHJcbnZhciBUd2VlbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVHdlZW4gKHBhcmVudCwgZGF0YSwgdGFyZ2V0cylcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBvZiB0aGlzIFR3ZWVuLlxyXG4gICAgICAgICAqIEVpdGhlciB0aGUgVHdlZW4gTWFuYWdlciBvciBhIFR3ZWVuIFRpbWVsaW5lIGluc3RhbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiNwYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5Ud2VlbnMuVHdlZW5NYW5hZ2VyfFBoYXNlci5Ud2VlbnMuVGltZWxpbmUpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgcGFyZW50IG9mIHRoaXMgVHdlZW4gYSBUaW1lbGluZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jcGFyZW50SXNUaW1lbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50SXNUaW1lbGluZSA9IHBhcmVudC5oYXNPd25Qcm9wZXJ0eSgnaXNUaW1lbGluZScpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBUd2VlbkRhdGEgb2JqZWN0cywgZWFjaCBjb250YWluaW5nIGEgdW5pcXVlIHByb3BlcnR5IGFuZCB0YXJnZXQgYmVpbmcgdHdlZW5lZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuRGF0YUNvbmZpZ1tdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWNoZWQgbGVuZ3RoIG9mIHRoZSBkYXRhIGFycmF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiN0b3RhbERhdGFcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRGF0YSA9IGRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQvcyB0aGlzIFR3ZWVuIGlzIG9wZXJhdGluZyBvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jdGFyZ2V0c1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3RbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhcmdldHMgPSB0YXJnZXRzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWNoZWQgdGFyZ2V0IHRvdGFsIChub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGRhdGEgdG90YWwpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI3RvdGFsVGFyZ2V0c1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG90YWxUYXJnZXRzID0gdGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGB0cnVlYCB0aGVuIGR1cmF0aW9uLCBkZWxheSwgZXRjIHZhbHVlcyBhcmUgYWxsIGZyYW1lIHRvdGFscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jdXNlRnJhbWVzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVzZUZyYW1lcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2FsZXMgdGhlIHRpbWUgYXBwbGllZCB0byB0aGlzIFR3ZWVuLiBBIHZhbHVlIG9mIDEgcnVucyBpbiByZWFsLXRpbWUuIEEgdmFsdWUgb2YgMC41IHJ1bnMgNTAlIHNsb3dlciwgYW5kIHNvIG9uLlxyXG4gICAgICAgICAqIFZhbHVlIGlzbid0IHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgdHdlZW4sIGl0J3MgYSBydW4tdGltZSBkZWx0YSBhZGp1c3RtZW50IG9ubHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI3RpbWVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTG9vcCB0aGlzIHR3ZWVuPyBDYW4gYmUgLTEgZm9yIGFuIGluZmluaXRlIGxvb3AsIG9yIGFuIGludGVnZXIuXHJcbiAgICAgICAgICogV2hlbiBlbmFibGVkIGl0IHdpbGwgcGxheSB0aHJvdWdoIEFMTCBUd2VlbkRhdGFzIGFnYWluLiBVc2UgVHdlZW5EYXRhLnJlcGVhdCB0byBsb29wIGEgc2luZ2xlIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI2xvb3BcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvb3AgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGluIG1zL2ZyYW1lcyBiZWZvcmUgdGhlIHR3ZWVuIGxvb3BzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiNsb29wRGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvb3BEZWxheSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvdyBtYW55IGxvb3BzIGFyZSBsZWZ0IHRvIHJ1bj9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jbG9vcENvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvb3BDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSBpbiBtcy9mcmFtZXMgYmVmb3JlIHRoZSAnb25TdGFydCcgZXZlbnQgZmlyZXMuXHJcbiAgICAgICAgICogVGhpcyBpcyB0aGUgc2hvcnRlc3QgYGRlbGF5YCB2YWx1ZSBhY3Jvc3MgYWxsIG9mIHRoZSBUd2VlbkRhdGFzIG9mIHRoaXMgVHdlZW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI3N0YXJ0RGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGFydERlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGFzIHRoaXMgVHdlZW4gc3RhcnRlZCBwbGF5YmFjayB5ZXQ/XHJcbiAgICAgICAgICogVGhpcyBib29sZWFuIGlzIHRvZ2dsZWQgd2hlbiB0aGUgVHdlZW4gbGVhdmVzIHRoZSAnZGVsYXllZCcgc3RhdGUgYW5kIHN0YXJ0cyBydW5uaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiNoYXNTdGFydGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGFzU3RhcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIFR3ZWVuIGN1cnJlbnRseSBzZWVraW5nP1xyXG4gICAgICAgICAqIFRoaXMgYm9vbGVhbiBpcyB0b2dnbGVkIGluIHRoZSBgVHdlZW4uc2Vla2AgbWV0aG9kLlxyXG4gICAgICAgICAqIFdoZW4gYSB0d2VlbiBpcyBzZWVraW5nIGl0IHdpbGwgbm90IGRpc3BhdGNoIGFueSBldmVudHMgb3IgY2FsbGJhY2tzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiNpc1NlZWtpbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1NlZWtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSBpbiBtcy9mcmFtZXMgYmVmb3JlIHRoZSAnb25Db21wbGV0ZScgZXZlbnQgZmlyZXMuIFRoaXMgbmV2ZXIgZmlyZXMgaWYgbG9vcCA9IC0xIChhcyBpdCBuZXZlciBjb21wbGV0ZXMpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI2NvbXBsZXRlRGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbXBsZXRlRGVsYXkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb3VudGRvd24gdGltZXIgKHVzZWQgYnkgdGltZWxpbmUgb2Zmc2V0LCBsb29wRGVsYXkgYW5kIGNvbXBsZXRlRGVsYXkpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI2NvdW50ZG93blxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY291bnRkb3duID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2V0IG9ubHkgaWYgdGhpcyBUd2VlbiBpcyBwYXJ0IG9mIGEgVGltZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI29mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2V0IG9ubHkgaWYgdGhpcyBUd2VlbiBpcyBwYXJ0IG9mIGEgVGltZWxpbmUuIFRoZSBjYWxjdWxhdGVkIG9mZnNldCBhbW91bnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI2NhbGN1bGF0ZWRPZmZzZXRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPZmZzZXQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHdlZW5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jc3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuUEVORElOR19BREQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGF0ZSBvZiB0aGUgdHdlZW4gd2hlbiBpdCB3YXMgcGF1c2VkICh1c2VkIGJ5IFJlc3VtZSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jX3BhdXNlZFN0YXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9wYXVzZWRTdGF0ZSA9IFRXRUVOX0NPTlNULklOSVQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIFR3ZWVuIHN0YXJ0IG9mZiBwYXVzZWQ/IChpZiBzbyBpdCBuZWVkcyB0byBiZSBzdGFydGVkIHdpdGggVHdlZW4ucGxheSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jcGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFbGFwc2VkIHRpbWUgaW4gbXMvZnJhbWVzIG9mIHRoaXMgcnVuIHRocm91Z2ggdGhlIFR3ZWVuLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiNlbGFwc2VkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVG90YWwgZWxhcHNlZCB0aW1lIGluIG1zL2ZyYW1lcyBvZiB0aGUgZW50aXJlIFR3ZWVuLCBpbmNsdWRpbmcgbG9vcGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jdG90YWxFbGFwc2VkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbEVsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGluIG1zL2ZyYW1lcyBmb3IgdGhlIHdob2xlIFR3ZWVuIHRvIHBsYXkgdGhyb3VnaCBvbmNlLCBleGNsdWRpbmcgbG9vcCBhbW91bnRzIGFuZCBsb29wIGRlbGF5cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBUaGUgYW1vdW50IHRocm91Z2ggdGhlIFR3ZWVuLCBleGNsdWRpbmcgbG9vcHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgaW4gbXMvZnJhbWVzIGZvciB0aGUgVHdlZW4gdG8gY29tcGxldGUgKGluY2x1ZGluZyBsb29waW5nKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5Ud2VlbiN0b3RhbER1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbER1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBUaGUgYW1vdW50IHRocm91Z2ggdGhlIGVudGlyZSBUd2VlbiwgaW5jbHVkaW5nIGxvb3BpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI3RvdGFsUHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGlmZmVyZW50IFR3ZWVuIGNhbGxiYWNrIGZ1bmN0aW9ucy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBZb3UgY2FuIGVpdGhlciBzZXQgdGhlc2UgaW4gdGhlIFR3ZWVuIGNvbmZpZywgb3IgYnkgY2FsbGluZyB0aGUgYFR3ZWVuLnNldENhbGxiYWNrYCBtZXRob2QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogYG9uQWN0aXZlYCBXaGVuIHRoZSBUd2VlbiBpcyBtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIHRvIHRoZSBhY3RpdmUgbGlzdCBpbiB0aGUgVHdlZW4gTWFuYWdlciwgZXZlbiBpZiBwbGF5YmFjayBwYXVzZWQuXHJcbiAgICAgICAgICogYG9uU3RhcnRgIFdoZW4gdGhlIFR3ZWVuIHN0YXJ0cyBwbGF5aW5nIGFmdGVyIGEgZGVsYXllZCBzdGF0ZS4gV2lsbCBoYXBwZW4gYXQgdGhlIHNhbWUgdGltZSBhcyBgb25BY3RpdmVgIGlmIGl0IGhhcyBubyBkZWxheS5cclxuICAgICAgICAgKiBgb25Zb3lvYCBXaGVuIGEgVHdlZW5EYXRhIHN0YXJ0cyBhIHlveW8uIFRoaXMgaGFwcGVucyBfYWZ0ZXJfIHRoZSBgaG9sZGAgZGVsYXkgZXhwaXJlcywgaWYgc2V0LlxyXG4gICAgICAgICAqIGBvblJlcGVhdGAgV2hlbiBhIFR3ZWVuRGF0YSByZXBlYXRzIHBsYXliYWNrLiBUaGlzIGhhcHBlbnMgX2FmdGVyXyB0aGUgYHJlcGVhdERlbGF5YCBleHBpcmVzLCBpZiBzZXQuXHJcbiAgICAgICAgICogYG9uQ29tcGxldGVgIFdoZW4gdGhlIFR3ZWVuIGZpbmlzaGVzIHBsYXliYWNrIGZ1bGx5IG9yIGBUd2Vlbi5zdG9wYCBpcyBjYWxsZWQuIE5ldmVyIGludm9rZWQgaWYgdHdlZW4gaXMgc2V0IHRvIHJlcGVhdCBpbmZpbml0ZWx5LlxyXG4gICAgICAgICAqIGBvblVwZGF0ZWAgV2hlbiBhIFR3ZWVuRGF0YSB1cGRhdGVzIGEgcHJvcGVydHkgb24gYSBzb3VyY2UgdGFyZ2V0IGR1cmluZyBwbGF5YmFjay5cclxuICAgICAgICAgKiBgb25Mb29wYCBXaGVuIGEgVHdlZW4gbG9vcHMuIFRoaXMgaGFwcGVucyBfYWZ0ZXJfIHRoZSBgbG9vcERlbGF5YCBleHBpcmVzLCBpZiBzZXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlR3ZWVuI2NhbGxiYWNrc1xyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIG9uQWN0aXZlOiBudWxsLFxyXG4gICAgICAgICAgICBvbkNvbXBsZXRlOiBudWxsLFxyXG4gICAgICAgICAgICBvbkxvb3A6IG51bGwsXHJcbiAgICAgICAgICAgIG9uUmVwZWF0OiBudWxsLFxyXG4gICAgICAgICAgICBvblN0YXJ0OiBudWxsLFxyXG4gICAgICAgICAgICBvblVwZGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgb25Zb3lvOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbnRleHQgaW4gd2hpY2ggYWxsIGNhbGxiYWNrcyBhcmUgaW52b2tlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuVHdlZW4jY2FsbGJhY2tTY29wZVxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja1Njb3BlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcdFxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIFR3ZWVuIERhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI2dldFZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBUaGUgVHdlZW4gRGF0YSB0byByZXR1cm4gdGhlIHZhbHVlIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBUd2VlbiBEYXRhLlxyXG4gICAgICovXHRcclxuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSAwOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbaW5kZXhdLmN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzY2FsZSB0aGUgdGltZSBhcHBsaWVkIHRvIHRoaXMgVHdlZW4uIEEgdmFsdWUgb2YgMSBydW5zIGluIHJlYWwtdGltZS4gQSB2YWx1ZSBvZiAwLjUgcnVucyA1MCUgc2xvd2VyLCBhbmQgc28gb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI3NldFRpbWVTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHNjYWxlIGZhY3RvciBmb3IgdGltZXNjYWxlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IC0gVGhpcyBUd2VlbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGltZVNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50aW1lU2NhbGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2NhbGUgb2YgdGhlIHRpbWUgYXBwbGllZCB0byB0aGlzIFR3ZWVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNnZXRUaW1lU2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRpbWVzY2FsZSBvZiB0aGlzIHR3ZWVuIChiZXR3ZWVuIDAgYW5kIDEpXHJcbiAgICAgKi9cclxuICAgIGdldFRpbWVTY2FsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50aW1lU2NhbGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBUd2VlbiBpcyBjdXJyZW50bHkgYWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNpc1BsYXlpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgVHdlZW4gaXMgYWN0aXZlLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNQbGF5aW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuQUNUSVZFKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIFR3ZWVuIGlzIGN1cnJlbnRseSBwYXVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI2lzUGF1c2VkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFR3ZWVuIGlzIHBhdXNlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzUGF1c2VkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEFVU0VEKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWUgaWYgdGhpcyBUd2VlbiBpcyBjdXJyZW50bHkgYWN0aW5nIHVwb24gdGhlIGdpdmVuIHRhcmdldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jaGFzVGFyZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBjaGVjayBhZ2FpbnN0IHRoaXMgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBnaXZlbiB0YXJnZXQgaXMgYSB0YXJnZXQgb2YgdGhpcyBUd2Vlbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGhhc1RhcmdldDogZnVuY3Rpb24gKHRhcmdldClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudGFyZ2V0cy5pbmRleE9mKHRhcmdldCkgIT09IC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSAnZW5kJyB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgYWNyb3NzIGFsbCBtYXRjaGluZyB0YXJnZXRzLlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgYWRqdXN0IHRoZSBkdXJhdGlvbiBvZiB0aGUgdHdlZW4sIG9yIHRoZSBjdXJyZW50IHByb2dyZXNzLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgdGVsbCBpdCB0byBzZXQgdGhlICdzdGFydCcgdmFsdWUgdG8gYmUgdGhlIGN1cnJlbnQgdmFsdWUgKGJlZm9yZSB0aGUgY2hhbmdlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jdXBkYXRlVG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gc2V0IHRoZSBuZXcgdmFsdWUgZm9yLlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3RhcnRUb0N1cnJlbnQ9ZmFsc2VdIC0gU2hvdWxkIHRoaXMgY2hhbmdlIHNldCB0aGUgc3RhcnQgdmFsdWUgdG8gYmUgdGhlIGN1cnJlbnQgdmFsdWU/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGlzIFR3ZWVuIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVUbzogZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0YXJ0VG9DdXJyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzdGFydFRvQ3VycmVudCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0VG9DdXJyZW50ID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRvdGFsRGF0YTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IHRoaXMuZGF0YVtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEua2V5ID09PSBrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbmQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRUb0N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXJ0ID0gdHdlZW5EYXRhLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RhcnRzIHRoZSB0d2VlbiBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI3Jlc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHdlZW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJlc2V0IHRoZXNlIHNvIHRoZXkncmUgcmVhZHkgZm9yIHRoZSBuZXh0IHVwZGF0ZVxyXG4gICAgICAgIHRoaXMuZWxhcHNlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbEVsYXBzZWQgPSAwO1xyXG4gICAgICAgIHRoaXMudG90YWxQcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5BQ1RJVkUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWVrKDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5SRU1PVkVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZWVrKDApO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tYWtlQWN0aXZlKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFRXRUVOX0NPTlNULlBFTkRJTkdfQUREKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgY2FsY3VsYXRlcyB0aGUgb3ZlcmFsbCBkdXJhdGlvbiBvZiB0aGUgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI2NhbGNEdXJhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNhbGNEdXJhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF4RHVyYXRpb24gPSAwO1xyXG4gICAgICAgIHZhciBtaW5EZWxheSA9IE1BVEhfQ09OU1QuTUFYX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0d2VlbkRhdGEgPSBkYXRhW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIFNldCB0MSAoZHVyYXRpb24gKyBob2xkICsgeW95bylcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnQxID0gdHdlZW5EYXRhLmR1cmF0aW9uICsgdHdlZW5EYXRhLmhvbGQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW5EYXRhLnlveW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS50MSArPSB0d2VlbkRhdGEuZHVyYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBTZXQgdDIgKHJlcGVhdERlbGF5ICsgZHVyYXRpb24gKyBob2xkICsgeW95bylcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnQyID0gdHdlZW5EYXRhLnQxICsgdHdlZW5EYXRhLnJlcGVhdERlbGF5O1xyXG5cclxuICAgICAgICAgICAgLy8gIFRvdGFsIER1cmF0aW9uXHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS50b3RhbER1cmF0aW9uID0gdHdlZW5EYXRhLmRlbGF5ICsgdHdlZW5EYXRhLnQxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5yZXBlYXQgPT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEudG90YWxEdXJhdGlvbiArPSAodHdlZW5EYXRhLnQyICogOTk5OTk5OTk5OTk5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0d2VlbkRhdGEucmVwZWF0ID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLnRvdGFsRHVyYXRpb24gKz0gKHR3ZWVuRGF0YS50MiAqIHR3ZWVuRGF0YS5yZXBlYXQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW5EYXRhLnRvdGFsRHVyYXRpb24gPiBtYXhEdXJhdGlvbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEdldCB0aGUgbG9uZ2VzdCBUd2VlbkRhdGEgZnJvbSB0aGUgVHdlZW4sIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBUd2VlbiBURFxyXG4gICAgICAgICAgICAgICAgbWF4RHVyYXRpb24gPSB0d2VlbkRhdGEudG90YWxEdXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5kZWxheSA8IG1pbkRlbGF5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtaW5EZWxheSA9IHR3ZWVuRGF0YS5kZWxheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEV4Y2x1ZGVzIGxvb3AgdmFsdWVzXHJcblxyXG4gICAgICAgIC8vICBJZiBkdXJhdGlvbiBoYXMgYmVlbiBzZXQgdG8gMCB0aGVuIHdlIGdpdmUgaXQgYSBzdXBlci1sb3cgdmFsdWUgc28gdGhhdCBpdCBhbHdheXNcclxuICAgICAgICAvLyAgcmVuZGVycyBhdCBsZWFzdCAxIGZyYW1lLCBidXQgbm8gbW9yZSwgd2l0aG91dCBjYXVzaW5nIGRpdmlkZWQgYnkgemVybyBlcnJvcnMgZWxzZXdoZXJlLlxyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBNYXRoLm1heChtYXhEdXJhdGlvbiwgMC4wMDEpO1xyXG5cclxuICAgICAgICB0aGlzLmxvb3BDb3VudGVyID0gKHRoaXMubG9vcCA9PT0gLTEpID8gOTk5OTk5OTk5OTk5IDogdGhpcy5sb29wO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5sb29wQ291bnRlciA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsRHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uICsgdGhpcy5jb21wbGV0ZURlbGF5ICsgKCh0aGlzLmR1cmF0aW9uICsgdGhpcy5sb29wRGVsYXkpICogdGhpcy5sb29wQ291bnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxEdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24gKyB0aGlzLmNvbXBsZXRlRGVsYXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSG93IGxvbmcgYmVmb3JlIHRoaXMgVHdlZW4gc3RhcnRzIHBsYXliYWNrP1xyXG4gICAgICAgIHRoaXMuc3RhcnREZWxheSA9IG1pbkRlbGF5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBUd2Vlbk1hbmFnZXIucHJlVXBkYXRlIGFzIHBhcnQgb2YgaXRzIGxvb3AgdG8gY2hlY2sgcGVuZGluZyBhbmQgYWN0aXZlIHR3ZWVucy5cclxuICAgICAqIFNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNpbml0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIFR3ZWVuIHNob3VsZCBiZSBtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgdG8gdGhlIGFjdGl2ZSBsaXN0IGJ5IHRoZSBUd2VlbiBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBZb3UgY2FuJ3QgaGF2ZSBhIHBhdXNlZCBUd2VlbiBpZiBpdCdzIHBhcnQgb2YgYSBUaW1lbGluZVxyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCAmJiAhdGhpcy5wYXJlbnRJc1RpbWVsaW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfQUREO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRTdGF0ZSA9IFRXRUVOX0NPTlNULklOSVQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICB2YXIgdG90YWxUYXJnZXRzID0gdGhpcy50b3RhbFRhcmdldHM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0d2VlbkRhdGEgPSBkYXRhW2ldO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdHdlZW5EYXRhLnRhcmdldDtcclxuICAgICAgICAgICAgdmFyIGdlbiA9IHR3ZWVuRGF0YS5nZW47XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSB0d2VlbkRhdGEua2V5O1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0SW5kZXggPSB0d2VlbkRhdGEuaW5kZXg7XHJcblxyXG4gICAgICAgICAgICAvLyAgT2xkIGZ1bmN0aW9uIHNpZ25hdHVyZTogaSwgdG90YWxUYXJnZXRzLCB0YXJnZXRcclxuICAgICAgICAgICAgLy8gIE5ldyBmdW5jdGlvbiBzaWduYXR1cmU6IHRhcmdldCwga2V5LCB2YWx1ZSwgaW5kZXgsIHRvdGFsLCB0d2VlblxyXG5cclxuICAgICAgICAgICAgdHdlZW5EYXRhLmRlbGF5ID0gZ2VuLmRlbGF5KHRhcmdldCwga2V5LCAwLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0aGlzKTtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLmR1cmF0aW9uID0gTWF0aC5tYXgoZ2VuLmR1cmF0aW9uKHRhcmdldCwga2V5LCAwLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0aGlzKSwgMC4wMDEpO1xyXG4gICAgICAgICAgICB0d2VlbkRhdGEuaG9sZCA9IGdlbi5ob2xkKHRhcmdldCwga2V5LCAwLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0aGlzKTtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnJlcGVhdCA9IGdlbi5yZXBlYXQodGFyZ2V0LCBrZXksIDAsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHRoaXMpO1xyXG4gICAgICAgICAgICB0d2VlbkRhdGEucmVwZWF0RGVsYXkgPSBnZW4ucmVwZWF0RGVsYXkodGFyZ2V0LCBrZXksIDAsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYWxjRHVyYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbFByb2dyZXNzID0gMDtcclxuICAgICAgICB0aGlzLmVsYXBzZWQgPSAwO1xyXG4gICAgICAgIHRoaXMudG90YWxFbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULklOSVQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IG1ha2VzIHRoaXMgVHdlZW4gYWN0aXZlIHdpdGhpbiB0aGUgVHdlZW5NYW5hZ2VyXHJcbiAgICAgKiBhbmQgZW1pdHMgdGhlIG9uQWN0aXZlIGV2ZW50IGFuZCBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jbWFrZUFjdGl2ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX0FDVElWRVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICovXHJcbiAgICBtYWtlQWN0aXZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFyZW50Lm1ha2VBY3RpdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hUd2VlbkV2ZW50KEV2ZW50cy5UV0VFTl9BQ1RJVkUsIHRoaXMuY2FsbGJhY2tzLm9uQWN0aXZlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCBhZHZhbmNlcyB0byB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgVHdlZW4gZHVyaW5nIHBsYXliYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNuZXh0U3RhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9DT01QTEVURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBuZXh0U3RhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9vcENvdW50ZXIgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbGFwc2VkID0gMDtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcENvdW50ZXItLTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRUd2VlbkRhdGEodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb29wRGVsYXkgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMubG9vcERlbGF5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULkxPT1BfREVMQVk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQUNUSVZFO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hUd2VlbkV2ZW50KEV2ZW50cy5UV0VFTl9MT09QLCB0aGlzLmNhbGxiYWNrcy5vbkxvb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29tcGxldGVEZWxheSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQ09NUExFVEVfREVMQVk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMuY29tcGxldGVEZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFR3ZWVuRXZlbnQoRXZlbnRzLlRXRUVOX0NPTVBMRVRFLCB0aGlzLmNhbGxiYWNrcy5vbkNvbXBsZXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIHRoZSBUd2VlbiBpbW1lZGlhdGVseS4gVXNlIGByZXN1bWVgIHRvIGNvbnRpbnVlIHBsYXliYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGlzIFR3ZWVuIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEFVU0VEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhdXNlZFN0YXRlID0gdGhpcy5zdGF0ZTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBBVVNFRDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIGEgVHdlZW4gcGxheWluZy5cclxuICAgICAqIFxyXG4gICAgICogWW91IG9ubHkgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhlIHR3ZWVuIHRvIGJlIHBhdXNlZCBvbiBjcmVhdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIFR3ZWVuIGlzIGFscmVhZHkgcGxheWluZywgY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiB3aWxsIGhhdmUgbm8gZWZmZWN0LiBJZiB5b3Ugd2lzaCB0b1xyXG4gICAgICogcmVzdGFydCB0aGUgVHdlZW4sIHVzZSBgVHdlZW4ucmVzdGFydGAgaW5zdGVhZC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBhZnRlciB0aGUgVHdlZW4gaGFzIGNvbXBsZXRlZCB3aWxsIHN0YXJ0IHRoZSBUd2VlbiBwbGF5aW5nIGFnYWluIGZyb20gdGhlIHN0YXJ0LlxyXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGBUd2Vlbi5zZWVrKDApYCBhbmQgdGhlbiBgVHdlZW4ucGxheSgpYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jcGxheVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzZXRGcm9tVGltZWxpbmU9ZmFsc2VdIC0gSXMgdGhpcyBUd2VlbiBiZWluZyBwbGF5ZWQgYXMgcGFydCBvZiBhIFRpbWVsaW5lP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHdlZW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChyZXNldEZyb21UaW1lbGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAocmVzZXRGcm9tVGltZWxpbmUgPT09IHVuZGVmaW5lZCkgeyByZXNldEZyb21UaW1lbGluZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gVFdFRU5fQ09OU1QuSU5JVCAmJiAhdGhpcy5wYXJlbnRJc1RpbWVsaW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFR3ZWVuRGF0YShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuQUNUSVZFO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlID09PSBUV0VFTl9DT05TVC5BQ1RJVkUgfHwgKHN0YXRlID09PSBUV0VFTl9DT05TVC5QRU5ESU5HX0FERCAmJiB0aGlzLl9wYXVzZWRTdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEVORElOR19BREQpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnBhcmVudElzVGltZWxpbmUgJiYgKHN0YXRlID09PSBUV0VFTl9DT05TVC5QRU5ESU5HX1JFTU9WRSB8fCBzdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUkVNT1ZFRCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNlZWsoMCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm1ha2VBY3RpdmUodGhpcyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzVGltZWxpbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0VHdlZW5EYXRhKHJlc2V0RnJvbVRpbWVsaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZWRPZmZzZXQgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBUV0VFTl9DT05TVC5BQ1RJVkU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMuY2FsY3VsYXRlZE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuT0ZGU0VUX0RFTEFZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFrZUFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0VHdlZW5EYXRhKHJlc2V0RnJvbVRpbWVsaW5lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBUV0VFTl9DT05TVC5BQ1RJVkU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1ha2VBY3RpdmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IHJlc2V0cyBhbGwgb2YgdGhlIFR3ZWVuIERhdGEsIGluY2x1ZGluZyB0aGUgcHJvZ3Jlc3MgYW5kIGVsYXBzZWQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNyZXNldFR3ZWVuRGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZXNldEZyb21Mb29wIC0gSGFzIHRoaXMgbWV0aG9kIGJlZW4gY2FsbGVkIGFzIHBhcnQgb2YgYSBsb29wP1xyXG4gICAgICovXHJcbiAgICByZXNldFR3ZWVuRGF0YTogZnVuY3Rpb24gKHJlc2V0RnJvbUxvb3ApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgdmFyIHRvdGFsID0gdGhpcy50b3RhbERhdGE7XHJcbiAgICAgICAgdmFyIHRvdGFsVGFyZ2V0cyA9IHRoaXMudG90YWxUYXJnZXRzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdHdlZW5EYXRhID0gZGF0YVtpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0d2VlbkRhdGEudGFyZ2V0O1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gdHdlZW5EYXRhLmtleTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gdHdlZW5EYXRhLmluZGV4O1xyXG5cclxuICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAgICAgdHdlZW5EYXRhLnJlcGVhdENvdW50ZXIgPSAodHdlZW5EYXRhLnJlcGVhdCA9PT0gLTEpID8gOTk5OTk5OTk5OTk5IDogdHdlZW5EYXRhLnJlcGVhdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNldEZyb21Mb29wKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhcnQgPSB0d2VlbkRhdGEuZ2V0U3RhcnRWYWx1ZSh0YXJnZXQsIGtleSwgdHdlZW5EYXRhLnN0YXJ0LCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZW5kID0gdHdlZW5EYXRhLmdldEVuZFZhbHVlKHRhcmdldCwga2V5LCB0d2VlbkRhdGEuZW5kLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuY3VycmVudCA9IHR3ZWVuRGF0YS5zdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhdGUgPSBUV0VFTl9DT05TVC5QTEFZSU5HX0ZPUldBUkQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhdGUgPSBUV0VFTl9DT05TVC5QRU5ESU5HX1JFTkRFUjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5kZWxheSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gdHdlZW5EYXRhLmRlbGF5O1xyXG5cclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5zdGF0ZSA9IFRXRUVOX0NPTlNULkRFTEFZO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW5EYXRhLmdldEFjdGl2ZVZhbHVlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHR3ZWVuRGF0YS5nZXRBY3RpdmVWYWx1ZSh0d2VlbkRhdGEudGFyZ2V0LCB0d2VlbkRhdGEua2V5LCB0d2VlbkRhdGEuc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgdGhlIHBsYXliYWNrIG9mIGEgcHJldmlvdXNseSBwYXVzZWQgVHdlZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI3Jlc3VtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGlzIFR3ZWVuIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRXRUVOX0NPTlNULlBBVVNFRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5fcGF1c2VkU3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Vla3MgdG8gYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgVHdlZW4uXHJcbiAgICAgKiBcclxuICAgICAqICoqTm90ZToqKiBZb3UgY2Fubm90IHNlZWsgYSBUd2VlbiB0aGF0IHJlcGVhdHMgb3IgbG9vcHMgZm9yZXZlciwgb3IgdGhhdCBoYXMgYW4gdW51c3VhbGx5IGxvbmcgdG90YWwgZHVyYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBnaXZlbiBwb3NpdGlvbiBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSB3aGljaCByZXByZXNlbnRzIGhvdyBmYXIgdGhyb3VnaCB0aGUgVHdlZW4gdG8gc2VlayB0by5cclxuICAgICAqIEEgdmFsdWUgb2YgMC41IHdvdWxkIHNlZWsgdG8gaGFsZi13YXkgdGhyb3VnaCB0aGUgVHdlZW4sIHdoZXJlLWFzIGEgdmFsdWUgb2YgemVybyB3b3VsZCBzZWVrIHRvIHRoZSBzdGFydC5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IHRoZSBzZWVrIHRha2VzIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIFR3ZWVuIGludG8gYWNjb3VudCwgaW5jbHVkaW5nIGRlbGF5cywgbG9vcHMgYW5kIHJlcGVhdHMuXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgYSBUd2VlbiB0aGF0IGxhc3RzIGZvciAyIHNlY29uZHMsIGJ1dCB0aGF0IGxvb3BzIDMgdGltZXMsIHdvdWxkIGhhdmUgYSB0b3RhbCBkdXJhdGlvbiBvZiA2IHNlY29uZHMsXHJcbiAgICAgKiBzbyBzZWVraW5nIHRvIDAuNSB3b3VsZCBzZWVrIHRvIDMgc2Vjb25kcyBpbnRvIHRoZSBUd2VlbiwgYXMgdGhhdCdzIGhhbGYtd2F5IHRocm91Z2ggaXRzIF9lbnRpcmVfIGR1cmF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBTZWVraW5nIHdvcmtzIGJ5IHJlc2V0dGluZyB0aGUgVHdlZW4gdG8gaXRzIGluaXRpYWwgdmFsdWVzIGFuZCB0aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBUd2VlbiBhdCBgZGVsdGFgXHJcbiAgICAgKiBqdW1wcyBwZXIgc3RlcC4gVGhlIGxvbmdlciB0aGUgVHdlZW4sIHRoZSBsb25nZXIgdGhpcyBjYW4gdGFrZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jc2Vla1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvUG9zaXRpb24gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSB3aGljaCByZXByZXNlbnRzIHRoZSBwcm9ncmVzcyBwb2ludCB0byBzZWVrIHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YT0xNi42XSAtIFRoZSBzaXplIG9mIGVhY2ggc3RlcCB3aGVuIHNlZWtpbmcgdGhyb3VnaCB0aGUgVHdlZW4uIEEgaGlnaGVyIHZhbHVlIGNvbXBsZXRlcyBmYXN0ZXIgYnV0IGF0IGEgY29zdCBvZiBsZXNzIHByZWNpc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFR3ZWVuIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZWVrOiBmdW5jdGlvbiAodG9Qb3NpdGlvbiwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlbHRhID09PSB1bmRlZmluZWQpIHsgZGVsdGEgPSAxNi42OyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdGFsRHVyYXRpb24gPj0gMzYwMDAwMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVHdlZW4uc2VlayBkdXJhdGlvbiB0b28gbG9uZycpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUkVNT1ZFRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbGFwc2VkID0gMDtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuICAgICAgICB0aGlzLnRvdGFsRWxhcHNlZCA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbFByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgdmFyIHRvdGFsVGFyZ2V0cyA9IHRoaXMudG90YWxUYXJnZXRzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudG90YWxEYXRhOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdHdlZW5EYXRhID0gZGF0YVtpXTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHR3ZWVuRGF0YS50YXJnZXQ7XHJcbiAgICAgICAgICAgIHZhciBnZW4gPSB0d2VlbkRhdGEuZ2VuO1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gdHdlZW5EYXRhLmtleTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gdHdlZW5EYXRhLmluZGV4O1xyXG5cclxuICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAgICAgdHdlZW5EYXRhLnJlcGVhdENvdW50ZXIgPSAodHdlZW5EYXRhLnJlcGVhdCA9PT0gLTEpID8gOTk5OTk5OTk5OTk5IDogdHdlZW5EYXRhLnJlcGVhdDtcclxuXHJcbiAgICAgICAgICAgIC8vICBPbGQgZnVuY3Rpb24gc2lnbmF0dXJlOiBpLCB0b3RhbFRhcmdldHMsIHRhcmdldFxyXG4gICAgICAgICAgICAvLyAgTmV3IGZ1bmN0aW9uIHNpZ25hdHVyZTogdGFyZ2V0LCBrZXksIHZhbHVlLCBpbmRleCwgdG90YWwsIHR3ZWVuXHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuZGVsYXkgPSBnZW4uZGVsYXkodGFyZ2V0LCBrZXksIDAsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHRoaXMpO1xyXG4gICAgICAgICAgICB0d2VlbkRhdGEuZHVyYXRpb24gPSBNYXRoLm1heChnZW4uZHVyYXRpb24odGFyZ2V0LCBrZXksIDAsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHRoaXMpLCAwLjAwMSk7XHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5ob2xkID0gZ2VuLmhvbGQodGFyZ2V0LCBrZXksIDAsIHRhcmdldEluZGV4LCB0b3RhbFRhcmdldHMsIHRoaXMpO1xyXG4gICAgICAgICAgICB0d2VlbkRhdGEucmVwZWF0ID0gZ2VuLnJlcGVhdCh0YXJnZXQsIGtleSwgMCwgdGFyZ2V0SW5kZXgsIHRvdGFsVGFyZ2V0cywgdGhpcyk7XHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5yZXBlYXREZWxheSA9IGdlbi5yZXBlYXREZWxheSh0YXJnZXQsIGtleSwgMCwgdGFyZ2V0SW5kZXgsIHRvdGFsVGFyZ2V0cywgdGhpcyk7XHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuY3VycmVudCA9IHR3ZWVuRGF0YS5zdGFydDtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXRlID0gVFdFRU5fQ09OU1QuUExBWUlOR19GT1JXQVJEO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUd2VlbkRhdGEodGhpcywgdHdlZW5EYXRhLCAwLCB0YXJnZXRJbmRleCwgdG90YWxUYXJnZXRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuZGVsYXkgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZWxhcHNlZCA9IHR3ZWVuRGF0YS5kZWxheTtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5zdGF0ZSA9IFRXRUVOX0NPTlNULkRFTEFZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbGNEdXJhdGlvbigpO1xyXG5cclxuICAgICAgICB2YXIgd2FzUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5QQVVTRUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3YXNQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULkFDVElWRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWVraW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZG9cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKDAsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgfSB3aGlsZSAodGhpcy50b3RhbFByb2dyZXNzIDwgdG9Qb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZWVraW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh3YXNQYXVzZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuUEFVU0VEO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhbiBldmVudCBiYXNlZCBjYWxsYmFjayB0byBiZSBpbnZva2VkIGR1cmluZyBwbGF5YmFjay5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHJlcGxhY2UgYSBwcmV2aW91c2x5IHNldCBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUsIGlmIGFueSBleGlzdHMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB0eXBlcyBhdmFpbGFibGUgYXJlOlxyXG4gICAgICogXHJcbiAgICAgKiBgb25BY3RpdmVgIFdoZW4gdGhlIFR3ZWVuIGlzIG1vdmVkIGZyb20gdGhlIHBlbmRpbmcgdG8gdGhlIGFjdGl2ZSBsaXN0IGluIHRoZSBUd2VlbiBNYW5hZ2VyLCBldmVuIGlmIHBsYXliYWNrIHBhdXNlZC5cclxuICAgICAqIGBvblN0YXJ0YCBXaGVuIHRoZSBUd2VlbiBzdGFydHMgcGxheWluZyBhZnRlciBhIGRlbGF5ZWQgc3RhdGUuIFdpbGwgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgYG9uQWN0aXZlYCBpZiBpdCBoYXMgbm8gZGVsYXkuXHJcbiAgICAgKiBgb25Zb3lvYCBXaGVuIGEgVHdlZW5EYXRhIHN0YXJ0cyBhIHlveW8uIFRoaXMgaGFwcGVucyBfYWZ0ZXJfIHRoZSBgaG9sZGAgZGVsYXkgZXhwaXJlcywgaWYgc2V0LlxyXG4gICAgICogYG9uUmVwZWF0YCBXaGVuIGEgVHdlZW5EYXRhIHJlcGVhdHMgcGxheWJhY2suIFRoaXMgaGFwcGVucyBfYWZ0ZXJfIHRoZSBgcmVwZWF0RGVsYXlgIGV4cGlyZXMsIGlmIHNldC5cclxuICAgICAqIGBvbkNvbXBsZXRlYCBXaGVuIHRoZSBUd2VlbiBmaW5pc2hlcyBwbGF5YmFjayBmdWxseSBvciBgVHdlZW4uc3RvcGAgaXMgY2FsbGVkLiBOZXZlciBpbnZva2VkIGlmIHR3ZWVuIGlzIHNldCB0byByZXBlYXQgaW5maW5pdGVseS5cclxuICAgICAqIGBvblVwZGF0ZWAgV2hlbiBhIFR3ZWVuRGF0YSB1cGRhdGVzIGEgcHJvcGVydHkgb24gYSBzb3VyY2UgdGFyZ2V0IGR1cmluZyBwbGF5YmFjay5cclxuICAgICAqIGBvbkxvb3BgIFdoZW4gYSBUd2VlbiBsb29wcy4gVGhpcyBoYXBwZW5zIF9hZnRlcl8gdGhlIGBsb29wRGVsYXlgIGV4cGlyZXMsIGlmIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jc2V0Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVHlwZSBvZiB0aGUgY2FsbGJhY2sgdG8gc2V0LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhpcyBjYWxsYmFjayBoYXBwZW5zLlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gW3BhcmFtc10gLSBBbiBhcnJheSBvZiBwYXJhbWV0ZXJzIGZvciBzcGVjaWZpZWQgY2FsbGJhY2tzIHR5cGVzLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtzY29wZV0gLSBUaGUgY29udGV4dCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHdlZW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENhbGxiYWNrOiBmdW5jdGlvbiAodHlwZSwgY2FsbGJhY2ssIHBhcmFtcywgc2NvcGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3NbdHlwZV0gPSB7IGZ1bmM6IGNhbGxiYWNrLCBzY29wZTogc2NvcGUsIHBhcmFtczogcGFyYW1zIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsYWdzIHRoZSBUd2VlbiBhcyBiZWluZyBjb21wbGV0ZSwgd2hhdGV2ZXIgc3RhZ2Ugb2YgcHJvZ3Jlc3MgaXQgaXMgYXQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYW4gb25Db21wbGV0ZSBjYWxsYmFjayBoYXMgYmVlbiBkZWZpbmVkIGl0IHdpbGwgYXV0b21hdGljYWxseSBpbnZva2UgaXQsIHVubGVzcyBhIGBkZWxheWBcclxuICAgICAqIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpbiB3aGljaCBjYXNlIHRoZSBUd2VlbiB3aWxsIGRlbGF5IGZvciB0aGF0IHBlcmlvZCBvZiB0aW1lIGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZG9uJ3QgbmVlZCBhIGRlbGF5LCBvciBoYXZlIGFuIG9uQ29tcGxldGUgY2FsbGJhY2ssIHRoZW4gY2FsbCBgVHdlZW4uc3RvcGAgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jY29tcGxldGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWxheT0wXSAtIFRoZSB0aW1lIHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBjb21wbGV0ZSBjYWxsYmFjay4gSWYgemVybyBpdCB3aWxsIGZpcmUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUd2VlbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIChkZWxheSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVsYXkgPT09IHVuZGVmaW5lZCkgeyBkZWxheSA9IDA7IH1cclxuXHJcbiAgICAgICAgaWYgKGRlbGF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULkNPTVBMRVRFX0RFTEFZO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb3VudGRvd24gPSBkZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFR3ZWVuRXZlbnQoRXZlbnRzLlRXRUVOX0NPTVBMRVRFLCB0aGlzLmNhbGxiYWNrcy5vbkNvbXBsZXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltbWVkaWF0ZWx5IHJlbW92ZXMgdGhpcyBUd2VlbiBmcm9tIHRoZSBUd2Vlbk1hbmFnZXIgYW5kIGFsbCBvZiBpdHMgaW50ZXJuYWwgYXJyYXlzLFxyXG4gICAgICogbm8gbWF0dGVyIHdoYXQgc3RhZ2UgaXQgYXMgaXQuIFRoZW4gc2V0cyB0aGUgdHdlZW4gc3RhdGUgdG8gYFJFTU9WRURgLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3Ugc2hvdWxkIGRpc3Bvc2Ugb2YgeW91ciByZWZlcmVuY2UgdG8gdGhpcyB0d2VlbiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCB0b1xyXG4gICAgICogZnJlZSBpdCBmcm9tIG1lbW9yeS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUd2VlbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIFR3ZWVuIGltbWVkaWF0ZWx5LCB3aGF0ZXZlciBzdGFnZSBvZiBwcm9ncmVzcyBpdCBpcyBhdCBhbmQgZmxhZ3MgaXQgZm9yIHJlbW92YWwgYnkgdGhlIFR3ZWVuTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXNldFRvXSAtIElmIHlvdSB3YW50IHRvIHNlZWsgdGhlIHR3ZWVuLCBwcm92aWRlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHdlZW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uIChyZXNldFRvKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5BQ1RJVkUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocmVzZXRUbyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlZWsocmVzZXRUbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUV0VFTl9DT05TVC5SRU1PVkVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRXRUVOX0NPTlNULlBBVVNFRCB8fCB0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5QRU5ESU5HX0FERClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50SXNUaW1lbGluZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5tYW5hZ2VyLl9kZXN0cm95LnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQubWFuYWdlci5fdG9Qcm9jZXNzKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX2Rlc3Ryb3kucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdG9Qcm9jZXNzKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVFdFRU5fQ09OU1QuUEVORElOR19SRU1PVkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCBhZHZhbmNlcyB0aGUgVHdlZW4gYmFzZWQgb24gdGhlIHRpbWUgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiN1cGRhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9DT01QTEVURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX0xPT1BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9TVEFSVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcCAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIFR3ZWVuIGhhcyBmaW5pc2hlZCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgVHdlZW4gTWFuYWdlciwgb3RoZXJ3aXNlIHJldHVybnMgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZXN0YW1wLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVFdFRU5fQ09OU1QuUEFVU0VEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlRnJhbWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsdGEgPSAxICogdGhpcy5wYXJlbnQudGltZVNjYWxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVsdGEgKj0gdGhpcy50aW1lU2NhbGU7XHJcblxyXG4gICAgICAgIHRoaXMuZWxhcHNlZCArPSBkZWx0YTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gTWF0aC5taW4odGhpcy5lbGFwc2VkIC8gdGhpcy5kdXJhdGlvbiwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMudG90YWxFbGFwc2VkICs9IGRlbHRhO1xyXG4gICAgICAgIHRoaXMudG90YWxQcm9ncmVzcyA9IE1hdGgubWluKHRoaXMudG90YWxFbGFwc2VkIC8gdGhpcy50b3RhbER1cmF0aW9uLCAxKTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5BQ1RJVkU6XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1N0YXJ0ZWQgJiYgIXRoaXMuaXNTZWVraW5nKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREZWxheSAtPSBkZWx0YTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydERlbGF5IDw9IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1N0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFR3ZWVuRXZlbnQoRXZlbnRzLlRXRUVOX1NUQVJULCB0aGlzLmNhbGxiYWNrcy5vblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHN0aWxsUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50b3RhbERhdGE7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHdlZW5EYXRhID0gdGhpcy5kYXRhW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGRhdGVUd2VlbkRhdGEodGhpcywgdHdlZW5EYXRhLCBkZWx0YSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlsbFJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgQW55dGhpbmcgc3RpbGwgcnVubmluZz8gSWYgbm90LCB3ZSdyZSBkb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0aWxsUnVubmluZylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5MT09QX0RFTEFZOlxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRkb3duIC09IGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ZG93biA8PSAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBUV0VFTl9DT05TVC5BQ1RJVkU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hUd2VlbkV2ZW50KEV2ZW50cy5UV0VFTl9MT09QLCB0aGlzLmNhbGxiYWNrcy5vbkxvb3ApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5PRkZTRVRfREVMQVk6XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudGRvd24gLT0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULkFDVElWRTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgVFdFRU5fQ09OU1QuQ09NUExFVEVfREVMQVk6XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudGRvd24gLT0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFRXRUVOX0NPTlNULlBFTkRJTkdfUkVNT1ZFO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVHdlZW5FdmVudChFdmVudHMuVFdFRU5fQ09NUExFVEUsIHRoaXMuY2FsbGJhY2tzLm9uQ29tcGxldGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXRlID09PSBUV0VFTl9DT05TVC5QRU5ESU5HX1JFTU9WRSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgd2lsbCBlbWl0IGEgVHdlZW5EYXRhIGJhc2VkIEV2ZW50IGFuZCBpbnZva2UgdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLlR3ZWVucy5Ud2VlbiNkaXNwYXRjaFR3ZWVuRGF0YUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLkV2ZW50fSBldmVudCAtIFRoZSBFdmVudCB0byBiZSBkaXNwYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGludm9jYXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5EYXRhQ29uZmlnfSB0d2VlbkRhdGEgLSBUaGUgVHdlZW5EYXRhIG9iamVjdCB0aGF0IGNhdXNlZCB0aGlzIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaFR3ZWVuRGF0YUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrLCB0d2VlbkRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzU2Vla2luZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChldmVudCwgdGhpcywgdHdlZW5EYXRhLmtleSwgdHdlZW5EYXRhLnRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLnBhcmFtc1sxXSA9IHR3ZWVuRGF0YS50YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suZnVuYy5hcHBseShjYWxsYmFjay5zY29wZSwgY2FsbGJhY2sucGFyYW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB3aWxsIGVtaXQgYSBUd2VlbiBiYXNlZCBFdmVudCBhbmQgaW52b2tlIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jZGlzcGF0Y2hUd2VlbkV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLkV2ZW50fSBldmVudCAtIFRoZSBFdmVudCB0byBiZSBkaXNwYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGludm9jYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoVHdlZW5FdmVudDogZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNTZWVraW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCB0aGlzLCB0aGlzLnRhcmdldHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5wYXJhbXNbMV0gPSB0aGlzLnRhcmdldHM7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmZ1bmMuYXBwbHkoY2FsbGJhY2suc2NvcGUsIGNhbGxiYWNrLnBhcmFtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYXMgcGFydCBvZiB0aGUgcGxheWJhY2sgcHJvY2VzcyB0aGF0IHNldHMgYSB0d2VlbiB0byBwbGF5IGluIHJldmVyc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI3NldFN0YXRlRnJvbUVuZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX1JFUEVBVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX1lPWU9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBUaGUgVHdlZW4gdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuRGF0YUNvbmZpZ30gdHdlZW5EYXRhIC0gVGhlIFR3ZWVuRGF0YSBwcm9wZXJ0eSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiAtIEFueSBleHRyYSB0aW1lIHRoYXQgbmVlZHMgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgZWxhcHNlZCBhbmQgcHJvZ3Jlc3MgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBzdGF0ZSBvZiB0aGlzIFR3ZWVuLlxyXG4gICAgICovXHJcbiAgICBzZXRTdGF0ZUZyb21FbmQ6IGZ1bmN0aW9uICh0d2VlbiwgdHdlZW5EYXRhLCBkaWZmKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0d2VlbkRhdGEueW95bylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSd2ZSBoaXQgdGhlIGVuZCBvZiBhIFBsYXlpbmcgRm9yd2FyZCBUd2VlbkRhdGEgYW5kIHdlIGhhdmUgYSB5b3lvXHJcblxyXG4gICAgICAgICAgICAvLyAgQWNjb3VudCBmb3IgYW55IGV4dHJhIHRpbWUgd2UgZ290IGZyb20gdGhlIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gZGlmZjtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gZGlmZiAvIHR3ZWVuRGF0YS5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuZmxpcFgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS50YXJnZXQudG9nZ2xlRmxpcFgoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5mbGlwWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLnRhcmdldC50b2dnbGVGbGlwWSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoVHdlZW5EYXRhRXZlbnQoRXZlbnRzLlRXRUVOX1lPWU8sIHR3ZWVuLmNhbGxiYWNrcy5vbllveW8sIHR3ZWVuRGF0YSk7XHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuc3RhcnQgPSB0d2VlbkRhdGEuZ2V0U3RhcnRWYWx1ZSh0d2VlbkRhdGEudGFyZ2V0LCB0d2VlbkRhdGEua2V5LCB0d2VlbkRhdGEuc3RhcnQsIHR3ZWVuRGF0YS5pbmRleCwgdHdlZW4udG90YWxUYXJnZXRzLCB0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gVFdFRU5fQ09OU1QuUExBWUlOR19CQUNLV0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHdlZW5EYXRhLnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlJ3ZlIGhpdCB0aGUgZW5kIG9mIGEgUGxheWluZyBGb3J3YXJkIFR3ZWVuRGF0YSBhbmQgd2UgaGF2ZSBhIFJlcGVhdC5cclxuICAgICAgICAgICAgLy8gIFNvIHdlJ3JlIGdvaW5nIHRvIGdvIHJpZ2h0IGJhY2sgdG8gdGhlIHN0YXJ0IHRvIHJlcGVhdCBpdCBhZ2Fpbi5cclxuXHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5yZXBlYXRDb3VudGVyLS07XHJcblxyXG4gICAgICAgICAgICAvLyAgQWNjb3VudCBmb3IgYW55IGV4dHJhIHRpbWUgd2UgZ290IGZyb20gdGhlIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gZGlmZjtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gZGlmZiAvIHR3ZWVuRGF0YS5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuZmxpcFgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS50YXJnZXQudG9nZ2xlRmxpcFgoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5mbGlwWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLnRhcmdldC50b2dnbGVGbGlwWSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuc3RhcnQgPSB0d2VlbkRhdGEuZ2V0U3RhcnRWYWx1ZSh0d2VlbkRhdGEudGFyZ2V0LCB0d2VlbkRhdGEua2V5LCB0d2VlbkRhdGEuc3RhcnQsIHR3ZWVuRGF0YS5pbmRleCwgdHdlZW4udG90YWxUYXJnZXRzLCB0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuZW5kID0gdHdlZW5EYXRhLmdldEVuZFZhbHVlKHR3ZWVuRGF0YS50YXJnZXQsIHR3ZWVuRGF0YS5rZXksIHR3ZWVuRGF0YS5zdGFydCwgdHdlZW5EYXRhLmluZGV4LCB0d2Vlbi50b3RhbFRhcmdldHMsIHR3ZWVuKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBEZWxheT9cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5yZXBlYXREZWxheSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gdHdlZW5EYXRhLnJlcGVhdERlbGF5IC0gZGlmZjtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuY3VycmVudCA9IHR3ZWVuRGF0YS5zdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEudGFyZ2V0W3R3ZWVuRGF0YS5rZXldID0gdHdlZW5EYXRhLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULlJFUEVBVF9ERUxBWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hUd2VlbkRhdGFFdmVudChFdmVudHMuVFdFRU5fUkVQRUFULCB0d2Vlbi5jYWxsYmFja3Mub25SZXBlYXQsIHR3ZWVuRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULkNPTVBMRVRFO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGFzIHBhcnQgb2YgdGhlIHBsYXliYWNrIHByb2Nlc3MgdGhhdCBzZXRzIGEgdHdlZW4gdG8gcGxheSBmcm9tIHRoZSBzdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Ud2VlbnMuVHdlZW4jc2V0U3RhdGVGcm9tU3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuVHdlZW5zLkV2ZW50cyNUV0VFTl9SRVBFQVRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn0gdHdlZW4gLSBUaGUgVHdlZW4gdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuRGF0YUNvbmZpZ30gdHdlZW5EYXRhIC0gVGhlIFR3ZWVuRGF0YSBwcm9wZXJ0eSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiAtIEFueSBleHRyYSB0aW1lIHRoYXQgbmVlZHMgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgZWxhcHNlZCBhbmQgcHJvZ3Jlc3MgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBzdGF0ZSBvZiB0aGlzIFR3ZWVuLlxyXG4gICAgICovXHJcbiAgICBzZXRTdGF0ZUZyb21TdGFydDogZnVuY3Rpb24gKHR3ZWVuLCB0d2VlbkRhdGEsIGRpZmYpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR3ZWVuRGF0YS5yZXBlYXRDb3VudGVyID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5yZXBlYXRDb3VudGVyLS07XHJcblxyXG4gICAgICAgICAgICAvLyAgQWNjb3VudCBmb3IgYW55IGV4dHJhIHRpbWUgd2UgZ290IGZyb20gdGhlIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gZGlmZjtcclxuICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gZGlmZiAvIHR3ZWVuRGF0YS5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuZmxpcFgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS50YXJnZXQudG9nZ2xlRmxpcFgoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5mbGlwWSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLnRhcmdldC50b2dnbGVGbGlwWSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0d2VlbkRhdGEuZW5kID0gdHdlZW5EYXRhLmdldEVuZFZhbHVlKHR3ZWVuRGF0YS50YXJnZXQsIHR3ZWVuRGF0YS5rZXksIHR3ZWVuRGF0YS5zdGFydCwgdHdlZW5EYXRhLmluZGV4LCB0d2Vlbi50b3RhbFRhcmdldHMsIHR3ZWVuKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBEZWxheT9cclxuICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5yZXBlYXREZWxheSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkID0gdHdlZW5EYXRhLnJlcGVhdERlbGF5IC0gZGlmZjtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuY3VycmVudCA9IHR3ZWVuRGF0YS5zdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEudGFyZ2V0W3R3ZWVuRGF0YS5rZXldID0gdHdlZW5EYXRhLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULlJFUEVBVF9ERUxBWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hUd2VlbkRhdGFFdmVudChFdmVudHMuVFdFRU5fUkVQRUFULCB0d2Vlbi5jYWxsYmFja3Mub25SZXBlYXQsIHR3ZWVuRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRXRUVOX0NPTlNULkNPTVBMRVRFO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGFkdmFuY2VzIHRoZSBUd2VlbkRhdGEgYmFzZWQgb24gdGhlIHRpbWUgdmFsdWUgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuVHdlZW5zLlR3ZWVuI3VwZGF0ZVR3ZWVuRGF0YVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX1VQREFURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Ud2VlbnMuRXZlbnRzI1RXRUVOX1JFUEVBVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSB0d2VlbiAtIFRoZSBUd2VlbiB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Ud2VlbnMuVHdlZW5EYXRhQ29uZmlnfSB0d2VlbkRhdGEgLSBUaGUgVHdlZW5EYXRhIHByb3BlcnR5IHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIEVpdGhlciBhIHZhbHVlIGluIG1zLCBvciAxIGlmIFR3ZWVuLnVzZUZyYW1lcyBpcyB0cnVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHR3ZWVuIGlzIG5vdCBjb21wbGV0ZSAoZS5nLiwgcGxheWluZyksIG9yIGZhbHNlIGlmIHRoZSB0d2VlbiBpcyBjb21wbGV0ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlVHdlZW5EYXRhOiBmdW5jdGlvbiAodHdlZW4sIHR3ZWVuRGF0YSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHR3ZWVuRGF0YS50YXJnZXQ7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHdlZW5EYXRhLnN0YXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5QTEFZSU5HX0ZPUldBUkQ6XHJcbiAgICAgICAgICAgIGNhc2UgVFdFRU5fQ09OU1QuUExBWUlOR19CQUNLV0FSRDpcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhdGUgPSBUV0VFTl9DT05TVC5DT01QTEVURTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZWxhcHNlZCA9IHR3ZWVuRGF0YS5lbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdHdlZW5EYXRhLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGVsYXBzZWQgKz0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWQgPiBkdXJhdGlvbilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaWZmID0gZWxhcHNlZCAtIGR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBkdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yd2FyZCA9ICh0d2VlbkRhdGEuc3RhdGUgPT09IFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBlbGFwc2VkIC8gZHVyYXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSBlbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09PSAxKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3J3YXJkKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLmN1cnJlbnQgPSB0d2VlbkRhdGEuZW5kO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHdlZW5EYXRhLmtleV0gPSB0d2VlbkRhdGEuZW5kO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR3ZWVuRGF0YS5ob2xkID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSB0d2VlbkRhdGEuaG9sZCAtIGRpZmY7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXRlID0gVFdFRU5fQ09OU1QuSE9MRF9ERUxBWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5zdGF0ZSA9IHRoaXMuc2V0U3RhdGVGcm9tRW5kKHR3ZWVuLCB0d2VlbkRhdGEsIGRpZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5jdXJyZW50ID0gdHdlZW5EYXRhLnN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHdlZW5EYXRhLmtleV0gPSB0d2VlbkRhdGEuc3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhdGUgPSB0aGlzLnNldFN0YXRlRnJvbVN0YXJ0KHR3ZWVuLCB0d2VlbkRhdGEsIGRpZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IChmb3J3YXJkKSA/IHR3ZWVuRGF0YS5lYXNlKHByb2dyZXNzKSA6IHR3ZWVuRGF0YS5lYXNlKDEgLSBwcm9ncmVzcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5jdXJyZW50ID0gdHdlZW5EYXRhLnN0YXJ0ICsgKCh0d2VlbkRhdGEuZW5kIC0gdHdlZW5EYXRhLnN0YXJ0KSAqIHYpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHdlZW5EYXRhLmtleV0gPSB0d2VlbkRhdGEuY3VycmVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVHdlZW5EYXRhRXZlbnQoRXZlbnRzLlRXRUVOX1VQREFURSwgdHdlZW4uY2FsbGJhY2tzLm9uVXBkYXRlLCB0d2VlbkRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5ERUxBWTpcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZWxhcHNlZCAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHdlZW5EYXRhLmVsYXBzZWQgPD0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZWxhcHNlZCA9IE1hdGguYWJzKHR3ZWVuRGF0YS5lbGFwc2VkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXRlID0gVFdFRU5fQ09OU1QuUEVORElOR19SRU5ERVI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFRXRUVOX0NPTlNULlJFUEVBVF9ERUxBWTpcclxuXHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZWxhcHNlZCAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHdlZW5EYXRhLmVsYXBzZWQgPD0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2VlbkRhdGEuZWxhcHNlZCA9IE1hdGguYWJzKHR3ZWVuRGF0YS5lbGFwc2VkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXRlID0gVFdFRU5fQ09OU1QuUExBWUlOR19GT1JXQVJEO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVHdlZW5EYXRhRXZlbnQoRXZlbnRzLlRXRUVOX1JFUEVBVCwgdHdlZW4uY2FsbGJhY2tzLm9uUmVwZWF0LCB0d2VlbkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUV0VFTl9DT05TVC5IT0xEX0RFTEFZOlxyXG5cclxuICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbGFwc2VkIC09IGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuZWxhcHNlZCA8PSAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5zdGF0ZSA9IHRoaXMuc2V0U3RhdGVGcm9tRW5kKHR3ZWVuLCB0d2VlbkRhdGEsIE1hdGguYWJzKHR3ZWVuRGF0YS5lbGFwc2VkKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFRXRUVOX0NPTlNULlBFTkRJTkdfUkVOREVSOlxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHdlZW5EYXRhLnN0YXJ0ID0gdHdlZW5EYXRhLmdldFN0YXJ0VmFsdWUodGFyZ2V0LCB0d2VlbkRhdGEua2V5LCB0YXJnZXRbdHdlZW5EYXRhLmtleV0sIHR3ZWVuRGF0YS5pbmRleCwgdHdlZW4udG90YWxUYXJnZXRzLCB0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5lbmQgPSB0d2VlbkRhdGEuZ2V0RW5kVmFsdWUodGFyZ2V0LCB0d2VlbkRhdGEua2V5LCB0d2VlbkRhdGEuc3RhcnQsIHR3ZWVuRGF0YS5pbmRleCwgdHdlZW4udG90YWxUYXJnZXRzLCB0d2Vlbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5jdXJyZW50ID0gdHdlZW5EYXRhLnN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHdlZW5EYXRhLmtleV0gPSB0d2VlbkRhdGEuc3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHR3ZWVuRGF0YS5zdGF0ZSA9IFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0d2VlbkRhdGEuc3RhdGUgPSBUV0VFTl9DT05TVC5DT01QTEVURTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXR1cm4gVFJVRSBpZiB0aGlzIFR3ZWVuRGF0YSBzdGlsbCBwbGF5aW5nLCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFXHJcbiAgICAgICAgcmV0dXJuICh0d2VlbkRhdGEuc3RhdGUgIT09IFRXRUVOX0NPTlNULkNPTVBMRVRFKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLy8gIG9uQWN0aXZlID0gJ2FjdGl2ZScgZXZlbnQgPSBXaGVuIHRoZSBUd2VlbiBpcyBtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIHRvIHRoZSBhY3RpdmUgbGlzdCBpbiB0aGUgbWFuYWdlciwgZXZlbiBpZiBwbGF5YmFjayBkZWxheWVkXHJcbi8vICBvblN0YXJ0ID0gJ3N0YXJ0JyBldmVudCA9IFdoZW4gdGhlIFR3ZWVuIHN0YXJ0cyBwbGF5aW5nIGZyb20gYSBkZWxheWVkIHN0YXRlICh3aWxsIGhhcHBlbiBzYW1lIHRpbWUgYXMgb25BY3RpdmUgaWYgbm8gZGVsYXkpXHJcbi8vICBvbllveW8gPSAneW95bycgZXZlbnQgPSBXaGVuIHRoZSBUd2VlbiBzdGFydHMgYSB5b3lvXHJcbi8vICBvblJlcGVhdCA9ICdyZXBlYXQnIGV2ZW50ID0gV2hlbiBhIFR3ZWVuRGF0YSByZXBlYXRzIHBsYXliYWNrIChpZiBhbnkpXHJcbi8vICBvbkNvbXBsZXRlID0gJ2NvbXBsZXRlJyBldmVudCA9IFdoZW4gdGhlIFR3ZWVuIGZpbmlzaGVzIGFsbCBwbGF5YmFjayAoY2FuIHNvbWV0aW1lcyBuZXZlciBoYXBwZW4gaWYgcmVwZWF0IC0xKSwgYWxzbyB3aGVuICdzdG9wJyBjYWxsZWRcclxuLy8gIG9uVXBkYXRlID0gJ3VwZGF0ZScgZXZlbnQgPSBXaGVuIHRoZSBUd2VlbiB1cGRhdGVzIGEgVHdlZW5EYXRhIGR1cmluZyBwbGF5YmFjayAoZXhwZW5zaXZlISlcclxuLy8gIG9uTG9vcCA9ICdsb29wJyBldmVudCA9IFVzZWQgdG8gbG9vcCBBTEwgVHdlZW5EYXRhcyBpbiBhIFR3ZWVuXHJcblxyXG5Ud2Vlbi5UWVBFUyA9IFtcclxuICAgICdvbkFjdGl2ZScsXHJcbiAgICAnb25Db21wbGV0ZScsXHJcbiAgICAnb25Mb29wJyxcclxuICAgICdvblJlcGVhdCcsXHJcbiAgICAnb25TdGFydCcsXHJcbiAgICAnb25VcGRhdGUnLFxyXG4gICAgJ29uWW95bydcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFR3ZWVuIG9iamVjdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBUd2VlbnMgaGF2ZSBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSN0d2VlblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuQnVpbGRlckNvbmZpZ3xvYmplY3R9IGNvbmZpZyAtIFRoZSBUd2VlbiBjb25maWd1cmF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSBUaGUgVHdlZW4gdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCd0d2VlbicsIGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHJldHVybiB0aGlzLnNjZW5lLnN5cy50d2VlbnMuYWRkKGNvbmZpZyk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFR3ZWVuIG9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBUd2VlbnMgaGF2ZSBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciN0d2VlblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuVHdlZW5zLlR3ZWVuQnVpbGRlckNvbmZpZ3xvYmplY3R9IGNvbmZpZyAtIFRoZSBUd2VlbiBjb25maWd1cmF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHdlZW5zLlR3ZWVufSBUaGUgVHdlZW4gdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd0d2VlbicsIGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHJldHVybiB0aGlzLnNjZW5lLnN5cy50d2VlbnMuY3JlYXRlKGNvbmZpZyk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFR3ZWVuO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/tween/Tween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/tween/TweenData.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/tweens/tween/TweenData.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns a TweenDataConfig object that describes the tween data for a unique property of a unique target.\r\n * A single Tween consists of multiple TweenDatas, depending on how many properties are being changed by the Tween.\r\n *\r\n * This is an internal function used by the TweenBuilder and should not be accessed directly, instead,\r\n * Tweens should be created using the GameObjectFactory or GameObjectCreator.\r\n *\r\n * @function Phaser.Tweens.TweenData\r\n * @since 3.0.0\r\n *\r\n * @param {any} target - The target to tween.\r\n * @param {integer} index - The target index within the Tween targets array.\r\n * @param {string} key - The property of the target to tween.\r\n * @param {function} getEnd - What the property will be at the END of the Tween.\r\n * @param {function} getStart - What the property will be at the START of the Tween.\r\n * @param {?function} getActive - If not null, is invoked _immediately_ as soon as the TweenData is running, and is set on the target property.\r\n * @param {function} ease - The ease function this tween uses.\r\n * @param {number} delay - Time in ms/frames before tween will start.\r\n * @param {number} duration - Duration of the tween in ms/frames.\r\n * @param {boolean} yoyo - Determines whether the tween should return back to its start value after hold has expired.\r\n * @param {number} hold - Time in ms/frames the tween will pause before repeating or returning to its starting value if yoyo is set to true.\r\n * @param {number} repeat - Number of times to repeat the tween. The tween will always run once regardless, so a repeat value of '1' will play the tween twice.\r\n * @param {number} repeatDelay - Time in ms/frames before the repeat will start.\r\n * @param {boolean} flipX - Should toggleFlipX be called when yoyo or repeat happens?\r\n * @param {boolean} flipY - Should toggleFlipY be called when yoyo or repeat happens?\r\n *\r\n * @return {Phaser.Types.Tweens.TweenDataConfig} The config object describing this TweenData.\r\n */\r\nvar TweenData = function (target, index, key, getEnd, getStart, getActive, ease, delay, duration, yoyo, hold, repeat, repeatDelay, flipX, flipY)\r\n{\r\n    return {\r\n\r\n        //  The target to tween\r\n        target: target,\r\n\r\n        //  The index of the target within the tween targets array\r\n        index: index,\r\n\r\n        //  The property of the target to tween\r\n        key: key,\r\n\r\n        //  What to set the property to the moment the TweenData is invoked.\r\n        getActiveValue: getActive,\r\n\r\n        //  The returned value sets what the property will be at the END of the Tween.\r\n        getEndValue: getEnd,\r\n\r\n        //  The returned value sets what the property will be at the START of the Tween.\r\n        getStartValue: getStart,\r\n\r\n        //  The ease function this tween uses.\r\n        ease: ease,\r\n\r\n        //  Duration of the tween in ms/frames, excludes time for yoyo or repeats.\r\n        duration: 0,\r\n\r\n        //  The total calculated duration of this TweenData (based on duration, repeat, delay and yoyo)\r\n        totalDuration: 0,\r\n\r\n        //  Time in ms/frames before tween will start.\r\n        delay: 0,\r\n\r\n        //  Cause the tween to return back to its start value after hold has expired.\r\n        yoyo: yoyo,\r\n\r\n        //  Time in ms/frames the tween will pause before running the yoyo or starting a repeat.\r\n        hold: 0,\r\n\r\n        //  Number of times to repeat the tween. The tween will always run once regardless, so a repeat value of '1' will play the tween twice.\r\n        repeat: 0,\r\n\r\n        //  Time in ms/frames before the repeat will start.\r\n        repeatDelay: 0,\r\n\r\n        //  Automatically call toggleFlipX when the TweenData yoyos or repeats\r\n        flipX: flipX,\r\n\r\n        //  Automatically call toggleFlipY when the TweenData yoyos or repeats\r\n        flipY: flipY,\r\n\r\n        //  Between 0 and 1 showing completion of this TweenData.\r\n        progress: 0,\r\n\r\n        //  Delta counter.\r\n        elapsed: 0,\r\n\r\n        //  How many repeats are left to run?\r\n        repeatCounter: 0,\r\n\r\n        //  Ease Value Data:\r\n\r\n        start: 0,\r\n        current: 0,\r\n        end: 0,\r\n\r\n        //  Time Durations\r\n        t1: 0,\r\n        t2: 0,\r\n\r\n        //  LoadValue generation functions\r\n        gen: {\r\n            delay: delay,\r\n            duration: duration,\r\n            hold: hold,\r\n            repeat: repeat,\r\n            repeatDelay: repeatDelay\r\n        },\r\n\r\n        //  TWEEN_CONST.CREATED\r\n        state: 0\r\n    };\r\n};\r\n\r\nmodule.exports = TweenData;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vVHdlZW5EYXRhLmpzPzU4NjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksb0NBQW9DO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vVHdlZW5EYXRhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIFR3ZWVuRGF0YUNvbmZpZyBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHR3ZWVuIGRhdGEgZm9yIGEgdW5pcXVlIHByb3BlcnR5IG9mIGEgdW5pcXVlIHRhcmdldC5cclxuICogQSBzaW5nbGUgVHdlZW4gY29uc2lzdHMgb2YgbXVsdGlwbGUgVHdlZW5EYXRhcywgZGVwZW5kaW5nIG9uIGhvdyBtYW55IHByb3BlcnRpZXMgYXJlIGJlaW5nIGNoYW5nZWQgYnkgdGhlIFR3ZWVuLlxyXG4gKlxyXG4gKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIFR3ZWVuQnVpbGRlciBhbmQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSwgaW5zdGVhZCxcclxuICogVHdlZW5zIHNob3VsZCBiZSBjcmVhdGVkIHVzaW5nIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBvciBHYW1lT2JqZWN0Q3JlYXRvci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Ud2VlbnMuVHdlZW5EYXRhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueX0gdGFyZ2V0IC0gVGhlIHRhcmdldCB0byB0d2Vlbi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSB0YXJnZXQgaW5kZXggd2l0aGluIHRoZSBUd2VlbiB0YXJnZXRzIGFycmF5LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgdG8gdHdlZW4uXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldEVuZCAtIFdoYXQgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhlIEVORCBvZiB0aGUgVHdlZW4uXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldFN0YXJ0IC0gV2hhdCB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGUgU1RBUlQgb2YgdGhlIFR3ZWVuLlxyXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gZ2V0QWN0aXZlIC0gSWYgbm90IG51bGwsIGlzIGludm9rZWQgX2ltbWVkaWF0ZWx5XyBhcyBzb29uIGFzIHRoZSBUd2VlbkRhdGEgaXMgcnVubmluZywgYW5kIGlzIHNldCBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBlYXNlIC0gVGhlIGVhc2UgZnVuY3Rpb24gdGhpcyB0d2VlbiB1c2VzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBUaW1lIGluIG1zL2ZyYW1lcyBiZWZvcmUgdHdlZW4gd2lsbCBzdGFydC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gRHVyYXRpb24gb2YgdGhlIHR3ZWVuIGluIG1zL2ZyYW1lcy5cclxuICogQHBhcmFtIHtib29sZWFufSB5b3lvIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0d2VlbiBzaG91bGQgcmV0dXJuIGJhY2sgdG8gaXRzIHN0YXJ0IHZhbHVlIGFmdGVyIGhvbGQgaGFzIGV4cGlyZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBob2xkIC0gVGltZSBpbiBtcy9mcmFtZXMgdGhlIHR3ZWVuIHdpbGwgcGF1c2UgYmVmb3JlIHJlcGVhdGluZyBvciByZXR1cm5pbmcgdG8gaXRzIHN0YXJ0aW5nIHZhbHVlIGlmIHlveW8gaXMgc2V0IHRvIHRydWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXBlYXQgLSBOdW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSB0d2Vlbi4gVGhlIHR3ZWVuIHdpbGwgYWx3YXlzIHJ1biBvbmNlIHJlZ2FyZGxlc3MsIHNvIGEgcmVwZWF0IHZhbHVlIG9mICcxJyB3aWxsIHBsYXkgdGhlIHR3ZWVuIHR3aWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmVwZWF0RGVsYXkgLSBUaW1lIGluIG1zL2ZyYW1lcyBiZWZvcmUgdGhlIHJlcGVhdCB3aWxsIHN0YXJ0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZsaXBYIC0gU2hvdWxkIHRvZ2dsZUZsaXBYIGJlIGNhbGxlZCB3aGVuIHlveW8gb3IgcmVwZWF0IGhhcHBlbnM/XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmxpcFkgLSBTaG91bGQgdG9nZ2xlRmxpcFkgYmUgY2FsbGVkIHdoZW4geW95byBvciByZXBlYXQgaGFwcGVucz9cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLlR3ZWVucy5Ud2VlbkRhdGFDb25maWd9IFRoZSBjb25maWcgb2JqZWN0IGRlc2NyaWJpbmcgdGhpcyBUd2VlbkRhdGEuXHJcbiAqL1xyXG52YXIgVHdlZW5EYXRhID0gZnVuY3Rpb24gKHRhcmdldCwgaW5kZXgsIGtleSwgZ2V0RW5kLCBnZXRTdGFydCwgZ2V0QWN0aXZlLCBlYXNlLCBkZWxheSwgZHVyYXRpb24sIHlveW8sIGhvbGQsIHJlcGVhdCwgcmVwZWF0RGVsYXksIGZsaXBYLCBmbGlwWSlcclxue1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgLy8gIFRoZSB0YXJnZXQgdG8gdHdlZW5cclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuXHJcbiAgICAgICAgLy8gIFRoZSBpbmRleCBvZiB0aGUgdGFyZ2V0IHdpdGhpbiB0aGUgdHdlZW4gdGFyZ2V0cyBhcnJheVxyXG4gICAgICAgIGluZGV4OiBpbmRleCxcclxuXHJcbiAgICAgICAgLy8gIFRoZSBwcm9wZXJ0eSBvZiB0aGUgdGFyZ2V0IHRvIHR3ZWVuXHJcbiAgICAgICAga2V5OiBrZXksXHJcblxyXG4gICAgICAgIC8vICBXaGF0IHRvIHNldCB0aGUgcHJvcGVydHkgdG8gdGhlIG1vbWVudCB0aGUgVHdlZW5EYXRhIGlzIGludm9rZWQuXHJcbiAgICAgICAgZ2V0QWN0aXZlVmFsdWU6IGdldEFjdGl2ZSxcclxuXHJcbiAgICAgICAgLy8gIFRoZSByZXR1cm5lZCB2YWx1ZSBzZXRzIHdoYXQgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhlIEVORCBvZiB0aGUgVHdlZW4uXHJcbiAgICAgICAgZ2V0RW5kVmFsdWU6IGdldEVuZCxcclxuXHJcbiAgICAgICAgLy8gIFRoZSByZXR1cm5lZCB2YWx1ZSBzZXRzIHdoYXQgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhlIFNUQVJUIG9mIHRoZSBUd2Vlbi5cclxuICAgICAgICBnZXRTdGFydFZhbHVlOiBnZXRTdGFydCxcclxuXHJcbiAgICAgICAgLy8gIFRoZSBlYXNlIGZ1bmN0aW9uIHRoaXMgdHdlZW4gdXNlcy5cclxuICAgICAgICBlYXNlOiBlYXNlLFxyXG5cclxuICAgICAgICAvLyAgRHVyYXRpb24gb2YgdGhlIHR3ZWVuIGluIG1zL2ZyYW1lcywgZXhjbHVkZXMgdGltZSBmb3IgeW95byBvciByZXBlYXRzLlxyXG4gICAgICAgIGR1cmF0aW9uOiAwLFxyXG5cclxuICAgICAgICAvLyAgVGhlIHRvdGFsIGNhbGN1bGF0ZWQgZHVyYXRpb24gb2YgdGhpcyBUd2VlbkRhdGEgKGJhc2VkIG9uIGR1cmF0aW9uLCByZXBlYXQsIGRlbGF5IGFuZCB5b3lvKVxyXG4gICAgICAgIHRvdGFsRHVyYXRpb246IDAsXHJcblxyXG4gICAgICAgIC8vICBUaW1lIGluIG1zL2ZyYW1lcyBiZWZvcmUgdHdlZW4gd2lsbCBzdGFydC5cclxuICAgICAgICBkZWxheTogMCxcclxuXHJcbiAgICAgICAgLy8gIENhdXNlIHRoZSB0d2VlbiB0byByZXR1cm4gYmFjayB0byBpdHMgc3RhcnQgdmFsdWUgYWZ0ZXIgaG9sZCBoYXMgZXhwaXJlZC5cclxuICAgICAgICB5b3lvOiB5b3lvLFxyXG5cclxuICAgICAgICAvLyAgVGltZSBpbiBtcy9mcmFtZXMgdGhlIHR3ZWVuIHdpbGwgcGF1c2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHlveW8gb3Igc3RhcnRpbmcgYSByZXBlYXQuXHJcbiAgICAgICAgaG9sZDogMCxcclxuXHJcbiAgICAgICAgLy8gIE51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHR3ZWVuLiBUaGUgdHdlZW4gd2lsbCBhbHdheXMgcnVuIG9uY2UgcmVnYXJkbGVzcywgc28gYSByZXBlYXQgdmFsdWUgb2YgJzEnIHdpbGwgcGxheSB0aGUgdHdlZW4gdHdpY2UuXHJcbiAgICAgICAgcmVwZWF0OiAwLFxyXG5cclxuICAgICAgICAvLyAgVGltZSBpbiBtcy9mcmFtZXMgYmVmb3JlIHRoZSByZXBlYXQgd2lsbCBzdGFydC5cclxuICAgICAgICByZXBlYXREZWxheTogMCxcclxuXHJcbiAgICAgICAgLy8gIEF1dG9tYXRpY2FsbHkgY2FsbCB0b2dnbGVGbGlwWCB3aGVuIHRoZSBUd2VlbkRhdGEgeW95b3Mgb3IgcmVwZWF0c1xyXG4gICAgICAgIGZsaXBYOiBmbGlwWCxcclxuXHJcbiAgICAgICAgLy8gIEF1dG9tYXRpY2FsbHkgY2FsbCB0b2dnbGVGbGlwWSB3aGVuIHRoZSBUd2VlbkRhdGEgeW95b3Mgb3IgcmVwZWF0c1xyXG4gICAgICAgIGZsaXBZOiBmbGlwWSxcclxuXHJcbiAgICAgICAgLy8gIEJldHdlZW4gMCBhbmQgMSBzaG93aW5nIGNvbXBsZXRpb24gb2YgdGhpcyBUd2VlbkRhdGEuXHJcbiAgICAgICAgcHJvZ3Jlc3M6IDAsXHJcblxyXG4gICAgICAgIC8vICBEZWx0YSBjb3VudGVyLlxyXG4gICAgICAgIGVsYXBzZWQ6IDAsXHJcblxyXG4gICAgICAgIC8vICBIb3cgbWFueSByZXBlYXRzIGFyZSBsZWZ0IHRvIHJ1bj9cclxuICAgICAgICByZXBlYXRDb3VudGVyOiAwLFxyXG5cclxuICAgICAgICAvLyAgRWFzZSBWYWx1ZSBEYXRhOlxyXG5cclxuICAgICAgICBzdGFydDogMCxcclxuICAgICAgICBjdXJyZW50OiAwLFxyXG4gICAgICAgIGVuZDogMCxcclxuXHJcbiAgICAgICAgLy8gIFRpbWUgRHVyYXRpb25zXHJcbiAgICAgICAgdDE6IDAsXHJcbiAgICAgICAgdDI6IDAsXHJcblxyXG4gICAgICAgIC8vICBMb2FkVmFsdWUgZ2VuZXJhdGlvbiBmdW5jdGlvbnNcclxuICAgICAgICBnZW46IHtcclxuICAgICAgICAgICAgZGVsYXk6IGRlbGF5LFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgIGhvbGQ6IGhvbGQsXHJcbiAgICAgICAgICAgIHJlcGVhdDogcmVwZWF0LFxyXG4gICAgICAgICAgICByZXBlYXREZWxheTogcmVwZWF0RGVsYXlcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyAgVFdFRU5fQ09OU1QuQ1JFQVRFRFxyXG4gICAgICAgIHN0YXRlOiAwXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUd2VlbkRhdGE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/tween/TweenData.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/tweens/tween/const.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/tweens/tween/const.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TWEEN_CONST = {\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.CREATED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    CREATED: 0,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.INIT\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    INIT: 1,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    DELAY: 2,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.OFFSET_DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    OFFSET_DELAY: 3,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.PENDING_RENDER\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PENDING_RENDER: 4,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.PLAYING_FORWARD\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PLAYING_FORWARD: 5,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.PLAYING_BACKWARD\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PLAYING_BACKWARD: 6,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.HOLD_DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    HOLD_DELAY: 7,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.REPEAT_DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    REPEAT_DELAY: 8,\r\n\r\n    /**\r\n     * TweenData state.\r\n     * \r\n     * @name Phaser.Tweens.COMPLETE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COMPLETE: 9,\r\n\r\n    //  Tween specific (starts from 20 to cleanly allow extra TweenData consts in the future)\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.PENDING_ADD\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PENDING_ADD: 20,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.PAUSED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PAUSED: 21,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.LOOP_DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    LOOP_DELAY: 22,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.ACTIVE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    ACTIVE: 23,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.COMPLETE_DELAY\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    COMPLETE_DELAY: 24,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.PENDING_REMOVE\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    PENDING_REMOVE: 25,\r\n\r\n    /**\r\n     * Tween state.\r\n     * \r\n     * @name Phaser.Tweens.REMOVED\r\n     * @type {integer}\r\n     * @since 3.0.0\r\n     */\r\n    REMOVED: 26\r\n\r\n};\r\n\r\nmodule.exports = TWEEN_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy90d2VlbnMvdHdlZW4vY29uc3QuanM/ODhmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3R3ZWVucy90d2Vlbi9jb25zdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRXRUVOX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHdlZW5EYXRhIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLkNSRUFURURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENSRUFURUQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbkRhdGEgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuSU5JVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSU5JVDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuRGF0YSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5ERUxBWVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgREVMQVk6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbkRhdGEgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuT0ZGU0VUX0RFTEFZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBPRkZTRVRfREVMQVk6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbkRhdGEgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuUEVORElOR19SRU5ERVJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFBFTkRJTkdfUkVOREVSOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHdlZW5EYXRhIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlBMQVlJTkdfRk9SV0FSRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUExBWUlOR19GT1JXQVJEOiA1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHdlZW5EYXRhIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlBMQVlJTkdfQkFDS1dBUkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFBMQVlJTkdfQkFDS1dBUkQ6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbkRhdGEgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuSE9MRF9ERUxBWVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSE9MRF9ERUxBWTogNyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuRGF0YSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5SRVBFQVRfREVMQVlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFJFUEVBVF9ERUxBWTogOCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuRGF0YSBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5DT01QTEVURVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ09NUExFVEU6IDksXHJcblxyXG4gICAgLy8gIFR3ZWVuIHNwZWNpZmljIChzdGFydHMgZnJvbSAyMCB0byBjbGVhbmx5IGFsbG93IGV4dHJhIFR3ZWVuRGF0YSBjb25zdHMgaW4gdGhlIGZ1dHVyZSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLlBFTkRJTkdfQUREXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQRU5ESU5HX0FERDogMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbiBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5QQVVTRURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFBBVVNFRDogMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbiBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5MT09QX0RFTEFZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBMT09QX0RFTEFZOiAyMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLkFDVElWRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQUNUSVZFOiAyMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR3ZWVuIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVHdlZW5zLkNPTVBMRVRFX0RFTEFZXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDT01QTEVURV9ERUxBWTogMjQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUd2VlbiBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlR3ZWVucy5QRU5ESU5HX1JFTU9WRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUEVORElOR19SRU1PVkU6IDI1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHdlZW4gc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Ud2VlbnMuUkVNT1ZFRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUkVNT1ZFRDogMjZcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRXRUVOX0NPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/tweens/tween/const.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/Class.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/utils/Class.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Taken from klasse by mattdesl https://github.com/mattdesl/klasse\r\n\r\nfunction hasGetterOrSetter (def)\r\n{\r\n    return (!!def.get && typeof def.get === 'function') || (!!def.set && typeof def.set === 'function');\r\n}\r\n\r\nfunction getProperty (definition, k, isClassDescriptor)\r\n{\r\n    //  This may be a lightweight object, OR it might be a property that was defined previously.\r\n\r\n    //  For simple class descriptors we can just assume its NOT previously defined.\r\n    var def = (isClassDescriptor) ? definition[k] : Object.getOwnPropertyDescriptor(definition, k);\r\n\r\n    if (!isClassDescriptor && def.value && typeof def.value === 'object')\r\n    {\r\n        def = def.value;\r\n    }\r\n\r\n    //  This might be a regular property, or it may be a getter/setter the user defined in a class.\r\n    if (def && hasGetterOrSetter(def))\r\n    {\r\n        if (typeof def.enumerable === 'undefined')\r\n        {\r\n            def.enumerable = true;\r\n        }\r\n\r\n        if (typeof def.configurable === 'undefined')\r\n        {\r\n            def.configurable = true;\r\n        }\r\n\r\n        return def;\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction hasNonConfigurable (obj, k)\r\n{\r\n    var prop = Object.getOwnPropertyDescriptor(obj, k);\r\n\r\n    if (!prop)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    if (prop.value && typeof prop.value === 'object')\r\n    {\r\n        prop = prop.value;\r\n    }\r\n\r\n    if (prop.configurable === false)\r\n    {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Extends the given `myClass` object's prototype with the properties of `definition`.\r\n *\r\n * @function extend\r\n * @param {Object} ctor The constructor object to mix into.\r\n * @param {Object} definition A dictionary of functions for the class.\r\n * @param {boolean} isClassDescriptor Is the definition a class descriptor?\r\n * @param {Object} [extend] The parent constructor object.\r\n */\r\nfunction extend (ctor, definition, isClassDescriptor, extend)\r\n{\r\n    for (var k in definition)\r\n    {\r\n        if (!definition.hasOwnProperty(k))\r\n        {\r\n            continue;\r\n        }\r\n\r\n        var def = getProperty(definition, k, isClassDescriptor);\r\n\r\n        if (def !== false)\r\n        {\r\n            //  If Extends is used, we will check its prototype to see if the final variable exists.\r\n\r\n            var parent = extend || ctor;\r\n\r\n            if (hasNonConfigurable(parent.prototype, k))\r\n            {\r\n                //  Just skip the final property\r\n                if (Class.ignoreFinals)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                //  We cannot re-define a property that is configurable=false.\r\n                //  So we will consider them final and throw an error. This is by\r\n                //  default so it is clear to the developer what is happening.\r\n                //  You can set ignoreFinals to true if you need to extend a class\r\n                //  which has configurable=false; it will simply not re-define final properties.\r\n                throw new Error('cannot override final property \\'' + k + '\\', set Class.ignoreFinals = true to skip');\r\n            }\r\n\r\n            Object.defineProperty(ctor.prototype, k, def);\r\n        }\r\n        else\r\n        {\r\n            ctor.prototype[k] = definition[k];\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Applies the given `mixins` to the prototype of `myClass`.\r\n *\r\n * @function mixin\r\n * @param {Object} myClass The constructor object to mix into.\r\n * @param {Object|Array<Object>} mixins The mixins to apply to the constructor.\r\n */\r\nfunction mixin (myClass, mixins)\r\n{\r\n    if (!mixins)\r\n    {\r\n        return;\r\n    }\r\n\r\n    if (!Array.isArray(mixins))\r\n    {\r\n        mixins = [ mixins ];\r\n    }\r\n\r\n    for (var i = 0; i < mixins.length; i++)\r\n    {\r\n        extend(myClass, mixins[i].prototype || mixins[i]);\r\n    }\r\n}\r\n\r\n/**\r\n * Creates a new class with the given descriptor.\r\n * The constructor, defined by the name `initialize`,\r\n * is an optional function. If unspecified, an anonymous\r\n * function will be used which calls the parent class (if\r\n * one exists).\r\n *\r\n * You can also use `Extends` and `Mixins` to provide subclassing\r\n * and inheritance.\r\n *\r\n * @class Phaser.Class\r\n * @constructor\r\n * @param {Object} definition a dictionary of functions for the class\r\n * @example\r\n *\r\n *      var MyClass = new Phaser.Class({\r\n *\r\n *          initialize: function() {\r\n *              this.foo = 2.0;\r\n *          },\r\n *\r\n *          bar: function() {\r\n *              return this.foo + 5;\r\n *          }\r\n *      });\r\n */\r\nfunction Class (definition)\r\n{\r\n    if (!definition)\r\n    {\r\n        definition = {};\r\n    }\r\n\r\n    //  The variable name here dictates what we see in Chrome debugger\r\n    var initialize;\r\n    var Extends;\r\n\r\n    if (definition.initialize)\r\n    {\r\n        if (typeof definition.initialize !== 'function')\r\n        {\r\n            throw new Error('initialize must be a function');\r\n        }\r\n\r\n        initialize = definition.initialize;\r\n\r\n        //  Usually we should avoid 'delete' in V8 at all costs.\r\n        //  However, its unlikely to make any performance difference\r\n        //  here since we only call this on class creation (i.e. not object creation).\r\n        delete definition.initialize;\r\n    }\r\n    else if (definition.Extends)\r\n    {\r\n        var base = definition.Extends;\r\n\r\n        initialize = function ()\r\n        {\r\n            base.apply(this, arguments);\r\n        };\r\n    }\r\n    else\r\n    {\r\n        initialize = function () {};\r\n    }\r\n\r\n    if (definition.Extends)\r\n    {\r\n        initialize.prototype = Object.create(definition.Extends.prototype);\r\n        initialize.prototype.constructor = initialize;\r\n\r\n        //  For getOwnPropertyDescriptor to work, we need to act directly on the Extends (or Mixin)\r\n\r\n        Extends = definition.Extends;\r\n\r\n        delete definition.Extends;\r\n    }\r\n    else\r\n    {\r\n        initialize.prototype.constructor = initialize;\r\n    }\r\n\r\n    //  Grab the mixins, if they are specified...\r\n    var mixins = null;\r\n\r\n    if (definition.Mixins)\r\n    {\r\n        mixins = definition.Mixins;\r\n        delete definition.Mixins;\r\n    }\r\n\r\n    //  First, mixin if we can.\r\n    mixin(initialize, mixins);\r\n\r\n    //  Now we grab the actual definition which defines the overrides.\r\n    extend(initialize, definition, true, Extends);\r\n\r\n    return initialize;\r\n}\r\n\r\nClass.extend = extend;\r\nClass.mixin = mixin;\r\nClass.ignoreFinals = false;\r\n\r\nmodule.exports = Class;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9DbGFzcy5qcz84NTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLHFCQUFxQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL0NsYXNzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgVGFrZW4gZnJvbSBrbGFzc2UgYnkgbWF0dGRlc2wgaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL2tsYXNzZVxyXG5cclxuZnVuY3Rpb24gaGFzR2V0dGVyT3JTZXR0ZXIgKGRlZilcclxue1xyXG4gICAgcmV0dXJuICghIWRlZi5nZXQgJiYgdHlwZW9mIGRlZi5nZXQgPT09ICdmdW5jdGlvbicpIHx8ICghIWRlZi5zZXQgJiYgdHlwZW9mIGRlZi5zZXQgPT09ICdmdW5jdGlvbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eSAoZGVmaW5pdGlvbiwgaywgaXNDbGFzc0Rlc2NyaXB0b3IpXHJcbntcclxuICAgIC8vICBUaGlzIG1heSBiZSBhIGxpZ2h0d2VpZ2h0IG9iamVjdCwgT1IgaXQgbWlnaHQgYmUgYSBwcm9wZXJ0eSB0aGF0IHdhcyBkZWZpbmVkIHByZXZpb3VzbHkuXHJcblxyXG4gICAgLy8gIEZvciBzaW1wbGUgY2xhc3MgZGVzY3JpcHRvcnMgd2UgY2FuIGp1c3QgYXNzdW1lIGl0cyBOT1QgcHJldmlvdXNseSBkZWZpbmVkLlxyXG4gICAgdmFyIGRlZiA9IChpc0NsYXNzRGVzY3JpcHRvcikgPyBkZWZpbml0aW9uW2tdIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZWZpbml0aW9uLCBrKTtcclxuXHJcbiAgICBpZiAoIWlzQ2xhc3NEZXNjcmlwdG9yICYmIGRlZi52YWx1ZSAmJiB0eXBlb2YgZGVmLnZhbHVlID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICBkZWYgPSBkZWYudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFRoaXMgbWlnaHQgYmUgYSByZWd1bGFyIHByb3BlcnR5LCBvciBpdCBtYXkgYmUgYSBnZXR0ZXIvc2V0dGVyIHRoZSB1c2VyIGRlZmluZWQgaW4gYSBjbGFzcy5cclxuICAgIGlmIChkZWYgJiYgaGFzR2V0dGVyT3JTZXR0ZXIoZGVmKSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIGRlZi5lbnVtZXJhYmxlID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlZi5lbnVtZXJhYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZGVmLmNvbmZpZ3VyYWJsZSA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWYuY29uZmlndXJhYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZWY7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNOb25Db25maWd1cmFibGUgKG9iaiwgaylcclxue1xyXG4gICAgdmFyIHByb3AgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgayk7XHJcblxyXG4gICAgaWYgKCFwcm9wKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJvcC52YWx1ZSAmJiB0eXBlb2YgcHJvcC52YWx1ZSA9PT0gJ29iamVjdCcpXHJcbiAgICB7XHJcbiAgICAgICAgcHJvcCA9IHByb3AudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3AuY29uZmlndXJhYmxlID09PSBmYWxzZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRlbmRzIHRoZSBnaXZlbiBgbXlDbGFzc2Agb2JqZWN0J3MgcHJvdG90eXBlIHdpdGggdGhlIHByb3BlcnRpZXMgb2YgYGRlZmluaXRpb25gLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gZXh0ZW5kXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdG9yIFRoZSBjb25zdHJ1Y3RvciBvYmplY3QgdG8gbWl4IGludG8uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZpbml0aW9uIEEgZGljdGlvbmFyeSBvZiBmdW5jdGlvbnMgZm9yIHRoZSBjbGFzcy5cclxuICogQHBhcmFtIHtib29sZWFufSBpc0NsYXNzRGVzY3JpcHRvciBJcyB0aGUgZGVmaW5pdGlvbiBhIGNsYXNzIGRlc2NyaXB0b3I/XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZXh0ZW5kXSBUaGUgcGFyZW50IGNvbnN0cnVjdG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGV4dGVuZCAoY3RvciwgZGVmaW5pdGlvbiwgaXNDbGFzc0Rlc2NyaXB0b3IsIGV4dGVuZClcclxue1xyXG4gICAgZm9yICh2YXIgayBpbiBkZWZpbml0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghZGVmaW5pdGlvbi5oYXNPd25Qcm9wZXJ0eShrKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlZiA9IGdldFByb3BlcnR5KGRlZmluaXRpb24sIGssIGlzQ2xhc3NEZXNjcmlwdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKGRlZiAhPT0gZmFsc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgRXh0ZW5kcyBpcyB1c2VkLCB3ZSB3aWxsIGNoZWNrIGl0cyBwcm90b3R5cGUgdG8gc2VlIGlmIHRoZSBmaW5hbCB2YXJpYWJsZSBleGlzdHMuXHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gZXh0ZW5kIHx8IGN0b3I7XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzTm9uQ29uZmlndXJhYmxlKHBhcmVudC5wcm90b3R5cGUsIGspKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSnVzdCBza2lwIHRoZSBmaW5hbCBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKENsYXNzLmlnbm9yZUZpbmFscylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgV2UgY2Fubm90IHJlLWRlZmluZSBhIHByb3BlcnR5IHRoYXQgaXMgY29uZmlndXJhYmxlPWZhbHNlLlxyXG4gICAgICAgICAgICAgICAgLy8gIFNvIHdlIHdpbGwgY29uc2lkZXIgdGhlbSBmaW5hbCBhbmQgdGhyb3cgYW4gZXJyb3IuIFRoaXMgaXMgYnlcclxuICAgICAgICAgICAgICAgIC8vICBkZWZhdWx0IHNvIGl0IGlzIGNsZWFyIHRvIHRoZSBkZXZlbG9wZXIgd2hhdCBpcyBoYXBwZW5pbmcuXHJcbiAgICAgICAgICAgICAgICAvLyAgWW91IGNhbiBzZXQgaWdub3JlRmluYWxzIHRvIHRydWUgaWYgeW91IG5lZWQgdG8gZXh0ZW5kIGEgY2xhc3NcclxuICAgICAgICAgICAgICAgIC8vICB3aGljaCBoYXMgY29uZmlndXJhYmxlPWZhbHNlOyBpdCB3aWxsIHNpbXBseSBub3QgcmUtZGVmaW5lIGZpbmFsIHByb3BlcnRpZXMuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBvdmVycmlkZSBmaW5hbCBwcm9wZXJ0eSBcXCcnICsgayArICdcXCcsIHNldCBDbGFzcy5pZ25vcmVGaW5hbHMgPSB0cnVlIHRvIHNraXAnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0b3IucHJvdG90eXBlLCBrLCBkZWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjdG9yLnByb3RvdHlwZVtrXSA9IGRlZmluaXRpb25ba107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyB0aGUgZ2l2ZW4gYG1peGluc2AgdG8gdGhlIHByb3RvdHlwZSBvZiBgbXlDbGFzc2AuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBtaXhpblxyXG4gKiBAcGFyYW0ge09iamVjdH0gbXlDbGFzcyBUaGUgY29uc3RydWN0b3Igb2JqZWN0IHRvIG1peCBpbnRvLlxyXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTxPYmplY3Q+fSBtaXhpbnMgVGhlIG1peGlucyB0byBhcHBseSB0byB0aGUgY29uc3RydWN0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBtaXhpbiAobXlDbGFzcywgbWl4aW5zKVxyXG57XHJcbiAgICBpZiAoIW1peGlucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1peGlucykpXHJcbiAgICB7XHJcbiAgICAgICAgbWl4aW5zID0gWyBtaXhpbnMgXTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBleHRlbmQobXlDbGFzcywgbWl4aW5zW2ldLnByb3RvdHlwZSB8fCBtaXhpbnNbaV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBjbGFzcyB3aXRoIHRoZSBnaXZlbiBkZXNjcmlwdG9yLlxyXG4gKiBUaGUgY29uc3RydWN0b3IsIGRlZmluZWQgYnkgdGhlIG5hbWUgYGluaXRpYWxpemVgLFxyXG4gKiBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbi4gSWYgdW5zcGVjaWZpZWQsIGFuIGFub255bW91c1xyXG4gKiBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgd2hpY2ggY2FsbHMgdGhlIHBhcmVudCBjbGFzcyAoaWZcclxuICogb25lIGV4aXN0cykuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyB1c2UgYEV4dGVuZHNgIGFuZCBgTWl4aW5zYCB0byBwcm92aWRlIHN1YmNsYXNzaW5nXHJcbiAqIGFuZCBpbmhlcml0YW5jZS5cclxuICpcclxuICogQGNsYXNzIFBoYXNlci5DbGFzc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24gYSBkaWN0aW9uYXJ5IG9mIGZ1bmN0aW9ucyBmb3IgdGhlIGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqICAgICAgdmFyIE15Q2xhc3MgPSBuZXcgUGhhc2VyLkNsYXNzKHtcclxuICpcclxuICogICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAqICAgICAgICAgICAgICB0aGlzLmZvbyA9IDIuMDtcclxuICogICAgICAgICAgfSxcclxuICpcclxuICogICAgICAgICAgYmFyOiBmdW5jdGlvbigpIHtcclxuICogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbyArIDU7XHJcbiAqICAgICAgICAgIH1cclxuICogICAgICB9KTtcclxuICovXHJcbmZ1bmN0aW9uIENsYXNzIChkZWZpbml0aW9uKVxyXG57XHJcbiAgICBpZiAoIWRlZmluaXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgZGVmaW5pdGlvbiA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBUaGUgdmFyaWFibGUgbmFtZSBoZXJlIGRpY3RhdGVzIHdoYXQgd2Ugc2VlIGluIENocm9tZSBkZWJ1Z2dlclxyXG4gICAgdmFyIGluaXRpYWxpemU7XHJcbiAgICB2YXIgRXh0ZW5kcztcclxuXHJcbiAgICBpZiAoZGVmaW5pdGlvbi5pbml0aWFsaXplKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbi5pbml0aWFsaXplICE9PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbml0aWFsaXplIG11c3QgYmUgYSBmdW5jdGlvbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5pdGlhbGl6ZSA9IGRlZmluaXRpb24uaW5pdGlhbGl6ZTtcclxuXHJcbiAgICAgICAgLy8gIFVzdWFsbHkgd2Ugc2hvdWxkIGF2b2lkICdkZWxldGUnIGluIFY4IGF0IGFsbCBjb3N0cy5cclxuICAgICAgICAvLyAgSG93ZXZlciwgaXRzIHVubGlrZWx5IHRvIG1ha2UgYW55IHBlcmZvcm1hbmNlIGRpZmZlcmVuY2VcclxuICAgICAgICAvLyAgaGVyZSBzaW5jZSB3ZSBvbmx5IGNhbGwgdGhpcyBvbiBjbGFzcyBjcmVhdGlvbiAoaS5lLiBub3Qgb2JqZWN0IGNyZWF0aW9uKS5cclxuICAgICAgICBkZWxldGUgZGVmaW5pdGlvbi5pbml0aWFsaXplO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZGVmaW5pdGlvbi5FeHRlbmRzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBiYXNlID0gZGVmaW5pdGlvbi5FeHRlbmRzO1xyXG5cclxuICAgICAgICBpbml0aWFsaXplID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVmaW5pdGlvbi5FeHRlbmRzKVxyXG4gICAge1xyXG4gICAgICAgIGluaXRpYWxpemUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShkZWZpbml0aW9uLkV4dGVuZHMucHJvdG90eXBlKTtcclxuICAgICAgICBpbml0aWFsaXplLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGluaXRpYWxpemU7XHJcblxyXG4gICAgICAgIC8vICBGb3IgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvIHdvcmssIHdlIG5lZWQgdG8gYWN0IGRpcmVjdGx5IG9uIHRoZSBFeHRlbmRzIChvciBNaXhpbilcclxuXHJcbiAgICAgICAgRXh0ZW5kcyA9IGRlZmluaXRpb24uRXh0ZW5kcztcclxuXHJcbiAgICAgICAgZGVsZXRlIGRlZmluaXRpb24uRXh0ZW5kcztcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBpbml0aWFsaXplLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGluaXRpYWxpemU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEdyYWIgdGhlIG1peGlucywgaWYgdGhleSBhcmUgc3BlY2lmaWVkLi4uXHJcbiAgICB2YXIgbWl4aW5zID0gbnVsbDtcclxuXHJcbiAgICBpZiAoZGVmaW5pdGlvbi5NaXhpbnMpXHJcbiAgICB7XHJcbiAgICAgICAgbWl4aW5zID0gZGVmaW5pdGlvbi5NaXhpbnM7XHJcbiAgICAgICAgZGVsZXRlIGRlZmluaXRpb24uTWl4aW5zO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBGaXJzdCwgbWl4aW4gaWYgd2UgY2FuLlxyXG4gICAgbWl4aW4oaW5pdGlhbGl6ZSwgbWl4aW5zKTtcclxuXHJcbiAgICAvLyAgTm93IHdlIGdyYWIgdGhlIGFjdHVhbCBkZWZpbml0aW9uIHdoaWNoIGRlZmluZXMgdGhlIG92ZXJyaWRlcy5cclxuICAgIGV4dGVuZChpbml0aWFsaXplLCBkZWZpbml0aW9uLCB0cnVlLCBFeHRlbmRzKTtcclxuXHJcbiAgICByZXR1cm4gaW5pdGlhbGl6ZTtcclxufVxyXG5cclxuQ2xhc3MuZXh0ZW5kID0gZXh0ZW5kO1xyXG5DbGFzcy5taXhpbiA9IG1peGluO1xyXG5DbGFzcy5pZ25vcmVGaW5hbHMgPSBmYWxzZTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xhc3M7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/Class.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/NOOP.js":
/*!***********************************************!*\
  !*** ./node_modules/phaser/src/utils/NOOP.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A NOOP (No Operation) callback function.\r\n *\r\n * Used internally by Phaser when it's more expensive to determine if a callback exists\r\n * than it is to just invoke an empty function.\r\n *\r\n * @function Phaser.Utils.NOOP\r\n * @since 3.0.0\r\n */\r\nvar NOOP = function ()\r\n{\r\n    //  NOOP\r\n};\r\n\r\nmodule.exports = NOOP;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9OT09QLmpzPzQyMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvTk9PUC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgTk9PUCAoTm8gT3BlcmF0aW9uKSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICpcclxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IFBoYXNlciB3aGVuIGl0J3MgbW9yZSBleHBlbnNpdmUgdG8gZGV0ZXJtaW5lIGlmIGEgY2FsbGJhY2sgZXhpc3RzXHJcbiAqIHRoYW4gaXQgaXMgdG8ganVzdCBpbnZva2UgYW4gZW1wdHkgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuTk9PUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBOT09QID0gZnVuY3Rpb24gKClcclxue1xyXG4gICAgLy8gIE5PT1BcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTk9PUDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/NOOP.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Add.js":
/*!****************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Add.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds the given item, or array of items, to the array.\r\n *\r\n * Each item must be unique within the array.\r\n *\r\n * The array is modified in-place and returned.\r\n *\r\n * You can optionally specify a limit to the maximum size of the array. If the quantity of items being\r\n * added will take the array length over this limit, it will stop adding once the limit is reached.\r\n *\r\n * You can optionally specify a callback to be invoked for each item successfully added to the array.\r\n *\r\n * @function Phaser.Utils.Array.Add\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to be added to.\r\n * @param {any|any[]} item - The item, or array of items, to add to the array. Each item must be unique within the array.\r\n * @param {integer} [limit] - Optional limit which caps the size of the array.\r\n * @param {function} [callback] - A callback to be invoked for each item successfully added to the array.\r\n * @param {object} [context] - The context in which the callback is invoked.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar Add = function (array, item, limit, callback, context)\r\n{\r\n    if (context === undefined) { context = array; }\r\n\r\n    if (limit > 0)\r\n    {\r\n        var remaining = limit - array.length;\r\n\r\n        //  There's nothing more we can do here, the array is full\r\n        if (remaining <= 0)\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    //  Fast path to avoid array mutation and iteration\r\n    if (!Array.isArray(item))\r\n    {\r\n        if (array.indexOf(item) === -1)\r\n        {\r\n            array.push(item);\r\n\r\n            if (callback)\r\n            {\r\n                callback.call(context, item);\r\n            }\r\n\r\n            return item;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    //  If we got this far, we have an array of items to insert\r\n\r\n    //  Ensure all the items are unique\r\n    var itemLength = item.length - 1;\r\n\r\n    while (itemLength >= 0)\r\n    {\r\n        if (array.indexOf(item[itemLength]) !== -1)\r\n        {\r\n            //  Already exists in array, so remove it\r\n            item.splice(itemLength, 1);\r\n        }\r\n\r\n        itemLength--;\r\n    }\r\n\r\n    //  Anything left?\r\n    itemLength = item.length;\r\n\r\n    if (itemLength === 0)\r\n    {\r\n        return null;\r\n    }\r\n\r\n    if (limit > 0 && itemLength > remaining)\r\n    {\r\n        item.splice(remaining);\r\n\r\n        itemLength = remaining;\r\n    }\r\n\r\n    for (var i = 0; i < itemLength; i++)\r\n    {\r\n        var entry = item[i];\r\n\r\n        array.push(entry);\r\n\r\n        if (callback)\r\n        {\r\n            callback.call(context, entry);\r\n        }\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = Add;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9BZGQuanM/MThjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUJBQWlCOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvQWRkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQWRkcyB0aGUgZ2l2ZW4gaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIHRvIHRoZSBhcnJheS5cclxuICpcclxuICogRWFjaCBpdGVtIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRoZSBhcnJheSBpcyBtb2RpZmllZCBpbi1wbGFjZSBhbmQgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgbGltaXQgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYXJyYXkuIElmIHRoZSBxdWFudGl0eSBvZiBpdGVtcyBiZWluZ1xyXG4gKiBhZGRlZCB3aWxsIHRha2UgdGhlIGFycmF5IGxlbmd0aCBvdmVyIHRoaXMgbGltaXQsIGl0IHdpbGwgc3RvcCBhZGRpbmcgb25jZSB0aGUgbGltaXQgaXMgcmVhY2hlZC5cclxuICpcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0gc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhcnJheS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5BZGRcclxuICogQHNpbmNlIDMuNC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIGJlIGFkZGVkIHRvLlxyXG4gKiBAcGFyYW0ge2FueXxhbnlbXX0gaXRlbSAtIFRoZSBpdGVtLCBvciBhcnJheSBvZiBpdGVtcywgdG8gYWRkIHRvIHRoZSBhcnJheS4gRWFjaCBpdGVtIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2xpbWl0XSAtIE9wdGlvbmFsIGxpbWl0IHdoaWNoIGNhcHMgdGhlIHNpemUgb2YgdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0gc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gVGhlIGlucHV0IGFycmF5LlxyXG4gKi9cclxudmFyIEFkZCA9IGZ1bmN0aW9uIChhcnJheSwgaXRlbSwgbGltaXQsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG57XHJcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNvbnRleHQgPSBhcnJheTsgfVxyXG5cclxuICAgIGlmIChsaW1pdCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IGxpbWl0IC0gYXJyYXkubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyAgVGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvIGhlcmUsIHRoZSBhcnJheSBpcyBmdWxsXHJcbiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBGYXN0IHBhdGggdG8gYXZvaWQgYXJyYXkgbXV0YXRpb24gYW5kIGl0ZXJhdGlvblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0pKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhcnJheS5pbmRleE9mKGl0ZW0pID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFycmF5LnB1c2goaXRlbSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIElmIHdlIGdvdCB0aGlzIGZhciwgd2UgaGF2ZSBhbiBhcnJheSBvZiBpdGVtcyB0byBpbnNlcnRcclxuXHJcbiAgICAvLyAgRW5zdXJlIGFsbCB0aGUgaXRlbXMgYXJlIHVuaXF1ZVxyXG4gICAgdmFyIGl0ZW1MZW5ndGggPSBpdGVtLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgd2hpbGUgKGl0ZW1MZW5ndGggPj0gMClcclxuICAgIHtcclxuICAgICAgICBpZiAoYXJyYXkuaW5kZXhPZihpdGVtW2l0ZW1MZW5ndGhdKSAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQWxyZWFkeSBleGlzdHMgaW4gYXJyYXksIHNvIHJlbW92ZSBpdFxyXG4gICAgICAgICAgICBpdGVtLnNwbGljZShpdGVtTGVuZ3RoLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1MZW5ndGgtLTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQW55dGhpbmcgbGVmdD9cclxuICAgIGl0ZW1MZW5ndGggPSBpdGVtLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoaXRlbUxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGltaXQgPiAwICYmIGl0ZW1MZW5ndGggPiByZW1haW5pbmcpXHJcbiAgICB7XHJcbiAgICAgICAgaXRlbS5zcGxpY2UocmVtYWluaW5nKTtcclxuXHJcbiAgICAgICAgaXRlbUxlbmd0aCA9IHJlbWFpbmluZztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1MZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBpdGVtW2ldO1xyXG5cclxuICAgICAgICBhcnJheS5wdXNoKGVudHJ5KTtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBlbnRyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBZGQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Add.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/AddAt.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/AddAt.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds the given item, or array of items, to the array starting at the index specified.\r\n * \r\n * Each item must be unique within the array.\r\n * \r\n * Existing elements in the array are shifted up.\r\n * \r\n * The array is modified in-place and returned.\r\n * \r\n * You can optionally specify a limit to the maximum size of the array. If the quantity of items being\r\n * added will take the array length over this limit, it will stop adding once the limit is reached.\r\n * \r\n * You can optionally specify a callback to be invoked for each item successfully added to the array.\r\n *\r\n * @function Phaser.Utils.Array.AddAt\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to be added to.\r\n * @param {any|any[]} item - The item, or array of items, to add to the array.\r\n * @param {integer} [index=0] - The index in the array where the item will be inserted.\r\n * @param {integer} [limit] - Optional limit which caps the size of the array.\r\n * @param {function} [callback] - A callback to be invoked for each item successfully added to the array.\r\n * @param {object} [context] - The context in which the callback is invoked.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar AddAt = function (array, item, index, limit, callback, context)\r\n{\r\n    if (index === undefined) { index = 0; }\r\n    if (context === undefined) { context = array; }\r\n\r\n    if (limit > 0)\r\n    {\r\n        var remaining = limit - array.length;\r\n\r\n        //  There's nothing more we can do here, the array is full\r\n        if (remaining <= 0)\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    //  Fast path to avoid array mutation and iteration\r\n    if (!Array.isArray(item))\r\n    {\r\n        if (array.indexOf(item) === -1)\r\n        {\r\n            array.splice(index, 0, item);\r\n\r\n            if (callback)\r\n            {\r\n                callback.call(context, item);\r\n            }\r\n\r\n            return item;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    //  If we got this far, we have an array of items to insert\r\n\r\n    //  Ensure all the items are unique\r\n    var itemLength = item.length - 1;\r\n\r\n    while (itemLength >= 0)\r\n    {\r\n        if (array.indexOf(item[itemLength]) !== -1)\r\n        {\r\n            //  Already exists in array, so remove it\r\n            item.pop();\r\n        }\r\n\r\n        itemLength--;\r\n    }\r\n\r\n    //  Anything left?\r\n    itemLength = item.length;\r\n\r\n    if (itemLength === 0)\r\n    {\r\n        return null;\r\n    }\r\n\r\n    //  Truncate to the limit\r\n    if (limit > 0 && itemLength > remaining)\r\n    {\r\n        item.splice(remaining);\r\n\r\n        itemLength = remaining;\r\n    }\r\n\r\n    for (var i = itemLength - 1; i >= 0; i--)\r\n    {\r\n        var entry = item[i];\r\n\r\n        array.splice(index, 0, entry);\r\n\r\n        if (callback)\r\n        {\r\n            callback.call(context, entry);\r\n        }\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = AddAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9BZGRBdC5qcz8yOTA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7QUFDekMsZ0NBQWdDLGlCQUFpQjs7QUFFakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L0FkZEF0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQWRkcyB0aGUgZ2l2ZW4gaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIHRvIHRoZSBhcnJheSBzdGFydGluZyBhdCB0aGUgaW5kZXggc3BlY2lmaWVkLlxyXG4gKiBcclxuICogRWFjaCBpdGVtIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgYXJyYXkuXHJcbiAqIFxyXG4gKiBFeGlzdGluZyBlbGVtZW50cyBpbiB0aGUgYXJyYXkgYXJlIHNoaWZ0ZWQgdXAuXHJcbiAqIFxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UgYW5kIHJldHVybmVkLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBsaW1pdCB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBhcnJheS4gSWYgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIGJlaW5nXHJcbiAqIGFkZGVkIHdpbGwgdGFrZSB0aGUgYXJyYXkgbGVuZ3RoIG92ZXIgdGhpcyBsaW1pdCwgaXQgd2lsbCBzdG9wIGFkZGluZyBvbmNlIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0gc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhcnJheS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5BZGRBdFxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gYmUgYWRkZWQgdG8uXHJcbiAqIEBwYXJhbSB7YW55fGFueVtdfSBpdGVtIC0gVGhlIGl0ZW0sIG9yIGFycmF5IG9mIGl0ZW1zLCB0byBhZGQgdG8gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIFRoZSBpbmRleCBpbiB0aGUgYXJyYXkgd2hlcmUgdGhlIGl0ZW0gd2lsbCBiZSBpbnNlcnRlZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbbGltaXRdIC0gT3B0aW9uYWwgbGltaXQgd2hpY2ggY2FwcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgZm9yIGVhY2ggaXRlbSBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBUaGUgaW5wdXQgYXJyYXkuXHJcbiAqL1xyXG52YXIgQWRkQXQgPSBmdW5jdGlvbiAoYXJyYXksIGl0ZW0sIGluZGV4LCBsaW1pdCwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbntcclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gYXJyYXk7IH1cclxuXHJcbiAgICBpZiAobGltaXQgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW1haW5pbmcgPSBsaW1pdCAtIGFycmF5Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gIFRoZXJlJ3Mgbm90aGluZyBtb3JlIHdlIGNhbiBkbyBoZXJlLCB0aGUgYXJyYXkgaXMgZnVsbFxyXG4gICAgICAgIGlmIChyZW1haW5pbmcgPD0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgRmFzdCBwYXRoIHRvIGF2b2lkIGFycmF5IG11dGF0aW9uIGFuZCBpdGVyYXRpb25cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtKSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGhhdmUgYW4gYXJyYXkgb2YgaXRlbXMgdG8gaW5zZXJ0XHJcblxyXG4gICAgLy8gIEVuc3VyZSBhbGwgdGhlIGl0ZW1zIGFyZSB1bmlxdWVcclxuICAgIHZhciBpdGVtTGVuZ3RoID0gaXRlbS5sZW5ndGggLSAxO1xyXG5cclxuICAgIHdoaWxlIChpdGVtTGVuZ3RoID49IDApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFycmF5LmluZGV4T2YoaXRlbVtpdGVtTGVuZ3RoXSkgIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFscmVhZHkgZXhpc3RzIGluIGFycmF5LCBzbyByZW1vdmUgaXRcclxuICAgICAgICAgICAgaXRlbS5wb3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1MZW5ndGgtLTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQW55dGhpbmcgbGVmdD9cclxuICAgIGl0ZW1MZW5ndGggPSBpdGVtLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoaXRlbUxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgVHJ1bmNhdGUgdG8gdGhlIGxpbWl0XHJcbiAgICBpZiAobGltaXQgPiAwICYmIGl0ZW1MZW5ndGggPiByZW1haW5pbmcpXHJcbiAgICB7XHJcbiAgICAgICAgaXRlbS5zcGxpY2UocmVtYWluaW5nKTtcclxuXHJcbiAgICAgICAgaXRlbUxlbmd0aCA9IHJlbWFpbmluZztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gaXRlbUxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGl0ZW1baV07XHJcblxyXG4gICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMCwgZW50cnkpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGVudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFkZEF0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/AddAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/BringToTop.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/BringToTop.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the given element to the top of the array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.BringToTop\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array.\r\n * @param {*} item - The element to move.\r\n *\r\n * @return {*} The element that was moved.\r\n */\r\nvar BringToTop = function (array, item)\r\n{\r\n    var currentIndex = array.indexOf(item);\r\n\r\n    if (currentIndex !== -1 && currentIndex < array.length)\r\n    {\r\n        array.splice(currentIndex, 1);\r\n        array.push(item);\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = BringToTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9CcmluZ1RvVG9wLmpzPzc0MjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsRUFBRTtBQUNiO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvQnJpbmdUb1RvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIGFycmF5LlxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuQnJpbmdUb1RvcFxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7Kn0gaXRlbSAtIFRoZSBlbGVtZW50IHRvIG1vdmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp9IFRoZSBlbGVtZW50IHRoYXQgd2FzIG1vdmVkLlxyXG4gKi9cclxudmFyIEJyaW5nVG9Ub3AgPSBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pXHJcbntcclxuICAgIHZhciBjdXJyZW50SW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xyXG5cclxuICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA8IGFycmF5Lmxlbmd0aClcclxuICAgIHtcclxuICAgICAgICBhcnJheS5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcclxuICAgICAgICBhcnJheS5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCcmluZ1RvVG9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/BringToTop.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/CountAllMatching.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/CountAllMatching.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Returns the total number of elements in the array which have a property matching the given value.\r\n *\r\n * @function Phaser.Utils.Array.CountAllMatching\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {string} property - The property to test on each array element.\r\n * @param {*} value - The value to test the property against. Must pass a strict (`===`) comparison check.\r\n * @param {integer} [startIndex] - An optional start index to search from.\r\n * @param {integer} [endIndex] - An optional end index to search to.\r\n *\r\n * @return {integer} The total number of elements with properties matching the given value.\r\n */\r\nvar CountAllMatching = function (array, property, value, startIndex, endIndex)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n\r\n    var total = 0;\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        for (var i = startIndex; i < endIndex; i++)\r\n        {\r\n            var child = array[i];\r\n\r\n            if (child[property] === value)\r\n            {\r\n                total++;\r\n            }\r\n        }\r\n    }\r\n\r\n    return total;\r\n};\r\n\r\nmodule.exports = CountAllMatching;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Db3VudEFsbE1hdGNoaW5nLmpzPzEzZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCOztBQUUxRDs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L0NvdW50QWxsTWF0Y2hpbmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTYWZlUmFuZ2UgPSByZXF1aXJlKCcuL1NhZmVSYW5nZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkgd2hpY2ggaGF2ZSBhIHByb3BlcnR5IG1hdGNoaW5nIHRoZSBnaXZlbiB2YWx1ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5Db3VudEFsbE1hdGNoaW5nXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzZWFyY2guXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byB0ZXN0IG9uIGVhY2ggYXJyYXkgZWxlbWVudC5cclxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0IHRoZSBwcm9wZXJ0eSBhZ2FpbnN0LiBNdXN0IHBhc3MgYSBzdHJpY3QgKGA9PT1gKSBjb21wYXJpc29uIGNoZWNrLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4XSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRJbmRleF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHRvLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggcHJvcGVydGllcyBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAqL1xyXG52YXIgQ291bnRBbGxNYXRjaGluZyA9IGZ1bmN0aW9uIChhcnJheSwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleClcclxue1xyXG4gICAgaWYgKHN0YXJ0SW5kZXggPT09IHVuZGVmaW5lZCkgeyBzdGFydEluZGV4ID0gMDsgfVxyXG4gICAgaWYgKGVuZEluZGV4ID09PSB1bmRlZmluZWQpIHsgZW5kSW5kZXggPSBhcnJheS5sZW5ndGg7IH1cclxuXHJcbiAgICB2YXIgdG90YWwgPSAwO1xyXG5cclxuICAgIGlmIChTYWZlUmFuZ2UoYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZFtwcm9wZXJ0eV0gPT09IHZhbHVlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ291bnRBbGxNYXRjaGluZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/CountAllMatching.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Each.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Each.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Passes each element in the array to the given callback.\r\n *\r\n * @function Phaser.Utils.Array.Each\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {function} callback - A callback to be invoked for each item in the array.\r\n * @param {object} context - The context in which the callback is invoked.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the current array item.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar Each = function (array, callback, context)\r\n{\r\n    var i;\r\n    var args = [ null ];\r\n\r\n    for (i = 3; i < arguments.length; i++)\r\n    {\r\n        args.push(arguments[i]);\r\n    }\r\n\r\n    for (i = 0; i < array.length; i++)\r\n    {\r\n        args[0] = array[i];\r\n\r\n        callback.apply(context, args);\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = Each;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9FYWNoLmpzP2VlMTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L0VhY2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQYXNzZXMgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byB0aGUgZ2l2ZW4gY2FsbGJhY2suXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuRWFjaFxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBmb3IgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC5cclxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGN1cnJlbnQgYXJyYXkgaXRlbS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBpbnB1dCBhcnJheS5cclxuICovXHJcbnZhciBFYWNoID0gZnVuY3Rpb24gKGFycmF5LCBjYWxsYmFjaywgY29udGV4dClcclxue1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgYXJncyA9IFsgbnVsbCBdO1xyXG5cclxuICAgIGZvciAoaSA9IDM7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGFyZ3NbMF0gPSBhcnJheVtpXTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFYWNoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Each.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/EachInRange.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/EachInRange.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Passes each element in the array, between the start and end indexes, to the given callback.\r\n *\r\n * @function Phaser.Utils.Array.EachInRange\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {function} callback - A callback to be invoked for each item in the array.\r\n * @param {object} context - The context in which the callback is invoked.\r\n * @param {integer} startIndex - The start index to search from.\r\n * @param {integer} endIndex - The end index to search to.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar EachInRange = function (array, callback, context, startIndex, endIndex)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        var i;\r\n        var args = [ null ];\r\n\r\n        for (i = 5; i < arguments.length; i++)\r\n        {\r\n            args.push(arguments[i]);\r\n        }\r\n\r\n        for (i = startIndex; i < endIndex; i++)\r\n        {\r\n            args[0] = array[i];\r\n\r\n            callback.apply(context, args);\r\n        }\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = EachInRange;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9FYWNoSW5SYW5nZS5qcz8zZGRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1RUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLEtBQUs7QUFDaEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvRWFjaEluUmFuZ2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTYWZlUmFuZ2UgPSByZXF1aXJlKCcuL1NhZmVSYW5nZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhc3NlcyBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5LCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMsIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5FYWNoSW5SYW5nZVxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc2VhcmNoLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBmb3IgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBzdGFydEluZGV4IC0gVGhlIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGVuZEluZGV4IC0gVGhlIGVuZCBpbmRleCB0byBzZWFyY2ggdG8uXHJcbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBjaGlsZC5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBpbnB1dCBhcnJheS5cclxuICovXHJcbnZhciBFYWNoSW5SYW5nZSA9IGZ1bmN0aW9uIChhcnJheSwgY2FsbGJhY2ssIGNvbnRleHQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG57XHJcbiAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0SW5kZXggPSAwOyB9XHJcbiAgICBpZiAoZW5kSW5kZXggPT09IHVuZGVmaW5lZCkgeyBlbmRJbmRleCA9IGFycmF5Lmxlbmd0aDsgfVxyXG5cclxuICAgIGlmIChTYWZlUmFuZ2UoYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgYXJncyA9IFsgbnVsbCBdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSA1OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3NbMF0gPSBhcnJheVtpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVhY2hJblJhbmdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/EachInRange.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/FindClosestInSorted.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/FindClosestInSorted.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Searches a pre-sorted array for the closet value to the given number.\r\n *\r\n * If the `key` argument is given it will assume the array contains objects that all have the required `key` property name,\r\n * and will check for the closest value of those to the given number.\r\n *\r\n * @function Phaser.Utils.Array.FindClosestInSorted\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value to search for in the array.\r\n * @param {array} array - The array to search, which must be sorted.\r\n * @param {string} [key] - An optional property key. If specified the array elements property will be checked against value.\r\n *\r\n * @return {(number|any)} The nearest value found in the array, or if a `key` was given, the nearest object with the matching property value.\r\n */\r\nvar FindClosestInSorted = function (value, array, key)\r\n{\r\n    if (!array.length)\r\n    {\r\n        return NaN;\r\n    }\r\n    else if (array.length === 1)\r\n    {\r\n        return array[0];\r\n    }\r\n\r\n    var i = 1;\r\n    var low;\r\n    var high;\r\n\r\n    if (key)\r\n    {\r\n        if (value < array[0][key])\r\n        {\r\n            return array[0];\r\n        }\r\n\r\n        while (array[i][key] < value)\r\n        {\r\n            i++;\r\n        }\r\n    }\r\n    else\r\n    {\r\n        while (array[i] < value)\r\n        {\r\n            i++;\r\n        }\r\n    }\r\n\r\n    if (i > array.length)\r\n    {\r\n        i = array.length;\r\n    }\r\n\r\n    if (key)\r\n    {\r\n        low = array[i - 1][key];\r\n        high = array[i][key];\r\n\r\n        return ((high - value) <= (value - low)) ? array[i] : array[i - 1];\r\n    }\r\n    else\r\n    {\r\n        low = array[i - 1];\r\n        high = array[i];\r\n\r\n        return ((high - value) <= (value - low)) ? high : low;\r\n    }\r\n};\r\n\r\nmodule.exports = FindClosestInSorted;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9GaW5kQ2xvc2VzdEluU29ydGVkLmpzPzk2MzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxhQUFhO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L0ZpbmRDbG9zZXN0SW5Tb3J0ZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZWFyY2hlcyBhIHByZS1zb3J0ZWQgYXJyYXkgZm9yIHRoZSBjbG9zZXQgdmFsdWUgdG8gdGhlIGdpdmVuIG51bWJlci5cclxuICpcclxuICogSWYgdGhlIGBrZXlgIGFyZ3VtZW50IGlzIGdpdmVuIGl0IHdpbGwgYXNzdW1lIHRoZSBhcnJheSBjb250YWlucyBvYmplY3RzIHRoYXQgYWxsIGhhdmUgdGhlIHJlcXVpcmVkIGBrZXlgIHByb3BlcnR5IG5hbWUsXHJcbiAqIGFuZCB3aWxsIGNoZWNrIGZvciB0aGUgY2xvc2VzdCB2YWx1ZSBvZiB0aG9zZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5LkZpbmRDbG9zZXN0SW5Tb3J0ZWRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc2VhcmNoLCB3aGljaCBtdXN0IGJlIHNvcnRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gQW4gb3B0aW9uYWwgcHJvcGVydHkga2V5LiBJZiBzcGVjaWZpZWQgdGhlIGFycmF5IGVsZW1lbnRzIHByb3BlcnR5IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsobnVtYmVyfGFueSl9IFRoZSBuZWFyZXN0IHZhbHVlIGZvdW5kIGluIHRoZSBhcnJheSwgb3IgaWYgYSBga2V5YCB3YXMgZ2l2ZW4sIHRoZSBuZWFyZXN0IG9iamVjdCB3aXRoIHRoZSBtYXRjaGluZyBwcm9wZXJ0eSB2YWx1ZS5cclxuICovXHJcbnZhciBGaW5kQ2xvc2VzdEluU29ydGVkID0gZnVuY3Rpb24gKHZhbHVlLCBhcnJheSwga2V5KVxyXG57XHJcbiAgICBpZiAoIWFycmF5Lmxlbmd0aClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTmFOO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYXJyYXkubGVuZ3RoID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBhcnJheVswXTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaSA9IDE7XHJcbiAgICB2YXIgbG93O1xyXG4gICAgdmFyIGhpZ2g7XHJcblxyXG4gICAgaWYgKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBhcnJheVswXVtrZXldKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGFycmF5W2ldW2tleV0gPCB2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgd2hpbGUgKGFycmF5W2ldIDwgdmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID4gYXJyYXkubGVuZ3RoKVxyXG4gICAge1xyXG4gICAgICAgIGkgPSBhcnJheS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtleSlcclxuICAgIHtcclxuICAgICAgICBsb3cgPSBhcnJheVtpIC0gMV1ba2V5XTtcclxuICAgICAgICBoaWdoID0gYXJyYXlbaV1ba2V5XTtcclxuXHJcbiAgICAgICAgcmV0dXJuICgoaGlnaCAtIHZhbHVlKSA8PSAodmFsdWUgLSBsb3cpKSA/IGFycmF5W2ldIDogYXJyYXlbaSAtIDFdO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGxvdyA9IGFycmF5W2kgLSAxXTtcclxuICAgICAgICBoaWdoID0gYXJyYXlbaV07XHJcblxyXG4gICAgICAgIHJldHVybiAoKGhpZ2ggLSB2YWx1ZSkgPD0gKHZhbHVlIC0gbG93KSkgPyBoaWdoIDogbG93O1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaW5kQ2xvc2VzdEluU29ydGVkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/FindClosestInSorted.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/GetAll.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/GetAll.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Returns all elements in the array.\r\n *\r\n * You can optionally specify a matching criteria using the `property` and `value` arguments.\r\n *\r\n * For example: `getAll('visible', true)` would return only elements that have their visible property set.\r\n *\r\n * Optionally you can specify a start and end index. For example if the array had 100 elements,\r\n * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n * the first 50 elements.\r\n *\r\n * @function Phaser.Utils.Array.GetAll\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {string} [property] - The property to test on each array element.\r\n * @param {*} [value] - The value to test the property against. Must pass a strict (`===`) comparison check.\r\n * @param {integer} [startIndex] - An optional start index to search from.\r\n * @param {integer} [endIndex] - An optional end index to search to.\r\n *\r\n * @return {array} All matching elements from the array.\r\n */\r\nvar GetAll = function (array, property, value, startIndex, endIndex)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n\r\n    var output = [];\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        for (var i = startIndex; i < endIndex; i++)\r\n        {\r\n            var child = array[i];\r\n\r\n            if (!property ||\r\n                (property && value === undefined && child.hasOwnProperty(property)) ||\r\n                (property && value !== undefined && child[property] === value))\r\n            {\r\n                output.push(child);\r\n            }\r\n        }\r\n    }\r\n\r\n    return output;\r\n};\r\n\r\nmodule.exports = GetAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRBbGwuanM/OWY2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsdUVBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCOztBQUUxRDs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRBbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTYWZlUmFuZ2UgPSByZXF1aXJlKCcuL1NhZmVSYW5nZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYWxsIGVsZW1lbnRzIGluIHRoZSBhcnJheS5cclxuICpcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBtYXRjaGluZyBjcml0ZXJpYSB1c2luZyB0aGUgYHByb3BlcnR5YCBhbmQgYHZhbHVlYCBhcmd1bWVudHMuXHJcbiAqXHJcbiAqIEZvciBleGFtcGxlOiBgZ2V0QWxsKCd2aXNpYmxlJywgdHJ1ZSlgIHdvdWxkIHJldHVybiBvbmx5IGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGVpciB2aXNpYmxlIHByb3BlcnR5IHNldC5cclxuICpcclxuICogT3B0aW9uYWxseSB5b3UgY2FuIHNwZWNpZnkgYSBzdGFydCBhbmQgZW5kIGluZGV4LiBGb3IgZXhhbXBsZSBpZiB0aGUgYXJyYXkgaGFkIDEwMCBlbGVtZW50cyxcclxuICogYW5kIHlvdSBzZXQgYHN0YXJ0SW5kZXhgIHRvIDAgYW5kIGBlbmRJbmRleGAgdG8gNTAsIGl0IHdvdWxkIHJldHVybiBtYXRjaGVzIGZyb20gb25seVxyXG4gKiB0aGUgZmlyc3QgNTAgZWxlbWVudHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuR2V0QWxsXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzZWFyY2guXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcGVydHldIC0gVGhlIHByb3BlcnR5IHRvIHRlc3Qgb24gZWFjaCBhcnJheSBlbGVtZW50LlxyXG4gKiBAcGFyYW0geyp9IFt2YWx1ZV0gLSBUaGUgdmFsdWUgdG8gdGVzdCB0aGUgcHJvcGVydHkgYWdhaW5zdC4gTXVzdCBwYXNzIGEgc3RyaWN0IChgPT09YCkgY29tcGFyaXNvbiBjaGVjay5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleF0gLSBBbiBvcHRpb25hbCBzdGFydCBpbmRleCB0byBzZWFyY2ggZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXhdIC0gQW4gb3B0aW9uYWwgZW5kIGluZGV4IHRvIHNlYXJjaCB0by5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFsbCBtYXRjaGluZyBlbGVtZW50cyBmcm9tIHRoZSBhcnJheS5cclxuICovXHJcbnZhciBHZXRBbGwgPSBmdW5jdGlvbiAoYXJyYXksIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpXHJcbntcclxuICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRlZmluZWQpIHsgc3RhcnRJbmRleCA9IDA7IH1cclxuICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IGVuZEluZGV4ID0gYXJyYXkubGVuZ3RoOyB9XHJcblxyXG4gICAgdmFyIG91dHB1dCA9IFtdO1xyXG5cclxuICAgIGlmIChTYWZlUmFuZ2UoYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkgfHxcclxuICAgICAgICAgICAgICAgIChwcm9wZXJ0eSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGNoaWxkLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkgfHxcclxuICAgICAgICAgICAgICAgIChwcm9wZXJ0eSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNoaWxkW3Byb3BlcnR5XSA9PT0gdmFsdWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0QWxsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/GetAll.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/GetFirst.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/GetFirst.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Returns the first element in the array.\r\n *\r\n * You can optionally specify a matching criteria using the `property` and `value` arguments.\r\n *\r\n * For example: `getAll('visible', true)` would return the first element that had its `visible` property set.\r\n *\r\n * Optionally you can specify a start and end index. For example if the array had 100 elements,\r\n * and you set `startIndex` to 0 and `endIndex` to 50, it would search only the first 50 elements.\r\n *\r\n * @function Phaser.Utils.Array.GetFirst\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {string} [property] - The property to test on each array element.\r\n * @param {*} [value] - The value to test the property against. Must pass a strict (`===`) comparison check.\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=array.length] - An optional end index to search up to (but not included)\r\n *\r\n * @return {object} The first matching element from the array, or `null` if no element could be found in the range given.\r\n */\r\nvar GetFirst = function (array, property, value, startIndex, endIndex)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        for (var i = startIndex; i < endIndex; i++)\r\n        {\r\n            var child = array[i];\r\n\r\n            if (!property ||\r\n                (property && value === undefined && child.hasOwnProperty(property)) ||\r\n                (property && value !== undefined && child[property] === value))\r\n            {\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\nmodule.exports = GetFirst;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRGaXJzdC5qcz9jNWMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1RUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCOztBQUUxRDtBQUNBO0FBQ0EsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRGaXJzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNhZmVSYW5nZSA9IHJlcXVpcmUoJy4vU2FmZVJhbmdlJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgbWF0Y2hpbmcgY3JpdGVyaWEgdXNpbmcgdGhlIGBwcm9wZXJ0eWAgYW5kIGB2YWx1ZWAgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBGb3IgZXhhbXBsZTogYGdldEFsbCgndmlzaWJsZScsIHRydWUpYCB3b3VsZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYWQgaXRzIGB2aXNpYmxlYCBwcm9wZXJ0eSBzZXQuXHJcbiAqXHJcbiAqIE9wdGlvbmFsbHkgeW91IGNhbiBzcGVjaWZ5IGEgc3RhcnQgYW5kIGVuZCBpbmRleC4gRm9yIGV4YW1wbGUgaWYgdGhlIGFycmF5IGhhZCAxMDAgZWxlbWVudHMsXHJcbiAqIGFuZCB5b3Ugc2V0IGBzdGFydEluZGV4YCB0byAwIGFuZCBgZW5kSW5kZXhgIHRvIDUwLCBpdCB3b3VsZCBzZWFyY2ggb25seSB0aGUgZmlyc3QgNTAgZWxlbWVudHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuR2V0Rmlyc3RcclxuICogQHNpbmNlIDMuNC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIHNlYXJjaC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wZXJ0eV0gLSBUaGUgcHJvcGVydHkgdG8gdGVzdCBvbiBlYWNoIGFycmF5IGVsZW1lbnQuXHJcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSAtIFRoZSB2YWx1ZSB0byB0ZXN0IHRoZSBwcm9wZXJ0eSBhZ2FpbnN0LiBNdXN0IHBhc3MgYSBzdHJpY3QgKGA9PT1gKSBjb21wYXJpc29uIGNoZWNrLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4PTBdIC0gQW4gb3B0aW9uYWwgc3RhcnQgaW5kZXggdG8gc2VhcmNoIGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4PWFycmF5Lmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGZyb20gdGhlIGFycmF5LCBvciBgbnVsbGAgaWYgbm8gZWxlbWVudCBjb3VsZCBiZSBmb3VuZCBpbiB0aGUgcmFuZ2UgZ2l2ZW4uXHJcbiAqL1xyXG52YXIgR2V0Rmlyc3QgPSBmdW5jdGlvbiAoYXJyYXksIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpXHJcbntcclxuICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRlZmluZWQpIHsgc3RhcnRJbmRleCA9IDA7IH1cclxuICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IGVuZEluZGV4ID0gYXJyYXkubGVuZ3RoOyB9XHJcblxyXG4gICAgaWYgKFNhZmVSYW5nZShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGFycmF5W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSB8fFxyXG4gICAgICAgICAgICAgICAgKHByb3BlcnR5ICYmIHZhbHVlID09PSB1bmRlZmluZWQgJiYgY2hpbGQuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHByb3BlcnR5ICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgY2hpbGRbcHJvcGVydHldID09PSB2YWx1ZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Rmlyc3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/GetFirst.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/GetRandom.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/GetRandom.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns a Random element from the array.\r\n *\r\n * @function Phaser.Utils.Array.GetRandom\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to select the random entry from.\r\n * @param {integer} [startIndex=0] - An optional start index.\r\n * @param {integer} [length=array.length] - An optional length, the total number of elements (from the startIndex) to choose from.\r\n *\r\n * @return {*} A random element from the array, or `null` if no element could be found in the range given.\r\n */\r\nvar GetRandom = function (array, startIndex, length)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (length === undefined) { length = array.length; }\r\n\r\n    var randomIndex = startIndex + Math.floor(Math.random() * length);\r\n\r\n    return (array[randomIndex] === undefined) ? null : array[randomIndex];\r\n};\r\n\r\nmodule.exports = GetRandom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRSYW5kb20uanM/MWYyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCO0FBQ25ELCtCQUErQix1QkFBdUI7O0FBRXREOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9HZXRSYW5kb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgUmFuZG9tIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuR2V0UmFuZG9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzZWxlY3QgdGhlIHJhbmRvbSBlbnRyeSBmcm9tLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4PTBdIC0gQW4gb3B0aW9uYWwgc3RhcnQgaW5kZXguXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2xlbmd0aD1hcnJheS5sZW5ndGhdIC0gQW4gb3B0aW9uYWwgbGVuZ3RoLCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIChmcm9tIHRoZSBzdGFydEluZGV4KSB0byBjaG9vc2UgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7Kn0gQSByYW5kb20gZWxlbWVudCBmcm9tIHRoZSBhcnJheSwgb3IgYG51bGxgIGlmIG5vIGVsZW1lbnQgY291bGQgYmUgZm91bmQgaW4gdGhlIHJhbmdlIGdpdmVuLlxyXG4gKi9cclxudmFyIEdldFJhbmRvbSA9IGZ1bmN0aW9uIChhcnJheSwgc3RhcnRJbmRleCwgbGVuZ3RoKVxyXG57XHJcbiAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0SW5kZXggPSAwOyB9XHJcbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHsgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyB9XHJcblxyXG4gICAgdmFyIHJhbmRvbUluZGV4ID0gc3RhcnRJbmRleCArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIChhcnJheVtyYW5kb21JbmRleF0gPT09IHVuZGVmaW5lZCkgPyBudWxsIDogYXJyYXlbcmFuZG9tSW5kZXhdO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRSYW5kb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/GetRandom.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/MoveDown.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/MoveDown.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the given array element down one place in the array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.MoveDown\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The input array.\r\n * @param {*} item - The element to move down the array.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar MoveDown = function (array, item)\r\n{\r\n    var currentIndex = array.indexOf(item);\r\n\r\n    if (currentIndex > 0)\r\n    {\r\n        var item2 = array[currentIndex - 1];\r\n\r\n        var index2 = array.indexOf(item2);\r\n\r\n        array[currentIndex] = item2;\r\n        array[index2] = item;\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = MoveDown;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Nb3ZlRG93bi5qcz81YmUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLEVBQUU7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Nb3ZlRG93bi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSBnaXZlbiBhcnJheSBlbGVtZW50IGRvd24gb25lIHBsYWNlIGluIHRoZSBhcnJheS5cclxuICogVGhlIGFycmF5IGlzIG1vZGlmaWVkIGluLXBsYWNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5Lk1vdmVEb3duXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBpbnB1dCBhcnJheS5cclxuICogQHBhcmFtIHsqfSBpdGVtIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSBkb3duIHRoZSBhcnJheS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBpbnB1dCBhcnJheS5cclxuICovXHJcbnZhciBNb3ZlRG93biA9IGZ1bmN0aW9uIChhcnJheSwgaXRlbSlcclxue1xyXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGl0ZW0yID0gYXJyYXlbY3VycmVudEluZGV4IC0gMV07XHJcblxyXG4gICAgICAgIHZhciBpbmRleDIgPSBhcnJheS5pbmRleE9mKGl0ZW0yKTtcclxuXHJcbiAgICAgICAgYXJyYXlbY3VycmVudEluZGV4XSA9IGl0ZW0yO1xyXG4gICAgICAgIGFycmF5W2luZGV4Ml0gPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhcnJheTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTW92ZURvd247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/MoveDown.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/MoveTo.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/MoveTo.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves an element in an array to a new position within the same array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.MoveTo\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array.\r\n * @param {*} item - The element to move.\r\n * @param {integer} index - The new index that the element will be moved to.\r\n *\r\n * @return {*} The element that was moved.\r\n */\r\nvar MoveTo = function (array, item, index)\r\n{\r\n    var currentIndex = array.indexOf(item);\r\n\r\n    if (currentIndex === -1 || index < 0 || index >= array.length)\r\n    {\r\n        throw new Error('Supplied index out of bounds');\r\n    }\r\n\r\n    if (currentIndex !== index)\r\n    {\r\n        //  Remove\r\n        array.splice(currentIndex, 1);\r\n\r\n        //  Add in new location\r\n        array.splice(index, 0, item);\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = MoveTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Nb3ZlVG8uanM/MWJhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Nb3ZlVG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBNb3ZlcyBhbiBlbGVtZW50IGluIGFuIGFycmF5IHRvIGEgbmV3IHBvc2l0aW9uIHdpdGhpbiB0aGUgc2FtZSBhcnJheS5cclxuICogVGhlIGFycmF5IGlzIG1vZGlmaWVkIGluLXBsYWNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5Lk1vdmVUb1xyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7Kn0gaXRlbSAtIFRoZSBlbGVtZW50IHRvIG1vdmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgbmV3IGluZGV4IHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSBtb3ZlZCB0by5cclxuICpcclxuICogQHJldHVybiB7Kn0gVGhlIGVsZW1lbnQgdGhhdCB3YXMgbW92ZWQuXHJcbiAqL1xyXG52YXIgTW92ZVRvID0gZnVuY3Rpb24gKGFycmF5LCBpdGVtLCBpbmRleClcclxue1xyXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IGFycmF5Lmxlbmd0aClcclxuICAgIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIGluZGV4IG91dCBvZiBib3VuZHMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudEluZGV4ICE9PSBpbmRleClcclxuICAgIHtcclxuICAgICAgICAvLyAgUmVtb3ZlXHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XHJcblxyXG4gICAgICAgIC8vICBBZGQgaW4gbmV3IGxvY2F0aW9uXHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTW92ZVRvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/MoveTo.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/MoveUp.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/MoveUp.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the given array element up one place in the array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.MoveUp\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The input array.\r\n * @param {*} item - The element to move up the array.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar MoveUp = function (array, item)\r\n{\r\n    var currentIndex = array.indexOf(item);\r\n\r\n    if (currentIndex !== -1 && currentIndex < array.length - 1)\r\n    {\r\n        //  The element one above `item` in the array\r\n        var item2 = array[currentIndex + 1];\r\n        var index2 = array.indexOf(item2);\r\n\r\n        array[currentIndex] = item2;\r\n        array[index2] = item;\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = MoveUp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Nb3ZlVXAuanM/MTFkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L01vdmVVcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSBnaXZlbiBhcnJheSBlbGVtZW50IHVwIG9uZSBwbGFjZSBpbiB0aGUgYXJyYXkuXHJcbiAqIFRoZSBhcnJheSBpcyBtb2RpZmllZCBpbi1wbGFjZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5Nb3ZlVXBcclxuICogQHNpbmNlIDMuNC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGlucHV0IGFycmF5LlxyXG4gKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgZWxlbWVudCB0byBtb3ZlIHVwIHRoZSBhcnJheS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBpbnB1dCBhcnJheS5cclxuICovXHJcbnZhciBNb3ZlVXAgPSBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pXHJcbntcclxuICAgIHZhciBjdXJyZW50SW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xyXG5cclxuICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA8IGFycmF5Lmxlbmd0aCAtIDEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoZSBlbGVtZW50IG9uZSBhYm92ZSBgaXRlbWAgaW4gdGhlIGFycmF5XHJcbiAgICAgICAgdmFyIGl0ZW0yID0gYXJyYXlbY3VycmVudEluZGV4ICsgMV07XHJcbiAgICAgICAgdmFyIGluZGV4MiA9IGFycmF5LmluZGV4T2YoaXRlbTIpO1xyXG5cclxuICAgICAgICBhcnJheVtjdXJyZW50SW5kZXhdID0gaXRlbTI7XHJcbiAgICAgICAgYXJyYXlbaW5kZXgyXSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNb3ZlVXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/MoveUp.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/NumberArray.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/NumberArray.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Create an array representing the range of numbers (usually integers), between, and inclusive of,\r\n * the given `start` and `end` arguments. For example:\r\n *\r\n * `var array = numberArray(2, 4); // array = [2, 3, 4]`\r\n * `var array = numberArray(0, 9); // array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`\r\n *\r\n * This is equivalent to `numberArrayStep(start, end, 1)`.\r\n *\r\n * You can optionally provide a prefix and / or suffix string. If given the array will contain\r\n * strings, not integers. For example:\r\n *\r\n * `var array = numberArray(1, 4, 'Level '); // array = [\"Level 1\", \"Level 2\", \"Level 3\", \"Level 4\"]`\r\n * `var array = numberArray(5, 7, 'HD-', '.png'); // array = [\"HD-5.png\", \"HD-6.png\", \"HD-7.png\"]`\r\n *\r\n * @function Phaser.Utils.Array.NumberArray\r\n * @since 3.0.0\r\n *\r\n * @param {number} start - The minimum value the array starts with.\r\n * @param {number} end - The maximum value the array contains.\r\n * @param {string} [prefix] - Optional prefix to place before the number. If provided the array will contain strings, not integers.\r\n * @param {string} [suffix] - Optional suffix to place after the number. If provided the array will contain strings, not integers.\r\n *\r\n * @return {(number[]|string[])} The array of number values, or strings if a prefix or suffix was provided.\r\n */\r\nvar NumberArray = function (start, end, prefix, suffix)\r\n{\r\n    var result = [];\r\n\r\n    for (var i = start; i <= end; i++)\r\n    {\r\n        if (prefix || suffix)\r\n        {\r\n            var key = (prefix) ? prefix + i.toString() : i.toString();\r\n\r\n            if (suffix)\r\n            {\r\n                key = key.concat(suffix);\r\n            }\r\n\r\n            result.push(key);\r\n        }\r\n        else\r\n        {\r\n            result.push(i);\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\nmodule.exports = NumberArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9OdW1iZXJBcnJheS5qcz8zYTRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixVQUFVO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9OdW1iZXJBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIG51bWJlcnMgKHVzdWFsbHkgaW50ZWdlcnMpLCBiZXR3ZWVuLCBhbmQgaW5jbHVzaXZlIG9mLFxyXG4gKiB0aGUgZ2l2ZW4gYHN0YXJ0YCBhbmQgYGVuZGAgYXJndW1lbnRzLiBGb3IgZXhhbXBsZTpcclxuICpcclxuICogYHZhciBhcnJheSA9IG51bWJlckFycmF5KDIsIDQpOyAvLyBhcnJheSA9IFsyLCAzLCA0XWBcclxuICogYHZhciBhcnJheSA9IG51bWJlckFycmF5KDAsIDkpOyAvLyBhcnJheSA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XWBcclxuICpcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBudW1iZXJBcnJheVN0ZXAoc3RhcnQsIGVuZCwgMSlgLlxyXG4gKlxyXG4gKiBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhIHByZWZpeCBhbmQgLyBvciBzdWZmaXggc3RyaW5nLiBJZiBnaXZlbiB0aGUgYXJyYXkgd2lsbCBjb250YWluXHJcbiAqIHN0cmluZ3MsIG5vdCBpbnRlZ2Vycy4gRm9yIGV4YW1wbGU6XHJcbiAqXHJcbiAqIGB2YXIgYXJyYXkgPSBudW1iZXJBcnJheSgxLCA0LCAnTGV2ZWwgJyk7IC8vIGFycmF5ID0gW1wiTGV2ZWwgMVwiLCBcIkxldmVsIDJcIiwgXCJMZXZlbCAzXCIsIFwiTGV2ZWwgNFwiXWBcclxuICogYHZhciBhcnJheSA9IG51bWJlckFycmF5KDUsIDcsICdIRC0nLCAnLnBuZycpOyAvLyBhcnJheSA9IFtcIkhELTUucG5nXCIsIFwiSEQtNi5wbmdcIiwgXCJIRC03LnBuZ1wiXWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5OdW1iZXJBcnJheVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gVGhlIG1pbmltdW0gdmFsdWUgdGhlIGFycmF5IHN0YXJ0cyB3aXRoLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIC0gVGhlIG1heGltdW0gdmFsdWUgdGhlIGFycmF5IGNvbnRhaW5zLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeF0gLSBPcHRpb25hbCBwcmVmaXggdG8gcGxhY2UgYmVmb3JlIHRoZSBudW1iZXIuIElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gc3RyaW5ncywgbm90IGludGVnZXJzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N1ZmZpeF0gLSBPcHRpb25hbCBzdWZmaXggdG8gcGxhY2UgYWZ0ZXIgdGhlIG51bWJlci4gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgY29udGFpbiBzdHJpbmdzLCBub3QgaW50ZWdlcnMuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhudW1iZXJbXXxzdHJpbmdbXSl9IFRoZSBhcnJheSBvZiBudW1iZXIgdmFsdWVzLCBvciBzdHJpbmdzIGlmIGEgcHJlZml4IG9yIHN1ZmZpeCB3YXMgcHJvdmlkZWQuXHJcbiAqL1xyXG52YXIgTnVtYmVyQXJyYXkgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgcHJlZml4LCBzdWZmaXgpXHJcbntcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHByZWZpeCB8fCBzdWZmaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gKHByZWZpeCkgPyBwcmVmaXggKyBpLnRvU3RyaW5nKCkgOiBpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3VmZml4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkuY29uY2F0KHN1ZmZpeCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXJBcnJheTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/NumberArray.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/NumberArrayStep.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/NumberArrayStep.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RoundAwayFromZero = __webpack_require__(/*! ../../math/RoundAwayFromZero */ \"./node_modules/phaser/src/math/RoundAwayFromZero.js\");\r\n\r\n/**\r\n * Create an array of numbers (positive and/or negative) progressing from `start`\r\n * up to but not including `end` by advancing by `step`.\r\n *\r\n * If `start` is less than `end` a zero-length range is created unless a negative `step` is specified.\r\n *\r\n * Certain values for `start` and `end` (eg. NaN/undefined/null) are currently coerced to 0;\r\n * for forward compatibility make sure to pass in actual numbers.\r\n * \r\n * @example\r\n * NumberArrayStep(4);\r\n * // => [0, 1, 2, 3]\r\n *\r\n * NumberArrayStep(1, 5);\r\n * // => [1, 2, 3, 4]\r\n *\r\n * NumberArrayStep(0, 20, 5);\r\n * // => [0, 5, 10, 15]\r\n *\r\n * NumberArrayStep(0, -4, -1);\r\n * // => [0, -1, -2, -3]\r\n *\r\n * NumberArrayStep(1, 4, 0);\r\n * // => [1, 1, 1]\r\n *\r\n * NumberArrayStep(0);\r\n * // => []\r\n *\r\n * @function Phaser.Utils.Array.NumberArrayStep\r\n * @since 3.0.0\r\n *\r\n * @param {number} [start=0] - The start of the range.\r\n * @param {number} [end=null] - The end of the range.\r\n * @param {number} [step=1] - The value to increment or decrement by.\r\n *\r\n * @return {number[]} The array of number values.\r\n */\r\nvar NumberArrayStep = function (start, end, step)\r\n{\r\n    if (start === undefined) { start = 0; }\r\n    if (end === undefined) { end = null; }\r\n    if (step === undefined) { step = 1; }\r\n\r\n    if (end === null)\r\n    {\r\n        end = start;\r\n        start = 0;\r\n    }\r\n\r\n    var result = [];\r\n\r\n    var total = Math.max(RoundAwayFromZero((end - start) / (step || 1)), 0);\r\n\r\n    for (var i = 0; i < total; i++)\r\n    {\r\n        result.push(start);\r\n        start += step;\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\nmodule.exports = NumberArrayStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9OdW1iZXJBcnJheVN0ZXAuanM/YzgwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMseUZBQThCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXO0FBQ3pDLDRCQUE0QixZQUFZO0FBQ3hDLDZCQUE2QixVQUFVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixXQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9OdW1iZXJBcnJheVN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSb3VuZEF3YXlGcm9tWmVybyA9IHJlcXVpcmUoJy4uLy4uL21hdGgvUm91bmRBd2F5RnJvbVplcm8nKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tIGBzdGFydGBcclxuICogdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgYGVuZGAgYnkgYWR2YW5jaW5nIGJ5IGBzdGVwYC5cclxuICpcclxuICogSWYgYHN0YXJ0YCBpcyBsZXNzIHRoYW4gYGVuZGAgYSB6ZXJvLWxlbmd0aCByYW5nZSBpcyBjcmVhdGVkIHVubGVzcyBhIG5lZ2F0aXZlIGBzdGVwYCBpcyBzcGVjaWZpZWQuXHJcbiAqXHJcbiAqIENlcnRhaW4gdmFsdWVzIGZvciBgc3RhcnRgIGFuZCBgZW5kYCAoZWcuIE5hTi91bmRlZmluZWQvbnVsbCkgYXJlIGN1cnJlbnRseSBjb2VyY2VkIHRvIDA7XHJcbiAqIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkgbWFrZSBzdXJlIHRvIHBhc3MgaW4gYWN0dWFsIG51bWJlcnMuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBOdW1iZXJBcnJheVN0ZXAoNCk7XHJcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxyXG4gKlxyXG4gKiBOdW1iZXJBcnJheVN0ZXAoMSwgNSk7XHJcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxyXG4gKlxyXG4gKiBOdW1iZXJBcnJheVN0ZXAoMCwgMjAsIDUpO1xyXG4gKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxyXG4gKlxyXG4gKiBOdW1iZXJBcnJheVN0ZXAoMCwgLTQsIC0xKTtcclxuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXHJcbiAqXHJcbiAqIE51bWJlckFycmF5U3RlcCgxLCA0LCAwKTtcclxuICogLy8gPT4gWzEsIDEsIDFdXHJcbiAqXHJcbiAqIE51bWJlckFycmF5U3RlcCgwKTtcclxuICogLy8gPT4gW11cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5OdW1iZXJBcnJheVN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gLSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1udWxsXSAtIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gLSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyW119IFRoZSBhcnJheSBvZiBudW1iZXIgdmFsdWVzLlxyXG4gKi9cclxudmFyIE51bWJlckFycmF5U3RlcCA9IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBzdGVwKVxyXG57XHJcbiAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkgeyBzdGFydCA9IDA7IH1cclxuICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkgeyBlbmQgPSBudWxsOyB9XHJcbiAgICBpZiAoc3RlcCA9PT0gdW5kZWZpbmVkKSB7IHN0ZXAgPSAxOyB9XHJcblxyXG4gICAgaWYgKGVuZCA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICBlbmQgPSBzdGFydDtcclxuICAgICAgICBzdGFydCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG5cclxuICAgIHZhciB0b3RhbCA9IE1hdGgubWF4KFJvdW5kQXdheUZyb21aZXJvKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgIHtcclxuICAgICAgICByZXN1bHQucHVzaChzdGFydCk7XHJcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXJBcnJheVN0ZXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/NumberArrayStep.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/QuickSelect.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/QuickSelect.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction swap (arr, i, j)\r\n{\r\n    var tmp = arr[i];\r\n    arr[i] = arr[j];\r\n    arr[j] = tmp;\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nfunction defaultCompare (a, b)\r\n{\r\n    return a < b ? -1 : a > b ? 1 : 0;\r\n}\r\n\r\n/**\r\n * A [Floyd-Rivest](https://en.wikipedia.org/wiki/Floyd%E2%80%93Rivest_algorithm) quick selection algorithm.\r\n *\r\n * Rearranges the array items so that all items in the [left, k] range are smaller than all items in [k, right];\r\n * The k-th element will have the (k - left + 1)th smallest value in [left, right].\r\n *\r\n * The array is modified in-place.\r\n *\r\n * Based on code by [Vladimir Agafonkin](https://www.npmjs.com/~mourner)\r\n *\r\n * @function Phaser.Utils.Array.QuickSelect\r\n * @since 3.0.0\r\n *\r\n * @param {array} arr - The array to sort.\r\n * @param {integer} k - The k-th element index.\r\n * @param {integer} [left=0] - The index of the left part of the range.\r\n * @param {integer} [right] - The index of the right part of the range.\r\n * @param {function} [compare] - An optional comparison function. Is passed two elements and should return 0, 1 or -1.\r\n */\r\nvar QuickSelect = function (arr, k, left, right, compare)\r\n{\r\n    if (left === undefined) { left = 0; }\r\n    if (right === undefined) { right = arr.length - 1; }\r\n    if (compare === undefined) { compare = defaultCompare; }\r\n\r\n    while (right > left)\r\n    {\r\n        if (right - left > 600)\r\n        {\r\n            var n = right - left + 1;\r\n            var m = k - left + 1;\r\n            var z = Math.log(n);\r\n            var s = 0.5 * Math.exp(2 * z / 3);\r\n            var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\r\n            var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\r\n            var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\r\n\r\n            QuickSelect(arr, k, newLeft, newRight, compare);\r\n        }\r\n\r\n        var t = arr[k];\r\n        var i = left;\r\n        var j = right;\r\n\r\n        swap(arr, left, k);\r\n\r\n        if (compare(arr[right], t) > 0)\r\n        {\r\n            swap(arr, left, right);\r\n        }\r\n\r\n        while (i < j)\r\n        {\r\n            swap(arr, i, j);\r\n\r\n            i++;\r\n            j--;\r\n\r\n            while (compare(arr[i], t) < 0)\r\n            {\r\n                i++;\r\n            }\r\n\r\n            while (compare(arr[j], t) > 0)\r\n            {\r\n                j--;\r\n            }\r\n        }\r\n\r\n        if (compare(arr[left], t) === 0)\r\n        {\r\n            swap(arr, left, j);\r\n        }\r\n        else\r\n        {\r\n            j++;\r\n            swap(arr, j, right);\r\n        }\r\n\r\n        if (j <= k)\r\n        {\r\n            left = j + 1;\r\n        }\r\n\r\n        if (k <= j)\r\n        {\r\n            right = j - 1;\r\n        }\r\n    }\r\n};\r\n\r\nmodule.exports = QuickSelect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9RdWlja1NlbGVjdC5qcz80MWY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLDhCQUE4Qix3QkFBd0I7QUFDdEQsZ0NBQWdDLDBCQUEwQjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9RdWlja1NlbGVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIHN3YXAgKGFyciwgaSwgailcclxue1xyXG4gICAgdmFyIHRtcCA9IGFycltpXTtcclxuICAgIGFycltpXSA9IGFycltqXTtcclxuICAgIGFycltqXSA9IHRtcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlIChhLCBiKVxyXG57XHJcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIFtGbG95ZC1SaXZlc3RdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zsb3lkJUUyJTgwJTkzUml2ZXN0X2FsZ29yaXRobSkgcXVpY2sgc2VsZWN0aW9uIGFsZ29yaXRobS5cclxuICpcclxuICogUmVhcnJhbmdlcyB0aGUgYXJyYXkgaXRlbXMgc28gdGhhdCBhbGwgaXRlbXMgaW4gdGhlIFtsZWZ0LCBrXSByYW5nZSBhcmUgc21hbGxlciB0aGFuIGFsbCBpdGVtcyBpbiBbaywgcmlnaHRdO1xyXG4gKiBUaGUgay10aCBlbGVtZW50IHdpbGwgaGF2ZSB0aGUgKGsgLSBsZWZ0ICsgMSl0aCBzbWFsbGVzdCB2YWx1ZSBpbiBbbGVmdCwgcmlnaHRdLlxyXG4gKlxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UuXHJcbiAqXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgW1ZsYWRpbWlyIEFnYWZvbmtpbl0oaHR0cHM6Ly93d3cubnBtanMuY29tL35tb3VybmVyKVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5LlF1aWNrU2VsZWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgLSBUaGUgYXJyYXkgdG8gc29ydC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBrIC0gVGhlIGstdGggZWxlbWVudCBpbmRleC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbbGVmdD0wXSAtIFRoZSBpbmRleCBvZiB0aGUgbGVmdCBwYXJ0IG9mIHRoZSByYW5nZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbcmlnaHRdIC0gVGhlIGluZGV4IG9mIHRoZSByaWdodCBwYXJ0IG9mIHRoZSByYW5nZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NvbXBhcmVdIC0gQW4gb3B0aW9uYWwgY29tcGFyaXNvbiBmdW5jdGlvbi4gSXMgcGFzc2VkIHR3byBlbGVtZW50cyBhbmQgc2hvdWxkIHJldHVybiAwLCAxIG9yIC0xLlxyXG4gKi9cclxudmFyIFF1aWNrU2VsZWN0ID0gZnVuY3Rpb24gKGFyciwgaywgbGVmdCwgcmlnaHQsIGNvbXBhcmUpXHJcbntcclxuICAgIGlmIChsZWZ0ID09PSB1bmRlZmluZWQpIHsgbGVmdCA9IDA7IH1cclxuICAgIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7IHJpZ2h0ID0gYXJyLmxlbmd0aCAtIDE7IH1cclxuICAgIGlmIChjb21wYXJlID09PSB1bmRlZmluZWQpIHsgY29tcGFyZSA9IGRlZmF1bHRDb21wYXJlOyB9XHJcblxyXG4gICAgd2hpbGUgKHJpZ2h0ID4gbGVmdClcclxuICAgIHtcclxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG4gPSByaWdodCAtIGxlZnQgKyAxO1xyXG4gICAgICAgICAgICB2YXIgbSA9IGsgLSBsZWZ0ICsgMTtcclxuICAgICAgICAgICAgdmFyIHogPSBNYXRoLmxvZyhuKTtcclxuICAgICAgICAgICAgdmFyIHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xyXG4gICAgICAgICAgICB2YXIgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgIHZhciBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcclxuICAgICAgICAgICAgdmFyIG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XHJcblxyXG4gICAgICAgICAgICBRdWlja1NlbGVjdChhcnIsIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBjb21wYXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gYXJyW2tdO1xyXG4gICAgICAgIHZhciBpID0gbGVmdDtcclxuICAgICAgICB2YXIgaiA9IHJpZ2h0O1xyXG5cclxuICAgICAgICBzd2FwKGFyciwgbGVmdCwgayk7XHJcblxyXG4gICAgICAgIGlmIChjb21wYXJlKGFycltyaWdodF0sIHQpID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN3YXAoYXJyLCBsZWZ0LCByaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoaSA8IGopXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzd2FwKGFyciwgaSwgaik7XHJcblxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIGotLTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltpXSwgdCkgPCAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltqXSwgdCkgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBqLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb21wYXJlKGFycltsZWZ0XSwgdCkgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzd2FwKGFyciwgbGVmdCwgaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGorKztcclxuICAgICAgICAgICAgc3dhcChhcnIsIGosIHJpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChqIDw9IGspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0ID0gaiArIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoayA8PSBqKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmlnaHQgPSBqIC0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFF1aWNrU2VsZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/QuickSelect.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Range.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Range.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Shuffle = __webpack_require__(/*! ./Shuffle */ \"./node_modules/phaser/src/utils/array/Shuffle.js\");\r\n\r\nvar BuildChunk = function (a, b, qty)\r\n{\r\n    var out = [];\r\n\r\n    for (var aIndex = 0; aIndex < a.length; aIndex++)\r\n    {\r\n        for (var bIndex = 0; bIndex < b.length; bIndex++)\r\n        {\r\n            for (var i = 0; i < qty; i++)\r\n            {\r\n                out.push({ a: a[aIndex], b: b[bIndex] });\r\n            }\r\n        }\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\n/**\r\n * Creates an array populated with a range of values, based on the given arguments and configuration object.\r\n *\r\n * Range ([a,b,c], [1,2,3]) =\r\n * a1, a2, a3, b1, b2, b3, c1, c2, c3\r\n * \r\n * Range ([a,b], [1,2,3], qty = 3) =\r\n * a1, a1, a1, a2, a2, a2, a3, a3, a3, b1, b1, b1, b2, b2, b2, b3, b3, b3\r\n * \r\n * Range ([a,b,c], [1,2,3], repeat x1) =\r\n * a1, a2, a3, b1, b2, b3, c1, c2, c3, a1, a2, a3, b1, b2, b3, c1, c2, c3\r\n * \r\n * Range ([a,b], [1,2], repeat -1 = endless, max = 14) =\r\n * Maybe if max is set then repeat goes to -1 automatically?\r\n * a1, a2, b1, b2, a1, a2, b1, b2, a1, a2, b1, b2, a1, a2 (capped at 14 elements)\r\n * \r\n * Range ([a], [1,2,3,4,5], random = true) =\r\n * a4, a1, a5, a2, a3\r\n * \r\n * Range ([a, b], [1,2,3], random = true) =\r\n * b3, a2, a1, b1, a3, b2\r\n * \r\n * Range ([a, b, c], [1,2,3], randomB = true) =\r\n * a3, a1, a2, b2, b3, b1, c1, c3, c2\r\n * \r\n * Range ([a], [1,2,3,4,5], yoyo = true) =\r\n * a1, a2, a3, a4, a5, a5, a4, a3, a2, a1\r\n * \r\n * Range ([a, b], [1,2,3], yoyo = true) =\r\n * a1, a2, a3, b1, b2, b3, b3, b2, b1, a3, a2, a1\r\n *\r\n * @function Phaser.Utils.Array.Range\r\n * @since 3.0.0\r\n *\r\n * @param {array} a - The first array of range elements.\r\n * @param {array} b - The second array of range elements.\r\n * @param {object} [options] - A range configuration object. Can contain: repeat, random, randomB, yoyo, max, qty.\r\n *\r\n * @return {array} An array of arranged elements.\r\n */\r\nvar Range = function (a, b, options)\r\n{\r\n    var max = GetValue(options, 'max', 0);\r\n    var qty = GetValue(options, 'qty', 1);\r\n    var random = GetValue(options, 'random', false);\r\n    var randomB = GetValue(options, 'randomB', false);\r\n    var repeat = GetValue(options, 'repeat', 0);\r\n    var yoyo = GetValue(options, 'yoyo', false);\r\n\r\n    var out = [];\r\n\r\n    if (randomB)\r\n    {\r\n        Shuffle(b);\r\n    }\r\n\r\n    //  Endless repeat, so limit by max\r\n    if (repeat === -1)\r\n    {\r\n        if (max === 0)\r\n        {\r\n            repeat = 0;\r\n        }\r\n        else\r\n        {\r\n            //  Work out how many repeats we need\r\n            var total = (a.length * b.length) * qty;\r\n\r\n            if (yoyo)\r\n            {\r\n                total *= 2;\r\n            }\r\n\r\n            repeat = Math.ceil(max / total);\r\n        }\r\n    }\r\n\r\n    for (var i = 0; i <= repeat; i++)\r\n    {\r\n        var chunk = BuildChunk(a, b, qty);\r\n\r\n        if (random)\r\n        {\r\n            Shuffle(chunk);\r\n        }\r\n\r\n        out = out.concat(chunk);\r\n\r\n        if (yoyo)\r\n        {\r\n            chunk.reverse();\r\n\r\n            out = out.concat(chunk);\r\n        }\r\n    }\r\n\r\n    if (max)\r\n    {\r\n        out.splice(max);\r\n    }\r\n\r\n    return out;\r\n};\r\n\r\nmodule.exports = Range;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SYW5nZS5qcz82MDYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsOEVBQW9CO0FBQzNDLGNBQWMsbUJBQU8sQ0FBQyxtRUFBVzs7QUFFakM7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQSw0QkFBNEIsbUJBQW1CO0FBQy9DO0FBQ0EsMkJBQTJCLFNBQVM7QUFDcEM7QUFDQSwwQkFBMEIsNkJBQTZCO0FBQ3ZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixhQUFhO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvUmFuZ2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgU2h1ZmZsZSA9IHJlcXVpcmUoJy4vU2h1ZmZsZScpO1xyXG5cclxudmFyIEJ1aWxkQ2h1bmsgPSBmdW5jdGlvbiAoYSwgYiwgcXR5KVxyXG57XHJcbiAgICB2YXIgb3V0ID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgYUluZGV4ID0gMDsgYUluZGV4IDwgYS5sZW5ndGg7IGFJbmRleCsrKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGJJbmRleCA9IDA7IGJJbmRleCA8IGIubGVuZ3RoOyBiSW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXR5OyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKHsgYTogYVthSW5kZXhdLCBiOiBiW2JJbmRleF0gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRoIGEgcmFuZ2Ugb2YgdmFsdWVzLCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogUmFuZ2UgKFthLGIsY10sIFsxLDIsM10pID1cclxuICogYTEsIGEyLCBhMywgYjEsIGIyLCBiMywgYzEsIGMyLCBjM1xyXG4gKiBcclxuICogUmFuZ2UgKFthLGJdLCBbMSwyLDNdLCBxdHkgPSAzKSA9XHJcbiAqIGExLCBhMSwgYTEsIGEyLCBhMiwgYTIsIGEzLCBhMywgYTMsIGIxLCBiMSwgYjEsIGIyLCBiMiwgYjIsIGIzLCBiMywgYjNcclxuICogXHJcbiAqIFJhbmdlIChbYSxiLGNdLCBbMSwyLDNdLCByZXBlYXQgeDEpID1cclxuICogYTEsIGEyLCBhMywgYjEsIGIyLCBiMywgYzEsIGMyLCBjMywgYTEsIGEyLCBhMywgYjEsIGIyLCBiMywgYzEsIGMyLCBjM1xyXG4gKiBcclxuICogUmFuZ2UgKFthLGJdLCBbMSwyXSwgcmVwZWF0IC0xID0gZW5kbGVzcywgbWF4ID0gMTQpID1cclxuICogTWF5YmUgaWYgbWF4IGlzIHNldCB0aGVuIHJlcGVhdCBnb2VzIHRvIC0xIGF1dG9tYXRpY2FsbHk/XHJcbiAqIGExLCBhMiwgYjEsIGIyLCBhMSwgYTIsIGIxLCBiMiwgYTEsIGEyLCBiMSwgYjIsIGExLCBhMiAoY2FwcGVkIGF0IDE0IGVsZW1lbnRzKVxyXG4gKiBcclxuICogUmFuZ2UgKFthXSwgWzEsMiwzLDQsNV0sIHJhbmRvbSA9IHRydWUpID1cclxuICogYTQsIGExLCBhNSwgYTIsIGEzXHJcbiAqIFxyXG4gKiBSYW5nZSAoW2EsIGJdLCBbMSwyLDNdLCByYW5kb20gPSB0cnVlKSA9XHJcbiAqIGIzLCBhMiwgYTEsIGIxLCBhMywgYjJcclxuICogXHJcbiAqIFJhbmdlIChbYSwgYiwgY10sIFsxLDIsM10sIHJhbmRvbUIgPSB0cnVlKSA9XHJcbiAqIGEzLCBhMSwgYTIsIGIyLCBiMywgYjEsIGMxLCBjMywgYzJcclxuICogXHJcbiAqIFJhbmdlIChbYV0sIFsxLDIsMyw0LDVdLCB5b3lvID0gdHJ1ZSkgPVxyXG4gKiBhMSwgYTIsIGEzLCBhNCwgYTUsIGE1LCBhNCwgYTMsIGEyLCBhMVxyXG4gKiBcclxuICogUmFuZ2UgKFthLCBiXSwgWzEsMiwzXSwgeW95byA9IHRydWUpID1cclxuICogYTEsIGEyLCBhMywgYjEsIGIyLCBiMywgYjMsIGIyLCBiMSwgYTMsIGEyLCBhMVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5LlJhbmdlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhIC0gVGhlIGZpcnN0IGFycmF5IG9mIHJhbmdlIGVsZW1lbnRzLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBiIC0gVGhlIHNlY29uZCBhcnJheSBvZiByYW5nZSBlbGVtZW50cy5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEEgcmFuZ2UgY29uZmlndXJhdGlvbiBvYmplY3QuIENhbiBjb250YWluOiByZXBlYXQsIHJhbmRvbSwgcmFuZG9tQiwgeW95bywgbWF4LCBxdHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSBvZiBhcnJhbmdlZCBlbGVtZW50cy5cclxuICovXHJcbnZhciBSYW5nZSA9IGZ1bmN0aW9uIChhLCBiLCBvcHRpb25zKVxyXG57XHJcbiAgICB2YXIgbWF4ID0gR2V0VmFsdWUob3B0aW9ucywgJ21heCcsIDApO1xyXG4gICAgdmFyIHF0eSA9IEdldFZhbHVlKG9wdGlvbnMsICdxdHknLCAxKTtcclxuICAgIHZhciByYW5kb20gPSBHZXRWYWx1ZShvcHRpb25zLCAncmFuZG9tJywgZmFsc2UpO1xyXG4gICAgdmFyIHJhbmRvbUIgPSBHZXRWYWx1ZShvcHRpb25zLCAncmFuZG9tQicsIGZhbHNlKTtcclxuICAgIHZhciByZXBlYXQgPSBHZXRWYWx1ZShvcHRpb25zLCAncmVwZWF0JywgMCk7XHJcbiAgICB2YXIgeW95byA9IEdldFZhbHVlKG9wdGlvbnMsICd5b3lvJywgZmFsc2UpO1xyXG5cclxuICAgIHZhciBvdXQgPSBbXTtcclxuXHJcbiAgICBpZiAocmFuZG9tQilcclxuICAgIHtcclxuICAgICAgICBTaHVmZmxlKGIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBFbmRsZXNzIHJlcGVhdCwgc28gbGltaXQgYnkgbWF4XHJcbiAgICBpZiAocmVwZWF0ID09PSAtMSlcclxuICAgIHtcclxuICAgICAgICBpZiAobWF4ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVwZWF0ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdvcmsgb3V0IGhvdyBtYW55IHJlcGVhdHMgd2UgbmVlZFxyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSAoYS5sZW5ndGggKiBiLmxlbmd0aCkgKiBxdHk7XHJcblxyXG4gICAgICAgICAgICBpZiAoeW95bylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG90YWwgKj0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVwZWF0ID0gTWF0aC5jZWlsKG1heCAvIHRvdGFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcmVwZWF0OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNodW5rID0gQnVpbGRDaHVuayhhLCBiLCBxdHkpO1xyXG5cclxuICAgICAgICBpZiAocmFuZG9tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgU2h1ZmZsZShjaHVuayk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGNodW5rKTtcclxuXHJcbiAgICAgICAgaWYgKHlveW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaHVuay5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGNodW5rKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1heClcclxuICAgIHtcclxuICAgICAgICBvdXQuc3BsaWNlKG1heCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZ2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Range.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Remove.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Remove.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SpliceOne = __webpack_require__(/*! ./SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\");\r\n\r\n/**\r\n * Removes the given item, or array of items, from the array.\r\n * \r\n * The array is modified in-place.\r\n * \r\n * You can optionally specify a callback to be invoked for each item successfully removed from the array.\r\n *\r\n * @function Phaser.Utils.Array.Remove\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to be modified.\r\n * @param {*|Array.<*>} item - The item, or array of items, to be removed from the array.\r\n * @param {function} [callback] - A callback to be invoked for each item successfully removed from the array.\r\n * @param {object} [context] - The context in which the callback is invoked.\r\n *\r\n * @return {*|Array.<*>} The item, or array of items, that were successfully removed from the array.\r\n */\r\nvar Remove = function (array, item, callback, context)\r\n{\r\n    if (context === undefined) { context = array; }\r\n\r\n    var index;\r\n\r\n    //  Fast path to avoid array mutation and iteration\r\n    if (!Array.isArray(item))\r\n    {\r\n        index = array.indexOf(item);\r\n\r\n        if (index !== -1)\r\n        {\r\n            SpliceOne(array, index);\r\n\r\n            if (callback)\r\n            {\r\n                callback.call(context, item);\r\n            }\r\n\r\n            return item;\r\n        }\r\n        else\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    //  If we got this far, we have an array of items to remove\r\n\r\n    var itemLength = item.length - 1;\r\n\r\n    while (itemLength >= 0)\r\n    {\r\n        var entry = item[itemLength];\r\n\r\n        index = array.indexOf(entry);\r\n\r\n        if (index !== -1)\r\n        {\r\n            SpliceOne(array, index);\r\n\r\n            if (callback)\r\n            {\r\n                callback.call(context, entry);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            //  Item wasn't found in the array, so remove it from our return results\r\n            item.pop();\r\n        }\r\n\r\n        itemLength--;\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = Remove;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZW1vdmUuanM/ZTliMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsdUVBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsWUFBWTtBQUN2QixXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxpQkFBaUI7O0FBRWpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L1JlbW92ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNwbGljZU9uZSA9IHJlcXVpcmUoJy4vU3BsaWNlT25lJyk7XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgZ2l2ZW4gaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIGZyb20gdGhlIGFycmF5LlxyXG4gKiBcclxuICogVGhlIGFycmF5IGlzIG1vZGlmaWVkIGluLXBsYWNlLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuUmVtb3ZlXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBiZSBtb2RpZmllZC5cclxuICogQHBhcmFtIHsqfEFycmF5LjwqPn0gaXRlbSAtIFRoZSBpdGVtLCBvciBhcnJheSBvZiBpdGVtcywgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBmb3IgZWFjaCBpdGVtIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp8QXJyYXkuPCo+fSBUaGUgaXRlbSwgb3IgYXJyYXkgb2YgaXRlbXMsIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheS5cclxuICovXHJcbnZhciBSZW1vdmUgPSBmdW5jdGlvbiAoYXJyYXksIGl0ZW0sIGNhbGxiYWNrLCBjb250ZXh0KVxyXG57XHJcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNvbnRleHQgPSBhcnJheTsgfVxyXG5cclxuICAgIHZhciBpbmRleDtcclxuXHJcbiAgICAvLyAgRmFzdCBwYXRoIHRvIGF2b2lkIGFycmF5IG11dGF0aW9uIGFuZCBpdGVyYXRpb25cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtKSlcclxuICAgIHtcclxuICAgICAgICBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTcGxpY2VPbmUoYXJyYXksIGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSBoYXZlIGFuIGFycmF5IG9mIGl0ZW1zIHRvIHJlbW92ZVxyXG5cclxuICAgIHZhciBpdGVtTGVuZ3RoID0gaXRlbS5sZW5ndGggLSAxO1xyXG5cclxuICAgIHdoaWxlIChpdGVtTGVuZ3RoID49IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gaXRlbVtpdGVtTGVuZ3RoXTtcclxuXHJcbiAgICAgICAgaW5kZXggPSBhcnJheS5pbmRleE9mKGVudHJ5KTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNwbGljZU9uZShhcnJheSwgaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSXRlbSB3YXNuJ3QgZm91bmQgaW4gdGhlIGFycmF5LCBzbyByZW1vdmUgaXQgZnJvbSBvdXIgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgaXRlbS5wb3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1MZW5ndGgtLTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVtb3ZlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Remove.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/RemoveAt.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/RemoveAt.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SpliceOne = __webpack_require__(/*! ./SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\");\r\n\r\n/**\r\n * Removes the item from the given position in the array.\r\n * \r\n * The array is modified in-place.\r\n * \r\n * You can optionally specify a callback to be invoked for the item if it is successfully removed from the array.\r\n *\r\n * @function Phaser.Utils.Array.RemoveAt\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to be modified.\r\n * @param {integer} index - The array index to remove the item from. The index must be in bounds or it will throw an error.\r\n * @param {function} [callback] - A callback to be invoked for the item removed from the array.\r\n * @param {object} [context] - The context in which the callback is invoked.\r\n *\r\n * @return {*} The item that was removed.\r\n */\r\nvar RemoveAt = function (array, index, callback, context)\r\n{\r\n    if (context === undefined) { context = array; }\r\n\r\n    if (index < 0 || index > array.length - 1)\r\n    {\r\n        throw new Error('Index out of bounds');\r\n    }\r\n\r\n    var item = SpliceOne(array, index);\r\n\r\n    if (callback)\r\n    {\r\n        callback.call(context, item);\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = RemoveAt;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZW1vdmVBdC5qcz82ZTZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1RUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUJBQWlCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvUmVtb3ZlQXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTcGxpY2VPbmUgPSByZXF1aXJlKCcuL1NwbGljZU9uZScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgdGhlIGl0ZW0gZnJvbSB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIGFycmF5LlxyXG4gKiBcclxuICogVGhlIGFycmF5IGlzIG1vZGlmaWVkIGluLXBsYWNlLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciB0aGUgaXRlbSBpZiBpdCBpcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5SZW1vdmVBdFxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gYmUgbW9kaWZpZWQuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgYXJyYXkgaW5kZXggdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb20uIFRoZSBpbmRleCBtdXN0IGJlIGluIGJvdW5kcyBvciBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciB0aGUgaXRlbSByZW1vdmVkIGZyb20gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAqL1xyXG52YXIgUmVtb3ZlQXQgPSBmdW5jdGlvbiAoYXJyYXksIGluZGV4LCBjYWxsYmFjaywgY29udGV4dClcclxue1xyXG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gYXJyYXk7IH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gYXJyYXkubGVuZ3RoIC0gMSlcclxuICAgIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4IG91dCBvZiBib3VuZHMnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXRlbSA9IFNwbGljZU9uZShhcnJheSwgaW5kZXgpO1xyXG5cclxuICAgIGlmIChjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZW1vdmVBdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/RemoveAt.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/RemoveBetween.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/RemoveBetween.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Removes the item within the given range in the array.\r\n * \r\n * The array is modified in-place.\r\n * \r\n * You can optionally specify a callback to be invoked for the item/s successfully removed from the array.\r\n *\r\n * @function Phaser.Utils.Array.RemoveBetween\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to be modified.\r\n * @param {integer} startIndex - The start index to remove from.\r\n * @param {integer} endIndex - The end index to remove to.\r\n * @param {function} [callback] - A callback to be invoked for the item removed from the array.\r\n * @param {object} [context] - The context in which the callback is invoked.\r\n *\r\n * @return {Array.<*>} An array of items that were removed.\r\n */\r\nvar RemoveBetween = function (array, startIndex, endIndex, callback, context)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n    if (context === undefined) { context = array; }\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        var size = endIndex - startIndex;\r\n\r\n        var removed = array.splice(startIndex, size);\r\n\r\n        if (callback)\r\n        {\r\n            for (var i = 0; i < removed.length; i++)\r\n            {\r\n                var entry = removed[i];\r\n\r\n                callback.call(context, entry);\r\n            }\r\n        }\r\n\r\n        return removed;\r\n    }\r\n    else\r\n    {\r\n        return [];\r\n    }\r\n};\r\n\r\nmodule.exports = RemoveBetween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZW1vdmVCZXR3ZWVuLmpzP2RlNjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCO0FBQzFELGdDQUFnQyxpQkFBaUI7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLG9CQUFvQjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L1JlbW92ZUJldHdlZW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTYWZlUmFuZ2UgPSByZXF1aXJlKCcuL1NhZmVSYW5nZScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgdGhlIGl0ZW0gd2l0aGluIHRoZSBnaXZlbiByYW5nZSBpbiB0aGUgYXJyYXkuXHJcbiAqIFxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgZm9yIHRoZSBpdGVtL3Mgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuUmVtb3ZlQmV0d2VlblxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gYmUgbW9kaWZpZWQuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnRJbmRleCAtIFRoZSBzdGFydCBpbmRleCB0byByZW1vdmUgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBlbmRJbmRleCAtIFRoZSBlbmQgaW5kZXggdG8gcmVtb3ZlIHRvLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGZvciB0aGUgaXRlbSByZW1vdmVkIGZyb20gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5LjwqPn0gQW4gYXJyYXkgb2YgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQuXHJcbiAqL1xyXG52YXIgUmVtb3ZlQmV0d2VlbiA9IGZ1bmN0aW9uIChhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG57XHJcbiAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0SW5kZXggPSAwOyB9XHJcbiAgICBpZiAoZW5kSW5kZXggPT09IHVuZGVmaW5lZCkgeyBlbmRJbmRleCA9IGFycmF5Lmxlbmd0aDsgfVxyXG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gYXJyYXk7IH1cclxuXHJcbiAgICBpZiAoU2FmZVJhbmdlKGFycmF5LCBzdGFydEluZGV4LCBlbmRJbmRleCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBlbmRJbmRleCAtIHN0YXJ0SW5kZXg7XHJcblxyXG4gICAgICAgIHZhciByZW1vdmVkID0gYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIHNpemUpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHJlbW92ZWRbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVtb3ZlQmV0d2VlbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/RemoveBetween.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/RemoveRandomElement.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/RemoveRandomElement.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SpliceOne = __webpack_require__(/*! ./SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\");\r\n\r\n/**\r\n * Removes a random object from the given array and returns it.\r\n * Will return null if there are no array items that fall within the specified range or if there is no item for the randomly chosen index.\r\n *\r\n * @function Phaser.Utils.Array.RemoveRandomElement\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to removed a random element from.\r\n * @param {integer} [start=0] - The array index to start the search from.\r\n * @param {integer} [length=array.length] - Optional restriction on the number of elements to randomly select from.\r\n *\r\n * @return {object} The random element that was removed, or `null` if there were no array elements that fell within the given range.\r\n */\r\nvar RemoveRandomElement = function (array, start, length)\r\n{\r\n    if (start === undefined) { start = 0; }\r\n    if (length === undefined) { length = array.length; }\r\n\r\n    var randomIndex = start + Math.floor(Math.random() * length);\r\n\r\n    return SpliceOne(array, randomIndex);\r\n};\r\n\r\nmodule.exports = RemoveRandomElement;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZW1vdmVSYW5kb21FbGVtZW50LmpzPzdmMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXO0FBQ3pDLCtCQUErQix1QkFBdUI7O0FBRXREOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZW1vdmVSYW5kb21FbGVtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3BsaWNlT25lID0gcmVxdWlyZSgnLi9TcGxpY2VPbmUnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIGEgcmFuZG9tIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBhcnJheSBhbmQgcmV0dXJucyBpdC5cclxuICogV2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBhcmUgbm8gYXJyYXkgaXRlbXMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG9yIGlmIHRoZXJlIGlzIG5vIGl0ZW0gZm9yIHRoZSByYW5kb21seSBjaG9zZW4gaW5kZXguXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuUmVtb3ZlUmFuZG9tRWxlbWVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gcmVtb3ZlZCBhIHJhbmRvbSBlbGVtZW50IGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0PTBdIC0gVGhlIGFycmF5IGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbbGVuZ3RoPWFycmF5Lmxlbmd0aF0gLSBPcHRpb25hbCByZXN0cmljdGlvbiBvbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJhbmRvbWx5IHNlbGVjdCBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtvYmplY3R9IFRoZSByYW5kb20gZWxlbWVudCB0aGF0IHdhcyByZW1vdmVkLCBvciBgbnVsbGAgaWYgdGhlcmUgd2VyZSBubyBhcnJheSBlbGVtZW50cyB0aGF0IGZlbGwgd2l0aGluIHRoZSBnaXZlbiByYW5nZS5cclxuICovXHJcbnZhciBSZW1vdmVSYW5kb21FbGVtZW50ID0gZnVuY3Rpb24gKGFycmF5LCBzdGFydCwgbGVuZ3RoKVxyXG57XHJcbiAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkgeyBzdGFydCA9IDA7IH1cclxuICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkgeyBsZW5ndGggPSBhcnJheS5sZW5ndGg7IH1cclxuXHJcbiAgICB2YXIgcmFuZG9tSW5kZXggPSBzdGFydCArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIFNwbGljZU9uZShhcnJheSwgcmFuZG9tSW5kZXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZW1vdmVSYW5kb21FbGVtZW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/RemoveRandomElement.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Replace.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Replace.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Replaces an element of the array with the new element.\r\n * The new element cannot already be a member of the array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.Replace\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search within.\r\n * @param {*} oldChild - The element in the array that will be replaced.\r\n * @param {*} newChild - The element to be inserted into the array at the position of `oldChild`.\r\n *\r\n * @return {boolean} Returns true if the oldChild was successfully replaced, otherwise returns false.\r\n */\r\nvar Replace = function (array, oldChild, newChild)\r\n{\r\n    var index1 = array.indexOf(oldChild);\r\n    var index2 = array.indexOf(newChild);\r\n\r\n    if (index1 !== -1 && index2 === -1)\r\n    {\r\n        array[index1] = newChild;\r\n\r\n        return true;\r\n    }\r\n    else\r\n    {\r\n        return false;\r\n    }\r\n};\r\n\r\nmodule.exports = Replace;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZXBsYWNlLmpzPzczMmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9SZXBsYWNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVwbGFjZXMgYW4gZWxlbWVudCBvZiB0aGUgYXJyYXkgd2l0aCB0aGUgbmV3IGVsZW1lbnQuXHJcbiAqIFRoZSBuZXcgZWxlbWVudCBjYW5ub3QgYWxyZWFkeSBiZSBhIG1lbWJlciBvZiB0aGUgYXJyYXkuXHJcbiAqIFRoZSBhcnJheSBpcyBtb2RpZmllZCBpbi1wbGFjZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5SZXBsYWNlXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzZWFyY2ggd2l0aGluLlxyXG4gKiBAcGFyYW0geyp9IG9sZENoaWxkIC0gVGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cclxuICogQHBhcmFtIHsqfSBuZXdDaGlsZCAtIFRoZSBlbGVtZW50IHRvIGJlIGluc2VydGVkIGludG8gdGhlIGFycmF5IGF0IHRoZSBwb3NpdGlvbiBvZiBgb2xkQ2hpbGRgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIG9sZENoaWxkIHdhcyBzdWNjZXNzZnVsbHkgcmVwbGFjZWQsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxyXG4gKi9cclxudmFyIFJlcGxhY2UgPSBmdW5jdGlvbiAoYXJyYXksIG9sZENoaWxkLCBuZXdDaGlsZClcclxue1xyXG4gICAgdmFyIGluZGV4MSA9IGFycmF5LmluZGV4T2Yob2xkQ2hpbGQpO1xyXG4gICAgdmFyIGluZGV4MiA9IGFycmF5LmluZGV4T2YobmV3Q2hpbGQpO1xyXG5cclxuICAgIGlmIChpbmRleDEgIT09IC0xICYmIGluZGV4MiA9PT0gLTEpXHJcbiAgICB7XHJcbiAgICAgICAgYXJyYXlbaW5kZXgxXSA9IG5ld0NoaWxkO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlcGxhY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Replace.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/RotateLeft.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/RotateLeft.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the element at the start of the array to the end, shifting all items in the process.\r\n * The \"rotation\" happens to the left.\r\n *\r\n * @function Phaser.Utils.Array.RotateLeft\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to shift to the left. This array is modified in place.\r\n * @param {integer} [total=1] - The number of times to shift the array.\r\n *\r\n * @return {*} The most recently shifted element.\r\n */\r\nvar RotateLeft = function (array, total)\r\n{\r\n    if (total === undefined) { total = 1; }\r\n\r\n    var element = null;\r\n\r\n    for (var i = 0; i < total; i++)\r\n    {\r\n        element = array.shift();\r\n        array.push(element);\r\n    }\r\n\r\n    return element;\r\n};\r\n\r\nmodule.exports = RotateLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Sb3RhdGVMZWZ0LmpzPzc3YjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksRUFBRTtBQUNkO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixXQUFXOztBQUV6Qzs7QUFFQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvUm90YXRlTGVmdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSBlbGVtZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgYXJyYXkgdG8gdGhlIGVuZCwgc2hpZnRpbmcgYWxsIGl0ZW1zIGluIHRoZSBwcm9jZXNzLlxyXG4gKiBUaGUgXCJyb3RhdGlvblwiIGhhcHBlbnMgdG8gdGhlIGxlZnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuUm90YXRlTGVmdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc2hpZnQgdG8gdGhlIGxlZnQuIFRoaXMgYXJyYXkgaXMgbW9kaWZpZWQgaW4gcGxhY2UuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3RvdGFsPTFdIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBzaGlmdCB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp9IFRoZSBtb3N0IHJlY2VudGx5IHNoaWZ0ZWQgZWxlbWVudC5cclxuICovXHJcbnZhciBSb3RhdGVMZWZ0ID0gZnVuY3Rpb24gKGFycmF5LCB0b3RhbClcclxue1xyXG4gICAgaWYgKHRvdGFsID09PSB1bmRlZmluZWQpIHsgdG90YWwgPSAxOyB9XHJcblxyXG4gICAgdmFyIGVsZW1lbnQgPSBudWxsO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgIHtcclxuICAgICAgICBlbGVtZW50ID0gYXJyYXkuc2hpZnQoKTtcclxuICAgICAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVMZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/RotateLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/RotateRight.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/RotateRight.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the element at the end of the array to the start, shifting all items in the process.\r\n * The \"rotation\" happens to the right.\r\n *\r\n * @function Phaser.Utils.Array.RotateRight\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to shift to the right. This array is modified in place.\r\n * @param {integer} [total=1] - The number of times to shift the array.\r\n *\r\n * @return {*} The most recently shifted element.\r\n */\r\nvar RotateRight = function (array, total)\r\n{\r\n    if (total === undefined) { total = 1; }\r\n\r\n    var element = null;\r\n\r\n    for (var i = 0; i < total; i++)\r\n    {\r\n        element = array.pop();\r\n        array.unshift(element);\r\n    }\r\n\r\n    return element;\r\n};\r\n\r\nmodule.exports = RotateRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Sb3RhdGVSaWdodC5qcz9kMjRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVzs7QUFFekM7O0FBRUEsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L1JvdGF0ZVJpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTW92ZXMgdGhlIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgdG8gdGhlIHN0YXJ0LCBzaGlmdGluZyBhbGwgaXRlbXMgaW4gdGhlIHByb2Nlc3MuXHJcbiAqIFRoZSBcInJvdGF0aW9uXCIgaGFwcGVucyB0byB0aGUgcmlnaHQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuUm90YXRlUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIHNoaWZ0IHRvIHRoZSByaWdodC4gVGhpcyBhcnJheSBpcyBtb2RpZmllZCBpbiBwbGFjZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdG90YWw9MV0gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHNoaWZ0IHRoZSBhcnJheS5cclxuICpcclxuICogQHJldHVybiB7Kn0gVGhlIG1vc3QgcmVjZW50bHkgc2hpZnRlZCBlbGVtZW50LlxyXG4gKi9cclxudmFyIFJvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKGFycmF5LCB0b3RhbClcclxue1xyXG4gICAgaWYgKHRvdGFsID09PSB1bmRlZmluZWQpIHsgdG90YWwgPSAxOyB9XHJcblxyXG4gICAgdmFyIGVsZW1lbnQgPSBudWxsO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgIHtcclxuICAgICAgICBlbGVtZW50ID0gYXJyYXkucG9wKCk7XHJcbiAgICAgICAgYXJyYXkudW5zaGlmdChlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZWxlbWVudDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/RotateRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/SafeRange.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/SafeRange.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tests if the start and end indexes are a safe range for the given array.\r\n * \r\n * @function Phaser.Utils.Array.SafeRange\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to check.\r\n * @param {integer} startIndex - The start index.\r\n * @param {integer} endIndex - The end index.\r\n * @param {boolean} [throwError=true] - Throw an error if the range is out of bounds.\r\n *\r\n * @return {boolean} True if the range is safe, otherwise false.\r\n */\r\nvar SafeRange = function (array, startIndex, endIndex, throwError)\r\n{\r\n    var len = array.length;\r\n\r\n    if (startIndex < 0 ||\r\n        startIndex > len ||\r\n        startIndex >= endIndex ||\r\n        endIndex > len ||\r\n        startIndex + endIndex > len)\r\n    {\r\n        if (throwError)\r\n        {\r\n            throw new Error('Range Error: Values outside acceptable range');\r\n        }\r\n\r\n        return false;\r\n    }\r\n    else\r\n    {\r\n        return true;\r\n    }\r\n};\r\n\r\nmodule.exports = SafeRange;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TYWZlUmFuZ2UuanM/ZTY5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvU2FmZVJhbmdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kZXhlcyBhcmUgYSBzYWZlIHJhbmdlIGZvciB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAqIFxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5LlNhZmVSYW5nZVxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnRJbmRleCAtIFRoZSBzdGFydCBpbmRleC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBlbmRJbmRleCAtIFRoZSBlbmQgaW5kZXguXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Rocm93RXJyb3I9dHJ1ZV0gLSBUaHJvdyBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgb3V0IG9mIGJvdW5kcy5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgc2FmZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIFNhZmVSYW5nZSA9IGZ1bmN0aW9uIChhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRocm93RXJyb3IpXHJcbntcclxuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHN0YXJ0SW5kZXggPCAwIHx8XHJcbiAgICAgICAgc3RhcnRJbmRleCA+IGxlbiB8fFxyXG4gICAgICAgIHN0YXJ0SW5kZXggPj0gZW5kSW5kZXggfHxcclxuICAgICAgICBlbmRJbmRleCA+IGxlbiB8fFxyXG4gICAgICAgIHN0YXJ0SW5kZXggKyBlbmRJbmRleCA+IGxlbilcclxuICAgIHtcclxuICAgICAgICBpZiAodGhyb3dFcnJvcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmFuZ2UgRXJyb3I6IFZhbHVlcyBvdXRzaWRlIGFjY2VwdGFibGUgcmFuZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2FmZVJhbmdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/SafeRange.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/SendToBack.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/SendToBack.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves the given element to the bottom of the array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.SendToBack\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array.\r\n * @param {*} item - The element to move.\r\n *\r\n * @return {*} The element that was moved.\r\n */\r\nvar SendToBack = function (array, item)\r\n{\r\n    var currentIndex = array.indexOf(item);\r\n\r\n    if (currentIndex !== -1 && currentIndex > 0)\r\n    {\r\n        array.splice(currentIndex, 1);\r\n        array.unshift(item);\r\n    }\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = SendToBack;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TZW5kVG9CYWNrLmpzP2ZjNTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsRUFBRTtBQUNiO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvU2VuZFRvQmFjay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSBib3R0b20gb2YgdGhlIGFycmF5LlxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU2VuZFRvQmFja1xyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7Kn0gaXRlbSAtIFRoZSBlbGVtZW50IHRvIG1vdmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp9IFRoZSBlbGVtZW50IHRoYXQgd2FzIG1vdmVkLlxyXG4gKi9cclxudmFyIFNlbmRUb0JhY2sgPSBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pXHJcbntcclxuICAgIHZhciBjdXJyZW50SW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xyXG5cclxuICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XHJcbiAgICAgICAgYXJyYXkudW5zaGlmdChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VuZFRvQmFjaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/SendToBack.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/SetAll.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/SetAll.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SafeRange = __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\");\r\n\r\n/**\r\n * Scans the array for elements with the given property. If found, the property is set to the `value`.\r\n *\r\n * For example: `SetAll('visible', true)` would set all elements that have a `visible` property to `false`.\r\n *\r\n * Optionally you can specify a start and end index. For example if the array had 100 elements,\r\n * and you set `startIndex` to 0 and `endIndex` to 50, it would update only the first 50 elements.\r\n *\r\n * @function Phaser.Utils.Array.SetAll\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The array to search.\r\n * @param {string} property - The property to test for on each array element.\r\n * @param {*} value - The value to set the property to.\r\n * @param {integer} [startIndex] - An optional start index to search from.\r\n * @param {integer} [endIndex] - An optional end index to search to.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar SetAll = function (array, property, value, startIndex, endIndex)\r\n{\r\n    if (startIndex === undefined) { startIndex = 0; }\r\n    if (endIndex === undefined) { endIndex = array.length; }\r\n\r\n    if (SafeRange(array, startIndex, endIndex))\r\n    {\r\n        for (var i = startIndex; i < endIndex; i++)\r\n        {\r\n            var entry = array[i];\r\n\r\n            if (entry.hasOwnProperty(property))\r\n            {\r\n                entry[property] = value;\r\n            }\r\n        }\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = SetAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TZXRBbGwuanM/YWMzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsdUVBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxpQ0FBaUMseUJBQXlCOztBQUUxRDtBQUNBO0FBQ0EsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L1NldEFsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNhZmVSYW5nZSA9IHJlcXVpcmUoJy4vU2FmZVJhbmdlJyk7XHJcblxyXG4vKipcclxuICogU2NhbnMgdGhlIGFycmF5IGZvciBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBwcm9wZXJ0eS4gSWYgZm91bmQsIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gdGhlIGB2YWx1ZWAuXHJcbiAqXHJcbiAqIEZvciBleGFtcGxlOiBgU2V0QWxsKCd2aXNpYmxlJywgdHJ1ZSlgIHdvdWxkIHNldCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIGEgYHZpc2libGVgIHByb3BlcnR5IHRvIGBmYWxzZWAuXHJcbiAqXHJcbiAqIE9wdGlvbmFsbHkgeW91IGNhbiBzcGVjaWZ5IGEgc3RhcnQgYW5kIGVuZCBpbmRleC4gRm9yIGV4YW1wbGUgaWYgdGhlIGFycmF5IGhhZCAxMDAgZWxlbWVudHMsXHJcbiAqIGFuZCB5b3Ugc2V0IGBzdGFydEluZGV4YCB0byAwIGFuZCBgZW5kSW5kZXhgIHRvIDUwLCBpdCB3b3VsZCB1cGRhdGUgb25seSB0aGUgZmlyc3QgNTAgZWxlbWVudHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU2V0QWxsXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzZWFyY2guXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byB0ZXN0IGZvciBvbiBlYWNoIGFycmF5IGVsZW1lbnQuXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleF0gLSBBbiBvcHRpb25hbCBzdGFydCBpbmRleCB0byBzZWFyY2ggZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXhdIC0gQW4gb3B0aW9uYWwgZW5kIGluZGV4IHRvIHNlYXJjaCB0by5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBpbnB1dCBhcnJheS5cclxuICovXHJcbnZhciBTZXRBbGwgPSBmdW5jdGlvbiAoYXJyYXksIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpXHJcbntcclxuICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRlZmluZWQpIHsgc3RhcnRJbmRleCA9IDA7IH1cclxuICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IGVuZEluZGV4ID0gYXJyYXkubGVuZ3RoOyB9XHJcblxyXG4gICAgaWYgKFNhZmVSYW5nZShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGFycmF5W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW50cnlbcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRBbGw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/SetAll.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Shuffle.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Shuffle.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Shuffles the contents of the given array using the Fisher-Yates implementation.\r\n *\r\n * The original array is modified directly and returned.\r\n *\r\n * @function Phaser.Utils.Array.Shuffle\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to shuffle. This array is modified in place.\r\n *\r\n * @return {array} The shuffled array.\r\n */\r\nvar Shuffle = function (array)\r\n{\r\n    for (var i = array.length - 1; i > 0; i--)\r\n    {\r\n        var j = Math.floor(Math.random() * (i + 1));\r\n        var temp = array[i];\r\n        array[i] = array[j];\r\n        array[j] = temp;\r\n    }\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = Shuffle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TaHVmZmxlLmpzPzM2ZDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TaHVmZmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU2h1ZmZsZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBhcnJheSB1c2luZyB0aGUgRmlzaGVyLVlhdGVzIGltcGxlbWVudGF0aW9uLlxyXG4gKlxyXG4gKiBUaGUgb3JpZ2luYWwgYXJyYXkgaXMgbW9kaWZpZWQgZGlyZWN0bHkgYW5kIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5LlNodWZmbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIHNodWZmbGUuIFRoaXMgYXJyYXkgaXMgbW9kaWZpZWQgaW4gcGxhY2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBUaGUgc2h1ZmZsZWQgYXJyYXkuXHJcbiAqL1xyXG52YXIgU2h1ZmZsZSA9IGZ1bmN0aW9uIChhcnJheSlcclxue1xyXG4gICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcclxuICAgICAgICB2YXIgdGVtcCA9IGFycmF5W2ldO1xyXG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XHJcbiAgICAgICAgYXJyYXlbal0gPSB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhcnJheTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2h1ZmZsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Shuffle.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/SpliceOne.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/SpliceOne.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Removes a single item from an array and returns it without creating gc, like the native splice does.\r\n * Based on code by Mike Reinstein.\r\n *\r\n * @function Phaser.Utils.Array.SpliceOne\r\n * @since 3.0.0\r\n *\r\n * @param {array} array - The array to splice from.\r\n * @param {integer} index - The index of the item which should be spliced.\r\n *\r\n * @return {*} The item which was spliced (removed).\r\n */\r\nvar SpliceOne = function (array, index)\r\n{\r\n    if (index >= array.length)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var len = array.length - 1;\r\n\r\n    var item = array[index];\r\n\r\n    for (var i = index; i < len; i++)\r\n    {\r\n        array[i] = array[i + 1];\r\n    }\r\n\r\n    array.length = len;\r\n\r\n    return item;\r\n};\r\n\r\nmodule.exports = SpliceOne;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TcGxpY2VPbmUuanM/OGFiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TcGxpY2VPbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIGEgc2luZ2xlIGl0ZW0gZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJucyBpdCB3aXRob3V0IGNyZWF0aW5nIGdjLCBsaWtlIHRoZSBuYXRpdmUgc3BsaWNlIGRvZXMuXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgTWlrZSBSZWluc3RlaW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU3BsaWNlT25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBzcGxpY2UgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aGljaCBzaG91bGQgYmUgc3BsaWNlZC5cclxuICpcclxuICogQHJldHVybiB7Kn0gVGhlIGl0ZW0gd2hpY2ggd2FzIHNwbGljZWQgKHJlbW92ZWQpLlxyXG4gKi9cclxudmFyIFNwbGljZU9uZSA9IGZ1bmN0aW9uIChhcnJheSwgaW5kZXgpXHJcbntcclxuICAgIGlmIChpbmRleCA+PSBhcnJheS5sZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGggLSAxO1xyXG5cclxuICAgIHZhciBpdGVtID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IGxlbjsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbaSArIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIGFycmF5Lmxlbmd0aCA9IGxlbjtcclxuXHJcbiAgICByZXR1cm4gaXRlbTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3BsaWNlT25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/SpliceOne.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/StableSort.js":
/*!***********************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/StableSort.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//! stable.js 0.1.6, https://github.com/Two-Screen/stable\r\n//! © 2017 Angry Bytes and contributors. MIT licensed.\r\n\r\n/**\r\n * @namespace Phaser.Utils.Array.StableSortFunctions\r\n */\r\n\r\n(function() {\r\n\r\n /**\r\n * A stable array sort, because `Array#sort()` is not guaranteed stable.\r\n * This is an implementation of merge sort, without recursion.\r\n *\r\n * @function Phaser.Utils.Array.StableSort\r\n * @since 3.0.0\r\n *\r\n * @param {array} arr - The input array to be sorted.\r\n * @param {function} comp - The comparison handler.\r\n *\r\n * @return {array} The sorted result.\r\n */\r\nvar stable = function(arr, comp) {\r\n    return exec(arr.slice(), comp);\r\n};\r\n\r\n /**\r\n * Sort the input array and simply copy it back if the result isn't in the original array, which happens on an odd number of passes.\r\n *\r\n * @function Phaser.Utils.Array.StableSortFunctions.inplace\r\n * @memberof Phaser.Utils.Array.StableSortFunctions\r\n * @since 3.0.0\r\n *\r\n * @param {array} arr - The input array.\r\n * @param {function} comp - The comparison handler.\r\n *\r\n * @return {array} The sorted array.\r\n */\r\nstable.inplace = function(arr, comp) {\r\n    var result = exec(arr, comp);\r\n\r\n    // This simply copies back if the result isn't in the original array,\r\n    // which happens on an odd number of passes.\r\n    if (result !== arr) {\r\n        pass(result, null, arr.length, arr);\r\n    }\r\n\r\n    return arr;\r\n};\r\n\r\n// Execute the sort using the input array and a second buffer as work space.\r\n// Returns one of those two, containing the final result.\r\nfunction exec(arr, comp) {\r\n    if (typeof(comp) !== 'function') {\r\n        comp = function(a, b) {\r\n            return String(a).localeCompare(b);\r\n        };\r\n    }\r\n\r\n    // Short-circuit when there's nothing to sort.\r\n    var len = arr.length;\r\n    if (len <= 1) {\r\n        return arr;\r\n    }\r\n\r\n    // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.\r\n    // Chunks are the size of the left or right hand in merge sort.\r\n    // Stop when the left-hand covers all of the array.\r\n    var buffer = new Array(len);\r\n    for (var chk = 1; chk < len; chk *= 2) {\r\n        pass(arr, comp, chk, buffer);\r\n\r\n        var tmp = arr;\r\n        arr = buffer;\r\n        buffer = tmp;\r\n    }\r\n\r\n    return arr;\r\n}\r\n\r\n// Run a single pass with the given chunk size.\r\nvar pass = function(arr, comp, chk, result) {\r\n    var len = arr.length;\r\n    var i = 0;\r\n    // Step size / double chunk size.\r\n    var dbl = chk * 2;\r\n    // Bounds of the left and right chunks.\r\n    var l, r, e;\r\n    // Iterators over the left and right chunk.\r\n    var li, ri;\r\n\r\n    // Iterate over pairs of chunks.\r\n    for (l = 0; l < len; l += dbl) {\r\n        r = l + chk;\r\n        e = r + chk;\r\n        if (r > len) r = len;\r\n        if (e > len) e = len;\r\n\r\n        // Iterate both chunks in parallel.\r\n        li = l;\r\n        ri = r;\r\n        while (true) {\r\n            // Compare the chunks.\r\n            if (li < r && ri < e) {\r\n                // This works for a regular `sort()` compatible comparator,\r\n                // but also for a simple comparator like: `a > b`\r\n                if (comp(arr[li], arr[ri]) <= 0) {\r\n                    result[i++] = arr[li++];\r\n                }\r\n                else {\r\n                    result[i++] = arr[ri++];\r\n                }\r\n            }\r\n            // Nothing to compare, just flush what's left.\r\n            else if (li < r) {\r\n                result[i++] = arr[li++];\r\n            }\r\n            else if (ri < e) {\r\n                result[i++] = arr[ri++];\r\n            }\r\n            // Both iterators are at the chunk ends.\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n// Export using CommonJS or to the window.\r\nif (true) {\r\n    module.exports = stable;\r\n}\r\nelse {}\r\n\r\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9TdGFibGVTb3J0LmpzPzg2OTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsV0FBVztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLElBQThCO0FBQ2xDO0FBQ0E7QUFDQSxLQUFLLEVBRUo7O0FBRUQsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L1N0YWJsZVNvcnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vISBzdGFibGUuanMgMC4xLjYsIGh0dHBzOi8vZ2l0aHViLmNvbS9Ud28tU2NyZWVuL3N0YWJsZVxyXG4vLyEgwqkgMjAxNyBBbmdyeSBCeXRlcyBhbmQgY29udHJpYnV0b3JzLiBNSVQgbGljZW5zZWQuXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHMuQXJyYXkuU3RhYmxlU29ydEZ1bmN0aW9uc1xyXG4gKi9cclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAvKipcclxuICogQSBzdGFibGUgYXJyYXkgc29ydCwgYmVjYXVzZSBgQXJyYXkjc29ydCgpYCBpcyBub3QgZ3VhcmFudGVlZCBzdGFibGUuXHJcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgbWVyZ2Ugc29ydCwgd2l0aG91dCByZWN1cnNpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU3RhYmxlU29ydFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyIC0gVGhlIGlucHV0IGFycmF5IHRvIGJlIHNvcnRlZC5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcCAtIFRoZSBjb21wYXJpc29uIGhhbmRsZXIuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBUaGUgc29ydGVkIHJlc3VsdC5cclxuICovXHJcbnZhciBzdGFibGUgPSBmdW5jdGlvbihhcnIsIGNvbXApIHtcclxuICAgIHJldHVybiBleGVjKGFyci5zbGljZSgpLCBjb21wKTtcclxufTtcclxuXHJcbiAvKipcclxuICogU29ydCB0aGUgaW5wdXQgYXJyYXkgYW5kIHNpbXBseSBjb3B5IGl0IGJhY2sgaWYgdGhlIHJlc3VsdCBpc24ndCBpbiB0aGUgb3JpZ2luYWwgYXJyYXksIHdoaWNoIGhhcHBlbnMgb24gYW4gb2RkIG51bWJlciBvZiBwYXNzZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU3RhYmxlU29ydEZ1bmN0aW9ucy5pbnBsYWNlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuVXRpbHMuQXJyYXkuU3RhYmxlU29ydEZ1bmN0aW9uc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyIC0gVGhlIGlucHV0IGFycmF5LlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wIC0gVGhlIGNvbXBhcmlzb24gaGFuZGxlci5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFRoZSBzb3J0ZWQgYXJyYXkuXHJcbiAqL1xyXG5zdGFibGUuaW5wbGFjZSA9IGZ1bmN0aW9uKGFyciwgY29tcCkge1xyXG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMoYXJyLCBjb21wKTtcclxuXHJcbiAgICAvLyBUaGlzIHNpbXBseSBjb3BpZXMgYmFjayBpZiB0aGUgcmVzdWx0IGlzbid0IGluIHRoZSBvcmlnaW5hbCBhcnJheSxcclxuICAgIC8vIHdoaWNoIGhhcHBlbnMgb24gYW4gb2RkIG51bWJlciBvZiBwYXNzZXMuXHJcbiAgICBpZiAocmVzdWx0ICE9PSBhcnIpIHtcclxuICAgICAgICBwYXNzKHJlc3VsdCwgbnVsbCwgYXJyLmxlbmd0aCwgYXJyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyO1xyXG59O1xyXG5cclxuLy8gRXhlY3V0ZSB0aGUgc29ydCB1c2luZyB0aGUgaW5wdXQgYXJyYXkgYW5kIGEgc2Vjb25kIGJ1ZmZlciBhcyB3b3JrIHNwYWNlLlxyXG4vLyBSZXR1cm5zIG9uZSBvZiB0aG9zZSB0d28sIGNvbnRhaW5pbmcgdGhlIGZpbmFsIHJlc3VsdC5cclxuZnVuY3Rpb24gZXhlYyhhcnIsIGNvbXApIHtcclxuICAgIGlmICh0eXBlb2YoY29tcCkgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb21wID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKGEpLmxvY2FsZUNvbXBhcmUoYik7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaG9ydC1jaXJjdWl0IHdoZW4gdGhlcmUncyBub3RoaW5nIHRvIHNvcnQuXHJcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcclxuICAgIGlmIChsZW4gPD0gMSkge1xyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmF0aGVyIHRoYW4gZGl2aWRpbmcgaW5wdXQsIHNpbXBseSBpdGVyYXRlIGNodW5rcyBvZiAxLCAyLCA0LCA4LCBldGMuXHJcbiAgICAvLyBDaHVua3MgYXJlIHRoZSBzaXplIG9mIHRoZSBsZWZ0IG9yIHJpZ2h0IGhhbmQgaW4gbWVyZ2Ugc29ydC5cclxuICAgIC8vIFN0b3Agd2hlbiB0aGUgbGVmdC1oYW5kIGNvdmVycyBhbGwgb2YgdGhlIGFycmF5LlxyXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsZW4pO1xyXG4gICAgZm9yICh2YXIgY2hrID0gMTsgY2hrIDwgbGVuOyBjaGsgKj0gMikge1xyXG4gICAgICAgIHBhc3MoYXJyLCBjb21wLCBjaGssIGJ1ZmZlcik7XHJcblxyXG4gICAgICAgIHZhciB0bXAgPSBhcnI7XHJcbiAgICAgICAgYXJyID0gYnVmZmVyO1xyXG4gICAgICAgIGJ1ZmZlciA9IHRtcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG4vLyBSdW4gYSBzaW5nbGUgcGFzcyB3aXRoIHRoZSBnaXZlbiBjaHVuayBzaXplLlxyXG52YXIgcGFzcyA9IGZ1bmN0aW9uKGFyciwgY29tcCwgY2hrLCByZXN1bHQpIHtcclxuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgLy8gU3RlcCBzaXplIC8gZG91YmxlIGNodW5rIHNpemUuXHJcbiAgICB2YXIgZGJsID0gY2hrICogMjtcclxuICAgIC8vIEJvdW5kcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgY2h1bmtzLlxyXG4gICAgdmFyIGwsIHIsIGU7XHJcbiAgICAvLyBJdGVyYXRvcnMgb3ZlciB0aGUgbGVmdCBhbmQgcmlnaHQgY2h1bmsuXHJcbiAgICB2YXIgbGksIHJpO1xyXG5cclxuICAgIC8vIEl0ZXJhdGUgb3ZlciBwYWlycyBvZiBjaHVua3MuXHJcbiAgICBmb3IgKGwgPSAwOyBsIDwgbGVuOyBsICs9IGRibCkge1xyXG4gICAgICAgIHIgPSBsICsgY2hrO1xyXG4gICAgICAgIGUgPSByICsgY2hrO1xyXG4gICAgICAgIGlmIChyID4gbGVuKSByID0gbGVuO1xyXG4gICAgICAgIGlmIChlID4gbGVuKSBlID0gbGVuO1xyXG5cclxuICAgICAgICAvLyBJdGVyYXRlIGJvdGggY2h1bmtzIGluIHBhcmFsbGVsLlxyXG4gICAgICAgIGxpID0gbDtcclxuICAgICAgICByaSA9IHI7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgLy8gQ29tcGFyZSB0aGUgY2h1bmtzLlxyXG4gICAgICAgICAgICBpZiAobGkgPCByICYmIHJpIDwgZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3b3JrcyBmb3IgYSByZWd1bGFyIGBzb3J0KClgIGNvbXBhdGlibGUgY29tcGFyYXRvcixcclxuICAgICAgICAgICAgICAgIC8vIGJ1dCBhbHNvIGZvciBhIHNpbXBsZSBjb21wYXJhdG9yIGxpa2U6IGBhID4gYmBcclxuICAgICAgICAgICAgICAgIGlmIChjb21wKGFycltsaV0sIGFycltyaV0pIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaSsrXSA9IGFycltsaSsrXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpKytdID0gYXJyW3JpKytdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gY29tcGFyZSwganVzdCBmbHVzaCB3aGF0J3MgbGVmdC5cclxuICAgICAgICAgICAgZWxzZSBpZiAobGkgPCByKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbaSsrXSA9IGFycltsaSsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyaSA8IGUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpKytdID0gYXJyW3JpKytdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEJvdGggaXRlcmF0b3JzIGFyZSBhdCB0aGUgY2h1bmsgZW5kcy5cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vIEV4cG9ydCB1c2luZyBDb21tb25KUyBvciB0byB0aGUgd2luZG93LlxyXG5pZiAodHlwZW9mKG1vZHVsZSkgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHN0YWJsZTtcclxufVxyXG5lbHNlIHtcclxuICAgIHdpbmRvdy5zdGFibGUgPSBzdGFibGU7XHJcbn1cclxuXHJcbn0pKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/StableSort.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/Swap.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/Swap.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Swaps the position of two elements in the given array.\r\n * The elements must exist in the same array.\r\n * The array is modified in-place.\r\n *\r\n * @function Phaser.Utils.Array.Swap\r\n * @since 3.4.0\r\n *\r\n * @param {array} array - The input array.\r\n * @param {*} item1 - The first element to swap.\r\n * @param {*} item2 - The second element to swap.\r\n *\r\n * @return {array} The input array.\r\n */\r\nvar Swap = function (array, item1, item2)\r\n{\r\n    if (item1 === item2)\r\n    {\r\n        return;\r\n    }\r\n\r\n    var index1 = array.indexOf(item1);\r\n    var index2 = array.indexOf(item2);\r\n\r\n    if (index1 < 0 || index2 < 0)\r\n    {\r\n        throw new Error('Supplied items must be elements of the same array');\r\n    }\r\n\r\n    array[index1] = item2;\r\n    array[index2] = item1;\r\n\r\n    return array;\r\n};\r\n\r\nmodule.exports = Swap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Td2FwLmpzP2FiNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9Td2FwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIHR3byBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAqIFRoZSBlbGVtZW50cyBtdXN0IGV4aXN0IGluIHRoZSBzYW1lIGFycmF5LlxyXG4gKiBUaGUgYXJyYXkgaXMgbW9kaWZpZWQgaW4tcGxhY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuU3dhcFxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHthcnJheX0gYXJyYXkgLSBUaGUgaW5wdXQgYXJyYXkuXHJcbiAqIEBwYXJhbSB7Kn0gaXRlbTEgLSBUaGUgZmlyc3QgZWxlbWVudCB0byBzd2FwLlxyXG4gKiBAcGFyYW0geyp9IGl0ZW0yIC0gVGhlIHNlY29uZCBlbGVtZW50IHRvIHN3YXAuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBUaGUgaW5wdXQgYXJyYXkuXHJcbiAqL1xyXG52YXIgU3dhcCA9IGZ1bmN0aW9uIChhcnJheSwgaXRlbTEsIGl0ZW0yKVxyXG57XHJcbiAgICBpZiAoaXRlbTEgPT09IGl0ZW0yKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaW5kZXgxID0gYXJyYXkuaW5kZXhPZihpdGVtMSk7XHJcbiAgICB2YXIgaW5kZXgyID0gYXJyYXkuaW5kZXhPZihpdGVtMik7XHJcblxyXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcclxuICAgIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIGl0ZW1zIG11c3QgYmUgZWxlbWVudHMgb2YgdGhlIHNhbWUgYXJyYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBhcnJheVtpbmRleDFdID0gaXRlbTI7XHJcbiAgICBhcnJheVtpbmRleDJdID0gaXRlbTE7XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTd2FwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/Swap.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/index.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/index.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils.Array\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Matrix: __webpack_require__(/*! ./matrix */ \"./node_modules/phaser/src/utils/array/matrix/index.js\"),\r\n\r\n    Add: __webpack_require__(/*! ./Add */ \"./node_modules/phaser/src/utils/array/Add.js\"),\r\n    AddAt: __webpack_require__(/*! ./AddAt */ \"./node_modules/phaser/src/utils/array/AddAt.js\"),\r\n    BringToTop: __webpack_require__(/*! ./BringToTop */ \"./node_modules/phaser/src/utils/array/BringToTop.js\"),\r\n    CountAllMatching: __webpack_require__(/*! ./CountAllMatching */ \"./node_modules/phaser/src/utils/array/CountAllMatching.js\"),\r\n    Each: __webpack_require__(/*! ./Each */ \"./node_modules/phaser/src/utils/array/Each.js\"),\r\n    EachInRange: __webpack_require__(/*! ./EachInRange */ \"./node_modules/phaser/src/utils/array/EachInRange.js\"),\r\n    FindClosestInSorted: __webpack_require__(/*! ./FindClosestInSorted */ \"./node_modules/phaser/src/utils/array/FindClosestInSorted.js\"),\r\n    GetAll: __webpack_require__(/*! ./GetAll */ \"./node_modules/phaser/src/utils/array/GetAll.js\"),\r\n    GetFirst: __webpack_require__(/*! ./GetFirst */ \"./node_modules/phaser/src/utils/array/GetFirst.js\"),\r\n    GetRandom: __webpack_require__(/*! ./GetRandom */ \"./node_modules/phaser/src/utils/array/GetRandom.js\"),\r\n    MoveDown: __webpack_require__(/*! ./MoveDown */ \"./node_modules/phaser/src/utils/array/MoveDown.js\"),\r\n    MoveTo: __webpack_require__(/*! ./MoveTo */ \"./node_modules/phaser/src/utils/array/MoveTo.js\"),\r\n    MoveUp: __webpack_require__(/*! ./MoveUp */ \"./node_modules/phaser/src/utils/array/MoveUp.js\"),\r\n    NumberArray: __webpack_require__(/*! ./NumberArray */ \"./node_modules/phaser/src/utils/array/NumberArray.js\"),\r\n    NumberArrayStep: __webpack_require__(/*! ./NumberArrayStep */ \"./node_modules/phaser/src/utils/array/NumberArrayStep.js\"),\r\n    QuickSelect: __webpack_require__(/*! ./QuickSelect */ \"./node_modules/phaser/src/utils/array/QuickSelect.js\"),\r\n    Range: __webpack_require__(/*! ./Range */ \"./node_modules/phaser/src/utils/array/Range.js\"),\r\n    Remove: __webpack_require__(/*! ./Remove */ \"./node_modules/phaser/src/utils/array/Remove.js\"),\r\n    RemoveAt: __webpack_require__(/*! ./RemoveAt */ \"./node_modules/phaser/src/utils/array/RemoveAt.js\"),\r\n    RemoveBetween: __webpack_require__(/*! ./RemoveBetween */ \"./node_modules/phaser/src/utils/array/RemoveBetween.js\"),\r\n    RemoveRandomElement: __webpack_require__(/*! ./RemoveRandomElement */ \"./node_modules/phaser/src/utils/array/RemoveRandomElement.js\"),\r\n    Replace: __webpack_require__(/*! ./Replace */ \"./node_modules/phaser/src/utils/array/Replace.js\"),\r\n    RotateLeft: __webpack_require__(/*! ./RotateLeft */ \"./node_modules/phaser/src/utils/array/RotateLeft.js\"),\r\n    RotateRight: __webpack_require__(/*! ./RotateRight */ \"./node_modules/phaser/src/utils/array/RotateRight.js\"),\r\n    SafeRange: __webpack_require__(/*! ./SafeRange */ \"./node_modules/phaser/src/utils/array/SafeRange.js\"),\r\n    SendToBack: __webpack_require__(/*! ./SendToBack */ \"./node_modules/phaser/src/utils/array/SendToBack.js\"),\r\n    SetAll: __webpack_require__(/*! ./SetAll */ \"./node_modules/phaser/src/utils/array/SetAll.js\"),\r\n    Shuffle: __webpack_require__(/*! ./Shuffle */ \"./node_modules/phaser/src/utils/array/Shuffle.js\"),\r\n    SpliceOne: __webpack_require__(/*! ./SpliceOne */ \"./node_modules/phaser/src/utils/array/SpliceOne.js\"),\r\n    StableSort: __webpack_require__(/*! ./StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\"),\r\n    Swap: __webpack_require__(/*! ./Swap */ \"./node_modules/phaser/src/utils/array/Swap.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9pbmRleC5qcz85OTk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHVFQUFVOztBQUU5QixTQUFTLG1CQUFPLENBQUMsMkRBQU87QUFDeEIsV0FBVyxtQkFBTyxDQUFDLCtEQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHlFQUFjO0FBQ3RDLHNCQUFzQixtQkFBTyxDQUFDLHFGQUFvQjtBQUNsRCxVQUFVLG1CQUFPLENBQUMsNkRBQVE7QUFDMUIsaUJBQWlCLG1CQUFPLENBQUMsMkVBQWU7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsMkZBQXVCO0FBQ3hELFlBQVksbUJBQU8sQ0FBQyxpRUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMscUVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLHVFQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxxRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsaUVBQVU7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLGlFQUFVO0FBQzlCLGlCQUFpQixtQkFBTyxDQUFDLDJFQUFlO0FBQ3hDLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFtQjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQywyRUFBZTtBQUN4QyxXQUFXLG1CQUFPLENBQUMsK0RBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLGlFQUFVO0FBQzlCLGNBQWMsbUJBQU8sQ0FBQyxxRUFBWTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQywrRUFBaUI7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsMkZBQXVCO0FBQ3hELGFBQWEsbUJBQU8sQ0FBQyxtRUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyx5RUFBYztBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQywyRUFBZTtBQUN4QyxlQUFlLG1CQUFPLENBQUMsdUVBQWE7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMseUVBQWM7QUFDdEMsWUFBWSxtQkFBTyxDQUFDLGlFQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxtRUFBVztBQUNoQyxlQUFlLG1CQUFPLENBQUMsdUVBQWE7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMseUVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLDZEQUFROztBQUUxQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHMuQXJyYXlcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBNYXRyaXg6IHJlcXVpcmUoJy4vbWF0cml4JyksXHJcblxyXG4gICAgQWRkOiByZXF1aXJlKCcuL0FkZCcpLFxyXG4gICAgQWRkQXQ6IHJlcXVpcmUoJy4vQWRkQXQnKSxcclxuICAgIEJyaW5nVG9Ub3A6IHJlcXVpcmUoJy4vQnJpbmdUb1RvcCcpLFxyXG4gICAgQ291bnRBbGxNYXRjaGluZzogcmVxdWlyZSgnLi9Db3VudEFsbE1hdGNoaW5nJyksXHJcbiAgICBFYWNoOiByZXF1aXJlKCcuL0VhY2gnKSxcclxuICAgIEVhY2hJblJhbmdlOiByZXF1aXJlKCcuL0VhY2hJblJhbmdlJyksXHJcbiAgICBGaW5kQ2xvc2VzdEluU29ydGVkOiByZXF1aXJlKCcuL0ZpbmRDbG9zZXN0SW5Tb3J0ZWQnKSxcclxuICAgIEdldEFsbDogcmVxdWlyZSgnLi9HZXRBbGwnKSxcclxuICAgIEdldEZpcnN0OiByZXF1aXJlKCcuL0dldEZpcnN0JyksXHJcbiAgICBHZXRSYW5kb206IHJlcXVpcmUoJy4vR2V0UmFuZG9tJyksXHJcbiAgICBNb3ZlRG93bjogcmVxdWlyZSgnLi9Nb3ZlRG93bicpLFxyXG4gICAgTW92ZVRvOiByZXF1aXJlKCcuL01vdmVUbycpLFxyXG4gICAgTW92ZVVwOiByZXF1aXJlKCcuL01vdmVVcCcpLFxyXG4gICAgTnVtYmVyQXJyYXk6IHJlcXVpcmUoJy4vTnVtYmVyQXJyYXknKSxcclxuICAgIE51bWJlckFycmF5U3RlcDogcmVxdWlyZSgnLi9OdW1iZXJBcnJheVN0ZXAnKSxcclxuICAgIFF1aWNrU2VsZWN0OiByZXF1aXJlKCcuL1F1aWNrU2VsZWN0JyksXHJcbiAgICBSYW5nZTogcmVxdWlyZSgnLi9SYW5nZScpLFxyXG4gICAgUmVtb3ZlOiByZXF1aXJlKCcuL1JlbW92ZScpLFxyXG4gICAgUmVtb3ZlQXQ6IHJlcXVpcmUoJy4vUmVtb3ZlQXQnKSxcclxuICAgIFJlbW92ZUJldHdlZW46IHJlcXVpcmUoJy4vUmVtb3ZlQmV0d2VlbicpLFxyXG4gICAgUmVtb3ZlUmFuZG9tRWxlbWVudDogcmVxdWlyZSgnLi9SZW1vdmVSYW5kb21FbGVtZW50JyksXHJcbiAgICBSZXBsYWNlOiByZXF1aXJlKCcuL1JlcGxhY2UnKSxcclxuICAgIFJvdGF0ZUxlZnQ6IHJlcXVpcmUoJy4vUm90YXRlTGVmdCcpLFxyXG4gICAgUm90YXRlUmlnaHQ6IHJlcXVpcmUoJy4vUm90YXRlUmlnaHQnKSxcclxuICAgIFNhZmVSYW5nZTogcmVxdWlyZSgnLi9TYWZlUmFuZ2UnKSxcclxuICAgIFNlbmRUb0JhY2s6IHJlcXVpcmUoJy4vU2VuZFRvQmFjaycpLFxyXG4gICAgU2V0QWxsOiByZXF1aXJlKCcuL1NldEFsbCcpLFxyXG4gICAgU2h1ZmZsZTogcmVxdWlyZSgnLi9TaHVmZmxlJyksXHJcbiAgICBTcGxpY2VPbmU6IHJlcXVpcmUoJy4vU3BsaWNlT25lJyksXHJcbiAgICBTdGFibGVTb3J0OiByZXF1aXJlKCcuL1N0YWJsZVNvcnQnKSxcclxuICAgIFN3YXA6IHJlcXVpcmUoJy4vU3dhcCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if an array can be used as a matrix.\r\n *\r\n * A matrix is a two-dimensional array (array of arrays), where all sub-arrays (rows) have the same length. There must be at least two rows:\r\n *\r\n * ```\r\n *    [\r\n *        [ 1, 1, 1, 1, 1, 1 ],\r\n *        [ 2, 0, 0, 0, 0, 4 ],\r\n *        [ 2, 0, 1, 2, 0, 4 ],\r\n *        [ 2, 0, 3, 4, 0, 4 ],\r\n *        [ 2, 0, 0, 0, 0, 4 ],\r\n *        [ 3, 3, 3, 3, 3, 3 ]\r\n *    ]\r\n * ```\r\n *\r\n * @function Phaser.Utils.Array.Matrix.CheckMatrix\r\n * @since 3.0.0\r\n * \r\n * @generic T\r\n * @genericUse {T[][]} - [matrix]\r\n *\r\n * @param {T[][]} [matrix] - The array to check.\r\n *\r\n * @return {boolean} `true` if the given `matrix` array is a valid matrix.\r\n */\r\nvar CheckMatrix = function (matrix)\r\n{\r\n    if (!Array.isArray(matrix) || matrix.length < 2 || !Array.isArray(matrix[0]))\r\n    {\r\n        return false;\r\n    }\r\n\r\n    //  How long is the first row?\r\n    var size = matrix[0].length;\r\n\r\n    //  Validate the rest of the rows are the same length\r\n    for (var i = 1; i < matrix.length; i++)\r\n    {\r\n        if (matrix[i].length !== size)\r\n        {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n};\r\n\r\nmodule.exports = CheckMatrix;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvQ2hlY2tNYXRyaXguanM/NDNkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L0NoZWNrTWF0cml4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIGFuIGFycmF5IGNhbiBiZSB1c2VkIGFzIGEgbWF0cml4LlxyXG4gKlxyXG4gKiBBIG1hdHJpeCBpcyBhIHR3by1kaW1lbnNpb25hbCBhcnJheSAoYXJyYXkgb2YgYXJyYXlzKSwgd2hlcmUgYWxsIHN1Yi1hcnJheXMgKHJvd3MpIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byByb3dzOlxyXG4gKlxyXG4gKiBgYGBcclxuICogICAgW1xyXG4gKiAgICAgICAgWyAxLCAxLCAxLCAxLCAxLCAxIF0sXHJcbiAqICAgICAgICBbIDIsIDAsIDAsIDAsIDAsIDQgXSxcclxuICogICAgICAgIFsgMiwgMCwgMSwgMiwgMCwgNCBdLFxyXG4gKiAgICAgICAgWyAyLCAwLCAzLCA0LCAwLCA0IF0sXHJcbiAqICAgICAgICBbIDIsIDAsIDAsIDAsIDAsIDQgXSxcclxuICogICAgICAgIFsgMywgMywgMywgMywgMywgMyBdXHJcbiAqICAgIF1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuTWF0cml4LkNoZWNrTWF0cml4XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQGdlbmVyaWMgVFxyXG4gKiBAZ2VuZXJpY1VzZSB7VFtdW119IC0gW21hdHJpeF1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZ2l2ZW4gYG1hdHJpeGAgYXJyYXkgaXMgYSB2YWxpZCBtYXRyaXguXHJcbiAqL1xyXG52YXIgQ2hlY2tNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxyXG57XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0cml4KSB8fCBtYXRyaXgubGVuZ3RoIDwgMiB8fCAhQXJyYXkuaXNBcnJheShtYXRyaXhbMF0pKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgSG93IGxvbmcgaXMgdGhlIGZpcnN0IHJvdz9cclxuICAgIHZhciBzaXplID0gbWF0cml4WzBdLmxlbmd0aDtcclxuXHJcbiAgICAvLyAgVmFsaWRhdGUgdGhlIHJlc3Qgb2YgdGhlIHJvd3MgYXJlIHRoZSBzYW1lIGxlbmd0aFxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRyaXgubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1hdHJpeFtpXS5sZW5ndGggIT09IHNpemUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaGVja01hdHJpeDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/MatrixToString.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/MatrixToString.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Pad = __webpack_require__(/*! ../../string/Pad */ \"./node_modules/phaser/src/utils/string/Pad.js\");\r\nvar CheckMatrix = __webpack_require__(/*! ./CheckMatrix */ \"./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js\");\r\n\r\n/**\r\n * Generates a string (which you can pass to console.log) from the given Array Matrix.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.MatrixToString\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix]\r\n *\r\n * @param {T[][]} [matrix] - A 2-dimensional array.\r\n *\r\n * @return {string} A string representing the matrix.\r\n */\r\nvar MatrixToString = function (matrix)\r\n{\r\n    var str = '';\r\n\r\n    if (!CheckMatrix(matrix))\r\n    {\r\n        return str;\r\n    }\r\n\r\n    for (var r = 0; r < matrix.length; r++)\r\n    {\r\n        for (var c = 0; c < matrix[r].length; c++)\r\n        {\r\n            var cell = matrix[r][c].toString();\r\n\r\n            if (cell !== 'undefined')\r\n            {\r\n                str += Pad(cell, 2);\r\n            }\r\n            else\r\n            {\r\n                str += '?';\r\n            }\r\n\r\n            if (c < matrix[r].length - 1)\r\n            {\r\n                str += ' |';\r\n            }\r\n        }\r\n\r\n        if (r < matrix.length - 1)\r\n        {\r\n            str += '\\n';\r\n\r\n            for (var i = 0; i < matrix[r].length; i++)\r\n            {\r\n                str += '---';\r\n\r\n                if (i < matrix[r].length - 1)\r\n                {\r\n                    str += '+';\r\n                }\r\n            }\r\n\r\n            str += '\\n';\r\n        }\r\n\r\n    }\r\n\r\n    return str;\r\n};\r\n\r\nmodule.exports = MatrixToString;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvTWF0cml4VG9TdHJpbmcuanM/NWIyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLHVFQUFrQjtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBZTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLHNCQUFzQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L01hdHJpeFRvU3RyaW5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUGFkID0gcmVxdWlyZSgnLi4vLi4vc3RyaW5nL1BhZCcpO1xyXG52YXIgQ2hlY2tNYXRyaXggPSByZXF1aXJlKCcuL0NoZWNrTWF0cml4Jyk7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgc3RyaW5nICh3aGljaCB5b3UgY2FuIHBhc3MgdG8gY29uc29sZS5sb2cpIGZyb20gdGhlIGdpdmVuIEFycmF5IE1hdHJpeC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5NYXRyaXguTWF0cml4VG9TdHJpbmdcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXhdXHJcbiAqXHJcbiAqIEBwYXJhbSB7VFtdW119IFttYXRyaXhdIC0gQSAyLWRpbWVuc2lvbmFsIGFycmF5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWF0cml4LlxyXG4gKi9cclxudmFyIE1hdHJpeFRvU3RyaW5nID0gZnVuY3Rpb24gKG1hdHJpeClcclxue1xyXG4gICAgdmFyIHN0ciA9ICcnO1xyXG5cclxuICAgIGlmICghQ2hlY2tNYXRyaXgobWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIHIgPSAwOyByIDwgbWF0cml4Lmxlbmd0aDsgcisrKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgbWF0cml4W3JdLmxlbmd0aDsgYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNlbGwgPSBtYXRyaXhbcl1bY10udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjZWxsICE9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RyICs9IFBhZChjZWxsLCAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0ciArPSAnPyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjIDwgbWF0cml4W3JdLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0ciArPSAnIHwnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAociA8IG1hdHJpeC5sZW5ndGggLSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3RyICs9ICdcXG4nO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXhbcl0ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0ciArPSAnLS0tJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IG1hdHJpeFtyXS5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnKyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHN0ciArPSAnXFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hdHJpeFRvU3RyaW5nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/MatrixToString.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/ReverseColumns.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/ReverseColumns.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Reverses the columns in the given Array Matrix.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.ReverseColumns\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array matrix to reverse the columns for.\r\n *\r\n * @return {T[][]} The column reversed matrix.\r\n */\r\nvar ReverseColumns = function (matrix)\r\n{\r\n    return matrix.reverse();\r\n};\r\n\r\nmodule.exports = ReverseColumns;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUmV2ZXJzZUNvbHVtbnMuanM/YTExOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L1JldmVyc2VDb2x1bW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV2ZXJzZXMgdGhlIGNvbHVtbnMgaW4gdGhlIGdpdmVuIEFycmF5IE1hdHJpeC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5NYXRyaXguUmV2ZXJzZUNvbHVtbnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXgsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgbWF0cml4IHRvIHJldmVyc2UgdGhlIGNvbHVtbnMgZm9yLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtUW11bXX0gVGhlIGNvbHVtbiByZXZlcnNlZCBtYXRyaXguXHJcbiAqL1xyXG52YXIgUmV2ZXJzZUNvbHVtbnMgPSBmdW5jdGlvbiAobWF0cml4KVxyXG57XHJcbiAgICByZXR1cm4gbWF0cml4LnJldmVyc2UoKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmV2ZXJzZUNvbHVtbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/ReverseColumns.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/ReverseRows.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/ReverseRows.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Reverses the rows in the given Array Matrix.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.ReverseRows\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array matrix to reverse the rows for.\r\n *\r\n * @return {T[][]} The column reversed matrix.\r\n */\r\nvar ReverseRows = function (matrix)\r\n{\r\n    for (var i = 0; i < matrix.length; i++)\r\n    {\r\n        matrix[i].reverse();\r\n    }\r\n\r\n    return matrix;\r\n};\r\n\r\nmodule.exports = ReverseRows;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUmV2ZXJzZVJvd3MuanM/ZDE1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L1JldmVyc2VSb3dzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV2ZXJzZXMgdGhlIHJvd3MgaW4gdGhlIGdpdmVuIEFycmF5IE1hdHJpeC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5BcnJheS5NYXRyaXguUmV2ZXJzZVJvd3NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXgsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgbWF0cml4IHRvIHJldmVyc2UgdGhlIHJvd3MgZm9yLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtUW11bXX0gVGhlIGNvbHVtbiByZXZlcnNlZCBtYXRyaXguXHJcbiAqL1xyXG52YXIgUmV2ZXJzZVJvd3MgPSBmdW5jdGlvbiAobWF0cml4KVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdHJpeC5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBtYXRyaXhbaV0ucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRyaXg7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJldmVyc2VSb3dzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/ReverseRows.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/Rotate180.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/Rotate180.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateMatrix = __webpack_require__(/*! ./RotateMatrix */ \"./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js\");\r\n\r\n/**\r\n * Rotates the array matrix 180 degrees.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.Rotate180\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array to rotate.\r\n *\r\n * @return {T[][]} The rotated matrix array. The source matrix should be discard for the returned matrix.\r\n */\r\nvar Rotate180 = function (matrix)\r\n{\r\n    return RotateMatrix(matrix, 180);\r\n};\r\n\r\nmodule.exports = Rotate180;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUm90YXRlMTgwLmpzP2Q1OGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLG9GQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L1JvdGF0ZTE4MC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJvdGF0ZU1hdHJpeCA9IHJlcXVpcmUoJy4vUm90YXRlTWF0cml4Jyk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyB0aGUgYXJyYXkgbWF0cml4IDE4MCBkZWdyZWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5Lk1hdHJpeC5Sb3RhdGUxODBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXgsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgdG8gcm90YXRlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtUW11bXX0gVGhlIHJvdGF0ZWQgbWF0cml4IGFycmF5LiBUaGUgc291cmNlIG1hdHJpeCBzaG91bGQgYmUgZGlzY2FyZCBmb3IgdGhlIHJldHVybmVkIG1hdHJpeC5cclxuICovXHJcbnZhciBSb3RhdGUxODAgPSBmdW5jdGlvbiAobWF0cml4KVxyXG57XHJcbiAgICByZXR1cm4gUm90YXRlTWF0cml4KG1hdHJpeCwgMTgwKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlMTgwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/Rotate180.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/RotateLeft.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/RotateLeft.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateMatrix = __webpack_require__(/*! ./RotateMatrix */ \"./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js\");\r\n\r\n/**\r\n * Rotates the array matrix to the left (or 90 degrees)\r\n *\r\n * @function Phaser.Utils.Array.Matrix.RotateLeft\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array to rotate.\r\n *\r\n * @return {T[][]} The rotated matrix array. The source matrix should be discard for the returned matrix.\r\n */\r\nvar RotateLeft = function (matrix)\r\n{\r\n    return RotateMatrix(matrix, 90);\r\n};\r\n\r\nmodule.exports = RotateLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUm90YXRlTGVmdC5qcz81YzRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxvRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2FycmF5L21hdHJpeC9Sb3RhdGVMZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUm90YXRlTWF0cml4ID0gcmVxdWlyZSgnLi9Sb3RhdGVNYXRyaXgnKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIHRoZSBhcnJheSBtYXRyaXggdG8gdGhlIGxlZnQgKG9yIDkwIGRlZ3JlZXMpXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuTWF0cml4LlJvdGF0ZUxlZnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXgsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgdG8gcm90YXRlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtUW11bXX0gVGhlIHJvdGF0ZWQgbWF0cml4IGFycmF5LiBUaGUgc291cmNlIG1hdHJpeCBzaG91bGQgYmUgZGlzY2FyZCBmb3IgdGhlIHJldHVybmVkIG1hdHJpeC5cclxuICovXHJcbnZhciBSb3RhdGVMZWZ0ID0gZnVuY3Rpb24gKG1hdHJpeClcclxue1xyXG4gICAgcmV0dXJuIFJvdGF0ZU1hdHJpeChtYXRyaXgsIDkwKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlTGVmdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/RotateLeft.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js":
/*!********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CheckMatrix = __webpack_require__(/*! ./CheckMatrix */ \"./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js\");\r\nvar TransposeMatrix = __webpack_require__(/*! ./TransposeMatrix */ \"./node_modules/phaser/src/utils/array/matrix/TransposeMatrix.js\");\r\n\r\n/**\r\n * Rotates the array matrix based on the given rotation value.\r\n *\r\n * The value can be given in degrees: 90, -90, 270, -270 or 180,\r\n * or a string command: `rotateLeft`, `rotateRight` or `rotate180`.\r\n *\r\n * Based on the routine from {@link http://jsfiddle.net/MrPolywhirl/NH42z/}.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.RotateMatrix\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array to rotate.\r\n * @param {(number|string)} [direction=90] - The amount to rotate the matrix by.\r\n *\r\n * @return {T[][]} The rotated matrix array. The source matrix should be discard for the returned matrix.\r\n */\r\nvar RotateMatrix = function (matrix, direction)\r\n{\r\n    if (direction === undefined) { direction = 90; }\r\n\r\n    if (!CheckMatrix(matrix))\r\n    {\r\n        return null;\r\n    }\r\n\r\n    if (typeof direction !== 'string')\r\n    {\r\n        direction = ((direction % 360) + 360) % 360;\r\n    }\r\n\r\n    if (direction === 90 || direction === -270 || direction === 'rotateLeft')\r\n    {\r\n        matrix = TransposeMatrix(matrix);\r\n        matrix.reverse();\r\n    }\r\n    else if (direction === -90 || direction === 270 || direction === 'rotateRight')\r\n    {\r\n        matrix.reverse();\r\n        matrix = TransposeMatrix(matrix);\r\n    }\r\n    else if (Math.abs(direction) === 180 || direction === 'rotate180')\r\n    {\r\n        for (var i = 0; i < matrix.length; i++)\r\n        {\r\n            matrix[i].reverse();\r\n        }\r\n\r\n        matrix.reverse();\r\n    }\r\n\r\n    return matrix;\r\n};\r\n\r\nmodule.exports = RotateMatrix;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUm90YXRlTWF0cml4LmpzPzQ3ZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGtGQUFlO0FBQ3pDLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFtQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDZDQUE2QztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L1JvdGF0ZU1hdHJpeC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENoZWNrTWF0cml4ID0gcmVxdWlyZSgnLi9DaGVja01hdHJpeCcpO1xyXG52YXIgVHJhbnNwb3NlTWF0cml4ID0gcmVxdWlyZSgnLi9UcmFuc3Bvc2VNYXRyaXgnKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIHRoZSBhcnJheSBtYXRyaXggYmFzZWQgb24gdGhlIGdpdmVuIHJvdGF0aW9uIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgdmFsdWUgY2FuIGJlIGdpdmVuIGluIGRlZ3JlZXM6IDkwLCAtOTAsIDI3MCwgLTI3MCBvciAxODAsXHJcbiAqIG9yIGEgc3RyaW5nIGNvbW1hbmQ6IGByb3RhdGVMZWZ0YCwgYHJvdGF0ZVJpZ2h0YCBvciBgcm90YXRlMTgwYC5cclxuICpcclxuICogQmFzZWQgb24gdGhlIHJvdXRpbmUgZnJvbSB7QGxpbmsgaHR0cDovL2pzZmlkZGxlLm5ldC9NclBvbHl3aGlybC9OSDQyei99LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5Lk1hdHJpeC5Sb3RhdGVNYXRyaXhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIFRcclxuICogQGdlbmVyaWNVc2Uge1RbXVtdfSAtIFttYXRyaXgsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtUW11bXX0gW21hdHJpeF0gLSBUaGUgYXJyYXkgdG8gcm90YXRlLlxyXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gW2RpcmVjdGlvbj05MF0gLSBUaGUgYW1vdW50IHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtUW11bXX0gVGhlIHJvdGF0ZWQgbWF0cml4IGFycmF5LiBUaGUgc291cmNlIG1hdHJpeCBzaG91bGQgYmUgZGlzY2FyZCBmb3IgdGhlIHJldHVybmVkIG1hdHJpeC5cclxuICovXHJcbnZhciBSb3RhdGVNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIGlmIChkaXJlY3Rpb24gPT09IHVuZGVmaW5lZCkgeyBkaXJlY3Rpb24gPSA5MDsgfVxyXG5cclxuICAgIGlmICghQ2hlY2tNYXRyaXgobWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvbiAhPT0gJ3N0cmluZycpXHJcbiAgICB7XHJcbiAgICAgICAgZGlyZWN0aW9uID0gKChkaXJlY3Rpb24gJSAzNjApICsgMzYwKSAlIDM2MDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSA5MCB8fCBkaXJlY3Rpb24gPT09IC0yNzAgfHwgZGlyZWN0aW9uID09PSAncm90YXRlTGVmdCcpXHJcbiAgICB7XHJcbiAgICAgICAgbWF0cml4ID0gVHJhbnNwb3NlTWF0cml4KG1hdHJpeCk7XHJcbiAgICAgICAgbWF0cml4LnJldmVyc2UoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gLTkwIHx8IGRpcmVjdGlvbiA9PT0gMjcwIHx8IGRpcmVjdGlvbiA9PT0gJ3JvdGF0ZVJpZ2h0JylcclxuICAgIHtcclxuICAgICAgICBtYXRyaXgucmV2ZXJzZSgpO1xyXG4gICAgICAgIG1hdHJpeCA9IFRyYW5zcG9zZU1hdHJpeChtYXRyaXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoTWF0aC5hYnMoZGlyZWN0aW9uKSA9PT0gMTgwIHx8IGRpcmVjdGlvbiA9PT0gJ3JvdGF0ZTE4MCcpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXgubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtYXRyaXhbaV0ucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0cml4LnJldmVyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0cml4O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVNYXRyaXg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/RotateRight.js":
/*!*******************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/RotateRight.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateMatrix = __webpack_require__(/*! ./RotateMatrix */ \"./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js\");\r\n\r\n/**\r\n * Rotates the array matrix to the left (or -90 degrees)\r\n *\r\n * @function Phaser.Utils.Array.Matrix.RotateRight\r\n * @since 3.0.0\r\n *\r\n * @generic T\r\n * @genericUse {T[][]} - [matrix,$return]\r\n *\r\n * @param {T[][]} [matrix] - The array to rotate.\r\n *\r\n * @return {T[][]} The rotated matrix array. The source matrix should be discard for the returned matrix.\r\n */\r\nvar RotateRight = function (matrix)\r\n{\r\n    return RotateMatrix(matrix, -90);\r\n};\r\n\r\nmodule.exports = RotateRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUm90YXRlUmlnaHQuanM/MzBkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvUm90YXRlUmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSb3RhdGVNYXRyaXggPSByZXF1aXJlKCcuL1JvdGF0ZU1hdHJpeCcpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgdGhlIGFycmF5IG1hdHJpeCB0byB0aGUgbGVmdCAob3IgLTkwIGRlZ3JlZXMpXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQXJyYXkuTWF0cml4LlJvdGF0ZVJpZ2h0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyBUXHJcbiAqIEBnZW5lcmljVXNlIHtUW11bXX0gLSBbbWF0cml4LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7VFtdW119IFttYXRyaXhdIC0gVGhlIGFycmF5IHRvIHJvdGF0ZS5cclxuICpcclxuICogQHJldHVybiB7VFtdW119IFRoZSByb3RhdGVkIG1hdHJpeCBhcnJheS4gVGhlIHNvdXJjZSBtYXRyaXggc2hvdWxkIGJlIGRpc2NhcmQgZm9yIHRoZSByZXR1cm5lZCBtYXRyaXguXHJcbiAqL1xyXG52YXIgUm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobWF0cml4KVxyXG57XHJcbiAgICByZXR1cm4gUm90YXRlTWF0cml4KG1hdHJpeCwgLTkwKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/RotateRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/TransposeMatrix.js":
/*!***********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/TransposeMatrix.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Transposes the elements of the given matrix (array of arrays).\r\n *\r\n * The transpose of a matrix is a new matrix whose rows are the columns of the original.\r\n *\r\n * @function Phaser.Utils.Array.Matrix.TransposeMatrix\r\n * @since 3.0.0\r\n * \r\n * @generic T\r\n * @genericUse {T[][]} - [array,$return]\r\n * \r\n * @param {T[][]} [array] - The array matrix to transpose.\r\n *\r\n * @return {T[][]} A new array matrix which is a transposed version of the given array.\r\n */\r\nvar TransposeMatrix = function (array)\r\n{\r\n    var sourceRowCount = array.length;\r\n    var sourceColCount = array[0].length;\r\n\r\n    var result = new Array(sourceColCount);\r\n\r\n    for (var i = 0; i < sourceColCount; i++)\r\n    {\r\n        result[i] = new Array(sourceRowCount);\r\n\r\n        for (var j = sourceRowCount - 1; j > -1; j--)\r\n        {\r\n            result[i][j] = array[j][i];\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\nmodule.exports = TransposeMatrix;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvVHJhbnNwb3NlTWF0cml4LmpzPzU4ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBOztBQUVBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvVHJhbnNwb3NlTWF0cml4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVHJhbnNwb3NlcyB0aGUgZWxlbWVudHMgb2YgdGhlIGdpdmVuIG1hdHJpeCAoYXJyYXkgb2YgYXJyYXlzKS5cclxuICpcclxuICogVGhlIHRyYW5zcG9zZSBvZiBhIG1hdHJpeCBpcyBhIG5ldyBtYXRyaXggd2hvc2Ugcm93cyBhcmUgdGhlIGNvbHVtbnMgb2YgdGhlIG9yaWdpbmFsLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLkFycmF5Lk1hdHJpeC5UcmFuc3Bvc2VNYXRyaXhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAZ2VuZXJpYyBUXHJcbiAqIEBnZW5lcmljVXNlIHtUW11bXX0gLSBbYXJyYXksJHJldHVybl1cclxuICogXHJcbiAqIEBwYXJhbSB7VFtdW119IFthcnJheV0gLSBUaGUgYXJyYXkgbWF0cml4IHRvIHRyYW5zcG9zZS5cclxuICpcclxuICogQHJldHVybiB7VFtdW119IEEgbmV3IGFycmF5IG1hdHJpeCB3aGljaCBpcyBhIHRyYW5zcG9zZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAqL1xyXG52YXIgVHJhbnNwb3NlTWF0cml4ID0gZnVuY3Rpb24gKGFycmF5KVxyXG57XHJcbiAgICB2YXIgc291cmNlUm93Q291bnQgPSBhcnJheS5sZW5ndGg7XHJcbiAgICB2YXIgc291cmNlQ29sQ291bnQgPSBhcnJheVswXS5sZW5ndGg7XHJcblxyXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShzb3VyY2VDb2xDb3VudCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VDb2xDb3VudDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHJlc3VsdFtpXSA9IG5ldyBBcnJheShzb3VyY2VSb3dDb3VudCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSBzb3VyY2VSb3dDb3VudCAtIDE7IGogPiAtMTsgai0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVzdWx0W2ldW2pdID0gYXJyYXlbal1baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zcG9zZU1hdHJpeDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/TransposeMatrix.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/array/matrix/index.js":
/*!*************************************************************!*\
  !*** ./node_modules/phaser/src/utils/array/matrix/index.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils.Array.Matrix\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    CheckMatrix: __webpack_require__(/*! ./CheckMatrix */ \"./node_modules/phaser/src/utils/array/matrix/CheckMatrix.js\"),\r\n    MatrixToString: __webpack_require__(/*! ./MatrixToString */ \"./node_modules/phaser/src/utils/array/matrix/MatrixToString.js\"),\r\n    ReverseColumns: __webpack_require__(/*! ./ReverseColumns */ \"./node_modules/phaser/src/utils/array/matrix/ReverseColumns.js\"),\r\n    ReverseRows: __webpack_require__(/*! ./ReverseRows */ \"./node_modules/phaser/src/utils/array/matrix/ReverseRows.js\"),\r\n    Rotate180: __webpack_require__(/*! ./Rotate180 */ \"./node_modules/phaser/src/utils/array/matrix/Rotate180.js\"),\r\n    RotateLeft: __webpack_require__(/*! ./RotateLeft */ \"./node_modules/phaser/src/utils/array/matrix/RotateLeft.js\"),\r\n    RotateMatrix: __webpack_require__(/*! ./RotateMatrix */ \"./node_modules/phaser/src/utils/array/matrix/RotateMatrix.js\"),\r\n    RotateRight: __webpack_require__(/*! ./RotateRight */ \"./node_modules/phaser/src/utils/array/matrix/RotateRight.js\"),\r\n    TransposeMatrix: __webpack_require__(/*! ./TransposeMatrix */ \"./node_modules/phaser/src/utils/array/matrix/TransposeMatrix.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9hcnJheS9tYXRyaXgvaW5kZXguanM/YzhhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGtGQUFlO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLHdGQUFrQjtBQUM5QyxvQkFBb0IsbUJBQU8sQ0FBQyx3RkFBa0I7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsa0ZBQWU7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhFQUFhO0FBQ3BDLGdCQUFnQixtQkFBTyxDQUFDLGdGQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLG9GQUFnQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBZTtBQUN4QyxxQkFBcUIsbUJBQU8sQ0FBQywwRkFBbUI7O0FBRWhEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYXJyYXkvbWF0cml4L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHMuQXJyYXkuTWF0cml4XHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ2hlY2tNYXRyaXg6IHJlcXVpcmUoJy4vQ2hlY2tNYXRyaXgnKSxcclxuICAgIE1hdHJpeFRvU3RyaW5nOiByZXF1aXJlKCcuL01hdHJpeFRvU3RyaW5nJyksXHJcbiAgICBSZXZlcnNlQ29sdW1uczogcmVxdWlyZSgnLi9SZXZlcnNlQ29sdW1ucycpLFxyXG4gICAgUmV2ZXJzZVJvd3M6IHJlcXVpcmUoJy4vUmV2ZXJzZVJvd3MnKSxcclxuICAgIFJvdGF0ZTE4MDogcmVxdWlyZSgnLi9Sb3RhdGUxODAnKSxcclxuICAgIFJvdGF0ZUxlZnQ6IHJlcXVpcmUoJy4vUm90YXRlTGVmdCcpLFxyXG4gICAgUm90YXRlTWF0cml4OiByZXF1aXJlKCcuL1JvdGF0ZU1hdHJpeCcpLFxyXG4gICAgUm90YXRlUmlnaHQ6IHJlcXVpcmUoJy4vUm90YXRlUmlnaHQnKSxcclxuICAgIFRyYW5zcG9zZU1hdHJpeDogcmVxdWlyZSgnLi9UcmFuc3Bvc2VNYXRyaXgnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/array/matrix/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/base64/ArrayBufferToBase64.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/base64/ArrayBufferToBase64.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Niklas von Hertzen (https://github.com/niklasvh/base64-arraybuffer)\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n/**\r\n * Converts an ArrayBuffer into a base64 string.\r\n * \r\n * The resulting string can optionally be a data uri if the `mediaType` argument is provided.\r\n * \r\n * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs for more details.\r\n *\r\n * @function Phaser.Utils.Base64.ArrayBufferToBase64\r\n * @since 3.18.0\r\n * \r\n * @param {ArrayBuffer} arrayBuffer - The Array Buffer to encode.\r\n * @param {string} [mediaType] - An optional media type, i.e. `audio/ogg` or `image/jpeg`. If included the resulting string will be a data URI.\r\n * \r\n * @return {string} The base64 encoded Array Buffer.\r\n */\r\nvar ArrayBufferToBase64 = function (arrayBuffer, mediaType)\r\n{\r\n    var bytes = new Uint8Array(arrayBuffer);\r\n    var len = bytes.length;\r\n\r\n    var base64 = (mediaType) ? 'data:' + mediaType + ';base64,' : '';\r\n\r\n    for (var i = 0; i < len; i += 3)\r\n    {\r\n        base64 += chars[bytes[i] >> 2];\r\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\r\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\r\n        base64 += chars[bytes[i + 2] & 63];\r\n    }\r\n\r\n    if ((len % 3) === 2)\r\n    {\r\n        base64 = base64.substring(0, base64.length - 1) + '=';\r\n    }\r\n    else if (len % 3 === 1)\r\n    {\r\n        base64 = base64.substring(0, base64.length - 2) + '==';\r\n    }\r\n  \r\n    return base64;\r\n};\r\n\r\nmodule.exports = ArrayBufferToBase64;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9iYXNlNjQvQXJyYXlCdWZmZXJUb0Jhc2U2NC5qcz80YWMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVEQUF1RDs7QUFFdkQsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2Jhc2U2NC9BcnJheUJ1ZmZlclRvQmFzZTY0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgTmlrbGFzIHZvbiBIZXJ0emVuIChodHRwczovL2dpdGh1Yi5jb20vbmlrbGFzdmgvYmFzZTY0LWFycmF5YnVmZmVyKVxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGFuIEFycmF5QnVmZmVyIGludG8gYSBiYXNlNjQgc3RyaW5nLlxyXG4gKiBcclxuICogVGhlIHJlc3VsdGluZyBzdHJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgYSBkYXRhIHVyaSBpZiB0aGUgYG1lZGlhVHlwZWAgYXJndW1lbnQgaXMgcHJvdmlkZWQuXHJcbiAqIFxyXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXMgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5CYXNlNjQuQXJyYXlCdWZmZXJUb0Jhc2U2NFxyXG4gKiBAc2luY2UgMy4xOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciAtIFRoZSBBcnJheSBCdWZmZXIgdG8gZW5jb2RlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lZGlhVHlwZV0gLSBBbiBvcHRpb25hbCBtZWRpYSB0eXBlLCBpLmUuIGBhdWRpby9vZ2dgIG9yIGBpbWFnZS9qcGVnYC4gSWYgaW5jbHVkZWQgdGhlIHJlc3VsdGluZyBzdHJpbmcgd2lsbCBiZSBhIGRhdGEgVVJJLlxyXG4gKiBcclxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgYmFzZTY0IGVuY29kZWQgQXJyYXkgQnVmZmVyLlxyXG4gKi9cclxudmFyIEFycmF5QnVmZmVyVG9CYXNlNjQgPSBmdW5jdGlvbiAoYXJyYXlCdWZmZXIsIG1lZGlhVHlwZSlcclxue1xyXG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aDtcclxuXHJcbiAgICB2YXIgYmFzZTY0ID0gKG1lZGlhVHlwZSkgPyAnZGF0YTonICsgbWVkaWFUeXBlICsgJztiYXNlNjQsJyA6ICcnO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpXHJcbiAgICB7XHJcbiAgICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2ldID4+IDJdO1xyXG4gICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTtcclxuICAgICAgICBiYXNlNjQgKz0gY2hhcnNbKChieXRlc1tpICsgMV0gJiAxNSkgPDwgMikgfCAoYnl0ZXNbaSArIDJdID4+IDYpXTtcclxuICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaSArIDJdICYgNjNdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgobGVuICUgMykgPT09IDIpXHJcbiAgICB7XHJcbiAgICAgICAgYmFzZTY0ID0gYmFzZTY0LnN1YnN0cmluZygwLCBiYXNlNjQubGVuZ3RoIC0gMSkgKyAnPSc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JztcclxuICAgIH1cclxuICBcclxuICAgIHJldHVybiBiYXNlNjQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5QnVmZmVyVG9CYXNlNjQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/base64/ArrayBufferToBase64.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/base64/Base64ToArrayBuffer.js":
/*!*********************************************************************!*\
  !*** ./node_modules/phaser/src/utils/base64/Base64ToArrayBuffer.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Niklas von Hertzen (https://github.com/niklasvh/base64-arraybuffer)\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n//  Use a lookup table to find the index.\r\nvar lookup = new Uint8Array(256);\r\n\r\nfor (var i = 0; i < chars.length; i++)\r\n{\r\n    lookup[chars.charCodeAt(i)] = i;\r\n}\r\n\r\n/**\r\n * Converts a base64 string, either with or without a data uri, into an Array Buffer.\r\n *\r\n * @function Phaser.Utils.Base64.Base64ToArrayBuffer\r\n * @since 3.18.0\r\n * \r\n * @param {string} base64 - The base64 string to be decoded. Can optionally contain a data URI header, which will be stripped out prior to decoding.\r\n * \r\n * @return {ArrayBuffer} An ArrayBuffer decoded from the base64 data.\r\n */\r\nvar Base64ToArrayBuffer = function (base64)\r\n{\r\n    //  Is it a data uri? if so, strip the header away\r\n    base64 = base64.substr(base64.indexOf(',') + 1);\r\n\r\n    var len = base64.length;\r\n    var bufferLength = len * 0.75;\r\n    var p = 0;\r\n    var encoded1;\r\n    var encoded2;\r\n    var encoded3;\r\n    var encoded4;\r\n\r\n    if (base64[len - 1] === '=')\r\n    {\r\n        bufferLength--;\r\n\r\n        if (base64[len - 2] === '=')\r\n        {\r\n            bufferLength--;\r\n        }\r\n    }\r\n\r\n    var arrayBuffer = new ArrayBuffer(bufferLength);\r\n    var bytes = new Uint8Array(arrayBuffer);\r\n\r\n    for (var i = 0; i < len; i += 4)\r\n    {\r\n        encoded1 = lookup[base64.charCodeAt(i)];\r\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\r\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\r\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\r\n\r\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\r\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\r\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\r\n    }\r\n\r\n    return arrayBuffer;\r\n};\r\n\r\nmodule.exports = Base64ToArrayBuffer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9iYXNlNjQvQmFzZTY0VG9BcnJheUJ1ZmZlci5qcz8yNzJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYmFzZTY0L0Jhc2U2NFRvQXJyYXlCdWZmZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBOaWtsYXMgdm9uIEhlcnR6ZW4gKGh0dHBzOi8vZ2l0aHViLmNvbS9uaWtsYXN2aC9iYXNlNjQtYXJyYXlidWZmZXIpXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcblxyXG4vLyAgVXNlIGEgbG9va3VwIHRhYmxlIHRvIGZpbmQgdGhlIGluZGV4LlxyXG52YXIgbG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcclxuXHJcbmZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspXHJcbntcclxuICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIGJhc2U2NCBzdHJpbmcsIGVpdGhlciB3aXRoIG9yIHdpdGhvdXQgYSBkYXRhIHVyaSwgaW50byBhbiBBcnJheSBCdWZmZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuQmFzZTY0LkJhc2U2NFRvQXJyYXlCdWZmZXJcclxuICogQHNpbmNlIDMuMTguMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgc3RyaW5nIHRvIGJlIGRlY29kZWQuIENhbiBvcHRpb25hbGx5IGNvbnRhaW4gYSBkYXRhIFVSSSBoZWFkZXIsIHdoaWNoIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHByaW9yIHRvIGRlY29kaW5nLlxyXG4gKiBcclxuICogQHJldHVybiB7QXJyYXlCdWZmZXJ9IEFuIEFycmF5QnVmZmVyIGRlY29kZWQgZnJvbSB0aGUgYmFzZTY0IGRhdGEuXHJcbiAqL1xyXG52YXIgQmFzZTY0VG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChiYXNlNjQpXHJcbntcclxuICAgIC8vICBJcyBpdCBhIGRhdGEgdXJpPyBpZiBzbywgc3RyaXAgdGhlIGhlYWRlciBhd2F5XHJcbiAgICBiYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcclxuXHJcbiAgICB2YXIgbGVuID0gYmFzZTY0Lmxlbmd0aDtcclxuICAgIHZhciBidWZmZXJMZW5ndGggPSBsZW4gKiAwLjc1O1xyXG4gICAgdmFyIHAgPSAwO1xyXG4gICAgdmFyIGVuY29kZWQxO1xyXG4gICAgdmFyIGVuY29kZWQyO1xyXG4gICAgdmFyIGVuY29kZWQzO1xyXG4gICAgdmFyIGVuY29kZWQ0O1xyXG5cclxuICAgIGlmIChiYXNlNjRbbGVuIC0gMV0gPT09ICc9JylcclxuICAgIHtcclxuICAgICAgICBidWZmZXJMZW5ndGgtLTtcclxuXHJcbiAgICAgICAgaWYgKGJhc2U2NFtsZW4gLSAyXSA9PT0gJz0nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoLS07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xyXG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpXHJcbiAgICB7XHJcbiAgICAgICAgZW5jb2RlZDEgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSldO1xyXG4gICAgICAgIGVuY29kZWQyID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAxKV07XHJcbiAgICAgICAgZW5jb2RlZDMgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDIpXTtcclxuICAgICAgICBlbmNvZGVkNCA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpICsgMyldO1xyXG5cclxuICAgICAgICBieXRlc1twKytdID0gKGVuY29kZWQxIDw8IDIpIHwgKGVuY29kZWQyID4+IDQpO1xyXG4gICAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQyICYgMTUpIDw8IDQpIHwgKGVuY29kZWQzID4+IDIpO1xyXG4gICAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQzICYgMykgPDwgNikgfCAoZW5jb2RlZDQgJiA2Myk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5QnVmZmVyO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCYXNlNjRUb0FycmF5QnVmZmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/base64/Base64ToArrayBuffer.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/base64/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/base64/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils.Base64\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    ArrayBufferToBase64: __webpack_require__(/*! ./ArrayBufferToBase64 */ \"./node_modules/phaser/src/utils/base64/ArrayBufferToBase64.js\"),\r\n    Base64ToArrayBuffer: __webpack_require__(/*! ./Base64ToArrayBuffer */ \"./node_modules/phaser/src/utils/base64/Base64ToArrayBuffer.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9iYXNlNjQvaW5kZXguanM/NDZkNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLDRGQUF1QjtBQUN4RCx5QkFBeUIsbUJBQU8sQ0FBQyw0RkFBdUI7O0FBRXhEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvYmFzZTY0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHMuQmFzZTY0XHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQXJyYXlCdWZmZXJUb0Jhc2U2NDogcmVxdWlyZSgnLi9BcnJheUJ1ZmZlclRvQmFzZTY0JyksXHJcbiAgICBCYXNlNjRUb0FycmF5QnVmZmVyOiByZXF1aXJlKCcuL0Jhc2U2NFRvQXJyYXlCdWZmZXInKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/base64/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/index.js":
/*!************************************************!*\
  !*** ./node_modules/phaser/src/utils/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Array: __webpack_require__(/*! ./array/ */ \"./node_modules/phaser/src/utils/array/index.js\"),\r\n    Base64: __webpack_require__(/*! ./base64/ */ \"./node_modules/phaser/src/utils/base64/index.js\"),\r\n    Objects: __webpack_require__(/*! ./object/ */ \"./node_modules/phaser/src/utils/object/index.js\"),\r\n    String: __webpack_require__(/*! ./string/ */ \"./node_modules/phaser/src/utils/string/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9pbmRleC5qcz85ZDc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLGdFQUFVO0FBQzdCLFlBQVksbUJBQU8sQ0FBQyxrRUFBVztBQUMvQixhQUFhLG1CQUFPLENBQUMsa0VBQVc7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLGtFQUFXOztBQUUvQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBcnJheTogcmVxdWlyZSgnLi9hcnJheS8nKSxcclxuICAgIEJhc2U2NDogcmVxdWlyZSgnLi9iYXNlNjQvJyksXHJcbiAgICBPYmplY3RzOiByZXF1aXJlKCcuL29iamVjdC8nKSxcclxuICAgIFN0cmluZzogcmVxdWlyZSgnLi9zdHJpbmcvJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/Clone.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/Clone.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Shallow Object Clone. Will not clone nested objects.\r\n *\r\n * @function Phaser.Utils.Objects.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {object} obj - the object from which to clone\r\n *\r\n * @return {object} a new object with the same properties as the input obj\r\n */\r\nvar Clone = function (obj)\r\n{\r\n    var clone = {};\r\n\r\n    for (var key in obj)\r\n    {\r\n        if (Array.isArray(obj[key]))\r\n        {\r\n            clone[key] = obj[key].slice(0);\r\n        }\r\n        else\r\n        {\r\n            clone[key] = obj[key];\r\n        }\r\n    }\r\n\r\n    return clone;\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvQ2xvbmUuanM/ZjBhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9DbG9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNoYWxsb3cgT2JqZWN0IENsb25lLiBXaWxsIG5vdCBjbG9uZSBuZXN0ZWQgb2JqZWN0cy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gdGhlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNsb25lXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgaW5wdXQgb2JqXHJcbiAqL1xyXG52YXIgQ2xvbmUgPSBmdW5jdGlvbiAob2JqKVxyXG57XHJcbiAgICB2YXIgY2xvbmUgPSB7fTtcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNsb25lW2tleV0gPSBvYmpba2V5XS5zbGljZSgwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2xvbmVba2V5XSA9IG9ialtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENsb25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/Clone.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/Extend.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/Extend.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar IsPlainObject = __webpack_require__(/*! ./IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n// @param {boolean} deep - Perform a deep copy?\r\n// @param {object} target - The target object to copy to.\r\n// @return {object} The extended object.\r\n\r\n/**\r\n * This is a slightly modified version of http://api.jquery.com/jQuery.extend/\r\n *\r\n * @function Phaser.Utils.Objects.Extend\r\n * @since 3.0.0\r\n *\r\n * @return {object} The extended object.\r\n */\r\nvar Extend = function ()\r\n{\r\n    var options, name, src, copy, copyIsArray, clone,\r\n        target = arguments[0] || {},\r\n        i = 1,\r\n        length = arguments.length,\r\n        deep = false;\r\n\r\n    // Handle a deep copy situation\r\n    if (typeof target === 'boolean')\r\n    {\r\n        deep = target;\r\n        target = arguments[1] || {};\r\n\r\n        // skip the boolean and the target\r\n        i = 2;\r\n    }\r\n\r\n    // extend Phaser if only one argument is passed\r\n    if (length === i)\r\n    {\r\n        target = this;\r\n        --i;\r\n    }\r\n\r\n    for (; i < length; i++)\r\n    {\r\n        // Only deal with non-null/undefined values\r\n        if ((options = arguments[i]) != null)\r\n        {\r\n            // Extend the base object\r\n            for (name in options)\r\n            {\r\n                src = target[name];\r\n                copy = options[name];\r\n\r\n                // Prevent never-ending loop\r\n                if (target === copy)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                // Recurse if we're merging plain objects or arrays\r\n                if (deep && copy && (IsPlainObject(copy) || (copyIsArray = Array.isArray(copy))))\r\n                {\r\n                    if (copyIsArray)\r\n                    {\r\n                        copyIsArray = false;\r\n                        clone = src && Array.isArray(src) ? src : [];\r\n                    }\r\n                    else\r\n                    {\r\n                        clone = src && IsPlainObject(src) ? src : {};\r\n                    }\r\n\r\n                    // Never move original objects, clone them\r\n                    target[name] = Extend(deep, clone, copy);\r\n\r\n                // Don't bring in undefined values\r\n                }\r\n                else if (copy !== undefined)\r\n                {\r\n                    target[name] = copy;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Return the modified object\r\n    return target;\r\n};\r\n\r\nmodule.exports = Extend;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvRXh0ZW5kLmpzPzliZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLGdGQUFpQjs7QUFFN0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvb2JqZWN0L0V4dGVuZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8vIEBwYXJhbSB7Ym9vbGVhbn0gZGVlcCAtIFBlcmZvcm0gYSBkZWVwIGNvcHk/XHJcbi8vIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4vLyBAcmV0dXJuIHtvYmplY3R9IFRoZSBleHRlbmRlZCBvYmplY3QuXHJcblxyXG4vKipcclxuICogVGhpcyBpcyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgaHR0cDovL2FwaS5qcXVlcnkuY29tL2pRdWVyeS5leHRlbmQvXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuT2JqZWN0cy5FeHRlbmRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gVGhlIGV4dGVuZGVkIG9iamVjdC5cclxuICovXHJcbnZhciBFeHRlbmQgPSBmdW5jdGlvbiAoKVxyXG57XHJcbiAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXHJcbiAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LFxyXG4gICAgICAgIGkgPSAxLFxyXG4gICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXHJcbiAgICAgICAgZGVlcCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpXHJcbiAgICB7XHJcbiAgICAgICAgZGVlcCA9IHRhcmdldDtcclxuICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307XHJcblxyXG4gICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcclxuICAgICAgICBpID0gMjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRlbmQgUGhhc2VyIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxyXG4gICAgaWYgKGxlbmd0aCA9PT0gaSlcclxuICAgIHtcclxuICAgICAgICB0YXJnZXQgPSB0aGlzO1xyXG4gICAgICAgIC0taTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcclxuICAgICAgICBpZiAoKG9wdGlvbnMgPSBhcmd1bWVudHNbaV0pICE9IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIGZvciAobmFtZSBpbiBvcHRpb25zKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBjb3B5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZXAgJiYgY29weSAmJiAoSXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvcHkpKSkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHlJc0FycmF5KVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgQXJyYXkuaXNBcnJheShzcmMpID8gc3JjIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIElzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gRXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3B5ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gY29weTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5kO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/Extend.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/GetAdvancedValue.js":
/*!******************************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/GetAdvancedValue.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH = __webpack_require__(/*! ../../math */ \"./node_modules/phaser/src/math/index.js\");\r\nvar GetValue = __webpack_require__(/*! ./GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Retrieves a value from an object. Allows for more advanced selection options, including:\r\n *\r\n * Allowed types:\r\n * \r\n * Implicit\r\n * {\r\n *     x: 4\r\n * }\r\n *\r\n * From function\r\n * {\r\n *     x: function ()\r\n * }\r\n *\r\n * Randomly pick one element from the array\r\n * {\r\n *     x: [a, b, c, d, e, f]\r\n * }\r\n *\r\n * Random integer between min and max:\r\n * {\r\n *     x: { randInt: [min, max] }\r\n * }\r\n *\r\n * Random float between min and max:\r\n * {\r\n *     x: { randFloat: [min, max] }\r\n * }\r\n * \r\n *\r\n * @function Phaser.Utils.Objects.GetAdvancedValue\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The object to retrieve the value from.\r\n * @param {string} key - The name of the property to retrieve from the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`) - `banner.hideBanner` would return the value of the `hideBanner` property from the object stored in the `banner` property of the `source` object.\r\n * @param {*} defaultValue - The value to return if the `key` isn't found in the `source` object.\r\n *\r\n * @return {*} The value of the requested key.\r\n */\r\nvar GetAdvancedValue = function (source, key, defaultValue)\r\n{\r\n    var value = GetValue(source, key, null);\r\n\r\n    if (value === null)\r\n    {\r\n        return defaultValue;\r\n    }\r\n    else if (Array.isArray(value))\r\n    {\r\n        return MATH.RND.pick(value);\r\n    }\r\n    else if (typeof value === 'object')\r\n    {\r\n        if (value.hasOwnProperty('randInt'))\r\n        {\r\n            return MATH.RND.integerInRange(value.randInt[0], value.randInt[1]);\r\n        }\r\n        else if (value.hasOwnProperty('randFloat'))\r\n        {\r\n            return MATH.RND.realInRange(value.randFloat[0], value.randFloat[1]);\r\n        }\r\n    }\r\n    else if (typeof value === 'function')\r\n    {\r\n        return value(key);\r\n    }\r\n\r\n    return value;\r\n};\r\n\r\nmodule.exports = GetAdvancedValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZS5qcz85ZTIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMkRBQVk7QUFDL0IsZUFBZSxtQkFBTyxDQUFDLHNFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiO0FBQ0EsWUFBWSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNQVRIID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuL0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIGEgdmFsdWUgZnJvbSBhbiBvYmplY3QuIEFsbG93cyBmb3IgbW9yZSBhZHZhbmNlZCBzZWxlY3Rpb24gb3B0aW9ucywgaW5jbHVkaW5nOlxyXG4gKlxyXG4gKiBBbGxvd2VkIHR5cGVzOlxyXG4gKiBcclxuICogSW1wbGljaXRcclxuICoge1xyXG4gKiAgICAgeDogNFxyXG4gKiB9XHJcbiAqXHJcbiAqIEZyb20gZnVuY3Rpb25cclxuICoge1xyXG4gKiAgICAgeDogZnVuY3Rpb24gKClcclxuICogfVxyXG4gKlxyXG4gKiBSYW5kb21seSBwaWNrIG9uZSBlbGVtZW50IGZyb20gdGhlIGFycmF5XHJcbiAqIHtcclxuICogICAgIHg6IFthLCBiLCBjLCBkLCBlLCBmXVxyXG4gKiB9XHJcbiAqXHJcbiAqIFJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXg6XHJcbiAqIHtcclxuICogICAgIHg6IHsgcmFuZEludDogW21pbiwgbWF4XSB9XHJcbiAqIH1cclxuICpcclxuICogUmFuZG9tIGZsb2F0IGJldHdlZW4gbWluIGFuZCBtYXg6XHJcbiAqIHtcclxuICogICAgIHg6IHsgcmFuZEZsb2F0OiBbbWluLCBtYXhdIH1cclxuICogfVxyXG4gKiBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLkdldEFkdmFuY2VkVmFsdWVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBzb3VyY2UgLSBUaGUgb2JqZWN0IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gdGhlIG9iamVjdC4gSWYgYSBwcm9wZXJ0eSBpcyBuZXN0ZWQsIHRoZSBuYW1lcyBvZiBpdHMgcHJlY2VkaW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBhIGRvdCAoYC5gKSAtIGBiYW5uZXIuaGlkZUJhbm5lcmAgd291bGQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYGhpZGVCYW5uZXJgIHByb3BlcnR5IGZyb20gdGhlIG9iamVjdCBzdG9yZWQgaW4gdGhlIGBiYW5uZXJgIHByb3BlcnR5IG9mIHRoZSBgc291cmNlYCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgYGtleWAgaXNuJ3QgZm91bmQgaW4gdGhlIGBzb3VyY2VgIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7Kn0gVGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQga2V5LlxyXG4gKi9cclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSBmdW5jdGlvbiAoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSlcclxue1xyXG4gICAgdmFyIHZhbHVlID0gR2V0VmFsdWUoc291cmNlLCBrZXksIG51bGwpO1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIE1BVEguUk5ELnBpY2sodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3JhbmRJbnQnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNQVRILlJORC5pbnRlZ2VySW5SYW5nZSh2YWx1ZS5yYW5kSW50WzBdLCB2YWx1ZS5yYW5kSW50WzFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3JhbmRGbG9hdCcpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1BVEguUk5ELnJlYWxJblJhbmdlKHZhbHVlLnJhbmRGbG9hdFswXSwgdmFsdWUucmFuZEZsb2F0WzFdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlKGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRBZHZhbmNlZFZhbHVlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/GetAdvancedValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/GetFastValue.js":
/*!**************************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/GetFastValue.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Finds the key within the top level of the {@link source} object, or returns {@link defaultValue}\r\n *\r\n * @function Phaser.Utils.Objects.GetFastValue\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The object to search\r\n * @param {string} key - The key for the property on source. Must exist at the top level of the source object (no periods)\r\n * @param {*} [defaultValue] - The default value to use if the key does not exist.\r\n *\r\n * @return {*} The value if found; otherwise, defaultValue (null if none provided)\r\n */\r\nvar GetFastValue = function (source, key, defaultValue)\r\n{\r\n    var t = typeof(source);\r\n\r\n    if (!source || t === 'number' || t === 'string')\r\n    {\r\n        return defaultValue;\r\n    }\r\n    else if (source.hasOwnProperty(key) && source[key] !== undefined)\r\n    {\r\n        return source[key];\r\n    }\r\n    else\r\n    {\r\n        return defaultValue;\r\n    }\r\n};\r\n\r\nmodule.exports = GetFastValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlLmpzP2U0MDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsOENBQThDLGFBQWEscUJBQXFCO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYjtBQUNBLFlBQVksRUFBRSxvQkFBb0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRmluZHMgdGhlIGtleSB3aXRoaW4gdGhlIHRvcCBsZXZlbCBvZiB0aGUge0BsaW5rIHNvdXJjZX0gb2JqZWN0LCBvciByZXR1cm5zIHtAbGluayBkZWZhdWx0VmFsdWV9XHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuT2JqZWN0cy5HZXRGYXN0VmFsdWVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBzb3VyY2UgLSBUaGUgb2JqZWN0IHRvIHNlYXJjaFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBmb3IgdGhlIHByb3BlcnR5IG9uIHNvdXJjZS4gTXVzdCBleGlzdCBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBzb3VyY2Ugb2JqZWN0IChubyBwZXJpb2RzKVxyXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIC0gVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXHJcbiAqXHJcbiAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSBpZiBmb3VuZDsgb3RoZXJ3aXNlLCBkZWZhdWx0VmFsdWUgKG51bGwgaWYgbm9uZSBwcm92aWRlZClcclxuICovXHJcbnZhciBHZXRGYXN0VmFsdWUgPSBmdW5jdGlvbiAoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSlcclxue1xyXG4gICAgdmFyIHQgPSB0eXBlb2Yoc291cmNlKTtcclxuXHJcbiAgICBpZiAoIXNvdXJjZSB8fCB0ID09PSAnbnVtYmVyJyB8fCB0ID09PSAnc3RyaW5nJylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkgJiYgc291cmNlW2tleV0gIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc291cmNlW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0RmFzdFZhbHVlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/GetFastValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/GetMinMaxValue.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/GetMinMaxValue.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ./GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\n\r\n/**\r\n * Retrieves and clamps a numerical value from an object.\r\n *\r\n * @function Phaser.Utils.Objects.GetMinMaxValue\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The object to retrieve the value from.\r\n * @param {string} key - The name of the property to retrieve from the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`).\r\n * @param {number} min - The minimum value which can be returned.\r\n * @param {number} max - The maximum value which can be returned.\r\n * @param {number} defaultValue - The value to return if the property doesn't exist. It's also constrained to the given bounds.\r\n *\r\n * @return {number} The clamped value from the `source` object.\r\n */\r\nvar GetMinMaxValue = function (source, key, min, max, defaultValue)\r\n{\r\n    if (defaultValue === undefined) { defaultValue = min; }\r\n\r\n    var value = GetValue(source, key, defaultValue);\r\n\r\n    return Clamp(value, min, max);\r\n};\r\n\r\nmodule.exports = GetMinMaxValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0TWluTWF4VmFsdWUuanM/YjcyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHNFQUFZO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG9CQUFvQjs7QUFFekQ7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9HZXRNaW5NYXhWYWx1ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi9HZXRWYWx1ZScpO1xyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0NsYW1wJyk7XHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIGFuZCBjbGFtcHMgYSBudW1lcmljYWwgdmFsdWUgZnJvbSBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuT2JqZWN0cy5HZXRNaW5NYXhWYWx1ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFRoZSBvYmplY3QgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUgZnJvbSB0aGUgb2JqZWN0LiBJZiBhIHByb3BlcnR5IGlzIG5lc3RlZCwgdGhlIG5hbWVzIG9mIGl0cyBwcmVjZWRpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IGEgZG90IChgLmApLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIC0gVGhlIG1pbmltdW0gdmFsdWUgd2hpY2ggY2FuIGJlIHJldHVybmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gdmFsdWUgd2hpY2ggY2FuIGJlIHJldHVybmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndCBleGlzdC4gSXQncyBhbHNvIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBib3VuZHMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNsYW1wZWQgdmFsdWUgZnJvbSB0aGUgYHNvdXJjZWAgb2JqZWN0LlxyXG4gKi9cclxudmFyIEdldE1pbk1heFZhbHVlID0gZnVuY3Rpb24gKHNvdXJjZSwga2V5LCBtaW4sIG1heCwgZGVmYXVsdFZhbHVlKVxyXG57XHJcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHsgZGVmYXVsdFZhbHVlID0gbWluOyB9XHJcblxyXG4gICAgdmFyIHZhbHVlID0gR2V0VmFsdWUoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSk7XHJcblxyXG4gICAgcmV0dXJuIENsYW1wKHZhbHVlLCBtaW4sIG1heCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE1pbk1heFZhbHVlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/GetMinMaxValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/GetValue.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/GetValue.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n//  Source object\r\n//  The key as a string, or an array of keys, i.e. 'banner', or 'banner.hideBanner'\r\n//  The default value to use if the key doesn't exist\r\n\r\n/**\r\n * Retrieves a value from an object.\r\n *\r\n * @function Phaser.Utils.Objects.GetValue\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The object to retrieve the value from.\r\n * @param {string} key - The name of the property to retrieve from the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`) - `banner.hideBanner` would return the value of the `hideBanner` property from the object stored in the `banner` property of the `source` object.\r\n * @param {*} defaultValue - The value to return if the `key` isn't found in the `source` object.\r\n *\r\n * @return {*} The value of the requested key.\r\n */\r\nvar GetValue = function (source, key, defaultValue)\r\n{\r\n    if (!source || typeof source === 'number')\r\n    {\r\n        return defaultValue;\r\n    }\r\n    else if (source.hasOwnProperty(key))\r\n    {\r\n        return source[key];\r\n    }\r\n    else if (key.indexOf('.') !== -1)\r\n    {\r\n        var keys = key.split('.');\r\n        var parent = source;\r\n        var value = defaultValue;\r\n\r\n        //  Use for loop here so we can break early\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            if (parent.hasOwnProperty(keys[i]))\r\n            {\r\n                //  Yes it has a key property, let's carry on down\r\n                value = parent[keys[i]];\r\n\r\n                parent = parent[keys[i]];\r\n            }\r\n            else\r\n            {\r\n                //  Can't go any further, so reset to default\r\n                value = defaultValue;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return value;\r\n    }\r\n    else\r\n    {\r\n        return defaultValue;\r\n    }\r\n};\r\n\r\nmodule.exports = GetValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0VmFsdWUuanM/MTg4ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvR2V0VmFsdWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBTb3VyY2Ugb2JqZWN0XHJcbi8vICBUaGUga2V5IGFzIGEgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBrZXlzLCBpLmUuICdiYW5uZXInLCBvciAnYmFubmVyLmhpZGVCYW5uZXInXHJcbi8vICBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0XHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIGEgdmFsdWUgZnJvbSBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuT2JqZWN0cy5HZXRWYWx1ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFRoZSBvYmplY3QgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUgZnJvbSB0aGUgb2JqZWN0LiBJZiBhIHByb3BlcnR5IGlzIG5lc3RlZCwgdGhlIG5hbWVzIG9mIGl0cyBwcmVjZWRpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IGEgZG90IChgLmApIC0gYGJhbm5lci5oaWRlQmFubmVyYCB3b3VsZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBgaGlkZUJhbm5lcmAgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0IHN0b3JlZCBpbiB0aGUgYGJhbm5lcmAgcHJvcGVydHkgb2YgdGhlIGBzb3VyY2VgIG9iamVjdC5cclxuICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBga2V5YCBpc24ndCBmb3VuZCBpbiB0aGUgYHNvdXJjZWAgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBrZXkuXHJcbiAqL1xyXG52YXIgR2V0VmFsdWUgPSBmdW5jdGlvbiAoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSlcclxue1xyXG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZSA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBzb3VyY2Vba2V5XTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGtleS5pbmRleE9mKCcuJykgIT09IC0xKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHNvdXJjZTtcclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8vICBVc2UgZm9yIGxvb3AgaGVyZSBzbyB3ZSBjYW4gYnJlYWsgZWFybHlcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Lmhhc093blByb3BlcnR5KGtleXNbaV0pKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgWWVzIGl0IGhhcyBhIGtleSBwcm9wZXJ0eSwgbGV0J3MgY2Fycnkgb24gZG93blxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJlbnRba2V5c1tpXV07XHJcblxyXG4gICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2tleXNbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIENhbid0IGdvIGFueSBmdXJ0aGVyLCBzbyByZXNldCB0byBkZWZhdWx0XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VmFsdWU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/GetValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/HasAll.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/HasAll.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Verifies that an object contains all requested keys\r\n *\r\n * @function Phaser.Utils.Objects.HasAll\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - an object on which to check for key existence\r\n * @param {string[]} keys - an array of keys to ensure the source object contains\r\n *\r\n * @return {boolean} true if the source object contains all keys, false otherwise.\r\n */\r\nvar HasAll = function (source, keys)\r\n{\r\n    for (var i = 0; i < keys.length; i++)\r\n    {\r\n        if (!source.hasOwnProperty(keys[i]))\r\n        {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n};\r\n\r\nmodule.exports = HasAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvSGFzQWxsLmpzPzIxNDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9IYXNBbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBWZXJpZmllcyB0aGF0IGFuIG9iamVjdCBjb250YWlucyBhbGwgcmVxdWVzdGVkIGtleXNcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLkhhc0FsbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIGFuIG9iamVjdCBvbiB3aGljaCB0byBjaGVjayBmb3Iga2V5IGV4aXN0ZW5jZVxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBrZXlzIC0gYW4gYXJyYXkgb2Yga2V5cyB0byBlbnN1cmUgdGhlIHNvdXJjZSBvYmplY3QgY29udGFpbnNcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgc291cmNlIG9iamVjdCBjb250YWlucyBhbGwga2V5cywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxudmFyIEhhc0FsbCA9IGZ1bmN0aW9uIChzb3VyY2UsIGtleXMpXHJcbntcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpZiAoIXNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhhc0FsbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/HasAll.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/HasAny.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/HasAny.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Verifies that an object contains at least one of the requested keys\r\n *\r\n * @function Phaser.Utils.Objects.HasAny\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - an object on which to check for key existence\r\n * @param {string[]} keys - an array of keys to search the object for\r\n *\r\n * @return {boolean} true if the source object contains at least one of the keys, false otherwise\r\n */\r\nvar HasAny = function (source, keys)\r\n{\r\n    for (var i = 0; i < keys.length; i++)\r\n    {\r\n        if (source.hasOwnProperty(keys[i]))\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nmodule.exports = HasAny;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvSGFzQW55LmpzPzUxYjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9IYXNBbnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBWZXJpZmllcyB0aGF0IGFuIG9iamVjdCBjb250YWlucyBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVlc3RlZCBrZXlzXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuT2JqZWN0cy5IYXNBbnlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBzb3VyY2UgLSBhbiBvYmplY3Qgb24gd2hpY2ggdG8gY2hlY2sgZm9yIGtleSBleGlzdGVuY2VcclxuICogQHBhcmFtIHtzdHJpbmdbXX0ga2V5cyAtIGFuIGFycmF5IG9mIGtleXMgdG8gc2VhcmNoIHRoZSBvYmplY3QgZm9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIHNvdXJjZSBvYmplY3QgY29udGFpbnMgYXQgbGVhc3Qgb25lIG9mIHRoZSBrZXlzLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbnZhciBIYXNBbnkgPSBmdW5jdGlvbiAoc291cmNlLCBrZXlzKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhhc0FueTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/HasAny.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/HasValue.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/HasValue.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determine whether the source object has a property with the specified key.\r\n *\r\n * @function Phaser.Utils.Objects.HasValue\r\n * @since 3.0.0\r\n *\r\n * @param {object} source - The source object to be checked.\r\n * @param {string} key - The property to check for within the object\r\n *\r\n * @return {boolean} `true` if the provided `key` exists on the `source` object, otherwise `false`.\r\n */\r\nvar HasValue = function (source, key)\r\n{\r\n    return (source.hasOwnProperty(key));\r\n};\r\n\r\nmodule.exports = HasValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvSGFzVmFsdWUuanM/NmM4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvb2JqZWN0L0hhc1ZhbHVlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNvdXJjZSBvYmplY3QgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLkhhc1ZhbHVlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBwcm9wZXJ0eSB0byBjaGVjayBmb3Igd2l0aGluIHRoZSBvYmplY3RcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm92aWRlZCBga2V5YCBleGlzdHMgb24gdGhlIGBzb3VyY2VgIG9iamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgSGFzVmFsdWUgPSBmdW5jdGlvbiAoc291cmNlLCBrZXkpXHJcbntcclxuICAgIHJldHVybiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIYXNWYWx1ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/HasValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/IsPlainObject.js":
/*!***************************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/IsPlainObject.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This is a slightly modified version of jQuery.isPlainObject.\r\n * A plain object is an object whose internal class property is [object Object].\r\n *\r\n * @function Phaser.Utils.Objects.IsPlainObject\r\n * @since 3.0.0\r\n *\r\n * @param {object} obj - The object to inspect.\r\n *\r\n * @return {boolean} `true` if the object is plain, otherwise `false`.\r\n */\r\nvar IsPlainObject = function (obj)\r\n{\r\n    // Not plain objects:\r\n    // - Any object or value whose internal [[Class]] property is not \"[object Object]\"\r\n    // - DOM nodes\r\n    // - window\r\n    if (typeof(obj) !== 'object' || obj.nodeType || obj === obj.window)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    // Support: Firefox <20\r\n    // The try/catch suppresses exceptions thrown when attempting to access\r\n    // the \"constructor\" property of certain host objects, ie. |window.location|\r\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=814622\r\n    try\r\n    {\r\n        if (obj.constructor && !({}).hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf'))\r\n        {\r\n            return false;\r\n        }\r\n    }\r\n    catch (e)\r\n    {\r\n        return false;\r\n    }\r\n\r\n    // If the function hasn't returned already, we're confident that\r\n    // |obj| is a plain object, created by {} or constructed with new Object\r\n    return true;\r\n};\r\n\r\nmodule.exports = IsPlainObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdC5qcz8yZDM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIGpRdWVyeS5pc1BsYWluT2JqZWN0LlxyXG4gKiBBIHBsYWluIG9iamVjdCBpcyBhbiBvYmplY3Qgd2hvc2UgaW50ZXJuYWwgY2xhc3MgcHJvcGVydHkgaXMgW29iamVjdCBPYmplY3RdLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLk9iamVjdHMuSXNQbGFpbk9iamVjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgcGxhaW4sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIElzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiAob2JqKVxyXG57XHJcbiAgICAvLyBOb3QgcGxhaW4gb2JqZWN0czpcclxuICAgIC8vIC0gQW55IG9iamVjdCBvciB2YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0NsYXNzXV0gcHJvcGVydHkgaXMgbm90IFwiW29iamVjdCBPYmplY3RdXCJcclxuICAgIC8vIC0gRE9NIG5vZGVzXHJcbiAgICAvLyAtIHdpbmRvd1xyXG4gICAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0JyB8fCBvYmoubm9kZVR5cGUgfHwgb2JqID09PSBvYmoud2luZG93KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdXBwb3J0OiBGaXJlZm94IDwyMFxyXG4gICAgLy8gVGhlIHRyeS9jYXRjaCBzdXBwcmVzc2VzIGV4Y2VwdGlvbnMgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3NcclxuICAgIC8vIHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgb2YgY2VydGFpbiBob3N0IG9iamVjdHMsIGllLiB8d2luZG93LmxvY2F0aW9ufFxyXG4gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0NjIyXHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgICBpZiAob2JqLmNvbnN0cnVjdG9yICYmICEoe30pLmhhc093blByb3BlcnR5LmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGZ1bmN0aW9uIGhhc24ndCByZXR1cm5lZCBhbHJlYWR5LCB3ZSdyZSBjb25maWRlbnQgdGhhdFxyXG4gICAgLy8gfG9ianwgaXMgYSBwbGFpbiBvYmplY3QsIGNyZWF0ZWQgYnkge30gb3IgY29uc3RydWN0ZWQgd2l0aCBuZXcgT2JqZWN0XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSXNQbGFpbk9iamVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/IsPlainObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/Merge.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/Merge.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\n\r\n/**\r\n * Creates a new Object using all values from obj1 and obj2.\r\n * If a value exists in both obj1 and obj2, the value in obj1 is used.\r\n * \r\n * This is only a shallow copy. Deeply nested objects are not cloned, so be sure to only use this\r\n * function on shallow objects.\r\n *\r\n * @function Phaser.Utils.Objects.Merge\r\n * @since 3.0.0\r\n *\r\n * @param {object} obj1 - The first object.\r\n * @param {object} obj2 - The second object.\r\n *\r\n * @return {object} A new object containing the union of obj1's and obj2's properties.\r\n */\r\nvar Merge = function (obj1, obj2)\r\n{\r\n    var clone = Clone(obj1);\r\n\r\n    for (var key in obj2)\r\n    {\r\n        if (!clone.hasOwnProperty(key))\r\n        {\r\n            clone[key] = obj2[key];\r\n        }\r\n    }\r\n\r\n    return clone;\r\n};\r\n\r\nmodule.exports = Merge;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvTWVyZ2UuanM/ODI2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9NZXJnZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgT2JqZWN0IHVzaW5nIGFsbCB2YWx1ZXMgZnJvbSBvYmoxIGFuZCBvYmoyLlxyXG4gKiBJZiBhIHZhbHVlIGV4aXN0cyBpbiBib3RoIG9iajEgYW5kIG9iajIsIHRoZSB2YWx1ZSBpbiBvYmoxIGlzIHVzZWQuXHJcbiAqIFxyXG4gKiBUaGlzIGlzIG9ubHkgYSBzaGFsbG93IGNvcHkuIERlZXBseSBuZXN0ZWQgb2JqZWN0cyBhcmUgbm90IGNsb25lZCwgc28gYmUgc3VyZSB0byBvbmx5IHVzZSB0aGlzXHJcbiAqIGZ1bmN0aW9uIG9uIHNoYWxsb3cgb2JqZWN0cy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLk1lcmdlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqMSAtIFRoZSBmaXJzdCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmoyIC0gVGhlIHNlY29uZCBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gQSBuZXcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaW9uIG9mIG9iajEncyBhbmQgb2JqMidzIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgTWVyZ2UgPSBmdW5jdGlvbiAob2JqMSwgb2JqMilcclxue1xyXG4gICAgdmFyIGNsb25lID0gQ2xvbmUob2JqMSk7XHJcblxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iajIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFjbG9uZS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2xvbmVba2V5XSA9IG9iajJba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXJnZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/Merge.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/MergeRight.js":
/*!************************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/MergeRight.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\");\r\n\r\n/**\r\n * Creates a new Object using all values from obj1.\r\n * \r\n * Then scans obj2. If a property is found in obj2 that *also* exists in obj1, the value from obj2 is used, otherwise the property is skipped.\r\n *\r\n * @function Phaser.Utils.Objects.MergeRight\r\n * @since 3.0.0\r\n *\r\n * @param {object} obj1 - The first object to merge.\r\n * @param {object} obj2 - The second object to merge. Keys from this object which also exist in `obj1` will be copied to `obj1`.\r\n *\r\n * @return {object} The merged object. `obj1` and `obj2` are not modified.\r\n */\r\nvar MergeRight = function (obj1, obj2)\r\n{\r\n    var clone = Clone(obj1);\r\n\r\n    for (var key in obj2)\r\n    {\r\n        if (clone.hasOwnProperty(key))\r\n        {\r\n            clone[key] = obj2[key];\r\n        }\r\n    }\r\n\r\n    return clone;\r\n};\r\n\r\nmodule.exports = MergeRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvTWVyZ2VSaWdodC5qcz8xZjdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvTWVyZ2VSaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgT2JqZWN0IHVzaW5nIGFsbCB2YWx1ZXMgZnJvbSBvYmoxLlxyXG4gKiBcclxuICogVGhlbiBzY2FucyBvYmoyLiBJZiBhIHByb3BlcnR5IGlzIGZvdW5kIGluIG9iajIgdGhhdCAqYWxzbyogZXhpc3RzIGluIG9iajEsIHRoZSB2YWx1ZSBmcm9tIG9iajIgaXMgdXNlZCwgb3RoZXJ3aXNlIHRoZSBwcm9wZXJ0eSBpcyBza2lwcGVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLk9iamVjdHMuTWVyZ2VSaWdodFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IG9iajEgLSBUaGUgZmlyc3Qgb2JqZWN0IHRvIG1lcmdlLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqMiAtIFRoZSBzZWNvbmQgb2JqZWN0IHRvIG1lcmdlLiBLZXlzIGZyb20gdGhpcyBvYmplY3Qgd2hpY2ggYWxzbyBleGlzdCBpbiBgb2JqMWAgd2lsbCBiZSBjb3BpZWQgdG8gYG9iajFgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBtZXJnZWQgb2JqZWN0LiBgb2JqMWAgYW5kIGBvYmoyYCBhcmUgbm90IG1vZGlmaWVkLlxyXG4gKi9cclxudmFyIE1lcmdlUmlnaHQgPSBmdW5jdGlvbiAob2JqMSwgb2JqMilcclxue1xyXG4gICAgdmFyIGNsb25lID0gQ2xvbmUob2JqMSk7XHJcblxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iajIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNsb25lLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjbG9uZVtrZXldID0gb2JqMltrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/MergeRight.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/Pick.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/Pick.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HasValue = __webpack_require__(/*! ./HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\n\r\n/**\r\n * Returns a new object that only contains the `keys` that were found on the object provided.\r\n * If no `keys` are found, an empty object is returned.\r\n *\r\n * @function Phaser.Utils.Objects.Pick\r\n * @since 3.18.0\r\n *\r\n * @param {object} object - The object to pick the provided keys from.\r\n * @param {array} keys - An array of properties to retrieve from the provided object.\r\n *\r\n * @return {object} A new object that only contains the `keys` that were found on the provided object. If no `keys` were found, an empty object will be returned.\r\n */\r\nvar Pick = function (object, keys)\r\n{\r\n    var obj = {};\r\n\r\n    for (var i = 0; i < keys.length; i++)\r\n    {\r\n        var key = keys[i];\r\n\r\n        if (HasValue(object, key))\r\n        {\r\n            obj[key] = object[key];\r\n        }\r\n    }\r\n\r\n    return obj;\r\n};\r\n\r\nmodule.exports = Pick;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvUGljay5qcz9jZWQxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvb2JqZWN0L1BpY2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4vSGFzVmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbmV3IG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGBrZXlzYCB0aGF0IHdlcmUgZm91bmQgb24gdGhlIG9iamVjdCBwcm92aWRlZC5cclxuICogSWYgbm8gYGtleXNgIGFyZSBmb3VuZCwgYW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLk9iamVjdHMuUGlja1xyXG4gKiBAc2luY2UgMy4xOC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBpY2sgdGhlIHByb3ZpZGVkIGtleXMgZnJvbS5cclxuICogQHBhcmFtIHthcnJheX0ga2V5cyAtIEFuIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtvYmplY3R9IEEgbmV3IG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGBrZXlzYCB0aGF0IHdlcmUgZm91bmQgb24gdGhlIHByb3ZpZGVkIG9iamVjdC4gSWYgbm8gYGtleXNgIHdlcmUgZm91bmQsIGFuIGVtcHR5IG9iamVjdCB3aWxsIGJlIHJldHVybmVkLlxyXG4gKi9cclxudmFyIFBpY2sgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXlzKVxyXG57XHJcbiAgICB2YXIgb2JqID0ge307XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUob2JqZWN0LCBrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2JqW2tleV0gPSBvYmplY3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGljaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/Pick.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/SetValue.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/SetValue.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets a value in an object, allowing for dot notation to control the depth of the property.\r\n * \r\n * For example:\r\n * \r\n * ```javascript\r\n * var data = {\r\n *   world: {\r\n *     position: {\r\n *       x: 200,\r\n *       y: 100\r\n *     }\r\n *   }\r\n * };\r\n * \r\n * SetValue(data, 'world.position.y', 300);\r\n * \r\n * console.log(data.world.position.y); // 300\r\n * ```\r\n *\r\n * @function Phaser.Utils.Objects.SetValue\r\n * @since 3.17.0\r\n *\r\n * @param {object} source - The object to set the value in.\r\n * @param {string} key - The name of the property in the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`)\r\n * @param {any} value - The value to set into the property, if found in the source object.\r\n *\r\n * @return {boolean} `true` if the property key was valid and the value was set, otherwise `false`.\r\n */\r\nvar SetValue = function (source, key, value)\r\n{\r\n    if (!source || typeof source === 'number')\r\n    {\r\n        return false;\r\n    }\r\n    else if (source.hasOwnProperty(key))\r\n    {\r\n        source[key] = value;\r\n\r\n        return true;\r\n    }\r\n    else if (key.indexOf('.') !== -1)\r\n    {\r\n        var keys = key.split('.');\r\n        var parent = source;\r\n        var prev = source;\r\n\r\n        //  Use for loop here so we can break early\r\n        for (var i = 0; i < keys.length; i++)\r\n        {\r\n            if (parent.hasOwnProperty(keys[i]))\r\n            {\r\n                //  Yes it has a key property, let's carry on down\r\n                prev = parent;\r\n                parent = parent[keys[i]];\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        prev[keys[keys.length - 1]] = value;\r\n\r\n        return true;\r\n    }\r\n    \r\n    return false;\r\n};\r\n\r\nmodule.exports = SetValue;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvU2V0VmFsdWUuanM/NzNhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLElBQUk7QUFDZjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL3V0aWxzL29iamVjdC9TZXRWYWx1ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSB2YWx1ZSBpbiBhbiBvYmplY3QsIGFsbG93aW5nIGZvciBkb3Qgbm90YXRpb24gdG8gY29udHJvbCB0aGUgZGVwdGggb2YgdGhlIHByb3BlcnR5LlxyXG4gKiBcclxuICogRm9yIGV4YW1wbGU6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBkYXRhID0ge1xyXG4gKiAgIHdvcmxkOiB7XHJcbiAqICAgICBwb3NpdGlvbjoge1xyXG4gKiAgICAgICB4OiAyMDAsXHJcbiAqICAgICAgIHk6IDEwMFxyXG4gKiAgICAgfVxyXG4gKiAgIH1cclxuICogfTtcclxuICogXHJcbiAqIFNldFZhbHVlKGRhdGEsICd3b3JsZC5wb3NpdGlvbi55JywgMzAwKTtcclxuICogXHJcbiAqIGNvbnNvbGUubG9nKGRhdGEud29ybGQucG9zaXRpb24ueSk7IC8vIDMwMFxyXG4gKiBgYGBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5PYmplY3RzLlNldFZhbHVlXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFRoZSBvYmplY3QgdG8gc2V0IHRoZSB2YWx1ZSBpbi5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0LiBJZiBhIHByb3BlcnR5IGlzIG5lc3RlZCwgdGhlIG5hbWVzIG9mIGl0cyBwcmVjZWRpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IGEgZG90IChgLmApXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgaW50byB0aGUgcHJvcGVydHksIGlmIGZvdW5kIGluIHRoZSBzb3VyY2Ugb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGtleSB3YXMgdmFsaWQgYW5kIHRoZSB2YWx1ZSB3YXMgc2V0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBTZXRWYWx1ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGtleSwgdmFsdWUpXHJcbntcclxuICAgIGlmICghc291cmNlIHx8IHR5cGVvZiBzb3VyY2UgPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIHNvdXJjZVtrZXldID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoa2V5LmluZGV4T2YoJy4nKSAhPT0gLTEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgcGFyZW50ID0gc291cmNlO1xyXG4gICAgICAgIHZhciBwcmV2ID0gc291cmNlO1xyXG5cclxuICAgICAgICAvLyAgVXNlIGZvciBsb29wIGhlcmUgc28gd2UgY2FuIGJyZWFrIGVhcmx5XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudC5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFllcyBpdCBoYXMgYSBrZXkgcHJvcGVydHksIGxldCdzIGNhcnJ5IG9uIGRvd25cclxuICAgICAgICAgICAgICAgIHByZXYgPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRba2V5c1tpXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByZXZba2V5c1trZXlzLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRWYWx1ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/SetValue.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/object/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/object/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils.Objects\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Clone: __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/utils/object/Clone.js\"),\r\n    Extend: __webpack_require__(/*! ./Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\"),\r\n    GetAdvancedValue: __webpack_require__(/*! ./GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\"),\r\n    GetFastValue: __webpack_require__(/*! ./GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\"),\r\n    GetMinMaxValue: __webpack_require__(/*! ./GetMinMaxValue */ \"./node_modules/phaser/src/utils/object/GetMinMaxValue.js\"),\r\n    GetValue: __webpack_require__(/*! ./GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\"),\r\n    HasAll: __webpack_require__(/*! ./HasAll */ \"./node_modules/phaser/src/utils/object/HasAll.js\"),\r\n    HasAny: __webpack_require__(/*! ./HasAny */ \"./node_modules/phaser/src/utils/object/HasAny.js\"),\r\n    HasValue: __webpack_require__(/*! ./HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\"),\r\n    IsPlainObject: __webpack_require__(/*! ./IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\"),\r\n    Merge: __webpack_require__(/*! ./Merge */ \"./node_modules/phaser/src/utils/object/Merge.js\"),\r\n    MergeRight: __webpack_require__(/*! ./MergeRight */ \"./node_modules/phaser/src/utils/object/MergeRight.js\"),\r\n    Pick: __webpack_require__(/*! ./Pick */ \"./node_modules/phaser/src/utils/object/Pick.js\"),\r\n    SetValue: __webpack_require__(/*! ./SetValue */ \"./node_modules/phaser/src/utils/object/SetValue.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvaW5kZXguanM/ZDEwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxnRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsa0VBQVU7QUFDOUIsc0JBQXNCLG1CQUFPLENBQUMsc0ZBQW9CO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLDhFQUFnQjtBQUMxQyxvQkFBb0IsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDOUMsY0FBYyxtQkFBTyxDQUFDLHNFQUFZO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyxrRUFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMsa0VBQVU7QUFDOUIsY0FBYyxtQkFBTyxDQUFDLHNFQUFZO0FBQ2xDLG1CQUFtQixtQkFBTyxDQUFDLGdGQUFpQjtBQUM1QyxXQUFXLG1CQUFPLENBQUMsZ0VBQVM7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLDhEQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxzRUFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9vYmplY3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5VdGlscy5PYmplY3RzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ2xvbmU6IHJlcXVpcmUoJy4vQ2xvbmUnKSxcclxuICAgIEV4dGVuZDogcmVxdWlyZSgnLi9FeHRlbmQnKSxcclxuICAgIEdldEFkdmFuY2VkVmFsdWU6IHJlcXVpcmUoJy4vR2V0QWR2YW5jZWRWYWx1ZScpLFxyXG4gICAgR2V0RmFzdFZhbHVlOiByZXF1aXJlKCcuL0dldEZhc3RWYWx1ZScpLFxyXG4gICAgR2V0TWluTWF4VmFsdWU6IHJlcXVpcmUoJy4vR2V0TWluTWF4VmFsdWUnKSxcclxuICAgIEdldFZhbHVlOiByZXF1aXJlKCcuL0dldFZhbHVlJyksXHJcbiAgICBIYXNBbGw6IHJlcXVpcmUoJy4vSGFzQWxsJyksXHJcbiAgICBIYXNBbnk6IHJlcXVpcmUoJy4vSGFzQW55JyksXHJcbiAgICBIYXNWYWx1ZTogcmVxdWlyZSgnLi9IYXNWYWx1ZScpLFxyXG4gICAgSXNQbGFpbk9iamVjdDogcmVxdWlyZSgnLi9Jc1BsYWluT2JqZWN0JyksXHJcbiAgICBNZXJnZTogcmVxdWlyZSgnLi9NZXJnZScpLFxyXG4gICAgTWVyZ2VSaWdodDogcmVxdWlyZSgnLi9NZXJnZVJpZ2h0JyksXHJcbiAgICBQaWNrOiByZXF1aXJlKCcuL1BpY2snKSxcclxuICAgIFNldFZhbHVlOiByZXF1aXJlKCcuL1NldFZhbHVlJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/object/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/Format.js":
/*!********************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/Format.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes a string and replaces instances of markers with values in the given array.\r\n * The markers take the form of `%1`, `%2`, etc. I.e.:\r\n *\r\n * `Format(\"The %1 is worth %2 gold\", [ 'Sword', 500 ])`\r\n *\r\n * @function Phaser.Utils.String.Format\r\n * @since 3.0.0\r\n *\r\n * @param {string} string - The string containing the replacement markers.\r\n * @param {array} values - An array containing values that will replace the markers. If no value exists an empty string is inserted instead.\r\n *\r\n * @return {string} The string containing replaced values.\r\n */\r\nvar Format = function (string, values)\r\n{\r\n    return string.replace(/%([0-9]+)/g, function (s, n)\r\n    {\r\n        return values[Number(n) - 1];\r\n    });\r\n};\r\n\r\nmodule.exports = Format;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvRm9ybWF0LmpzPzRkNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvc3RyaW5nL0Zvcm1hdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGEgc3RyaW5nIGFuZCByZXBsYWNlcyBpbnN0YW5jZXMgb2YgbWFya2VycyB3aXRoIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gYXJyYXkuXHJcbiAqIFRoZSBtYXJrZXJzIHRha2UgdGhlIGZvcm0gb2YgYCUxYCwgYCUyYCwgZXRjLiBJLmUuOlxyXG4gKlxyXG4gKiBgRm9ybWF0KFwiVGhlICUxIGlzIHdvcnRoICUyIGdvbGRcIiwgWyAnU3dvcmQnLCA1MDAgXSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuU3RyaW5nLkZvcm1hdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVwbGFjZW1lbnQgbWFya2Vycy5cclxuICogQHBhcmFtIHthcnJheX0gdmFsdWVzIC0gQW4gYXJyYXkgY29udGFpbmluZyB2YWx1ZXMgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIG1hcmtlcnMuIElmIG5vIHZhbHVlIGV4aXN0cyBhbiBlbXB0eSBzdHJpbmcgaXMgaW5zZXJ0ZWQgaW5zdGVhZC5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgcmVwbGFjZWQgdmFsdWVzLlxyXG4gKi9cclxudmFyIEZvcm1hdCA9IGZ1bmN0aW9uIChzdHJpbmcsIHZhbHVlcylcclxue1xyXG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8lKFswLTldKykvZywgZnVuY3Rpb24gKHMsIG4pXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tOdW1iZXIobikgLSAxXTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGb3JtYXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/Format.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/Pad.js":
/*!*****************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/Pad.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes the given string and pads it out, to the length required, using the character\r\n * specified. For example if you need a string to be 6 characters long, you can call:\r\n *\r\n * `pad('bob', 6, '-', 2)`\r\n *\r\n * This would return: `bob---` as it has padded it out to 6 characters, using the `-` on the right.\r\n *\r\n * You can also use it to pad numbers (they are always returned as strings):\r\n * \r\n * `pad(512, 6, '0', 1)`\r\n *\r\n * Would return: `000512` with the string padded to the left.\r\n *\r\n * If you don't specify a direction it'll pad to both sides:\r\n * \r\n * `pad('c64', 7, '*')`\r\n *\r\n * Would return: `**c64**`\r\n *\r\n * @function Phaser.Utils.String.Pad\r\n * @since 3.0.0\r\n *\r\n * @param {string} str - The target string. `toString()` will be called on the string, which means you can also pass in common data types like numbers.\r\n * @param {integer} [len=0] - The number of characters to be added.\r\n * @param {string} [pad=\" \"] - The string to pad it out with (defaults to a space).\r\n * @param {integer} [dir=3] - The direction dir = 1 (left), 2 (right), 3 (both).\r\n * \r\n * @return {string} The padded string.\r\n */\r\nvar Pad = function (str, len, pad, dir)\r\n{\r\n    if (len === undefined) { len = 0; }\r\n    if (pad === undefined) { pad = ' '; }\r\n    if (dir === undefined) { dir = 3; }\r\n\r\n    str = str.toString();\r\n\r\n    var padlen = 0;\r\n\r\n    if (len + 1 >= str.length)\r\n    {\r\n        switch (dir)\r\n        {\r\n            case 1:\r\n                str = new Array(len + 1 - str.length).join(pad) + str;\r\n                break;\r\n\r\n            case 3:\r\n                var right = Math.ceil((padlen = len - str.length) / 2);\r\n                var left = padlen - right;\r\n                str = new Array(left + 1).join(pad) + str + new Array(right + 1).join(pad);\r\n                break;\r\n\r\n            default:\r\n                str = str + new Array(len + 1 - str.length).join(pad);\r\n                break;\r\n        }\r\n    }\r\n\r\n    return str;\r\n};\r\n\r\nmodule.exports = Pad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvUGFkLmpzPzA4ZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFNBQVM7QUFDckMsNEJBQTRCLFdBQVc7QUFDdkMsNEJBQTRCLFNBQVM7O0FBRXJDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvc3RyaW5nL1BhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHBhZHMgaXQgb3V0LCB0byB0aGUgbGVuZ3RoIHJlcXVpcmVkLCB1c2luZyB0aGUgY2hhcmFjdGVyXHJcbiAqIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUgaWYgeW91IG5lZWQgYSBzdHJpbmcgdG8gYmUgNiBjaGFyYWN0ZXJzIGxvbmcsIHlvdSBjYW4gY2FsbDpcclxuICpcclxuICogYHBhZCgnYm9iJywgNiwgJy0nLCAyKWBcclxuICpcclxuICogVGhpcyB3b3VsZCByZXR1cm46IGBib2ItLS1gIGFzIGl0IGhhcyBwYWRkZWQgaXQgb3V0IHRvIDYgY2hhcmFjdGVycywgdXNpbmcgdGhlIGAtYCBvbiB0aGUgcmlnaHQuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gcGFkIG51bWJlcnMgKHRoZXkgYXJlIGFsd2F5cyByZXR1cm5lZCBhcyBzdHJpbmdzKTpcclxuICogXHJcbiAqIGBwYWQoNTEyLCA2LCAnMCcsIDEpYFxyXG4gKlxyXG4gKiBXb3VsZCByZXR1cm46IGAwMDA1MTJgIHdpdGggdGhlIHN0cmluZyBwYWRkZWQgdG8gdGhlIGxlZnQuXHJcbiAqXHJcbiAqIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgZGlyZWN0aW9uIGl0J2xsIHBhZCB0byBib3RoIHNpZGVzOlxyXG4gKiBcclxuICogYHBhZCgnYzY0JywgNywgJyonKWBcclxuICpcclxuICogV291bGQgcmV0dXJuOiBgKipjNjQqKmBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5TdHJpbmcuUGFkXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHRhcmdldCBzdHJpbmcuIGB0b1N0cmluZygpYCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgc3RyaW5nLCB3aGljaCBtZWFucyB5b3UgY2FuIGFsc28gcGFzcyBpbiBjb21tb24gZGF0YSB0eXBlcyBsaWtlIG51bWJlcnMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2xlbj0wXSAtIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBhZGRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtwYWQ9XCIgXCJdIC0gVGhlIHN0cmluZyB0byBwYWQgaXQgb3V0IHdpdGggKGRlZmF1bHRzIHRvIGEgc3BhY2UpLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXI9M10gLSBUaGUgZGlyZWN0aW9uIGRpciA9IDEgKGxlZnQpLCAyIChyaWdodCksIDMgKGJvdGgpLlxyXG4gKiBcclxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGFkZGVkIHN0cmluZy5cclxuICovXHJcbnZhciBQYWQgPSBmdW5jdGlvbiAoc3RyLCBsZW4sIHBhZCwgZGlyKVxyXG57XHJcbiAgICBpZiAobGVuID09PSB1bmRlZmluZWQpIHsgbGVuID0gMDsgfVxyXG4gICAgaWYgKHBhZCA9PT0gdW5kZWZpbmVkKSB7IHBhZCA9ICcgJzsgfVxyXG4gICAgaWYgKGRpciA9PT0gdW5kZWZpbmVkKSB7IGRpciA9IDM7IH1cclxuXHJcbiAgICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcclxuXHJcbiAgICB2YXIgcGFkbGVuID0gMDtcclxuXHJcbiAgICBpZiAobGVuICsgMSA+PSBzdHIubGVuZ3RoKVxyXG4gICAge1xyXG4gICAgICAgIHN3aXRjaCAoZGlyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgc3RyID0gbmV3IEFycmF5KGxlbiArIDEgLSBzdHIubGVuZ3RoKS5qb2luKHBhZCkgKyBzdHI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHZhciByaWdodCA9IE1hdGguY2VpbCgocGFkbGVuID0gbGVuIC0gc3RyLmxlbmd0aCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gcGFkbGVuIC0gcmlnaHQ7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBuZXcgQXJyYXkobGVmdCArIDEpLmpvaW4ocGFkKSArIHN0ciArIG5ldyBBcnJheShyaWdodCArIDEpLmpvaW4ocGFkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ciArIG5ldyBBcnJheShsZW4gKyAxIC0gc3RyLmxlbmd0aCkuam9pbihwYWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/Pad.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/Reverse.js":
/*!*********************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/Reverse.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes the given string and reverses it, returning the reversed string.\r\n * For example if given the string `Atari 520ST` it would return `TS025 iratA`.\r\n *\r\n * @function Phaser.Utils.String.Reverse\r\n * @since 3.0.0\r\n *\r\n * @param {string} string - The string to be reversed.\r\n *\r\n * @return {string} The reversed string.\r\n */\r\nvar Reverse = function (string)\r\n{\r\n    return string.split('').reverse().join('');\r\n};\r\n\r\nmodule.exports = Reverse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvUmV2ZXJzZS5qcz9mNDQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvc3RyaW5nL1JldmVyc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXZlcnNlcyBpdCwgcmV0dXJuaW5nIHRoZSByZXZlcnNlZCBzdHJpbmcuXHJcbiAqIEZvciBleGFtcGxlIGlmIGdpdmVuIHRoZSBzdHJpbmcgYEF0YXJpIDUyMFNUYCBpdCB3b3VsZCByZXR1cm4gYFRTMDI1IGlyYXRBYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5VdGlscy5TdHJpbmcuUmV2ZXJzZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gYmUgcmV2ZXJzZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHJldmVyc2VkIHN0cmluZy5cclxuICovXHJcbnZhciBSZXZlcnNlID0gZnVuY3Rpb24gKHN0cmluZylcclxue1xyXG4gICAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZXZlcnNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/Reverse.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/UUID.js":
/*!******************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/UUID.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates and returns an RFC4122 version 4 compliant UUID.\r\n * \r\n * The string is in the form: `xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx` where each `x` is replaced with a random\r\n * hexadecimal digit from 0 to f, and `y` is replaced with a random hexadecimal digit from 8 to b.\r\n *\r\n * @function Phaser.Utils.String.UUID\r\n * @since 3.12.0\r\n *\r\n * @return {string} The UUID string.\r\n */\r\nvar UUID = function ()\r\n{\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c)\r\n    {\r\n        var r = Math.random() * 16 | 0;\r\n        var v = (c === 'x') ? r : (r & 0x3 | 0x8);\r\n\r\n        return v.toString(16);\r\n    });\r\n};\r\n\r\nmodule.exports = UUID;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvVVVJRC5qcz9hMmY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvVVVJRC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYW4gUkZDNDEyMiB2ZXJzaW9uIDQgY29tcGxpYW50IFVVSUQuXHJcbiAqIFxyXG4gKiBUaGUgc3RyaW5nIGlzIGluIHRoZSBmb3JtOiBgeHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4YCB3aGVyZSBlYWNoIGB4YCBpcyByZXBsYWNlZCB3aXRoIGEgcmFuZG9tXHJcbiAqIGhleGFkZWNpbWFsIGRpZ2l0IGZyb20gMCB0byBmLCBhbmQgYHlgIGlzIHJlcGxhY2VkIHdpdGggYSByYW5kb20gaGV4YWRlY2ltYWwgZGlnaXQgZnJvbSA4IHRvIGIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuVXRpbHMuU3RyaW5nLlVVSURcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVUlEIHN0cmluZy5cclxuICovXHJcbnZhciBVVUlEID0gZnVuY3Rpb24gKClcclxue1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwO1xyXG4gICAgICAgIHZhciB2ID0gKGMgPT09ICd4JykgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVVVJRDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/UUID.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/UppercaseFirst.js":
/*!****************************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/UppercaseFirst.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Capitalizes the first letter of a string if there is one.\r\n * @example\r\n * UppercaseFirst('abc');\r\n * // returns 'Abc'\r\n * @example\r\n * UppercaseFirst('the happy family');\r\n * // returns 'The happy family'\r\n * @example\r\n * UppercaseFirst('');\r\n * // returns ''\r\n *\r\n * @function Phaser.Utils.String.UppercaseFirst\r\n * @since 3.0.0\r\n *\r\n * @param {string} str - The string to capitalize.\r\n *\r\n * @return {string} A new string, same as the first, but with the first letter capitalized.\r\n */\r\nvar UppercaseFirst = function (str)\r\n{\r\n    return str && str[0].toUpperCase() + str.slice(1);\r\n};\r\n\r\nmodule.exports = UppercaseFirst;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvVXBwZXJjYXNlRmlyc3QuanM/ZDVmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvVXBwZXJjYXNlRmlyc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nIGlmIHRoZXJlIGlzIG9uZS5cclxuICogQGV4YW1wbGVcclxuICogVXBwZXJjYXNlRmlyc3QoJ2FiYycpO1xyXG4gKiAvLyByZXR1cm5zICdBYmMnXHJcbiAqIEBleGFtcGxlXHJcbiAqIFVwcGVyY2FzZUZpcnN0KCd0aGUgaGFwcHkgZmFtaWx5Jyk7XHJcbiAqIC8vIHJldHVybnMgJ1RoZSBoYXBweSBmYW1pbHknXHJcbiAqIEBleGFtcGxlXHJcbiAqIFVwcGVyY2FzZUZpcnN0KCcnKTtcclxuICogLy8gcmV0dXJucyAnJ1xyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLlV0aWxzLlN0cmluZy5VcHBlcmNhc2VGaXJzdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBBIG5ldyBzdHJpbmcsIHNhbWUgYXMgdGhlIGZpcnN0LCBidXQgd2l0aCB0aGUgZmlyc3QgbGV0dGVyIGNhcGl0YWxpemVkLlxyXG4gKi9cclxudmFyIFVwcGVyY2FzZUZpcnN0ID0gZnVuY3Rpb24gKHN0cilcclxue1xyXG4gICAgcmV0dXJuIHN0ciAmJiBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVXBwZXJjYXNlRmlyc3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/UppercaseFirst.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser/src/utils/string/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/phaser/src/utils/string/index.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/**\r\n * @author       Richard Davey <rich@photonstorm.com>\r\n * @copyright    2019 Photon Storm Ltd.\r\n * @license      {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Utils.String\r\n */\r\n\r\nmodule.exports = {\r\n\r\n    Format: __webpack_require__(/*! ./Format */ \"./node_modules/phaser/src/utils/string/Format.js\"),\r\n    Pad: __webpack_require__(/*! ./Pad */ \"./node_modules/phaser/src/utils/string/Pad.js\"),\r\n    Reverse: __webpack_require__(/*! ./Reverse */ \"./node_modules/phaser/src/utils/string/Reverse.js\"),\r\n    UppercaseFirst: __webpack_require__(/*! ./UppercaseFirst */ \"./node_modules/phaser/src/utils/string/UppercaseFirst.js\"),\r\n    UUID: __webpack_require__(/*! ./UUID */ \"./node_modules/phaser/src/utils/string/UUID.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy91dGlscy9zdHJpbmcvaW5kZXguanM/ZWQ0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxrRUFBVTtBQUM5QixTQUFTLG1CQUFPLENBQUMsNERBQU87QUFDeEIsYUFBYSxtQkFBTyxDQUFDLG9FQUFXO0FBQ2hDLG9CQUFvQixtQkFBTyxDQUFDLGtGQUFrQjtBQUM5QyxVQUFVLG1CQUFPLENBQUMsOERBQVE7O0FBRTFCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvdXRpbHMvc3RyaW5nL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuVXRpbHMuU3RyaW5nXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRm9ybWF0OiByZXF1aXJlKCcuL0Zvcm1hdCcpLFxyXG4gICAgUGFkOiByZXF1aXJlKCcuL1BhZCcpLFxyXG4gICAgUmV2ZXJzZTogcmVxdWlyZSgnLi9SZXZlcnNlJyksXHJcbiAgICBVcHBlcmNhc2VGaXJzdDogcmVxdWlyZSgnLi9VcHBlcmNhc2VGaXJzdCcpLFxyXG4gICAgVVVJRDogcmVxdWlyZSgnLi9VVUlEJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/utils/string/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/behaviors/fade/Fade.js":
/*!*************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/behaviors/fade/Fade.js ***!
  \*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_tween_TweenBase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/tween/TweenBase.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/tween/TweenBase.js\");\n\r\n\r\nconst GetValue = Phaser.Utils.Objects.GetValue;\r\nconst GetAdvancedValue = Phaser.Utils.Objects.GetAdvancedValue;\r\n\r\nclass Fade extends _utils_tween_TweenBase_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n    constructor(gameObject, config) {\r\n        super(gameObject);\r\n        this.gameObject = gameObject;\r\n\r\n        this.alphaStart = undefined;\r\n        this.alphaEnd = undefined;\r\n        this.resetFromJSON(config);\r\n    }\r\n\r\n    resetFromJSON(o) {\r\n        this.setMode(GetValue(o, 'mode', 0));\r\n        this.setAlphaRange(\r\n            GetAdvancedValue(o, 'start', this.gameObject.alpha),\r\n            GetAdvancedValue(o, 'end', 0)\r\n        );\r\n        this.setDelay(GetAdvancedValue(o, 'delay', 0));\r\n        this.setDuration(GetAdvancedValue(o, 'duration', 1000));\r\n        return this;\r\n    }\r\n\r\n    toJSON() {\r\n        return {\r\n            mode: this.mode,\r\n            start: this.alphaStart,\r\n            end: this.alphaEnd,\r\n            delay: this.delay,\r\n            duration: this.duration\r\n        };\r\n    }\r\n\r\n    shutdown() {\r\n        super.shutdown();\r\n        this.gameObject = undefined;\r\n        return this;\r\n    }\r\n\r\n    setMode(m) {\r\n        if (typeof (m) === 'string') {\r\n            m = MODE[m];\r\n        }\r\n        this.mode = m;\r\n        return this;\r\n    }\r\n\r\n    setAlphaRange(start, end) {\r\n        this.alphaStart = start;\r\n        this.alphaEnd = end;\r\n        return this;\r\n    }\r\n\r\n    setDelay(time) {\r\n        this.delay = time;\r\n        return this;\r\n    }\r\n\r\n    setDuration(time) {\r\n        this.duration = time;\r\n        return this;\r\n    }\r\n\r\n    start() {\r\n        if (this.isRunning) {\r\n            return this;\r\n        }\r\n\r\n        this.gameObject.setAlpha(this.alphaStart);\r\n        super.start({\r\n            targets: this.gameObject,\r\n            alpha: this.alphaEnd,\r\n\r\n            delay: this.delay,\r\n            duration: this.duration,\r\n            ease: 'Linear',\r\n            yoyo: (this.mode == 2),\r\n            repeat: ((this.mode == 2) ? -1 : 0)\r\n        });\r\n        return this;\r\n    }\r\n\r\n    complete() {\r\n        super.complete();\r\n        if (this.mode === 1) {\r\n            this.gameObject.destroy();\r\n        }\r\n        return this;\r\n    }\r\n\r\n}\r\n\r\nconst MODE = {\r\n    stop: 0,\r\n    destroy: 1,\r\n    yoyo: 2\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (Fade);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL2JlaGF2aW9ycy9mYWRlL0ZhZGUuanM/YmQ4NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQXVEOztBQUV2RDtBQUNBOztBQUVBLG1CQUFtQixpRUFBUztBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSxtRUFBSSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIzLXJleC1wbHVnaW5zL3BsdWdpbnMvYmVoYXZpb3JzL2ZhZGUvRmFkZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUd2VlbkJhc2UgZnJvbSAnLi4vLi4vdXRpbHMvdHdlZW4vVHdlZW5CYXNlLmpzJztcclxuXHJcbmNvbnN0IEdldFZhbHVlID0gUGhhc2VyLlV0aWxzLk9iamVjdHMuR2V0VmFsdWU7XHJcbmNvbnN0IEdldEFkdmFuY2VkVmFsdWUgPSBQaGFzZXIuVXRpbHMuT2JqZWN0cy5HZXRBZHZhbmNlZFZhbHVlO1xyXG5cclxuY2xhc3MgRmFkZSBleHRlbmRzIFR3ZWVuQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihnYW1lT2JqZWN0LCBjb25maWcpIHtcclxuICAgICAgICBzdXBlcihnYW1lT2JqZWN0KTtcclxuICAgICAgICB0aGlzLmdhbWVPYmplY3QgPSBnYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICB0aGlzLmFscGhhU3RhcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5hbHBoYUVuZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnJlc2V0RnJvbUpTT04oY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEZyb21KU09OKG8pIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoR2V0VmFsdWUobywgJ21vZGUnLCAwKSk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYVJhbmdlKFxyXG4gICAgICAgICAgICBHZXRBZHZhbmNlZFZhbHVlKG8sICdzdGFydCcsIHRoaXMuZ2FtZU9iamVjdC5hbHBoYSksXHJcbiAgICAgICAgICAgIEdldEFkdmFuY2VkVmFsdWUobywgJ2VuZCcsIDApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldERlbGF5KEdldEFkdmFuY2VkVmFsdWUobywgJ2RlbGF5JywgMCkpO1xyXG4gICAgICAgIHRoaXMuc2V0RHVyYXRpb24oR2V0QWR2YW5jZWRWYWx1ZShvLCAnZHVyYXRpb24nLCAxMDAwKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcclxuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuYWxwaGFTdGFydCxcclxuICAgICAgICAgICAgZW5kOiB0aGlzLmFscGhhRW5kLFxyXG4gICAgICAgICAgICBkZWxheTogdGhpcy5kZWxheSxcclxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb25cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHNodXRkb3duKCkge1xyXG4gICAgICAgIHN1cGVyLnNodXRkb3duKCk7XHJcbiAgICAgICAgdGhpcy5nYW1lT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1vZGUobSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKG0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBtID0gTU9ERVttXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2RlID0gbTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRBbHBoYVJhbmdlKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICB0aGlzLmFscGhhU3RhcnQgPSBzdGFydDtcclxuICAgICAgICB0aGlzLmFscGhhRW5kID0gZW5kO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERlbGF5KHRpbWUpIHtcclxuICAgICAgICB0aGlzLmRlbGF5ID0gdGltZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXREdXJhdGlvbih0aW1lKSB7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHRpbWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lT2JqZWN0LnNldEFscGhhKHRoaXMuYWxwaGFTdGFydCk7XHJcbiAgICAgICAgc3VwZXIuc3RhcnQoe1xyXG4gICAgICAgICAgICB0YXJnZXRzOiB0aGlzLmdhbWVPYmplY3QsXHJcbiAgICAgICAgICAgIGFscGhhOiB0aGlzLmFscGhhRW5kLFxyXG5cclxuICAgICAgICAgICAgZGVsYXk6IHRoaXMuZGVsYXksXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxyXG4gICAgICAgICAgICBlYXNlOiAnTGluZWFyJyxcclxuICAgICAgICAgICAgeW95bzogKHRoaXMubW9kZSA9PSAyKSxcclxuICAgICAgICAgICAgcmVwZWF0OiAoKHRoaXMubW9kZSA9PSAyKSA/IC0xIDogMClcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0ZSgpIHtcclxuICAgICAgICBzdXBlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lT2JqZWN0LmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5jb25zdCBNT0RFID0ge1xyXG4gICAgc3RvcDogMCxcclxuICAgIGRlc3Ryb3k6IDEsXHJcbiAgICB5b3lvOiAyXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZhZGU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/behaviors/fade/Fade.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/fade-out-destroy.js":
/*!**********************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/fade-out-destroy.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _fade_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fade.js */ \"./node_modules/phaser3-rex-plugins/plugins/fade.js\");\n\r\n\r\nvar FadeOutDestroy = function (gameObject, duration, destroyMode, fade) {\r\n    if (destroyMode instanceof _fade_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\r\n        fade = destroyMode;\r\n        destroyMode = undefined;\r\n    }\r\n\r\n    if (destroyMode === undefined) {\r\n        destroyMode = true;\r\n    }\r\n\r\n    defaultConfig.mode = (destroyMode) ? 1 : 0;\r\n    defaultConfig.end = 0;\r\n    defaultConfig.duration = duration;\r\n\r\n    if (fade === undefined) {\r\n        fade = new _fade_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](gameObject, defaultConfig);\r\n    } else {\r\n        fade.resetFromJSON(defaultConfig);\r\n    }\r\n    fade.restart();\r\n\r\n    return fade;\r\n};\r\n\r\nvar defaultConfig = {}; // reuse this config\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (FadeOutDestroy);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL2ZhZGUtb3V0LWRlc3Ryb3kuanM/NWZmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQTZCOztBQUU3QjtBQUNBLCtCQUErQixnREFBSTtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixnREFBSTtBQUN2QixLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUVSLDZFQUFjIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlcjMtcmV4LXBsdWdpbnMvcGx1Z2lucy9mYWRlLW91dC1kZXN0cm95LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZhZGUgZnJvbSAnLi9mYWRlLmpzJztcclxuXHJcbnZhciBGYWRlT3V0RGVzdHJveSA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBkdXJhdGlvbiwgZGVzdHJveU1vZGUsIGZhZGUpIHtcclxuICAgIGlmIChkZXN0cm95TW9kZSBpbnN0YW5jZW9mIEZhZGUpIHtcclxuICAgICAgICBmYWRlID0gZGVzdHJveU1vZGU7XHJcbiAgICAgICAgZGVzdHJveU1vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlc3Ryb3lNb2RlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkZXN0cm95TW9kZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdENvbmZpZy5tb2RlID0gKGRlc3Ryb3lNb2RlKSA/IDEgOiAwO1xyXG4gICAgZGVmYXVsdENvbmZpZy5lbmQgPSAwO1xyXG4gICAgZGVmYXVsdENvbmZpZy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG5cclxuICAgIGlmIChmYWRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmYWRlID0gbmV3IEZhZGUoZ2FtZU9iamVjdCwgZGVmYXVsdENvbmZpZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhZGUucmVzZXRGcm9tSlNPTihkZWZhdWx0Q29uZmlnKTtcclxuICAgIH1cclxuICAgIGZhZGUucmVzdGFydCgpO1xyXG5cclxuICAgIHJldHVybiBmYWRlO1xyXG59O1xyXG5cclxudmFyIGRlZmF1bHRDb25maWcgPSB7fTsgLy8gcmV1c2UgdGhpcyBjb25maWdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZhZGVPdXREZXN0cm95OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/fade-out-destroy.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/fade-plugin.js":
/*!*****************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/fade-plugin.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _fade_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fade.js */ \"./node_modules/phaser3-rex-plugins/plugins/fade.js\");\n/* harmony import */ var _fade_out_destroy_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fade-out-destroy.js */ \"./node_modules/phaser3-rex-plugins/plugins/fade-out-destroy.js\");\n\r\n\r\n\r\nclass FadePlugin extends Phaser.Plugins.BasePlugin {\r\n\r\n    constructor(pluginManager) {\r\n        super(pluginManager);\r\n    }\r\n\r\n    start() {\r\n        var eventEmitter = this.game.events;\r\n        eventEmitter.on('destroy', this.destroy, this);\r\n    }\r\n\r\n    add(gameObject, config) {\r\n        return new _fade_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](gameObject, config);\r\n    }\r\n}\r\n\r\n// mixin\r\nvar methods = {\r\n    fadeOutDestroy: _fade_out_destroy_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\r\n};\r\nObject.assign(\r\n    FadePlugin.prototype,\r\n    methods\r\n);\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (FadePlugin);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL2ZhZGUtcGx1Z2luLmpzP2E0NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQTZCO0FBQ3NCOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsZ0RBQUk7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLDREQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUseUVBQVUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL2ZhZGUtcGx1Z2luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZhZGUgZnJvbSAnLi9mYWRlLmpzJztcclxuaW1wb3J0IEZhZGVPdXREZXN0cm95IGZyb20gJy4vZmFkZS1vdXQtZGVzdHJveS5qcyc7XHJcblxyXG5jbGFzcyBGYWRlUGx1Z2luIGV4dGVuZHMgUGhhc2VyLlBsdWdpbnMuQmFzZVBsdWdpbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGx1Z2luTWFuYWdlcikge1xyXG4gICAgICAgIHN1cGVyKHBsdWdpbk1hbmFnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLmdhbWUuZXZlbnRzO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbignZGVzdHJveScsIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkKGdhbWVPYmplY3QsIGNvbmZpZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmFkZShnYW1lT2JqZWN0LCBjb25maWcpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBtaXhpblxyXG52YXIgbWV0aG9kcyA9IHtcclxuICAgIGZhZGVPdXREZXN0cm95OiBGYWRlT3V0RGVzdHJveVxyXG59O1xyXG5PYmplY3QuYXNzaWduKFxyXG4gICAgRmFkZVBsdWdpbi5wcm90b3R5cGUsXHJcbiAgICBtZXRob2RzXHJcbik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGYWRlUGx1Z2luOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/fade-plugin.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/fade.js":
/*!**********************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/fade.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _behaviors_fade_Fade_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./behaviors/fade/Fade.js */ \"./node_modules/phaser3-rex-plugins/plugins/behaviors/fade/Fade.js\");\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (_behaviors_fade_Fade_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL2ZhZGUuanM/MWVhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQTRDO0FBQzdCLDhIQUFJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlcjMtcmV4LXBsdWdpbnMvcGx1Z2lucy9mYWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZhZGUgZnJvbSAnLi9iZWhhdmlvcnMvZmFkZS9GYWRlLmpzJztcclxuZXhwb3J0IGRlZmF1bHQgRmFkZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/fade.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/utils/eventemitter/EventEmitterMethods.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/utils/eventemitter/EventEmitterMethods.js ***!
  \********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\r\n    setEventEmitter(eventEmitter, EventEmitterClass) {\r\n        if (EventEmitterClass === undefined) {\r\n            EventEmitterClass = Phaser.Events.EventEmitter; // Use built-in EventEmitter class by default\r\n        }\r\n        this._privateEE = (eventEmitter === undefined);\r\n        this._eventEmitter = (this._privateEE) ? (new EventEmitterClass()) : eventEmitter;\r\n        return this;\r\n    },\r\n\r\n    destroyEventEmitter() {\r\n        if (this._eventEmitter && this._privateEE) {\r\n            this._eventEmitter.shutdown();\r\n        }\r\n        return this;\r\n    },\r\n\r\n    getEventEmitter() {\r\n        return this._eventEmitter;\r\n    },\r\n\r\n    on: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.on.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    once: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.once.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    off: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.off.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    emit: function (event) {\r\n        if (this._eventEmitter && event) {\r\n            this._eventEmitter.emit.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    addListener: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.addListener.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    removeListener: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.removeListener.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    removeAllListeners: function () {\r\n        if (this._eventEmitter) {\r\n            this._eventEmitter.removeAllListeners.apply(this._eventEmitter, arguments);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    listenerCount: function () {\r\n        if (this._eventEmitter) {\r\n            return this._eventEmitter.listenerCount.apply(this._eventEmitter, arguments);\r\n        }\r\n        return 0;\r\n    },\r\n\r\n    listeners: function () {\r\n        if (this._eventEmitter) {\r\n            return this._eventEmitter.listeners.apply(this._eventEmitter, arguments);\r\n        }\r\n        return [];\r\n    }\r\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL2V2ZW50ZW1pdHRlci9FdmVudEVtaXR0ZXJNZXRob2RzLmpzPzU2ZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL2V2ZW50ZW1pdHRlci9FdmVudEVtaXR0ZXJNZXRob2RzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgc2V0RXZlbnRFbWl0dGVyKGV2ZW50RW1pdHRlciwgRXZlbnRFbWl0dGVyQ2xhc3MpIHtcclxuICAgICAgICBpZiAoRXZlbnRFbWl0dGVyQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBFdmVudEVtaXR0ZXJDbGFzcyA9IFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyOyAvLyBVc2UgYnVpbHQtaW4gRXZlbnRFbWl0dGVyIGNsYXNzIGJ5IGRlZmF1bHRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcHJpdmF0ZUVFID0gKGV2ZW50RW1pdHRlciA9PT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIgPSAodGhpcy5fcHJpdmF0ZUVFKSA/IChuZXcgRXZlbnRFbWl0dGVyQ2xhc3MoKSkgOiBldmVudEVtaXR0ZXI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlc3Ryb3lFdmVudEVtaXR0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50RW1pdHRlciAmJiB0aGlzLl9wcml2YXRlRUUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyLnNodXRkb3duKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFdmVudEVtaXR0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50RW1pdHRlcjtcclxuICAgIH0sXHJcblxyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50RW1pdHRlci5vbi5hcHBseSh0aGlzLl9ldmVudEVtaXR0ZXIsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbmNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50RW1pdHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIub25jZS5hcHBseSh0aGlzLl9ldmVudEVtaXR0ZXIsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBvZmY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50RW1pdHRlci5vZmYuYXBwbHkodGhpcy5fZXZlbnRFbWl0dGVyLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgZW1pdDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50RW1pdHRlciAmJiBldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIuZW1pdC5hcHBseSh0aGlzLl9ldmVudEVtaXR0ZXIsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZGRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9ldmVudEVtaXR0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyLmFkZExpc3RlbmVyLmFwcGx5KHRoaXMuX2V2ZW50RW1pdHRlciwgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50RW1pdHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIuYXBwbHkodGhpcy5fZXZlbnRFbWl0dGVyLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50RW1pdHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMuX2V2ZW50RW1pdHRlciwgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIGxpc3RlbmVyQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudC5hcHBseSh0aGlzLl9ldmVudEVtaXR0ZXIsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBsaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudEVtaXR0ZXIubGlzdGVuZXJzLmFwcGx5KHRoaXMuX2V2ZW50RW1pdHRlciwgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/utils/eventemitter/EventEmitterMethods.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/utils/system/GetSceneObject.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/utils/system/GetSceneObject.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _IsSceneObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IsSceneObject.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/system/IsSceneObject.js\");\n\r\n\r\nvar GetSceneObject = function (object) {\r\n    if (Object(_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) { // object = scene\r\n        return object;\r\n    } else if (object.scene && Object(_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object.scene)) { // object = game object\r\n        return object.scene;\r\n    } else if (object.parent && object.parent.scene && Object(_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object.parent.scene)) { // parent = bob object\r\n        return object.parent.scene;\r\n    }\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (GetSceneObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3N5c3RlbS9HZXRTY2VuZU9iamVjdC5qcz9kNzUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBK0M7O0FBRS9DO0FBQ0EsUUFBUSxpRUFBYSxXQUFXO0FBQ2hDO0FBQ0EsS0FBSywwQkFBMEIsaUVBQWEsaUJBQWlCO0FBQzdEO0FBQ0EsS0FBSyxrREFBa0QsaUVBQWEsd0JBQXdCO0FBQzVGO0FBQ0E7QUFDQTs7QUFFZSw2RUFBYyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIzLXJleC1wbHVnaW5zL3BsdWdpbnMvdXRpbHMvc3lzdGVtL0dldFNjZW5lT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElzU2NlbmVPYmplY3QgZnJvbSAnLi9Jc1NjZW5lT2JqZWN0LmpzJztcclxuXHJcbnZhciBHZXRTY2VuZU9iamVjdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgIGlmIChJc1NjZW5lT2JqZWN0KG9iamVjdCkpIHsgLy8gb2JqZWN0ID0gc2NlbmVcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfSBlbHNlIGlmIChvYmplY3Quc2NlbmUgJiYgSXNTY2VuZU9iamVjdChvYmplY3Quc2NlbmUpKSB7IC8vIG9iamVjdCA9IGdhbWUgb2JqZWN0XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdC5zY2VuZTtcclxuICAgIH0gZWxzZSBpZiAob2JqZWN0LnBhcmVudCAmJiBvYmplY3QucGFyZW50LnNjZW5lICYmIElzU2NlbmVPYmplY3Qob2JqZWN0LnBhcmVudC5zY2VuZSkpIHsgLy8gcGFyZW50ID0gYm9iIG9iamVjdFxyXG4gICAgICAgIHJldHVybiBvYmplY3QucGFyZW50LnNjZW5lO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZXRTY2VuZU9iamVjdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/utils/system/GetSceneObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/utils/system/IsGameObject.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/utils/system/IsGameObject.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nconst GameObjectClass = Phaser.GameObjects.GameObject;\r\nvar IsGameObject = function (object) {\r\n    return (object instanceof GameObjectClass);\r\n}\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (IsGameObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3N5c3RlbS9Jc0dhbWVPYmplY3QuanM/YjY0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsMkVBQVkiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3N5c3RlbS9Jc0dhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBHYW1lT2JqZWN0Q2xhc3MgPSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdDtcclxudmFyIElzR2FtZU9iamVjdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgIHJldHVybiAob2JqZWN0IGluc3RhbmNlb2YgR2FtZU9iamVjdENsYXNzKTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBJc0dhbWVPYmplY3Q7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/utils/system/IsGameObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/utils/system/IsSceneObject.js":
/*!********************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/utils/system/IsSceneObject.js ***!
  \********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nconst SceneClass = Phaser.Scene;\r\nvar IsSceneObject = function (object) {\r\n    return (object instanceof SceneClass);\r\n}\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (IsSceneObject);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3N5c3RlbS9Jc1NjZW5lT2JqZWN0LmpzPzcxOWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLDRFQUFhIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlcjMtcmV4LXBsdWdpbnMvcGx1Z2lucy91dGlscy9zeXN0ZW0vSXNTY2VuZU9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNjZW5lQ2xhc3MgPSBQaGFzZXIuU2NlbmU7XHJcbnZhciBJc1NjZW5lT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIChvYmplY3QgaW5zdGFuY2VvZiBTY2VuZUNsYXNzKTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBJc1NjZW5lT2JqZWN0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/utils/system/IsSceneObject.js\n");
 
/***/ }),
 
/***/ "./node_modules/phaser3-rex-plugins/plugins/utils/tween/TweenBase.js":
/*!***************************************************************************!*\
  !*** ./node_modules/phaser3-rex-plugins/plugins/utils/tween/TweenBase.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _eventemitter_EventEmitterMethods_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eventemitter/EventEmitterMethods.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/eventemitter/EventEmitterMethods.js\");\n/* harmony import */ var _system_GetSceneObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../system/GetSceneObject.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/system/GetSceneObject.js\");\n/* harmony import */ var _system_IsGameObject_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../system/IsGameObject.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/system/IsGameObject.js\");\n/* harmony import */ var _system_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../system/IsSceneObject.js */ \"./node_modules/phaser3-rex-plugins/plugins/utils/system/IsSceneObject.js\");\n\r\n\r\n\r\n\r\n\r\nconst GetValue = Phaser.Utils.Objects.GetValue;\r\n\r\nclass TweenBase {\r\n    constructor(parent, config) {\r\n        this.parent = parent;\r\n        this.scene = Object(_system_GetSceneObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(parent);\r\n\r\n        /*\r\n        eventEmitter:\r\n        - false(default value): Use tween's event emitter.\r\n        - true: Create a private event emitter.\r\n        */\r\n        var eventEmitter = GetValue(config, 'eventEmitter', false);\r\n        if (eventEmitter === true) {\r\n            eventEmitter = undefined;\r\n        }\r\n        this.setEventEmitter(eventEmitter);\r\n        this.boot();\r\n    }\r\n\r\n    boot() {\r\n        if (Object(_system_IsGameObject_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this.parent)) { // Parent is Game Object\r\n            if (this.parent.once) { // oops, bob object does not have event emitter\r\n                this.parent.on('destroy', this.destroy, this);\r\n            }\r\n        } else if (Object(_system_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(this.parent)) { // Parent is Scene Object\r\n            this.parent.events.once('shutdown', this.destroy, this);\r\n        } else {\r\n            // ??\r\n        }\r\n    }\r\n\r\n    shutdown() {\r\n        this.stop();\r\n        if (Object(_system_IsSceneObject_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(this.parent)) {  // Parent is Scene Object\r\n            this.parent.events.off('shutdown', this.destroy, this);\r\n        }\r\n        this.destroyEventEmitter();\r\n        this.parent = undefined;\r\n        this.scene = undefined;\r\n        return this;\r\n    }\r\n\r\n\r\n    destroy() {\r\n        this.shutdown();\r\n        return this;\r\n    }\r\n\r\n    start(tweenConfig) {\r\n        if (this.isRunning) {\r\n            return this;\r\n        }\r\n\r\n        this.tween = this.scene.tweens.add(tweenConfig)\r\n            .on('complete', this.complete, this);\r\n        if (this.getEventEmitter() === false) {\r\n            this.setEventEmitter(this.tween);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    restart() {\r\n        this.stop().start();\r\n        return this;\r\n    }\r\n\r\n    stop() {\r\n        if (!this.tween) {\r\n            return this;\r\n        }\r\n\r\n        if (this.getEventEmitter() === this.tween) {\r\n            this.setEventEmitter(false);\r\n        }\r\n        this.tween.remove();\r\n        this.tween = undefined;\r\n        return this;\r\n    }\r\n\r\n    complete() {\r\n        this.stop();\r\n        if (this.getEventEmitter()) {\r\n            this.emit('complete');\r\n        }\r\n        return this;\r\n    }\r\n\r\n    get isRunning() {\r\n        return (!!this.tween);\r\n    }\r\n}\r\n\r\nObject.assign(\r\n    TweenBase.prototype,\r\n    _eventemitter_EventEmitterMethods_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\r\n);\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (TweenBase);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3R3ZWVuL1R3ZWVuQmFzZS5qcz8wYTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBeUU7QUFDaEI7QUFDSjtBQUNFOztBQUV2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIseUVBQWM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksdUVBQVksZ0JBQWdCO0FBQ3hDLG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsU0FBUyxVQUFVLHdFQUFhLGdCQUFnQjtBQUNoRDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksd0VBQWEsZ0JBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSw0RUFBbUI7QUFDdkI7O0FBRWUsd0VBQVMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyMy1yZXgtcGx1Z2lucy9wbHVnaW5zL3V0aWxzL3R3ZWVuL1R3ZWVuQmFzZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXJNZXRob2RzIGZyb20gJy4uL2V2ZW50ZW1pdHRlci9FdmVudEVtaXR0ZXJNZXRob2RzLmpzJztcclxuaW1wb3J0IEdldFNjZW5lT2JqZWN0IGZyb20gJy4uL3N5c3RlbS9HZXRTY2VuZU9iamVjdC5qcyc7XHJcbmltcG9ydCBJc0dhbWVPYmplY3QgZnJvbSAnLi4vc3lzdGVtL0lzR2FtZU9iamVjdC5qcyc7XHJcbmltcG9ydCBJc1NjZW5lT2JqZWN0IGZyb20gJy4uL3N5c3RlbS9Jc1NjZW5lT2JqZWN0LmpzJztcclxuXHJcbmNvbnN0IEdldFZhbHVlID0gUGhhc2VyLlV0aWxzLk9iamVjdHMuR2V0VmFsdWU7XHJcblxyXG5jbGFzcyBUd2VlbkJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IocGFyZW50LCBjb25maWcpIHtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gR2V0U2NlbmVPYmplY3QocGFyZW50KTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICBldmVudEVtaXR0ZXI6XHJcbiAgICAgICAgLSBmYWxzZShkZWZhdWx0IHZhbHVlKTogVXNlIHR3ZWVuJ3MgZXZlbnQgZW1pdHRlci5cclxuICAgICAgICAtIHRydWU6IENyZWF0ZSBhIHByaXZhdGUgZXZlbnQgZW1pdHRlci5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSBHZXRWYWx1ZShjb25maWcsICdldmVudEVtaXR0ZXInLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGV2ZW50RW1pdHRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBldmVudEVtaXR0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0RXZlbnRFbWl0dGVyKGV2ZW50RW1pdHRlcik7XHJcbiAgICAgICAgdGhpcy5ib290KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYm9vdCgpIHtcclxuICAgICAgICBpZiAoSXNHYW1lT2JqZWN0KHRoaXMucGFyZW50KSkgeyAvLyBQYXJlbnQgaXMgR2FtZSBPYmplY3RcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50Lm9uY2UpIHsgLy8gb29wcywgYm9iIG9iamVjdCBkb2VzIG5vdCBoYXZlIGV2ZW50IGVtaXR0ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Lm9uKCdkZXN0cm95JywgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoSXNTY2VuZU9iamVjdCh0aGlzLnBhcmVudCkpIHsgLy8gUGFyZW50IGlzIFNjZW5lIE9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ldmVudHMub25jZSgnc2h1dGRvd24nLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vID8/XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNodXRkb3duKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIGlmIChJc1NjZW5lT2JqZWN0KHRoaXMucGFyZW50KSkgeyAgLy8gUGFyZW50IGlzIFNjZW5lIE9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ldmVudHMub2ZmKCdzaHV0ZG93bicsIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGVzdHJveUV2ZW50RW1pdHRlcigpO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KHR3ZWVuQ29uZmlnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50d2VlbiA9IHRoaXMuc2NlbmUudHdlZW5zLmFkZCh0d2VlbkNvbmZpZylcclxuICAgICAgICAgICAgLm9uKCdjb21wbGV0ZScsIHRoaXMuY29tcGxldGUsIHRoaXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmdldEV2ZW50RW1pdHRlcigpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEV2ZW50RW1pdHRlcih0aGlzLnR3ZWVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydCgpIHtcclxuICAgICAgICB0aGlzLnN0b3AoKS5zdGFydCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnR3ZWVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RXZlbnRFbWl0dGVyKCkgPT09IHRoaXMudHdlZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRFdmVudEVtaXR0ZXIoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnR3ZWVuLnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMudHdlZW4gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RXZlbnRFbWl0dGVyKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb21wbGV0ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nKCkge1xyXG4gICAgICAgIHJldHVybiAoISF0aGlzLnR3ZWVuKTtcclxuICAgIH1cclxufVxyXG5cclxuT2JqZWN0LmFzc2lnbihcclxuICAgIFR3ZWVuQmFzZS5wcm90b3R5cGUsXHJcbiAgICBFdmVudEVtaXR0ZXJNZXRob2RzXHJcbik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUd2VlbkJhc2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser3-rex-plugins/plugins/utils/tween/TweenBase.js\n");
 
/***/ }),
 
/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2YyOGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n");
 
/***/ }),
 
/***/ "./node_modules/querystring-es3/decode.js":
/*!************************************************!*\
  !*** ./node_modules/querystring-es3/decode.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcz85MWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/decode.js\n");
 
/***/ }),
 
/***/ "./node_modules/querystring-es3/encode.js":
/*!************************************************!*\
  !*** ./node_modules/querystring-es3/encode.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcz9lMDk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/encode.js\n");
 
/***/ }),
 
/***/ "./node_modules/querystring-es3/index.js":
/*!***********************************************!*\
  !*** ./node_modules/querystring-es3/index.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nexports.decode = exports.parse = __webpack_require__(/*! ./decode */ \"./node_modules/querystring-es3/decode.js\");\nexports.encode = exports.stringify = __webpack_require__(/*! ./encode */ \"./node_modules/querystring-es3/encode.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzP2IzODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsaUNBQWlDLG1CQUFPLENBQUMsMERBQVU7QUFDbkQscUNBQXFDLG1CQUFPLENBQUMsMERBQVUiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/sockjs-client/dist/sockjs.js":
/*!***************************************************!*\
  !*** ./node_modules/sockjs-client/dist/sockjs.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
eval("/* WEBPACK VAR INJECTION */(function(global) {var require;var require;/* sockjs-client v1.4.0 | http://sockjs.org | MIT license */\n(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar transportList = require('./transport-list');\n\nmodule.exports = require('./main')(transportList);\n\n// TODO can't get rid of this until all servers do\nif ('_sockjs_onload' in global) {\n  setTimeout(global._sockjs_onload, 1);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./main\":14,\"./transport-list\":16}],2:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction CloseEvent() {\n  Event.call(this);\n  this.initEvent('close', false, false);\n  this.wasClean = false;\n  this.code = 0;\n  this.reason = '';\n}\n\ninherits(CloseEvent, Event);\n\nmodule.exports = CloseEvent;\n\n},{\"./event\":4,\"inherits\":57}],3:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventTarget = require('./eventtarget')\n  ;\n\nfunction EventEmitter() {\n  EventTarget.call(this);\n}\n\ninherits(EventEmitter, EventTarget);\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  if (type) {\n    delete this._listeners[type];\n  } else {\n    this._listeners = {};\n  }\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n  var self = this\n    , fired = false;\n\n  function g() {\n    self.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  this.on(type, g);\n};\n\nEventEmitter.prototype.emit = function() {\n  var type = arguments[0];\n  var listeners = this._listeners[type];\n  if (!listeners) {\n    return;\n  }\n  // equivalent of Array.prototype.slice.call(arguments, 1);\n  var l = arguments.length;\n  var args = new Array(l - 1);\n  for (var ai = 1; ai < l; ai++) {\n    args[ai - 1] = arguments[ai];\n  }\n  for (var i = 0; i < listeners.length; i++) {\n    listeners[i].apply(this, args);\n  }\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;\nEventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;\n\nmodule.exports.EventEmitter = EventEmitter;\n\n},{\"./eventtarget\":5,\"inherits\":57}],4:[function(require,module,exports){\n'use strict';\n\nfunction Event(eventType) {\n  this.type = eventType;\n}\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n  this.type = eventType;\n  this.bubbles = canBubble;\n  this.cancelable = cancelable;\n  this.timeStamp = +new Date();\n  return this;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\n/* Simplified implementation of DOM2 EventTarget.\n *   http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget\n */\n\nfunction EventTarget() {\n  this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function(eventType, listener) {\n  if (!(eventType in this._listeners)) {\n    this._listeners[eventType] = [];\n  }\n  var arr = this._listeners[eventType];\n  // #4\n  if (arr.indexOf(listener) === -1) {\n    // Make a copy so as not to interfere with a current dispatchEvent.\n    arr = arr.concat([listener]);\n  }\n  this._listeners[eventType] = arr;\n};\n\nEventTarget.prototype.removeEventListener = function(eventType, listener) {\n  var arr = this._listeners[eventType];\n  if (!arr) {\n    return;\n  }\n  var idx = arr.indexOf(listener);\n  if (idx !== -1) {\n    if (arr.length > 1) {\n      // Make a copy so as not to interfere with a current dispatchEvent.\n      this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));\n    } else {\n      delete this._listeners[eventType];\n    }\n    return;\n  }\n};\n\nEventTarget.prototype.dispatchEvent = function() {\n  var event = arguments[0];\n  var t = event.type;\n  // equivalent of Array.prototype.slice.call(arguments, 0);\n  var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);\n  // TODO: This doesn't match the real behavior; per spec, onfoo get\n  // their place in line from the /first/ time they're set from\n  // non-null. Although WebKit bumps it to the end every time it's\n  // set.\n  if (this['on' + t]) {\n    this['on' + t].apply(this, args);\n  }\n  if (t in this._listeners) {\n    // Grab a reference to the listeners list. removeEventListener may alter the list.\n    var listeners = this._listeners[t];\n    for (var i = 0; i < listeners.length; i++) {\n      listeners[i].apply(this, args);\n    }\n  }\n};\n\nmodule.exports = EventTarget;\n\n},{}],6:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction TransportMessageEvent(data) {\n  Event.call(this);\n  this.initEvent('message', false, false);\n  this.data = data;\n}\n\ninherits(TransportMessageEvent, Event);\n\nmodule.exports = TransportMessageEvent;\n\n},{\"./event\":4,\"inherits\":57}],7:[function(require,module,exports){\n'use strict';\n\nvar JSON3 = require('json3')\n  , iframeUtils = require('./utils/iframe')\n  ;\n\nfunction FacadeJS(transport) {\n  this._transport = transport;\n  transport.on('message', this._transportMessage.bind(this));\n  transport.on('close', this._transportClose.bind(this));\n}\n\nFacadeJS.prototype._transportClose = function(code, reason) {\n  iframeUtils.postMessage('c', JSON3.stringify([code, reason]));\n};\nFacadeJS.prototype._transportMessage = function(frame) {\n  iframeUtils.postMessage('t', frame);\n};\nFacadeJS.prototype._send = function(data) {\n  this._transport.send(data);\n};\nFacadeJS.prototype._close = function() {\n  this._transport.close();\n  this._transport.removeAllListeners();\n};\n\nmodule.exports = FacadeJS;\n\n},{\"./utils/iframe\":47,\"json3\":58}],8:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , JSON3 = require('json3')\n  , FacadeJS = require('./facade')\n  , InfoIframeReceiver = require('./info-iframe-receiver')\n  , iframeUtils = require('./utils/iframe')\n  , loc = require('./location')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:iframe-bootstrap');\n}\n\nmodule.exports = function(SockJS, availableTransports) {\n  var transportMap = {};\n  availableTransports.forEach(function(at) {\n    if (at.facadeTransport) {\n      transportMap[at.facadeTransport.transportName] = at.facadeTransport;\n    }\n  });\n\n  // hard-coded for the info iframe\n  // TODO see if we can make this more dynamic\n  transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver;\n  var parentOrigin;\n\n  /* eslint-disable camelcase */\n  SockJS.bootstrap_iframe = function() {\n    /* eslint-enable camelcase */\n    var facade;\n    iframeUtils.currentWindowId = loc.hash.slice(1);\n    var onMessage = function(e) {\n      if (e.source !== parent) {\n        return;\n      }\n      if (typeof parentOrigin === 'undefined') {\n        parentOrigin = e.origin;\n      }\n      if (e.origin !== parentOrigin) {\n        return;\n      }\n\n      var iframeMessage;\n      try {\n        iframeMessage = JSON3.parse(e.data);\n      } catch (ignored) {\n        debug('bad json', e.data);\n        return;\n      }\n\n      if (iframeMessage.windowId !== iframeUtils.currentWindowId) {\n        return;\n      }\n      switch (iframeMessage.type) {\n      case 's':\n        var p;\n        try {\n          p = JSON3.parse(iframeMessage.data);\n        } catch (ignored) {\n          debug('bad json', iframeMessage.data);\n          break;\n        }\n        var version = p[0];\n        var transport = p[1];\n        var transUrl = p[2];\n        var baseUrl = p[3];\n        debug(version, transport, transUrl, baseUrl);\n        // change this to semver logic\n        if (version !== SockJS.version) {\n          throw new Error('Incompatible SockJS! Main site uses:' +\n                    ' \"' + version + '\", the iframe:' +\n                    ' \"' + SockJS.version + '\".');\n        }\n\n        if (!urlUtils.isOriginEqual(transUrl, loc.href) ||\n            !urlUtils.isOriginEqual(baseUrl, loc.href)) {\n          throw new Error('Can\\'t connect to different domain from within an ' +\n                    'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')');\n        }\n        facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl));\n        break;\n      case 'm':\n        facade._send(iframeMessage.data);\n        break;\n      case 'c':\n        if (facade) {\n          facade._close();\n        }\n        facade = null;\n        break;\n      }\n    };\n\n    eventUtils.attachEvent('message', onMessage);\n\n    // Start\n    iframeUtils.postMessage('s');\n  };\n};\n\n}).call(this,{ env: {} })\n\n},{\"./facade\":7,\"./info-iframe-receiver\":10,\"./location\":13,\"./utils/event\":46,\"./utils/iframe\":47,\"./utils/url\":52,\"debug\":55,\"json3\":58}],9:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , objectUtils = require('./utils/object')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-ajax');\n}\n\nfunction InfoAjax(url, AjaxObject) {\n  EventEmitter.call(this);\n\n  var self = this;\n  var t0 = +new Date();\n  this.xo = new AjaxObject('GET', url);\n\n  this.xo.once('finish', function(status, text) {\n    var info, rtt;\n    if (status === 200) {\n      rtt = (+new Date()) - t0;\n      if (text) {\n        try {\n          info = JSON3.parse(text);\n        } catch (e) {\n          debug('bad json', text);\n        }\n      }\n\n      if (!objectUtils.isObject(info)) {\n        info = {};\n      }\n    }\n    self.emit('finish', info, rtt);\n    self.removeAllListeners();\n  });\n}\n\ninherits(InfoAjax, EventEmitter);\n\nInfoAjax.prototype.close = function() {\n  this.removeAllListeners();\n  this.xo.close();\n};\n\nmodule.exports = InfoAjax;\n\n}).call(this,{ env: {} })\n\n},{\"./utils/object\":49,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],10:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , JSON3 = require('json3')\n  , XHRLocalObject = require('./transport/sender/xhr-local')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nfunction InfoReceiverIframe(transUrl) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.ir = new InfoAjax(transUrl, XHRLocalObject);\n  this.ir.once('finish', function(info, rtt) {\n    self.ir = null;\n    self.emit('message', JSON3.stringify([info, rtt]));\n  });\n}\n\ninherits(InfoReceiverIframe, EventEmitter);\n\nInfoReceiverIframe.transportName = 'iframe-info-receiver';\n\nInfoReceiverIframe.prototype.close = function() {\n  if (this.ir) {\n    this.ir.close();\n    this.ir = null;\n  }\n  this.removeAllListeners();\n};\n\nmodule.exports = InfoReceiverIframe;\n\n},{\"./info-ajax\":9,\"./transport/sender/xhr-local\":37,\"events\":3,\"inherits\":57,\"json3\":58}],11:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , utils = require('./utils/event')\n  , IframeTransport = require('./transport/iframe')\n  , InfoReceiverIframe = require('./info-iframe-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-iframe');\n}\n\nfunction InfoIframe(baseUrl, url) {\n  var self = this;\n  EventEmitter.call(this);\n\n  var go = function() {\n    var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);\n\n    ifr.once('message', function(msg) {\n      if (msg) {\n        var d;\n        try {\n          d = JSON3.parse(msg);\n        } catch (e) {\n          debug('bad json', msg);\n          self.emit('finish');\n          self.close();\n          return;\n        }\n\n        var info = d[0], rtt = d[1];\n        self.emit('finish', info, rtt);\n      }\n      self.close();\n    });\n\n    ifr.once('close', function() {\n      self.emit('finish');\n      self.close();\n    });\n  };\n\n  // TODO this seems the same as the 'needBody' from transports\n  if (!global.document.body) {\n    utils.attachEvent('load', go);\n  } else {\n    go();\n  }\n}\n\ninherits(InfoIframe, EventEmitter);\n\nInfoIframe.enabled = function() {\n  return IframeTransport.enabled();\n};\n\nInfoIframe.prototype.close = function() {\n  if (this.ifr) {\n    this.ifr.close();\n  }\n  this.removeAllListeners();\n  this.ifr = null;\n};\n\nmodule.exports = InfoIframe;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./info-iframe-receiver\":10,\"./transport/iframe\":22,\"./utils/event\":46,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],12:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , urlUtils = require('./utils/url')\n  , XDR = require('./transport/sender/xdr')\n  , XHRCors = require('./transport/sender/xhr-cors')\n  , XHRLocal = require('./transport/sender/xhr-local')\n  , XHRFake = require('./transport/sender/xhr-fake')\n  , InfoIframe = require('./info-iframe')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-receiver');\n}\n\nfunction InfoReceiver(baseUrl, urlInfo) {\n  debug(baseUrl);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self.doXhr(baseUrl, urlInfo);\n  }, 0);\n}\n\ninherits(InfoReceiver, EventEmitter);\n\n// TODO this is currently ignoring the list of available transports and the whitelist\n\nInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {\n  // determine method of CORS support (if needed)\n  if (urlInfo.sameOrigin) {\n    return new InfoAjax(url, XHRLocal);\n  }\n  if (XHRCors.enabled) {\n    return new InfoAjax(url, XHRCors);\n  }\n  if (XDR.enabled && urlInfo.sameScheme) {\n    return new InfoAjax(url, XDR);\n  }\n  if (InfoIframe.enabled()) {\n    return new InfoIframe(baseUrl, url);\n  }\n  return new InfoAjax(url, XHRFake);\n};\n\nInfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {\n  var self = this\n    , url = urlUtils.addPath(baseUrl, '/info')\n    ;\n  debug('doXhr', url);\n\n  this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);\n\n  this.timeoutRef = setTimeout(function() {\n    debug('timeout');\n    self._cleanup(false);\n    self.emit('finish');\n  }, InfoReceiver.timeout);\n\n  this.xo.once('finish', function(info, rtt) {\n    debug('finish', info, rtt);\n    self._cleanup(true);\n    self.emit('finish', info, rtt);\n  });\n};\n\nInfoReceiver.prototype._cleanup = function(wasClean) {\n  debug('_cleanup');\n  clearTimeout(this.timeoutRef);\n  this.timeoutRef = null;\n  if (!wasClean && this.xo) {\n    this.xo.close();\n  }\n  this.xo = null;\n};\n\nInfoReceiver.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  this._cleanup(false);\n};\n\nInfoReceiver.timeout = 8000;\n\nmodule.exports = InfoReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"./info-ajax\":9,\"./info-iframe\":11,\"./transport/sender/xdr\":34,\"./transport/sender/xhr-cors\":35,\"./transport/sender/xhr-fake\":36,\"./transport/sender/xhr-local\":37,\"./utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],13:[function(require,module,exports){\n(function (global){\n'use strict';\n\nmodule.exports = global.location || {\n  origin: 'http://localhost:80'\n, protocol: 'http:'\n, host: 'localhost'\n, port: 80\n, href: 'http://localhost/'\n, hash: ''\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],14:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nrequire('./shims');\n\nvar URL = require('url-parse')\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , random = require('./utils/random')\n  , escape = require('./utils/escape')\n  , urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , transport = require('./utils/transport')\n  , objectUtils = require('./utils/object')\n  , browser = require('./utils/browser')\n  , log = require('./utils/log')\n  , Event = require('./event/event')\n  , EventTarget = require('./event/eventtarget')\n  , loc = require('./location')\n  , CloseEvent = require('./event/close')\n  , TransportMessageEvent = require('./event/trans-message')\n  , InfoReceiver = require('./info-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:main');\n}\n\nvar transports;\n\n// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface\nfunction SockJS(url, protocols, options) {\n  if (!(this instanceof SockJS)) {\n    return new SockJS(url, protocols, options);\n  }\n  if (arguments.length < 1) {\n    throw new TypeError(\"Failed to construct 'SockJS: 1 argument required, but only 0 present\");\n  }\n  EventTarget.call(this);\n\n  this.readyState = SockJS.CONNECTING;\n  this.extensions = '';\n  this.protocol = '';\n\n  // non-standard extension\n  options = options || {};\n  if (options.protocols_whitelist) {\n    log.warn(\"'protocols_whitelist' is DEPRECATED. Use 'transports' instead.\");\n  }\n  this._transportsWhitelist = options.transports;\n  this._transportOptions = options.transportOptions || {};\n  this._timeout = options.timeout || 0;\n\n  var sessionId = options.sessionId || 8;\n  if (typeof sessionId === 'function') {\n    this._generateSessionId = sessionId;\n  } else if (typeof sessionId === 'number') {\n    this._generateSessionId = function() {\n      return random.string(sessionId);\n    };\n  } else {\n    throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.');\n  }\n\n  this._server = options.server || random.numberString(1000);\n\n  // Step 1 of WS spec - parse and validate the url. Issue #8\n  var parsedUrl = new URL(url);\n  if (!parsedUrl.host || !parsedUrl.protocol) {\n    throw new SyntaxError(\"The URL '\" + url + \"' is invalid\");\n  } else if (parsedUrl.hash) {\n    throw new SyntaxError('The URL must not contain a fragment');\n  } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n    throw new SyntaxError(\"The URL's scheme must be either 'http:' or 'https:'. '\" + parsedUrl.protocol + \"' is not allowed.\");\n  }\n\n  var secure = parsedUrl.protocol === 'https:';\n  // Step 2 - don't allow secure origin with an insecure protocol\n  if (loc.protocol === 'https:' && !secure) {\n    throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS');\n  }\n\n  // Step 3 - check port access - no need here\n  // Step 4 - parse protocols argument\n  if (!protocols) {\n    protocols = [];\n  } else if (!Array.isArray(protocols)) {\n    protocols = [protocols];\n  }\n\n  // Step 5 - check protocols argument\n  var sortedProtocols = protocols.sort();\n  sortedProtocols.forEach(function(proto, i) {\n    if (!proto) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is invalid.\");\n    }\n    if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is duplicated.\");\n    }\n  });\n\n  // Step 6 - convert origin\n  var o = urlUtils.getOrigin(loc.href);\n  this._origin = o ? o.toLowerCase() : null;\n\n  // remove the trailing slash\n  parsedUrl.set('pathname', parsedUrl.pathname.replace(/\\/+$/, ''));\n\n  // store the sanitized url\n  this.url = parsedUrl.href;\n  debug('using url', this.url);\n\n  // Step 7 - start connection in background\n  // obtain server info\n  // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26\n  this._urlInfo = {\n    nullOrigin: !browser.hasDomain()\n  , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href)\n  , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)\n  };\n\n  this._ir = new InfoReceiver(this.url, this._urlInfo);\n  this._ir.once('finish', this._receiveInfo.bind(this));\n}\n\ninherits(SockJS, EventTarget);\n\nfunction userSetCode(code) {\n  return code === 1000 || (code >= 3000 && code <= 4999);\n}\n\nSockJS.prototype.close = function(code, reason) {\n  // Step 1\n  if (code && !userSetCode(code)) {\n    throw new Error('InvalidAccessError: Invalid code');\n  }\n  // Step 2.4 states the max is 123 bytes, but we are just checking length\n  if (reason && reason.length > 123) {\n    throw new SyntaxError('reason argument has an invalid length');\n  }\n\n  // Step 3.1\n  if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) {\n    return;\n  }\n\n  // TODO look at docs to determine how to set this\n  var wasClean = true;\n  this._close(code || 1000, reason || 'Normal closure', wasClean);\n};\n\nSockJS.prototype.send = function(data) {\n  // #13 - convert anything non-string to string\n  // TODO this currently turns objects into [object Object]\n  if (typeof data !== 'string') {\n    data = '' + data;\n  }\n  if (this.readyState === SockJS.CONNECTING) {\n    throw new Error('InvalidStateError: The connection has not been established yet');\n  }\n  if (this.readyState !== SockJS.OPEN) {\n    return;\n  }\n  this._transport.send(escape.quote(data));\n};\n\nSockJS.version = require('./version');\n\nSockJS.CONNECTING = 0;\nSockJS.OPEN = 1;\nSockJS.CLOSING = 2;\nSockJS.CLOSED = 3;\n\nSockJS.prototype._receiveInfo = function(info, rtt) {\n  debug('_receiveInfo', rtt);\n  this._ir = null;\n  if (!info) {\n    this._close(1002, 'Cannot connect to server');\n    return;\n  }\n\n  // establish a round-trip timeout (RTO) based on the\n  // round-trip time (RTT)\n  this._rto = this.countRTO(rtt);\n  // allow server to override url used for the actual transport\n  this._transUrl = info.base_url ? info.base_url : this.url;\n  info = objectUtils.extend(info, this._urlInfo);\n  debug('info', info);\n  // determine list of desired and supported transports\n  var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info);\n  this._transports = enabledTransports.main;\n  debug(this._transports.length + ' enabled transports');\n\n  this._connect();\n};\n\nSockJS.prototype._connect = function() {\n  for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) {\n    debug('attempt', Transport.transportName);\n    if (Transport.needBody) {\n      if (!global.document.body ||\n          (typeof global.document.readyState !== 'undefined' &&\n            global.document.readyState !== 'complete' &&\n            global.document.readyState !== 'interactive')) {\n        debug('waiting for body');\n        this._transports.unshift(Transport);\n        eventUtils.attachEvent('load', this._connect.bind(this));\n        return;\n      }\n    }\n\n    // calculate timeout based on RTO and round trips. Default to 5s\n    var timeoutMs = Math.max(this._timeout, (this._rto * Transport.roundTrips) || 5000);\n    this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs);\n    debug('using timeout', timeoutMs);\n\n    var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId());\n    var options = this._transportOptions[Transport.transportName];\n    debug('transport url', transportUrl);\n    var transportObj = new Transport(transportUrl, this._transUrl, options);\n    transportObj.on('message', this._transportMessage.bind(this));\n    transportObj.once('close', this._transportClose.bind(this));\n    transportObj.transportName = Transport.transportName;\n    this._transport = transportObj;\n\n    return;\n  }\n  this._close(2000, 'All transports failed', false);\n};\n\nSockJS.prototype._transportTimeout = function() {\n  debug('_transportTimeout');\n  if (this.readyState === SockJS.CONNECTING) {\n    if (this._transport) {\n      this._transport.close();\n    }\n\n    this._transportClose(2007, 'Transport timed out');\n  }\n};\n\nSockJS.prototype._transportMessage = function(msg) {\n  debug('_transportMessage', msg);\n  var self = this\n    , type = msg.slice(0, 1)\n    , content = msg.slice(1)\n    , payload\n    ;\n\n  // first check for messages that don't need a payload\n  switch (type) {\n    case 'o':\n      this._open();\n      return;\n    case 'h':\n      this.dispatchEvent(new Event('heartbeat'));\n      debug('heartbeat', this.transport);\n      return;\n  }\n\n  if (content) {\n    try {\n      payload = JSON3.parse(content);\n    } catch (e) {\n      debug('bad json', content);\n    }\n  }\n\n  if (typeof payload === 'undefined') {\n    debug('empty payload', content);\n    return;\n  }\n\n  switch (type) {\n    case 'a':\n      if (Array.isArray(payload)) {\n        payload.forEach(function(p) {\n          debug('message', self.transport, p);\n          self.dispatchEvent(new TransportMessageEvent(p));\n        });\n      }\n      break;\n    case 'm':\n      debug('message', this.transport, payload);\n      this.dispatchEvent(new TransportMessageEvent(payload));\n      break;\n    case 'c':\n      if (Array.isArray(payload) && payload.length === 2) {\n        this._close(payload[0], payload[1], true);\n      }\n      break;\n  }\n};\n\nSockJS.prototype._transportClose = function(code, reason) {\n  debug('_transportClose', this.transport, code, reason);\n  if (this._transport) {\n    this._transport.removeAllListeners();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) {\n    this._connect();\n    return;\n  }\n\n  this._close(code, reason);\n};\n\nSockJS.prototype._open = function() {\n  debug('_open', this._transport && this._transport.transportName, this.readyState);\n  if (this.readyState === SockJS.CONNECTING) {\n    if (this._transportTimeoutId) {\n      clearTimeout(this._transportTimeoutId);\n      this._transportTimeoutId = null;\n    }\n    this.readyState = SockJS.OPEN;\n    this.transport = this._transport.transportName;\n    this.dispatchEvent(new Event('open'));\n    debug('connected', this.transport);\n  } else {\n    // The server might have been restarted, and lost track of our\n    // connection.\n    this._close(1006, 'Server lost session');\n  }\n};\n\nSockJS.prototype._close = function(code, reason, wasClean) {\n  debug('_close', this.transport, code, reason, wasClean, this.readyState);\n  var forceFail = false;\n\n  if (this._ir) {\n    forceFail = true;\n    this._ir.close();\n    this._ir = null;\n  }\n  if (this._transport) {\n    this._transport.close();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (this.readyState === SockJS.CLOSED) {\n    throw new Error('InvalidStateError: SockJS has already been closed');\n  }\n\n  this.readyState = SockJS.CLOSING;\n  setTimeout(function() {\n    this.readyState = SockJS.CLOSED;\n\n    if (forceFail) {\n      this.dispatchEvent(new Event('error'));\n    }\n\n    var e = new CloseEvent('close');\n    e.wasClean = wasClean || false;\n    e.code = code || 1000;\n    e.reason = reason;\n\n    this.dispatchEvent(e);\n    this.onmessage = this.onclose = this.onerror = null;\n    debug('disconnected');\n  }.bind(this), 0);\n};\n\n// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/\n// and RFC 2988.\nSockJS.prototype.countRTO = function(rtt) {\n  // In a local environment, when using IE8/9 and the `jsonp-polling`\n  // transport the time needed to establish a connection (the time that pass\n  // from the opening of the transport to the call of `_dispatchOpen`) is\n  // around 200msec (the lower bound used in the article above) and this\n  // causes spurious timeouts. For this reason we calculate a value slightly\n  // larger than that used in the article.\n  if (rtt > 100) {\n    return 4 * rtt; // rto > 400msec\n  }\n  return 300 + rtt; // 300msec < rto <= 400msec\n};\n\nmodule.exports = function(availableTransports) {\n  transports = transport(availableTransports);\n  require('./iframe-bootstrap')(SockJS, availableTransports);\n  return SockJS;\n};\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./event/close\":2,\"./event/event\":4,\"./event/eventtarget\":5,\"./event/trans-message\":6,\"./iframe-bootstrap\":8,\"./info-receiver\":12,\"./location\":13,\"./shims\":15,\"./utils/browser\":44,\"./utils/escape\":45,\"./utils/event\":46,\"./utils/log\":48,\"./utils/object\":49,\"./utils/random\":50,\"./utils/transport\":51,\"./utils/url\":52,\"./version\":53,\"debug\":55,\"inherits\":57,\"json3\":58,\"url-parse\":61}],15:[function(require,module,exports){\n/* eslint-disable */\n/* jscs: disable */\n'use strict';\n\n// pulled specific shims from https://github.com/es-shims/es5-shim\n\nvar ArrayPrototype = Array.prototype;\nvar ObjectPrototype = Object.prototype;\nvar FunctionPrototype = Function.prototype;\nvar StringPrototype = String.prototype;\nvar array_slice = ArrayPrototype.slice;\n\nvar _toString = ObjectPrototype.toString;\nvar isFunction = function (val) {\n    return ObjectPrototype.toString.call(val) === '[object Function]';\n};\nvar isArray = function isArray(obj) {\n    return _toString.call(obj) === '[object Array]';\n};\nvar isString = function isString(obj) {\n    return _toString.call(obj) === '[object String]';\n};\n\nvar supportsDescriptors = Object.defineProperty && (function () {\n    try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n    } catch (e) { /* this is ES3 */\n        return false;\n    }\n}());\n\n// Define configurable, writable and non-enumerable props\n// if they don't exist.\nvar defineProperty;\nif (supportsDescriptors) {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        Object.defineProperty(object, name, {\n            configurable: true,\n            enumerable: false,\n            writable: true,\n            value: method\n        });\n    };\n} else {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        object[name] = method;\n    };\n}\nvar defineProperties = function (object, map, forceAssign) {\n    for (var name in map) {\n        if (ObjectPrototype.hasOwnProperty.call(map, name)) {\n          defineProperty(object, name, map[name], forceAssign);\n        }\n    }\n};\n\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \" + o + ' to object');\n    }\n    return Object(o);\n};\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(num) {\n    var n = +num;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction ToUint32(x) {\n    return x >>> 0;\n}\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\ndefineProperties(FunctionPrototype, {\n    bind: function bind(that) { // .length is 1\n        // 1. Let Target be the this value.\n        var target = this;\n        // 2. If IsCallable(Target) is false, throw a TypeError exception.\n        if (!isFunction(target)) {\n            throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n        }\n        // 3. Let A be a new (possibly empty) internal list of all of the\n        //   argument values provided after thisArg (arg1, arg2 etc), in order.\n        // XXX slicedArgs will stand in for \"A\" if used\n        var args = array_slice.call(arguments, 1); // for normal call\n        // 4. Let F be a new native ECMAScript object.\n        // 11. Set the [[Prototype]] internal property of F to the standard\n        //   built-in Function prototype object as specified in 15.3.3.1.\n        // 12. Set the [[Call]] internal property of F as described in\n        //   15.3.4.5.1.\n        // 13. Set the [[Construct]] internal property of F as described in\n        //   15.3.4.5.2.\n        // 14. Set the [[HasInstance]] internal property of F as described in\n        //   15.3.4.5.3.\n        var binder = function () {\n\n            if (this instanceof bound) {\n                // 15.3.4.5.2 [[Construct]]\n                // When the [[Construct]] internal method of a function object,\n                // F that was created using the bind function is called with a\n                // list of arguments ExtraArgs, the following steps are taken:\n                // 1. Let target be the value of F's [[TargetFunction]]\n                //   internal property.\n                // 2. If target has no [[Construct]] internal method, a\n                //   TypeError exception is thrown.\n                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Construct]] internal\n                //   method of target providing args as the arguments.\n\n                var result = target.apply(\n                    this,\n                    args.concat(array_slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                // 15.3.4.5.1 [[Call]]\n                // When the [[Call]] internal method of a function object, F,\n                // which was created using the bind function is called with a\n                // this value and a list of arguments ExtraArgs, the following\n                // steps are taken:\n                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 2. Let boundThis be the value of F's [[BoundThis]] internal\n                //   property.\n                // 3. Let target be the value of F's [[TargetFunction]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Call]] internal method\n                //   of target providing boundThis as the this value and\n                //   providing args as the arguments.\n\n                // equiv: target.call(this, ...boundArgs, ...args)\n                return target.apply(\n                    that,\n                    args.concat(array_slice.call(arguments))\n                );\n\n            }\n\n        };\n\n        // 15. If the [[Class]] internal property of Target is \"Function\", then\n        //     a. Let L be the length property of Target minus the length of A.\n        //     b. Set the length own property of F to either 0 or L, whichever is\n        //       larger.\n        // 16. Else set the length own property of F to 0.\n\n        var boundLength = Math.max(0, target.length - args.length);\n\n        // 17. Set the attributes of the length own property of F to the values\n        //   specified in 15.3.5.1.\n        var boundArgs = [];\n        for (var i = 0; i < boundLength; i++) {\n            boundArgs.push('$' + i);\n        }\n\n        // XXX Build a dynamic function with desired amount of arguments is the only\n        // way to set the length property of a function.\n        // In environments where Content Security Policies enabled (Chrome extensions,\n        // for ex.) all use of eval or Function costructor throws an exception.\n        // However in all of these environments Function.prototype.bind exists\n        // and so this code will never be executed.\n        var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);\n\n        if (target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            // Clean up dangling references.\n            Empty.prototype = null;\n        }\n\n        // TODO\n        // 18. Set the [[Extensible]] internal property of F to true.\n\n        // TODO\n        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n        // 20. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n        //   false.\n        // 21. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n        //   and false.\n\n        // TODO\n        // NOTE Function objects created using Function.prototype.bind do not\n        // have a prototype property or the [[Code]], [[FormalParameters]], and\n        // [[Scope]] internal properties.\n        // XXX can't delete prototype in pure-js.\n\n        // 22. Return F.\n        return bound;\n    }\n});\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\ndefineProperties(Array, { isArray: isArray });\n\n\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar properlyBoxesContext = function properlyBoxed(method) {\n    // Check node 0.6.21 bug where third parameter is not boxed\n    var properlyBoxesNonStrict = true;\n    var properlyBoxesStrict = true;\n    if (method) {\n        method.call('foo', function (_, __, context) {\n            if (typeof context !== 'object') { properlyBoxesNonStrict = false; }\n        });\n\n        method.call([1], function () {\n            'use strict';\n            properlyBoxesStrict = typeof this === 'string';\n        }, 'x');\n    }\n    return !!method && properlyBoxesNonStrict && properlyBoxesStrict;\n};\n\ndefineProperties(ArrayPrototype, {\n    forEach: function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && isString(this) ? this.split('') : object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (!isFunction(fun)) {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                // Invoke the callback function with call, passing arguments:\n                // context, property value, property key, thisArg object\n                // context\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    }\n}, !properlyBoxesContext(ArrayPrototype.forEach));\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nvar hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\ndefineProperties(ArrayPrototype, {\n    indexOf: function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && isString(this) ? this.split('') : toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n\n        // handle negative indices\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    }\n}, hasFirefox2IndexOfBug);\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.14\n// http://es5.github.com/#x15.5.4.14\n\n// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n// Many browsers do not split properly with regular expressions or they\n// do not perform the split correctly under obscure conditions.\n// See http://blog.stevenlevithan.com/archives/cross-browser-split\n// I've tested in many browsers and this seems to cover the deviant ones:\n//    'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n//    '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n//    'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n//       [undefined, \"t\", undefined, \"e\", ...]\n//    ''.split(/.?/) should be [], not [\"\"]\n//    '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\nvar string_split = StringPrototype.split;\nif (\n    'ab'.split(/(?:ab)*/).length !== 2 ||\n    '.'.split(/(.?)(.?)/).length !== 4 ||\n    'tesst'.split(/(s)*/)[1] === 't' ||\n    'test'.split(/(?:)/, -1).length !== 4 ||\n    ''.split(/.?/).length ||\n    '.'.split(/()()/).length > 1\n) {\n    (function () {\n        var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group\n\n        StringPrototype.split = function (separator, limit) {\n            var string = this;\n            if (separator === void 0 && limit === 0) {\n                return [];\n            }\n\n            // If `separator` is not a regex, use native split\n            if (_toString.call(separator) !== '[object RegExp]') {\n                return string_split.call(this, separator, limit);\n            }\n\n            var output = [],\n                flags = (separator.ignoreCase ? 'i' : '') +\n                        (separator.multiline  ? 'm' : '') +\n                        (separator.extended   ? 'x' : '') + // Proposed for ES6\n                        (separator.sticky     ? 'y' : ''), // Firefox 3+\n                lastLastIndex = 0,\n                // Make `global` and avoid `lastIndex` issues by working with a copy\n                separator2, match, lastIndex, lastLength;\n            separator = new RegExp(separator.source, flags + 'g');\n            string += ''; // Type-convert\n            if (!compliantExecNpcg) {\n                // Doesn't need flags gy, but they don't hurt\n                separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags);\n            }\n            /* Values for `limit`, per the spec:\n             * If undefined: 4294967295 // Math.pow(2, 32) - 1\n             * If 0, Infinity, or NaN: 0\n             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n             * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n             * If other: Type-convert, then use the above rules\n             */\n            limit = limit === void 0 ?\n                -1 >>> 0 : // Math.pow(2, 32) - 1\n                ToUint32(limit);\n            while (match = separator.exec(string)) {\n                // `separator.lastIndex` is not reliable cross-browser\n                lastIndex = match.index + match[0].length;\n                if (lastIndex > lastLastIndex) {\n                    output.push(string.slice(lastLastIndex, match.index));\n                    // Fix browsers whose `exec` methods don't consistently return `undefined` for\n                    // nonparticipating capturing groups\n                    if (!compliantExecNpcg && match.length > 1) {\n                        match[0].replace(separator2, function () {\n                            for (var i = 1; i < arguments.length - 2; i++) {\n                                if (arguments[i] === void 0) {\n                                    match[i] = void 0;\n                                }\n                            }\n                        });\n                    }\n                    if (match.length > 1 && match.index < string.length) {\n                        ArrayPrototype.push.apply(output, match.slice(1));\n                    }\n                    lastLength = match[0].length;\n                    lastLastIndex = lastIndex;\n                    if (output.length >= limit) {\n                        break;\n                    }\n                }\n                if (separator.lastIndex === match.index) {\n                    separator.lastIndex++; // Avoid an infinite loop\n                }\n            }\n            if (lastLastIndex === string.length) {\n                if (lastLength || !separator.test('')) {\n                    output.push('');\n                }\n            } else {\n                output.push(string.slice(lastLastIndex));\n            }\n            return output.length > limit ? output.slice(0, limit) : output;\n        };\n    }());\n\n// [bugfix, chrome]\n// If separator is undefined, then the result array contains just one String,\n// which is the this value (converted to a String). If limit is not undefined,\n// then the output array is truncated so that it contains no more than limit\n// elements.\n// \"0\".split(undefined, 0) -> []\n} else if ('0'.split(void 0, 0).length) {\n    StringPrototype.split = function split(separator, limit) {\n        if (separator === void 0 && limit === 0) { return []; }\n        return string_split.call(this, separator, limit);\n    };\n}\n\n// ECMA-262, 3rd B.2.3\n// Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n// non-normative section suggesting uniform semantics and it should be\n// normalized across all browsers\n// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\nvar string_substr = StringPrototype.substr;\nvar hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\ndefineProperties(StringPrototype, {\n    substr: function substr(start, length) {\n        return string_substr.call(\n            this,\n            start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,\n            length\n        );\n    }\n}, hasNegativeSubstrBug);\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nmodule.exports = [\n  // streaming transports\n  require('./transport/websocket')\n, require('./transport/xhr-streaming')\n, require('./transport/xdr-streaming')\n, require('./transport/eventsource')\n, require('./transport/lib/iframe-wrap')(require('./transport/eventsource'))\n\n  // polling transports\n, require('./transport/htmlfile')\n, require('./transport/lib/iframe-wrap')(require('./transport/htmlfile'))\n, require('./transport/xhr-polling')\n, require('./transport/xdr-polling')\n, require('./transport/lib/iframe-wrap')(require('./transport/xhr-polling'))\n, require('./transport/jsonp-polling')\n];\n\n},{\"./transport/eventsource\":20,\"./transport/htmlfile\":21,\"./transport/jsonp-polling\":23,\"./transport/lib/iframe-wrap\":26,\"./transport/websocket\":38,\"./transport/xdr-polling\":39,\"./transport/xdr-streaming\":40,\"./transport/xhr-polling\":41,\"./transport/xhr-streaming\":42}],17:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , utils = require('../../utils/event')\n  , urlUtils = require('../../utils/url')\n  , XHR = global.XMLHttpRequest\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:browser:xhr');\n}\n\nfunction AbstractXHRObject(method, url, payload, opts) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function () {\n    self._start(method, url, payload, opts);\n  }, 0);\n}\n\ninherits(AbstractXHRObject, EventEmitter);\n\nAbstractXHRObject.prototype._start = function(method, url, payload, opts) {\n  var self = this;\n\n  try {\n    this.xhr = new XHR();\n  } catch (x) {\n    // intentionally empty\n  }\n\n  if (!this.xhr) {\n    debug('no xhr');\n    this.emit('finish', 0, 'no xhr support');\n    this._cleanup();\n    return;\n  }\n\n  // several browsers cache POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  // Explorer tends to keep connection open, even after the\n  // tab gets closed: http://bugs.jquery.com/ticket/5280\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload cleanup');\n    self._cleanup(true);\n  });\n  try {\n    this.xhr.open(method, url, true);\n    if (this.timeout && 'timeout' in this.xhr) {\n      this.xhr.timeout = this.timeout;\n      this.xhr.ontimeout = function() {\n        debug('xhr timeout');\n        self.emit('finish', 0, '');\n        self._cleanup(false);\n      };\n    }\n  } catch (e) {\n    debug('exception', e);\n    // IE raises an exception on wrong port.\n    this.emit('finish', 0, '');\n    this._cleanup(false);\n    return;\n  }\n\n  if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {\n    debug('withCredentials');\n    // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :\n    // \"This never affects same-site requests.\"\n\n    this.xhr.withCredentials = true;\n  }\n  if (opts && opts.headers) {\n    for (var key in opts.headers) {\n      this.xhr.setRequestHeader(key, opts.headers[key]);\n    }\n  }\n\n  this.xhr.onreadystatechange = function() {\n    if (self.xhr) {\n      var x = self.xhr;\n      var text, status;\n      debug('readyState', x.readyState);\n      switch (x.readyState) {\n      case 3:\n        // IE doesn't like peeking into responseText or status\n        // on Microsoft.XMLHTTP and readystate=3\n        try {\n          status = x.status;\n          text = x.responseText;\n        } catch (e) {\n          // intentionally empty\n        }\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n\n        // IE does return readystate == 3 for 404 answers.\n        if (status === 200 && text && text.length > 0) {\n          debug('chunk');\n          self.emit('chunk', status, text);\n        }\n        break;\n      case 4:\n        status = x.status;\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n        // IE returns this for a bad port\n        // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx\n        if (status === 12005 || status === 12029) {\n          status = 0;\n        }\n\n        debug('finish', status, x.responseText);\n        self.emit('finish', status, x.responseText);\n        self._cleanup(false);\n        break;\n      }\n    }\n  };\n\n  try {\n    self.xhr.send(payload);\n  } catch (e) {\n    self.emit('finish', 0, '');\n    self._cleanup(false);\n  }\n};\n\nAbstractXHRObject.prototype._cleanup = function(abort) {\n  debug('cleanup');\n  if (!this.xhr) {\n    return;\n  }\n  this.removeAllListeners();\n  utils.unloadDel(this.unloadRef);\n\n  // IE needs this field to be a function\n  this.xhr.onreadystatechange = function() {};\n  if (this.xhr.ontimeout) {\n    this.xhr.ontimeout = null;\n  }\n\n  if (abort) {\n    try {\n      this.xhr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xhr = null;\n};\n\nAbstractXHRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\nAbstractXHRObject.enabled = !!XHR;\n// override XMLHttpRequest for IE6/7\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (!AbstractXHRObject.enabled && (axo in global)) {\n  debug('overriding xmlhttprequest');\n  XHR = function() {\n    try {\n      return new global[axo]('Microsoft.XMLHTTP');\n    } catch (e) {\n      return null;\n    }\n  };\n  AbstractXHRObject.enabled = !!new XHR();\n}\n\nvar cors = false;\ntry {\n  cors = 'withCredentials' in new XHR();\n} catch (ignored) {\n  // intentionally empty\n}\n\nAbstractXHRObject.supportsCORS = cors;\n\nmodule.exports = AbstractXHRObject;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/event\":46,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],18:[function(require,module,exports){\n(function (global){\nmodule.exports = global.EventSource;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar Driver = global.WebSocket || global.MozWebSocket;\nif (Driver) {\n\tmodule.exports = function WebSocketBrowserDriver(url) {\n\t\treturn new Driver(url);\n\t};\n} else {\n\tmodule.exports = undefined;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],20:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , EventSourceReceiver = require('./receiver/eventsource')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , EventSourceDriver = require('eventsource')\n  ;\n\nfunction EventSourceTransport(transUrl) {\n  if (!EventSourceTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);\n}\n\ninherits(EventSourceTransport, AjaxBasedTransport);\n\nEventSourceTransport.enabled = function() {\n  return !!EventSourceDriver;\n};\n\nEventSourceTransport.transportName = 'eventsource';\nEventSourceTransport.roundTrips = 2;\n\nmodule.exports = EventSourceTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/eventsource\":29,\"./sender/xhr-cors\":35,\"eventsource\":18,\"inherits\":57}],21:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , HtmlfileReceiver = require('./receiver/htmlfile')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  ;\n\nfunction HtmlFileTransport(transUrl) {\n  if (!HtmlfileReceiver.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);\n}\n\ninherits(HtmlFileTransport, AjaxBasedTransport);\n\nHtmlFileTransport.enabled = function(info) {\n  return HtmlfileReceiver.enabled && info.sameOrigin;\n};\n\nHtmlFileTransport.transportName = 'htmlfile';\nHtmlFileTransport.roundTrips = 2;\n\nmodule.exports = HtmlFileTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/htmlfile\":30,\"./sender/xhr-local\":37,\"inherits\":57}],22:[function(require,module,exports){\n(function (process){\n'use strict';\n\n// Few cool transports do work only for same-origin. In order to make\n// them work cross-domain we shall use iframe, served from the\n// remote domain. New browsers have capabilities to communicate with\n// cross domain iframe using postMessage(). In IE it was implemented\n// from IE 8+, but of course, IE got some details wrong:\n//    http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx\n//    http://stevesouders.com/misc/test-postmessage.php\n\nvar inherits = require('inherits')\n  , JSON3 = require('json3')\n  , EventEmitter = require('events').EventEmitter\n  , version = require('../version')\n  , urlUtils = require('../utils/url')\n  , iframeUtils = require('../utils/iframe')\n  , eventUtils = require('../utils/event')\n  , random = require('../utils/random')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:transport:iframe');\n}\n\nfunction IframeTransport(transport, transUrl, baseUrl) {\n  if (!IframeTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  EventEmitter.call(this);\n\n  var self = this;\n  this.origin = urlUtils.getOrigin(baseUrl);\n  this.baseUrl = baseUrl;\n  this.transUrl = transUrl;\n  this.transport = transport;\n  this.windowId = random.string(8);\n\n  var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId;\n  debug(transport, transUrl, iframeUrl);\n\n  this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) {\n    debug('err callback');\n    self.emit('close', 1006, 'Unable to load an iframe (' + r + ')');\n    self.close();\n  });\n\n  this.onmessageCallback = this._message.bind(this);\n  eventUtils.attachEvent('message', this.onmessageCallback);\n}\n\ninherits(IframeTransport, EventEmitter);\n\nIframeTransport.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  if (this.iframeObj) {\n    eventUtils.detachEvent('message', this.onmessageCallback);\n    try {\n      // When the iframe is not loaded, IE raises an exception\n      // on 'contentWindow'.\n      this.postMessage('c');\n    } catch (x) {\n      // intentionally empty\n    }\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n    this.onmessageCallback = this.iframeObj = null;\n  }\n};\n\nIframeTransport.prototype._message = function(e) {\n  debug('message', e.data);\n  if (!urlUtils.isOriginEqual(e.origin, this.origin)) {\n    debug('not same origin', e.origin, this.origin);\n    return;\n  }\n\n  var iframeMessage;\n  try {\n    iframeMessage = JSON3.parse(e.data);\n  } catch (ignored) {\n    debug('bad json', e.data);\n    return;\n  }\n\n  if (iframeMessage.windowId !== this.windowId) {\n    debug('mismatched window id', iframeMessage.windowId, this.windowId);\n    return;\n  }\n\n  switch (iframeMessage.type) {\n  case 's':\n    this.iframeObj.loaded();\n    // window global dependency\n    this.postMessage('s', JSON3.stringify([\n      version\n    , this.transport\n    , this.transUrl\n    , this.baseUrl\n    ]));\n    break;\n  case 't':\n    this.emit('message', iframeMessage.data);\n    break;\n  case 'c':\n    var cdata;\n    try {\n      cdata = JSON3.parse(iframeMessage.data);\n    } catch (ignored) {\n      debug('bad json', iframeMessage.data);\n      return;\n    }\n    this.emit('close', cdata[0], cdata[1]);\n    this.close();\n    break;\n  }\n};\n\nIframeTransport.prototype.postMessage = function(type, data) {\n  debug('postMessage', type, data);\n  this.iframeObj.post(JSON3.stringify({\n    windowId: this.windowId\n  , type: type\n  , data: data || ''\n  }), this.origin);\n};\n\nIframeTransport.prototype.send = function(message) {\n  debug('send', message);\n  this.postMessage('m', message);\n};\n\nIframeTransport.enabled = function() {\n  return iframeUtils.iframeEnabled;\n};\n\nIframeTransport.transportName = 'iframe';\nIframeTransport.roundTrips = 2;\n\nmodule.exports = IframeTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../utils/event\":46,\"../utils/iframe\":47,\"../utils/random\":50,\"../utils/url\":52,\"../version\":53,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],23:[function(require,module,exports){\n(function (global){\n'use strict';\n\n// The simplest and most robust transport, using the well-know cross\n// domain hack - JSONP. This transport is quite inefficient - one\n// message could use up to one http request. But at least it works almost\n// everywhere.\n// Known limitations:\n//   o you will get a spinning cursor\n//   o for Konqueror a dumb timer is needed to detect errors\n\nvar inherits = require('inherits')\n  , SenderReceiver = require('./lib/sender-receiver')\n  , JsonpReceiver = require('./receiver/jsonp')\n  , jsonpSender = require('./sender/jsonp')\n  ;\n\nfunction JsonPTransport(transUrl) {\n  if (!JsonPTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver);\n}\n\ninherits(JsonPTransport, SenderReceiver);\n\nJsonPTransport.enabled = function() {\n  return !!global.document;\n};\n\nJsonPTransport.transportName = 'jsonp-polling';\nJsonPTransport.roundTrips = 1;\nJsonPTransport.needBody = true;\n\nmodule.exports = JsonPTransport;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./lib/sender-receiver\":28,\"./receiver/jsonp\":31,\"./sender/jsonp\":33,\"inherits\":57}],24:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , SenderReceiver = require('./sender-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:ajax-based');\n}\n\nfunction createAjaxSender(AjaxObject) {\n  return function(url, payload, callback) {\n    debug('create ajax sender', url, payload);\n    var opt = {};\n    if (typeof payload === 'string') {\n      opt.headers = {'Content-type': 'text/plain'};\n    }\n    var ajaxUrl = urlUtils.addPath(url, '/xhr_send');\n    var xo = new AjaxObject('POST', ajaxUrl, payload, opt);\n    xo.once('finish', function(status) {\n      debug('finish', status);\n      xo = null;\n\n      if (status !== 200 && status !== 204) {\n        return callback(new Error('http status ' + status));\n      }\n      callback();\n    });\n    return function() {\n      debug('abort');\n      xo.close();\n      xo = null;\n\n      var err = new Error('Aborted');\n      err.code = 1000;\n      callback(err);\n    };\n  };\n}\n\nfunction AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {\n  SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);\n}\n\ninherits(AjaxBasedTransport, SenderReceiver);\n\nmodule.exports = AjaxBasedTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../../utils/url\":52,\"./sender-receiver\":28,\"debug\":55,\"inherits\":57}],25:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:buffered-sender');\n}\n\nfunction BufferedSender(url, sender) {\n  debug(url);\n  EventEmitter.call(this);\n  this.sendBuffer = [];\n  this.sender = sender;\n  this.url = url;\n}\n\ninherits(BufferedSender, EventEmitter);\n\nBufferedSender.prototype.send = function(message) {\n  debug('send', message);\n  this.sendBuffer.push(message);\n  if (!this.sendStop) {\n    this.sendSchedule();\n  }\n};\n\n// For polling transports in a situation when in the message callback,\n// new message is being send. If the sending connection was started\n// before receiving one, it is possible to saturate the network and\n// timeout due to the lack of receiving socket. To avoid that we delay\n// sending messages by some small time, in order to let receiving\n// connection be started beforehand. This is only a halfmeasure and\n// does not fix the big problem, but it does make the tests go more\n// stable on slow networks.\nBufferedSender.prototype.sendScheduleWait = function() {\n  debug('sendScheduleWait');\n  var self = this;\n  var tref;\n  this.sendStop = function() {\n    debug('sendStop');\n    self.sendStop = null;\n    clearTimeout(tref);\n  };\n  tref = setTimeout(function() {\n    debug('timeout');\n    self.sendStop = null;\n    self.sendSchedule();\n  }, 25);\n};\n\nBufferedSender.prototype.sendSchedule = function() {\n  debug('sendSchedule', this.sendBuffer.length);\n  var self = this;\n  if (this.sendBuffer.length > 0) {\n    var payload = '[' + this.sendBuffer.join(',') + ']';\n    this.sendStop = this.sender(this.url, payload, function(err) {\n      self.sendStop = null;\n      if (err) {\n        debug('error', err);\n        self.emit('close', err.code || 1006, 'Sending error: ' + err);\n        self.close();\n      } else {\n        self.sendScheduleWait();\n      }\n    });\n    this.sendBuffer = [];\n  }\n};\n\nBufferedSender.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nBufferedSender.prototype.close = function() {\n  debug('close');\n  this._cleanup();\n  if (this.sendStop) {\n    this.sendStop();\n    this.sendStop = null;\n  }\n};\n\nmodule.exports = BufferedSender;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],26:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar inherits = require('inherits')\n  , IframeTransport = require('../iframe')\n  , objectUtils = require('../../utils/object')\n  ;\n\nmodule.exports = function(transport) {\n\n  function IframeWrapTransport(transUrl, baseUrl) {\n    IframeTransport.call(this, transport.transportName, transUrl, baseUrl);\n  }\n\n  inherits(IframeWrapTransport, IframeTransport);\n\n  IframeWrapTransport.enabled = function(url, info) {\n    if (!global.document) {\n      return false;\n    }\n\n    var iframeInfo = objectUtils.extend({}, info);\n    iframeInfo.sameOrigin = true;\n    return transport.enabled(iframeInfo) && IframeTransport.enabled();\n  };\n\n  IframeWrapTransport.transportName = 'iframe-' + transport.transportName;\n  IframeWrapTransport.needBody = true;\n  IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1)\n\n  IframeWrapTransport.facadeTransport = transport;\n\n  return IframeWrapTransport;\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/object\":49,\"../iframe\":22,\"inherits\":57}],27:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:polling');\n}\n\nfunction Polling(Receiver, receiveUrl, AjaxObject) {\n  debug(receiveUrl);\n  EventEmitter.call(this);\n  this.Receiver = Receiver;\n  this.receiveUrl = receiveUrl;\n  this.AjaxObject = AjaxObject;\n  this._scheduleReceiver();\n}\n\ninherits(Polling, EventEmitter);\n\nPolling.prototype._scheduleReceiver = function() {\n  debug('_scheduleReceiver');\n  var self = this;\n  var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);\n\n  poll.on('message', function(msg) {\n    debug('message', msg);\n    self.emit('message', msg);\n  });\n\n  poll.once('close', function(code, reason) {\n    debug('close', code, reason, self.pollIsClosing);\n    self.poll = poll = null;\n\n    if (!self.pollIsClosing) {\n      if (reason === 'network') {\n        self._scheduleReceiver();\n      } else {\n        self.emit('close', code || 1006, reason);\n        self.removeAllListeners();\n      }\n    }\n  });\n};\n\nPolling.prototype.abort = function() {\n  debug('abort');\n  this.removeAllListeners();\n  this.pollIsClosing = true;\n  if (this.poll) {\n    this.poll.abort();\n  }\n};\n\nmodule.exports = Polling;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],28:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , BufferedSender = require('./buffered-sender')\n  , Polling = require('./polling')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender-receiver');\n}\n\nfunction SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {\n  var pollUrl = urlUtils.addPath(transUrl, urlSuffix);\n  debug(pollUrl);\n  var self = this;\n  BufferedSender.call(this, transUrl, senderFunc);\n\n  this.poll = new Polling(Receiver, pollUrl, AjaxObject);\n  this.poll.on('message', function(msg) {\n    debug('poll message', msg);\n    self.emit('message', msg);\n  });\n  this.poll.once('close', function(code, reason) {\n    debug('poll close', code, reason);\n    self.poll = null;\n    self.emit('close', code, reason);\n    self.close();\n  });\n}\n\ninherits(SenderReceiver, BufferedSender);\n\nSenderReceiver.prototype.close = function() {\n  BufferedSender.prototype.close.call(this);\n  debug('close');\n  this.removeAllListeners();\n  if (this.poll) {\n    this.poll.abort();\n    this.poll = null;\n  }\n};\n\nmodule.exports = SenderReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"../../utils/url\":52,\"./buffered-sender\":25,\"./polling\":27,\"debug\":55,\"inherits\":57}],29:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , EventSourceDriver = require('eventsource')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:eventsource');\n}\n\nfunction EventSourceReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n\n  var self = this;\n  var es = this.es = new EventSourceDriver(url);\n  es.onmessage = function(e) {\n    debug('message', e.data);\n    self.emit('message', decodeURI(e.data));\n  };\n  es.onerror = function(e) {\n    debug('error', es.readyState, e);\n    // ES on reconnection has readyState = 0 or 1.\n    // on network error it's CLOSED = 2\n    var reason = (es.readyState !== 2 ? 'network' : 'permanent');\n    self._cleanup();\n    self._close(reason);\n  };\n}\n\ninherits(EventSourceReceiver, EventEmitter);\n\nEventSourceReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nEventSourceReceiver.prototype._cleanup = function() {\n  debug('cleanup');\n  var es = this.es;\n  if (es) {\n    es.onmessage = es.onerror = null;\n    es.close();\n    this.es = null;\n  }\n};\n\nEventSourceReceiver.prototype._close = function(reason) {\n  debug('close', reason);\n  var self = this;\n  // Safari and chrome < 15 crash if we close window before\n  // waiting for ES cleanup. See:\n  // https://code.google.com/p/chromium/issues/detail?id=89155\n  setTimeout(function() {\n    self.emit('close', null, reason);\n    self.removeAllListeners();\n  }, 200);\n};\n\nmodule.exports = EventSourceReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"eventsource\":18,\"inherits\":57}],30:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar inherits = require('inherits')\n  , iframeUtils = require('../../utils/iframe')\n  , urlUtils = require('../../utils/url')\n  , EventEmitter = require('events').EventEmitter\n  , random = require('../../utils/random')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:htmlfile');\n}\n\nfunction HtmlfileReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n  iframeUtils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));\n\n  debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);\n  var constructFunc = HtmlfileReceiver.htmlfileEnabled ?\n      iframeUtils.createHtmlfile : iframeUtils.createIframe;\n\n  global[iframeUtils.WPrefix][this.id] = {\n    start: function() {\n      debug('start');\n      self.iframeObj.loaded();\n    }\n  , message: function(data) {\n      debug('message', data);\n      self.emit('message', data);\n    }\n  , stop: function() {\n      debug('stop');\n      self._cleanup();\n      self._close('network');\n    }\n  };\n  this.iframeObj = constructFunc(url, function() {\n    debug('callback');\n    self._cleanup();\n    self._close('permanent');\n  });\n}\n\ninherits(HtmlfileReceiver, EventEmitter);\n\nHtmlfileReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nHtmlfileReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  if (this.iframeObj) {\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n  }\n  delete global[iframeUtils.WPrefix][this.id];\n};\n\nHtmlfileReceiver.prototype._close = function(reason) {\n  debug('_close', reason);\n  this.emit('close', null, reason);\n  this.removeAllListeners();\n};\n\nHtmlfileReceiver.htmlfileEnabled = false;\n\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (axo in global) {\n  try {\n    HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');\n  } catch (x) {\n    // intentionally empty\n  }\n}\n\nHtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;\n\nmodule.exports = HtmlfileReceiver;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/iframe\":47,\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],31:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar utils = require('../../utils/iframe')\n  , random = require('../../utils/random')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:jsonp');\n}\n\nfunction JsonpReceiver(url) {\n  debug(url);\n  var self = this;\n  EventEmitter.call(this);\n\n  utils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id));\n\n  global[utils.WPrefix][this.id] = this._callback.bind(this);\n  this._createScript(urlWithId);\n\n  // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty.\n  this.timeoutId = setTimeout(function() {\n    debug('timeout');\n    self._abort(new Error('JSONP script loaded abnormally (timeout)'));\n  }, JsonpReceiver.timeout);\n}\n\ninherits(JsonpReceiver, EventEmitter);\n\nJsonpReceiver.prototype.abort = function() {\n  debug('abort');\n  if (global[utils.WPrefix][this.id]) {\n    var err = new Error('JSONP user aborted read');\n    err.code = 1000;\n    this._abort(err);\n  }\n};\n\nJsonpReceiver.timeout = 35000;\nJsonpReceiver.scriptErrorTimeout = 1000;\n\nJsonpReceiver.prototype._callback = function(data) {\n  debug('_callback', data);\n  this._cleanup();\n\n  if (this.aborting) {\n    return;\n  }\n\n  if (data) {\n    debug('message', data);\n    this.emit('message', data);\n  }\n  this.emit('close', null, 'network');\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._abort = function(err) {\n  debug('_abort', err);\n  this._cleanup();\n  this.aborting = true;\n  this.emit('close', err.code, err.message);\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  clearTimeout(this.timeoutId);\n  if (this.script2) {\n    this.script2.parentNode.removeChild(this.script2);\n    this.script2 = null;\n  }\n  if (this.script) {\n    var script = this.script;\n    // Unfortunately, you can't really abort script loading of\n    // the script.\n    script.parentNode.removeChild(script);\n    script.onreadystatechange = script.onerror =\n        script.onload = script.onclick = null;\n    this.script = null;\n  }\n  delete global[utils.WPrefix][this.id];\n};\n\nJsonpReceiver.prototype._scriptError = function() {\n  debug('_scriptError');\n  var self = this;\n  if (this.errorTimer) {\n    return;\n  }\n\n  this.errorTimer = setTimeout(function() {\n    if (!self.loadedOkay) {\n      self._abort(new Error('JSONP script loaded abnormally (onerror)'));\n    }\n  }, JsonpReceiver.scriptErrorTimeout);\n};\n\nJsonpReceiver.prototype._createScript = function(url) {\n  debug('_createScript', url);\n  var self = this;\n  var script = this.script = global.document.createElement('script');\n  var script2;  // Opera synchronous load trick.\n\n  script.id = 'a' + random.string(8);\n  script.src = url;\n  script.type = 'text/javascript';\n  script.charset = 'UTF-8';\n  script.onerror = this._scriptError.bind(this);\n  script.onload = function() {\n    debug('onload');\n    self._abort(new Error('JSONP script loaded abnormally (onload)'));\n  };\n\n  // IE9 fires 'error' event after onreadystatechange or before, in random order.\n  // Use loadedOkay to determine if actually errored\n  script.onreadystatechange = function() {\n    debug('onreadystatechange', script.readyState);\n    if (/loaded|closed/.test(script.readyState)) {\n      if (script && script.htmlFor && script.onclick) {\n        self.loadedOkay = true;\n        try {\n          // In IE, actually execute the script.\n          script.onclick();\n        } catch (x) {\n          // intentionally empty\n        }\n      }\n      if (script) {\n        self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)'));\n      }\n    }\n  };\n  // IE: event/htmlFor/onclick trick.\n  // One can't rely on proper order for onreadystatechange. In order to\n  // make sure, set a 'htmlFor' and 'event' properties, so that\n  // script code will be installed as 'onclick' handler for the\n  // script object. Later, onreadystatechange, manually execute this\n  // code. FF and Chrome doesn't work with 'event' and 'htmlFor'\n  // set. For reference see:\n  //   http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n  // Also, read on that about script ordering:\n  //   http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n  if (typeof script.async === 'undefined' && global.document.attachEvent) {\n    // According to mozilla docs, in recent browsers script.async defaults\n    // to 'true', so we may use it to detect a good browser:\n    // https://developer.mozilla.org/en/HTML/Element/script\n    if (!browser.isOpera()) {\n      // Naively assume we're in IE\n      try {\n        script.htmlFor = script.id;\n        script.event = 'onclick';\n      } catch (x) {\n        // intentionally empty\n      }\n      script.async = true;\n    } else {\n      // Opera, second sync script hack\n      script2 = this.script2 = global.document.createElement('script');\n      script2.text = \"try{var a = document.getElementById('\" + script.id + \"'); if(a)a.onerror();}catch(x){};\";\n      script.async = script2.async = false;\n    }\n  }\n  if (typeof script.async !== 'undefined') {\n    script.async = true;\n  }\n\n  var head = global.document.getElementsByTagName('head')[0];\n  head.insertBefore(script, head.firstChild);\n  if (script2) {\n    head.insertBefore(script2, head.firstChild);\n  }\n};\n\nmodule.exports = JsonpReceiver;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/browser\":44,\"../../utils/iframe\":47,\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],32:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:xhr');\n}\n\nfunction XhrReceiver(url, AjaxObject) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n\n  this.bufferPosition = 0;\n\n  this.xo = new AjaxObject('POST', url, null);\n  this.xo.on('chunk', this._chunkHandler.bind(this));\n  this.xo.once('finish', function(status, text) {\n    debug('finish', status, text);\n    self._chunkHandler(status, text);\n    self.xo = null;\n    var reason = status === 200 ? 'network' : 'permanent';\n    debug('close', reason);\n    self.emit('close', null, reason);\n    self._cleanup();\n  });\n}\n\ninherits(XhrReceiver, EventEmitter);\n\nXhrReceiver.prototype._chunkHandler = function(status, text) {\n  debug('_chunkHandler', status);\n  if (status !== 200 || !text) {\n    return;\n  }\n\n  for (var idx = -1; ; this.bufferPosition += idx + 1) {\n    var buf = text.slice(this.bufferPosition);\n    idx = buf.indexOf('\\n');\n    if (idx === -1) {\n      break;\n    }\n    var msg = buf.slice(0, idx);\n    if (msg) {\n      debug('message', msg);\n      this.emit('message', msg);\n    }\n  }\n};\n\nXhrReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nXhrReceiver.prototype.abort = function() {\n  debug('abort');\n  if (this.xo) {\n    this.xo.close();\n    debug('close');\n    this.emit('close', null, 'user');\n    this.xo = null;\n  }\n  this._cleanup();\n};\n\nmodule.exports = XhrReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],33:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar random = require('../../utils/random')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender:jsonp');\n}\n\nvar form, area;\n\nfunction createIframe(id) {\n  debug('createIframe', id);\n  try {\n    // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n    return global.document.createElement('<iframe name=\"' + id + '\">');\n  } catch (x) {\n    var iframe = global.document.createElement('iframe');\n    iframe.name = id;\n    return iframe;\n  }\n}\n\nfunction createForm() {\n  debug('createForm');\n  form = global.document.createElement('form');\n  form.style.display = 'none';\n  form.style.position = 'absolute';\n  form.method = 'POST';\n  form.enctype = 'application/x-www-form-urlencoded';\n  form.acceptCharset = 'UTF-8';\n\n  area = global.document.createElement('textarea');\n  area.name = 'd';\n  form.appendChild(area);\n\n  global.document.body.appendChild(form);\n}\n\nmodule.exports = function(url, payload, callback) {\n  debug(url, payload);\n  if (!form) {\n    createForm();\n  }\n  var id = 'a' + random.string(8);\n  form.target = id;\n  form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);\n\n  var iframe = createIframe(id);\n  iframe.id = id;\n  iframe.style.display = 'none';\n  form.appendChild(iframe);\n\n  try {\n    area.value = payload;\n  } catch (e) {\n    // seriously broken browsers get here\n  }\n  form.submit();\n\n  var completed = function(err) {\n    debug('completed', id, err);\n    if (!iframe.onerror) {\n      return;\n    }\n    iframe.onreadystatechange = iframe.onerror = iframe.onload = null;\n    // Opera mini doesn't like if we GC iframe\n    // immediately, thus this timeout.\n    setTimeout(function() {\n      debug('cleaning up', id);\n      iframe.parentNode.removeChild(iframe);\n      iframe = null;\n    }, 500);\n    area.value = '';\n    // It is not possible to detect if the iframe succeeded or\n    // failed to submit our form.\n    callback(err);\n  };\n  iframe.onerror = function() {\n    debug('onerror', id);\n    completed();\n  };\n  iframe.onload = function() {\n    debug('onload', id);\n    completed();\n  };\n  iframe.onreadystatechange = function(e) {\n    debug('onreadystatechange', id, iframe.readyState, e);\n    if (iframe.readyState === 'complete') {\n      completed();\n    }\n  };\n  return function() {\n    debug('aborted', id);\n    completed(new Error('Aborted'));\n  };\n};\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55}],34:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , eventUtils = require('../../utils/event')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender:xdr');\n}\n\n// References:\n//   http://ajaxian.com/archives/100-line-ajax-wrapper\n//   http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx\n\nfunction XDRObject(method, url, payload) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self._start(method, url, payload);\n  }, 0);\n}\n\ninherits(XDRObject, EventEmitter);\n\nXDRObject.prototype._start = function(method, url, payload) {\n  debug('_start');\n  var self = this;\n  var xdr = new global.XDomainRequest();\n  // IE caches even POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  xdr.onerror = function() {\n    debug('onerror');\n    self._error();\n  };\n  xdr.ontimeout = function() {\n    debug('ontimeout');\n    self._error();\n  };\n  xdr.onprogress = function() {\n    debug('progress', xdr.responseText);\n    self.emit('chunk', 200, xdr.responseText);\n  };\n  xdr.onload = function() {\n    debug('load');\n    self.emit('finish', 200, xdr.responseText);\n    self._cleanup(false);\n  };\n  this.xdr = xdr;\n  this.unloadRef = eventUtils.unloadAdd(function() {\n    self._cleanup(true);\n  });\n  try {\n    // Fails with AccessDenied if port number is bogus\n    this.xdr.open(method, url);\n    if (this.timeout) {\n      this.xdr.timeout = this.timeout;\n    }\n    this.xdr.send(payload);\n  } catch (x) {\n    this._error();\n  }\n};\n\nXDRObject.prototype._error = function() {\n  this.emit('finish', 0, '');\n  this._cleanup(false);\n};\n\nXDRObject.prototype._cleanup = function(abort) {\n  debug('cleanup', abort);\n  if (!this.xdr) {\n    return;\n  }\n  this.removeAllListeners();\n  eventUtils.unloadDel(this.unloadRef);\n\n  this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;\n  if (abort) {\n    try {\n      this.xdr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xdr = null;\n};\n\nXDRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\n// IE 8/9 if the request target uses the same scheme - #79\nXDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());\n\nmodule.exports = XDRObject;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/browser\":44,\"../../utils/event\":46,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],35:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRCorsObject(method, url, payload, opts) {\n  XhrDriver.call(this, method, url, payload, opts);\n}\n\ninherits(XHRCorsObject, XhrDriver);\n\nXHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS;\n\nmodule.exports = XHRCorsObject;\n\n},{\"../driver/xhr\":17,\"inherits\":57}],36:[function(require,module,exports){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  ;\n\nfunction XHRFake(/* method, url, payload, opts */) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.to = setTimeout(function() {\n    self.emit('finish', 200, '{}');\n  }, XHRFake.timeout);\n}\n\ninherits(XHRFake, EventEmitter);\n\nXHRFake.prototype.close = function() {\n  clearTimeout(this.to);\n};\n\nXHRFake.timeout = 2000;\n\nmodule.exports = XHRFake;\n\n},{\"events\":3,\"inherits\":57}],37:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRLocalObject(method, url, payload /*, opts */) {\n  XhrDriver.call(this, method, url, payload, {\n    noCredentials: true\n  });\n}\n\ninherits(XHRLocalObject, XhrDriver);\n\nXHRLocalObject.enabled = XhrDriver.enabled;\n\nmodule.exports = XHRLocalObject;\n\n},{\"../driver/xhr\":17,\"inherits\":57}],38:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar utils = require('../utils/event')\n  , urlUtils = require('../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , WebsocketDriver = require('./driver/websocket')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:websocket');\n}\n\nfunction WebSocketTransport(transUrl, ignore, options) {\n  if (!WebSocketTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  EventEmitter.call(this);\n  debug('constructor', transUrl);\n\n  var self = this;\n  var url = urlUtils.addPath(transUrl, '/websocket');\n  if (url.slice(0, 5) === 'https') {\n    url = 'wss' + url.slice(5);\n  } else {\n    url = 'ws' + url.slice(4);\n  }\n  this.url = url;\n\n  this.ws = new WebsocketDriver(this.url, [], options);\n  this.ws.onmessage = function(e) {\n    debug('message event', e.data);\n    self.emit('message', e.data);\n  };\n  // Firefox has an interesting bug. If a websocket connection is\n  // created after onunload, it stays alive even when user\n  // navigates away from the page. In such situation let's lie -\n  // let's not open the ws connection at all. See:\n  // https://github.com/sockjs/sockjs-client/issues/28\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=696085\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload');\n    self.ws.close();\n  });\n  this.ws.onclose = function(e) {\n    debug('close event', e.code, e.reason);\n    self.emit('close', e.code, e.reason);\n    self._cleanup();\n  };\n  this.ws.onerror = function(e) {\n    debug('error event', e);\n    self.emit('close', 1006, 'WebSocket connection broken');\n    self._cleanup();\n  };\n}\n\ninherits(WebSocketTransport, EventEmitter);\n\nWebSocketTransport.prototype.send = function(data) {\n  var msg = '[' + data + ']';\n  debug('send', msg);\n  this.ws.send(msg);\n};\n\nWebSocketTransport.prototype.close = function() {\n  debug('close');\n  var ws = this.ws;\n  this._cleanup();\n  if (ws) {\n    ws.close();\n  }\n};\n\nWebSocketTransport.prototype._cleanup = function() {\n  debug('_cleanup');\n  var ws = this.ws;\n  if (ws) {\n    ws.onmessage = ws.onclose = ws.onerror = null;\n  }\n  utils.unloadDel(this.unloadRef);\n  this.unloadRef = this.ws = null;\n  this.removeAllListeners();\n};\n\nWebSocketTransport.enabled = function() {\n  debug('enabled');\n  return !!WebsocketDriver;\n};\nWebSocketTransport.transportName = 'websocket';\n\n// In theory, ws should require 1 round trip. But in chrome, this is\n// not very stable over SSL. Most likely a ws connection requires a\n// separate SSL connection, in which case 2 round trips are an\n// absolute minumum.\nWebSocketTransport.roundTrips = 2;\n\nmodule.exports = WebSocketTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../utils/event\":46,\"../utils/url\":52,\"./driver/websocket\":19,\"debug\":55,\"events\":3,\"inherits\":57}],39:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XdrStreamingTransport = require('./xdr-streaming')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\nfunction XdrPollingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject);\n}\n\ninherits(XdrPollingTransport, AjaxBasedTransport);\n\nXdrPollingTransport.enabled = XdrStreamingTransport.enabled;\nXdrPollingTransport.transportName = 'xdr-polling';\nXdrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrPollingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xdr\":34,\"./xdr-streaming\":40,\"inherits\":57}],40:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\n// According to:\n//   http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests\n//   http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n\nfunction XdrStreamingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject);\n}\n\ninherits(XdrStreamingTransport, AjaxBasedTransport);\n\nXdrStreamingTransport.enabled = function(info) {\n  if (info.cookie_needed || info.nullOrigin) {\n    return false;\n  }\n  return XDRObject.enabled && info.sameScheme;\n};\n\nXdrStreamingTransport.transportName = 'xdr-streaming';\nXdrStreamingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrStreamingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xdr\":34,\"inherits\":57}],41:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  ;\n\nfunction XhrPollingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrPollingTransport, AjaxBasedTransport);\n\nXhrPollingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n\n  if (XHRLocalObject.enabled && info.sameOrigin) {\n    return true;\n  }\n  return XHRCorsObject.enabled;\n};\n\nXhrPollingTransport.transportName = 'xhr-polling';\nXhrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XhrPollingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xhr-cors\":35,\"./sender/xhr-local\":37,\"inherits\":57}],42:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , browser = require('../utils/browser')\n  ;\n\nfunction XhrStreamingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrStreamingTransport, AjaxBasedTransport);\n\nXhrStreamingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n  // Opera doesn't support xhr-streaming #60\n  // But it might be able to #92\n  if (browser.isOpera()) {\n    return false;\n  }\n\n  return XHRCorsObject.enabled;\n};\n\nXhrStreamingTransport.transportName = 'xhr-streaming';\nXhrStreamingTransport.roundTrips = 2; // preflight, ajax\n\n// Safari gets confused when a streaming ajax request is started\n// before onload. This causes the load indicator to spin indefinetely.\n// Only require body when used in a browser\nXhrStreamingTransport.needBody = !!global.document;\n\nmodule.exports = XhrStreamingTransport;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../utils/browser\":44,\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xhr-cors\":35,\"./sender/xhr-local\":37,\"inherits\":57}],43:[function(require,module,exports){\n(function (global){\n'use strict';\n\nif (global.crypto && global.crypto.getRandomValues) {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Uint8Array(length);\n    global.crypto.getRandomValues(bytes);\n    return bytes;\n  };\n} else {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Array(length);\n    for (var i = 0; i < length; i++) {\n      bytes[i] = Math.floor(Math.random() * 256);\n    }\n    return bytes;\n  };\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],44:[function(require,module,exports){\n(function (global){\n'use strict';\n\nmodule.exports = {\n  isOpera: function() {\n    return global.navigator &&\n      /opera/i.test(global.navigator.userAgent);\n  }\n\n, isKonqueror: function() {\n    return global.navigator &&\n      /konqueror/i.test(global.navigator.userAgent);\n  }\n\n  // #187 wrap document.domain in try/catch because of WP8 from file:///\n, hasDomain: function () {\n    // non-browser client always has a domain\n    if (!global.document) {\n      return true;\n    }\n\n    try {\n      return !!global.document.domain;\n    } catch (e) {\n      return false;\n    }\n  }\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],45:[function(require,module,exports){\n'use strict';\n\nvar JSON3 = require('json3');\n\n// Some extra characters that Chrome gets wrong, and substitutes with\n// something else on the wire.\n// eslint-disable-next-line no-control-regex\nvar extraEscapable = /[\\x00-\\x1f\\ud800-\\udfff\\ufffe\\uffff\\u0300-\\u0333\\u033d-\\u0346\\u034a-\\u034c\\u0350-\\u0352\\u0357-\\u0358\\u035c-\\u0362\\u0374\\u037e\\u0387\\u0591-\\u05af\\u05c4\\u0610-\\u0617\\u0653-\\u0654\\u0657-\\u065b\\u065d-\\u065e\\u06df-\\u06e2\\u06eb-\\u06ec\\u0730\\u0732-\\u0733\\u0735-\\u0736\\u073a\\u073d\\u073f-\\u0741\\u0743\\u0745\\u0747\\u07eb-\\u07f1\\u0951\\u0958-\\u095f\\u09dc-\\u09dd\\u09df\\u0a33\\u0a36\\u0a59-\\u0a5b\\u0a5e\\u0b5c-\\u0b5d\\u0e38-\\u0e39\\u0f43\\u0f4d\\u0f52\\u0f57\\u0f5c\\u0f69\\u0f72-\\u0f76\\u0f78\\u0f80-\\u0f83\\u0f93\\u0f9d\\u0fa2\\u0fa7\\u0fac\\u0fb9\\u1939-\\u193a\\u1a17\\u1b6b\\u1cda-\\u1cdb\\u1dc0-\\u1dcf\\u1dfc\\u1dfe\\u1f71\\u1f73\\u1f75\\u1f77\\u1f79\\u1f7b\\u1f7d\\u1fbb\\u1fbe\\u1fc9\\u1fcb\\u1fd3\\u1fdb\\u1fe3\\u1feb\\u1fee-\\u1fef\\u1ff9\\u1ffb\\u1ffd\\u2000-\\u2001\\u20d0-\\u20d1\\u20d4-\\u20d7\\u20e7-\\u20e9\\u2126\\u212a-\\u212b\\u2329-\\u232a\\u2adc\\u302b-\\u302c\\uaab2-\\uaab3\\uf900-\\ufa0d\\ufa10\\ufa12\\ufa15-\\ufa1e\\ufa20\\ufa22\\ufa25-\\ufa26\\ufa2a-\\ufa2d\\ufa30-\\ufa6d\\ufa70-\\ufad9\\ufb1d\\ufb1f\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4e\\ufff0-\\uffff]/g\n  , extraLookup;\n\n// This may be quite slow, so let's delay until user actually uses bad\n// characters.\nvar unrollLookup = function(escapable) {\n  var i;\n  var unrolled = {};\n  var c = [];\n  for (i = 0; i < 65536; i++) {\n    c.push( String.fromCharCode(i) );\n  }\n  escapable.lastIndex = 0;\n  c.join('').replace(escapable, function(a) {\n    unrolled[ a ] = '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n    return '';\n  });\n  escapable.lastIndex = 0;\n  return unrolled;\n};\n\n// Quote string, also taking care of unicode characters that browsers\n// often break. Especially, take care of unicode surrogates:\n// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates\nmodule.exports = {\n  quote: function(string) {\n    var quoted = JSON3.stringify(string);\n\n    // In most cases this should be very fast and good enough.\n    extraEscapable.lastIndex = 0;\n    if (!extraEscapable.test(quoted)) {\n      return quoted;\n    }\n\n    if (!extraLookup) {\n      extraLookup = unrollLookup(extraEscapable);\n    }\n\n    return quoted.replace(extraEscapable, function(a) {\n      return extraLookup[a];\n    });\n  }\n};\n\n},{\"json3\":58}],46:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar random = require('./random');\n\nvar onUnload = {}\n  , afterUnload = false\n    // detect google chrome packaged apps because they don't allow the 'unload' event\n  , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime\n  ;\n\nmodule.exports = {\n  attachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.addEventListener(event, listener, false);\n    } else if (global.document && global.attachEvent) {\n      // IE quirks.\n      // According to: http://stevesouders.com/misc/test-postmessage.php\n      // the message gets delivered only to 'document', not 'window'.\n      global.document.attachEvent('on' + event, listener);\n      // I get 'window' for ie8.\n      global.attachEvent('on' + event, listener);\n    }\n  }\n\n, detachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.removeEventListener(event, listener, false);\n    } else if (global.document && global.detachEvent) {\n      global.document.detachEvent('on' + event, listener);\n      global.detachEvent('on' + event, listener);\n    }\n  }\n\n, unloadAdd: function(listener) {\n    if (isChromePackagedApp) {\n      return null;\n    }\n\n    var ref = random.string(8);\n    onUnload[ref] = listener;\n    if (afterUnload) {\n      setTimeout(this.triggerUnloadCallbacks, 0);\n    }\n    return ref;\n  }\n\n, unloadDel: function(ref) {\n    if (ref in onUnload) {\n      delete onUnload[ref];\n    }\n  }\n\n, triggerUnloadCallbacks: function() {\n    for (var ref in onUnload) {\n      onUnload[ref]();\n      delete onUnload[ref];\n    }\n  }\n};\n\nvar unloadTriggered = function() {\n  if (afterUnload) {\n    return;\n  }\n  afterUnload = true;\n  module.exports.triggerUnloadCallbacks();\n};\n\n// 'unload' alone is not reliable in opera within an iframe, but we\n// can't use `beforeunload` as IE fires it on javascript: links.\nif (!isChromePackagedApp) {\n  module.exports.attachEvent('unload', unloadTriggered);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./random\":50}],47:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar eventUtils = require('./event')\n  , JSON3 = require('json3')\n  , browser = require('./browser')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:iframe');\n}\n\nmodule.exports = {\n  WPrefix: '_jp'\n, currentWindowId: null\n\n, polluteGlobalNamespace: function() {\n    if (!(module.exports.WPrefix in global)) {\n      global[module.exports.WPrefix] = {};\n    }\n  }\n\n, postMessage: function(type, data) {\n    if (global.parent !== global) {\n      global.parent.postMessage(JSON3.stringify({\n        windowId: module.exports.currentWindowId\n      , type: type\n      , data: data || ''\n      }), '*');\n    } else {\n      debug('Cannot postMessage, no parent window.', type, data);\n    }\n  }\n\n, createIframe: function(iframeUrl, errorCallback) {\n    var iframe = global.document.createElement('iframe');\n    var tref, unloadRef;\n    var unattach = function() {\n      debug('unattach');\n      clearTimeout(tref);\n      // Explorer had problems with that.\n      try {\n        iframe.onload = null;\n      } catch (x) {\n        // intentionally empty\n      }\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      debug('cleanup');\n      if (iframe) {\n        unattach();\n        // This timeout makes chrome fire onbeforeunload event\n        // within iframe. Without the timeout it goes straight to\n        // onunload.\n        setTimeout(function() {\n          if (iframe) {\n            iframe.parentNode.removeChild(iframe);\n          }\n          iframe = null;\n        }, 0);\n        eventUtils.unloadDel(unloadRef);\n      }\n    };\n    var onerror = function(err) {\n      debug('onerror', err);\n      if (iframe) {\n        cleanup();\n        errorCallback(err);\n      }\n    };\n    var post = function(msg, origin) {\n      debug('post', msg, origin);\n      setTimeout(function() {\n        try {\n          // When the iframe is not loaded, IE raises an exception\n          // on 'contentWindow'.\n          if (iframe && iframe.contentWindow) {\n            iframe.contentWindow.postMessage(msg, origin);\n          }\n        } catch (x) {\n          // intentionally empty\n        }\n      }, 0);\n    };\n\n    iframe.src = iframeUrl;\n    iframe.style.display = 'none';\n    iframe.style.position = 'absolute';\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    iframe.onload = function() {\n      debug('onload');\n      // `onload` is triggered before scripts on the iframe are\n      // executed. Give it few seconds to actually load stuff.\n      clearTimeout(tref);\n      tref = setTimeout(function() {\n        onerror('onload timeout');\n      }, 2000);\n    };\n    global.document.body.appendChild(iframe);\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n\n/* eslint no-undef: \"off\", new-cap: \"off\" */\n, createHtmlfile: function(iframeUrl, errorCallback) {\n    var axo = ['Active'].concat('Object').join('X');\n    var doc = new global[axo]('htmlfile');\n    var tref, unloadRef;\n    var iframe;\n    var unattach = function() {\n      clearTimeout(tref);\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      if (doc) {\n        unattach();\n        eventUtils.unloadDel(unloadRef);\n        iframe.parentNode.removeChild(iframe);\n        iframe = doc = null;\n        CollectGarbage();\n      }\n    };\n    var onerror = function(r) {\n      debug('onerror', r);\n      if (doc) {\n        cleanup();\n        errorCallback(r);\n      }\n    };\n    var post = function(msg, origin) {\n      try {\n        // When the iframe is not loaded, IE raises an exception\n        // on 'contentWindow'.\n        setTimeout(function() {\n          if (iframe && iframe.contentWindow) {\n              iframe.contentWindow.postMessage(msg, origin);\n          }\n        }, 0);\n      } catch (x) {\n        // intentionally empty\n      }\n    };\n\n    doc.open();\n    doc.write('<html><s' + 'cript>' +\n              'document.domain=\"' + global.document.domain + '\";' +\n              '</s' + 'cript></html>');\n    doc.close();\n    doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix];\n    var c = doc.createElement('div');\n    doc.body.appendChild(c);\n    iframe = doc.createElement('iframe');\n    c.appendChild(iframe);\n    iframe.src = iframeUrl;\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n};\n\nmodule.exports.iframeEnabled = false;\nif (global.document) {\n  // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with\n  // huge delay, or not at all.\n  module.exports.iframeEnabled = (typeof global.postMessage === 'function' ||\n    typeof global.postMessage === 'object') && (!browser.isKonqueror());\n}\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./browser\":44,\"./event\":46,\"debug\":55,\"json3\":58}],48:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar logObject = {};\n['log', 'debug', 'warn'].forEach(function (level) {\n  var levelExists;\n\n  try {\n    levelExists = global.console && global.console[level] && global.console[level].apply;\n  } catch(e) {\n    // do nothing\n  }\n\n  logObject[level] = levelExists ? function () {\n    return global.console[level].apply(global.console, arguments);\n  } : (level === 'log' ? function () {} : logObject.log);\n});\n\nmodule.exports = logObject;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],49:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  isObject: function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  }\n\n, extend: function(obj) {\n    if (!this.isObject(obj)) {\n      return obj;\n    }\n    var source, prop;\n    for (var i = 1, length = arguments.length; i < length; i++) {\n      source = arguments[i];\n      for (prop in source) {\n        if (Object.prototype.hasOwnProperty.call(source, prop)) {\n          obj[prop] = source[prop];\n        }\n      }\n    }\n    return obj;\n  }\n};\n\n},{}],50:[function(require,module,exports){\n'use strict';\n\n/* global crypto:true */\nvar crypto = require('crypto');\n\n// This string has length 32, a power of 2, so the modulus doesn't introduce a\n// bias.\nvar _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345';\nmodule.exports = {\n  string: function(length) {\n    var max = _randomStringChars.length;\n    var bytes = crypto.randomBytes(length);\n    var ret = [];\n    for (var i = 0; i < length; i++) {\n      ret.push(_randomStringChars.substr(bytes[i] % max, 1));\n    }\n    return ret.join('');\n  }\n\n, number: function(max) {\n    return Math.floor(Math.random() * max);\n  }\n\n, numberString: function(max) {\n    var t = ('' + (max - 1)).length;\n    var p = new Array(t + 1).join('0');\n    return (p + this.number(max)).slice(-t);\n  }\n};\n\n},{\"crypto\":43}],51:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:transport');\n}\n\nmodule.exports = function(availableTransports) {\n  return {\n    filterToEnabled: function(transportsWhitelist, info) {\n      var transports = {\n        main: []\n      , facade: []\n      };\n      if (!transportsWhitelist) {\n        transportsWhitelist = [];\n      } else if (typeof transportsWhitelist === 'string') {\n        transportsWhitelist = [transportsWhitelist];\n      }\n\n      availableTransports.forEach(function(trans) {\n        if (!trans) {\n          return;\n        }\n\n        if (trans.transportName === 'websocket' && info.websocket === false) {\n          debug('disabled from server', 'websocket');\n          return;\n        }\n\n        if (transportsWhitelist.length &&\n            transportsWhitelist.indexOf(trans.transportName) === -1) {\n          debug('not in whitelist', trans.transportName);\n          return;\n        }\n\n        if (trans.enabled(info)) {\n          debug('enabled', trans.transportName);\n          transports.main.push(trans);\n          if (trans.facadeTransport) {\n            transports.facade.push(trans.facadeTransport);\n          }\n        } else {\n          debug('disabled', trans.transportName);\n        }\n      });\n      return transports;\n    }\n  };\n};\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55}],52:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar URL = require('url-parse');\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:url');\n}\n\nmodule.exports = {\n  getOrigin: function(url) {\n    if (!url) {\n      return null;\n    }\n\n    var p = new URL(url);\n    if (p.protocol === 'file:') {\n      return null;\n    }\n\n    var port = p.port;\n    if (!port) {\n      port = (p.protocol === 'https:') ? '443' : '80';\n    }\n\n    return p.protocol + '//' + p.hostname + ':' + port;\n  }\n\n, isOriginEqual: function(a, b) {\n    var res = this.getOrigin(a) === this.getOrigin(b);\n    debug('same', a, b, res);\n    return res;\n  }\n\n, isSchemeEqual: function(a, b) {\n    return (a.split(':')[0] === b.split(':')[0]);\n  }\n\n, addPath: function (url, path) {\n    var qs = url.split('?');\n    return qs[0] + path + (qs[1] ? '?' + qs[1] : '');\n  }\n\n, addQuery: function (url, q) {\n    return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q));\n  }\n};\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"url-parse\":61}],53:[function(require,module,exports){\nmodule.exports = '1.4.0';\n\n},{}],54:[function(require,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\-?\\d?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n},{}],55:[function(require,module,exports){\n(function (process){\n\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n    return true;\n  } // Internet Explorer and Edge do not support colors.\n\n\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  } // Is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n  args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n  if (!this.useColors) {\n    return;\n  }\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n    if (match === '%%') {\n      return;\n    }\n\n    index++;\n\n    if (match === '%c') {\n      // We only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n  args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n  var _console;\n\n  // This hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n  try {\n    if (namespaces) {\n      exports.storage.setItem('debug', namespaces);\n    } else {\n      exports.storage.removeItem('debug');\n    }\n  } catch (error) {// Swallow\n    // XXX (@Qix-) should we be logging these?\n  }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n  var r;\n\n  try {\n    r = exports.storage.getItem('debug');\n  } catch (error) {} // Swallow\n  // XXX (@Qix-) should we be logging these?\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n  try {\n    // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n    // The Browser also has localStorage in the global context.\n    return localStorage;\n  } catch (error) {// Swallow\n    // XXX (@Qix-) should we be logging these?\n  }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n  try {\n    return JSON.stringify(v);\n  } catch (error) {\n    return '[UnexpectedJSONParseError]: ' + error.message;\n  }\n};\n\n\n}).call(this,{ env: {} })\n\n},{\"./common\":56}],56:[function(require,module,exports){\n\"use strict\";\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\nfunction setup(env) {\n  createDebug.debug = createDebug;\n  createDebug.default = createDebug;\n  createDebug.coerce = coerce;\n  createDebug.disable = disable;\n  createDebug.enable = enable;\n  createDebug.enabled = enabled;\n  createDebug.humanize = require('ms');\n  Object.keys(env).forEach(function (key) {\n    createDebug[key] = env[key];\n  });\n  /**\n  * Active `debug` instances.\n  */\n\n  createDebug.instances = [];\n  /**\n  * The currently active debug mode names, and names to skip.\n  */\n\n  createDebug.names = [];\n  createDebug.skips = [];\n  /**\n  * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n  *\n  * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n  */\n\n  createDebug.formatters = {};\n  /**\n  * Selects a color for a debug namespace\n  * @param {String} namespace The namespace string for the for the debug instance to be colored\n  * @return {Number|String} An ANSI color code for the given namespace\n  * @api private\n  */\n\n  function selectColor(namespace) {\n    var hash = 0;\n\n    for (var i = 0; i < namespace.length; i++) {\n      hash = (hash << 5) - hash + namespace.charCodeAt(i);\n      hash |= 0; // Convert to 32bit integer\n    }\n\n    return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n  }\n\n  createDebug.selectColor = selectColor;\n  /**\n  * Create a debugger with the given `namespace`.\n  *\n  * @param {String} namespace\n  * @return {Function}\n  * @api public\n  */\n\n  function createDebug(namespace) {\n    var prevTime;\n\n    function debug() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      // Disabled?\n      if (!debug.enabled) {\n        return;\n      }\n\n      var self = debug; // Set `diff` timestamp\n\n      var curr = Number(new Date());\n      var ms = curr - (prevTime || curr);\n      self.diff = ms;\n      self.prev = prevTime;\n      self.curr = curr;\n      prevTime = curr;\n      args[0] = createDebug.coerce(args[0]);\n\n      if (typeof args[0] !== 'string') {\n        // Anything else let's inspect with %O\n        args.unshift('%O');\n      } // Apply any `formatters` transformations\n\n\n      var index = 0;\n      args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n        // If we encounter an escaped % then don't increase the array index\n        if (match === '%%') {\n          return match;\n        }\n\n        index++;\n        var formatter = createDebug.formatters[format];\n\n        if (typeof formatter === 'function') {\n          var val = args[index];\n          match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n          args.splice(index, 1);\n          index--;\n        }\n\n        return match;\n      }); // Apply env-specific formatting (colors, etc.)\n\n      createDebug.formatArgs.call(self, args);\n      var logFn = self.log || createDebug.log;\n      logFn.apply(self, args);\n    }\n\n    debug.namespace = namespace;\n    debug.enabled = createDebug.enabled(namespace);\n    debug.useColors = createDebug.useColors();\n    debug.color = selectColor(namespace);\n    debug.destroy = destroy;\n    debug.extend = extend; // Debug.formatArgs = formatArgs;\n    // debug.rawLog = rawLog;\n    // env-specific initialization logic for debug instances\n\n    if (typeof createDebug.init === 'function') {\n      createDebug.init(debug);\n    }\n\n    createDebug.instances.push(debug);\n    return debug;\n  }\n\n  function destroy() {\n    var index = createDebug.instances.indexOf(this);\n\n    if (index !== -1) {\n      createDebug.instances.splice(index, 1);\n      return true;\n    }\n\n    return false;\n  }\n\n  function extend(namespace, delimiter) {\n    return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n  }\n  /**\n  * Enables a debug mode by namespaces. This can include modes\n  * separated by a colon and wildcards.\n  *\n  * @param {String} namespaces\n  * @api public\n  */\n\n\n  function enable(namespaces) {\n    createDebug.save(namespaces);\n    createDebug.names = [];\n    createDebug.skips = [];\n    var i;\n    var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n    var len = split.length;\n\n    for (i = 0; i < len; i++) {\n      if (!split[i]) {\n        // ignore empty strings\n        continue;\n      }\n\n      namespaces = split[i].replace(/\\*/g, '.*?');\n\n      if (namespaces[0] === '-') {\n        createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n      } else {\n        createDebug.names.push(new RegExp('^' + namespaces + '$'));\n      }\n    }\n\n    for (i = 0; i < createDebug.instances.length; i++) {\n      var instance = createDebug.instances[i];\n      instance.enabled = createDebug.enabled(instance.namespace);\n    }\n  }\n  /**\n  * Disable debug output.\n  *\n  * @api public\n  */\n\n\n  function disable() {\n    createDebug.enable('');\n  }\n  /**\n  * Returns true if the given mode name is enabled, false otherwise.\n  *\n  * @param {String} name\n  * @return {Boolean}\n  * @api public\n  */\n\n\n  function enabled(name) {\n    if (name[name.length - 1] === '*') {\n      return true;\n    }\n\n    var i;\n    var len;\n\n    for (i = 0, len = createDebug.skips.length; i < len; i++) {\n      if (createDebug.skips[i].test(name)) {\n        return false;\n      }\n    }\n\n    for (i = 0, len = createDebug.names.length; i < len; i++) {\n      if (createDebug.names[i].test(name)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n  /**\n  * Coerce `val`.\n  *\n  * @param {Mixed} val\n  * @return {Mixed}\n  * @api private\n  */\n\n\n  function coerce(val) {\n    if (val instanceof Error) {\n      return val.stack || val.message;\n    }\n\n    return val;\n  }\n\n  createDebug.enable(createDebug.load());\n  return createDebug;\n}\n\nmodule.exports = setup;\n\n\n},{\"ms\":54}],57:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],58:[function(require,module,exports){\n(function (global){\n/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n  // Detect the `define` function exposed by asynchronous module loaders. The\n  // strict `define` check is necessary for compatibility with `r.js`.\n  var isLoader = typeof define === \"function\" && define.amd;\n\n  // A set of types used to distinguish objects from primitives.\n  var objectTypes = {\n    \"function\": true,\n    \"object\": true\n  };\n\n  // Detect the `exports` object exposed by CommonJS implementations.\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  // Use the `global` object exposed by Node (including Browserify via\n  // `insert-module-globals`), Narwhal, and Ringo as the default context,\n  // and the `window` object in browsers. Rhino exports a `global` function\n  // instead.\n  var root = objectTypes[typeof window] && window || this,\n      freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n  if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  // Public: Initializes JSON 3 using the given `context` object, attaching the\n  // `stringify` and `parse` functions to the specified `exports` object.\n  function runInContext(context, exports) {\n    context || (context = root[\"Object\"]());\n    exports || (exports = root[\"Object\"]());\n\n    // Native constructor aliases.\n    var Number = context[\"Number\"] || root[\"Number\"],\n        String = context[\"String\"] || root[\"String\"],\n        Object = context[\"Object\"] || root[\"Object\"],\n        Date = context[\"Date\"] || root[\"Date\"],\n        SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n        TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n        Math = context[\"Math\"] || root[\"Math\"],\n        nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n    // Delegate to the native `stringify` and `parse` implementations.\n    if (typeof nativeJSON == \"object\" && nativeJSON) {\n      exports.stringify = nativeJSON.stringify;\n      exports.parse = nativeJSON.parse;\n    }\n\n    // Convenience aliases.\n    var objectProto = Object.prototype,\n        getClass = objectProto.toString,\n        isProperty, forEach, undef;\n\n    // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n    var isExtended = new Date(-3509827334573292);\n    try {\n      // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n      // results for certain dates in Opera >= 10.53.\n      isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n        // Safari < 2.0.2 stores the internal millisecond time value correctly,\n        // but clips the values returned by the date methods to the range of\n        // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n        isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n    } catch (exception) {}\n\n    // Internal: Determines whether the native `JSON.stringify` and `parse`\n    // implementations are spec-compliant. Based on work by Ken Snyder.\n    function has(name) {\n      if (has[name] !== undef) {\n        // Return cached feature test result.\n        return has[name];\n      }\n      var isSupported;\n      if (name == \"bug-string-char-index\") {\n        // IE <= 7 doesn't support accessing string characters using square\n        // bracket notation. IE 8 only supports this for primitives.\n        isSupported = \"a\"[0] != \"a\";\n      } else if (name == \"json\") {\n        // Indicates whether both `JSON.stringify` and `JSON.parse` are\n        // supported.\n        isSupported = has(\"json-stringify\") && has(\"json-parse\");\n      } else {\n        var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n        // Test `JSON.stringify`.\n        if (name == \"json-stringify\") {\n          var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n          if (stringifySupported) {\n            // A test function object with a custom `toJSON` method.\n            (value = function () {\n              return 1;\n            }).toJSON = value;\n            try {\n              stringifySupported =\n                // Firefox 3.1b1 and b2 serialize string, number, and boolean\n                // primitives as object literals.\n                stringify(0) === \"0\" &&\n                // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n                // literals.\n                stringify(new Number()) === \"0\" &&\n                stringify(new String()) == '\"\"' &&\n                // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n                // does not define a canonical JSON representation (this applies to\n                // objects with `toJSON` properties as well, *unless* they are nested\n                // within an object or array).\n                stringify(getClass) === undef &&\n                // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n                // FF 3.1b3 pass this test.\n                stringify(undef) === undef &&\n                // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n                // respectively, if the value is omitted entirely.\n                stringify() === undef &&\n                // FF 3.1b1, 2 throw an error if the given value is not a number,\n                // string, array, object, Boolean, or `null` literal. This applies to\n                // objects with custom `toJSON` methods as well, unless they are nested\n                // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n                // methods entirely.\n                stringify(value) === \"1\" &&\n                stringify([value]) == \"[1]\" &&\n                // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n                // `\"[null]\"`.\n                stringify([undef]) == \"[null]\" &&\n                // YUI 3.0.0b1 fails to serialize `null` literals.\n                stringify(null) == \"null\" &&\n                // FF 3.1b1, 2 halts serialization if an array contains a function:\n                // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n                // elides non-JSON values from objects and arrays, unless they\n                // define custom `toJSON` methods.\n                stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n                // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n                // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n                stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n                // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n                stringify(null, value) === \"1\" &&\n                stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n                // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n                // serialize extended years.\n                stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n                // The milliseconds are optional in ES 5, but required in 5.1.\n                stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n                // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n                // four-digit years instead of six-digit years. Credits: @Yaffle.\n                stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n                // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n                // values less than 1000. Credits: @Yaffle.\n                stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n            } catch (exception) {\n              stringifySupported = false;\n            }\n          }\n          isSupported = stringifySupported;\n        }\n        // Test `JSON.parse`.\n        if (name == \"json-parse\") {\n          var parse = exports.parse;\n          if (typeof parse == \"function\") {\n            try {\n              // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n              // Conforming implementations should also coerce the initial argument to\n              // a string prior to parsing.\n              if (parse(\"0\") === 0 && !parse(false)) {\n                // Simple parsing test.\n                value = parse(serialized);\n                var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n                if (parseSupported) {\n                  try {\n                    // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n                    parseSupported = !parse('\"\\t\"');\n                  } catch (exception) {}\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n                      // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n                      // certain octal literals.\n                      parseSupported = parse(\"01\") !== 1;\n                    } catch (exception) {}\n                  }\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n                      // points. These environments, along with FF 3.1b1 and 2,\n                      // also allow trailing commas in JSON objects and arrays.\n                      parseSupported = parse(\"1.\") !== 1;\n                    } catch (exception) {}\n                  }\n                }\n              }\n            } catch (exception) {\n              parseSupported = false;\n            }\n          }\n          isSupported = parseSupported;\n        }\n      }\n      return has[name] = !!isSupported;\n    }\n\n    if (!has(\"json\")) {\n      // Common `[[Class]]` name aliases.\n      var functionClass = \"[object Function]\",\n          dateClass = \"[object Date]\",\n          numberClass = \"[object Number]\",\n          stringClass = \"[object String]\",\n          arrayClass = \"[object Array]\",\n          booleanClass = \"[object Boolean]\";\n\n      // Detect incomplete support for accessing string characters by index.\n      var charIndexBuggy = has(\"bug-string-char-index\");\n\n      // Define additional utility methods if the `Date` methods are buggy.\n      if (!isExtended) {\n        var floor = Math.floor;\n        // A mapping between the months of the year and the number of days between\n        // January 1st and the first of the respective month.\n        var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n        // Internal: Calculates the number of days between the Unix epoch and the\n        // first day of the given month.\n        var getDay = function (year, month) {\n          return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n        };\n      }\n\n      // Internal: Determines if a property is a direct property of the given\n      // object. Delegates to the native `Object#hasOwnProperty` method.\n      if (!(isProperty = objectProto.hasOwnProperty)) {\n        isProperty = function (property) {\n          var members = {}, constructor;\n          if ((members.__proto__ = null, members.__proto__ = {\n            // The *proto* property cannot be set multiple times in recent\n            // versions of Firefox and SeaMonkey.\n            \"toString\": 1\n          }, members).toString != getClass) {\n            // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n            // supports the mutable *proto* property.\n            isProperty = function (property) {\n              // Capture and break the object's prototype chain (see section 8.6.2\n              // of the ES 5.1 spec). The parenthesized expression prevents an\n              // unsafe transformation by the Closure Compiler.\n              var original = this.__proto__, result = property in (this.__proto__ = null, this);\n              // Restore the original prototype chain.\n              this.__proto__ = original;\n              return result;\n            };\n          } else {\n            // Capture a reference to the top-level `Object` constructor.\n            constructor = members.constructor;\n            // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n            // other environments.\n            isProperty = function (property) {\n              var parent = (this.constructor || constructor).prototype;\n              return property in this && !(property in parent && this[property] === parent[property]);\n            };\n          }\n          members = null;\n          return isProperty.call(this, property);\n        };\n      }\n\n      // Internal: Normalizes the `for...in` iteration algorithm across\n      // environments. Each enumerated key is yielded to a `callback` function.\n      forEach = function (object, callback) {\n        var size = 0, Properties, members, property;\n\n        // Tests for bugs in the current environment's `for...in` algorithm. The\n        // `valueOf` property inherits the non-enumerable flag from\n        // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n        (Properties = function () {\n          this.valueOf = 0;\n        }).prototype.valueOf = 0;\n\n        // Iterate over a new instance of the `Properties` class.\n        members = new Properties();\n        for (property in members) {\n          // Ignore all properties inherited from `Object.prototype`.\n          if (isProperty.call(members, property)) {\n            size++;\n          }\n        }\n        Properties = members = null;\n\n        // Normalize the iteration algorithm.\n        if (!size) {\n          // A list of non-enumerable properties inherited from `Object.prototype`.\n          members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n          // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n          // properties.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, length;\n            var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n            for (property in object) {\n              // Gecko <= 1.0 enumerates the `prototype` property of functions under\n              // certain conditions; IE does not.\n              if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for each non-enumerable property.\n            for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n          };\n        } else if (size == 2) {\n          // Safari <= 2.0.4 enumerates shadowed properties twice.\n          forEach = function (object, callback) {\n            // Create a set of iterated properties.\n            var members = {}, isFunction = getClass.call(object) == functionClass, property;\n            for (property in object) {\n              // Store each property name to prevent double enumeration. The\n              // `prototype` property of functions is not enumerated due to cross-\n              // environment inconsistencies.\n              if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n          };\n        } else {\n          // No bugs detected; use the standard `for...in` algorithm.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n            for (property in object) {\n              if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for the `constructor` property due to\n            // cross-environment inconsistencies.\n            if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n              callback(property);\n            }\n          };\n        }\n        return forEach(object, callback);\n      };\n\n      // Public: Serializes a JavaScript `value` as a JSON string. The optional\n      // `filter` argument may specify either a function that alters how object and\n      // array members are serialized, or an array of strings and numbers that\n      // indicates which properties should be serialized. The optional `width`\n      // argument may be either a string or number that specifies the indentation\n      // level of the output.\n      if (!has(\"json-stringify\")) {\n        // Internal: A map of control characters and their escaped equivalents.\n        var Escapes = {\n          92: \"\\\\\\\\\",\n          34: '\\\\\"',\n          8: \"\\\\b\",\n          12: \"\\\\f\",\n          10: \"\\\\n\",\n          13: \"\\\\r\",\n          9: \"\\\\t\"\n        };\n\n        // Internal: Converts `value` into a zero-padded string such that its\n        // length is at least equal to `width`. The `width` must be <= 6.\n        var leadingZeroes = \"000000\";\n        var toPaddedString = function (width, value) {\n          // The `|| 0` expression is necessary to work around a bug in\n          // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n          return (leadingZeroes + (value || 0)).slice(-width);\n        };\n\n        // Internal: Double-quotes a string `value`, replacing all ASCII control\n        // characters (characters with code unit values between 0 and 31) with\n        // their escaped equivalents. This is an implementation of the\n        // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n        var unicodePrefix = \"\\\\u00\";\n        var quote = function (value) {\n          var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n          var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n          for (; index < length; index++) {\n            var charCode = value.charCodeAt(index);\n            // If the character is a control character, append its Unicode or\n            // shorthand escape sequence; otherwise, append the character as-is.\n            switch (charCode) {\n              case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n                result += Escapes[charCode];\n                break;\n              default:\n                if (charCode < 32) {\n                  result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n                  break;\n                }\n                result += useCharIndex ? symbols[index] : value.charAt(index);\n            }\n          }\n          return result + '\"';\n        };\n\n        // Internal: Recursively serializes an object. Implements the\n        // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n        var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n          var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n          try {\n            // Necessary for host object support.\n            value = object[property];\n          } catch (exception) {}\n          if (typeof value == \"object\" && value) {\n            className = getClass.call(value);\n            if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n              if (value > -1 / 0 && value < 1 / 0) {\n                // Dates are serialized according to the `Date#toJSON` method\n                // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n                // for the ISO 8601 date time string format.\n                if (getDay) {\n                  // Manually compute the year, month, date, hours, minutes,\n                  // seconds, and milliseconds if the `getUTC*` methods are\n                  // buggy. Adapted from @Yaffle's `date-shim` project.\n                  date = floor(value / 864e5);\n                  for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n                  for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n                  date = 1 + date - getDay(year, month);\n                  // The `time` value specifies the time within the day (see ES\n                  // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n                  // to compute `A modulo B`, as the `%` operator does not\n                  // correspond to the `modulo` operation for negative numbers.\n                  time = (value % 864e5 + 864e5) % 864e5;\n                  // The hours, minutes, seconds, and milliseconds are obtained by\n                  // decomposing the time within the day. See section 15.9.1.10.\n                  hours = floor(time / 36e5) % 24;\n                  minutes = floor(time / 6e4) % 60;\n                  seconds = floor(time / 1e3) % 60;\n                  milliseconds = time % 1e3;\n                } else {\n                  year = value.getUTCFullYear();\n                  month = value.getUTCMonth();\n                  date = value.getUTCDate();\n                  hours = value.getUTCHours();\n                  minutes = value.getUTCMinutes();\n                  seconds = value.getUTCSeconds();\n                  milliseconds = value.getUTCMilliseconds();\n                }\n                // Serialize extended years correctly.\n                value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n                  \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n                  // Months, dates, hours, minutes, and seconds should have two\n                  // digits; milliseconds should have three.\n                  \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n                  // Milliseconds are optional in ES 5.0, but required in 5.1.\n                  \".\" + toPaddedString(3, milliseconds) + \"Z\";\n              } else {\n                value = null;\n              }\n            } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n              // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n              // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n              // ignores all `toJSON` methods on these objects unless they are\n              // defined directly on an instance.\n              value = value.toJSON(property);\n            }\n          }\n          if (callback) {\n            // If a replacement function was provided, call it to obtain the value\n            // for serialization.\n            value = callback.call(object, property, value);\n          }\n          if (value === null) {\n            return \"null\";\n          }\n          className = getClass.call(value);\n          if (className == booleanClass) {\n            // Booleans are represented literally.\n            return \"\" + value;\n          } else if (className == numberClass) {\n            // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n            // `\"null\"`.\n            return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n          } else if (className == stringClass) {\n            // Strings are double-quoted and escaped.\n            return quote(\"\" + value);\n          }\n          // Recursively serialize objects and arrays.\n          if (typeof value == \"object\") {\n            // Check for cyclic structures. This is a linear search; performance\n            // is inversely proportional to the number of unique nested objects.\n            for (length = stack.length; length--;) {\n              if (stack[length] === value) {\n                // Cyclic structures cannot be serialized by `JSON.stringify`.\n                throw TypeError();\n              }\n            }\n            // Add the object to the stack of traversed objects.\n            stack.push(value);\n            results = [];\n            // Save the current indentation level and indent one additional level.\n            prefix = indentation;\n            indentation += whitespace;\n            if (className == arrayClass) {\n              // Recursively serialize array elements.\n              for (index = 0, length = value.length; index < length; index++) {\n                element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n                results.push(element === undef ? \"null\" : element);\n              }\n              result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n            } else {\n              // Recursively serialize object members. Members are selected from\n              // either a user-specified list of property names, or the object\n              // itself.\n              forEach(properties || value, function (property) {\n                var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n                if (element !== undef) {\n                  // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n                  // is not the empty string, let `member` {quote(property) + \":\"}\n                  // be the concatenation of `member` and the `space` character.\"\n                  // The \"`space` character\" refers to the literal space\n                  // character, not the `space` {width} argument provided to\n                  // `JSON.stringify`.\n                  results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n                }\n              });\n              result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n            }\n            // Remove the object from the traversed object stack.\n            stack.pop();\n            return result;\n          }\n        };\n\n        // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n        exports.stringify = function (source, filter, width) {\n          var whitespace, callback, properties, className;\n          if (objectTypes[typeof filter] && filter) {\n            if ((className = getClass.call(filter)) == functionClass) {\n              callback = filter;\n            } else if (className == arrayClass) {\n              // Convert the property names array into a makeshift set.\n              properties = {};\n              for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n            }\n          }\n          if (width) {\n            if ((className = getClass.call(width)) == numberClass) {\n              // Convert the `width` to an integer and create a string containing\n              // `width` number of space characters.\n              if ((width -= width % 1) > 0) {\n                for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n              }\n            } else if (className == stringClass) {\n              whitespace = width.length <= 10 ? width : width.slice(0, 10);\n            }\n          }\n          // Opera <= 7.54u2 discards the values associated with empty string keys\n          // (`\"\"`) only if they are used directly within an object member list\n          // (e.g., `!(\"\" in { \"\": 1})`).\n          return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n        };\n      }\n\n      // Public: Parses a JSON source string.\n      if (!has(\"json-parse\")) {\n        var fromCharCode = String.fromCharCode;\n\n        // Internal: A map of escaped control characters and their unescaped\n        // equivalents.\n        var Unescapes = {\n          92: \"\\\\\",\n          34: '\"',\n          47: \"/\",\n          98: \"\\b\",\n          116: \"\\t\",\n          110: \"\\n\",\n          102: \"\\f\",\n          114: \"\\r\"\n        };\n\n        // Internal: Stores the parser state.\n        var Index, Source;\n\n        // Internal: Resets the parser state and throws a `SyntaxError`.\n        var abort = function () {\n          Index = Source = null;\n          throw SyntaxError();\n        };\n\n        // Internal: Returns the next token, or `\"$\"` if the parser has reached\n        // the end of the source string. A token may be a string, number, `null`\n        // literal, or Boolean literal.\n        var lex = function () {\n          var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n          while (Index < length) {\n            charCode = source.charCodeAt(Index);\n            switch (charCode) {\n              case 9: case 10: case 13: case 32:\n                // Skip whitespace tokens, including tabs, carriage returns, line\n                // feeds, and space characters.\n                Index++;\n                break;\n              case 123: case 125: case 91: case 93: case 58: case 44:\n                // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n                // the current position.\n                value = charIndexBuggy ? source.charAt(Index) : source[Index];\n                Index++;\n                return value;\n              case 34:\n                // `\"` delimits a JSON string; advance to the next character and\n                // begin parsing the string. String tokens are prefixed with the\n                // sentinel `@` character to distinguish them from punctuators and\n                // end-of-string tokens.\n                for (value = \"@\", Index++; Index < length;) {\n                  charCode = source.charCodeAt(Index);\n                  if (charCode < 32) {\n                    // Unescaped ASCII control characters (those with a code unit\n                    // less than the space character) are not permitted.\n                    abort();\n                  } else if (charCode == 92) {\n                    // A reverse solidus (`\\`) marks the beginning of an escaped\n                    // control character (including `\"`, `\\`, and `/`) or Unicode\n                    // escape sequence.\n                    charCode = source.charCodeAt(++Index);\n                    switch (charCode) {\n                      case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n                        // Revive escaped control characters.\n                        value += Unescapes[charCode];\n                        Index++;\n                        break;\n                      case 117:\n                        // `\\u` marks the beginning of a Unicode escape sequence.\n                        // Advance to the first character and validate the\n                        // four-digit code point.\n                        begin = ++Index;\n                        for (position = Index + 4; Index < position; Index++) {\n                          charCode = source.charCodeAt(Index);\n                          // A valid sequence comprises four hexdigits (case-\n                          // insensitive) that form a single hexadecimal value.\n                          if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n                            // Invalid Unicode escape sequence.\n                            abort();\n                          }\n                        }\n                        // Revive the escaped character.\n                        value += fromCharCode(\"0x\" + source.slice(begin, Index));\n                        break;\n                      default:\n                        // Invalid escape sequence.\n                        abort();\n                    }\n                  } else {\n                    if (charCode == 34) {\n                      // An unescaped double-quote character marks the end of the\n                      // string.\n                      break;\n                    }\n                    charCode = source.charCodeAt(Index);\n                    begin = Index;\n                    // Optimize for the common case where a string is valid.\n                    while (charCode >= 32 && charCode != 92 && charCode != 34) {\n                      charCode = source.charCodeAt(++Index);\n                    }\n                    // Append the string as-is.\n                    value += source.slice(begin, Index);\n                  }\n                }\n                if (source.charCodeAt(Index) == 34) {\n                  // Advance to the next character and return the revived string.\n                  Index++;\n                  return value;\n                }\n                // Unterminated string.\n                abort();\n              default:\n                // Parse numbers and literals.\n                begin = Index;\n                // Advance past the negative sign, if one is specified.\n                if (charCode == 45) {\n                  isSigned = true;\n                  charCode = source.charCodeAt(++Index);\n                }\n                // Parse an integer or floating-point value.\n                if (charCode >= 48 && charCode <= 57) {\n                  // Leading zeroes are interpreted as octal literals.\n                  if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n                    // Illegal octal literal.\n                    abort();\n                  }\n                  isSigned = false;\n                  // Parse the integer component.\n                  for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n                  // Floats cannot contain a leading decimal point; however, this\n                  // case is already accounted for by the parser.\n                  if (source.charCodeAt(Index) == 46) {\n                    position = ++Index;\n                    // Parse the decimal component.\n                    for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal trailing decimal.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Parse exponents. The `e` denoting the exponent is\n                  // case-insensitive.\n                  charCode = source.charCodeAt(Index);\n                  if (charCode == 101 || charCode == 69) {\n                    charCode = source.charCodeAt(++Index);\n                    // Skip past the sign following the exponent, if one is\n                    // specified.\n                    if (charCode == 43 || charCode == 45) {\n                      Index++;\n                    }\n                    // Parse the exponential component.\n                    for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal empty exponent.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Coerce the parsed value to a JavaScript number.\n                  return +source.slice(begin, Index);\n                }\n                // A negative sign may only precede numbers.\n                if (isSigned) {\n                  abort();\n                }\n                // `true`, `false`, and `null` literals.\n                if (source.slice(Index, Index + 4) == \"true\") {\n                  Index += 4;\n                  return true;\n                } else if (source.slice(Index, Index + 5) == \"false\") {\n                  Index += 5;\n                  return false;\n                } else if (source.slice(Index, Index + 4) == \"null\") {\n                  Index += 4;\n                  return null;\n                }\n                // Unrecognized token.\n                abort();\n            }\n          }\n          // Return the sentinel `$` character if the parser has reached the end\n          // of the source string.\n          return \"$\";\n        };\n\n        // Internal: Parses a JSON `value` token.\n        var get = function (value) {\n          var results, hasMembers;\n          if (value == \"$\") {\n            // Unexpected end of input.\n            abort();\n          }\n          if (typeof value == \"string\") {\n            if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n              // Remove the sentinel `@` character.\n              return value.slice(1);\n            }\n            // Parse object and array literals.\n            if (value == \"[\") {\n              // Parses a JSON array, returning a new JavaScript array.\n              results = [];\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing square bracket marks the end of the array literal.\n                if (value == \"]\") {\n                  break;\n                }\n                // If the array literal contains elements, the current token\n                // should be a comma separating the previous element from the\n                // next.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"]\") {\n                      // Unexpected trailing `,` in array literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each array element.\n                    abort();\n                  }\n                }\n                // Elisions and leading commas are not permitted.\n                if (value == \",\") {\n                  abort();\n                }\n                results.push(get(value));\n              }\n              return results;\n            } else if (value == \"{\") {\n              // Parses a JSON object, returning a new JavaScript object.\n              results = {};\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing curly brace marks the end of the object literal.\n                if (value == \"}\") {\n                  break;\n                }\n                // If the object literal contains members, the current token\n                // should be a comma separator.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"}\") {\n                      // Unexpected trailing `,` in object literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each object member.\n                    abort();\n                  }\n                }\n                // Leading commas are not permitted, object property names must be\n                // double-quoted strings, and a `:` must separate each property\n                // name and value.\n                if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n                  abort();\n                }\n                results[value.slice(1)] = get(lex());\n              }\n              return results;\n            }\n            // Unexpected token encountered.\n            abort();\n          }\n          return value;\n        };\n\n        // Internal: Updates a traversed object member.\n        var update = function (source, property, callback) {\n          var element = walk(source, property, callback);\n          if (element === undef) {\n            delete source[property];\n          } else {\n            source[property] = element;\n          }\n        };\n\n        // Internal: Recursively traverses a parsed JSON object, invoking the\n        // `callback` function for each value. This is an implementation of the\n        // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n        var walk = function (source, property, callback) {\n          var value = source[property], length;\n          if (typeof value == \"object\" && value) {\n            // `forEach` can't be used to traverse an array in Opera <= 8.54\n            // because its `Object#hasOwnProperty` implementation returns `false`\n            // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n            if (getClass.call(value) == arrayClass) {\n              for (length = value.length; length--;) {\n                update(value, length, callback);\n              }\n            } else {\n              forEach(value, function (property) {\n                update(value, property, callback);\n              });\n            }\n          }\n          return callback.call(source, property, value);\n        };\n\n        // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n        exports.parse = function (source, callback) {\n          var result, value;\n          Index = 0;\n          Source = \"\" + source;\n          result = get(lex());\n          // If a JSON string contains multiple tokens, it is invalid.\n          if (lex() != \"$\") {\n            abort();\n          }\n          // Reset the parser state.\n          Index = Source = null;\n          return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n        };\n      }\n    }\n\n    exports[\"runInContext\"] = runInContext;\n    return exports;\n  }\n\n  if (freeExports && !isLoader) {\n    // Export for CommonJS environments.\n    runInContext(root, freeExports);\n  } else {\n    // Export for web browsers and JavaScript engines.\n    var nativeJSON = root.JSON,\n        previousJSON = root[\"JSON3\"],\n        isRestored = false;\n\n    var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n      // Public: Restores the original value of the global `JSON` object and\n      // returns a reference to the `JSON3` object.\n      \"noConflict\": function () {\n        if (!isRestored) {\n          isRestored = true;\n          root.JSON = nativeJSON;\n          root[\"JSON3\"] = previousJSON;\n          nativeJSON = previousJSON = null;\n        }\n        return JSON3;\n      }\n    }));\n\n    root.JSON = {\n      \"parse\": JSON3.parse,\n      \"stringify\": JSON3.stringify\n    };\n  }\n\n  // Export for asynchronous module loaders.\n  if (isLoader) {\n    define(function () {\n      return JSON3;\n    });\n  }\n}).call(this);\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],59:[function(require,module,exports){\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  return decodeURIComponent(input.replace(/\\+/g, ' '));\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    if (key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = [];\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      pairs.push(encodeURIComponent(key) +'='+ encodeURIComponent(obj[key]));\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n\n},{}],60:[function(require,module,exports){\n'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n\n},{}],61:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//;\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address) {          // Sanitize what is left of the address\n    return address.replace('\\\\', '/');\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d+)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var location = global && global.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n  var match = protocolre.exec(address);\n\n  return {\n    protocol: match[1] ? match[1].toLowerCase() : '',\n    slashes: !!match[2],\n    rest: match[3]\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} location Location defaults for relative paths.\n * @param {Boolean|Function} parser Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '');\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      if (~(index = address.indexOf(parse))) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n  if (url.auth) {\n    instruction = url.auth.split(':');\n    url.username = instruction[0] || '';\n    url.password = instruction[1] || '';\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (/:\\d+$/.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    default:\n      url[part] = value;\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result = protocol + (url.slashes ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  }\n\n  result += url.host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.qs = qs;\n\nmodule.exports = Url;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"querystringify\":59,\"requires-port\":60}]},{},[1])(1)\n});\n\n\n//# sourceMappingURL=sockjs.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc29ja2pzLWNsaWVudC9kaXN0L3NvY2tqcy5qcz85YmUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsYUFBYSxHQUFHLElBQXNELEVBQUUsbUJBQW1CLEtBQUssVUFBK04sQ0FBQyxhQUFhLDBCQUEwQixtQkFBbUIsa0JBQWtCLGdCQUFnQixVQUFVLFVBQVUsMENBQTBDLGdCQUFnQixPQUFDLE9BQU8sb0JBQW9CLDhDQUE4QyxrQ0FBa0MsWUFBWSxZQUFZLG1DQUFtQyxpQkFBaUIsZUFBZSxzQkFBc0Isb0JBQW9CLGtEQUFrRCxXQUFXLFlBQVksU0FBUyxTQUFTLEtBQUs7QUFDM3pCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsRUFBRSxrQ0FBa0M7QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMsRUFBRSwwQkFBMEI7QUFDN0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsZ0NBQWdDO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsMEJBQTBCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsRUFBRSwrQkFBK0I7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFOztBQUV4QixDQUFDLEVBQUUsdUlBQXVJO0FBQzFJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSxtRUFBbUU7QUFDdEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsc0ZBQXNGO0FBQ3pGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxhQUFhLFFBQVEsRUFBRSwwSEFBMEg7O0FBRWxKLENBQUMsRUFBRSxzSEFBc0g7QUFDekg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSx3TkFBd047QUFDM047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMscUlBQXFJOztBQUV0SSxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0QsV0FBVztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFLDBIQUEwSDs7QUFFbEosQ0FBQyxFQUFFLDhYQUE4WDtBQUNqWTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekM7QUFDQSxLQUFLLFlBQVk7QUFDakI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNGQUFzRixzQ0FBc0MsRUFBRTs7QUFFOUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hELDhFQUE4RTtBQUM5RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjs7O0FBRzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGdDQUFnQztBQUM5RSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLFlBQVk7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywwQkFBMEI7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLGtEQUFrRCxXQUFXO0FBQzdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDBRQUEwUTtBQUM3UTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUUsMEhBQTBIOztBQUVsSixDQUFDLEVBQUUsZ0ZBQWdGO0FBQ25GO0FBQ0E7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBLENBQUMscUlBQXFJOztBQUV0SSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsd0dBQXdHO0FBQzNHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUMsRUFBRSxxRkFBcUY7QUFDeEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxhQUFhLFFBQVEsRUFBRTs7QUFFeEIsQ0FBQyxFQUFFLCtJQUErSTtBQUNsSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsRUFBRSxtRkFBbUY7QUFDdEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSxxRUFBcUU7QUFDeEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFOztBQUV4QixDQUFDLEVBQUUsb0NBQW9DO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlGQUF5Rjs7QUFFekY7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLHFJQUFxSTs7QUFFdEksQ0FBQyxFQUFFLHFEQUFxRDtBQUN4RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSxvQ0FBb0M7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxhQUFhLFFBQVEsRUFBRTs7QUFFeEIsQ0FBQyxFQUFFLG9GQUFvRjtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSxxREFBcUQ7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFLDBIQUEwSDs7QUFFbEosQ0FBQyxFQUFFLHlHQUF5RztBQUM1RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsMEJBQTBCLHFEQUFxRCxtQkFBbUIsV0FBVztBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUUsMEhBQTBIOztBQUVsSixDQUFDLEVBQUUsa0lBQWtJO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLEVBQUU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUU7O0FBRXhCLENBQUMsRUFBRSxvQ0FBb0M7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsYUFBYSxRQUFRLEVBQUUsMEhBQTBIOztBQUVsSixDQUFDLEVBQUUsd0RBQXdEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxhQUFhLFFBQVEsRUFBRSwwSEFBMEg7O0FBRWxKLENBQUMsRUFBRSx5R0FBeUc7QUFDNUc7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsaUNBQWlDO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEMsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUseUJBQXlCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQyxFQUFFLGlDQUFpQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFOztBQUV4QixDQUFDLEVBQUUsa0dBQWtHO0FBQ3JHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7O0FBRUEsQ0FBQyxFQUFFLCtGQUErRjtBQUNsRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDOztBQUVyQzs7QUFFQSxDQUFDLEVBQUUsMEVBQTBFO0FBQzdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQzs7QUFFbkM7O0FBRUEsQ0FBQyxFQUFFLHVHQUF1RztBQUMxRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsRUFBRSw2SEFBNkg7QUFDaEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLHFJQUFxSTs7QUFFdEksQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLENBQUMsRUFBRSxXQUFXO0FBQ2Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLHFJQUFxSTs7QUFFdEksQ0FBQyxFQUFFLGNBQWM7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFLDBIQUEwSDs7QUFFbEosQ0FBQyxFQUFFLGtEQUFrRDtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUcsb0NBQW9DO0FBQ3ZDLENBQUM7O0FBRUQ7O0FBRUEsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxZQUFZO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLFlBQVk7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxhQUFhLFFBQVEsRUFBRTs7QUFFeEIsQ0FBQyxFQUFFLFdBQVc7QUFDZDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLGFBQWEsUUFBUSxFQUFFOztBQUV4QixDQUFDLEVBQUUsMEJBQTBCO0FBQzdCOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksTUFBTTtBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUEsdUJBQXVCLDJFQUEyRSxrQ0FBa0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLGtDQUFrQyw4SEFBOEgsR0FBRyxFQUFFLHFCQUFxQjs7QUFFN1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsZ0JBQWdCO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHLGlCQUFpQjtBQUNwQjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGdCQUFnQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7QUFHQSxDQUFDLGFBQWEsUUFBUSxFQUFFOztBQUV4QixDQUFDLEVBQUUsY0FBYztBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHlFQUF5RSxhQUFhO0FBQ3RGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLEVBQUU7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGtDQUFrQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixhQUFhO0FBQ2I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGFBQWE7QUFDYjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsQ0FBQyxFQUFFLFFBQVE7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGtDQUFrQyxpREFBaUQ7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9EQUFvRDtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsOEJBQThCO0FBQ3ZFO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLDZCQUE2QjtBQUM3Rix1RUFBdUUsaUNBQWlDO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQSx1Q0FBdUMsVUFBVTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0EsaURBQWlELE1BQU07QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLHdEQUF3RCwwRUFBMEUsT0FBTywwQkFBMEIsU0FBUztBQUM1SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxnRUFBZ0UsZ0JBQWdCO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLDJCQUEyQjtBQUM1RjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxLQUFLO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxrQkFBa0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw2RkFBNkY7QUFDckgsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1HQUFtRztBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG1HQUFtRztBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGO0FBQ3hGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsQ0FBQyxxSUFBcUk7O0FBRXRJLENBQUMsR0FBRztBQUNKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pELEdBQUc7QUFDSCxzQ0FBc0M7QUFDdEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsY0FBYztBQUN6QixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEseUJBQXlCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsTUFBTTtBQUNqQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLElBQUk7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMscUlBQXFJOztBQUV0SSxDQUFDLEVBQUUsdUNBQXVDLEVBQUUsR0FBRztBQUMvQyxDQUFDOzs7QUFHRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zb2NranMtY2xpZW50L2Rpc3Qvc29ja2pzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogc29ja2pzLWNsaWVudCB2MS40LjAgfCBodHRwOi8vc29ja2pzLm9yZyB8IE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5Tb2NrSlMgPSBmKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRyYW5zcG9ydExpc3QgPSByZXF1aXJlKCcuL3RyYW5zcG9ydC1saXN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tYWluJykodHJhbnNwb3J0TGlzdCk7XG5cbi8vIFRPRE8gY2FuJ3QgZ2V0IHJpZCBvZiB0aGlzIHVudGlsIGFsbCBzZXJ2ZXJzIGRvXG5pZiAoJ19zb2NranNfb25sb2FkJyBpbiBnbG9iYWwpIHtcbiAgc2V0VGltZW91dChnbG9iYWwuX3NvY2tqc19vbmxvYWQsIDEpO1xufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL21haW5cIjoxNCxcIi4vdHJhbnNwb3J0LWxpc3RcIjoxNn1dLDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnQgPSByZXF1aXJlKCcuL2V2ZW50JylcbiAgO1xuXG5mdW5jdGlvbiBDbG9zZUV2ZW50KCkge1xuICBFdmVudC5jYWxsKHRoaXMpO1xuICB0aGlzLmluaXRFdmVudCgnY2xvc2UnLCBmYWxzZSwgZmFsc2UpO1xuICB0aGlzLndhc0NsZWFuID0gZmFsc2U7XG4gIHRoaXMuY29kZSA9IDA7XG4gIHRoaXMucmVhc29uID0gJyc7XG59XG5cbmluaGVyaXRzKENsb3NlRXZlbnQsIEV2ZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDbG9zZUV2ZW50O1xuXG59LHtcIi4vZXZlbnRcIjo0LFwiaW5oZXJpdHNcIjo1N31dLDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRUYXJnZXQgPSByZXF1aXJlKCcuL2V2ZW50dGFyZ2V0JylcbiAgO1xuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG59XG5cbmluaGVyaXRzKEV2ZW50RW1pdHRlciwgRXZlbnRUYXJnZXQpO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHR5cGUpIHtcbiAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW3R5cGVdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm9uKHR5cGUsIGcpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzWzBdO1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW3R5cGVdO1xuICBpZiAoIWxpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBlcXVpdmFsZW50IG9mIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpO1xuICBmb3IgKHZhciBhaSA9IDE7IGFpIDwgbDsgYWkrKykge1xuICAgIGFyZ3NbYWkgLSAxXSA9IGFyZ3VtZW50c1thaV07XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI7XG5cbm1vZHVsZS5leHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxufSx7XCIuL2V2ZW50dGFyZ2V0XCI6NSxcImluaGVyaXRzXCI6NTd9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHRoaXMudHlwZSA9IGV2ZW50VHlwZTtcbn1cblxuRXZlbnQucHJvdG90eXBlLmluaXRFdmVudCA9IGZ1bmN0aW9uKGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKSB7XG4gIHRoaXMudHlwZSA9IGV2ZW50VHlwZTtcbiAgdGhpcy5idWJibGVzID0gY2FuQnViYmxlO1xuICB0aGlzLmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlO1xuICB0aGlzLnRpbWVTdGFtcCA9ICtuZXcgRGF0ZSgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHt9O1xuRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7fTtcblxuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFID0gMTtcbkV2ZW50LkFUX1RBUkdFVCA9IDI7XG5FdmVudC5CVUJCTElOR19QSEFTRSA9IDM7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnQ7XG5cbn0se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vKiBTaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG9mIERPTTIgRXZlbnRUYXJnZXQuXG4gKiAgIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUV2ZW50cy9ldmVudHMuaHRtbCNFdmVudHMtRXZlbnRUYXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBFdmVudFRhcmdldCgpIHtcbiAgdGhpcy5fbGlzdGVuZXJzID0ge307XG59XG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIShldmVudFR5cGUgaW4gdGhpcy5fbGlzdGVuZXJzKSkge1xuICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gW107XG4gIH1cbiAgdmFyIGFyciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdO1xuICAvLyAjNFxuICBpZiAoYXJyLmluZGV4T2YobGlzdGVuZXIpID09PSAtMSkge1xuICAgIC8vIE1ha2UgYSBjb3B5IHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhIGN1cnJlbnQgZGlzcGF0Y2hFdmVudC5cbiAgICBhcnIgPSBhcnIuY29uY2F0KFtsaXN0ZW5lcl0pO1xuICB9XG4gIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gYXJyO1xufTtcblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBhcnIgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXTtcbiAgaWYgKCFhcnIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGlkeCA9IGFyci5pbmRleE9mKGxpc3RlbmVyKTtcbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIE1ha2UgYSBjb3B5IHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhIGN1cnJlbnQgZGlzcGF0Y2hFdmVudC5cbiAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gYXJyLnNsaWNlKDAsIGlkeCkuY29uY2F0KGFyci5zbGljZShpZHggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZXZlbnQgPSBhcmd1bWVudHNbMF07XG4gIHZhciB0ID0gZXZlbnQudHlwZTtcbiAgLy8gZXF1aXZhbGVudCBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBbZXZlbnRdIDogQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgLy8gVE9ETzogVGhpcyBkb2Vzbid0IG1hdGNoIHRoZSByZWFsIGJlaGF2aW9yOyBwZXIgc3BlYywgb25mb28gZ2V0XG4gIC8vIHRoZWlyIHBsYWNlIGluIGxpbmUgZnJvbSB0aGUgL2ZpcnN0LyB0aW1lIHRoZXkncmUgc2V0IGZyb21cbiAgLy8gbm9uLW51bGwuIEFsdGhvdWdoIFdlYktpdCBidW1wcyBpdCB0byB0aGUgZW5kIGV2ZXJ5IHRpbWUgaXQnc1xuICAvLyBzZXQuXG4gIGlmICh0aGlzWydvbicgKyB0XSkge1xuICAgIHRoaXNbJ29uJyArIHRdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG4gIGlmICh0IGluIHRoaXMuX2xpc3RlbmVycykge1xuICAgIC8vIEdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIGxpc3RlbmVycyBsaXN0LiByZW1vdmVFdmVudExpc3RlbmVyIG1heSBhbHRlciB0aGUgbGlzdC5cbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW3RdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50VGFyZ2V0O1xuXG59LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50ID0gcmVxdWlyZSgnLi9ldmVudCcpXG4gIDtcblxuZnVuY3Rpb24gVHJhbnNwb3J0TWVzc2FnZUV2ZW50KGRhdGEpIHtcbiAgRXZlbnQuY2FsbCh0aGlzKTtcbiAgdGhpcy5pbml0RXZlbnQoJ21lc3NhZ2UnLCBmYWxzZSwgZmFsc2UpO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5pbmhlcml0cyhUcmFuc3BvcnRNZXNzYWdlRXZlbnQsIEV2ZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc3BvcnRNZXNzYWdlRXZlbnQ7XG5cbn0se1wiLi9ldmVudFwiOjQsXCJpbmhlcml0c1wiOjU3fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBpZnJhbWVVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvaWZyYW1lJylcbiAgO1xuXG5mdW5jdGlvbiBGYWNhZGVKUyh0cmFuc3BvcnQpIHtcbiAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICB0cmFuc3BvcnQub24oJ21lc3NhZ2UnLCB0aGlzLl90cmFuc3BvcnRNZXNzYWdlLmJpbmQodGhpcykpO1xuICB0cmFuc3BvcnQub24oJ2Nsb3NlJywgdGhpcy5fdHJhbnNwb3J0Q2xvc2UuYmluZCh0aGlzKSk7XG59XG5cbkZhY2FkZUpTLnByb3RvdHlwZS5fdHJhbnNwb3J0Q2xvc2UgPSBmdW5jdGlvbihjb2RlLCByZWFzb24pIHtcbiAgaWZyYW1lVXRpbHMucG9zdE1lc3NhZ2UoJ2MnLCBKU09OMy5zdHJpbmdpZnkoW2NvZGUsIHJlYXNvbl0pKTtcbn07XG5GYWNhZGVKUy5wcm90b3R5cGUuX3RyYW5zcG9ydE1lc3NhZ2UgPSBmdW5jdGlvbihmcmFtZSkge1xuICBpZnJhbWVVdGlscy5wb3N0TWVzc2FnZSgndCcsIGZyYW1lKTtcbn07XG5GYWNhZGVKUy5wcm90b3R5cGUuX3NlbmQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGRhdGEpO1xufTtcbkZhY2FkZUpTLnByb3RvdHlwZS5fY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdHJhbnNwb3J0LmNsb3NlKCk7XG4gIHRoaXMuX3RyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRmFjYWRlSlM7XG5cbn0se1wiLi91dGlscy9pZnJhbWVcIjo0NyxcImpzb24zXCI6NTh9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1cmxVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvdXJsJylcbiAgLCBldmVudFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpXG4gICwgRmFjYWRlSlMgPSByZXF1aXJlKCcuL2ZhY2FkZScpXG4gICwgSW5mb0lmcmFtZVJlY2VpdmVyID0gcmVxdWlyZSgnLi9pbmZvLWlmcmFtZS1yZWNlaXZlcicpXG4gICwgaWZyYW1lVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL2lmcmFtZScpXG4gICwgbG9jID0gcmVxdWlyZSgnLi9sb2NhdGlvbicpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDppZnJhbWUtYm9vdHN0cmFwJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oU29ja0pTLCBhdmFpbGFibGVUcmFuc3BvcnRzKSB7XG4gIHZhciB0cmFuc3BvcnRNYXAgPSB7fTtcbiAgYXZhaWxhYmxlVHJhbnNwb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKGF0KSB7XG4gICAgaWYgKGF0LmZhY2FkZVRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0TWFwW2F0LmZhY2FkZVRyYW5zcG9ydC50cmFuc3BvcnROYW1lXSA9IGF0LmZhY2FkZVRyYW5zcG9ydDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGhhcmQtY29kZWQgZm9yIHRoZSBpbmZvIGlmcmFtZVxuICAvLyBUT0RPIHNlZSBpZiB3ZSBjYW4gbWFrZSB0aGlzIG1vcmUgZHluYW1pY1xuICB0cmFuc3BvcnRNYXBbSW5mb0lmcmFtZVJlY2VpdmVyLnRyYW5zcG9ydE5hbWVdID0gSW5mb0lmcmFtZVJlY2VpdmVyO1xuICB2YXIgcGFyZW50T3JpZ2luO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICBTb2NrSlMuYm9vdHN0cmFwX2lmcmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgdmFyIGZhY2FkZTtcbiAgICBpZnJhbWVVdGlscy5jdXJyZW50V2luZG93SWQgPSBsb2MuaGFzaC5zbGljZSgxKTtcbiAgICB2YXIgb25NZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKGUuc291cmNlICE9PSBwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnRPcmlnaW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhcmVudE9yaWdpbiA9IGUub3JpZ2luO1xuICAgICAgfVxuICAgICAgaWYgKGUub3JpZ2luICE9PSBwYXJlbnRPcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaWZyYW1lTWVzc2FnZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmcmFtZU1lc3NhZ2UgPSBKU09OMy5wYXJzZShlLmRhdGEpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICBkZWJ1ZygnYmFkIGpzb24nLCBlLmRhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZnJhbWVNZXNzYWdlLndpbmRvd0lkICE9PSBpZnJhbWVVdGlscy5jdXJyZW50V2luZG93SWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChpZnJhbWVNZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3MnOlxuICAgICAgICB2YXIgcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwID0gSlNPTjMucGFyc2UoaWZyYW1lTWVzc2FnZS5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgIGRlYnVnKCdiYWQganNvbicsIGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZlcnNpb24gPSBwWzBdO1xuICAgICAgICB2YXIgdHJhbnNwb3J0ID0gcFsxXTtcbiAgICAgICAgdmFyIHRyYW5zVXJsID0gcFsyXTtcbiAgICAgICAgdmFyIGJhc2VVcmwgPSBwWzNdO1xuICAgICAgICBkZWJ1Zyh2ZXJzaW9uLCB0cmFuc3BvcnQsIHRyYW5zVXJsLCBiYXNlVXJsKTtcbiAgICAgICAgLy8gY2hhbmdlIHRoaXMgdG8gc2VtdmVyIGxvZ2ljXG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBTb2NrSlMudmVyc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIFNvY2tKUyEgTWFpbiBzaXRlIHVzZXM6JyArXG4gICAgICAgICAgICAgICAgICAgICcgXCInICsgdmVyc2lvbiArICdcIiwgdGhlIGlmcmFtZTonICtcbiAgICAgICAgICAgICAgICAgICAgJyBcIicgKyBTb2NrSlMudmVyc2lvbiArICdcIi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdXJsVXRpbHMuaXNPcmlnaW5FcXVhbCh0cmFuc1VybCwgbG9jLmhyZWYpIHx8XG4gICAgICAgICAgICAhdXJsVXRpbHMuaXNPcmlnaW5FcXVhbChiYXNlVXJsLCBsb2MuaHJlZikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29ubmVjdCB0byBkaWZmZXJlbnQgZG9tYWluIGZyb20gd2l0aGluIGFuICcgK1xuICAgICAgICAgICAgICAgICAgICAnaWZyYW1lLiAoJyArIGxvYy5ocmVmICsgJywgJyArIHRyYW5zVXJsICsgJywgJyArIGJhc2VVcmwgKyAnKScpO1xuICAgICAgICB9XG4gICAgICAgIGZhY2FkZSA9IG5ldyBGYWNhZGVKUyhuZXcgdHJhbnNwb3J0TWFwW3RyYW5zcG9ydF0odHJhbnNVcmwsIGJhc2VVcmwpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgZmFjYWRlLl9zZW5kKGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIGlmIChmYWNhZGUpIHtcbiAgICAgICAgICBmYWNhZGUuX2Nsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmFjYWRlID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGV2ZW50VXRpbHMuYXR0YWNoRXZlbnQoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpO1xuXG4gICAgLy8gU3RhcnRcbiAgICBpZnJhbWVVdGlscy5wb3N0TWVzc2FnZSgncycpO1xuICB9O1xufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcIi4vZmFjYWRlXCI6NyxcIi4vaW5mby1pZnJhbWUtcmVjZWl2ZXJcIjoxMCxcIi4vbG9jYXRpb25cIjoxMyxcIi4vdXRpbHMvZXZlbnRcIjo0NixcIi4vdXRpbHMvaWZyYW1lXCI6NDcsXCIuL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NSxcImpzb24zXCI6NTh9XSw5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBvYmplY3RVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvb2JqZWN0JylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmluZm8tYWpheCcpO1xufVxuXG5mdW5jdGlvbiBJbmZvQWpheCh1cmwsIEFqYXhPYmplY3QpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdDAgPSArbmV3IERhdGUoKTtcbiAgdGhpcy54byA9IG5ldyBBamF4T2JqZWN0KCdHRVQnLCB1cmwpO1xuXG4gIHRoaXMueG8ub25jZSgnZmluaXNoJywgZnVuY3Rpb24oc3RhdHVzLCB0ZXh0KSB7XG4gICAgdmFyIGluZm8sIHJ0dDtcbiAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgIHJ0dCA9ICgrbmV3IERhdGUoKSkgLSB0MDtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5mbyA9IEpTT04zLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWcoJ2JhZCBqc29uJywgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RVdGlscy5pc09iamVjdChpbmZvKSkge1xuICAgICAgICBpbmZvID0ge307XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICBzZWxmLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoSW5mb0FqYXgsIEV2ZW50RW1pdHRlcik7XG5cbkluZm9BamF4LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB0aGlzLnhvLmNsb3NlKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluZm9BamF4O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiLi91dGlscy9vYmplY3RcIjo0OSxcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBYSFJMb2NhbE9iamVjdCA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0L3NlbmRlci94aHItbG9jYWwnKVxuICAsIEluZm9BamF4ID0gcmVxdWlyZSgnLi9pbmZvLWFqYXgnKVxuICA7XG5cbmZ1bmN0aW9uIEluZm9SZWNlaXZlcklmcmFtZSh0cmFuc1VybCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuaXIgPSBuZXcgSW5mb0FqYXgodHJhbnNVcmwsIFhIUkxvY2FsT2JqZWN0KTtcbiAgdGhpcy5pci5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihpbmZvLCBydHQpIHtcbiAgICBzZWxmLmlyID0gbnVsbDtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBKU09OMy5zdHJpbmdpZnkoW2luZm8sIHJ0dF0pKTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKEluZm9SZWNlaXZlcklmcmFtZSwgRXZlbnRFbWl0dGVyKTtcblxuSW5mb1JlY2VpdmVySWZyYW1lLnRyYW5zcG9ydE5hbWUgPSAnaWZyYW1lLWluZm8tcmVjZWl2ZXInO1xuXG5JbmZvUmVjZWl2ZXJJZnJhbWUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlyKSB7XG4gICAgdGhpcy5pci5jbG9zZSgpO1xuICAgIHRoaXMuaXIgPSBudWxsO1xuICB9XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluZm9SZWNlaXZlcklmcmFtZTtcblxufSx7XCIuL2luZm8tYWpheFwiOjksXCIuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWxvY2FsXCI6MzcsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEpTT04zID0gcmVxdWlyZSgnanNvbjMnKVxuICAsIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgSWZyYW1lVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvaWZyYW1lJylcbiAgLCBJbmZvUmVjZWl2ZXJJZnJhbWUgPSByZXF1aXJlKCcuL2luZm8taWZyYW1lLXJlY2VpdmVyJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmluZm8taWZyYW1lJyk7XG59XG5cbmZ1bmN0aW9uIEluZm9JZnJhbWUoYmFzZVVybCwgdXJsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlmciA9IHNlbGYuaWZyID0gbmV3IElmcmFtZVRyYW5zcG9ydChJbmZvUmVjZWl2ZXJJZnJhbWUudHJhbnNwb3J0TmFtZSwgdXJsLCBiYXNlVXJsKTtcblxuICAgIGlmci5vbmNlKCdtZXNzYWdlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgICBpZiAobXNnKSB7XG4gICAgICAgIHZhciBkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGQgPSBKU09OMy5wYXJzZShtc2cpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWcoJ2JhZCBqc29uJywgbXNnKTtcbiAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpO1xuICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5mbyA9IGRbMF0sIHJ0dCA9IGRbMV07XG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGlmci5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBUT0RPIHRoaXMgc2VlbXMgdGhlIHNhbWUgYXMgdGhlICduZWVkQm9keScgZnJvbSB0cmFuc3BvcnRzXG4gIGlmICghZ2xvYmFsLmRvY3VtZW50LmJvZHkpIHtcbiAgICB1dGlscy5hdHRhY2hFdmVudCgnbG9hZCcsIGdvKTtcbiAgfSBlbHNlIHtcbiAgICBnbygpO1xuICB9XG59XG5cbmluaGVyaXRzKEluZm9JZnJhbWUsIEV2ZW50RW1pdHRlcik7XG5cbkluZm9JZnJhbWUuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gSWZyYW1lVHJhbnNwb3J0LmVuYWJsZWQoKTtcbn07XG5cbkluZm9JZnJhbWUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlmcikge1xuICAgIHRoaXMuaWZyLmNsb3NlKCk7XG4gIH1cbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgdGhpcy5pZnIgPSBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmZvSWZyYW1lO1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL2luZm8taWZyYW1lLXJlY2VpdmVyXCI6MTAsXCIuL3RyYW5zcG9ydC9pZnJhbWVcIjoyMixcIi4vdXRpbHMvZXZlbnRcIjo0NixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL3VybCcpXG4gICwgWERSID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvc2VuZGVyL3hkcicpXG4gICwgWEhSQ29ycyA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0L3NlbmRlci94aHItY29ycycpXG4gICwgWEhSTG9jYWwgPSByZXF1aXJlKCcuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWxvY2FsJylcbiAgLCBYSFJGYWtlID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvc2VuZGVyL3hoci1mYWtlJylcbiAgLCBJbmZvSWZyYW1lID0gcmVxdWlyZSgnLi9pbmZvLWlmcmFtZScpXG4gICwgSW5mb0FqYXggPSByZXF1aXJlKCcuL2luZm8tYWpheCcpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDppbmZvLXJlY2VpdmVyJyk7XG59XG5cbmZ1bmN0aW9uIEluZm9SZWNlaXZlcihiYXNlVXJsLCB1cmxJbmZvKSB7XG4gIGRlYnVnKGJhc2VVcmwpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5kb1hocihiYXNlVXJsLCB1cmxJbmZvKTtcbiAgfSwgMCk7XG59XG5cbmluaGVyaXRzKEluZm9SZWNlaXZlciwgRXZlbnRFbWl0dGVyKTtcblxuLy8gVE9ETyB0aGlzIGlzIGN1cnJlbnRseSBpZ25vcmluZyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNwb3J0cyBhbmQgdGhlIHdoaXRlbGlzdFxuXG5JbmZvUmVjZWl2ZXIuX2dldFJlY2VpdmVyID0gZnVuY3Rpb24oYmFzZVVybCwgdXJsLCB1cmxJbmZvKSB7XG4gIC8vIGRldGVybWluZSBtZXRob2Qgb2YgQ09SUyBzdXBwb3J0IChpZiBuZWVkZWQpXG4gIGlmICh1cmxJbmZvLnNhbWVPcmlnaW4pIHtcbiAgICByZXR1cm4gbmV3IEluZm9BamF4KHVybCwgWEhSTG9jYWwpO1xuICB9XG4gIGlmIChYSFJDb3JzLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbmV3IEluZm9BamF4KHVybCwgWEhSQ29ycyk7XG4gIH1cbiAgaWYgKFhEUi5lbmFibGVkICYmIHVybEluZm8uc2FtZVNjaGVtZSkge1xuICAgIHJldHVybiBuZXcgSW5mb0FqYXgodXJsLCBYRFIpO1xuICB9XG4gIGlmIChJbmZvSWZyYW1lLmVuYWJsZWQoKSkge1xuICAgIHJldHVybiBuZXcgSW5mb0lmcmFtZShiYXNlVXJsLCB1cmwpO1xuICB9XG4gIHJldHVybiBuZXcgSW5mb0FqYXgodXJsLCBYSFJGYWtlKTtcbn07XG5cbkluZm9SZWNlaXZlci5wcm90b3R5cGUuZG9YaHIgPSBmdW5jdGlvbihiYXNlVXJsLCB1cmxJbmZvKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgdXJsID0gdXJsVXRpbHMuYWRkUGF0aChiYXNlVXJsLCAnL2luZm8nKVxuICAgIDtcbiAgZGVidWcoJ2RvWGhyJywgdXJsKTtcblxuICB0aGlzLnhvID0gSW5mb1JlY2VpdmVyLl9nZXRSZWNlaXZlcihiYXNlVXJsLCB1cmwsIHVybEluZm8pO1xuXG4gIHRoaXMudGltZW91dFJlZiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3RpbWVvdXQnKTtcbiAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpO1xuICB9LCBJbmZvUmVjZWl2ZXIudGltZW91dCk7XG5cbiAgdGhpcy54by5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihpbmZvLCBydHQpIHtcbiAgICBkZWJ1ZygnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICBzZWxmLl9jbGVhbnVwKHRydWUpO1xuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgfSk7XG59O1xuXG5JbmZvUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24od2FzQ2xlYW4pIHtcbiAgZGVidWcoJ19jbGVhbnVwJyk7XG4gIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRSZWYpO1xuICB0aGlzLnRpbWVvdXRSZWYgPSBudWxsO1xuICBpZiAoIXdhc0NsZWFuICYmIHRoaXMueG8pIHtcbiAgICB0aGlzLnhvLmNsb3NlKCk7XG4gIH1cbiAgdGhpcy54byA9IG51bGw7XG59O1xuXG5JbmZvUmVjZWl2ZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbn07XG5cbkluZm9SZWNlaXZlci50aW1lb3V0ID0gODAwMDtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmZvUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuL2luZm8tYWpheFwiOjksXCIuL2luZm8taWZyYW1lXCI6MTEsXCIuL3RyYW5zcG9ydC9zZW5kZXIveGRyXCI6MzQsXCIuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWNvcnNcIjozNSxcIi4vdHJhbnNwb3J0L3NlbmRlci94aHItZmFrZVwiOjM2LFwiLi90cmFuc3BvcnQvc2VuZGVyL3hoci1sb2NhbFwiOjM3LFwiLi91dGlscy91cmxcIjo1MixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwubG9jYXRpb24gfHwge1xuICBvcmlnaW46ICdodHRwOi8vbG9jYWxob3N0OjgwJ1xuLCBwcm90b2NvbDogJ2h0dHA6J1xuLCBob3N0OiAnbG9jYWxob3N0J1xuLCBwb3J0OiA4MFxuLCBocmVmOiAnaHR0cDovL2xvY2FsaG9zdC8nXG4sIGhhc2g6ICcnXG59O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vc2hpbXMnKTtcblxudmFyIFVSTCA9IHJlcXVpcmUoJ3VybC1wYXJzZScpXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpXG4gICwgcmFuZG9tID0gcmVxdWlyZSgnLi91dGlscy9yYW5kb20nKVxuICAsIGVzY2FwZSA9IHJlcXVpcmUoJy4vdXRpbHMvZXNjYXBlJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvdXJsJylcbiAgLCBldmVudFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgdHJhbnNwb3J0ID0gcmVxdWlyZSgnLi91dGlscy90cmFuc3BvcnQnKVxuICAsIG9iamVjdFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9vYmplY3QnKVxuICAsIGJyb3dzZXIgPSByZXF1aXJlKCcuL3V0aWxzL2Jyb3dzZXInKVxuICAsIGxvZyA9IHJlcXVpcmUoJy4vdXRpbHMvbG9nJylcbiAgLCBFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvZXZlbnQnKVxuICAsIEV2ZW50VGFyZ2V0ID0gcmVxdWlyZSgnLi9ldmVudC9ldmVudHRhcmdldCcpXG4gICwgbG9jID0gcmVxdWlyZSgnLi9sb2NhdGlvbicpXG4gICwgQ2xvc2VFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvY2xvc2UnKVxuICAsIFRyYW5zcG9ydE1lc3NhZ2VFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvdHJhbnMtbWVzc2FnZScpXG4gICwgSW5mb1JlY2VpdmVyID0gcmVxdWlyZSgnLi9pbmZvLXJlY2VpdmVyJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50Om1haW4nKTtcbn1cblxudmFyIHRyYW5zcG9ydHM7XG5cbi8vIGZvbGxvdyBjb25zdHJ1Y3RvciBzdGVwcyBkZWZpbmVkIGF0IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3dlYnNvY2tldHMvI3RoZS13ZWJzb2NrZXQtaW50ZXJmYWNlXG5mdW5jdGlvbiBTb2NrSlModXJsLCBwcm90b2NvbHMsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNvY2tKUykpIHtcbiAgICByZXR1cm4gbmV3IFNvY2tKUyh1cmwsIHByb3RvY29scywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1NvY2tKUzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50XCIpO1xuICB9XG4gIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5yZWFkeVN0YXRlID0gU29ja0pTLkNPTk5FQ1RJTkc7XG4gIHRoaXMuZXh0ZW5zaW9ucyA9ICcnO1xuICB0aGlzLnByb3RvY29sID0gJyc7XG5cbiAgLy8gbm9uLXN0YW5kYXJkIGV4dGVuc2lvblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2xzX3doaXRlbGlzdCkge1xuICAgIGxvZy53YXJuKFwiJ3Byb3RvY29sc193aGl0ZWxpc3QnIGlzIERFUFJFQ0FURUQuIFVzZSAndHJhbnNwb3J0cycgaW5zdGVhZC5cIik7XG4gIH1cbiAgdGhpcy5fdHJhbnNwb3J0c1doaXRlbGlzdCA9IG9wdGlvbnMudHJhbnNwb3J0cztcbiAgdGhpcy5fdHJhbnNwb3J0T3B0aW9ucyA9IG9wdGlvbnMudHJhbnNwb3J0T3B0aW9ucyB8fCB7fTtcbiAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMudGltZW91dCB8fCAwO1xuXG4gIHZhciBzZXNzaW9uSWQgPSBvcHRpb25zLnNlc3Npb25JZCB8fCA4O1xuICBpZiAodHlwZW9mIHNlc3Npb25JZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2dlbmVyYXRlU2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZXNzaW9uSWQgPT09ICdudW1iZXInKSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVTZXNzaW9uSWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByYW5kb20uc3RyaW5nKHNlc3Npb25JZCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJZiBzZXNzaW9uSWQgaXMgdXNlZCBpbiB0aGUgb3B0aW9ucywgaXQgbmVlZHMgdG8gYmUgYSBudW1iZXIgb3IgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHRoaXMuX3NlcnZlciA9IG9wdGlvbnMuc2VydmVyIHx8IHJhbmRvbS5udW1iZXJTdHJpbmcoMTAwMCk7XG5cbiAgLy8gU3RlcCAxIG9mIFdTIHNwZWMgLSBwYXJzZSBhbmQgdmFsaWRhdGUgdGhlIHVybC4gSXNzdWUgIzhcbiAgdmFyIHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgaWYgKCFwYXJzZWRVcmwuaG9zdCB8fCAhcGFyc2VkVXJsLnByb3RvY29sKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVGhlIFVSTCAnXCIgKyB1cmwgKyBcIicgaXMgaW52YWxpZFwiKTtcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIFVSTCBtdXN0IG5vdCBjb250YWluIGEgZnJhZ21lbnQnKTtcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVXJsLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlRoZSBVUkwncyBzY2hlbWUgbXVzdCBiZSBlaXRoZXIgJ2h0dHA6JyBvciAnaHR0cHM6Jy4gJ1wiICsgcGFyc2VkVXJsLnByb3RvY29sICsgXCInIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgfVxuXG4gIHZhciBzZWN1cmUgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAvLyBTdGVwIDIgLSBkb24ndCBhbGxvdyBzZWN1cmUgb3JpZ2luIHdpdGggYW4gaW5zZWN1cmUgcHJvdG9jb2xcbiAgaWYgKGxvYy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgIXNlY3VyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHlFcnJvcjogQW4gaW5zZWN1cmUgU29ja0pTIGNvbm5lY3Rpb24gbWF5IG5vdCBiZSBpbml0aWF0ZWQgZnJvbSBhIHBhZ2UgbG9hZGVkIG92ZXIgSFRUUFMnKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMyAtIGNoZWNrIHBvcnQgYWNjZXNzIC0gbm8gbmVlZCBoZXJlXG4gIC8vIFN0ZXAgNCAtIHBhcnNlIHByb3RvY29scyBhcmd1bWVudFxuICBpZiAoIXByb3RvY29scykge1xuICAgIHByb3RvY29scyA9IFtdO1xuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHByb3RvY29scykpIHtcbiAgICBwcm90b2NvbHMgPSBbcHJvdG9jb2xzXTtcbiAgfVxuXG4gIC8vIFN0ZXAgNSAtIGNoZWNrIHByb3RvY29scyBhcmd1bWVudFxuICB2YXIgc29ydGVkUHJvdG9jb2xzID0gcHJvdG9jb2xzLnNvcnQoKTtcbiAgc29ydGVkUHJvdG9jb2xzLmZvckVhY2goZnVuY3Rpb24ocHJvdG8sIGkpIHtcbiAgICBpZiAoIXByb3RvKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJUaGUgcHJvdG9jb2xzIGVudHJ5ICdcIiArIHByb3RvICsgXCInIGlzIGludmFsaWQuXCIpO1xuICAgIH1cbiAgICBpZiAoaSA8IChzb3J0ZWRQcm90b2NvbHMubGVuZ3RoIC0gMSkgJiYgcHJvdG8gPT09IHNvcnRlZFByb3RvY29sc1tpICsgMV0pIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlRoZSBwcm90b2NvbHMgZW50cnkgJ1wiICsgcHJvdG8gKyBcIicgaXMgZHVwbGljYXRlZC5cIik7XG4gICAgfVxuICB9KTtcblxuICAvLyBTdGVwIDYgLSBjb252ZXJ0IG9yaWdpblxuICB2YXIgbyA9IHVybFV0aWxzLmdldE9yaWdpbihsb2MuaHJlZik7XG4gIHRoaXMuX29yaWdpbiA9IG8gPyBvLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuXG4gIC8vIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2hcbiAgcGFyc2VkVXJsLnNldCgncGF0aG5hbWUnLCBwYXJzZWRVcmwucGF0aG5hbWUucmVwbGFjZSgvXFwvKyQvLCAnJykpO1xuXG4gIC8vIHN0b3JlIHRoZSBzYW5pdGl6ZWQgdXJsXG4gIHRoaXMudXJsID0gcGFyc2VkVXJsLmhyZWY7XG4gIGRlYnVnKCd1c2luZyB1cmwnLCB0aGlzLnVybCk7XG5cbiAgLy8gU3RlcCA3IC0gc3RhcnQgY29ubmVjdGlvbiBpbiBiYWNrZ3JvdW5kXG4gIC8vIG9idGFpbiBzZXJ2ZXIgaW5mb1xuICAvLyBodHRwOi8vc29ja2pzLmdpdGh1Yi5pby9zb2NranMtcHJvdG9jb2wvc29ja2pzLXByb3RvY29sLTAuMy4zLmh0bWwjc2VjdGlvbi0yNlxuICB0aGlzLl91cmxJbmZvID0ge1xuICAgIG51bGxPcmlnaW46ICFicm93c2VyLmhhc0RvbWFpbigpXG4gICwgc2FtZU9yaWdpbjogdXJsVXRpbHMuaXNPcmlnaW5FcXVhbCh0aGlzLnVybCwgbG9jLmhyZWYpXG4gICwgc2FtZVNjaGVtZTogdXJsVXRpbHMuaXNTY2hlbWVFcXVhbCh0aGlzLnVybCwgbG9jLmhyZWYpXG4gIH07XG5cbiAgdGhpcy5faXIgPSBuZXcgSW5mb1JlY2VpdmVyKHRoaXMudXJsLCB0aGlzLl91cmxJbmZvKTtcbiAgdGhpcy5faXIub25jZSgnZmluaXNoJywgdGhpcy5fcmVjZWl2ZUluZm8uYmluZCh0aGlzKSk7XG59XG5cbmluaGVyaXRzKFNvY2tKUywgRXZlbnRUYXJnZXQpO1xuXG5mdW5jdGlvbiB1c2VyU2V0Q29kZShjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAxMDAwIHx8IChjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5KTtcbn1cblxuU29ja0pTLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGNvZGUsIHJlYXNvbikge1xuICAvLyBTdGVwIDFcbiAgaWYgKGNvZGUgJiYgIXVzZXJTZXRDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkQWNjZXNzRXJyb3I6IEludmFsaWQgY29kZScpO1xuICB9XG4gIC8vIFN0ZXAgMi40IHN0YXRlcyB0aGUgbWF4IGlzIDEyMyBieXRlcywgYnV0IHdlIGFyZSBqdXN0IGNoZWNraW5nIGxlbmd0aFxuICBpZiAocmVhc29uICYmIHJlYXNvbi5sZW5ndGggPiAxMjMpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ3JlYXNvbiBhcmd1bWVudCBoYXMgYW4gaW52YWxpZCBsZW5ndGgnKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMy4xXG4gIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFNvY2tKUy5DTE9TSU5HIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gU29ja0pTLkNMT1NFRCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRPRE8gbG9vayBhdCBkb2NzIHRvIGRldGVybWluZSBob3cgdG8gc2V0IHRoaXNcbiAgdmFyIHdhc0NsZWFuID0gdHJ1ZTtcbiAgdGhpcy5fY2xvc2UoY29kZSB8fCAxMDAwLCByZWFzb24gfHwgJ05vcm1hbCBjbG9zdXJlJywgd2FzQ2xlYW4pO1xufTtcblxuU29ja0pTLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGF0YSkge1xuICAvLyAjMTMgLSBjb252ZXJ0IGFueXRoaW5nIG5vbi1zdHJpbmcgdG8gc3RyaW5nXG4gIC8vIFRPRE8gdGhpcyBjdXJyZW50bHkgdHVybnMgb2JqZWN0cyBpbnRvIFtvYmplY3QgT2JqZWN0XVxuICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgZGF0YSA9ICcnICsgZGF0YTtcbiAgfVxuICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBTb2NrSlMuQ09OTkVDVElORykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZFN0YXRlRXJyb3I6IFRoZSBjb25uZWN0aW9uIGhhcyBub3QgYmVlbiBlc3RhYmxpc2hlZCB5ZXQnKTtcbiAgfVxuICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBTb2NrSlMuT1BFTikge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLl90cmFuc3BvcnQuc2VuZChlc2NhcGUucXVvdGUoZGF0YSkpO1xufTtcblxuU29ja0pTLnZlcnNpb24gPSByZXF1aXJlKCcuL3ZlcnNpb24nKTtcblxuU29ja0pTLkNPTk5FQ1RJTkcgPSAwO1xuU29ja0pTLk9QRU4gPSAxO1xuU29ja0pTLkNMT1NJTkcgPSAyO1xuU29ja0pTLkNMT1NFRCA9IDM7XG5cblNvY2tKUy5wcm90b3R5cGUuX3JlY2VpdmVJbmZvID0gZnVuY3Rpb24oaW5mbywgcnR0KSB7XG4gIGRlYnVnKCdfcmVjZWl2ZUluZm8nLCBydHQpO1xuICB0aGlzLl9pciA9IG51bGw7XG4gIGlmICghaW5mbykge1xuICAgIHRoaXMuX2Nsb3NlKDEwMDIsICdDYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlc3RhYmxpc2ggYSByb3VuZC10cmlwIHRpbWVvdXQgKFJUTykgYmFzZWQgb24gdGhlXG4gIC8vIHJvdW5kLXRyaXAgdGltZSAoUlRUKVxuICB0aGlzLl9ydG8gPSB0aGlzLmNvdW50UlRPKHJ0dCk7XG4gIC8vIGFsbG93IHNlcnZlciB0byBvdmVycmlkZSB1cmwgdXNlZCBmb3IgdGhlIGFjdHVhbCB0cmFuc3BvcnRcbiAgdGhpcy5fdHJhbnNVcmwgPSBpbmZvLmJhc2VfdXJsID8gaW5mby5iYXNlX3VybCA6IHRoaXMudXJsO1xuICBpbmZvID0gb2JqZWN0VXRpbHMuZXh0ZW5kKGluZm8sIHRoaXMuX3VybEluZm8pO1xuICBkZWJ1ZygnaW5mbycsIGluZm8pO1xuICAvLyBkZXRlcm1pbmUgbGlzdCBvZiBkZXNpcmVkIGFuZCBzdXBwb3J0ZWQgdHJhbnNwb3J0c1xuICB2YXIgZW5hYmxlZFRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzLmZpbHRlclRvRW5hYmxlZCh0aGlzLl90cmFuc3BvcnRzV2hpdGVsaXN0LCBpbmZvKTtcbiAgdGhpcy5fdHJhbnNwb3J0cyA9IGVuYWJsZWRUcmFuc3BvcnRzLm1haW47XG4gIGRlYnVnKHRoaXMuX3RyYW5zcG9ydHMubGVuZ3RoICsgJyBlbmFibGVkIHRyYW5zcG9ydHMnKTtcblxuICB0aGlzLl9jb25uZWN0KCk7XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl9jb25uZWN0ID0gZnVuY3Rpb24oKSB7XG4gIGZvciAodmFyIFRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydHMuc2hpZnQoKTsgVHJhbnNwb3J0OyBUcmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnRzLnNoaWZ0KCkpIHtcbiAgICBkZWJ1ZygnYXR0ZW1wdCcsIFRyYW5zcG9ydC50cmFuc3BvcnROYW1lKTtcbiAgICBpZiAoVHJhbnNwb3J0Lm5lZWRCb2R5KSB7XG4gICAgICBpZiAoIWdsb2JhbC5kb2N1bWVudC5ib2R5IHx8XG4gICAgICAgICAgKHR5cGVvZiBnbG9iYWwuZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGdsb2JhbC5kb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnY29tcGxldGUnICYmXG4gICAgICAgICAgICBnbG9iYWwuZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2ludGVyYWN0aXZlJykpIHtcbiAgICAgICAgZGVidWcoJ3dhaXRpbmcgZm9yIGJvZHknKTtcbiAgICAgICAgdGhpcy5fdHJhbnNwb3J0cy51bnNoaWZ0KFRyYW5zcG9ydCk7XG4gICAgICAgIGV2ZW50VXRpbHMuYXR0YWNoRXZlbnQoJ2xvYWQnLCB0aGlzLl9jb25uZWN0LmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIHRpbWVvdXQgYmFzZWQgb24gUlRPIGFuZCByb3VuZCB0cmlwcy4gRGVmYXVsdCB0byA1c1xuICAgIHZhciB0aW1lb3V0TXMgPSBNYXRoLm1heCh0aGlzLl90aW1lb3V0LCAodGhpcy5fcnRvICogVHJhbnNwb3J0LnJvdW5kVHJpcHMpIHx8IDUwMDApO1xuICAgIHRoaXMuX3RyYW5zcG9ydFRpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5fdHJhbnNwb3J0VGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0TXMpO1xuICAgIGRlYnVnKCd1c2luZyB0aW1lb3V0JywgdGltZW91dE1zKTtcblxuICAgIHZhciB0cmFuc3BvcnRVcmwgPSB1cmxVdGlscy5hZGRQYXRoKHRoaXMuX3RyYW5zVXJsLCAnLycgKyB0aGlzLl9zZXJ2ZXIgKyAnLycgKyB0aGlzLl9nZW5lcmF0ZVNlc3Npb25JZCgpKTtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuX3RyYW5zcG9ydE9wdGlvbnNbVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWVdO1xuICAgIGRlYnVnKCd0cmFuc3BvcnQgdXJsJywgdHJhbnNwb3J0VXJsKTtcbiAgICB2YXIgdHJhbnNwb3J0T2JqID0gbmV3IFRyYW5zcG9ydCh0cmFuc3BvcnRVcmwsIHRoaXMuX3RyYW5zVXJsLCBvcHRpb25zKTtcbiAgICB0cmFuc3BvcnRPYmoub24oJ21lc3NhZ2UnLCB0aGlzLl90cmFuc3BvcnRNZXNzYWdlLmJpbmQodGhpcykpO1xuICAgIHRyYW5zcG9ydE9iai5vbmNlKCdjbG9zZScsIHRoaXMuX3RyYW5zcG9ydENsb3NlLmJpbmQodGhpcykpO1xuICAgIHRyYW5zcG9ydE9iai50cmFuc3BvcnROYW1lID0gVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWU7XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0T2JqO1xuXG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuX2Nsb3NlKDIwMDAsICdBbGwgdHJhbnNwb3J0cyBmYWlsZWQnLCBmYWxzZSk7XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl90cmFuc3BvcnRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfdHJhbnNwb3J0VGltZW91dCcpO1xuICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBTb2NrSlMuQ09OTkVDVElORykge1xuICAgIGlmICh0aGlzLl90cmFuc3BvcnQpIHtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydC5jbG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zcG9ydENsb3NlKDIwMDcsICdUcmFuc3BvcnQgdGltZWQgb3V0Jyk7XG4gIH1cbn07XG5cblNvY2tKUy5wcm90b3R5cGUuX3RyYW5zcG9ydE1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHtcbiAgZGVidWcoJ190cmFuc3BvcnRNZXNzYWdlJywgbXNnKTtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCB0eXBlID0gbXNnLnNsaWNlKDAsIDEpXG4gICAgLCBjb250ZW50ID0gbXNnLnNsaWNlKDEpXG4gICAgLCBwYXlsb2FkXG4gICAgO1xuXG4gIC8vIGZpcnN0IGNoZWNrIGZvciBtZXNzYWdlcyB0aGF0IGRvbid0IG5lZWQgYSBwYXlsb2FkXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ28nOlxuICAgICAgdGhpcy5fb3BlbigpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2gnOlxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaGVhcnRiZWF0JykpO1xuICAgICAgZGVidWcoJ2hlYXJ0YmVhdCcsIHRoaXMudHJhbnNwb3J0KTtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb250ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIHBheWxvYWQgPSBKU09OMy5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1ZygnYmFkIGpzb24nLCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGVidWcoJ2VtcHR5IHBheWxvYWQnLCBjb250ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdhJzpcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQpKSB7XG4gICAgICAgIHBheWxvYWQuZm9yRWFjaChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgZGVidWcoJ21lc3NhZ2UnLCBzZWxmLnRyYW5zcG9ydCwgcCk7XG4gICAgICAgICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBUcmFuc3BvcnRNZXNzYWdlRXZlbnQocCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ20nOlxuICAgICAgZGVidWcoJ21lc3NhZ2UnLCB0aGlzLnRyYW5zcG9ydCwgcGF5bG9hZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFRyYW5zcG9ydE1lc3NhZ2VFdmVudChwYXlsb2FkKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjJzpcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQpICYmIHBheWxvYWQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMuX2Nsb3NlKHBheWxvYWRbMF0sIHBheWxvYWRbMV0sIHRydWUpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cblNvY2tKUy5wcm90b3R5cGUuX3RyYW5zcG9ydENsb3NlID0gZnVuY3Rpb24oY29kZSwgcmVhc29uKSB7XG4gIGRlYnVnKCdfdHJhbnNwb3J0Q2xvc2UnLCB0aGlzLnRyYW5zcG9ydCwgY29kZSwgcmVhc29uKTtcbiAgaWYgKHRoaXMuX3RyYW5zcG9ydCkge1xuICAgIHRoaXMuX3RyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgIHRoaXMudHJhbnNwb3J0ID0gbnVsbDtcbiAgfVxuXG4gIGlmICghdXNlclNldENvZGUoY29kZSkgJiYgY29kZSAhPT0gMjAwMCAmJiB0aGlzLnJlYWR5U3RhdGUgPT09IFNvY2tKUy5DT05ORUNUSU5HKSB7XG4gICAgdGhpcy5fY29ubmVjdCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2Nsb3NlKGNvZGUsIHJlYXNvbik7XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl9vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfb3BlbicsIHRoaXMuX3RyYW5zcG9ydCAmJiB0aGlzLl90cmFuc3BvcnQudHJhbnNwb3J0TmFtZSwgdGhpcy5yZWFkeVN0YXRlKTtcbiAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gU29ja0pTLkNPTk5FQ1RJTkcpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNwb3J0VGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdHJhbnNwb3J0VGltZW91dElkKTtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydFRpbWVvdXRJZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNvY2tKUy5PUEVOO1xuICAgIHRoaXMudHJhbnNwb3J0ID0gdGhpcy5fdHJhbnNwb3J0LnRyYW5zcG9ydE5hbWU7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnb3BlbicpKTtcbiAgICBkZWJ1ZygnY29ubmVjdGVkJywgdGhpcy50cmFuc3BvcnQpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBzZXJ2ZXIgbWlnaHQgaGF2ZSBiZWVuIHJlc3RhcnRlZCwgYW5kIGxvc3QgdHJhY2sgb2Ygb3VyXG4gICAgLy8gY29ubmVjdGlvbi5cbiAgICB0aGlzLl9jbG9zZSgxMDA2LCAnU2VydmVyIGxvc3Qgc2Vzc2lvbicpO1xuICB9XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl9jbG9zZSA9IGZ1bmN0aW9uKGNvZGUsIHJlYXNvbiwgd2FzQ2xlYW4pIHtcbiAgZGVidWcoJ19jbG9zZScsIHRoaXMudHJhbnNwb3J0LCBjb2RlLCByZWFzb24sIHdhc0NsZWFuLCB0aGlzLnJlYWR5U3RhdGUpO1xuICB2YXIgZm9yY2VGYWlsID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMuX2lyKSB7XG4gICAgZm9yY2VGYWlsID0gdHJ1ZTtcbiAgICB0aGlzLl9pci5jbG9zZSgpO1xuICAgIHRoaXMuX2lyID0gbnVsbDtcbiAgfVxuICBpZiAodGhpcy5fdHJhbnNwb3J0KSB7XG4gICAgdGhpcy5fdHJhbnNwb3J0LmNsb3NlKCk7XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zcG9ydCA9IG51bGw7XG4gIH1cblxuICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBTb2NrSlMuQ0xPU0VEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkU3RhdGVFcnJvcjogU29ja0pTIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkJyk7XG4gIH1cblxuICB0aGlzLnJlYWR5U3RhdGUgPSBTb2NrSlMuQ0xPU0lORztcbiAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTb2NrSlMuQ0xPU0VEO1xuXG4gICAgaWYgKGZvcmNlRmFpbCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSk7XG4gICAgfVxuXG4gICAgdmFyIGUgPSBuZXcgQ2xvc2VFdmVudCgnY2xvc2UnKTtcbiAgICBlLndhc0NsZWFuID0gd2FzQ2xlYW4gfHwgZmFsc2U7XG4gICAgZS5jb2RlID0gY29kZSB8fCAxMDAwO1xuICAgIGUucmVhc29uID0gcmVhc29uO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KGUpO1xuICAgIHRoaXMub25tZXNzYWdlID0gdGhpcy5vbmNsb3NlID0gdGhpcy5vbmVycm9yID0gbnVsbDtcbiAgICBkZWJ1ZygnZGlzY29ubmVjdGVkJyk7XG4gIH0uYmluZCh0aGlzKSwgMCk7XG59O1xuXG4vLyBTZWU6IGh0dHA6Ly93d3cuZXJnLmFiZG4uYWMudWsvfmdlcnJpdC9kY2NwL25vdGVzL2NjaWQyL3J0b19lc3RpbWF0b3IvXG4vLyBhbmQgUkZDIDI5ODguXG5Tb2NrSlMucHJvdG90eXBlLmNvdW50UlRPID0gZnVuY3Rpb24ocnR0KSB7XG4gIC8vIEluIGEgbG9jYWwgZW52aXJvbm1lbnQsIHdoZW4gdXNpbmcgSUU4LzkgYW5kIHRoZSBganNvbnAtcG9sbGluZ2BcbiAgLy8gdHJhbnNwb3J0IHRoZSB0aW1lIG5lZWRlZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uICh0aGUgdGltZSB0aGF0IHBhc3NcbiAgLy8gZnJvbSB0aGUgb3BlbmluZyBvZiB0aGUgdHJhbnNwb3J0IHRvIHRoZSBjYWxsIG9mIGBfZGlzcGF0Y2hPcGVuYCkgaXNcbiAgLy8gYXJvdW5kIDIwMG1zZWMgKHRoZSBsb3dlciBib3VuZCB1c2VkIGluIHRoZSBhcnRpY2xlIGFib3ZlKSBhbmQgdGhpc1xuICAvLyBjYXVzZXMgc3B1cmlvdXMgdGltZW91dHMuIEZvciB0aGlzIHJlYXNvbiB3ZSBjYWxjdWxhdGUgYSB2YWx1ZSBzbGlnaHRseVxuICAvLyBsYXJnZXIgdGhhbiB0aGF0IHVzZWQgaW4gdGhlIGFydGljbGUuXG4gIGlmIChydHQgPiAxMDApIHtcbiAgICByZXR1cm4gNCAqIHJ0dDsgLy8gcnRvID4gNDAwbXNlY1xuICB9XG4gIHJldHVybiAzMDAgKyBydHQ7IC8vIDMwMG1zZWMgPCBydG8gPD0gNDAwbXNlY1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhdmFpbGFibGVUcmFuc3BvcnRzKSB7XG4gIHRyYW5zcG9ydHMgPSB0cmFuc3BvcnQoYXZhaWxhYmxlVHJhbnNwb3J0cyk7XG4gIHJlcXVpcmUoJy4vaWZyYW1lLWJvb3RzdHJhcCcpKFNvY2tKUywgYXZhaWxhYmxlVHJhbnNwb3J0cyk7XG4gIHJldHVybiBTb2NrSlM7XG59O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL2V2ZW50L2Nsb3NlXCI6MixcIi4vZXZlbnQvZXZlbnRcIjo0LFwiLi9ldmVudC9ldmVudHRhcmdldFwiOjUsXCIuL2V2ZW50L3RyYW5zLW1lc3NhZ2VcIjo2LFwiLi9pZnJhbWUtYm9vdHN0cmFwXCI6OCxcIi4vaW5mby1yZWNlaXZlclwiOjEyLFwiLi9sb2NhdGlvblwiOjEzLFwiLi9zaGltc1wiOjE1LFwiLi91dGlscy9icm93c2VyXCI6NDQsXCIuL3V0aWxzL2VzY2FwZVwiOjQ1LFwiLi91dGlscy9ldmVudFwiOjQ2LFwiLi91dGlscy9sb2dcIjo0OCxcIi4vdXRpbHMvb2JqZWN0XCI6NDksXCIuL3V0aWxzL3JhbmRvbVwiOjUwLFwiLi91dGlscy90cmFuc3BvcnRcIjo1MSxcIi4vdXRpbHMvdXJsXCI6NTIsXCIuL3ZlcnNpb25cIjo1MyxcImRlYnVnXCI6NTUsXCJpbmhlcml0c1wiOjU3LFwianNvbjNcIjo1OCxcInVybC1wYXJzZVwiOjYxfV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qIGpzY3M6IGRpc2FibGUgKi9cbid1c2Ugc3RyaWN0JztcblxuLy8gcHVsbGVkIHNwZWNpZmljIHNoaW1zIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltXG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG52YXIgYXJyYXlfc2xpY2UgPSBBcnJheVByb3RvdHlwZS5zbGljZTtcblxudmFyIF90b1N0cmluZyA9IE9iamVjdFByb3RvdHlwZS50b1N0cmluZztcbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiBPYmplY3RQcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG52YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59O1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiAoZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7fSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBFUzMgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0oKSk7XG5cbi8vIERlZmluZSBjb25maWd1cmFibGUsIHdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZSBwcm9wc1xuLy8gaWYgdGhleSBkb24ndCBleGlzdC5cbnZhciBkZWZpbmVQcm9wZXJ0eTtcbmlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG4gICAgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBtZXRob2QsIGZvcmNlQXNzaWduKSB7XG4gICAgICAgIGlmICghZm9yY2VBc3NpZ24gJiYgKG5hbWUgaW4gb2JqZWN0KSkgeyByZXR1cm47IH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZXRob2RcbiAgICAgICAgfSk7XG4gICAgfTtcbn0gZWxzZSB7XG4gICAgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBtZXRob2QsIGZvcmNlQXNzaWduKSB7XG4gICAgICAgIGlmICghZm9yY2VBc3NpZ24gJiYgKG5hbWUgaW4gb2JqZWN0KSkgeyByZXR1cm47IH1cbiAgICAgICAgb2JqZWN0W25hbWVdID0gbWV0aG9kO1xuICAgIH07XG59XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCwgZm9yY2VBc3NpZ24pIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0UHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBuYW1lKSkge1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwgbWFwW25hbWVdLCBmb3JjZUFzc2lnbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykge1xuICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW4ndCBjb252ZXJ0IFwiICsgbyArICcgdG8gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qobyk7XG59O1xuXG4vL1xuLy8gVXRpbFxuLy8gPT09PT09XG4vL1xuXG4vLyBFUzUgOS40XG4vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjRcbi8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXJcblxuZnVuY3Rpb24gdG9JbnRlZ2VyKG51bSkge1xuICAgIHZhciBuID0gK251bTtcbiAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTlxuICAgICAgICBuID0gMDtcbiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEgLyAwKSAmJiBuICE9PSAtKDEgLyAwKSkge1xuICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gVG9VaW50MzIoeCkge1xuICAgIHJldHVybiB4ID4+PiAwO1xufVxuXG4vL1xuLy8gRnVuY3Rpb25cbi8vID09PT09PT09XG4vL1xuXG4vLyBFUy01IDE1LjMuNC41XG4vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4zLjQuNVxuXG5mdW5jdGlvbiBFbXB0eSgpIHt9XG5cbmRlZmluZVByb3BlcnRpZXMoRnVuY3Rpb25Qcm90b3R5cGUsIHtcbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxXG4gICAgICAgIC8vIDEuIExldCBUYXJnZXQgYmUgdGhlIHRoaXMgdmFsdWUuXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgICAgICAvLyAyLiBJZiBJc0NhbGxhYmxlKFRhcmdldCkgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi5cbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJyArIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcgKHBvc3NpYmx5IGVtcHR5KSBpbnRlcm5hbCBsaXN0IG9mIGFsbCBvZiB0aGVcbiAgICAgICAgLy8gICBhcmd1bWVudCB2YWx1ZXMgcHJvdmlkZWQgYWZ0ZXIgdGhpc0FyZyAoYXJnMSwgYXJnMiBldGMpLCBpbiBvcmRlci5cbiAgICAgICAgLy8gWFhYIHNsaWNlZEFyZ3Mgd2lsbCBzdGFuZCBpbiBmb3IgXCJBXCIgaWYgdXNlZFxuICAgICAgICB2YXIgYXJncyA9IGFycmF5X3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsXG4gICAgICAgIC8vIDQuIExldCBGIGJlIGEgbmV3IG5hdGl2ZSBFQ01BU2NyaXB0IG9iamVjdC5cbiAgICAgICAgLy8gMTEuIFNldCB0aGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRoZSBzdGFuZGFyZFxuICAgICAgICAvLyAgIGJ1aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgYXMgc3BlY2lmaWVkIGluIDE1LjMuMy4xLlxuICAgICAgICAvLyAxMi4gU2V0IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpblxuICAgICAgICAvLyAgIDE1LjMuNC41LjEuXG4gICAgICAgIC8vIDEzLiBTZXQgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW5cbiAgICAgICAgLy8gICAxNS4zLjQuNS4yLlxuICAgICAgICAvLyAxNC4gU2V0IHRoZSBbW0hhc0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW5cbiAgICAgICAgLy8gICAxNS4zLjQuNS4zLlxuICAgICAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMiBbW0NvbnN0cnVjdF1dXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsXG4gICAgICAgICAgICAgICAgLy8gRiB0aGF0IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBiaW5kIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFcbiAgICAgICAgICAgICAgICAvLyBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIHRha2VuOlxuICAgICAgICAgICAgICAgIC8vIDEuIExldCB0YXJnZXQgYmUgdGhlIHZhbHVlIG9mIEYncyBbW1RhcmdldEZ1bmN0aW9uXV1cbiAgICAgICAgICAgICAgICAvLyAgIGludGVybmFsIHByb3BlcnR5LlxuICAgICAgICAgICAgICAgIC8vIDIuIElmIHRhcmdldCBoYXMgbm8gW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2QsIGFcbiAgICAgICAgICAgICAgICAvLyAgIFR5cGVFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLlxuICAgICAgICAgICAgICAgIC8vIDMuIExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kQXJnc11dIGludGVybmFsXG4gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNhbWVcbiAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAgICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbFxuICAgICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLlxuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoYXJyYXlfc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXVxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRixcbiAgICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhXG4gICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46XG4gICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWxcbiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5LlxuICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsXG4gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsXG4gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNhbWVcbiAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAgICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kXG4gICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmRcbiAgICAgICAgICAgICAgICAvLyAgIHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuXG5cbiAgICAgICAgICAgICAgICAvLyBlcXVpdjogdGFyZ2V0LmNhbGwodGhpcywgLi4uYm91bmRBcmdzLCAuLi5hcmdzKVxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KGFycmF5X3NsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcblxuICAgICAgICAvLyAxNS4gSWYgdGhlIFtbQ2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQgaXMgXCJGdW5jdGlvblwiLCB0aGVuXG4gICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuXG4gICAgICAgIC8vICAgICBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXNcbiAgICAgICAgLy8gICAgICAgbGFyZ2VyLlxuICAgICAgICAvLyAxNi4gRWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLlxuXG4gICAgICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG5cbiAgICAgICAgLy8gMTcuIFNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2YWx1ZXNcbiAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuXG4gICAgICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFhYWCBCdWlsZCBhIGR5bmFtaWMgZnVuY3Rpb24gd2l0aCBkZXNpcmVkIGFtb3VudCBvZiBhcmd1bWVudHMgaXMgdGhlIG9ubHlcbiAgICAgICAgLy8gd2F5IHRvIHNldCB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24uXG4gICAgICAgIC8vIEluIGVudmlyb25tZW50cyB3aGVyZSBDb250ZW50IFNlY3VyaXR5IFBvbGljaWVzIGVuYWJsZWQgKENocm9tZSBleHRlbnNpb25zLFxuICAgICAgICAvLyBmb3IgZXguKSBhbGwgdXNlIG9mIGV2YWwgb3IgRnVuY3Rpb24gY29zdHJ1Y3RvciB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgICAgICAvLyBIb3dldmVyIGluIGFsbCBvZiB0aGVzZSBlbnZpcm9ubWVudHMgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgZXhpc3RzXG4gICAgICAgIC8vIGFuZCBzbyB0aGlzIGNvZGUgd2lsbCBuZXZlciBiZSBleGVjdXRlZC5cbiAgICAgICAgdmFyIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGRhbmdsaW5nIHJlZmVyZW5jZXMuXG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyAxOC4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuXG5cbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyAxOS4gTGV0IHRocm93ZXIgYmUgdGhlIFtbVGhyb3dUeXBlRXJyb3JdXSBmdW5jdGlvbiBPYmplY3QgKDEzLjIuMykuXG4gICAgICAgIC8vIDIwLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aFxuICAgICAgICAvLyAgIGFyZ3VtZW50cyBcImNhbGxlclwiLCBQcm9wZXJ0eURlc2NyaXB0b3Ige1tbR2V0XV06IHRocm93ZXIsIFtbU2V0XV06XG4gICAgICAgIC8vICAgdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sIGFuZFxuICAgICAgICAvLyAgIGZhbHNlLlxuICAgICAgICAvLyAyMS4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGhcbiAgICAgICAgLy8gICBhcmd1bWVudHMgXCJhcmd1bWVudHNcIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLFxuICAgICAgICAvLyAgIFtbU2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LFxuICAgICAgICAvLyAgIGFuZCBmYWxzZS5cblxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGRvIG5vdFxuICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZFxuICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy5cbiAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy5cblxuICAgICAgICAvLyAyMi4gUmV0dXJuIEYuXG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICB9XG59KTtcblxuLy9cbi8vIEFycmF5XG4vLyA9PT09PVxuLy9cblxuLy8gRVM1IDE1LjQuMy4yXG4vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjMuMlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheVxuZGVmaW5lUHJvcGVydGllcyhBcnJheSwgeyBpc0FycmF5OiBpc0FycmF5IH0pO1xuXG5cbnZhciBib3hlZFN0cmluZyA9IE9iamVjdCgnYScpO1xudmFyIHNwbGl0U3RyaW5nID0gYm94ZWRTdHJpbmdbMF0gIT09ICdhJyB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpO1xuXG52YXIgcHJvcGVybHlCb3hlc0NvbnRleHQgPSBmdW5jdGlvbiBwcm9wZXJseUJveGVkKG1ldGhvZCkge1xuICAgIC8vIENoZWNrIG5vZGUgMC42LjIxIGJ1ZyB3aGVyZSB0aGlyZCBwYXJhbWV0ZXIgaXMgbm90IGJveGVkXG4gICAgdmFyIHByb3Blcmx5Qm94ZXNOb25TdHJpY3QgPSB0cnVlO1xuICAgIHZhciBwcm9wZXJseUJveGVzU3RyaWN0ID0gdHJ1ZTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIG1ldGhvZC5jYWxsKCdmb28nLCBmdW5jdGlvbiAoXywgX18sIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dCAhPT0gJ29iamVjdCcpIHsgcHJvcGVybHlCb3hlc05vblN0cmljdCA9IGZhbHNlOyB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1ldGhvZC5jYWxsKFsxXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgICAgICAgcHJvcGVybHlCb3hlc1N0cmljdCA9IHR5cGVvZiB0aGlzID09PSAnc3RyaW5nJztcbiAgICAgICAgfSwgJ3gnKTtcbiAgICB9XG4gICAgcmV0dXJuICEhbWV0aG9kICYmIHByb3Blcmx5Qm94ZXNOb25TdHJpY3QgJiYgcHJvcGVybHlCb3hlc1N0cmljdDtcbn07XG5cbmRlZmluZVByb3BlcnRpZXMoQXJyYXlQcm90b3R5cGUsIHtcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgaXNTdHJpbmcodGhpcykgPyB0aGlzLnNwbGl0KCcnKSA6IG9iamVjdCxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLFxuICAgICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7XG5cbiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb25cbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGZ1bikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNhbGwsIHBhc3NpbmcgYXJndW1lbnRzOlxuICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHByb3BlcnR5IHZhbHVlLCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0XG4gICAgICAgICAgICAgICAgLy8gY29udGV4dFxuICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSwgIXByb3Blcmx5Qm94ZXNDb250ZXh0KEFycmF5UHJvdG90eXBlLmZvckVhY2gpKTtcblxuLy8gRVM1IDE1LjQuNC4xNFxuLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE0XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mXG52YXIgaGFzRmlyZWZveDJJbmRleE9mQnVnID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgJiYgWzAsIDFdLmluZGV4T2YoMSwgMikgIT09IC0xO1xuZGVmaW5lUHJvcGVydGllcyhBcnJheVByb3RvdHlwZSwge1xuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7XG4gICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgaXNTdHJpbmcodGhpcykgPyB0aGlzLnNwbGl0KCcnKSA6IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7XG5cbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5kaWNlc1xuICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59LCBoYXNGaXJlZm94MkluZGV4T2ZCdWcpO1xuXG4vL1xuLy8gU3RyaW5nXG4vLyA9PT09PT1cbi8vXG5cbi8vIEVTNSAxNS41LjQuMTRcbi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjUuNC4xNFxuXG4vLyBbYnVnZml4LCBJRSBsdCA5LCBmaXJlZm94IDQsIEtvbnF1ZXJvciwgT3BlcmEsIG9ic2N1cmUgYnJvd3NlcnNdXG4vLyBNYW55IGJyb3dzZXJzIGRvIG5vdCBzcGxpdCBwcm9wZXJseSB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb3IgdGhleVxuLy8gZG8gbm90IHBlcmZvcm0gdGhlIHNwbGl0IGNvcnJlY3RseSB1bmRlciBvYnNjdXJlIGNvbmRpdGlvbnMuXG4vLyBTZWUgaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Nyb3NzLWJyb3dzZXItc3BsaXRcbi8vIEkndmUgdGVzdGVkIGluIG1hbnkgYnJvd3NlcnMgYW5kIHRoaXMgc2VlbXMgdG8gY292ZXIgdGhlIGRldmlhbnQgb25lczpcbi8vICAgICdhYicuc3BsaXQoLyg/OmFiKSovKSBzaG91bGQgYmUgW1wiXCIsIFwiXCJdLCBub3QgW1wiXCJdXG4vLyAgICAnLicuc3BsaXQoLyguPykoLj8pLykgc2hvdWxkIGJlIFtcIlwiLCBcIi5cIiwgXCJcIiwgXCJcIl0sIG5vdCBbXCJcIiwgXCJcIl1cbi8vICAgICd0ZXNzdCcuc3BsaXQoLyhzKSovKSBzaG91bGQgYmUgW1widFwiLCB1bmRlZmluZWQsIFwiZVwiLCBcInNcIiwgXCJ0XCJdLCBub3Rcbi8vICAgICAgIFt1bmRlZmluZWQsIFwidFwiLCB1bmRlZmluZWQsIFwiZVwiLCAuLi5dXG4vLyAgICAnJy5zcGxpdCgvLj8vKSBzaG91bGQgYmUgW10sIG5vdCBbXCJcIl1cbi8vICAgICcuJy5zcGxpdCgvKCkoKS8pIHNob3VsZCBiZSBbXCIuXCJdLCBub3QgW1wiXCIsIFwiXCIsIFwiLlwiXVxuXG52YXIgc3RyaW5nX3NwbGl0ID0gU3RyaW5nUHJvdG90eXBlLnNwbGl0O1xuaWYgKFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT09IDIgfHxcbiAgICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9PSA0IHx8XG4gICAgJ3Rlc3N0Jy5zcGxpdCgvKHMpKi8pWzFdID09PSAndCcgfHxcbiAgICAndGVzdCcuc3BsaXQoLyg/OikvLCAtMSkubGVuZ3RoICE9PSA0IHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoIHx8XG4gICAgJy4nLnNwbGl0KC8oKSgpLykubGVuZ3RoID4gMVxuKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbXBsaWFudEV4ZWNOcGNnID0gLygpPz8vLmV4ZWMoJycpWzFdID09PSB2b2lkIDA7IC8vIE5QQ0c6IG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwXG5cbiAgICAgICAgU3RyaW5nUHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgICAgICAgIHZhciBzdHJpbmcgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwICYmIGxpbWl0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHNlcGFyYXRvcikgIT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ19zcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gW10sXG4gICAgICAgICAgICAgICAgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IuZXh0ZW5kZWQgICA/ICd4JyA6ICcnKSArIC8vIFByb3Bvc2VkIGZvciBFUzZcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ICAgICA/ICd5JyA6ICcnKSwgLy8gRmlyZWZveCAzK1xuICAgICAgICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSAwLFxuICAgICAgICAgICAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yMiwgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgICAgICAgc3RyaW5nICs9ICcnOyAvLyBUeXBlLWNvbnZlcnRcbiAgICAgICAgICAgIGlmICghY29tcGxpYW50RXhlY05wY2cpIHtcbiAgICAgICAgICAgICAgICAvLyBEb2Vzbid0IG5lZWQgZmxhZ3MgZ3ksIGJ1dCB0aGV5IGRvbid0IGh1cnRcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IyID0gbmV3IFJlZ0V4cCgnXicgKyBzZXBhcmF0b3Iuc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBWYWx1ZXMgZm9yIGBsaW1pdGAsIHBlciB0aGUgc3BlYzpcbiAgICAgICAgICAgICAqIElmIHVuZGVmaW5lZDogNDI5NDk2NzI5NSAvLyBNYXRoLnBvdygyLCAzMikgLSAxXG4gICAgICAgICAgICAgKiBJZiAwLCBJbmZpbml0eSwgb3IgTmFOOiAwXG4gICAgICAgICAgICAgKiBJZiBwb3NpdGl2ZSBudW1iZXI6IGxpbWl0ID0gTWF0aC5mbG9vcihsaW1pdCk7IGlmIChsaW1pdCA+IDQyOTQ5NjcyOTUpIGxpbWl0IC09IDQyOTQ5NjcyOTY7XG4gICAgICAgICAgICAgKiBJZiBuZWdhdGl2ZSBudW1iZXI6IDQyOTQ5NjcyOTYgLSBNYXRoLmZsb29yKE1hdGguYWJzKGxpbWl0KSlcbiAgICAgICAgICAgICAqIElmIG90aGVyOiBUeXBlLWNvbnZlcnQsIHRoZW4gdXNlIHRoZSBhYm92ZSBydWxlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsaW1pdCA9IGxpbWl0ID09PSB2b2lkIDAgP1xuICAgICAgICAgICAgICAgIC0xID4+PiAwIDogLy8gTWF0aC5wb3coMiwgMzIpIC0gMVxuICAgICAgICAgICAgICAgIFRvVWludDMyKGxpbWl0KTtcbiAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN0cmluZykpIHtcbiAgICAgICAgICAgICAgICAvLyBgc2VwYXJhdG9yLmxhc3RJbmRleGAgaXMgbm90IHJlbGlhYmxlIGNyb3NzLWJyb3dzZXJcbiAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGAgZm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheVByb3RvdHlwZS5wdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VwYXJhdG9yLmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yLmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yLnRlc3QoJycpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIGxpbWl0KSA6IG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9KCkpO1xuXG4vLyBbYnVnZml4LCBjaHJvbWVdXG4vLyBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSByZXN1bHQgYXJyYXkgY29udGFpbnMganVzdCBvbmUgU3RyaW5nLFxuLy8gd2hpY2ggaXMgdGhlIHRoaXMgdmFsdWUgKGNvbnZlcnRlZCB0byBhIFN0cmluZykuIElmIGxpbWl0IGlzIG5vdCB1bmRlZmluZWQsXG4vLyB0aGVuIHRoZSBvdXRwdXQgYXJyYXkgaXMgdHJ1bmNhdGVkIHNvIHRoYXQgaXQgY29udGFpbnMgbm8gbW9yZSB0aGFuIGxpbWl0XG4vLyBlbGVtZW50cy5cbi8vIFwiMFwiLnNwbGl0KHVuZGVmaW5lZCwgMCkgLT4gW11cbn0gZWxzZSBpZiAoJzAnLnNwbGl0KHZvaWQgMCwgMCkubGVuZ3RoKSB7XG4gICAgU3RyaW5nUHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgJiYgbGltaXQgPT09IDApIHsgcmV0dXJuIFtdOyB9XG4gICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xufVxuXG4vLyBFQ01BLTI2MiwgM3JkIEIuMi4zXG4vLyBOb3QgYW4gRUNNQVNjcmlwdCBzdGFuZGFyZCwgYWx0aG91Z2ggRUNNQVNjcmlwdCAzcmQgRWRpdGlvbiBoYXMgYVxuLy8gbm9uLW5vcm1hdGl2ZSBzZWN0aW9uIHN1Z2dlc3RpbmcgdW5pZm9ybSBzZW1hbnRpY3MgYW5kIGl0IHNob3VsZCBiZVxuLy8gbm9ybWFsaXplZCBhY3Jvc3MgYWxsIGJyb3dzZXJzXG4vLyBbYnVnZml4LCBJRSBsdCA5XSBJRSA8IDkgc3Vic3RyKCkgd2l0aCBuZWdhdGl2ZSB2YWx1ZSBub3Qgd29ya2luZyBpbiBJRVxudmFyIHN0cmluZ19zdWJzdHIgPSBTdHJpbmdQcm90b3R5cGUuc3Vic3RyO1xudmFyIGhhc05lZ2F0aXZlU3Vic3RyQnVnID0gJycuc3Vic3RyICYmICcwYicuc3Vic3RyKC0xKSAhPT0gJ2InO1xuZGVmaW5lUHJvcGVydGllcyhTdHJpbmdQcm90b3R5cGUsIHtcbiAgICBzdWJzdHI6IGZ1bmN0aW9uIHN1YnN0cihzdGFydCwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdfc3Vic3RyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgc3RhcnQgPCAwID8gKChzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQpIDwgMCA/IDAgOiBzdGFydCkgOiBzdGFydCxcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICApO1xuICAgIH1cbn0sIGhhc05lZ2F0aXZlU3Vic3RyQnVnKTtcblxufSx7fV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgLy8gc3RyZWFtaW5nIHRyYW5zcG9ydHNcbiAgcmVxdWlyZSgnLi90cmFuc3BvcnQvd2Vic29ja2V0JylcbiwgcmVxdWlyZSgnLi90cmFuc3BvcnQveGhyLXN0cmVhbWluZycpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L3hkci1zdHJlYW1pbmcnKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC9ldmVudHNvdXJjZScpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L2xpYi9pZnJhbWUtd3JhcCcpKHJlcXVpcmUoJy4vdHJhbnNwb3J0L2V2ZW50c291cmNlJykpXG5cbiAgLy8gcG9sbGluZyB0cmFuc3BvcnRzXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L2h0bWxmaWxlJylcbiwgcmVxdWlyZSgnLi90cmFuc3BvcnQvbGliL2lmcmFtZS13cmFwJykocmVxdWlyZSgnLi90cmFuc3BvcnQvaHRtbGZpbGUnKSlcbiwgcmVxdWlyZSgnLi90cmFuc3BvcnQveGhyLXBvbGxpbmcnKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC94ZHItcG9sbGluZycpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L2xpYi9pZnJhbWUtd3JhcCcpKHJlcXVpcmUoJy4vdHJhbnNwb3J0L3hoci1wb2xsaW5nJykpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L2pzb25wLXBvbGxpbmcnKVxuXTtcblxufSx7XCIuL3RyYW5zcG9ydC9ldmVudHNvdXJjZVwiOjIwLFwiLi90cmFuc3BvcnQvaHRtbGZpbGVcIjoyMSxcIi4vdHJhbnNwb3J0L2pzb25wLXBvbGxpbmdcIjoyMyxcIi4vdHJhbnNwb3J0L2xpYi9pZnJhbWUtd3JhcFwiOjI2LFwiLi90cmFuc3BvcnQvd2Vic29ja2V0XCI6MzgsXCIuL3RyYW5zcG9ydC94ZHItcG9sbGluZ1wiOjM5LFwiLi90cmFuc3BvcnQveGRyLXN0cmVhbWluZ1wiOjQwLFwiLi90cmFuc3BvcnQveGhyLXBvbGxpbmdcIjo0MSxcIi4vdHJhbnNwb3J0L3hoci1zdHJlYW1pbmdcIjo0Mn1dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9ldmVudCcpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICAsIFhIUiA9IGdsb2JhbC5YTUxIdHRwUmVxdWVzdFxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6YnJvd3Nlcjp4aHInKTtcbn1cblxuZnVuY3Rpb24gQWJzdHJhY3RYSFJPYmplY3QobWV0aG9kLCB1cmwsIHBheWxvYWQsIG9wdHMpIHtcbiAgZGVidWcobWV0aG9kLCB1cmwpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuX3N0YXJ0KG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzKTtcbiAgfSwgMCk7XG59XG5cbmluaGVyaXRzKEFic3RyYWN0WEhST2JqZWN0LCBFdmVudEVtaXR0ZXIpO1xuXG5BYnN0cmFjdFhIUk9iamVjdC5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24obWV0aG9kLCB1cmwsIHBheWxvYWQsIG9wdHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyeSB7XG4gICAgdGhpcy54aHIgPSBuZXcgWEhSKCk7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gIH1cblxuICBpZiAoIXRoaXMueGhyKSB7XG4gICAgZGVidWcoJ25vIHhocicpO1xuICAgIHRoaXMuZW1pdCgnZmluaXNoJywgMCwgJ25vIHhociBzdXBwb3J0Jyk7XG4gICAgdGhpcy5fY2xlYW51cCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNldmVyYWwgYnJvd3NlcnMgY2FjaGUgUE9TVHNcbiAgdXJsID0gdXJsVXRpbHMuYWRkUXVlcnkodXJsLCAndD0nICsgKCtuZXcgRGF0ZSgpKSk7XG5cbiAgLy8gRXhwbG9yZXIgdGVuZHMgdG8ga2VlcCBjb25uZWN0aW9uIG9wZW4sIGV2ZW4gYWZ0ZXIgdGhlXG4gIC8vIHRhYiBnZXRzIGNsb3NlZDogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNTI4MFxuICB0aGlzLnVubG9hZFJlZiA9IHV0aWxzLnVubG9hZEFkZChmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygndW5sb2FkIGNsZWFudXAnKTtcbiAgICBzZWxmLl9jbGVhbnVwKHRydWUpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICB0aGlzLnhoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcbiAgICBpZiAodGhpcy50aW1lb3V0ICYmICd0aW1lb3V0JyBpbiB0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIudGltZW91dCA9IHRoaXMudGltZW91dDtcbiAgICAgIHRoaXMueGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBkZWJ1ZygneGhyIHRpbWVvdXQnKTtcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnLCAwLCAnJyk7XG4gICAgICAgIHNlbGYuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZygnZXhjZXB0aW9uJywgZSk7XG4gICAgLy8gSUUgcmFpc2VzIGFuIGV4Y2VwdGlvbiBvbiB3cm9uZyBwb3J0LlxuICAgIHRoaXMuZW1pdCgnZmluaXNoJywgMCwgJycpO1xuICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICgoIW9wdHMgfHwgIW9wdHMubm9DcmVkZW50aWFscykgJiYgQWJzdHJhY3RYSFJPYmplY3Quc3VwcG9ydHNDT1JTKSB7XG4gICAgZGVidWcoJ3dpdGhDcmVkZW50aWFscycpO1xuICAgIC8vIE1vemlsbGEgZG9jcyBzYXlzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1hNTEh0dHBSZXF1ZXN0IDpcbiAgICAvLyBcIlRoaXMgbmV2ZXIgYWZmZWN0cyBzYW1lLXNpdGUgcmVxdWVzdHMuXCJcblxuICAgIHRoaXMueGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdHMgJiYgb3B0cy5oZWFkZXJzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG9wdHMuaGVhZGVycykge1xuICAgICAgdGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIG9wdHMuaGVhZGVyc1trZXldKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VsZi54aHIpIHtcbiAgICAgIHZhciB4ID0gc2VsZi54aHI7XG4gICAgICB2YXIgdGV4dCwgc3RhdHVzO1xuICAgICAgZGVidWcoJ3JlYWR5U3RhdGUnLCB4LnJlYWR5U3RhdGUpO1xuICAgICAgc3dpdGNoICh4LnJlYWR5U3RhdGUpIHtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgLy8gSUUgZG9lc24ndCBsaWtlIHBlZWtpbmcgaW50byByZXNwb25zZVRleHQgb3Igc3RhdHVzXG4gICAgICAgIC8vIG9uIE1pY3Jvc29mdC5YTUxIVFRQIGFuZCByZWFkeXN0YXRlPTNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGF0dXMgPSB4LnN0YXR1cztcbiAgICAgICAgICB0ZXh0ID0geC5yZXNwb25zZVRleHQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgICAgIH1cbiAgICAgICAgZGVidWcoJ3N0YXR1cycsIHN0YXR1cyk7XG4gICAgICAgIC8vIElFIHJldHVybnMgMTIyMyBmb3IgMjA0OiBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xNDUwXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDEyMjMpIHtcbiAgICAgICAgICBzdGF0dXMgPSAyMDQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJRSBkb2VzIHJldHVybiByZWFkeXN0YXRlID09IDMgZm9yIDQwNCBhbnN3ZXJzLlxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDAgJiYgdGV4dCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkZWJ1ZygnY2h1bmsnKTtcbiAgICAgICAgICBzZWxmLmVtaXQoJ2NodW5rJywgc3RhdHVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgc3RhdHVzID0geC5zdGF0dXM7XG4gICAgICAgIGRlYnVnKCdzdGF0dXMnLCBzdGF0dXMpO1xuICAgICAgICAvLyBJRSByZXR1cm5zIDEyMjMgZm9yIDIwNDogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTQ1MFxuICAgICAgICBpZiAoc3RhdHVzID09PSAxMjIzKSB7XG4gICAgICAgICAgc3RhdHVzID0gMjA0O1xuICAgICAgICB9XG4gICAgICAgIC8vIElFIHJldHVybnMgdGhpcyBmb3IgYSBiYWQgcG9ydFxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzgzNzcwKHY9dnMuODUpLmFzcHhcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMTIwMDUgfHwgc3RhdHVzID09PSAxMjAyOSkge1xuICAgICAgICAgIHN0YXR1cyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZygnZmluaXNoJywgc3RhdHVzLCB4LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJywgc3RhdHVzLCB4LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIHNlbGYuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBzZWxmLnhoci5zZW5kKHBheWxvYWQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2VsZi5lbWl0KCdmaW5pc2gnLCAwLCAnJyk7XG4gICAgc2VsZi5fY2xlYW51cChmYWxzZSk7XG4gIH1cbn07XG5cbkFic3RyYWN0WEhST2JqZWN0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKGFib3J0KSB7XG4gIGRlYnVnKCdjbGVhbnVwJyk7XG4gIGlmICghdGhpcy54aHIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgdXRpbHMudW5sb2FkRGVsKHRoaXMudW5sb2FkUmVmKTtcblxuICAvLyBJRSBuZWVkcyB0aGlzIGZpZWxkIHRvIGJlIGEgZnVuY3Rpb25cbiAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7fTtcbiAgaWYgKHRoaXMueGhyLm9udGltZW91dCkge1xuICAgIHRoaXMueGhyLm9udGltZW91dCA9IG51bGw7XG4gIH1cblxuICBpZiAoYWJvcnQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgfVxuICB9XG4gIHRoaXMudW5sb2FkUmVmID0gdGhpcy54aHIgPSBudWxsO1xufTtcblxuQWJzdHJhY3RYSFJPYmplY3QucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLl9jbGVhbnVwKHRydWUpO1xufTtcblxuQWJzdHJhY3RYSFJPYmplY3QuZW5hYmxlZCA9ICEhWEhSO1xuLy8gb3ZlcnJpZGUgWE1MSHR0cFJlcXVlc3QgZm9yIElFNi83XG4vLyBvYmZ1c2NhdGUgdG8gYXZvaWQgZmlyZXdhbGxzXG52YXIgYXhvID0gWydBY3RpdmUnXS5jb25jYXQoJ09iamVjdCcpLmpvaW4oJ1gnKTtcbmlmICghQWJzdHJhY3RYSFJPYmplY3QuZW5hYmxlZCAmJiAoYXhvIGluIGdsb2JhbCkpIHtcbiAgZGVidWcoJ292ZXJyaWRpbmcgeG1saHR0cHJlcXVlc3QnKTtcbiAgWEhSID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgZ2xvYmFsW2F4b10oJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICBBYnN0cmFjdFhIUk9iamVjdC5lbmFibGVkID0gISFuZXcgWEhSKCk7XG59XG5cbnZhciBjb3JzID0gZmFsc2U7XG50cnkge1xuICBjb3JzID0gJ3dpdGhDcmVkZW50aWFscycgaW4gbmV3IFhIUigpO1xufSBjYXRjaCAoaWdub3JlZCkge1xuICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG59XG5cbkFic3RyYWN0WEhST2JqZWN0LnN1cHBvcnRzQ09SUyA9IGNvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RYSFJPYmplY3Q7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHtcIi4uLy4uL3V0aWxzL2V2ZW50XCI6NDYsXCIuLi8uLi91dGlscy91cmxcIjo1MixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLkV2ZW50U291cmNlO1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRHJpdmVyID0gZ2xvYmFsLldlYlNvY2tldCB8fCBnbG9iYWwuTW96V2ViU29ja2V0O1xuaWYgKERyaXZlcikge1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFdlYlNvY2tldEJyb3dzZXJEcml2ZXIodXJsKSB7XG5cdFx0cmV0dXJuIG5ldyBEcml2ZXIodXJsKTtcblx0fTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gdW5kZWZpbmVkO1xufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sMjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgQWpheEJhc2VkVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi9saWIvYWpheC1iYXNlZCcpXG4gICwgRXZlbnRTb3VyY2VSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIvZXZlbnRzb3VyY2UnKVxuICAsIFhIUkNvcnNPYmplY3QgPSByZXF1aXJlKCcuL3NlbmRlci94aHItY29ycycpXG4gICwgRXZlbnRTb3VyY2VEcml2ZXIgPSByZXF1aXJlKCdldmVudHNvdXJjZScpXG4gIDtcblxuZnVuY3Rpb24gRXZlbnRTb3VyY2VUcmFuc3BvcnQodHJhbnNVcmwpIHtcbiAgaWYgKCFFdmVudFNvdXJjZVRyYW5zcG9ydC5lbmFibGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBjcmVhdGVkIHdoZW4gZGlzYWJsZWQnKTtcbiAgfVxuXG4gIEFqYXhCYXNlZFRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL2V2ZW50c291cmNlJywgRXZlbnRTb3VyY2VSZWNlaXZlciwgWEhSQ29yc09iamVjdCk7XG59XG5cbmluaGVyaXRzKEV2ZW50U291cmNlVHJhbnNwb3J0LCBBamF4QmFzZWRUcmFuc3BvcnQpO1xuXG5FdmVudFNvdXJjZVRyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIUV2ZW50U291cmNlRHJpdmVyO1xufTtcblxuRXZlbnRTb3VyY2VUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSA9ICdldmVudHNvdXJjZSc7XG5FdmVudFNvdXJjZVRyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFNvdXJjZVRyYW5zcG9ydDtcblxufSx7XCIuL2xpYi9hamF4LWJhc2VkXCI6MjQsXCIuL3JlY2VpdmVyL2V2ZW50c291cmNlXCI6MjksXCIuL3NlbmRlci94aHItY29yc1wiOjM1LFwiZXZlbnRzb3VyY2VcIjoxOCxcImluaGVyaXRzXCI6NTd9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBIdG1sZmlsZVJlY2VpdmVyID0gcmVxdWlyZSgnLi9yZWNlaXZlci9odG1sZmlsZScpXG4gICwgWEhSTG9jYWxPYmplY3QgPSByZXF1aXJlKCcuL3NlbmRlci94aHItbG9jYWwnKVxuICAsIEFqYXhCYXNlZFRyYW5zcG9ydCA9IHJlcXVpcmUoJy4vbGliL2FqYXgtYmFzZWQnKVxuICA7XG5cbmZ1bmN0aW9uIEh0bWxGaWxlVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghSHRtbGZpbGVSZWNlaXZlci5lbmFibGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgQWpheEJhc2VkVHJhbnNwb3J0LmNhbGwodGhpcywgdHJhbnNVcmwsICcvaHRtbGZpbGUnLCBIdG1sZmlsZVJlY2VpdmVyLCBYSFJMb2NhbE9iamVjdCk7XG59XG5cbmluaGVyaXRzKEh0bWxGaWxlVHJhbnNwb3J0LCBBamF4QmFzZWRUcmFuc3BvcnQpO1xuXG5IdG1sRmlsZVRyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oaW5mbykge1xuICByZXR1cm4gSHRtbGZpbGVSZWNlaXZlci5lbmFibGVkICYmIGluZm8uc2FtZU9yaWdpbjtcbn07XG5cbkh0bWxGaWxlVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnaHRtbGZpbGUnO1xuSHRtbEZpbGVUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7XG5cbm1vZHVsZS5leHBvcnRzID0gSHRtbEZpbGVUcmFuc3BvcnQ7XG5cbn0se1wiLi9saWIvYWpheC1iYXNlZFwiOjI0LFwiLi9yZWNlaXZlci9odG1sZmlsZVwiOjMwLFwiLi9zZW5kZXIveGhyLWxvY2FsXCI6MzcsXCJpbmhlcml0c1wiOjU3fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gRmV3IGNvb2wgdHJhbnNwb3J0cyBkbyB3b3JrIG9ubHkgZm9yIHNhbWUtb3JpZ2luLiBJbiBvcmRlciB0byBtYWtlXG4vLyB0aGVtIHdvcmsgY3Jvc3MtZG9tYWluIHdlIHNoYWxsIHVzZSBpZnJhbWUsIHNlcnZlZCBmcm9tIHRoZVxuLy8gcmVtb3RlIGRvbWFpbi4gTmV3IGJyb3dzZXJzIGhhdmUgY2FwYWJpbGl0aWVzIHRvIGNvbW11bmljYXRlIHdpdGhcbi8vIGNyb3NzIGRvbWFpbiBpZnJhbWUgdXNpbmcgcG9zdE1lc3NhZ2UoKS4gSW4gSUUgaXQgd2FzIGltcGxlbWVudGVkXG4vLyBmcm9tIElFIDgrLCBidXQgb2YgY291cnNlLCBJRSBnb3Qgc29tZSBkZXRhaWxzIHdyb25nOlxuLy8gICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2NjMTk3MDE1KHY9VlMuODUpLmFzcHhcbi8vICAgIGh0dHA6Ly9zdGV2ZXNvdWRlcnMuY29tL21pc2MvdGVzdC1wb3N0bWVzc2FnZS5waHBcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEpTT04zID0gcmVxdWlyZSgnanNvbjMnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIHZlcnNpb24gPSByZXF1aXJlKCcuLi92ZXJzaW9uJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL3VybCcpXG4gICwgaWZyYW1lVXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9pZnJhbWUnKVxuICAsIGV2ZW50VXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9ldmVudCcpXG4gICwgcmFuZG9tID0gcmVxdWlyZSgnLi4vdXRpbHMvcmFuZG9tJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnRyYW5zcG9ydDppZnJhbWUnKTtcbn1cblxuZnVuY3Rpb24gSWZyYW1lVHJhbnNwb3J0KHRyYW5zcG9ydCwgdHJhbnNVcmwsIGJhc2VVcmwpIHtcbiAgaWYgKCFJZnJhbWVUcmFuc3BvcnQuZW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLm9yaWdpbiA9IHVybFV0aWxzLmdldE9yaWdpbihiYXNlVXJsKTtcbiAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgdGhpcy50cmFuc1VybCA9IHRyYW5zVXJsO1xuICB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgdGhpcy53aW5kb3dJZCA9IHJhbmRvbS5zdHJpbmcoOCk7XG5cbiAgdmFyIGlmcmFtZVVybCA9IHVybFV0aWxzLmFkZFBhdGgoYmFzZVVybCwgJy9pZnJhbWUuaHRtbCcpICsgJyMnICsgdGhpcy53aW5kb3dJZDtcbiAgZGVidWcodHJhbnNwb3J0LCB0cmFuc1VybCwgaWZyYW1lVXJsKTtcblxuICB0aGlzLmlmcmFtZU9iaiA9IGlmcmFtZVV0aWxzLmNyZWF0ZUlmcmFtZShpZnJhbWVVcmwsIGZ1bmN0aW9uKHIpIHtcbiAgICBkZWJ1ZygnZXJyIGNhbGxiYWNrJyk7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIDEwMDYsICdVbmFibGUgdG8gbG9hZCBhbiBpZnJhbWUgKCcgKyByICsgJyknKTtcbiAgICBzZWxmLmNsb3NlKCk7XG4gIH0pO1xuXG4gIHRoaXMub25tZXNzYWdlQ2FsbGJhY2sgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XG4gIGV2ZW50VXRpbHMuYXR0YWNoRXZlbnQoJ21lc3NhZ2UnLCB0aGlzLm9ubWVzc2FnZUNhbGxiYWNrKTtcbn1cblxuaW5oZXJpdHMoSWZyYW1lVHJhbnNwb3J0LCBFdmVudEVtaXR0ZXIpO1xuXG5JZnJhbWVUcmFuc3BvcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICBpZiAodGhpcy5pZnJhbWVPYmopIHtcbiAgICBldmVudFV0aWxzLmRldGFjaEV2ZW50KCdtZXNzYWdlJywgdGhpcy5vbm1lc3NhZ2VDYWxsYmFjayk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFdoZW4gdGhlIGlmcmFtZSBpcyBub3QgbG9hZGVkLCBJRSByYWlzZXMgYW4gZXhjZXB0aW9uXG4gICAgICAvLyBvbiAnY29udGVudFdpbmRvdycuXG4gICAgICB0aGlzLnBvc3RNZXNzYWdlKCdjJyk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgIH1cbiAgICB0aGlzLmlmcmFtZU9iai5jbGVhbnVwKCk7XG4gICAgdGhpcy5pZnJhbWVPYmogPSBudWxsO1xuICAgIHRoaXMub25tZXNzYWdlQ2FsbGJhY2sgPSB0aGlzLmlmcmFtZU9iaiA9IG51bGw7XG4gIH1cbn07XG5cbklmcmFtZVRyYW5zcG9ydC5wcm90b3R5cGUuX21lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gIGRlYnVnKCdtZXNzYWdlJywgZS5kYXRhKTtcbiAgaWYgKCF1cmxVdGlscy5pc09yaWdpbkVxdWFsKGUub3JpZ2luLCB0aGlzLm9yaWdpbikpIHtcbiAgICBkZWJ1Zygnbm90IHNhbWUgb3JpZ2luJywgZS5vcmlnaW4sIHRoaXMub3JpZ2luKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaWZyYW1lTWVzc2FnZTtcbiAgdHJ5IHtcbiAgICBpZnJhbWVNZXNzYWdlID0gSlNPTjMucGFyc2UoZS5kYXRhKTtcbiAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgIGRlYnVnKCdiYWQganNvbicsIGUuZGF0YSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlmcmFtZU1lc3NhZ2Uud2luZG93SWQgIT09IHRoaXMud2luZG93SWQpIHtcbiAgICBkZWJ1ZygnbWlzbWF0Y2hlZCB3aW5kb3cgaWQnLCBpZnJhbWVNZXNzYWdlLndpbmRvd0lkLCB0aGlzLndpbmRvd0lkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKGlmcmFtZU1lc3NhZ2UudHlwZSkge1xuICBjYXNlICdzJzpcbiAgICB0aGlzLmlmcmFtZU9iai5sb2FkZWQoKTtcbiAgICAvLyB3aW5kb3cgZ2xvYmFsIGRlcGVuZGVuY3lcbiAgICB0aGlzLnBvc3RNZXNzYWdlKCdzJywgSlNPTjMuc3RyaW5naWZ5KFtcbiAgICAgIHZlcnNpb25cbiAgICAsIHRoaXMudHJhbnNwb3J0XG4gICAgLCB0aGlzLnRyYW5zVXJsXG4gICAgLCB0aGlzLmJhc2VVcmxcbiAgICBdKSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ3QnOlxuICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ2MnOlxuICAgIHZhciBjZGF0YTtcbiAgICB0cnkge1xuICAgICAgY2RhdGEgPSBKU09OMy5wYXJzZShpZnJhbWVNZXNzYWdlLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgICAgIGRlYnVnKCdiYWQganNvbicsIGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW1pdCgnY2xvc2UnLCBjZGF0YVswXSwgY2RhdGFbMV0pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICBicmVhaztcbiAgfVxufTtcblxuSWZyYW1lVHJhbnNwb3J0LnByb3RvdHlwZS5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcbiAgZGVidWcoJ3Bvc3RNZXNzYWdlJywgdHlwZSwgZGF0YSk7XG4gIHRoaXMuaWZyYW1lT2JqLnBvc3QoSlNPTjMuc3RyaW5naWZ5KHtcbiAgICB3aW5kb3dJZDogdGhpcy53aW5kb3dJZFxuICAsIHR5cGU6IHR5cGVcbiAgLCBkYXRhOiBkYXRhIHx8ICcnXG4gIH0pLCB0aGlzLm9yaWdpbik7XG59O1xuXG5JZnJhbWVUcmFuc3BvcnQucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gIGRlYnVnKCdzZW5kJywgbWVzc2FnZSk7XG4gIHRoaXMucG9zdE1lc3NhZ2UoJ20nLCBtZXNzYWdlKTtcbn07XG5cbklmcmFtZVRyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpZnJhbWVVdGlscy5pZnJhbWVFbmFibGVkO1xufTtcblxuSWZyYW1lVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnaWZyYW1lJztcbklmcmFtZVRyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjtcblxubW9kdWxlLmV4cG9ydHMgPSBJZnJhbWVUcmFuc3BvcnQ7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuLi91dGlscy9ldmVudFwiOjQ2LFwiLi4vdXRpbHMvaWZyYW1lXCI6NDcsXCIuLi91dGlscy9yYW5kb21cIjo1MCxcIi4uL3V0aWxzL3VybFwiOjUyLFwiLi4vdmVyc2lvblwiOjUzLFwiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3LFwianNvbjNcIjo1OH1dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIHNpbXBsZXN0IGFuZCBtb3N0IHJvYnVzdCB0cmFuc3BvcnQsIHVzaW5nIHRoZSB3ZWxsLWtub3cgY3Jvc3Ncbi8vIGRvbWFpbiBoYWNrIC0gSlNPTlAuIFRoaXMgdHJhbnNwb3J0IGlzIHF1aXRlIGluZWZmaWNpZW50IC0gb25lXG4vLyBtZXNzYWdlIGNvdWxkIHVzZSB1cCB0byBvbmUgaHR0cCByZXF1ZXN0LiBCdXQgYXQgbGVhc3QgaXQgd29ya3MgYWxtb3N0XG4vLyBldmVyeXdoZXJlLlxuLy8gS25vd24gbGltaXRhdGlvbnM6XG4vLyAgIG8geW91IHdpbGwgZ2V0IGEgc3Bpbm5pbmcgY3Vyc29yXG4vLyAgIG8gZm9yIEtvbnF1ZXJvciBhIGR1bWIgdGltZXIgaXMgbmVlZGVkIHRvIGRldGVjdCBlcnJvcnNcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIFNlbmRlclJlY2VpdmVyID0gcmVxdWlyZSgnLi9saWIvc2VuZGVyLXJlY2VpdmVyJylcbiAgLCBKc29ucFJlY2VpdmVyID0gcmVxdWlyZSgnLi9yZWNlaXZlci9qc29ucCcpXG4gICwganNvbnBTZW5kZXIgPSByZXF1aXJlKCcuL3NlbmRlci9qc29ucCcpXG4gIDtcblxuZnVuY3Rpb24gSnNvblBUcmFuc3BvcnQodHJhbnNVcmwpIHtcbiAgaWYgKCFKc29uUFRyYW5zcG9ydC5lbmFibGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBjcmVhdGVkIHdoZW4gZGlzYWJsZWQnKTtcbiAgfVxuICBTZW5kZXJSZWNlaXZlci5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL2pzb25wJywganNvbnBTZW5kZXIsIEpzb25wUmVjZWl2ZXIpO1xufVxuXG5pbmhlcml0cyhKc29uUFRyYW5zcG9ydCwgU2VuZGVyUmVjZWl2ZXIpO1xuXG5Kc29uUFRyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIWdsb2JhbC5kb2N1bWVudDtcbn07XG5cbkpzb25QVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnanNvbnAtcG9sbGluZyc7XG5Kc29uUFRyYW5zcG9ydC5yb3VuZFRyaXBzID0gMTtcbkpzb25QVHJhbnNwb3J0Lm5lZWRCb2R5ID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBKc29uUFRyYW5zcG9ydDtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi9saWIvc2VuZGVyLXJlY2VpdmVyXCI6MjgsXCIuL3JlY2VpdmVyL2pzb25wXCI6MzEsXCIuL3NlbmRlci9qc29ucFwiOjMzLFwiaW5oZXJpdHNcIjo1N31dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3VybCcpXG4gICwgU2VuZGVyUmVjZWl2ZXIgPSByZXF1aXJlKCcuL3NlbmRlci1yZWNlaXZlcicpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDphamF4LWJhc2VkJyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFqYXhTZW5kZXIoQWpheE9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24odXJsLCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIGRlYnVnKCdjcmVhdGUgYWpheCBzZW5kZXInLCB1cmwsIHBheWxvYWQpO1xuICAgIHZhciBvcHQgPSB7fTtcbiAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHQuaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzogJ3RleHQvcGxhaW4nfTtcbiAgICB9XG4gICAgdmFyIGFqYXhVcmwgPSB1cmxVdGlscy5hZGRQYXRoKHVybCwgJy94aHJfc2VuZCcpO1xuICAgIHZhciB4byA9IG5ldyBBamF4T2JqZWN0KCdQT1NUJywgYWpheFVybCwgcGF5bG9hZCwgb3B0KTtcbiAgICB4by5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAgIGRlYnVnKCdmaW5pc2gnLCBzdGF0dXMpO1xuICAgICAgeG8gPSBudWxsO1xuXG4gICAgICBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignaHR0cCBzdGF0dXMgJyArIHN0YXR1cykpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1ZygnYWJvcnQnKTtcbiAgICAgIHhvLmNsb3NlKCk7XG4gICAgICB4byA9IG51bGw7XG5cbiAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Fib3J0ZWQnKTtcbiAgICAgIGVyci5jb2RlID0gMTAwMDtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gQWpheEJhc2VkVHJhbnNwb3J0KHRyYW5zVXJsLCB1cmxTdWZmaXgsIFJlY2VpdmVyLCBBamF4T2JqZWN0KSB7XG4gIFNlbmRlclJlY2VpdmVyLmNhbGwodGhpcywgdHJhbnNVcmwsIHVybFN1ZmZpeCwgY3JlYXRlQWpheFNlbmRlcihBamF4T2JqZWN0KSwgUmVjZWl2ZXIsIEFqYXhPYmplY3QpO1xufVxuXG5pbmhlcml0cyhBamF4QmFzZWRUcmFuc3BvcnQsIFNlbmRlclJlY2VpdmVyKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBamF4QmFzZWRUcmFuc3BvcnQ7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuLi8uLi91dGlscy91cmxcIjo1MixcIi4vc2VuZGVyLXJlY2VpdmVyXCI6MjgsXCJkZWJ1Z1wiOjU1LFwiaW5oZXJpdHNcIjo1N31dLDI1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmJ1ZmZlcmVkLXNlbmRlcicpO1xufVxuXG5mdW5jdGlvbiBCdWZmZXJlZFNlbmRlcih1cmwsIHNlbmRlcikge1xuICBkZWJ1Zyh1cmwpO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgdGhpcy5zZW5kQnVmZmVyID0gW107XG4gIHRoaXMuc2VuZGVyID0gc2VuZGVyO1xuICB0aGlzLnVybCA9IHVybDtcbn1cblxuaW5oZXJpdHMoQnVmZmVyZWRTZW5kZXIsIEV2ZW50RW1pdHRlcik7XG5cbkJ1ZmZlcmVkU2VuZGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24obWVzc2FnZSkge1xuICBkZWJ1Zygnc2VuZCcsIG1lc3NhZ2UpO1xuICB0aGlzLnNlbmRCdWZmZXIucHVzaChtZXNzYWdlKTtcbiAgaWYgKCF0aGlzLnNlbmRTdG9wKSB7XG4gICAgdGhpcy5zZW5kU2NoZWR1bGUoKTtcbiAgfVxufTtcblxuLy8gRm9yIHBvbGxpbmcgdHJhbnNwb3J0cyBpbiBhIHNpdHVhdGlvbiB3aGVuIGluIHRoZSBtZXNzYWdlIGNhbGxiYWNrLFxuLy8gbmV3IG1lc3NhZ2UgaXMgYmVpbmcgc2VuZC4gSWYgdGhlIHNlbmRpbmcgY29ubmVjdGlvbiB3YXMgc3RhcnRlZFxuLy8gYmVmb3JlIHJlY2VpdmluZyBvbmUsIGl0IGlzIHBvc3NpYmxlIHRvIHNhdHVyYXRlIHRoZSBuZXR3b3JrIGFuZFxuLy8gdGltZW91dCBkdWUgdG8gdGhlIGxhY2sgb2YgcmVjZWl2aW5nIHNvY2tldC4gVG8gYXZvaWQgdGhhdCB3ZSBkZWxheVxuLy8gc2VuZGluZyBtZXNzYWdlcyBieSBzb21lIHNtYWxsIHRpbWUsIGluIG9yZGVyIHRvIGxldCByZWNlaXZpbmdcbi8vIGNvbm5lY3Rpb24gYmUgc3RhcnRlZCBiZWZvcmVoYW5kLiBUaGlzIGlzIG9ubHkgYSBoYWxmbWVhc3VyZSBhbmRcbi8vIGRvZXMgbm90IGZpeCB0aGUgYmlnIHByb2JsZW0sIGJ1dCBpdCBkb2VzIG1ha2UgdGhlIHRlc3RzIGdvIG1vcmVcbi8vIHN0YWJsZSBvbiBzbG93IG5ldHdvcmtzLlxuQnVmZmVyZWRTZW5kZXIucHJvdG90eXBlLnNlbmRTY2hlZHVsZVdhaXQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ3NlbmRTY2hlZHVsZVdhaXQnKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHJlZjtcbiAgdGhpcy5zZW5kU3RvcCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdzZW5kU3RvcCcpO1xuICAgIHNlbGYuc2VuZFN0b3AgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dCh0cmVmKTtcbiAgfTtcbiAgdHJlZiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3RpbWVvdXQnKTtcbiAgICBzZWxmLnNlbmRTdG9wID0gbnVsbDtcbiAgICBzZWxmLnNlbmRTY2hlZHVsZSgpO1xuICB9LCAyNSk7XG59O1xuXG5CdWZmZXJlZFNlbmRlci5wcm90b3R5cGUuc2VuZFNjaGVkdWxlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdzZW5kU2NoZWR1bGUnLCB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5zZW5kQnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgcGF5bG9hZCA9ICdbJyArIHRoaXMuc2VuZEJ1ZmZlci5qb2luKCcsJykgKyAnXSc7XG4gICAgdGhpcy5zZW5kU3RvcCA9IHRoaXMuc2VuZGVyKHRoaXMudXJsLCBwYXlsb2FkLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIHNlbGYuc2VuZFN0b3AgPSBudWxsO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBkZWJ1ZygnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgZXJyLmNvZGUgfHwgMTAwNiwgJ1NlbmRpbmcgZXJyb3I6ICcgKyBlcnIpO1xuICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnNlbmRTY2hlZHVsZVdhaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcbiAgfVxufTtcblxuQnVmZmVyZWRTZW5kZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfY2xlYW51cCcpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xufTtcblxuQnVmZmVyZWRTZW5kZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLl9jbGVhbnVwKCk7XG4gIGlmICh0aGlzLnNlbmRTdG9wKSB7XG4gICAgdGhpcy5zZW5kU3RvcCgpO1xuICAgIHRoaXMuc2VuZFN0b3AgPSBudWxsO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcmVkU2VuZGVyO1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgSWZyYW1lVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi4vaWZyYW1lJylcbiAgLCBvYmplY3RVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdCcpXG4gIDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0cmFuc3BvcnQpIHtcblxuICBmdW5jdGlvbiBJZnJhbWVXcmFwVHJhbnNwb3J0KHRyYW5zVXJsLCBiYXNlVXJsKSB7XG4gICAgSWZyYW1lVHJhbnNwb3J0LmNhbGwodGhpcywgdHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUsIHRyYW5zVXJsLCBiYXNlVXJsKTtcbiAgfVxuXG4gIGluaGVyaXRzKElmcmFtZVdyYXBUcmFuc3BvcnQsIElmcmFtZVRyYW5zcG9ydCk7XG5cbiAgSWZyYW1lV3JhcFRyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24odXJsLCBpbmZvKSB7XG4gICAgaWYgKCFnbG9iYWwuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgaWZyYW1lSW5mbyA9IG9iamVjdFV0aWxzLmV4dGVuZCh7fSwgaW5mbyk7XG4gICAgaWZyYW1lSW5mby5zYW1lT3JpZ2luID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJhbnNwb3J0LmVuYWJsZWQoaWZyYW1lSW5mbykgJiYgSWZyYW1lVHJhbnNwb3J0LmVuYWJsZWQoKTtcbiAgfTtcblxuICBJZnJhbWVXcmFwVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnaWZyYW1lLScgKyB0cmFuc3BvcnQudHJhbnNwb3J0TmFtZTtcbiAgSWZyYW1lV3JhcFRyYW5zcG9ydC5uZWVkQm9keSA9IHRydWU7XG4gIElmcmFtZVdyYXBUcmFuc3BvcnQucm91bmRUcmlwcyA9IElmcmFtZVRyYW5zcG9ydC5yb3VuZFRyaXBzICsgdHJhbnNwb3J0LnJvdW5kVHJpcHMgLSAxOyAvLyBodG1sLCBqYXZhc2NyaXB0ICgyKSArIHRyYW5zcG9ydCAtIG5vIENPUlMgKDEpXG5cbiAgSWZyYW1lV3JhcFRyYW5zcG9ydC5mYWNhZGVUcmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG5cbiAgcmV0dXJuIElmcmFtZVdyYXBUcmFuc3BvcnQ7XG59O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuLi8uLi91dGlscy9vYmplY3RcIjo0OSxcIi4uL2lmcmFtZVwiOjIyLFwiaW5oZXJpdHNcIjo1N31dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnBvbGxpbmcnKTtcbn1cblxuZnVuY3Rpb24gUG9sbGluZyhSZWNlaXZlciwgcmVjZWl2ZVVybCwgQWpheE9iamVjdCkge1xuICBkZWJ1ZyhyZWNlaXZlVXJsKTtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG4gIHRoaXMuUmVjZWl2ZXIgPSBSZWNlaXZlcjtcbiAgdGhpcy5yZWNlaXZlVXJsID0gcmVjZWl2ZVVybDtcbiAgdGhpcy5BamF4T2JqZWN0ID0gQWpheE9iamVjdDtcbiAgdGhpcy5fc2NoZWR1bGVSZWNlaXZlcigpO1xufVxuXG5pbmhlcml0cyhQb2xsaW5nLCBFdmVudEVtaXR0ZXIpO1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5fc2NoZWR1bGVSZWNlaXZlciA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX3NjaGVkdWxlUmVjZWl2ZXInKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcG9sbCA9IHRoaXMucG9sbCA9IG5ldyB0aGlzLlJlY2VpdmVyKHRoaXMucmVjZWl2ZVVybCwgdGhpcy5BamF4T2JqZWN0KTtcblxuICBwb2xsLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgZGVidWcoJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHNlbGYuZW1pdCgnbWVzc2FnZScsIG1zZyk7XG4gIH0pO1xuXG4gIHBvbGwub25jZSgnY2xvc2UnLCBmdW5jdGlvbihjb2RlLCByZWFzb24pIHtcbiAgICBkZWJ1ZygnY2xvc2UnLCBjb2RlLCByZWFzb24sIHNlbGYucG9sbElzQ2xvc2luZyk7XG4gICAgc2VsZi5wb2xsID0gcG9sbCA9IG51bGw7XG5cbiAgICBpZiAoIXNlbGYucG9sbElzQ2xvc2luZykge1xuICAgICAgaWYgKHJlYXNvbiA9PT0gJ25ldHdvcmsnKSB7XG4gICAgICAgIHNlbGYuX3NjaGVkdWxlUmVjZWl2ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBjb2RlIHx8IDEwMDYsIHJlYXNvbik7XG4gICAgICAgIHNlbGYucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cblBvbGxpbmcucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdhYm9ydCcpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB0aGlzLnBvbGxJc0Nsb3NpbmcgPSB0cnVlO1xuICBpZiAodGhpcy5wb2xsKSB7XG4gICAgdGhpcy5wb2xsLmFib3J0KCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9sbGluZztcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDI4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3VybCcpXG4gICwgQnVmZmVyZWRTZW5kZXIgPSByZXF1aXJlKCcuL2J1ZmZlcmVkLXNlbmRlcicpXG4gICwgUG9sbGluZyA9IHJlcXVpcmUoJy4vcG9sbGluZycpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpzZW5kZXItcmVjZWl2ZXInKTtcbn1cblxuZnVuY3Rpb24gU2VuZGVyUmVjZWl2ZXIodHJhbnNVcmwsIHVybFN1ZmZpeCwgc2VuZGVyRnVuYywgUmVjZWl2ZXIsIEFqYXhPYmplY3QpIHtcbiAgdmFyIHBvbGxVcmwgPSB1cmxVdGlscy5hZGRQYXRoKHRyYW5zVXJsLCB1cmxTdWZmaXgpO1xuICBkZWJ1Zyhwb2xsVXJsKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBCdWZmZXJlZFNlbmRlci5jYWxsKHRoaXMsIHRyYW5zVXJsLCBzZW5kZXJGdW5jKTtcblxuICB0aGlzLnBvbGwgPSBuZXcgUG9sbGluZyhSZWNlaXZlciwgcG9sbFVybCwgQWpheE9iamVjdCk7XG4gIHRoaXMucG9sbC5vbignbWVzc2FnZScsIGZ1bmN0aW9uKG1zZykge1xuICAgIGRlYnVnKCdwb2xsIG1lc3NhZ2UnLCBtc2cpO1xuICAgIHNlbGYuZW1pdCgnbWVzc2FnZScsIG1zZyk7XG4gIH0pO1xuICB0aGlzLnBvbGwub25jZSgnY2xvc2UnLCBmdW5jdGlvbihjb2RlLCByZWFzb24pIHtcbiAgICBkZWJ1ZygncG9sbCBjbG9zZScsIGNvZGUsIHJlYXNvbik7XG4gICAgc2VsZi5wb2xsID0gbnVsbDtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgY29kZSwgcmVhc29uKTtcbiAgICBzZWxmLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5pbmhlcml0cyhTZW5kZXJSZWNlaXZlciwgQnVmZmVyZWRTZW5kZXIpO1xuXG5TZW5kZXJSZWNlaXZlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgQnVmZmVyZWRTZW5kZXIucHJvdG90eXBlLmNsb3NlLmNhbGwodGhpcyk7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICBpZiAodGhpcy5wb2xsKSB7XG4gICAgdGhpcy5wb2xsLmFib3J0KCk7XG4gICAgdGhpcy5wb2xsID0gbnVsbDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZW5kZXJSZWNlaXZlcjtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcIi4uLy4uL3V0aWxzL3VybFwiOjUyLFwiLi9idWZmZXJlZC1zZW5kZXJcIjoyNSxcIi4vcG9sbGluZ1wiOjI3LFwiZGVidWdcIjo1NSxcImluaGVyaXRzXCI6NTd9XSwyOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgRXZlbnRTb3VyY2VEcml2ZXIgPSByZXF1aXJlKCdldmVudHNvdXJjZScpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpyZWNlaXZlcjpldmVudHNvdXJjZScpO1xufVxuXG5mdW5jdGlvbiBFdmVudFNvdXJjZVJlY2VpdmVyKHVybCkge1xuICBkZWJ1Zyh1cmwpO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBlcyA9IHRoaXMuZXMgPSBuZXcgRXZlbnRTb3VyY2VEcml2ZXIodXJsKTtcbiAgZXMub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgIGRlYnVnKCdtZXNzYWdlJywgZS5kYXRhKTtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBkZWNvZGVVUkkoZS5kYXRhKSk7XG4gIH07XG4gIGVzLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVidWcoJ2Vycm9yJywgZXMucmVhZHlTdGF0ZSwgZSk7XG4gICAgLy8gRVMgb24gcmVjb25uZWN0aW9uIGhhcyByZWFkeVN0YXRlID0gMCBvciAxLlxuICAgIC8vIG9uIG5ldHdvcmsgZXJyb3IgaXQncyBDTE9TRUQgPSAyXG4gICAgdmFyIHJlYXNvbiA9IChlcy5yZWFkeVN0YXRlICE9PSAyID8gJ25ldHdvcmsnIDogJ3Blcm1hbmVudCcpO1xuICAgIHNlbGYuX2NsZWFudXAoKTtcbiAgICBzZWxmLl9jbG9zZShyZWFzb24pO1xuICB9O1xufVxuXG5pbmhlcml0cyhFdmVudFNvdXJjZVJlY2VpdmVyLCBFdmVudEVtaXR0ZXIpO1xuXG5FdmVudFNvdXJjZVJlY2VpdmVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnYWJvcnQnKTtcbiAgdGhpcy5fY2xlYW51cCgpO1xuICB0aGlzLl9jbG9zZSgndXNlcicpO1xufTtcblxuRXZlbnRTb3VyY2VSZWNlaXZlci5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2NsZWFudXAnKTtcbiAgdmFyIGVzID0gdGhpcy5lcztcbiAgaWYgKGVzKSB7XG4gICAgZXMub25tZXNzYWdlID0gZXMub25lcnJvciA9IG51bGw7XG4gICAgZXMuY2xvc2UoKTtcbiAgICB0aGlzLmVzID0gbnVsbDtcbiAgfVxufTtcblxuRXZlbnRTb3VyY2VSZWNlaXZlci5wcm90b3R5cGUuX2Nsb3NlID0gZnVuY3Rpb24ocmVhc29uKSB7XG4gIGRlYnVnKCdjbG9zZScsIHJlYXNvbik7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgLy8gU2FmYXJpIGFuZCBjaHJvbWUgPCAxNSBjcmFzaCBpZiB3ZSBjbG9zZSB3aW5kb3cgYmVmb3JlXG4gIC8vIHdhaXRpbmcgZm9yIEVTIGNsZWFudXAuIFNlZTpcbiAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg5MTU1XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIG51bGwsIHJlYXNvbik7XG4gICAgc2VsZi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgfSwgMjAwKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRTb3VyY2VSZWNlaXZlcjtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiZXZlbnRzb3VyY2VcIjoxOCxcImluaGVyaXRzXCI6NTd9XSwzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIGlmcmFtZVV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvaWZyYW1lJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3VybCcpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgcmFuZG9tID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvcmFuZG9tJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnJlY2VpdmVyOmh0bWxmaWxlJyk7XG59XG5cbmZ1bmN0aW9uIEh0bWxmaWxlUmVjZWl2ZXIodXJsKSB7XG4gIGRlYnVnKHVybCk7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmcmFtZVV0aWxzLnBvbGx1dGVHbG9iYWxOYW1lc3BhY2UoKTtcblxuICB0aGlzLmlkID0gJ2EnICsgcmFuZG9tLnN0cmluZyg2KTtcbiAgdXJsID0gdXJsVXRpbHMuYWRkUXVlcnkodXJsLCAnYz0nICsgZGVjb2RlVVJJQ29tcG9uZW50KGlmcmFtZVV0aWxzLldQcmVmaXggKyAnLicgKyB0aGlzLmlkKSk7XG5cbiAgZGVidWcoJ3VzaW5nIGh0bWxmaWxlJywgSHRtbGZpbGVSZWNlaXZlci5odG1sZmlsZUVuYWJsZWQpO1xuICB2YXIgY29uc3RydWN0RnVuYyA9IEh0bWxmaWxlUmVjZWl2ZXIuaHRtbGZpbGVFbmFibGVkID9cbiAgICAgIGlmcmFtZVV0aWxzLmNyZWF0ZUh0bWxmaWxlIDogaWZyYW1lVXRpbHMuY3JlYXRlSWZyYW1lO1xuXG4gIGdsb2JhbFtpZnJhbWVVdGlscy5XUHJlZml4XVt0aGlzLmlkXSA9IHtcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zygnc3RhcnQnKTtcbiAgICAgIHNlbGYuaWZyYW1lT2JqLmxvYWRlZCgpO1xuICAgIH1cbiAgLCBtZXNzYWdlOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkZWJ1ZygnbWVzc2FnZScsIGRhdGEpO1xuICAgICAgc2VsZi5lbWl0KCdtZXNzYWdlJywgZGF0YSk7XG4gICAgfVxuICAsIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoJ3N0b3AnKTtcbiAgICAgIHNlbGYuX2NsZWFudXAoKTtcbiAgICAgIHNlbGYuX2Nsb3NlKCduZXR3b3JrJyk7XG4gICAgfVxuICB9O1xuICB0aGlzLmlmcmFtZU9iaiA9IGNvbnN0cnVjdEZ1bmModXJsLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygnY2FsbGJhY2snKTtcbiAgICBzZWxmLl9jbGVhbnVwKCk7XG4gICAgc2VsZi5fY2xvc2UoJ3Blcm1hbmVudCcpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoSHRtbGZpbGVSZWNlaXZlciwgRXZlbnRFbWl0dGVyKTtcblxuSHRtbGZpbGVSZWNlaXZlci5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2Fib3J0Jyk7XG4gIHRoaXMuX2NsZWFudXAoKTtcbiAgdGhpcy5fY2xvc2UoJ3VzZXInKTtcbn07XG5cbkh0bWxmaWxlUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfY2xlYW51cCcpO1xuICBpZiAodGhpcy5pZnJhbWVPYmopIHtcbiAgICB0aGlzLmlmcmFtZU9iai5jbGVhbnVwKCk7XG4gICAgdGhpcy5pZnJhbWVPYmogPSBudWxsO1xuICB9XG4gIGRlbGV0ZSBnbG9iYWxbaWZyYW1lVXRpbHMuV1ByZWZpeF1bdGhpcy5pZF07XG59O1xuXG5IdG1sZmlsZVJlY2VpdmVyLnByb3RvdHlwZS5fY2xvc2UgPSBmdW5jdGlvbihyZWFzb24pIHtcbiAgZGVidWcoJ19jbG9zZScsIHJlYXNvbik7XG4gIHRoaXMuZW1pdCgnY2xvc2UnLCBudWxsLCByZWFzb24pO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xufTtcblxuSHRtbGZpbGVSZWNlaXZlci5odG1sZmlsZUVuYWJsZWQgPSBmYWxzZTtcblxuLy8gb2JmdXNjYXRlIHRvIGF2b2lkIGZpcmV3YWxsc1xudmFyIGF4byA9IFsnQWN0aXZlJ10uY29uY2F0KCdPYmplY3QnKS5qb2luKCdYJyk7XG5pZiAoYXhvIGluIGdsb2JhbCkge1xuICB0cnkge1xuICAgIEh0bWxmaWxlUmVjZWl2ZXIuaHRtbGZpbGVFbmFibGVkID0gISFuZXcgZ2xvYmFsW2F4b10oJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gIH1cbn1cblxuSHRtbGZpbGVSZWNlaXZlci5lbmFibGVkID0gSHRtbGZpbGVSZWNlaXZlci5odG1sZmlsZUVuYWJsZWQgfHwgaWZyYW1lVXRpbHMuaWZyYW1lRW5hYmxlZDtcblxubW9kdWxlLmV4cG9ydHMgPSBIdG1sZmlsZVJlY2VpdmVyO1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuLi8uLi91dGlscy9pZnJhbWVcIjo0NyxcIi4uLy4uL3V0aWxzL3JhbmRvbVwiOjUwLFwiLi4vLi4vdXRpbHMvdXJsXCI6NTIsXCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvaWZyYW1lJylcbiAgLCByYW5kb20gPSByZXF1aXJlKCcuLi8uLi91dGlscy9yYW5kb20nKVxuICAsIGJyb3dzZXIgPSByZXF1aXJlKCcuLi8uLi91dGlscy9icm93c2VyJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3VybCcpXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpyZWNlaXZlcjpqc29ucCcpO1xufVxuXG5mdW5jdGlvbiBKc29ucFJlY2VpdmVyKHVybCkge1xuICBkZWJ1Zyh1cmwpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHV0aWxzLnBvbGx1dGVHbG9iYWxOYW1lc3BhY2UoKTtcblxuICB0aGlzLmlkID0gJ2EnICsgcmFuZG9tLnN0cmluZyg2KTtcbiAgdmFyIHVybFdpdGhJZCA9IHVybFV0aWxzLmFkZFF1ZXJ5KHVybCwgJ2M9JyArIGVuY29kZVVSSUNvbXBvbmVudCh1dGlscy5XUHJlZml4ICsgJy4nICsgdGhpcy5pZCkpO1xuXG4gIGdsb2JhbFt1dGlscy5XUHJlZml4XVt0aGlzLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG4gIHRoaXMuX2NyZWF0ZVNjcmlwdCh1cmxXaXRoSWQpO1xuXG4gIC8vIEZhbGxiYWNrIG1vc3RseSBmb3IgS29ucXVlcm9yIC0gc3R1cGlkIHRpbWVyLCAzNSBzZWNvbmRzIHNoYWxsIGJlIHBsZW50eS5cbiAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd0aW1lb3V0Jyk7XG4gICAgc2VsZi5fYWJvcnQobmV3IEVycm9yKCdKU09OUCBzY3JpcHQgbG9hZGVkIGFibm9ybWFsbHkgKHRpbWVvdXQpJykpO1xuICB9LCBKc29ucFJlY2VpdmVyLnRpbWVvdXQpO1xufVxuXG5pbmhlcml0cyhKc29ucFJlY2VpdmVyLCBFdmVudEVtaXR0ZXIpO1xuXG5Kc29ucFJlY2VpdmVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnYWJvcnQnKTtcbiAgaWYgKGdsb2JhbFt1dGlscy5XUHJlZml4XVt0aGlzLmlkXSkge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0pTT05QIHVzZXIgYWJvcnRlZCByZWFkJyk7XG4gICAgZXJyLmNvZGUgPSAxMDAwO1xuICAgIHRoaXMuX2Fib3J0KGVycik7XG4gIH1cbn07XG5cbkpzb25wUmVjZWl2ZXIudGltZW91dCA9IDM1MDAwO1xuSnNvbnBSZWNlaXZlci5zY3JpcHRFcnJvclRpbWVvdXQgPSAxMDAwO1xuXG5Kc29ucFJlY2VpdmVyLnByb3RvdHlwZS5fY2FsbGJhY2sgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGRlYnVnKCdfY2FsbGJhY2snLCBkYXRhKTtcbiAgdGhpcy5fY2xlYW51cCgpO1xuXG4gIGlmICh0aGlzLmFib3J0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBkZWJ1ZygnbWVzc2FnZScsIGRhdGEpO1xuICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIGRhdGEpO1xuICB9XG4gIHRoaXMuZW1pdCgnY2xvc2UnLCBudWxsLCAnbmV0d29yaycpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xufTtcblxuSnNvbnBSZWNlaXZlci5wcm90b3R5cGUuX2Fib3J0ID0gZnVuY3Rpb24oZXJyKSB7XG4gIGRlYnVnKCdfYWJvcnQnLCBlcnIpO1xuICB0aGlzLl9jbGVhbnVwKCk7XG4gIHRoaXMuYWJvcnRpbmcgPSB0cnVlO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJywgZXJyLmNvZGUsIGVyci5tZXNzYWdlKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbkpzb25wUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfY2xlYW51cCcpO1xuICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpO1xuICBpZiAodGhpcy5zY3JpcHQyKSB7XG4gICAgdGhpcy5zY3JpcHQyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zY3JpcHQyKTtcbiAgICB0aGlzLnNjcmlwdDIgPSBudWxsO1xuICB9XG4gIGlmICh0aGlzLnNjcmlwdCkge1xuICAgIHZhciBzY3JpcHQgPSB0aGlzLnNjcmlwdDtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5LCB5b3UgY2FuJ3QgcmVhbGx5IGFib3J0IHNjcmlwdCBsb2FkaW5nIG9mXG4gICAgLy8gdGhlIHNjcmlwdC5cbiAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBzY3JpcHQub25lcnJvciA9XG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25jbGljayA9IG51bGw7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICB9XG4gIGRlbGV0ZSBnbG9iYWxbdXRpbHMuV1ByZWZpeF1bdGhpcy5pZF07XG59O1xuXG5Kc29ucFJlY2VpdmVyLnByb3RvdHlwZS5fc2NyaXB0RXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ19zY3JpcHRFcnJvcicpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0aGlzLmVycm9yVGltZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmVycm9yVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGlmICghc2VsZi5sb2FkZWRPa2F5KSB7XG4gICAgICBzZWxmLl9hYm9ydChuZXcgRXJyb3IoJ0pTT05QIHNjcmlwdCBsb2FkZWQgYWJub3JtYWxseSAob25lcnJvciknKSk7XG4gICAgfVxuICB9LCBKc29ucFJlY2VpdmVyLnNjcmlwdEVycm9yVGltZW91dCk7XG59O1xuXG5Kc29ucFJlY2VpdmVyLnByb3RvdHlwZS5fY3JlYXRlU2NyaXB0ID0gZnVuY3Rpb24odXJsKSB7XG4gIGRlYnVnKCdfY3JlYXRlU2NyaXB0JywgdXJsKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc2NyaXB0ID0gdGhpcy5zY3JpcHQgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHZhciBzY3JpcHQyOyAgLy8gT3BlcmEgc3luY2hyb25vdXMgbG9hZCB0cmljay5cblxuICBzY3JpcHQuaWQgPSAnYScgKyByYW5kb20uc3RyaW5nKDgpO1xuICBzY3JpcHQuc3JjID0gdXJsO1xuICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICBzY3JpcHQuY2hhcnNldCA9ICdVVEYtOCc7XG4gIHNjcmlwdC5vbmVycm9yID0gdGhpcy5fc2NyaXB0RXJyb3IuYmluZCh0aGlzKTtcbiAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdvbmxvYWQnKTtcbiAgICBzZWxmLl9hYm9ydChuZXcgRXJyb3IoJ0pTT05QIHNjcmlwdCBsb2FkZWQgYWJub3JtYWxseSAob25sb2FkKScpKTtcbiAgfTtcblxuICAvLyBJRTkgZmlyZXMgJ2Vycm9yJyBldmVudCBhZnRlciBvbnJlYWR5c3RhdGVjaGFuZ2Ugb3IgYmVmb3JlLCBpbiByYW5kb20gb3JkZXIuXG4gIC8vIFVzZSBsb2FkZWRPa2F5IHRvIGRldGVybWluZSBpZiBhY3R1YWxseSBlcnJvcmVkXG4gIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnb25yZWFkeXN0YXRlY2hhbmdlJywgc2NyaXB0LnJlYWR5U3RhdGUpO1xuICAgIGlmICgvbG9hZGVkfGNsb3NlZC8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIHtcbiAgICAgIGlmIChzY3JpcHQgJiYgc2NyaXB0Lmh0bWxGb3IgJiYgc2NyaXB0Lm9uY2xpY2spIHtcbiAgICAgICAgc2VsZi5sb2FkZWRPa2F5ID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbiBJRSwgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgc2NyaXB0LlxuICAgICAgICAgIHNjcmlwdC5vbmNsaWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzY3JpcHQpIHtcbiAgICAgICAgc2VsZi5fYWJvcnQobmV3IEVycm9yKCdKU09OUCBzY3JpcHQgbG9hZGVkIGFibm9ybWFsbHkgKG9ucmVhZHlzdGF0ZWNoYW5nZSknKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvLyBJRTogZXZlbnQvaHRtbEZvci9vbmNsaWNrIHRyaWNrLlxuICAvLyBPbmUgY2FuJ3QgcmVseSBvbiBwcm9wZXIgb3JkZXIgZm9yIG9ucmVhZHlzdGF0ZWNoYW5nZS4gSW4gb3JkZXIgdG9cbiAgLy8gbWFrZSBzdXJlLCBzZXQgYSAnaHRtbEZvcicgYW5kICdldmVudCcgcHJvcGVydGllcywgc28gdGhhdFxuICAvLyBzY3JpcHQgY29kZSB3aWxsIGJlIGluc3RhbGxlZCBhcyAnb25jbGljaycgaGFuZGxlciBmb3IgdGhlXG4gIC8vIHNjcmlwdCBvYmplY3QuIExhdGVyLCBvbnJlYWR5c3RhdGVjaGFuZ2UsIG1hbnVhbGx5IGV4ZWN1dGUgdGhpc1xuICAvLyBjb2RlLiBGRiBhbmQgQ2hyb21lIGRvZXNuJ3Qgd29yayB3aXRoICdldmVudCcgYW5kICdodG1sRm9yJ1xuICAvLyBzZXQuIEZvciByZWZlcmVuY2Ugc2VlOlxuICAvLyAgIGh0dHA6Ly9qYXVib3VyZy5uZXQvMjAxMC8wNy9sb2FkaW5nLXNjcmlwdC1hcy1vbmNsaWNrLWhhbmRsZXItb2YuaHRtbFxuICAvLyBBbHNvLCByZWFkIG9uIHRoYXQgYWJvdXQgc2NyaXB0IG9yZGVyaW5nOlxuICAvLyAgIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9EeW5hbWljX1NjcmlwdF9FeGVjdXRpb25fT3JkZXJcbiAgaWYgKHR5cGVvZiBzY3JpcHQuYXN5bmMgPT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5kb2N1bWVudC5hdHRhY2hFdmVudCkge1xuICAgIC8vIEFjY29yZGluZyB0byBtb3ppbGxhIGRvY3MsIGluIHJlY2VudCBicm93c2VycyBzY3JpcHQuYXN5bmMgZGVmYXVsdHNcbiAgICAvLyB0byAndHJ1ZScsIHNvIHdlIG1heSB1c2UgaXQgdG8gZGV0ZWN0IGEgZ29vZCBicm93c2VyOlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0hUTUwvRWxlbWVudC9zY3JpcHRcbiAgICBpZiAoIWJyb3dzZXIuaXNPcGVyYSgpKSB7XG4gICAgICAvLyBOYWl2ZWx5IGFzc3VtZSB3ZSdyZSBpbiBJRVxuICAgICAgdHJ5IHtcbiAgICAgICAgc2NyaXB0Lmh0bWxGb3IgPSBzY3JpcHQuaWQ7XG4gICAgICAgIHNjcmlwdC5ldmVudCA9ICdvbmNsaWNrJztcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgfVxuICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3BlcmEsIHNlY29uZCBzeW5jIHNjcmlwdCBoYWNrXG4gICAgICBzY3JpcHQyID0gdGhpcy5zY3JpcHQyID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0Mi50ZXh0ID0gXCJ0cnl7dmFyIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnXCIgKyBzY3JpcHQuaWQgKyBcIicpOyBpZihhKWEub25lcnJvcigpO31jYXRjaCh4KXt9O1wiO1xuICAgICAgc2NyaXB0LmFzeW5jID0gc2NyaXB0Mi5hc3luYyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNjcmlwdC5hc3luYyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGhlYWQgPSBnbG9iYWwuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgaGVhZC5pbnNlcnRCZWZvcmUoc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQpO1xuICBpZiAoc2NyaXB0Mikge1xuICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHNjcmlwdDIsIGhlYWQuZmlyc3RDaGlsZCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSnNvbnBSZWNlaXZlcjtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vLi4vdXRpbHMvYnJvd3NlclwiOjQ0LFwiLi4vLi4vdXRpbHMvaWZyYW1lXCI6NDcsXCIuLi8uLi91dGlscy9yYW5kb21cIjo1MCxcIi4uLy4uL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6cmVjZWl2ZXI6eGhyJyk7XG59XG5cbmZ1bmN0aW9uIFhoclJlY2VpdmVyKHVybCwgQWpheE9iamVjdCkge1xuICBkZWJ1Zyh1cmwpO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuYnVmZmVyUG9zaXRpb24gPSAwO1xuXG4gIHRoaXMueG8gPSBuZXcgQWpheE9iamVjdCgnUE9TVCcsIHVybCwgbnVsbCk7XG4gIHRoaXMueG8ub24oJ2NodW5rJywgdGhpcy5fY2h1bmtIYW5kbGVyLmJpbmQodGhpcykpO1xuICB0aGlzLnhvLm9uY2UoJ2ZpbmlzaCcsIGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xuICAgIGRlYnVnKCdmaW5pc2gnLCBzdGF0dXMsIHRleHQpO1xuICAgIHNlbGYuX2NodW5rSGFuZGxlcihzdGF0dXMsIHRleHQpO1xuICAgIHNlbGYueG8gPSBudWxsO1xuICAgIHZhciByZWFzb24gPSBzdGF0dXMgPT09IDIwMCA/ICduZXR3b3JrJyA6ICdwZXJtYW5lbnQnO1xuICAgIGRlYnVnKCdjbG9zZScsIHJlYXNvbik7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIG51bGwsIHJlYXNvbik7XG4gICAgc2VsZi5fY2xlYW51cCgpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoWGhyUmVjZWl2ZXIsIEV2ZW50RW1pdHRlcik7XG5cblhoclJlY2VpdmVyLnByb3RvdHlwZS5fY2h1bmtIYW5kbGVyID0gZnVuY3Rpb24oc3RhdHVzLCB0ZXh0KSB7XG4gIGRlYnVnKCdfY2h1bmtIYW5kbGVyJywgc3RhdHVzKTtcbiAgaWYgKHN0YXR1cyAhPT0gMjAwIHx8ICF0ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yICh2YXIgaWR4ID0gLTE7IDsgdGhpcy5idWZmZXJQb3NpdGlvbiArPSBpZHggKyAxKSB7XG4gICAgdmFyIGJ1ZiA9IHRleHQuc2xpY2UodGhpcy5idWZmZXJQb3NpdGlvbik7XG4gICAgaWR4ID0gYnVmLmluZGV4T2YoJ1xcbicpO1xuICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIG1zZyA9IGJ1Zi5zbGljZSgwLCBpZHgpO1xuICAgIGlmIChtc2cpIHtcbiAgICAgIGRlYnVnKCdtZXNzYWdlJywgbXNnKTtcbiAgICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIG1zZyk7XG4gICAgfVxuICB9XG59O1xuXG5YaHJSZWNlaXZlci5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ19jbGVhbnVwJyk7XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG59O1xuXG5YaHJSZWNlaXZlci5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2Fib3J0Jyk7XG4gIGlmICh0aGlzLnhvKSB7XG4gICAgdGhpcy54by5jbG9zZSgpO1xuICAgIGRlYnVnKCdjbG9zZScpO1xuICAgIHRoaXMuZW1pdCgnY2xvc2UnLCBudWxsLCAndXNlcicpO1xuICAgIHRoaXMueG8gPSBudWxsO1xuICB9XG4gIHRoaXMuX2NsZWFudXAoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gWGhyUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwzMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHJhbmRvbSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3JhbmRvbScpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6c2VuZGVyOmpzb25wJyk7XG59XG5cbnZhciBmb3JtLCBhcmVhO1xuXG5mdW5jdGlvbiBjcmVhdGVJZnJhbWUoaWQpIHtcbiAgZGVidWcoJ2NyZWF0ZUlmcmFtZScsIGlkKTtcbiAgdHJ5IHtcbiAgICAvLyBpZTYgZHluYW1pYyBpZnJhbWVzIHdpdGggdGFyZ2V0PVwiXCIgc3VwcG9ydCAodGhhbmtzIENocmlzIExhbWJhY2hlcilcbiAgICByZXR1cm4gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpZnJhbWUgbmFtZT1cIicgKyBpZCArICdcIj4nKTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIHZhciBpZnJhbWUgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgaWZyYW1lLm5hbWUgPSBpZDtcbiAgICByZXR1cm4gaWZyYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm0oKSB7XG4gIGRlYnVnKCdjcmVhdGVGb3JtJyk7XG4gIGZvcm0gPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICBmb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGZvcm0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBmb3JtLm1ldGhvZCA9ICdQT1NUJztcbiAgZm9ybS5lbmN0eXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gIGZvcm0uYWNjZXB0Q2hhcnNldCA9ICdVVEYtOCc7XG5cbiAgYXJlYSA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICBhcmVhLm5hbWUgPSAnZCc7XG4gIGZvcm0uYXBwZW5kQ2hpbGQoYXJlYSk7XG5cbiAgZ2xvYmFsLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXJsLCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICBkZWJ1Zyh1cmwsIHBheWxvYWQpO1xuICBpZiAoIWZvcm0pIHtcbiAgICBjcmVhdGVGb3JtKCk7XG4gIH1cbiAgdmFyIGlkID0gJ2EnICsgcmFuZG9tLnN0cmluZyg4KTtcbiAgZm9ybS50YXJnZXQgPSBpZDtcbiAgZm9ybS5hY3Rpb24gPSB1cmxVdGlscy5hZGRRdWVyeSh1cmxVdGlscy5hZGRQYXRoKHVybCwgJy9qc29ucF9zZW5kJyksICdpPScgKyBpZCk7XG5cbiAgdmFyIGlmcmFtZSA9IGNyZWF0ZUlmcmFtZShpZCk7XG4gIGlmcmFtZS5pZCA9IGlkO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgZm9ybS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuXG4gIHRyeSB7XG4gICAgYXJlYS52YWx1ZSA9IHBheWxvYWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBzZXJpb3VzbHkgYnJva2VuIGJyb3dzZXJzIGdldCBoZXJlXG4gIH1cbiAgZm9ybS5zdWJtaXQoKTtcblxuICB2YXIgY29tcGxldGVkID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgZGVidWcoJ2NvbXBsZXRlZCcsIGlkLCBlcnIpO1xuICAgIGlmICghaWZyYW1lLm9uZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWZyYW1lLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGlmcmFtZS5vbmVycm9yID0gaWZyYW1lLm9ubG9hZCA9IG51bGw7XG4gICAgLy8gT3BlcmEgbWluaSBkb2Vzbid0IGxpa2UgaWYgd2UgR0MgaWZyYW1lXG4gICAgLy8gaW1tZWRpYXRlbHksIHRodXMgdGhpcyB0aW1lb3V0LlxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAnLCBpZCk7XG4gICAgICBpZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgICAgaWZyYW1lID0gbnVsbDtcbiAgICB9LCA1MDApO1xuICAgIGFyZWEudmFsdWUgPSAnJztcbiAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gZGV0ZWN0IGlmIHRoZSBpZnJhbWUgc3VjY2VlZGVkIG9yXG4gICAgLy8gZmFpbGVkIHRvIHN1Ym1pdCBvdXIgZm9ybS5cbiAgICBjYWxsYmFjayhlcnIpO1xuICB9O1xuICBpZnJhbWUub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdvbmVycm9yJywgaWQpO1xuICAgIGNvbXBsZXRlZCgpO1xuICB9O1xuICBpZnJhbWUub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ29ubG9hZCcsIGlkKTtcbiAgICBjb21wbGV0ZWQoKTtcbiAgfTtcbiAgaWZyYW1lLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWJ1Zygnb25yZWFkeXN0YXRlY2hhbmdlJywgaWQsIGlmcmFtZS5yZWFkeVN0YXRlLCBlKTtcbiAgICBpZiAoaWZyYW1lLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbXBsZXRlZCgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdhYm9ydGVkJywgaWQpO1xuICAgIGNvbXBsZXRlZChuZXcgRXJyb3IoJ0Fib3J0ZWQnKSk7XG4gIH07XG59O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuLi8uLi91dGlscy9yYW5kb21cIjo1MCxcIi4uLy4uL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NX1dLDM0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgZXZlbnRVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2V2ZW50JylcbiAgLCBicm93c2VyID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYnJvd3NlcicpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6c2VuZGVyOnhkcicpO1xufVxuXG4vLyBSZWZlcmVuY2VzOlxuLy8gICBodHRwOi8vYWpheGlhbi5jb20vYXJjaGl2ZXMvMTAwLWxpbmUtYWpheC13cmFwcGVyXG4vLyAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzI4ODA2MCh2PVZTLjg1KS5hc3B4XG5cbmZ1bmN0aW9uIFhEUk9iamVjdChtZXRob2QsIHVybCwgcGF5bG9hZCkge1xuICBkZWJ1ZyhtZXRob2QsIHVybCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9zdGFydChtZXRob2QsIHVybCwgcGF5bG9hZCk7XG4gIH0sIDApO1xufVxuXG5pbmhlcml0cyhYRFJPYmplY3QsIEV2ZW50RW1pdHRlcik7XG5cblhEUk9iamVjdC5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24obWV0aG9kLCB1cmwsIHBheWxvYWQpIHtcbiAgZGVidWcoJ19zdGFydCcpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB4ZHIgPSBuZXcgZ2xvYmFsLlhEb21haW5SZXF1ZXN0KCk7XG4gIC8vIElFIGNhY2hlcyBldmVuIFBPU1RzXG4gIHVybCA9IHVybFV0aWxzLmFkZFF1ZXJ5KHVybCwgJ3Q9JyArICgrbmV3IERhdGUoKSkpO1xuXG4gIHhkci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ29uZXJyb3InKTtcbiAgICBzZWxmLl9lcnJvcigpO1xuICB9O1xuICB4ZHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ29udGltZW91dCcpO1xuICAgIHNlbGYuX2Vycm9yKCk7XG4gIH07XG4gIHhkci5vbnByb2dyZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3Byb2dyZXNzJywgeGRyLnJlc3BvbnNlVGV4dCk7XG4gICAgc2VsZi5lbWl0KCdjaHVuaycsIDIwMCwgeGRyLnJlc3BvbnNlVGV4dCk7XG4gIH07XG4gIHhkci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygnbG9hZCcpO1xuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgMjAwLCB4ZHIucmVzcG9uc2VUZXh0KTtcbiAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgfTtcbiAgdGhpcy54ZHIgPSB4ZHI7XG4gIHRoaXMudW5sb2FkUmVmID0gZXZlbnRVdGlscy51bmxvYWRBZGQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fY2xlYW51cCh0cnVlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgLy8gRmFpbHMgd2l0aCBBY2Nlc3NEZW5pZWQgaWYgcG9ydCBudW1iZXIgaXMgYm9ndXNcbiAgICB0aGlzLnhkci5vcGVuKG1ldGhvZCwgdXJsKTtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICB0aGlzLnhkci50aW1lb3V0ID0gdGhpcy50aW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLnhkci5zZW5kKHBheWxvYWQpO1xuICB9IGNhdGNoICh4KSB7XG4gICAgdGhpcy5fZXJyb3IoKTtcbiAgfVxufTtcblxuWERST2JqZWN0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbWl0KCdmaW5pc2gnLCAwLCAnJyk7XG4gIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xufTtcblxuWERST2JqZWN0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKGFib3J0KSB7XG4gIGRlYnVnKCdjbGVhbnVwJywgYWJvcnQpO1xuICBpZiAoIXRoaXMueGRyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIGV2ZW50VXRpbHMudW5sb2FkRGVsKHRoaXMudW5sb2FkUmVmKTtcblxuICB0aGlzLnhkci5vbnRpbWVvdXQgPSB0aGlzLnhkci5vbmVycm9yID0gdGhpcy54ZHIub25wcm9ncmVzcyA9IHRoaXMueGRyLm9ubG9hZCA9IG51bGw7XG4gIGlmIChhYm9ydCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnhkci5hYm9ydCgpO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgIC8vIGludGVudGlvbmFsbHkgZW1wdHlcbiAgICB9XG4gIH1cbiAgdGhpcy51bmxvYWRSZWYgPSB0aGlzLnhkciA9IG51bGw7XG59O1xuXG5YRFJPYmplY3QucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLl9jbGVhbnVwKHRydWUpO1xufTtcblxuLy8gSUUgOC85IGlmIHRoZSByZXF1ZXN0IHRhcmdldCB1c2VzIHRoZSBzYW1lIHNjaGVtZSAtICM3OVxuWERST2JqZWN0LmVuYWJsZWQgPSAhIShnbG9iYWwuWERvbWFpblJlcXVlc3QgJiYgYnJvd3Nlci5oYXNEb21haW4oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gWERST2JqZWN0O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuLi8uLi91dGlscy9icm93c2VyXCI6NDQsXCIuLi8uLi91dGlscy9ldmVudFwiOjQ2LFwiLi4vLi4vdXRpbHMvdXJsXCI6NTIsXCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwzNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBYaHJEcml2ZXIgPSByZXF1aXJlKCcuLi9kcml2ZXIveGhyJylcbiAgO1xuXG5mdW5jdGlvbiBYSFJDb3JzT2JqZWN0KG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzKSB7XG4gIFhockRyaXZlci5jYWxsKHRoaXMsIG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzKTtcbn1cblxuaW5oZXJpdHMoWEhSQ29yc09iamVjdCwgWGhyRHJpdmVyKTtcblxuWEhSQ29yc09iamVjdC5lbmFibGVkID0gWGhyRHJpdmVyLmVuYWJsZWQgJiYgWGhyRHJpdmVyLnN1cHBvcnRzQ09SUztcblxubW9kdWxlLmV4cG9ydHMgPSBYSFJDb3JzT2JqZWN0O1xuXG59LHtcIi4uL2RyaXZlci94aHJcIjoxNyxcImluaGVyaXRzXCI6NTd9XSwzNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgO1xuXG5mdW5jdGlvbiBYSFJGYWtlKC8qIG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzICovKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdGhpcy50byA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdmaW5pc2gnLCAyMDAsICd7fScpO1xuICB9LCBYSFJGYWtlLnRpbWVvdXQpO1xufVxuXG5pbmhlcml0cyhYSFJGYWtlLCBFdmVudEVtaXR0ZXIpO1xuXG5YSFJGYWtlLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBjbGVhclRpbWVvdXQodGhpcy50byk7XG59O1xuXG5YSFJGYWtlLnRpbWVvdXQgPSAyMDAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUkZha2U7XG5cbn0se1wiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBYaHJEcml2ZXIgPSByZXF1aXJlKCcuLi9kcml2ZXIveGhyJylcbiAgO1xuXG5mdW5jdGlvbiBYSFJMb2NhbE9iamVjdChtZXRob2QsIHVybCwgcGF5bG9hZCAvKiwgb3B0cyAqLykge1xuICBYaHJEcml2ZXIuY2FsbCh0aGlzLCBtZXRob2QsIHVybCwgcGF5bG9hZCwge1xuICAgIG5vQ3JlZGVudGlhbHM6IHRydWVcbiAgfSk7XG59XG5cbmluaGVyaXRzKFhIUkxvY2FsT2JqZWN0LCBYaHJEcml2ZXIpO1xuXG5YSFJMb2NhbE9iamVjdC5lbmFibGVkID0gWGhyRHJpdmVyLmVuYWJsZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSTG9jYWxPYmplY3Q7XG5cbn0se1wiLi4vZHJpdmVyL3hoclwiOjE3LFwiaW5oZXJpdHNcIjo1N31dLDM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL2V2ZW50JylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL3VybCcpXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgV2Vic29ja2V0RHJpdmVyID0gcmVxdWlyZSgnLi9kcml2ZXIvd2Vic29ja2V0JylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OndlYnNvY2tldCcpO1xufVxuXG5mdW5jdGlvbiBXZWJTb2NrZXRUcmFuc3BvcnQodHJhbnNVcmwsIGlnbm9yZSwgb3B0aW9ucykge1xuICBpZiAoIVdlYlNvY2tldFRyYW5zcG9ydC5lbmFibGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBjcmVhdGVkIHdoZW4gZGlzYWJsZWQnKTtcbiAgfVxuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuICBkZWJ1ZygnY29uc3RydWN0b3InLCB0cmFuc1VybCk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdXJsID0gdXJsVXRpbHMuYWRkUGF0aCh0cmFuc1VybCwgJy93ZWJzb2NrZXQnKTtcbiAgaWYgKHVybC5zbGljZSgwLCA1KSA9PT0gJ2h0dHBzJykge1xuICAgIHVybCA9ICd3c3MnICsgdXJsLnNsaWNlKDUpO1xuICB9IGVsc2Uge1xuICAgIHVybCA9ICd3cycgKyB1cmwuc2xpY2UoNCk7XG4gIH1cbiAgdGhpcy51cmwgPSB1cmw7XG5cbiAgdGhpcy53cyA9IG5ldyBXZWJzb2NrZXREcml2ZXIodGhpcy51cmwsIFtdLCBvcHRpb25zKTtcbiAgdGhpcy53cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVidWcoJ21lc3NhZ2UgZXZlbnQnLCBlLmRhdGEpO1xuICAgIHNlbGYuZW1pdCgnbWVzc2FnZScsIGUuZGF0YSk7XG4gIH07XG4gIC8vIEZpcmVmb3ggaGFzIGFuIGludGVyZXN0aW5nIGJ1Zy4gSWYgYSB3ZWJzb2NrZXQgY29ubmVjdGlvbiBpc1xuICAvLyBjcmVhdGVkIGFmdGVyIG9udW5sb2FkLCBpdCBzdGF5cyBhbGl2ZSBldmVuIHdoZW4gdXNlclxuICAvLyBuYXZpZ2F0ZXMgYXdheSBmcm9tIHRoZSBwYWdlLiBJbiBzdWNoIHNpdHVhdGlvbiBsZXQncyBsaWUgLVxuICAvLyBsZXQncyBub3Qgb3BlbiB0aGUgd3MgY29ubmVjdGlvbiBhdCBhbGwuIFNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NvY2tqcy9zb2NranMtY2xpZW50L2lzc3Vlcy8yOFxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYwODVcbiAgdGhpcy51bmxvYWRSZWYgPSB1dGlscy51bmxvYWRBZGQoZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3VubG9hZCcpO1xuICAgIHNlbGYud3MuY2xvc2UoKTtcbiAgfSk7XG4gIHRoaXMud3Mub25jbG9zZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWJ1ZygnY2xvc2UgZXZlbnQnLCBlLmNvZGUsIGUucmVhc29uKTtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgZS5jb2RlLCBlLnJlYXNvbik7XG4gICAgc2VsZi5fY2xlYW51cCgpO1xuICB9O1xuICB0aGlzLndzLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVidWcoJ2Vycm9yIGV2ZW50JywgZSk7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIDEwMDYsICdXZWJTb2NrZXQgY29ubmVjdGlvbiBicm9rZW4nKTtcbiAgICBzZWxmLl9jbGVhbnVwKCk7XG4gIH07XG59XG5cbmluaGVyaXRzKFdlYlNvY2tldFRyYW5zcG9ydCwgRXZlbnRFbWl0dGVyKTtcblxuV2ViU29ja2V0VHJhbnNwb3J0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGF0YSkge1xuICB2YXIgbXNnID0gJ1snICsgZGF0YSArICddJztcbiAgZGVidWcoJ3NlbmQnLCBtc2cpO1xuICB0aGlzLndzLnNlbmQobXNnKTtcbn07XG5cbldlYlNvY2tldFRyYW5zcG9ydC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2Nsb3NlJyk7XG4gIHZhciB3cyA9IHRoaXMud3M7XG4gIHRoaXMuX2NsZWFudXAoKTtcbiAgaWYgKHdzKSB7XG4gICAgd3MuY2xvc2UoKTtcbiAgfVxufTtcblxuV2ViU29ja2V0VHJhbnNwb3J0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX2NsZWFudXAnKTtcbiAgdmFyIHdzID0gdGhpcy53cztcbiAgaWYgKHdzKSB7XG4gICAgd3Mub25tZXNzYWdlID0gd3Mub25jbG9zZSA9IHdzLm9uZXJyb3IgPSBudWxsO1xuICB9XG4gIHV0aWxzLnVubG9hZERlbCh0aGlzLnVubG9hZFJlZik7XG4gIHRoaXMudW5sb2FkUmVmID0gdGhpcy53cyA9IG51bGw7XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG59O1xuXG5XZWJTb2NrZXRUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnZW5hYmxlZCcpO1xuICByZXR1cm4gISFXZWJzb2NrZXREcml2ZXI7XG59O1xuV2ViU29ja2V0VHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnd2Vic29ja2V0JztcblxuLy8gSW4gdGhlb3J5LCB3cyBzaG91bGQgcmVxdWlyZSAxIHJvdW5kIHRyaXAuIEJ1dCBpbiBjaHJvbWUsIHRoaXMgaXNcbi8vIG5vdCB2ZXJ5IHN0YWJsZSBvdmVyIFNTTC4gTW9zdCBsaWtlbHkgYSB3cyBjb25uZWN0aW9uIHJlcXVpcmVzIGFcbi8vIHNlcGFyYXRlIFNTTCBjb25uZWN0aW9uLCBpbiB3aGljaCBjYXNlIDIgcm91bmQgdHJpcHMgYXJlIGFuXG4vLyBhYnNvbHV0ZSBtaW51bXVtLlxuV2ViU29ja2V0VHJhbnNwb3J0LnJvdW5kVHJpcHMgPSAyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYlNvY2tldFRyYW5zcG9ydDtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcIi4uL3V0aWxzL2V2ZW50XCI6NDYsXCIuLi91dGlscy91cmxcIjo1MixcIi4vZHJpdmVyL3dlYnNvY2tldFwiOjE5LFwiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgQWpheEJhc2VkVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi9saWIvYWpheC1iYXNlZCcpXG4gICwgWGRyU3RyZWFtaW5nVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi94ZHItc3RyZWFtaW5nJylcbiAgLCBYaHJSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIveGhyJylcbiAgLCBYRFJPYmplY3QgPSByZXF1aXJlKCcuL3NlbmRlci94ZHInKVxuICA7XG5cbmZ1bmN0aW9uIFhkclBvbGxpbmdUcmFuc3BvcnQodHJhbnNVcmwpIHtcbiAgaWYgKCFYRFJPYmplY3QuZW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IGNyZWF0ZWQgd2hlbiBkaXNhYmxlZCcpO1xuICB9XG4gIEFqYXhCYXNlZFRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL3hocicsIFhoclJlY2VpdmVyLCBYRFJPYmplY3QpO1xufVxuXG5pbmhlcml0cyhYZHJQb2xsaW5nVHJhbnNwb3J0LCBBamF4QmFzZWRUcmFuc3BvcnQpO1xuXG5YZHJQb2xsaW5nVHJhbnNwb3J0LmVuYWJsZWQgPSBYZHJTdHJlYW1pbmdUcmFuc3BvcnQuZW5hYmxlZDtcblhkclBvbGxpbmdUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSA9ICd4ZHItcG9sbGluZyc7XG5YZHJQb2xsaW5nVHJhbnNwb3J0LnJvdW5kVHJpcHMgPSAyOyAvLyBwcmVmbGlnaHQsIGFqYXhcblxubW9kdWxlLmV4cG9ydHMgPSBYZHJQb2xsaW5nVHJhbnNwb3J0O1xuXG59LHtcIi4vbGliL2FqYXgtYmFzZWRcIjoyNCxcIi4vcmVjZWl2ZXIveGhyXCI6MzIsXCIuL3NlbmRlci94ZHJcIjozNCxcIi4veGRyLXN0cmVhbWluZ1wiOjQwLFwiaW5oZXJpdHNcIjo1N31dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEFqYXhCYXNlZFRyYW5zcG9ydCA9IHJlcXVpcmUoJy4vbGliL2FqYXgtYmFzZWQnKVxuICAsIFhoclJlY2VpdmVyID0gcmVxdWlyZSgnLi9yZWNlaXZlci94aHInKVxuICAsIFhEUk9iamVjdCA9IHJlcXVpcmUoJy4vc2VuZGVyL3hkcicpXG4gIDtcblxuLy8gQWNjb3JkaW5nIHRvOlxuLy8gICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE2NDE1MDcvZGV0ZWN0LWJyb3dzZXItc3VwcG9ydC1mb3ItY3Jvc3MtZG9tYWluLXhtbGh0dHByZXF1ZXN0c1xuLy8gICBodHRwOi8vaGFja3MubW96aWxsYS5vcmcvMjAwOS8wNy9jcm9zcy1zaXRlLXhtbGh0dHByZXF1ZXN0LXdpdGgtY29ycy9cblxuZnVuY3Rpb24gWGRyU3RyZWFtaW5nVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghWERST2JqZWN0LmVuYWJsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBjcmVhdGVkIHdoZW4gZGlzYWJsZWQnKTtcbiAgfVxuICBBamF4QmFzZWRUcmFuc3BvcnQuY2FsbCh0aGlzLCB0cmFuc1VybCwgJy94aHJfc3RyZWFtaW5nJywgWGhyUmVjZWl2ZXIsIFhEUk9iamVjdCk7XG59XG5cbmluaGVyaXRzKFhkclN0cmVhbWluZ1RyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuWGRyU3RyZWFtaW5nVHJhbnNwb3J0LmVuYWJsZWQgPSBmdW5jdGlvbihpbmZvKSB7XG4gIGlmIChpbmZvLmNvb2tpZV9uZWVkZWQgfHwgaW5mby5udWxsT3JpZ2luKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBYRFJPYmplY3QuZW5hYmxlZCAmJiBpbmZvLnNhbWVTY2hlbWU7XG59O1xuXG5YZHJTdHJlYW1pbmdUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSA9ICd4ZHItc3RyZWFtaW5nJztcblhkclN0cmVhbWluZ1RyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjsgLy8gcHJlZmxpZ2h0LCBhamF4XG5cbm1vZHVsZS5leHBvcnRzID0gWGRyU3RyZWFtaW5nVHJhbnNwb3J0O1xuXG59LHtcIi4vbGliL2FqYXgtYmFzZWRcIjoyNCxcIi4vcmVjZWl2ZXIveGhyXCI6MzIsXCIuL3NlbmRlci94ZHJcIjozNCxcImluaGVyaXRzXCI6NTd9XSw0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBBamF4QmFzZWRUcmFuc3BvcnQgPSByZXF1aXJlKCcuL2xpYi9hamF4LWJhc2VkJylcbiAgLCBYaHJSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIveGhyJylcbiAgLCBYSFJDb3JzT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWNvcnMnKVxuICAsIFhIUkxvY2FsT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWxvY2FsJylcbiAgO1xuXG5mdW5jdGlvbiBYaHJQb2xsaW5nVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghWEhSTG9jYWxPYmplY3QuZW5hYmxlZCAmJiAhWEhSQ29yc09iamVjdC5lbmFibGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgQWpheEJhc2VkVHJhbnNwb3J0LmNhbGwodGhpcywgdHJhbnNVcmwsICcveGhyJywgWGhyUmVjZWl2ZXIsIFhIUkNvcnNPYmplY3QpO1xufVxuXG5pbmhlcml0cyhYaHJQb2xsaW5nVHJhbnNwb3J0LCBBamF4QmFzZWRUcmFuc3BvcnQpO1xuXG5YaHJQb2xsaW5nVHJhbnNwb3J0LmVuYWJsZWQgPSBmdW5jdGlvbihpbmZvKSB7XG4gIGlmIChpbmZvLm51bGxPcmlnaW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoWEhSTG9jYWxPYmplY3QuZW5hYmxlZCAmJiBpbmZvLnNhbWVPcmlnaW4pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gWEhSQ29yc09iamVjdC5lbmFibGVkO1xufTtcblxuWGhyUG9sbGluZ1RyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ3hoci1wb2xsaW5nJztcblhoclBvbGxpbmdUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7IC8vIHByZWZsaWdodCwgYWpheFxuXG5tb2R1bGUuZXhwb3J0cyA9IFhoclBvbGxpbmdUcmFuc3BvcnQ7XG5cbn0se1wiLi9saWIvYWpheC1iYXNlZFwiOjI0LFwiLi9yZWNlaXZlci94aHJcIjozMixcIi4vc2VuZGVyL3hoci1jb3JzXCI6MzUsXCIuL3NlbmRlci94aHItbG9jYWxcIjozNyxcImluaGVyaXRzXCI6NTd9XSw0MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBBamF4QmFzZWRUcmFuc3BvcnQgPSByZXF1aXJlKCcuL2xpYi9hamF4LWJhc2VkJylcbiAgLCBYaHJSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIveGhyJylcbiAgLCBYSFJDb3JzT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWNvcnMnKVxuICAsIFhIUkxvY2FsT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWxvY2FsJylcbiAgLCBicm93c2VyID0gcmVxdWlyZSgnLi4vdXRpbHMvYnJvd3NlcicpXG4gIDtcblxuZnVuY3Rpb24gWGhyU3RyZWFtaW5nVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghWEhSTG9jYWxPYmplY3QuZW5hYmxlZCAmJiAhWEhSQ29yc09iamVjdC5lbmFibGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgQWpheEJhc2VkVHJhbnNwb3J0LmNhbGwodGhpcywgdHJhbnNVcmwsICcveGhyX3N0cmVhbWluZycsIFhoclJlY2VpdmVyLCBYSFJDb3JzT2JqZWN0KTtcbn1cblxuaW5oZXJpdHMoWGhyU3RyZWFtaW5nVHJhbnNwb3J0LCBBamF4QmFzZWRUcmFuc3BvcnQpO1xuXG5YaHJTdHJlYW1pbmdUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKGluZm8pIHtcbiAgaWYgKGluZm8ubnVsbE9yaWdpbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBPcGVyYSBkb2Vzbid0IHN1cHBvcnQgeGhyLXN0cmVhbWluZyAjNjBcbiAgLy8gQnV0IGl0IG1pZ2h0IGJlIGFibGUgdG8gIzkyXG4gIGlmIChicm93c2VyLmlzT3BlcmEoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBYSFJDb3JzT2JqZWN0LmVuYWJsZWQ7XG59O1xuXG5YaHJTdHJlYW1pbmdUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSA9ICd4aHItc3RyZWFtaW5nJztcblhoclN0cmVhbWluZ1RyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjsgLy8gcHJlZmxpZ2h0LCBhamF4XG5cbi8vIFNhZmFyaSBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBzdHJlYW1pbmcgYWpheCByZXF1ZXN0IGlzIHN0YXJ0ZWRcbi8vIGJlZm9yZSBvbmxvYWQuIFRoaXMgY2F1c2VzIHRoZSBsb2FkIGluZGljYXRvciB0byBzcGluIGluZGVmaW5ldGVseS5cbi8vIE9ubHkgcmVxdWlyZSBib2R5IHdoZW4gdXNlZCBpbiBhIGJyb3dzZXJcblhoclN0cmVhbWluZ1RyYW5zcG9ydC5uZWVkQm9keSA9ICEhZ2xvYmFsLmRvY3VtZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhoclN0cmVhbWluZ1RyYW5zcG9ydDtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vdXRpbHMvYnJvd3NlclwiOjQ0LFwiLi9saWIvYWpheC1iYXNlZFwiOjI0LFwiLi9yZWNlaXZlci94aHJcIjozMixcIi4vc2VuZGVyL3hoci1jb3JzXCI6MzUsXCIuL3NlbmRlci94aHItbG9jYWxcIjozNyxcImluaGVyaXRzXCI6NTd9XSw0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbmlmIChnbG9iYWwuY3J5cHRvICYmIGdsb2JhbC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIG1vZHVsZS5leHBvcnRzLnJhbmRvbUJ5dGVzID0gZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICBnbG9iYWwuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9O1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihsZW5ndGgpIHtcbiAgICB2YXIgYnl0ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBieXRlc1tpXSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDQ0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzT3BlcmE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBnbG9iYWwubmF2aWdhdG9yICYmXG4gICAgICAvb3BlcmEvaS50ZXN0KGdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4sIGlzS29ucXVlcm9yOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZ2xvYmFsLm5hdmlnYXRvciAmJlxuICAgICAgL2tvbnF1ZXJvci9pLnRlc3QoZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgLy8gIzE4NyB3cmFwIGRvY3VtZW50LmRvbWFpbiBpbiB0cnkvY2F0Y2ggYmVjYXVzZSBvZiBXUDggZnJvbSBmaWxlOi8vL1xuLCBoYXNEb21haW46IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBub24tYnJvd3NlciBjbGllbnQgYWx3YXlzIGhhcyBhIGRvbWFpblxuICAgIGlmICghZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhZ2xvYmFsLmRvY3VtZW50LmRvbWFpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sNDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpO1xuXG4vLyBTb21lIGV4dHJhIGNoYXJhY3RlcnMgdGhhdCBDaHJvbWUgZ2V0cyB3cm9uZywgYW5kIHN1YnN0aXR1dGVzIHdpdGhcbi8vIHNvbWV0aGluZyBlbHNlIG9uIHRoZSB3aXJlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbnZhciBleHRyYUVzY2FwYWJsZSA9IC9bXFx4MDAtXFx4MWZcXHVkODAwLVxcdWRmZmZcXHVmZmZlXFx1ZmZmZlxcdTAzMDAtXFx1MDMzM1xcdTAzM2QtXFx1MDM0NlxcdTAzNGEtXFx1MDM0Y1xcdTAzNTAtXFx1MDM1MlxcdTAzNTctXFx1MDM1OFxcdTAzNWMtXFx1MDM2MlxcdTAzNzRcXHUwMzdlXFx1MDM4N1xcdTA1OTEtXFx1MDVhZlxcdTA1YzRcXHUwNjEwLVxcdTA2MTdcXHUwNjUzLVxcdTA2NTRcXHUwNjU3LVxcdTA2NWJcXHUwNjVkLVxcdTA2NWVcXHUwNmRmLVxcdTA2ZTJcXHUwNmViLVxcdTA2ZWNcXHUwNzMwXFx1MDczMi1cXHUwNzMzXFx1MDczNS1cXHUwNzM2XFx1MDczYVxcdTA3M2RcXHUwNzNmLVxcdTA3NDFcXHUwNzQzXFx1MDc0NVxcdTA3NDdcXHUwN2ViLVxcdTA3ZjFcXHUwOTUxXFx1MDk1OC1cXHUwOTVmXFx1MDlkYy1cXHUwOWRkXFx1MDlkZlxcdTBhMzNcXHUwYTM2XFx1MGE1OS1cXHUwYTViXFx1MGE1ZVxcdTBiNWMtXFx1MGI1ZFxcdTBlMzgtXFx1MGUzOVxcdTBmNDNcXHUwZjRkXFx1MGY1MlxcdTBmNTdcXHUwZjVjXFx1MGY2OVxcdTBmNzItXFx1MGY3NlxcdTBmNzhcXHUwZjgwLVxcdTBmODNcXHUwZjkzXFx1MGY5ZFxcdTBmYTJcXHUwZmE3XFx1MGZhY1xcdTBmYjlcXHUxOTM5LVxcdTE5M2FcXHUxYTE3XFx1MWI2YlxcdTFjZGEtXFx1MWNkYlxcdTFkYzAtXFx1MWRjZlxcdTFkZmNcXHUxZGZlXFx1MWY3MVxcdTFmNzNcXHUxZjc1XFx1MWY3N1xcdTFmNzlcXHUxZjdiXFx1MWY3ZFxcdTFmYmJcXHUxZmJlXFx1MWZjOVxcdTFmY2JcXHUxZmQzXFx1MWZkYlxcdTFmZTNcXHUxZmViXFx1MWZlZS1cXHUxZmVmXFx1MWZmOVxcdTFmZmJcXHUxZmZkXFx1MjAwMC1cXHUyMDAxXFx1MjBkMC1cXHUyMGQxXFx1MjBkNC1cXHUyMGQ3XFx1MjBlNy1cXHUyMGU5XFx1MjEyNlxcdTIxMmEtXFx1MjEyYlxcdTIzMjktXFx1MjMyYVxcdTJhZGNcXHUzMDJiLVxcdTMwMmNcXHVhYWIyLVxcdWFhYjNcXHVmOTAwLVxcdWZhMGRcXHVmYTEwXFx1ZmExMlxcdWZhMTUtXFx1ZmExZVxcdWZhMjBcXHVmYTIyXFx1ZmEyNS1cXHVmYTI2XFx1ZmEyYS1cXHVmYTJkXFx1ZmEzMC1cXHVmYTZkXFx1ZmE3MC1cXHVmYWQ5XFx1ZmIxZFxcdWZiMWZcXHVmYjJhLVxcdWZiMzZcXHVmYjM4LVxcdWZiM2NcXHVmYjNlXFx1ZmI0MC1cXHVmYjQxXFx1ZmI0My1cXHVmYjQ0XFx1ZmI0Ni1cXHVmYjRlXFx1ZmZmMC1cXHVmZmZmXS9nXG4gICwgZXh0cmFMb29rdXA7XG5cbi8vIFRoaXMgbWF5IGJlIHF1aXRlIHNsb3csIHNvIGxldCdzIGRlbGF5IHVudGlsIHVzZXIgYWN0dWFsbHkgdXNlcyBiYWRcbi8vIGNoYXJhY3RlcnMuXG52YXIgdW5yb2xsTG9va3VwID0gZnVuY3Rpb24oZXNjYXBhYmxlKSB7XG4gIHZhciBpO1xuICB2YXIgdW5yb2xsZWQgPSB7fTtcbiAgdmFyIGMgPSBbXTtcbiAgZm9yIChpID0gMDsgaSA8IDY1NTM2OyBpKyspIHtcbiAgICBjLnB1c2goIFN0cmluZy5mcm9tQ2hhckNvZGUoaSkgKTtcbiAgfVxuICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgYy5qb2luKCcnKS5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24oYSkge1xuICAgIHVucm9sbGVkWyBhIF0gPSAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgcmV0dXJuIHVucm9sbGVkO1xufTtcblxuLy8gUXVvdGUgc3RyaW5nLCBhbHNvIHRha2luZyBjYXJlIG9mIHVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IGJyb3dzZXJzXG4vLyBvZnRlbiBicmVhay4gRXNwZWNpYWxseSwgdGFrZSBjYXJlIG9mIHVuaWNvZGUgc3Vycm9nYXRlczpcbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFwcGluZ19vZl9Vbmljb2RlX2NoYXJhY3RlcnMjU3Vycm9nYXRlc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHF1b3RlOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgcXVvdGVkID0gSlNPTjMuc3RyaW5naWZ5KHN0cmluZyk7XG5cbiAgICAvLyBJbiBtb3N0IGNhc2VzIHRoaXMgc2hvdWxkIGJlIHZlcnkgZmFzdCBhbmQgZ29vZCBlbm91Z2guXG4gICAgZXh0cmFFc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICBpZiAoIWV4dHJhRXNjYXBhYmxlLnRlc3QocXVvdGVkKSkge1xuICAgICAgcmV0dXJuIHF1b3RlZDtcbiAgICB9XG5cbiAgICBpZiAoIWV4dHJhTG9va3VwKSB7XG4gICAgICBleHRyYUxvb2t1cCA9IHVucm9sbExvb2t1cChleHRyYUVzY2FwYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1b3RlZC5yZXBsYWNlKGV4dHJhRXNjYXBhYmxlLCBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gZXh0cmFMb29rdXBbYV07XG4gICAgfSk7XG4gIH1cbn07XG5cbn0se1wianNvbjNcIjo1OH1dLDQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHJhbmRvbSA9IHJlcXVpcmUoJy4vcmFuZG9tJyk7XG5cbnZhciBvblVubG9hZCA9IHt9XG4gICwgYWZ0ZXJVbmxvYWQgPSBmYWxzZVxuICAgIC8vIGRldGVjdCBnb29nbGUgY2hyb21lIHBhY2thZ2VkIGFwcHMgYmVjYXVzZSB0aGV5IGRvbid0IGFsbG93IHRoZSAndW5sb2FkJyBldmVudFxuICAsIGlzQ2hyb21lUGFja2FnZWRBcHAgPSBnbG9iYWwuY2hyb21lICYmIGdsb2JhbC5jaHJvbWUuYXBwICYmIGdsb2JhbC5jaHJvbWUuYXBwLnJ1bnRpbWVcbiAgO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXR0YWNoRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5kb2N1bWVudCAmJiBnbG9iYWwuYXR0YWNoRXZlbnQpIHtcbiAgICAgIC8vIElFIHF1aXJrcy5cbiAgICAgIC8vIEFjY29yZGluZyB0bzogaHR0cDovL3N0ZXZlc291ZGVycy5jb20vbWlzYy90ZXN0LXBvc3RtZXNzYWdlLnBocFxuICAgICAgLy8gdGhlIG1lc3NhZ2UgZ2V0cyBkZWxpdmVyZWQgb25seSB0byAnZG9jdW1lbnQnLCBub3QgJ3dpbmRvdycuXG4gICAgICBnbG9iYWwuZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICAvLyBJIGdldCAnd2luZG93JyBmb3IgaWU4LlxuICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4sIGRldGFjaEV2ZW50OiBmdW5jdGlvbihldmVudCwgbGlzdGVuZXIpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZ2xvYmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChnbG9iYWwuZG9jdW1lbnQgJiYgZ2xvYmFsLmRldGFjaEV2ZW50KSB7XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICBnbG9iYWwuZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiwgdW5sb2FkQWRkOiBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmIChpc0Nocm9tZVBhY2thZ2VkQXBwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcmVmID0gcmFuZG9tLnN0cmluZyg4KTtcbiAgICBvblVubG9hZFtyZWZdID0gbGlzdGVuZXI7XG4gICAgaWYgKGFmdGVyVW5sb2FkKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMudHJpZ2dlclVubG9hZENhbGxiYWNrcywgMCk7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG4gIH1cblxuLCB1bmxvYWREZWw6IGZ1bmN0aW9uKHJlZikge1xuICAgIGlmIChyZWYgaW4gb25VbmxvYWQpIHtcbiAgICAgIGRlbGV0ZSBvblVubG9hZFtyZWZdO1xuICAgIH1cbiAgfVxuXG4sIHRyaWdnZXJVbmxvYWRDYWxsYmFja3M6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHJlZiBpbiBvblVubG9hZCkge1xuICAgICAgb25VbmxvYWRbcmVmXSgpO1xuICAgICAgZGVsZXRlIG9uVW5sb2FkW3JlZl07XG4gICAgfVxuICB9XG59O1xuXG52YXIgdW5sb2FkVHJpZ2dlcmVkID0gZnVuY3Rpb24oKSB7XG4gIGlmIChhZnRlclVubG9hZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhZnRlclVubG9hZCA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzLnRyaWdnZXJVbmxvYWRDYWxsYmFja3MoKTtcbn07XG5cbi8vICd1bmxvYWQnIGFsb25lIGlzIG5vdCByZWxpYWJsZSBpbiBvcGVyYSB3aXRoaW4gYW4gaWZyYW1lLCBidXQgd2Vcbi8vIGNhbid0IHVzZSBgYmVmb3JldW5sb2FkYCBhcyBJRSBmaXJlcyBpdCBvbiBqYXZhc2NyaXB0OiBsaW5rcy5cbmlmICghaXNDaHJvbWVQYWNrYWdlZEFwcCkge1xuICBtb2R1bGUuZXhwb3J0cy5hdHRhY2hFdmVudCgndW5sb2FkJywgdW5sb2FkVHJpZ2dlcmVkKTtcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi9yYW5kb21cIjo1MH1dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXZlbnRVdGlscyA9IHJlcXVpcmUoJy4vZXZlbnQnKVxuICAsIEpTT04zID0gcmVxdWlyZSgnanNvbjMnKVxuICAsIGJyb3dzZXIgPSByZXF1aXJlKCcuL2Jyb3dzZXInKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6dXRpbHM6aWZyYW1lJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXUHJlZml4OiAnX2pwJ1xuLCBjdXJyZW50V2luZG93SWQ6IG51bGxcblxuLCBwb2xsdXRlR2xvYmFsTmFtZXNwYWNlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIShtb2R1bGUuZXhwb3J0cy5XUHJlZml4IGluIGdsb2JhbCkpIHtcbiAgICAgIGdsb2JhbFttb2R1bGUuZXhwb3J0cy5XUHJlZml4XSA9IHt9O1xuICAgIH1cbiAgfVxuXG4sIHBvc3RNZXNzYWdlOiBmdW5jdGlvbih0eXBlLCBkYXRhKSB7XG4gICAgaWYgKGdsb2JhbC5wYXJlbnQgIT09IGdsb2JhbCkge1xuICAgICAgZ2xvYmFsLnBhcmVudC5wb3N0TWVzc2FnZShKU09OMy5zdHJpbmdpZnkoe1xuICAgICAgICB3aW5kb3dJZDogbW9kdWxlLmV4cG9ydHMuY3VycmVudFdpbmRvd0lkXG4gICAgICAsIHR5cGU6IHR5cGVcbiAgICAgICwgZGF0YTogZGF0YSB8fCAnJ1xuICAgICAgfSksICcqJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdDYW5ub3QgcG9zdE1lc3NhZ2UsIG5vIHBhcmVudCB3aW5kb3cuJywgdHlwZSwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiwgY3JlYXRlSWZyYW1lOiBmdW5jdGlvbihpZnJhbWVVcmwsIGVycm9yQ2FsbGJhY2spIHtcbiAgICB2YXIgaWZyYW1lID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIHZhciB0cmVmLCB1bmxvYWRSZWY7XG4gICAgdmFyIHVuYXR0YWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1ZygndW5hdHRhY2gnKTtcbiAgICAgIGNsZWFyVGltZW91dCh0cmVmKTtcbiAgICAgIC8vIEV4cGxvcmVyIGhhZCBwcm9ibGVtcyB3aXRoIHRoYXQuXG4gICAgICB0cnkge1xuICAgICAgICBpZnJhbWUub25sb2FkID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgfVxuICAgICAgaWZyYW1lLm9uZXJyb3IgPSBudWxsO1xuICAgIH07XG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgIHVuYXR0YWNoKCk7XG4gICAgICAgIC8vIFRoaXMgdGltZW91dCBtYWtlcyBjaHJvbWUgZmlyZSBvbmJlZm9yZXVubG9hZCBldmVudFxuICAgICAgICAvLyB3aXRoaW4gaWZyYW1lLiBXaXRob3V0IHRoZSB0aW1lb3V0IGl0IGdvZXMgc3RyYWlnaHQgdG9cbiAgICAgICAgLy8gb251bmxvYWQuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgICAgaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWZyYW1lID0gbnVsbDtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIGV2ZW50VXRpbHMudW5sb2FkRGVsKHVubG9hZFJlZik7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgZGVidWcoJ29uZXJyb3InLCBlcnIpO1xuICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGVycm9yQ2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwb3N0ID0gZnVuY3Rpb24obXNnLCBvcmlnaW4pIHtcbiAgICAgIGRlYnVnKCdwb3N0JywgbXNnLCBvcmlnaW4pO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBXaGVuIHRoZSBpZnJhbWUgaXMgbm90IGxvYWRlZCwgSUUgcmFpc2VzIGFuIGV4Y2VwdGlvblxuICAgICAgICAgIC8vIG9uICdjb250ZW50V2luZG93Jy5cbiAgICAgICAgICBpZiAoaWZyYW1lICYmIGlmcmFtZS5jb250ZW50V2luZG93KSB7XG4gICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShtc2csIG9yaWdpbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9O1xuXG4gICAgaWZyYW1lLnNyYyA9IGlmcmFtZVVybDtcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBpZnJhbWUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGlmcmFtZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBvbmVycm9yKCdvbmVycm9yJyk7XG4gICAgfTtcbiAgICBpZnJhbWUub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zygnb25sb2FkJyk7XG4gICAgICAvLyBgb25sb2FkYCBpcyB0cmlnZ2VyZWQgYmVmb3JlIHNjcmlwdHMgb24gdGhlIGlmcmFtZSBhcmVcbiAgICAgIC8vIGV4ZWN1dGVkLiBHaXZlIGl0IGZldyBzZWNvbmRzIHRvIGFjdHVhbGx5IGxvYWQgc3R1ZmYuXG4gICAgICBjbGVhclRpbWVvdXQodHJlZik7XG4gICAgICB0cmVmID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgb25lcnJvcignb25sb2FkIHRpbWVvdXQnKTtcbiAgICAgIH0sIDIwMDApO1xuICAgIH07XG4gICAgZ2xvYmFsLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICB0cmVmID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIG9uZXJyb3IoJ3RpbWVvdXQnKTtcbiAgICB9LCAxNTAwMCk7XG4gICAgdW5sb2FkUmVmID0gZXZlbnRVdGlscy51bmxvYWRBZGQoY2xlYW51cCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc3Q6IHBvc3RcbiAgICAsIGNsZWFudXA6IGNsZWFudXBcbiAgICAsIGxvYWRlZDogdW5hdHRhY2hcbiAgICB9O1xuICB9XG5cbi8qIGVzbGludCBuby11bmRlZjogXCJvZmZcIiwgbmV3LWNhcDogXCJvZmZcIiAqL1xuLCBjcmVhdGVIdG1sZmlsZTogZnVuY3Rpb24oaWZyYW1lVXJsLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgdmFyIGF4byA9IFsnQWN0aXZlJ10uY29uY2F0KCdPYmplY3QnKS5qb2luKCdYJyk7XG4gICAgdmFyIGRvYyA9IG5ldyBnbG9iYWxbYXhvXSgnaHRtbGZpbGUnKTtcbiAgICB2YXIgdHJlZiwgdW5sb2FkUmVmO1xuICAgIHZhciBpZnJhbWU7XG4gICAgdmFyIHVuYXR0YWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodHJlZik7XG4gICAgICBpZnJhbWUub25lcnJvciA9IG51bGw7XG4gICAgfTtcbiAgICB2YXIgY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICB1bmF0dGFjaCgpO1xuICAgICAgICBldmVudFV0aWxzLnVubG9hZERlbCh1bmxvYWRSZWYpO1xuICAgICAgICBpZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgICAgICBpZnJhbWUgPSBkb2MgPSBudWxsO1xuICAgICAgICBDb2xsZWN0R2FyYmFnZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgICBkZWJ1Zygnb25lcnJvcicsIHIpO1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGVycm9yQ2FsbGJhY2socik7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgcG9zdCA9IGZ1bmN0aW9uKG1zZywgb3JpZ2luKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBXaGVuIHRoZSBpZnJhbWUgaXMgbm90IGxvYWRlZCwgSUUgcmFpc2VzIGFuIGV4Y2VwdGlvblxuICAgICAgICAvLyBvbiAnY29udGVudFdpbmRvdycuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGlmcmFtZSAmJiBpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShtc2csIG9yaWdpbik7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2Mub3BlbigpO1xuICAgIGRvYy53cml0ZSgnPGh0bWw+PHMnICsgJ2NyaXB0PicgK1xuICAgICAgICAgICAgICAnZG9jdW1lbnQuZG9tYWluPVwiJyArIGdsb2JhbC5kb2N1bWVudC5kb21haW4gKyAnXCI7JyArXG4gICAgICAgICAgICAgICc8L3MnICsgJ2NyaXB0PjwvaHRtbD4nKTtcbiAgICBkb2MuY2xvc2UoKTtcbiAgICBkb2MucGFyZW50V2luZG93W21vZHVsZS5leHBvcnRzLldQcmVmaXhdID0gZ2xvYmFsW21vZHVsZS5leHBvcnRzLldQcmVmaXhdO1xuICAgIHZhciBjID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGMpO1xuICAgIGlmcmFtZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBjLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgaWZyYW1lLnNyYyA9IGlmcmFtZVVybDtcbiAgICBpZnJhbWUub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgb25lcnJvcignb25lcnJvcicpO1xuICAgIH07XG4gICAgdHJlZiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBvbmVycm9yKCd0aW1lb3V0Jyk7XG4gICAgfSwgMTUwMDApO1xuICAgIHVubG9hZFJlZiA9IGV2ZW50VXRpbHMudW5sb2FkQWRkKGNsZWFudXApO1xuICAgIHJldHVybiB7XG4gICAgICBwb3N0OiBwb3N0XG4gICAgLCBjbGVhbnVwOiBjbGVhbnVwXG4gICAgLCBsb2FkZWQ6IHVuYXR0YWNoXG4gICAgfTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuaWZyYW1lRW5hYmxlZCA9IGZhbHNlO1xuaWYgKGdsb2JhbC5kb2N1bWVudCkge1xuICAvLyBwb3N0TWVzc2FnZSBtaXNiZWhhdmVzIGluIGtvbnF1ZXJvciA0LjYuNSAtIHRoZSBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIHdpdGhcbiAgLy8gaHVnZSBkZWxheSwgb3Igbm90IGF0IGFsbC5cbiAgbW9kdWxlLmV4cG9ydHMuaWZyYW1lRW5hYmxlZCA9ICh0eXBlb2YgZ2xvYmFsLnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdHlwZW9mIGdsb2JhbC5wb3N0TWVzc2FnZSA9PT0gJ29iamVjdCcpICYmICghYnJvd3Nlci5pc0tvbnF1ZXJvcigpKTtcbn1cblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi9icm93c2VyXCI6NDQsXCIuL2V2ZW50XCI6NDYsXCJkZWJ1Z1wiOjU1LFwianNvbjNcIjo1OH1dLDQ4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGxvZ09iamVjdCA9IHt9O1xuWydsb2cnLCAnZGVidWcnLCAnd2FybiddLmZvckVhY2goZnVuY3Rpb24gKGxldmVsKSB7XG4gIHZhciBsZXZlbEV4aXN0cztcblxuICB0cnkge1xuICAgIGxldmVsRXhpc3RzID0gZ2xvYmFsLmNvbnNvbGUgJiYgZ2xvYmFsLmNvbnNvbGVbbGV2ZWxdICYmIGdsb2JhbC5jb25zb2xlW2xldmVsXS5hcHBseTtcbiAgfSBjYXRjaChlKSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgbG9nT2JqZWN0W2xldmVsXSA9IGxldmVsRXhpc3RzID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWwuY29uc29sZVtsZXZlbF0uYXBwbHkoZ2xvYmFsLmNvbnNvbGUsIGFyZ3VtZW50cyk7XG4gIH0gOiAobGV2ZWwgPT09ICdsb2cnID8gZnVuY3Rpb24gKCkge30gOiBsb2dPYmplY3QubG9nKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZ09iamVjdDtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzT2JqZWN0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH1cblxuLCBleHRlbmQ6IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghdGhpcy5pc09iamVjdChvYmopKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICB2YXIgc291cmNlLCBwcm9wO1xuICAgIGZvciAodmFyIGkgPSAxLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIHByb3ApKSB7XG4gICAgICAgICAgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbn07XG5cbn0se31dLDUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIGNyeXB0bzp0cnVlICovXG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbi8vIFRoaXMgc3RyaW5nIGhhcyBsZW5ndGggMzIsIGEgcG93ZXIgb2YgMiwgc28gdGhlIG1vZHVsdXMgZG9lc24ndCBpbnRyb2R1Y2UgYVxuLy8gYmlhcy5cbnZhciBfcmFuZG9tU3RyaW5nQ2hhcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDUnO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0cmluZzogZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgdmFyIG1heCA9IF9yYW5kb21TdHJpbmdDaGFycy5sZW5ndGg7XG4gICAgdmFyIGJ5dGVzID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGxlbmd0aCk7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKF9yYW5kb21TdHJpbmdDaGFycy5zdWJzdHIoYnl0ZXNbaV0gJSBtYXgsIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgfVxuXG4sIG51bWJlcjogZnVuY3Rpb24obWF4KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heCk7XG4gIH1cblxuLCBudW1iZXJTdHJpbmc6IGZ1bmN0aW9uKG1heCkge1xuICAgIHZhciB0ID0gKCcnICsgKG1heCAtIDEpKS5sZW5ndGg7XG4gICAgdmFyIHAgPSBuZXcgQXJyYXkodCArIDEpLmpvaW4oJzAnKTtcbiAgICByZXR1cm4gKHAgKyB0aGlzLm51bWJlcihtYXgpKS5zbGljZSgtdCk7XG4gIH1cbn07XG5cbn0se1wiY3J5cHRvXCI6NDN9XSw1MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnV0aWxzOnRyYW5zcG9ydCcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGF2YWlsYWJsZVRyYW5zcG9ydHMpIHtcbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJUb0VuYWJsZWQ6IGZ1bmN0aW9uKHRyYW5zcG9ydHNXaGl0ZWxpc3QsIGluZm8pIHtcbiAgICAgIHZhciB0cmFuc3BvcnRzID0ge1xuICAgICAgICBtYWluOiBbXVxuICAgICAgLCBmYWNhZGU6IFtdXG4gICAgICB9O1xuICAgICAgaWYgKCF0cmFuc3BvcnRzV2hpdGVsaXN0KSB7XG4gICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPSBbdHJhbnNwb3J0c1doaXRlbGlzdF07XG4gICAgICB9XG5cbiAgICAgIGF2YWlsYWJsZVRyYW5zcG9ydHMuZm9yRWFjaChmdW5jdGlvbih0cmFucykge1xuICAgICAgICBpZiAoIXRyYW5zKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zLnRyYW5zcG9ydE5hbWUgPT09ICd3ZWJzb2NrZXQnICYmIGluZm8ud2Vic29ja2V0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGRlYnVnKCdkaXNhYmxlZCBmcm9tIHNlcnZlcicsICd3ZWJzb2NrZXQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNwb3J0c1doaXRlbGlzdC5sZW5ndGggJiZcbiAgICAgICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QuaW5kZXhPZih0cmFucy50cmFuc3BvcnROYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICBkZWJ1Zygnbm90IGluIHdoaXRlbGlzdCcsIHRyYW5zLnRyYW5zcG9ydE5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFucy5lbmFibGVkKGluZm8pKSB7XG4gICAgICAgICAgZGVidWcoJ2VuYWJsZWQnLCB0cmFucy50cmFuc3BvcnROYW1lKTtcbiAgICAgICAgICB0cmFuc3BvcnRzLm1haW4ucHVzaCh0cmFucyk7XG4gICAgICAgICAgaWYgKHRyYW5zLmZhY2FkZVRyYW5zcG9ydCkge1xuICAgICAgICAgICAgdHJhbnNwb3J0cy5mYWNhZGUucHVzaCh0cmFucy5mYWNhZGVUcmFuc3BvcnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWJ1ZygnZGlzYWJsZWQnLCB0cmFucy50cmFuc3BvcnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0cztcbiAgICB9XG4gIH07XG59O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiZGVidWdcIjo1NX1dLDUyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBVUkwgPSByZXF1aXJlKCd1cmwtcGFyc2UnKTtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDp1dGlsczp1cmwnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldE9yaWdpbjogZnVuY3Rpb24odXJsKSB7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBwID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmIChwLnByb3RvY29sID09PSAnZmlsZTonKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcG9ydCA9IHAucG9ydDtcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgIHBvcnQgPSAocC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpID8gJzQ0MycgOiAnODAnO1xuICAgIH1cblxuICAgIHJldHVybiBwLnByb3RvY29sICsgJy8vJyArIHAuaG9zdG5hbWUgKyAnOicgKyBwb3J0O1xuICB9XG5cbiwgaXNPcmlnaW5FcXVhbDogZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciByZXMgPSB0aGlzLmdldE9yaWdpbihhKSA9PT0gdGhpcy5nZXRPcmlnaW4oYik7XG4gICAgZGVidWcoJ3NhbWUnLCBhLCBiLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuLCBpc1NjaGVtZUVxdWFsOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIChhLnNwbGl0KCc6JylbMF0gPT09IGIuc3BsaXQoJzonKVswXSk7XG4gIH1cblxuLCBhZGRQYXRoOiBmdW5jdGlvbiAodXJsLCBwYXRoKSB7XG4gICAgdmFyIHFzID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgcmV0dXJuIHFzWzBdICsgcGF0aCArIChxc1sxXSA/ICc/JyArIHFzWzFdIDogJycpO1xuICB9XG5cbiwgYWRkUXVlcnk6IGZ1bmN0aW9uICh1cmwsIHEpIHtcbiAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gKCc/JyArIHEpIDogKCcmJyArIHEpKTtcbiAgfVxufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcImRlYnVnXCI6NTUsXCJ1cmwtcGFyc2VcIjo2MX1dLDUzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0gJzEuNC4wJztcblxufSx7fV0sNTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC0/XFxkP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuXG59LHt9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLCAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJywgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLCAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJywgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLCAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJywgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLCAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXTtcbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXG5cbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cblxuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlIHx8IC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgd2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSB8fCAvLyBJcyBmaXJlZm94ID49IHYzMT9cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEgfHwgLy8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKTtcbn1cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcbiAgYXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgKyB0aGlzLm5hbWVzcGFjZSArICh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArIGFyZ3NbMF0gKyAodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgKyAnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdGhpcy51c2VDb2xvcnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG4gIGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpOyAvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG4gIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbmRleCsrO1xuXG4gICAgaWYgKG1hdGNoID09PSAnJWMnKSB7XG4gICAgICAvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG4gIGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5sb2coKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmxvZ2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIHZhciBfY29uc29sZTtcblxuICAvLyBUaGlzIGhhY2tlcnkgaXMgcmVxdWlyZWQgZm9yIElFOC85LCB3aGVyZVxuICAvLyB0aGUgYGNvbnNvbGUubG9nYCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgJ2FwcGx5J1xuICByZXR1cm4gKHR5cGVvZiBjb25zb2xlID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoY29uc29sZSkpID09PSAnb2JqZWN0JyAmJiBjb25zb2xlLmxvZyAmJiAoX2NvbnNvbGUgPSBjb25zb2xlKS5sb2cuYXBwbHkoX2NvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgey8vIFN3YWxsb3dcbiAgICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgfVxufVxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuXG4gIHRyeSB7XG4gICAgciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuICB9IGNhdGNoIChlcnJvcikge30gLy8gU3dhbGxvd1xuICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgLy8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXG5cbiAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgcmV0dXJuIHI7XG59XG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuICB0cnkge1xuICAgIC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcbiAgICAvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3dhbGxvd1xuICAgIC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcbnZhciBmb3JtYXR0ZXJzID0gbW9kdWxlLmV4cG9ydHMuZm9ybWF0dGVycztcbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuICB9XG59O1xuXG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuL2NvbW1vblwiOjU2fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG4gIGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG4gIGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1ZztcbiAgY3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuICBjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcbiAgY3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuICBjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcbiAgY3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuICBPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcbiAgfSk7XG4gIC8qKlxuICAqIEFjdGl2ZSBgZGVidWdgIGluc3RhbmNlcy5cbiAgKi9cblxuICBjcmVhdGVEZWJ1Zy5pbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gICovXG5cbiAgY3JlYXRlRGVidWcubmFtZXMgPSBbXTtcbiAgY3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcbiAgLyoqXG4gICogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuICAqXG4gICogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuICAqL1xuXG4gIGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcbiAgLyoqXG4gICogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcbiAgKiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2VcbiAgKiBAYXBpIHByaXZhdGVcbiAgKi9cblxuICBmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcbiAgICB2YXIgaGFzaCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG4gIH1cblxuICBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuICAvKipcbiAgKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAgKlxuICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgKiBAYXBpIHB1YmxpY1xuICAqL1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuICAgIHZhciBwcmV2VGltZTtcblxuICAgIGZ1bmN0aW9uIGRlYnVnKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIC8vIERpc2FibGVkP1xuICAgICAgaWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGYgPSBkZWJ1ZzsgLy8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblxuICAgICAgdmFyIGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG4gICAgICB2YXIgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgICAgc2VsZi5kaWZmID0gbXM7XG4gICAgICBzZWxmLnByZXYgPSBwcmV2VGltZTtcbiAgICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgICBwcmV2VGltZSA9IGN1cnI7XG4gICAgICBhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG4gICAgICAgIGFyZ3MudW5zaGlmdCgnJU8nKTtcbiAgICAgIH0gLy8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblxuXG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgYXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIGZ1bmN0aW9uIChtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcbiAgICAgICAgaWYgKG1hdGNoID09PSAnJSUnKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciB2YWwgPSBhcmdzW2luZGV4XTtcbiAgICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7IC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblxuICAgICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICBpbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfSk7IC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cbiAgICAgIGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcbiAgICAgIHZhciBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcbiAgICAgIGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICBkZWJ1Zy5lbmFibGVkID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuICAgIGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuICAgIGRlYnVnLmNvbG9yID0gc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcbiAgICBkZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcbiAgICBkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7IC8vIERlYnVnLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuICAgIC8vIGRlYnVnLnJhd0xvZyA9IHJhd0xvZztcbiAgICAvLyBlbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXG4gICAgaWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWJ1Zy5pbnN0YW5jZXMucHVzaChkZWJ1Zyk7XG4gICAgcmV0dXJuIGRlYnVnO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB2YXIgaW5kZXggPSBjcmVhdGVEZWJ1Zy5pbnN0YW5jZXMuaW5kZXhPZih0aGlzKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGNyZWF0ZURlYnVnLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG4gIH1cbiAgLyoqXG4gICogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuICAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gICpcbiAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICAqIEBhcGkgcHVibGljXG4gICovXG5cblxuICBmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgIGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG4gICAgY3JlYXRlRGVidWcubmFtZXMgPSBbXTtcbiAgICBjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuICAgIHZhciBpO1xuICAgIHZhciBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG4gICAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCFzcGxpdFtpXSkge1xuICAgICAgICAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cbiAgICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgICAgY3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBjcmVhdGVEZWJ1Zy5pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZURlYnVnLmluc3RhbmNlc1tpXTtcbiAgICAgIGluc3RhbmNlLmVuYWJsZWQgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICAqXG4gICogQGFwaSBwdWJsaWNcbiAgKi9cblxuXG4gIGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgY3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcbiAgfVxuICAvKipcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICpcbiAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICogQGFwaSBwdWJsaWNcbiAgKi9cblxuXG4gIGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuICAgIGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGxlbjtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgKiBDb2VyY2UgYHZhbGAuXG4gICpcbiAgKiBAcGFyYW0ge01peGVkfSB2YWxcbiAgKiBAcmV0dXJuIHtNaXhlZH1cbiAgKiBAYXBpIHByaXZhdGVcbiAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuICByZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG5cblxufSx7XCJtc1wiOjU0fV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cbn0se31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qISBKU09OIHYzLjMuMiB8IGh0dHA6Ly9iZXN0aWVqcy5naXRodWIuaW8vanNvbjMgfCBDb3B5cmlnaHQgMjAxMi0yMDE0LCBLaXQgQ2FtYnJpZGdlIHwgaHR0cDovL2tpdC5taXQtbGljZW5zZS5vcmcgKi9cbjsoZnVuY3Rpb24gKCkge1xuICAvLyBEZXRlY3QgdGhlIGBkZWZpbmVgIGZ1bmN0aW9uIGV4cG9zZWQgYnkgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLiBUaGVcbiAgLy8gc3RyaWN0IGBkZWZpbmVgIGNoZWNrIGlzIG5lY2Vzc2FyeSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGByLmpzYC5cbiAgdmFyIGlzTG9hZGVyID0gdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQ7XG5cbiAgLy8gQSBzZXQgb2YgdHlwZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBvYmplY3RzIGZyb20gcHJpbWl0aXZlcy5cbiAgdmFyIG9iamVjdFR5cGVzID0ge1xuICAgIFwiZnVuY3Rpb25cIjogdHJ1ZSxcbiAgICBcIm9iamVjdFwiOiB0cnVlXG4gIH07XG5cbiAgLy8gRGV0ZWN0IHRoZSBgZXhwb3J0c2Agb2JqZWN0IGV4cG9zZWQgYnkgQ29tbW9uSlMgaW1wbGVtZW50YXRpb25zLlxuICB2YXIgZnJlZUV4cG9ydHMgPSBvYmplY3RUeXBlc1t0eXBlb2YgZXhwb3J0c10gJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4gIC8vIFVzZSB0aGUgYGdsb2JhbGAgb2JqZWN0IGV4cG9zZWQgYnkgTm9kZSAoaW5jbHVkaW5nIEJyb3dzZXJpZnkgdmlhXG4gIC8vIGBpbnNlcnQtbW9kdWxlLWdsb2JhbHNgKSwgTmFyd2hhbCwgYW5kIFJpbmdvIGFzIHRoZSBkZWZhdWx0IGNvbnRleHQsXG4gIC8vIGFuZCB0aGUgYHdpbmRvd2Agb2JqZWN0IGluIGJyb3dzZXJzLiBSaGlubyBleHBvcnRzIGEgYGdsb2JhbGAgZnVuY3Rpb25cbiAgLy8gaW5zdGVhZC5cbiAgdmFyIHJvb3QgPSBvYmplY3RUeXBlc1t0eXBlb2Ygd2luZG93XSAmJiB3aW5kb3cgfHwgdGhpcyxcbiAgICAgIGZyZWVHbG9iYWwgPSBmcmVlRXhwb3J0cyAmJiBvYmplY3RUeXBlc1t0eXBlb2YgbW9kdWxlXSAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgJiYgZ2xvYmFsO1xuXG4gIGlmIChmcmVlR2xvYmFsICYmIChmcmVlR2xvYmFsW1wiZ2xvYmFsXCJdID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWxbXCJ3aW5kb3dcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcInNlbGZcIl0gPT09IGZyZWVHbG9iYWwpKSB7XG4gICAgcm9vdCA9IGZyZWVHbG9iYWw7XG4gIH1cblxuICAvLyBQdWJsaWM6IEluaXRpYWxpemVzIEpTT04gMyB1c2luZyB0aGUgZ2l2ZW4gYGNvbnRleHRgIG9iamVjdCwgYXR0YWNoaW5nIHRoZVxuICAvLyBgc3RyaW5naWZ5YCBhbmQgYHBhcnNlYCBmdW5jdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBgZXhwb3J0c2Agb2JqZWN0LlxuICBmdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCwgZXhwb3J0cykge1xuICAgIGNvbnRleHQgfHwgKGNvbnRleHQgPSByb290W1wiT2JqZWN0XCJdKCkpO1xuICAgIGV4cG9ydHMgfHwgKGV4cG9ydHMgPSByb290W1wiT2JqZWN0XCJdKCkpO1xuXG4gICAgLy8gTmF0aXZlIGNvbnN0cnVjdG9yIGFsaWFzZXMuXG4gICAgdmFyIE51bWJlciA9IGNvbnRleHRbXCJOdW1iZXJcIl0gfHwgcm9vdFtcIk51bWJlclwiXSxcbiAgICAgICAgU3RyaW5nID0gY29udGV4dFtcIlN0cmluZ1wiXSB8fCByb290W1wiU3RyaW5nXCJdLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0W1wiT2JqZWN0XCJdIHx8IHJvb3RbXCJPYmplY3RcIl0sXG4gICAgICAgIERhdGUgPSBjb250ZXh0W1wiRGF0ZVwiXSB8fCByb290W1wiRGF0ZVwiXSxcbiAgICAgICAgU3ludGF4RXJyb3IgPSBjb250ZXh0W1wiU3ludGF4RXJyb3JcIl0gfHwgcm9vdFtcIlN5bnRheEVycm9yXCJdLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0W1wiVHlwZUVycm9yXCJdIHx8IHJvb3RbXCJUeXBlRXJyb3JcIl0sXG4gICAgICAgIE1hdGggPSBjb250ZXh0W1wiTWF0aFwiXSB8fCByb290W1wiTWF0aFwiXSxcbiAgICAgICAgbmF0aXZlSlNPTiA9IGNvbnRleHRbXCJKU09OXCJdIHx8IHJvb3RbXCJKU09OXCJdO1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gdGhlIG5hdGl2ZSBgc3RyaW5naWZ5YCBhbmQgYHBhcnNlYCBpbXBsZW1lbnRhdGlvbnMuXG4gICAgaWYgKHR5cGVvZiBuYXRpdmVKU09OID09IFwib2JqZWN0XCIgJiYgbmF0aXZlSlNPTikge1xuICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBuYXRpdmVKU09OLnN0cmluZ2lmeTtcbiAgICAgIGV4cG9ydHMucGFyc2UgPSBuYXRpdmVKU09OLnBhcnNlO1xuICAgIH1cblxuICAgIC8vIENvbnZlbmllbmNlIGFsaWFzZXMuXG4gICAgdmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICAgICAgZ2V0Q2xhc3MgPSBvYmplY3RQcm90by50b1N0cmluZyxcbiAgICAgICAgaXNQcm9wZXJ0eSwgZm9yRWFjaCwgdW5kZWY7XG5cbiAgICAvLyBUZXN0IHRoZSBgRGF0ZSNnZXRVVEMqYCBtZXRob2RzLiBCYXNlZCBvbiB3b3JrIGJ5IEBZYWZmbGUuXG4gICAgdmFyIGlzRXh0ZW5kZWQgPSBuZXcgRGF0ZSgtMzUwOTgyNzMzNDU3MzI5Mik7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSBgZ2V0VVRDRnVsbFllYXJgLCBgTW9udGhgLCBhbmQgYERhdGVgIG1ldGhvZHMgcmV0dXJuIG5vbnNlbnNpY2FsXG4gICAgICAvLyByZXN1bHRzIGZvciBjZXJ0YWluIGRhdGVzIGluIE9wZXJhID49IDEwLjUzLlxuICAgICAgaXNFeHRlbmRlZCA9IGlzRXh0ZW5kZWQuZ2V0VVRDRnVsbFllYXIoKSA9PSAtMTA5MjUyICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTW9udGgoKSA9PT0gMCAmJiBpc0V4dGVuZGVkLmdldFVUQ0RhdGUoKSA9PT0gMSAmJlxuICAgICAgICAvLyBTYWZhcmkgPCAyLjAuMiBzdG9yZXMgdGhlIGludGVybmFsIG1pbGxpc2Vjb25kIHRpbWUgdmFsdWUgY29ycmVjdGx5LFxuICAgICAgICAvLyBidXQgY2xpcHMgdGhlIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgZGF0ZSBtZXRob2RzIHRvIHRoZSByYW5nZSBvZlxuICAgICAgICAvLyBzaWduZWQgMzItYml0IGludGVnZXJzIChbLTIgKiogMzEsIDIgKiogMzEgLSAxXSkuXG4gICAgICAgIGlzRXh0ZW5kZWQuZ2V0VVRDSG91cnMoKSA9PSAxMCAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbnV0ZXMoKSA9PSAzNyAmJiBpc0V4dGVuZGVkLmdldFVUQ1NlY29uZHMoKSA9PSA2ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgPT0gNzA4O1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cblxuICAgIC8vIEludGVybmFsOiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5hdGl2ZSBgSlNPTi5zdHJpbmdpZnlgIGFuZCBgcGFyc2VgXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIGFyZSBzcGVjLWNvbXBsaWFudC4gQmFzZWQgb24gd29yayBieSBLZW4gU255ZGVyLlxuICAgIGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgICBpZiAoaGFzW25hbWVdICE9PSB1bmRlZikge1xuICAgICAgICAvLyBSZXR1cm4gY2FjaGVkIGZlYXR1cmUgdGVzdCByZXN1bHQuXG4gICAgICAgIHJldHVybiBoYXNbbmFtZV07XG4gICAgICB9XG4gICAgICB2YXIgaXNTdXBwb3J0ZWQ7XG4gICAgICBpZiAobmFtZSA9PSBcImJ1Zy1zdHJpbmctY2hhci1pbmRleFwiKSB7XG4gICAgICAgIC8vIElFIDw9IDcgZG9lc24ndCBzdXBwb3J0IGFjY2Vzc2luZyBzdHJpbmcgY2hhcmFjdGVycyB1c2luZyBzcXVhcmVcbiAgICAgICAgLy8gYnJhY2tldCBub3RhdGlvbi4gSUUgOCBvbmx5IHN1cHBvcnRzIHRoaXMgZm9yIHByaW1pdGl2ZXMuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gXCJhXCJbMF0gIT0gXCJhXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgYm90aCBgSlNPTi5zdHJpbmdpZnlgIGFuZCBgSlNPTi5wYXJzZWAgYXJlXG4gICAgICAgIC8vIHN1cHBvcnRlZC5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSAmJiBoYXMoXCJqc29uLXBhcnNlXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlLCBzZXJpYWxpemVkID0gJ3tcImFcIjpbMSx0cnVlLGZhbHNlLG51bGwsXCJcXFxcdTAwMDBcXFxcYlxcXFxuXFxcXGZcXFxcclxcXFx0XCJdfSc7XG4gICAgICAgIC8vIFRlc3QgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXN0cmluZ2lmeVwiKSB7XG4gICAgICAgICAgdmFyIHN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyaW5naWZ5LCBzdHJpbmdpZnlTdXBwb3J0ZWQgPSB0eXBlb2Ygc3RyaW5naWZ5ID09IFwiZnVuY3Rpb25cIiAmJiBpc0V4dGVuZGVkO1xuICAgICAgICAgIGlmIChzdHJpbmdpZnlTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIC8vIEEgdGVzdCBmdW5jdGlvbiBvYmplY3Qgd2l0aCBhIGN1c3RvbSBgdG9KU09OYCBtZXRob2QuXG4gICAgICAgICAgICAodmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSkudG9KU09OID0gdmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdHJpbmdpZnlTdXBwb3J0ZWQgPVxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggMy4xYjEgYW5kIGIyIHNlcmlhbGl6ZSBzdHJpbmcsIG51bWJlciwgYW5kIGJvb2xlYW5cbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmVzIGFzIG9iamVjdCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoMCkgPT09IFwiMFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIGIyLCBhbmQgSlNPTiAyIHNlcmlhbGl6ZSB3cmFwcGVkIHByaW1pdGl2ZXMgYXMgb2JqZWN0XG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBOdW1iZXIoKSkgPT09IFwiMFwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBTdHJpbmcoKSkgPT0gJ1wiXCInICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGlzIGBudWxsYCwgYHVuZGVmaW5lZGAsIG9yXG4gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZGVmaW5lIGEgY2Fub25pY2FsIEpTT04gcmVwcmVzZW50YXRpb24gKHRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBgdG9KU09OYCBwcm9wZXJ0aWVzIGFzIHdlbGwsICp1bmxlc3MqIHRoZXkgYXJlIG5lc3RlZFxuICAgICAgICAgICAgICAgIC8vIHdpdGhpbiBhbiBvYmplY3Qgb3IgYXJyYXkpLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShnZXRDbGFzcykgPT09IHVuZGVmICYmXG4gICAgICAgICAgICAgICAgLy8gSUUgOCBzZXJpYWxpemVzIGB1bmRlZmluZWRgIGFzIGBcInVuZGVmaW5lZFwiYC4gU2FmYXJpIDw9IDUuMS43IGFuZFxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIzIHBhc3MgdGhpcyB0ZXN0LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh1bmRlZikgPT09IHVuZGVmICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS43IGFuZCBGRiAzLjFiMyB0aHJvdyBgRXJyb3JgcyBhbmQgYFR5cGVFcnJvcmBzLFxuICAgICAgICAgICAgICAgIC8vIHJlc3BlY3RpdmVseSwgaWYgdGhlIHZhbHVlIGlzIG9taXR0ZWQgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KCkgPT09IHVuZGVmICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5vdCBhIG51bWJlcixcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcsIGFycmF5LCBvYmplY3QsIEJvb2xlYW4sIG9yIGBudWxsYCBsaXRlcmFsLiBUaGlzIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHdpdGggY3VzdG9tIGB0b0pTT05gIG1ldGhvZHMgYXMgd2VsbCwgdW5sZXNzIHRoZXkgYXJlIG5lc3RlZFxuICAgICAgICAgICAgICAgIC8vIGluc2lkZSBvYmplY3Qgb3IgYXJyYXkgbGl0ZXJhbHMuIFlVSSAzLjAuMGIxIGlnbm9yZXMgY3VzdG9tIGB0b0pTT05gXG4gICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodmFsdWUpID09PSBcIjFcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdmFsdWVdKSA9PSBcIlsxXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIHNlcmlhbGl6ZXMgYFt1bmRlZmluZWRdYCBhcyBgXCJbXVwiYCBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAgICAgLy8gYFwiW251bGxdXCJgLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdW5kZWZdKSA9PSBcIltudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gWVVJIDMuMC4wYjEgZmFpbHMgdG8gc2VyaWFsaXplIGBudWxsYCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobnVsbCkgPT0gXCJudWxsXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiBoYWx0cyBzZXJpYWxpemF0aW9uIGlmIGFuIGFycmF5IGNvbnRhaW5zIGEgZnVuY3Rpb246XG4gICAgICAgICAgICAgICAgLy8gYFsxLCB0cnVlLCBnZXRDbGFzcywgMV1gIHNlcmlhbGl6ZXMgYXMgXCJbMSx0cnVlLF0sXCIuIEZGIDMuMWIzXG4gICAgICAgICAgICAgICAgLy8gZWxpZGVzIG5vbi1KU09OIHZhbHVlcyBmcm9tIG9iamVjdHMgYW5kIGFycmF5cywgdW5sZXNzIHRoZXlcbiAgICAgICAgICAgICAgICAvLyBkZWZpbmUgY3VzdG9tIGB0b0pTT05gIG1ldGhvZHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZiwgZ2V0Q2xhc3MsIG51bGxdKSA9PSBcIltudWxsLG51bGwsbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBzZXJpYWxpemF0aW9uIHRlc3QuIEZGIDMuMWIxIHVzZXMgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzXG4gICAgICAgICAgICAgICAgLy8gd2hlcmUgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcyBhcmUgZXhwZWN0ZWQgKGUuZy4sIGBcXGJgID0+IGBcXHUwMDA4YCkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHsgXCJhXCI6IFt2YWx1ZSwgdHJ1ZSwgZmFsc2UsIG51bGwsIFwiXFx4MDBcXGJcXG5cXGZcXHJcXHRcIl0gfSkgPT0gc2VyaWFsaXplZCAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxIGFuZCBiMiBpZ25vcmUgdGhlIGBmaWx0ZXJgIGFuZCBgd2lkdGhgIGFyZ3VtZW50cy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobnVsbCwgdmFsdWUpID09PSBcIjFcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbMSwgMl0sIG51bGwsIDEpID09IFwiW1xcbiAxLFxcbiAyXFxuXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gSlNPTiAyLCBQcm90b3R5cGUgPD0gMS43LCBhbmQgb2xkZXIgV2ViS2l0IGJ1aWxkcyBpbmNvcnJlY3RseVxuICAgICAgICAgICAgICAgIC8vIHNlcmlhbGl6ZSBleHRlbmRlZCB5ZWFycy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTguNjRlMTUpKSA9PSAnXCItMjcxODIxLTA0LTIwVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBUaGUgbWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSg4LjY0ZTE1KSkgPT0gJ1wiKzI3NTc2MC0wOS0xM1QwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCA8PSAxMS4wIGluY29ycmVjdGx5IHNlcmlhbGl6ZXMgeWVhcnMgcHJpb3IgdG8gMCBhcyBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgeWVhcnMgaW5zdGVhZCBvZiBzaXgtZGlnaXQgeWVhcnMuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC02MjE5ODc1NTJlNSkpID09ICdcIi0wMDAwMDEtMDEtMDFUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuNSBhbmQgT3BlcmEgPj0gMTAuNTMgaW5jb3JyZWN0bHkgc2VyaWFsaXplIG1pbGxpc2Vjb25kXG4gICAgICAgICAgICAgICAgLy8gdmFsdWVzIGxlc3MgdGhhbiAxMDAwLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtMSkpID09ICdcIjE5NjktMTItMzFUMjM6NTk6NTkuOTk5WlwiJztcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICBzdHJpbmdpZnlTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNTdXBwb3J0ZWQgPSBzdHJpbmdpZnlTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVzdCBgSlNPTi5wYXJzZWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1wYXJzZVwiKSB7XG4gICAgICAgICAgdmFyIHBhcnNlID0gZXhwb3J0cy5wYXJzZTtcbiAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIGIyIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGEgYmFyZSBsaXRlcmFsIGlzIHByb3ZpZGVkLlxuICAgICAgICAgICAgICAvLyBDb25mb3JtaW5nIGltcGxlbWVudGF0aW9ucyBzaG91bGQgYWxzbyBjb2VyY2UgdGhlIGluaXRpYWwgYXJndW1lbnQgdG9cbiAgICAgICAgICAgICAgLy8gYSBzdHJpbmcgcHJpb3IgdG8gcGFyc2luZy5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlKFwiMFwiKSA9PT0gMCAmJiAhcGFyc2UoZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHBhcnNpbmcgdGVzdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlKHNlcmlhbGl6ZWQpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZVN1cHBvcnRlZCA9IHZhbHVlW1wiYVwiXS5sZW5ndGggPT0gNSAmJiB2YWx1ZVtcImFcIl1bMF0gPT09IDE7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjIgYW5kIEZGIDMuMWIxIGFsbG93IHVuZXNjYXBlZCB0YWJzIGluIHN0cmluZ3MuXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gIXBhcnNlKCdcIlxcdFwiJyk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAgYW5kIDQuMC4xIGFsbG93IGxlYWRpbmcgYCtgIHNpZ25zIGFuZCBsZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVjaW1hbCBwb2ludHMuIEZGIDQuMCwgNC4wLjEsIGFuZCBJRSA5LTEwIGFsc28gYWxsb3dcbiAgICAgICAgICAgICAgICAgICAgICAvLyBjZXJ0YWluIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIwMVwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wLCA0LjAuMSwgYW5kIFJoaW5vIDEuN1IzLVI0IGFsbG93IHRyYWlsaW5nIGRlY2ltYWxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludHMuIFRoZXNlIGVudmlyb25tZW50cywgYWxvbmcgd2l0aCBGRiAzLjFiMSBhbmQgMixcbiAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIGFsbG93IHRyYWlsaW5nIGNvbW1hcyBpbiBKU09OIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMS5cIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHBhcnNlU3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzW25hbWVdID0gISFpc1N1cHBvcnRlZDtcbiAgICB9XG5cbiAgICBpZiAoIWhhcyhcImpzb25cIikpIHtcbiAgICAgIC8vIENvbW1vbiBgW1tDbGFzc11dYCBuYW1lIGFsaWFzZXMuXG4gICAgICB2YXIgZnVuY3Rpb25DbGFzcyA9IFwiW29iamVjdCBGdW5jdGlvbl1cIixcbiAgICAgICAgICBkYXRlQ2xhc3MgPSBcIltvYmplY3QgRGF0ZV1cIixcbiAgICAgICAgICBudW1iZXJDbGFzcyA9IFwiW29iamVjdCBOdW1iZXJdXCIsXG4gICAgICAgICAgc3RyaW5nQ2xhc3MgPSBcIltvYmplY3QgU3RyaW5nXVwiLFxuICAgICAgICAgIGFycmF5Q2xhc3MgPSBcIltvYmplY3QgQXJyYXldXCIsXG4gICAgICAgICAgYm9vbGVhbkNsYXNzID0gXCJbb2JqZWN0IEJvb2xlYW5dXCI7XG5cbiAgICAgIC8vIERldGVjdCBpbmNvbXBsZXRlIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBzdHJpbmcgY2hhcmFjdGVycyBieSBpbmRleC5cbiAgICAgIHZhciBjaGFySW5kZXhCdWdneSA9IGhhcyhcImJ1Zy1zdHJpbmctY2hhci1pbmRleFwiKTtcblxuICAgICAgLy8gRGVmaW5lIGFkZGl0aW9uYWwgdXRpbGl0eSBtZXRob2RzIGlmIHRoZSBgRGF0ZWAgbWV0aG9kcyBhcmUgYnVnZ3kuXG4gICAgICBpZiAoIWlzRXh0ZW5kZWQpIHtcbiAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICAgICAgLy8gQSBtYXBwaW5nIGJldHdlZW4gdGhlIG1vbnRocyBvZiB0aGUgeWVhciBhbmQgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW5cbiAgICAgICAgLy8gSmFudWFyeSAxc3QgYW5kIHRoZSBmaXJzdCBvZiB0aGUgcmVzcGVjdGl2ZSBtb250aC5cbiAgICAgICAgdmFyIE1vbnRocyA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF07XG4gICAgICAgIC8vIEludGVybmFsOiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHRoZSBVbml4IGVwb2NoIGFuZCB0aGVcbiAgICAgICAgLy8gZmlyc3QgZGF5IG9mIHRoZSBnaXZlbiBtb250aC5cbiAgICAgICAgdmFyIGdldERheSA9IGZ1bmN0aW9uICh5ZWFyLCBtb250aCkge1xuICAgICAgICAgIHJldHVybiBNb250aHNbbW9udGhdICsgMzY1ICogKHllYXIgLSAxOTcwKSArIGZsb29yKCh5ZWFyIC0gMTk2OSArIChtb250aCA9ICsobW9udGggPiAxKSkpIC8gNCkgLSBmbG9vcigoeWVhciAtIDE5MDEgKyBtb250aCkgLyAxMDApICsgZmxvb3IoKHllYXIgLSAxNjAxICsgbW9udGgpIC8gNDAwKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgaWYgYSBwcm9wZXJ0eSBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW5cbiAgICAgIC8vIG9iamVjdC4gRGVsZWdhdGVzIHRvIHRoZSBuYXRpdmUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgbWV0aG9kLlxuICAgICAgaWYgKCEoaXNQcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5KSkge1xuICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgdmFyIG1lbWJlcnMgPSB7fSwgY29uc3RydWN0b3I7XG4gICAgICAgICAgaWYgKChtZW1iZXJzLl9fcHJvdG9fXyA9IG51bGwsIG1lbWJlcnMuX19wcm90b19fID0ge1xuICAgICAgICAgICAgLy8gVGhlICpwcm90byogcHJvcGVydHkgY2Fubm90IGJlIHNldCBtdWx0aXBsZSB0aW1lcyBpbiByZWNlbnRcbiAgICAgICAgICAgIC8vIHZlcnNpb25zIG9mIEZpcmVmb3ggYW5kIFNlYU1vbmtleS5cbiAgICAgICAgICAgIFwidG9TdHJpbmdcIjogMVxuICAgICAgICAgIH0sIG1lbWJlcnMpLnRvU3RyaW5nICE9IGdldENsYXNzKSB7XG4gICAgICAgICAgICAvLyBTYWZhcmkgPD0gMi4wLjMgZG9lc24ndCBpbXBsZW1lbnQgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAsIGJ1dFxuICAgICAgICAgICAgLy8gc3VwcG9ydHMgdGhlIG11dGFibGUgKnByb3RvKiBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgLy8gQ2FwdHVyZSBhbmQgYnJlYWsgdGhlIG9iamVjdCdzIHByb3RvdHlwZSBjaGFpbiAoc2VlIHNlY3Rpb24gOC42LjJcbiAgICAgICAgICAgICAgLy8gb2YgdGhlIEVTIDUuMSBzcGVjKS4gVGhlIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBwcmV2ZW50cyBhblxuICAgICAgICAgICAgICAvLyB1bnNhZmUgdHJhbnNmb3JtYXRpb24gYnkgdGhlIENsb3N1cmUgQ29tcGlsZXIuXG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbCA9IHRoaXMuX19wcm90b19fLCByZXN1bHQgPSBwcm9wZXJ0eSBpbiAodGhpcy5fX3Byb3RvX18gPSBudWxsLCB0aGlzKTtcbiAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvdG90eXBlIGNoYWluLlxuICAgICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IG9yaWdpbmFsO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FwdHVyZSBhIHJlZmVyZW5jZSB0byB0aGUgdG9wLWxldmVsIGBPYmplY3RgIGNvbnN0cnVjdG9yLlxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBtZW1iZXJzLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBgY29uc3RydWN0b3JgIHByb3BlcnR5IHRvIHNpbXVsYXRlIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIGluXG4gICAgICAgICAgICAvLyBvdGhlciBlbnZpcm9ubWVudHMuXG4gICAgICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnQgPSAodGhpcy5jb25zdHJ1Y3RvciB8fCBjb25zdHJ1Y3RvcikucHJvdG90eXBlO1xuICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkgaW4gdGhpcyAmJiAhKHByb3BlcnR5IGluIHBhcmVudCAmJiB0aGlzW3Byb3BlcnR5XSA9PT0gcGFyZW50W3Byb3BlcnR5XSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZW1iZXJzID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eS5jYWxsKHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSW50ZXJuYWw6IE5vcm1hbGl6ZXMgdGhlIGBmb3IuLi5pbmAgaXRlcmF0aW9uIGFsZ29yaXRobSBhY3Jvc3NcbiAgICAgIC8vIGVudmlyb25tZW50cy4gRWFjaCBlbnVtZXJhdGVkIGtleSBpcyB5aWVsZGVkIHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi5cbiAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgc2l6ZSA9IDAsIFByb3BlcnRpZXMsIG1lbWJlcnMsIHByb3BlcnR5O1xuXG4gICAgICAgIC8vIFRlc3RzIGZvciBidWdzIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50J3MgYGZvci4uLmluYCBhbGdvcml0aG0uIFRoZVxuICAgICAgICAvLyBgdmFsdWVPZmAgcHJvcGVydHkgaW5oZXJpdHMgdGhlIG5vbi1lbnVtZXJhYmxlIGZsYWcgZnJvbVxuICAgICAgICAvLyBgT2JqZWN0LnByb3RvdHlwZWAgaW4gb2xkZXIgdmVyc2lvbnMgb2YgSUUsIE5ldHNjYXBlLCBhbmQgTW96aWxsYS5cbiAgICAgICAgKFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZU9mID0gMDtcbiAgICAgICAgfSkucHJvdG90eXBlLnZhbHVlT2YgPSAwO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYFByb3BlcnRpZXNgIGNsYXNzLlxuICAgICAgICBtZW1iZXJzID0gbmV3IFByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yIChwcm9wZXJ0eSBpbiBtZW1iZXJzKSB7XG4gICAgICAgICAgLy8gSWdub3JlIGFsbCBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBpZiAoaXNQcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgc2l6ZSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBQcm9wZXJ0aWVzID0gbWVtYmVycyA9IG51bGw7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBpdGVyYXRpb24gYWxnb3JpdGhtLlxuICAgICAgICBpZiAoIXNpemUpIHtcbiAgICAgICAgICAvLyBBIGxpc3Qgb2Ygbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuXG4gICAgICAgICAgbWVtYmVycyA9IFtcInZhbHVlT2ZcIiwgXCJ0b1N0cmluZ1wiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwiaGFzT3duUHJvcGVydHlcIiwgXCJjb25zdHJ1Y3RvclwiXTtcbiAgICAgICAgICAvLyBJRSA8PSA4LCBNb3ppbGxhIDEuMCwgYW5kIE5ldHNjYXBlIDYuMiBpZ25vcmUgc2hhZG93ZWQgbm9uLWVudW1lcmFibGVcbiAgICAgICAgICAvLyBwcm9wZXJ0aWVzLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGxlbmd0aDtcbiAgICAgICAgICAgIHZhciBoYXNQcm9wZXJ0eSA9ICFpc0Z1bmN0aW9uICYmIHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgIT0gXCJmdW5jdGlvblwiICYmIG9iamVjdFR5cGVzW3R5cGVvZiBvYmplY3QuaGFzT3duUHJvcGVydHldICYmIG9iamVjdC5oYXNPd25Qcm9wZXJ0eSB8fCBpc1Byb3BlcnR5O1xuICAgICAgICAgICAgZm9yIChwcm9wZXJ0eSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgLy8gR2Vja28gPD0gMS4wIGVudW1lcmF0ZXMgdGhlIGBwcm90b3R5cGVgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyB1bmRlclxuICAgICAgICAgICAgICAvLyBjZXJ0YWluIGNvbmRpdGlvbnM7IElFIGRvZXMgbm90LlxuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGludm9rZSB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggbm9uLWVudW1lcmFibGUgcHJvcGVydHkuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IG1lbWJlcnMubGVuZ3RoOyBwcm9wZXJ0eSA9IG1lbWJlcnNbLS1sZW5ndGhdOyBoYXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpICYmIGNhbGxiYWNrKHByb3BlcnR5KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChzaXplID09IDIpIHtcbiAgICAgICAgICAvLyBTYWZhcmkgPD0gMi4wLjQgZW51bWVyYXRlcyBzaGFkb3dlZCBwcm9wZXJ0aWVzIHR3aWNlLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc2V0IG9mIGl0ZXJhdGVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5O1xuICAgICAgICAgICAgZm9yIChwcm9wZXJ0eSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgLy8gU3RvcmUgZWFjaCBwcm9wZXJ0eSBuYW1lIHRvIHByZXZlbnQgZG91YmxlIGVudW1lcmF0aW9uLiBUaGVcbiAgICAgICAgICAgICAgLy8gYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIGlzIG5vdCBlbnVtZXJhdGVkIGR1ZSB0byBjcm9zcy1cbiAgICAgICAgICAgICAgLy8gZW52aXJvbm1lbnQgaW5jb25zaXN0ZW5jaWVzLlxuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmICFpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpICYmIChtZW1iZXJzW3Byb3BlcnR5XSA9IDEpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gYnVncyBkZXRlY3RlZDsgdXNlIHRoZSBzdGFuZGFyZCBgZm9yLi4uaW5gIGFsZ29yaXRobS5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5LCBpc0NvbnN0cnVjdG9yO1xuICAgICAgICAgICAgZm9yIChwcm9wZXJ0eSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgIShpc0NvbnN0cnVjdG9yID0gcHJvcGVydHkgPT09IFwiY29uc3RydWN0b3JcIikpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGludm9rZSB0aGUgY2FsbGJhY2sgZm9yIHRoZSBgY29uc3RydWN0b3JgIHByb3BlcnR5IGR1ZSB0b1xuICAgICAgICAgICAgLy8gY3Jvc3MtZW52aXJvbm1lbnQgaW5jb25zaXN0ZW5jaWVzLlxuICAgICAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IgfHwgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgKHByb3BlcnR5ID0gXCJjb25zdHJ1Y3RvclwiKSkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvckVhY2gob2JqZWN0LCBjYWxsYmFjayk7XG4gICAgICB9O1xuXG4gICAgICAvLyBQdWJsaWM6IFNlcmlhbGl6ZXMgYSBKYXZhU2NyaXB0IGB2YWx1ZWAgYXMgYSBKU09OIHN0cmluZy4gVGhlIG9wdGlvbmFsXG4gICAgICAvLyBgZmlsdGVyYCBhcmd1bWVudCBtYXkgc3BlY2lmeSBlaXRoZXIgYSBmdW5jdGlvbiB0aGF0IGFsdGVycyBob3cgb2JqZWN0IGFuZFxuICAgICAgLy8gYXJyYXkgbWVtYmVycyBhcmUgc2VyaWFsaXplZCwgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycyB0aGF0XG4gICAgICAvLyBpbmRpY2F0ZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIG9wdGlvbmFsIGB3aWR0aGBcbiAgICAgIC8vIGFyZ3VtZW50IG1heSBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgbnVtYmVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgLy8gbGV2ZWwgb2YgdGhlIG91dHB1dC5cbiAgICAgIGlmICghaGFzKFwianNvbi1zdHJpbmdpZnlcIikpIHtcbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy5cbiAgICAgICAgdmFyIEVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFxcXFxcIixcbiAgICAgICAgICAzNDogJ1xcXFxcIicsXG4gICAgICAgICAgODogXCJcXFxcYlwiLFxuICAgICAgICAgIDEyOiBcIlxcXFxmXCIsXG4gICAgICAgICAgMTA6IFwiXFxcXG5cIixcbiAgICAgICAgICAxMzogXCJcXFxcclwiLFxuICAgICAgICAgIDk6IFwiXFxcXHRcIlxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBDb252ZXJ0cyBgdmFsdWVgIGludG8gYSB6ZXJvLXBhZGRlZCBzdHJpbmcgc3VjaCB0aGF0IGl0c1xuICAgICAgICAvLyBsZW5ndGggaXMgYXQgbGVhc3QgZXF1YWwgdG8gYHdpZHRoYC4gVGhlIGB3aWR0aGAgbXVzdCBiZSA8PSA2LlxuICAgICAgICB2YXIgbGVhZGluZ1plcm9lcyA9IFwiMDAwMDAwXCI7XG4gICAgICAgIHZhciB0b1BhZGRlZFN0cmluZyA9IGZ1bmN0aW9uICh3aWR0aCwgdmFsdWUpIHtcbiAgICAgICAgICAvLyBUaGUgYHx8IDBgIGV4cHJlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluXG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIHdoZXJlIGAwID09IC0wYCwgYnV0IGBTdHJpbmcoLTApICE9PSBcIjBcImAuXG4gICAgICAgICAgcmV0dXJuIChsZWFkaW5nWmVyb2VzICsgKHZhbHVlIHx8IDApKS5zbGljZSgtd2lkdGgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBEb3VibGUtcXVvdGVzIGEgc3RyaW5nIGB2YWx1ZWAsIHJlcGxhY2luZyBhbGwgQVNDSUkgY29udHJvbFxuICAgICAgICAvLyBjaGFyYWN0ZXJzIChjaGFyYWN0ZXJzIHdpdGggY29kZSB1bml0IHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDMxKSB3aXRoXG4gICAgICAgIC8vIHRoZWlyIGVzY2FwZWQgZXF1aXZhbGVudHMuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGBRdW90ZSh2YWx1ZSlgIG9wZXJhdGlvbiBkZWZpbmVkIGluIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMuXG4gICAgICAgIHZhciB1bmljb2RlUHJlZml4ID0gXCJcXFxcdTAwXCI7XG4gICAgICAgIHZhciBxdW90ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSAnXCInLCBpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aCwgdXNlQ2hhckluZGV4ID0gIWNoYXJJbmRleEJ1Z2d5IHx8IGxlbmd0aCA+IDEwO1xuICAgICAgICAgIHZhciBzeW1ib2xzID0gdXNlQ2hhckluZGV4ICYmIChjaGFySW5kZXhCdWdneSA/IHZhbHVlLnNwbGl0KFwiXCIpIDogdmFsdWUpO1xuICAgICAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlID0gdmFsdWUuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgY29udHJvbCBjaGFyYWN0ZXIsIGFwcGVuZCBpdHMgVW5pY29kZSBvclxuICAgICAgICAgICAgLy8gc2hvcnRoYW5kIGVzY2FwZSBzZXF1ZW5jZTsgb3RoZXJ3aXNlLCBhcHBlbmQgdGhlIGNoYXJhY3RlciBhcy1pcy5cbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA4OiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTI6IGNhc2UgMTM6IGNhc2UgMzQ6IGNhc2UgOTI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IEVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgKz0gdW5pY29kZVByZWZpeCArIHRvUGFkZGVkU3RyaW5nKDIsIGNoYXJDb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVzZUNoYXJJbmRleCA/IHN5bWJvbHNbaW5kZXhdIDogdmFsdWUuY2hhckF0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdcIic7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZXMgYW4gb2JqZWN0LiBJbXBsZW1lbnRzIHRoZVxuICAgICAgICAvLyBgU3RyKGtleSwgaG9sZGVyKWAsIGBKTyh2YWx1ZSlgLCBhbmQgYEpBKHZhbHVlKWAgb3BlcmF0aW9ucy5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgb2JqZWN0LCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKSB7XG4gICAgICAgICAgdmFyIHZhbHVlLCBjbGFzc05hbWUsIHllYXIsIG1vbnRoLCBkYXRlLCB0aW1lLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCByZXN1bHRzLCBlbGVtZW50LCBpbmRleCwgbGVuZ3RoLCBwcmVmaXgsIHJlc3VsdDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBob3N0IG9iamVjdCBzdXBwb3J0LlxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBkYXRlQ2xhc3MgJiYgIWlzUHJvcGVydHkuY2FsbCh2YWx1ZSwgXCJ0b0pTT05cIikpIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDApIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRlcyBhcmUgc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGBEYXRlI3RvSlNPTmAgbWV0aG9kXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkIGluIEVTIDUuMSBzZWN0aW9uIDE1LjkuNS40NC4gU2VlIHNlY3Rpb24gMTUuOS4xLjE1XG4gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBJU08gODYwMSBkYXRlIHRpbWUgc3RyaW5nIGZvcm1hdC5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0RGF5KSB7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWxseSBjb21wdXRlIHRoZSB5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsXG4gICAgICAgICAgICAgICAgICAvLyBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzIGlmIHRoZSBgZ2V0VVRDKmAgbWV0aG9kcyBhcmVcbiAgICAgICAgICAgICAgICAgIC8vIGJ1Z2d5LiBBZGFwdGVkIGZyb20gQFlhZmZsZSdzIGBkYXRlLXNoaW1gIHByb2plY3QuXG4gICAgICAgICAgICAgICAgICBkYXRlID0gZmxvb3IodmFsdWUgLyA4NjRlNSk7XG4gICAgICAgICAgICAgICAgICBmb3IgKHllYXIgPSBmbG9vcihkYXRlIC8gMzY1LjI0MjUpICsgMTk3MCAtIDE7IGdldERheSh5ZWFyICsgMSwgMCkgPD0gZGF0ZTsgeWVhcisrKTtcbiAgICAgICAgICAgICAgICAgIGZvciAobW9udGggPSBmbG9vcigoZGF0ZSAtIGdldERheSh5ZWFyLCAwKSkgLyAzMC40Mik7IGdldERheSh5ZWFyLCBtb250aCArIDEpIDw9IGRhdGU7IG1vbnRoKyspO1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IDEgKyBkYXRlIC0gZ2V0RGF5KHllYXIsIG1vbnRoKTtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBgdGltZWAgdmFsdWUgc3BlY2lmaWVzIHRoZSB0aW1lIHdpdGhpbiB0aGUgZGF5IChzZWUgRVNcbiAgICAgICAgICAgICAgICAgIC8vIDUuMSBzZWN0aW9uIDE1LjkuMS4yKS4gVGhlIGZvcm11bGEgYChBICUgQiArIEIpICUgQmAgaXMgdXNlZFxuICAgICAgICAgICAgICAgICAgLy8gdG8gY29tcHV0ZSBgQSBtb2R1bG8gQmAsIGFzIHRoZSBgJWAgb3BlcmF0b3IgZG9lcyBub3RcbiAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIGBtb2R1bG9gIG9wZXJhdGlvbiBmb3IgbmVnYXRpdmUgbnVtYmVycy5cbiAgICAgICAgICAgICAgICAgIHRpbWUgPSAodmFsdWUgJSA4NjRlNSArIDg2NGU1KSAlIDg2NGU1O1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzIGFyZSBvYnRhaW5lZCBieVxuICAgICAgICAgICAgICAgICAgLy8gZGVjb21wb3NpbmcgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkuIFNlZSBzZWN0aW9uIDE1LjkuMS4xMC5cbiAgICAgICAgICAgICAgICAgIGhvdXJzID0gZmxvb3IodGltZSAvIDM2ZTUpICUgMjQ7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gZmxvb3IodGltZSAvIDZlNCkgJSA2MDtcbiAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBmbG9vcih0aW1lIC8gMWUzKSAlIDYwO1xuICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGltZSAlIDFlMztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgeWVhciA9IHZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgICBtb250aCA9IHZhbHVlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gdmFsdWUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgaG91cnMgPSB2YWx1ZS5nZXRVVENIb3VycygpO1xuICAgICAgICAgICAgICAgICAgbWludXRlcyA9IHZhbHVlLmdldFVUQ01pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSB2YWx1ZS5nZXRVVENTZWNvbmRzKCk7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB2YWx1ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIGV4dGVuZGVkIHllYXJzIGNvcnJlY3RseS5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICh5ZWFyIDw9IDAgfHwgeWVhciA+PSAxZTQgPyAoeWVhciA8IDAgPyBcIi1cIiA6IFwiK1wiKSArIHRvUGFkZGVkU3RyaW5nKDYsIHllYXIgPCAwID8gLXllYXIgOiB5ZWFyKSA6IHRvUGFkZGVkU3RyaW5nKDQsIHllYXIpKSArXG4gICAgICAgICAgICAgICAgICBcIi1cIiArIHRvUGFkZGVkU3RyaW5nKDIsIG1vbnRoICsgMSkgKyBcIi1cIiArIHRvUGFkZGVkU3RyaW5nKDIsIGRhdGUpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1vbnRocywgZGF0ZXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBzaG91bGQgaGF2ZSB0d29cbiAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0czsgbWlsbGlzZWNvbmRzIHNob3VsZCBoYXZlIHRocmVlLlxuICAgICAgICAgICAgICAgICAgXCJUXCIgKyB0b1BhZGRlZFN0cmluZygyLCBob3VycykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIG1pbnV0ZXMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBzZWNvbmRzKSArXG4gICAgICAgICAgICAgICAgICAvLyBNaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUuMCwgYnV0IHJlcXVpcmVkIGluIDUuMS5cbiAgICAgICAgICAgICAgICAgIFwiLlwiICsgdG9QYWRkZWRTdHJpbmcoMywgbWlsbGlzZWNvbmRzKSArIFwiWlwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUudG9KU09OID09IFwiZnVuY3Rpb25cIiAmJiAoKGNsYXNzTmFtZSAhPSBudW1iZXJDbGFzcyAmJiBjbGFzc05hbWUgIT0gc3RyaW5nQ2xhc3MgJiYgY2xhc3NOYW1lICE9IGFycmF5Q2xhc3MpIHx8IGlzUHJvcGVydHkuY2FsbCh2YWx1ZSwgXCJ0b0pTT05cIikpKSB7XG4gICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBhZGRzIG5vbi1zdGFuZGFyZCBgdG9KU09OYCBtZXRob2RzIHRvIHRoZVxuICAgICAgICAgICAgICAvLyBgTnVtYmVyYCwgYFN0cmluZ2AsIGBEYXRlYCwgYW5kIGBBcnJheWAgcHJvdG90eXBlcy4gSlNPTiAzXG4gICAgICAgICAgICAgIC8vIGlnbm9yZXMgYWxsIGB0b0pTT05gIG1ldGhvZHMgb24gdGhlc2Ugb2JqZWN0cyB1bmxlc3MgdGhleSBhcmVcbiAgICAgICAgICAgICAgLy8gZGVmaW5lZCBkaXJlY3RseSBvbiBhbiBpbnN0YW5jZS5cbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04ocHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCBjYWxsIGl0IHRvIG9idGFpbiB0aGUgdmFsdWVcbiAgICAgICAgICAgIC8vIGZvciBzZXJpYWxpemF0aW9uLlxuICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjay5jYWxsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpO1xuICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gYm9vbGVhbkNsYXNzKSB7XG4gICAgICAgICAgICAvLyBCb29sZWFucyBhcmUgcmVwcmVzZW50ZWQgbGl0ZXJhbGx5LlxuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBgSW5maW5pdHlgIGFuZCBgTmFOYCBhcmUgc2VyaWFsaXplZCBhc1xuICAgICAgICAgICAgLy8gYFwibnVsbFwiYC5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+IC0xIC8gMCAmJiB2YWx1ZSA8IDEgLyAwID8gXCJcIiArIHZhbHVlIDogXCJudWxsXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFN0cmluZ3MgYXJlIGRvdWJsZS1xdW90ZWQgYW5kIGVzY2FwZWQuXG4gICAgICAgICAgICByZXR1cm4gcXVvdGUoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhpcyBpcyBhIGxpbmVhciBzZWFyY2g7IHBlcmZvcm1hbmNlXG4gICAgICAgICAgICAvLyBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgdW5pcXVlIG5lc3RlZCBvYmplY3RzLlxuICAgICAgICAgICAgZm9yIChsZW5ndGggPSBzdGFjay5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICBpZiAoc3RhY2tbbGVuZ3RoXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBDeWNsaWMgc3RydWN0dXJlcyBjYW5ub3QgYmUgc2VyaWFsaXplZCBieSBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgYW5kIGluZGVudCBvbmUgYWRkaXRpb25hbCBsZXZlbC5cbiAgICAgICAgICAgIHByZWZpeCA9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgaW5kZW50YXRpb24gKz0gd2hpdGVzcGFjZTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gYXJyYXlDbGFzcykge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgYXJyYXkgZWxlbWVudHMuXG4gICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlcmlhbGl6ZShpbmRleCwgdmFsdWUsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spO1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbGVtZW50ID09PSB1bmRlZiA/IFwibnVsbFwiIDogZWxlbWVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPyAod2hpdGVzcGFjZSA/IFwiW1xcblwiICsgaW5kZW50YXRpb24gKyByZXN1bHRzLmpvaW4oXCIsXFxuXCIgKyBpbmRlbnRhdGlvbikgKyBcIlxcblwiICsgcHJlZml4ICsgXCJdXCIgOiAoXCJbXCIgKyByZXN1bHRzLmpvaW4oXCIsXCIpICsgXCJdXCIpKSA6IFwiW11cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3QgbWVtYmVycy4gTWVtYmVycyBhcmUgc2VsZWN0ZWQgZnJvbVxuICAgICAgICAgICAgICAvLyBlaXRoZXIgYSB1c2VyLXNwZWNpZmllZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzLCBvciB0aGUgb2JqZWN0XG4gICAgICAgICAgICAgIC8vIGl0c2VsZi5cbiAgICAgICAgICAgICAgZm9yRWFjaChwcm9wZXJ0aWVzIHx8IHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHNlcmlhbGl6ZShwcm9wZXJ0eSwgdmFsdWUsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ICE9PSB1bmRlZikge1xuICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjM6IFwiSWYgYGdhcGAge3doaXRlc3BhY2V9XG4gICAgICAgICAgICAgICAgICAvLyBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IGBtZW1iZXJgIHtxdW90ZShwcm9wZXJ0eSkgKyBcIjpcIn1cbiAgICAgICAgICAgICAgICAgIC8vIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIGBtZW1iZXJgIGFuZCB0aGUgYHNwYWNlYCBjaGFyYWN0ZXIuXCJcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBcImBzcGFjZWAgY2hhcmFjdGVyXCIgcmVmZXJzIHRvIHRoZSBsaXRlcmFsIHNwYWNlXG4gICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIsIG5vdCB0aGUgYHNwYWNlYCB7d2lkdGh9IGFyZ3VtZW50IHByb3ZpZGVkIHRvXG4gICAgICAgICAgICAgICAgICAvLyBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHF1b3RlKHByb3BlcnR5KSArIFwiOlwiICsgKHdoaXRlc3BhY2UgPyBcIiBcIiA6IFwiXCIpICsgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPyAod2hpdGVzcGFjZSA/IFwie1xcblwiICsgaW5kZW50YXRpb24gKyByZXN1bHRzLmpvaW4oXCIsXFxuXCIgKyBpbmRlbnRhdGlvbikgKyBcIlxcblwiICsgcHJlZml4ICsgXCJ9XCIgOiAoXCJ7XCIgKyByZXN1bHRzLmpvaW4oXCIsXCIpICsgXCJ9XCIpKSA6IFwie31cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIHRyYXZlcnNlZCBvYmplY3Qgc3RhY2suXG4gICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFB1YmxpYzogYEpTT04uc3RyaW5naWZ5YC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMuXG4gICAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHNvdXJjZSwgZmlsdGVyLCB3aWR0aCkge1xuICAgICAgICAgIHZhciB3aGl0ZXNwYWNlLCBjYWxsYmFjaywgcHJvcGVydGllcywgY2xhc3NOYW1lO1xuICAgICAgICAgIGlmIChvYmplY3RUeXBlc1t0eXBlb2YgZmlsdGVyXSAmJiBmaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbChmaWx0ZXIpKSA9PSBmdW5jdGlvbkNsYXNzKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gZmlsdGVyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gYXJyYXlDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lcyBhcnJheSBpbnRvIGEgbWFrZXNoaWZ0IHNldC5cbiAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGZpbHRlci5sZW5ndGgsIHZhbHVlOyBpbmRleCA8IGxlbmd0aDsgdmFsdWUgPSBmaWx0ZXJbaW5kZXgrK10sICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSkpLCBjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MgfHwgY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSAmJiAocHJvcGVydGllc1t2YWx1ZV0gPSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHdpZHRoKSkgPT0gbnVtYmVyQ2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYHdpZHRoYCB0byBhbiBpbnRlZ2VyIGFuZCBjcmVhdGUgYSBzdHJpbmcgY29udGFpbmluZ1xuICAgICAgICAgICAgICAvLyBgd2lkdGhgIG51bWJlciBvZiBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICBpZiAoKHdpZHRoIC09IHdpZHRoICUgMSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh3aGl0ZXNwYWNlID0gXCJcIiwgd2lkdGggPiAxMCAmJiAod2lkdGggPSAxMCk7IHdoaXRlc3BhY2UubGVuZ3RoIDwgd2lkdGg7IHdoaXRlc3BhY2UgKz0gXCIgXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgICB3aGl0ZXNwYWNlID0gd2lkdGgubGVuZ3RoIDw9IDEwID8gd2lkdGggOiB3aWR0aC5zbGljZSgwLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiBkaXNjYXJkcyB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBlbXB0eSBzdHJpbmcga2V5c1xuICAgICAgICAgIC8vIChgXCJcImApIG9ubHkgaWYgdGhleSBhcmUgdXNlZCBkaXJlY3RseSB3aXRoaW4gYW4gb2JqZWN0IG1lbWJlciBsaXN0XG4gICAgICAgICAgLy8gKGUuZy4sIGAhKFwiXCIgaW4geyBcIlwiOiAxfSlgKS5cbiAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFwiXCIsICh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHNvdXJjZSwgdmFsdWUpLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgXCJcIiwgW10pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBQdWJsaWM6IFBhcnNlcyBhIEpTT04gc291cmNlIHN0cmluZy5cbiAgICAgIGlmICghaGFzKFwianNvbi1wYXJzZVwiKSkge1xuICAgICAgICB2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZWlyIHVuZXNjYXBlZFxuICAgICAgICAvLyBlcXVpdmFsZW50cy5cbiAgICAgICAgdmFyIFVuZXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXCIsXG4gICAgICAgICAgMzQ6ICdcIicsXG4gICAgICAgICAgNDc6IFwiL1wiLFxuICAgICAgICAgIDk4OiBcIlxcYlwiLFxuICAgICAgICAgIDExNjogXCJcXHRcIixcbiAgICAgICAgICAxMTA6IFwiXFxuXCIsXG4gICAgICAgICAgMTAyOiBcIlxcZlwiLFxuICAgICAgICAgIDExNDogXCJcXHJcIlxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBTdG9yZXMgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgdmFyIEluZGV4LCBTb3VyY2U7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFJlc2V0cyB0aGUgcGFyc2VyIHN0YXRlIGFuZCB0aHJvd3MgYSBgU3ludGF4RXJyb3JgLlxuICAgICAgICB2YXIgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgSW5kZXggPSBTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHRocm93IFN5bnRheEVycm9yKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFJldHVybnMgdGhlIG5leHQgdG9rZW4sIG9yIGBcIiRcImAgaWYgdGhlIHBhcnNlciBoYXMgcmVhY2hlZFxuICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLiBBIHRva2VuIG1heSBiZSBhIHN0cmluZywgbnVtYmVyLCBgbnVsbGBcbiAgICAgICAgLy8gbGl0ZXJhbCwgb3IgQm9vbGVhbiBsaXRlcmFsLlxuICAgICAgICB2YXIgbGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBzb3VyY2UgPSBTb3VyY2UsIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgsIHZhbHVlLCBiZWdpbiwgcG9zaXRpb24sIGlzU2lnbmVkLCBjaGFyQ29kZTtcbiAgICAgICAgICB3aGlsZSAoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHRva2VucywgaW5jbHVkaW5nIHRhYnMsIGNhcnJpYWdlIHJldHVybnMsIGxpbmVcbiAgICAgICAgICAgICAgICAvLyBmZWVkcywgYW5kIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAxMjM6IGNhc2UgMTI1OiBjYXNlIDkxOiBjYXNlIDkzOiBjYXNlIDU4OiBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGEgcHVuY3R1YXRvciB0b2tlbiAoYHtgLCBgfWAsIGBbYCwgYF1gLCBgOmAsIG9yIGAsYCkgYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNoYXJJbmRleEJ1Z2d5ID8gc291cmNlLmNoYXJBdChJbmRleCkgOiBzb3VyY2VbSW5kZXhdO1xuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgIC8vIGBcImAgZGVsaW1pdHMgYSBKU09OIHN0cmluZzsgYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kXG4gICAgICAgICAgICAgICAgLy8gYmVnaW4gcGFyc2luZyB0aGUgc3RyaW5nLiBTdHJpbmcgdG9rZW5zIGFyZSBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNlbnRpbmVsIGBAYCBjaGFyYWN0ZXIgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHB1bmN0dWF0b3JzIGFuZFxuICAgICAgICAgICAgICAgIC8vIGVuZC1vZi1zdHJpbmcgdG9rZW5zLlxuICAgICAgICAgICAgICAgIGZvciAodmFsdWUgPSBcIkBcIiwgSW5kZXgrKzsgSW5kZXggPCBsZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVuZXNjYXBlZCBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgKHRob3NlIHdpdGggYSBjb2RlIHVuaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBzcGFjZSBjaGFyYWN0ZXIpIGFyZSBub3QgcGVybWl0dGVkLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFyQ29kZSA9PSA5Mikge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIHJldmVyc2Ugc29saWR1cyAoYFxcYCkgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhbiBlc2NhcGVkXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2wgY2hhcmFjdGVyIChpbmNsdWRpbmcgYFwiYCwgYFxcYCwgYW5kIGAvYCkgb3IgVW5pY29kZVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkyOiBjYXNlIDM0OiBjYXNlIDQ3OiBjYXNlIDk4OiBjYXNlIDExNjogY2FzZSAxMTA6IGNhc2UgMTAyOiBjYXNlIDExNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldml2ZSBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IFVuZXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBgXFx1YCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIHZhbGlkYXRlIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCBjb2RlIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSArK0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwb3NpdGlvbiA9IEluZGV4ICsgNDsgSW5kZXggPCBwb3NpdGlvbjsgSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSB2YWxpZCBzZXF1ZW5jZSBjb21wcmlzZXMgZm91ciBoZXhkaWdpdHMgKGNhc2UtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2Vuc2l0aXZlKSB0aGF0IGZvcm0gYSBzaW5nbGUgaGV4YWRlY2ltYWwgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3IHx8IGNoYXJDb2RlID49IDk3ICYmIGNoYXJDb2RlIDw9IDEwMiB8fCBjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA3MCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldml2ZSB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBmcm9tQ2hhckNvZGUoXCIweFwiICsgc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gQW4gdW5lc2NhcGVkIGRvdWJsZS1xdW90ZSBjaGFyYWN0ZXIgbWFya3MgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBzdHJpbmcgaXMgdmFsaWQuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyQ29kZSA+PSAzMiAmJiBjaGFyQ29kZSAhPSA5MiAmJiBjaGFyQ29kZSAhPSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBzdHJpbmcgYXMtaXMuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDM0KSB7XG4gICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmQgcmV0dXJuIHRoZSByZXZpdmVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBudW1iZXJzIGFuZCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgcGFzdCB0aGUgbmVnYXRpdmUgc2lnbiwgaWYgb25lIGlzIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDUpIHtcbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGFuIGludGVnZXIgb3IgZmxvYXRpbmctcG9pbnQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB7XG4gICAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIHplcm9lcyBhcmUgaW50ZXJwcmV0ZWQgYXMgb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4ICsgMSkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbCBvY3RhbCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBpbnRlZ2VyIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgIGZvciAoOyBJbmRleCA8IGxlbmd0aCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpOyBJbmRleCsrKTtcbiAgICAgICAgICAgICAgICAgIC8vIEZsb2F0cyBjYW5ub3QgY29udGFpbiBhIGxlYWRpbmcgZGVjaW1hbCBwb2ludDsgaG93ZXZlciwgdGhpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgYnkgdGhlIHBhcnNlci5cbiAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSArK0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZGVjaW1hbCBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IGxlbmd0aCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQocG9zaXRpb24pKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpOyBwb3NpdGlvbisrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbCB0cmFpbGluZyBkZWNpbWFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIGV4cG9uZW50cy4gVGhlIGBlYCBkZW5vdGluZyB0aGUgZXhwb25lbnQgaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAxMDEgfHwgY2hhckNvZGUgPT0gNjkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYXN0IHRoZSBzaWduIGZvbGxvd2luZyB0aGUgZXhwb25lbnQsIGlmIG9uZSBpc1xuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0MyB8fCBjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGV4cG9uZW50aWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChwb3NpdGlvbiA9IEluZGV4OyBwb3NpdGlvbiA8IGxlbmd0aCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQocG9zaXRpb24pKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpOyBwb3NpdGlvbisrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbCBlbXB0eSBleHBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEluZGV4ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHBhcnNlZCB2YWx1ZSB0byBhIEphdmFTY3JpcHQgbnVtYmVyLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuICtzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQSBuZWdhdGl2ZSBzaWduIG1heSBvbmx5IHByZWNlZGUgbnVtYmVycy5cbiAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGB0cnVlYCwgYGZhbHNlYCwgYW5kIGBudWxsYCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDQpID09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBJbmRleCArPSA0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNSkgPT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICAgICAgICBJbmRleCArPSA1O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDQpID09IFwibnVsbFwiKSB7XG4gICAgICAgICAgICAgICAgICBJbmRleCArPSA0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFVucmVjb2duaXplZCB0b2tlbi5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXR1cm4gdGhlIHNlbnRpbmVsIGAkYCBjaGFyYWN0ZXIgaWYgdGhlIHBhcnNlciBoYXMgcmVhY2hlZCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHNvdXJjZSBzdHJpbmcuXG4gICAgICAgICAgcmV0dXJuIFwiJFwiO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBQYXJzZXMgYSBKU09OIGB2YWx1ZWAgdG9rZW4uXG4gICAgICAgIHZhciBnZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0cywgaGFzTWVtYmVycztcbiAgICAgICAgICBpZiAodmFsdWUgPT0gXCIkXCIpIHtcbiAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0LlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pID09IFwiQFwiKSB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VudGluZWwgYEBgIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGFyc2Ugb2JqZWN0IGFuZCBhcnJheSBsaXRlcmFscy5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIltcIikge1xuICAgICAgICAgICAgICAvLyBQYXJzZXMgYSBKU09OIGFycmF5LCByZXR1cm5pbmcgYSBuZXcgSmF2YVNjcmlwdCBhcnJheS5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIHNxdWFyZSBicmFja2V0IG1hcmtzIHRoZSBlbmQgb2YgdGhlIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFycmF5IGxpdGVyYWwgY29udGFpbnMgZWxlbWVudHMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdGluZyB0aGUgcHJldmlvdXMgZWxlbWVudCBmcm9tIHRoZVxuICAgICAgICAgICAgICAgIC8vIG5leHQuXG4gICAgICAgICAgICAgICAgaWYgKGhhc01lbWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRyYWlsaW5nIGAsYCBpbiBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBhcnJheSBlbGVtZW50LlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFbGlzaW9ucyBhbmQgbGVhZGluZyBjb21tYXMgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZ2V0KHZhbHVlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwie1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gb2JqZWN0LCByZXR1cm5pbmcgYSBuZXcgSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICAgICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgZm9yICg7OyBoYXNNZW1iZXJzIHx8IChoYXNNZW1iZXJzID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBjdXJseSBicmFjZSBtYXJrcyB0aGUgZW5kIG9mIHRoZSBvYmplY3QgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJ9XCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGxpdGVyYWwgY29udGFpbnMgbWVtYmVycywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0b3IuXG4gICAgICAgICAgICAgICAgaWYgKGhhc01lbWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJ9XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRyYWlsaW5nIGAsYCBpbiBvYmplY3QgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggb2JqZWN0IG1lbWJlci5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTGVhZGluZyBjb21tYXMgYXJlIG5vdCBwZXJtaXR0ZWQsIG9iamVjdCBwcm9wZXJ0eSBuYW1lcyBtdXN0IGJlXG4gICAgICAgICAgICAgICAgLy8gZG91YmxlLXF1b3RlZCBzdHJpbmdzLCBhbmQgYSBgOmAgbXVzdCBzZXBhcmF0ZSBlYWNoIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgLy8gbmFtZSBhbmQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiIHx8IHR5cGVvZiB2YWx1ZSAhPSBcInN0cmluZ1wiIHx8IChjaGFySW5kZXhCdWdneSA/IHZhbHVlLmNoYXJBdCgwKSA6IHZhbHVlWzBdKSAhPSBcIkBcIiB8fCBsZXgoKSAhPSBcIjpcIikge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0c1t2YWx1ZS5zbGljZSgxKV0gPSBnZXQobGV4KCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0b2tlbiBlbmNvdW50ZXJlZC5cbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogVXBkYXRlcyBhIHRyYXZlcnNlZCBvYmplY3QgbWVtYmVyLlxuICAgICAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24gKHNvdXJjZSwgcHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSB3YWxrKHNvdXJjZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gdW5kZWYpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2VbcHJvcGVydHldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3VyY2VbcHJvcGVydHldID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFJlY3Vyc2l2ZWx5IHRyYXZlcnNlcyBhIHBhcnNlZCBKU09OIG9iamVjdCwgaW52b2tpbmcgdGhlXG4gICAgICAgIC8vIGBjYWxsYmFja2AgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGBXYWxrKGhvbGRlciwgbmFtZSlgIG9wZXJhdGlvbiBkZWZpbmVkIGluIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIHZhciB3YWxrID0gZnVuY3Rpb24gKHNvdXJjZSwgcHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW3Byb3BlcnR5XSwgbGVuZ3RoO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgLy8gYGZvckVhY2hgIGNhbid0IGJlIHVzZWQgdG8gdHJhdmVyc2UgYW4gYXJyYXkgaW4gT3BlcmEgPD0gOC41NFxuICAgICAgICAgICAgLy8gYmVjYXVzZSBpdHMgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW1wbGVtZW50YXRpb24gcmV0dXJucyBgZmFsc2VgXG4gICAgICAgICAgICAvLyBmb3IgYXJyYXkgaW5kaWNlcyAoZS5nLiwgYCFbMSwgMiwgM10uaGFzT3duUHJvcGVydHkoXCIwXCIpYCkuXG4gICAgICAgICAgICBpZiAoZ2V0Q2xhc3MuY2FsbCh2YWx1ZSkgPT0gYXJyYXlDbGFzcykge1xuICAgICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlKHZhbHVlLCBsZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlKHZhbHVlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc291cmNlLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFB1YmxpYzogYEpTT04ucGFyc2VgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCwgdmFsdWU7XG4gICAgICAgICAgSW5kZXggPSAwO1xuICAgICAgICAgIFNvdXJjZSA9IFwiXCIgKyBzb3VyY2U7XG4gICAgICAgICAgcmVzdWx0ID0gZ2V0KGxleCgpKTtcbiAgICAgICAgICAvLyBJZiBhIEpTT04gc3RyaW5nIGNvbnRhaW5zIG11bHRpcGxlIHRva2VucywgaXQgaXMgaW52YWxpZC5cbiAgICAgICAgICBpZiAobGV4KCkgIT0gXCIkXCIpIHtcbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlc2V0IHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgICAgSW5kZXggPSBTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBnZXRDbGFzcy5jYWxsKGNhbGxiYWNrKSA9PSBmdW5jdGlvbkNsYXNzID8gd2FsaygodmFsdWUgPSB7fSwgdmFsdWVbXCJcIl0gPSByZXN1bHQsIHZhbHVlKSwgXCJcIiwgY2FsbGJhY2spIDogcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydHNbXCJydW5JbkNvbnRleHRcIl0gPSBydW5JbkNvbnRleHQ7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH1cblxuICBpZiAoZnJlZUV4cG9ydHMgJiYgIWlzTG9hZGVyKSB7XG4gICAgLy8gRXhwb3J0IGZvciBDb21tb25KUyBlbnZpcm9ubWVudHMuXG4gICAgcnVuSW5Db250ZXh0KHJvb3QsIGZyZWVFeHBvcnRzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBFeHBvcnQgZm9yIHdlYiBicm93c2VycyBhbmQgSmF2YVNjcmlwdCBlbmdpbmVzLlxuICAgIHZhciBuYXRpdmVKU09OID0gcm9vdC5KU09OLFxuICAgICAgICBwcmV2aW91c0pTT04gPSByb290W1wiSlNPTjNcIl0sXG4gICAgICAgIGlzUmVzdG9yZWQgPSBmYWxzZTtcblxuICAgIHZhciBKU09OMyA9IHJ1bkluQ29udGV4dChyb290LCAocm9vdFtcIkpTT04zXCJdID0ge1xuICAgICAgLy8gUHVibGljOiBSZXN0b3JlcyB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGdsb2JhbCBgSlNPTmAgb2JqZWN0IGFuZFxuICAgICAgLy8gcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYEpTT04zYCBvYmplY3QuXG4gICAgICBcIm5vQ29uZmxpY3RcIjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUmVzdG9yZWQpIHtcbiAgICAgICAgICBpc1Jlc3RvcmVkID0gdHJ1ZTtcbiAgICAgICAgICByb290LkpTT04gPSBuYXRpdmVKU09OO1xuICAgICAgICAgIHJvb3RbXCJKU09OM1wiXSA9IHByZXZpb3VzSlNPTjtcbiAgICAgICAgICBuYXRpdmVKU09OID0gcHJldmlvdXNKU09OID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTjM7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgcm9vdC5KU09OID0ge1xuICAgICAgXCJwYXJzZVwiOiBKU09OMy5wYXJzZSxcbiAgICAgIFwic3RyaW5naWZ5XCI6IEpTT04zLnN0cmluZ2lmeVxuICAgIH07XG4gIH1cblxuICAvLyBFeHBvcnQgZm9yIGFzeW5jaHJvbm91cyBtb2R1bGUgbG9hZGVycy5cbiAgaWYgKGlzTG9hZGVyKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBKU09OMztcbiAgICB9KTtcbiAgfVxufSkuY2FsbCh0aGlzKTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDU5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogRGVjb2RlIGEgVVJJIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgVVJJIGVuY29kZWQgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/Jl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICB3aGlsZSAocGFydCA9IHBhcnNlci5leGVjKHF1ZXJ5KSkge1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydFsxXSlcbiAgICAgICwgdmFsdWUgPSBkZWNvZGUocGFydFsyXSk7XG5cbiAgICAvL1xuICAgIC8vIFByZXZlbnQgb3ZlcnJpZGluZyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBUaGlzIGVuc3VyZXMgdGhhdCBidWlsZC1pblxuICAgIC8vIG1ldGhvZHMgbGlrZSBgdG9TdHJpbmdgIG9yIF9fcHJvdG9fXyBhcmUgbm90IG92ZXJyaWRlbiBieSBtYWxpY2lvdXNcbiAgICAvLyBxdWVyeXN0cmluZ3MuXG4gICAgLy9cbiAgICBpZiAoa2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgcGFpcnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArJz0nKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuXG59LHt9XSw2MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcblxufSx7fV0sNjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBwcm90b2NvbHJlID0gL14oW2Etel1bYS16MC05ListXSo6KT8oXFwvXFwvKT8oW1xcU1xcc10qKS9pXG4gICwgc2xhc2hlcyA9IC9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XFwvXFwvLztcblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgZnVuY3Rpb24gc2FuaXRpemUoYWRkcmVzcykgeyAgICAgICAgICAvLyBTYW5pdGl6ZSB3aGF0IGlzIGxlZnQgb2YgdGhlIGFkZHJlc3NcbiAgICByZXR1cm4gYWRkcmVzcy5yZXBsYWNlKCdcXFxcJywgJy8nKTtcbiAgfSxcbiAgWycvJywgJ3BhdGhuYW1lJ10sICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnQCcsICdhdXRoJywgMV0sICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBmcm9udC5cbiAgW05hTiwgJ2hvc3QnLCB1bmRlZmluZWQsIDEsIDFdLCAgICAgICAvLyBTZXQgbGVmdCBvdmVyIHZhbHVlLlxuICBbLzooXFxkKykkLywgJ3BvcnQnLCB1bmRlZmluZWQsIDFdLCAgICAvLyBSZWdFeHAgdGhlIGJhY2suXG4gIFtOYU4sICdob3N0bmFtZScsIHVuZGVmaW5lZCwgMSwgMV0gICAgLy8gU2V0IGxlZnQgb3Zlci5cbl07XG5cbi8qKlxuICogVGhlc2UgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIGNvcGllZCBvciBpbmhlcml0ZWQgZnJvbS4gVGhpcyBpcyBvbmx5IG5lZWRlZFxuICogZm9yIGFsbCBub24gYmxvYiBVUkwncyBhcyBhIGJsb2IgVVJMIGRvZXMgbm90IGluY2x1ZGUgYSBoYXNoLCBvbmx5IHRoZVxuICogb3JpZ2luLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgaWdub3JlID0geyBoYXNoOiAxLCBxdWVyeTogMSB9O1xuXG4vKipcbiAqIFRoZSBsb2NhdGlvbiBvYmplY3QgZGlmZmVycyB3aGVuIHlvdXIgY29kZSBpcyBsb2FkZWQgdGhyb3VnaCBhIG5vcm1hbCBwYWdlLFxuICogV29ya2VyIG9yIHRocm91Z2ggYSB3b3JrZXIgdXNpbmcgYSBibG9iLiBBbmQgd2l0aCB0aGUgYmxvYmJsZSBiZWdpbnMgdGhlXG4gKiB0cm91YmxlIGFzIHRoZSBsb2NhdGlvbiBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBVUkwgb2YgdGhlIGJsb2IsIG5vdCB0aGVcbiAqIGxvY2F0aW9uIG9mIHRoZSBwYWdlIHdoZXJlIG91ciBjb2RlIGlzIGxvYWRlZCBpbi4gVGhlIGFjdHVhbCBvcmlnaW4gaXNcbiAqIGVuY29kZWQgaW4gdGhlIGBwYXRobmFtZWAgc28gd2UgY2FuIHRoYW5rZnVsbHkgZ2VuZXJhdGUgYSBnb29kIFwiZGVmYXVsdFwiXG4gKiBsb2NhdGlvbiBmcm9tIGl0IHNvIHdlIGNhbiBnZW5lcmF0ZSBwcm9wZXIgcmVsYXRpdmUgVVJMJ3MgYWdhaW4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBsb2MgT3B0aW9uYWwgZGVmYXVsdCBsb2NhdGlvbiBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBsb2xjYXRpb24gb2JqZWN0LlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBsb2xjYXRpb24obG9jKSB7XG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbCAmJiBnbG9iYWwubG9jYXRpb24gfHwge307XG4gIGxvYyA9IGxvYyB8fCBsb2NhdGlvbjtcblxuICB2YXIgZmluYWxkZXN0aW5hdGlvbiA9IHt9XG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY1xuICAgICwga2V5O1xuXG4gIGlmICgnYmxvYjonID09PSBsb2MucHJvdG9jb2wpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybCh1bmVzY2FwZShsb2MucGF0aG5hbWUpLCB7fSk7XG4gIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGUpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybChsb2MsIHt9KTtcbiAgICBmb3IgKGtleSBpbiBpZ25vcmUpIGRlbGV0ZSBmaW5hbGRlc3RpbmF0aW9uW2tleV07XG4gIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGUpIHtcbiAgICBmb3IgKGtleSBpbiBsb2MpIHtcbiAgICAgIGlmIChrZXkgaW4gaWdub3JlKSBjb250aW51ZTtcbiAgICAgIGZpbmFsZGVzdGluYXRpb25ba2V5XSA9IGxvY1trZXldO1xuICAgIH1cblxuICAgIGlmIChmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID0gc2xhc2hlcy50ZXN0KGxvYy5ocmVmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmluYWxkZXN0aW5hdGlvbjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm90b2NvbEV4dHJhY3RcbiAqIEB0eXBlIE9iamVjdFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIG1hdGNoZWQgaW4gdGhlIFVSTCwgaW4gbG93ZXJjYXNlLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzbGFzaGVzIGB0cnVlYCBpZiBwcm90b2NvbCBpcyBmb2xsb3dlZCBieSBcIi8vXCIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZXN0IFJlc3Qgb2YgdGhlIFVSTCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC5cbiAqL1xuXG4vKipcbiAqIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gZnJvbSBhIFVSTCB3aXRoL3dpdGhvdXQgZG91YmxlIHNsYXNoIChcIi8vXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIGV4dHJhY3QgZnJvbS5cbiAqIEByZXR1cm4ge1Byb3RvY29sRXh0cmFjdH0gRXh0cmFjdGVkIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MpIHtcbiAgdmFyIG1hdGNoID0gcHJvdG9jb2xyZS5leGVjKGFkZHJlc3MpO1xuXG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IG1hdGNoWzFdID8gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSA6ICcnLFxuICAgIHNsYXNoZXM6ICEhbWF0Y2hbMl0sXG4gICAgcmVzdDogbWF0Y2hbM11cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcmVsYXRpdmUgVVJMIHBhdGhuYW1lIGFnYWluc3QgYSBiYXNlIFVSTCBwYXRobmFtZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVsYXRpdmUgUGF0aG5hbWUgb2YgdGhlIHJlbGF0aXZlIFVSTC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlIFBhdGhuYW1lIG9mIHRoZSBiYXNlIFVSTC5cbiAqIEByZXR1cm4ge1N0cmluZ30gUmVzb2x2ZWQgcGF0aG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogSXQgaXMgd29ydGggbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG5vdCB1c2UgYFVSTGAgYXMgY2xhc3MgbmFtZSB0byBwcmV2ZW50XG4gKiBjbGFzaGVzIHdpdGggdGhlIGdsb2JhbCBVUkwgaW5zdGFuY2UgdGhhdCBnb3QgaW50cm9kdWNlZCBpbiBicm93c2Vycy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIHBhcnNlLlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBsb2NhdGlvbiBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHBhcnNlciBQYXJzZXIgZm9yIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJyk7XG4gIHJlbGF0aXZlID0gIWV4dHJhY3RlZC5wcm90b2NvbCAmJiAhZXh0cmFjdGVkLnNsYXNoZXM7XG4gIHVybC5zbGFzaGVzID0gZXh0cmFjdGVkLnNsYXNoZXMgfHwgcmVsYXRpdmUgJiYgbG9jYXRpb24uc2xhc2hlcztcbiAgdXJsLnByb3RvY29sID0gZXh0cmFjdGVkLnByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sIHx8ICcnO1xuICBhZGRyZXNzID0gZXh0cmFjdGVkLnJlc3Q7XG5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBhYnNlbnQgdGhlIFVSTCBzdGFydHMgd2l0aCBhIHBhdGhcbiAgLy8gY29tcG9uZW50LlxuICAvL1xuICBpZiAoIWV4dHJhY3RlZC5zbGFzaGVzKSBpbnN0cnVjdGlvbnNbM10gPSBbLyguKikvLCAncGF0aG5hbWUnXTtcblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGlmICh+KGluZGV4ID0gYWRkcmVzcy5pbmRleE9mKHBhcnNlKSkpIHtcbiAgICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgaW5zdHJ1Y3Rpb25bMl0pIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKGluZGV4ICsgaW5zdHJ1Y3Rpb25bMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZShpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaW5kZXggPSBwYXJzZS5leGVjKGFkZHJlc3MpKSkge1xuICAgICAgdXJsW2tleV0gPSBpbmRleFsxXTtcbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4LmluZGV4KTtcbiAgICB9XG5cbiAgICB1cmxba2V5XSA9IHVybFtrZXldIHx8IChcbiAgICAgIHJlbGF0aXZlICYmIGluc3RydWN0aW9uWzNdID8gbG9jYXRpb25ba2V5XSB8fCAnJyA6ICcnXG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gSG9zdG5hbWUsIGhvc3QgYW5kIHByb3RvY29sIHNob3VsZCBiZSBsb3dlcmNhc2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG9cbiAgICAvLyBjcmVhdGUgYSBwcm9wZXIgYG9yaWdpbmAuXG4gICAgLy9cbiAgICBpZiAoaW5zdHJ1Y3Rpb25bNF0pIHVybFtrZXldID0gdXJsW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIEFsc28gcGFyc2UgdGhlIHN1cHBsaWVkIHF1ZXJ5IHN0cmluZyBpbiB0byBhbiBvYmplY3QuIElmIHdlJ3JlIHN1cHBsaWVkXG4gIC8vIHdpdGggYSBjdXN0b20gcGFyc2VyIGFzIGZ1bmN0aW9uIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnVpbGQtaW5cbiAgLy8gcGFyc2VyLlxuICAvL1xuICBpZiAocGFyc2VyKSB1cmwucXVlcnkgPSBwYXJzZXIodXJsLnF1ZXJ5KTtcblxuICAvL1xuICAvLyBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCByZXNvbHZlIHRoZSBwYXRobmFtZSBhZ2FpbnN0IHRoZSBiYXNlIFVSTC5cbiAgLy9cbiAgaWYgKFxuICAgICAgcmVsYXRpdmVcbiAgICAmJiBsb2NhdGlvbi5zbGFzaGVzXG4gICAgJiYgdXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgJiYgKHVybC5wYXRobmFtZSAhPT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgIT09ICcnKVxuICApIHtcbiAgICB1cmwucGF0aG5hbWUgPSByZXNvbHZlKHVybC5wYXRobmFtZSwgbG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIGluc3RydWN0aW9uID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB1cmwudXNlcm5hbWUgPSBpbnN0cnVjdGlvblswXSB8fCAnJztcbiAgICB1cmwucGFzc3dvcmQgPSBpbnN0cnVjdGlvblsxXSB8fCAnJztcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICgvOlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2w7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLmNoYXJBdChwcm90b2NvbC5sZW5ndGggLSAxKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgdmFyIHJlc3VsdCA9IHByb3RvY29sICsgKHVybC5zbGFzaGVzID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIHJlc3VsdCArPSB1cmwuaG9zdCArIHVybC5wYXRobmFtZTtcblxuICBxdWVyeSA9ICdvYmplY3QnID09PSB0eXBlb2YgdXJsLnF1ZXJ5ID8gc3RyaW5naWZ5KHVybC5xdWVyeSkgOiB1cmwucXVlcnk7XG4gIGlmIChxdWVyeSkgcmVzdWx0ICs9ICc/JyAhPT0gcXVlcnkuY2hhckF0KDApID8gJz8nKyBxdWVyeSA6IHF1ZXJ5O1xuXG4gIGlmICh1cmwuaGFzaCkgcmVzdWx0ICs9IHVybC5oYXNoO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblVybC5wcm90b3R5cGUgPSB7IHNldDogc2V0LCB0b1N0cmluZzogdG9TdHJpbmcgfTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgVVJMIHBhcnNlciBhbmQgc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yXG4vLyBvdGhlcnMgb3IgdGVzdGluZy5cbi8vXG5VcmwuZXh0cmFjdFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sO1xuVXJsLmxvY2F0aW9uID0gbG9sY2F0aW9uO1xuVXJsLnFzID0gcXM7XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsO1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCJxdWVyeXN0cmluZ2lmeVwiOjU5LFwicmVxdWlyZXMtcG9ydFwiOjYwfV19LHt9LFsxXSkoMSlcbn0pO1xuXG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvY2tqcy5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/sockjs-client/dist/sockjs.js\n");
 
/***/ }),
 
/***/ "./node_modules/strip-ansi/index.js":
/*!******************************************!*\
  !*** ./node_modules/strip-ansi/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\nvar ansiRegex = __webpack_require__(/*! ansi-regex */ \"./node_modules/ansi-regex/index.js\")();\n\nmodule.exports = function (str) {\n\treturn typeof str === 'string' ? str.replace(ansiRegex, '') : str;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcz83NjcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsc0RBQVk7O0FBRXBDO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoYW5zaVJlZ2V4LCAnJykgOiBzdHI7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/strip-ansi/index.js\n");
 
/***/ }),
 
/***/ "./node_modules/url/url.js":
/*!*********************************!*\
  !*** ./node_modules/url/url.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar punycode = __webpack_require__(/*! punycode */ \"./node_modules/node-libs-browser/node_modules/punycode/punycode.js\");\nvar util = __webpack_require__(/*! ./util */ \"./node_modules/url/util.js\");\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = __webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\");\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXJsL3VybC5qcz8wYjE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLG9GQUFVO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQywwQ0FBUTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixLQUFLOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLDJDQUEyQyxLQUFLO0FBQ2hELDBDQUEwQyxLQUFLO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxrQkFBa0IsbUJBQU8sQ0FBQyw0REFBYTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiw0QkFBNEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsT0FBTztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxPQUFPO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFFBQVE7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3VybC91cmwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYSBzaW1wbGUgcGF0aCBVUkxcbiAgICBzaW1wbGVQYXRoUGF0dGVybiA9IC9eKFxcL1xcLz8oPyFcXC8pW15cXD9cXHNdKikoXFw/W15cXHNdKik/JC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bK2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIHV0aWwuaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCF1dGlsLmlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgLy8gQ29weSBjaHJvbWUsIElFLCBvcGVyYSBiYWNrc2xhc2gtaGFuZGxpbmcgYmVoYXZpb3IuXG4gIC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuICB2YXIgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/JyksXG4gICAgICBzcGxpdHRlciA9XG4gICAgICAgICAgKHF1ZXJ5SW5kZXggIT09IC0xICYmIHF1ZXJ5SW5kZXggPCB1cmwuaW5kZXhPZignIycpKSA/ICc/JyA6ICcjJyxcbiAgICAgIHVTcGxpdCA9IHVybC5zcGxpdChzcGxpdHRlciksXG4gICAgICBzbGFzaFJlZ2V4ID0gL1xcXFwvZztcbiAgdVNwbGl0WzBdID0gdVNwbGl0WzBdLnJlcGxhY2Uoc2xhc2hSZWdleCwgJy8nKTtcbiAgdXJsID0gdVNwbGl0LmpvaW4oc3BsaXR0ZXIpO1xuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIGlmICghc2xhc2hlc0Rlbm90ZUhvc3QgJiYgdXJsLnNwbGl0KCcjJykubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gVHJ5IGZhc3QgcGF0aCByZWdleHBcbiAgICB2YXIgc2ltcGxlUGF0aCA9IHNpbXBsZVBhdGhQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gICAgaWYgKHNpbXBsZVBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHJlc3Q7XG4gICAgICB0aGlzLmhyZWYgPSByZXN0O1xuICAgICAgdGhpcy5wYXRobmFtZSA9IHNpbXBsZVBhdGhbMV07XG4gICAgICBpZiAoc2ltcGxlUGF0aFsyXSkge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHNpbXBsZVBhdGhbMl07XG4gICAgICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55Y29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIEFTQ0lJLW9ubHkuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICBpZiAocmVzdC5pbmRleE9mKGFlKSA9PT0gLTEpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmICh1dGlsLmlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIHV0aWwuaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIHZhciB0a2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICBmb3IgKHZhciB0ayA9IDA7IHRrIDwgdGtleXMubGVuZ3RoOyB0aysrKSB7XG4gICAgdmFyIHRrZXkgPSB0a2V5c1t0a107XG4gICAgcmVzdWx0W3RrZXldID0gdGhpc1t0a2V5XTtcbiAgfVxuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgdmFyIHJrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgIGZvciAodmFyIHJrID0gMDsgcmsgPCBya2V5cy5sZW5ndGg7IHJrKyspIHtcbiAgICAgIHZhciBya2V5ID0gcmtleXNbcmtdO1xuICAgICAgaWYgKHJrZXkgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtya2V5XSA9IHJlbGF0aXZlW3JrZXldO1xuICAgIH1cblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgICAgICB2YXIgayA9IGtleXNbdl07XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghdXRpbC5pc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgfHwgc3JjUGF0aC5sZW5ndGggPiAxKSAmJlxuICAgICAgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fCBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/url/url.js\n");
 
/***/ }),
 
/***/ "./node_modules/url/util.js":
/*!**********************************!*\
  !*** ./node_modules/url/util.js ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXJsL3V0aWwuanM/MzVlOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3VybC91dGlsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNTdHJpbmc6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ3N0cmluZyc7XG4gIH0sXG4gIGlzT2JqZWN0OiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09PSBudWxsO1xuICB9LFxuICBpc051bGxPclVuZGVmaW5lZDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PSBudWxsO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/url/util.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/clients/BaseClient.js":
/*!*********************************************************!*\
  !*** (webpack)-dev-server/client/clients/BaseClient.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n/* eslint-disable\n  no-unused-vars\n*/\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function BaseClient() {\n    _classCallCheck(this, BaseClient);\n  }\n\n  _createClass(BaseClient, null, [{\n    key: \"getClientPath\",\n    value: function getClientPath(options) {\n      throw new Error('Client needs implementation');\n    }\n  }]);\n\n  return BaseClient;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L2NsaWVudHMvQmFzZUNsaWVudC5qcz83ZDlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFOztBQUUzVCw2REFBNkQsc0VBQXNFLDhEQUE4RCxvQkFBb0I7O0FBRXJOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9jbGllbnRzL0Jhc2VDbGllbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZVxuICBuby11bnVzZWQtdmFyc1xuKi9cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJhc2VDbGllbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VDbGllbnQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEJhc2VDbGllbnQsIG51bGwsIFt7XG4gICAga2V5OiBcImdldENsaWVudFBhdGhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2xpZW50UGF0aChvcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBuZWVkcyBpbXBsZW1lbnRhdGlvbicpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBCYXNlQ2xpZW50O1xufSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/clients/BaseClient.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/clients/SockJSClient.js":
/*!***********************************************************!*\
  !*** (webpack)-dev-server/client/clients/SockJSClient.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n/* eslint-disable\n  no-unused-vars\n*/\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar SockJS = __webpack_require__(/*! sockjs-client/dist/sockjs */ \"./node_modules/sockjs-client/dist/sockjs.js\");\n\nvar BaseClient = __webpack_require__(/*! ./BaseClient */ \"./node_modules/webpack-dev-server/client/clients/BaseClient.js\");\n\nmodule.exports =\n/*#__PURE__*/\nfunction (_BaseClient) {\n  _inherits(SockJSClient, _BaseClient);\n\n  function SockJSClient(url) {\n    var _this;\n\n    _classCallCheck(this, SockJSClient);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(SockJSClient).call(this));\n    _this.sock = new SockJS(url);\n\n    _this.sock.onerror = function (err) {// TODO: use logger to log the error event once client and client-src\n      // are reorganized to have the same directory structure\n    };\n\n    return _this;\n  }\n\n  _createClass(SockJSClient, [{\n    key: \"onOpen\",\n    value: function onOpen(f) {\n      this.sock.onopen = f;\n    }\n  }, {\n    key: \"onClose\",\n    value: function onClose(f) {\n      this.sock.onclose = f;\n    } // call f with the message string as the first argument\n\n  }, {\n    key: \"onMessage\",\n    value: function onMessage(f) {\n      this.sock.onmessage = function (e) {\n        f(e.data);\n      };\n    }\n  }], [{\n    key: \"getClientPath\",\n    value: function getClientPath(options) {\n      return /*require.resolve*/(/*! ./SockJSClient */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\");\n    }\n  }]);\n\n  return SockJSClient;\n}(BaseClient);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L2NsaWVudHMvU29ja0pTQ2xpZW50LmpzPzBhMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDJFQUEyRSxrQ0FBa0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLGtDQUFrQyw4SEFBOEgsR0FBRyxFQUFFLHFCQUFxQjs7QUFFN1YsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUU7O0FBRTNULDZEQUE2RCxzRUFBc0UsOERBQThELG9CQUFvQjs7QUFFck4saURBQWlELDBFQUEwRSxhQUFhLEVBQUUscUNBQXFDOztBQUUvSyx1Q0FBdUMsdUJBQXVCLHVGQUF1RixFQUFFLGFBQWE7O0FBRXBLLDZCQUE2QixnR0FBZ0csZ0RBQWdELEdBQUcsMkJBQTJCOztBQUUzTSwwQ0FBMEMsK0RBQStELDJFQUEyRSxFQUFFLHlFQUF5RSxlQUFlLHNEQUFzRCxFQUFFLEVBQUUsdURBQXVEOztBQUUvWCxnQ0FBZ0MsNEVBQTRFLGlCQUFpQixVQUFVLEdBQUcsOEJBQThCOztBQUV4SyxhQUFhLG1CQUFPLENBQUMsOEVBQTJCOztBQUVoRCxpQkFBaUIsbUJBQU8sQ0FBQyxvRkFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGFBQWEsbUJBQWUsQ0FBQyx3RkFBZ0I7QUFDN0M7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L2NsaWVudHMvU29ja0pTQ2xpZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGVcbiAgbm8tdW51c2VkLXZhcnNcbiovXG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG52YXIgU29ja0pTID0gcmVxdWlyZSgnc29ja2pzLWNsaWVudC9kaXN0L3NvY2tqcycpO1xuXG52YXIgQmFzZUNsaWVudCA9IHJlcXVpcmUoJy4vQmFzZUNsaWVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0Jhc2VDbGllbnQpIHtcbiAgX2luaGVyaXRzKFNvY2tKU0NsaWVudCwgX0Jhc2VDbGllbnQpO1xuXG4gIGZ1bmN0aW9uIFNvY2tKU0NsaWVudCh1cmwpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU29ja0pTQ2xpZW50KTtcblxuICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFNvY2tKU0NsaWVudCkuY2FsbCh0aGlzKSk7XG4gICAgX3RoaXMuc29jayA9IG5ldyBTb2NrSlModXJsKTtcblxuICAgIF90aGlzLnNvY2sub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHsvLyBUT0RPOiB1c2UgbG9nZ2VyIHRvIGxvZyB0aGUgZXJyb3IgZXZlbnQgb25jZSBjbGllbnQgYW5kIGNsaWVudC1zcmNcbiAgICAgIC8vIGFyZSByZW9yZ2FuaXplZCB0byBoYXZlIHRoZSBzYW1lIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNvY2tKU0NsaWVudCwgW3tcbiAgICBrZXk6IFwib25PcGVuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uT3BlbihmKSB7XG4gICAgICB0aGlzLnNvY2sub25vcGVuID0gZjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DbG9zZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNsb3NlKGYpIHtcbiAgICAgIHRoaXMuc29jay5vbmNsb3NlID0gZjtcbiAgICB9IC8vIGNhbGwgZiB3aXRoIHRoZSBtZXNzYWdlIHN0cmluZyBhcyB0aGUgZmlyc3QgYXJndW1lbnRcblxuICB9LCB7XG4gICAga2V5OiBcIm9uTWVzc2FnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lc3NhZ2UoZikge1xuICAgICAgdGhpcy5zb2NrLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGYoZS5kYXRhKTtcbiAgICAgIH07XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0Q2xpZW50UGF0aFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDbGllbnRQYXRoKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoJy4vU29ja0pTQ2xpZW50Jyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNvY2tKU0NsaWVudDtcbn0oQmFzZUNsaWVudCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/clients/SockJSClient.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/index.js?http://localhost:8080":
/*!*********************************************************!*\
  !*** (webpack)-dev-server/client?http://localhost:8080 ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__resourceQuery) {\n/* global __resourceQuery WorkerGlobalScope self */\n\n/* eslint prefer-destructuring: off */\n\nvar stripAnsi = __webpack_require__(/*! strip-ansi */ \"./node_modules/strip-ansi/index.js\");\n\nvar socket = __webpack_require__(/*! ./socket */ \"./node_modules/webpack-dev-server/client/socket.js\");\n\nvar overlay = __webpack_require__(/*! ./overlay */ \"./node_modules/webpack-dev-server/client/overlay.js\");\n\nvar _require = __webpack_require__(/*! ./utils/log */ \"./node_modules/webpack-dev-server/client/utils/log.js\"),\n    log = _require.log,\n    setLogLevel = _require.setLogLevel;\n\nvar sendMessage = __webpack_require__(/*! ./utils/sendMessage */ \"./node_modules/webpack-dev-server/client/utils/sendMessage.js\");\n\nvar reloadApp = __webpack_require__(/*! ./utils/reloadApp */ \"./node_modules/webpack-dev-server/client/utils/reloadApp.js\");\n\nvar createSocketUrl = __webpack_require__(/*! ./utils/createSocketUrl */ \"./node_modules/webpack-dev-server/client/utils/createSocketUrl.js\");\n\nvar status = {\n  isUnloading: false,\n  currentHash: ''\n};\nvar options = {\n  hot: false,\n  hotReload: true,\n  liveReload: false,\n  initial: true,\n  useWarningOverlay: false,\n  useErrorOverlay: false,\n  useProgress: false\n};\nvar socketUrl = createSocketUrl(__resourceQuery);\nself.addEventListener('beforeunload', function () {\n  status.isUnloading = true;\n});\n\nif (typeof window !== 'undefined') {\n  var qs = window.location.search.toLowerCase();\n  options.hotReload = qs.indexOf('hotreload=false') === -1;\n}\n\nvar onSocketMessage = {\n  hot: function hot() {\n    options.hot = true;\n    log.info('[WDS] Hot Module Replacement enabled.');\n  },\n  liveReload: function liveReload() {\n    options.liveReload = true;\n    log.info('[WDS] Live Reloading enabled.');\n  },\n  invalid: function invalid() {\n    log.info('[WDS] App updated. Recompiling...'); // fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n    if (options.useWarningOverlay || options.useErrorOverlay) {\n      overlay.clear();\n    }\n\n    sendMessage('Invalid');\n  },\n  hash: function hash(_hash) {\n    status.currentHash = _hash;\n  },\n  'still-ok': function stillOk() {\n    log.info('[WDS] Nothing changed.');\n\n    if (options.useWarningOverlay || options.useErrorOverlay) {\n      overlay.clear();\n    }\n\n    sendMessage('StillOk');\n  },\n  'log-level': function logLevel(level) {\n    var hotCtx = __webpack_require__(\"./node_modules/webpack/hot sync ^\\\\.\\\\/log$\");\n\n    if (hotCtx.keys().indexOf('./log') !== -1) {\n      hotCtx('./log').setLogLevel(level);\n    }\n\n    setLogLevel(level);\n  },\n  overlay: function overlay(value) {\n    if (typeof document !== 'undefined') {\n      if (typeof value === 'boolean') {\n        options.useWarningOverlay = false;\n        options.useErrorOverlay = value;\n      } else if (value) {\n        options.useWarningOverlay = value.warnings;\n        options.useErrorOverlay = value.errors;\n      }\n    }\n  },\n  progress: function progress(_progress) {\n    if (typeof document !== 'undefined') {\n      options.useProgress = _progress;\n    }\n  },\n  'progress-update': function progressUpdate(data) {\n    if (options.useProgress) {\n      log.info(\"[WDS] \".concat(data.percent, \"% - \").concat(data.msg, \".\"));\n    }\n\n    sendMessage('Progress', data);\n  },\n  ok: function ok() {\n    sendMessage('Ok');\n\n    if (options.useWarningOverlay || options.useErrorOverlay) {\n      overlay.clear();\n    }\n\n    if (options.initial) {\n      return options.initial = false;\n    } // eslint-disable-line no-return-assign\n\n\n    reloadApp(options, status);\n  },\n  'content-changed': function contentChanged() {\n    log.info('[WDS] Content base changed. Reloading...');\n    self.location.reload();\n  },\n  warnings: function warnings(_warnings) {\n    log.warn('[WDS] Warnings while compiling.');\n\n    var strippedWarnings = _warnings.map(function (warning) {\n      return stripAnsi(warning);\n    });\n\n    sendMessage('Warnings', strippedWarnings);\n\n    for (var i = 0; i < strippedWarnings.length; i++) {\n      log.warn(strippedWarnings[i]);\n    }\n\n    if (options.useWarningOverlay) {\n      overlay.showMessage(_warnings);\n    }\n\n    if (options.initial) {\n      return options.initial = false;\n    } // eslint-disable-line no-return-assign\n\n\n    reloadApp(options, status);\n  },\n  errors: function errors(_errors) {\n    log.error('[WDS] Errors while compiling. Reload prevented.');\n\n    var strippedErrors = _errors.map(function (error) {\n      return stripAnsi(error);\n    });\n\n    sendMessage('Errors', strippedErrors);\n\n    for (var i = 0; i < strippedErrors.length; i++) {\n      log.error(strippedErrors[i]);\n    }\n\n    if (options.useErrorOverlay) {\n      overlay.showMessage(_errors);\n    }\n\n    options.initial = false;\n  },\n  error: function error(_error) {\n    log.error(_error);\n  },\n  close: function close() {\n    log.error('[WDS] Disconnected!');\n    sendMessage('Close');\n  }\n};\nsocket(socketUrl, onSocketMessage);\n/* WEBPACK VAR INJECTION */}.call(this, \"?http://localhost:8080\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50PzgxZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQWE7QUFDYjs7QUFFQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxzREFBWTs7QUFFcEMsYUFBYSxtQkFBTyxDQUFDLG9FQUFVOztBQUUvQixjQUFjLG1CQUFPLENBQUMsc0VBQVc7O0FBRWpDLGVBQWUsbUJBQU8sQ0FBQywwRUFBYTtBQUNwQztBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLDBGQUFxQjs7QUFFL0MsZ0JBQWdCLG1CQUFPLENBQUMsc0ZBQW1COztBQUUzQyxzQkFBc0IsbUJBQU8sQ0FBQyxrR0FBeUI7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUJBQWlCLGtFQUFrRDs7QUFFbkU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLG1CQUFtQiw2QkFBNkI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzP2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBfX3Jlc291cmNlUXVlcnkgV29ya2VyR2xvYmFsU2NvcGUgc2VsZiAqL1xuXG4vKiBlc2xpbnQgcHJlZmVyLWRlc3RydWN0dXJpbmc6IG9mZiAqL1xuXG52YXIgc3RyaXBBbnNpID0gcmVxdWlyZSgnc3RyaXAtYW5zaScpO1xuXG52YXIgc29ja2V0ID0gcmVxdWlyZSgnLi9zb2NrZXQnKTtcblxudmFyIG92ZXJsYXkgPSByZXF1aXJlKCcuL292ZXJsYXknKTtcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi91dGlscy9sb2cnKSxcbiAgICBsb2cgPSBfcmVxdWlyZS5sb2csXG4gICAgc2V0TG9nTGV2ZWwgPSBfcmVxdWlyZS5zZXRMb2dMZXZlbDtcblxudmFyIHNlbmRNZXNzYWdlID0gcmVxdWlyZSgnLi91dGlscy9zZW5kTWVzc2FnZScpO1xuXG52YXIgcmVsb2FkQXBwID0gcmVxdWlyZSgnLi91dGlscy9yZWxvYWRBcHAnKTtcblxudmFyIGNyZWF0ZVNvY2tldFVybCA9IHJlcXVpcmUoJy4vdXRpbHMvY3JlYXRlU29ja2V0VXJsJyk7XG5cbnZhciBzdGF0dXMgPSB7XG4gIGlzVW5sb2FkaW5nOiBmYWxzZSxcbiAgY3VycmVudEhhc2g6ICcnXG59O1xudmFyIG9wdGlvbnMgPSB7XG4gIGhvdDogZmFsc2UsXG4gIGhvdFJlbG9hZDogdHJ1ZSxcbiAgbGl2ZVJlbG9hZDogZmFsc2UsXG4gIGluaXRpYWw6IHRydWUsXG4gIHVzZVdhcm5pbmdPdmVybGF5OiBmYWxzZSxcbiAgdXNlRXJyb3JPdmVybGF5OiBmYWxzZSxcbiAgdXNlUHJvZ3Jlc3M6IGZhbHNlXG59O1xudmFyIHNvY2tldFVybCA9IGNyZWF0ZVNvY2tldFVybChfX3Jlc291cmNlUXVlcnkpO1xuc2VsZi5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gIHN0YXR1cy5pc1VubG9hZGluZyA9IHRydWU7XG59KTtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBxcyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAgb3B0aW9ucy5ob3RSZWxvYWQgPSBxcy5pbmRleE9mKCdob3RyZWxvYWQ9ZmFsc2UnKSA9PT0gLTE7XG59XG5cbnZhciBvblNvY2tldE1lc3NhZ2UgPSB7XG4gIGhvdDogZnVuY3Rpb24gaG90KCkge1xuICAgIG9wdGlvbnMuaG90ID0gdHJ1ZTtcbiAgICBsb2cuaW5mbygnW1dEU10gSG90IE1vZHVsZSBSZXBsYWNlbWVudCBlbmFibGVkLicpO1xuICB9LFxuICBsaXZlUmVsb2FkOiBmdW5jdGlvbiBsaXZlUmVsb2FkKCkge1xuICAgIG9wdGlvbnMubGl2ZVJlbG9hZCA9IHRydWU7XG4gICAgbG9nLmluZm8oJ1tXRFNdIExpdmUgUmVsb2FkaW5nIGVuYWJsZWQuJyk7XG4gIH0sXG4gIGludmFsaWQ6IGZ1bmN0aW9uIGludmFsaWQoKSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCB1cGRhdGVkLiBSZWNvbXBpbGluZy4uLicpOyAvLyBmaXhlcyAjMTA0Mi4gb3ZlcmxheSBkb2Vzbid0IGNsZWFyIGlmIGVycm9ycyBhcmUgZml4ZWQgYnV0IHdhcm5pbmdzIHJlbWFpbi5cblxuICAgIGlmIChvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5IHx8IG9wdGlvbnMudXNlRXJyb3JPdmVybGF5KSB7XG4gICAgICBvdmVybGF5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoJ0ludmFsaWQnKTtcbiAgfSxcbiAgaGFzaDogZnVuY3Rpb24gaGFzaChfaGFzaCkge1xuICAgIHN0YXR1cy5jdXJyZW50SGFzaCA9IF9oYXNoO1xuICB9LFxuICAnc3RpbGwtb2snOiBmdW5jdGlvbiBzdGlsbE9rKCkge1xuICAgIGxvZy5pbmZvKCdbV0RTXSBOb3RoaW5nIGNoYW5nZWQuJyk7XG5cbiAgICBpZiAob3B0aW9ucy51c2VXYXJuaW5nT3ZlcmxheSB8fCBvcHRpb25zLnVzZUVycm9yT3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5jbGVhcigpO1xuICAgIH1cblxuICAgIHNlbmRNZXNzYWdlKCdTdGlsbE9rJyk7XG4gIH0sXG4gICdsb2ctbGV2ZWwnOiBmdW5jdGlvbiBsb2dMZXZlbChsZXZlbCkge1xuICAgIHZhciBob3RDdHggPSByZXF1aXJlLmNvbnRleHQoJ3dlYnBhY2svaG90JywgZmFsc2UsIC9eXFwuXFwvbG9nJC8pO1xuXG4gICAgaWYgKGhvdEN0eC5rZXlzKCkuaW5kZXhPZignLi9sb2cnKSAhPT0gLTEpIHtcbiAgICAgIGhvdEN0eCgnLi9sb2cnKS5zZXRMb2dMZXZlbChsZXZlbCk7XG4gICAgfVxuXG4gICAgc2V0TG9nTGV2ZWwobGV2ZWwpO1xuICB9LFxuICBvdmVybGF5OiBmdW5jdGlvbiBvdmVybGF5KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICBvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5ID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbnMudXNlRXJyb3JPdmVybGF5ID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnMudXNlV2FybmluZ092ZXJsYXkgPSB2YWx1ZS53YXJuaW5ncztcbiAgICAgICAgb3B0aW9ucy51c2VFcnJvck92ZXJsYXkgPSB2YWx1ZS5lcnJvcnM7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwcm9ncmVzczogZnVuY3Rpb24gcHJvZ3Jlc3MoX3Byb2dyZXNzKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdGlvbnMudXNlUHJvZ3Jlc3MgPSBfcHJvZ3Jlc3M7XG4gICAgfVxuICB9LFxuICAncHJvZ3Jlc3MtdXBkYXRlJzogZnVuY3Rpb24gcHJvZ3Jlc3NVcGRhdGUoZGF0YSkge1xuICAgIGlmIChvcHRpb25zLnVzZVByb2dyZXNzKSB7XG4gICAgICBsb2cuaW5mbyhcIltXRFNdIFwiLmNvbmNhdChkYXRhLnBlcmNlbnQsIFwiJSAtIFwiKS5jb25jYXQoZGF0YS5tc2csIFwiLlwiKSk7XG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoJ1Byb2dyZXNzJywgZGF0YSk7XG4gIH0sXG4gIG9rOiBmdW5jdGlvbiBvaygpIHtcbiAgICBzZW5kTWVzc2FnZSgnT2snKTtcblxuICAgIGlmIChvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5IHx8IG9wdGlvbnMudXNlRXJyb3JPdmVybGF5KSB7XG4gICAgICBvdmVybGF5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5pdGlhbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW5pdGlhbCA9IGZhbHNlO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXR1cm4tYXNzaWduXG5cblxuICAgIHJlbG9hZEFwcChvcHRpb25zLCBzdGF0dXMpO1xuICB9LFxuICAnY29udGVudC1jaGFuZ2VkJzogZnVuY3Rpb24gY29udGVudENoYW5nZWQoKSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIENvbnRlbnQgYmFzZSBjaGFuZ2VkLiBSZWxvYWRpbmcuLi4nKTtcbiAgICBzZWxmLmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9LFxuICB3YXJuaW5nczogZnVuY3Rpb24gd2FybmluZ3MoX3dhcm5pbmdzKSB7XG4gICAgbG9nLndhcm4oJ1tXRFNdIFdhcm5pbmdzIHdoaWxlIGNvbXBpbGluZy4nKTtcblxuICAgIHZhciBzdHJpcHBlZFdhcm5pbmdzID0gX3dhcm5pbmdzLm1hcChmdW5jdGlvbiAod2FybmluZykge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaSh3YXJuaW5nKTtcbiAgICB9KTtcblxuICAgIHNlbmRNZXNzYWdlKCdXYXJuaW5ncycsIHN0cmlwcGVkV2FybmluZ3MpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpcHBlZFdhcm5pbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsb2cud2FybihzdHJpcHBlZFdhcm5pbmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51c2VXYXJuaW5nT3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5zaG93TWVzc2FnZShfd2FybmluZ3MpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmluaXRpYWwpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmluaXRpYWwgPSBmYWxzZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuXG5cbiAgICByZWxvYWRBcHAob3B0aW9ucywgc3RhdHVzKTtcbiAgfSxcbiAgZXJyb3JzOiBmdW5jdGlvbiBlcnJvcnMoX2Vycm9ycykge1xuICAgIGxvZy5lcnJvcignW1dEU10gRXJyb3JzIHdoaWxlIGNvbXBpbGluZy4gUmVsb2FkIHByZXZlbnRlZC4nKTtcblxuICAgIHZhciBzdHJpcHBlZEVycm9ycyA9IF9lcnJvcnMubWFwKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaShlcnJvcik7XG4gICAgfSk7XG5cbiAgICBzZW5kTWVzc2FnZSgnRXJyb3JzJywgc3RyaXBwZWRFcnJvcnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpcHBlZEVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgbG9nLmVycm9yKHN0cmlwcGVkRXJyb3JzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51c2VFcnJvck92ZXJsYXkpIHtcbiAgICAgIG92ZXJsYXkuc2hvd01lc3NhZ2UoX2Vycm9ycyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pbml0aWFsID0gZmFsc2U7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihfZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoX2Vycm9yKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGxvZy5lcnJvcignW1dEU10gRGlzY29ubmVjdGVkIScpO1xuICAgIHNlbmRNZXNzYWdlKCdDbG9zZScpO1xuICB9XG59O1xuc29ja2V0KHNvY2tldFVybCwgb25Tb2NrZXRNZXNzYWdlKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/index.js?http://localhost:8080\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/overlay.js":
/*!**********************************************!*\
  !*** (webpack)-dev-server/client/overlay.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval(" // The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\n\nvar ansiHTML = __webpack_require__(/*! ansi-html */ \"./node_modules/ansi-html/index.js\");\n\nvar _require = __webpack_require__(/*! html-entities */ \"./node_modules/html-entities/index.js\"),\n    AllHtmlEntities = _require.AllHtmlEntities;\n\nvar entities = new AllHtmlEntities();\nvar colors = {\n  reset: ['transparent', 'transparent'],\n  black: '181818',\n  red: 'E36049',\n  green: 'B3CB74',\n  yellow: 'FFD080',\n  blue: '7CAFC2',\n  magenta: '7FACCA',\n  cyan: 'C3C2EF',\n  lightgrey: 'EBE7E3',\n  darkgrey: '6D7891'\n};\nvar overlayIframe = null;\nvar overlayDiv = null;\nvar lastOnOverlayDivReady = null;\nansiHTML.setColors(colors);\n\nfunction createOverlayIframe(onIframeLoad) {\n  var iframe = document.createElement('iframe');\n  iframe.id = 'webpack-dev-server-client-overlay';\n  iframe.src = 'about:blank';\n  iframe.style.position = 'fixed';\n  iframe.style.left = 0;\n  iframe.style.top = 0;\n  iframe.style.right = 0;\n  iframe.style.bottom = 0;\n  iframe.style.width = '100vw';\n  iframe.style.height = '100vh';\n  iframe.style.border = 'none';\n  iframe.style.zIndex = 9999999999;\n  iframe.onload = onIframeLoad;\n  return iframe;\n}\n\nfunction addOverlayDivTo(iframe) {\n  var div = iframe.contentDocument.createElement('div');\n  div.id = 'webpack-dev-server-client-overlay-div';\n  div.style.position = 'fixed';\n  div.style.boxSizing = 'border-box';\n  div.style.left = 0;\n  div.style.top = 0;\n  div.style.right = 0;\n  div.style.bottom = 0;\n  div.style.width = '100vw';\n  div.style.height = '100vh';\n  div.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n  div.style.color = '#E8E8E8';\n  div.style.fontFamily = 'Menlo, Consolas, monospace';\n  div.style.fontSize = 'large';\n  div.style.padding = '2rem';\n  div.style.lineHeight = '1.2';\n  div.style.whiteSpace = 'pre-wrap';\n  div.style.overflow = 'auto';\n  iframe.contentDocument.body.appendChild(div);\n  return div;\n}\n\nfunction ensureOverlayDivExists(onOverlayDivReady) {\n  if (overlayDiv) {\n    // Everything is ready, call the callback right away.\n    onOverlayDivReady(overlayDiv);\n    return;\n  } // Creating an iframe may be asynchronous so we'll schedule the callback.\n  // In case of multiple calls, last callback wins.\n\n\n  lastOnOverlayDivReady = onOverlayDivReady;\n\n  if (overlayIframe) {\n    // We've already created it.\n    return;\n  } // Create iframe and, when it is ready, a div inside it.\n\n\n  overlayIframe = createOverlayIframe(function () {\n    overlayDiv = addOverlayDivTo(overlayIframe); // Now we can talk!\n\n    lastOnOverlayDivReady(overlayDiv);\n  }); // Zalgo alert: onIframeLoad() will be called either synchronously\n  // or asynchronously depending on the browser.\n  // We delay adding it so `overlayIframe` is set when `onIframeLoad` fires.\n\n  document.body.appendChild(overlayIframe);\n} // Successful compilation.\n\n\nfunction clear() {\n  if (!overlayDiv) {\n    // It is not there in the first place.\n    return;\n  } // Clean up and reset internal state.\n\n\n  document.body.removeChild(overlayIframe);\n  overlayDiv = null;\n  overlayIframe = null;\n  lastOnOverlayDivReady = null;\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n\nfunction showMessage(messages) {\n  ensureOverlayDivExists(function (div) {\n    // Make it look similar to our terminal.\n    div.innerHTML = \"<span style=\\\"color: #\".concat(colors.red, \"\\\">Failed to compile.</span><br><br>\").concat(ansiHTML(entities.encode(messages[0])));\n  });\n}\n\nmodule.exports = {\n  clear: clear,\n  showMessage: showMessage\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L292ZXJsYXkuanM/MmFjNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxvREFBVzs7QUFFbEMsZUFBZSxtQkFBTyxDQUFDLDREQUFlO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0EsR0FBRyxFQUFFO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L292ZXJsYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7IC8vIFRoZSBlcnJvciBvdmVybGF5IGlzIGluc3BpcmVkIChhbmQgbW9zdGx5IGNvcGllZCkgZnJvbSBDcmVhdGUgUmVhY3QgQXBwIChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2tpbmN1YmF0b3IvY3JlYXRlLXJlYWN0LWFwcClcbi8vIFRoZXksIGluIHR1cm4sIGdvdCBpbnNwaXJlZCBieSB3ZWJwYWNrLWhvdC1taWRkbGV3YXJlIChodHRwczovL2dpdGh1Yi5jb20vZ2xlbmphbWluL3dlYnBhY2staG90LW1pZGRsZXdhcmUpLlxuXG52YXIgYW5zaUhUTUwgPSByZXF1aXJlKCdhbnNpLWh0bWwnKTtcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnaHRtbC1lbnRpdGllcycpLFxuICAgIEFsbEh0bWxFbnRpdGllcyA9IF9yZXF1aXJlLkFsbEh0bWxFbnRpdGllcztcblxudmFyIGVudGl0aWVzID0gbmV3IEFsbEh0bWxFbnRpdGllcygpO1xudmFyIGNvbG9ycyA9IHtcbiAgcmVzZXQ6IFsndHJhbnNwYXJlbnQnLCAndHJhbnNwYXJlbnQnXSxcbiAgYmxhY2s6ICcxODE4MTgnLFxuICByZWQ6ICdFMzYwNDknLFxuICBncmVlbjogJ0IzQ0I3NCcsXG4gIHllbGxvdzogJ0ZGRDA4MCcsXG4gIGJsdWU6ICc3Q0FGQzInLFxuICBtYWdlbnRhOiAnN0ZBQ0NBJyxcbiAgY3lhbjogJ0MzQzJFRicsXG4gIGxpZ2h0Z3JleTogJ0VCRTdFMycsXG4gIGRhcmtncmV5OiAnNkQ3ODkxJ1xufTtcbnZhciBvdmVybGF5SWZyYW1lID0gbnVsbDtcbnZhciBvdmVybGF5RGl2ID0gbnVsbDtcbnZhciBsYXN0T25PdmVybGF5RGl2UmVhZHkgPSBudWxsO1xuYW5zaUhUTUwuc2V0Q29sb3JzKGNvbG9ycyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU92ZXJsYXlJZnJhbWUob25JZnJhbWVMb2FkKSB7XG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgaWZyYW1lLmlkID0gJ3dlYnBhY2stZGV2LXNlcnZlci1jbGllbnQtb3ZlcmxheSc7XG4gIGlmcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnO1xuICBpZnJhbWUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICBpZnJhbWUuc3R5bGUubGVmdCA9IDA7XG4gIGlmcmFtZS5zdHlsZS50b3AgPSAwO1xuICBpZnJhbWUuc3R5bGUucmlnaHQgPSAwO1xuICBpZnJhbWUuc3R5bGUuYm90dG9tID0gMDtcbiAgaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMHZ3JztcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9ICcxMDB2aCc7XG4gIGlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XG4gIGlmcmFtZS5zdHlsZS56SW5kZXggPSA5OTk5OTk5OTk5O1xuICBpZnJhbWUub25sb2FkID0gb25JZnJhbWVMb2FkO1xuICByZXR1cm4gaWZyYW1lO1xufVxuXG5mdW5jdGlvbiBhZGRPdmVybGF5RGl2VG8oaWZyYW1lKSB7XG4gIHZhciBkaXYgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuaWQgPSAnd2VicGFjay1kZXYtc2VydmVyLWNsaWVudC1vdmVybGF5LWRpdic7XG4gIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gIGRpdi5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgZGl2LnN0eWxlLnRvcCA9IDA7XG4gIGRpdi5zdHlsZS5yaWdodCA9IDA7XG4gIGRpdi5zdHlsZS5ib3R0b20gPSAwO1xuICBkaXYuc3R5bGUud2lkdGggPSAnMTAwdncnO1xuICBkaXYuc3R5bGUuaGVpZ2h0ID0gJzEwMHZoJztcbiAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDAuODUpJztcbiAgZGl2LnN0eWxlLmNvbG9yID0gJyNFOEU4RTgnO1xuICBkaXYuc3R5bGUuZm9udEZhbWlseSA9ICdNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSc7XG4gIGRpdi5zdHlsZS5mb250U2l6ZSA9ICdsYXJnZSc7XG4gIGRpdi5zdHlsZS5wYWRkaW5nID0gJzJyZW0nO1xuICBkaXYuc3R5bGUubGluZUhlaWdodCA9ICcxLjInO1xuICBkaXYuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtd3JhcCc7XG4gIGRpdi5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gIHJldHVybiBkaXY7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU92ZXJsYXlEaXZFeGlzdHMob25PdmVybGF5RGl2UmVhZHkpIHtcbiAgaWYgKG92ZXJsYXlEaXYpIHtcbiAgICAvLyBFdmVyeXRoaW5nIGlzIHJlYWR5LCBjYWxsIHRoZSBjYWxsYmFjayByaWdodCBhd2F5LlxuICAgIG9uT3ZlcmxheURpdlJlYWR5KG92ZXJsYXlEaXYpO1xuICAgIHJldHVybjtcbiAgfSAvLyBDcmVhdGluZyBhbiBpZnJhbWUgbWF5IGJlIGFzeW5jaHJvbm91cyBzbyB3ZSdsbCBzY2hlZHVsZSB0aGUgY2FsbGJhY2suXG4gIC8vIEluIGNhc2Ugb2YgbXVsdGlwbGUgY2FsbHMsIGxhc3QgY2FsbGJhY2sgd2lucy5cblxuXG4gIGxhc3RPbk92ZXJsYXlEaXZSZWFkeSA9IG9uT3ZlcmxheURpdlJlYWR5O1xuXG4gIGlmIChvdmVybGF5SWZyYW1lKSB7XG4gICAgLy8gV2UndmUgYWxyZWFkeSBjcmVhdGVkIGl0LlxuICAgIHJldHVybjtcbiAgfSAvLyBDcmVhdGUgaWZyYW1lIGFuZCwgd2hlbiBpdCBpcyByZWFkeSwgYSBkaXYgaW5zaWRlIGl0LlxuXG5cbiAgb3ZlcmxheUlmcmFtZSA9IGNyZWF0ZU92ZXJsYXlJZnJhbWUoZnVuY3Rpb24gKCkge1xuICAgIG92ZXJsYXlEaXYgPSBhZGRPdmVybGF5RGl2VG8ob3ZlcmxheUlmcmFtZSk7IC8vIE5vdyB3ZSBjYW4gdGFsayFcblxuICAgIGxhc3RPbk92ZXJsYXlEaXZSZWFkeShvdmVybGF5RGl2KTtcbiAgfSk7IC8vIFphbGdvIGFsZXJ0OiBvbklmcmFtZUxvYWQoKSB3aWxsIGJlIGNhbGxlZCBlaXRoZXIgc3luY2hyb25vdXNseVxuICAvLyBvciBhc3luY2hyb25vdXNseSBkZXBlbmRpbmcgb24gdGhlIGJyb3dzZXIuXG4gIC8vIFdlIGRlbGF5IGFkZGluZyBpdCBzbyBgb3ZlcmxheUlmcmFtZWAgaXMgc2V0IHdoZW4gYG9uSWZyYW1lTG9hZGAgZmlyZXMuXG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5SWZyYW1lKTtcbn0gLy8gU3VjY2Vzc2Z1bCBjb21waWxhdGlvbi5cblxuXG5mdW5jdGlvbiBjbGVhcigpIHtcbiAgaWYgKCFvdmVybGF5RGl2KSB7XG4gICAgLy8gSXQgaXMgbm90IHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICByZXR1cm47XG4gIH0gLy8gQ2xlYW4gdXAgYW5kIHJlc2V0IGludGVybmFsIHN0YXRlLlxuXG5cbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdmVybGF5SWZyYW1lKTtcbiAgb3ZlcmxheURpdiA9IG51bGw7XG4gIG92ZXJsYXlJZnJhbWUgPSBudWxsO1xuICBsYXN0T25PdmVybGF5RGl2UmVhZHkgPSBudWxsO1xufSAvLyBDb21waWxhdGlvbiB3aXRoIGVycm9ycyAoZS5nLiBzeW50YXggZXJyb3Igb3IgbWlzc2luZyBtb2R1bGVzKS5cblxuXG5mdW5jdGlvbiBzaG93TWVzc2FnZShtZXNzYWdlcykge1xuICBlbnN1cmVPdmVybGF5RGl2RXhpc3RzKGZ1bmN0aW9uIChkaXYpIHtcbiAgICAvLyBNYWtlIGl0IGxvb2sgc2ltaWxhciB0byBvdXIgdGVybWluYWwuXG4gICAgZGl2LmlubmVySFRNTCA9IFwiPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjXCIuY29uY2F0KGNvbG9ycy5yZWQsIFwiXFxcIj5GYWlsZWQgdG8gY29tcGlsZS48L3NwYW4+PGJyPjxicj5cIikuY29uY2F0KGFuc2lIVE1MKGVudGl0aWVzLmVuY29kZShtZXNzYWdlc1swXSkpKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjbGVhcjogY2xlYXIsXG4gIHNob3dNZXNzYWdlOiBzaG93TWVzc2FnZVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/socket.js":
/*!*********************************************!*\
  !*** (webpack)-dev-server/client/socket.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__webpack_dev_server_client__) {\n/* global __webpack_dev_server_client__ */\n\n/* eslint-disable\n  camelcase\n*/\n// this SockJSClient is here as a default fallback, in case inline mode\n// is off or the client is not injected. This will be switched to\n// WebsocketClient when it becomes the default\n// important: the path to SockJSClient here is made to work in the 'client'\n// directory, but is updated via the webpack compilation when compiled from\n// the 'client-src' directory\n\nvar Client = typeof __webpack_dev_server_client__ !== 'undefined' ? __webpack_dev_server_client__ : // eslint-disable-next-line import/no-unresolved\n__webpack_require__(/*! ./clients/SockJSClient */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\");\nvar retries = 0;\nvar client = null;\n\nvar socket = function initSocket(url, handlers) {\n  client = new Client(url);\n  client.onOpen(function () {\n    retries = 0;\n  });\n  client.onClose(function () {\n    if (retries === 0) {\n      handlers.close();\n    } // Try to reconnect.\n\n\n    client = null; // After 10 retries stop trying, to prevent logspam.\n\n    if (retries <= 10) {\n      // Exponentially increase timeout to reconnect.\n      // Respectfully copied from the package `got`.\n      // eslint-disable-next-line no-mixed-operators, no-restricted-properties\n      var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n      retries += 1;\n      setTimeout(function () {\n        socket(url, handlers);\n      }, retryInMs);\n    }\n  });\n  client.onMessage(function (data) {\n    var msg = JSON.parse(data);\n\n    if (handlers[msg.type]) {\n      handlers[msg.type](msg.data);\n    }\n  });\n};\n\nmodule.exports = socket;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! (webpack)-dev-server/client/clients/SockJSClient.js */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3NvY2tldC5qcz9lMjljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFFQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxnR0FBd0I7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsd0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9zb2NrZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgX193ZWJwYWNrX2Rldl9zZXJ2ZXJfY2xpZW50X18gKi9cblxuLyogZXNsaW50LWRpc2FibGVcbiAgY2FtZWxjYXNlXG4qL1xuLy8gdGhpcyBTb2NrSlNDbGllbnQgaXMgaGVyZSBhcyBhIGRlZmF1bHQgZmFsbGJhY2ssIGluIGNhc2UgaW5saW5lIG1vZGVcbi8vIGlzIG9mZiBvciB0aGUgY2xpZW50IGlzIG5vdCBpbmplY3RlZC4gVGhpcyB3aWxsIGJlIHN3aXRjaGVkIHRvXG4vLyBXZWJzb2NrZXRDbGllbnQgd2hlbiBpdCBiZWNvbWVzIHRoZSBkZWZhdWx0XG4vLyBpbXBvcnRhbnQ6IHRoZSBwYXRoIHRvIFNvY2tKU0NsaWVudCBoZXJlIGlzIG1hZGUgdG8gd29yayBpbiB0aGUgJ2NsaWVudCdcbi8vIGRpcmVjdG9yeSwgYnV0IGlzIHVwZGF0ZWQgdmlhIHRoZSB3ZWJwYWNrIGNvbXBpbGF0aW9uIHdoZW4gY29tcGlsZWQgZnJvbVxuLy8gdGhlICdjbGllbnQtc3JjJyBkaXJlY3RvcnlcblxudmFyIENsaWVudCA9IHR5cGVvZiBfX3dlYnBhY2tfZGV2X3NlcnZlcl9jbGllbnRfXyAhPT0gJ3VuZGVmaW5lZCcgPyBfX3dlYnBhY2tfZGV2X3NlcnZlcl9jbGllbnRfXyA6IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxucmVxdWlyZSgnLi9jbGllbnRzL1NvY2tKU0NsaWVudCcpO1xudmFyIHJldHJpZXMgPSAwO1xudmFyIGNsaWVudCA9IG51bGw7XG5cbnZhciBzb2NrZXQgPSBmdW5jdGlvbiBpbml0U29ja2V0KHVybCwgaGFuZGxlcnMpIHtcbiAgY2xpZW50ID0gbmV3IENsaWVudCh1cmwpO1xuICBjbGllbnQub25PcGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXRyaWVzID0gMDtcbiAgfSk7XG4gIGNsaWVudC5vbkNsb3NlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmV0cmllcyA9PT0gMCkge1xuICAgICAgaGFuZGxlcnMuY2xvc2UoKTtcbiAgICB9IC8vIFRyeSB0byByZWNvbm5lY3QuXG5cblxuICAgIGNsaWVudCA9IG51bGw7IC8vIEFmdGVyIDEwIHJldHJpZXMgc3RvcCB0cnlpbmcsIHRvIHByZXZlbnQgbG9nc3BhbS5cblxuICAgIGlmIChyZXRyaWVzIDw9IDEwKSB7XG4gICAgICAvLyBFeHBvbmVudGlhbGx5IGluY3JlYXNlIHRpbWVvdXQgdG8gcmVjb25uZWN0LlxuICAgICAgLy8gUmVzcGVjdGZ1bGx5IGNvcGllZCBmcm9tIHRoZSBwYWNrYWdlIGBnb3RgLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1peGVkLW9wZXJhdG9ycywgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG4gICAgICB2YXIgcmV0cnlJbk1zID0gMTAwMCAqIE1hdGgucG93KDIsIHJldHJpZXMpICsgTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgIHJldHJpZXMgKz0gMTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzb2NrZXQodXJsLCBoYW5kbGVycyk7XG4gICAgICB9LCByZXRyeUluTXMpO1xuICAgIH1cbiAgfSk7XG4gIGNsaWVudC5vbk1lc3NhZ2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgbXNnID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgIGlmIChoYW5kbGVyc1ttc2cudHlwZV0pIHtcbiAgICAgIGhhbmRsZXJzW21zZy50eXBlXShtc2cuZGF0YSk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc29ja2V0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/socket.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/utils/createSocketUrl.js":
/*!************************************************************!*\
  !*** (webpack)-dev-server/client/utils/createSocketUrl.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n/* global self */\n\nvar url = __webpack_require__(/*! url */ \"./node_modules/url/url.js\");\n\nvar getCurrentScriptSource = __webpack_require__(/*! ./getCurrentScriptSource */ \"./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js\");\n\nfunction createSocketUrl(resourceQuery, currentLocation) {\n  var urlParts;\n\n  if (typeof resourceQuery === 'string' && resourceQuery !== '') {\n    // If this bundle is inlined, use the resource query to get the correct url.\n    // format is like `?http://0.0.0.0:8096&sockPort=8097&sockHost=localhost`\n    urlParts = url.parse(resourceQuery // strip leading `?` from query string to get a valid URL\n    .substr(1) // replace first `&` with `?` to have a valid query string\n    .replace('&', '?'), true);\n  } else {\n    // Else, get the url from the <script> this file was called with.\n    var scriptHost = getCurrentScriptSource();\n    urlParts = url.parse(scriptHost || '/', true, true);\n  } // Use parameter to allow passing location in unit tests\n\n\n  if (typeof currentLocation === 'string' && currentLocation !== '') {\n    currentLocation = url.parse(currentLocation);\n  } else {\n    currentLocation = self.location;\n  }\n\n  return getSocketUrl(urlParts, currentLocation);\n}\n/*\n * Gets socket URL based on Script Source/Location\n * (scriptSrc: URL, location: URL) -> URL\n */\n\n\nfunction getSocketUrl(urlParts, loc) {\n  var auth = urlParts.auth,\n      query = urlParts.query;\n  var hostname = urlParts.hostname,\n      protocol = urlParts.protocol,\n      port = urlParts.port;\n\n  if (!port || port === '0') {\n    port = loc.port;\n  } // check ipv4 and ipv6 `all hostname`\n  // why do we need this check?\n  // hostname n/a for file protocol (example, when using electron, ionic)\n  // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n\n  if ((hostname === '0.0.0.0' || hostname === '::') && loc.hostname && loc.protocol.indexOf('http') === 0) {\n    hostname = loc.hostname;\n  } // `hostname` can be empty when the script path is relative. In that case, specifying\n  // a protocol would result in an invalid URL.\n  // When https is used in the app, secure websockets are always necessary\n  // because the browser doesn't accept non-secure websockets.\n\n\n  if (hostname && hostname !== '127.0.0.1' && (loc.protocol === 'https:' || urlParts.hostname === '0.0.0.0')) {\n    protocol = loc.protocol;\n  } // all of these sock url params are optionally passed in through\n  // resourceQuery, so we need to fall back to the default if\n  // they are not provided\n\n\n  var sockHost = query.sockHost || hostname;\n  var sockPath = query.sockPath || '/sockjs-node';\n  var sockPort = query.sockPort || port;\n\n  if (sockPort === 'location') {\n    sockPort = loc.port;\n  }\n\n  return url.format({\n    protocol: protocol,\n    auth: auth,\n    hostname: sockHost,\n    port: sockPort,\n    // If sockPath is provided it'll be passed in via the resourceQuery as a\n    // query param so it has to be parsed out of the querystring in order for the\n    // client to open the socket to the correct location.\n    pathname: sockPath\n  });\n}\n\nmodule.exports = createSocketUrl;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2NyZWF0ZVNvY2tldFVybC5qcz8yZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLHNDQUFLOztBQUV2Qiw2QkFBNkIsbUJBQU8sQ0FBQywwR0FBMEI7O0FBRS9EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9jcmVhdGVTb2NrZXRVcmwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgc2VsZiAqL1xuXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbnZhciBnZXRDdXJyZW50U2NyaXB0U291cmNlID0gcmVxdWlyZSgnLi9nZXRDdXJyZW50U2NyaXB0U291cmNlJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvY2tldFVybChyZXNvdXJjZVF1ZXJ5LCBjdXJyZW50TG9jYXRpb24pIHtcbiAgdmFyIHVybFBhcnRzO1xuXG4gIGlmICh0eXBlb2YgcmVzb3VyY2VRdWVyeSA9PT0gJ3N0cmluZycgJiYgcmVzb3VyY2VRdWVyeSAhPT0gJycpIHtcbiAgICAvLyBJZiB0aGlzIGJ1bmRsZSBpcyBpbmxpbmVkLCB1c2UgdGhlIHJlc291cmNlIHF1ZXJ5IHRvIGdldCB0aGUgY29ycmVjdCB1cmwuXG4gICAgLy8gZm9ybWF0IGlzIGxpa2UgYD9odHRwOi8vMC4wLjAuMDo4MDk2JnNvY2tQb3J0PTgwOTcmc29ja0hvc3Q9bG9jYWxob3N0YFxuICAgIHVybFBhcnRzID0gdXJsLnBhcnNlKHJlc291cmNlUXVlcnkgLy8gc3RyaXAgbGVhZGluZyBgP2AgZnJvbSBxdWVyeSBzdHJpbmcgdG8gZ2V0IGEgdmFsaWQgVVJMXG4gICAgLnN1YnN0cigxKSAvLyByZXBsYWNlIGZpcnN0IGAmYCB3aXRoIGA/YCB0byBoYXZlIGEgdmFsaWQgcXVlcnkgc3RyaW5nXG4gICAgLnJlcGxhY2UoJyYnLCAnPycpLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBFbHNlLCBnZXQgdGhlIHVybCBmcm9tIHRoZSA8c2NyaXB0PiB0aGlzIGZpbGUgd2FzIGNhbGxlZCB3aXRoLlxuICAgIHZhciBzY3JpcHRIb3N0ID0gZ2V0Q3VycmVudFNjcmlwdFNvdXJjZSgpO1xuICAgIHVybFBhcnRzID0gdXJsLnBhcnNlKHNjcmlwdEhvc3QgfHwgJy8nLCB0cnVlLCB0cnVlKTtcbiAgfSAvLyBVc2UgcGFyYW1ldGVyIHRvIGFsbG93IHBhc3NpbmcgbG9jYXRpb24gaW4gdW5pdCB0ZXN0c1xuXG5cbiAgaWYgKHR5cGVvZiBjdXJyZW50TG9jYXRpb24gPT09ICdzdHJpbmcnICYmIGN1cnJlbnRMb2NhdGlvbiAhPT0gJycpIHtcbiAgICBjdXJyZW50TG9jYXRpb24gPSB1cmwucGFyc2UoY3VycmVudExvY2F0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBjdXJyZW50TG9jYXRpb24gPSBzZWxmLmxvY2F0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGdldFNvY2tldFVybCh1cmxQYXJ0cywgY3VycmVudExvY2F0aW9uKTtcbn1cbi8qXG4gKiBHZXRzIHNvY2tldCBVUkwgYmFzZWQgb24gU2NyaXB0IFNvdXJjZS9Mb2NhdGlvblxuICogKHNjcmlwdFNyYzogVVJMLCBsb2NhdGlvbjogVVJMKSAtPiBVUkxcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNvY2tldFVybCh1cmxQYXJ0cywgbG9jKSB7XG4gIHZhciBhdXRoID0gdXJsUGFydHMuYXV0aCxcbiAgICAgIHF1ZXJ5ID0gdXJsUGFydHMucXVlcnk7XG4gIHZhciBob3N0bmFtZSA9IHVybFBhcnRzLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2wgPSB1cmxQYXJ0cy5wcm90b2NvbCxcbiAgICAgIHBvcnQgPSB1cmxQYXJ0cy5wb3J0O1xuXG4gIGlmICghcG9ydCB8fCBwb3J0ID09PSAnMCcpIHtcbiAgICBwb3J0ID0gbG9jLnBvcnQ7XG4gIH0gLy8gY2hlY2sgaXB2NCBhbmQgaXB2NiBgYWxsIGhvc3RuYW1lYFxuICAvLyB3aHkgZG8gd2UgbmVlZCB0aGlzIGNoZWNrP1xuICAvLyBob3N0bmFtZSBuL2EgZm9yIGZpbGUgcHJvdG9jb2wgKGV4YW1wbGUsIHdoZW4gdXNpbmcgZWxlY3Ryb24sIGlvbmljKVxuICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2stZGV2LXNlcnZlci9wdWxsLzM4NFxuXG5cbiAgaWYgKChob3N0bmFtZSA9PT0gJzAuMC4wLjAnIHx8IGhvc3RuYW1lID09PSAnOjonKSAmJiBsb2MuaG9zdG5hbWUgJiYgbG9jLnByb3RvY29sLmluZGV4T2YoJ2h0dHAnKSA9PT0gMCkge1xuICAgIGhvc3RuYW1lID0gbG9jLmhvc3RuYW1lO1xuICB9IC8vIGBob3N0bmFtZWAgY2FuIGJlIGVtcHR5IHdoZW4gdGhlIHNjcmlwdCBwYXRoIGlzIHJlbGF0aXZlLiBJbiB0aGF0IGNhc2UsIHNwZWNpZnlpbmdcbiAgLy8gYSBwcm90b2NvbCB3b3VsZCByZXN1bHQgaW4gYW4gaW52YWxpZCBVUkwuXG4gIC8vIFdoZW4gaHR0cHMgaXMgdXNlZCBpbiB0aGUgYXBwLCBzZWN1cmUgd2Vic29ja2V0cyBhcmUgYWx3YXlzIG5lY2Vzc2FyeVxuICAvLyBiZWNhdXNlIHRoZSBicm93c2VyIGRvZXNuJ3QgYWNjZXB0IG5vbi1zZWN1cmUgd2Vic29ja2V0cy5cblxuXG4gIGlmIChob3N0bmFtZSAmJiBob3N0bmFtZSAhPT0gJzEyNy4wLjAuMScgJiYgKGxvYy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgfHwgdXJsUGFydHMuaG9zdG5hbWUgPT09ICcwLjAuMC4wJykpIHtcbiAgICBwcm90b2NvbCA9IGxvYy5wcm90b2NvbDtcbiAgfSAvLyBhbGwgb2YgdGhlc2Ugc29jayB1cmwgcGFyYW1zIGFyZSBvcHRpb25hbGx5IHBhc3NlZCBpbiB0aHJvdWdoXG4gIC8vIHJlc291cmNlUXVlcnksIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGlmXG4gIC8vIHRoZXkgYXJlIG5vdCBwcm92aWRlZFxuXG5cbiAgdmFyIHNvY2tIb3N0ID0gcXVlcnkuc29ja0hvc3QgfHwgaG9zdG5hbWU7XG4gIHZhciBzb2NrUGF0aCA9IHF1ZXJ5LnNvY2tQYXRoIHx8ICcvc29ja2pzLW5vZGUnO1xuICB2YXIgc29ja1BvcnQgPSBxdWVyeS5zb2NrUG9ydCB8fCBwb3J0O1xuXG4gIGlmIChzb2NrUG9ydCA9PT0gJ2xvY2F0aW9uJykge1xuICAgIHNvY2tQb3J0ID0gbG9jLnBvcnQ7XG4gIH1cblxuICByZXR1cm4gdXJsLmZvcm1hdCh7XG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIGF1dGg6IGF1dGgsXG4gICAgaG9zdG5hbWU6IHNvY2tIb3N0LFxuICAgIHBvcnQ6IHNvY2tQb3J0LFxuICAgIC8vIElmIHNvY2tQYXRoIGlzIHByb3ZpZGVkIGl0J2xsIGJlIHBhc3NlZCBpbiB2aWEgdGhlIHJlc291cmNlUXVlcnkgYXMgYVxuICAgIC8vIHF1ZXJ5IHBhcmFtIHNvIGl0IGhhcyB0byBiZSBwYXJzZWQgb3V0IG9mIHRoZSBxdWVyeXN0cmluZyBpbiBvcmRlciBmb3IgdGhlXG4gICAgLy8gY2xpZW50IHRvIG9wZW4gdGhlIHNvY2tldCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICBwYXRobmFtZTogc29ja1BhdGhcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU29ja2V0VXJsOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/createSocketUrl.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js":
/*!*******************************************************************!*\
  !*** (webpack)-dev-server/client/utils/getCurrentScriptSource.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction getCurrentScriptSource() {\n  // `document.currentScript` is the most accurate way to find the current script,\n  // but is not supported in all browsers.\n  if (document.currentScript) {\n    return document.currentScript.getAttribute('src');\n  } // Fall back to getting all scripts in the document.\n\n\n  var scriptElements = document.scripts || [];\n  var currentScript = scriptElements[scriptElements.length - 1];\n\n  if (currentScript) {\n    return currentScript.getAttribute('src');\n  } // Fail as there was no script to use.\n\n\n  throw new Error('[WDS] Failed to get current script source.');\n}\n\nmodule.exports = getCurrentScriptSource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2dldEN1cnJlbnRTY3JpcHRTb3VyY2UuanM/ODgzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2dldEN1cnJlbnRTY3JpcHRTb3VyY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTY3JpcHRTb3VyY2UoKSB7XG4gIC8vIGBkb2N1bWVudC5jdXJyZW50U2NyaXB0YCBpcyB0aGUgbW9zdCBhY2N1cmF0ZSB3YXkgdG8gZmluZCB0aGUgY3VycmVudCBzY3JpcHQsXG4gIC8vIGJ1dCBpcyBub3Qgc3VwcG9ydGVkIGluIGFsbCBicm93c2Vycy5cbiAgaWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICB9IC8vIEZhbGwgYmFjayB0byBnZXR0aW5nIGFsbCBzY3JpcHRzIGluIHRoZSBkb2N1bWVudC5cblxuXG4gIHZhciBzY3JpcHRFbGVtZW50cyA9IGRvY3VtZW50LnNjcmlwdHMgfHwgW107XG4gIHZhciBjdXJyZW50U2NyaXB0ID0gc2NyaXB0RWxlbWVudHNbc2NyaXB0RWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgaWYgKGN1cnJlbnRTY3JpcHQpIHtcbiAgICByZXR1cm4gY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICB9IC8vIEZhaWwgYXMgdGhlcmUgd2FzIG5vIHNjcmlwdCB0byB1c2UuXG5cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1tXRFNdIEZhaWxlZCB0byBnZXQgY3VycmVudCBzY3JpcHQgc291cmNlLicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEN1cnJlbnRTY3JpcHRTb3VyY2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/utils/log.js":
/*!************************************************!*\
  !*** (webpack)-dev-server/client/utils/log.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nvar log = __webpack_require__(/*! loglevel */ \"./node_modules/loglevel/lib/loglevel.js\").getLogger('webpack-dev-server');\n\nvar INFO = 'info';\nvar WARN = 'warn';\nvar ERROR = 'error';\nvar DEBUG = 'debug';\nvar TRACE = 'trace';\nvar SILENT = 'silent'; // deprecated\n// TODO: remove these at major released\n// https://github.com/webpack/webpack-dev-server/pull/1825\n\nvar WARNING = 'warning';\nvar NONE = 'none'; // Set the default log level\n\nlog.setDefaultLevel(INFO);\n\nfunction setLogLevel(level) {\n  switch (level) {\n    case INFO:\n    case WARN:\n    case ERROR:\n    case DEBUG:\n    case TRACE:\n      log.setLevel(level);\n      break;\n    // deprecated\n\n    case WARNING:\n      // loglevel's warning name is different from webpack's\n      log.setLevel('warn');\n      break;\n    // deprecated\n\n    case NONE:\n    case SILENT:\n      log.disableAll();\n      break;\n\n    default:\n      log.error(\"[WDS] Unknown clientLogLevel '\".concat(level, \"'\"));\n  }\n}\n\nmodule.exports = {\n  log: log,\n  setLogLevel: setLogLevel\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2xvZy5qcz84YThhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyx5REFBVTs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCOztBQUVsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2stZGV2LXNlcnZlci9jbGllbnQvdXRpbHMvbG9nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbG9nID0gcmVxdWlyZSgnbG9nbGV2ZWwnKS5nZXRMb2dnZXIoJ3dlYnBhY2stZGV2LXNlcnZlcicpO1xuXG52YXIgSU5GTyA9ICdpbmZvJztcbnZhciBXQVJOID0gJ3dhcm4nO1xudmFyIEVSUk9SID0gJ2Vycm9yJztcbnZhciBERUJVRyA9ICdkZWJ1Zyc7XG52YXIgVFJBQ0UgPSAndHJhY2UnO1xudmFyIFNJTEVOVCA9ICdzaWxlbnQnOyAvLyBkZXByZWNhdGVkXG4vLyBUT0RPOiByZW1vdmUgdGhlc2UgYXQgbWFqb3IgcmVsZWFzZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2stZGV2LXNlcnZlci9wdWxsLzE4MjVcblxudmFyIFdBUk5JTkcgPSAnd2FybmluZyc7XG52YXIgTk9ORSA9ICdub25lJzsgLy8gU2V0IHRoZSBkZWZhdWx0IGxvZyBsZXZlbFxuXG5sb2cuc2V0RGVmYXVsdExldmVsKElORk8pO1xuXG5mdW5jdGlvbiBzZXRMb2dMZXZlbChsZXZlbCkge1xuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSBJTkZPOlxuICAgIGNhc2UgV0FSTjpcbiAgICBjYXNlIEVSUk9SOlxuICAgIGNhc2UgREVCVUc6XG4gICAgY2FzZSBUUkFDRTpcbiAgICAgIGxvZy5zZXRMZXZlbChsZXZlbCk7XG4gICAgICBicmVhaztcbiAgICAvLyBkZXByZWNhdGVkXG5cbiAgICBjYXNlIFdBUk5JTkc6XG4gICAgICAvLyBsb2dsZXZlbCdzIHdhcm5pbmcgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB3ZWJwYWNrJ3NcbiAgICAgIGxvZy5zZXRMZXZlbCgnd2FybicpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gZGVwcmVjYXRlZFxuXG4gICAgY2FzZSBOT05FOlxuICAgIGNhc2UgU0lMRU5UOlxuICAgICAgbG9nLmRpc2FibGVBbGwoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZy5lcnJvcihcIltXRFNdIFVua25vd24gY2xpZW50TG9nTGV2ZWwgJ1wiLmNvbmNhdChsZXZlbCwgXCInXCIpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbG9nOiBsb2csXG4gIHNldExvZ0xldmVsOiBzZXRMb2dMZXZlbFxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/log.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/utils/reloadApp.js":
/*!******************************************************!*\
  !*** (webpack)-dev-server/client/utils/reloadApp.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n/* global WorkerGlobalScope self */\n\nvar _require = __webpack_require__(/*! ./log */ \"./node_modules/webpack-dev-server/client/utils/log.js\"),\n    log = _require.log;\n\nfunction reloadApp(_ref, _ref2) {\n  var hotReload = _ref.hotReload,\n      hot = _ref.hot,\n      liveReload = _ref.liveReload;\n  var isUnloading = _ref2.isUnloading,\n      currentHash = _ref2.currentHash;\n\n  if (isUnloading || !hotReload) {\n    return;\n  }\n\n  if (hot) {\n    log.info('[WDS] App hot update...');\n\n    var hotEmitter = __webpack_require__(/*! webpack/hot/emitter */ \"./node_modules/webpack/hot/emitter.js\");\n\n    hotEmitter.emit('webpackHotUpdate', currentHash);\n\n    if (typeof self !== 'undefined' && self.window) {\n      // broadcast update to window\n      self.postMessage(\"webpackHotUpdate\".concat(currentHash), '*');\n    }\n  } // allow refreshing the page only if liveReload isn't disabled\n  else if (liveReload) {\n      var rootWindow = self; // use parent window for reload (in case we're in an iframe with no valid src)\n\n      var intervalId = self.setInterval(function () {\n        if (rootWindow.location.protocol !== 'about:') {\n          // reload immediately if protocol is valid\n          applyReload(rootWindow, intervalId);\n        } else {\n          rootWindow = rootWindow.parent;\n\n          if (rootWindow.parent === rootWindow) {\n            // if parent equals current window we've reached the root which would continue forever, so trigger a reload anyways\n            applyReload(rootWindow, intervalId);\n          }\n        }\n      });\n    }\n\n  function applyReload(rootWindow, intervalId) {\n    clearInterval(intervalId);\n    log.info('[WDS] App updated. Reloading...');\n    rootWindow.location.reload();\n  }\n}\n\nmodule.exports = reloadApp;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL3JlbG9hZEFwcC5qcz83ZjU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLG9FQUFPO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyxrRUFBcUI7O0FBRWxEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL3JlbG9hZEFwcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBXb3JrZXJHbG9iYWxTY29wZSBzZWxmICovXG5cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vbG9nJyksXG4gICAgbG9nID0gX3JlcXVpcmUubG9nO1xuXG5mdW5jdGlvbiByZWxvYWRBcHAoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIGhvdFJlbG9hZCA9IF9yZWYuaG90UmVsb2FkLFxuICAgICAgaG90ID0gX3JlZi5ob3QsXG4gICAgICBsaXZlUmVsb2FkID0gX3JlZi5saXZlUmVsb2FkO1xuICB2YXIgaXNVbmxvYWRpbmcgPSBfcmVmMi5pc1VubG9hZGluZyxcbiAgICAgIGN1cnJlbnRIYXNoID0gX3JlZjIuY3VycmVudEhhc2g7XG5cbiAgaWYgKGlzVW5sb2FkaW5nIHx8ICFob3RSZWxvYWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaG90KSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCBob3QgdXBkYXRlLi4uJyk7XG5cbiAgICB2YXIgaG90RW1pdHRlciA9IHJlcXVpcmUoJ3dlYnBhY2svaG90L2VtaXR0ZXInKTtcblxuICAgIGhvdEVtaXR0ZXIuZW1pdCgnd2VicGFja0hvdFVwZGF0ZScsIGN1cnJlbnRIYXNoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi53aW5kb3cpIHtcbiAgICAgIC8vIGJyb2FkY2FzdCB1cGRhdGUgdG8gd2luZG93XG4gICAgICBzZWxmLnBvc3RNZXNzYWdlKFwid2VicGFja0hvdFVwZGF0ZVwiLmNvbmNhdChjdXJyZW50SGFzaCksICcqJyk7XG4gICAgfVxuICB9IC8vIGFsbG93IHJlZnJlc2hpbmcgdGhlIHBhZ2Ugb25seSBpZiBsaXZlUmVsb2FkIGlzbid0IGRpc2FibGVkXG4gIGVsc2UgaWYgKGxpdmVSZWxvYWQpIHtcbiAgICAgIHZhciByb290V2luZG93ID0gc2VsZjsgLy8gdXNlIHBhcmVudCB3aW5kb3cgZm9yIHJlbG9hZCAoaW4gY2FzZSB3ZSdyZSBpbiBhbiBpZnJhbWUgd2l0aCBubyB2YWxpZCBzcmMpXG5cbiAgICAgIHZhciBpbnRlcnZhbElkID0gc2VsZi5zZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChyb290V2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSAnYWJvdXQ6Jykge1xuICAgICAgICAgIC8vIHJlbG9hZCBpbW1lZGlhdGVseSBpZiBwcm90b2NvbCBpcyB2YWxpZFxuICAgICAgICAgIGFwcGx5UmVsb2FkKHJvb3RXaW5kb3csIGludGVydmFsSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RXaW5kb3cgPSByb290V2luZG93LnBhcmVudDtcblxuICAgICAgICAgIGlmIChyb290V2luZG93LnBhcmVudCA9PT0gcm9vdFdpbmRvdykge1xuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGVxdWFscyBjdXJyZW50IHdpbmRvdyB3ZSd2ZSByZWFjaGVkIHRoZSByb290IHdoaWNoIHdvdWxkIGNvbnRpbnVlIGZvcmV2ZXIsIHNvIHRyaWdnZXIgYSByZWxvYWQgYW55d2F5c1xuICAgICAgICAgICAgYXBwbHlSZWxvYWQocm9vdFdpbmRvdywgaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlSZWxvYWQocm9vdFdpbmRvdywgaW50ZXJ2YWxJZCkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCB1cGRhdGVkLiBSZWxvYWRpbmcuLi4nKTtcbiAgICByb290V2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVsb2FkQXBwOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/reloadApp.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack-dev-server/client/utils/sendMessage.js":
/*!********************************************************!*\
  !*** (webpack)-dev-server/client/utils/sendMessage.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n/* global __resourceQuery WorkerGlobalScope self */\n// Send messages to the outside, so plugins can consume it.\n\nfunction sendMsg(type, data) {\n  if (typeof self !== 'undefined' && (typeof WorkerGlobalScope === 'undefined' || !(self instanceof WorkerGlobalScope))) {\n    self.postMessage({\n      type: \"webpack\".concat(type),\n      data: data\n    }, '*');\n  }\n}\n\nmodule.exports = sendMsg;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL3NlbmRNZXNzYWdlLmpzPzA5MGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL3NlbmRNZXNzYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIF9fcmVzb3VyY2VRdWVyeSBXb3JrZXJHbG9iYWxTY29wZSBzZWxmICovXG4vLyBTZW5kIG1lc3NhZ2VzIHRvIHRoZSBvdXRzaWRlLCBzbyBwbHVnaW5zIGNhbiBjb25zdW1lIGl0LlxuXG5mdW5jdGlvbiBzZW5kTXNnKHR5cGUsIGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCAhKHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkpKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICB0eXBlOiBcIndlYnBhY2tcIi5jb25jYXQodHlwZSksXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSwgJyonKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbmRNc2c7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/sendMessage.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
  !*** (webpack)/buildin/module.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
 
eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2NlZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/module.js\n");
 
/***/ }),
 
/***/ "./node_modules/webpack/hot sync ^\\.\\/log$":
/*!*************************************************!*\
  !*** (webpack)/hot sync nonrecursive ^\.\/log$ ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var map = {\n\t\"./log\": \"./node_modules/webpack/hot/log.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/webpack/hot sync ^\\\\.\\\\/log$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2hvdCBzeW5jIG5vbnJlY3Vyc2l2ZSBeXFwuXFwvbG9nJD8xYzNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svaG90IHN5bmMgXlxcLlxcL2xvZyQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwID0ge1xuXHRcIi4vbG9nXCI6IFwiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3QvbG9nLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svaG90IHN5bmMgXlxcXFwuXFxcXC9sb2ckXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot sync ^\\.\\/log$\n");

/***/ }),
 
/***/ "./node_modules/webpack/hot/emitter.js":
/*!********************************!*\
  !*** (webpack)/hot/emitter.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var EventEmitter = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\nmodule.exports = new EventEmitter();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2hvdC9lbWl0dGVyLmpzP2E2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CLG1CQUFPLENBQUMsK0NBQVE7QUFDbkMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3QvZW1pdHRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot/emitter.js\n");

/***/ }),
 
/***/ "./node_modules/webpack/hot/log.js":
/*!****************************!*\
  !*** (webpack)/hot/log.js ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var logLevel = \"info\";\n\nfunction dummy() {}\n\nfunction shouldLog(level) {\n\tvar shouldLog =\n\t\t(logLevel === \"info\" && level === \"info\") ||\n\t\t([\"info\", \"warning\"].indexOf(logLevel) >= 0 && level === \"warning\") ||\n\t\t([\"info\", \"warning\", \"error\"].indexOf(logLevel) >= 0 && level === \"error\");\n\treturn shouldLog;\n}\n\nfunction logGroup(logFn) {\n\treturn function(level, msg) {\n\t\tif (shouldLog(level)) {\n\t\t\tlogFn(msg);\n\t\t}\n\t};\n}\n\nmodule.exports = function(level, msg) {\n\tif (shouldLog(level)) {\n\t\tif (level === \"info\") {\n\t\t\tconsole.log(msg);\n\t\t} else if (level === \"warning\") {\n\t\t\tconsole.warn(msg);\n\t\t} else if (level === \"error\") {\n\t\t\tconsole.error(msg);\n\t\t}\n\t}\n};\n\n/* eslint-disable node/no-unsupported-features/node-builtins */\nvar group = console.group || dummy;\nvar groupCollapsed = console.groupCollapsed || dummy;\nvar groupEnd = console.groupEnd || dummy;\n/* eslint-enable node/no-unsupported-features/node-builtins */\n\nmodule.exports.group = logGroup(group);\n\nmodule.exports.groupCollapsed = logGroup(groupCollapsed);\n\nmodule.exports.groupEnd = logGroup(groupEnd);\n\nmodule.exports.setLogLevel = function(level) {\n\tlogLevel = level;\n};\n\nmodule.exports.formatError = function(err) {\n\tvar message = err.message;\n\tvar stack = err.stack;\n\tif (!stack) {\n\t\treturn message;\n\t} else if (stack.indexOf(message) < 0) {\n\t\treturn message + \"\\n\" + stack;\n\t} else {\n\t\treturn stack;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2hvdC9sb2cuanM/MWFmZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2hvdC9sb2cuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbG9nTGV2ZWwgPSBcImluZm9cIjtcblxuZnVuY3Rpb24gZHVtbXkoKSB7fVxuXG5mdW5jdGlvbiBzaG91bGRMb2cobGV2ZWwpIHtcblx0dmFyIHNob3VsZExvZyA9XG5cdFx0KGxvZ0xldmVsID09PSBcImluZm9cIiAmJiBsZXZlbCA9PT0gXCJpbmZvXCIpIHx8XG5cdFx0KFtcImluZm9cIiwgXCJ3YXJuaW5nXCJdLmluZGV4T2YobG9nTGV2ZWwpID49IDAgJiYgbGV2ZWwgPT09IFwid2FybmluZ1wiKSB8fFxuXHRcdChbXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCJdLmluZGV4T2YobG9nTGV2ZWwpID49IDAgJiYgbGV2ZWwgPT09IFwiZXJyb3JcIik7XG5cdHJldHVybiBzaG91bGRMb2c7XG59XG5cbmZ1bmN0aW9uIGxvZ0dyb3VwKGxvZ0ZuKSB7XG5cdHJldHVybiBmdW5jdGlvbihsZXZlbCwgbXNnKSB7XG5cdFx0aWYgKHNob3VsZExvZyhsZXZlbCkpIHtcblx0XHRcdGxvZ0ZuKG1zZyk7XG5cdFx0fVxuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxldmVsLCBtc2cpIHtcblx0aWYgKHNob3VsZExvZyhsZXZlbCkpIHtcblx0XHRpZiAobGV2ZWwgPT09IFwiaW5mb1wiKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhtc2cpO1xuXHRcdH0gZWxzZSBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiKSB7XG5cdFx0XHRjb25zb2xlLndhcm4obXNnKTtcblx0XHR9IGVsc2UgaWYgKGxldmVsID09PSBcImVycm9yXCIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobXNnKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAqL1xudmFyIGdyb3VwID0gY29uc29sZS5ncm91cCB8fCBkdW1teTtcbnZhciBncm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQgfHwgZHVtbXk7XG52YXIgZ3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kIHx8IGR1bW15O1xuLyogZXNsaW50LWVuYWJsZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgKi9cblxubW9kdWxlLmV4cG9ydHMuZ3JvdXAgPSBsb2dHcm91cChncm91cCk7XG5cbm1vZHVsZS5leHBvcnRzLmdyb3VwQ29sbGFwc2VkID0gbG9nR3JvdXAoZ3JvdXBDb2xsYXBzZWQpO1xuXG5tb2R1bGUuZXhwb3J0cy5ncm91cEVuZCA9IGxvZ0dyb3VwKGdyb3VwRW5kKTtcblxubW9kdWxlLmV4cG9ydHMuc2V0TG9nTGV2ZWwgPSBmdW5jdGlvbihsZXZlbCkge1xuXHRsb2dMZXZlbCA9IGxldmVsO1xufTtcblxubW9kdWxlLmV4cG9ydHMuZm9ybWF0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcblx0dmFyIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcblx0dmFyIHN0YWNrID0gZXJyLnN0YWNrO1xuXHRpZiAoIXN0YWNrKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH0gZWxzZSBpZiAoc3RhY2suaW5kZXhPZihtZXNzYWdlKSA8IDApIHtcblx0XHRyZXR1cm4gbWVzc2FnZSArIFwiXFxuXCIgKyBzdGFjaztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gc3RhY2s7XG5cdH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot/log.js\n");

/***/ }),
 
/***/ "./src/Config/config.js":
/*!******************************!*\
  !*** ./src/Config/config.js ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nvar _fadePlugin = _interopRequireDefault(__webpack_require__(/*! ../../node_modules/phaser3-rex-plugins/plugins/fade-plugin.js */ \"./node_modules/phaser3-rex-plugins/plugins/fade-plugin.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n} // tạo khung cho game\n\n\nvar _default = {\n  type: Phaser.AUTO,\n  parent: 'phaser-example',\n  width: 1080,\n  height: 680,\n  backgroundColor: '0xffffff',\n  scale: {// autoCenter: Phaser.Scale.CENTER_HORIZONTALLY,\n  },\n  // cái này dùng để enable cái dom trong bootGame\n  dom: {\n    createContainer: true\n  },\n  // cái này dùng để enable physics function\n  physics: {\n    default: 'arcade',\n    arcade: {\n      debug: true\n    }\n  },\n  // cái này dùng để enable audio function\n  audio: {\n    disableWebAudio: true\n  },\n  plugins: {\n    global: [{\n      key: 'rexFade',\n      plugin: _fadePlugin.default,\n      start: true\n    }]\n  }\n};\nexports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQ29uZmlnL2NvbmZpZy5qcz8wOGYzIl0sIm5hbWVzIjpbInR5cGUiLCJQaGFzZXIiLCJwYXJlbnQiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRDb2xvciIsInNjYWxlIiwiZG9tIiwiY3JlYXRlQ29udGFpbmVyIiwicGh5c2ljcyIsImRlZmF1bHQiLCJhcmNhZGUiLCJkZWJ1ZyIsImF1ZGlvIiwiZGlzYWJsZVdlYkF1ZGlvIiwicGx1Z2lucyIsImdsb2JhbCIsImtleSIsInBsdWdpbiIsIkZhZGVQbHVnaW4iLCJzdGFydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7RUFFQTs7O2VBQ2U7QUFFYkEsTUFBSSxFQUFFQyxNQUFNLENBRkM7QUFHYkMsUUFBTSxFQUhPO0FBSWJDLE9BQUssRUFKUTtBQUtiQyxRQUFNLEVBTE87QUFNYkMsaUJBQWUsRUFORjtBQU9iQyxPQUFLLEVBQUUsQ0FFTDtBQUZLLEdBUE07QUFZYjtBQUNBQyxLQUFHLEVBQUU7QUFDSEMsbUJBQWUsRUFBRTtBQURkLEdBYlE7QUFpQmI7QUFDQUMsU0FBTyxFQUFFO0FBQ1BDLFdBQU8sRUFEQTtBQUVQQyxVQUFNLEVBQUU7QUFFTkMsV0FBSyxFQUFFO0FBRkQ7QUFGRCxHQWxCSTtBQTBCYjtBQUNBQyxPQUFLLEVBQUU7QUFDTEMsbUJBQWUsRUFBRTtBQURaLEdBM0JNO0FBK0JiQyxTQUFPLEVBQUU7QUFDUEMsVUFBTSxFQUFFLENBQUM7QUFDUEMsU0FBRyxFQURJO0FBRVBDLFlBQU0sRUFBRUMsWUFGRDtBQUdQQyxXQUFLLEVBQUU7QUFIQSxLQUFEO0FBREQ7QUEvQkksQyIsImZpbGUiOiIuL3NyYy9Db25maWcvY29uZmlnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdwaGFzZXInO1xuaW1wb3J0IEZhZGVQbHVnaW4gZnJvbSAnLi4vLi4vbm9kZV9tb2R1bGVzL3BoYXNlcjMtcmV4LXBsdWdpbnMvcGx1Z2lucy9mYWRlLXBsdWdpbi5qcyc7XG5cbi8vIHThuqFvIGtodW5nIGNobyBnYW1lXG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgdHlwZTogUGhhc2VyLkFVVE8sXG4gIHBhcmVudDogJ3BoYXNlci1leGFtcGxlJyxcbiAgd2lkdGg6IDEwODAsXG4gIGhlaWdodDogNjgwLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcweGZmZmZmZicsXG4gIHNjYWxlOiB7XG5cbiAgICAvLyBhdXRvQ2VudGVyOiBQaGFzZXIuU2NhbGUuQ0VOVEVSX0hPUklaT05UQUxMWSxcbiAgfSxcblxuICAvLyBjw6FpIG7DoHkgZMO5bmcgxJHhu4MgZW5hYmxlIGPDoWkgZG9tIHRyb25nIGJvb3RHYW1lXG4gIGRvbToge1xuICAgIGNyZWF0ZUNvbnRhaW5lcjogdHJ1ZSxcbiAgfSxcblxuICAvLyBjw6FpIG7DoHkgZMO5bmcgxJHhu4MgZW5hYmxlIHBoeXNpY3MgZnVuY3Rpb25cbiAgcGh5c2ljczoge1xuICAgIGRlZmF1bHQ6ICdhcmNhZGUnLFxuICAgIGFyY2FkZToge1xuXG4gICAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB9LFxuICB9LFxuXG4gIC8vIGPDoWkgbsOgeSBkw7luZyDEkeG7gyBlbmFibGUgYXVkaW8gZnVuY3Rpb25cbiAgYXVkaW86IHtcbiAgICBkaXNhYmxlV2ViQXVkaW86IHRydWUsXG4gIH0sXG5cbiAgcGx1Z2luczoge1xuICAgIGdsb2JhbDogW3tcbiAgICAgIGtleTogJ3JleEZhZGUnLFxuICAgICAgcGx1Z2luOiBGYWRlUGx1Z2luLFxuICAgICAgc3RhcnQ6IHRydWUsXG4gICAgfV0sXG4gIH0sXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Config/config.js\n");
 
/***/ }),
 
/***/ "./src/Scenes/Game1Scene2.js":
/*!***********************************!*\
  !*** ./src/Scenes/Game1Scene2.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.isDisplayLastResult = exports.RANGEBLOCK = exports.BLOCK = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nvar _Ball = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Ball */ \"./src/gameObject/Ball.js\"));\n\nvar _Block = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Block */ \"./src/gameObject/Block.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nvar BLOCK = {\n  X: 250,\n  Y: 140\n};\nexports.BLOCK = BLOCK;\nvar RANGEBLOCK = 150;\nexports.RANGEBLOCK = RANGEBLOCK;\nvar isDisplayLastResult = false;\nexports.isDisplayLastResult = isDisplayLastResult;\nvar pos = [0, 0, 0, 0];\n\nvar Game1Scene2 =\n/*#__PURE__*/\nfunction (_Phaser$Scene) {\n  _inherits(Game1Scene2, _Phaser$Scene);\n\n  function Game1Scene2() {\n    _classCallCheck(this, Game1Scene2);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Game1Scene2).call(this, 'Scene2'));\n  }\n\n  _createClass(Game1Scene2, [{\n    key: \"preload\",\n    value: function preload() {\n      this.load.html('question', 'src/InputForm/scene2.html');\n      this.load.html('return', 'src/assets/text/return.html');\n      this.load.image('button', 'src/assets/next.png');\n      this.load.image('dayChau', 'src/assets/arrBlock.png');\n      this.load.image('ballHolder', 'src/assets/thanh.png');\n      this.load.image('ball', 'src/assets/ball.png');\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      this.ReCreate();\n      this.CreateBall();\n      this.CreateQuestionAndInput();\n      this.CreateBlock();\n      this.CreateLanguage();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.CheckAnswerOfSubQuestion();\n      this.MoveBlock(this.input_Index, this.isMoveBlock);\n      this.DisplayNextSubQuestion();\n      this.DisplayLastQuestion();\n      this.DisplayLastResult();\n      this.ResetScene();\n      this.MoveBall();\n    } //------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CheckAnswerOfSubQuestion\",\n    value: function CheckAnswerOfSubQuestion() {\n      if (this.isChekingAnswer === true && this.input_Index <= this.subquestionTotalNumber) {\n        var inputCurrentValue1 = document.getElementById(\"input\".concat((this.input_Index * 2 - 1).toString())).value;\n        var inputCurrentValue2 = document.getElementById(\"input\".concat((this.input_Index * 2).toString())).value;\n\n        if (inputCurrentValue1 !== '' && inputCurrentValue1 !== '1' || inputCurrentValue2 !== '' && inputCurrentValue2 !== '0') {\n          this.isWannaReset = true;\n        }\n\n        if (inputCurrentValue2 !== '' && inputCurrentValue2 === '0') {\n          var text10 = document.createElement('div');\n          text10.appendChild(document.createTextNode('10'));\n          var layoutQuestion = document.getElementById(\"layout_question\".concat(this.input_Index));\n          text10.style.cssText = 'display: inline-block; font-size:45px;';\n          layoutQuestion.replaceChild(text10, document.getElementById(\"answer\".concat(this.input_Index)));\n          this.isMoveBlock = true;\n          this.isChekingAnswer = false;\n          this.input_Index += 1;\n        }\n      }\n    }\n  }, {\n    key: \"MoveBlock\",\n    value: function MoveBlock(input_Index, isMoveBlock) {\n      if (isMoveBlock) {\n        var startPosYBlock = BLOCK.Y + RANGEBLOCK * (input_Index - 2);\n        var destinationPosYBlock = BLOCK.Y + RANGEBLOCK * (input_Index - 1);\n\n        if (input_Index <= this.subquestionTotalNumber) {\n          if (this.block.y === startPosYBlock) {\n            new _Block.default().createArrayBlock(this, BLOCK.X, startPosYBlock);\n          }\n\n          if (this.block.y < destinationPosYBlock) {\n            this.block.y += 3;\n          } else {\n            this.isDisplaySubQuestion = true;\n            this.isMoveBlock = false;\n          }\n        } else {\n          this.isDisplaySubQuestion = true;\n          this.isMoveBlock = false;\n        }\n      }\n\n      return 10;\n    }\n  }, {\n    key: \"DisplayNextSubQuestion\",\n    value: function DisplayNextSubQuestion() {\n      if (this.isDisplaySubQuestion) {\n        if (this.input_Index === 2 && this.subquestionTotalNumber > 1) {\n          $(document).ready(function () {\n            $('#layout_question2').delay(200).fadeIn();\n          });\n          setTimeout(function () {\n            document.getElementById('input3').focus();\n          }, 300);\n        } else if (this.input_Index === 3 && this.subquestionTotalNumber > 2) {\n          $(document).ready(function () {\n            $('#layout_question3').delay(200).fadeIn();\n          });\n          setTimeout(function () {\n            document.getElementById('input5').focus();\n          }, 300);\n        }\n\n        if (this.input_Index > this.subquestionTotalNumber) {\n          this.isDisplayLastQuestion = true;\n        }\n\n        this.isFocus = true;\n        this.isChekingAnswer = true;\n        this.isDisplaySubQuestion = false;\n      }\n    }\n  }, {\n    key: \"DisplayLastQuestion\",\n    value: function DisplayLastQuestion() {\n      if (this.isDisplayLastQuestion) {\n        $(document).ready(function () {\n          $('#layout_lastquestion').delay(200).fadeIn();\n        });\n        this.isDisplayLastQuestion = false;\n      }\n    }\n  }, {\n    key: \"DisplayLastResult\",\n    value: function DisplayLastResult() {\n      if (isDisplayLastResult) {\n        var desEnd = (RANGEBLOCK - 20) * (subquestionTotalNumber - 1 + 1) + 20 * (subquestionTotalNumber - 1);\n\n        for (var i = 1; i <= subquestionTotalNumber; i += 1) {\n          var body = document.getElementById(\"panelresult\".concat(i));\n          var destination = (RANGEBLOCK - 20) * (subquestionTotalNumber - i + 1) + 20 * (subquestionTotalNumber - i);\n\n          if (pos[i] !== destination) {\n            pos[i] += 2;\n            body.style.top = \"\".concat(pos[i], \"px\");\n          }\n        }\n\n        if (pos[1] === desEnd) {\n          for (var _i = 1; _i <= subquestionTotalNumber; _i++) {\n            if (_i !== subquestionTotalNumber) {\n              document.getElementById(\"panelresult\".concat(_i)).style.border = '0px';\n            }\n\n            document.getElementById(\"panelresult\".concat(_i)).style.display = 'none';\n          }\n\n          document.getElementById('layout_lastquestion').style.display = 'none';\n          document.getElementById(\"panelresult\".concat(subquestionTotalNumber)).innerText = (subquestionTotalNumber * 10).toString();\n          $(document).ready(function () {\n            for (var _i2 = 1; _i2 <= subquestionTotalNumber; _i2++) {\n              $(\"#panelresult\".concat(_i2)).delay(200).fadeIn();\n            }\n\n            $('#layout_lastquestion').delay(200).fadeIn();\n          });\n          exports.isDisplayLastResult = isDisplayLastResult = false;\n          this.isResetScene = true;\n        }\n      }\n    }\n  }, {\n    key: \"ResetScene\",\n    value: function ResetScene() {\n      var _this = this;\n\n      if (this.isResetScene) {\n        if (this.isWannaReset) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this.scene.start('Scene2');\n            },\n            repeat: 0\n          });\n        } else {\n          this.isMoveBall = true;\n        }\n      }\n    }\n  }, {\n    key: \"MoveBall\",\n    value: function MoveBall() {\n      var _this2 = this;\n\n      if (this.isMoveBall) {\n        if (this.ball_Last.x < 740) {\n          this.ball_Last.x += 3;\n        } else {\n          this.time.addEvent({\n            delay: 2000,\n            callback: function callback() {\n              // window.location.href = 'https://example.com/'\n              _this2.scene.start('Scene3');\n            },\n            repeat: 0\n          });\n        }\n      }\n    } //-----------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CreateBlock\",\n    value: function CreateBlock() {\n      this.block = new _Block.default().createArrayBlock(this, BLOCK.X, BLOCK.Y);\n    }\n  }, {\n    key: \"CreateBall\",\n    value: function CreateBall() {\n      this.add.image(540, 30, 'ballHolder');\n\n      this.ball_Last = function (scene) {\n        var ball = new _Ball.default();\n        ball.create(scene, 770, 29);\n\n        for (var i = 0; i < 4; i++) {\n          var temp = ball.create(scene, 310 + 30 * i, 29);\n        }\n\n        return temp;\n      }(this);\n    }\n  }, {\n    key: \"CreateQuestionAndInput\",\n    value: function CreateQuestionAndInput() {\n      this.question_TotalNumber = 3;\n      this.input_Index = 1;\n      this.question_Sub = this.add.dom(750, 150).createFromCache('question');\n\n      for (var i = 1; i <= this.question_TotalNumber; i++) {\n        var tmp = document.getElementById(\"input\".concat((i * 2).toString()));\n        this.input_Value_arr.push(tmp.value);\n      }\n\n      document.getElementById('input1').focus();\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"CreateLanguage\",\n    value: function CreateLanguage() {\n      if (window.location.hash === '#vietnam') {\n        var question = document.getElementsByClassName('question');\n        console.log(question.length);\n        var wordendquestion = document.getElementsByClassName('word_end_question');\n        var thought = document.getElementsByClassName('result');\n\n        for (var i = 0; i < question.length; i++) {\n          question[i].innerHTML = 'Hình bên có ';\n          wordendquestion[i].innerHTML = ' khối';\n          thought[i].innerHTML = 'Hình bên có 10 khối.';\n        }\n\n        document.getElementById('lastques').innerHTML = 'Tổng số khối bên trên?';\n      }\n    }\n  }, {\n    key: \"ReCreate\",\n    value: function ReCreate() {\n      this.fade = null;\n      this.ball_Last = null; // this.subquestionTotalNumber = Math.floor(Math.random() * (3 - 2 + 1) + 2);\n\n      this.subquestionTotalNumber = 3;\n      this.input_Index = 1;\n      this.question_Index = 1;\n      this.question_Sub = null;\n      this.input_Value_arr = [];\n      this.block = null;\n      this.isMoveBlock = false;\n      this.isDisplaySubQuestion = false;\n      this.isChekingAnswer = true;\n      this.isWannaReset = false;\n      this.isResetScene = false;\n      this.isDisplayLastQuestion = false;\n      this.isMoveBall = false;\n      exports.isDisplayLastResult = isDisplayLastResult = false;\n      subquestionTotalNumber = this.subquestionTotalNumber;\n      pos = [0, 0, 0, 0];\n    }\n  }]);\n\n  return Game1Scene2;\n}(Phaser.Scene);\n\nexports.default = Game1Scene2;\nvar subquestionTotalNumber; // eslint-disable-next-line camelcase\n\nwindow.Click_Button = function Click_Button() {\n  document.getElementById('button').style.display = 'none';\n\n  for (var i = 1; i <= subquestionTotalNumber; i++) {\n    var resultPanel = document.createElement('div');\n    resultPanel.id = \"panelresult\".concat(i.toString());\n    var body = document.getElementById('body');\n    var text = document.createTextNode('10');\n    resultPanel.appendChild(text);\n    resultPanel.style.cssText = 'display:none; position: relative;border-radius: 25px; background: #FFFFFF; padding: 20px;width: 40px;height: 40px; font-size:35px; align-text:center; border: 1px solid; box-shadow: 5px 10px #d3d3d3';\n    var beReplaced = document.getElementById(\"layout_question\".concat(i));\n    body.replaceChild(resultPanel, beReplaced);\n  }\n\n  document.getElementById('layout_lastquestion').style.display = 'none'; // document.getElementById('layout_lastquestion').style.position = \"absolute\";\n\n  $(document).ready(function () {\n    for (var _i3 = 1; _i3 <= subquestionTotalNumber; _i3++) {\n      $(\"#panelresult\".concat(_i3)).delay(200).fadeIn();\n    }\n\n    $('#layout_lastquestion').delay(200).fadeIn();\n  });\n  exports.isDisplayLastResult = isDisplayLastResult = true;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmVzL0dhbWUxU2NlbmUyLmpzPzFjNWIiXSwibmFtZXMiOlsiQkxPQ0siLCJYIiwiWSIsIlJBTkdFQkxPQ0siLCJpc0Rpc3BsYXlMYXN0UmVzdWx0IiwicG9zIiwiR2FtZTFTY2VuZTIiLCJpbnB1dEN1cnJlbnRWYWx1ZTEiLCJkb2N1bWVudCIsImlucHV0Q3VycmVudFZhbHVlMiIsInRleHQxMCIsImxheW91dFF1ZXN0aW9uIiwiaW5wdXRfSW5kZXgiLCJpc01vdmVCbG9jayIsInN0YXJ0UG9zWUJsb2NrIiwiZGVzdGluYXRpb25Qb3NZQmxvY2siLCJCbG9jayIsIiQiLCJzZXRUaW1lb3V0IiwiZGVzRW5kIiwic3VicXVlc3Rpb25Ub3RhbE51bWJlciIsImkiLCJib2R5IiwiZGVzdGluYXRpb24iLCJkZWxheSIsImNhbGxiYWNrIiwicmVwZWF0IiwiYmFsbCIsIkJhbGwiLCJ0ZW1wIiwidG1wIiwid2luZG93IiwicXVlc3Rpb24iLCJjb25zb2xlIiwid29yZGVuZHF1ZXN0aW9uIiwidGhvdWdodCIsIlBoYXNlciIsIlNjZW5lIiwicmVzdWx0UGFuZWwiLCJ0ZXh0IiwiYmVSZXBsYWNlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBU0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFTyxJQUFNQSxLQUFLLEdBQUc7QUFDbkJDLEdBQUMsRUFEa0I7QUFFbkJDLEdBQUMsRUFBRTtBQUZnQixDQUFkOztBQUtBLElBQU1DLFVBQVUsR0FBaEI7O0FBQ0EsSUFBSUMsbUJBQW1CLEdBQXZCOztBQUNQLElBQUlDLEdBQUcsR0FBRyxVQUFWLENBQVUsQ0FBVjs7SUFDcUJDLFc7Ozs7O0FBQ25CLHlCQUFjO0FBQUE7O0FBQUE7QUFFYjs7Ozs4QkFFUztBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNEOzs7NkJBRVE7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7Ozs2QkFFUTtBQUNQO0FBQ0EscUJBQWUsS0FBZixhQUFpQyxLQUFqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFHRjs7OzsrQ0FFMkI7QUFDekIsVUFBSSxpQ0FBaUMsb0JBQW9CLEtBQXpELHdCQUFzRjtBQUNwRixZQUFNQyxrQkFBa0IsR0FBR0MsUUFBUSxDQUFSQSw4QkFBZ0MsQ0FBQyx1QkFBRCxHQUFoQ0EsUUFBZ0MsRUFBaENBLEdBQTNCO0FBQ0EsWUFBTUMsa0JBQWtCLEdBQUdELFFBQVEsQ0FBUkEsOEJBQWdDLENBQUMsbUJBQUQsR0FBaENBLFFBQWdDLEVBQWhDQSxHQUEzQjs7QUFFQSxZQUFLRCxrQkFBa0IsS0FBbEJBLE1BQTZCQSxrQkFBa0IsS0FBaEQsR0FBQ0EsSUFDRUUsa0JBQWtCLEtBQWxCQSxNQUE2QkEsa0JBQWtCLEtBRHRELEtBQ2lFO0FBQy9EO0FBQ0Q7O0FBQ0QsWUFBSUEsa0JBQWtCLEtBQWxCQSxNQUE2QkEsa0JBQWtCLEtBQW5ELEtBQTZEO0FBQzNELGNBQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFSQSxjQUFmLEtBQWVBLENBQWY7QUFDQUUsZ0JBQU0sQ0FBTkEsWUFBbUJGLFFBQVEsQ0FBUkEsZUFBbkJFLElBQW1CRixDQUFuQkU7QUFDQSxjQUFNQyxjQUFjLEdBQUdILFFBQVEsQ0FBUkEsd0NBQTBDLEtBQWpFLFdBQXVCQSxFQUF2QjtBQUNBRSxnQkFBTSxDQUFOQTtBQUNBQyx3QkFBYyxDQUFkQSxxQkFBb0NILFFBQVEsQ0FBUkEsK0JBQWlDLEtBQXJFRyxXQUFvQ0gsRUFBcENHO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7QUFDRjtBQUNGOzs7OEJBRVNDLFcsRUFBYUMsVyxFQUFhO0FBQ2xDLHVCQUFpQjtBQUNmLFlBQU1DLGNBQWMsR0FBR2QsS0FBSyxDQUFMQSxJQUFVRyxVQUFVLElBQUlTLFdBQVcsR0FBMUQsQ0FBMkMsQ0FBM0M7QUFDQSxZQUFNRyxvQkFBb0IsR0FBR2YsS0FBSyxDQUFMQSxJQUFVRyxVQUFVLElBQUlTLFdBQVcsR0FBaEUsQ0FBaUQsQ0FBakQ7O0FBQ0EsWUFBSUEsV0FBVyxJQUFJLEtBQW5CLHdCQUFnRDtBQUM5QyxjQUFJLGlCQUFKLGdCQUFxQztBQUNsQyxnQkFBSUksT0FBTCxPQUFDLEdBQUQsZ0JBQUMsQ0FBRCxJQUFDLEVBQW9DaEIsS0FBSyxDQUExQyxDQUFDLEVBQUQsY0FBQztBQUNGOztBQUNELGNBQUksZUFBSixzQkFBeUM7QUFDdkM7QUFERixpQkFFTztBQUNMO0FBQ0E7QUFDRDtBQVRILGVBVU87QUFDTDtBQUNBO0FBQ0Q7QUFDRjs7QUFDRDtBQUNEOzs7NkNBRXdCO0FBQ3ZCLFVBQUksS0FBSixzQkFBK0I7QUFDN0IsWUFBSSwwQkFBMEIsOEJBQTlCLEdBQStEO0FBQzdEaUIsV0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEJBLGFBQUMsQ0FBREEsbUJBQUMsQ0FBREE7QUFERkE7QUFHQUMsb0JBQVUsQ0FBQyxZQUFNO0FBQ2ZWLG9CQUFRLENBQVJBO0FBRFEsYUFBVlUsR0FBVSxDQUFWQTtBQUpGLGVBT08sSUFBSSwwQkFBMEIsOEJBQTlCLEdBQStEO0FBQ3BFRCxXQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsYUFBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQURGQTtBQUdBQyxvQkFBVSxDQUFDLFlBQU07QUFDZlYsb0JBQVEsQ0FBUkE7QUFEUSxhQUFWVSxHQUFVLENBQVZBO0FBR0Q7O0FBQ0QsWUFBSSxtQkFBbUIsS0FBdkIsd0JBQW9EO0FBQ2xEO0FBQ0Q7O0FBQ0Q7QUFDQTtBQUNBO0FBQ0Q7QUFDRjs7OzBDQUVxQjtBQUNwQixVQUFJLEtBQUosdUJBQWdDO0FBQzlCRCxTQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsV0FBQyxDQUFEQSxzQkFBQyxDQUFEQTtBQURGQTtBQUdBO0FBQ0Q7QUFDRjs7O3dDQUVtQjtBQUNsQiwrQkFBeUI7QUFDdkIsWUFBTUUsTUFBTSxHQUFHLENBQUNoQixVQUFVLEdBQVgsT0FBcUJpQixzQkFBc0IsR0FBdEJBLElBQXJCLEtBQ0csTUFBTUEsc0JBQXNCLEdBRDlDLENBQ2tCLENBRGxCOztBQUVBLGFBQUssSUFBSUMsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLElBQWpCLHdCQUE2Q0EsQ0FBQyxJQUE5QyxHQUFxRDtBQUNuRCxjQUFNQyxJQUFJLEdBQUdkLFFBQVEsQ0FBUkEsb0NBQWIsQ0FBYUEsRUFBYjtBQUNBLGNBQU1lLFdBQVcsR0FBRyxDQUFDcEIsVUFBVSxHQUFYLE9BQXFCaUIsc0JBQXNCLEdBQXRCQSxJQUFyQixLQUNHLE1BQU1BLHNCQUFzQixHQURuRCxDQUN1QixDQUR2Qjs7QUFFQSxjQUFJZixHQUFHLENBQUhBLENBQUcsQ0FBSEEsS0FBSixhQUE0QjtBQUMxQkEsZUFBRyxDQUFIQSxDQUFHLENBQUhBO0FBQ0FpQixnQkFBSSxDQUFKQSxzQkFBb0JqQixHQUFHLENBQXZCaUIsQ0FBdUIsQ0FBdkJBO0FBQ0Q7QUFDRjs7QUFDRCxZQUFJakIsR0FBRyxDQUFIQSxDQUFHLENBQUhBLEtBQUosUUFBdUI7QUFDckIsZUFBSyxJQUFJZ0IsRUFBQyxHQUFWLEdBQWdCQSxFQUFDLElBQWpCLHdCQUE2Q0EsRUFBN0MsSUFBa0Q7QUFDaEQsZ0JBQUlBLEVBQUMsS0FBTCx3QkFBa0M7QUFDaENiLHNCQUFRLENBQVJBO0FBQ0Q7O0FBQ0RBLG9CQUFRLENBQVJBO0FBQ0Q7O0FBQ0RBLGtCQUFRLENBQVJBO0FBQ0FBLGtCQUFRLENBQVJBLHlFQUE0RSxDQUFDWSxzQkFBc0IsR0FBdkIsSUFBNUVaLFFBQTRFLEVBQTVFQTtBQUNBUyxXQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QixpQkFBSyxJQUFJSSxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsSUFBakIsd0JBQTZDQSxHQUE3QyxJQUFrRDtBQUNoREosZUFBQyx1QkFBREEsR0FBQyxFQUFEQTtBQUNEOztBQUNEQSxhQUFDLENBQURBLHNCQUFDLENBQURBO0FBSkZBO0FBTUEsMkRBQW1CLEdBQW5CO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7OztpQ0FFWTtBQUFBOztBQUNYLFVBQUksS0FBSixjQUF1QjtBQUNyQixZQUFJLEtBQUosY0FBdUI7QUFDckIsNkJBQW1CO0FBQ2pCTyxpQkFBSyxFQURZO0FBRWpCQyxvQkFBUSxFQUFFLG9CQUFNO0FBQ2QsbUJBQUksQ0FBSjtBQUhlO0FBS2pCQyxrQkFBTSxFQUFFO0FBTFMsV0FBbkI7QUFERixlQVFPO0FBQ0w7QUFDRDtBQUNGO0FBQ0Y7OzsrQkFFVTtBQUFBOztBQUNULFVBQUksS0FBSixZQUFxQjtBQUNuQixZQUFJLG1CQUFKLEtBQTRCO0FBQzFCO0FBREYsZUFFTztBQUNMLDZCQUFtQjtBQUNqQkYsaUJBQUssRUFEWTtBQUVqQkMsb0JBQVEsRUFBRSxvQkFBTTtBQUNkO0FBQ0Esb0JBQUksQ0FBSjtBQUplO0FBTWpCQyxrQkFBTSxFQUFFO0FBTlMsV0FBbkI7QUFRRDtBQUNGO01BR0g7Ozs7a0NBRWM7QUFDWixtQkFBYyxJQUFJVixPQUFMLE9BQUMsR0FBRCxnQkFBQyxDQUFELElBQUMsRUFBb0NoQixLQUFLLENBQTFDLENBQUMsRUFBNkNBLEtBQUssQ0FBaEUsQ0FBYyxDQUFkO0FBQ0Q7OztpQ0FFWTtBQUNYOztBQUNBLHVCQUFrQixpQkFBaUI7QUFDakMsWUFBTTJCLElBQUksR0FBRyxJQUFJQyxNQUFqQixPQUFhLEVBQWI7QUFDQUQsWUFBSSxDQUFKQTs7QUFDQSxhQUFLLElBQUlOLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixHQUF1QkEsQ0FBdkIsSUFBNEI7QUFDMUIsY0FBSVEsSUFBSSxHQUFHRixJQUFJLENBQUpBLGNBQW1CLE1BQU0sS0FBekJBLEdBQVgsRUFBV0EsQ0FBWDtBQUNEOztBQUNEO0FBTmdCLFFBQWxCLElBQWtCLENBQWxCO0FBUUQ7Ozs2Q0FFd0I7QUFDdkI7QUFDQTtBQUNBLDBCQUFvQix1Q0FBcEIsVUFBb0IsQ0FBcEI7O0FBQ0EsV0FBSyxJQUFJTixDQUFDLEdBQVYsR0FBZ0JBLENBQUMsSUFBSSxLQUFyQixzQkFBZ0RBLENBQWhELElBQXFEO0FBQ25ELFlBQU1TLEdBQUcsR0FBR3RCLFFBQVEsQ0FBUkEsOEJBQWdDLENBQUNhLENBQUMsR0FBRixHQUE1QyxRQUE0QyxFQUFoQ2IsRUFBWjtBQUNBLGtDQUEwQnNCLEdBQUcsQ0FBN0I7QUFDRDs7QUFDRHRCLGNBQVEsQ0FBUkE7TUFHRjs7OztxQ0FDaUI7QUFDZixVQUFJdUIsTUFBTSxDQUFOQSxrQkFBSixZQUF5QztBQUN2QyxZQUFNQyxRQUFRLEdBQUd4QixRQUFRLENBQVJBLHVCQUFqQixVQUFpQkEsQ0FBakI7QUFDQXlCLGVBQU8sQ0FBUEEsSUFBWUQsUUFBUSxDQUFwQkM7QUFFQSxZQUFNQyxlQUFlLEdBQUcxQixRQUFRLENBQVJBLHVCQUF4QixtQkFBd0JBLENBQXhCO0FBQ0EsWUFBTTJCLE9BQU8sR0FBRzNCLFFBQVEsQ0FBUkEsdUJBQWhCLFFBQWdCQSxDQUFoQjs7QUFDQSxhQUFLLElBQUlhLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFHVyxRQUFRLENBQTVCLFFBQXFDWCxDQUFyQyxJQUEwQztBQUN4Q1csa0JBQVEsQ0FBUkEsQ0FBUSxDQUFSQTtBQUNBRSx5QkFBZSxDQUFmQSxDQUFlLENBQWZBO0FBQ0FDLGlCQUFPLENBQVBBLENBQU8sQ0FBUEE7QUFDRDs7QUFDRDNCLGdCQUFRLENBQVJBO0FBQ0Q7QUFDRjs7OytCQUdVO0FBQ1Q7QUFDQSx1QkFGUyxJQUVULENBRlMsQ0FHVDs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUFtQixHQUFuQjtBQUNBWSw0QkFBc0IsR0FBRyxLQUF6QkE7QUFDQWYsU0FBRyxHQUFHLFVBQU5BLENBQU0sQ0FBTkE7QUFDRDs7OztFQXZQc0MrQixNQUFNLENBQUNDLEs7OztBQXlQaEQsMkIsQ0FFQTs7QUFDQU4sTUFBTSxDQUFOQSxlQUFzQix3QkFBd0I7QUFDNUN2QixVQUFRLENBQVJBOztBQUVBLE9BQUssSUFBSWEsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLElBQWpCLHdCQUE2Q0EsQ0FBN0MsSUFBa0Q7QUFDaEQsUUFBTWlCLFdBQVcsR0FBRzlCLFFBQVEsQ0FBUkEsY0FBcEIsS0FBb0JBLENBQXBCO0FBRUE4QixlQUFXLENBQVhBLDBCQUFnQ2pCLENBQUQsQ0FBL0JpQixRQUFnQ2pCLEVBQWhDaUI7QUFDQSxRQUFNaEIsSUFBSSxHQUFHZCxRQUFRLENBQVJBLGVBQWIsTUFBYUEsQ0FBYjtBQUNBLFFBQU0rQixJQUFJLEdBQUcvQixRQUFRLENBQVJBLGVBQWIsSUFBYUEsQ0FBYjtBQUNBOEIsZUFBVyxDQUFYQTtBQUNBQSxlQUFXLENBQVhBO0FBQ0EsUUFBTUUsVUFBVSxHQUFHaEMsUUFBUSxDQUFSQSx3Q0FBbkIsQ0FBbUJBLEVBQW5CO0FBQ0FjLFFBQUksQ0FBSkE7QUFDRDs7QUFFRGQsVUFBUSxDQUFSQSxzREFmNEMsTUFlNUNBLENBZjRDLENBZ0I1Qzs7QUFDQVMsR0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEIsU0FBSyxJQUFJSSxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsSUFBakIsd0JBQTZDQSxHQUE3QyxJQUFrRDtBQUNoREosT0FBQyx1QkFBREEsR0FBQyxFQUFEQTtBQUNEOztBQUNEQSxLQUFDLENBQURBLHNCQUFDLENBQURBO0FBSkZBO0FBTUEsbURBQW1CLEdBQW5CO0FBdkJGYyIsImZpbGUiOiIuL3NyYy9TY2VuZXMvR2FtZTFTY2VuZTIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBibG9jay1zY29wZWQtdmFyICovXG4vKiBlc2xpbnQtZGlzYWJsZSB2YXJzLW9uLXRvcCAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgJ3BoYXNlcic7XG5pbXBvcnQgQmFsbCBmcm9tICcuLi9nYW1lT2JqZWN0L0JhbGwnO1xuaW1wb3J0IEJsb2NrIGZyb20gJy4uL2dhbWVPYmplY3QvQmxvY2snO1xuXG5leHBvcnQgY29uc3QgQkxPQ0sgPSB7XG4gIFg6IDI1MCxcbiAgWTogMTQwLFxufTtcblxuZXhwb3J0IGNvbnN0IFJBTkdFQkxPQ0sgPSAxNTA7XG5leHBvcnQgdmFyIGlzRGlzcGxheUxhc3RSZXN1bHQgPSBmYWxzZTtcbnZhciBwb3MgPSBbMCwgMCwgMCwgMF07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lMVNjZW5lMiBleHRlbmRzIFBoYXNlci5TY2VuZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdTY2VuZTInKTtcbiAgfVxuXG4gIHByZWxvYWQoKSB7XG4gICAgdGhpcy5sb2FkLmh0bWwoJ3F1ZXN0aW9uJywgJ3NyYy9JbnB1dEZvcm0vc2NlbmUyLmh0bWwnKTtcbiAgICB0aGlzLmxvYWQuaHRtbCgncmV0dXJuJywgJ3NyYy9hc3NldHMvdGV4dC9yZXR1cm4uaHRtbCcpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYnV0dG9uJywgJ3NyYy9hc3NldHMvbmV4dC5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2RheUNoYXUnLCAnc3JjL2Fzc2V0cy9hcnJCbG9jay5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2JhbGxIb2xkZXInLCAnc3JjL2Fzc2V0cy90aGFuaC5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2JhbGwnLCAnc3JjL2Fzc2V0cy9iYWxsLnBuZycpO1xuICB9XG5cbiAgY3JlYXRlKCkge1xuICAgIHRoaXMuUmVDcmVhdGUoKTtcbiAgICB0aGlzLkNyZWF0ZUJhbGwoKTtcbiAgICB0aGlzLkNyZWF0ZVF1ZXN0aW9uQW5kSW5wdXQoKTtcbiAgICB0aGlzLkNyZWF0ZUJsb2NrKCk7XG4gICAgdGhpcy5DcmVhdGVMYW5ndWFnZSgpO1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuQ2hlY2tBbnN3ZXJPZlN1YlF1ZXN0aW9uKCk7XG4gICAgdGhpcy5Nb3ZlQmxvY2sodGhpcy5pbnB1dF9JbmRleCwgdGhpcy5pc01vdmVCbG9jayk7XG4gICAgdGhpcy5EaXNwbGF5TmV4dFN1YlF1ZXN0aW9uKCk7XG4gICAgdGhpcy5EaXNwbGF5TGFzdFF1ZXN0aW9uKCk7XG4gICAgdGhpcy5EaXNwbGF5TGFzdFJlc3VsdCgpO1xuICAgIHRoaXMuUmVzZXRTY2VuZSgpO1xuICAgIHRoaXMuTW92ZUJhbGwoKTtcbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgQ2hlY2tBbnN3ZXJPZlN1YlF1ZXN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzQ2hla2luZ0Fuc3dlciA9PT0gdHJ1ZSAmJiB0aGlzLmlucHV0X0luZGV4IDw9IHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlcikge1xuICAgICAgY29uc3QgaW5wdXRDdXJyZW50VmFsdWUxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHsodGhpcy5pbnB1dF9JbmRleCAqIDIgLSAxKS50b1N0cmluZygpfWApLnZhbHVlO1xuICAgICAgY29uc3QgaW5wdXRDdXJyZW50VmFsdWUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHsodGhpcy5pbnB1dF9JbmRleCAqIDIpLnRvU3RyaW5nKCl9YCkudmFsdWU7XG5cbiAgICAgIGlmICgoaW5wdXRDdXJyZW50VmFsdWUxICE9PSAnJyAmJiBpbnB1dEN1cnJlbnRWYWx1ZTEgIT09ICcxJylcbiAgICAgICAgIHx8IChpbnB1dEN1cnJlbnRWYWx1ZTIgIT09ICcnICYmIGlucHV0Q3VycmVudFZhbHVlMiAhPT0gJzAnKSkge1xuICAgICAgICB0aGlzLmlzV2FubmFSZXNldCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRDdXJyZW50VmFsdWUyICE9PSAnJyAmJiBpbnB1dEN1cnJlbnRWYWx1ZTIgPT09ICcwJykge1xuICAgICAgICBjb25zdCB0ZXh0MTAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGV4dDEwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcxMCcpKTtcbiAgICAgICAgY29uc3QgbGF5b3V0UXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbGF5b3V0X3F1ZXN0aW9uJHt0aGlzLmlucHV0X0luZGV4fWApO1xuICAgICAgICB0ZXh0MTAuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTo0NXB4Oyc7XG4gICAgICAgIGxheW91dFF1ZXN0aW9uLnJlcGxhY2VDaGlsZCh0ZXh0MTAsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBhbnN3ZXIke3RoaXMuaW5wdXRfSW5kZXh9YCkpO1xuICAgICAgICB0aGlzLmlzTW92ZUJsb2NrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoZWtpbmdBbnN3ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dF9JbmRleCArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIE1vdmVCbG9jayhpbnB1dF9JbmRleCwgaXNNb3ZlQmxvY2spIHtcbiAgICBpZiAoaXNNb3ZlQmxvY2spIHtcbiAgICAgIGNvbnN0IHN0YXJ0UG9zWUJsb2NrID0gQkxPQ0suWSArIFJBTkdFQkxPQ0sgKiAoaW5wdXRfSW5kZXggLSAyKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUG9zWUJsb2NrID0gQkxPQ0suWSArIFJBTkdFQkxPQ0sgKiAoaW5wdXRfSW5kZXggLSAxKTtcbiAgICAgIGlmIChpbnB1dF9JbmRleCA8PSB0aGlzLnN1YnF1ZXN0aW9uVG90YWxOdW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2sueSA9PT0gc3RhcnRQb3NZQmxvY2spIHtcbiAgICAgICAgICAobmV3IEJsb2NrKCkpLmNyZWF0ZUFycmF5QmxvY2sodGhpcywgQkxPQ0suWCwgc3RhcnRQb3NZQmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJsb2NrLnkgPCBkZXN0aW5hdGlvblBvc1lCbG9jaykge1xuICAgICAgICAgIHRoaXMuYmxvY2sueSArPSAzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNEaXNwbGF5U3ViUXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDEwO1xuICB9XG5cbiAgRGlzcGxheU5leHRTdWJRdWVzdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbikge1xuICAgICAgaWYgKHRoaXMuaW5wdXRfSW5kZXggPT09IDIgJiYgdGhpcy5zdWJxdWVzdGlvblRvdGFsTnVtYmVyID4gMSkge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjInKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0MycpLmZvY3VzKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRfSW5kZXggPT09IDMgJiYgdGhpcy5zdWJxdWVzdGlvblRvdGFsTnVtYmVyID4gMikge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjMnKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0NScpLmZvY3VzKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnB1dF9JbmRleCA+IHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlcikge1xuICAgICAgICB0aGlzLmlzRGlzcGxheUxhc3RRdWVzdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmlzRm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5pc0NoZWtpbmdBbnN3ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIERpc3BsYXlMYXN0UXVlc3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TGFzdFF1ZXN0aW9uKSB7XG4gICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICQoJyNsYXlvdXRfbGFzdHF1ZXN0aW9uJykuZGVsYXkoMjAwKS5mYWRlSW4oKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc0Rpc3BsYXlMYXN0UXVlc3Rpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBEaXNwbGF5TGFzdFJlc3VsdCgpIHtcbiAgICBpZiAoaXNEaXNwbGF5TGFzdFJlc3VsdCkge1xuICAgICAgY29uc3QgZGVzRW5kID0gKFJBTkdFQkxPQ0sgLSAyMCkgKiAoc3VicXVlc3Rpb25Ub3RhbE51bWJlciAtIDEgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICsgMjAgKiAoc3VicXVlc3Rpb25Ub3RhbE51bWJlciAtIDEpO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc3VicXVlc3Rpb25Ub3RhbE51bWJlcjsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcGFuZWxyZXN1bHQke2l9YCk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gKFJBTkdFQkxPQ0sgLSAyMCkgKiAoc3VicXVlc3Rpb25Ub3RhbE51bWJlciAtIGkgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDIwICogKHN1YnF1ZXN0aW9uVG90YWxOdW1iZXIgLSBpKTtcbiAgICAgICAgaWYgKHBvc1tpXSAhPT0gZGVzdGluYXRpb24pIHtcbiAgICAgICAgICBwb3NbaV0gKz0gMjtcbiAgICAgICAgICBib2R5LnN0eWxlLnRvcCA9IGAke3Bvc1tpXX1weGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb3NbMV0gPT09IGRlc0VuZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdWJxdWVzdGlvblRvdGFsTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSAhPT0gc3VicXVlc3Rpb25Ub3RhbE51bWJlcikge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHBhbmVscmVzdWx0JHtpfWApLnN0eWxlLmJvcmRlciA9ICcwcHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcGFuZWxyZXN1bHQke2l9YCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0X2xhc3RxdWVzdGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBwYW5lbHJlc3VsdCR7c3VicXVlc3Rpb25Ub3RhbE51bWJlcn1gKS5pbm5lclRleHQgPSAoc3VicXVlc3Rpb25Ub3RhbE51bWJlciAqIDEwKS50b1N0cmluZygpO1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc3VicXVlc3Rpb25Ub3RhbE51bWJlcjsgaSsrKSB7XG4gICAgICAgICAgICAkKGAjcGFuZWxyZXN1bHQke2l9YCkuZGVsYXkoMjAwKS5mYWRlSW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgJCgnI2xheW91dF9sYXN0cXVlc3Rpb24nKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXNEaXNwbGF5TGFzdFJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVzZXRTY2VuZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgUmVzZXRTY2VuZSgpIHtcbiAgICBpZiAodGhpcy5pc1Jlc2V0U2NlbmUpIHtcbiAgICAgIGlmICh0aGlzLmlzV2FubmFSZXNldCkge1xuICAgICAgICB0aGlzLnRpbWUuYWRkRXZlbnQoe1xuICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN0YXJ0KCdTY2VuZTInKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcGVhdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTW92ZUJhbGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIE1vdmVCYWxsKCkge1xuICAgIGlmICh0aGlzLmlzTW92ZUJhbGwpIHtcbiAgICAgIGlmICh0aGlzLmJhbGxfTGFzdC54IDwgNzQwKSB7XG4gICAgICAgIHRoaXMuYmFsbF9MYXN0LnggKz0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZS5hZGRFdmVudCh7XG4gICAgICAgICAgZGVsYXk6IDIwMDAsXG4gICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vJ1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5zdGFydCgnU2NlbmUzJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBDcmVhdGVCbG9jaygpIHtcbiAgICB0aGlzLmJsb2NrID0gKG5ldyBCbG9jaygpKS5jcmVhdGVBcnJheUJsb2NrKHRoaXMsIEJMT0NLLlgsIEJMT0NLLlkpO1xuICB9XG5cbiAgQ3JlYXRlQmFsbCgpIHtcbiAgICB0aGlzLmFkZC5pbWFnZSg1NDAsIDMwLCAnYmFsbEhvbGRlcicpO1xuICAgIHRoaXMuYmFsbF9MYXN0ID0gKGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgY29uc3QgYmFsbCA9IG5ldyBCYWxsKCk7XG4gICAgICBiYWxsLmNyZWF0ZShzY2VuZSwgNzcwLCAyOSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICB2YXIgdGVtcCA9IGJhbGwuY3JlYXRlKHNjZW5lLCAzMTAgKyAzMCAqIGksIDI5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wO1xuICAgIH0odGhpcykpO1xuICB9XG5cbiAgQ3JlYXRlUXVlc3Rpb25BbmRJbnB1dCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uX1RvdGFsTnVtYmVyID0gMztcbiAgICB0aGlzLmlucHV0X0luZGV4ID0gMTtcbiAgICB0aGlzLnF1ZXN0aW9uX1N1YiA9IHRoaXMuYWRkLmRvbSg3NTAsIDE1MCkuY3JlYXRlRnJvbUNhY2hlKCdxdWVzdGlvbicpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucXVlc3Rpb25fVG90YWxOdW1iZXI7IGkrKykge1xuICAgICAgY29uc3QgdG1wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHsoaSAqIDIpLnRvU3RyaW5nKCl9YCk7XG4gICAgICB0aGlzLmlucHV0X1ZhbHVlX2Fyci5wdXNoKHRtcC52YWx1ZSk7XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dDEnKS5mb2N1cygpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgQ3JlYXRlTGFuZ3VhZ2UoKSB7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAnI3ZpZXRuYW0nKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3F1ZXN0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZyhxdWVzdGlvbi5sZW5ndGgpO1xuXG4gICAgICBjb25zdCB3b3JkZW5kcXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd3b3JkX2VuZF9xdWVzdGlvbicpO1xuICAgICAgY29uc3QgdGhvdWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Jlc3VsdCcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVzdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBxdWVzdGlvbltpXS5pbm5lckhUTUwgPSAnSMOsbmggYsOqbiBjw7MgJztcbiAgICAgICAgd29yZGVuZHF1ZXN0aW9uW2ldLmlubmVySFRNTCA9ICcga2jhu5FpJztcbiAgICAgICAgdGhvdWdodFtpXS5pbm5lckhUTUwgPSAnSMOsbmggYsOqbiBjw7MgMTAga2jhu5FpLic7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFzdHF1ZXMnKS5pbm5lckhUTUwgPSAnVOG7lW5nIHPhu5Ega2jhu5FpIGLDqm4gdHLDqm4/JztcbiAgICB9XG4gIH1cblxuXG4gIFJlQ3JlYXRlKCkge1xuICAgIHRoaXMuZmFkZSA9IG51bGw7XG4gICAgdGhpcy5iYWxsX0xhc3QgPSBudWxsO1xuICAgIC8vIHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgzIC0gMiArIDEpICsgMik7XG4gICAgdGhpcy5zdWJxdWVzdGlvblRvdGFsTnVtYmVyID0gMztcbiAgICB0aGlzLmlucHV0X0luZGV4ID0gMTtcbiAgICB0aGlzLnF1ZXN0aW9uX0luZGV4ID0gMTtcbiAgICB0aGlzLnF1ZXN0aW9uX1N1YiA9IG51bGw7XG4gICAgdGhpcy5pbnB1dF9WYWx1ZV9hcnIgPSBbXTtcbiAgICB0aGlzLmJsb2NrID0gbnVsbDtcbiAgICB0aGlzLmlzTW92ZUJsb2NrID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGVraW5nQW5zd2VyID0gdHJ1ZTtcbiAgICB0aGlzLmlzV2FubmFSZXNldCA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZXNldFNjZW5lID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc3BsYXlMYXN0UXVlc3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmlzTW92ZUJhbGwgPSBmYWxzZTtcbiAgICBpc0Rpc3BsYXlMYXN0UmVzdWx0ID0gZmFsc2U7XG4gICAgc3VicXVlc3Rpb25Ub3RhbE51bWJlciA9IHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlcjtcbiAgICBwb3MgPSBbMCwgMCwgMCwgMF07XG4gIH1cbn1cbmxldCBzdWJxdWVzdGlvblRvdGFsTnVtYmVyO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG53aW5kb3cuQ2xpY2tfQnV0dG9uID0gZnVuY3Rpb24gQ2xpY2tfQnV0dG9uKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnV0dG9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdWJxdWVzdGlvblRvdGFsTnVtYmVyOyBpKyspIHtcbiAgICBjb25zdCByZXN1bHRQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgcmVzdWx0UGFuZWwuaWQgPSBgcGFuZWxyZXN1bHQkeyhpKS50b1N0cmluZygpfWA7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2R5Jyk7XG4gICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcxMCcpO1xuICAgIHJlc3VsdFBhbmVsLmFwcGVuZENoaWxkKHRleHQpO1xuICAgIHJlc3VsdFBhbmVsLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTpub25lOyBwb3NpdGlvbjogcmVsYXRpdmU7Ym9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogI0ZGRkZGRjsgcGFkZGluZzogMjBweDt3aWR0aDogNDBweDtoZWlnaHQ6IDQwcHg7IGZvbnQtc2l6ZTozNXB4OyBhbGlnbi10ZXh0OmNlbnRlcjsgYm9yZGVyOiAxcHggc29saWQ7IGJveC1zaGFkb3c6IDVweCAxMHB4ICNkM2QzZDMnO1xuICAgIGNvbnN0IGJlUmVwbGFjZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbGF5b3V0X3F1ZXN0aW9uJHtpfWApO1xuICAgIGJvZHkucmVwbGFjZUNoaWxkKHJlc3VsdFBhbmVsLCBiZVJlcGxhY2VkKTtcbiAgfVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXRfbGFzdHF1ZXN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dF9sYXN0cXVlc3Rpb24nKS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHN1YnF1ZXN0aW9uVG90YWxOdW1iZXI7IGkrKykge1xuICAgICAgJChgI3BhbmVscmVzdWx0JHtpfWApLmRlbGF5KDIwMCkuZmFkZUluKCk7XG4gICAgfVxuICAgICQoJyNsYXlvdXRfbGFzdHF1ZXN0aW9uJykuZGVsYXkoMjAwKS5mYWRlSW4oKTtcbiAgfSk7XG4gIGlzRGlzcGxheUxhc3RSZXN1bHQgPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Scenes/Game1Scene2.js\n");
 
/***/ }),
 
/***/ "./src/Scenes/Game1Scene3.js":
/*!***********************************!*\
  !*** ./src/Scenes/Game1Scene3.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nvar _Ball = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Ball */ \"./src/gameObject/Ball.js\"));\n\nvar _Block = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Block */ \"./src/gameObject/Block.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n} // export var isWannaReset3 = [false];\n\n\nvar BLOCK = {\n  X: 250,\n  Y: 140\n};\nvar RANGEBLOCK = 150;\n\nvar Game1Scene3 =\n/*#__PURE__*/\nfunction (_Phaser$Scene) {\n  _inherits(Game1Scene3, _Phaser$Scene); // hello = 2;\n\n\n  function Game1Scene3() {\n    _classCallCheck(this, Game1Scene3);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Game1Scene3).call(this, 'Scene3'));\n  }\n\n  _createClass(Game1Scene3, [{\n    key: \"preload\",\n    value: function preload() {\n      this.load.html('question2', 'src/InputForm/scene3.html');\n      this.load.html('return', 'src/assets/text/return.html');\n      this.load.image('button', 'src/assets/next.png');\n      this.load.image('dayChau', 'src/assets/arrBlock.png');\n      this.load.image('ballHolder', 'src/assets/thanh.png');\n      this.load.image('ball', 'src/assets/ball.png');\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      this.ReCreate();\n      this.CreateBall();\n      this.CreateQuestionAndInput();\n      this.block = new _Block.default().createArrayBlock(this, BLOCK.X, BLOCK.Y);\n      this.CreateLanguage();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // isWannaReset3[0] = this.isWannaReset;\n      this.CheckAnswerOfSubQuestion();\n      this.Move_Block_and_Display_NextSubQuestion();\n      this.DisplayLastQuestion();\n      this.DisplayLastResult();\n      this.ResetScene();\n      this.MoveBall();\n    } //-------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CheckAnswerOfSubQuestion\",\n    value: function CheckAnswerOfSubQuestion() {\n      if (this.isChekingAnswer === true && this.input_Index <= this.subquestionTotalNumber) {\n        var inputCurrentValue1 = document.getElementById(\"input\".concat((this.input_Index * 2 - 1).toString())).value;\n        var inputCurrentValue2 = document.getElementById(\"input\".concat((this.input_Index * 2).toString())).value;\n\n        if (inputCurrentValue1 !== '' && inputCurrentValue1 !== '1' || inputCurrentValue2 !== '' && inputCurrentValue2 !== '0') {\n          this.isWannaReset = true;\n        }\n\n        if (inputCurrentValue2 !== '' && inputCurrentValue2 === '0') {\n          var text10 = document.createElement('div');\n          text10.appendChild(document.createTextNode('10'));\n          var layoutQuestion = document.getElementById(\"layout_question\".concat(this.input_Index));\n          text10.style.cssText = 'display: inline-block; font-size:45px;';\n          layoutQuestion.replaceChild(text10, document.getElementById(\"answer\".concat(this.input_Index)));\n          this.isMoveBlock = true;\n          this.isChekingAnswer = false;\n          this.input_Index++;\n        } // this.is_input_Cheking = false;\n\n      }\n    } // eslint-disable-next-line camelcase\n\n  }, {\n    key: \"Move_Block_and_Display_NextSubQuestion\",\n    value: function Move_Block_and_Display_NextSubQuestion() {\n      if (this.isMoveBlock) {\n        if (this.input_Index <= this.subquestionTotalNumber) {\n          var startPosYBlock = BLOCK.Y + RANGEBLOCK * (this.input_Index - 2);\n          var destinationPosYBlock = BLOCK.Y + RANGEBLOCK * (this.input_Index - 1);\n\n          if (this.block.y === startPosYBlock) {\n            new _Block.default().createArrayBlock(this, BLOCK.X, startPosYBlock);\n          }\n\n          if (this.block.y < destinationPosYBlock) {\n            this.block.y += 3;\n          } else {\n            this.isDisplaySubQuestion = true;\n            this.isMoveBlock = false;\n          }\n        } else {\n          this.isDisplaySubQuestion = true;\n          this.isMoveBlock = false;\n        }\n      }\n\n      if (this.isDisplaySubQuestion) {\n        if (this.input_Index === 2 && this.subquestionTotalNumber > 1) {\n          $(document).ready(function () {\n            $('#layout_question2').delay(200).fadeIn();\n          });\n          setTimeout(function () {\n            document.getElementById('input3').focus();\n          }, 300);\n        } else if (this.input_Index === 3 && this.subquestionTotalNumber > 2) {\n          $(document).ready(function () {\n            $('#layout_question3').delay(200).fadeIn();\n          });\n          setTimeout(function () {\n            document.getElementById('input5').focus();\n          }, 300);\n        }\n\n        if (this.input_Index > this.subquestionTotalNumber) {\n          this.isDisplayLastQuestion = true;\n        }\n\n        this.isChekingAnswer = true;\n        this.isDisplaySubQuestion = false;\n      }\n    }\n  }, {\n    key: \"DisplayLastQuestion\",\n    value: function DisplayLastQuestion() {\n      if (this.isDisplayLastQuestion) {\n        $(document).ready(function () {\n          $('#layout_lastquestion').delay(200).fadeIn();\n        });\n        setTimeout(function () {\n          document.getElementById('input7').focus();\n        }, 300);\n        isDisplayLastResult = true;\n        this.isDisplayLastQuestion = false;\n      }\n    }\n  }, {\n    key: \"DisplayLastResult\",\n    value: function DisplayLastResult() {\n      if (isDisplayLastResult) {\n        this.CheckAnswerOfLastQuestion();\n      }\n    }\n  }, {\n    key: \"CheckAnswerOfLastQuestion\",\n    value: function CheckAnswerOfLastQuestion() {\n      var inputCurrentValue1 = document.getElementById(\"input\".concat((4 * 2 - 1).toString())).value;\n      var inputCurrentValue2 = document.getElementById(\"input\".concat((4 * 2).toString())).value;\n\n      if (inputCurrentValue1 !== '' && inputCurrentValue1 != subquestionTotalNumber || inputCurrentValue2 !== '' && inputCurrentValue2 !== '0') {\n        this.isWannaReset = true;\n      }\n\n      if (inputCurrentValue2 !== '' && inputCurrentValue2 === '0') {\n        var textResult = document.createElement('div');\n        textResult.appendChild(document.createTextNode((subquestionTotalNumber * 10).toString()));\n        var layoutQuestion = document.getElementById('layout_lastquestion');\n        textResult.style.cssText = 'display: inline-block; font-size:60px; margin-left: 20px';\n        layoutQuestion.replaceChild(textResult, document.getElementById(\"answer\".concat(4)));\n        isDisplayLastResult = false;\n        this.isResetScene = true;\n      } // this.is_input_Cheking = false;\n\n    }\n  }, {\n    key: \"ResetScene\",\n    value: function ResetScene() {\n      var _this = this;\n\n      if (this.isResetScene) {\n        if (this.isWannaReset) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this.scene.start('Scene3');\n            },\n            repeat: 0\n          });\n        } else {\n          this.isMoveBall = true;\n        }\n      }\n    }\n  }, {\n    key: \"MoveBall\",\n    value: function MoveBall() {\n      var _this2 = this;\n\n      if (this.isMoveBall) {\n        if (this.ball_Last.x < 710) {\n          this.ball_Last.x += 3;\n        } else {\n          this.time.addEvent({\n            delay: 2000,\n            callback: function callback() {\n              _this2.scene.start('Scene4');\n            },\n            repeat: 0\n          });\n        }\n      }\n    } //---------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CreateBall\",\n    value: function CreateBall() {\n      this.add.image(540, 30, 'ballHolder');\n\n      this.ball_Last = function (scene) {\n        var ball = new _Ball.default();\n        ball.create(scene, 770, 29);\n        ball.create(scene, 740, 29);\n\n        for (var i = 0; i < 3; i++) {\n          var temp = ball.create(scene, 310 + 30 * i, 29);\n        }\n\n        return temp;\n      }(this);\n    }\n  }, {\n    key: \"CreateQuestionAndInput\",\n    value: function CreateQuestionAndInput() {\n      this.question_TotalNumber = 3;\n      this.input_Index = 1;\n      this.question_Sub = this.add.dom(750, 150).createFromCache('question2');\n\n      for (var i = 1; i <= this.question_TotalNumber; i++) {\n        var tmp = document.getElementById(\"input\".concat((i * 2).toString()));\n        this.input_Value_arr.push(tmp.value);\n      }\n\n      document.getElementById('input1').focus();\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"CreateLanguage\",\n    value: function CreateLanguage() {\n      if (window.location.hash === '#vietnam') {\n        var question = document.getElementsByClassName('question'); // eslint-disable-next-line camelcase\n\n        var word_end_question = document.getElementsByClassName('word_end_question');\n        var thought = document.getElementsByClassName('result');\n\n        for (var i = 0; i < question.length; i++) {\n          question[i].innerHTML = 'Hình bên có ';\n          word_end_question[i].innerHTML = 'khối';\n          thought[i].innerHTML = 'Hình bên có 10 khối.';\n        }\n\n        document.getElementById('lastques').innerHTML = 'Tổng số khối bên trên:';\n      }\n    }\n  }, {\n    key: \"ReCreate\",\n    value: function ReCreate() {\n      this.fade = null;\n      this.ball_Last = null;\n      this.subquestionTotalNumber = Math.floor(Math.random() * (3 - 1 + 1) + 1);\n      subquestionTotalNumber = this.subquestionTotalNumber;\n      this.input_Index = 1;\n      this.questionIndex = 1;\n      this.question_Sub = null;\n      this.input_Value_arr = [];\n      this.block = null;\n      this.isMoveBlock = false;\n      this.isDisplaySubQuestion = false;\n      this.isChekingAnswer = true;\n      this.isWannaReset = false;\n      this.isResetScene = false;\n      this.isDisplayLastQuestion = false;\n      this.isMoveBall = false;\n      isDisplayLastResult = false; // isWannaReset3[0] = false;\n    }\n  }]);\n\n  return Game1Scene3;\n}(Phaser.Scene);\n\nexports.default = Game1Scene3;\nvar subquestionTotalNumber;\nvar isDisplayLastResult = false; // eslint-disable-next-line max-len\n// eslint-disable-next-line camelcase\n\nwindow.Check_LastAnswer1 = function Check_LastAnswer1(questionIndex, aI, desiredResult, sceneName) {\n  if (sceneName === 'Scene3') {\n    // eslint-disable-next-line no-param-reassign\n    desiredResult = subquestionTotalNumber * 10;\n  }\n\n  if (document.getElementById(\"input\".concat(questionIndex)).value !== '') {\n    var x = document.getElementById(\"input\".concat(questionIndex)).value % 10;\n    document.getElementById(\"input\".concat(questionIndex)).value = x;\n\n    if (x == desiredResult / 10) {\n      document.getElementById(\"input\".concat(questionIndex)).style.color = 'black';\n      document.getElementById(\"input\".concat((questionIndex + 1).toString())).focus();\n    } else {\n      document.getElementById(\"input\".concat(questionIndex)).style.color = 'red';\n    }\n  }\n}; // eslint-disable-next-line max-len\n// eslint-disable-next-line camelcase\n\n\nwindow.Check_LastAnswer2 = function Check_LastAnswer2(questionIndex) {\n  if (document.getElementById(\"input\".concat(questionIndex)).value != '') {\n    var y = document.getElementById(\"input\".concat(questionIndex)).value % 10;\n    document.getElementById(\"input\".concat(questionIndex)).value = y;\n\n    if (y != 0) {\n      document.getElementById(\"input\".concat(questionIndex)).style.color = 'red';\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmVzL0dhbWUxU2NlbmUzLmpzP2VlNDciXSwibmFtZXMiOlsiQkxPQ0siLCJYIiwiWSIsIlJBTkdFQkxPQ0siLCJHYW1lMVNjZW5lMyIsIkJsb2NrIiwiaW5wdXRDdXJyZW50VmFsdWUxIiwiZG9jdW1lbnQiLCJpbnB1dEN1cnJlbnRWYWx1ZTIiLCJ0ZXh0MTAiLCJsYXlvdXRRdWVzdGlvbiIsInN0YXJ0UG9zWUJsb2NrIiwiZGVzdGluYXRpb25Qb3NZQmxvY2siLCIkIiwic2V0VGltZW91dCIsImlzRGlzcGxheUxhc3RSZXN1bHQiLCJ0ZXh0UmVzdWx0Iiwic3VicXVlc3Rpb25Ub3RhbE51bWJlciIsImRlbGF5IiwiY2FsbGJhY2siLCJyZXBlYXQiLCJiYWxsIiwiQmFsbCIsImkiLCJ0ZW1wIiwidG1wIiwid2luZG93IiwicXVlc3Rpb24iLCJ3b3JkX2VuZF9xdWVzdGlvbiIsInRob3VnaHQiLCJNYXRoIiwiUGhhc2VyIiwiU2NlbmUiLCJzY2VuZU5hbWUiLCJkZXNpcmVkUmVzdWx0IiwieCIsInF1ZXN0aW9uSW5kZXgiLCJ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFRQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFFQTs7O0FBRUEsSUFBTUEsS0FBSyxHQUFHO0FBQ1pDLEdBQUMsRUFEVztBQUVaQyxHQUFDLEVBQUU7QUFGUyxDQUFkO0FBS0EsSUFBTUMsVUFBVSxHQUFoQjs7SUFFcUJDLFc7Ozt5Q0FDbkI7OztBQUNBLHlCQUFjO0FBQUE7O0FBQUE7QUFFYjs7Ozs4QkFFUztBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNEOzs7NkJBRVE7QUFDUDtBQUNBO0FBQ0E7QUFDQSxtQkFBYSxJQUFJQyxPQUFKLGlDQUFtQ0wsS0FBSyxDQUF4QyxHQUE0Q0EsS0FBSyxDQUE5RCxDQUFhLENBQWI7QUFDQTtBQUNEOzs7NkJBRVE7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUdGOzs7OytDQUUyQjtBQUN6QixVQUNFLGlDQUNHLG9CQUFvQixLQUZ6Qix3QkFHRTtBQUNBLFlBQU1NLGtCQUFrQixHQUFHQyxRQUFRLENBQVJBLDhCQUNqQixDQUFDLHVCQUFELEdBRGlCQSxRQUNqQixFQURpQkEsR0FBM0I7QUFHQSxZQUFNQyxrQkFBa0IsR0FBR0QsUUFBUSxDQUFSQSw4QkFDakIsQ0FBQyxtQkFBRCxHQURpQkEsUUFDakIsRUFEaUJBLEdBQTNCOztBQUlBLFlBQ0dELGtCQUFrQixLQUFsQkEsTUFBNkJBLGtCQUFrQixLQUFoRCxHQUFDQSxJQUNHRSxrQkFBa0IsS0FBbEJBLE1BQTZCQSxrQkFBa0IsS0FGckQsS0FHRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBSUEsa0JBQWtCLEtBQWxCQSxNQUE2QkEsa0JBQWtCLEtBQW5ELEtBQTZEO0FBQzNELGNBQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFSQSxjQUFmLEtBQWVBLENBQWY7QUFDQUUsZ0JBQU0sQ0FBTkEsWUFBbUJGLFFBQVEsQ0FBUkEsZUFBbkJFLElBQW1CRixDQUFuQkU7QUFDQSxjQUFNQyxjQUFjLEdBQUdILFFBQVEsQ0FBUkEsd0NBQ0gsS0FEcEIsV0FBdUJBLEVBQXZCO0FBR0FFLGdCQUFNLENBQU5BO0FBQ0FDLHdCQUFjLENBQWRBLHFCQUVFSCxRQUFRLENBQVJBLCtCQUFpQyxLQUZuQ0csV0FFRUgsRUFGRkc7QUFJQTtBQUNBO0FBQ0E7QUEzQkYsVUE2QkE7O0FBQ0Q7TUFHSDs7Ozs2REFDeUM7QUFDdkMsVUFBSSxLQUFKLGFBQXNCO0FBQ3BCLFlBQUksb0JBQW9CLEtBQXhCLHdCQUFxRDtBQUNuRCxjQUFNQyxjQUFjLEdBQUdYLEtBQUssQ0FBTEEsSUFBVUcsVUFBVSxJQUFJLG1CQUEvQyxDQUEyQyxDQUEzQztBQUNBLGNBQU1TLG9CQUFvQixHQUFHWixLQUFLLENBQUxBLElBQVVHLFVBQVUsSUFBSSxtQkFBckQsQ0FBaUQsQ0FBakQ7O0FBQ0EsY0FBSSxpQkFBSixnQkFBcUM7QUFDbkMsZ0JBQUlFLE9BQUosaUNBQW1DTCxLQUFLLENBQXhDO0FBQ0Q7O0FBQ0QsY0FBSSxlQUFKLHNCQUF5QztBQUN2QztBQURGLGlCQUVPO0FBQ0w7QUFDQTtBQUNEO0FBWEgsZUFZTztBQUNMO0FBQ0E7QUFDRDtBQUNGOztBQUVELFVBQUksS0FBSixzQkFBK0I7QUFDN0IsWUFBSSwwQkFBMEIsOEJBQTlCLEdBQStEO0FBQzdEYSxXQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsYUFBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQURGQTtBQUdBQyxvQkFBVSxDQUFDLFlBQU07QUFDZlAsb0JBQVEsQ0FBUkE7QUFEUSxhQUFWTyxHQUFVLENBQVZBO0FBSkYsZUFPTyxJQUFJLDBCQUEwQiw4QkFBOUIsR0FBK0Q7QUFDcEVELFdBQUMsQ0FBREEsUUFBQyxDQUFEQSxPQUFrQixZQUFNO0FBQ3RCQSxhQUFDLENBQURBLG1CQUFDLENBQURBO0FBREZBO0FBR0FDLG9CQUFVLENBQUMsWUFBTTtBQUNmUCxvQkFBUSxDQUFSQTtBQURRLGFBQVZPLEdBQVUsQ0FBVkE7QUFHRDs7QUFDRCxZQUFJLG1CQUFtQixLQUF2Qix3QkFBb0Q7QUFDbEQ7QUFDRDs7QUFDRDtBQUNBO0FBQ0Q7QUFDRjs7OzBDQUVxQjtBQUNwQixVQUFJLEtBQUosdUJBQWdDO0FBQzlCRCxTQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsV0FBQyxDQUFEQSxzQkFBQyxDQUFEQTtBQURGQTtBQUdBQyxrQkFBVSxDQUFDLFlBQU07QUFDZlAsa0JBQVEsQ0FBUkE7QUFEUSxXQUFWTyxHQUFVLENBQVZBO0FBR0FDLDJCQUFtQixHQUFuQkE7QUFDQTtBQUNEO0FBQ0Y7Ozt3Q0FFbUI7QUFDbEIsK0JBQXlCO0FBQ3ZCO0FBQ0Q7QUFDRjs7O2dEQUUyQjtBQUMxQixVQUFNVCxrQkFBa0IsR0FBR0MsUUFBUSxDQUFSQSw4QkFDakIsQ0FBQyxRQUFELEdBRGlCQSxRQUNqQixFQURpQkEsR0FBM0I7QUFHQSxVQUFNQyxrQkFBa0IsR0FBR0QsUUFBUSxDQUFSQSw4QkFDakIsQ0FBQyxJQUFELEdBRGlCQSxRQUNqQixFQURpQkEsR0FBM0I7O0FBSUEsVUFDR0Qsa0JBQWtCLEtBQWxCQSxNQUNJQSxrQkFBa0IsSUFEdkIsc0JBQUNBLElBRUdFLGtCQUFrQixLQUFsQkEsTUFBNkJBLGtCQUFrQixLQUhyRCxLQUlFO0FBQ0E7QUFDRDs7QUFDRCxVQUFJQSxrQkFBa0IsS0FBbEJBLE1BQTZCQSxrQkFBa0IsS0FBbkQsS0FBNkQ7QUFDM0QsWUFBTVEsVUFBVSxHQUFHVCxRQUFRLENBQVJBLGNBQW5CLEtBQW1CQSxDQUFuQjtBQUNBUyxrQkFBVSxDQUFWQSxZQUNFVCxRQUFRLENBQVJBLGVBQXdCLENBQUNVLHNCQUFzQixHQUF2QixJQUQxQkQsUUFDMEIsRUFBeEJULENBREZTO0FBR0EsWUFBTU4sY0FBYyxHQUFHSCxRQUFRLENBQVJBLGVBQXZCLHFCQUF1QkEsQ0FBdkI7QUFDQVMsa0JBQVUsQ0FBVkE7QUFDQU4sc0JBQWMsQ0FBZEEseUJBRUVILFFBQVEsQ0FBUkEsK0JBRkZHLENBRUVILEVBRkZHO0FBSUFLLDJCQUFtQixHQUFuQkE7QUFDQTtBQTNCd0IsUUE2QjFCOztBQUNEOzs7aUNBRVk7QUFBQTs7QUFDWCxVQUFJLEtBQUosY0FBdUI7QUFDckIsWUFBSSxLQUFKLGNBQXVCO0FBQ3JCLDZCQUFtQjtBQUNqQkcsaUJBQUssRUFEWTtBQUVqQkMsb0JBQVEsRUFBRSxvQkFBTTtBQUNkLG1CQUFJLENBQUo7QUFIZTtBQUtqQkMsa0JBQU0sRUFBRTtBQUxTLFdBQW5CO0FBREYsZUFRTztBQUNMO0FBQ0Q7QUFDRjtBQUNGOzs7K0JBRVU7QUFBQTs7QUFDVCxVQUFJLEtBQUosWUFBcUI7QUFDbkIsWUFBSSxtQkFBSixLQUE0QjtBQUMxQjtBQURGLGVBRU87QUFDTCw2QkFBbUI7QUFDakJGLGlCQUFLLEVBRFk7QUFFakJDLG9CQUFRLEVBQUUsb0JBQU07QUFDZCxvQkFBSSxDQUFKO0FBSGU7QUFLakJDLGtCQUFNLEVBQUU7QUFMUyxXQUFuQjtBQU9EO0FBQ0Y7TUFHSDs7OztpQ0FFYTtBQUNYOztBQUNBLHVCQUFrQixpQkFBaUI7QUFDakMsWUFBTUMsSUFBSSxHQUFHLElBQUlDLE1BQWpCLE9BQWEsRUFBYjtBQUNBRCxZQUFJLENBQUpBO0FBQ0FBLFlBQUksQ0FBSkE7O0FBQ0EsYUFBSyxJQUFJRSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBakIsR0FBdUJBLENBQXZCLElBQTRCO0FBQzFCLGNBQUlDLElBQUksR0FBR0gsSUFBSSxDQUFKQSxjQUFtQixNQUFNLEtBQXpCQSxHQUFYLEVBQVdBLENBQVg7QUFDRDs7QUFDRDtBQVBnQixRQUFsQixJQUFrQixDQUFsQjtBQVNEOzs7NkNBRXdCO0FBQ3ZCO0FBQ0E7QUFDQSwwQkFBb0IsdUNBQXBCLFdBQW9CLENBQXBCOztBQUNBLFdBQUssSUFBSUUsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLElBQUksS0FBckIsc0JBQWdEQSxDQUFoRCxJQUFxRDtBQUNuRCxZQUFNRSxHQUFHLEdBQUdsQixRQUFRLENBQVJBLDhCQUFnQyxDQUFDZ0IsQ0FBQyxHQUFGLEdBQTVDLFFBQTRDLEVBQWhDaEIsRUFBWjtBQUNBLGtDQUEwQmtCLEdBQUcsQ0FBN0I7QUFDRDs7QUFDRGxCLGNBQVEsQ0FBUkE7TUFHRjs7OztxQ0FDaUI7QUFDZixVQUFJbUIsTUFBTSxDQUFOQSxrQkFBSixZQUF5QztBQUN2QyxZQUFNQyxRQUFRLEdBQUdwQixRQUFRLENBQVJBLHVCQURzQixVQUN0QkEsQ0FBakIsQ0FEdUMsQ0FFdkM7O0FBQ0EsWUFBTXFCLGlCQUFpQixHQUFHckIsUUFBUSxDQUFSQSx1QkFBMUIsbUJBQTBCQSxDQUExQjtBQUdBLFlBQU1zQixPQUFPLEdBQUd0QixRQUFRLENBQVJBLHVCQUFoQixRQUFnQkEsQ0FBaEI7O0FBQ0EsYUFBSyxJQUFJZ0IsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQUdJLFFBQVEsQ0FBNUIsUUFBcUNKLENBQXJDLElBQTBDO0FBQ3hDSSxrQkFBUSxDQUFSQSxDQUFRLENBQVJBO0FBQ0FDLDJCQUFpQixDQUFqQkEsQ0FBaUIsQ0FBakJBO0FBQ0FDLGlCQUFPLENBQVBBLENBQU8sQ0FBUEE7QUFDRDs7QUFDRHRCLGdCQUFRLENBQVJBO0FBQ0Q7QUFDRjs7OytCQUVVO0FBQ1Q7QUFDQTtBQUNBLG9DQUE4QnVCLElBQUksQ0FBSkEsTUFBV0EsSUFBSSxDQUFKQSxZQUFpQixRQUFqQkEsS0FBekMsQ0FBOEJBLENBQTlCO0FBQ0FiLDRCQUFzQixHQUFHLEtBQXpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBRix5QkFBbUIsR0FqQlYsS0FpQlRBLENBakJTLENBa0JUO0FBQ0Q7Ozs7RUF2UXNDZ0IsTUFBTSxDQUFDQyxLOzs7QUF5UWhEO0FBQ0EsSUFBSWpCLG1CQUFtQixHQUF2QixNLENBRUE7QUFDQTs7QUFDQVcsTUFBTSxDQUFOQSxvQkFBMkIsd0VBS3pCO0FBQ0EsTUFBSU8sU0FBUyxLQUFiLFVBQTRCO0FBQzFCO0FBQ0FDLGlCQUFhLEdBQUdqQixzQkFBc0IsR0FBdENpQjtBQUNEOztBQUNELE1BQUkzQixRQUFRLENBQVJBLHdEQUFKLElBQW1FO0FBQ2pFLFFBQUk0QixDQUFDLEdBQUc1QixRQUFRLENBQVJBLHNEQUFSO0FBQ0FBLFlBQVEsQ0FBUkE7O0FBQ0EsUUFBSTRCLENBQUMsSUFBSUQsYUFBYSxHQUF0QixJQUE2QjtBQUMzQjNCLGNBQVEsQ0FBUkE7QUFDQUEsY0FBUSxDQUFSQSw4QkFBZ0MsQ0FBQzZCLGFBQWEsR0FBZCxHQUFoQzdCLFFBQWdDLEVBQWhDQTtBQUZGLFdBR087QUFDTEEsY0FBUSxDQUFSQTtBQUNEO0FBQ0Y7QUFuQkhtQixFLENBc0JBO0FBQ0E7OztBQUNBQSxNQUFNLENBQU5BLG9CQUEyQiwwQ0FBMEM7QUFDbkUsTUFBSW5CLFFBQVEsQ0FBUkEsdURBQUosSUFBa0U7QUFDaEUsUUFBSThCLENBQUMsR0FBRzlCLFFBQVEsQ0FBUkEsc0RBQVI7QUFDQUEsWUFBUSxDQUFSQTs7QUFDQSxRQUFJOEIsQ0FBQyxJQUFMLEdBQVk7QUFDVjlCLGNBQVEsQ0FBUkE7QUFDRDtBQUNGO0FBUEhtQiIsImZpbGUiOiIuL3NyYy9TY2VuZXMvR2FtZTFTY2VuZTMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtbmFtZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhcnMtb24tdG9wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBibG9jay1zY29wZWQtdmFyICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmltcG9ydCAncGhhc2VyJztcbmltcG9ydCBCYWxsIGZyb20gJy4uL2dhbWVPYmplY3QvQmFsbCc7XG5pbXBvcnQgQmxvY2sgZnJvbSAnLi4vZ2FtZU9iamVjdC9CbG9jayc7XG5cbi8vIGV4cG9ydCB2YXIgaXNXYW5uYVJlc2V0MyA9IFtmYWxzZV07XG5cbmNvbnN0IEJMT0NLID0ge1xuICBYOiAyNTAsXG4gIFk6IDE0MCxcbn07XG5cbmNvbnN0IFJBTkdFQkxPQ0sgPSAxNTA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUxU2NlbmUzIGV4dGVuZHMgUGhhc2VyLlNjZW5lIHtcbiAgLy8gaGVsbG8gPSAyO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2NlbmUzJyk7XG4gIH1cblxuICBwcmVsb2FkKCkge1xuICAgIHRoaXMubG9hZC5odG1sKCdxdWVzdGlvbjInLCAnc3JjL0lucHV0Rm9ybS9zY2VuZTMuaHRtbCcpO1xuICAgIHRoaXMubG9hZC5odG1sKCdyZXR1cm4nLCAnc3JjL2Fzc2V0cy90ZXh0L3JldHVybi5odG1sJyk7XG4gICAgdGhpcy5sb2FkLmltYWdlKCdidXR0b24nLCAnc3JjL2Fzc2V0cy9uZXh0LnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnZGF5Q2hhdScsICdzcmMvYXNzZXRzL2FyckJsb2NrLnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbEhvbGRlcicsICdzcmMvYXNzZXRzL3RoYW5oLnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbCcsICdzcmMvYXNzZXRzL2JhbGwucG5nJyk7XG4gIH1cblxuICBjcmVhdGUoKSB7XG4gICAgdGhpcy5SZUNyZWF0ZSgpO1xuICAgIHRoaXMuQ3JlYXRlQmFsbCgpO1xuICAgIHRoaXMuQ3JlYXRlUXVlc3Rpb25BbmRJbnB1dCgpO1xuICAgIHRoaXMuYmxvY2sgPSBuZXcgQmxvY2soKS5jcmVhdGVBcnJheUJsb2NrKHRoaXMsIEJMT0NLLlgsIEJMT0NLLlkpO1xuICAgIHRoaXMuQ3JlYXRlTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICAvLyBpc1dhbm5hUmVzZXQzWzBdID0gdGhpcy5pc1dhbm5hUmVzZXQ7XG4gICAgdGhpcy5DaGVja0Fuc3dlck9mU3ViUXVlc3Rpb24oKTtcbiAgICB0aGlzLk1vdmVfQmxvY2tfYW5kX0Rpc3BsYXlfTmV4dFN1YlF1ZXN0aW9uKCk7XG4gICAgdGhpcy5EaXNwbGF5TGFzdFF1ZXN0aW9uKCk7XG4gICAgdGhpcy5EaXNwbGF5TGFzdFJlc3VsdCgpO1xuICAgIHRoaXMuUmVzZXRTY2VuZSgpO1xuICAgIHRoaXMuTW92ZUJhbGwoKTtcbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIENoZWNrQW5zd2VyT2ZTdWJRdWVzdGlvbigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzQ2hla2luZ0Fuc3dlciA9PT0gdHJ1ZVxuICAgICAgJiYgdGhpcy5pbnB1dF9JbmRleCA8PSB0aGlzLnN1YnF1ZXN0aW9uVG90YWxOdW1iZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IGlucHV0Q3VycmVudFZhbHVlMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICBgaW5wdXQkeyh0aGlzLmlucHV0X0luZGV4ICogMiAtIDEpLnRvU3RyaW5nKCl9YCxcbiAgICAgICkudmFsdWU7XG4gICAgICBjb25zdCBpbnB1dEN1cnJlbnRWYWx1ZTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgYGlucHV0JHsodGhpcy5pbnB1dF9JbmRleCAqIDIpLnRvU3RyaW5nKCl9YCxcbiAgICAgICkudmFsdWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKGlucHV0Q3VycmVudFZhbHVlMSAhPT0gJycgJiYgaW5wdXRDdXJyZW50VmFsdWUxICE9PSAnMScpXG4gICAgICAgIHx8IChpbnB1dEN1cnJlbnRWYWx1ZTIgIT09ICcnICYmIGlucHV0Q3VycmVudFZhbHVlMiAhPT0gJzAnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaXNXYW5uYVJlc2V0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dEN1cnJlbnRWYWx1ZTIgIT09ICcnICYmIGlucHV0Q3VycmVudFZhbHVlMiA9PT0gJzAnKSB7XG4gICAgICAgIGNvbnN0IHRleHQxMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZXh0MTAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzEwJykpO1xuICAgICAgICBjb25zdCBsYXlvdXRRdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgIGBsYXlvdXRfcXVlc3Rpb24ke3RoaXMuaW5wdXRfSW5kZXh9YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGV4dDEwLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6NDVweDsnO1xuICAgICAgICBsYXlvdXRRdWVzdGlvbi5yZXBsYWNlQ2hpbGQoXG4gICAgICAgICAgdGV4dDEwLFxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBhbnN3ZXIke3RoaXMuaW5wdXRfSW5kZXh9YCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzQ2hla2luZ0Fuc3dlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0X0luZGV4Kys7XG4gICAgICB9XG4gICAgICAvLyB0aGlzLmlzX2lucHV0X0NoZWtpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIE1vdmVfQmxvY2tfYW5kX0Rpc3BsYXlfTmV4dFN1YlF1ZXN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzTW92ZUJsb2NrKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dF9JbmRleCA8PSB0aGlzLnN1YnF1ZXN0aW9uVG90YWxOdW1iZXIpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NZQmxvY2sgPSBCTE9DSy5ZICsgUkFOR0VCTE9DSyAqICh0aGlzLmlucHV0X0luZGV4IC0gMik7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUG9zWUJsb2NrID0gQkxPQ0suWSArIFJBTkdFQkxPQ0sgKiAodGhpcy5pbnB1dF9JbmRleCAtIDEpO1xuICAgICAgICBpZiAodGhpcy5ibG9jay55ID09PSBzdGFydFBvc1lCbG9jaykge1xuICAgICAgICAgIG5ldyBCbG9jaygpLmNyZWF0ZUFycmF5QmxvY2sodGhpcywgQkxPQ0suWCwgc3RhcnRQb3NZQmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJsb2NrLnkgPCBkZXN0aW5hdGlvblBvc1lCbG9jaykge1xuICAgICAgICAgIHRoaXMuYmxvY2sueSArPSAzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNEaXNwbGF5U3ViUXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlTdWJRdWVzdGlvbikge1xuICAgICAgaWYgKHRoaXMuaW5wdXRfSW5kZXggPT09IDIgJiYgdGhpcy5zdWJxdWVzdGlvblRvdGFsTnVtYmVyID4gMSkge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjInKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0MycpLmZvY3VzKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRfSW5kZXggPT09IDMgJiYgdGhpcy5zdWJxdWVzdGlvblRvdGFsTnVtYmVyID4gMikge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjMnKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0NScpLmZvY3VzKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnB1dF9JbmRleCA+IHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlcikge1xuICAgICAgICB0aGlzLmlzRGlzcGxheUxhc3RRdWVzdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmlzQ2hla2luZ0Fuc3dlciA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlzcGxheVN1YlF1ZXN0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgRGlzcGxheUxhc3RRdWVzdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlMYXN0UXVlc3Rpb24pIHtcbiAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgJCgnI2xheW91dF9sYXN0cXVlc3Rpb24nKS5kZWxheSgyMDApLmZhZGVJbigpO1xuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0NycpLmZvY3VzKCk7XG4gICAgICB9LCAzMDApO1xuICAgICAgaXNEaXNwbGF5TGFzdFJlc3VsdCA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlzcGxheUxhc3RRdWVzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIERpc3BsYXlMYXN0UmVzdWx0KCkge1xuICAgIGlmIChpc0Rpc3BsYXlMYXN0UmVzdWx0KSB7XG4gICAgICB0aGlzLkNoZWNrQW5zd2VyT2ZMYXN0UXVlc3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBDaGVja0Fuc3dlck9mTGFzdFF1ZXN0aW9uKCkge1xuICAgIGNvbnN0IGlucHV0Q3VycmVudFZhbHVlMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgYGlucHV0JHsoNCAqIDIgLSAxKS50b1N0cmluZygpfWAsXG4gICAgKS52YWx1ZTtcbiAgICBjb25zdCBpbnB1dEN1cnJlbnRWYWx1ZTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgIGBpbnB1dCR7KDQgKiAyKS50b1N0cmluZygpfWAsXG4gICAgKS52YWx1ZTtcblxuICAgIGlmIChcbiAgICAgIChpbnB1dEN1cnJlbnRWYWx1ZTEgIT09ICcnXG4gICAgICAgICYmIGlucHV0Q3VycmVudFZhbHVlMSAhPSBzdWJxdWVzdGlvblRvdGFsTnVtYmVyKVxuICAgICAgfHwgKGlucHV0Q3VycmVudFZhbHVlMiAhPT0gJycgJiYgaW5wdXRDdXJyZW50VmFsdWUyICE9PSAnMCcpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzV2FubmFSZXNldCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpbnB1dEN1cnJlbnRWYWx1ZTIgIT09ICcnICYmIGlucHV0Q3VycmVudFZhbHVlMiA9PT0gJzAnKSB7XG4gICAgICBjb25zdCB0ZXh0UmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZXh0UmVzdWx0LmFwcGVuZENoaWxkKFxuICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgoc3VicXVlc3Rpb25Ub3RhbE51bWJlciAqIDEwKS50b1N0cmluZygpKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXlvdXRRdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXRfbGFzdHF1ZXN0aW9uJyk7XG4gICAgICB0ZXh0UmVzdWx0LnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6NjBweDsgbWFyZ2luLWxlZnQ6IDIwcHgnO1xuICAgICAgbGF5b3V0UXVlc3Rpb24ucmVwbGFjZUNoaWxkKFxuICAgICAgICB0ZXh0UmVzdWx0LFxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgYW5zd2VyJHs0fWApLFxuICAgICAgKTtcbiAgICAgIGlzRGlzcGxheUxhc3RSZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNSZXNldFNjZW5lID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gdGhpcy5pc19pbnB1dF9DaGVraW5nID0gZmFsc2U7XG4gIH1cblxuICBSZXNldFNjZW5lKCkge1xuICAgIGlmICh0aGlzLmlzUmVzZXRTY2VuZSkge1xuICAgICAgaWYgKHRoaXMuaXNXYW5uYVJlc2V0KSB7XG4gICAgICAgIHRoaXMudGltZS5hZGRFdmVudCh7XG4gICAgICAgICAgZGVsYXk6IDEwMDAsXG4gICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3RhcnQoJ1NjZW5lMycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwZWF0OiAwLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNNb3ZlQmFsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgTW92ZUJhbGwoKSB7XG4gICAgaWYgKHRoaXMuaXNNb3ZlQmFsbCkge1xuICAgICAgaWYgKHRoaXMuYmFsbF9MYXN0LnggPCA3MTApIHtcbiAgICAgICAgdGhpcy5iYWxsX0xhc3QueCArPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgICAgICBkZWxheTogMjAwMCxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5zdGFydCgnU2NlbmU0Jyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgQ3JlYXRlQmFsbCgpIHtcbiAgICB0aGlzLmFkZC5pbWFnZSg1NDAsIDMwLCAnYmFsbEhvbGRlcicpO1xuICAgIHRoaXMuYmFsbF9MYXN0ID0gKGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgY29uc3QgYmFsbCA9IG5ldyBCYWxsKCk7XG4gICAgICBiYWxsLmNyZWF0ZShzY2VuZSwgNzcwLCAyOSk7XG4gICAgICBiYWxsLmNyZWF0ZShzY2VuZSwgNzQwLCAyOSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICB2YXIgdGVtcCA9IGJhbGwuY3JlYXRlKHNjZW5lLCAzMTAgKyAzMCAqIGksIDI5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wO1xuICAgIH0odGhpcykpO1xuICB9XG5cbiAgQ3JlYXRlUXVlc3Rpb25BbmRJbnB1dCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uX1RvdGFsTnVtYmVyID0gMztcbiAgICB0aGlzLmlucHV0X0luZGV4ID0gMTtcbiAgICB0aGlzLnF1ZXN0aW9uX1N1YiA9IHRoaXMuYWRkLmRvbSg3NTAsIDE1MCkuY3JlYXRlRnJvbUNhY2hlKCdxdWVzdGlvbjInKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnF1ZXN0aW9uX1RvdGFsTnVtYmVyOyBpKyspIHtcbiAgICAgIGNvbnN0IHRtcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBpbnB1dCR7KGkgKiAyKS50b1N0cmluZygpfWApO1xuICAgICAgdGhpcy5pbnB1dF9WYWx1ZV9hcnIucHVzaCh0bXAudmFsdWUpO1xuICAgIH1cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXQxJykuZm9jdXMoKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIENyZWF0ZUxhbmd1YWdlKCkge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyN2aWV0bmFtJykge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxdWVzdGlvbicpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICAgICAgY29uc3Qgd29yZF9lbmRfcXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAnd29yZF9lbmRfcXVlc3Rpb24nLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRob3VnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZXN1bHQnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVlc3Rpb25baV0uaW5uZXJIVE1MID0gJ0jDrG5oIGLDqm4gY8OzICc7XG4gICAgICAgIHdvcmRfZW5kX3F1ZXN0aW9uW2ldLmlubmVySFRNTCA9ICdraOG7kWknO1xuICAgICAgICB0aG91Z2h0W2ldLmlubmVySFRNTCA9ICdIw6xuaCBiw6puIGPDsyAxMCBraOG7kWkuJztcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXN0cXVlcycpLmlubmVySFRNTCA9ICdU4buVbmcgc+G7kSBraOG7kWkgYsOqbiB0csOqbjonO1xuICAgIH1cbiAgfVxuXG4gIFJlQ3JlYXRlKCkge1xuICAgIHRoaXMuZmFkZSA9IG51bGw7XG4gICAgdGhpcy5iYWxsX0xhc3QgPSBudWxsO1xuICAgIHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgzIC0gMSArIDEpICsgMSk7XG4gICAgc3VicXVlc3Rpb25Ub3RhbE51bWJlciA9IHRoaXMuc3VicXVlc3Rpb25Ub3RhbE51bWJlcjtcbiAgICB0aGlzLmlucHV0X0luZGV4ID0gMTtcbiAgICB0aGlzLnF1ZXN0aW9uSW5kZXggPSAxO1xuICAgIHRoaXMucXVlc3Rpb25fU3ViID0gbnVsbDtcbiAgICB0aGlzLmlucHV0X1ZhbHVlX2FyciA9IFtdO1xuICAgIHRoaXMuYmxvY2sgPSBudWxsO1xuICAgIHRoaXMuaXNNb3ZlQmxvY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzcGxheVN1YlF1ZXN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoZWtpbmdBbnN3ZXIgPSB0cnVlO1xuICAgIHRoaXMuaXNXYW5uYVJlc2V0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1Jlc2V0U2NlbmUgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzcGxheUxhc3RRdWVzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNNb3ZlQmFsbCA9IGZhbHNlO1xuICAgIGlzRGlzcGxheUxhc3RSZXN1bHQgPSBmYWxzZTtcbiAgICAvLyBpc1dhbm5hUmVzZXQzWzBdID0gZmFsc2U7XG4gIH1cbn1cbmxldCBzdWJxdWVzdGlvblRvdGFsTnVtYmVyO1xudmFyIGlzRGlzcGxheUxhc3RSZXN1bHQgPSBmYWxzZTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbndpbmRvdy5DaGVja19MYXN0QW5zd2VyMSA9IGZ1bmN0aW9uIENoZWNrX0xhc3RBbnN3ZXIxKFxuICBxdWVzdGlvbkluZGV4LFxuICBhSSxcbiAgZGVzaXJlZFJlc3VsdCxcbiAgc2NlbmVOYW1lLFxuKSB7XG4gIGlmIChzY2VuZU5hbWUgPT09ICdTY2VuZTMnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgZGVzaXJlZFJlc3VsdCA9IHN1YnF1ZXN0aW9uVG90YWxOdW1iZXIgKiAxMDtcbiAgfVxuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHtxdWVzdGlvbkluZGV4fWApLnZhbHVlICE9PSAnJykge1xuICAgIHZhciB4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHtxdWVzdGlvbkluZGV4fWApLnZhbHVlICUgMTA7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHtxdWVzdGlvbkluZGV4fWApLnZhbHVlID0geDtcbiAgICBpZiAoeCA9PSBkZXNpcmVkUmVzdWx0IC8gMTApIHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBpbnB1dCR7cXVlc3Rpb25JbmRleH1gKS5zdHlsZS5jb2xvciA9ICdibGFjayc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaW5wdXQkeyhxdWVzdGlvbkluZGV4ICsgMSkudG9TdHJpbmcoKX1gKS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaW5wdXQke3F1ZXN0aW9uSW5kZXh9YCkuc3R5bGUuY29sb3IgPSAncmVkJztcbiAgICB9XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG53aW5kb3cuQ2hlY2tfTGFzdEFuc3dlcjIgPSBmdW5jdGlvbiBDaGVja19MYXN0QW5zd2VyMihxdWVzdGlvbkluZGV4KSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaW5wdXQke3F1ZXN0aW9uSW5kZXh9YCkudmFsdWUgIT0gJycpIHtcbiAgICB2YXIgeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBpbnB1dCR7cXVlc3Rpb25JbmRleH1gKS52YWx1ZSAlIDEwO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBpbnB1dCR7cXVlc3Rpb25JbmRleH1gKS52YWx1ZSA9IHk7XG4gICAgaWYgKHkgIT0gMCkge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlucHV0JHtxdWVzdGlvbkluZGV4fWApLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG4gICAgfVxuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Scenes/Game1Scene3.js\n");
 
/***/ }),
 
/***/ "./src/Scenes/Game1Scene4.js":
/*!***********************************!*\
  !*** ./src/Scenes/Game1Scene4.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nvar _Ball = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Ball */ \"./src/gameObject/Ball.js\"));\n\nvar _FdInFdOut = _interopRequireDefault(__webpack_require__(/*! ../helper/FdInFdOut */ \"./src/helper/FdInFdOut.js\"));\n\nvar _Block = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Block */ \"./src/gameObject/Block.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nvar BLOCK = {\n  X: 250,\n  Y: 120\n};\nvar RANGEBLOCK = 90; // export var isWannaReset4 = [false];\n\nvar Game1Scene4 =\n/*#__PURE__*/\nfunction (_Phaser$Scene) {\n  _inherits(Game1Scene4, _Phaser$Scene);\n\n  function Game1Scene4() {\n    _classCallCheck(this, Game1Scene4);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Game1Scene4).call(this, 'Scene4'));\n  }\n\n  _createClass(Game1Scene4, [{\n    key: \"preload\",\n    value: function preload() {\n      this.load.html('question3', 'src/InputForm/scene4.html');\n      this.load.image('border', 'src/assets/border.png');\n      this.load.html('return', 'src/assets/text/return.html');\n      this.load.image('button', 'src/assets/next.png');\n      this.load.image('dayChau', 'src/assets/arrBlock.png');\n      this.load.image('ballHolder', 'src/assets/thanh.png');\n      this.load.image('ball', 'src/assets/ball.png');\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      this.Recreate();\n      this.CreateBall();\n      this.CreateBorder();\n      this.CreateTextAndBlock();\n      this.CreateLanguage();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.Move_Block_and_Display_NextQuestion();\n      this.DisplayQuestion1();\n      this.DisplayQuestion2();\n      this.ResetScene();\n      this.MoveBall();\n    } //------------------------------------------------------------------------------------\n    // eslint-disable-next-line camelcase\n\n  }, {\n    key: \"Move_Block_and_Display_NextQuestion\",\n    value: function Move_Block_and_Display_NextQuestion() {\n      var _this = this;\n\n      if (this.isMovingBlock) {\n        var startPosYBlock = BLOCK.Y + RANGEBLOCK * (this.currentBlock - 1);\n        var destination = BLOCK.Y + RANGEBLOCK * this.currentBlock;\n\n        if (this.block.y === startPosYBlock) {\n          new _Block.default().createArrayBlock(this, BLOCK.X, startPosYBlock);\n        }\n\n        if (this.block.y < destination) {\n          this.block.y += 3;\n        } else {\n          this.currentBlock++;\n          this.isDisplayNextText = true;\n          this.isMovingBlock = false;\n        }\n      }\n\n      if (this.isDisplayNextText) {\n        if (this.currentBlock === 2) {\n          $(document).ready(function () {\n            $('#layout_question2').delay(500).fadeIn();\n          });\n        } else if (this.currentBlock === 3) {\n          $(document).ready(function () {\n            $('#layout_question3').delay(500).fadeIn();\n          });\n        } else if (this.currentBlock === 4) {\n          $(document).ready(function () {\n            $('#layout_question4').delay(500).fadeIn();\n          });\n        }\n\n        if (this.currentBlock < totalBlock) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this.isMovingBlock = true;\n            },\n            repeat: 0\n          });\n        } else {\n          this.isDisplayQuestion1 = true;\n        }\n\n        this.isDisplayNextText = false;\n      }\n    }\n  }, {\n    key: \"DisplayQuestion1\",\n    value: function DisplayQuestion1() {\n      if (this.isDisplayQuestion1) {\n        $(document).ready(function () {\n          $('#layout_lastquestion').delay(1000).fadeIn();\n        });\n        setTimeout(function () {\n          document.getElementById('inputScene4').focus();\n        }, 1100);\n        this.isDisplayQuestion1 = false;\n      }\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"DisplayQuestion2\",\n    value: function DisplayQuestion2() {\n      if (isDisplayQuestion2) {\n        $(document).ready(function () {\n          $('#layout_lastquestion2').delay(1000).fadeIn();\n        });\n        setTimeout(function () {\n          document.getElementById('inputScene4v1').focus();\n        }, 1100);\n        isDisplayQuestion2 = false;\n      }\n    }\n  }, {\n    key: \"ResetScene\",\n    value: function ResetScene() {\n      var _this2 = this;\n\n      if (isResetScene) {\n        if (isWannaReset) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this2.scene.start('Scene4');\n            },\n            repeat: 0\n          });\n        } else {\n          this.is_Move_Ball = true;\n        }\n      }\n    }\n  }, {\n    key: \"MoveBall\",\n    value: function MoveBall() {\n      var _this3 = this;\n\n      if (this.is_Move_Ball) {\n        if (this.ball_Last.x < 680) {\n          this.ball_Last.x += 3;\n        } else {\n          this.time.addEvent({\n            delay: 2000,\n            callback: function callback() {\n              _this3.scene.start('Scene5');\n            },\n            repeat: 0\n          });\n        }\n      }\n    } //------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CreateBall\",\n    value: function CreateBall() {\n      this.add.image(540, 30, 'ballHolder'); // eslint-disable-next-line func-names\n\n      this.ball_Last = function (scene) {\n        var ball = new _Ball.default();\n        ball.create(scene, 770, 29);\n        ball.create(scene, 740, 29);\n        ball.create(scene, 710, 29);\n\n        for (var i = 0; i < 2; i++) {\n          var temp = ball.create(scene, 310 + 30 * i, 29);\n        } // eslint-disable-next-line block-scoped-var\n\n\n        return temp;\n      }(this);\n    }\n  }, {\n    key: \"CreateBorder\",\n    value: function CreateBorder() {\n      for (var i = 0; i < totalBlock; i++) {\n        border.push(this.add.image(BLOCK.X, BLOCK.Y + RANGEBLOCK * i, 'border'));\n        border[i].setVisible(0);\n      }\n    }\n  }, {\n    key: \"CreateTextAndBlock\",\n    value: function CreateTextAndBlock() {\n      var _this4 = this;\n\n      this.block = new _Block.default().createArrayBlock(this, BLOCK.X, BLOCK.Y);\n      this.question_Sub = this.add.dom(750, 130).createFromCache('question3');\n      this.block.setAlpha(0);\n      this.fade = new _FdInFdOut.default(this);\n      this.fade.FdOut(this.block);\n      $(document).ready(function () {\n        $('#layout_question1').hide();\n        $('#layout_question1').delay(1000).fadeIn();\n      });\n      this.time.addEvent({\n        delay: 2000,\n        callback: function callback() {\n          _this4.isMovingBlock = true;\n        },\n        repeat: 0\n      });\n      var m = document.getElementsByClassName('layout_question');\n\n      for (var i = 1; i < m.length; i++) {\n        m[i].style.padding = '35px 0 0 0';\n        m[i].style.margin = '0 0 0 10px';\n      }\n\n      m[1].style.bottom = '7px';\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"CreateLanguage\",\n    value: function CreateLanguage() {\n      if (window.location.hash == '#vietnam') {\n        var question = document.getElementsByClassName('question');\n\n        for (var i = 0; i < question.length; i++) {\n          question[i].innerHTML = 'Hình bên có 10 khối';\n        }\n\n        document.getElementById('lastques').innerHTML = 'Tổng số thanh bên trên:';\n        document.getElementById('lastques2').innerHTML = 'Tổng số khối bên trên:';\n      }\n    }\n  }, {\n    key: \"Recreate\",\n    value: function Recreate() {\n      this.ball_Last = null;\n      this.block = null;\n      this.fade = null;\n      this.isMovingBlock = false;\n      this.isDisplayNextText = false;\n      this.currentBlock = 1;\n      this.isDisplayQuestion1 = false;\n      isDisplayQuestion2 = false;\n      totalBlock = Math.floor(Math.random() * (4 - 2 + 1) + 2);\n      border = [];\n      isResetScene = false;\n      isWannaReset = false;\n      this.is_Move_Ball = false;\n    }\n  }]);\n\n  return Game1Scene4;\n}(Phaser.Scene);\n\nexports.default = Game1Scene4;\nvar totalBlock = Math.floor(Math.random() * (4 - 2 + 1) + 2);\nvar border = [];\nvar isDisplayQuestion2 = false;\nvar isResetScene = false;\nvar isWannaReset = false; // eslint-disable-next-line camelcase\n\nwindow.Check_QuestionScene4 = function Check_QuestionScene4() {\n  if (document.getElementById('inputScene4').value !== '') {\n    var y = document.getElementById('inputScene4').value % 10;\n    document.getElementById('inputScene4').value = '';\n    document.getElementById('inputScene4').value = y;\n\n    if (document.getElementById('inputScene4').value == totalBlock) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      var textResult = document.createElement('div');\n      textResult.appendChild(document.createTextNode(totalBlock.toString()));\n      var layoutQuestion = document.getElementById('layout_lastquestion');\n      textResult.style.cssText = 'display: inline-block; font-size:60px; margin-left: 20px';\n      layoutQuestion.replaceChild(textResult, document.getElementById('answer1'));\n      isDisplayQuestion2 = true;\n    } else {\n      for (var _i = 0; _i < totalBlock; _i++) {\n        border[_i].setVisible(1);\n      }\n\n      document.getElementById('inputScene4').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n}; // eslint-disable-next-line camelcase\n\n\nwindow.Check_QuestionScene4v1 = function Check_QuestionScene4v1() {\n  if (document.getElementById('inputScene4v1').value !== '') {\n    var y = document.getElementById('inputScene4v1').value % 10;\n    document.getElementById('inputScene4v1').value = '';\n    document.getElementById('inputScene4v1').value = y;\n\n    if (document.getElementById('inputScene4v1').value == totalBlock) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      document.getElementById('inputScene4v1').style.color = 'black';\n      document.getElementById('inputScene4v2').focus();\n    } else {\n      for (var _i2 = 0; _i2 < totalBlock; _i2++) {\n        border[_i2].setVisible(1);\n      }\n\n      document.getElementById('inputScene4v1').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n}; // eslint-disable-next-line camelcase\n\n\nwindow.Check_QuestionScene4v2 = function Check_QuestionScene4v2() {\n  if (document.getElementById('inputScene4v2').value !== '') {\n    if (document.getElementById('inputScene4v2').value == 0) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      var textResult = document.createElement('div');\n      textResult.appendChild(document.createTextNode((totalBlock * 10).toString()));\n      var layoutQuestion = document.getElementById('layout_lastquestion2');\n      textResult.style.cssText = 'display: inline-block; font-size:60px; margin-left: 20px';\n      layoutQuestion.replaceChild(textResult, document.getElementById('answer2'));\n      isResetScene = true;\n    } else {\n      for (var _i3 = 0; _i3 < totalBlock; _i3++) {\n        border[_i3].setVisible(1);\n      }\n\n      document.getElementById('inputScene4v2').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmVzL0dhbWUxU2NlbmU0LmpzP2QzNmYiXSwibmFtZXMiOlsiQkxPQ0siLCJYIiwiWSIsIlJBTkdFQkxPQ0siLCJHYW1lMVNjZW5lNCIsInN0YXJ0UG9zWUJsb2NrIiwiZGVzdGluYXRpb24iLCJCbG9jayIsIiQiLCJkZWxheSIsImNhbGxiYWNrIiwicmVwZWF0Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiaXNEaXNwbGF5UXVlc3Rpb24yIiwiYmFsbCIsIkJhbGwiLCJpIiwidGVtcCIsImJvcmRlciIsIkZkSW5GZE91dCIsIm0iLCJ3aW5kb3ciLCJxdWVzdGlvbiIsInRvdGFsQmxvY2siLCJNYXRoIiwiaXNSZXNldFNjZW5lIiwiaXNXYW5uYVJlc2V0IiwiUGhhc2VyIiwiU2NlbmUiLCJ5IiwidGV4dFJlc3VsdCIsImxheW91dFF1ZXN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFNQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQU1BLEtBQUssR0FBRztBQUNaQyxHQUFDLEVBRFc7QUFFWkMsR0FBQyxFQUFFO0FBRlMsQ0FBZDtBQUtBLElBQU1DLFVBQVUsR0FBaEIsRyxDQUNBOztJQUNxQkMsVzs7Ozs7QUFDbkIseUJBQWM7QUFBQTs7QUFBQTtBQUViOzs7OzhCQUVTO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRDs7OzZCQUVRO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNEOzs7NkJBRVE7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BR0Y7QUFFQTs7OzswREFDc0M7QUFBQTs7QUFDcEMsVUFBSSxLQUFKLGVBQXdCO0FBQ3RCLFlBQU1DLGNBQWMsR0FBR0wsS0FBSyxDQUFMQSxJQUFVRyxVQUFVLElBQUksb0JBQS9DLENBQTJDLENBQTNDO0FBQ0EsWUFBTUcsV0FBVyxHQUFHTixLQUFLLENBQUxBLElBQVVHLFVBQVUsR0FBRyxLQUEzQzs7QUFDQSxZQUFJLGlCQUFKLGdCQUFxQztBQUNsQyxjQUFJSSxPQUFMLE9BQUMsR0FBRCxnQkFBQyxDQUFELElBQUMsRUFBb0NQLEtBQUssQ0FBMUMsQ0FBQyxFQUFELGNBQUM7QUFDRjs7QUFDRCxZQUFJLGVBQUosYUFBZ0M7QUFDOUI7QUFERixlQUVPO0FBQ0w7QUFDQTtBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJLEtBQUosbUJBQTRCO0FBQzFCLFlBQUksc0JBQUosR0FBNkI7QUFDM0JRLFdBQUMsQ0FBREEsUUFBQyxDQUFEQSxPQUFrQixZQUFNO0FBQ3RCQSxhQUFDLENBQURBLG1CQUFDLENBQURBO0FBREZBO0FBREYsZUFJTyxJQUFJLHNCQUFKLEdBQTZCO0FBQ2xDQSxXQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsYUFBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQURGQTtBQURLLGVBSUEsSUFBSSxzQkFBSixHQUE2QjtBQUNsQ0EsV0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEJBLGFBQUMsQ0FBREEsbUJBQUMsQ0FBREE7QUFERkE7QUFHRDs7QUFFRCxZQUFJLG9CQUFKLFlBQW9DO0FBQ2xDLDZCQUFtQjtBQUNqQkMsaUJBQUssRUFEWTtBQUVqQkMsb0JBQVEsRUFBRSxvQkFBTTtBQUNkLG1CQUFJLENBQUo7QUFIZTtBQUtqQkMsa0JBQU0sRUFBRTtBQUxTLFdBQW5CO0FBREYsZUFRTztBQUNMO0FBQ0Q7O0FBQ0Q7QUFDRDtBQUNGOzs7dUNBRWtCO0FBQ2pCLFVBQUksS0FBSixvQkFBNkI7QUFDM0JILFNBQUMsQ0FBREEsUUFBQyxDQUFEQSxPQUFrQixZQUFNO0FBQ3RCQSxXQUFDLENBQURBLHNCQUFDLENBQURBO0FBREZBO0FBR0FJLGtCQUFVLENBQUMsWUFBTTtBQUNmQyxrQkFBUSxDQUFSQTtBQURRLFdBQVZELElBQVUsQ0FBVkE7QUFHQTtBQUNEO01BR0g7Ozs7dUNBQ21CO0FBQ2pCLDhCQUF3QjtBQUN0QkosU0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEJBLFdBQUMsQ0FBREEsdUJBQUMsQ0FBREE7QUFERkE7QUFHQUksa0JBQVUsQ0FBQyxZQUFNO0FBQ2ZDLGtCQUFRLENBQVJBO0FBRFEsV0FBVkQsSUFBVSxDQUFWQTtBQUdBRSwwQkFBa0IsR0FBbEJBO0FBQ0Q7QUFDRjs7O2lDQUVZO0FBQUE7O0FBQ1gsd0JBQWtCO0FBQ2hCLDBCQUFrQjtBQUNoQiw2QkFBbUI7QUFDakJMLGlCQUFLLEVBRFk7QUFFakJDLG9CQUFRLEVBQUUsb0JBQU07QUFDZCxvQkFBSSxDQUFKO0FBSGU7QUFLakJDLGtCQUFNLEVBQUU7QUFMUyxXQUFuQjtBQURGLGVBUU87QUFDTDtBQUNEO0FBQ0Y7QUFDRjs7OytCQUVVO0FBQUE7O0FBQ1QsVUFBSSxLQUFKLGNBQXVCO0FBQ3JCLFlBQUksbUJBQUosS0FBNEI7QUFDMUI7QUFERixlQUVPO0FBQ0wsNkJBQW1CO0FBQ2pCRixpQkFBSyxFQURZO0FBRWpCQyxvQkFBUSxFQUFFLG9CQUFNO0FBQ2Qsb0JBQUksQ0FBSjtBQUhlO0FBS2pCQyxrQkFBTSxFQUFFO0FBTFMsV0FBbkI7QUFPRDtBQUNGO01BSUg7Ozs7aUNBRWE7QUFDWCw4QkFEVyxZQUNYLEVBRFcsQ0FFWDs7QUFDQSx1QkFBa0IsaUJBQWlCO0FBQ2pDLFlBQU1JLElBQUksR0FBRyxJQUFJQyxNQUFqQixPQUFhLEVBQWI7QUFDQUQsWUFBSSxDQUFKQTtBQUNBQSxZQUFJLENBQUpBO0FBQ0FBLFlBQUksQ0FBSkE7O0FBQ0EsYUFBSyxJQUFJRSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBakIsR0FBdUJBLENBQXZCLElBQTRCO0FBQzFCLGNBQUlDLElBQUksR0FBR0gsSUFBSSxDQUFKQSxjQUFtQixNQUFNLEtBQXpCQSxHQUFYLEVBQVdBLENBQVg7QUFOK0IsVUFRakM7OztBQUNBO0FBVGdCLFFBQWxCLElBQWtCLENBQWxCO0FBV0Q7OzttQ0FFYztBQUNiLFdBQUssSUFBSUUsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQWpCLFlBQWdDQSxDQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxLQUFZLGVBQWVuQixLQUFLLENBQXBCLEdBQXdCQSxLQUFLLENBQUxBLElBQVVHLFVBQVUsR0FBNUMsR0FBWmdCLFFBQVksQ0FBWkE7QUFDQUEsY0FBTSxDQUFOQSxDQUFNLENBQU5BO0FBQ0Q7QUFDRjs7O3lDQUVvQjtBQUFBOztBQUNuQixtQkFBYyxJQUFJWixPQUFMLE9BQUMsR0FBRCxnQkFBQyxDQUFELElBQUMsRUFBb0NQLEtBQUssQ0FBMUMsQ0FBQyxFQUE2Q0EsS0FBSyxDQUFoRSxDQUFjLENBQWQ7QUFDQSwwQkFBb0IsdUNBQXBCLFdBQW9CLENBQXBCO0FBQ0E7QUFDQSxrQkFBWSxJQUFJb0IsV0FBSixRQUFaLElBQVksQ0FBWjtBQUNBLHNCQUFnQixLQUFoQjtBQUNBWixPQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsU0FBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQUNBQSxTQUFDLENBQURBLG1CQUFDLENBQURBO0FBRkZBO0FBSUEseUJBQW1CO0FBQ2pCQyxhQUFLLEVBRFk7QUFFakJDLGdCQUFRLEVBQUUsb0JBQU07QUFDZCxnQkFBSSxDQUFKO0FBSGU7QUFLakJDLGNBQU0sRUFBRTtBQUxTLE9BQW5CO0FBT0EsVUFBTVUsQ0FBQyxHQUFHUixRQUFRLENBQVJBLHVCQUFWLGlCQUFVQSxDQUFWOztBQUNBLFdBQUssSUFBSUksQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQUdJLENBQUMsQ0FBckIsUUFBOEJKLENBQTlCLElBQW1DO0FBQ2pDSSxTQUFDLENBQURBLENBQUMsQ0FBREE7QUFDQUEsU0FBQyxDQUFEQSxDQUFDLENBQURBO0FBQ0Q7O0FBQ0RBLE9BQUMsQ0FBREEsQ0FBQyxDQUFEQTtNQUdGOzs7O3FDQUNpQjtBQUNmLFVBQUlDLE1BQU0sQ0FBTkEsaUJBQUosWUFBd0M7QUFDdEMsWUFBTUMsUUFBUSxHQUFHVixRQUFRLENBQVJBLHVCQUFqQixVQUFpQkEsQ0FBakI7O0FBQ0EsYUFBSyxJQUFJSSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBR00sUUFBUSxDQUE1QixRQUFxQ04sQ0FBckMsSUFBMEM7QUFDeENNLGtCQUFRLENBQVJBLENBQVEsQ0FBUkE7QUFDRDs7QUFDRFYsZ0JBQVEsQ0FBUkE7QUFDQUEsZ0JBQVEsQ0FBUkE7QUFDRDtBQUNGOzs7K0JBRVU7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQyx3QkFBa0IsR0FBbEJBO0FBQ0FVLGdCQUFVLEdBQUdDLElBQUksQ0FBSkEsTUFBV0EsSUFBSSxDQUFKQSxZQUFpQixRQUFqQkEsS0FBeEJELENBQWFDLENBQWJEO0FBQ0FMLFlBQU0sR0FBTkE7QUFDQU8sa0JBQVksR0FBWkE7QUFDQUMsa0JBQVksR0FBWkE7QUFDQTtBQUNEOzs7O0VBdE5zQ0MsTUFBTSxDQUFDQyxLOzs7QUF5TmhELElBQUlMLFVBQVUsR0FBR0MsSUFBSSxDQUFKQSxNQUFXQSxJQUFJLENBQUpBLFlBQWlCLFFBQWpCQSxLQUE1QixDQUFpQkEsQ0FBakI7QUFDQSxJQUFJTixNQUFNLEdBQVY7QUFDQSxJQUFJTCxrQkFBa0IsR0FBdEI7QUFDQSxJQUFJWSxZQUFZLEdBQWhCO0FBQ0EsSUFBSUMsWUFBWSxHQUFoQixNLENBRUE7O0FBQ0FMLE1BQU0sQ0FBTkEsdUJBQThCLGdDQUFnQztBQUM1RCxNQUFJVCxRQUFRLENBQVJBLHdDQUFKLElBQXlEO0FBQ3ZELFFBQU1pQixDQUFDLEdBQUdqQixRQUFRLENBQVJBLHNDQUFWO0FBQ0FBLFlBQVEsQ0FBUkE7QUFDQUEsWUFBUSxDQUFSQTs7QUFDQSxRQUFJQSxRQUFRLENBQVJBLHVDQUFKLFlBQWdFO0FBQzlELFdBQUssSUFBSUksQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQWpCLFlBQWdDQSxDQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxDQUFNLENBQU5BO0FBQ0Q7O0FBQ0QsVUFBTVksVUFBVSxHQUFHbEIsUUFBUSxDQUFSQSxjQUFuQixLQUFtQkEsQ0FBbkI7QUFDQWtCLGdCQUFVLENBQVZBLFlBQXVCbEIsUUFBUSxDQUFSQSxlQUF5QlcsVUFBRCxDQUEvQ08sUUFBZ0RQLEVBQXpCWCxDQUF2QmtCO0FBQ0EsVUFBTUMsY0FBYyxHQUFHbkIsUUFBUSxDQUFSQSxlQUF2QixxQkFBdUJBLENBQXZCO0FBQ0FrQixnQkFBVSxDQUFWQTtBQUNBQyxvQkFBYyxDQUFkQSx5QkFBd0NuQixRQUFRLENBQVJBLGVBQXhDbUIsU0FBd0NuQixDQUF4Q21CO0FBQ0FsQix3QkFBa0IsR0FBbEJBO0FBVEYsV0FVTztBQUNMLFdBQUssSUFBSUcsRUFBQyxHQUFWLEdBQWdCQSxFQUFDLEdBQWpCLFlBQWdDQSxFQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxFQUFNLENBQU5BO0FBQ0Q7O0FBQ0ROLGNBQVEsQ0FBUkE7QUFDQWMsa0JBQVksR0FBWkE7QUFDRDtBQUNGO0FBdEJITCxFLENBeUJBOzs7QUFDQUEsTUFBTSxDQUFOQSx5QkFBZ0Msa0NBQWtDO0FBQ2hFLE1BQUlULFFBQVEsQ0FBUkEsMENBQUosSUFBMkQ7QUFDekQsUUFBTWlCLENBQUMsR0FBR2pCLFFBQVEsQ0FBUkEsd0NBQVY7QUFDQUEsWUFBUSxDQUFSQTtBQUNBQSxZQUFRLENBQVJBOztBQUNBLFFBQUlBLFFBQVEsQ0FBUkEseUNBQUosWUFBa0U7QUFDaEUsV0FBSyxJQUFJSSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBakIsWUFBZ0NBLENBQWhDLElBQXFDO0FBQ25DRSxjQUFNLENBQU5BLENBQU0sQ0FBTkE7QUFDRDs7QUFDRE4sY0FBUSxDQUFSQTtBQUNBQSxjQUFRLENBQVJBO0FBTEYsV0FNTztBQUNMLFdBQUssSUFBSUksR0FBQyxHQUFWLEdBQWdCQSxHQUFDLEdBQWpCLFlBQWdDQSxHQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxHQUFNLENBQU5BO0FBQ0Q7O0FBQ0ROLGNBQVEsQ0FBUkE7QUFDQWMsa0JBQVksR0FBWkE7QUFDRDtBQUNGO0FBbEJITCxFLENBcUJBOzs7QUFDQUEsTUFBTSxDQUFOQSx5QkFBZ0Msa0NBQWtDO0FBQ2hFLE1BQUlULFFBQVEsQ0FBUkEsMENBQUosSUFBMkQ7QUFDekQsUUFBSUEsUUFBUSxDQUFSQSx5Q0FBSixHQUF5RDtBQUN2RCxXQUFLLElBQUlJLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixZQUFnQ0EsQ0FBaEMsSUFBcUM7QUFDbkNFLGNBQU0sQ0FBTkEsQ0FBTSxDQUFOQTtBQUNEOztBQUNELFVBQU1ZLFVBQVUsR0FBR2xCLFFBQVEsQ0FBUkEsY0FBbkIsS0FBbUJBLENBQW5CO0FBQ0FrQixnQkFBVSxDQUFWQSxZQUF1QmxCLFFBQVEsQ0FBUkEsZUFBd0IsQ0FBQ1csVUFBVSxHQUFYLElBQS9DTyxRQUErQyxFQUF4QmxCLENBQXZCa0I7QUFDQSxVQUFNQyxjQUFjLEdBQUduQixRQUFRLENBQVJBLGVBQXZCLHNCQUF1QkEsQ0FBdkI7QUFDQWtCLGdCQUFVLENBQVZBO0FBQ0FDLG9CQUFjLENBQWRBLHlCQUF3Q25CLFFBQVEsQ0FBUkEsZUFBeENtQixTQUF3Q25CLENBQXhDbUI7QUFDQU4sa0JBQVksR0FBWkE7QUFURixXQVVPO0FBQ0wsV0FBSyxJQUFJVCxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsR0FBakIsWUFBZ0NBLEdBQWhDLElBQXFDO0FBQ25DRSxjQUFNLENBQU5BLEdBQU0sQ0FBTkE7QUFDRDs7QUFDRE4sY0FBUSxDQUFSQTtBQUNBYyxrQkFBWSxHQUFaQTtBQUNEO0FBQ0Y7QUFuQkhMIiwiZmlsZSI6Ii4vc3JjL1NjZW5lcy9HYW1lMVNjZW5lNC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhcnMtb24tdG9wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBsdXNwbHVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuaW1wb3J0ICdwaGFzZXInO1xuaW1wb3J0IEJhbGwgZnJvbSAnLi4vZ2FtZU9iamVjdC9CYWxsJztcbmltcG9ydCBGZEluRmRPdXQgZnJvbSAnLi4vaGVscGVyL0ZkSW5GZE91dCc7XG5pbXBvcnQgQmxvY2sgZnJvbSAnLi4vZ2FtZU9iamVjdC9CbG9jayc7XG5cblxuY29uc3QgQkxPQ0sgPSB7XG4gIFg6IDI1MCxcbiAgWTogMTIwLFxufTtcblxuY29uc3QgUkFOR0VCTE9DSyA9IDkwO1xuLy8gZXhwb3J0IHZhciBpc1dhbm5hUmVzZXQ0ID0gW2ZhbHNlXTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUxU2NlbmU0IGV4dGVuZHMgUGhhc2VyLlNjZW5lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1NjZW5lNCcpO1xuICB9XG5cbiAgcHJlbG9hZCgpIHtcbiAgICB0aGlzLmxvYWQuaHRtbCgncXVlc3Rpb24zJywgJ3NyYy9JbnB1dEZvcm0vc2NlbmU0Lmh0bWwnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2JvcmRlcicsICdzcmMvYXNzZXRzL2JvcmRlci5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaHRtbCgncmV0dXJuJywgJ3NyYy9hc3NldHMvdGV4dC9yZXR1cm4uaHRtbCcpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYnV0dG9uJywgJ3NyYy9hc3NldHMvbmV4dC5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2RheUNoYXUnLCAnc3JjL2Fzc2V0cy9hcnJCbG9jay5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2JhbGxIb2xkZXInLCAnc3JjL2Fzc2V0cy90aGFuaC5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2JhbGwnLCAnc3JjL2Fzc2V0cy9iYWxsLnBuZycpO1xuICB9XG5cbiAgY3JlYXRlKCkge1xuICAgIHRoaXMuUmVjcmVhdGUoKTtcbiAgICB0aGlzLkNyZWF0ZUJhbGwoKTtcbiAgICB0aGlzLkNyZWF0ZUJvcmRlcigpO1xuICAgIHRoaXMuQ3JlYXRlVGV4dEFuZEJsb2NrKCk7XG4gICAgdGhpcy5DcmVhdGVMYW5ndWFnZSgpO1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuTW92ZV9CbG9ja19hbmRfRGlzcGxheV9OZXh0UXVlc3Rpb24oKTtcbiAgICB0aGlzLkRpc3BsYXlRdWVzdGlvbjEoKTtcbiAgICB0aGlzLkRpc3BsYXlRdWVzdGlvbjIoKTtcbiAgICB0aGlzLlJlc2V0U2NlbmUoKTtcbiAgICB0aGlzLk1vdmVCYWxsKCk7XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgTW92ZV9CbG9ja19hbmRfRGlzcGxheV9OZXh0UXVlc3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNNb3ZpbmdCbG9jaykge1xuICAgICAgY29uc3Qgc3RhcnRQb3NZQmxvY2sgPSBCTE9DSy5ZICsgUkFOR0VCTE9DSyAqICh0aGlzLmN1cnJlbnRCbG9jayAtIDEpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBCTE9DSy5ZICsgUkFOR0VCTE9DSyAqIHRoaXMuY3VycmVudEJsb2NrO1xuICAgICAgaWYgKHRoaXMuYmxvY2sueSA9PT0gc3RhcnRQb3NZQmxvY2spIHtcbiAgICAgICAgKG5ldyBCbG9jaygpKS5jcmVhdGVBcnJheUJsb2NrKHRoaXMsIEJMT0NLLlgsIHN0YXJ0UG9zWUJsb2NrKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmJsb2NrLnkgPCBkZXN0aW5hdGlvbikge1xuICAgICAgICB0aGlzLmJsb2NrLnkgKz0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudEJsb2NrKys7XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5TmV4dFRleHQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTW92aW5nQmxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlOZXh0VGV4dCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudEJsb2NrID09PSAyKSB7XG4gICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgICAkKCcjbGF5b3V0X3F1ZXN0aW9uMicpLmRlbGF5KDUwMCkuZmFkZUluKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRCbG9jayA9PT0gMykge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjMnKS5kZWxheSg1MDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50QmxvY2sgPT09IDQpIHtcbiAgICAgICAgJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICQoJyNsYXlvdXRfcXVlc3Rpb240JykuZGVsYXkoNTAwKS5mYWRlSW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRCbG9jayA8IHRvdGFsQmxvY2spIHtcbiAgICAgICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdmluZ0Jsb2NrID0gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcGVhdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzRGlzcGxheVF1ZXN0aW9uMSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmlzRGlzcGxheU5leHRUZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgRGlzcGxheVF1ZXN0aW9uMSgpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlRdWVzdGlvbjEpIHtcbiAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgJCgnI2xheW91dF9sYXN0cXVlc3Rpb24nKS5kZWxheSgxMDAwKS5mYWRlSW4oKTtcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNCcpLmZvY3VzKCk7XG4gICAgICB9LCAxMTAwKTtcbiAgICAgIHRoaXMuaXNEaXNwbGF5UXVlc3Rpb24xID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgRGlzcGxheVF1ZXN0aW9uMigpIHtcbiAgICBpZiAoaXNEaXNwbGF5UXVlc3Rpb24yKSB7XG4gICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICQoJyNsYXlvdXRfbGFzdHF1ZXN0aW9uMicpLmRlbGF5KDEwMDApLmZhZGVJbigpO1xuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djEnKS5mb2N1cygpO1xuICAgICAgfSwgMTEwMCk7XG4gICAgICBpc0Rpc3BsYXlRdWVzdGlvbjIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBSZXNldFNjZW5lKCkge1xuICAgIGlmIChpc1Jlc2V0U2NlbmUpIHtcbiAgICAgIGlmIChpc1dhbm5hUmVzZXQpIHtcbiAgICAgICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5zdGFydCgnU2NlbmU0Jyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc19Nb3ZlX0JhbGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIE1vdmVCYWxsKCkge1xuICAgIGlmICh0aGlzLmlzX01vdmVfQmFsbCkge1xuICAgICAgaWYgKHRoaXMuYmFsbF9MYXN0LnggPCA2ODApIHtcbiAgICAgICAgdGhpcy5iYWxsX0xhc3QueCArPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgICAgICBkZWxheTogMjAwMCxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5zdGFydCgnU2NlbmU1Jyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBDcmVhdGVCYWxsKCkge1xuICAgIHRoaXMuYWRkLmltYWdlKDU0MCwgMzAsICdiYWxsSG9sZGVyJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLmJhbGxfTGFzdCA9IChmdW5jdGlvbiAoc2NlbmUpIHtcbiAgICAgIGNvbnN0IGJhbGwgPSBuZXcgQmFsbCgpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDc3MCwgMjkpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDc0MCwgMjkpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDcxMCwgMjkpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgdmFyIHRlbXAgPSBiYWxsLmNyZWF0ZShzY2VuZSwgMzEwICsgMzAgKiBpLCAyOSk7XG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYmxvY2stc2NvcGVkLXZhclxuICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSh0aGlzKSk7XG4gIH1cblxuICBDcmVhdGVCb3JkZXIoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgIGJvcmRlci5wdXNoKHRoaXMuYWRkLmltYWdlKEJMT0NLLlgsIEJMT0NLLlkgKyBSQU5HRUJMT0NLICogaSwgJ2JvcmRlcicpKTtcbiAgICAgIGJvcmRlcltpXS5zZXRWaXNpYmxlKDApO1xuICAgIH1cbiAgfVxuXG4gIENyZWF0ZVRleHRBbmRCbG9jaygpIHtcbiAgICB0aGlzLmJsb2NrID0gKG5ldyBCbG9jaygpKS5jcmVhdGVBcnJheUJsb2NrKHRoaXMsIEJMT0NLLlgsIEJMT0NLLlkpO1xuICAgIHRoaXMucXVlc3Rpb25fU3ViID0gdGhpcy5hZGQuZG9tKDc1MCwgMTMwKS5jcmVhdGVGcm9tQ2FjaGUoJ3F1ZXN0aW9uMycpO1xuICAgIHRoaXMuYmxvY2suc2V0QWxwaGEoMCk7XG4gICAgdGhpcy5mYWRlID0gbmV3IEZkSW5GZE91dCh0aGlzKTtcbiAgICB0aGlzLmZhZGUuRmRPdXQodGhpcy5ibG9jayk7XG4gICAgJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjEnKS5oaWRlKCk7XG4gICAgICAkKCcjbGF5b3V0X3F1ZXN0aW9uMScpLmRlbGF5KDEwMDApLmZhZGVJbigpO1xuICAgIH0pO1xuICAgIHRoaXMudGltZS5hZGRFdmVudCh7XG4gICAgICBkZWxheTogMjAwMCxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb3ZpbmdCbG9jayA9IHRydWU7XG4gICAgICB9LFxuICAgICAgcmVwZWF0OiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IG0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsYXlvdXRfcXVlc3Rpb24nKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1baV0uc3R5bGUucGFkZGluZyA9ICczNXB4IDAgMCAwJztcbiAgICAgIG1baV0uc3R5bGUubWFyZ2luID0gJzAgMCAwIDEwcHgnO1xuICAgIH1cbiAgICBtWzFdLnN0eWxlLmJvdHRvbSA9ICc3cHgnO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgQ3JlYXRlTGFuZ3VhZ2UoKSB7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09ICcjdmlldG5hbScpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncXVlc3Rpb24nKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVlc3Rpb25baV0uaW5uZXJIVE1MID0gJ0jDrG5oIGLDqm4gY8OzIDEwIGto4buRaSc7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFzdHF1ZXMnKS5pbm5lckhUTUwgPSAnVOG7lW5nIHPhu5EgdGhhbmggYsOqbiB0csOqbjonO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhc3RxdWVzMicpLmlubmVySFRNTCA9ICdU4buVbmcgc+G7kSBraOG7kWkgYsOqbiB0csOqbjonO1xuICAgIH1cbiAgfVxuXG4gIFJlY3JlYXRlKCkge1xuICAgIHRoaXMuYmFsbF9MYXN0ID0gbnVsbDtcbiAgICB0aGlzLmJsb2NrID0gbnVsbDtcbiAgICB0aGlzLmZhZGUgPSBudWxsO1xuICAgIHRoaXMuaXNNb3ZpbmdCbG9jayA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNwbGF5TmV4dFRleHQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRCbG9jayA9IDE7XG4gICAgdGhpcy5pc0Rpc3BsYXlRdWVzdGlvbjEgPSBmYWxzZTtcbiAgICBpc0Rpc3BsYXlRdWVzdGlvbjIgPSBmYWxzZTtcbiAgICB0b3RhbEJsb2NrID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDQgLSAyICsgMSkgKyAyKTtcbiAgICBib3JkZXIgPSBbXTtcbiAgICBpc1Jlc2V0U2NlbmUgPSBmYWxzZTtcbiAgICBpc1dhbm5hUmVzZXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzX01vdmVfQmFsbCA9IGZhbHNlO1xuICB9XG59XG5cbnZhciB0b3RhbEJsb2NrID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDQgLSAyICsgMSkgKyAyKTtcbnZhciBib3JkZXIgPSBbXTtcbnZhciBpc0Rpc3BsYXlRdWVzdGlvbjIgPSBmYWxzZTtcbnZhciBpc1Jlc2V0U2NlbmUgPSBmYWxzZTtcbnZhciBpc1dhbm5hUmVzZXQgPSBmYWxzZTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxud2luZG93LkNoZWNrX1F1ZXN0aW9uU2NlbmU0ID0gZnVuY3Rpb24gQ2hlY2tfUXVlc3Rpb25TY2VuZTQoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS52YWx1ZSAhPT0gJycpIHtcbiAgICBjb25zdCB5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0JykudmFsdWUgJSAxMDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNCcpLnZhbHVlID0geTtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0JykudmFsdWUgPT0gdG90YWxCbG9jaykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0UmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZXh0UmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCh0b3RhbEJsb2NrKS50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCBsYXlvdXRRdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXRfbGFzdHF1ZXN0aW9uJyk7XG4gICAgICB0ZXh0UmVzdWx0LnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6NjBweDsgbWFyZ2luLWxlZnQ6IDIwcHgnO1xuICAgICAgbGF5b3V0UXVlc3Rpb24ucmVwbGFjZUNoaWxkKHRleHRSZXN1bHQsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbnN3ZXIxJykpO1xuICAgICAgaXNEaXNwbGF5UXVlc3Rpb24yID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMSk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS5zdHlsZS5jb2xvciA9ICdyZWQnO1xuICAgICAgaXNXYW5uYVJlc2V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbndpbmRvdy5DaGVja19RdWVzdGlvblNjZW5lNHYxID0gZnVuY3Rpb24gQ2hlY2tfUXVlc3Rpb25TY2VuZTR2MSgpIHtcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgIT09ICcnKSB7XG4gICAgY29uc3QgeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgJSAxMDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djEnKS52YWx1ZSA9IHk7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgPT0gdG90YWxCbG9jaykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMCk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnN0eWxlLmNvbG9yID0gJ2JsYWNrJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYyJykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMSk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG4gICAgICBpc1dhbm5hUmVzZXQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxud2luZG93LkNoZWNrX1F1ZXN0aW9uU2NlbmU0djIgPSBmdW5jdGlvbiBDaGVja19RdWVzdGlvblNjZW5lNHYyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djInKS52YWx1ZSAhPT0gJycpIHtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djInKS52YWx1ZSA9PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQmxvY2s7IGkrKykge1xuICAgICAgICBib3JkZXJbaV0uc2V0VmlzaWJsZSgwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRleHRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoKHRvdGFsQmxvY2sgKiAxMCkudG9TdHJpbmcoKSkpO1xuICAgICAgY29uc3QgbGF5b3V0UXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0X2xhc3RxdWVzdGlvbjInKTtcbiAgICAgIHRleHRSZXN1bHQuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTo2MHB4OyBtYXJnaW4tbGVmdDogMjBweCc7XG4gICAgICBsYXlvdXRRdWVzdGlvbi5yZXBsYWNlQ2hpbGQodGV4dFJlc3VsdCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fuc3dlcjInKSk7XG4gICAgICBpc1Jlc2V0U2NlbmUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQmxvY2s7IGkrKykge1xuICAgICAgICBib3JkZXJbaV0uc2V0VmlzaWJsZSgxKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYyJykuc3R5bGUuY29sb3IgPSAncmVkJztcbiAgICAgIGlzV2FubmFSZXNldCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Scenes/Game1Scene4.js\n");
 
/***/ }),
 
/***/ "./src/Scenes/Game1Scene5.js":
/*!***********************************!*\
  !*** ./src/Scenes/Game1Scene5.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nvar _Ball = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Ball */ \"./src/gameObject/Ball.js\"));\n\nvar _FdInFdOut = _interopRequireDefault(__webpack_require__(/*! ../helper/FdInFdOut */ \"./src/helper/FdInFdOut.js\"));\n\nvar _Block = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Block */ \"./src/gameObject/Block.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nvar BLOCK = {\n  X: 250,\n  Y: 120\n};\nvar RANGEBLOCK = 90; // export var isWannaReset4 = [false];\n\nvar Game1Scene5 =\n/*#__PURE__*/\nfunction (_Phaser$Scene) {\n  _inherits(Game1Scene5, _Phaser$Scene);\n\n  function Game1Scene5() {\n    _classCallCheck(this, Game1Scene5);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Game1Scene5).call(this, 'Scene5'));\n  }\n\n  _createClass(Game1Scene5, [{\n    key: \"preload\",\n    value: function preload() {\n      this.load.html('question4', 'src/InputForm/scene5.html');\n      this.load.image('border', 'src/assets/border.png');\n      this.load.html('return', 'src/assets/text/return.html');\n      this.load.image('button', 'src/assets/next.png');\n      this.load.image('dayChau', 'src/assets/arrBlock.png');\n      this.load.image('ballHolder', 'src/assets/thanh.png');\n      this.load.image('ball', 'src/assets/ball.png');\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      this.Recreate();\n      this.CreateBall();\n      this.CreateBorder();\n      this.CreateTextAndBlock();\n      this.CreateLanguage();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.Move_Block_and_Display_NextQuestion();\n      this.DisplayQuestion1();\n      this.DisplayQuestion2();\n      this.ResetScene();\n      this.MoveBall();\n    } //------------------------------------------------------------------------------------\n    // eslint-disable-next-line camelcase\n\n  }, {\n    key: \"Move_Block_and_Display_NextQuestion\",\n    value: function Move_Block_and_Display_NextQuestion() {\n      var _this = this;\n\n      if (this.isMovingBlock) {\n        var startPosYBlock = BLOCK.Y + RANGEBLOCK * (this.currentBlock - 1);\n        var destination = BLOCK.Y + RANGEBLOCK * this.currentBlock;\n\n        if (this.block.y === startPosYBlock) {\n          new _Block.default().createArrayBlock(this, BLOCK.X, startPosYBlock);\n        }\n\n        if (this.block.y < destination) {\n          this.block.y += 3;\n        } else {\n          this.currentBlock++;\n          this.isDisplayNextText = true;\n          this.isMovingBlock = false;\n        }\n      }\n\n      if (this.isDisplayNextText) {\n        if (this.currentBlock === 2) {\n          $(document).ready(function () {\n            $('#layout_question2').delay(500).fadeIn();\n          });\n        } else if (this.currentBlock === 3) {\n          $(document).ready(function () {\n            $('#layout_question3').delay(500).fadeIn();\n          });\n        } else if (this.currentBlock === 4) {\n          $(document).ready(function () {\n            $('#layout_question4').delay(500).fadeIn();\n          });\n        }\n\n        if (this.currentBlock < totalBlock) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this.isMovingBlock = true;\n            },\n            repeat: 0\n          });\n        } else {\n          this.isDisplayQuestion1 = true;\n        }\n\n        this.isDisplayNextText = false;\n      }\n    }\n  }, {\n    key: \"DisplayQuestion1\",\n    value: function DisplayQuestion1() {\n      if (this.isDisplayQuestion1) {\n        $(document).ready(function () {\n          $('#layout_lastquestion').delay(1000).fadeIn();\n        });\n        setTimeout(function () {\n          document.getElementById('inputScene4').focus();\n        }, 1100);\n        this.isDisplayQuestion1 = false;\n      }\n    }\n  }, {\n    key: \"DisplayQuestion2\",\n    value: function DisplayQuestion2() {\n      if (isDisplayQuestion2) {\n        $(document).ready(function () {\n          $('#layout_lastquestion2').delay(1000).fadeIn();\n        });\n        setTimeout(function () {\n          document.getElementById('inputScene4v1').focus();\n        }, 1100);\n        isDisplayQuestion2 = false;\n      }\n    }\n  }, {\n    key: \"ResetScene\",\n    value: function ResetScene() {\n      var _this2 = this;\n\n      if (isResetScene) {\n        if (isWannaReset) {\n          this.time.addEvent({\n            delay: 1000,\n            callback: function callback() {\n              _this2.scene.start('Scene5');\n            },\n            repeat: 0\n          });\n        } else {\n          this.is_Move_Ball = true;\n        }\n      }\n    }\n  }, {\n    key: \"MoveBall\",\n    value: function MoveBall() {\n      var _this3 = this;\n\n      if (this.is_Move_Ball) {\n        if (this.ball_Last.x < 650) {\n          this.ball_Last.x += 3;\n        } else {\n          this.time.addEvent({\n            delay: 2000,\n            callback: function callback() {\n              _this3.scene.start('Scene5');\n            },\n            repeat: 0\n          });\n        }\n      }\n    } //------------------------------------------------------------------------------------\n\n  }, {\n    key: \"CreateBall\",\n    value: function CreateBall() {\n      this.add.image(540, 30, 'ballHolder');\n\n      this.ball_Last = function (scene) {\n        var ball = new _Ball.default();\n        ball.create(scene, 770, 29);\n        ball.create(scene, 740, 29);\n        ball.create(scene, 710, 29);\n        ball.create(scene, 680, 29);\n\n        for (var i = 0; i < 1; i++) {\n          var temp = ball.create(scene, 310 + 30 * i, 29);\n        }\n\n        return temp;\n      }(this);\n    }\n  }, {\n    key: \"CreateBorder\",\n    value: function CreateBorder() {\n      for (var i = 0; i < totalBlock; i++) {\n        border.push(this.add.image(BLOCK.X, BLOCK.Y + RANGEBLOCK * i, 'border'));\n        border[i].setVisible(0);\n      }\n    }\n  }, {\n    key: \"CreateTextAndBlock\",\n    value: function CreateTextAndBlock() {\n      var _this4 = this;\n\n      this.block = new _Block.default().createArrayBlock(this, BLOCK.X, BLOCK.Y);\n      this.question_Sub = this.add.dom(750, 130).createFromCache('question4');\n      this.block.setAlpha(0);\n      this.fade = new _FdInFdOut.default(this);\n      this.fade.FdOut(this.block);\n      $(document).ready(function () {\n        $('#layout_question1').hide();\n        $('#layout_question1').delay(1000).fadeIn();\n      });\n      this.time.addEvent({\n        delay: 2000,\n        callback: function callback() {\n          _this4.isMovingBlock = true;\n        },\n        repeat: 0\n      });\n      var m = document.getElementsByClassName('layout_question');\n\n      for (var i = 1; i < m.length; i++) {\n        m[i].style.padding = '35px 0 0 0';\n        m[i].style.margin = '0 0 0 10px';\n      }\n\n      m[1].style.bottom = '7px';\n    }\n  }, {\n    key: \"CreateLanguage\",\n    value: function CreateLanguage() {\n      if (window.location.hash === '#vietnam') {\n        var question = document.getElementsByClassName('question');\n\n        for (var i = 0; i < question.length; i++) {\n          question[i].innerHTML = 'Hình bên có 10 khối';\n        }\n\n        document.getElementById('lastques').innerHTML = 'Tổng số thanh bên trên:';\n        document.getElementById('lastques2').innerHTML = 'Tổng số khối bên trên:';\n      }\n    }\n  }, {\n    key: \"Recreate\",\n    value: function Recreate() {\n      this.ball_Last = null;\n      this.block = null;\n      this.fade = null;\n      this.isMovingBlock = false;\n      this.isDisplayNextText = false;\n      this.currentBlock = 1;\n      this.isDisplayQuestion1 = false;\n      isDisplayQuestion2 = false;\n      totalBlock = Math.floor(Math.random() * (4 - 2 + 1) + 2);\n      border = [];\n      isResetScene = false;\n      isWannaReset = false;\n      this.is_Move_Ball = false;\n    }\n  }]);\n\n  return Game1Scene5;\n}(Phaser.Scene);\n\nexports.default = Game1Scene5;\nvar totalBlock = Math.floor(Math.random() * (4 - 2 + 1) + 2);\nvar border = [];\nvar isDisplayQuestion2 = false;\nvar isResetScene = false;\nvar isWannaReset = false; // eslint-disable-next-line camelcase\n\nwindow.Check_QuestionScene5 = function Check_QuestionScene5() {\n  if (document.getElementById('inputScene4').value !== '') {\n    var y = document.getElementById('inputScene4').value % 10;\n    document.getElementById('inputScene4').value = '';\n    document.getElementById('inputScene4').value = y;\n\n    if (document.getElementById('inputScene4').value == totalBlock) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      var textResult = document.createElement('div');\n      textResult.appendChild(document.createTextNode(totalBlock.toString()));\n      var layoutQuestion = document.getElementById('layout_lastquestion');\n      textResult.style.cssText = 'display: inline-block; font-size:60px; margin-left: 20px';\n      layoutQuestion.replaceChild(textResult, document.getElementById('answer1'));\n      isDisplayQuestion2 = true;\n    } else {\n      console.log(border[0]);\n\n      for (var _i = 0; _i < totalBlock; _i++) {\n        border[_i].setVisible(1);\n      }\n\n      document.getElementById('inputScene4').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n}; // eslint-disable-next-line camelcase\n\n\nwindow.Check_QuestionScene5v1 = function Check_QuestionScene5v1() {\n  if (document.getElementById('inputScene4v1').value !== '') {\n    var y = document.getElementById('inputScene4v1').value % 10;\n    document.getElementById('inputScene4v1').value = '';\n    document.getElementById('inputScene4v1').value = y;\n\n    if (document.getElementById('inputScene4v1').value == totalBlock) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      document.getElementById('inputScene4v1').style.color = 'black';\n      document.getElementById('inputScene4v2').focus();\n    } else {\n      for (var _i2 = 0; _i2 < totalBlock; _i2++) {\n        border[_i2].setVisible(1);\n      }\n\n      document.getElementById('inputScene4v1').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n}; // eslint-disable-next-line camelcase\n\n\nwindow.Check_QuestionScene5v2 = function Check_QuestionScene5v2() {\n  if (document.getElementById('inputScene4v2').value !== '') {\n    if (document.getElementById('inputScene4v2').value == 0) {\n      for (var i = 0; i < totalBlock; i++) {\n        border[i].setVisible(0);\n      }\n\n      var textResult = document.createElement('div');\n      textResult.appendChild(document.createTextNode((totalBlock * 10).toString()));\n      var layoutQuestion = document.getElementById('layout_lastquestion2');\n      textResult.style.cssText = 'display: inline-block; font-size:60px; margin-left: 20px';\n      layoutQuestion.replaceChild(textResult, document.getElementById('answer2'));\n      isResetScene = true;\n    } else {\n      for (var _i3 = 0; _i3 < totalBlock; _i3++) {\n        border[_i3].setVisible(1);\n      }\n\n      document.getElementById('inputScene4v2').style.color = 'red';\n      isWannaReset = true;\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmVzL0dhbWUxU2NlbmU1LmpzPzEwYzQiXSwibmFtZXMiOlsiQkxPQ0siLCJYIiwiWSIsIlJBTkdFQkxPQ0siLCJHYW1lMVNjZW5lNSIsInN0YXJ0UG9zWUJsb2NrIiwiZGVzdGluYXRpb24iLCJCbG9jayIsIiQiLCJkZWxheSIsImNhbGxiYWNrIiwicmVwZWF0Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiaXNEaXNwbGF5UXVlc3Rpb24yIiwiYmFsbCIsIkJhbGwiLCJpIiwidGVtcCIsImJvcmRlciIsIkZkSW5GZE91dCIsIm0iLCJ3aW5kb3ciLCJxdWVzdGlvbiIsInRvdGFsQmxvY2siLCJNYXRoIiwiaXNSZXNldFNjZW5lIiwiaXNXYW5uYVJlc2V0IiwiUGhhc2VyIiwiU2NlbmUiLCJ5IiwidGV4dFJlc3VsdCIsImxheW91dFF1ZXN0aW9uIiwiY29uc29sZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBUUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFNQSxLQUFLLEdBQUc7QUFDWkMsR0FBQyxFQURXO0FBRVpDLEdBQUMsRUFBRTtBQUZTLENBQWQ7QUFLQSxJQUFNQyxVQUFVLEdBQWhCLEcsQ0FDQTs7SUFDcUJDLFc7Ozs7O0FBQ25CLHlCQUFjO0FBQUE7O0FBQUE7QUFFYjs7Ozs4QkFFUztBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7Ozs2QkFFUTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRDs7OzZCQUVRO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUdGO0FBRUE7Ozs7MERBQ3NDO0FBQUE7O0FBQ3BDLFVBQUksS0FBSixlQUF3QjtBQUN0QixZQUFNQyxjQUFjLEdBQUdMLEtBQUssQ0FBTEEsSUFBVUcsVUFBVSxJQUFJLG9CQUEvQyxDQUEyQyxDQUEzQztBQUNBLFlBQU1HLFdBQVcsR0FBR04sS0FBSyxDQUFMQSxJQUFVRyxVQUFVLEdBQUcsS0FBM0M7O0FBQ0EsWUFBSSxpQkFBSixnQkFBcUM7QUFDbEMsY0FBSUksT0FBTCxPQUFDLEdBQUQsZ0JBQUMsQ0FBRCxJQUFDLEVBQW9DUCxLQUFLLENBQTFDLENBQUMsRUFBRCxjQUFDO0FBQ0Y7O0FBQ0QsWUFBSSxlQUFKLGFBQWdDO0FBQzlCO0FBREYsZUFFTztBQUNMO0FBQ0E7QUFDQTtBQUNEO0FBQ0Y7O0FBRUQsVUFBSSxLQUFKLG1CQUE0QjtBQUMxQixZQUFJLHNCQUFKLEdBQTZCO0FBQzNCUSxXQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsYUFBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQURGQTtBQURGLGVBSU8sSUFBSSxzQkFBSixHQUE2QjtBQUNsQ0EsV0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEJBLGFBQUMsQ0FBREEsbUJBQUMsQ0FBREE7QUFERkE7QUFESyxlQUlBLElBQUksc0JBQUosR0FBNkI7QUFDbENBLFdBQUMsQ0FBREEsUUFBQyxDQUFEQSxPQUFrQixZQUFNO0FBQ3RCQSxhQUFDLENBQURBLG1CQUFDLENBQURBO0FBREZBO0FBR0Q7O0FBRUQsWUFBSSxvQkFBSixZQUFvQztBQUNsQyw2QkFBbUI7QUFDakJDLGlCQUFLLEVBRFk7QUFFakJDLG9CQUFRLEVBQUUsb0JBQU07QUFDZCxtQkFBSSxDQUFKO0FBSGU7QUFLakJDLGtCQUFNLEVBQUU7QUFMUyxXQUFuQjtBQURGLGVBUU87QUFDTDtBQUNEOztBQUNEO0FBQ0Q7QUFDRjs7O3VDQUVrQjtBQUNqQixVQUFJLEtBQUosb0JBQTZCO0FBQzNCSCxTQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsV0FBQyxDQUFEQSxzQkFBQyxDQUFEQTtBQURGQTtBQUdBSSxrQkFBVSxDQUFDLFlBQU07QUFDZkMsa0JBQVEsQ0FBUkE7QUFEUSxXQUFWRCxJQUFVLENBQVZBO0FBR0E7QUFDRDtBQUNGOzs7dUNBRWtCO0FBQ2pCLDhCQUF3QjtBQUN0QkosU0FBQyxDQUFEQSxRQUFDLENBQURBLE9BQWtCLFlBQU07QUFDdEJBLFdBQUMsQ0FBREEsdUJBQUMsQ0FBREE7QUFERkE7QUFHQUksa0JBQVUsQ0FBQyxZQUFNO0FBQ2ZDLGtCQUFRLENBQVJBO0FBRFEsV0FBVkQsSUFBVSxDQUFWQTtBQUdBRSwwQkFBa0IsR0FBbEJBO0FBQ0Q7QUFDRjs7O2lDQUVZO0FBQUE7O0FBQ1gsd0JBQWtCO0FBQ2hCLDBCQUFrQjtBQUNoQiw2QkFBbUI7QUFDakJMLGlCQUFLLEVBRFk7QUFFakJDLG9CQUFRLEVBQUUsb0JBQU07QUFDZCxvQkFBSSxDQUFKO0FBSGU7QUFLakJDLGtCQUFNLEVBQUU7QUFMUyxXQUFuQjtBQURGLGVBUU87QUFDTDtBQUNEO0FBQ0Y7QUFDRjs7OytCQUVVO0FBQUE7O0FBQ1QsVUFBSSxLQUFKLGNBQXVCO0FBQ3JCLFlBQUksbUJBQUosS0FBNEI7QUFDMUI7QUFERixlQUVPO0FBQ0wsNkJBQW1CO0FBQ2pCRixpQkFBSyxFQURZO0FBRWpCQyxvQkFBUSxFQUFFLG9CQUFNO0FBQ2Qsb0JBQUksQ0FBSjtBQUhlO0FBS2pCQyxrQkFBTSxFQUFFO0FBTFMsV0FBbkI7QUFPRDtBQUNGO01BSUg7Ozs7aUNBRWE7QUFDWDs7QUFDQSx1QkFBa0IsaUJBQWlCO0FBQ2pDLFlBQU1JLElBQUksR0FBRyxJQUFJQyxNQUFqQixPQUFhLEVBQWI7QUFDQUQsWUFBSSxDQUFKQTtBQUNBQSxZQUFJLENBQUpBO0FBQ0FBLFlBQUksQ0FBSkE7QUFDQUEsWUFBSSxDQUFKQTs7QUFDQSxhQUFLLElBQUlFLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixHQUF1QkEsQ0FBdkIsSUFBNEI7QUFDMUIsY0FBSUMsSUFBSSxHQUFHSCxJQUFJLENBQUpBLGNBQW1CLE1BQU0sS0FBekJBLEdBQVgsRUFBV0EsQ0FBWDtBQUNEOztBQUNEO0FBVGdCLFFBQWxCLElBQWtCLENBQWxCO0FBV0Q7OzttQ0FFYztBQUNiLFdBQUssSUFBSUUsQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQWpCLFlBQWdDQSxDQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxLQUFZLGVBQWVuQixLQUFLLENBQXBCLEdBQXdCQSxLQUFLLENBQUxBLElBQVVHLFVBQVUsR0FBNUMsR0FBWmdCLFFBQVksQ0FBWkE7QUFDQUEsY0FBTSxDQUFOQSxDQUFNLENBQU5BO0FBQ0Q7QUFDRjs7O3lDQUVvQjtBQUFBOztBQUNuQixtQkFBYyxJQUFJWixPQUFMLE9BQUMsR0FBRCxnQkFBQyxDQUFELElBQUMsRUFBb0NQLEtBQUssQ0FBMUMsQ0FBQyxFQUE2Q0EsS0FBSyxDQUFoRSxDQUFjLENBQWQ7QUFDQSwwQkFBb0IsdUNBQXBCLFdBQW9CLENBQXBCO0FBQ0E7QUFDQSxrQkFBWSxJQUFJb0IsV0FBSixRQUFaLElBQVksQ0FBWjtBQUNBLHNCQUFnQixLQUFoQjtBQUNBWixPQUFDLENBQURBLFFBQUMsQ0FBREEsT0FBa0IsWUFBTTtBQUN0QkEsU0FBQyxDQUFEQSxtQkFBQyxDQUFEQTtBQUNBQSxTQUFDLENBQURBLG1CQUFDLENBQURBO0FBRkZBO0FBSUEseUJBQW1CO0FBQ2pCQyxhQUFLLEVBRFk7QUFFakJDLGdCQUFRLEVBQUUsb0JBQU07QUFDZCxnQkFBSSxDQUFKO0FBSGU7QUFLakJDLGNBQU0sRUFBRTtBQUxTLE9BQW5CO0FBT0EsVUFBTVUsQ0FBQyxHQUFHUixRQUFRLENBQVJBLHVCQUFWLGlCQUFVQSxDQUFWOztBQUNBLFdBQUssSUFBSUksQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQUdJLENBQUMsQ0FBckIsUUFBOEJKLENBQTlCLElBQW1DO0FBQ2pDSSxTQUFDLENBQURBLENBQUMsQ0FBREE7QUFDQUEsU0FBQyxDQUFEQSxDQUFDLENBQURBO0FBQ0Q7O0FBQ0RBLE9BQUMsQ0FBREEsQ0FBQyxDQUFEQTtBQUNEOzs7cUNBRWdCO0FBQ2YsVUFBSUMsTUFBTSxDQUFOQSxrQkFBSixZQUF5QztBQUN2QyxZQUFNQyxRQUFRLEdBQUdWLFFBQVEsQ0FBUkEsdUJBQWpCLFVBQWlCQSxDQUFqQjs7QUFDQSxhQUFLLElBQUlJLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFHTSxRQUFRLENBQTVCLFFBQXFDTixDQUFyQyxJQUEwQztBQUN4Q00sa0JBQVEsQ0FBUkEsQ0FBUSxDQUFSQTtBQUNEOztBQUNEVixnQkFBUSxDQUFSQTtBQUNBQSxnQkFBUSxDQUFSQTtBQUNEO0FBQ0Y7OzsrQkFFVTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLHdCQUFrQixHQUFsQkE7QUFDQVUsZ0JBQVUsR0FBR0MsSUFBSSxDQUFKQSxNQUFXQSxJQUFJLENBQUpBLFlBQWlCLFFBQWpCQSxLQUF4QkQsQ0FBYUMsQ0FBYkQ7QUFDQUwsWUFBTSxHQUFOQTtBQUNBTyxrQkFBWSxHQUFaQTtBQUNBQyxrQkFBWSxHQUFaQTtBQUNBO0FBQ0Q7Ozs7RUFuTnNDQyxNQUFNLENBQUNDLEs7OztBQXNOaEQsSUFBSUwsVUFBVSxHQUFHQyxJQUFJLENBQUpBLE1BQVdBLElBQUksQ0FBSkEsWUFBaUIsUUFBakJBLEtBQTVCLENBQWlCQSxDQUFqQjtBQUNBLElBQUlOLE1BQU0sR0FBVjtBQUNBLElBQUlMLGtCQUFrQixHQUF0QjtBQUNBLElBQUlZLFlBQVksR0FBaEI7QUFDQSxJQUFJQyxZQUFZLEdBQWhCLE0sQ0FFQTs7QUFDQUwsTUFBTSxDQUFOQSx1QkFBOEIsZ0NBQWdDO0FBQzVELE1BQUlULFFBQVEsQ0FBUkEsd0NBQUosSUFBeUQ7QUFDdkQsUUFBTWlCLENBQUMsR0FBR2pCLFFBQVEsQ0FBUkEsc0NBQVY7QUFDQUEsWUFBUSxDQUFSQTtBQUNBQSxZQUFRLENBQVJBOztBQUNBLFFBQUlBLFFBQVEsQ0FBUkEsdUNBQUosWUFBZ0U7QUFDOUQsV0FBSyxJQUFJSSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBakIsWUFBZ0NBLENBQWhDLElBQXFDO0FBQ25DRSxjQUFNLENBQU5BLENBQU0sQ0FBTkE7QUFDRDs7QUFDRCxVQUFNWSxVQUFVLEdBQUdsQixRQUFRLENBQVJBLGNBQW5CLEtBQW1CQSxDQUFuQjtBQUNBa0IsZ0JBQVUsQ0FBVkEsWUFBdUJsQixRQUFRLENBQVJBLGVBQXlCVyxVQUFELENBQS9DTyxRQUFnRFAsRUFBekJYLENBQXZCa0I7QUFDQSxVQUFNQyxjQUFjLEdBQUduQixRQUFRLENBQVJBLGVBQXZCLHFCQUF1QkEsQ0FBdkI7QUFDQWtCLGdCQUFVLENBQVZBO0FBQ0FDLG9CQUFjLENBQWRBLHlCQUF3Q25CLFFBQVEsQ0FBUkEsZUFBeENtQixTQUF3Q25CLENBQXhDbUI7QUFDQWxCLHdCQUFrQixHQUFsQkE7QUFURixXQVVPO0FBQ0xtQixhQUFPLENBQVBBLElBQVlkLE1BQU0sQ0FBbEJjLENBQWtCLENBQWxCQTs7QUFFQSxXQUFLLElBQUloQixFQUFDLEdBQVYsR0FBZ0JBLEVBQUMsR0FBakIsWUFBZ0NBLEVBQWhDLElBQXFDO0FBQ25DRSxjQUFNLENBQU5BLEVBQU0sQ0FBTkE7QUFDRDs7QUFDRE4sY0FBUSxDQUFSQTtBQUNBYyxrQkFBWSxHQUFaQTtBQUNEO0FBQ0Y7QUF4QkhMLEUsQ0EyQkE7OztBQUNBQSxNQUFNLENBQU5BLHlCQUFnQyxrQ0FBa0M7QUFDaEUsTUFBSVQsUUFBUSxDQUFSQSwwQ0FBSixJQUEyRDtBQUN6RCxRQUFNaUIsQ0FBQyxHQUFHakIsUUFBUSxDQUFSQSx3Q0FBVjtBQUNBQSxZQUFRLENBQVJBO0FBQ0FBLFlBQVEsQ0FBUkE7O0FBQ0EsUUFBSUEsUUFBUSxDQUFSQSx5Q0FBSixZQUFrRTtBQUNoRSxXQUFLLElBQUlJLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixZQUFnQ0EsQ0FBaEMsSUFBcUM7QUFDbkNFLGNBQU0sQ0FBTkEsQ0FBTSxDQUFOQTtBQUNEOztBQUNETixjQUFRLENBQVJBO0FBQ0FBLGNBQVEsQ0FBUkE7QUFMRixXQU1PO0FBQ0wsV0FBSyxJQUFJSSxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsR0FBakIsWUFBZ0NBLEdBQWhDLElBQXFDO0FBQ25DRSxjQUFNLENBQU5BLEdBQU0sQ0FBTkE7QUFDRDs7QUFDRE4sY0FBUSxDQUFSQTtBQUNBYyxrQkFBWSxHQUFaQTtBQUNEO0FBQ0Y7QUFsQkhMLEUsQ0FxQkE7OztBQUNBQSxNQUFNLENBQU5BLHlCQUFnQyxrQ0FBa0M7QUFDaEUsTUFBSVQsUUFBUSxDQUFSQSwwQ0FBSixJQUEyRDtBQUN6RCxRQUFJQSxRQUFRLENBQVJBLHlDQUFKLEdBQXlEO0FBQ3ZELFdBQUssSUFBSUksQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQWpCLFlBQWdDQSxDQUFoQyxJQUFxQztBQUNuQ0UsY0FBTSxDQUFOQSxDQUFNLENBQU5BO0FBQ0Q7O0FBQ0QsVUFBTVksVUFBVSxHQUFHbEIsUUFBUSxDQUFSQSxjQUFuQixLQUFtQkEsQ0FBbkI7QUFDQWtCLGdCQUFVLENBQVZBLFlBQXVCbEIsUUFBUSxDQUFSQSxlQUF3QixDQUFDVyxVQUFVLEdBQVgsSUFBL0NPLFFBQStDLEVBQXhCbEIsQ0FBdkJrQjtBQUNBLFVBQU1DLGNBQWMsR0FBR25CLFFBQVEsQ0FBUkEsZUFBdkIsc0JBQXVCQSxDQUF2QjtBQUNBa0IsZ0JBQVUsQ0FBVkE7QUFDQUMsb0JBQWMsQ0FBZEEseUJBQXdDbkIsUUFBUSxDQUFSQSxlQUF4Q21CLFNBQXdDbkIsQ0FBeENtQjtBQUNBTixrQkFBWSxHQUFaQTtBQVRGLFdBVU87QUFDTCxXQUFLLElBQUlULEdBQUMsR0FBVixHQUFnQkEsR0FBQyxHQUFqQixZQUFnQ0EsR0FBaEMsSUFBcUM7QUFDbkNFLGNBQU0sQ0FBTkEsR0FBTSxDQUFOQTtBQUNEOztBQUNETixjQUFRLENBQVJBO0FBQ0FjLGtCQUFZLEdBQVpBO0FBQ0Q7QUFDRjtBQW5CSEwiLCJmaWxlIjoiLi9zcmMvU2NlbmVzL0dhbWUxU2NlbmU1LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciAqL1xuLyogZXNsaW50LWRpc2FibGUgdmFycy1vbi10b3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgJ3BoYXNlcic7XG5pbXBvcnQgQmFsbCBmcm9tICcuLi9nYW1lT2JqZWN0L0JhbGwnO1xuaW1wb3J0IEZkSW5GZE91dCBmcm9tICcuLi9oZWxwZXIvRmRJbkZkT3V0JztcbmltcG9ydCBCbG9jayBmcm9tICcuLi9nYW1lT2JqZWN0L0Jsb2NrJztcblxuXG5jb25zdCBCTE9DSyA9IHtcbiAgWDogMjUwLFxuICBZOiAxMjAsXG59O1xuXG5jb25zdCBSQU5HRUJMT0NLID0gOTA7XG4vLyBleHBvcnQgdmFyIGlzV2FubmFSZXNldDQgPSBbZmFsc2VdO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZTFTY2VuZTUgZXh0ZW5kcyBQaGFzZXIuU2NlbmUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2NlbmU1Jyk7XG4gIH1cblxuICBwcmVsb2FkKCkge1xuICAgIHRoaXMubG9hZC5odG1sKCdxdWVzdGlvbjQnLCAnc3JjL0lucHV0Rm9ybS9zY2VuZTUuaHRtbCcpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYm9yZGVyJywgJ3NyYy9hc3NldHMvYm9yZGVyLnBuZycpO1xuICAgIHRoaXMubG9hZC5odG1sKCdyZXR1cm4nLCAnc3JjL2Fzc2V0cy90ZXh0L3JldHVybi5odG1sJyk7XG4gICAgdGhpcy5sb2FkLmltYWdlKCdidXR0b24nLCAnc3JjL2Fzc2V0cy9uZXh0LnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnZGF5Q2hhdScsICdzcmMvYXNzZXRzL2FyckJsb2NrLnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbEhvbGRlcicsICdzcmMvYXNzZXRzL3RoYW5oLnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbCcsICdzcmMvYXNzZXRzL2JhbGwucG5nJyk7XG4gIH1cblxuICBjcmVhdGUoKSB7XG4gICAgdGhpcy5SZWNyZWF0ZSgpO1xuICAgIHRoaXMuQ3JlYXRlQmFsbCgpO1xuICAgIHRoaXMuQ3JlYXRlQm9yZGVyKCk7XG4gICAgdGhpcy5DcmVhdGVUZXh0QW5kQmxvY2soKTtcbiAgICB0aGlzLkNyZWF0ZUxhbmd1YWdlKCk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5Nb3ZlX0Jsb2NrX2FuZF9EaXNwbGF5X05leHRRdWVzdGlvbigpO1xuICAgIHRoaXMuRGlzcGxheVF1ZXN0aW9uMSgpO1xuICAgIHRoaXMuRGlzcGxheVF1ZXN0aW9uMigpO1xuICAgIHRoaXMuUmVzZXRTY2VuZSgpO1xuICAgIHRoaXMuTW92ZUJhbGwoKTtcbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBNb3ZlX0Jsb2NrX2FuZF9EaXNwbGF5X05leHRRdWVzdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc01vdmluZ0Jsb2NrKSB7XG4gICAgICBjb25zdCBzdGFydFBvc1lCbG9jayA9IEJMT0NLLlkgKyBSQU5HRUJMT0NLICogKHRoaXMuY3VycmVudEJsb2NrIC0gMSk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IEJMT0NLLlkgKyBSQU5HRUJMT0NLICogdGhpcy5jdXJyZW50QmxvY2s7XG4gICAgICBpZiAodGhpcy5ibG9jay55ID09PSBzdGFydFBvc1lCbG9jaykge1xuICAgICAgICAobmV3IEJsb2NrKCkpLmNyZWF0ZUFycmF5QmxvY2sodGhpcywgQkxPQ0suWCwgc3RhcnRQb3NZQmxvY2spO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYmxvY2sueSA8IGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYmxvY2sueSArPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QmxvY2srKztcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlOZXh0VGV4dCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3ZpbmdCbG9jayA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRGlzcGxheU5leHRUZXh0KSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50QmxvY2sgPT09IDIpIHtcbiAgICAgICAgJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICQoJyNsYXlvdXRfcXVlc3Rpb24yJykuZGVsYXkoNTAwKS5mYWRlSW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudEJsb2NrID09PSAzKSB7XG4gICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgICAkKCcjbGF5b3V0X3F1ZXN0aW9uMycpLmRlbGF5KDUwMCkuZmFkZUluKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRCbG9jayA9PT0gNCkge1xuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgJCgnI2xheW91dF9xdWVzdGlvbjQnKS5kZWxheSg1MDApLmZhZGVJbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY3VycmVudEJsb2NrIDwgdG90YWxCbG9jaykge1xuICAgICAgICB0aGlzLnRpbWUuYWRkRXZlbnQoe1xuICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW92aW5nQmxvY2sgPSB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwZWF0OiAwLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5UXVlc3Rpb24xID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNEaXNwbGF5TmV4dFRleHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBEaXNwbGF5UXVlc3Rpb24xKCkge1xuICAgIGlmICh0aGlzLmlzRGlzcGxheVF1ZXN0aW9uMSkge1xuICAgICAgJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAkKCcjbGF5b3V0X2xhc3RxdWVzdGlvbicpLmRlbGF5KDEwMDApLmZhZGVJbigpO1xuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0JykuZm9jdXMoKTtcbiAgICAgIH0sIDExMDApO1xuICAgICAgdGhpcy5pc0Rpc3BsYXlRdWVzdGlvbjEgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBEaXNwbGF5UXVlc3Rpb24yKCkge1xuICAgIGlmIChpc0Rpc3BsYXlRdWVzdGlvbjIpIHtcbiAgICAgICQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgJCgnI2xheW91dF9sYXN0cXVlc3Rpb24yJykuZGVsYXkoMTAwMCkuZmFkZUluKCk7XG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLmZvY3VzKCk7XG4gICAgICB9LCAxMTAwKTtcbiAgICAgIGlzRGlzcGxheVF1ZXN0aW9uMiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIFJlc2V0U2NlbmUoKSB7XG4gICAgaWYgKGlzUmVzZXRTY2VuZSkge1xuICAgICAgaWYgKGlzV2FubmFSZXNldCkge1xuICAgICAgICB0aGlzLnRpbWUuYWRkRXZlbnQoe1xuICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN0YXJ0KCdTY2VuZTUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcGVhdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzX01vdmVfQmFsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgTW92ZUJhbGwoKSB7XG4gICAgaWYgKHRoaXMuaXNfTW92ZV9CYWxsKSB7XG4gICAgICBpZiAodGhpcy5iYWxsX0xhc3QueCA8IDY1MCkge1xuICAgICAgICB0aGlzLmJhbGxfTGFzdC54ICs9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRpbWUuYWRkRXZlbnQoe1xuICAgICAgICAgIGRlbGF5OiAyMDAwLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN0YXJ0KCdTY2VuZTUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcGVhdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIENyZWF0ZUJhbGwoKSB7XG4gICAgdGhpcy5hZGQuaW1hZ2UoNTQwLCAzMCwgJ2JhbGxIb2xkZXInKTtcbiAgICB0aGlzLmJhbGxfTGFzdCA9IChmdW5jdGlvbiAoc2NlbmUpIHtcbiAgICAgIGNvbnN0IGJhbGwgPSBuZXcgQmFsbCgpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDc3MCwgMjkpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDc0MCwgMjkpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDcxMCwgMjkpO1xuICAgICAgYmFsbC5jcmVhdGUoc2NlbmUsIDY4MCwgMjkpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxOyBpKyspIHtcbiAgICAgICAgdmFyIHRlbXAgPSBiYWxsLmNyZWF0ZShzY2VuZSwgMzEwICsgMzAgKiBpLCAyOSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVtcDtcbiAgICB9KHRoaXMpKTtcbiAgfVxuXG4gIENyZWF0ZUJvcmRlcigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQmxvY2s7IGkrKykge1xuICAgICAgYm9yZGVyLnB1c2godGhpcy5hZGQuaW1hZ2UoQkxPQ0suWCwgQkxPQ0suWSArIFJBTkdFQkxPQ0sgKiBpLCAnYm9yZGVyJykpO1xuICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMCk7XG4gICAgfVxuICB9XG5cbiAgQ3JlYXRlVGV4dEFuZEJsb2NrKCkge1xuICAgIHRoaXMuYmxvY2sgPSAobmV3IEJsb2NrKCkpLmNyZWF0ZUFycmF5QmxvY2sodGhpcywgQkxPQ0suWCwgQkxPQ0suWSk7XG4gICAgdGhpcy5xdWVzdGlvbl9TdWIgPSB0aGlzLmFkZC5kb20oNzUwLCAxMzApLmNyZWF0ZUZyb21DYWNoZSgncXVlc3Rpb240Jyk7XG4gICAgdGhpcy5ibG9jay5zZXRBbHBoYSgwKTtcbiAgICB0aGlzLmZhZGUgPSBuZXcgRmRJbkZkT3V0KHRoaXMpO1xuICAgIHRoaXMuZmFkZS5GZE91dCh0aGlzLmJsb2NrKTtcbiAgICAkKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAkKCcjbGF5b3V0X3F1ZXN0aW9uMScpLmhpZGUoKTtcbiAgICAgICQoJyNsYXlvdXRfcXVlc3Rpb24xJykuZGVsYXkoMTAwMCkuZmFkZUluKCk7XG4gICAgfSk7XG4gICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgIGRlbGF5OiAyMDAwLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc01vdmluZ0Jsb2NrID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICByZXBlYXQ6IDAsXG4gICAgfSk7XG4gICAgY29uc3QgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xheW91dF9xdWVzdGlvbicpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbS5sZW5ndGg7IGkrKykge1xuICAgICAgbVtpXS5zdHlsZS5wYWRkaW5nID0gJzM1cHggMCAwIDAnO1xuICAgICAgbVtpXS5zdHlsZS5tYXJnaW4gPSAnMCAwIDAgMTBweCc7XG4gICAgfVxuICAgIG1bMV0uc3R5bGUuYm90dG9tID0gJzdweCc7XG4gIH1cblxuICBDcmVhdGVMYW5ndWFnZSgpIHtcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICcjdmlldG5hbScpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncXVlc3Rpb24nKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVlc3Rpb25baV0uaW5uZXJIVE1MID0gJ0jDrG5oIGLDqm4gY8OzIDEwIGto4buRaSc7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFzdHF1ZXMnKS5pbm5lckhUTUwgPSAnVOG7lW5nIHPhu5EgdGhhbmggYsOqbiB0csOqbjonO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhc3RxdWVzMicpLmlubmVySFRNTCA9ICdU4buVbmcgc+G7kSBraOG7kWkgYsOqbiB0csOqbjonO1xuICAgIH1cbiAgfVxuXG4gIFJlY3JlYXRlKCkge1xuICAgIHRoaXMuYmFsbF9MYXN0ID0gbnVsbDtcbiAgICB0aGlzLmJsb2NrID0gbnVsbDtcbiAgICB0aGlzLmZhZGUgPSBudWxsO1xuICAgIHRoaXMuaXNNb3ZpbmdCbG9jayA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNwbGF5TmV4dFRleHQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRCbG9jayA9IDE7XG4gICAgdGhpcy5pc0Rpc3BsYXlRdWVzdGlvbjEgPSBmYWxzZTtcbiAgICBpc0Rpc3BsYXlRdWVzdGlvbjIgPSBmYWxzZTtcbiAgICB0b3RhbEJsb2NrID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDQgLSAyICsgMSkgKyAyKTtcbiAgICBib3JkZXIgPSBbXTtcbiAgICBpc1Jlc2V0U2NlbmUgPSBmYWxzZTtcbiAgICBpc1dhbm5hUmVzZXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzX01vdmVfQmFsbCA9IGZhbHNlO1xuICB9XG59XG5cbnZhciB0b3RhbEJsb2NrID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDQgLSAyICsgMSkgKyAyKTtcbnZhciBib3JkZXIgPSBbXTtcbnZhciBpc0Rpc3BsYXlRdWVzdGlvbjIgPSBmYWxzZTtcbnZhciBpc1Jlc2V0U2NlbmUgPSBmYWxzZTtcbnZhciBpc1dhbm5hUmVzZXQgPSBmYWxzZTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxud2luZG93LkNoZWNrX1F1ZXN0aW9uU2NlbmU1ID0gZnVuY3Rpb24gQ2hlY2tfUXVlc3Rpb25TY2VuZTUoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS52YWx1ZSAhPT0gJycpIHtcbiAgICBjb25zdCB5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0JykudmFsdWUgJSAxMDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS52YWx1ZSA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNCcpLnZhbHVlID0geTtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0JykudmFsdWUgPT0gdG90YWxCbG9jaykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0UmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZXh0UmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCh0b3RhbEJsb2NrKS50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCBsYXlvdXRRdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXRfbGFzdHF1ZXN0aW9uJyk7XG4gICAgICB0ZXh0UmVzdWx0LnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6NjBweDsgbWFyZ2luLWxlZnQ6IDIwcHgnO1xuICAgICAgbGF5b3V0UXVlc3Rpb24ucmVwbGFjZUNoaWxkKHRleHRSZXN1bHQsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbnN3ZXIxJykpO1xuICAgICAgaXNEaXNwbGF5UXVlc3Rpb24yID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYm9yZGVyWzBdKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMSk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTQnKS5zdHlsZS5jb2xvciA9ICdyZWQnO1xuICAgICAgaXNXYW5uYVJlc2V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbndpbmRvdy5DaGVja19RdWVzdGlvblNjZW5lNXYxID0gZnVuY3Rpb24gQ2hlY2tfUXVlc3Rpb25TY2VuZTV2MSgpIHtcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgIT09ICcnKSB7XG4gICAgY29uc3QgeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgJSAxMDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnZhbHVlID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djEnKS52YWx1ZSA9IHk7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYxJykudmFsdWUgPT0gdG90YWxCbG9jaykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMCk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnN0eWxlLmNvbG9yID0gJ2JsYWNrJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYyJykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbEJsb2NrOyBpKyspIHtcbiAgICAgICAgYm9yZGVyW2ldLnNldFZpc2libGUoMSk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXRTY2VuZTR2MScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG4gICAgICBpc1dhbm5hUmVzZXQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxud2luZG93LkNoZWNrX1F1ZXN0aW9uU2NlbmU1djIgPSBmdW5jdGlvbiBDaGVja19RdWVzdGlvblNjZW5lNXYyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djInKS52YWx1ZSAhPT0gJycpIHtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0U2NlbmU0djInKS52YWx1ZSA9PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQmxvY2s7IGkrKykge1xuICAgICAgICBib3JkZXJbaV0uc2V0VmlzaWJsZSgwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRleHRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoKHRvdGFsQmxvY2sgKiAxMCkudG9TdHJpbmcoKSkpO1xuICAgICAgY29uc3QgbGF5b3V0UXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0X2xhc3RxdWVzdGlvbjInKTtcbiAgICAgIHRleHRSZXN1bHQuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTo2MHB4OyBtYXJnaW4tbGVmdDogMjBweCc7XG4gICAgICBsYXlvdXRRdWVzdGlvbi5yZXBsYWNlQ2hpbGQodGV4dFJlc3VsdCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fuc3dlcjInKSk7XG4gICAgICBpc1Jlc2V0U2NlbmUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQmxvY2s7IGkrKykge1xuICAgICAgICBib3JkZXJbaV0uc2V0VmlzaWJsZSgxKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dFNjZW5lNHYyJykuc3R5bGUuY29sb3IgPSAncmVkJztcbiAgICAgIGlzV2FubmFSZXNldCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Scenes/Game1Scene5.js\n");
 
/***/ }),
 
/***/ "./src/Scenes/GameScene.js":
/*!*********************************!*\
  !*** ./src/Scenes/GameScene.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _DragManager = _interopRequireWildcard(__webpack_require__(/*! ../helper/DragManager */ \"./src/helper/DragManager.js\"));\n\nvar _BubbleBox = _interopRequireDefault(__webpack_require__(/*! ../helper/BubbleBox */ \"./src/helper/BubbleBox.js\"));\n\nvar _Audio = _interopRequireDefault(__webpack_require__(/*! ../helper/Audio */ \"./src/helper/Audio.js\"));\n\nvar _Ball = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Ball */ \"./src/gameObject/Ball.js\"));\n\nvar _Block = _interopRequireDefault(__webpack_require__(/*! ../gameObject/Block */ \"./src/gameObject/Block.js\"));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _getRequireWildcardCache() {\n  if (typeof WeakMap !== \"function\") return null;\n  var cache = new WeakMap();\n\n  _getRequireWildcardCache = function _getRequireWildcardCache() {\n    return cache;\n  };\n\n  return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  }\n\n  if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n    return {\n      default: obj\n    };\n  }\n\n  var cache = _getRequireWildcardCache();\n\n  if (cache && cache.has(obj)) {\n    return cache.get(obj);\n  }\n\n  var newObj = {};\n  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n      if (desc && (desc.get || desc.set)) {\n        Object.defineProperty(newObj, key, desc);\n      } else {\n        newObj[key] = obj[key];\n      }\n    }\n  }\n\n  newObj.default = obj;\n\n  if (cache) {\n    cache.set(obj, newObj);\n  }\n\n  return newObj;\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nvar ball;\nvar lastBall;\nvar distance = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\nvar initBlockPosX = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\nvar initBlockPosY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\nvar blockArr = [];\nvar holderArr = [];\nvar numberOfBox = 10;\n\nvar GameScene =\n/*#__PURE__*/\nfunction (_Phaser$Scene) {\n  _inherits(GameScene, _Phaser$Scene);\n\n  function GameScene() {\n    _classCallCheck(this, GameScene); // đặt tên cho scene\n\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(GameScene).call(this, 'Game'));\n  } // load những thứ sẽ dùng trong game như ảnh, âm thanh...\n\n\n  _createClass(GameScene, [{\n    key: \"preload\",\n    value: function preload() {\n      // load ảnh từ máy tính (nhớ là phải đúng tên đường dẫn đấy)\n      this.load.image('ball', 'src/assets/ball.png');\n      this.load.image('Block', 'src/assets/Block.png');\n      this.load.image('Chau', 'src/assets/nen.png');\n      this.load.image('loa', 'src/assets/loa.png');\n      this.load.audio('thanh', 'src/assets/flower.mp3');\n      this.load.image('ballHolder', 'src/assets/thanh.png');\n    }\n  }, {\n    key: \"create\",\n    value: function create() {\n      this.add.image(540, 30, 'ballHolder');\n      ball = new _Ball.default();\n\n      for (var i = 0; i < 5; i++) {\n        lastBall = ball.create(this, 310 + 30 * i, 29);\n      }\n\n      var bb = this.add.graphics({\n        x: 500,\n        y: 250\n      });\n      var bubbleBox = new _BubbleBox.default(this, 250, 50, '      “Move the flowers”', bb, 20);\n      bubbleBox.createBox(); // add ảnh\n\n      var loa = this.add.sprite(510, 255, 'loa').setOrigin(0, 0); // add âm thanh\n\n      var amthanh = this.sound.add('thanh'); // push phần tử vào mảng, cái này tí dùng vòng lặp cho code gọn\n\n      for (var _i = 0; _i < 10; _i++) {\n        holderArr.push(this.add.image(100 + _i * 70, 200, 'Chau'));\n      }\n\n      blockArr.push(new _Block.default().createABlock(this, 900, 600));\n      blockArr.push(new _Block.default().createABlock(this, 200, 500));\n      blockArr.push(new _Block.default().createABlock(this, 300, 400));\n      blockArr.push(new _Block.default().createABlock(this, 500, 500));\n      blockArr.push(new _Block.default().createABlock(this, 300, 500));\n      blockArr.push(new _Block.default().createABlock(this, 600, 400));\n      blockArr.push(new _Block.default().createABlock(this, 800, 500));\n      blockArr.push(new _Block.default().createABlock(this, 200, 600));\n      blockArr.push(new _Block.default().createABlock(this, 500, 600));\n      blockArr.push(new _Block.default().createABlock(this, 400, 600));\n\n      for (var _i2 = 0; _i2 < blockArr.length; _i2++) {\n        blockArr[_i2].body.debugShowBody = false;\n      }\n\n      for (var _i3 = 0; _i3 < numberOfBox; _i3++) {\n        initBlockPosX[_i3] = blockArr[_i3].x;\n        initBlockPosY[_i3] = blockArr[_i3].y;\n      } // setScale\n\n\n      loa.setScale(0.055, 0.055); // tạo chức năng drag and drop\n      // eslint-disable-next-line max-len\n\n      var dragManager = new _DragManager.default(this, blockArr, holderArr, initBlockPosX, initBlockPosY, numberOfBox);\n      dragManager.dragHoa(); // tạo chức năng phát âm thanh\n\n      var aud = new _Audio.default(this, loa, amthanh);\n      aud.playAudio(); // cái này là để test keyboard input thôi đừng để ý\n\n      this.cursorKeys = this.input.keyboard.createCursorKeys();\n      var line = this.add.graphics();\n      line.lineBetween(0, 50, 1280, 50);\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.ReturnInitPos();\n      this.ChangeScene();\n    }\n  }, {\n    key: \"ChangeScene\",\n    value: function ChangeScene() {\n      var _this = this;\n\n      if (this.checkEnd()) {\n        if (lastBall.x < 770) {\n          lastBall.x += 3;\n        } else {\n          this.time.addEvent({\n            delay: 1500,\n            callback: function callback() {\n              _this.scene.start('Scene2');\n            },\n            loop: true\n          });\n        }\n      }\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"ReturnInitPos\",\n    value: function ReturnInitPos() {\n      for (var i = 0; i < numberOfBox; i++) {\n        // eslint-disable-next-line max-len\n        distance[i] = Phaser.Math.Distance.Between(blockArr[i].x, blockArr[i].y, initBlockPosX[i], initBlockPosY[i]);\n\n        if (distance[i] < 4) {\n          blockArr[i].body.reset(initBlockPosX[i], initBlockPosY[i]);\n        }\n      }\n    } // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"checkEnd\",\n    value: function checkEnd() {\n      for (var i = 0; i < numberOfBox; i++) {\n        if (_DragManager.spaceValid[i] === true) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n  }]);\n\n  return GameScene;\n}(Phaser.Scene);\n\nexports.default = GameScene;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmVzL0dhbWVTY2VuZS5qcz81MDllIl0sIm5hbWVzIjpbImRpc3RhbmNlIiwiaW5pdEJsb2NrUG9zWCIsImluaXRCbG9ja1Bvc1kiLCJibG9ja0FyciIsImhvbGRlckFyciIsIm51bWJlck9mQm94IiwiR2FtZVNjZW5lIiwiYmFsbCIsIkJhbGwiLCJpIiwibGFzdEJhbGwiLCJiYiIsIngiLCJ5IiwiYnViYmxlQm94IiwiQnViYmxlQm94IiwibG9hIiwiYW10aGFuaCIsIkJsb2NrIiwiZHJhZ01hbmFnZXIiLCJEcmFnTWFuYWdlciIsImF1ZCIsIkF1ZGlvIiwibGluZSIsImRlbGF5IiwiY2FsbGJhY2siLCJsb29wIiwiUGhhc2VyIiwic3BhY2VWYWxpZCIsIlNjZW5lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFPQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0EsSUFBTUEsUUFBUSxHQUFHLDRCQUFqQixDQUFpQixDQUFqQjtBQUNBLElBQU1DLGFBQWEsR0FBRyw0QkFBdEIsQ0FBc0IsQ0FBdEI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsNEJBQXRCLENBQXNCLENBQXRCO0FBQ0EsSUFBTUMsUUFBUSxHQUFkO0FBQ0EsSUFBTUMsU0FBUyxHQUFmO0FBQ0EsSUFBTUMsV0FBVyxHQUFqQjs7SUFFcUJDLFM7Ozs7O0FBQ25CLHVCQUFjO0FBQUEsc0NBQ1o7OztBQURZO0lBS2Q7Ozs7OzhCQUNVO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRDs7OzZCQUVRO0FBQ1A7QUFDQUMsVUFBSSxHQUFHLElBQUlDLE1BQVhELE9BQU8sRUFBUEE7O0FBQ0EsV0FBSyxJQUFJRSxDQUFDLEdBQVYsR0FBZ0JBLENBQUMsR0FBakIsR0FBdUJBLENBQXZCLElBQTRCO0FBQzFCQyxnQkFBUSxHQUFHSCxJQUFJLENBQUpBLGFBQWtCLE1BQU0sS0FBeEJBLEdBQVhHLEVBQVdILENBQVhHO0FBQ0Q7O0FBRUQsVUFBTUMsRUFBRSxHQUFHLGtCQUFrQjtBQUFFQyxTQUFDLEVBQUg7QUFBVUMsU0FBQyxFQUFFO0FBQWIsT0FBbEIsQ0FBWDtBQUNBLFVBQU1DLFNBQVMsR0FBRyxJQUFJQyxXQUFKLHVEQUFsQixFQUFrQixDQUFsQjtBQUNBRCxlQUFTLENBVEYsU0FTUEEsR0FUTyxDQVdQOztBQUNBLFVBQU1FLEdBQUcsR0FBRyw4Q0FaTCxDQVlLLENBQVosQ0FaTyxDQWFQOztBQUNBLFVBQU1DLE9BQU8sR0FBRyxlQWRULE9BY1MsQ0FBaEIsQ0FkTyxDQWdCUDs7QUFDQSxXQUFLLElBQUlSLEVBQUMsR0FBVixHQUFnQkEsRUFBQyxHQUFqQixJQUF3QkEsRUFBeEIsSUFBNkI7QUFDM0JMLGlCQUFTLENBQVRBLEtBQWUsZUFBZSxNQUFNSyxFQUFDLEdBQXRCLFNBQWZMLE1BQWUsQ0FBZkE7QUFDRDs7QUFFREQsY0FBUSxDQUFSQSxLQUFlLElBQUllLE9BQUwsT0FBQyxHQUFELFlBQUMsQ0FBRCxJQUFDLEVBQUQsR0FBQyxFQUFmZixHQUFlLENBQWZBO0FBQ0FBLGNBQVEsQ0FBUkEsS0FBZSxJQUFJZSxPQUFMLE9BQUMsR0FBRCxZQUFDLENBQUQsSUFBQyxFQUFELEdBQUMsRUFBZmYsR0FBZSxDQUFmQTtBQUNBQSxjQUFRLENBQVJBLEtBQWUsSUFBSWUsT0FBTCxPQUFDLEdBQUQsWUFBQyxDQUFELElBQUMsRUFBRCxHQUFDLEVBQWZmLEdBQWUsQ0FBZkE7QUFDQUEsY0FBUSxDQUFSQSxLQUFlLElBQUllLE9BQUwsT0FBQyxHQUFELFlBQUMsQ0FBRCxJQUFDLEVBQUQsR0FBQyxFQUFmZixHQUFlLENBQWZBO0FBQ0FBLGNBQVEsQ0FBUkEsS0FBZSxJQUFJZSxPQUFMLE9BQUMsR0FBRCxZQUFDLENBQUQsSUFBQyxFQUFELEdBQUMsRUFBZmYsR0FBZSxDQUFmQTtBQUNBQSxjQUFRLENBQVJBLEtBQWUsSUFBSWUsT0FBTCxPQUFDLEdBQUQsWUFBQyxDQUFELElBQUMsRUFBRCxHQUFDLEVBQWZmLEdBQWUsQ0FBZkE7QUFDQUEsY0FBUSxDQUFSQSxLQUFlLElBQUllLE9BQUwsT0FBQyxHQUFELFlBQUMsQ0FBRCxJQUFDLEVBQUQsR0FBQyxFQUFmZixHQUFlLENBQWZBO0FBQ0FBLGNBQVEsQ0FBUkEsS0FBZSxJQUFJZSxPQUFMLE9BQUMsR0FBRCxZQUFDLENBQUQsSUFBQyxFQUFELEdBQUMsRUFBZmYsR0FBZSxDQUFmQTtBQUNBQSxjQUFRLENBQVJBLEtBQWUsSUFBSWUsT0FBTCxPQUFDLEdBQUQsWUFBQyxDQUFELElBQUMsRUFBRCxHQUFDLEVBQWZmLEdBQWUsQ0FBZkE7QUFDQUEsY0FBUSxDQUFSQSxLQUFlLElBQUllLE9BQUwsT0FBQyxHQUFELFlBQUMsQ0FBRCxJQUFDLEVBQUQsR0FBQyxFQUFmZixHQUFlLENBQWZBOztBQUNBLFdBQUssSUFBSU0sR0FBQyxHQUFWLEdBQWdCQSxHQUFDLEdBQUdOLFFBQVEsQ0FBNUIsUUFBcUNNLEdBQXJDLElBQTBDO0FBQ3hDTixnQkFBUSxDQUFSQSxHQUFRLENBQVJBO0FBQ0Q7O0FBRUQsV0FBSyxJQUFJTSxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsR0FBakIsYUFBaUNBLEdBQWpDLElBQXNDO0FBQ3BDUixxQkFBYSxDQUFiQSxHQUFhLENBQWJBLEdBQW1CRSxRQUFRLENBQVJBLEdBQVEsQ0FBUkEsQ0FBbkJGO0FBQ0FDLHFCQUFhLENBQWJBLEdBQWEsQ0FBYkEsR0FBbUJDLFFBQVEsQ0FBUkEsR0FBUSxDQUFSQSxDQUFuQkQ7QUFyQ0ssUUF3Q1A7OztBQUNBYyxTQUFHLENBQUhBLGdCQXpDTyxLQXlDUEEsRUF6Q08sQ0EyQ1A7QUFDQTs7QUFDQSxVQUFNRyxXQUFXLEdBQUcsSUFBSUMsYUFBSixpRUFBcEIsV0FBb0IsQ0FBcEI7QUFDQUQsaUJBQVcsQ0E5Q0osT0E4Q1BBLEdBOUNPLENBZ0RQOztBQUNBLFVBQU1FLEdBQUcsR0FBRyxJQUFJQyxPQUFKLG1CQUFaLE9BQVksQ0FBWjtBQUNBRCxTQUFHLENBbERJLFNBa0RQQSxHQWxETyxDQW9EUDs7QUFDQSx3QkFBa0Isb0JBQWxCLGdCQUFrQixFQUFsQjtBQUVBLFVBQU1FLElBQUksR0FBRyxTQUFiLFFBQWEsRUFBYjtBQUNBQSxVQUFJLENBQUpBO0FBQ0Q7Ozs2QkFFUTtBQUNQO0FBQ0E7QUFDRDs7O2tDQUVhO0FBQUE7O0FBQ1osVUFBSSxLQUFKLFFBQUksRUFBSixFQUFxQjtBQUNuQixZQUFJYixRQUFRLENBQVJBLElBQUosS0FBc0I7QUFDcEJBLGtCQUFRLENBQVJBO0FBREYsZUFFTztBQUNMLDZCQUFtQjtBQUNqQmMsaUJBQUssRUFEWTtBQUVqQkMsb0JBQVEsRUFBRSxvQkFBTTtBQUNkLG1CQUFJLENBQUo7QUFIZTtBQUtqQkMsZ0JBQUksRUFBRTtBQUxXLFdBQW5CO0FBT0Q7QUFDRjtNQUdIOzs7O29DQUNnQjtBQUNkLFdBQUssSUFBSWpCLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixhQUFpQ0EsQ0FBakMsSUFBc0M7QUFDcEM7QUFDQVQsZ0JBQVEsQ0FBUkEsQ0FBUSxDQUFSQSxHQUFjMkIsTUFBTSxDQUFOQSxzQkFBNkJ4QixRQUFRLENBQVJBLENBQVEsQ0FBUkEsQ0FBN0J3QixHQUE0Q3hCLFFBQVEsQ0FBUkEsQ0FBUSxDQUFSQSxDQUE1Q3dCLEdBQTJEMUIsYUFBYSxDQUF4RTBCLENBQXdFLENBQXhFQSxFQUE2RXpCLGFBQWEsQ0FBeEdGLENBQXdHLENBQTFGMkIsQ0FBZDNCOztBQUNBLFlBQUlBLFFBQVEsQ0FBUkEsQ0FBUSxDQUFSQSxHQUFKLEdBQXFCO0FBQ25CRyxrQkFBUSxDQUFSQSxDQUFRLENBQVJBLFlBQXVCRixhQUFhLENBQXBDRSxDQUFvQyxDQUFwQ0EsRUFBeUNELGFBQWEsQ0FBdERDLENBQXNELENBQXREQTtBQUNEO0FBQ0Y7TUFHSDs7OzsrQkFDVztBQUNULFdBQUssSUFBSU0sQ0FBQyxHQUFWLEdBQWdCQSxDQUFDLEdBQWpCLGFBQWlDQSxDQUFqQyxJQUFzQztBQUNwQyxZQUFJbUIsK0JBQUosTUFBNEI7QUFDMUI7QUFDRDtBQUNGOztBQUNEO0FBQ0Q7Ozs7RUFwSG9DRCxNQUFNLENBQUNFLEsiLCJmaWxlIjoiLi9zcmMvU2NlbmVzL0dhbWVTY2VuZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1uYW1lZC1hcy1kZWZhdWx0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1kdXBsaWNhdGVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cblxuLy8gaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9Db25maWcvY29uZmlnJztcbmltcG9ydCBEcmFnTWFuYWdlciBmcm9tICcuLi9oZWxwZXIvRHJhZ01hbmFnZXInO1xuaW1wb3J0IHsgc3BhY2VWYWxpZCB9IGZyb20gJy4uL2hlbHBlci9EcmFnTWFuYWdlcic7XG5pbXBvcnQgQnViYmxlQm94IGZyb20gJy4uL2hlbHBlci9CdWJibGVCb3gnO1xuaW1wb3J0IEF1ZGlvIGZyb20gJy4uL2hlbHBlci9BdWRpbyc7XG5pbXBvcnQgQmFsbCBmcm9tICcuLi9nYW1lT2JqZWN0L0JhbGwnO1xuaW1wb3J0IEJsb2NrIGZyb20gJy4uL2dhbWVPYmplY3QvQmxvY2snO1xuXG5sZXQgYmFsbDtcbmxldCBsYXN0QmFsbDtcbmNvbnN0IGRpc3RhbmNlID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuY29uc3QgaW5pdEJsb2NrUG9zWCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbmNvbnN0IGluaXRCbG9ja1Bvc1kgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5jb25zdCBibG9ja0FyciA9IFtdO1xuY29uc3QgaG9sZGVyQXJyID0gW107XG5jb25zdCBudW1iZXJPZkJveCA9IDEwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lU2NlbmUgZXh0ZW5kcyBQaGFzZXIuU2NlbmUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyDEkeG6t3QgdMOqbiBjaG8gc2NlbmVcbiAgICBzdXBlcignR2FtZScpO1xuICB9XG5cbiAgLy8gbG9hZCBuaOG7r25nIHRo4bupIHPhur0gZMO5bmcgdHJvbmcgZ2FtZSBuaMawIOG6o25oLCDDom0gdGhhbmguLi5cbiAgcHJlbG9hZCgpIHtcbiAgICAvLyBsb2FkIOG6o25oIHThu6sgbcOheSB0w61uaCAobmjhu5sgbMOgIHBo4bqjaSDEkcO6bmcgdMOqbiDEkcaw4budbmcgZOG6q24gxJHhuqV5KVxuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbCcsICdzcmMvYXNzZXRzL2JhbGwucG5nJyk7XG4gICAgdGhpcy5sb2FkLmltYWdlKCdCbG9jaycsICdzcmMvYXNzZXRzL0Jsb2NrLnBuZycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnQ2hhdScsICdzcmMvYXNzZXRzL25lbi5wbmcnKTtcbiAgICB0aGlzLmxvYWQuaW1hZ2UoJ2xvYScsICdzcmMvYXNzZXRzL2xvYS5wbmcnKTtcbiAgICB0aGlzLmxvYWQuYXVkaW8oJ3RoYW5oJywgJ3NyYy9hc3NldHMvZmxvd2VyLm1wMycpO1xuICAgIHRoaXMubG9hZC5pbWFnZSgnYmFsbEhvbGRlcicsICdzcmMvYXNzZXRzL3RoYW5oLnBuZycpO1xuICB9XG5cbiAgY3JlYXRlKCkge1xuICAgIHRoaXMuYWRkLmltYWdlKDU0MCwgMzAsICdiYWxsSG9sZGVyJyk7XG4gICAgYmFsbCA9IG5ldyBCYWxsKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGxhc3RCYWxsID0gYmFsbC5jcmVhdGUodGhpcywgMzEwICsgMzAgKiBpLCAyOSk7XG4gICAgfVxuXG4gICAgY29uc3QgYmIgPSB0aGlzLmFkZC5ncmFwaGljcyh7IHg6IDUwMCwgeTogMjUwIH0pO1xuICAgIGNvbnN0IGJ1YmJsZUJveCA9IG5ldyBCdWJibGVCb3godGhpcywgMjUwLCA1MCwgJyAgICAgIOKAnE1vdmUgdGhlIGZsb3dlcnPigJ0nLCBiYiwgMjApO1xuICAgIGJ1YmJsZUJveC5jcmVhdGVCb3goKTtcblxuICAgIC8vIGFkZCDhuqNuaFxuICAgIGNvbnN0IGxvYSA9IHRoaXMuYWRkLnNwcml0ZSg1MTAsIDI1NSwgJ2xvYScpLnNldE9yaWdpbigwLCAwKTtcbiAgICAvLyBhZGQgw6JtIHRoYW5oXG4gICAgY29uc3QgYW10aGFuaCA9IHRoaXMuc291bmQuYWRkKCd0aGFuaCcpO1xuXG4gICAgLy8gcHVzaCBwaOG6p24gdOG7rSB2w6BvIG3huqNuZywgY8OhaSBuw6B5IHTDrSBkw7luZyB2w7JuZyBs4bq3cCBjaG8gY29kZSBn4buNblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaG9sZGVyQXJyLnB1c2godGhpcy5hZGQuaW1hZ2UoMTAwICsgaSAqIDcwLCAyMDAsICdDaGF1JykpO1xuICAgIH1cblxuICAgIGJsb2NrQXJyLnB1c2goKG5ldyBCbG9jaygpKS5jcmVhdGVBQmxvY2sodGhpcywgOTAwLCA2MDApKTtcbiAgICBibG9ja0Fyci5wdXNoKChuZXcgQmxvY2soKSkuY3JlYXRlQUJsb2NrKHRoaXMsIDIwMCwgNTAwKSk7XG4gICAgYmxvY2tBcnIucHVzaCgobmV3IEJsb2NrKCkpLmNyZWF0ZUFCbG9jayh0aGlzLCAzMDAsIDQwMCkpO1xuICAgIGJsb2NrQXJyLnB1c2goKG5ldyBCbG9jaygpKS5jcmVhdGVBQmxvY2sodGhpcywgNTAwLCA1MDApKTtcbiAgICBibG9ja0Fyci5wdXNoKChuZXcgQmxvY2soKSkuY3JlYXRlQUJsb2NrKHRoaXMsIDMwMCwgNTAwKSk7XG4gICAgYmxvY2tBcnIucHVzaCgobmV3IEJsb2NrKCkpLmNyZWF0ZUFCbG9jayh0aGlzLCA2MDAsIDQwMCkpO1xuICAgIGJsb2NrQXJyLnB1c2goKG5ldyBCbG9jaygpKS5jcmVhdGVBQmxvY2sodGhpcywgODAwLCA1MDApKTtcbiAgICBibG9ja0Fyci5wdXNoKChuZXcgQmxvY2soKSkuY3JlYXRlQUJsb2NrKHRoaXMsIDIwMCwgNjAwKSk7XG4gICAgYmxvY2tBcnIucHVzaCgobmV3IEJsb2NrKCkpLmNyZWF0ZUFCbG9jayh0aGlzLCA1MDAsIDYwMCkpO1xuICAgIGJsb2NrQXJyLnB1c2goKG5ldyBCbG9jaygpKS5jcmVhdGVBQmxvY2sodGhpcywgNDAwLCA2MDApKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBibG9ja0FycltpXS5ib2R5LmRlYnVnU2hvd0JvZHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQm94OyBpKyspIHtcbiAgICAgIGluaXRCbG9ja1Bvc1hbaV0gPSBibG9ja0FycltpXS54O1xuICAgICAgaW5pdEJsb2NrUG9zWVtpXSA9IGJsb2NrQXJyW2ldLnk7XG4gICAgfVxuXG4gICAgLy8gc2V0U2NhbGVcbiAgICBsb2Euc2V0U2NhbGUoMC4wNTUsIDAuMDU1KTtcblxuICAgIC8vIHThuqFvIGNo4bupYyBuxINuZyBkcmFnIGFuZCBkcm9wXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBjb25zdCBkcmFnTWFuYWdlciA9IG5ldyBEcmFnTWFuYWdlcih0aGlzLCBibG9ja0FyciwgaG9sZGVyQXJyLCBpbml0QmxvY2tQb3NYLCBpbml0QmxvY2tQb3NZLCBudW1iZXJPZkJveCk7XG4gICAgZHJhZ01hbmFnZXIuZHJhZ0hvYSgpO1xuXG4gICAgLy8gdOG6oW8gY2jhu6ljIG7Eg25nIHBow6F0IMOibSB0aGFuaFxuICAgIGNvbnN0IGF1ZCA9IG5ldyBBdWRpbyh0aGlzLCBsb2EsIGFtdGhhbmgpO1xuICAgIGF1ZC5wbGF5QXVkaW8oKTtcblxuICAgIC8vIGPDoWkgbsOgeSBsw6AgxJHhu4MgdGVzdCBrZXlib2FyZCBpbnB1dCB0aMO0aSDEkeG7q25nIMSR4buDIMO9XG4gICAgdGhpcy5jdXJzb3JLZXlzID0gdGhpcy5pbnB1dC5rZXlib2FyZC5jcmVhdGVDdXJzb3JLZXlzKCk7XG5cbiAgICBjb25zdCBsaW5lID0gdGhpcy5hZGQuZ3JhcGhpY3MoKTtcbiAgICBsaW5lLmxpbmVCZXR3ZWVuKDAsIDUwLCAxMjgwLCA1MCk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5SZXR1cm5Jbml0UG9zKCk7XG4gICAgdGhpcy5DaGFuZ2VTY2VuZSgpO1xuICB9XG5cbiAgQ2hhbmdlU2NlbmUoKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tFbmQoKSkge1xuICAgICAgaWYgKGxhc3RCYWxsLnggPCA3NzApIHtcbiAgICAgICAgbGFzdEJhbGwueCArPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lLmFkZEV2ZW50KHtcbiAgICAgICAgICBkZWxheTogMTUwMCxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5zdGFydCgnU2NlbmUyJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBSZXR1cm5Jbml0UG9zKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCb3g7IGkrKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIGRpc3RhbmNlW2ldID0gUGhhc2VyLk1hdGguRGlzdGFuY2UuQmV0d2VlbihibG9ja0FycltpXS54LCBibG9ja0FycltpXS55LCBpbml0QmxvY2tQb3NYW2ldLCBpbml0QmxvY2tQb3NZW2ldKTtcbiAgICAgIGlmIChkaXN0YW5jZVtpXSA8IDQpIHtcbiAgICAgICAgYmxvY2tBcnJbaV0uYm9keS5yZXNldChpbml0QmxvY2tQb3NYW2ldLCBpbml0QmxvY2tQb3NZW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBjaGVja0VuZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQm94OyBpKyspIHtcbiAgICAgIGlmIChzcGFjZVZhbGlkW2ldID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Scenes/GameScene.js\n");
 
/***/ }),
 
/***/ "./src/gameObject/Ball.js":
/*!********************************!*\
  !*** ./src/gameObject/Ball.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar Ball = function Ball() {\n  _classCallCheck(this, Ball);\n\n  this.create = function (Scenee, PosX, PosY) {\n    //Scenee.load.image('ball', 'src/assets/ball.png');\n    var ball = Scenee.add.image(PosX, PosY, 'ball');\n    ball.setScale(1.2);\n    return ball;\n  };\n};\n\nexports.default = Ball;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ2FtZU9iamVjdC9CYWxsLmpzP2I0NzAiXSwibmFtZXMiOlsiQmFsbCIsImJhbGwiLCJTY2VuZWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7SUFFcUJBLEksR0FFakIsZ0JBQWU7QUFBQTs7QUFDWCxnQkFBYyw4QkFBNEI7QUFDdEM7QUFDQSxRQUFJQyxJQUFJLEdBQUdDLE1BQU0sQ0FBTkEsc0JBQVgsTUFBV0EsQ0FBWDtBQUNBRCxRQUFJLENBQUpBO0FBQ0E7QUFKSiIsImZpbGUiOiIuL3NyYy9nYW1lT2JqZWN0L0JhbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3BoYXNlcidcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbGxcclxue1xyXG4gICAgY29uc3RydWN0b3IgKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24oU2NlbmVlLCBQb3NYLCBQb3NZKXtcclxuICAgICAgICAgICAgLy9TY2VuZWUubG9hZC5pbWFnZSgnYmFsbCcsICdzcmMvYXNzZXRzL2JhbGwucG5nJyk7XHJcbiAgICAgICAgICAgIHZhciBiYWxsID0gU2NlbmVlLmFkZC5pbWFnZShQb3NYLCBQb3NZLCAnYmFsbCcpO1xyXG4gICAgICAgICAgICBiYWxsLnNldFNjYWxlKDEuMik7XHJcbiAgICAgICAgICAgIHJldHVybiBiYWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgXHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/gameObject/Ball.js\n");
 
/***/ }),
 
/***/ "./src/gameObject/Block.js":
/*!*********************************!*\
  !*** ./src/gameObject/Block.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar Block = function Block() {\n  _classCallCheck(this, Block);\n\n  this.createABlock = function (Scenee, PosX, PosY) {\n    //Scenee.load.image('Block', 'src/assets/Block.png');\n    var block = Scenee.physics.add.image(PosX, PosY, 'Block');\n    return block;\n  };\n\n  this.createArrayBlock = function (Scenee, PosX, PosY) {\n    //Scenee.load.image('dayChau', 'src/assets/arrBlock.png');\n    var block = Scenee.add.image(PosX, PosY, 'dayChau');\n    return block;\n  };\n};\n\nexports.default = Block;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ2FtZU9iamVjdC9CbG9jay5qcz80ZTE5Il0sIm5hbWVzIjpbIkJsb2NrIiwiYmxvY2siLCJTY2VuZWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7SUFFcUJBLEssR0FFakIsaUJBQWU7QUFBQTs7QUFDWCxzQkFBb0IsOEJBQTRCO0FBQzVDO0FBQ0EsUUFBSUMsS0FBSyxHQUFHQyxNQUFNLENBQU5BLDhCQUFaLE9BQVlBLENBQVo7QUFDQTtBQUhKOztBQU1BLDBCQUF3Qiw4QkFBNEI7QUFDaEQ7QUFDQSxRQUFJRCxLQUFLLEdBQUdDLE1BQU0sQ0FBTkEsc0JBQVosU0FBWUEsQ0FBWjtBQUNBO0FBSEoiLCJmaWxlIjoiLi9zcmMvZ2FtZU9iamVjdC9CbG9jay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAncGhhc2VyJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmxvY2tcclxue1xyXG4gICAgY29uc3RydWN0b3IgKCkgeyAgICAgICBcclxuICAgICAgICB0aGlzLmNyZWF0ZUFCbG9jayA9IGZ1bmN0aW9uKFNjZW5lZSwgUG9zWCwgUG9zWSl7XHJcbiAgICAgICAgICAgIC8vU2NlbmVlLmxvYWQuaW1hZ2UoJ0Jsb2NrJywgJ3NyYy9hc3NldHMvQmxvY2sucG5nJyk7XHJcbiAgICAgICAgICAgIHZhciBibG9jayA9IFNjZW5lZS5waHlzaWNzLmFkZC5pbWFnZShQb3NYLCBQb3NZLCAnQmxvY2snKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVBcnJheUJsb2NrID0gZnVuY3Rpb24oU2NlbmVlLCBQb3NYLCBQb3NZKXtcclxuICAgICAgICAgICAgLy9TY2VuZWUubG9hZC5pbWFnZSgnZGF5Q2hhdScsICdzcmMvYXNzZXRzL2FyckJsb2NrLnBuZycpO1xyXG4gICAgICAgICAgICB2YXIgYmxvY2sgPSBTY2VuZWUuYWRkLmltYWdlKFBvc1gsIFBvc1ksICdkYXlDaGF1Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/gameObject/Block.js\n");
 
/***/ }),
 
/***/ "./src/helper/Audio.js":
/*!*****************************!*\
  !*** ./src/helper/Audio.js ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n/* eslint-disable func-names */\n\n\nvar Audio = function Audio(scene, loa, amthanh) {\n  _classCallCheck(this, Audio);\n\n  this.playAudio = function () {\n    loa.setInteractive();\n    loa.on('pointerdown', function () {\n      amthanh.play();\n    });\n  };\n};\n\nexports.default = Audio;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaGVscGVyL0F1ZGlvLmpzP2JlOWYiXSwibmFtZXMiOlsiQXVkaW8iLCJsb2EiLCJhbXRoYW5oIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7O0lBQ3FCQSxLLEdBQ25CLG9DQUFpQztBQUFBOztBQUMvQixtQkFBaUIsWUFBWTtBQUMzQkMsT0FBRyxDQUFIQTtBQUNBQSxPQUFHLENBQUhBLGtCQUFzQixZQUFNO0FBQzFCQyxhQUFPLENBQVBBO0FBREZEO0FBRkYiLCJmaWxlIjoiLi9zcmMvaGVscGVyL0F1ZGlvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZnVuYy1uYW1lcyAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW8ge1xuICBjb25zdHJ1Y3RvcihzY2VuZSwgbG9hLCBhbXRoYW5oKSB7XG4gICAgdGhpcy5wbGF5QXVkaW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2Euc2V0SW50ZXJhY3RpdmUoKTtcbiAgICAgIGxvYS5vbigncG9pbnRlcmRvd24nLCAoKSA9PiB7XG4gICAgICAgIGFtdGhhbmgucGxheSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/helper/Audio.js\n");
 
/***/ }),
 
/***/ "./src/helper/BubbleBox.js":
/*!*********************************!*\
  !*** ./src/helper/BubbleBox.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.content = void 0;\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nvar content; // cái này chủ yếu là kĩ thuật dùng graphic, mọi người có thể tự tìm hiểu\n\nexports.content = content;\n\nvar BublleBox = function BublleBox(scene, width, height, quote, bubble, sizeFont) {\n  _classCallCheck(this, BublleBox);\n\n  _defineProperty(this, \"quote\", void 0);\n\n  this.bubble = bubble;\n  this.sizeFont = sizeFont;\n  this.quote = quote;\n\n  this.createBox = function () {\n    var bubbleWidth = width;\n    var bubbleHeight = height;\n    var bubblePadding = 10;\n    var arrowHeight = bubbleHeight / 4; //  Bubble shadow\n\n    bubble.fillStyle(0x222222, 0.5);\n    bubble.fillRoundedRect(6, 6, bubbleWidth, bubbleHeight, 16); //  Bubble color\n\n    bubble.fillStyle(0xffffff, 1); //  Bubble outline line style\n\n    bubble.lineStyle(4, 0x565656, 1); //  Bubble shape and outline\n\n    bubble.strokeRoundedRect(0, 0, bubbleWidth, bubbleHeight, 16);\n    bubble.fillRoundedRect(0, 0, bubbleWidth, bubbleHeight, 16);\n    exports.content = content = scene.add.text(0, 0, quote, {\n      fontFamily: 'Arial',\n      fontSize: sizeFont,\n      color: '#000000',\n      align: 'center',\n      wordWrap: {\n        width: bubbleWidth - bubblePadding * 2\n      }\n    });\n    var b = content.getBounds();\n    content.setPosition(bubble.x + bubbleWidth / 2 - b.width / 2, bubble.y + bubbleHeight / 2 - b.height / 2);\n  };\n\n  this.createText = function (txt) {\n    var bubbleWidth = width;\n    var bubbleHeight = height;\n    var bubblePadding = 10;\n    exports.content = content = scene.add.text(0, 0, txt, {\n      fontFamily: 'Arial',\n      fontSize: sizeFont,\n      color: '#000000',\n      align: 'center',\n      wordWrap: {\n        width: bubbleWidth - bubblePadding * 2\n      }\n    });\n    var b = content.getBounds();\n    content.setPosition(bubble.x + bubbleWidth / 2 - b.width / 2, bubble.y + bubbleHeight / 2 - b.height / 2);\n  };\n};\n\nexports.default = BublleBox;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaGVscGVyL0J1YmJsZUJveC5qcz84YWU0Il0sIm5hbWVzIjpbIkJ1YmxsZUJveCIsImJ1YmJsZVdpZHRoIiwiYnViYmxlSGVpZ2h0IiwiYnViYmxlUGFkZGluZyIsImFycm93SGVpZ2h0IiwiYnViYmxlIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiY29sb3IiLCJhbGlnbiIsIndvcmRXcmFwIiwid2lkdGgiLCJiIiwiY29udGVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNPLFksQ0FFUDs7OztJQUNxQkEsUyxHQUdqQixrRUFBMEQ7QUFBQTs7QUFBQTs7QUFDdEQ7QUFDQTtBQUNBOztBQUVBLG1CQUFpQixZQUFVO0FBQzNCLFFBQUlDLFdBQVcsR0FBZjtBQUNBLFFBQUlDLFlBQVksR0FBaEI7QUFDQSxRQUFJQyxhQUFhLEdBQWpCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHRixZQUFZLEdBSkgsQ0FJM0IsQ0FKMkIsQ0FPM0I7O0FBQ0FHLFVBQU0sQ0FBTkE7QUFDQUEsVUFBTSxDQUFOQSxpREFUMkIsRUFTM0JBLEVBVDJCLENBVzNCOztBQUNBQSxVQUFNLENBQU5BLG9CQVoyQixDQVkzQkEsRUFaMkIsQ0FjM0I7O0FBQ0FBLFVBQU0sQ0FBTkEsdUJBZjJCLENBZTNCQSxFQWYyQixDQWlCM0I7O0FBQ0FBLFVBQU0sQ0FBTkE7QUFDQUEsVUFBTSxDQUFOQTtBQUVBLDZCQUFPLEdBQUcsS0FBSyxDQUFMLHNCQUE0QjtBQUFFQyxnQkFBVSxFQUFaO0FBQXVCQyxjQUFRLEVBQS9CO0FBQTJDQyxXQUFLLEVBQWhEO0FBQTZEQyxXQUFLLEVBQWxFO0FBQThFQyxjQUFRLEVBQUU7QUFBRUMsYUFBSyxFQUFFVixXQUFXLEdBQUlFLGFBQWEsR0FBRztBQUF4QztBQUF4RixLQUE1QixDQUFWO0FBRUEsUUFBSVMsQ0FBQyxHQUFHQyxPQUFPLENBQWYsU0FBUUEsRUFBUjtBQUVBQSxXQUFPLENBQVBBLFlBQW9CUixNQUFNLENBQU5BLElBQVlKLFdBQVcsR0FBdkJJLElBQWdDTyxDQUFDLENBQURBLFFBQXBEQyxHQUFrRVIsTUFBTSxDQUFOQSxJQUFZSCxZQUFZLEdBQXhCRyxJQUFpQ08sQ0FBQyxDQUFEQSxTQUFuR0M7QUF6QkE7O0FBOEJBLG9CQUFrQixlQUFhO0FBQzNCLFFBQUlaLFdBQVcsR0FBZjtBQUNBLFFBQUlDLFlBQVksR0FBaEI7QUFDQSxRQUFJQyxhQUFhLEdBQWpCO0FBQ0EsNkJBQU8sR0FBRyxLQUFLLENBQUwsb0JBQTBCO0FBQUVHLGdCQUFVLEVBQVo7QUFBdUJDLGNBQVEsRUFBL0I7QUFBMkNDLFdBQUssRUFBaEQ7QUFBNkRDLFdBQUssRUFBbEU7QUFBOEVDLGNBQVEsRUFBRTtBQUFFQyxhQUFLLEVBQUVWLFdBQVcsR0FBSUUsYUFBYSxHQUFHO0FBQXhDO0FBQXhGLEtBQTFCLENBQVY7QUFFQSxRQUFJUyxDQUFDLEdBQUdDLE9BQU8sQ0FBZixTQUFRQSxFQUFSO0FBRUFBLFdBQU8sQ0FBUEEsWUFBb0JSLE1BQU0sQ0FBTkEsSUFBWUosV0FBVyxHQUF2QkksSUFBZ0NPLENBQUMsQ0FBREEsUUFBcERDLEdBQWtFUixNQUFNLENBQU5BLElBQVlILFlBQVksR0FBeEJHLElBQWlDTyxDQUFDLENBQURBLFNBQW5HQztBQVJKIiwiZmlsZSI6Ii4vc3JjL2hlbHBlci9CdWJibGVCb3guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IHZhciBjb250ZW50O1xyXG5cclxuLy8gY8OhaSBuw6B5IGNo4bunIHnhur91IGzDoCBrxKkgdGh14bqtdCBkw7luZyBncmFwaGljLCBt4buNaSBuZ8aw4budaSBjw7MgdGjhu4MgdOG7sSB0w6xtIGhp4buDdVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWJsbGVCb3hcclxue1xyXG4gICAgcXVvdGUgO1xyXG4gICAgY29uc3RydWN0b3Ioc2NlbmUsIHdpZHRoLCBoZWlnaHQsIHF1b3RlLCBidWJibGUsIHNpemVGb250KXtcclxuICAgICAgICB0aGlzLmJ1YmJsZSA9IGJ1YmJsZTtcclxuICAgICAgICB0aGlzLnNpemVGb250ID0gc2l6ZUZvbnQ7XHJcbiAgICAgICAgdGhpcy5xdW90ZSA9IHF1b3RlO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZUJveCA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdmFyIGJ1YmJsZVdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdmFyIGJ1YmJsZUhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB2YXIgYnViYmxlUGFkZGluZyA9IDEwO1xyXG4gICAgICAgIHZhciBhcnJvd0hlaWdodCA9IGJ1YmJsZUhlaWdodCAvIDQ7XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vICBCdWJibGUgc2hhZG93XHJcbiAgICAgICAgYnViYmxlLmZpbGxTdHlsZSgweDIyMjIyMiwgMC41KTtcclxuICAgICAgICBidWJibGUuZmlsbFJvdW5kZWRSZWN0KDYsIDYsIGJ1YmJsZVdpZHRoLCBidWJibGVIZWlnaHQsIDE2KTtcclxuXHJcbiAgICAgICAgLy8gIEJ1YmJsZSBjb2xvclxyXG4gICAgICAgIGJ1YmJsZS5maWxsU3R5bGUoMHhmZmZmZmYsIDEpO1xyXG5cclxuICAgICAgICAvLyAgQnViYmxlIG91dGxpbmUgbGluZSBzdHlsZVxyXG4gICAgICAgIGJ1YmJsZS5saW5lU3R5bGUoNCwgMHg1NjU2NTYsIDEpO1xyXG5cclxuICAgICAgICAvLyAgQnViYmxlIHNoYXBlIGFuZCBvdXRsaW5lXHJcbiAgICAgICAgYnViYmxlLnN0cm9rZVJvdW5kZWRSZWN0KDAsIDAsIGJ1YmJsZVdpZHRoLCBidWJibGVIZWlnaHQsIDE2KTtcclxuICAgICAgICBidWJibGUuZmlsbFJvdW5kZWRSZWN0KDAsIDAsIGJ1YmJsZVdpZHRoLCBidWJibGVIZWlnaHQsIDE2KTtcclxuXHJcbiAgICAgICAgY29udGVudCA9IHNjZW5lLmFkZC50ZXh0KDAsIDAsIHF1b3RlLCB7IGZvbnRGYW1pbHk6ICdBcmlhbCcsIGZvbnRTaXplOiBzaXplRm9udCwgY29sb3I6ICcjMDAwMDAwJywgYWxpZ246ICdjZW50ZXInLCB3b3JkV3JhcDogeyB3aWR0aDogYnViYmxlV2lkdGggLSAoYnViYmxlUGFkZGluZyAqIDIpIH0gfSk7XHJcblxyXG4gICAgICAgIHZhciBiID0gY29udGVudC5nZXRCb3VuZHMoKTtcclxuXHJcbiAgICAgICAgY29udGVudC5zZXRQb3NpdGlvbihidWJibGUueCArIChidWJibGVXaWR0aCAvIDIpIC0gKGIud2lkdGggLyAyKSwgYnViYmxlLnkgKyAoYnViYmxlSGVpZ2h0IC8gMikgLSAoYi5oZWlnaHQgLyAyKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVRleHQgPSBmdW5jdGlvbih0eHQpe1xyXG4gICAgICAgICAgICB2YXIgYnViYmxlV2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgdmFyIGJ1YmJsZUhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdmFyIGJ1YmJsZVBhZGRpbmcgPSAxMDtcclxuICAgICAgICAgICAgY29udGVudCA9IHNjZW5lLmFkZC50ZXh0KDAsIDAsIHR4dCwgeyBmb250RmFtaWx5OiAnQXJpYWwnLCBmb250U2l6ZTogc2l6ZUZvbnQsIGNvbG9yOiAnIzAwMDAwMCcsIGFsaWduOiAnY2VudGVyJywgd29yZFdyYXA6IHsgd2lkdGg6IGJ1YmJsZVdpZHRoIC0gKGJ1YmJsZVBhZGRpbmcgKiAyKSB9IH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGIgPSBjb250ZW50LmdldEJvdW5kcygpO1xyXG5cclxuICAgICAgICAgICAgY29udGVudC5zZXRQb3NpdGlvbihidWJibGUueCArIChidWJibGVXaWR0aCAvIDIpIC0gKGIud2lkdGggLyAyKSwgYnViYmxlLnkgKyAoYnViYmxlSGVpZ2h0IC8gMikgLSAoYi5oZWlnaHQgLyAyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/helper/BubbleBox.js\n");
 
/***/ }),
 
/***/ "./src/helper/DragManager.js":
/*!***********************************!*\
  !*** ./src/helper/DragManager.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.spaceValid = void 0;\n\n__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\");\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar index = 0; // var check = true;\n\nvar spaceValid = [true, true, true, true, true, true, true, true, true, true];\nexports.spaceValid = spaceValid;\n\nvar DragManager = function DragManager(scene, blockArr, holderArr, initGgPosX, initGgPosY, numberOfBox) {\n  _classCallCheck(this, DragManager); // dragHoa là 1 function\n\n\n  this.dragHoa = function () {\n    for (var i = 0; i < numberOfBox; i++) {\n      blockArr[i].setInteractive();\n      scene.input.setDraggable(blockArr[i]);\n    } // nhớ là set Draggable ở phía trên mới dùng được dragstart, drag, dragend này nhé\n\n\n    scene.input.on('dragstart', function (pointer, gameObject, dragX, dragY) {\n      for (var _i = 0; _i < numberOfBox; _i++) {\n        // Game object ở đây là đối tượng mà mình drag\n        if (gameObject.x == initGgPosX[_i] && gameObject.y == initGgPosY[_i]) {\n          index = _i; // console.log(index);\n        }\n      }\n    }); // console.log(index);\n\n    scene.input.on('drag', function (pointer, gameObject, dragX, dragY) {\n      gameObject.x = dragX;\n      gameObject.y = dragY;\n      console.log('jfds');\n\n      for (var _i2 = 0; _i2 < numberOfBox; _i2++) {\n        if (Math.abs(gameObject.x - holderArr[_i2].x) < 30 && Math.abs(gameObject.y - holderArr[_i2].y) < 100) {\n          if (spaceValid[_i2] == true) {\n            holderArr[_i2].setTint(0xffff00, 0xffff00, 0xff0000, 0xff0000);\n          } // console.log(i);\n\n        } else {\n          holderArr[_i2].setTint(0xffffff);\n        }\n      }\n    });\n    scene.input.on('dragend', function (pointer, gameObject) {\n      var check = true;\n\n      for (var _i3 = 0; _i3 < numberOfBox; _i3++) {\n        if (Math.abs(gameObject.x - holderArr[_i3].x) < 30 && Math.abs(gameObject.y - holderArr[_i3].y) < 100) {\n          if (spaceValid[_i3]) {\n            gameObject.x = holderArr[_i3].x;\n            gameObject.y = holderArr[_i3].y - 18;\n            check = false;\n            spaceValid[_i3] = false;\n\n            holderArr[_i3].setTint(0xffffff); // hàm disable cái tính chất interactive của object\n\n\n            scene.input.disable(gameObject);\n            break;\n          } else {\n            holderArr[_i3].setTint(0xffffff); // hàm di chuyển 1 object, nhớ là phải set object ở dạng physics mới dùng được hàm này\n\n\n            scene.physics.moveTo(gameObject, initGgPosX[index], initGgPosY[index], 400);\n          }\n        } else {}\n      } // console.log(check);\n\n\n      if (check) {\n        scene.physics.moveTo(gameObject, initGgPosX[index], initGgPosY[index], 400);\n      }\n    }, scene);\n  };\n};\n\nexports.default = DragManager;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaGVscGVyL0RyYWdNYW5hZ2VyLmpzP2E1OGYiXSwibmFtZXMiOlsiaW5kZXgiLCJzcGFjZVZhbGlkIiwiRHJhZ01hbmFnZXIiLCJpIiwiYmxvY2tBcnIiLCJzY2VuZSIsImdhbWVPYmplY3QiLCJpbml0R2dQb3NYIiwiaW5pdEdnUG9zWSIsImNvbnNvbGUiLCJNYXRoIiwiaG9sZGVyQXJyIiwiY2hlY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7Ozs7Ozs7QUFFQSxJQUFJQSxLQUFLLEdBQVQsRSxDQUNBOztBQUNPLElBQUlDLFVBQVUsR0FBRyx1REFBakIsSUFBaUIsQ0FBakI7OztJQUNjQyxXLEdBQ25CLHNGQUE2RTtBQUFBLHNDQUMzRTs7O0FBQ0EsaUJBQWUsWUFBWTtBQUN6QixTQUFLLElBQUlDLENBQUMsR0FBVixHQUFnQkEsQ0FBQyxHQUFqQixhQUFpQ0EsQ0FBakMsSUFBc0M7QUFDcENDLGNBQVEsQ0FBUkEsQ0FBUSxDQUFSQTtBQUNBQyxXQUFLLENBQUxBLG1CQUF5QkQsUUFBUSxDQUFqQ0MsQ0FBaUMsQ0FBakNBO0FBSHVCLE1BS3pCOzs7QUFDQUEsU0FBSyxDQUFMQSxzQkFBNEIsNkNBQXVDO0FBQ2pFLFdBQUssSUFBSUYsRUFBQyxHQUFWLEdBQWdCQSxFQUFDLEdBQWpCLGFBQWlDQSxFQUFqQyxJQUFzQztBQUNwQztBQUNBLFlBQUlHLFVBQVUsQ0FBVkEsS0FBZ0JDLFVBQVUsQ0FBMUJELEVBQTBCLENBQTFCQSxJQUFpQ0EsVUFBVSxDQUFWQSxLQUFnQkUsVUFBVSxDQUEvRCxFQUErRCxDQUEvRCxFQUFvRTtBQUNsRVIsZUFBSyxHQUQ2RCxFQUNsRUEsQ0FEa0UsQ0FFbEU7QUFDRDtBQUNGO0FBYnNCLEtBTXpCSyxFQU55QixDQWdCekI7O0FBRUFBLFNBQUssQ0FBTEEsaUJBQXVCLDZDQUF1QztBQUM1REMsZ0JBQVUsQ0FBVkE7QUFDQUEsZ0JBQVUsQ0FBVkE7QUFDQUcsYUFBTyxDQUFQQTs7QUFFQSxXQUFLLElBQUlOLEdBQUMsR0FBVixHQUFnQkEsR0FBQyxHQUFqQixhQUFpQ0EsR0FBakMsSUFBc0M7QUFDcEMsWUFBSU8sSUFBSSxDQUFKQSxJQUFTSixVQUFVLENBQVZBLElBQWVLLFNBQVMsQ0FBVEEsR0FBUyxDQUFUQSxDQUF4QkQsV0FBZ0RBLElBQUksQ0FBSkEsSUFBU0osVUFBVSxDQUFWQSxJQUFlSyxTQUFTLENBQVRBLEdBQVMsQ0FBVEEsQ0FBeEJELEtBQXBELEtBQW1HO0FBQ2pHLGNBQUlULFVBQVUsQ0FBVkEsR0FBVSxDQUFWQSxJQUFKLE1BQTJCO0FBQ3pCVSxxQkFBUyxDQUFUQSxHQUFTLENBQVRBO0FBRitGLFlBSWpHOztBQUpGLGVBS087QUFDTEEsbUJBQVMsQ0FBVEEsR0FBUyxDQUFUQTtBQUNEO0FBQ0Y7QUFkSE47QUFpQkFBLFNBQUssQ0FBTEEsb0JBQTBCLCtCQUF5QjtBQUNqRCxVQUFJTyxLQUFLLEdBQVQ7O0FBQ0EsV0FBSyxJQUFJVCxHQUFDLEdBQVYsR0FBZ0JBLEdBQUMsR0FBakIsYUFBaUNBLEdBQWpDLElBQXNDO0FBQ3BDLFlBQUlPLElBQUksQ0FBSkEsSUFBU0osVUFBVSxDQUFWQSxJQUFlSyxTQUFTLENBQVRBLEdBQVMsQ0FBVEEsQ0FBeEJELFdBQWdEQSxJQUFJLENBQUpBLElBQVNKLFVBQVUsQ0FBVkEsSUFBZUssU0FBUyxDQUFUQSxHQUFTLENBQVRBLENBQXhCRCxLQUFwRCxLQUFtRztBQUNqRyxjQUFJVCxVQUFVLENBQWQsR0FBYyxDQUFkLEVBQW1CO0FBQ2pCSyxzQkFBVSxDQUFWQSxJQUFlSyxTQUFTLENBQVRBLEdBQVMsQ0FBVEEsQ0FBZkw7QUFDQUEsc0JBQVUsQ0FBVkEsSUFBZUssU0FBUyxDQUFUQSxHQUFTLENBQVRBLEtBQWZMO0FBQ0FNLGlCQUFLLEdBQUxBO0FBQ0FYLHNCQUFVLENBQVZBLEdBQVUsQ0FBVkE7O0FBQ0FVLHFCQUFTLENBQVRBLEdBQVMsQ0FBVEEsU0FMaUIsUUFLakJBLEVBTGlCLENBTWpCOzs7QUFDQU4saUJBQUssQ0FBTEE7QUFDQTtBQVJGLGlCQVNPO0FBQ0xNLHFCQUFTLENBQVRBLEdBQVMsQ0FBVEEsU0FESyxRQUNMQSxFQURLLENBRUw7OztBQUNBTixpQkFBSyxDQUFMQSwyQkFBaUNFLFVBQVUsQ0FBM0NGLEtBQTJDLENBQTNDQSxFQUFvREcsVUFBVSxDQUE5REgsS0FBOEQsQ0FBOURBO0FBQ0Q7QUFkSCxlQWVPLENBRU47QUFwQjhDLFFBc0JqRDs7O0FBQ0EsaUJBQVc7QUFDVEEsYUFBSyxDQUFMQSwyQkFBaUNFLFVBQVUsQ0FBM0NGLEtBQTJDLENBQTNDQSxFQUFvREcsVUFBVSxDQUE5REgsS0FBOEQsQ0FBOURBO0FBQ0Q7QUF6QkhBO0FBbkNGIiwiZmlsZSI6Ii4vc3JjL2hlbHBlci9EcmFnTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1tdXRhYmxlLWV4cG9ydHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuaW1wb3J0ICdwaGFzZXInO1xuXG5sZXQgaW5kZXggPSAwO1xuLy8gdmFyIGNoZWNrID0gdHJ1ZTtcbmV4cG9ydCB2YXIgc3BhY2VWYWxpZCA9IFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWdNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3Ioc2NlbmUsIGJsb2NrQXJyLCBob2xkZXJBcnIsIGluaXRHZ1Bvc1gsIGluaXRHZ1Bvc1ksIG51bWJlck9mQm94KSB7XG4gICAgLy8gZHJhZ0hvYSBsw6AgMSBmdW5jdGlvblxuICAgIHRoaXMuZHJhZ0hvYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCb3g7IGkrKykge1xuICAgICAgICBibG9ja0FycltpXS5zZXRJbnRlcmFjdGl2ZSgpO1xuICAgICAgICBzY2VuZS5pbnB1dC5zZXREcmFnZ2FibGUoYmxvY2tBcnJbaV0pO1xuICAgICAgfVxuICAgICAgLy8gbmjhu5sgbMOgIHNldCBEcmFnZ2FibGUg4bufIHBow61hIHRyw6puIG3hu5tpIGTDuW5nIMSRxrDhu6NjIGRyYWdzdGFydCwgZHJhZywgZHJhZ2VuZCBuw6B5IG5ow6lcbiAgICAgIHNjZW5lLmlucHV0Lm9uKCdkcmFnc3RhcnQnLCAocG9pbnRlciwgZ2FtZU9iamVjdCwgZHJhZ1gsIGRyYWdZKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCb3g7IGkrKykge1xuICAgICAgICAgIC8vIEdhbWUgb2JqZWN0IOG7nyDEkcOieSBsw6AgxJHhu5FpIHTGsOG7o25nIG3DoCBtw6xuaCBkcmFnXG4gICAgICAgICAgaWYgKGdhbWVPYmplY3QueCA9PSBpbml0R2dQb3NYW2ldICYmIGdhbWVPYmplY3QueSA9PSBpbml0R2dQb3NZW2ldKSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gY29uc29sZS5sb2coaW5kZXgpO1xuXG4gICAgICBzY2VuZS5pbnB1dC5vbignZHJhZycsIChwb2ludGVyLCBnYW1lT2JqZWN0LCBkcmFnWCwgZHJhZ1kpID0+IHtcbiAgICAgICAgZ2FtZU9iamVjdC54ID0gZHJhZ1g7XG4gICAgICAgIGdhbWVPYmplY3QueSA9IGRyYWdZO1xuICAgICAgICBjb25zb2xlLmxvZygnamZkcycpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCb3g7IGkrKykge1xuICAgICAgICAgIGlmIChNYXRoLmFicyhnYW1lT2JqZWN0LnggLSBob2xkZXJBcnJbaV0ueCkgPCAzMCAmJiBNYXRoLmFicyhnYW1lT2JqZWN0LnkgLSBob2xkZXJBcnJbaV0ueSkgPCAxMDApIHtcbiAgICAgICAgICAgIGlmIChzcGFjZVZhbGlkW2ldID09IHRydWUpIHtcbiAgICAgICAgICAgICAgaG9sZGVyQXJyW2ldLnNldFRpbnQoMHhmZmZmMDAsIDB4ZmZmZjAwLCAweGZmMDAwMCwgMHhmZjAwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvbGRlckFycltpXS5zZXRUaW50KDB4ZmZmZmZmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzY2VuZS5pbnB1dC5vbignZHJhZ2VuZCcsIChwb2ludGVyLCBnYW1lT2JqZWN0KSA9PiB7XG4gICAgICAgIGxldCBjaGVjayA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCb3g7IGkrKykge1xuICAgICAgICAgIGlmIChNYXRoLmFicyhnYW1lT2JqZWN0LnggLSBob2xkZXJBcnJbaV0ueCkgPCAzMCAmJiBNYXRoLmFicyhnYW1lT2JqZWN0LnkgLSBob2xkZXJBcnJbaV0ueSkgPCAxMDApIHtcbiAgICAgICAgICAgIGlmIChzcGFjZVZhbGlkW2ldKSB7XG4gICAgICAgICAgICAgIGdhbWVPYmplY3QueCA9IGhvbGRlckFycltpXS54O1xuICAgICAgICAgICAgICBnYW1lT2JqZWN0LnkgPSBob2xkZXJBcnJbaV0ueSAtIDE4O1xuICAgICAgICAgICAgICBjaGVjayA9IGZhbHNlO1xuICAgICAgICAgICAgICBzcGFjZVZhbGlkW2ldID0gZmFsc2U7XG4gICAgICAgICAgICAgIGhvbGRlckFycltpXS5zZXRUaW50KDB4ZmZmZmZmKTtcbiAgICAgICAgICAgICAgLy8gaMOgbSBkaXNhYmxlIGPDoWkgdMOtbmggY2jhuqV0IGludGVyYWN0aXZlIGPhu6dhIG9iamVjdFxuICAgICAgICAgICAgICBzY2VuZS5pbnB1dC5kaXNhYmxlKGdhbWVPYmplY3QpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGhvbGRlckFycltpXS5zZXRUaW50KDB4ZmZmZmZmKTtcbiAgICAgICAgICAgICAgLy8gaMOgbSBkaSBjaHV54buDbiAxIG9iamVjdCwgbmjhu5sgbMOgIHBo4bqjaSBzZXQgb2JqZWN0IOG7nyBk4bqhbmcgcGh5c2ljcyBt4bubaSBkw7luZyDEkcaw4bujYyBow6BtIG7DoHlcbiAgICAgICAgICAgICAgc2NlbmUucGh5c2ljcy5tb3ZlVG8oZ2FtZU9iamVjdCwgaW5pdEdnUG9zWFtpbmRleF0sIGluaXRHZ1Bvc1lbaW5kZXhdLCA0MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coY2hlY2spO1xuICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICBzY2VuZS5waHlzaWNzLm1vdmVUbyhnYW1lT2JqZWN0LCBpbml0R2dQb3NYW2luZGV4XSwgaW5pdEdnUG9zWVtpbmRleF0sIDQwMCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHNjZW5lKTtcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/helper/DragManager.js\n");
 
/***/ }),
 
/***/ "./src/helper/FdInFdOut.js":
/*!*********************************!*\
  !*** ./src/helper/FdInFdOut.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar FdInFdOut = function FdInFdOut(scene) {\n  _classCallCheck(this, FdInFdOut);\n\n  this.FdIn = function (obj1, obj2) {\n    scene.tweens.add({\n      targets: [obj1, obj2],\n      alpha: 0,\n      duration: 1000,\n      ease: 'Power2'\n    }, scene);\n  };\n\n  this.FdOut = function (obj1, obj2) {\n    scene.tweens.add({\n      targets: [obj1, obj2],\n      alpha: 1,\n      duration: 1000,\n      ease: 'Power2'\n    }, scene);\n  };\n};\n\nexports.default = FdInFdOut;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaGVscGVyL0ZkSW5GZE91dC5qcz9jODQ3Il0sIm5hbWVzIjpbIkZkSW5GZE91dCIsInNjZW5lIiwidGFyZ2V0cyIsImFscGhhIiwiZHVyYXRpb24iLCJlYXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQXFCQSxTLEdBRWpCLDBCQUFrQjtBQUFBOztBQUNkLGNBQVksc0JBQW9CO0FBQzVCQyxTQUFLLENBQUxBLFdBQWlCO0FBQ2pCQyxhQUFPLEVBQUUsT0FEUSxJQUNSLENBRFE7QUFFakJDLFdBQUssRUFGWTtBQUdoQkMsY0FBUSxFQUhRO0FBSWpCQyxVQUFJLEVBQUU7QUFKVyxLQUFqQko7QUFESjs7QUFTQSxlQUFhLHNCQUFvQjtBQUM3QkEsU0FBSyxDQUFMQSxXQUFpQjtBQUNqQkMsYUFBTyxFQUFFLE9BRFEsSUFDUixDQURRO0FBRWpCQyxXQUFLLEVBRlk7QUFHakJDLGNBQVEsRUFIUztBQUlqQkMsVUFBSSxFQUFFO0FBSlcsS0FBakJKO0FBREoiLCJmaWxlIjoiLi9zcmMvaGVscGVyL0ZkSW5GZE91dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIEZkSW5GZE91dFxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihzY2VuZSl7XHJcbiAgICAgICAgdGhpcy5GZEluID0gZnVuY3Rpb24ob2JqMSwgb2JqMil7XHJcbiAgICAgICAgICAgIHNjZW5lLnR3ZWVucy5hZGQoe1xyXG4gICAgICAgICAgICB0YXJnZXRzOiBbb2JqMSwgb2JqMl0sXHJcbiAgICAgICAgICAgIGFscGhhOiAwLFxyXG4gICAgICAgICAgICAgZHVyYXRpb246IDEwMDAsXHJcbiAgICAgICAgICAgIGVhc2U6ICdQb3dlcjInXHJcbiAgICAgICAgICAgIH0sIHNjZW5lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuRmRPdXQgPSBmdW5jdGlvbihvYmoxLCBvYmoyKXtcclxuICAgICAgICAgICAgc2NlbmUudHdlZW5zLmFkZCh7XHJcbiAgICAgICAgICAgIHRhcmdldHM6IFtvYmoxLCBvYmoyXSxcclxuICAgICAgICAgICAgYWxwaGE6IDEsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAwLFxyXG4gICAgICAgICAgICBlYXNlOiAnUG93ZXIyJ1xyXG4gICAgICAgICAgICB9LCBzY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/helper/FdInFdOut.js\n");
 
/***/ }),
 
/***/ "./src/index.js":
/*!**********************!*\
  !*** ./src/index.js ***!
  \**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval("\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.game = void 0;\n\nvar _phaser = _interopRequireDefault(__webpack_require__(/*! phaser */ \"./node_modules/phaser/src/phaser.js\"));\n\nvar _config = _interopRequireDefault(__webpack_require__(/*! ./Config/config */ \"./src/Config/config.js\"));\n\nvar _GameScene = _interopRequireWildcard(__webpack_require__(/*! ./Scenes/GameScene */ \"./src/Scenes/GameScene.js\"));\n\nvar _Game1Scene = _interopRequireDefault(__webpack_require__(/*! ./Scenes/Game1Scene2 */ \"./src/Scenes/Game1Scene2.js\"));\n\nvar _Game1Scene2 = _interopRequireDefault(__webpack_require__(/*! ./Scenes/Game1Scene3 */ \"./src/Scenes/Game1Scene3.js\"));\n\nvar _Game1Scene3 = _interopRequireDefault(__webpack_require__(/*! ./Scenes/Game1Scene4 */ \"./src/Scenes/Game1Scene4.js\"));\n\nvar _Game1Scene4 = _interopRequireDefault(__webpack_require__(/*! ./Scenes/Game1Scene5 */ \"./src/Scenes/Game1Scene5.js\"));\n\nfunction _getRequireWildcardCache() {\n  if (typeof WeakMap !== \"function\") return null;\n  var cache = new WeakMap();\n\n  _getRequireWildcardCache = function _getRequireWildcardCache() {\n    return cache;\n  };\n\n  return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  }\n\n  if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n    return {\n      default: obj\n    };\n  }\n\n  var cache = _getRequireWildcardCache();\n\n  if (cache && cache.has(obj)) {\n    return cache.get(obj);\n  }\n\n  var newObj = {};\n  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n      if (desc && (desc.get || desc.set)) {\n        Object.defineProperty(newObj, key, desc);\n      } else {\n        newObj[key] = obj[key];\n      }\n    }\n  }\n\n  newObj.default = obj;\n\n  if (cache) {\n    cache.set(obj, newObj);\n  }\n\n  return newObj;\n}\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nvar Game =\n/*#__PURE__*/\nfunction (_Phaser$Game) {\n  _inherits(Game, _Phaser$Game);\n\n  function Game() {\n    var _this;\n\n    _classCallCheck(this, Game); // add cái config vào game\n\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Game).call(this, _config.default)); // add scene vào game\n\n    _this.scene.add('Game', _GameScene.default); // this.scene.add('Boot', BootScene);\n\n\n    _this.scene.add('Scene2', _Game1Scene.default);\n\n    _this.scene.add('Scene3', _Game1Scene2.default);\n\n    _this.scene.add('Scene4', _Game1Scene3.default);\n\n    _this.scene.add('Scene5', _Game1Scene4.default);\n\n    _this.scene.start('Scene2');\n\n    return _this;\n  }\n\n  return Game;\n}(_phaser.default.Game);\n\nvar game = new Game();\nexports.game = game;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanM/YjYzNSJdLCJuYW1lcyI6WyJHYW1lIiwiY29uZmlnIiwiR2FtZVNjZW5lIiwiR2FtZTFTY2VuZTIiLCJHYW1lMVNjZW5lMyIsIkdhbWUxU2NlbmU0IiwiR2FtZTFTY2VuZTUiLCJQaGFzZXIiLCJnYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVNQSxJOzs7OztBQUNKLGtCQUFjO0FBQUE7O0FBQUEsaUNBQ1o7OztBQUNBLDhFQUFNQyxRQUZNLE9BRVosR0FGWSxDQUlaOztBQUNBLDRCQUF1QkMsV0FMWCxPQUtaLEVBTFksQ0FNWjs7O0FBQ0EsOEJBQXlCQyxZQUF6Qjs7QUFDQSw4QkFBeUJDLGFBQXpCOztBQUNBLDhCQUF5QkMsYUFBekI7O0FBQ0EsOEJBQXlCQyxhQUF6Qjs7QUFDQTs7QUFYWTtBQVliOzs7RUFiZ0JDLGdCQUFPUCxJOztBQWdCbkIsSUFBSVEsSUFBSSxHQUFHLElBQVgsSUFBVyxFQUFYIiwiZmlsZSI6Ii4vc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdwaGFzZXInO1xuaW1wb3J0IFBoYXNlciBmcm9tIFwicGhhc2VyXCI7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vQ29uZmlnL2NvbmZpZyc7XG5pbXBvcnQgR2FtZVNjZW5lIGZyb20gJy4vU2NlbmVzL0dhbWVTY2VuZSc7XG5pbXBvcnQge3NvfSBmcm9tICcuL1NjZW5lcy9HYW1lU2NlbmUnO1xuaW1wb3J0IEdhbWUxU2NlbmUyIGZyb20gJy4vU2NlbmVzL0dhbWUxU2NlbmUyJztcbmltcG9ydCBHYW1lMVNjZW5lMyBmcm9tICcuL1NjZW5lcy9HYW1lMVNjZW5lMyc7XG5pbXBvcnQgR2FtZTFTY2VuZTQgZnJvbSAnLi9TY2VuZXMvR2FtZTFTY2VuZTQnO1xuaW1wb3J0IEdhbWUxU2NlbmU1IGZyb20gJy4vU2NlbmVzL0dhbWUxU2NlbmU1JztcblxuY2xhc3MgR2FtZSBleHRlbmRzIFBoYXNlci5HYW1lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gYWRkIGPDoWkgY29uZmlnIHbDoG8gZ2FtZVxuICAgIHN1cGVyKGNvbmZpZyk7XG5cbiAgICAvLyBhZGQgc2NlbmUgdsOgbyBnYW1lXG4gICAgdGhpcy5zY2VuZS5hZGQoJ0dhbWUnLCBHYW1lU2NlbmUpO1xuICAgIC8vIHRoaXMuc2NlbmUuYWRkKCdCb290JywgQm9vdFNjZW5lKTtcbiAgICB0aGlzLnNjZW5lLmFkZCgnU2NlbmUyJywgR2FtZTFTY2VuZTIpO1xuICAgIHRoaXMuc2NlbmUuYWRkKCdTY2VuZTMnLCBHYW1lMVNjZW5lMyk7XG4gICAgdGhpcy5zY2VuZS5hZGQoJ1NjZW5lNCcsIEdhbWUxU2NlbmU0KTtcbiAgICB0aGlzLnNjZW5lLmFkZCgnU2NlbmU1JywgR2FtZTFTY2VuZTUpO1xuICAgIHRoaXMuc2NlbmUuc3RhcnQoJ1NjZW5lMicpO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgZ2FtZSA9IG5ldyBHYW1lKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n");
 
/***/ }),
 
/***/ 0:
/*!******************************************************************************!*\
  !*** multi (webpack)-dev-server/client?http://localhost:8080 ./src/index.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
 
__webpack_require__(/*! C:\cnpm\game1\node_modules\webpack-dev-server\client\index.js?http://localhost:8080 */"./node_modules/webpack-dev-server/client/index.js?http://localhost:8080");
module.exports = __webpack_require__(/*! ./src/index.js */"./src/index.js");
 
 
/***/ })
 
/******/ });